(this.webpackChunkdiscord_app = this.webpackChunkdiscord_app || []).push([ ["27519"], { 290034: function(e, t, n) { var i = { "./bg.jsona": function() { return n.e("20575") }, "./cs.jsona": function() { return n.e("87233") }, "./da.jsona": function() { return n.e("57387") }, "./de.jsona": function() { return n.e("30244") }, "./el.jsona": function() { return n.e("55601") }, "./en-GB.jsona": function() { return n.e("99339") }, "./es-419.jsona": function() { return n.e("59729") }, "./es-ES.jsona": function() { return n.e("45747") }, "./fi.jsona": function() { return n.e("7402") }, "./fr.jsona": function() { return n.e("99450") }, "./hi.jsona": function() { return n.e("22732") }, "./hr.jsona": function() { return n.e("29924") }, "./hu.jsona": function() { return n.e("98570") }, "./id.jsona": function() { return n.e("77800") }, "./it.jsona": function() { return n.e("78670") }, "./ja.jsona": function() { return n.e("7728") }, "./ko.jsona": function() { return n.e("30478") }, "./lt.jsona": function() { return n.e("44754") }, "./nl.jsona": function() { return n.e("41588") }, "./no.jsona": function() { return n.e("63676") }, "./pl.jsona": function() { return n.e("60878") }, "./pt-BR.jsona": function() { return n.e("394") }, "./ro.jsona": function() { return n.e("53269") }, "./ru.jsona": function() { return n.e("12611") }, "./sv-SE.jsona": function() { return n.e("11193") }, "./th.jsona": function() { return n.e("49827") }, "./tr.jsona": function() { return n.e("84385") }, "./uk.jsona": function() { return n.e("58548") }, "./vi.jsona": function() { return n.e("45576") }, "./zh-CN.jsona": function() { return n.e("56446") }, "./zh-TW.jsona": function() { return n.e("30684") } }, r = { "./bg.jsona": "251927", "./cs.jsona": "753771", "./da.jsona": "44867", "./de.jsona": "644753", "./el.jsona": "581144", "./en-GB.jsona": "569249", "./es-419.jsona": "39227", "./es-ES.jsona": "872550", "./fi.jsona": "554545", "./fr.jsona": "570173", "./hi.jsona": "629869", "./hr.jsona": "403530", "./hu.jsona": "107425", "./id.jsona": "492248", "./it.jsona": "515630", "./ja.jsona": "588688", "./ko.jsona": "264737", "./lt.jsona": "877749", "./nl.jsona": "432763", "./no.jsona": "211198", "./pl.jsona": "477384", "./pt-BR.jsona": "246297", "./ro.jsona": "37190", "./ru.jsona": "809464", "./sv-SE.jsona": "335417", "./th.jsona": "182260", "./tr.jsona": "146878", "./uk.jsona": "167111", "./vi.jsona": "139107", "./zh-CN.jsona": "494062", "./zh-TW.jsona": "592369" }; function s(e) { if (!n.o(r, e)) return Promise.resolve().then(function() { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t }); var t = i[e], s = r[e]; return t().then(function() { return n.t(s, 19) }) } s.keys = function() { return Object.keys(r) }, s.id = "290034", e.exports = s }, 866483: function(e, t, n) { var i = { "./2017-11-16.mp4": "221825", "./2019-12-17.mp4": "666940", "./channel-following.png": "247815", "./discovery.jpg": "778608", "./discriminator.mp4": "990860", "./g250k-cl.mp4": "909851", "./header.mp4": "568621", "./hypesquad-hack-week/header.png": "819091", "./hypesquad-hack-week/paladins-loot.png": "742305", "./ko-new-year.jpg": "265921", "./league-rp-cl.mp4": "566584", "./polish-week.png": "560437", "./special-template/desktop-cta.png": "846033", "./special-template/update-badge.svg": "623904", "./stickers-launch/2020_PMM_STICKERS_Mrkt_BlogHdr_2500x1000.png": "928400", "./stickers-launch/2020_PMM_STICKERS_Mrkt_DesktopHero_Left_180x220.png": "148821", "./stickers-launch/2020_PMM_STICKERS_Mrkt_DesktopHero_Right_180x220.png": "982563", "./stickers-launch/2020_PMM_STICKERS_Mrkt_Desktop_Changelog_658X220.png": "331628", "./stickers-launch/2020_PMM_STICKERS_Mrkt_Desktop_FooterCTA_238x220.png": "765198", "./stickers-launch/2020_PMM_STICKERS_Mrkt_MobileHero_375x190.png": "199469", "./stickers-launch/2020_PMM_STICKERS_Mrkt_Mobile_FooterCTA_343x78.png": "199612", "./store.jpg": "926213" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"866483"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 435362: function(e, t, n) { var i = { "./icon-file-acrobat.svg": "621680", "./icon-file-ae.svg": "725345", "./icon-file-ai.svg": "673762", "./icon-file-archive.svg": "788525", "./icon-file-audio.svg": "331906", "./icon-file-code.svg": "894990", "./icon-file-document.svg": "674720", "./icon-file-image.svg": "109837", "./icon-file-ps.svg": "504514", "./icon-file-sketch.svg": "392807", "./icon-file-spreadsheet.svg": "291410", "./icon-file-unknown.svg": "516083", "./icon-file-video.svg": "430539", "./icon-file-webcode.svg": "343305" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"435362"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 36837: function(e, t, n) { var i = { "./spritesheet--32.png": "188244", "./spritesheet--40.png": "40853", "./spritesheet--48.png": "981835", "./spritesheet-1f3fb-32.png": "48472", "./spritesheet-1f3fb-40.png": "749889", "./spritesheet-1f3fb-48.png": "268687", "./spritesheet-1f3fc-32.png": "635611", "./spritesheet-1f3fc-40.png": "77280", "./spritesheet-1f3fc-48.png": "679878", "./spritesheet-1f3fd-32.png": "102274", "./spritesheet-1f3fd-40.png": "918047", "./spritesheet-1f3fd-48.png": "32030", "./spritesheet-1f3fe-32.png": "542711", "./spritesheet-1f3fe-40.png": "855266", "./spritesheet-1f3fe-48.png": "897906", "./spritesheet-1f3ff-32.png": "209369", "./spritesheet-1f3ff-40.png": "862861", "./spritesheet-1f3ff-48.png": "300878", "./spritesheet-emoji-32.png": "63215", "./spritesheet-emoji-40.png": "926720", "./spritesheet-emoji-48.png": "332936", "./spritesheet-picker-22.png": "899565" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"36837"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 12302: function(e, t, n) { var i = { "./spritesheet-emoji-32.png": "63215", "./spritesheet-emoji-40.png": "926720", "./spritesheet-emoji-48.png": "332936" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"12302"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 236816: function(e, t, n) { var i = { "./activities-rocket-time.mp3": "689096", "./activity_end.mp3": "90152", "./activity_launch.mp3": "12790", "./activity_user_join.mp3": "9907", "./activity_user_left.mp3": "852674", "./asmr_message1.mp3": "212326", "./bit_message1.mp3": "383471", "./bop_message1.mp3": "447995", "./call_calling.mp3": "646188", "./call_ringing.mp3": "563705", "./call_ringing_beat.mp3": "271527", "./call_ringing_halloween.mp3": "768953", "./call_ringing_snow_halation.mp3": "988363", "./call_ringing_snowsgiving.mp3": "36644", "./clip_error.mp3": "45594", "./clip_save.mp3": "121420", "./ddr-down.mp3": "87962", "./ddr-left.mp3": "255237", "./ddr-right.mp3": "856163", "./ddr-up.mp3": "722237", "./deafen.mp3": "585389", "./detune_call_calling.mp3": "72474", "./detune_call_ringing.mp3": "476934", "./detune_deafen.mp3": "192523", "./detune_discodo.mp3": "581909", "./detune_disconnect.mp3": "230105", "./detune_message1.mp3": "687904", "./detune_mute.mp3": "44871", "./detune_ptt_start.mp3": "227531", "./detune_ptt_stop.mp3": "503986", "./detune_stream_ended.mp3": "88094", "./detune_stream_started.mp3": "606247", "./detune_stream_user_joined.mp3": "396419", "./detune_stream_user_left.mp3": "169394", "./detune_undeafen.mp3": "912417", "./detune_unmute.mp3": "546738", "./detune_user_join.mp3": "461220", "./detune_user_leave.mp3": "614430", "./detune_user_moved.mp3": "488303", "./discodo.mp3": "361510", "./disconnect.mp3": "554771", "./ducky_message1.mp3": "514266", "./hang_status_select.mp3": "685673", "./highfive_clap.mp3": "696730", "./highfive_whistle.mp3": "656602", "./human_man.mp3": "129538", "./lofi_message1.mp3": "560091", "./mention1.mp3": "76795", "./mention2.mp3": "512911", "./mention3.mp3": "169601", "./message1.mp3": "874289", "./message2.mp3": "790990", "./message3.mp3": "30171", "./mute.mp3": "612104", "./overlayunlock.mp3": "983425", "./poggermode_achievement_unlock.mp3": "670191", "./poggermode_applause.mp3": "874878", "./poggermode_enabled.mp3": "733804", "./poggermode_message_send.mp3": "273303", "./ptt_start.mp3": "256104", "./ptt_stop.mp3": "320349", "./reconnect.mp3": "481734", "./robot_man.mp3": "19585", "./stage_waiting.mp3": "617510", "./stream_ended.mp3": "307334", "./stream_started.mp3": "911368", "./stream_user_joined.mp3": "195129", "./stream_user_left.mp3": "828660", "./success.mp3": "499353", "./undeafen.mp3": "939891", "./unmute.mp3": "360394", "./user_join.mp3": "377100", "./user_leave.mp3": "351645", "./user_moved.mp3": "426354", "./vibing_wumpus.mp3": "778184" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"236816"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 174498: function(e) { let t = {}; t.isSafari = function() { return navigator?.vendor && navigator?.vendor?.indexOf("Apple") > -1 && navigator.userAgent && -1 == navigator.userAgent.indexOf("CriOS") && -1 == navigator.userAgent.indexOf("FxiOS") }, t.isMobile = function() { let e = navigator.userAgent || navigator?.vendor || window?.opera; return /iPhone|iPad|iPod|Android|IEMobile|Windows Phone|BlackBerry|webOS|Opera Mini|Nexus 7|Nexus 10|KFAPWI/i.test(e) || /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0, 4)) }, e.exports = function() { return !(0, t.isSafari)() && !(0, t.isMobile)() } }, 867444: function(e, t, n) { var i = { "./ggsans-400-normal.woff2": function() { return Promise.resolve() }, "./ggsans-400-normalitalic.woff2": function() { return Promise.resolve() }, "./ggsans-500-medium.woff2": function() { return Promise.resolve() }, "./ggsans-500-mediumitalic.woff2": function() { return Promise.resolve() }, "./ggsans-600-semibold.woff2": function() { return Promise.resolve() }, "./ggsans-600-semibolditalic.woff2": function() { return Promise.resolve() }, "./ggsans-700-bold.woff2": function() { return Promise.resolve() }, "./ggsans-700-bolditalic.woff2": function() { return Promise.resolve() }, "./ggsans-800-extrabold.woff2": function() { return Promise.resolve() }, "./ggsans-800-extrabolditalic.woff2": function() { return Promise.resolve() } }, r = { "./ggsans-400-normal.woff2": "776764", "./ggsans-400-normalitalic.woff2": "963686", "./ggsans-500-medium.woff2": "5983", "./ggsans-500-mediumitalic.woff2": "811135", "./ggsans-600-semibold.woff2": "151859", "./ggsans-600-semibolditalic.woff2": "480854", "./ggsans-700-bold.woff2": "909671", "./ggsans-700-bolditalic.woff2": "228978", "./ggsans-800-extrabold.woff2": "362799", "./ggsans-800-extrabolditalic.woff2": "69891" }; function s(e) { if (!n.o(r, e)) return Promise.resolve().then(function() { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t }); var t = i[e], s = r[e]; return t().then(function() { return n.t(s, 17) }) } s.keys = function() { return Object.keys(r) }, s.id = "867444", e.exports = s }, 677762: function(e, t, n) { var i = { "./bg": "853343", "./bg.json": "853343", "./cs": "820189", "./cs.json": "820189", "./da": "566933", "./da.json": "566933", "./de": "624854", "./de.json": "624854", "./el": "709790", "./el.json": "709790", "./en-GB": "257037", "./en-GB.json": "257037", "./en-US": "79209", "./en-US.js": "79209", "./es-ES": "165243", "./es-ES.json": "165243", "./fi": "419485", "./fi.json": "419485", "./fr": "994374", "./fr.json": "994374", "./hi": "254883", "./hi.json": "254883", "./hr": "601203", "./hr.json": "601203", "./hu": "275118", "./hu.json": "275118", "./id": "12642", "./id.json": "12642", "./it": "391577", "./it.json": "391577", "./ja": "830666", "./ja.json": "830666", "./ko": "67653", "./ko.json": "67653", "./lt": "728109", "./lt.json": "728109", "./nl": "385220", "./nl.json": "385220", "./no": "223077", "./no.json": "223077", "./pl": "576083", "./pl.json": "576083", "./pt-BR": "969156", "./pt-BR.json": "969156", "./ro": "487147", "./ro.json": "487147", "./ru": "259772", "./ru.json": "259772", "./sv-SE": "159636", "./sv-SE.json": "159636", "./th": "606543", "./th.json": "606543", "./tr": "818270", "./tr.json": "818270", "./uk": "344715", "./uk.json": "344715", "./vi": "716830", "./vi.json": "716830", "./zh-CN": "184609", "./zh-CN.json": "184609", "./zh-TW": "223797", "./zh-TW.json": "223797" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"677762"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 333369: function(e, t, n) { var i = { "./bg.png": "135316", "./cs.png": "107217", "./da.png": "120273", "./de.png": "696881", "./el.png": "380938", "./en-GB.png": "953420", "./en-US.png": "201034", "./es-419.png": "404700", "./es-ES.png": "237860", "./fi.png": "254815", "./fr.png": "159900", "./hi.png": "725668", "./hr.png": "735979", "./hu.png": "315018", "./it.png": "564491", "./ja.png": "993181", "./ko.png": "533121", "./lt.png": "639631", "./nl.png": "289128", "./no.png": "379414", "./pl.png": "292927", "./pt-BR.png": "101818", "./ro.png": "935303", "./ru.png": "978138", "./sv-SE.png": "676980", "./th.png": "234798", "./tr.png": "126318", "./uk.png": "829531", "./vi.png": "43572", "./zh-CN.png": "640909", "./zh-TW.png": "408999" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"333369"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 778832: function(e, t, n) { var i = { "./1f004.svg": "428103", "./1f0cf.svg": "409738", "./1f170.svg": "186540", "./1f171.svg": "440604", "./1f17e.svg": "993875", "./1f17f.svg": "867269", "./1f18e.svg": "918622", "./1f191.svg": "175492", "./1f192.svg": "667564", "./1f193.svg": "35768", "./1f194.svg": "565334", "./1f195.svg": "653342", "./1f196.svg": "348535", "./1f197.svg": "500626", "./1f198.svg": "770869", "./1f199.svg": "846187", "./1f19a.svg": "431125", "./1f1e6-1f1e8.svg": "115549", "./1f1e6-1f1e9.svg": "537489", "./1f1e6-1f1ea.svg": "90562", "./1f1e6-1f1eb.svg": "745497", "./1f1e6-1f1ec.svg": "335434", "./1f1e6-1f1ee.svg": "881037", "./1f1e6-1f1f1.svg": "339092", "./1f1e6-1f1f2.svg": "224190", "./1f1e6-1f1f4.svg": "772959", "./1f1e6-1f1f6.svg": "390498", "./1f1e6-1f1f7.svg": "335620", "./1f1e6-1f1f8.svg": "989189", "./1f1e6-1f1f9.svg": "406224", "./1f1e6-1f1fa.svg": "292847", "./1f1e6-1f1fc.svg": "793098", "./1f1e6-1f1fd.svg": "763240", "./1f1e6-1f1ff.svg": "926187", "./1f1e6.svg": "593814", "./1f1e7-1f1e6.svg": "765142", "./1f1e7-1f1e7.svg": "476007", "./1f1e7-1f1e9.svg": "552983", "./1f1e7-1f1ea.svg": "6925", "./1f1e7-1f1eb.svg": "431805", "./1f1e7-1f1ec.svg": "52492", "./1f1e7-1f1ed.svg": "686179", "./1f1e7-1f1ee.svg": "519555", "./1f1e7-1f1ef.svg": "168089", "./1f1e7-1f1f1.svg": "133592", "./1f1e7-1f1f2.svg": "776880", "./1f1e7-1f1f3.svg": "3526", "./1f1e7-1f1f4.svg": "142302", "./1f1e7-1f1f6.svg": "610590", "./1f1e7-1f1f7.svg": "629126", "./1f1e7-1f1f8.svg": "290710", "./1f1e7-1f1f9.svg": "591890", "./1f1e7-1f1fb.svg": "596658", "./1f1e7-1f1fc.svg": "396651", "./1f1e7-1f1fe.svg": "110206", "./1f1e7-1f1ff.svg": "346435", "./1f1e7.svg": "830747", "./1f1e8-1f1e6.svg": "560546", "./1f1e8-1f1e8.svg": "701648", "./1f1e8-1f1e9.svg": "94785", "./1f1e8-1f1eb.svg": "162533", "./1f1e8-1f1ec.svg": "709010", "./1f1e8-1f1ed.svg": "572352", "./1f1e8-1f1ee.svg": "619154", "./1f1e8-1f1f0.svg": "87289", "./1f1e8-1f1f1.svg": "733006", "./1f1e8-1f1f2.svg": "387082", "./1f1e8-1f1f3.svg": "951559", "./1f1e8-1f1f4.svg": "627678", "./1f1e8-1f1f5.svg": "680994", "./1f1e8-1f1f7.svg": "44125", "./1f1e8-1f1fa.svg": "11369", "./1f1e8-1f1fb.svg": "40847", "./1f1e8-1f1fc.svg": "799365", "./1f1e8-1f1fd.svg": "566021", "./1f1e8-1f1fe.svg": "63701", "./1f1e8-1f1ff.svg": "781317", "./1f1e8.svg": "48214", "./1f1e9-1f1ea.svg": "903025", "./1f1e9-1f1ec.svg": "19839", "./1f1e9-1f1ef.svg": "993810", "./1f1e9-1f1f0.svg": "119513", "./1f1e9-1f1f2.svg": "13940", "./1f1e9-1f1f4.svg": "585903", "./1f1e9-1f1ff.svg": "393771", "./1f1e9.svg": "282807", "./1f1ea-1f1e6.svg": "609433", "./1f1ea-1f1e8.svg": "681757", "./1f1ea-1f1ea.svg": "518870", "./1f1ea-1f1ec.svg": "63400", "./1f1ea-1f1ed.svg": "110898", "./1f1ea-1f1f7.svg": "685618", "./1f1ea-1f1f8.svg": "13394", "./1f1ea-1f1f9.svg": "745207", "./1f1ea-1f1fa.svg": "967019", "./1f1ea.svg": "295065", "./1f1eb-1f1ee.svg": "520151", "./1f1eb-1f1ef.svg": "582740", "./1f1eb-1f1f0.svg": "386082", "./1f1eb-1f1f2.svg": "144572", "./1f1eb-1f1f4.svg": "652664", "./1f1eb-1f1f7.svg": "25332", "./1f1eb.svg": "10095", "./1f1ec-1f1e6.svg": "298595", "./1f1ec-1f1e7.svg": "221040", "./1f1ec-1f1e9.svg": "578423", "./1f1ec-1f1ea.svg": "641101", "./1f1ec-1f1eb.svg": "806800", "./1f1ec-1f1ec.svg": "230800", "./1f1ec-1f1ed.svg": "865428", "./1f1ec-1f1ee.svg": "629715", "./1f1ec-1f1f1.svg": "695206", "./1f1ec-1f1f2.svg": "239348", "./1f1ec-1f1f3.svg": "487423", "./1f1ec-1f1f5.svg": "484206", "./1f1ec-1f1f6.svg": "157628", "./1f1ec-1f1f7.svg": "827545", "./1f1ec-1f1f8.svg": "695077", "./1f1ec-1f1f9.svg": "798222", "./1f1ec-1f1fa.svg": "791256", "./1f1ec-1f1fc.svg": "56758", "./1f1ec-1f1fe.svg": "831297", "./1f1ec.svg": "823355", "./1f1ed-1f1f0.svg": "383462", "./1f1ed-1f1f2.svg": "870027", "./1f1ed-1f1f3.svg": "211310", "./1f1ed-1f1f7.svg": "731042", "./1f1ed-1f1f9.svg": "914826", "./1f1ed-1f1fa.svg": "270097", "./1f1ed.svg": "798216", "./1f1ee-1f1e8.svg": "991300", "./1f1ee-1f1e9.svg": "619780", "./1f1ee-1f1ea.svg": "959967", "./1f1ee-1f1f1.svg": "594443", "./1f1ee-1f1f2.svg": "116908", "./1f1ee-1f1f3.svg": "351226", "./1f1ee-1f1f4.svg": "194439", "./1f1ee-1f1f6.svg": "383134", "./1f1ee-1f1f7.svg": "855203", "./1f1ee-1f1f8.svg": "924244", "./1f1ee-1f1f9.svg": "745219", "./1f1ee.svg": "901192", "./1f1ef-1f1ea.svg": "159351", "./1f1ef-1f1f2.svg": "67408", "./1f1ef-1f1f4.svg": "895512", "./1f1ef-1f1f5.svg": "551922", "./1f1ef.svg": "980006", "./1f1f0-1f1ea.svg": "944545", "./1f1f0-1f1ec.svg": "944162", "./1f1f0-1f1ed.svg": "187095", "./1f1f0-1f1ee.svg": "890567", "./1f1f0-1f1f2.svg": "197056", "./1f1f0-1f1f3.svg": "556319", "./1f1f0-1f1f5.svg": "156929", "./1f1f0-1f1f7.svg": "589502", "./1f1f0-1f1fc.svg": "817810", "./1f1f0-1f1fe.svg": "189821", "./1f1f0-1f1ff.svg": "129221", "./1f1f0.svg": "831511", "./1f1f1-1f1e6.svg": "997274", "./1f1f1-1f1e7.svg": "802094", "./1f1f1-1f1e8.svg": "407006", "./1f1f1-1f1ee.svg": "374934", "./1f1f1-1f1f0.svg": "894765", "./1f1f1-1f1f7.svg": "662674", "./1f1f1-1f1f8.svg": "364064", "./1f1f1-1f1f9.svg": "380353", "./1f1f1-1f1fa.svg": "216711", "./1f1f1-1f1fb.svg": "788035", "./1f1f1-1f1fe.svg": "183348", "./1f1f1.svg": "536488", "./1f1f2-1f1e6.svg": "108254", "./1f1f2-1f1e8.svg": "383499", "./1f1f2-1f1e9.svg": "720148", "./1f1f2-1f1ea.svg": "763243", "./1f1f2-1f1eb.svg": "498315", "./1f1f2-1f1ec.svg": "259275", "./1f1f2-1f1ed.svg": "481362", "./1f1f2-1f1f0.svg": "453537", "./1f1f2-1f1f1.svg": "242100", "./1f1f2-1f1f2.svg": "372812", "./1f1f2-1f1f3.svg": "889591", "./1f1f2-1f1f4.svg": "746926", "./1f1f2-1f1f5.svg": "863823", "./1f1f2-1f1f6.svg": "326893", "./1f1f2-1f1f7.svg": "301545", "./1f1f2-1f1f8.svg": "867555", "./1f1f2-1f1f9.svg": "134654", "./1f1f2-1f1fa.svg": "17863", "./1f1f2-1f1fb.svg": "659171", "./1f1f2-1f1fc.svg": "830739", "./1f1f2-1f1fd.svg": "15706", "./1f1f2-1f1fe.svg": "621538", "./1f1f2-1f1ff.svg": "32519", "./1f1f2.svg": "550445", "./1f1f3-1f1e6.svg": "553390", "./1f1f3-1f1e8.svg": "956433", "./1f1f3-1f1ea.svg": "549730", "./1f1f3-1f1eb.svg": "624814", "./1f1f3-1f1ec.svg": "44492", "./1f1f3-1f1ee.svg": "256476", "./1f1f3-1f1f1.svg": "734706", "./1f1f3-1f1f4.svg": "90687", "./1f1f3-1f1f5.svg": "955844", "./1f1f3-1f1f7.svg": "378985", "./1f1f3-1f1fa.svg": "362741", "./1f1f3-1f1ff.svg": "657572", "./1f1f3.svg": "944715", "./1f1f4-1f1f2.svg": "307611", "./1f1f4.svg": "91781", "./1f1f5-1f1e6.svg": "440834", "./1f1f5-1f1ea.svg": "55264", "./1f1f5-1f1eb.svg": "198366", "./1f1f5-1f1ec.svg": "633382", "./1f1f5-1f1ed.svg": "672098", "./1f1f5-1f1f0.svg": "926465", "./1f1f5-1f1f1.svg": "956077", "./1f1f5-1f1f2.svg": "119286", "./1f1f5-1f1f3.svg": "344760", "./1f1f5-1f1f7.svg": "679121", "./1f1f5-1f1f8.svg": "624183", "./1f1f5-1f1f9.svg": "522085", "./1f1f5-1f1fc.svg": "72810", "./1f1f5-1f1fe.svg": "986680", "./1f1f5.svg": "551973", "./1f1f6-1f1e6.svg": "992788", "./1f1f6.svg": "681317", "./1f1f7-1f1ea.svg": "823094", "./1f1f7-1f1f4.svg": "846640", "./1f1f7-1f1f8.svg": "866920", "./1f1f7-1f1fa.svg": "669654", "./1f1f7-1f1fc.svg": "430595", "./1f1f7.svg": "628122", "./1f1f8-1f1e6.svg": "900631", "./1f1f8-1f1e7.svg": "462301", "./1f1f8-1f1e8.svg": "324110", "./1f1f8-1f1e9.svg": "684210", "./1f1f8-1f1ea.svg": "898687", "./1f1f8-1f1ec.svg": "155425", "./1f1f8-1f1ed.svg": "533136", "./1f1f8-1f1ee.svg": "396622", "./1f1f8-1f1ef.svg": "730575", "./1f1f8-1f1f0.svg": "921700", "./1f1f8-1f1f1.svg": "101698", "./1f1f8-1f1f2.svg": "610184", "./1f1f8-1f1f3.svg": "231510", "./1f1f8-1f1f4.svg": "929752", "./1f1f8-1f1f7.svg": "591048", "./1f1f8-1f1f8.svg": "299074", "./1f1f8-1f1f9.svg": "938376", "./1f1f8-1f1fb.svg": "44598", "./1f1f8-1f1fd.svg": "362963", "./1f1f8-1f1fe.svg": "601098", "./1f1f8-1f1ff.svg": "989100", "./1f1f8.svg": "449932", "./1f1f9-1f1e6.svg": "895620", "./1f1f9-1f1e8.svg": "752377", "./1f1f9-1f1e9.svg": "657759", "./1f1f9-1f1eb.svg": "152888", "./1f1f9-1f1ec.svg": "661398", "./1f1f9-1f1ed.svg": "333435", "./1f1f9-1f1ef.svg": "983993", "./1f1f9-1f1f0.svg": "803917", "./1f1f9-1f1f1.svg": "253589", "./1f1f9-1f1f2.svg": "540721", "./1f1f9-1f1f3.svg": "99788", "./1f1f9-1f1f4.svg": "855961", "./1f1f9-1f1f7.svg": "207044", "./1f1f9-1f1f9.svg": "171492", "./1f1f9-1f1fb.svg": "769919", "./1f1f9-1f1fc.svg": "703879", "./1f1f9-1f1ff.svg": "661903", "./1f1f9.svg": "191876", "./1f1fa-1f1e6.svg": "948641", "./1f1fa-1f1ec.svg": "642957", "./1f1fa-1f1f2.svg": "270466", "./1f1fa-1f1f3.svg": "639973", "./1f1fa-1f1f8.svg": "303609", "./1f1fa-1f1fe.svg": "597738", "./1f1fa-1f1ff.svg": "142272", "./1f1fa.svg": "526818", "./1f1fb-1f1e6.svg": "955680", "./1f1fb-1f1e8.svg": "829538", "./1f1fb-1f1ea.svg": "742395", "./1f1fb-1f1ec.svg": "588841", "./1f1fb-1f1ee.svg": "5519", "./1f1fb-1f1f3.svg": "350451", "./1f1fb-1f1fa.svg": "223638", "./1f1fb.svg": "968691", "./1f1fc-1f1eb.svg": "776027", "./1f1fc-1f1f8.svg": "511674", "./1f1fc.svg": "131722", "./1f1fd-1f1f0.svg": "687119", "./1f1fd.svg": "876022", "./1f1fe-1f1ea.svg": "616780", "./1f1fe-1f1f9.svg": "832634", "./1f1fe.svg": "5395", "./1f1ff-1f1e6.svg": "16018", "./1f1ff-1f1f2.svg": "868617", "./1f1ff-1f1fc.svg": "93464", "./1f1ff.svg": "220015", "./1f201.svg": "347308", "./1f202.svg": "728866", "./1f21a.svg": "958870", "./1f22f.svg": "926771", "./1f232.svg": "41816", "./1f233.svg": "898852", "./1f234.svg": "183132", "./1f235.svg": "259885", "./1f236.svg": "70605", "./1f237.svg": "762261", "./1f238.svg": "332965", "./1f239.svg": "746098", "./1f23a.svg": "999643", "./1f250.svg": "472335", "./1f251.svg": "392698", "./1f300.svg": "336397", "./1f301.svg": "573264", "./1f302.svg": "875416", "./1f303.svg": "778415", "./1f304.svg": "220488", "./1f305.svg": "65067", "./1f306.svg": "5576", "./1f307.svg": "260771", "./1f308.svg": "720906", "./1f309.svg": "292005", "./1f30a.svg": "898466", "./1f30b.svg": "319563", "./1f30c.svg": "848327", "./1f30d.svg": "1937", "./1f30e.svg": "923485", "./1f30f.svg": "637213", "./1f310.svg": "439730", "./1f311.svg": "373013", "./1f312.svg": "953621", "./1f313.svg": "503766", "./1f314.svg": "203838", "./1f315.svg": "300755", "./1f316.svg": "434555", "./1f317.svg": "36738", "./1f318.svg": "613064", "./1f319.svg": "413119", "./1f31a.svg": "695781", "./1f31b.svg": "879641", "./1f31c.svg": "716835", "./1f31d.svg": "179720", "./1f31e.svg": "19208", "./1f31f.svg": "673554", "./1f320.svg": "51574", "./1f321.svg": "4146", "./1f324.svg": "371136", "./1f325.svg": "381840", "./1f326.svg": "62906", "./1f327.svg": "478366", "./1f328.svg": "236173", "./1f329.svg": "568993", "./1f32a.svg": "807010", "./1f32b.svg": "492215", "./1f32c.svg": "91300", "./1f32d.svg": "256780", "./1f32e.svg": "783834", "./1f32f.svg": "140786", "./1f330.svg": "241053", "./1f331.svg": "362233", "./1f332.svg": "719173", "./1f333.svg": "476954", "./1f334.svg": "34607", "./1f335.svg": "944801", "./1f336.svg": "50843", "./1f337.svg": "124460", "./1f338.svg": "25228", "./1f339.svg": "872789", "./1f33a.svg": "773344", "./1f33b.svg": "72672", "./1f33c.svg": "95252", "./1f33d.svg": "943792", "./1f33e.svg": "442343", "./1f33f.svg": "567412", "./1f340.svg": "710626", "./1f341.svg": "235334", "./1f342.svg": "178915", "./1f343.svg": "431393", "./1f344.svg": "395249", "./1f345.svg": "632415", "./1f346.svg": "876657", "./1f347.svg": "136798", "./1f348.svg": "767360", "./1f349.svg": "268805", "./1f34a.svg": "103905", "./1f34b.svg": "769866", "./1f34c.svg": "609360", "./1f34d.svg": "66925", "./1f34e.svg": "613764", "./1f34f.svg": "351675", "./1f350.svg": "176984", "./1f351.svg": "350403", "./1f352.svg": "130448", "./1f353.svg": "165125", "./1f354.svg": "653099", "./1f355.svg": "576364", "./1f356.svg": "669601", "./1f357.svg": "684685", "./1f358.svg": "928507", "./1f359.svg": "397484", "./1f35a.svg": "763509", "./1f35b.svg": "87018", "./1f35c.svg": "551945", "./1f35d.svg": "604667", "./1f35e.svg": "176725", "./1f35f.svg": "26370", "./1f360.svg": "870839", "./1f361.svg": "878319", "./1f362.svg": "191587", "./1f363.svg": "2289", "./1f364.svg": "319166", "./1f365.svg": "319085", "./1f366.svg": "624928", "./1f367.svg": "966553", "./1f368.svg": "187488", "./1f369.svg": "158515", "./1f36a.svg": "505622", "./1f36b.svg": "921427", "./1f36c.svg": "599357", "./1f36d.svg": "727406", "./1f36e.svg": "6436", "./1f36f.svg": "980631", "./1f370.svg": "92086", "./1f371.svg": "922069", "./1f372.svg": "496193", "./1f373.svg": "280174", "./1f374.svg": "223542", "./1f375.svg": "158814", "./1f376.svg": "57025", "./1f377.svg": "170771", "./1f378.svg": "911482", "./1f379.svg": "523963", "./1f37a.svg": "778704", "./1f37b.svg": "980499", "./1f37c.svg": "617198", "./1f37d.svg": "201579", "./1f37e.svg": "335198", "./1f37f.svg": "297085", "./1f380.svg": "950261", "./1f381.svg": "209888", "./1f382.svg": "160923", "./1f383.svg": "49013", "./1f384.svg": "315131", "./1f385-1f3fb.svg": "843062", "./1f385-1f3fc.svg": "692051", "./1f385-1f3fd.svg": "684146", "./1f385-1f3fe.svg": "646056", "./1f385-1f3ff.svg": "161919", "./1f385.svg": "760955", "./1f386.svg": "970591", "./1f387.svg": "107832", "./1f388.svg": "302083", "./1f389.svg": "24710", "./1f38a.svg": "160149", "./1f38b.svg": "97857", "./1f38c.svg": "632996", "./1f38d.svg": "37018", "./1f38e.svg": "934327", "./1f38f.svg": "883602", "./1f390.svg": "559499", "./1f391.svg": "897953", "./1f392.svg": "202950", "./1f393.svg": "759228", "./1f396.svg": "914415", "./1f397.svg": "393070", "./1f399.svg": "739276", "./1f39a.svg": "769552", "./1f39b.svg": "113524", "./1f39e.svg": "291182", "./1f39f.svg": "988490", "./1f3a0.svg": "171070", "./1f3a1.svg": "612934", "./1f3a2.svg": "589399", "./1f3a3.svg": "30974", "./1f3a4.svg": "781393", "./1f3a5.svg": "22974", "./1f3a6.svg": "469565", "./1f3a7.svg": "594718", "./1f3a8.svg": "693280", "./1f3a9.svg": "862365", "./1f3aa.svg": "251184", "./1f3ab.svg": "535021", "./1f3ac.svg": "259769", "./1f3ad.svg": "202691", "./1f3ae.svg": "359951", "./1f3af.svg": "943144", "./1f3b0.svg": "9883", "./1f3b1.svg": "861061", "./1f3b2.svg": "580920", "./1f3b3.svg": "896516", "./1f3b4.svg": "479362", "./1f3b5.svg": "92534", "./1f3b6.svg": "153563", "./1f3b7.svg": "419736", "./1f3b8.svg": "318262", "./1f3b9.svg": "858690", "./1f3ba.svg": "783170", "./1f3bb.svg": "375388", "./1f3bc.svg": "223602", "./1f3bd.svg": "234458", "./1f3be.svg": "776670", "./1f3bf.svg": "880844", "./1f3c0.svg": "504478", "./1f3c1.svg": "730903", "./1f3c2-1f3fb.svg": "854366", "./1f3c2-1f3fc.svg": "347554", "./1f3c2-1f3fd.svg": "540000", "./1f3c2-1f3fe.svg": "272864", "./1f3c2-1f3ff.svg": "680996", "./1f3c2.svg": "968240", "./1f3c3-1f3fb-200d-2640-fe0f.svg": "358383", "./1f3c3-1f3fb-200d-2642-fe0f.svg": "946436", "./1f3c3-1f3fb.svg": "388833", "./1f3c3-1f3fc-200d-2640-fe0f.svg": "971926", "./1f3c3-1f3fc-200d-2642-fe0f.svg": "317918", "./1f3c3-1f3fc.svg": "721693", "./1f3c3-1f3fd-200d-2640-fe0f.svg": "19647", "./1f3c3-1f3fd-200d-2642-fe0f.svg": "865200", "./1f3c3-1f3fd.svg": "127781", "./1f3c3-1f3fe-200d-2640-fe0f.svg": "241392", "./1f3c3-1f3fe-200d-2642-fe0f.svg": "94497", "./1f3c3-1f3fe.svg": "44379", "./1f3c3-1f3ff-200d-2640-fe0f.svg": "557412", "./1f3c3-1f3ff-200d-2642-fe0f.svg": "882198", "./1f3c3-1f3ff.svg": "156330", "./1f3c3-200d-2640-fe0f.svg": "200762", "./1f3c3-200d-2642-fe0f.svg": "285157", "./1f3c3.svg": "443907", "./1f3c4-1f3fb-200d-2640-fe0f.svg": "384820", "./1f3c4-1f3fb-200d-2642-fe0f.svg": "470415", "./1f3c4-1f3fb.svg": "453021", "./1f3c4-1f3fc-200d-2640-fe0f.svg": "46565", "./1f3c4-1f3fc-200d-2642-fe0f.svg": "696893", "./1f3c4-1f3fc.svg": "542152", "./1f3c4-1f3fd-200d-2640-fe0f.svg": "672813", "./1f3c4-1f3fd-200d-2642-fe0f.svg": "37661", "./1f3c4-1f3fd.svg": "599205", "./1f3c4-1f3fe-200d-2640-fe0f.svg": "929591", "./1f3c4-1f3fe-200d-2642-fe0f.svg": "435598", "./1f3c4-1f3fe.svg": "465177", "./1f3c4-1f3ff-200d-2640-fe0f.svg": "470682", "./1f3c4-1f3ff-200d-2642-fe0f.svg": "981942", "./1f3c4-1f3ff.svg": "785106", "./1f3c4-200d-2640-fe0f.svg": "549625", "./1f3c4-200d-2642-fe0f.svg": "21575", "./1f3c4.svg": "85519", "./1f3c5.svg": "865423", "./1f3c6.svg": "58180", "./1f3c7-1f3fb.svg": "152896", "./1f3c7-1f3fc.svg": "8248", "./1f3c7-1f3fd.svg": "46496", "./1f3c7-1f3fe.svg": "650753", "./1f3c7-1f3ff.svg": "753830", "./1f3c7.svg": "882440", "./1f3c8.svg": "483590", "./1f3c9.svg": "502274", "./1f3ca-1f3fb-200d-2640-fe0f.svg": "753571", "./1f3ca-1f3fb-200d-2642-fe0f.svg": "587470", "./1f3ca-1f3fb.svg": "398188", "./1f3ca-1f3fc-200d-2640-fe0f.svg": "14270", "./1f3ca-1f3fc-200d-2642-fe0f.svg": "762108", "./1f3ca-1f3fc.svg": "123572", "./1f3ca-1f3fd-200d-2640-fe0f.svg": "367303", "./1f3ca-1f3fd-200d-2642-fe0f.svg": "363262", "./1f3ca-1f3fd.svg": "293862", "./1f3ca-1f3fe-200d-2640-fe0f.svg": "725917", "./1f3ca-1f3fe-200d-2642-fe0f.svg": "788872", "./1f3ca-1f3fe.svg": "385112", "./1f3ca-1f3ff-200d-2640-fe0f.svg": "149843", "./1f3ca-1f3ff-200d-2642-fe0f.svg": "451015", "./1f3ca-1f3ff.svg": "958909", "./1f3ca-200d-2640-fe0f.svg": "888196", "./1f3ca-200d-2642-fe0f.svg": "532428", "./1f3ca.svg": "998856", "./1f3cb-1f3fb-200d-2640-fe0f.svg": "380158", "./1f3cb-1f3fb-200d-2642-fe0f.svg": "408451", "./1f3cb-1f3fb.svg": "300226", "./1f3cb-1f3fc-200d-2640-fe0f.svg": "779623", "./1f3cb-1f3fc-200d-2642-fe0f.svg": "204485", "./1f3cb-1f3fc.svg": "609767", "./1f3cb-1f3fd-200d-2640-fe0f.svg": "580102", "./1f3cb-1f3fd-200d-2642-fe0f.svg": "311247", "./1f3cb-1f3fd.svg": "802315", "./1f3cb-1f3fe-200d-2640-fe0f.svg": "507808", "./1f3cb-1f3fe-200d-2642-fe0f.svg": "525917", "./1f3cb-1f3fe.svg": "346830", "./1f3cb-1f3ff-200d-2640-fe0f.svg": "363102", "./1f3cb-1f3ff-200d-2642-fe0f.svg": "468606", "./1f3cb-1f3ff.svg": "497381", "./1f3cb-fe0f-200d-2640-fe0f.svg": "9264", "./1f3cb-fe0f-200d-2642-fe0f.svg": "671286", "./1f3cb.svg": "797509", "./1f3cc-1f3fb-200d-2640-fe0f.svg": "55814", "./1f3cc-1f3fb-200d-2642-fe0f.svg": "710337", "./1f3cc-1f3fb.svg": "798853", "./1f3cc-1f3fc-200d-2640-fe0f.svg": "156947", "./1f3cc-1f3fc-200d-2642-fe0f.svg": "607566", "./1f3cc-1f3fc.svg": "379783", "./1f3cc-1f3fd-200d-2640-fe0f.svg": "408748", "./1f3cc-1f3fd-200d-2642-fe0f.svg": "435874", "./1f3cc-1f3fd.svg": "827512", "./1f3cc-1f3fe-200d-2640-fe0f.svg": "715054", "./1f3cc-1f3fe-200d-2642-fe0f.svg": "79596", "./1f3cc-1f3fe.svg": "977447", "./1f3cc-1f3ff-200d-2640-fe0f.svg": "254332", "./1f3cc-1f3ff-200d-2642-fe0f.svg": "277949", "./1f3cc-1f3ff.svg": "411649", "./1f3cc-fe0f-200d-2640-fe0f.svg": "373321", "./1f3cc-fe0f-200d-2642-fe0f.svg": "820802", "./1f3cc.svg": "733135", "./1f3cd.svg": "497051", "./1f3ce.svg": "764633", "./1f3cf.svg": "818064", "./1f3d0.svg": "909865", "./1f3d1.svg": "424611", "./1f3d2.svg": "980804", "./1f3d3.svg": "652466", "./1f3d4.svg": "434800", "./1f3d5.svg": "683456", "./1f3d6.svg": "530363", "./1f3d7.svg": "388569", "./1f3d8.svg": "982022", "./1f3d9.svg": "40012", "./1f3da.svg": "857455", "./1f3db.svg": "987843", "./1f3dc.svg": "329039", "./1f3dd.svg": "125429", "./1f3de.svg": "970453", "./1f3df.svg": "115171", "./1f3e0.svg": "455547", "./1f3e1.svg": "362172", "./1f3e2.svg": "288966", "./1f3e3.svg": "99997", "./1f3e4.svg": "112903", "./1f3e5.svg": "387510", "./1f3e6.svg": "337779", "./1f3e7.svg": "453724", "./1f3e8.svg": "953730", "./1f3e9.svg": "28451", "./1f3ea.svg": "6062", "./1f3eb.svg": "308786", "./1f3ec.svg": "610877", "./1f3ed.svg": "806517", "./1f3ee.svg": "163604", "./1f3ef.svg": "937220", "./1f3f0.svg": "620815", "./1f3f3-fe0f-200d-1f308.svg": "903146", "./1f3f3-fe0f-200d-26a7-fe0f.svg": "843662", "./1f3f3.svg": "67377", "./1f3f4-200d-2620-fe0f.svg": "969524", "./1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.svg": "178347", "./1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.svg": "358988", "./1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.svg": "472743", "./1f3f4.svg": "934423", "./1f3f5.svg": "110002", "./1f3f7.svg": "366815", "./1f3f8.svg": "509797", "./1f3f9.svg": "506559", "./1f3fa.svg": "968827", "./1f3fb.svg": "841462", "./1f3fc.svg": "269178", "./1f3fd.svg": "224274", "./1f3fe.svg": "117119", "./1f3ff.svg": "820717", "./1f400.svg": "183340", "./1f401.svg": "748598", "./1f402.svg": "747585", "./1f403.svg": "999430", "./1f404.svg": "625609", "./1f405.svg": "560270", "./1f406.svg": "940139", "./1f407.svg": "755800", "./1f408-200d-2b1b.svg": "839921", "./1f408.svg": "775532", "./1f409.svg": "55687", "./1f40a.svg": "576843", "./1f40b.svg": "926686", "./1f40c.svg": "196687", "./1f40d.svg": "945718", "./1f40e.svg": "553895", "./1f40f.svg": "394019", "./1f410.svg": "54574", "./1f411.svg": "120003", "./1f412.svg": "582354", "./1f413.svg": "451001", "./1f414.svg": "112446", "./1f415-200d-1f9ba.svg": "195486", "./1f415.svg": "781523", "./1f416.svg": "677782", "./1f417.svg": "671824", "./1f418.svg": "509842", "./1f419.svg": "969088", "./1f41a.svg": "378844", "./1f41b.svg": "606491", "./1f41c.svg": "147352", "./1f41d.svg": "313500", "./1f41e.svg": "59108", "./1f41f.svg": "536731", "./1f420.svg": "786830", "./1f421.svg": "44737", "./1f422.svg": "851985", "./1f423.svg": "970977", "./1f424.svg": "902375", "./1f425.svg": "52000", "./1f426-200d-2b1b.svg": "627626", "./1f426.svg": "352633", "./1f427.svg": "833059", "./1f428.svg": "335073", "./1f429.svg": "954623", "./1f42a.svg": "694166", "./1f42b.svg": "52667", "./1f42c.svg": "929081", "./1f42d.svg": "730375", "./1f42e.svg": "259010", "./1f42f.svg": "478308", "./1f430.svg": "64944", "./1f431.svg": "117577", "./1f432.svg": "515978", "./1f433.svg": "752327", "./1f434.svg": "81296", "./1f435.svg": "657437", "./1f436.svg": "295875", "./1f437.svg": "829651", "./1f438.svg": "870845", "./1f439.svg": "27321", "./1f43a.svg": "711285", "./1f43b-200d-2744-fe0f.svg": "137316", "./1f43b.svg": "928010", "./1f43c.svg": "570799", "./1f43d.svg": "79376", "./1f43e.svg": "384217", "./1f43f.svg": "769179", "./1f440.svg": "400223", "./1f441-200d-1f5e8.svg": "279952", "./1f441.svg": "753861", "./1f442-1f3fb.svg": "653787", "./1f442-1f3fc.svg": "849951", "./1f442-1f3fd.svg": "103273", "./1f442-1f3fe.svg": "811450", "./1f442-1f3ff.svg": "997", "./1f442.svg": "483292", "./1f443-1f3fb.svg": "753248", "./1f443-1f3fc.svg": "873272", "./1f443-1f3fd.svg": "172688", "./1f443-1f3fe.svg": "228711", "./1f443-1f3ff.svg": "56480", "./1f443.svg": "183468", "./1f444.svg": "141890", "./1f445.svg": "707711", "./1f446-1f3fb.svg": "635413", "./1f446-1f3fc.svg": "325392", "./1f446-1f3fd.svg": "52834", "./1f446-1f3fe.svg": "457230", "./1f446-1f3ff.svg": "438230", "./1f446.svg": "486414", "./1f447-1f3fb.svg": "698361", "./1f447-1f3fc.svg": "859023", "./1f447-1f3fd.svg": "161813", "./1f447-1f3fe.svg": "511256", "./1f447-1f3ff.svg": "103887", "./1f447.svg": "57947", "./1f448-1f3fb.svg": "719420", "./1f448-1f3fc.svg": "365164", "./1f448-1f3fd.svg": "894548", "./1f448-1f3fe.svg": "674393", "./1f448-1f3ff.svg": "196746", "./1f448.svg": "61088", "./1f449-1f3fb.svg": "668992", "./1f449-1f3fc.svg": "943141", "./1f449-1f3fd.svg": "619244", "./1f449-1f3fe.svg": "610691", "./1f449-1f3ff.svg": "685071", "./1f449.svg": "977677", "./1f44a-1f3fb.svg": "62718", "./1f44a-1f3fc.svg": "538249", "./1f44a-1f3fd.svg": "41555", "./1f44a-1f3fe.svg": "678157", "./1f44a-1f3ff.svg": "320873", "./1f44a.svg": "558581", "./1f44b-1f3fb.svg": "610485", "./1f44b-1f3fc.svg": "129155", "./1f44b-1f3fd.svg": "613331", "./1f44b-1f3fe.svg": "956499", "./1f44b-1f3ff.svg": "182360", "./1f44b.svg": "113823", "./1f44c-1f3fb.svg": "117968", "./1f44c-1f3fc.svg": "387", "./1f44c-1f3fd.svg": "574552", "./1f44c-1f3fe.svg": "154157", "./1f44c-1f3ff.svg": "573087", "./1f44c.svg": "257359", "./1f44d-1f3fb.svg": "874099", "./1f44d-1f3fc.svg": "73631", "./1f44d-1f3fd.svg": "646262", "./1f44d-1f3fe.svg": "107208", "./1f44d-1f3ff.svg": "307284", "./1f44d.svg": "445409", "./1f44e-1f3fb.svg": "379175", "./1f44e-1f3fc.svg": "745638", "./1f44e-1f3fd.svg": "711017", "./1f44e-1f3fe.svg": "62949", "./1f44e-1f3ff.svg": "66173", "./1f44e.svg": "661311", "./1f44f-1f3fb.svg": "235386", "./1f44f-1f3fc.svg": "955064", "./1f44f-1f3fd.svg": "559813", "./1f44f-1f3fe.svg": "647884", "./1f44f-1f3ff.svg": "388417", "./1f44f.svg": "447291", "./1f450-1f3fb.svg": "290114", "./1f450-1f3fc.svg": "660532", "./1f450-1f3fd.svg": "273282", "./1f450-1f3fe.svg": "429813", "./1f450-1f3ff.svg": "496780", "./1f450.svg": "876188", "./1f451.svg": "505843", "./1f452.svg": "807163", "./1f453.svg": "495975", "./1f454.svg": "602280", "./1f455.svg": "439762", "./1f456.svg": "561584", "./1f457.svg": "455558", "./1f458.svg": "205448", "./1f459.svg": "717988", "./1f45a.svg": "78130", "./1f45b.svg": "489639", "./1f45c.svg": "142718", "./1f45d.svg": "949753", "./1f45e.svg": "595800", "./1f45f.svg": "350377", "./1f460.svg": "669798", "./1f461.svg": "85213", "./1f462.svg": "857578", "./1f463.svg": "271758", "./1f464.svg": "739420", "./1f465.svg": "831272", "./1f466-1f3fb.svg": "125639", "./1f466-1f3fc.svg": "660137", "./1f466-1f3fd.svg": "387537", "./1f466-1f3fe.svg": "682052", "./1f466-1f3ff.svg": "158603", "./1f466.svg": "308935", "./1f467-1f3fb.svg": "580602", "./1f467-1f3fc.svg": "879194", "./1f467-1f3fd.svg": "681579", "./1f467-1f3fe.svg": "715241", "./1f467-1f3ff.svg": "781155", "./1f467.svg": "938180", "./1f468-1f3fb-200d-1f33e.svg": "540020", "./1f468-1f3fb-200d-1f373.svg": "34282", "./1f468-1f3fb-200d-1f37c.svg": "565589", "./1f468-1f3fb-200d-1f384.svg": "13738", "./1f468-1f3fb-200d-1f393.svg": "163665", "./1f468-1f3fb-200d-1f3a4.svg": "508312", "./1f468-1f3fb-200d-1f3a8.svg": "641165", "./1f468-1f3fb-200d-1f3eb.svg": "884552", "./1f468-1f3fb-200d-1f3ed.svg": "539199", "./1f468-1f3fb-200d-1f4bb.svg": "214370", "./1f468-1f3fb-200d-1f4bc.svg": "742595", "./1f468-1f3fb-200d-1f527.svg": "906263", "./1f468-1f3fb-200d-1f52c.svg": "659694", "./1f468-1f3fb-200d-1f680.svg": "586348", "./1f468-1f3fb-200d-1f692.svg": "349253", "./1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg": "608227", "./1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg": "679648", "./1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg": "246371", "./1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg": "599300", "./1f468-1f3fb-200d-1f9af.svg": "586166", "./1f468-1f3fb-200d-1f9b0.svg": "101558", "./1f468-1f3fb-200d-1f9b1.svg": "865839", "./1f468-1f3fb-200d-1f9b2.svg": "895438", "./1f468-1f3fb-200d-1f9b3.svg": "797173", "./1f468-1f3fb-200d-1f9bc.svg": "492773", "./1f468-1f3fb-200d-1f9bd.svg": "705417", "./1f468-1f3fb-200d-2695-fe0f.svg": "988911", "./1f468-1f3fb-200d-2696-fe0f.svg": "231405", "./1f468-1f3fb-200d-2708-fe0f.svg": "311954", "./1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb.svg": "131535", "./1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc.svg": "600334", "./1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd.svg": "819173", "./1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe.svg": "286274", "./1f468-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff.svg": "659212", "./1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "933801", "./1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "596662", "./1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "274926", "./1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "934540", "./1f468-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "266732", "./1f468-1f3fb.svg": "293560", "./1f468-1f3fc-200d-1f33e.svg": "167739", "./1f468-1f3fc-200d-1f373.svg": "874589", "./1f468-1f3fc-200d-1f37c.svg": "34803", "./1f468-1f3fc-200d-1f384.svg": "122042", "./1f468-1f3fc-200d-1f393.svg": "954917", "./1f468-1f3fc-200d-1f3a4.svg": "399889", "./1f468-1f3fc-200d-1f3a8.svg": "920117", "./1f468-1f3fc-200d-1f3eb.svg": "704706", "./1f468-1f3fc-200d-1f3ed.svg": "831022", "./1f468-1f3fc-200d-1f4bb.svg": "423805", "./1f468-1f3fc-200d-1f4bc.svg": "572122", "./1f468-1f3fc-200d-1f527.svg": "930405", "./1f468-1f3fc-200d-1f52c.svg": "481026", "./1f468-1f3fc-200d-1f680.svg": "165128", "./1f468-1f3fc-200d-1f692.svg": "515880", "./1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg": "628794", "./1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg": "452211", "./1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg": "558602", "./1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg": "235111", "./1f468-1f3fc-200d-1f9af.svg": "938951", "./1f468-1f3fc-200d-1f9b0.svg": "6478", "./1f468-1f3fc-200d-1f9b1.svg": "524553", "./1f468-1f3fc-200d-1f9b2.svg": "225004", "./1f468-1f3fc-200d-1f9b3.svg": "132708", "./1f468-1f3fc-200d-1f9bc.svg": "971167", "./1f468-1f3fc-200d-1f9bd.svg": "317447", "./1f468-1f3fc-200d-2695-fe0f.svg": "102677", "./1f468-1f3fc-200d-2696-fe0f.svg": "593433", "./1f468-1f3fc-200d-2708-fe0f.svg": "582643", "./1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb.svg": "55617", "./1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc.svg": "535518", "./1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd.svg": "563898", "./1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe.svg": "831490", "./1f468-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff.svg": "786650", "./1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "742965", "./1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "547575", "./1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "573870", "./1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "357509", "./1f468-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "490271", "./1f468-1f3fc.svg": "851538", "./1f468-1f3fd-200d-1f33e.svg": "316468", "./1f468-1f3fd-200d-1f373.svg": "264808", "./1f468-1f3fd-200d-1f37c.svg": "94195", "./1f468-1f3fd-200d-1f384.svg": "540298", "./1f468-1f3fd-200d-1f393.svg": "305915", "./1f468-1f3fd-200d-1f3a4.svg": "169774", "./1f468-1f3fd-200d-1f3a8.svg": "790883", "./1f468-1f3fd-200d-1f3eb.svg": "690206", "./1f468-1f3fd-200d-1f3ed.svg": "28862", "./1f468-1f3fd-200d-1f4bb.svg": "559981", "./1f468-1f3fd-200d-1f4bc.svg": "860204", "./1f468-1f3fd-200d-1f527.svg": "534671", "./1f468-1f3fd-200d-1f52c.svg": "292922", "./1f468-1f3fd-200d-1f680.svg": "617601", "./1f468-1f3fd-200d-1f692.svg": "385786", "./1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg": "206067", "./1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg": "369070", "./1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg": "915460", "./1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg": "608599", "./1f468-1f3fd-200d-1f9af.svg": "28091", "./1f468-1f3fd-200d-1f9b0.svg": "675352", "./1f468-1f3fd-200d-1f9b1.svg": "953431", "./1f468-1f3fd-200d-1f9b2.svg": "133154", "./1f468-1f3fd-200d-1f9b3.svg": "551870", "./1f468-1f3fd-200d-1f9bc.svg": "776231", "./1f468-1f3fd-200d-1f9bd.svg": "178794", "./1f468-1f3fd-200d-2695-fe0f.svg": "412729", "./1f468-1f3fd-200d-2696-fe0f.svg": "173118", "./1f468-1f3fd-200d-2708-fe0f.svg": "45570", "./1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb.svg": "52260", "./1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc.svg": "516977", "./1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd.svg": "397941", "./1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe.svg": "647161", "./1f468-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff.svg": "613390", "./1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "88840", "./1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "422456", "./1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "396088", "./1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "751759", "./1f468-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "531535", "./1f468-1f3fd.svg": "981953", "./1f468-1f3fe-200d-1f33e.svg": "952264", "./1f468-1f3fe-200d-1f373.svg": "386243", "./1f468-1f3fe-200d-1f37c.svg": "792341", "./1f468-1f3fe-200d-1f384.svg": "458309", "./1f468-1f3fe-200d-1f393.svg": "49901", "./1f468-1f3fe-200d-1f3a4.svg": "899915", "./1f468-1f3fe-200d-1f3a8.svg": "472595", "./1f468-1f3fe-200d-1f3eb.svg": "501630", "./1f468-1f3fe-200d-1f3ed.svg": "69821", "./1f468-1f3fe-200d-1f4bb.svg": "369816", "./1f468-1f3fe-200d-1f4bc.svg": "497989", "./1f468-1f3fe-200d-1f527.svg": "221578", "./1f468-1f3fe-200d-1f52c.svg": "727925", "./1f468-1f3fe-200d-1f680.svg": "400433", "./1f468-1f3fe-200d-1f692.svg": "831248", "./1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg": "793659", "./1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg": "632682", "./1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg": "982816", "./1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff.svg": "687687", "./1f468-1f3fe-200d-1f9af.svg": "672457", "./1f468-1f3fe-200d-1f9b0.svg": "882804", "./1f468-1f3fe-200d-1f9b1.svg": "334351", "./1f468-1f3fe-200d-1f9b2.svg": "616358", "./1f468-1f3fe-200d-1f9b3.svg": "695546", "./1f468-1f3fe-200d-1f9bc.svg": "152546", "./1f468-1f3fe-200d-1f9bd.svg": "205949", "./1f468-1f3fe-200d-2695-fe0f.svg": "33058", "./1f468-1f3fe-200d-2696-fe0f.svg": "944397", "./1f468-1f3fe-200d-2708-fe0f.svg": "407110", "./1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb.svg": "195322", "./1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc.svg": "396060", "./1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd.svg": "259978", "./1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe.svg": "660220", "./1f468-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff.svg": "983747", "./1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "509893", "./1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "899084", "./1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "36424", "./1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "28682", "./1f468-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "951987", "./1f468-1f3fe.svg": "604639", "./1f468-1f3ff-200d-1f33e.svg": "458529", "./1f468-1f3ff-200d-1f373.svg": "843458", "./1f468-1f3ff-200d-1f37c.svg": "126826", "./1f468-1f3ff-200d-1f384.svg": "36104", "./1f468-1f3ff-200d-1f393.svg": "475134", "./1f468-1f3ff-200d-1f3a4.svg": "638176", "./1f468-1f3ff-200d-1f3a8.svg": "51732", "./1f468-1f3ff-200d-1f3eb.svg": "508574", "./1f468-1f3ff-200d-1f3ed.svg": "27726", "./1f468-1f3ff-200d-1f4bb.svg": "263043", "./1f468-1f3ff-200d-1f4bc.svg": "352673", "./1f468-1f3ff-200d-1f527.svg": "821949", "./1f468-1f3ff-200d-1f52c.svg": "255546", "./1f468-1f3ff-200d-1f680.svg": "648690", "./1f468-1f3ff-200d-1f692.svg": "383873", "./1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg": "557693", "./1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg": "56602", "./1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg": "775902", "./1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg": "793385", "./1f468-1f3ff-200d-1f9af.svg": "602155", "./1f468-1f3ff-200d-1f9b0.svg": "295780", "./1f468-1f3ff-200d-1f9b1.svg": "180858", "./1f468-1f3ff-200d-1f9b2.svg": "478571", "./1f468-1f3ff-200d-1f9b3.svg": "684473", "./1f468-1f3ff-200d-1f9bc.svg": "557621", "./1f468-1f3ff-200d-1f9bd.svg": "53554", "./1f468-1f3ff-200d-2695-fe0f.svg": "568356", "./1f468-1f3ff-200d-2696-fe0f.svg": "582493", "./1f468-1f3ff-200d-2708-fe0f.svg": "174898", "./1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb.svg": "334225", "./1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc.svg": "693304", "./1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd.svg": "994300", "./1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe.svg": "522589", "./1f468-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff.svg": "541555", "./1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "864326", "./1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "96653", "./1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "235957", "./1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "849630", "./1f468-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "344823", "./1f468-1f3ff.svg": "593368", "./1f468-200d-1f33e.svg": "4898", "./1f468-200d-1f373.svg": "716030", "./1f468-200d-1f37c.svg": "263889", "./1f468-200d-1f384.svg": "450015", "./1f468-200d-1f393.svg": "825007", "./1f468-200d-1f3a4.svg": "62225", "./1f468-200d-1f3a8.svg": "366201", "./1f468-200d-1f3eb.svg": "604554", "./1f468-200d-1f3ed.svg": "478017", "./1f468-200d-1f466-200d-1f466.svg": "325317", "./1f468-200d-1f466.svg": "354975", "./1f468-200d-1f467-200d-1f466.svg": "812609", "./1f468-200d-1f467-200d-1f467.svg": "883940", "./1f468-200d-1f467.svg": "700276", "./1f468-200d-1f468-200d-1f466-200d-1f466.svg": "737543", "./1f468-200d-1f468-200d-1f466.svg": "308065", "./1f468-200d-1f468-200d-1f467-200d-1f466.svg": "985804", "./1f468-200d-1f468-200d-1f467-200d-1f467.svg": "345372", "./1f468-200d-1f468-200d-1f467.svg": "981861", "./1f468-200d-1f469-200d-1f466-200d-1f466.svg": "245832", "./1f468-200d-1f469-200d-1f466.svg": "102217", "./1f468-200d-1f469-200d-1f467-200d-1f466.svg": "203812", "./1f468-200d-1f469-200d-1f467-200d-1f467.svg": "507296", "./1f468-200d-1f469-200d-1f467.svg": "440675", "./1f468-200d-1f4bb.svg": "662824", "./1f468-200d-1f4bc.svg": "297045", "./1f468-200d-1f527.svg": "575919", "./1f468-200d-1f52c.svg": "362628", "./1f468-200d-1f680.svg": "499803", "./1f468-200d-1f692.svg": "335675", "./1f468-200d-1f9af.svg": "815437", "./1f468-200d-1f9b0.svg": "711572", "./1f468-200d-1f9b1.svg": "820227", "./1f468-200d-1f9b2.svg": "886057", "./1f468-200d-1f9b3.svg": "89022", "./1f468-200d-1f9bc.svg": "175205", "./1f468-200d-1f9bd.svg": "545922", "./1f468-200d-2695-fe0f.svg": "545380", "./1f468-200d-2696-fe0f.svg": "96459", "./1f468-200d-2708-fe0f.svg": "841668", "./1f468-200d-2764-fe0f-200d-1f468.svg": "641875", "./1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.svg": "885887", "./1f468.svg": "475024", "./1f469-1f3fb-200d-1f33e.svg": "437536", "./1f469-1f3fb-200d-1f373.svg": "650758", "./1f469-1f3fb-200d-1f37c.svg": "904139", "./1f469-1f3fb-200d-1f384.svg": "577705", "./1f469-1f3fb-200d-1f393.svg": "554906", "./1f469-1f3fb-200d-1f3a4.svg": "4784", "./1f469-1f3fb-200d-1f3a8.svg": "509605", "./1f469-1f3fb-200d-1f3eb.svg": "440542", "./1f469-1f3fb-200d-1f3ed.svg": "503437", "./1f469-1f3fb-200d-1f4bb.svg": "701229", "./1f469-1f3fb-200d-1f4bc.svg": "591985", "./1f469-1f3fb-200d-1f527.svg": "756139", "./1f469-1f3fb-200d-1f52c.svg": "970828", "./1f469-1f3fb-200d-1f680.svg": "385770", "./1f469-1f3fb-200d-1f692.svg": "71394", "./1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg": "526333", "./1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg": "103968", "./1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg": "943893", "./1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg": "408673", "./1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc.svg": "931766", "./1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd.svg": "985266", "./1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe.svg": "168117", "./1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff.svg": "801187", "./1f469-1f3fb-200d-1f9af.svg": "797040", "./1f469-1f3fb-200d-1f9b0.svg": "837732", "./1f469-1f3fb-200d-1f9b1.svg": "497779", "./1f469-1f3fb-200d-1f9b2.svg": "899720", "./1f469-1f3fb-200d-1f9b3.svg": "645866", "./1f469-1f3fb-200d-1f9bc.svg": "599538", "./1f469-1f3fb-200d-1f9bd.svg": "999699", "./1f469-1f3fb-200d-2695-fe0f.svg": "648769", "./1f469-1f3fb-200d-2696-fe0f.svg": "244530", "./1f469-1f3fb-200d-2708-fe0f.svg": "767927", "./1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fb.svg": "417550", "./1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fc.svg": "668460", "./1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fd.svg": "860534", "./1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3fe.svg": "838645", "./1f469-1f3fb-200d-2764-fe0f-200d-1f468-1f3ff.svg": "776333", "./1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fb.svg": "408808", "./1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fc.svg": "489194", "./1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fd.svg": "532885", "./1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3fe.svg": "335756", "./1f469-1f3fb-200d-2764-fe0f-200d-1f469-1f3ff.svg": "104001", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "28059", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "29873", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "992545", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "462494", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "308453", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg": "715706", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg": "426102", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg": "576482", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg": "836248", "./1f469-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg": "655858", "./1f469-1f3fb.svg": "826073", "./1f469-1f3fc-200d-1f33e.svg": "205072", "./1f469-1f3fc-200d-1f373.svg": "188223", "./1f469-1f3fc-200d-1f37c.svg": "918978", "./1f469-1f3fc-200d-1f384.svg": "174517", "./1f469-1f3fc-200d-1f393.svg": "340259", "./1f469-1f3fc-200d-1f3a4.svg": "694479", "./1f469-1f3fc-200d-1f3a8.svg": "287597", "./1f469-1f3fc-200d-1f3eb.svg": "79896", "./1f469-1f3fc-200d-1f3ed.svg": "639251", "./1f469-1f3fc-200d-1f4bb.svg": "330642", "./1f469-1f3fc-200d-1f4bc.svg": "508150", "./1f469-1f3fc-200d-1f527.svg": "741", "./1f469-1f3fc-200d-1f52c.svg": "694309", "./1f469-1f3fc-200d-1f680.svg": "282411", "./1f469-1f3fc-200d-1f692.svg": "564393", "./1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb.svg": "212338", "./1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg": "946516", "./1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg": "510618", "./1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg": "838204", "./1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb.svg": "669814", "./1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd.svg": "653421", "./1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe.svg": "882033", "./1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff.svg": "746435", "./1f469-1f3fc-200d-1f9af.svg": "979879", "./1f469-1f3fc-200d-1f9b0.svg": "509118", "./1f469-1f3fc-200d-1f9b1.svg": "781653", "./1f469-1f3fc-200d-1f9b2.svg": "264635", "./1f469-1f3fc-200d-1f9b3.svg": "479679", "./1f469-1f3fc-200d-1f9bc.svg": "965520", "./1f469-1f3fc-200d-1f9bd.svg": "436322", "./1f469-1f3fc-200d-2695-fe0f.svg": "289851", "./1f469-1f3fc-200d-2696-fe0f.svg": "775635", "./1f469-1f3fc-200d-2708-fe0f.svg": "273021", "./1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fb.svg": "734864", "./1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fc.svg": "335678", "./1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fd.svg": "986797", "./1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3fe.svg": "468331", "./1f469-1f3fc-200d-2764-fe0f-200d-1f468-1f3ff.svg": "170356", "./1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fb.svg": "964400", "./1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fc.svg": "81556", "./1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fd.svg": "176418", "./1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3fe.svg": "406890", "./1f469-1f3fc-200d-2764-fe0f-200d-1f469-1f3ff.svg": "117725", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "452542", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "149199", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "503874", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "823922", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "447237", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg": "930660", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg": "856119", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg": "870826", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg": "125016", "./1f469-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg": "327818", "./1f469-1f3fc.svg": "915052", "./1f469-1f3fd-200d-1f33e.svg": "192471", "./1f469-1f3fd-200d-1f373.svg": "212655", "./1f469-1f3fd-200d-1f37c.svg": "830991", "./1f469-1f3fd-200d-1f384.svg": "860475", "./1f469-1f3fd-200d-1f393.svg": "562944", "./1f469-1f3fd-200d-1f3a4.svg": "994864", "./1f469-1f3fd-200d-1f3a8.svg": "405998", "./1f469-1f3fd-200d-1f3eb.svg": "355197", "./1f469-1f3fd-200d-1f3ed.svg": "494370", "./1f469-1f3fd-200d-1f4bb.svg": "151559", "./1f469-1f3fd-200d-1f4bc.svg": "643390", "./1f469-1f3fd-200d-1f527.svg": "666158", "./1f469-1f3fd-200d-1f52c.svg": "122542", "./1f469-1f3fd-200d-1f680.svg": "572302", "./1f469-1f3fd-200d-1f692.svg": "543989", "./1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb.svg": "144256", "./1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc.svg": "326492", "./1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg": "329431", "./1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg": "366440", "./1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb.svg": "965050", "./1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc.svg": "13449", "./1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe.svg": "619789", "./1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff.svg": "690288", "./1f469-1f3fd-200d-1f9af.svg": "22827", "./1f469-1f3fd-200d-1f9b0.svg": "907398", "./1f469-1f3fd-200d-1f9b1.svg": "370421", "./1f469-1f3fd-200d-1f9b2.svg": "396273", "./1f469-1f3fd-200d-1f9b3.svg": "261207", "./1f469-1f3fd-200d-1f9bc.svg": "389945", "./1f469-1f3fd-200d-1f9bd.svg": "703611", "./1f469-1f3fd-200d-2695-fe0f.svg": "833424", "./1f469-1f3fd-200d-2696-fe0f.svg": "724511", "./1f469-1f3fd-200d-2708-fe0f.svg": "733025", "./1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fb.svg": "209985", "./1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fc.svg": "996280", "./1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fd.svg": "821045", "./1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3fe.svg": "320038", "./1f469-1f3fd-200d-2764-fe0f-200d-1f468-1f3ff.svg": "405471", "./1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fb.svg": "561665", "./1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fc.svg": "681368", "./1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fd.svg": "210407", "./1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3fe.svg": "786675", "./1f469-1f3fd-200d-2764-fe0f-200d-1f469-1f3ff.svg": "495614", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "261126", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "825631", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "637409", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "876430", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "8673", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg": "13118", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg": "516763", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg": "824562", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg": "919962", "./1f469-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg": "212854", "./1f469-1f3fd.svg": "749096", "./1f469-1f3fe-200d-1f33e.svg": "62663", "./1f469-1f3fe-200d-1f373.svg": "314572", "./1f469-1f3fe-200d-1f37c.svg": "272222", "./1f469-1f3fe-200d-1f384.svg": "544661", "./1f469-1f3fe-200d-1f393.svg": "561955", "./1f469-1f3fe-200d-1f3a4.svg": "34139", "./1f469-1f3fe-200d-1f3a8.svg": "111936", "./1f469-1f3fe-200d-1f3eb.svg": "225666", "./1f469-1f3fe-200d-1f3ed.svg": "212660", "./1f469-1f3fe-200d-1f4bb.svg": "635849", "./1f469-1f3fe-200d-1f4bc.svg": "485642", "./1f469-1f3fe-200d-1f527.svg": "8796", "./1f469-1f3fe-200d-1f52c.svg": "293175", "./1f469-1f3fe-200d-1f680.svg": "715368", "./1f469-1f3fe-200d-1f692.svg": "319332", "./1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb.svg": "423231", "./1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc.svg": "434196", "./1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd.svg": "800472", "./1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff.svg": "125823", "./1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb.svg": "950118", "./1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc.svg": "753964", "./1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd.svg": "877645", "./1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff.svg": "850243", "./1f469-1f3fe-200d-1f9af.svg": "440162", "./1f469-1f3fe-200d-1f9b0.svg": "351749", "./1f469-1f3fe-200d-1f9b1.svg": "108145", "./1f469-1f3fe-200d-1f9b2.svg": "394124", "./1f469-1f3fe-200d-1f9b3.svg": "791746", "./1f469-1f3fe-200d-1f9bc.svg": "248199", "./1f469-1f3fe-200d-1f9bd.svg": "867906", "./1f469-1f3fe-200d-2695-fe0f.svg": "532973", "./1f469-1f3fe-200d-2696-fe0f.svg": "288275", "./1f469-1f3fe-200d-2708-fe0f.svg": "20578", "./1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fb.svg": "488614", "./1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fc.svg": "61110", "./1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fd.svg": "330951", "./1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3fe.svg": "79840", "./1f469-1f3fe-200d-2764-fe0f-200d-1f468-1f3ff.svg": "734524", "./1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fb.svg": "439001", "./1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fc.svg": "722809", "./1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fd.svg": "637071", "./1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3fe.svg": "352854", "./1f469-1f3fe-200d-2764-fe0f-200d-1f469-1f3ff.svg": "783644", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "174529", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "689595", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "86706", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "646082", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "868990", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg": "105152", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg": "40671", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg": "758231", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg": "735973", "./1f469-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg": "318306", "./1f469-1f3fe.svg": "318213", "./1f469-1f3ff-200d-1f33e.svg": "576425", "./1f469-1f3ff-200d-1f373.svg": "97820", "./1f469-1f3ff-200d-1f37c.svg": "752351", "./1f469-1f3ff-200d-1f384.svg": "248390", "./1f469-1f3ff-200d-1f393.svg": "554911", "./1f469-1f3ff-200d-1f3a4.svg": "750696", "./1f469-1f3ff-200d-1f3a8.svg": "238848", "./1f469-1f3ff-200d-1f3eb.svg": "104644", "./1f469-1f3ff-200d-1f3ed.svg": "985385", "./1f469-1f3ff-200d-1f4bb.svg": "937286", "./1f469-1f3ff-200d-1f4bc.svg": "314386", "./1f469-1f3ff-200d-1f527.svg": "171000", "./1f469-1f3ff-200d-1f52c.svg": "570242", "./1f469-1f3ff-200d-1f680.svg": "271172", "./1f469-1f3ff-200d-1f692.svg": "834262", "./1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb.svg": "208677", "./1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc.svg": "775719", "./1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd.svg": "985273", "./1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe.svg": "211364", "./1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb.svg": "915206", "./1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc.svg": "849123", "./1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd.svg": "275958", "./1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe.svg": "556894", "./1f469-1f3ff-200d-1f9af.svg": "904789", "./1f469-1f3ff-200d-1f9b0.svg": "707501", "./1f469-1f3ff-200d-1f9b1.svg": "946093", "./1f469-1f3ff-200d-1f9b2.svg": "543114", "./1f469-1f3ff-200d-1f9b3.svg": "919644", "./1f469-1f3ff-200d-1f9bc.svg": "917495", "./1f469-1f3ff-200d-1f9bd.svg": "760407", "./1f469-1f3ff-200d-2695-fe0f.svg": "380548", "./1f469-1f3ff-200d-2696-fe0f.svg": "890928", "./1f469-1f3ff-200d-2708-fe0f.svg": "126836", "./1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fb.svg": "199846", "./1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fc.svg": "429130", "./1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fd.svg": "43977", "./1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3fe.svg": "823853", "./1f469-1f3ff-200d-2764-fe0f-200d-1f468-1f3ff.svg": "444979", "./1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fb.svg": "941253", "./1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fc.svg": "946194", "./1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fd.svg": "390412", "./1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3fe.svg": "146989", "./1f469-1f3ff-200d-2764-fe0f-200d-1f469-1f3ff.svg": "839752", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fb.svg": "533446", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fc.svg": "120856", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fd.svg": "101402", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3fe.svg": "883781", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f468-1f3ff.svg": "762230", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fb.svg": "365285", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fc.svg": "895585", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fd.svg": "865884", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3fe.svg": "234834", "./1f469-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f469-1f3ff.svg": "296490", "./1f469-1f3ff.svg": "470263", "./1f469-200d-1f33e.svg": "447797", "./1f469-200d-1f373.svg": "825304", "./1f469-200d-1f37c.svg": "587341", "./1f469-200d-1f384.svg": "927725", "./1f469-200d-1f393.svg": "983733", "./1f469-200d-1f3a4.svg": "338179", "./1f469-200d-1f3a8.svg": "46332", "./1f469-200d-1f3eb.svg": "360499", "./1f469-200d-1f3ed.svg": "641689", "./1f469-200d-1f466-200d-1f466.svg": "595830", "./1f469-200d-1f466.svg": "387152", "./1f469-200d-1f467-200d-1f466.svg": "496402", "./1f469-200d-1f467-200d-1f467.svg": "301529", "./1f469-200d-1f467.svg": "831608", "./1f469-200d-1f469-200d-1f466-200d-1f466.svg": "162867", "./1f469-200d-1f469-200d-1f466.svg": "769150", "./1f469-200d-1f469-200d-1f467-200d-1f466.svg": "213895", "./1f469-200d-1f469-200d-1f467-200d-1f467.svg": "805843", "./1f469-200d-1f469-200d-1f467.svg": "658383", "./1f469-200d-1f4bb.svg": "890285", "./1f469-200d-1f4bc.svg": "630171", "./1f469-200d-1f527.svg": "325830", "./1f469-200d-1f52c.svg": "154059", "./1f469-200d-1f680.svg": "63361", "./1f469-200d-1f692.svg": "257031", "./1f469-200d-1f9af.svg": "124128", "./1f469-200d-1f9b0.svg": "389938", "./1f469-200d-1f9b1.svg": "158193", "./1f469-200d-1f9b2.svg": "718080", "./1f469-200d-1f9b3.svg": "438343", "./1f469-200d-1f9bc.svg": "265143", "./1f469-200d-1f9bd.svg": "420643", "./1f469-200d-2695-fe0f.svg": "463300", "./1f469-200d-2696-fe0f.svg": "405221", "./1f469-200d-2708-fe0f.svg": "128640", "./1f469-200d-2764-fe0f-200d-1f468.svg": "841555", "./1f469-200d-2764-fe0f-200d-1f469.svg": "385155", "./1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.svg": "112948", "./1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.svg": "59111", "./1f469.svg": "617530", "./1f46a.svg": "638658", "./1f46b-1f3fb.svg": "25675", "./1f46b-1f3fc.svg": "489074", "./1f46b-1f3fd.svg": "224929", "./1f46b-1f3fe.svg": "909611", "./1f46b-1f3ff.svg": "587643", "./1f46b.svg": "948765", "./1f46c-1f3fb.svg": "105725", "./1f46c-1f3fc.svg": "415428", "./1f46c-1f3fd.svg": "242783", "./1f46c-1f3fe.svg": "22597", "./1f46c-1f3ff.svg": "515292", "./1f46c.svg": "992177", "./1f46d-1f3fb.svg": "615502", "./1f46d-1f3fc.svg": "369118", "./1f46d-1f3fd.svg": "374086", "./1f46d-1f3fe.svg": "16761", "./1f46d-1f3ff.svg": "859934", "./1f46d.svg": "487387", "./1f46e-1f3fb-200d-2640-fe0f.svg": "209502", "./1f46e-1f3fb-200d-2642-fe0f.svg": "959020", "./1f46e-1f3fb.svg": "156606", "./1f46e-1f3fc-200d-2640-fe0f.svg": "530420", "./1f46e-1f3fc-200d-2642-fe0f.svg": "102839", "./1f46e-1f3fc.svg": "422851", "./1f46e-1f3fd-200d-2640-fe0f.svg": "536632", "./1f46e-1f3fd-200d-2642-fe0f.svg": "756442", "./1f46e-1f3fd.svg": "401475", "./1f46e-1f3fe-200d-2640-fe0f.svg": "444470", "./1f46e-1f3fe-200d-2642-fe0f.svg": "126584", "./1f46e-1f3fe.svg": "426406", "./1f46e-1f3ff-200d-2640-fe0f.svg": "608239", "./1f46e-1f3ff-200d-2642-fe0f.svg": "560026", "./1f46e-1f3ff.svg": "671154", "./1f46e-200d-2640-fe0f.svg": "350122", "./1f46e-200d-2642-fe0f.svg": "37683", "./1f46e.svg": "556989", "./1f46f-200d-2640-fe0f.svg": "733633", "./1f46f-200d-2642-fe0f.svg": "755286", "./1f46f.svg": "156314", "./1f470-1f3fb-200d-2640-fe0f.svg": "444416", "./1f470-1f3fb-200d-2642-fe0f.svg": "471825", "./1f470-1f3fb.svg": "651431", "./1f470-1f3fc-200d-2640-fe0f.svg": "396843", "./1f470-1f3fc-200d-2642-fe0f.svg": "169786", "./1f470-1f3fc.svg": "141445", "./1f470-1f3fd-200d-2640-fe0f.svg": "690034", "./1f470-1f3fd-200d-2642-fe0f.svg": "891971", "./1f470-1f3fd.svg": "952006", "./1f470-1f3fe-200d-2640-fe0f.svg": "598221", "./1f470-1f3fe-200d-2642-fe0f.svg": "21022", "./1f470-1f3fe.svg": "540534", "./1f470-1f3ff-200d-2640-fe0f.svg": "949360", "./1f470-1f3ff-200d-2642-fe0f.svg": "416637", "./1f470-1f3ff.svg": "885573", "./1f470-200d-2640-fe0f.svg": "494051", "./1f470-200d-2642-fe0f.svg": "458382", "./1f470.svg": "136618", "./1f471-1f3fb-200d-2640-fe0f.svg": "15529", "./1f471-1f3fb-200d-2642-fe0f.svg": "678019", "./1f471-1f3fb.svg": "662573", "./1f471-1f3fc-200d-2640-fe0f.svg": "593210", "./1f471-1f3fc-200d-2642-fe0f.svg": "565709", "./1f471-1f3fc.svg": "58827", "./1f471-1f3fd-200d-2640-fe0f.svg": "376375", "./1f471-1f3fd-200d-2642-fe0f.svg": "697186", "./1f471-1f3fd.svg": "89650", "./1f471-1f3fe-200d-2640-fe0f.svg": "340925", "./1f471-1f3fe-200d-2642-fe0f.svg": "907195", "./1f471-1f3fe.svg": "92538", "./1f471-1f3ff-200d-2640-fe0f.svg": "501516", "./1f471-1f3ff-200d-2642-fe0f.svg": "876478", "./1f471-1f3ff.svg": "222289", "./1f471-200d-2640-fe0f.svg": "35718", "./1f471-200d-2642-fe0f.svg": "568872", "./1f471.svg": "15261", "./1f472-1f3fb.svg": "361309", "./1f472-1f3fc.svg": "751442", "./1f472-1f3fd.svg": "694009", "./1f472-1f3fe.svg": "390596", "./1f472-1f3ff.svg": "720592", "./1f472.svg": "970596", "./1f473-1f3fb-200d-2640-fe0f.svg": "500164", "./1f473-1f3fb-200d-2642-fe0f.svg": "179719", "./1f473-1f3fb.svg": "484753", "./1f473-1f3fc-200d-2640-fe0f.svg": "537802", "./1f473-1f3fc-200d-2642-fe0f.svg": "590753", "./1f473-1f3fc.svg": "271169", "./1f473-1f3fd-200d-2640-fe0f.svg": "869564", "./1f473-1f3fd-200d-2642-fe0f.svg": "425637", "./1f473-1f3fd.svg": "129554", "./1f473-1f3fe-200d-2640-fe0f.svg": "395000", "./1f473-1f3fe-200d-2642-fe0f.svg": "569455", "./1f473-1f3fe.svg": "566357", "./1f473-1f3ff-200d-2640-fe0f.svg": "765508", "./1f473-1f3ff-200d-2642-fe0f.svg": "607121", "./1f473-1f3ff.svg": "78778", "./1f473-200d-2640-fe0f.svg": "729313", "./1f473-200d-2642-fe0f.svg": "392154", "./1f473.svg": "779841", "./1f474-1f3fb.svg": "609941", "./1f474-1f3fc.svg": "652295", "./1f474-1f3fd.svg": "617700", "./1f474-1f3fe.svg": "226566", "./1f474-1f3ff.svg": "631242", "./1f474.svg": "525225", "./1f475-1f3fb.svg": "252845", "./1f475-1f3fc.svg": "259983", "./1f475-1f3fd.svg": "64144", "./1f475-1f3fe.svg": "420230", "./1f475-1f3ff.svg": "29443", "./1f475.svg": "761074", "./1f476-1f3fb.svg": "838124", "./1f476-1f3fc.svg": "173352", "./1f476-1f3fd.svg": "245431", "./1f476-1f3fe.svg": "159548", "./1f476-1f3ff.svg": "431784", "./1f476.svg": "140032", "./1f477-1f3fb-200d-2640-fe0f.svg": "735593", "./1f477-1f3fb-200d-2642-fe0f.svg": "839815", "./1f477-1f3fb.svg": "451042", "./1f477-1f3fc-200d-2640-fe0f.svg": "914671", "./1f477-1f3fc-200d-2642-fe0f.svg": "338212", "./1f477-1f3fc.svg": "265251", "./1f477-1f3fd-200d-2640-fe0f.svg": "867077", "./1f477-1f3fd-200d-2642-fe0f.svg": "214518", "./1f477-1f3fd.svg": "617408", "./1f477-1f3fe-200d-2640-fe0f.svg": "391738", "./1f477-1f3fe-200d-2642-fe0f.svg": "865321", "./1f477-1f3fe.svg": "834574", "./1f477-1f3ff-200d-2640-fe0f.svg": "839629", "./1f477-1f3ff-200d-2642-fe0f.svg": "540287", "./1f477-1f3ff.svg": "670819", "./1f477-200d-2640-fe0f.svg": "710571", "./1f477-200d-2642-fe0f.svg": "787211", "./1f477.svg": "322534", "./1f478-1f3fb.svg": "363134", "./1f478-1f3fc.svg": "935449", "./1f478-1f3fd.svg": "915804", "./1f478-1f3fe.svg": "295912", "./1f478-1f3ff.svg": "118001", "./1f478.svg": "471218", "./1f479.svg": "619585", "./1f47a.svg": "770775", "./1f47b.svg": "204234", "./1f47c-1f3fb.svg": "684098", "./1f47c-1f3fc.svg": "518256", "./1f47c-1f3fd.svg": "890296", "./1f47c-1f3fe.svg": "696037", "./1f47c-1f3ff.svg": "405928", "./1f47c.svg": "168962", "./1f47d.svg": "196840", "./1f47e.svg": "830120", "./1f47f.svg": "840473", "./1f480.svg": "903888", "./1f481-1f3fb-200d-2640-fe0f.svg": "232355", "./1f481-1f3fb-200d-2642-fe0f.svg": "320635", "./1f481-1f3fb.svg": "622456", "./1f481-1f3fc-200d-2640-fe0f.svg": "155840", "./1f481-1f3fc-200d-2642-fe0f.svg": "877130", "./1f481-1f3fc.svg": "359124", "./1f481-1f3fd-200d-2640-fe0f.svg": "114204", "./1f481-1f3fd-200d-2642-fe0f.svg": "257829", "./1f481-1f3fd.svg": "683689", "./1f481-1f3fe-200d-2640-fe0f.svg": "736546", "./1f481-1f3fe-200d-2642-fe0f.svg": "333522", "./1f481-1f3fe.svg": "362665", "./1f481-1f3ff-200d-2640-fe0f.svg": "509433", "./1f481-1f3ff-200d-2642-fe0f.svg": "395669", "./1f481-1f3ff.svg": "179264", "./1f481-200d-2640-fe0f.svg": "137955", "./1f481-200d-2642-fe0f.svg": "104182", "./1f481.svg": "37403", "./1f482-1f3fb-200d-2640-fe0f.svg": "137376", "./1f482-1f3fb-200d-2642-fe0f.svg": "788108", "./1f482-1f3fb.svg": "35834", "./1f482-1f3fc-200d-2640-fe0f.svg": "808078", "./1f482-1f3fc-200d-2642-fe0f.svg": "983327", "./1f482-1f3fc.svg": "88606", "./1f482-1f3fd-200d-2640-fe0f.svg": "642815", "./1f482-1f3fd-200d-2642-fe0f.svg": "34523", "./1f482-1f3fd.svg": "258078", "./1f482-1f3fe-200d-2640-fe0f.svg": "187082", "./1f482-1f3fe-200d-2642-fe0f.svg": "486725", "./1f482-1f3fe.svg": "659331", "./1f482-1f3ff-200d-2640-fe0f.svg": "872780", "./1f482-1f3ff-200d-2642-fe0f.svg": "861322", "./1f482-1f3ff.svg": "37255", "./1f482-200d-2640-fe0f.svg": "593408", "./1f482-200d-2642-fe0f.svg": "834591", "./1f482.svg": "419593", "./1f483-1f3fb.svg": "78912", "./1f483-1f3fc.svg": "368442", "./1f483-1f3fd.svg": "707252", "./1f483-1f3fe.svg": "434362", "./1f483-1f3ff.svg": "410548", "./1f483.svg": "178068", "./1f484.svg": "288632", "./1f485-1f3fb.svg": "598470", "./1f485-1f3fc.svg": "739209", "./1f485-1f3fd.svg": "946258", "./1f485-1f3fe.svg": "501256", "./1f485-1f3ff.svg": "161999", "./1f485.svg": "299439", "./1f486-1f3fb-200d-2640-fe0f.svg": "654534", "./1f486-1f3fb-200d-2642-fe0f.svg": "812517", "./1f486-1f3fb.svg": "767444", "./1f486-1f3fc-200d-2640-fe0f.svg": "955048", "./1f486-1f3fc-200d-2642-fe0f.svg": "702263", "./1f486-1f3fc.svg": "108250", "./1f486-1f3fd-200d-2640-fe0f.svg": "840238", "./1f486-1f3fd-200d-2642-fe0f.svg": "537967", "./1f486-1f3fd.svg": "668756", "./1f486-1f3fe-200d-2640-fe0f.svg": "361691", "./1f486-1f3fe-200d-2642-fe0f.svg": "169062", "./1f486-1f3fe.svg": "911195", "./1f486-1f3ff-200d-2640-fe0f.svg": "271097", "./1f486-1f3ff-200d-2642-fe0f.svg": "150976", "./1f486-1f3ff.svg": "201356", "./1f486-200d-2640-fe0f.svg": "189188", "./1f486-200d-2642-fe0f.svg": "114241", "./1f486.svg": "335902", "./1f487-1f3fb-200d-2640-fe0f.svg": "944635", "./1f487-1f3fb-200d-2642-fe0f.svg": "979385", "./1f487-1f3fb.svg": "601264", "./1f487-1f3fc-200d-2640-fe0f.svg": "148648", "./1f487-1f3fc-200d-2642-fe0f.svg": "940393", "./1f487-1f3fc.svg": "504469", "./1f487-1f3fd-200d-2640-fe0f.svg": "556154", "./1f487-1f3fd-200d-2642-fe0f.svg": "150400", "./1f487-1f3fd.svg": "219298", "./1f487-1f3fe-200d-2640-fe0f.svg": "610997", "./1f487-1f3fe-200d-2642-fe0f.svg": "719648", "./1f487-1f3fe.svg": "745528", "./1f487-1f3ff-200d-2640-fe0f.svg": "373930", "./1f487-1f3ff-200d-2642-fe0f.svg": "584425", "./1f487-1f3ff.svg": "70586", "./1f487-200d-2640-fe0f.svg": "679041", "./1f487-200d-2642-fe0f.svg": "120814", "./1f487.svg": "374234", "./1f488.svg": "415563", "./1f489.svg": "253190", "./1f48a.svg": "895578", "./1f48b.svg": "70641", "./1f48c.svg": "324278", "./1f48d.svg": "778724", "./1f48e.svg": "493365", "./1f48f-1f3fb.svg": "881463", "./1f48f-1f3fc.svg": "52865", "./1f48f-1f3fd.svg": "495883", "./1f48f-1f3fe.svg": "877658", "./1f48f-1f3ff.svg": "881724", "./1f48f.svg": "247206", "./1f490.svg": "687058", "./1f491-1f3fb.svg": "254609", "./1f491-1f3fc.svg": "571927", "./1f491-1f3fd.svg": "644448", "./1f491-1f3fe.svg": "511055", "./1f491-1f3ff.svg": "707278", "./1f491.svg": "644633", "./1f492.svg": "43129", "./1f493.svg": "786355", "./1f494.svg": "616488", "./1f495.svg": "268035", "./1f496.svg": "74547", "./1f497.svg": "994134", "./1f498.svg": "366955", "./1f499.svg": "46263", "./1f49a.svg": "814946", "./1f49b.svg": "237453", "./1f49c.svg": "248360", "./1f49d.svg": "112752", "./1f49e.svg": "932202", "./1f49f.svg": "675956", "./1f4a0.svg": "880390", "./1f4a1.svg": "89861", "./1f4a2.svg": "447214", "./1f4a3.svg": "900320", "./1f4a4.svg": "940534", "./1f4a5.svg": "133847", "./1f4a6.svg": "873683", "./1f4a7.svg": "373135", "./1f4a8.svg": "618913", "./1f4a9.svg": "854375", "./1f4aa-1f3fb.svg": "163463", "./1f4aa-1f3fc.svg": "539949", "./1f4aa-1f3fd.svg": "838038", "./1f4aa-1f3fe.svg": "906379", "./1f4aa-1f3ff.svg": "564386", "./1f4aa.svg": "992365", "./1f4ab.svg": "683798", "./1f4ac.svg": "22759", "./1f4ad.svg": "977995", "./1f4ae.svg": "590074", "./1f4af.svg": "736829", "./1f4b0.svg": "788409", "./1f4b1.svg": "310333", "./1f4b2.svg": "866662", "./1f4b3.svg": "150402", "./1f4b4.svg": "140681", "./1f4b5.svg": "802848", "./1f4b6.svg": "319056", "./1f4b7.svg": "123544", "./1f4b8.svg": "876455", "./1f4b9.svg": "996881", "./1f4ba.svg": "297495", "./1f4bb.svg": "93702", "./1f4bc.svg": "926333", "./1f4bd.svg": "46770", "./1f4be.svg": "746512", "./1f4bf.svg": "952870", "./1f4c0.svg": "624539", "./1f4c1.svg": "774953", "./1f4c2.svg": "581153", "./1f4c3.svg": "230728", "./1f4c4.svg": "589447", "./1f4c5.svg": "595076", "./1f4c6.svg": "379042", "./1f4c7.svg": "134668", "./1f4c8.svg": "838381", "./1f4c9.svg": "146245", "./1f4ca.svg": "231753", "./1f4cb.svg": "412492", "./1f4cc.svg": "701913", "./1f4cd.svg": "12208", "./1f4ce.svg": "12908", "./1f4cf.svg": "746706", "./1f4d0.svg": "500047", "./1f4d1.svg": "759157", "./1f4d2.svg": "377785", "./1f4d3.svg": "770809", "./1f4d4.svg": "489608", "./1f4d5.svg": "563273", "./1f4d6.svg": "468759", "./1f4d7.svg": "724703", "./1f4d8.svg": "515633", "./1f4d9.svg": "568184", "./1f4da.svg": "451998", "./1f4db.svg": "519777", "./1f4dc.svg": "191269", "./1f4dd.svg": "959373", "./1f4de.svg": "664289", "./1f4df.svg": "933653", "./1f4e0.svg": "743063", "./1f4e1.svg": "257152", "./1f4e2.svg": "267025", "./1f4e3.svg": "702156", "./1f4e4.svg": "855758", "./1f4e5.svg": "340776", "./1f4e6.svg": "918468", "./1f4e7.svg": "734141", "./1f4e8.svg": "157744", "./1f4e9.svg": "471939", "./1f4ea.svg": "316692", "./1f4eb.svg": "86049", "./1f4ec.svg": "238722", "./1f4ed.svg": "619032", "./1f4ee.svg": "216614", "./1f4ef.svg": "80686", "./1f4f0.svg": "212490", "./1f4f1.svg": "410215", "./1f4f2.svg": "942242", "./1f4f3.svg": "79491", "./1f4f4.svg": "342590", "./1f4f5.svg": "178833", "./1f4f6.svg": "273453", "./1f4f7.svg": "232618", "./1f4f8.svg": "698133", "./1f4f9.svg": "155163", "./1f4fa.svg": "334273", "./1f4fb.svg": "426798", "./1f4fc.svg": "837348", "./1f4fd.svg": "401568", "./1f4ff.svg": "993236", "./1f500.svg": "239860", "./1f501.svg": "323387", "./1f502.svg": "598837", "./1f503.svg": "570840", "./1f504.svg": "305592", "./1f505.svg": "750098", "./1f506.svg": "74910", "./1f507.svg": "792786", "./1f508.svg": "39713", "./1f509.svg": "528051", "./1f50a.svg": "862586", "./1f50b.svg": "598384", "./1f50c.svg": "295346", "./1f50d.svg": "942589", "./1f50e.svg": "806262", "./1f50f.svg": "228810", "./1f510.svg": "906183", "./1f511.svg": "920901", "./1f512.svg": "541942", "./1f513.svg": "969787", "./1f514.svg": "613577", "./1f515.svg": "84732", "./1f516.svg": "181055", "./1f517.svg": "317419", "./1f518.svg": "765186", "./1f519.svg": "961801", "./1f51a.svg": "298034", "./1f51b.svg": "151071", "./1f51c.svg": "372396", "./1f51d.svg": "725577", "./1f51e.svg": "764149", "./1f51f.svg": "183971", "./1f520.svg": "591779", "./1f521.svg": "606734", "./1f522.svg": "286", "./1f523.svg": "258820", "./1f524.svg": "489836", "./1f525.svg": "627472", "./1f526.svg": "685973", "./1f527.svg": "818134", "./1f528.svg": "198204", "./1f529.svg": "345550", "./1f52a.svg": "998387", "./1f52b.svg": "558373", "./1f52c.svg": "497198", "./1f52d.svg": "360973", "./1f52e.svg": "141483", "./1f52f.svg": "179832", "./1f530.svg": "669751", "./1f531.svg": "196492", "./1f532.svg": "403537", "./1f533.svg": "680134", "./1f534.svg": "702522", "./1f535.svg": "496910", "./1f536.svg": "667955", "./1f537.svg": "361366", "./1f538.svg": "182978", "./1f539.svg": "365418", "./1f53a.svg": "516437", "./1f53b.svg": "2229", "./1f53c.svg": "317644", "./1f53d.svg": "465254", "./1f549.svg": "542754", "./1f54a.svg": "584227", "./1f54b.svg": "669780", "./1f54c.svg": "903803", "./1f54d.svg": "404398", "./1f54e.svg": "571551", "./1f550.svg": "395308", "./1f551.svg": "479729", "./1f552.svg": "50352", "./1f553.svg": "597870", "./1f554.svg": "38026", "./1f555.svg": "281838", "./1f556.svg": "869854", "./1f557.svg": "853349", "./1f558.svg": "703453", "./1f559.svg": "296255", "./1f55a.svg": "242979", "./1f55b.svg": "204794", "./1f55c.svg": "656348", "./1f55d.svg": "536299", "./1f55e.svg": "299601", "./1f55f.svg": "981242", "./1f560.svg": "659449", "./1f561.svg": "134482", "./1f562.svg": "91578", "./1f563.svg": "15085", "./1f564.svg": "27299", "./1f565.svg": "740289", "./1f566.svg": "780119", "./1f567.svg": "212990", "./1f56f.svg": "174113", "./1f570.svg": "168673", "./1f573.svg": "637532", "./1f574-1f3fb-200d-2640-fe0f.svg": "989981", "./1f574-1f3fb-200d-2642-fe0f.svg": "252836", "./1f574-1f3fb.svg": "358782", "./1f574-1f3fc-200d-2640-fe0f.svg": "593375", "./1f574-1f3fc-200d-2642-fe0f.svg": "784541", "./1f574-1f3fc.svg": "8571", "./1f574-1f3fd-200d-2640-fe0f.svg": "81021", "./1f574-1f3fd-200d-2642-fe0f.svg": "538763", "./1f574-1f3fd.svg": "276683", "./1f574-1f3fe-200d-2640-fe0f.svg": "545877", "./1f574-1f3fe-200d-2642-fe0f.svg": "215968", "./1f574-1f3fe.svg": "816658", "./1f574-1f3ff-200d-2640-fe0f.svg": "281471", "./1f574-1f3ff-200d-2642-fe0f.svg": "318135", "./1f574-1f3ff.svg": "754865", "./1f574-fe0f-200d-2640-fe0f.svg": "648574", "./1f574-fe0f-200d-2642-fe0f.svg": "435117", "./1f574.svg": "661799", "./1f575-1f3fb-200d-2640-fe0f.svg": "100228", "./1f575-1f3fb-200d-2642-fe0f.svg": "147292", "./1f575-1f3fb.svg": "212165", "./1f575-1f3fc-200d-2640-fe0f.svg": "254127", "./1f575-1f3fc-200d-2642-fe0f.svg": "860673", "./1f575-1f3fc.svg": "316251", "./1f575-1f3fd-200d-2640-fe0f.svg": "432005", "./1f575-1f3fd-200d-2642-fe0f.svg": "283552", "./1f575-1f3fd.svg": "958305", "./1f575-1f3fe-200d-2640-fe0f.svg": "503208", "./1f575-1f3fe-200d-2642-fe0f.svg": "435697", "./1f575-1f3fe.svg": "356492", "./1f575-1f3ff-200d-2640-fe0f.svg": "41970", "./1f575-1f3ff-200d-2642-fe0f.svg": "296635", "./1f575-1f3ff.svg": "618082", "./1f575-fe0f-200d-2640-fe0f.svg": "987756", "./1f575-fe0f-200d-2642-fe0f.svg": "949042", "./1f575.svg": "258002", "./1f576.svg": "267699", "./1f577.svg": "18196", "./1f578.svg": "188228", "./1f579.svg": "297170", "./1f57a-1f3fb.svg": "688236", "./1f57a-1f3fc.svg": "208772", "./1f57a-1f3fd.svg": "792046", "./1f57a-1f3fe.svg": "372357", "./1f57a-1f3ff.svg": "960279", "./1f57a.svg": "189118", "./1f587.svg": "686698", "./1f58a.svg": "521966", "./1f58b.svg": "613049", "./1f58c.svg": "1295", "./1f58d.svg": "741807", "./1f590-1f3fb.svg": "436295", "./1f590-1f3fc.svg": "406281", "./1f590-1f3fd.svg": "342974", "./1f590-1f3fe.svg": "409964", "./1f590-1f3ff.svg": "677295", "./1f590.svg": "636000", "./1f595-1f3fb.svg": "992927", "./1f595-1f3fc.svg": "368363", "./1f595-1f3fd.svg": "787889", "./1f595-1f3fe.svg": "425726", "./1f595-1f3ff.svg": "516300", "./1f595.svg": "964741", "./1f596-1f3fb.svg": "904531", "./1f596-1f3fc.svg": "343867", "./1f596-1f3fd.svg": "651940", "./1f596-1f3fe.svg": "325885", "./1f596-1f3ff.svg": "321612", "./1f596.svg": "655370", "./1f5a4.svg": "249612", "./1f5a5.svg": "403896", "./1f5a8.svg": "146120", "./1f5b1.svg": "439672", "./1f5b2.svg": "375779", "./1f5bc.svg": "582474", "./1f5c2.svg": "194796", "./1f5c3.svg": "869155", "./1f5c4.svg": "581214", "./1f5d1.svg": "889029", "./1f5d2.svg": "735018", "./1f5d3.svg": "701758", "./1f5dc.svg": "729319", "./1f5dd.svg": "105742", "./1f5de.svg": "558514", "./1f5e1.svg": "323014", "./1f5e3.svg": "995470", "./1f5e8.svg": "806953", "./1f5ef.svg": "476154", "./1f5f3.svg": "513694", "./1f5fa.svg": "723195", "./1f5fb.svg": "969138", "./1f5fc.svg": "612341", "./1f5fd.svg": "403804", "./1f5fe.svg": "598919", "./1f5ff.svg": "190333", "./1f600.svg": "50034", "./1f601.svg": "421233", "./1f602.svg": "358211", "./1f603.svg": "681751", "./1f604.svg": "906462", "./1f605.svg": "322248", "./1f606.svg": "201001", "./1f607.svg": "972627", "./1f608.svg": "510029", "./1f609.svg": "450260", "./1f60a.svg": "645615", "./1f60b.svg": "567072", "./1f60c.svg": "500483", "./1f60d.svg": "398925", "./1f60e.svg": "942550", "./1f60f.svg": "202632", "./1f610.svg": "565191", "./1f611.svg": "120610", "./1f612.svg": "374372", "./1f613.svg": "170907", "./1f614.svg": "218903", "./1f615.svg": "769270", "./1f616.svg": "686627", "./1f617.svg": "609831", "./1f618.svg": "167395", "./1f619.svg": "416018", "./1f61a.svg": "712658", "./1f61b.svg": "671276", "./1f61c.svg": "950376", "./1f61d.svg": "817186", "./1f61e.svg": "264198", "./1f61f.svg": "282451", "./1f620.svg": "891408", "./1f621.svg": "370147", "./1f622.svg": "630946", "./1f623.svg": "201328", "./1f624.svg": "818391", "./1f625.svg": "528482", "./1f626.svg": "21894", "./1f627.svg": "190088", "./1f628.svg": "218586", "./1f629.svg": "50040", "./1f62a.svg": "861933", "./1f62b.svg": "645102", "./1f62c.svg": "461600", "./1f62d.svg": "161618", "./1f62e-200d-1f4a8.svg": "48107", "./1f62e.svg": "299886", "./1f62f.svg": "510275", "./1f630.svg": "113180", "./1f631.svg": "299417", "./1f632.svg": "412691", "./1f633.svg": "615209", "./1f634.svg": "656844", "./1f635-200d-1f4ab.svg": "443905", "./1f635.svg": "744846", "./1f636-200d-1f32b-fe0f.svg": "749335", "./1f636.svg": "849832", "./1f637.svg": "337842", "./1f638.svg": "213123", "./1f639.svg": "853185", "./1f63a.svg": "150706", "./1f63b.svg": "268004", "./1f63c.svg": "364592", "./1f63d.svg": "755056", "./1f63e.svg": "842732", "./1f63f.svg": "667816", "./1f640.svg": "316824", "./1f641.svg": "540419", "./1f642.svg": "973088", "./1f643.svg": "397182", "./1f644.svg": "76042", "./1f645-1f3fb-200d-2640-fe0f.svg": "248059", "./1f645-1f3fb-200d-2642-fe0f.svg": "345221", "./1f645-1f3fb.svg": "909492", "./1f645-1f3fc-200d-2640-fe0f.svg": "870499", "./1f645-1f3fc-200d-2642-fe0f.svg": "92286", "./1f645-1f3fc.svg": "969664", "./1f645-1f3fd-200d-2640-fe0f.svg": "632797", "./1f645-1f3fd-200d-2642-fe0f.svg": "925583", "./1f645-1f3fd.svg": "290559", "./1f645-1f3fe-200d-2640-fe0f.svg": "143270", "./1f645-1f3fe-200d-2642-fe0f.svg": "449614", "./1f645-1f3fe.svg": "213618", "./1f645-1f3ff-200d-2640-fe0f.svg": "617786", "./1f645-1f3ff-200d-2642-fe0f.svg": "134858", "./1f645-1f3ff.svg": "183120", "./1f645-200d-2640-fe0f.svg": "850229", "./1f645-200d-2642-fe0f.svg": "382425", "./1f645.svg": "465938", "./1f646-1f3fb-200d-2640-fe0f.svg": "618883", "./1f646-1f3fb-200d-2642-fe0f.svg": "969893", "./1f646-1f3fb.svg": "289656", "./1f646-1f3fc-200d-2640-fe0f.svg": "456670", "./1f646-1f3fc-200d-2642-fe0f.svg": "346497", "./1f646-1f3fc.svg": "276884", "./1f646-1f3fd-200d-2640-fe0f.svg": "968805", "./1f646-1f3fd-200d-2642-fe0f.svg": "934141", "./1f646-1f3fd.svg": "105026", "./1f646-1f3fe-200d-2640-fe0f.svg": "521937", "./1f646-1f3fe-200d-2642-fe0f.svg": "611938", "./1f646-1f3fe.svg": "966278", "./1f646-1f3ff-200d-2640-fe0f.svg": "328985", "./1f646-1f3ff-200d-2642-fe0f.svg": "741759", "./1f646-1f3ff.svg": "852415", "./1f646-200d-2640-fe0f.svg": "551865", "./1f646-200d-2642-fe0f.svg": "459231", "./1f646.svg": "220582", "./1f647-1f3fb-200d-2640-fe0f.svg": "709974", "./1f647-1f3fb-200d-2642-fe0f.svg": "102071", "./1f647-1f3fb.svg": "426740", "./1f647-1f3fc-200d-2640-fe0f.svg": "311156", "./1f647-1f3fc-200d-2642-fe0f.svg": "264607", "./1f647-1f3fc.svg": "825546", "./1f647-1f3fd-200d-2640-fe0f.svg": "685661", "./1f647-1f3fd-200d-2642-fe0f.svg": "2955", "./1f647-1f3fd.svg": "588038", "./1f647-1f3fe-200d-2640-fe0f.svg": "460537", "./1f647-1f3fe-200d-2642-fe0f.svg": "613152", "./1f647-1f3fe.svg": "184858", "./1f647-1f3ff-200d-2640-fe0f.svg": "694584", "./1f647-1f3ff-200d-2642-fe0f.svg": "943553", "./1f647-1f3ff.svg": "101914", "./1f647-200d-2640-fe0f.svg": "831508", "./1f647-200d-2642-fe0f.svg": "571844", "./1f647.svg": "218119", "./1f648.svg": "336926", "./1f649.svg": "922221", "./1f64a.svg": "137408", "./1f64b-1f3fb-200d-2640-fe0f.svg": "13664", "./1f64b-1f3fb-200d-2642-fe0f.svg": "176975", "./1f64b-1f3fb.svg": "386543", "./1f64b-1f3fc-200d-2640-fe0f.svg": "421418", "./1f64b-1f3fc-200d-2642-fe0f.svg": "927133", "./1f64b-1f3fc.svg": "451473", "./1f64b-1f3fd-200d-2640-fe0f.svg": "920025", "./1f64b-1f3fd-200d-2642-fe0f.svg": "894482", "./1f64b-1f3fd.svg": "798701", "./1f64b-1f3fe-200d-2640-fe0f.svg": "43057", "./1f64b-1f3fe-200d-2642-fe0f.svg": "781234", "./1f64b-1f3fe.svg": "134141", "./1f64b-1f3ff-200d-2640-fe0f.svg": "204844", "./1f64b-1f3ff-200d-2642-fe0f.svg": "301690", "./1f64b-1f3ff.svg": "407016", "./1f64b-200d-2640-fe0f.svg": "925171", "./1f64b-200d-2642-fe0f.svg": "272379", "./1f64b.svg": "421117", "./1f64c-1f3fb.svg": "168065", "./1f64c-1f3fc.svg": "55366", "./1f64c-1f3fd.svg": "781121", "./1f64c-1f3fe.svg": "827478", "./1f64c-1f3ff.svg": "52423", "./1f64c.svg": "705793", "./1f64d-1f3fb-200d-2640-fe0f.svg": "932999", "./1f64d-1f3fb-200d-2642-fe0f.svg": "597477", "./1f64d-1f3fb.svg": "86000", "./1f64d-1f3fc-200d-2640-fe0f.svg": "491180", "./1f64d-1f3fc-200d-2642-fe0f.svg": "667959", "./1f64d-1f3fc.svg": "983153", "./1f64d-1f3fd-200d-2640-fe0f.svg": "272494", "./1f64d-1f3fd-200d-2642-fe0f.svg": "728824", "./1f64d-1f3fd.svg": "901366", "./1f64d-1f3fe-200d-2640-fe0f.svg": "454781", "./1f64d-1f3fe-200d-2642-fe0f.svg": "602611", "./1f64d-1f3fe.svg": "916764", "./1f64d-1f3ff-200d-2640-fe0f.svg": "169190", "./1f64d-1f3ff-200d-2642-fe0f.svg": "245761", "./1f64d-1f3ff.svg": "296291", "./1f64d-200d-2640-fe0f.svg": "237249", "./1f64d-200d-2642-fe0f.svg": "510952", "./1f64d.svg": "861708", "./1f64e-1f3fb-200d-2640-fe0f.svg": "729744", "./1f64e-1f3fb-200d-2642-fe0f.svg": "414602", "./1f64e-1f3fb.svg": "648881", "./1f64e-1f3fc-200d-2640-fe0f.svg": "110606", "./1f64e-1f3fc-200d-2642-fe0f.svg": "478127", "./1f64e-1f3fc.svg": "388018", "./1f64e-1f3fd-200d-2640-fe0f.svg": "407219", "./1f64e-1f3fd-200d-2642-fe0f.svg": "251780", "./1f64e-1f3fd.svg": "595132", "./1f64e-1f3fe-200d-2640-fe0f.svg": "729383", "./1f64e-1f3fe-200d-2642-fe0f.svg": "369457", "./1f64e-1f3fe.svg": "402294", "./1f64e-1f3ff-200d-2640-fe0f.svg": "711423", "./1f64e-1f3ff-200d-2642-fe0f.svg": "874193", "./1f64e-1f3ff.svg": "170744", "./1f64e-200d-2640-fe0f.svg": "414334", "./1f64e-200d-2642-fe0f.svg": "218491", "./1f64e.svg": "403479", "./1f64f-1f3fb.svg": "382168", "./1f64f-1f3fc.svg": "544575", "./1f64f-1f3fd.svg": "51443", "./1f64f-1f3fe.svg": "144488", "./1f64f-1f3ff.svg": "21524", "./1f64f.svg": "932527", "./1f680.svg": "846540", "./1f681.svg": "524443", "./1f682.svg": "640234", "./1f683.svg": "947398", "./1f684.svg": "857967", "./1f685.svg": "268574", "./1f686.svg": "699293", "./1f687.svg": "917124", "./1f688.svg": "957392", "./1f689.svg": "252429", "./1f68a.svg": "826072", "./1f68b.svg": "963118", "./1f68c.svg": "210894", "./1f68d.svg": "464619", "./1f68e.svg": "749652", "./1f68f.svg": "424539", "./1f690.svg": "676058", "./1f691.svg": "388917", "./1f692.svg": "336868", "./1f693.svg": "828380", "./1f694.svg": "643803", "./1f695.svg": "371998", "./1f696.svg": "383882", "./1f697.svg": "504839", "./1f698.svg": "915321", "./1f699.svg": "12422", "./1f69a.svg": "82001", "./1f69b.svg": "373237", "./1f69c.svg": "92200", "./1f69d.svg": "850029", "./1f69e.svg": "203198", "./1f69f.svg": "150307", "./1f6a0.svg": "106776", "./1f6a1.svg": "934051", "./1f6a2.svg": "769012", "./1f6a3-1f3fb-200d-2640-fe0f.svg": "763216", "./1f6a3-1f3fb-200d-2642-fe0f.svg": "198052", "./1f6a3-1f3fb.svg": "45853", "./1f6a3-1f3fc-200d-2640-fe0f.svg": "130945", "./1f6a3-1f3fc-200d-2642-fe0f.svg": "904514", "./1f6a3-1f3fc.svg": "887228", "./1f6a3-1f3fd-200d-2640-fe0f.svg": "62026", "./1f6a3-1f3fd-200d-2642-fe0f.svg": "926548", "./1f6a3-1f3fd.svg": "745312", "./1f6a3-1f3fe-200d-2640-fe0f.svg": "930359", "./1f6a3-1f3fe-200d-2642-fe0f.svg": "977216", "./1f6a3-1f3fe.svg": "954597", "./1f6a3-1f3ff-200d-2640-fe0f.svg": "369265", "./1f6a3-1f3ff-200d-2642-fe0f.svg": "110864", "./1f6a3-1f3ff.svg": "703296", "./1f6a3-200d-2640-fe0f.svg": "582573", "./1f6a3-200d-2642-fe0f.svg": "800244", "./1f6a3.svg": "433099", "./1f6a4.svg": "965967", "./1f6a5.svg": "988545", "./1f6a6.svg": "550439", "./1f6a7.svg": "897717", "./1f6a8.svg": "968771", "./1f6a9.svg": "65156", "./1f6aa.svg": "240530", "./1f6ab.svg": "479939", "./1f6ac.svg": "223622", "./1f6ad.svg": "738535", "./1f6ae.svg": "753680", "./1f6af.svg": "788884", "./1f6b0.svg": "269032", "./1f6b1.svg": "872857", "./1f6b2.svg": "950504", "./1f6b3.svg": "191248", "./1f6b4-1f3fb-200d-2640-fe0f.svg": "209359", "./1f6b4-1f3fb-200d-2642-fe0f.svg": "863263", "./1f6b4-1f3fb.svg": "384917", "./1f6b4-1f3fc-200d-2640-fe0f.svg": "136647", "./1f6b4-1f3fc-200d-2642-fe0f.svg": "488254", "./1f6b4-1f3fc.svg": "222045", "./1f6b4-1f3fd-200d-2640-fe0f.svg": "580373", "./1f6b4-1f3fd-200d-2642-fe0f.svg": "607261", "./1f6b4-1f3fd.svg": "223998", "./1f6b4-1f3fe-200d-2640-fe0f.svg": "438211", "./1f6b4-1f3fe-200d-2642-fe0f.svg": "768891", "./1f6b4-1f3fe.svg": "794943", "./1f6b4-1f3ff-200d-2640-fe0f.svg": "260722", "./1f6b4-1f3ff-200d-2642-fe0f.svg": "114091", "./1f6b4-1f3ff.svg": "502125", "./1f6b4-200d-2640-fe0f.svg": "287017", "./1f6b4-200d-2642-fe0f.svg": "982569", "./1f6b4.svg": "365769", "./1f6b5-1f3fb-200d-2640-fe0f.svg": "710622", "./1f6b5-1f3fb-200d-2642-fe0f.svg": "517867", "./1f6b5-1f3fb.svg": "845970", "./1f6b5-1f3fc-200d-2640-fe0f.svg": "449703", "./1f6b5-1f3fc-200d-2642-fe0f.svg": "985731", "./1f6b5-1f3fc.svg": "296652", "./1f6b5-1f3fd-200d-2640-fe0f.svg": "893710", "./1f6b5-1f3fd-200d-2642-fe0f.svg": "682758", "./1f6b5-1f3fd.svg": "720733", "./1f6b5-1f3fe-200d-2640-fe0f.svg": "768186", "./1f6b5-1f3fe-200d-2642-fe0f.svg": "197551", "./1f6b5-1f3fe.svg": "878807", "./1f6b5-1f3ff-200d-2640-fe0f.svg": "148129", "./1f6b5-1f3ff-200d-2642-fe0f.svg": "692201", "./1f6b5-1f3ff.svg": "628518", "./1f6b5-200d-2640-fe0f.svg": "365114", "./1f6b5-200d-2642-fe0f.svg": "228241", "./1f6b5.svg": "711386", "./1f6b6-1f3fb-200d-2640-fe0f.svg": "442672", "./1f6b6-1f3fb-200d-2642-fe0f.svg": "86809", "./1f6b6-1f3fb.svg": "790976", "./1f6b6-1f3fc-200d-2640-fe0f.svg": "823563", "./1f6b6-1f3fc-200d-2642-fe0f.svg": "939396", "./1f6b6-1f3fc.svg": "635997", "./1f6b6-1f3fd-200d-2640-fe0f.svg": "798079", "./1f6b6-1f3fd-200d-2642-fe0f.svg": "116898", "./1f6b6-1f3fd.svg": "271404", "./1f6b6-1f3fe-200d-2640-fe0f.svg": "997376", "./1f6b6-1f3fe-200d-2642-fe0f.svg": "467219", "./1f6b6-1f3fe.svg": "811831", "./1f6b6-1f3ff-200d-2640-fe0f.svg": "996521", "./1f6b6-1f3ff-200d-2642-fe0f.svg": "987397", "./1f6b6-1f3ff.svg": "14686", "./1f6b6-200d-2640-fe0f.svg": "349518", "./1f6b6-200d-2642-fe0f.svg": "967012", "./1f6b6.svg": "164229", "./1f6b7.svg": "523396", "./1f6b8.svg": "560824", "./1f6b9.svg": "651783", "./1f6ba.svg": "811683", "./1f6bb.svg": "504174", "./1f6bc.svg": "290066", "./1f6bd.svg": "282921", "./1f6be.svg": "804440", "./1f6bf.svg": "720154", "./1f6c0-1f3fb.svg": "946634", "./1f6c0-1f3fc.svg": "468227", "./1f6c0-1f3fd.svg": "663182", "./1f6c0-1f3fe.svg": "228248", "./1f6c0-1f3ff.svg": "901495", "./1f6c0.svg": "512113", "./1f6c1.svg": "848057", "./1f6c2.svg": "632322", "./1f6c3.svg": "141330", "./1f6c4.svg": "755869", "./1f6c5.svg": "969982", "./1f6cb.svg": "627012", "./1f6cc-1f3fb.svg": "725203", "./1f6cc-1f3fc.svg": "291926", "./1f6cc-1f3fd.svg": "363404", "./1f6cc-1f3fe.svg": "547323", "./1f6cc-1f3ff.svg": "464418", "./1f6cc.svg": "335792", "./1f6cd.svg": "805035", "./1f6ce.svg": "952736", "./1f6cf.svg": "479212", "./1f6d0.svg": "530098", "./1f6d1.svg": "750887", "./1f6d2.svg": "71482", "./1f6d5.svg": "182614", "./1f6d6.svg": "809558", "./1f6d7.svg": "311526", "./1f6dc.svg": "78224", "./1f6dd.svg": "930140", "./1f6de.svg": "830159", "./1f6df.svg": "832971", "./1f6e0.svg": "524831", "./1f6e1.svg": "474174", "./1f6e2.svg": "967874", "./1f6e3.svg": "687784", "./1f6e4.svg": "730034", "./1f6e5.svg": "532927", "./1f6e9.svg": "199277", "./1f6eb.svg": "726224", "./1f6ec.svg": "962150", "./1f6f0.svg": "631179", "./1f6f3.svg": "152201", "./1f6f4.svg": "126992", "./1f6f5.svg": "99177", "./1f6f6.svg": "904449", "./1f6f7.svg": "788646", "./1f6f8.svg": "949137", "./1f6f9.svg": "266043", "./1f6fa.svg": "569142", "./1f6fb.svg": "201064", "./1f6fc.svg": "894681", "./1f7e0.svg": "483059", "./1f7e1.svg": "355484", "./1f7e2.svg": "142708", "./1f7e3.svg": "488986", "./1f7e4.svg": "949732", "./1f7e5.svg": "110148", "./1f7e6.svg": "125567", "./1f7e7.svg": "128963", "./1f7e8.svg": "596046", "./1f7e9.svg": "500158", "./1f7ea.svg": "593115", "./1f7eb.svg": "829260", "./1f7f0.svg": "420297", "./1f90c-1f3fb.svg": "525633", "./1f90c-1f3fc.svg": "718085", "./1f90c-1f3fd.svg": "817906", "./1f90c-1f3fe.svg": "372015", "./1f90c-1f3ff.svg": "36088", "./1f90c.svg": "708777", "./1f90d.svg": "989517", "./1f90e.svg": "957228", "./1f90f-1f3fb.svg": "518769", "./1f90f-1f3fc.svg": "420172", "./1f90f-1f3fd.svg": "100797", "./1f90f-1f3fe.svg": "420792", "./1f90f-1f3ff.svg": "436193", "./1f90f.svg": "111521", "./1f910.svg": "225627", "./1f911.svg": "281021", "./1f912.svg": "510606", "./1f913.svg": "805488", "./1f914.svg": "242406", "./1f915.svg": "783296", "./1f916.svg": "127735", "./1f917.svg": "787714", "./1f918-1f3fb.svg": "970403", "./1f918-1f3fc.svg": "558579", "./1f918-1f3fd.svg": "970677", "./1f918-1f3fe.svg": "151227", "./1f918-1f3ff.svg": "973191", "./1f918.svg": "308351", "./1f919-1f3fb.svg": "661894", "./1f919-1f3fc.svg": "255425", "./1f919-1f3fd.svg": "822226", "./1f919-1f3fe.svg": "773968", "./1f919-1f3ff.svg": "603096", "./1f919.svg": "346980", "./1f91a-1f3fb.svg": "677791", "./1f91a-1f3fc.svg": "718412", "./1f91a-1f3fd.svg": "252805", "./1f91a-1f3fe.svg": "728520", "./1f91a-1f3ff.svg": "722729", "./1f91a.svg": "615531", "./1f91b-1f3fb.svg": "441047", "./1f91b-1f3fc.svg": "325573", "./1f91b-1f3fd.svg": "342412", "./1f91b-1f3fe.svg": "750025", "./1f91b-1f3ff.svg": "332488", "./1f91b.svg": "546517", "./1f91c-1f3fb.svg": "653882", "./1f91c-1f3fc.svg": "133320", "./1f91c-1f3fd.svg": "244267", "./1f91c-1f3fe.svg": "95474", "./1f91c-1f3ff.svg": "132421", "./1f91c.svg": "779382", "./1f91d-1f3fb.svg": "166026", "./1f91d-1f3fc.svg": "8939", "./1f91d-1f3fd.svg": "671509", "./1f91d-1f3fe.svg": "488748", "./1f91d-1f3ff.svg": "872245", "./1f91d.svg": "185102", "./1f91e-1f3fb.svg": "477353", "./1f91e-1f3fc.svg": "997790", "./1f91e-1f3fd.svg": "352196", "./1f91e-1f3fe.svg": "378302", "./1f91e-1f3ff.svg": "831483", "./1f91e.svg": "888054", "./1f91f-1f3fb.svg": "368592", "./1f91f-1f3fc.svg": "937005", "./1f91f-1f3fd.svg": "973881", "./1f91f-1f3fe.svg": "494565", "./1f91f-1f3ff.svg": "798875", "./1f91f.svg": "371864", "./1f920.svg": "797492", "./1f921.svg": "167000", "./1f922.svg": "191934", "./1f923.svg": "558249", "./1f924.svg": "343104", "./1f925.svg": "478997", "./1f926-1f3fb-200d-2640-fe0f.svg": "496432", "./1f926-1f3fb-200d-2642-fe0f.svg": "893946", "./1f926-1f3fb.svg": "240253", "./1f926-1f3fc-200d-2640-fe0f.svg": "243825", "./1f926-1f3fc-200d-2642-fe0f.svg": "631657", "./1f926-1f3fc.svg": "378914", "./1f926-1f3fd-200d-2640-fe0f.svg": "430125", "./1f926-1f3fd-200d-2642-fe0f.svg": "776323", "./1f926-1f3fd.svg": "212121", "./1f926-1f3fe-200d-2640-fe0f.svg": "729421", "./1f926-1f3fe-200d-2642-fe0f.svg": "68733", "./1f926-1f3fe.svg": "540101", "./1f926-1f3ff-200d-2640-fe0f.svg": "769865", "./1f926-1f3ff-200d-2642-fe0f.svg": "269310", "./1f926-1f3ff.svg": "293935", "./1f926-200d-2640-fe0f.svg": "499849", "./1f926-200d-2642-fe0f.svg": "5831", "./1f926.svg": "221951", "./1f927.svg": "286854", "./1f928.svg": "552980", "./1f929.svg": "527275", "./1f92a.svg": "161665", "./1f92b.svg": "636931", "./1f92c.svg": "90766", "./1f92d.svg": "777849", "./1f92e.svg": "764661", "./1f92f.svg": "647187", "./1f930-1f3fb.svg": "711489", "./1f930-1f3fc.svg": "650102", "./1f930-1f3fd.svg": "124182", "./1f930-1f3fe.svg": "52485", "./1f930-1f3ff.svg": "522642", "./1f930.svg": "41294", "./1f931-1f3fb.svg": "387077", "./1f931-1f3fc.svg": "57091", "./1f931-1f3fd.svg": "849117", "./1f931-1f3fe.svg": "306975", "./1f931-1f3ff.svg": "142525", "./1f931.svg": "685579", "./1f932-1f3fb.svg": "805636", "./1f932-1f3fc.svg": "841964", "./1f932-1f3fd.svg": "741781", "./1f932-1f3fe.svg": "457392", "./1f932-1f3ff.svg": "104098", "./1f932.svg": "129962", "./1f933-1f3fb.svg": "191600", "./1f933-1f3fc.svg": "344872", "./1f933-1f3fd.svg": "40468", "./1f933-1f3fe.svg": "732312", "./1f933-1f3ff.svg": "984130", "./1f933.svg": "458629", "./1f934-1f3fb.svg": "520979", "./1f934-1f3fc.svg": "112670", "./1f934-1f3fd.svg": "179193", "./1f934-1f3fe.svg": "43834", "./1f934-1f3ff.svg": "581091", "./1f934.svg": "219049", "./1f935-1f3fb-200d-2640-fe0f.svg": "497013", "./1f935-1f3fb-200d-2642-fe0f.svg": "111327", "./1f935-1f3fb.svg": "628687", "./1f935-1f3fc-200d-2640-fe0f.svg": "550552", "./1f935-1f3fc-200d-2642-fe0f.svg": "625464", "./1f935-1f3fc.svg": "582866", "./1f935-1f3fd-200d-2640-fe0f.svg": "897283", "./1f935-1f3fd-200d-2642-fe0f.svg": "276001", "./1f935-1f3fd.svg": "901591", "./1f935-1f3fe-200d-2640-fe0f.svg": "496757", "./1f935-1f3fe-200d-2642-fe0f.svg": "842225", "./1f935-1f3fe.svg": "931548", "./1f935-1f3ff-200d-2640-fe0f.svg": "908268", "./1f935-1f3ff-200d-2642-fe0f.svg": "567562", "./1f935-1f3ff.svg": "699662", "./1f935-200d-2640-fe0f.svg": "852447", "./1f935-200d-2642-fe0f.svg": "590472", "./1f935.svg": "711218", "./1f936-1f3fb.svg": "628129", "./1f936-1f3fc.svg": "532950", "./1f936-1f3fd.svg": "164445", "./1f936-1f3fe.svg": "148943", "./1f936-1f3ff.svg": "430938", "./1f936.svg": "223737", "./1f937-1f3fb-200d-2640-fe0f.svg": "924511", "./1f937-1f3fb-200d-2642-fe0f.svg": "203341", "./1f937-1f3fb.svg": "511825", "./1f937-1f3fc-200d-2640-fe0f.svg": "806240", "./1f937-1f3fc-200d-2642-fe0f.svg": "482293", "./1f937-1f3fc.svg": "533933", "./1f937-1f3fd-200d-2640-fe0f.svg": "423585", "./1f937-1f3fd-200d-2642-fe0f.svg": "169467", "./1f937-1f3fd.svg": "40638", "./1f937-1f3fe-200d-2640-fe0f.svg": "903199", "./1f937-1f3fe-200d-2642-fe0f.svg": "117473", "./1f937-1f3fe.svg": "938740", "./1f937-1f3ff-200d-2640-fe0f.svg": "366798", "./1f937-1f3ff-200d-2642-fe0f.svg": "605388", "./1f937-1f3ff.svg": "82093", "./1f937-200d-2640-fe0f.svg": "989237", "./1f937-200d-2642-fe0f.svg": "558166", "./1f937.svg": "346583", "./1f938-1f3fb-200d-2640-fe0f.svg": "54156", "./1f938-1f3fb-200d-2642-fe0f.svg": "448587", "./1f938-1f3fb.svg": "913951", "./1f938-1f3fc-200d-2640-fe0f.svg": "794481", "./1f938-1f3fc-200d-2642-fe0f.svg": "119654", "./1f938-1f3fc.svg": "986157", "./1f938-1f3fd-200d-2640-fe0f.svg": "321981", "./1f938-1f3fd-200d-2642-fe0f.svg": "433015", "./1f938-1f3fd.svg": "185837", "./1f938-1f3fe-200d-2640-fe0f.svg": "13638", "./1f938-1f3fe-200d-2642-fe0f.svg": "883889", "./1f938-1f3fe.svg": "94049", "./1f938-1f3ff-200d-2640-fe0f.svg": "649307", "./1f938-1f3ff-200d-2642-fe0f.svg": "109338", "./1f938-1f3ff.svg": "390070", "./1f938-200d-2640-fe0f.svg": "84889", "./1f938-200d-2642-fe0f.svg": "985347", "./1f938.svg": "976178", "./1f939-1f3fb-200d-2640-fe0f.svg": "144940", "./1f939-1f3fb-200d-2642-fe0f.svg": "851671", "./1f939-1f3fb.svg": "631850", "./1f939-1f3fc-200d-2640-fe0f.svg": "24248", "./1f939-1f3fc-200d-2642-fe0f.svg": "534390", "./1f939-1f3fc.svg": "43868", "./1f939-1f3fd-200d-2640-fe0f.svg": "646357", "./1f939-1f3fd-200d-2642-fe0f.svg": "778779", "./1f939-1f3fd.svg": "394497", "./1f939-1f3fe-200d-2640-fe0f.svg": "792630", "./1f939-1f3fe-200d-2642-fe0f.svg": "6940", "./1f939-1f3fe.svg": "197049", "./1f939-1f3ff-200d-2640-fe0f.svg": "39122", "./1f939-1f3ff-200d-2642-fe0f.svg": "909423", "./1f939-1f3ff.svg": "499429", "./1f939-200d-2640-fe0f.svg": "619972", "./1f939-200d-2642-fe0f.svg": "393027", "./1f939.svg": "991221", "./1f93a.svg": "82146", "./1f93c-200d-2640-fe0f.svg": "400538", "./1f93c-200d-2642-fe0f.svg": "971210", "./1f93c.svg": "135753", "./1f93d-1f3fb-200d-2640-fe0f.svg": "657473", "./1f93d-1f3fb-200d-2642-fe0f.svg": "38278", "./1f93d-1f3fb.svg": "745252", "./1f93d-1f3fc-200d-2640-fe0f.svg": "459854", "./1f93d-1f3fc-200d-2642-fe0f.svg": "257600", "./1f93d-1f3fc.svg": "453561", "./1f93d-1f3fd-200d-2640-fe0f.svg": "42026", "./1f93d-1f3fd-200d-2642-fe0f.svg": "910696", "./1f93d-1f3fd.svg": "760917", "./1f93d-1f3fe-200d-2640-fe0f.svg": "96492", "./1f93d-1f3fe-200d-2642-fe0f.svg": "410762", "./1f93d-1f3fe.svg": "203241", "./1f93d-1f3ff-200d-2640-fe0f.svg": "464721", "./1f93d-1f3ff-200d-2642-fe0f.svg": "993917", "./1f93d-1f3ff.svg": "540467", "./1f93d-200d-2640-fe0f.svg": "331419", "./1f93d-200d-2642-fe0f.svg": "554169", "./1f93d.svg": "632971", "./1f93e-1f3fb-200d-2640-fe0f.svg": "960160", "./1f93e-1f3fb-200d-2642-fe0f.svg": "74714", "./1f93e-1f3fb.svg": "758917", "./1f93e-1f3fc-200d-2640-fe0f.svg": "826594", "./1f93e-1f3fc-200d-2642-fe0f.svg": "753778", "./1f93e-1f3fc.svg": "879750", "./1f93e-1f3fd-200d-2640-fe0f.svg": "571492", "./1f93e-1f3fd-200d-2642-fe0f.svg": "599011", "./1f93e-1f3fd.svg": "942825", "./1f93e-1f3fe-200d-2640-fe0f.svg": "277894", "./1f93e-1f3fe-200d-2642-fe0f.svg": "158401", "./1f93e-1f3fe.svg": "609201", "./1f93e-1f3ff-200d-2640-fe0f.svg": "120865", "./1f93e-1f3ff-200d-2642-fe0f.svg": "217583", "./1f93e-1f3ff.svg": "417239", "./1f93e-200d-2640-fe0f.svg": "327201", "./1f93e-200d-2642-fe0f.svg": "513066", "./1f93e.svg": "903036", "./1f93f.svg": "369405", "./1f940.svg": "184230", "./1f941.svg": "744328", "./1f942.svg": "507362", "./1f943.svg": "81098", "./1f944.svg": "464175", "./1f945.svg": "999790", "./1f947.svg": "233145", "./1f948.svg": "275321", "./1f949.svg": "430897", "./1f94a.svg": "674446", "./1f94b.svg": "286045", "./1f94c.svg": "954434", "./1f94d.svg": "559778", "./1f94e.svg": "181268", "./1f94f.svg": "932120", "./1f950.svg": "861326", "./1f951.svg": "586890", "./1f952.svg": "143801", "./1f953.svg": "311207", "./1f954.svg": "431546", "./1f955.svg": "89627", "./1f956.svg": "305976", "./1f957.svg": "902109", "./1f958.svg": "786024", "./1f959.svg": "235527", "./1f95a.svg": "347246", "./1f95b.svg": "18544", "./1f95c.svg": "502551", "./1f95d.svg": "160762", "./1f95e.svg": "707716", "./1f95f.svg": "557212", "./1f960.svg": "388859", "./1f961.svg": "636306", "./1f962.svg": "782920", "./1f963.svg": "766617", "./1f964.svg": "926442", "./1f965.svg": "513806", "./1f966.svg": "123832", "./1f967.svg": "175873", "./1f968.svg": "948058", "./1f969.svg": "787427", "./1f96a.svg": "405577", "./1f96b.svg": "307681", "./1f96c.svg": "483008", "./1f96d.svg": "540711", "./1f96e.svg": "377561", "./1f96f.svg": "210478", "./1f970.svg": "320876", "./1f971.svg": "77460", "./1f972.svg": "558761", "./1f973.svg": "244966", "./1f974.svg": "806193", "./1f975.svg": "822658", "./1f976.svg": "269599", "./1f977-1f3fb.svg": "901349", "./1f977-1f3fc.svg": "48823", "./1f977-1f3fd.svg": "748766", "./1f977-1f3fe.svg": "858510", "./1f977-1f3ff.svg": "267278", "./1f977.svg": "489485", "./1f978.svg": "931721", "./1f979.svg": "518503", "./1f97a.svg": "632857", "./1f97b.svg": "982001", "./1f97c.svg": "7913", "./1f97d.svg": "299812", "./1f97e.svg": "251206", "./1f97f.svg": "201222", "./1f980.svg": "586131", "./1f981.svg": "878338", "./1f982.svg": "502351", "./1f983.svg": "330665", "./1f984.svg": "50643", "./1f985.svg": "39927", "./1f986.svg": "592258", "./1f987.svg": "171510", "./1f988.svg": "923754", "./1f989.svg": "619582", "./1f98a.svg": "35047", "./1f98b.svg": "197141", "./1f98c.svg": "735342", "./1f98d.svg": "607025", "./1f98e.svg": "409798", "./1f98f.svg": "225276", "./1f990.svg": "595846", "./1f991.svg": "270153", "./1f992.svg": "677234", "./1f993.svg": "867177", "./1f994.svg": "33596", "./1f995.svg": "685270", "./1f996.svg": "907176", "./1f997.svg": "21568", "./1f998.svg": "997891", "./1f999.svg": "575372", "./1f99a.svg": "532571", "./1f99b.svg": "756041", "./1f99c.svg": "614007", "./1f99d.svg": "58547", "./1f99e.svg": "184537", "./1f99f.svg": "346104", "./1f9a0.svg": "707407", "./1f9a1.svg": "314088", "./1f9a2.svg": "747765", "./1f9a3.svg": "890847", "./1f9a4.svg": "919974", "./1f9a5.svg": "185953", "./1f9a6.svg": "42581", "./1f9a7.svg": "106432", "./1f9a8.svg": "13516", "./1f9a9.svg": "586771", "./1f9aa.svg": "766472", "./1f9ab.svg": "947692", "./1f9ac.svg": "487002", "./1f9ad.svg": "598340", "./1f9ae.svg": "910669", "./1f9af.svg": "944687", "./1f9b0.svg": "700668", "./1f9b1.svg": "944200", "./1f9b2.svg": "758803", "./1f9b3.svg": "689465", "./1f9b4.svg": "426724", "./1f9b5-1f3fb.svg": "281155", "./1f9b5-1f3fc.svg": "481791", "./1f9b5-1f3fd.svg": "776314", "./1f9b5-1f3fe.svg": "260535", "./1f9b5-1f3ff.svg": "692247", "./1f9b5.svg": "950011", "./1f9b6-1f3fb.svg": "172817", "./1f9b6-1f3fc.svg": "956193", "./1f9b6-1f3fd.svg": "826663", "./1f9b6-1f3fe.svg": "872278", "./1f9b6-1f3ff.svg": "696270", "./1f9b6.svg": "984123", "./1f9b7.svg": "192325", "./1f9b8-1f3fb-200d-2640-fe0f.svg": "373628", "./1f9b8-1f3fb-200d-2642-fe0f.svg": "765277", "./1f9b8-1f3fb.svg": "414992", "./1f9b8-1f3fc-200d-2640-fe0f.svg": "186882", "./1f9b8-1f3fc-200d-2642-fe0f.svg": "988530", "./1f9b8-1f3fc.svg": "614866", "./1f9b8-1f3fd-200d-2640-fe0f.svg": "924091", "./1f9b8-1f3fd-200d-2642-fe0f.svg": "643456", "./1f9b8-1f3fd.svg": "191253", "./1f9b8-1f3fe-200d-2640-fe0f.svg": "341792", "./1f9b8-1f3fe-200d-2642-fe0f.svg": "493511", "./1f9b8-1f3fe.svg": "673021", "./1f9b8-1f3ff-200d-2640-fe0f.svg": "751699", "./1f9b8-1f3ff-200d-2642-fe0f.svg": "922136", "./1f9b8-1f3ff.svg": "275274", "./1f9b8-200d-2640-fe0f.svg": "501428", "./1f9b8-200d-2642-fe0f.svg": "333167", "./1f9b8.svg": "797372", "./1f9b9-1f3fb-200d-2640-fe0f.svg": "615067", "./1f9b9-1f3fb-200d-2642-fe0f.svg": "189559", "./1f9b9-1f3fb.svg": "885845", "./1f9b9-1f3fc-200d-2640-fe0f.svg": "589316", "./1f9b9-1f3fc-200d-2642-fe0f.svg": "345224", "./1f9b9-1f3fc.svg": "6856", "./1f9b9-1f3fd-200d-2640-fe0f.svg": "388881", "./1f9b9-1f3fd-200d-2642-fe0f.svg": "576368", "./1f9b9-1f3fd.svg": "957855", "./1f9b9-1f3fe-200d-2640-fe0f.svg": "366549", "./1f9b9-1f3fe-200d-2642-fe0f.svg": "917069", "./1f9b9-1f3fe.svg": "969804", "./1f9b9-1f3ff-200d-2640-fe0f.svg": "810547", "./1f9b9-1f3ff-200d-2642-fe0f.svg": "225979", "./1f9b9-1f3ff.svg": "478975", "./1f9b9-200d-2640-fe0f.svg": "370185", "./1f9b9-200d-2642-fe0f.svg": "860000", "./1f9b9.svg": "668639", "./1f9ba.svg": "141006", "./1f9bb-1f3fb.svg": "521447", "./1f9bb-1f3fc.svg": "771191", "./1f9bb-1f3fd.svg": "312832", "./1f9bb-1f3fe.svg": "929163", "./1f9bb-1f3ff.svg": "858151", "./1f9bb.svg": "343353", "./1f9bc.svg": "617792", "./1f9bd.svg": "358411", "./1f9be.svg": "698043", "./1f9bf.svg": "935477", "./1f9c0.svg": "584614", "./1f9c1.svg": "987599", "./1f9c2.svg": "436386", "./1f9c3.svg": "861154", "./1f9c4.svg": "572575", "./1f9c5.svg": "327206", "./1f9c6.svg": "183394", "./1f9c7.svg": "263316", "./1f9c8.svg": "374984", "./1f9c9.svg": "605866", "./1f9ca.svg": "808973", "./1f9cb.svg": "611700", "./1f9cc.svg": "835945", "./1f9cd-1f3fb-200d-2640-fe0f.svg": "80513", "./1f9cd-1f3fb-200d-2642-fe0f.svg": "966051", "./1f9cd-1f3fb.svg": "813667", "./1f9cd-1f3fc-200d-2640-fe0f.svg": "433154", "./1f9cd-1f3fc-200d-2642-fe0f.svg": "936369", "./1f9cd-1f3fc.svg": "714271", "./1f9cd-1f3fd-200d-2640-fe0f.svg": "773634", "./1f9cd-1f3fd-200d-2642-fe0f.svg": "415781", "./1f9cd-1f3fd.svg": "836836", "./1f9cd-1f3fe-200d-2640-fe0f.svg": "822043", "./1f9cd-1f3fe-200d-2642-fe0f.svg": "887828", "./1f9cd-1f3fe.svg": "687570", "./1f9cd-1f3ff-200d-2640-fe0f.svg": "530812", "./1f9cd-1f3ff-200d-2642-fe0f.svg": "95147", "./1f9cd-1f3ff.svg": "880409", "./1f9cd-200d-2640-fe0f.svg": "65525", "./1f9cd-200d-2642-fe0f.svg": "78595", "./1f9cd.svg": "138257", "./1f9ce-1f3fb-200d-2640-fe0f.svg": "270249", "./1f9ce-1f3fb-200d-2642-fe0f.svg": "172922", "./1f9ce-1f3fb.svg": "449467", "./1f9ce-1f3fc-200d-2640-fe0f.svg": "813877", "./1f9ce-1f3fc-200d-2642-fe0f.svg": "464218", "./1f9ce-1f3fc.svg": "707544", "./1f9ce-1f3fd-200d-2640-fe0f.svg": "269535", "./1f9ce-1f3fd-200d-2642-fe0f.svg": "812804", "./1f9ce-1f3fd.svg": "503366", "./1f9ce-1f3fe-200d-2640-fe0f.svg": "734670", "./1f9ce-1f3fe-200d-2642-fe0f.svg": "495216", "./1f9ce-1f3fe.svg": "103616", "./1f9ce-1f3ff-200d-2640-fe0f.svg": "338185", "./1f9ce-1f3ff-200d-2642-fe0f.svg": "223188", "./1f9ce-1f3ff.svg": "842848", "./1f9ce-200d-2640-fe0f.svg": "447693", "./1f9ce-200d-2642-fe0f.svg": "843889", "./1f9ce.svg": "915856", "./1f9cf-1f3fb-200d-2640-fe0f.svg": "65703", "./1f9cf-1f3fb-200d-2642-fe0f.svg": "113891", "./1f9cf-1f3fb.svg": "888302", "./1f9cf-1f3fc-200d-2640-fe0f.svg": "584765", "./1f9cf-1f3fc-200d-2642-fe0f.svg": "532380", "./1f9cf-1f3fc.svg": "354956", "./1f9cf-1f3fd-200d-2640-fe0f.svg": "577286", "./1f9cf-1f3fd-200d-2642-fe0f.svg": "434590", "./1f9cf-1f3fd.svg": "247784", "./1f9cf-1f3fe-200d-2640-fe0f.svg": "410354", "./1f9cf-1f3fe-200d-2642-fe0f.svg": "815308", "./1f9cf-1f3fe.svg": "551471", "./1f9cf-1f3ff-200d-2640-fe0f.svg": "60947", "./1f9cf-1f3ff-200d-2642-fe0f.svg": "834697", "./1f9cf-1f3ff.svg": "874454", "./1f9cf-200d-2640-fe0f.svg": "730577", "./1f9cf-200d-2642-fe0f.svg": "490243", "./1f9cf.svg": "392642", "./1f9d0.svg": "989619", "./1f9d1-1f3fb-200d-1f33e.svg": "340819", "./1f9d1-1f3fb-200d-1f373.svg": "887169", "./1f9d1-1f3fb-200d-1f37c.svg": "263656", "./1f9d1-1f3fb-200d-1f384.svg": "354920", "./1f9d1-1f3fb-200d-1f393.svg": "487351", "./1f9d1-1f3fb-200d-1f3a4.svg": "259547", "./1f9d1-1f3fb-200d-1f3a8.svg": "718891", "./1f9d1-1f3fb-200d-1f3eb.svg": "560663", "./1f9d1-1f3fb-200d-1f3ed.svg": "206311", "./1f9d1-1f3fb-200d-1f4bb.svg": "640045", "./1f9d1-1f3fb-200d-1f4bc.svg": "780942", "./1f9d1-1f3fb-200d-1f527.svg": "600370", "./1f9d1-1f3fb-200d-1f52c.svg": "492081", "./1f9d1-1f3fb-200d-1f680.svg": "632978", "./1f9d1-1f3fb-200d-1f692.svg": "571358", "./1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb.svg": "373870", "./1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc.svg": "671954", "./1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd.svg": "977389", "./1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe.svg": "543275", "./1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff.svg": "423505", "./1f9d1-1f3fb-200d-1f9af.svg": "692032", "./1f9d1-1f3fb-200d-1f9b0.svg": "487977", "./1f9d1-1f3fb-200d-1f9b1.svg": "708629", "./1f9d1-1f3fb-200d-1f9b2.svg": "737394", "./1f9d1-1f3fb-200d-1f9b3.svg": "332500", "./1f9d1-1f3fb-200d-1f9bc.svg": "769140", "./1f9d1-1f3fb-200d-1f9bd.svg": "322381", "./1f9d1-1f3fb-200d-2695-fe0f.svg": "184322", "./1f9d1-1f3fb-200d-2696-fe0f.svg": "336176", "./1f9d1-1f3fb-200d-2708-fe0f.svg": "221135", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg": "599956", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg": "226084", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg": "672222", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg": "285374", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fc.svg": "959048", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fd.svg": "328480", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3fe.svg": "301412", "./1f9d1-1f3fb-200d-2764-fe0f-200d-1f9d1-1f3ff.svg": "125154", "./1f9d1-1f3fb.svg": "116919", "./1f9d1-1f3fc-200d-1f33e.svg": "581062", "./1f9d1-1f3fc-200d-1f373.svg": "770612", "./1f9d1-1f3fc-200d-1f37c.svg": "623651", "./1f9d1-1f3fc-200d-1f384.svg": "552032", "./1f9d1-1f3fc-200d-1f393.svg": "382773", "./1f9d1-1f3fc-200d-1f3a4.svg": "439962", "./1f9d1-1f3fc-200d-1f3a8.svg": "73287", "./1f9d1-1f3fc-200d-1f3eb.svg": "88830", "./1f9d1-1f3fc-200d-1f3ed.svg": "117396", "./1f9d1-1f3fc-200d-1f4bb.svg": "104526", "./1f9d1-1f3fc-200d-1f4bc.svg": "377830", "./1f9d1-1f3fc-200d-1f527.svg": "21644", "./1f9d1-1f3fc-200d-1f52c.svg": "637436", "./1f9d1-1f3fc-200d-1f680.svg": "318329", "./1f9d1-1f3fc-200d-1f692.svg": "383702", "./1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb.svg": "489889", "./1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc.svg": "680571", "./1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd.svg": "677304", "./1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe.svg": "919151", "./1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff.svg": "460378", "./1f9d1-1f3fc-200d-1f9af.svg": "534005", "./1f9d1-1f3fc-200d-1f9b0.svg": "810505", "./1f9d1-1f3fc-200d-1f9b1.svg": "121404", "./1f9d1-1f3fc-200d-1f9b2.svg": "187539", "./1f9d1-1f3fc-200d-1f9b3.svg": "613696", "./1f9d1-1f3fc-200d-1f9bc.svg": "979928", "./1f9d1-1f3fc-200d-1f9bd.svg": "802653", "./1f9d1-1f3fc-200d-2695-fe0f.svg": "376926", "./1f9d1-1f3fc-200d-2696-fe0f.svg": "142289", "./1f9d1-1f3fc-200d-2708-fe0f.svg": "819797", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg": "919623", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg": "989636", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg": "332134", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg": "262163", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fb.svg": "497393", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fd.svg": "102733", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3fe.svg": "740551", "./1f9d1-1f3fc-200d-2764-fe0f-200d-1f9d1-1f3ff.svg": "82843", "./1f9d1-1f3fc.svg": "743241", "./1f9d1-1f3fd-200d-1f33e.svg": "91422", "./1f9d1-1f3fd-200d-1f373.svg": "839672", "./1f9d1-1f3fd-200d-1f37c.svg": "890140", "./1f9d1-1f3fd-200d-1f384.svg": "115067", "./1f9d1-1f3fd-200d-1f393.svg": "276946", "./1f9d1-1f3fd-200d-1f3a4.svg": "620190", "./1f9d1-1f3fd-200d-1f3a8.svg": "439707", "./1f9d1-1f3fd-200d-1f3eb.svg": "834827", "./1f9d1-1f3fd-200d-1f3ed.svg": "435958", "./1f9d1-1f3fd-200d-1f4bb.svg": "944533", "./1f9d1-1f3fd-200d-1f4bc.svg": "877596", "./1f9d1-1f3fd-200d-1f527.svg": "808094", "./1f9d1-1f3fd-200d-1f52c.svg": "107363", "./1f9d1-1f3fd-200d-1f680.svg": "19770", "./1f9d1-1f3fd-200d-1f692.svg": "755003", "./1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb.svg": "33549", "./1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc.svg": "590184", "./1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd.svg": "986557", "./1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe.svg": "436831", "./1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff.svg": "352608", "./1f9d1-1f3fd-200d-1f9af.svg": "715453", "./1f9d1-1f3fd-200d-1f9b0.svg": "189162", "./1f9d1-1f3fd-200d-1f9b1.svg": "951560", "./1f9d1-1f3fd-200d-1f9b2.svg": "197991", "./1f9d1-1f3fd-200d-1f9b3.svg": "357179", "./1f9d1-1f3fd-200d-1f9bc.svg": "167791", "./1f9d1-1f3fd-200d-1f9bd.svg": "473882", "./1f9d1-1f3fd-200d-2695-fe0f.svg": "964786", "./1f9d1-1f3fd-200d-2696-fe0f.svg": "724675", "./1f9d1-1f3fd-200d-2708-fe0f.svg": "817740", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg": "96199", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg": "614748", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg": "480536", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg": "390048", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fb.svg": "330046", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fc.svg": "181146", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3fe.svg": "773742", "./1f9d1-1f3fd-200d-2764-fe0f-200d-1f9d1-1f3ff.svg": "584088", "./1f9d1-1f3fd.svg": "947754", "./1f9d1-1f3fe-200d-1f33e.svg": "426420", "./1f9d1-1f3fe-200d-1f373.svg": "533142", "./1f9d1-1f3fe-200d-1f37c.svg": "774895", "./1f9d1-1f3fe-200d-1f384.svg": "96941", "./1f9d1-1f3fe-200d-1f393.svg": "641313", "./1f9d1-1f3fe-200d-1f3a4.svg": "309919", "./1f9d1-1f3fe-200d-1f3a8.svg": "2074", "./1f9d1-1f3fe-200d-1f3eb.svg": "957558", "./1f9d1-1f3fe-200d-1f3ed.svg": "518681", "./1f9d1-1f3fe-200d-1f4bb.svg": "240640", "./1f9d1-1f3fe-200d-1f4bc.svg": "908348", "./1f9d1-1f3fe-200d-1f527.svg": "216609", "./1f9d1-1f3fe-200d-1f52c.svg": "336711", "./1f9d1-1f3fe-200d-1f680.svg": "242288", "./1f9d1-1f3fe-200d-1f692.svg": "348130", "./1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb.svg": "231278", "./1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc.svg": "182755", "./1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd.svg": "72127", "./1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe.svg": "536929", "./1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff.svg": "359933", "./1f9d1-1f3fe-200d-1f9af.svg": "540505", "./1f9d1-1f3fe-200d-1f9b0.svg": "220394", "./1f9d1-1f3fe-200d-1f9b1.svg": "12031", "./1f9d1-1f3fe-200d-1f9b2.svg": "624220", "./1f9d1-1f3fe-200d-1f9b3.svg": "415217", "./1f9d1-1f3fe-200d-1f9bc.svg": "68374", "./1f9d1-1f3fe-200d-1f9bd.svg": "52684", "./1f9d1-1f3fe-200d-2695-fe0f.svg": "572499", "./1f9d1-1f3fe-200d-2696-fe0f.svg": "886847", "./1f9d1-1f3fe-200d-2708-fe0f.svg": "580158", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg": "588787", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg": "331113", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg": "537101", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3ff.svg": "49465", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fb.svg": "762173", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fc.svg": "576855", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3fd.svg": "978107", "./1f9d1-1f3fe-200d-2764-fe0f-200d-1f9d1-1f3ff.svg": "443734", "./1f9d1-1f3fe.svg": "132929", "./1f9d1-1f3ff-200d-1f33e.svg": "841035", "./1f9d1-1f3ff-200d-1f373.svg": "858552", "./1f9d1-1f3ff-200d-1f37c.svg": "743198", "./1f9d1-1f3ff-200d-1f384.svg": "113157", "./1f9d1-1f3ff-200d-1f393.svg": "166322", "./1f9d1-1f3ff-200d-1f3a4.svg": "973450", "./1f9d1-1f3ff-200d-1f3a8.svg": "122463", "./1f9d1-1f3ff-200d-1f3eb.svg": "252528", "./1f9d1-1f3ff-200d-1f3ed.svg": "291603", "./1f9d1-1f3ff-200d-1f4bb.svg": "195925", "./1f9d1-1f3ff-200d-1f4bc.svg": "804221", "./1f9d1-1f3ff-200d-1f527.svg": "310098", "./1f9d1-1f3ff-200d-1f52c.svg": "427449", "./1f9d1-1f3ff-200d-1f680.svg": "808252", "./1f9d1-1f3ff-200d-1f692.svg": "261257", "./1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb.svg": "305694", "./1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc.svg": "819491", "./1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd.svg": "884451", "./1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe.svg": "227073", "./1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff.svg": "907802", "./1f9d1-1f3ff-200d-1f9af.svg": "460941", "./1f9d1-1f3ff-200d-1f9b0.svg": "223093", "./1f9d1-1f3ff-200d-1f9b1.svg": "993776", "./1f9d1-1f3ff-200d-1f9b2.svg": "907464", "./1f9d1-1f3ff-200d-1f9b3.svg": "361116", "./1f9d1-1f3ff-200d-1f9bc.svg": "601287", "./1f9d1-1f3ff-200d-1f9bd.svg": "15573", "./1f9d1-1f3ff-200d-2695-fe0f.svg": "235570", "./1f9d1-1f3ff-200d-2696-fe0f.svg": "722500", "./1f9d1-1f3ff-200d-2708-fe0f.svg": "886411", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fb.svg": "528089", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fc.svg": "438161", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fd.svg": "209419", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f48b-200d-1f9d1-1f3fe.svg": "189582", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fb.svg": "410984", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fc.svg": "851681", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fd.svg": "842535", "./1f9d1-1f3ff-200d-2764-fe0f-200d-1f9d1-1f3fe.svg": "49202", "./1f9d1-1f3ff.svg": "101895", "./1f9d1-200d-1f33e.svg": "133837", "./1f9d1-200d-1f373.svg": "370640", "./1f9d1-200d-1f37c.svg": "743604", "./1f9d1-200d-1f384.svg": "483034", "./1f9d1-200d-1f393.svg": "618249", "./1f9d1-200d-1f3a4.svg": "795449", "./1f9d1-200d-1f3a8.svg": "330472", "./1f9d1-200d-1f3eb.svg": "356221", "./1f9d1-200d-1f3ed.svg": "688035", "./1f9d1-200d-1f4bb.svg": "233332", "./1f9d1-200d-1f4bc.svg": "414876", "./1f9d1-200d-1f527.svg": "339507", "./1f9d1-200d-1f52c.svg": "402643", "./1f9d1-200d-1f680.svg": "257010", "./1f9d1-200d-1f692.svg": "890127", "./1f9d1-200d-1f91d-200d-1f9d1.svg": "671408", "./1f9d1-200d-1f9af.svg": "218650", "./1f9d1-200d-1f9b0.svg": "411889", "./1f9d1-200d-1f9b1.svg": "428224", "./1f9d1-200d-1f9b2.svg": "290816", "./1f9d1-200d-1f9b3.svg": "482304", "./1f9d1-200d-1f9bc.svg": "904959", "./1f9d1-200d-1f9bd.svg": "63488", "./1f9d1-200d-2695-fe0f.svg": "216945", "./1f9d1-200d-2696-fe0f.svg": "786257", "./1f9d1-200d-2708-fe0f.svg": "988521", "./1f9d1.svg": "827918", "./1f9d2-1f3fb.svg": "822132", "./1f9d2-1f3fc.svg": "884543", "./1f9d2-1f3fd.svg": "126803", "./1f9d2-1f3fe.svg": "191799", "./1f9d2-1f3ff.svg": "567390", "./1f9d2.svg": "544881", "./1f9d3-1f3fb.svg": "455538", "./1f9d3-1f3fc.svg": "82314", "./1f9d3-1f3fd.svg": "173240", "./1f9d3-1f3fe.svg": "945551", "./1f9d3-1f3ff.svg": "926612", "./1f9d3.svg": "536032", "./1f9d4-1f3fb-200d-2640-fe0f.svg": "756579", "./1f9d4-1f3fb-200d-2642-fe0f.svg": "775929", "./1f9d4-1f3fb.svg": "14872", "./1f9d4-1f3fc-200d-2640-fe0f.svg": "197980", "./1f9d4-1f3fc-200d-2642-fe0f.svg": "154303", "./1f9d4-1f3fc.svg": "693763", "./1f9d4-1f3fd-200d-2640-fe0f.svg": "362703", "./1f9d4-1f3fd-200d-2642-fe0f.svg": "92793", "./1f9d4-1f3fd.svg": "527099", "./1f9d4-1f3fe-200d-2640-fe0f.svg": "671544", "./1f9d4-1f3fe-200d-2642-fe0f.svg": "475406", "./1f9d4-1f3fe.svg": "515092", "./1f9d4-1f3ff-200d-2640-fe0f.svg": "92447", "./1f9d4-1f3ff-200d-2642-fe0f.svg": "327151", "./1f9d4-1f3ff.svg": "924628", "./1f9d4-200d-2640-fe0f.svg": "730676", "./1f9d4-200d-2642-fe0f.svg": "120994", "./1f9d4.svg": "350037", "./1f9d5-1f3fb.svg": "66357", "./1f9d5-1f3fc.svg": "813021", "./1f9d5-1f3fd.svg": "916834", "./1f9d5-1f3fe.svg": "348218", "./1f9d5-1f3ff.svg": "507345", "./1f9d5.svg": "224478", "./1f9d6-1f3fb-200d-2640-fe0f.svg": "742861", "./1f9d6-1f3fb-200d-2642-fe0f.svg": "686146", "./1f9d6-1f3fb.svg": "848949", "./1f9d6-1f3fc-200d-2640-fe0f.svg": "769699", "./1f9d6-1f3fc-200d-2642-fe0f.svg": "922300", "./1f9d6-1f3fc.svg": "211107", "./1f9d6-1f3fd-200d-2640-fe0f.svg": "323870", "./1f9d6-1f3fd-200d-2642-fe0f.svg": "883965", "./1f9d6-1f3fd.svg": "844537", "./1f9d6-1f3fe-200d-2640-fe0f.svg": "635506", "./1f9d6-1f3fe-200d-2642-fe0f.svg": "336346", "./1f9d6-1f3fe.svg": "382225", "./1f9d6-1f3ff-200d-2640-fe0f.svg": "32791", "./1f9d6-1f3ff-200d-2642-fe0f.svg": "287684", "./1f9d6-1f3ff.svg": "882954", "./1f9d6-200d-2640-fe0f.svg": "570822", "./1f9d6-200d-2642-fe0f.svg": "280429", "./1f9d6.svg": "286857", "./1f9d7-1f3fb-200d-2640-fe0f.svg": "154626", "./1f9d7-1f3fb-200d-2642-fe0f.svg": "493935", "./1f9d7-1f3fb.svg": "895625", "./1f9d7-1f3fc-200d-2640-fe0f.svg": "887901", "./1f9d7-1f3fc-200d-2642-fe0f.svg": "199856", "./1f9d7-1f3fc.svg": "540941", "./1f9d7-1f3fd-200d-2640-fe0f.svg": "796965", "./1f9d7-1f3fd-200d-2642-fe0f.svg": "7594", "./1f9d7-1f3fd.svg": "600450", "./1f9d7-1f3fe-200d-2640-fe0f.svg": "857070", "./1f9d7-1f3fe-200d-2642-fe0f.svg": "963232", "./1f9d7-1f3fe.svg": "667123", "./1f9d7-1f3ff-200d-2640-fe0f.svg": "942983", "./1f9d7-1f3ff-200d-2642-fe0f.svg": "645948", "./1f9d7-1f3ff.svg": "888461", "./1f9d7-200d-2640-fe0f.svg": "178254", "./1f9d7-200d-2642-fe0f.svg": "81160", "./1f9d7.svg": "32168", "./1f9d8-1f3fb-200d-2640-fe0f.svg": "363847", "./1f9d8-1f3fb-200d-2642-fe0f.svg": "349198", "./1f9d8-1f3fb.svg": "126874", "./1f9d8-1f3fc-200d-2640-fe0f.svg": "376612", "./1f9d8-1f3fc-200d-2642-fe0f.svg": "236695", "./1f9d8-1f3fc.svg": "807362", "./1f9d8-1f3fd-200d-2640-fe0f.svg": "868620", "./1f9d8-1f3fd-200d-2642-fe0f.svg": "668846", "./1f9d8-1f3fd.svg": "427859", "./1f9d8-1f3fe-200d-2640-fe0f.svg": "657813", "./1f9d8-1f3fe-200d-2642-fe0f.svg": "65668", "./1f9d8-1f3fe.svg": "701788", "./1f9d8-1f3ff-200d-2640-fe0f.svg": "701904", "./1f9d8-1f3ff-200d-2642-fe0f.svg": "439068", "./1f9d8-1f3ff.svg": "737511", "./1f9d8-200d-2640-fe0f.svg": "408666", "./1f9d8-200d-2642-fe0f.svg": "655035", "./1f9d8.svg": "710164", "./1f9d9-1f3fb-200d-2640-fe0f.svg": "159881", "./1f9d9-1f3fb-200d-2642-fe0f.svg": "268031", "./1f9d9-1f3fb.svg": "822729", "./1f9d9-1f3fc-200d-2640-fe0f.svg": "721757", "./1f9d9-1f3fc-200d-2642-fe0f.svg": "623734", "./1f9d9-1f3fc.svg": "922636", "./1f9d9-1f3fd-200d-2640-fe0f.svg": "978713", "./1f9d9-1f3fd-200d-2642-fe0f.svg": "966848", "./1f9d9-1f3fd.svg": "716101", "./1f9d9-1f3fe-200d-2640-fe0f.svg": "492927", "./1f9d9-1f3fe-200d-2642-fe0f.svg": "455185", "./1f9d9-1f3fe.svg": "153849", "./1f9d9-1f3ff-200d-2640-fe0f.svg": "968380", "./1f9d9-1f3ff-200d-2642-fe0f.svg": "768294", "./1f9d9-1f3ff.svg": "402194", "./1f9d9-200d-2640-fe0f.svg": "219490", "./1f9d9-200d-2642-fe0f.svg": "613172", "./1f9d9.svg": "583630", "./1f9da-1f3fb-200d-2640-fe0f.svg": "797620", "./1f9da-1f3fb-200d-2642-fe0f.svg": "161518", "./1f9da-1f3fb.svg": "549249", "./1f9da-1f3fc-200d-2640-fe0f.svg": "713993", "./1f9da-1f3fc-200d-2642-fe0f.svg": "427039", "./1f9da-1f3fc.svg": "71341", "./1f9da-1f3fd-200d-2640-fe0f.svg": "203006", "./1f9da-1f3fd-200d-2642-fe0f.svg": "498012", "./1f9da-1f3fd.svg": "897529", "./1f9da-1f3fe-200d-2640-fe0f.svg": "753634", "./1f9da-1f3fe-200d-2642-fe0f.svg": "46643", "./1f9da-1f3fe.svg": "845896", "./1f9da-1f3ff-200d-2640-fe0f.svg": "634560", "./1f9da-1f3ff-200d-2642-fe0f.svg": "62548", "./1f9da-1f3ff.svg": "638927", "./1f9da-200d-2640-fe0f.svg": "914599", "./1f9da-200d-2642-fe0f.svg": "523877", "./1f9da.svg": "722589", "./1f9db-1f3fb-200d-2640-fe0f.svg": "109926", "./1f9db-1f3fb-200d-2642-fe0f.svg": "583763", "./1f9db-1f3fb.svg": "714083", "./1f9db-1f3fc-200d-2640-fe0f.svg": "714221", "./1f9db-1f3fc-200d-2642-fe0f.svg": "913041", "./1f9db-1f3fc.svg": "935387", "./1f9db-1f3fd-200d-2640-fe0f.svg": "221697", "./1f9db-1f3fd-200d-2642-fe0f.svg": "527337", "./1f9db-1f3fd.svg": "61097", "./1f9db-1f3fe-200d-2640-fe0f.svg": "668182", "./1f9db-1f3fe-200d-2642-fe0f.svg": "5269", "./1f9db-1f3fe.svg": "89703", "./1f9db-1f3ff-200d-2640-fe0f.svg": "461507", "./1f9db-1f3ff-200d-2642-fe0f.svg": "611684", "./1f9db-1f3ff.svg": "108767", "./1f9db-200d-2640-fe0f.svg": "90050", "./1f9db-200d-2642-fe0f.svg": "11450", "./1f9db.svg": "678118", "./1f9dc-1f3fb-200d-2640-fe0f.svg": "573133", "./1f9dc-1f3fb-200d-2642-fe0f.svg": "387035", "./1f9dc-1f3fb.svg": "579616", "./1f9dc-1f3fc-200d-2640-fe0f.svg": "577425", "./1f9dc-1f3fc-200d-2642-fe0f.svg": "83108", "./1f9dc-1f3fc.svg": "858960", "./1f9dc-1f3fd-200d-2640-fe0f.svg": "38416", "./1f9dc-1f3fd-200d-2642-fe0f.svg": "354980", "./1f9dc-1f3fd.svg": "356240", "./1f9dc-1f3fe-200d-2640-fe0f.svg": "123450", "./1f9dc-1f3fe-200d-2642-fe0f.svg": "569205", "./1f9dc-1f3fe.svg": "905750", "./1f9dc-1f3ff-200d-2640-fe0f.svg": "181740", "./1f9dc-1f3ff-200d-2642-fe0f.svg": "802301", "./1f9dc-1f3ff.svg": "17690", "./1f9dc-200d-2640-fe0f.svg": "519257", "./1f9dc-200d-2642-fe0f.svg": "382566", "./1f9dc.svg": "189808", "./1f9dd-1f3fb-200d-2640-fe0f.svg": "832509", "./1f9dd-1f3fb-200d-2642-fe0f.svg": "831278", "./1f9dd-1f3fb.svg": "891952", "./1f9dd-1f3fc-200d-2640-fe0f.svg": "971396", "./1f9dd-1f3fc-200d-2642-fe0f.svg": "361272", "./1f9dd-1f3fc.svg": "660397", "./1f9dd-1f3fd-200d-2640-fe0f.svg": "394959", "./1f9dd-1f3fd-200d-2642-fe0f.svg": "437899", "./1f9dd-1f3fd.svg": "874105", "./1f9dd-1f3fe-200d-2640-fe0f.svg": "887289", "./1f9dd-1f3fe-200d-2642-fe0f.svg": "709951", "./1f9dd-1f3fe.svg": "239163", "./1f9dd-1f3ff-200d-2640-fe0f.svg": "334253", "./1f9dd-1f3ff-200d-2642-fe0f.svg": "793929", "./1f9dd-1f3ff.svg": "160908", "./1f9dd-200d-2640-fe0f.svg": "659761", "./1f9dd-200d-2642-fe0f.svg": "484158", "./1f9dd.svg": "653086", "./1f9de-200d-2640-fe0f.svg": "313989", "./1f9de-200d-2642-fe0f.svg": "353575", "./1f9de.svg": "474319", "./1f9df-200d-2640-fe0f.svg": "917224", "./1f9df-200d-2642-fe0f.svg": "749751", "./1f9df.svg": "360542", "./1f9e0.svg": "309770", "./1f9e1.svg": "764793", "./1f9e2.svg": "572282", "./1f9e3.svg": "756724", "./1f9e4.svg": "505715", "./1f9e5.svg": "64457", "./1f9e6.svg": "79247", "./1f9e7.svg": "301970", "./1f9e8.svg": "684959", "./1f9e9.svg": "500821", "./1f9ea.svg": "39445", "./1f9eb.svg": "128263", "./1f9ec.svg": "989241", "./1f9ed.svg": "621633", "./1f9ee.svg": "311477", "./1f9ef.svg": "993591", "./1f9f0.svg": "985981", "./1f9f1.svg": "870701", "./1f9f2.svg": "499469", "./1f9f3.svg": "128160", "./1f9f4.svg": "969061", "./1f9f5.svg": "516849", "./1f9f6.svg": "505437", "./1f9f7.svg": "166899", "./1f9f8.svg": "915610", "./1f9f9.svg": "90641", "./1f9fa.svg": "227378", "./1f9fb.svg": "699914", "./1f9fc.svg": "634771", "./1f9fd.svg": "634208", "./1f9fe.svg": "139685", "./1f9ff.svg": "493915", "./1fa70.svg": "718749", "./1fa71.svg": "291357", "./1fa72.svg": "920488", "./1fa73.svg": "756310", "./1fa74.svg": "698755", "./1fa75.svg": "916391", "./1fa76.svg": "154087", "./1fa77.svg": "214065", "./1fa78.svg": "891977", "./1fa79.svg": "800498", "./1fa7a.svg": "333139", "./1fa7b.svg": "906182", "./1fa7c.svg": "282918", "./1fa80.svg": "520181", "./1fa81.svg": "112195", "./1fa82.svg": "198429", "./1fa83.svg": "223184", "./1fa84.svg": "852114", "./1fa85.svg": "181847", "./1fa86.svg": "149517", "./1fa87.svg": "9178", "./1fa88.svg": "746487", "./1fa90.svg": "164788", "./1fa91.svg": "4000", "./1fa92.svg": "364914", "./1fa93.svg": "680143", "./1fa94.svg": "993641", "./1fa95.svg": "91077", "./1fa96.svg": "907978", "./1fa97.svg": "659491", "./1fa98.svg": "30942", "./1fa99.svg": "305749", "./1fa9a.svg": "469648", "./1fa9b.svg": "726535", "./1fa9c.svg": "357097", "./1fa9d.svg": "119977", "./1fa9e.svg": "243624", "./1fa9f.svg": "284415", "./1faa0.svg": "485219", "./1faa1.svg": "341174", "./1faa2.svg": "990047", "./1faa3.svg": "204352", "./1faa4.svg": "629210", "./1faa5.svg": "216203", "./1faa6.svg": "599341", "./1faa7.svg": "970882", "./1faa8.svg": "165537", "./1faa9.svg": "757850", "./1faaa.svg": "430228", "./1faab.svg": "711233", "./1faac.svg": "732085", "./1faad.svg": "735098", "./1faae.svg": "187680", "./1faaf.svg": "619078", "./1fab0.svg": "382708", "./1fab1.svg": "288995", "./1fab2.svg": "585618", "./1fab3.svg": "562018", "./1fab4.svg": "501123", "./1fab5.svg": "722408", "./1fab6.svg": "186137", "./1fab7.svg": "510012", "./1fab8.svg": "781848", "./1fab9.svg": "800398", "./1faba.svg": "953650", "./1fabb.svg": "665762", "./1fabc.svg": "954688", "./1fabd.svg": "525434", "./1fabf.svg": "94494", "./1fac0.svg": "656319", "./1fac1.svg": "267818", "./1fac2.svg": "809276", "./1fac3-1f3fb.svg": "343927", "./1fac3-1f3fc.svg": "867216", "./1fac3-1f3fd.svg": "957246", "./1fac3-1f3fe.svg": "118012", "./1fac3-1f3ff.svg": "545861", "./1fac3.svg": "869289", "./1fac4-1f3fb.svg": "973875", "./1fac4-1f3fc.svg": "977841", "./1fac4-1f3fd.svg": "442810", "./1fac4-1f3fe.svg": "66886", "./1fac4-1f3ff.svg": "550824", "./1fac4.svg": "193475", "./1fac5-1f3fb.svg": "928030", "./1fac5-1f3fc.svg": "928506", "./1fac5-1f3fd.svg": "828067", "./1fac5-1f3fe.svg": "85652", "./1fac5-1f3ff.svg": "623042", "./1fac5.svg": "788201", "./1face.svg": "444567", "./1facf.svg": "817725", "./1fad0.svg": "193047", "./1fad1.svg": "495814", "./1fad2.svg": "104815", "./1fad3.svg": "820985", "./1fad4.svg": "508214", "./1fad5.svg": "714911", "./1fad6.svg": "355601", "./1fad7.svg": "548797", "./1fad8.svg": "855847", "./1fad9.svg": "770951", "./1fada.svg": "322553", "./1fadb.svg": "912762", "./1fae0.svg": "832206", "./1fae1.svg": "664335", "./1fae2.svg": "765959", "./1fae3.svg": "101892", "./1fae4.svg": "720767", "./1fae5.svg": "656095", "./1fae6.svg": "7026", "./1fae7.svg": "525812", "./1fae8.svg": "334154", "./1faf0-1f3fb.svg": "876228", "./1faf0-1f3fc.svg": "452749", "./1faf0-1f3fd.svg": "43763", "./1faf0-1f3fe.svg": "225402", "./1faf0-1f3ff.svg": "427105", "./1faf0.svg": "32379", "./1faf1-1f3fb-200d-1faf2-1f3fc.svg": "631100", "./1faf1-1f3fb-200d-1faf2-1f3fd.svg": "317694", "./1faf1-1f3fb-200d-1faf2-1f3fe.svg": "105053", "./1faf1-1f3fb-200d-1faf2-1f3ff.svg": "519203", "./1faf1-1f3fb.svg": "399026", "./1faf1-1f3fc-200d-1faf2-1f3fb.svg": "643470", "./1faf1-1f3fc-200d-1faf2-1f3fd.svg": "834538", "./1faf1-1f3fc-200d-1faf2-1f3fe.svg": "217287", "./1faf1-1f3fc-200d-1faf2-1f3ff.svg": "499331", "./1faf1-1f3fc.svg": "138136", "./1faf1-1f3fd-200d-1faf2-1f3fb.svg": "83714", "./1faf1-1f3fd-200d-1faf2-1f3fc.svg": "480592", "./1faf1-1f3fd-200d-1faf2-1f3fe.svg": "911207", "./1faf1-1f3fd-200d-1faf2-1f3ff.svg": "813964", "./1faf1-1f3fd.svg": "74594", "./1faf1-1f3fe-200d-1faf2-1f3fb.svg": "934164", "./1faf1-1f3fe-200d-1faf2-1f3fc.svg": "338805", "./1faf1-1f3fe-200d-1faf2-1f3fd.svg": "508593", "./1faf1-1f3fe-200d-1faf2-1f3ff.svg": "853834", "./1faf1-1f3fe.svg": "54429", "./1faf1-1f3ff-200d-1faf2-1f3fb.svg": "352662", "./1faf1-1f3ff-200d-1faf2-1f3fc.svg": "585191", "./1faf1-1f3ff-200d-1faf2-1f3fd.svg": "497731", "./1faf1-1f3ff-200d-1faf2-1f3fe.svg": "986028", "./1faf1-1f3ff.svg": "724667", "./1faf1.svg": "957941", "./1faf2-1f3fb.svg": "366044", "./1faf2-1f3fc.svg": "480087", "./1faf2-1f3fd.svg": "8773", "./1faf2-1f3fe.svg": "952573", "./1faf2-1f3ff.svg": "188980", "./1faf2.svg": "949752", "./1faf3-1f3fb.svg": "170871", "./1faf3-1f3fc.svg": "390563", "./1faf3-1f3fd.svg": "792040", "./1faf3-1f3fe.svg": "347058", "./1faf3-1f3ff.svg": "644498", "./1faf3.svg": "897433", "./1faf4-1f3fb.svg": "424712", "./1faf4-1f3fc.svg": "568598", "./1faf4-1f3fd.svg": "600737", "./1faf4-1f3fe.svg": "854726", "./1faf4-1f3ff.svg": "853079", "./1faf4.svg": "712855", "./1faf5-1f3fb.svg": "78148", "./1faf5-1f3fc.svg": "361119", "./1faf5-1f3fd.svg": "916229", "./1faf5-1f3fe.svg": "753504", "./1faf5-1f3ff.svg": "326973", "./1faf5.svg": "470224", "./1faf6-1f3fb.svg": "300383", "./1faf6-1f3fc.svg": "38647", "./1faf6-1f3fd.svg": "910955", "./1faf6-1f3fe.svg": "211703", "./1faf6-1f3ff.svg": "815251", "./1faf6.svg": "36855", "./1faf7-1f3fb.svg": "809986", "./1faf7-1f3fc.svg": "391161", "./1faf7-1f3fd.svg": "903649", "./1faf7-1f3fe.svg": "172184", "./1faf7-1f3ff.svg": "24964", "./1faf7.svg": "132772", "./1faf8-1f3fb.svg": "534903", "./1faf8-1f3fc.svg": "859341", "./1faf8-1f3fd.svg": "239474", "./1faf8-1f3fe.svg": "131682", "./1faf8-1f3ff.svg": "863639", "./1faf8.svg": "143146", "./203c.svg": "489938", "./2049.svg": "859987", "./2122.svg": "705423", "./2139.svg": "542983", "./2194.svg": "834250", "./2195.svg": "587582", "./2196.svg": "203229", "./2197.svg": "26690", "./2198.svg": "448058", "./2199.svg": "811075", "./21a9.svg": "926096", "./21aa.svg": "888333", "./23-20e3.svg": "95235", "./231a.svg": "165", "./231b.svg": "32630", "./2328.svg": "966902", "./23cf.svg": "723265", "./23e9.svg": "669306", "./23ea.svg": "584842", "./23eb.svg": "660019", "./23ec.svg": "834464", "./23ed.svg": "801068", "./23ee.svg": "266924", "./23ef.svg": "55390", "./23f0.svg": "272970", "./23f1.svg": "638582", "./23f2.svg": "237266", "./23f3.svg": "868298", "./23f8.svg": "310300", "./23f9.svg": "305534", "./23fa.svg": "952362", "./24c2.svg": "997417", "./25aa.svg": "319119", "./25ab.svg": "349873", "./25b6.svg": "947243", "./25c0.svg": "745084", "./25fb.svg": "31401", "./25fc.svg": "844347", "./25fd.svg": "265447", "./25fe.svg": "84425", "./2600.svg": "423695", "./2601.svg": "903009", "./2602.svg": "939069", "./2603.svg": "399574", "./2604.svg": "203036", "./260e.svg": "413186", "./2611.svg": "20866", "./2614.svg": "177310", "./2615.svg": "816012", "./2618.svg": "995932", "./261d-1f3fb.svg": "652592", "./261d-1f3fc.svg": "202928", "./261d-1f3fd.svg": "14515", "./261d-1f3fe.svg": "295197", "./261d-1f3ff.svg": "196338", "./261d.svg": "245337", "./2620.svg": "289775", "./2622.svg": "65390", "./2623.svg": "580216", "./2626.svg": "562144", "./262a.svg": "464280", "./262e.svg": "821802", "./262f.svg": "250769", "./2638.svg": "264849", "./2639.svg": "772454", "./263a.svg": "609192", "./2640.svg": "275554", "./2642.svg": "937640", "./2648.svg": "76552", "./2649.svg": "48656", "./264a.svg": "789966", "./264b.svg": "663427", "./264c.svg": "905894", "./264d.svg": "932393", "./264e.svg": "744690", "./264f.svg": "196666", "./2650.svg": "187483", "./2651.svg": "278729", "./2652.svg": "993944", "./2653.svg": "999811", "./265f.svg": "35599", "./2660.svg": "831702", "./2663.svg": "74940", "./2665.svg": "794629", "./2666.svg": "100153", "./2668.svg": "870343", "./267b.svg": "520376", "./267e.svg": "608204", "./267f.svg": "502079", "./2692.svg": "989194", "./2693.svg": "405242", "./2694.svg": "674272", "./2695.svg": "322085", "./2696.svg": "398133", "./2697.svg": "8447", "./2699.svg": "176621", "./269b.svg": "440117", "./269c.svg": "426422", "./26a0.svg": "971051", "./26a1.svg": "31867", "./26a7.svg": "470169", "./26aa.svg": "987842", "./26ab.svg": "679070", "./26b0.svg": "160031", "./26b1.svg": "516720", "./26bd.svg": "840136", "./26be.svg": "992863", "./26c4.svg": "732000", "./26c5.svg": "842682", "./26c8.svg": "728509", "./26ce.svg": "470150", "./26cf.svg": "176468", "./26d1.svg": "391100", "./26d3.svg": "699345", "./26d4.svg": "142765", "./26e9.svg": "943812", "./26ea.svg": "856985", "./26f0.svg": "208821", "./26f1.svg": "237753", "./26f2.svg": "568809", "./26f3.svg": "256422", "./26f4.svg": "27851", "./26f5.svg": "68570", "./26f7-1f3fb.svg": "225580", "./26f7-1f3fc.svg": "313060", "./26f7-1f3fd.svg": "130669", "./26f7-1f3fe.svg": "347294", "./26f7-1f3ff.svg": "982139", "./26f7.svg": "505044", "./26f8.svg": "473147", "./26f9-1f3fb-200d-2640-fe0f.svg": "303016", "./26f9-1f3fb-200d-2642-fe0f.svg": "283924", "./26f9-1f3fb.svg": "608817", "./26f9-1f3fc-200d-2640-fe0f.svg": "907650", "./26f9-1f3fc-200d-2642-fe0f.svg": "455217", "./26f9-1f3fc.svg": "487377", "./26f9-1f3fd-200d-2640-fe0f.svg": "860887", "./26f9-1f3fd-200d-2642-fe0f.svg": "29861", "./26f9-1f3fd.svg": "993922", "./26f9-1f3fe-200d-2640-fe0f.svg": "741818", "./26f9-1f3fe-200d-2642-fe0f.svg": "599074", "./26f9-1f3fe.svg": "777195", "./26f9-1f3ff-200d-2640-fe0f.svg": "636149", "./26f9-1f3ff-200d-2642-fe0f.svg": "378359", "./26f9-1f3ff.svg": "224630", "./26f9-fe0f-200d-2640-fe0f.svg": "962443", "./26f9-fe0f-200d-2642-fe0f.svg": "158669", "./26f9.svg": "872648", "./26fa.svg": "782512", "./26fd.svg": "630633", "./2702.svg": "70207", "./2705.svg": "638021", "./2708.svg": "927628", "./2709.svg": "495110", "./270a-1f3fb.svg": "694743", "./270a-1f3fc.svg": "150860", "./270a-1f3fd.svg": "429828", "./270a-1f3fe.svg": "768029", "./270a-1f3ff.svg": "821462", "./270a.svg": "293199", "./270b-1f3fb.svg": "750865", "./270b-1f3fc.svg": "185473", "./270b-1f3fd.svg": "949555", "./270b-1f3fe.svg": "539003", "./270b-1f3ff.svg": "825825", "./270b.svg": "909683", "./270c-1f3fb.svg": "454371", "./270c-1f3fc.svg": "120213", "./270c-1f3fd.svg": "785666", "./270c-1f3fe.svg": "274599", "./270c-1f3ff.svg": "241456", "./270c.svg": "372539", "./270d-1f3fb.svg": "145517", "./270d-1f3fc.svg": "274217", "./270d-1f3fd.svg": "686827", "./270d-1f3fe.svg": "199153", "./270d-1f3ff.svg": "839652", "./270d.svg": "758880", "./270f.svg": "470737", "./2712.svg": "466509", "./2714.svg": "137108", "./2716.svg": "483105", "./271d.svg": "787956", "./2721.svg": "513427", "./2728.svg": "666859", "./2733.svg": "863192", "./2734.svg": "979212", "./2744.svg": "107414", "./2747.svg": "521263", "./274c.svg": "555312", "./274e.svg": "679248", "./2753.svg": "560982", "./2754.svg": "694708", "./2755.svg": "51849", "./2757.svg": "200308", "./2763.svg": "570566", "./2764-fe0f-200d-1f525.svg": "169504", "./2764-fe0f-200d-1fa79.svg": "896813", "./2764.svg": "85236", "./2795.svg": "794631", "./2796.svg": "290508", "./2797.svg": "160297", "./27a1.svg": "797895", "./27b0.svg": "826203", "./27bf.svg": "606949", "./2934.svg": "412121", "./2935.svg": "605993", "./2a-20e3.svg": "224570", "./2b05.svg": "666895", "./2b06.svg": "973653", "./2b07.svg": "619710", "./2b1b.svg": "558925", "./2b1c.svg": "837959", "./2b50.svg": "416628", "./2b55.svg": "736726", "./30-20e3.svg": "338337", "./3030.svg": "969417", "./303d.svg": "464132", "./31-20e3.svg": "385005", "./32-20e3.svg": "412574", "./3297.svg": "288554", "./3299.svg": "855282", "./33-20e3.svg": "18819", "./34-20e3.svg": "521486", "./35-20e3.svg": "907362", "./36-20e3.svg": "269684", "./37-20e3.svg": "119217", "./38-20e3.svg": "554025", "./39-20e3.svg": "824219", "./a9.svg": "206249", "./ae.svg": "984063", "./e50a.svg": "55612" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"778832"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 869814: function(e, t, n) { var i = { "./af": "238447", "./af.js": "238447", "./ar": "504184", "./ar-dz": "589739", "./ar-dz.js": "589739", "./ar-kw": "461166", "./ar-kw.js": "461166", "./ar-ly": "360154", "./ar-ly.js": "360154", "./ar-ma": "130757", "./ar-ma.js": "130757", "./ar-sa": "780957", "./ar-sa.js": "780957", "./ar-tn": "724826", "./ar-tn.js": "724826", "./ar.js": "504184", "./az": "643108", "./az.js": "643108", "./be": "901206", "./be.js": "901206", "./bg": "16130", "./bg.js": "16130", "./bm": "389943", "./bm.js": "389943", "./bn": "497854", "./bn.js": "497854", "./bo": "641609", "./bo.js": "641609", "./br": "290522", "./br.js": "290522", "./bs": "91127", "./bs.js": "91127", "./ca": "661195", "./ca.js": "661195", "./cs": "462629", "./cs.js": "462629", "./cv": "833095", "./cv.js": "833095", "./cy": "90109", "./cy.js": "90109", "./da": "744776", "./da.js": "744776", "./de": "590566", "./de-at": "903208", "./de-at.js": "903208", "./de-ch": "727990", "./de-ch.js": "727990", "./de.js": "590566", "./dv": "367842", "./dv.js": "367842", "./el": "684182", "./el.js": "684182", "./en-au": "643050", "./en-au.js": "643050", "./en-ca": "181644", "./en-ca.js": "181644", "./en-gb": "147863", "./en-gb.js": "147863", "./en-ie": "614966", "./en-ie.js": "614966", "./en-il": "964617", "./en-il.js": "964617", "./en-nz": "874491", "./en-nz.js": "874491", "./eo": "671967", "./eo.js": "671967", "./es": "826992", "./es-do": "334482", "./es-do.js": "334482", "./es-us": "448314", "./es-us.js": "448314", "./es.js": "826992", "./et": "756357", "./et.js": "756357", "./eu": "861893", "./eu.js": "861893", "./fa": "917148", "./fa.js": "917148", "./fi": "200132", "./fi.js": "200132", "./fo": "266172", "./fo.js": "266172", "./fr": "964557", "./fr-ca": "85083", "./fr-ca.js": "85083", "./fr-ch": "984463", "./fr-ch.js": "984463", "./fr.js": "964557", "./fy": "69479", "./fy.js": "69479", "./gd": "134454", "./gd.js": "134454", "./gl": "896271", "./gl.js": "896271", "./gom-latn": "59981", "./gom-latn.js": "59981", "./gu": "664833", "./gu.js": "664833", "./he": "592319", "./he.js": "592319", "./hi": "890911", "./hi.js": "890911", "./hr": "17258", "./hr.js": "17258", "./hu": "261537", "./hu.js": "261537", "./hy-am": "413763", "./hy-am.js": "413763", "./id": "111396", "./id.js": "111396", "./is": "990382", "./is.js": "990382", "./it": "119841", "./it.js": "119841", "./ja": "440805", "./ja.js": "440805", "./jv": "243030", "./jv.js": "243030", "./ka": "786330", "./ka.js": "786330", "./kk": "307379", "./kk.js": "307379", "./km": "270597", "./km.js": "270597", "./kn": "500628", "./kn.js": "500628", "./ko": "695635", "./ko.js": "695635", "./ky": "165356", "./ky.js": "165356", "./lb": "364181", "./lb.js": "364181", "./lo": "869885", "./lo.js": "869885", "./lt": "197163", "./lt.js": "197163", "./lv": "423927", "./lv.js": "423927", "./me": "740627", "./me.js": "740627", "./mi": "625697", "./mi.js": "625697", "./mk": "397874", "./mk.js": "397874", "./ml": "357993", "./ml.js": "357993", "./mn": "224758", "./mn.js": "224758", "./mr": "41985", "./mr.js": "41985", "./ms": "401555", "./ms-my": "220801", "./ms-my.js": "220801", "./ms.js": "401555", "./mt": "601344", "./mt.js": "601344", "./my": "669861", "./my.js": "669861", "./nb": "944769", "./nb.js": "944769", "./ne": "78166", "./ne.js": "78166", "./nl": "49874", "./nl-be": "57874", "./nl-be.js": "57874", "./nl.js": "49874", "./nn": "422115", "./nn.js": "422115", "./pa-in": "695006", "./pa-in.js": "695006", "./pl": "518809", "./pl.js": "518809", "./pt": "532929", "./pt-br": "867285", "./pt-br.js": "867285", "./pt.js": "532929", "./ro": "341065", "./ro.js": "341065", "./ru": "949671", "./ru.js": "949671", "./sd": "365470", "./sd.js": "365470", "./se": "675623", "./se.js": "675623", "./si": "371220", "./si.js": "371220", "./sk": "820702", "./sk.js": "820702", "./sl": "763905", "./sl.js": "763905", "./sq": "486599", "./sq.js": "486599", "./sr": "741714", "./sr-cyrl": "175049", "./sr-cyrl.js": "175049", "./sr.js": "741714", "./ss": "611360", "./ss.js": "611360", "./sv": "874301", "./sv.js": "874301", "./sw": "889475", "./sw.js": "889475", "./ta": "839992", "./ta.js": "839992", "./te": "814866", "./te.js": "814866", "./tet": "432785", "./tet.js": "432785", "./tg": "594694", "./tg.js": "594694", "./th": "456086", "./th.js": "456086", "./tl-ph": "186353", "./tl-ph.js": "186353", "./tlh": "186698", "./tlh.js": "186698", "./tr": "658957", "./tr.js": "658957", "./tzl": "941440", "./tzl.js": "941440", "./tzm": "502898", "./tzm-latn": "502440", "./tzm-latn.js": "502440", "./tzm.js": "502898", "./ug-cn": "342595", "./ug-cn.js": "342595", "./uk": "591092", "./uk.js": "591092", "./ur": "951037", "./ur.js": "951037", "./uz": "294615", "./uz-latn": "754754", "./uz-latn.js": "754754", "./uz.js": "294615", "./vi": "176339", "./vi.js": "176339", "./x-pseudo": "454059", "./x-pseudo.js": "454059", "./yo": "368392", "./yo.js": "368392", "./zh-cn": "850442", "./zh-cn.js": "850442", "./zh-hk": "661363", "./zh-hk.js": "661363", "./zh-tw": "685767", "./zh-tw.js": "685767" }; function r(e) { return n(s(e)) } function s(e) { if (!n.o(i, e)) { var t = Error("Cannot find module '" + e + "'"); throw t.code = "MODULE_NOT_FOUND", t } return i[e] } r.id = '"869814"', r.keys = function() { return Object.keys(i) }, r.resolve = s, e.exports = r }, 205480: function(e) { "use strict"; e.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMCAwIDUgMiAxLjUgNEg3VjBIMFptMCAxMyA1LTIgMS41LTRIN3Y2SDBaIiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTYuNDIzIDYuNUM2LjQyMyAzLjMxMiAzLjc4My43NTYuNS41MThjMy4zODYuMjM2IDYgMi44NTUgNiA1Ljk4MiAwIDMuMTI3LTIuNjE0IDUuNzQ2LTYgNS45ODN2LS4wMDFjMy4yODQtLjIzNyA1LjkyMy0yLjc5NCA1LjkyMy01Ljk4MloiIHN0cm9rZT0iI0Q0RDlEQiIvPjxwYXRoIGZpbGw9IiNENEQ5REIiIGQ9Ik0wIDBoMXYxSDB6TTAgMTJoMXYxSDB6Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGg3djEzSDB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+" }, 393019: function(e) { "use strict"; e.exports = "data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.195 6.565a1 1 0 0 0 1.6 0l2.992-3.98a1 1 0 0 0-.8-1.602H1.013a1 1 0 0 0-.8 1.6l2.983 3.982Z' fill='%23687282'/%3E%3C/svg%3E" }, 55273: function(e) { "use strict"; e.exports = "data:image/svg+xml;charset=utf-8,%3Csvg width='8' height='7' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.195 6.565a1 1 0 0 0 1.6 0l2.992-3.98a1 1 0 0 0-.8-1.602H1.013a1 1 0 0 0-.8 1.6l2.983 3.982Z' fill='%23B9C4C9'/%3E%3C/svg%3E" }, 720759: function(e) { "use strict"; e.exports = "data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath fill='%2300112C' d='M6.5 11.9a4.5 4.5 0 0 0 2.6-.83l2.77 2.74c.13.13.3.19.48.19.38 0 .65-.29.65-.66a.63.63 0 0 0-.19-.46l-2.75-2.73a4.4 4.4 0 0 0 .92-2.7 4.48 4.48 0 0 0-8.98 0 4.48 4.48 0 0 0 4.5 4.45Zm0-.96a3.53 3.53 0 0 1-3.53-3.49 3.52 3.52 0 0 1 7.04 0c0 1.9-1.59 3.49-3.52 3.49Z'/%3E%3C/svg%3E" }, 919015: function(e) { "use strict"; e.exports = "data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath fill='%23687282' d='M6.5 11.9a4.5 4.5 0 0 0 2.6-.83l2.77 2.74c.13.13.3.19.48.19.38 0 .65-.29.65-.66a.63.63 0 0 0-.19-.46l-2.75-2.73a4.4 4.4 0 0 0 .92-2.7 4.48 4.48 0 0 0-8.98 0 4.48 4.48 0 0 0 4.5 4.45Zm0-.96a3.53 3.53 0 0 1-3.53-3.49 3.52 3.52 0 0 1 7.04 0c0 1.9-1.59 3.49-3.52 3.49Z'/%3E%3C/svg%3E" }, 433764: function(e) { "use strict"; e.exports = "data:image/svg+xml;utf8,%3Csvg%20width%3D%22256%22%20height%3D%2278%22%20viewBox%3D%2232%2024%20256%2078%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M36%2024C33.7909%2024%2032%2025.7909%2032%2028V78C32%2080.2091%2033.7909%2082%2036%2082H86C88.2091%2082%2090%2080.2091%2090%2078V28C90%2025.7909%2088.2091%2024%2086%2024H36ZM110%2024C107.791%2024%20106%2025.7909%20106%2028V38C106%2040.2091%20107.791%2042%20110%2042H179C181.209%2042%20183%2040.2091%20183%2038V28C183%2025.7909%20181.209%2024%20179%2024H110ZM106%2058C106%2055.7909%20107.791%2054%20110%2054H284C286.209%2054%20288%2055.7909%20288%2058V68C288%2070.2091%20286.209%2072%20284%2072H110C107.791%2072%20106%2070.2091%20106%2068V58ZM110%2084C107.791%2084%20106%2085.7909%20106%2088V98C106%20100.209%20107.791%20102%20110%20102H223C225.209%20102%20227%20100.209%20227%2098V88C227%2085.7909%20225.209%2084%20223%2084H110Z%22%20fill%3D%22%23000000%22%20%2F%3E%3C%2Fsvg%3E" }, 376665: function(e, t, n) { "use strict"; e.exports = n.p + "8b3161db897a8885cdad.jpg" }, 482682: function(e, t, n) { "use strict"; e.exports = n.p + "26f8bedcf443fe85902f.png" }, 752028: function(e, t, n) { "use strict"; e.exports = n.p + "b2f072fdc6898c70f0a0.png" }, 733949: function(e, t, n) { "use strict"; e.exports = n.p + "9b81055968e4487e3977.png" }, 621554: function(e, t, n) { "use strict"; e.exports = n.p + "15a7db2c064544d50853.png" }, 660097: function(e, t, n) { "use strict"; e.exports = n.p + "6d8f0708e196aaad2550.png" }, 493433: function(e, t, n) { "use strict"; e.exports = n.p + "c1471e753c4ae949db43.svg" }, 726519: function(e, t, n) { "use strict"; e.exports = n.p + "316fdae8ca10ec899a1c.svg" }, 221825: function(e, t, n) { "use strict"; e.exports = n.p + "654f6b10a3c750818e45.mp4" }, 666940: function(e, t, n) { "use strict"; e.exports = n.p + "141d5b664cbfca663df8.mp4" }, 247815: function(e, t, n) { "use strict"; e.exports = n.p + "9f762d3a6cd9fc67475a.png" }, 778608: function(e, t, n) { "use strict"; e.exports = n.p + "85ec550ca7bb90136473.jpg" }, 990860: function(e, t, n) { "use strict"; e.exports = n.p + "04c05b42b2df22d928b5.mp4" }, 909851: function(e, t, n) { "use strict"; e.exports = n.p + "4ad6da1474cbb03c9d6d.mp4" }, 568621: function(e, t, n) { "use strict"; e.exports = n.p + "42ff20a9536a6003783b.mp4" }, 819091: function(e, t, n) { "use strict"; e.exports = n.p + "da6d219c26aa860ea582.png" }, 742305: function(e, t, n) { "use strict"; e.exports = n.p + "1ae3bb40e597a7c24db3.png" }, 265921: function(e, t, n) { "use strict"; e.exports = n.p + "e6575a3c6da5b0ca3999.jpg" }, 566584: function(e, t, n) { "use strict"; e.exports = n.p + "d7949cc88aad4a1adda5.mp4" }, 560437: function(e, t, n) { "use strict"; e.exports = n.p + "37d1f1df4c39c86b29a3.png" }, 846033: function(e, t, n) { "use strict"; e.exports = n.p + "e725ab096d484c134c88.png" }, 623904: function(e, t, n) { "use strict"; e.exports = n.p + "c6d3ba9f3e7ec55bcda4.svg" }, 928400: function(e, t, n) { "use strict"; e.exports = n.p + "d24db00734d3e5a18f8b.png" }, 148821: function(e, t, n) { "use strict"; e.exports = n.p + "584da24318670f0043a0.png" }, 982563: function(e, t, n) { "use strict"; e.exports = n.p + "b6d67e236de5dbba9881.png" }, 331628: function(e, t, n) { "use strict"; e.exports = n.p + "1ba051b29d9571d8c437.png" }, 765198: function(e, t, n) { "use strict"; e.exports = n.p + "8244e044b4d7423d1b34.png" }, 199469: function(e, t, n) { "use strict"; e.exports = n.p + "a81defa90930ea5b1ea8.png" }, 199612: function(e, t, n) { "use strict"; e.exports = n.p + "8cc6ed572dc6e39317c3.png" }, 926213: function(e, t, n) { "use strict"; e.exports = n.p + "ddc95e15e7c28aa86a0d.jpg" }, 743134: function(e, t, n) { "use strict"; e.exports = n.p + "d6c5c3a48fd0063a20f6.svg" }, 448238: function(e, t, n) { "use strict"; e.exports = n.p + "4df5956acf8325f20af1.png" }, 80730: function(e, t, n) { "use strict"; e.exports = n.p + "a8c846ced612f3c7608d.png" }, 105797: function(e, t, n) { "use strict"; e.exports = n.p + "e8b3942d0a8f2667f170.webp" }, 63725: function(e, t, n) { "use strict"; e.exports = n.p + "015dd8c7a8111ad4e3b5.webp" }, 924997: function(e, t, n) { "use strict"; e.exports = n.p + "2c98b86ce7d10c0ddeb3.webp" }, 861498: function(e, t, n) { "use strict"; e.exports = n.p + "f5142ff9381de17c7591.webp" }, 749834: function(e, t, n) { "use strict"; e.exports = n.p + "eca1ee6a7f84f537506b.webp" }, 760260: function(e, t, n) { "use strict"; e.exports = n.p + "022b56a46027cd8944a0.webp" }, 448578: function(e, t, n) { "use strict"; e.exports = n.p + "594e671c4337bdaa354d.webp" }, 946185: function(e, t, n) { "use strict"; e.exports = n.p + "cd734396523f0ccd8985.webp" }, 480423: function(e, t, n) { "use strict"; e.exports = n.p + "7509dcee3065c41654b1.webp" }, 273593: function(e, t, n) { "use strict"; e.exports = n.p + "b165b3568ab797c79bda.webp" }, 665801: function(e, t, n) { "use strict"; e.exports = n.p + "c24789d71a791a531bd7.webp" }, 818143: function(e, t, n) { "use strict"; e.exports = n.p + "1cc2c82a6058a7cc380c.webp" }, 666475: function(e, t, n) { "use strict"; e.exports = n.p + "fd693e96180f96c3708b.webp" }, 591304: function(e, t, n) { "use strict"; e.exports = n.p + "5e4012ec7d5cc0f2d584.webp" }, 73375: function(e, t, n) { "use strict"; e.exports = n.p + "964564da43ac1eed1a24.webp" }, 328664: function(e, t, n) { "use strict"; e.exports = n.p + "8d8764191e7377ce6d1c.webp" }, 328259: function(e, t, n) { "use strict"; e.exports = n.p + "4a39ebc7865c34cb05ca.webp" }, 19009: function(e, t, n) { "use strict"; e.exports = n.p + "259c9e517e54b637bc8b.webp" }, 234912: function(e, t, n) { "use strict"; e.exports = n.p + "5b827a22c6090c898656.webp" }, 405571: function(e, t, n) { "use strict"; e.exports = n.p + "536c4ee2800f76d480f2.webp" }, 730886: function(e, t, n) { "use strict"; e.exports = n.p + "1ef51ba4b86ea4257b1e.webp" }, 473974: function(e, t, n) { "use strict"; e.exports = n.p + "7f15142d4ff388f352cd.webp" }, 563856: function(e, t, n) { "use strict"; e.exports = n.p + "edc57c29789364e356a8.webp" }, 328756: function(e, t, n) { "use strict"; e.exports = n.p + "ac6f8cf36394c66e7651.png" }, 639525: function(e, t, n) { "use strict"; e.exports = n.p + "02b73275048e30fd09ac.png" }, 131812: function(e, t, n) { "use strict"; e.exports = n.p + "259560fbae59ef36798b.png" }, 265174: function(e, t, n) { "use strict"; e.exports = n.p + "b0f31fd761f131079ce0.png" }, 926425: function(e, t, n) { "use strict"; e.exports = n.p + "0048cbfdd0b3ef186d22.png" }, 844049: function(e, t, n) { "use strict"; e.exports = n.p + "1b3106e166c99cc64682.png" }, 343566: function(e, t, n) { "use strict"; e.exports = n.p + "a03e02db388759dfac33.svg" }, 192693: function(e, t, n) { "use strict"; e.exports = n.p + "df34ccda336baed3e567.svg" }, 239840: function(e, t, n) { "use strict"; e.exports = n.p + "ad965ba5e60d0f3284eb.svg" }, 1474: function(e, t, n) { "use strict"; e.exports = n.p + "249c50ac346d2b3fb326.png" }, 69008: function(e, t, n) { "use strict"; e.exports = n.p + "c2f9bf2309067d6e1afe.svg" }, 226730: function(e, t, n) { "use strict"; e.exports = n.p + "cf4dc04358de56a11ee4.svg" }, 7578: function(e, t, n) { "use strict"; e.exports = n.p + "e84f4db31222ab705134.svg" }, 41761: function(e, t, n) { "use strict"; e.exports = n.p + "e84f4db31222ab705134.svg" }, 208258: function(e, t, n) { "use strict"; e.exports = n.p + "ce7035c0392bfdf6f1ef.ico" }, 621680: function(e, t, n) { "use strict"; e.exports = n.p + "9f5610ac890623f79205.svg" }, 725345: function(e, t, n) { "use strict"; e.exports = n.p + "9b9a3ae3f14cbf5260d7.svg" }, 673762: function(e, t, n) { "use strict"; e.exports = n.p + "4301ffca2dbc09355b4f.svg" }, 788525: function(e, t, n) { "use strict"; e.exports = n.p + "d809e215ad1a02f8236f.svg" }, 331906: function(e, t, n) { "use strict"; e.exports = n.p + "f2f403e2279383b7e7e3.svg" }, 894990: function(e, t, n) { "use strict"; e.exports = n.p + "4d245830fb62000c910e.svg" }, 674720: function(e, t, n) { "use strict"; e.exports = n.p + "6ce078beae8ec47e8849.svg" }, 109837: function(e, t, n) { "use strict"; e.exports = n.p + "b72ca55b9c58b903a23d.svg" }, 504514: function(e, t, n) { "use strict"; e.exports = n.p + "48a71ed592b3633e564a.svg" }, 392807: function(e, t, n) { "use strict"; e.exports = n.p + "c2ed296fc2b9fde9dee5.svg" }, 291410: function(e, t, n) { "use strict"; e.exports = n.p + "210bff603a7597122890.svg" }, 516083: function(e, t, n) { "use strict"; e.exports = n.p + "41307eb799c62b6058c0.svg" }, 430539: function(e, t, n) { "use strict"; e.exports = n.p + "cb25201890e593505528.svg" }, 343305: function(e, t, n) { "use strict"; e.exports = n.p + "2bea36808e425af606de.svg" }, 132399: function(e, t, n) { "use strict"; e.exports = n.p + "a6078ff78e0b62e10f1b.svg" }, 712386: function(e, t, n) { "use strict"; e.exports = n.p + "5b3ee9c8e7cf92b1041e.png" }, 602722: function(e, t, n) { "use strict"; e.exports = n.p + "254e7133398c5212d150.png" }, 534109: function(e, t, n) { "use strict"; e.exports = n.p + "1fbecdc23594245266ca.png" }, 859500: function(e, t, n) { "use strict"; e.exports = n.p + "5d164a971e250a5500fe.png" }, 484542: function(e, t, n) { "use strict"; e.exports = n.p + "3ab47dd66c0448546fe7.png" }, 881500: function(e, t, n) { "use strict"; e.exports = n.p + "50428994a84b5986d5e3.png" }, 910826: function(e, t, n) { "use strict"; e.exports = n.p + "3fa47f99de3b7a43e4c3.png" }, 307244: function(e, t, n) { "use strict"; e.exports = n.p + "19c00c424d9ff054b97d.png" }, 553977: function(e, t, n) { "use strict"; e.exports = n.p + "7fc8e9a3ba496bd28aad.svg" }, 669730: function(e, t, n) { "use strict"; e.exports = n.p + "bff4192dbe858e59a583.svg" }, 528224: function(e, t, n) { "use strict"; e.exports = n.p + "34c641ca1ca4676558ea.png" }, 632342: function(e, t, n) { "use strict"; e.exports = n.p + "54623563c40476702d05.svg" }, 467596: function(e, t, n) { "use strict"; e.exports = n.p + "aa738b6c8f7f5c6dc9ac.svg" }, 670957: function(e, t, n) { "use strict"; e.exports = n.p + "f600dae516a7dd40c2b9.svg" }, 480768: function(e, t, n) { "use strict"; e.exports = n.p + "bb9c654f79a23ac8ff3e.svg" }, 848304: function(e, t, n) { "use strict"; e.exports = n.p + "5f284899e72a967e9f34.svg" }, 74830: function(e, t, n) { "use strict"; e.exports = n.p + "4e77ccd0bfb6b1fe489d.svg" }, 970952: function(e, t, n) { "use strict"; e.exports = n.p + "149536fc0fe57c89fa23.png" }, 324806: function(e, t, n) { "use strict"; e.exports = n.p + "2a7b631c3aa52c285458.svg" }, 388424: function(e, t, n) { "use strict"; e.exports = n.p + "05f4517ecb1769c0f02c.svg" }, 321161: function(e, t, n) { "use strict"; e.exports = n.p + "d4bce17e7dd88eed3ed3.svg" }, 429152: function(e, t, n) { "use strict"; e.exports = n.p + "f14c839b90cc06bb38cb.svg" }, 414680: function(e, t, n) { "use strict"; e.exports = n.p + "a6c521b7e099bc9b5ad9.png" }, 424160: function(e, t, n) { "use strict"; e.exports = n.p + "5617f28d3b663042a45e.svg" }, 573103: function(e, t, n) { "use strict"; e.exports = n.p + "7bab72922bc95800366e.png" }, 929858: function(e, t, n) { "use strict"; e.exports = n.p + "0c8e8cb9f6ca3703a9fe.svg" }, 469024: function(e, t, n) { "use strict"; e.exports = n.p + "82c1201f2c86e2116304.png" }, 654009: function(e, t, n) { "use strict"; e.exports = n.p + "eba5d54d718e2dec078c.svg" }, 670618: function(e, t, n) { "use strict"; e.exports = n.p + "eba5d54d718e2dec078c.svg" }, 215741: function(e, t, n) { "use strict"; e.exports = n.p + "567f330f605752083444.png" }, 519515: function(e, t, n) { "use strict"; e.exports = n.p + "0cbf39030b5e8e3edcd2.svg" }, 463728: function(e, t, n) { "use strict"; e.exports = n.p + "8c6f97342d7eace1a132.png" }, 98668: function(e, t, n) { "use strict"; e.exports = n.p + "279a47362d0f11af92e4.svg" }, 549727: function(e, t, n) { "use strict"; e.exports = n.p + "d8e6d54b352c488f6487.png" }, 532293: function(e, t, n) { "use strict"; e.exports = n.p + "66fc5de5040d6b38cb39.svg" }, 707873: function(e, t, n) { "use strict"; e.exports = n.p + "d5d8ab4d5ddaa794a5d0.png" }, 769582: function(e, t, n) { "use strict"; e.exports = n.p + "dcc7ce82be27249be601.svg" }, 762019: function(e, t, n) { "use strict"; e.exports = n.p + "ff04b613e4d4e3c9890f.png" }, 589232: function(e, t, n) { "use strict"; e.exports = n.p + "6fe1b9b3a8f94a01e30f.svg" }, 620530: function(e, t, n) { "use strict"; e.exports = n.p + "48dbe59a81f9b0805ef5.png" }, 318049: function(e, t, n) { "use strict"; e.exports = n.p + "3f8efe0ca825c7eabf76.svg" }, 843605: function(e, t, n) { "use strict"; e.exports = n.p + "6b66d4d0913af193fdaa.png" }, 247519: function(e, t, n) { "use strict"; e.exports = n.p + "4c987dd2f591afd7c37b.svg" }, 789822: function(e, t, n) { "use strict"; e.exports = n.p + "b65d8abeecda03276e03.png" }, 184887: function(e, t, n) { "use strict"; e.exports = n.p + "f786efdd1e3f1028b0c0.svg" }, 232720: function(e, t, n) { "use strict"; e.exports = n.p + "050bd5201eae6f94a607.png" }, 526659: function(e, t, n) { "use strict"; e.exports = n.p + "0e329b7f29f65c30bc87.svg" }, 71996: function(e, t, n) { "use strict"; e.exports = n.p + "999a1b91bf7acf507c1f.png" }, 326720: function(e, t, n) { "use strict"; e.exports = n.p + "8e8fbe3929417c2f5d44.svg" }, 275556: function(e, t, n) { "use strict"; e.exports = n.p + "d5f70eb47a227d0ec1f3.png" }, 153711: function(e, t, n) { "use strict"; e.exports = n.p + "f8097013971399d58217.svg" }, 26963: function(e, t, n) { "use strict"; e.exports = n.p + "7723dd33016c23294752.png" }, 327574: function(e, t, n) { "use strict"; e.exports = n.p + "581f3c244803b63323ad.svg" }, 501001: function(e, t, n) { "use strict"; e.exports = n.p + "f9a086defa654b08f038.png" }, 698946: function(e, t, n) { "use strict"; e.exports = n.p + "45d944462f6bcb711b10.svg" }, 219389: function(e, t, n) { "use strict"; e.exports = n.p + "55e0db84a489729e02c0.png" }, 737531: function(e, t, n) { "use strict"; e.exports = n.p + "a98628a35537f878be12.svg" }, 385751: function(e, t, n) { "use strict"; e.exports = n.p + "be508081455ae6721662.png" }, 223434: function(e, t, n) { "use strict"; e.exports = n.p + "edb7836ca0d44acfcedf.svg" }, 399592: function(e, t, n) { "use strict"; e.exports = n.p + "e220491e4f44119c0e45.png" }, 350379: function(e, t, n) { "use strict"; e.exports = n.p + "9a92495b7c404a37bbfc.svg" }, 211434: function(e, t, n) { "use strict"; e.exports = n.p + "e778f2a7f2d0be0f4d33.png" }, 592358: function(e, t, n) { "use strict"; e.exports = n.p + "01ec4129d205c6aa3fc8.svg" }, 682170: function(e, t, n) { "use strict"; e.exports = n.p + "9dc5c9630e2ee37e7162.png" }, 972428: function(e, t, n) { "use strict"; e.exports = n.p + "3e8f3c6eae5a83991f4e.svg" }, 406818: function(e, t, n) { "use strict"; e.exports = n.p + "575b906b6176c002800d.png" }, 596001: function(e, t, n) { "use strict"; e.exports = n.p + "db062734a8b565b22c3e.svg" }, 451192: function(e, t, n) { "use strict"; e.exports = n.p + "49f65d85f1964b522410.png" }, 641169: function(e, t, n) { "use strict"; e.exports = n.p + "6860c75d7dbe65e02c99.svg" }, 664982: function(e, t, n) { "use strict"; e.exports = n.p + "b0eb923166b3747609c4.png" }, 601568: function(e, t, n) { "use strict"; e.exports = n.p + "c11d1cfd13c7e6eacbe8.svg" }, 442123: function(e, t, n) { "use strict"; e.exports = n.p + "e470f5c557250e829910.png" }, 7007: function(e, t, n) { "use strict"; e.exports = n.p + "88167def5d44830fbe07.svg" }, 575439: function(e, t, n) { "use strict"; e.exports = n.p + "0261800acc53828adc09.png" }, 721782: function(e, t, n) { "use strict"; e.exports = n.p + "2a55b2489550030f6e6d.svg" }, 27163: function(e, t, n) { "use strict"; e.exports = n.p + "cbec9349c54c06512db1.png" }, 144578: function(e, t, n) { "use strict"; e.exports = n.p + "ac961759fb19bdd407b9.svg" }, 182553: function(e, t, n) { "use strict"; e.exports = n.p + "6861be3e30eb41225815.png" }, 545734: function(e, t, n) { "use strict"; e.exports = n.p + "371bb877e1a3fe7e68dd.svg" }, 955852: function(e, t, n) { "use strict"; e.exports = n.p + "68266e21c59c968a9819.png" }, 136142: function(e, t, n) { "use strict"; e.exports = n.p + "8678baadf72d552a894c.svg" }, 929234: function(e, t, n) { "use strict"; e.exports = n.p + "9a2bcf28ed286d1ea5bc.png" }, 227304: function(e, t, n) { "use strict"; e.exports = n.p + "fcbb404cb94bae3e97d7.svg" }, 170131: function(e, t, n) { "use strict"; e.exports = n.p + "cd051367f6b0c485113b.png" }, 763613: function(e, t, n) { "use strict"; e.exports = n.p + "3ac065180fc6dd10c1fa.svg" }, 137181: function(e, t, n) { "use strict"; e.exports = n.p + "f24045b9b83e823a6ed6.png" }, 155885: function(e, t, n) { "use strict"; e.exports = n.p + "9dfa7d2dd0ab203c94a8.svg" }, 699308: function(e, t, n) { "use strict"; e.exports = n.p + "64180090eaef74b82583.png" }, 890849: function(e, t, n) { "use strict"; e.exports = n.p + "8d59fe36ed8acef1339e.svg" }, 635643: function(e, t, n) { "use strict"; e.exports = n.p + "3429bf5bcd67119aaa83.png" }, 160050: function(e, t, n) { "use strict"; e.exports = n.p + "df45e9df10d924336856.svg" }, 800346: function(e, t, n) { "use strict"; e.exports = n.p + "a55c086a913ede6f56e3.png" }, 235779: function(e, t, n) { "use strict"; e.exports = n.p + "6f1aab89527553c5647b.svg" }, 954549: function(e, t, n) { "use strict"; e.exports = n.p + "d2cc7412aecbb2d5a7ad.png" }, 90961: function(e, t, n) { "use strict"; e.exports = n.p + "dab3862d582558f6c4b8.svg" }, 550886: function(e, t, n) { "use strict"; e.exports = n.p + "ce869a92352efbca1067.png" }, 819273: function(e, t, n) { "use strict"; e.exports = n.p + "021968cda4213909ddff.svg" }, 126776: function(e, t, n) { "use strict"; e.exports = n.p + "96309296f9d5224c103f.png" }, 451168: function(e, t, n) { "use strict"; e.exports = n.p + "86405e363b6311e00c44.svg" }, 327555: function(e, t, n) { "use strict"; e.exports = n.p + "0fa9c8dbb12420038ec8.png" }, 257325: function(e, t, n) { "use strict"; e.exports = n.p + "184666e35ea362100fe7.svg" }, 778385: function(e, t, n) { "use strict"; e.exports = n.p + "96309296f9d5224c103f.png" }, 580927: function(e, t, n) { "use strict"; e.exports = n.p + "86405e363b6311e00c44.svg" }, 606115: function(e, t, n) { "use strict"; e.exports = n.p + "a44a1e0928089b73fd83.png" }, 979660: function(e, t, n) { "use strict"; e.exports = n.p + "dedeb738ae6a345a80be.png" }, 66992: function(e, t, n) { "use strict"; e.exports = n.p + "a7bfe92b31e77b7496e3.svg" }, 157981: function(e, t, n) { "use strict"; e.exports = n.p + "926d52f236adc86e575b.png" }, 158173: function(e, t, n) { "use strict"; e.exports = n.p + "6de3dbffdc87e90e3e8a.svg" }, 459862: function(e, t, n) { "use strict"; e.exports = n.p + "91a344bd4c03caea53aa.png" }, 529923: function(e, t, n) { "use strict"; e.exports = n.p + "98cb54ad7e152cb8ddd8.svg" }, 934689: function(e, t, n) { "use strict"; e.exports = n.p + "e3a3fb91740626cef09a.png" }, 141989: function(e, t, n) { "use strict"; e.exports = n.p + "f6cfd7e6d7835c749f04.svg" }, 495036: function(e, t, n) { "use strict"; e.exports = n.p + "da178724d34352d269a3.png" }, 605098: function(e, t, n) { "use strict"; e.exports = n.p + "581dc306e703635f0289.svg" }, 706264: function(e, t, n) { "use strict"; e.exports = n.p + "c5962409fd59d9ed5ac5.png" }, 970714: function(e, t, n) { "use strict"; e.exports = n.p + "e89f43ae78ac985a5096.svg" }, 953522: function(e, t, n) { "use strict"; e.exports = n.p + "0494509afcbcd6624260.png" }, 459293: function(e, t, n) { "use strict"; e.exports = n.p + "f7a2fb7cbc859915fbb0.svg" }, 610891: function(e, t, n) { "use strict"; e.exports = n.p + "c5962409fd59d9ed5ac5.png" }, 891049: function(e, t, n) { "use strict"; e.exports = n.p + "e89f43ae78ac985a5096.svg" }, 561036: function(e, t, n) { "use strict"; e.exports = n.p + "b440ad2f48cecdbce4aa.png" }, 664935: function(e, t, n) { "use strict"; e.exports = n.p + "151115dec55864dda215.svg" }, 476735: function(e, t, n) { "use strict"; e.exports = n.p + "56d1bbc8a35d60ce52a1.png" }, 329074: function(e, t, n) { "use strict"; e.exports = n.p + "86be48549d0490add25c.svg" }, 414773: function(e, t, n) { "use strict"; e.exports = n.p + "c3e6178e0b8847a621fc.png" }, 678922: function(e, t, n) { "use strict"; e.exports = n.p + "bfdb94ccf16c48e76b55.svg" }, 670423: function(e, t, n) { "use strict"; e.exports = n.p + "90c0bc1d0a4043a02085.png" }, 553715: function(e, t, n) { "use strict"; e.exports = n.p + "6f3847663050b8e9da58.svg" }, 731596: function(e, t, n) { "use strict"; e.exports = n.p + "c3e6178e0b8847a621fc.png" }, 752561: function(e, t, n) { "use strict"; e.exports = n.p + "bfdb94ccf16c48e76b55.svg" }, 167969: function(e, t, n) { "use strict"; e.exports = n.p + "cdccee83bde523baf3d5.svg" }, 557256: function(e, t, n) { "use strict"; e.exports = n.p + "4e25f9b4b7b9f1ddf503.svg" }, 299172: function(e, t, n) { "use strict"; e.exports = n.p + "7289a801adc3c95b7490.svg" }, 255963: function(e, t, n) { "use strict"; e.exports = n.p + "0d43f0dae7f90dfd465e.svg" }, 341048: function(e, t, n) { "use strict"; e.exports = n.p + "2da68fc3664d3d0a7b06.svg" }, 537381: function(e, t, n) { "use strict"; e.exports = n.p + "41f0017b01160f7bf371.svg" }, 751599: function(e, t, n) { "use strict"; e.exports = n.p + "bc450f052155c286d79a.svg" }, 397293: function(e, t, n) { "use strict"; e.exports = n.p + "e7d751a6cb2a5a2293ef.svg" }, 352175: function(e, t, n) { "use strict"; e.exports = n.p + "5283ef8325213ddb476e.svg" }, 90351: function(e, t, n) { "use strict"; e.exports = n.p + "3fecb733e1d94dc120bd.svg" }, 242493: function(e, t, n) { "use strict"; e.exports = n.p + "80abe114c25d8ac29770.png" }, 476945: function(e, t, n) { "use strict"; e.exports = n.p + "50bd14e81c62b777ae97.svg" }, 945182: function(e, t, n) { "use strict"; e.exports = n.p + "d2d3b76521f35789eabd.svg" }, 943702: function(e, t, n) { "use strict"; e.exports = n.p + "1d62d15d0f67f75a9347.png" }, 208578: function(e, t, n) { "use strict"; e.exports = n.p + "c391830f3f2142c3d91c.svg" }, 325484: function(e, t, n) { "use strict"; e.exports = n.p + "99050d73c11588a8141a.svg" }, 895881: function(e, t, n) { "use strict"; e.exports = n.p + "c682563a0fb865b959cf.svg" }, 414575: function(e, t, n) { "use strict"; e.exports = n.p + "089f545efbdf7397c3ed.png" }, 807612: function(e, t, n) { "use strict"; e.exports = n.p + "645cd697c39b106537b6.png" }, 451328: function(e, t, n) { "use strict"; e.exports = n.p + "36d64eef3d5b407d7106.svg" }, 185672: function(e, t, n) { "use strict"; e.exports = n.p + "ce9a6ca881a8a51b7496.png" }, 294521: function(e, t, n) { "use strict"; e.exports = n.p + "3e0ea01b0dbd07fd8885.svg" }, 177351: function(e, t, n) { "use strict"; e.exports = n.p + "13f72d27fc4180b88df4.svg" }, 817812: function(e, t, n) { "use strict"; e.exports = n.p + "ec09b0d1e4c64b3c0956.svg" }, 602002: function(e, t, n) { "use strict"; e.exports = n.p + "3e699128b89422e92a31.svg" }, 673910: function(e, t, n) { "use strict"; e.exports = n.p + "b6e61cc624d1ee35c8b4.svg" }, 337242: function(e, t, n) { "use strict"; e.exports = n.p + "05cc6aa6f77a0a024917.svg" }, 678282: function(e, t, n) { "use strict"; e.exports = n.p + "3ab597cfbd4348b4d621.svg" }, 688815: function(e, t, n) { "use strict"; e.exports = n.p + "304665a447e194ad9c44.svg" }, 188244: function(e, t, n) { "use strict"; e.exports = n.p + "ff13c05cbbf47492ddf5.png" }, 40853: function(e, t, n) { "use strict"; e.exports = n.p + "5b22c3d21f5c3efc2b5c.png" }, 981835: function(e, t, n) { "use strict"; e.exports = n.p + "38d1253144e3f7ec770d.png" }, 48472: function(e, t, n) { "use strict"; e.exports = n.p + "2381af11886b80d2528e.png" }, 749889: function(e, t, n) { "use strict"; e.exports = n.p + "0f2a792f42643183e68f.png" }, 268687: function(e, t, n) { "use strict"; e.exports = n.p + "bb72715d7a6549f0aed7.png" }, 635611: function(e, t, n) { "use strict"; e.exports = n.p + "9bd35f7ec3dc9abd439b.png" }, 77280: function(e, t, n) { "use strict"; e.exports = n.p + "16fbca335c5f5c99a3ac.png" }, 679878: function(e, t, n) { "use strict"; e.exports = n.p + "e1b728f96b654ad8ec3a.png" }, 102274: function(e, t, n) { "use strict"; e.exports = n.p + "b1b7c00a548ea4999fa3.png" }, 918047: function(e, t, n) { "use strict"; e.exports = n.p + "7cf9c2872e8470cdf1b9.png" }, 32030: function(e, t, n) { "use strict"; e.exports = n.p + "acdb78ff5d3ff4be49db.png" }, 542711: function(e, t, n) { "use strict"; e.exports = n.p + "9f16a91976cc52a6327b.png" }, 855266: function(e, t, n) { "use strict"; e.exports = n.p + "36ca1651f29f743c1bcb.png" }, 897906: function(e, t, n) { "use strict"; e.exports = n.p + "c74f677643a22b7b5019.png" }, 209369: function(e, t, n) { "use strict"; e.exports = n.p + "f839a736406e25f49395.png" }, 862861: function(e, t, n) { "use strict"; e.exports = n.p + "07fa4042a0d46f224379.png" }, 300878: function(e, t, n) { "use strict"; e.exports = n.p + "4d2c5650ce74d82bd821.png" }, 63215: function(e, t, n) { "use strict"; e.exports = n.p + "d74eef1ead364407017b.png" }, 926720: function(e, t, n) { "use strict"; e.exports = n.p + "ff1aaec09347a7b23f48.png" }, 332936: function(e, t, n) { "use strict"; e.exports = n.p + "eb34899f42bbb8c0cf9c.png" }, 899565: function(e, t, n) { "use strict"; e.exports = n.p + "0bf8d72f515df3bd6e8a.png" }, 95603: function(e, t, n) { "use strict"; e.exports = n.p + "63be946dd46f9da58f29.svg" }, 683441: function(e, t, n) { "use strict"; e.exports = n.p + "9e34206ff235684e7b08.png" }, 303388: function(e, t, n) { "use strict"; e.exports = n.p + "14dfb8f8e551df1c5f3a.png" }, 793734: function(e, t, n) { "use strict"; e.exports = n.p + "2e172bbc8af10558fedb.svg" }, 750875: function(e, t, n) { "use strict"; e.exports = n.p + "900eb85496e726f33a19.svg" }, 978538: function(e, t, n) { "use strict"; e.exports = n.p + "3f98ed6fd773fa96cd08.svg" }, 66737: function(e, t, n) { "use strict"; e.exports = n.p + "d0db3d4be5a4e878bd74.svg" }, 340109: function(e, t, n) { "use strict"; e.exports = n.p + "0b4087afa3966d111f74.svg" }, 235731: function(e, t, n) { "use strict"; e.exports = n.p + "2e8aae0e5e260049b25c.gif" }, 480891: function(e, t, n) { "use strict"; e.exports = n.p + "3f07515b8e29b4300a1a.svg" }, 632133: function(e, t, n) { "use strict"; e.exports = n.p + "aaf03aad371433f8f207.svg" }, 924972: function(e, t, n) { "use strict"; e.exports = n.p + "5a521f282a23b495a0ac.svg" }, 488349: function(e, t, n) { "use strict"; e.exports = n.p + "56dcb4569925d28e301e.svg" }, 499059: function(e, t, n) { "use strict"; e.exports = n.p + "056dcd73bab7902572cd.svg" }, 614600: function(e, t, n) { "use strict"; e.exports = n.p + "bec9620ce17adf914a65.svg" }, 414102: function(e, t, n) { "use strict"; e.exports = n.p + "e8408b1a57db0b8e0046.svg" }, 692079: function(e, t, n) { "use strict"; e.exports = n.p + "3d9ad30f99df017c1fd9.svg" }, 136631: function(e, t, n) { "use strict"; e.exports = n.p + "b428c72a556fa3f18b1c.svg" }, 876049: function(e, t, n) { "use strict"; e.exports = n.p + "cdc50a63861fd393c782.svg" }, 872259: function(e, t, n) { "use strict"; e.exports = n.p + "eaaf0b4346d06c295cb8.svg" }, 866919: function(e, t, n) { "use strict"; e.exports = n.p + "bba5f781c824443ce86d.png" }, 277822: function(e, t, n) { "use strict"; e.exports = n.p + "5d485aeadb8a15da22e5.png" }, 881755: function(e, t, n) { "use strict"; e.exports = n.p + "1a9075f68e95d6bd5094.svg" }, 69098: function(e, t, n) { "use strict"; e.exports = n.p + "845a673b9a1bbf58c7ed.svg" }, 43735: function(e, t, n) { "use strict"; e.exports = n.p + "5f60b2e4c07fc2feabad.svg" }, 73541: function(e, t, n) { "use strict"; e.exports = n.p + "92b0a28a3d06621a9dc4.svg" }, 815152: function(e, t, n) { "use strict"; e.exports = n.p + "031bdef2e4e8bc135475.svg" }, 989015: function(e, t, n) { "use strict"; e.exports = n.p + "731a1906a76bf9062829.svg" }, 954499: function(e, t, n) { "use strict"; e.exports = n.p + "b5cb7cc5ef2f8329506a.png" }, 825588: function(e, t, n) { "use strict"; e.exports = n.p + "6ac884827ec3f7bb2652.png" }, 945198: function(e, t, n) { "use strict"; e.exports = n.p + "2114efae168c918ba5dc.svg" }, 710717: function(e, t, n) { "use strict"; e.exports = n.p + "57b8b18484606ce18c06.svg" }, 879846: function(e, t, n) { "use strict"; e.exports = n.p + "f7fc884b0412fd5a088d.png" }, 241190: function(e, t, n) { "use strict"; e.exports = n.p + "bd8d655043e1f1146817.png" }, 415480: function(e, t, n) { "use strict"; e.exports = n.p + "33426b481da76511d0bc.svg" }, 222185: function(e, t, n) { "use strict"; e.exports = n.p + "0bd65dab42f716fba0a3.svg" }, 836489: function(e, t, n) { "use strict"; e.exports = n.p + "86dce03388b9c98b926f.svg" }, 567949: function(e, t, n) { "use strict"; e.exports = n.p + "0f6f82fb461a6a4fa69f.gif" }, 552781: function(e, t, n) { "use strict"; e.exports = n.p + "9bd222e132027683407e.png" }, 952567: function(e, t, n) { "use strict"; e.exports = n.p + "559407a40aa3c0c20d62.png" }, 807159: function(e, t, n) { "use strict"; e.exports = n.p + "186e8319e68c84de2083.png" }, 337258: function(e, t, n) { "use strict"; e.exports = n.p + "8424cd3d364316402604.svg" }, 705196: function(e, t, n) { "use strict"; e.exports = n.p + "f60540b39ef8aed23b84.svg" }, 190878: function(e, t, n) { "use strict"; e.exports = n.p + "40a9682e397d92527f5b.svg" }, 991254: function(e, t, n) { "use strict"; e.exports = n.p + "c53beb8d5bee8721f3ed.svg" }, 485686: function(e, t, n) { "use strict"; e.exports = n.p + "7144057ba21669ed46d8.svg" }, 400976: function(e, t, n) { "use strict"; e.exports = n.p + "22e14dbe544a1d43a298.svg" }, 443909: function(e, t, n) { "use strict"; e.exports = n.p + "154044e39532e65b9fb1.svg" }, 586393: function(e, t, n) { "use strict"; e.exports = n.p + "c1a12b7a80aff29a249a.webm" }, 464912: function(e, t, n) { "use strict"; e.exports = n.p + "e6ea53ac21bf2f228d1e.webm" }, 769860: function(e, t, n) { "use strict"; e.exports = n.p + "bacece6baaef8bab3174.png" }, 842002: function(e, t, n) { "use strict"; e.exports = n.p + "c682563a0fb865b959cf.svg" }, 246681: function(e, t, n) { "use strict"; e.exports = n.p + "0c60ee249b9899722b49.svg" }, 867250: function(e, t, n) { "use strict"; e.exports = n.p + "57657c17fbd91aa5ac9e.svg" }, 247844: function(e, t, n) { "use strict"; e.exports = n.p + "39c7caf572ae87ecf7a0.svg" }, 839973: function(e, t, n) { "use strict"; e.exports = n.p + "5432d6048efa0779fb55.svg" }, 390965: function(e, t, n) { "use strict"; e.exports = n.p + "b568379e7f73f0ca0e74.svg" }, 752266: function(e, t, n) { "use strict"; e.exports = n.p + "a872cd9a98d30fc2a101.svg" }, 390820: function(e, t, n) { "use strict"; e.exports = n.p + "48e2b0ca903b51e9d4df.svg" }, 230797: function(e, t, n) { "use strict"; e.exports = n.p + "84cb4a3a5e0536cd505c.svg" }, 612830: function(e, t, n) { "use strict"; e.exports = n.p + "e939c32be7887216093c.svg" }, 293173: function(e, t, n) { "use strict"; e.exports = n.p + "c9168dbafef4a7bb33c8.svg" }, 198087: function(e, t, n) { "use strict"; e.exports = n.p + "0addfc93455c9cf90b8d.svg" }, 174492: function(e, t, n) { "use strict"; e.exports = n.p + "31330c5fb615a787fe9e.svg" }, 800010: function(e, t, n) { "use strict"; e.exports = n.p + "b03494bbcbe6f1747d74.svg" }, 671231: function(e, t, n) { "use strict"; e.exports = n.p + "992ff83dc0776aeb71bc.mp4" }, 647248: function(e, t, n) { "use strict"; e.exports = n.p + "c751188b3d41a9e1cb40.mp4" }, 912855: function(e, t, n) { "use strict"; e.exports = n.p + "406d15a6bf2bf22db651.png" }, 320236: function(e, t, n) { "use strict"; e.exports = n.p + "ae5b9367ad1a5dfb12f2.mp4" }, 502058: function(e, t, n) { "use strict"; e.exports = n.p + "596248bfb9a249e2735c.png" }, 794951: function(e, t, n) { "use strict"; e.exports = n.p + "0930f34498e974789eb2.png" }, 655142: function(e, t, n) { "use strict"; e.exports = n.p + "e768b1e76f3a31db55c6.png" }, 166453: function(e, t, n) { "use strict"; e.exports = n.p + "f4d2745ac52176b2a279.mp4" }, 689096: function(e, t, n) { "use strict"; e.exports = n.p + "487f1731ce8e81754524.mp3" }, 90152: function(e, t, n) { "use strict"; e.exports = n.p + "ff80232340c9ed347421.mp3" }, 12790: function(e, t, n) { "use strict"; e.exports = n.p + "415066a9e914da8e748b.mp3" }, 9907: function(e, t, n) { "use strict"; e.exports = n.p + "ce7afe3381d2f7d69e5c.mp3" }, 852674: function(e, t, n) { "use strict"; e.exports = n.p + "2a976d4aa96c20cba146.mp3" }, 212326: function(e, t, n) { "use strict"; e.exports = n.p + "7e0bfe028df74470ffad.mp3" }, 383471: function(e, t, n) { "use strict"; e.exports = n.p + "5fad01b76a3526a8700c.mp3" }, 447995: function(e, t, n) { "use strict"; e.exports = n.p + "1ad73583a60b6459e9c6.mp3" }, 646188: function(e, t, n) { "use strict"; e.exports = n.p + "e03bc05df96aa880c69c.mp3" }, 563705: function(e, t, n) { "use strict"; e.exports = n.p + "5d7cf81bcfad674c638d.mp3" }, 271527: function(e, t, n) { "use strict"; e.exports = n.p + "a5a06e135f29f2a8832d.mp3" }, 768953: function(e, t, n) { "use strict"; e.exports = n.p + "351bd917fe2d2a15d08c.mp3" }, 988363: function(e, t, n) { "use strict"; e.exports = n.p + "ebc00d6b1859ba195268.mp3" }, 36644: function(e, t, n) { "use strict"; e.exports = n.p + "cfabde12638939b98674.mp3" }, 45594: function(e, t, n) { "use strict"; e.exports = n.p + "e0c149a7a25060cb5307.mp3" }, 121420: function(e, t, n) { "use strict"; e.exports = n.p + "201a8372627509b85eb0.mp3" }, 87962: function(e, t, n) { "use strict"; e.exports = n.p + "c73aabc66e9e160a5572.mp3" }, 255237: function(e, t, n) { "use strict"; e.exports = n.p + "01af41824e799f25adff.mp3" }, 856163: function(e, t, n) { "use strict"; e.exports = n.p + "b77cf6feb25f9002383d.mp3" }, 722237: function(e, t, n) { "use strict"; e.exports = n.p + "643b9df78fbfd626b5b1.mp3" }, 585389: function(e, t, n) { "use strict"; e.exports = n.p + "48e3ea4dca58cb83ece5.mp3" }, 72474: function(e, t, n) { "use strict"; e.exports = n.p + "d947237d1c400267a403.mp3" }, 476934: function(e, t, n) { "use strict"; e.exports = n.p + "cd5e57249d80522c6ceb.mp3" }, 192523: function(e, t, n) { "use strict"; e.exports = n.p + "c974a1f479a04e4a53a8.mp3" }, 581909: function(e, t, n) { "use strict"; e.exports = n.p + "e651d433911b0721e97b.mp3" }, 230105: function(e, t, n) { "use strict"; e.exports = n.p + "a7d055cd3b9ed22f2ef2.mp3" }, 687904: function(e, t, n) { "use strict"; e.exports = n.p + "54f0ec020b33d5d0e9ef.mp3" }, 44871: function(e, t, n) { "use strict"; e.exports = n.p + "4b52ce0b1ecbb8e0cbfb.mp3" }, 227531: function(e, t, n) { "use strict"; e.exports = n.p + "a21d35efe5a3f60865d4.mp3" }, 503986: function(e, t, n) { "use strict"; e.exports = n.p + "eef9a1af6334f74d964c.mp3" }, 88094: function(e, t, n) { "use strict"; e.exports = n.p + "aab0fd0dd22a5ba62524.mp3" }, 606247: function(e, t, n) { "use strict"; e.exports = n.p + "897284a96c512f402abf.mp3" }, 396419: function(e, t, n) { "use strict"; e.exports = n.p + "7a8616f86218e4647dee.mp3" }, 169394: function(e, t, n) { "use strict"; e.exports = n.p + "a228dcaac5fc6390fe69.mp3" }, 912417: function(e, t, n) { "use strict"; e.exports = n.p + "83aa0399e9cd14a02ae9.mp3" }, 546738: function(e, t, n) { "use strict"; e.exports = n.p + "d5c88c4211bae0434dae.mp3" }, 461220: function(e, t, n) { "use strict"; e.exports = n.p + "609e4dfa2156aff6ed28.mp3" }, 614430: function(e, t, n) { "use strict"; e.exports = n.p + "2ec1ad3b82975ddc79bc.mp3" }, 488303: function(e, t, n) { "use strict"; e.exports = n.p + "1555bef0a2f761f6110a.mp3" }, 361510: function(e, t, n) { "use strict"; e.exports = n.p + "b84a3b11d5a6e96b19ba.mp3" }, 554771: function(e, t, n) { "use strict"; e.exports = n.p + "6d583d28e8ff1d3bddc5.mp3" }, 514266: function(e, t, n) { "use strict"; e.exports = n.p + "826e2f3cd3e420d00f55.mp3" }, 685673: function(e, t, n) { "use strict"; e.exports = n.p + "6e46a06a76f2ee93c9c6.mp3" }, 696730: function(e, t, n) { "use strict"; e.exports = n.p + "5faa908e0db55343b6c5.mp3" }, 656602: function(e, t, n) { "use strict"; e.exports = n.p + "46017ec652a87a1d7261.mp3" }, 129538: function(e, t, n) { "use strict"; e.exports = n.p + "15b3f08cc5f644b472b3.mp3" }, 560091: function(e, t, n) { "use strict"; e.exports = n.p + "10fe101dd35a3909ca2d.mp3" }, 76795: function(e, t, n) { "use strict"; e.exports = n.p + "7888d87c8eb8fa39675b.mp3" }, 512911: function(e, t, n) { "use strict"; e.exports = n.p + "21d42033d3125f81aae8.mp3" }, 169601: function(e, t, n) { "use strict"; e.exports = n.p + "07698189c28f0c15e553.mp3" }, 874289: function(e, t, n) { "use strict"; e.exports = n.p + "9422aef94aa931248105.mp3" }, 790990: function(e, t, n) { "use strict"; e.exports = n.p + "c6497d7f69ff2a6a86ee.mp3" }, 30171: function(e, t, n) { "use strict"; e.exports = n.p + "94fbf2998cb5aac50474.mp3" }, 612104: function(e, t, n) { "use strict"; e.exports = n.p + "905f080c63cdeeefcb75.mp3" }, 983425: function(e, t, n) { "use strict"; e.exports = n.p + "98d4683d6f2e5cc50797.mp3" }, 670191: function(e, t, n) { "use strict"; e.exports = n.p + "621cadf13adc5cd34831.mp3" }, 874878: function(e, t, n) { "use strict"; e.exports = n.p + "f6de2a3803e02a27a740.mp3" }, 733804: function(e, t, n) { "use strict"; e.exports = n.p + "6642a0d36fd21d1b6977.mp3" }, 273303: function(e, t, n) { "use strict"; e.exports = n.p + "20569f8c168251a6d3c3.mp3" }, 256104: function(e, t, n) { "use strict"; e.exports = n.p + "faf55adcedda608fa00f.mp3" }, 320349: function(e, t, n) { "use strict"; e.exports = n.p + "67070a6f731870be5751.mp3" }, 481734: function(e, t, n) { "use strict"; e.exports = n.p + "c15b3b7571155fcfe243.mp3" }, 19585: function(e, t, n) { "use strict"; e.exports = n.p + "7cf987759bc1c1b37a0a.mp3" }, 617510: function(e, t, n) { "use strict"; e.exports = n.p + "ffe6ad92fe7848e8b201.mp3" }, 307334: function(e, t, n) { "use strict"; e.exports = n.p + "593654f507c02052a920.mp3" }, 911368: function(e, t, n) { "use strict"; e.exports = n.p + "d566f6cabc7aa67ff66f.mp3" }, 195129: function(e, t, n) { "use strict"; e.exports = n.p + "eab7ad9857fb5e30fc9c.mp3" }, 828660: function(e, t, n) { "use strict"; e.exports = n.p + "ffb3b798d1feb16f8282.mp3" }, 499353: function(e, t, n) { "use strict"; e.exports = n.p + "e982a3011e504c0a0ceb.mp3" }, 939891: function(e, t, n) { "use strict"; e.exports = n.p + "611ead9fcdc69165f9a5.mp3" }, 360394: function(e, t, n) { "use strict"; e.exports = n.p + "48bc23337b6a7e2d3b90.mp3" }, 377100: function(e, t, n) { "use strict"; e.exports = n.p + "e94ad4836866285e0896.mp3" }, 351645: function(e, t, n) { "use strict"; e.exports = n.p + "ab65e1bc5bca33cef368.mp3" }, 426354: function(e, t, n) { "use strict"; e.exports = n.p + "cf9d3092c86ce4219ac1.mp3" }, 778184: function(e, t, n) { "use strict"; e.exports = n.p + "044c6093a6ca7006430c.mp3" }, 548820: function(e, t, n) { "use strict"; e.exports = n.p + "worklet.f2de2a350311f5f4eec4.js" }, 882236: function(e, t, n) { "use strict"; e.exports = n.p + "1cc4d6bf26f571d0c695.png" }, 758030: function(e, t, n) { "use strict"; e.exports = n.p + "0c81fb35c18e223d2745.png" }, 814727: function(e, t, n) { "use strict"; e.exports = n.p + "97dace684f57983852c5.woff2" }, 858855: function(e, t, n) { "use strict"; e.exports = n.p + "d5541e31f4669799d489.woff2" }, 622814: function(e, t, n) { "use strict"; e.exports = n.p + "3d562610073d4e8ae400.woff2" }, 894757: function(e, t, n) { "use strict"; e.exports = n.p + "1e8115068767d9700855.woff2" }, 349374: function(e, t, n) { "use strict"; e.exports = n.p + "f6eace1eb4856b2b3c69.woff2" }, 757883: function(e, t, n) { "use strict"; e.exports = n.p + "c5329cfa5c42790bde45.woff2" }, 776764: function(e, t, n) { "use strict"; e.exports = n.p + "80bebfd30fcab0b986b9.woff2" }, 963686: function(e, t, n) { "use strict"; e.exports = n.p + "c7ee0cb6a022a4ec6014.woff2" }, 5983: function(e, t, n) { "use strict"; e.exports = n.p + "04bca5e801a9fcbfc3aa.woff2" }, 811135: function(e, t, n) { "use strict"; e.exports = n.p + "02cc3c9536c9375ab76d.woff2" }, 151859: function(e, t, n) { "use strict"; e.exports = n.p + "75ba5f0f601173633474.woff2" }, 480854: function(e, t, n) { "use strict"; e.exports = n.p + "2e5557c485f515e42c32.woff2" }, 909671: function(e, t, n) { "use strict"; e.exports = n.p + "7e44a0c40cf9f5ad8851.woff2" }, 228978: function(e, t, n) { "use strict"; e.exports = n.p + "40d43fa876b60783aaf0.woff2" }, 362799: function(e, t, n) { "use strict"; e.exports = n.p + "6be494f6834de299bf2b.woff2" }, 69891: function(e, t, n) { "use strict"; e.exports = n.p + "21ce747ad35d0446bd97.woff2" }, 134131: function(e, t, n) { "use strict"; e.exports = n.p + "c6a42c9d9be5779449b4.woff2" }, 101103: function(e, t, n) { "use strict"; e.exports = n.p + "0f45161043dcbdcbd5ce.woff2" }, 2149: function(e, t, n) { "use strict"; e.exports = n.p + "49bdd438735c5a37aa2f.woff2" }, 390288: function(e, t, n) { "use strict"; e.exports = n.p + "a2a5dbdace1c7a60071f.woff2" }, 381176: function(e, t, n) { "use strict"; e.exports = n.p + "772d95477af0de29530a.woff2" }, 530636: function(e, t, n) { "use strict"; e.exports = n.p + "932193bd833126fd3594.woff2" }, 870744: function(e, t, n) { "use strict"; e.exports = n.p + "73db21f39678fb5461f4.woff2" }, 376255: function(e, t, n) { "use strict"; e.exports = n.p + "2cdb0cd5053057173033.woff2" }, 514320: function(e, t, n) { "use strict"; e.exports = n.p + "0ed8c63791bd4173c668.woff2" }, 6675: function(e, t, n) { "use strict"; e.exports = n.p + "6fc5e19f0bbff9fc4d8b.woff2" }, 654556: function(e, t, n) { "use strict"; e.exports = n.p + "5b973e10f95c0c47779a.woff2" }, 711313: function(e, t, n) { "use strict"; e.exports = n.p + "9f557929f8c3c0afd1a7.woff2" }, 135316: function(e, t, n) { "use strict"; e.exports = n.p + "b1271bc5f13746b07a4f.png" }, 107217: function(e, t, n) { "use strict"; e.exports = n.p + "cfd08dcfb0fd3ae1da30.png" }, 120273: function(e, t, n) { "use strict"; e.exports = n.p + "be4513767d8c0e23e100.png" }, 696881: function(e, t, n) { "use strict"; e.exports = n.p + "595dc7da699ca81530d3.png" }, 380938: function(e, t, n) { "use strict"; e.exports = n.p + "15e58c6720c33abd0205.png" }, 953420: function(e, t, n) { "use strict"; e.exports = n.p + "852784e46390f5a5fa4d.png" }, 201034: function(e, t, n) { "use strict"; e.exports = n.p + "4c6b8497e47083a55a47.png" }, 404700: function(e, t, n) { "use strict"; e.exports = n.p + "e2f7e6c4adbf23360f66.png" }, 237860: function(e, t, n) { "use strict"; e.exports = n.p + "ab70459209d3b206a096.png" }, 254815: function(e, t, n) { "use strict"; e.exports = n.p + "7a8af6d01a8aef324e7c.png" }, 159900: function(e, t, n) { "use strict"; e.exports = n.p + "714acc4a33df2844c2cb.png" }, 725668: function(e, t, n) { "use strict"; e.exports = n.p + "89a82d4f9ef21fa1ded0.png" }, 735979: function(e, t, n) { "use strict"; e.exports = n.p + "044558736da9cbe14d4c.png" }, 315018: function(e, t, n) { "use strict"; e.exports = n.p + "fe27964097356e411e2c.png" }, 564491: function(e, t, n) { "use strict"; e.exports = n.p + "45b980825f93768c3a7a.png" }, 993181: function(e, t, n) { "use strict"; e.exports = n.p + "e3a893856cad836d1de6.png" }, 533121: function(e, t, n) { "use strict"; e.exports = n.p + "280f6f24c20d7427c147.png" }, 639631: function(e, t, n) { "use strict"; e.exports = n.p + "e06eaf97ef67eb8ff666.png" }, 289128: function(e, t, n) { "use strict"; e.exports = n.p + "36c0aec23ea9de2e5bbc.png" }, 379414: function(e, t, n) { "use strict"; e.exports = n.p + "0300ce687af8e95a9611.png" }, 292927: function(e, t, n) { "use strict"; e.exports = n.p + "d32f77de32a7a5ce86f0.png" }, 101818: function(e, t, n) { "use strict"; e.exports = n.p + "3270cbe803e968a6c8e8.png" }, 935303: function(e, t, n) { "use strict"; e.exports = n.p + "00818309700c649bac21.png" }, 978138: function(e, t, n) { "use strict"; e.exports = n.p + "2ee14b8c381654232623.png" }, 676980: function(e, t, n) { "use strict"; e.exports = n.p + "05b1d32a01f636855a08.png" }, 234798: function(e, t, n) { "use strict"; e.exports = n.p + "5b81335228dde616f5a6.png" }, 126318: function(e, t, n) { "use strict"; e.exports = n.p + "8ef346cd25bc4783d03a.png" }, 829531: function(e, t, n) { "use strict"; e.exports = n.p + "1ae31ba7371d42a75966.png" }, 43572: function(e, t, n) { "use strict"; e.exports = n.p + "078e8d72fb81c7e063f5.png" }, 640909: function(e, t, n) { "use strict"; e.exports = n.p + "f0f2eee0f253ab9e7955.png" }, 408999: function(e, t, n) { "use strict"; e.exports = n.p + "fc9f50e1bc65ec86fca3.png" }, 570140: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { DispatchBand: function() { return s } }); var r, s, a, o = n("442837"), l = n("420970"), u = n("433517"), d = n("464847"), _ = n("180893"); (r = s || (s = {}))[r.Early = 0] = "Early", r[r.Database = 1] = "Database", r[r.Default = 2] = "Default", i = new l.ActionLogger({ persist: null !== (a = u.Storage.get(_.STORAGE_KEY_LOG_DISPATCHES)) && void 0 !== a && a }); let c = new o.Dispatcher(2, i, { addBreadcrumb: d.default }); t.default = c }, 278323: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("367907"), a = n("957730"), o = n("592125"), l = n("493683"), u = n("904245"), d = n("981631"); t.default = { updateActivity(e) { let { applicationId: t, distributor: n, shareActivity: s, token: a = null, duration: o = 0, closed: l = !1, exePath: u = null, voiceChannelId: _ = null, sessionId: c = null, mediaSessionId: E = null } = e; r.default.wait(() => r.default.dispatch({ type: "ACTIVITY_UPDATE_START", applicationId: t, duration: o, distributor: n })), i.HTTP.post({ url: d.Endpoints.ACTIVITIES, body: { application_id: t, token: a, duration: o, share_activity: s, distributor: n, closed: l, exePath: u, voice_channel_id: _, session_id: c, media_session_id: E }, retries: 1, oldFormErrors: !0 }).then(e => { let { body: { token: i } } = e; r.default.dispatch({ type: "ACTIVITY_UPDATE_SUCCESS", applicationId: t, token: i, duration: o, distributor: n }) }).catch(() => { r.default.dispatch({ type: "ACTIVITY_UPDATE_FAIL", applicationId: t }) }) }, sendActivityInvite(e) { let { channelId: t, type: n, activity: i, content: r, location: l } = e, _ = o.default.getChannel(t); if (null == _) return Promise.resolve(null); let c = a.default.parse(_, null != r ? r : ""); return u.default.sendMessage(_.id, c, !1, { activityAction: { type: n, activity: i } }).then(e => (s.default.trackWithMetadata(d.AnalyticEvents.INVITE_SENT, { location: l, invite_type: i.type === d.ActivityTypes.LISTENING ? d.LoggingInviteTypes.SPOTIFY : d.LoggingInviteTypes.APPLICATION, application_id: i.application_id, guild_id: _.getGuildId(), channel_id: _.id, message_id: null != e ? e.body.id : null }), Promise.resolve(_)), e => Promise.reject(e)) }, sendActivityInviteUser(e) { let { userId: t, type: n, activity: i, content: r, location: s } = e; return l.default.ensurePrivateChannel(t).then(e => this.sendActivityInvite({ channelId: e, type: n, activity: i, content: r, location: s })) }, async getJoinSecret(e, t, n, r, s) { let a = {}; return null != r && (a.channel_id = r), null != s && (a.message_id = s), (await i.HTTP.get({ url: d.Endpoints.USER_ACTIVITY_JOIN(e, t, n), retries: 3, query: a })).body.secret } } }, 668781: function(e, t, n) { "use strict"; let i; n.r(t), i = n("240872").default, t.default = i }, 274616: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchBranches: function() { return _ }, fetchBranchesForApplication: function() { return c } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("544891"), a = n("570140"), o = n("503013"), l = n("283595"), u = n("804739"), d = n("981631"); async function _() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : l.default.entitledBranchIds; if (!(0, u.isSupportedPlatform)() || 0 === e.length) return []; let t = r().chunk(e, 50); try { let e = t.map(async e => (await s.HTTP.post({ url: d.Endpoints.APPLICATION_BRANCHES, body: { branch_ids: e }, oldFormErrors: !0 })).body.map(o.default.createFromServer)), n = await Promise.all(e), i = r().flatten(n); return a.default.dispatch({ type: "APPLICATION_BRANCHES_FETCH_SUCCESS", branches: i }), i } catch (t) { return a.default.dispatch({ type: "APPLICATION_BRANCHES_FETCH_FAIL", branchIds: e }), [] } } async function c(e) { try { let t = await s.HTTP.get({ url: d.Endpoints.OWNED_APPLICATION_BRANCHES(e), oldFormErrors: !0 }), n = Array.isArray(t.body) ? t.body.map(o.default.createFromServer) : []; return a.default.dispatch({ type: "OWNED_APPLICATION_BRANCHES_FETCH_SUCCESS", applicationId: e, branches: n }), n } catch (t) { return a.default.dispatch({ type: "OWNED_APPLICATION_BRANCHES_FETCH_FAIL", applicationId: e }), [] } } }, 57513: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchLiveBuild: function() { return f } }); var i = n("544891"), r = n("379649"), s = n("846519"), a = n("570140"), o = n("706454"), l = n("283595"), u = n("129542"), d = n("70956"), _ = n("981631"); let c = 10 * d.default.Millis.MINUTE, E = 10 * d.default.Millis.MINUTE, I = 1 * d.default.Millis.MINUTE, T = {}; async function f(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], d = o.default.locale; return a.default.dispatch({ type: "APPLICATION_BUILD_FETCH_START", applicationId: e, branchId: t, locale: d }), n && await (0, r.sleep)(Math.random() * I), i.HTTP.get({ url: _.Endpoints.APPLICATION_LIVE_BUILD(e, t), query: { platform: (0, u.getBuildPlatform)(), locale: d }, oldFormErrors: !0 }).then(n => { let i = n.body; if (0 === i.manifests.length) { a.default.dispatch({ type: "APPLICATION_BUILD_NOT_FOUND", applicationId: e, branchId: t }); return } a.default.dispatch({ type: "APPLICATION_BUILD_FETCH_SUCCESS", applicationId: e, branchId: t, locale: d, build: i }) }, n => { let { status: i } = n; if (404 === i) a.default.dispatch({ type: "APPLICATION_BUILD_NOT_FOUND", applicationId: e, branchId: t }); else { var r, o; r = e, null == T[o = t] && (T[o] = new s.Timeout), T[o].start(c + Math.random() * E, () => { null != l.default.getLibraryApplication(r, o) && f(r, o) }) } }) } }, 846027: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"), r = n("340332"), s = n("672339"), a = n("463395"), o = n("131951"), l = n("626135"), u = n("557177"), d = n("557457"), _ = n("981631"), c = n("65154"); function E() { (0, u.playSound)("mention3") } function I(e, t, n, i, r) { if (t === n) return; let s = e[t], o = e[n]; l.default.track(_.AnalyticEvents.MEDIA_DEVICE_CHANGED, { device_from_name: a.default.getCertifiedDeviceName(t, null != s ? s.name : ""), device_to_name: a.default.getCertifiedDeviceName(n, null != o ? o.name : ""), device_type: i, device_is_certified: a.default.isCertified(n), location: r }) } let T = { isNotSupported: () => !1, enable: e => Promise.resolve(!0), trackToggleSelfMute(e) {} }, { enable: f, isNotSupported: S, trackToggleSelfMute: h } = T = n("929782"); t.default = { enable: f, toggleSelfMute() { let { context: e = c.MediaEngineContextTypes.DEFAULT, syncRemote: t = !0, usedKeybind: n = !1, playSoundEffect: r = !0 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return S() ? Promise.resolve() : (h({ usedKeybind: n }), o.default.isEnabled()) ? i.default.dispatch({ type: "AUDIO_TOGGLE_SELF_MUTE", context: e, syncRemote: t, skipMuteUnmuteSoundEffect: !r }) : this.enable(!0) }, setSelfMute(e, t) { !S() && i.default.dispatch({ type: "AUDIO_SET_SELF_MUTE", context: e, mute: t }) }, setTemporarySelfMute(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_TEMPORARY_SELF_MUTE", mute: e }) }, toggleSelfDeaf() { let { context: e = c.MediaEngineContextTypes.DEFAULT, syncRemote: t = !0 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; !S() && i.default.dispatch({ type: "AUDIO_TOGGLE_SELF_DEAF", context: e, syncRemote: t }) }, toggleLocalMute(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : c.MediaEngineContextTypes.DEFAULT; !S() && i.default.dispatch({ type: "AUDIO_TOGGLE_LOCAL_MUTE", context: t, userId: e }) }, toggleLocalSoundboardMute(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : c.MediaEngineContextTypes.DEFAULT; i.default.dispatch({ type: "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE", context: t, userId: e }) }, setDisableLocalVideo(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : c.MediaEngineContextTypes.DEFAULT, r = !(arguments.length > 3) || void 0 === arguments[3] || arguments[3], s = arguments.length > 4 && void 0 !== arguments[4] && arguments[4]; !S() && i.default.dispatch({ type: "AUDIO_SET_LOCAL_VIDEO_DISABLED", context: n, userId: e, videoToggleState: t, persist: r, isAutomatic: s }) }, setLocalVolume(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : c.MediaEngineContextTypes.DEFAULT; i.default.dispatch({ type: "AUDIO_SET_LOCAL_VOLUME", context: n, userId: e, volume: (0, r.snapVolumeToDefault)(t, n) }) }, setLocalPan(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : c.MediaEngineContextTypes.DEFAULT; i.default.dispatch({ type: "AUDIO_SET_LOCAL_PAN", context: r, userId: e, left: t, right: n }) }, setMode(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : c.MediaEngineContextTypes.DEFAULT; !S() && i.default.dispatch({ type: "AUDIO_SET_MODE", context: n, mode: e, options: { ...o.default.getModeOptions(n), ...t } }) }, setInputVolume(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_INPUT_VOLUME", volume: e }) }, setOutputVolume(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_OUTPUT_VOLUME", volume: e }) }, setInputDevice(e, t) { if (!S()) { if (null != t) { let n = o.default.getInputDevices(); I(n, o.default.getInputDeviceId(), e, "Audio Input", t) } i.default.dispatch({ type: "AUDIO_SET_INPUT_DEVICE", id: e }), E() } }, setOutputDevice(e, t) { if (!S()) { if (null != t) { let n = o.default.getOutputDevices(); I(n, o.default.getOutputDeviceId(), e, "Audio Output", t) } i.default.dispatch({ type: "AUDIO_SET_OUTPUT_DEVICE", id: e }), E() } }, setVideoDevice(e, t) { if (!S()) { if (null != t) { let n = o.default.getVideoDevices(); I(n, o.default.getVideoDeviceId(), e, "Video", t) } i.default.dispatch({ type: "MEDIA_ENGINE_SET_VIDEO_DEVICE", id: e }) } }, setEchoCancellation(e, t) { !S() && i.default.dispatch({ type: "AUDIO_SET_ECHO_CANCELLATION", enabled: e, location: t }) }, setLoopback(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_LOOPBACK", enabled: e }) }, setNoiseSuppression(e, t) { !S() && i.default.dispatch({ type: "AUDIO_SET_NOISE_SUPPRESSION", enabled: e, location: t }) }, setNoiseCancellation(e, t) { !S() && (i.default.dispatch({ type: "AUDIO_SET_NOISE_CANCELLATION", enabled: e, location: t }), i.default.dispatch({ type: "AUDIO_SET_NOISE_SUPPRESSION", enabled: !e, location: t })) }, setAutomaticGainControl(e, t) { !S() && i.default.dispatch({ type: "AUDIO_SET_AUTOMATIC_GAIN_CONTROL", enabled: e, location: t }) }, setExperimentalEncoders(e) { !S() && i.default.dispatch({ type: "MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS", enabled: e }) }, setHardwareH264(e) { !S() && i.default.dispatch({ type: "MEDIA_ENGINE_SET_HARDWARE_H264", enabled: e }) }, setAttenuation(e, t, n) { !S() && i.default.dispatch({ type: "AUDIO_SET_ATTENUATION", attenuation: e, attenuateWhileSpeakingSelf: t, attenuateWhileSpeakingOthers: n }) }, setQoS(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_QOS", enabled: e }) }, reset() { !S() && i.default.dispatch({ type: "AUDIO_RESET" }) }, setSilenceWarning(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_DISPLAY_SILENCE_WARNING", enabled: e }) }, setDebugLogging(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_DEBUG_LOGGING", enabled: e }) }, setVideoHook(e) { !S() && i.default.dispatch({ type: "MEDIA_ENGINE_SET_VIDEO_HOOK", enabled: e }) }, setExperimentalSoundshare(e) { !S() && i.default.dispatch({ type: "MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE", enabled: e }) }, setAudioSubsystem(e) { !S() && i.default.dispatch({ type: "AUDIO_SET_SUBSYSTEM", subsystem: e }) }, setVideoEnabled(e) { (0, s.applyInitialVideoBackgroundOption)(), i.default.dispatch({ type: "MEDIA_ENGINE_SET_VIDEO_ENABLED", enabled: e }) }, setGoLiveSource(e) { (null == e ? void 0 : e.qualityOptions) != null && (0, d.trackStreamSettingsUpdate)(e.qualityOptions.preset, e.qualityOptions.resolution, e.qualityOptions.frameRate), i.default.dispatch({ type: "MEDIA_ENGINE_SET_GO_LIVE_SOURCE", settings: e }) }, setOpenH264(e) { !S() && i.default.dispatch({ type: "MEDIA_ENGINE_SET_OPEN_H264", enabled: e }) }, setAecDump(e) { !S() && i.default.dispatch({ type: "MEDIA_ENGINE_SET_AEC_DUMP", enabled: e }) }, interact() { !S() && i.default.dispatch({ type: "MEDIA_ENGINE_INTERACTION_REQUIRED", required: !1 }) } } }, 893776: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { PasswordResetResult: function() { return r } }), n("411104"), n("177593"), n("773603"); var r, s, a = n("990547"), o = n("213919"), l = n("544891"), u = n("433517"), d = n("570140"), _ = n("881052"), c = n("882037"), E = n("710845"), I = n("57132"), T = n("703656"), f = n("365007"), S = n("314897"), h = n("480294"), A = n("573261"), m = n("572691"), N = n("981631"), p = n("792101"); let O = new E.default("AuthenticationActionCreators"), C = null; function R(e) { let t = { type: "LOGOUT", ...e }; d.default.dispatch(t).catch(e => { var t; throw O.error("Error while dispatching LOGOUT", e), null === (t = window.DiscordErrors) || void 0 === t || t.softCrash(e), e }) } function g() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : N.Routes.DEFAULT_LOGGED_OUT; R(); let t = (0, I.getRootNavigationRefIfInExperiment)(); null != e && (null != t ? (m.default.popAll(), t.navigate("auth")) : (0, T.transitionTo)(e)) }(s = r || (r = {})).MFA = "MFA", s.SUCCESS = "SUCCESS", t.default = { startSession(e) { d.default.wait(() => { d.default.dispatch({ type: "START_SESSION", token: e }) }) }, setLoginCredentials(e, t) { d.default.dispatch({ type: "SET_LOGIN_CREDENTIALS", login: e, password: t }) }, login(e) { var t; let { login: n, password: i, loginCode: r, undelete: s, source: o, giftCodeSKUId: l, invite: u, isMultiAccount: c } = e; d.default.dispatch({ type: "LOGIN", login: n, loginMethod: null != r && "" !== r ? N.LoginMethods.LOGIN_CODE : N.LoginMethods.PASSWORD }), this.setLoginCredentials(n, null !== (t = null != i ? i : r) && void 0 !== t ? t : void 0), A.default.post({ url: N.Endpoints.LOGIN, body: { login: n, password: i, undelete: s, login_code: r, login_source: o, gift_code_sku_id: l }, retries: 2, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.USER_LOGIN, properties: { invite_code: null == u ? void 0 : u.code, is_multi_account: c } }, ...c ? { headers: { authorization: "" } } : {} }).then(e => { let { body: { mfa: t, sms: n, webauthn: i, ticket: r, token: s, backup: a, user_id: o, required_actions: l, totp: u } } = e; d.default.dispatch({ type: "LOGIN_ATTEMPTED", user_id: o, required_actions: l }), t ? d.default.dispatch({ type: "LOGIN_MFA_STEP", ticket: r, sms: n, webauthn: i, totp: u, backup: a }) : c ? this.switchAccountToken(s) : d.default.dispatch({ type: "LOGIN_SUCCESS", token: s }) }, e => { var t, r, s; if (null != e.body && (null === (t = e.body) || void 0 === t ? void 0 : t.suspended_user_token) != null) { d.default.dispatch({ type: "LOGIN_SUSPENDED_USER", suspendedUserToken: null === (s = e.body) || void 0 === s ? void 0 : s.suspended_user_token }); return } let a = null === (r = e.body) || void 0 === r ? void 0 : r.code; a === N.AbortCodes.ACCOUNT_SCHEDULED_FOR_DELETION && null != i && "" !== i ? d.default.dispatch({ type: "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION", credentials: { login: n, password: i } }) : a === N.AbortCodes.ACCOUNT_DISABLED && null != i && "" !== i ? d.default.dispatch({ type: "LOGIN_ACCOUNT_DISABLED", credentials: { login: n, password: i } }) : a === N.AbortCodes.PHONE_VERIFICATION_REQUIRED ? d.default.dispatch({ type: "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED" }) : d.default.dispatch({ type: "LOGIN_FAILURE", error: new _.V6OrEarlierAPIError(e) }) }) }, loginMFAv2(e) { let { code: t, ticket: n, source: i, giftCodeSKUId: r, isMultiAccount: s, mfaType: o } = e; return A.default.post({ url: N.Endpoints.LOGIN_MFA(o), body: { code: t, ticket: n, login_source: i, gift_code_sku_id: r }, retries: 2, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.USER_LOGIN_MFA } }).then(e => { s ? this.switchAccountToken(e.body.token) : d.default.dispatch({ type: "LOGIN_SUCCESS", token: e.body.token }) }).catch(e => { var t; if (null != e.body && null != e.body.suspended_user_token) { d.default.dispatch({ type: "LOGIN_SUSPENDED_USER", suspendedUserToken: e.body.suspended_user_token }); return } if ((null === (t = e.body) || void 0 === t ? void 0 : t.code) === N.AbortCodes.MFA_INVALID_CODE) throw Error(e.body.message); throw e }) }, authenticatePasswordless(e) { let { authenticateFunc: t, conditionalMediationAbortController: n, source: i, giftCodeSKUId: r } = e; return null == n || n.abort("Starting non-conditional mediation"), d.default.dispatch({ type: "PASSWORDLESS_START" }), (0, f.fetchWebAuthnPasswordlessChallenge)().then(e => { let { challenge: n, ticket: s } = e; return t(n).then(e => this.loginWebAuthn({ ticket: s, credential: e, source: i, giftCodeSKUId: r })) }).catch(e => { throw d.default.dispatch({ type: "PASSWORDLESS_FAILURE", error: e }), e }) }, loginWebAuthn(e) { let { ticket: t, credential: n, source: i, giftCodeSKUId: r } = e; return A.default.post({ url: N.Endpoints.WEBAUTHN_CONDITIONAL_UI_LOGIN, body: { credential: n, ticket: t, source: i, giftCodeSKUId: r }, retries: 1, trackedActionData: { event: a.NetworkActionNames.USER_LOGIN_PASSWORDLESS } }).then(e => { let { body: { token: t, user_id: n, required_actions: i } } = e; d.default.dispatch({ type: "LOGIN_ATTEMPTED", user_id: n, required_actions: i }), d.default.dispatch({ type: "LOGIN_SUCCESS", token: t }) }).catch(e => { if (null != e.body && null != e.body.suspended_user_token) { d.default.dispatch({ type: "LOGIN_SUSPENDED_USER", suspendedUserToken: e.body.suspended_user_token }); return } throw d.default.dispatch({ type: "PASSWORDLESS_FAILURE", error: e }), e }) }, loginToken(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return d.default.dispatch({ type: "LOGIN" }), new Promise(n => { setImmediate(() => { d.default.dispatch({ type: "LOGIN_SUCCESS", token: e }), t && this.startSession(e), n() }) }) }, loginReset(e) { d.default.dispatch({ type: "LOGIN_RESET", isMultiAccount: e }) }, loginStatusReset() { d.default.dispatch({ type: "LOGIN_STATUS_RESET" }) }, logoutInternal(e) { R(e) }, logout() { var e; let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : N.Routes.DEFAULT_LOGGED_OUT, n = arguments.length > 1 ? arguments[1] : void 0; return A.default.post({ url: N.Endpoints.LOGOUT, body: { provider: (0, p.getDevicePushProvider)(), token: u.Storage.get(N.DEVICE_TOKEN), voip_provider: p.DEVICE_PUSH_VOIP_PROVIDER, voip_token: u.Storage.get(N.DEVICE_VOIP_TOKEN) }, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.USER_LOGOUT }, ...null != n && { headers: { authorization: null !== (e = o.getToken(n)) && void 0 !== e ? e : "" } } }).finally(() => { (null == n || n === S.default.getId()) && g(t) }) }, switchAccountToken(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = S.default.getToken(); O.log("Switching accounts", { wasLoggedIn: null != n, tokenHasChanged: e !== n }), R({ isSwitchingAccount: !0 }); let i = this.loginToken(e, !0).then(() => { let t = S.default.getToken(); O.log("Switched accounts finished", { isCorrectToken: e === t }) }); return t && (0, T.transitionTo)(N.Routes.ME), i }, verifySSOToken() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : N.Routes.DEFAULT_LOGGED_OUT; return l.HTTP.get({ url: N.Endpoints.ME, oldFormErrors: !0 }).catch(() => g(e)) }, verify(e) { null != e ? A.default.post({ url: N.Endpoints.VERIFY, body: { token: e }, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.USER_VERIFY } }).then(e => { d.default.dispatch({ type: "LOGIN_SUCCESS", token: e.body.token }), d.default.dispatch({ type: "VERIFY_SUCCESS", verifyingUserId: e.body.user_id }) }, e => d.default.dispatch({ type: "VERIFY_FAILURE", errors: e.body })) : d.default.dispatch({ type: "VERIFY_FAILURE", errors: {} }) }, async authorizePayment(e) { try { await A.default.post({ url: N.Endpoints.AUTHORIZE_PAYMENT, body: { token: e }, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.AUTHORIZE_PAYMENT } }), d.default.dispatch({ type: "VERIFY_SUCCESS" }) } catch (e) { d.default.dispatch({ type: "VERIFY_FAILURE", errors: {} }) } }, async authorizeIPAddress(e) { if (null == e) { d.default.dispatch({ type: "VERIFY_FAILURE", errors: {} }); return } try { await A.default.post({ url: N.Endpoints.AUTHORIZE_IP, body: { token: e }, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.AUTHORIZE_IP } }), d.default.dispatch({ type: "VERIFY_SUCCESS" }) } catch (e) { d.default.dispatch({ type: "VERIFY_FAILURE", errors: {} }) } }, verifyResend: () => A.default.post({ url: N.Endpoints.VERIFY_RESEND, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.USER_VERIFY_RESEND } }), async resetPassword(e, t, n) { d.default.dispatch({ type: "LOGIN" }); let i = { token: e, password: t, source: n }, r = u.Storage.get(N.DEVICE_TOKEN), s = (0, p.getDevicePushProvider)(); null != s && null != r && (i.push_provider = s, i.push_token = r); let o = u.Storage.get(N.DEVICE_VOIP_TOKEN); null != p.DEVICE_PUSH_VOIP_PROVIDER && null != o && (i.push_voip_provider = p.DEVICE_PUSH_VOIP_PROVIDER, i.push_voip_token = o); try { let { body: { mfa: e, sms: t, webauthn: n, ticket: r, token: s, backup: o, totp: l } } = await A.default.post({ url: N.Endpoints.RESET_PASSWORD, body: i, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.USER_RESET_PASSWORD } }); return { result: e ? "MFA" : "SUCCESS", sms: t, webauthn: n, ticket: r, token: s, backup: o, totp: l } } catch (e) { throw d.default.dispatch({ type: "LOGIN_FAILURE", error: new _.V6OrEarlierAPIError(e) }), e } }, async resetPasswordMFAv2(e) { let { method: t, code: n, ticket: i, password: r, token: s, source: o } = e; return d.default.dispatch({ type: "LOGIN_MFA" }), (await A.default.post({ url: N.Endpoints.RESET_PASSWORD, body: { code: n, ticket: i, password: r, token: s, source: o, method: t }, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.USER_RESET_PASSWORD, properties: { mfa: !0 } } })).body.token }, async forgotPassword(e) { this.setLoginCredentials(e), d.default.dispatch({ type: "FORGOT_PASSWORD_REQUEST" }); try { await A.default.post({ url: N.Endpoints.FORGOT_PASSWORD, body: { login: e }, oldFormErrors: !0, trackedActionData: { event: a.NetworkActionNames.FORGOT_PASSWORD } }), d.default.dispatch({ type: "FORGOT_PASSWORD_SENT" }) } catch (t) { let e = new _.V6OrEarlierAPIError(t); throw e.code === N.AbortCodes.PHONE_VERIFICATION_REQUIRED ? d.default.dispatch({ type: "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION" }) : d.default.dispatch({ type: "LOGIN_FAILURE", error: e }), t } }, setFingerprint(e) { d.default.dispatch({ type: "FINGERPRINT", fingerprint: e }) }, getExperiments(e) { d.default.dispatch({ type: "EXPERIMENTS_FETCH", withGuildExperiments: e }) }, getLocationMetadata: () => null != C ? C : (clearTimeout(i), i = setTimeout(() => { d.default.dispatch({ type: "SET_CONSENT_REQUIRED", consentRequired: !0 }) }, 5e3), C = l.HTTP.get({ url: N.Endpoints.AUTH_LOCATION_METADATA, retries: 2, oldFormErrors: !0 }).then(e => { var t, n, r, s, a; if (clearTimeout(i), null == h.default.getAuthenticationConsentRequired()) { let t = null === (s = null == e ? void 0 : null === (r = e.body) || void 0 === r ? void 0 : r.consent_required) || void 0 === s || s; d.default.dispatch({ type: "SET_CONSENT_REQUIRED", consentRequired: t }) } if (d.default.dispatch({ type: "SET_LOCATION_METADATA", countryCode: null !== (a = null == e ? void 0 : null === (t = e.body) || void 0 === t ? void 0 : t.country_code) && void 0 !== a ? a : void 0 }), C = null, (null == e ? void 0 : null === (n = e.body) || void 0 === n ? void 0 : n.promotional_email_opt_in) != null) { let t = e.body.promotional_email_opt_in; (0, c.setPromoEmailConsentState)({ required: t.required, checked: t.pre_checked, preChecked: t.pre_checked }) } }, () => { clearTimeout(i), d.default.dispatch({ type: "SET_CONSENT_REQUIRED", consentRequired: !0 }), C = null })), closeSuspendedUser() { d.default.dispatch({ type: "CLOSE_SUSPENDED_USER" }) } } }, 355467: function(e, t, n) { "use strict"; n.r(t), n.d(t, { cancelSubscription: function() { return eo }, changePaymentSource: function() { return eE }, changeSubscriptionCurrency: function() { return ec }, clearPaymentAuthenticationError: function() { return eS }, clearRemovePaymentSourceError: function() { return ef }, clearUpdatePaymentSourceError: function() { return eT }, confirmCardPaymentSource: function() { return w }, confirmEPS: function() { return P }, confirmIdeal: function() { return U }, confirmPrzelewy24: function() { return b }, confirmSofort: function() { return G }, createAdyenPaymentSourceToken: function() { return v }, createAdyenPrepaidPaymentSource: function() { return x }, createAdyenVaultablePaymentSource: function() { return F }, createBraintreePaymentSource: function() { return B }, createCardToken: function() { return y }, createPaymentRequestPaymentSource: function() { return k }, createPaymentSource: function() { return D }, createPaymentSourceToken: function() { return Y }, createStripePaymentSource: function() { return V }, createStripePaymentSourceToken: function() { return H }, createSubscription: function() { return q }, deletePaymentSource: function() { return p }, deleteRenewalMutation: function() { return el }, dispatchConfirmationError: function() { return M }, fetchIpCountryCode: function() { return ep }, fetchLocalizedPromo: function() { return eO }, fetchMostRecentSubscription: function() { return Q }, fetchPayment: function() { return W }, fetchPaymentSources: function() { return j }, fetchPayments: function() { return K }, fetchSubscriptions: function() { return z }, getNitroAffinity: function() { return X }, getPerksRelevance: function() { return Z }, handleConfirmation: function() { return $ }, pausePendingSubscription: function() { return eI }, payInvoiceManually: function() { return J }, paymentIntentSucceeded: function() { return ei }, popupBridgeCallback: function() { return eN }, popupBridgeState: function() { return em }, redirectedPaymentSucceeded: function() { return en }, refundPayment: function() { return eA }, resetPaymentIntentId: function() { return eC }, resetSubscriptionStore: function() { return eR }, resubscribeToSubscription: function() { return ed }, startBrowserCheckout: function() { return eg }, updatePaymentSource: function() { return O }, updateSubscription: function() { return eu }, upgradeSubscription: function() { return e_ }, validatePaymentSourceBillingAddress: function() { return L }, voidPendingPayment: function() { return eh } }), n("411104"); var i = n("160612"), r = n("512722"), s = n.n(r), a = n("544891"), o = n("570140"), l = n("881052"), u = n("128069"), d = n("46141"), _ = n("598077"), c = n("351402"), E = n("626135"), I = n("122289"), T = n("74538"), f = n("936101"), S = n("622999"), h = n("981631"), A = n("763596"), m = n("231338"), N = n("689938"); async function p(e) { o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_REMOVE_START" }); try { await a.HTTP.del({ url: h.Endpoints.BILLING_PAYMENT_SOURCE(e), oldFormErrors: !0 }), o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS", id: e }) } catch (t) { let e = new l.BillingError(t); throw o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_REMOVE_FAIL", error: e }), e } } async function O(e, t) { o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_UPDATE_START" }); try { let { billingAddress: { line1: n, line2: i, postalCode: r, ...s } } = t, l = await a.HTTP.patch({ url: h.Endpoints.BILLING_PAYMENT_SOURCE(e), body: { billing_address: { ...s, line_1: n, line_2: i, postal_code: r }, expires_month: t.expiresMonth, expires_year: t.expiresYear, default: t.isDefault } }), u = d.default.createFromServer(l.body); o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS", paymentSource: u }) } catch (t) { let e = (0, u.parseV8BillingAddressSkemaErrorToBillingError)(t); throw o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_UPDATE_FAIL", error: e }), e } } async function C(e) { let { stripe_payment_intent_client_secret: t } = (await a.HTTP.get({ url: h.Endpoints.BILLING_STRIPE_PAYMENT_INTENTS(e), oldFormErrors: !0 })).body; return t } async function R(e) { let { stripe_payment_intent_client_secret: t, stripe_payment_intent_payment_method_id: n } = (await a.HTTP.get({ url: h.Endpoints.BILLING_STRIPE_PAYMENT_INTENTS(e), oldFormErrors: !0 })).body; return { clientSecret: t, paymentMethodId: n } } async function g() { return (await a.HTTP.post({ url: h.Endpoints.BILLING_STRIPE_SETUP_INTENT_SECRET, oldFormErrors: !0 })).body.client_secret } async function L(e) { try { return (await a.HTTP.post({ url: h.Endpoints.BILLING_PAYMENT_SOURCES_VALIDATE_BILLING_ADDRESS, body: { billing_address: { name: e.name, line_1: e.line1, line_2: e.line2, city: e.city, state: e.state, postal_code: e.postalCode, country: e.country, email: e.email } } })).body.token } catch (t) { let e = (0, u.parseV8BillingAddressSkemaErrorToBillingError)(t); throw o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_FAIL", error: e }), e } } function v(e) { var t; return h.VAULTABLE_PAYMENT_SOURCES.has(e.type) ? null : JSON.stringify({ type: null !== (t = m.ADYEN_PAYMENT_SOURCES.get(e.type)) && void 0 !== t ? t : null }) } async function D(e, t, n, i) { o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_START" }); try { let r = await a.HTTP.post({ url: h.Endpoints.BILLING_PAYMENT_SOURCES, query: { location: i.analyticsLocation }, body: { payment_gateway: e, token: t, billing_address: { name: n.name, line_1: n.line1, line_2: n.line2, city: n.city, state: n.state, postal_code: n.postalCode, country: n.country, email: n.email }, billing_address_token: i.billingAddressToken, bank: i.bank, return_url: i.returnUrl } }), s = d.default.createFromServer(r.body); return o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_SUCCESS", paymentSource: s }), s } catch (t) { let e = (0, u.parseV8BillingAddressSkemaErrorToBillingError)(t); throw function(e, t) { var n, i; (null == t ? void 0 : null === (n = t.body) || void 0 === n ? void 0 : n.adyen_redirect_url) && (e.fields.adyen_redirect_url = null == t ? void 0 : null === (i = t.body) || void 0 === i ? void 0 : i.adyen_redirect_url) }(e, t), e.code !== u.ErrorCodes.CONFIRMATION_REQUIRED && o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_FAIL", error: e }), e } } function M(e) { var t, n; let i, r, s = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], a = N.default.Messages.PAYMENT_METHOD_CONFIRMATION_ERROR; if (t = e, A.StripeErrorTypes.includes(t.type)) { ; let t = null != e.message ? "".concat(a, ": ").concat(e.message) : a, o = { failure_message: t, error_type: e.type, failure_code: e.code, failure_sub_code: e.decline_code, payment_source_type: null === (n = e.payment_method) || void 0 === n ? void 0 : n.type }; if (r = o, "card_error" === e.type) E.default.track(h.AnalyticEvents.PAYMENT_SOURCE_CREATION_FAILED, { ...o, stacktrace: Error().stack }), s = !1; i = new l.BillingError(t) } else r = { failure_message: (i = new l.BillingError("string" == typeof e ? a : e)).message, status_code: i.code }, 429 === i.code && (s = !1); o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_FAIL", error: i }); let u = Error("string" == typeof e ? e : i.message); return s && (0, I.captureBillingException)(u, { extra: r }), u } async function y(e, t) { if (null == e || null == t) throw M("Stripe or elements not loaded"); let n = t.getElement(i.CardNumberElement); if (null == n) throw M("Unable to load card elements from Stripe"); let { token: r, error: s } = await e.createToken(n); if (null != s) throw M(s); if (null == r) throw M("token not available with successful stripe call"); return r.id } async function P(e, t, n, i) { if (null == e) throw M("Stripe not loaded"); if (null == t) throw M("Bank required for EPS"); let { email: r, name: s, line1: a, line2: l, city: u, state: d, postalCode: _, country: c } = n; if (null == s) throw M("Name required for EPS"); o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_START" }); let E = await L(n), { paymentMethod: I, error: T } = await e.createPaymentMethod({ type: "eps", eps: { bank: t }, billing_details: { address: { line1: a, line2: l, city: u, state: d, postal_code: _, country: c }, name: s, email: r } }); if (null != T) throw M(T); if (null == I) throw M("paymentMethod not available with successful stripe call"); return D(h.PaymentGateways.STRIPE, I.id, n, { billingAddressToken: E, analyticsLocation: i, bank: t }) } async function U(e, t, n, i) { if (null == e) throw M("Stripe not loaded"); if (null == t) throw M("Bank required for iDEAL"); let { email: r, name: s, line1: a, line2: l, city: u, state: d, postalCode: _, country: c } = n; if (null == s) throw M("Name required for iDEAL"); o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_START" }); let E = await L(n), { paymentMethod: I, error: T } = await e.createPaymentMethod({ type: "ideal", ideal: { bank: t }, billing_details: { address: { line1: a, line2: l, city: u, state: d, postal_code: _, country: c }, name: s, email: r } }); if (null != T) throw M(T); if (null == I) throw M("paymentMethod not available with successful stripe call"); return D(h.PaymentGateways.STRIPE, I.id, n, { billingAddressToken: E, analyticsLocation: i, bank: t }) } async function b(e, t, n, i) { if (null == e) throw M("Stripe not loaded"); let { email: r, name: s, line1: a, line2: l, city: u, state: d, postalCode: _, country: c } = n; if (null == r) throw M("Email required for Przelewy24"); o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_START" }); let E = await L(n), I = t.p24Bank, { paymentMethod: T, error: f } = await e.createPaymentMethod({ type: "p24", p24: { bank: I }, billing_details: { address: { line1: a, line2: l, city: u, state: d, postal_code: _, country: c }, name: s, email: r } }); if (null != f) throw M(f); if (null == T) throw M("paymentMethod not available with successful stripe call"); return D(h.PaymentGateways.STRIPE, T.id, n, { billingAddressToken: E, analyticsLocation: i, bank: I }) } async function G(e, t, n) { if (null == e) throw M("Stripe not loaded"); o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_START" }); let i = await L(t), { email: r, name: s, line1: a, line2: l, city: u, state: d, postalCode: _, country: c } = t, { paymentMethod: E, error: I } = await e.createPaymentMethod({ type: "sofort", sofort: { country: c }, billing_details: { address: { line1: a, line2: l, city: u, state: d, postal_code: _, country: c }, name: s, email: r } }); if (null != I) throw M(I); if (null == E) throw M("paymentMethod not available with successful stripe call"); return D(h.PaymentGateways.STRIPE, E.id, t, { billingAddressToken: i, analyticsLocation: n }) } async function w(e, t, n, i) { if (null == e || null == t) throw M("Stripe or token not loaded"); o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_START" }); let r = null; try { r = await g() } catch (e) { throw M(e) } let { name: a, line1: l, line2: u, city: d, state: _, postalCode: c, country: E } = n, I = await L(n), { setupIntent: T, error: f } = await e.confirmCardSetup(r, { payment_method: { card: { token: t }, billing_details: { address: { line1: l, line2: u, city: d, state: _, postal_code: c, country: E }, name: a } } }); if (null != f) throw M(f); if ((null == T ? void 0 : T.payment_method) == null) throw M("setupIntent.payment_method not available with successful stripe call"); return s()("string" == typeof T.payment_method, "setupIntent.payment_method expanded not supported"), D(h.PaymentGateways.STRIPE, T.payment_method, n, { billingAddressToken: I, analyticsLocation: i }) } function k(e, t, n) { let { token: i, billingAddressInfo: r } = S.parseStripePaymentMethod(e); return D(h.PaymentGateways.STRIPE, i, null != t ? t : r, { analyticsLocation: n }) } function B(e, t, n) { return D(h.PaymentGateways.BRAINTREE, e, t, { analyticsLocation: n }) } async function V(e, t, n, i) { if (null == e) throw M("Stripe not loaded"); let r = await L(t), { name: a, line1: o, line2: l, city: u, state: d, postalCode: _, country: c } = t, E = m.STRIPE_PAYMENT_SOURCES.get(n); s()(null != E, "unsupported payment method type"); let { paymentMethod: I, error: T } = await e.createPaymentMethod({ type: E, billing_details: { address: { line1: o, line2: l, city: u, state: d, postal_code: _, country: c }, name: a } }); if (null != T) throw M(T); if (null == I) throw M("stripePaymentMethod not available with successful stripe call"); return D(h.PaymentGateways.STRIPE, I.id, t, { billingAddressToken: r, analyticsLocation: i }) } async function x(e, t, n) { let i = await L(e), r = { type: m.ADYEN_PAYMENT_SOURCES.get(t) }; return D(h.PaymentGateways.ADYEN, JSON.stringify(r), e, { billingAddressToken: i, analyticsLocation: n }) } async function F(e, t, n, i) { var r; let s = await L(e), d = { type: m.ADYEN_PAYMENT_SOURCES.get(t), ...null !== (r = null == i ? void 0 : i.paymentMethod) && void 0 !== r ? r : {} }, _ = await em(t), c = (0, a.getAPIBaseURL)() + h.Endpoints.BILLING_POPUP_BRIDGE_CALLBACK_REDIRECT_PREFIX(t, null != _ ? _ : "", "success"); try { return { paymentSource: await D(h.PaymentGateways.ADYEN, JSON.stringify(d), e, { billingAddressToken: s, analyticsLocation: n, returnUrl: c }), redirectConfirmation: !1 } } catch (t) { if (t.code !== u.ErrorCodes.CONFIRMATION_REQUIRED) throw o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_CREATE_FAIL", error: new l.BillingError("Unable to create payment source token: code: ".concat(null == t ? void 0 : t.code, " message: ").concat(null == t ? void 0 : t.message), l.BillingError.ErrorCodes.UNKNOWN) }), t; let e = t.fields.adyen_redirect_url; if (null == e) throw M("redirect url cannot be null on a redirect for adyen."); return er(e), { redirectConfirmation: !0 } } } async function H(e) { if (h.VAULTABLE_PAYMENT_SOURCES.has(e.type)) return null; let t = await S.getStripe(); if (null == t) throw new l.BillingError("Stripe not loaded", l.BillingError.ErrorCodes.UNKNOWN); let { email: n, name: i, line1: r, line2: a, city: o, state: u, postalCode: d, country: _ } = e.billingAddress, c = { billing_details: { address: { line1: r, line2: a, city: o, state: u, postal_code: d, country: _ }, name: i } }; switch (e.type) { case m.PaymentSourceTypes.GIROPAY: c.type = "giropay"; break; case m.PaymentSourceTypes.SOFORT: c.type = "sofort", c.sofort = { country: null != _ ? _ : "" }, c.billing_details.email = n; break; case m.PaymentSourceTypes.BANCONTACT: c.type = "bancontact"; break; case m.PaymentSourceTypes.IDEAL: if (null == e.bank) throw new l.BillingError("iDEAL missing bank information", l.BillingError.ErrorCodes.UNKNOWN_PAYMENT_SOURCE); c.type = "ideal", c.ideal = { bank: e.bank }; break; case m.PaymentSourceTypes.PRZELEWY24: if (null == e.bank) throw new l.BillingError("p24 missing bank information", l.BillingError.ErrorCodes.UNKNOWN_PAYMENT_SOURCE); c.type = "p24", c.p24 = { bank: e.bank }, c.billing_details.email = e.email; break; case m.PaymentSourceTypes.EPS: if (null == e.bank) throw new l.BillingError("EPS missing bank information", l.BillingError.ErrorCodes.UNKNOWN_PAYMENT_SOURCE); c.type = "eps", c.eps = { bank: e.bank } } s()(null != c.type, "unsupported payment method type"); let { paymentMethod: E, error: I } = await t.createPaymentMethod(c); if (null != I || null == E) throw new l.BillingError("Unable to create payment source token: code: ".concat(null == I ? void 0 : I.code, " message: ").concat(null == I ? void 0 : I.message), l.BillingError.ErrorCodes.UNKNOWN); return E.id } function Y(e) { return h.VAULTABLE_PAYMENT_SOURCES.has(e.type) ? null : m.ADYEN_PAYMENT_SOURCES.has(e.type) ? v(e) : H(e) } async function j() { try { let e = a.HTTP.get({ url: h.Endpoints.BILLING_PAYMENT_SOURCES, oldFormErrors: !0 }); o.default.wait(() => o.default.dispatch({ type: "BILLING_PAYMENT_SOURCES_FETCH_START", request: e })); let t = await e; return o.default.dispatch({ type: "BILLING_PAYMENT_SOURCES_FETCH_SUCCESS", paymentSources: t.body }), t } catch (e) { throw o.default.dispatch({ type: "BILLING_PAYMENT_SOURCES_FETCH_FAIL" }), e } } async function W(e) { let t = await a.HTTP.get({ url: h.Endpoints.BILLING_PAYMENT(e) }); return o.default.dispatch({ type: "BILLING_PAYMENT_FETCH_SUCCESS", payment: t.body }), t } async function K() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 10, t = arguments.length > 1 ? arguments[1] : void 0; o.default.dispatch({ type: "BILLING_PAYMENTS_FETCH_START" }); try { let n = await a.HTTP.get({ url: h.Endpoints.BILLING_PAYMENTS, query: { limit: e, before: t }, oldFormErrors: !0 }); return o.default.dispatch({ type: "BILLING_PAYMENTS_FETCH_SUCCESS", payments: n.body }), n } catch (e) { throw o.default.dispatch({ type: "BILLING_PAYMENTS_FETCH_FAIL" }), e } } async function z() { o.default.wait(() => { o.default.dispatch({ type: "BILLING_SUBSCRIPTION_FETCH_START" }) }); try { let e = await a.HTTP.get({ url: h.Endpoints.BILLING_SUBSCRIPTIONS, oldFormErrors: !0 }); if (null == e.body) throw new l.BillingError("response body is null, response: ".concat(JSON.stringify(e)), e.status); return o.default.dispatch({ type: "BILLING_SUBSCRIPTION_FETCH_SUCCESS", subscriptions: e.body }), e } catch (e) { throw o.default.dispatch({ type: "BILLING_SUBSCRIPTION_FETCH_FAIL" }), e } } async function Z() { o.default.wait(() => { o.default.dispatch({ type: "BILLING_PERKS_RELEVANCE_FETCH_START" }) }); try { let e = await a.HTTP.get(h.Endpoints.BILLING_PERKS_RELEVANCE); o.default.dispatch({ type: "BILLING_PERKS_RELEVANCE_FETCH_SUCCESS", res: e.body }) } catch (e) { o.default.dispatch({ type: "BILLING_PERKS_RELEVANCE_FETCH_FAIL" }) } } async function X() { try { let e = await a.HTTP.get(h.Endpoints.BILLING_NITRO_AFFINITY); o.default.dispatch({ type: "BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED", res: e.body.map(e => new _.default(e)) }) } finally { o.default.dispatch({ type: "BILLING_NITRO_AFFINITY_FETCHED" }) } } async function Q() { o.default.wait(() => { o.default.dispatch({ type: "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_START" }) }); try { let e = await a.HTTP.get({ url: h.Endpoints.BILLING_SUBSCRIPTIONS, query: { include_inactive: !0, limit: 2, exclude_unpaid_statuses: !0, subscription_type: m.SubscriptionTypes.PREMIUM }, oldFormErrors: !0 }); return e.ok ? (o.default.dispatch({ type: "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS", subscription: e.body.length > 0 ? e.body[0] : null }), o.default.dispatch({ type: "BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS", subscription: e.body.length > 1 ? e.body[1] : null })) : o.default.dispatch({ type: "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_FAIL" }), e } catch (e) { o.default.dispatch({ type: "BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_FAIL" }) } } async function q(e) { let { items: t, paymentSource: n, trialId: i, code: r, currency: s, metadata: d, referralCode: _, loadId: c } = e; o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_START" }), t = (0, T.coerceExistingItemsToNewItemInterval)(t); let E = null; if (null != n && m.ADYEN_PAYMENT_SOURCES.has(n.type)) { let e = await em(n.type); E = (0, a.getAPIBaseURL)() + h.Endpoints.BILLING_POPUP_BRIDGE_CALLBACK_REDIRECT_PREFIX(n.type, null != e ? e : "", "success") } try { let e = await a.HTTP.post({ url: h.Endpoints.BILLING_SUBSCRIPTIONS, body: { items: t.map(e => { let { planId: t, quantity: n } = e; return { plan_id: t, quantity: n } }), payment_source_id: null != n ? n.id : null, payment_source_token: null != n ? await Y(n) : null, trial_id: i, return_url: E, code: r, currency: null != n ? s : m.CurrencyCodes.USD, metadata: d, gateway_checkout_context: await (0, I.createGatewayCheckoutContext)(n), purchase_token: (0, f.getPurchaseToken)(), referral_code: _, load_id: c }, oldFormErrors: !0 }); return o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_SUCCESS", subscription: e.body }), { subscription: e.body, redirectConfirmation: !1 } } catch (t) { let e = t instanceof l.BillingError ? t : new l.BillingError(t); if (e.code !== u.ErrorCodes.CONFIRMATION_REQUIRED) throw o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_FAIL", error: e }), e; if (!t.body.payment_id) throw M("payment id cannot be null on redirected confirmations."); return $(t.body, n) } } async function J(e, t, n, i) { let r = null; if (null != n && m.PREPAID_PAYMENT_SOURCES.has(n.type)) { let e = await em(n.type); r = (0, a.getAPIBaseURL)() + h.Endpoints.BILLING_POPUP_BRIDGE_CALLBACK_REDIRECT_PREFIX(n.type, null != e ? e : "", "success") } try { let s = await a.HTTP.post({ url: h.Endpoints.BILLING_INVOICE_MANUAL_PAYMENT(e.id, t), body: { payment_source_id: null != n ? n.id : null, payment_source_token: null != n ? await Y(n) : null, return_url: r, currency: i }, oldFormErrors: !0 }); return o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_SUCCESS", subscription: s.body }), { subscription: s.body, redirectConfirmation: h.REDIRECTED_PAYMENT_SOURCES.has(n.type) } } catch (t) { let e = t instanceof l.BillingError ? t : new l.BillingError(t); if (e.code !== u.ErrorCodes.CONFIRMATION_REQUIRED) throw o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_FAIL", error: e }), e; if (!t.body.payment_id) throw M("payment id cannot be null on redirected confirmations."); return $(t.body, n) } } function $(e, t) { return null != t && m.ADYEN_PAYMENT_SOURCES.has(t.type) ? ee(e.adyen_redirect_url, t) : et(e.payment_id, t) } async function ee(e, t) { if (null == e) throw M("redirect url cannot be null on a redirect for adyen."); if (null == t) throw M("Payment source cannot be null on a redirect."); return h.REDIRECTED_PAYMENT_SOURCES.has(t.type) ? (er(e), { redirectConfirmation: !0, redirectURL: e }) : { redirectConfirmation: !1, redirectURL: e } } async function et(e, t) { let n = await S.getStripe(); if (null == t) throw M("Payment source cannot be null on a redirect."); let { clientSecret: i, paymentMethodId: r } = await R(e); if (null == n) throw M("Stripe cannot be null on a redirect."); if (h.REDIRECTED_PAYMENT_SOURCES.has(t.type)) { let e = await em(t.type); return er(await ea({ stripe: n, paymentSource: t, clientSecret: i, state: e })), { redirectConfirmation: !0 } } return await es({ stripe: n, clientSecret: i, paymentMethodId: r, paymentSource: t }), { redirectConfirmation: !1 } } async function en(e) { var t; let n = await W(e); if ((null == n ? void 0 : n.body) == null) throw M("could not fetch payment"); let i = d.default.createFromServer(n.body.payment_source); if (!h.REDIRECTED_PAYMENT_SOURCES.has(i.type)) throw M("unsupported redirect payment source"); if ((null == n ? void 0 : null === (t = n.body) || void 0 === t ? void 0 : t.status) === m.PaymentStatusTypes.FAILED) throw M("payment failed"); return i.paymentGateway !== h.PaymentGateways.STRIPE || ei(e) } async function ei(e) { let t = await S.getStripe(); if (null == t) throw M("Stripe has not loaded."); if (null == e) throw M("payment intent id cannot be null."); let n = await C(e), { paymentIntent: i, error: r } = await t.retrievePaymentIntent(n); if (null != r) throw M(r); if (null == i) throw M("paymentIntent not available with successful stripe call"); if (null != i.last_payment_error) throw M("unable to retrieve payment intent ".concat(i.last_payment_error)); return !0 } function er(e) { window.open(e) } async function es(e) { let t, { stripe: n, paymentSource: i, paymentMethodId: r, clientSecret: s } = e, a = {}; if (i.type === m.PaymentSourceTypes.SEPA_DEBIT) { if (null == r) throw M("On a sepa payment payment method id cannot be null"); a.payment_method = r, t = n.confirmSepaDebitPayment } else throw M("Unsupported redirected payment source type."); let { paymentIntent: o, error: l } = await t(s, a); if (null != l) throw M(l); if (null == o) throw M("paymentIntent not available with successful stripe call") } async function ea(e) { var t, n; let i, { stripe: r, paymentSource: s, clientSecret: o, state: l } = e, u = {}; switch (s.type) { case m.PaymentSourceTypes.GIROPAY: u = { billing_details: { name: s.billingAddress.name } }, i = r.confirmGiropayPayment; break; case m.PaymentSourceTypes.BANCONTACT: u = { billing_details: { name: s.billingAddress.name, email: s.email } }, i = r.confirmBancontactPayment; break; case m.PaymentSourceTypes.SOFORT: u = { sofort: { country: s.billingAddress.country }, billing_details: { name: s.billingAddress.name, email: s.email } }, i = r.confirmSofortPayment; break; case m.PaymentSourceTypes.PRZELEWY24: if (null == s.bank) throw M("PaymentSource (".concat(s.id, ") missing bank info for p24.")); u = { p24: { bank: s.bank }, billing_details: { name: s.billingAddress.name, email: s.email } }, i = r.confirmP24Payment; break; case m.PaymentSourceTypes.EPS: if (null == s.bank) throw M("PaymentSource (".concat(s.id, ") missing bank info for EPS.")); u = { eps: { bank: s.bank }, billing_details: { name: s.billingAddress.name } }, i = r.confirmEpsPayment; break; case m.PaymentSourceTypes.IDEAL: if (null == s.bank) throw M("PaymentSource (".concat(s.id, ") missing bank info for iDEAL.")); u = { ideal: { bank: s.bank }, billing_details: { name: s.billingAddress.name } }, i = r.confirmIdealPayment; break; default: throw M("Unsupported redirected payment source type.") } let { paymentIntent: d, error: _ } = await i(o, { payment_method: u, return_url: (0, a.getAPIBaseURL)() + h.Endpoints.BILLING_POPUP_BRIDGE_CALLBACK_REDIRECT_PREFIX(s.type, null != l ? l : "", "success") }, { handleActions: !1 }); if (null != _) throw M(_); if (null == d) throw M("paymentIntent not available with successful api call"); if ((null === (n = d.next_action) || void 0 === n ? void 0 : null === (t = n.redirect_to_url) || void 0 === t ? void 0 : t.url) == null) throw M("confirm payment did not return a redirect url"); return d.next_action.redirect_to_url.url } async function eo(e, t, n) { o.default.dispatch({ type: "BILLING_SUBSCRIPTION_CANCEL_START" }); try { let i = await a.HTTP.del({ url: h.Endpoints.BILLING_SUBSCRIPTION(e), query: { location: n, location_stack: t }, oldFormErrors: !0 }); return o.default.dispatch({ type: "BILLING_SUBSCRIPTION_CANCEL_SUCCESS" }), i } catch (t) { let e = new l.BillingError(t); throw o.default.dispatch({ type: "BILLING_SUBSCRIPTION_CANCEL_FAIL", error: e }), e } } function el(e, t) { return eu(e, { items: e.items }, t) } async function eu(e, t, n, i, r) { if (null != t.paymentSource && null == t.currency) throw Error("Currency must be specified with payment source"); o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_START" }); try { var s; let l = { status: t.status, payment_source_id: null === (s = t.paymentSource) || void 0 === s ? void 0 : s.id, payment_source_token: null != t.paymentSource ? await Y(t.paymentSource) : null, currency: t.currency, gateway_checkout_context: await (0, I.createGatewayCheckoutContext)(t.paymentSource), load_id: r, pause_duration: t.pauseDuration }; if (null != t.paymentSource && m.ADYEN_PAYMENT_SOURCES.has(t.paymentSource.type)) { let e = await em(t.paymentSource.type); l.return_url = (0, a.getAPIBaseURL)() + h.Endpoints.BILLING_POPUP_BRIDGE_CALLBACK_REDIRECT_PREFIX(t.paymentSource.type, null != e ? e : "", "success") } null != t.items && (l.items = (0, T.coerceExistingItemsToNewItemInterval)(t.items).map(e => { let { planId: t, ...n } = e; return { ...n, plan_id: t } })); let u = await a.HTTP.patch({ url: h.Endpoints.BILLING_SUBSCRIPTION(e.id), query: { location: i, location_stack: n }, body: l, oldFormErrors: !0 }); return o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_SUCCESS", subscription: u.body }), { subscription: u.body, redirectConfirmation: !1 } } catch (n) { let e = n instanceof l.BillingError ? n : new l.BillingError(n); if (e.code !== u.ErrorCodes.CONFIRMATION_REQUIRED) throw o.default.dispatch({ type: "BILLING_SUBSCRIPTION_UPDATE_FAIL", error: e }), e; if (!n.body.payment_id) throw M("payment id cannot be null on redirected confirmations."); return $(n.body, t.paymentSource) } } function ed(e, t, n, i, r) { return eu(e, { status: h.SubscriptionStatusTypes.ACTIVE, paymentSource: n, currency: i }, t, r) } function e_(e, t, n, i) { let r = (0, T.getItemsWithUpsertedPremiumPlanId)(e, t); return eu(e, { status: h.SubscriptionStatusTypes.ACTIVE, items: r }, n, i) } function ec(e, t, n, i) { return eu(e, { currency: t }, n, i) } function eE(e, t, n, i, r) { return eu(e, { paymentSource: t, currency: n }, i, r) } function eI(e, t, n, i) { return eu(e, { pauseDuration: t }, n, i) } function eT() { o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR" }) } function ef() { o.default.dispatch({ type: "BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR" }) } function eS() { o.default.dispatch({ type: "PAYMENT_AUTHENTICATION_CLEAR_ERROR" }) } async function eh(e) { await a.HTTP.post({ url: h.Endpoints.BILLING_PAYMENTS_VOID(e), oldFormErrors: !0 }) } async function eA(e, t) { await a.HTTP.post({ url: h.Endpoints.BILLING_PAYMENTS_REFUND(e), body: { reason: t } }) } async function em(e) { let { body: { state: t } } = await a.HTTP.post({ url: h.Endpoints.BILLING_POPUP_BRIDGE(e), oldFormErrors: !0 }); return o.default.dispatch({ type: "BILLING_POPUP_BRIDGE_STATE_UPDATE", state: t, paymentSourceType: e }), t } function eN(e) { let { paymentSourceType: t, state: n, path: i, query: r, insecure: s } = e; return o.default.dispatch({ type: "BILLING_POPUP_BRIDGE_CALLBACK_START", paymentSourceType: t }), a.HTTP.post({ url: h.Endpoints.BILLING_POPUP_BRIDGE_CALLBACK(t), body: { state: n, path: i, query: r, insecure: s }, oldFormErrors: !0 }).then(e => (o.default.dispatch({ type: "BILLING_POPUP_BRIDGE_CALLBACK_END", paymentSourceType: t }), e)) } async function ep() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (!e && null != c.default.ipCountryCodeRequest) return c.default.ipCountryCodeRequest; try { let e = a.HTTP.get({ url: h.Endpoints.BILLING_COUNTRY_CODE }); o.default.wait(() => o.default.dispatch({ type: "BILLING_IP_COUNTRY_CODE_FETCH_START", request: e })); let t = await e, n = t.body.country_code; return o.default.dispatch({ type: "BILLING_SET_IP_COUNTRY_CODE", countryCode: n }), t } catch (e) { return o.default.dispatch({ type: "BILLING_IP_COUNTRY_CODE_FAILURE" }), e } } async function eO() { try { let e = await a.HTTP.get({ url: h.Endpoints.BILLING_LOCALIZED_PROMO }); if (null != e.body.localized_pricing_promo) { let t = e.body.localized_pricing_promo; o.default.dispatch({ type: "BILLING_SET_LOCALIZED_PRICING_PROMO", localizedPricingPromo: t }) } return e } catch (e) { return o.default.dispatch({ type: "BILLING_LOCALIZED_PRICING_PROMO_FAILURE" }), e } } function eC() { o.default.dispatch({ type: "RESET_PAYMENT_ID" }) } function eR() { o.default.dispatch({ type: "BILLING_SUBSCRIPTION_RESET" }) } function eg(e) { o.default.dispatch({ type: "USER_PAYMENT_BROWSER_CHECKOUT_STARTED", loadId: e }) } }, 179360: function(e, t, n) { "use strict"; n.r(t), n.d(t, { applyToGuild: function() { return E }, cancelGuildBoostSlot: function() { return T }, fetchAppliedGuildBoostsForGuild: function() { return d }, fetchAppliedGuildBoostsForUser: function() { return _ }, fetchGuildBoostSlots: function() { return c }, unapplyFromGuild: function() { return I }, uncancelGuildBoostSlot: function() { return f } }); var i = n("544891"), r = n("570140"), s = n("881052"), a = n("932015"), o = n("209747"), l = n("78839"), u = n("981631"); async function d(e) { let t = (await i.HTTP.get({ url: u.Endpoints.APPLIED_GUILD_BOOSTS_FOR_GUILD(e), oldFormErrors: !0 })).body.map(e => a.default.createFromServer(e)); return r.default.dispatch({ type: "GUILD_APPLIED_BOOSTS_FETCH_SUCCESS", guildId: e, appliedBoosts: t }), t } async function _() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], t = (await i.HTTP.get({ url: u.Endpoints.USER_APPLIED_GUILD_BOOSTS, oldFormErrors: !0, query: { paused: e } })).body.map(e => a.default.createFromServer(e)); return r.default.dispatch({ type: "USER_APPLIED_BOOSTS_FETCH_SUCCESS", appliedGuildBoosts: t }), t } async function c() { let e = (await i.HTTP.get({ url: u.Endpoints.USER_GUILD_BOOST_SLOTS, oldFormErrors: !0 })).body.map(e => o.default.createFromServer(e, l.default.getSubscriptionById(e.subscription_id))); return r.default.dispatch({ type: "GUILD_BOOST_SLOTS_FETCH_SUCCESS", guildBoostSlots: e }), e } async function E(e, t) { r.default.dispatch({ type: "GUILD_APPLY_BOOST_START" }); try { let n = await i.HTTP.put({ url: u.Endpoints.APPLIED_GUILD_BOOSTS_FOR_GUILD(e), body: { user_premium_guild_subscription_slot_ids: t }, oldFormErrors: !0 }), s = Array.isArray(n.body) ? n.body.map(a.default.createFromServer) : [a.default.createFromServer(n.body)]; return r.default.dispatch({ type: "GUILD_APPLY_BOOST_SUCCESS", appliedGuildBoost: s }), c(), s } catch (t) { let e = new s.AppliedGuildBoostError(t); throw r.default.dispatch({ type: "GUILD_APPLY_BOOST_FAIL", error: e }), e } } async function I(e, t) { r.default.dispatch({ type: "GUILD_UNAPPLY_BOOST_START" }); try { await i.HTTP.del({ url: u.Endpoints.APPLIED_GUILD_BOOST(e, t), oldFormErrors: !0 }), c() } catch (t) { let e = new s.AppliedGuildBoostError(t); throw r.default.dispatch({ type: "GUILD_UNAPPLY_BOOST_FAIL", error: e }), e } r.default.dispatch({ type: "GUILD_UNAPPLY_BOOST_SUCCESS", boostId: t }) } async function T(e) { let t = await i.HTTP.post({ url: u.Endpoints.USER_GUILD_BOOST_SLOT_CANCEL(e), oldFormErrors: !0 }), n = o.default.createFromServer(t.body, l.default.getSubscriptionById(t.body.subscription_id)); return r.default.dispatch({ type: "GUILD_BOOST_SLOT_UPDATE_SUCCESS", guildBoostSlot: n }), n } async function f(e) { let t = await i.HTTP.post({ url: u.Endpoints.USER_GUILD_BOOST_SLOT_UNCANCEL(e), oldFormErrors: !0 }), n = o.default.createFromServer(t.body, l.default.getSubscriptionById(t.body.subscription_id)); return r.default.dispatch({ type: "GUILD_BOOST_SLOT_UPDATE_SUCCESS", guildBoostSlot: n }), n } }, 899742: function(e, t, n) { "use strict"; n.r(t), n.d(t, { handoffBegin: function() { return r }, handoffEnd: function() { return s }, handoffFromApp: function() { return a }, handoffSetUser: function() { return l }, handoffUnavailable: function() { return o } }); var i = n("570140"); function r() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1e4; i.default.dispatch({ type: "BROWSER_HANDOFF_BEGIN", timeout: e }) } function s(e, t) { i.default.dispatch({ type: "BROWSER_HANDOFF_END", handoffToken: e, fingerprint: t }) } function a(e) { let { handoffKey: t, handoffToken: n, handoffSource: r, timeout: s = 1e4 } = e; i.default.dispatch({ type: "BROWSER_HANDOFF_FROM_APP", handoffKey: t, handoffToken: n, handoffSource: r, timeout: s }) } function o() { i.default.dispatch({ type: "BROWSER_HANDOFF_UNAVAILABLE" }) } function l(e) { i.default.dispatch({ type: "BROWSER_HANDOFF_SET_USER", user: e }) } }, 26151: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("523746"), a = n("699516"), o = n("594174"), l = n("626135"), u = n("668781"), d = n("194359"), _ = n("287734"), c = n("981631"), E = n("689938"); t.default = { call(e, t, n, r, s) { let I = n => { _.default.selectVoiceChannel(e, t), n && this.ring(e), null == s || s(e) }; if (null != r) { if (a.default.isBlocked(r)) return; let t = o.default.getUser(r); i.HTTP.get({ url: c.Endpoints.CALL(e), oldFormErrors: !0 }).then(e => { I(n && e.body.ringable) }, () => { l.default.track(c.AnalyticEvents.OPEN_POPOUT, { type: "Not Friend", source: "Call" }), u.default.show({ title: E.default.Messages.START_CALL, body: E.default.Messages.CALL_INVITE_NOT_FRIENDS.format({ username: null != t ? t.username : "" }), confirmText: E.default.Messages.ADD_FRIEND_BUTTON, cancelText: E.default.Messages.OKAY, onConfirm() { d.default.addRelationship({ userId: r, context: { location: "Call" } }) } }) }) } else I(n) }, ring(e, t) { let n = s.default.getCall(e); if (null != n && null != n.messageId && !s.default.isCallUnavailable(e)) { i.HTTP.post({ url: c.Endpoints.CALL_RING(e), body: { recipients: t }, oldFormErrors: !0 }); return } r.default.dispatch({ type: "CALL_ENQUEUE_RING", channelId: e, recipients: t }) }, stopRinging: (e, t) => i.HTTP.post({ url: c.Endpoints.CALL_STOP_RINGING(e), body: { recipients: t }, oldFormErrors: !0 }) } }, 661111: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("802098"), a = n("695346"), o = n("981631"), l = n("596401"); function u() { let e = new Date().getMinutes(); return "x=".concat(Math.floor(e / 5)) } t.default = { lockChangeLog(e) { r.default.dispatch({ type: "CHANGE_LOG_LOCK", key: e }) }, unlockChangeLog(e) { r.default.dispatch({ type: "CHANGE_LOG_UNLOCK", key: e }) }, markChangelogAsSeen(e, t) { r.default.dispatch({ type: "CHANGE_LOG_MARK_SEEN", changelogId: e, changelogDate: t }), a.LastReceivedChangelogId.updateSetting(e) }, setChangelogOverride(e) { r.default.dispatch({ type: "CHANGE_LOG_SET_OVERRIDE", id: e }), null != e && this.sendChangelogMessage(e) }, sendChangelogMessage(e) { i.HTTP.post({ url: o.Endpoints.CHANGELOG_MESSAGES, body: { changelog_id: e } }) }, fetchChangelogConfig() { let e = l.ChangelogPlatforms.DESKTOP; return i.HTTP.get({ url: "https://cdn.discordapp.com/changelogs/config_".concat(e, ".json?").concat(u()) }) }, async fetchChangelog(e, t) { if (arguments.length > 2 && void 0 !== arguments[2] && arguments[2], null != s.default.getChangelog(e, t)) return null; let n = l.ChangelogPlatforms.DESKTOP; try { let s = await i.HTTP.get({ url: "https://cdn.discordapp.com/changelogs/".concat(n, "/").concat(e, "/").concat(t, ".json?").concat(u()) }); return r.default.dispatch({ type: "CHANGE_LOG_FETCH_SUCCESS", id: e, changelog: s.body }), s.body } catch { if (r.default.dispatch({ type: "CHANGE_LOG_FETCH_FAILED", id: e, locale: t }), "en-US" !== t) return await this.fetchChangelog(e, "en-US"); return null } } } }, 969812: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("904245"), s = n("981631"), a = n("689938"); t.default = { changeNickname: (e, t, n, o) => i.HTTP.patch({ url: s.Endpoints.GUILD_MEMBER_NICK(e, n), body: { nick: o }, oldFormErrors: !0 }).then(e => { o = e.body.nick, r.default.sendBotMessage(t, null != o && "" !== o ? a.default.Messages.COMMAND_NICK_SUCCESS.plainFormat({ nick: o }) : a.default.Messages.COMMAND_NICK_RESET) }, e => { 403 === e.status ? r.default.sendBotMessage(t, a.default.Messages.COMMAND_NICK_FAILURE_PERMISSION.plainFormat()) : r.default.sendBotMessage(t, a.default.Messages.COMMAND_NICK_FAILURE) }) } }, 493683: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("544891"), r = n("780384"), s = n("570140"), a = n("802098"), o = n("702321"), l = n("408987"), u = n("57132"), d = n("895886"), _ = n("703656"), c = n("131704"), E = n("592125"), I = n("306680"), T = n("626135"), f = n("73346"), S = n("26151"), h = n("287734"), A = n("981631"), m = n("689938"); t.default = { async openPrivateChannel(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = arguments.length > 3 ? arguments[3] : void 0, s = arguments.length > 4 ? arguments[4] : void 0, a = this._getRecipients(e), o = e => { t && S.default.call(e.id, n, !0, e.isDM() ? e.getRecipientId() : null) }; if (1 === a.length) { let [e] = a, t = this._openCachedDMChannel(e, s); if (null != t) return o(t), Promise.resolve(t.id) } try { let e = await i.HTTP.post({ url: A.Endpoints.USER_CHANNELS, body: { recipients: a }, context: { location: r }, oldFormErrors: !0 }); null == s || s(); let t = this._openPrivateChannel(e.body); return o(t), e.body.id } catch (e) { var l; throw (null == e ? void 0 : null === (l = e.body) || void 0 === l ? void 0 : l.code) === A.AbortCodes.QUARANTINED && (0, d.default)(), e } }, async createBroadcastPrivateChannel() { try { let e = await i.HTTP.post({ url: A.Endpoints.BROADCAST_PRIVATE_CHANNEL }), t = (0, c.createChannelRecordFromServer)(e.body); return S.default.call(t.id, !1, !1, null), e.body.id } catch (t) { var e; throw (null == t ? void 0 : null === (e = t.body) || void 0 === e ? void 0 : e.code) === A.AbortCodes.QUARANTINED && (0, d.default)(), t } }, _openCachedDMChannel(e, t) { let n = E.default.getDMFromUserId(e), i = null != n ? E.default.getChannel(n) : null; return null != i ? (null == t || t(), null != (0, u.getRootNavigationRefIfInExperiment)() ? (0, _.transitionTo)(A.Routes.CHANNEL(A.ME, i.id), { navigationReplace: !0 }) : h.default.selectPrivateChannel(i.id), i) : null }, async ensurePrivateChannel(e) { let t = this._getRecipients(e), n = await i.HTTP.post({ url: A.Endpoints.USER_CHANNELS, body: { recipients: t }, oldFormErrors: !0 }), r = (0, c.createChannelRecordFromServer)(n.body); return s.default.dispatch({ type: "CHANNEL_CREATE", channel: r }), r.id }, async getOrEnsurePrivateChannel(e) { let t = E.default.getDMFromUserId(e); return null != t ? t : await this.ensurePrivateChannel(e) }, async getDMChannel(e) { let t = await i.HTTP.get(A.Endpoints.DM_CHANNEL(e)), n = (0, c.createChannelRecordFromServer)(t.body); return s.default.dispatch({ type: "CHANNEL_CREATE", channel: n }), n.id }, _getRecipients: e => null != e ? Array.isArray(e) ? e : [e] : [], _openPrivateChannel(e) { let t = (0, c.createChannelRecordFromServer)(e); return s.default.dispatch({ type: "CHANNEL_CREATE", channel: t }), null != (0, u.getRootNavigationRefIfInExperiment)() ? (0, _.transitionTo)(A.Routes.CHANNEL(A.ME, t.id), { navigationReplace: !0 }) : h.default.selectPrivateChannel(t.id), t }, closePrivateChannel(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return (0, o.default)(e) && T.default.track(A.AnalyticEvents.CHANGE_LOG_DM_REMOVED, { last_changelog_id: a.default.latestChangelogId(), unread_count: I.default.getUnreadCount(e) }), s.default.dispatch({ type: "CHANNEL_DELETE", channel: { id: e, guild_id: void 0, parent_id: void 0 }, silent: n }), t && !__OVERLAY__ && (0, _.transitionTo)(A.Routes.FRIENDS), i.HTTP.del({ url: A.Endpoints.CHANNEL(e), query: { silent: n }, oldFormErrors: !0 }).then(() => { r.AccessibilityAnnouncer.announce(m.default.Messages.A11Y_ANNOUNCEMENT_DM_CLOSED) }).catch(() => { r.AccessibilityAnnouncer.announce(m.default.Messages.A11Y_ANNOUNCEMENT_DM_CLOSED_FAILED) }) }, updatePermissionOverwrite: (e, t) => i.HTTP.put({ url: A.Endpoints.CHANNEL_PERMISSIONS_OVERWRITE(e, t.id), body: t, oldFormErrors: !0 }), clearPermissionOverwrite: (e, t) => i.HTTP.del({ url: A.Endpoints.CHANNEL_PERMISSIONS_OVERWRITE(e, t), oldFormErrors: !0 }), addRecipient(e, t, n, s) { return i.HTTP.put({ url: A.Endpoints.CHANNEL_RECIPIENT(e, t), context: { location: n }, oldFormErrors: !0 }).then(t => (r.AccessibilityAnnouncer.announce(m.default.Messages.A11Y_ANNOUNCEMENT_USER_ADDED_TO_GROUP_DM), null == s || s(), 201 === t.status) ? this._openPrivateChannel(t.body).id : e).catch(() => (r.AccessibilityAnnouncer.announce(m.default.Messages.A11Y_ANNOUNCEMENT_USER_ADDED_TO_GROUP_DM_FAILED), e)) }, addRecipients(e, t, n, i) { return this.addRecipient(e, t[0], n, i).then(e => Promise.all(t.slice(1).map(t => this.addRecipient(e, t, n))).then(() => e)) }, removeRecipient: (e, t) => i.HTTP.del({ url: A.Endpoints.CHANNEL_RECIPIENT(e, t), oldFormErrors: !0 }), setDMOwner: (e, t) => i.HTTP.patch({ url: A.Endpoints.CHANNEL(e), body: { owner: t }, oldFormErrors: !0 }), async setName(e, t) { let n = E.default.getChannel(e), r = await i.HTTP.patch({ url: A.Endpoints.CHANNEL(e), body: { name: t }, oldFormErrors: !0 }), s = null == n ? void 0 : n.getGuildId(); return null != s && !(null == n ? void 0 : n.isThread()) && l.default.checkGuildTemplateDirty(s), r }, setIcon(e, t) { let n = E.default.getChannel(e); i.HTTP.patch({ url: A.Endpoints.CHANNEL(e), body: { icon: t }, oldFormErrors: !0 }).then(() => { let e = null == n ? void 0 : n.getGuildId(); null != e && !(null == n ? void 0 : n.isThread()) && l.default.checkGuildTemplateDirty(e) }) }, convertToGuild: e => i.HTTP.post({ url: A.Endpoints.CHANNEL_CONVERT(e), oldFormErrors: !0 }), preload(e, t) { s.default.dispatch({ type: "CHANNEL_PRELOAD", guildId: e === A.ME ? null : e, channelId: t, context: A.CURRENT_APP_CONTEXT }) }, fetchChannelStoreListing(e, t) { let n = null != t ? A.Endpoints.CHANNEL_STORE_LISTING_SKU(e, t) : A.Endpoints.CHANNEL_STORE_LISTING(e); return (0, f.httpGetWithCountryCodeQuery)(n).then(t => { s.default.dispatch({ type: "STORE_LISTING_FETCH_SUCCESS", channelId: e, storeListing: t.body }) }) }, async createTextChannel(e, t, n, r) { let s = { type: A.ChannelTypes.GUILD_TEXT, name: t, permission_overwrites: [] }; null != n && (s.parent_id = n), null != r && (s.topic = r); let a = await i.HTTP.post({ url: A.Endpoints.GUILD_CHANNELS(e), body: s, oldFormErrors: !0 }); return l.default.checkGuildTemplateDirty(e), a } } }, 475179: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"), r = n("367907"), s = n("626135"), a = n("585483"), o = n("981631"); t.default = { rebuildRTCActiveChannels() { i.default.dispatch({ type: "CHANNEL_RTC_ACTIVE_CHANNELS" }) }, selectParticipant(e, t) { i.default.dispatch({ type: "CHANNEL_RTC_SELECT_PARTICIPANT", channelId: e, id: t }) }, updateLayout(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : o.AppContext.APP; s.default.track(o.AnalyticEvents.VIDEO_LAYOUT_TOGGLED, { video_layout: t, ...(0, r.collectVoiceAnalyticsMetadata)(e) }), i.default.dispatch({ type: "CHANNEL_RTC_UPDATE_LAYOUT", channelId: e, layout: t, appContext: n }) }, toggleParticipants(e, t) { i.default.dispatch({ type: "CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN", channelId: e, participantsOpen: t }) }, toggleVoiceParticipantsHidden(e, t) { i.default.dispatch({ type: "CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN", channelId: e, voiceParticipantsHidden: t }) }, updateStageStreamSize(e, t) { i.default.dispatch({ type: "CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE", channelId: e, large: t }) }, updateStageVideoLimitBoostUpsellDismissed(e, t) { i.default.dispatch({ type: "CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED", channelId: e, dismissed: t }) }, updateChatOpen(e, t) { i.default.dispatch({ type: "CHANNEL_RTC_UPDATE_CHAT_OPEN", channelId: e, chatOpen: t }), t ? setTimeout(() => { a.ComponentDispatch.dispatch(o.ComponentActions.FOCUS_CHANNEL_TEXT_AREA, { channelId: e }) }, 0) : a.ComponentDispatch.dispatch(o.ComponentActions.FOCUS_CHAT_BUTTON) } } }, 741361: function(e, t, n) { "use strict"; n.r(t), n.d(t, { init: function() { return u }, saveAndClearPermissionUpdates: function() { return _ }, savePermissionUpdates: function() { return d }, selectPermission: function() { return o }, setAdvancedMode: function() { return l }, updatePermission: function() { return a } }); var i = n("570140"), r = n("156699"), s = n("493683"); async function a(e, t, n, s) { let a = e.getGuildId(); if (null != a && t === a && !await (0, r.checkDefaultChannelThresholdMetAfterChannelPermissionDeny)(e, s, n)) return !1; i.default.dispatch({ type: "CHANNEL_SETTINGS_PERMISSIONS_UPDATE_PERMISSION", id: t, allow: n, deny: s }) } function o(e) { i.default.dispatch({ type: "CHANNEL_SETTINGS_PERMISSIONS_SELECT_PERMISSION", id: e }) } function l(e) { i.default.dispatch({ type: "CHANNEL_SETTINGS_PERMISSIONS_SET_ADVANCED_MODE", advancedMode: e }) } function u() { i.default.dispatch({ type: "CHANNEL_SETTINGS_PERMISSIONS_INIT" }) } function d(e, t, n) { return _(e, t, [], n) } function _(e, t, n, r) { return i.default.dispatch({ type: "CHANNEL_SETTINGS_PERMISSIONS_SUBMITTING" }), new Promise(i => { let r = () => { if (0 === t.length && 0 === n.length) return i(); if (t.length > 0) { let n = t.pop(); if (null == n) return r(); s.default.updatePermissionOverwrite(e, n).then(r, r) } else { let t = n.pop(); if (null == t) return r(); s.default.clearPermissionOverwrite(e, t).then(r, r) } }; r() }).then(() => { i.default.dispatch({ type: "CHANNEL_SETTINGS_PERMISSIONS_SAVE_SUCCESS", silent: r }) }) } }, 457330: function(e, t, n) { "use strict"; n.r(t), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var i = n("990547"), r = n("544891"), s = n("570140"), a = n("275759"), o = n("710845"), l = n("626135"), u = n("573261"), d = n("981631"); let _ = new o.default("ConnectedAccounts"); function c(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return r.HTTP.post({ url: d.Endpoints.CONNECTIONS_CALLBACK(e), body: { ...t, insecure: n, friend_sync: d.FRIEND_SYNC_PLATFORM_TYPES.has(e) }, oldFormErrors: !0 }) } t.default = { fetch: () => r.HTTP.get({ url: d.Endpoints.CONNECTIONS, oldFormErrors: !0 }).then(e => s.default.dispatch({ type: "USER_CONNECTIONS_UPDATE", local: !0, accounts: e.body }), () => s.default.dispatch({ type: "USER_CONNECTIONS_UPDATE", local: !0, accounts: [] })), authorize(e) { let { location: t, twoWayLinkType: n, userCode: i, twoWayLink: s, successRedirect: a } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; l.default.track(d.AnalyticEvents.CONNECTED_ACCOUNT_INITIATED, { platform_type: e, location: t }); let o = d.Endpoints.CONNECTIONS_AUTHORIZE(e), u = new URLSearchParams; return null != i && u.append("two_way_user_code", i), null != a && u.append("success_redirect", a), null != n ? (u.append("two_way_link_type", n), u.append("two_way_link", "true")) : null != s && u.append("two_way_link", String(s)), o = o + "?" + u.toString(), r.HTTP.get({ url: o, oldFormErrors: !0 }) }, callback: c, connect(e, t, n, r, s) { var a; return u.default.put({ url: d.Endpoints.CONNECTION(e, t), body: { name: n, friend_sync: null !== (a = null == s ? void 0 : s.friend_sync) && void 0 !== a ? a : d.FRIEND_SYNC_PLATFORM_TYPES.has(e) }, context: { location: r }, oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.USER_CONNECTIONS_UPDATE, properties: { name: n, friend_sync: d.FRIEND_SYNC_PLATFORM_TYPES.has(e) } } }) }, disconnect: (e, t) => r.HTTP.del({ url: d.Endpoints.CONNECTION(e, t), oldFormErrors: !0 }), refresh: (e, t) => r.HTTP.post({ url: d.Endpoints.CONNECTION_REFRESH(e, t), oldFormErrors: !0 }), setVisibility(e, t, n) { return this.update(e, t, { visibility: 1 === n }) }, setMetadataVisibility(e, t, n) { return this.update(e, t, { metadata_visibility: 1 === n }) }, setFriendSync(e, t, n) { return this.update(e, t, { friend_sync: n }) }, setShowActivity(e, t, n) { return this.update(e, t, { show_activity: n }) }, update: (e, t, n) => u.default.patch({ url: d.Endpoints.CONNECTION(e, t), body: n, oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.USER_CONNECTIONS_UPDATE, properties: { ...n } } }), joinServer(e, t) { s.default.dispatch({ type: "USER_CONNECTIONS_INTEGRATION_JOINING", integrationId: e, joining: !0 }), r.HTTP.post({ url: d.Endpoints.INTEGRATION_JOIN(e), oldFormErrors: !0 }, n => { s.default.dispatch({ type: "USER_CONNECTIONS_INTEGRATION_JOINING", integrationId: e, joining: !1 }), !n.ok && (s.default.dispatch({ type: "USER_CONNECTIONS_INTEGRATION_JOINING_ERROR", integrationId: e, error: n.hasErr ? void 0 : n.body.message }), null == t || t()) }) }, async refreshAccessToken(e, t) { try { let { body: { access_token: n } } = await r.HTTP.get({ url: d.Endpoints.CONNECTION_ACCESS_TOKEN(e, t), oldFormErrors: !0 }); return s.default.dispatch({ type: "USER_CONNECTION_UPDATE", platformType: e, id: t, accessToken: n }), n } catch (n) { throw n.body.code === d.AbortCodes.CONNECTION_REVOKED && s.default.dispatch({ type: "USER_CONNECTION_UPDATE", platformType: e, id: t, revoked: !0 }), n } }, linkDispatchAuthCallback: (e, t) => r.HTTP.post({ url: d.Endpoints.CONNECTIONS_LINK_DISPATCH_AUTH_CALLBACK(e), body: { ...t }, oldFormErrors: !0 }), async completeTwoWayLink(e, t, n, i, r) { if (null == t) { _.error("Two-way link: missing authorize location"); return } let { code: s, error: o, errorDescription: l } = (0, a.getCallbackParamsFromURL)(t); if (null != o) { _.error("Two-way link: missing authorize code", { error: o, errorDescription: l }); return } return await c(e, { code: n, state: i, two_way_link_code: s, token_redirect_uri: r }) } } }, 239091: function(e, t, n) { "use strict"; n.r(t), n.d(t, { closeContextMenu: function() { return u }, openContextMenu: function() { return d }, openContextMenuLazy: function() { return _ } }), n("773603"); var i = n("570140"), r = n("40851"), s = n("358085"), a = n("601993"), o = n("981631"); function l(e) { i.default.dispatch({ type: "CONTEXT_MENU_OPEN", contextMenu: e }) } function u(e) { { let { flushSync: t } = n("699581"); t(() => { i.default.wait(() => { i.default.dispatch({ type: "CONTEXT_MENU_CLOSE" }).finally(e) }) }) } } function d(e, t, n, i) { var u, d, _; if (e.stopPropagation(), null != e.currentTarget.contains && !e.currentTarget.contains(e.target)) return; let c = 0, E = 0; if ("pageX" in e && (c = e.pageX, E = e.pageY), 0 === c && 0 === E) { let t = null === (u = e.target) || void 0 === u ? void 0 : u.getBoundingClientRect(), { left: n = 0, top: i = 0, width: r = 0, height: s = 0 } = null != t ? t : {}; c = n + r / 2, E = i + s / 2 } let I = { render: t, renderLazy: i, target: null !== (d = e.target) && void 0 !== d ? d : e.currentTarget, rect: new DOMRect(c, E, 0, 0), config: { context: __OVERLAY__ ? o.AppContext.OVERLAY : null !== (_ = (0, r.getCurrentlyInteractingAppContext)()) && void 0 !== _ ? _ : o.AppContext.APP, ...n } }; if ((null == n ? void 0 : n.enableSpellCheck) && (0, s.isDesktop)()) { let e = (0, a.addResultListener)(() => { e(), l(I) }) } else e.preventDefault(), l(I) } function _(e, t, n) { d(e, void 0, n, t) } }, 333848: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("990547"), r = n("283693"), s = n("570140"), a = n("408987"), o = n("9156"), l = n("621600"), u = n("573261"), d = n("92114"), _ = n("981631"), c = n("526761"); t.default = { createChannel(e) { let { guildId: t, type: n, name: E, permissionOverwrites: I = [], bitrate: T, userLimit: f, parentId: S, skuId: h, branchId: A } = e; s.default.dispatch({ type: "CREATE_CHANNEL_MODAL_SUBMIT" }); let m = { type: n, name: E, permission_overwrites: I }; if (null != T && T !== _.BITRATE_DEFAULT && (m.bitrate = T), null != f && f > 0 && (m.user_limit = f), null != S && (m.parent_id = S), n === _.ChannelTypes.GUILD_STORE) { if (null == h) throw Error("Unexpected missing SKU"); m.sku_id = h, m.branch_id = A } return u.default.post({ url: _.Endpoints.GUILD_CHANNELS(t), body: m, oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.CHANNEL_CREATE, properties: e => { var t, n; return (0, r.exact)({ is_private: I.length > 0, channel_id: null == e ? void 0 : null === (t = e.body) || void 0 === t ? void 0 : t.id, channel_type: null == e ? void 0 : null === (n = e.body) || void 0 === n ? void 0 : n.type }) } } }).then(e => (o.default.isOptInEnabled(t) && d.default.updateChannelOverrideSettings(t, e.body.id, { flags: c.ChannelNotificationSettingsFlags.OPT_IN_ENABLED }, l.NotificationLabels.OptedIn), a.default.checkGuildTemplateDirty(t), e), e => { throw s.default.dispatch({ type: "CREATE_CHANNEL_MODAL_SUBMIT_FAILURE", errors: e.body }), e }) }, createRoleSubscriptionTemplateChannel: (e, t, n, s) => u.default.post({ url: _.Endpoints.GUILD_CHANNELS(e), body: { name: t, type: n, topic: s }, oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.CHANNEL_CREATE, properties: e => { var t, n; return (0, r.exact)({ is_private: !0, channel_id: null == e ? void 0 : null === (t = e.body) || void 0 === t ? void 0 : t.id, channel_type: null == e ? void 0 : null === (n = e.body) || void 0 === n ? void 0 : n.type }) } } }) } }, 179658: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setDeveloperOptionSettings: function() { return r } }); var i = n("570140"); function r(e) { i.default.dispatch({ type: "DEVELOPER_OPTIONS_UPDATE_SETTINGS", settings: e }) } }, 925549: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { updateChannelDimensions(e, t, n, r, s) { i.default.wait(() => { i.default.dispatch({ type: "UPDATE_CHANNEL_DIMENSIONS", channelId: e, scrollTop: t, scrollHeight: n, offsetHeight: r }), null != s && s() }) }, updateChannelListScroll(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; i.default.dispatch({ type: "UPDATE_CHANNEL_LIST_DIMENSIONS", guildId: e, scrollTop: t, channelIds: n }) }, channelListScrollTo(e, t) { i.default.dispatch({ type: "UPDATE_CHANNEL_LIST_DIMENSIONS", guildId: e, scrollTo: t, channelIds: [] }) }, clearChannelListScrollTo(e) { i.default.dispatch({ type: "UPDATE_CHANNEL_LIST_DIMENSIONS", guildId: e, scrollTo: null, channelIds: [] }) }, clearChannelDimensions(e, t) { this.updateChannelDimensions(e, null, null, null, t) }, updateGuildListScrollTo(e) { i.default.dispatch({ type: "UPDATE_GUILD_LIST_DIMENSIONS", scrollTop: e }) } } }, 51025: function(e, t, n) { "use strict"; n.r(t), n.d(t, { cancel: function() { return g }, completeInstall: function() { return D }, completeRepair: function() { return v }, destroy: function() { return h }, init: function() { return S }, installApplication: function() { return A }, moveUp: function() { return R }, pause: function() { return C }, removeFinished: function() { return L }, repairApplication: function() { return m }, resume: function() { return O }, uninstallApplication: function() { return p }, updateApplication: function() { return N } }), n("411104"); var i = n("544891"), r = n("570140"), s = n("812206"), a = n("594190"), o = n("703656"), l = n("695346"), u = n("391690"), d = n("626135"), _ = n("129542"), c = n("877481"), E = n("830168"), I = n("57513"), T = n("981631"), f = n("689938"); function S(e, t) { E.default.init({ userToken: e, userId: t, installPaths: u.default.installationPaths, platform: (0, _.getBuildPlatform)(), stateCallback: e => { r.default.dispatch({ type: "DISPATCH_APPLICATION_STATE_UPDATE", state: e }) }, errorCallback: e => { r.default.dispatch({ type: "DISPATCH_APPLICATION_ERROR", error: e }) } }) } function h() { E.default.destroy() } function A(e) { let { application: t, branchId: n, buildId: i, manifestIds: s, installationPath: a, analyticsLocation: o } = e; E.default.setTargetManifest({ applicationId: t.id, applicationName: t.name, applicationIcon: t.icon, branchId: n, buildId: i, manifestIds: s, installationPath: a }), r.default.dispatch({ type: "DISPATCH_APPLICATION_INSTALL", applicationId: t.id, branchId: n, installationPath: a }), d.default.track(T.AnalyticEvents.LIBRARY_INSTALL_INITIATED, { application_id: t.id, application_name: t.name, sku_id: t.primarySkuId, location: o }) } function m(e, t, n) { (0, I.fetchLiveBuild)(e.id, t).then(() => { r.default.dispatch({ type: "DISPATCH_APPLICATION_REPAIR", applicationId: e.id, branchId: t }) }), d.default.track(T.AnalyticEvents.LIBRARY_REPAIR_INITIATED, { application_id: e.id, application_name: e.name, sku_id: e.primarySkuId, location: n }) } function N(e, t, n, i) { let s = arguments.length > 4 && void 0 !== arguments[4] && arguments[4]; ! function(e, t, n, i) { if (a.default.getRunningDiscordApplicationIds().includes(e.id)) return; let r = u.default.getInstallationPath(e.id, t); if (null == r) throw Error("Missing installation path for application: ".concat(e.id, " ").concat(t)); E.default.setTargetManifest({ applicationId: e.id, applicationName: e.name, applicationIcon: e.icon, branchId: t, buildId: n, manifestIds: i, installationPath: r }) }(e, t, n, i), r.default.dispatch({ type: "DISPATCH_APPLICATION_UPDATE", applicationId: e.id, branchId: t, automatic: s }) } function p(e, t, n) { let i = s.default.getApplication(e); null != i && (c.default.removeShortcuts(i.name), d.default.track(T.AnalyticEvents.LIBRARY_UNINSTALL_INITIATED, { application_id: i.id, application_name: i.name, sku_id: i.primarySkuId, location: n })), E.default.uninstall(e, t), r.default.dispatch({ type: "DISPATCH_APPLICATION_UNINSTALL", applicationId: e, branchId: t }) } function O() { E.default.resume() } function C() { E.default.pause() } function R(e, t) { r.default.dispatch({ type: "DISPATCH_APPLICATION_MOVE_UP", applicationId: e, branchId: t }) } function g(e, t) { E.default.cancel(e, t), r.default.dispatch({ type: "DISPATCH_APPLICATION_CANCEL", applicationId: e, branchId: t }) } function L(e, t) { r.default.dispatch({ type: "DISPATCH_APPLICATION_REMOVE_FINISHED", applicationId: e, branchId: t }) } function v(e, t) { let n = s.default.getApplication(e); null != n && c.default.createShortcuts(l.InstallShortcutDesktop.getSetting(), l.InstallShortcutStartMenu.getSetting(), n.name, n.id, t.installPath) } function D(e, t) { let r = s.default.getApplication(e); i.HTTP.post({ url: T.Endpoints.LIBRARY_APPLICATION_INSTALLED(e, e), oldFormErrors: !0 }), null != r && (c.default.createShortcuts(l.InstallShortcutDesktop.getSetting(), l.InstallShortcutStartMenu.getSetting(), r.name, r.id, t.installPath), Promise.resolve().then(n.bind(n, "292556")).then(e => { let { default: t } = e; t.showNotification(r.getIconURL(64), f.default.Messages.GAME_LIBRARY_NOTIFICATION_GAME_INSTALLED_TITLE, f.default.Messages.GAME_LIBRARY_NOTIFICATION_GAME_INSTALLED_BODY.format({ name: r.name }), { notif_type: "Game Library Game Installed" }, { onClick: () => (0, o.transitionTo)(T.Routes.APPLICATION_LIBRARY), omitViewTracking: !0 }) })) } }, 430742: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { clearDraft(e, t) { i.default.dispatch({ type: "DRAFT_CLEAR", channelId: e, draftType: t }) }, saveDraft(e, t, n) { i.default.dispatch({ type: "DRAFT_SAVE", channelId: e, draft: t, draftType: n }) }, changeDraft(e, t, n) { i.default.dispatch({ type: "DRAFT_CHANGE", channelId: e, draft: t, draftType: n }) }, changeThreadSettings(e, t) { i.default.dispatch({ type: "THREAD_SETTINGS_DRAFT_CHANGE", channelId: e, draft: t }) } } }, 80932: function(e, t, n) { "use strict"; n.r(t), n.d(t, { deleteEmoji: function() { return O }, favoriteEmoji: function() { return L }, fetchEmoji: function() { return N }, setDiversityColor: function() { return m }, unfavoriteEmoji: function() { return v }, updateEmoji: function() { return C }, uploadEmoji: function() { return p } }), n("47120"), n("653041"); var i = n("392711"), r = n.n(i), s = n("544891"), a = n("381499"), o = n("570140"), l = n("479531"), u = n("339085"), d = n("633302"), _ = n("347374"), c = n("38618"), E = n("675478"), I = n("486472"), T = n("823379"), f = n("668781"), S = n("981631"), h = n("526761"), A = n("689938"); function m(e) { E.PreloadedUserSettingsActionCreators.updateAsync("textAndImages", t => { t.diversitySurrogate = a.StringValue.create(), t.diversitySurrogate.value = e }, h.UserSettingsDelay.FREQUENT_USER_ACTION) } function N(e) { o.default.dispatch({ type: "EMOJI_FETCH", guildId: e }), s.HTTP.get({ url: S.Endpoints.GUILD_EMOJIS(e), oldFormErrors: !0 }).then(t => o.default.dispatch({ type: "EMOJI_FETCH_SUCCESS", guildId: e, emojis: t.body }), () => o.default.dispatch({ type: "EMOJI_FETCH_FAILURE", guildId: e })) } function p(e) { let { guildId: t, image: n, name: i, roles: r } = e; return o.default.dispatch({ type: "EMOJI_UPLOAD_START", guildId: t }), s.HTTP.post({ url: S.Endpoints.GUILD_EMOJIS(t), body: { image: n, name: i, roles: r }, oldFormErrors: !0 }).then(() => o.default.dispatch({ type: "EMOJI_UPLOAD_STOP", guildId: t }), e => (o.default.dispatch({ type: "EMOJI_UPLOAD_STOP", guildId: t }), Promise.reject(e))) } function O(e, t) { return o.default.dispatch({ type: "EMOJI_DELETE", guildId: e, emojiId: t }), s.HTTP.del({ url: S.Endpoints.GUILD_EMOJI(e, t), oldFormErrors: !0 }) } async function C(e) { let { guildId: t, emojiId: n, name: i, roles: r } = e; try { return await s.HTTP.patch({ url: S.Endpoints.GUILD_EMOJI(t, n), body: { name: i, roles: r }, oldFormErrors: !0 }) } catch (e) { throw new l.default(e) } } function R(e) { if (I.default.totalUnavailableGuilds > 0 || !c.default.isConnected()) return e; let t = e.map(e => { var t; return null !== (t = u.default.getCustomEmojiById(e)) && void 0 !== t ? t : d.default.getByName(e) }).filter(T.isNotNullish); return [...(0, _.default)(t).keys()] } function g(e) { var t, n, i; return null == e ? null : null !== (i = null !== (n = e.id) && void 0 !== n ? n : null === (t = d.default.convertSurrogateToBase(e.surrogates)) || void 0 === t ? void 0 : t.name) && void 0 !== i ? i : e.name } function L(e) { let t = g(e); null != t && E.FrecencyUserSettingsActionCreators.updateAsync("favoriteEmojis", e => (e.emojis = R(e.emojis), r().size(e.emojis) >= h.MAX_FAVORITES) ? (f.default.show({ title: A.default.Messages.FAVORITES_LIMIT_REACHED_TITLE, body: A.default.Messages.FAVORITES_LIMIT_REACHED_BODY.format({ count: h.MAX_FAVORITES }) }), !1) : !e.emojis.includes(t) && void e.emojis.push(t), h.UserSettingsDelay.INFREQUENT_USER_ACTION) } function v(e) { let t = g(e); null != t && E.FrecencyUserSettingsActionCreators.updateAsync("favoriteEmojis", e => { if (e.emojis = R(e.emojis), !e.emojis.includes(t)) return !1; e.emojis = e.emojis.filter(e => t !== e) }, h.UserSettingsDelay.INFREQUENT_USER_ACTION) } }, 496929: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchGiftableEntitlements: function() { return u }, fetchUserEntitlements: function() { return l }, fetchUserEntitlementsForApplication: function() { return o } }); var i = n("544891"), r = n("570140"), s = n("73346"), a = n("981631"); function o(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return r.default.wait(() => { r.default.dispatch({ type: "ENTITLEMENT_FETCH_APPLICATION_START", applicationId: e }) }), i.HTTP.get({ url: a.Endpoints.ENTITLEMENTS_FOR_APPLICATION(e), oldFormErrors: !0, query: { exclude_consumed: t } }).then(t => (r.default.dispatch({ type: "ENTITLEMENT_FETCH_APPLICATION_SUCCESS", applicationId: e, entitlements: t.body }), t.body)).catch(() => { r.default.dispatch({ type: "ENTITLEMENT_FETCH_APPLICATION_FAIL", applicationId: e }) }) } async function l(e) { let { withSku: t = !1, withApplication: n = !1, entitlementType: s } = e; r.default.dispatch({ type: "ENTITLEMENTS_FETCH_FOR_USER_START" }); try { let e = await i.HTTP.get({ url: a.Endpoints.ENTITLEMENTS_FOR_USER, query: { with_sku: t, with_application: n, entitlement_type: s } }); r.default.dispatch({ type: "ENTITLEMENTS_FETCH_FOR_USER_SUCCESS", entitlements: e.body }) } catch (e) { r.default.dispatch({ type: "ENTITLEMENTS_FETCH_FOR_USER_FAIL" }) } } async function u() { r.default.dispatch({ type: "ENTITLEMENTS_GIFTABLE_FETCH" }); try { let e = await (0, s.httpGetWithCountryCodeQuery)({ url: a.Endpoints.ENTITLEMENTS_GIFTABLE }); r.default.dispatch({ type: "ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS", entitlements: e.body }) } catch (e) { r.default.dispatch({ type: "ENTITLEMENTS_GIFTABLE_FETCH_FAIL" }) } } }, 758059: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { setSection(e) { i.default.dispatch({ type: "FRIENDS_SET_SECTION", section: e }) }, setInitialSection(e) { i.default.dispatch({ type: "FRIENDS_SET_INITIAL_SECTION", section: e }) } } }, 68405: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addFavoriteGIF: function() { return b }, fetchSuggestions: function() { return L }, fetchTrending: function() { return y }, fetchTrendingGIFs: function() { return P }, gifUrlKey: function() { return U }, initializeSearch: function() { return M }, removeFavoriteGIF: function() { return G }, resetSearch: function() { return v }, search: function() { return g }, trackSearchResultViewed: function() { return O }, trackSearchStart: function() { return p }, trackSelectGIF: function() { return D } }), n("757143"); var i = n("392711"), r = n.n(i), s = n("153832"), a = n("544891"), o = n("377108"), l = n("570140"), u = n("367907"), d = n("198620"), _ = n("706454"), c = n("675478"), E = n("656733"), I = n("626135"), T = n("708406"), f = n("591759"), S = n("668781"), h = n("981631"), A = n("526761"), m = n("689938"); let N = /-/g; function p(e) { let t = null != e ? { [e]: 1 } : {}; u.default.trackWithMetadata(h.AnalyticEvents.SEARCH_STARTED, { search_type: h.SearchTypes.GIF, load_id: E.default.getAnalyticsID(), num_modifiers: Object.keys(t).length, modifiers: t }) } function O(e, t) { let { startTime: n, ...i } = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = { offset: 0, limit: null, totalResults: e.length }, s = (0, T.calculateAnalyticsMetadata)(E.default.getAnalyticsID(), t, { ...r, ...i, results: e }), a = null == n ? {} : { load_duration_ms: Date.now() - n }; u.default.trackWithMetadata(h.AnalyticEvents.SEARCH_RESULT_VIEWED, { ...s, ...a }) } function C(e, t, n) { let i = Date.now(); p(t), a.HTTP.get({ url: h.Endpoints.GIFS_SEARCH, query: { q: e, media_format: E.default.getSelectedFormat(), provider: "tenor", locale: _.default.locale, limit: n }, oldFormErrors: !0 }).then(r => { let s = r.body; O(s, t, { startTime: i, limit: n }), l.default.dispatch({ type: "GIF_PICKER_QUERY_SUCCESS", query: e, items: s }) }, () => l.default.dispatch({ type: "GIF_PICKER_QUERY_FAILURE", query: e })) } let R = r().debounce(C, 250); function g(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 ? arguments[3] : void 0; "" === e ? v() : (l.default.dispatch({ type: "GIF_PICKER_QUERY", query: e }), n ? C(e, t, i) : R(e, t, i)) } function L(e) { "" !== e && null != e && a.HTTP.get({ url: h.Endpoints.GIFS_SUGGEST, query: { q: e, provider: "tenor", limit: 5, locale: _.default.locale }, oldFormErrors: !0 }).then(t => { let n = t.body; l.default.dispatch({ type: "GIF_PICKER_SUGGESTIONS_SUCCESS", query: e, items: n }) }) } function v() { l.default.dispatch({ type: "GIF_PICKER_QUERY", query: "" }) } function D(e) { let { type: t, index: n, offset: i, limit: r, results: s, totalResults: o, query: l, gifId: d } = e, _ = (0, T.calculateAnalyticsMetadata)(E.default.getAnalyticsID(), t, { offset: i, limit: r, results: s, totalResults: o }); u.default.trackWithMetadata(h.AnalyticEvents.SEARCH_RESULT_SELECTED, { ..._, index_num: n, source_object: "GIF Picker", query: l }), null != d && a.HTTP.post({ url: h.Endpoints.GIFS_SELECT, body: { id: d, q: l }, oldFormErrors: !0 }) } function M() { let e = (0, s.v4)().replace(N, ""); u.default.trackWithMetadata(h.AnalyticEvents.SEARCH_OPENED, { search_type: h.SearchTypes.GIF, load_id: e }), l.default.wait(() => { l.default.dispatch({ type: "GIF_PICKER_INITIALIZE", analyticsID: e }) }) } function y() { a.HTTP.get({ url: h.Endpoints.GIFS_TRENDING, query: { provider: "tenor", locale: _.default.locale, media_format: E.default.getSelectedFormat() }, oldFormErrors: !0 }).then(e => { let { body: t } = e, { categories: n, gifs: i } = t; l.default.dispatch({ type: "GIF_PICKER_TRENDING_FETCH_SUCCESS", trendingCategories: n, trendingGIFPreview: i[0] }) }) } function P(e) { let t = Date.now(); p(h.GIFPickerResultTypes.TRENDING_GIFS), a.HTTP.get({ url: h.Endpoints.GIFS_TRENDING_GIFS, query: { media_format: E.default.getSelectedFormat(), provider: "tenor", locale: _.default.locale, limit: e }, oldFormErrors: !0 }).then(n => { let { body: i } = n; O(i, h.GIFPickerResultTypes.TRENDING_GIFS, { startTime: t, limit: e }), l.default.dispatch({ type: "GIF_PICKER_QUERY_SUCCESS", items: i }) }, () => { l.default.dispatch({ type: "GIF_PICKER_QUERY_FAILURE" }) }) } function U(e) { let t = f.default.toURLSafe(e); return null == t ? e : (0, d.isAttachmentUrl)(t) ? (0, d.removeSignedUrlParameters)(t).toString() : e } function b(e) { c.FrecencyUserSettingsActionCreators.updateAsync("favoriteGifs", t => { var n; let i = null !== (n = r().max(Object.values(t.gifs).map(e => e.order))) && void 0 !== n ? n : 0; if (t.gifs[U(e.url)] = { ...e, order: i + 1 }, o.FavoriteGIFs.toBinary(t).length > A.MAX_FAVORITE_GIFS_SIZE) return S.default.show({ title: m.default.Messages.FAVORITES_LIMIT_REACHED_TITLE, body: m.default.Messages.FAVORITE_GIFS_LIMIT_REACHED_BODY }), !1; let s = r().size(t.gifs); s > 2 && (t.hideTooltip = !0), I.default.track(h.AnalyticEvents.GIF_FAVORITED, { total_num_favorited: s }) }, A.UserSettingsDelay.INFREQUENT_USER_ACTION) } function G(e) { c.FrecencyUserSettingsActionCreators.updateAsync("favoriteGifs", t => { e in t.gifs ? delete t.gifs[e] : delete t.gifs[U(e)], I.default.track(h.AnalyticEvents.GIF_UNFAVORITED, { total_num_favorited: r().size(t.gifs) }) }, A.UserSettingsDelay.INFREQUENT_USER_ACTION) } }, 224706: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"); var i = n("664751"), r = n("243814"), s = n("544891"), a = n("570140"), o = n("566620"), l = n("812206"), u = n("439849"), d = n("669764"), _ = n("706454"), c = n("757266"), E = n("77498"), I = n("283595"), T = n("417363"), f = n("626135"), S = n("630388"), h = n("877481"), A = n("358085"), m = n("278323"), N = n("58642"), p = n("254854"), O = n("981631"), C = n("701488"), R = n("689938"); function g(e) { let { applicationId: t, secret: n, channelId: i, intent: r = C.ActivityIntent.PLAY, embedded: s = !1, analyticsLocations: o = [] } = e; L(t, null, i, s, o).then(() => h.default.waitConnected(t)).then(() => Promise.race([h.default.waitSubscribed(t, O.RPCEvents.ACTIVITY_JOIN)])).then(() => { a.default.dispatch({ type: "ACTIVITY_JOIN", applicationId: t, secret: n, intent: r, embedded: s }) }).catch(() => a.default.dispatch({ type: "ACTIVITY_JOIN_FAILED", applicationId: t })) } function L(e, t, n) { let u = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], d = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : []; if (u) return null == n ? Promise.reject(Error("Invalid channel ID")) : ((0, o.startEmbeddedActivity)(n, e, d), Promise.resolve()); if (c.default.isConnected(e)) return Promise.resolve(); let E = null; if (null == t) { let n = I.default.getActiveLibraryApplication(e); t = null != n ? n.branchId : e } if (T.default.isLaunchable(e, t)) { var f; let n = T.default.getState(e, t), a = I.default.getActiveLaunchOptionId(e, t); if (null == n) throw Error("Missing dispatch game when launching"); let o = I.default.getLibraryApplication(e, t); if (null == o) throw Error("Missing library application when launching"); E = (f = e, s.HTTP.post({ url: O.Endpoints.OAUTH2_AUTHORIZE, query: { client_id: f, response_type: "token", scope: [r.OAuth2Scopes.IDENTIFY].join(" ") }, retries: 3, body: { authorize: !0 }, oldFormErrors: !0 }).then(e => { let t = e.body.location.split(/#|\?/), n = i.parse(t[t.length - 1]); if ("invalid_request" === n.error) return null; if (null != n.error) { var r; throw Error("OAuth2 Error: ".concat(n.error, ": ").concat(null !== (r = n.error_description) && void 0 !== r ? r : "unknown error")) } return n.access_token }, e => { if (404 === e.status) return null; throw e })).then(e => h.default.launchDispatchApplication(n, e, _.default.locale, o.getBranchName(), a)) } else { let t = l.default.getApplication(e); E = null != t ? h.default.launch(t) : h.default.launchGame(e) } let S = Error("game not found"); return null != E ? (a.default.dispatch({ type: "LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE", applicationId: e, branchId: t }), a.default.dispatch({ type: "GAME_LAUNCH_START", applicationId: e }), E.then(t => { a.default.dispatch({ type: "GAME_LAUNCH_SUCCESS", applicationId: e, pids: t }) }).catch(t => { p.default.show(O.NoticeTypes.LAUNCH_GAME_FAILURE, R.default.Messages.GAME_LAUNCH_FAILED_LAUNCH_TARGET_NOT_FOUND), a.default.dispatch({ type: "GAME_LAUNCH_FAIL", applicationId: e, error: S }) })) : (a.default.dispatch({ type: "GAME_LAUNCH_FAIL", applicationId: e, error: S }), Promise.reject(S)) } t.default = { addGame(e, t) { a.default.dispatch({ type: "RUNNING_GAME_ADD_OVERRIDE", pid: e }), f.default.track(O.AnalyticEvents.RUNNING_GAME_OVERRIDE_ADDED, { game_name: t }) }, toggleOverlay(e, t) { let n = E.default.getGameByName(e.name); if (null != n) { let e = I.default.getActiveLibraryApplication(n.id); if (null != e) { let t = S.toggleFlag(e.getFlags(), O.LibraryApplicationFlags.OVERLAY_DISABLED); N.updateFlags(e.id, e.branchId, t); return } } a.default.dispatch({ type: "RUNNING_GAME_TOGGLE_OVERLAY", game: e, newEnabledValue: t }) }, toggleDetection(e) { a.default.dispatch({ type: "RUNNING_GAME_TOGGLE_DETECTION", game: e }) }, editName(e, t) { a.default.dispatch({ type: "RUNNING_GAME_EDIT_NAME", game: e, newName: t }) }, identifyGame: (e, t) => (0, u.default)().then(t => new Promise((n, i) => { if (null == t) { i(Error("Game utils module not loaded")); return } t.identifyGame(e, (t, r) => { if (0 !== t) { i(Error("Error ".concat(t, " when fetching info on ").concat(e))); return } if (null == r.icon || "" === r.icon || null == r.name || "" === r.name) { i(Error("Did not find data on ".concat(e))); return } a.default.dispatch({ type: "GAME_ICON_UPDATE", gameName: r.name, icon: "data:image/png;base64,".concat(r.icon) }), n(r) }) })), async getDetectableGamesSupplemental(e) { let t = e.filter(d.default.canFetch); if (0 !== t.length) { a.default.dispatch({ type: "DETECTABLE_GAME_SUPPLEMENTAL_FETCH", applicationIds: t }); try { let e = await s.HTTP.get({ url: O.Endpoints.APPLICATIONS_GAMES_SUPPLEMENTAL, query: { application_ids: t } }); a.default.dispatch({ type: "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS", applicationIds: t, supplementalGameData: e.body.supplemental_game_data }) } catch { a.default.dispatch({ type: "DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE", applicationIds: t }) } } }, getDetectableGames() { !E.default.fetching && null == E.default.lastFetched && a.default.wait(() => { a.default.dispatch({ type: "GAMES_DATABASE_FETCH" }), s.HTTP.get({ url: O.Endpoints.APPLICATIONS_DETECTABLE, headers: { "If-None-Match": E.default.detectableGamesEtag }, retries: 1, oldFormErrors: !0 }).then(e => { let { body: t, headers: { etag: n } } = e; a.default.dispatch({ type: "GAMES_DATABASE_UPDATE", games: t, etag: n }) }, e => { let { status: t } = e; 304 === t ? a.default.dispatch({ type: "GAMES_DATABASE_UPDATE", games: [], etag: E.default.detectableGamesEtag }) : a.default.dispatch({ type: "GAMES_DATABASE_FETCH_FAIL" }) }) }) }, reportUnverifiedGame(e) { let { name: t, iconHash: n, publisher: i, distributor: r, sku: o, executableName: l } = e, d = (0, u.cleanExecutablePath)(l); if (null != d) { var _, c; s.HTTP.post({ url: O.Endpoints.UNVERIFIED_APPLICATIONS, body: { name: t, os: (0, A.getPlatformName)(), icon: n, distributor_application: (_ = r, c = o, null == _ || "" === _ ? null : { distributor: _, sku: c }), executable: d, publisher: i, report_version: 3 }, retries: 1, oldFormErrors: !0 }).then(e => { let { body: { name: t, hash: n, missing_data: i } } = e; a.default.dispatch({ type: "UNVERIFIED_GAME_UPDATE", name: t, hash: n, missingData: i }) }) } }, uploadIcon(e, t, n) { s.HTTP.post({ url: O.Endpoints.UNVERIFIED_APPLICATIONS_ICONS, body: { application_name: e, application_hash: t, icon: n }, retries: 1, oldFormErrors: !0 }) }, deleteEntry(e) { a.default.dispatch({ type: "RUNNING_GAME_DELETE_ENTRY", game: e }) }, launch: L, async join(e) { let { userId: t, sessionId: n, applicationId: i, channelId: r, messageId: s, intent: o = C.ActivityIntent.PLAY, embedded: l = !1 } = e; if (__OVERLAY__) return a.default.dispatch({ type: "OVERLAY_JOIN_GAME", userId: t, sessionId: n, applicationId: i, channelId: r, messageId: s }), Promise.resolve(!0); a.default.dispatch({ type: "ACTIVITY_JOIN_LOADING", applicationId: i }); try { let e = await m.default.getJoinSecret(t, n, i, r, s); return g({ applicationId: i, secret: e, channelId: r, intent: o, embedded: l }), !0 } catch (e) { return a.default.dispatch({ type: "ACTIVITY_JOIN_FAILED", applicationId: i }), !1 } }, joinWithSecret: g } }, 749210: function(e, t, n) { "use strict"; n.r(t), n.d(t, { waitForGuild: function() { return w } }), n("411104"), n("177593"); var i = n("990547"), r = n("149765"), s = n("544891"), a = n("570140"), o = n("34756"), l = n("408987"), u = n("280837"), d = n("57132"), _ = n("777639"), c = n("272423"), E = n("781157"), I = n("895886"), T = n("35225"), f = n("703656"), S = n("314897"), h = n("592125"), A = n("664915"), m = n("984933"), N = n("430824"), p = n("944486"), O = n("914010"), C = n("594174"), R = n("626135"), g = n("700785"), L = n("74538"), v = n("573261"), D = n("668781"), M = n("981631"), y = n("689938"); let P = e => { D.default.show({ title: y.default.Messages.TOO_MANY_USER_GUILDS_ALERT_TITLE, body: y.default.Messages.TOO_MANY_USER_GUILDS_ALERT_DESCRIPTION.format({ quantity: e }) }) }, U = e => { a.default.dispatch({ type: "GUILD_DELETE", guild: { id: e } }) }, b = () => { D.default.show({ title: y.default.Messages.SERVER_IS_CURRENTLY_FULL, body: y.default.Messages.PLEASE_TRY_AGAIN_LATER }) }; async function G(e) { var t, i, r, o, l; let u = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { source: d, loadId: _, lurkLocation: c } = u, E = null !== (t = u.lurker) && void 0 !== t && t, T = C.default.getCurrentUser(); if (null !== (i = null == T ? void 0 : T.hasFlag(M.UserFlags.QUARANTINED)) && void 0 !== i && i) return (0, I.default)(), new Promise((e, t) => t(Error())); a.default.wait(() => a.default.dispatch({ type: "GUILD_JOIN", guildId: e, lurker: E, source: d, loadId: _ })); try { let t = O.default.getGuildId(), i = e === t && null != N.default.getGuild(e) ? p.default.getChannelId(e) : null, r = await s.HTTP.put({ url: M.Endpoints.GUILD_JOIN(e), query: { lurker: E, session_id: E ? S.default.getSessionId() : null, recommendation_load_id: _, location: E && null != c ? c : null }, context: { source: d }, oldFormErrors: !0, body: {} }); if (null != r.body.join_request && a.default.dispatch({ type: "USER_GUILD_JOIN_REQUEST_UPDATE", guildId: e, request: r.body.join_request }), null == N.default.getGuild(e) && r.body.show_verification_form) return (0, f.transitionTo)(M.Routes.GUILD_MEMBER_VERIFICATION(e)), r; if (null != r.body.welcome_screen && a.default.dispatch({ type: "WELCOME_SCREEN_UPDATE", guildId: r.body.id, welcomeScreen: r.body.welcome_screen }), null != r.body.approximate_presence_count && a.default.dispatch({ type: "ONLINE_GUILD_MEMBER_COUNT_UPDATE", guildId: r.body.id, count: r.body.approximate_presence_count }), !E) { let { default: t } = await Promise.resolve().then(n.bind(n, "17181")); await t({ guildId: e, returnChannelId: i }) } return r } catch (t) { if ((null === (r = t.body) || void 0 === r ? void 0 : r.code) === M.AbortCodes.TOO_MANY_USER_GUILDS) { let e = C.default.getCurrentUser(); L.default.canUseIncreasedGuildCap(e) || (null == e ? void 0 : e.isStaff()) ? P(M.MAX_USER_GUILDS_PREMIUM) : P(M.MAX_USER_GUILDS) } throw (null === (o = t.body) || void 0 === o ? void 0 : o.code) === M.AbortCodes.GUILD_AT_CAPACITY && b(), E && (null === (l = t.body) || void 0 === l ? void 0 : l.code) === M.AbortCodes.UNKNOWN_GUILD && U(e), t } } function w(e) { return new Promise(t => N.default.addConditionalChangeListener(() => { let n = N.default.getGuild(e); return null == n || (t(n), !1) })) } t.default = { joinGuild: G, waitForGuild: w, async transitionToGuildSync(e, t, n, i) { var r, s; let a = (r = (await w(e)).id, null != (s = n) ? s : !(0, d.isInMainTabsExperiment)() || (0, E.isOnNewPanels)() ? (0, T.getChannelIdForGuildTransition)(r) : void 0), o = t; (null == t ? void 0 : t.hasOwnProperty("welcomeModalChannelId")) && null == t.welcomeModalChannelId && (o = { ...t, welcomeModalChannelId: a }), (0, f.transitionTo)(M.Routes.CHANNEL(e, a), o, void 0, i), await new Promise(setImmediate) }, deleteGuild: U, selectGuild(e) { (0, u.stopLurking)(e) }, createGuild(e) { a.default.dispatch({ type: "GUILD_CREATE", guild: e }) }, setServerMute: (e, t, n) => s.HTTP.patch({ url: M.Endpoints.GUILD_MEMBER(e, t), body: { mute: n }, oldFormErrors: !0 }), setServerDeaf: (e, t, n) => s.HTTP.patch({ url: M.Endpoints.GUILD_MEMBER(e, t), body: { deaf: n }, oldFormErrors: !0 }), setChannel(e, t, n) { s.HTTP.patch({ url: M.Endpoints.GUILD_MEMBER(e, t), body: { channel_id: n }, oldFormErrors: !0 }) }, setMemberFlags(e, t, n) { s.HTTP.patch({ url: M.Endpoints.GUILD_MEMBER(e, t), body: { flags: n }, oldFormErrors: !0 }) }, kickUser: (e, t, n) => s.HTTP.del({ url: M.Endpoints.GUILD_MEMBER(e, t), reason: n, oldFormErrors: !0 }), setCommunicationDisabledUntil(e) { let { guildId: t, userId: n, communicationDisabledUntilTimestamp: r, duration: s, reason: a, location: o } = e; return v.default.patch({ url: M.Endpoints.GUILD_MEMBER(t, n), reason: a, body: { communication_disabled_until: r }, oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.USER_COMMUNICATION_DISABLED_UPDATE, properties: { guild_id: t, target_user_id: n, duration: null != s ? s : null, reason: null != a ? a : null, communication_disabled_until: r, location: null != o ? o : null } } }) }, banUser: (e, t, n, i) => s.HTTP.put({ url: M.Endpoints.GUILD_BAN(e, t), reason: i, body: { delete_message_seconds: n }, oldFormErrors: !0 }), unbanUser: (e, t) => s.HTTP.del({ url: M.Endpoints.GUILD_BAN(e, t), oldFormErrors: !0 }), banMultipleUsers: (e, t, n, i) => s.HTTP.post({ url: M.Endpoints.BULK_GUILD_BAN(e), body: { user_ids: t, delete_message_seconds: n }, reason: i, oldFormErrors: !0 }), async createRole(e, t, n) { let i = { name: null != t && "" !== t ? t : y.default.Messages.NEW_ROLE, color: null != n ? n : 0, permissions: g.NONE }; try { let t = await s.HTTP.post({ url: M.Endpoints.GUILD_ROLES(e), oldFormErrors: !0, body: i }), n = t.body; return n.permissions = r.deserialize(n.permissions), a.default.dispatch({ type: "GUILD_SETTINGS_ROLE_SELECT", roleId: t.body.id, role: n }), l.default.checkGuildTemplateDirty(e), n } catch (e) { throw new o.default(e) } }, async updateRole(e, t, n) { let { icon: i, unicodeEmoji: r, ...a } = n, o = null === i || (null == i ? void 0 : i.startsWith("data:")) ? i : void 0, u = await s.HTTP.patch({ url: M.Endpoints.GUILD_ROLE(e, t), body: { ...a, icon: o, unicode_emoji: r }, oldFormErrors: !0 }); return l.default.checkGuildTemplateDirty(e), u }, updateRolePermissions: (e, t, n) => s.HTTP.patch({ url: M.Endpoints.GUILD_ROLE(e, t), body: { permissions: n }, oldFormErrors: !0 }), deleteRole(e, t) { s.HTTP.del({ url: M.Endpoints.GUILD_ROLE(e, t), oldFormErrors: !0 }).then(() => { l.default.checkGuildTemplateDirty(e) }) }, async batchChannelUpdate(e, t) { let n = await s.HTTP.patch({ url: M.Endpoints.GUILD_CHANNELS(e), body: t, oldFormErrors: !0 }); return l.default.checkGuildTemplateDirty(e), n }, async batchRoleUpdate(e, t) { let n = await s.HTTP.patch({ url: M.Endpoints.GUILD_ROLES(e), body: t, oldFormErrors: !0 }); return l.default.checkGuildTemplateDirty(e), n }, requestMembers(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "", n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 10, i = !(arguments.length > 3) || void 0 === arguments[3] || arguments[3]; return a.default.dispatch({ type: "GUILD_MEMBERS_REQUEST", guildIds: Array.isArray(e) ? e : [e], query: t, limit: n, presences: i }) }, searchRecentMembers(e, t) { let { query: n, continuationToken: i } = null != t ? t : {}; return a.default.dispatch({ type: "GUILD_SEARCH_RECENT_MEMBERS", guildId: e, query: n, continuationToken: i }) }, requestMembersById(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; return a.default.dispatch({ type: "GUILD_MEMBERS_REQUEST", guildIds: Array.isArray(e) ? e : [e], userIds: Array.isArray(t) ? t : [t], presences: n }) }, move(e, t, n, i) { a.default.dispatch({ type: "GUILD_MOVE", fromIndex: e, toIndex: t, fromFolderIndex: n, toFolderIndex: i }) }, moveById(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; a.default.dispatch({ type: "GUILD_MOVE_BY_ID", sourceId: e, targetId: t, moveToBelow: n, combine: i }) }, createGuildFolderLocal(e, t) { R.default.track(M.AnalyticEvents.GUILD_FOLDER_CREATED), a.default.dispatch({ type: "GUILD_FOLDER_CREATE_LOCAL", sourceIds: e, name: t }) }, editGuildFolderLocal(e, t, n) { a.default.dispatch({ type: "GUILD_FOLDER_EDIT_LOCAL", targetId: e, sourceIds: t, name: n }) }, deleteGuildFolderLocal(e) { a.default.dispatch({ type: "GUILD_FOLDER_DELETE_LOCAL", targetId: e }) }, toggleGuildFolderExpand(e) { let t = A.default.isFolderExpanded(e); R.default.track(M.AnalyticEvents.GUILD_FOLDER_CLICKED, { source: "sidebar", action: t ? "collapsed" : "expanded" }), a.default.dispatch({ type: "TOGGLE_GUILD_FOLDER_EXPAND", folderId: e }) }, setGuildFolderExpanded(e, t) { a.default.dispatch({ type: "SET_GUILD_FOLDER_EXPANDED", folderId: e, expanded: t }) }, collapseAllFolders() { a.default.dispatch({ type: "GUILD_FOLDER_COLLAPSE" }) }, nsfwAgree(e) { a.default.dispatch({ type: "GUILD_NSFW_AGREE", guildId: e }) }, nsfwReturnToSafety(e) { if ((0, d.isInMainTabsExperiment)() && !(0, E.isOnNewPanels)()) { let e = (0, _.getRootNavigationRef)(); if ((null == e ? void 0 : e.isReady()) !== !0) return; for (null != (0, c.coerceModalRoute)(e.getCurrentRoute()) && e.goBack();;) { let t = (0, c.coerceChannelRoute)(e.getCurrentRoute()); if (null == t) break; let n = h.default.getChannel(t.params.channelId); if (null == n || !n.isNSFW()) break; e.goBack() } return } if (null == e) { (0, f.transitionTo)(M.Routes.FRIENDS); return } let t = m.default.getDefaultChannel(e); null == t || t.isNSFW() ? (0, f.transitionTo)(M.Routes.FRIENDS) : (0, f.transitionTo)(M.Routes.CHANNEL(e, t.id)) }, escapeToDefaultChannel(e) { let t = m.default.getDefaultChannel(e); null != t ? (0, f.transitionTo)(M.Routes.CHANNEL(e, t.id)) : (0, f.transitionTo)(M.Routes.FRIENDS) }, async fetchApplications(e, t) { let n = { url: M.Endpoints.GUILD_APPLICATIONS(e), oldFormErrors: !0 }; null != t && (n.query = { channel_id: t }); let i = (await s.HTTP.get(n)).body; a.default.dispatch({ type: "GUILD_APPLICATIONS_FETCH_SUCCESS", guildId: e, applications: i }) }, async fetchGuildBansBatch(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1e3, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, i = { limit: t }; null != n && (i.after = n), await s.HTTP.get({ url: M.Endpoints.GUILD_BANS(e), oldFormErrors: !0, query: i }).then(t => { a.default.dispatch({ type: "GUILD_SETTINGS_LOADED_BANS_BATCH", bans: t.body, guildId: e }) }) }, async searchGuildBans(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 10, r = { limit: i }; null != n && n.length > 0 && (r.user_ids = n), null != t && t.trim().length > 0 && (r.query = t), await s.HTTP.get({ url: M.Endpoints.GUILD_BANS_SEARCH(e), oldFormErrors: !0, query: r }).then(t => { a.default.dispatch({ type: "GUILD_SETTINGS_LOADED_BANS_BATCH", bans: t.body, guildId: e }) }) }, async fetchGuildBans(e) { await s.HTTP.get({ url: M.Endpoints.GUILD_BANS(e), oldFormErrors: !0 }).then(e => { a.default.dispatch({ type: "GUILD_SETTINGS_LOADED_BANS", bans: e.body }) }) }, fetchGuildRoleConnectionsEligibility: (e, t) => s.HTTP.get({ url: M.Endpoints.GUILD_ROLE_CONNECTIONS_ELIGIBILITY(e, t), oldFormErrors: !0 }).then(e => { let { body: n } = e; return a.default.dispatch({ type: "GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS", roleId: t, roleConnectionEligibility: n }), n }), async assignGuildRoleConnection(e, t) { await s.HTTP.post({ url: M.Endpoints.GUILD_ROLE_CONNECTIONS_ASSIGN(e, t), oldFormErrors: !0 }) }, async unassignGuildRoleConnection(e, t) { await s.HTTP.post({ url: M.Endpoints.GUILD_ROLE_CONNECTIONS_UNASSIGN(e, t), oldFormErrors: !0 }) }, getGuildRoleConnectionsConfigurations: async e => (await s.HTTP.get({ url: M.Endpoints.GUILD_ROLE_CONNECTIONS_CONFIGURATIONS(e), oldFormErrors: !0 })).body } }, 941028: function(e, t, n) { "use strict"; n.r(t), n.d(t, { subscribeChannel: function() { return u }, subscribeChannelDimensions: function() { return d }, subscribeMembers: function() { return s }, subscribeToMemberUpdates: function() { return o }, unsubscribeFromMemberUpdates: function() { return l }, unsubscribeMembers: function() { return a } }), n("653041"); var i = n("570140"), r = n("509848"); function s(e, t) { i.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_MEMBERS_ADD", guildId: e, userIds: t }) } function a(e, t) { i.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE", guildId: e, userIds: t }) } function o(e) { i.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES", guildId: e }) } function l(e) { i.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES", guildId: e }) } function u(e, t, n) { i.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_CHANNEL", guildId: e, channelId: t, ranges: n }) } function d(e) { let { guildId: t, channelId: n, y: i, height: s, rowHeight: a } = e; function o(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; return Math.max(0, Math.ceil(Math.ceil(e / a)) + t) } let l = []; function d(e) { let t = e + (r.MINIMUM_RANGE - 1); return l.push([e, t]), t + 1 } let _ = o(.5 * s), c = o(i, -_), E = o(i + s, _); for (c > 0 && (c = Math.max(d(0), c)), c = Math.floor(c / r.MINIMUM_RANGE) * r.MINIMUM_RANGE; c <= E;) c = d(c); u(t, n, l) } }, 209185: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { setLocale: function() { return u }, updateLocaleLoadingStatus: function() { return d } }), n("653041"), n("47120"), n("177593"); var s = n("570140"), a = n("229588"), o = n("689938"); i = n("330711").default; let l = !1; function u(e) { r = o.default.loadPromise, i && i.setLocale(e), o.default.setLocale(e), d(e) } function d(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (l && o.default.loadPromise === r) return; l = !0, t ? (0, a.setLocaleHack)(e) : s.default.dispatch({ type: "I18N_LOAD_START", locale: e }); let n = [o.default.loadPromise]; i && n.push(i.loadPromise); let u = Promise.all(n); setImmediate(() => { u.then(() => { s.default.dispatch({ type: "I18N_LOAD_SUCCESS", locale: e }) }).catch(t => { s.default.dispatch({ type: "I18N_LOAD_ERROR", error: t, locale: e }) }) }) } }, 922555: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { move(e, t) { i.default.dispatch({ type: "INCOMING_CALL_MOVE", x: e, y: t }) } } }, 447543: function(e, t, n) { "use strict"; n.r(t), n.d(t, { transitionToGuildFromEventInvite: function() { return en } }), n("411104"); var i = n("525654"), r = n.n(i), s = n("990547"), a = n("39612"), o = n("271579"), l = n("756647"), u = n("544891"), d = n("570140"), _ = n("479531"), c = n("34756"), E = n("867176"), I = n("839426"), T = n("625128"), f = n("972830"), S = n("859802"), h = n("305325"), A = n("281956"), m = n("931261"), N = n("15274"), p = n("924301"), O = n("82085"), C = n("264229"), R = n("652898"), g = n("895886"), L = n("143816"), v = n("703656"), D = n("922482"), M = n("131704"), y = n("314897"), P = n("592125"), U = n("984933"), b = n("271383"), G = n("430824"), w = n("607744"), k = n("341165"), B = n("496675"), V = n("594174"), x = n("626135"), F = n("70956"), H = n("573261"), Y = n("954824"), j = n("749210"), W = n("872810"), K = n("981631"), z = n("176505"), Z = n("70722"), X = n("245335"), Q = n("157925"); let q = "invite", J = null; function $(e) { var t, n, i; let r = {}; switch (e.target_type) { case X.InviteTargetTypes.STREAM: r.targetType = e.target_type, r.targetUserId = null === (n = e.target_user) || void 0 === n ? void 0 : n.id; break; case X.InviteTargetTypes.EMBEDDED_APPLICATION: r.targetType = e.target_type, r.targetApplicationId = null === (i = e.target_application) || void 0 === i ? void 0 : i.id; break; case X.InviteTargetTypes.ROLE_SUBSCRIPTIONS_PURCHASE: r.targetType = e.target_type } return (!(null != G.default.getGuild(null === (t = e.guild) || void 0 === t ? void 0 : t.id)) || e.new_member) && null != e.channel && (0, M.isGuildTextChannelType)(e.channel.type) && (r.welcomeModalChannelId = e.channel.id), null != e.guild_scheduled_event && (r.guildScheduledEvent = e.guild_scheduled_event), r } function ee(e) { let { guildId: t, channel: i, options: r, analyticsLocations: s = [] } = e, { type: a } = i, o = P.default.getChannel(i.id), l = function(e, t, n) { var i, r; if ((null == n ? void 0 : n.targetType) === X.InviteTargetTypes.ROLE_SUBSCRIPTIONS_PURCHASE) return z.StaticChannelRoute.ROLE_SUBSCRIPTIONS; if ((null == n ? void 0 : n.targetType) == null && !M.GUILD_VOCAL_CHANNEL_TYPES.has(t.type) && ((0, S.canSeeGuildHome)(e) || (0, m.canSeeOnboardingHome)(e))) return z.StaticChannelRoute.GUILD_HOME; let s = P.default.getChannel(t.id); return B.default.can(K.Permissions.VIEW_CHANNEL, s) ? t.id : null !== (r = null === (i = U.default.getDefaultChannel(e, !0, K.Permissions.CREATE_INSTANT_INVITE)) || void 0 === i ? void 0 : i.id) && void 0 !== r ? r : t.id }(t, i, r), { targetUserId: u, targetType: d, targetApplicationId: _ } = null != r ? r : {}, c = a === K.ChannelTypes.GUILD_STAGE_VOICE, T = K.Routes.CHANNEL(t, l); M.GUILD_VOCAL_CHANNEL_TYPES.has(a) ? (0, f.addPostConnectionCallback)(() => { Promise.resolve().then(n.bind(n, "287734")).then(e => { let { default: n } = e, a = () => { if (c) { (0, D.connectAndOpen)(i instanceof M.ChannelRecordBase ? i : (0, M.createChannelRecord)(i)), (0, v.transitionTo)(T); return } n.selectVoiceChannel(l), d === X.InviteTargetTypes.STREAM && null != u && W.watchStreamAndTransitionToStream({ streamType: Z.StreamTypes.GUILD, ownerId: u, guildId: t, channelId: l }), d === X.InviteTargetTypes.EMBEDDED_APPLICATION && null != _ && ((0, v.transitionTo)(K.Routes.CHANNEL(null != t ? t : K.ME, l)), (0, I.default)(l, _, s, null == r ? void 0 : r.intent)) }; (0, A.shouldShowMembershipVerificationGate)(t, [G.default, w.default, V.default, b.default]) ? (0, h.openMemberVerificationModal)(t, a) : a() }) }) : (0, E.isActivityInTextSupportedForChannel)(o) && d === X.InviteTargetTypes.EMBEDDED_APPLICATION && null != _ && ((0, v.transitionTo)(K.Routes.CHANNEL(null != t ? t : K.ME, l)), (0, I.default)(l, _, s, null == r ? void 0 : r.intent)), (function(e, t) { let { type: n } = e, { transitionTo: i, welcomeModalChannelId: r, guildScheduledEvent: s } = null != t ? t : {}, a = n === K.ChannelTypes.GUILD_STAGE_VOICE, o = { navigationReplace: !0 }; return null != r && (o.welcomeModalChannelId = r), a && (o.state = Q.STAGE_INVITE_STATE_KEY), null != s && (o.guildScheduledEventId = s.id), e => null != i ? i(e, o, L.default.INVITE_ACCEPT) : (0, v.transitionTo)(e, o, L.default.INVITE_ACCEPT) })(i, r)(T) } let et = function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; P.default.addConditionalChangeListener(() => { var i; let r = P.default.getChannel(e), s = V.default.getCurrentUser(); return null == r || null == s || (!r.nsfw || !!s.nsfwAllowed) && ((null == t ? void 0 : t.guildScheduledEvent) != null ? (! function(e) { let { guildScheduledEvent: t, welcomeModalChannelId: n } = e; null != t && (0, f.addPostConnectionCallback)(() => { let e = { guildScheduledEventId: t.id }; null != n && (e.welcomeModalChannelId = n), (0, N.transitionToEventDetailsFromInvite)(t, e) }) }(t), !1) : (ee({ guildId: null !== (i = r.getGuildId()) && void 0 !== i ? i : K.ME, channel: r, options: t, analyticsLocations: n }), !1)) }) }, en = async e => { let { guild_id: t, channel_id: n } = e; (0, p.isGuildScheduledEventActive)(e) && null != n ? et(n) : await j.default.transitionToGuildSync(t) }; t.default = { resolveInvite: function e(t, n, i) { return d.default.isDispatching() ? Promise.resolve().then(() => e(t, n, i)) : (d.default.dispatch({ type: "INVITE_RESOLVE", code: t }), (0, R.default)(t, n, i).then(e => { let { invite: t, code: n, banned: i } = e; return null != t ? d.default.dispatch({ type: "INVITE_RESOLVE_SUCCESS", invite: t, code: n }) : d.default.dispatch({ type: "INVITE_RESOLVE_FAILURE", code: n, banned: i }), { invite: t, code: n } })) }, getInviteContext: (e, t) => ({ location: e, location_guild_id: null != t.guild ? t.guild.id : void 0, location_channel_id: null != t.channel ? t.channel.id : void 0, location_channel_type: null != t.channel ? t.channel.type : void 0 }), async createInvite(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = arguments.length > 2 ? arguments[2] : void 0; try { let { body: i } = await u.HTTP.post({ url: K.Endpoints.INSTANT_INVITES(e), body: t, context: { location: n } }); return d.default.dispatch({ type: "INSTANT_INVITE_CREATE_SUCCESS", channelId: e, invite: i }), i } catch (t) { throw d.default.dispatch({ type: "INSTANT_INVITE_CREATE_FAILURE", channelId: e }), new _.default(t) } }, async mobileCreateInvite(e, t) { let n = k.default.getInvite(e.id); if (null != n && !n.isExpired()) return n.code; let i = { max_age: F.default.Seconds.DAY }, r = await this.createInvite(e.id, i, t).catch(() => d.default.dispatch({ type: "NATIVE_APP_INSTANT_INVITE_GDM_SHARE_FAILED" })); return null == r ? void 0 : r.code }, async getAllFriendInvites(e) { if (await new Promise(e => d.default.wait(() => e(null))), k.default.getFriendInvitesFetching()) return null != J ? J.then(e => e.body) : Promise.reject(Error("Invalid friend invite fetch request")); J = u.HTTP.get({ url: K.Endpoints.FRIEND_INVITES, context: { location: e } }), d.default.dispatch({ type: "FRIEND_INVITES_FETCH_REQUEST", requestedAt: new Date }); let { body: t } = await J; return J = null, d.default.dispatch({ type: "FRIEND_INVITES_FETCH_RESPONSE", receivedAt: new Date, invites: t }), t }, createFriendInvite: (e, t) => (d.default.dispatch({ type: "FRIEND_INVITE_CREATE_REQUEST" }), u.HTTP.post({ url: K.Endpoints.FRIEND_INVITES, body: null != e ? e : {}, context: { location: t } }).then(e => { let { body: t } = e; return d.default.dispatch({ type: "FRIEND_INVITE_CREATE_SUCCESS", invite: t }), t }, e => { throw d.default.dispatch({ type: "FRIEND_INVITE_CREATE_FAILURE", error: e }), e })), revokeFriendInvites: () => (d.default.dispatch({ type: "FRIEND_INVITE_REVOKE_REQUEST" }), u.HTTP.del({ url: K.Endpoints.FRIEND_INVITES, context: { location } }).then(e => { let { body: t } = e; d.default.dispatch({ type: "FRIEND_INVITE_REVOKE_SUCCESS", invites: t }) })), revokeFriendInvite: e => u.HTTP.del({ url: K.Endpoints.INVITE(e) }), clearInviteFromStore(e) { d.default.dispatch({ type: "INSTANT_INVITE_CLEAR", channelId: e }) }, revokeInvite(e) { let { code: t, channel: n } = e; return H.default.delete({ url: K.Endpoints.INVITE(t), oldFormErrors: !0, trackedActionData: { event: s.NetworkActionNames.INVITE_REVOKE, properties: { uses: e.uses, max_uses: e.maxUses, max_age: e.maxAge, invite_type: e.type } } }).then(() => { d.default.dispatch({ type: "INSTANT_INVITE_REVOKE_SUCCESS", code: t, channelId: n.id }) }) }, acceptInvite(e) { var t, i, r; let { inviteKey: s, context: a, callback: o, skipOnboarding: l } = e, _ = (0, C.parseExtraDataFromInviteKey)(s), E = _.baseCode, I = y.default.getSessionId(); let T = (i = a, r = _, { ...i, invite_guild_scheduled_event_id: r.guildScheduledEventId }), f = V.default.getCurrentUser(); return null !== (t = null == f ? void 0 : f.hasFlag(K.UserFlags.QUARANTINED)) && void 0 !== t && t ? ((0, g.default)(), new Promise((e, t) => t(Error()))) : (d.default.dispatch({ type: "INVITE_ACCEPT", code: E }), u.HTTP.post({ url: K.Endpoints.INVITE(E), context: T, oldFormErrors: !0, body: { session_id: I } }).then(async e => { var t, i; d.default.dispatch({ type: "INVITE_ACCEPT_SUCCESS", invite: e.body, code: E }); let r = p.default.getGuildScheduledEvent(_.guildScheduledEventId), s = { ...e.body, guild_scheduled_event: r }, a = null !== (i = null == s ? void 0 : s.guild_id) && void 0 !== i ? i : null == s ? void 0 : null === (t = s.guild) || void 0 === t ? void 0 : t.id; if (!l && null != a && s.new_member) { let { default: e } = await Promise.resolve().then(n.bind(n, "17181")); await e({ guildId: a }) } return null == o || o(s), e.body }, e => { var t, n; throw d.default.dispatch({ type: "INVITE_ACCEPT_FAILURE", code: E, error: { message: null === (t = e.body) || void 0 === t ? void 0 : t.message, code: null === (n = e.body) || void 0 === n ? void 0 : n.code } }), new c.default(e) })) }, acceptInviteAndTransitionToInviteChannel(e) { let { inviteKey: t, context: n, analyticsLocations: i, callback: r, skipOnboarding: s } = e; return this.acceptInvite({ inviteKey: t, context: n, skipOnboarding: s, callback: e => { if (null != e.channel) { let t = $(e); et(e.channel.id, t, null != i ? i : []) } null != r && r(e) } }) }, transitionToInvite(e, t) { var n, i, r; let { channel: s, guild: a } = e; if (null != a && (null === (n = a.features) || void 0 === n ? void 0 : n.includes(K.GuildFeatures.HUB))) { O.default.onOpenHubInvite(e); return } if (null != a && (null === (i = a.features) || void 0 === i ? void 0 : i.includes(K.GuildFeatures.COMMUNITY)) && (null === (r = a.features) || void 0 === r ? void 0 : r.includes(K.GuildFeatures.MEMBER_VERIFICATION_GATE_ENABLED)) && !a.features.includes(K.GuildFeatures.PREVIEW_ENABLED)) { (0, v.transitionTo)(K.Routes.GUILD_MEMBER_VERIFICATION(a.id, e.code)); return } if (null == s) return; let o = $(e); null != t && (o.transitionTo = t), ee({ guildId: null != a ? a.id : K.ME, channel: s, options: o }) }, transitionToInviteSync(e, t, n) { if (null != e.channel) { let i = $(e); this.transitionToInviteChannelSync(e.channel.id, { ...i, intent: n, transitionTo: t }) } }, openNativeAppModal(e) { T.default.openNativeAppModal(e, K.RPCCommands.INVITE_BROWSER) }, openApp(e, t, n, i, s) { var u, _; let c; let E = null != e ? (0, C.parseExtraDataFromInviteKey)(e) : null, I = null == E ? void 0 : E.baseCode; if (d.default.dispatch({ type: "INVITE_APP_OPENING", code: e }), null != r().ua && r().ua.toLowerCase().indexOf("googlebot") > -1) { d.default.dispatch({ type: "INVITE_APP_NOT_OPENED", code: e }); return } if ((null === (u = r().os) || void 0 === u ? void 0 : u.family) === "Android" || (null === (_ = r().os) || void 0 === _ ? void 0 : _.family) === "iOS") { let e = null != I ? (0, a.getInviteDynamicLinkTemplate)(I) : (0, a.getDefaultDynamicLinkTemplate)(), t = (0, o.generateAttemptId)(); c = (0, o.default)(e, { utmSource: 2 === s ? "friend_invite" : q, fingerprint: n, username: i, attemptId: t, event: null == E ? void 0 : E.guildScheduledEventId, iosFallbackLink: "https://discord.com/api/download/mobile?invite_code=".concat(I) }), x.default.track(K.AnalyticEvents.DEEP_LINK_CLICKED, { fingerprint: (0, l.maybeExtractId)(n), attempt_id: t, source: q, invite_code: I }) } else "#" === (c = null != t ? K.Routes.INVITE_PROXY(t) : "")[0] && (c = c.slice(1)), c = "discord://".concat(c); Y.default.launch(c, t => { d.default.dispatch(t ? { type: "INVITE_APP_OPENED", code: e } : { type: "INVITE_APP_NOT_OPENED", code: e }) }) }, transitionToInviteChannelSync: et } }, 85235: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("718745"), a = n("981631"); t.default = { search(e, t) { null == s.default.getResults(e, t) && (r.default.dispatch({ type: "INTEGRATION_QUERY", integration: e, query: t }), i.HTTP.get({ url: a.Endpoints.INTEGRATION_SEARCH("tenor"), query: { q: t }, oldFormErrors: !0 }).then(n => { r.default.dispatch({ type: "INTEGRATION_QUERY_SUCCESS", integration: e, query: t, results: n.body }) }, () => r.default.dispatch({ type: "INTEGRATION_QUERY_FAILURE", integration: e, query: t }))) } } }, 37234: function(e, t, n) { "use strict"; n.r(t), n.d(t, { popAllLayers: function() { return a }, popLayer: function() { return s }, pushLayer: function() { return r } }); var i = n("570140"); function r(e) { i.default.dispatch({ type: "LAYER_PUSH", component: e }) } function s() { i.default.dispatch({ type: "LAYER_POP" }) } function a() { i.default.dispatch({ type: "LAYER_POP_ALL" }) } }, 765250: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createLayout: function() { return s }, createWidget: function() { return _ }, createWidgets: function() { return c }, deleteAllWidgets: function() { return d }, deleteWidget: function() { return u }, setTopWidget: function() { return o }, setWidgetLayout: function() { return a }, togglePinned: function() { return l } }); var i = n("570140"), r = n("145597"); function s(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : r.OVERLAY_DEFAULT_RESOLUTION; i.default.dispatch({ type: "LAYOUT_CREATE", layoutId: e, widgets: t, defaultResolution: n }) } function a(e, t, n) { i.default.dispatch({ type: "LAYOUT_UPDATE_WIDGET", widgetId: e, anchor: t, size: n }) } function o(e) { i.default.dispatch({ type: "LAYOUT_SET_TOP_WIDGET", widgetId: e }) } function l(e) { i.default.dispatch({ type: "LAYOUT_SET_PINNED", widgetId: e }) } function u(e) { i.default.dispatch({ type: "LAYOUT_DELETE_WIDGET", widgetId: e }) } function d(e) { i.default.dispatch({ type: "LAYOUT_DELETE_ALL_WIDGETS", layoutId: e }) } function _(e) { c([e]) } function c(e) { i.default.dispatch({ type: "LAYOUT_CREATE_WIDGETS", widgetConfigs: e }) } }, 978085: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createTestModeLibraryApplications: function() { return u }, fetchLibrary: function() { return l }, setActiveLaunchOptionId: function() { return d } }); var i = n("544891"), r = n("570140"), s = n("85521"), a = n("73346"), o = n("981631"); async function l() { try { let e = await (0, a.httpGetWithCountryCodeQuery)({ url: o.Endpoints.LIBRARY, oldFormErrors: !0 }, !1); r.default.dispatch({ type: "LIBRARY_FETCH_SUCCESS", libraryApplications: e.body }) } catch (e) { r.default.dispatch({ type: "LIBRARY_FETCH_FAIL", error: e }) } } async function u(e) { let t = e.primarySkuId; if (null == t) return; let n = (await i.HTTP.get({ url: o.Endpoints.APPLICATION_BRANCH_LIST(e.id), oldFormErrors: !0 }).then(e => e.body)).map(n => s.default.createForTestMode({ id: e.id, skuId: t, branch: n })); r.default.dispatch({ type: "LIBRARY_APPLICATIONS_TEST_MODE_ENABLED", libraryApplications: n }) } function d(e, t, n) { r.default.dispatch({ type: "LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE", applicationId: e, branchId: t, launchOptionId: n }) } }, 58642: function(e, t, n) { "use strict"; n.r(t), n.d(t, { updateFlags: function() { return a } }); var i = n("544891"), r = n("570140"), s = n("981631"); function a(e, t, n) { return r.default.dispatch({ type: "LIBRARY_APPLICATION_FLAGS_UPDATE_START", applicationId: e, branchId: t, flags: n }), i.HTTP.patch({ url: s.Endpoints.LIBRARY_APPLICATION_BRANCH(e, t), body: { flags: n }, oldFormErrors: !0 }).then(e => { r.default.dispatch({ type: "LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS", libraryApplication: e.body }) }) } }, 45986: function(e, t, n) { "use strict"; n.r(t), n.d(t, { trustDomain: function() { return r }, trustProtocol: function() { return s } }); var i = n("570140"); function r(e) { i.default.dispatch({ type: "MASKED_LINK_ADD_TRUSTED_DOMAIN", url: e }) } function s(e) { i.default.dispatch({ type: "MASKED_LINK_ADD_TRUSTED_PROTOCOL", url: e }) } }, 904245: function(e, t, n) { "use strict"; n.r(t), n("411104"), n("627341"), n("47120"), n("789020"); var i = n("278074"), r = n("873546"), s = n("544891"), a = n("780384"), o = n("570140"), l = n("89892"), u = n("673750"), d = n("367907"), _ = n("287328"), c = n("86670"), E = n("685736"), I = n("970606"), T = n("960904"), f = n("830121"), S = n("710845"), h = n("163268"), A = n("38618"), m = n("687516"), N = n("539573"), p = n("826581"), O = n("409059"), C = n("264229"), R = n("366980"), g = n("779832"), L = n("459618"), v = n("541288"), D = n("3148"), M = n("48854"), y = n("785359"), P = n("646504"), U = n("64078"), b = n("351780"), G = n("79390"), w = n("643266"), k = n("617136"); n("807092"); var B = n("869765"), V = n("926491"), x = n("467798"), F = n("346479"), H = n("218543"), Y = n("199902"), j = n("314897"), W = n("592125"); n("323873"); var K = n("701190"), z = n("375954"), Z = n("496675"), X = n("158776"), Q = n("306680"), q = n("944486"), J = n("914010"), $ = n("300429"), ee = n("594174"), et = n("626135"), en = n("70956"), ei = n("630388"), er = n("669079"), es = n("63063"), ea = n("74538"), eo = n("709054"), el = n("668781"), eu = n("981631"), ed = n("176505"), e_ = n("58346"), ec = n("689938"); let eE = new S.default("MessageActionCreators"), eI = new S.default("MessageQueue"), eT = !1; class ef { markComplete() { this.completed = !0 } constructor() { var e, t, n; e = this, n = !1, (t = "completed") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } function eS(e) { let { inviteKey: t, channelId: n, messageId: i, location: r, suggested: s = null, overrideProperties: a = {} } = e, o = (0, C.parseExtraDataFromInviteKey)(t), l = W.default.getChannel(n); if (null != l) { let e = null; l.isMultiUserDM() ? e = eu.LoggingInviteTypes.GDM_INVITE : !l.isPrivate() && (e = eu.LoggingInviteTypes.SERVER_INVITE); let n = {}, _ = K.default.getInvite(t); if (null != _ && _.state === eu.InviteStates.RESOLVED && null != _.channel) { var u; let t = _.channel; n.invite_channel_id = t.id, n.invite_guild_id = null === (u = _.guild) || void 0 === u ? void 0 : u.id, n.invite_channel_type = t.type, null != _.inviter && (n.invite_inviter_id = _.inviter.id); let i = Y.default.getLastActiveStream(); if (null != i && i.channelId === t.id) { e = eu.LoggingInviteTypes.STREAM, n.destination_user_id = i.ownerId; let t = (0, m.getStreamerApplication)(i, X.default); n.application_id = null != t ? t.id : null } } null != s && (n.is_suggested = s.isAffinitySuggestion, n.row_num = s.rowNum, n.num_total = s.numTotal, n.num_affinity_connections = s.numAffinityConnections, n.is_filtered = s.isFiltered), n = { ...n, location: r, invite_type: e, invite_code: o.baseCode, guild_id: l.getGuildId(), channel_id: l.id, message_id: i, send_type: eu.SendTypes.DIRECT_MESSAGE, invite_guild_scheduled_event_id: o.guildScheduledEventId, ...a }, d.default.trackWithMetadata(eu.AnalyticEvents.INVITE_SENT, n) } else { let e = {}, n = K.default.getInvite(t); null != n && n.state === eu.InviteStates.RESOLVED && null != n.inviter && (e.invite_inviter_id = n.inviter.id, e = { ...e, location: r, invite_type: eu.LoggingInviteTypes.FRIEND_INVITE, invite_code: o.baseCode, message_id: i, send_type: eu.SendTypes.DIRECT_MESSAGE, invite_guild_scheduled_event_id: o.guildScheduledEventId, ...a }, d.default.trackWithMetadata(eu.AnalyticEvents.INVITE_SENT, e)) } } let eh = { [eu.AbortCodes.EMAIL_VERIFICATION_REQUIRED]: { messageName: "BOT_REQUIRES_EMAIL_VERIFICATION", messageGetter: () => ec.default.Messages.BOT_REQUIRES_EMAIL_VERIFICATION }, [eu.AbortCodes.INVALID_MESSAGE_SEND_USER]: { messageName: "BOT_DM_SEND_FAILED_WITH_HELP_LINK", messageGetter: () => ec.default.Messages.BOT_DM_SEND_FAILED_WITH_HELP_LINK.format({ helpUrl: es.default.getArticleURL(eu.HelpdeskArticles.DM_COULD_NOT_BE_DELIVERED) }) }, [eu.AbortCodes.RATE_LIMIT_DM_OPEN]: { messageName: "BOT_DM_RATE_LIMITED", messageGetter: () => ec.default.Messages.BOT_DM_RATE_LIMITED }, [eu.AbortCodes.SEND_MESSAGE_TEMPORARILY_DISABLED]: { messageName: "BOT_DM_SEND_MESSAGE_TEMPORARILY_DISABLED", messageGetter: () => ec.default.Messages.BOT_DM_SEND_MESSAGE_TEMPORARILY_DISABLED }, [eu.AbortCodes.SLOWMODE_RATE_LIMITED]: { messageName: "BOT_DM_SEND_MESSAGE_TEMPORARILY_DISABLED", messageGetter: () => ec.default.Messages.BOT_DM_SEND_MESSAGE_TEMPORARILY_DISABLED } }, eA = { receiveMessage(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}; o.default.dispatch({ type: "MESSAGE_CREATE", channelId: e, message: t, optimistic: n, sendMessageOptions: i, isPushNotification: !1 }) }, sendBotMessage(e, t, n, i) { null != n && d.default.trackWithMetadata(eu.AnalyticEvents.AUTOMATED_MESSAGE_RECEIVED, { message_author: "Clyde", message_name: n }), eA.receiveMessage(e, (0, D.createBotMessage)({ messageId: i, channelId: e, content: t, loggingName: n })) }, sendClydeError(e) { let t, n, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, r = W.default.getChannel(e); null != r && (i === eu.AbortCodes.SLOWMODE_RATE_LIMITED ? (t = ec.default.Messages.CHANNEL_SLOWMODE_DESC.format({ seconds: r.rateLimitPerUser }), n = "SLOWMODE_RATE_LIMITED") : i === eu.AbortCodes.INVALID_MESSAGE_SEND_USER ? (t = ec.default.Messages.BOT_DM_SEND_FAILED_WITH_HELP_LINK.format({ helpUrl: es.default.getArticleURL(eu.HelpdeskArticles.DM_COULD_NOT_BE_DELIVERED) }), n = "INVALID_MESSAGE_SEND_USER") : i === eu.AbortCodes.TOO_MANY_THREADS ? (t = r.isForumLikeChannel() || r.isForumPost() ? ec.default.Messages.BOT_DM_TOO_MANY_POSTS : ec.default.Messages.BOT_DM_TOO_MANY_THREADS, n = "TOO_MANY_THREADS") : i === eu.AbortCodes.TOO_MANY_ANNOUNCEMENT_THREADS ? (t = ec.default.Messages.BOT_DM_TOO_MANY_ANNOUNCEMENT_THREADS, n = "TOO_MANY_ANNOUNCEMENT_THREADS") : i === eu.AbortCodes.HARMFUL_LINK_MESSAGE_BLOCKED ? (t = ec.default.Messages.HARMFUL_LINK_MESSAGE_BLOCKED_ERROR.format({ helpUrl: eu.MarketingURLs.HARMFUL_LINKS }), n = "HARMFUL_LINK_MESSAGE_BLOCKED") : i in eh ? (n = eh[i].messageName, t = eh[i].messageGetter()) : (t = ec.default.Messages.BOT_DM_SEND_FAILED_WITH_HELP_LINK.format({ helpUrl: es.default.getArticleURL(eu.HelpdeskArticles.DM_COULD_NOT_BE_DELIVERED) }), n = "SEND_FAILED (".concat(i, ")")), eA.sendBotMessage(e, t, n)) }, sendExplicitMediaClydeError(e, t, n) { let r = W.default.getChannel(e); if (null == r) return; let { message: s, messageName: a } = (0, i.match)({ isDM: r.isDM(), isGDM: r.isGroupDM() }).with({ isDM: !0 }, () => ({ message: ec.default.Messages.SENDER_BLOCKED_MEDIA_BOT_DMS_MESSAGE, messageName: "BOT_DM_EXPLICIT_CONTENT" })).with({ isDM: !1, isGDM: !0 }, () => ({ message: ec.default.Messages.SENDER_BLOCKED_MEDIA_BOT_DMS_MESSAGE, messageName: "BOT_GDM_EXPLICIT_CONTENT" })).otherwise(() => ({ message: ec.default.Messages.SENDER_BLOCKED_MEDIA_BOT_GUILD_MESSAGE, messageName: "BOT_GUILD_EXPLICIT_CONTENT" })), l = (0, M.createNonce)(); eA.sendBotMessage(e, s, a, l), (0, h.trackMediaRedactionAction)({ action: h.TrackMediaRedactionActionType.EXPLICIT_MEDIA_FALSE_POSITIVE_CLYDE_MESSAGE_SENT, messageId: l, channelId: e, context: n }), null != t && t.length > 0 && o.default.dispatch({ type: "MESSAGE_EXPLICIT_CONTENT_FP_CREATE", messageId: l, channelId: e, attachments: t }) }, truncateMessages(e, t, n) { o.default.dispatch({ type: "TRUNCATE_MESSAGES", channelId: e, truncateBottom: t, truncateTop: n }) }, clearChannel(e) { o.default.dispatch({ type: "CLEAR_MESSAGES", channelId: e }) }, jumpToPresent(e, t) { eA.trackJump(e, null, "Present"); let n = { present: !0 }; z.default.hasPresent(e) ? o.default.dispatch({ type: "LOAD_MESSAGES_SUCCESS_CACHED", jump: n, channelId: e, limit: t }) : eA.fetchMessages({ channelId: e, limit: t, jump: n }) }, trackJump(e, t, n, i) { d.default.trackWithMetadata(eu.AnalyticEvents.JUMP, { context: n, channel_id: e, message_id: t, ...i }) }, jumpToMessage(e) { let { channelId: t, messageId: n, flash: i = !1, offset: r, context: s, extraProperties: a = null, isPreload: o, returnMessageId: l, skipLocalFetch: u, jumpType: d } = e; return "string" == typeof s && eA.trackJump(t, n, s, a), eA.fetchMessages({ channelId: t, limit: eu.MAX_MESSAGES_FOR_JUMP, jump: { messageId: n, flash: i, offset: r, returnMessageId: l, jumpType: d }, isPreload: o, skipLocalFetch: u }) }, focusMessage(e) { let { channelId: t, messageId: n } = e; eA.fetchMessages({ channelId: t, limit: eu.MAX_MESSAGES_FOR_JUMP, focus: { messageId: n } }) }, fetchMessages(e) { let { channelId: t, before: n, after: i, limit: r, jump: a, focus: u, isPreload: d, skipLocalFetch: _, truncate: c } = e, E = W.default.getChannel(t), I = A.default.isConnectedOrOverlay(), T = Date.now(); if (null != E && E.type === eu.ChannelTypes.GUILD_STORE) return !1; if (t === ed.FAKE_PLACEHOLDER_PRIVATE_CHANNEL_ID) return; if (eE.log("Fetching messages for ".concat(t, " between ").concat(n, " and ").concat(i, ". jump=").concat(JSON.stringify(a))), eA._tryFetchMessagesCached({ channelId: t, before: n, after: i, limit: r, jump: a, focus: u, truncate: c })) return; H.default.fetchMessages.recordStart(); let f = null != a ? a : void 0; null == f && null != u && (f = { ...u }); let S = l.default.getOrCreate(t).loadStart(f); l.default.commit(S), o.default.dispatch({ type: "LOAD_MESSAGES" }); let h = null == f ? void 0 : f.messageId, m = new ef; return !_ && this.fetchLocalMessages(t, n, i, r, m), s.HTTP.get({ url: eu.Endpoints.MESSAGES(t), query: { before: n, after: i, limit: r, around: h, preload: d }, retries: 2, oldFormErrors: !0 }).then(e => (H.default.fetchMessages.recordEnd(), H.default.dispatchMessages.measure(() => { let s = e.body, l = null != n, u = null != i, d = null == n && null == i, _ = null != h || s.length === r && (l || d), E = null != h || u && s.length === r; if (null != h) { let e = Math.floor(r / 2), n = [h, ...s.map(e => { let { id: t } = e; return t })].filter((e, t, n) => n.indexOf(e) === t).sort(eo.default.compare).indexOf(h); if (n < e && (_ = !1), s.length - n < e && (E = !1), E && s.length > 0) { let e = Q.default.lastMessageId(t); s[0].id === e && (E = !1) } } eE.log("Fetched ".concat(s.length, " messages for ").concat(t, " isBefore:").concat(l, " isAfter:").concat(u)), m.markComplete(), o.default.dispatch({ type: "LOAD_MESSAGES_SUCCESS", channelId: t, messages: s, isBefore: l, isAfter: u, hasMoreBefore: _, hasMoreAfter: E, limit: r, jump: a, isStale: !I || A.default.lastTimeConnectedChanged() >= T, truncate: c }) }), !0), () => (eE.log("Failed to fetch messages for ".concat(t)), o.default.dispatch({ type: "LOAD_MESSAGES_FAILURE", channelId: t }), !1)) }, async fetchLocalMessages(e, t, n, i, r) { let s = W.default.getBasicChannel(e), a = l.default.getOrCreate(e), u = _.default.database(); if (null == u || null == s || null != t || null != n) { H.default.addLocalMessages(e, -1); return } if (a.ready && !a.cached) { H.default.addLocalMessages(e, -2); return } let d = await (0, c.tryLoadAsync)(() => E.default.load(u, e, i)); if (null == d) { H.default.addLocalMessages(e, -3); return } if (eE.log("fetched ".concat(d.messages.length, " messages from local database (channel_id: ").concat(e, ", remote_fetch_completed: ").concat(r.completed, ")")), H.default.addLocalMessages(e, d.messages.length), !r.completed && d.messages.length > 0) { let t = d.messages.length >= i && d.connectionId === A.default.lastTimeConnectedChanged(); o.default.dispatch({ type: "LOCAL_MESSAGES_LOADED", guildId: s.guild_id, channelId: e, users: d.users, members: d.members, messages: d.messages, stale: !t }) } }, async fetchNewLocalMessages(e, t) { var n; let i = W.default.getBasicChannel(e), r = _.default.database(); if (null == r || null == i) return; let s = l.default.getOrCreate(e); if (s.hasMoreAfter) return; let a = await (0, c.tryLoadAsync)(() => E.default.load(r, e, t)); if (null == a) return; let u = null === (n = (s = l.default.getOrCreate(e)).last()) || void 0 === n ? void 0 : n.id, d = null == u ? a.messages : a.messages.filter(e => eo.default.compare(e.id, u) > 0); eE.log("Fetched ".concat(a.messages.length, " messages from the cache after foregrounding. ").concat(d.length, " are new")), 0 !== d.length && o.default.dispatch({ type: "LOCAL_MESSAGES_LOADED", guildId: i.guild_id, channelId: e, users: a.users, members: a.members, messages: d, stale: !0 }) }, _tryFetchMessagesCached(e) { let { channelId: t, before: n, after: i, limit: r, jump: s, focus: a, truncate: l } = e, u = z.default.getMessages(t); if (u.cached || !u.ready) return !1; if ((null == s ? void 0 : s.messageId) != null || (null == a ? void 0 : a.messageId) != null) { if ((null == s ? void 0 : s.messageId) != null && u.has(s.messageId, !1)) return o.default.dispatch({ type: "LOAD_MESSAGES_SUCCESS_CACHED", channelId: t, jump: s, limit: r, truncate: l }), !0; if ((null == a ? void 0 : a.messageId) != null) { if (u.has(a.messageId, !1)) return o.default.dispatch({ type: "LOAD_MESSAGES_SUCCESS_CACHED", channelId: t, focus: a, limit: r, truncate: l }), !0; s = { ...a } } let e = (null == s ? void 0 : s.messageId) != null ? eo.default.extractTimestamp(null == s ? void 0 : s.messageId) : 0, n = u.first(), i = u.last(); if (!u.hasMoreBefore && null != n && eo.default.extractTimestamp(n.id) >= e || !u.hasMoreAfter && null != i && eo.default.extractTimestamp(i.id) <= e || null != n && null != i && eo.default.extractTimestamp(n.id) < e && eo.default.extractTimestamp(i.id) > e) return o.default.dispatch({ type: "LOAD_MESSAGES_SUCCESS_CACHED", channelId: t, jump: s, limit: eu.MAX_MESSAGES_FOR_JUMP }), !0 } else if (null != n && u.hasBeforeCached(n)) return o.default.dispatch({ type: "LOAD_MESSAGES_SUCCESS_CACHED", channelId: t, before: n, limit: r, truncate: l }), !0; else if (null != i && u.hasAfterCached(i)) return o.default.dispatch({ type: "LOAD_MESSAGES_SUCCESS_CACHED", channelId: t, after: i, limit: r, truncate: l }), !0; return !1 }, async sendMessage(e, t) { var n; let i = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}; if (t.reaction) return Promise.resolve(); let s = await (0, w.default)(e); if (null != s) return eA.sendMessage(s, t, i, r); let a = g.default.backgroundify(() => eA._sendMessage(e, t, r), void 0), o = null !== (n = r.nonce) && void 0 !== n ? n : (0, M.createNonce)(); return (r = { ...r, nonce: o }, L.default.recordMessageSendAttempt(e, o), z.default.isReady(e)) ? a() : i && e !== ed.FAKE_PLACEHOLDER_PRIVATE_CHANNEL_ID ? (eI.info("Waiting for channel ".concat(e, " to be ready before sending.")), new Promise((t, n) => { z.default.whenReady(e, () => { eI.info("Channel ".concat(e, " is ready for sending now.")), a().then(t, n) }) })) : a() }, getSendMessageOptionsForReply(e) { var t; if (null == e) return {}; let n = { guild_id: null !== (t = e.channel.getGuildId()) && void 0 !== t ? t : void 0, channel_id: e.channel.id, message_id: e.message.id }; return { messageReference: n, allowedMentions: e.shouldMention ? void 0 : { parse: Object.values(eu.AllowedMentionTypes), replied_user: !1 } } }, sendInvite: (e, t, n, i) => eA._sendMessage(e, { content: (0, R.default)(t), tts: !1, validNonShortcutEmojis: [], invalidEmojis: [] }, { location: n, suggestedInvite: null != i ? i : void 0 }), sendActivityBookmark: (e, t, n, i) => eA._sendMessage(e, { content: t, tts: !1, validNonShortcutEmojis: [], invalidEmojis: [] }, { location: n, suggestedInvite: null != i ? i : void 0 }), sendStickers(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "", i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, r = arguments.length > 4 && void 0 !== arguments[4] && arguments[4]; return eA._sendMessage(e, { content: n, invalidEmojis: [], validNonShortcutEmojis: [], tts: r }, { ...i, stickerIds: t }) }, sendGreetMessage(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, { messageReference: i, allowedMentions: r } = n; return s.HTTP.post({ url: eu.Endpoints.MESSAGES_GREET(e), body: { sticker_ids: [t], allowed_mentions: r, message_reference: i }, oldFormErrors: !0 }).then(n => (v.default.donateSentMessage(n.body.content, e), eA.receiveMessage(e, n.body), o.default.dispatch({ type: "STICKER_TRACK_USAGE", stickerIds: [t] }), n), t => { throw eE.log("Failed to send greeting"), 429 !== t.status && eA.sendClydeError(e, t.body.code), o.default.dispatch({ type: "MESSAGE_SEND_FAILED", messageId: t.body.id, channelId: e }), t }) }, sendPollMessage(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; return eA._sendMessage(e, { content: "", tts: !1, validNonShortcutEmojis: [], invalidEmojis: [] }, { ...n, poll: t }) }, _sendMessage(e, t, n) { var i, s, a; let l = (0, w.default)(e); if (null != l) return eI.info("Converting channel to a private channel"), l.then(e => { eI.info("Finished converting channel to a private channel"), eA._sendMessage(e, t, n) }); let _ = t.content, { invalidEmojis: c, validNonShortcutEmojis: E, tts: S = !1 } = t, { activityAction: h, location: A, suggestedInvite: m, stickerIds: C, messageReference: R, allowedMentions: g, poll: P } = n, B = null !== (s = n.flags) && void 0 !== s ? s : 0, [F, H] = (0, x.default)(_); F && (_ = H, B = (0, ei.addFlag)(B, eu.MessageFlags.SUPPRESS_NOTIFICATIONS)); let Y = (null === (i = n.messageReference) || void 0 === i ? void 0 : i.type) === eu.MessageReferenceTypes.FORWARD; if ("" === _ && null == h && null == C && null == P && !Y) return Promise.resolve(); let K = null != R ? eu.MessageTypes.REPLY : eu.MessageTypes.DEFAULT, z = null !== (a = n.nonce) && void 0 !== a ? a : (0, M.createNonce)(); if (!1 !== n.eagerDispatch) { let t = (0, D.default)({ channelId: e, content: _, tts: S, type: K, messageReference: R, allowedMentions: g, flags: 0 !== B ? B : void 0, nonce: z, poll: (0, G.createPollServerDataFromCreateRequest)(P) }); (0, U.updateComboOnMessageSend)(e, t.id), null != C && (t.sticker_items = C.map(e => V.default.getStickerById(e)).filter(e => null != e)), eA.receiveMessage(e, t, !0, n) } if (!eT && null != c && c.length > 0) { let t, n; eT = !0; let i = ee.default.getCurrentUser(); c.some(e => e.animated) && !ea.default.canUseAnimatedEmojis(i) ? (t = ec.default.Messages.INVALID_ANIMATED_EMOJI_BODY_UPGRADE, n = "INVALID_ANIMATED_EMOJI_BODY") : Z.default.canWithPartialContext(eu.Permissions.USE_EXTERNAL_EMOJIS, { channelId: e }) ? (t = ec.default.Messages.INVALID_EXTERNAL_EMOJI_BODY_UPGRADE, n = "INVALID_EXTERNAL_EMOJI_BODY_UPGRADE") : (t = ec.default.Messages.INVALID_EXTERNAL_EMOJI_BODY, n = "INVALID_EXTERNAL_EMOJI_BODY"), eA.sendBotMessage(e, t, n) } let X = { type: u.MessageDataType.SEND, message: { channelId: e, content: _, nonce: z, tts: S, message_reference: R, allowed_mentions: g, flags: B } }; if (null != h) { let e = h.type === eu.ActivityActionTypes.JOIN_REQUEST ? null == h ? void 0 : h.activity.session_id : j.default.getSessionId(); if (null != e) { let t = { type: h.type, session_id: e }, { activity: n } = h; null != n.party && null != n.party.id && (t.party_id = n.party.id), X.message.application_id = n.application_id, X.message.activity = t } } return null != P && (X.message.poll = P), null != C && (X.message.sticker_ids = C), b.default.isEnabled() && (X.message.has_poggermode_enabled = !0), new Promise((t, i) => { let s = Date.now(), a = u.default.length, l = Math.floor(1e4 * Math.random()); eI.info("Queueing message to be sent LogId:".concat(l)), u.default.enqueue(X, l => { let u = Date.now() - s; if (l.ok) { v.default.donateSentMessage(_, e), eA.receiveMessage(e, l.body, !0, { sendAnalytics: { duration: u, queueSize: a }, poll: P }); let i = eo.default.cast(e), s = p.default.getRequest(i); if (null != s) { let { guildId: t, userId: n, applicationStatus: i } = s; (0, I.trackClanSendInterviewMessage)({ guildId: t, channelId: e, messageId: l.body.id, joinRequestStatus: i, joinRequestUserId: n }) } L.default.recordMessageSendApiResponse(z), o.default.dispatch({ type: "SLOWMODE_RESET_COOLDOWN", slowmodeType: $.SlowmodeType.SendMessage, channelId: e }), o.default.dispatch({ type: "EMOJI_TRACK_USAGE", emojiUsed: E }), o.default.dispatch({ type: "STICKER_TRACK_USAGE", stickerIds: C }), o.default.dispatch({ type: "LOCAL_MESSAGE_CREATE", message: { channel_id: e, author: ee.default.getCurrentUser() } }), ! function(e) { let { content: t, channelId: n, messageId: i, location: s, suggested: a = null, overrideProperties: o = {} } = e; (0, f.default)(t).forEach(e => { let { type: t, code: l } = e; if (t === T.CodedLinkType.INVITE) eS({ inviteKey: l, channelId: n, messageId: i, location: s, suggested: a, overrideProperties: o }); else if (t === T.CodedLinkType.TEMPLATE) { let e = O.default.getGuildTemplate(l); if (null == e || e.state === e_.GuildTemplateStates.RESOLVING) return; d.default.trackWithMetadata(eu.AnalyticEvents.GUILD_TEMPLATE_LINK_SENT, { guild_template_code: l, guild_template_name: e.name, guild_template_description: e.description, guild_template_guild_id: e.sourceGuildId }) } else if (t === T.CodedLinkType.BUILD_OVERRIDE); else if (t === T.CodedLinkType.MANUAL_BUILD_OVERRIDE); else if (t === T.CodedLinkType.EVENT); else if (t === T.CodedLinkType.CHANNEL_LINK); else if (t === T.CodedLinkType.APP_DIRECTORY_PROFILE) et.default.track(eu.AnalyticEvents.APP_DIRECTORY_PROFILE_EMBED_SENT, { application_id: l, device_platform: r.isMobile ? "mobile_web" : "desktop_web", guild_id: J.default.getGuildId(), channel_id: q.default.getChannelId() }); else if (t === T.CodedLinkType.ACTIVITY_BOOKMARK); else if (t === T.CodedLinkType.EMBEDDED_ACTIVITY_INVITE); else if (t === T.CodedLinkType.GUILD_PRODUCT); else if (t === T.CodedLinkType.SERVER_SHOP); else if (t === T.CodedLinkType.QUESTS_EMBED)(0, k.trackQuestEvent)({ questId: l, event: eu.AnalyticEvents.QUEST_LINK_SHARED, trackGuildAndChannelMetadata: !0 }); else throw Error("Unknown coded link type: ".concat(t)) }) }({ content: _, channelId: e, messageId: l.body.id, location: null != A ? A : "chat_input", suggested: m }), ! function(e, t, n, i, r) { (0, er.findGiftCodes)(e).forEach(e => { let s = W.default.getChannel(t); null != s && d.default.trackWithMetadata(eu.AnalyticEvents.GIFT_CODE_SENT, { location: i, gift_code: e, guild_id: s.getGuildId(), channel_id: s.id, channel_type: s.type, message_id: n, automatic_send: r }) }) }(_, e, l.body.id, null != A ? A : "chat_input", !!n.isGiftLinkSentOnBehalfOfUser), t(l) } else { var c; eE.log("Failed to send message", { hasErr: l.hasErr, status: l.status, code: null === (c = l.body) || void 0 === c ? void 0 : c.code, error: l.err }); let t = !1; if (l.hasErr) "ABORTED" === l.err.code && (t = !0); else if (l.status >= 400 && l.status < 500 && l.body) { if (l.body.code === eu.AbortCodes.SLOWMODE_RATE_LIMITED) { let t = l.body.retry_after; null != t && t > 0 && o.default.dispatch({ type: "SLOWMODE_SET_COOLDOWN", channelId: e, slowmodeType: $.SlowmodeType.SendMessage, cooldownMs: t * en.default.Millis.SECOND }) } else N.AUTOMOD_ERROR_CODES.has(l.body.code) ? o.default.dispatch({ type: "MESSAGE_SEND_FAILED_AUTOMOD", messageData: X, errorResponseBody: { code: l.body.code, message: l.body.message } }) : l.body.code === eu.AbortCodes.POGGERMODE_TEMPORARILY_DISABLED ? o.default.dispatch({ type: "POGGERMODE_TEMPORARILY_DISABLED" }) : null != P || Y || eA.sendClydeError(e, l.body.code) } t ? eA.deleteMessage(e, z, !0) : (o.default.dispatch({ type: "MESSAGE_SEND_FAILED", messageId: z, channelId: e }), (0, y.logMessageSendFailure)({ failureCode: l.hasErr ? void 0 : l.status, errorMessage: l.hasErr ? l.err.message : void 0 })), i(l) } }, l) }) }, startEditMessage(e, t, n, i) { o.default.dispatch({ type: "MESSAGE_START_EDIT", channelId: e, messageId: t, content: n, source: i }) }, updateEditMessage(e, t, n) { o.default.dispatch({ type: "MESSAGE_UPDATE_EDIT", channelId: e, textValue: t, richValue: n }) }, endEditMessage(e, t) { o.default.dispatch({ type: "MESSAGE_END_EDIT", channelId: e, response: t }) }, async editMessage(e, t, n) { let { content: i } = n; await F.default.unarchiveThreadIfNecessary(e); let r = function(e, t) { let n = z.default.getMessage(e, t); if (null == n || n.type !== eu.MessageTypes.REPLY) return; let i = B.default.getMessageByReference(n.messageReference); if (i.state === B.ReferencedMessageState.LOADED) { if (!n.mentions.includes(i.message.author.id)) return { parse: Object.values(eu.AllowedMentionTypes), replied_user: !1 } } }(e, t), s = { channelId: e, messageId: t, content: i, allowed_mentions: r }; u.default.enqueue({ type: u.MessageDataType.EDIT, message: s }, n => { let i = !n.hasErr && N.AUTOMOD_ERROR_CODES.has(n.body.code); if (i) { let e = { type: u.MessageDataType.EDIT, message: s }; o.default.dispatch({ type: "MESSAGE_EDIT_FAILED_AUTOMOD", messageData: e, errorResponseBody: { code: n.body.code, message: n.body.message } }) } n.hasErr ? a.AccessibilityAnnouncer.announce(ec.default.Messages.A11Y_ANNOUNCEMENT_MESSAGE_EDITED_FAILED) : i ? a.AccessibilityAnnouncer.announce(ec.default.Messages.A11Y_ANNOUNCEMENT_MESSAGE_EDITED_AUTOMOD_BLOCKED) : a.AccessibilityAnnouncer.announce(ec.default.Messages.A11Y_ANNOUNCEMENT_MESSAGE_EDITED), eA.endEditMessage(e, n.hasErr ? void 0 : n), eA.focusMessage({ channelId: e, messageId: t }) }) }, async suppressEmbeds(e, t) { await F.default.unarchiveThreadIfNecessary(e), s.HTTP.patch({ url: eu.Endpoints.MESSAGE(e, t), body: { flags: eu.MessageFlags.SUPPRESS_EMBEDS }, oldFormErrors: !0 }) }, async patchMessageAttachments(e, t, n) { await F.default.unarchiveThreadIfNecessary(e), s.HTTP.patch({ url: eu.Endpoints.MESSAGE(e, t), body: { attachments: n }, oldFormErrors: !0 }) }, async deleteMessage(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = () => { o.default.dispatch({ type: "MESSAGE_DELETE", id: t, channelId: e }).then(() => { a.AccessibilityAnnouncer.announce(ec.default.Messages.A11Y_ANNOUNCEMENT_MESSAGE_DELETED) }) }; n ? i() : (await F.default.unarchiveThreadIfNecessary(e), s.HTTP.del({ url: eu.Endpoints.MESSAGE(e, t), oldFormErrors: !0 }).then(() => { i() })); let r = z.default.getMessage(e, t); (null == r ? void 0 : r.type) === eu.MessageTypes.GUILD_INVITE_REMINDER && (0, P.trackGuildInviteNotificationDismissed)() }, dismissAutomatedMessage(e) { null != e.loggingName && d.default.trackWithMetadata(eu.AnalyticEvents.AUTOMATED_MESSAGE_DISMISSED, { message_name: e.loggingName, message_author: e.author.username }), this.deleteMessage(e.channel_id, e.id, !0) }, revealMessage(e, t) { o.default.dispatch({ type: "MESSAGE_REVEAL", channelId: e, messageId: t }) }, crosspostMessage: (e, t) => s.HTTP.post({ url: eu.Endpoints.MESSAGE_CROSSPOST(e, t), oldFormErrors: !0 }).catch(e => { let t; t = 429 === e.status ? ec.default.Messages.PUBLISH_FOLLOWED_NEWS_FAIL_BODY.format({ retryAfter: Math.floor(e.body.retry_after / 60) }) : ec.default.Messages.PUBLISH_FOLLOWED_NEWS_GENERIC_BODY, el.default.show({ title: ec.default.Messages.PUBLISH_FOLLOWED_NEWS_FAIL_TITLE, body: t, confirmText: ec.default.Messages.OKAY }) }), trackInvite: eS }; t.default = eA }, 572691: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("97613"), r = n.n(i), s = n("570140"), a = n("777639"), o = n("272423"), l = n("808663"), u = n("178535"), d = n("981631"); t.default = { push(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : r()("modal"), i = arguments.length > 3 ? arguments[3] : void 0, a = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : d.AppContext.APP; return (0, o.pushModal)({ key: n, modal: (0, u.default)(e, {}, t, n), ...i }), s.default.dispatch({ type: "MODAL_PUSH", modal: e, props: t, key: n, appContext: a }), n }, pushLazy(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : r()("modal"), i = arguments.length > 3 ? arguments[3] : void 0, s = (0, a.getRootNavigationRef)(); return null != s && s.isReady() ? (e instanceof Promise ? e.then(e => { let { default: t } = e; return t }) : e()).then(e => this.push(e, t, n, i)) : new Promise(r => l.default.enqueue(() => r(this.pushLazy(e, t, n, i)))) }, updateAnimation(e, t) { s.default.dispatch({ type: "MODAL_UPDATE", key: e, props: {}, partial: !0, animation: t }) }, pop() { (0, o.popModal)(), s.default.dispatch({ type: "MODAL_POP" }) }, popWithKey(e, t) { (0, o.popModal)(e, t), s.default.dispatch({ type: "MODAL_POP", key: e, onExited: t }) }, popAll() { (0, o.popAllModals)(), s.default.dispatch({ type: "MODAL_POP_ALL" }), s.default.dispatch({ type: "CHANNEL_SETTINGS_CLOSE" }), s.default.dispatch({ type: "EMAIL_VERIFICATION_MODAL_CLOSE" }), s.default.dispatch({ type: "GUILD_SETTINGS_CLOSE" }), s.default.dispatch({ type: "HIDE_ACTION_SHEET" }), s.default.dispatch({ type: "DISPLAYED_INVITE_CLEAR" }), s.default.dispatch({ type: "DRAWER_CLOSE", animated: !0 }), s.default.dispatch({ type: "NOTIFICATION_SETTINGS_MODAL_CLOSE" }), s.default.dispatch({ type: "QUICKSWITCHER_HIDE" }), s.default.dispatch({ type: "MENTION_MODAL_CLOSE" }), s.default.dispatch({ type: "USER_SETTINGS_MODAL_CLOSE" }), s.default.dispatch({ type: "SEARCH_MODAL_CLOSE" }), s.default.dispatch({ type: "CONNECTIONS_GRID_MODAL_HIDE" }) } } }, 976255: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearCardInfo: function() { return a }, clearError: function() { return l }, updateAddressInfo: function() { return o }, updateCardInfo: function() { return s }, updateStripePaymentRequest: function() { return r } }); var i = n("570140"); function r(e) { i.default.dispatch({ type: "NEW_PAYMENT_SOURCE_STRIPE_PAYMENT_REQUEST_UPDATE", stripePaymentMethod: e }) } function s(e, t) { i.default.dispatch({ type: "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE", info: e, isValid: t }) } function a() { i.default.dispatch({ type: "NEW_PAYMENT_SOURCE_CARD_INFO_UPDATE", info: { name: "" }, isValid: !1 }) } function o(e, t) { i.default.dispatch({ type: "NEW_PAYMENT_SOURCE_ADDRESS_INFO_UPDATE", info: e, isValid: t }) } function l() { i.default.wait(() => i.default.dispatch({ type: "NEW_PAYMENT_SOURCE_CLEAR_ERROR" })) } }, 34854: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("981631"); t.default = { updateNote(e, t) { i.HTTP.put({ url: r.Endpoints.NOTE(e), body: { note: t }, oldFormErrors: !0 }) } } }, 254854: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { show(e, t, n, r, s) { i.default.dispatch({ type: "NOTICE_SHOW", notice: { id: s, type: e, message: t, buttonText: n, callback: r } }) }, dismiss(e) { i.default.dispatch({ type: "NOTICE_DISMISS", ...e }) } } }, 292556: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { setDesktopType(e) { i.default.dispatch({ type: "NOTIFICATIONS_SET_DESKTOP_TYPE", desktopType: e }) }, setTTSType(e) { i.default.dispatch({ type: "NOTIFICATIONS_SET_TTS_TYPE", ttsType: e }) }, setDisabledSounds(e) { i.default.dispatch({ type: "NOTIFICATIONS_SET_DISABLED_SOUNDS", sounds: e }) }, toggleDisableAllSounds() { i.default.dispatch({ type: "NOTIFICATIONS_TOGGLE_ALL_DISABLED" }) }, setDisableUnreadBadge(e) { i.default.dispatch({ type: "NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE", disableUnreadBadge: e }) }, setTaskbarFlash(e) { i.default.dispatch({ type: "NOTIFICATIONS_SET_TASKBAR_FLASH", taskbarFlash: e }) }, setNotifyMessagesInSelectedChannel(e) { i.default.dispatch({ type: "NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL", notify: e }) }, setPermissionsState(e, t) { i.default.dispatch({ type: "NOTIFICATIONS_SET_PERMISSION_STATE", enabled: e, source: t }) }, showNotification(e, t, n, r) { let s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : {}; i.default.dispatch({ type: "NOTIFICATION_CREATE", icon: e, title: t, body: n, trackingProps: r, options: { ...s, onClick() { var e; null === (e = s.onClick) || void 0 === e || e.call(s), i.default.dispatch({ type: "NOTIFICATION_CLICK" }) } } }) }, clickedNotification() { i.default.dispatch({ type: "NOTIFICATION_CLICK" }) } } }, 92114: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"); var i = n("544891"), r = n("780384"), s = n("570140"), a = n("149071"), o = n("9156"), l = n("630388"), u = n("621600"), d = n("709054"), _ = n("981631"), c = n("526761"), E = n("689938"); t.default = { open(e) { s.default.dispatch({ type: "NOTIFICATION_SETTINGS_MODAL_OPEN", guildId: e }) }, close() { s.default.dispatch({ type: "NOTIFICATION_SETTINGS_MODAL_CLOSE" }) }, updateGuildNotificationSettings(e, t, n, i) { let r = (0, u.getCurrentGuildSettings)(e); a.default.saveUserGuildSettings(e, t), s.default.dispatch({ type: "USER_GUILD_SETTINGS_GUILD_UPDATE", guildId: e, settings: t }), (0, u.trackGuildNotificationSettingsUpdate)(e, t, r, n, i) }, updateGuildAndChannelNotificationSettings(e, t, n, i) { let r = d.default.keys(t.channel_overrides), o = (0, u.getCurrentGuildSettings)(e), l = (0, u.getManyCurrentChannelSettings)(e, r); a.default.saveUserGuildSettings(e, t), s.default.dispatch({ type: "USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE", guildId: e, settings: t }), (0, u.trackGuildNotificationSettingsUpdate)(e, t, o, n, i), d.default.keys(t.channel_overrides).forEach(r => { let s = l.get(r); (0, u.trackChannelNotificationSettingsUpdate)(e, r, t.channel_overrides[r], s, n, i) }) }, updateGuildNotificationSettingsBulk(e, t, n) { let i = d.default.keys(e), r = (0, u.getManyCurrentGuildSettings)(i); a.default.saveUserGuildSettingsBulk(e), d.default.entries(e).forEach(e => { let [i, a] = e, o = r.get(i); s.default.dispatch({ type: "USER_GUILD_SETTINGS_GUILD_UPDATE", guildId: i, settings: a }), (0, u.trackGuildNotificationSettingsUpdate)(i, a, o, t, n) }) }, updateChannelOverrideSettings(e, t, n, i, o) { let l = (0, u.getCurrentChannelSettings)(e, t); a.default.saveUserGuildSettings(e, { channel_overrides: { [t]: n } }), s.default.dispatch({ type: "USER_GUILD_SETTINGS_CHANNEL_UPDATE", guildId: e, channelId: t, settings: n }), r.AccessibilityAnnouncer.announce(E.default.Messages.A11Y_ANNOUNCEMENT_CHANNEL_SETTINGS_UPDATED), (0, u.trackChannelNotificationSettingsUpdate)(e, t, n, l, i, o) }, updateChannelOverrideSettingsBulk(e, t, n, i) { let r = d.default.keys(t), o = (0, u.getManyCurrentChannelSettings)(e, r); a.default.saveUserGuildSettings(e, { channel_overrides: t }), s.default.dispatch({ type: "USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK", guildId: e, overrides: t }), d.default.keys(t).forEach(r => (0, u.trackChannelNotificationSettingsUpdate)(e, r, t[r], o.get(r), n, i)) }, setForumThreadsCreated(e, t) { let n = t ? c.ChannelNotificationSettingsFlags.NEW_FORUM_THREADS_ON : c.ChannelNotificationSettingsFlags.NEW_FORUM_THREADS_OFF, i = t ? c.ChannelNotificationSettingsFlags.NEW_FORUM_THREADS_OFF : c.ChannelNotificationSettingsFlags.NEW_FORUM_THREADS_ON, r = o.default.getChannelFlags(e); this.updateChannelOverrideSettings(e.guild_id, e.id, { flags: r & ~i | n }, u.NotificationLabel.forumThreadsCreated(t)) }, async setAccountFlag(e, t) { let n = o.default.accountNotificationSettings.flags, r = (0, l.setFlag)(n, e, t); await i.HTTP.patch({ url: _.Endpoints.ACCOUNT_NOTIFICATION_SETTINGS, body: { flags: r } }), await s.default.dispatch({ type: "NOTIFICATION_SETTINGS_UPDATE", settings: { flags: r } }) } } }, 13245: function(e, t, n) { "use strict"; n.r(t), n("411104"), n("47120"); var i = n("153832"), r = n("570140"), s = n("318885"), a = n("355863"), o = n("449224"), l = n("451478"), u = n("434529"), d = n("145597"), _ = n("765250"), c = n("981631"); let E = { track(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (!__OVERLAY__) throw Error("OverlayActionCreators.track: Must be called within Overlay context"); (0, s.trackWithOverlayMetadata)(e, t, n) }, overlayReady(e) { r.default.dispatch({ type: "OVERLAY_READY", pid: e }) }, overlayMounted(e) { r.default.dispatch({ type: "OVERLAY_MOUNTED", nudge: e }) }, setFocusedPID(e) { r.default.dispatch({ type: "OVERLAY_FOCUSED", pid: e }) }, setInputLocked(e, t) { r.default.dispatch({ type: "OVERLAY_SET_INPUT_LOCKED", locked: e, pid: t }) }, setUILocked(e, t) { r.default.dispatch({ type: "OVERLAY_SET_UI_LOCKED", locked: e, pid: t }) }, setLocked(e, t) { r.default.dispatch({ type: "OVERLAY_SET_INPUT_LOCKED", locked: e, pid: t }), r.default.dispatch({ type: "OVERLAY_SET_UI_LOCKED", locked: e, pid: t }) }, setInstanceLocked(e) { if (!__OVERLAY__) throw Error("OverlayActionCreators.setInstanceLocked: Must be called within Overlay context"); E.setLocked(e, (0, d.getPID)()) }, setEnabled(e, t) { r.default.dispatch({ type: "OVERLAY_SET_ENABLED", enabled: e, legacyEnabled: t }) }, selectCall(e) { r.default.dispatch({ type: "OVERLAY_SELECT_CALL", callId: e }) }, setDisplayNameMode(e) { r.default.dispatch({ type: "OVERLAY_SET_DISPLAY_NAME_MODE", mode: e }) }, setDisplayUserMode(e) { r.default.dispatch({ type: "OVERLAY_SET_DISPLAY_USER_MODE", mode: e }) }, setAvatarSizeMode(e) { r.default.dispatch({ type: "OVERLAY_SET_AVATAR_SIZE_MODE", mode: e }) }, setNotificationPositionMode(e) { r.default.dispatch({ type: "OVERLAY_SET_NOTIFICATION_POSITION_MODE", mode: e }) }, setTextChatNotificationMode(e) { r.default.dispatch({ type: "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE", mode: e }) }, setShowKeybindIndicators(e) { r.default.dispatch({ type: "OVERLAY_SET_SHOW_KEYBIND_INDICATORS", shouldShow: e }) }, callPrivateChannel(e, t) { r.default.dispatch({ type: "OVERLAY_CALL_PRIVATE_CHANNEL", channelId: e, ring: t }) }, setTextWidgetOpacity(e) { r.default.dispatch({ type: "OVERLAY_SET_TEXT_WIDGET_OPACITY", opacity: e }) }, disableExternalLinkAlert() { r.default.dispatch({ type: "OVERLAY_DISABLE_EXTERNAL_LINK_ALERT" }) }, startSession() { if (!__OVERLAY__) throw Error("Attempting to start an overlay session outside of the overlay context"); r.default.dispatch({ type: "OVERLAY_START_SESSION" }) }, activateRegion(e) { r.default.dispatch({ type: "OVERLAY_ACTIVATE_REGION", region: e }) }, deactivateAllRegions() { r.default.dispatch({ type: "OVERLAY_DEACTIVATE_ALL_REGIONS" }) }, setPreviewInGameMode(e) { r.default.dispatch({ type: "OVERLAY_SET_PREVIEW_IN_GAME_MODE", isPreviewingInGame: e }) }, updateNotificationStatus(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : c.OverlayNotificationStatus.DISMISSED; r.default.dispatch({ type: "OVERLAY_UPDATE_NOTIFICATION_STATUS", notificationId: e, status: t }) }, notificationEvent(e, t) { var n, i; let s = o.default.getGame(); r.default.dispatch({ type: "OVERLAY_NOTIFICATION_EVENT", notificationType: e, action: t, gameName: null !== (n = null == s ? void 0 : s.name) && void 0 !== n ? n : null, gameId: null !== (i = null == s ? void 0 : s.id) && void 0 !== i ? i : null }) }, setPinChat(e) { let t = d.OVERLAY_LAYOUT_ID, n = a.default.getWidgetsForLayout(t), r = a.default.getWidgetConfig(c.OverlayWidgets.GUILDS), s = a.default.getWidgetConfig(c.OverlayWidgets.TEXT), o = a.default.getWidgetConfig(c.OverlayWidgets.GUILDS_TEXT); if (0 === n.length || null == r || null == s || null == o) return; let E = l.default.windowSize(), I = { width: 0, height: 0 }, T = { top: 0, left: 0, right: 0, bottom: 0 }, f = { width: 312, height: 0 }, S = { top: 0, left: 0, right: 0, bottom: 0 }, h = { width: 0, height: 0 }; if (n.forEach(e => { let { type: t, id: n, anchor: i, size: r } = e; switch (t) { case c.OverlayWidgets.TEXT: I = (0, u.getSizeFromLayoutSize)(r, E), (0, _.deleteWidget)(n); break; case c.OverlayWidgets.GUILDS: T = (0, u.getFullCoordsFromLayoutSize)(i, r, E), f = (0, u.getSizeFromLayoutSize)(r, E), (0, _.deleteWidget)(n); break; case c.OverlayWidgets.GUILDS_TEXT: S = (0, u.getFullCoordsFromLayoutSize)(i, r, E), h = (0, u.getSizeFromLayoutSize)(r, E), (0, _.deleteWidget)(n) } }), e) { let e = "auto" === h.width ? o.minSize.width : h.width; e -= r.minSize.width; let [n, s] = (0, u.getLeftWidgetSpecs)(S, { ...h, width: r.minSize.width }, E), [l, d] = (0, u.getRightWidgetSpecs)(S, { ...h, width: e }, E, { x: 10, y: 10 }), I = a.default.getWidgetDefaultSettings(c.OverlayWidgets.TEXT); if (null == I) throw Error("OverlayActionCreators.setPinChat: No config for TEXT exists"); (0, _.createWidget)({ ...I, type: c.OverlayWidgets.TEXT, id: (0, i.v4)(), size: d, anchor: l, layoutId: t }); let T = a.default.getWidgetDefaultSettings(c.OverlayWidgets.GUILDS); if (null == T) throw Error("OverlayActionCreators.setPinChat: No config for GUILDS exists"); (0, _.createWidget)({ ...T, type: c.OverlayWidgets.GUILDS, id: (0, i.v4)(), size: s, anchor: n, layoutId: t }) } else { let e = "auto" === I.width ? s.minSize.width : I.width; e += r.minSize.width; let [n, o] = (0, u.getLeftWidgetSpecs)(T, { height: f.height, width: e }, E), l = a.default.getWidgetDefaultSettings(c.OverlayWidgets.GUILDS_TEXT); if (null == l) throw Error("OverlayActionCreators.setPinChat: No config for GUILDS_TEXT exists"); (0, _.createWidget)({ ...l, type: c.OverlayWidgets.GUILDS_TEXT, id: (0, i.v4)(), layoutId: t, anchor: n, size: o }) } }, resetDefaultLayout(e) { null != a.default.getLayout(e) && ((0, _.deleteAllWidgets)(e), (0, _.createWidgets)(a.default.getDefaultLayout(e))) }, setClickZones(e) { r.default.dispatch({ type: "OVERLAY_SET_CLICK_ZONES", zones: e }) }, relayClickZoneClicked(e, t, n) { r.default.dispatch({ type: "OVERLAY_RELAY_CLICK_ZONE_CLICKED", zoneName: e, normalizedMouseX: t, normalizedMouseY: n }) }, setAssociatedGame(e, t, n) { r.default.dispatch({ type: "OVERLAY_SET_ASSOCIATED_GAME", previousAssociatedGamePID: e, associatedGamePID: t, associatedGame: n }) }, notifyReadyToShow(e) { r.default.dispatch({ type: "OVERLAY_NOTIFY_READY_TO_SHOW", pid: e }) }, successfullyShown(e) { r.default.dispatch({ type: "OVERLAY_SUCCESSFULLY_SHOWN", pid: e }) } }; t.default = E }, 923928: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { clearVADWarning() { i.default.dispatch({ type: "PERMISSION_CLEAR_VAD_WARNING" }) }, clearSuppressWarning() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; i.default.dispatch({ type: "PERMISSION_CLEAR_SUPPRESS_WARNING", forever: e }) }, clearPTTAdminWarning() { i.default.dispatch({ type: "PERMISSION_CLEAR_PTT_ADMIN_WARNING" }) }, requestElevatedProcess(e) { i.default.dispatch({ type: "PERMISSION_REQUEST_ELEVATED_PROCESS", pid: e }) }, clearElevatedProcess() { i.default.dispatch({ type: "PERMISSION_CLEAR_ELEVATED_PROCESS" }) }, continueNonelevatedProcess(e) { i.default.dispatch({ type: "PERMISSION_CONTINUE_NONELEVATED_PROCESS", pid: e }) } } }, 519938: function(e, t, n) { "use strict"; n.r(t), n.d(t, { close: function() { return s }, hide: function() { return a }, moveTo: function() { return l }, open: function() { return r }, show: function() { return o }, switchPIPFocus: function() { return d }, updateRect: function() { return u } }); var i = n("570140"); function r(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; i.default.dispatch({ type: "PICTURE_IN_PICTURE_OPEN", id: e, component: t, props: n }) } function s(e) { i.default.dispatch({ type: "PICTURE_IN_PICTURE_CLOSE", id: e }) } function a(e) { i.default.dispatch({ type: "PICTURE_IN_PICTURE_HIDE", id: e }) } function o(e) { i.default.dispatch({ type: "PICTURE_IN_PICTURE_SHOW", id: e }) } function l(e, t) { i.default.dispatch({ type: "PICTURE_IN_PICTURE_MOVE", id: e, position: t }) } function u(e, t) { i.default.dispatch({ type: "PICTURE_IN_PICTURE_UPDATE_RECT", id: e, rect: t }) } function d(e) { i.default.dispatch({ type: "PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW", id: e }) } }, 667: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearPurchaseTokenAuthState: function() { return r } }); var i = n("570140"); function r() { i.default.dispatch({ type: "BILLING_PURCHASE_TOKEN_AUTH_CLEAR_STATE" }) } }, 304680: function(e, t, n) { "use strict"; n.r(t), n.d(t, { chooseReplayPath: function() { return _ }, close: function() { return a }, open: function() { return s }, openReplay: function() { return o }, setSection: function() { return l }, setShouldRecordNextConnection: function() { return u }, setSimulcastDebugOverride: function() { return d } }); var i = n("570140"), r = n("579806"); function s(e) { i.default.dispatch({ type: "RTC_DEBUG_MODAL_OPEN", section: e }), i.default.dispatch({ type: "RTC_DEBUG_POPOUT_WINDOW_OPEN" }) } function a() { i.default.dispatch({ type: "RTC_DEBUG_MODAL_CLOSE" }) } function o() { i.default.dispatch({ type: "RTC_DEBUG_MODAL_OPEN_REPLAY" }) } function l(e) { i.default.dispatch({ type: "RTC_DEBUG_MODAL_SET_SECTION", section: e }) } function u(e) { i.default.dispatch({ type: "RTC_DEBUG_SET_RECORDING_FLAG", value: e }) } function d(e, t, n) { i.default.dispatch({ type: "RTC_DEBUG_SET_SIMULCAST_OVERRIDE", userId: e, context: t, quality: n }) } function _() { r.default.fileManager.showOpenDialog({ filters: [{ name: "All Files", extensions: ["*"] }] }).then(e => { let t = 0 === e.length ? "" : e[0]; i.default.dispatch({ type: "RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH", path: t }) }) } }, 70780: function(e, t, n) { "use strict"; n.r(t), n.d(t, { completeRTCLatencyTest: function() { return a }, fetchRTCLatencyTestRegions: function() { return s } }); var i = n("544891"), r = n("570140"); function s() { var e; return i.HTTP.get("".concat((e = "https:", "https:")).concat(window.GLOBAL_ENV.RTC_LATENCY_ENDPOINT)) } function a(e, t) { r.default.dispatch({ type: "RTC_LATENCY_TEST_COMPLETE", latencyRankedRegions: e, geoRankedRegions: t }) } }, 45114: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ack: function() { return _ }, ackChannel: function() { return c }, ackGuildFeature: function() { return S }, ackMessageRequest: function() { return A }, ackMessageRequestClear: function() { return m }, ackUserFeature: function() { return h }, bulkAck: function() { return E }, disableAutomaticAck: function() { return f }, enableAutomaticAck: function() { return T }, localAck: function() { return I } }), n("47120"), n("653041"); var i = n("570140"), r = n("601070"), s = n("131704"), a = n("592125"), o = n("324067"), l = n("594174"), u = n("709054"), d = n("981631"); function _(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = arguments.length > 3 ? arguments[3] : void 0, s = arguments.length > 4 ? arguments[4] : void 0; i.default.dispatch({ type: "CHANNEL_ACK", channelId: e, messageId: r, immediate: t, force: n, context: d.CURRENT_APP_CONTEXT, location: s }) } function c(e) { e.isCategory() ? ! function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = a.default.getChannel(e); if (null == i || null == i.guild_id) return; let l = o.default.getCategories(i.guild_id); if (null == l[e]) return; let u = l[e].filter(e => { let { channel: t } = e; return (0, s.isGuildReadableType)(t.type) }).map(e => { let { channel: t } = e; return t.id }), d = [...u]; for (let e of (u.forEach(e => { let t = r.default.getActiveJoinedThreadsForParent(i.guild_id, e); for (let e in t) d.push(e) }), d)) _(e, t, n) }(e.id, !0, !0) : e.isForumLikeChannel() ? _(e.id, !0, !0, u.default.fromTimestamp(Date.now())) : _(e.id, !0, !0) } function E(e, t) { i.default.dispatch({ type: "BULK_ACK", channels: e, context: d.CURRENT_APP_CONTEXT, onFinished: t }) } function I(e) { i.default.dispatch({ type: "CHANNEL_LOCAL_ACK", channelId: e }) } function T(e, t) { i.default.dispatch({ type: "ENABLE_AUTOMATIC_ACK", channelId: e, windowId: t }) } function f(e, t) { i.default.dispatch({ type: "DISABLE_AUTOMATIC_ACK", channelId: e, windowId: t }) } function S(e, t, n) { i.default.dispatch({ type: "GUILD_FEATURE_ACK", id: e, ackType: t, ackedId: n, local: !1 }) } function h(e, t) { var n; null != (null === (n = l.default.getCurrentUser()) || void 0 === n ? void 0 : n.id) && i.default.dispatch({ type: "USER_NON_CHANNEL_ACK", ackType: e, ackedId: t, local: !1 }) } function A(e) { i.default.dispatch({ type: "MESSAGE_REQUEST_ACK", ackedId: e }) } function m() { i.default.dispatch({ type: "MESSAGE_REQUEST_CLEAR_ACK" }) } }, 194359: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s = n("544891"), a = n("780384"), o = n("570140"), l = n("391650"), u = n("877215"), d = n("895886"), _ = n("397550"), c = n("594174"), E = n("657682"), I = n("51144"), T = n("668781"), f = n("239091"), S = n("981631"), h = n("689938"); function A(e) { (0, f.closeContextMenu)(), T.default.show(e) } function m(e, t, n) { let { status: i, body: r } = e, s = r && r.code; switch (i) { case 429: 0 === t && A({ title: h.default.Messages.FRIEND_REQUEST_RATE_LIMITED_HEADER, body: h.default.Messages.FRIEND_REQUEST_RATE_LIMITED_BODY, confirmText: h.default.Messages.FRIEND_REQUEST_RATE_LIMITED_BUTTON }); break; case 403: if (s === S.AbortCodes.EMAIL_VERIFICATION_REQUIRED) { A({ title: h.default.Messages.FRIEND_REQUEST_REQUIRES_EMAIL_VALIDATION_HEADER, body: h.default.Messages.FRIEND_REQUEST_REQUIRES_EMAIL_VALIDATION_BODY, confirmText: h.default.Messages.FRIEND_REQUEST_REQUIRES_EMAIL_VALIDATION_BUTTON, onConfirm: () => { l.openClaimAccountModal() } }); break } default: if (s === S.AbortCodes.USER_QUARANTINED)(0, f.closeContextMenu)(), (0, d.default)(); else if ((0, _.isLimitedAccessErrorCode)(i, s)) break; else if (0 === t) { let e = null != n ? (0, E.humanizeAbortCode)(s || 0, n) : h.default.Messages.POMELO_ADD_FRIEND_ERROR; A({ title: h.default.Messages.FRIEND_REQUEST_FAILED_HEADER, body: e, confirmText: h.default.Messages.OKAY }) } } throw e }(r = i || (i = {}))[r.SHOW_ALWAYS = 0] = "SHOW_ALWAYS", r[r.SHOW_ONLY_IF_ACTION_NEEDED = 1] = "SHOW_ONLY_IF_ACTION_NEEDED"; let N = { sendRequest(e) { let { discordTag: t, context: n, captchaPayload: i, errorUxConfig: r = 0 } = e, [a, o] = t.split("#"); return s.HTTP.post({ url: S.Endpoints.USER_RELATIONSHIPS(), body: { username: a, discriminator: parseInt(o), ...i }, context: n, oldFormErrors: !0 }).catch(e => { m(e, r, t) }) }, addRelationship(e, t) { let { userId: n, context: i, type: r, friendToken: a, fromFriendSuggestion: o, captchaPayload: l } = e, u = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, d = c.default.getUser(n); return s.HTTP.put({ url: S.Endpoints.USER_RELATIONSHIP(n), body: { type: r, friend_token: a, from_friend_suggestion: o, ...l }, context: i, oldFormErrors: !0 }).then(() => { null == t || t() }).catch(e => { m(e, u, I.default.getUserTag(d)) }) }, acceptFriendRequest: e => N.addRelationship(e, function() { a.AccessibilityAnnouncer.announce(h.default.Messages.A11Y_ANNOUNCEMENT_FRIEND_ACCEPT_REQUEST) }), cancelFriendRequest: (e, t) => N.removeRelationship(e, t, function() { a.AccessibilityAnnouncer.announce(h.default.Messages.A11Y_ANNOUNCEMENT_FRIEND_CANCEL_REQUEST) }), removeFriend(e, t) { N.removeRelationship(e, t, function() { a.AccessibilityAnnouncer.announce(h.default.Messages.A11Y_ANNOUNCEMENT_FRIEND_REMOVED) }) }, unblockUser(e, t) { N.removeRelationship(e, t, function() { a.AccessibilityAnnouncer.announce(h.default.Messages.A11Y_ANNOUNCEMENT_USER_UNBLOCKED) }) }, removeRelationship: (e, t, n) => s.HTTP.del({ url: S.Endpoints.USER_RELATIONSHIP(e), context: t, oldFormErrors: !0 }).then(() => { null == n || n() }).catch(() => { a.AccessibilityAnnouncer.announce(h.default.Messages.A11Y_ANNOUNCEMENT_GENERIC_FAIL) }), updateRelationship: (e, t) => s.HTTP.patch({ url: S.Endpoints.USER_RELATIONSHIP(e), body: { nickname: t } }), fetchRelationships() { s.HTTP.get({ url: S.Endpoints.USER_RELATIONSHIPS(), oldFormErrors: !0 }).then(e => o.default.dispatch({ type: "LOAD_RELATIONSHIPS_SUCCESS", relationships: e.body }), () => o.default.dispatch({ type: "LOAD_RELATIONSHIPS_FAILURE" })) }, confirmClearPendingRelationships(e) { (0, u.default)(e) }, clearPendingRelationships: () => s.HTTP.del({ url: S.Endpoints.USER_RELATIONSHIPS(), query: { relationship_type: S.RelationshipTypes.PENDING_INCOMING } }).then(() => { o.default.dispatch({ type: "RELATIONSHIP_PENDING_INCOMING_REMOVED" }) }).catch(() => { a.AccessibilityAnnouncer.announce(h.default.Messages.A11Y_ANNOUNCEMENT_GENERIC_FAIL) }) }; t.default = N }, 287734: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"), r = n("254238"), s = n("258609"); n("473241"); var a = n("788983"), o = n("703656"), l = n("700615"), u = n("592125"), d = n("731290"), _ = n("131951"), c = n("944486"), E = n("914010"), I = n("594174"), T = n("934415"), f = n("604151"), S = n("981631"); t.default = { selectChannel(e) { let { guildId: t, channelId: n, messageId: r, jumpType: s, preserveDrawerState: a, source: o } = e; i.default.dispatch({ type: "CHANNEL_SELECT", guildId: t === S.ME ? null : t, channelId: n, messageId: r, jumpType: s, preserveDrawerState: a, source: o }) }, selectPrivateChannel(e) { (0, o.transitionTo)(S.Routes.CHANNEL(S.ME, e)) }, selectVoiceChannel(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = u.default.getChannel(e), s = null == r ? void 0 : r.getGuildId(); if ((null == r ? void 0 : r.isGuildVocal()) && (null == r ? void 0 : r.isNSFW()) && (!(null === (t = I.default.getCurrentUser()) || void 0 === t ? void 0 : t.nsfwAllowed) || !d.default.didAgree(s))) { (0, o.transitionTo)(S.Routes.CHANNEL(s, e)); return } _.default.isSupported() && (null != e && _.default.getMediaEngine().interact(), (0, f.selectVoiceChannelAdditional)(e, s, n, i)) }, disconnect() { let e = s.default.getRemoteSessionId(); if (null != e && r.remoteDisconnect(e), (0, l.isVoicePanelEnabled)()) this.selectVoiceChannel(null); else { let e = u.default.getChannel(c.default.getChannelId()), t = c.default.getChannelId() === c.default.getVoiceChannelId() && (null == e ? void 0 : e.isThread()) === !0; if (this.selectVoiceChannel(null), a.close(S.PopoutWindowKeys.CHANNEL_CALL_POPOUT), t) { let e = E.default.getGuildId(); null != e && (0, o.transitionTo)((0, T.previousTextChannelRouteForGuild)(e)) } } } } }, 604151: function(e, t, n) { "use strict"; n.r(t), n.d(t, { selectVoiceChannelAdditional: function() { return f } }); var i = n("952265"), r = n("570140"), s = n("281956"), a = n("200498"), o = n("71275"), l = n("672339"), u = n("653175"), d = n("592125"), _ = n("430824"), c = n("607744"), E = n("944486"), I = n("979651"), T = n("934415"); let f = function(e, t) { let f = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], S = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], h = d.default.getChannel(e), A = I.default.getCurrentClientVoiceChannelId(null != t ? t : null) === e, m = null != h ? c.default.getCheck(h.guild_id) : null; if (!(null != t && (0, s.shouldShowMembershipVerificationGate)(t))) { if (null == m || m.canChat || (0, a.canLurkerListen)(h)) { if (null != h && !A) { let e = (0, T.isChannelFull)(h, I.default, _.default); if (e && h.isGuildStageVoice() && (0, o.getStageHasMedia)(h.id)) { (0, i.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("43133")]).then(n.bind(n, "523794")); return t => e({ channel: h, ...t }) }); return } if (e) { (0, i.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("16609")]).then(n.bind(n, "997308")); return t => e(t) }); return } } f && (0, l.applyInitialVideoBackgroundOption)(), (0, u.default)(function() { r.default.dispatch({ type: "VOICE_CHANNEL_SELECT", guildId: t, channelId: e, currentVoiceChannelId: E.default.getVoiceChannelId(), video: f, stream: S }) }, e, S, f) } } } }, 872810: function(e, t, n) { "use strict"; n.r(t), n.d(t, { changeStreamRegion: function() { return V }, closeStream: function() { return G }, createBroadcastChannelOrStartStream: function() { return F }, fetchStreamPreview: function() { return w }, joinPrivateChannelAndWatchStream: function() { return H }, notifyStreamStart: function() { return k }, setStreamPaused: function() { return D }, startStream: function() { return v }, stopOwnStream: function() { return x }, stopStream: function() { return b }, toggleSelfStreamHidden: function() { return P }, updateStreamSettings: function() { return B }, watchStream: function() { return y }, watchStreamAndTransitionToStream: function() { return U } }); var i = n("512722"), r = n.n(i), s = n("990547"), a = n("544891"), o = n("570140"), l = n("258609"), u = n("569545"), d = n("525925"), _ = n("522474"), c = n("199902"), E = n("314897"), I = n("592125"), T = n("430824"), f = n("944486"), S = n("979651"), h = n("934415"), A = n("70956"), m = n("557457"), N = n("573261"), p = n("26151"), O = n("493683"), C = n("475179"), R = n("287734"), g = n("981631"), L = n("70722"); function v(e, t, n) { o.default.dispatch({ type: "STREAM_START", streamType: null != e ? L.StreamTypes.GUILD : L.StreamTypes.CALL, guildId: e, channelId: t, appContext: __OVERLAY__ ? g.AppContext.OVERLAY : g.AppContext.APP, ...n }) } function D(e, t) { let n = (0, u.encodeStreamKey)(e); o.default.dispatch({ type: "STREAM_SET_PAUSED", streamKey: n, paused: t }) } function M(e, t) { let n = I.default.getChannel(t); return r()(null != n, "Cannot join a null voice channel"), !S.default.isInChannel(t) && (0, h.isChannelFull)(n, S.default, T.default) } function y(e, t) { if (null != l.default.getRemoteSessionId()) return; let { guildId: n, channelId: i } = e; if (null != n && M(n, i)) return; let r = (0, u.encodeStreamKey)(e), s = (null == t ? void 0 : t.forceMultiple) || c.default.getAllActiveStreamsForChannel(i).filter(e => { let { ownerId: t } = e; return t !== E.default.getId() }).length >= 2; o.default.dispatch({ type: "STREAM_WATCH", streamKey: r, allowMultiple: s }), !s && (null == t || !t.noFocus) && C.default.selectParticipant(e.channelId, r) } function P(e, t) { o.default.dispatch({ type: "STREAM_UPDATE_SELF_HIDDEN", channelId: e, selfStreamHidden: t }) } function U(e, t) { let { guildId: n, channelId: i } = e; if (null != n && M(n, i)) return; y(e, t); let r = _.default.getWindowOpen(g.PopoutWindowKeys.CHANNEL_CALL_POPOUT), s = f.default.getVoiceChannelId(); (!r || s !== i) && (0, d.default)(e) } function b(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; G(e, t), o.default.dispatch({ type: "STREAM_STOP", streamKey: e, appContext: __OVERLAY__ ? g.AppContext.OVERLAY : g.AppContext.APP }) } function G(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; o.default.dispatch({ type: "STREAM_CLOSE", streamKey: e, canShowFeedback: t }) } async function w(e, t, n) { let i = (0, u.encodeStreamKey)({ streamType: null != e ? L.StreamTypes.GUILD : L.StreamTypes.CALL, guildId: e, channelId: t, ownerId: n }); o.default.dispatch({ type: "STREAM_PREVIEW_FETCH_START", streamKey: i }); try { let e = await a.HTTP.get({ url: g.Endpoints.STREAM_PREVIEW(i), query: { version: Date.now() }, oldFormErrors: !0 }); o.default.dispatch({ type: "STREAM_PREVIEW_FETCH_SUCCESS", streamKey: i, previewURL: e.body.url }) } catch (t) { let e; 429 === t.status && (e = t.body.retry_after * A.default.Millis.SECOND), o.default.dispatch({ type: "STREAM_PREVIEW_FETCH_FAIL", streamKey: i, retryAfter: e }) } } async function k(e) { try { await N.default.post({ url: g.Endpoints.STREAM_NOTIFY(e), oldFormErrors: !0, trackedActionData: { event: s.NetworkActionNames.STREAM_NOTIFY } }) } catch (e) {} } function B(e) { (0, m.trackStreamSettingsUpdate)(e.preset, e.resolution, e.frameRate), o.default.dispatch({ type: "STREAM_UPDATE_SETTINGS", ...e }) } function V(e, t) { a.HTTP.patch({ url: g.Endpoints.STREAM(e), body: { region: t }, oldFormErrors: !0 }) } function x() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0], t = c.default.getCurrentUserActiveStream(); null != t && b((0, u.encodeStreamKey)(t), e) } function F(e) { let { channelId: t, pid: n, sourceId: i, sourceName: r } = e; (null != n || null != i || null != r) && (o.default.dispatch({ type: "START_BROADCAST_STREAM", options: { pid: n, sourceId: i, sourceName: r } }), null == t ? O.default.createBroadcastPrivateChannel() : v(null, t, { pid: n, sourceId: i, sourceName: r })) } function H(e, t) { let n = E.default.getId(), i = (0, u.decodeStreamKey)(t), r = f.default.getVoiceChannelId(); null != r && r !== e && R.default.disconnect(), O.default.addRecipient(e, n, void 0, () => { p.default.call(e, !1, !1, null, () => { U(i) }) }) } }, 821849: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchPremiumSubscriptionPlans: function() { return E }, fetchSubscriptionPlansBySKUs: function() { return c }, fetchSubscriptionPlansForSKU: function() { return _ }, resetSubscriptionPlanData: function() { return I } }), n("47120"); var i = n("544891"), r = n("570140"), s = n("34756"), a = n("351402"), o = n("122289"), l = n("355467"), u = n("981631"), d = n("474936"); async function _(e, t, n, d, _) { r.default.dispatch({ type: "SUBSCRIPTION_PLANS_FETCH", skuId: e }); try { let s = { url: u.Endpoints.STORE_PUBLISHED_LISTINGS_SUBSCRIPTION_PLANS(e), oldFormErrors: !0 }, o = {}; null != t && (o.country_code = t), null != n && (o.payment_source_id = n), null != d && (o.include_unpublished = d), null != _ && (o.revenue_surface = _), s.query = o, !a.default.ipCountryCodeLoaded && await (0, l.fetchIpCountryCode)(); let c = await i.HTTP.get(s); r.default.dispatch({ type: "SUBSCRIPTION_PLANS_FETCH_SUCCESS", skuId: e, subscriptionPlans: c.body }) } catch (t) { throw r.default.dispatch({ type: "SUBSCRIPTION_PLANS_FETCH_FAILURE", skuId: e }), (0, o.captureBillingException)(t), new s.default(t) } } function c(e, t) { return Promise.all(e.filter(e => e !== d.PremiumSubscriptionSKUs.NONE).map(e => _(e, t))) } function E(e, t, n) { return Promise.all(d.ACTIVE_PREMIUM_SKUS.filter(e => e !== d.PremiumSubscriptionSKUs.NONE).map(i => _(i, e, t, void 0, n))) } function I() { r.default.dispatch({ type: "SUBSCRIPTION_PLANS_RESET" }) } }, 144144: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { startTyping(e) { i.default.dispatch({ type: "TYPING_START_LOCAL", channelId: e }) }, stopTyping(e) { i.default.dispatch({ type: "TYPING_STOP_LOCAL", channelId: e }) } } }, 166459: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = { popFirstFile(e) { i.default.dispatch({ type: "UPLOAD_ATTACHMENT_POP_FILE", channelId: e }) }, addFiles(e) { let { files: t, channelId: n, showLargeMessageDialog: r, draftType: s } = e; i.default.dispatch({ type: "UPLOAD_ATTACHMENT_ADD_FILES", channelId: n, files: t, showLargeMessageDialog: r, draftType: s }) }, addFile(e) { let { file: t, channelId: n, showLargeMessageDialog: r, draftType: s } = e; i.default.dispatch({ type: "UPLOAD_ATTACHMENT_ADD_FILES", channelId: n, files: [t], showLargeMessageDialog: r, draftType: s }) }, remove(e, t, n) { i.default.dispatch({ type: "UPLOAD_ATTACHMENT_REMOVE_FILE", channelId: e, id: t, draftType: n }) }, removeFiles(e, t, n) { i.default.dispatch({ type: "UPLOAD_ATTACHMENT_REMOVE_FILES", channelId: e, attachmentIds: t, draftType: n }) }, clearAll(e, t) { i.default.dispatch({ type: "UPLOAD_ATTACHMENT_CLEAR_ALL_FILES", channelId: e, draftType: t }) }, update(e, t, n, r) { let { description: s, filename: a, spoiler: o, thumbnail: l } = r; i.default.dispatch({ type: "UPLOAD_ATTACHMENT_UPDATE_FILE", channelId: e, id: t, filename: a, description: s, thumbnail: l, spoiler: o, draftType: n }) }, setUploads(e) { let { uploads: t, channelId: n, draftType: r, resetState: s } = e; i.default.dispatch({ type: "UPLOAD_ATTACHMENT_SET_UPLOADS", channelId: n, uploads: s ? t.map(e => e.resetState()) : t, draftType: r }) }, setFile(e) { let { file: t, channelId: n, id: r, draftType: s } = e; i.default.dispatch({ type: "UPLOAD_ATTACHMENT_SET_FILE", channelId: n, id: r, file: t, draftType: s }) } } }, 232567: function(e, t, n) { "use strict"; n.r(t), n.d(t, { acceptAgreements: function() { return T }, fetchCurrentUser: function() { return I }, fetchProfile: function() { return h }, getUser: function() { return S }, setFlag: function() { return f } }), n("789020"); var i = n("512722"), r = n.n(i), s = n("525769"), a = n("259443"), o = n("544891"), l = n("570140"), u = n("598077"), d = n("594174"), _ = n("573261"), c = n("981631"); let E = new a.Logger("UserProfileModalActionCreators"); function I() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, { withAnalyticsToken: t = !1 } = e; return o.HTTP.get({ url: c.Endpoints.ME, query: { with_analytics_token: t }, oldFormErrors: !0 }).then(e => (l.default.dispatch({ type: "CURRENT_USER_UPDATE", user: e.body, analyticsToken: t ? e.body.analytics_token : void 0 }), new u.default(e.body))) } function T() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0], t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return _.default.patch({ url: c.Endpoints.USER_AGREEMENTS, trackedActionData: { event: s.NetworkActionNames.USER_ACCEPT_AGREEMENTS }, body: { terms: e, privacy: t }, oldFormErrors: !0 }).then(() => !0, () => !1) } function f(e, t) { let n = d.default.getCurrentUser(); r()(null != n, "setFlag: user cannot be undefined"); let i = t ? n.flags | e : n.flags & ~e; return o.HTTP.patch({ url: c.Endpoints.ME, oldFormErrors: !0, body: { flags: i } }) } function S(e) { let t = d.default.getUser(e); return null != t ? Promise.resolve(t) : o.HTTP.get({ url: c.Endpoints.USER(e), oldFormErrors: !0 }).then(t => (l.default.dispatch({ type: "USER_UPDATE", user: t.body }), d.default.getUser(e))) } async function h(e) { let { friendToken: t, withMutualGuilds: n, withMutualFriendsCount: i, withMutualFriends: r, guildId: s, connectionsRoleId: a, abortSignal: u } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, d = arguments.length > 2 ? arguments[2] : void 0; l.default.dispatch({ type: "USER_PROFILE_FETCH_START", userId: e }); try { let _ = await o.HTTP.get({ url: c.Endpoints.USER_PROFILE(e), query: { friend_token: t, with_mutual_guilds: n, with_mutual_friends: r, with_mutual_friends_count: i && (null == r || !r), guild_id: s, connections_role_id: a }, oldFormErrors: !0, signal: u }); return null == d || d(_.body, s), l.default.dispatch({ type: "USER_UPDATE", user: _.body.user }), l.default.dispatch({ type: "USER_PROFILE_FETCH_SUCCESS", ..._.body }), null != s && null != _.body.guild_member && l.default.dispatch({ type: "GUILD_MEMBER_PROFILE_UPDATE", guildId: s, guildMember: _.body.guild_member }), _.body } catch (t) { throw null != t && (null == t ? void 0 : t.body) != null && E.warn("fetchProfile error: ".concat(t.body.code, " - ").concat(t.body.message)), l.default.dispatch({ type: "USER_PROFILE_FETCH_FAILURE", userId: e }), t } } }, 763472: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMetadata: function() { return d }, play: function() { return u }, sync: function() { return l } }), n("411104"); var i = n("544891"), r = n("570140"), s = n("647162"), a = n("158776"), o = n("981631"); function l(e, t) { r.default.dispatch({ type: "ACTIVITY_SYNC", activity: e, userId: t }) } function u(e, t) { (0, s.getSpotifyMetadataFromActivity)(e, t).then(n => r.default.dispatch({ type: "ACTIVITY_PLAY", activity: e, userId: t, metadata: n })).catch(() => r.default.dispatch({ type: "ACTIVITY_PLAY", activity: e, userId: t })) } async function d(e, t) { let n = e.metadata; if (null != n) return n; let s = a.default.getActivityMetadata(t); if (null != s) return s; if (null == e.session_id) throw Error("null/undefined session_id"); let { body: l } = await i.HTTP.get({ url: o.Endpoints.USER_ACTIVITY_METADATA(t, e.session_id, e.application_id), oldFormErrors: !0 }); return r.default.dispatch({ type: "ACTIVITY_METADATA_UPDATE", metadata: l, userId: t }), l } }, 809206: function(e, t, n) { "use strict"; n.r(t), n.d(t, { accountDetailsClose: function() { return f }, accountDetailsInit: function() { return T }, clearErrors: function() { return g }, disableAccount: function() { return S }, getHarvestStatus: function() { return m }, requestHarvest: function() { return N }, resetAllPending: function() { return v }, resetAndCloseUserProfileForm: function() { return D }, resetPendingAccountChanges: function() { return L }, saveAccountChanges: function() { return A }, saveAccountRequest: function() { return h }, setPendingAvatar: function() { return p }, setPendingAvatarDecoration: function() { return C }, setPendingGlobalNameName: function() { return O }, setPendingProfileEffectId: function() { return R } }); var i = n("544891"), r = n("433517"), s = n("780384"), a = n("570140"), o = n("703656"), l = n("626135"), u = n("768581"), d = n("546796"), _ = n("893776"), c = n("981631"), E = n("792101"), I = n("689938"); function T() { a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_INIT" }) } function f() { a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_CLOSE" }) } function S(e, t) { let n = t ? I.default.Messages.DELETE_ACCOUNT : I.default.Messages.DISABLE_ACCOUNT, r = t ? c.Endpoints.DELETE_ACCOUNT : c.Endpoints.DISABLE_ACCOUNT; return (0, d.default)(t => i.HTTP.post({ url: r, body: { password: e, ...t }, oldFormErrors: !0 }), { modalProps: { title: n }, checkEnabled: !1 }).then(() => { _.default.logoutInternal(), (0, o.transitionTo)(c.Routes.DEFAULT_LOGGED_OUT) }) } async function h(e) { let t = await i.HTTP.patch({ url: c.Endpoints.ME, oldFormErrors: !0, body: e }), n = t.body; if (n.token) { let t = n.token; delete n.token, a.default.dispatch({ type: "UPDATE_TOKEN", token: t, userId: n.id }), (null == e ? void 0 : e.password) != null && (null == e ? void 0 : e.new_password) != null && a.default.dispatch({ type: "PASSWORD_UPDATED", userId: n.id }) } return a.default.dispatch({ type: "CURRENT_USER_UPDATE", user: n }), t } function A(e) { let { username: t, discriminator: n, email: i, emailToken: s, password: o, avatar: _, avatarDecoration: T, newPassword: f, globalName: S } = e; return a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SUBMIT" }), (0, d.default)(e => { let a = { username: t, email: i, email_token: s, password: o, avatar: _, discriminator: n, global_name: S, new_password: f, ...e }; null === T && (a.avatar_decoration_id = null), null != T && (a.avatar_decoration_id = T.id, a.avatar_decoration_sku_id = T.skuId); let l = r.Storage.get(c.DEVICE_TOKEN), u = (0, E.getDevicePushProvider)(); null != u && null != l && (a.push_provider = u, a.push_token = l); let d = r.Storage.get(c.DEVICE_VOIP_TOKEN); return null != E.DEVICE_PUSH_VOIP_PROVIDER && null != d && (a.push_voip_provider = E.DEVICE_PUSH_VOIP_PROVIDER, a.push_voip_token = d), h(a) }, { checkEnabled: !1, modalProps: { title: I.default.Messages.TWO_FA_CHANGE_ACCOUNT }, hooks: { onEarlyClose: () => a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE", errors: {} }) } }).then(e => { let t = e.body; return l.default.track(c.AnalyticEvents.USER_AVATAR_UPDATED, { animated: (0, u.isAnimatedIconHash)(t.avatar) }), a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS" }), e }, e => (a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE", errors: e.body }), e)) } function m() { return i.HTTP.get({ url: c.Endpoints.USER_HARVEST, oldFormErrors: !0 }) } function N(e) { return i.HTTP.post({ url: c.Endpoints.USER_HARVEST, body: { backends: e }, oldFormErrors: !0 }) } function p(e) { a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR", avatar: e }), null == e ? s.AccessibilityAnnouncer.announce(I.default.Messages.A11Y_ANNOUNCEMENT_AVATAR_NONE) : s.AccessibilityAnnouncer.announce(I.default.Messages.A11Y_ANNOUNCEMENT_AVATAR_CHANGED) } function O(e) { a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME", globalName: e }) } function C(e) { a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION", avatarDecoration: e }) } function R(e) { a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID", profileEffectId: e }) } function g() { a.default.dispatch({ type: "USER_SETTINGS_CLEAR_ERRORS" }) } function L() { a.default.dispatch({ type: "USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES" }) } function v() { a.default.dispatch({ type: "USER_SETTINGS_RESET_ALL_PENDING" }) } function D() { a.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM" }) } }, 153867: function(e, t, n) { "use strict"; n.r(t), n.d(t, { saveClientTheme: function() { return T }, saveGuildFolders: function() { return E } }); var i = n("524437"), r = n("381499"), s = n("570140"), a = n("514361"), o = n("238514"), l = n("210887"), u = n("695346"), d = n("675478"), _ = n("981631"), c = n("874893"); function E(e) { return d.PreloadedUserSettingsActionCreators.updateAsync("guildFolders", t => { t.folders = e.map(e => { let t = i.GuildFolder.create({ guildIds: e.guildIds }); return null != e.folderId && (t.id = r.Int64Value.create({ value: String(e.folderId) })), null != e.folderColor && (t.color = r.UInt64Value.create({ value: String(e.folderColor) })), null != e.folderName && "" !== e.folderName && (t.name = r.StringValue.create({ value: String(e.folderName) })), t }) }, d.UserSettingsDelay.SLOW_USER_ACTION) } function I(e) { switch (e) { case _.ThemeTypes.DARK: return i.Theme.DARK; case _.ThemeTypes.LIGHT: return i.Theme.LIGHT; case _.ThemeTypes.DARKER: return i.Theme.DARKER; case _.ThemeTypes.MIDNIGHT: return i.Theme.MIDNIGHT; default: return i.Theme.DARK } } function T(e) { let { backgroundGradientPresetId: t, theme: n } = e, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : d.UserSettingsDelay.INFREQUENT_USER_ACTION; if (s.default.dispatch({ type: "UNSYNCED_USER_SETTINGS_UPDATE", settings: { useSystemTheme: "system" === n ? c.SystemThemeState.ON : c.SystemThemeState.OFF } }), s.default.dispatch({ type: "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE", changes: { appearance: { settings: { clientThemeSettings: { backgroundGradientPresetId: t }, theme: "system" === n ? void 0 : n } } } }), o.default.shouldSync("appearance")) return d.PreloadedUserSettingsActionCreators.updateAsync("appearance", e => { var i; e.theme = I(n), e.clientThemeSettings = { backgroundGradientPresetId: null != (i = { backgroundGradientPresetId: t }).backgroundGradientPresetId ? r.UInt32Value.create({ value: i.backgroundGradientPresetId }) : void 0 } }, i) } t.default = { overrideLocale(e) { s.default.dispatch({ type: "USER_SETTINGS_LOCALE_OVERRIDE", locale: e }) }, updatedUnsyncedSettings(e) { s.default.dispatch({ type: "UNSYNCED_USER_SETTINGS_UPDATE", settings: e }) }, setShouldSyncTextSettings(e) { s.default.dispatch({ type: "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE", changes: { text: { shouldSync: e, settings: e ? {} : { inlineAttachmentMedia: u.InlineAttachmentMedia.getSetting(), inlineEmbedMedia: u.InlineEmbedMedia.getSetting(), renderEmbeds: u.RenderEmbeds.getSetting(), renderReactions: u.RenderReactions.getSetting(), animateEmoji: u.AnimateEmoji.getSetting(), animateStickers: u.AnimateStickers.getSetting(), gifAutoPlay: u.GifAutoPlay.getSetting() } } } }) }, setShouldSyncAppearanceSettings(e) { var t; s.default.dispatch({ type: "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE", changes: { appearance: { shouldSync: e, settings: e ? {} : { theme: l.default.theme, clientThemeSettings: { backgroundGradientPresetId: null === (t = a.default.gradientPreset) || void 0 === t ? void 0 : t.id }, developerMode: u.DeveloperMode.getSetting() } } } }) }, applySettingsOverride(e) { s.default.dispatch({ type: "USER_SETTINGS_OVERRIDE_APPLY", settings: e }) }, clearSettingsOverride() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; s.default.dispatch({ type: "USER_SETTINGS_OVERRIDE_CLEAR", settings: t }) }, updateLocale: e => d.PreloadedUserSettingsActionCreators.updateAsync("localization", t => { t.locale = r.StringValue.create({ value: e }) }, d.UserSettingsDelay.INFREQUENT_USER_ACTION), updateTheme(e) { s.default.dispatch({ type: "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE", changes: { appearance: { settings: { theme: e } } } }), o.default.shouldSync("appearance") && d.PreloadedUserSettingsActionCreators.updateAsync("appearance", t => { t.theme = I(e) }, d.UserSettingsDelay.INFREQUENT_USER_ACTION) } } }, 230711: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("433517"), s = n("570140"), a = n("443684"), o = n("663389"), l = n("626135"), u = n("768581"), d = n("546796"), _ = n("981631"), c = n("792101"), E = n("689938"); t.default = { open() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : { openWithoutBackstack: !1 }; (0, a.default)(e, t, n) }, init: function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = arguments.length > 2 ? arguments[2] : void 0; s.default.dispatch({ type: "USER_SETTINGS_MODAL_INIT", section: e, subsection: t, ...n }) }, close() { let e = o.default.onClose; s.default.dispatch({ type: "USER_SETTINGS_MODAL_CLOSE" }), null != e && e() }, setSection(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; s.default.dispatch({ type: "USER_SETTINGS_MODAL_SET_SECTION", section: e, subsection: t, ...n }) }, clearSubsection(e) { s.default.dispatch({ type: "USER_SETTINGS_MODAL_CLEAR_SUBSECTION", forSection: e }) }, clearScrollPosition(e) { s.default.dispatch({ type: "USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION", forSection: e }) }, updateAccount(e) { s.default.dispatch({ type: "USER_SETTINGS_MODAL_UPDATE_ACCOUNT", settings: e }) }, submitComplete() { s.default.dispatch({ type: "USER_SETTINGS_MODAL_SUBMIT_COMPLETE" }) }, reset() { s.default.dispatch({ type: "USER_SETTINGS_MODAL_RESET" }) }, saveAccountChanges(e, t) { s.default.dispatch({ type: "USER_SETTINGS_MODAL_SUBMIT" }); let { username: n, email: a, emailToken: o, password: I, avatar: T, newPassword: f, discriminator: S } = e, { close: h } = t; return (0, d.default)(e => { let t = { username: n, email: a, email_token: o, password: I, avatar: T, new_password: f, ...e, discriminator: null != S && "" !== S ? S : void 0 }, s = r.Storage.get(_.DEVICE_TOKEN), l = (0, c.getDevicePushProvider)(); null != l && null != s && (t.push_provider = l, t.push_token = s); let u = r.Storage.get(_.DEVICE_VOIP_TOKEN); return null != c.DEVICE_PUSH_VOIP_PROVIDER && null != u && (t.push_voip_provider = c.DEVICE_PUSH_VOIP_PROVIDER, t.push_voip_token = u), i.HTTP.patch({ url: _.Endpoints.ME, oldFormErrors: !0, body: t }) }, { checkEnabled: !1, modalProps: { title: E.default.Messages.TWO_FA_CHANGE_ACCOUNT }, hooks: { onEarlyClose: () => s.default.dispatch({ type: "USER_SETTINGS_MODAL_SUBMIT_FAILURE", errors: {} }) } }).then(e => { let t = e.body, n = t.token; return l.default.track(_.AnalyticEvents.USER_AVATAR_UPDATED, { animated: (0, u.isAnimatedIconHash)(t.avatar) }), delete t.token, s.default.dispatch({ type: "UPDATE_TOKEN", token: n, userId: t.id }), s.default.dispatch({ type: "CURRENT_USER_UPDATE", user: t }), null != f && s.default.dispatch({ type: "USER_PASSWORD_UPDATE", user: t, newPassword: f }), null != I && null != f && s.default.dispatch({ type: "PASSWORD_UPDATED", userId: t.id }), h ? this.close() : this.submitComplete(), e }, e => (s.default.dispatch({ type: "USER_SETTINGS_MODAL_SUBMIT_FAILURE", errors: e.body }), e)) } } }, 284737: function(e, t, n) { "use strict"; n.r(t), n.d(t, { focus: function() { return o }, fullscreenChange: function() { return _ }, hidden: function() { return l }, init: function() { return E }, resized: function() { return d }, unload: function() { return I }, visibilityChange: function() { return c } }); var i = n("392711"), r = n("570140"), s = n("228488"), a = n("830917"); function o(e, t) { r.default.dispatch({ type: "WINDOW_FOCUS", windowId: (0, a.getWindowId)(e), focused: t }) } function l(e) { r.default.dispatch({ type: "WINDOW_HIDDEN", windowId: (0, a.getWindowId)(e) }) } let u = (0, i.memoize)(e => (0, i.debounce)((t, n) => { r.default.dispatch({ type: "WINDOW_RESIZED", windowId: e, width: t, height: n }) }, 100)); function d(e) { u((0, a.getWindowId)(e))(e.innerWidth, e.innerHeight) } function _(e) { let t = (0, a.getWindowId)(e); r.default.dispatch({ type: "WINDOW_FULLSCREEN_CHANGE", windowId: t, isElementFullscreen: (0, s.isFullScreen)(null, e.document) }) } function c(e) { let t = (0, a.getWindowId)(e); r.default.dispatch({ type: "WINDOW_VISIBILITY_CHANGE", windowId: t, visible: "visible" === e.document.visibilityState }) } function E(e) { let t = (0, a.getWindowId)(e), n = e.document; r.default.dispatch({ type: "WINDOW_INIT", windowId: t, isElementFullscreen: (0, s.isFullScreen)(null, n), focused: n.hasFocus(), width: e.innerWidth, height: e.innerHeight, visible: "visible" === n.visibilityState }) } function I(e) { r.default.dispatch({ type: "WINDOW_UNLOAD", windowId: (0, a.getWindowId)(e) }) } }, 240872: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("952265"), s = n("468026"), a = n("689938"); t.default = { show(e) { let { title: t, body: n, confirmColor: a, confirmText: o, cancelText: l, onConfirm: u, onCancel: d, onCloseCallback: _, secondaryConfirmText: c, onConfirmSecondary: E, className: I, titleClassName: T } = e; (0, r.openModal)(e => (0, i.jsx)(s.default, { ...e, title: t, body: n, confirmColor: a, confirmText: o, cancelText: l, onConfirm: u, onCancel: d, secondaryConfirmText: c, onConfirmSecondary: E, className: I, titleClassName: T }), { onCloseCallback: _ }) }, close() {}, confirm(e) { return new Promise(t => { this.show({ onConfirm() { t(!0) }, cancelText: a.default.Messages.CANCEL, onCancel() { t(!1) }, ...e }) }) } } }, 929782: function(e, t, n) { "use strict"; n.r(t), n.d(t, { enable: function() { return A }, isNotSupported: function() { return S }, trackToggleSelfMute: function() { return m } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("570140"), a = n("710845"), o = n("131951"), l = n("556296"), u = n("451478"), d = n("626135"), _ = n("554174"), c = n("981631"), E = n("761274"), I = n("689938"); let T = new a.default("AudioActionCreators"); function f() { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("61418")]).then(n.bind(n, "431583")); return t => (0, i.jsx)(e, { source: "Unsupported Browser", ...t }) }) } function S() { return !o.default.isSupported() && ((0, r.openModal)(e => (0, i.jsx)(r.ConfirmModal, { header: I.default.Messages.UNSUPPORTED_BROWSER, confirmText: I.default.Messages.DOWNLOAD_APP, cancelText: I.default.Messages.CANCEL, onConfirm: f, confirmButtonColor: r.Button.Colors.BRAND, ...e, children: (0, i.jsx)(r.Text, { variant: "text-md/normal", children: I.default.Messages.UNSUPPORTED_BROWSER_DETAILS }) })), !0) } function h(e) { d.default.track(c.AnalyticEvents.PERMISSIONS_ACKED, { type: "audio", action: e }) } function A() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return S() ? Promise.resolve(!1) : (d.default.track(c.AnalyticEvents.PERMISSIONS_REQUESTED, { type: "audio" }), o.default.getMediaEngine().enable().then(() => { s.default.dispatch({ type: "MEDIA_ENGINE_SET_AUDIO_ENABLED", enabled: !0, unmute: e }), h(E.NativePermissionStates.ACCEPTED) }, e => { switch (e) { case c.UserMediaErrors.NO_DEVICES_FOUND: h(E.NativePermissionStates.NO_DEVICES); break; case c.UserMediaErrors.PERMISSION_DENIED: h(E.NativePermissionStates.DENIED); break; case c.UserMediaErrors.PERMISSION_DISMISSED: h(E.NativePermissionStates.DISMISSED); break; default: h(E.NativePermissionStates.ERROR), T.warn("unknown getUserMedia error: ".concat(e)) } }).then(() => !0)) } function m(e) { let { usedKeybind: t = !1 } = e, n = l.default.getKeybindForAction(c.GlobalKeybindActions.TOGGLE_MUTE, !1, !0); d.default.track(c.AnalyticEvents.INPUT_MUTE_TOGGLED, { enabled: !o.default.isSelfMute(), custom_keybind_assigned: null != n && n.id !== l.DEFAULT_MUTE_KEYBIND.id, used_keybind: t, app_in_focus: u.default.isFocused(), overlay_activated: null != (0, _.default)() }) } }, 966390: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"); var i = n("481060"), r = n("570140"), s = n("430742"), a = n("904245"), o = n("166459"), l = n("531643"), u = n("881052"), d = n("673750"), _ = n("141795"), c = n("476326"), E = n("680287"), I = n("163268"), T = n("539573"), f = n("786761"), S = n("3148"), h = n("48854"), A = n("785359"), m = n("79390"), N = n("623292"), p = n("807092"), O = n("467798"), C = n("703558"), R = n("117530"), g = n("630388"), L = n("226351"), v = n("981631"), D = n("689938"); async function M(e) { var t, n, i; let _, { channelId: c, uploads: M, draftType: y, parsedMessage: P, options: U = {}, raiseEndpointErrors: b = !1 } = e, G = new E.default(v.Endpoints.MESSAGES(c)), w = new L.Future, k = { content: "", nonce: "", channel_id: c, type: v.MessageTypes.DEFAULT, sticker_ids: null == U ? void 0 : U.stickerIds, poll: null == U ? void 0 : U.poll }; null != P && (k.content = null == P ? void 0 : P.content), null != p.default.getPendingReply(c) && (k.type = v.MessageTypes.REPLY, k.message_reference = U.messageReference, k.allowed_mentions = U.allowedMentions, (0, N.deletePendingReply)(c)); let [B, V] = (0, O.default)(k.content); B && (k.content = V, k.flags = (0, g.addFlag)(null !== (t = k.flags) && void 0 !== t ? t : 0, v.MessageFlags.SUPPRESS_NOTIFICATIONS)); let x = null !== (n = U.nonce) && void 0 !== n ? n : (0, h.createNonce)(), F = (0, S.default)({ channelId: c, content: k.content, tts: null !== (i = null == P ? void 0 : P.tts) && void 0 !== i && i, type: k.type, messageReference: k.message_reference, flags: k.flags, nonce: x, poll: (0, m.createPollServerDataFromCreateRequest)(U.poll) }); return (k.nonce = x, G.on("start", e => { _ = (0, f.createMessageRecord)({ ...F, id: e.id }), r.default.dispatch({ type: "UPLOAD_START", channelId: c, file: e, message: _, uploader: G }) }), G.on("progress", e => { r.default.dispatch({ type: "UPLOAD_PROGRESS", channelId: c, file: e }) })), G.on("error", (e, t, n, i) => { if (r.default.dispatch({ type: "UPLOAD_FAIL", channelId: c, file: e, messageRecord: _ }), (0, A.logMessageSendFailure)({ fileItems: e.items, failureCode: t, errorMessage: null == i ? void 0 : i.msg }), t === v.AbortCodes.EXPLICIT_CONTENT) { a.default.sendExplicitMediaClydeError(c, null == n ? void 0 : n.attachments, I.TrackMediaRedactionContext.EXPLICIT_MEDIA_MESSAGE_SEND_BLOCKED); return } if (t === v.AbortCodes.AUTOMOD_MESSAGE_BLOCKED) { let e = { code: t, message: null == n ? void 0 : n.message }, i = null == _ ? null : { type: d.MessageDataType.SEND, message: { ..._, channelId: c } }; (0, l.openUploadError)({ title: D.default.Messages.UPLOAD_AREA_UPLOAD_FAILED_TITLE, help: (0, T.getAutomodErrorMessage)(i, e) }); return } t !== v.AbortCodes.GUILD_FILE_UPLOAD_RATE_LIMITED_ACCESS && (b ? w.reject(new u.APIError({ status: t, body: null != n ? n : {} }, t)) : (0, l.openUploadError)({ title: D.default.Messages.UPLOAD_AREA_UPLOAD_FAILED_TITLE, help: D.default.Messages.UPLOAD_AREA_UPLOAD_FAILED_RETRY_HELP }), "" !== k.content && "" === C.default.getDraft(c, y) && s.default.saveDraft(c, k.content, y), 0 === R.default.getUploadCount(c, y) && o.default.setUploads({ channelId: c, uploads: M, draftType: y })) }), G.on("complete", (e, t) => { r.default.dispatch({ type: "UPLOAD_COMPLETE", channelId: c, file: e, aborted: G._aborted, messageRecord: t }) }), await G.uploadFiles(M, k), w.resolve(), w.promise } t.default = { instantBatchUpload: function(e) { let { channelId: t, files: n, draftType: i, isThumbnail: r = !1, filesMetadata: s = [] } = e, a = Array.from(n).map((e, n) => { let i = null != s ? s[n] : {}; return new _.CloudUpload({ file: e, platform: c.UploadPlatform.WEB, isThumbnail: r, ...i }, t) }); M({ channelId: t, uploads: a, draftType: i }) }, upload: function e(t) { let { channelId: n, file: o, draftType: u, message: d, hasSpoiler: _, filename: c } = t, T = { content: "", tts: !1, hasSpoiler: _, filename: c }; if (null != d) { T.content = d.content, T.tts = d.tts, T.channel_id = d.channel_id; let e = p.default.getPendingReply(n); if (null != e) { let t = a.default.getSendMessageOptionsForReply(e); T.type = v.MessageTypes.REPLY, T.message_reference = t.messageReference, T.allowed_mentions = t.allowedMentions, (0, N.deletePendingReply)(n) } } let f = new E.default(v.Endpoints.MESSAGES(n)); f.on("start", e => { r.default.dispatch({ type: "UPLOAD_START", channelId: n, file: e, uploader: f }) }), f.on("progress", e => { r.default.dispatch({ type: "UPLOAD_PROGRESS", channelId: n, file: e }) }), f.on("error", (t, _, c) => { if (r.default.dispatch({ type: "UPLOAD_FAIL", channelId: n, file: t }), (0, A.logMessageSendFailure)({ fileItems: t.items, failureCode: _ }), _ === v.AbortCodes.EXPLICIT_CONTENT) { a.default.sendExplicitMediaClydeError(n, null == c ? void 0 : c.attachments, I.TrackMediaRedactionContext.EXPLICIT_MEDIA_MESSAGE_SEND_BLOCKED); return }(0, l.openUploadError)({ title: D.default.Messages.UPLOAD_AREA_UPLOAD_FAILED_TITLE, help: D.default.Messages.UPLOAD_AREA_UPLOAD_FAILED_HELP.format({ onClick: () => { (0, i.closeModal)(l.UPLOAD_ERROR_MODAL_KEY), e({ channelId: n, file: o, draftType: u, message: d }) } }) }), "" !== T.content && "" === C.default.getDraft(n, u) && s.default.saveDraft(n, T.content, u) }), f.on("complete", e => { r.default.dispatch({ type: "UPLOAD_COMPLETE", channelId: n, file: e }) }), f.upload(o, T) }, uploadFiles: M, cancel(e) { r.default.dispatch({ type: "UPLOAD_CANCEL_REQUEST", file: e }), null != e.draftContent && null != e.channelId && "" === C.default.getDraft(e.channelId, C.DraftType.ChannelMessage) && r.default.dispatch({ type: "DRAFT_SAVE", channelId: e.channelId, draft: e.draftContent, draftType: C.DraftType.ChannelMessage }) } } }, 596454: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }), n("47120"), n("411104"), n("733860"), n("653041"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("699581"), u = n.n(l), d = n("374470"), _ = n("442837"), c = n("134432"), E = n("695346"), I = n("237997"), T = n("278297"), f = n("768581"), S = n("176354"), h = n("506071"), A = n("149203"); function m(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class N extends(i = s.PureComponent) { componentWillUnmount() { var e; null === (e = this.cancelLoadImage) || void 0 === e || e.call(this) } getSrc() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.props, { src: t, emojiId: n, emojiName: i, animated: r, shouldAnimate: s, isFocused: a, isInteracting: o, size: l = "default" } = e, { hover: u } = this.state; if (null != t) return t; if (null != n) { let e = A.EMOJI_SIZE_MAP[l]; return f.default.getEmojiURL({ id: n, animated: a && !0 === r && (!0 === s || u || !0 === o), size: e }) } if (null != i) return S.default.getURL(i) } render() { var e; let t; let { emojiName: n, animated: i, className: a, size: l = "default", alt: u, shouldAnimate: d, isFocused: _, emojiId: c, autoplay: E, isInteracting: I, ...T } = this.props, f = this.getSrc(); return null == f || "" === f ? (0, r.jsx)("span", { className: o()("emoji", "emoji-text"), children: n }) : (i && (t = { onMouseEnter: this.onMouseEnter, onMouseLeave: this.onMouseLeave }), (0, s.createElement)("img", { ...T, key: this.key, src: f, alt: null !== (e = null != u ? u : n) && void 0 !== e ? e : void 0, draggable: !1, ...t, className: o()("emoji", a, { jumboable: "jumbo" === l }), onError: this.onError, "data-type": "emoji", ...null != c && "" !== c ? { "data-id": c } : { "data-name": n } })) } constructor(...e) { super(...e), m(this, "state", { hover: !1 }), m(this, "key", void 0), m(this, "cancelLoadImage", void 0), m(this, "onError", () => { let e = this.getSrc(); null != e && (this.cancelLoadImage = (0, c.loadImage)(e, e => { !e && (this.key = Date.now(), this.forceUpdate()) })) }), m(this, "onMouseEnter", e => { this.setState({ hover: !0 }); let { onMouseEnter: t } = this.props; null != t && t(e) }), m(this, "onMouseLeave", e => { this.setState({ hover: !1 }); let { onMouseLeave: t } = this.props; null != t && t(e) }) } } m(N, "defaultProps", { isInteracting: !1 }); let p = function(e) { if (null == window.IntersectionObserver) return function(t) { return (0, r.jsx)(e, { ...t, shouldAnimate: t.animated }) }; let t = [], n = [], i = new window.IntersectionObserver(e => { e.forEach(e => { let i = n.find(t => { let [n] = t; return n === e.target }); if (null == i) return; let r = i[1]; if (e.intersectionRatio >= .7) { var s, a; if (-1 !== t.indexOf(r)) return; let n = Math.abs(e.intersectionRect.bottom - Number(null === (s = e.rootBounds) || void 0 === s ? void 0 : s.bottom)) < Math.abs(e.intersectionRect.top - Number(null === (a = e.rootBounds) || void 0 === a ? void 0 : a.top)); n ? t.unshift(r) : t.push(r), r.forceUpdate(), n && t.length > 100 && t[100].forceUpdate() } else { let e = t.indexOf(r); - 1 !== e && (t.splice(e, 1), r.forceUpdate(), e < 100 && t.length >= 100 && t[99].forceUpdate()) } }) }, { threshold: .7 }); function a(e) { let t = u().findDOMNode(e); (0, d.isElement)(t) && (n.push([t, e]), i.observe(t)) } function o(e) { let r = u().findDOMNode(e); i.unobserve(r); let s = n.findIndex(t => { let [n, i] = t; return i === e }); - 1 !== s && (n.splice(s, 1), -1 !== (s = t.indexOf(e)) && (t.splice(s, 1), s < 100 && t.length >= 100 && t[99].forceUpdate())) } return class extends s.Component { shouldAutoplay(e) { return e.animated && e.autoplay } componentDidMount() { this.shouldAutoplay(this.props) && a(this) } componentDidUpdate(e) { let t = this.shouldAutoplay(e), n = this.shouldAutoplay(this.props); n !== t && (n ? a(this) : o(this)) } componentWillUnmount() { this.shouldAutoplay(this.props) && o(this) } render() { let n = t.indexOf(this), { autoplay: i, allowAnimatedEmoji: s, ...a } = this.props; return (0, r.jsx)(T.MessagesInteractionContext.Consumer, { children: t => (0, r.jsx)(e, { ...a, autoplay: i || !1, shouldAnimate: -1 !== n && n < 100 && !t.disableAnimations && s }) }) } } }(N); function O(e) { let t = E.AnimateEmoji.useSetting(), n = { autoplay: null == e.autoplay ? t : e.autoplay, allowAnimatedEmoji: t }, i = __OVERLAY__ ? (0, _.useStateFromStores)([I.default], () => I.default.isInstanceFocused()) : (0, h.useIsWindowFocused)(); return (0, r.jsx)(p, { ...e, ...n, isFocused: i }) } }, 412899: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MemberRole: function() { return x }, default: function() { return W } }), n("47120"), n("411104"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("512722"), l = n.n(o), u = n("153832"), d = n("924826"), _ = n("866442"), c = n("442837"), E = n("692547"), I = n("481060"), T = n("239091"), f = n("749210"), S = n("112724"), h = n("607070"), A = n("605436"), m = n("134433"), N = n("518738"), p = n("434404"), O = n("271383"), C = n("430824"), R = n("496675"), g = n("594174"), L = n("285952"), v = n("153124"), D = n("465670"), M = n("795295"), y = n("729285"), P = n("176278"), U = n("700785"), b = n("944613"), G = n("981631"), w = n("689938"), k = n("743428"); let B = () => Promise.resolve(); function V(e) { let { userRoles: t, position: n, ...r } = e, s = (0, v.useUID)(); return (0, i.jsxs)(I.Dialog, { className: a()(k.overflowRolesPopout, { [k.popoutBottom]: "bottom" === n, [k.popoutTop]: "top" === n }), "aria-labelledby": s, children: [(0, i.jsx)("div", { className: k.overflowRolesPopoutArrowWrapper, children: (0, i.jsx)("div", { className: k.overflowRolesPopoutArrow }) }), (0, i.jsxs)(L.default, { className: k.overflowRolesPopoutHeader, align: L.default.Align.CENTER, children: [(0, i.jsx)(M.default, { color: E.default.unsafe_rawColors.PRIMARY_400.css, className: k.overflowRolesPopoutHeaderIcon }), (0, i.jsx)("div", { className: k.overflowRolesPopoutHeaderText, id: s, children: w.default.Messages.ROLES_LIST.format({ numRoles: t.length }) })] }), (0, i.jsx)(Y, { ...r, wrap: !0, userRoles: t })] }) } let x = r.forwardRef(function(e, t) { var s, o, l; let u; let { canRemove: f, className: S, role: A, onRemove: p, guildId: O, disableBorderColor: C, onMouseDown: R } = e, { tabIndex: g, ...L } = (0, d.useListItem)(A.id), v = (0, N.useRoleIcon)({ roleId: A.id, size: 16, guildId: O }), M = (0, c.useStateFromStores)([h.default], () => h.default.roleStyle), y = (null === (s = A.tags) || void 0 === s ? void 0 : s.guild_connections) === null, U = r.useCallback(e => { (0, T.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("5396").then(n.bind(n, "731646")); return t => (0, i.jsx)(e, { ...t, id: A.id, label: w.default.Messages.COPY_ID_ROLE }) }) }, [A.id]), b = (0, I.useToken)(E.default.unsafe_rawColors.PRIMARY_300).hsl(), G = null !== (o = A.colorString) && void 0 !== o ? o : b, B = null !== (l = (0, _.hex2rgb)(G, .6)) && void 0 !== l ? l : void 0, V = E.default.unsafe_rawColors.WHITE_500.css, x = (0, _.hex2int)(G); null != x && .3 > (0, _.getDarkness)(x) && (V = E.default.unsafe_rawColors.PRIMARY_630.css), u = y ? (0, i.jsx)(m.default, { className: k.roleFlowerStar, iconClassName: f ? k.roleVerifiedIcon : void 0, color: G, size: 14 }) : "dot" === M ? (0, i.jsx)(I.RoleDot, { className: k.roleDot, color: G, background: !1, tooltip: !1 }) : (0, i.jsx)(I.RoleCircle, { color: G }); let F = r.useMemo(() => { var t; return { borderColor: C ? void 0 : B, ...null !== (t = e.style) && void 0 !== t ? t : {} } }, [B, C, e.style]); return (0, i.jsx)(I.FocusRing, { children: (0, i.jsxs)("div", { ref: t, className: a()(k.role, S), style: F, onContextMenu: U, onMouseDown: R, "aria-label": A.name, tabIndex: g, ...L, children: [(0, i.jsxs)(I.Clickable, { className: a()(f && k.roleRemoveButtonCanRemove, k.roleRemoveButton), onClick: f ? p : void 0, tabIndex: f ? g : -1, focusProps: { focusClassName: k.roleRemoveIconFocused }, "aria-hidden": !f, "aria-label": w.default.Messages.GUILD_SETTINGS_MEMBERS_REMOVE_ROLE.format({ roleName: A.name }), children: [u, f ? (0, i.jsx)(D.default, { color: V, className: k.roleRemoveIcon, "aria-hidden": !0 }) : null] }), null != v ? (0, i.jsx)(P.default, { className: k.roleIcon, ...v, enableTooltip: !1 }) : null, (0, i.jsx)("div", { "aria-hidden": !0, className: k.roleName, children: (0, i.jsx)(I.Text, { variant: "text-xs/medium", className: k.roleNameOverflow, children: A.name }) })] }) }) }); function F(e) { let { user: t, numRolesHidden: n, roleClassName: r } = e, s = (0, d.useListItem)("overflow-more-roles-".concat(t.id)); return (0, i.jsx)(I.Popout, { renderPopout: t => { let { position: n } = t; return (0, i.jsx)(V, { ...e, position: null != n ? n : "top" }) }, position: "top", align: "center", children: e => (0, i.jsx)(I.FocusRing, { children: (0, i.jsx)("button", { ...e, className: a()(k.overflowButton, r), ...s, children: "+".concat(n) }) }) }) } function H(e) { let { guild: t, user: n, handleAddRole: r, roleClassName: s, addButtonClassName: o, addButtonIconClassName: l } = e, u = (0, d.useListItem)("overflow-add-roles-".concat(n.id)), _ = (0, c.useStateFromStores)([h.default], () => h.default.roleStyle), E = R.default.getHighestRole(t), T = O.default.getMember(t.id, n.id), f = e => (0, A.isNotEveryoneRoleId)(t.id, e.id) && !e.managed && R.default.isRoleHigher(t, E, e) && (null == T || -1 === T.roles.indexOf(e.id)); return (0, i.jsx)(I.Popout, { renderPopout: e => { let { closePopout: n } = e; return (0, i.jsx)(b.default, { guild: t, roleStyle: _, roleFilter: f, onSelect: r, onClose: n }) }, position: "bottom", align: "center", children: e => (0, i.jsx)(I.FocusRing, { children: (0, i.jsx)("button", { ...e, className: a()(k.addButton, s, o), "aria-label": w.default.Messages.GUILD_SETTINGS_MEMBERS_ADD_ROLE, type: "button", ...u, children: (0, i.jsx)(y.default, { className: a()(k.addButtonIcon, l), "aria-hidden": !0 }) }) }) }) } function Y(e) { let t; let { user: n, guild: s, userRoles: o, wrap: _ = !0, width: E, className: I, readOnly: T, roleClassName: S, disableBorderColor: h } = e, A = r.useRef({}), m = r.useCallback(e => { var t; let i = o.filter(t => t !== e.id); (null === (t = e.tags) || void 0 === t ? void 0 : t.guild_connections) === null ? f.default.unassignGuildRoleConnection(s.id, e.id) : p.default.updateMemberRoles(s.id, n.id, i, [], [e.id]) }, [o, s.id, n.id]), N = r.useCallback(e => { let t = o; - 1 === t.indexOf(e) && (t = t.concat([e])), p.default.updateMemberRoles(s.id, n.id, t, [e], []) }, [o, s.id, n.id]), [O, L] = r.useState(null), v = (0, c.useStateFromStores)([C.default], () => C.default.getRoles(s.id)), D = r.useMemo(() => { let e = Object.values(v).filter(e => o.includes(e.id)).sort((e, t) => { var n, i; let r = (null === (n = e.tags) || void 0 === n ? void 0 : n.guild_connections) !== null, s = (null === (i = t.tags) || void 0 === i ? void 0 : i.guild_connections) !== null; return r && !s ? 1 : !r && s ? -1 : 0 }); return null != O ? e.slice(0, O) : e }, [v, O, o]), M = o.length - D.length; r.useLayoutEffect(() => { if (_) return; if ("number" != typeof E) throw Error("Unexpected null width"); let e = 0, t = 0, n = E - 30 - 4; for (let i = 0; i < D.length; i++) { let r = D[i], s = A.current[r.id]; if (null != s) { if ((t += s.offsetWidth + 4) > n) break; e++ } } L(t => e < D.length ? e : t) }, [_, E, D]); let y = g.default.getCurrentUser(); l()(null != y, "MemberRolesList: currentUser cannot be undefined"); let P = !T && R.default.can(G.Permissions.MANAGE_ROLES, s), b = U.getHighestRole(s, y.id), V = r.useMemo(() => "roles-".concat((0, u.v4)()), []), Y = (0, d.default)({ id: V, isEnabled: !0, scrollToStart: B, scrollToEnd: B, wrap: !0 }), j = D.map(e => { var t; return (0, i.jsx)(x, { className: S, role: e, canRemove: P && U.isRoleHigher(s, y.id, b, e) || (null === (t = e.tags) || void 0 === t ? void 0 : t.guild_connections) === null && n.id === y.id, onRemove: () => m(e), ref: t => { var n, i; return n = e.id, void(null != (i = t) ? A.current[n] = i : delete A.current[n]) }, guildId: s.id, disableBorderColor: h }, e.id) }); return null != O && 0 !== M ? t = (0, i.jsx)(F, { ...e, numRolesHidden: M }) : P && (t = (0, i.jsx)(H, { ...e, handleAddRole: N })), (0, i.jsx)(d.ListNavigatorProvider, { navigator: Y, children: (0, i.jsx)(d.ListNavigatorContainer, { children: e => { let { ref: n, ...r } = e; return (0, i.jsxs)("div", { className: a()(k.root, I), "aria-label": w.default.Messages.ROLES_LIST.format({ numRoles: o.length }), ref: n, ...r, children: [j, t] }) } }) }) } let j = (0, S.default)(Y); function W(e) { return (0, c.useStateFromStores)([R.default], () => { var t; return R.default.getGuildVersion(null === (t = e.guild) || void 0 === t ? void 0 : t.id) }), !1 === e.wrap ? (0, i.jsx)(j, { ...e }) : (0, i.jsx)(Y, { ...e }) } }, 721037: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("519938"), o = n("317381"), l = n("917107"), u = n("385326"), d = n("928518"), _ = n("210887"), c = n("442917"), E = n("592125"), I = n("366050"), T = n("944486"), f = n("451478"), S = n("518774"), h = n("823379"), A = n("981631"), m = n("918559"); let N = { [A.PictureInPictureComponents.VIDEO]: c.default, [A.PictureInPictureComponents.EMBED_IFRAME]: u.default }; class p extends r.PureComponent { render() { let { selectedPIPWindow: e, pipWindows: t, maxX: n, maxY: r, theme: s, dockedRect: a, appContext: o, roundCorners: l } = this.props; return (0, i.jsx)(S.default, { pictureInPictureComponents: N, selectedPIPWindow: e, pipWindows: t, maxX: n, maxY: r, dockedRect: a, theme: s, onWindowMove: this.handleWindowMove, appContext: o, roundCorners: l }) } constructor(...e) { var t, n, i; super(...e), t = this, n = "handleWindowMove", i = (e, t) => { a.moveTo(e, t) }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = s.default.connectStores([d.default, o.default, f.default, _.default, E.default, I.default, T.default], e => { var t, n, i; let r; let s, { showInPopoutWindow: a = !1, disallowTextActivity: u = !1 } = e, c = d.default.getWindowOpen(A.PopoutWindowKeys.CHANNEL_CALL_POPOUT), S = o.default.getCurrentEmbeddedActivity(), N = null != S && !(0, l.default)(S.channelId, E.default, T.default), p = o.default.getActivityPanelMode(), O = null != S && N && p === m.ActivityPanelModes.PANEL, C = f.default.windowSize(); if (c && (u && O || !O)) { let e = d.default.getWindow(A.PopoutWindowKeys.CHANNEL_CALL_POPOUT); C = null == e ? C : { width: e.innerWidth, height: e.innerHeight } }!u && O ? r = A.AppContext.APP : a && (r = A.AppContext.POPOUT), s = u && N ? null : N || !c || a ? null != S && p === m.ActivityPanelModes.PANEL && N ? null !== (t = I.default.pipActivityWindow) && void 0 !== t ? t : I.default.pipVideoWindow : null !== (n = I.default.pipVideoWindow) && void 0 !== n ? n : I.default.pipActivityWindow : null; let R = Array.from(I.default.pipWindows.values()), g = R.find(e => e.component === A.PictureInPictureComponents.VIDEO); return { selectedPIPWindow: s, pipWindows: [g, R.find(e => e.component === A.PictureInPictureComponents.EMBED_IFRAME)].filter(h.isNotNullish), maxX: C.width, maxY: C.height, theme: _.default.theme, dockedRect: I.default.getDockedRect(null !== (i = null == s ? void 0 : s.id) && void 0 !== i ? i : ""), appContext: r, roundCorners: !0 } })(p) }, 788307: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ActivityEmoji: function() { return v } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("844099"), l = n("442837"), u = n("481060"), d = n("596454"), _ = n("122810"), c = n("74433"), E = n("44315"), I = n("633302"), T = n("574176"), f = n("106301"), S = n("223135"), h = n("695346"), A = n("314897"), m = n("592125"), N = n("496675"), p = n("158776"), O = n("979651"), C = n("6074"), R = n("981631"), g = n("573731"); let L = "14px"; function v(e) { let { emoji: t, className: n, animate: r = !0, hideTooltip: s, tooltipDelay: o } = e, l = h.AnimateEmoji.useSetting(), _ = null != t.id ? ":".concat(t.name, ":") : I.default.translateSurrogatesToInlineEmoji(t.name), c = { className: a()(g.emoji, n), emojiId: t.id, emojiName: t.name, autoplay: !0, animated: !!(t.animated && l && r) }; return s ? (0, i.jsx)(d.default, { ...c }) : (0, i.jsx)(u.Tooltip, { text: _, delay: o, children: e => (0, i.jsx)(d.default, { ...e, ...c }) }) } let D = e => { let { className: t, text: n } = e, s = r.useRef(null), o = r.useRef(null), [l, d] = r.useState(!1); return r.useLayoutEffect(() => { let { current: e } = s, { current: t } = o; if (null != e && null != t) d(!(e.clientWidth < t.clientWidth && e.clientHeight <= t.clientHeight)) }, [n]), (0, i.jsx)(u.Tooltip, { text: l || null == n || "" === n ? null : n, delay: 150, "aria-label": !1, children: e => (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { ...e, className: t, ref: s, children: n }), (0, i.jsx)("div", { className: a()(g.textRuler, t), ref: o, "aria-hidden": !0, children: n })] }) }) }; t.default = e => { var t; let { activities: n, applicationStream: r, className: s, textClassName: a, emojiClassName: u, animate: d = !0, hideTooltip: I = !1, hideEmoji: h = !1, user: M, hasQuest: y } = e, P = null != n ? n.find(e => e.type === R.ActivityTypes.CUSTOM_STATUS) : null, U = (0, l.useStateFromStores)([A.default], () => A.default.getId() === (null == M ? void 0 : M.id)), b = (0, l.useStateFromStores)([f.default], () => U ? f.default.getHangStatusActivity() : null != n ? n.find(e => e.type === R.ActivityTypes.HANG_STATUS) : null), G = (0, l.useStateFromStores)([O.default, m.default], () => { var e; return null != b && null != M ? m.default.getChannel(null === (e = O.default.getVoiceStateForUser(M.id)) || void 0 === e ? void 0 : e.channelId) : null }), { enableHangStatus: w } = T.HangStatusExperiment.useExperiment({ guildId: null == G ? void 0 : G.guild_id, location: "ActivityStatus" }, { autoTrackExposure: !1 }), k = (0, E.useColorValue)(R.Color.BRAND_345), B = null, V = w && null != b && N.default.can(R.Permissions.CONNECT, G); V ? B = (0, i.jsx)(S.default, { className: u, hangStatusActivity: b }) : null != P && null != P.emoji && !h && (B = (0, i.jsx)(v, { emoji: P.emoji, animate: d, hideTooltip: I, className: u })); let x = (0, l.useStateFromStores)([p.default], () => null != M ? p.default.getStatus(M.id) : null), F = null !== x && [R.StatusTypes.OFFLINE, R.StatusTypes.INVISIBLE].includes(x), H = null === (t = (0, c.default)(n, r, void 0, V)) || void 0 === t ? void 0 : t.activityText, Y = null != H && H.length > 0; return F || null == B && !Y ? null : (0, i.jsxs)("div", { className: s, children: [B, (0, i.jsx)(D, { text: H, className: a }), y && (0, i.jsx)(o.QuestsIcon, { className: g.questsIcon, height: L, width: L, color: k.hex }), null != n && n.some(e => (0, _.default)(e, V)) ? (0, i.jsx)(C.default, { width: 16, height: 16, className: g.icon }) : null] }) } }, 410575: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i, r = n("735250"), s = n("470079"), a = n("153832"), o = n("626135"), l = n("251625"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class _ extends(i = s.Component) { renderProvider(e) { var t, n; let { section: i, page: s, object: a, objectType: l, children: u } = this.props, d = this.mergeLocation(e.location, this.getLocation(s, i, a, l)), _ = this.getContext(d, null !== (t = this._loadDate) && void 0 !== t ? t : e.loadDate, null !== (n = this._loadId) && void 0 !== n ? n : e.loadId); return (0, r.jsx)(o.AnalyticsContext.Provider, { value: _, children: u }) } render() { let { context: e } = this.props; return null != e ? this.renderProvider(e) : (0, r.jsx)(o.AnalyticsContext.Consumer, { children: e => this.renderProvider(e) }) } constructor(e) { super(e), d(this, "_loadId", null), d(this, "_loadDate", this.props.root ? Date.now() : null), d(this, "getLocation", (0, l.cachedFunction)((e, t, n, i) => { let r = {}; return null != e && (r.page = e), null != t && (r.section = t), null != n && (r.object = n), null != i && (r.objectType = i), r })), d(this, "mergeLocation", (0, l.cachedFunction)((e, t) => ({ ...e, ...t }))), d(this, "getContext", (0, l.cachedFunction)((e, t, n) => ({ location: e, loadDate: t, loadId: n }))), null != e.loadId ? this._loadId = e.loadId : e.root && (this._loadId = (0, a.v4)()) } } d(_, "Pages", u.AnalyticsPages), d(_, "Sections", u.AnalyticsSections), d(_, "Objects", u.AnalyticsObjects), d(_, "ObjectTypes", u.AnalyticsObjectTypes), d(_, "defaultProps", { root: !1 }) }, 99690: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("372900"); t.default = r.memo(function(e) { var t, n, o, l; let { user: u, size: d = s.AvatarSizes.SIZE_32, animate: _ = !1, "aria-hidden": c = !1, ...E } = e, I = r.useContext(a.default); return (0, i.jsx)(s.Avatar, { src: (t = u, n = (0, s.getAvatarSize)(d), o = _, l = I, t.getAvatarURL(l, n, o)), size: d, "aria-label": c ? void 0 : u.username, "aria-hidden": c, ...E }) }) }, 425493: function(e, t, n) { "use strict"; n.r(t); var i, r, s = n("735250"); n("470079"); var a = n("120356"), o = n.n(a), l = n("873546"), u = n("481060"), d = n("465670"), _ = n("696202"), c = n("689938"), E = n("966646"); (i = r || (r = {})).DEFAULT = "", i.BOLD = "Bold", i.SOLID = "Solid"; let I = e => { let { closeAction: t, variant: n, keybind: i, className: r } = e; return (0, s.jsxs)("div", { className: o()(E.container, r), children: [(0, s.jsx)(u.Clickable, { className: o()(E.closeButton, { [E.closeButtonBold]: "Bold" === n, [E.closeButtonSolid]: "Solid" === n }), onClick: t, "aria-label": c.default.Messages.CLOSE, children: "Solid" === n ? (0, s.jsx)(_.default, { width: 24, height: 24, "aria-hidden": !0 }) : (0, s.jsx)(d.default, { width: 18, height: 18, "aria-hidden": !0 }) }), l.isMobile ? null : (0, s.jsx)("div", { className: o()(E.keybind), "aria-hidden": !0, children: i })] }) }; I.defaultProps = { variant: "" }, I.Variants = r, t.default = I }, 490173: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("699581"), a = n("990547"), o = n("442837"), l = n("481060"), u = n("239091"), d = n("40851"), _ = n("213609"), c = n("210887"), E = n("574254"), I = n("153850"), T = n("585483"), f = n("981631"); function S(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let h = e => { let { children: t, close: n, onUnmount: o, target: u, rect: c, position: E, align: T, impressionName: S, impressionProperties: h } = e, A = r.useRef(null), m = r.useMemo(() => ({ current: u }), [u]); r.useEffect(() => { var e, t; let i = (0, s.findDOMNode)(A.current); if (null == i) return; let r = e => { let t = e.target, i = (0, s.findDOMNode)(A.current); !(null != i && (0, l.referencePortalAwareContains)(i, t)) && (window.getSelection().removeAllRanges(), n()) }; return null === (e = i.ownerDocument) || void 0 === e || e.addEventListener("click", r, !0), null === (t = i.ownerDocument) || void 0 === t || t.addEventListener("contextmenu", r, !0), () => { var e, t; null === (e = i.ownerDocument) || void 0 === e || e.removeEventListener("click", r, !0), null === (t = i.ownerDocument) || void 0 === t || t.removeEventListener("contextmenu", r, !0) } }, [n]); let N = r.useRef(o); r.useEffect(() => void(N.current = o)), r.useEffect(() => () => { var e; return null === (e = N.current) || void 0 === e ? void 0 : e.call(N) }, []), r.useLayoutEffect(() => { var e; null === (e = A.current) || void 0 === e || e.updatePosition() }), (0, _.default)({ type: a.ImpressionTypes.MENU, name: S, properties: h }); let p = (0, d.useWindowDispatch)(), O = r.useCallback(() => { p.dispatch(f.ComponentActions.POPOUT_SHOW) }, [p]), C = r.useCallback(() => { p.dispatch(f.ComponentActions.POPOUT_HIDE) }, [p]); return (0, i.jsx)(I.AppReferencePositionLayer, { onMount: O, onUnmount: C, targetRef: m, overrideTargetRect: c, position: null != E ? E : "right", align: null != T ? T : "top", autoInvert: !0, ref: A, nudgeAlignIntoViewport: !0, children: t }) }; class A extends r.PureComponent { componentDidMount() { let { renderLazy: e, renderWindow: t } = this.props; if (t.addEventListener("resize", this.closeResize, !0), T.ComponentDispatch.subscribe(f.ComponentActions.CONTEXT_MENU_CLOSE, this.props.closeContextMenu), null != e) { let t = setTimeout(() => { this.setState({ render: () => (0, i.jsx)(l.MenuSpinner, {}) }) }, 300); e().then(e => { this.setState({ render: e }), clearTimeout(t) }) } } componentDidUpdate(e) { let { isOpen: t } = this.props; if (!t && e.isOpen) { var n, i; null === (i = e.config) || void 0 === i || null === (n = i.onClose) || void 0 === n || n.call(i) } } componentWillUnmount() { let { renderWindow: e } = this.props; e.removeEventListener("resize", this.closeResize, !0), T.ComponentDispatch.unsubscribe(f.ComponentActions.CONTEXT_MENU_CLOSE, this.props.closeContextMenu) } render() { var e; let { appContext: t, target: n, isOpen: r, theme: s, config: a, rect: o } = this.props, l = null !== (e = this.state.render) && void 0 !== e ? e : this.props.render; return r && null != o && null != a && null != n && null != l && a.context === t ? (0, i.jsx)(h, { target: n, rect: o, close: this.close, onUnmount: a.onClose, align: a.align, position: a.position, impressionName: a.impressionName, impressionProperties: a.impressionProperties, children: (e, i) => { let { position: r } = e; return l({ position: r, theme: s, onHeightUpdate: i, config: a, target: n, context: t }) } }) : null } constructor(...e) { super(...e), S(this, "state", { render: void 0 }), S(this, "closeResize", e => { let { renderWindow: t } = this.props; e.target === t && this.close() }), S(this, "close", () => { let { isOpen: e, closeContextMenu: t } = this.props; e && t() }) } } function m() { let { contextMenu: e, version: t, isOpen: n } = (0, o.useStateFromStoresObject)([E.default], () => ({ contextMenu: E.default.getContextMenu(), version: E.default.version, isOpen: E.default.isOpen() })), s = (0, o.useStateFromStores)([c.default], () => c.default.theme), { appContext: a, renderWindow: l } = r.useContext(d.default); return (0, i.jsx)(A, { appContext: a, renderWindow: l, ...e, isOpen: n, theme: s, closeContextMenu: u.closeContextMenu }, t) } }, 129861: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("246946"), u = n("467679"), d = n("180828"), _ = n("51144"), c = n("689938"), E = n("635889"); function I(e) { if (e.isSystemUser()) return d.BotTypes.SYSTEM_DM; if (e.isClyde()) return d.BotTypes.AI; if (e.bot) return d.BotTypes.BOT; return null } let T = e => { let { primary: t, secondary: n, botType: r, botVerified: a, discriminatorClass: l, className: d, usernameClass: _, color: I, botClass: T, showStreamerModeTooltip: f } = e; return (0, i.jsxs)("div", { className: s()(E.info, d), children: [(0, i.jsx)(o.Tooltip, { text: c.default.Messages.STREAMER_MODE_ENABLED, shouldShow: f, "aria-label": !!f && void 0, children: e => (0, i.jsx)("span", { ...e, className: s()(E.__invalid_username, _), style: null != I ? { color: I } : void 0, children: t }) }), null != n ? (0, i.jsx)("span", { className: s()(E.infoSpacing, l), children: n }) : void 0, null != r && (0, i.jsx)(u.default, { type: r, className: s()(E.infoSpacing, T), verified: a })] }) }; t.default = e => { let { hideDiscriminator: t = !1, user: n, nick: r, forceUsername: s, showAccountIdentifier: o, overrideDiscriminator: u, forcePomelo: c, ...E } = e, f = (0, a.useStateFromStores)([l.default], () => l.default.hidePersonalInformation), S = f || t || n.isNonUserBot(), h = n.toString(), A = _.default.getName(n), m = s ? h : null != r ? r : A, N = n.isPomelo() || c; if (N || m !== h) { let e = m === h && N && s ? _.default.getUserTag(n, { forcePomelo: c }) : m, t = o && e !== "@".concat(h) ? _.default.getUserTag(n) : void 0; return (0, i.jsx)(T, { primary: e, secondary: t, botVerified: n.isVerifiedBot(), botType: I(n), showStreamerModeTooltip: f && e !== A, ...E }) } return (0, i.jsx)(d.default, { name: m, botType: I(n), botVerified: n.isVerifiedBot(), discriminator: S || m !== h ? null : null != u ? u : n.discriminator, ...E }) } }, 249e3: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("411104"), n("47120"); var i, r, s, a, o, l = n("735250"), u = n("470079"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = (e, t) => { let { x: n, y: i } = e, { x: r, y: s } = t; return Math.pow(n - r, 2) + Math.pow(i - s, 2) }; function E(e, t, n, i, r) { let { top: s, bottom: a, left: o, right: l } = e; if (null == s && null == a ? (s = 0, a = n - r) : null == s && null != a ? s = n - (a + r) : null != s && (a = n - (s + r)), null == o && null == l ? (o = 0, l = t - i) : null == o && null != l ? o = t - (l + i) : null == l && null != o && (l = t - (o + i)), null == s || null == a || null == o || null == l) throw Error("Logically this can never happen based on our if/else statements"); return { top: s, left: o, bottom: a, right: l } }(a = i || (i = {}))[a.DISABLED = 0] = "DISABLED", a[a.DEFAULT = 1] = "DEFAULT", a[a.OFFSET = 2] = "OFFSET", (o = r || (r = {})).TOP = "TOP", o.BOTTOM = "BOTTOM", o.RIGHT = "RIGHT", o.LEFT = "LEFT"; function I(e) { return [null == e.bottom ? "TOP" : "BOTTOM", null == e.right ? "LEFT" : "RIGHT"] } function T(e) { let { top: t, left: n, bottom: i, right: r } = e; return 0 === t || t <= i ? i = null : t = null, 0 === n || n <= r ? r = null : n = null, { top: t, left: n, bottom: i, right: r } } function f(e) { let { top: t, left: n, bottom: i, right: r } = e; return i < 0 && (t += i, i = 0), t < 0 && (i += t, t = 0), r < 0 && (n += r, r = 0), n < 0 && (r += n, n = 0), { top: t, left: n, bottom: i, right: r } } function S(e) { return null != e ? "".concat(e, "px") : "auto" } class h extends(s = u.PureComponent) { componentDidMount() { this.checkBounds(), this.setDOMPositions(this.position) } componentDidUpdate(e, t) { let { state: { verticalOrientation: n, horizontalOrientation: i, atTopEdge: r }, props: { maxX: s, maxY: a, onRelocated: o, snapOrientation: l } } = this; (e.maxX !== s || e.maxY !== a || e.onRelocated !== o || e.snapOrientation !== l || t.verticalOrientation !== n || t.horizontalOrientation !== i || t.atTopEdge !== r) && this.checkBounds() } componentWillUnmount() { window.removeEventListener("mousemove", this.handleMouseMove), window.removeEventListener("mouseup", this.handleMouseUp) } setDOMPositions(e) { let { top: t, left: n, bottom: i, right: r } = e, { draggableRef: { current: s } } = this; this.position = { top: t, left: n, bottom: i, right: r }, null != s && (s.style.top = S(t), s.style.bottom = S(i), s.style.left = S(n), s.style.right = S(r)) } render() { let { children: e, className: t } = this.props, { dragging: n, verticalOrientation: i, horizontalOrientation: r, atTopEdge: s } = this.state, { top: a, left: o, right: d, bottom: _ } = this.position; return (0, l.jsx)("div", { ref: this.draggableRef, className: t, onMouseDown: this.handleMouseDown, style: { pointerEvents: n ? "none" : "auto", position: "absolute", top: a, left: o, bottom: _, right: d }, children: u.cloneElement(u.Children.only(e), { flipped: "RIGHT" === r, verticalFlipped: "BOTTOM" === i, checkBounds: this.checkBounds, atTopEdge: s }) }) } constructor(e) { super(e), _(this, "draggableRef", u.createRef()), _(this, "_dragStart", { x: 0, y: 0 }), _(this, "_offsetX", void 0), _(this, "_offsetY", void 0), _(this, "position", void 0), _(this, "handleMouseDown", e => { let { top: t, left: n, bottom: i, right: r } = this.position, { dragAnywhere: s, selector: a, maxX: o, maxY: l } = this.props, { target: u } = e, { current: _ } = this.draggableRef; if (null != _ && e.button === d.MouseButtons.PRIMARY && (s || null != u && null != a && "" !== a && null != u.closest(a))) { let { x: s, y: a } = function(e) { let { top: t, left: n } = e; return { x: n, y: t } }(E({ top: t, left: n, bottom: i, right: r }, o, l, _.clientWidth, _.clientHeight)); this._dragStart = { x: e.clientX, y: e.clientY }, this._offsetX = e.clientX - s, this._offsetY = e.clientY - a, window.addEventListener("mousemove", this.handleMouseMove), window.addEventListener("mouseup", this.handleMouseUp) } }), _(this, "handleMouseMove", e => { e.preventDefault(); let { clientX: t, clientY: n } = e, { current: i } = this.draggableRef, { maxX: r, maxY: s, flipVertical: a, flipHorizontal: o, onDragStart: l, onDrag: u, onFlip: d, snapOrientation: _ } = this.props, { dragging: S, dragging: h, verticalOrientation: A, horizontalOrientation: m } = this.state, N = !1; if (null == i || !S && 9 > c(this._dragStart, { x: t, y: n })) return; S = !0; let { clientWidth: p, clientHeight: O } = i, C = n - this._offsetY, R = f(E({ top: C, left: t - this._offsetX }, r, s, p, O)); if (_) { let e = I(R = T(R)); A = e[0], m = e[1] } else R = { top: R.top, left: R.left }; 2 === o && m !== this.state.horizontalOrientation && (this._offsetX = p - this._offsetX, N = !0), 2 === a && A !== this.state.verticalOrientation && (this._offsetY = O - this._offsetY, N = !0), this.setDOMPositions(R), !h && (null == l || l(R, i)), null == u || u(R, i), N && (null == d || d([A, m])), this.setState({ dragging: S, verticalOrientation: A, horizontalOrientation: m, atTopEdge: 0 === R.top }) }), _(this, "handleMouseUp", () => { window.removeEventListener("mousemove", this.handleMouseMove), window.removeEventListener("mouseup", this.handleMouseUp), this.state.dragging && this.setState({ dragging: !1 }, () => { let { onDragEnd: e } = this.props, { current: t } = this.draggableRef; null != t && null != e && e(this.position, t) }) }), _(this, "_checkBoundsRAF", null), _(this, "checkBounds", () => { null != this._checkBoundsRAF && cancelAnimationFrame(this._checkBoundsRAF), this._checkBoundsRAF = requestAnimationFrame(this._performCheckBounds) }), _(this, "_performCheckBounds", () => { let e; let { position: t, state: n, draggableRef: { current: i }, props: { maxX: r, maxY: s, onRelocated: a, snapOrientation: o } } = this, { verticalOrientation: l, horizontalOrientation: u } = this.state; if (null == i) return; let { clientHeight: d, clientWidth: _ } = i, c = E(t, r, s, _, d); if (c = f(c), o) { let t = I(e = T(c)); l = t[0], u = t[1] } else e = { top: c.top, left: c.left, right: null, bottom: null }; if (t.left === e.left && t.right === e.right && t.top === e.top && t.bottom === e.bottom) return; null == a || a(e, i), this.setDOMPositions(e); let S = 0 === e.top; (l !== n.verticalOrientation || u !== n.horizontalOrientation || S !== n.atTopEdge) && this.setState({ verticalOrientation: l, horizontalOrientation: u, atTopEdge: S }) }); let [t, n] = I(e.initialPosition); this.position = function(e) { let { top: t, left: n, bottom: i, right: r } = e; return null == n && null == r && (n = 0), null != n && null != r && (r = null), null == t && null == i && (t = 0), null != t && null != i && (i = null), { top: t, left: n, bottom: i, right: r } }(e.initialPosition), this.state = { dragging: !1, verticalOrientation: t, horizontalOrientation: n, atTopEdge: 0 === this.position.top } } } _(h, "FlipTypes", i), _(h, "defaultProps", { snapOrientation: !1, maxX: 0, maxY: 0, flipVertical: 0, flipHorizontal: 0, dragAnywhere: !1 }) }, 53281: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("735250"), r = n("470079"), s = n("834427"), a = n("579806"), o = n("403182"), l = n("358085"), u = n("861990"); function d(e) { let t = ["openFile"]; e.multiple && t.push("multiSelections"); let n = e.filters; a.default.fileManager.openFiles({ properties: t, filters: n }, u.MAX_TOTAL_ATTACHMENT_SIZE).then(t => { let n = t.map(e => o.transformNativeFile(e)); null != n && e.onChange({ stopPropagation: () => null, preventDefault: () => null, currentTarget: { files: n } }) }).catch(t => { e.onChange({ stopPropagation: () => null, preventDefault: () => null, currentTarget: { files: null, err: t } }) }) } class _ extends r.Component { activateUploadDialogue() { if (null != this._ref) return this._ref.activateUploadDialogue() } setRef(e) { this._ref = e } render() { return (0, i.jsx)(s.FileInput, { ref: this.setRef, handleNativeClick: d, embedded: (0, l.isDesktop)(), ...this.props }) } constructor(e) { var t, n, i; super(e), t = this, n = "_ref", i = r.createRef(), n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i, this.setRef = this.setRef.bind(this) } } t.default = _ }, 431279: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("374470"), o = n("481060"), l = n("40851"), u = n("261922"), d = n("926836"), _ = n("956664"), c = n("506071"), E = n("689938"), I = n("381237"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = "Zoomed Lazy Image Modal"; class S extends(i = s.PureComponent) { render() { let { appContext: e, isWindowFocused: t, ...n } = this.props; return (0, r.jsx)(u.default, { ...n, onZoom: this.onZoom, onMouseEnter: this.onMouseEnter, shouldAnimate: t }) } constructor(...e) { super(...e), T(this, "onMouseEnter", (e, t) => { let { preloadImage: n } = t, { width: i, height: r } = this.props; n((0, _.zoomFit)(i, r)) }), T(this, "modalContext", (0, o.modalContextFromAppContext)(this.props.appContext)), T(this, "onCloseImage", () => { (0, o.closeModal)(f, this.modalContext) }), T(this, "onZoom", (e, t) => { let { zoomThumbnailPlaceholder: n, trigger: i } = t; e.preventDefault(); let { alt: s, src: l, original: u, width: _, height: c, animated: T, children: S, renderLinkComponent: h, isWindowFocused: A, shouldHideMediaOptions: m = !1 } = this.props, N = { alt: s, src: l, original: null != u ? u : l, width: _, height: c, animated: T, children: S, zoomThumbnailPlaceholder: n, renderLinkComponent: h, onContextMenu: m ? e => { e.stopPropagation(), e.preventDefault() } : void 0, trigger: i }; (0, a.isElement)(e.currentTarget) && e.currentTarget.blur(), (0, o.openModal)(e => (0, r.jsx)(o.ModalRoot, { className: I.modal, ...e, size: o.ModalSize.DYNAMIC, "aria-label": E.default.Messages.IMAGE, children: (0, r.jsx)(d.ImageModal, { ...N, className: I.image, shouldAnimate: A, onClose: this.onCloseImage, shouldHideMediaOptions: m }) }), { modalKey: f }, this.modalContext) }) } } function h(e) { let t = (0, l.useAppContext)(), n = (0, c.useIsWindowFocused)(); return (0, r.jsx)(S, { ...e, isWindowFocused: n, appContext: t }) } T(S, "defaultProps", { shouldLink: !0, autoPlay: !1, animated: !1 }) }, 794295: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("302454"), a = n.n(s), o = n("481060"), l = n("100527"), u = n("906732"), d = n("49012"); t.default = r.memo(function(e) { let { onClick: t, trusted: n, title: s, href: _, children: c, messageId: E, channelId: I, ...T } = e, { analyticsLocations: f } = (0, u.default)(l.default.MASKED_LINK), S = r.useCallback(t => (0, d.handleClick)(e, t, f), [f, e]), h = r.useCallback(e => { 1 === e.button && S(e) }, [S]), A = a().sanitizeUrl(_); return (0, i.jsx)(o.Anchor, { ...T, title: s, target: "_blank", rel: "noreferrer noopener", href: A, onClick: S, onAuxClick: h, children: null != c ? c : s }) }) }, 527429: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i, r, s = n("470079"), a = n("981631"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(r = i || (i = {})).ARROW_UP = "ARROW_UP", r.ARROW_DOWN = "ARROW_DOWN", r.ARROW_LEFT = "ARROW_LEFT", r.ARROW_RIGHT = "ARROW_RIGHT"; class l extends s.Component { componentDidMount() { document.addEventListener("keydown", this.handleKeyDown, !0) } componentWillUnmount() { document.removeEventListener("keydown", this.handleKeyDown, !0) } focusNext(e) { let { getItemGrid: t, onFocus: n } = this.props, { focusedColumn: i, focusedRow: r } = this.state; if (null == e) return; let s = t(); if (null == s) return; let a = this.getNext(s, i, r, e); this.setState({ focusedColumn: a.column, focusedRow: a.row }, () => { let e = this.calculateFocusedItem(); null != e && null != n && n(e) }) } getNext(e, t, n, i) { let r, s, a, o; if (null == t || null == n) s = 0, a = 0, r = { column: 0, row: 0 }; else switch (s = t, a = n, i) { case "ARROW_UP": r = { column: s, row: Math.max(a - 1, 0) }; break; case "ARROW_DOWN": r = { column: s, row: Math.min(a + 1, e[s].length - 1) }; break; case "ARROW_LEFT": r = this.wrapPosition(e, s, a, -1); break; case "ARROW_RIGHT": r = this.wrapPosition(e, s, a, 1) } return null != r && (o = e[r.column][r.row]), (null == o || null == r) && (o = e[(r = { column: s, row: a }).column][r.row]), { column: r.column, row: r.row, id: o } } calculateClosest(e, t) { let n; let i = this.props.getCoordsMap()[e]; if (null == i) return; let r = Number.MAX_SAFE_INTEGER; for (let e = 0; e < t.length; e++) { let s = this.props.getCoordsMap()[t[e]]; if (null == s) continue; let a = Math.abs(s.top - i.top); if (a < r) r = a, n = e; else break } return n } calculateFocusedItem() { let { getItemGrid: e } = this.props, { focusedRow: t, focusedColumn: n } = this.state, i = e(); return null == i || null == n || null == t || null == i[n] || null == i[n][t] ? null : i[n][t] } render() { return this.props.children } constructor(...e) { super(...e), o(this, "state", { focusedColumn: null, focusedRow: null }), o(this, "handleKeyDown", e => { let { onSelect: t } = this.props; switch (e.keyCode) { case a.KeyboardKeys.ARROW_DOWN: case a.KeyboardKeys.ARROW_UP: case a.KeyboardKeys.ARROW_LEFT: case a.KeyboardKeys.ARROW_RIGHT: this.focusNext(function(e) { switch (e) { case a.KeyboardKeys.ARROW_DOWN: return "ARROW_DOWN"; case a.KeyboardKeys.ARROW_UP: return "ARROW_UP"; case a.KeyboardKeys.ARROW_LEFT: return "ARROW_LEFT"; case a.KeyboardKeys.ARROW_RIGHT: return "ARROW_RIGHT"; default: return null } }(e.keyCode)); break; case a.KeyboardKeys.ENTER: let n = this.calculateFocusedItem(); null != n && null != t && (e.preventDefault(), e.stopPropagation(), t(n)) } }), o(this, "wrapPosition", (e, t, n, i) => { var r; let s = e.length, a = Math.max(n * s + t + i, 0) % s, o = null !== (r = this.calculateClosest(e[t][n], e[a])) && void 0 !== r ? r : n, l = 0; return i < 0 && a > t && (l = -1), i > 0 && a < t && (l = 1), { column: a, row: o + l } }) } } }, 276264: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AVATAR_DECORATION_PADDING: function() { return P } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("477690"), l = n("481060"), u = n("420660"), d = n("979264"), _ = n("33934"), c = n("736144"), E = n("113434"), I = n("918701"), T = n("553393"), f = n("509275"), S = n("204197"), h = n("594174"), A = n("467679"), m = n("681426"), N = n("551388"), p = n("709586"), O = n("360048"), C = n("624138"), R = n("51144"), g = n("788307"), L = n("981631"), v = n("674563"), D = n("524484"), M = n("689938"), y = n("895294"); let P = (0, C.cssValueToNumber)(o.default.MEMBER_LIST_ITEM_AVATAR_DECORATION_PADDING); t.default = function(e) { var t; let { selected: n = !1, colorString: s, colorRoleName: o, isOwner: C, ownerTooltipText: P, lostPermissionTooltipText: U, isTyping: b = !1, nick: G, user: w, currentUser: k, activities: B, applicationStream: V, status: x, shouldAnimateStatus: F = !1, isMobile: H, premiumSince: Y, channel: j, guildId: W, lastOnlineTimestamp: K, className: z, onMouseDown: Z, onKeyDown: X, onClick: Q, onContextMenu: q, onClickPremiumGuildIcon: J, onFocus: $, "aria-controls": ee, "aria-expanded": et, "aria-posinset": en, "aria-setsize": ei, id: er, tabIndex: es, itemProps: ea } = e, eo = null == w ? void 0 : w.id, el = R.default.useName(w), eu = (null === (t = h.default.getCurrentUser()) || void 0 === t ? void 0 : t.id) === eo, ed = r.useRef(null), [e_, ec] = r.useState(!1), [eE, eI] = r.useState(null), { avatarDecorationSrc: eT, avatarSrc: ef, eventHandlers: eS } = (0, S.default)({ user: w, size: l.AvatarSizes.SIZE_32, animateOnHover: !(n || e_), guildId: W }), eh = r.useMemo(() => ({ source: L.AnalyticsSections.MEMBER_LIST, tagUserId: eo }), [eo]), [eA, em] = r.useState(!1); r.useEffect(() => { n && em(!1) }, [n]); let eN = (0, E.useQuestFromActivities)(B), ep = null != eN && !eu && n && !eA && (0, I.shouldShowSocialEntrypoints)(eN), eO = () => { ec(!0) }, eC = () => { ec(!1) }, eR = e => { eI(e) }, eg = () => { let e = null != B ? B.find(e => e.type === L.ActivityTypes.CUSTOM_STATUS) : null, t = null != e && null != w && (0, _.default)(e, w, j); if (null != K && null == e) { let e = (0, f.formatRecentlyOnlineStatus)(K); return (0, i.jsx)("div", { className: y.subtext, children: e }) } return (0, i.jsx)(g.default, { className: y.activity, textClassName: y.activityText, emojiClassName: y.activityEmoji, activities: B, applicationStream: V, animate: e_, hideEmoji: !t, hideTooltip: !0, user: w, hasQuest: null != eN && (0, I.shouldShowSocialEntrypoints)(eN) }) }, eL = () => null != C && C && null == U ? (0, i.jsx)(l.Tooltip, { text: null != P ? P : M.default.Messages.GUILD_OWNER, children: e => (0, i.jsx)(N.default, { ...e, className: y.ownerIcon }) }) : null, ev = () => null == Y ? null : (0, i.jsx)(l.Tooltip, { text: M.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_TOOLTIP.format({ date: Y }), children: e => (0, i.jsx)(l.Clickable, { onClick: J, tabIndex: -1, children: (0, i.jsx)(p.default, { ...e, className: y.premiumIcon }) }) }), eD = () => { let e = (null == w ? void 0 : w.isClyde()) ? v.BotTagTypes.AI : v.BotTagTypes.BOT; return null != w && w.bot ? (0, i.jsx)(A.default, { className: y.botTag, type: e, verified: w.isVerifiedBot() }) : null }, eM = () => (0, i.jsxs)(i.Fragment, { children: [eD(), eL(), ev()] }), ey = (e, t) => { let n = F ? l.AnimatedAvatar : l.Avatar, r = (0, u.default)(B) ? L.StatusTypes.STREAMING : x; return r = t ? void 0 : r, (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(n, { ...eS, size: l.AvatarSizes.SIZE_32, src: ef, isMobile: H, isTyping: b, status: r, "aria-label": e.username, statusTooltip: !0, avatarDecoration: eT, typingIndicatorRef: eR }), (0, i.jsx)(c.default, { confettiSpawnRef: eE, shouldFire: b && null != k && e.id !== k.id, confettiLocation: D.ConfettiLocation.MEMBER_USER })] }) }, eP = () => (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.NameWithRole, { roleName: o, color: null != s ? s : void 0, name: null != G ? G : el, className: y.name }), (0, i.jsx)(d.default, { clan: null == w ? void 0 : w.clan, userId: null == w ? void 0 : w.id, contextGuildId: W, disableGuildProfile: !0, className: y.clanTag, profileViewedAnalytics: eh })] }), eU = x === L.StatusTypes.OFFLINE, eb = null != K; return null == w ? (0, i.jsx)(m.default, { avatarSize: l.AvatarSizes.SIZE_32, className: y.placeholder }) : (0, i.jsx)(l.Popout, { renderPopout: e => (0, i.jsx)(T.default, { quest: eN, memberListItemRef: ed, applicationStream: V, ...e, closePopout: () => em(!0) }), position: "bottom", shouldShow: ep, nudgeAlignIntoViewport: !1, useRawTargetDimensions: !0, animation: l.Popout.Animation.NONE, spacing: -3, children: () => (0, i.jsx)(O.default, { ref: ed, selected: n, className: a()(y.member, z, { [y.offline]: eU && !eb && !n }), innerClassName: y.memberInner, onClick: Q, onKeyDown: X, onMouseDown: Z, onContextMenu: q, onMouseEnter: eO, onMouseLeave: eC, name: null == U ? (0, i.jsx)("span", { className: y.username, children: eP() }) : (0, i.jsx)(l.Tooltip, { text: U, children: e => (0, i.jsx)("span", { ...e, className: a()(y.username, y.lostPermission), children: eP() }) }), avatar: ey(w, eU), subText: eg(), decorators: eM(), "aria-controls": ee, "aria-expanded": et, "aria-setsize": ei, "aria-posinset": en, id: er, tabIndex: es, onFocus: $, focusProps: { offset: { top: 4, bottom: 4, left: 4, right: 4 } }, ...ea }) }) } }, 788911: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("256286"); t.default = e => { let { message: t, className: n, noResultsImageURL: r, forceLightTheme: o, suggestions: l } = e; return (0, i.jsx)("div", { className: s()({ [a.forceLightTheme]: o }, n), children: (0, i.jsxs)("div", { className: a.wrapper, children: [(0, i.jsx)("div", { className: a.sadImage, style: null != r ? { backgroundImage: "url(".concat(r, ")") } : {} }), (0, i.jsx)("div", { children: t }), l] }) }) } }, 666520: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("699581"), o = n.n(a), l = n("442837"), u = n("481060"), d = n("34854"), _ = n("702557"), c = n("246946"), E = n("981631"), I = n("689938"), T = n("9601"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class S extends(i = s.PureComponent) { componentDidMount() { if (this.props.autoFocus && !this.props.hideNote) { let e = o().findDOMNode(this.noteRef.current); null != e && null != e.selectionStart && (e.focus(), e.selectionStart = e.selectionEnd = e.value.length) } } render() { let { className: e, loading: t, note: n, hideNote: i } = this.props; return i ? null : (0, r.jsx)("div", { className: e, children: (0, r.jsx)(u.TextAreaAutosize, { ref: this.noteRef, className: T.textarea, disabled: t, placeholder: t ? I.default.Messages.LOADING_NOTE : I.default.Messages.NOTE_PLACEHOLDER, "aria-label": I.default.Messages.NOTE, onBlur: this.handleBlur, onKeyPress: this.handleKeyPress, defaultValue: null != n ? n : void 0, maxLength: E.NOTE_MAX_LENGTH }) }) } constructor(...e) { super(...e), f(this, "noteRef", s.createRef()), f(this, "handleBlur", e => { let t = e.currentTarget.value, { note: n, userId: i, onUpdate: r } = this.props; (null != n ? n : "") !== t && (null == r || r(), d.default.updateNote(i, t)) }), f(this, "handleKeyPress", e => { if (13 === e.which) { if (e.shiftKey) { var t; (null !== (t = e.currentTarget.value.match(/\n/g)) && void 0 !== t ? t : []).length >= 5 && e.preventDefault() } else e.preventDefault(), e.currentTarget.blur() } else e.which === E.KeyboardKeys.SPACE && e.stopPropagation() }) } } function h(e) { let t = (0, l.useStateFromStores)([c.default], () => c.default.hidePersonalInformation), n = (0, _.default)(e.userId); return (0, r.jsx)(S, { ...e, ...n, hideNote: t }) } f(S, "defaultProps", { autoFocus: !1 }) }, 648996: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("512722"), l = n.n(o), u = n("442837"), d = n("481060"), _ = n("493683"), c = n("37234"), E = n("904245"), I = n("541716"), T = n("957730"), f = n("592125"), S = n("699516"), h = n("51144"), A = n("838440"), m = n("981631"), N = n("689938"), p = n("760"); function O(e) { let { user: t, autoFocus: n = !1, className: s, inputClassName: o, onSend: O } = e, C = r.useRef(null), R = (0, u.useStateFromStores)([S.default], () => S.default.isBlocked(t.id)), g = r.useCallback(e => { if ("Enter" === e.key) { e.preventDefault(), l()(null != C.current, "Keypress on Input when not mounted"); let n = C.current.value.trim(); return (0, A.applyChatRestrictions)({ type: I.ChatInputTypes.NORMAL, content: n, channel: null }).then(e => { let { valid: i } = e; i && (_.default.openPrivateChannel(t.id, !1, !1, "Quick Message Input").then(e => { let t = f.default.getChannel(e); l()(null != t, "Newly created PrivateChannel is null"), E.default.sendMessage(t.id, T.default.parse(t, n)), (0, c.popLayer)() }), null == O || O()) }), !0 } e.which === m.KeyboardKeys.SPACE && e.stopPropagation() }, [t, O]), L = R ? N.default.Messages.QUICK_DM_BLOCKED : N.default.Messages.QUICK_DM_USER.format({ name: h.default.getName(t) }); return (0, i.jsx)(d.TextInput, { className: s, inputClassName: a()(o, p.input), inputRef: C, autoFocus: n, placeholder: L, "aria-label": L, onKeyPress: g, disabled: R }) } }, 461745: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RichTagTypes: function() { return i }, SearchBarIcon: function() { return m } }), n("653041"), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("120356"), u = n.n(l), d = n("481060"), _ = n("346656"), c = n("465670"), E = n("664800"), I = n("792125"), T = n("981631"), f = n("689938"), S = n("949817"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = Object.freeze({ SMALL: S.small, MEDIUM: S.medium, LARGE: S.large }); (s = i || (i = {})).MEMBER = "MEMBER", s.ROLE = "ROLE", s.CHANNEL = "CHANNEL", s.GUILD = "GUILD", s.USER = "USER"; let m = e => { let { hasContent: t, onClear: n, className: i, themeOverride: r, size: s = A.SMALL } = e; return (0, a.jsx)(d.Clickable, { className: u()(i, S.iconLayout, s, (0, I.getThemeClass)(r), { [S.clear]: t }), onClick: e => { e.stopPropagation(), null != n && n(e) }, onMouseDown: e => { e.preventDefault(), e.stopPropagation() }, tabIndex: t ? 0 : -1, "aria-hidden": !t, "aria-label": f.default.Messages.SEARCH_CLEAR, focusProps: { offset: 4 }, children: (0, a.jsxs)("div", { className: S.iconContainer, children: [(0, a.jsx)(E.default, { className: u()({ [S.icon]: !0, [S.visible]: !t }) }), (0, a.jsx)(c.default, { className: u()({ [S.icon]: !0, [S.visible]: t }) })] }) }) }; class N extends(r = o.Component) { componentDidUpdate(e) { let { focusAfterReady: t, isReady: n } = this.props; t && !e.isReady && n && this.focus() } handleKeyDownGrid(e) { let { selectedRow: t, selectedColumn: n, sections: i, query: r, tags: s, onSelectionChange: a, onSelect: o, onRemoveTag: l, preventEscapePropagation: u } = this.props; if (0 !== i.length) { switch (e.keyCode) { case T.KeyboardKeys.BACKSPACE: (null == r || 0 === r.length) && null != s && s.length > 0 && (e.preventDefault(), e.stopPropagation(), null == l || l(s.length - 1)); break; case T.KeyboardKeys.ARROW_DOWN: e.preventDefault(), e.stopPropagation(), -1 === t ? (t = 0, n = 0) : ((t += 1) >= i.length && (t = i.length - 1), n >= i[t] && (n = i[t] - 1)); break; case T.KeyboardKeys.ARROW_UP: e.preventDefault(), e.stopPropagation(), (t -= 1) < 0 ? (t = 0, n = 0) : n >= i[t] && (n = i[t] - 1); break; case T.KeyboardKeys.ARROW_LEFT: e.preventDefault(), e.stopPropagation(), -1 === t && (t = 0), (n -= 1) < 0 && ((t -= 1) >= 0 ? n = i[t] - 1 : t < 0 && (t = 0, n = 0)); break; case T.KeyboardKeys.ARROW_RIGHT: e.preventDefault(), e.stopPropagation(), -1 === t && (t = 0), (n += 1) >= i[t] && (n = 0, (t += 1) >= i.length && (t = i.length - 1, n = i[t] - 1)); break; case T.KeyboardKeys.ENTER: if (e.preventDefault(), e.stopPropagation(), -1 === t && (t = 0), -1 === n && (n = 0), t >= i.length || n >= i[t]) return; null != o && o(t, n, e); return; case T.KeyboardKeys.ESCAPE: e.preventDefault(), u && e.stopPropagation(), null != o && o(null, null, e); return; default: return } null != a && a(t, n) } } handleKeyDownList(e) { let { sections: t, selectedSection: n, selectedRow: i, onSelect: r, onSelectionChange: s, query: a, tags: o, preventEscapePropagation: l } = this.props, { current: u } = this.ref; if (null != u) switch (e.keyCode) { case T.KeyboardKeys.BACKSPACE: if ((null == a || 0 === a.length) && null != o && o.length > 0) { var d, _; e.preventDefault(), e.stopPropagation(), null === (d = (_ = this.props).onRemoveTag) || void 0 === d || d.call(_, o.length - 1) } break; case T.KeyboardKeys.ARROW_DOWN: e.preventDefault(), e.stopPropagation(), t.length > n && ++i >= t[n] && (++n >= t.length && (n = 0), i = 0), null == s || s(n, i); break; case T.KeyboardKeys.ARROW_UP: e.preventDefault(), e.stopPropagation(), --i < 0 && (--n < 0 && (n = t.length - 1), i = t[n] - 1), null == s || s(n, i); break; case T.KeyboardKeys.ENTER: e.preventDefault(), e.stopPropagation(), t.length > n && t[n] > i && (null == r || r(n, i, e)); break; case T.KeyboardKeys.ESCAPE: e.preventDefault(), l && e.stopPropagation(), null == r || r(null, null, e), u.blur() } } render() { let { autoFocus: e, query: t, placeholder: n = f.default.Messages.DM_SEARCH_PLACEHOLDER, themeOverride: i, disabled: r, onClear: s, size: o, maxHeight: l, tags: E, onActivate: T, className: h, inputProps: A, focusAfterReady: N } = this.props, p = null != t && t.length > 0, O = !1, C = []; return null != E && E.length > 0 && ("string" == typeof E[0] ? E.forEach((e, t) => C.push((0, a.jsxs)(d.Anchor, { focusProps: { offset: 4 }, className: S.tag, onClick: this.handleRemoveTag.bind(this, t), children: [e, (0, a.jsx)(c.default, { className: S.close, "aria-label": f.default.Messages.REMOVE })] }, t))) : (O = !0, E.forEach((e, t) => C.push((0, a.jsxs)(d.Anchor, { className: u()(S.tag, S.richTag), onClick: this.handleRemoveTag.bind(this, t), children: [("MEMBER" === e.type || "USER" === e.type) && null != e.avatar && (0, a.jsx)(d.Avatar, { src: e.avatar, "aria-hidden": !0, size: d.AvatarSizes.SIZE_16 }), "ROLE" === e.type && null != e.color && (0, a.jsx)("span", { className: S.tagRoleColor, style: { backgroundColor: e.color } }), "GUILD" === e.type && null != e.guild && (0, a.jsx)(_.default, { guild: e.guild, active: !0, size: _.default.Sizes.SMOL }), (0, a.jsx)("span", { className: S.tagLabel, children: e.label }), (0, a.jsx)(c.default, { className: S.close, "aria-label": f.default.Messages.REMOVE })] }, t))))), (0, a.jsx)(d.FocusRing, { focusTarget: this.ref, ringTarget: this.containerRef, children: (0, a.jsx)("div", { ref: this.containerRef, className: u()(h, S.container, o, (0, I.getThemeClass)(i), { [S.disabled]: r }), children: (0, a.jsxs)(d.ScrollerThin, { className: S.inner, style: { maxHeight: l }, children: [C, (0, a.jsx)("input", { className: u()(S.input, { [S.richTagInput]: O }), type: "text", ref: this.ref, spellCheck: "false", placeholder: n, value: t, onChange: this.handleChange, onKeyDown: this.handleKeyDown, onFocus: this.handleFocus, disabled: r, "aria-disabled": r, autoFocus: !N && e, onMouseDown: T, ...this.defaultInputProps, ...A }), null != s ? (0, a.jsx)(m, { size: o, themeOverride: i, hasContent: p, onClear: this.handleClear }) : null] }) }) }) } constructor(...e) { super(...e), h(this, "defaultInputProps", { role: "combobox", "aria-haspopup": "listbox", "aria-autocomplete": "list" }), h(this, "ref", o.createRef()), h(this, "containerRef", o.createRef()), h(this, "handleKeyDown", e => { let { onActivate: t, onKeyDown: n, onQueryChange: i, useKeyboardNavigation: r } = this.props; null != n && n(e); let { current: s } = this.ref; if (null == s || null != t) { e.keyCode !== T.KeyboardKeys.TAB && null != t && t(e); return } if (e.keyCode === T.KeyboardKeys.ESCAPE && null != s.value && "" !== s.value && s.value.length > 0) { s.value = "", null != i && i(""); return } r && (this.props.gridResults ? this.handleKeyDownGrid(e) : this.handleKeyDownList(e)) }), h(this, "handleChange", e => { let { onQueryChange: t } = this.props; null != t && t(e.currentTarget.value) }), h(this, "handleFocus", e => { let { onFocus: t } = this.props; null != t && t(e) }), h(this, "handleClear", () => { let { onClear: e } = this.props, { current: t } = this.ref; null != e && e(), null != t && t.focus() }), h(this, "handleRemoveTag", e => { let { onRemoveTag: t } = this.props; null == t || t(e) }), h(this, "focus", () => { let { current: e } = this.ref; null != e && e.focus() }) } } h(N, "Sizes", A), h(N, "defaultProps", { size: A.SMALL, query: "", sections: [], selectedSection: 0, selectedRow: -1, selectedColumn: -1, gridResults: !1, disabled: !1, autoFocus: !1, preventEscapePropagation: !0, useKeyboardNavigation: !0 }), t.default = N }, 717881: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserActivityTypes: function() { return U } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("620662"), d = n("841784"), _ = n("850827"), c = n("812206"), E = n("202458"), I = n("220779"), T = n("142550"), f = n("954017"), S = n("314091"), h = n("159244"), A = n("574176"), m = n("952164"), N = n("199902"), p = n("592125"), O = n("430824"), C = n("496675"), R = n("979651"), g = n("543595"), L = n("626135"), v = n("153066"), D = n("981631"), M = n("689938"), y = n("119025"); function P(e) { let { type: t, source: n, activity: r, applicationStream: s, user: a, guildId: o, channelId: u, onAction: c, isEmbedded: E = (0, d.default)(r), actionColor: I } = e; return (0, i.jsx)(_.default, { className: (0, v.getClass)(y, "actions", t), type: t, source: n, activity: r, applicationStream: s, user: a, guildId: o, look: l.Button.Looks.FILLED, color: null != I ? I : l.Button.Colors.PRIMARY, channelId: u, onAction: c, isEmbedded: E }) } let U = g.default.Types; t.default = function(e) { let { activity: t, user: n, useStoreStream: s = !0, showActions: l = !0, hideHeader: d = !1, showChannelDetails: _ = !1, analyticsParams: v, ...U } = e, b = (0, o.useStateFromStores)([R.default, p.default], () => { var e; return p.default.getChannel(null === (e = R.default.getVoiceStateForUser(n.id)) || void 0 === e ? void 0 : e.channelId) }), { enableHangStatus: G } = A.HangStatusExperiment.useExperiment({ guildId: null == b ? void 0 : b.guild_id, location: "UserActivityContainer" }, { autoTrackExposure: !1 }), w = (0, o.useStateFromStores)([N.default], () => s ? N.default.getAnyStreamForUser(n.id) : null), k = G && C.default.can(D.Permissions.CONNECT, b), B = (null == t ? void 0 : t.type) === D.ActivityTypes.HANG_STATUS && k ? b : null, V = (0, o.useStateFromStores)([O.default, R.default, p.default], () => { var e, i; return (0, u.default)(t, D.ActivityFlags.EMBEDDED) ? O.default.getGuild(null === (e = p.default.getChannel(null === (i = R.default.getVoiceStateForSession(n.id, null == t ? void 0 : t.session_id)) || void 0 === i ? void 0 : i.channelId)) || void 0 === e ? void 0 : e.getGuildId()) : null != B ? O.default.getGuild(B.getGuildId()) : null }), x = (0, o.useStateFromStores)([O.default], () => null != w ? O.default.getGuild(w.guildId) : null), F = (0, o.useStateFromStores)([c.default], () => { if (null != t) return null != t.application_id ? c.default.getApplication(t.application_id) : c.default.getApplicationByName(t.name); return null }), H = (0, E.default)(), Y = (0, h.default)(n), j = H && null != t && Y; return (r.useEffect(() => { (null == t ? void 0 : t.type) === D.ActivityTypes.HANG_STATUS && k && L.default.track(D.AnalyticEvents.VIEW_HANG_STATUS, { source: "UserProfilePopout", guild_id: null == B ? void 0 : B.guild_id, channel_id: null == B ? void 0 : B.id }) }, [null == t ? void 0 : t.type, k, B]), (null == t ? void 0 : t.type) !== D.ActivityTypes.HANG_STATUS || k) ? (0, i.jsx)(g.default, { ...U, activity: t, user: n, application: F, hideHeader: d, activityGuild: null != V ? V : x, showReactions: j, showChannelDetails: _, channel: _ ? b : void 0, renderActions: l ? () => (0, i.jsxs)("div", { className: a()(j && y.actionsWrapper), children: [(0, i.jsx)(P, { ...U, applicationStream: w, activity: t, user: n }), j && (0, i.jsx)(I.default, { showReact: !0, showReply: !0, replyHeaderText: M.default.Messages.ACTIVITY_REACTION_REPLY_TITLE.format({ activity: t.name }), replyPlaceholder: M.default.Messages.TEXTAREA_PLACEHOLDER.format({ channel: "@".concat(n.globalName) }), onInteraction: e => { let { interactionType: i, emoji: r, reply: s } = e; L.default.track(D.AnalyticEvents.ACTIVITY_REACTOR_INTERACTED, { application_id: t.application_id, interaction_type: i, ...v }), i === T.AtomicReactorInteractionTypes.ReactSubmit && null != r && (0, f.sendReactionToActivity)({ reaction: r, user: n, activity: t, application: F, altText: (0, S.getActivityAltText)(n, t), stream: w }), i === T.AtomicReactorInteractionTypes.ReplySubmit && null != s && (0, f.sendReplyToActivity)({ reply: s, user: n, activity: t, application: F, altText: (0, S.getActivityAltText)(n, t), stream: w }) } })] }) : null, onOpenSpotifyTrack: m.openTrack, onOpenSpotifyArtist: m.openArtist, onOpenSpotifyAlbum: m.openAlbum }) : null } }, 700582: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("372900"); t.default = r.memo(function(e) { var t, n, o, l; let { user: u, size: d = s.AvatarSizes.SIZE_32, animate: _ = !1, "aria-hidden": c = !1, ...E } = e, I = r.useContext(a.default); return (0, i.jsx)(s.Avatar, { src: (t = u, n = (0, s.getAvatarSize)(d), o = _, l = I, t.getAvatarURL(l, n, o)), size: d, "aria-label": c ? void 0 : u.username, "aria-hidden": c, ...E }) }) }, 468026: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("693789"), o = n("1561"), l = n("512983"), u = n("466377"), d = n("993365"), _ = n("285952"), c = n("689938"), E = n("292176"); t.default = e => { let t, n, r, { body: I, cancelText: T, className: f, confirmColor: S, confirmText: h = c.default.Messages.OKAY, secondaryConfirmText: A, onCancel: m, onClose: N, onConfirm: p, onConfirmSecondary: O, title: C, transitionState: R, titleClassName: g } = e; return null != T && "" !== T && (t = (0, i.jsx)(a.Button, { type: "button", size: a.Button.Sizes.LARGE, color: a.Button.Colors.PRIMARY, onClick: () => { null == N || N(), null == m || m() }, className: E.secondaryButton, children: T })), null != h && "" !== h && (n = (0, i.jsx)(a.Button, { type: "submit", color: S, size: a.Button.Sizes.LARGE, className: s()(E.primaryButton, null != t ? E.gutter : null), autoFocus: !0, children: h })), null != A && "" !== A && (r = (0, i.jsx)(o.Clickable, { onClick: () => { null == N || N(), null == O || O() }, className: E.minorContainer, children: (0, i.jsx)(d.Text, { className: E.secondaryAction, variant: "text-xs/normal", children: A }) })), (0, i.jsx)(u.ModalRoot, { transitionState: R, className: s()(f, E.container), "aria-label": C, children: (0, i.jsxs)("form", { onSubmit: e => { null != e && e.preventDefault(), null == N || N(), null == p || p() }, className: E.form, children: [(0, i.jsx)(u.ModalContent, { className: E.modalContent, children: (0, i.jsxs)(_.default, { direction: _.default.Direction.VERTICAL, justify: _.default.Justify.CENTER, className: E.content, children: [null != C && (0, i.jsx)(l.FormTitle, { tag: "h2", className: s()(E.title, g), children: C }), null != I && (0, i.jsx)(d.Text, { variant: "text-md/normal", className: E.body, children: I })] }) }), (0, i.jsxs)(u.ModalFooter, { justify: _.default.Justify.BETWEEN, wrap: _.default.Wrap.WRAP, children: [n, t, r] })] }) }) } }, 712364: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("481060"), u = n("689938"), d = n("603838"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class c extends(i = s.PureComponent) { render() { var e; let { title: t, actionText: n, children: i, error: a, isLoading: _, maxLength: c, transitionState: E, helpMessage: I, retryPrompt: T, retrySuccessMessage: f } = this.props, { code: S, errorMessage: h, retrySuccess: A } = this.state, m = s.Children.count(i) > 0 ? (0, r.jsx)(l.Card, { type: l.Card.Types.WARNING, className: d.card, children: (0, r.jsx)(l.Text, { variant: "text-md/normal", children: i }) }) : null, N = null != T ? (0, r.jsxs)(l.Text, { className: o()(d.__invalid_submitText, d.spacing), variant: "text-sm/normal", children: [(0, r.jsx)("br", {}), (0, r.jsx)(l.Clickable, { className: o()(d.spacing, d.__invalid_link), onClick: this.handleRetry, children: (0, r.jsx)(l.Anchor, { children: T }) })] }) : null, p = A ? (0, r.jsx)(l.Card, { type: l.Card.Types.SUCCESS, className: d.card, children: (0, r.jsx)(l.Text, { variant: "text-md/normal", children: f }) }) : null; return (0, r.jsx)(l.ModalRoot, { transitionState: E, children: (0, r.jsxs)("form", { onSubmit: this.handleSubmit, children: [(0, r.jsx)(l.ModalHeader, { separator: !1, children: (0, r.jsx)(l.Heading, { variant: "heading-lg/semibold", children: t }) }), (0, r.jsxs)(l.ModalContent, { children: [null != I ? (0, r.jsx)(l.Text, { color: "text-normal", variant: "text-md/normal", className: d.spacing, children: I }) : null, m, p, (0, r.jsxs)(l.FormItem, { title: this.getLabelText(), className: d.spacing, children: [(0, r.jsx)(l.TextInput, { inputRef: this.setRef, onChange: this.handleCodeChange, placeholder: null !== (e = this.getPlaceholder()) && void 0 !== e ? e : void 0, maxLength: null != c ? c : 10, value: S, autoComplete: "one-time-code", autoFocus: !0 }), this.errorPresent() ? (0, r.jsx)(l.Text, { color: "text-danger", variant: "text-xs/normal", className: d.error, children: null != a ? a : h }) : null, N] })] }), (0, r.jsxs)(l.ModalFooter, { children: [(0, r.jsx)(l.Button, { type: "submit", disabled: _ || 0 === S.length, children: null != n ? n : u.default.Messages.CONFIRM }), (0, r.jsx)(l.Button, { onClick: this.handleCancel, disabled: _, look: l.Button.Looks.LINK, color: l.Button.Colors.PRIMARY, children: u.default.Messages.CANCEL })] })] }) }) } constructor(...e) { super(...e), _(this, "_input", void 0), _(this, "state", { code: "", errorMessage: "", retrySuccess: !1 }), _(this, "setRef", e => { this._input = e }), _(this, "getLabelText", () => { var e; return null !== (e = this.props.label) && void 0 !== e ? e : this.props.disallowBackupCodes ? u.default.Messages.TWO_FA_ENTER_TOKEN_NO_BACKUP_LABEL : u.default.Messages.TWO_FA_ENTER_TOKEN_LABEL }), _(this, "getSupportedCodeTypes", () => this.props.disallowBackupCodes ? u.default.Messages.TWO_FA_AUTH_CODE_NO_BACKUP : u.default.Messages.TWO_FA_AUTH_CODE), _(this, "getPlaceholder", () => { var e; return this.props.forceNoPlaceholder ? null : null !== (e = this.props.placeholder) && void 0 !== e ? e : this.getSupportedCodeTypes() }), _(this, "errorPresent", () => null != this.props.error && "" !== this.props.error || null != this.state.errorMessage && "" !== this.state.errorMessage), _(this, "handleRetry", () => { let { onRetry: e } = this.props; null == e || e().then(() => this.setState({ retrySuccess: !0 })) }), _(this, "handleSubmit", e => { e.preventDefault(); let { handleSubmit: t, onError: n } = this.props; t(this.state.code).catch(e => { null != e.body && (null == n || n(e.body), e.body.message && this.setState({ errorMessage: e.body.message })) }) }), _(this, "handleCancel", () => { let { onClose: e, handleEarlyClose: t } = this.props; e(), null == t || t() }), _(this, "handleCodeChange", e => { this.setState({ code: e }) }) } } _(c, "defaultProps", { btnClass: "", isLoading: !1, disallowBackupCodes: !1, error: null, forceNoPlaceholder: !1 }), t.default = c }, 95152: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return C } }), n("47120"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("166459"), u = n("476326"), d = n("752305"), _ = n("849522"), c = n("703558"), E = n("626135"), I = n("358085"), T = n("998502"), f = n("981631"), S = n("689938"), h = n("239792"), A = n("611273"); function m(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function N(e) { var t, n, s, o; let { file: l } = e, [u, d] = r.useState(), [_, c] = r.useState(!1), [E, I] = r.useState({}), T = r.useRef(null); r.useEffect(() => { if (null != T.current && c(!1), null == l) return; let e = URL.createObjectURL(l); return d(e), () => { d(void 0), URL.revokeObjectURL(e) } }, [l]), r.useLayoutEffect(() => { let e = T.current; null != e && (e.onload = () => { let t = Math.max(.66, Math.min(e.naturalWidth / e.naturalHeight, 4)); 1 === t ? I({ width: 104, height: 104 }) : t > 1 ? I({ width: 104 * t, height: void 0 }) : I({ width: void 0, height: 104 / t }), c(!0) }) }, []); let f = Math.max(16, (120 - (null !== (n = null === (t = T.current) || void 0 === t ? void 0 : t.width) && void 0 !== n ? n : 0)) / 2); return (0, i.jsx)("img", { ref: T, src: u, className: a()(h.icon, { [h.image]: !_ }), "aria-hidden": !0, alt: "", style: { width: null !== (s = E.width) && void 0 !== s ? s : "initial", height: null !== (o = E.height) && void 0 !== o ? o : 104, marginLeft: f, marginRight: f, marginTop: null != E.height ? 104 - E.height - 33 : -33 } }) } class p extends r.Component { render() { var e; if (this.props.upload.item.platform !== u.UploadPlatform.WEB) return null; if (this.props.upload.isImage) return (0, i.jsx)(N, { file: this.props.upload.item.file }); return (0, i.jsx)("div", { className: a()(h.icon, { [h[null !== (e = this.props.upload.classification) && void 0 !== e ? e : ""]]: !0 }) }) } } class O extends r.Component { componentDidMount() { var e; (null === (e = this.props.upload) || void 0 === e ? void 0 : e.showLargeMessageDialog) && this.props.upload.item.platform === u.UploadPlatform.WEB && E.default.track(f.AnalyticEvents.OPEN_MODAL, { type: "Upload Large Message", message_content_length: this.props.upload.item.file.size }), I.isPlatformEmbedded && T.default.focus() } shouldComponentUpdate(e) { return null != e.upload } componentDidUpdate(e) { var t, n, i, r; (null === (t = e.upload) || void 0 === t ? void 0 : t.filename) !== (null === (n = this.props.upload) || void 0 === n ? void 0 : n.filename) && this.setState({ filename: null !== (r = null === (i = this.props.upload) || void 0 === i ? void 0 : i.filename) && void 0 !== r ? r : "" }) } render() { let { upload: e, transitionState: t, messageMaxLength: n, disableSpoiler: s } = this.props, { hasSpoiler: l } = this.state; return (0, i.jsxs)(o.ModalRoot, { "aria-label": S.default.Messages.ATTACH_FILES, size: o.ModalSize.DYNAMIC, transitionState: t, className: a()(h.uploadModal), children: [(0, i.jsxs)("div", { className: h.inner, children: [(0, i.jsxs)("div", { className: a()(h.file, { [h.expandable]: e.isImage }), children: [(0, i.jsx)(p, { upload: e }), (0, i.jsxs)("div", { className: h.description, children: [(0, i.jsx)("div", { className: h.filename, children: e.showLargeMessageDialog ? S.default.Messages.LARGE_MESSAGE_UPLOAD_TITLE_MAX_LENGTH.format({ maxLength: n }) : e.filename }), e.showLargeMessageDialog ? (0, i.jsx)("div", { className: h.subtitle, children: S.default.Messages.LARGE_MESSAGE_UPLOAD_SUBTITLE }) : null] })] }), (0, i.jsx)("div", { className: h.comment, children: (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)("div", { className: h.label, children: (0, i.jsx)("span", { children: S.default.Messages.UPLOAD_AREA_FILENAME }) }), (0, i.jsx)(o.TextInput, { className: a()(h.channelTextAreaUpload, A.marginTop8), value: this.state.filename, onChange: e => this.setState({ filename: e }), onKeyDown: e => { if (e.which === f.KeyboardKeys.ENTER) return this.handleSubmit() } }), e.isImage ? (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)("div", { className: h.label, children: (0, i.jsx)("span", { children: S.default.Messages.ATTACHMENT_MODAL_IMAGE_DESCRIPTION_LABEL }) }), (0, i.jsx)(o.TextInput, { className: a()(h.channelTextAreaUpload, A.marginTop8), placeholder: S.default.Messages.ATTACHMENT_MODAL_IMAGE_DESCRIPTION_PLACEHOLDER, value: this.state.description, onChange: e => this.setState({ description: e }), onKeyDown: e => { if (e.which === f.KeyboardKeys.ENTER) return this.handleSubmit() } })] }) : null, !0 !== s && (0, i.jsx)(o.Checkbox, { className: A.marginBottom20, value: l, onChange: (e, t) => this.setState({ hasSpoiler: t }), children: (0, i.jsx)(o.Text, { variant: "text-sm/normal", children: S.default.Messages.SPOILER_MARK_SELECTED }) })] }) })] }), (0, i.jsx)("div", { className: h.footer, children: (0, i.jsxs)("div", { className: a()(h.hasSpoilers, h.footerRightAlign), children: [(0, i.jsx)(o.Button, { type: "button", look: o.Button.Looks.LINK, color: o.Button.Colors.PRIMARY, onClick: this.cancel, children: (0, i.jsx)("span", { children: S.default.Messages.CANCEL }) }), (0, i.jsx)(o.Button, { type: "submit", onClick: this.handleSubmit, children: (0, i.jsx)("span", { children: S.default.Messages.ATTACHMENT_MODAL_SAVE }) })] }) })] }) } constructor(e) { var t, n, i, r, s, a; super(e), m(this, "cancelAll", () => { l.default.clearAll(this.props.channelId, this.props.draftType), this.props.onClose() }), m(this, "cancel", () => { this.props.onClose() }), m(this, "handleTextChange", (e, t, n) => { this.setState({ textValue: t, richValue: n }) }), m(this, "handleSubmit", () => { let { upload: e, onClose: t, onSubmit: n } = this.props, { filename: i, description: r, hasSpoiler: s } = this.state; n({ upload: e, name: i, description: r, spoiler: s }), t() }); let o = e.ignoreDraft ? "" : c.default.getDraft(this.props.channelId, e.draftType); this.state = { ...(0, d.createState)(o), textFocused: !0, hasSpoiler: null !== (r = null === (t = e.upload) || void 0 === t ? void 0 : t.spoiler) && void 0 !== r && r, filename: null !== (s = null === (n = e.upload) || void 0 === n ? void 0 : n.filename) && void 0 !== s ? s : "", contentWarningProps: null, description: null !== (a = null === (i = e.upload) || void 0 === i ? void 0 : i.description) && void 0 !== a ? a : "" } } } function C(e) { let t = (0, _.default)(); return e.upload.item.platform !== u.UploadPlatform.WEB ? null : (0, i.jsx)(O, { ...e, file: e.upload.item.file, messageMaxLength: t }) } }, 944613: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("658722"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("866442"), u = n("442837"), d = n("481060"), _ = n("430824"), c = n("981631"), E = n("689938"), I = n("352313"); t.default = function(e) { let { className: t, guild: n, roleStyle: r, roleFilter: a, onSelect: T, onClose: f } = e, S = (0, u.useStateFromStores)([_.default], () => _.default.getRoles(n.id)), h = e => o()(S).filter(a).filter(t => s()(e.toLowerCase(), t.name.toLowerCase())).value(); return (0, i.jsx)(d.ComboboxPopout, { className: t, value: new Set, onChange: T, placeholder: E.default.Messages.ADD_ROLE_PLACEHOLDER, "aria-label": E.default.Messages.ADD_ROLE_A11Y_LABEL, onClose: f, children: e => h(e).map(e => { var t, n; return (0, i.jsxs)(d.ComboboxItem, { value: e.id, children: ["dot" === r ? (0, i.jsx)(d.RoleDot, { className: I.popoutRoleDot, color: null !== (t = e.colorString) && void 0 !== t ? t : (0, l.int2hex)(c.DEFAULT_ROLE_COLOR), background: !1, tooltip: !1 }) : (0, i.jsx)(d.RoleCircle, { className: I.popoutRoleCircle, color: null !== (n = e.colorString) && void 0 !== n ? n : (0, l.int2hex)(c.DEFAULT_ROLE_COLOR) }), (0, i.jsx)(d.ComboboxItem.Label, { children: e.name })] }, e.id) }) }) } }, 845538: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T }, getSeasonalGiftingBody: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("873546"), a = n("481060"), o = n("326413"), l = n("626135"), u = n("981631"), d = n("921944"), _ = n("689938"), c = n("628842"); function E(e) { return e || !(s.isMobile || s.isTablet) ? _.default.Messages.SEASONAL_GIFTING_DM_POPUP_BODY : _.default.Messages.SEASONAL_GIFTING_MAKE_SOMEONES_DAY_TOOLTIP } function I(e) { let { onComplete: t, onDMCheckItOutClick: d, isDM: I } = e; r.useEffect(() => { l.default.track(u.AnalyticEvents.PREMIUM_GIFT_UPSELL_VIEWED, { type: "holiday_gifting_tip" }) }, []); let T = r.useMemo(() => [() => n.e("36278").then(n.t.bind(n, "268147", 19)), () => n.e("66902").then(n.t.bind(n, "7171", 19)), () => n.e("99694").then(n.t.bind(n, "55562", 19))], []), f = I || !(s.isMobile || s.isTablet), S = f ? _.default.Messages.SEASONAL_GIFTING_DM_POPUP_HEADER : _.default.Messages.SEASONAL_GIFTING_POPUP_HEADER, h = f ? _.default.Messages.SEASONAL_GIFTING_DM_POPUP_CTA : _.default.Messages.SEASONAL_GIFTING_SEND_GIFT_CTA; return (0, i.jsxs)("div", { className: c.container, children: [(0, i.jsx)(o.default, { className: c.image, animationData: T }), (0, i.jsxs)("div", { className: c.body, children: [(0, i.jsx)(a.Heading, { className: c.text, variant: "heading-sm/semibold", children: S }), (0, i.jsx)(a.Text, { className: c.text, variant: "text-sm/normal", children: E(I) })] }), (0, i.jsxs)("div", { className: c.dmButtonContainer, children: [(0, i.jsx)(a.Button, { className: c.dmButton, look: a.Button.Looks.FILLED, color: a.Button.Colors.BRAND, onClick: () => t(), children: _.default.Messages.GOT_IT }), (0, i.jsx)(a.Button, { className: c.dmButton, color: a.Button.Colors.BRAND_INVERTED, onClick: () => d(), children: h })] }), (0, i.jsx)("div", { className: c.pointer })] }) } function T(e) { let { onComplete: t, onDMCheckItOutClick: n, markAsDismissed: r, isDM: s } = e; return (0, i.jsx)(a.Popout, { spacing: 0, shouldShow: !0, position: "top", align: "center", renderPopout: e => (0, i.jsx)(I, { ...e, onComplete: () => { t(), r(d.ContentDismissActionType.USER_DISMISS) }, onDMCheckItOutClick: () => { n(), t(), r(d.ContentDismissActionType.TAKE_ACTION) }, isDM: s }), onRequestClose: () => void 0, closeOnScroll: !1, ignoreModalClicks: !0, children: () => (0, i.jsx)("div", { className: c.popoutTarget }) }) } }, 731994: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_FILE_UPLOAD_ICONS: function() { return o }, EMOJI_FILE_UPLOAD_ICONS: function() { return l }, FileUploadIconClassNames: function() { return a } }); var i, r, s = n("239792"); (i = r || (r = {}))[i.IMAGE = 0] = "IMAGE", i[i.DOCUMENT = 1] = "DOCUMENT", i[i.CODE = 2] = "CODE"; let a = { 0: s.image, 1: s.document, 2: s.code }, o = [1, 0, 2], l = [0, 0, 0] }, 310752: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("731994"), o = n("239792"); t.default = function(e) { let { icons: t, className: n } = e; return (0, i.jsxs)("div", { className: s()(o.icons, n), children: [(0, i.jsx)("div", { className: o.wrapOne, children: (0, i.jsx)("div", { className: s()(o.icon, o.one, a.FileUploadIconClassNames[t[0]]) }) }), (0, i.jsx)("div", { className: o.wrapThree, children: (0, i.jsx)("div", { className: s()(o.icon, o.three, a.FileUploadIconClassNames[t[2]]) }) }), (0, i.jsx)("div", { className: o.wrapTwo, children: (0, i.jsx)("div", { className: s()(o.icon, o.two, a.FileUploadIconClassNames[t[1]]) }) })] }) } }, 531643: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UPLOAD_ERROR_MODAL_KEY: function() { return I }, default: function() { return E }, openUploadError: function() { return T } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("952265"), o = n("466377"), l = n("355314"), u = n("153124"), d = n("310752"), _ = n("731994"), c = n("239792"); function E(e) { let { title: t, help: n, showPremiumUpsell: r, transitionState: a, icons: E, fileSize: I, onClose: T } = e, f = (0, u.useUID)(), S = null != E ? E : _.DEFAULT_FILE_UPLOAD_ICONS; return r ? (0, i.jsx)(l.default, { transitionState: a, onClose: T, fileSize: I }) : (0, i.jsx)(o.ModalRoot, { size: o.ModalSize.DYNAMIC, "aria-labelledby": f, transitionState: a, children: (0, i.jsx)("div", { className: s()(c.uploadDropModal, c.error), children: (0, i.jsxs)("div", { className: c.inner, children: [(0, i.jsx)(d.default, { icons: S }), (0, i.jsx)("div", { id: f, className: c.title, children: t }), (0, i.jsx)("div", { className: c.instructions, children: n })] }) }) }) } let I = "UPLOAD_ERROR_MODAL_KEY"; function T(e) { (0, a.openModal)(t => (0, i.jsx)(E, { ...t, ...e }), { modalKey: I }) } }, 508180: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("846027"), l = n("468026"), u = n("131951"), d = n("689938"); t.default = () => { let e = (0, s.useStateFromStores)([u.default], () => u.default.isInteractionRequired(), []), t = r.useRef(null); function n() { null !== t.current && ((0, a.closeModal)(t.current), t.current = null) } function _() { o.default.interact() } return r.useEffect(() => (e ? t.current = (0, a.openModal)(e => (0, i.jsx)(l.default, { title: d.default.Messages.INTERACTION_REQUIRED_TITLE, body: d.default.Messages.INTERACTION_REQUIRED_BODY, onConfirm: _, confirmText: d.default.Messages.OKAY, ...e })) : n(), () => { n() }), [e]), null } }, 717114: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("923928"), l = n("468026"), u = n("594190"), d = n("131951"), _ = n("19780"), c = n("63063"), E = n("981631"), I = n("689938"); t.default = () => { let [e, t] = (0, s.useStateFromStoresArray)([u.default], () => [u.default.canShowAdminWarning, u.default.getVisibleGame()], []), n = (0, s.useStateFromStores)([_.default], () => _.default.isConnected(), []), T = (0, s.useStateFromStores)([d.default], () => d.default.getMode() === E.InputModes.PUSH_TO_TALK, []), f = null != t && t.elevated && n && T && e, S = r.useRef(null); function h() { null !== S.current && ((0, a.closeModal)(S.current), S.current = null) } return r.useEffect(() => (f ? S.current = (0, a.openModal)(e => (0, i.jsx)(l.default, { title: I.default.Messages.PTT_PERMISSION_TITLE, body: I.default.Messages.PTT_PERMISSION_BODY.format({ game: null == t ? void 0 : t.name }), secondaryConfirmText: I.default.Messages.DONT_SHOW_AGAIN, onConfirmSecondary: () => o.default.clearPTTAdminWarning(), onConfirm: () => window.open(c.default.getArticleURL(E.HelpdeskArticles.PUSH_TO_TALK_ADMINISTRATOR_MODE), "_blank"), confirmText: I.default.Messages.HELP_DESK, ...e })) : h(), () => { h() }), [t, f]), null } }, 114250: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("508180"), s = n("717114"), a = n("8685"), o = n("634500"); t.default = () => (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(s.default, {}), (0, i.jsx)(r.default, {}), (0, i.jsx)(a.default, {}), (0, i.jsx)(o.default, {})] }) }, 8685: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("923928"), l = n("468026"), u = n("503856"), d = n("209590"), _ = n("689938"); let c = () => { o.default.clearSuppressWarning() }, E = () => { o.default.clearSuppressWarning(!0) }; t.default = () => { let e = r.useRef(null); function t() { null !== e.current && ((0, a.closeModal)(e.current), e.current = null) } let [o, I] = (0, s.useStateFromStoresArray)([d.default], () => [d.default.shouldShowWarning(), d.default.isAFKChannel()], []), T = r.useCallback(() => { let t = "", n = ""; I ? (t = _.default.Messages.SUPPRESSED_AFK_TITLE, n = _.default.Messages.SUPPRESSED_AFK_BODY) : (t = _.default.Messages.SUPPRESSED, n = _.default.Messages.SUPPRESSED_PERMISSION_BODY), e.current = (0, a.openModal)(e => (0, i.jsx)(l.default, { title: t, body: n, onConfirm: c, confirmText: _.default.Messages.OKAY, secondaryConfirmText: _.default.Messages.DONT_SHOW_AGAIN, onConfirmSecondary: E, ...e })) }, [I]), f = r.useCallback(() => { (0, a.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("41281")]).then(n.bind(n, "669732")); return t => (0, i.jsx)(e, { ...t, showHideSuppressWarning: !0 }) }).then(t => { null != t && (e.current = t) }) }, []); return r.useEffect(() => (o && (0, u.isRTCConnectedInHub)() ? f() : o ? T() : t(), () => { t() }), [o, T, f]), null } }, 634500: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("846027"), l = n("923928"), u = n("468026"), d = n("269647"), _ = n("981631"), c = n("689938"); function E() { let e = (0, s.useStateFromStores)([d.default], () => d.default.shouldShowWarning(), []), t = r.useRef(null); function n() { null !== t.current && ((0, a.closeModal)(t.current), t.current = null) } function E() { l.default.clearVADWarning() } return r.useEffect(() => (e ? t.current = (0, a.openModal)(e => (0, i.jsx)(u.default, { title: c.default.Messages.VAD_PERMISSION_TITLE, body: c.default.Messages.VAD_PERMISSION_BODY, onCancel: E, cancelText: c.default.Messages.VAD_PERMISSION_OKAY, confirmText: c.default.Messages.VAD_PERMISSION_ENABLE_PTT, onConfirm: () => { o.default.setMode(_.InputModes.PUSH_TO_TALK), E() }, ...e })) : n(), () => { n() }), [e]), null } }, 891819: function(e, t, n) { "use strict"; n.r(t), n.d(t, { backgroundImagePreloader: function() { return _ } }), n("653041"); var i = n("735250"), r = n("470079"), s = n("711873"), a = n.n(s), o = n("134432"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = /url\(['"](.*)['"]\)/, d = e => { if (null == e || "" === e || "none" === e) return null; let t = e.match(u); return null != t ? t[1] : e }; function _(e) { class t extends r.Component { componentDidUpdate(e, t) { if (t === this.state) return; let { cached: n, loaded: i } = this.state, { style: r } = this.props, s = null != r ? d(r.backgroundImage) : null; null == s && s !== n ? this.setState({ loaded: !0, cached: s }) : this.cachedURLs.indexOf(s) >= 0 ? this.setState({ loaded: !0, cached: s }) : null != s && s !== n && !0 === i && this.setState({ loaded: !1 }, () => this.preloadURL(s)) } preloadURL(e) { this.canceller && this.canceller(), this.canceller = (0, o.loadImage)(e, t => { this.canceller && (this.canceller = null), !t && (this.cachedURLs.push(e), this.setState({ cached: e, loaded: !0 })); let { onBackgroundImageLoad: n } = this.props; n && n(t, e) }) } componentWillUnmount() { this.canceller && this.canceller(), this.cachedURLs.length = 0 } render() { let { style: t, onBackgroundImageLoad: n, ...r } = this.props, { loaded: s, cached: a } = this.state; if (!s && null != t) { var o; t = { ...t, backgroundImage: null == (o = a) || "" === o || "none" === o ? "none" : "url(".concat(o, ")") } } return (0, i.jsx)(e, { style: t, ...r }) } constructor(e) { super(e), l(this, "cachedURLs", []), l(this, "canceller", null); let { style: t } = e, n = null != t ? d(t.backgroundImage) : null; this.cachedURLs = [n], this.state = { cached: n, loaded: !0 } } } return a()(t, e), t } }, 144830: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TimeUnits: function() { return r }, default: function() { return p }, getTimeAndUnit: function() { return N } }), n("411104"), n("852437"), n("47120"); var i, r, s, a, o, l, u = n("735250"), d = n("470079"), _ = n("392711"), c = n.n(_), E = n("846519"), I = n("689938"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(a = i || (i = {})).ACTIVITY_FEED = "ACTIVITY_FEED", a.ACTIVITY_FEED_NEW = "ACTIVITY_FEED_NEW", a.USER_ACTIVITY = "USER_ACTIVITY", a.GAME_LIBRARY_TIME_PLAYED = "GAME_LIBRARY_TIME_PLAYED", a.GAME_LIBRARY_LAST_PLAYED = "GAME_LIBRARY_LAST_PLAYED", (o = r || (r = {})).NONE = "NONE", o.SECONDS = "SECONDS", o.MINUTES = "MINUTES", o.HOURS = "HOURS", o.DAYS = "DAYS", o.WEEKS = "WEEKS", o.MONTHS = "MONTHS", o.YEARS = "YEARS", (l = s || (s = {})).START = "START", l.END = "END", l.TIME = "TIME"; let f = { NONE: e => 0, SECONDS: e => 60 * e, MINUTES: e => e, HOURS: e => e / 60, DAYS: e => e / 60 / 24, WEEKS: e => e / 60 / 24 / 7, MONTHS: e => e / 60 / 24 / 31, YEARS: e => e / 60 / 24 / 365 }, S = [{ unit: "NONE", max: 0 }, { unit: "SECONDS", max: 1 }, { unit: "MINUTES", max: 60 }, { unit: "HOURS", max: 1440 }, { unit: "DAYS", max: 44640 }, { unit: "WEEKS", max: 40320 }, { unit: "MONTHS", max: 525600 }, { unit: "YEARS", max: 1 / 0 }], h = e => (t, n) => null == n ? "" : e().format({ time: t, ...n }), A = { ACTIVITY_FEED: { START: { SECONDS: () => I.default.Messages.GAME_FEED_USER_PLAYING_JUST_STARTED, MINUTES: e => I.default.Messages.GAME_FEED_USER_PLAYING_FOR_MINUTES.format({ time: e }), HOURS: e => I.default.Messages.GAME_FEED_USER_PLAYING_FOR_HOURS.format({ time: e }), DAYS: e => I.default.Messages.GAME_FEED_USER_PLAYING_FOR_DAYS.format({ time: e }) }, END: { SECONDS: () => I.default.Messages.GAME_FEED_USER_PLAYING_JUST_ENDED, MINUTES: e => I.default.Messages.GAME_FEED_USER_PLAYED_MINUTES_AGO.format({ time: e }), HOURS: e => I.default.Messages.GAME_FEED_USER_PLAYED_HOURS_AGO.format({ time: e }), DAYS: e => I.default.Messages.GAME_FEED_USER_PLAYED_DAYS_AGO.format({ time: e }), WEEKS: e => I.default.Messages.GAME_FEED_USER_PLAYED_WEEKS_AGO.format({ time: e }), MONTHS: e => I.default.Messages.GAME_FEED_USER_PLAYED_MONTHS_AGO.format({ time: e }), YEARS: e => I.default.Messages.GAME_FEED_USER_PLAYED_YEARS_AGO.format({ time: e }) } }, ACTIVITY_FEED_NEW: { START: { SECONDS: h(() => I.default.Messages.ACTIVITY_FEED_USER_PLAYING_JUST_STARTED), MINUTES: h(() => I.default.Messages.ACTIVITY_FEED_USER_PLAYING_FOR_MINUTES), HOURS: h(() => I.default.Messages.ACTIVITY_FEED_USER_PLAYING_FOR_HOURS), DAYS: h(() => I.default.Messages.ACTIVITY_FEED_USER_PLAYING_FOR_DAYS) }, END: { SECONDS: e => I.default.Messages.DURATION_SECONDS_AGO.format({ seconds: e }), MINUTES: e => I.default.Messages.DURATION_MINUTES_AGO.format({ minutes: e }), HOURS: e => I.default.Messages.DURATION_HOURS_AGO.format({ hours: e }), DAYS: e => I.default.Messages.DURATION_DAYS_AGO.format({ days: e }) } }, USER_ACTIVITY: { START: { SECONDS: () => I.default.Messages.GAME_FEED_USER_PLAYING_JUST_STARTED, MINUTES: function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return n ? I.default.Messages.GAME_FEED_USER_PLAYING_FOR_MINUTES.format({ time: e }) : I.default.Messages.USER_ACTIVITY_USER_PLAYING_FOR_MINUTES.format({ time: e }) }, HOURS: function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return n ? I.default.Messages.GAME_FEED_USER_PLAYING_FOR_HOURS.format({ time: e }) : I.default.Messages.USER_ACTIVITY_USER_PLAYING_FOR_HOURS.format({ time: e }) }, DAYS: function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return n ? I.default.Messages.GAME_FEED_USER_PLAYING_FOR_DAYS.format({ time: e }) : I.default.Messages.USER_ACTIVITY_USER_PLAYING_FOR_DAYS.format({ time: e }) } } }, GAME_LIBRARY_TIME_PLAYED: { TIME: { NONE: () => I.default.Messages.GAME_LIBRARY_TIME_PLAYED_NONE, SECONDS: e => I.default.Messages.GAME_LIBRARY_TIME_PLAYED_SECONDS.format({ time: e }), MINUTES: e => I.default.Messages.GAME_LIBRARY_TIME_PLAYED_MINUTES.format({ time: e }), HOURS: e => I.default.Messages.GAME_LIBRARY_TIME_PLAYED_HOURS.format({ time: e }) } }, GAME_LIBRARY_LAST_PLAYED: { END: { NONE: () => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_NONE, SECONDS: () => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_JUST_NOW, MINUTES: e => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_MINUTES.format({ time: e }), HOURS: e => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_HOURS.format({ time: e }), DAYS: e => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_DAYS.format({ time: e }), WEEKS: e => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_WEEKS.format({ time: e }), MONTHS: e => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_MONTHS.format({ time: e }), YEARS: e => I.default.Messages.GAME_LIBRARY_LAST_PLAYED_YEARS.format({ time: e }) } } }; function m(e, t) { let n = S.findIndex(t => { let { max: n, unit: i } = t; return "NONE" === i && e === n || e < n }), i = c().findLast(S, e => { let { unit: n } = e; return t(n) }, n); if (null != i) return i.unit; let r = S.find(e => { let { unit: n } = e; return t(n) }); return null != r ? r.unit : null } function N(e, t) { let n = null != e ? m(e, e => t.includes(e)) : "NONE", i = null != n ? f[n] : null; return { unit: n, time: null != e && null != i ? Math.floor(i(e)) : null } } function p(e) { var t, n; return n = class extends(t = d.PureComponent) { componentDidMount() { this.timer.start(1e4, this.update) } componentDidUpdate(e) { let { start: t, end: n, time: i } = this.props; (e.start !== t || e.end !== n || e.time !== i) && this.update() } componentWillUnmount() { this.timer.stop() } getDiff() { let { start: e, end: t, time: n } = this.props; if (null != n) return n / 1e3 / 60; let i = Date.now(), r = 0; return null != e ? r = i - e : null != t && (r = i - t), Math.abs(r) / 1e3 / 60 } getTimeUnit(e, t, n) { let i = m(e, e => (function(e, t, n) { let i = A[n]; if (null != i) { let n = i[t]; if (null != n) return null != n[e] } return !1 })(e, n, t)); if (null == i) throw Error("Could not get the time unit in PlayTime with time: ".concat(e, " for type: ").concat(n, " in location: ").concat(t)); return i } getType() { let { start: e, end: t, time: n } = this.props; if (null != e) return "START"; if (null != t) return "END"; if (null != n) return "TIME"; return null } transformTime(e, t) { return f[e](t) } render() { let { location: t, messageProps: n, isApplicationStreaming: i, ...r } = this.props, { time: s } = this.state, a = this.getType(); if (null == a) return null; let o = this.getTimeUnit(s, t, a), l = A[t][a]; if (null == l) return null; let d = l[o], _ = Math.floor(this.transformTime(o, s)); return (0, u.jsx)(e, { ...r, children: null == d ? void 0 : d(_, n, i) }) } constructor(...e) { super(...e), T(this, "timer", new E.Interval), T(this, "state", { time: this.getDiff() }), T(this, "update", () => { this.setState({ time: this.getDiff() }) }) } }, T(n, "Locations", i), T(n, "Types", s), n } }, 438139: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"), r = n("470079"), s = n("846519"), a = n("689938"); function o(e) { return "".concat(e).length < 13 ? 1e3 * e : e } function l(e) { return class extends r.PureComponent { componentDidMount() { this._interval.start(1e3, () => this.setState(this.getUpdatedTime())) } componentWillUnmount() { this._interval.stop() } componentDidUpdate(e) { (e.timestamps.end !== this.props.timestamps.end || e.timestamps.start !== this.props.timestamps.start) && this.setState(this.getUpdatedTime()) } getUpdatedTime() { let { timestamps: e } = this.props, t = Date.now() / 1e3; return null != e.end ? this.getDiff(t, o(e.end) / 1e3) : null != e.start ? this.getDiff(o(e.start) / 1e3, t) : { hours: 0, minutes: 0, seconds: 0 } } renderTime(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return t && e <= 0 ? -1 : e < 10 ? "0".concat(e) : e } getDiff(e, t) { let n = Math.max(t - e, 0); return { hours: Math.floor(n / 3600) % 24, minutes: Math.floor(n / 60) % 60, seconds: Math.floor(n) % 60 } } render() { let { timestamps: t, ...n } = this.props, { hours: r, minutes: s, seconds: o } = this.state, l = { hours: this.renderTime(r, !0), minutes: this.renderTime(s), seconds: this.renderTime(o) }; return null != t.end ? (0, i.jsx)(e, { ...n, message: a.default.Messages.USER_ACTIVITY_TIMESTAMP_END.format(l) }) : null != t.start ? (0, i.jsx)(e, { ...n, message: a.default.Messages.USER_ACTIVITY_TIMESTAMP_START.format(l) }) : null } constructor(e) { var t, n, i; super(e), t = this, i = void 0, (n = "_interval") in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i, this._interval = new s.Interval, this.state = { ...this.getUpdatedTime() } } } } }, 730749: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("735250"), r = n("470079"), s = n("626135"); function a(e) { var t; let n = r.forwardRef((t, n) => (0, i.jsx)(s.AnalyticsContext.Consumer, { children: r => (0, i.jsx)(e, { ...t, ref: n, analyticsContext: r }) })); return n.displayName = "withAnalyticsContext(".concat(null !== (t = e.displayName) && void 0 !== t ? t : e.name, ")"), n } }, 112724: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("735250"), r = n("470079"), s = n("794037"); function a(e) { return r.forwardRef(function(t, n) { let a = r.useRef(); return r.useImperativeHandle(n, () => ({ triggerResize: () => { var e; null === (e = a.current) || void 0 === e || e.onResize() } })), (0, i.jsx)(s.default, { ref: a, children: n => { let { width: r, height: s } = n; return (0, i.jsx)(e, { ...t, width: r, height: s }) } }) }) } }, 377527: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TOOLTIP_SPRING_CONFIG: function() { return i } }); let i = { tension: 2400, friction: 52 } }, 680732: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AccessibilityAnnouncer: function() { return r } }); var i = n("408160"); let r = { announce: i.announce, clearAnnouncements: i.clearAnnouncer } }, 885518: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LOW_SATURATION_THRESHOLD: function() { return i } }); let i = .4 }, 186325: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AccessibilityPreferencesContext: function() { return i } }); let i = n("470079").createContext({ reducedMotion: { enabled: !1, rawValue: "no-preference" }, prefersCrossfades: !1, forcedColors: { enabled: !1, rawValue: "none" }, alwaysShowLinkDecorations: !1 }) }, 756715: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Anchor: function() { return E } }), n("411104"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("532712"), l = n("1561"), u = n("84735"), d = n("335854"), _ = n("645499"), c = n("433426"); function E(e) { let { href: t, onClick: n, className: s, children: E, rel: I, target: T, useDefaultUnderlineStyles: f = !0, title: S, style: h, focusProps: A, ...m } = e; null != t && null == n && (n = d.designConfig.getDefaultLinkInterceptor(t)); let N = r.useContext(o.BlockInteractionsContext), p = { className: a()(c.anchor, { [c.anchorUnderlineOnHover]: f }, s), href: t, onClick: n, rel: null != I ? I : void 0, target: null != T ? T : void 0, title: null != S ? S : void 0, style: null != h ? h : void 0 }; return (null != t && !(0, _.isSafeRedirect)(t) && (p.rel = "noreferrer noopener", p.target = "_blank"), N && delete p.href, null != n) ? (0, i.jsx)(l.Clickable, { tag: "a", ...m, ...p, onClick: n, focusProps: A, children: E }) : (0, i.jsx)(u.FocusRing, { ...A, children: (0, i.jsx)("a", { ...m, ...p, children: E }) }) } }, 974674: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnimatedAvatar: function() { return v }, Avatar: function() { return g }, getStatusCoords: function() { return N } }), n("411104"), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("1561"), u = n("438784"), d = n("696826"), _ = n("981729"), c = n("806519"), E = n("51144"), I = n("182294"), T = n("981631"), f = n("419061"), S = n("689938"), h = n("275562"); let A = { tension: 1200, friction: 70 }; function m(e) { let { size: t, isMobile: n, isTyping: r, ...s } = e, a = (0, I.getAvatarSpecs)(t), o = a.status * (n && !r ? I.MOBILE_HEIGHT_RATIO : 1), l = a.status * (r ? I.TYPING_WIDTH_RATIO : 1), u = r ? (a.status * I.TYPING_WIDTH_RATIO - a.status) / 2 : 0, d = a.size - a.status - u - a.offset, _ = a.size - o - a.offset; return (0, i.jsx)("rect", { x: d, y: _, width: l, height: o, fill: "transparent", "aria-hidden": !0, ...s }) } function N(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], r = (0, d.getStatusSize)(e.status, t, n, i), s = (i ? e.size - (r.width / 2 + e.status / 2) : e.size - r.width) - e.offset; return { ...r, x: s, y: e.size - r.height - e.offset } } function p(e, t, n, r) { let s = N(n, r, t, !1), a = (0, d.getStatusBackdropOpacity)(r, e); if (!t) { let t = s.height / 2 + n.stroke, r = s.x + n.status / 2; return (0, i.jsx)("circle", { style: { opacity: a }, fill: e, r: t, cx: r, cy: r }) } let o = s.height + 2 * n.stroke, l = s.width + 2 * n.stroke, u = s.x - n.stroke, _ = s.y - n.stroke; return (0, i.jsx)("rect", { fill: e, height: o, width: l, style: { opacity: a }, x: u, y: _, rx: n.stroke }) } function O(e) { let { status: t, isMobile: n, isTyping: i, size: r } = e, s = n && !i && t === T.StatusTypes.ONLINE, a = (0, I.getAvatarSpecs)(r); return { ... function(e, t, n) { let { size: i, status: r, stroke: s, offset: a } = e, o = n ? r * I.TYPING_WIDTH_RATIO : r, l = t ? r * I.MOBILE_HEIGHT_RATIO : r; return { avatarCutoutX: i - o + (o - r) / 2 - s - a, avatarCutoutY: i - l - s - a, avatarCutoutWidth: o + 2 * s, avatarCutoutHeight: l + 2 * s, avatarCutoutRadius: t ? (l + 2 * s) * I.CUTOUT_BORDER_RADIUS : (r + 2 * s) / 2 } }(a, s, i), ...(0, d.getStatusValues)({ status: t, size: a.status, isMobile: s, isTyping: i, topOffset: 2, leftOffset: 6 }) } } function C(e) { let { children: t, size: n, onClick: r, onMouseDown: s, onKeyDown: o, onContextMenu: u, onMouseEnter: d, onMouseLeave: _, className: T, tabIndex: A, ariaLabel: m, ariaHidden: N, status: p, isMobile: O = !1, isTyping: C = !1, avatarDecoration: R, typingOffset: g, specs: L } = e, v = { width: (0, I.getAvatarSize)(n), height: (0, I.getAvatarSize)(n) }, D = null == m || N ? void 0 : function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return null != t ? S.default.Messages.LABEL_WITH_ONLINE_STATUS.format({ label: e, status: (0, E.humanizeStatus)(t, n) }) : e }(m, p, O), M = L.size * f.DECORATION_TO_AVATAR_RATIO, y = function(e, t, n, i) { if (null == e) return null; if (i) switch (t) { case I.AvatarSizes.SIZE_16: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_16; case I.AvatarSizes.SIZE_20: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_20; case I.AvatarSizes.SIZE_24: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_24; case I.AvatarSizes.SIZE_32: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_32; case I.AvatarSizes.SIZE_40: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_40; case I.AvatarSizes.SIZE_56: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_56; case I.AvatarSizes.SIZE_80: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_80; case I.AvatarSizes.SIZE_120: return c.MaskIDs.AVATAR_DECORATION_STATUS_TYPING_120 } if (n) switch (t) { case I.AvatarSizes.SIZE_16: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_16; case I.AvatarSizes.SIZE_20: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_20; case I.AvatarSizes.SIZE_24: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_24; case I.AvatarSizes.SIZE_32: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_32; case I.AvatarSizes.SIZE_40: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_40; case I.AvatarSizes.SIZE_56: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_56; case I.AvatarSizes.SIZE_80: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_80; case I.AvatarSizes.SIZE_120: return c.MaskIDs.AVATAR_DECORATION_STATUS_MOBILE_120 } switch (t) { case I.AvatarSizes.SIZE_16: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_16; case I.AvatarSizes.SIZE_20: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_20; case I.AvatarSizes.SIZE_24: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_24; case I.AvatarSizes.SIZE_32: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_32; case I.AvatarSizes.SIZE_40: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_40; case I.AvatarSizes.SIZE_56: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_56; case I.AvatarSizes.SIZE_80: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_80; case I.AvatarSizes.SIZE_120: return c.MaskIDs.AVATAR_DECORATION_STATUS_ROUND_120 } return null }(p, n, O, C), P = null != R && (0, i.jsx)("svg", { width: M + g, height: M, viewBox: "0 0 ".concat(M + g, " ").concat(M), className: h.avatarDecoration, "aria-hidden": !0, children: (0, i.jsx)("foreignObject", { x: 0, y: 0, width: M, height: M, mask: null != y ? "url(#".concat(y, ")") : void 0, children: (0, i.jsx)("div", { className: h.avatarStack, children: (0, i.jsx)("img", { className: h.avatar, src: R, alt: " ", "aria-hidden": !0 }) }) }) }); return null != r || null != s ? (0, i.jsxs)(l.Clickable, { className: a()(h.wrapper, h.pointer, T), style: v, onClick: r, tabIndex: A, onContextMenu: u, onMouseDown: s, onKeyDown: o, onMouseEnter: null != d ? d : void 0, onMouseLeave: null != _ ? _ : void 0, "aria-label": D, "aria-hidden": N, children: [t, P] }) : (0, i.jsxs)("div", { className: a()(h.wrapper, T), style: v, onContextMenu: null != u ? u : void 0, onMouseEnter: null != d ? d : void 0, onMouseLeave: null != _ ? _ : void 0, role: "img", "aria-label": D, "aria-hidden": N, children: [t, P] }) } function R(e) { let { src: t, isSpeaking: n, className: r } = e; return (0, i.jsxs)("div", { className: a()(h.avatarStack, r), children: [(0, i.jsx)("img", { src: null != t ? t : void 0, alt: " ", className: h.avatar, "aria-hidden": !0 }), n && (0, i.jsx)("div", { className: h.avatarSpeaking })] }, t) } function g(e) { let { src: t, status: n, size: r, statusColor: s, isMobile: o = !1, isTyping: l = !1, typingIndicatorRef: f, isSpeaking: S = !1, statusTooltip: A = !1, statusTooltipDelay: m, statusBackdropColor: O, "aria-hidden": g = !1, "aria-label": L, imageClassName: v } = e, D = n !== T.StatusTypes.UNKNOWN ? n : null, M = (0, I.getAvatarSpecs)(r), y = null != D ? Math.ceil((M.status * I.TYPING_WIDTH_RATIO - M.status) / 2) : 0, P = M.size + y, U = (0, d.useStatusFillColor)(D, s); return (0, i.jsx)(C, { ...e, ariaLabel: L, ariaHidden: g, status: D, specs: M, typingOffset: y, children: (0, i.jsxs)("svg", { width: P, height: P, viewBox: "0 0 ".concat(P, " ").concat(P), className: a()(h.mask, h.svg), "aria-hidden": !0, children: [(0, i.jsx)("foreignObject", { x: 0, y: 0, width: M.size, height: M.size, mask: "url(#".concat(function(e, t, n, i) { if (null == e) return c.MaskIDs.AVATAR_DEFAULT; if (i) switch (t) { case I.AvatarSizes.SIZE_16: return c.MaskIDs.AVATAR_STATUS_TYPING_16; case I.AvatarSizes.SIZE_20: return c.MaskIDs.AVATAR_STATUS_TYPING_20; case I.AvatarSizes.SIZE_24: return c.MaskIDs.AVATAR_STATUS_TYPING_24; case I.AvatarSizes.SIZE_32: return c.MaskIDs.AVATAR_STATUS_TYPING_32; case I.AvatarSizes.SIZE_40: return c.MaskIDs.AVATAR_STATUS_TYPING_40; case I.AvatarSizes.SIZE_48: return c.MaskIDs.AVATAR_STATUS_TYPING_48; case I.AvatarSizes.SIZE_56: return c.MaskIDs.AVATAR_STATUS_TYPING_56; case I.AvatarSizes.SIZE_80: return c.MaskIDs.AVATAR_STATUS_TYPING_80; case I.AvatarSizes.SIZE_120: return c.MaskIDs.AVATAR_STATUS_TYPING_120 } if (e === T.StatusTypes.ONLINE && n) switch (t) { case I.AvatarSizes.SIZE_16: return c.MaskIDs.AVATAR_STATUS_MOBILE_16; case I.AvatarSizes.SIZE_20: return c.MaskIDs.AVATAR_STATUS_MOBILE_20; case I.AvatarSizes.SIZE_24: return c.MaskIDs.AVATAR_STATUS_MOBILE_24; case I.AvatarSizes.SIZE_32: return c.MaskIDs.AVATAR_STATUS_MOBILE_32; case I.AvatarSizes.SIZE_40: return c.MaskIDs.AVATAR_STATUS_MOBILE_40; case I.AvatarSizes.SIZE_48: return c.MaskIDs.AVATAR_STATUS_MOBILE_48; case I.AvatarSizes.SIZE_56: return c.MaskIDs.AVATAR_STATUS_MOBILE_56; case I.AvatarSizes.SIZE_80: return c.MaskIDs.AVATAR_STATUS_MOBILE_80; case I.AvatarSizes.SIZE_120: return c.MaskIDs.AVATAR_STATUS_MOBILE_120 } switch (t) { case I.AvatarSizes.SIZE_16: return c.MaskIDs.AVATAR_STATUS_ROUND_16; case I.AvatarSizes.SIZE_20: return c.MaskIDs.AVATAR_STATUS_ROUND_20; case I.AvatarSizes.SIZE_24: return c.MaskIDs.AVATAR_STATUS_ROUND_24; case I.AvatarSizes.SIZE_32: return c.MaskIDs.AVATAR_STATUS_ROUND_32; case I.AvatarSizes.SIZE_40: return c.MaskIDs.AVATAR_STATUS_ROUND_40; case I.AvatarSizes.SIZE_48: return c.MaskIDs.AVATAR_STATUS_ROUND_48; case I.AvatarSizes.SIZE_56: return c.MaskIDs.AVATAR_STATUS_ROUND_56; case I.AvatarSizes.SIZE_80: return c.MaskIDs.AVATAR_STATUS_ROUND_80; case I.AvatarSizes.SIZE_120: return c.MaskIDs.AVATAR_STATUS_ROUND_120 } throw Error("getMaskId(): Unsupported type, size: ".concat(t, ", status: ").concat(e, ", isMobile: ").concat(n ? "true" : "false")) }(D, r, o, l), ")"), children: (0, i.jsx)(R, { src: t, isSpeaking: S, className: v }) }), null != D && null != O ? p(O, o, M, D) : null, null != D ? (0, i.jsx)(_.Tooltip, { text: A ? (0, E.humanizeStatus)(D) : null, "aria-label": !1, position: "top", spacing: 5 + 1.5 * M.stroke, delay: m, children: e => (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("rect", { ...e, ...N(M, D, o, l), fill: U, mask: "url(#".concat((0, d.getStatusMask)(D, o, l), ")"), className: h.pointerEvents }), l ? (0, i.jsx)(u.Dots, { ref: f, dotRadius: M.status / 4, x: M.size - 1.375 * M.status - M.offset, y: M.size - M.status / 1.333 - M.offset }) : null] }) }) : null] }) }) } function L(e) { let { fromIsMobile: t = !0, fromStatus: n, fromColor: s, isMobile: l = !1, isTyping: c = !1, typingIndicatorRef: T, isSpeaking: f = !1, size: S, src: N, status: g, statusColor: L, statusTooltip: v = !1, statusTooltipDelay: D, statusBackdropColor: M, "aria-hidden": y = !1, "aria-label": P, imageClassName: U } = e, b = (0, d.useStatusFillColor)(g, L), G = r.useId(), w = r.useId(), [k] = r.useState(() => ({ fill: s, ...O({ size: S, status: n, isMobile: t, isTyping: !1 }) })), B = r.useMemo(() => ({ fill: b, ...O({ size: S, status: g, isMobile: l, isTyping: c }) }), [b, S, g, l, c]), { avatarCutoutX: V, avatarCutoutY: x, avatarCutoutWidth: F, avatarCutoutHeight: H, avatarCutoutRadius: Y, fill: j, ...W } = (0, o.useSpring)({ immediate: !document.hasFocus(), config: A, from: k, to: B }), K = (0, I.getAvatarSize)(S), z = (0, I.getAvatarSpecs)(S), Z = z.status * I.TYPING_WIDTH_RATIO, X = z.status * I.MOBILE_HEIGHT_RATIO, Q = null != g ? (z.status * I.TYPING_WIDTH_RATIO - z.status) / 2 : 0, q = z.size - z.status - Q - z.offset, J = z.size - X - z.offset, $ = z.size + Math.ceil(Q); return (0, i.jsx)(C, { ...e, ariaLabel: P, ariaHidden: y, typingOffset: Q, specs: z, children: (0, i.jsxs)("svg", { width: $, height: $, viewBox: "0 0 ".concat($, " ").concat($), className: a()(h.mask, h.svg), "aria-hidden": !0, children: [(0, i.jsxs)("mask", { id: G, width: K, height: K, children: [(0, i.jsx)("circle", { cx: K / 2, cy: K / 2, r: K / 2, fill: "white" }), (0, i.jsx)(o.animated.rect, { color: "black", x: V, y: x, width: F, height: H, rx: Y, ry: Y })] }), (0, i.jsx)("foreignObject", { className: h.__invalid_foreignObject, x: 0, y: 0, width: K, height: K, mask: "url(#".concat(G, ")"), children: (0, i.jsx)(R, { src: N, isSpeaking: f, className: U }) }), null != M && p(M, l, z, g), (0, i.jsx)(_.Tooltip, { text: v ? (0, E.humanizeStatus)(g) : null, "aria-label": !1, position: "top", spacing: function(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; return 5 - (n && !i ? 0 : .5 * e) + 1.5 * t }(z.status, z.stroke, l, c), delay: D, children: e => (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)("svg", { x: q, y: J, width: Z, height: X, viewBox: "0 0 ".concat(Z, " ").concat(X), className: v ? h.cursorDefault : void 0, children: [(0, d.renderStatusMask)(W, z.status, w), (0, i.jsx)(o.animated.rect, { fill: j, width: Z, height: X, mask: "url(#".concat(w, ")") }), (0, i.jsx)(u.Dots, { ref: T, dotRadius: z.status / 4, x: .15 * Z, y: .5 * X, hide: !c })] }), (0, i.jsx)(m, { size: S, isMobile: l, isTyping: c, className: h.pointerEvents, ...e })] }) })] }) }) } let v = r.memo(function(e) { var t, n, s, a, o; let { statusColor: l, status: u, ..._ } = e, { isMobile: c = !1, isTyping: E = !1 } = _, I = r.useRef(u), f = r.useRef(c), S = (0, d.useStatusFillColor)(u, l), h = r.useRef(S), A = r.useRef(!1); let m = A.current || (t = E, n = u, s = I.current, a = c, o = f.current, null != s && null != n && (!!t || n !== s || n === T.StatusTypes.ONLINE && a !== o || !1)); return r.useLayoutEffect(() => { A.current = m, I.current = u, f.current = c, h.current = S }, [u, c, S, m]), null != u && null != I.current && m ? (0, i.jsx)(L, { ..._, status: u, statusColor: S, fromStatus: I.current, fromIsMobile: f.current, fromColor: h.current }) : (0, i.jsx)(g, { ..._, status: u, statusColor: S }) }) }, 182294: function(e, t, n) { "use strict"; var i, r, s, a, o, l; n.r(t), n.d(t, { AvatarSizeSpecs: function() { return E }, AvatarSizes: function() { return i }, CUTOUT_BORDER_RADIUS: function() { return c }, MOBILE_HEIGHT_RATIO: function() { return u }, MOBILE_ICON_RADIUS: function() { return _ }, StatusBackdropColors: function() { return r }, StatusBackdropOpacity: function() { return s }, TYPING_WIDTH_RATIO: function() { return d }, getAvatarSize: function() { return T }, getAvatarSpecs: function() { return I } }), n("411104"); let u = 1.5, d = 2.5, _ = .125, c = .2; (a = i || (i = {})).SIZE_16 = "SIZE_16", a.SIZE_20 = "SIZE_20", a.SIZE_24 = "SIZE_24", a.SIZE_32 = "SIZE_32", a.SIZE_40 = "SIZE_40", a.SIZE_48 = "SIZE_48", a.SIZE_56 = "SIZE_56", a.SIZE_80 = "SIZE_80", a.SIZE_120 = "SIZE_120", a.SIZE_152 = "SIZE_152", a.DEPRECATED_SIZE_30 = "DEPRECATED_SIZE_30", a.DEPRECATED_SIZE_60 = "DEPRECATED_SIZE_60", a.DEPRECATED_SIZE_100 = "DEPRECATED_SIZE_100", (o = r || (r = {})).BLACK = "black", o.WHITE = "white", (l = s || (s = {}))[l.HIGH = .7] = "HIGH", l[l.LOW = .45] = "LOW"; let E = Object.freeze({ SIZE_16: Object.freeze({ size: 16, status: 6, stroke: 2, offset: 0 }), SIZE_20: Object.freeze({ size: 20, status: 6, stroke: 2, offset: 0 }), SIZE_24: Object.freeze({ size: 24, status: 8, stroke: 3, offset: 0 }), SIZE_32: Object.freeze({ size: 32, status: 10, stroke: 3, offset: 0 }), SIZE_40: Object.freeze({ size: 40, status: 12, stroke: 4, offset: 0 }), SIZE_48: Object.freeze({ size: 48, status: 12, stroke: 4, offset: 0 }), SIZE_56: Object.freeze({ size: 56, status: 14, stroke: 4, offset: 2 }), SIZE_80: Object.freeze({ size: 80, status: 16, stroke: 6, offset: 4 }), SIZE_120: Object.freeze({ size: 120, status: 24, stroke: 8, offset: 8 }), SIZE_152: Object.freeze({ size: 152, status: 30, stroke: 10, offset: 10 }), DEPRECATED_SIZE_30: Object.freeze({ size: 30, status: 0, stroke: 0, offset: 0 }), DEPRECATED_SIZE_60: Object.freeze({ size: 60, status: 0, stroke: 0, offset: 0 }), DEPRECATED_SIZE_100: Object.freeze({ size: 100, status: 0, stroke: 0, offset: 0 }) }); function I(e) { return E[e] } function T(e) { if ("number" != typeof e) return E[e].size; return e } }, 104140: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BlobMask: function() { return g } }), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("96355"), d = n("47759"), _ = n.n(d), c = n("920906"), E = n("153832"), I = n("722770"), T = n("846519"), f = n("215569"), S = n("280001"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = { friction: 13, tension: 240, duration: 150 }, m = { duration: 150, friction: 3 }, N = { friction: 30, tension: 900, mass: 1 }, p = { duration: 150, friction: 10, tension: 100, mass: 1 }, O = (null === (i = window.SVGPathElement) || void 0 === i ? void 0 : i.prototype.getTotalLength) != null ? (0, u.interpolate)("M48 24C48 37.2548 37.2548 48 24 48C10.7452 48 0 37.2548 0 24C0 10.7452 10.7452 0 24 0C37.2548 0 48 10.7452 48 24Z", "M0 24C0 16.5449 0 12.8174 1.21793 9.87706C2.84183 5.95662 5.95662 2.84183 9.87706 1.21793C12.8174 0 16.5449 0 24 0C31.4551 0 35.1826 0 38.1229 1.21793C42.0434 2.84183 45.1582 5.95662 46.7821 9.87706C48 12.8174 48 16.5449 48 24C48 31.4551 48 35.1826 46.7821 38.1229C45.1582 42.0434 42.0434 45.1582 38.1229 46.7821C35.1826 48 31.4551 48 24 48C16.5449 48 12.8174 48 9.87706 46.7821C5.95662 45.1582 2.84183 42.0434 1.21793 38.1229C0 35.1826 0 31.4551 0 24Z", { maxSegmentLength: 1.5 }) : e => "".concat(e); class C extends a.Component { componentDidMount() { this.forceUpdate() } componentWillAppear(e) { e() } componentWillEnter(e) { e() } componentWillLeave(e) { this.timeoutId = setTimeout(e, 300) } componentWillUnmount() { clearTimeout(this.timeoutId) } render() { let { children: e, className: t, animatedStyle: n } = this.props; return (0, s.jsx)(c.animated.div, { className: t, style: n, children: e }) } constructor(...e) { super(...e), h(this, "timeoutId", void 0) } } function R(e) { let { selected: t, upperBadge: n, lowerBadge: i, highlight: r } = e; return t || null != n || null != i || !!r } class g extends(r = a.Component) { static getDerivedStateFromProps(e, t) { let { hasRenderedBadge: n, upperBadgeMask: i, lowerBadgeMask: r, borderRadiusMask: s, renderComplex: a } = t, { upperBadge: o, lowerBadge: l } = e, u = !1; return (null != o && null == i || null != l && null == r) && (u = !0, n = !0, i = new c.Controller({ spring: 0 }), r = new c.Controller({ spring: 0 })), R(e) && null == s && (u = !0, s = new c.Controller({ spring: 0 })), !a && R(e) && (u = !0, a = !0), u ? { hasRenderedBadge: n, lowerBadgeMask: r, upperBadgeMask: i, borderRadiusMask: s, renderComplex: a } : null } componentDidMount() { let { selected: e, lowerBadge: t, upperBadge: n } = this.props, { borderRadiusMask: i, lowerBadgeMask: r, upperBadgeMask: s } = this.state; null == i || i.update({ spring: e ? 1 : 0, immediate: !0 }).start(), null == r || r.update({ spring: null != t ? 1 : 0, immediate: !0 }).start(), null == s || s.update({ spring: null != n ? 1 : 0, immediate: !0 }).start() } componentWillUnmount() { let { borderRadiusMask: e, lowerBadgeMask: t, upperBadgeMask: n } = this.state; this.timeout.stop(), null == e || e.dispose(), null == t || t.dispose(), null == n || n.dispose() } componentDidUpdate(e) { let { selected: t, lowerBadge: n, upperBadge: i } = this.props, { borderRadiusMask: r, lowerBadgeMask: s, upperBadgeMask: a, renderComplex: o } = this.state; t && !e.selected ? null == r || r.update({ spring: 1, immediate: !1, config: A }).start() : !t && e.selected && (null == r || r.update({ spring: 0, immediate: !1, config: m }).start()), null != n && null == e.lowerBadge ? null == s || s.update({ spring: 1, immediate: !document.hasFocus(), config: N }).start() : null == n && null != e.lowerBadge && (null == s || s.update({ spring: 0, immediate: !document.hasFocus(), config: p }).start()), null != i && null == e.upperBadge ? null == a || a.update({ spring: 1, immediate: !document.hasFocus(), config: N }).start() : null == i && null != e.upperBadge && (null == a || a.update({ spring: 0, immediate: !document.hasFocus(), config: p }).start()), !o || R(this.props) || this.timeout.isStarted() ? R(this.props) && this.timeout.isStarted() && this.timeout.stop() : this.timeout.start(_()(108e5, 18e6), this.handleTimeout) } getBadgePositionInterpolation(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1; if (null == e) return; let { spring: n } = e.springs; return n.to([0, 1], [20, 0]).to(e => "translate(".concat(e, " ").concat(e * t, ")")) } getLowerBadgeStyles() { let { lowerBadgeMask: e } = this.state; if (null == e) return; let { spring: t } = e.springs; return { opacity: t.to([0, .5, 1], [0, 0, 1]), transform: t.to(e => "translate(".concat(16 - 16 * e, "px, ").concat(16 - 16 * e, "px)")) } } getUpperBadgeStyles() { let { upperBadgeMask: e } = this.state; if (null == e) return; let { spring: t } = e.springs; return { opacity: t.to([0, .5, 1], [0, 0, 1]), transform: t.to(e => "translate(".concat(16 - 16 * e, "px, ").concat(-1 * (16 - 16 * e), "px)")) } } getPathInterpolation() { var e; return null === (e = this.state.borderRadiusMask) || void 0 === e ? void 0 : e.springs.spring.to(O) } render() { let { children: e, className: t, innerClassName: n, lowerBadge: i, lowerBadgeWidth: r, style: o, upperBadge: u, highlight: d } = this.props, { maskId: _, lowerBadgeMask: E, upperBadgeMask: T, focused: h, hasRenderedBadge: A, renderComplex: m } = this.state; if (!m) return (0, s.jsx)("div", { className: l()(t, { [S.wrapperSimple]: !0, [S.simpleFocused]: h }), style: o, onFocus: this.handleFocus, onBlur: this.handleBlur, children: (0, s.jsx)("svg", { width: 48, height: 48, viewBox: "0 0 ".concat(48, " ").concat(48), className: S.svg, overflow: "visible", children: (0, s.jsx)("foreignObject", { x: 0, y: 0, className: n, width: 48, height: 48, children: e }, "foreign-object") }, "svg") }, "wrapper"); let N = "".concat(_, "-upper_badge_masks"), p = "".concat(_, "-lower_badge_masks"), O = "".concat(_, "-blob_mask"), R = "".concat(_, "-stroke_mask"), g = "".concat(_, "-highlight_mask"); return (0, s.jsxs)("div", { className: l()(t, S.wrapper), style: o, onFocus: this.handleFocus, onBlur: this.handleBlur, children: [(0, s.jsxs)("svg", { width: 48, height: 48, viewBox: "0 0 ".concat(48, " ").concat(48), className: l()(S.svg, { [S.noContain]: d }), overflow: "visible", children: [(0, s.jsxs)("defs", { children: [d && (0, s.jsx)(c.animated.path, { d: this.getPathInterpolation(), id: g }), (0, s.jsx)(c.animated.path, { d: this.getPathInterpolation(), id: O }), A ? (0, s.jsx)(c.animated.rect, { id: N, x: 28, y: -4, width: 24, height: 24, rx: 12, ry: 12, transform: this.getBadgePositionInterpolation(T, -1) }) : null, A ? (0, s.jsx)(c.animated.rect, { id: p, x: 48 - (r + 8) + 4, y: 28, width: r + 8, height: 24, rx: 12, ry: 12, transform: this.getBadgePositionInterpolation(E) }) : null] }), (0, s.jsxs)("mask", { id: _, fill: "black", x: 0, y: 0, width: 48, height: 48, children: [d && (0, s.jsx)("use", { href: "#".concat(g), fill: "black" }), (0, s.jsx)("use", { href: "#".concat(O), fill: "white", className: l()({ [S.isHighlighted]: d }) }), A ? (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)("use", { href: "#".concat(N), fill: "black" }), (0, s.jsx)("use", { href: "#".concat(p), fill: "black" })] }) : null] }), A ? (0, s.jsxs)("mask", { id: R, children: [(0, s.jsx)("rect", { width: "150%", height: "150%", x: "-25%", y: "-25%", fill: "white" }), (0, s.jsx)("use", { href: "#".concat(N), fill: "black" }), (0, s.jsx)("use", { href: "#".concat(p), fill: "black" })] }) : null, h ? (0, s.jsxs)(a.Fragment, { children: [(0, s.jsx)("g", { className: S.focusStroke, mask: "url(#".concat(R, ")"), children: (0, s.jsx)("use", { href: "#".concat(O) }) }), (0, s.jsxs)("g", { className: S.focusFill, children: [null != u ? (0, s.jsx)("use", { href: "#".concat(N) }) : null, null != i ? (0, s.jsx)("use", { href: "#".concat(p) }) : null] })] }) : null, d && (0, s.jsx)(c.animated.path, { d: this.getPathInterpolation(), stroke: I.default.BRAND_500, "stroke-width": 2, className: S.highlight, mask: "url(#".concat(R, ")") }), (0, s.jsx)("foreignObject", { mask: "url(#".concat(_, ")"), x: 0, y: 0, className: n, width: 48, height: 48, children: e }, "foreign-object")] }, "svg"), (0, s.jsxs)(f.TransitionGroup, { component: a.Fragment, children: [null != i ? (0, s.jsx)(C, { className: S.lowerBadge, animatedStyle: this.getLowerBadgeStyles(), children: i }, "lower-badge") : null, null != u ? (0, s.jsx)(C, { className: S.upperBadge, animatedStyle: this.getUpperBadgeStyles(), children: u }, "upper-badge") : null] })] }, "wrapper") } constructor(...e) { super(...e), h(this, "timeout", new T.Timeout), h(this, "state", { renderComplex: !1, hasRenderedBadge: !1, maskId: (0, E.v4)(), focused: !1 }), h(this, "handleTimeout", () => { this.timeout.stop(), this.setState({ renderComplex: !1 }) }), h(this, "handleFocus", () => { this.setState({ focused: !0 }) }), h(this, "handleBlur", () => { this.setState({ focused: !1 }) }) } } h(g, "defaultProps", { selected: !1, lowerBadgeWidth: 16, highlight: !1 }) }, 532712: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BlockInteractions: function() { return s }, BlockInteractionsContext: function() { return r } }); var i = n("735250"); let r = n("470079").createContext(!1); function s(e) { let { children: t } = e; return (0, i.jsx)(r.Provider, { value: !0, children: t }) } }, 693789: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Button: function() { return S }, ButtonColors: function() { return I }, ButtonLink: function() { return h }, ButtonLooks: function() { return E }, ButtonSizes: function() { return T }, getButtonStyle: function() { return f } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("613828"), l = n("680732"), u = n("84735"), d = n("922770"), _ = n("689938"), c = n("690514"); let E = { FILLED: c.lookFilled, OUTLINED: c.lookOutlined, LINK: c.lookLink, BLANK: c.lookBlank }, I = { BRAND: c.colorBrand, BRAND_INVERTED: c.colorBrandInverted, RED: c.colorRed, GREEN: c.colorGreen, PRIMARY: c.colorPrimary, LINK: c.colorLink, WHITE: c.colorWhite, TRANSPARENT: c.colorTransparent, CUSTOM: "" }, T = { NONE: "", TINY: c.sizeTiny, SMALL: c.sizeSmall, MEDIUM: c.sizeMedium, LARGE: c.sizeLarge, MIN: c.sizeMin, MAX: c.sizeMax, ICON: c.sizeIcon }; function f() { let { look: e = E.FILLED, color: t = I.BRAND, size: n = T.MEDIUM, fullWidth: i = !1, grow: r = !0, submitting: s = !1, disabled: o = !1 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return a()(c.button, e, t, n, { [c.fullWidth]: i, [c.grow]: r, [c.submitting]: s && !o }) } function S(e) { let { look: t = E.FILLED, color: n = I.BRAND, size: s = T.MEDIUM, fullWidth: o = !1, grow: S = !0, disabled: h = !1, submitting: A = !1, type: m = "button", style: N, wrapperClassName: p, className: O, innerClassName: C, onClick: R, onDoubleClick: g, onMouseDown: L, onMouseUp: v, onMouseEnter: D, onMouseLeave: M, onKeyDown: y, children: P, rel: U, buttonRef: b, focusProps: G, "aria-label": w, submittingStartedLabel: k, submittingFinishedLabel: B, ...V } = e, x = h || A, F = x && (null != D || null != M), H = function(e, t) { var n, i, r, s; let a = null == e ? void 0 : e.offset; if (t === E.LINK || t === E.BLANK) return a; if (null == a) return -2; if ("number" == typeof a) return a + 2; return { top: (null !== (n = a.top) && void 0 !== n ? n : 0) - 2, right: (null !== (i = a.right) && void 0 !== i ? i : 0) - 2, bottom: (null !== (r = a.bottom) && void 0 !== r ? r : 0) - 2, left: (null !== (s = a.left) && void 0 !== s ? s : 0) - 2 } }(G, t), Y = r.useRef(!1); r.useEffect(() => { !0 === A && (Y.current = !0, l.AccessibilityAnnouncer.announce(null != k ? k : _.default.Messages.A11Y_LOADING_STARTED)), !1 === A && !0 === Y.current && l.AccessibilityAnnouncer.announce(null != B ? B : _.default.Messages.A11Y_LOADING_FINISHED) }, [A, k, B]); let j = (0, i.jsx)(u.FocusRing, { ...G, offset: H, children: (0, i.jsxs)("button", { ...x ? null : V, "aria-label": w, "aria-busy": !!A || void 0, ref: b, onClick: x ? e => e.preventDefault() : R, onDoubleClick: x ? e => e.preventDefault() : g, onMouseUp: h ? void 0 : v, onMouseDown: h ? void 0 : L, onMouseEnter: D, onMouseLeave: M, onKeyDown: h ? void 0 : y, type: m, disabled: h, style: N, rel: U, className: a()(O, f({ look: t, color: n, size: s, fullWidth: o, grow: S, submitting: A, disabled: h }), F ? null : p), children: [A && !h ? (0, i.jsx)(d.Spinner, { type: d.Spinner.Type.PULSING_ELLIPSIS, className: c.spinner, itemClassName: c.spinnerItem }) : null, (0, i.jsx)("div", { className: a()(c.contents, C), children: P })] }) }); return F ? (0, i.jsxs)("span", { className: a()(c.disabledButtonWrapper, p, s, { [c.grow]: S, [c.fullWidth]: o }), children: [j, (0, i.jsx)("span", { onMouseEnter: D, onMouseLeave: M, className: c.disabledButtonOverlay })] }) : j } function h(e) { let { look: t = E.FILLED, color: n = I.BRAND, size: r = T.MEDIUM, fullWidth: s = !1, grow: l = !0, style: u, className: d, innerClassName: _, to: f, onClick: S, onMouseDown: h, onMouseUp: A, children: m, rel: N, ...p } = e; return (0, i.jsx)(o.Link, { ...p, to: f, onClick: S, onMouseUp: A, onMouseDown: h, style: u, rel: N, className: a()(d, c.button, t, n, r, { [c.fullWidth]: s, [c.grow]: l }), children: (0, i.jsx)("span", { className: a()(c.contents, _), children: m }) }) } S.Looks = E, S.Colors = I, S.Sizes = T, S.Link = h }, 49800: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Card: function() { return _ }, CardTypes: function() { return d } }); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("922423"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = { PRIMARY: l.cardPrimary, DANGER: l.cardDanger, WARNING: l.cardWarning, SUCCESS: l.cardSuccess, BRAND: l.cardBrand, CUSTOM: l.card }; class _ extends(i = s.PureComponent) { render() { let e; let { children: t, editable: n, type: i, className: s, outline: a, ...u } = this.props; return a ? e = l.outline : i === d.PRIMARY && n && (e = l.editable), (0, r.jsx)("div", { className: o()(s, i, e), ...u, children: t }) } } u(_, "Types", d), u(_, "defaultProps", { type: d.PRIMARY, outline: !1, editable: !1 }) }, 178940: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Checkbox: function() { return O } }), n("47120"); var i, r, s, a, o, l = n("735250"), u = n("470079"), d = n("120356"), _ = n.n(d), c = n("512722"), E = n.n(c), I = n("866442"), T = n("692547"), f = n("84735"), S = n("263704"), h = n("981631"), A = n("780150"); function m(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(a = i || (i = {})).DEFAULT = "default", a.INVERTED = "inverted", a.GHOST = "ghost", a.ROW = "row", (o = r || (r = {})).TOP = "top", o.CENTER = "center"; let N = { BOX: A.box, ROUND: A.round, SMALL_BOX: A.smallBox }, p = { top: A.alignTop, center: A.alignCenter }; class O extends(s = u.PureComponent) { getInputMode() { return this.props.disabled ? "disabled" : this.props.readOnly ? "readonly" : "default" } getStyle() { var e; let { value: t, type: n, color: i } = this.props, r = null !== (e = this.props.style) && void 0 !== e ? e : {}; if (!1 === t) return r; if (r = { ...r }, i === T.default.unsafe_rawColors.BRAND_500.css) switch (n) { case "default": r.borderColor = "var(--control-brand-foreground)"; break; case "ghost": r.borderColor = "var(--brand-experiment-15a)", r.backgroundColor = "var(--brand-experiment-15a)"; break; case "row": case "inverted": r.borderColor = "var(--brand-400)", r.backgroundColor = "var(--brand-500)" } else switch (n) { case "default": r.borderColor = i; break; case "ghost": if (i.startsWith("var(--")) { let e = "".concat(i.slice(0, -1), "-hsl)"); r.borderColor = "rgba(".concat(e, ", 0.15)"), r.backgroundColor = "rgba(".concat(e, ", 0.15)") } else E()((0, I.isValidHex)(i), "Checkbox: ".concat(i, " is not a valid hex color")), r.borderColor = (0, I.hex2rgb)(i, .15), r.backgroundColor = (0, I.hex2rgb)(i, .15); break; case "row": case "inverted": r.backgroundColor = i, r.borderColor = i } return r } getColor() { let { value: e, type: t, color: n } = this.props; return e ? "inverted" === t || "row" === t ? T.default.unsafe_rawColors.WHITE_500.css : n : T.default.unsafe_rawColors.TRANSPARENT.css } render() { let { disabled: e, readOnly: t, value: n, shape: i, align: r = "center", className: s, innerClassName: a, children: o, size: u, reverse: d, checkboxColor: c, displayOnly: E, type: I, onClick: T } = this.props, m = null != o ? (0, l.jsx)("div", { className: _()(A.label, e ? A.labelDisabled : A.labelClickable, d ? A.labelReversed : A.labelForward), style: { lineHeight: "".concat(u, "px") }, children: o }) : null, N = this.props.disabled ? A.inputDisabled : this.props.readOnly ? A.inputReadonly : A.inputDefault; return (0, l.jsxs)(E ? "span" : "label", { className: _()(e ? A.checkboxWrapperDisabled : A.checkboxWrapper, p[r], s, { [A.row]: "row" === I, [A.checked]: n }), children: [d ? m : null, !E && (0, l.jsx)(f.FocusRing, { children: (0, l.jsx)("input", { className: _()(a, N), type: "checkbox", onClick: T, onChange: e || t ? h.NOOP : this.handleChange, checked: n, style: { width: u, height: u } }) }), (0, l.jsx)("div", { className: _()(A.checkbox, i, { [A.checked]: n }), style: { width: u, height: u, borderColor: c, ...this.getStyle() }, children: (0, l.jsx)(S.default, { width: 18, height: 18, color: this.getColor(), "aria-hidden": !0 }) }), d ? null : m] }) } constructor(...e) { super(...e), m(this, "handleChange", e => { let { onChange: t } = this.props; null == t || t(e, e.currentTarget.checked) }) } } m(O, "Types", i), m(O, "Shapes", N), m(O, "Aligns", r), m(O, "defaultProps", { size: 24, disabled: !1, readOnly: !1, displayOnly: !1, value: !1, type: "default", color: T.default.unsafe_rawColors.BRAND_500.css, shape: N.BOX, align: "center", onChange: h.NOOP, reverse: !1 }) }, 1561: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Clickable: function() { return c } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("532712"), u = n("84735"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class c extends(i = s.Component) { renderNonInteractive() { let { tag: e, focusProps: t, innerRef: n, onClick: i, role: r, tabIndex: a, ...o } = this.props; return s.createElement(e, { ref: this.setRef, ...o }) } renderInner() { let { tag: e, onClick: t, className: n, children: i, focusProps: r, innerRef: a, ...l } = this.props; return null == t ? s.createElement(e, { ref: this.setRef, className: o()(n), ...l }, i) : s.createElement(e, { onClick: t, ref: this.setRef, onKeyPress: this.handleKeyPress, className: o()(n), ...l }, i) } render() { return this.context ? this.renderNonInteractive() : (0, r.jsx)(u.FocusRing, { ...this.props.focusProps, children: this.renderInner() }) } constructor(...e) { super(...e), _(this, "ref", void 0), _(this, "handleKeyPress", e => { let { onClick: t, href: n, onKeyPress: i, ignoreKeyPress: r } = this.props; !e.repeat && (!r && null != t && null != this.ref && (e.charCode === d.KeyboardKeys.SPACE || e.charCode === d.KeyboardKeys.ENTER) && (null == n && e.preventDefault(), null == this.ref.click ? t(e) : this.ref.click()), null != i && i(e)) }), _(this, "setRef", e => { this.ref = e; let { innerRef: t } = this.props; null != t && ("function" == typeof t ? t(e) : t.hasOwnProperty("current") && (t.current = e)) }) } } _(c, "contextType", l.BlockInteractionsContext), _(c, "defaultProps", { tag: "div", role: "button", tabIndex: 0 }) }, 605578: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClickableContainer: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("1561"), a = n("939022"); function o(e) { let { tag: t = "div", children: n, className: o, focusProps: l, onClick: u, onDoubleClick: d, onContextMenu: _, onKeyDown: c, onFocus: E, onBlur: I, onMouseOver: T, onMouseDown: f, onMouseLeave: S, buttonProps: h, "aria-label": A } = e, m = r.useRef(null); return (0, i.jsxs)(t, { ref: m, className: o, onClick: u, onMouseOver: T, onMouseLeave: S, onDoubleClick: d, onContextMenu: _, children: [(0, i.jsx)(s.Clickable, { ...h, focusProps: { ringTarget: m, ...l }, className: a.focusTarget, "aria-label": A, onClick: e => { e.stopPropagation(), null == u || u(e) }, onKeyDown: c, onFocus: E, onBlur: I, onMouseDown: f }), n] }) } }, 57260: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Collapsible: function() { return c } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("442837"), u = n("393238"), d = n("607070"), _ = n("392767"); function c(e) { let { children: t, className: n, collapsibleContent: s, isExpanded: c } = e, [E, I] = r.useState(!1), T = (0, l.useStateFromStores)([d.default], () => d.default.useReducedMotion), [f, S] = r.useState(!0), [h, A] = r.useState(!1), m = null != c ? c : E, { ref: N, height: p = 0 } = (0, u.default)(), { ref: O, height: C = 0 } = (0, u.default)(), R = (0, o.useSpring)({ height: m ? p + C : C, immediate: f || T, config: o.config.stiff, onRest: () => A(!0) }), g = r.useCallback(() => { I(!E) }, [E, I]); return r.useLayoutEffect(() => { let e = setTimeout(() => { S(!1) }, 100); return () => clearTimeout(e) }, []), (0, i.jsx)("div", { className: a()(_.collapseable, { [_.toggled]: m }, n), children: (0, i.jsxs)(o.animated.div, { className: a()(_.contentExpandContainer, { [_.showOverflow]: m && h }), style: R, children: [(0, i.jsx)("div", { ref: O, className: a()(_.header, { [_.toggled]: m }), children: t({ onClick: g }) }), (0, i.jsx)("div", { ref: N, children: s })] }) }) } }, 950104: function(e, t, n) { "use strict"; n.r(t), n.d(t, { WCAGContrastRatios: function() { return s }, darkenColor: function() { return l }, getContrastingColor: function() { return o } }), n("47120"), n("411104"); var i = n("688619"), r = n.n(i); let s = { NonText: 3, Text: 4.5, HighContrastText: 7 }; function a(e) { let [t, n, i, r] = e.rgba(); return "rgba(".concat(t, ", ").concat(n, ", ").concat(i, ", ").concat(r, ")") } function o(e) { var t, n, i; let o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, l = null !== (t = o.contrastRatio) && void 0 !== t ? t : s.NonText, u = null !== (n = o.tolerance) && void 0 !== n ? n : 3, d = r()(null !== (i = o.base) && void 0 !== i ? i : e), _ = r()(e), c = d.luminance(), E = _, I = l + u, T = r().contrast(d, _), f = 100; for (; f-- > 0;) { let e = T < l, t = T > I; if (!e && !t) break; let n = E.luminance() > c; E = t && n || e && !n ? E.darken() : E.brighten(), T = r().contrast(d, E) } return a(E) } function l(e, t) { return a(r()(e).darken(t)) } }, 838331: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Combobox: function() { return O }, ComboboxItem: function() { return R }, useMultiSelect: function() { return A }, useSingleSelect: function() { return m } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("924826"), l = n("178940"), u = n("1561"), d = n("260034"), _ = n("742746"), c = n("993365"), E = n("6048"), I = n("441674"), T = n("689938"), f = n("665553"); let S = "data-listbox-item-id", h = Object.freeze({ STANDARD: f.selected, BRAND: f.selectedBrand }); function A(e) { let [t, n] = r.useState(() => new Set(e)); return [t, r.useCallback(e => { n(t => { let n = new Set(t); return n.has(e) ? n.delete(e) : n.add(e), n }) }, [])] } function m(e) { let [t, n] = r.useState(() => new Set(null != e ? [e] : void 0)); return [t, r.useCallback(e => { n(new Set([e])) }, [])] } function N(e) { return String(e) } let p = r.createContext({ activeDescendant: null, selected: new Set, setSelected: () => null, itemToString: N }); function O(e) { let { placeholder: t, children: n, value: s, onChange: l, className: u, listClassName: I, "aria-label": h, multiSelect: A = !1, autoFocus: m = !1, maxVisibleItems: O = 5, itemToString: C = N, showScrollbar: R = !1 } = e, [g, L] = r.useState(""), [v] = r.useState(!0), [D, M] = r.useState(null), y = r.useId(), P = r.useRef(null); r.useLayoutEffect(() => { let e = document.querySelector("[".concat(S, '="').concat(D, '"]')), t = P.current; null != t && null != e && t.scrollIntoViewNode({ node: e, padding: 12 }) }, [D]); let U = n(g), b = 0 === U.length, G = r.useId(), w = r.useCallback(() => new Promise(e => { let t = P.current; if (null == t) return e(); t.scrollToTop({ callback: () => requestAnimationFrame(() => e()) }) }), []), k = r.useCallback(() => new Promise(e => { let t = P.current; if (null == t) return e(); t.scrollToTop({ callback: () => requestAnimationFrame(() => e()) }) }), []), B = r.useCallback((e, t) => { M(t); let n = document.querySelector(e), i = P.current; null != i && null != n && i.scrollIntoViewNode({ node: n }) }, []), V = (0, o.default)({ id: G, isEnabled: !0, useVirtualFocus: !0, scrollToStart: w, scrollToEnd: k, setFocus: B }), x = R ? _.ListThin : _.ListNone; return (0, i.jsx)(o.ListNavigatorProvider, { navigator: V, children: (0, i.jsx)(o.ListNavigatorContainer, { children: e => { let { ref: n, onKeyDown: r, ...o } = e; return (0, i.jsxs)("div", { ref: n, role: "combobox", "aria-label": h, "aria-expanded": v, "aria-controls": v ? y : void 0, "aria-owns": y, "aria-haspopup": "listbox", className: a()(f.combobox, u), children: [(0, i.jsx)(E.default, { autoFocus: m, size: E.default.Sizes.MEDIUM, placeholder: t, query: g, onChange: L, onKeyDown: r, onBlur: () => M(null), onClear: () => L(""), className: a()({ [f.searchWithScrollbar]: R }), inputProps: { "aria-multiline": !1, "aria-activedescendant": null != D ? D : void 0 } }), (0, i.jsx)("div", { children: v && (b ? (0, i.jsxs)("div", { className: f.empty, children: [(0, i.jsx)(d.Heading, { variant: "heading-md/semibold", children: T.default.Messages.AUTOCOMPLETE_NO_RESULTS_HEADER }), (0, i.jsx)(c.Text, { color: "text-muted", variant: "text-md/normal", children: T.default.Messages.AUTOCOMPLETE_NO_RESULTS_BODY })] }) : (0, i.jsx)(p.Provider, { value: { activeDescendant: D, selected: s, setSelected: l, itemToString: C }, children: (0, i.jsx)(x, { ...o, style: { maxHeight: 46 * O }, "aria-multiselectable": A, id: y, ref: P, className: a()(f.list, I, { [f.scroller]: R }), sections: [U.length], sectionHeight: 0, rowHeight: 40, renderRow: e => { let { row: t } = e; return U[t] }, renderSection: () => null }) })) })] }) } }) }) } let C = r.createContext(null); function R(e) { var t; let { value: n, children: s, disabled: l = !1, selectedColor: d = h.STANDARD, ..._ } = e, { activeDescendant: c, selected: E, setSelected: I, itemToString: T } = r.useContext(p), A = T(n), m = c === A, N = null !== (t = null == _ ? void 0 : _.selected) && void 0 !== t ? t : E.has(n), O = (0, o.useListItem)(A); return (0, i.jsx)(u.Clickable, { tag: "li", id: A, onClick: () => l ? null : I(n), [S]: n, className: a()(f.item, { [f.focused]: m, [d]: N, [f.disabled]: l }), ...O, role: "option", "aria-selected": N, "aria-disabled": l, children: (0, i.jsx)(C.Provider, { value: n, children: s }) }) } R.Colors = h, R.Label = function(e) { let { children: t } = e; return (0, i.jsx)("span", { className: f.itemLabel, children: t }) }, R.Icon = function(e) { let { children: t } = e; return (0, i.jsx)("span", { className: f.itemCheckbox, children: t }) }, R.Checkbox = function(e) { let { checked: t } = e, { selected: n } = r.useContext(p), s = r.useContext(C); return (0, i.jsx)("span", { className: f.itemCheckbox, children: (0, i.jsx)(l.Checkbox, { displayOnly: !0, value: null != t ? t : null != s && n.has(s), type: l.Checkbox.Types.INVERTED, size: 20 }) }) }, R.Checkmark = function() { let { selected: e } = r.useContext(p), t = r.useContext(C); return e.has(t) ? (0, i.jsx)("span", { className: f.itemCheckbox, children: (0, i.jsx)(I.default, { width: 20, height: 20 }) }) : null } }, 6745: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ComboboxPopout: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("507274"), l = n("838331"), u = n("837507"); function d(e) { let { children: t, placeholder: n, value: s, onChange: d, onClose: _, showScrollbar: c, className: E, multiSelect: I, ...T } = e, f = r.useCallback(e => { d(e), !I && (null == _ || _()) }, [d, _, I]); return (0, i.jsx)(o.Dialog, { className: a()(u.container, E, { [u.scroller]: c }), children: (0, i.jsx)(l.Combobox, { ...T, showScrollbar: c, value: s, multiSelect: I, onChange: f, placeholder: n, children: t, listClassName: u.list }) }) } }, 67979: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DateInput: function() { return E } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("1561"), o = n("507274"), l = n("235874"), u = n("575535"), d = n("305878"), _ = n("745206"), c = n("12349"); function E(e) { let { value: t, onSelect: n, dateFormat: r = "MMM D, YYYY", minDate: E, maxDate: I, disabled: T = !1 } = e; return (0, i.jsx)(l.Popout, { renderPopout: function(e) { let { closePopout: r } = e; return (0, i.jsx)(o.Dialog, { children: (0, i.jsx)(u.default, { minDate: E, maxDate: I, value: t, onSelect: e => { n(e), r() }, calendarClassName: _.calendarContainer, onClickOutside: r, autoFocus: !0 }) }) }, position: "bottom", children: e => { let { onClick: n, ...o } = e; return (0, i.jsx)(a.Clickable, { ...o, className: s()(c.inputDefault, _.container, { [c.disabled]: T, [_.disabled]: T }), onClick: T ? void 0 : n, "aria-disabled": T, children: (0, i.jsxs)("div", { className: _.content, children: [(0, i.jsx)("div", { className: _.text, children: null == t ? void 0 : t.format(r) }), (0, i.jsx)(d.default, { className: _.icon })] }) }) } }) } }, 507274: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Dialog: function() { return d }, DialogContext: function() { return u } }); var i = n("735250"), r = n("470079"), s = n("597442"), a = n("84735"), o = n("337033"), l = n("812663"); let u = r.createContext(void 0), d = r.forwardRef(function(e, t) { let { children: n, impressionType: d, impression: _, disableTrack: c, returnRef: E, ...I } = e, T = r.useRef(null); return (0, s.useFocusLock)(T, { returnRef: E }), r.useContext(l.default)({ type: d, name: null == _ ? void 0 : _.impressionName, properties: null == _ ? void 0 : _.impressionProperties }, { disableTrack: c }), r.useImperativeHandle(t, () => T.current), (0, i.jsx)(u.Provider, { value: !0, children: (0, i.jsx)("div", { ...I, ref: T, role: "dialog", tabIndex: -1, "aria-modal": !0, children: (0, i.jsx)(o.HeadingLevel, { forceLevel: 1, children: (0, i.jsx)(a.FocusRingScope, { containerRef: T, children: n }) }) }) }) }) }, 438784: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnimatedDots: function() { return E }, Dots: function() { return I } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("122274"); function u() { return document.hasFocus() } let d = { config: { friction: 50, tension: 900, mass: 1 }, unique: !0, initial: { dotPosition: 1 }, from: { dotPosition: 0 }, enter: { dotPosition: 1 }, leave: { dotPosition: 0 } }, _ = { config: { duration: 2400 }, from: { dotCycle: 2.8 }, reset: !0 }; function c(e) { let t = e % 2; return t > 1 ? 1 - (t - 1) : t } let E = r.memo(function(e) { let { dotRadius: t, dotPosition: n, fill: s = "currentColor", spacing: a = 2.5 } = e, l = r.useRef(u()), d = r.useRef(!0); r.useEffect(() => () => void(d.current = !1), []); let [E] = (0, o.useSpring)(() => ({ ..._, to: async e => { let t = 2.8; for (; d.current;) { ; l.current = u(), l.current ? (t += 4, await e({ dotCycle: t, immediate: !1 })) : 2.8 !== t ? (t = 2.8, await e({ dotCycle: t, immediate: !0 })) : await new Promise(e => setTimeout(e, 1e3)) } } })), I = (6 * t + t / 4 * 2) / 2; return (0, i.jsx)(i.Fragment, { children: [0, 1, 2].map(e => { let r = .25 * e, u = t + t * a * e; return (0, i.jsx)(o.animated.circle, { cx: n ? n.to([0, 1], [I, u]) : u, cy: t, r: E.dotCycle.to(e => c(e - r)).to([0, .4, .8, 1], [.8 * t, .8 * t, t, t]).to(e => l.current ? e : t), fill: s, style: { opacity: E.dotCycle.to(e => c(e - r)).to([0, .4, .8, 1], [.3, .3, 1, 1]).to(e => l.current ? e : 1) } }, e) }) }) }), I = r.memo(r.forwardRef(function(e, t) { let { dotRadius: n, x: r, y: s, hide: _ = !1, themed: c = !1, className: I } = e; return (0, o.useTransition)(_, { ...d, key: e => e ? "true" : "false", immediate: !u() })((e, u, d) => { let { dotPosition: _ } = e, { key: T } = d; return u ? null : (0, i.jsx)("svg", { ref: t, x: r, y: s, width: 6 * n + n / 2 * 2, height: 2 * n, className: a()(I, l.dots, c ? l.themed : null), children: (0, i.jsx)(o.animated.g, { style: { opacity: _.to(e => Math.min(1, Math.max(e, 0))) }, children: (0, i.jsx)(E, { dotRadius: n, dotPosition: _ }) }) }, T) }) })) }, 799151: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DnDKeyboardHelpBar: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("920906"), a = n("442837"), o = n("710593"), l = n("993365"), u = n("607070"), d = n("79320"), _ = n("689938"), c = n("689085"); function E() { let e = [{ keybinds: ["Spacebar", "Enter"], name: _.default.Messages.DND_OPERATION_LABEL_DROP }, { keybinds: ["up", "down"], name: _.default.Messages.DND_OPERATION_LABEL_MOVE }, { keybinds: ["ESC"], name: _.default.Messages.DND_OPERATION_LABEL_CANCEL }], t = (0, a.useStateFromStores)([u.default], () => u.default.useReducedMotion), n = (0, d.useDndMode)(); return (0, s.useTransition)(n, { enter: { from: { opacity: 0, y: t ? 0 : 80 }, to: { opacity: 1, y: 0 } }, leave: { opacity: 0, y: t ? 0 : 80 }, config: s.config.stiff })((t, n) => n ? (0, i.jsx)("div", { className: c.positioner, children: (0, i.jsx)(s.animated.div, { className: c.container, style: t, children: e.map((t, n) => { let { keybinds: s, name: a } = t; return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)(l.Text, { variant: "text-md/semibold", className: c.bindName, children: a }), s.map(e => (0, i.jsx)(o.KeyCombo, { shortcut: e, className: c.shortcut }, e)), n < e.length - 1 ? (0, i.jsx)("span", { className: c.separator }) : null] }, a) }) }) }) : null) } }, 79320: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isInDndMode: function() { return a }, toggleDndMode: function() { return r }, useDndMode: function() { return s }, useDndStore: function() { return i } }); let i = (0, n("652874").default)(e => ({ inDndMode: !1 })); function r(e) { i.setState({ inDndMode: e }) } function s() { return i(e => e.inDndMode) } function a() { return i.getState().inDndMode } }, 206557: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DnDProvider: function() { return c } }); var i = n("735250"); n("470079"); var r = n("979714"), s = n("800870"), a = n("780384"), o = n("79320"), l = n("600795"); let u = (0, s.createTransition)("keydown", e => !!(0, l.isDragTrigger)(e) && (e.preventDefault(), !0)), d = (0, s.createTransition)("mousedown", e => -1 === e.type.indexOf("touch") && -1 !== e.type.indexOf("mouse") && ((0, o.toggleDndMode)(!1), !0)), _ = { backends: [{ id: "html5", backend: r.HTML5Backend, transition: d }, { id: "keyboard", backend: l.default, context: { window, document }, options: { onDndModeChanged: o.toggleDndMode, announcer: a.AccessibilityAnnouncer }, preview: !0, transition: u }] }; function c(e) { let { children: t } = e; return (0, i.jsx)(s.DndProvider, { options: _, children: t }) } }, 547545: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("689938"); class r { announce(e, t, n) { this.announcer.announce(e, t, n) } announceDrag(e, t) { if (null == e) return; let n = this.getName(e, t); this.announce(i.default.Messages.DND_ITEM_PICKED_UP.format({ itemName: n })) } announceHover(e, t) { null != e && this.announce(this.getName(e, t)) } announceDrop() { this.announce(i.default.Messages.DND_ITEM_DROPPED) } announceCancel() { this.announce(i.default.Messages.DND_DRAG_CANCELED) } clear() { this.announcer.clearAnnouncements() } getName(e, t) { var n, i; return null !== (i = null !== (n = e.getAttribute("data-dnd-name")) && void 0 !== n ? n : e.getAttribute("aria-label")) && void 0 !== i ? i : t } constructor(e) { var t, i, r; if (t = this, r = void 0, (i = "announcer") in t ? Object.defineProperty(t, i, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : t[i] = r, null != e) this.announcer = e; else { let e = n("408160"); this.announcer = { announce: e.announce, clearAnnouncements: e.clearAnnouncer } } } } }, 444591: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return r } }); class r { createDragPreview(e) { if (null == this.container || null == this.svg || null == this.foreignObject) return; let { width: t, height: n } = e.getBoundingClientRect(); this.svg.setAttribute("viewBox", "0 0 ".concat(t, " ").concat(n)), this.svg.setAttribute("width", "".concat(t)), this.svg.setAttribute("height", "".concat(n)), this.foreignObject.setAttribute("x", "0"), this.foreignObject.setAttribute("y", "0"), this.foreignObject.setAttribute("width", "".concat(t)), this.foreignObject.setAttribute("height", "".concat(n)); let i = e.cloneNode(!0); this.foreignObject.appendChild(i) } render(e) { let t = this.container; if (null == t) return; let n = e.getSourceClientOffset(); if (null != n) e.isDragging() && (t.style.position = "fixed", t.style.left = "".concat(n.x + 30, "px"), t.style.top = "".concat(n.y + 15, "px")) } clear() { null != this.foreignObject && (this.foreignObject.innerHTML = "") } constructor(e) { i(this, "container", void 0), i(this, "svg", void 0), i(this, "foreignObject", void 0), this.container = null == e ? void 0 : e.createElement("div"); let t = this.svg = null == e ? void 0 : e.createElement("svg"); null != t && (t.style.contain = "paint"), this.foreignObject = null == e ? void 0 : e.createElement("foreignObject"), null != this.container && null != this.svg && null != this.foreignObject && (this.container.className = "drag-previewer", this.container.style.cssText = "z-index: 1000; filter: drop-shadow(0 0 0 var(--background-floating)) drop-shadow(var(--elevation-high))", this.svg.appendChild(this.foreignObject), this.container.appendChild(this.svg), null == e || e.body.appendChild(this.container)) } } }, 53566: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DropTargetNavigator: function() { return o } }), n("47120"), n("724458"), n("653041"); var i, r, s = n("372817"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(r = i || (i = {})).UP = "ArrowUp", r.DOWN = "ArrowDown", r.DROP = "Shift", r.CANCEL = "Escape"; class o { disconnect() { window.removeEventListener("keydown", this.handleDraggedElementKeyDown, { capture: !0 }) } hoverNode(e) { var t; let n = null === (t = Array.from(this.targetNodes.entries()).find(t => { let [n, i] = t; return e === i })) || void 0 === t ? void 0 : t[0]; null != n && (this.actions.hover([n], { clientOffset: function(e) { if (null == e) return { x: 0, y: 0 }; let t = e.nodeType === Node.ELEMENT_NODE ? e : e.parentElement; if (null == t) return { x: 0, y: 0 }; let { top: n, left: i } = t.getBoundingClientRect(); return { x: i, y: n } }(e) }), this.currentHoveredNode = e, this.previewer.render(this.monitor), this.announcer.announceHover(e, n), null == e || e.focus()) } getNextDropTarget() { var e; return this.focusManager.getNextFocusableElement({ wrap: !1, from: null !== (e = this.currentHoveredNode) && void 0 !== e ? e : void 0 }) } getPreviousDropTarget() { var e; return this.focusManager.getPreviousFocusableElement({ wrap: !1, from: null !== (e = this.currentHoveredNode) && void 0 !== e ? e : void 0 }) } getViableTargets(e) { return this.getAllowedTargets(e).sort((e, t) => { if (e === t) return 0; let n = e.compareDocumentPosition(t); return (n & (Node.DOCUMENT_POSITION_FOLLOWING | n & Node.DOCUMENT_POSITION_CONTAINED_BY)) != 0 ? -1 : (n & (Node.DOCUMENT_POSITION_PRECEDING | n & Node.DOCUMENT_POSITION_CONTAINS)) != 0 ? 1 : 0 }) } getAllowedTargets(e) { return null == this.monitor.getItemType() ? Array.from(e.values()) : Array.from(e).reduce((e, t) => { let [n, i] = t; return this.manager.getMonitor().canDropOnTarget(n) && e.push(i), e }, []) } constructor(e, t, n, i, r) { a(this, "targetNodes", void 0), a(this, "manager", void 0), a(this, "previewer", void 0), a(this, "announcer", void 0), a(this, "currentHoveredNode", void 0), a(this, "focusManager", void 0), a(this, "actions", void 0), a(this, "monitor", void 0), a(this, "handleDraggedElementKeyDown", void 0), this.targetNodes = t, this.manager = n, this.previewer = i, this.announcer = r, this.handleDraggedElementKeyDown = async e => { switch (e.key) { case "ArrowUp": e.preventDefault(), e.stopPropagation(), this.hoverNode(await this.getPreviousDropTarget()); return; case "ArrowDown": e.preventDefault(), e.stopPropagation(), this.hoverNode(await this.getNextDropTarget()) } }, this.currentHoveredNode = e, this.focusManager = (0, s.createFocusManager)({ getFocusableElements: () => this.getViableTargets(t), getActiveElement: () => e.ownerDocument.activeElement }), this.actions = n.getActions(), this.monitor = n.getMonitor(), window.addEventListener("keydown", this.handleDraggedElementKeyDown, { capture: !0 }) } } }, 600795: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isDragTrigger: function() { return d } }), n("411104"), n("47120"); var i = n("547545"), r = n("444591"), s = n("53566"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = { DROP: [" ", "Enter"], CANCEL_DRAG: ["Escape"] }; function l(e) { e.preventDefault(), e.stopImmediatePropagation() } function u(e, t) { return t.includes(e.key) } function d(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return !!n && !1 === e.isTrusted || (null === (t = e.key) || void 0 === t ? void 0 : t.toLowerCase()) === "d" && (e.metaKey || e.ctrlKey) && !e.altKey } class _ { setup() { var e; if (_.isSetUp) throw Error("Cannot have two Keyboard backends at the same time."); _.isSetUp = !0, this._handlingFirstEvent = !0, null === (e = this.context.window) || void 0 === e || e.addEventListener("keydown", this.handleGlobalKeyDown, { capture: !0 }) } teardown() { var e; _.isSetUp = !1, null === (e = this.context.window) || void 0 === e || e.removeEventListener("keydown", this.handleGlobalKeyDown, { capture: !0 }), this.endDrag() } setDndMode(e) { var t; null === (t = this.options) || void 0 === t || t.onDndModeChanged(e) } profile() { return { sourcePreviewNodes: this.sourcePreviewNodes.size, sourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size, sourceNodes: this.sourceNodes.size } } connectDragSource(e, t) { let n = this.handleDragStart.bind(this, e); return this.sourceNodes.set(e, t), t.addEventListener("keydown", n), () => { this.sourceNodes.delete(e), t.removeEventListener("keydown", n) } } connectDragPreview(e, t, n) { return this.sourcePreviewNodeOptions.set(e, n), this.sourcePreviewNodes.set(e, t), () => { this.sourcePreviewNodes.delete(e), this.sourcePreviewNodeOptions.delete(e) } } connectDropTarget(e, t) { return this.targetNodes.set(e, t), t.addEventListener("keydown", this.handleDrop), t.tabIndex = Math.max(-1, t.tabIndex), () => { this.targetNodes.delete(e), t.removeEventListener("keydown", this.handleDrop) } } endDrag(e) { var t; null != e && l(e), null === (t = this._navigator) || void 0 === t || t.disconnect(), this._previewer.clear(), this.monitor.isDragging() && this.actions.endDrag(), this.setDndMode(!1) } constructor(e, t, n) { a(this, "manager", void 0), a(this, "actions", void 0), a(this, "monitor", void 0), a(this, "context", void 0), a(this, "options", void 0), a(this, "sourceNodes", void 0), a(this, "sourcePreviewNodes", void 0), a(this, "sourcePreviewNodeOptions", void 0), a(this, "targetNodes", void 0), a(this, "_navigator", void 0), a(this, "_previewer", void 0), a(this, "_announcer", void 0), a(this, "_handlingFirstEvent", !1), a(this, "handleGlobalKeyDown", e => { this.monitor.isDragging() && u(e, o.CANCEL_DRAG) && (this.endDrag(e), this._announcer.announceCancel()) }), a(this, "getSourceClientOffset", e => (function(e) { if (null == e) return { x: 0, y: 0 }; let t = e.nodeType === Node.ELEMENT_NODE ? e : e.parentElement; if (null == t) return { x: 0, y: 0 }; let { top: n, left: i } = t.getBoundingClientRect(); return { x: i, y: n } })(this.sourceNodes.get(e))), a(this, "handleDragStart", (e, t) => { var n; if (!d(t, this._handlingFirstEvent)) return; if (this._handlingFirstEvent = !1, !this.monitor.canDragSource(e)) return; if (this.monitor.isDragging()) { this.actions.publishDragSource(); return } l(t); let i = this.sourceNodes.get(e); null != i && (this._navigator = new s.DropTargetNavigator(i, this.targetNodes, this.manager, this._previewer, this._announcer), this._previewer.createDragPreview(null !== (n = this.sourcePreviewNodes.get(e)) && void 0 !== n ? n : i), this.actions.beginDrag([e], { clientOffset: this.getSourceClientOffset(e), getSourceClientOffset: this.getSourceClientOffset, publishSource: !1 }), this._previewer.render(this.monitor), this.setDndMode(!0), this._announcer.announceDrag(i, e)) }), a(this, "handleDrop", e => { u(e, o.DROP) && (this.actions.drop(), this.endDrag(e), this._announcer.announceDrop()) }), this.manager = e, this.actions = e.getActions(), this.monitor = e.getMonitor(), this.context = t, this.options = n, this.sourceNodes = new Map, this.sourcePreviewNodes = new Map, this.sourcePreviewNodeOptions = new Map, this.targetNodes = new Map, this._previewer = new r.default(t.document), this._announcer = new i.default(null == n ? void 0 : n.announcer) } } a(_, "isSetUp", void 0); t.default = (e, t, n) => new _(e, t, n) }, 411734: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FocusBlock: function() { return o }, useFocusBlock: function() { return a } }), n("47120"); var i = n("735250"), r = n("470079"); let s = 0; function a(e, t) { let [n] = r.useState(() => s++), i = "".concat("data-focus-blocked", "-").concat(n); r.useLayoutEffect(() => { if (t) { let t = e.current; if (null != t) { var n; let e = (n = t, document.createTreeWalker(n, NodeFilter.SHOW_ELEMENT, { acceptNode: e => e.tabIndex >= 0 && !e.disabled ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP })), r = e.currentNode; for (; null !== r;) { let t = r, n = t.tabIndex; t.tabIndex = -1, t.setAttribute(i, String(n)), r = e.nextNode() } return () => { t.querySelectorAll("[".concat(i, "]")).forEach(e => { let t = e.getAttribute(i); if (null != t) { let n = parseInt(t, 10); e.tabIndex = n } }) } } } }, [t]) } function o(e) { let { children: t, className: n, enabled: s = !0 } = e, o = r.useRef(null); return a(o, s), (0, i.jsx)("div", { ref: o, className: n, children: t }) } }, 287235: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FocusJumpSection: function() { return _ }, useFocusJumpSection: function() { return d }, useFocusJumpSectionManager: function() { return E } }), n("735250"); var i = n("470079"), r = n("372817"), s = n("5967"), a = n("420212"); let o = "data-jump-section", l = "global", u = i.createContext(l); function d() { let e = i.useContext(u); return i.useMemo(() => ({ [o]: e }), [e]) } function _(e) { let t = d(); return e.children(t) } async function c(e) { var t, n, i, u; if (e.key !== a.FOCUS_SECTION_JUMP_KEY) return; let d = (0, s.eventOwnerDocument)(e); if (null == d) return; let _ = null, c = null, E = e.target; for (; null != E;) { if (E.hasAttribute(o)) { _ = E.getAttribute(o), c = E; break } E = E.parentElement } let I = (0, r.createFocusManager)({ getFocusableElements: () => Array.from(d.querySelectorAll("[".concat(o, '="').concat(null != _ ? _ : l, '"]'))), getActiveElement: () => d.activeElement }); if ((null === (t = (0, s.eventOwnerDocument)(e)) || void 0 === t ? void 0 : t.activeElement) == null || null == c) { null === (n = I.getFirstFocusableElement()) || void 0 === n || n.focus(); return } e.getModifierState("Shift") ? null === (i = await I.getPreviousFocusableElement({ wrap: !0, from: c })) || void 0 === i || i.focus() : null === (u = await I.getNextFocusableElement({ wrap: !0, from: c })) || void 0 === u || u.focus() } function E(e) { i.useEffect(() => { if (e) return window.addEventListener("keydown", c), () => { window.removeEventListener("keydown", c) } }, [e]) } }, 597442: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FocusLock: function() { return d }, useFocusLock: function() { return u } }); var i, r = n("470079"), s = n("802498"), a = n("442837"), o = n("607070"); let l = null !== (i = document.getElementById("app-mount")) && void 0 !== i ? i : document; function u(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = (0, a.useStateFromStores)([o.default], () => o.default.keyboardModeEnabled), u = r.useRef(!1); return u.current = !i, (0, s.default)(e, { ...n, disableReturnRef: u, attachTo: null !== (t = n.attachTo) && void 0 !== t ? t : l, returnRef: n.returnRef }) } function d(e) { return u(e.containerRef), e.children } }, 84735: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FocusRing: function() { return i.FocusRing }, FocusRingScope: function() { return i.FocusRingScope } }); var i = n("789978") }, 347016: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FocusRingManager: function() { return s } }); var i = n("789978"), r = n("607070"); n("790381"); let s = { init() { r.default.addChangeListener(() => { r.default.keyboardModeEnabled ? (i.FocusRingManager.setRingsEnabled(!0), i.FocusRingManager.enableAnimationTracking()) : (i.FocusRingManager.setRingsEnabled(!1), i.FocusRingManager.disableAnimationTracking()) }) } } }, 15127: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormContext: function() { return s }, FormContextProvider: function() { return o }, useFormContext: function() { return a } }); var i = n("735250"), r = n("470079"); let s = r.createContext({ titleId: void 0, errorId: void 0, error: void 0 }); function a() { return r.useContext(s) } function o(e) { let { children: t, ...n } = e; return (0, i.jsx)(s.Provider, { value: n, children: t }) } }, 770102: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormDivider: function() { return o } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("83623"); function o(e) { let { className: t, style: n } = e; return (0, i.jsx)("div", { className: s()(a.divider, t), style: n }) } }, 434333: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormErrorBlock: function() { return c }, FormErrorBlockColors: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("1561"), l = n("465670"), u = n("759231"), d = n("835023"); let _ = { RED: d.backgroundRed, BACKGROUND_TERTIARY: d.backgroundTertiary, BACKGROUND_ACCENT: d.backgroundAccent }, c = r.forwardRef(function(e, t) { let { role: n, children: r, className: s, onDismiss: c, backgroundColor: E = _.RED, icon: I = u.default, iconClassName: T } = e; return (0, i.jsxs)("div", { className: a()(d.error, s, E), ref: t, children: [(0, i.jsx)(I, { className: a()(d.icon, T) }), (0, i.jsx)("div", { role: n, className: d.text, children: r }), null != c ? (0, i.jsx)(o.Clickable, { onClick: c, className: d.errorClose, children: (0, i.jsx)(l.default, { className: d.errorCloseIcon }) }) : null] }) }) }, 540863: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormItem: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("15127"), a = n("512983"); let o = r.forwardRef(function(e, t) { var n, o; let { children: l, disabled: u = !1, className: d, titleClassName: _, tag: c = "h5", required: E = !1, style: I, title: T, error: f, ...S } = e, h = r.useId(), A = r.useId(), m = null !== (n = S.titleId) && void 0 !== n ? n : h, N = null != f ? null !== (o = S.errorId) && void 0 !== o ? o : A : void 0; return (0, i.jsxs)("div", { ref: t, className: null != d ? d : void 0, style: null != I ? I : void 0, children: [null != T || null != f ? (0, i.jsx)(a.FormTitle, { tag: c, disabled: u, required: E, error: f, className: _, id: m, errorId: N, ...S, children: T }) : null, (0, i.jsx)(s.FormContextProvider, { titleId: m, errorId: N, error: null != f ? f : void 0, children: l })] }) }) }, 722187: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormLabel: function() { return d } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("766646"), o = n("154921"), l = n("689938"), u = n("636176"); function d(e) { let { children: t, className: n, disabled: r, required: d = !1, ..._ } = e; return (0, i.jsxs)(o.default, { tag: "label", color: o.default.Colors.HEADER_SECONDARY, className: s()(u.label, n, { [u.defaultMargin]: null == n, [u.disabled]: r }), ..._, children: [t, d && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("span", { className: u.required, "aria-hidden": !0, children: "*" }), (0, i.jsx)(a.HiddenVisually, { children: l.default.Messages.REQUIRED })] })] }) } }, 383838: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormNotice: function() { return E }, FormNoticeImagePositions: function() { return c }, FormNoticeTypes: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("49800"), o = n("285952"), l = n("534542"), u = n("512983"), d = n("723945"); let _ = a.Card.Types, c = { LEFT: "left", RIGHT: "right" }; function E(e) { let t, n, { type: r = a.Card.Types.DANGER, imageData: _, button: E, className: I, iconClassName: T, title: f, body: S, style: h, align: A = o.default.Align.START } = e, m = o.default.Direction.HORIZONTAL; if (null != _) { let { position: e, ...n } = _; t = (0, i.jsx)(o.default.Child, { grow: 0, shrink: 0, children: (0, i.jsx)("img", { alt: "", className: s()(d.icon, T), ...n }) }), e === c.RIGHT && (m = o.default.Direction.HORIZONTAL_REVERSE) } else null != E && (n = E); let N = !0; return r === a.Card.Types.PRIMARY && (N = !1), (0, i.jsx)(a.Card, { className: s()(d.formNotice, I), type: r, style: h, children: (0, i.jsxs)(o.default, { direction: m, align: A, children: [t, (0, i.jsxs)(o.default.Child, { children: [null != f && "" !== f ? (0, i.jsx)(u.FormTitle, { tag: u.FormTitleTags.H5, className: s()(d.formNoticeTitle, { [d.whiteText]: N }), faded: !0, children: f }) : null, (0, i.jsx)(l.FormText, { className: s()(d.formNoticeBody, { [d.whiteText]: N }), children: S }), n] })] }) }) } E.Types = a.Card.Types }, 789164: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormSection: function() { return u } }); var i = n("735250"), r = n("470079"), s = n("337033"), a = n("15127"), o = n("512983"), l = n("740720"); let u = r.forwardRef(function(e, t) { var n; let { children: u, className: d, titleClassName: _, title: c, icon: E, disabled: I, htmlFor: T, tag: f = "h5", ...S } = e, h = r.useId(), A = null !== (n = S.titleId) && void 0 !== n ? n : h; return (0, i.jsx)("div", { ref: t, className: d, children: null != c ? (0, i.jsx)(s.HeadingLevel, { component: (0, i.jsxs)("div", { className: l.sectionTitle, children: [E, null != c ? (0, i.jsx)(o.FormTitle, { tag: f, id: A, htmlFor: T, disabled: I, className: _, children: c }) : null] }), children: (0, i.jsx)("div", { className: l.children, children: (0, i.jsx)(a.FormContextProvider, { titleId: A, children: u }) }) }) : u }) }) }, 471141: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormSwitch: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("84735"), l = n("437337"), u = n("981729"), d = n("770102"), _ = n("534542"), c = n("316049"); function E(e) { let { value: t, disabled: n = !1, hideBorder: s = !1, tooltipNote: E, onChange: I, className: T, style: f, note: S, children: h } = e, A = r.useRef(null), m = r.useRef(null), N = r.useId(), p = (0, i.jsx)(l.Switch, { id: N, checked: t, onChange: I, disabled: n, focusProps: { enabled: !1 }, innerRef: A }); return (0, i.jsxs)("div", { style: f, className: a()(c.container, T, { [c.disabled]: n }), children: [(0, i.jsx)(o.FocusRing, { within: !0, offset: -4, focusTarget: A, ringTarget: m, children: (0, i.jsxs)("div", { className: c.labelRow, ref: m, children: [(0, i.jsx)("label", { htmlFor: N, className: c.title, children: h }), (0, i.jsx)("div", { className: c.control, children: null != E ? (0, i.jsx)(u.TooltipContainer, { text: E, children: p }) : p })] }) }), null != S && (0, i.jsx)("div", { className: c.note, children: (0, i.jsx)(_.FormText, { disabled: n, type: _.FormTextTypes.DESCRIPTION, children: S }) }), !s && (0, i.jsx)(d.FormDivider, { className: c.dividerDefault })] }) } }, 534542: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormText: function() { return d }, FormTextTypes: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("154921"), o = n("102998"); let l = { DEFAULT: "default", INPUT_PLACEHOLDER: "placeholder", DESCRIPTION: "description", LABEL_BOLD: "labelBold", LABEL_SELECTED: "labelSelected", LABEL_DESCRIPTOR: "labelDescriptor", ERROR: "error", SUCCESS: "success" }, u = { DEFAULT: "modeDefault", DISABLED: "modeDisabled", SELECTABLE: "modeSelectable" }; function d(e) { let { type: t = l.DEFAULT, className: n, disabled: r, selectable: d, children: _, style: c, ...E } = e, I = u.DEFAULT; return r ? I = u.DISABLED : d && (I = u.SELECTABLE), (0, i.jsx)(a.default, { className: s()(o[t], n, o[I]), style: c, ...E, children: _ }) } d.Types = l }, 512983: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormTitle: function() { return d }, FormTitleTags: function() { return r } }); var i, r, s = n("735250"); n("470079"); var a = n("120356"), o = n.n(a), l = n("337033"), u = n("227103"); function d(e) { let t, { tag: n = "h5", children: i, className: r, faded: a, disabled: d, required: _ = !1, error: c, errorId: E, ...I } = e; switch (n) { case "legend": case "label": t = n; break; default: t = l.H } return (0, s.jsxs)(t, { className: o()(u[n], "h5" !== n ? u.defaultColor : null, r, { [u["defaultMargin".concat(n)]]: null == r, [u.faded]: a, [u.disabled]: d, [u.error]: null != c }), ...I, children: [i, _ && null == c ? (0, s.jsx)("span", { className: u.required, children: "*" }) : null, null != c ? (0, s.jsxs)("span", { id: E, className: u.errorMessage, children: [null != i ? (0, s.jsx)("span", { className: u.errorSeparator, children: "-" }) : null, c] }) : null] }) }(i = r || (r = {})).H1 = "h1", i.H2 = "h2", i.H3 = "h3", i.H4 = "h4", i.H5 = "h5", i.LABEL = "label", i.LEGEND = "legend" }, 260034: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Heading: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("993365"), l = n("337033"), u = n("686578"); let d = r.forwardRef(function(e, t) { let { variant: n, className: r, ...s } = e, d = (0, l.usePrivateHeadingLevel)(), _ = "h".concat(Math.min(d, 6)); return (0, i.jsx)(o.Text, { ref: t, variant: n, tag: _, className: a()(u.defaultColor, r), ...d > 6 ? { "data-excessive-heading-level": d } : {}, ...s }) }) }, 337033: function(e, t, n) { "use strict"; n.r(t), n.d(t, { H: function() { return a }, HeadingLevel: function() { return s }, usePrivateHeadingLevel: function() { return l } }), n("47120"); var i = n("735250"), r = n("470079"); function s(e) { let { component: t, children: n, forceLevel: s } = e, a = r.useContext(o), [l, u] = r.useState(null != t), d = 1, _ = 1; null != s ? null != t ? (d = s, _ = s + 1) : _ = s : null != t ? (d = a.level, _ = a.level + 1) : _ = a.level + (l ? 1 : 0); let c = r.useCallback(() => (u(!0), d), [d]), E = r.useCallback(() => (u(!0), _), [_]); return (0, i.jsxs)(i.Fragment, { children: [null != t ? (0, i.jsx)(o.Provider, { value: { level: d, getLevelAndMarkUsed: c }, children: t }) : null, (0, i.jsx)(o.Provider, { value: { level: _, getLevelAndMarkUsed: E }, children: n })] }) } function a(e) { let t = l(), n = "h".concat(Math.min(t, 6)); return (0, i.jsx)(n, { ...t > 6 ? { "data-excessive-heading-level": t } : {}, ...e }) } let o = r.createContext({ getLevelAndMarkUsed: () => 2, level: 2 }); function l() { let { getLevelAndMarkUsed: e } = r.useContext(o); return e() } o.displayName = "HeadingLevelContext" }, 766646: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HiddenVisually: function() { return o } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("159242"); function o(e) { let { id: t, tag: n = "span", showOnFocus: r, children: o } = e; return (0, i.jsx)(n, { id: t, className: s()({ [a.hiddenVisually]: !r, [a.showOnFocus]: r }), children: o }) } }, 212605: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ICON_SIZE: function() { return i } }); let i = { xxs: 12, xs: 16, sm: 18, md: 24, lg: 32, custom: void 0 } }, 679136: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-09_redesigned_icons_experiment", label: "Redesigned icons experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Redesigned icons enabled", config: { enabled: !0 } }] }) }, 390507: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getIconSize: function() { return r } }); var i = n("212605"); function r(e) { if ("custom" === e) return null; let t = i.ICON_SIZE[e]; return { width: t, height: t } } }, 960259: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RedesignIconContextProvider: function() { return l }, replaceIcon: function() { return d }, useRedesignIconContext: function() { return u } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("679136"), a = n("580747"); let o = r.createContext({ enabled: !1, highlight: !1 }); function l(e) { let { children: t, overwriteValue: n } = e, { enabled: l } = s.default.useExperiment({ location: "web redesign icon context" }), u = (0, a.default)("highlight_redesigned_icons"), d = r.useMemo(() => ({ enabled: l, highlight: u }), [l, u]); return (0, i.jsx)(o.Provider, { value: null != n ? n : d, children: t }) } function u() { return r.useContext(o) } function d(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : void 0, r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : { size: 24 }; return function(s) { let { enabled: a, highlight: o } = u(); if (!a) return (0, i.jsx)(e, { ...s }); { var l, d; let e = { ...s }; for (let [t, i] of Object.entries(n = { foreground: "colorClass", color: "color", ...null != n ? n : {} })) { let n = s[t]; if (null == n && "color" === t && (n = o ? "yellow" : "currentColor"), "remove" === i) { delete e[t]; continue } e[i] = n } return null !== (l = e.width) && void 0 !== l || (e.width = r.size), null !== (d = e.height) && void 0 !== d || (e.height = r.size), (0, i.jsx)(t, { ...e }) } } } }, 188522: function(e, t, n) { "use strict"; n.r(t); var i = n("362883"); n.es(i, t) }, 552075: function(e, t, n) { "use strict"; n.r(t); var i = n("711315"); n.es(i, t) }, 210681: function(e, t, n) { "use strict"; n.r(t); var i = n("780628"); n.es(i, t) }, 197500: function(e, t, n) { "use strict"; n.r(t); var i = n("492631"); n.es(i, t) }, 188577: function(e, t, n) { "use strict"; n.r(t); var i = n("248487"); n.es(i, t) }, 914924: function(e, t, n) { "use strict"; n.r(t); var i = n("196922"); n.es(i, t) }, 685501: function(e, t, n) { "use strict"; n.r(t); var i = n("800005"); n.es(i, t) }, 138270: function(e, t, n) { "use strict"; n.r(t); var i = n("59262"); n.es(i, t) }, 329800: function(e, t, n) { "use strict"; n.r(t); var i = n("808517"); n.es(i, t) }, 662645: function(e, t, n) { "use strict"; n.r(t); var i = n("856469"); n.es(i, t) }, 700111: function(e, t, n) { "use strict"; n.r(t); var i = n("907134"); n.es(i, t) }, 637441: function(e, t, n) { "use strict"; n.r(t); var i = n("778887"); n.es(i, t) }, 357431: function(e, t, n) { "use strict"; n.r(t); var i = n("633985"); n.es(i, t) }, 760858: function(e, t, n) { "use strict"; n.r(t); var i = n("573966"); n.es(i, t) }, 421086: function(e, t, n) { "use strict"; n.r(t); var i = n("704111"); n.es(i, t) }, 381708: function(e, t, n) { "use strict"; n.r(t); var i = n("75922"); n.es(i, t) }, 65675: function(e, t, n) { "use strict"; n.r(t); var i = n("275735"); n.es(i, t) }, 884746: function(e, t, n) { "use strict"; n.r(t); var i = n("937531"); n.es(i, t) }, 712398: function(e, t, n) { "use strict"; n.r(t); var i = n("648282"); n.es(i, t) }, 609959: function(e, t, n) { "use strict"; n.r(t); var i = n("44041"); n.es(i, t) }, 981853: function(e, t, n) { "use strict"; n.r(t); var i = n("11890"); n.es(i, t) }, 176743: function(e, t, n) { "use strict"; n.r(t); var i = n("798405"); n.es(i, t) }, 124597: function(e, t, n) { "use strict"; n.r(t); var i = n("30717"); n.es(i, t) }, 979184: function(e, t, n) { "use strict"; n.r(t); var i = n("589965"); n.es(i, t) }, 531057: function(e, t, n) { "use strict"; n.r(t); var i = n("581051"); n.es(i, t) }, 605260: function(e, t, n) { "use strict"; n.r(t); var i = n("880104"); n.es(i, t) }, 465270: function(e, t, n) { "use strict"; n.r(t); var i = n("140835"); n.es(i, t) }, 865824: function(e, t, n) { "use strict"; n.r(t); var i = n("353381"); n.es(i, t) }, 266075: function(e, t, n) { "use strict"; n.r(t); var i = n("903788"); n.es(i, t) }, 774867: function(e, t, n) { "use strict"; n.r(t); var i = n("729878"); n.es(i, t) }, 882485: function(e, t, n) { "use strict"; n.r(t); var i = n("128034"); n.es(i, t) }, 131661: function(e, t, n) { "use strict"; n.r(t); var i = n("960524"); n.es(i, t) }, 264539: function(e, t, n) { "use strict"; n.r(t); var i = n("817899"); n.es(i, t) }, 612165: function(e, t, n) { "use strict"; n.r(t); var i = n("449257"); n.es(i, t) }, 322065: function(e, t, n) { "use strict"; n.r(t); var i = n("895070"); n.es(i, t) }, 828065: function(e, t, n) { "use strict"; n.r(t); var i = n("539263"); n.es(i, t) }, 428080: function(e, t, n) { "use strict"; n.r(t); var i = n("330366"); n.es(i, t) }, 181734: function(e, t, n) { "use strict"; n.r(t); var i = n("594543"); n.es(i, t) }, 745067: function(e, t, n) { "use strict"; n.r(t); var i = n("258485"); n.es(i, t) }, 204097: function(e, t, n) { "use strict"; n.r(t); var i = n("939298"); n.es(i, t) }, 483901: function(e, t, n) { "use strict"; n.r(t); var i = n("931622"); n.es(i, t) }, 344740: function(e, t, n) { "use strict"; n.r(t); var i = n("575326"); n.es(i, t) }, 609873: function(e, t, n) { "use strict"; n.r(t); var i = n("570392"); n.es(i, t) }, 934827: function(e, t, n) { "use strict"; n.r(t); var i = n("115682"); n.es(i, t) }, 389507: function(e, t, n) { "use strict"; n.r(t); var i = n("740093"); n.es(i, t) }, 418419: function(e, t, n) { "use strict"; n.r(t); var i = n("581663"); n.es(i, t) }, 559397: function(e, t, n) { "use strict"; n.r(t); var i = n("361481"); n.es(i, t) }, 344809: function(e, t, n) { "use strict"; n.r(t); var i = n("644189"); n.es(i, t) }, 124826: function(e, t, n) { "use strict"; n.r(t); var i = n("298258"); n.es(i, t) }, 452804: function(e, t, n) { "use strict"; n.r(t); var i = n("258152"); n.es(i, t) }, 377219: function(e, t, n) { "use strict"; n.r(t); var i = n("719812"); n.es(i, t) }, 907450: function(e, t, n) { "use strict"; n.r(t); var i = n("43491"); n.es(i, t) }, 808917: function(e, t, n) { "use strict"; n.r(t); var i = n("512671"); n.es(i, t) }, 696148: function(e, t, n) { "use strict"; n.r(t); var i = n("973090"); n.es(i, t) }, 834345: function(e, t, n) { "use strict"; n.r(t); var i = n("827428"); n.es(i, t) }, 942264: function(e, t, n) { "use strict"; n.r(t); var i = n("996141"); n.es(i, t) }, 149020: function(e, t, n) { "use strict"; n.r(t); var i = n("499237"); n.es(i, t) }, 899663: function(e, t, n) { "use strict"; n.r(t); var i = n("611865"); n.es(i, t) }, 730592: function(e, t, n) { "use strict"; n.r(t); var i = n("452165"); n.es(i, t) }, 781511: function(e, t, n) { "use strict"; n.r(t); var i = n("322282"); n.es(i, t) }, 298433: function(e, t, n) { "use strict"; n.r(t); var i = n("388469"); n.es(i, t) }, 663735: function(e, t, n) { "use strict"; n.r(t); var i = n("351817"); n.es(i, t) }, 498503: function(e, t, n) { "use strict"; n.r(t); var i = n("145492"); n.es(i, t) }, 509633: function(e, t, n) { "use strict"; n.r(t); var i = n("201707"); n.es(i, t) }, 359653: function(e, t, n) { "use strict"; n.r(t); var i = n("620180"); n.es(i, t) }, 899738: function(e, t, n) { "use strict"; n.r(t); var i = n("596815"); n.es(i, t) }, 14468: function(e, t, n) { "use strict"; n.r(t); var i = n("528109"); n.es(i, t) }, 485303: function(e, t, n) { "use strict"; n.r(t); var i = n("898278"); n.es(i, t) }, 978091: function(e, t, n) { "use strict"; n.r(t); var i = n("262508"); n.es(i, t) }, 984986: function(e, t, n) { "use strict"; n.r(t); var i = n("771752"); n.es(i, t) }, 860738: function(e, t, n) { "use strict"; n.r(t); var i = n("760587"); n.es(i, t) }, 99259: function(e, t, n) { "use strict"; n.r(t); var i = n("717520"); n.es(i, t) }, 117447: function(e, t, n) { "use strict"; n.r(t); var i = n("632140"); n.es(i, t) }, 486512: function(e, t, n) { "use strict"; n.r(t); var i = n("26468"); n.es(i, t) }, 824385: function(e, t, n) { "use strict"; n.r(t); var i = n("194565"); n.es(i, t) }, 670900: function(e, t, n) { "use strict"; n.r(t); var i = n("387279"); n.es(i, t) }, 180886: function(e, t, n) { "use strict"; n.r(t); var i = n("79934"); n.es(i, t) }, 331650: function(e, t, n) { "use strict"; n.r(t); var i = n("247033"); n.es(i, t) }, 278724: function(e, t, n) { "use strict"; n.r(t); var i = n("95070"); n.es(i, t) }, 675030: function(e, t, n) { "use strict"; n.r(t); var i = n("90787"); n.es(i, t) }, 671290: function(e, t, n) { "use strict"; n.r(t); var i = n("846343"); n.es(i, t) }, 202074: function(e, t, n) { "use strict"; n.r(t); var i = n("608552"); n.es(i, t) }, 934253: function(e, t, n) { "use strict"; n.r(t); var i = n("574177"); n.es(i, t) }, 83468: function(e, t, n) { "use strict"; n.r(t); var i = n("461286"); n.es(i, t) }, 434559: function(e, t, n) { "use strict"; n.r(t); var i = n("467063"); n.es(i, t) }, 873706: function(e, t, n) { "use strict"; n.r(t); var i = n("426215"); n.es(i, t) }, 324333: function(e, t, n) { "use strict"; n.r(t); var i = n("658828"); n.es(i, t) }, 10683: function(e, t, n) { "use strict"; n.r(t); var i = n("515639"); n.es(i, t) }, 793080: function(e, t, n) { "use strict"; n.r(t); var i = n("326325"); n.es(i, t) }, 596440: function(e, t, n) { "use strict"; n.r(t); var i = n("844082"); n.es(i, t) }, 955623: function(e, t, n) { "use strict"; n.r(t); var i = n("299468"); n.es(i, t) }, 974139: function(e, t, n) { "use strict"; n.r(t); var i = n("735980"); n.es(i, t) }, 281703: function(e, t, n) { "use strict"; n.r(t); var i = n("959411"); n.es(i, t) }, 8386: function(e, t, n) { "use strict"; n.r(t); var i = n("919029"); n.es(i, t) }, 304497: function(e, t, n) { "use strict"; n.r(t); var i = n("927515"); n.es(i, t) }, 690597: function(e, t, n) { "use strict"; n.r(t); var i = n("123406"); n.es(i, t) }, 738232: function(e, t, n) { "use strict"; n.r(t); var i = n("457927"); n.es(i, t) }, 76162: function(e, t, n) { "use strict"; n.r(t); var i = n("331327"); n.es(i, t) }, 654191: function(e, t, n) { "use strict"; n.r(t); var i = n("748952"); n.es(i, t) }, 297350: function(e, t, n) { "use strict"; n.r(t); var i = n("802792"); n.es(i, t) }, 634634: function(e, t, n) { "use strict"; n.r(t); var i = n("825350"); n.es(i, t) }, 134741: function(e, t, n) { "use strict"; n.r(t); var i = n("246521"); n.es(i, t) }, 560123: function(e, t, n) { "use strict"; n.r(t); var i = n("716923"); n.es(i, t) }, 40146: function(e, t, n) { "use strict"; n.r(t); var i = n("628028"); n.es(i, t) }, 191578: function(e, t, n) { "use strict"; n.r(t); var i = n("125455"); n.es(i, t) }, 914576: function(e, t, n) { "use strict"; n.r(t); var i = n("132317"); n.es(i, t) }, 458890: function(e, t, n) { "use strict"; n.r(t); var i = n("656129"); n.es(i, t) }, 393586: function(e, t, n) { "use strict"; n.r(t); var i = n("825070"); n.es(i, t) }, 555730: function(e, t, n) { "use strict"; n.r(t); var i = n("220070"); n.es(i, t) }, 116710: function(e, t, n) { "use strict"; n.r(t); var i = n("907418"); n.es(i, t) }, 820764: function(e, t, n) { "use strict"; n.r(t); var i = n("120116"); n.es(i, t) }, 104600: function(e, t, n) { "use strict"; n.r(t); var i = n("138996"); n.es(i, t) }, 467949: function(e, t, n) { "use strict"; n.r(t); var i = n("129426"); n.es(i, t) }, 321096: function(e, t, n) { "use strict"; n.r(t); var i = n("223130"); n.es(i, t) }, 873729: function(e, t, n) { "use strict"; n.r(t); var i = n("318947"); n.es(i, t) }, 756655: function(e, t, n) { "use strict"; n.r(t); var i = n("898683"); n.es(i, t) }, 981452: function(e, t, n) { "use strict"; n.r(t); var i = n("894615"); n.es(i, t) }, 489862: function(e, t, n) { "use strict"; n.r(t); var i = n("988683"); n.es(i, t) }, 783708: function(e, t, n) { "use strict"; n.r(t); var i = n("647094"); n.es(i, t) }, 164776: function(e, t, n) { "use strict"; n.r(t); var i = n("692881"); n.es(i, t) }, 367802: function(e, t, n) { "use strict"; n.r(t); var i = n("435807"); n.es(i, t) }, 609674: function(e, t, n) { "use strict"; n.r(t); var i = n("918123"); n.es(i, t) }, 389710: function(e, t, n) { "use strict"; n.r(t); var i = n("892608"); n.es(i, t) }, 376644: function(e, t, n) { "use strict"; n.r(t); var i = n("219273"); n.es(i, t) }, 352903: function(e, t, n) { "use strict"; n.r(t); var i = n("981755"); n.es(i, t) }, 646827: function(e, t, n) { "use strict"; n.r(t); var i = n("508069"); n.es(i, t) }, 768852: function(e, t, n) { "use strict"; n.r(t); var i = n("882955"); n.es(i, t) }, 435205: function(e, t, n) { "use strict"; n.r(t); var i = n("446578"); n.es(i, t) }, 373296: function(e, t, n) { "use strict"; n.r(t); var i = n("790472"); n.es(i, t) }, 700287: function(e, t, n) { "use strict"; n.r(t); var i = n("23513"); n.es(i, t) }, 422045: function(e, t, n) { "use strict"; n.r(t); var i = n("490236"); n.es(i, t) }, 71970: function(e, t, n) { "use strict"; n.r(t); var i = n("964094"); n.es(i, t) }, 231764: function(e, t, n) { "use strict"; n.r(t); var i = n("183249"); n.es(i, t) }, 594158: function(e, t, n) { "use strict"; n.r(t); var i = n("653498"); n.es(i, t) }, 657147: function(e, t, n) { "use strict"; n.r(t); var i = n("175609"); n.es(i, t) }, 97910: function(e, t, n) { "use strict"; n.r(t); var i = n("440424"); n.es(i, t) }, 52128: function(e, t, n) { "use strict"; n.r(t); var i = n("885668"); n.es(i, t) }, 780014: function(e, t, n) { "use strict"; n.r(t); var i = n("968144"); n.es(i, t) }, 643568: function(e, t, n) { "use strict"; n.r(t); var i = n("286998"); n.es(i, t) }, 557753: function(e, t, n) { "use strict"; n.r(t); var i = n("800595"); n.es(i, t) }, 972228: function(e, t, n) { "use strict"; n.r(t); var i = n("274013"); n.es(i, t) }, 687726: function(e, t, n) { "use strict"; n.r(t); var i = n("216481"); n.es(i, t) }, 867980: function(e, t, n) { "use strict"; n.r(t); var i = n("284179"); n.es(i, t) }, 690172: function(e, t, n) { "use strict"; n.r(t); var i = n("25307"); n.es(i, t) }, 794381: function(e, t, n) { "use strict"; n.r(t); var i = n("56411"); n.es(i, t) }, 480325: function(e, t, n) { "use strict"; n.r(t); var i = n("256713"); n.es(i, t) }, 423984: function(e, t, n) { "use strict"; n.r(t); var i = n("944188"); n.es(i, t) }, 652334: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Interactive: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("1561"), o = n("590471"); function l(e) { let { as: t, muted: n = !1, selected: r = !1, className: l, ...u } = e, d = null != t ? t : a.Clickable; return (0, i.jsx)(d, { ...u, className: s()(o.interactive, l, { [o.muted]: n, [o.selected]: r }) }) } }, 710593: function(e, t, n) { "use strict"; n.r(t), n.d(t, { KeyCombo: function() { return d }, PRETTY_KEYS: function() { return u } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("714338"), o = n("583543"); function l(e) { let { direction: t = "up" } = e; return (0, i.jsx)("svg", { width: "10", height: "10", xmlns: "http://www.w3.org/2000/svg", className: s()(o.bindArrow, o[t]), children: (0, i.jsx)("g", { fill: "#FFFFFF", children: (0, i.jsx)("polygon", { transform: "translate(5.025000, 5.000000) scale(1, -1) translate(-5.025000, -5.000000) ", points: "4.16666667 10 4.16666672 3.33333333 1.25 6.25 0.05 5 5.00000005 0 9.99999967 5 8.75 6.25 5.83333338 3.33333333 5.83333333 10" }) }) }) } let u = { mod: () => a.default.modKey, alt: () => a.default.altKey, up: () => (0, i.jsx)(l, { direction: "up" }), down: () => (0, i.jsx)(l, { direction: "down" }), left: () => (0, i.jsx)(l, { direction: "left" }), right: () => (0, i.jsx)(l, { direction: "right" }), pageup: () => "page up", pagedown: () => "page down", "any-character": () => "any key", plus: () => "+", return: () => a.default.returnKey }; function d(e) { let { shortcut: t, dim: n = !1, className: r, keyClassName: a } = e, l = Array.isArray(t) ? t : t.split("+"); return (0, i.jsx)("div", { className: s()(o.combo, r, { [o.dim]: n }), children: l.map(e => null != u[e] ? u[e]() : e).map((e, t) => (0, i.jsx)("span", { className: s()(o.key, a), children: e }, t)) }) } }, 302901: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Layer: function() { return A }, LayerClassName: function() { return T }, LayerContainer: function() { return S }, LayerProvider: function() { return f }, createLayer: function() { return m }, getParentLayerContainer: function() { return h } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("512722"), l = n.n(o), u = n("699581"), d = n.n(u), _ = n("251625"), c = n("872801"), E = n("871860"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let T = E.layerContainer; class f extends r.Component { componentWillUnmount() { this.state.layerContainerElement = null } render() { let { layerContext: e, children: t } = this.props, { layerContainerElement: n } = this.state; return (0, i.jsx)(e.Provider, { value: this.getContextValue(n), children: t }) } constructor(...e) { super(...e), I(this, "state", { layerContainerElement: null }), I(this, "setLayerContainerElement", e => { this.setState({ layerContainerElement: e }) }), I(this, "getContextValue", (0, _.cachedFunction)(e => [e, this.setLayerContainerElement])) } } let S = e => { let { layerContext: t, className: n } = e, [, s] = r.useContext(t); return (0, i.jsx)("div", { className: a()(T, n), ref: s }) }; function h(e) { let t = (0, c.default)(e, E.layerContainer); return l()(null != t, "Unexpected missing parent container"), t } let A = e => { let { layerContext: t, children: n } = e; return (0, i.jsx)(t.Consumer, { children: e => (function(e, t) { let [n] = e; return null == n ? null : d().createPortal(r.Children.only(t), n) })(e, n) }) }; function m(e) { let t = r.createContext([null, () => {}]), n = { LayerProvider: e => (0, i.jsx)(f, { layerContext: t, ...e }), LayerContainer: e => (0, i.jsx)(S, { layerContext: t, ...e }), Layer: e => (0, i.jsx)(A, { layerContext: t, ...e }), layerContext: t }; return n.LayerProvider.displayName = "".concat(e, "LayerProvider"), n.LayerContainer.displayName = "".concat(e, "LayerContainer"), n.Layer.displayName = "".concat(e, "Layer"), n } }, 539907: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReferencePositionLayer: function() { return R }, referencePortalAwareContains: function() { return m } }), n("47120"), n("411104"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("512722"), u = n.n(l), d = n("84735"), _ = n("801787"), c = n("585483"), E = n("792125"), I = n("872801"), T = n("302901"), f = n("981631"), S = n("871860"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = new WeakMap; function m(e, t) { if (e.contains(t)) return !0; let n = (0, I.default)(t, S.layer); for (; null != n;) { let t = A.get(n); if (null == t) break; if (e.contains(t)) return !0; n = (0, I.default)(t, S.layer) } return !1 } function N(e) { let { positionKey: t, position: n, align: i } = e; return null != t ? t : "".concat(n, ":").concat(i) } function p(e, t, n, i) { switch (e) { case "top": return u()(null != t.bottom, "Missing bottom"), i.offsetHeight - (t.bottom + n.offsetHeight); case "bottom": return u()(null != t.top, "Missing top"), i.offsetHeight - (t.top + n.offsetHeight); case "left": return u()(null != t.right, "Missing right"), i.offsetWidth - (t.right + n.offsetWidth); case "right": return u()(null != t.left, "Missing left"), i.offsetWidth - (t.left + n.offsetWidth); case "center": case "window_center": return u()(null != t.left, "Missing left"), i.offsetWidth - (t.left + n.offsetWidth / 2); default: throw Error("Unexpected position: ".concat(e)) } } function O(e, t, n) { if (null != e && e < 0 && ("top" === n.position || "bottom" === n.position) && null != t && Math.abs(e) < (null == t ? void 0 : t.offsetHeight) && null != n.style) { let t = "top" === n.position ? "bottom" : "top", i = n.style[t]; return { ...n, style: { ...n.style, [t]: (null == i ? 0 : i) + e } } } return n } function C(e) { let { targetRef: t, overrideTargetRect: n } = e; return null != n ? n : (u()(null != t.current, "Invalid ref"), t.current.getBoundingClientRect()) } class R extends(i = s.Component) { formatDimension(e) { return this.props.useRawTargetDimensions ? e : Math.ceil(e) } nudgeLeftAlignment(e, t, n) { let { nudgeAlignIntoViewport: i } = this.props; if (!i) return e; let r = n.offsetWidth, s = e + t.offsetWidth - r + 12; return s > 0 ? Math.max(12, e - s) : e } getHorizontalAlignmentStyle(e, t, n, i) { let { align: r } = this.props; switch (r) { case "left": { let r = this.formatDimension(this.nudgeLeftAlignment(e.left, t, n)), s = this.formatDimension(e.left) - r; return { style: { ...i, left: r }, nudge: s } } case "right": { let t = this.formatDimension(n.offsetWidth - e.right); return { style: { ...i, right: t }, nudge: 0 } } case "center": { let r = e.left + (e.width - t.offsetWidth) / 2, s = this.formatDimension(this.nudgeLeftAlignment(r, t, n)), a = this.formatDimension(r) - s; return { style: { ...i, left: s }, nudge: a } } default: throw Error("Unsupported align: ".concat(r)) } } nudgeTopAlignment(e, t, n) { let { nudgeAlignIntoViewport: i } = this.props; if (!i) return e; if (e < 0) return 0; let r = t.getBoundingClientRect().height, s = n.offsetHeight, a = e + r - s + 12; return a > 0 ? Math.max(12, e - a) : e } nudgeBottomAlignment(e, t, n) { let { nudgeAlignIntoViewport: i } = this.props, r = n.offsetHeight, s = r - e; if (!i) return s; let a = s + t.offsetHeight - r + 12; return a > 0 ? Math.max(12, s - a) : s } getVerticalAlignmentStyle(e, t, n, i) { let { align: r } = this.props; switch (r) { case "top": { let r = this.formatDimension(this.nudgeTopAlignment(e.top, t, n)), s = this.formatDimension(e.top) - r; return { style: { ...i, top: r }, nudge: s } } case "bottom": { let r = this.formatDimension(this.nudgeBottomAlignment(e.bottom, t, n)), s = this.formatDimension(e.bottom) - r; return { style: { ...i, bottom: r }, nudge: s } } case "center": { let r = e.top + (e.height - t.offsetHeight) / 2, s = this.formatDimension(this.nudgeTopAlignment(r, t, n)), a = this.formatDimension(r) - s; return { style: { ...i, top: s }, nudge: a } } default: throw Error("Unsupported align: ".concat(r)) } } calculatePositionStyle(e, t, n) { var i, r, s; let { spacing: a = 0 } = this.props, o = C(this.props), l = n.getBoundingClientRect(); let u = (i = o, r = l.left, s = l.top, { top: i.top - s, left: i.left - r, bottom: i.bottom - s, right: i.right - r, width: i.width, height: i.height }); switch (e) { case "top": return this.getHorizontalAlignmentStyle(u, t, n, { bottom: n.offsetHeight - u.top + a }); case "bottom": return this.getHorizontalAlignmentStyle(u, t, n, { top: u.bottom + a }); case "left": return this.getVerticalAlignmentStyle(u, t, n, { right: n.offsetWidth - u.left + a }); case "right": return this.getVerticalAlignmentStyle(u, t, n, { left: u.right + a }); case "center": return this.getVerticalAlignmentStyle(u, t, n, { left: u.left + u.width / 2 - t.offsetWidth / 2 + a }); case "window_center": return this.getVerticalAlignmentStyle(u, t, n, { left: Math.max((window.innerWidth - t.offsetWidth) / 2, 0) }); default: throw Error("Unexpected position: ".concat(e)) } } calculateState() { let { position: e, autoInvert: t } = this.props, n = this.elementRef.current; u()(null != n, "Unexpected null element"); let i = (0, T.getParentLayerContainer)(n), { style: r, nudge: s } = this.calculatePositionStyle(e, n, i), a = null, o = null; if (t && (a = p(e, r, n, i)) < 0) { let t = function(e) { switch (e) { case "top": return "bottom"; case "bottom": return "top"; case "left": return "right"; case "right": return "left"; case "center": return "center"; case "window_center": return "window_center"; default: throw Error() } }(e), { style: r, nudge: s } = this.calculatePositionStyle(t, n, i); if ((o = p(t, r, n, i)) > a) return O(o, n, { position: t, nudge: s, style: r }) } return O(a, n, { position: e, nudge: s, style: r }) } componentDidMount() { var e, t; let { targetRef: n, onMount: i } = this.props; this.setState({ isPositioned: !0, ...this.calculateState() }); let r = this.elementRef.current; u()(null != r, "Missing elementRef"), null != n.current && A.set(r, n.current), c.ComponentDispatch.subscribe(f.ComponentActions.LAYER_POP_START, this.handleLayerPopStart), c.ComponentDispatch.subscribe(f.ComponentActions.LAYER_POP_COMPLETE, this.handleLayerPopComplete), null == r || null === (t = r.ownerDocument) || void 0 === t || null === (e = t.defaultView) || void 0 === e || e.addEventListener("resize", this.handleLayerPopComplete), null == i || i() } componentDidUpdate(e, t) { if ((N(e) !== N(this.props) || ! function(e, t) { let n = C(e), i = C(t); return n.top === i.top && n.left === i.left }(e, this.props)) && this.updatePosition(), t.position !== this.state.position) { var n, i; null === (n = (i = this.props).onPositionChange) || void 0 === n || n.call(i, this.state.position) } } componentWillUnmount() { var e, t, n, i; let r = this.elementRef.current; u()(null != r, "Missing elementRef"), A.delete(r), c.ComponentDispatch.unsubscribe(f.ComponentActions.LAYER_POP_START, this.handleLayerPopStart), c.ComponentDispatch.unsubscribe(f.ComponentActions.LAYER_POP_COMPLETE, this.handleLayerPopComplete), null == r || null === (t = r.ownerDocument) || void 0 === t || null === (e = t.defaultView) || void 0 === e || e.removeEventListener("resize", this.handleLayerPopComplete), null === (n = (i = this.props).onUnmount) || void 0 === n || n.call(i) } render() { let { id: e, className: t, children: n, fixed: i, disablePointerEvents: s } = this.props, { position: a, isPositioned: l, isSettingsLayerTransitioning: u, nudge: c } = this.state; return (0, r.jsx)(_.UseThemeContext, { children: _ => { let { theme: I } = _; return (0, r.jsx)("div", { id: e, className: o()(t, (0, E.getThemeClass)(I), S.layer, { [S.emptyError]: !1, [S.layerHidden]: u, [S.disabledPointerEvents]: s }), style: { position: i ? "fixed" : "absolute", ...this.state.style }, ref: this.elementRef, children: (0, r.jsx)(d.FocusRingScope, { containerRef: this.elementRef, children: n({ position: a, nudge: c, isPositioned: l }, this.updatePosition) }) }) } }) } constructor(...e) { super(...e), h(this, "elementRef", s.createRef()), h(this, "state", { style: Object.freeze({}), position: this.props.autoInvert ? null : this.props.position, nudge: 0, isPositioned: !1, isSettingsLayerTransitioning: !1 }), h(this, "handleLayerPopStart", () => { this.setState({ isSettingsLayerTransitioning: !0 }) }), h(this, "handleLayerPopComplete", () => { let e = this.calculateState(); this.setState({ ...e, isSettingsLayerTransitioning: !1 }) }), h(this, "updatePosition", () => { this.setState(this.calculateState()) }) } } h(R, "defaultProps", { nudgeAlignIntoViewport: !1, spacing: 0, autoInvert: !1, disablePointerEvents: !1 }) }, 742746: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ListAuto: function() { return d }, ListNone: function() { return _ }, ListThin: function() { return u } }); var i, r, s, a = n("796075"), o = n("915287"), l = n("689197"); let u = (0, o.createListScroller)(l.thin, l.fade, l.customTheme, null !== (i = window.ResizeObserver) && void 0 !== i ? i : a.ResizeObserver), d = (0, o.createListScroller)(l.auto, l.fade, l.customTheme, null !== (r = window.ResizeObserver) && void 0 !== r ? r : a.ResizeObserver), _ = (0, o.createListScroller)(l.none, l.fade, l.customTheme, null !== (s = window.ResizeObserver) && void 0 !== s ? s : a.ResizeObserver) }, 915287: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createListScroller: function() { return c } }), n("653041"), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("952639"), l = n.n(o), u = n("84735"), d = n("562701"), _ = n("689197"); function c(e, t, n, s) { let o = (0, d.getScrollbarSpecs)(e), c = new Map, E = new s(e => { e.forEach(e => { var t; let { target: n } = e; null === (t = c.get(n)) || void 0 === t || t(e) }) }); return r.forwardRef(function(s, I) { let { className: T, onScroll: f, onResize: S = null, onContentResize: h = null, dir: A = "ltr", sections: m, sectionHeight: N, rowHeight: p, footerHeight: O = 0, sidebarHeight: C, listHeaderHeight: R = 0, renderSection: g, renderRow: L, renderFooter: v, renderSidebar: D, renderListHeader: M, wrapSection: y, getAnchorId: P, paddingTop: U, paddingBottom: b, fade: G = !1, customTheme: w = !1, chunkSize: k, style: B, innerId: V, innerRole: x, innerAriaLabel: F, innerAriaMultiselectable: H, innerAriaOrientation: Y, innerClassName: j, innerTag: W = "div", ...K } = s, z = r.useRef(null), Z = r.useRef(null), [X, Q] = r.useState(!1), { scrollerRef: q, scrollerState: J, getScrollerState: $ } = (0, d.useCachedScrollerState)(); (0, d.usePaddingFixes)({ scrollerRef: q, className: T, specs: o, orientation: "vertical", dir: A }); let { spacerTop: ee, totalHeight: et, items: en, isSidebarVisible: ei, listComputer: er, forceUpdateOnChunkChange: es, anchor: ea } = (0, d.useVirtualizedState)({ sections: m, sectionHeight: N, rowHeight: p, footerHeight: O, sidebarHeight: C, listHeaderHeight: R, paddingTop: U, paddingBottom: b, chunkSize: k, getScrollerState: $, getAnchorId: P }), eo = (0, d.useScrollSpring)(q), el = r.useRef(S), eu = r.useRef(h); r.useLayoutEffect(() => { el.current = S, eu.current = h }); let ed = r.useCallback(function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 2; if (e > J.current.dirty && (J.current.dirty = e), 2 === e) { var t; null === (t = el.current) || void 0 === t || t.call(el) } es(e) }, [es, J]), e_ = r.useCallback(() => ed(), [ed]); (0, d.useResizeObserverSubscription)({ ref: q, onUpdate: e_, key: "container", resizeObserver: E, listenerMap: c }), (0, d.useResizeObserverSubscription)({ ref: Z, onUpdate: () => { var e; return null === (e = eu.current) || void 0 === e ? void 0 : e.call(eu) }, key: "content", resizeObserver: E, listenerMap: c }); let ec = function(e) { let t = r.useRef(e); return r.useEffect(() => void(t.current = e), [e]), r.useCallback(() => t.current, []) }(en), eE = function(e) { let t = r.useRef(e); return r.useEffect(() => void(t.current = e), [e]), r.useCallback(e => { let { current: n } = t, i = 0; for (let t = 0; t < n.length; t++) { let r = n[t]; if (i <= e && i + r >= e) return [t, e - i]; i += r } return [0, 0] }, []) }(m); r.useImperativeHandle(I, () => ({ getScrollerNode: () => q.current, getScrollerState: $, getItems: ec, getSectionRowFromIndex: eE, ...(0, d.getAnimatedListScrollHelpers)(q, $, er, eo) }), [q, $, eE, ec, er, eo]); let eI = r.useCallback(e => { ed(1), null == z.current ? Q(!0) : clearTimeout(z.current), z.current = setTimeout(() => { z.current = null, Q(!1) }, 200), null != f && f(e) }, [f, ed]); return r.useLayoutEffect(() => { 2 !== J.current.dirty && (J.current.dirty = 2) }, [en, g, L, v, y, et, ee, J]), (0, d.useVirtualizedAnchor)({ scrollerRef: q, anchor: ea, getScrollerState: $, listComputer: er, getAnchorId: P, totalHeight: et }), (0, i.jsxs)("div", { ref: q, onScroll: eI, className: a()(T, { [e]: !0, [t]: G, [n]: w, [_.scrolling]: X }), style: (0, d.getMergedOrientationStyles)(B), ...K, children: [r.useMemo(() => (0, i.jsx)(W, { id: V, role: x, "aria-label": F, "aria-multiselectable": H, "aria-orientation": Y, style: { height: et }, className: a()(_.content, j), ref: Z, children: (0, i.jsx)(u.FocusRingScope, { containerRef: Z, children: function(e) { let { renderSection: t, renderRow: n, renderFooter: r, renderListHeader: s, wrapSection: a, items: o, spacerTop: u } = e, d = [(0, i.jsx)("div", { "aria-hidden": !0, style: { height: u } }, "---list-spacer-top")], _ = [], c = 0; if (o.forEach(e => { var i; switch (e.section !== c && _.length > 0 && (d.push(null != a ? a(c, _) : _), _ = []), c = null !== (i = e.section) && void 0 !== i ? i : 0, e.type) { case "section": null != t && _.push(t(e)); break; case "row": _.push(n(e)); break; case "footer": null != r && _.push(r(e)); break; case "header": null != s && _.push(s()) } }), _.length > 0) { var E; d.push(null !== (E = null == a ? void 0 : a(c, _)) && void 0 !== E ? E : _) } return l()(d) }({ items: en, renderListHeader: M, renderSection: g, renderRow: L, renderFooter: v, wrapSection: y, spacerTop: ee }) }) }), [V, x, F, H, Y, j, W, et, en, g, L, v, M, y, ee]), r.useMemo(() => (function(e) { let { renderSidebar: t, sidebarHeight: n, isSidebarVisible: i, isListVisible: r } = e; return null == n || null == t ? null : t(r, i) })({ isSidebarVisible: ei, renderSidebar: D, sidebarHeight: C, isListVisible: 0 !== en.length }), [ei, D, C, en.length])] }) }) } }, 679400: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-02_desktop_animated_icons", label: "Desktop animated icons", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Animated icons enabled", config: { enabled: !0 } }] }) }, 709014: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LottieIcon: function() { return I } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("906280"), l = n.n(o), u = n("186325"), d = n("390507"), _ = n("679400"), c = n("580747"), E = n("108447"); let I = r.forwardRef(function(e, t) { let { color: s, src: o, size: I = "md", width: T, height: f, className: S, initialAnimation: h, markers: A } = e, [m, N] = r.useState(null), p = r.useRef(null), O = r.useRef(null), C = r.useRef(null), R = "custom" === I ? { width: T, height: f } : (0, d.getIconSize)(I), g = !(0, c.default)("lottie_hover_multiple_loop"), L = r.useContext(u.AccessibilityPreferencesContext).reducedMotion.enabled, { enabled: v } = _.default.useExperiment({ location: "LottieIcon web entry point" }), D = L || !v; return r.useImperativeHandle(t, () => ({ play: e => { if (null != C.current) { if (O.current = e, D) { let t = A[e]; C.current.resetSegments(!0), C.current.setSegment(t.start + t.duration, t.start + t.duration), C.current.stop() } else C.current.setLoop(!g && e.includes("hover")), C.current.resetSegments(!0), C.current.playSegments([A[e].start, A[e].start + A[e].duration], !0) } }, stop: () => { if (null == C.current || D) return }, stopIfPlaying: e => { null != C.current && !D && O.current === e && (C.current.resetSegments(!0), C.current.setSegment(A[e].start, A[e].start), C.current.stop()) } }), [D, g, A]), r.useEffect(() => { null == m && o().then(e => N(e.default)) }, [m, o]), r.useEffect(() => (n.e("23755").then(n.t.bind(n, "500923", 23)).then(e => { var t; let n, { default: i } = e, r = null !== (t = O.current) && void 0 !== t ? t : h; if (null != r && null != A[r]) { let e = A[r]; n = [e.start, e.start + e.duration] } null != p.current && (C.current = i.loadAnimation({ container: p.current, renderer: "svg", loop: !1, autoplay: !1, animationData: l()(m), initialSegment: n })) }), () => { var e; null === (e = C.current) || void 0 === e || e.destroy() }), [m, h, A]), (0, i.jsx)("div", { style: { "--__lottieIconColor": null != s && "string" == typeof s ? s : null == s ? void 0 : s.css, display: "flex", ...R }, className: a()(E.lottieIcon, S), ref: p }) }) }, 685072: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useEndCallLottie: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("709014"); let a = { all: { name: "all", start: 0, duration: 90 } }, o = () => { let e = r.useRef(null), t = r.useCallback(() => { null != e.current && e.current.play("all") }, []), o = r.useCallback(() => { null != e.current && e.current.play("all") }, []), l = r.useCallback(() => { null != e.current && e.current.stopIfPlaying("all") }, []); return { events: { onMouseEnter: o, onMouseLeave: l }, play: t, Component: r.useCallback(t => (0, i.jsx)(s.LottieIcon, { ...t, src: () => n.e("52680").then(n.t.bind(n, "728913", 19)), ref: e, markers: a }), []) } } }, 114101: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useGifLottie: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("709014"); let a = { click: { name: "click", start: 0, duration: 66 }, hover: { name: "hover", start: 90, duration: 40 } }, o = () => { let e = r.useRef(null), t = r.useCallback(() => { null != e.current && e.current.play("click") }, []), o = r.useCallback(() => { null != e.current && e.current.play("hover") }, []), l = r.useCallback(() => { null != e.current && e.current.stopIfPlaying("hover") }, []); return { events: { onMouseEnter: o, onMouseLeave: l }, play: t, Component: r.useCallback(t => (0, i.jsx)(s.LottieIcon, { ...t, src: () => n.e("37655").then(n.t.bind(n, "119493", 19)), ref: e, markers: a }), []) } } }, 996146: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useGiftLottie: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("709014"); let a = { all: { name: "all", start: 0, duration: 66 } }, o = () => { let e = r.useRef(null), t = r.useCallback(() => { null != e.current && e.current.play("all") }, []), o = r.useCallback(() => { null != e.current && e.current.play("all") }, []), l = r.useCallback(() => { null != e.current && e.current.stopIfPlaying("all") }, []); return { events: { onMouseEnter: o, onMouseLeave: l }, play: t, Component: r.useCallback(t => (0, i.jsx)(s.LottieIcon, { ...t, src: () => n.e("8286").then(n.t.bind(n, "893346", 19)), ref: e, markers: a }), []) } } }, 864094: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useScreenshareLottie: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("709014"); let a = { enable: { name: "enable", start: 0, duration: 70 }, disable: { name: "disable", start: 90, duration: 70 }, hover_enabled: { name: "hover_enabled", start: 180, duration: 40 }, hover_disabled: { name: "hover_disabled", start: 240, duration: 40 } }, o = e => { let t = r.useRef(null), o = r.useRef(e), l = r.useMemo(() => () => { null != t.current && t.current.play(e) }, [e]), u = r.useCallback(() => { if (null == t.current) return; let n = "enable" === e ? "hover_disabled" : "hover_enabled"; t.current.play(n) }, [e]), d = r.useCallback(() => { if (null == t.current) return; let n = "enable" === e ? "hover_disabled" : "hover_enabled"; t.current.stopIfPlaying(n) }, [e]); return { events: { onClick: l, onMouseEnter: u, onMouseLeave: d }, play: l, Component: r.useCallback(e => (0, i.jsx)(s.LottieIcon, { ...e, src: () => n.e("59682").then(n.t.bind(n, "126683", 19)), ref: t, initialAnimation: o.current, markers: a }), []) } } }, 532772: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useStickerLottie: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("709014"); let a = { click: { name: "click", start: 0, duration: 66 }, hover: { name: "hover", start: 90, duration: 40 } }, o = () => { let e = r.useRef(null), t = r.useCallback(() => { null != e.current && e.current.play("click") }, []), o = r.useCallback(() => { null != e.current && e.current.play("hover") }, []), l = r.useCallback(() => { null != e.current && e.current.stopIfPlaying("hover") }, []); return { events: { onMouseEnter: o, onMouseLeave: l }, play: t, Component: r.useCallback(t => (0, i.jsx)(s.LottieIcon, { ...t, src: () => n.e("36995").then(n.t.bind(n, "737962", 19)), ref: e, markers: a }), []) } } }, 75735: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useVideoLottie: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("709014"); let a = { disable: { name: "disable", start: 0, duration: 70 }, enable: { name: "enable", start: 100, duration: 70 }, hover_enabled: { name: "hover_enabled", start: 180, duration: 70 }, hover_disabled: { name: "hover_disabled", start: 280, duration: 70 } }, o = e => { let t = r.useRef(null), o = r.useRef(e), l = r.useMemo(() => () => { null != t.current && t.current.play(e) }, [e]), u = r.useCallback(() => { if (null == t.current) return; let n = "enable" === e ? "hover_disabled" : "hover_enabled"; t.current.play(n) }, [e]), d = r.useCallback(() => { if (null == t.current) return; let n = "enable" === e ? "hover_disabled" : "hover_enabled"; t.current.stopIfPlaying(n) }, [e]); return { events: { onClick: l, onMouseEnter: u, onMouseLeave: d }, play: l, Component: r.useCallback(e => (0, i.jsx)(s.LottieIcon, { ...e, src: () => n.e("8366").then(n.t.bind(n, "553427", 19)), ref: t, initialAnimation: o.current, markers: a }), []) } } }, 215838: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MasonryListAuto: function() { return u }, MasonryListThin: function() { return l } }); var i, r, s = n("796075"), a = n("478922"), o = n("689197"); let l = (0, a.createMasonryListScroller)(o.thin, o.fade, null !== (i = window.ResizeObserver) && void 0 !== i ? i : s.ResizeObserver), u = (0, a.createMasonryListScroller)(o.auto, o.fade, null !== (r = window.ResizeObserver) && void 0 !== r ? r : s.ResizeObserver) }, 478922: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createMasonryListScroller: function() { return _ } }), n("47120"); var i = n("735250"), r = n("470079"), s = n.n(r), a = n("120356"), o = n.n(a), l = n("84735"), u = n("562701"), d = n("689197"); function _(e, t, n) { let a = (0, u.getScrollbarSpecs)(e), _ = new Map, c = new n(e => { e.forEach(e => { var t; let { target: n } = e; null === (t = _.get(n)) || void 0 === t || t(e) }) }); return (0, r.forwardRef)(function(n, E) { let { onScroll: I, dir: T = "ltr", sections: f, columns: S, getItemKey: h, getItemHeight: A, getSectionHeight: m, chunkSize: N, renderSection: p, renderItem: O, getSectionProps: C, itemGutter: R, removeEdgeItemGutters: g, sectionGutter: L, padding: v, paddingVertical: D, paddingHorizontal: M, fade: y = !1, className: P, style: U, ...b } = n, G = s().useRef(null), w = s().useRef(null), [k, B] = s().useState(!1), { scrollerRef: V, scrollerState: x, getScrollerState: F } = (0, u.useCachedScrollerState)(); (0, u.usePaddingFixes)({ scrollerRef: V, className: P, specs: a, orientation: "vertical", dir: T }); let { forceUpdateOnChunkChange: H, coordsMap: Y, gridData: j, visibleSections: W, totalHeight: K, forceUpdate: z, masonryComputer: Z } = (0, u.useVirtualizedMasonryState)({ sections: f, columns: S, getItemKey: h, getItemHeight: A, getSectionHeight: m, chunkSize: N, itemGutter: R, removeEdgeItemGutters: g, sectionGutter: L, padding: v, paddingVertical: D, paddingHorizontal: M, getScrollerState: F, dir: T }), X = (0, r.useCallback)(function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 2; e > x.current.dirty && (x.current.dirty = e, 2 === e ? z() : H(1)) }, [H, x, z]), Q = (0, u.useScrollSpring)(V), q = (0, r.useCallback)(() => Z.itemGrid, [Z]), J = (0, r.useCallback)(() => Z.coordsMap, [Z]), $ = s().useCallback(() => X(), [X]); (0, u.useResizeObserverSubscription)({ ref: V, key: "container", onUpdate: $, resizeObserver: c, listenerMap: _ }), (0, r.useImperativeHandle)(E, () => ({ getScrollerNode: () => V.current, getItemGrid: q, getCoordsMap: J, getScrollerState: F, ...(0, u.getAnimatedScrollHelpers)(V, F, Q) }), [V, F, q, Q, J]); let ee = (0, r.useCallback)(e => { X(1), null == G.current ? B(!0) : clearTimeout(G.current), G.current = setTimeout(() => { G.current = null, B(!1) }, 200), null != I && I(e) }, [I, X]); return (0, i.jsx)("div", { ref: V, onScroll: ee, className: o()(P, { [e]: !0, [t]: y, [d.scrolling]: k }), style: (0, u.getMergedOrientationStyles)(U), ...b, children: (0, r.useMemo)(() => (0, i.jsx)(l.FocusRingScope, { containerRef: w, children: (0, i.jsx)("div", { style: { height: K }, className: d.content, ref: w, children: Object.keys(W).map(e => { let t = (0, u.getMasonryListSectionIndex)(e), n = Y[e], r = W[e], s = Y[(0, u.getMasonryListSectionHeaderKey)(t)], a = null == C ? void 0 : C(t); return null != n && null != r ? (0, i.jsxs)("div", { style: n, ...a, children: [null != p && null != s && p(t, s, e), r.map(e => { let [t, n, i] = e, r = Y[t]; return null != r ? O(n, i, r, t, j) : null })] }, e) : null }) }) }), [W, O, p, Y, K, C, j]) }) }) } }, 761224: function(e, t, n) { "use strict"; function i(e, t) { return "function" == typeof e ? e(t) : e } n.r(t), n.d(t, { renderSubnode: function() { return i } }) }, 830447: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Menu: function() { return A }, MenuSpinner: function() { return m } }), n("390547"), n("724458"), n("653041"), n("47120"), n("411104"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("348327"), l = n.n(o), u = n("739940"), d = n("597442"), _ = n("21340"), c = n("922770"), E = n("857595"), I = n("607070"), T = n("828214"), f = n("898560"), S = n("788314"), h = n("768160"); function A(e) { var t; let { navId: n, variant: s = "flexible", hideScroller: o = !1, className: c, children: A, onClose: m, onSelect: p } = e, O = function e(t) { return (function e(t) { return null == t ? [] : r.Children.toArray(t).flatMap(t => { var n; return null == t ? [] : Array.isArray(t) ? e(t) : t.type === r.Fragment ? null !== (n = e(t.props.children)) && void 0 !== n ? n : [] : [t] }) })(t).reduce((t, n) => { var i, r; if (n.type === T.MenuSeparator) return t.push({ type: "separator", navigable: !1 }), t; if (n.type === T.MenuGroup) { let i = e(n.props.children); return i.length > 0 && (t.push({ type: "groupstart", length: i.length, navigable: !1, props: n.props }), t.push(...i), t.push({ type: "groupend", length: i.length, navigable: !1, props: n.props })), t } if (n.type === T.MenuItem) return t.push(null != n.props.render ? { type: "customitem", key: n.props.id, navigable: null == n.props.navigable || n.props.navigable, render: n.props.render, props: n.props } : { type: "item", key: n.props.id, navigable: !0, label: n.props.label, children: n.props.children ? e(n.props.children) : void 0, onChildrenScroll: n.props.onChildrenScroll, props: n.props, childRowHeight: n.props.childRowHeight, listClassName: n.props.listClassName, subMenuClassName: n.props.subMenuClassName }), t; else if (n.type === T.MenuCheckboxItem) return t.push({ type: "checkbox", key: n.props.id, navigable: !0, props: n.props }), t; else if (n.type === T.MenuRadioItem) return t.push({ type: "radio", key: n.props.id, navigable: !0, props: n.props }), t; else if (n.type === T.MenuControlItem) return t.push(null != n.props.control ? { type: "control", key: n.props.id, navigable: !0, props: n.props } : { type: "compositecontrol", key: n.props.id, navigable: !1 !== n.props.interactive, children: n.props.children, props: n.props }), t; throw Error("Menu API only allows Items and groups of Items as children. Received ".concat(null !== (r = null !== (i = null == n ? void 0 : n.type) && void 0 !== i ? i : n) && void 0 !== r ? r : typeof n, " (").concat(typeof n, ") instead")) }, []) }(A), C = function e(t) { return t.reduce((t, n) => n.navigable ? (t.push({ key: n.key, children: "item" === n.type && null != n.children ? e(n.children) : void 0 }), t) : t, []) }(O), R = r.useRef([]); !l()(R.current, C) && (R.current = C); let g = null === (t = O.find(e => null != e.key)) || void 0 === t ? void 0 : t.key, L = (0, u.useMenuNavigator)({ navId: n, items: R.current, initialFocusPath: I.default.keyboardModeEnabled && null != g ? [g] : [], closeMenu: m }); r.useEffect(() => { L.isUsingKeyboardNavigation ? !I.default.keyboardModeEnabled && (0, E.enableKeyboardMode)() : I.default.keyboardModeEnabled && (0, E.disableKeyboardMode)() }, [L.isUsingKeyboardNavigation]); let v = r.useRef(null); (0, d.useFocusLock)(v); let D = o ? _.ScrollerNone : _.ScrollerThin; return (0, i.jsx)(f.OnMenuSelectContext.Provider, { value: p, children: (0, i.jsx)("div", { className: a()(h.menu, h[s], c), ...L.getContainerProps(), ref: v, "aria-label": e["aria-label"], children: (0, i.jsxs)(D, { className: h.scroller, children: [0 === O.length && (0, i.jsx)(S.Item, { disabled: !0, label: () => (0, i.jsx)(N, {}), menuItemProps: L.getItemProps({ path: ["empty"] }), isFocused: !1, onFocus: () => {}, onClose: m }), O.length > 0 && function e(t, n, r, s) { let a = 0, o = []; return t.reduce((t, l, u) => { let d = o.length > 0 ? o[o.length - 1] : t; switch (l.type) { case "separator": d.push((0, i.jsx)(S.Separator, {}, "separator-".concat(u))), a = 0; break; case "groupstart": a > 0 && l.length > 0 && (d.push((0, i.jsx)(S.Separator, {}, "separator-".concat(u))), a = 0), o.push([]); break; case "groupend": o.length > 0 && t.push((0, i.jsx)(S.Group, { contents: o.pop(), ...l.props }, "group-".concat(u))); break; case "item": { let { children: t, childRowHeight: o, onChildrenScroll: u, listClassName: _, subMenuClassName: c } = l, E = null != t, I = [...r, l.key], T = n.isFocused(I), f = (0, i.jsx)(S.Item, { ...l.props, label: l.label, hasSubmenu: null != t, isFocused: T, menuItemProps: { ...n.getItemProps({ path: I, hasSubmenu: E }), ...null != t ? { "aria-haspopup": !0 } : {} }, onClose: s }, l.key); E ? null != o ? d.push((0, i.jsx)(S.SubmenuListItem, { ...l.props, parentItem: f, isFocused: T, menuSubmenuProps: n.getSubmenuProps({ path: I }), rows: e(t, n, I, s), rowHeight: o, onScroll: u, listClassName: _ }, "".concat(l.key, "-submenu"))) : d.push((0, i.jsx)(S.SubmenuItem, { ...l.props, subMenuClassName: c, parentItem: f, isFocused: T, menuSubmenuProps: n.getSubmenuProps({ path: I }), renderSubmenu: () => e(t, n, I, s) }, "".concat(l.key, "-submenu"))) : d.push(f), a++; break } case "customitem": { let e = [...r, l.key]; d.push((0, i.jsx)(S.CustomItem, { ...l.props, isFocused: n.isFocused(e), menuItemProps: n.getItemProps({ path: e }), onClose: s, children: l.render }, l.key)), a++; break } case "checkbox": { let e = [...r, l.key]; d.push((0, i.jsx)(S.CheckboxItem, { ...l.props, isFocused: n.isFocused(e), menuItemProps: n.getItemProps({ path: e, role: "menuitemcheckbox" }) }, l.key)), a++; break } case "radio": { let e = [...r, l.key]; d.push((0, i.jsx)(S.RadioItem, { ...l.props, isFocused: n.isFocused(e), menuItemProps: n.getItemProps({ path: e, role: "menuitemradio" }) }, l.key)), a++; break } case "control": { let e = [...r, l.key]; d.push((0, i.jsx)(S.ControlItem, { ...l.props, isFocused: n.isFocused(e), menuItemProps: n.getItemProps({ path: e }), onClose: s }, l.key)), a++; break } case "compositecontrol": { let e = [...r, l.key]; d.push((0, i.jsx)(S.CompositeControlItem, { ...l.props, isFocused: n.isFocused(e), menuItemProps: n.getItemProps({ path: e }), onClose: s, children: l.children }, l.key)), a++ } } return t }, []) }(O, L, [], m)] }) }) }) } function m() { return (0, i.jsx)("div", { className: a()(h.menu, h.loader, h.flexible), children: (0, i.jsx)(c.Spinner, {}) }) } function N() { let e = "♫ (つ。◕‿‿◕。)つ ♪", [t, n] = r.useState(e); return r.useEffect(() => { if (I.default.useReducedMotion) return; let t = setInterval(() => { n(t => t === e ? "♫ ⊂(。◕‿‿◕。⊂) ♪" : e) }, 700); return () => clearInterval(t) }, []), (0, i.jsx)("div", { style: { width: "100%", textAlign: "center" }, children: t }) } }, 828214: function(e, t, n) { "use strict"; function i() { return null } function r(e) { return null } function s(e) { return null } function a(e) { return null } function o(e) { return null } function l(e) { return null } n.r(t), n.d(t, { MenuCheckboxItem: function() { return a }, MenuControlItem: function() { return l }, MenuGroup: function() { return r }, MenuItem: function() { return s }, MenuRadioItem: function() { return o }, MenuSeparator: function() { return i } }) }, 939350: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MENU_ITEM_COLORS: function() { return r } }); var i = n("768160"); let r = { default: i.colorDefault, brand: i.colorBrand, danger: i.colorDanger, premium: i.colorPremium, "premium-gradient": i.colorPremiumGradient, success: i.colorSuccess } }, 898560: function(e, t, n) { "use strict"; n.r(t), n.d(t, { OnMenuSelectContext: function() { return i } }); let i = n("470079").createContext(void 0) }, 639627: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuImageUploadControl: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("952265"), a = n("813197"); let o = r.forwardRef(function(e, t) { let o = r.useRef(null); return r.useImperativeHandle(t, () => ({ focus: () => null, activate: () => { var e; return null === (e = o.current) || void 0 === e || e.activateUploadDialogue(), !1 } }), []), (0, i.jsx)("div", { style: { position: "relative" }, children: (0, i.jsx)(a.default, { ...e, ref: o, onChange: function(t, r) { (0, s.openModalLazy)(async () => { let { default: s } = await Promise.all([n.e("99387"), n.e("48017")]).then(n.bind(n, "850085")); return n => (0, i.jsx)(s, { imgURI: t, file: r, onCrop: e.onChange, ...n }) }) } }) }) }) }, 54281: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuInteractiveCompositeControl: function() { return s } }); var i = n("735250"), r = n("470079"); let s = r.forwardRef(function(e, t) { let { className: n, children: s } = e, a = r.useRef(null), o = r.useRef(null); return r.useImperativeHandle(t, () => ({ focus: () => { var e; let t = a.current; null != t && (null == o.current && (o.current = t.querySelector('[tabindex="0"]')), null === (e = o.current) || void 0 === e || e.focus()) }, blur: () => { var e; return null === (e = o.current) || void 0 === e ? void 0 : e.blur() }, activate: () => !1 }), []), r.useLayoutEffect(() => { let e = a.current; if (null != e) return e.addEventListener("focusin", t), () => { e.removeEventListener("focusin", t) }; function t(e) { o.current = e.target } }, []), (0, i.jsx)("div", { ref: a, className: n, style: { position: "relative" }, children: s }) }) }, 695407: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuSearchControl: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("1561"), l = n("84735"), u = n("922770"), d = n("465670"), _ = n("664800"), c = n("689938"), E = n("703273"); let I = r.forwardRef(function(e, t) { var n, s, I; let { query: T, onChange: f, loading: S = !1, disabled: h = !1, placeholder: A = c.default.Messages.SEARCH, "aria-label": m } = e, N = r.useRef(null), p = r.useRef(null); r.useImperativeHandle(t, () => ({ focus: () => { var e; return null === (e = p.current) || void 0 === e ? void 0 : e.focus() }, blur: () => { var e; return null === (e = p.current) || void 0 === e ? void 0 : e.blur() }, activate: () => !1 }), []); let O = (n = T, s = S, I = f, s ? (0, i.jsx)("div", { className: E.iconContainer, children: (0, i.jsx)(u.Spinner, { type: u.Spinner.Type.SPINNING_CIRCLE, className: a()(E.icon) }) }) : n.length > 0 ? (0, i.jsx)(o.Clickable, { "aria-label": c.default.Messages.SEARCH_CLEAR, className: a()(E.iconContainer, E.iconClickable), onClick: e => { e.stopPropagation(), I("") }, onMouseDown: e => { e.preventDefault(), e.stopPropagation() }, focusProps: { offset: { top: -3, right: -3, bottom: -3, left: -3 } }, children: (0, i.jsx)(d.default, { width: 18, height: 18, className: E.icon, "aria-label": c.default.Messages.CLOSE }) }) : (0, i.jsx)("div", { className: E.iconContainer, children: (0, i.jsx)(_.default, { width: 18, height: 18, className: E.icon, "aria-label": c.default.Messages.SEARCH }) })); return (0, i.jsx)(l.FocusRing, { focusTarget: p, ringTarget: N, offset: { top: 2, bottom: 2, left: 4, right: 4 }, children: (0, i.jsxs)("div", { className: E.container, ref: N, children: [(0, i.jsx)("input", { role: "searchbox", "aria-busy": S, ref: p, className: E.input, value: T, onChange: e => f(e.currentTarget.value), "aria-label": m, placeholder: A, disabled: h }), O] }) }) }) }, 739007: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuSliderControl: function() { return l } }); var i = n("735250"), r = n("470079"), s = n("561779"), a = n("623509"); let o = e => "".concat(e.toFixed(0), "%"), l = r.forwardRef(function(e, t) { let { value: n, minValue: l = 0, maxValue: u = 100, onChange: d, renderValue: _ = o, "aria-label": c } = e, E = r.useRef(null); return r.useImperativeHandle(t, () => ({ focus: () => { var e; return null === (e = E.current) || void 0 === e ? void 0 : e.focus() }, blur: () => { var e; return null === (e = E.current) || void 0 === e ? void 0 : e.blur() }, activate: () => !1 }), []), (0, i.jsx)("div", { className: a.sliderContainer, children: (0, i.jsx)(s.Slider, { ref: E, mini: !0, handleSize: 16, className: a.slider, initialValue: n, minValue: l, maxValue: u, onValueChange: d, asValueChanges: d, onValueRender: _, orientation: "horizontal", "aria-label": c }) }) }) }, 743236: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ensureItemVisible: function() { return r } }); var i = n("607070"); function r(e) { var t; i.default.keyboardModeEnabled && (null === (t = e.current) || void 0 === t || t.scrollIntoView({ block: "nearest" })) } }, 592282: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuCheckboxItem: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("1561"), l = n("761224"), u = n("743236"), d = n("448239"), _ = n("247442"), c = n("939350"), E = n("768160"); function I(e) { let { color: t = "default", label: n, checked: s, subtext: I, disabled: T, isFocused: f, menuItemProps: S, action: h, className: A, focusedClassName: m } = e, N = r.useRef(null); return r.useEffect(() => { f && (0, u.ensureItemVisible)(N) }, [f]), (0, i.jsxs)(o.Clickable, { innerRef: N, className: a()(E.item, E.labelContainer, c.MENU_ITEM_COLORS[t], A, { [E.disabled]: T, [E.focused]: f, [null != m ? m : ""]: f }), onClick: T ? void 0 : h, ...S, "aria-checked": s, "aria-disabled": T, children: [(0, i.jsxs)("div", { className: E.label, children: [(0, l.renderSubnode)(n, e), null != I && (0, i.jsx)("div", { className: E.subtext, children: I })] }), (0, i.jsx)("div", { className: E.iconContainer, children: s ? (0, i.jsx)(_.default, { className: E.icon, background: E.checkbox, foreground: E.check }) : (0, i.jsx)(d.default, { className: E.icon, foreground: E.__invalid_checkboxEmpty }) })] }) } }, 402084: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuCompositeControlItem: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("743236"), l = n("939350"), u = n("768160"); function d(e) { let { color: t = "default", disabled: n, isFocused: s, showDefaultFocus: d = !1, menuItemProps: _, children: c } = e, E = r.useRef(null); return r.useLayoutEffect(() => { if (!s) return; let e = E.current; if (null == e) return; (0, o.ensureItemVisible)(E); let t = e.querySelector('[tabindex="0"]'); null == t || t.focus() }, [s]), (0, i.jsx)("div", { ref: E, className: a()(u.item, l.MENU_ITEM_COLORS[t], { [u.disabled]: n, [u.focused]: d && s, [u.hideInteraction]: !d }), "aria-disabled": n, ..._, children: c }) } }, 526714: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuControlItem: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("743236"), l = n("939350"), u = n("768160"); function d(e) { let { color: t = "default", label: n, control: s, disabled: d, isFocused: _, showDefaultFocus: c = !1, menuItemProps: E, onClose: I } = e, T = r.useRef(null), f = r.useRef(null); r.useLayoutEffect(() => { var e, t, n; _ ? ((0, o.ensureItemVisible)(T), null === (e = f.current) || void 0 === e || e.focus()) : null === (n = f.current) || void 0 === n || null === (t = n.blur) || void 0 === t || t.call(n) }, [_]); let S = r.useCallback(() => { var e, t; (null === (t = f.current) || void 0 === t ? void 0 : null === (e = t.activate) || void 0 === e ? void 0 : e.call(t)) && I() }, [I]), h = s({ onClose: I, disabled: d, isFocused: _ }, f); return (0, i.jsxs)("div", { onClick: S, className: a()(u.item, l.MENU_ITEM_COLORS[t], { [u.disabled]: d, [u.focused]: c && _, [u.hideInteraction]: !c }), "aria-disabled": d, ...E, children: [null != n ? (0, i.jsx)("div", { className: u.labelContainer, children: (0, i.jsx)("div", { className: u.label, children: n }) }) : null, h] }) } }, 756710: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuCustomItem: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("1561"), l = n("743236"), u = n("939350"), d = n("768160"); function _(e) { let { children: t, color: n = "default", isFocused: s = !1, disabled: _ = !1, keepItemStyles: c = !1, menuItemProps: E, action: I, dontCloseOnActionIfHoldingShiftKey: T, dontCloseOnAction: f, onClose: S } = e, h = r.useRef(null); r.useEffect(() => { s && (0, l.ensureItemVisible)(h) }, [s]); let A = r.useCallback(e => { if (null == I) return !1; !(e.shiftKey && T) && !f && S(), e.persist(), requestAnimationFrame(() => I(e)) }, [I, S, T, f]), m = c ? a()(d.item, u.MENU_ITEM_COLORS[n], { [d.focused]: s }) : d.customItem; return (0, i.jsx)(o.Clickable, { innerRef: h, className: m, onClick: _ ? void 0 : A, "aria-disabled": _, ...E, children: t({ color: n, disabled: _, isFocused: s }) }) } }, 911810: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuGroup: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("939350"), o = n("768160"); function l(e) { let { contents: t, label: n, className: r, color: l = "default" } = e; return 0 === t.length ? null : (0, i.jsxs)("div", { "aria-label": n, role: "group", className: r, children: [null != n ? (0, i.jsx)("div", { className: s()(o.groupLabel, a.MENU_ITEM_COLORS[l]), children: n }) : null, t] }) } }, 504135: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuItem: function() { return T } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("1561"), l = n("761224"), u = n("898560"), d = n("743236"), _ = n("468210"), c = n("692437"), E = n("939350"), I = n("768160"); function T(e) { let { color: t = "default", label: n, icon: s, showIconFirst: T = !1, imageUrl: f, hint: S, subtext: h, hasSubmenu: A, disabled: m, isFocused: N, menuItemProps: p, action: O, onClose: C, onFocus: R, className: g, focusedClassName: L, subMenuIconClassName: v, dontCloseOnActionIfHoldingShiftKey: D, dontCloseOnAction: M, iconProps: y, sparkle: P } = e, U = r.useContext(u.OnMenuSelectContext), b = r.useRef(null), G = r.useCallback(e => { if (null == O) return !1; !(e.shiftKey && D) && !M && C(), e.persist(), null == U || U(), requestAnimationFrame(() => O(e)) }, [O, C, U, D, M]); return r.useEffect(() => { N && ((0, d.ensureItemVisible)(b), null == R || R()) }, [N, R]), (0, i.jsxs)(o.Clickable, { innerRef: b, className: a()(I.item, I.labelContainer, E.MENU_ITEM_COLORS[t], g, { [I.disabled]: m, [I.focused]: N, [null != L ? L : ""]: N }), onClick: m ? void 0 : G, "aria-disabled": m, ...p, "data-menu-item": "true", children: [T && null != s && (0, i.jsx)("div", { className: I.iconContainerLeft, children: (0, i.jsx)(s, { ...y, className: a()(I.icon, null == y ? void 0 : y.className), isFocused: N }) }), (0, i.jsxs)("div", { className: I.label, children: [(0, l.renderSubnode)(n, e), null != h && (0, i.jsx)("div", { className: I.subtext, children: h })] }), null != S && (0, i.jsx)("div", { className: I.hintContainer, children: (0, l.renderSubnode)(S, e) }), !T && null != s && (0, i.jsx)("div", { className: I.iconContainer, children: (0, i.jsx)(s, { ...y, className: a()(I.icon, null == y ? void 0 : y.className), isFocused: N }) }), null != f && (0, i.jsx)("div", { className: I.imageContainer, children: (0, i.jsx)("img", { className: I.image, src: (0, l.renderSubnode)(f, e), alt: "" }) }), A && (0, i.jsxs)("div", { className: I.iconContainer, children: [(0, i.jsx)(c.default, { className: a()(I.caret, v) }), P && (0, i.jsx)(_.default, { className: I.sparkles })] })] }) } }, 867333: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuRadioItem: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("1561"), l = n("761224"), u = n("743236"), d = n("186523"), _ = n("553826"), c = n("939350"), E = n("768160"); function I(e) { let { color: t = "default", label: n, checked: s, subtext: I, disabled: T, isFocused: f, menuItemProps: S, action: h } = e, A = r.useRef(null); return r.useEffect(() => { f && (0, u.ensureItemVisible)(A) }, [f]), (0, i.jsxs)(o.Clickable, { innerRef: A, className: a()(E.item, E.labelContainer, c.MENU_ITEM_COLORS[t], { [E.disabled]: T, [E.focused]: f }), onClick: T ? void 0 : h, ...S, "aria-checked": s, "aria-disabled": T, children: [(0, i.jsxs)("div", { className: E.label, children: [(0, l.renderSubnode)(n, e), null != I && (0, i.jsx)("div", { className: E.subtext, children: I })] }), (0, i.jsx)("div", { className: E.iconContainer, children: s ? (0, i.jsx)(_.default, { className: E.icon, background: E.__invalid_radio, foreground: E.radioSelection }) : (0, i.jsx)(d.default, { className: E.icon, foreground: E.__invalid_radio }) })] }) } }, 153758: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuSeparator: function() { return s } }); var i = n("735250"); n("470079"); var r = n("768160"); function s() { return (0, i.jsx)("div", { role: "separator", className: r.separator }) } }, 480962: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuSubmenuItem: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("539907"), l = n("743236"), u = n("21340"), d = n("768160"); function _(e) { let { subMenuClassName: t, parentItem: n, isFocused: s, menuSubmenuProps: _, renderSubmenu: c } = e, { focusIndex: E, isUsingKeyboardNavigation: I, ...T } = _, f = r.useRef(null), S = r.useRef(null), h = r.useRef(null); return r.useLayoutEffect(() => { var e; s && ((0, l.ensureItemVisible)(f), null === (e = h.current) || void 0 === e || e.focus()) }, [s]), (0, i.jsxs)("div", { ref: f, className: d.__invalid_submenuContainer, children: [(0, i.jsx)("div", { ref: S }), n, s ? (0, i.jsx)(o.ReferencePositionLayer, { targetRef: S, autoInvert: !0, nudgeAlignIntoViewport: !0, fixed: !0, spacing: 4, position: "right", align: "top", children: () => (0, i.jsx)("div", { className: d.submenuPaddingContainer, children: (0, i.jsx)("div", { className: a()(d.submenu, t), ...T, ref: h, children: (0, i.jsx)(u.ScrollerThin, { className: d.scroller, children: c() }) }) }) }) : null] }) } }, 460364: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuSubmenuListItem: function() { return u } }); var i = n("735250"), r = n("470079"), s = n("539907"), a = n("743236"), o = n("695464"), l = n("768160"); function u(e) { let { parentItem: t, isFocused: n, menuSubmenuProps: u, rows: d, rowHeight: _, onScroll: c, listClassName: E } = e, I = r.useRef(null), T = r.useRef(null), f = r.useRef(null), S = r.useRef(null), { isUsingKeyboardNavigation: h, focusIndex: A, ...m } = u; r.useLayoutEffect(() => { var e; n && ((0, a.ensureItemVisible)(I), null === (e = f.current) || void 0 === e || e.focus()) }, [n]), r.useEffect(() => { if (n && A >= 0 && h) { var e; null === (e = S.current) || void 0 === e || e.scrollRowIntoView(A) } }, [n, h, A]); let N = r.useCallback(e => d[e], [d]); return (0, i.jsxs)("div", { ref: I, className: l.__invalid_submenuContainer, children: [(0, i.jsx)("div", { ref: T }), t, n ? (0, i.jsx)(s.ReferencePositionLayer, { targetRef: T, autoInvert: !0, nudgeAlignIntoViewport: !0, fixed: !0, spacing: 4, position: "right", align: "top", children: () => d.length > 0 && (0, i.jsx)("div", { className: l.submenuPaddingContainer, children: (0, i.jsx)("div", { className: l.submenu, ...m, ref: f, children: (0, i.jsx)(o.default, { ref: S, className: E, listPadding: [6, 0, 6, 8], onScroll: c, renderRow: N, rowCount: d.length, rowHeight: _ }) }) }) }) : null] }) } }, 788314: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CheckboxItem: function() { return i.MenuCheckboxItem }, CompositeControlItem: function() { return s.MenuCompositeControlItem }, ControlItem: function() { return r.MenuControlItem }, CustomItem: function() { return a.MenuCustomItem }, Group: function() { return o.MenuGroup }, Item: function() { return l.MenuItem }, RadioItem: function() { return u.MenuRadioItem }, Separator: function() { return d.MenuSeparator }, SubmenuItem: function() { return _.MenuSubmenuItem }, SubmenuListItem: function() { return c.MenuSubmenuListItem } }); var i = n("592282"), r = n("526714"), s = n("402084"), a = n("756710"), o = n("911810"), l = n("504135"), u = n("867333"), d = n("153758"), _ = n("480962"), c = n("460364") }, 878678: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ConfirmModal: function() { return _ }, DeclarativeConfirmModal: function() { return c } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("693789"), l = n("260034"), u = n("709692"), d = n("169935"); function _(e) { let t, n, { header: s, children: _, confirmText: c, cancelText: E, className: I, onConfirm: T, onCancel: f, onClose: S, onCloseCallback: h, bodyClassName: A, transitionState: m, loading: N = !1, confirmButtonColor: p = o.Button.Colors.RED, focusCancel: O = !1 } = e, C = r.useRef(null); return r.useEffect(() => { !O && setTimeout(() => { var e; return null === (e = C.current) || void 0 === e ? void 0 : e.focus() }, 0) }, [O]), r.useLayoutEffect(() => () => null == h ? void 0 : h()), null != E && (t = (0, i.jsx)(o.Button, { type: "button", look: o.Button.Looks.LINK, color: o.Button.Colors.PRIMARY, disabled: N, onClick: () => { null == f || f(), S() }, autoFocus: O, children: E })), null != c && (n = (0, i.jsx)(o.Button, { buttonRef: C, type: "submit", color: p, submitting: N, onClick: async () => { try { await (null == T ? void 0 : T()), S() } catch (e) { throw e } }, autoFocus: !O, children: c })), (0, i.jsxs)(u.ModalRoot, { className: I, transitionState: m, children: [null != s ? (0, i.jsx)(u.ModalHeader, { separator: !1, children: (0, i.jsx)(l.Heading, { variant: "heading-lg/semibold", children: s }) }) : null, (0, i.jsx)(u.ModalContent, { className: a()(d.content, A), children: _ }), (0, i.jsxs)(u.ModalFooter, { children: [n, t] })] }) } function c(e) { return (0, i.jsx)(u.Modal, { onCloseRequest: e.dismissable ? e.onCancel : null, renderModal: t => (0, i.jsx)(_, { ...t, ...e }) }) } }, 709692: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Modal: function() { return u } }), n("47120"); var i = n("470079"), r = n("97613"), s = n.n(r), a = n("952265"), o = n("307616"), l = n("466377"); function u(e) { let { renderModal: t, onCloseRequest: n, onCloseCallback: r } = e, [l] = i.useState(() => s()()), u = (0, o.useModalContext)(); i.useLayoutEffect(() => ((0, a.openModal)(t, { modalKey: l, onCloseRequest: n, onCloseCallback: r }, u), () => { (0, a.closeModal)(l, u) }), []); let d = i.useRef(!0); return i.useLayoutEffect(() => { !d.current && (0, a.updateModal)(l, t, n, r, u), d.current = !1 }, [t, n]), null } n.es(l, t) }, 952265: function(e, t, n) { "use strict"; n.r(t), n.d(t, { closeAllModals: function() { return p }, closeModal: function() { return f }, getInteractingModalContext: function() { return _ }, hasAnyModalOpen: function() { return A }, hasAnyModalOpenSelector: function() { return h }, hasModalOpen: function() { return C }, hasModalOpenSelector: function() { return O }, modalContextFromAppContext: function() { return c }, openModal: function() { return T }, openModalLazy: function() { return I }, updateModal: function() { return S }, useHasAnyModalOpen: function() { return m }, useIsModalAtTop: function() { return N }, useModalsStore: function() { return E } }), n("411104"), n("47120"), n("571269"), n("298267"); var i = n("97613"), r = n.n(i), s = n("652874"), a = n("40851"), o = n("602091"), l = n("981631"); let u = n("338305").default, d = [o.DEFAULT_MODAL_CONTEXT, o.POPOUT_MODAL_CONTEXT]; function _() { let e = (0, a.getCurrentlyInteractingAppContext)(); return null != e ? c(e) : o.DEFAULT_MODAL_CONTEXT } function c(e) { return e === l.AppContext.POPOUT ? o.POPOUT_MODAL_CONTEXT : o.DEFAULT_MODAL_CONTEXT } let E = (0, s.default)(e => ({ [o.DEFAULT_MODAL_CONTEXT]: [], [o.POPOUT_MODAL_CONTEXT]: [] })); async function I(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { contextKey: n = _(), ...i } = t, s = null != t.modalKey ? t.modalKey : r()(), a = !1, o = setTimeout(() => { a = !0, T(u, { ...i, modalKey: s }, n) }, 300), l = await e(); return clearTimeout(o), a ? C(s, n) && S(s, l, i.onCloseRequest, i.onCloseCallback, n) : T(l, { ...i, modalKey: s }, n), s } function T(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Object.freeze({}), n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : _(), { modalKey: i, instant: s, Layer: a, onCloseRequest: o, onCloseCallback: l, backdropStyle: u } = t, d = null != i ? i : r()(); return E.setState(t => { let i = t[n]; return void 0 !== i && i.some(e => { let { key: t } = e; return t === d }) ? t : { ...t, [n]: [...i, { key: d, Layer: a, render: e, onCloseRequest: null != o ? o : () => f(d, n), onCloseCallback: l, instant: s, backdropStyle: u }] } }), d } function f(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : _(), n = E.getState()[t], i = null != n ? n.find(t => { let { key: n } = t; return n === e }) : null; E.setState(n => void 0 === n[t] ? n : { ...n, [t]: n[t].filter(t => { let { key: n } = t; return n !== e }) }), null != i && null != i.onCloseCallback && i.onCloseCallback() } function S(e, t, n, i) { let r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : _(); E.setState(s => void 0 === s[r] ? s : { ...s, [r]: s[r].map(s => s.key === e ? { ...s, render: t, onCloseRequest: null == n ? () => f(e, r) : n, onCloseCallback: i } : s) }) } function h(e) { for (let t of d) { let n = e[t]; if (null != n && n.length > 0) return !0 } return !1 } function A() { return h(E.getState()) } function m() { return h(E()) } function N(e) { var t, n; let { default: i, popout: r } = E(); return r.length > 0 ? (null === (t = r.at(-1)) || void 0 === t ? void 0 : t.key) === e : (null === (n = i.at(-1)) || void 0 === n ? void 0 : n.key) === e } function p() { let e = E.getState(); for (let t in e) for (let n of e[t]) f(n.key, t) } function O(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : o.DEFAULT_MODAL_CONTEXT, i = e[n]; return null != i && i.some(e => e.key === t) } function C(e, t) { return O(E.getState(), e, t) } }, 466377: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ModalCloseButton: function() { return M }, ModalContent: function() { return v }, ModalFooter: function() { return D }, ModalHeader: function() { return L }, ModalListContent: function() { return y }, ModalRoot: function() { return g }, ModalSize: function() { return r } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("920906"), d = n("990547"), _ = n("748780"), c = n("186325"), E = n("693789"), I = n("507274"), T = n("84735"), f = n("337033"), S = n("742746"), h = n("147479"), A = n("285952"), m = n("465670"), N = n("602091"), p = n("231338"), O = n("689938"), C = n("721790"); (i = r || (r = {})).SMALL = "small", i.MEDIUM = "medium", i.LARGE = "large", i.DYNAMIC = "dynamic"; let R = Object.freeze({ small: C.small, medium: C.medium, large: C.large, dynamic: null }); function g(e) { var t; let { transitionState: n, children: i, size: r = "small", role: o = "dialog", className: E, fullscreenOnMobile: f = !0, hideShadow: S = !1, onAnimationEnd: h = p.NOOP, returnRef: A, ...m } = e, O = n === N.ModalTransitionState.ENTERING || n === N.ModalTransitionState.ENTERED, { reducedMotion: g } = a.useContext(c.AccessibilityPreferencesContext), L = (0, u.useSpring)({ opacity: O ? 1 : 0, transform: O || g.enabled ? "scale(1)" : "scale(0.7)", config: { duration: O ? 300 : 100, easing: O ? _.default.Easing.inOut(_.default.Easing.back()) : _.default.Easing.quad, clamp: !0 }, onRest: h }), v = a.useRef(null), D = null != m["aria-label"], M = null != m["aria-labelledby"], y = a.useId(), P = null !== (t = m["aria-labelledby"]) && void 0 !== t ? t : y, U = a.useMemo(() => ({ headerId: P, headerIdIsManaged: M }), [P, M]); return (0, s.jsx)(N.ModalContentContext.Provider, { value: U, children: (0, s.jsx)(I.Dialog, { className: C.focusLock, role: o, returnRef: A, impressionType: d.ImpressionTypes.MODAL, "aria-labelledby": D ? void 0 : U.headerId, ...m, children: (0, s.jsx)(u.animated.div, { className: l()(E, C.root, R[r], { [C.fullscreenOnMobile]: f, [C.rootWithShadow]: !S }), ref: v, style: L, children: (0, s.jsx)(T.FocusRingScope, { containerRef: v, children: i }) }) }) }) } function L(e) { var t, n, i, r, o; let { headerId: u, headerIdIsManaged: d } = a.useContext(N.ModalContentContext); return (0, s.jsx)(A.default, { grow: 0, shrink: 0, direction: null !== (t = e.direction) && void 0 !== t ? t : A.default.Direction.HORIZONTAL, justify: null !== (n = e.justify) && void 0 !== n ? n : A.default.Justify.START, align: null !== (i = e.align) && void 0 !== i ? i : A.default.Align.CENTER, wrap: null !== (r = e.wrap) && void 0 !== r ? r : A.default.Wrap.NO_WRAP, className: l()(C.header, e.className, { [C.separator]: null === (o = e.separator) || void 0 === o || o }), id: d ? void 0 : u, children: e.children }) } function v(e) { let { className: t, children: n, scrollerRef: i, scrollbarType: r, ...a } = e, o = function(e) { switch (null != e ? e : "thin") { case "auto": return h.AdvancedScrollerAuto; case "none": return h.AdvancedScrollerNone; default: return h.AdvancedScrollerThin } }(r); return (0, s.jsx)(o, { className: l()(C.content, t), ref: i, ...a, children: (0, s.jsx)(f.HeadingLevel, { children: n }) }) } function D(e) { var t, n, i, r, a; return (0, s.jsx)(A.default, { grow: 0, shrink: 0, direction: null !== (t = e.direction) && void 0 !== t ? t : A.default.Direction.HORIZONTAL_REVERSE, justify: null !== (n = e.justify) && void 0 !== n ? n : A.default.Justify.START, align: null !== (i = e.align) && void 0 !== i ? i : A.default.Align.STRETCH, wrap: null !== (r = e.wrap) && void 0 !== r ? r : A.default.Wrap.NO_WRAP, className: l()(C.footer, e.className, { [C.footerSeparator]: null === (a = e.separator) || void 0 === a || a }), children: (0, s.jsx)(f.HeadingLevel, { children: e.children }) }) } function M(e) { return (0, s.jsx)(E.Button, { focusProps: e.focusProps, "aria-label": O.default.Messages.CLOSE, look: E.Button.Looks.BLANK, size: E.Button.Sizes.NONE, onClick: e.onClick, innerClassName: l()({ [C.closeWithCircleBackground]: e.withCircleBackground }), className: l()(e.className, { [C.hideOnFullscreen]: e.hideOnFullscreen, [C.close]: !e.withCircleBackground }), children: (0, s.jsx)(m.default, { width: 24, height: 24, className: C.closeIcon }) }) } function y(e) { let { className: t, scrollerRef: n, ...i } = e; return (0, s.jsx)(S.ListThin, { className: t, ref: n, ...i }) } }, 602091: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_MODAL_CONTEXT: function() { return o }, ModalContentContext: function() { return u }, ModalTransitionState: function() { return r }, POPOUT_MODAL_CONTEXT: function() { return l }, TRANSITION_DURATION: function() { return a } }); var i, r, s = n("470079"); (i = r || (r = {}))[i.ENTERING = 0] = "ENTERING", i[i.ENTERED = 1] = "ENTERED", i[i.EXITING = 2] = "EXITING", i[i.EXITED = 3] = "EXITED", i[i.HIDDEN = 4] = "HIDDEN"; let a = 300, o = "default", l = "popout", u = s.createContext({ headerId: void 0, headerIdIsManaged: !1 }) }, 307616: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Modals: function() { return C }, useModalContext: function() { return p } }), n("47120"), n("411104"), n("852437"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("215569"), d = n("40851"), _ = n("468436"), c = n("153850"), E = n("78415"), I = n("585483"), T = n("952265"), f = n("602091"), S = n("981631"), h = n("642049"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let m = [c.default, E.default]; class N extends r.PureComponent { render() { let { render: e, LayerComponent: t, isTopModal: n, instant: r } = this.props, { transitionState: s } = this.state; return (s === f.ModalTransitionState.ENTERING || s === f.ModalTransitionState.ENTERED) && !n && (s = f.ModalTransitionState.HIDDEN), r && (s = f.ModalTransitionState.ENTERED), (0, i.jsx)(t, { children: (0, i.jsx)("div", { className: a()(h.layer, !n && h.hidden), children: e({ transitionState: s, onClose: this.close }) }) }) } constructor(...e) { super(...e), A(this, "state", { transitionState: null }), A(this, "componentWillAppear", e => { this.componentWillEnter(e) }), A(this, "componentWillEnter", e => { let { instant: t } = this.props; this.setState({ transitionState: f.ModalTransitionState.ENTERING }), setTimeout(() => { this.setState({ transitionState: f.ModalTransitionState.ENTERED }), e() }, t ? 0 : f.TRANSITION_DURATION) }), A(this, "componentWillLeave", e => { let { instant: t } = this.props; this.setState({ transitionState: f.ModalTransitionState.EXITING }), setTimeout(() => { this.setState({ transitionState: f.ModalTransitionState.EXITED }), e() }, t ? 0 : f.TRANSITION_DURATION) }), A(this, "close", () => new Promise(e => { this.props.closeModal(this.props.modalKey), setTimeout(() => e(), f.TRANSITION_DURATION) })) } } function p() { return (0, T.modalContextFromAppContext)((0, d.useAppContext)()) } let O = []; function C() { let e = p(), t = (0, T.useModalsStore)(t => void 0 !== t[e] ? t[e] : O), n = r.useRef(); r.useLayoutEffect(() => { n.current = t[t.length - 1] }, [t]); let s = t.length > 0; r.useLayoutEffect(() => { if (!s) return; let e = () => { let e = n.current; null != e && null != e.onCloseRequest && e.onCloseRequest() }; return I.ComponentDispatch.subscribe(S.ComponentActions.MODAL_CLOSE, e), () => { I.ComponentDispatch.unsubscribe(S.ComponentActions.MODAL_CLOSE, e) } }, [s]); let a = r.useCallback(() => { let e = n.current; null != e && null != e.onCloseRequest && e.onCloseRequest() }, []), o = r.useCallback(t => { (0, T.closeModal)(t, e) }, [e]), d = m.map(e => t.some(t => t.Layer === e || null == t.Layer && e === c.default)); return (0, i.jsxs)(u.TransitionGroup, { component: r.Fragment, children: [m.map((e, n) => { var r; let s = l().findLast(t, t => t.Layer === e || null == t.Layer && e === c.default); return (0, i.jsx)(_.default, { isVisible: d[n], backdropStyle: null !== (r = null == s ? void 0 : s.backdropStyle) && void 0 !== r ? r : _.BackdropStyles.DARK, onClose: a, LayerComponent: e, backdropInstant: null == s ? void 0 : s.instant }, "layer-".concat(n)) }), t.map((e, n) => { let { key: r, Layer: s, render: a, instant: l } = e; return (0, i.jsx)(N, { modalKey: r, LayerComponent: null != s ? s : c.default, isTopModal: n === t.length - 1, render: a, closeModal: o, instant: l }, r) })] }) } }, 338305: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("922770"), s = n("466377"), a = n("689938"), o = n("721790"); function l(e) { return (0, i.jsx)(s.ModalRoot, { ...e, "aria-label": a.default.Messages.LOADING, size: s.ModalSize.SMALL, children: (0, i.jsx)("div", { className: o.spinnerContainer, children: (0, i.jsx)(r.Spinner, {}) }) }) } }, 889963: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PaginationController: function() { return d }, PaginationTypes: function() { return i } }), n("47120"), n("653041"); var i, r, s, a = n("470079"), o = n("392711"), l = n.n(o); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).PAGE = "PAGE", s.GAP = "GAP", s.BACK = "BACK", s.NEXT = "NEXT"; class d extends(r = a.PureComponent) { getNeighborBounds() { let { totalPageCount: e, maxVisiblePages: t, selectedPage: n } = this.props, i = Math.ceil(t / 2), r = Math.floor(t / 2), s = [1, e], [a, o] = s = n <= i ? [1, t] : n > e - r ? [e - t + 1, e] : [n - i + 1, n + r]; return [Math.max(a, 1), Math.min(o, e)] } getPageList() { let { totalPageCount: e, selectedPage: t, hideMaxPage: n } = this.props, [i, r] = this.getNeighborBounds(), s = { type: "BACK", key: "back", disabled: 1 === t, selected: !1, navigateToPage: this.handleBackward }, a = { type: "NEXT", key: "next", disabled: t === e, selected: !1, navigateToPage: this.handleForward }, o = [], u = []; return i > 1 && (o = [{ type: "PAGE", key: "page-1", targetPage: 1, navigateToPage: () => this.handleJump(1) }, { type: "GAP", key: "left-gap" }], i += 2), r < e && (u = [{ type: "GAP", key: "right-gap" }], !n && u.push({ type: "PAGE", key: "page-".concat(e), targetPage: e, navigateToPage: () => this.handleJump(e) }), r -= 2), [s, ...o, ...l().range(i, r + 1).map(e => ({ type: "PAGE", key: "page-".concat(e), targetPage: e, selected: e === t, disabled: !1, navigateToPage: () => this.handleJump(e) })), ...u, a] } render() { let { totalPageCount: e, children: t } = this.props; return t({ pages: this.getPageList(), hasMultiplePages: e > 1 }) } constructor(...e) { super(...e), u(this, "changePageTo", e => { let { selectedPage: t, onPageChange: n } = this.props; t !== e && null != n && n(e) }), u(this, "handleForward", () => { this.changePageTo(Math.min(this.props.selectedPage + 1, this.props.totalPageCount)) }), u(this, "handleBackward", () => { this.changePageTo(Math.max(this.props.selectedPage - 1, 1)) }), u(this, "handleJump", e => { this.changePageTo(e) }) } } u(d, "defaultProps", { maxVisiblePages: 9, hideMaxPage: !1 }) }, 4738: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Paginator: function() { return S } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("693789"), l = n("1561"), u = n("260034"), d = n("463208"), _ = n("292937"), c = n("692437"), E = n("889963"), I = n("689938"), T = n("819234"); function f(e) { let { page: t, totalPageCount: n, disabled: s, onPageChange: o } = e, [_, c] = r.useState(!1), [E, I] = r.useState(null), f = null != E && E >= 1 && E <= n; return s ? (0, i.jsx)(u.Heading, { className: T.gap, "aria-hidden": !0, variant: "heading-sm/semibold", children: "…" }, t.key) : _ ? (0, i.jsx)(d.TextInput, { autoFocus: !0, className: T.jumpToPageInlineInput, size: d.TextInput.Sizes.MINI, value: null == E ? "" : "".concat(E), onChange: e => { let t = parseInt(e); if ("" === e || isNaN(t)) { I(null); return } I(t) }, onBlur: () => { c(!1), I(null) }, onKeyPress: e => { "Enter" === e.key && null != E && f && (o(E), c(!1), I(null)) }, disabled: s }, t.key) : (0, i.jsx)(l.Clickable, { onClick: () => c(!0), children: (0, i.jsx)(u.Heading, { className: a()(T.roundButton, T.gap), "aria-hidden": !0, variant: "heading-sm/semibold", children: "…" }) }, t.key) } function S(e) { let { currentPage: t, totalCount: n, pageSize: r, maxVisiblePages: s, disablePaginationGap: u, onPageChange: d, hideMaxPage: S = !1, className: h } = e, A = Math.ceil(n / r); return (0, i.jsx)(E.PaginationController, { totalPageCount: A, selectedPage: t, maxVisiblePages: s, hideMaxPage: S, onPageChange: function(e) { null != d && d(e) }, children: function(e) { let { pages: t, hasMultiplePages: n } = e; return n ? (0, i.jsx)("div", { className: a()(T.pageControlContainer, h), children: (0, i.jsx)("nav", { className: T.pageControl, children: t.map(e => { var t, n; switch (e.type) { case E.PaginationTypes.BACK: return function(e) { let { key: t, disabled: n, navigateToPage: r } = e; return (0, i.jsxs)(o.Button, { className: T.endButton, innerClassName: T.endButtonInner, look: o.Button.Looks.BLANK, color: o.Button.Colors.TRANSPARENT, onClick: r, disabled: n, rel: "prev", children: [(0, i.jsx)(_.default, { className: T.iconCaret, "aria-hidden": !0 }), (0, i.jsx)("span", { children: I.default.Messages.BACK })] }, t) }(e); case E.PaginationTypes.PAGE: ; return t = e, (0, i.jsx)(l.Clickable, { className: a()(T.roundButton, { [T.activeButton]: t.selected }), onClick: t.selected ? void 0 : t.navigateToPage, "aria-label": I.default.Messages.PAGINATION_PAGE_LABEL.format({ pageNumber: t.targetPage }), "aria-current": t.selected ? "page" : void 0, children: (0, i.jsx)("span", { children: t.targetPage }) }, t.key); case E.PaginationTypes.GAP: ; return n = e, (0, i.jsx)(f, { page: n, totalPageCount: A, disabled: !!u, onPageChange: d }, n.key); case E.PaginationTypes.NEXT: return function(e) { let { key: t, disabled: n, navigateToPage: r } = e; return (0, i.jsxs)(o.Button, { className: T.endButton, innerClassName: T.endButtonInner, look: o.Button.Looks.BLANK, color: o.Button.Colors.TRANSPARENT, onClick: r, disabled: n, rel: "next", children: [(0, i.jsx)("span", { children: I.default.Messages.NEXT }), (0, i.jsx)(c.default, { className: T.iconCaret, "aria-hidden": !0 })] }, t) }(e); default: return null } }) }) }) : null } }) } }, 930295: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BasePopout: function() { return p } }), n("47120"), n("411104"); var i, r = n("735250"), s = n("470079"), a = n("97613"), o = n.n(a), l = n("699581"), u = n.n(l), d = n("374470"), _ = n("846519"), c = n("337033"), E = n("302901"), I = n("539907"), T = n("952265"), f = n("40851"), S = n("153850"), h = n("920676"), A = n("981631"); function m(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let N = new Set(["Spacebar", " ", "Enter"]); class p extends(i = s.Component) { shouldShowPopout(e, t) { return null != e.shouldShow ? e.shouldShow : t.shouldShowPopout } componentDidMount() { this.shouldShowPopout(this.props, this.state) && this.setupShowPopout() } componentDidUpdate(e, t) { e.shouldShow, this.props.shouldShow; let n = this.shouldShowPopout(this.props, this.state); if ((this.shouldShowPopout(e, t) !== n || t.isLoading !== this.state.isLoading) && (n ? this.setupShowPopout() : this.unsubscribe()), this.props.closeOnScroll !== e.closeOnScroll) { var i, r; let e = this.getDomElement(); this.props.closeOnScroll ? null === (i = e.ownerDocument) || void 0 === i || i.addEventListener("scroll", this.close, !0) : null === (r = e.ownerDocument) || void 0 === r || r.removeEventListener("scroll", this.close, !0) } } getDomElement() { let e = u().findDOMNode(this); if (!(0, d.isElement)(e)) throw Error("Popout cannot find DOM node"); return e } setupShowPopout() { var e, t, n; let i = this.getDomElement(); null === (e = i.ownerDocument) || void 0 === e || e.addEventListener("mousedown", this.handleDocumentMouseDown, !0), null === (t = i.ownerDocument) || void 0 === t || t.addEventListener("mouseup", this.handleDocumentMouseUp, !0), this.props.closeOnScroll && (null === (n = i.ownerDocument) || void 0 === n || n.addEventListener("scroll", this.close, !0)), this.context.windowDispatch.subscribe(A.ComponentActions.POPOUT_CLOSE, this.close), this.domElementRef.current = i, this.isValidClickStart = !1, this.forceUpdate() } unsubscribe() { var e, t, n, i; let r = this.domElementRef.current; null != r && (null === (t = r.ownerDocument) || void 0 === t || t.removeEventListener("mousedown", this.handleDocumentMouseDown, !0), null === (n = r.ownerDocument) || void 0 === n || n.removeEventListener("mouseup", this.handleDocumentMouseUp, !0), null === (i = r.ownerDocument) || void 0 === i || i.removeEventListener("scroll", this.close, !0)), this.context.windowDispatch.unsubscribe(A.ComponentActions.POPOUT_CLOSE, this.close), null === (e = this.resizeObserver) || void 0 === e || e.disconnect() } componentWillUnmount() { this.unsubscribe(), this.domElementRef.current = null, this.loadingTimeout.stop(), this.validClickTimeout.stop() } render() { let { children: e, useMouseEnter: t } = this.props, n = this.shouldShowPopout(this.props, this.state); return (0, r.jsxs)(s.Fragment, { children: [e({ onMouseDown: this.handlePreload, ...t ? { onMouseEnter: this.handleMouseEnter } : {}, onKeyDown: this.handleKeyboardPreload, onClick: this.handleClick, "aria-controls": n ? this.popoutId : void 0, "aria-expanded": n }, { isShown: n, position: this.state.renderedPosition }), (0, r.jsx)(c.HeadingLevel, { forceLevel: 2, children: this.renderLayer() })] }) } renderLayer() { if (!this.shouldShowPopout(this.props, this.state) || null == this.domElementRef.current) return null; let { position: e, align: t, nudgeAlignIntoViewport: n, useRawTargetDimensions: i, spacing: s, autoInvert: a, fixed: o, positionKey: l, disablePointerEvents: u, layerContext: d } = this.props, { resizeKey: _, isLoading: c, shouldShowLoadingState: T } = this.state; return c && !T ? null : (0, r.jsx)(E.Layer, { layerContext: null != d ? d : S.appLayerContext, children: (0, r.jsx)(I.ReferencePositionLayer, { ref: this.layerRef, onMount: this.handlePopoutShow, onUnmount: this.handlePopoutHide, id: this.popoutId, targetRef: this.domElementRef, position: e, align: t, nudgeAlignIntoViewport: n, useRawTargetDimensions: i, spacing: s, autoInvert: a, fixed: o, positionKey: null != l ? l : String(_), disablePointerEvents: u, onPositionChange: this.handlePopoutPositionChange, children: this.renderPopout }) }) } toggleShow(e) { this.state.shouldShowPopout !== e && this.setState({ shouldShowPopout: e }) } constructor(...e) { super(...e), m(this, "domElementRef", s.createRef()), m(this, "layerRef", s.createRef()), m(this, "popoutRef", s.createRef()), m(this, "resizeObserver", void 0), m(this, "popoutId", "popout_".concat(o()())), m(this, "loadingTimeout", new _.Timeout), m(this, "validClickTimeout", new _.Timeout), m(this, "isValidClickStart", !1), m(this, "state", { renderedPosition: this.props.position, shouldShowPopout: !1, shouldShowLoadingState: !1, isLoading: !1, resizeKey: 0 }), m(this, "handlePopoutShow", () => { this.context.windowDispatch.dispatch(A.ComponentActions.POPOUT_SHOW) }), m(this, "handlePopoutHide", () => { this.context.windowDispatch.dispatch(A.ComponentActions.POPOUT_HIDE) }), m(this, "handleSetPopoutRef", e => { var t; let n = null == e ? void 0 : e.ownerDocument.defaultView; null != e && null != n && (this.popoutRef.current = e, null === (t = this.resizeObserver) || void 0 === t || t.disconnect(), this.resizeObserver = new n.ResizeObserver(() => { u().flushSync(() => { this.setState({ resizeKey: this.state.resizeKey + 1 }) }) }), this.resizeObserver.observe(e)) }), m(this, "renderPopout", (e, t) => { let { renderPopout: n } = this.props; return this.state.isLoading ? this.props.loadingComponent : n({ ...e, updatePosition: t, closePopout: this.close, setPopoutRef: this.handleSetPopoutRef }) }), m(this, "close", () => { let { onRequestClose: e, shouldShow: t } = this.props; null == e || e(), null == t && this.toggleShow(!1) }), m(this, "handleClick", e => { let { onShiftClick: t, shouldShow: n, onRequestOpen: i, onRequestClose: r } = this.props; if (e.shiftKey && null != t) { t(e); return } let s = null != n; (s ? n : this.state.shouldShowPopout) ? null == r || r(): null == i || i(), !s && this.setState(e => { let { shouldShowPopout: t } = e; return { shouldShowPopout: !t } }) }), m(this, "handleMouseEnter", () => { let { onRequestOpen: e } = this.props; null == e || e(), this.setState({ shouldShowPopout: !0 }) }), m(this, "handlePreload", async () => { let { preload: e } = this.props; if (null != e) { this.setState({ isLoading: !0 }), this.loadingTimeout.start(250, () => this.setState({ shouldShowLoadingState: !0 }), !1); try { await e() } finally { this.setState({ isLoading: !1 }) } } }), m(this, "handleKeyboardPreload", e => { N.has(e.key) && this.handlePreload() }), m(this, "handleDocumentMouseDown", e => { let { ignoreModalClicks: t } = this.props, n = e.target, i = this.domElementRef.current; if (null != i) { if ((0, I.referencePortalAwareContains)(i, n) || t && (0, T.hasAnyModalOpen)()) return; this.isValidClickStart = !0 } }), m(this, "handleDocumentMouseUp", () => { this.isValidClickStart && (this.isValidClickStart = !1, this.close()) }), m(this, "handlePopoutPositionChange", e => { this.setState({ renderedPosition: e }) }) } } m(p, "defaultProps", { autoInvert: !1, nudgeAlignIntoViewport: !1, spacing: 0, loadingComponent: (0, r.jsx)(h.LoadingPopout, {}) }), m(p, "contextType", f.default) }, 920676: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LoadingPopout: function() { return o } }); var i = n("735250"); n("470079"); var r = n("507274"), s = n("922770"), a = n("63351"); function o() { return (0, i.jsx)(r.Dialog, { className: a.loadingPopout, children: (0, i.jsx)(s.Spinner, { type: s.SpinnerTypes.SPINNING_CIRCLE }) }) } }, 235874: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LazyPopout: function() { return T }, Popout: function() { return I } }), n("411104"), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("922770"), u = n("930295"), d = n("126306"), _ = n("900975"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).NONE = "1", s.TRANSLATE = "2", s.SCALE = "3", s.FADE = "4"; let E = Object.freeze({ 2: d.PopoutCSSAnimator.Types.TRANSLATE, 3: d.PopoutCSSAnimator.Types.SCALE, 4: d.PopoutCSSAnimator.Types.FADE }); class I extends(r = o.Component) { render() { let { children: e, shouldShow: t, position: n, onRequestOpen: i, onRequestClose: r, align: s, autoInvert: o, fixed: l, nudgeAlignIntoViewport: d, useRawTargetDimensions: _, spacing: c, onShiftClick: E, positionKey: I, preload: T, disablePointerEvents: f, ignoreModalClicks: S, closeOnScroll: h, useMouseEnter: A, renderPopout: m, layerContext: N } = this.props; return (0, a.jsx)(u.BasePopout, { ref: this.ref, preload: T, position: n, align: null != s ? s : function(e) { switch (e) { case "top": case "bottom": return "left"; case "left": case "right": return "top"; case "center": case "window_center": return "center" } throw Error("Unexpected position: ".concat(e)) }(n), autoInvert: o, fixed: l, nudgeAlignIntoViewport: d, useRawTargetDimensions: _, renderPopout: this.renderPopout, spacing: c, shouldShow: null != m && t, onRequestOpen: i, onRequestClose: r, onShiftClick: E, positionKey: I, disablePointerEvents: f, ignoreModalClicks: S, closeOnScroll: h, useMouseEnter: A, layerContext: N, children: e }) } constructor(...e) { super(...e), c(this, "ref", o.createRef()), c(this, "renderPopout", e => { let { renderPopout: t, animation: n, animationPosition: i } = this.props; switch (null != i && null != e.position && (e.position = i), n) { case "2": case "3": case "4": return (0, a.jsx)(d.PopoutCSSAnimator, { position: e.position, type: E[n], children: t(e) }); case "1": return t(e) } throw Error("Unsupported animation config: ".concat(JSON.stringify(n))) }) } } function T(e) { let { renderPopout: t, ...n } = e, i = o.useRef(null), [r, s] = o.useState(0); function u() { return c(), (0, a.jsx)(a.Fragment, {}) } o.useLayoutEffect(() => { if (r > 0) { var e, t, n, s, a; null === (a = i.current) || void 0 === a || null === (s = a.ref) || void 0 === s || null === (n = s.current) || void 0 === n || null === (t = n.layerRef) || void 0 === t || null === (e = t.current) || void 0 === e || e.updatePosition() } }, [r]), o.useEffect(() => { let e = setTimeout(t, 20 + 20 * Math.random()); return () => clearTimeout(e) }, []); let d = o.useRef(!1); async function c() { if (!d.current) { d.current = !0; let e = setTimeout(() => { f(() => E), s(e => e + 1) }, 300), n = await t(); f(() => n), s(e => e + 1), clearTimeout(e) } } function E() { var e, t, n, r; let s = null === (r = i.current) || void 0 === r ? void 0 : null === (n = r.ref) || void 0 === n ? void 0 : null === (t = n.current) || void 0 === t ? void 0 : null === (e = t.domElementRef) || void 0 === e ? void 0 : e.current, o = Math.max(100, null == s ? 100 : s.offsetWidth - 20); return (0, a.jsx)("div", { className: _.loader, style: { width: o }, children: (0, a.jsx)(l.Spinner, {}) }) } let [T, f] = o.useState(() => u); return o.useEffect(() => { d.current ? t().then(e => { f(() => e), s(e => e + 1) }) : f(u) }, [t]), (0, a.jsx)(I, { ref: i, ...n, renderPopout: T }) } c(I, "Animation", i), c(I, "defaultProps", { position: "right", autoInvert: !0, nudgeAlignIntoViewport: !0, spacing: 8, animation: "2", positionKey: void 0 }), T.Animation = i }, 126306: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PopoutCSSAnimator: function() { return I } }), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("846519"), d = n("186325"), _ = n("790231"); (r = i || (i = {}))[r.TRANSLATE = 1] = "TRANSLATE", r[r.SCALE = 2] = "SCALE", r[r.FADE = 3] = "FADE"; let c = Object.freeze({ 1: _.translate, 2: _.scale, 3: _.fade }), E = Object.freeze({ top: _.animatorTop, bottom: _.animatorBottom, left: _.animatorLeft, right: _.animatorRight, center: _.animatorCenter, window_center: _.animatorCenter }); function I(e) { let { position: t, type: n, children: i } = e, { reducedMotion: r } = a.useContext(d.AccessibilityPreferencesContext), o = r.enabled ? 3 : n, [I, T] = a.useState(null != t), [f] = a.useState(() => new u.Timeout); return a.useEffect(() => () => f.stop(), [f]), a.useEffect(() => { null != t && f.start(10, () => T(!0)) }, [t, f]), (0, s.jsx)("div", { className: l()(null != t ? E[t] : null, { [c[o]]: null != t, [_.didRender]: I }), children: i }) } I.Types = i }, 119638: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PopoutList: function() { return f } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("507274"), d = n("770102"), _ = n("6048"), c = n("679342"), E = n("688572"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class T extends(i = a.PureComponent) { render() { let { className: e, ...t } = this.props; return (0, s.jsx)(_.default, { ...t, className: l()(E.popoutListInput, e) }) } } I(T, "defaultProps", { autoFocus: !0 }); class f extends(r = a.PureComponent) { render() { let { className: e, children: t } = this.props; return (0, s.jsx)(u.Dialog, { className: l()(E.popoutList, e), "aria-label": this.props["aria-label"], children: t }) } } I(f, "SearchBar", T), I(f, "Item", c.default), I(f, "Divider", () => (0, s.jsx)(d.FormDivider, { className: E.divider })), I(f, "Empty", e => { let { children: t } = e; return (0, s.jsx)("div", { className: E.popoutListEmpty, children: t }) }) }, 655904: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Progress: function() { return c } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("692547"), d = n("855616"); (i = r || (r = {})).XSMALL = "xsmall", i.SMALL = "small", i.LARGE = "large"; let _ = "indeterminate"; function c(e) { let t, { className: n, percent: i, size: r = "small", foregroundColor: o = u.default.unsafe_rawColors.BRAND_500.css, backgroundColor: c = "var(--background-modifier-active)", foregroundGradientColor: E, animate: I = !0 } = e, T = null != i ? i : 0; return t = null != E ? { background: "linear-gradient(to right, ".concat(E[0], ", ").concat(E[1], ")") } : { backgroundColor: o }, (0, s.jsx)("div", { className: l()(n, d.progress, d[r]), style: { backgroundColor: c }, children: T !== _ && "number" == typeof T ? (0, s.jsx)("div", { className: l()(d.progressBar, d[r], { [d.animating]: I }), style: { transform: "translate3d(".concat(Math.min(Math.max(0, T), 100) - 100, "%, 0, 0)"), ...t } }) : (0, s.jsxs)(a.Fragment, { children: [(0, s.jsx)("div", { className: l()(d.indeterminateBar1, d[r], { [d.animating]: I }), style: t }), (0, s.jsx)("div", { className: l()(d.indeterminateBar2, d[r], { [d.animating]: I }), style: t })] }) }) } c.Sizes = r, c.INDETERMINATE = _ }, 278126: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ProgressCircle: function() { return _ } }); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("567580"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = Object.freeze({ SMALL: 1, MEDIUM: 2, LARGE: 4 }); class _ extends(i = s.Component) { renderCircle() { let { strokeSize: e, percent: t, colorOverride: n, background: i } = this.props, s = (20 - e) / 2, a = s * Math.PI * 2; return (0, r.jsxs)("svg", { viewBox: "0 0 ".concat(20, " ").concat(20), className: l.circle, children: [(0, r.jsx)("circle", { className: l.circleBackgroundAlt, cx: 10, cy: 10, r: 10 }), (0, r.jsx)("circle", { className: o()(l.circleBackground, i), cx: 10, cy: 10, r: (20 - 2 * e) / 2 }), (0, r.jsx)("circle", { className: l.circleProgress, cx: 10, cy: 10, r: s, strokeWidth: "".concat(e, "px"), strokeLinecap: "round", transform: "rotate(-90 ".concat(10, " ").concat(10, ")"), stroke: null != n ? n : "currentColor", style: { strokeDasharray: a, strokeDashoffset: (1 - Math.min(Math.max(t, 0), 100) / 100) * a } })] }) } render() { let { className: e, children: t } = this.props; return (0, r.jsxs)("div", { className: o()(l.progressCircle, e), children: [this.renderCircle(), null != t ? (0, r.jsx)("div", { className: l.circleOverlay, children: t }) : null] }) } } u(_, "StrokeSizes", d), u(_, "defaultProps", { strokeSize: d.MEDIUM }) }, 507173: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StackedProgress: function() { return c } }), n("47120"); var i, r, s = n("735250"); n("470079"); var a = n("120356"), o = n.n(a), l = n("392711"), u = n.n(l), d = n("692547"), _ = n("557130"); function c(e) { let { className: t, percents: n, size: i = "small", foregroundColors: r = [d.default.unsafe_rawColors.BRAND_500.css], backgroundColor: a = "var(--background-modifier-active)", animate: l = !0 } = e, c = u().zip(n, r).map((e, t) => { let n, [r, a] = e; return n = Array.isArray(a) ? { background: "linear-gradient(to right, ".concat(a[0], ", ").concat(a[1], ")") } : { backgroundColor: a }, (0, s.jsx)("div", { className: o()(_.progressBar, _[i], { [_.animating]: l }), style: { transform: "translate3d(".concat(Math.min(Math.max(0, r), 100) - 100, "%, 0, 0)"), ...n } }, t) }).reverse(); return (0, s.jsx)("div", { className: o()(t, _.progress, _[i]), style: { backgroundColor: a }, children: c }) }(r = i || (i = {})).XSMALL = "xsmall", r.SMALL = "small", r.LARGE = "large", c.Sizes = i }, 538534: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RadioGroup: function() { return C }, useRadioGroup: function() { return p }, useRadioItem: function() { return O } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("372817"), u = n("1561"), d = n("57260"), _ = n("15127"), c = n("993365"), E = n("981729"), I = n("186523"), T = n("553826"), f = n("981631"), S = n("198029"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = { NOT_SET: "", NONE: "0", SMALL: "7px 10px", MEDIUM: "10px" }; function m(e) { var t; let { disabled: n, checked: i, option: s, size: a, onClick: l, infoClassName: d, titleClassName: _, radioItemClassName: E, radioItemIconClassName: f, radioBarClassName: h, hasSelection: A, radioPosition: m = "left", icon: N, withTransparentBackground: p } = e, O = null !== (t = s.color) && void 0 !== t ? t : "", C = i || !A, R = (0, r.jsxs)("div", { className: f, children: [i ? (0, r.jsx)(T.default, { foreground: S.radioIconForeground }) : (0, r.jsx)(I.default, {}), null != N && (0, r.jsx)(N, { className: S.icon, width: 24, height: 24 })] }); return (0, r.jsx)(u.Clickable, { role: "radio", "aria-checked": i, onClick: n ? void 0 : l, tabIndex: !n && C ? 0 : -1, className: o()(null != s.collapsibleContent ? S.collapsibleItem : S.item, { [S.disabled]: n, [S.itemFilled]: !p }, E), children: (0, r.jsxs)("div", { style: { "--radio-bar-accent-color": O, padding: a }, className: o()(S.radioBar, { [S.radioPositionLeft]: "left" === m, [S.radioPositionRight]: "right" === m }, h), children: ["left" === m ? R : null, (0, r.jsxs)("div", { className: o()(S.info, d), children: [(0, r.jsx)(c.Text, { variant: "text-md/medium", className: _, color: "none", children: s.name }), null != s.desc && "" !== s.desc ? (0, r.jsx)(c.Text, { color: "none", variant: "text-sm/normal", children: s.desc }) : null] }), "right" === m ? R : null] }) }) } class N extends(i = s.PureComponent) { render() { let { checked: e, disabled: t, option: n, size: i, infoClassName: s, hasSelection: a, titleClassName: o, radioItemClassName: l, radioItemIconClassName: u, radioBarClassName: _, collapsibleClassName: c, withTransparentBackground: I, radioPosition: T } = this.props, f = t || n.disabled, { tooltipText: h, tooltipPosition: A, icon: N } = n, p = null != n.collapsibleContent ? (0, r.jsx)(d.Collapsible, { className: c, isExpanded: e, collapsibleContent: n.collapsibleContent, children: t => { let { onClick: d } = t; return (0, r.jsx)(m, { disabled: !!f, checked: e, hasSelection: a, option: n, onClick: e => { this.handleClick(e), d(e) }, size: i, infoClassName: s, titleClassName: o, radioItemClassName: l, radioItemIconClassName: u, radioBarClassName: _, radioPosition: T, icon: N, withTransparentBackground: I }) } }) : (0, r.jsx)(m, { disabled: !!f, checked: e, hasSelection: a, option: n, onClick: this.handleClick, size: i, infoClassName: s, titleClassName: o, radioItemClassName: l, radioItemIconClassName: u, radioBarClassName: _, radioPosition: T, icon: N, withTransparentBackground: I }); return null != h ? (0, r.jsx)(E.Tooltip, { text: h, position: null != A ? A : "top", children: e => (0, r.jsx)("div", { ...e, className: S.tooltipWrapper, children: p }) }) : p } constructor(...e) { super(...e), h(this, "handleClick", e => { e.preventDefault(); let { onClick: t, option: n } = this.props; return null == t ? void 0 : t(n) }) } } function p() { let { orientation: e = "vertical", isDisabled: t = !1, labelledBy: n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, i = s.useRef(null), r = s.useMemo(() => (0, l.createFocusManager)({ getFocusableElements() { let e = i.current; return null != e ? Array.from(e.querySelectorAll('[role="radio"]')) : [] }, getActiveElement() { var e; return null === (e = i.current) || void 0 === e ? void 0 : e.ownerDocument.activeElement } }), []); return { role: "radiogroup", onKeyDown: s.useCallback(async t => { if (null == i.current) return; let n = "vertical" === e ? f.KeyboardKeys.ARROW_UP : f.KeyboardKeys.ARROW_LEFT, s = "vertical" === e ? f.KeyboardKeys.ARROW_DOWN : f.KeyboardKeys.ARROW_RIGHT; switch (t.which) { case s: { t.stopPropagation(), t.preventDefault(); let e = await r.getNextFocusableElement({ wrap: !0 }); return null == e ? void 0 : e.focus() } case n: { t.stopPropagation(), t.preventDefault(); let e = await r.getPreviousFocusableElement({ wrap: !0 }); return null == e ? void 0 : e.focus() } } }, [r, e]), ref: i, "aria-labelledby": n, "aria-orientation": e, "aria-disabled": t } } function O(e) { let { isSelected: t, label: n } = e; return { role: "radio", tabIndex: t ? 0 : -1, "aria-label": n, "aria-checked": t } } function C(e) { let { itemInfoClassName: t, itemTitleClassName: n, radioItemClassName: i, collapsibleClassName: s, className: a, value: o = null, size: l = A.MEDIUM, radioPosition: u = "left", onChange: d = f.NOOP, disabled: c = !1, options: E = [], "aria-labelledby": I, orientation: T, withTransparentBackground: S } = e, h = (0, _.useFormContext)(), m = p({ labelledBy: null != I ? I : h.titleId, orientation: T, isDisabled: c }), O = E.some(e => e.value === o); return (0, r.jsx)("div", { ...m, className: a, children: E.map(e => (0, r.jsx)(N, { hasSelection: O, disabled: c, checked: o === e.value, option: e, onClick: d, radioPosition: u, size: l, infoClassName: t, titleClassName: n, radioItemClassName: i, radioItemIconClassName: e.radioItemIconClassName, collapsibleClassName: s, radioBarClassName: e.radioBarClassName, withTransparentBackground: S }, e.value)) }) } h(N, "defaultProps", { withTransparentBackground: !1, radioPosition: "left" }), C.Sizes = A }, 346314: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NameWithRole: function() { return E }, NameWithRoleAnchor: function() { return c } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("756715"), l = n("607070"), u = n("109161"), d = n("794323"); function _(e) { let { roleStyle: t, name: n, color: r, roleName: a, dotAlignment: o = "left", className: l } = e, _ = "username" === t, c = "dot" === t ? (0, i.jsx)(u.RoleDot, { color: r, name: a, className: "left" === o ? d.roleDotLeft : d.roleDotRight }) : null; return (0, i.jsxs)("span", { style: { color: _ && null != r ? r : void 0 }, className: s()(l, { [d.username]: _ }), children: ["left" === o && c, n, "right" === o && c] }) } function c(e) { let { name: t, color: n, roleName: r, dotAlignment: s, className: u, ...d } = e, c = (0, a.useStateFromStores)([l.default], () => l.default.roleStyle), E = "username" === c, I = (0, i.jsx)(_, { roleStyle: c, name: t, color: n, roleName: r, dotAlignment: s, className: u }), T = E ? { color: n } : void 0; return (0, i.jsx)(o.Anchor, { ...d, children: I, style: T }) } function E(e) { let t = (0, a.useStateFromStores)([l.default], () => l.default.roleStyle); return (0, i.jsx)(_, { ...e, roleStyle: t }) } }, 109161: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RoleCircle: function() { return d }, RoleDot: function() { return u } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("981729"), o = n("469337"); function l(e) { let { color: t, className: n, background: r = !0 } = e; return null == t ? null : (0, i.jsxs)("svg", { className: s()(o.svg, n), viewBox: "0 0 20 20", fill: "none", children: [r && (0, i.jsx)("path", { className: o.background, d: "M0 4C0 1.79086 1.79086 0 4 0H16C18.2091 0 20 1.79086 20 4V16C20 18.2091 18.2091 20 16 20H4C1.79086 20 0 18.2091 0 16V4Z" }), (0, i.jsx)("circle", { className: o.dotBorderBase, cx: "10", cy: "10", r: "6" }), (0, i.jsx)("circle", { className: o.dotBorderColor, cx: "10", cy: "10", r: "6", fill: t }), (0, i.jsx)("circle", { className: o.dot, cx: "10", cy: "10", r: "5", fill: t })] }) } function u(e) { let { color: t, name: n, tooltip: r = !0 } = e; return null == t ? null : r ? (0, i.jsx)(a.Tooltip, { text: n, children: t => (0, i.jsx)("span", { ...t, "aria-hidden": !0, children: (0, i.jsx)(l, { ...e }) }) }) : (0, i.jsx)(l, { ...e }) } function d(e) { let { color: t, className: n } = e; return null == t ? null : (0, i.jsx)("span", { className: s()(o.roleCircle, n), style: { backgroundColor: t } }) } }, 147479: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AdvancedScrollerAuto: function() { return i.AdvancedScrollerAuto }, AdvancedScrollerNone: function() { return i.AdvancedScrollerNone }, AdvancedScrollerThin: function() { return i.AdvancedScrollerThin } }); var i = n("349361") }, 810412: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PinToBottomScrollerAuto: function() { return i.PinToBottomScrollerAuto } }); var i = n("260305") }, 21340: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ScrollerAuto: function() { return i.ScrollerAuto }, ScrollerNone: function() { return i.ScrollerNone }, ScrollerThin: function() { return i.ScrollerThin } }); var i = n("597312") }, 987738: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createAdvancedScroller: function() { return i.createAdvancedScroller } }); var i = n("49402") }, 975339: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createManagedReactiveScroller: function() { return i.createManagedReactiveScroller } }); var i = n("355336") }, 84241: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createScroller: function() { return i.createScroller } }); var i = n("257705") }, 562701: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ListComputer: function() { return i.ListComputer }, MasonryListComputer: function() { return i.MasonryListComputer }, getAnimatedListScrollHelpers: function() { return i.getAnimatedListScrollHelpers }, getAnimatedScrollHelpers: function() { return i.getAnimatedScrollHelpers }, getMasonryListSectionHeaderKey: function() { return i.getMasonryListSectionHeaderKey }, getMasonryListSectionIndex: function() { return i.getMasonryListSectionIndex }, getMergedOrientationStyles: function() { return i.getMergedOrientationStyles }, getScrollbarSpecs: function() { return i.getScrollbarSpecs }, isListItemRow: function() { return i.isListItemRow }, useCachedScrollerState: function() { return i.useCachedScrollerState }, usePaddingFixes: function() { return i.usePaddingFixes }, useResizeObserverSubscription: function() { return i.useResizeObserverSubscription }, useScrollSpring: function() { return i.useScrollSpring }, useVirtualizedAnchor: function() { return i.useVirtualizedAnchor }, useVirtualizedMasonryState: function() { return i.useVirtualizedMasonryState }, useVirtualizedState: function() { return i.useVirtualizedState } }); var i = n("780900") }, 189283: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SegmentedControl: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("1561"), l = n("993365"), u = n("928283"); function d(e) { let { option: t, selected: n, onClick: s, look: d, className: _, selectedClassName: c } = e, E = { [function(e) { switch (e) { case "tab": default: return u.tabItemSelected; case "pill": return u.pillItemSelected } }(d)]: n }; null != c && (E[c] = n); let I = r.useCallback(e => s(t, e), [s, t]); return (0, i.jsx)(o.Clickable, { className: a()(function(e) { switch (e) { case "tab": default: return u.tabItem; case "pill": return u.pillItem } }(d), _, E), onClick: I, children: (0, i.jsx)(l.Text, { variant: "text-sm/medium", color: "none", children: t.name }) }) } function _(e) { let { options: t, value: n, onChange: s, look: o = "tab", className: l, optionClassName: _, selectedOptionClassName: c } = e, E = r.useCallback(e => { var t; let r = n === e.value; return (0, i.jsx)(d, { selected: r, option: e, look: o, onClick: s, className: _, selectedClassName: c }, null !== (t = e.key) && void 0 !== t ? t : String(e.value)) }, [n, o, s, _, c]); return (0, i.jsx)("div", { className: a()(function(e) { switch (e) { case "tab": default: return u.tabContainer; case "pill": return u.pillContainer } }(o), l), children: t.map(E) }) } }, 921349: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SearchableSelect: function() { return U } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("423802"), l = n("372817"), u = n("924826"), d = n("693789"), _ = n("1561"), c = n("84735"), E = n("15127"), I = n("766646"), T = n("742746"), f = n("235874"), S = n("922770"), h = n("993365"), A = n("393238"), m = n("434650"), N = n("98650"), p = n("863840"), O = n("86813"), C = n("826026"), R = n("263704"), g = n("441674"), L = n("465670"), v = n("748585"), D = n("689938"), M = n("46257"); let y = { keys: ["label"] }; function P(e) { return e.label } let U = r.forwardRef(function(e, t) { let { options: n, value: s, onChange: l, clearable: d = !1, multi: I = !1, closeOnSelect: T = !0, onOpen: S, onClose: h, placeholder: N = D.default.Messages.SELECT, wrapperClassName: R, className: g, isDisabled: U = !1, maxVisibleItems: G = 7, look: w = v.SelectLooks.FILLED, autoFocus: k = !1, popoutPosition: B = "bottom", filter: F = !0, debounceTime: H, renderOptionLabel: Y = P, onSearchChange: j, renderOptionPrefix: W = () => null, renderOptionSuffix: K = () => null, "aria-describedby": z, "aria-invalid": Z, "aria-labelledby": X, "aria-required": Q, inputClassNames: q, centerCaret: J = !1, onBlur: $, matchSorterOptions: ee, clearQueryOnSelect: et = !1, ...en } = e, { ref: ei, width: er } = (0, A.default)(), { titleId: es, errorId: ea, error: eo } = (0, E.useFormContext)(), { ref: el, width: eu } = (0, A.default)(), ed = r.useRef(null), [e_, ec] = r.useState(null), [eE, eI] = r.useState(!1), [eT, ef] = r.useState(null), [eS, eh] = r.useState(!1), eA = r.useRef(null), em = r.useRef(null), { options: eN, loading: ep, onQueryChange: eO } = function(e) { let { active: t, loadableOptions: n, debounceTime: i } = e, s = "function" == typeof n, [a, o] = r.useState({ options: s ? [] : n, query: "", debouncedQuery: "", loading: !1 }), { options: l, loading: u, query: d, debouncedQuery: _ } = a, c = r.useCallback(e => o(t => ({ ...t, loading: s, query: e, debouncedQuery: e })), [s]); return r.useEffect(() => { t && c("") }, [t, c]), r.useEffect(() => { let e; return s ? (o(e => ({ ...e, loading: !0, debouncedQuery: null })), e = setTimeout(() => { c(d) }, null != i ? i : 500)) : c(d), () => { clearTimeout(e) } }, [s, d, i, c]), r.useEffect(() => { let e = !1; return t && null !== _ && ("function" == typeof n ? n(_) : Promise.resolve(n)).then(t => { !e && o(e => ({ ...e, options: t, loading: !1 })) }), () => { e = !0 } }, [t, n, _]), { options: l, loading: u, onQueryChange: r.useCallback(e => { o(t => ({ ...t, query: e })) }, []) } }({ active: eE, loadableOptions: n, debounceTime: H }), eC = r.useMemo(() => { var e, t; return e = eN, null == (t = s) ? [] : (Array.isArray(t) ? t : [t]).map(t => "object" == typeof t && (null == t || "value" in t) ? t : e.find(e => e.value === t)).filter(Boolean) }, [eN, s]), eR = r.useMemo(() => eC.map(e => e.value), [eC]), eg = eC[eC.length - 1], eL = (0, p.default)(eg), ev = r.useId(), eD = r.useId(), eM = r.useId(), ey = r.useCallback(e => { eE !== e && !U && (eI(e), e ? null == S || S() : null == h || h()) }, [U, h, S, eE]), eP = r.useCallback(e => { eE && !e && ey(!1) }, [ey, eE]), eU = (0, m.useIsVisible)(eP); r.useImperativeHandle(t, () => ({ close() { ey(!1) } })); let eb = r.useCallback((e, t) => { let n = document.querySelector(e), i = eA.current; ec(t), null != i && null != n && i.scrollIntoViewNode({ node: n }) }, []), eG = r.useCallback(() => new Promise(e => { let t = eA.current; if (null == t) return e(); t.scrollToTop({ callback: () => requestAnimationFrame(() => e()) }) }), []), ew = r.useCallback(() => new Promise(e => { let t = eA.current; if (null == t) return e(); t.scrollToBottom({ callback: () => requestAnimationFrame(() => e()) }) }), []), ek = (0, u.default)({ id: eD, defaultFocused: null != eg ? String(eg.value) : void 0, scrollToStart: eG, scrollToEnd: ew, isEnabled: eE, wrap: !0, useVirtualFocus: !0, setFocus: eb, disableClickOnSpace: !0 }), eB = (0, p.default)(ek), eV = (0, p.default)(eN); r.useEffect(() => { let e = eV.current, t = eL.current; eE && null != t && !ep && requestAnimationFrame(() => { let n = eA.current, i = e.indexOf(t); null == n || n.scrollToIndex({ section: 0, row: i }) }) }, [eE, ep]), r.useEffect(() => { let e = eB.current; if (eE && !ep) { var t; let n = ed.current; if (null != n) { n.focus(); let { value: e } = n; n.value = " ", n.value = e } ec(null !== (t = e.focusedItemId()) && void 0 !== t ? t : null) } else { let t = eL.current, n = null != t ? String(t.value) : null; e.setFocus(n), ec(null) } }, [eE, ep]), r.useLayoutEffect(() => { !eE && (I ? ef("") : null != eg && ef(eg.label)) }, [I, eg, eE]), r.useLayoutEffect(() => { I && ef("") }, [I, eC.length]); let ex = r.useCallback(function(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; if (null == e) { l(I ? [] : void 0); return } let i = "function" == typeof n, r = i ? eN.find(t => t.value === e) : e; if (I) { let n = null != s ? s : []; if (n.some(t => (i ? t.value : t) === e) ? l(n.filter(t => (i ? t.value : t) !== e)) : l([...n, r]), t) { var a; null === (a = ed.current) || void 0 === a || a.focus() } } else l(r); ec(null), (!I || T) && ey(!1), eh(!1), et && ef("") }, [n, eN, I, T, et, l, s, ey]); r.useLayoutEffect(() => { if (k) { var e; null === (e = ed.current) || void 0 === e || e.focus() } }, [k]); let eF = r.useCallback(() => { ef(""), ex(null), ey(!0) }, [ex, ey]), eH = r.useCallback(e => { switch (e.key) { case "Escape": eE && (e.stopPropagation(), ey(!1)); break; case "ArrowDown": case "ArrowUp": ey(!0) } }, [ey, eE]), eY = eN; eS && null != eT && !1 !== F && (eY = "function" == typeof F ? F(eN, eT) : (0, o.matchSorter)(eN, eT, null != ee ? ee : y)), r.useEffect(() => { let e = eA.current; null == e || e.scrollToTop() }, [eT]), r.useEffect(() => { !ep && eS && null !== eT && requestAnimationFrame(() => ek.focusFirstVisibleItem()) }, [ep, eS, eT]); let ej = I ? x : V; return (0, i.jsx)(u.ListNavigatorProvider, { navigator: ek, children: (0, i.jsx)(f.Popout, { spacing: 0, animation: f.Popout.Animation.NONE, shouldShow: eE, onRequestClose: () => ey(!1), layerContext: en.popoutLayerContext, renderPopout: e => { let { closePopout: t, position: n, updatePosition: r } = e; return (0, i.jsx)(b, { loading: ep, multi: I, listRef: eA, listId: ev, maxVisibleItems: G, width: eu, selectedValues: eR, closePopout: t, onSelect: ex, closeOnSelect: T, options: eY, activeDescendant: e_, renderOptionLabel: Y, updatePosition: r, popoutPosition: n, renderOptionPrefix: W, renderOptionSuffix: K }) }, position: B, children: (e, t) => { let { "aria-expanded": n, "aria-controls": r } = e, { isShown: s, position: o } = t, l = s ? C.default : O.default, { ref: u, onKeyDown: E } = ek.containerProps; return (0, i.jsxs)("div", { ref: em, className: a()(R, M.wrapper), style: { "--icons-width": "".concat(er, "px") }, onBlur: e => { var t, n, i; !((null === (t = em.current) || void 0 === t ? void 0 : t.contains(e.relatedTarget)) || (null === (i = eA.current) || void 0 === i ? void 0 : null === (n = i.getScrollerNode()) || void 0 === n ? void 0 : n.contains(e.relatedTarget))) && (!I && null != eg && ef(eg.label), eh(!1), ey(!1), null == $ || $(e)) }, children: [(0, i.jsx)(c.FocusRing, { ringTarget: el, focusTarget: ed, offset: 4, children: (0, i.jsx)("div", { onClick: U ? void 0 : e => { e.stopPropagation(), e.preventDefault(), ef(""), ey(!0) }, onMouseDown: e => { e.preventDefault() }, ref: e => { el.current = e, eU.current = e }, className: a()(M.select, M.searchable, g, { [M.open]: s, [M.lookFilled]: w === v.SelectLooks.FILLED, [M.disabled]: U, [M.multi]: I, [M.selectPositionTop]: "top" === o }), children: (0, i.jsx)("div", { className: a()(M.value, { [M.multi]: I }), children: (0, i.jsx)(ej, { query: eT, selectedOptions: eC, loading: ep, renderOptionPrefix: W, renderOptionSuffix: K, isDisabled: U, isEditing: eS, inputRef: ed, "aria-describedby": null != z ? z : ea, "aria-required": Q, "aria-invalid": null != Z ? Z : null != eo, "aria-labelledby": null != X ? X : es, "aria-expanded": n, setInputRef: e => { u.current = e, ed.current = e }, onFocus: () => { var e, t; null === (e = ed.current) || void 0 === e || e.setSelectionRange(0, null !== (t = null == eT ? void 0 : eT.length) && void 0 !== t ? t : 0) }, onChange: e => { eO(e), null == j || j(e), ef(e), ey(!0), eh(!0) }, onKeyDown: e => { var t; null === (t = en.onKeyDown) || void 0 === t || t.call(en, e), E(e), eH(e) }, activeDescendant: e_, placeholder: N, inputId: eM, listboxId: ev, navigatorId: eD, selectValue: function(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; ex(e, t) }, inputClassNames: q }) }) }) }), (0, i.jsxs)("div", { className: a()(M.icons, { [M.multi]: I, [M.iconsContainer]: !J }), ref: ei, children: [d && (null != eT && "" !== eT || eC.length > 0) ? (0, i.jsx)(_.Clickable, { "aria-label": D.default.Messages.CLEAR, "aria-controls": eM, onClick: eF, children: (0, i.jsx)(L.default, { width: 16, height: 16, className: M.clear }) }) : null, (0, i.jsx)(_.Clickable, { className: a()({ [M.iconsCenter]: J }), "aria-label": eE ? D.default.Messages.CLOSE : D.default.Messages.OPEN, "aria-controls": eM, onClick: () => { ey(!eE) }, children: (0, i.jsx)(l, { className: M.dropdownIcon }) })] })] }) } }) }) }); function b(e) { let { onSelect: t, closePopout: n, selectedValues: s, options: o, width: l, maxVisibleItems: d, activeDescendant: _, listRef: c, listId: E, renderOptionLabel: I, updatePosition: f, loading: A = !1, multi: m, popoutPosition: p, closeOnSelect: O, renderOptionPrefix: C = () => null, renderOptionSuffix: R = () => null } = e, g = r.useRef(null), L = r.useCallback(e => { t(e), O && n() }, [O, n, t]); return ((0, N.default)(f), A) ? (0, i.jsx)("div", { "aria-busy": !0, className: a()(M.popout, M.loading, { [M.popoutPositionTop]: "top" === p }), style: { width: l }, children: (0, i.jsx)(S.Spinner, { itemClassName: M.loadingSpinner, type: S.SpinnerTypes.PULSING_ELLIPSIS }) }) : 0 === o.length ? (0, i.jsx)("div", { className: a()(M.popout, M.noResults, { [M.popoutPositionTop]: "top" === p }), style: { width: l }, children: (0, i.jsx)(h.Text, { color: "text-muted", variant: "text-md/normal", children: D.default.Messages.NO_RESULTS_FOUND }) }) : (0, i.jsx)(u.ListNavigatorContainer, { children: e => { let { ref: t, onKeyDown: n, ...r } = e; return (0, i.jsx)(T.ListAuto, { className: a()(M.popout, M.searchableSelect, { [M.noScrollbar]: o.length <= d, [M.popoutPositionTop]: "top" === p }), style: { width: l, maxHeight: 44 * d }, ref: e => { var n; c.current = e; let i = null !== (n = null == e ? void 0 : e.getScrollerNode()) && void 0 !== n ? n : null; g.current = i, t.current = i }, ...r, role: void 0, innerRole: "listbox", innerAriaMultiselectable: m, innerId: E, rowHeight: 44, sections: [o.length], sectionHeight: 0, renderRow: e => { var t; let { row: n } = e, r = o[n], a = I(r); return (0, i.jsx)(k, { multi: m, "aria-posinset": n, "aria-setsize": o.length, isSelected: s.includes(r.value), isFocused: _ === String(r.value), value: r.value, label: a, onSelect: L, prefix: C(r, { inPill: !1, inDropdown: !0 }), suffix: R(r, { inPill: !1, inDropdown: !0 }) }, null !== (t = r.key) && void 0 !== t ? t : n) }, renderSection: () => null }) } }) } function G(e, t) { if (null == e || null == t) return !1; let n = Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING; return (e.compareDocumentPosition(t) & n) === n } function w(e) { let { selectedOptions: t, selectValue: n, listRef: s, focusPreviousItem: a, focusNextItem: o, renderOptionSuffix: l, renderOptionPrefix: u } = e, d = r.useCallback(e => { if (null != s.current) switch (e.key) { case "ArrowRight": return e.stopPropagation(), e.preventDefault(), o(); case "ArrowLeft": return e.stopPropagation(), e.preventDefault(), a() } }, [s, a, o]), [_, c] = r.useState(null); return (0, i.jsx)("ul", { className: M.optionPillContainer, ref: s, onKeyDown: d, onFocus: e => { let t = e.target; null != s.current && G(s.current, t) && c(t.getAttribute("data-option-pill-value")) }, onBlur: e => { let t = e.relatedTarget; !G(s.current, t) && c(null) }, children: t.map((e, t) => { var r; return (0, i.jsx)("li", { className: M.optionPillItem, children: (0, i.jsx)(H, { focused: null == _ ? 0 === t : _ === String(e.value), option: e, onClick: () => n(e.value), onKeyDown: async t => { "Backspace" === t.key ? (await a(!0), n(e.value, !1)) : "Delete" === t.key && (await o(!0), n(e.value, !1)) }, renderOptionPrefix: u, renderOptionSuffix: l }) }, null !== (r = e.key) && void 0 !== r ? r : "".concat(e.label, "-").concat(e.value)) }) }) } function k(e) { let { value: t, label: n, prefix: r, suffix: s, onSelect: o, isSelected: l, isFocused: d, multi: c, ...E } = e, I = (0, u.useListItem)(String(t)); return (0, i.jsxs)(_.Clickable, { tag: "li", style: { height: 44 }, focusProps: { enabled: !1 }, className: a()(M.option, { [M.focused]: d, [M.multi]: c }), onClick: () => o(t), ...I, ...E, "aria-selected": l, id: I["data-list-item-id"], role: "option", children: [(0, i.jsxs)("div", { className: M.content, children: [n, "\xa0"] }), null != r && (0, i.jsx)("div", { className: M.prefix, children: r }), " ", null != s && (0, i.jsx)("div", { className: M.suffix, children: s }), " ", (0, i.jsx)(B, { isSelected: l, multi: c })] }) } function B(e) { let { isSelected: t, multi: n } = e; return n ? (0, i.jsx)("div", { className: a()(M.multiSelectCheckbox, { [M.checked]: t, [M.unchecked]: !t }), children: t && (0, i.jsx)(R.default, { foreground: M.multiSelectCheck }) }) : t ? (0, i.jsx)(g.default, { "aria-hidden": !0, backgroundColor: "white", className: M.selectedIcon, width: 20, height: 20 }) : null } function V(e) { let { selectedOptions: t, renderOptionPrefix: n, renderOptionSuffix: r, ...s } = e, a = t[0], o = null == n ? void 0 : n(null != a ? a : null, { inPill: !1, inDropdown: !1 }), l = null == r ? void 0 : r(null != a ? a : null, { inPill: !1, inDropdown: !1 }); return (0, i.jsxs)(i.Fragment, { children: [null != o ? (0, i.jsx)("div", { "aria-hidden": !0, children: o }) : null, (0, i.jsx)(F, { selectedOptions: t, ...s }), null != l ? (0, i.jsx)("div", { "aria-hidden": !0, children: l }) : null] }) } function x(e) { let { query: t, placeholder: n, selectedOptions: s, selectValue: o, onKeyDown: u, isEditing: d, isDisabled: _, inputRef: c, renderOptionPrefix: E, renderOptionSuffix: I, inputClassNames: T, ...f } = e, S = Math.max(n.length, (null != t ? t : "").length), h = r.useRef(null), { focusPreviousItem: A, focusNextItem: m, focusLastItem: N } = function(e, t, n) { let i = r.useMemo(() => (0, l.createFocusManager)({ getFocusableElements() { let t = e.current; return null != t ? Array.from(t.querySelectorAll("[data-option-pill-value]")) : [] }, getActiveElement() { var t, n; return null == e ? void 0 : null === (n = e.current) || void 0 === n ? void 0 : null === (t = n.ownerDocument) || void 0 === t ? void 0 : t.activeElement } }), [n]), s = r.useCallback(t => { var n, i; return t === (null === (i = e.current) || void 0 === i ? void 0 : null === (n = i.ownerDocument) || void 0 === n ? void 0 : n.activeElement) }, [e]), a = r.useCallback(async function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], n = await i.getPreviousFocusableElement({ wrap: !e }); if (e && ((null == n || s(n)) && (n = await i.getNextFocusableElement()), null == n || s(n))) { var r; return null === (r = t.current) || void 0 === r ? void 0 : r.focus() } return null == n ? void 0 : n.focus() }, [i, s, t]), o = r.useCallback(async function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], n = await i.getNextFocusableElement({ wrap: !e }); if (e && ((null == n || s(n)) && (n = await i.getPreviousFocusableElement()), null == n || s(n))) { var r; return null === (r = t.current) || void 0 === r ? void 0 : r.focus() } return null == n ? void 0 : n.focus() }, [i, s, t]); return { focusPreviousItem: a, focusNextItem: o, focusLastItem: r.useCallback(async () => { let e = await i.getLastFocusableElement(); return null == e ? void 0 : e.focus() }, [i]) } }(h, c, s); return (0, i.jsxs)(i.Fragment, { children: [s.length > 0 && (0, i.jsx)(w, { listRef: h, selectedOptions: s, renderOptionPrefix: E, renderOptionSuffix: I, selectValue: o, focusNextItem: m, focusPreviousItem: A }), (0, i.jsx)(F, { style: { minWidth: "".concat(S, "ch") }, className: a()(M.multi, T), query: t, placeholder: n, selectValue: o, selectedOptions: s, isEditing: d, isDisabled: _, inputRef: c, onKeyDown: e => { ["ArrowLeft", "Backspace"].includes(e.key) && ("" === t || null == t) && s.length > 0 ? N() : u(e) }, ...f })] }) } function F(e) { let { query: t, inputId: n, "aria-describedby": r, "aria-invalid": s, "aria-required": o, "aria-labelledby": l, "aria-expanded": d, isDisabled: _, listboxId: c, activeDescendant: E, navigatorId: I, onChange: T, onFocus: f, setInputRef: S, isEditing: h, onKeyDown: A, placeholder: m, loading: N, style: p, className: O } = e; return (0, i.jsx)("input", { role: "combobox", id: n, "aria-haspopup": "listbox", "aria-invalid": s, "aria-labelledby": l, "aria-autocomplete": "list", "aria-expanded": d, "aria-describedby": r, "aria-disabled": _, "aria-controls": c, "aria-required": o, "aria-busy": N, style: null != p ? p : {}, "aria-activedescendant": null != E ? (0, u.createListItemId)(I, E) : "", disabled: _, value: null != t ? t : "", onChange: e => { T(e.target.value) }, onFocus: f, className: a()(M.searchInput, O, { [M.editing]: h, [M.disabled]: _ }), onKeyDown: A, placeholder: "" !== (null != t ? t : "").trim() ? void 0 : m, ref: S }) } function H(e) { let { option: t, focused: n, onClick: r, onKeyDown: s, renderOptionPrefix: a, renderOptionSuffix: o } = e, l = null == a ? void 0 : a(t, { inPill: !0, inDropdown: !1 }), u = null == o ? void 0 : o(t, { inPill: !0, inDropdown: !1 }); return (0, i.jsx)(c.FocusRing, { offset: 3, children: (0, i.jsxs)(d.Button, { tabIndex: n ? 0 : -1, "data-option-pill-value": t.value, className: M.optionPillBtn, innerClassName: M.optionPill, onClick: () => null == r ? void 0 : r(t.value), onKeyDown: s, children: [(0, i.jsx)("div", { className: M.content, children: t.label }), null != l && (0, i.jsx)("div", { className: M.prefix, children: l }), " ", null != u && (0, i.jsx)("div", { className: M.suffix, children: u }), (0, i.jsx)(I.HiddenVisually, { children: D.default.Messages.REMOVE }), (0, i.jsx)(L.default, { className: M.deleteOptionIcon, width: 14, height: 14 })] }) }) } }, 619307: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Select: function() { return y }, SingleSelect: function() { return b }, multiSelect: function() { return g }, singleSelect: function() { return v }, toggleSelect: function() { return L }, useMultiSelectState: function() { return C }, useSingleSelectState: function() { return O }, useVariableSelect: function() { return R } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("924826"), l = n("1561"), u = n("597442"), d = n("235874"), _ = n("147479"), c = n("481060"), E = n("393238"), I = n("434650"), T = n("98650"), f = n("86813"), S = n("826026"), h = n("441674"), A = n("465670"), m = n("748585"), N = n("689938"), p = n("46257"); function O(e) { let { value: t, onChange: n, serialize: i = e => String(e) } = e; return { select: e => n(e), isSelected: e => e === t, clear: () => n(null), serialize: i } } function C(e) { let { value: t, onChange: n, serialize: i = e => String(e) } = e; return { select: e => { let i = new Set(t); i.has(e) ? i.delete(e) : i.add(e), n(i) }, isSelected: e => { var n; return null !== (n = null == t ? void 0 : t.has(e)) && void 0 !== n && n }, clear: () => n(new Set), serialize: i } } function R(e) { let { value: t, onChange: n, onSelectInteraction: i, serialize: r = e => String(e) } = e; return { select: e => { let { newValues: r, updated: s } = i(e, t); s && n(r) }, isSelected: e => { var n; return null !== (n = null == t ? void 0 : t.has(e)) && void 0 !== n && n }, clear: () => n(new Set), serialize: r } } function g(e, t) { let n = new Set(t); return n.has(e) ? n.delete(e) : n.add(e), { newValues: n, updated: !0 } } function L(e, t) { return t.has(e) ? { newValues: new Set, updated: !0 } : { newValues: new Set([e]), updated: !0 } } function v(e, t) { return t.has(e) ? { newValues: t, updated: !1 } : { newValues: new Set([e]), updated: !0 } } function D(e) { return null == e ? void 0 : e.label } function M(e) { return e.map(e => D(e)).join(", ") } function y(e) { let { options: t, placeholder: n = N.default.Messages.SELECT, className: s, isDisabled: o = !1, maxVisibleItems: u = 7, autoFocus: _ = !1, popoutWidth: T, clearable: h = !1, look: O = m.SelectLooks.FILLED, onClose: C, onOpen: R, renderOptionLabel: g = D, renderOptionValue: L = M, popoutClassName: v, popoutPosition: y = "bottom", popoutLayerContext: U, optionClassName: b, closeOnSelect: G, select: w, isSelected: k, serialize: B, clear: V, hideIcon: x = !1, "aria-label": F, "aria-labelledby": H } = e, [Y, j] = r.useState(!1), { ref: W, width: K, height: z } = (0, E.default)(), Z = r.useCallback(e => { Y !== e && !o && (j(e), e ? null == R || R() : null == C || C()) }, [o, C, R, Y]), X = r.useCallback(e => { Y && !e && Z(!1) }, [Z, Y]), Q = (0, I.useIsVisible)(X), q = r.useCallback(e => { if (w(e), G) { var t; null === (t = W.current) || void 0 === t || t.focus() } }, [w, G]), J = r.useCallback(e => { e.stopPropagation(), null == V || V() }, [V]), $ = t.filter(e => k(e.value)); r.useLayoutEffect(() => { if (_) { var e; null === (e = W.current) || void 0 === e || e.focus() } }, [_]); let ee = (0, c.useRedesignIconContext)().enabled; return (0, i.jsx)(d.Popout, { spacing: 0, animation: d.Popout.Animation.NONE, shouldShow: Y, onRequestOpen: () => { Z(!0) }, onRequestClose: () => { Z(!1) }, renderPopout: e => { let { closePopout: n, position: r, updatePosition: s } = e; return (0, i.jsx)(P, { className: v, closeOnSelect: G, maxVisibleItems: u, width: null != T ? T : K, isSelected: k, closePopout: n, buttonHeight: null != z ? z : 0, onSelect: q, options: t, serialize: B, renderOptionLabel: g, optionClassName: b, updatePosition: s, popoutPosition: r }) }, position: y, layerContext: U, children: (e, t) => { let { onClick: r, onKeyDown: u, ...d } = e, { isShown: _, position: c } = t, E = _ ? S.default : f.default, I = ee ? 18 : 24; return (0, i.jsxs)(l.Clickable, { role: "button", "aria-disabled": o, innerRef: e => { W.current = e, Q.current = e }, onClick: o ? void 0 : e => { r(e), Z(!Y) }, onKeyDown: e => { "ArrowDown" === e.key ? Z(!0) : "Escape" === e.key && (e.stopPropagation(), Z(!1)), u(e) }, ...d, className: a()(p.select, s, { [p.open]: _, [p.disabled]: o, [p.selectPositionTop]: "top" === c, [p.lookFilled]: O === m.SelectLooks.FILLED }), "aria-haspopup": "listbox", "aria-expanded": _, "aria-label": F, "aria-labelledby": H, children: [$.length > 0 ? (0, i.jsx)("span", { className: p.value, children: L($) }) : (0, i.jsx)("span", { className: p.placeholder, children: n }), (0, i.jsxs)("div", { className: p.icons, children: [h ? (0, i.jsx)(l.Clickable, { role: "button", "aria-disabled": o, onClick: J, "aria-label": N.default.Messages.CLEAR, children: (0, i.jsx)(A.default, { width: 16, height: 16, className: p.clear }) }) : null, x ? null : (0, i.jsx)(E, { width: I, height: I })] })] }) } }) } function P(e) { let { className: t, onSelect: n, closePopout: s, closeOnSelect: l = !0, isSelected: d, options: c, width: E, maxVisibleItems: I, renderOptionLabel: f, serialize: S, optionClassName: h, buttonHeight: A, updatePosition: m, popoutPosition: N } = e, [O, C] = r.useState(0), R = r.useRef(null), g = r.useId(), L = (0, o.default)({ id: g, async scrollToEnd() {}, async scrollToStart() {}, isEnabled: !0, wrap: !0 }), v = r.useRef(null); (0, u.useFocusLock)(v), r.useLayoutEffect(() => { var e; null === (e = v.current) || void 0 === e || e.focus() }, []), r.useEffect(() => { A > 0 && m() }, [A, m]), (0, T.default)(m), r.useLayoutEffect(() => { var e, t; let n = null === (t = R.current) || void 0 === t ? void 0 : null === (e = t.getBoundingClientRect()) || void 0 === e ? void 0 : e.height; null != n && C(n) }, [I]), r.useEffect(() => { m() }, [m, O]); let D = r.useCallback(e => { n(e), l && s() }, [s, n, l]), M = c.map((e, t) => { var n; return (0, i.jsx)(U, { isSelected: d(e.value), value: e.value, label: f(e), onSelect: D, className: h, isDisabled: e.disabled, serialize: S }, null !== (n = e.key) && void 0 !== n ? n : t) }), y = c.length <= I ? _.AdvancedScrollerNone : _.AdvancedScrollerThin; return (0, i.jsx)(o.ListNavigatorProvider, { navigator: L, children: (0, i.jsx)(o.ListNavigatorContainer, { children: e => { let { ref: n, ...r } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(y, { className: a()(p.popout, t, { [p.popoutPositionTop]: "top" === N }), style: { width: E, maxHeight: O }, ref: e => { var t; let i = null !== (t = null == e ? void 0 : e.getScrollerNode()) && void 0 !== t ? t : null; n.current = i, v.current = i }, ...r, role: "listbox", children: M }), (0, i.jsx)("div", { "aria-hidden": !0, ref: R, className: p.measurement, children: M.slice(0, I) })] }) } }) }) } function U(e) { let { className: t, value: n, label: r, onSelect: s, isSelected: u, isDisabled: d, serialize: _ } = e, c = (0, o.useListItem)(_(n)); return (0, i.jsxs)(l.Clickable, { focusProps: { enabled: !1 }, className: a()(p.option, t), onClick: () => !d && s(n), ...c, "aria-selected": u, "aria-disabled": d, role: "option", children: [r, u && (0, i.jsx)(h.default, { backgroundColor: "white", className: p.selectedIcon, width: 20, height: 20 })] }) } function b(e) { let { value: t, onChange: n, ...r } = e, s = O({ value: t, onChange: n }); return (0, i.jsx)(y, { ...r, ...s }) } }, 748585: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { SelectLooks: function() { return i } }), (r = i || (i = {}))[r.FILLED = 0] = "FILLED", r[r.CUSTOM = 1] = "CUSTOM" }, 263953: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Sequencer: function() { return A } }), n("47120"); var i, r, s, a, o, l, u = n("735250"), d = n("470079"), _ = n("120356"), c = n.n(_), E = n("748780"), I = n("215569"), T = n("186325"), f = n("470475"); function S(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(o = i || (i = {}))[o.ENTERING = 0] = "ENTERING", o[o.LEAVING = 1] = "LEAVING", o[o.APPEARING = 2] = "APPEARING", o[o.STATIC = 3] = "STATIC", (l = r || (r = {})).SLIDE = "slide", l.LIFT = "lift"; class h extends(s = d.PureComponent) { componentDidMount() { if (null != this._measureRef.current) { let { height: e } = this._measureRef.current.getBoundingClientRect(); this.setState({ targetHeight: e, baseHeight: this.props.getBaseHeight() }) } } componentDidUpdate(e, t) { t.targetHeight !== this.state.targetHeight && this.props.setHeight(this.state.targetHeight) } componentWillAppear(e) { this.setState({ animationState: 2 }), e() } componentDidAppear() { let { animationProgress: e, targetHeight: t } = this.state; e.setValue(2), this.setState({ animationState: 3, baseHeight: t }) } componentWillEnter(e) { let { duration: t } = this.props, { animationProgress: n } = this.state; this.setState({ animationState: 0 }), this.props.setHeight(this.state.targetHeight), E.default.timing(n, { toValue: 2, duration: t, delay: t / 2 }).start(e) } componentDidEnter() { this.setState({ animationState: 3 }) } componentWillLeave(e) { let { animationProgress: t } = this.state, { duration: n, getDirection: i } = this.props; this.direction = i(), this.setState({ animationState: 1 }), E.default.timing(t, { toValue: 0, duration: n }).start(e) } componentDidLeave() { this.setState({ animationState: 3 }) } getMotionAnimation() { let { reducedMotion: e } = this.context; if (e.enabled) return null; let { animationMotionType: t } = this.props, { animationProgress: n, animationState: i } = this.state, r = (1 === i ? -1 : 1) * this.direction; switch (t) { case "slide": return { transform: [{ translateX: n.interpolate({ inputRange: [0, 2], outputRange: ["".concat(150 * r, "%"), "0%"], extrapolate: "clamp", easing: E.default.Easing.inOut(E.default.Easing.ease) }) }] }; case "lift": return { transform: [{ translateY: n.interpolate({ inputRange: [0, 2], outputRange: ["".concat(10 * r, "%"), "0%"], extrapolate: "clamp", easing: E.default.Easing.inOut(E.default.Easing.ease) }) }] }; default: return null } } getAnimatedStyle() { var e, t; let { fillParent: n } = this.props, { animationProgress: i, animationState: r, baseHeight: s, targetHeight: a } = this.state, o = null !== (e = this.props.sideMargin) && void 0 !== e ? e : 0, l = null !== (t = this.props.verticalMargin) && void 0 !== t ? t : 0, u = 1 === r, d = 0 === r; return { overflow: d || u ? "hidden" : "visible", position: u ? "absolute" : void 0, top: u ? l : void 0, left: u ? o : void 0, right: u ? o : void 0, bottom: u ? l : void 0, ...this.getMotionAnimation(), opacity: i.interpolate({ inputRange: [0, 2], outputRange: [0, 1], extrapolate: "clamp", easing: E.default.Easing.inOut(E.default.Easing.ease) }), height: d ? i.interpolate({ inputRange: [0, 1], outputRange: [s, a], extrapolate: "clamp", easing: E.default.Easing.inOut(E.default.Easing.ease) }) : n ? "100%" : "auto" } } render() { let { fillParent: e, className: t, animatedNodeClassName: n, staticClassName: i } = this.props, { animationState: r } = this.state; return e ? (0, u.jsx)("div", { ref: this._measureRef, className: c()(f.measurementFill, t, { [c()(f.measurementFillStatic, i)]: 3 === r }), children: (0, u.jsx)(E.default.div, { className: c()(f.animatedNode, n), style: this.getAnimatedStyle(), children: this.props.children }) }) : (0, u.jsx)("div", { ref: this._measureRef, className: c()(f.measurement, t), children: (0, u.jsx)(E.default.div, { className: c()(f.animatedNode, n), style: this.getAnimatedStyle(), children: this.props.children }) }) } constructor(...e) { super(...e), S(this, "state", { animationProgress: new E.default.Value(0), targetHeight: 0, baseHeight: 0, animationState: null }), S(this, "direction", this.props.getDirection()), S(this, "_measureRef", d.createRef()) } } S(h, "contextType", T.AccessibilityPreferencesContext), S(h, "defaultProps", { duration: 300 }); class A extends(a = d.Component) { componentDidMount() { this.setPrevSteps() } componentDidUpdate() { this.setPrevSteps() } setPrevSteps() { let { step: e, steps: t } = this.props; this.prevStep = e, this.prevSteps = t } render() { let { step: e, className: t, innerClassName: n, animatedNodeClassName: i, staticClassName: r, sideMargin: s, verticalMargin: a, children: o, fillParent: l, animationMotionType: d } = this.props; return (0, u.jsx)(I.TransitionGroup, { component: "div", className: c()(f.transitionGroup, t), children: (0, u.jsx)(h, { fillParent: l, sideMargin: s, animationMotionType: null != d ? d : "slide", verticalMargin: a, getDirection: this.getDirection, getBaseHeight: this.getBaseHeight, className: n, animatedNodeClassName: i, staticClassName: r, setHeight: this.setHeight, children: o }, "".concat(e)) }) } constructor(...e) { super(...e), S(this, "stepHeights", {}), S(this, "prevStep", null), S(this, "prevSteps", []), S(this, "getBaseHeight", () => null != this.prevStep && null != this.stepHeights[this.prevStep] ? this.stepHeights[this.prevStep] : 0), S(this, "getDirection", () => { let { steps: e, step: t } = this.props, n = null != this.prevStep ? e.indexOf(this.prevStep) : -1, i = -1 === n && null != this.prevStep ? this.prevSteps.indexOf(this.prevStep) : -1; return Math.max(n, i) > e.indexOf(t) ? -1 : 1 }), S(this, "setHeight", e => { let { step: t } = this.props; this.stepHeights[t] = e }) } } S(A, "defaultProps", { fillParent: !1, animationMotionType: "slide" }) }, 936621: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Shakeable: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("512722"), a = n.n(s), o = n("392711"), l = n.n(o); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class d extends r.Component { getDefaultAnimProps(e, t) { return { duration: null != e ? e : 300, progress: 0, last: Date.now(), intensity: null != t ? t : 5, lastDirection: -1, frameCount: 0 } } componentWillUnmount() { this._animationCleanup() } shake(e, t) { this.animProps = this.getDefaultAnimProps(e, t), !this.state.shaking && this.setState({ shaking: !0 }, this._animate) } stop() { this.state.shaking && this.setState({ shaking: !1 }) } _animationComplete() { this.setState({ shaking: !1 }, this._animationCleanup) } render() { let { children: e, ...t } = this.props; return (0, i.jsx)("div", { ...t, ref: this.ref, children: e }) } constructor(e) { super(e), u(this, "animProps", void 0), u(this, "_animationFrame", void 0), u(this, "ref", r.createRef()), u(this, "_animate", () => { let { animProps: e } = this; if (!this.state.shaking || e.progress > e.duration || null == this.ref.current) { this._animationComplete(); return } let t = Date.now(); if (e.progress += t - e.last, e.last = t, e.frameCount % 2 != 0) { let t = e.lastDirection * e.intensity, n = l().random(-e.intensity, e.intensity, !0), i = Math.max(0, Math.cbrt(e.duration - e.progress / 1e3)); e.intensity *= Math.min(1, i), e.lastDirection *= -1, a()(null != this.ref.current, "Shakeable style set when not mounted"), this.ref.current.style.transform = "translate3d(".concat(t, "px,").concat(n, "px,0px)") } e.frameCount += 1, this._animationFrame = requestAnimationFrame(this._animate) }), u(this, "_animationCleanup", () => { null != this.ref.current && (this.ref.current.style.transform = ""), cancelAnimationFrame(this._animationFrame) }), this.state = { shaking: !1 } } } }, 503145: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Shaker: function() { return d } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("392711"), o = n.n(a), l = n("607070"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class d extends(i = s.Component) { componentDidMount() { this.props.isShaking && this.startShaking() } componentDidUpdate(e) { this.props.isShaking !== e.isShaking && this.setShaking(this.props.isShaking) } setShaking(e) { e ? this.startShaking() : this.stopShaking() } startShaking() { this.shouldRenderFrame = !0, this.animationFrame = requestAnimationFrame(this.animate) } stopShaking() { null != this.animationFrame && cancelAnimationFrame(this.animationFrame); let e = this.ref.current; null != e && (e.style.transform = "") } render() { let { className: e, children: t } = this.props; return (0, r.jsx)("div", { className: e, ref: this.ref, children: t }) } constructor(...e) { super(...e), u(this, "ref", s.createRef()), u(this, "animationFrame", void 0), u(this, "shouldRenderFrame", !0), u(this, "animate", () => { let { intensity: e, isShaking: t } = this.props; if (!t) return; let n = this.ref.current; if (this.shouldRenderFrame && null != n) { let t = o().random(-e, e, !0), i = o().random(-e, e, !0); n.style.transform = l.default.useReducedMotion ? "" : "translate3d(".concat(t, "px,").concat(i, "px,0px)") } this.shouldRenderFrame = !this.shouldRenderFrame, this.animationFrame = requestAnimationFrame(this.animate) }) } } u(d, "defaultProps", { isShaking: !0, intensity: 5 }) }, 561779: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Slider: function() { return m } }), n("724458"), n("411104"); var i, r, s, a = n("735250"), o = n("470079"), l = n("120356"), u = n.n(l), d = n("392711"), _ = n.n(d), c = n("374470"), E = n("84735"), I = n("981729"), T = n("607070"), f = n("65223"); function S(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function h(e, t) { let n = 0; for (let i = 0; i < t.length; i++) { let r = t[i]; if (e === r) return i; if (e < r) { if (0 === n || r - e < n) return i; return i - 1 } n = e - r } return null }(s = i || (i = {}))[s.ABOVE = 0] = "ABOVE", s[s.BELOW = 1] = "BELOW"; function A(e) { return { value: Math.min(Math.max(e.initialValue, e.minValue), e.maxValue), initialValueProp: e.initialValue, newClosestIndex: null, ... function(e) { let { markers: t, initialValue: n, minValue: i, maxValue: r, equidistant: s } = e, a = [], o = []; if (null == t) return { min: i, max: r, range: r - i, sortedMarkers: a, markerPositions: o }; let l = h(n, a = t.sort((e, t) => e - t)), u = a[0], d = a[a.length - 1], _ = d - u; if (s) { let e = 100 / (a.length - 1); o = a.map((t, n) => n * e) } else { let e = e => 100 * (e - u) / _; o = a.map(t => e(t)) } return { min: u, max: d, range: _, sortedMarkers: a, markerPositions: o, closestMarkerIndex: l } }(e) } } class m extends(r = o.PureComponent) { static getDerivedStateFromProps(e, t) { return e.initialValue !== t.initialValueProp ? { ...A(e), active: t.active } : null } componentWillUnmount() { this.reset() } renderMark(e) { let { onMarkerRender: t } = this.props; return null != t ? t(e) : e } render() { var e; let { value: t, active: n, focused: i, sortedMarkers: r, markerPositions: s, closestMarkerIndex: o, newClosestIndex: l, min: d, max: _ } = this.state, { disabled: c, stickToMarkers: S, className: h, children: A, barStyles: m, fillStyles: N, mini: p, hideBubble: O, defaultValue: C, orientation: R, onValueRender: g, renderMarker: L, getAriaValueText: v, barClassName: D, grabberClassName: M, grabberStyles: y = {}, markerPosition: P = 0, "aria-hidden": U, "aria-label": b, "aria-labelledby": G, "aria-describedby": w } = this.props, k = 0; S ? null != s && (null != l ? k = s[l] : null != o && (k = s[o])) : k = this.scaleValue(t); let B = "".concat(k, "%"), V = null != s && null != r ? s.map((e, t) => { let n = r[t], i = null != C && C === n, s = this.renderMark(n); return (0, a.jsx)("div", { className: u()(f.mark, { [f.defaultValue]: i, [f.markAbove]: 0 === P, [f.markBelow]: 1 === P }), style: { left: "".concat(e, "%") }, children: null != L ? L(n) : (0, a.jsxs)(a.Fragment, { children: [(0, a.jsx)("div", { className: f.markValue, children: s }), (0, a.jsx)("div", { className: f["markDash".concat(null == s ? "simple" : "")] })] }) }, t) }) : null, x = null != g ? g(t) : "".concat(k.toFixed(0), "%"), F = null !== (e = null == v ? void 0 : v(t)) && void 0 !== e ? e : void 0; return (0, a.jsx)(E.FocusRing, { focusTarget: this.containerRef, ringTarget: this.grabberRef, children: (0, a.jsxs)("div", { className: u()(f.slider, h, { [f.disabled]: c, [f.mini]: p }), "aria-valuemin": d, "aria-valuemax": _, "aria-valuenow": t, "aria-disabled": c, "aria-orientation": R, "aria-hidden": U, "aria-label": b, "aria-labelledby": G, "aria-describedby": w, "aria-valuetext": F, role: "slider", tabIndex: 0, onKeyDown: this.handleKeyDown, onMouseDown: this.handleContainerMouseDown, onFocus: this.onFocus, onBlur: this.onBlur, ref: this.containerRef, children: [(0, a.jsx)("div", { className: f.track, children: V }), (0, a.jsx)("div", { className: u()(f.bar, D), style: m, children: (0, a.jsx)("div", { className: f.barFill, style: { ...N, width: B } }) }), A, (0, a.jsx)("div", { className: f.track, children: (0, a.jsx)(I.Tooltip, { color: I.Tooltip.Colors.GREY, hideOnClick: !1, text: O || S ? null : x, forceOpen: n || i && T.default.keyboardModeEnabled, children: e => (0, a.jsx)("div", { ...e, className: u()(f.grabber, M), style: { ...y, left: B }, onMouseDown: this.handleMouseDown, ref: this.grabberRef }) }) })] }) }) } reset() { var e, t, n, i; null === (t = this.containerRef.current) || void 0 === t || null === (e = t.ownerDocument) || void 0 === e || e.removeEventListener("mousemove", this.handleMouseMove, !0), null === (i = this.containerRef.current) || void 0 === i || null === (n = i.ownerDocument) || void 0 === n || n.removeEventListener("mouseup", this.handleMouseUp, !0) } scaleValue(e) { return 100 * (e - this.state.min) / this.state.range } unscaleValue(e) { return e * this.state.range / 100 + this.state.min } focus() { var e; null === (e = this.containerRef.current) || void 0 === e || e.focus() } blur() { var e; null === (e = this.containerRef.current) || void 0 === e || e.blur() } moveStaggered(e) { let t; let { boundingRect: n, x: i = 0, closestMarkerIndex: r, markerPositions: s, sortedMarkers: a } = this.state, { asValueChanges: o } = this.props; if (null == n) return; let { left: l, right: u } = n; if (e.clientX <= l || e.clientX >= u) return; let d = e.clientX - i, _ = s[r] + d / (u - l) * 100; null != (t = this.props.equidistant ? h(_, s) : h(this.unscaleValue(_), a)) && (null == o || o(a[t])), this.setState({ newClosestIndex: t }) } constructor(e) { super(e), S(this, "containerRef", o.createRef()), S(this, "grabberRef", o.createRef()), S(this, "moveGrabber", e => { let { sortedMarkers: t, value: n, min: i, max: r } = this.state, { asValueChanges: s, onValueChange: a, stickToMarkers: o } = this.props, l = {}; if (o) { let i = t.indexOf(n); if (i < 0) return; let r = i + e, s = t[r]; if (null == s) return; l.value = s, l.closestMarkerIndex = r, l.newClosestIndex = r } else l.value = _().clamp(n + e, i, r); this.setState(l), l.value !== this.state.value && (null == s || s(l.value), null == a || a(l.value)) }), S(this, "handleContainerMouseDown", e => { let t; let { disabled: n, maxValue: i, minValue: r, asValueChanges: s, onValueChange: a, stickToMarkers: o } = this.props, { sortedMarkers: l, markerPositions: u } = this.state; if (n) return; let { clientX: d, currentTarget: _ } = e; if (!(0, c.isElement)(_)) return; let { left: E, width: I } = _.getBoundingClientRect(), T = (d - E) / I; if (o) { let { nextClosestMarkerIndex: e } = u.reduce((e, t, n) => { let i = Math.abs(t / 100 - T); return i <= e.smallestDelta ? { smallestDelta: i, nextClosestMarkerIndex: n } : e }, { smallestDelta: 1, nextClosestMarkerIndex: -1 }); if (-1 === e) return; this.setState({ closestMarkerIndex: e }), t = l[e] } else t = r + (i - r) * T, this.setState({ value: t }), this.handleMouseDown(e); null != a && a(t), null != s && s(t) }), S(this, "handleKeyDown", e => { let { disabled: t, orientation: n, keyboardStep: i = 1 } = this.props; if (t) return; let { key: r } = e, s = [], a = []; switch (n) { case "horizontal": s = ["ArrowRight"], a = ["ArrowLeft"]; break; case "vertical": s = ["ArrowUp"], a = ["ArrowDown"]; break; default: s = ["ArrowRight", "ArrowUp"], a = ["ArrowLeft", "ArrowDown"] } a.includes(r) ? (e.preventDefault(), e.stopPropagation(), this.moveGrabber(-i)) : s.includes(r) && (e.preventDefault(), e.stopPropagation(), this.moveGrabber(i)) }), S(this, "handleMouseDown", e => { var t, n; if (this.props.disabled) return; e.stopPropagation(); let { current: i } = this.containerRef; if (null == i || null === (t = i.ownerDocument) || void 0 === t || t.addEventListener("mousemove", this.handleMouseMove, !0), null == i || null === (n = i.ownerDocument) || void 0 === n || n.addEventListener("mouseup", this.handleMouseUp, !0), !(0, c.isElement)(i)) throw Error("[UIKit]Slider.handleMouseDown(): assert failed: domNode nodeType !== Element"); this.setState({ x: e.clientX, active: !0, boundingRect: i.getBoundingClientRect(), newClosestIndex: this.state.closestMarkerIndex }) }), S(this, "handleMouseUp", e => { e.stopPropagation(), this.reset(); let { onValueChange: t, stickToMarkers: n } = this.props, { newClosestIndex: i } = this.state; n && null != i ? (null == t || t(this.state.sortedMarkers[i]), this.setState({ newClosestIndex: null, closestMarkerIndex: i })) : null == t || t(this.state.value), this.setState({ active: !1 }) }), S(this, "handleMouseMove", e => { e.preventDefault(), this.props.stickToMarkers ? this.moveStaggered(e) : this.moveSmoothly(e) }), S(this, "onFocus", () => { this.setState({ focused: !0 }) }), S(this, "onBlur", () => { this.setState({ focused: !1 }) }), S(this, "moveSmoothly", e => { let { minValue: t, maxValue: n, asValueChanges: i } = this.props, { boundingRect: r } = this.state; if (null == r) return; let { left: s, right: a } = r, o = n - t, l = Math.min(Math.max(t + (e.clientX - s) / (a - s) * o, t), n); null == i || i(l), this.setState({ value: l }) }), this.state = { active: !1, focused: !1, ...A(e) } } } S(m, "defaultProps", { initialValue: 10, minValue: 0, maxValue: 100, keyboardStep: 1, handleSize: 10, disabled: !1, stickToMarkers: !1, fillStyles: {} }) }, 718580: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Slide: function() { return f }, Slides: function() { return S } }); var i = n("735250"), r = n("470079"), s = n("920906"), a = n("990547"), o = n("873546"), l = n("186325"), u = n("393238"), d = n("699682"), _ = n("906732"), c = n("812663"), E = n("863840"); let I = { mass: 1, tension: 300, friction: 28, clamp: !0 }; function T(e, t) { return n => { if (0 === n) return "auto"; let i = "forwards" === t.current, r = n > 0, s = !1; return r && i && "left" === e && (s = !0), r && !i && "right" === e && (s = !0), !r && i && "right" === e && (s = !0), !r && !i && "left" === e && (s = !0), s ? "".concat(100 * Math.abs(n), "%") : "auto" } } function f(e) { return null } function S(e) { var t, n, f, S; let { contentDisplay: h, ...A } = e, m = {}, { analyticsLocations: N } = (0, _.default)(); r.Children.forEach(A.children, (e, t) => { m[e.props.id] = { children: e.props.children, impressionName: e.props.impressionName, impressionProperties: e.props.impressionProperties, index: t } }); let p = A.activeSlide, O = (0, d.default)(A.activeSlide); let C = (f = null != O ? m[O] : null, S = m[p], null == f ? null : f.index > S.index ? "backwards" : f.index < S.index ? "forwards" : null), { reducedMotion: R } = r.useContext(l.AccessibilityPreferencesContext), g = r.useContext(c.default), L = m[p].impressionName, v = { ...m[p].impressionProperties, location_stack: N }; g({ type: a.ImpressionTypes.MODAL, name: L, properties: v, _stackContext: { isSlide: !0 } }); let { ref: D, width: M = 0, height: y = 0 } = (0, u.default)(p), P = { ...I, ...A.springConfig, ...R.enabled ? { clamp: !0 } : null }, U = (0, s.useSpring)({ immediate: null == O, width: null !== (t = A.width) && void 0 !== t ? t : M, height: y, config: P }), b = (0, s.useTransition)(p, { immediate: null == O, value: 0, from: { value: 1 }, enter: { value: 0 }, leave: { value: -1 }, config: P, onRest: (e, t) => { let { item: n } = t; n === p && null != A.onSlideReady && A.onSlideReady(n) } }), G = (0, E.default)(C), { width: w, centered: k = !0 } = A, B = o.isMobile ? "100%" : U.width.to(e => Math.round(e)), V = o.isMobile ? "100%" : U.height.to(e => Math.round(e)), x = o.isMobile ? {} : k ? { transform: "translate3d(0, -50%, 0) scale(1.0, 1.0)", top: "50%" } : { transform: "scale(1.0, 1.0)" }, F = o.isMobile ? {} : { overflow: null !== (n = A.overflow) && void 0 !== n ? n : "hidden" }; return (0, i.jsx)(s.animated.div, { style: { position: "relative", width: B, height: V, ...F }, children: b((e, t, n) => { let { key: r } = n; return (0, i.jsx)(s.animated.div, { ref: t === p ? D : null, style: { position: "absolute", display: h, flexDirection: "column", backfaceVisibility: "hidden", width: o.isMobile ? "100%" : w, ...x, ...R.enabled ? { opacity: e.value.to(e => 1 - Math.abs(e)) } : { left: e.value.to(T("left", G)), right: e.value.to(T("right", G)) } }, children: m[t].children }, r) }) }) } }, 922770: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Spinner: function() { return c }, SpinnerTypes: function() { return r } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("186325"), d = n("689938"), _ = n("879967"); (i = r || (r = {})).WANDERING_CUBES = "wanderingCubes", i.CHASING_DOTS = "chasingDots", i.PULSING_ELLIPSIS = "pulsingEllipsis", i.SPINNING_CIRCLE = "spinningCircle", i.SPINNING_CIRCLE_SIMPLE = "spinningCircleSimple", i.LOW_MOTION = "lowMotion"; function c(e) { let { type: t = "wanderingCubes", animated: n = !0, className: i, itemClassName: r, "aria-label": o, ...c } = e, { reducedMotion: E } = a.useContext(u.AccessibilityPreferencesContext), I = E.enabled ? function(e) { switch (e) { case "wanderingCubes": case "chasingDots": return "lowMotion"; default: return e } }(t) : t; if (o = null != o ? o : d.default.Messages.LOADING, "spinningCircle" === I || "spinningCircleSimple" === I) return (0, s.jsx)("div", { className: l()(_.spinner, _[I], i, { [_.stopAnimation]: !n }), role: "img", "aria-label": o, ...c, children: (0, s.jsx)("div", { className: _.spinningCircleInner, children: (0, s.jsxs)("svg", { className: _.circular, viewBox: "25 25 50 50", children: ["spinningCircle" === I && (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)("circle", { className: l()(_.path, _.path3, r), cx: "50", cy: "50", r: "20" }), (0, s.jsx)("circle", { className: l()(_.path, _.path2, r), cx: "50", cy: "50", r: "20" })] }), (0, s.jsx)("circle", { className: l()(_.path, r), cx: "50", cy: "50", r: "20" })] }) }) }); let T = l()(_.item, r); return (0, s.jsx)("span", { className: l()(_.spinner, i, { [_.stopAnimation]: !n }), role: "img", "aria-label": o, ...c, children: (0, s.jsxs)("span", { className: l()(_.inner, _[I]), children: [(0, s.jsx)("span", { className: T }), (0, s.jsx)("span", { className: T }), "pulsingEllipsis" === I || "lowMotion" === I ? (0, s.jsx)("span", { className: T }) : null] }) }) } c.Type = r }, 696826: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnimatedStatus: function() { return p }, Status: function() { return R }, StatusTypes: function() { return _.StatusTypes }, getStatusBackdropColor: function() { return S }, getStatusBackdropOpacity: function() { return f }, getStatusMask: function() { return O }, getStatusSize: function() { return C }, getStatusValues: function() { return m }, renderStatusMask: function() { return N }, useStatusFillColor: function() { return T } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("780384"), u = n("44315"), d = n("806519"), _ = n("981631"), c = n("182294"), E = n("824250"); let I = { tension: 600, friction: 70 }; function T(e, t) { let n = (0, u.useColorValue)(function(e) { switch (e) { case _.StatusTypes.ONLINE: return _.Color.GREEN_360; case _.StatusTypes.IDLE: return _.Color.YELLOW_300; case _.StatusTypes.DND: return _.Color.RED_400; case _.StatusTypes.STREAMING: return _.Color.TWITCH; case _.StatusTypes.INVISIBLE: case _.StatusTypes.UNKNOWN: case _.StatusTypes.OFFLINE: default: return _.Color.PRIMARY_400 } }(e)).hex, i = (0, u.useDesaturatedColorString)(null != t ? t : n); return null != i ? i : void 0 } function f(e, t) { return t === c.StatusBackdropColors.WHITE && e === _.StatusTypes.IDLE ? c.StatusBackdropOpacity.HIGH : c.StatusBackdropOpacity.LOW } function S(e) { return (0, l.isThemeDark)(e) ? c.StatusBackdropColors.BLACK : c.StatusBackdropColors.WHITE } function h(e, t, n, i) { return "scale(".concat(t, ") translate(").concat(.5625 * e + i, " ").concat(.75 * e + n, ")") } function A(e, t, n) { return "".concat(.5625 * e + n, "px ").concat(.75 * e + t, "px") } function m(e) { let { size: t, status: n, isMobile: i, isTyping: r, topOffset: s = 0, leftOffset: a = 0 } = e, o = s / 8 * t, l = a / 8 * t; if (r) return { bgRadius: .5 * t, bgY: .25 * t + o, bgX: 0, bgHeight: t, bgWidth: t * c.TYPING_WIDTH_RATIO, cutoutX: .5 * t + l, cutoutY: .75 * t + o, cutoutWidth: 0, cutoutHeight: 0, cutoutRadius: 0, polygonScale: h(t, 0, o, l), polygonOrigin: A(t, o, l), dotY: .75 * t + o, dotX: .5 * t + l, dotRadius: 0 }; switch (n) { case _.StatusTypes.ONLINE: if (i) return { bgRadius: t * c.MOBILE_HEIGHT_RATIO * c.MOBILE_ICON_RADIUS, bgY: 0, bgX: l, bgHeight: t * c.MOBILE_HEIGHT_RATIO, bgWidth: t, cutoutX: .125 * t + l, cutoutY: .25 * t, cutoutWidth: .75 * t, cutoutHeight: .75 * t, cutoutRadius: 0, polygonScale: h(t, 0, o, l), polygonOrigin: A(t, o, l), dotY: 1.25 * t, dotX: .5 * t + l, dotRadius: .125 * t }; return { bgRadius: .5 * t, bgY: .25 * t + o, bgX: l, bgHeight: t, bgWidth: t, cutoutX: .5 * t + l, cutoutY: .75 * t + o, cutoutWidth: 0, cutoutHeight: 0, cutoutRadius: 0, polygonScale: h(t, 0, o, l), polygonOrigin: A(t, o, l), dotY: .75 * t + o, dotX: .5 * t + l, dotRadius: 0 }; case _.StatusTypes.IDLE: return { bgRadius: .5 * t, bgY: .25 * t + o, bgX: l, bgHeight: t, bgWidth: t, cutoutX: -(.125 * t) + l, cutoutY: .125 * t + o, cutoutWidth: .75 * t, cutoutHeight: .75 * t, cutoutRadius: .375 * t, polygonScale: h(t, 0, o, l), polygonOrigin: A(t, o, l), dotY: .75 * t + o, dotX: .5 * t + l, dotRadius: 0 }; case _.StatusTypes.DND: return { bgRadius: .5 * t, bgY: .25 * t + o, bgX: l, bgHeight: t, bgWidth: t, cutoutX: .125 * t + l, cutoutY: .625 * t + o, cutoutWidth: .75 * t, cutoutHeight: .25 * t, cutoutRadius: .125 * t, polygonScale: h(t, 0, o, l), polygonOrigin: A(t, o, l), dotY: .75 * t + o, dotX: .5 * t + l, dotRadius: 0 }; case _.StatusTypes.STREAMING: return { bgRadius: .5 * t, bgY: .25 * t + o, bgX: l, bgHeight: t, bgWidth: t, cutoutX: .5 * t + l, cutoutY: .75 * t + o, cutoutWidth: 0, cutoutHeight: 0, cutoutRadius: .25 * t, polygonScale: h(t, 1, o, l), polygonOrigin: A(t, o, l), dotY: .75 * t + o, dotX: .5 * t + l, dotRadius: 0 }; case _.StatusTypes.INVISIBLE: case _.StatusTypes.UNKNOWN: case _.StatusTypes.OFFLINE: default: return { bgRadius: .5 * t, bgY: .25 * t + o, bgX: l, bgHeight: t, bgWidth: t, cutoutX: .25 * t + l, cutoutY: .5 * t + o, cutoutWidth: .5 * t, cutoutHeight: .5 * t, cutoutRadius: .25 * t, polygonScale: h(t, 0, o, l), polygonOrigin: A(t, o, l), dotY: .75 * t + o, dotX: .5 * t + l, dotRadius: 0 } } } function N(e, t, n) { var r; let { bgRadius: s, bgY: a, bgX: l, bgHeight: u, bgWidth: d, cutoutX: _, cutoutY: c, cutoutWidth: E, cutoutHeight: I, cutoutRadius: T, polygonScale: f, polygonOrigin: S, dotY: h, dotX: A, dotRadius: m } = e; return (0, i.jsxs)("mask", { id: n, children: [(0, i.jsx)(o.animated.rect, { x: l, y: a, width: d, height: u, rx: s, ry: s, fill: "white" }), (0, i.jsx)(o.animated.rect, { x: _, y: c, width: E, height: I, rx: T, ry: T, fill: "black" }), (0, i.jsx)(o.animated.polygon, { points: (r = t, "-".concat(.216506 * r, ",-").concat(.25 * r, " ").concat(.216506 * r, ",0 -").concat(.216506 * r, ",").concat(.25 * r)), fill: "black", transform: f, style: { transformOrigin: S } }), (0, i.jsx)(o.animated.circle, { fill: "black", cx: A, cy: h, r: m })] }) } function p(e) { let { status: t, isMobile: n = !1, size: s = 8, color: l, className: u, style: d } = e, f = r.useId(), S = t === _.StatusTypes.ONLINE && n, h = r.useMemo(() => m({ size: s, status: t, isMobile: S }), [s, t, S]), A = (0, o.useSpring)({ config: I, to: h }), p = T(t, l), [{ fill: O }] = (0, o.useSpring)({ config: I, fill: p }, [p]), C = Math.ceil(s * c.MOBILE_HEIGHT_RATIO); return (0, i.jsxs)("svg", { width: s, height: C, viewBox: "0 0 ".concat(s, " ").concat(C), className: a()(E.mask, u), style: d, children: [N(A, s, f), (0, i.jsx)(o.animated.rect, { x: 0, y: 0, width: s, height: C, fill: O, mask: "url(#".concat(f, ")") })] }) } function O(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (n) return d.default.Masks.STATUS_TYPING; switch (e) { case _.StatusTypes.IDLE: return d.default.Masks.STATUS_IDLE; case _.StatusTypes.DND: return d.default.Masks.STATUS_DND; case _.StatusTypes.STREAMING: return d.default.Masks.STATUS_STREAMING; case _.StatusTypes.INVISIBLE: case _.StatusTypes.UNKNOWN: case _.StatusTypes.OFFLINE: return d.default.Masks.STATUS_OFFLINE; case _.StatusTypes.ONLINE: default: if (t) return d.default.Masks.STATUS_ONLINE_MOBILE; return d.default.Masks.STATUS_ONLINE } } function C(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; return t === _.StatusTypes.ONLINE && n && !i ? { width: e, height: e * c.MOBILE_HEIGHT_RATIO } : { width: i ? e * c.TYPING_WIDTH_RATIO : e, height: e } } function R(e) { let { status: t, isMobile: n = !1, size: r = 8, className: s, style: o, color: l } = e, u = t === _.StatusTypes.ONLINE && n, c = T(t, l); return (0, i.jsx)(d.default, { mask: O(t, u), className: a()(E.mask, s), style: o, ...C(r, t, u), children: (0, i.jsx)("div", { style: { backgroundColor: c }, className: E.status }) }) } }, 437337: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Switch: function() { return T } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("692547"), u = n("186325"), d = n("84735"), _ = n("180035"), c = n("235949"); let E = { mass: 1, tension: 250 }, I = { X: { TOP: "M5.13231 6.72963L6.7233 5.13864L14.855 13.2704L13.264 14.8614L5.13231 6.72963Z", BOTTOM: "M13.2704 5.13864L14.8614 6.72963L6.72963 14.8614L5.13864 13.2704L13.2704 5.13864Z" }, BAR: { TOP: "M6.56666 11.0013L6.56666 8.96683L13.5667 8.96683L13.5667 11.0013L6.56666 11.0013Z", BOTTOM: "M13.5582 8.96683L13.5582 11.0013L6.56192 11.0013L6.56192 8.96683L13.5582 8.96683Z" }, CHECK: { TOP: "M7.89561 14.8538L6.30462 13.2629L14.3099 5.25755L15.9009 6.84854L7.89561 14.8538Z", BOTTOM: "M4.08643 11.0903L5.67742 9.49929L9.4485 13.2704L7.85751 14.8614L4.08643 11.0903Z" } }, T = function(e) { let { id: t, onChange: n, checked: s, disabled: T, className: f, focusProps: S, innerRef: h } = e, { reducedMotion: A } = r.useContext(u.AccessibilityPreferencesContext), m = r.useRef(null), [N, p] = r.useState(!1), O = (0, _.useToken)(l.default.unsafe_rawColors.PRIMARY_400).spring(), C = (0, _.useToken)(l.default.unsafe_rawColors.GREEN_360).spring(), { state: R, opacity: g } = (0, o.useSpring)({ config: E, opacity: T ? .3 : 1, state: N ? s ? .7 : .3 : s ? 1 : 0 }); return (0, i.jsx)(d.FocusRing, { ...S, within: !0, offset: -2, children: (0, i.jsxs)(o.animated.div, { className: a()(c.container, f, { [c.checked]: s, [c.disabled]: T }), onMouseDown: () => !T && p(!0), onMouseUp: () => p(!1), onMouseLeave: () => p(!1), style: { opacity: g, backgroundColor: R.to({ output: [O, C] }) }, children: [(0, i.jsxs)(o.animated.svg, { className: c.slider, viewBox: "0 0 28 20", preserveAspectRatio: "xMinYMid meet", style: { left: R.to({ range: [0, .3, .7, 1], output: [-3, 1, 8, 12] }) }, "aria-hidden": !0, children: [(0, i.jsx)(o.animated.rect, { fill: "white", x: R.to({ range: [0, .3, .7, 1], output: [4, 0, 0, 4] }), y: R.to({ range: [0, .3, .7, 1], output: [0, 1, 1, 0] }), height: R.to({ range: [0, .3, .7, 1], output: [20, 18, 18, 20] }), width: R.to({ range: [0, .3, .7, 1], output: [20, 28, 28, 20] }), rx: "10" }), function(e, t, n, r) { let s = e.to({ output: [t, n] }), a = r ? [I.X.TOP, I.X.TOP, I.CHECK.TOP, I.CHECK.TOP] : [I.X.TOP, I.BAR.TOP, I.BAR.TOP, I.CHECK.TOP], l = r ? [I.X.BOTTOM, I.X.BOTTOM, I.CHECK.BOTTOM, I.CHECK.BOTTOM] : [I.X.BOTTOM, I.BAR.BOTTOM, I.BAR.BOTTOM, I.CHECK.BOTTOM]; return (0, i.jsxs)("svg", { viewBox: "0 0 20 20", fill: "none", children: [(0, i.jsx)(o.animated.path, { fill: s, d: e.to({ range: [0, .3, .7, 1], output: a }) }), (0, i.jsx)(o.animated.path, { fill: s, d: e.to({ range: [0, .3, .7, 1], output: l }) })] }) }(R, O, C, A.enabled)] }), (0, i.jsx)("input", { id: t, type: "checkbox", ref: e => { m.current = e, null != h && (h.current = e) }, className: c.input, tabIndex: T ? -1 : 0, onKeyDown: function(e) { if (!T && !e.repeat)(" " === e.key || "Enter" === e.key) && p(!0) }, onKeyUp: function(e) { var t; if (!T && !!N && !e.repeat) p(!1), "Enter" === e.key && (null === (t = m.current) || void 0 === t || t.click()) }, onChange: function(e) { p(!1), null == n || n(e.currentTarget.checked, e) }, checked: s, disabled: T })] }) }) } }, 706898: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TabBar: function() { return C } }), n("757143"), n("411104"), n("47120"); var i, r, s, a, o = n("735250"), l = n("470079"), u = n("120356"), d = n.n(u), _ = n("372817"), c = n("866442"), E = n("692547"), I = n("1561"), T = n("993365"), f = n("981631"), S = n("974161"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = { side: S.side, top: S.top, "top-pill": S.topPill }, m = l.forwardRef(function(e, t) { let { children: n, id: i, ...r } = e; return (0, o.jsx)("div", { ...r, ref: t, role: "tabpanel", id: N(i), tabIndex: -1, children: n }) }); function N(e) { return "".concat(e.replace(/\s+/g, "-").toLowerCase(), "-tab") } function p(e, t) { if (null == e) return; let n = {}; return "Selected" === t ? (n.backgroundColor = e, n.color = E.default.unsafe_rawColors.WHITE_500.css, n) : ("Hover" === t && (n.backgroundColor = (0, c.hex2rgb)(e, .1)), n.color = e, n) }(a = i || (i = {})).DEFAULT = "Default", a.HOVER = "Hover", a.SELECTED = "Selected"; class O extends(r = l.Component) { getStyle() { let { color: e, id: t, selectedItem: n, itemType: i } = this.props, { hover: r, active: s } = this.state; if (null != e) { if ("side" === i) return null != t && n === t || s ? p(e, "Selected") : r ? p(e, "Hover") : p(e); if ("top" === i) return n === t ? { borderColor: e, color: e } : r ? { borderColor: (0, c.hex2rgb)(e, .1), color: (0, c.hex2rgb)(e, .6) } : { borderColor: "transparent", color: (0, c.hex2rgb)(e, .4) }; if ("top-pill" === i) return n === t ? { backgroundColor: (0, c.hex2rgb)(e, .2), color: e } : { backgroundColor: e, color: E.default.unsafe_rawColors.WHITE_500.css } } } render() { let { children: e, className: t, id: n, selectedItem: i, color: r, disabled: s, onContextMenu: a, clickableRef: l, look: u, disableItemStyles: _ } = this.props, c = this.props["aria-label"], E = i === n; return (0, o.jsx)(I.Clickable, { className: d()(t, { [S.item]: !_, [S.brand]: "brand" === u, [S.selected]: null == r && E, [S.themed]: "grey" === u, [S.disabled]: null == r && s }), style: this.getStyle(), role: "tab", "aria-selected": E, "aria-controls": E ? N("".concat(n)) : void 0, "aria-disabled": s, tabIndex: E ? 0 : -1, onMouseEnter: null != r ? this.handleMouseOver : void 0, onClick: this.handleClick, onMouseLeave: null != r ? this.handleMouseOut : void 0, onMouseUp: null != r ? this.handleMouseUp : void 0, onMouseDown: this.handleMouseDown, onContextMenu: a, "aria-label": c, ref: l, children: e }) } constructor(...e) { super(...e), h(this, "state", { hover: !1, active: !1 }), h(this, "handleClick", e => { let { disabled: t, onClick: n, id: i, onItemSelect: r } = this.props; !t && (null != n ? n(e) : null != r && r(i)) }), h(this, "handleMouseDown", () => { let { color: e } = this.props; null != e && this.setState({ active: !0 }) }), h(this, "handleMouseUp", () => { this.setState({ active: !1 }) }), h(this, "handleMouseOver", () => { this.setState({ hover: !0 }) }), h(this, "handleMouseOut", () => { this.setState({ hover: !1, active: !1 }) }) } } h(O, "defaultProps", { disabled: !1, look: "grey", disableItemStyles: !1 }); class C extends(s = l.Component) { render() { let { className: e, children: t, type: n = "side", style: i, "aria-label": r, orientation: s = "horizontal" } = this.props; return (0, o.jsx)("div", { ref: this.tabBarRef, className: d()(e, A[n]), style: i, role: "tablist", "aria-orientation": s, onKeyDown: this.handleKeyDown, "aria-label": r, children: l.Children.map(t, this.renderChildren) }) } constructor(...e) { super(...e), h(this, "tabBarRef", l.createRef()), h(this, "focusManager", (0, _.createFocusManager)({ getFocusableElements: () => { let e = this.tabBarRef.current; return null != e ? Array.from(e.querySelectorAll('[role="tab"][aria-disabled="false"]')) : [] }, getActiveElement: () => { var e; return null === (e = this.tabBarRef.current) || void 0 === e ? void 0 : e.ownerDocument.activeElement } })), h(this, "renderChildren", e => { let { selectedItem: t, onItemSelect: n, type: i = "side", look: r = "grey" } = this.props; return l.isValidElement(e) ? l.cloneElement(e, { selectedItem: t, onItemSelect: n, itemType: i, look: r }) : null }), h(this, "getNodeForKeydownEvent", async e => { let { orientation: t = "horizontal" } = this.props, n = "vertical" === t ? f.KeyboardKeys.ARROW_UP : f.KeyboardKeys.ARROW_LEFT, i = "vertical" === t ? f.KeyboardKeys.ARROW_DOWN : f.KeyboardKeys.ARROW_RIGHT; switch (e.which) { case n: return this.focusManager.getPreviousFocusableElement(); case i: return this.focusManager.getNextFocusableElement(); case f.KeyboardKeys.HOME: return this.focusManager.getFirstFocusableElement(); case f.KeyboardKeys.END: return this.focusManager.getLastFocusableElement() } return null }), h(this, "handleKeyDown", async e => { let t = await this.getNodeForKeydownEvent(e); null != t && (e.preventDefault(), t.focus()) }) } } h(C, "Header", function(e) { let { className: t, onClick: n, children: i, "aria-expanded": r, "aria-controls": s } = e; return (0, o.jsx)(I.Clickable, { tabIndex: null == n ? -1 : 0, className: d()(S.header, t), onClick: n, "aria-expanded": r, "aria-controls": s, focusProps: { offset: { top: -6 } }, children: (0, o.jsx)(T.Text, { variant: "eyebrow", color: "none", className: S.headerText, children: i }) }) }), h(C, "Item", O), h(C, "Separator", function(e) { let { style: t } = e; return (0, o.jsx)("div", { className: S.separator, style: t }) }), h(C, "Panel", m) }, 938941: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Table: function() { return I }, TableBody: function() { return c }, TableCell: function() { return u }, TableColumn: function() { return d }, TableHeader: function() { return E }, TableRow: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("227879"), a = n("260034"), o = n("993365"), l = n("909478"); function u(e) { return (0, i.jsx)(s.Cell, { ...e, className: l.cell }) } function d(e) { let { children: t, ...n } = e; return (0, i.jsx)(s.Column, { ...n, className: l.column, children: (0, i.jsx)(o.Text, { variant: "eyebrow", className: l.columnText, children: t }) }) } function _(e) { return (0, i.jsx)(s.Row, { ...e, className: l.row }) } function c(e) { return (0, i.jsx)(s.TableBody, { ...e, className: l.body }) } function E(e) { return (0, i.jsx)(s.TableHeader, { ...e, className: l.header }) } function I(e) { let { title: t, header: n, footer: o, ...u } = e, d = r.useId(); return (0, i.jsxs)("div", { className: l.container, children: [(0, i.jsxs)("div", { className: l.toolbar, children: [(0, i.jsx)(a.Heading, { className: l.__invalid_title, variant: "heading-md/semibold", id: d, children: t }), (0, i.jsx)("div", { children: n })] }), (0, i.jsx)(s.Table, { ...u, "aria-labelledby": d, className: l.table }), null != o && (0, i.jsx)("div", { className: l.footer, children: o })] }) } }, 993365: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Text: function() { return i.Text } }); var i = n("793030") }, 419993: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TextArea: function() { return p } }), n("653041"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("153832"), u = n("84735"), d = n("15127"), _ = n("766646"), c = n("993365"), E = n("179240"), I = n("689938"), T = n("709944"), f = n("12349"), S = n("842648"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = (0, l.v4)(), m = (0, l.v4)(), N = (0, l.v4)(); class p extends(i = s.Component) { getPaddingRight() { let { maxLength: e, showCharacterCountFullPadding: t } = this.props; if (null == e) return 10; let n = "".concat(e).length; return t && (n += "".concat(e, " / ").length), 7.23 * n + 10 } getCharsLeftLength() { let { maxLength: e, value: t } = this.props; return null == e ? null : e - (null != t ? t.length : 0) } getIsOverflowing() { let e = this.getCharsLeftLength(); return null != e && e < 0 } getIsUnderflowing() { let { minLength: e, value: t } = this.props; return null != e && (null != t ? t.length : 0) < e } renderCharacterCount() { if (this.props.showCharacterCount) { var e; let { value: t, maxLength: n } = this.props; return (0, r.jsxs)("div", { className: o()(T.maxLength, { [T.errorOverflow]: this.hasError() }), "aria-hidden": "true", children: [null !== (e = null == t ? void 0 : t.length) && void 0 !== e ? e : 0, " ", null != n && "/ ".concat(n)] }) } return null } renderMaxLength() { if (this.props.showCharacterCount || !1 === this.props.showRemainingCharacterCount) return null; let e = this.getCharsLeftLength(); return null == e ? null : (0, r.jsx)("div", { className: o()(T.maxLength, { [T.errorOverflow]: e < 0 }), "aria-hidden": "true", children: e }) } hasError() { return null != this.props.error || null != this.context.error || !1 !== this.state.dirty && (this.getIsOverflowing() || this.getIsUnderflowing() || !1) } getErrorMessage() { let { error: e, maxLength: t, minLength: n } = this.props, i = this.getIsOverflowing() ? I.default.Messages.MAXIMUM_LENGTH_ERROR.format({ maxLength: t }) : null, r = this.getIsUnderflowing() ? I.default.Messages.MINIMUM_LENGTH_ERROR.format({ minLength: n }) : null; return null != e && e.length < 1 || null === e ? null : void 0 !== e ? e : !1 === this.state.dirty ? null : null != i ? i : r } renderErrorMessage() { let e = this.getErrorMessage(); return null == e ? null : (0, r.jsx)(c.Text, { id: A, variant: "text-xs/normal", color: "text-danger", className: T.errorMessage, children: e }) } render() { var e, t; let { disabled: n, value: i, placeholder: s, autoFocus: a, minLength: l, maxLength: d, allowOverflow: c, spellCheck: h, resizeable: A, className: p, id: O, rows: C, flex: R, autosize: g, required: L, onInvalid: v, inputRef: D } = this.props, M = g ? E.TextAreaAutosize : "textarea", y = this.hasError(), P = null !== (t = this.props["aria-labelledby"]) && void 0 !== t ? t : null === (e = this.context) || void 0 === e ? void 0 : e.titleId, U = this.getAriaDescribedBy(); return (0, r.jsxs)("div", { className: o()(f.inputWrapper, { [T.flex]: R }), children: [(0, r.jsxs)("div", { className: o()(T.inputMaxLength, { [T.flex]: R }), children: [(0, r.jsx)(u.FocusRing, { children: (0, r.jsx)(M, { type: "text", className: o()(f.inputDefault, T.textArea, S.scrollbarDefault, p, { [f.error]: y, [f.disabled]: n, [T.resizeable]: A }), "aria-labelledby": P, "aria-describedby": U, "aria-invalid": y, style: { paddingRight: this.getPaddingRight() }, id: O, disabled: n, placeholder: s, value: i, autoFocus: a, minLength: l, maxLength: c ? void 0 : d, spellCheck: h, required: L, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, onInvalid: v, rows: C, ref: D }) }), null != l && (0, r.jsx)(_.HiddenVisually, { id: m, children: I.default.Messages.MINIMUM_LENGTH.format({ minLength: l }) }), null != d && (0, r.jsx)(_.HiddenVisually, { id: N, children: I.default.Messages.MAXIMUM_LENGTH.format({ maxLength: d }) }), this.renderCharacterCount(), this.renderMaxLength()] }), this.renderErrorMessage()] }) } constructor(e) { var t; super(e), h(this, "getAriaDescribedBy", () => { var e; let { maxLength: t, minLength: n, error: i } = this.props, r = [], s = null === (e = this.context) || void 0 === e ? void 0 : e.errorId; return null != s && r.push(s), null != i ? r.push(A) : (null != t && r.push(N), null != n && r.push(m)), r.length > 0 ? r.join(" ") : void 0 }), h(this, "onChange", e => { let { onChange: t, name: n } = this.props; null == t || t(e.currentTarget.value, n), this.setState({ dirty: !0 }) }), h(this, "onFocus", e => { let { onFocus: t, name: n } = this.props; null == t || t(e, n) }), h(this, "onBlur", e => { let { onBlur: t, name: n } = this.props; null == t || t(e, n) }), h(this, "onKeyDown", e => { let { onKeyDown: t } = this.props; null == t || t(e) }), this.state = { dirty: null !== (t = e.defaultDirty) && void 0 !== t && t } } } h(p, "contextType", d.FormContext), h(p, "defaultProps", { name: "", disabled: !1, placeholder: "", autoFocus: !1, resizeable: !1, flex: !1, autosize: !1, rows: 3, allowOverflow: !1 }) }, 179240: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { TextAreaAutosize: function() { return I } }); var r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("58654"), d = n("84735"), _ = n("842648"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = ["letter-spacing", "line-height", "padding-top", "padding-bottom", "font-family", "font-weight", "font-size", "text-transform", "width", "padding-left", "padding-right", "border-width", "box-sizing"]; class I extends(r = a.PureComponent) { componentDidMount() { Promise.resolve().then(() => this.calculateSize()) } componentDidUpdate(e, t) { if (this.state.height !== t.height) { let { onResize: e } = this.props; null == e || e(this.state.height) } e.value !== this.props.value && Promise.resolve().then(() => this.calculateSize()) } calculateSize() { var e; let t = this._textArea; if (null == t) return; let { fontWidthEstimate: n, rows: r } = this.props, s = null !== (e = this.props.value) && void 0 !== e ? e : t.value; if (null != n && -1 === s.indexOf("\n") && s.length * n < .8 * t.offsetWidth) { this.setState({ height: void 0 }); return } null == i && null != document.body && (i = document.createElement("textarea"), document.body.appendChild(i)); let { paddingSize: a, borderSize: o, boxSizing: l, sizingStyle: u } = this.calculateNodeStyling(t); i.setAttribute("style", u + ";\n visibility:hidden;\n overflow:hidden;\n position:absolute;\n z-index:-1000;\n top:0;\n right:0;\n"), i.value = s, null != r ? i.setAttribute("rows", "".concat(r)) : i.removeAttribute("rows"); let d = i.scrollHeight; "border-box" === l ? d += o : "content-box" === l && (d -= a), this.setState({ height: d }) } calculateNodeStyling(e) { let t = window.getComputedStyle(e), n = (0, u.getFirstTruthyValue)(t.getPropertyValue("box-sizing"), t.getPropertyValue("-moz-box-sizing"), t.getPropertyValue("-webkit-box-sizing")), i = parseFloat(t.getPropertyValue("padding-bottom")) + parseFloat(t.getPropertyValue("padding-top")), r = parseFloat(t.getPropertyValue("border-bottom-width")) + parseFloat(t.getPropertyValue("border-top-width")); return { sizingStyle: E.map(e => "".concat(e, ":").concat(t.getPropertyValue(e))).join(";"), paddingSize: i, borderSize: r, boxSizing: n } } clear() { null != this._textArea && (this._textArea.value = ""), this.calculateSize() } blur() { let { _textArea: e } = this; null != e && e.blur() } focus() { let { _textArea: e } = this; null != e && e.focus() } setSelection(e, t) { null != this._textArea && (this._textArea.selectionStart = e, this._textArea.selectionEnd = t) } get selectionStart() { var e, t; return null !== (t = null === (e = this._textArea) || void 0 === e ? void 0 : e.selectionStart) && void 0 !== t ? t : 0 } get selectionEnd() { var e, t; return null !== (t = null === (e = this._textArea) || void 0 === e ? void 0 : e.selectionEnd) && void 0 !== t ? t : 0 } get value() { var e, t; return null !== (t = null === (e = this._textArea) || void 0 === e ? void 0 : e.value) && void 0 !== t ? t : "" } render() { let { style: e, className: t, ...n } = this.props; delete n.fontWidthEstimate, delete n.onResize; let i = { ...this.state, ...e }; return (0, s.jsx)(d.FocusRing, { children: (0, s.jsx)("textarea", { ...n, className: l()(t, _.scrollbarGhostHairline), ref: this.handleSetRef, style: i, onChange: this.handleChange }) }) } constructor(e) { super(e), c(this, "_textArea", void 0), c(this, "handleSetRef", e => { this._textArea = e }), c(this, "handleChange", e => { let { onChange: t } = this.props; null == t || t(e), this.calculateSize() }), this.state = { height: void 0 } } } c(I, "defaultProps", { autoFocus: !1, disabled: !1, autoCorrect: "off" }) }, 463208: function(e, t, n) { "use strict"; n.r(t), n.d(t, { InputError: function() { return S }, TextInput: function() { return h } }); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("920906"), u = n("84735"), d = n("15127"), _ = n("993365"), c = n("699682"), E = n("689938"), I = n("12349"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = { DEFAULT: I.inputDefault, MINI: I.inputMini }; function S(e) { let { error: t } = e, n = (0, l.useTransition)(t, { config: { tension: 250, clamp: !0 }, from: { marginTop: 0, height: 0, opacity: 0, transform: "translate3d(0, -100%, 0)" }, enter: { marginTop: 4, height: "auto", opacity: 1, transform: "translate3d(0, -0px, 0)" }, leave: { marginTop: 0, height: 0, opacity: 0, transform: "translate3d(0, -100%, 0)" } }), i = (0, c.default)(t); return (0, r.jsx)(r.Fragment, { children: n((e, n, s) => { let { key: a } = s, { transform: o, ...u } = e; return null != n && "" !== n ? (0, r.jsx)(l.animated.div, { style: { ...u, overflow: "hidden" }, children: (0, r.jsx)(l.animated.div, { style: { transform: o }, children: (0, r.jsx)(_.Text, { color: "text-danger", variant: "text-xs/normal", children: null != t && "" !== t ? t : i }) }) }, a) : null }) }) } class h extends(i = s.Component) { render() { var e, t; let { className: n, inputClassName: i, inputPrefix: s, disabled: a, size: l, editable: d, inputRef: _, prefixElement: c, focusProps: E, ...T } = this.props, f = null !== (t = T["aria-labelledby"]) && void 0 !== t ? t : null === (e = this.context) || void 0 === e ? void 0 : e.titleId; return (0, r.jsxs)("div", { className: o()(I.inputWrapper, n), children: [null != c && c, null != s ? (0, r.jsx)("span", { className: I.inputPrefix, children: s }) : null, (0, r.jsx)(u.FocusRing, { ...E, children: (0, r.jsx)("input", { className: o()(l, i, { [I.error]: this.hasError(), [I.disabled]: a, [I.editable]: d }), disabled: a, readOnly: !1 === d || void 0, ...T, "aria-labelledby": f, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, ref: _ }) }), (0, r.jsx)(S, { error: this.getError() })] }) } constructor(e) { var t; super(e), T(this, "hasError", () => null != this.props.error && !!(this.props.error.length > 0) || !1 !== this.state.dirty && (this.getIsUnderFlowing() || this.getIsOverFlowing())), T(this, "getError", () => { let { error: e, minLength: t, maxLength: n } = this.props, i = this.getIsUnderFlowing() ? E.default.Messages.MINIMUM_LENGTH_ERROR.format({ minLength: t }) : null, r = this.getIsOverFlowing() ? E.default.Messages.MAXIMUM_LENGTH_ERROR.format({ maxLength: n }) : null; return null != e && e.length < 1 || null === e ? null : null != e ? e : !1 === this.state.dirty ? null : null != i ? i : r }), T(this, "getIsUnderFlowing", () => { var e; let { value: t, minLength: n } = this.props; return null != n && (null !== (e = null == t ? void 0 : t.length) && void 0 !== e ? e : 0) < n }), T(this, "getIsOverFlowing", () => { var e; let { value: t, maxLength: n } = this.props; return null != n && (null !== (e = null == t ? void 0 : t.length) && void 0 !== e ? e : 0) > n }), T(this, "onChange", e => { var t, n; null === (t = (n = this.props).onChange) || void 0 === t || t.call(n, e.currentTarget.value, this.props.name), this.setState({ dirty: !0 }) }), T(this, "onFocus", e => { var t, n; null === (t = (n = this.props).onFocus) || void 0 === t || t.call(n, e, this.props.name) }), T(this, "onBlur", e => { var t, n; null === (t = (n = this.props).onBlur) || void 0 === t || t.call(n, e, this.props.name) }), this.state = { dirty: null !== (t = e.defaultDirty) && void 0 !== t && t } } } T(h, "Sizes", f), T(h, "contextType", d.FormContext), T(h, "defaultProps", { name: "", size: f.DEFAULT, disabled: !1, type: "text", placeholder: "", autoFocus: !1, maxLength: 999 }) }, 397943: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TimeInput: function() { return l } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("921349"), a = n("563040"), o = n("16813"); function l(e) { let { value: t, onChange: n, hideValue: l, disabled: u = !1 } = e, d = r.useRef(null), _ = r.useMemo(() => new a.TimeOptions, []), [c, E] = r.useState(""); function I(e) { null != t && n((0, a.timeAtSpecificDay)(t, _.selectValue(e))) } return (0, i.jsx)(s.SearchableSelect, { ref: d, className: o.select, options: _.getOptions(c), value: l ? void 0 : _.lookupByValue(t), onChange: I, isDisabled: u, onSearchChange: E, onKeyDown: function(e) { if ("Enter" === e.key) { let e = (0, a.convertToTimeOfADay)(t, c); if (null != e) { var n; I(e), null === (n = d.current) || void 0 === n || n.close() } } } }) } }, 345332: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Toast: function() { return I }, createToast: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("153832"), a = n("993365"), o = n("481060"), l = n("529653"), u = n("502283"), d = n("525241"), _ = n("561466"), c = n("140139"); function E(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : _.TOAST_DEFAULT_OPTIONS, { position: i = _.TOAST_DEFAULT_OPTIONS.position, component: r = _.TOAST_DEFAULT_OPTIONS.component, duration: a = _.TOAST_DEFAULT_OPTIONS.duration } = n; return { message: e, id: (0, s.v4)(), type: t, options: { position: i, component: r, duration: a } } } let I = r.memo(function(e) { let { message: t, type: n, id: r, options: { component: s = _.TOAST_DEFAULT_OPTIONS.component } = _.TOAST_DEFAULT_OPTIONS } = e; return null != s ? (0, i.jsx)(i.Fragment, { children: s }) : (0, i.jsxs)("div", { id: r, className: c.toast, children: [function(e) { switch (e) { case _.ToastType.SUCCESS: return (0, i.jsx)(d.default, { className: c.icon, color: o.tokens.colors.STATUS_POSITIVE.css }); case _.ToastType.FAILURE: return (0, i.jsx)(u.default, { className: c.icon, color: o.tokens.colors.STATUS_DANGER.css }); case _.ToastType.CLIP: return (0, i.jsx)(l.default, { className: c.clipIcon, color: o.tokens.colors.HEADER_PRIMARY.css }); default: return null } }(n), (0, i.jsx)(a.Text, { className: c.__invalid_content, color: "header-primary", variant: "text-md/normal", children: t })] }) }) }, 417153: function(e, t, n) { "use strict"; n.r(t), n.d(t, { popToast: function() { return s }, showToast: function() { return r }, useToastStore: function() { return i } }), n("47120"); let i = (0, n("652874").default)(() => ({ currentToast: null, queuedToasts: [] })); function r(e) { i.setState(t => null != t.currentToast ? { ...t, queuedToasts: [...t.queuedToasts, e] } : { currentToast: e, queuedToasts: [] }) } function s() { i.setState(e => { let t = e.queuedToasts; return t.length > 0 ? { currentToast: t[0], queuedToasts: t.slice(1) } : { currentToast: null, queuedToasts: [] } }) } }, 561466: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { TOAST_DEFAULT_OPTIONS: function() { return o }, ToastPosition: function() { return r }, ToastType: function() { return i } }); (s = i || (i = {}))[s.MESSAGE = 0] = "MESSAGE", s[s.SUCCESS = 1] = "SUCCESS", s[s.FAILURE = 2] = "FAILURE", s[s.CUSTOM = 3] = "CUSTOM", s[s.CLIP = 4] = "CLIP", (a = r || (r = {}))[a.TOP = 0] = "TOP", a[a.BOTTOM = 1] = "BOTTOM"; let o = { position: 0, component: null, duration: 3e3 } }, 70308: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ToastContainer: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("920906"), a = n("442837"), o = n("607070"), l = n("345332"), u = n("417153"), d = n("561466"), _ = n("775725"); let c = { duration: 300, friction: 24, tension: 280 }, E = { [d.ToastPosition.TOP]: { styles: _.containerTop, transition: { trail: 400, from: { transform: "translate3d(0, -100%, 0)", opacity: 0, config: c }, enter: { transform: "translate3d(0, -0px, 0)", opacity: 1, config: c }, leave: { transform: "translate3d(0, -100%, 0)", opacity: 0, config: { ...c, friction: 40, clamp: !0 } } } }, [d.ToastPosition.BOTTOM]: { styles: _.containerBottom, transition: { trail: 400, from: { transform: "translate3d(0, 100%, 0)", opacity: 0, config: c }, enter: { transform: "translate3d(0, 0px, 0)", opacity: 1, config: c }, leave: { transform: "translate3d(0, 100%, 0)", opacity: 0, config: { ...c, friction: 40, clamp: !0 } } } } }; function I() { var e, t, n, _; let c = (0, u.useToastStore)(e => e.currentToast), I = r.useRef(null !== (n = null == c ? void 0 : null === (e = c.options) || void 0 === e ? void 0 : e.position) && void 0 !== n ? n : d.TOAST_DEFAULT_OPTIONS.position), T = r.useRef(null !== (_ = null == c ? void 0 : null === (t = c.options) || void 0 === t ? void 0 : t.duration) && void 0 !== _ ? _ : d.TOAST_DEFAULT_OPTIONS.duration), f = (0, a.useStateFromStores)([o.default], () => o.default.useReducedMotion); r.useEffect(() => { if (null != c) { var e, t, n, i; I.current = null !== (n = null === (e = c.options) || void 0 === e ? void 0 : e.position) && void 0 !== n ? n : d.TOAST_DEFAULT_OPTIONS.position, T.current = null !== (i = null === (t = c.options) || void 0 === t ? void 0 : t.duration) && void 0 !== i ? i : d.TOAST_DEFAULT_OPTIONS.duration } }, [c]); let S = r.useMemo(() => { var e, t; return E[null !== (t = null == c ? void 0 : null === (e = c.options) || void 0 === e ? void 0 : e.position) && void 0 !== t ? t : I.current] }, [c]), h = (0, s.useTransition)(c, { keys: e => { var t; return null !== (t = null == e ? void 0 : e.id) && void 0 !== t ? t : "" }, immediate: f, ...S.transition }); return r.useEffect(() => { null != c && setTimeout(() => { (0, u.popToast)() }, T.current) }, [c]), (0, i.jsx)("div", { className: S.styles, children: h((e, t) => null === t ? null : (0, i.jsx)(s.animated.div, { style: e, children: (0, i.jsx)(l.Toast, { ...t }) }, t.id)) }) } }, 981729: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Tooltip: function() { return D }, TooltipColors: function() { return i }, TooltipContainer: function() { return M }, TooltipLayer: function() { return C } }), n("411104"), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("120356"), u = n.n(l), d = n("699581"), _ = n.n(d), c = n("920906"), E = n("873546"), I = n("374470"), T = n("846519"), f = n("377527"), S = n("186325"), h = n("607070"), A = n("153850"), m = n("816809"); function N(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).PRIMARY = "primary", s.NESTED = "nested", s.BLACK = "black", s.GREY = "grey", s.BRAND = "brand", s.GREEN = "green", s.YELLOW = "yellow", s.RED = "red", s.CUSTOM = "custom", s.PREMIUM = "premium"; let p = Object.freeze({}), O = Object.freeze({ top: m.tooltipTop, bottom: m.tooltipBottom, left: m.tooltipLeft, right: m.tooltipRight, center: m.tooltipCenter, window_center: m.tooltipCenter, primary: m.tooltipPrimary, nested: m.tooltipNested, black: m.tooltipBlack, grey: m.tooltipGrey, brand: m.tooltipBrand, green: m.tooltipGreen, yellow: m.tooltipYellow, red: m.tooltipRed, custom: null, premium: m.tooltipPremium }), C = e => { let { targetElementRef: t, align: n = "center", position: i, color: r, children: s, onNonAccessibleClick: o, tooltipClassName: l, tooltipStyle: d, tooltipContentClassName: _, spacing: E = 8, animationStyle: I, disableTooltipPointerEvents: T = !1, allowOverflow: f = !1 } = e, S = "".concat("string" == typeof s ? s : "", ":").concat(i); return (0, a.jsx)(A.AppReferencePositionLayer, { disablePointerEvents: T, targetRef: t, position: i, autoInvert: !0, align: n, positionKey: S, spacing: E, nudgeAlignIntoViewport: !0, children: e => { let { position: t, nudge: E } = e; return (0, a.jsxs)(c.animated.div, { onClick: o, className: u()(m.tooltip, O[null != t ? t : i], O[r], { [m.tooltipDisablePointerEvents]: T }, l), style: { ...I, ...d }, children: [(0, a.jsx)("div", { className: m.tooltipPointer, style: function(e, t, n) { let i = "left" === e || "right" === e, r = "50%", s = n; return t === (i ? "top" : "left") ? (r = "0%", s += 16) : t === (i ? "bottom" : "right") && (r = "100%", s -= 20), { [i ? "top" : "left"]: "calc(".concat(r, " + ").concat(s, "px)") } }(null != t ? t : i, n, E) }), (0, a.jsx)("div", { className: u()(m.tooltipContent, { [m.tooltipContentAllowOverflow]: f }, _), children: s })] }) } }) }, R = { scale: .95, opacity: 0 }, g = { scale: 1, opacity: 0 }, L = { scale: 1, opacity: 1 }, v = e => { let { isVisible: t, onAnimationRest: n, targetElementRef: i, ...r } = e, { reducedMotion: s } = o.useContext(S.AccessibilityPreferencesContext); return (0, c.useTransition)(t, { keys: e => e ? "tooltip" : "empty", config: f.TOOLTIP_SPRING_CONFIG, from: s.enabled ? g : R, enter: L, leave: s.enabled ? g : R, onRest: n })((e, t) => t ? (0, a.jsx)(C, { animationStyle: e, targetElementRef: i, ...r }) : null) }; class D extends(r = o.Component) { static getDerivedStateFromProps(e, t) { return t.shouldShowTooltip && null == e.text ? { shouldShowTooltip: !1 } : null } componentDidMount() { this.shouldShowTooltip(this.props, this.state) && this.setDomElement() } componentDidUpdate(e, t) { let n = this.shouldShowTooltip(this.props, this.state); n !== this.shouldShowTooltip(e, t) && (n ? this.setDomElement() : this.hasDomElement = !1) } setDomElement() { let e = _().findDOMNode(this); if (!(0, I.isElement)(e)) throw Error("Tooltip cannot find DOM node"); this.domElementRef.current = e, this.hasDomElement = !0, this.forceUpdate() } componentWillUnmount() { this.showTimeout.stop(), this.domElementRef.current = null } render() { let e; let { children: t, text: n, "aria-label": i } = this.props; if (null == n) return t(p); "string" == typeof i ? e = i : "string" == typeof n && !1 !== i && (e = n); let r = { onClick: this.handleClick, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onContextMenu: this.handleContextMenu, onFocus: this.handleFocus, onBlur: this.handleBlur }; return null != e && (r["aria-label"] = e), (0, a.jsxs)(o.Fragment, { children: [t(r), this.renderTooltip()] }) } shouldShowTooltip(e, t) { return e.shouldShow && (t.shouldShowTooltip || e.forceOpen) } renderTooltip() { let { text: e, align: t, position: n, color: i, spacing: r, tooltipClassName: s, tooltipStyle: o, tooltipContentClassName: l, disableTooltipPointerEvents: u, onAnimationRest: d, allowOverflow: _, clickableOnMobile: c, hideOnClick: I } = this.props, T = (E.isMobile || E.isTablet) && !0 === c && I, f = this.shouldShowTooltip(this.props, this.state) && this.hasDomElement, S = null; return S = e instanceof Function ? f ? e() : null : e, (0, a.jsx)(v, { disableTooltipPointerEvents: !1 !== u && !T || !0 === u, targetElementRef: this.domElementRef, tooltipStyle: o, tooltipClassName: s, tooltipContentClassName: l, align: t, position: n, color: i, spacing: r, isVisible: f, onAnimationRest: d, onNonAccessibleClick: T ? this.handleClick : void 0, allowOverflow: _, children: S }) } show() { let { delay: e, overflowOnly: t } = this.props; if (t) { let e = _().findDOMNode(this); if (null == e || (0, I.isElement)(e, HTMLElement) && e.offsetWidth >= e.scrollWidth) return } null != e ? this.showTimeout.start(e, () => this.toggleShow(!0), !1) : this.toggleShow(!0) } hide() { this.showTimeout.stop(), this.toggleShow(!1) } toggleShow(e) { if (this.state.shouldShowTooltip !== e) { var t, n, i, r; e ? null === (t = (n = this.props).onTooltipShow) || void 0 === t || t.call(n) : null === (i = (r = this.props).onTooltipHide) || void 0 === i || i.call(r), _().flushSync(() => { this.setState({ shouldShowTooltip: e }) }) } } constructor(...e) { super(...e), N(this, "showTimeout", new T.Timeout), N(this, "domElementRef", o.createRef()), N(this, "hasDomElement", !1), N(this, "state", { shouldShowTooltip: !1 }), N(this, "handleMouseEnter", () => { !((E.isMobile || E.isTablet) && !0 === this.props.clickableOnMobile) && this.show() }), N(this, "handleMouseLeave", () => { !((E.isMobile || E.isTablet) && !0 === this.props.clickableOnMobile) && this.hide() }), N(this, "handleFocus", () => { h.default.keyboardModeEnabled && this.show() }), N(this, "handleBlur", () => { this.hide() }), N(this, "handleClick", () => { let e = this.hasDomElement; e && this.props.hideOnClick ? this.hide() : !e && (E.isMobile || E.isTablet) && !0 === this.props.clickableOnMobile && this.show() }), N(this, "handleContextMenu", () => { this.hide() }) } } N(D, "Colors", i), N(D, "defaultProps", { hideOnClick: !0, position: "top", color: "primary", forceOpen: !1, spacing: 8, shouldShow: !0, allowOverflow: !1, overflowOnly: !1 }); let M = e => { let { children: t, className: n, element: i = "div", ...r } = e; return (0, a.jsx)(D, { ...r, children: e => o.createElement(i, null != n ? { ...e, className: n } : e, t) }) } }, 981292: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TransitionGroup: function() { return u }, TransitionStates: function() { return i } }), n("47120"), n("653041"); var i, r, s = n("735250"), a = n("470079"); (r = i || (i = {}))[r.MOUNTED = 0] = "MOUNTED", r[r.ENTERED = 1] = "ENTERED", r[r.YEETED = 2] = "YEETED"; let o = {}; function l(e) { return e } function u(e) { let { items: t, renderItem: n, getItemKey: i, wrapChildren: r = l, lazyCleanUpDelay: u } = e, d = a.useRef(-1); a.useLayoutEffect(() => () => clearTimeout(d.current)); let [, _] = a.useState(o), c = a.useRef(null), E = a.useMemo(() => { var e; let r = new Set(null === (e = c.current) || void 0 === e ? void 0 : e.keys()), s = new Map(c.current); for (let e of t) { let t = i(e), a = s.get(t); if (null == a) { let i = null != c.current ? 1 : 0, r = () => { var e, n; let i = null === (e = c.current) || void 0 === e ? void 0 : e.get(t); null == i || (2 === i.state ? (null === (n = c.current) || void 0 === n || n.delete(t), null != u ? (clearTimeout(d.current), d.current = setTimeout(() => _({}), u)) : _({})) : __DEV__ && console.warn("SimpleTransitionGroup.cleanUp: Attempted to remove an item that isn't yeetable: ".concat(t))) }, s = n(t, e, i, r); a = { item: e, children: s, state: i, cleanUp: r, renderItem: n } } else if (a.item !== e || a.renderItem !== n || 2 === a.state) { let { cleanUp: i } = a, r = 2 === a.state ? 1 : a.state, s = n(t, e, r, a.cleanUp); a = { item: e, children: s, state: r, cleanUp: i, renderItem: n } } s.set(t, a), r.delete(t) } for (let e of r) { let t = s.get(e); if (null != t) { if (2 !== t.state || t.renderItem !== n) { let { item: i, cleanUp: r } = t, a = n(e, t.item, 2, t.cleanUp); null != (t = { item: i, children: a, state: 2, cleanUp: r, renderItem: n }).children ? s.set(e, t) : s.delete(e) } else s.set(e, t) } } return s }, [t, i, n, u]); a.useInsertionEffect(() => (c.current = E, () => { var e; return null === (e = c.current) || void 0 === e ? void 0 : e.clear() }), [E]); let I = []; for (let [, e] of E) I.push(e.children); return (0, s.jsx)(s.Fragment, { children: I.length > 0 ? r(I) : null }) } }, 801787: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DisableCustomTheme: function() { return E }, RootThemeContextProvider: function() { return _ }, ThemeContextFlags: function() { return i }, ThemeContextProvider: function() { return c }, UseThemeContext: function() { return T }, setThemeFlag: function() { return l }, useThemeContext: function() { return I } }), n("789020"), n("411104"); var i, r, s = n("735250"), a = n("470079"), o = n("231338"); function l(e, t) { return e | t } function u(e) { let t = JSON.stringify(e); return { ...e, key: t } }(r = i || (i = {}))[r.MOBILE_REDESIGN_ENABLED = 2] = "MOBILE_REDESIGN_ENABLED", r[r.MOBILE_DARK_GRADIENT_THEME_ENABLED = 4] = "MOBILE_DARK_GRADIENT_THEME_ENABLED", r[r.MOBILE_LIGHT_GRADIENT_THEME_ENABLED = 8] = "MOBILE_LIGHT_GRADIENT_THEME_ENABLED", r[r.REDUCED_CONTRAST_ENABLED = 16] = "REDUCED_CONTRAST_ENABLED", r[r.INCREASED_CONTRAST_ENABLED = 32] = "INCREASED_CONTRAST_ENABLED", r[r.REDUCE_SATURATION_ENABLED = 64] = "REDUCE_SATURATION_ENABLED"; let d = a.createContext({ theme: "light", primaryColor: null, secondaryColor: null, gradient: null, key: "light-false-null-null-null", flags: 0, contrast: 1, saturation: 1 }); function _(e) { let { children: t, theme: n = o.ThemeTypes.DARK, primaryColor: i = null, secondaryColor: r = null, gradient: l = null, flags: _ = 0, contrast: c = 1, saturation: E = 1 } = e, I = a.useMemo(() => u({ theme: n, primaryColor: i, secondaryColor: r, gradient: l, flags: _, contrast: c, saturation: E }), [n, i, r, l, _, c, E]); return (0, s.jsx)(d.Provider, { value: I, children: t }) } function c(e) { let { children: t, theme: n, primaryColor: i, secondaryColor: r, gradient: o, flags: l, contrast: _, saturation: c } = e, E = a.useContext(d), I = a.useMemo(() => u({ theme: null != n ? n : E.theme, primaryColor: null != i ? i : E.primaryColor, secondaryColor: null != r ? r : E.secondaryColor, gradient: null != o ? o : E.gradient, flags: null != l ? l : E.flags, contrast: null != _ ? _ : E.contrast, saturation: null != c ? c : E.saturation }), [n, E.theme, E.primaryColor, E.secondaryColor, E.gradient, E.flags, E.contrast, E.saturation, i, r, o, l, _, c]); return (0, s.jsx)(d.Provider, { value: I, children: t }) } function E(e) { let t = I(), n = a.useMemo(() => u({ ...t, primaryColor: null, secondaryColor: null }), [t]); return (0, s.jsx)(d.Provider, { value: n, children: e.children }) } function I() { let e = a.useContext(d); if (null == e) throw Error("useThemeContext must be used within a ThemeContext.Provider"); return e } function T(e) { let { children: t } = e, n = I(); return (0, s.jsx)(s.Fragment, { children: t(n) }) } }, 663002: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isThemeDark: function() { return s }, isThemeLight: function() { return r } }); var i = n("231338"); function r(e) { return e === i.ThemeTypes.LIGHT } function s(e) { switch (e) { case i.ThemeTypes.DARK: case i.ThemeTypes.MIDNIGHT: case i.ThemeTypes.DARKER: return !0; default: return !1 } } }, 335854: function(e, t, n) { "use strict"; n.r(t), n.d(t, { designConfig: function() { return i }, setDesignConfig: function() { return r } }); let i = { getDefaultLinkInterceptor: () => void 0, useTrackNavigatorScreenImpression: () => void 0 }; function r(e) { Object.assign(i, e) } }, 477690: function(e, t, n) { "use strict"; var i, r; n.r(t), (r = i || (i = {})).CHANNEL_CHAT_RESIZABLE_SIDEBAR_RESIZE_HANDLE_WIDTH = "8px", r.WAVE_SPLASH_RESPONSIVE_WIDTH_MOBILE = "485px", r.ACTIVITIES_HOME_WHATS_NEW_TILE_WIDTH = "224px", r.ACTIVITIES_HOME_WHATS_NEW_HORIZONTAL_MARGIN = "10px", r.ACTIVITIES_HOME_HAPPENING_NOW_CARD_WIDTH = "305px", r.ACTIVITIES_HOME_HAPPENING_NOW_GAP = "16px", r.ACTIVITY_BOOKMARK_EMBED_IMAGE_WIDTH = "356px", r.FOLDER_ITEM_ANIMATION_DURATION = "150ms", r.FOLDER_ITEM_GUILD_ICON_SIZE = "48px", r.GUILD_TOOLTIP_ICON_SIZE = "20px", r.GUILD_TOOLTIP_ICON_SIZE_V_2 = "16px", r.MEMBER_LIST_ITEM_AVATAR_DECORATION_PADDING = "2px", r.FULL_SCREEN_LAYER_ANIMATION_DURATION = "150ms", r.GUILD_SETTINGS_PREMIUM_TIER_STATUS_PROGRESS_WITH_SUBSCRIPTIONS_MARGIN_TOP = "7px", r.STICKERS_CONSTANTS_STICKER_PURCHASE_PACK_PREVIEW_DIMENSIONS = "76px", r.STICKERS_CONSTANTS_STICKER_PURCHASE_PACK_PREVIEW_PADDING = "2px", r.STICKERS_CONSTANTS_STICKER_PURCHASE_PACK_PREVIEW_MARGIN = "0", r.STICKERS_CONSTANTS_STICKER_CATEGORY_LIST_PADDING = "8px", r.STICKERS_CONSTANTS_STICKER_CATEGORY_ICON_SIZE = "32px", r.STICKERS_CONSTANTS_STICKER_CATEGORY_ICON_MARGIN = "8px", r.STICKERS_CONSTANTS_STICKER_CATEGORY_UNICODE_ICON_SIZE = "24px", r.STICKERS_CONSTANTS_CATEGORY_SEPARATOR_SIZE = "1px", r.STICKERS_CONSTANTS_CATEGORY_SEPARATOR_MARGIN_VERTICAL = "12px", r.STICKERS_CONSTANTS_STICKER_PICKER_BREAKPOINT_SMALL = "360px", r.STICKERS_CONSTANTS_STICKER_PICKER_BREAKPOINT_MEDIUM = "446px", r.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_TOP = "0", r.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_TOP_SEARCH_RESULTS = "8px", r.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_RIGHT = "0", r.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_BOTTOM = "0", r.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_LEFT = "8px", r.STICKERS_CONSTANTS_STICKERS_LIST_DIVIDER_HEIGHT = "30px", r.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_DIMENSIONS = "96px", r.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_DIMENSIONS_SMALL = "80px", r.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_PADDING = "2px", r.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_MARGIN = "12px", r.STICKERS_CONSTANTS_STICKERS_LIST_EMPTY_GUILD_UPSELL_HEIGHT = "54px", r.EXPRESSION_PICKER_CONSTANTS_EXPRESSION_PICKER_LIST_SECTION_HEADING_HEIGHT = "32px", r.EXPRESSION_PICKER_CONSTANTS_EXPRESSION_PICKER_INSPECTOR_BAR_GRAPHIC_PRIMARY_DIMENSIONS = "28px", r.EXPRESSION_PICKER_CONSTANTS_EXPRESSION_PICKER_INSPECTOR_BAR_GRAPHIC_SECONDARY_DIMENSIONS = "32px", r.STICKERS_CONSTANTS_STICKER_DIMENSION = "160px", r.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_MARGIN_SMALL = "4px", r.ASPECT_STABLE_IMAGE_CONTAINER_PADDING = "20px", r.PREMIUM_GUILD_PROGRESS_BAR_PROGRESS_BAR_WIDTH = "24px", r.PREMIUM_GUILD_PROGRESS_BAR_TIER_MARKER_SIZE = "16px", r.ACTIVITY_SHELF_MODAL_MODAL_PADDING = "80px", r.ACTIVITY_SHELF_MODAL_MODAL_WIDTH = "496px", r.ACTIVITY_SHELF_MODAL_MODAL_MIN_WIDTH = "496px", r.ACTIVITY_SHELF_MODAL_MODAL_MAX_WIDTH = "1024px", r.ACTIVITY_SHELF_MODAL_MODAL_MAX_HEIGHT = "720px", r.ACTIVITY_SHELF_MODAL_MODAL_ART_HEIGHT = "64px", r.ACTIVITY_SHELF_ITEM_ACTIVITY_ITEM_HEIGHT = "230px", r.ACTIVITY_SHELF_ITEM_LARGE_ACTIVITY_ITEM_HEIGHT = "143px", r.ACTIVITY_SHELF_SLIDE_ACTIVITY_DIRECTORY_SHELF_GRID_GAP = "16px", r.LIVE_INDICATOR_BORDER_RADIUS = "16px", r.GUILD_PRODUCT_DOWNLOAD_MODAL_HEADER_IMAGE_WIDTH = "119px", r.FOLDER_ITEM_GUILD_ICON_MARGIN = "8px", r.EMBEDDED_APPLICATION_INVITE_IMAGE_WIDTH_LARGE = "288px", r.EMBEDDED_APPLICATION_INVITE_IMAGE_WIDTH_SMALL = "225px", r.EMBEDDED_APPLICATION_INVITE_CONTENT_WIDTH = "576px", r.GUILD_ROLE_SUBSCRIPTION_CARD_BASIC_INFO_TIER_IMAGE_SIZE = "80px", r.GUILD_ROLE_SUBSCRIPTION_CARD_BASIC_INFO_TIER_IMAGE_SIZE_MOBILE = "48px", r.APPLICATION_DIRECTORY_CONTENT_MAX_WIDTH = "1024px", r.GUILD_COUNT_SMALL_ICON_SIZE = "16px", r.GUILD_COUNT_LARGE_ICON_SIZE = "20px", r.GUILD_BOOSTING_SIDEBAR_DISPLAY_CONDITIONAL_BOTTOM_MARGIN = "12px", r.USER_PREMIUM_GUILD_SUBSCRIPTION_EASTER_EGG_SIZE = "196px", r.APPLICATION_SUBSCRIPTION_CARD_LISTING_IMAGE_SIZE = "40px", r.EMOJI_PICKER_CONSTANTS_EMOJI_CONTAINER_PADDING_HORIZONTAL = "4px", r.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_LEFT = "8px", r.EMOJI_PICKER_CONSTANTS_GUILD_CATEGORY_ICON_SIZE = "32px", r.EMOJI_PICKER_CONSTANTS_GUILD_CATEGORY_ICON_MARGIN_VERICAL = "8px", r.EMOJI_PICKER_CONSTANTS_UNICODE_CATEGORY_ICON_SIZE = "24px", r.EMOJI_PICKER_CONSTANTS_UNICODE_CATEGORY_ICON_MARGIN_VERTICAL = "2px", r.EMOJI_PICKER_CONSTANTS_UNICODE_CATEGORY_ICON_PADDING = "4px", r.EMOJI_PICKER_CONSTANTS_CATEGORY_SEPARATOR_SIZE = "1px", r.EMOJI_PICKER_CONSTANTS_CATEGORY_SEPARATOR_MARGIN_VERTICAL = "12px", r.EMOJI_PICKER_CONSTANTS_EMOJI_CONTAINER_PADDING_VERTICAL = "4px", r.EMOJI_PICKER_CONSTANTS_DIVERSITY_EMOJI_SIZE = "24px", r.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_TOP = "0", r.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_RIGHT = "0", r.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_BOTTOM = "8px", r.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_SEARCH_RESULTS_PADDING_TOP = "8px", r.EMOJI_PICKER_CONSTANTS_EMOJI_SECTION_MARGIN_BOTTOM = "12px", r.EMOJI_PICKER_CONSTANTS_EMOJI_PREMIUM_UPSELL_HEIGHT = "54px", r.EMOJI_PICKER_CONSTANTS_EMOJI_PREMIUM_UPSELL_MARGIN_TOP = "16px", r.VOICE_WIDGET_TOP_MARGIN = "var(--custom-widget-bar-height) + calc(2 * var(--custom-widget-bar-padding))", r.EXPRESSION_SUGGESTIONS_CONTAINER_PADDING = "8px", r.EXPRESSION_SUGGESTIONS_STICKER_SUGGESTION_SIZE = "48px", r.EXPRESSION_SUGGESTIONS_STICKER_SUGGESTION_MARGIN = "8px", r.COLLECTION_GALLERY_MEDIA_BREAKPOINT = "1024px", r.COLLECTION_GALLERY_COLUMN_CARD_HEIGHT = "600px", r.COLLECTION_GALLERY_ROW_CARD_HEIGHT = "283px", r.COLLECTION_LIST_CARD_GAP = "16px", r.GUILD_SETTINGS_ROLE_SUBSCRIPTIONS_OVERVIEW_SETTINGS_MAX_WIDTH = "520px", r.IMPORT_BENEFITS_MODAL_ROLE_ICON_SIZE = "40px", r.ROLE_ICON_UPLOADER_ICON_SIZE = "24px", r.GRADIENT_PROGRESS_NOTCH_WIDTH = "8px", r.GAME_LIST_ROW_MIN_HEIGHT = "62px", r.GAME_LIST_LINKED_TO_GLOW_DURATION = "2000ms", r.INTERACTION_IFRAME_MODAL_MODAL_MIN_WIDTH = "320px", r.INTERACTION_IFRAME_MODAL_MODAL_MAX_WIDTH = "1280px", r.INTERACTION_IFRAME_MODAL_MODAL_MARGIN = "80px", r.INTERACTION_IFRAME_MODAL_MODAL_HEADER_HEIGHT = "52px", r.APPLICATION_DIRECTORY_PROFILE_ICON_SIZE = "122px", t.default = i }, 780384: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AccessibilityAnnouncer: function() { return i.AccessibilityAnnouncer }, AccessibilityPreferencesContext: function() { return r.AccessibilityPreferencesContext }, LOW_SATURATION_THRESHOLD: function() { return s.LOW_SATURATION_THRESHOLD }, RootThemeContextProvider: function() { return a.RootThemeContextProvider }, ThemeContextFlags: function() { return a.ThemeContextFlags }, WCAGContrastRatios: function() { return l.WCAGContrastRatios }, getContrastingColor: function() { return l.getContrastingColor }, isThemeDark: function() { return o.isThemeDark }, isThemeLight: function() { return o.isThemeLight }, setThemeFlag: function() { return a.setThemeFlag }, useThemeContext: function() { return a.useThemeContext } }); var i = n("680732"), r = n("186325"), s = n("885518"); n("532712"); var a = n("801787"), o = n("663002"), l = n("950104") }, 180035: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useToken: function() { return a } }); var i = n("399606"), r = n("410030"), s = n("607070"); function a(e, t) { let n = (0, r.default)(), a = (0, i.useStateFromStores)([s.default], () => s.default.saturation); return e.resolve({ theme: null != t ? t : n, saturation: a }) } }, 481060: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AccessibilityAnnouncer: function() { return i.AccessibilityAnnouncer }, AccessibilityPreferencesContext: function() { return r.AccessibilityPreferencesContext }, AdvancedScroller: function() { return eO.AdvancedScrollerThin }, AdvancedScrollerAuto: function() { return eO.AdvancedScrollerAuto }, AdvancedScrollerNone: function() { return eO.AdvancedScrollerNone }, AdvancedScrollerThin: function() { return eO.AdvancedScrollerThin }, Anchor: function() { return a.Anchor }, AnimatedAvatar: function() { return o.AnimatedAvatar }, AnimatedDots: function() { return N.AnimatedDots }, AnimatedStatus: function() { return eV.AnimatedStatus }, Avatar: function() { return o.Avatar }, AvatarSizeSpecs: function() { return l.AvatarSizeSpecs }, AvatarSizes: function() { return l.AvatarSizes }, BasePopout: function() { return eI.BasePopout }, BlobMask: function() { return u.BlobMask }, BlockInteractions: function() { return d.BlockInteractions }, BlockInteractionsContext: function() { return d.BlockInteractionsContext }, Button: function() { return _.Button }, ButtonColors: function() { return _.ButtonColors }, ButtonLink: function() { return _.ButtonLink }, ButtonLooks: function() { return _.ButtonLooks }, ButtonSizes: function() { return _.ButtonSizes }, Card: function() { return c.Card }, CardTypes: function() { return c.CardTypes }, Checkbox: function() { return E.Checkbox }, Clickable: function() { return T.Clickable }, ClickableContainer: function() { return f.ClickableContainer }, Collapsible: function() { return I.Collapsible }, Combobox: function() { return S.Combobox }, ComboboxItem: function() { return S.ComboboxItem }, ComboboxPopout: function() { return h.ComboboxPopout }, ConfirmModal: function() { return er.ConfirmModal }, DEFAULT_MODAL_CONTEXT: function() { return el.DEFAULT_MODAL_CONTEXT }, DateInput: function() { return A.DateInput }, DeclarativeConfirmModal: function() { return er.DeclarativeConfirmModal }, Dialog: function() { return m.Dialog }, DisableCustomTheme: function() { return e1.DisableCustomTheme }, DnDKeyboardHelpBar: function() { return p.DnDKeyboardHelpBar }, DnDProvider: function() { return O.DnDProvider }, Dots: function() { return N.Dots }, FocusBlock: function() { return R.FocusBlock }, FocusJumpSection: function() { return g.FocusJumpSection }, FocusLock: function() { return L.FocusLock }, FocusRing: function() { return v.FocusRing }, FocusRingManager: function() { return D.FocusRingManager }, FocusRingScope: function() { return v.FocusRingScope }, FormContext: function() { return M.FormContext }, FormContextProvider: function() { return M.FormContextProvider }, FormDivider: function() { return y.FormDivider }, FormErrorBlock: function() { return P.FormErrorBlock }, FormErrorBlockColors: function() { return P.FormErrorBlockColors }, FormItem: function() { return U.FormItem }, FormLabel: function() { return b.FormLabel }, FormNotice: function() { return G.FormNotice }, FormNoticeImagePositions: function() { return G.FormNoticeImagePositions }, FormNoticeTypes: function() { return G.FormNoticeTypes }, FormSection: function() { return w.FormSection }, FormSwitch: function() { return k.FormSwitch }, FormText: function() { return B.FormText }, FormTextTypes: function() { return B.FormTextTypes }, FormTitle: function() { return V.FormTitle }, FormTitleTags: function() { return V.FormTitleTags }, H: function() { return H.H }, Heading: function() { return F.Heading }, HeadingLevel: function() { return H.HeadingLevel }, HiddenVisually: function() { return Y.HiddenVisually }, InputError: function() { return eW.InputError }, Interactive: function() { return x.Interactive }, KeyCombo: function() { return j.KeyCombo }, LOW_SATURATION_THRESHOLD: function() { return s.LOW_SATURATION_THRESHOLD }, Layer: function() { return W.Layer }, LayerClassName: function() { return W.LayerClassName }, LayerContainer: function() { return W.LayerContainer }, LayerProvider: function() { return W.LayerProvider }, LazyPopout: function() { return ef.LazyPopout }, List: function() { return Z.ListThin }, ListAuto: function() { return Z.ListAuto }, ListComputer: function() { return ep.ListComputer }, ListNone: function() { return Z.ListNone }, ListThin: function() { return Z.ListThin }, LoadingPopout: function() { return eT.LoadingPopout }, MasonryList: function() { return Q.MasonryListThin }, MasonryListAuto: function() { return Q.MasonryListAuto }, MasonryListComputer: function() { return ep.MasonryListComputer }, MasonryListScrollerProps: function() { return X.MasonryListScrollerProps }, MasonryListScrollerRef: function() { return X.MasonryListScrollerRef }, MasonryListThin: function() { return Q.MasonryListThin }, Menu: function() { return q.Menu }, MenuCheckboxItem: function() { return J.MenuCheckboxItem }, MenuControlItem: function() { return J.MenuControlItem }, MenuCustomItemRenderProps: function() { return $.MenuCustomItemRenderProps }, MenuGroup: function() { return J.MenuGroup }, MenuImageUploadControl: function() { return ee.MenuImageUploadControl }, MenuInteractiveCompositeControl: function() { return et.MenuInteractiveCompositeControl }, MenuItem: function() { return J.MenuItem }, MenuRadioItem: function() { return J.MenuRadioItem }, MenuSearchControl: function() { return en.MenuSearchControl }, MenuSeparator: function() { return J.MenuSeparator }, MenuSliderControl: function() { return ei.MenuSliderControl }, MenuSpinner: function() { return q.MenuSpinner }, Modal: function() { return es.Modal }, ModalCloseButton: function() { return eo.ModalCloseButton }, ModalContent: function() { return eo.ModalContent }, ModalFooter: function() { return eo.ModalFooter }, ModalHeader: function() { return eo.ModalHeader }, ModalListContent: function() { return eo.ModalListContent }, ModalRoot: function() { return eo.ModalRoot }, ModalSize: function() { return eo.ModalSize }, ModalTransitionState: function() { return el.ModalTransitionState }, Modals: function() { return eu.Modals }, NameWithRole: function() { return em.NameWithRole }, NameWithRoleAnchor: function() { return em.NameWithRoleAnchor }, POPOUT_MODAL_CONTEXT: function() { return el.POPOUT_MODAL_CONTEXT }, PRETTY_KEYS: function() { return j.PRETTY_KEYS }, Paginator: function() { return ed.Paginator }, PinToBottomScrollerAuto: function() { return eL.PinToBottomScrollerAuto }, Popout: function() { return ef.Popout }, PopoutCSSAnimator: function() { return eS.PopoutCSSAnimator }, PopoutList: function() { return eh.PopoutList }, Progress: function() { return e_.Progress }, ProgressCircle: function() { return ec.ProgressCircle }, RadioGroup: function() { return eA.RadioGroup }, RedesignIconContextProvider: function() { return e3.RedesignIconContextProvider }, ReferencePositionLayer: function() { return K.ReferencePositionLayer }, RenderItem: function() { return X.RenderItem }, RenderSection: function() { return X.RenderSection }, RoleCircle: function() { return eN.RoleCircle }, RoleDot: function() { return eN.RoleDot }, RootThemeContextProvider: function() { return e1.RootThemeContextProvider }, Scroller: function() { return ev.ScrollerThin }, ScrollerAuto: function() { return ev.ScrollerAuto }, ScrollerNone: function() { return ev.ScrollerNone }, ScrollerThin: function() { return ev.ScrollerThin }, SearchableSelect: function() { return ey.SearchableSelect }, SearchableSelectRef: function() { return ey.SearchableSelectRef }, SegmentedControl: function() { return eD.SegmentedControl }, Select: function() { return eM.Select }, SelectLooks: function() { return eP.SelectLooks }, Sequencer: function() { return eU.Sequencer }, Shakeable: function() { return eG.Shakeable }, Shaker: function() { return eb.Shaker }, SingleSelect: function() { return eM.SingleSelect }, Slide: function() { return ew.Slide }, Slider: function() { return ek.Slider }, Slides: function() { return ew.Slides }, Spinner: function() { return eB.Spinner }, SpinnerTypes: function() { return eB.SpinnerTypes }, StackedProgress: function() { return eE.StackedProgress }, Status: function() { return eV.Status }, StatusTypes: function() { return eV.StatusTypes }, Switch: function() { return ex.Switch }, TabBar: function() { return eF.TabBar }, Table: function() { return e2.Table }, TableBody: function() { return e2.TableBody }, TableCell: function() { return e2.TableCell }, TableColumn: function() { return e2.TableColumn }, TableHeader: function() { return e2.TableHeader }, TableRow: function() { return e2.TableRow }, Text: function() { return eH.Text }, TextArea: function() { return eY.TextArea }, TextAreaAutosize: function() { return ej.TextAreaAutosize }, TextInput: function() { return eW.TextInput }, TextInputProps: function() { return eW.TextInputProps }, ThemeContextProvider: function() { return e1.ThemeContextProvider }, TimeInput: function() { return eK.TimeInput }, Toast: function() { return ez.Toast }, ToastContainer: function() { return eQ.ToastContainer }, ToastPosition: function() { return eX.ToastPosition }, ToastType: function() { return eX.ToastType }, Tooltip: function() { return eq.Tooltip }, TooltipColors: function() { return eq.TooltipColors }, TooltipContainer: function() { return eq.TooltipContainer }, TooltipLayer: function() { return eq.TooltipLayer }, TransitionGroup: function() { return e0.TransitionGroup }, TransitionStates: function() { return e0.TransitionStates }, UseThemeContext: function() { return e1.UseThemeContext }, closeAllModals: function() { return ea.closeAllModals }, closeModal: function() { return ea.closeModal }, createAdvancedScroller: function() { return eC.createAdvancedScroller }, createLayer: function() { return W.createLayer }, createListScroller: function() { return z.createListScroller }, createManagedReactiveScroller: function() { return eR.createManagedReactiveScroller }, createMasonryListScroller: function() { return X.createMasonryListScroller }, createScroller: function() { return eg.createScroller }, createToast: function() { return ez.createToast }, getAvatarSize: function() { return l.getAvatarSize }, getAvatarSpecs: function() { return l.getAvatarSpecs }, getButtonStyle: function() { return _.getButtonStyle }, getInteractingModalContext: function() { return ea.getInteractingModalContext }, getParentLayerContainer: function() { return W.getParentLayerContainer }, getStatusBackdropColor: function() { return eV.getStatusBackdropColor }, getStatusBackdropOpacity: function() { return eV.getStatusBackdropOpacity }, getStatusMask: function() { return eV.getStatusMask }, hasAnyModalOpen: function() { return ea.hasAnyModalOpen }, hasAnyModalOpenSelector: function() { return ea.hasAnyModalOpenSelector }, hasModalOpen: function() { return ea.hasModalOpen }, hasModalOpenSelector: function() { return ea.hasModalOpenSelector }, isInDndMode: function() { return C.isInDndMode }, isListItemRow: function() { return ep.isListItemRow }, modalContextFromAppContext: function() { return ea.modalContextFromAppContext }, multiSelect: function() { return eM.multiSelect }, openModal: function() { return ea.openModal }, openModalLazy: function() { return ea.openModalLazy }, popToast: function() { return eZ.popToast }, referencePortalAwareContains: function() { return K.referencePortalAwareContains }, showToast: function() { return eZ.showToast }, singleSelect: function() { return eM.singleSelect }, toggleDndMode: function() { return C.toggleDndMode }, toggleSelect: function() { return eM.toggleSelect }, tokens: function() { return eJ.default }, updateModal: function() { return ea.updateModal }, useDndMode: function() { return C.useDndMode }, useDndStore: function() { return C.useDndStore }, useFocusBlock: function() { return R.useFocusBlock }, useFocusJumpSection: function() { return g.useFocusJumpSection }, useFocusJumpSectionManager: function() { return g.useFocusJumpSectionManager }, useFocusLock: function() { return L.useFocusLock }, useFormContext: function() { return M.useFormContext }, useModalContext: function() { return eu.useModalContext }, useModalsStore: function() { return ea.useModalsStore }, useMultiSelect: function() { return S.useMultiSelect }, useMultiSelectState: function() { return eM.useMultiSelectState }, usePrivateHeadingLevel: function() { return H.usePrivateHeadingLevel }, useRadioGroup: function() { return eA.useRadioGroup }, useRadioItem: function() { return eA.useRadioItem }, useRedesignIconContext: function() { return e3.useRedesignIconContext }, useResizeObserverSubscription: function() { return ep.useResizeObserverSubscription }, useSingleSelect: function() { return S.useSingleSelect }, useSingleSelectState: function() { return eM.useSingleSelectState }, useStatusFillColor: function() { return eV.useStatusFillColor }, useThemeContext: function() { return e1.useThemeContext }, useToastStore: function() { return eZ.useToastStore }, useToken: function() { return e$.useToken }, useVariableSelect: function() { return eM.useVariableSelect } }); var i = n("680732"), r = n("186325"), s = n("885518"), a = n("756715"), o = n("974674"), l = n("182294"), u = n("104140"), d = n("532712"), _ = n("693789"), c = n("49800"), E = n("178940"), I = n("57260"), T = n("1561"), f = n("605578"), S = n("838331"), h = n("6745"), A = n("67979"), m = n("507274"), N = n("438784"), p = n("799151"), O = n("206557"), C = n("79320"), R = n("411734"), g = n("287235"), L = n("597442"), v = n("84735"), D = n("347016"), M = n("15127"), y = n("770102"), P = n("434333"), U = n("540863"), b = n("722187"), G = n("383838"), w = n("789164"), k = n("471141"), B = n("534542"), V = n("512983"), x = n("652334"), F = n("260034"), H = n("337033"), Y = n("766646"), j = n("710593"), W = n("302901"), K = n("539907"), z = n("915287"), Z = n("742746"), X = n("478922"), Q = n("215838"), q = n("830447"), J = n("828214"), $ = n("756710"), ee = n("639627"), et = n("54281"), en = n("695407"), ei = n("739007"), er = n("878678"), es = n("709692"), ea = n("952265"), eo = n("466377"), el = n("602091"), eu = n("307616"), ed = n("4738"), e_ = n("655904"), ec = n("278126"), eE = n("507173"), eI = n("930295"), eT = n("920676"), ef = n("235874"), eS = n("126306"), eh = n("119638"), eA = n("538534"), em = n("346314"), eN = n("109161"), ep = n("562701"), eO = n("147479"), eC = n("987738"), eR = n("975339"), eg = n("84241"), eL = n("810412"), ev = n("21340"), eD = n("189283"), eM = n("619307"), ey = n("921349"), eP = n("748585"), eU = n("263953"), eb = n("503145"), eG = n("936621"), ew = n("718580"), ek = n("561779"), eB = n("922770"), eV = n("696826"), ex = n("437337"), eF = n("706898"), eH = n("993365"), eY = n("419993"), ej = n("179240"), eW = n("463208"), eK = n("397943"), ez = n("345332"), eZ = n("417153"), eX = n("561466"), eQ = n("70308"), eq = n("981729"), eJ = n("692547"), e$ = n("180035"), e0 = n("981292"), e1 = n("801787"), e2 = n("938941"), e3 = n("960259") }, 92138: function(e, t, n) { "use strict"; n.r(t), n("319322"), n("743606"); var i = n("960048"); n("789876"), n("643191"), n("323716"), n("716578"), n("314897"), n("828695"), n("450795"), n("208258"), n("528224"); var r = n("213919"), s = n("902866"), a = n("731965"), o = n("442837"), l = n("627420"), u = n("347016"), d = n("781272"), _ = n("579806"), c = n("627845"), E = n("675896"); n("308765"); var I = n("109117"), T = n("710845"); n("729345"); var f = n("981631"), S = n("689938"); (0, l.setUpdateRules)(d.default), (0, s.UserDefenses)(S.default, r, _.default), o.default.Emitter.injectBatchEmitChanges(a.batchUpdates), o.default.PersistedStore.disableWrites = __OVERLAY__, o.default.initialize(); let h = window.GLOBAL_ENV.RELEASE_CHANNEL; new T.default().log("[BUILD INFO] Release Channel: ".concat(h, ", Build Number: ").concat("298246", ", Version Hash: ").concat("8859d86f652369439a29467760910a7cd4d2dade")), i.default.setTags({ appContext: f.CURRENT_APP_CONTEXT }), c.default.initBasic(), E.default.init(), u.FocusRingManager.init(), I.init() }, 479531: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("544891"), r = n("981631"), s = n("689938"); class a extends i.V8APIError { constructor(e, t) { super(e, t, null != t ? s.default.Messages.FORM_ERROR_GENERIC_WITH_DETAILS.format({ statusPageURL: r.Links.STATUS, details: "".concat(t) }) : s.default.Messages.FORM_ERROR_GENERIC.format({ statusPageURL: r.Links.STATUS })) } } }, 710721: function(e, t, n) { "use strict"; n.r(t); var i = n("55935"), r = n("70956"), s = n("34756"), a = n("689938"); class o extends s.default { _getMessageFromRateLimit(e) { let t = e.body.retry_after, n = (0, i.diffAsUnits)(0, t * r.default.Millis.SECOND); return (0, i.unitsAsStrings)(n, { days: a.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_ERROR_RATE_LIMIT_DAYS, hours: a.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_ERROR_RATE_LIMIT_HOURS, minutes: a.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_ERROR_RATE_LIMIT_MINUTES }) } constructor(e, t) { super(e, t), 429 === this.status && (this.message = this._getMessageFromRateLimit(e)) } } t.default = o }, 128069: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ErrorCodes: function() { return i }, parseV8BillingAddressSkemaErrorToBillingError: function() { return N } }), n("47120"); var i, r, s, a, o, l, u, d, _ = n("544891"), c = n("812169"), E = n("34756"), I = n("689938"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(o = i || (i = {}))[o.UNKNOWN = 0] = "UNKNOWN", o[o.UNKNOWN_BILLING_PROFILE = 100001] = "UNKNOWN_BILLING_PROFILE", o[o.UNKNOWN_PAYMENT_SOURCE = 100002] = "UNKNOWN_PAYMENT_SOURCE", o[o.UNKNOWN_SUBSCRIPTION = 100003] = "UNKNOWN_SUBSCRIPTION", o[o.ALREADY_SUBSCRIBED = 100004] = "ALREADY_SUBSCRIBED", o[o.INVALID_PLAN = 100005] = "INVALID_PLAN", o[o.PAYMENT_SOURCE_REQUIRED = 100006] = "PAYMENT_SOURCE_REQUIRED", o[o.ALREADY_CANCELED = 100007] = "ALREADY_CANCELED", o[o.INVALID_PAYMENT = 100008] = "INVALID_PAYMENT", o[o.ALREADY_REFUNDED = 100009] = "ALREADY_REFUNDED", o[o.INVALID_BILLING_ADDRESS = 100010] = "INVALID_BILLING_ADDRESS", o[o.ALREADY_PURCHASED = 100011] = "ALREADY_PURCHASED", o[o.DUPLICATE_PURCHASE_ATTEMPT = 100012] = "DUPLICATE_PURCHASE_ATTEMPT", o[o.BILLING_PURCHASE_REQUEST_INVALID = 100017] = "BILLING_PURCHASE_REQUEST_INVALID", o[o.NEGATIVE_INVOICE_AMOUNT = 100027] = "NEGATIVE_INVOICE_AMOUNT", o[o.AUTHENTICATION_REQUIRED = 100029] = "AUTHENTICATION_REQUIRED", o[o.SUBSCRIPTION_RENEWAL_IN_PROGRESS = 100042] = "SUBSCRIPTION_RENEWAL_IN_PROGRESS", o[o.CONFIRMATION_REQUIRED = 100047] = "CONFIRMATION_REQUIRED", o[o.CARD_DECLINED = 100054] = "CARD_DECLINED", o[o.INVALID_GIFT_REDEMPTION_FRAUD_REJECTED = 50097] = "INVALID_GIFT_REDEMPTION_FRAUD_REJECTED", o[o.PURCHASE_TOKEN_AUTHORIZATION_REQUIRED = 100056] = "PURCHASE_TOKEN_AUTHORIZATION_REQUIRED", o[o.INVALID_PAYMENT_SOURCE = 50048] = "INVALID_PAYMENT_SOURCE", o[o.INVALID_CURRENCY_FOR_PAYMENT_SOURCE = 100051] = "INVALID_CURRENCY_FOR_PAYMENT_SOURCE", o[o.BILLING_APPLE_SERVER_API_ERROR = 100070] = "BILLING_APPLE_SERVER_API_ERROR", o[o.BILLING_TRIAL_REDEMPTION_DISABLED = 100078] = "BILLING_TRIAL_REDEMPTION_DISABLED", o[o.BILLING_PAUSE_DISABLED = 100079] = "BILLING_PAUSE_DISABLED", o[o.BILLING_PAUSE_PENDING_ALREADY_SET = 100080] = "BILLING_PAUSE_PENDING_ALREADY_SET", o[o.BILLING_PAUSE_NOT_ELIGIBLE = 100081] = "BILLING_PAUSE_NOT_ELIGIBLE", o[o.BILLING_PAUSE_INVALID_INTERVAL = 100082] = "BILLING_PAUSE_INVALID_INTERVAL", o[o.BILLING_ALREADY_PAUSED = 100083] = "BILLING_ALREADY_PAUSED", o[o.BILLING_CANNOT_CHARGE_ZERO_AMOUNT = 100084] = "BILLING_CANNOT_CHARGE_ZERO_AMOUNT", (l = r || (r = {})).CARD_NUMBER = "cardNumber", l.CARD_CVC = "cvc", l.CARD_EXPIRATION_DATE = "expirationDate", l.CARD_NAME = "name", l.ADDRESS_NAME = "name", l.ADDRESS_LINE_1 = "line1", l.ADDRESS_LINE_2 = "line2", l.ADDRESS_CITY = "city", l.ADDRESS_STATE = "state", l.ADDRESS_POSTAL_CODE = "postalCode", l.ADDRESS_COUNTRY = "country", (u = s || (s = {})).ADDRESS_LINE_1 = "address_line1", u.ADDRESS_LINE_2 = "address_line2", u.ADDRESS_CITY = "address_city", u.ADDRESS_STATE = "address_state", u.ADDRESS_ZIP = "address_zip", u.ADDRESS_COUNTRY = "address_country", u.CARD_NUMBER = "number", u.CARD_EXPIRATION_DATE = "exp", u.CARD_EXPIRATION_MONTH = "exp_month", u.CARD_EXPIRATION_YEAR = "exp_year"; let f = Object.freeze({ address_line1: "line1", address_line2: "line2", address_city: "city", address_state: "state", address_zip: "postalCode", address_country: "country", number: "cardNumber", exp: "expirationDate", exp_month: "expirationDate", exp_year: "expirationDate" }), S = Object.freeze({ line_1: "line1", line_2: "line2", postal_code: "postalCode" }); (d = a || (a = {})).CARD = "card", d.ADDRESS = "address"; let h = new Set(["cardNumber", "cvc", "expirationDate", "name"]), A = new Set(["cardNumber", "cvc", "expirationDate", "name", "postalCode", "country", "line1", "city", "state"]), m = new Set(["name", "line1", "line2", "city", "state", "postalCode", "country"]); function N(e) { var t, n, i, r, s; if ("string" != typeof e && (null == e ? void 0 : null === (t = e.body) || void 0 === t ? void 0 : t.code) === _.INVALID_FORM_BODY_ERROR_CODE) { if (!Array.isArray(null == e ? void 0 : null === (n = e.body) || void 0 === n ? void 0 : n.errors) && (null == e ? void 0 : null === (r = e.body) || void 0 === r ? void 0 : null === (i = r.errors) || void 0 === i ? void 0 : i.billing_address) != null) { for (let t in e.body.errors.billing_address) { let n = e.body.errors.billing_address[t]; delete e.body.errors.billing_address[t], e.body.errors[t] = n } delete e.body.errors.billing_address }(null === (s = e.body) || void 0 === s ? void 0 : s.errors) != null && (e.body = (0, _.convertSkemaError)(e.body.errors)) } return new p(e) } class p extends E.default { _isInFieldSet(e) { for (let t in this.fields) if (e.has(t)) return !0 } hasCardError() { return 2 === (0, c.reducedPaymentInfoExperiment)().bucket ? this._isInFieldSet(A) : this._isInFieldSet(h) } hasAddressError() { return this._isInFieldSet(m) } constructor(e, t) { for (let n in super(e, t), T(this, "paymentId", null), 100027 === this.code ? this.message = I.default.Messages.BILLING_ERROR_NEGATIVE_INVOICE_AMOUNT : 50048 === this.code ? this.message = I.default.Messages.BILLING_PAYMENT_SOURCE_INVALID : 100002 === this.code ? this.message = I.default.Messages.BILLING_ERROR_UNKNOWN_PAYMENT_SOURCE : 100042 === this.code ? this.message = I.default.Messages.BILLING_ERROR_PENDING_PAYMENT : 100078 === this.code ? this.message = I.default.Messages.BILLING_TRIAL_REDEMPTION_DISABLED : 429 === this.status ? this.message = I.default.Messages.BILLING_ERROR_RATE_LIMIT : 0 === this.code ? this.message = I.default.Messages.BILLING_ERROR_GENERIC : 400 === this.status && null != this.fields.captcha_key && (this.message = I.default.Messages.BILLING_ERROR_INVALID_CAPTCHA_RESPONSE), this.fields) { let e = f[n] || S[n]; if (null != e) { let t = this.fields[n]; delete this.fields[n], this.fields[e] = t } } null != e.body && "string" == typeof e.body.payment_id && (this.paymentId = e.body.payment_id) } } T(p, "ErrorCodes", i), T(p, "Fields", r), T(p, "Sections", a), T(p, "CARD_ERRORS", h), T(p, "ADDRESS_ERRORS", m), t.default = p }, 330516: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("424218"), r = n("186901"), s = n("689938"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o { get displayMessage() { if (null == this.code) return s.default.Messages.NOTICE_DISPATCH_ERROR; let { path: e } = this.context; switch (this.code) { case r.DispatchErrorCodes.DISK_LOW: let { available: t, required: n } = this.context, a = (0, i.formatSize)(t, { useKibibytes: !0 }), o = (0, i.formatSize)(n, { useKibibytes: !0 }); return s.default.Messages.NOTICE_DISPATCH_ERROR_DISK_LOW.format({ required: o, available: a }); case r.DispatchErrorCodes.POST_INSTALL_FAILED: let { name: l } = this.context; return s.default.Messages.NOTICE_DISPATCH_ERROR_POST_INSTALL_FAILED.format({ name: l }); case r.DispatchErrorCodes.FILE_NAME_TOO_LONG: return s.default.Messages.NOTICE_DISPATCH_ERROR_FILE_NAME_TOO_LONG; case r.DispatchErrorCodes.POST_INSTALL_CANCELLED: return s.default.Messages.NOTICE_DISPATCH_ERROR_POST_INSTALL_CANCELLED; case r.DispatchErrorCodes.IO_PERMISSION_DENIED: return s.default.Messages.NOTICE_DISPATCH_ERROR_IO_PERMISSION_DENIED; case r.DispatchErrorCodes.NO_MANIFESTS: return s.default.Messages.NOTICE_DISPATCH_ERROR_NO_MANIFESTS; case r.DispatchErrorCodes.NOT_ENTITLED: return s.default.Messages.NOTICE_DISPATCH_ERROR_NOT_ENTITLED; case r.DispatchErrorCodes.NOT_DIRECTORY: case r.DispatchErrorCodes.DISK_PERMISSION_DENIED: return s.default.Messages.NOTICE_DISPATCH_ERROR_UNWRITABLE.format({ path: e }); case r.DispatchErrorCodes.INVALID_DRIVE: return s.default.Messages.NOTICE_DISPATCH_ERROR_INVALID_DRIVE.format({ path: e }); case r.DispatchErrorCodes.APPLICATION_LOCK_FAILED: return s.default.Messages.NOTICE_DISPATCH_APPLICATION_LOCK_FAILED; case r.DispatchErrorCodes.DISK_FULL: return s.default.Messages.NOTICE_DISPATCH_ERROR_DISK_FULL; case r.DispatchErrorCodes.API_ERROR: case r.DispatchErrorCodes.MAX_REQUEST_RETRIES_EXCEEDED: return s.default.Messages.NOTICE_DISPATCH_API_ERROR; default: return s.default.Messages.NOTICE_DISPATCH_ERROR_WITH_CODE.format({ code: "".concat(this.code) }) } } constructor(e) { a(this, "raw", void 0), a(this, "context", void 0), a(this, "code", void 0), a(this, "uuid", void 0), a(this, "applicationId", void 0), a(this, "branchId", void 0), this.raw = e, null != e.code && (this.code = e.code), null != e.uuid && (this.uuid = e.uuid), null != e.application_id && (this.applicationId = e.application_id), null != e.branch_id && (this.branchId = e.branch_id), null != e.context ? this.context = e.context : this.context = {} } } }, 594124: function(e, t, n) { "use strict"; n.r(t), n("128069") }, 998701: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UploadErrorCodes: function() { return r } }); var i, r, s = n("689938"); (i = r || (r = {}))[i.GENERAL = 0] = "GENERAL", i[i.NO_FILE = 1] = "NO_FILE", i[i.PROGRESS = 2] = "PROGRESS", i[i.UPLOAD = 3] = "UPLOAD", i[i.READ = 4] = "READ"; t.default = class e { get displayMessage() { switch (this.code) { case 1: return s.default.Messages.UPLOAD_DEBUG_LOG_FAILURE_NO_FILE; case 2: return s.default.Messages.UPLOAD_DEBUG_LOG_FAILURE_PROGRESS; case 3: return s.default.Messages.UPLOAD_DEBUG_LOG_FAILURE_UPLOAD; case 4: return s.default.Messages.UPLOAD_DEBUG_LOG_FAILURE_READ; default: return s.default.Messages.UPLOAD_DEBUG_LOG_FAILURE } } constructor(e) { var t, n, i; t = this, i = void 0, (n = "code") in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i, this.code = e } } }, 34756: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("544891"), r = n("981631"), s = n("689938"); class a extends i.V6OrEarlierAPIError { constructor(e, t) { super(e, t, null != t ? s.default.Messages.FORM_ERROR_GENERIC_WITH_DETAILS.format({ statusPageURL: r.Links.STATUS, details: "".concat(t) }) : s.default.Messages.FORM_ERROR_GENERIC.format({ statusPageURL: r.Links.STATUS })) } } }, 881052: function(e, t, n) { "use strict"; n.r(t), n.d(t, { APIError: function() { return r.default }, AppliedGuildBoostError: function() { return a.default }, BillingError: function() { return s.default }, UploadErrorCodes: function() { return o.UploadErrorCodes }, UploadVoiceDebugLogsError: function() { return o.default }, V6OrEarlierAPIError: function() { return i.default } }); var i = n("34756"), r = n("479531"), s = n("128069"); n("594124"), n("330516"); var a = n("710721"), o = n("998701") }, 902840: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canGuildUseConversationSummaries: function() { return l }, canSeeChannelSummaries: function() { return o }, channelEligibleForSummaries: function() { return a }, useChannelSummariesExperiment: function() { return u } }), n("399606"); var i = n("430824"), r = n("981631"), s = n("176505"); function a(e) { return o(e, !0, !1) } function o(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; return !(null == e || ! function(e) { var t; if (null == e) return !1; let n = i.default.getGuild(null !== (t = null == e ? void 0 : e.guild_id) && void 0 !== t ? t : ""), s = null != n && n.rulesChannelId === e.id; return r.ChannelTypesSets.SUMMARIZEABLE.has(e.type) && !e.isNSFW() && !s }(e) || !1 === t && e.hasFlag(s.ChannelFlags.SUMMARIES_DISABLED)) && l(i.default.getGuild(e.guild_id), n) } function l(e) { var t; let n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; if (null == e) return !1; return !!((null == (t = e.id) || t !== r.ME && t !== r.FAVORITES) && e.hasFeature(r.GuildFeatures.SUMMARIES_ENABLED_GA)) && (!n || e.hasFeature(r.GuildFeatures.SUMMARIES_ENABLED_BY_USER)) } function u(e) { arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; let t = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return o(e, t) } }, 206744: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2022-07_file_upload_limit", label: "File Upload Limit Increase", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); t.default = i }, 948350: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2022-09_free_file_upload_limit", label: "Free File Upload Limit Increase", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); t.default = i }, 612002: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-03_store_latest_message_data", label: "Store latest message data", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Use latest data from api/gateway", config: { enabled: !0 } }] }); t.default = i }, 634894: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useTriggerDebuggingAA: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-09_trigger_debugging_aa", label: "trigger debugging aa mobile", defaultConfig: { inUse: !1 }, treatments: [{ id: 1, label: "On", config: { inUse: !0 } }] }); function r(e) { let { autoTrackExposure: t = !1, location: n } = e; return i.useExperiment({ location: n }, { autoTrackExposure: t }) } }, 593472: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { DEFAULT_OVERLAY_OPTIONS: function() { return o }, JumpTypes: function() { return i }, RunningProcessFullscreenType: function() { return r } }), (s = i || (i = {})).ANIMATED = "ANIMATED", s.INSTANT = "INSTANT", (a = r || (r = {}))[a.UNKNOWN = 0] = "UNKNOWN", a[a.WINDOWED = 1] = "WINDOWED", a[a.MAXIMIZED = 2] = "MAXIMIZED", a[a.BORDERLESS_FULLSCREEN = 3] = "BORDERLESS_FULLSCREEN", a[a.FULLSCREEN = 4] = "FULLSCREEN", a[a.MINIMIZED = 5] = "MINIMIZED"; let o = { compatibilityHook: !1, warn: !1, enabled: !1, allowHook: !0, supportsOutOfProcessOverlay: !1 } }, 911969: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p, O, C, R, g, L, v, D, M, y, P, U, b; n.r(t), n.d(t, { ApplicationCommandOptionType: function() { return u }, ApplicationCommandType: function() { return d }, ApplicationDirectoryEntryCarouselItemType: function() { return a }, AuthenticatorType: function() { return h }, ButtonStyle: function() { return E }, ComponentType: function() { return c }, EmbeddedActivityLabelTypes: function() { return s }, EmbeddedActivitySupportedPlatforms: function() { return r }, InteractionContextType: function() { return o }, InteractionTypes: function() { return _ }, InvoiceDiscountTypes: function() { return f }, PermissionOverwriteType: function() { return i }, PurchaseNotificationType: function() { return S }, SeparatorSpacingSize: function() { return T }, TextComponentStyle: function() { return I } }), (A = i || (i = {}))[A.ROLE = 0] = "ROLE", A[A.MEMBER = 1] = "MEMBER", (m = r || (r = {})).IOS = "ios", m.ANDROID = "android", m.WEB = "web", (N = s || (s = {}))[N.NONE = 0] = "NONE", N[N.NEW = 1] = "NEW", N[N.UPDATED = 2] = "UPDATED", (p = a || (a = {}))[p.MEDIA_PROXY = 1] = "MEDIA_PROXY", p[p.YOUTUBE = 2] = "YOUTUBE", (O = o || (o = {}))[O.GUILD = 0] = "GUILD", O[O.BOT_DM = 1] = "BOT_DM", O[O.PRIVATE_CHANNEL = 2] = "PRIVATE_CHANNEL", (C = l || (l = {}))[C.NO_INTERCEPT = 1] = "NO_INTERCEPT", C[C.LAUNCH_ACTIVITY_INTERCEPT = 2] = "LAUNCH_ACTIVITY_INTERCEPT", (R = u || (u = {}))[R.SUB_COMMAND = 1] = "SUB_COMMAND", R[R.SUB_COMMAND_GROUP = 2] = "SUB_COMMAND_GROUP", R[R.STRING = 3] = "STRING", R[R.INTEGER = 4] = "INTEGER", R[R.BOOLEAN = 5] = "BOOLEAN", R[R.USER = 6] = "USER", R[R.CHANNEL = 7] = "CHANNEL", R[R.ROLE = 8] = "ROLE", R[R.MENTIONABLE = 9] = "MENTIONABLE", R[R.NUMBER = 10] = "NUMBER", R[R.ATTACHMENT = 11] = "ATTACHMENT", (g = d || (d = {}))[g.CHAT = 1] = "CHAT", g[g.USER = 2] = "USER", g[g.MESSAGE = 3] = "MESSAGE", g[g.PRIMARY_ENTRY_POINT = 4] = "PRIMARY_ENTRY_POINT", (L = _ || (_ = {}))[L.APPLICATION_COMMAND = 2] = "APPLICATION_COMMAND", L[L.MESSAGE_COMPONENT = 3] = "MESSAGE_COMPONENT", L[L.APPLICATION_COMMAND_AUTOCOMPLETE = 4] = "APPLICATION_COMMAND_AUTOCOMPLETE", L[L.MODAL_SUBMIT = 5] = "MODAL_SUBMIT", (v = c || (c = {}))[v.ACTION_ROW = 1] = "ACTION_ROW", v[v.BUTTON = 2] = "BUTTON", v[v.STRING_SELECT = 3] = "STRING_SELECT", v[v.INPUT_TEXT = 4] = "INPUT_TEXT", v[v.USER_SELECT = 5] = "USER_SELECT", v[v.ROLE_SELECT = 6] = "ROLE_SELECT", v[v.MENTIONABLE_SELECT = 7] = "MENTIONABLE_SELECT", v[v.CHANNEL_SELECT = 8] = "CHANNEL_SELECT", v[v.TEXT = 10] = "TEXT", v[v.MEDIA_GALLERY = 12] = "MEDIA_GALLERY", v[v.SEPARATOR = 14] = "SEPARATOR", (D = E || (E = {}))[D.PRIMARY = 1] = "PRIMARY", D[D.SECONDARY = 2] = "SECONDARY", D[D.SUCCESS = 3] = "SUCCESS", D[D.DESTRUCTIVE = 4] = "DESTRUCTIVE", D[D.LINK = 5] = "LINK", D[D.PREMIUM = 6] = "PREMIUM", (M = I || (I = {}))[M.SMALL = 1] = "SMALL", M[M.PARAGRAPH = 2] = "PARAGRAPH", (y = T || (T = {}))[y.SMALL = 1] = "SMALL", y[y.LARGE = 2] = "LARGE", (P = f || (f = {}))[P.SUBSCRIPTION_PLAN = 1] = "SUBSCRIPTION_PLAN", P[P.ENTITLEMENT = 2] = "ENTITLEMENT", P[P.PREMIUM_LEGACY_UPGRADE_PROMOTION = 3] = "PREMIUM_LEGACY_UPGRADE_PROMOTION", P[P.PREMIUM_TRIAL = 4] = "PREMIUM_TRIAL", (U = S || (S = {}))[U.GUILD_PRODUCT = 0] = "GUILD_PRODUCT", (b = h || (h = {}))[b.WEBAUTHN = 1] = "WEBAUTHN", b[b.TOTP = 2] = "TOTP", b[b.SMS = 3] = "SMS" }, 2052: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useAnalyticsContext: function() { return s } }); var i = n("470079"), r = n("626135"); let s = () => i.useContext(r.AnalyticsContext) }, 774078: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("207561"), r = n("55935"), s = n("745735"); function a(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1e3, n = arguments.length > 2 ? arguments[2] : void 0, a = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], o = (0, r.diffAsUnits)(Date.now(), e), l = (0, i.useForceUpdate)(); return (0, s.default)(() => { !(0 === o.days && 0 === o.hours && 0 === o.minutes && 0 === o.seconds) && !a && (l(), null == n || n()) }, a ? null : t), o } }, 393238: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r }, useDimensionsEffect: function() { return s } }), n("47120"); var i = n("470079"); function r() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; let [r, a] = i.useState(void 0), [o, l] = i.useState(void 0), [u, d] = i.useState(void 0), [_, c] = i.useState(void 0), E = i.useRef(null); return s(E, e => { let { width: t, height: n, scrollWidth: i, scrollHeight: r } = e; l(n), a(t), d(i), c(r) }, t), { ref: E, width: r, height: o, scrollHeight: _, scrollWidth: u } } function s(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; i.useLayoutEffect(() => { let n = e.current, i = null == n ? void 0 : n.ownerDocument.defaultView; if (null != n && null != i) { let r = new i.ResizeObserver(n => { var i, r, s, a, o, l; let u = n[0], d = null == u ? void 0 : null === (r = u.borderBoxSize) || void 0 === r ? void 0 : null === (i = r[0]) || void 0 === i ? void 0 : i.inlineSize, _ = null == u ? void 0 : null === (a = u.borderBoxSize) || void 0 === a ? void 0 : null === (s = a[0]) || void 0 === s ? void 0 : s.blockSize; if (null == d || null == _) { let t = e.current; if (null != t) { let e = window.getComputedStyle(t); null == d && (d = parseFloat(null !== (o = e.width) && void 0 !== o ? o : "0")), null == _ && (_ = parseFloat(null !== (l = e.height) && void 0 !== l ? l : "0")) } } t({ width: d, height: _, scrollHeight: u.target.scrollHeight, scrollWidth: u.target.scrollWidth }) }); return r.observe(n), () => r.disconnect() } }, [e.current, ...n]) } }, 206678: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("470079"); function r(e, t) { let n = e.getBoundingClientRect(); return Math.min(1, Math.max(0, (t.clientX - n.left) / n.width)) } function s(e) { let { ref: t, onDrag: n, onDragStart: s, onDragEnd: a } = e, [o, l] = i.useState(!1); return i.useEffect(() => { if (o) return window.addEventListener("mouseup", e), window.addEventListener("mousemove", i), () => { window.removeEventListener("mouseup", e), window.removeEventListener("mousemove", i) }; function e() { null == a || a(), l(!1) } function i(e) { let i = t.current; null != i && (null == n || n(r(i, e))) } }, [t, o, a, n]), [o, i.useCallback(e => { e.preventDefault(); let i = t.current; null != i && (l(!0), null == s || s(), null == n || n(r(i, e))) }, [t, s, n])] } }, 623113: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("470079"); function r(e) { let t = i.useRef(null), n = i.useCallback(n => { null != e && ("function" == typeof e ? e(n) : e.current = n, t.current = n) }, [e]); return [t, n] } }, 727637: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("47120"); var i = n("470079"); function r(e) { let [t, n] = (0, i.useState)(!1), r = (0, i.useRef)(e.current); return (0, i.useEffect)(() => { r.current = e.current }, [e]), (0, i.useEffect)(() => { let e = r.current; if (null == e) return; let t = () => n(!0), i = () => n(!1); return e.addEventListener("mouseenter", t), e.addEventListener("mouseleave", i), () => { e.removeEventListener("mouseenter", t), e.removeEventListener("mouseleave", i) } }, [r]), t } }, 434650: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useIsVisible: function() { return l } }), n("47120"); var i = n("470079"), r = n("863840"), s = n("266338"); let a = {}, o = new Map([ [1, { threshold: 1 }] ]); function l(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], l = (0, r.default)(t => { e(t.isIntersecting) }), u = (0, i.useMemo)(() => { var e; let n; return e = t, null != (n = o.get(e)) ? n : (n = { threshold: e }, o.set(e, n), n) }, [t]); return function(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], o = (0, i.useRef)(null), l = (0, r.default)(null != t ? t : a), u = (0, i.useRef)(null); return (0, i.useLayoutEffect)(() => { if (!n) return; null == u.current && (u.current = (0, s.getIntersectionObserver)(l.current)); let t = o.current, i = u.current; null != t && null != i && (0, s.watch)(i, t, e) }, [n, e]), (0, i.useEffect)(() => { if (!n) return; let e = o.current, t = u.current; if (null != e && null != t) return () => { (0, s.unwatch)(t, e) } }, [n, t]), o }(l.current, u, n) } }, 745735: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("470079"), r = n("512722"), s = n.n(r); function a(e, t) { let n = (0, i.useRef)(e); (0, i.useEffect)(() => { n.current = e }, [e]), (0, i.useEffect)(() => { if (null === t) return; let e = setInterval(function() { s()(null != n.current, "Missing callback"), n.current() }, t); return () => clearInterval(e) }, [t]) } }, 350810: function(e, t, n) { "use strict"; n.r(t); var i = n("442837"), r = n("481060"), s = n("38618"), a = n("272423"), o = n("823385"), l = n("819640"), u = n("725568"); t.default = () => { let e = (0, i.useStateFromStores)([l.default], () => l.default.hasLayers()), t = (0, u.useFullScreenLayerStore)(e => e.fullScreenLayers.length > 0), n = (0, a.useIsModalOpen)(), d = (0, r.useModalsStore)(r.hasAnyModalOpen), _ = (0, i.useStateFromStores)([s.default], () => s.default.isConnected()), c = (0, i.useStateFromStores)([o.default], () => o.default.isOpen()); return e || t || d || n || !_ || c } }, 208826: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("481060"), a = n("40851"), o = n("819640"), l = n("574254"), u = n("981631"); function d() { let e = (0, s.useModalsStore)(e => !Object.entries(e).every(e => { let [t, n] = e; return 0 === n.length })), t = (0, r.useStateFromStores)([l.default], () => l.default.isOpen()), n = (0, r.useStateFromStores)([o.default], () => o.default.hasLayers()), [d, _] = i.useState(!1), c = (0, a.useWindowDispatch)(); return i.useEffect(() => { function e() { _(!0) } function t() { _(!1) } return c.subscribe(u.ComponentActions.POPOUT_SHOW, e), c.subscribe(u.ComponentActions.POPOUT_HIDE, t), () => { c.unsubscribe(u.ComponentActions.POPOUT_SHOW, e), c.unsubscribe(u.ComponentActions.POPOUT_HIDE, t) } }, [c]), e || t || d || n } }, 586902: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u }, getIsSpeaking: function() { return d } }); var i = n("442837"), r = n("763296"), s = n("944486"), a = n("606304"), o = n("979651"); function l(e, t, n) { return e || t || n } function u(e) { var t, n, l; let { userId: u, checkSoundSharing: d = !1, checkSoundboardSounds: _ = !0, checkIsMuted: c = !1, context: E } = e, I = (0, i.useStateFromStores)([o.default, s.default], () => { let e = s.default.getVoiceChannelId(); return null != e ? o.default.getVoiceStateForChannel(e, u) : null }), T = c && ((null == I ? void 0 : I.mute) || (null == I ? void 0 : I.selfMute)), f = (0, i.useStateFromStores)([a.default], () => a.default.isSpeaking(u, E) && !T), S = (0, i.useStateFromStores)([a.default], () => a.default.isSoundSharing(u) && d), h = (0, i.useStateFromStores)([r.default], () => r.default.isUserPlayingSounds(u) && _); return t = f, n = h, l = S, t || n || l } function d(e) { var t, n, i; let { userId: l, checkSoundSharing: u = !1, checkSoundboardSounds: d = !0, checkIsMuted: _ = !1, context: c } = e, E = s.default.getVoiceChannelId(), I = null != E ? o.default.getVoiceStateForChannel(E, l) : null, T = _ && ((null == I ? void 0 : I.mute) || (null == I ? void 0 : I.selfMute)), f = a.default.isSpeaking(l, c) && !T, S = a.default.isSoundSharing(l) && u, h = r.default.isUserPlayingSounds(l) && d; return t = f, n = h, i = S, t || n || i } }, 131388: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("470079"), r = n("40851"); function s(e) { let { renderWindow: t } = (0, i.useContext)(r.default), [n, s] = (0, i.useState)(() => t.matchMedia(e).matches); return (0, i.useEffect)(() => { let n = t.matchMedia(e), i = e => { s(null == e ? void 0 : e.matches) }; return i(n), n.addListener(i), () => n.removeListener(i) }, [e, t]), n } }, 351773: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("470079"); function r(e, t) { let n = i.useRef(e); return i.useEffect(() => { function e(e) { null != n.current && !n.current.contains(e.target) && t() } return document.addEventListener("mousedown", e), () => { document.removeEventListener("mousedown", e) } }, [n, t]), n } }, 699682: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("470079"); function r(e) { let t = (0, i.useRef)(null), n = (0, i.useRef)(null); return !Object.is(e, n.current) && (t.current = n.current, n.current = e), t.current } }, 110924: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("470079"); function r(e) { let t = (0, i.useRef)(); return (0, i.useEffect)(() => { t.current = e }, [e]), t.current } }, 98650: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("470079"), r = n("863840"); function s(e) { let t = (0, r.default)(e); (0, i.useEffect)(() => { let e = requestAnimationFrame(function n() { var i; null === (i = t.current) || void 0 === i || i.call(t), e = requestAnimationFrame(n) }); return () => cancelAnimationFrame(e) }, []) } }, 330726: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("470079"), r = n("207561"), s = n("846519"); function a(e, t) { let [n, a] = (0, i.useState)(e), o = (0, r.useLazyValue)(() => new s.Timeout); return (0, i.useEffect)(() => () => o.stop(), [o]), [n, (0, i.useCallback)(n => { a(n), n !== e && o.start(t, () => a(e)) }, [t, e, o])] } }, 347469: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ResizeOrientation: function() { return i } }), n("47120"); var i, r, s, a, o = n("470079"), l = n("392711"); function u(e) { return 2 === e || 3 === e ? 1 : 0 }(s = i || (i = {}))[s.VERTICAL_TOP = 0] = "VERTICAL_TOP", s[s.VERTICAL_BOTTOM = 1] = "VERTICAL_BOTTOM", s[s.HORIZONTAL_LEFT = 2] = "HORIZONTAL_LEFT", s[s.HORIZONTAL_RIGHT = 3] = "HORIZONTAL_RIGHT", (a = r || (r = {}))[a.VERTICAL = 0] = "VERTICAL", a[a.HORIZONTAL = 1] = "HORIZONTAL"; t.default = e => { let { initialElementDimension: t, resizableDomNodeRef: n, maxDimension: i, minDimension: r, onElementResize: s, onElementResizeEnd: a, throttleDuration: d = 300, orientation: _, usePointerEvents: c = !1 } = e, [E, I] = o.useState(!1), T = o.useRef(0), f = o.useRef(null == t ? 0 : t); return o.useLayoutEffect(() => { if (!E || null == n.current) return; function e(e) { let t = 1 === u(_) ? e.screenX : e.screenY, n = 0 === _ || 2 === _, s = (t - T.current) * (n ? -1 : 1), a = f.current + s; return (0, l.clamp)(a, null != r ? r : 0, null != i ? i : a) } let t = (0, l.throttle)(s, d), o = i => { if (null == n.current) return null; let r = e(i), s = 1 === u(_) ? "width" : "height"; n.current.style[s] = "".concat(r, "px"), t(r) }, S = t => { I(!1); let n = e(t); s(n), null == a || a(n) }, h = c ? "pointerup" : "mouseup", A = c ? "pointermove" : "mousemove", m = n.current.ownerDocument; return m.addEventListener(h, S), m.addEventListener(A, o), () => { m.removeEventListener(h, S), m.removeEventListener(A, o), t.cancel() } }, [E, s, r, i, _, n, d, a, c]), o.useCallback(e => { let t = 1 === u(_); null != n.current && (f.current = t ? n.current.offsetWidth : n.current.offsetHeight), T.current = t ? e.screenX : e.screenY, I(!0) }, [_, n]) } }, 393903: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useResizeObserver: function() { return a } }); var i = n("470079"), r = n("863840"), s = n("889711"); function a(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = (0, i.useRef)(null), a = (0, i.useRef)(null), o = (0, r.default)(() => e(n.current)); return (0, i.useLayoutEffect)(() => { if (!t) return; null == a.current && (a.current = (0, s.getResizeObserver)(o.current)); let e = n.current, i = a.current; null != e && null != i && (0, s.watch)(i, e) }, [t, e]), (0, i.useEffect)(() => { if (!t) return; let e = n.current, i = a.current; if (null != e && null != i) return () => { (0, s.unwatch)(i, e) } }, [t]), n } }, 410030: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useTheme: function() { return s }, useThemeIndex: function() { return a } }); var i = n("780384"), r = n("981631"); function s() { let { theme: e } = (0, i.useThemeContext)(); return e } function a() { return function(e) { switch (e) { case r.ThemeTypes.DARK: return 0; case r.ThemeTypes.LIGHT: return 1 } }(s()) } t.default = s }, 980591: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"); t.default = (e, t) => { let n = (0, i.useRef)(e); (0, i.useEffect)(() => { n.current = e }, [e]), (0, i.useEffect)(() => { if (null === t) return; let e = setTimeout(() => n.current(), t); return () => clearTimeout(e) }, [t, n]) } }, 81897: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("470079"); function r() { let e = i.useRef(null); return null === e.current && (e.current = new AbortController), i.useEffect(() => () => { var t; null === (t = e.current) || void 0 === t || t.abort() }, []), e.current.signal } }, 763747: function(e, t, n) { "use strict"; n.r(t), n.d(t, { dateFnsLocales: function() { return i } }); let i = { bg: () => n.e("71953").then(n.bind(n, "487012")), cs: () => n.e("28990").then(n.bind(n, "998121")), da: () => n.e("86200").then(n.bind(n, "129843")), de: () => n.e("69788").then(n.bind(n, "87670")), el: () => n.e("62985").then(n.bind(n, "720106")), "en-GB": () => n.e("98105").then(n.bind(n, "667768")), "en-US": () => Promise.resolve().then(n.bind(n, "150924")), "es-ES": () => n.e("4267").then(n.bind(n, "586341")), "es-419": () => n.e("4267").then(n.bind(n, "586341")), fi: () => n.e("27381").then(n.bind(n, "410217")), fr: () => n.e("40096").then(n.bind(n, "661919")), hr: () => n.e("94912").then(n.bind(n, "65789")), hu: () => n.e("81843").then(n.bind(n, "848844")), it: () => n.e("33065").then(n.bind(n, "894593")), ja: () => n.e("33156").then(n.bind(n, "768303")), ko: () => n.e("78607").then(n.bind(n, "210927")), lt: () => n.e("79457").then(n.bind(n, "161316")), nl: () => n.e("49365").then(n.bind(n, "559344")), no: () => n.e("53579").then(n.bind(n, "268657")), pl: () => n.e("19726").then(n.bind(n, "908312")), "pt-BR": () => n.e("53896").then(n.bind(n, "523229")), ro: () => n.e("22042").then(n.bind(n, "164242")), ru: () => n.e("62629").then(n.bind(n, "848215")), "sv-SE": () => n.e("51477").then(n.bind(n, "240465")), th: () => n.e("41023").then(n.bind(n, "225438")), tr: () => n.e("64248").then(n.bind(n, "596885")), uk: () => Promise.all([n.e("30386"), n.e("43353")]).then(n.bind(n, "423602")), vi: () => n.e("67816").then(n.bind(n, "46233")), "zh-CN": () => n.e("62236").then(n.bind(n, "98728")), "zh-TW": () => n.e("5950").then(n.bind(n, "700966")), hi: () => n.e("3277").then(n.bind(n, "604871")) } }, 689938: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("913527"), r = n.n(i), s = n("627420"), a = n("375964"), o = n.n(a), l = n("924658"), u = n.n(l), d = n("539590"), _ = n.n(d); let c = e => ({ ...u(), ..._(), ...e }), E = new s.default({ getMessages: e => "en-US" === e ? c(o()) : n("290034")("./messages/".concat(e, ".jsona").replace("./messages/", "./")).then(e => { let { default: t } = e; return t }).then(c), getLanguages: () => n("515297") }); function I(e) { n("763747").dateFnsLocales[e]().then(t => { let { default: i } = t; { let { registerLocale: t } = n("578807"); t(e, i) } }) } E.addListener("locale", e => { ! function(e, t) { let n = [], i = ("no" === e ? "nb" : e).split("-"); for (; i.length > 0;) n.push(i.join("-")), i.pop(); n.push(t), r().locale(n) }(e, "en-US"); let { setTags: t } = n("960048").default; t({ locale: e }) }), E.addListener("locale", I), I(E.getLocale()), t.default = E }, 375964: function(e) { e.exports = Object.freeze({ DISCORD: "Discord", DISCORD_DESC_SHORT: "Imagine a place", DISCORD_DESC_LONG: "Join over 100 million people who use Discord to talk and hang out with communities and friends.", NOTIFICATION_BODY_ATTACHMENT: "Uploaded !!{filename}!!", NOTIFICATION_TITLE_START_GAME: "Somebody Playin'", NOTIFICATION_BODY_START_GAME: "!!{username}!! started playing !!{gameName}!!!", NOTIFICATION_MESSAGE_CREATE_GUILD_ACTIVITY_JOIN: "!!{user}!! invited the channel to play !!{game}!!", NOTIFICATION_MESSAGE_CREATE_GROUP_DM_ACTIVITY_JOIN: "!!{user}!! invited the group to play !!{game}!!", NOTIFICATION_MESSAGE_CREATE_DM_ACTIVITY_JOIN: "!!{user}!! invited you to play !!{game}!!", NOTIFICATION_MESSAGE_CREATE_DM_ACTIVITY_JOIN_REQUEST: "!!{user}!! has requested an invite to !!{game}!!", NOTIFICATION_MESSAGE_CREATE_GUILD_ACTIVITY_LISTEN: "!!{user}!! invited the channel to listen on Spotify", NOTIFICATION_MESSAGE_CREATE_GROUP_DM_ACTIVITY_LISTEN: "!!{user}!! invited the group to listen on Spotify", NOTIFICATION_MESSAGE_CREATE_DM_ACTIVITY_LISTEN: "!!{user}!! invited you to listen on Spotify", NOTIFICATION_DISMISS: "Dismiss notification", NOTIFICATION_FRIEND_SUGGESTION_CONTACT_TITLE: "Your contact !!{contact}!! just joined Discord!", NOTIFICATION_FRIEND_SUGGESTION_TITLE: "!!{contact}!! just joined Discord!", NOTIFICATION_FRIEND_SUGGESTION_BODY: "Send them a friend request", NOTIFICATION_MESSAGE_ACTIVITY_INSTANCE: "!!{user}!! started an activity", IOS_NOTIFICATION_SEE_FULL: "Tap to see full message.", ERRORS_UNEXPECTED_CRASH: "Looks like Discord has crashed unexpectedly....", ERRORS_ACTION_TO_TAKE: "We've tracked the error and will get right on it.", ERRORS_RELOAD: "Reload", ERRORS_RESTART_APP: "Restart Discord", ERRORS_STORE_CRASH: "Looks like the Store has crashed unexpectedly....", ERRORS_IMAGE_NOT_FOUND: "Image not found", UNSUPPORTED_BROWSER: "Unsupported Browser", DOWNLOAD_APP: "Download App", CANCEL: "Cancel", FILTER: "Filter", UNSUPPORTED_BROWSER_DETAILS: "You want to be able to talk to your friends, right? Switch to latest Chrome, Opera, Firefox, Edge or download the Discord app to start talking right now!", TRY_AGAIN: "Try Again", EMAIL_VERIFICATION_INSTRUCTIONS_HEADER: "Instructions Sent", EMAIL_VERIFICATION_INSTRUCTIONS_BODY: "\nWe sent instructions to change your password to **!!{email}!!**, please check both your inbox and spam folder.\n ", STAGE_VOICE_CHANNEL_TYPE: "Stage", STORE_CHANNEL_TYPE: "Store", NEWS_CHANNEL_TYPE: "Announcement", VOICE_CHANNEL_TYPE: "Voice", FORUM_CHANNEL_TYPE: "Forum", TEXT_CHANNEL_TYPE: "Text", HELP: "Help", GOT_IT: "Got It", ALL_DONE: "All done", UPDATE: "Update", SUBMIT: "Submit", UNDO: "Undo", REQUIRED: "Required", REFRESH: "Refresh", SUPPORT: "Support", CHANGE_LOG: "Change Log", CHANGE_LOG_FAILED_TO_LOAD: "Failed to load", CHANGE_LOG_CLIENT_OLD: "Your client is out of date. Update to get the latest and greatest Discord experience!", DOWNLOAD_APPS: "Download Apps", DISCARD_CHANGES: "Discard unsaved changes?", DISCARD_CHANGES_DESCRIPTION: "You have unsaved changes, are you sure you want to discard them?", DISCARD_CHANGES_CONFIRM: "Discard", DISCARD_CHANGES_CANCEL: "Keep Editing", SHARE: "Share", SHARE_INVITE: "Share Invite", INVITE_APP_MESSAGES: "Messages", INVITE_APP_EMAIL: "Email", INBOX: "Inbox", RECENT_MENTIONS: "Recent Mentions", RECENT_ACTIVITY: "Recent Activity", RECENT_ACTIVITY_LABEL: "!!{channelName}!! \xb7 {timeAgo}", RECENTLY_VISITED: "Recently Visited", ALL_SERVERS: "All Servers", THIS_SERVER: "This Server", THIS_SERVER_NAMED: "Only !!{guildName}!!", NO_RECENT_MENTIONS: "Start up some conversations, then keep track of them here!", RECENT_MENTIONS_PRO_TIP: "Whenever someone mentions you it will be saved here for 7 days.", RECENT_MENTIONS_FILTER_EVERYONE: "Include @everyone mentions", RECENT_MENTIONS_FILTER_ROLES: "Include @role mentions", RECENT_MENTIONS_FILTER_ALL_SERVERS: "Include all servers", RECENT_MENTIONS_EMPTY_STATE_HEADER: "You made it through everything!", RECENT_MENTIONS_EMPTY_STATE_TIP: "Whenever someone mentions you it will be saved here for 7 days.", UNREADS_TAB_LABEL: "Unreads", UNREADS_EMPTY_STATE_HEADER: "You're all caught up!", UNREADS_EMPTY_STATE_TIP: "Open the Inbox by pressing CTRL+I, and mark your top message as read with CTRL+Shift+E.", UNREADS_EMPTY_STATE_TIP_MAC: "Open the Inbox by pressing CMD+I, and mark your top message as read with CMD+Shift+E.", UNREADS_EMPTY_STATE_ERROR_HEADER: "Whoops", UNREADS_EMPTY_STATE_ERROR_SUBTITLE: "The Inbox hit a snag, please close and re-open it.", UNREADS_VIEW_CHANNEL: "View all unreads", UNREADS_MARK_READ: "Mark Inbox As Read", UNREADS_TUTORIAL_HEADER: "Stay up to date with latest messages!", UNREADS_TUTORIAL_BODY: "Unread messages from all your unmuted channels will show up here. Time to get to that zero inbox!", UNREADS_CONFIRM_MARK_ALL_READ_HEADER: "Mark all as read?", UNREADS_CONFIRM_MARK_ALL_READ_DESCRIPTION: "This will mark all your unmuted channels as read. Are you sure you want to continue?", UNREADS_OLD_CHANNELS_DIVIDER: "Messages older than 10 days", UNREADS_NO_NOTIFICATIONS_DIVIDER: "Notifications disabled", CHANGE_AVATAR: "Change\nAvatar", CHANGE_AVATAR_A11Y_LABEL: "Change Avatar", CHANGE_AVATAR_OR_DECORATION_A11Y_LABEL: "Change Avatar or Decoration", REMOVE: "Remove", MINIMUM_SIZE: "Minimum Size: **{size}x{size}**", IMAGES: "Images", AVATAR_CONVERT_FAILURE_MOBILE: "Unable to convert avatar to data URL. {avatarUrl}", CHANGE_ICON: "Change\nIcon", CHANGE_SPLASH: "Change Background", CHANGE_HOME_HEADER: "Change Home Header", EDIT_IMAGE: "Edit Image", MOBILE_GUILD_LIST_CONTEXT_MENU_ACTION_BUTTON_A11Y_LABEL: "Edit Your Server List", MOBILE_GUILD_LIST_CONTEXT_MENU_GRID_VIEW: "Grid View", MOBILE_GUILD_LIST_CONTEXT_MENU_LIST_VIEW: "List View", MOBILE_GUILD_LIST_CONTEXT_MENU_CUSTOMIZE: "Customize", MOBILE_GUILD_LIST_CONTEXT_MENU_ADD_A_SERVER: "Add a Server", NUF_CHANNEL_CHANNEL_NAME: "making-plans", NUF_CHANNEL_FIRST_MESSAGE_AUTHOR: "Mallow", NUF_CHANNEL_FIRST_MESSAGE: "anyone want to hang out this weekend?", NUF_CHANNEL_SECOND_MESSAGE_AUTHOR: "Amanda", NUF_CHANNEL_SECOND_MESSAGE: "me! how about saturday?", CUSTOMIZE_SERVERS: "Customize Servers", CUSTOMIZE_FOLDERS: "Customize Folders", CREATE_FOLDER: "Create Folder", EDIT_FOLDER: "Edit Folder", NEW_FOLDER: "New Folder", EDIT_FOLDER_A11Y_LABEL: "Edit folder, !!{name}!!", EDIT_FOLDER_GUILD_ADDED_A11Y_LABEL: "!!{name}!! has been added to folder.", EDIT_FOLDER_GUILD_REMOVED_A11Y_LABEL: "!!{name}!! has been removed from folder.", SELECT_SERVERS: "Select Servers", FOLDER_NAME: "Folder Name", DELETE_FOLDER: "Delete Folder", DELETE_FOLDER_CONFIRM_TEXT: "Are you sure you want to delete this folder?", GUILD_LIST_EDIT_MODAL_PLACEHOLDER: "Enter a name for your folder", GUILD_LIST_EDIT_MODAL_SERVERS_A11Y_LABEL: "Customize your servers", GUILD_LIST_EDIT_MODAL_FOLDERS_A11Y_LABEL: "Customize your folders", CREATE_FOLDER_MISSING_SERVERS_ERROR_TITLE: "Oops!", CREATE_FOLDER_MISSING_SERVERS_ERROR_DESCRIPTION: "Your new folder must include at least two servers.", EDIT_FOLDER_MISSING_SERVERS_ERROR_TITLE: "Oops!", EDIT_FOLDER_MISSING_SERVERS_ERROR_DESCRIPTION: "You must have at least one server in your folder.", SAVE_GUILD_FOLDERS_ERROR_TITLE: "Oops!", SAVE_GUILD_FOLDERS_ERROR_DESCRIPTION: "Something went wrong while trying to save your server folder. Please try again later.", SAVE_GUILD_FOLDERS_NAME_ERROR_DESCRIPTION: "Please enter a valid name", PAGINATION_PREVIOUS: "Previous", PAGINATION_NEXT: "Next", PAGINATION_PAGE_LABEL: "Page {pageNumber}", PAGINATION_SLIDE_LABEL: "Slide {pageNumber}", MUTE: "Mute", MUTE_ALT: "Turn Off Microphone", UNMUTE: "Unmute", UNMUTE_ALT: "Turn On Microphone", DEAFEN: "Deafen", UNDEAFEN: "Undeafen", SEARCH: "Search", AUTOCOMPLETE_NO_RESULTS_HEADER: "Nope!", AUTOCOMPLETE_NO_RESULTS_BODY: "Did you make a typo?", AUTOCOMPLETE_STICKERS_QUERY_MATCH: "Similar to: !!{queryMatch}!!", AUTOCOMPLETE_EMOJI_UPSELL: "Get {count, plural, one {# more matching emoji} other {# more matching emoji}} with Nitro", AUTOCOMPLETE_EMOJI_UPSELL_MODAL_HEADER: "Get more emoji with Nitro", AUTOCOMPLETE_EMOJI_UPSELL_MODAL_BLURB: "Lift off with Discord Nitro to use animated and custom emoji on any server. [Learn more](onLearnMore)", AUTOCOMPLETE_EMOJI_UPSELL_MODAL_BLURB_MOBILE: "Lift off with Discord Nitro to use animated and custom emoji on any server.", AUTOCOMPLETE_EMOJI_UPSELL_MODAL_BLURB_MOBILE_GENERIC: "Lift off with {planName} to use animated and custom emoji on any server.", FOLLOW_US_FOR_MORE_UPDATES: "Follow us for more updates!", UPDATE_BADGE_HEADER: "Update", CHANGELOG_SPECIAL_CTA_BODY: "Show a friend our new home page!\nWe’re here to make a good impression.", CHANGELOG_STICKERS_HEADER: "Stickers are here!", CHANGELOG_STICKERS_CTA_TITLE: "Have a question?", CHANGELOG_STICKERS_CTA_BODY: "View our Help Center for more info or hit us up on [Twitter](https://twitter.com/discord). We’re excited to see you express yourself with stickers.", CHANGELOG_STICKERS_CTA: "Learn More", CHANGELOG_CONTENT_LABEL: "Changelog content", RNA_CHANGELOG_UPSELL_TITLE: "Hey, Android friends", RNA_CHANGELOG_UPSELL_BODY: "We’ve heard your feedback and are making improvements to the new version of our Android app. Follow these updates in our Help Center.", RNA_CHANGELOG_UPSELL_CTA: "Read Help Center", TEXTAREA_PLACEHOLDER: "Message !!{channel}!!", FORUM_POST_TEXTAREA_PLACEHOLDER: "Send a message in !!{channel}!!", DM_TEXTAREA_PLACEHOLDER: "Message !!{channel}!!", TEXTAREA_FORUM_POST_A11Y_LABEL: "Compose Message, Forum Post !!{channel}!!", TEXTAREA_TEXT_DM_A11Y_LABEL: "Compose Message, !!{channel}!!", TEXTAREA_TEXT_CHANNEL_A11Y_LABEL: "Compose Message, Text Channel !!{channel}!!", TEXTAREA_THREAD_A11Y_LABEL: 'Compose Message, Thread "!!{channel}!!"', MESSAGE_TOO_LONG_HEADER: "Your message is too long.", MESSAGE_TOO_LONG_BODY_TEXT: "\nPlease make your message of {currentLength} characters shorter. We've set the limit at {maxLength} characters to be courteous to others.\n ", MESSAGE_RATE_LIMITED_HEADER: "WOAH THERE. WAY TOO SPICY", MESSAGE_RATE_LIMITED_BODY: "You're sending messages too quickly!", MESSAGE_RATE_LIMITED_BUTTON: "Enter the chill zone", OKAY: "Okay", STOP: "Stop", NO_THANKS: "No thanks", BLOCKED_MESSAGES: "{count, plural, one {1 Blocked Message} other {{count} Blocked Messages}}", LOAD_MORE_MESSAGES: "Load more messages", AKA: "AKA", AKA_DISPLAY_NAME: "AKA {displayName}", CHARACTER_COUNT_AT_LIMIT: "Message is at max length", CHARACTER_COUNT_CLOSE_TO_LIMIT: "{count} characters remaining", CHARACTER_COUNT_OVER_LIMIT: "Message is too long", MESSAGE_UNSUPPORTED: "Message cannot be displayed by this version of the app.", CHANNEL_SETTINGS_SUMMARIES_TOGGLE: "Enable Channel Summaries", CHANNEL_SETTINGS_SUMMARIES_TOGGLE_DESCRIPTION: "If turned off, nobody will see the Summaries in this channel. [Learn More]({helpdeskArticle})", CHANNEL_TOOLTIP_VOICE: "Voice", CHANNEL_TOOLTIP_VOICE_LIMITED: "Voice (Limited)", CHANNEL_TOOLTIP_VOICE_LOCKED: "Voice (Locked)", CHANNEL_TOOLTIP_TEXT: "Text", CHANNEL_TOOLTIP_STAGE: "Stage", CHANNEL_TOOLTIP_STAGE_LIMITED: "Stage (Limited)", CHANNEL_TOOLTIP_STAGE_LOCKED: "Stage (Locked)", CHANNEL_TOOLTIP_TEXT_NSFW: "Text (Age-Restricted)", CHANNEL_TOOLTIP_TEXT_LIMITED: "Text (Limited)", CHANNEL_TOOLTIP_TEXT_ACTIVE_THREADS: "Text (Active Threads)", CHANNEL_TOOLTIP_ANNOUNCEMENTS: "Announcements", CHANNEL_TOOLTIP_ANNOUNCEMENTS_NSFW: "Announcements (Age-Restricted)", CHANNEL_TOOLTIP_ANNOUNCEMENTS_LIMITED: "Announcements (Limited)", CHANNEL_TOOLTIP_RULES: "Rules", CHANNEL_TOOLTIP_STORE: "Store", CHANNEL_TOOLTIP_DIRECTORY: "Directory", GUILD_OWNER: "Server Owner", RATE_LIMITED: "You are being rate limited.", NO_MIC_TITLE: "Microphone Access is Denied", NO_MIC_BODY: "Instructions for enabling access to your microphone can be found in the Discord Help Center.", NO_CAMERA_TITLE: "Camera Access is Denied", NO_CAMERA_BODY: "Instructions for enabling access to your camera can be found in the Discord Help Center.", HELP_DESK: "Help Desk", PTT_PERMISSION_TITLE: "Push-to-talk Needs Permission", PTT_PERMISSION_BODY: "\nYou launched !!{game}!! as administrator. Please relaunch Discord as an administrator in order to enable Push-to-talk\ndetection while the game has focus.\n ", SUPPRESSED_AFK_TITLE: "Hello, anyone there?", SUPPRESSED_AFK_BODY: "It seems you've gone inactive on us. We've gone ahead and moved you to the inactive channel.", SUPPRESSED: "Suppressed", SUPPRESSED_PERMISSION_BODY: "You do not have permission to speak in this channel.", DONT_SHOW_AGAIN: "Don't show me this again.", SERVER_MUTED_DIALOG_TITLE: "Server Muted", SERVER_MUTED_DIALOG_BODY: "This channel has special permissions. To speak in it, you'll need someone, like a server moderator or admin, to unmute you.", SERVER_DEAFENED_DIALOG_TITLE: "Server Deafened", SERVER_DEAFENED_DIALOG_BODY: "This channel has special permissions. To listen in it, you'll need someone, like a server moderator or admin, to undeafen you.", NO_VIDEO_PERMISSION_DIALOG_TITLE: "No Video Permission", NO_VIDEO_PERMISSION_DIALOG_BODY: "This channel has special permissions. To use video in it, you'll need someone, like a server moderator or admin, to change your permissions.", NO_SCREENSHARE_PERMISSION_DIALOG_TITLE: "No Screen Share Permission", NO_SCREENSHARE_PERMISSION_DIALOG_BODY: "This channel has special permissions. To use Screen Share in it, you'll need someone, like a server moderator or admin, to change your permissions.", OS_MIN_SCREENSHARE_DIALOG_TITLE: "OS Version Requirement", OS_MIN_SCREENSHARE_DIALOG_BODY: "To use Screen Share, please update to latest OS version", IPAD_NO_SCREENSHARE_DIALOG_TITLE: "Feature Unavailable", IPAD_NO_SCREENSHARE_DIALOG_BODY: "Screen Share is currently unavailable on iPad. Coming soon!", NO_EMBEDDED_ACTIVITY_PERMISSION_DIALOG_TITLE: "No Activities Permission", NO_EMBEDDED_ACTIVITY_PERMISSION_DIALOG_BODY: "This channel has special permissions. To use Activities in it, you'll need someone, like a server moderator or admin, to change your permissions.", ACTIVITIES_GENERIC_LAUNCH_FAILURE_DIALOG_BODY: "Uh oh, something went wrong. Please try again later.", CONFIRM_DISABLE_SILENCE_TITLE: "We can't hear you!", CONFIRM_DISABLE_SILENCE_BODY: "\nIs your mic extra fancy and silencing itself? In that case you can turn off the red warning by clicking the\nteeny tiny small text below.", CONFIRM_DISABLE_SILENCE_DONT_SHOW: "Don't show me the warning again", VAD_PERMISSION_TITLE: "Push to Talk Required", VAD_PERMISSION_BODY: "\nThis channel requires Push to Talk to voice chat. You will only be able to listen until you switch modes\nto Push to Talk from Voice Activity Detection.\n ", VAD_PERMISSION_SMALL: "You must have Push to Talk enabled to speak in this channel.", VAD_PERMISSION_ENABLE_PTT: "Switch to Push to Talk", VAD_PERMISSION_OKAY: "Don’t switch", INTERACTION_REQUIRED_TITLE: "Interaction Required", INTERACTION_REQUIRED_BODY: "Browsers require user interaction before they will play audio. Just click okay to continue.", CERTIFIED_DEVICE_RECOMMENDATION_TITLE: "Certified Device Detected", CERTIFIED_DEVICE_RECOMMENDATION_AUDIO_INPUT_BODY: "\nDiscord detected a certified audio input device named **{vendorName} {modelName}**. We recommend you switch to it for the most optimal experience.", CERTIFIED_DEVICE_RECOMMENDATION_AUDIO_OUTPUT_BODY: "\nDiscord detected a certified audio output device named **{vendorName} {modelName}**. We recommend you switch to it for the most optimal experience.", CERTIFIED_DEVICE_RECOMMENDATION_AUDIO_INPUT_AND_OUTPUT_BODY: "\nDiscord detected a certified audio device named **{vendorName} {modelName}**. We recommend you switch to it for the most optimal experience.", CONNECTED_DEVICE_DETECTED_TITLE: "New Audio Device Detected", CONNECTED_DEVICE_DETECTED_INPUT_BODY: "Discord has detected a new audio input device named **!!{name}!!**! Do you want to switch to it?", CONNECTED_DEVICE_DETECTED_OUTPUT_BODY: "Discord has detected a new audio output device named **!!{name}!!**! Do you want to switch to it?", CONNECTED_DEVICE_DETECTED_INPUT_AND_OUTPUT_BODY: "Discord has detected a new audio device named **!!{name}!!**! Do you want to switch to it?", CONNECTED_DEVICE_DETECTED_OPTION_INPUT_AND_OUTPUT: "Switch both input and output", CONNECTED_DEVICE_DETECTED_OPTION_INPUT: "Switch input only", CONNECTED_DEVICE_DETECTED_OPTION_OUTPUT: "Switch output only", CONNECTED_DEVICE_DETECTED_CONFIRM_BUTTON: "Switch Device", CONNECTED_DEVICE_DETECTED_CANCEL_BUTTON: "Don't Switch", OPEN_ORIGIANL_IMAGE_BUTTON_A11Y_DESCRIPTION: "click to open image dialog", NSFW_TITLE: "Age-Restricted Channel", NSFW_DESCRIPTION: "You must be at least eighteen years old to view this channel. Are you over eighteen and willing to see adult content?", NSFW_ACCEPT: "Continue", NSFW_DECLINE: "Nope", MATURE_LISTING_TITLE: "!!{name}!! is for mature audiences", MATURE_LISTING_DESCRIPTION: "You must be at least eighteen years old to view this game. Are you over eighteen and willing to view mature content?", MATURE_LISTING_ACCEPT: "Continue", MATURE_LISTING_DECLINE: "Nope", FORM_LABEL_CHANNEL_NAME: "Channel Name", FORM_LABEL_CHANNEL_TOPIC: "Channel Topic", OPEN_CHANNEL_TOPIC: "Open Channel Topic", CHANNEL_TOPIC_EMPTY: "Let everyone know how to use this channel!", DELETE_CHANNEL: "Delete Channel", DELETE_CATEGORY: "Delete Category", REMOVE_CATEGORY: "Remove Category", DELETE_CATEGORY_SUBTEXT: "Channels will be uncategorized", OVERVIEW: "Overview", EDIT_OVERVIEW: "Edit Overview", ONBOARDING: "Onboarding", INSTANT_INVITES: "Invites", PERMISSIONS: "Permissions", DONE: "Done", CONFIRM: "Confirm", HIDE: "Hide", REVEAL: "Reveal", FORM_LABEL_BITRATE: "Bitrate", FORM_HELP_BITRATE: "ALL THE BITS! Going above {bitrate, number} kbps may adversely affect people on poor connections.", FORM_LABEL_USER_LIMIT: "User Limit", FORM_HELP_USER_LIMIT: "\nLimits the number of users that can connect to this voice channel. Users with the **Move Members** permission\nignore this limit and can move other users into the channel.\n", FORM_HELP_USER_LIMIT_STAGE: "\nLimits the number of users that can connect to this Stage channel. Users with the **Move Members** permission\nignore this limit and can move other users into the channel.\n", NO_USER_LIMIT: "No Limit", NUM_USERS: "{num, plural, one {1 user} other {{num} users}}", FORM_LABEL_NSFW_CHANNEL: "Age-Restricted Channel", FORM_HELP_NSFW: "\nUsers will need to confirm they are of over legal age to view in the content in this channel.\nAge-restricted channels are exempt from the explicit content filter.\n", FORM_LABEL_NEWS_CHANNEL: "Announcement Channel", FORM_HELP_NEWS: '\nPost messages that reach servers outside your own. Users can opt into "Following" this channel, so select posts you "Publish" from here will appear directly in their own servers. Announcement channels will not receive messages from other Announcement channels. [Learn more.]({documentationLink})\n ', FORM_HELP_NEWS_ANDROID: 'Post messages that reach servers outside your own. Users can opt into "Following" this channel, so select posts you "Publish" from here will appear directly in their own servers. [Learn more.]({documentationLink})', FORM_LABEL_SLOWMODE: "Slowmode", FORM_HELP_SLOWMODE: "\nMembers will be restricted to sending one message and creating one thread per this interval, unless they have Manage Channel or Manage Messages permissions.", FORM_HELP_SLOWMODE_THREAD: "Members will be restricted to sending one message per this interval, unless they have Manage Channel or Manage Messages permissions.", FORM_HELP_SLOWMODE_FORUM: "Members will be restricted to creating one post per this interval, unless they have Manage Channel or Manage Messages permissions.", FORM_LABEL_SLOWMODE_COOLDOWN: "Slowmode Cooldown", FORM_LABEL_SLOWMODE_OFF: "Slowmode is off.", FORM_LABEL_SLOWMODE_SEARCH_PLACEHOLDER: "Select a default or enter a custom duration!", CANNOT_DELETE_CHANNEL: "Cannot Delete Channel", CANNOT_PRIVATIZE_CHANNEL: "Cannot Make Channel Private", DESIGNATE_OTHER_CHANNEL_ONBOARDING_PRIVATE: "You must designate a replacement Default Channel in [Server Settings > Community > Onboarding](onClick) before this channel can be made private.", DELETE_RULES_CHANNEL_BODY: "Community Servers are required to have a rules channel.", DELETE_DEFAULT_CHANNEL_BODY: "Deleting this channel will make your server incompatible with Community Onboarding.", DELETE_UPDATES_CHANNEL_BODY: "Community Servers are required to have a Community Updates channel where Discord can send important community server updates.", ANDROID_DESIGNATE_OTHER_CHANNEL: "You must designate another inside Server Settings before this channel can be deleted.", DESIGNATE_OTHER_CHANNEL: "You must designate another inside [Server Settings > Community > Overview](onClick) before this channel can be deleted.", DESIGNATE_OTHER_CHANNEL_ONBOARDING: "You must designate a replacement Default Channel in [Server Settings > Community > Onboarding](onClick) before this channel can be deleted.", DESIGNATE_OTHER_CHANNEL_GUIDE_TODO: "You must remove or replace the To Do in [Server Settings > Community > Onboarding](onClick) before this channel can be deleted.", DESIGNATE_OTHER_CHANNEL_GUIDE_RESOURCE: "You must remove or replace the Resource in [Server Settings > Community > Onboarding](onClick) before this channel can be deleted.", MOBILE_DESIGNATE_OTHER_CHANNEL: "You must designate another inside [Server Settings > Community > Overview](onClick) before this channel can be deleted.", ONBOARDING_CHANNEL_THRESHOLD_WARNING: "Making this change will make your server incompatible with Community Onboarding. You must designate a replacement Default Channel in [Server Settings > Community > Onboarding](onClick) before this channel can be modified.", ONBOARDING_CHANNEL_THRESHOLD_WARNING_MOBILE: "Making this change will make your server incompatible with Community Onboarding. You must designate a replacement Default Channel in **Server Settings > Community > Onboarding** (on desktop) before this channel can be modified.", CANNOT_CHANGE_CHANNEL_PERMS: "Cannot change channel permissions", FORM_LABEL_VIDEO_QUALITY: "Video Quality", VIDEO_QUALITY_MODE_AUTO: "Auto", VIDEO_QUALITY_MODE_FULL: "720p", FORM_HELP_VIDEO_QUALITY_MODE: "Sets camera video quality for all channel participants. Choose **Auto** for optimal performance.", OVERWRITE_AUTOCOMPLETE_LABEL: "Add:", OVERWRITE_AUTOCOMPLETE_PLACEHOLDER: "Role/Member", OVERWRITE_AUTOCOMPLETE_A11Y_LABEL: "Add Role or Member", ROLES: "Roles", MEMBERS: "Members", MEMBERS_LIST_LANDMARK_LABEL: "Members list for !!{channel}!! (channel)", ADD_A_ROLE: "Add a Role", ADD_A_MEMBER: "Add a Member", OVERWRITE_NO_ROLE_TO_ADD: "Every role has overridden permissions in this channel.", MEMBER_LIST: "Member List", MEMBER_LIST_SHOWN: "Hide Member List", MEMBER_LIST_HIDDEN: "Show Member List", GENERAL_PERMISSIONS: "General Permissions", MANAGE_CHANNEL: "Manage Channel", MANAGE_CHANNEL_DESCRIPTION: "Members with this permission can change the channel's name or delete it.", MANAGE_PERMISSIONS: "Manage Permissions", MANAGE_PERMISSIONS_DESCRIPTION: "Members with this permission can change this channel's permissions.", TEXT_PERMISSIONS: "Text Permissions", READ_MESSAGES: "Read Messages", READ_MESSAGES_VIEW_CHANNELS: "Read Text Channels & See Voice Channels", VIEW_CHANNEL: "View Channel", SEND_MESSAGES_DESCRIPTION: "Members with this permission can publish their own messages to all servers following this [Announcement Channel]({articleURL}).", SEND_TTS_MESSAGES: "Send TTS Messages", SEND_TTS_MESSAGES_DESCRIPTION: "\nMembers with this permission can send text-to-speech messages by starting a message with /tts. These messages\ncan be heard by everyone focused on the channel.\n ", USE_APPLICATION_COMMANDS: "Use Application Commands", USE_APPLICATION_COMMANDS_GUILD_DESCRIPTION: "Members with this permission can use commands from applications, including slash commands and context menu commands.", USE_APPLICATION_COMMANDS_CHANNEL_DESCRIPTION: "Members with this permission can use commands from applications in this channel, including slash commands and context menu commands.", MANAGE_MESSAGES_DESCRIPTION: "Members with this permission can delete messages by other members or pin any message.", MENTION: "Mention", MENTION_USER: "Mention {username}", MENTION_EVERYONE_ANDROID: "Mention @everyone, @here, and All Roles", MENTION_EVERYONE_DESCRIPTION: 'Members with this permission can use @everyone or @here to ping all members. They can also @mention all roles, even if the role\'s "Allow anyone to mention this role" permission is disabled.', MENTION_EVERYONE_CHANNEL_DESCRIPTION: 'Members with this permission can use @everyone or @here to ping all members **in this channel**. They can also @mention all roles, even if the role\'s "Allow anyone to mention this role" permission is disabled.', USE_EXTERNAL_EMOJIS: "Use External Emoji", USE_EXTERNAL_EMOJIS_DESCRIPTION: "Members with this permission can use emoji from other servers in this server.", USE_EXTERNAL_STICKERS: "Use External Stickers", USE_EXTERNAL_STICKERS_DESCRIPTION: "Members with this permission can use stickers from other servers in this server.", REACTIONS: "Reactions", VIEW_REACTIONS: "View Reactions", ADD_REACTION_NAMED: "Add Reaction: {emojiName}", REMOVE_REACTION: "Remove Reaction", REMOVE_ALL_REACTIONS: "Remove All Reactions", REMOVE_ALL_REACTIONS_CONFIRM_TITLE: "Remove All Reactions", REMOVE_ALL_REACTIONS_CONFIRM_BODY: "Are you sure you want to remove all reactions from this message?", REMOVE_EMOJI_REACTIONS: "Remove Reactions", REMOVE_EMOJI_REACTIONS_CONFIRM_TITLE: "Remove Reactions for Emoji", REMOVE_EMOJI_REACTIONS_CONFIRM_BODY: "Are you sure you want to remove all of the reactions for this emoji from this message?", ADD_REACTIONS_DESCRIPTION: "\nMembers with this permission can add new reactions to a message. Members can still react using reactions already added to\nmessages without this permission.\n ", VOICE_PERMISSIONS: "Voice Permissions", MOVE_MEMBERS_DESCRIPTION: "\nMembers with this permission can drag other members out of this channel. They can only move members between\nchannels both they and the member they are moving have access.\n ", USE_VAD_DESCRIPTION: "Members must use Push-to-talk in this channel if this permission is disallowed.", STREAM_DESCRIPTION: "Members with this permission can stream into this server.", STREAM_CHANNEL_DESCRIPTION: "Members with this permission can stream into this channel.", PERMISSION_HELPDESK: "Need help with permissions?", SELF_DENY_PERMISSION_TITLE: "Pretty sure you don't want to do this", SELF_DENY_PERMISSION_BODY: "\nYou cannot deny this permission to **!!{name}!!** because it will deny it to you as well. Allow another role or yourself\nbefore trying again.\n", CANNOT_DENY_SELF_SIMPLE: "You cannot revoke permissions from yourself.", CANNOT_DENY_SINGULAR_PERMISSION: "Revoking this permission would remove it from you.", CANNOT_DENY_MISSING_PERMISSION: "You do not have this permission, so you cannot revoke it.", REMOVE_ROLE_OR_USER: "Remove !!{name}!!", SEARCH_GLOBAL_DMS: "Search for messages, people, etc.", SEARCH_ROLES: "Search Roles", SEARCH_ROLES_NO_RESULT: "No roles were found.", SEARCH_MEMBERS: "Search Members", SEARCH_MEMBERS_NO_RESULT: "No members were found.", SEARCH_ACTIONS: "Search Actions", SEARCH_CHANNELS: "Search Channels", SEARCH_CHANNELS_NO_RESULT: "No channels were found.", SEARCH_THREAD_NAMES: "Search for Thread Name", SEARCH_ACTIVE_JUST_NOW: "Active just now", SEARCH_ACTIVE_YESTERDAY: "Active yesterday", SEARCH_ACTIVE_AGO_TIMESTAMP_MINUTES: "Active {count}m ago", SEARCH_ACTIVE_AGO_TIMESTAMP_HOURS: "Active {count}h ago", SEARCH_ACTIVE_AGO_TIMESTAMP_DAYS: "Active {count} days ago", SEARCH_ACTIVE_AGO_TIMESTAMP_MONTHS: "Active {count} months ago", SEARCH_ACTIVE_AGO_TIMESTAMP_YEARS: "Active {count} years ago", SEARCH_TAP_TO_SEE_LINK: "Tap to see message", CONTENT_MATCHING: "!!{command}!! content matching **!!{query}!!**", EMOJI_MATCHING: "Emoji matching **!!{prefix}!!**", REACTIONS_MATCHING: "Add reaction **!!{prefix}!!**", MEMBERS_MATCHING: "Members matching **!!{prefix}!!**", ROLES_MATCHING: "Roles matching **!!{prefix}!!**", COMMANDS_MATCHING: "Commands matching **!!{prefix}!!**", STICKERS_MATCHING: "Stickers matching **!!{prefix}!!**", STICKERS_MATCHING_IOS: "Stickers matching {prefix}", CHANNELS_MATCHING: "Channels matching **!!{prefix}!!**", TEXT_CHANNELS_MATCHING: "Text channels matching **!!{prefix}!!**", VOICE_CHANNELS_MATCHING: "Voice channels matching **!!{prefix}!!**", OPTIONS_MATCHING: "Options matching **!!{prefix}!!**", REQUIRED_OPTIONS: "Required options", REQUIRED_OPTIONS_MATCHING: "Required options matching **!!{prefix}!!**", MENTION_USERS_WITH_ROLE: "Notify users with this role who have permission to view this channel.", EMOJI: "Emoji", SELECT_EMOJI: "Select emoji", SELECT_ACTIVITY: "Select Activity", COMMANDS: "Commands", TEXT_CHANNELS: "Text Channels", NO_SEND_MESSAGES_PERMISSION_PLACEHOLDER: "You do not have permission to send messages in this channel.", MENTION_EVERYONE_AUTOCOMPLETE_DESCRIPTION: "Notify everyone who has permission to view this channel.", MENTION_HERE_AUTOCOMPLETE_DESCRIPTION: "Notify everyone online who has permission to view this channel.", MENTION_EVERYONE_AUTOCOMPLETE_DESCRIPTION_MOBILE: "Notify everyone in this channel.", MENTION_HERE_AUTOCOMPLETE_DESCRIPTION_MOBILE: "Notify members online in this channel.", MENTION_ROLE_AUTOCOMPLETE_DESCRIPTION_MOBILE: "Notify users with this role in this channel.", COMMANDS_OPTION_COUNT: "+{count, plural, =1 {# option} other {# options}}", COMMANDS_OPTIONAL_HEADER: "Optional", COMMANDS_OPTIONAL_COUNT: "+{count} optional", COMMANDS_OPTIONAL_COUNT_REMAINING: "+{count} more", STICKERS_YOU_MIGHT_LIKE: "Stickers you might like", STICKERS_YOU_MIGHT_LIKE_A11Y: "Category: Stickers you might like", COMMAND_GIPHY_DESCRIPTION: "Search Animated GIFs on the Web", COMMAND_GIPHY_QUERY_DESCRIPTION: "Search for a GIF", COMMAND_SPOILER_DESCRIPTION: "Marks your message as a spoiler.", COMMAND_SPOILER_MESSAGE_DESCRIPTION: "Your message", COMMAND_TTS_DESCRIPTION: "Use text-to-speech to read the message to all members currently viewing the channel.", COMMAND_TTS_MESSAGE_DESCRIPTION: "Your message", COMMAND_ME_DESCRIPTION: "Displays text with emphasis.", COMMAND_ME_MESSAGE_DESCRIPTION: "Your message", COMMAND_TABLEFLIP_DESCRIPTION: "Appends (╯\xb0□\xb0)╯︵ ┻━┻ to your message.", COMMAND_TABLEFLIP_MESSAGE_DESCRIPTION: "Your message", COMMAND_TABLEUNFLIP_DESCRIPTION: "Appends ┬─┬ ノ( ゜-゜ノ) to your message.", COMMAND_TABLEUNFLIP_MESSAGE_DESCRIPTION: "Your message", COMMAND_SHRUG_DESCRIPTION: "Appends \xaf\\_(ツ)_/\xaf to your message.", COMMAND_SHRUG_MESSAGE_DESCRIPTION: "Your message", COMMAND_NICK_DESCRIPTION: "Change nickname on this server.", COMMAND_NICK_NEWNICK_DESCRIPTION: "New nickname", COMMAND_NICK_SUCCESS: "Your nickname on this server has been changed to **{nick}**.", COMMAND_NICK_RESET: "Your nickname on this server has been reset.", COMMAND_NICK_FAILURE: "Your nickname could not be changed on this server.", COMMAND_CHANGE_NICK_FOR_MEMBER_FAILURE: "This user's nickname could not be changed on this server.", COMMAND_NICK_FAILURE_PERMISSION: "You do not have the **Change Nickname** permission on this server.", COMMAND_THREAD_DESCRIPTION: "Start new thread", COMMAND_THREAD_NAME_DESCRIPTION: "Type a name for your thread", COMMAND_THREAD_MESSAGE_DESCRIPTION: "Type the first message in your thread", COMMAND_KICK_DESCRIPTION: "Kick user", COMMAND_KICK_USER_DESCRIPTION: "The user to kick", COMMAND_KICK_REASON_DESCRIPTION: "The reason for kicking, if any", COMMAND_KICK_CONFIRMATION: "!!{user}!! was kicked from the server.", COMMAND_KICK_UNABLE: "You do not have the appropriate permissions to kick that user.", COMMAND_KICK_ERROR: "Oops! We encountered an error when trying to kick that user.", COMMAND_BAN_DESCRIPTION: "Ban user", COMMAND_BAN_USER_DESCRIPTION: "The user to ban", COMMAND_BAN_DELETE_MESSAGES_DESCRIPTION: "How much of their recent message history to delete", COMMAND_BAN_REASON_DESCRIPTION: "The reason for banning, if any", COMMAND_BAN_CONFIRMATION: "!!{user}!! was banned from the server.", COMMAND_BAN_UNABLE: "You do not have the appropriate permissions to ban that user.", COMMAND_BAN_ERROR: "Oops! We encountered an error when trying to ban that user.", COMMAND_TIMEOUT_DESCRIPTION: "Timeout user", COMMAND_TIMEOUT_USER_DESCRIPTION: "The user to timeout", COMMAND_TIMEOUT_DURATION_DESCRIPTION: "How long they should be timed out for", COMMAND_TIMEOUT_REASON_DESCRIPTION: "The reason for timing them out, if any", COMMAND_TIMEOUT_CONFIRMATION: "!!{user}!! timed out for {duration, number} seconds.", COMMAND_TIMEOUT_UNABLE: "You do not have the appropriate permissions to timeout that user.", COMMAND_TIMEOUT_ERROR: "Oops! We encountered an error when trying to timeout that user.", COMMAND_MSG_DESCRIPTION: "Message user", COMMAND_MSG_USER_DESCRIPTION: "The user to message", COMMAND_MSG_MESSAGE_DESCRIPTION: "Message to send", COMMAND_MSG_ERROR: "Oops! We encountered an error when trying to message that user.", COMMAND_VALIDATION_REQUIRED_ERROR: "This option is required. Specify a value.", COMMAND_VALIDATION_BOOLEAN_ERROR: "Pick either true or false.", COMMAND_VALIDATION_INTEGER_ERROR: "Input a valid integer.", COMMAND_VALIDATION_NUMBER_ERROR: "Input a valid number.", COMMAND_VALIDATION_NUMBER_MAXIMUM_ERROR: "Enter a number less than or equal to !!{maximum}!!.", COMMAND_VALIDATION_NUMBER_MINIMUM_ERROR: "Enter a number greater than or equal to !!{minimum}!!.", COMMAND_VALIDATION_NUMBER_RANGE_ERROR: "Enter a number between !!{minimum}!! and !!{maximum}!!.", COMMAND_VALIDATION_STRING_EXACT_RANGE_ERROR: "Enter !!{value}!! characters.", COMMAND_VALIDATION_STRING_MAXIMUM_ERROR: "Enter !!{maximum}!! or fewer characters.", COMMAND_VALIDATION_STRING_MINIMUM_ERROR: "Enter !!{minimum}!! or more characters.", COMMAND_VALIDATION_STRING_RANGE_ERROR: "Enter between !!{minimum}!! and !!{maximum}!! characters.", COMMAND_VALIDATION_USER_ERROR: "Not a valid user.", COMMAND_VALIDATION_CHANNEL_ERROR: "Not a valid channel.", COMMAND_VALIDATION_ROLE_ERROR: "Not a valid role.", COMMAND_VALIDATION_MENTIONABLE_ERROR: "Not a valid user or role.", COMMAND_VALIDATION_CHOICE_ERROR: "Not a valid choice.", COMMAND_VALIDATION_GENERAL_ERROR: "Not a valid value.", COMMAND_DISPLAY_STRING: "{commandName}{commandText}", COMMAND_SECTION_BUILT_IN_NAME: "Built-In", COMMAND_ACCESSIBILITY_DESC_OPEN_DISCOVER_LIST: "Application commands list opened", COMMAND_ACCESSIBILITY_DESC_COMMAND_ITEM: "Slash {commandName}. {commandDescription}. From {applicationName}", COMMAND_ACCESSIBILITY_DESC_CONTEXT_MENU_COMMAND_ITEM: "{commandName}. From {applicationName}", COMMAND_ACCESSIBILITY_DESC_APP_ITEM: "{applicationName} application", COMMAND_ACCESSIBILITY_DESC_APP_ITEM_SELECTED: "{applicationName} application selected", COMMAND_ACCESSIBILITY_DESC_APP_HEADER_ITEM: "Slash command application {applicationName}", COMMAND_ACCESSIBILITY_DESC_COMMAND_OPTION_BUTTON: "Add command argument {optionName}", APP_LAUNCHER_HOME_RECENT_COMMANDS_HEADER: "Recents", APP_LAUNCHER_HOME_SERVER_APPS_HEADER: "Installed", APP_LAUNCHER_COMMAND_LIST_SORT_HEADER: "Sort By", APP_LAUNCHER_COMMAND_LIST_SORT_OPTION_POPULAR: "Popular", APP_LAUNCHER_COMMAND_LIST_SORT_OPTION_ALPHABETICAL: "Alphabetical", APP_LAUNCHER_COMMAND_LIST_NO_COMMANDS_HERE: "No commands available here", APP_LAUNCHER_ALL_COMMANDS_HEADER: "All Commands", APP_LAUNCHER_MONETIZATION_DISCLOSURE: "This App has In-App Purchases", APP_LAUNCHER_NO_REQUIRED_OPTIONS_CALLOUT: "Nothing required. You can send the command or add an option below", APP_LAUNCHER_NO_OPTIONS_CALLOUT: "This command has no options. Send it!", APP_LAUNCHER_COMMAND_OPTIONAL_OPTIONS_LIST_HEADER: "Select an option below", APP_LAUNCHER_SEARCH_PLACEHOLDER: "Search Apps & Commands", APP_LAUNCHER_HOME_EMPTY_STATE_BODY: "No apps have been installed in this server yet", APP_LAUNCHER_SEARCH_EMPTY_STATE_BODY: "No apps or commands match your search", APP_LAUNCHER_BUILT_IN_SECTION_NAME: "Discord Built-In", APP_LAUNCHER_BUILT_IN_SECTION_DESCRIPTION: "Built-in commands for everyday use", APP_LAUNCHER_UNKNOWN_COMMAND_ERROR_MODAL_TITLE: "Something went wrong...", APP_LAUNCHER_UNKNOWN_COMMAND_ERROR_MODAL_BODY: "We were unable to run the command. Please try again later.", APP_LAUNCHER_AUTOCOMPLETE_OPTION_SEARCH_BAR_PLACEHOLDER: "Start typing...", APP_LAUNCHER_COMMAND_NOT_FOUND_TITLE: "No command found", APP_LAUNCHER_COMMAND_NOT_FOUND_BODY: "This command is not available", APP_LAUNCHER_NO_PERMISSIONS_STATE_BODY: "You do not have permissions to run commands in this channel", APP_LAUNCHER_PREVIOUSLY_EXECUTED_COMMAND_OPEN: "Open Command", APP_LAUNCHER_COMMAND_NO_PERMISSIONS_TITLE: "No permissions", APP_LAUNCHER_COMMAND_NO_PERMISSIONS_BODY: "You do not have permissions to run this command", APP_LAUNCHER_ONBOARDING_ACTIVITIES_BANNER_BODY: "Swipe up to see more Activities like {activityName}!", APP_LAUNCHER_ONBOARDING_BOTS_BANNER_BODY: "{firstApplicationName}, {secondApplicationName} & more are now in Apps!", APP_LAUNCHER_ONBOARDING_APPS_BANNER_BODY: "Swipe up to find games to play with friends!", APP_LAUNCHER_VIEW_ALL_ROW: "View all", APP_LAUNCHER_VIEW_MORE_ROW: "View more", APP_LAUNCHER_VIEW_LESS_ROW: "View less", APP_LAUNCHER_HOME_LEARN_MORE_SECTION_TITLE: "New to Apps?", APP_LAUNCHER_HOME_LEARN_MORE_SECTION_BODY: "Check out our starter guide to learn about the cool things apps can do.", APP_LAUNCHER_HOME_LEARN_MORE_SECTION_LEARN_MORE: "Learn More", READY: "Ready", CONNECTING: "Connecting…", CONNECTING_PROBLEMS_CTA: "Connection problems? Let us know!", TWEET_US: "Tweet Us", SERVER_STATUS: "Server Status", CREATE: "Create", CREATE_TEXT_CHANNEL: "Create Text Channel", CREATE_TEXT_CHANNEL_DESCRIPTION: "Send messages, images, GIFs, emoji, opinions, and puns", CREATE_VOICE_CHANNEL: "Create Voice Channel", CREATE_VOICE_CHANNEL_DESCRIPTION: "Hang out together with voice, video, and screen share", CREATE_STORE_CHANNEL_DESCRIPTION: "Sell your game directly on Discord", CREATE_NEWS_CHANNEL_DESCRIPTION: "Important updates for people in and out of the server", CREATE_STAGE_CHANNEL: "Create Stage Channel", CREATE_STAGE_CHANNEL_DESCRIPTION: "Host events, panels, and Q&As for an audience", CLONE_CHANNEL: "Duplicate Channel", CLONE_CHANNEL_HELP: "A new channel will be created with the same permissions, user limit and bitrate as **!!{name}!!**.", FORM_LABEL_CHANNEL_PERMISSIONS: "Who can access this channel?", FORM_LABEL_CATEGORY_PERMISSIONS: "Who can access this category?", CREATE_STORE_CHANNEL_APPLICATION: "Application", CREATE_STORE_CHANNEL_SELECT_APPLICATION: "Select application", CREATE_STORE_CHANNEL_SKU: "SKU", CREATE_STORE_CHANNEL_SELECT_SKU: "Select SKU", CREATE_STORE_CHANNEL_NO_SKUS: "No SKUs available", CREATE_STORE_CHANNEL_BRANCH: "Branch", CREATE_STORE_CHANNEL_SELECT_BRANCH: "Select branch", CREATE_STORE_CHANNEL_BETA_TITLE: "Beta Channel", CREATE_STORE_CHANNEL_BETA_NOTE: "Beta channels let users claim test branches of your game for free. [Learn more about beta channels.]({devPortalUrl})", INSTANT_INVITE_EXPIRED: "The invite is invalid or has expired.", INSTANT_INVITE_BANNED: "Uh-oh. Looks like you've been banned.", JOIN_SERVER_TITLE: "Join a Server", JOIN_SERVER_DESCRIPTION_NUF: "Enter an invite below to join an existing server", INVALID_INVITE_LINK_ERROR: "Please enter a valid invite link or invite code.", MAX_GUILD_MEMBERS_REACHED_ERROR: "This server is currently full. Please try again later.", SERVER_IS_CURRENTLY_FULL: "This server is currently full.", PLEASE_TRY_AGAIN_LATER: "Please try again later.", BACK: "Back", BACK_BUTTON_MENTIONS_ACCESSIBILITY_LABEL: "Back Button {mentionCount, plural, one {# mention} other {# mentions}}", BACK_ACCESSIBILITY_HINT: "Navigate back to the previous screen", JOIN: "Join", CREATE_SERVER_DEFAULT_SERVER_NAME_FORMAT: "{username}'s server", FORM_LABEL_SERVER_NAME: "Server Name", FORM_PLACEHOLDER_SERVER_NAME: "Enter a server name", FORM_CLEAR_SERVER_NAME_A11Y_LABEL: "Clear Server Name", SERVER_NAME_REQUIRED: "Server name is required.", CREATE_SERVER_BUTTON_ACTION: "Create Server", CREATE_SERVER_BUTTON_CTA: "Create a server", CREATE_SERVER_BUTTON_CTA_MOBILE: "Create a new Server", JOIN_SERVER_BUTTON_CTA: "Join a server", JOIN_SERVER_BUTTON_CTA_MOBILE: "Join a Server with an Invite Link", JOIN_SERVER_EXAMPLES: "Examples: {examples}", JOIN_GUILD_CONNECT: "Looking for more servers to join? [Connect Twitch or YouTube accounts.](onClick)", ADD_A_SERVER: "Add a Server", ADD_A_SERVER_MOBILE: "Tap to add a server!", CREATE_SERVER_GUIDELINES: "By creating a server, you agree to Discord's **[Community Guidelines]({guidelinesURL})**.", DISCOVERY_UPSELL_HEADER: "Don't have an invite?", DISCOVERY_UPSELL_DESCRIPTION: "Check out Discoverable communities in Server Discovery.", GUILD_TEMPLATE_SELECTOR_TITLE: "Create Your Server", GUILD_TEMPLATE_SELECTOR_DESCRIPTION: "Your server is where you and your friends hang out. Make yours and start talking.", GUILD_TEMPLATE_SELECTOR_OPTION_HEADER: "Start from a template", GUILD_TEMPLATE_HEADER_CREATE: "Create My Own", GUILD_TEMPLATE_HEADER_STUDY: "Study Group", GUILD_TEMPLATE_HEADER_GAMING: "Gaming", GUILD_TEMPLATE_HEADER_FRIEND: "Friends", GUILD_TEMPLATE_HEADER_CREATOR: "Artists & Creators", GUILD_TEMPLATE_HEADER_CLUBS: "Clubs", GUILD_TEMPLATE_HEADER_COMMUNITY: "Local Community", GUILD_TEMPLATE_NAME_ANNOUNCEMENTS: "announcements", GUILD_TEMPLATE_NAME_EVENTS: "events", GUILD_TEMPLATE_NAME_GAME: "games", GUILD_TEMPLATE_NAME_GENERAL: "general", GUILD_TEMPLATE_NAME_MEETUPS: "meetups", GUILD_TEMPLATE_NAME_MUSIC: "music", GUILD_TEMPLATE_NAME_OFF_TOPIC: "off-topic", GUILD_TEMPLATE_NAME_WELCOME_AND_RULES: "welcome-and-rules", GUILD_TEMPLATE_NAME_CLIPS_AND_HIGHLIGHTS: "clips-and-highlights", GUILD_TEMPLATE_NAME_NOTES_RESOURCES: "notes-resources", GUILD_TEMPLATE_NAME_HOMEWORK_HELP: "homework-help", GUILD_TEMPLATE_NAME_SESSION_PLANNING: "session-planning", GUILD_TEMPLATE_NAME_MEETING_PLANS: "meeting-plans", GUILD_TEMPLATE_NAME_IDEAS_AND_FEEDBACK: "ideas-and-feedback", GUILD_TEMPLATE_NAME_RESOURCES: "resources", GUILD_TEMPLATE_NAME_VOICE_LOBBY: "Lobby", GUILD_TEMPLATE_NAME_VOICE_GAMING: "Gaming", GUILD_TEMPLATE_NAME_VOICE_LOUNGE: "Lounge", GUILD_TEMPLATE_NAME_VOICE_STREAM_ROOM: "Stream Room", GUILD_TEMPLATE_NAME_VOICE_STUDY_ROOM: "Study Room {number}", GUILD_TEMPLATE_NAME_VOICE_MEETING_ROOM: "Meeting Room", GUILD_TEMPLATE_NAME_VOICE_COMMUNITY_HANGOUT: "Community Hangout", GUILD_TEMPLATE_NAME_CATEGORY_TEXT: "Text Channels", GUILD_TEMPLATE_NAME_CATEGORY_VOICE: "Voice Channels", GUILD_TEMPLATE_NAME_CATEGORY_INFORMATION: "Information", GUILD_TEMPLATE_MODAL_TITLE_CLASSROOM: "Create a server for your classroom", GUILD_TEMPLATE_MODAL_DESCRIPTION_CLASSROOM: "Give lectures, help with homework, and study together.", GUILD_TEMPLATES_FORM_LABEL_SERVER_NAME_CLASSROOM: "Name for your classroom", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_CLASSROOM: "{username}'s Classroom", GUILD_TEMPLATE_MODAL_TITLE_LOCAL_COMMUNITIES: "Create a server for your community", GUILD_TEMPLATE_MODAL_DESCRIPTION_LOCAL_COMMUNITIES: "Meet up, organize, and stay in touch.", GUILD_TEMPLATES_FORM_LABEL_SERVER_NAME_LOCAL_COMMUNITIES: "Name for your community", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_LOCAL_COMMUNITIES: "{username}'s Community", GUILD_TEMPLATE_MODAL_TITLE_CREATORS_HOBBIES: "Create a server for your group", GUILD_TEMPLATE_MODAL_DESCRIPTION_CREATORS_HOBBIES: "Collaborate, ideate, and show your stuff.", GUILD_TEMPLATES_FORM_LABEL_SERVER_NAME_CREATORS_HOBBIES: "Name for your group", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_CREATORS_HOBBIES: "{username}'s Group", GUILD_TEMPLATE_MODAL_TITLE_GLOBAL_COMMUNITIES: "Create a server for your community", GUILD_TEMPLATE_MODAL_DESCRIPTION_GLOBAL_COMMUNITIES: "Coordinate, share resources, and host events.", GUILD_TEMPLATES_FORM_LABEL_SERVER_NAME_GLOBAL_COMMUNITIES: "Name for your community", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_GLOBAL_COMMUNITIES: "{username}'s Community", GUILD_TEMPLATE_MODAL_TITLE_FRIENDS_FAMILY: "Create a server for your friends", GUILD_TEMPLATE_MODAL_DESCRIPTION_FRIENDS_FAMILY: "Make a home, have fun, and hang out.", GUILD_TEMPLATES_FORM_LABEL_SERVER_NAME_FRIENDS_FAMILY: "Name for your group", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_FRIENDS_FAMILY: "{username}'s Group", GUILD_TEMPLATE_MODAL_TITLE_STUDY_GROUPS: "Create a server for your study group", GUILD_TEMPLATE_MODAL_DESCRIPTION_STUDY_GROUPS: "Stream lessons, ask questions, and study together.", GUILD_TEMPLATES_FORM_LABEL_SERVER_NAME_STUDY_GROUPS: "Name for your study group", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_STUDY_GROUPS: "{username}'s Study Group", GUILD_TEMPLATE_MODAL_TITLE_CREATE_FROM_SCRATCH: "Create your server", GUILD_TEMPLATE_MODAL_DESCRIPTION_CREATE_FROM_SCRATCH: "Wave hello, share your screen, or just chat.", GUILD_TEMPLATES_FORM_LABEL_SERVER_NAME_CREATE_FROM_SCRATCH: "Name for your server", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_CREATE_FROM_SCRATCH: "{username}'s Server", GUILD_TEMPLATE_MODAL_TITLE_CAMPUS_CLUBS: "Create a server for your club", GUILD_TEMPLATE_MODAL_DESCRIPTION_CAMPUS_CLUBS: "Meet up, organize and stay in touch.", GUILD_TEMPLATE_DEFAULT_SERVER_NAME_CAMPUS_CLUBS: "{username}'s Club", GUILD_TEMPLATE_MODAL_TITLE_LEAGUE_CLUBS: "Create a server for your community", GUILD_TEMPLATE_MODAL_DESCRIPTION_LEAGUE_CLUBS: "Stay in touch on and off the Rift.", GUILD_TEMPLATE_MODAL_TITLE_GITHUB_HACKATHON: "Create a server for your hackathon", GUILD_TEMPLATE_MODAL_DESCRIPTION_GITHUB_HACKATHON: "Your hackathon – all together in one place.", CREATE_GUILD_WITH_TEMPLATES_TITLE: "Create a server", GUILD_CREATE_TITLE: "Create Your Server", GUILD_CREATE_UPLOAD_ICON_BUTTON_TEXT: "Upload a Server Icon", GUILD_SEARCH_HEADING: "Search {guildName}", PLATFORM_MACOS: "MacOS", PLATFORM_WINDOWS: "Windows", PLATFORM_LINUX: "Linux", PLATFORM_IOS: "Apple iOS", PLATFORM_ANDROID: "Android", DOWNLOAD_DESKTOP_TITLE: "Get Discord at Home", DOWNLOAD_MOBILE_TITLE: "Or on the go", DOWNLOAD_DESKTOP_FOOTER: "Want some of that fresh off-the-vine Discord? [Get the public test build](https://discord.com/download#ptb-card).", DOWNLOAD: "Download", DEB: "Deb", TAR_GZ: "Tar", WINDOWS: "Windows", MACOS: "macOS", LINUX: "Linux", WINDOWS_32_BIT_DEPRECATED_WARNING: "Your version of Windows is out of date. Update it to continue receiving Discord updates and technical support. [Learn more about system requirements]({helpCenterLink})", WINDOWS_7_8_DEPRECATED_WARNING: "Your version of Windows is out of date. Update it to continue receiving Discord updates and technical support. [Learn more about system requirements]({helpCenterLink})", MACOS_DEPRECATED_WARNING: "Your version of macOS is out of date. Update it to continue receiving Discord updates and technical support. [Learn more about system requirements]({helpCenterLink})", EMBEDDED_ACTIVITIES_ACTIVITY: "activity", EMBEDDED_ACTIVITIES_LEAVE_ACTIVITY: "Leave Activity", EMBEDDED_ACTIVITIES_LEAVE: "Leave", EMBEDDED_ACTIVITIES_JOIN_ACTIVITY: "Join Activity", EMBEDDED_ACTIVITIES_IN_ACTIVITY: "In Activity", EMBEDDED_ACTIVITIES_START_ACTIVITY_LABEL: "Start Activity", EMBEDDED_ACTIVITIES_START_AN_ACTIVITY: "Start An Activity", EMBEDDED_ACTIVITIES_INVITE_TO_ACTIVITY: "Invite To Activity", EMBEDDED_ACTIVITIES_INVITE_FRIENDS_TO_ACTIVITY_NAME: "Invite friends to {applicationName}", EMBEDDED_ACTIVITIES_SHARE_LINK_TO_ACTIVITY: "Share this link with others to grant access to this server and join the activity", EMBEDDED_ACTIVITIES_INVITE_CHANNEL_IN_SERVER: "**{channelName}** in **{serverName}**", EMBEDDED_ACTIVITIES_INVITE_ACTIVITY_FOOTER_LINK_HEADER: "Send an activity invite link to a friend", EMBEDDED_ACTIVITIES_INVITE_IN: "in", EMBEDDED_ACTIVITIES_INVITE_ACTIVITY_ENDED: "Activity has ended", EMBEDDED_ACTIVITIES_ALREADY_IN_ACTIVITY: "Already in Activity", EMBEDDED_ACTIVITIES_IS_PLAYING: "!!{username}!! is playing", EMBEDDED_ACTIVITIES_FEEDBACK_SURVEY: "Have feedback? [Take the survey]({surveyURL})", EMBEDDED_ACTIVITIES_USERNAME_AND_OTHERS: "!!{username}!! & {count, plural, =1 {# other} other {# others}}", EMBEDDED_ACTIVITIES_PLAYING_IN_GUILD: "Playing in !!{guildName}!!", EMBEDDED_ACTIVITIES_WATCHING_IN_GUILD: "Watching in !!{guildName}!!", EMBEDDED_ACTIVITIES_MAX_PARTICIPANTS: "Up to {count} participants", EMBEDDED_ACTIVITIES_ONE_TO_N_PARTICIPANTS: "1 - {count} participants", EMBEDDED_ACTIVITIES_ERROR_TITLE: "Error {code}", EMBEDDED_ACTIVITIES_NUM_PARTICIPANTS: "Participants - {numUsers}", EMBEDDED_ACTIVITIES_UNLIMITED_PARTICIPANTS: "Unlimited participants", EMBEDDED_ACTIVITIES_UNLIMITED_PARTICIPANTS_SHORT: "Unlimited", EMBEDDED_ACTIVITIES_LAUNCHING_ACTIVITY: "Launching activity", EMBEDDED_ACTIVITIES_UNKNOWN_ACTIVITY_NAME: "Unknown", EMBEDDED_ACTIVITIES_LAUNCH_DISABLED_START: "You cannot launch an activity here", EMBEDDED_ACTIVITIES_LAUNCH_FAILURE: "Failed to Launch Activity", EMBEDDED_ACTIVITIES_LAUNCH_FAIL_GENERIC: "Unable to launch activity", EMBEDDED_ACTIVITIES_LAUNCH_FAIL_ACCESS: "This server doesn't have access to the requested activity", EMBEDDED_ACTIVITIES_LAUNCH_FAIL_CONCURRENT: "This server has reached the limit of concurrent activities for the current boost level", EMBEDDED_ACTIVITIES_LAUNCH_FAIL_PREMIUM: "This server doesn't have a high enough boosting level for the requested activity", EMBEDDED_ACTIVITIES_LAUNCH_FAIL_AGE_GATE: "This Activity is age-restricted", EMBEDDED_ACTIVITY_CHANGE_CONFIRM_TITLE: "You sure?", EMBEDDED_ACTIVITY_CHANGE_ACTIVITY_CONFIRM_BODY: "Are you sure you want to disconnect from **!!{currentApplicationName}!!** in **!!{currentApplicationChannelName}!!**?", EMBEDDED_ACTIVITY_CURRENT_APPLICATION_DEFAULT: "an Activity", EMBEDDED_ACTIVITY_TARGET_APPLICATION_DEFAULT: "another Activity", EMBEDDED_ACTIVITY_CURRENT_APPLICATION_CHANNEL_DEFAULT: "its current channel", SPECTATE: "Spectate", EMBEDDED_ACTIVITIES_IN_VIDEO_CALL_MOBILE_PREVIEW_SUBTITLE_SHORT: "Coming soon to this OS", EMBEDDED_ACTIVITIES_MOBILE_ACTIVITY_PREVIEW_A11Y_LABEL: "A preview of {applicationName}", EMBEDDED_ACTIVITIES_CONCURRENT_ACTIVITIES_UPSELL_MODAL_TITLE: "Launch more activities at once by Boosting to Level {boostingTier}!", EMBEDDED_ACTIVITIES_CONCURRENT_ACTIVITIES_LIMITED_UPSELL_MODAL_BODY: "Take part in up to {targetTierConcurrentActivities} activities at once in one server by Boosting to Level {targetBoostTier}. Level {unlimitedConcurrentActivitiesBoostTier} unlocks unlimited concurrent activities!", EMBEDDED_ACTIVITIES_CONCURRENT_ACTIVITIES_UNLIMITED_UPSELL_MODAL_BODY: "Take part in unlimited activities at once in one server by Boosting to Level {unlimitedConcurrentActivitiesBoostTier}!", EMBEDDED_ACTIVITIES_FREE_PREVIEW_TOOLTIP: "{activity} is unlocked for a limited time!", EMBEDDED_ACTIVITIES_SHELF_TITLE: "Activities", EMBEDDED_ACTIVITIES_BOOSTING_BADGE_TOOLTIP: "Activities below require a LVL {tier} Boost", EMBEDDED_ACTIVITIES_MOBILE_ACTIVITIES_SOON_HEADER: "More activities coming soon to mobile", EMBEDDED_ACTIVITIES_MOBILE_ACTIVITIES_SOON_SUBHEADER: "All Activities are available on Desktop!", EMBEDDED_ACTIVITIES_ACTIVITIES_AVAILABLE_IN_TEXT: "Activities now available in text channels", EMBEDDED_ACTIVITIES_TUNE_IN_PROMO_BANNER_ALT: "TuneIn app now available!", USE_EMBEDDED_ACTIVITIES: "Use Activities", EMBEDDED_ACTIVITIES_INVALID_PERMISSIONS: "You do not have permissions to use Activities in this channel.", EMBEDDED_ACTIVITIES_INVALID_CHANNEL: "You cannot launch Activities in this channel.", EMBEDDED_ACTIVITIES_ARE_YOU_SURE_WANT_TO_LEAVE: "Are you sure you want to leave?", EMBEDDED_ACTIVITIES_CAREFUL: "Careful...", EMBEDDED_ACTIVITIES_POP_OUT_WARNING: "If you pop out an Activity, it will refresh and you might lose your place. You sure you want to pop out?", EMBEDDED_ACTIVITIES_POP_IN_WARNING: "If you close this window, it will refresh and you might lose your place. You sure you want to close it?", EMBEDDED_ACTIVITIES_YEP: "Yep!", EMBEDDED_ACTIVITIES_NVM: "Never mind", EMBEDDED_ACTIVITIES_UNLOCK_ACTIVITIES: "Unlock {activity} and other great Activities by Boosting to Level {tier} or higher", ACTIVITY_HARDWARE_ACCELERATION_BETTER_TITLE: "Hardware Acceleration will make this better", ACTIVITY_HARDWARE_ACCELERATION_BETTER_BODY: "!!{applicationName}!! will run a lot better if hardware acceleration is turned on. Be aware that switching this setting will quit and re-launch Discord.", ACTIVITY_HARDWARE_ACCELERATION_TURN_IT_ON: "Turn it on!", ACTIVITY_HARDWARE_ACCELERATION_NO_THANKS: "No thanks", EMBEDDED_ACTIVITIES_SELECT_VOICE_CHANNEL: "Select Voice Channel", EMBEDDED_ACTIVITIES_LAUNCH: "Launch", EMBEDDED_ACTIVITIES_JOIN: "Join", EMBEDDED_ACTIVITIES_JOINED: "Joined", EMBEDDED_ACTIVITIES_ENDED: "Ended", EMBEDDED_ACTIVITIES_RETURN_TO_ACTIVITY: "Return to Activity", EMBEDDED_ACTIVITIES_PEOPLE_ARE_IN_AN_ACTIVITY: "{n, plural, one {1 person is} other {{n} people are}} in an Activity", EMBEDDED_ACTIVITIES_SUPPORTED_PLATFORMS_MOBILE: "Mobile", EMBEDDED_ACTIVITIES_SEND_ACTIVITY_INVITE: "Send Activity invite to", EMBEDDED_ACTIVITIES_FALLBACK_CHANNEL_NAME: "this channel", EMBEDDED_ACTIVITIES_SHELF_CHARACTERS_ALT_TEXT: "characters playing a game", EMBEDDED_ACTIVITIES_UNLOCK_ACTIVITIES_BOOSTING: "Unlock {activityName} with Boosting and get:", EMBEDDED_ACTIVITIES_UNLOCK_ACTIVITIES_NITRO: "Unlock {activityName} with Nitro and get:", EMBEDDED_ACTIVITIES_SHELF_SUBTITLE: "Start a casual game or watch party instantly", EMBEDDED_ACTIVITIES_DEVELOPER_SHELF_SUBTITLE: 'You are using the "Developer Activity Shelf". So fancy!', EMBEDDED_ACTIVITIES_NITRO_SUBSCRIBE_CTA: "Subscribe to Nitro to access more activities!", EMBEDDED_ACTIVITIES_BOOST_SUBSCRIBE_CTA: "Boost this server to access more activities!", EMBEDDED_ACTIVITIES_NITRO_PERKS_BOOSTS: "2 Server Boosts for instant Level 1 perks", EMBEDDED_ACTIVITIES_NITRO_PERKS_BACKGROUNDS: "Custom video backgrounds", EMBEDDED_ACTIVITIES_NITRO_PERKS_STREAMING: "Source-quality Go Live streaming", EMBEDDED_ACTIVITIES_ALT_WUMPUS_ROCKET: "Wumpus riding a rocket", EMBEDDED_ACTIVITIES_ALT_TREASURE_CHEST: "A character opening a treasure chest", EMBEDDED_ACTIVITIES_END_ACTIVITY: "End {applicationName} for everyone?", EMBEDDED_ACTIVITIES_NITRO_END_WARNING: "As the only Nitro subscriber, the activity will end for everyone else if you leave.", EMBEDDED_ACTIVITIES_THANKS_FOR_TRYING: "Thanks for trying Activities!", EMBEDDED_ACTIVITIES_CURRENTLY_TESTING_NITRO_ACTIVITIES: "Hey, we had a great time and hope you did too. Activities are in the testing phase, but we hope to show you more soon.", EMBEDDED_ACTIVITIES_KEEP_THE_FUN_GOING_TITLE: "Keep the fun going", EMBEDDED_ACTIVITIES_KEEP_THE_FUN_GOING_SUBTITLE: "This activity has ended, but you can subscribe to Nitro to start your own activities and keep the fun going!", EMBEDDED_ACTIVITIES_NO_ELIGIBLE_HOST_MODAL: "No eligible host modal", EMBEDDED_ACTIVITIES_NO_ELIGIBLE_HOST_UPSELL_MODAL: "No eligible host upsell modal", EMBEDDED_ACTIVITIES_LAST_HOST_LEAVING_MODAL: "Last host leaving modal", EMBEDDED_ACTIVITIES_TRY_IT_OUT: "Try it out", EMBEDDED_ACTIVITIES_VOICE_CONTROLS_BUTTON_A11Y_LABEL: "Show Voice Controls", EMBEDDED_ACTIVITIES_OPEN_ACTIVITY_SHELF: "Open Activity Shelf", EMBEDDED_ACTIVITIES_LEAVE_ACTIVITY_A11Y_LABEL: "Leave Activity", EMBEDDED_ACTIVITIES_NOT_AVAILABLE_ON_OS: "This feature is not available on this OS at this time", EMBEDDED_ACTIVITIES_APPLICATION_UNSUPPORTED_OS: "This Activity is not currently available on this OS", EMBEDDED_ACTIVITIES_THIS_ACTIVITY: "this Activity", EMBEDDED_ACTIVITIES_SUBSCRIBE_CTA: "SUBSCRIBE AND PLAY MORE", EMBEDDED_ACTIVITIES_FREE_FOR_EVERYONE_BANNER_TEXT: "Activities are now free", EMBEDDED_ACTIVITIES_SUBSCRIBE: "Subscribe", EMBEDDED_ACTIVITIES_VOICE_CONTROLS_TOGGLE_NUX_HEADER: "Tap to view voice controls", EMBEDDED_ACTIVITIES_VOICE_CONTROLS_TOGGLE_NUX_BODY: "You can also drag this button around the screen and position it however you like", EMBEDDED_ACTIVITIES_UNLOCK_WITH_NITRO: "Unlock with Nitro", EMBEDDED_ACTIVITIES_SUBSCRIBE_TO_NITRO_AND_GET: "Subscribe to Nitro and get:", EMBEDDED_ACTIVITIES_DONT_ASK_ME_THIS_AGAIN: "Don't ask me this again", EMBEDDED_ACTIVITIES_ACTIVITY_ENDED: "This activity has ended", EMBEDDED_ACTIVITIES_ROCKET_BUTTON_A11Y_LABEL: "Start an Activity", EMBEDDED_ACTIVITIES_PREMIUM_UPSELL_BANNER_A11Y_LABEL: "Subscribe and play more", EMBEDDED_ACTIVITIES_ACTIVITIES_OPEN_TO_EVERYONE_BANNER_A11Y_LABEL: "Learn more about how Activities are now free", EMBEDDED_ACTIVITIES_NITRO_BANNER_HEADER: "More Ways to Hang", EMBEDDED_ACTIVITIES_NITRO_BANNER_IMG_ALT: "Two characters playing a board game", EMBEDDED_ACTIVITIES_PREMIUM_TIER_EXTRA_BOOSTS: "{nBoostsWithNitro} Server Boosts and {boostDiscount} off extra Boosts", EMBEDDED_ACTIVITIES_PREMIUM_TIER_UPLOAD_SIZE: "Upload file size increase to {premiumMaxSize}", EMBEDDED_ACTIVITIES_PREMIUM_TIER_CUSTOM_EMOJI: "Custom Emoji", EMBEDDED_ACTIVITIES_AVAILABLE_NOW: "Available Now!", EMBEDDED_ACTIVITY_NOTICE_BASH_OUT_DESCRIPTION: "Bash Out in partnership with PlayCo.", EMBEDDED_ACTIVITIES_VIDEO_DISABLED_FOR_THERMAL_STATE: "Pausing video for better performance", EMBEDDED_ACTIVITIES_SHOW_ACTIVITY_DEBUG_OVERLAY: "Show Activity Debug Overlay", EMBEDDED_ACTIVITIES_AUTO_SUGGEST_ACTIVITIES_TITLE: "Suggested Activities", EMBEDDED_ACTIVITIES_AUTO_SUGGEST_SEE_ALL: "See All", EMBEDDED_ACTIVITIES_MINI_SHELF_TITLE: "Activities Mini Shelf", EMBEDDED_ACTIVITIES_USE_ACTIVITY_URL_OVERRIDE: "Use Activity URL Override", EMBEDDED_ACTIVITIES_ACTIVITY_URL_OVERRIDE: "Activity URL Override", EMBEDDED_ACTIVITIES_INVALID_ACTIVITY_URL_OVERRIDE_ERROR: "Invalid Activity URL Override", EMBEDDED_ACTIVITIES_DEVELOPER_ACTIVITY_SHELF_FETCH_ERROR: "Error Fetching Developer Activity Shelf", EMBEDDED_ACTIVITIES_CONFIGURE_DEVELOPER_ACTIVITY_SHELF: "Configure Developer Activity Shelf", EMBEDDED_ACTIVITIES_SEARCH_SHELF_ITEMS: "Search Shelf Items", EMBEDDED_ACTIVITIES_DEVELOPER_ACTIVITY_SHELF_FILTER_ERROR: 'No activities found with the characters "{filter}"', EMBEDDED_ACTIVITIES_ACTIVITY_INFO_TILE_TITLE: "Get the fun started with Activities in voice!", EMBEDDED_ACTIVITIES_VC_TILE_ENTRY_POINT_INVITE: "You're the only one here. Invite a friend to start chatting.\nChoose an Activity to play, watch, or collaborate together.", EMBEDDED_ACTIVITIES_ACTIVITY_ENTRY_POINT_TILE_CHOOSE_AN_ACTIVITY: "Choose an Activity", EMBEDDED_ACTIVITIES_VC_TILE_ENTRY_POINT_TITLE: "Looking for something to do?\nStart a game or video playlist instantly.", EMBEDDED_ACTIVITIES_AGE_GATED_TITLE: "You’re about to use an age-restricted activity", EMBEDDED_ACTIVITIES_AGE_GATED_DESCRIPTION: "Heads up, {applicationName} is only for adult players. Please play responsibly.", EMBEDDED_ACTIVITIES_IOS_KEYBOARD_RESIZES_VIEW: "iOS Keyboard Resizes View", EMBEDDED_ACTIVITIES_RESUME_VIDEO: "Resume Video", EMBEDDED_ACTIVITIES_RESUME_VIDEO_EXPLANATION: "Your camera and incoming video streams have been paused for better device performance. If you resume video, you may experience lag or voice distortion.", EMBEDDED_ACTIVITIES_DISMISS_ACTIVITY_MESSAGE: "Dismiss message for joining {applicationName}", EMBEDDED_ACTIVITIES_DM_TOOLTIP_HEADER: "Activities are now available in DMs", EMBEDDED_ACTIVITIES_DM_TOOLTIP_BODY: "Join a voice call > press the rocketship > start a casual game or watch party with friends.", EMBEDDED_ACTIVITIES_DM_TOOLTIP_HEADER: "Activities in DMs", EMBEDDED_ACTIVITIES_DM_TOOLTIP_BODY: "Start a casual game or watch party with your closest friends!", EMBEDDED_ACTIVITIES_ACTIVITY_TAB_TITLE: "Discord's Birthday", EMBEDDED_ACTIVITIES_BIRTHDAY_ACTIVITIES: "Discord's 8th Birthday Party", EMBEDDED_ACTIVITIES_BIRTHDAY_ACTIVITIES_HERO_ALT: "Discord's 8th birthday. Activities are free for all thru June 15th", EMBEDDED_ACTIVITIES_MINI_SHELF_GAME_NIGHT_POSTER_ALT: "Wumpus and friends playing games on their phones. Game Night. April 7th", EMBEDDED_ACTIVITIES_GAME_NIGHT: "Game Night", EMBEDDED_ACTIVITIES_RESOLVING_ACTIVITY: "Resolving Activity", EMBEDDED_ACTIVITIES_EMBED_ENDED: "Activity has ended.", EMBEDDED_ACTIVITIES_EMBED_START: "Start a new one?", EMBEDDED_ACTIVITIES_EMBED_TITLE_INVITED_TO_JOIN: "You've been invited to join", EMBEDDED_ACTIVITIES_INVITE_TITLE_TEXT: "You've been invited to join", EMBEDDED_ACTIVITIES_INVITE_SUBTITLE_TEXT: "**!!{channelName}!!** in **!!{guildName}!!**", EMBEDDED_ACTIVITIES_INVITE_NO_PARTICIPANTS_TEXT_WITH_NEWLINE: "Activity has ended.\nStart a new one?", EMBEDDED_ACTIVITIES_LAUNCH_ACTIVITY_IN_VOICE_CHANNEL: "Launch {activityName} in a voice channel", EMBEDDED_ACTIVITIES_START_ACTIVITY: "Start {activityName}", EMBEDDED_ACTIVITIES_GUILD_LABEL: "Server", EMBEDDED_ACTIVITIES_CHANNEL_LABEL: "Channel", EMBEDDED_ACTIVITIES_SELECT_GUILD: "Select Server", EMBEDDED_ACTIVITIES_SELECT_CHANNEL: "Select Channel", EMBEDDED_ACTIVITIES_N_USERS_PLAYED: "Over {nUsers} people have played this activity", EMBEDDED_ACTIVITIES_GAMEPLAY_ALT: "Screen capture of gameplay from {activityName}", EMBEDDED_ACTIVITIES_WHATS_NEW_DESCRIPTION: "Check back here weekly for surprises throughout the month!", EMBEDDED_ACTIVITIES_EXPLORE_ACTIVITIES: "Explore Activities", EMBEDDED_ACTIVITIES_EXPLORE_ACTIVITIES_SUBHEADER: "Click an activity to learn more and share with your friends!", EMBEDDED_ACTIVITIES_SEE_MORE_ACTIVITIES: "See more activities", EMBEDDED_ACTIVITIES_SEE_FEWER_ACTIVITIES: "See fewer activities", EMBEDDED_ACTIVITIES_HOW_YOU_CAN_CELEBRATE_WITH_US: "Fun ways to celebrate with us", EMBEDDED_ACTIVITIES_EXCLUSIVE_BIRTHDAY_MERCH: "DISXCORE Merch Launch", EMBEDDED_ACTIVITIES_VISIT_OUR_MERCH_STORE: "Head over to [discordmerch.com]({merchStoreLink}) to shop while stock lasts!", EMBEDDED_ACTIVITIES_MERCH_STORE_ALT: "Discord-themed merch including a black collared shirt, a white long-sleeve shirt, a backpack, and a Wumpus Pin", EMBEDDED_ACTIVITIES_SHARE_THE_GIFT_OF_NITRO: "Share Nitro with friends", EMBEDDED_ACTIVITIES_SHARE_THREE_TRIALS: "All Nitro members can share 2 weeks of free Nitro with 3 friends. [Here's how]({nitroLink}).", EMBEDDED_ACTIVITIES_SHARE_NITRO_TRIAL_ALT: "Discord Nitro 2-week trial", EMBEDDED_ACTIVITIES_WEEKLY_DROPS_TILE_TITLE: "Weekly Announcements", EMBEDDED_ACTIVITIES_WEEKLY_DROPS_TILE_DESCRIPTION: "Keep the party going! Come back each week to flip a new card and discover more ways to celebrate.", EMBEDDED_ACTIVITIES_WEEKLY_DROPS_TILE_IMG_ALT: "Wumpus surrounded by confetti", EMBEDDED_ACTIVITIES_WHATS_NEW_GDM_TILE_TITLE: "Activities are now in DMs", EMBEDDED_ACTIVITIES_WHATS_NEW_GDM_TILE_DESCRIPTION: "Activities have entered the chat. Now you can launch Activities in Voice in DMs and group DMs.", EMBEDDED_ACTIVITIES_WHATS_NEW_GDM_TILE_IMG_ALT: "A neon sci-fi image with a rocket on it", EMBEDDED_ACTIVITIES_WHATS_NEW_PUTT_PARTY_TILE_TITLE: "Putt Party Paradise", EMBEDDED_ACTIVITIES_WHATS_NEW_PUTT_PARTY_TILE_DESCRIPTION: "Try our updated mini-golf game featuring more levels, extra power-ups and a new tournament mode!", EMBEDDED_ACTIVITIES_WHATS_NEW_PUTT_PARTY_TILE_IMG_ALT: "Putt Party Paradise Update", EMBEDDED_ACTIVITIES_WHATS_NEW_JAMSPACE_TILE_TITLE: "Introducing Jamspace", EMBEDDED_ACTIVITIES_WHATS_NEW_JAMSPACE_TILE_DESCRIPTION: "Create together with friends in this shared canvas. It's not what you make, but the fun of making it!", EMBEDDED_ACTIVITIES_WHATS_NEW_JAMSPACE_TILE_IMG_ALT: "Discord jamspace", EMBEDDED_ACTIVITIES_WHATS_NEW_POKER_TILE_TITLE: "Poker Night Update", EMBEDDED_ACTIVITIES_WHATS_NEW_POKER_TILE_DESCRIPTION: "Enjoy new stickers, emotes, cardbacks and more. Head to the Poker Night store to claim some for free!", EMBEDDED_ACTIVITIES_WHATS_NEW_POKER_TILE_IMG_ALT: "Poker Night", EMBEDDED_ACTIVITIES_SHARE_EMPTY_LOGS_ERROR_MESSAGE: "Unable to share empty logs", EMBEDDED_ACTIVITIES_BIRTHDAY_HERO_TEXT_WITH_2_LINKS: "To celebrate [Discord's birthday]({linkToBdayBlogPost}), everyone is invited to try out Activities. Look out for weekly surprises and Nitro members can join the fun with $[special Nitro perks](linkToSurprises) all month long!", EMBEDDED_ACTIVITIES_NUMBER_OF_PLAYERS: "{nPlayers} players", EMBEDDED_ACTIVITIES_NUMBER_OF_MINUTES: "{nMinutes}+ min", EMBEDDED_ACTIVITIES_START_OR_SHARE: "Start an Activity or share it with your friends!", EMBEDDED_ACTIVITIES_CELEBRATE_TOWN_HALL_TITLE: "Party with us!", EMBEDDED_ACTIVITIES_CELEBRATE_TOWN_HALL_DESCRIPTION: "Join us in [Discord Town Hall](clickHandler) for fun birthday events all month long.", EMBEDDED_ACTIVITIES_CELEBRATE_TOWN_HALL_IMG_ALT: "Town Hall server banner", EMBEDDED_ACTIVITIES_SHARE_ACTIVITY_WITH: "Share {activityName} with", EMBEDDED_ACTIVITIES_BALLOONS: "Balloons", EMBEDDED_ACTIVITIES_BALLOON: "Balloon", EMBEDDED_ACTIVITIES_DISCORD_CHARACTER_AVATAR: "Discord character avatar", EMBEDDED_ACTIVITIES_DM_START_CONFIRMATION_TEXT: "This action will start a call with your friends in this DM.", EMBEDDED_ACTIVITIES_BALLOON_ARIA_DESCRIPTION: "Click to pop", EMBEDDED_ACTIVITIES_REVEAL_THIS_WEEKS_DROP: "Reveal the {revealDate} drop", EMBEDDED_ACTIVITIES_CLICK_TO_REVEAL_DATE: "Drops on {revealDate}", EMBEDDED_ACTIVITIES_PLAYING_CARD_ALT: "Playing card", EMBEDDED_ACTIVITIES_BIRTHDAY_TAB_KIT_BASH_1: "Discord Logo inside a weird sci-fi circle with a 23 in it", EMBEDDED_ACTIVITIES_BIRTHDAY_TAB_KIT_BASH_2: "Wireframe globe", EMBEDDED_ACTIVITIES_BIRTHDAY_TAB_KIT_BASH_3: "Wireframe Wumpus", EMBEDDED_ACTIVITIES_NITRO_ICON_ALT: "Nitro Icon", EMBEDDED_ACTIVITIES_OPEN_BIRTHDAY_SURPRISE: "Open Birthday Surprise", EMBEDDED_ACTIVITIES_JOIN_ACTIVITY_NAME: "Join {name}", EMBEDDED_ACTIVITIES_SHARE_MOMENT_HEADING: "Share with your friends", EMBEDDED_ACTIVITIES_SHARE_LIMIT_WARNING: "You can only share up to {maxShares} times", EMBEDDED_ACTIVITIES_SHARE_MOMENT_FROM_APP: "Shared from {applicationName}", EMBEDDED_ACTIVITIES_WUMPUS_PEEKING_ALT: "Wumpus peeking over a button", EMBEDDED_ACTIVITIES_FEELING_LUCKY_TITLE: "Feeling lucky?", EMBEDDED_ACTIVITIES_FEELING_LUCKY_DESCRIPTION: "Learn more about a random activity!", EMBEDDED_ACTIVITIES_BIRTHDAY_KIT_BASH_ALT: "Neon disxcore themed art", EMBEDDED_ACTIVITIES_HAPPENING_NOW_TITLE: "Happening Now", EMBEDDED_ACTIVITIES_HAPPENING_NOW_DESCRIPTION: "Looking for an activity? Jump in!", EMBEDDED_ACTIVITIES_HAVE_PLAYED_ONE_KNOWN: "**!!{username1}!!** has played", EMBEDDED_ACTIVITIES_HAVE_PLAYED_ONE_KNOWN_AND_MORE: "**!!{username1}!!** and {extras, plural, =1 {{extras, number} other} other {{extras, number} others}} have played", EMBEDDED_ACTIVITIES_BE_THE_FIRST_OF_YOUR_FRIENDS_TO_PLAY: "Be the first of your friends to play!", EMBEDDED_ACTIVITIES_FREE_FOREVER_TITLE: "ACTIVITIES! ARE STAYING! FREE!!!!", EMBEDDED_ACTIVITIES_FREE_FOREVER_DESCRIPTION: "Best birthday ever! We've had way too much fun to let this party end. So from now on, Activities are available to everyone on Discord. EVERYONE!!!", EMBEDDED_ACTIVITIES_STAYING_FREE_POSTER_ALT: "Activities are staying free for all", EMBEDDED_ACTIVITIES_IAP_NON_REFUNDABLE: "Hey! **This purchase is non-refundable.** This purchase is being offered to you by the developer of this Activity and can be accessed and used only when you’re in this Activity.", EMBEDDED_ACTIVITIES_IAP_NON_REFUNDABLE_SUBSCRIPTION_MONTHLY: "Hey! This purchase is for a recurring subscription, which which means that we'll charge you today and continue to charge you monthly until you cancel. You may cancel anytime under User Settings > Subscriptions, and previous charges won’t be refunded unless required by law. This purchase is being offered to you by the developer of this Activity and can be accessed and used only when you’re in this Activity.", EMBEDDED_ACTIVITIES_IAP_NON_REFUNDABLE_SUBSCRIPTION_MULTI_MONTH: "Hey! This purchase is for a recurring subscription, which which means that we'll charge you today and continue to charge you every {intervalCount} months until you cancel. You may cancel anytime under User Settings > Subscriptions, and previous charges won’t be refunded unless required by law. This purchase is being offered to you by the developer of this Activity and can be accessed and used only when you’re in this Activity.", EMBEDDED_ACTIVITIES_IAP_NON_REFUNDABLE_SUBSCRIPTION_YEARLY: "Hey! This purchase is for a recurring subscription, which which means that we'll charge you today and continue to charge you monthly until you cancel. You may cancel anytime under User Settings > Subscriptions, and previous charges won’t be refunded unless required by law. This purchase is being offered to you by the developer of this Activity and can be accessed and used only when you’re in this Activity.", EMBEDDED_ACTIVITIES_IAP_NON_REFUNDABLE_SUBSCRIPTION_RATE_AND_RENEWAL: "Hey! This purchase is for a recurring subscription, which will renew for **{rate}** on **{renewalDate, date, medium}**. You may cancel anytime under User Settings > Subscriptions, and previous charges won’t be refunded unless required by law. This purchase is being offered to you by the developer of this Activity and can be accessed and used only when you’re in this Activity.", EMBEDDED_ACTIVITIES_MINIMIZE_A11Y_LABEL: "Minimize activity", EMBEDDED_ACTIVITIES_EXPAND_A11Y_LABEL: "Expand activity", EMBEDDED_ACTIVITIES_DEVELOPER_ACTIVITY: "In Development", EMBEDDED_ACTIVITIES_LAUNCH_FAIL_GUILD_SIZE: "You cannot launch this activity in a server with more than 25 members", EMBEDDED_ACTIVITIES_EXTERNAL_APP_LAUNCH_TITLE: "External Application", EMBEDDED_ACTIVITIES_EXTERNAL_APP_LAUNCH_DESCRIPTION: "You're about to launch an external app. Do you want to continue?", EMBEDDED_ACTIVITIES_MINI_SHELF_DEATH_BY_AI_POSTER: "Death By AI", EMBEDDED_ACTIVITIES_MINI_SHELF_TUNE_IN_POSTER_ALT: "TuneIn", EMBEDDED_ACTIVITIES_INSTANCE_EMBED_ENDED: "Activity ended. Start a new one?", EMBEDDED_ACTIVITIES_INSTANCE_EMBED_NO_PRESENCE: "Activity started", EMBEDDED_ACTIVITIES_INSTANCE_EMBED_NO_VOICE_PERMISSION: "You do not have permissions to join this Voice Channel.", EMBEDDED_ACTIVITIES_INSTANCE_EMBED_INVALID_CHANNEL: "You cannot join Activities in this channel.", EMBEDDED_ACTIVITIES_EXTERNAL_APP_CONFIRM_ANNOUNCEMENT_BIRD_A11Y_LABEL: "A bird with a megaphone for a head", EMBEDDED_ACTIVITIES_EXTERNAL_APP_CONFIRM_HEADS_UP: "Heads Up!", EMBEDDED_ACTIVITIES_EXTERNAL_APP_CONFIRM_TITLE: "You're about to test {activityName} for the first time.", EMBEDDED_ACTIVITIES_EXTERNAL_APP_CONFIRM_SUBTITLE: "This app is not made by Discord. Only test apps from developers you trust.", EMBEDDED_ACTIVITIES_EXTERNAL_APP_LEARN_MORE: "Learn more about private apps.", EMBEDDED_ACTIVITIES_DISALLOWED_NAVIGATION_ALERT_BODY: "The activity was closed because it tried to open a disallowed web page.", APPLICATION_ICON_A11Y_LABEL: "App icon for {applicationName}", APPLICATION_ICON_NO_NAME_A11Y_LABEL: "App icon", APPLICATION_COMMAND_PRIMARY_ENTRY_POINT_USED_CANNOT_LAUNCH: "$[](userHook) started an activity", APPLICATION_COMMAND_PRIMARY_ENTRY_POINT_USED: "$[](userHook) started an **$[activity](activityHook)**", APPLICATION_COMMAND_PRIMARY_ENTRY_POINT_USED_MOBILE_CANNOT_LAUNCH: "[!!{username}!!](usernameOnClick) started an activity", APPLICATION_COMMAND_PRIMARY_ENTRY_POINT_USED_MOBILE: "[!!{username}!!](usernameOnClick) started an [activity](activityTextOnClick)", APPLICATION_COMMAND_PRIMARY_ENTRY_POINT_USED_NOTIFICATION: "{username} started an activity", ACTIVITY_REPORT_POST_ACTIVITY_HEADER: "How'd !!{applicationName}!! go?", ACTIVITY_REPORT_POST_ACTIVITY_PROBLEM_TITLE: "What could have gone better?", ACTIVITY_REPORTED_POSITIVE: "Thanks for sharing! Feedback like yours helps us improve Activities.", ACTIVITY_REPORTED_BODY: "Thanks for reporting your issue! Feedback like yours helps us improve Activities.", ACTIVITY_REPORT_ACTIVITY_BODY: "Tell us about your activity experience", ACTIVITY_REPORT_ACTIVITY_END_FAILED_LOAD: "Activity didn't load properly", ACTIVITY_REPORT_ACTIVITY_FAILED_LOAD: "Activity not loading properly", ACTIVITY_REPORT_ACTIVITY_END_LAGGING: "Activity was lagging or freezing", ACTIVITY_REPORT_ACTIVITY_LAGGING: "Activity is lagging or freezing", ACTIVITY_REPORT_ACTIVITY_END_CONFUSING: "Activity controls were confusing", ACTIVITY_REPORT_ACTIVITY_CONFUSING: "Activity controls are confusing", ACTIVITY_REPORT_ACTIVITY_END_NOT_FUN: "Activity was not fun", ACTIVITY_REPORT_ACTIVITY_NOT_FUN: "Activity is not fun", ACTIVITY_REPORT_ACTIVITY_END_INCLUDED_ADS: "Activity included ads", ACTIVITY_REPORT_ACTIVITY_INCLUDES_ADS: "Activity includes ads", OTHER: "Other", POMELO_ADD_FRIEND_ERROR: "Hm, didn’t work. Double check that the username is correct.", POMELO_ADD_FRIEND_DESCRIPTION: "You can add friends with their Discord username.", POMELO_ADD_FRIEND_PLACEHOLDER: "Enter a username", POMELO_ACTION_NEEDED: "**Action needed**: Update your username.", POMELO_ACTION_NEEDED_FORCE: "**Action needed**: Update your username. Starting {date}, Discord will assign unique usernames to users who have not updated their usernames.", POMELO_ACTION_LABEL: "Update Your Username", POMELO_UPDATE_DISABLED_MESSAGE: "You need to verify your email or add a phone number to change your username.", POMELO_EXISTING_FLOW_PROMPT_TITLE: "Update your username, {n}", POMELO_EXISTING_FLOW_PROMPT_BODY_1: "We are asking everyone to update to unique usernames from discriminators (username**#0000**). You can update yours now.", POMELO_EXISTING_FLOW_PROMPT_BODY_2: "[Why are usernames changing?]({helpdeskArticle})", POMELO_EXISTING_FLOW_PROMPT_BODY_3: "You can always change this again in User Settings.", POMELO_EXISTING_FLOW_PROMPT_ITEM_1: "**Unique usernames** are easier to remember and share with friends.", POMELO_EXISTING_FLOW_PROMPT_ITEM_2: "You can also choose a **display name** to control how you appear across Discord.", UNIQUE_USERNAME_EXISTING_FLOW_PROMPT_ITEM_3: "{username} will be memorialized as a badge on your profile. You can hide this at any time.", POMELO_EXISTING_FLOW_PROMPT_SKIP_CTA: "I’ll do this later", POMELO_EXISTING_FLOW_STEP_1_TITLE: "What should we call you?", POMELO_EXISTING_FLOW_STEP_1_SUBTITLE: "This is how others see you. You can use special characters, spaces, emoji, whatever.", POMELO_EXISTING_FLOW_STEP_1_ERROR_INVALID: "You can use emoji and any symbol or character except @ or #.", POMELO_EXISTING_FLOW_STEP_2_TITLE: "What’s your username?", POMELO_EXISTING_FLOW_STEP_2_SUBTITLE: "This will help friends add you. Keep it simple with numbers, letters, periods and underscores.", POMELO_EXISTING_FLOW_AVAILABLE: "Username is available. Nice!", POMELO_EXISTING_FLOW_ERROR_INVALID: "Please only use numbers, letters, underscores _ , or periods.", POMELO_EXISTING_FLOW_ERROR_VERIFY: "Please verify your email and try again.", POMELO_EXISTING_FLOW_ERROR_GENERIC: "An error has occurred.", POMELO_EXISTING_FLOW_ERROR_GENERIC_HELP: "If this happens repeatedly, [contact support](onClick).", POMELO_EXISTING_FLOW_ERROR_UNAVAILABLE: "Username is unavailable. Try adding numbers, letters, underscores _ , or periods.", POMELO_EXISTING_FLOW_ERROR_LIMIT: "This must be {minNum}-{maxNum} characters.", POMELO_EXISTING_FLOW_COMPLETION_TITLE: "You’re all set, {displayName}.", POMELO_EXISTING_FLOW_COMPLETION_SUBTITLE: "This is your profile. Looks fabulous.", POMELO_EXISTING_FLOW_REMINDER_TITLE: "Okay, we’ll remind you. Very soon.", POMELO_EXISTING_FLOW_REMINDER_BODY_1: "Claim the username you want today and make it easier for your friends to connect with you.", POMELO_EXISTING_FLOW_REMINDER_BODY_2: "You can always change it in [User Settings](onClick).", POMELO_EXISTING_FLOW_REMINDER_CTA: "I’ll update it now", POMELO_EXISTING_FLOW_FINAL_REMINDER_TITLE: "Update your username by {date}", POMELO_EXISTING_FLOW_FINAL_REMINDER_BODY_1: "You **must** update your username in order to use Discord after that date. Try not to procrastinate. <3", POMELO_REG_FLOW_TITLE: "Choose a name", POMELO_REG_FLOW_NAME_LABEL: "Display name", ACTION_NEEDED: "Action Needed", POMELO_VERIFY_EMAIL_BANNER: "You must verify your email in {days} days to keep your username.", POMELO_VERIFY_EMAIL_BANNER_ONE_DAY: "You must verify your email in 1 day to keep your username.", POMELO_EXISTING_FLOW_USER_SETTINGS: "You can always change this again in [User Settings](onClick).", POMELO_EXISTING_FLOW_ERROR_DOT_DOT: "Username cannot contain repeating dots.", POMELO_SUGGESTION_ORIGIN_NOTICE: "Suggested from your old username, {source}.", POMELO_FETCH_NEW_SUGGESTION: "[Show me another suggestion](onFetchSuggestion)", UNIQUE_USERNAME_TOGGLE_TITLE: "Legacy Username Badge", UNIQUE_USERNAME_TOGGLE_SUBTITLE: "Display {username} on your profile.", ORIGINALLY_KNOWN_AS: "Originally known as {legacyUsername}", POMELO_ACTION_LABEL_OCF: "Update your username", POMELO_EXISTING_FLOW_PROMPT_OCF: "We are asking everyone to update to unique usernames from discriminators (username**#0000**).", POMELO_SUGGESTIONS_OCF: "Recommended for you", POMELO_CHANGE_LATER_OCF: "You can always change this later.", POMELO_FETCH_OCF: "Checking if username is available", UU_REGISTER_DISPLAY_NAME_HEADER: "What's your name?", UU_REGISTER_DISPLAY_NAME_HINT: "You can use emoji and special characters.", UU_REGISTER_HEADER: "Next, create an account", UU_REGISTER_USERNAME_HINT: "Only use letters, numbers, underscores, and periods.", UU_REGISTER_PASSWORD_HINT: "Password must be 8 or more characters.", UU_REGISTER_AGE_GATE_HEADER: "And, how old are you?", UU_REGISTER_DISPLAY_NAME_ERROR: "Sorry, that name can't be used.", UU_REGISTER_SUGGESTION: "Here is a suggestion: [!!{suggestion}!!](nameOnClick)", UU_REGISTER_DISPLAY_NAME_HINT_2: "This is how others see you. You can use special characters and emoji.", UU_REGISTER_UNCLAIMED_HINT: "Your username is **!!{name}!!**, finish signing up so you can choose your own.", UU_FORCE_MIGRATION_EXISTING_FLOW_REMINDER_BODY_1: "Update your username by {date}", UU_FORCE_MIGRATION_EXISTING_FLOW_REMINDER_BODY_2: "Starting {date}, Discord will begin assigning unique usernames to users who have not updated their usernames.", ACTIVITIES_SHARE_LOGS: "Share Activity Logs", DEVELOPER_APPLICATION_TEST_MODE_ORIGIN_LABEL: "Select URL Origin Type (Embedded Apps Only)", DEVELOPER_APPLICATION_TEST_MODE_PORT_NUMBER_LABEL: "Localhost Port Number", DEVELOPER_APPLICATION_TEST_MODE_LOCALHOST_OPTION: "Localhost", DEVELOPER_APPLICATION_TEST_MODE_PROXY_OPTION: "Discord Proxy", DEVELOPER_APPLICATION_TEST_MODE_FULL_URL_OPTION: "Full URL", DEVELOPER_APPLICATION_TEST_MODE_FAILED_TO_AUTHORIZE_APP: "Failed to authorize app", DEVELOPER_APPLICATION_TEST_MODE_INVALID_URL: "Invalid URL", EMBEDDED_ACTIVITIES_MOBILE_NUX_HEADING: "NEW! Activities on Mobile", EMBEDDED_ACTIVITIES_MOBILE_NUX_BODY: "You now have access to Activities on mobile in Voice Channels!", EMBEDDED_ACTIVITIES_GAME_NIGHT_HEADING: "Activities are free today!", EMBEDDED_ACTIVITIES_GAME_NIGHT_BODY: "Play any Activity for free in Voice Channels until April 8th at 4AM PT.", EMBEDDED_ACTIVITY_NOTICE_TITLE: "NEW! Activities", EMBEDDED_ACTIVITY_NOTICE_NITRO_TITLE: "NEW! Activities in Nitro", EMBEDDED_ACTIVITY_NOTICE_HALLOWEEN_TITLE: "NEW! Haunted Sketch Heads", EMBEDDED_ACTIVITY_NOTICE_WTP_DESCRIPTION: "Play together for free in any Voice Channel. Unlock more Activities with Boosting!", EMBEDDED_ACTIVITY_NOTICE_NITRO_DESCRIPTION: "You now have access to Activities in Voice Channels!", EMBEDDED_ACTIVITY_NOTICE_LEARN_MORE_LINK_A11Y_LABEL: "Learn more about activities on Discord", EMBEDDED_ACTIVITY_NOTICE_HALLOWEEN_DESCRIPTION: "Try it for ghoulishly limited time.\nGot Nitro? Summon SpellCast.", NOTICE_EMBEDDED_APPLICATION_TEST_MODE: "Test mode is currently active for **!!{applicationName}!!**. Your application should appear as an option in the activities button menu.", EMBEDDED_ACTIVITES_THERMAL_ALERT_HEADER: "Warning", VOICE_CHANNEL_EFFECTS_NOTICE_BETA_TAG: "(Desktop Beta)", VOICE_CHANNEL_EFFECTS_NOTICE_TITLE_2: "NEW! Voice channel reactions", VOICE_CHANNEL_EFFECTS_NOTICE_DESCRIPTION_2: "Whether you're watching a stream or just hanging with friends, express yourself without saying a word.", VOICE_CHANNEL_EFFECTS_SPARKLE_TOOLTIP: "React with emoji!", VOICE_CHANNEL_EFFECTS_TOGGLE_TOOLTIP_ENABLED: "Fun animations enabled", VOICE_CHANNEL_EFFECTS_TOGGLE_TOOLTIP_DISABLED: "Enable fun animations", VOICE_CHANNEL_EFFECTS_TOGGLE_TADA_ALT: "Party popper", VOICE_CHANNEL_EFFECTS_TOGGLE: "Nitro", VOICE_CHANNEL_EFFECTS_TOGGLE_UPSELL: "Enable more fun reactions with Nitro", VOICE_CHANNEL_EFFECTS_HOTBAR_TITLE: "Voice Channel Reactions Hotbar", VOICE_CHANNEL_EFFECTS_UPSELL_HEADER_2: "Get more reaction power with Nitro", VOICE_CHANNEL_EFFECTS_UPSELL_BODY_2: "React with custom emoji from any server and unlock exclusive animations [with Discord Nitro](onPressMore).", VOICE_CHANNEL_EFFECTS_UPSELL_CTA: "Subscribe", A11Y_ANNOUNCEMENT_VOICE_CHANNEL_EFFECTS_SINGLE: "{firstUsername} reacted {emojiNames}.", A11Y_ANNOUNCEMENT_VOICE_CHANNEL_EFFECTS_DOUBLE: "{firstUsername} and {secondUsername} reacted {emojiNames}.", A11Y_ANNOUNCEMENT_VOICE_CHANNEL_EFFECTS_MULTIPLE: "{firstUsername}, {secondUsername} and {count, plural, =1 {# other} other {# others}} reacted {emojiNames}.", ACTIVITIES_EXPERIMENT_SUNSET_HEADER: "Hang tight, Activities fans", ACTIVITIES_EXPERIMENT_SUNSET_BODY: "In the next few weeks, Activities will become unavailable as we make some improvements. Thanks for your patience!", ACTIVITIES_EXPERIMENT_SUNSET_ANCHOR: "Learn more here", ACTIVITIES_EARLY_USER_COACH_MARK_HEADER: "New Activities button!", ACTIVITIES_EARLY_USER_COACH_MARK_BODY: "We added this button for easier access. Activities will be available for testing for the next 3 months. Thanks for helping us, your server is awesome.", CHANNEL_LOCKED: "Your role does not have permission to access this channel.", CHANNEL_LOCKED_SHORT: "Channel Locked", CHANNELS_UNAVAILABLE_TITLE: "No Text Channels", CHANNELS_UNAVAILABLE_BODY: "You find yourself in a strange place. You don't have access to any text channels, or there are none in this server.", GUILD_UNAVAILABLE_HEADER: "Unavailable", GUILD_UNAVAILABLE_TITLE: "Looks like we’re having trouble connecting…", GUILD_UNAVAILABLE_BODY: "But no worries! Check back later to see if things smooth out.", UNABLE_TO_JOIN_CHANNEL_FULL: "This channel is full.", UNABLE_TO_JOIN_CHANNEL_FULL_MODAL_HEADER: "Channel is full", UNABLE_TO_JOIN_CHANNEL_FULL_MODAL_BODY: "Sorry, this channel has the max number of people!", INSTANT_INVITE: "Invite", INSTANT_INVITE_HIDDEN: "Hidden; Use copy button", EDIT_CHANNEL: "Edit Channel", LEAVE_SERVER_TITLE: "Leave '!!{name}!!'", LEAVE_SERVER_BODY: "\nAre you sure you want to leave **!!{name}!!**? You won't be able to rejoin this server unless you are re-invited.\n ", LEAVE_SERVER: "Leave Server", VOICE_CHANNELS: "Voice Channels", VOICE_CHANNEL: "Voice Channel", VOICE_CHANNEL_LOCKED: "Voice Channel (Locked)", SERVER_SETTINGS: "Server Settings", SERVER_SETTINGS_UPDATED: "Server settings have been updated.", NOTIFICATION_SETTINGS: "Notification Settings", CHANNEL_ORDER_UPDATED: "Channel order updated.", GUILD_VERIFIED: "Verified", GUILD_PARTNERED: "Discord Partner", GUILD_VERIFIED_AND_PARTNERED: "Verified & Partnered", VOICE_CHANNEL_MUTED: "Muted", VOICE_CHANNEL_UNMUTED: "Unmuted", VOICE_CHANNEL_DEAFENED: "Deafened", VOICE_CHANNEL_UNDEAFENED: "Undeafened", VOICE_CHANNEL_LOCAL_MUTED: "Muted for me", VOICE_CHANNEL_MUTED_CUSTOM_JOIN_SOUND: "Join Without Entrance Sound", PREMIUM_GUILD_SUBSCRIPTION: "Boost", OPEN_CHAT: "Open Chat", INTERNAL_EMPLOYEE_ONLY: "Internal Employee (Staff)", FAVORITE_CHANNEL: "Add to Favorites", UNFAVORITE_CHANNEL: "Remove from Favorites", FAVORITE_DM: "Favorite DM", UNFAVORITE_DM: "Unfavorite DM", FAVORITE_GDM: "Favorite Group DM", UNFAVORITE_GDM: "Unfavorite Group DM", FAVORITES_EMPTY_TITLE: "Favorites", FAVORITES_EMPTY_BODY: 'Welcome to your "favorite" new Discord feature! Add favorites by starring channels, voice chats, and DMs via their context menus.', FAVORITES_GUILD_NAME: "Favorites", FAVORITES_GO_TO_ORIGINAL_GUILD: "Go to original server", FAVORITES_SET_NICKNAME_DESCRIPTION: "This name will only appear in your favorites.", FAVORITE_ADDED: "Added to Favorites!", FAVORITES_RENAME_CATEGORY: "Rename Category", FAVORITES_ADD_A_CHANNEL: "Add a channel", AFK_SETTINGS: "Inactive Settings", NO_AFK_CHANNEL: "No Inactive Channel", FORM_LABEL_AFK_CHANNEL: "Inactive Channel", FORM_HELP_AFK_CHANNEL: "Automatically move members to this channel and mute them when they have been idle for longer than the\ninactive timeout. This does not affect browsers.", FORM_LABEL_AFK_TIMEOUT: "Inactive Timeout", NO_SYSTEM_CHANNEL: "No System Messages", FORM_LABEL_SYSTEM_CHANNEL: "System Messages Channel", FORM_LABEL_SYSTEM_CHANNEL_SETTINGS: "System Messages Settings", FORM_HELP_SYSTEM_CHANNEL: "This is the channel we send system event messages to. These can be turned off at any time.", FORM_HELP_SYSTEM_CHANNEL_JOIN_MESSAGES: "Send a random welcome message when someone joins this server.", FORM_HELP_SYSTEM_CHANNEL_JOIN_MESSAGE_REPLIES: "Prompt members to reply to welcome messages with a sticker.", FORM_HELP_SYSTEM_CHANNEL_PREMIUM_SUBSCRIPTION_MESSAGES: "Send a message when someone boosts this server.", FORM_HELP_SYSTEM_CHANNEL_GUILD_REMINDERS: "Send helpful tips for server setup.", FORM_LABEL_VERIFICATION_LEVEL: "Verification Level", FORM_LABEL_VERIFICATION_LEVEL_CHANGE: "Change Verification Level", FORM_HELP_VERIFICATION_LEVEL: "\nMembers of the server must meet the following criteria before they can send messages in text channels or initiate a\ndirect message conversation. If a member has an assigned role and server onboarding is not enabled, this does not apply.\n**We recommend setting a verification level for a Community Server.**\n", VERIFICATION_LEVEL_NONE: "None", VERIFICATION_LEVEL_NONE_CRITERIA: "Unrestricted", VERIFICATION_LEVEL_LOW: "Low", VERIFICATION_LEVEL_LOW_CRITERIA: "Must have a verified email on their Discord account.", VERIFICATION_LEVEL_MEDIUM: "Medium", VERIFICATION_LEVEL_MEDIUM_CRITERIA: "Must also be registered on Discord for longer than {min} minutes.", VERIFICATION_LEVEL_HIGH: "High", VERIFICATION_LEVEL_HIGH_CRITERIA: "Must also be a member of this server for longer than {min} minutes.", VERIFICATION_LEVEL_VERY_HIGH: "Highest", VERIFICATION_LEVEL_VERY_HIGH_CRITERIA: "Must have a verified phone on their Discord account.", FORM_LABEL_DEFAULT_NOTIFICATION_SETTINGS: "Default Notification Settings", FORM_HELP_DEFAULT_NOTIFICATION_SETTINGS_MOBILE: "\nThis will determine whether members who have not explicitly set their notification settings receive a notification for\nevery message sent in this server or not. We highly recommend setting this to only @mentions for a Community Server.\n", DELETE_SERVER_TITLE: "Delete '!!{name}!!'", DELETE_SERVER_BODY: "Are you sure you want to delete **!!{name}!!**? This action cannot be undone.", DELETE_SERVER: "Delete Server", DELETE_SERVER_ENTER_NAME: "Enter server name", DELETE_SERVER_INCORRECT_NAME: "You didn't enter the server name correctly", WIDGET: "Widget", BANS: "Bans", SECURITY: "Security", VANITY_URL: "Custom Invite Link", GUILD_MEMBERS_HEADER: "!!{guild}!! members", SETTINGS: "Settings", GUILD_PREMIUM: "Server Boost Status", USER_MANAGEMENT: "User Management", FORM_LABEL_EXPLICIT_CONTENT_FILTER: "Explicit Media Content Filter", FORM_LABEL_EXPLICIT_CONTENT_FILTER_CHANGE: "Change Explicit Content Filter Level", FORM_HELP_EXPLICIT_CONTENT_FILTER: "Automatically scan and delete media sent in this server that contains explicit content. Please choose how broadly the filter will apply to members in your server. **We recommend setting a filter for a Community Server.**\n", EXPLICIT_CONTENT_FILTER_DISABLED: "Don't scan any media content.", EXPLICIT_CONTENT_FILTER_DISABLED_DESCRIPTION: "My friends are nice most of the time.", EXPLICIT_CONTENT_FILTER_MEDIUM: "Scan media content from members without a role.", EXPLICIT_CONTENT_FILTER_MEDIUM_DESCRIPTION: "Recommended option for servers that use roles for trusted membership.", EXPLICIT_CONTENT_FILTER_HIGH: "Scan media content from all members.", EXPLICIT_CONTENT_FILTER_HIGH_DESCRIPTION: "Recommended option for when you want that squeaky clean shine.", EXPLICIT_CONTENT_FILTER_DISABLED_SHORT: "Disabled", EXPLICIT_CONTENT_FILTER_DISABLED_DESCRIPTION_SHORT: "Don't scan any media content. (I trust everyone)", EXPLICIT_CONTENT_FILTER_MEDIUM_SHORT: "Medium", EXPLICIT_CONTENT_FILTER_MEDIUM_DESCRIPTION_SHORT: "Scan media content from members without a role. (I trust members with roles)", EXPLICIT_CONTENT_FILTER_HIGH_SHORT: "High", EXPLICIT_CONTENT_FILTER_HIGH_DESCRIPTION_SHORT: "Scan media content from all members. (Recommended for squeaky clean servers)", FORM_LABEL_EXPLICIT_CONTENT_FILTER_V2: "Explicit image filter", SETTINGS_EXPLICIT_CONTENT_FILTER: "Explicit Image Filter", FORM_HELP_EXPLICIT_CONTENT_FILTER_V2: "Automatically block messages in this server that may contain explicit images in channels not marked as Age-restricted. Please choose how this filter will apply to members in your server. We recommend enabling this. [Learn more about this setting here.]({helpdeskArticle})", EXPLICIT_CONTENT_FILTER_DISABLED_V2: "Do not filter", EXPLICIT_CONTENT_FILTER_DISABLED_DESCRIPTION_V2: "Messages will not be filtered for explicit images.", EXPLICIT_CONTENT_FILTER_MEDIUM_V2: "Filter messages from server members without roles", EXPLICIT_CONTENT_FILTER_MEDIUM_DESCRIPTION_V2: "Messages from server members without a role will be filtered for explicit images.", EXPLICIT_CONTENT_FILTER_HIGH_V2: "Filter messages from all members", EXPLICIT_CONTENT_FILTER_HIGH_DESCRIPTION_V2: "All messages will be filtered for explicit images.", PUBLIC_GUILD_POLICY_TITLE: "Follow the rules", PUBLIC_GUILD_POLICY_ACCEPT: "I agree and understand", TOOLTIP_DISCOVERABLE_GUILD_FEATURE_DISABLED: "This is required for discoverable servers. Disable Discovery first to do this.", NUMBERS_ONLY: "{count, number}", COMMUNITY_GUIDELINES_AND_TYPES_OF_SPACES_POLICIES: "By setting your server as a Community Server, you agree that your server complies with our [Community Server Guidelines]({communityGuidelines}). Learn more about [Community Servers]({typesOfGuilds}).", ENABLE_COMMUNITY_MODAL_TITLE: "Let's set up your Community Server.", ENABLE_COMMUNITY_MODAL_STEP_1_TITLE: "Safety checks", ENABLE_COMMUNITY_MODAL_STEP_2_TITLE: "Setting up the basics", ENABLE_COMMUNITY_MODAL_STEP_3_TITLE: "Finishing touches", ENABLE_COMMUNITY_MODAL_STEP_1_HEADER: "Keep your community safe", ENABLE_COMMUNITY_MODAL_STEP_1_BODY: "To ensure user safety, Community Servers must have the following moderation settings enabled", ENABLE_COMMUNITY_MODAL_STEP_2_HEADER: "Set up the basics", ENABLE_COMMUNITY_MODAL_STEP_2_BODY: "Tell us which channel has your server rules and which channel we should send announcements to!", ENABLE_COMMUNITY_MODAL_STEP_3_HEADER: "One last step", ENABLE_COMMUNITY_MODAL_STEP_3_BODY: "You're almost there! Here are some suggestions to help create a better experience for your members.", ENABLE_COMMUNITY_MODAL_VERIFICATION_LEVEL_LABEL: "Verified email required", ENABLE_COMMUNITY_MODAL_CONTENT_FILTER_LABEL: "Scan messages sent by all members", ENABLE_COMMUNITY_MODAL_VERIFICATION_LEVEL_MET: "Your server already meets or exceeds the verification level requirement.", ENABLE_COMMUNITY_MODAL_CONTENT_FILTER_MET: "Your server already meets the media content filter requirement.", ENABLE_COMMUNITY_MODAL_VERIFICATION_LEVEL_HELP: "To minimize spam, members of the server must have a verified email before they can send messages. This does not apply to members with roles.", ENABLE_COMMUNITY_MODAL_DEFAULT_NOTIFICATIONS_LABEL: "Default notifications to Mentions Only $[info](infoHook)", ENABLE_COMMUNITY_MODAL_DEFAULT_NOTIFICATIONS_LABEL_MOBILE: "Default notifications to Mentions Only", ENABLE_COMMUNITY_MODAL_DEFAULT_NOTIFICATIONS_TOOLTIP: "Because Community Servers tend to have a lot of people talking at once, defaulting Server Notifications for members to Mentions Only can help reduce members leaving. Members can always override this option.", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_LABEL: "Remove moderation permissions from \n @everyone $[info](infoHook)", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_LABEL_MOBILE: "Remove manage permissions from **@everyone** role", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_TOOLTIP: "This will remove the following permissions from the @everyone role: Administrator, Manage Server, Manage Channels, Manage Roles, Kick Members, Ban Members, Manage Messages, and Mention @everyone, @here, and All Roles.", ENABLE_COMMUNITY_MODAL_REQUIREMENT_SATISFIED_TOOLTIP: "Nice, you did this already!", ENABLE_COMMUNITY_MODAL_STEP_HEADER: "Step {number} of {total}", COMMUNITY_POLICY_HELP: "By setting your server as a Community Server, you agree that your server complies with our [Community Server Guidelines]({helpdeskArticle}). Remember, all activity on Discord must abide by our [Community Guidelines](https://discord.com/guidelines).", ENABLE_COMMUNITY_BUTTON_TEXT: "Finish Setup", TOOLTIP_COMMUNITY_FEATURE_DISABLED: "This option is not available for Community Servers.", GUILD_SETTINGS_LABEL_AUDIT_LOG: "Audit Log", GUILD_SETTINGS_AUDIT_LOG_LOAD_MORE: "Load More", GUILD_SETTINGS_LABEL_AUDIT_LOG_EMPTY_TITLE: "No Logs Yet", GUILD_SETTINGS_LABEL_AUDIT_LOG_EMPTY_BODY: "Once moderators begin moderating, you can moderate the moderation here.", GUILD_SETTINGS_LABEL_AUDIT_LOG_ERROR_TITLE: "This is Awkward", GUILD_SETTINGS_LABEL_AUDIT_LOG_ERROR_BODY: "We broke something. Come back later.", UNKNOWN_INTEGRATION: "Unknown Integration", GUILD_SETTINGS_AUDIT_LOG_GUILD_UPDATE: "$[**!!{user}!!**](userHook) made changes to $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_TEXT_CREATE: "$[**!!{user}!!**](userHook) created a text channel $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_CATEGORY_CREATE: "$[**!!{user}!!**](userHook) created a category $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_VOICE_CREATE: "$[**!!{user}!!**](userHook) created a voice channel $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_STAGE_CREATE: "$[**!!{user}!!**](userHook) created a stage channel $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_UPDATE: "$[**!!{user}!!**](userHook) made changes to $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_DELETE: "$[**!!{user}!!**](userHook) removed $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_OVERWRITE_CREATE: "$[**!!{user}!!**](userHook) created channel overrides for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_OVERWRITE_UPDATE: "$[**!!{user}!!**](userHook) updated channel overrides for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_OVERWRITE_DELETE: "$[**!!{user}!!**](userHook) removed channel overrides for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_KICK: "$[**!!{user}!!**](userHook) kicked $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_PRUNE: "$[**!!{user}!!**](userHook) pruned {count, plural, =1 {**a member**} other {**!!{count}!! members**}}", GUILD_SETTINGS_AUDIT_LOG_MEMBER_BAN_ADD: "$[**!!{user}!!**](userHook) banned $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_BAN_REMOVE: "$[**!!{user}!!**](userHook) removed the ban for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_UPDATE: "$[**!!{user}!!**](userHook) updated $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_ROLE_UPDATE: "$[**!!{user}!!**](userHook) updated roles for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_MOVE: "$[**!!{user}!!**](userHook) moved {count, plural, =1 {**a user**} other {**!!{count}!! users**}} to $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_DISCONNECT: "$[**!!{user}!!**](userHook) disconnected {count, plural, =1 {**a user**} other {**!!{count}!! users**}} from voice", GUILD_SETTINGS_AUDIT_LOG_BOT_ADD: "$[**!!{user}!!**](userHook) added $[**!!{target}!!**](targetHook) to the server", GUILD_SETTINGS_AUDIT_LOG_ROLE_CREATE: "$[**!!{user}!!**](userHook) created the role $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_ROLE_UPDATE: "$[**!!{user}!!**](userHook) updated the role $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_ROLE_DELETE: "$[**!!{user}!!**](userHook) deleted the role $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_INVITE_CREATE: "$[**!!{user}!!**](userHook) created an invite $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_INVITE_UPDATE: "$[**!!{user}!!**](userHook) updated an invite $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_INVITE_DELETE: "$[**!!{user}!!**](userHook) deleted an invite $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_CREATE: "$[**!!{user}!!**](userHook) created the webhook $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_UPDATE: "$[**!!{user}!!**](userHook) updated the webhook $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_DELETE: "$[**!!{user}!!**](userHook) deleted the webhook $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_EMOJI_CREATE: "$[**!!{user}!!**](userHook) created the emoji $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_EMOJI_UPDATE: "$[**!!{user}!!**](userHook) updated the emoji $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_EMOJI_DELETE: "$[**!!{user}!!**](userHook) deleted the emoji $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_STICKER_CREATE: "$[**!!{user}!!**](userHook) created the sticker $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_STICKER_UPDATE: "$[**!!{user}!!**](userHook) updated the sticker $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_STICKER_DELETE: "$[**!!{user}!!**](userHook) deleted the sticker $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MESSAGE_DELETE: "$[**!!{user}!!**](userHook) deleted {count, plural, =1 {**a message**} other {**!!{count}!! messages**}} by $[**!!{target}!!**](targetHook) in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_MESSAGE_BULK_DELETE: "$[**!!{user}!!**](userHook) deleted {count, plural, =1 {**a message**} other {**!!{count}!! messages**}} in $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_MESSAGE_PIN: "$[**!!{user}!!**](userHook) pinned a message by $[**!!{target}!!**](targetHook) in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_MESSAGE_UNPIN: "$[**!!{user}!!**](userHook) unpinned a message by $[**!!{target}!!**](targetHook) in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_CREATE: "$[**!!{user}!!**](userHook) added an integration for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_UPDATE: "$[**!!{user}!!**](userHook) updated the integration for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_DELETE: "$[**!!{user}!!**](userHook) deleted the integration for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_STAGE_INSTANCE_CREATE: "$[**!!{user}!!**](userHook) started the stage for $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_STAGE_INSTANCE_UPDATE: "$[**!!{user}!!**](userHook) updated the stage for $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_STAGE_INSTANCE_DELETE: "$[**!!{user}!!**](userHook) ended the stage for $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_STAGE_INSTANCE_DELETE_NO_USER: "Discord ended the stage for $[**!!{channel}!!**](channelHook) due to inactivity.", GUILD_SETTINGS_AUDIT_LOG_COMMAND_PERMISSION_UPDATE: "$[**!!{user}!!**](userHook) updated permissions for $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_VOICE_CHANNEL_STATUS_CREATED: "$[**!!{user}!!**](userHook) set a Voice Channel Status in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_VOICE_CHANNEL_STATUS_DELETED: "$[**!!{user}!!**](userHook) removed a Voice Channel Status in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_VOICE_CHANNEL_STATUS_STATUS_CREATE: "Set to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_UNKNOWN_ACTION: "Unknown action", GUILD_SETTINGS_AUDIT_LOG_COMMON_REASON: "With reason **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_NAME_CHANGE: "Set the server name to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_ICON_HASH_CHANGE: "Set the server icon", GUILD_SETTINGS_AUDIT_LOG_GUILD_SPLASH_HASH_CHANGE: "Set the server invite background", GUILD_SETTINGS_AUDIT_LOG_GUILD_BANNER_HASH_CHANGE: "Set the server banner", GUILD_SETTINGS_AUDIT_LOG_GUILD_BANNER_HASH_REMOVE: "Removed the server banner", GUILD_SETTINGS_AUDIT_LOG_GUILD_DISCOVERY_SPLASH_HASH_CHANGE: "Set the Server Discovery background", GUILD_SETTINGS_AUDIT_LOG_GUILD_DESCRIPTION_CHANGE: "Set the server description to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_DESCRIPTION_CLEAR: "**Cleared** the server description", GUILD_SETTINGS_AUDIT_LOG_GUILD_OWNER_ID_CHANGE: "Passed ownership to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_REGION_CHANGE: "Set the voice region to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_PREFERRED_LOCALE_CHANGE: "Set the preferred locale to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_AFK_CHANNEL_ID_CHANGE: "Set the inactive channel to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_AFK_CHANNEL_ID_CLEAR: "**Cleared** the inactive channel", GUILD_SETTINGS_AUDIT_LOG_GUILD_SYSTEM_CHANNEL_ID_CHANGE: "Set the welcome notification channel to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SYSTEM_CHANNEL_ID_DISABLE: "**Disabled** the welcome notification messages", GUILD_SETTINGS_AUDIT_LOG_GUILD_RULES_CHANNEL_ID_CHANGE: "Set the rules channel to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_RULES_CHANNEL_ID_CLEAR: "**Cleared** the rules channel", GUILD_SETTINGS_AUDIT_LOG_GUILD_UPDATES_CHANNEL_ID_CHANGE: "Set the Community Server updates channel to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_UPDATES_CHANNEL_ID_CLEAR: "**Cleared** the Community Server updates channel", GUILD_SETTINGS_AUDIT_LOG_GUILD_AFK_TIMEOUT_CHANGE: "Set the inactive timeout to **!!{newValue}!!** minutes", GUILD_SETTINGS_AUDIT_LOG_GUILD_MFA_LEVEL_ENABLED: "**Enabled** two-factor authentication requirement", GUILD_SETTINGS_AUDIT_LOG_GUILD_MFA_LEVEL_DISABLED: "**Disabled** two-factor authentication requirement", GUILD_SETTINGS_AUDIT_LOG_GUILD_WIDGET_ENABLED: "**Enabled** the widget", GUILD_SETTINGS_AUDIT_LOG_GUILD_WIDGET_DISABLED: "**Disabled** the widget", GUILD_SETTINGS_AUDIT_LOG_GUILD_WIDGET_CHANNEL_ID_CHANGE: "Set the widget channel to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_WIDGET_CHANNEL_ID_DELETE: "**Removed** the widget channel", GUILD_SETTINGS_AUDIT_LOG_GUILD_VERIFICATION_LEVEL_CHANGE_NONE: "Set the server verification level to **None**", GUILD_SETTINGS_AUDIT_LOG_GUILD_VERIFICATION_LEVEL_CHANGE_LOW: "Set the server verification level to **Low**", GUILD_SETTINGS_AUDIT_LOG_GUILD_VERIFICATION_LEVEL_CHANGE_MEDIUM: "Set the server verification level to **Medium**", GUILD_SETTINGS_AUDIT_LOG_GUILD_VERIFICATION_LEVEL_CHANGE_HIGH: "Set the server verification level to **High**", GUILD_SETTINGS_AUDIT_LOG_GUILD_VERIFICATION_LEVEL_CHANGE_VERY_HIGH: "Set the server verification level to **Very High**", GUILD_SETTINGS_AUDIT_LOG_GUILD_DEFAULT_MESSAGE_NOTIFICATIONS_CHANGE_ALL_MESSAGES: "Set the default message notification setting to **All Messages**", GUILD_SETTINGS_AUDIT_LOG_GUILD_DEFAULT_MESSAGE_NOTIFICATIONS_CHANGE_ONLY_MENTIONS: "Set the default message notification setting to **Only Mentions**", GUILD_SETTINGS_AUDIT_LOG_GUILD_VANITY_URL_CODE_CHANGE: "Set the Custom Invite Link to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_VANITY_URL_CODE_DELETE: "**Removed** the Custom Invite Link", GUILD_SETTINGS_AUDIT_LOG_GUILD_EXPLICIT_CONTENT_FILTER_DISABLE: "**Disabled** the explicit content filter", GUILD_SETTINGS_AUDIT_LOG_GUILD_EXPLICIT_CONTENT_FILTER_MEMBERS_WITHOUT_ROLES: "Set the explicit content filter to scan messages from **members without a role**", GUILD_SETTINGS_AUDIT_LOG_GUILD_EXPLICIT_CONTENT_FILTER_ALL_MEMBERS: "Set the explicit content filter to scan messages from **all members**", GUILD_SETTINGS_AUDIT_LOG_GUILD_PREMIUM_PROGRESS_BAR_ENABLED_ENABLED: "Turned **on** the Boost progress bar", GUILD_SETTINGS_AUDIT_LOG_GUILD_PREMIUM_PROGRESS_BAR_ENABLED_DISABLED: "Turned **off** the Boost progress bar", GUILD_SETTINGS_AUDIT_LOG_GUILD_SYSTEM_CHANNEL_FLAGS_CHANGE: "Set system channel flags to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SYSTEM_CHANNEL_JOIN_NOTIFICATIONS: "Set system channel welcome messages to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SYSTEM_CHANNEL_PREMIUM_SUBSCRIPTIONS: "Set system channel boost notifications to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SYSTEM_CHANNEL_REMINDER_NOTIFICATIONS: "Set system channel server setup tips to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SYSTEM_CHANNEL_JOIN_NOTIFICATION_REPLIES: "Set system channel welcome stickers to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_THREAD_FLAGS_CHANGE: "Updated thread properties", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_NAME_CREATE: "Set the name to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_POSITION_CREATE: "In position **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_TOPIC_CREATE: "Set the topic to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_BITRATE_CREATE: "Set the bitrate to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_RTC_REGION_OVERRIDE_CREATE: "Set the region override to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_USER_LIMIT_CREATE: "Set the user limit to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_RATE_LIMIT_PER_USER_CREATE: "{newValue, plural, =0 {Set slowmode disabled} =1 {Set slowmode to **# second**} other {Set slowmode to **# seconds**}}", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_TYPE_CREATE: "Set the type to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_VIDEO_QUALITY_MODE_CREATE: "Set the video quality mode to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_NAME_CHANGE: "Changed the name from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_POSITION_CHANGE: "Moved from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_TOPIC_CHANGE: "Changed the topic to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_TOPIC_CLEAR: "**Cleared** the topic", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_BITRATE_CHANGE: "Changed the bitrate to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_RTC_REGION_OVERRIDE_CHANGE: "Changed the region override from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_USER_LIMIT_CHANGE: "Changed the user limit to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_RATE_LIMIT_PER_USER_CHANGE: "{newValue, plural, =0 {Disabled slowmode} =1 {Set slowmode to **# second**} other {Set slowmode to **# seconds** }}", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_RTC_REGION_OVERRIDE_DELETE: "Removed the region override", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_TYPE_CHANGE: "Changed the type from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_VIDEO_QUALITY_MODE_CHANGE: "Set the video quality mode to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_NSFW_ENABLED: "Marked the channel as age-restricted", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_NSFW_DISABLED: "Unmarked the channel as age-restricted", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_PERMISSION_OVERRIDES_GRANTED: "**Granted** {count, plural, =1 {a permission} other {permissions}} for **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_PERMISSION_OVERRIDES_DENIED: "**Denied** {count, plural, =1 {a permission} other {permissions}} for **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_PERMISSION_OVERRIDES_RESET: "**Reset** {count, plural, =1 {a permission} other {permissions}} for **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_FLAGS_CHANGE: "Changed channel settings", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_AVAILABLE_TAGS_ADD: "Added tag $[](newTagHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_AVAILABLE_TAGS_UPDATE: "Updated tag from $[](oldTagHook) to $[](newTagHook)", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_AVAILABLE_TAGS_DELETE: "Deleted tag $[](newTagHook)", GUILD_SETTINGS_AUDIT_LOG_MEMBER_NICK_CREATE: "Set their nickname to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_MEMBER_NICK_CHANGE: "Changed their nickname from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_MEMBER_NICK_DELETE: "**Removed** their nickname of **!!{oldValue}!!**", GUILD_SETTINGS_AUDIT_LOG_MEMBER_DEAF_ON: "**Deafened** them", GUILD_SETTINGS_AUDIT_LOG_MEMBER_DEAF_OFF: "**Undeafened** them", GUILD_SETTINGS_AUDIT_LOG_MEMBER_MUTE_ON: "**Muted** them", GUILD_SETTINGS_AUDIT_LOG_MEMBER_MUTE_OFF: "**Unmuted** them", GUILD_SETTINGS_AUDIT_LOG_MEMBER_ROLES_REMOVE: "**Removed** {count, plural, =1 {a role} other {some roles}}", GUILD_SETTINGS_AUDIT_LOG_MEMBER_ROLES_ADD: "**Added** {count, plural, =1 {a role} other {some roles}}", GUILD_SETTINGS_AUDIT_LOG_MEMBER_PRUNE_DELETE_DAYS: "For **{newValue, plural, =1 {a day} other {{newValue} days}}** of inactivity", GUILD_SETTINGS_AUDIT_LOG_MEMBER_BYPASSES_VERIFICATION_ON: "manually verified them", GUILD_SETTINGS_AUDIT_LOG_MEMBER_BYPASSES_VERIFICATION_OFF: "removed their manual verification", GUILD_SETTINGS_AUDIT_LOG_ROLE_NAME_CREATE: "With the name **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_ROLE_NAME_CHANGE: "Changed the name from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_ROLE_PERMISSIONS_GRANTED: "**Granted** {count, plural, =1 {permission} other {permissions}}", GUILD_SETTINGS_AUDIT_LOG_ROLE_PERMISSIONS_DENIED: "**Denied** {count, plural, =1 {permission} other {permissions}}", GUILD_SETTINGS_AUDIT_LOG_ROLE_COLOR_NONE: "With no color", GUILD_SETTINGS_AUDIT_LOG_ROLE_COLOR: "Set the color to **!!{newValue}!!** $[](newColorHook)", GUILD_SETTINGS_AUDIT_LOG_ROLE_COLOR_IOS: "Set the color to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_ROLE_HOIST_ON: "Hoisted", GUILD_SETTINGS_AUDIT_LOG_ROLE_HOIST_OFF: "Not hoisted", GUILD_SETTINGS_AUDIT_LOG_ROLE_MENTIONABLE_ON: "Mentionable", GUILD_SETTINGS_AUDIT_LOG_ROLE_MENTIONABLE_OFF: "Not mentionable", GUILD_SETTINGS_AUDIT_LOG_ROLE_ICON_HASH_CHANGE: "Set the icon", GUILD_SETTINGS_AUDIT_LOG_ROLE_UNICODE_EMOJI_CHANGE: "Set the unicode emoji", GUILD_SETTINGS_AUDIT_LOG_INVITE_CODE_CREATE: "With code **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_INVITE_CHANNEL_CREATE: "For channel **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_INVITE_MAX_USES_CREATE: "Which expires after **!!{newValue}!!** uses", GUILD_SETTINGS_AUDIT_LOG_INVITE_MAX_USES_CREATE_INFINITE: "Which has **unlimited** uses", GUILD_SETTINGS_AUDIT_LOG_INVITE_MAX_AGE_CREATE: "Which expires after **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_INVITE_MAX_AGE_CREATE_INFINITE: "Which **never** expires", GUILD_SETTINGS_AUDIT_LOG_INVITE_TEMPORARY_ON: "With temporary **on**", GUILD_SETTINGS_AUDIT_LOG_INVITE_TEMPORARY_OFF: "With temporary **off**", GUILD_SETTINGS_AUDIT_LOG_GUILD_INVITE_GUEST_INVITE: "Which is a **guest** invite", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_CHANNEL_CREATE: "With channel **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_CHANNEL_CHANGE: "Changed the channel to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_NAME_CREATE: "With name **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_NAME_CHANGE: "Changed the name from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_WEBHOOK_AVATAR: "Changed the avatar", GUILD_SETTINGS_AUDIT_LOG_EMOJI_NAME_CREATE: "With the name **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_EMOJI_NAME_CHANGE: "Changed the name from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_NAME_CREATE: "With the name **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_NAME_CHANGE: "Changed the name from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_TAGS_CREATE: "With the tags **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_TAGS_CHANGE: "Changed the tags from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_DESCRIPTION_CREATE: "With the description **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_DESCRIPTION_CHANGE: "Changed the description from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_ENABLE_EMOTICONS_ON: "Enabled emoticons", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_ENABLE_EMOTICONS_OFF: "Disabled custom emoticons", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_EXPIRE_BEHAVIOR_REMOVE_SYNCED_ROLE: "Set the expired sub behavior to **Remove Role**", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_EXPIRE_BEHAVIOR_KICK_FROM_SERVER: "Set the expired sub behavior to **Kick**", GUILD_SETTINGS_AUDIT_LOG_INTEGRATION_EXPIRE_GRACE_PERIOD: "Set the expire grace period to **{newValue, plural, =1 {a day} other {# days}}**", GUILD_SETTINGS_AUDIT_LOG_STAGE_INSTANCE_PRIVACY_LEVEL_GUILD_ONLY: "Set the privacy level to **Closed**", GUILD_SETTINGS_AUDIT_LOG_STAGE_INSTANCE_PRIVACY_LEVEL_PUBLIC: "Set the privacy level to **Public**", GUILD_SETTINGS_AUDIT_LOG_COMMAND_PERMISSION_REMOVED: "**Removed override** for **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_COMMAND_PERMISSION_GRANTED: "**Granted** permission for **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_COMMAND_PERMISSION_DENIED: "**Denied** permission for **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_TIME_AT_ANDROID: "{date} at {time}", GUILD_SETTINGS_FILTER_ACTION: "Filter by Action", GUILD_SETTINGS_FILTERED_ACTION: "Action Filter:", GUILD_SETTINGS_FILTER_USER: "Filter by User", GUILD_SETTINGS_FILTERED_USER: "User Filter:", GUILD_SETTINGS_FILTER_ALL: "All", GUILD_SETTINGS_FILTER_ALL_USERS: "All Users", GUILD_SETTINGS_FILTER_ALL_ACTIONS: "All Actions", GUILD_SETTINGS_ACTION_FILTER_GUILD_UPDATE: "Update Server", GUILD_SETTINGS_ACTION_FILTER_CHANNEL_CREATE: "Create Channel", GUILD_SETTINGS_ACTION_FILTER_CHANNEL_UPDATE: "Update Channel", GUILD_SETTINGS_ACTION_FILTER_CHANNEL_DELETE: "Delete Channel", GUILD_SETTINGS_ACTION_FILTER_CHANNEL_OVERWRITE_CREATE: "Create Channel Permissions", GUILD_SETTINGS_ACTION_FILTER_CHANNEL_OVERWRITE_UPDATE: "Update Channel Permissions", GUILD_SETTINGS_ACTION_FILTER_CHANNEL_OVERWRITE_DELETE: "Delete Channel Permissions", GUILD_SETTINGS_ACTION_FILTER_MEMBER_KICK: "Kick Member", GUILD_SETTINGS_ACTION_FILTER_MEMBER_PRUNE: "Prune Members", GUILD_SETTINGS_ACTION_FILTER_MEMBER_BAN_ADD: "Ban Member", GUILD_SETTINGS_ACTION_FILTER_MEMBER_BAN_REMOVE: "Unban Member", GUILD_SETTINGS_ACTION_FILTER_MEMBER_UPDATE: "Update Member", GUILD_SETTINGS_ACTION_FILTER_MEMBER_ROLE_UPDATE: "Update Member Roles", GUILD_SETTINGS_ACTION_FILTER_MEMBER_MOVE: "Move Member", GUILD_SETTINGS_ACTION_FILTER_MEMBER_DISCONNECT: "Disconnect Member", GUILD_SETTINGS_ACTION_FILTER_BOT_ADD: "Add Bot", GUILD_SETTINGS_ACTION_FILTER_ROLE_CREATE: "Create Role", GUILD_SETTINGS_ACTION_FILTER_ROLE_UPDATE: "Update Role", GUILD_SETTINGS_ACTION_FILTER_ROLE_DELETE: "Delete Role", GUILD_SETTINGS_ACTION_FILTER_INVITE_CREATE: "Create Invite", GUILD_SETTINGS_ACTION_FILTER_INVITE_UPDATE: "Update Invite", GUILD_SETTINGS_ACTION_FILTER_INVITE_DELETE: "Delete Invite", GUILD_SETTINGS_ACTION_FILTER_WEBHOOK_CREATE: "Create Webhook", GUILD_SETTINGS_ACTION_FILTER_WEBHOOK_UPDATE: "Update Webhook", GUILD_SETTINGS_ACTION_FILTER_WEBHOOK_DELETE: "Delete Webhook", GUILD_SETTINGS_ACTION_FILTER_EMOJI_CREATE: "Create Emoji", GUILD_SETTINGS_ACTION_FILTER_EMOJI_UPDATE: "Update Emoji", GUILD_SETTINGS_ACTION_FILTER_EMOJI_DELETE: "Delete Emoji", GUILD_SETTINGS_ACTION_FILTER_MESSAGE_DELETE: "Delete Messages", GUILD_SETTINGS_ACTION_FILTER_MESSAGE_BULK_DELETE: "Bulk Delete Messages", GUILD_SETTINGS_ACTION_FILTER_MESSAGE_PIN: "Pin Message", GUILD_SETTINGS_ACTION_FILTER_MESSAGE_UNPIN: "Unpin Message", GUILD_SETTINGS_ACTION_FILTER_INTEGRATION_CREATE: "Create Integration", GUILD_SETTINGS_ACTION_FILTER_INTEGRATION_UPDATE: "Update Integration", GUILD_SETTINGS_ACTION_FILTER_INTEGRATION_DELETE: "Delete Integration", GUILD_SETTINGS_ACTION_FILTER_STAGE_INSTANCE_CREATE: "Start Stage", GUILD_SETTINGS_ACTION_FILTER_STAGE_INSTANCE_UPDATE: "Update Stage", GUILD_SETTINGS_ACTION_FILTER_STAGE_INSTANCE_DELETE: "End Stage", GUILD_SETTINGS_ACTION_FILTER_STICKER_CREATE: "Create Sticker", GUILD_SETTINGS_ACTION_FILTER_STICKER_UPDATE: "Update Sticker", GUILD_SETTINGS_ACTION_FILTER_STICKER_DELETE: "Delete Sticker", GUILD_SETTINGS_ACTION_FILTER_APPLICATION_COMMAND_PERMISSION_UPDATE: "Update Command Permissions", GUILD_SETTINGS_ACTION_FILTER_VOICE_CHANNEL_STATUS_CREATE: "Create Voice Channel Status", GUILD_SETTINGS_ACTION_FILTER_VOICE_CHANNEL_STATUS_DELETE: "Delete Voice Channel Status", GUILD_SETTINGS_ROLE_ICON_SIDEBAR_NEW_ARIA_LABEL: "Manage Roles", PREMIUM_GUILD_TIER_0: "No Level", PREMIUM_GUILD_TIER_1: "Level 1", PREMIUM_GUILD_TIER_2: "Level 2", PREMIUM_GUILD_TIER_3: "Level 3", PREMIUM_GUILD_TIER_UNLOCKED: "Unlocked", PREMIUM_GUILD_TIER_1_SHORT: "LVL 1", PREMIUM_GUILD_TIER_2_SHORT: "LVL 2", PREMIUM_GUILD_TIER_3_SHORT: "LVL 3", PREMIUM_GUILD_INCLUDED: "Included in Boosting", PREMIUM_GUILD_SETTINGS_MEMBERS_SUBSCRIBED_NEEDED: "You need **{number, plural, =1 {# more Boost} other {# more Boosts}}** to unlock !!{tier}!!", PREMIUM_GUILD_SETTINGS_X_OF_Y_SUBSCRIPTIONS: "{subscribers, number}/{numRequired, plural, =1 {# Boost} other {# Boosts}}", GUILD_SETTINGS_PREMIUM_GUILD_TITLE: "Server Boost Status", GUILD_SETTINGS_PREMIUM_GUILD_BLURB: "\nMembers of your server can help unlock levels by bestowing Boosts. For every level achieved, your server will help unlock perks for everyone.\n\nMembers can revoke their boost at any time. **Your server will keep perks for three days if a level is lost**. [Learn more about Server Boosting]({helpdeskArticle}).", GUILD_SETTINGS_GUILD_PREMIUM_PERKS_TITLE_NONE: "No Server Boost", GUILD_SETTINGS_GUILD_PREMIUM_PERKS_DESCRIPTION_NONE: "No one has bestowed Boosts to this server yet. See if any members would kindly bless your server for server-wide Boost Perks!", GUILD_SETTINGS_GUILD_PREMIUM_PERKS_TITLE_TIER_1: "Level 1 Perks", GUILD_SETTINGS_GUILD_PREMIUM_PERKS_TITLE_TIER_2: "Level 2 Perks", GUILD_SETTINGS_GUILD_PREMIUM_PERKS_TITLE_TIER_3: "Level 3 Perks", GUILD_SETTINGS_GUILD_PREMIUM_PERKS_BASE_PERKS: "Boosted server perks include —", GUILD_SETTINGS_GUILD_PREMIUM_PERKS_PREVIOUS_PERKS: "Boosted servers get everything previous, and —", GUILD_SETTINGS_PREMIUM_GUILD_TIER_REQUIREMENT: "{required, plural, =1 {# Boost} other {# Boosts}}", GUILD_SETTINGS_PREMIUM_GUILD_TIER_REQUIREMENT_A11Y_LABEL: "{required, plural, =1 {# Boost} other {# Boosts}} required, tier locked", GUILD_SETTINGS_PREMIUM_GUILD_UNLOCKED: "Unlocked", GUILD_SETTINGS_PREMIUM_GUILD_COUNT_SUBSCRIBERS: "{count, plural, =1 {**# extremely cool person** has} other {**# extremely cool people** have}} boosted this server", GUILD_SETTINGS_PREMIUM_GUILD_CLOSE_HINT: "Only {numLeft, plural, =1 {# more boost} other {# more boosts}} until the next level!", GUILD_SETTINGS_PREMIUM_UPSELL_HEADING_PRIMARY: "Ready to Boost?", GUILD_SETTINGS_PREMIUM_UPSELL_HEADING_SECONDARY: "Get the best deal with Nitro", GUILD_SETTINGS_PREMIUM_UPSELL_HEADING_SECONDARY_PREMIUM_USER: "Want to give your server Level 1 perks?", GUILD_SETTINGS_PREMIUM_UPSELL_HEADING_TERTIARY_PREMIUM_USER: "Upgrade to Nitro and get {numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}} with your subscription!", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING: "Server Boosts start at **!!{price}!!**.", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING_TIER_1: "Thanks for being a Nitro Classic member. You get a {discountPercent} discount on Server Boosts.\n\nBoosts are **!!{price}!!** $[!!{originalPrice}!!](originalPriceHook).", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING_TIER_1_MOBILE: "Thanks for being a Nitro Classic member. You get a {discountPercent} discount on Server Boosts.", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING_TIER_2: "Thanks for being a Nitro member. You get {freeSubscriptionCount, number} Boosts included with your subscription, and a {discountPercent} discount on future Server Boosts.\n\nBoosts are **!!{price}!!** $[(!!{originalPrice}!!)](originalPriceHook).", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING_TIER_2_MOBILE: "Thanks for being a Nitro member. You get {freeSubscriptionCount, number} Boosts included with your subscription, and a {discountPercent} discount on future Server Boosts.", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING_EXTRA_ANDROID: "Boosts are **!!{price}!!** $[~~({originalPrice})~~](originalPriceHook).", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING_EXTRA_IOS: "Boosts are **!!{price}!!** $[!!{originalPrice}!!](originalPriceHook).", GUILD_SETTINGS_PREMIUM_UPSELL_SUBHEADING_EXTRA_IOS_VOICEOVER_LABEL: "Boosts are !!{price}!!, discounted from !!{originalPrice}!!", GUILD_SETTINGS_PREMIUM_UPSELL_BODY_PERK_GUILD_SUBSCRIPTION_DISCOUNT: "{discountPercentage} off Server Boosts", GUILD_SETTINGS_PREMIUM_UPSELL_BODY_PERK_NUM_GUILD_SUBSCRIPTIONS: "Includes {numFreeGuildSubscriptions, plural, =1 {# Boost} other {# Boosts}}—unlock Level 1!", GUILD_SETTINGS_PREMIUM_UPSELL_BODY_PERK_NO_FREE_GUILD_SUBSCRIPTIONS: "Does not include {numFreeGuildSubscriptions, plural, =1 {# Boost} other {# Boosts}}", GUILD_SETTINGS_PREMIUM_UPSELL_LEARN_MORE: "Learn more about Discord Nitro", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_EMOJI: "+{adding, number} server emoji slots (for a total of {total, number})", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_STICKER: "+{adding, number} custom sticker slots (for a total of {total, number})", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_AUDIO_QUALITY: "{bitrate, number} kbps audio quality", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_UPLOAD_LIMIT: "{fileSize} upload limit for all members", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_EMOJI: "More emoji, more ways to express yourself!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_1_ANIMATED_GUILD_ICON: "Animated server icon", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_ANIMATED_GUILD_ICON: "Represent your server...in motion! **(Only in server)**", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_AUDIO_QUALITY: "Hear your friends in high definition!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_1_SPLASH: "Custom server invite background", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_SPLASH: "Upload a customizable background for all your server invites!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_1_STREAMING: "Stream to your friends in high quality.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_STREAMING: "Share your high-quality gameplay with high-quality video streaming.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_STICKER: "Upload your own sticker creations for everyone to use in your server.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_SOUNDBOARD: "Add custom sounds for everyone in your server. Drumroll please!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_EMOJI: "Even more emoji, for even more ways to express yourself!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_AUDIO_QUALITY: "Hear your friends in higher definition!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_UPLOAD_LIMIT: "Larger upload file size for high quality meme sharing. **(Only in server)**", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_2_BANNER: "Server Banner", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_BANNER: "Upload a decorative banner that best represents your community! Shown under your server name.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_2_STREAMING: "1080p 60fps Go Live streams", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_STREAMING: "Stream to your friends in high quality.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_STICKER: "More sticker slots for more custom expressions!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_SOUNDBOARD: "Even more fun with even more sounds. Air horns incoming!", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_2_THREAD_PRIVATE: "Create private threads", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_THREAD_PRIVATE: "Create threads that only selected members can view and use.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_2_CUSTOM_ROLE_ICONS: "Custom Role Icons", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_CUSTOM_ROLE_ICONS: "Set a unique icon for each role. Icons display in chat and the members list.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_EMOJI: "Have yourself access to a truckload of emoji slots for all your expressing needs.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_3_VANITY_URL: "Custom Invite Link for the server", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_ANIMATED_GUILD_BANNER: "Animated server banner", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_VANITY_URL: "Customize the invite URLs to your server with **discord.gg/____. ([We have some rules]({helpdeskArticle}))**", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_AUDIO_QUALITY: "Hear your friends in the highest of definitions. It’s as if they’re right next to you...", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_UPLOAD_LIMIT: "The biggest file sizes for the highest quality meme sharing. **(Only in server)**", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_STICKER: "Now we’re talking... but with stickers.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_SOUNDBOARD: "Crank up the Soundboard with even more custom sounds.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_3_ANIMATED_BANNER: "Animated Server Banner", GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_ANIMATED_BANNER: "Gives the option to choose a GIF as your banner.", GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_VIDEO_STAGE: "Video Stage audience limit increased to {limit}", GUILD_SETTINGS_FOLLOWER_ANALYTICS_TOOLTIP: "Gained: {subscribersGained} \nLost: {subscribersLost}", GUILD_SETTINGS_PUBLIC_UPDATE_FAILED: "Failed to update your settings. Please try again.", GUILD_SETTINGS_PUBLIC_NO_OPTION_SELECTED: "None Selected", WELCOME_SCREEN_DEPRECATED: "Changes to the Welcome Screen are disabled. The Welcome Screen will still appear for your members. A new and improved version of Welcome Screen is now available through $[Onboarding](onboardingLink), and will replace Welcome Screen if enabled.", GUILD_SETTINGS_PUBLIC_WELCOME: "Welcome Screen", GUILD_SETTINGS_PUBLIC_WELCOME_INTRO_TEXT: "Set up a custom Welcome Screen that appears when new members join. This can help new members discover all the cool things they can do in your server!\n\nServers that have set up a Welcome Screen see improvements in more people sticking around and engaging.", GUILD_SETTINGS_PUBLIC_WELCOME_INTRO_BUTTON: "Set Up Welcome Screen", GUILD_SETTINGS_PUBLIC_WELCOME_SETTINGS_TEXT: "If enabled, this Welcome Screen appears for new members when they join your server. This screen helps new members discover all the cool things they can do in your server!", GUILD_SETTINGS_PUBLIC_WELCOME_DESCRIPTION_PLACEHOLDER: "What's this server about? What do people do here?", GUILD_SETTINGS_PUBLIC_WELCOME_RECOMMENDED_CHANNELS_TITLE: "Top things to do", GUILD_SETTINGS_PUBLIC_WELCOME_RECOMMENDED_CHANNELS_DESCRIPTION: "Select up to 5 recommended channels. We suggest channels where people can interact, like channels for discussions, asking questions, reading news, or selecting roles.", GUILD_SETTINGS_PUBLIC_WELCOME_ADD_RECOMMENDED_CHANNEL: "Add a Channel", GUILD_SETTINGS_PUBLIC_WELCOME_RECOMMENDED_CHANNEL_MODAL_ADD: "Add a Recommended Channel", GUILD_SETTINGS_PUBLIC_WELCOME_RECOMMENDED_CHANNEL_MODAL_EDIT: "Edit Recommended Channel", GUILD_SETTINGS_PUBLIC_WELCOME_PICK_CHANNEL: "Pick a channel that you think new members should visit.", GUILD_SETTINGS_PUBLIC_WELCOME_SELECT_A_CHANNEL: "1. Select a Channel", GUILD_SETTINGS_PUBLIC_WELCOME_SET_DESCRIPTION: "2. What do people do in this channel?", GUILD_SETTINGS_PUBLIC_WELCOME_PICK_EMOJI: "3. Pick an emoji!", GUILD_SETTINGS_PUBLIC_WELCOME_PICK_EMOJI_UPSELL: "Optional, but why not add some fun?", GUILD_SETTINGS_PUBLIC_WELCOME_ONLY_VIEWABLE_CHANNELS: "You can only select channels that are viewable by @everyone.", GUILD_SETTINGS_PUBLIC_WELCOME_INVALID_CHANNEL: "This channel is no longer in Welcome Screen because it does not exist or is not viewable by @everyone", GUILD_SETTINGS_PUBLIC_WELCOME_CHANNEL_DESCRIPTION_PLACEHOLDER: "Chat about the latest Wumpus sightings", GUILD_SETTINGS_PUBLIC_WELCOME_ENABLED: "Your Welcome Screen is up and running.", GUILD_SETTINGS_PUBLIC_WELCOME_ENABLED_SECOND_LINE: "New members will be greeted by this screen when they join!", GUILD_SETTINGS_PUBLIC_WELCOME_ENABLE_REMINDER: " Don’t forget to enable when you’re finished!", GUILD_SETTINGS_PUBLIC_WELCOME_PROGRESS_WILL_SAVE: "Your changes are saved automatically.", GUILD_SETTINGS_PUBLIC_WELCOME_PREVIEW: "Preview", GUILD_SETTINGS_PUBLIC_WELCOME_UPDATE_FAILURE: "You must remove all invalid channels first before you can save.", GUILD_SETTINGS_PUBLIC_WELCOME_CHANNEL_MOVE_UP: "Move Up", GUILD_SETTINGS_PUBLIC_WELCOME_CHANNEL_MOVE_DOWN: "Move Down", GUILD_SETTINGS_PUBLIC_WELCOME_CHANNEL_EDIT: "Edit Channel", GUILD_SETTINGS_PUBLIC_WELCOME_CHANNEL_DELETE: "Remove Channel", WELCOME_CHANNEL_EMOJI_PICKER_TOOLTIP: "Set an emoji for this channel!", WELCOME_CHANNEL_DELETE_CONFIRM_TITLE: "Remove Recommended Channel", WELCOME_CHANNEL_DELETE_CONFIRM_BODY: "Are you sure you want to remove **!!{channelName}!!** from recommended channels?", WELCOME_CHANNEL_DELETE_CONFIRM_BODY_GENERIC: "Are you sure you want to remove this channel from recommended channels?", GUILD_SETTINGS_EXAMPLE_TOOLTIP: "Here's an example!", GUILD_SETTINGS_MEMBER_VERIFICATION: "Rules Screening", GUILD_SETTINGS_MEMBER_VERIFICATION_REQUIREMENTS: "Member Requirements", GUILD_SETTINGS_MEMBER_VERIFICATION_EXAMPLE_GUILD_NAME: "Wumpus Land", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_DESCRIPTION: "A way to screen members joining your community, from simple rule agreements to detailed questions. Granting a role to a new member will bypass this requirement.", GUILD_SETTINGS_MEMBER_VERIFICATION_AUTOMATIC_DESCRIPTION: "Set up rules that new members must explicitly agree to before they can talk, react, or DM other members. Granting a role to a new member will bypass this requirement.", GUILD_SETTINGS_MEMBER_VERIFICATION_INTRO_BUTTON: "Set up Membership Screening", GUILD_SETTINGS_MEMBER_VERIFICATION_REQUIREMENTS_INTRO_BUTTON: "Set up Member Requirements", GUILD_SETTINGS_MEMBER_VERIFICATION_PREVIEW: "Preview", GUILD_SETTINGS_MEMBER_VERIFICATION_ENABLED: "New members will be screened.", GUILD_SETTINGS_MEMBER_VERIFICATION_ENABLED_SECOND_LINE: "They’ll have to meet your requirements to join or talk in the server.", GUILD_SETTINGS_MEMBER_VERIFICATION_PROGRESS_WILL_SAVE: "Your changes are saved automatically.", GUILD_SETTINGS_MEMBER_VERIFICATION_ENABLE_REMINDER: "Don’t forget to enable when you’re finished!", GUILD_SETTINGS_MEMBER_VERIFICATION_DESCRIPTION_TITLE: "Description", GUILD_SETTINGS_MEMBER_VERIFICATION_DESCRIPTION_PLACEHOLDER: "Briefly describe what your server is about. New members will see this when they try to join.", GUILD_SETTINGS_MEMBER_VERIFICATION_SCREEN_TITLE: "Customize Screen", GUILD_SETTINGS_MEMBER_VERIFICATION_APPLICATIONS_TITLE: "Review Applications", GUILD_SETTINGS_MEMBER_VERIFICATION_PREVIEW_ENABLED_TITLE: "Allow Preview (Recommended)", GUILD_SETTINGS_MEMBER_VERIFICATION_PREVIEW_DESCRIPTION: "New members can browse the server before meeting the requirements. We recommend keeping this enabled so they can see what your community is like. If disabled, new members can’t view any contents of the server until they meet the requirements. [Learn more.]({helpdeskArticle})", GUILD_SETTINGS_MEMBER_VERIFICATION_PENDING: "Pending", GUILD_SETTINGS_MEMBER_VERIFICATION_PENDING_COUNT: "Pending ({count})", GUILD_SETTINGS_MEMBER_VERIFICATION_PENDING_COUNT_HYPEN: "Pending - ({count})", GUILD_SETTINGS_MEMBER_VERIFICATION_REJECTED_COUNT_HYPEN: "Rejected - ({count})", GUILD_SETTINGS_MEMBER_VERIFICATION_APPROVED_COUNT_HYPEN: "Approved - ({count})", GUILD_SETTINGS_MEMBER_VERIFICATION_SORT_NEWEST: "Sort by: Newest", GUILD_SETTINGS_MEMBER_VERIFICATION_SORT_OLDEST: "Sort by: Oldest", GUILD_SETTINGS_MEMBER_VERIFICATION_LIST_DESCRIPTION: "All submitted applications can be browsed up to 180 days after its submission date.", GUILD_SETTINGS_MEMBER_VERIFICATION_REJECTED: "Rejected", GUILD_SETTINGS_MEMBER_VERIFICATION_APPROVED: "Approved", GUILD_SETTINGS_MEMBER_VERIFICATION_BANNED: "Denied & Banned", GUILD_SETTINGS_MEMBER_VERIFICATION_AUTO_APPROVAL: "Auto Approval", GUILD_SETTINGS_MEMBER_VERIFICATION_AUTO_APPROVAL_DESCRIPTION: "New members will be auto approved when they meet your requirements.", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_APPROVAL: "Manual Approval", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_APPROVAL_REQUIRED: "Manual Approval Required", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_APPROVAL_DESCRIPTION: "New members will not be able to join or talk until a mod approves their application.", GUILD_SETTINGS_MEMBER_VERIFICATION_REVIEW_APPLICATION_TITLE: "Review Application", GUILD_SETTINGS_MEMBER_VERIFICATION_EMPTY_PENDING_APPLICATIONS_TITLE: "There are no pending applications.", GUILD_SETTINGS_MEMBER_VERIFICATION_EMPTY_PENDING_APPLICATIONS_BODY: "You'll be able to manage new member applications here.", GUILD_SETTINGS_MEMBER_VERIFICATION_EMPTY_REJECTED_APPLICATIONS_TITLE: "There are no rejected applications.", GUILD_SETTINGS_MEMBER_VERIFICATION_EMPTY_REJECTED_APPLICATIONS_BODY: "You'll be able to view rejected applications here.", GUILD_SETTINGS_MEMBER_VERIFICATION_EMPTY_APPROVED_APPLICATIONS_TITLE: "There are no approved applications.", GUILD_SETTINGS_MEMBER_VERIFICATION_EMPTY_APPROVED_APPLICATIONS_BODY: "You'll be able to view approved member applications here.", GUILD_SETTINGS_MEMBER_VERIFICATION_REVIEW_APPLICATION_DESCRIPTION: "You are reviewing an application from someone who wants to join your server. Until you approve them, they cannot join or talk in the server.", GUILD_SETTINGS_MEMBER_VERIFICATION_REVIEW_PENDING_APPLICATIONS: "{count, plural, one {Pending Application} other {{count, number} Pending Applications}}", GUILD_SETTINGS_MEMBER_VERIFICATION_APPLICATION_SUBMITTED_TIME: "submitted on {date}", GUILD_SETTINGS_MEMBER_VERIFICATION_APPROVE_APPLICATION: "Approve", GUILD_SETTINGS_MEMBER_VERIFICATION_DENY_APPLICATION: "Reject", GUILD_SETTINGS_MEMBER_VERIFICATION_DENY_AND_BAN_APPLICATION: "Deny & Ban", GUILD_SETTINGS_MEMBER_VERIFICATION_DENY_MODAL_TITLE: "Provide a denial reason to the user (OPTIONAL)", GUILD_SETTINGS_MEMBER_VERIFICATION_DENIED: "Denied", GUILD_SETTINGS_MEMBER_VERIFICATION_ACTIONED_BY: "By **{username}**#{discriminator} on {date}", GUILD_SETTINGS_MEMBER_VERIFICATION_ACTIONED_BY_HOOK: "By $[](usernameHook) on {date}", GUILD_SETTINGS_MEMBER_VERIFICATION_BAN_USER: "Ban User", GUILD_SETTINGS_MEMBER_VERIFICATION_REASON_TITLE: "Reason shared with user", GUILD_SETTINGS_MEMBER_VERIFICATION_TEXT_DESCRIPTION: "A free-form response with a 150 character limit.", GUILD_SETTINGS_MEMBER_VERIFICATION_PARAGRAPH_DESCRIPTION: "A free-form response with a 1,000 character limit. Let them go wild.", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_WARNING_TITLE: "Warning: Switching to Manual Approval", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_WARNING_DESCRIPTION: "Adding this requirement will change your Member Requirements to require manual approval.", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_WARNING_EXPLANATION: "This means that new members will not be able to talk or join the server **until a server staff approves their application.**", GUILD_SETTINGS_MEMBER_VERIFICATION_EDIT_WARNING_TITLE: "You have {count, plural, one {application} other {{count, number} applications}} pending review!", GUILD_SETTINGS_MEMBER_VERIFICATION_EDIT_WARNING_DESCRIPTIONG: "You can still make changes, but keep in mind the changes will not affect the existing applications that are pending review.", GUILD_SETTINGS_MEMBER_VERIFICATION_CONTINUE_EDITING: "Continue Editing", GUILD_SETTINGS_MEMBER_VERIFICATION_REVIEW_WARNING_TITLE: "You have {count, plural, one {{count, number} application} other {{count, number} applications}} awaiting review!", GUILD_SETTINGS_MEMBER_VERIFICATION_REVIEW_WARNING_DESCRIPTION: "Before you can disable Member Requirements, you have to either approve or reject all applications.", GUILD_SETTINGS_MEMBER_VERIFICATION_QUESTION_LIMIT: "You can add up to 5 questions.", GUILD_SETTINGS_MEMBER_VERIFICATION_AUTOMATIC_APPROVAL_DIVIDER: "Automatic Approval", GUILD_SETTINGS_MEMBER_VERIFICATION_MANUAL_APPROVAL_DIVIDER: "Mod Approval Required", GUILD_SETTINGS_DISABLE_MEMBER_VERIFICATION_TITLE: "Are you sure?", GUILD_SETTINGS_DISABLE_MEMBER_VERIFICATION_DESCRIPTION: "Disabling Member Requirements means people can join your community without accepting rules or your manual approval. Warning! Any member who has not pass the requirements (e.g. Agree to the rules) will get kicked from the server.", GUILD_SETTINGS_KICK_STARTED_APPLICATIONS_DESCRIPTION: "Warning! Any member who has not submitted an application will get kicked from the server.", GUILD_SETTINGS_KEEP_STARTED_APPLICATIONS_DESCRIPTION: "Warning! Any member who has yet to agree to server rules will automatically be granted full membership.", MEMBER_VERIFICATION_GET_STARTED_TITLE: "Set up server rules!", MEMBER_VERIFICATION_GET_STARTED_DESCRIPTION: "Members are required to agree to server rules before they can talk.", MEMBER_VERIFICATION_GET_STARTED_SUBTITLE: "Create server rules and ask pending members to agree to them before they can talk.", MEMBER_VERIFICATION_GET_STARTED_BUTTON: "Get Started", MEMBER_VERIFICATION_ADD_QUESTION: "Add a question", MEMBER_VERIFICATION_ADD_QUESTIONS: "Add Questions", MEMBER_VERIFICATION_ADD_QUESTIONS_DESCRIPTION: "Use questions to manually approve new members before they can talk in your server.", MEMBER_VERIFICATION_FORM_ITEM_RULES: "Server Rules", MEMBER_VERIFICATION_FORM_ITEM_COMING_SOON: "Coming soon!", MEMBER_VERIFICATION_FORM_ITEM_TEXT_INPUT: "Short Answer", MEMBER_VERIFICATION_FORM_ITEM_PARAGRAPH: "Paragraph", MEMBER_VERIFICATION_FORM_ITEM_MULTIPLE_CHOICE: "Multiple Choice", MEMBER_VERIFICATION_FORM_ITEM_VERIFICATION: "Connections", MEMBER_VERIFICATION_FORM_VERIFICATION_SETTINGS: "To change this, [go to Moderation settings](onSettingsClick)", MEMBER_VERIFICATION_FORM_RULES_LABEL: "Read and agree to the server rules", MEMBER_VERIFICATION_ADD_RULE: "Add a rule", MEMBER_VERIFICATION_RULE_TOOLTIP: "You've already added rules", MEMBER_VERIFICATION_RULE_PLACEHOLDER: "Enter a rule", MEMBER_VERIFICATION_EXAMPLE_RULES_SUBTITLE: "Example rules", MEMBER_VERIFICATION_EXAMPLE_RULES: "Example rules (click them!)", MEMBER_VERIFICATION_RULE_BE_RESPECTFUL: "Be civil and respectful", MEMBER_VERIFICATION_RULE_NO_SPAM: "No spam or self-promotion", MEMBER_VERIFICATION_RULE_NO_NSFW: "No age-restricted or obscene content", MEMBER_VERIFICATION_RULE_SAFE: "Help keep things safe", MEMBER_VERIFICATION_RULE_BE_RESPECTFUL_FULL: "Treat everyone with respect. Absolutely no harassment, witch hunting, sexism, racism, or hate speech will be tolerated.", MEMBER_VERIFICATION_RULE_NO_SPAM_FULL: "No spam or self-promotion (server invites, advertisements, etc) without permission from a staff member. This includes DMing fellow members.", MEMBER_VERIFICATION_RULE_NO_NSFW_FULL: "No age-restricted or obscene content. This includes text, images, or links featuring nudity, sex, hard violence, or other graphically disturbing content.", MEMBER_VERIFICATION_RULE_SAFE_FULL: "If you see something against the rules or something that makes you feel unsafe, let staff know. We want this server to be a welcoming space!", MEMBER_VERIFICATION_FORM_ITEM_EMAIL_VERIFICATION_LABEL: "Verify your email.", MEMBER_VERIFICATION_FORM_ITEM_EMAIL_VERIFICATION_LABEL_VERIFIED: "Verified Email Address", MEMBER_VERIFICATION_FORM_ITEM_EMAIL_VERIFICATION_SETTINGS_LABEL: "New members must verify their email", MEMBER_VERIFICATION_FORM_ITEM_PHONE_VERIFICATION_SETTINGS_LABEL: "New members must verify their phone number", MEMBER_VERIFICATION_EMAIL_VERIFICATION_RESEND_EMAIL: "Resend email", MEMBER_VERIFICATION_EMAIL_VERIFICATION_EMAIL_SENT: "Email sent!", MEMBER_VERIFICATION_FORM_ITEM_PHONE_VERIFICATION_LABEL: "Verify your phone number.", MEMBER_VERIFICATION_FORM_ITEM_PHONE_VERIFICATION_LABEL_VERIFIED: "Verified Phone Number", MEMBER_VERIFICATION_FORM_PASSED_REQUIREMENTS: "Passed Verification Level", MEMBER_VERIFICATION_AGREED_TO_RULES: "Agreed to Rules", MEMBER_VERIFICATION_FORM_REQUIRED_ITEM: "This field is required", MEMBER_VERIFICATION_RULE_LIMIT: "You can only add up to {number} rules", MEMBER_VERIFICATION_DELETE_FIELD_CONFIRM_TITLE: "Remove field", MEMBER_VERIFICATION_DELETE_FIELD_CONFIRM_TEXT: "Are you sure you want to remove this field?", MEMBER_VERIFICATION_EMAIL_VERIFICATION_ENABLED: "You have a verified email.", MEMBER_VERIFICATION_PHONE_VERIFICATION_ENABLED: "You have a verified phone number.", MEMBER_VERIFICATION_GUILD_VERIFICATION_LEVEL: "Verification Level: $[](verificationLevelHook)", MEMBER_VERIFICATION_VERIFIED: "Verified", MEMBER_VERIFICATION_PHONE_VERIFIED: "Phone Verified", MEMBER_VERIFICATION_EMAIL_VERIFIED: "Email Verified", MEMBER_VERIFICATION_ACCOUNT_VERIFIED: "Passed Verification Level", MEMBER_VERIFICATION_NEED_RULES_CHANNEL_PERMS: "You need to have Send Message permissions in your server's rules channel to add or edit server rules here.", MEMBER_VERIFICATION_PREVIEW_DISABLED_MARKDOWN_WARNING: "Channel and role mentions will not show up properly in rules if you've disabled preview.", MEMBER_VERIFICATION_FIELD_QUESTION: "Enter your question", MEMBER_VERIFICATION_FIELD_QUESTION_REQUIRED_ERROR: "You must enter a question.", MEMBER_VERIFICATION_RULES_REQUIRED_ERROR: "You need to add one or more rules.", MEMBER_VERIFICATION_MULTIPLE_CHOICE_PLACEHOLDER: "Option {index, number}", MEMBER_VERIFICATION_MULTIPLE_CHOICE_ADD: "Add an option", MEMBER_VERIFICATION_CHOICES_REQUIRED_ERROR: "You need at least two or more choices.", MEMBER_VERIFICATION_FORM_FIELDS_LIMIT: "You can only add up to {number, number} questions", MEMBER_VERIFICATION_RULE_INDEX: "{ruleIndex, number}.", MEMBER_VERIFICATION_WARNING_TITLE: "Wait, you're not done!", MEMBER_VERIFICATION_WARNING_DESCRIPTION: "You're missing a description! Tell new members what your server is about.", MEMBER_VERIFICATION_WARNING_FIELDS: "You currently have no requirements enabled, which means new members will just see an empty pop-up.", MEMBER_VERIFICATION_WARNING_DESCRIPTION_AND_FIELDS: "Hey, looks like your Member Requirements isn't fully set up yet. You're missing a description, and you currently have no requirements enabled, which means new members will just see an empty pop-up.", MEMBER_VERIFICATION_WARNING_CONFIRM: "Proceed Anyway", MEMBER_VERIFICATION_WARNING_CANCEL: "Cancel", MEMBER_VERIFICATION_REJECTED_TITLE: "Your application to join the server has been rejected.", MEMBER_VERIFICATION_LEARN_MORE: "Learn more", MEMBER_VERIFICATION_CANCEL_APPLICATION_SUBTITLE: "If you want to join in the future, you’ll have to apply again.", MEMBER_VERIFICATION_APPLICATION_CONFIRMATION_TITLE: "Your application to join the server is awaiting review.", MEMBER_VERIFICATION_APPLICATION_CONFIRMATION_TITLE_WITH_GUILD_NAME: "Your application to join {guildName} is awaiting review!", MEMBER_VERIFICATION_APPLICATION_CONFIRMATION_SUBTITLE: "You'll get notified when there's an update.", MEMBER_VERIFICATION_CANCEL_APPLICATION: "Withdraw Application", MEMBER_VERIFICATION_WITHDRAW_APPLICATION_CONFIRMATION: "Are you sure you want to withdraw your application from **!!{name}!!**?", MEMBER_VERIFICATION_DISABLE_CONFIRM_TITLE: "There are still pending members that haven't passed your screen.", MEMBER_VERIFICATION_DISABLE_CONFIRM_BODY: "Before you can disable Member Requirements, you have to either approve or kick all pending members. Approved members will still have to verify their email or phone (based on your Verification Level) to talk.", MEMBER_VERIFICATION_DISABLE_CONFIRM_APPROVE_ALL: "Approve All", MEMBER_VERIFICATION_CONFIRM_APPROVE_ALL_AND_DISABLE: "Approve all and disable", MEMBER_VERIFICATION_DISABLE_CONFIRM_KICK_ALL: "Kick All", MEMBER_VERIFICATION_VERIFICATION_FIELD_SETTINGS_TOOLTIP: "New members will also be required to pass your verification level requirements.", MEMBER_VERIFICATION_MEMBER_APPLICATION: "Member Application", MEMBER_VERIFICATION_MEMBER_APPLICATIONS: "Member Applications", MEMBER_VERIFICATION_MEMBER_APPLICATION_SETUP: "Application Setup", MEMBER_VERIFICATION_PREVIEW_APPLICATION: "Preview Application", GUILD_JOIN_REQUEST_STATUS_TOOLTIP_STARTED: "Membership Incomplete", GUILD_JOIN_REQUEST_STATUS_TOOLTIP_PENDING: "Membership In Review", GUILD_JOIN_REQUEST_STATUS_TOOLTIP_REJECTED: "Membership Rejected", GUILD_JOIN_REQUEST_STATUS_TOOLTIP_APPROVED: "Membership Approved", COMMUNITY: "Community", GUILD_SETTINGS_COMMUNITY: "Community Settings", GUILD_SETTINGS_COMMUNITY_ENABLE_COMMUNITY: "Enable Community", GUILD_SETTINGS_COMMUNITY_DISABLE_COMMUNITY: "Disable Community", GUILD_SETTINGS_COMMUNITY_DISABLE_COMMUNITY_DIALOG_TITLE: "Disabling Community", GUILD_SETTINGS_COMMUNITY_DISABLE_COMMUNITY_DIALOG_MESSAGE: "Are you sure you want to disable Community?", GUILD_SETTINGS_COMMUNITY_ADMINISTRATOR_ONLY: "Only server administrators are allowed to do this", GUILD_SETTINGS_COMMUNITY_DISABLE_COMMUNITY_DESCRIPTION: "This will remove specific features for Community Servers, like Server Discovery and Server Insights. ", GUILD_SETTINGS_COMMUNITY_UPSELL_HEADER: "Your server is now a Community Server!", GUILD_SETTINGS_COMMUNITY_UPSELL_BODY: "You now have access to additional tools that can help you moderate, run, and grow your server. Check out some of them to get started!", GUILD_SETTINGS_COMMUNITY_UPSELL_BUTTON_WELCOME_SCREEN: "Set up Welcome Screen", GUILD_SETTINGS_COMMUNITY_UPSELL_BUTTON_ONBOARDING: "Set up Onboarding", GUILD_SETTINGS_COMMUNITY_UPSELL_BUTTON_ADMIN_SERVER: "Join Discord's Admin Server", GUILD_SETTINGS_COMMUNITY_UPSELL_BUTTON_DISCOVERY: "Apply for Discovery", GUILD_SETTINGS_COMMUNITY_UPSELL_BUTTON_ANALYTICS: "Check Server Insights", GUILD_SETTINGS_COMMUNITY_RULES_CHANNEL_HELP: "Please select the channel that hosts your rules. This channel will by default start from the top and will feature a special header.", GUILD_SETTINGS_COMMUNITY_RULES_CHANNEL_HELP_MOBILE: "Please select the channel that hosts your rules. This channel will by default start from the top and will feature a special header.", GUILD_SETTINGS_COMMUNITY_MOD_CHANNEL_TITLE: "Community Updates Channel", GUILD_SETTINGS_COMMUNITY_MOD_CHANNEL_HELP: "This is the channel where Discord will send relevant updates for Community admins and moderators. As some info might be sensitive, we recommend selecting a role-restricted channel.", GUILD_SETTINGS_COMMUNITY_MOD_CHANNEL_HELP_MOBILE: "This is the channel where Discord will send updates for Community admins and moderators. ", GUILD_SETTINGS_COMMUNITY_MOD_CHANNEL_SELECTOR_TITLE: "Select a Community Updates channel", GUILD_SETTINGS_COMMUNITY_LOCALE_HELP: "This helps Discord customize features for you and your members.", GUILD_SETTINGS_COMMUNITY_INTRO_HEADER: "Are you building a Community?", GUILD_SETTINGS_COMMUNITY_INTRO_BODY: "Convert your server to a Community Server to access additional administrative tools that can better help you moderate, run, and grow your server.", GUILD_SETTINGS_COMMUNITY_INTRO_BODY_WITH_HELP_ARTICLE: "Convert to a Community Server to access additional administrative tools that help you moderate and grow your server. [Learn more.]({helpdeskArticle})", GUILD_SETTINGS_COMMUNITY_INTRO_DETAILS: "Community Servers are larger spaces where people with shared interests can come together.", GUILD_SETTINGS_COMMUNITY_INTRO_DETAILS_MOBILE: "Community Servers are larger spaces where people with shared interests can come together.", GUILD_SETTINGS_COMMUNITY_INTRO_LEARN_MORE: "Enabling Community does not make your server visible on Server Discovery. [Learn more here.]({helpdeskArticle})", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_DISCOVERY_HEADER: "Grow your community", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_DISCOVERY_BODY: "Apply to be in **$[Server Discovery](featureHook)** so more people can find your server directly on Discord.", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_ANALYTICS_HEADER: "Keep members engaged", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_ANALYTICS_BODY: "Access tools like **$[Server Insights](featureHook) $[info](infoHook)** that can better help you moderate and keep your server engaged.", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_ANALYTICS_BODY_MOBILE: "Access tools like **$[Server Insights](featureHook)** that can better help you moderate and keep your server engaged.", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_ANALYTICS_TOOLTIP: "Only for servers above 500 members", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_STAY_INFORMED_HEADER: "Stay informed", GUILD_SETTINGS_COMMUNITY_INTRO_UPSELL_STAY_INFORMED_BODY: "Get direct updates about new features built for communities from Discord.", GUILD_SETTINGS_COMMUNITY_DISABLE_PUBLIC_CONFIRM_DEFAULT_TITLE: "Are you sure?", GUILD_SETTINGS_PARTNER_DISABLE_PUBLIC_CONFIRM_TEXT: "Are you sure? This will remove this server from the Partner Program.", GUILD_SETTINGS_PARTNER_AND_DISCOVERY_DISABLE_PUBLIC_CONFIRM_TEXT: "Are you sure? This will remove the server from the Partner Program and Server Discovery.", GUILD_SETTINGS_DISCOVERY_DISABLE_PUBLIC_CONFIRM_TEXT: "Disabling Community will also remove your server from Server Discovery.", GUILD_SETTINGS_COMMUNITY_DISABLE_MEMBER_VERIFICATION: "You must disable Member Requirements first before you can disable Community.", GUILD_SETTINGS_COMMUNITY_DISABLE_MEMBER_VERIFICATION_CONFIRM: "Go to Member Requirements", GUILD_SETTINGS_PARTNER_INTRO_HEADER: "Discord Partner Program", GUILD_SETTINGS_PARTNER_PAUSED_INTRO_HEADER: "Discord Partner Program (Currently Paused)", GUILD_SETTINGS_PARTNER_BUTTON_TOOLTIP_PAUSED: "Partner Program applications are currently paused.", GUILD_SETTINGS_PARTNER_INTRO_BODY: "We want to support communities that invest time and effort on Discord. Get rewarded for creating an engaged community with our Partner Program. [Learn more.]({helpdeskArticle})", GUILD_SETTINGS_PARTNER_INTRO_UPSELL_BRANDING_HEADER: "Unique Branding", GUILD_SETTINGS_PARTNER_INTRO_UPSELL_BRANDING_BODY: "Personalize your server with a Custom URL, Server Banner, and Invite Splash.", GUILD_SETTINGS_PARTNER_INTRO_UPSELL_PERKS_HEADER: "Partner-only Perks", GUILD_SETTINGS_PARTNER_INTRO_UPSELL_PERKS_BODY: "Get Discord Nitro, rewards for your community, and access to the Partners-only server.", GUILD_SETTINGS_PARTNER_INTRO_UPSELL_RECOGNITION_HEADER: "Be Recognized", GUILD_SETTINGS_PARTNER_INTRO_UPSELL_RECOGNITION_BODY: "Receive a special badge on your server and stand out from the crowd on our Discovery page.", GUILD_SETTINGS_PARTNER_INTRO_APPLY_BUTTON: "Apply for Partnership", GUILD_SETTINGS_PARTNER_INTRO_APPLY_BUTTON_TOOLTIP_ONLY_OWNER: "Only the server owner can apply.", GUILD_SETTINGS_PARTNER_INTRO_APPLY_BUTTON_TOOLTIP_PENDING: "Your application is pending review.", GUILD_SETTINGS_PARTNER_INTRO_APPLY_BUTTON_TOOLTIP_REJECTED: "Your application has been denied at this time.", GUILD_SETTINGS_PARTNER_INTRO_APPLY_DETAILS: "To apply, refer to the requirements below. Note that these are just the minimum requirements to apply, and acceptance is not guaranteed.\n\nAll Partnered servers must abide by the [Partner Code of Conduct]({helpdeskArticle}).", GUILD_SETTINGS_PARTNER_INTRO_PENDING: "Your server’s Partner application is $[pending review.](pendingHook) We hope to get back to you soon! Make sure to check your email.", GUILD_SETTINGS_PARTNER_INTRO_COOLDOWN: "You must wait two months before you can reapply.", GUILD_SETTINGS_PARTNER_INTRO_COOLDOWN_COUNTER: "You will be able to reapply in {numDays, number} days.", GUILD_SETTINGS_PARTNER_INTRO_REJECTED: "Your server’s Partner application has been $[denied](warningHook) at this time. Check the server owner’s email for more detail.", GUILD_SETTINGS_PARTNER_NOT_VERIFIED: "You must verify your email before you can see the requirements.", GUILD_SETTINGS_PARTNER_CHECKLIST_PASSING_HEADER: "Great work!", GUILD_SETTINGS_PARTNER_CHECKLIST_PASSING_SUBHEADER: "Your server is eligible to apply for the Partner Program.", GUILD_SETTINGS_PARTNER_CHECKLIST_FAILING_HEADER: "Not yet!", GUILD_SETTINGS_PARTNER_CHECKLIST_FAILING_SUBHEADER: "Your server $[is not](warningHook) currently eligible to apply for the Partner Program.", GUILD_SETTINGS_PARTNER_CHECKLIST_SIZE: "{minMembers}+ Members", GUILD_SETTINGS_PARTNER_CHECKLIST_SIZE_FAILING: "Not Enough Members", GUILD_SETTINGS_PARTNER_CHECKLIST_SIZE_DESCRIPTION: "For now, new Partnered servers must have at least {minMembers} members.", GUILD_SETTINGS_PARTNER_CHECKLIST_SIZE_DESCRIPTION_FAILING: "For now, new Partnered servers must have at least {minMembers} members.", GUILD_SETTINGS_PARTNER_CHECKLIST_AGE_DESCRIPTION: "Your server must be at least {minimumGuildAge, plural, one {1 week} other {{minimumGuildAge} weeks}} old.", GUILD_SETTINGS_PARTNER_CHECKLIST_AGE_DESCRIPTION_FAILING: "Your server must be at least {minimumGuildAge, plural, one {1 week} other {{minimumGuildAge} weeks}} old. Please check back on {passDate}.", GUILD_SETTINGS_PARTNER_CHECKLIST_HEALTHY_DESCRIPTION: "Your activity and retention metrics pass the minimum requirements to apply.", GUILD_SETTINGS_PARTNER_CHECKLIST_HEALTHY_DESCRIPTION_PENDING: "Partnered servers must meet basic activity requirements. This takes time to calculate for newer or smaller servers, $[so check back in about a week.](checkBackHook)", GUILD_SETTINGS_PARTNER_CHECKLIST_HEALTHY_DESCRIPTION_PENDING_SIZE: "Partnered servers must meet basic activity requirements. We're unable to calculate this until your server has at least {minMembers} members.", GUILD_SETTINGS_PARTNER_CHECKLIST_HEALTHY_DESCRIPTION_FAILING: "Your server does not currently pass the minimum activity requirements for Partnership.", GUILD_SETTINGS_PARTNER_CHECKLIST_HEALTH_VIEW_DETAILS: "For more details, go to the Partner Program tab in Server Insights.", GUILD_SETTINGS_PARTNER_CHECKLIST_ONBOARDING_NAME: "Set Up Community Onboarding", GUILD_SETTINGS_PARTNER_CHECKLIST_ONBOARDING_DESCRIPTION: "Onboarding creates a welcoming experience for new members and is a great way to help them engage and retain in your community. (This is Optional) [Enable Onboarding in Server Settings](onClick)", ONBOARDING_ADVANCED_MODE_HEADER: "Advanced Server Setup", ONBOARDING_ADVANCED_MODE_TOGGLE: "Switch to Advanced Mode", ONBOARDING_ADVANCED_MODE_ENABLE: "Enable", ONBOARDING_ADVANCED_MODE_DESCRIPTION: "Have an advanced server setup? Enable this mode to meet requirements via Default Channels and Questions combined.", ONBOARDING_DEFAULT_MODE_HEADER: "Disabled Advanced Server Setup", ONBOARDING_DEFAULT_MODE_TOGGLE: "Switch to Regular Mode", ONBOARDING_DEFAULT_MODE_DESCRIPTION: "Return to the regular requirements where 7 Default Channels are needed, 5 of which must be chattable.", GUILD_SETTINGS_DISCOVERY_HEADER: "Grow your community with Server Discovery", GUILD_SETTINGS_DISCOVERY_PAGE_DESCRIPTION: "Getting listed in [Server Discovery](onLinkClick) allows anyone to find and join your server.", GUILD_SETTINGS_DISCOVERY_PAGE_DESCRIPTION_SUBHEADING: "Make a great first impression by following our [Server Discovery guidelines](onGuidelinesClick).", GUILD_SETTINGS_DISCOVERY_PREVIEW_DESCRIPTION: "Tell people what your server's all about with a description!", GUILD_SETTINGS_DISCOVERY_CHECKLIST_LOADING: "Checking if your server passes requirements...", GUILD_SETTINGS_DISCOVERY_REQUIREMENTS_NOT_MET: "Your server does not meet all the requirements.", GUILD_SETTINGS_DISCOVERY_PENDING_HEALTHY: "We're still waiting on your health metrics!", GUILD_SETTINGS_DISCOVERY_CHECKLIST_GOOD_STANDING: "Great work! Your server passes all the requirements to be in Server Discovery.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_DOES_NOT_PASS: "Your server currently **$[does not](doesNotHook)** meet the requirements for Server Discovery", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SAFE: "Safe Environment", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SAFE_FAILING: "Flagged By Trust & Safety", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SAFE_DESCRIPTION: "Thanks for abiding by our Community Guidelines and keeping your server safe!", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SAFE_DESCRIPTION_FAILING_GUIDELINES: "Your server was in violation of our [Terms of Service]({termsURL}) or [Community Server Guidelines]({guidelinesURL}).", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTHY: "Passed Server Activity Requirements", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTHY_PENDING: "Waiting on Server Activity Metrics", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTHY_FAILING: "Failed Server Activity Requirements", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTHY_DESCRIPTION: "Your community metrics look good! Your server has enough members that regularly visit and talk.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTHY_DESCRIPTION_PENDING: "Servers in Discovery must meet certain activity requirements. This takes time to calculate for newer or smaller servers, $[so check back in about a week.](checkBackHook)", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTHY_DESCRIPTION_PENDING_SIZE: "We're unable to calculate your server's activity metrics until your server has at least {minMembers} members. Servers in Discovery must meet certain activity requirements.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTHY_DESCRIPTION_FAILING: "Uh oh, your server does not currently pass our activity requirements.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTH_VIEW_DETAILS: "Click here for more details", GUILD_SETTINGS_DISCOVERY_CHECKLIST_HEALTH_DEFINITIONS_INTRO: "To ensure we're only recommending active servers to Discord users, servers in Discovery are required to have a minimum activity level.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_VISITOR_FAILING_ACTION: "Increase number of weekly visitors", GUILD_SETTINGS_DISCOVERY_CHECKLIST_VISITOR_FAILING_ACTION_DETAILS: "A visitor is someone who has clicked into the server and has viewed at least 1 channel. Try to provide more reasons for members to drop by, like hosting regular community events.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_VISITOR_PROGRESS_LABEL: "avg weekly visitors in your server", GUILD_SETTINGS_DISCOVERY_CHECKLIST_COMMUNICATOR_FAILING_ACTION: "Increase number of weekly communicators", GUILD_SETTINGS_DISCOVERY_CHECKLIST_COMMUNICATOR_FAILING_ACTION_DETAILS: "A communicator is someone who has talked (voice or text) in the server. Hosting community events and seeding discussion topics are great ways to encourage more people to talk.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_COMMUNICATOR_PROGRESS_LABEL: "avg weekly communicators in your server", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SCORE_EXPLAIN: "Calculated as a rolling avg over the past 8 weeks, so changes may take a few weeks to show. Only users who have been on Discord for 8 weeks+ are counted as visitors or communicators.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_ENGAGEMENT_FAILING: "Your server needs more members who visit and talk weekly.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_RETENTION_FAILING: "Your retention is too low. Try improving your new member onboarding experience.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_RETENTION_FAILING_ACTION: "Improve new member experience", GUILD_SETTINGS_DISCOVERY_CHECKLIST_RETENTION_FAILING_ACTION_DETAILS_UPDATED: "Servers that gain more than 10 new members per week are required to have a new member retention of 10%. At least 1 out of 10 new people that join should stick around for a week+.\n\nTake a look at your server through the eyes of a new member. Are there areas where they might get confused and lost?", GUILD_SETTINGS_DISCOVERY_CHECKLIST_RETENTION_PROGRESS_LABEL: "avg new member retention in your server", GUILD_SETTINGS_DISCOVERY_CHECKLIST_PROGRESS_REQUIREMENT_LABEL: "min required", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SIZE: "{minMembers}+ Members", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SIZE_FAIL: "Fewer Than {minMembers} Members", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SIZE_DESCRIPTION_FAILING_PARTNERS: "Unfortunately, Discovery is limited to only servers with more than {minMembers} members.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_SIZE_DESCRIPTION_FAIL: "Your server must have at least {minMembers} members to be eligible.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_NSFW: "No Bad Words", GUILD_SETTINGS_DISCOVERY_CHECKLIST_NSFW_FAILING: "Bad Words Found", GUILD_SETTINGS_DISCOVERY_CHECKLIST_NSFW_DESCRIPTION: "Your server name, description, and channel names look clean!", GUILD_SETTINGS_DISCOVERY_CHECKLIST_2FA: "2FA Requirement For Moderation Enabled ", GUILD_SETTINGS_DISCOVERY_CHECKLIST_CHANGE_CHANNEL_NAMES_2: "You need to change $[one or more channel names](channelHook)", GUILD_SETTINGS_DISCOVERY_CHECKLIST_CHANGE_DESCRIPTION: "You need to change your $[description](descriptionHook)", GUILD_SETTINGS_DISCOVERY_CHECKLIST_CHANGE_NAME: "You need to change your $[server name](nameHook)", GUILD_SETTINGS_DISCOVERY_CHECKLIST_2FA_FAILING: "Please Enable the [2FA Requirement For Moderation] Setting", GUILD_SETTINGS_DISCOVERY_CHECKLIST_2FA_DESCRIPTION: "Members with moderation powers (e.g. admins or mods) are required to have 2FA enabled to perform moderation actions.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_2FA_DESCRIPTION_FAILING: "This setting will require all members with moderation powers to have 2FA enabled before they can perform moderation actions. This can help protect against compromised admin or mod accounts. [Enable at the bottom of the Safety Setup tab.](onClick)", GUILD_SETTINGS_DISCOVERY_CHECKLIST_AGE: "Meets Age Requirement", GUILD_SETTINGS_DISCOVERY_CHECKLIST_AGE_FAILING: "Server Too Young", GUILD_SETTINGS_DISCOVERY_CHECKLIST_AGE_DESCRIPTION: "Servers in Discovery have to be at least {minimumGuildAge, plural, one {1 week} other {{minimumGuildAge} weeks}} old.", GUILD_SETTINGS_DISCOVERY_CHECKLIST_AGE_DESCRIPTION_FAILING: "Servers in Discovery need to be at least {minimumGuildAge, plural, one {1 week} other {{minimumGuildAge} weeks}} old. Please check back on {passDate}.", DISCOVERY: "Discovery", DISCOVERY_LANDING_PAGE: "Server Web Page", DISCOVERY_LANDING_PAGE_DESCRIPTION: "Help people find and join your community more easily with a landing page on [discord.com]({discordURL}). Your page won’t go live until it’s published and can be disabled at any time.", DISCOVERY_LANDING_PAGE_LEARN_MORE: "[Learn more]({learnMoreURL}).", DISCOVERY_LANDING_PAGE_CATEGORY_TITLE: "Category", DISCOVERY_LANDING_PAGE_CATEGORY_DESCRIPTION: "Categories help Discord users discover communities that interest them. If you’ve already set one that you’re happy with, there’s no need to change it.", DISCOVERY_LANDING_PAGE_COVER_IMAGE_DESCRIPTION: "This image will be displayed on both your Discovery Listing and Server Web Page. The recommended minimum size is 1920x1080 and recommended aspect ratio is 16:9.", DISCOVERY_LANDING_PAGE_SERVER_DESCRIPTION: "Let people know what your server is about in one to two lines.", DISCOVERY_LANDING_PAGE_SERVER_DESCRIPTION_HINT: "This server is all about hanging with friends, sharing pet pics, and Gregorian chanting.", DISCOVERY_LANDING_PAGE_ABOUT_TITLE: "About your community", DISCOVERY_LANDING_PAGE_ABOUT_DESCRIPTION: "Describe your community in more depth. What does a prospective member need to know, and why should they join?", DISCOVERY_LANDING_PAGE_ABOUT_HINT: "This server is all about hanging with friends, sharing pet pics, and Gregorian chanting.", DISCOVERY_LANDING_PAGE_REASONS_TO_JOIN_TITLE: "Reasons to join your server", DISCOVERY_LANDING_PAGE_REASONS_TO_JOIN_DESCRIPTION: "What are the fun activities that happen in your community? These will display on your server’s web page.", DISCOVERY_LANDING_PAGE_REASONS_TO_JOIN_PLACEHOLDER_ONE: "ex: We hold weekly study group sessions", DISCOVERY_LANDING_PAGE_REASONS_TO_JOIN_PLACEHOLDER_TWO: "ex: Tips for keeping your house plants healthy", DISCOVERY_LANDING_PAGE_REASONS_TO_JOIN_PLACEHOLDER_THREE: "ex: Feedback on your art", DISCOVERY_LANDING_PAGE_REASONS_TO_JOIN_PLACEHOLDER_FOUR: "ex: Find other players for your group", DISCOVERY_LANDING_PAGE_SOCIAL_LINKS_TITLE: "Social Links", DISCOVERY_LANDING_PAGE_SOCIAL_LINKS_DESCRIPTION: "Display up to 9 of your official social media accounts on your page by linking them here.", DISCOVERY_LANDING_PAGE_SOCIAL_LINKS_DROPDOWN_PLACEHOLDER: "Select a social platform", DISCOVERY_LANDING_PAGE_SOCIAL_LINKS_HINT: "ex: https://twitter.com/discord", DISCOVERY_LANDING_PAGE_SOCIAL_LINKS_BUTTON_ADD_ANOTHER: "Add another", DISCOVERY_LANDING_PAGE_CHECKLIST_TITLE: "Landing Page", DISCOVERY_LANDING_PAGE_CHECKLIST_PUBLISH: "Publish Landing Page", DISCOVERY_LANDING_PAGE_CHECKLIST_REQUIREMENTS: "Requirements", DISCOVERY_LANDING_PAGE_CHECKLIST_UPLOAD_COVER_IMAGE: "Upload a cover image", DISCOVERY_LANDING_PAGE_CHECKLIST_SHORT_DESCRIPTION: "Short description", DISCOVERY_LANDING_PAGE_CHECKLIST_ABOUT: "About your server", DISCOVERY_LANDING_PAGE_CHECKLIST_REASONS: "Reasons to join", DISCOVERY_LANDING_PAGE_DISABLE_TITLE: "Disable landing page", DISCOVERY_LANDING_PAGE_DISABLE_DESCRIPTION: "Removes your landing page from the web. Publishing your page again will reenable it.", DISCOVERY_LANDING_PAGE_DISABLE_BUTTON: "Disable landing page", DISCOVERY_LANDING_PAGE_UPSELL_TITLE: "Server Web Pages", DISCOVERY_LANDING_PAGE_UPSELL_DESCRIPTION: "Showcase your community with your very own webpage!", DISCOVERY_LANDING_PAGE_UPSELL_BUTTON_ACCEPT: "Check it out", DISCOVERY_LANDING_PAGE_UPSELL_BUTTON_DISMISS: "Dismiss", DISCOVERY_LANDING_PAGE_PUBLISHED_URL_TITLE: "Published Page Url", DISCOVERY_LANDING_PAGE_PUBLISHED_URL_VIEW_PAGE_BUTTON: "View Page", GUILD_SETTINGS_ENABLE_DISCOVERABLE: "Enable Discovery", GUILD_SETTINGS_DISABLE_DISCOVERABLE: "Disable Discovery", GUILD_SETTINGS_SET_UP_DISCOVERY: "Set Up Discovery", FORM_HELP_ENABLE_DISCOVERABLE: "This lists your server in Server Discovery, which allows people to find your server via search or recommendations.", FORM_HELP_DISCOVERABLE_CHANGE_TIME: "May take up to 15 minutes to take effect.", FORM_LABEL_DISCOVERY_COVER_IMAGE: "Discovery listing cover image", FORM_HELP_DISCOVERY_COVER_IMAGE: "This image will be displayed on your Discovery Listing. The recommended minimum size is 1920x1080 and recommended aspect ratio is 16:9.", FORM_LABEL_DISCOVERY_RULES_CHANNEL: "Rules or guidelines channel", GUILD_SETTINGS_DISCOVERY_DISQUALIFIED: "This server has been removed from Discovery.", GUILD_SETTINGS_DISABLE_DISCOVERABLE_PERMINENTLY: "Remove Discovery Permanently", GUILD_SETTINGS_DISCOVERY_DISQUALIFIED_DESCRIPTION: "This server has failed to meet the requirements below and has been automatically removed from Discovery. Don't worry, you can rejoin once the server passes all requirements again.\n\nActivity requirements are recalculated weekly.", GUILD_SETTINGS_DISCOVERY_ADMIN_ONLY: "Only server administrators can enable and disable Discovery.", GUILD_SETTINGS_DISCOVERY_LOCALE_HELP: "Discord will prioritize this server in search to users who speak the selected language.", GUILD_SETTINGS_DISCOVERY_PRIMARY_CATEGORY_TITLE: "Server Category", GUILD_SETTINGS_DISCOVERY_PRIMARY_CATEGORY_DESCRIPTION: "Categories help Discord organize servers so that it's easier for people to discover communities that interest them. You can select 1 primary category and up to 5 subcategories.", GUILD_SETTINGS_DISCOVERY_SUBCATEGORY_TITLE: "Subcategories", GUILD_SETTINGS_DISCOVERY_SEARCH_KEYWORDS_TITLE: "Search Keywords", GUILD_SETTINGS_DISCOVERY_SEARCH_KEYWORDS_DESCRIPTION: "You can add up to 10 keywords to help people find your server in search. Keep in mind that search is primarily powered by your server's title and description. Keywords are secondary.\n\nKeywords can be useful if topics or functions of your server have alternative spelling or acronyms (e.g. LoL for League of Legends).", GUILD_SETTINGS_DISCOVERY_EMOJI_DISCOVERABILITY_TITLE: "Show Emoji/Sticker Info When Clicked", GUILD_SETTINGS_DISCOVERY_EMOJI_DISCOVERABILITY_DESCRIPTION: "This allows info to appear when clicking on a custom emoji or sticker from your server in any chat. Users will be able to see and join your server via the information that is displayed.", GUILD_SETTINGS_DISCOVERY_EMOJI_DISCOVERABILITY_ENABLE: "Enable Emoji/Sticker Information", GUILD_SETTINGS_DISCOVERY_EMOJI_DISCOVERABILITY_DISABLE: "Disable Emoji/Sticker Information", CHANNEL_NOTICE_SERVER_DISCOVERY_NEWLY_ELIGIBLE: "Your server is now eligible for Server Discovery!", CHANNEL_NOTICE_SERVER_DISCOVERY_NOT_YET_ELIGIBLE: "Server Discovery is now available to servers with 1K+ members!", CHANNEL_NOTICE_SERVER_DISCOVERY_ALMOST_DONE: "You're almost done setting up Server Discovery", CHANNEL_NOTICE_ELIGIBILITY_CTA: "Check Eligibility", SERVER_DISCOVERY_SETUP_SIDEBAR_HEADLINE: "Get your server ready for Discovery", SERVER_DISCOVERY_DESCRIPTION_PAGE_HEADER: "Describe your server", SERVER_DISCOVERY_DESCRIPTION_PAGE_SUBHEADING: "Let people know what your community is all about", SERVER_DISCOVERY_SERVER_DESCRIPTION_INPUT_SUBLABEL: "This will appear anywhere an invite link is shared, so keep it clean.", SERVER_DISCOVERY_DESCRIPTION: "Description", SERVER_DISCOVERY_CATEGORY: "Category", SERVER_DISCOVERY_SEARCH_SUBHEADING: "Help people find your server in search results", SERVER_DISCOVERY_CATEGORY_INPUT_SUBLABEL: "Choose a subject area that best fits your server.", SERVER_DISCOVERY_SUBCATEGORY_INPUT_LABEL: "Subcategory - optional", SERVER_DISCOVERY_SUBCATEGORY_INPUT_SUBLABEL: "Get more specific, if you want. You can add up to 5.", SERVER_DISCOVERY_TAGS: "Tags", SERVER_DISCOVERY_TAGS_INPUT_SUBLABEL: "In Server Discovery, you can search by name, description, and tags. You can add up to 10.", SERVER_DISCOVERY_TAGS_INPUT_PLACEHOLDER: "Tags go here.", SERVER_DISCOVERY_POPULAR_TAGS: "Popular Tags", SERVER_DISCOVERY_BLOCKED_WORD_LEARN_MORE: "This contains a blocked word. [Learn more](onLearnMoreClick).", SERVER_DISCOVERY_TAGS_ERROR_MSG_DASHES_ONLY: "Dashes are the only special character allowed.", SERVER_DISCOVERY_AGREE_TO_RULES: "Agree to rules", SERVER_DISCOVERY_RULES_FORM_LABEL: "Rules", SERVER_DISCOVERY_RULES_PAGE_SUBHEADING: "Help keep Server Discovery safe for everyone", SERVER_DISCOVERY_RULES_HEALTHY_ENV_HEADING: "Foster a healthy and positive environment", SERVER_DISCOVERY_RULES_HEALTHY_ENV_DESCRIPTION: "Create a welcoming space where harassment, toxicity, and illegal activity is not promoted or tolerated.", SERVER_DISCOVERY_RULES_SEXUAL_CONTENT_HEADING: "Do not host graphic or sexual content", SERVER_DISCOVERY_RULES_SEXUAL_CONTENT_DESCRIPTION: "All server content must be appropriate for ages 13+.", SERVER_DISCOVERY_RULES_COMPLY_GUIDELINES: "Comply with Discord's [Community Guidelines](onCommunityGuidelinesClick) and [Discovery Guidelines](onDiscoveryGuidelinesClick)", SERVER_DISCOVERY_RULES_COMPLY_GUIDELINES_DESCRIPTION: "Violating our policies may result in penalties against your server, including removal from Discovery.", SERVER_DISCOVERY_SETUP_CONFIRMATION_PAGE_HEADER: "Sweet, you made it", SERVER_DISCOVERY_SETUP_CONFIRMATION_PAGE_SUBHEADING: "Your server now looks like this to all of Discord. Need to change something? Head to [Server Settings](onServerSettingsClick).", SERVER_DISCOVERY_TOOLTIP_TITLE: "Grow your community faster", SERVER_DISCOVERY_TOOLTIP_DESCRIPTION: "Servers with {count, number}+ members are now eligible to join Server Discovery.", SERVER_DISCOVERY_SUGGESTED_TAG_BTS: "bts", SERVER_DISCOVERY_SUGGESTED_TAG_COMMUNITY: "community", SERVER_DISCOVERY_SUGGESTED_TAG_EDM: "edm", SERVER_DISCOVERY_SUGGESTED_TAG_ESPORTS: "esports", SERVER_DISCOVERY_SUGGESTED_TAG_FIVEM: "fivem", SERVER_DISCOVERY_SUGGESTED_TAG_FORTNITE: "fortnite", SERVER_DISCOVERY_SUGGESTED_TAG_GAMING: "gaming", SERVER_DISCOVERY_SUGGESTED_TAG_HIPHOP: "hiphop", SERVER_DISCOVERY_SUGGESTED_TAG_KPOP: "kpop", SERVER_DISCOVERY_SUGGESTED_TAG_LEAGUEOFLEGENDS: "leagueoflegends", SERVER_DISCOVERY_SUGGESTED_TAG_METAL: "metal", SERVER_DISCOVERY_SUGGESTED_TAG_MINECRAFT: "minecraft", SERVER_DISCOVERY_SUGGESTED_TAG_MUSIC_PRODUCTION: "music-production", SERVER_DISCOVERY_SUGGESTED_TAG_RAP: "rap", SERVER_DISCOVERY_SUGGESTED_TAG_ROBLOX: "roblox", SERVER_DISCOVERY_SUGGESTED_TAG_ROLEPLAY: "roleplay", SERVER_DISCOVERY_SUGGESTED_TAG_SINGING: "singing", SERVER_DISCOVERY_SUGGESTED_TAG_3D: "3d", SERVER_DISCOVERY_SUGGESTED_TAG_AESTHETIC: "aesthetic", SERVER_DISCOVERY_SUGGESTED_TAG_ANIMATION: "animation", SERVER_DISCOVERY_SUGGESTED_TAG_ANIME: "anime", SERVER_DISCOVERY_SUGGESTED_TAG_APPS: "apps", SERVER_DISCOVERY_SUGGESTED_TAG_ART: "art", SERVER_DISCOVERY_SUGGESTED_TAG_BASKETBALL: "basketball", SERVER_DISCOVERY_SUGGESTED_TAG_BEVERAGE: "beverage", SERVER_DISCOVERY_SUGGESTED_TAG_BITCOIN: "bitcoin", SERVER_DISCOVERY_SUGGESTED_TAG_BODYBUILDING: "bodybuilding", SERVER_DISCOVERY_SUGGESTED_TAG_BOTS: "bots", SERVER_DISCOVERY_SUGGESTED_TAG_CALISTHENICS: "calisthenics", SERVER_DISCOVERY_SUGGESTED_TAG_CLOTHING: "clothing", SERVER_DISCOVERY_SUGGESTED_TAG_CODING: "coding", SERVER_DISCOVERY_SUGGESTED_TAG_COLLEGE: "college", SERVER_DISCOVERY_SUGGESTED_TAG_CROSSFIT: "crossfit", SERVER_DISCOVERY_SUGGESTED_TAG_CRYPTOCURRENCY: "cryptocurrency", SERVER_DISCOVERY_SUGGESTED_TAG_CUTE: "cute", SERVER_DISCOVERY_SUGGESTED_TAG_DEFI: "defi", SERVER_DISCOVERY_SUGGESTED_TAG_DESIGN: "design", SERVER_DISCOVERY_SUGGESTED_TAG_DISCORD_BOT: "discord bot", SERVER_DISCOVERY_SUGGESTED_TAG_DISNEY: "disney", SERVER_DISCOVERY_SUGGESTED_TAG_DISNEYWORLD: "disneyworld", SERVER_DISCOVERY_SUGGESTED_TAG_DRAWING: "drawing", SERVER_DISCOVERY_SUGGESTED_TAG_EDUCATION: "education", SERVER_DISCOVERY_SUGGESTED_TAG_EMOJI: "emoji", SERVER_DISCOVERY_SUGGESTED_TAG_EMOTES: "emotes", SERVER_DISCOVERY_SUGGESTED_TAG_ENGLISH: "english", SERVER_DISCOVERY_SUGGESTED_TAG_ETHEREUM: "ethereum", SERVER_DISCOVERY_SUGGESTED_TAG_EVENTS: "events", SERVER_DISCOVERY_SUGGESTED_TAG_EXERCISE: "exercise", SERVER_DISCOVERY_SUGGESTED_TAG_FANTASY_FOOTBALL: "fantasy-football", SERVER_DISCOVERY_SUGGESTED_TAG_FASHION: "fashion", SERVER_DISCOVERY_SUGGESTED_TAG_FOOD: "food", SERVER_DISCOVERY_SUGGESTED_TAG_FOOTBALL: "football", SERVER_DISCOVERY_SUGGESTED_TAG_FOREX: "forex", SERVER_DISCOVERY_SUGGESTED_TAG_FORMULA1: "formula1", SERVER_DISCOVERY_SUGGESTED_TAG_FRIENDS: "friends", SERVER_DISCOVERY_SUGGESTED_TAG_FUN: "fun", SERVER_DISCOVERY_SUGGESTED_TAG_GITHUB: "github", SERVER_DISCOVERY_SUGGESTED_TAG_GIVEAWAYS: "giveaways", SERVER_DISCOVERY_SUGGESTED_TAG_GYM: "gym", SERVER_DISCOVERY_SUGGESTED_TAG_HARDWARE: "hardware", SERVER_DISCOVERY_SUGGESTED_TAG_HOMEWORK: "homework", SERVER_DISCOVERY_SUGGESTED_TAG_HYPEBEAST: "hypebeast", SERVER_DISCOVERY_SUGGESTED_TAG_INVESTING: "investing", SERVER_DISCOVERY_SUGGESTED_TAG_JAVASCRIPT: "javascript", SERVER_DISCOVERY_SUGGESTED_TAG_LANGUAGE: "language", SERVER_DISCOVERY_SUGGESTED_TAG_LEARNING: "learning", SERVER_DISCOVERY_SUGGESTED_TAG_LGBTQ: "lgbtq", SERVER_DISCOVERY_SUGGESTED_TAG_LINUX: "linux", SERVER_DISCOVERY_SUGGESTED_TAG_MANGA: "manga", SERVER_DISCOVERY_SUGGESTED_TAG_MEMES: "memes", SERVER_DISCOVERY_SUGGESTED_TAG_MENTAL_HEALTH: "mental-health", SERVER_DISCOVERY_SUGGESTED_TAG_NBA: "nba", SERVER_DISCOVERY_SUGGESTED_TAG_NFL: "nfl", SERVER_DISCOVERY_SUGGESTED_TAG_NFT: "nft", SERVER_DISCOVERY_SUGGESTED_TAG_NITRO: "nitro", SERVER_DISCOVERY_SUGGESTED_TAG_NUTRITION: "nutrition", SERVER_DISCOVERY_SUGGESTED_TAG_OPENSOURCE: "opensource", SERVER_DISCOVERY_SUGGESTED_TAG_OPTIONS: "options", SERVER_DISCOVERY_SUGGESTED_TAG_PHOTOGRAPHY: "photography", SERVER_DISCOVERY_SUGGESTED_TAG_PREMIER_LEAGUE: "premier-league", SERVER_DISCOVERY_SUGGESTED_TAG_PROGRAMMING: "programming", SERVER_DISCOVERY_SUGGESTED_TAG_RACING: "racing", SERVER_DISCOVERY_SUGGESTED_TAG_REDDIT: "reddit", SERVER_DISCOVERY_SUGGESTED_TAG_SCHOOL: "school", SERVER_DISCOVERY_SUGGESTED_TAG_SELF_IMPROVEMENT: "self-improvement", SERVER_DISCOVERY_SUGGESTED_TAG_SNACKS: "snacks", SERVER_DISCOVERY_SUGGESTED_TAG_SNEAKERS: "sneakers", SERVER_DISCOVERY_SUGGESTED_TAG_SOCCER: "soccer", SERVER_DISCOVERY_SUGGESTED_TAG_SOCIAL: "social", SERVER_DISCOVERY_SUGGESTED_TAG_SOFTWARE: "software", SERVER_DISCOVERY_SUGGESTED_TAG_SPORTS: "sports", SERVER_DISCOVERY_SUGGESTED_TAG_STOCKS: "stocks", SERVER_DISCOVERY_SUGGESTED_TAG_STREAMER: "streamer", SERVER_DISCOVERY_SUGGESTED_TAG_STREETWEAR: "streetwear", SERVER_DISCOVERY_SUGGESTED_TAG_STUDY: "study", SERVER_DISCOVERY_SUGGESTED_TAG_STYLE: "style", SERVER_DISCOVERY_SUGGESTED_TAG_SUPPORT: "support", SERVER_DISCOVERY_SUGGESTED_TAG_SUPREME: "supreme", SERVER_DISCOVERY_SUGGESTED_TAG_TECH: "tech", SERVER_DISCOVERY_SUGGESTED_TAG_TRADING: "trading", SERVER_DISCOVERY_SUGGESTED_TAG_TRAVEL: "travel", SERVER_DISCOVERY_SUGGESTED_TAG_TWITCH: "twitch", SERVER_DISCOVERY_SUGGESTED_TAG_VALORANT: "valorant", SERVER_DISCOVERY_SUGGESTED_TAG_YEEZY: "yeezy", SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE: "youtube", CHANNELS: "Channels", SORT: "Sort", SORTING: "Sorting", REORDERING_CHANNELS: "Reordering Channels", REORDER: "Reorder", SELECT_SORT_MODE: "Select Sort Mode", GUILD_SECURITY_REQ_MFA_LABEL: "Require 2FA for moderator actions", GUILD_SECURITY_REQ_MFA_BODY: "When enabled, this requires members with moderation powers to have two-factor authentication enabled on their account in order to take moderation actions (e.g. kick, ban, and delete message). This can help prevent malicious people who compromise a mod or admin's account from taking destructive actions. **This setting can only be changed by the server owner if they have 2FA enabled on their account**.", GUILD_SETTINGS_REQ_MFA_LABEL: "Require 2FA for moderator actions", GUILD_SETTINGS_REQ_MFA_BODY: "Moderators must have two-factor authentication enabled to ban, kick, or timeout members and delete messages. Only the server owner can change this setting if they have 2FA enabled.", GUILD_SETTINGS_REQ_MFA_TOOLTIP: "In order to change this setting, you must have 2FA enabled on your account. [Enable it here.](onClick)", GUILD_SECURITY_REQ_MFA_ENABLE: "[Enable on your account.](onClick)", GUILD_SECURITY_REQ_MFA_TURN_ON: "Enable 2FA Requirement", GUILD_SECURITY_REQ_MFA_TURN_OFF: "Disable 2FA Requirement", GUILD_SECURITY_REQ_MFA_GUILD_ENABLE: "Enable 2FA Requirement", GUILD_SECURITY_REQ_MFA_GUILD_DISABLE: "Disable 2FA Requirement", GUILD_SECURITY_REQ_OWNER_ONLY: "Only the server owner is allowed to do this", INTEGRATIONS: "Integrations", INTEGRATION_SETTINGS: "Integration Settings", MANAGE_INTEGRATION: "Manage Integration", SYNC: "Sync", NO_INTEGRATIONS_LABEL: "Looking for more?", NO_INTEGRATIONS_BODY: "Manage apps, followed channels, and other integrations from the desktop app or web browser.", FORM_LABEL_SUB_EXPIRE_BEHAVIOR: "Expired Sub Behavior", FORM_LABEL_MEMBERSHIP_EXPIRE_BEHAVIOR: "Expired Membership Behavior", KICK_FROM_SERVER: "Kick", FORM_LABEL_CUSTOM_TWITCH_EMOTICON: "Custom Twitch Emoticons", ENABLE_TWITCH_EMOJI_SYNC: "Allow synced subscribers to use your Twitch Custom Emoticons in Discord.", REMOVE_SYNCED_ROLE: "Remove Role", FORM_LABEL_EXPIRE_GRACE_PERIOD: "Grace Period", N_DAYS: "{days, plural, one {1 day} other {{days} days}}", FORM_LABEL_SYNCED_ROLE: "Synced Role", FORM_LABEL_SYNCED_SUBS: "Synced Subs", FORM_LABEL_SYNCED_MEMBERS: "Synced Members", NUM_SUBSCRIBERS: "\n{subscribers, plural, =0 {**0** subscribers} one {**1** subscriber} other {**{subscribers}** subscribers}}", NUM_MEMBERS: "\n{subscribers, plural, =0 {**0** members} one {**1** member} other {**{subscribers}** members}}", LAST_SYNC: "last sync: {datetime}", SYNC_REVOKED: "Sync connection revoked! {user} must reconnect to {platformName} in their user settings.", DISABLE_INTEGRATION_TITLE: "Disable Sync", DISABLE_INTEGRATION_TWITCH_BODY: "\nDisabling sync will perform the selected expired sub behavior as if all subs have expired.\n", DISABLE_INTEGRATION_YOUTUBE_BODY: "\nDisabling sync will perform the selected expired membership behavior as if all members have expired.\n", FORCE_SYNC: "Force Sync", SYNC_THIS_ACCOUNT: "Sync this account", SUBSCRIBER_INFORMATION: "Subscriber Information", BANS_HEADER: "{bans, plural, =0 {No Bans} one {1 Ban} other {{bans} Bans}}", BANS_HEADER_NEW: "Server Ban List", BANS_SEARCH_PLACEHOLDER: "Search Bans", BANS_SEARCH_PLACEHOLDER_NEW: "Search Bans by User Id or Username", UNBAN: "Unban", UNBAN_USER_TITLE: "Unban '!!{user}!!'", BANS_HINT: "\nBans by default are by account and IP.\nA user can circumvent an IP ban by using a proxy.\nBan circumvention can be made very hard by enabling phone verification in [Moderation](onModerationClick).\n", BANS_NO_RESULTS: "We looked as hard as we could, but no banned users were found matching that search.", BANS_NO_USERS_BANNED: "\nYou haven't banned anybody...\nbut if and when you must, do not hesitate!\n", NO_BANS: "No Bans", BAN_REASON: "Ban Reason", NO_BAN_REASON: "No reason provided", REVOKE_BAN: "Revoke Ban", GUILD_SETTINGS_MEMBERS_SERVER_MEMBERS: "Server Members", GUILD_SETTINGS_MEMBERS_DISPLAY_ROLE: "Display role:", GUILD_SETTINGS_MEMBERS_REMOVE_ROLE: "Remove role !!{roleName}!!", GUILD_SETTINGS_MEMBERS_ADD_ROLE: "Add role", ADD_ROLE_PLACEHOLDER: "Role", ADD_ROLE_A11Y_LABEL: "Add Role", KICK: "Kick", KICK_USER: "Kick !!{user}!!", BAN: "Ban", BAN_USER: "Ban !!{user}!!", MEMBERS_HEADER: "{members, plural, =0 {No Members} one {1 Member} other {{members} Members}}", MEMBERS_SEARCH_PLACEHOLDER: "Search Members", GUILD_MEMBERS_SEARCH_NO_RESULT: "No members were found.", PRUNE_MEMBERS: "Prune Members", MEMBER_LIST_SERVER_OWNER_HELP: "This person is the server owner and always has all permissions regardless of roles.", CANNOT_MANAGE_IS_OWNER: "This person owns the server, so you cannot manage them.", CANNOT_MANAGE_HIGHER_RANK: "This person has a higher role than you, so you cannot manage them.", CANNOT_MANAGE_SAME_RANK: "This person's highest role is the same as yours, so you cannot manage them.", ADMINISTRATIVE: "Administrative", EDIT_USER: "Edit !!{user}!!", GUILD_SETTINGS_TITLE_SERVER_WIDGET: "Server Widget", GUILD_SETTINGS_WIDGET_ENABLE_WIDGET: "Enable Server Widget", NO_INSTANT_INVITE: "No Invite", FORM_LABEL_INSTANT_INVITE_CHANNEL: "Invite Channel", FORM_HELP_INSTANT_INVITE_CHANNEL: "\nIf a channel is selected then an invite link will be generated with the widget,\notherwise only online members and voice channels will be provided.\n ", FORM_LABEL_SERVER_ID: "Server ID", FORM_LABEL_PREMADE_WIDGET: "Premade Widget", GUILD_SETTINGS_WIDGET_EMBED_HELP: "\nEmbed this HTML on your website to use Discord's beautiful pre-made widget.\n\nIf you have access to your site's users then you can dynamically add &username= to the querystring.", FORM_LABEL_JSON_API: "JSON API", MANAGE_USER: "Manage User", MANAGE_USER_SHORTHAND: "Manage", HELP_ROLES_DESCRIPTION: "Use Roles to organize your server members and customize their permissions. You can assign Roles in the [Members](onMembersClick) page.", HELP_ROLE_LOCKED: "Role is locked because it is a higher rank than your highest role.", HELP_ROLE_LOCKED_MINE: "Role is locked because it is your highest ranked role. Please ask a higher rank or Server Owner for help.", HELP_MISSING_MANAGE_ROLES_PERMISSION: "Role is locked because you do not have the Manage Roles permission.", HELP_MISSING_PERMISSION: "You cannot modify this permission because none of your roles have it.", HELP_SINGULAR_PERMISSION: "You cannot modify this permission because removing it would remove it from you.", HELP_CLEAR_PERMISSIONS: "You cannot clear permissions because it would remove one or more permissions from you.", FORM_LABEL_ROLE_ADD: "Add role", FORM_LABEL_MEMBER_ADD: "Add member", FORM_LABEL_ROLE_NAME: "Role name", FORM_LABEL_ROLE_ENTER_NAME: "You must provide a role name.", FORM_LABEL_ROLE_DESCRIPTION: "Description", FORM_LABEL_ROLE_DESCRIPTION_INFO: "Description will be displayed under role name in Linked Roles", FORM_LABEL_ROLE_COLOR: "Role color", FORM_LABEL_ROLE_ICON: "Role icon", FORM_LABEL_ROLE_ICON_SUBTITLE_MOBILE: "You can edit this on desktop", FORM_LABEL_ROLE_SETTINGS: "Role settings", FORM_LABEL_DISABLED_FOR_EVERYONE: "Disabled for @everyone", FORM_LABEL_HOIST_DESCRIPTION: "Display role members separately from online members", FORM_LABEL_MENTIONABLE: "Allow anyone to **@mention** this role", FORM_LABEL_MENTIONABLE_DESCRIPTION: 'Note: Members with the "Mention @everyone, @here, and All Roles" permission will always be able to ping this role.', FORM_LABEL_ROLES_PRO_TIP: "Protip", ADMINISTRATOR_DESCRIPTION: "\nMembers with this permission have every permission and also bypass channel specific permissions. This is a dangerous\npermission to grant.\n", VIEW_AUDIT_LOG_DESCRIPTION: "Members with this permission have access to view the server's audit logs", MANAGE_SERVER_DESCRIPTION: "Members with this permission can change the server's name or move regions.", MANAGE_ROLES_DESCRIPTION: "\nMembers with this permission can create new roles and edit/delete roles lower than this one.\n ", MANAGE_WEBHOOKS_DESCRIPTION: "Members with this permission can create, edit, and delete webhooks.", MANAGE_CHANNELS_DESCRIPTION: "Members with this permission can create new channels and edit or delete existing ones.", PRIORITY_SPEAKER_DESCRIPTION: "\nUsers with this permission have the ability to be more easily heard when talking. When activated,\nthe volume of others without this permission will be automatically lowered.\n", MANAGED_ROLE_EXPLAINATION: "\nThis role is automatically managed by an integration.\nIt cannot be manually assigned to members or deleted.\n", MANAGED_ROLE_PREMIUM_SUBSCRIBER_EXPLANATION: "This role is automatically managed by Discord for Server Boosting. It cannot be manually assigned to members or deleted.", MANAGED_ROLE_INTEGRATION_LINKED_EXPLANATION: "This role is managed by an integration: $[!!{name}!!](integrationNameHook). It cannot be manually assigned to members. You can remove the integration to remove this role.", MANAGED_ROLE_GUILD_CONNECTIONS_EXPLANATION: "Members are automatically assigned to this role. It cannot be manually assigned to or removed from members.", CHANGE_NICKNAME_DESCRIPTION: "Members with this permission can change their own nickname.", MANAGE_NICKNAMES_DESCRIPTION: "Members with this permission can change nicknames of other members.", DELETE_ROLE: "Delete !!{name}!!", VIEW_GUILD_ANALYTICS_DESCRIPTION: "Members with this permission can view the server's insights.", DELETE_ROLE_MOBILE: "Delete Role", PICK_A_COLOR: "Pick a Color", PICK_A_COLOR_FROM_THE_PAGE: "Pick a color from the page", EDIT_ROLES: "Edit Roles", ROLE_COLOR: "Role Color", ROLE_ORDER_UPDATED: "Role order updated.", ROLE_ID_COPIED: "Copied id for role: {role}", NEW_ROLE: "new role", ROLE_ICON_ALT_TEXT: "Role icon, {name}", EMOJI_SLOTS_AVAILABLE: "{count, plural, =0 {no slots} one {{count} slot} other {{count} slots}} available", UPLOAD_EMOJI: "Upload Emoji", UPLOAD_EMOJI_INSTRUCTIONS: "Drop emoji to upload them.", UPLOADED_BY: "Uploaded By", SERVER_EMOJI: "Server Emoji", ANIMATED_EMOJI: "Animated Emoji", NO_EMOJI: "Get the party started by uploading an emoji", NO_EMOJI_TITLE: "No Emoji", NO_EMOJI_BODY: "None", TOO_MANY_EMOJI: "You are out of emoji slots.", TOO_MANY_ANIMATED_EMOJI: "You are out of animated emoji slots.", EMOJI_TOO_BIG: "That emoji was too big! Emoji must be under {maxSize} KB.", EMOJI_DISABLED_PREMIUM_TIER_LOST: "Requires higher Server Boost Level", EMOJIS_TITLE: "{count, plural, =0 {no emoji} one {{count} emoji} other {{count} emoji}}", NO_INVITES_LABEL: "No invites yet", NO_INVITES_BODY: "\nFeeling aimless? Like a paper plane drifting through the skies?\nGet some friends in here by creating an invite link!\n", PUBLIC_RULES_CHANNEL_TITLE: "Rules Channel", PUBLIC_RULES_SELECTOR_TITLE: "Select a Rules Channel", PUBLIC_UPDATES_CHANNEL_TITLE: "Mod-only Channel", PUBLIC_LOCALE_TITLE: "Primary Language", PUBLIC_LOCALE_HELP: "Discord will prioritize this server in search and in recommendations to users who speak the selected language.", PUBLIC_LOCALE_SELECTOR_TITLE: "Select a Primary Language", NO_INVITES_CAPTION: "No invites yet!", NONE: "None", INTEGRATION_ADDED_USER: "Added by !!{user}!!", INTEGRATION_ADDED_DATE: "Added on {timestamp, date, medium}", INTEGRATION_ADDED_USER_DATE: "Added on {timestamp, date, medium} by !!{user}!!", INTEGRATION_CREATED_DATE: "Created on {timestamp, date, medium}", INTEGRATION_CREATED_USER_DATE: "Created on {timestamp, date, medium} by !!{user}!!", INTEGRATIONS_OVERVIEW: "Integrations", INTEGRATIONS_OVERVIEW_DESCRIPTION_GUILD: "Customize your server with integrations. Manage webhooks, followed channels, and apps, as well as Twitch and YouTube settings for creators. [Learn more about managing integrations.]({helpdeskArticle})", INTEGRATIONS_OVERVIEW_DESCRIPTION_CHANNEL: "Customize your server with integrations. Manage webhooks and followed channels that post into this channel. [Learn more about managing integrations.]({helpdeskArticle})", INTEGRATIONS_OVERVIEW_NO_APPLICATIONS: "You don't have any apps yet!", INTEGRATIONS_OVERVIEW_NO_APPLICATIONS_APP_DIRECTORY_CTA: "Visit the [App Directory](handleGoToAppDirectory) to add apps to your server", INTEGRATIONS_APPLICATION_SECTION: "Bots and Apps", INTEGRATIONS_APPLICATION_BUTTON: "Manage", INTEGRATIONS_APPLICATION_BOT: "Bot", INTEGRATIONS_APPLICATION_VERIFIED_BOT: "Verified App", INTEGRATIONS_APPLICATION_BOT_NAME: "!!{user}!!", INTEGRATIONS_APPLICATION_NO_BOT: "This application does not have a bot in this server.", INTEGRATIONS_APPLICATION_REMOVE: "Remove App", INTEGRATIONS_APPLICATION_REMOVE_SUMMARY: "Removing this integration will remove any apps (including bots and webhooks) on this page from your server. This action cannot be undone.", INTEGRATIONS_APPLICATION_REMOVE_NO_PERMISSIONS: "You do not have permissions to remove this integration.", INTEGRATIONS_APPLICATION_REMOVE_TITLE: "Remove !!{applicationName}!!", INTEGRATIONS_APPLICATION_REMOVE_BODY: "\nAre you sure you want to remove **!!{applicationName}!!**?\n", INTEGRATIONS_APPLICATION_REMOVE_ERROR_TITLE: "Error Removing Bot", INTEGRATIONS_APPLICATION_REMOVE_ERROR: "An internal server error has occurred.", INTEGRATIONS_APPLICATION_WEBHOOKS: "Webhooks", INTEGRATIONS_APPLICATION_APPLICATION_WEBHOOK_PERMISSIONS: "You don't have permission to manage this application's webhooks.", INTEGRATIONS_APPLICATION_NO_WEBHOOKS: "This application has no webhooks in this server.", INTEGRATIONS_APPLICATION_GRANTED_PERMISSIONS: "Granted permissions", INTEGRATIONS_APPLICATION_DENIED_PERMISSIONS: "Denied permissions", INTEGRATIONS_APPLICATION_NO_COMMANDS: "This application has no commands.", INTEGRATIONS_APPLICATION_ALL_CHANNELS: "All Channels", INTEGRATIONS_APPLICATION_COMMAND_PERMISSIONS: "Command Permissions", INTEGRATIONS_APPLICATION_COMMAND_PERMISSIONS_DESCRIPTION: "Restrict usage of this application's commands to roles, users, and channels.", INTEGRATIONS_APPLICATION_COMMAND_CHANNEL_SEARCH_PLACEHOLDER: "e.g. #general", INTEGRATIONS_APPLICATION_COMMAND_CHANNEL_ADD_BUTTON: "Add Channels", INTEGRATIONS_APPLICATION_COMMAND_ROLE_MEMBER_ADD: "Roles & Members", INTEGRATIONS_APPLICATION_COMMAND_ROLE_MEMBER_ADD_BUTTON: "Add Roles or Members", INTEGRATIONS_APPLICATION_COMMAND_ROLE_MEMBER_SEARCH_PLACEHOLDER: "e.g. Moderators, @wumpus", INTEGRATIONS_APPLICATION_COMMAND_PERMISSIONS_MODIFY: "Modify Command Permissions", INTEGRATIONS_APPLICATION_COMMAND_STATUS_HAS_OVERRIDES: "Has Overrides", INTEGRATIONS_APPLICATION_COMMAND_OVERRIDE_SECTION_ROLE_MEMBER_HEADER: "Role & Member Overrides", INTEGRATIONS_APPLICATION_COMMAND_OVERRIDE_SECTION_ROLE_MEMBER_NO_ENTRIES: "This command has no role or member overrides", INTEGRATIONS_APPLICATION_COMMAND_OVERRIDE_SECTION_CHANNEL_HEADER: "Channel Overrides", INTEGRATIONS_APPLICATION_COMMAND_OVERRIDE_SECTION_CHANNEL_NO_ENTRIES: "This command has no channel overrides", INTEGRATIONS_APPLICATION_COMMAND_DEFAULT_MEMBER_PERMISSIONS_SECTION_HEADER: "Command Restrictions", INTEGRATIONS_APPLICATION_COMMAND_DEFAULT_MEMBER_PERMISSIONS_SECTION_DESCRIPTION: "Members **need server permissions** to use this command. To override this, add members or roles below.", INTEGRATIONS_APPLICATION_COMMAND_DEFAULT_MEMBER_PERMISSIONS_MODAL_HEADER: "Required Permissions", INTEGRATIONS_APPLICATION_COMMAND_DEFAULT_MEMBER_PERMISSIONS_MODAL_ARIA_LABEL: "Modal showing the permissions required by a user to use the command by default", INTEGRATIONS_APPLICATION_PERMISSIONS_LOCKED_APPLICATION: "Cannot modify configurations due to not having access to this application", INTEGRATIONS_APPLICATION_PERMISSIONS_LOCKED_COMMAND: "Cannot modify configurations due to not having access to this command", INTEGRATIONS_APPLICATION_PERMISSIONS_LOCKED_USER_SELF: "Cannot modify permission to deny yourself access!", INTEGRATIONS_APPLICATION_PERMISSIONS_LOCKED_USER_OTHER: "Cannot modify permission to explicitly deny a user with a higher role than you!", INTEGRATIONS_APPLICATION_PERMISSIONS_LOCKED_ROLE: "Cannot modify permission to explicitly deny a role higher or equal to your highest role!", INTEGRATIONS_APPLICATION_PERMISSIONS_SELF_DENY_MODAL_MESSAGE_REMOVE_SELF: "You cannot remove the permission for **yourself** because it will remove your access. Grant access to a role you have or allow @everyone before trying again.", INTEGRATIONS_APPLICATION_PERMISSIONS_SELF_DENY_MODAL_MESSAGE_REMOVE_ROLE: "You cannot remove the permission for **!!{name}!!** because it will remove your access as well. Grant access to another role or yourself before trying again.", INTEGRATIONS_APPLICATION_PERMISSIONS_SELF_DENY_MODAL_MESSAGE_DENY_ROLE: "You cannot deny access for **!!{name}!!** because it will remove your access as well. Grant access to another role or yourself before trying again.", INTEGRATIONS_APPLICATION_PERMISSIONS_MAX: "You have reached the maximum number of permission overrides.", INTEGRATIONS_APPLICATION_PERMISSIONS_NOTICE_TEXT: "You're at the maximum number of permissions. Remove {removeCount, number} of them to make further changes.", INTEGRATIONS_APPLICATION_PERMISSION_ENTRY_REMOVE_ARIA_LABEL: "Remove this permission configuration entry", INTEGRATIONS_APPLICATION_SUBSCRIPTION_TIERS: "Subscription Tiers", INTEGRATIONS_TWITCH: "Twitch", INTEGRATIONS_TWITCH_SUMMARY: "{count, plural, one {1 connected account} other {{count, number} connected accounts}}", INTEGRATIONS_TWITCH_EMPTY_SUMMARY: "Sync your subscribers to roles and unlock your Twitch emotes", INTEGRATIONS_TWITCH_DESCRIPTION: "Link your Twitch account to automatically sync your Twitch subs to roles in this server. You can also let your subs use your Twitch emotes globally in Discord.", INTEGRATIONS_TWITCH_BUTTON: "Manage", INTEGRATIONS_TWITCH_EMPTY_BUTTON: "Connect Twitch", INTEGRATIONS_TWITCH_HELP: "[Connect](connectAction) your partnered or affiliate Twitch account to add it to this server. [Learn more.]({helpdeskArticle})", INTEGRATIONS_YOUTUBE: "YouTube", INTEGRATIONS_YOUTUBE_SUMMARY: "{count, plural, one {1 connected account} other {{count, number} connected accounts}}", INTEGRATIONS_YOUTUBE_EMPTY_SUMMARY: "Sync your channel members to roles and create an exclusive experience", INTEGRATIONS_YOUTUBE_DESCRIPTION: "Link your YouTube account to automatically sync your YouTube channel members to roles in this server. Create an exclusive experience just for your channel members. YouTube integrations are only available for partnered YouTube accounts.", INTEGRATIONS_YOUTUBE_BUTTON: "Manage", INTEGRATIONS_YOUTUBE_EMPTY_BUTTON: "Connect YouTube", INTEGRATIONS_YOUTUBE_HELP: "[Connect](connectAction) your partnered YouTube account to add it to this server. [Learn more.]({helpdeskArticle})", INTEGRATIONS_ACCOUNT_DESCRIPTION: "Enable {serviceName} integration for [!!{accountUrlText}!!]({accountUrl})", INTEGRATIONS_LAST_SYNC: "Last synced: {datetime}", INTEGRATIONS_ENABLE: "Enable", INTEGRATIONS_DISABLE: "Disable Integration", INTEGRATIONS_CHANNEL_FOLLOWING: "Channels Followed", INTEGRATIONS_CHANNEL_FOLLOWING_SUMMARY: "{count, plural, one {1 channel} other {{count, number} channels}}", INTEGRATIONS_CHANNEL_FOLLOWING_DESCRIPTION: "Updates from these announcement channels will get sent directly into your server. [Learn more.]({helpdeskArticle})", INTEGRATIONS_CHANNEL_FOLLOWING_SECTION: "Posting to $[](channelHook)", INTEGRATIONS_CHANNEL_FOLLOWING_BUTTON: "View Channels", INTEGRATIONS_CHANNEL_FOLLOWING_EMPTY: "You're not following any channels", INTEGRATIONS_CHANNEL_FOLLOWING_EMPTY_BUTTON: "Learn More", INTEGRATIONS_FOLLOWED_CHANNEL_DELETE_TITLE: "Unfollow !!{name}!!", INTEGRATIONS_FOLLOWED_CHANNEL_DELETE_BODY: "Are you sure you want to unfollow this channel? You can refollow it in the future by visiting the server it's from.", INTEGRATIONS_FOLLOWED_CHANNEL_ERROR_DELETING: "Error Removing Followed Channel", INTEGRATIONS_FOLLOWED_CHANNEL_DEST_CHANNEL: "Post To", INTEGRATIONS_FOLLOWED_CHANNEL_NAME: "Announcement Name", INTEGRATIONS_FOLLOWED_CHANNEL_DELETE: "Unfollow", INTEGRATIONS_FOLLOWED_CHANNEL_GUILD_SOURCE: "from $[](guildHook)", INTEGRATIONS_WEBHOOKS: "Webhooks", INTEGRATIONS_WEBHOOKS_SUMMARY: "{count, plural, one {1 webhook} other {{count, number} webhooks}}", INTEGRATIONS_WEBHOOKS_DESCRIPTION: 'Webhooks are a simple way to post messages from other apps and websites into Discord using internet magic. [Learn more]({helpdeskArticle} "Learn more about webhooks"), or try [building one yourself.]({developersArticle})', INTEGRATIONS_WEBHOOKS_BUTTON: "View Webhooks", INTEGRATIONS_WEBHOOKS_EMPTY: "You have no webhooks!", INTEGRATIONS_WEBHOOKS_EMPTY_BUTTON: "Create Webhook", INTEGRATIONS_WEBHOOKS_CREATE: "New Webhook", INTEGRATIONS_WEBHOOK_COPY_URL: "Copy Webhook URL", INTEGRATIONS_WEBHOOK_COPIED_URL: "Copied!", INTEGRATIONS_WEBHOOK_DELETE: "Delete Webhook", INTEGRATIONS_SEARCH: "Search installed apps", INTEGRATIONS_SEARCH_NO_MATCH: "No installed apps matched your search.", AI_GENERATED_TOOLTIP: "Generated by AI", MODERATION: "Moderation", SAFETY_SETUP: "Safety Setup", WEBHOOKS: "Webhooks", WEBHOOK_CREATE: "Create Webhook", WEBHOOK_CREATED_ON: "!!{username}!! on {timestamp, date, medium}", WEBHOOK_CANCEL: "Cancel", WEBHOOK_DELETE: "Delete", WEBHOOK_DELETE_TITLE: "Delete !!{name}!!", WEBHOOK_DELETE_BODY: "\nAre you sure you want to delete the **!!{name}!!** webhook? This action cannot be undone.\n", WEBHOOK_FORM_NAME: "Name", WEBHOOK_ERROR_CREATING_WEBHOOK: "Error Creating Webhook", WEBHOOK_ERROR_CREATING_WEBHOOK_RATE_LIMIT: "You're creating webhooks too quickly! Slow down.", WEBHOOK_ERROR_DELETING_WEBHOOK: "Error Deleting Webhook", WEBHOOK_ERROR_DELETING_WEBHOOK_RATE_LIMIT: "You're deleting webhooks too quickly! Slow down.", WEBHOOK_ERROR_MAX_WEBHOOKS_REACHED: "You have reached the maximum number of webhooks.", WEBHOOK_ERROR_INTERNAL_SERVER_ERROR: "An internal server error has occurred.", WEBHOOK_FORM_URL: "Webhook URL", FORM_LABEL_NOTIFICATION_FREQUENCY: "Frequency", FORM_LABEL_SERVER_NOTIFICATION_SETTINGS: "Server Notification Settings", FORM_LABEL_SUPPRESS_EVERYONE: "Suppress **@everyone** and **@here**", FORM_LABEL_SUPPRESS_ROLES: "Suppress All Role @mentions", FORM_LABEL_MUTE_SCHEDULED_EVENTS: "Mute New Events", FORM_LABEL_UNMUTE_SCHEDULED_EVENTS: "Unmute New Events", FORM_LABEL_MUTE_SERVER: "Mute **!!{name}!!**", FORM_LABEL_UNMUTE_SERVER: "Unmute **!!{name}!!**", FORM_LABEL_MUTE_SERVER_DESCRIPTION: "\nMuting a server prevents unread indicators and notifications from appearing unless you are mentioned.\n", FOR_LABEL_MUTE_SEVER_DESCRIPTION_V2: "Muting prevents unread badges and notifications from appearing unless you are mentioned.", FORM_LABEL_MUTE_SERVER_DESCRIPTION_NEW: "Muting a server suppresses notifications but unread indicators will still be visible if you're mentioned.", FORM_LABEL_MOBILE_PUSH_NOTIFICATIONS: "Mobile Push Notifications", FORM_LABEL_ALL_MESSAGES: "All Messages", FORM_LABEL_ALL_VOICE_ACTIVITY: "All Voice Activity", FORM_LABEL_ONLY_MENTIONS: "Only **@mentions**", FORM_LABEL_ONLY_TEXT_MENTIONS: "Only Text **@mentions**", FORM_LABEL_ONLY_MENTIONS_PLAIN: "Only @mentions", FORM_LABEL_NOTHING: "Nothing", FORM_LABEL_ALL_MESSAGES_SHORT: "All", FORM_LABEL_ONLY_MENTIONS_SHORT: "@mentions", FORM_LABEL_MUTED: "Muted", FORM_LABEL_CHANNEL_NOTIFCATION_SETTINGS: "Channel Notification Settings", FORM_LABEL_DEFAULT: "Use Server Default", FORM_LABEL_DEFAULT_CATEGORY: "Use Category Default", FORM_LABEL_ALL: "All", FORM_LABEL_OFF: "Off", FORM_LABEL_DESKTOP_ONLY: "Desktop", FORM_LABEL_MENTIONS: "Mentions", FORM_LABEL_LIVE_STAGES_ONLY: "All Live Stages", RESET: "Reset", LARGE_GUILD_NOTIFY_ALL_MESSAGES_DESCRIPTION: "Due to this server's size, you won't get mobile push notifications for non-@mention messages.", NOTIFICATION_SETTINGS_PRESETS: "Notifications Presets", NOTIFICATION_SETTINGS_ADVANCED: "Advanced", NOTIFICATION_SETTINGS_PRESETS_ALL_MESSAGES: "All Messages", NOTIFICATION_SETTINGS_PRESETS_MENTION_ONLY: "Mention Only", NOTIFICATION_SETTINGS_PRESETS_NONE: "None", NOTIFICATION_SETTINGS_PRESETS_UNREAD_TITLE: "Unread Badges", NOTIFICATION_SETTINGS_PRESETS_UNREAD_SUBTITLE: "Highlighted channel name and half dot", NOTIFICATION_SETTINGS_PRESETS_NOTIFICATION_TITLE: "Notifications", NOTIFICATION_SETTINGS_PRESETS_NOTIFICATION_SUBTITLE: "Push notification and ping sound", NOTIFICATION_SETTINGS_PRESETS_NOTIFICATION_CHANNEL_SUBTITLE: "Choose when you receive a notification from this channel.", NOTIFICATION_SETTINGS_CUSTOMIZE: "Customize", NOTIFICATION_SETTINGS_PRESETS_UNREAD_CHANNEL_1: "announcements", NOTIFICATION_SETTINGS_PRESETS_UNREAD_CHANNEL_2: "general", NOTIFICATION_SETTINGS_PRESETS_UNREAD_CHANNEL_3: "random", NOTIFICATION_SETTINGS_PRESETS_NOTIFICATION_MESSAGE: "that’s the annoying part yea lol it’s sooooo chunky", NOTIFICATION_SETTINGS_PRESETS_NOTIFICATION_AUTHOR: "Lone Wanderer", NOTIFICATION_SETTINGS_CHANNELS_CUSTOM_MENU_ARIA_LABEL: "The channel custom notification settings", FORM_LABEL_MOBILE_NOTIFICATIONS_LABEL: "Enable all notifications", FORM_LABEL_MOBILE_NOTIFICATIONS_SYSTEM_LABEL: "System notifications", FORM_LABEL_MOBILE_NOTIFICATIONS_SYSTEM_DESC: "Get notifications outside of Discord.", FORM_LABEL_MOBILE_NOTIFICATIONS_SYSTEM_HINT: "\nIf you're looking for per-channel or per-server notifications, tap the desired server title and select Notification Settings.\n ", FORM_LABEL_MOBILE_NOTIFICATIONS_EVERY_TIME_DESC: "Notify on every new message in conversations", FORM_LABEL_MOBILE_NOTIFICATIONS_USER_LABEL: "Other notifications", FORM_LABEL_MOBILE_NOTIFICATIONS_STREAM_DESC: "Get notifications when your friends stream", FORM_LABEL_MOBILE_NOTIFICATIONS_INAPP_LABEL: "In-app notifications", FORM_LABEL_MOBILE_NOTIFICATIONS_INAPP_DESC: "Get notifications within Discord.", FORM_LABEL_MOBILE_USER_NOTIFICATIONS_LABEL: "User Notification Settings", FORM_LABEL_MOBILE_USER_NOTIFICATIONS_HINT: "Manage all in-app notifications.", FORM_LABEL_MOBILE_NOTIFICATIONS_BEHAVIOR: "Behavior", FORM_LABEL_MOBILE_NOTIFICATIONS_BLINK: "Disable notifications light.", FORM_LABEL_MOBILE_NOTIFICATIONS_VIBRATIONS: "Disable notifications vibration.", FORM_LABEL_MOBILE_NOTIFICATIONS_SOUND_DISABLE: "Disable Sounds", FORM_LABEL_MOBILE_NOTIFICATIONS_OS_CONTROL_JUMP: "Tweak notification settings", FORM_LABEL_MOBILE_NOTIFICATIONS_OS_CONTROL_JUMP_HELP: "Advanced notification settings are controlled by the system.", FORM_LABEL_MOBILE_NOTIFICATIONS_CALL_DESC: "Integrate calls with Phone app.", FORM_LABEL_MOBILE_NOTIFICATIONS_VOICE_CHANNEL_OVERRIDE: "Switching to at-mentions only will disable voice activity notifications while still letting you know if somebody pinged you directly in the VC chat.", FORM_LABEL_MOBILE_CHANNEL_OVERRIDE_MUTE: "You won't receive notifications from muted channels, and they will appear grayed out in your channel list. This setting applies across all your devices.", FORM_LABEL_MOBILE_CATEGORY_OVERRIDE_MUTE: "You won't receive notifications from muted categories, and they will appear grayed out in your channel list. This setting applies across all your devices.", FORM_LABEL_MOBILE_CHANNEL_OVERRIDE_GUILD_MUTED: "Your server is currently $[**muted**](mutedHook). You can't get notifications from this channel nor change settings until you unmute this server.", FORM_LABEL_MOBILE_CHANNEL_OVERRIDE_GUILD_MESSAGE_NOTIFICATION: "Your server's notification is set to $[**nothing**](notificationHook). You will not get any notifications from this channel, but you can override it here.", CHANNEL_OR_GUILD_MUTED: "This channel or server is currently muted.", MUTE_SETTINGS_MUTE_THIS_CONVERSATION: "Mute this conversation", MUTE_SETTINGS_MUTE_CHANNEL: "Mute this channel", MUTE_SETTINGS_MUTE_THREAD: "Mute this thread", MUTE_SETTINGS_MUTE_POST: "Mute this post", MUTE_SETTINGS_MUTE_SERVER: "Mute this server", MUTE_SETTINGS_MUTE_CATEGORY: "Mute this category", FORM_LABEL_MOBILE_CHANNEL_MUTED: "You have muted this channel", FORM_LABEL_MOBILE_CHANNEL_MUTED_UNTIL: "You have muted this channel until $[**{endTime}**](endTimeHook)", FORM_LABEL_MOBILE_SERVER_MUTED: "You have muted this server", FORM_LABEL_MOBILE_SERVER_MUTED_UNTIL: "You have muted this server until $[**{endTime}**](endTimeHook)", FORM_LABEL_MOBILE_DM_MUTED: "You have muted this conversation", FORM_LABEL_MOBILE_DM_MUTED_UNTIL: "You have muted this conversation until $[**{endTime}**](endTimeHook)", FORM_LABEL_MOBILE_CATEGORY_MUTED: "You have muted this category", FORM_LABEL_MOBILE_CATEGORY_MUTED_UNTIL: "You have muted this category until $[**{endTime}**](endTimeHook)", MUTE_DURATION_15_MINUTES: "For 15 Minutes", MUTE_DURATION_30_MINUTES: "For 30 Minutes", MUTE_DURATION_1_HOUR: "For 1 Hour", MUTE_DURATION_3_HOURS: "For 3 Hours", MUTE_DURATION_8_HOURS: "For 8 Hours", MUTE_DURATION_24_HOURS: "For 24 Hours", MUTE_DURATION_ALWAYS: "Until I turn it back on", MUTE_UNTIL: "Mute duration", MUTED_UNTIL_TIME: "Muted until {endTime}", DURATION_FOREVER: "Forever", FORM_DESCRIPTION_MOBILE_NOTIFICATION_MUTED: "You can’t get notifications from this channel nor change settings until you unmute this channel.", FORM_DESCRIPTION_MOBILE_GUILD_NOTIFICATION_ALL_MESSAGES: "You are receiving notifications from all messages in this server, but you can override it here", FORM_DESCRIPTION_MOBILE_GUILD_NOTIFICATION_ONLY_MENTIONS: "You are receiving notifications from only mentions in this server, but you can override it here", FORM_DESCRIPTION_MOBILE_GUILD_NOTIFICATION_ALL_ACTIVITY: "You are receiving notifications from all activity in this server, but you can override it here", SETTINGS_GAMES_NO_GAME_DETECTED: "No game detected", SETTINGS_GAMES_ADDED_GAMES_LABEL: "Added Games", SETTINGS_GAMES_HIDDEN_LIBRARY_APPLICATIONS_LABEL: "Hidden Games", SETTINGS_GAMES_ENABLE_OVERLAY_LABEL: "Enable Overlay", SETTINGS_GAMES_NOW_PLAYING_STATE: "Now playing!", SETTINGS_GAMES_NOT_PLAYING: "What are you playing?!", SETTINGS_GAMES_OVERLAY: "Overlay", SETTINGS_GAMES_OVERLAY_WARNING: "Overlay is known to be problematic on this game.", SETTINGS_GAMES_NO_GAMES_HEADER: "No games added", SETTINGS_GAMES_NOT_SEEING_GAME: "Not seeing your game?", SETTINGS_GAMES_ADD_GAME: "Add it!", SETTINGS_GAMES_IGDB_ATTRIBUTION: "Some information about games (such as genre or cover art) is provided by [IGDB]({igdbLink}).", SETTINGS_GAMES_ADD_NEW_GAME: "Add Game", SETTINGS_GAMES_VERIFIED_ICON: "Verified", SETTINGS_GAMES_LAST_PLAYED: "Last played **{when}**", SETTINGS_GAMES_OVERLAY_ON: "Overlay: On", SETTINGS_GAMES_OVERLAY_OFF: "Overlay: Off", SETTINGS_GAMES_TOGGLE_OVERLAY: "Toggle overlay", SETTINGS_GAMES_TOGGLE_DETECTION: "Toggle detection", SETTINGS_GAMES_REPORT_INCORRECT_DETECTION: "Report incorrectly detected game", SETTINGS_GAMES_REPORT_INCORRECT_DETECTION_CONFIRMATION: "Report sent for: !!{gameName}!!", CONNECTED_ACCOUNT_VERIFYING: "Connecting your **!!{name}!!** account to **Discord**", CONNECTED_ACCOUNT_VERIFY_SUCCESS: "Connected your **!!{name}!!** account to **Discord**", CONNECTED_ACCOUNT_VERIFY_SUCCESS_DETAILS: "You can close this window and go back to Discord.", CONNECTED_ACCOUNT_VERIFY_FAILURE: "Failed to connect your **!!{name}!!** account to **Discord**", CONNECTED_ACCOUNT_VERIFY_FAILURE_DETAILS: "We're sorry, there was a problem connecting. You can close this window and try again.", DISCONNECT_ACCOUNT: "Disconnect", DISCONNECT_ACCOUNT_TITLE: "Disconnect !!{name}!!", DISCONNECT_ACCOUNT_BODY: "Disconnecting your account might remove you from servers you joined via this account.", CONNECTED_ACCOUNT_COPY_USERNAME: "Copy username for !!{name}!!", CONNECTED_ACCOUNT_AUTHORIZATION_CONTINUE_HEADER: "Continue linking to !!{provider}!!", CONNECTED_ACCOUNT_AUTHORIZATION_CONTINUE_DESCRIPTION: "Almost done! Let's take you to !!{provider}!! to finish linking your account.", CONNECTED_ACCOUNT_AUTHORIZATION_CONTINUE_BUTTON: "Continue", CONNECTED_ACCOUNT_AUTHORIZATION_PLATFORM_UNKNOWN: "Unknown Platform", EVERYONE_POPOUT_BODY: "By using **{role}**, you are about to mention {count}+ people. Are you sure?", EVERYONE_POPOUT_BODY_THREAD: "By using **{role}**, you are about to mention {count}+ people in this thread. Are you sure?", EVERYONE_POPOUT_BODY_FORUM_POST: "By using **{role}**, you are about to mention {count}+ people in this post. Are you sure?", EVERYONE_POPOUT_SEND_NOW: "Send Now", EVERYONE_POPOUT_ESC: "**ESC** to edit", EVERYONE_POPOUT_ENTER: "**ENTER** to send", EVERYONE_POPOUT_FOOTER: "Maybe try mentioning a role or individual users instead?", ENABLE_PUBLIC_MODAL_CONTENT_FILTER_HELP: "Discord will automatically scan and delete media sent in this server that contain explicit content (excludes age-restricted channels).", ENABLE_PUBLIC_MODAL_VERIFICATION_LEVEL_DESCRIPTION: "Verified email required.", ENABLE_PUBLIC_MODAL_RULES_CHANNEL_TITLE: "Rules or Guidelines Channel", ENABLE_PUBLIC_MODAL_RULES_CHANNEL_HELP: "Community Servers must have clearly posted server rules and/or guidelines for members. Please select the channel that hosts this.", ENABLE_PUBLIC_MODAL_CREATE_CHANNEL: "Create one for me", LETS_GO: "Let's Go", FORM_LABEL_MAX_AGE: "Expire After", FORM_LABEL_MAX_USES: "Max Uses", FORM_LABEL_TEMPORARY: "Temporary Membership", FORM_HELP_TEMPORARY: "Members are automatically kicked when they disconnect unless a role is assigned.", MAX_AGE_NEVER: "Never", MAX_USES: "{maxUses, plural, =0 {No limit} one {1 use} other {{maxUses} uses}}", MAX_AGE_NEVER_DESCRIPTION_MOBILE: "Never expires", MAX_USES_DESCRIPTION_MOBILE: "{maxUses, plural, =0 {unlimited uses} one {1 use} other {{maxUses} uses}}", MAX_USES_DESCRIPTION_UNLIMITED_USES: "unlimited uses", INVITE_SETTINGS_EXPIRED_DESCRIPTION: "Expires in !!{maxAge}!!, !!{maxUses}!!", INVITE_SETTINGS_DESCRIPTION_NO_EXPIRATION: "!!{maxAge}!!, !!{maxUses}!!", ADVANCED_SETTINGS: "Advanced Settings", INVITE_MEMBERS: "Invite Members", INSTANT_INVITE_FRIENDS: "Invite friends to your server!", INVITE_TO_SERVER_NAME: "Invite friends to **!!{name}!!**", INVITE_PRIVATE_CHANNEL_WARNING: "This channel is private, only select members and roles can view this channel.", TOO_MANY_INVITES_ERROR: "The maximum number of server invites have been generated. $[View invites for this server.](inviteListHook) $[Learn more](inviteHelpHook) about how server invitations work on Discord!", TOO_MANY_INVITES_ERROR_MEMBER: "The maximum number of server invites have been generated. Admins can manage the list of invitations.", INVITE_FRIEND_MODAL_TITLE: "Invite friends to message", INVITE_FRIEND_MODAL_LOADING: "Fetching your friends list...", INVITE_FRIEND_MODAL_NO_RESULTS: "No results found", INVITE_FRIEND_MODAL_SENT: "Sent", INVITE_FRIEND_MODAL_INVITE: "Invite", INVITE_FRIEND_MODAL_RETRY: "Retry", INVITE_FRIEND_MODAL_BOOSTING_UPSELL: "Add an image to your invite link with Boosting", NOTIFICATION_SETTINGS_MUTE_BANNER_GUILD_TITLE: "Server is currently muted", NOTIFICATION_SETTINGS_MUTE_BANNER_CHANNEL_TITLE: "Channel is currently muted", NOTIFICATION_SETTINGS_MUTE_BANNER_SUBTITLE: "You are not seeing any notifications or unread badges.", NOTIFICATION_SETTINGS_MUTE_BANNER_SUBTITLE_UNTIL: "You are not seeing any notifications or unread badges until !!{endTime}!!", CONTACT_SYNC_FAILED_ALERT_TITLE: "Uh oh something went wrong.", CONTACT_SYNC_FAILED_ALERT_MESSAGE: "Something went wrong while syncing your contacts. Please wait a moment and try again.", CONTACT_SYNC_ENTER_PHONE_NUMBER_TITLE: "Verify your phone number", CONTACT_SYNC_ENTER_PHONE_NUMBER_DESCRIPTION: "We need to first verify your phone number so your contacts that also have your number can find you", CONTACT_SYNC_ENTER_NAME_PREFILL: "We prefilled this name from your contact book.", CONTACT_SYNC_LANDING_SCREEN_DESCRIPTION: "By turning on Friend Sync, we’ll automatically add your phone contacts as friends on Discord if: \n \n 1. You both have each other’s phone numbers \n \n 2. You both have Friend Sync turned on", CONTACT_SYNC_PERMISSIONS_DESCRIPTION_ANDROID: "Your contacts will be regularly sent to us. This can be changed anytime in settings. $[Learn More](learnMoreHook)", REVOKE: "Revoke", CHANNEL: "Channel", CHANNEL_SELECT: "Select a Channel", GUILD_SELECT: "Select a Server", MEMBER: "Member", COMMUNITIES: "Communities", INSTANT_INVITE_INVITER: "Inviter", INSTANT_INVITE_INVITE_CODE: "Invite Code", INSTANT_INVITE_USES: "Uses", INSTANT_INVITE_EXPIRES: "Expires", INSTANT_INVITE_FAILED_TO_GENERATE: "Failed to make an invite link.", INSTANT_INVITE_INVALID_CHANNEL: "You can't make an invite for that channel. Let's try another one!", INSTANT_INVITE_NOT_ALLOWED: "Looks like you can't make an invite for this server.", APP_OPENED_TITLE: "Discord App Launched", APP_OPENED_BODY: "We've beamed the info to your Discord app. You can close this browser tab or continue with the web version.", CONTINUE_TO_WEBAPP: "Continue to Discord", APP_NOT_OPENED: "The Discord app could not be opened.", APP_OPENING: "Opening Discord App.", INVITE_INVALID_CTA: "Tap to learn more", INVITE_INVALID_ERROR: "This invite link is invalid or has expired.\nWant to know more about Discord?", INSTANT_INVITE_REDIRECTING: "Redirecting...", INSTANT_INVITE_RESOLVING: "Resolving Invite", INSTANT_INVITE_ACCEPTING: "Accepting Invite", INSTANT_INVITE_RESOLVED_TITLE: "Why, hello there.", INSTANT_INVITE_ACCEPT: "Accept Invite", INSTANT_INVITE_SEE_MESSAGES: "See Messages", INSTANT_INVITE_ACCEPT_STAGE: "Join and Listen In", INSTANT_INVITE_DOWNLOAD_THE_APP: "Download the App", INSTANT_INVITE_DOWNLOAD_THE_ANDROID_APP: "Download the Android App", INSTANT_INVITE_DOWNLOAD_THE_IOS_APP: "Download the iOS App", INSTANT_INVITE_REGISTER_SUCCESS: "You successfully created an account and joined **{guildName}**.", INSTANT_INVITE_PRE_REGISTRATION_SUBTITLE: "You can log in or create an account in the Discord app to join **{guildName}**.", INSTANT_INVITE_YOU_ARE_ALREADY_A_MEMBER_OF: "You're already a member of", INSTANT_INVITE_YOU_HAVE_BEEN_INVITED_TO_CHAT: "!!{username}!! invited you to chat", INSTANT_INVITE_FRIENDS_COUNT: "You have **{count, plural, one {1 Friend} other {{count, number} Friends}}** on Discord", INSTANT_INVITE_YOU_HAVE_BEEN_INVITED_TO_CHAT_WITH: "You’ve been invited to chat with", INSTANT_INVITE_YOU_HAVE_BEEN_INVITED_TO_JOIN_BY_USER: "**!!{username}!!** has invited you to join", INSTANT_INVITE_YOU_HAVE_BEEN_INVITED_TO_JOIN: "You've been invited to join", INSTANT_INVITE_YOU_HAVE_BEEN_INVITED_TO_JOIN_GROUP_DM: "You've been invited to join a group DM by", INSTANT_INVITE_YOU_HAVE_JOINED: "You have joined", INSTANT_INVITE_GUILD_BY_USER: "$[**!!{guild}!!**](guildNameHook) by **!!{username}!!**", INSTANT_INVITE_GUILD_MEMBERS_ONLINE: "{membersOnline, number} Online", INSTANT_INVITE_GUILD_MEMBERS_TOTAL: "{count, plural, one {1 Member} other {{count, number} Members}}", INSTANT_INVITE_GUILD_MEMBERS_RATIO: "{online} / {offline} Members online", INSTANT_INVITE_ASK_USER_FOR_NEW_INVITE: "Ask !!{username}!! for a new invite!", INSTANT_INVITE_ASK_FOR_NEW_INVITE: "Ask for a new one!", INSTANT_INVITE_BANNED_INFO: "Uh-oh. Looks like you've been banned.", INSTANT_INVITE_DIRECT_FRIEND_DESCRIPTION: "Accepting this invite will add **!!{username}!!** as your friend on Discord.", INSTANT_INVITE_DIRECT_FRIEND_DESCRIPTION_REGISTER: "Create an account and add **!!{username}!!** as your friend on Discord.", INSTANT_INVITE_DISABLED_ALERT_TITLE: "Invites are paused in this server", INSTANT_INVITE_DISABLED_ALERT_SUBTITLE: "An admin has temporarily disabled invites", DEEPLINK_BROWSER_TITLE: "Discord App Detected", DEEPLINK_BROWSER_PROMPT: "Do you want to open this link in your Discord app?", DEEPLINK_BROWSER_APP_OPENED: "We've opened the link in your Discord app. You can close this browser tab now.", INVITE_BUTTON_TITLE_INVITED: "You've been invited to join a server", INVITE_BUTTON_TITLE_INVITER: "You sent an invite to join a server", INVITE_BUTTON_TITLE_INVITED_VOICE_CHANNEL: "You've been invited to join a voice channel", INVITE_BUTTON_TITLE_INVITED_STAGE_CHANNEL: "You've been invited to join a stage channel", INVITE_BUTTON_TITLE_INVITER_VOICE_CHANNEL: "You sent an invite to join a voice channel", INVITE_BUTTON_TITLE_INVITER_STAGE_CHANNEL: "You sent an invite to join a stage channel", INVITE_BUTTON_TITLE_STREAMING: "Invite to watch stream", INVITE_BUTTON_TITLE_INVITED_STREAM: "You've been invited to watch a stream", INVITE_BUTTON_TITLE_INVITER_STREAM: "You sent an invite to watch a stream", INVITE_BUTTON_TITLE_INVITED_GROUP_DM: "You've been invited to join a group DM", INVITE_BUTTON_TITLE_INVITER_GROUP_DM: "You sent an invite to join a group DM", INVITE_BUTTON_TITLE_INVITER_FRIEND: "You sent a friend link", INVITE_BUTTON_TITLE_INVITED_FRIEND: "You've got a friend link", INVITE_BUTTON_TITLE_INVITED_INVALID: "You received an invite, but...", INVITE_BUTTON_TITLE_INVITER_INVALID: "You sent an invite, but...", INVITE_BUTTON_STREAMING: "!!{name}!! is live!", INVITE_BUTTON_STREAMER: "You are live!", INVITE_BUTTON_STREAM_ENDED: "!!{name}!! was live", INVITE_BUTTON_STREAM_ENDED_STREAMER: "You were live", INVITE_BUTTON_STREAM_WATCHING: "Watching", INVITE_BUTTON_STREAMING_SUBTEXT: "in !!{guildName}!!", INVITE_BUTTON_RESOLVING: "Resolving Invite", INVITE_BUTTON_INVALID: "Invalid Invite", INVITE_BUTTON_INVALID_OWNER: "Try sending a new invite!", INVITE_BUTTON_EXPIRED: "Invite Expired", INVITE_BUTTON_BODY_IN_GUILD: "in !!{guildName}!!", INVITE_BUTTON_TITLE_INVITED_TO_PLAY: "You've been invited to play", INVITE_BUTTON_ADD_FRIEND: "Add Friend", INVITE_BUTTON_ALREADY_FRIENDS: "Send a Message", LEARN_MORE: "Learn More", LEARN_MORE_ALT: "Learn about Nitro", LEARN_MORE_LINK: "[Learn More]({helpdeskArticle})", LEARN_MORE_CLICK: "[Learn More](onClick)", LOGIN_TITLE: "Welcome back!", FORM_LABEL_EMAIL: "Email", FORM_LABEL_PHONE_NUMBER: "Phone Number", FORM_LABEL_EMAIL_OR_PHONE_NUMBER: "Email or Phone Number", EMAIL_REQUIRED: "A valid email is required.", PHONE_REQUIRED: "A valid phone is required.", LOGIN_REQUIRED: "A valid login is required.", EMAIL_INVALID: "The email entered is not valid, please update it and try again.", PHONE_INVALID: "Phone number is not valid.", PHONE_FAILED_TO_ADD: "Failed to add phone number, please try again later", FORM_LABEL_PASSWORD: "Password", REGISTER_PASSWORD_EXPERIMENT_HINT: "Password must be at least 8 characters", PASSWORD_REQUIRED: "Password is required.", PASSWORD_LENGTH_ERROR: "Passwords must be between 8 and 72 characters", LOGIN: "Login", _LOGIN: "Log In", LOGIN_STAGE: "Login and Listen In", _LOGIN_STAGE: "Listen In", REGISTER: "Register", ENTER_PHONE_OR_EMAIL: "Enter phone or email", ENTER_YOUR_PHONE: "Enter your phone number", ENTER_YOUR_EMAIL: "Enter your email", ENTER_EMAIL: "Enter email", REGISTER_USERNAME_HINT: "You can always change this later!", REGISTER_LOGIN_PRIVACY_NOTICE: "[View our Privacy Policy]({privacyURL})", FORGOT_PASSWORD: "Forgot your password?", NEED_ACCOUNT: "Need an account?", ACCOUNT_SCHEDULED_FOR_DELETION_TITLE: "Account Scheduled for Deletion", ACCOUNT_DISABLED_TITLE: "Account Disabled", ACCOUNT_SCHEDULED_FOR_DELETION_DESCRIPTION: "Your account is scheduled to self-destruct soon.", ACCOUNT_DISABLED_DESCRIPTION: "You cannot use it while it's disabled.", RETURN_TO_LOGIN: "Return To Login", _RETURN_TO_LOGIN: "Return to Login", ACCOUNT_SCHEDULED_FOR_DELETION_CANCEL: "Change your mind? [Restore Account](onClick)", ACCOUNT_SCHEDULED_FOR_DELETION_CANCEL_MOBILE: "Restore Account", PASSWORD_MANAGER: "Password Manager", PASSWORD_MANAGER_USE: "Use a password manager?", PASSWORD_MANAGER_OPEN_SETTINGS: "Open Settings", PASSWORD_MANAGER_INFO_ANDROID: "If you use a password manager, you'll need to allow it in Accessibility Settings -> Downloaded Services. Don't worry, we can take you there.", PASSWORD_MANAGER_OPEN_SETTINGS_ERROR: "Cannot open Accessibility Settings", LOGIN_WITH_QR: "Log in with QR Code", LOGIN_WITH_QR_DESCRIPTION: "Scan this with the **Discord mobile app** to log in instantly.", LOGIN_WITH_QR_ERROR_SUBTITLE: "Captcha attempt unsuccessful. Please try logging in with username and password, or phone number if this issue persists.", LOGIN_WITH_QR_LOADING_LABEL: "QR code login is loading", LOGIN_WITH_QR_LOADING_FINISHED_LABEL: "QR code login is now ready", LOGIN_AS: "Logging in as !!{username}!!", CONFIRM_QR_CHECK_YOUR_PHONE: "Check your phone!", CONFIRM_QR_DESCRIPTION: "Never scan a login QR code from another user.", CONFIRM_QR_KEEP_ME_SIGNED_IN: "Keep me signed in", CONFIRM_QR_LOGIN_ON_COMPUTER: "Log in", QR_CODE_NOT_FOUND: "Can't find this computer!", QR_CODE_NOT_FOUND_DESCRIPTION: "Oh no! Wumpus can't find the computer you're trying to log in on. Make sure that the computer is connected to the internet, and try reopening the Discord desktop app.", QR_CODE_LOGIN_CONFIRM: "Log in on a new device?", QR_CODE_LOGIN_SUCCESS: "You're in!", QR_CODE_LOGIN_SUCCESS_FLAVOR: "You're now logged in on desktop.", QR_CODE_LOGIN_START_OVER: "Not me, start over", QR_CODE_LOGIN_FINISH_BUTTON: "Start talking", QR_CODE_LOGIN_DELAY: "Log in on a new device? Ready in !!{seconds}!!", QR_CODE_INVALID: "Invalid QR Code Found", QR_CODE_FAIL: "Failed to scan", QR_CODE_FAIL_DESCRIPTION: "Something went wrong when trying to scan.", QR_CODE_IN_APP_SCANNER_ONLY: "Rescan the QR code to continue the login process.", SIGN_IN_WITH_PASSKEY: "Or, sign in with passkey", SMS_CONFIRMATION_TITLE: "Enter your confirmation code", SMS_CONFIRMATION_DESCRIPTION: "An SMS was sent to !!{phone}!!.", PASSWORD_RECOVERY_TITLE: "Password Recovery", PASSWORD_RECOVERY_EXTERNAL_LINK_DESCRIPTION: "To continue, open our change password page in your browser by tapping the button below.", PASSWORD_RECOVERY_VERIFY_PHONE_TITLE: "Enter your confirmation code to reset your password", PASSWORD_RECOVERY_VERIFY_PHONE_SUBTITLE: "An SMS was sent to the phone number connected to this account.", PASSWORD_RECOVERY_VERIFY_PHONE_SUBTITLE_RESEND: "An SMS was sent to the phone number connected to this account. Didn't get a code? [Resend Code](onResendClick)", VERIFY_BY_PHONE_BAIL: "Sign up using email instead", PHONE_IP_AUTHORIZATION_TITLE: "Enter your confirmation code to verify it's you", PHONE_IP_AUTHORIZATION_SUBTITLE: "We don’t recognize this location. We sent a confirmation code to the phone number connected to this account.", PHONE_IP_AUTHORIZATION_SUBTITLE_RESEND: "We don’t recognize this location. We sent a confirmation code to the phone number connected to this account. Didn't get a code? [Resend Code](onResendClick)", CONTINUE_IN_BROWSER: "Continue in browser", BACK_TO_LOGIN: "Back to Login", AUTH_MESSAGE_INVITED_BY: "!!{username}!! invited you to join", AUTH_MESSAGE_INVITED_TO_STREAM: "You've been invited to !!{username}!!'s stream in", AUTH_MESSAGE_INVITED_TO_PLAY_USERNAME: "!!{username}!! invited you to play", AUTH_MESSAGE_INVITED_TO_PLAY: "You've been invited to play", AUTH_USERNAME_TOOLTIP: "You can change this later.", AUTH_BROWSER_HANDOFF_DETECTING_DESCRIPTION: "Trying to detect a Discord account from your default browser. Gimme just one second...", AUTH_LOGIN_BODY: "We're so excited to see you again!", AUTH_IP_AUTH_SUCCEEDED_SUGGESTION: "If you followed this link after trying to login on the desktop or mobile app, please go back and try again.", _AUTH_IP_AUTH_SUCCEEDED_SUGGESTION: "If you followed this link after trying to log in on the desktop or mobile app, please go back and try again.", AUTH_EXPIRED_SUGGESTION: "Please login to resend the link.", _AUTH_EXPIRED_SUGGESTION: "Please log in to resend the link.", AUTH_VERFICATION_EXPIRED_SUGGESTION: "Please login and resend the link.", _AUTH_VERFICATION_EXPIRED_SUGGESTION: "Please log in and resend the link.", AUTH_DISABLE_EMAIL_NOTIFICATIONS_SUCCESS_HEADER: "Email Notifications Disabled", AUTH_DISABLE_EMAIL_NOTIFICATIONS_SUCCESS_BODY: "Your inbox feels a bit lighter.", AUTH_DISABLE_EMAIL_NOTIFICATIONS_FAILURE_HEADER: "Whoops. That didn't work.", AUTH_DISABLE_EMAIL_NOTIFICATIONS_FAILURE_BODY: "Try doing that again. Sorry!", AUTH_INVALID_INVITE_BODY: "This invite may be expired, or you might not have permission to join.", AUTH_BANNED_INVITE_BODY: "Uh-oh. Looks like you've been banned. You'll no longer be able to join or interact within this server.", AUTH_INVALID_INVITE_TITLE: "Invite Invalid", AUTH_INVALID_INVITE_TIP: "Why is my invite invalid?", AUTH_VIEW_PASSWORD: "View Password", AUTH_HIDE_PASSWORD: "Hide Password", NOTIFICATIONS: "Notifications", NOTIFICATIONS_FOR_YOU: "For You", NOTIFICATIONS_MENTIONS: "Mentions", CHATS: "Chats", MESSAGES: "Messages", MESSAGE_A11Y_ROLE_DESCRIPTION: "Message", DELETE_MESSAGE_TITLE: "Delete Message", DELETE_MESSAGE_BODY: "Are you sure you want to delete this message?", DELETE_MESSAGE_REPORT: "Report to Discord's Trust & Safety team.", DELETE_MESSAGE_CONTEXT_MENU_HINT: "\nYou can hold down shift when clicking **delete message** to bypass this confirmation entirely.", EDIT: "Edit", PREVIEW: "Preview", EXIT_PREVIEW: "Exit Preview", PREVIEW_MODE: "Preview Mode", DELETE: "Delete", DELETED: "Deleted", RETRY: "Retry", UNPIN: "Unpin", PIN: "Pin", PIN_MESSAGE: "Pin Message", UNPIN_MESSAGE: "Unpin Message", MESSAGE_PUBLISHED: "Message published.", MESSAGE_PINNED: "Message pinned.", MESSAGE_UNPINNED: "Message unpinned.", NEW_MESSAGES_DIVIDER: "New Messages", NEW_MESSAGES: "{count, plural, one {1 new message} other {{count} new messages}} since {timestamp, time, short}", NEW_MESSAGES_SUMMARIES: "{count} new messages", JUMP_TO_LAST_UNREAD_MESSAGE: "Jump to last unread message", NEW_MESSAGES_WITH_DATE: "\n{count, plural, one {1 new message} other {{count} new messages}} since {timestamp, time, short}\non {timestamp, date, long}\n", NEW_MESSAGES_ESTIMATED: "{count}+ new messages since {timestamp, time, short}", NEW_MESSAGES_ESTIMATED_WITH_DATE: "{count}+ new messages since {timestamp, time, short} on {timestamp, date, long}", NEW_MESSAGES_ESTIMATED_SUMMARIES: "{count}+ new messages", NEW_SUMMARIES: "{count, plural, one {1 new summary} other {{count, number} new summaries}}", MARK_AS_READ: "Mark As Read", MARK_GUILD_AS_READ: "Mark Server As Read", MARKED_AS_READ: "Marked As Read", JUMP_TO_PRESENT: "Jump To Present", JUMP_TO_REPLY: "Jump To Reply", YOURE_VIEWING_OLDER_MESSAGES: "You're viewing older messages", BEGINNING_DM: "This is the beginning of your direct message history with **!!{username}!!**.", BEGINNING_GROUP_DM_MANAGED: "You will automatically leave this group when you're done.", BEGINNING_GROUP_DM: "Welcome to the beginning of the **!!{name}!!** group.", BEGINNING_GROUP_DM_NEW: "Welcome to your new group! Invite friends whenever you're ready.", GROUP_DM_SINGLE_USER_SUMMARY: "!!{user}!!", GROUP_DM_TWO_USER_SUMMARY: "!!{user1}!! and !!{user2}!!", GROUP_DM_MULTIPLE_USER_SUMMARY: "!!{user1}!!, !!{user2}!!, and {extras, plural, =1 {{extras, number} other} other {{extras, number} others}}", BEGINNING_CHANNEL_NO_HISTORY: "You do not have permission to view the message history of **#!!{channelName}!!**.", BEGINNING_CHANNEL_WELCOME: "Welcome to !!{channelName}!!!", BEGINNING_CHANNEL_DESCRIPTION: "This is the start of the !!{channelName}!! channel. $[](topicHook)", BEGINNING_CHAT_DM_MOBILE: "This is the very beginning of your legendary conversation with !!{username}!!.", MESSAGE_EDITED: "edited", MESSAGE_EDITED_TIMESTAMP_A11Y_LABEL: "Edited !!{timeFormatted}!!", MESSAGE_GAME_ICON_TOOLTIP: "Game message tooltip", MESSAGE_GAME_ICON_TOOLTIP_CONTENT: "This message was sent from !!{applicationName}!!.", EDIT_TEXTAREA_HELP: "escape to [cancel](onCancel) • enter to [save](onSave)", INVALID_VOICE_CHANNEL: "Invalid Channel", INVALID_TEXT_CHANNEL: "invalid-channel", SPOILER_REVEAL: "Click to reveal spoiler", SPOILER_MARK_SELECTED: "Mark as spoiler", SPOILER_HIDDEN_A11Y_LABEL: "spoiler, hidden", SPOILER: "Spoiler", SENSITIVE_CONTENT: "Content warning: images or videos may contain nudity, violence, or other sensitive content", IMAGE_ALT: "Alt", SUPPRESS_ALL_EMBEDS: "Remove all embeds", APP_TAG: "APP", BOT_TAG_BOT: "BOT", BOT_TAG_SERVER: "SERVER", REPORT_MESSAGE_MENU_OPTION: "Report Message", REMOVE_FILE: "Remove file", SYSTEM_PERMISSION_REQUEST_FILES: "To access **your impressive files, you'll need to grant us permission**.", SYSTEM_PERMISSION_REQUEST_CAMERA: "To access **your camera, you'll need to grant us permission**.", SYSTEM_PERMISSION_GRANT: "Grant Permission", SYSTEM_ENABLE_PERMISSIONS: "Enable Permissions", CHOOSE_AN_APPLICATION: "Choose an application", DOWNLOAD_FILE_COMPLETE: "!!{fileName}!! downloaded", DOWNLOAD_FAILED: "Download failed", ATTACHMENT_FILENAME_UNKNOWN: "unknown", SHARE_TO: "Share to", OTHER_OPTIONS: "Other options", NOTIFICATION_REPLY: "Reply", NOTIFICATION_REPLY_SUCCESS: "Replied to {recipient}", NOTIFICATION_REPLY_FAILED: "Failed to reply to {recipient}", NOTIFICATION_MUTE_1_HOUR: "Mute 1H", NOTIFICATION_MESSAGE_SEND_FAILED_TITLE: "Your message failed to send!", NOTIFICATION_MESSAGE_SEND_FAILED_BODY: "Tap this notification to return to the message and retry.", MESSAGE_TTS: "!!{username}!! said !!{body}!!", MESSAGE_TTS_REPLY: "!!{username}!! replied to !!{replyUsername}!! !!{body}!!", MESSAGE_TTS_DELETED_ROLE: "Deleted Role", FORM_LABEL_LAST_SEEN: "Last Seen", FORM_HELP_LAST_SEEN_1: "\nPruning will kick **{members, plural, =-1 {[calculating...] members} =0 {0 members} one {1 member} other\n{{members} members}}** who have not been seen on Discord in **{days, plural, one {1 day} other {{days} days}}**\nand are not assigned to any roles. They can rejoin the server using a new invite.\n ", LAST_SEEN: "more than {days, plural, one {1 day} other {{days} days}} ago", PRUNE: "Prune", PRUNE_WITH_ROLES: "Also include members with these roles", FORM_HELP_LAST_SEEN_WITH_ROLES_1: "\nPruning will kick **{members, plural, =-1 {[calculating...] members} =0 {0 members} one {1 member} other\n{{members} members}}** who have not been seen on Discord in **{days, plural, one {1 day} other {{days} days}}**\nand are assigned to just the roles you've selected. Members who are not assigned to any roles are still included. They can rejoin the server using a new invite.\n ", REGISTER_TITLE: "Create an account", FORM_LABEL_ACCOUNT_INFORMATION: "Account Information", FORM_LABEL_USERNAME: "Username", FORM_LABEL_USERNAME_MOBILE: "Pick a username", USERNAME_REQUIRED: "Username is required.", FORM_PLACEHOLDER_USERNAME: "What should everyone call you?", ALREADY_HAVE_ACCOUNT: "Already have an account?", CONTINUE: "Continue", TRY_IT_OUT: "Try it out", LOG_IN_WITH_APP: "Log In with the App", BEEP_BOOP: "Beep boop. Boop beep?", TERMS_PRIVACY: "By registering, you agree to Discord's [Terms of Service]({termsURL}) and [Privacy Policy]({privacyURL}).", TERMS_PRIVACY_OPT_IN: "I have read and agree to Discord's [Terms of Service]({termsURL}) and [Privacy Policy]({privacyURL}).", TERMS_PRIVACY_ON_REGISTER: "By clicking {buttonText}, you agree to Discord's [Terms of Service]({termsURL}) and [Privacy Policy]({privacyURL}).", TERMS_PRIVACY_ON_REGISTER_MOBILE: "By tapping {buttonText}, you agree to Discord's [Terms of Service]({termsURL}) and [Privacy Policy]({privacyURL}).", TERMS_PRIVACY_OPT_IN_TOOLTIP: "You need to agree to our terms of service to continue", LOCALE_TITLE: "Hi! Select language", LOCALE_SUBTITLE: "You can change this later.", LOCALE_SELECTOR_TITLE: "Select Language", SEARCH_LANGUAGES: "Search Languages", SIGN_UP_CAPPED: "Sign Up", CREATE_ACCOUNT: "Create Account", PASSWORDLESS_SETTINGS_UPSELL_HEADER: "Forget about your password", PASSWORDLESS_SETTINGS_UPSELL_BODY: "Add a passkey and login with a single tap.", PASSWORDLESS_SETTINGS_UPSELL_BUTTON_TEXT: "Get started", PASSWORDLESS_ENTER_PASSWORD_TITLE: "Enter your password", PASSWORDLESS_ENTER_PASSWORD_DESCRIPTION_PHONE: "Enter the password for the account with the phone number {phone}", PASSWORDLESS_ENTER_PASSWORD_DESCRIPTION_EMAIL: "Enter the password for the account with the email address {email}", TEXT_DATA_RATES: "Standard message and data rates apply.", PHONE_NOT_MOBILE_ERROR: "Unable to register using phone number. Please register with an e-mail address.", NUF_BODY_REFRESH: "Join over 100 million people who use Discord to talk with communities and friends.", NUF_BODY_05_24: "Hang out, play games, or just talk. Tap below to get started!", NUF_TITLE_MOBILE: "Welcome to Discord", NUF_BODY_MOBILE: "Login or Register to get started", _NUF_BODY_MOBILE: "Log In or Register to get started", GET_STARTED: "Get Started", SKIP: "Skip", CREATE_SERVER_TITLE_MOBILE_REFRESH: "Create a server", CREATE_SERVER_DESCRIPTION_MOBILE_REFRESH: "Your server is where you and your friends hang out.\n Make yours and start talking.", OR: "or", JOIN_SERVER_TITLE_MOBILE_REFRESH: "Join a server", JOIN_EXISTING_SERVER: "Join an existing server", JOIN_WITH_INVITE_LINK: "Join with Invite Link", JOIN_STUDENT_HUB: "Join a Student Hub", JOIN_SERVER_DESCRIPTION_MOBILE_REFRESH: "Enter an invite below to join an existing server.", FORM_LABEL_INVITE_LINK: "Invite link", EXAMPLES: "Examples", EXAMPLE: "Example", JOIN_SERVER_INVITE_EXAMPLES_HEADER: "Invites should look like", JOIN_SERVER_INVITE_EXAMPLES_MOBILE_REFRESH: "Invites should look like $[!!{example1}!!](exampleHook), $[!!{example2}!!](exampleHook), or $[!!{example3}!!](exampleHook)", NOTICE_CONNECTION_CONFLICT: "Your voice has been disconnected because you connected at another location.", NOTICE_VOICE_CONNECTED_LAST_SESSION: "You were in a voice channel last time you left Discord.", NOTICE_UNCLAIMED_ACCOUNT: "This is an unclaimed account. Claim it before it's lost.", NOTICE_UNVERIFIED_ACCOUNT: "Please check your email and follow the instructions to verify your account.", NOTICE_UNVERIFIED_ACCOUNT_UU: "Please check your email to verify your account and keep your current username.", NOTICE_NATIVE_APPS_2020_06: "Want to take full advantage of Discord with better performance, in-game overlay, and more? Get the desktop app!", NOTICE_SCHEDULED_MAINTENANCE: "Discord will be undergoing scheduled maintenance on **{start, date, long}** at **{start, time, short}**.", NOTICE_NO_INPUT_DETECTED: "\nWell, it looks like Discord is not detecting any input from your mic. Let's fix that... together.\n", NOTICE_NO_INPUT_DETECTED_SETTINGS: "\nWell, it looks like Discord is not detecting any input from your mic. Let's fix that!\n", NOTICE_NO_INPUT_DETECTED_HELP_LINK_TEXT: "Help!", NOTICE_NO_INPUT_DETECTED_SETTINGS_LINK_TEXT: "Visit Settings", NOTICE_HARDWARE_MUTE: "\n Well, it looks like the **{vendorName} {modelName}** microphone hardware mute switch is on.\n ", NOTICE_H264_DISABLED_SETTINGS: "\n Well, it looks like openH264 is disabled. Let's fix that!\n ", NOTICE_H264_DISABLED_SETTINGS_LINK_TEXT: "Visit Settings", NOTICE_CORRUPT_INSTALLATION: "\nWell, it looks like your Discord installation is corrupt. Let's fix that... together.\n", NOTICE_CORRUPT_INSTALLATION_HELP_LINK_TEXT: "Help!", NOTICE_STREAMER_MODE_TEXT: "Streamer Mode is enabled. Usernames have been truncated.", NOTICE_CONNECT_SPOTIFY: "Connect your Spotify account to display your music in your status!", NOTICE_CONNECT_PLAYSTATION: "Connect your PlayStation Network account to display games you're playing in your status!", CLAIM_ACCOUNT: "Claim Account", CLAIM_ACCOUNT_SHORT: "Claim", CLAIM_ACCOUNT_LONG: "Claim Your Account", RECONNECT: "Reconnect", RECONNECTING: "Reconnecting", UNLOCK_WITH_NITRO: "Unlock with Nitro", DISMISS: "Dismiss", DISABLE: "Disable", ENABLE: "Enable", CONFIGURE: "Configure", RESEND: "Resend", CHECK_IT_OUT: "Check it out", ENABLE_NOTIFICATIONS: "Enable notifications", NOTICE_SPOTIFY_AUTO_PAUSED: "Spotify playback paused while transmitting audio.", NOTICE_WHATS_THIS: "What's this?", NOTICE_PREMIUM_PROMO_MESSAGE: "Enhance your Discord experience!", NOTICE_PREMIUM_PROMO_ACTION: "Check it out", NOTICE_MFA_SMS_BACKUP: "We suggest adding a phone to your 2 factor authentication settings as a backup.", NOTICE_MFA_SMS_BACKUP_BUTTON: "Add Phone", NOTICE_DISPATCH_ERROR: "Oh no, an error has occurred.", NOTICE_DISPATCH_ERROR_WITH_CODE: "Oh no, an error has occurred. Code {code}", NOTICE_DISPATCH_ERROR_DISK_LOW: "You do not have enough disk space. {required} is required but only {available} is available.", NOTICE_DISPATCH_ERROR_POST_INSTALL_FAILED: "Oh no, Discord failed to install the stuff the game needs. {name} failed.", NOTICE_DISPATCH_ERROR_FILE_NAME_TOO_LONG: "Oh no, this game has file names too long for Windows. Please select a shorter install directory.", NOTICE_DISPATCH_ERROR_UNWRITABLE: "Oh no, the install location you chose is not writable. You chose {path}", NOTICE_DISPATCH_ERROR_INVALID_DRIVE: "Oh no, the install location you chose is not valid. You chose {path}", NOTICE_DISPATCH_ERROR_NO_MANIFESTS: "Oh no, it looks like there is no content for this game. Please contact support.", NOTICE_DISPATCH_ERROR_NOT_ENTITLED: "Oh no, it looks like you do not own this game. Please contact support if you believe this is an error.", NOTICE_DISPATCH_ERROR_POST_INSTALL_CANCELLED: "It looks like you said no to an install script. You need to say yes for the game to install.", NOTICE_DISPATCH_ERROR_IO_PERMISSION_DENIED: "Oh no, we failed to update the game. Please ensure the game is closed then try again.", NOTICE_DISPATCH_INSTALL_SCRIPT_PROGRESS: "Discord has to install some stuff before we can launch your game. Installing ({progress, number} of {total, number}).", NOTICE_DISPATCH_INSTALL_SCRIPT_PROGRESS_WITH_NAME: "Discord has to install some stuff before we can launch your game. Installing {name} ({progress, number} of {total, number}).", NOTICE_DISPATCH_APPLICATION_LOCK_FAILED: "Discord is already performing an operation on this game. Ensure that no other Discord clients are running.", NOTICE_DISPATCH_ERROR_DISK_FULL: "On no, it looks like your disk is full. Free up some space and try again.", NOTICE_DISPATCH_API_ERROR: "Oh no, it looks like the Discord servers are having issues. Please try again in a little bit.", NOTICE_APPLICATION_TEST_MODE: "Test mode is currently active for **!!{applicationName}!!**. Unpublished SKUs will appear and you will not be charged for any related payments.", NOTICE_APPLICATION_TEST_MODE_GO_TO_LISTING: "Go to SKU", APPLICATION_TEST_MODE_VIEW_OTHER_LISTINGS: "See other listings for this SKU", NOTICE_DETECTED_OFF_PLATFORM_PREMIUM_PERK_MESSAGE: "Play **!!{applicationName}!!**? Redeem your free *!!{skuName}!!* Nitro perk!", NOTICE_DETECTED_OFF_PLATFORM_NO_PREMIUM_PERK_MESSAGE: "Play **!!{applicationName}!!**? Get a free *!!{skuName}!!*!", NOTICE_DETECTED_OFF_PLATFORM_PREMIUM_PERK_BUTTON: "Redeem Now", NOTICE_ENABLE_PUBLIC_GUILD_UPSELL_MESSAGE: "Get custom features and tools that can help you run your community.", NOTICE_CHANNEL_MAX_MEMBERS_CAP_REACHED_MESSAGE: "Your server is approaching its member size limit. To grow past {maxMemberCount, number} members, you need to send in a request. [Learn more]({maxMembersUrl})", NOTICE_PREMIUM_TRIAL_ENDING_DAYS: "Only {days, plural, =1 {# day} other {# days}} left to claim your trial", NOTICE_PREMIUM_TRIAL_ENDING_HOURS: "Only {hours, plural, =1 {# hour} other {# hours}} left to claim your trial", NOTICE_PREMIUM_TRIAL_ENDING_MINUTES: "Only {minutes, plural, =1 {# minute} other {# minutes}} left to claim your trial", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_DAYS: "You have {days, plural, =1 {# day} other {# days}} left to get a free month of Nitro", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_HOURS: "You have {hours, plural, =1 {# hour} other {# hours}} left to get a free month of Nitro", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_MINUTES: "You have {minutes, plural, =1 {# minute} other {# minutes}} left to get a free month of Nitro", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_CTA: "Claim Your Free Month!", NOTICE_PREMIUM_TIER_0_TRIAL_ENDING_DAYS_VARIANT: "You have {days, plural, =1 {# day} other {# days}} left to get a free trial of Nitro Basic", NOTICE_PREMIUM_TIER_0_TRIAL_ENDING_HOURS_VARIANT: "You have {hours, plural, =1 {# hour} other {# hours}} left to get a free trial of Nitro Basic", NOTICE_PREMIUM_TIER_0_TRIAL_ENDING_MINUTES_VARIANT: "You have {minutes, plural, =1 {# minute} other {# minutes}} left to get a free trial of Nitro Basic", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_DAYS_VARIANT: "You have {days, plural, =1 {# day} other {# days}} left to get a free trial of Nitro", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_HOURS_VARIANT: "You have {hours, plural, =1 {# hour} other {# hours}} left to get a free trial of Nitro", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_MINUTES_VARIANT: "You have {minutes, plural, =1 {# minute} other {# minutes}} left to get a free trial of Nitro", NOTICE_PREMIUM_TIER_2_TRIAL_ENDING_CTA_VARIANT: "Claim Your Free Nitro!", NOTICE_PREMIUM_TIER_0_TRIAL_ENDING_CTA_VARIANT: "Claim Your Free Nitro Basic!", NOTICE_NITRO_PRICE_CHANGED: "We updated prices in {countryName}. You’re now paying less for Nitro.", PLAYSTATION_CONNECT_DESCRIPTION: "Let your friends see you’re online and what game you’re playing!", ACTIVITY_FEED_CARD_GDPR_BUTTON_YES: "Yes, count me in!", ACTIVITY_FEED_NONE_PLAYING_HEADER: "It's quiet for now...", ACTIVITY_FEED_NONE_PLAYING_BODY: "When a friend starts an activity—like playing a game or hanging out on voice—we’ll show it here!", ACTIVITY_FEED_NOW_PLAYING_MULTIPLE_GAMES: "Playing Multiple Games", ACTIVITY_FEED_NOW_PLAYING_XBOX: "Playing on Xbox", ACTIVITY_FEED_NOW_PLAYING_SPOTIFY: "Listening to Spotify", ACTIVITY_FEED_NOW_PLAYING_LISTENING: "Listening to {name}", ACTIVITY_FEED_NOW_PLAYING_STAGE_CHANNEL: "Listening to a Stage", ACTIVITY_FEED_NOW_PLAYING_WATCHING: "Watching a Stream", ACTIVITY_FEED_NOW_PLAYING_IN_A_VOICE_CHANNEL: "In a Voice Channel", ACTIVITY_FEED_NOW_PLAYING_HEADER_TWO_KNOWN: "**!!{user1}!!**, **!!{user2}!!**, and {extras, plural, =1 {{extras, number} other} other {{extras, number} others}}", ACTIVITY_FEED_NOW_PLAYING_HEADER_TWO_KNOWN_ONLY: "**!!{user1}!!** and **!!{user2}!!**", ACTIVITY_FEED_NOW_STREAMING_TWITCH: "Streaming on Twitch", ACTIVITY_FEED_NOW_PLAYING_HEADER_TWO_KNOWN_ONLY_ALT: "!!{user1}!! and !!{user2}!!", ACTIVITY_FEED_NOW_PLAYING_HEADER_TWO_KNOWN_ALT: "!!{user1}!!, !!{user2}!!, and {extras, plural, =1 {{extras, number} other} other {{extras, number} others}}", ACTIVITY_FEED_NOW_PLAYING_ACTION_JOIN_CHANNEL: "Join Channel", ACTIVITY_FEED_NOW_PLAYING_ACTION_GO_TO_SERVER: "Go to Server", ACTIVITY_FEED_NOW_PLAYING_ACTION_LISTEN_ALONG: "Listen Along", ACTIVITY_FEED_NOW_PLAYING_ACTION_PLAY_ON_SPOTIFY: "Play on Spotify", ACTIVITY_FEED_USER_PLAYING_JUST_STARTED: "!!{name}!! - just now", ACTIVITY_FEED_USER_PLAYING_FOR_MINUTES: "!!{name}!! – {time}m", ACTIVITY_FEED_USER_PLAYING_FOR_HOURS: "!!{name}!! – {time}h", ACTIVITY_FEED_USER_PLAYING_FOR_DAYS: "!!{name}!! – {time}d", ACTIVITY_FEED_SINGLE_MEMBER_LIST_HEADER: "{memberCount, plural, =1 {{memberCount, number} Person} other {{memberCount, number} People}}", ACTIVITY_FEED_OTHER_MEMBER_LIST_HEADER: "Other Members", ACTIVITY_FEED_POPOUT_APPLICATION_RUNNING: "!!{name}!! is already running.", ACTIVITY_FEED_POPOUT_APPLICATION_LAUNCHING: "Launching !!{name}!!.", DIRECT_MESSAGES: "Direct Messages", DIRECT_MESSAGES_PENDING_FRIENDS: "Direct Messages, {requestCount, number} pending friend requests", DIRECT_MESSAGE: "Direct Message", DM_SEARCH_PLACEHOLDER: "Find or start a conversation", PLAYING_GAME: "Playing **!!{game}!!**", STREAMING: "Streaming **!!{name}!!**", STREAMING_A_GAME: "Streaming a game", LISTENING_TO: "Listening to **!!{name}!!**", WATCHING: "Watching **!!{name}!!**", COMPETING: "Competing in **!!{name}!!**", UNFORMATTED_PLAYING_GAME: "Playing {game}", UNFORMATTED_STREAMING: "Streaming {name}", UNFORMATTED_LISTENING_TO: "Listening to {name}", UNFORMATTED_WATCHING: "Watching {name}", UNFORMATTED_COMPETING: "Competing in {name}", SPECTATORS: "Spectators - {numViewers}", HIDE_CHAT: "Hide chat", SHOW_CHAT: "Show chat", CHANNEL_ADD_TO_MESSAGES: "Add to Messages", CHANNEL_REMOVE_FROM_MESSAGES: "Remove From Messages", NOTIFICATION_TITLE_DISCORD: "Discord", BROWSER_NOTIFICATIONS_ENABLED_BODY: "Swoosh. Notifications are a go!", NOTIFICATION_REPORT_TOO_MANY: "I get too many of these notifications", NOTIFICATION_REPORT_RELEVANT: "It wasn’t relevant to me", NOTIFICATION_REPORT_CONTENT: "I don’t like the content", NOTIFICATION_REPORT_BODY: "Tell us about your notification experience.", NOTIFICATION_EMBED_BUTTON: "Was this notification useful? [Let us know!](handleMessage)", NOTIFICATION_EMBED_BUTTON_2: "[Highlight Notification Settings](handleMessage)", NOTIFICATION_REPORT_TITLE: "Was this notification useful?", NOTIFICATION_REPORT_FEEDBACK: "Give Feedback on this Notification", NOTIFICATION_REPORT_TEXT: "We’ll use this to improve the notifications experience. Visit the [help center]({helpUrl}) to learn about highlights notifications.", NOTIFICATION_CENTER_FRIEND_ACCEPTED: "Friend added!", NOTIFICATION_CENTER_FRIEND_DECLINED: "Friend request ignored", NOTIFICATION_CENTER_INCOMING_FRIEND_REQUEST: "{username} sent you a friend request.", NOTIFICATION_CENTER_INCOMING_FRIEND_REQUEST_ACCEPTED: "You accepted {username}’s friend request.", NOTIFICATION_CENTER_INCOMING_FRIEND_REQUESTS: "**{user}**, **{user2}**, and **{count} others** have sent you friend requests.", NOTIFICATION_CENTER_FRIEND_REQUESTS_TITLE: "Friend Requests", NOTIFICATION_CENTER_FRIEND_REQUESTS_EMPTY_TITLE: "No Incoming Friend Requests", NOTIFICATION_CENTER_FRIEND_REQUESTS_EMPTY_SUBTITLE: "Once you have incoming friend requests, you can access them here!", NOTIFICATION_CENTER_TODO: "TODO", NOTIFICATION_CENTER_DONE: "DONE", NOTIFICATION_CENTER_CONTACT_SYNC_TITLE: "Use the Discord mobile app to enable Contact Sync", NOTIFICATION_CENTER_CONTACT_SYNC_BODY: "To start syncing your contacts, open this notification with your mobile app.", NOTIFICATION_CENTER_GUILD_SCHEDULED_EVENT_ENDED: "**{event_name}** started in **{guild_name}**.", NOTIFICATION_CENTER_SHOW_ROLE_MENTIONS: "Show Role Mentions", NOTIFICATION_CENTER_SHOW_INDIRECT_MENTIONS: "Show Indirect Mentions", NOTIFICATION_CENTER_SHOW_INDIRECT_MENTIONS_SUBTITLE: "@here and @everyone", RESET_PASSWORD_TITLE: "Change Your Password", RESET_PASSWORD_SUCCESS_TITLE: "Password Changed", FORM_LABEL_NEW_PASSWORD: "New Password", FORM_LABEL_CONFIRM_NEW_PASSWORD: "Confirm New Password", FORM_LABEL_CONFIRM_PASSWORD: "Confirm Password", FORM_LABEL_NEW_PASSWORD_MISMATCH: "Passwords do not match!", CHANGE_PASSWORD: "Change Password", UPDATE_PASSWORD: "Update your password", FORCE_PASSWORD_UPDATE_DESCRIPTION: "Discord has new password requirements. Please update your password now.", CHANGE_PASSWORD_DESCRIPTION: "Please enter your existing password and your new password.", PASSWORD_REQUIREMENTS_EMPTY: "Your new password cannot be empty.", PASSWORD_REQUIREMENTS_MIN_LENGTH: "Must be at least 8 characters long.", PASSWORD_REQUIREMENTS_CHARACTER_TYPES: "Must be at least 8 characters and include 3 of these 4 character types: uppercase, lowercase, numbers, and symbols.", SHORTCUT_RECORDER_BUTTON: "Record Keybind", SHORTCUT_RECORDER_BUTTON_RECORDING: "Stop Recording", SHORTCUT_RECORDER_BUTTON_EDIT: "Edit Keybind", SHORTCUT_RECORDER_NO_BIND: "No Keybind Set", BROWSER_CHROME: "Google Chrome", BROWSER_FIREFOX: "Mozilla Firefox", UNSUPPORTED_BROWSER_TITLE: "Well, this is awkward", UNSUPPORTED_BROWSER_BODY: "\nIt looks like you're using an unsupported browser. To experience what Discord has to offer, upgrade your\nbrowser or download one of our apps.\n ", EXPRESSION_PICKER: "Expression Picker", EXPRESSION_PICKER_CATEGORIES_A11Y_LABEL: "Expression Picker Categories", EXPRESSION_PICKER_EMOJI: "Emoji", EXPRESSION_PICKER_GIF: "GIFs", EXPRESSION_PICKER_STICKER: "Stickers", EXPRESSION_PICKER_OPEN_EMOJI_PICKER_A11Y_LABEL: "Open Emoji Picker", EXPRESSION_PICKER_OPEN_GIF_PICKER_A11Y_LABEL: "Open GIF Picker", EXPRESSION_PICKER_OPEN_STICKER_PICKER_A11Y_LABEL: "Open Sticker Picker", EXPRESSION_SUGGESTIONS_STICKER_NAME: "**!!{stickerName}!!**", EXPRESSION_SUGGESTIONS_STICKER_SHORT_NAV_PROMPT: "$[](upHook) to select", EXPRESSION_SUGGESTIONS_STICKER_DISABLE: "Don't show again", CATEGORY_FAVORITE: "Favorites", SEARCH_EMOJIS: "Search emoji", SEARCH_FOR_EMOJI: "Find the perfect emoji", SEARCH_FOR_STICKER: "Find the perfect sticker", SEARCH_FOR_REACTION: "Find the perfect reaction", SEARCH_FOR_SUPER_REACTION: "Find the perfect Super Reaction", NO_EMOJI_SEARCH_RESULTS: "No emoji match your search", EMOJI_CATEGORY_PACK: "{packName} Pack", EMOJI_CATEGORY_RECENT: "Frequently Used", EMOJI_CATEGORY_CUSTOM: "Custom", EMOJI_CATEGORY_ACTIVITY: "Activities", EMOJI_CATEGORY_FLAGS: "Flags", EMOJI_CATEGORY_FOOD: "Food", EMOJI_CATEGORY_NATURE: "Nature", EMOJI_CATEGORY_OBJECTS: "Objects", EMOJI_CATEGORY_PEOPLE: "People", EMOJI_CATEGORY_SYMBOLS: "Symbols", EMOJI_CATEGORY_TRAVEL: "Travel", EMOJI_CATEGORY_PREMIUM_UPSELL: "Available with Nitro", EMOJI_FROM_PACK: "collected from **!!{packName}!!**’s pack", EMOJI_FROM_PACK_V2: "added from **!!{packName}!!**’s pack", EMOJI_FROM_GUILD: "from **!!{guildName}!!**", EMOJI_FROM_GUILD_LABEL: "!!{names}!! from !!{guildName}!!", EMOJI_AVAILABLE_WITH_PREMIUM: "Available with Nitro", UNICODE_EMOJI_CATEGORY_SHORTCUT_A11Y_LABEL: "Navigate to unicode emoji categories", EMOJI_MODIFIER_NONE: "None", EMOJI_MODIFIER_MENU_BUTTON: "Select emoji skin tone", EMOJI_MODIFIER_LIGHT_SKIN_TONE: "Light skin tone", EMOJI_MODIFIER_MEDIUM_LIGHT_SKIN_TONE: "Medium-light skin tone", EMOJI_MODIFIER_MEDIUM_SKIN_TONE: "Medium skin tone", EMOJI_MODIFIER_MEDIUM_DARK_SKIN_TONE: "Medium dark skin tone", EMOJI_MODIFIER_DARK_SKIN_TONE: "Dark skin tone", EMOJI_NAMES_WITH_FAVORITED: "!!{names}!!, favorited", EMOJI_FAVORITE_TOOLTIP: "!!{key}!!+Click to ⭐", EMOJI_IS_FAVORITE_ARIA_LABEL: "!!{names}!! is in favorites", EMOJI_ADD_TO_FAVORITES: "Add to Favorites", EMOJI_REMOVE_FROM_FAVORITES: "Remove from Favorites", EXPRESSION_REMOVED_FROM_FAVORITES: "Removed from Favorites", EXPRESSION_ADDED_TO_FAVORITES: "Added to Favorites", EMOJI_PICKER_SCROLL_TO_UNICODE_A11Y_LABEL: "Scroll to Unicode emoji", EMOJI_PICKER_DOUBLE_REACTION_ERROR_TITLE: "Uh, whoops", EMOJI_PICKER_DOUBLE_REACTION_SUPER_ERROR_TITLE: "Oops!", EMOJI_PICKER_DOUBLE_REACTION_SUPER_ERROR_BODY: "You can’t react and super react with the same emoji. There’s a lot of emoji to choose from, so maybe try another one.", SUPER_REACTIONS_BETA_MODAL_TITLE: "This feature is in Beta", SUPER_REACTIONS_BETA_MODAL_CONTENT: "Super Reactions will be available for all Nitro members soon.", EMOJI_PICKER_FAVORITES_TIP: "Heart an emoji? Right click to add it to your favorites!", SEARCH_GIFS: "Search GIFs", SEARCH_TENOR: "Search Tenor", GIF_BUTTON_LABEL: "Open GIF picker", GIF_PICKER_RESULT_TYPE_TRENDING_GIFS: "Trending GIFs", NO_GIF_SEARCH_RESULTS: "No GIFs match your search.", NO_GIF_FAVORITES_HOW_TO_FAVORITE: "Click the star in the corner of a gif to favorite it", NO_GIF_FAVORITES_WHERE_TO_FAVORITE: "Favorites will show up here!", NO_GIF_FAVORITES_GO_FAVORITE: "So uhh… maybe go favorite some GIFs?", NO_GIF_FAVORITES_FLAVOR_FAVORITE_PLEASE: "Uh, go favorite them… please", NO_GIF_FAVORITES_FLAVOR_STILL_HERE: "Why uh are you still here?", NO_GIF_SEARCH_RESULTS_WITH_RELATED_SEARCH: "No GIFs match your search. We hand picked a couple of related terms below like ripe fruit.", NO_GIF_SEARCH_RESULTS_WITHOUT_RELATED_SEARCH: "Nothing matched your search and we couldn’t find any related terms. Keep trying for that perfect GIF.", GIF_PICKER_RELATED_SEARCH: "Your perfect GIF is in another castle. Try the suggested keywords below!", GIF_PICKER_ENTER_SEARCH: "Enter a search term above and find that perfect GIF to express how you really feel.", GIF_TOOLTIP_ADD_TO_FAVORITES: "Add to Favorites", GIF_TOOLTIP_REMOVE_FROM_FAVORITES: "Remove from Favorites", GIF_TOOLTIP_FAVORITED_PICKER_BUTTON: "Added to Favorites", FAVORITES_LIMIT_REACHED_TITLE: "Oh no!", FAVORITES_LIMIT_REACHED_BODY: "You cannot have more than {count} favorites.", FAVORITE_GIFS_LIMIT_REACHED_BODY: "You cannot have more favorites.", GIF_CATEGORY_A11Y_LABEL: "Category, !!{categoryName}!!", STICKER: "Sticker", STICKER_ASSET_LOAD_ERROR: "Uh Oh!", STICKER_A11Y_LABEL: "Sticker, !!{stickerName}!!", STICKER_CATEGORY_A11Y_LABEL: "Category, !!{categoryName}!!", SEARCH_FOR_STICKERS: "Search stickers", NO_STICKERS_TO_SEARCH_THROUGH: "No stickers to search through yet", STICKER_CATEGORY_RECENT: "Frequently Used", ERROR_LOADING_STICKER: "Error loading sticker", NO_STICKER_SEARCH_RESULTS: "No stickers match your search", NO_STICKER_SEARCH_RESULTS_WITH_SUGGESTIONS: "Try searching for another term or select one below", STICKER_FROM_SOURCE: "from **!!{source}!!**", STICKER_NOTIFICATION_BODY: "Sent a sticker: !!{stickerName}!!", STICKER_BUTTON_LABEL: "Open sticker picker", STICKER_PACK_PRICE_FREE: "Free", STICKER_PACK_STICKER_COUNT: "{numStickers, plural, =0 {# stickers} one {# sticker} other {# stickers}}", STICKER_PICKER_PREMIUM_EMPTY_STATE_TITLE: "Choose from 300 stickers with Nitro", STICKER_PICKER_PREMIUM_EMPTY_STATE_SUBTITLE: "Subscribe to add personality to your conversations.", STICKER_PICKER_PREMIUM_EMPTY_STATE_CTA: "Subscribe", STICKER_PICKER_CREATE_STICKER: "Add Sticker", STICKER_PICKER_CREATE_STICKER_TITLE: "Upload a sticker to this server", STICKER_PICKER_CATEGORIES_RECENT: "Frequently used", STICKER_PICKER_DISCOUNTED_PRICE_ANDROID: "!!{discountedPrice}!! $[~~{regularPrice}~~](originalPriceHook)", STICKER_PICKER_DISCOUNTED_FREE_ANDROID: "Free $[~~{regularPrice}~~](originalPriceHook)", STICKER_PICKER_PRICE_WITH_PREMIUM_TIER_2: "!!{price}!! with Nitro", STICKER_PICKER_PREMIUM_PACKS: "Nitro Packs", STICKER_PICKER_PREMIUM_UPSELL_ALT: "A wumpus sticker surrounded by sparkles.", STICKER_PICKER_PREMIUM_UPSELL_TITLE: "You can't use this sticker right now", STICKER_PICKER_PREMIUM_UPSELL_DESCRIPTION: "Lift off with **Discord Nitro** to use custom stickers on any server. [Learn more.](onClick)", STICKER_PICKER_PREMIUM_UPSELL_DESCRIPTION_NO_BOLD: "Lift off with Discord Nitro to use custom stickers on any server. [Learn more.](onClick)", STICKER_PICKER_PREMIUM_UPSELL_DESCRIPTION_NO_BOLD_V2: "Lift off with {planName} to use custom stickers on any server. [Learn more.](onClick)", STICKER_PICKER_PREMIUM_TIER_UPSELL_DESCRIPTION: "Lift off with **{planName}** to use custom stickers on any server. [Learn more.](onClick)", STICKER_PACK_PRICE_FREE_WITH_PREMIUM_TIER_2: "Free with Nitro", STICKER_PACK_PRICE_FREE_WITH_PREMIUM_TIER_1: "Free with Nitro Classic", STICKER_PACK_VIEW: "View Sticker Pack", STICKER_VIEW_MORE_STICKERS: "View More Stickers", STICKER_POPOUT_PACK_INFO: "This is from the **{stickerPackName}** sticker pack. Get {discount, number}% off with [Nitro](onClick).", STICKER_POPOUT_PACK_INFO_PREMIUM: "This is a **{stickerPackName}** sticker.", STICKER_POPOUT_PACK_INFO_UNAVAILABLE: "This is a **{stickerPackName}** sticker. They are no longer available.", STICKER_POPOUT_COUNTDOWN_HEADER: "Limited time left", STICKER_PREMIUM_TIER_2_UPSELL_ALERT_PERKS_GUILD_SUBSCRIPTIONS: "{numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}} for instant Level 1 perks", STICKER_PREMIUM_TIER_2_UPSELL_ALERT_UPGRADE_CTA: "Subscribe to Nitro", STICKER_PREMIUM_TIER_2_UPSELL_ALERT_TITLE: "Get Nitro to unlock stickers and more. For **!!{monthlyPrice}!! / Month**:", STICKER_PREMIUM_SUBSCRIPTION_UPSELL_ALERT_TITLE: "Get {planName} to unlock stickers and more. For **!!{monthlyPrice}!! / Month**:", STICKER_PREMIUM_TIER_2_UPSELL_PERK_CUSTOM: "Use custom stickers across all servers", STICKER_PREMIUM_TIER_2_UPSELL_PERK_GUILD_SUBSCRIPTION: "Get {numGuildSubscriptions, number} free boosts and {discountPercent} off on Boost purchases", STICKER_PREMIUM_TIER_2_UPSELL_PERK_PREMIUM_SUBSCRIPTION: "Powerful chat perks: animated emoji, custom Discord tag, better Go Live streaming, and more", STICKER_PREMIUM_TIER_0_UPSELL_PERK_PREMIUM_SUBSCRIPTION: "Powerful chat perks: custom emoji anywhere, animated emoji, bigger file uploads, and more", STICKER_PREMIUM_TIER_0_UPSELL_PERK_PREMIUM_SUBSCRIPTION_V2: "Powerful chat perks: custom emoji anywhere, animated emoji, and more", STICKER_PICKER_VIEW_ALL: "View\nAll", STICKER_PICKER_PACK_DETAILS: "{stickerPackName} Details", STICKER_PICKER_PACK_DETAILS_ANIMATED: "Animated", STICKER_PICKER_PACK_DETAILS_PREMIUM: "Only with Nitro subscription", STICKER_PICKER_PACK_DETAILS_LIMITED_TIME_LEFT: "Limited time left: {time}", STICKER_PICKER_PACK_EXPIRING_SOON: "Expiring Soon", STICKER_PACK_PREMIUM_CTA: "Get Nitro", STICKER_PACK_AVAILABLE_WITH_PREMIUM: "Get with Nitro", STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_PREMIUM_SUBSCRIPTIONS_DESCRIPTION: "Upload {count, number}+ custom stickers with Server Boosting.", STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_PREMIUM_SUBSCRIPTIONS_CTA: "Purchase Boosts", STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_STICKERS_DESCRIPTION: "Your server is waiting for you to upload some stickers!", STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_STICKERS_CTA: "Manage Stickers", PREMIUM_GIFT_BUTTON_LABEL: "Send a gift", PREMIUM_GIFT_BUTTON_TOOLTIP: "Upgrade your friends! Gift them awesome chat perks with Nitro.", PREMIUM_GIFT_SHARE_LINK_IOS: "Share", SKU_PAYMENT_STEPS_LABEL: "Purchase", GOOGLE_PLAY_TRIAL_PAYMENT_FLOW_CTA: "Continue on Google Play", IOS_TRIAL_PAYMENT_FLOW_CTA: "Continue on App Store", UPLOAD_AREA_TITLE_NO_CONFIRMATION: "Insta Upload Mode!", UPLOAD_AREA_HELP: "\nYou can add comments before uploading.\nHold shift to upload directly.", UPLOAD_AREA_NEW_THREAD_HELP: "You can add comments before uploading.", UPLOAD_AREA_TOO_LARGE_TITLE: "Your files are too powerful", UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_1: "The max file size is {maxSize}.", UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_1_PREMIUM_TIER_0: "The max file size for Nitro Basic is {maxSize}.", UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_1_PREMIUM_TIER_1: "The max file size for Nitro Classic is {maxSize}.", UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_2: "Upgrade to Discord Nitro to upload files up to {premiumMaxSize}", UPLOAD_AREA_PREMIUM_TIER_UPSELL_BODY_LINE_2: "Upgrade to {premiumPlan} to upload files up to {premiumMaxSize}", UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_2_INCREASE: "Upgrade to Discord Nitro to upload files up to \n 500MB (Available on desktop and iOS only)", UPLOAD_AREA_PREMIUM_UPSELL_WITH_SIZE_AND_ACTION: "Lift off with Discord Nitro to upload files up to {premiumMaxSize}. [Learn more](onClick).", UPLOAD_AREA_PREMIUM_UPSELL_WITH_SIZE_AND_ACTION_V2: "Lift off with {planName} to upload files up to {premiumMaxSize}. [Learn more](onClick).", UPLOAD_AREA_TOO_LARGE_HELP: "Max file size is {maxSize} please.", UPLOAD_AREA_REQUEST_LIMIT_HELP: "Total message size must be less than {maxSize}", UPLOAD_AREA_TOO_LARGE_HELP_PREMIUM_TIER_1: "Max file size for Nitro Classic is {maxSize} please.", UPLOAD_AREA_TOO_LARGE_HELP_MOBILE: "To upload images larger than {maxSize}, you can compress it as a lower size image, or get Nitro to send a crystal clear image without losing quality!", UPLOAD_AREA_ALWAYS_COMPRESS: "Always Compress Images", UPLOAD_AREA_ALWAYS_COMPRESS_DESC: "You can find this in Text & Images in Settings", UPLOAD_AREA_INVALID_FILE_TYPE_TITLE: "Invalid File Type", UPLOAD_AREA_INVALID_FILE_TYPE_HELP: "Hmm.. I don't think we support that type of file.", UPLOAD_AREA_UPLOAD_FAILED_TITLE: "Upload Failed", UPLOAD_AREA_UPLOAD_FAILED_HELP: "[Click here to retry the upload](onClick)", UPLOAD_AREA_UPLOAD_FAILED_RETRY_HELP: "Something went wrong, try again later", UPLOAD_AREA_INVALID_FILE_TYPE_EMPTY: "File cannot be empty", UPLOAD_AREA_FILENAME: "Filename", UPLOAD_AREA_LEAVE_A_COMMENT: "Add a comment", UPLOAD_AREA_OPTIONAL: "optional", UPLOAD_AREA_CANCEL_ALL: "Cancel All", UPLOAD: "Upload", UPLOAD_TO: "Upload to **{destination}**", UPLOAD_TO_NEW_THREAD: "Upload to thread", UPLOAD_TO_NEW_POST: "Upload to post", UPLOAD_OPEN_FILE_FAILED: "Unable to open file: {file}.", LARGE_MESSAGE_UPLOAD_TITLE_MAX_LENGTH: "Oh no! Your message is over {maxLength, number} characters.", LARGE_MESSAGE_UPLOAD_SUBTITLE: "You can upload your message as a file instead.", UPLOAD_COMPLETE: "Upload complete", UPLOAD_IMAGE_BODY: "Is this your card? Err, do you want to upload this image?", CROP: "Crop", UNABLE_TO_PROCESS_IMAGE: "Unable to process image", IMAGE_COMPRESSION: "Image compression", IMAGE_COMPRESSION_LABEL: "Auto-compress Images", IMAGE_COMPRESSION_NITRO_UPSELL: "When this is on, images sent will be compressed. Get Nitro to send a crystal clear image! **[Get Nitro]({nitroLink})**", TITLE: "Title", SERVER_MUTE: "Server Mute", SERVER_UNMUTE: "Server Unmute", SERVER_VOICE_MUTE: "Server Mute", SERVER_VOICE_UNMUTE: "Server Unmute", SERVER_FOLDER_MARK_AS_READ: "Mark Folder As Read", SERVER_FOLDER_SETTINGS: "Folder Settings", SERVER_FOLDER_COLLAPSE_ALL: "Close All Folders", SERVER_FOLDER_MUTE_ALL: "Mute all servers in folder", SERVER_FOLDER_UNMUTE_ALL: "Unmute all servers in folder", SERVER_DEAFEN: "Server Deafen", SERVER_UNDEAFEN: "Server Undeafen", SERVER_DEAFENED: "Server Deafened", USER_POPOUT_MESSAGE: "Message", USER_POPOUT_WUMPUS_TOOLTIP: "I'm new to Discord, say hi!", SERVER_MUTED: "Server Muted", LOCAL_MUTED: "Muted by you", LOCAL_VIDEO_DISABLED: "Video disabled by you", ROLES_LIST: "{numRoles, plural, =0 {No Roles} one {Role} other {Roles}}", VIEW_ALL_ROLES: "View All Roles", USER_VOLUME: "User Volume", QUICK_DM_BLOCKED: "You cannot message blocked users", QUICK_DM_USER: "Message @!!{name}!!", USER_SETTINGS_SEARCH_BAR: "Search User Settings", USER_SETTINGS_NO_SEARCH_RESULTS: "No Search Results", USER_SETTINGS_MY_ACCOUNT: "My Account", USER_SETTINGS_EDIT_USER_PROFILE: "Edit User Profile", USER_SETTINGS_EDIT_STATUS: "Edit Status", USER_SETTINGS_ADD_STATUS: "Add Status", USER_SETTINGS_EDIT_PROFILE: "Edit Profile", USER_SETTINGS_CONFIRM_LOGOUT: "Are you sure you want to logout?", USER_SETTINGS_UNVERIFIED_EMAIL_BODY: "Please check your email and follow the instructions to verify your email. If you did not receive an email or if it expired, you can resend one.", USER_SETTINGS_LABEL_USERNAME: "Username", USER_SETTINGS_LABEL_DISCRIMINATOR: "Discriminator", USER_SETTINGS_LABEL_EMAIL: "Email", USER_SETTINGS_LABEL_CURRENT_PASSWORD: "Current Password", USER_SETTINGS_LABEL_PHONE_NUMBER: "Phone Number", USER_SETTINGS_ADD_EMAIL_CLAIM: "Add an email to claim your account.", USER_SETTINGS_NO_DISPLAYNAME_PLACEHOLDER: "You haven't added a display name yet.", USER_SETTINGS_NO_EMAIL_PLACEHOLDER: "You haven't added an email yet.", USER_SETTINGS_NO_PHONE_PLACEHOLDER: "You haven't added a phone number yet.", USER_SETTINGS_CHANGE_AVATAR: "Change Avatar", USER_SETTINGS_DELETE_AVATAR: "Delete Avatar", USER_SETTINGS_UPLOAD_AVATAR: "Upload Avatar", USER_SETTINGS_UPDATE_FAILURE: "Your username is invalid or contains invalid characters. You must update your username before you can change other user settings.", USER_SETTINGS_EDIT_PROFILE_GENERIC_ERROR: "There was a problem updating your profile", GUILD_SETTINGS_EDIT_PROFILE_GENERIC_ERROR: "There was a problem updating your server profile...", USER_SETTINGS_SCAN_QR_CODE: "Scan QR Code", USER_SETTINGS_EDIT_ACCOUNT_PASSWORD_LABEL: "Enter your password to confirm changes", USER_SETTINGS_EDIT_ACCOUNT_TAG: "TAG", USER_SETTINGS_MFA_ENABLE_CODE_LABEL: "Enter the 2FA Code", USER_SETTINGS_MFA_ENABLE_CODE_BODY: "Open your authentication app and enter the code below.", USER_SETTINGS_MFA_ENABLED: "Enabled", USER_SETTINGS_MFA_REMOVED: "2FA successfully removed", USER_SETTINGS_AVAILABLE_CODES: "Available Backup Codes", USER_SETTINGS_USED_BACKUP_CODES: "Used Backup Codes", TWO_FA_SUCCESS_BODY_MOBILE: "Your Discord account is now protected with an extra layer of security", COPY_CODE: "Copy !!{code}!! to clipboard", USER_SETTINGS_ENTER_PASSWORD_VIEW_CODES: "Enter your password to view backup codes.", USER_SETTINGS_WINDOWS_SETTINGS: "Windows Settings", USER_SETTINGS_STARTUP_BEHAVIOR: "System Startup Behavior", USER_SETTINGS_CLOSE_BUTTON: "Close Button", USER_SETTINGS_OPEN_ON_STARTUP_LABEL: "Open Discord", USER_SETTINGS_OPEN_ON_STARTUP_BODY: "Save yourself a few clicks and let Discord greet you on computer startup.", USER_SETTINGS_START_MINIMIZED_LABEL: "Start Minimized", USER_SETTINGS_START_MINIMIZED_BODY: "Discord starts in the background and remains out of your way.", USER_SETTINGS_MINIMIZE_TO_TRAY_LABEL: "Minimize to Tray", USER_SETTINGS_MINIMIZE_TO_TRAY_BODY: "Hitting X will make Discord sit back and relax in your system tray when you close the app.", USER_SETTINGS_LINUX_SETTINGS: "Linux Settings", THEME: "Theme", THEME_LIGHT: "Light", THEME_DARK: "Dark", THEME_MIDNIGHT: "Midnight", THEME_UPDATED: "Theme has been updated.", THEME_SYSTEM: "Sync with computer", THEME_DISABLED_FOR_FORCED_COLORS: "When your device has High Contrast settings enabled, your Theme will automatically default to sync with your computer.", THEME_DISABLED_FOR_CONTRAST_SYNC: "Discord is using your computer’s contrast theme. To use a Discord Theme, turn off “Sync contrast settings” in the [Accessibility](onClick) settings.", DEVELOPER_MODE: "Developer Mode", DEVELOPER_MODE_HELP_TEXT: "Developer Mode exposes context menu items helpful for people writing apps using the [Discord API]({apiDocsUrl}).", DEVELOPER_APPLICATION_TEST_MODE_MODAL_HEADER: "Application Test Mode", DEVELOPER_APPLICATION_TEST_MODE_MODAL_BODY: "Enter your Discord application ID to enable test mode for that application. An application in test mode will allow you to view related unpublished SKUs and bypass related purchases to make development easier.", DEVELOPER_APPLICATION_TEST_MODE: "Application Test Mode", DEVELOPER_APPLICATION_TEST_MODE_PLACEHOLDER: "Application ID", DEVELOPER_APPLICATION_TEST_MODE_ACTIVATE: "Activate", DEVELOPER_APPLICATION_TEST_MODE_CLEAR: "Clear", DEVELOPER_APPLICATION_TEST_MODE_INVALID: "Invalid application ID", DEVELOPER_APPLICATION_TEST_MODE_NOTE: "Enter your Discord application ID to enable test mode for that application.", DEVELOPER_ACTIVITY_SHELF: "Developer Activity Shelf", DEVELOPER_ACTIVITY_SHELF_ENABLE: "Enable Developer Activity Shelf", DEVELOPER_ACTIVITY_SHELF_NOTE: "When enabled, the activity shelf will show all activities your user and user's teams have access to.", USER_SETTINGS_APPEARANCE_PREVIEW_MESSAGE_1: "Look at me I'm a beautiful butterfly", USER_SETTINGS_APPEARANCE_PREVIEW_MESSAGE_2_LIGHT: "Fluttering in the sunlight :sun_with_face:", USER_SETTINGS_APPEARANCE_PREVIEW_MESSAGE_2_DARK: "Fluttering in the moonlight :full_moon_with_face:", USER_SETTINGS_APPEARANCE_PREVIEW_MESSAGE_3: "Waiting for the day when", USER_SETTINGS_APPEARANCE_PREVIEW_MESSAGE_4: "Compact mode would be turned on", USER_SETTINGS_APPEARANCE_PREVIEW_MESSAGE_5: "Oh here it is!", USER_SETTINGS_APPEARANCE_ZOOM_TIP: "You can change the zoom level with {modKey} +/- and reset to the default zoom with {modKey}+0.", USER_SETTINGS_APPEARANCE_PREVIEW_THEMES_TITLE: "Preview Themes", USER_SETTINGS_APPEARANCE_PREVIEW_THEME_TITLE: "Preview Theme", USER_SETTINGS_APPEARANCE_GRADIENT_THEME_TITLE: "Color", USER_SETTINGS_APPEARANCE_IN_APP_ICON_TITLE: "App Icon", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_LAYOUT: "Channel List Layout", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_LAYOUT_COZY: "Cozy", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_LAYOUT_COMPACT: "Compact", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_LAYOUT_HYBRID: "Hybrid", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_PREVIEWS: "DM Message Previews", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_PREVIEWS_ALL: "All Messages", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_PREVIEWS_UNREADS: "Unread DMs only", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_PREVIEWS_NONE: "None", USER_SETTINGS_EXACT_SEARCH_RESULT_COUNT: "Show exact search result counts", USER_SETTINGS_EXACT_SEARCH_RESULT_COUNT_DESCRIPTION: "When enabled, may increase the time it takes to show search results.", USER_SETTINGS_SHOW_LIBRARY: "Show Game Library", USER_SETTINGS_SHOW_LIBRARY_NOTE: "Turn this off to hide your Game Library so you can focus on your conversations.", HARDWARE_ACCELERATION: "Hardware Acceleration", HARDWARE_ACCELERATION_HELP_TEXT: "Turns on Hardware Acceleration, which uses your GPU to make Discord smoother. Turn this off if you are experiencing frame drops.", SWITCH_HARDWARE_ACCELERATION: "Change Hardware Acceleration", SWITCH_HARDWARE_ACCELERATION_BODY: "\n Changing the hardware acceleration setting will quit and re-launch Discord.\n Are you sure you want to do this?\n ", USER_SETTINGS_HOME_AUTO_NAV: "Auto-navigate to Home", USER_SETTINGS_HOME_AUTO_NAV_HELP_TEXT: "For community servers with Home enabled, automatically navigate to a server's Home if you've been away for a while. [Learn more about the Home beta.]({helpCenterLink})", ADD_KEYBIND: "Add a Keybind", ADD_KEYBIND_WARNING: "Keybinds are disabled while this panel is visible.", REMOVE_KEYBIND: "Remove Keybind", KEYBIND_DESCRIPTION_UNASSIGNED: "This action doesn't do anything! Please choose one from the drop down.", KEYBIND_DESCRIPTION_PUSH_TO_MUTE: "Hold to temporarily disable your microphone while in Voice Activity mode.", KEYBIND_DESCRIPTION_PUSH_TO_TALK: "Hold to temporarily enable your microphone while in Push to Talk mode.", KEYBIND_DESCRIPTION_PUSH_TO_TALK_PRIORITY: "\nHold to temporarily enable your microphone while in Push to Talk mode. Other speakers\nwho are not also transmitting with priority will temporarily have their volume lowered\nwhile you are speaking.\n", KEYBIND_DESCRIPTION_TOGGLE_MUTE: "Toggle your microphone's transmission on and off.", KEYBIND_DESCRIPTION_TOGGLE_DEAFEN: "\nToggle your speaker's playback on and off. Also disables your microphone while deafened.\n ", KEYBIND_DESCRIPTION_TOGGLE_OVERLAY: "Toggle to turn your overlay on and off.", KEYBIND_DESCRIPTION_TOGGLE_VOICE_MODE: "Toggle to switch between Push To Talk and Voice Activity mode.", KEYBIND_DESCRIPTION_TOGGLE_OVERLAY_INPUT_LOCK: "Toggle overlay interactivity lock.", KEYBIND_DESCRIPTION_TOGGLE_STREAMER_MODE: "Toggle to enable/disable Streamer Mode.", KEYBIND_DESCRIPTION_TOGGLE_GO_LIVE_STREAMING: "Toggle to start/stop streaming in your current voice channel. Streams can only be started with this keybind if Discord recognizes the game you are currently playing.", KEYBIND_DESCRIPTION_NAVIGATE_BACK: "Navigate backward in page history", KEYBIND_DESCRIPTION_NAVIGATE_FORWARD: "Navigate forward in page history", KEYBIND_UNASSIGNED: "Unassigned", KEYBIND_PUSH_TO_TALK: "Push to Talk (Normal)", KEYBIND_PUSH_TO_TALK_PRIORITY: "Push to Talk (Priority)", KEYBIND_PUSH_TO_MUTE: "Push to Mute", KEYBIND_TOGGLE_MUTE: "Toggle Mute", KEYBIND_TOGGLE_DEAFEN: "Toggle Deafen", KEYBIND_TOGGLE_OVERLAY: "Toggle Overlay", KEYBIND_TOGGLE_VOICE_MODE: "Toggle VAD", KEYBIND_TOGGLE_STREAM_MODE: "Toggle Streamer Mode", KEYBIND_NAVIGATE_BACK: "Navigate Back", KEYBIND_NAVIGATE_FORWARD: "Navigate Forward", KEYBIND_TOGGLE_GO_LIVE_STREAMING: "Toggle Screen Share", KEYBIND_IN_BROSWER_NOTICE: "Custom keybinds are not currently supported in the browser. [Download]({downloadLink}) the desktop application to use custom keybinds.", USER_SETTINGS_KEYBINDS_SHOW_LIST_TITLE: "Show Keyboard Shortcuts List", USER_SETTINGS_KEYBINDS_KEYBIND: "Keybind", USER_SETTINGS_KEYBINDS_DEFAULT_KEYBINDS_TITLE: "Default Keybinds", USER_SETTINGS_KEYBINDS_ACTION: "Action", USER_SETTINGS_KEYBINDS_NAVIGATION_SECTION_TITLE: "Navigation", USER_SETTINGS_KEYBINDS_VOICE_AND_VIDEO_SECTION_TITLE: "Voice and Video", USER_SETTINGS_KEYBINDS_CHAT_SECTION_TITLE: "Chat", USER_SETTINGS_KEYBINDS_MISCELLANEOUS_SECTION_TITLE: "Miscellaneous", USER_SETTINGS_KEYBINDS_MESSAGE_SECTION_TITLE: "Messages", USER_SETTINGS_KEYBINDS_MESSAGE_DESCRIPTION: "These shortcuts work when focused on a message.", USER_SETTINGS_KEYBINDS_DND_SECTION_TITLE: "Drag and Drop", USER_SETTINGS_KEYBINDS_DND_DESCRIPTION: "These shortcuts work when focused on a draggable item", USER_SETTINGS_KEYBINDS_SEARCH_VOICE: "Search for a voice channel", USER_SETTINGS_KEYBINDS_SEARCH_NO_RESULTS_FOUND: "No voice channels found, perhaps try another search", USER_SETTINGS_KEYBINDS_SWITCH_TO_VOICE_CHANNEL_LABEL: "Switch To Voice Channel", USER_SETTINGS_KEYBINDS_VOICE_CHANNEL_DISCONNECT_LABEL: "Disconnect From Voice Channel", USER_SETTINGS_KEYBINDS_NO_VOICE_CHANNEL_SELECTED: "No voice channel selected", USER_SETTINGS_KEYBINDS_SELECT_VOICE_CHANNEL: "Select Channel", USER_SETTINGS_KEYBIND_SWITCH_SERVER_SETTINGS_SECTION: "Select the voice channel to join or switch to", USER_SETTINGS_KEYBIND_ENABLE_DISABLE: "Enable or disable keybind", USER_SETTINGS_KEYBIND_VOICE_CHANNEL_RESULTS: "Results", USER_SETTINGS_KEYBIND_VIBE_WITH_WUMPUS_DESCRIPTION: "Listen to Lofi Beats with Wumpus", SHOW_CURRENT_ACTIVITY: "Share your detected activities with others", SHOW_CURRENT_ACTIVITY_DESC: "Discord will automatically update your status if you're attending a public Stage.", SHOW_CURRENT_ACTIVITY_DESC_EMBEDDED: "When you play a detectable game or other application that supports Rich Presence, Discord can display information about those activities, including when and how you engaged.", GAME_DETECTION_SERVICE: "Game Detection Service", USER_SETTINGS_GAMES_INSTALL_LOCATIONS: "Install locations", USER_SETTINGS_GAMES_INSTALL_LOCATION_ADD: "Add Install Location", USER_SETTINGS_GAMES_INSTALL_LOCATION_REMOVE: "Remove Location", USER_SETTINGS_GAMES_INSTALL_LOCATION_SPACE: "{available} available of {total}", USER_SETTINGS_GAMES_INSTALL_LOCATION_NAME: "Install Location Name", USER_SETTINGS_GAMES_INSTALL_LOCATION: "Location", USER_SETTINGS_GAMES_INSTALL_LOCATION_MAKE_DEFAULT: "Make this my default location", USER_SETTINGS_GAMES_REMOVE_LOCATION_BODY: "Are you sure you want to remove this installation location?", USER_SETTINGS_GAMES_SHORTCUTS_DESKTOP: "Create Desktop Shortcut", USER_SETTINGS_GAMES_SHORTCUTS_DESKTOP_NOTE: "When installing games from the Discord Store.", USER_SETTINGS_GAMES_SHORTCUTS_START_MENU: "Create Start Menu Shortcut", USER_SETTINGS_GAMES_SHORTCUTS_START_MENU_NOTE: "When installing games from the Discord Store. Also makes your games discoverable via windows search.", USER_SETTINGS_RESTART_APP_MOBILE: "Restart the app for your new settings to take effect.", INSTALL_LOCATION_MAIN: "Main", USER_SETTINGS_PRIVACY_TERMS: "Check out our [Terms of Service]({termsLink}) and [Privacy Policy]({privacyLink}).", USER_SETTINGS_HYPESQUAD: "HypeSquad", HYPESQUAD_HEADING: "Join the HypeSquad!", HYPESQUAD_HEADING_EXISTING_MEMBER: "You're in HypeSquad!", HYPESQUAD_SUBHEADING: "You're excited about Discord. We're excited that you're excited about Discord. Let's get other people excited about Discord, together.", HYPESQUAD_READY_TO_REP: "Ready to rep Discord?", HYPESQUAD_UNCLAIMED_ACCOUNT_NOTICE: "Before joining HypeSquad, you need to claim your account.", HYPESQUAD_UNVERIFIED_EMAIL_NOTICE: "Before joining HypeSquad, we need to verify your email address.", HYPESQUAD_JOIN: "Join HypeSquad", HYPESQUAD_NEWSLETTER_WARNING: "Wumpus’ lawyers wanted us to let you know that joining the HypeSquad will sign you up for our newsletter.", HYPESQUAD_PERKS_HEADING: "Perks of being hype", HYPESQUAD_PERK_TITLE_NEWSLETTER: "Super Secret Newsletter", HYPESQUAD_PERK_DESCRIPTION_NEWSLETTER: "We regularly send out newsletters with contests, giveaways, and more.", HYPESQUAD_PERK_TITLE_PROFILE_BADGE: "Hype Profile Badge", HYPESQUAD_PERK_DESCRIPTION_PROFILE_BADGE: "Get a unique profile badge to rep the HypeSquad House you're sorted into.", HYPESQUAD_PERK_TITLE_SQUAD_CHALLENGES: "Squad Challenges", HYPESQUAD_PERK_DESCRIPTION_SQUAD_CHALLENGES: "Rep your house and participate in challenges against other HypeSquad houses.", HYPESQUAD_LEAVE_PROMPT: "Don't want to be hype anymore?", HYPESQUAD_LEAVE_ACTION: "Leave the HypeSquad", HYPESQUAD_QUIZ_ONGOING_MODAL_TITLE: "Question {currentQuestion, number} of {questionCount, number}", HYPESQUAD_QUIZ_COMPLETED_MODAL_TITLE: "You've been picked!", HYPESQUAD_QUIZ_ERROR_MODAL_TITLE: "Something went wrong!", HYPESQUAD_QUIZ_CANCEL: "Cancel", HYPESQUAD_QUIZ_CLOSE: "Close", HYPESQUAD_QUIZ_RETRY: "Retry", HYPESQUAD_QUIZ_NEXT_QUESTION: "Next question", HYPESQUAD_QUIZ_SELECT_ANSWER: "Select your answer:", HYPESQUAD_QUIZ_SHOW_MY_HOUSE: "Show me my house!", HYPESQUAD_QUIZ_TITLE: "House of {house}", HYPESQUAD_QUIZ_BODY_HOUSE_1: "The House of Bravery thanks you for joining our efforts to preserve the sanctity of the land and maintain the legacy of Renwil. Your bravery is comparable to that of a thousand gallant warriors and without your leadership and prowess, we would be much closer to descending into chaos.", HYPESQUAD_QUIZ_BODY_HOUSE_2: "The House of Brilliance thanks you for joining our efforts to protect the land and maintain the legacy of Urdim. Your execution of strategies is that of a master tactician and without your calculated approach to any conflicts that comes your way, we would be much closer to descending into chaos.", HYPESQUAD_QUIZ_BODY_HOUSE_3: "The House of Balance thanks you for joining our efforts to protect the land and maintain the legacy of Arame. Your ability to stay stout and steadfast in times of uncertainty is admirable. Without your natural understanding of both your environment and your inner self, we would be much closer to descending into chaos.", HYPESQUAD_ERROR_HEADING: "Uh oh, we broke Discord!", HYPESQUAD_ERROR_BODY: "There was an error adding you to HypeSquad Online. If the error persists, please contact [{emailAddress}]({emailAddressLink}).", HYPESQUAD_LEAVE_ERROR: "There was an error removing you from HypeSquad Online. Please try again.", HYPESQUAD_ATTENDEE_CTA: "Interested in repping the HypeSquad at a local event? Coordinating an event of your own? [Apply here!]({url})", HYPESQUAD_YOUR_HOUSE: "Your House:", HYPESQUAD_MEMBERSHIP_HEADING: "House of {houseName}", HYPESQUAD_DESCRIPTION_HOUSE_1: "The universe needs people to lead the charge with confident optimism and tenacity. Without the brave, the HypeSquad would descend into chaos.", HYPESQUAD_DESCRIPTION_HOUSE_2: "It takes patience and discipline to become a vital member of the universe. Without brilliance, the HypeSquad would descend into chaos.", HYPESQUAD_DESCRIPTION_HOUSE_3: "Harmony and poise are necessary to create equilibrium in the universe. Without balance, the HypeSquad would descend into chaos.", HYPESQUAD_SWITCH_HOUSES_PROMPT: "Wanna switch houses?", HYPESQUAD_SWITCH_HOUSES_ACTION: "Take the test again", HYPESQUAD_HOUSE_1: "Bravery", HYPESQUAD_HOUSE_2: "Brilliance", HYPESQUAD_HOUSE_3: "Balance", HYPESQUAD_QUESTION_0_PROMPT: "Which insult would hurt you the most?", HYPESQUAD_QUESTION_0_RESPONSE_A: "You overreact a lot.", HYPESQUAD_QUESTION_0_RESPONSE_B: "You don't listen enough.", HYPESQUAD_QUESTION_0_RESPONSE_C: "You only care about yourself.", HYPESQUAD_QUESTION_0_RESPONSE_D: "You're ordinary.", HYPESQUAD_QUESTION_1_PROMPT: "What sounds like a perfect day to you?", HYPESQUAD_QUESTION_1_RESPONSE_A: "Sleeping in, having a giant, homemade lunch, and heading out to meet up with close friends late at night.", HYPESQUAD_QUESTION_1_RESPONSE_B: "Waking up early, finishing something you've been putting off for a while, and working on a new hobby in the late afternoon.", HYPESQUAD_QUESTION_1_RESPONSE_C: "Waking up on time, walking to the garden store and buying a new plant, and sinking deep into a bath to end the day.", HYPESQUAD_QUESTION_1_RESPONSE_D: "Waking up with no plans, taking the day as it comes.", HYPESQUAD_QUESTION_2_PROMPT: "What's something positive about you that you would agree with?", HYPESQUAD_QUESTION_2_RESPONSE_A: "Making decisions is easy for you.", HYPESQUAD_QUESTION_2_RESPONSE_B: "It's easy for you to understand new things.", HYPESQUAD_QUESTION_2_RESPONSE_C: "You're dependable.", HYPESQUAD_QUESTION_2_RESPONSE_D: "You tend to see the good in people.", HYPESQUAD_QUESTION_3_PROMPT: "Which of these smells makes you happiest?", HYPESQUAD_QUESTION_3_RESPONSE_A: "Air that's deep and smokey from a campfire, and sweet from toasted marshmallows.", HYPESQUAD_QUESTION_3_RESPONSE_B: "Crisp, cool air revitalized after a thunderstorm.", HYPESQUAD_QUESTION_3_RESPONSE_C: "Fresh flowers in bloom mixed with the clean smell of laundry drying on a line.", HYPESQUAD_QUESTION_3_RESPONSE_D: "Walking into a kitchen after something flavorful has been slow cooking for 8 hours as fresh bread cools on the counter.", HYPESQUAD_QUESTION_4_PROMPT: "Your favorite out of these genres is:", HYPESQUAD_QUESTION_4_RESPONSE_A: "Fiction", HYPESQUAD_QUESTION_4_RESPONSE_B: "Biographies and memoirs", HYPESQUAD_QUESTION_4_RESPONSE_C: "Poetry", HYPESQUAD_QUESTION_4_RESPONSE_D: "Romance", HYPESQUAD_QUESTION_5_PROMPT: "You and your best friend get into a fight. No one is clearly in the wrong. You:", HYPESQUAD_QUESTION_5_RESPONSE_A: "Wait to see if they apologize first, but eventually give in and reach out.", HYPESQUAD_QUESTION_5_RESPONSE_B: "Apologize first but secretly be upset you had to say something first.", HYPESQUAD_QUESTION_5_RESPONSE_C: "Apologize first and truly mean it.", HYPESQUAD_QUESTION_5_RESPONSE_D: "Never apologize. Whatever happens, happens.", HYPESQUAD_QUESTION_6_PROMPT: "Your dream exotic animal companion would be:", HYPESQUAD_QUESTION_6_RESPONSE_A: "Something intimidating and protective like a bear.", HYPESQUAD_QUESTION_6_RESPONSE_B: "Something small and nimble like a fox.", HYPESQUAD_QUESTION_6_RESPONSE_C: "Something large and helpful like an elephant.", HYPESQUAD_QUESTION_6_RESPONSE_D: "Something different and eye catching like a komodo dragon.", HYPESQUAD_QUESTION_7_PROMPT: "Your dream house would definitely have a:", HYPESQUAD_QUESTION_7_RESPONSE_A: "Perfectly sized bedroom with an extravagantly comfy bed.", HYPESQUAD_QUESTION_7_RESPONSE_B: "Giant, roaring fireplace with a cat sleeping calmly in front.", HYPESQUAD_QUESTION_7_RESPONSE_C: "Some seriously beautiful outdoor space.", HYPESQUAD_QUESTION_7_RESPONSE_D: "An expansive living room meant for hanging out in with tons of natural light.", HYPESQUAD_QUESTION_8_PROMPT: "You would want a job that:", HYPESQUAD_QUESTION_8_RESPONSE_A: "Challenges you in a way that makes you grow. You don't feel bored in your day to day.", HYPESQUAD_QUESTION_8_RESPONSE_B: "You're really good at and are looked to for advice.", HYPESQUAD_QUESTION_8_RESPONSE_C: "Lets you feel like you're making a difference in something.", HYPESQUAD_QUESTION_8_RESPONSE_D: "You do what needs to be done, but you're not really too invested in it.", HYPESQUAD_QUESTION_9_PROMPT: "How do you react to learning new things?", HYPESQUAD_QUESTION_9_RESPONSE_A: "You tend to stay away from learning new things and focus on becoming better at things you're already good at.", HYPESQUAD_QUESTION_9_RESPONSE_B: "Get really frustrated you aren't good at the start and become obsessive.", HYPESQUAD_QUESTION_9_RESPONSE_C: "Take things slowly and learn step-by-step to make sure you get things right.", HYPESQUAD_QUESTION_9_RESPONSE_D: "Give up early and often.", HYPESQUAD_QUESTION_10_PROMPT: "You can only listen to one type of music for the rest of your life. Do you pick:", HYPESQUAD_QUESTION_10_RESPONSE_A: "Something catchy that gets you excited.", HYPESQUAD_QUESTION_10_RESPONSE_B: "Something unintrusive that helps you concentrate.", HYPESQUAD_QUESTION_10_RESPONSE_C: "Something relaxing that puts you at ease.", HYPESQUAD_QUESTION_10_RESPONSE_D: "Something nostalgic that you know well.", HYPESQUAD_QUESTION_11_PROMPT: "Vacation time. Where are you going?", HYPESQUAD_QUESTION_11_RESPONSE_A: "Somewhere new and extremely different from where you live.", HYPESQUAD_QUESTION_11_RESPONSE_B: "Somewhere quiet. It's not a vacation unless you get to relax and reset.", HYPESQUAD_QUESTION_11_RESPONSE_C: "A place you've been before that you have grown to see as a second home.", HYPESQUAD_QUESTION_11_RESPONSE_D: "Stay at home. You're not one for travelling.", HYPESQUAD_QUESTION_12_PROMPT: "Your computer desk looks like:", HYPESQUAD_QUESTION_12_RESPONSE_A: "A mess to anyone who isn't you. But you know where everything is...", HYPESQUAD_QUESTION_12_RESPONSE_B: "A mess. And you're not sure where everything is...", HYPESQUAD_QUESTION_12_RESPONSE_C: "Kinda simple but you really like it.", HYPESQUAD_QUESTION_12_RESPONSE_D: "Something out of a magazine. It's clean and decorative.", HYPESQUAD_QUESTION_13_PROMPT: "The nightmare situation finally happens to you. You order food at a restaurant and what comes out is not what you ordered. You:", HYPESQUAD_QUESTION_13_RESPONSE_A: "Don't complain. Just send it back because you were really craving that one thing.", HYPESQUAD_QUESTION_13_RESPONSE_B: "Complain to the table that this isn't what you ordered but don't send it back.", HYPESQUAD_QUESTION_13_RESPONSE_C: "Eat it without saying anything to anyone.", HYPESQUAD_QUESTION_13_RESPONSE_D: "Complain to the waiter that this isn't what you ordered and send it back.", HYPESQUAD_QUESTION_14_PROMPT: "You're on your way out the door to something important, but your neighbor says that they need help with something. You:", HYPESQUAD_QUESTION_14_RESPONSE_A: "Help them and don't worry about the other thing you were on your way to.", HYPESQUAD_QUESTION_14_RESPONSE_B: "Apologize to your neighbor but insist you have something you must get to.", HYPESQUAD_QUESTION_14_RESPONSE_C: "Knock on your other neighbor's door and ask them if they can help out in your place.", HYPESQUAD_QUESTION_14_RESPONSE_D: "Pretend you didn't hear them.", OVERLAY_EXPLANATION: "\nEnabling the overlay will probably trigger a false positive in your anti-virus.\nAlso, the overlay may not work for everyone. If you have trouble or questions check out\n[this fancy help article!]({supportURL})\n", ENABLE_INGAME_OVERLAY: "Enable in-game overlay.", ENABLE_LEGACY_OVERLAY: "Enable legacy overlay.", OVERLAY_DISABLED_OLD_CLIENT: "Overlay is disabled because your client is out of date.", KEYBIND_TOGGLE_OVERLAY_INPUT_LOCK: "Toggle Overlay Lock", KEYBIND_ACTIVATE_OVERLAY_CHAT: "Activate Overlay Chat", INLINE_MEDIA_LABEL: "Display images, videos, and lolcats", INLINE_EMBED_MEDIA: "When posted as links to chat", INLINE_ATTACHMENT_MEDIA: "When uploaded directly to Discord", INLINE_ATTACHMENT_MEDIA_HELP: "Images larger than {maxSize} MB will not be previewed.", IMAGE_DESCRIPTION_HELP: "Image descriptions are used to describe images for screenreaders.", IMAGE_DESCRIPTION: "Image Description", GIF_AUTO_PLAY_LABEL: "Automatically play GIFs when Discord is focused.", GIF_AUTO_PLAY_LABEL_MOBILE: "Automatically play GIFs when possible.", STICKERS_AUTO_PLAY_HEADING: "Stickers", STICKERS_AUTO_PLAY_HELP: "This controls when stickers animate.", STICKERS_AUTO_PLAY_HELP_DISABLED: "This controls when stickers animate. This is currently overridden by your reduced motion preferences.", STICKERS_ALWAYS_ANIMATE: "Always animate", STICKERS_ANIMATE_ON_INTERACTION: "Animate on interaction", STICKERS_ANIMATE_ON_INTERACTION_DESCRIPTION: "On the desktop client, stickers will animate on hover or focus. On mobile clients, stickers will animate on long-press.", STICKERS_NEVER_ANIMATE: "Never animate", SEND_IMAGES_LABEL: "Send images", LOW_QUALITY_IMAGE_MODE: "Low quality image mode.", LOW_QUALITY_IMAGE_MODE_HELP: "When this is on, images sent will be lower quality on cellular networks.", CAMERA_UPLOADS_LABEL: "Camera Uploads", SAVE_CAMERA_UPLOADS_TO_DEVICE_SETTING: "Save to device", SAVE_CAMERA_UPLOADS_TO_DEVICE_SETTING_HELP: "When this is on, images and videos captured using the camera when sending a message will save to the device as well", VIDEO_UPLOAD_QUALITY_SETTING_TITLE: "Video Uploads", VIDEO_UPLOAD_QUALITY_SETTING_BEST: "Best Quality", VIDEO_UPLOAD_QUALITY_SETTING_STANDARD: "Standard (recommended)", VIDEO_UPLOAD_QUALITY_SETTING_DATA_SAVER: "Data Saver", VIDEO_UPLOAD_QUALITY_SETTING_HELP: "Best Quality will use more data. Data Saver will upload faster and use less cellular data. [Learn More]({supportURL})", VIDEO_UPLOAD_QUALITY_NITRO_UPSELL: "[Unlock 1080p video uploads with Nitro](onClick)", DATA_CONSUMPTION_SETTING: "Data Consumption", DATA_SAVING_MODE_SETTING: "Data Saving Mode", DATA_SAVING_MODE_HINT: "When this is on, images and videos will be sent in lower quality on cellular networks to reduce data usage.", RENDER_EMBEDS_LABEL: "Embeds and Link Previews", RENDER_EMBEDS: "Show embeds and preview website links pasted into chat", RENDER_REACTIONS: "Show emoji reactions on messages", ANIMATE_EMOJI: "Play animated emoji", ANIMATE_EMOJI_NOTE: "I want emoji to move and groove.", ALLOW_TTS_COMMAND: "Allow playback and usage of /tts command", CONVERT_EMOTICONS: "Automatically convert emoticons in your messages to emoji", CONVERT_EMOTICONS_HELP: "For example, when you type \\:\\-\\) Discord will convert it to :slight_smile:", MESSAGE_DISPLAY_MODE_LABEL: "Message Display", COMPACT_MODE: "Compact: Fit more messages on screen at one time. #IRC", COZY_MODE: "Cozy: Modern, beautiful, and easy on your eyes.", KEYBOARD_BEHAVIOR_MOBILE_HEADER: "Keyboard behavior", KEYBOARD_BEHAVIOR_MOBILE_SHIFT_ENTER_TO_SEND: "Shift enter to send a message.", KEYBOARD_BEHAVIOR_MOBILE_SHIFT_ENTER_TO_SEND_HINT: "By default, external keyboards will send message on enter.", CHAT_BEHAVIOR: "Chat Behavior", CUSTOM_TABS_MOBILE_HEADER: "Use Chrome Custom Tabs", CUSTOM_TABS_MOBILE_BODY: "Use Chrome Custom Tabs for links instead of an external browser.", SHOW_SPOILER_CONTENT: "Show spoiler content", SHOW_SPOILER_CONTENT_HELP: "This controls when spoiler content is displayed.", SHOW_SPOILER_ON_CLICK: "On click", SHOW_SPOILER_ON_SERVERS_I_MOD: "On servers I moderate", SHOW_SPOILER_ALWAYS: "Always", USE_THREADS_SIDEBAR_DESCRIPTION: "Open threads in split view", GUILD_DOCK: "Server Dock", GUILD_DOCK_LABEL: "Use server dock navigation", CHAT_GESTURES: "Chat Gestures", SWIPE_TO_REPLY: "Swipe to Reply", SWIPE_TO_REPLY_HINT: "Currently, swiping right-to-left opens Member List. Toggle to enable swiping to reply to a message.", SWIPE_TO_REPLY_COACHMARK: "If you prefer to swipe to reply to a message, you can change the default behavior in [Settings](onClick).", CONNECTED_ACCOUNTS: "Connected Accounts", CONNECTED_ACCOUNTS_NONE_TITLE: "No Connections", CONNECTED_ACCOUNTS_NONE: "Connect your accounts to unlock special Discord integrations", CONNECTED_ACCOUNT_REVOKED: "This account has been revoked. Would you like to [reconnect](onReconnect) it?", SUB_ENABLED_SERVERS: "Sub Enabled Servers", AUTHORIZATION: "Authorization", AUTHORIZED_APPS: "Authorized Apps", MANAGE_AUTHORIZED_APP: "Manage Authorized App", DEAUTHORIZE: "Deauthorize", DEAUTHORIZE_APP: "Deauthorize Application", ABOUT_THIS_APP: "About this App", ABOUT: "About", DEFAULT_APP_DESCRIPTION: "- None provided -", NO_AUTHORIZED_APPS: "No Authorized Apps", NO_AUTHORIZED_APPS_NOTE: "Enhance your Discord experience by authorizing and integrating third-party services", AUTHORIZED_APPS_TERMS_OF_SERVICE: "Terms of Service", AUTHORIZED_APPS_PRIVACY_POLICY: "Privacy Policy", DELETE_APP_CONFIRM_MSG: "This action will remove the link between your Discord account and this app.", JOIN_GUILD: "Join", JOINING_GUILD: "Joining", JOINED_GUILD: "Joined", CONNECT_ACCOUNT_TITLE: "Connect your accounts", CONNECT_ACCOUNT_DESCRIPTION: "Connect these accounts and unlock special Discord integrations.", DISPLAY_ON_PROFILE: "Display on profile", DISPLAY_DETAILS_ON_PROFILE: "Display details on profile", CONNECTED_ACCOUNT_ADD_DETAILS_DESCRIPTION: "Add connection details to your profile! [Learn more]({helpdeskUrl})", CONNECTED_ACCOUNT_ADD_DETAILS_SHORT_DESC: "Add connection details to your profile!", CONNECTED_ACCOUNT_ADD_DETAILS_LEARN_MORE: "Learn more", CONNECTED_ACCOUNT_ADD_DETAILS: "Add details", SYNC_FRIENDS: "Sync friends to Discord", DISPLAY_ACTIVITY: "Display {platform} as your status", DETECT_PLATFORM_ACCOUNTS: "Automatically detect accounts from other platforms on this computer.", APPLICATIONS_AND_CONNECTIONS: "Applications", APPLICATIONS_AND_CONNECTIONS_BODY: "Here's all the apps that are doing super cool things to make your Discord experience super cooler. If it gets too chilly, you can remove them at any time.", INVITE_VOICE_CHANNEL_JOIN: "Join Voice", ERROR_OCCURRED_TRY_AGAIN: "An error occurred, please try again.", ERROR_ANOTHER_TRY: "Whoops, something went wrong. Give it another try?", VERFICATION_EXPIRED: "Email verification link has expired.", VERIFYING: "Verifying", ACTION_MAY_TAKE_A_MOMENT: "This may take a moment.", VERIFICATION_VERIFYING: "Verifying your email", VERIFICATION_VERIFIED: "Email Verified!", VERIFICATION_OPEN_DISCORD: "Continue to Discord", GUILD_MEMBERSHIP_AUTOMATION_VERIFICATION_VERIFYING: "Verifying your request.", GUILD_MEMBERSHIP_AUTOMATION_VERFICATION_EXPIRED: "Verification link has expired.", GUILD_MEMBERSHIP_AUTOMATION_VERFICATION_VERIFIED: "Verification success.", IP_AUTHORIZATION_SUCCEEDED: "IP Address Authorized", AUTHORIZING: "Authorizing", AUTHORIZATION_EXPIRED: "IP authorization link has expired.", VERIFICATION_EMAIL_TITLE: "Verification Email", VERIFICATION_EMAIL_BODY: "\nWe have sent you a new verification email to **!!{email}!!**, please check both your inbox and spam folder.\n ", VERIFICATION_EMAIL_ERROR_TITLE: "Error Sending Verification Email", VERIFICATION_EMAIL_ERROR_BODY: "There was an error sending you a verification email. Try again later or contact support.", UNCLAIMED_ACCOUNT_TITLE: "Unclaimed Account", UNCLAIMED_ACCOUNT_BODY_2: "Please add an email and password to claim your account before it's lost.", UNVERIFIED_EMAIL_TITLE: "Unverified Email", FORM_LABEL_CURRENT_PASSWORD: "Current Password", CHANGE_PHONE_NUMBER: "Change Phone Number?", PTT_LIMITED_TITLE: "Hey, Just a quick heads", PTT_LIMITED_BODY: "\nPush to Talk (Limited) will only work when this browser tab has focus. Download the desktop application\nto get system-wide Push to Talk.\n ", PTT_LIMITED_WARNING: "\nPush to Talk (Limited) will only work when the browser tab has focus. [Download](onDownloadClick) the\ndesktop application to get system-wide Push to Talk.\n ", BROWSER_INPUT_DEVICE_WARNING: "\nInput devices cannot be changed while using the browser. [Download](onDownloadClick) the desktop application\nto get full control over input devices.\n ", BROWSER_OUTPUT_DEVICE_WARNING: "\nOutput devices cannot be changed while using the browser. [Download](onDownloadClick) the desktop application\nto get full control over output devices.\n ", FORM_LABEL_INPUT_DEVICE: "Input Device", FORM_LABEL_OUTPUT_DEVICE: "Output Device", FORM_LABEL_INPUT_VOLUME: "Input Volume", FORM_LABEL_OUTPUT_VOLUME: "Output Volume", FORM_HELP_VOICE_VIDEO_TROUBLESHOOTING_GUIDE: "Need help with voice or video? Check out our [troubleshooting guide]({guideURL}).", FORM_LABEL_INPUT_MODE: "Input Mode", INPUT_MODE_PTT: "Push to Talk", INPUT_MODE_PTT_LIMITED: "Push to Talk (Limited)", INPUT_MODE_PTT_RELEASE_DELAY: "Push to Talk Release Delay", INPUT_MODE_VAD: "Voice Activity", FORM_LABEL_AUTOMATIC_VAD: "Automatically determine input sensitivity", FORM_HELP_AUTOMATIC_VAD: "If the indicator is solid green then Discord is transmitting your beautiful voice.", FORM_LABEL_SHORTCUT: "Shortcut", FORM_LABEL_VOICE_PROCESSING: "Voice Processing", FORM_LABEL_VOICE_DIAGNOSTICS: "Voice Diagnostics", FORM_LABEL_QOS: "Quality Of Service", FORM_LABEL_VOLUME: "Volume", FORM_LABEL_STREAM_VOLUME: "Stream Volume", FORM_LABEL_INPUT: "Input", FORM_LABEL_OUTPUT: "Output", FORM_LABEL_VIDEO_DEVICE: "Camera", FORM_LABEL_VIDEO_PREVIEW: "Preview", TEST_VIDEO: "Test Video", FORM_WARNING_VIDEO_PREVIEW: "\nYou must grant Discord [access to your camera](onEnableClick) in order to be able to preview.\n ", ECHO_CANCELLATION: "Echo Cancellation", NOISE_SUPPRESSION: "Noise Suppression", AUTOMATIC_GAIN_CONTROL: "Automatic Gain Control", ADVANCED_VOICE_ACTIVITY: "Advanced Voice Activity", USER_SETTINGS_DISABLE_ADVANCED_VOICE_ACTIVITY: "Turning this off may help if your voice is not being detected by the automatic input sensitivity.", USER_SETTINGS_AUTOMATIC_GAIN_CONTROL: "Automatically adjust microphone volume to keep it clear and consistent.", EXPERIMENTAL_ENCODERS: "Experimental Encoders", USE_SPEAKER: "Use speaker", SWITCH_AUDIO_OUTPUT: "Change Audio Output", DISPLAY_SILENCE_WARNING: "Show a warning when Discord is not detecting audio from your mic", FORM_LABEL_TEST_MICROPHONE: "Test my Microphone", FORM_LABEL_ANDROID_OPENSL: "Low-latency Hardware Acceleration", FORM_LABEL_ANDROID_OPENSL_DESC: "OpenSL ES is a fancy audio API that may improve your call experience. **Changes to this setting require a Discord restart to take effect!**", FORM_LABEL_ANDROID_OPENSL_DEFAULT: "Let my Operating System decide", FORM_LABEL_ANDROID_OPENSL_DEFAULT_DESC: "Android will do its best to pick the right option for your device.", FORM_LABEL_ANDROID_OPENSL_FORCE_ENABLED: "Force calls to use OpenSL ES.", FORM_LABEL_ANDROID_OPENSL_FORCE_ENABLED_DESC: "This may improve your voice call experience, but may not be supported properly on older devices.", FORM_LABEL_ANDROID_OPENSL_FORCE_DISABLED: "Force calls to not use OpenSL ES.", FORM_LABEL_ANDROID_OPENSL_FORCE_DISABLED_DESC: "If you have an older device, this may fix issues you experience on voice calls.", FORM_CHECKBOX_DEBUG_LOGGING: "Debug Logging", FORM_HELP_DEBUG_LOGGING: "Saves debug logs to voice module folder that you can upload to Discord Support for troubleshooting.", SET_DEBUG_LOGGING: "Change Debug Logging", SET_DEBUG_LOGGING_BODY: "\nChanging debug logging will quit and re-launch Discord.\nAre you sure you want to do this?\n", FORM_LABEL_DEBUG: "Debugging", SHARE_DEBUG_LOGS: "Share Debug Logs", UPLOAD_DEBUG_LOGS: "Upload debug logs to Discord Support", UPLOAD_DEBUG_LOG_SUCCESS_HEADER: "Upload Successful", UPLOAD_DEBUG_LOG_SUCCESS: "Success! Your debug logs have been uploaded to Discord Support.", UPLOAD_DEBUG_LOG_FAILURE_HEADER: "Upload Failed", UPLOAD_DEBUG_LOG_FAILURE_PROGRESS: "Hold up! Your logs have been uploaded and are still being processed.", UPLOAD_DEBUG_LOG_FAILURE_NO_FILE: "We did not find any debug logs to upload. Please make sure that debug logging is enabled and try again.", UPLOAD_DEBUG_LOG_FAILURE_UPLOAD: "Something went wrong while uploading debug files. Please try again.", UPLOAD_DEBUG_LOG_FAILURE_READ: "Something went wrong while reading log files from your system. Please try again.", UPLOAD_DEBUG_LOG_FAILURE: "Something went wrong and we were unable to upload your debug files. Please try again.", SHARE_PUSH_NOTIFICATION_LOGS: "Share Push Notification Logs", FORM_CHECKBOX_AEC_DUMP: "Diagnostic Audio Recording", FORM_HELP_AEC_DUMP: "Diagnostic audio recording is used for analyzing audio problems. The last five minutes of voice is saved to voice module folder.", FORM_CHECKBOX_CONNECTION_LOG: "Save Connection Replay Log", FORM_HELP_CONNECTION_LOG: "Records all RTP data received for the next voice/video connection for debugging purposes.", OPEN_CONNECTION_REPLAY: "Open Connection Replay", FORM_LABEL_ATTENUATION: "Attenuation", FORM_HELP_ATTENUATION: "\nLower the volume of other applications by this percent when someone is speaking.\nSet to 0% to completely disable attenuation.\n ", FORM_HELP_CERTIFIED_VOICE_PROCESSING: "\nWhile using a Discord Certified microphone certain voice processing features are no longer handled by Discord itself,\nbut rather by the microphone.\n ", FORM_CHECKBOX_QOS: "Enable Quality of Service High Packet Priority", FORM_HELP_QOS: "\nHints to your router that the packets Discord is transmitting are high priority.\nSome routers or internet service providers may misbehave when this is set.\n ", ATTENUATE_WHILE_SPEAKING_SELF: "When I speak", ATTENUATE_WHILE_SPEAKING_OTHERS: "When others speak", FORM_LABEL_SUBSYSTEM: "Audio Subsystem", SWITCH_SUBSYSTEM: "Change Audio Subsystem", SWITCH_SUBSYSTEM_BODY: "\nChanging the audio subsystem will quit and re-launch Discord.\nAre you sure you want to do this?\n", SETTINGS_GENERAL: "General", SETTINGS_ADVANCED: "Advanced", SETTINGS_CUSTOM_APP_ICONS: "App Icon", SETTINGS_CUSTOM_APP_ICONS_OFFICIAL: "Official", APP_ICON_UPSELL: "Unlock all icons with Nitro", APP_ICON_UPSELL_MODAL_TITLE: "Unlock this app icon", APP_ICON_UPSELL_MODAL_BODY: "Upgrade to Nitro to express yourself with custom app icons, updated often!", APP_ICON_LOGS_ERROR_MESSAGE_GENERIC: "An error has occured. Please try again soon.", APP_ICON_COACHMARK_TITLE: "New: Custom App Icons", APP_ICON_COACHMARK_BODY_NITRO: "Personalize your home screen with an app icon that speaks to you. Now available with your Nitro membership.", APP_ICON_COACHMARK_BODY_NON_NITRO: "Personalize your home screen with an app icon that speaks to you. Available now with Nitro.", APP_ICON_COACHMARK_CTA: "Check it out", APP_ICON_COACHMARK_DISMISS: "Not Now", APP_ICON_NEW_BADGE: "New icons", APP_ICON_LIMITED_TIME: "Limited-time", APP_ICON_PREVIEW_TITLE: "Preview app icon", APP_ICON_SETTINGS_TITLE: "In-app Icon", APP_ICON_SETTINGS_DESCRIPTION: "Change the Discord in-app icon, only with Nitro.", APP_ICON_PREVIEW_DESCRIPTION_BETA: "Change the Discord icon within the app, only with Nitro. $[](betaHook)", APP_ICON_PREVIEW_DESCRIPTION: "Change the Discord icon within the app, only with Nitro.", APP_ICON_NEW_STYLES_HEADER: "New styles added!", APP_ICON_NEW_STYLES_BODY: "Spruce up your in-app icon with new custom designs.", APP_ICON_NEW_STYLES_CTA: "Check it out", APP_ICON_MISSING_NAME: "MissingNo.", APP_ICON_DEFAULT: "Blurple (Default)", APP_ICON_BRAND_INVERTED: "Drocsid", APP_ICON_BRAND_DARK: "Goth", APP_ICON_MATTE_LIGHT: "Ceramic", APP_ICON_MATTE_DARK: "Charcoal", APP_ICON_CAMO: "Tactical", APP_ICON_PASTEL: "Pastel", APP_ICON_CIRCUIT: "Mainframe", APP_ICON_GALAXY: "Galactic Chrome", APP_ICON_SUNSET: "Sunset Ave", APP_ICON_HOLO_WAVES: "Prismatic Waves", APP_ICON_PIRATE: "Matey", APP_ICON_PIRATE_1: "Yarr", APP_ICON_PIRATE_2: "Aye Aye", APP_ICON_PIRATE_3: "Discarrrd", APP_ICON_PIRATE_4: "Arrr", APP_ICON_GAMING: "Gaming", APP_ICON_BEANIE: "Sherbet Dreamsicle", APP_ICON_CHERRY_BLOSSOM: "Sakura", APP_ICON_MANGA: "WHAM", APP_ICON_BLUSH: "uwu~", APP_ICON_ANGRY: "Fuming", APP_ICON_Y2K: "Holo", APP_ICON_CONTROLLER: "D64", APP_ICON_ZOMBIE: "Zombie", APP_ICON_CLYDE_STEIN: "IT’S ALIVE", APP_ICON_BRAIN: "Big Brain", APP_ICON_SLIMY: "Slimy", APP_ICON_DRIP: "Drip", APP_ICON_PRIDE: "Pride", APP_ICON_IN_RAINBOWS: "In Rainbows", APP_ICON_COLOR_WAVE: "Color Wave", APP_ICON_MIDNIGHT_PRISM: "Midnight Prism", VOICE_BACKGROUND_DEFAULT: "Default", VOICE_BACKGROUND_SOFT_RAIN: "Soft Rain", VOICE_BACKGROUND_PICNIC: "Picnic", VOICE_BACKGROUND_SAKURA: "Sakura", VOICE_BACKGROUND_FIGHT_SCENE: "Fight Scene", VOICE_BACKGROUND_BLUE_SLUSH: "Blue Slush", VOICE_BACKGROUND_HIGH_TIDE: "High Tide", VOICE_BACKGROUND_DEBIL: "Debil", VOICE_BACKGROUND_PURPLE_LAVA: "Purple Lava", VOICE_BACKGROUND_BLUE_WORLD: "Blue World", VOICE_BACKGROUND_MILAN: "Milan", VOICE_BACKGROUND_NEUTRAL: "Neutral", SETTINGS_SYNC: "Sync across clients", FORM_LABEL_SENSITIVTY: "Sensitivity", FORM_LABEL_INPUT_SENSITIVTY: "Input Sensitivity", FORM_WARNING_INPUT_SENSITIVTY: "\nYou do not have any input devices enabled. You must grant Discord [access to your microphone](onEnableClick)\nin order to be able to observe input sensitivity.\n ", FORM_LABEL_SCREENSHARE: "Screen Share", FORM_LABEL_ACCESSIBILITY_CHAT_INPUT: "Chat Input", DISPLAY_SUBMIT_BUTTON: "Show Send Message button", FORM_LABEL_TTS: "Text-to-Speech", FORM_LABEL_TTS_NOTIFICATIONS: "Text-to-Speech Notifications", FORM_DESCRIPTION_TTS: "Turn this on to have a high tech robot speak your notifications to you.", TTS_ALLS: "For all channels", TTS_CURRENT: "For current selected channel", TTS_NEVER: "Never", FORM_LABEL_USE_RICH_CHAT_BOX: "Text box", PREVIEW_MARKDOWN: "Preview Markdown", PREVIEW_MARKDOWN_DESCRIPTION: "Preview emoji, mentions, and markdown syntax as you type", LEGACY_CHAT_INPUT: "Use the legacy chat input", LEGACY_CHAT_INPUT_DESCRIPTION: "Disables most chat features but may work better with screen readers", DESKTOP_NOTIFICATIONS_ENABLE: "Enable Desktop Notifications", DESKTOP_NOTIFICATIONS_ENABLE_BODY: "\nIf you're looking for per-channel or per-server notifications, right-click the desired server icon and select Notification Settings.\n", USER_SETTINGS: "User Settings", MORE_DETAILS: "More Details", USER_SETTINGS_WITH_BUILD_OVERRIDE: "User Settings (Build Override: !!{webBuildOverride}!!)", APP_SETTINGS: "App Settings", BILLING_SETTINGS: "Billing Settings", ACTIVITY_SETTINGS: "Activity Settings", APP_INFORMATION: "App Information", PREMIUM_SETTINGS_GENERIC: "Billing Settings", PREMIUM_SETTINGS: "Nitro Settings", PREMIUM_SETTINGS_GET: "Get Nitro", PREMIUM_SETTINGS_GET_TIER_0: "Get Nitro Basic", PREMIUM_SETTINGS_SUBSCRIBE_TODAY: "Subscribe Today", PREMIUM_SETTINGS_MANAGE: "Manage Nitro", PREMIUM_SETTINGS_PREMIUM_GUILD_SUBSCRIPTIONS: "Boosts", PREMIUM_GUILD_SUBSCRIPTIONS_GOAL: "Goal: {levelName}", PREMIUM_GUILD_SUBSCRIPTIONS_NUDGE_TOOLTIP: "Buy Boosts to help unlock {levelName} perks!", PREMIUM_GUILD_SUBSCRIPTIONS_NUDGE_TOOLTIP_COMPLETE: "This server has unlocked all Boosting perks!", PREMIUM_GUILD_SUBSCRIPTIONS_PROGRESS_BAR_BLURB: "**{numBoosts, number}/{numTotal, number}** Boosts", PREMIUM_GUILD_SUBSCRIPTIONS_PROGRESS_BAR_COMPLETED_BLURB: "**{numBoosts, number}** Boosts", PREMIUM_GUILD_SUBSCRIPTIONS_PROGRESS_BAR_TADA_ICON_ALT_TEXT: "Image of party popper", VOICE: "Voice", VOICE_AND_VIDEO: "Voice & Video", VOICE_SETTINGS: "Voice Settings", VOICE_CALL_MEMBER_LIST_TITLE: "{count, plural, =1 {# Person} other {# People}}", VOICE_CALL_ACTION_A11Y_HINT: "Open voice call actions", TURN_CAMERA_ON_A11Y_LABEL: "Turn Camera On", TURN_CAMERA_OFF_A11Y_LABEL: "Turn Camera Off", IN_GAME_VOICE_SETTINGS: "In-Game Voice Settings", VIDEO_SETTINGS: "Video Settings", TEXT: "Text", ACTIVITY_STATUS: "Activity Status", REGISTERED_GAMES: "Registered Games", GAMES: "Games", MY_GAMES: "My Games", ACTIVITY_PRIVACY: "Activity Privacy", FRIEND_REQUESTS: "Friend Requests", ACTIVITY: "Activity", LIBRARY: "Library", KEYBINDS: "Keybinds", TEXT_AND_IMAGES: "Text & Images", TEXT_AND_MEDIA: "Text & Media", CONNECTIONS: "Connections", ACCOUNT: "Account", ACCOUNT_SETTINGS: "Account Settings", NOTIFICATIONS: "Notifications", YOU: "You", NOTIFICATIONS_MUTED: "Notifications, muted", DATA_SETTINGS: "Data", APPEARANCE: "Appearance", OVERLAY: "Game Overlay", LOCALE: "Locale", LOGOUT: "Log Out", SOUNDS: "Sounds", PREMIUM: "Nitro", BASIC: "Basic", SOUND_MESSAGE: "Message", SOUND_DEAFEN: "Deafen", SOUND_UNDEAFEN: "Undeafen", SOUND_MUTE: "Mute", SOUND_UNMUTE: "Unmute", SOUND_VOICE_DISCONNECTED: "Voice Disconnected", SOUND_PTT_ACTIVATE: "PTT Activate", SOUND_PTT_DEACTIVATE: "PTT Deactivate", SOUND_USER_JOIN: "User Join", SOUND_USER_LEAVE: "User Leave", SOUND_USER_MOVED: "User Moved", SOUND_INCOMING_RING: "Incoming Ring", SOUND_OUTGOING_RING: "Outgoing Ring", SOUND_STREAM_STARTED: "Stream Started", SOUND_STREAM_STOPPED: "Stream Stopped", SOUND_VIEWER_JOIN: "Viewer Join", SOUND_VIEWER_LEAVE: "Viewer Leave", SOUND_INVITED_TO_SPEAK: "Invited to Speak", SOUND_ACTIVITY_START: "Activity Start", SOUND_ACTIVITY_END: "Activity End", SOUND_ACTIVITY_USER_JOIN: "Activity User Join", SOUND_ACTIVITY_USER_LEAVE: "Activity User Leave", SOUND_DISABLE_ALL: "Disable All Notification Sounds", SOUND_DISABLE_ALL_NOTE: "Your existing notification sound settings will be preserved.", RESET_VOICE_SETTINGS: "Reset Voice Settings", RESET_VOICE_SETTINGS_BODY: "\nResetting voice settings will clear all local mutes and local volumes.\nAre you sure you want to do this?\n", ACKNOWLEDGEMENTS: "Acknowledgements", CONNECT_TO_VOICE: "Connect to Voice", CONNECT_TO_VIDEO: "Connect to Video", DISCONNECT_FROM_VOICE: "Disconnect from Voice", JOINING_WILL_END_CURRENT_CALL_TITLE: "You're already in a call.", JOINING_VOICE_CALL_WILL_END_CURRENT_CALL_BODY: "To join this voice call, your current call will be ended.", VIDEO_UNSUPPORTED_BROWSER_TITLE: "Browser not supported", VIDEO_UNSUPPORTED_BROWSER_BODY: "Video and Screen Share are not supported in this browser. Please download our desktop client to beam your face and screen across the net.", MOBILE_ENABLE_HARDWARE_SCALING: "Enable Hardware Scaling", MOBILE_ENABLE_HARDWARE_SCALING_DESC: "Experimental feature that may improve performance in video calls. Beware, may cause jank.", CERTIFIED: "Certified", USER_SETTINGS_BLOCKED_USERS: "Blocked Users", USER_SETTINGS_BLOCKED_USERS_HEADER: "{numberOfBlockedUsers} Blocked Users", USER_SETTINGS_BLOCKED_USERS_UNBLOCKBUTTON: "Unblock", USER_SETTINGS_BLOCKED_USERS_EMPTY: "You don't have any blocked users", OVERLAY_LAUNCH_TITLE: "Use Discord overlay in-game", OVERLAY_LAUNCH_OPEN_TIP: "Press $[!!{keybind}!!](keybindHook) to show", OVERLAY_SETTINGS_TITLE: "Overlay Settings", OVERLAY_NOTIFICATION_INCOMING_CALL: "Incoming call...", OVERLAY_WIDGET_SHOW_IN_GAME: "Show window in game", OVERLAY_WIDGET_HIDE_IN_GAME: "Hide window in game", OVERLAY_NEWS_GO_LIVE_BODY: "Want to stream !!{game}!! to your friends in !!{server}!!?", OVERLAY_NEWS_GO_LIVE_CTA: "Go Live", OVERLAY_SETTINGS_GENERAL_TAB: "General", OVERLAY_SETTINGS_VOICE_TAB: "Voice", OVERLAY_TOO_SMALL: "Whoops! Your game is too tiny for our overlay. Resize to !!{width}!!x!!{height}!! to fix it.", OVERLAY_IN_GAME_PREVIEW_HEADER: "In-Game Preview", OVERLAY_CHANNEL_CHAT_HOTKEY: "Press !!{keybind}!! to talk in !!{channelName}!!", OVERLAY_USER_CHAT_HOTKEY: "Press !!{keybind}!! to talk", OVERLAY_MOBILE_TOGGLE_LABEL: "Enable Mobile Voice Overlay", OVERLAY_MOBILE_TOGGLE_DESC: "See who's talking and access shortcuts while using other apps when connected to voice.", OVERLAY_MOBILE_REQUIRED: "Enable Mobile Overlay in the Discord's Voice Settings.", OVERLAY_MOBILE_UNAUTHED: "Login to the Discord app to enable this feature.", _OVERLAY_MOBILE_UNAUTHED: "Log in to the Discord app to enable this feature.", OVERLAY_MENU_GET_INVITE: "Get Invite Link", OVERLAY_MENU_SWITCH_CHANNELS: "Switch Channels", OVERLAY_MENU_OPEN_DISCORD: "Open Discord", OVERLAY_NO_RESULTS: "We’ve searched far and wide, but we couldn't find any voice channels.", LANGUAGE: "Language", LANGUAGE_SELECT: "Select a Language", LANGUAGE_UPDATED: "Language has been Updated.", CHECKING_FOR_UPDATES: "Checking For Updates", UPDATE_AVAILABLE: "Downloading Update", UPDATE_DOWNLOADED: "Update Ready!", UPDATE_MANUALLY: "There is an update available", OUT_OF_DATE_TITLE: "You're out of date", OUT_OF_DATE_DESCRIPTION: "We've got some sweet changes to Discord (and probably a bug fix or two). Update to continue.", OUT_OF_DATE_ACTION: "Update Discord", VERY_OUT_OF_DATE_DESCRIPTION: "Your Discord installation has continuously failed to update and is now very out of date. Let's fix that... together.", UPDATE_DURING_CALL_TITLE: "Briefly leave voice?", UPDATE_DURING_CALL_BODY: "Updating Discord while in a voice channel will cause you to leave briefly. You're probably going to update anyway but, you know, just warning you.", UPDATE_DURING_CALL_CONTINUE: "Update anyway!", TAB_BADGE_A11Y_LABEL: "{count, plural, =0 {} =1 {, # new} other {, # new}},", SERVERS_TAB_BADGE_A11Y_LABEL: "{count, plural, =0 {} =1 {, # mention} other {, # mentions}},", YOU_TAB_ONBOARDING_AVATAR_TITLE: "Add an avatar", YOU_TAB_ONBOARDING_AVATAR_DESCRIPTION: "Show off your personality and help others online know they’re talking to the right person!", YOU_TAB_ONBOARDING_ABOUT_ME_TITLE: "Add a bio", YOU_TAB_ONBOARDING_ABOUT_ME_DESCRIPTION: "Games, music, TV shows, movies - what are you into? Tell people what you’re all about!", ACCOUNT_CLICK_TO_COPY: "Click to copy username", ACCOUNT_SPEAKING_WHILE_MUTED: "You are currently muted!", COPY_SUCCESS_1: "Copied!", COPY_SUCCESS_2: "Double Copy!", COPY_SUCCESS_3: "Triple Copy!", COPY_SUCCESS_4: "Dominating!!", COPY_SUCCESS_5: "Rampage!!", COPY_SUCCESS_6: "Mega Copy!!", COPY_SUCCESS_7: "Unstoppable!!", COPY_SUCCESS_8: "Wicked Sick!!", COPY_SUCCESS_9: "Monster Copy!!!", COPY_SUCCESS_10: "GODLIKE!!!", COPY_SUCCESS_11: "BEYOND GODLIKE!!!!", SET_STATUS: "Set Status", ONLINE_STATUS: "Online Status", CHANGE_ONLINE_STATUS: "Change Online Status", STATUS_ONLINE: "Online", STATUS_ONLINE_MOBILE: "Online via mobile", STATUS_OFFLINE: "Offline", STATUS_IDLE: "Idle", STATUS_UNKNOWN: "Unknown", STATUS_DND: "Do Not Disturb", STATUS_INVISIBLE: "Invisible", STATUS_DND_HELP: "You will not receive any desktop notifications.", STATUS_DND_HELP_FOCUS_MODE: "Enables Focus Mode", STATUS_INVISIBLE_HELPER: "You will not appear online, but will have full access to all of Discord.", STATUS_UNTIL: "until {endTime}", STATUS_STREAMING: "Streaming", STATUS_TAB_A11Y_ACTION: "Set your status", STATUS_MENU_LABEL: "Status Actions", PINNED_MESSAGES: "Pinned Messages", PINNED_MESSAGES_PRO_TIP: "PROTIP:", PINNED_MESSAGES_PRO_TIP_BODY_CHANNEL: "Users with 'Manage Messages' permission can pin a message from its context menu.", PINNED_MESSAGES_PRO_TIP_BODY_DMS: "You can pin a message from its context menu.", NO_PINS_IN_CHANNEL: "This channel doesn't have any\npinned messages... yet.", NO_PINS_IN_DM: "This direct message doesn't have\nany pinned messages... yet.", JUMP: "Jump", COLLAPSE: "Collapse", EXPAND: "Expand", UNBLOCK_TO_JUMP_TITLE: "Soo... You Blocked This Person", UNBLOCK_TO_JUMP_BODY: "First unblock '!!{name}!!' and then you can jump to their message.", PIN_MESSAGE_TITLE: "Pin It. Pin It Good.", PIN_MESSAGE_BODY: "\nHey, just double checking that you want to pin this message to #!!{channelName}!! for posterity and greatness?", PIN_MESSAGE_BODY_PRIVATE_CHANNEL: "\nHey, just double checking that you want to pin this message to the current channel for posterity and greatness?", UNPIN_MESSAGE_TITLE: "Unpin Message", UNPIN_MESSAGE_BODY: "You sure you want to remove this pinned message?", UNPIN_CONFIRM: "Remove it please!", UNPIN_MESSAGE_CONTEXT_MENU_HINT: "\nYou can hold down shift when clicking **unpin message** to bypass this confirmation entirely.", PIN_CONFIRM: "Oh yeah. Pin it", PIN_MESSAGE_TOO_MANY_TITLE: "The Pin Broke", PIN_MESSAGE_TOO_MANY_BODY: "\nDiscord is unable to pin that message. You may have hit the limit of {maxPins} pins in channel #!!{channelName}!!.", PIN_MESSAGE_TOO_MANY_BODY_PRIVATE_CHANNEL: "\nDiscord is unable to pin that message. You may have hit the limit of {maxPins} pins in this channel.", UNPIN_MESSAGE_FAILED_TITLE: "The Pin Is Stuck!", UNPIN_MESSAGE_FAILED_BODY: "Discord failed to unpin that message for some reason. Sorry about that.", PINS_DISABLED_NSFW: "This channel is age-restricted and due to its content its pins should not be viewed by anyone.", FAVORITE_ITEM: "Favorite", UNFAVORITE_ITEM: "Unfavorite", NO_INPUT_DEVICES: "No Input Devices", NO_OUTPUT_DEVICES: "No Output Devices", NO_VIDEO_DEVICES: "No Video Devices", DEFAULT: "Default", INPUT_DEVICE: "Input Device", OUTPUT_DEVICE: "Output Device", CONNECTION_STATUS_CONNECTING: "Connecting", CONNECTION_STATUS_AUTHENTICATING: "Authenticating", CONNECTION_STATUS_AWAITING_ENDPOINT: "Awaiting Endpoint", CONNECTION_STATUS_DISCONNECTED: "Disconnected", CONNECTION_STATUS_VOICE_CONNECTED: "Voice Connected", CONNECTION_STATUS_VIDEO_CONNECTED: "Video Connected", CONNECTION_STATUS_RTC_CONNECTING: "RTC Connecting", CONNECTION_STATUS_ICE_CHECKING: "Checking Route", CONNECTION_STATUS_DTLS_CONNECTING: "DTLS Connecting", CONNECTION_STATUS_NO_ROUTE: "No Route", CONNECTION_STATUS_RTC_DISCONNECTED: "RTC Disconnected", CONNECTION_STATUS_STREAM_CONNECTED: "Watching !!{username}!!'s Stream", CONNECTION_STATUS_STREAM_SELF_CONNECTED: "Screen Sharing", SECURE_CONNECTION: "Secure Connection", DEBUG: "Debug", COPY_STATS: "Copy Stats", DISCONNECT_SELF: "Disconnect", DISCONNECT_OTHER: "Disconnect", RTC_CONNECTION: "RTC Connection", RTC_CONNECTION_STATE_AWAITING_ENDPOINT: "We're waiting to connect for ya. If your connection gets stuck here, we may be experiencing a region outage. Check our [service status page]({url}) for more info or consider asking your server admins or owner to temporarily switch regions under the Voice Channel Settings.", RTC_CONNECTION_STATE_CONNECTING: "\nA RTC server has been allocated for you and Discord is attempting to connect to it. Get ready to roll out.\n", RTC_CONNECTION_STATE_AUTHENTICATING: "\nDiscord has connected to your real-time communication server and is securing the connection.\n", RTC_CONNECTION_STATE_RTC_CONNECTING: "\nLocked and loaded! Discord has established a secure connection to your real-time communication server and is\nattempting to send data.\n", RTC_CONNECTION_STATE_ICE_CHECKING: "\nShields Up! Discord has established a secure connection to your real-time communication server and is attempting to send data.\nIf your browser connection is stuck in this step, check out [this swanky article]({url}) to help resolve the problem.\n", RTC_CONNECTION_STATE_NO_ROUTE: "Hm, Discord can't establish a connection. We'll try again in a moment. If Discord keeps getting stuck in this step, check out [this fancy article]({url}) to help resolve the problem.", RTC_CONNECTION_STATE_RTC_CONNECTED_AVERAGE_PING: "Average ping: **{averagePing} ms**", RTC_CONNECTION_STATE_RTC_CONNECTED_LAST_PING: "Last ping: **{lastPing} ms**", RTC_CONNECTION_STATE_RTC_CONNECTED_LOSS_VALUE: "Outbound packet loss rate: **{outboundLossRate}%**", RTC_CONNECTION_STATE_RTC_CONNECTED_DETAILS: "You may notice delayed audio at {badPing} ms or higher. If the problem persists, disconnect and try again.", RTC_CONNECTION_STATE_RTC_CONNECTED_DETAILS_WITH_LOSS: "You may notice delayed audio at {badPing} ms or higher. You may sound robotic if your packet loss rate is over {badLossRate}%. If the problem persists, disconnect and try again.", RTC_CONNECTION_STATE_DISCONNECTED: "Discord's connection has been interrupted. Sorry about that, we'll attempt to re-establish the connection in a moment.", TUTORIAL_CLOSE: "Got it!", SKIP_ALL_TIPS: "Skip all tips", TIP_WRITING_MESSAGES_TITLE3: "Have a Conversation", TIP_WRITING_MESSAGES_BODY3: "\nNow that you've joined {serverName}, make your presence known and **say hello**! \uD83D\uDC4B\n\n ", TIP_WHOS_ONLINE_TITLE3: "What's everyone doing?", TIP_WHOS_ONLINE_BODY3: "\nHere you can view all the members of this channel. See who's online and what they're up to, like playing a game or listening to music.\n\n ", TIP_INSTANT_INVITE_TITLE3: "Invite Your Friends", TIP_INSTANT_INVITE_BODY3: "\nTo invite people to a server, click the share icon $[!!{shareIcon}!!](shareIconHook) next to any channel.\n\n ", TIP_SERVER_SETTINGS_TITLE3: "Access Server Settings", TIP_SERVER_SETTINGS_BODY3: "\nClick here to adjust your server notifications or privacy settings.\n\n ", TIP_DIRECT_MESSAGES_TITLE3: "Start a separate conversation", TIP_DIRECT_MESSAGES_BODY3: "\nWant some one-on-one time? Click here to send a direct message to a friend.\n\n ", TIP_CREATE_MORE_SERVERS_TITLE3: "Create Your Own Server", TIP_CREATE_MORE_SERVERS_BODY3: "\nCreate a brand new server with voice and text chat for your buddies!\n\n ", TIP_CREATE_FIRST_SERVER_TITLE3: "Create Your Own Server", TIP_CREATE_FIRST_SERVER_BODY3: "\nCreate a brand new server with voice and text chat for your buddies!\n\n ", TIP_FRIENDS_LIST_TITLE3: "See Your Friends", TIP_FRIENDS_LIST_BODY3: "\nView all of your friends and direct messages, or start a new private conversation.\n\n ", BAN_USER_TITLE: "Ban '!!{user}!!'", BAN_USER_CONFIRMED: "'!!{user}!!' has been banned from the server.", BAN_CONFIRM_TITLE: "Would you like to ban '!!{username}!!?'", FORM_LABEL_DELETE_MESSAGE_HISTORY: "Delete Message History", FORM_LABEL_REASON_KICK: "Reason for Kick", FORM_LABEL_REASON_BAN: "Reason for Ban", DELETE_MESSAGE_HISTORY_OPTION_NONE: "Don't Delete Any", DELETE_MESSAGE_HISTORY_OPTION_1HR: "Previous Hour", DELETE_MESSAGE_HISTORY_OPTION_6HR: "Previous 6 Hours", DELETE_MESSAGE_HISTORY_OPTION_12HR: "Previous 12 Hours", DELETE_MESSAGE_HISTORY_OPTION_24HR: "Previous 24 Hours", DELETE_MESSAGE_HISTORY_OPTION_3D: "Previous 3 Days", DELETE_MESSAGE_HISTORY_OPTION_7D: "Previous 7 Days", BAN_REASON_OPTION_SPAM_ACCOUNT: "Suspicious or spam account", BAN_REASON_OPTION_HACKED_ACCOUNT: "Compromised or hacked account", BAN_REASON_OPTION_BREAKING_RULES: "Breaking server rules", BAN_REASON_OPTION_OTHER: "Other", BAN_REASON_REQUIRED_ERROR: "Ban reason must be provided", CALL_USER_PROMPT_HEADER: "Ready to start a call?", CALL_USER_PROMPT: "Enjoy this moment. Then jump in when you're ready.", CALL_USER_CONFIRM: "I'm ready!", DEFAULT_FAILURE_TO_PERFORM_ACTION_MESSAGE: "Oops! Looks like that didn't work", NO_TEXT: "No", YES_TEXT: "Yes", CLOSE: "Close", SEND: "Send", SEND_COMPRESSED: "Send Compressed", SAVE: "Save", APPLY: "Apply", SELECT: "Select", SELECT_ALL: "Select All", START: "Start", LAUNCH: "Launch", JOIN_ACTIVITY: "Join", LEAVE: "Leave", ADD: "Add", ADDED: "Added", REMAINING_PARTICIPANTS: "Add Members (!!{current}!!/!!{max}!!)", SEND_WAVE: "Send a wave", WAVE_TO: "Wave to !!{username}!!", WAVE_DEFAULT_RECIPIENT: "your pal", WAVE_CTA: "\uD83D\uDC4B Wave", WAVE: "Wave", CONTINUE_IN_BROWSER: "Continue in Browser", NEXT: "Next", BACKSPACE: "Backspace", SYSTEM_KEYBOARD: "System keyboard", PAUSE: "Pause", PLAY: "Play", PLAY_NOW: "Play now", PLAY_AGAIN: "Play again", TOGGLE_DRAWER: "Toggle drawer", CLOSE_DRAWER: "Close drawer", TOGGLE_MICROPHONE: "Toggle microphone", TOGGLE_CAMERA: "Toggle camera", TOGGLE_SCREENSHARE: "Toggle screen share", CHANGE_CAMERA: "Change camera", SAVED_SETTINGS: "Settings successfully updated.", DEVICE_SETTINGS: "Device Settings", ACTIONS: "Actions", SAVE_MEDIA_SUCCESS_MOBILE: "Saved", SAVE_MEDIA_FAILURE_MOBILE: "Save Failed", SAVE_MEDIA_FAILURE_HELP_MOBILE: "Please check your system network and privacy settings for the Photos app.", NO_CONTACTS_ACCESS: "Discord does not have access to your contacts", NO_CAMERA_ACCESS: "Discord does not have access to your camera", NO_MICRPHONE_ACCESS: "Discord does not have access to your microphone", NO_PHOTOS_ACCESS: "Discord does not have access to your photos", NO_SELECT_PHOTO_ACCESS: "Discord does not have access to this photo.", NO_INPUT_MONITORING_ACCESS: "Discord does not have access to system wide keyboard input required for Push to Talk", ENABLE_PRIVACY_ACCESS: "You can enable access in privacy settings.", PIN_MESSAGE_BODY_MOBILE: "Are you sure you want to pin this message?", JOIN_VOICE_CHANNEL: "Connect to this voice channel?", LEAVE_SERVER_BODY_MOBILE: "Are you sure you want to leave !!{name}!!?", TIMEOUT_USER_TITLE: "Timeout '!!{user}!!'", REMOVE_TIMEOUT_USER_TITLE: "Remove timeout from '!!{user}!!'", KICK_USER_TITLE: "Kick '!!{user}!!'", KICK_USER_BODY: "Are you sure you want to kick !!{user}!! from the server? They will be able to rejoin again with a new invite.", KICK_USER_CONFIRMED: "'!!{user}!!' has been kicked from the server.", KICK_USER_ERROR_GENERIC: "Whoops... !!{user}!! could not be kicked. Please try again!", BAN_USER_BODY: "Are you sure you want to ban !!{user}!!? They won't be able to return unless you unban them.", BAN_USER_ERROR_GENERIC: "Whoops... !!{user}!! could not be banned. Please try again!", JOIN_AFK_CHANNEL_BODY: "It seems you've joined the inactive channel. You cannot speak in this channel.", IMAGE: "Image", PHOTO: "Photo", VIDEO: "Video", REPORT: "Report", REPORT_THIS_USER_FOR_ABUSE: "Report This User for Abuse", ACCEPT: "Accept", AGREE: "Agree", REPORT_SPAM: "Report Spam", REPORT_NOT_SPAM: "Mark as not spam", REPORT_NOT_SPAM_TOOLTIP: "Accept DM and help improve our spam detection", ACCEPT_DM_HEADER: "New direct message", ACCEPT_DM_SUBTEXT: "Accept to start chatting. They will only be notified if you message them back.", ACCEPT_SPAM_DM_HEADER: "This might be spam", ACCEPT_SPAM_DM_SUBTEXT: "Message content hidden just to be safe. You can still reply.", ACCEPT_SPAM_DM_SUBTEXT_MOBILE: "Message content hidden just to be safe. You can still reply.\nMessages marked as not spam will help improve our spam filters.", HIDDEN_SPAM_MESSAGE_COUNT: "{count, plural, one {1 message hidden from likely spammer.} other {{count} messages hidden from likely spammer.}}", BLOCK_SPAMMER_HEADER: "Want to block them?", BLOCK_SPAMMER_SUBHEADER: "If blocked, {username} will be unable to message you.", SPAMMER_BLOCKED: "Blocked {username}", CLOSE_DM: "Close DM", EDIT_MESSAGE: "Edit Message", REMOVE_MESSAGE_ATTACHMENT: "Remove Message Attachment", SAVE_IMAGE: "Save Image", COPY_MEDIA_LINK: "Copy Media Link", DELETE_MESSAGE: "Delete Message", EDITING_MESSAGE: "Editing Message", EDITING_MESSAGE_CANCEL: "Cancel Editing Message", SPEAK_MESSAGE: "Speak Message", STOP_SPEAKING_MESSAGE: "Stop Speaking Message", MARK_UNREAD: "Mark Unread", QUOTE: "Quote", READ_ONLY_CHANNEL: "Channel is read-only.", CREATE_CHANNEL: "Create Channel", CHANNEL_NAME_PLACEHOLDER: "new-channel", DELETED_CHANNEL_PLACEHOLDER: "deleted-channel", UNKNOWN_CHANNEL_PLACEHOLDER: "unknown-channel", UNKNOWN_CHANNEL: "Unknown", DELETED_ROLE_PLACEHOLDER: "deleted-role", UNKNOWN_USER_MENTION_PLACEHOLDER: "unknown-user", CATEGORY_NAME_PLACEHOLDER: "New Category", CREATE_CHANNEL_IN_CATEGORY: "Create Channel in !!{categoryName}!!", OPEN_IN_BROWSER: "Open in Browser", OPEN_IN_APP: "Open App", USER_SIGNED_IN_AS: "$[You are signed in as](signedInAs) $[](userTag)", NEW_DM: "New Direct Message", NEW_MESSAGE: "New Message", EXPIRES_IN: "Expires in:", DELETE_CHANNEL_BODY: "Are you sure you want to delete **!!{channelName}!!**? This cannot be undone.", DELETE_FAVORITES_CHANNEL_TITLE: "Remove from Favorites", DELETE_FAVORITES_CHANNEL_BODY: "Are you sure you want to remove **!!{channelName}!!** from Favorites? You can add **!!{channelName}!!** back into Favorites at any time.", DELETE_FAVORITES_CHANNEL_CONFIRM: "Remove Channel", DELETE_FAVORITES_CATEGORY_BODY: "Are you sure you want to delete **!!{channelName}!!** from Favorites? Conversations under this category will be uncategorized.", DELETE_FAVORITES_CATEGORY_CONFIRM: "Remove Category", SERVERS: "Servers", USERS: "Users", HOW_YOU_SIGN_IN: "How you sign into your account", USER: "User", COPY_TEXT: "Copy Text", COPIED_TEXT: "Copied to clipboard.", COPY_USERNAME: "Copy Username", LOAD_IMAGE_ERROR: "Failed to load the image.\nPlease try again.", SEND_MESSAGE_FAILURE: "Failed to send message. Hold for options.", INVALID_ATTACHMENTS_FAILURE: "Attachments you trying to send are unavailable.", RESEND_MESSAGE: "Resend message", PARTIAL_OUTAGE: "\n{count, plural, one {**1** other server is unavailable due to a temporary outage.}\nother {**{count}** other servers are unavailable due to a temporary outage.}}", PARTIAL_OUTAGE_A11Y: "{count, plural, one {1 server is unavailable due to a temporary outage.} other {{count} servers are unavailable due to a temporary outage.}} Discord's Twitter should have more information.", MUTE_CHANNEL: "Mute **!!{name}!!**", UNMUTE_CHANNEL: "Unmute **!!{name}!!**", MUTE_CONVERSATION: "Mute Conversation", UNMUTE_CONVERSATION: "Unmute Conversation", MUTE_SERVER: "Mute Server", UNMUTE_SERVER: "Unmute Server", MUTE_THREAD: "Mute Thread", UNMUTE_THREAD: "Unmute Thread", MUTE_CHANNEL_GENERIC: "Mute Channel", UNMUTE_CHANNEL_GENERIC: "Unmute Channel", SYNC_ACROSS_CLIENTS_TEXT: "Sync across clients.", MOBILE_AUTOMATIC_THEME: "Automatic (follows system settings)", MOBILE_AUTOMATIC_THEME_SHORT: "Automatic", SYNC_ACROSS_CLIENTS_TEXT_HELP: "\nTurning this on will overwrite text & image settings on all other clients including desktop and browser.\n ", SYNC_ACROSS_CLIENTS_APPEARANCE_HELP: "\nTurning this on will overwrite the above appearance settings on all other clients including desktop and browser.\n ", SYNC_ACROSS_CLIENTS_APPEARANCE_HELP_NO_WHITESPACE: "Turning this on will overwrite the above appearance settings on all other clients including desktop and browser.", SETTINGS_TITLE_NEW_LAYOUT: "New Layout", NEW_LAYOUT_TOGGLE_TEXT: "Show New Layout", NEW_LAYOUT_FEEDBACK_TEXT: "Give us Feedback", NEW_LAYOUT_LEARN_MORE: "Learn More", NETWORK_ERROR_CLOUDFLARE_INTERMITTENT: "There may have been a brief CloudFlare service interruption; please try again.", NETWORK_ERROR_CLOUDFLARE_UNAUTHORIZED: "Your IP address is currently blacklisted on CloudFlare.", NETWORK_ERROR_REST_REQUEST: "A network error has occurred.", NETWORK_ERROR_CONNECTION: "A network error has occurred. Please check your connection and try again.", NETWORK_ERROR_UNKNOWN: "An unknown network error has occurred.", NETWORK_ERROR_SSL: "A network SSL error has occurred. Please ensure your system clock is synced.", NETWORK_ERROR_UNAUTHORIZED: "You are unauthorized to perform this request.", NETWORK_ERROR_REQUEST_TOO_LARGE: "Network request payload was too large.", NETWORK_ERROR_FORBIDDEN: "A forbidden network request has occurred, please try again.", NETWORK_ERROR_BAD_REQUEST: "A bad network request has occurred, please try again.", NETWORK_OFFLINE: "Network connectivity limited or unavailable.", NETWORK_OFFLINE_AIRPLANE_MODE: "Airplane mode is active.", TIMEOUT_ERROR: "Operation took too long to complete, please try again.", INTERNAL_SERVER_ERROR: "An internal server error has occurred, please try again.", WEB_BROWSER: "Web Browser", WEB_BROWSER_IN_APP: "In-App Browser", WEB_BROWSER_SAFARI: "Safari", WEB_BROWSER_CHROME: "Chrome", WEB_BROWSER_EXTERNAL: "External Browser", JUMP_TO_MESSAGE: "Jump to Message", CHANNEL_PERMISSIONS: "Channel Permissions", CATEGORY_PERMISSIONS: "Category Permissions", FORM_HELP_CHANNEL_PERMISSIONS: "Change privacy settings and customize how members can interact with this channel.", NEW_PERMISSION: "New Permission", PERMISSION_OVERRIDES: "Permission Overrides", BUNDLE_READY_TITLE: "Augment Complete", BUNDLE_READY_BODY: "Restart Discord for some improvements!", BUNDLE_READY_RESTART: "Restart", BUNDLE_READY_LATER: "Not now", UNHANDLED_LINK_TITLE: "Unhandled Link", UNHANDLED_LINK_BODY: "Sorry, no applications on your device were found to handle this link:", CHANNEL_SETTINGS_HAVE_BEEN_UPDATED: "Channel settings have been updated.", CHANNEL_HAS_BEEN_DELETED: "Channel has been deleted.", CATEGORY_SETTINGS_HAVE_BEEN_UPDATED: "Category settings have been updated.", CATEGORY_HAS_BEEN_DELETED: "Category has been deleted.", ADD_NEW_CONNECTION: "Add New Connection", DEFAULT_INPUT_PLACEHOLDER: "Loading...", UNKNOWN_USER: "Unknown User", INVITE_NO_THANKS: "No Thanks", PINS: "Pins", PINS_UNREAD_A11Y_LABEL: "Pins, unread", QUARANTINE_MODE: "Quarantine Mode", YOUR_ACCOUNT_IS_QUARANTINED: "Your account is quarantined", QUARANTINE_MODE_INFO_MODAL_DESCRIPTION: "Based on your recent activity, Discord has quarantined your account. We have limited your access to new communities. [Learn more about account quarantine]({helpdeskArticle}).", QUARANTINE_MODE_INFO_MODAL_APPEAL: "If you think this is a mistake, [appeal your quarantine]({appealLink}).", QUARANTINE_MODE_NOTICE: "Your account is quarantined. Discord has limited your access to new communities.", APPEAL_QUARANTINE: "Appeal Quarantine", QUARANTINE_MODE_DM_BAR_SUBTEXT: "You can't start new direct messages. [Learn more about account quarantine]({helpdeskArticle}).", LIMITED_ACCESS_NAG_BAR_NOTICE: "Hey, something looks off with your account so we limited your access, but sometimes we make mistakes.", LIMITED_ACCESS_NAG_BAR_APPEAL: "Regain access here", LIMITED_ACCESS_INFO_MODAL_HEADING: "Your account has limited access", LIMITED_ACCESS_INFO_MODAL_DESCRIPTION: "We noticed that something looks off with your account, and to be safe we limited your account access.", LIMITED_ACCESS_INFO_MODAL_DESCRIPTION_V2: "Discord has limited your access to some features. Please check for system messages from Discord with more information.", LIMITED_ACCESS_INFO_MODAL_APPEAL: "Did we make a mistake? [Regain access here]({appealLink}).", LIMITED_ACCESS_DM_BAR_SUBTEXT: "You can't start new direct messages right now. [Did we make a mistake? Regain access here]({appealLink}).", GUILD_LIMITED_ACCESS_INFO_MODAL_HEADING: "This server's features are limited", GUILD_LIMITED_ACCESS_INFO_MODAL_DESCRIPTION: "{guildName} has temporarily lost access to some Discord features because it broke Discord's rules for servers. Please see the [Help Center]({helpdeskArticle}) for more information.", GUILD_LIMITED_ACCESS_INFO_MODAL_DESCRIPTION_FALLBACK: "This server has temporarily lost access to some Discord features because it broke Discord's rules for servers. Please see the [Help Center]({helpdeskArticle}) for more information.", MAXIMUM_LENGTH: "Maximum {maxLength} characters.", MAXIMUM_LENGTH_ERROR: "Must be {maxLength} characters or fewer in length.", MINIMUM_LENGTH: "Minimum {minLength} characters.", MINIMUM_LENGTH_ERROR: "Must be {minLength} characters or more in length.", CHARACTER_COUNT: "Character count", CHARACTER_COUNT_A11Y_LABEL: "Character count, {remainingCharacters, plural, =0 {0 characters} one {1 character} other {{remainingCharacters} characters}} remaining", TITLE_BAR_CLOSE_WINDOW: "Close", TITLE_BAR_MINIMIZE_WINDOW: "Minimize", TITLE_BAR_MAXIMIZE_WINDOW: "Maximize", TITLE_BAR_FULLSCREEN_WINDOW: "Full screen", CHAT: "Chat", CHANNEL_CHAT_HEADING: "{channelName} chat", QUICK_SWITCHER: "Quick switcher", QUICK_SWITCHER_RESULTS_CHANNEL_LABEL: "!!{name}!!, !!{type}!!, !!{guild}!!", QUICK_SWITCHER_RESULTS_LABEL: "Results", QUICK_SWITCHER_RESULTS_GROUP_DM_LABEL: "!!{name}!!, Group Message", QUICK_SWITCHER_RESULTS_GROUP_DM_UNREAD_LABEL: "!!{name}!!, Group Message {mentions, plural, =0 {} =1 {, # unread message} other {, # unread messages}}", QUICK_SWITCHER_RESULTS_USER_LABEL: "!!{name}!!, User, !!{id}!!", QUICK_SWITCHER_RESULTS_USER_UNREAD_LABEL: "!!{name}!!, User, !!{id}!! {mentions, plural, =0 {} =1 {, # unread message} other {, # unread messages}}", QUICK_SWITCHER_RESULTS_GUILD_LABEL: "!!{name}!!, Server", LISTEN_ON_SPOTIFY: "Listen on spotify", TOGGLE_DEAFEN: "Toggle deafen", TOGGLE_MUTE: "Toggle mute", TOGGLE_EMOJI_KEYBOARD: "Toggle emoji keyboard", REMOVE_ITEM_FROM_LIST_A11Y_LABEL: "!!{text}!!, remove", ITEM_REMOVED_FROM_LIST_A11Y_LABEL: "!!{text}!!, removed", ITEM_SELECTED_FROM_LIST_A11Y_LABEL: "!!{text}!!, selected", TWITTER: "Twitter", FACEBOOK: "Facebook", INSTAGRAM: "Instagram", SPOTIFY: "Spotify", VIEW_SPECTATORS: "View spectators", OPEN: "Open", SELECT_PICTURE: "Select picture", TAB_BAR: "Tab bar", TAB_A11Y_ROLE_DESCRIPTION: "Tab, {position} of {tabCount}", TOGGLE_MEDIA_KEYBOARD: "Toggle media keyboard", TOGGLE_MEDIA_KEYBOARD_HINT: "Open to add an image to your message, use a command, or start a thread", A11Y_MOBILE_HEADER_BUTTON_HINT: "double-tap for more options", A11Y_MOBILE_BUTTON_HINT: "double-tap to activate", A11Y_ROLE_CHECKBOX: "checkbox", A11Y_ROLE_SWITCH: "switch", A11Y_ROLE_RADIO_BUTTON: "radio button", A11Y_ROLE_VIDEO_BUTTON: "video, button", A11Y_ROLE_IMAGE_BUTTON: "image, button", A11Y_LOADING_STARTED: "Loading", A11Y_LOADING_FINISHED: "Loading finished", A11Y_CHECKBOX_CHECKED: "checked", A11Y_CHECKBOX_UNCHECKED: "unchecked", DND_ITEM_PICKED_UP: "Picked up !!{itemName}!!", DND_ITEM_DROPPED: "Dropped item", DND_DRAG_CANCELED: "Stopped dragging", DND_DROP_COMBINE: "Combine with !!{itemName}!!", DND_DROP_ABOVE: "Above !!{itemName}!!", DND_END_OF_LIST: "end of list", DND_OPERATION_LABEL_START: "Start Drag and Drop", DND_OPERATION_LABEL_MOVE: "Move", DND_OPERATION_LABEL_CANCEL: "Cancel", DND_OPERATION_LABEL_DROP: "Drop item", DND_MOVE_UP: "Move item up in list", DND_MOVE_DOWN: "Move item down in list", DND_MOBILE_ITEM_HINT: "double-tap and hold to drag", DND_MOBILE_DROP_ADD_TO_FOLDER: "Add to folder, !!{folderName}!!", DND_MOBILE_DROP_COMBINE_TO_NEW_FOLDER: "Combine and create new folder", A11Y_ANNOUNCEMENT_GENERIC_FAIL: "update failed", A11Y_ANNOUNCEMENT_FRIEND_CANCEL_REQUEST: "friend request dismissed", A11Y_ANNOUNCEMENT_FRIEND_ACCEPT_REQUEST: "friend request accepted", A11Y_ANNOUNCEMENT_FRIEND_REMOVED: "friend removed", A11Y_ANNOUNCEMENT_USER_UNBLOCKED: "user unblocked", A11Y_ANNOUNCEMENT_DM_CLOSED: "direct message closed", A11Y_ANNOUNCEMENT_DM_CLOSED_FAILED: "failed to close direct message", A11Y_ANNOUNCEMENT_USER_ADDED_TO_GROUP_DM: "user added to the group", A11Y_ANNOUNCEMENT_USER_ADDED_TO_GROUP_DM_FAILED: "failed to add user to the group", A11Y_ANNOUNCEMENT_MESSAGE_DELETED: "message deleted", A11Y_ANNOUNCEMENT_MESSAGE_EDITED: "message edited", A11Y_ANNOUNCEMENT_MESSAGE_EDITED_FAILED: "failed to update message", A11Y_ANNOUNCEMENT_MESSAGE_EDITED_AUTOMOD_BLOCKED: "edit blocked by automod", A11Y_ANNOUNCEMENT_STATUS_CHANGED: "Status updated to {statusLabel}", A11Y_ANNOUNCEMENT_CUSTOM_STATUS_CHANGED: "Custom status updated", A11Y_ANNOUNCEMENT_AVATAR_NONE: "No avatar set", A11Y_ANNOUNCEMENT_AVATAR_CHANGED: "Your avatar has been updated", A11Y_ANNOUNCEMENT_CHANNEL_CREATED: "Channel !!{name}!!, created", A11Y_ANNOUNCEMENT_CHANNEL_CREATED_FAILED: "failed to create channel", A11Y_ANNOUNCEMENT_CHANNEL_SETTINGS_UPDATED: "channel settings updated", A11Y_ANDROID_POPUP_WINDOW_ANNOUNCEMENT: "Popup Window", A11Y_IOS_DISMISS_CONTEXT_MENU_LABEL: "Dismiss context menu", A11Y_ANDROID_DISMISS_CONTEXT_MENU_LABEL: "Dismiss popup window", A11Y_DISMISS_ALERT_MODAL: "Dismiss alert", A11Y_NAVIGATE_TO_SETTINGS: "Navigate to settings", FORM_LABEL_AVATAR_SIZE: "Avatar Size", AVATAR_SIZE_OPTION_SMALL: "Small", AVATAR_SIZE_OPTION_LARGE: "Large", FORM_LABEL_DISPLAY_NAMES: "Display Names", FORM_LABEL_DISPLAY_USERS: "Display Users", DISPLAY_OPTION_ALWAYS: "Always", DISPLAY_OPTION_NEVER: "Never", DISPLAY_OPTION_ONLY_WHILE_SPEAKING: "Only While Speaking", FORM_LABEL_AUTOMATIC_VAD_MOBILE: "Auto Sensitivity", RESET_NOTIFICATION_SETTINGS: "Reset Notification Settings", RESET_NOTIFICATION_OVERRIDE: "Reset Override", CHANNEL_SETTINGS: "Channel Settings", SEND_MESSAGE: "Send Message", OVERLAY_NOTIFICATIONS_SETTINGS: "Overlay Notifications", FORM_LABEL_NOTIFICATION_POSITION: "Notification Position", OVERLAY_NOTIFICATION_SETTINGS_DISABLED: "Notifications Disabled", OVERLAY_NOTIFICATION_SETTINGS_POSITION: "Displaying: !!{position}!!", FORM_LABEL_OVERLAY_TEXT_CHAT_NOTIFICATIONS: "Show text chat notifications", FORM_LABEL_OVERLAY_CHAT_OPACITY: "Opacity", ONE_USER_TYPING: "**!!{a}!!** is typing...", TWO_USERS_TYPING: "**!!{a}!!** and **!!{b}!!** are typing...", THREE_USERS_TYPING: "**!!{a}!!**, **!!{b}!!**, and **!!{c}!!** are typing...", SEVERAL_USERS_TYPING: "Several people are typing...", CHANNEL_SLOWMODE_DESC: "Slowmode is enabled. Members can send one message every {seconds, plural, =1 {1 second} other {{seconds} seconds}}.", CHANNEL_SLOWMODE_DESC_MINUTES: "Slowmode is enabled. Members can send one message every {minutes, plural, =1 {1 minute} other {{minutes} minutes}} {seconds, plural, =0 {} =1 {1 second} other {{seconds} seconds}}", CHANNEL_SLOWMODE_DESC_HOURS: "Slowmode is enabled. Members can send one message every {hours, plural, =1 {1 hour} other {{hours} hours}} {minutes, plural, =0 {} =1 {1 minute} other {{minutes} minutes}} {seconds, plural, =0 {} =1 {1 second} other {{seconds} seconds}}", CHANNEL_SLOWMODE_DESC_IMMUNE: "Slowmode is enabled, but you are immune. Amazing!", CHANNEL_SLOWMODE_DESC_SHORT: "Slowmode is enabled.", CHANNEL_SLOWMODE_COOLDOWN: "Slowmode is enabled. You can send another message in this channel in {seconds, plural, =1 {1 second} other {{seconds} seconds}}.", FORUM_SLOWMODE_DESC: "Slowmode is enabled. Members can create one post every {seconds, plural, =1 {1 second} other {{seconds} seconds}}.", FORUM_SLOWMODE_DESC_MINUTES: "Slowmode is enabled. Members can create one post every {minutes, plural, =1 {1 minute} other {{minutes} minutes}} {seconds, plural, =0 {} =1 {1 second} other {{seconds} seconds}}", FORUM_SLOWMODE_DESC_HOURS: "Slowmode is enabled. Members can create one post every {hours, plural, =1 {1 hour} other {{hours} hours}} {minutes, plural, =0 {} =1 {1 minute} other {{minutes} minutes}} {seconds, plural, =0 {} =1 {1 second} other {{seconds} seconds}}", PERMISSION_OVERRIDE_DENY: "Deny", PERMISSION_OVERRIDE_PASSTHROUGH: "Passthrough", PERMISSION_OVERRIDE_ALLOW: "Allow", VOICE_CHANNEL_HIDE_NAMES: "Hide Names", VOICE_CHANNEL_SHOW_NAMES: "Show Names", COPY: "Copy", COPIED: "Copied", COPY_ID: "Copy ID", COPY_ID_APPLICATION: "Copy Application ID", COPY_ID_AUTOMOD_RULE: "Copy AutoMod Rule ID", COPY_ID_CHANNEL: "Copy Channel ID", COPY_ID_COMMAND: "Copy Command ID", COPY_ID_EMOJI: "Copy Emoji ID", COPY_ID_EVENT: "Copy Event ID", COPY_ID_EVENT_RECURRENCE: "Copy Recurrence ID", COPY_ID_GUILD: "Copy Server ID", COPY_ID_MESSAGE: "Copy Message ID", COPY_ID_ROLE: "Copy Role ID", COPY_ID_THREAD: "Copy Thread ID", COPY_ID_UNKNOWN: "Copy ID", COPY_ID_USER: "Copy User ID", COPY_ID_AUTHOR: "Copy Author ID", CUT: "Cut", PASTE: "Paste", COPY_IMAGE_MENU_ITEM: "Copy Image", SAVE_IMAGE_MENU_ITEM: "Save Image", LINK_OPTIONS: "Link Options", COPY_LINK: "Copy Link", COPIED_LINK: "Link Copied!", COPY_MESSAGE_LINK: "Copy Message Link", OPEN_LINK: "Open Link", SHARE_LINK: "Share Link", COPY_CHANNEL_TOPIC: "Copy Topic", INVITE_TO_SERVER: "Invite to Server", INVITE_SENDING: "Sending invite", INVITE_SENT: "Invite Sent", INVITE_SENT_EXCLAMATION: "Invite sent!", SEARCH_WITH_GOOGLE: "Search with Google", JUMP_TO_CHANNEL: "Jump to Channel", ERROR: "Error", ERROR_COPYING_IMAGE: "Unable to copy image preview.", ERROR_SAVING_IMAGE: "Unable to save image preview.", DISABLE_VIDEO: "Disable Video", ENABLE_VIDEO: "Enable Video", NO_RESULTS_FOUND: "No results found", APPS: "Apps", COPY_EVENT_LINK: "Copy Event Link", MUTE_SOUNDBOARD: "Mute Soundboard", UNMUTE_SOUNDBOARD: "Unmute Soundboard", COPY_VERSION: "Click to copy version", GENERIC_ACTIONS_MENU_LABEL: "Actions", APPLICATION_ACTIONS_MENU_LABEL: "Application Actions", CHANNEL_ACTIONS_MENU_LABEL: "Channel Actions", CHANNEL_MENTION_ACTIONS_MENU_LABEL: "Channel Mention Actions", THREAD_ACTIONS_MENU_LABEL: "Thread Actions", GUILD_ACTIONS_MENU_LABEL: "Server Actions", GUILD_ROLE_ACTIONS_MENU_LABEL: "Server Role Actions", IMAGE_ACTIONS_MENU_LABEL: "Image Actions", MESSAGE_ACTIONS_MENU_LABEL: "Message Actions", OVERLAY_ACTIONS_MENU_LABEL: "Overlay Actions", USER_MORE_ACTIONS_MENU_LABEL: "User Actions", RECENTS_NOTIFICATIONS_MENU_LABEL: "Notification Actions", TEXT_ACTIONS_MENU_LABEL: "Text Actions", TEXTAREA_ACTIONS_MENU_LABEL: "Text area Actions", USER_ACTIONS_MENU_LABEL: "User Settings Actions", USER_SETTINGS_ACTIONS_MENU_LABEL: "User Settings Actions", STREAM_ACTIONS_MENU_LABEL: "Stream Actions", CHANNEL_CALL_OVERFLOW_MENU_LABEL: "Channel Call Actions", AUDIO_DEVICE_ACTIONS: "Audio Device Actions", EXPRESSION_PICKER_ACTIONS_MENU_LABEL: "Expression Picker Actions", PROFILE_ACTIONS_MENU_LABEL: "Profile Actions", PROGRESS_BAR_ACTIONS_MENU_LABEL: "Progress Bar Actions", HOME_ACTIONS_MENU_LABEL: "Home Actions", ACTIVITY_SHELF_ITEM_ACTIONS_MENU_LABEL: "Activity Shelf Item Actions", FRIEND_ACTIONS_MENU_LABEL: "Friend Actions", MORE_OPTIONS: "More Options", SWITCH_TO_COZY_MODE: "Switch to Cozy Mode", SWITCH_TO_COMPACT_MODE: "Switch to Compact Mode", SWITCH_TO_PUSH_TO_TALK: "Switch to Push to Talk", SWITCH_TO_VOICE_ACTIVITY: "Switch to Voice Activity", MOVE_TO: "Move to", MOVE_TO_SUCCESS: "User has been moved to the selected channel.", DISCONNECT_USER_SUCCESS: "User has been disconnected from voice.", CHANGE: "Change", GUILD_VERIFICATION_TEXT_NOT_CLAIMED: "You must claim and verify your account before you can send messages in this server.", GUILD_VERIFICATION_TEXT_NOT_VERIFIED: "You must verify your account before you can send messages in this server.", GUILD_VERIFICATION_TEXT_ACCOUNT_AGE: "Your account must be at least {min} minutes old to send messages in this server.", GUILD_VERIFICATION_TEXT_MEMBER_AGE: "You must be a member for at least {min} minutes to send messages in this server.", RESEND_VERIFICATION_EMAIL: "Resend Verification Email", GUILD_VERIFICATION_TEXT_NOT_PHONE_VERIFIED: "You must verify your identity by phone before you can send messages in this server.", VERIFY_PHONE: "Verify Phone", GUILD_VERIFICATION_VOICE_HEADER: "You can't join voice channels yet!", GUILD_VERIFICATION_VOICE_NOT_CLAIMED: "You must claim and verify your account before you can speak in this server.", GUILD_VERIFICATION_VOICE_NOT_VERIFIED: "You must verify your account before you can speak in this server.", GUILD_VERIFICATION_VOICE_ACCOUNT_AGE: "Your account must be at least {min} minutes old to speak in this server.", GUILD_VERIFICATION_VOICE_MEMBER_AGE: "You must be a member for at least {min} minutes to speak in this server.", GUILD_VERIFICATION_VOICE_NOT_PHONE_VERIFIED: "You must verify your identity by phone before you can speak in this server.", LURKER_MODE_CHAT_INPUT_MESSAGE: "Join this server to add it to your list and start talking!", LURKER_MODE_CHAT_INPUT_MESSAGE_IOS: "You are in preview mode. Join this server to talk.", LURKER_MODE_CHAT_INPUT_BUTTON: "Join Server", LURKER_MODE_VIEW_GUILD: "Visit Server", LURKER_MODE_NAG_BAR_HEADER: "You are currently in preview mode. Join this server to start chatting!", LURKER_MODE_NAG_BAR_BUTTON: "Join {guild}", LURKER_MODE_POPOUT_CHAT_HEADER: "You can't talk here yet!", LURKER_MODE_POPOUT_REACTIONS_HEADER: "You can't react until you join!", LURKER_MODE_POPOUT_SUCCESS_HEADER: "You're now a member of {guild}!", LURKER_MODE_POPOUT_UPSELL_BODY: "You have to join the community first before you can interact.", LURKER_MODE_POPOUT_SUCCESS_BODY: "Hooray! It's time to talk and hang out with your fellow members.", LURKER_MODE_POPOUT_SUCCESS_BUTTON: "Let's go!", LURKER_MODE_POPOUT_JOIN: "Join this server", LURKER_MODE_POPOUT_CANCEL: "I'm not ready yet", TRANSFER: "Transfer", TRANSFER_OWNERSHIP: "Transfer Ownership", TRANSFER_OWNERSHIP_TO_USER_V2: "This will transfer ownership of $[](GuildHook) to **!!{user}!!**. This cannot be undone!", TRANSFER_OWNERSHIP_TO_USER_WITH_AKA_V2: "This will transfer ownership of $[](GuildHook) to **!!{user}!!**, $[](AKAHook). This cannot be undone!", TRANSFER_OWNERSHIP_ACKNOWLEDGE: "\nI acknowledge that by transferring ownership of this server to **!!{username}!!**, it officially belongs to them.\n", TRANSFER_OWNERSHIP_PROTECTED_GUILD: "Partnered or Verified servers must reach out to the Community team for ownership transfer requests.", TRANSFER_OWNERSHIP_PROTECTED_GUILD_PAUSED: "Partnered or Verified servers must reach out to the Community team for ownership transfer requests. However, our Partner and Verified Server Programs are currently paused and not able to handle any requests.", TRANSFER_OWNERSHIP_PROTECTED_GUILD_LINK: "Partnered or Verified servers must reach out to the [Community team]({ticketUrl}) for ownership transfer requests.", TRANSFER_OWNERSHIP_PROTECTED_GUILD_LINK_PAUSED: "Partnered or Verified servers must reach out to the [Community team]({ticketUrl}) for ownership transfer requests. However, our Partner and Verified Server Programs are currently paused and not able to handle any requests.", TRANSFER_OWNERSHIP_FAILURE_MODAL_TITLE: "Server ownership transfer failed", SERVER_SUBSCRIPTION_OWNERSHIP_TRANSFER_FAILURE_MODAL_BODY: "It looks like the new owner is ineligible for Server Monetization. Head to our [Support Article]({server_subscription_owner_transfer_article}) to learn more about why.", TRANSFER_OWNERSHIP_SERVER_SUBSCRIPTION_GUILD: "You are transferring a server with Server Monetization enabled. Please also read our [Support Article]({server_subscription_owner_transfer_article}).", TRANSFER_OWNERSHIP_SUCCESS: "Transfer successful!", USER_PROFILE_MODAL: "User Profile Modal", PROFILE: "Profile", USER_INFO: "User Info", MUTUAL_GUILDS: "Mutual Servers", MUTUAL_FRIENDS: "Mutual Friends", USER_PROFILE_ACTIVITY: "Activity", CONNECTION_VERIFIED: "Verified Connection", CONNECTION_VERIFIED_ON_TWITTER: "Verified on Twitter", NO_MUTUAL_GUILDS: "No servers in common", NO_MUTUAL_FRIENDS: "No friends in common", SHARING_SCREEN: "Sharing their screen", VERIFIED_BOT_TOOLTIP: "Verified App", USER_PROFILE_ABOUT_ME: "About Me", USER_PROFILE_LOAD_ERROR: "Unable to load profile banner, badges, and about me.", USER_PROFILE_ACTION_MENU_A11Y_LABEL: "Open User Action menu", USER_PROFILE_MEMBER_SINCE: "Member Since", USER_PROFILE_DISCORD_MEMBER_SINCE: "Discord Member Since", MUTUAL_FRIENDS_COUNT: "{count, plural, =1 {1 Mutual Friend} other {{count} Mutual Friends}}", MUTUAL_FRIENDS_WITH_END_COUNT: "Mutual Friends ({count})", MUTUAL_GUILDS_COUNT: "{count, plural, =1 {1 Mutual Server} other {{count} Mutual Servers}}", MUTUAL_GUILDS_WITH_END_COUNT: "Mutual Servers ({count})", SHOW_USER_PROFILE: "Show User Profile", HIDE_USER_PROFILE: "Hide User Profile", SHOW_USER_PROFILE_UNAVAILABLE: "Show User Profile (Unavailable)", CLIENT_THEMES_EDITOR_HEADER: "Preview Theme", CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION: "Change the color of your theme.\nOnly with Nitro.", CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_SETTINGS: "Make Discord yours. Only with Nitro.", CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_WITH_LINK: "Unlock more themes with [Nitro](onPremiumClick).", CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_PREVIEW_WITH_LINK: "Get [Nitro](onPremiumClick) and make Discord yours with unique colors.", CLIENT_THEMES_EDITOR_UPSELL: "New Theme colors! Add your vibe to Discord. [Learn more](onClick).", CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_COACHMARK: "Make Discord yours with unique colors. Only with Nitro.", CLIENT_THEMES_EDITOR_PICK_A_THEME_HEADER: "Pick a Theme", CLIENT_THEMES_EDITOR_PREVIEW_A_THEME_HEADER: "Preview a Theme", CLIENT_THEMES_EDITOR_UPSELL_HEADER: "NEW THEMES! Add your vibe to Discord", CLIENT_THEMES_EDITOR_RETURN_TO_SETTINGS: "Back to Settings", CLIENT_THEMES_EDITOR_EXIT_PREVIEW: "Exit Preview", CLIENT_THEMES_GRADIENT_SUNSET: "Sunset", CLIENT_THEMES_GRADIENT_CHROMA_GLOW: "Chroma Glow", CLIENT_THEMES_GRADIENT_FOREST: "Forest", CLIENT_THEMES_GRADIENT_CRIMSON_MOON: "Crimson Moon", CLIENT_THEMES_GRADIENT_MIDNIGHT_BLURPLE: "Midnight Blurple", CLIENT_THEMES_GRADIENT_MARS: "Mars", CLIENT_THEMES_GRADIENT_DUSK: "Dusk", CLIENT_THEMES_GRADIENT_UNDER_THE_SEA: "Under the Sea", CLIENT_THEMES_GRADIENT_RETRO_STORM: "Retro Storm", CLIENT_THEMES_GRADIENT_NEON_NIGHTS: "Neon Nights", CLIENT_THEMES_GRADIENT_SEPIA: "Sepia", CLIENT_THEMES_GRADIENT_STRAWBERRY_LEMONADE: "Strawberry Lemonade", CLIENT_THEMES_GRADIENT_AURORA: "Aurora", CLIENT_THEMES_GRADIENT_BLURPLE_TWILIGHT: "Blurple Twilight", CLIENT_THEMES_GRADIENT_MINT_APPLE: "Mint Apple", CLIENT_THEMES_GRADIENT_CITRUS_SHERBERT: "Citrus Sherbert", CLIENT_THEMES_GRADIENT_RETRO_RAINCLOUD: "Retro Raincloud", CLIENT_THEMES_GRADIENT_HANAMI: "Hanami", CLIENT_THEMES_GRADIENT_SUNRISE: "Sunrise", CLIENT_THEMES_GRADIENT_COTTON_CANDY: "Cotton Candy", CLIENT_THEMES_GRADIENT_LOFI_VIBES: "LoFi Vibes", CLIENT_THEMES_GRADIENT_DESERT_KHAKI: "Desert Khaki", CLIENT_THEMES_GRADIENT_EASTER_EGG: "Memory Lane", BOTS_DATA_ACCESS_TAB: "Data Access", BOTS_DATA_ACCESS_MESSAGE_CONTENT_HEADER: "Read Messages", BOTS_DATA_ACCESS_MESSAGE_CONTENT_BODY: "Can access messages in this server and read their contents.", BOTS_DATA_ACCESS_GUILD_PRESENCES_HEADER: "Presence", BOTS_DATA_ACCESS_GUILD_PRESENCES_BODY: "Can see online status of server members and what they are playing, watching, or listening to.", BOTS_DATA_ACCESS_GUILD_MEMBERS_HEADER: "Members", BOTS_DATA_ACCESS_GUILD_MEMBERS_BODY: "Can see who's in the server and their roles, nicknames, and permission changes.", BOTS_DATA_ACCESS_BASELINE: "All apps can access a set of baseline data. Please visit the [Help Center]({helpCenterUrl}) to learn more.", BOT_PROFILE_SLASH_COMMANDS: "Try my commands", BOT_PROFILE_UPGRADE_CTA: "Upgrade", BOT_PROFILE_BENEFITS_HEADING: "Unlocked Premium Features", BOT_PROFILE_VIEW_ALL_COMMANDS_CTA: "View All Commands", LOADING: "Loading", OAUTH2_CONNECT_TO_DISCORD: "Connect to Discord", OAUTH2_TITLE: "Authorize access to your account", OAUTH2_CANNOT_READ_SEND_NOTICE: "This application **cannot** read your messages or send messages as you.", OAUTH2_CAN_READ_NOTICE: "This application **can** read your messages but **can not** send messages as you.", OAUTH2_SCOPES_LABEL: "This will allow the developer of !!{application}!! to:", OAUTH2_SCOPES_LABEL_TRUSTED_NAME: "This will allow !!{application}!! to:", OAUTH2_REQUESTS_ACCOUNT_ACCESS: "wants to access your Discord account", OAUTH2_SIGNED_IN_AS: "Signed in as $[](userHook)", OAUTH2_THIRD_PARTY_APPLICATION: "An external application", OAUTH2_LOGOUT: "Not you?", OAUTH2_DETAILS_REDIRECT: "Once you authorize, you will be redirected outside of Discord to: !!{origin}!!", OAUTH2_DETAILS_PRIVACY_POLICY: "The developer of !!{application}!!'s privacy policy and terms of service apply to this application.", OAUTH2_DETAILS_PRIVACY_POLICY_WITH_LINKS: "The developer of !!{application}!!'s [privacy policy]({privacyPolicyURL}) and [terms of service]({termsOfServiceURL}) apply to this application.", OAUTH2_DETAILS_PRIVACY_POLICY_WITH_PRIVACY_POLICY_LINK: "The developer of !!{application}!!'s [privacy policy]({privacyPolicyURL}) and terms of service apply to this application.", OAUTH2_DETAILS_PRIVACY_POLICY_WITH_TERMS_OF_SERVICE_LINK: "The developer of !!{application}!!'s privacy policy and [terms of service]({termsOfServiceURL}) apply to this application.", OAUTH2_DETAILS_CREATION_DATE: "Active since {date, date, medium}", OAUTH2_DETAILS_GUILDS: "Used in {guildCount, number} servers", OAUTH2_ADD_WEBHOOK_INCOMING: "Add a webhook to:", OAUTH2_ADD_TO_GUILD: "Add to server:", OAUTH2_ADD_TO_GUILD_PLACEHOLDER: "Select a server", OAUTH2_ADD_TO_GUILD_DESCRIPTION: "This requires you to have **Manage Server** permission in the server.", OAUTH2_INTEGRATION_SELECT_USER: "Try it Now", OAUTH2_INTEGRATION_SELECT_USER_SUBTITLE: "Use this app everywhere!", OAUTH2_INTEGRATION_SELECT_GUILD: "Add to Server", OAUTH2_INTEGRATION_SELECT_GUILD_SUBTITLE: "Customize your server by adding this app", OAUTH2_INTEGRATION_SELECT_DETAILS: "This app can be used anywhere on Discord. During beta, responses are visible only to you in servers with over {betaUserLimit} people. [Learn more]({learnMoreUrl}).", OAUTH2_REQUEST_MISSING_PARAM: "Invalid request. Missing param **{param}**", OAUTH2_REQUEST_INVALID_SCOPE: "Invalid scope **{scope}**", OAUTH2_CONFIRM_BOT_PERMISSIONS: "Confirm that you want to grant **!!{applicationName}!!** the following permissions on **!!{guildName}!!**:", OAUTH2_DISABLED_PERMISSIONS: "**!!{applicationName}!!** has also asked for the following permissions, but you can't grant them:", OAUTH2_FAKE_SCOPE_1: "Bake a cake", OAUTH2_FAKE_SCOPE_2: "Buy you a nice seafood dinner", OAUTH2_FAKE_SCOPE_3: "Have an existential crisis", OAUTH2_FAKE_SCOPE_4: "Microbrew some local kombucha", OAUTH2_FAKE_SCOPE_5: "Solve a mystery with Scooby and the gang", OAUTH2_FAKE_SCOPE_6: "Record a new mixtape", OAUTH2_FAKE_SCOPE_7: "Paint a happy little tree", OAUTH2_FAKE_SCOPE_8: "Read you a bedtime story", OAUTH2_UNKNOWN_ERROR: "Oops, something went wrong...", SCOPE_IDENTIFY: "Access your username, avatar, and banner", SCOPE_OPENID: "Access your profile information", SCOPE_EMAIL: "Access your email address", SCOPE_CONNECTIONS: "Access your third-party connections", SCOPE_GUILDS: "Know what servers you're in", SCOPE_GUILDS_JOIN: "Join servers for you", SCOPE_GUILDS_MEMBERS_READ: "Read your member info (nickname, avatar, roles, etc...) for servers you belong to", SCOPE_GUILDS_MEMBERS_READ_VOICE: "Read member info (nickname, avatar, roles, etc...) for servers you belong to", SCOPE_GDM_JOIN: "Join group DMs for you", SCOPE_BOT: "Add a bot to a server", SCOPE_RPC: "Interface with your Discord client", SCOPE_RPC_NOTIFICATIONS_READ: "Listen to notifications over your Discord client", SCOPE_RPC_VOICE_WRITE: "Alter your voice settings and use soundboard", SCOPE_RPC_VOICE_READ: "Read your voice settings and listen for voice events", SCOPE_RPC_VIDEO_READ: "Read your video state", SCOPE_RPC_VIDEO_WRITE: "Alter your video settings and start video", SCOPE_RPC_SCREENSHARE_READ: "Read your screenshare state", SCOPE_RPC_SCREENSHARE_WRITE: "Alter your screenshare settings and start screenshare", SCOPE_RPC_ACTIVITIES_WRITE: "Set your current activity", SCOPE_VOICE: "Connect to voice on your behalf and see others who are in any voice channel or call", SCOPE_DM_CHANNELS_READ: "See information about the DMs and GDMs you are in", SCOPE_DM_YOU: "Send you direct messages", SCOPE_ROLE_CONNECTIONS_WRITE: "Update your connection and metadata for this application", SCOPE_WEBHOOK_INCOMING: "Adds a webhook to a channel", SCOPE_WEBHOOK_INCOMING_DESCRIPTION: "This allows the app to send messages to a channel on Discord.", SCOPE_WEBHOOK_INCOMING_CHANNEL_PLACEHOLDER: "Select a channel", SCOPE_MESSAGES_READ: "Read all messages", SCOPE_APPLICATIONS_BUILDS_UPLOAD: "Upload and manage builds", SCOPE_APPLICATIONS_BUILDS_READ: "Read build information", SCOPE_APPLICATIONS_COMMANDS: "Create commands", SCOPE_APPLICATIONS_COMMANDS_UPDATE: "Update commands", SCOPE_APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE: "Manage access to its commands in a server", SCOPE_APPLICATIONS_STORE_UPDATE: "Manage store SKUs, listings, and assets", SCOPE_APPLICATIONS_ENTITLEMENTS: "Manage entitlements", SCOPE_ACTIVITIES_READ: "Access your Active Now activities", SCOPE_ACTIVITIES_WRITE: "Update your current activity", SCOPE_RELATIONSHIPS_READ: "See who your friends are", SCOPE_RELATIONSHIPS_WRITE: "Manage your friends and blocked users", SCOPE_PRESENCES_READ: "See who is online", SCOPE_PRESENCES_WRITE: "Set your online status and current activity", SCOPE_DM_CHANNELS_MESSAGES_READ: "Read your direct messages", SCOPE_DM_CHANNELS_MESSAGES_WRITE: "Send messages in your DMs", SCOPE_GATEWAY_CONNECT: "Start a gateway session on your behalf", AUTHORIZE: "Authorize", AUTHORIZED: "Authorized", AUTHORIZED_SUCCESS: "Success!", AUTHORIZED_APP_TO_SERVER: "**!!{installedApplicationName}!!** has been authorized and added to **!!{guildName}!!**.", AUTHORIZED_APP: "**!!{installedApplicationName}!!** has been authorized and added.", AUTHORIZED_GENERIC: "This application has been authorized and added to the server.", OAUTH2_MESSAGE_CTA: "You may now close this window or tab.", WHITELISTED: "Whitelisted", WHITELISTING: "Whitelisting...", WHITELIST_FAILED: "Whitelist Failed", SCOPE_UNSUPPORTED_ON_ANDROID: "Not supported within Android app", SCOPE_UNSUPPORTED_ON_ANDROID_DESCRIPTION: "This OAuth2 scope is not supported within the app yet.\nGood news though, it does work on your mobile web browser! So please open it there.", OAUTH2_GO_TO_SERVER_NAME_CTA: "Go to **!!{guildName}!!**", OAUTH2_GO_TO_SERVER_DEFAULT_CTA: "Go to Server", OAUTH2_IP_LOCATION_DISCLOSURE: "Developer may see your IP address while you use this application.", OAUTH2_ADVERTISEMENTS_DISCLOSURE: "Developer may show ads while you use this application.", SETTINGS_TWO_FA: "Multi-Factor Authentication", TWO_FA: "Authenticator App", TWO_FA_DESCRIPTION: "Configuring an authenticator app is a good way to add an extra layer of security to your Discord account to make sure that only you have the ability to log in.", TWO_FA_KEY: "2FA Key (Manual entry)", TWO_FA_ACTIVATE: "Activate", TWO_FA_REMOVE: "Remove Authenticator App", TWO_FA_REMOVE_CONFIRMATION: "Are you sure you want to remove your Authenticator App?", TWO_FA_GENERATE_CODES: "Generate New Backup Codes", TWO_FA_VIEW_CODES: "View Codes", TWO_FA_VIEW_CODES_SUBMIT: "Submit", TWO_FA_VIEW_BACKUP_CODES: "View Backup Codes", TWO_FA_VIEW_BACKUP_CODES_ENTER_PASSWORD: "Enter Your Password", TWO_FA_BACKUP_CODE_USED: "used", TWO_FA_GENERATE_CODES_CONFIRM_TEXT: "Generating new backup codes will invalidate any old backup codes you have saved.", TWO_FA_DOWNLOAD_CODES: "Download Backup Codes", TWO_FA_BACKUP_CODES_NEXT_ACTION: "Next", TWO_FA_CONFIRM_VIEW_BACKUP_CODES_LABEL: "Enter Verification Key", TWO_FA_CONFIRM_VIEW_BACKUP_CODES_INPUT_LABEL: "Verification key", TWO_FA_CONFIRM_VIEW_RESEND_EMAIL_PROMPT: "Don't see an email? Resend it.", TWO_FA_CONFIRM_VIEW_RESEND_EMAIL_SUCCESS: "Verification email resent, please check your email.", TWO_FA_CONFIRM_VIEW_BACKUP_CODES_BODY: "As an added security measure, please enter the key we just sent to your email address. You should see it in a minute or two.", TWO_FA_BACKUP_CODES_LABEL: "Backup Codes", TWO_FA_BACKUP_CODES_BODY: "These codes will allow you to enter your account if you lose your auth app, protect them like you would protect your password. Do not share them with anyone and keep them somewhere safe. \n\n**Each code can only be used once! Any previously generated codes no longer work!**", TWO_FA_BACKUP_CODES_WARNING: "Without your backup codes, you are at risk of **losing your account permanently** if you lose access to your authenticator! Save these somewhere safe on and off your device to reduce the risk of losing your account!", TWO_FA_BACKUP_CODES_WEBAUTHN_WARNING: "Without your backup codes, you are at risk of **losing your account permanently** if you lose access to your authenticator! Save these somewhere safe on and off your device to reduce the risk of losing your account!", TWO_FA_BACKUP_CODE_ENTER: "Enter the 8-character Backup code.", TWO_FA_BACKUP_CODE_ENTER_WRONG: "Backup codes need to be 8 characters long and can contain only numbers and letters.", TWO_FA_BACKUP_CODE_HINT: "8-character backup code", TWO_FA_ENABLE: "Enable Authenticator App", TWO_FA_ENABLE_SUBHEADER: "Make your account safer in 3 easy steps:", TWO_FA_DISABLE: "Disable Authenticator App", TWO_FA_ENABLED: "Multi-Factor Authentication enabled", TWO_FA_SALES_PITCH: "Protect your Discord account with an extra layer of security. Once configured, you'll be required\nto enter your password and complete one additional step in order to sign in.", TWO_FA_DOWNLOAD_APP_LABEL: "Download an authenticator app", TWO_FA_DOWNLOAD_APP_BODY: "Download and install [Authy]({authyURL}) or [Google Authenticator]({googleAuthURL}) for your phone or tablet.", TWO_FA_QR_LABEL: "Scan the QR code", TWO_FA_QR_BODY: "Open the authentication app and scan the image to the left using your phone's camera.", TWO_FA_LOGIN_LABEL: "Login with your code", _TWO_FA_LOGIN_LABEL: "Log in with your code", TWO_FA_LOGIN_BODY: "Enter the 6-digit verification code generated.", TWO_FA_LOGIN_FOOTER: "Go back to Login", _TWO_FA_LOGIN_FOOTER: "Go Back to Login", TWO_FA_BACKUP_CODE: "8-digit backup code", TWO_FA_AUTH_CODE: "6-digit authentication code/8-digit backup code", TWO_FA_AUTH_CODE_NO_BACKUP: "6-digit authentication code", TWO_FA_USE_DESKTOP_APP: "Authenticator app setup is not supported on this browser. Please use the Desktop app to setup an authenticator app.", TWO_FA_NOT_VERIFIED: "You must verify your account before you can enable two-factor authentication.", TWO_FA_TOKEN_REQUIRED: "A valid Discord Auth Code is required.", TWO_FA_ENTER_TOKEN_LABEL: "Enter Discord Auth/Backup Code", TWO_FA_ENTER_BACKUP_LABEL: "Enter Discord Backup Code", TWO_FA_ENTER_TOKEN_NO_BACKUP_LABEL: "Enter Discord Auth Code", TWO_FA_EDIT_DIGIT_A11Y_LABEL: "Edit code digit {index}, value: {value}", TWO_FA_ENTER_SMS_TOKEN_LABEL: "Enter Discord SMS Code", TWO_FA_ENTER_TOKEN_BODY: "You can use a backup code or your two-factor authentication mobile app.", TWO_FA_ENTER_SMS_TOKEN_SENDING: "Sending...", TWO_FA_ENTER_SMS_TOKEN_SENT: "We've sent a message to !!{phoneNumber}!!. Please enter the code you received.", TWO_FA_GUILD_MFA_WARNING: "This server requires members with moderation powers to have Multi-Factor Authentication. You cannot take any moderation actions until you enable it. [Resolve](onClick)", TWO_FA_GUILD_MFA_WARNING_MESSAGE: "This server requires members with moderation powers to have Multi-Factor Authentication. You cannot take any moderation actions until you enable it.", TWO_FA_GUILD_MFA_WARNING_MESSAGE_WITH_SPACING: "This server requires members with moderation powers to have Multi-Factor Authentication.\n\nYou cannot take any moderation actions until you enable it.", TWO_FA_GUILD_MFA_WARNING_RESOLVE_BUTTON: "Resolve", TWO_FA_GUILD_MFA_WARNING_IOS: "This server requires members with moderation powers to have Multi-Factor Authentication. You cannot take any moderation actions until you enable it.", TWO_FA_DISCORD_BACKUP_CODES: "These are your Discord backup codes for account !!{email}!!. Keep them safe!", TWO_FA_CHANGE_ACCOUNT: "Change account details", TWO_FA_SUCCESS_HEADER: "2FA is activated! :tada:", TWO_FA_SUCCESS_HEADER_MOBILE: "2FA is activated! \uD83C\uDF89", TWO_FA_APP_NAME_AUTHY: "Authy", TWO_FA_APP_NAME_GOOGLE_AUTHENTICATOR: "Google Authenticator", TWO_FA_CONFIRM_TITLE: "Continue without Backup", TWO_FA_CONFIRM_BODY: "Are you sure you don't want to enable SMS authentication or download your backup codes? Without them, you are at risk of losing your account permanently if you lose access to your authenticator app!", TWO_FA_CONFIRM_WEBAUTHN_BODY: "Are you sure you don't want to download your backup codes? Without them, you are at risk of losing your account permanently if you lose access to your authenticator!", TWO_FA_CONFIRM_CONFIRM: "I'm sure", TWO_FA_UNKNOWN_ERROR: "Oh no, an error has occurred.", TWO_FA_WEBAUTHN_BODY: "When you are ready to authenticate, press the button below.", TWO_FA_WEBAUTHN_ACTION: "Use security key", TWO_FA_WEBAUTHN_SWITCH_TOTP: "Enter a 2FA code instead", TWO_FA_WEBAUTHN_TITLE: "Security Keys", NUM_SECURITY_KEYS: "{count} added", TWO_FA_WEBAUTHN_VIEW_KEYS_TITLE: "Your Keys", TWO_FA_WEBAUTHN_REGISTER_KEY_PLACEHOLDER_NAME: "My Key", TWO_FA_WEBAUTHN_DESCRIPTION: "Add an additional layer of protection to your account with a Security Key.", TWO_FA_WEBAUTHN_REGISTER: "Register a Security Key", TWO_FA_WEBAUTHN_INTERACT: "Interact with your security key", TWO_FA_WEBAUTHN_NAME: "Name your security key", TWO_FA_WEBAUTHN_RENAME: "Rename your security key", TWO_FA_WEBAUTHN_REGISTER_INSTRUCTIONS: "When you are ready to authenticate, press the button below.", TWO_FA_WEBAUTHN_REGISTER_CONFIRM: "Let's go", TWO_FA_WEBAUTHN_INTERACT_INSTRUCTIONS: "You may need to tap your device or confirm a prompt.", TWO_FA_WEBAUTHN_NAME_INSTRUCTIONS: "What do you want to call this thing?", TWO_FA_WEBAUTHN_REGISTER_FINISH: "Finish", TWO_FA_WEBAUTHN_CREDENTIAL_OPTIONS: "Options", TWO_FA_WEBAUTHN_DELETE_CREDENTIAL: "Delete", TWO_FA_WEBAUTHN_RENAME_CREDENTIAL: "Rename", TWO_FA_DISABLED_FOR_SERVER_SUBSCRIPTION_MOD: "Disabled for owner/admin of servers that have published server subscription tiers", TWO_FA_DISABLED_FOR_STAFF: "Disabled for Staff", TWO_FA_WEBAUTHN_RENAME_FORM_NEW_KEY: "New Key Name", TWO_FA_WEBAUTHN_SHOULD_DO: "Here is something you **should do**!", PASSKEY_AND_SECURITY_KEY_TITLE: "Security Keys and Passkeys", PASSKEY_AND_SECURITY_KEY_CREATED_TITLE: "Security Keys and Passkeys you have created", PASSKEY_AND_SECURITY_KEY_ADDED: "Key added!", PASSKEY_AND_SECURITY_KEY_RENAME_TITLE: "Rename your key", PASSKEY_AND_SECURITY_KEY_UPDATED: "Key updated!", PASSKEY_AND_SECURITY_KEY_REMOVE_KEY: "Remove ‘!!{keyName}!!’?", PASSKEY_AND_SECURITY_KEY_REMOVED: "Key removed!", PASSKEY_AND_SECURITY_KEY_REMOVE_CONFIRMATION_SUBTITLE: "You will no longer be able to use it on Discord.", PASSKEY_AND_SECURITY_KEY_REMOVE_CONFIRMATION_TEXT: "Yes, remove this key", PASSKEY_AND_SECURITY_KEY_REMOVE_CANCEL_TEXT: "Nevermind, I'll keep it", PASSKEY_AND_SECURITY_KEY_NO_KEYS_TEXT: "Secure your account by adding a Passkey or another supported security key.", MFA_SMS_AUTH: "SMS Backup Authentication", MFA_SMS_AUTH_SALES_PITCH: "Add your phone as a backup MFA method in case you lose access to your authenticator app or backup codes.", MFA_SMS_AUTH_CURRENT_PHONE: "Your current phone number is: !!{phoneNumber}!!.", MFA_SMS_PHONE_NUMBER_REVEAL: "Reveal", MFA_SMS_PHONE_NUMBER_HIDE: "Hide", MFA_SMS_ENABLE: "Enable SMS Authentication", MFA_SMS_ADD_PHONE: "Add Phone Number", MFA_SMS_ALREADY_ENABLED: "Already Enabled!", MFA_SMS_DISABLED_PARTNER: "Disabled for Partners", MFA_SMS_DISABLED_NO_EMAIL: "Email Required", MFA_SMS_ENABLE_SHOULD_DO: "Now here are a few things you **should do**!", MFA_SMS_REMOVE: "Remove SMS Authentication", MFA_SMS_CONFIRM_REMOVE_BODY: "This removes the ability to login with an authentication code through SMS. Are you sure you want to remove this?", _MFA_SMS_CONFIRM_REMOVE_BODY: "This removes the ability to log in with an authentication code through SMS. Are you sure you want to remove this?", MFA_SMS_CONFIRM_REMOVE_ACTION: "Remove SMS Backup", MFA_SMS_RECEIVE_CODE: "Receive auth code from SMS", MFA_SMS_RESEND: "Resend SMS?", MFA_V2_DESCRIPTION: "Before you continue, we need to verify it’s really you.", MFA_V2_HEADER: "Multi-Factor Authentication", MFA_V2_SELECT_HEADER: "This extra step shows it's really you.", MFA_V2_WEBAUTHN_CTA: "Authenticate with security key", MFA_V2_CHOOSE: "Choose how to verify", MFA_V2_CHOOSE_DESCRIPTION: "Select an option to verify it's really you.", MFA_V2_GO_TO_SELECT: "Verify with something else", MFA_V2_INVALID_CODE: "Invalid two-factor code", MFA_V2_INVALID_WEBAUTHN: "Failed to authenticate your security key", MFA_V2_INVALID_PASSWORD: "Invalid password", MFA_V2_WEBAUTHN_NAME: "Use a security key", MFA_V2_TOTP_NAME: "Use your authenticator app", MFA_V2_SMS_NAME: "Use a code sent to your phone", MFA_V2_PASSWORD_NAME: "Use your password", MFA_V2_BACKUP_NAME: "Use a backup code", MFA_V2_CANCELED: "Multi-factor authentication cancelled", MFA_V2_BACKUP: "Verify with a backup code", MFA_V2_TOTP: "Verify with your authenticator app", MFA_V2_PASSWORD: "Verify with a password", MFA_V2_SMS_RESEND: "Resend Code", MFA_V2_WEBAUTHN_GENERIC_ERROR: "An error occurred. Please try again.", ACCOUNT_MANAGEMENT: "Account Management", DELETE_ACCOUNT: "Delete Account", DISABLE_ACCOUNT: "Disable Account", DELETE_ACCOUNT_BODY: "Are you sure that you want to delete your account? This will immediately log you out of your account and you will not be able to log in again.", DISABLE_ACCOUNT_BODY: "Are you sure that you want to disable your account? This will immediately log you out and make your account inaccessible to anyone.", DELETE_ACCOUNT_TRANSFER_OWNERSHIP: "You Own Servers!", DELETE_ACCOUNT_TRANSFER_OWNERSHIP_BODY: "In order to delete or disable your account you must first transfer ownership of all servers that you own.", DELETE_ACCOUNT_ERROR: "Error Deleting Your Account", PRIVACY_AND_SAFETY: "Privacy & Safety", FRIENDS: "Friends", PEOPLE: "People", REMOVE_FRIEND_TITLE: "Remove '!!{name}!!'", REMOVE_FRIEND_BODY: "Are you sure you want to permanently remove **!!{name}!!** from your friends?", REDESIGN_CLEAR_INCOMING_REQUESTS_TITLE: "Are you sure?", REDESIGN_CLEAR_INCOMING_REQUESTS_BODY: "This will clear {incomingRequestCount, plural, =1 {{incomingRequestCount} incoming friend request} other {{incomingRequestCount} incoming friend requests}}. The {incomingRequestCount, plural, =1 {user} other {{incomingRequestCount} users}} who sent them won't be informed.", CLEAR_INCOMING_REQUESTS_CONFIRMATION_TITLE: "Clear Incoming Friend Requests", CLEAR_INCOMING_REQUESTS_CONFIRMATION_BODY: "This will clear {incomingRequestCount, plural, =1 {{incomingRequestCount} friend request} other {{incomingRequestCount} friend requests}} from the pending list. The {incomingRequestCount, plural, =1 {user} other {{incomingRequestCount} users}} will not be notified.", CLEAR_INCOMING_REQUESTS_CONFIRMATION_CTA: "Clear All", CLEAR_INCOMING_REQUESTS_CONFIRMATION_ERROR: "There was an error clearing your incoming friend requests. Please try again later.", CLEAR_INCOMING_REQUESTS_BUTTON: "Clear Incoming", ADD_FRIEND: "Add Friend", ADD_FRIENDS: "Add Friends", ADD_MORE_FRIENDS: "Add more friends", INVITE_MORE_FRIENDS: "Invite more friends", ADD_A_FRIEND: "Add a Friend", REMOVE_FRIEND: "Remove Friend", YOUR_FRIENDS: "Your Friends", BLOCKED: "Blocked", MUTED: "Muted", REQUEST_SENT: "Request Sent", INCOMING_FRIEND_REQUEST: "Incoming Friend Request", INCOMING_FRIEND_REQUESTS: "Incoming Friend Requests", INCOMING_FRIEND_REQUEST_FROM: "Incoming Friend Request from !!{name}!!", INCOMING_FRIEND_REQUESTS_COUNT: "{count} incoming friend requests", OUTGOING_FRIEND_REQUEST: "Outgoing Friend Request", ACCEPT_FRIEND_REQUEST: "Accept Friend Request", IGNORE_FRIEND_REQUEST: "Ignore Friend Request", CANCEL_FRIEND_REQUEST: "Cancel Friend Request", OUTGOING_FRIEND_REQUEST_DELETE_MSG: "Are you sure you want to delete your friend request to **!!{name}!!**?", FRIEND_REQUESTS_COMBINED_COUNT: "{incoming, number} received • {outgoing, number} sent", INCOMING_FRIEND_REQUEST_ACCEPTED_SUBLABEL: "is now your friend!", BLOCK: "Block", CONFIRM_USER_BLOCK_TITLE: "Block !!{name}!!?", CONFIRM_USER_BLOCK_BODY: "Are you sure you want to block **!!{name}!!**? Blocking this user will also remove them from your friends list.", UNBLOCK: "Unblock", MORE: "More", TRUNCATION_MORE: "...more", SEND_DM: "Message", FRIEND_REQUEST_RECEIVED: "Sent you a friend request:", FRIEND_REQUEST_ACCEPT: "Accept", FRIEND_REQUEST_IGNORE: "Ignore", FRIEND_REQUEST_CANCEL: "Cancel", FRIEND_REQUESTS_TAB_RECIEVED: "Received", FRIEND_REQUESTS_TAB_SENT: "Sent", FRIENDS_SECTION_ADD_FRIEND: "Add Friend", FRIENDS_SECTION_ALL: "All", FRIENDS_SECTION_ONLINE: "Online", FRIENDS_SECTION_PENDING: "Pending", FRIENDS_SECTION_SUGGESTIONS: "Suggestions", FRIENDS_COLUMN_NAME: "Name", FRIENDS_EMPTY_STATE_ALL: "Wumpus is waiting on friends. You don’t have to though!", FRIENDS_EMPTY_STATE_ONLINE: "No one's around to play with Wumpus.", FRIENDS_EMPTY_STATE_PENDING: "There are no pending friend requests. Here's Wumpus for now.", FRIENDS_EMPTY_STATE_OUTGOING: "You haven't sent any new friend requests. Here's Wumpus for now.", FRIENDS_EMPTY_STATE_SUGGESTIONS: "There are no pending friend suggestions. Here's Wumpus for now.", FRIENDS_EMPTY_STATE_BLOCKED: "You can't unblock the Wumpus.", FRIENDS_PENDING_REQUEST_HEADER: "Pending Requests — {pendingRequestNumber}", FRIENDS_EMPTY_STATE_SUBTITLE: "Try adding a friend with their username, or scan to see who is nearby.", FRIENDS_FRIEND_SUGGESTIONS_HEADER: "Friend Suggestions — {count}", FRIENDS_SUGGESTED_FRIENDS_HEADER: "Suggested Friends - {count}", FRIENDS_ONLINE_HEADER: "Online — {online}", FRIENDS_OFFLINE_HEADER: "Offline — {offline}", FRIENDS_ALL_HEADER: "All friends — {count}", FRIENDS_PENDING_HEADER: "Pending — {count}", FRIENDS_BLOCKED_HEADER: "Blocked — {count}", FRIENDS_PENDING_REQUEST_EXPAND: "See All", FRIENDS_PENDING_REQUEST_EXPAND_COLLAPSE: "See Less", FRIEND_REQUEST_SETTINGS: "Friend Request Settings", FRIENDS_REQUEST_STATUS_OUTGOING: "Outgoing Friend Request", FRIENDS_REQUEST_STATUS_INCOMING: "Incoming Friend Request", FRIENDS_CONTACT_SYNC_CTA: "Find Your Friends", FRIENDS_CONTACT_SUGGESTION_ADDED: "Friend request sent", CONTACTS: "Contacts", CONTACTS_ON_DISCORD: "Contacts on Discord", FRIEND_REQUEST_NO_RESULTS_FOUND: "Wumpus looked, but couldn’t find anyone with that name.", ADD_BY_USERNAME: "Add by Username", ADD_BY_ID_TITLE: "Add your friend on Discord", ADD_BY_ID_BODY: "You will need both their username and a tag. Keep in mind that username is case sensitive.", ADD_BY_ID_INPUT_HEADER: "Add via username", ADD_BY_ID_INPUT_ERROR: "You must enter a valid username and tag", SELF_USERNAME_INDICATOR_HOOK: "Your username is $[](usernameHook)", SELF_USERNAME_INDICATOR: "Your username is {username}", SELF_USERNAME_DISPLAY_HOOK: "By the way, your username is $[](usernameHook).", USERNAME_SEARCH_BODY: "To find someone and add them as a friend, you’ll need their username and tag. Keep in mind that username is case sensitive.", USERNAME_SEARCH_HEADER: "Who would you like to add as a friend?", ADD_FRIEND_OTHER_OPTIONS: "or use these options", ADD_FRIEND_STUDENT_HUB: "Connect with friends in your student hub.", NEARBY_SCAN: "Nearby Scan", NEARBY_SCAN_CTA_TITLE: "Nearby scan", NEARBY_SCAN_SUBTITLE: "Use Bluetooth and Wifi to find nearby friends.", FRIENDS_SHARE_SHEET_SCANNING_TEXT_TOP: "Make sure your friends are scanning too!", FRIENDS_SHARE_SHEET_SCANNING_TEXT_BOTTOM: "Scanning the airwaves for friends. Make sure your friends are on this page and scanning too.", FRIENDS_SHARE_TABBAR_TITLE: "Add me on {url} so we can talk! My username is {username}.", FRIENDS_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_CANCEL_WITH_NAME: "Cancel Friend Request for {name}", FRIENDS_ROW_MUTUAL_FRIENDS: "{count, plural, =1 {1 mutual friend} other {{count} mutual friends}}", FRIENDS_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_DECLINE_WITH_NAME: "Ignore Invitation from {name}", FRIENDS_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_ACCEPT_WITH_NAME: "Accept Invitation from {name}", FRIENDS_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_MESSAGE_WITH_NAME: "Send a DM to {name}", FRIENDS_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_CALL_WITH_NAME: "Call {name}", FRIENDS_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_ACCEPT_SUGGESTION: "Accept Suggestion", FRIENDS_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_IGNORE_SUGGESTION: "Ignore Suggestion", FRIENDS_EMPTY_STATE_FRIEND_SUGGESTIONS_COPY: "No suggested friends", FRIENDS_EMPTY_STATE_PENDING_FRIENDS_COPY: "No pending friends", FRIENDS_EMPTY_STATE_ADD_FRIENDS: "Discord without Friends is like a house that's not a home. Invite some people to get things going!", FRIEND_PERMITTED_SOURCE: "Who can send you a friend request", FRIEND_PERMITTED_SOURCE_ALL: "Everyone", FRIEND_PERMITTED_SOURCE_MUTUAL_FRIENDS: "Friends of Friends", FRIEND_PERMITTED_SOURCE_MUTUAL_GUILDS: "Server Members", USER_KEYWORD_FILTERS_TITLE: "Obscure Commonly Flagged Words", USER_KEYWORD_FILTERS_DESCRIPTION: "Automatically replace words with asteriks that match our keyword filter presets", USER_KEYWORD_FILTERS_PROFANITY_TITLE: "Severe Profanity", USER_KEYWORD_FILTERS_PROFANITY_DESCRIPTION: "Extreme forms of swearing or cursing", USER_KEYWORD_FILTERS_SLURS_TITLE: "Insults & Slurs", USER_KEYWORD_FILTERS_SLURS_DESCRIPTION: "Personally insulting terms and terms that may be considered hate speech", USER_KEYWORD_FILTERS_SEXUAL_CONTENT_TITLE: "Sexual Content", USER_KEYWORD_FILTERS_SEXUAL_CONTENT_DESCRIPTION: "Terms that refer to sexually explicit behavior or activity", USER_DIRECT_MESSAGE_FILTERS: "Direct message filters", USER_EXPLICIT_CONTENT_FILTER: "Safe Direct Messaging", USER_EXPLICIT_CONTENT_FILTER_V2: "Explicit image filter", USER_EXPLICIT_CONTENT_FILTER_HELP: "Automatically scan and delete direct messages you receive that contain explicit media content.", USER_EXPLICIT_CONTENT_FILTER_HELP_V2: "Automatically scan and block direct messages you receive that contain explicit media content or spam.", USER_EXPLICIT_CONTENT_FILTER_HELP_V3: "Automatically block direct messages that may contain explicit images. [Learn more about this setting here.]({appealLink})", ACTIVITY_PARTY_PRIVACY: "Rich Presence", ACTIVITY_PARTY_PRIVACY_FRIENDS: "Allow friends to join your game", ACTIVITY_PARTY_PRIVACY_FRIENDS_HELP: "This setting allows friends to join your game without sending a request.", ACTIVITY_PARTY_PRIVACY_VOICE_CHANNEL: "Allow voice channel participants to join your game", ACTIVITY_PARTY_PRIVACY_VOICE_CHANNEL_HELP: "This setting allows people that are in the same voice channel as you to join your game without sending a request. This feature only works in non-community servers.", USER_EXPLICIT_CONTENT_FILTER_FRIENDS_AND_NON_FRIENDS: "Keep me safe", USER_EXPLICIT_CONTENT_FILTER_FRIENDS_AND_NON_FRIENDS_HELP: "Scan direct messages from everyone.", USER_EXPLICIT_CONTENT_FILTER_NON_FRIENDS: "My friends are nice", USER_EXPLICIT_CONTENT_FILTER_NON_FRIENDS_HELP: "Scan direct messages from everyone unless they are a friend.", USER_EXPLICIT_CONTENT_FILTER_DISABLED: "Do not scan", USER_EXPLICIT_CONTENT_FILTER_DISABLED_HELP: "Direct messages will not be scanned for explicit content.", USER_EXPLICIT_CONTENT_FILTER_DISABLED_HELP_V2: "Direct messages will not be scanned for explicit media content or spam.", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_HEADER: "DM Spam Filter Beta", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_HEADER_V2: "Filter DM spam", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_CONTENT: "See less DM spam. New DMs will automatically be filtered for spam. Toggle this under Settings > Privacy & Safety > Safe Direct Messaging.", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_CONTENT_V2: "See less DM spam. New DMs may automatically be filtered for spam. Toggle this under Settings > Privacy & Safety > Direct message filters > DM spam filter.\n\n[Click here to learn more.]({helpdeskArticle})", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_CONTENT_MOBILE_V2: "See less DM spam. New DMs may automatically be filtered for spam. Toggle this under Settings > Privacy & Safety > Direct message filters > DM spam filter.", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_CONTENT_CLICK_TO_LEARN: "[Click here to learn more.]({helpdeskArticle})", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_REDIRECT: "Change setting", USER_EXPLICIT_CONTENT_FILTER_COACHMARK_ASSET_ALT: "Wumpus getting mail out of a bag on the back of a turtle.", USER_EXPLICIT_CONTENT_FILTER_FRIENDS_AND_NON_FRIENDS_V2: "Filter all direct messages", USER_EXPLICIT_CONTENT_FILTER_FRIENDS_AND_NON_FRIENDS_HELP_V2: "All direct messages will be filtered for explicit images.", USER_EXPLICIT_CONTENT_FILTER_NON_FRIENDS_V2: "Filter direct messages from non-friends", USER_EXPLICIT_CONTENT_FILTER_NON_FRIENDS_HELP_V2: "Direct messages from non-friends will be filtered for explicit images.", USER_EXPLICIT_CONTENT_FILTER_DISABLED_V2: "Do not filter direct messages", USER_EXPLICIT_CONTENT_FILTER_DISABLED_HELP_V2: "Direct messages will not be filtered for explicit images.", SETTINGS_DM_SPAM_FILTER: "DM Spam Filter", USER_DM_SPAM_FILTER: "DM spam filter", USER_DM_SPAM_FILTER_HELP: "Automatically send direct messages that may contain spam into a separate spam inbox. [Learn more about this setting here.]({appealLink})", USER_DM_SPAM_FILTER_DISABLED: "Do not filter direct messages", USER_DM_SPAM_FILTER_DISABLED_HELP: "Direct messages will not be filtered for spam.", USER_DM_SPAM_FILTER_NON_FRIENDS: "Filter direct messages from non-friends", USER_DM_SPAM_FILTER_NON_FRIENDS_HELP: "Direct messages from non-friends will be filtered for spam.", USER_DM_SPAM_FILTER_FRIENDS_AND_NON_FRIENDS: "Filter all direct messages", USER_DM_SPAM_FILTER_FRIENDS_AND_NON_FRIENDS_HELP: "All direct messages will be filtered for spam.", SETTINGS_DATA_PRIVACY_CONTROLS: "How We Use Your Data", DATA_PRIVACY_CONTROLS: "How we use your data", DATA_PRIVACY_CONTROLS_USAGE_STATISTICS_TITLE: "Use data to improve Discord", DATA_PRIVACY_CONTROLS_USAGE_STATISTICS_NOTE: "This setting allows us to use and process your information to understand and improve our services. [Learn more about it here.]({helpdeskArticle})", DATA_PRIVACY_CONTROLS_PERSONALIZATION_TITLE: "Use data to personalize my Discord experience", DATA_PRIVACY_CONTROLS_PERSONALIZATION_NOTE_LEARN_MORE: "This setting allows us to use information, such as who you talk to and what games you play, to personalize Discord for you. [Learn more about it here.]({helpdeskArticle})", DATA_PRIVACY_CONTROLS_BASIC_SERVICE_TITLE: "Use data to make Discord work", DATA_PRIVACY_CONTROLS_PERSONAL_DATA_TITLE: "Request all of my Data", DATA_PRIVACY_CONTROLS_BASIC_SERVICE_NOTE: "We need to store and process some data in order to provide you the basic Discord service, such as your messages, what servers you’re in and your Direct Messages. By using Discord, you allow us to provide this basic service. You can stop this by [Disabling or Deleting your account](onClick).", DATA_PRIVACY_CONTROLS_REQUEST_DATA_DOWNLOAD: "Request Data", DATA_PRIVACY_CONTROLS_REQUEST_DATA_SUCCESS_TITLE: "Request received", DATA_PRIVACY_CONTROLS_REQUEST_DATA_SUCCESS_BODY: "We will email you a link to download as soon as it’s ready.", DATA_PRIVACY_CONTROLS_REQUEST_DATA_FAILURE_TITLE: "Oops, something went wrong...", DATA_PRIVACY_CONTROLS_REQUEST_DATA_FAILURE_BODY: "Please try again", DATA_PRIVACY_CONTROLS_REQUEST_DATA_TOOLTIP: "Your account must be verified with an email address to request data. You can verify your account in the My Account section", DATA_PRIVACY_CONTROLS_REQUEST_DATA_MODAL_TITLE: "Submit Data Request", DATA_PRIVACY_CONTROLS_REQUEST_DATA_MODAL_NOTE: "It may take us up to 30 days to collect your data. We will send you an email to the address you registered with when the package is ready.", DATA_PRIVACY_CONTROLS_REQUEST_DATA_MODAL_WEB_NOTE: "Select the data that you'd like to be included in your data package below. You can learn more about each of these selections [here]({helpdeskArticle}). \n\n Note that some selections, like Messages, may delay the delivery of your package, and it may take us up to 30 days to collect your data. We will send you an email to the address you registered with when the package is ready.", DATA_PRIVACY_CONTROLS_REQUEST_DATA_MODAL_CONFIRM: "Request My Data", DATA_PRIVACY_CONTROLS_REQUEST_DATA_MODAL_CANCEL: "I've changed my mind", DATA_PRIVACY_CONTROLS_REQUEST_DATA_MODAL_SUCCESS: "Our privacy farmers have begun harvesting your data. This can take up to 30 days, but we'll email you when it’s done.", DATA_PRIVACY_CONTROLS_REQUEST_DATA_NOTE: "[Learn more]({helpdeskArticle}) about how getting a copy of your personal data works.", DATA_PRIVACY_UPDATE_CONSENTS_FAILED: "We couldn't update your data usage preferences right now. Please try again later", HARVEST_BACKEND_USERS: "Account", HARVEST_BACKEND_MESSAGES: "Messages", HARVEST_BACKEND_GUILDS: "Servers", HARVEST_BACKEND_ANALYTICS: "Analytics", HARVEST_BACKEND_ACTIVITIES: "Activities", HARVEST_BACKEND_HUBSPOT: "Programs", USER_DM_SETTINGS: "Server Privacy Defaults", USER_DM_SETTINGS_HELP: "This setting is applied when you join a new server. It does not apply retroactively to your existing servers.", USER_DM_SETTINGS_QUESTION: "Do you want to also apply this change to all your existing servers?", NEW_GUILDS_DM_ALLOWED: "Allow direct messages from server members", USER_DROPS_SETTINGS: "Promo Settings", USER_DROPS_SETTINGS_DROPS_OPTED_OUT: "In-game rewards (aka Quests)", USER_DROPS_SETTINGS_DROPS_OPTED_OUT_FORMATTED: "Use information about how you use Discord such as what games you play to tell you about Quests or other in-game reward opportunities. [Learn more about it here.]({helpdeskArticle})", USER_DM_SETTINGS_TITLE: "Server Privacy", USER_DM_SETTINGS_DESCRIPTION: "Do you want to also apply this change to all your existing servers? You can also disable direct messages on individual servers by visiting that server's settings page.", DROPS_REQUEST_FEEDBACK_OPT_OUT: "Quests is currently in beta - we'd like to learn more about why you turned it off. [Feedback Survey]({feedbackURL})", DROPS_REQUEST_FEEDBACK_SUCCESS: "Quests is currently in beta - thanks for participating, now we'd like to hear from you! [Feedback Survey]({feedbackURL})", DROPS_READ_BLOG_TO_ENABLE: 'You must be looking for Discord Quests! If you\'re seeing this message, we need to tweak some settings. To enable it, you\'ll need to go to Settings -> Privacy & Safety and enable both "Use data to customize my Discord experience" and "In-game rewards (aka Quests)" settings.\n\n[Read more in our FAQs]({blogURL})', DROPS_ELIGIBILITY_ENROLLMENT_PRIMARY_CTA: "Enroll Now", DROPS_AVAILABLE: "Quests Available", DROPS_ENABLED: "Quests Enabled", DROPS_BANNER_ENDED_INCOMPLETE: "{gameTitle} Quest has closed. Would you mind sharing some feedback on why you couldn't complete it?", DROPS_FEEDBACK_SURVEY: "Feedback Survey", DROPS_QUEST_COMPLETION_TOOLTIP_HEADER: "Claim Your Quest Reward!", GIFT_INVENTORY_AVAILABLE_GIFTS: "Available Gifts", DROPS_GIFT_INVENTORY_TITLE: "Quests", DROPS_CARD_REDEEM_UNTIL: "Code is available to redeem until {endDate}.", DROPS_GIFT_INVENTORY_AVAILABLE_GIFT_PROMPT: "Stream for {streamLengthRequirement} minutes and unlock a game code for {gameTitle} on any platform!", DROPS_GIFT_INVENTORY_REDEMPTION_TOOLTIP: "Complete the requirements to earn this Quest reward.", DROPS_REQUIRE_NUM_VIEWERS: "Requires {numViewers, plural, one {1 viewer} other {{numViewers} viewers}}", DROPS_STREAM_PROGRESS_INDICATOR: "Streamed for {minutesStreamed}/{streamLengthRequirement} minutes", DROPS_MODAL_CHOOSE_PLATFORM: "Select the platform you would like to get your {title} code for.", DROPS_MODAL_CHOOSE_SINGLE_PLATFORM: "Unlock a code for {platform}!", DROPS_MODAL_PLATFORM_CONFIRMATION_TITLE: "Are you sure you want a code for {platform}?", DROPS_MODAL_CONFIRMATION_WARNING: "You will not be able to change your selection after hitting confirm.", DROPS_GIFT_INVENTORY_ENROLL: "Enroll", DROPS_PLATFORM_XBOX: "Xbox", DROPS_PLATFORM_PLAYSTATION: "PlayStation", DROPS_PLATFORM_SWITCH: "Nintendo Switch", DROPS_PLATFORM_PC: "PC", DROPS_REDEMPTION_CODE_PLATFORM_TITLE: "Redemption Code for {platform}", DROPS_CODES_RAN_OUT: "We're all out of codes, stay tuned for more information.", DROPS_PROGRESS_INTERRUPTION_WARNING: "There's an issue with your stream. Please restart Discord & {gameTitle} to continue earning Quest progress.", DROPS_QUEST_NOT_COMPLETED_ERROR: "It looks like you haven't completed the Quest for this reward yet!", DROPS_USER_NOT_ENROLLED_ERROR: "You are not enrolled in this Quest yet!", DROPS_NO_CODE_AVAILABLE_ERROR: "That code is no longer available and cannot be claimed", DROPS_CODE_ALREADY_CLAIMED_ERROR: "That code has already been claimed!", DROPS_BANNER_NOTICE: "Don't forget! Unlock a {gameName} Quest reward when you stream the game in a voice channel for {streamLengthRequirement, plural, one {1 minute} other {{streamLengthRequirement} minutes}}. Ends {endDate}.", DROP_ENROLLMENT_CTA_TOOLTIP_HEADER: "{gameName} Quests!", DROPS_LEARN_MORE: "Learn more in our [Quests FAQ.]({faqUrl})", GUILD_WARS_REDEMPTION_TIP: "Copy the code below and log in to your Guild Wars 2 account to redeem it! [Learn More.]({learnMoreUrl})", GUILD_WARS_GO_LIVE_TASK: "Stream Guild Wars 2 for {streamLengthRequirement, plural, one {1 minute} other {{streamLengthRequirement} minutes}} to at least 1 viewer and unlock the Heroes Bundle. To start, join a voice channel, then share using the game window (not your entire screen)! Unlock codes available for ArenaNet or Steam.", GUILD_WARS_DROPS_ELIGIBILITY_ENROLLMENT_TOOLTIP: "Stream for {streamLengthRequirement, plural, one {1 minute} other {{streamLengthRequirement} minutes}} to at least 1 viewer and unlock the Heroes Bundle!", GUILD_WARS_DROPS_COMPLETION_TOOLTIP: "You streamed for {streamLengthRequirement, plural, one {1 minute} other {{streamLengthRequirement} minutes}} and unlocked the Heroes Bundle.", FORTNITE_REWARD_NAME: "Coruscant's Pride Wrap", FORNITE_GUARD_OUTPUT: "Coruscant Guard Outfit", FORTNITE_REDEMPTION_TIP: "Click the link below and log in to your Fortnite account to redeem it! [Learn More.]({learnMoreUrl})", FORTNITE_GO_LIVE_TASK: "Stream Fortnite for {streamLengthRequirement, plural, one {1 minute} other {{streamLengthRequirement} minutes}} to at least 1 viewer and unlock the {rewardName}. To start, join a voice channel, then share using the game window (not your entire screen)!. Unlock codes available for Fortnite.", FORTNITE_DROPS_ELIGIBILITY_ENROLLMENT_TOOLTIP: "Stream for {streamLengthRequirement, plural, one {1 minute} other {{streamLengthRequirement} minutes}} to at least 1 viewer and unlock the {rewardName}!", FORTNITE_DROPS_COMPLETION_TOOLTIP: "You streamed for {streamLengthRequirement, plural, one {1 minute} other {{streamLengthRequirement} minutes}} and unlocked the {rewardName}.", FORTNITE_GIFT_INVENTORY_INFO: "Get your gear to match your {guardOutfitName}!\n\nStarting May 4, unlock the {rewardName} Discord Drop by doing one of two things:\n\nStream live and Screen Share Fortnite on Discord for 15+ or more minutes to at least one Discord friend.\n\nAfter 15 minutes of screen sharing to a friend, you’ll receive a link as a gift in your Settings > Gift Inventory.\n\nClick the link to log into your Epic Games account and the Wrap will be added to your Fortnite Locker!\n\nCan’t stream? You can also accept the Discord Bot Quest! Start by joining the [official Fortnite Discord server](http://discord.gg/fortnite).\n\nIn the server, you’ll see a bot you can interact with to join the Discord Quest.\n\nUpon interacting with the bot, you’ll be taken to a page where you can link your Epic and Discord accounts.\n\nWith your accounts linked, participate in the Quest by completing a task inside Discord and a task inside Fortnite.\n\nAfter both of these tasks are complete, the Wrap will be added to your Fortnite Locker!\n\nLearn more on our blog post!\n", ACTIVITY_RESTRICTION_DEFAULT: "Share your activity status by default when joining large servers", ACTIVITY_RESTRICTION_DEFAULT_NOTE: "This setting allows you to control how you share your activity status by default when you join a new server with over 200 members. [Learn more about this setting]({helpdeskArticle}).", ACTIVITY_RESTRICTION_MODAL_DESC: "Do you want to apply this Activity Status setting change to all your existing servers (regardless of size)? You can also disable sharing your activity status in individual servers by visiting that server's Privacy Settings.", FRIEND_REQUEST_SENT: "Friend request has been sent.", FRIEND_REQUEST_CANCELLED: "Friend request has been canceled.", FRIEND_REQUEST_IGNORED: "Friend request has been ignored.", FRIEND_HAS_BEEN_DELETED: "Friend has been removed.", USER_HAS_BEEN_BLOCKED: "User has been blocked.", USER_HAS_BEEN_UNBLOCKED: "User has been unblocked.", CONFIRMATION_CODE: "Confirmation Code", TOAST_ADD_FRIEND: "Friend Request Sent", TOAST_ADD_FRIENDS: "Friend requests sent!", TOAST_IMAGE_SAVED: "Image Saved", TOAST_VIDEO_SAVED: "Video Saved", TOAST_GIF_SAVED: "Gif Saved", TOAST_USERNAME_SAVED: "Username Copied", TOAST_MESSAGE_COPIED: "Copied Message Text", TOAST_MESSAGE_ID_COPIED: "Copied Message ID", TOAST_ID_COPIED: "Copied ID", TOAST_FEEDBACK_SENT: "Feedback Sent!", TOAST_COMMAND_COPIED: "Copied Command", TOAST_FRIEND_INVITES_REVOKED: "Friend invites revoked", NOISE_CANCELLATION_ON: "Noise Suppression On", NOISE_CANCELLATION_OFF: "Noise Suppression Off", TOAST_FRIEND_REQUEST_ACCEPTED: "Friend added", TOAST_FRIEND_REQUEST_IGNORED: "Friend Request Cleared", TOAST_REMIX_LANGUAGE_SUPPORT_WARNING: "Some characters are not available in remix.", FRIEND_REQUEST_RATE_LIMITED_HEADER: "WOAH THERE. WAY TOO SPICY", FRIEND_REQUEST_RATE_LIMITED_BODY: "You're sending friend requests too quickly!", FRIEND_REQUEST_RATE_LIMITED_BUTTON: "Enter the chill zone", FRIEND_REQUEST_REQUIRES_EMAIL_VALIDATION_HEADER: "HOLD UP JUST A SEC.", FRIEND_REQUEST_REQUIRES_EMAIL_VALIDATION_BODY: "You're going to need to claim your account and verify your e-mail before you can send a friend request.", FRIEND_REQUEST_REQUIRES_EMAIL_VALIDATION_BUTTON: "Enter the verification zone.", FRIEND_REQUEST_FAILED_HEADER: "Friend request failed", FRIEND_REQUEST_FAILED_BODY_NAMES: "Hm, something went wrong when sending a friend request to !!{name}!!. You can always try again later from the friends list.", FRIEND_REQUEST_FAILED_BODY: "Hm, something went wrong when sending friend requests. You can always try again later from the friends list.", ADD_FRIEND_DESCRIPTION: "You can add a friend with their Discord Tag. It's cAsE sEnSitIvE!", ADD_FRIEND_PLACEHOLDER: "Enter a Username#0000", ADD_FRIEND_INPUT_HINT: "Username#0000", ADD_FRIEND_CONFIRMATION: "Sent request to **!!{name}!!**", ADD_FRIEND_BUTTON: "Send Friend Request", ADD_FRIEND_BUTTON_AFTER: "Friend Request Sent", ACCEPT_REQUEST_BUTTON_AFTER: "Request Accepted", ADD_FRIEND_MAKE_FRIENDS: "Other places to make friends", ADD_FRIEND_EXPLORE_PUBLIC_SERVERS: "Explore Discoverable Servers", ADD_FRIEND_INVITE_LINK_SHARE_MESSAGE: "Add me as a friend on Discord! Invite expires in 1 week: {link}", INVITE_CONTACT_BUTTON: "Invite", INVITE_CONTACT_MESSAGE_PLACEHOLDER: "Add me back on Discord !!{link}!!", INVITE_GUILD_CONTACT_MESSAGE_PLACEHOLDER: "Join this server on Discord !!{link}!!", INVITE_TAP_TO_INVITE: "Tap to Invite", INVITE_YOUR_CONTACTS: "Your Contacts", INVITE_YOUR_CONTACTS_HEADER: "Invite Your Contacts", SHOW_ALL_WITH_COUNT: "Show all ({count})", INVITE_CONTACTS_HEADER: "Contacts You Should Invite — {count}", INVITE_CONTACTS_EMPTY_TITLE: "Find your friends", INVITE_CONTACTS_EMPTY_BODY: "By syncing your contacts, Discord can find your friends and help them find you.", INVITE_CONTACTS_BODY_NOTIFICATION: "Sync your contacts to find people you know on Discord.", INVITE_CONTACTS_FOOTER: "$[Learn more about finding your friends](learnMoreHook)", INVITE_CONTACTS_EMPTY_CTA: "Get Started", INVITE_CONTACTS_INNER_CONTACTS_COUNT: "{numFriends, plural, =0 {# friends on Discord} one {# friend on Discord} other {# friends on Discord}}", INVITE_CONTACTS_NO_SUGGESTIONS_TITLE: "No suggestions at the moment...", INVITE_CONTACTS_NO_SUGGESTIONS_BODY: "Check back later to view suggestions from your contacts.", INVITE_CONTACTS_ADD_FRIEND_BY_USERNAME: "Add a Friend by Username", INVITE_CONTACTS_SHARE_FRIEND_LINK: "Share Your Friend Link", INVITE_CONTACTS_TO_GUILD_FRIENDS_SECTION_TITLE: "Friends", INVITE_CONTACTS_TO_GUILD_CONTACTS_SECTION_TITLE: "Contacts", INVITE_CONTACTS_SEE_ALL: "See All", INVITE_CONTACTS_DM_SUBHEADER: "Invite Contacts to Message", USER_SUMMARY_WITH_OTHERS: "{name} and {count, plural, one {1 other} other {{count} others}}", USER_SUMMARY_ONE: "!!{first}!!", USER_SUMMARY_TWO: "!!{first}!!, !!{second}!!", USER_SUMMARY_THREE: "!!{first}!!, !!{second}!!, !!{third}!!", USER_SUMMARY_THREE_AND_OTHERS: "!!{first}!!, !!{second}!!, !!{third}!!, and {count, plural, one {1 other} other {{count} others}}", ADD_FRIEND_SUCCESS: "Success! Your friend request to **!!{discordTag}!!** was sent.", ADD_FRIEND_ERROR_NUMBERS_ONLY: "We're more than numbers... we're people! Enter a username and tag. It should look something like: TotallyARealUsername#0000", ADD_FRIEND_ERROR_USERNAME_ONLY: "We need !!{username}!!'s four digit tag so we know which one they are.", ADD_FRIEND_ERROR_DISCORD_TAG_USERNAME: "DiscordTag is a fake username. Enter your friend's real username and tag. It should look something like: TotallyARealUsername#0000", ADD_FRIEND_ERROR_INVALID_DISCORD_TAG: "**!!{discordTag}!!** is not accepting friend requests. They’ll have to add you to become friends.", ADD_FRIEND_ERROR_TOO_MANY_FRIENDS: "You've maxed out your friend list. Welcome to the elite 1,000 friends club!", ADD_FRIEND_ERROR_ALREADY_FRIENDS: "You're already friends with that user!", ADD_FRIEND_ERROR_OTHER: "Hm, didn't work. Double check that the capitalization, spelling, any spaces, and numbers are correct.", ADD_FRIEND_ADD_MANUALLY: "Send Friend Request", ADD_FRIEND_FRIEND: "Friend", ADD_FRIEND_NEARBY_ENABLE: "Start Nearby Scanning", ADD_FRIEND_NEARBY_TITLE: "Scanning the airwaves...", ADD_FRIEND_NEARBY_BODY: "Make sure your friends are on this page and scanning too.", ADD_FRIEND_NEARBY_FOUND_TITLE: "We found some friends!", ADD_FRIEND_NEARBY_FOUND_BODY: "Still scanning the airwaves. You will see more friends pop up here if we find them.", ADD_FRIEND_NEARBY_STOPPED: "Nearby connection was stopped.", ADD_FRIEND_NEARBY_CONNECTION_ERROR: "Please turn on location services, Bluetooth, and WiFi (all the things!). Then reconnect to the internet to activate Nearby.", ADD_FRIEND_NEARBY_CONNECTION_ERROR_IOS: "Please turn on Bluetooth and WiFi to activate Nearby.", ADD_FRIEND_NEARBY_GENERIC_ERROR: "There was a problem using Nearby. Please try again", ADD_FRIEND_NEARBY_LEARN_MORE: "[Learn More]({helpdeskArticle})", ME: "Me", BLOCK_USER_ERROR_TOO_MANY_BLOCKED_USERS: "You've maxed out your block list.", NOTIFICATION_PENDING_FRIEND_REQUEST: "Sent a friend request.", NOTIFICATION_ACCEPTED_FRIEND_REQUEST: "Accepted your friend request.", FRIEND_REQUEST_PENDING_A11Y_ANNOUNCEMENT: "!!{username}!! sent you a friend request", FRIEND_REQUEST_ACCEPTED_A11Y_ANNOUNCEMENT: "!!{username}!! has accepted your friend request", DM_VERIFICATION_TEXT_BLOCKED: "You cannot send messages to a user you have blocked.", PRIVACY_SETTINGS: "Privacy Settings", ALLOW_SERVER_DMS: "Allow direct messages from server members.", ALLOW_HUB_DMS: "Allow direct messages from Hub members.", PRIVACY_SETTINGS_DIRECT_MESSAGES: "Direct Messages", PRIVACY_SETTINGS_DIRECT_MESSAGES_DESC: "Allow direct messages from other members in this server.", PRIVACY_SETTINGS_DIRECT_MESSAGES_DESC_HUB: "Allow direct messages from other members in this hub.", PRIVACY_SETTINGS_MESSAGE_REQUESTS: "Message Requests", PRIVACY_SETTINGS_MESSAGE_REQUESTS_DESC_HUB: "If direct messages are enabled, filter messages from hub members you may not know.[Learn more about this setting here.]({helpdeskArticle})", PRIVACY_SETTINGS_MESSAGE_REQUESTS_DESC: "If direct messages are enabled, filter messages from server members you may not know. [Learn more about this setting here.]({helpdeskArticle})", PRIVACY_SETTINGS_ACTIVITY_STATUS: "Activity Status", PRIVACY_SETTINGS_ACTIVITY_STATUS_V2: "Activity Display", PRIVACY_SETTINGS_ACTIVITY_STATUS_DESC: "Share your activity status in this server. [Learn more about this setting here.]({helpdeskArticle})", PRIVACY_SETTINGS_ACTIVITY_STATUS_DESC_V2: "Control whether your activity displays as a status and in your profile for server members. This does not control all activity displays such as those on the platform level or your activity history. [Learn how to customize your global settings here.]({helpdeskArticle})", PRIVACY_SETTINGS_ACTIVITY_JOINING: "Activity Joining", PRIVACY_SETTINGS_ACTIVITY_JOINING_DESC: "Allow users to join your activity in this server. [Learn more about this setting here.]({helpdeskArticle})", PRIVACY_SETTINGS_STAFF_ONLY_HEADER: "Staff Only Privacy Settings", PRIVACY_SETTINGS_STAFF_ONLY_DESC: "Help improve Discord's spam models by submitting data when marking messages as non-spam.", PRIVACY_SETTINGS_NON_SPAM_RETRAINING_SETTING_OPT_IN_HEADER: "Opt-in", PRIVACY_SETTINGS_NON_SPAM_RETRAINING_SETTING_OPT_IN_DESC: "A non-spam report will be sent.", PRIVACY_SETTINGS_NON_SPAM_RETRAINING_SETTING_OPT_OUT_HEADER: "Opt-out", PRIVACY_SETTINGS_NON_SPAM_RETRAINING_SETTING_OPT_OUT_DESC: "A non-spam report will NOT be sent.", PRIVACY_SETTINGS_NON_SPAM_RETRAINING_SETTING_UNSET_HEADER: "Undecided", PRIVACY_SETTINGS_NON_SPAM_RETRAINING_SETTING_UNSET_DESC: "No decision has been made and we will prompt for a decision in the future.", PRIVACY_SETTINGS_COMMUNITY_GUILDS_DISCLAIMER: "Learn about enhanced safety measures in Community Servers [here]({policyLink}).", MESSAGE_REQUESTS: "Message Requests", MESSAGE_REQUEST_ACCEPT: "Accept DM", MESSAGE_REQUEST_IGNORE: "Ignore", MESSAGE_REQUEST_PREVIEW: "Preview", MESSAGE_REQUEST_INCOMING: "Incoming message request", MESSAGE_REQUEST_SECTION_HEADER: "Message Requests — {pendingRequestNumber}", MESSAGE_REQUEST_BANNER_TITLE: "This is a Message Request.", MESSAGE_REQUEST_BANNER_SUBTITLE: "You can accept or hide the conversation.", MESSAGE_REQUEST_ACCEPT_CONFIRMATION_TITLE: "Are you sure you know this person?", MESSAGE_REQUEST_ACCEPT_CONFIRMATION_BODY: "They're not on your friends list. Click 'Confirm' below if you're sure you want to speak to them in a DM.", MESSAGE_REQUEST_BLOCK_ON_REJECT_CONFIRMATION_TITLE: "Block this account?", MESSAGE_REQUEST_BLOCK_ON_REJECT_CONFIRMATION_BODY: "You chose to ignore this message request. Do you want to block this user to prevent future messages?", MESSAGE_REQUESTS_CONTEXT_MENU_MOVE_TO: "Mark as Message Request (Experimental)", MESSAGE_REQUESTS_CONTEXT_MENU_CLEAR: "Reset Message Request (Experimental)", MESSAGE_REQUESTS_EMPTY_STATE_BODY: "There are no pending message requests. Here's Wumpus for now.", MESSAGE_REQUESTS_SPAM_EMPTY_STATE_BODY: "There are no spam requests. Here's Wumpus for now.", MESSAGE_REQUESTS_DELETED_MESSAGE: "The last message was deleted.", MESSAGE_REQUESTS_BLOCKED_MESSAGE: "Message is from a blocked user.", MESSAGE_REQUESTS_ERROR_LOADING_PREVIEW: "Error loading message preview.", MESSAGE_REQUESTS_STICKER_MOBILE: "Message contains a sticker.", MESSAGE_REQUESTS_NO_TEXT_CONTENT_MOBILE: "Message contains an attachment.", MESSAGE_REQUESTS_UNABLE_TO_RENDER_PREVIEW: "Unable to display message preview.", MESSAGE_REQUEST_REQUEST_ERROR_ALERT_TITLE: "Uh oh! Something went wrong while updating this message request. Please wait a moment and try again.", MESSAGE_REQUEST_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_ACCEPT: "Accept message request", MESSAGE_REQUEST_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_IGNORE: "Ignore message request", MESSAGE_REQUEST_ROW_SELECT_ACCESSIBILITY_LABEL: "Preview message request", MESSAGE_REQUESTS_SETTING_GENERAL_HEADER: "Enable message requests from server members you may not know", MESSAGE_REQUESTS_SETTING_GENERAL_CAPTION: "If direct messages are enabled, this setting is applied when you join a new server. It does not apply retroactively to your existing servers. [Learn more about this setting here.]({helpdeskArticle})", MESSAGE_REQUESTS_SETTING_GENERAL_MODAL_HEADER: "Message Requests", MESSAGE_REQUESTS_SETTING_GENERAL_MODAL_DESCRIPTION: "Do you want to also apply this change to all your existing servers? You can also disable messages requests on individual servers by visiting that servers setting's page.", MESSAGE_REQUESTS_COACHMARK_TITLE: "New Message Requests", MESSAGE_REQUESTS_COACHMARK_CONTENT: "Messages from people you aren't friends with will show up here. Toggle this under Settings > Privacy & Safety.", MESSAGE_REQUESTS_COACHMARK_CONTENT_TEENS: "Messages from people you aren't friends with will show up here.", MESSAGE_REQUESTS_COACHMARK_DISMISS: "Got it", MESSAGE_REQUESTS_COACHMARK_CONFIRM: "Check it out", MESSAGE_REQUESTS_REQUESTS_TAB_TITLE: "Requests", MESSAGE_REQUESTS_SPAM_TAB_TITLE: "Spam", MESSAGE_REQUESTS_SPAM_TAB_TITLE_WITH_COUNT: "Spam ({count})", MESSAGE_REQUESTS_PREVIEW_TAB_TITLE: "Message Preview", MESSAGE_REQUESTS_SPAM_HEADER: "Spam - {count}", MESSAGE_REQUESTS_SPAM_ERROR_ALERT_TITLE: "Uh oh! Something went wrong while updating this spam message. Please wait a moment and try again.", MESSAGE_REQUESTS_SPAM_ACCEPT: "Accept DM", MESSAGE_REQUESTS_SPAM_REPORT: "Report", MESSAGE_REQUESTS_SPAM_IGNORE: "Ignore", MESSAGE_REQUESTS_SPAM_HAM: "Mark as not spam", MESSAGE_REQUESTS_PAGE_TITLE: "Pending Requests", MESSAGE_REQUESTS_PAGE_TITLE_WITH_COUNT: "Pending Requests — {count}", MESSAGE_REQUESTS_SPAM_HAM_MODAL_HEADER: "Confirm this isn't spam", MESSAGE_REQUESTS_SPAM_HAM_MODAL_SUBHEADER: "Are you sure this message isn't spam?", MESSAGE_REQUESTS_SPAM_HAM_TOGGLE: "Help improve our spam filter by forwarding this message to Discord", MESSAGE_REQUESTS_SPAM_HAM_OPT_OUT: "Don't show this again", MESSAGE_REQUESTS_SPAM_BOTTOMSHEET_HEADER: "Mark as Not Spam", MESSAGE_REQUESTS_SPAM_MOBILE_HEADER: "Spam Requests - {count}", MESSAGE_REQUESTS_CHANNEL_SIDEBAR_HAM_HEADER: "Was this message spam? Let us know and help improve Discord’s spam filtering.", MESSAGE_REQUESTS_CHANNEL_SIDEBAR_HAM_BUTTON: "Mark as Not Spam", MESSAGE_REQUESTS_SPAM_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_ACCEPT: "Accept spam message request", MESSAGE_REQUESTS_SPAM_ROW_ACTION_BUTTON_ACCESSIBILITY_LABEL_IGNORE: "Ignore spam message request", MESSAGE_REQUESTS_SPAM_ROW_SELECT_ACCESSIBILITY_LABEL: "Preview spam message request", MESSAGE_REQUESTS_SPAM_REQUEST_ERROR_ALERT_TITLE: "Uh oh! Something went wrong while updating this spam message request. Please wait a moment and try again.", MESSAGE_REQUESTS_SPAM_REQUEST_BOTTOMSHEET_HEADER: "This message might be spam", MESSAGE_REQUESTS_SPAM_REQUEST_BOTTOMSHEET_SUBHEADER: "You can still reply. Messages marked as “not spam” will help improve our spam filters.", MESSAGE_REQUESTS_SPAM_REQUEST_BOTTOMSHEET_ACCEPT: "Accept Message", MESSAGE_REQUESTS_HAM_ACTIONSHEET_TOGGLE_TEXT: "Help improve our spam filter by forwarding this message to Discord", MESSAGE_REQUESTS_CLEAR_ALL: "Clear All", DM_SETTINGS_UPSELL_TITLE: "Turn off direct messages from this server?", DM_SETTINGS_UPSELL_BODY: "You've turned down a couple message requests from **!!{guild_name}!!**. If you turn these off, you won't receive DMs from people in this server unless you're friends.", DM_SETTINGS_UPSELL_SUBTITLE: "This change affects", DM_SETTINGS_UPSELL_YES_BUTTON: "Yes, turn them off", DM_SETTINGS_UPSELL_NO_BUTTON: "No, keep them on", DM_SETTINGS_UPSELL_FOOTER: "You can change this setting any time in this [server's Privacy Settings](onClick).", DM_SETTINGS_UPSELL_SUCCESS_TOAST: "Settings changed", SAFETY_CONSUMER_EDUCATION_BLOCK_HEADER: "How to Block", SAFETY_CONSUMER_EDUCATION_BLOCK_CONTENT: "Not a fan of annoying messages? Control your DM settings & block away.", SAFETY_CONSUMER_EDUCATION_MUTE_HEADER: "How to Mute", SAFETY_CONSUMER_EDUCATION_MUTE_CONTENT: "Need some quiet time? Mute away - you're in control.", SAFETY_CONSUMER_EDUCATION_REPORTING_HEADER: "How to Report", SAFETY_CONSUMER_EDUCATION_REPORTING_CONTENT: "Seeing something that's not ok? Click that report button.", BOT_DM_SEND_FAILED: "Your message could not be delivered because you don't share a server with the recipient or you disabled direct messages on your shared server, recipient is only accepting direct messages from friends, or you were blocked by the recipient.", BOT_DM_SEND_FAILED_WITH_HELP_LINK: "Your message could not be delivered. This is usually because you don't share a server with the recipient or the recipient is only accepting direct messages from friends. You can see the full list of reasons here: {helpUrl}", BOT_DM_SEND_FAILED_WITH_HELP_LINK_MOBILE: "Your message could not be delivered. This is usually because you don't share a server with the recipient or the recipient is only accepting direct messages from friends. You can see the full list of reasons [here]({helpUrl})", BOT_REQUIRES_EMAIL_VERIFICATION: "You need to verify your email or phone before you can send messages here.", BOT_DM_RATE_LIMITED: "You are sending too many new direct messages. Hold off for a few minutes before trying to message this person again.", BOT_DM_SEND_MESSAGE_TEMPORARILY_DISABLED: "Sending messages to this channel has been temporarily disabled. Try again in a bit.", BOT_DM_EXPLICIT_CONTENT: "Woah there! !!{name}!! has requested that Discord block any messages our mostly-accurate robots deem to be explicit, so your message has not been sent.", BOT_GDM_EXPLICIT_CONTENT: "Woah there! Someone in !!{name}!! has requested that Discord block any messages our mostly-accurate robots deem to be explicit, so your message has not been sent.", BOT_GUILD_EXPLICIT_CONTENT: "Woah there! The owner of !!{name}!! has requested that Discord block any messages our mostly-accurate robots deem to be explicit, so your message has not been sent.", BOT_CALL_IDLE_DISCONNECT_2: "It appears you've been by yourself in this call for more than {number, plural, one {one minute} other {{number} minutes}}. The bandwidth patrol has asked me to disconnect you to save bandwidth. That stuff doesn't grow on trees!", CLAIM_ACCOUNT_REQUIRED_BODY: "Please claim your account to use the desktop app.", CLAIM_ACCOUNT_EMAIL_TO: "Thanks! We've sent a confirmation link to: **!!{email}!!**", CLAIM_ACCOUNT_REQUIRED_EMAIL_TO: "Thanks! We've sent a confirmation link to **!!{email}!!**. Please click the link to verify your account.", CLAIM_ACCOUNT_PROMOTE_APP_2021_04: "Now that you have an account, download the Discord desktop app for better performance and more features!", CLAIM_ACCOUNT_GET_APP: "Get the Desktop App", FINISH_SIGNING_UP: "Finish signing up", CLAIM_ACCOUNT_BODY_2: "Claim your account by entering an email and password.", STREAMER_MODE: "Streamer Mode", OPTIONS: "Options", USER_SETTINGS_STREAMER_NOTICE_TITLE: "Looking for integrations?", USER_SETTINGS_STREAMER_NOTICE_BODY: "\nEnhance your Discord community with tools made for streamers.\n\nCheck out [Discord's StreamKit]({streamkitURL}).", STREAMER_MODE_ENABLED: "Streamer Mode Enabled", ENABLE_STREAMER_MODE_LABEL: "Enable Streamer Mode", ENABLE_STREAMER_MODE_DESCRIPTION: "You can set a keybind to toggle Streamer Mode in [Keybind Settings](onClick).", AUTO_TOGGLE_STREAMER_MODE_LABEL: "Automatically Enable/Disable", AUTO_TOGGLE_STREAMER_MODE_DESCRIPTION: "Automatically enable/disable Streamer Mode if OBS or XSplit are running on this computer.", HIDE_INSTANT_INVITES_LABEL: "Hide Invite Links", HIDE_INSTANT_INVITES_DESCRIPTION: "Recommended if you don't want random people accessing your Discord servers.", DISABLE_SOUNDS_LABEL: "Disable Sounds", DISABLE_SOUNDS_DESCRIPTION: "All sound effects will be disabled.", DISABLE_NOTIFICATIONS_LABEL: "Disable Notifications", DISABLE_NOTIFICATIONS_DESCRIPTION: "All desktop notifications will be disabled.", HIDE_WINDOW_FROM_STREAM_LABEL: "Hide Discord Window from Screen Capture", HIDE_WINDOW_FROM_STREAM_DESCRIPTION: "Hides most Discord windows from most screen capture software.", HIDE_PERSONAL_INFORMATION_LABEL: "Hide Personal Information", HIDE_PERSONAL_INFORMATION_DESCRIPTION: "Hides email, connected accounts, notes, and anonymizes number tags.", CUSTOM_COLOR: "Custom Color", COLOR_PICKER_PRESETS: "Presets", COLOR_PICKER_CUSTOM: "Custom", COLOR_PICKER_USE_DEFAULT: "Use Default", TAP_ADD_NICKNAME: "Tap to add a nickname", CHANGE_NICKNAME: "Change Nickname", NICKNAME: "Nickname", SERVER_NICKNAME: "Server Nickname", RESET_NICKNAME: "Reset Nickname", CHANGE_NICKNAME_WARNING: "\nNicknames are visible to everyone on this server. Do not change them unless you are enforcing a naming system\nor clearing a bad nickname.\n", NICKNAME_CHANGED: "Nickname changed to !!{nickname}!!.", NICKNAME_CLEARED: "Nickname cleared.", FRIEND_NICKNAME: "Friend Nickname", RESET_FRIEND_NICKNAME: "Reset Friend Nickname", ADD_FRIEND_NICKNAME: "Add Friend Nickname", CHANGE_FRIEND_NICKNAME: "Change Friend Nickname", FRIEND_NICKNAME_DESCRIPTION: "Find a friend faster with a personal nickname. It will only be visible to you in your direct messages.", NOTE: "Note", NOTE_PLACEHOLDER: "Click to add a note", NOTE_PLACEHOLDER_MOBILE: "Tap to add a note", ADD_NOTE: "Add Note", LOADING_NOTE: "Loading Note", EDIT_NOTE: "Edit Note", CHANGE_DM_OWNER: "Make Group Owner", TRANSFER_GROUP_OWNERSHIP: "Transfer Group Ownership", CONFIRM_CHANGE_DM_OWNER: "Transfer ownership of this group to $[](usernameHook)?", WATCH_STREAM: "Watch Stream", JOIN_STREAM: "Join Stream", WATCH_USER_STREAM: "Watch !!{streamerName}!!'s Stream", WATCH_STREAM_STREAMING: "You’re Streaming!", WATCH_STREAM_WATCHING: "Watching Stream", WATCH_STREAM_TIP: "Double click user to watch", WATCH_STREAM_IN_APP: "Go to the app to watch", WATCH: "Watch", STREAMER_PLAYING: "playing !!{game}!!", STREAM_PLAYING: "Playing !!{game}!!", LIVE: "Live", STOP_WATCHING: "Stop Watching", STOP_WATCHING_USER: "Stop Watching — !!{username}!!", STOP_STREAMING: "Stop Streaming", START_STREAMING: "Start Streaming", STREAM_ENDED: "This stream has ended. *cricket noise*", STREAM_HIDDEN: "This stream has been hidden.", CLOSE_WINDOW: "Close Window", CLOSE_STREAM: "Close Stream", STREAM_FAILED_TITLE: "Stream failed to start :(", STREAM_FAILED_DESCRIPTION: "Having issues with your stream? [Let us try to help.]({helpUrl})", STREAM_BAD_STREAMER: "Your stream currently has reduced video or audio quality. This may be due to network conditions.", STREAM_BAD_SPECTATOR: "The stream you're viewing currently has reduced video or audio quality. This may be due to network conditions.", STREAM_NETWORK_QUALITY_ERROR: "Your network connection may be causing a decrease in video and audio quality. To improve voice audio, disable the stream.", STREAM_RECONNECTING_ERROR: "You've been disconnected...", STREAM_RECONNECTING_ERROR_SUBTEXT: "Sit tight, we're patching you back in!", STREAM_SOUNDSHARE_FAILED: "Hey, something went wrong and we couldn't stream the sound from your application.", STREAM_PREVIEW_PAUSED: "Your stream is still running!", STREAM_PREVIEW_PAUSED_SUBTEXT: "We’ve paused this preview to save your resources.", STREAM_CAPTURE_PAUSED: "Stream Paused", STREAM_CAPTURE_PAUSED_DETAILS: "Swap to your application to resume.", STREAM_CAPTURE_PAUSED_DETAILS_VIEWER: "!!{username}!! has minimized their application... sit tight!", POPOUT_PLAYER: "Pop Out", POPOUT_PLAYER_OPENED: "You've popped out the player to another window", POPOUT_RETURN: "Return to App", POPOUT_STAY_ON_TOP: "Stay On Top", POPOUT_REMOVE_FROM_TOP: "Remove From Top", STREAM_FULL_MODAL_HEADER: "Stream is Full", STREAM_FULL_MODAL_BODY: "Sorry, this stream has the max number of viewers.", STREAM_NO_PREVIEW: "Stream just started. Get in here!", STREAM_PREVIEW_LOADING: "Generating preview...", STREAM_QUALITY_DISCORD_NITRO_UNLOCK: "Unlock with Discord Nitro", STREAMER_SETTINGS_TITLE: "Stream Settings", OPEN_IN_THEATER: "Open in Theater", SWITCH_PIP_TO_USER_STREAM: "Switch to !!{username}!!'s Stream", SWITCH_PIP_TO_GO_LIVE: "Switch to Go Live", SWITCH_PIP_TO_ACTIVITY_NAME: "Switch to {activityName}", SWITCH_PIP_TO_ACTIVITY: "Switch to Activity", SHARE_YOUR_SCREEN: "Share Your Screen", VIDEO_CAPACITY_MODAL_HEADER: "Video isn't available", VIDEO_CAPACITY_MODAL_BODY: "Sorry, video chat isn't available when there's more than {videoUserLimit} people in the voice channel.", STREAM_VOLUME: "Stream Volume", STREAM_WATCH_MULTIPLE_TOOLTIP: "Start watching multiple streams", STREAM_SHOW_NON_VIDEO: "Show Non-Video Participants", SHOW_SELF_VIDEO: "Show My Camera", SHOW_SELF_STREAM: "Show My Screen Share", SHOW_NEW_MESSAGE_PREVIEWS: "Show New Message Previews", IOS_STREAM_SHOW_NON_VIDEO: "Show Non-Video Participants", STREAM_PARTICIPANTS_HIDDEN: "Participants without video are currently hidden.\n\nWould you like to show them?", IOS_STREAM_PARTICIPANTS_HIDDEN: "Participants without video are currently hidden. Would you like to show them?", MOBILE_STREAM_PARTICIPANTS_HIDDEN: "Participants without video are currently hidden. Would you like to show them?", STREAM_SHOW_ALL_PARTICIPANTS: "Show All Participants", STREAM_FPS_OPTION: "{value} FPS", STREAM_RESOLUTION: "Resolution", STREAM_PREMIUM_UPSELL_HEADER: "Unlock HD Video streaming with Discord Nitro", STREAM_PREMIUM_UPSELL_HEADER_V2: "Stream your clutchest moments in 4k resolution", STREAM_PREMIUM_UPSELL_BANNER: "Unlock all resolutions and frame rates.", STREAM_PREMIUM_UPSELL_BANNER_V2: "Stream in HD resolution with Nitro", STREAM_PREMIUM_UPSELL_BANNER_LEARN_MORE_V2: "Stream in HD resolution with Nitro. [Learn more](onClick)", STREAM_PREMIUM_UPSELL_BANNER_LEARN_MORE_V3: "Stream in HD resolution with [Nitro](onClick)", STREAM_PREMIUM_UPSELL_BANNER_PRESET_DOCUMENTS: "Level up your streaming.", STREAM_PREMIUM_UPSELL_BANNER_CTA: "Get Nitro", STREAM_PREMIUM_UPSELL_BODY: "Stream HD resolutions at 60 frames per second, get access to chat perks, [and more with Discord Nitro!](onPressMore)", STREAM_PREMIUM_UPSELL_BODY_V2: "Unlock up to 4k/60fps streaming, custom emoji everywhere, animated avatar, and more with Nitro.", STREAM_PREMIUM_UPSELL_BODY_V3: "Unlock up to 4k/60 fps for streaming your gameplay. Or funniest cat videos, we don't judge.", STREAM_PREMIUM_UPSELL_BODY_NO_CTA: "Stream HD resolutions at 60 frames per second, get access to chat perks, and more with Discord Nitro!", STREAM_PREMIUM_UPSELL_WITH_ACTION: "Lift off with Discord Nitro to stream HD resolutions at 60 frames per second. [Learn more](onClick).", STREAM_PREMIUM_UPSELL_CTA: "Subscribe", STREAM_PREMIUM_UPSELL_SECONDARY_CTA: "View All Nitro Perks", STREAM_PRESET_DOCUMENTS_DESCRIPTION_NITRO: "The picture will be clear (Source) with a slow frame rate ({fps} FPS).", STREAM_PRESET_VIDEO: "Smoother Video", STREAM_PRESET_DOCUMENTS: "Better Text Readability", STREAM_PRESET_CUSTOM: "Custom", STREAM_QUALITY: "Stream Quality", STREAM_SINGLE_PERSON_BODY: "No one else is here yet. Invite people to join you!", STREAM_SINGLE_PERSON_BODY_ALT: "No one else is here yet. Tell your friends to come join you!", STREAM_SINGLE_PERSON_INVITE: "Invite people to join you!", STREAM_SINGLE_PERSON_NO_INVITE: "You're alone in this call.", STREAM_NO_PERMISSION_CTA: "No permission", STREAM_PREMIUM_AFFINITY_UPSELL: "{numFriends, plural, =1 {1 friend has} =2 {2 friends have} other {{numFriends}+ friends have}} HD streaming with Nitro", DISPLAY_NAME: "Display Name", PICTURE_IN_PICTURE_COLLAPSE: "Collapse", PICTURE_IN_PICTURE_EXPAND: "Expand", PICTURE_IN_PICTURE_SHOW_PIP: "Show PIP", PICTURE_IN_PICTURE_DISMISS: "Dismiss", STREAM_REPORT_A_PROBLEM: "Report a problem", STREAM_REPORT_PROBLEM_MENU_ITEM: "Report Problem", STREAM_REPORT_A_PROBLEM_POST_STREAM: "How'd the stream go?", STREAM_REPORT_PROBLEM: "Report a problem with your stream", STREAM_REPORT_PROBLEM_MOBILE: "Report Stream Issue", STREAM_REPORT_PROBLEM_HEADER_MOBILE: "Had an issue?", STREAM_REPORT_PROBLEM_BODY: "Sorry you had an issue! Let us know what happened.", STREAM_REPORT_RATING_BODY: "Tell us about your stream watching experience.", STREAM_REPORT_RATING_BODY_STREAMER: "Tell us about your streaming experience.", STREAM_REPORT_LABEL: "Streaming issue", STREAM_REPORT_PLACEHOLDER: "Select your issue", STREAM_REPORT_BLACK: "Stream is black", STREAM_REPORT_BLURRY: "Stream is blurry or pixelated", STREAM_REPORT_LAGGING: "Stream is lagging or refreshing", STREAM_REPORT_OUT_OF_SYNC: "Stream is out of sync with voice", STREAM_REPORT_AUDIO_MISSING: "Application audio is absent", STREAM_REPORT_AUDIO_POOR: "Application audio is low quality", STREAM_REPORT_ENDED_BLACK: "Stream was black", STREAM_REPORT_ENDED_BLURRY: "Stream was blurry or pixelated", STREAM_REPORT_ENDED_LAGGING: "Stream was lagging or refreshing", STREAM_REPORT_ENDED_OUT_OF_SYNC: "Stream was out of sync with voice", STREAM_REPORT_ENDED_AUDIO_MISSING: "Application audio was absent", STREAM_REPORT_ENDED_AUDIO_POOR: "Application audio was low quality", STREAM_REPORT_ENDED_STREAM_STOPPED_UNEXPECTEDLY: "Stream stopped unexpectedly", STREAM_REPORT_SUBMIT: "Submit", STREAM_REPORTED: "Feedback Submitted", STREAM_REPORTED_BODY: "Thanks for reporting your issue! Feedback like yours helps us improve Screen Share.", MOBILE_STREAM_ACTIVE_HEADER: "You’re sharing your screen!", MOBILE_STREAM_ACTIVE_BODY: "You can switch to other apps for your friends to see.", MOBILE_STREAM_ACTIVE_SOUNDSHARE_WARNING_ANDROID: "Audio sharing is not supported on Android system version 9 or earlier.", MOBILE_STREAM_STOP_SHARING: "Stop sharing", MOBILE_STREAM_SCREEN_SHARE: "Screen Share", MOBILE_STREAM_SCREEN_SHARING: "Sharing screen", SCREEN_SHARE_NFX_TITLE: "Mobile Screen Share is here!", SCREEN_SHARE_NFX_BODY: "Watch videos, stream gameplay, or browse other apps together by sharing your screen with your friends.", SCREEN_SHARE_NFX_TRY: "Try it out!", SCREEN_SHARE_NFX_SKIP: "Skip for now", VOICE_CONTROLS_SHEET_TOOLTIP_SWIPE_UP: "Swipe up", MAIN_TAB_FEEDBACK_SHEET_TITLE: "How did it go?", MAIN_TAB_FEEDBACK_PROMPT: "Please tell us about your experience with the new app layout.", MAIN_TAB_FEEDBACK_ISSUE_SECTION_HEADER: "How can we improve?", MAIN_TAB_FEEDBACK_OPTION_BUG: "The app has a critical bug", MAIN_TAB_FEEDBACK_OPTION_PERFORMANCE: "The app feels slow", MAIN_TAB_FEEDBACK_OPTION_CRASH: "The app isn't working/crashes/is glitchy for me", MAIN_TAB_FEEDBACK_OPTION_MISSING_FEATURE: "I'm missing features I was using prior to the change", MAIN_TAB_FEEDBACK_OPTION_LAYOUT: "The layout feels overwhelming to look at", MAIN_TAB_FEEDBACK_OPTION_INFORMATION: "The app is showing me too much information I don't care about", MAIN_TAB_FEEDBACK_OPTION_VIBE: 'The "vibe" or aesthetics feel off to me', MAIN_TAB_FEEDBACK_OPTION_NAVIGATION: "I'm having issues navigating through the app", MAIN_TAB_FEEDBACK_OPTION_SERVERS: "The Servers Tab is confusing and difficult to navigate", MAIN_TAB_FEEDBACK_OPTION_SOCIAL: "Discord is emphasizing social features too much", MAIN_TAB_FEEDBACK_OPTION_NOTIFICATIONS: "Notifications are hard to manage", MAIN_TAB_FEEDBACK_OPTION_OTHER: "Other", CALL_FEEDBACK_SHEET_TITLE: "How'd the call go?", CALL_FEEDBACK_PROMPT: "Tell us about your call experience.", CALL_FEEDBACK_ISSUE_SECTION_HEADER: "Choose your main issue", CALL_FEEDBACK_OPTION_OTHER: "Other", CALL_FEEDBACK_OPTION_COULD_NOT_HEAR_AUDIO: "I couldn't hear audio at all", CALL_FEEDBACK_OPTION_NOBODY_COULD_HEAR_ME: "Nobody could hear me", CALL_FEEDBACK_OPTION_AUDIO_ECHOS: "Audio had echos or feedback", CALL_FEEDBACK_OPTION_AUDIO_ROBOTIC: "Audio was robotic or distorted", CALL_FEEDBACK_OPTION_AUDIO_CUT: "Audio cut in and out", CALL_FEEDBACK_OPTION_BAD_VOLUME: "Volume was too low or high", CALL_FEEDBACK_OPTION_BACKGROUND_NOISE: "Background noise was too loud", CALL_FEEDBACK_OPTION_SPEAKERPHONE: "Issues with speakerphone", CALL_FEEDBACK_OPTION_HEADSET: "Issues with headset/bluetooth", CALL_FEEDBACK_CONFIRMATION: "Thanks for the feedback!", CALL_FEEDBACK_SENTIMENT_NEGATIVE: "Negative", CALL_FEEDBACK_SENTIMENT_NEUTRAL: "Neutral", CALL_FEEDBACK_SENTIMENT_POSITIVE: "Positive", FEEDBACK_ISSUE_TITLE: "Your Issue", FEEDBACK_MODAL_TITLE: "Submit Feedback", FEEDBACK_DESCRIBE_ISSUE: "Describe your issue", FEEDBACK_NEED_MORE_HELP: "Need help with your issue? [Open a help request with our customer experience team.]({helpdeskURL})", SUMMARIES_FEEDBACK_MENU_ITEM_LABEL: "Give feedback", SUMMARIES_FEEDBACK_HEADER: "How was the summary?", SUMMARIES_FEEDBACK_BODY: "Tell us about the quality of the summary.", SUMMARIES_FEEDBACK_PROBLEM_TITLE: "Had an issue?", SUMMARIES_FEEDBACK_OPTION_DUPLICATED: "Duplicated", SUMMARIES_FEEDBACK_OPTION_TOO_GENERIC: "Too generic", SUMMARIES_FEEDBACK_OPTION_TOO_MANY: "Too many summaries for one conversation", SUMMARIES_FEEDBACK_OPTION_INACCURATE: "Inaccurately summarized the conversation", SUMMARIES_FEEDBACK_OPTION_NOT_USEFUL: "Summaries aren't useful in this channel", SUMMARIES_FEEDBACK_OPTION_OTHER: "Other", SUMMARIES_ACTIONS_CREATE_THREAD_FAILED: "Could not create thread", SUMMARIES_ACTIONS_NOTIFICATIONS_LABEL: "Notifications", SUMMARIES_ACITONS_SHARE_LABEL: "Share", SUMMARIES_ACITONS_SHARE_CONTENT: "Talking about !!{topic}!! - !!{url}!!", SUMMARIES_ACITONS_SHARE_FAILED: "Failed to share the conversation", SUMMARIES_NOTIFICATIONS_HEADER: "Highlight Notifications", SUMMARIES_NOTIFICATIONS_FOOTER: "Change this in [server settings](notifSettingsHook) at any time.", GENERIC_FEEDBACK_THANKS: "Thanks for your feedback!", SUMMARIES_DELETE_SUMMARY: "Delete Summary", INVITE_URL: "Invite URL", VANITY_URL_USES: "{uses, plural, =0 {0 uses} one {1 use} other {{uses} uses}}", REMOVE_VANITY_URL: "Remove Custom Invite Link", VANITY_URL_HEADER_USES: "Custom Invite Link ({uses, plural, =0 {0 uses} one {1 use} other {{uses} uses}})", VANITY_URL_HELP: "\nMake your server easily accessible with a fancy Custom Invite Link of your choosing.\nBe aware that this makes your server accessible to anyone who uses this link.\n", VANITY_URL_HELP_CONFLICT: "\nKeep in mind that we may take back Custom Invite Links if we discover abuse or if there's an intellectual property conflict.", VANITY_URL_HELP_EXTENDED: "This server is now accessible to everyone at **!!{url}!!**", VANITY_URL_HELP_EXTENDED_LINK: "This server is now accessible to everyone at [!!{urlText}!!]({urlValue})", CHANGE_VANITY_URL_ERROR: "\nCustom Invite Link could not be changed because it contains invalid characters, was too short, or is already taken.\nCustom Invite Links can only contain letters, numbers, or dashes.\n", VANITY_URL_HINT_MOBILE: "your-url-here", VANITY_URL_DEFAULT_CHANNEL: "Remember that Custom Invite Links require one text channel to be accessible to all members in order to work.", CUSTOM_INVITE_DEFAULT_CHANNEL: "Remember that Custom Invite Links require one text channel to be accessible to all members in order to work.", SET_VANITY_URL_ERROR_MESSAGE_UNKNOWN_CHANNEL: "You need to set a text channel that is accessible to all members before setting a Custom Invite Link.", SET_VANITY_URL_ERROR_MESSAGE_INVALID_PERMISSIONS: "You do not have access to this feature.", SET_VANITY_URL_ERROR_MESSAGE_INVALID_ACCESS: "Your server does not have access to this feature.", SET_VANITY_URL_ERROR_MESSAGE_REQUIRED_FOR_PUBLISHED_GUILDS: "You cannot clear your custom invite URL while your server web page is published.", SET_VANITY_URL_ERROR_MESSAGE_REQUIREMENTS_NOT_MET: "Custom Invite Link requires Server Boosting Level 3, or being a partnered, verified, HypeSquad event server", VANITY_URL_EMPLOYEE_ONLY_GUILD_DISABLED: "Can't set vanity url for an internal employee only server", GUILD_WEB_PAGE_VANITY_URL_CANNOT_BE_MODIFIED: "Servers with a published discovery landing page can only remove vanity URLs but cannot modify it", GROUP_DMS: "Group DMs", GROUP_NAME_PROMPT: "Group name (optional)", UNNAMED: "Unnamed", LEAVE_GROUP_DM_TITLE: "Leave '!!{name}!!'", LEAVE_GROUP_DM_MANAGED_TITLE: "Leave !!{name}!! Group", GROUP_DM_ALONE: "{name}'s Group", GROUP_DM_UPSELL_TEXT: "Just a few things before you add friends.", GROUP_DM_UPSELL_MSG_NOTICE: "People you add to this group can see the full message history.", GROUP_DM_UPSELL_LINK_NOTICE: "Shared links expire after 24 hours.", LEAVE_GROUP_DM_MANAGED_BODY: "\nAre you sure you want to leave? You won't be able to rejoin this group unless\n**!!{name}!!** adds you again.\n ", LEAVE_GROUP_DM_BODY: "\nAre you sure you want to leave **!!{name}!!**? You won't be able to rejoin this group unless you are re-invited.\n ", LEAVE_GROUP_DM: "Leave Group", LEAVE_GROUP_DM_ERROR: "Whoops, something went wrong. Give it another try?", LEAVE_GROUP_DM_SILENTLY: "Leave without notifying other members", LEAVE_GROUP_DM_SILENTLY_COMMAND_OPTION: "silent", REMOVE_ICON: "Remove Icon", REMOVE_FROM_GROUP: "Remove From Group", SEARCH_FRIENDS_A11Y_LABEL: "Search your friends", GROUP_DM_SEARCH_PLACEHOLDER: "Type the username of a friend", GROUP_DM_ADD_FRIENDS: "Add Friends to DM", GROUP_DM_ADD_MEMBERS: "Add Members", GROUP_DM_MEMBER_COUNT: "{members, number} Members", GROUP_DM_ADD_MEMBERS_COUNT: "{numMembers} of {maxMemberLimit} members", GROUP_DM_CREATE_MEMBERS_COUNT: "{numMembers} of {maxMemberLimit}", GROUP_DM_INVITE_WITH_NAME: "Invite friends to !!{groupname}!!", NEW_GROUP_DM: "New Group DM", NEW_GROUP_DM_CREATE_WITH: "Create a new group with !!{recipient}!!", NEW_GROUP: "New Group", GROUP_DM_HEADER: "Select Friends", CREATE_DM: "Create DM", CREATE_GROUP_DM: "Create Group DM", DM_SEND_MESSAGE: "Send a message", DM_NO_FRIENDS: "Add some friends to start chatting, playing games, and more!", GROUP_DM_INVITE_TO: "To:", GROUP_DM_INVITE_EMPTY: "No friends found that are not already in this DM.", GROUP_DM_INVITE_FULL_MAIN: "The party is full!", GROUP_DM_INVITE_FULL_SUB: "Groups have a 10 member limit.", GROUP_DM_INVITE_FULL_SUB2: "This group has a {number} member limit.", GROUP_DM_INVITE_WILL_FILL_MOBILE: "The selected users will fill the group.", GROUP_DM_INVITE_REMAINING: "{number, plural, one {You can add 1 more friend.} other {You can add {number} more friends.}}", GROUP_DM_INVITE_UNSELECT_USERS: "{number, plural, one {You must unselect 1 friend.} other {You must unselect {number} friends.}}", GROUP_DM_INVITE_NONE_REMAINING: "You can't add any more friends.", GROUP_DM_INVITE_NO_FRIENDS: "You don't have any friends to add!", GROUP_DM_INVITE_NOT_FRIENDS: "You need to be friends with **!!{username}!!** to start a group DM.", GROUP_DM_INVITE_CONFIRM: "Confirm New Group", GROUP_DM_INVITE_CONFIRM_BUTTON: "Create Group", GROUP_DM_INVITE_CONFIRM_DESCRIPTION: "You already have a group with these people! Are you sure you want to create a new one?", GROUP_DM_INVITE_SELECT_EXISTING: "Existing Groups", CALL: "Call", RING: "Ring", RING_USERNAME_A11Y_LABEL: "Ring !!{username}!!", STOP_RINGING: "Stop Ringing", STOP_RINGING_USERNAME_A11Y_LABEL: "Stop Ringing !!{username}!!", VOICE_STATUS_RINGING: "Ringing…", VOICE_STATUS_CONNECTING: "Connecting…", VOICE_STATUS_NOT_CONNECTED_MOBILE: "You are disconnected from this call.", VOICE_STATUS_NOT_CONNECTED: "Not Connected", IN_THE_VOICE_CHANNEL: "In the voice channel", CALL_INVITE_NOT_FRIENDS: "You need to be friends with **!!{username}!!** to start a call", START_CALL: "Start Call", JOIN_CALL: "Join Call", VOICE_CALL: "Voice Call", START_VOICE_CALL: "Start Voice Call", JOIN_VOICE_CALL: "Join Voice Call", JOIN_VOICE: "Join Voice", JOIN_MUTED: "Join Muted", VIDEO_CALL: "Video Call", START_VIDEO_CALL: "Start Video Call", JOIN_VIDEO_CALL: "Join Video Call", MISSED_CALL: "Missed Call", CALL_ENDED: "Call Ended", ONGOING_CALL: "Ongoing Call", ONGOING_CALL_YOU_ARE_ALL_ALONE: "You're alone in this call. \n Others in this chat can join at any time.", VIDEO_CALL_RETURN_TO_GRID: "Grid", VIDEO_CALL_RETURN_TO_LIST: "List", VIDEO_CALL_AUTO_SELECT: "Focus", VIDEO_CALL_SHOW_MEMBERS: "Show Members", VIDEO_CALL_HIDE_MEMBERS: "Hide Members", VIDEO_CALL_SHOW_CHAT: "Show Chat", VIDEO_CALL_HIDE_CHAT: "Hide Chat", VIDEO_CALL_VIEW_ALL_COUNT: "View all ({count})", CAMERA_UNAVAILABLE: "Camera Unavailable", CAMERA_DISABLED_LIMIT_REACHED: "Video chat isn't available for more than {limit, plural, one {# user} other {# users}}", CAMERA_DISABLED_STAGE_LIMIT_REACHED: "This Stage has reached its audience limit for Video Stages. To enable Video and Go Live, upgrade to the next Boost level.", CAMERA_DISABLED_STAGE_LIMIT_REACHED_MAX: "This Stage has reached its audience limit for Video Stages.", BROWSER_NOT_SUPPORTED: "Browser Not Supported", ANSWER: "Answer", DECLINE: "Decline", LEAVE_CALL: "Leave Call", NOT_NOW: "Not Now", FOCUS_PARTICIPANT: "Focus This Person", UNFOCUS_PARTICIPANT: "Unfocus This Person", GROUP_NAME: "Group Name", CUSTOMIZE_GROUP: "Customize Group", MUTE_GROUP_DM: "Mute **!!{name}!!**", REGION: "region", CALL_UNAVAILABLE: "Call Unavailable", CALL_UNAVAILABLE_BLOCKED_USERS: "You cannot call a user you have blocked", VOICE_UNAVAILABLE: "Voice Unavailable", VIDEO_UNAVAILABLE: "Video Unavailable", GROUPS: "Groups", CONTROL_VOLUME: "Control volume", CAMERA_ON: "Turn On Camera", CAMERA_OFF: "Turn Off Camera", CAMERA_SWITCH: "Switch Camera", ENABLE_CAMERA: "Enable Camera", FULL_SCREEN: "Full Screen", EXIT_FULL_SCREEN: "Exit Full Screen", SCREENSHARE_CHANGE_WINDOWS: "Change Windows", CAMERA_NO_DEVICE: "Uh oh, we can't detect any camera.", SCREENSHARE_UNAVAILABLE: "Screen Sharing Unavailable", SCREENSHARE_UNAVAILABLE_DOWNLOAD_APP: "Download the Discord Desktop app to use screen sharing!", GROUP_DM_INVITE_LINK_EXPIRE_24_HOURS: "Invite links expire in 24 hours", GROUP_DM_INVITE_LINK_MOBILE_TITLE: "Create and Share an invite link", GROUP_DM_INVITE_LINK_SHARE_MESSAGE: "Hey there! !!{username}!! invited you to join their group DM. Invite expires in 24 hours. !!{link}!!", GROUP_DM_CREATE_SHARE_LINK_WHEN_READY: "Share a link when you're ready", GROUP_DM_ADD_ERROR: "Whoops, something went wrong. Give it another try?", GROUP_DM_INVITE_LINK_TITLE: "Or, send an invite link to a friend!", GROUP_DM_INVITE_LINK_CREATE: "Create", GROUP_DM_INVITE_LINK_EXAMPLE: "example", INVITE_LINKS: "Invite Links", CURRENTLY_IN_VOICE_EMPTY: "No one is currently in voice.", CURRENTLY_IN_VOICE_1: "!!{a}!! is currently in voice.", CURRENTLY_IN_VOICE_2: "!!{a}!! and !!{b}!! are currently in voice.", CURRENTLY_IN_VOICE_2_N: "!!{a}!!, !!{b}!!, and {n, plural, one {1 other} other {{n} others}} are currently in voice.", CURRENTLY_IN_STAGE_EMPTY: "No one is currently speaking.", CURRENTLY_IN_STAGE_1: "!!{a}!! is currently speaking.", CURRENTLY_IN_STAGE_2: "!!{a}!! and !!{b}!! are currently speaking.", CURRENTLY_IN_STAGE_2_N: "!!{a}!!, !!{b}!!, and {n, plural, one {1 other} other {{n} others}} are currently speaking.", CURRENTLY_IN_VOICE_1_SHORT: "!!{a}!!", CURRENTLY_IN_VOICE_2_SHORT: "!!{a}!! and !!{b}!!", CURRENTLY_IN_VOICE_2_N_SHORT: "!!{a}!!, !!{b}!!, and {n, plural, one {1 other} other {{n} others}}", CAMERA_PREVIEW_MENU_ITEM: "Preview Camera", CAMERA_PREVIEW_ALWAYS_PREVIEW: "Always preview video", CAMERA_PREVIEW_ALWAYS_PREVIEW_NOTE: "Pops up preview modal every time you turn on video", CAMERA_CHANGE_VIDEO_BACKGROUND_MENU_ITEM: "Change Video Background", CAMERA_PREVIEW_MODAL_HEADER: "Ready to video chat?", CAMERA_PREVIEW_CAMERA: "Camera", CAMERA_PREVIEW_VIDEO_BACKGROUND: "Video Background", CAMERA_PREVIEW_VIDEO_BACKGROUND_NONE: "None", CAMERA_PREVIEW_VIDEO_BACKGROUND_BLUR: "Blur", CAMERA_PREVIEW_VIDEO_BACKGROUND_UPLOAD_TOOLTIP_PREMIUM: "Upload your own custom backgrounds with Nitro.", CAMERA_PREVIEW_VIDEO_BACKGROUND_UPLOAD_TOOLTIP_MAX_REACHED: "You’ve hit the limit of {maxCustomBackgrounds} backgrounds! Remove a background before adding another.", CAMERA_PREVIEW_VIDEO_BACKGROUND_UPSELL_TOOLTIP: "Get your own custom video backgrounds and more with Nitro!", CAMERA_PREVIEW_VIDEO_BACKGROUND_NEW_ANIMATED_TOOLTIP: "NEW! You can now choose a GIF or or upload a custom animated background with Nitro.", CAMERA_PREVIEW_VIDEO_BACKGROUND_CUSTOM: "Custom", CAMERA_PREVIEW_VIDEO_BACKGROUND_CHANGE_HEADER: "Change Video Background", CAMERA_PREVIEW_VIDEO_BACKGROUND_CHANGE_BACKGROUND: "Change Background", CAMERA_PREVIEW_MODAL_VIDEO_BACKGROUND_EDUCATION_SUBTITLE_2: "Express a mood or hide your messy room. Nitro subscribers can upload custom images.", CAMERA_PREVIEW_VIDEO_BACKGROUND_CUSTOM_TOOLTIP: "Custom Background", CAMERA_PREVIEW_VIDEO_BACKGROUND_UPLOAD_SUBTITLE: "File should be PNG, JPG, GIF, or MP4 (10 MB max)", VIDEO_BACKGROUND_ERROR_APPLY: "Uh oh! Something went wrong when setting your background. Please try again or use a different background.", VIDEO_BACKGROUND_ERROR_UPLOAD: "Uh oh! Something went wrong when uploading your background. Please try again or use a different image.", VIDEO_BACKGROUND_ERROR_UPLOAD_FILE_SIZE: "Uh oh! That file size was too large. Please use a different image under 10 MB.", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_1: "Cybercity", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_2: "Discord the Movie", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_3: "Wumpus Vacation", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_4: "Vaporwave", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_7: "Capernite Day", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_8: "Capernite Night", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_9: "Hacker Den", VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_10: "Wumpice", VIDEO_BACKGROUND_BIRTHDAY_BACKGROUND_NAME_1: "7th Birthday", VIDEO_BACKGROUND_CONTEXT_MENU_LABEL: "Video Background Actions", VIDEO_BACKGROUND_REMOVE: "Remove Background", VIDEO_BACKGROUND_CANNOT_REMOVE_DEFAULT: "Cannot remove default backgrounds", VIDEO_BACKGROUND_CANNOT_REMOVE_SELECTED: "Cannot remove currently selected background", VIDEO_BACKGROUND_UPSELL_TITLE: "Wanna upload your own background?", VIDEO_BACKGROUND_UPSELL_BODY: "Get more customization by uploading your own video background, custom global emoji, [and more with Discord Nitro!](onLearnMore)", VIDEO_BACKGROUND_UPSELL_BODY_TIER_0: "Get more customization by uploading your own video background, custom global emoji, [and more with Discord Nitro Basic!](onLearnMore)", VIDEO_BACKGROUND_FEEDBACK_HEADER: "How were video backgrounds?", VIDEO_BACKGROUND_FEEDBACK_BODY: "Tell us about your video backgrounds experience.", VIDEO_BACKGROUND_FEEDBACK_PROBLEM_TITLE: "Had an issue?", VIDEO_BACKGROUND_ISSUE_REPORTED_BODY: "Thanks for reporting your issue! Feedback like yours helps us improve Video Backgrounds", VIDEO_BACKGROUND_FEEDBACK_OPTION_BAD_OUTLINE: "The outline on my body was fuzzy or had a halo", VIDEO_BACKGROUND_FEEDBACK_OPTION_BACKGROUND_DETECTION_ACCURACY: "The background detection was not accurate", VIDEO_BACKGROUND_FEEDBACK_OPTION_FLICKERING: "I saw flickering objects on the screen", VIDEO_BACKGROUND_FEEDBACK_OPTION_BACKGROUND_DETECTION_LAG: "Background detection was laggy when I moved", MUTE_THEM: "Mute Them", UNMUTE_THEM: "Unmute Them", TURN_OFF_THEIR_VIDEO: "Turn Off Their Video", TURN_ON_THEIR_VIDEO: "Turn On Their Video", VIDEO_PAUSED: "Video paused", VIDEO_PAUSED_REASON: "Video paused due to unstable connection", UNSTABLE_CONNECTION: "Unstable Internet Connection", UNSTABLE_CONNECTION_REASON: "We paused {username}’s video to protect audio quality. We will turn it back on when your connection improves.", UNSTABLE_CONNECTION_REASON_2: "This video stream has been paused to ensure good audio quality. We'll turn it back on when the connection improves.", TURN_ON_VIDEO_ANYWAY: "Turn on video anyway", TURN_ON_VIDEOS_ANYWAY: "Turn on videos anyway", LEAVE_VIDEO_OFF: "Never mind", OVERLAY_FRIEND_CALLING: "!!{name}!! is calling you!", OVERLAY_UNLOCK_TO_ANSWER: "Unlock to answer $[!!{keybind}!!](keybindHook)", OVERLAY_UNLOCK_TO_JOIN: "Unlock to join $[!!{keybind}!!](keybindHook)", INCOMING_CALL: "Incoming Call", INCOMING_VIDEO_CALL: "Incoming Video Call", INCOMING_CALL_ELLIPSIS: "Incoming Call...", INCOMING_VIDEO_CALL_ELLIPSIS: "Incoming Video Call...", INCOMING_CALL_PREVIEW_CAMERA: "Preview my camera", SCREENSHARE_SCREEN: "Your Entire Screen", SCREENSHARE_SOURCE: "Source", SCREENSHARE_DESCRIPTION: "\nDiscord wants to share the contents of your screen with !!{name}!!.\n\nChoose which screen you'd like to share.\n ", SCREENSHARE_STREAM_QUALITY: "Stream Quality", SCREENSHARE_FRAME_RATE: "Frame Rate", SCREENSHARE_RELAUNCH: "Screen Share Problems", SCREENSHARE_RELAUNCH_BODY: "Our robots have gone wild and need to re-launch Discord to get screen share working again. Are you sure you want to do this?", SCREENSHARE_RESOLUTION_ABBREVIATED: "{resolution}p", SCREENSHARE_FPS_ABBREVIATED: "{fps}FPS", SCREENSHARE_QUALITY_TOOLTIP_NORMAL: "Streaming quality", SCREENSHARE_QUALITY_TOOLTIP_PREMIUM: "Nitro streaming quality", SCREENSHARE_QUALITY_TOOLTIP_REDUCED: "Experiencing reduced quality", SCREENSHARE_STREAM_GIFTING_HEADER: "Give the gift of HD streaming", SCREENSHARE_STREAM_GIFTING_BODY: "Help a buddy out (and their viewers too!) by gifting higher stream quality.", SCREENSHARE_STREAM_GIFTING_DISMISS: "Dismiss", SCREENSHARE_STREAM_GIFTING_CTA: "Gift Nitro", SYSTEM_MESSAGE_RECIPIENT_ADD_HOOK: "$[!!{username}!!](usernameHook) added $[!!{otherUsername}!!](otherUsernameHook) to the group.", SYSTEM_MESSAGE_RECIPIENT_ADD: "[!!{username}!!](usernameOnClick) added [!!{otherUsername}!!](otherUsernameOnClick) to the group.", SYSTEM_MESSAGE_RECIPIENT_REMOVE_HOOK: "$[!!{username}!!](usernameHook) removed $[!!{otherUsername}!!](otherUsernameHook) from the group.", SYSTEM_MESSAGE_RECIPIENT_REMOVE: "[!!{username}!!](usernameOnClick) removed [!!{otherUsername}!!](otherUsernameOnClick) from the group.", SYSTEM_MESSAGE_RECIPIENT_REMOVE_SELF_HOOK: "$[!!{username}!!](usernameHook) left the group.", SYSTEM_MESSAGE_RECIPIENT_REMOVE_SELF: "[!!{username}!!](usernameOnClick) left the group.", SYSTEM_MESSAGE_CHANNEL_NAME_CHANGE: "[!!{username}!!](usernameOnClick) changed the channel name: **!!{channelName}!!**", SYSTEM_MESSAGE_CHANNEL_NAME_CHANGE2: "$[!!{username}!!](usernameHook) changed the channel name: **!!{channelName}!!**", SYSTEM_MESSAGE_FORUM_POST_TITLE_CHANGE: "[!!{username}!!](usernameOnClick) changed the post title: **!!{channelName}!!**", SYSTEM_MESSAGE_FORUM_POST_TITLE_CHANGE2: "$[!!{username}!!](usernameHook) changed the post title: **!!{channelName}!!**", SYSTEM_MESSAGE_CHANNEL_ICON_CHANGE_HOOK: "$[!!{username}!!](usernameHook) changed the group icon.", SYSTEM_MESSAGE_CHANNEL_ICON_CHANGE: "[!!{username}!!](usernameOnClick) changed the group icon.", SYSTEM_MESSAGE_CALL_STARTED_HOOK: "$[!!{username}!!](usernameHook) started a call.", SYSTEM_MESSAGE_CALL_STARTED: "[!!{username}!!](usernameOnClick) started a call.", SYSTEM_MESSAGE_CALL_STARTED_WITH_DURATION_HOOK: "$[!!{username}!!](usernameHook) started a call that lasted !!{callDuration}!!.", SYSTEM_MESSAGE_CALL_MISSED_HOOK: "You missed a call from $[!!{username}!!](usernameHook).", SYSTEM_MESSAGE_CALL_MISSED_WITH_DURATION_HOOK: "You missed a call from $[!!{username}!!](usernameHook) that lasted !!{callDuration}!!.", SYSTEM_MESSAGE_JOIN_CALL: "Join the call", SYSTEM_MESSAGE_PINNED_MESSAGE_NO_CTA: "[!!{username}!!](usernameOnClick) pinned a message to this channel.", SYSTEM_MESSAGE_PINNED_MESSAGE_NO_CTA_FORMATTED_HOOK: "$[!!{username}!!](usernameHook) pinned a message to this channel.", SYSTEM_MESSAGE_PINNED_MESSAGE_NO_CTA_FORMATTED_WITH_MESSAGE_HOOK: "$[!!{username}!!](usernameHook) pinned [a message](messageOnClick) to this channel.", SYSTEM_MESSAGE_PINNED_MESSAGE: "$[!!{username}!!](usernameHook) pinned a message to this channel. See all [pinned messages](pinsActionOnClick).", SYSTEM_MESSAGE_PINNED_MESSAGE_WITH_MESSAGE: "$[!!{username}!!](usernameHook) pinned [a message](messageOnClick) to this channel. See all [pinned messages](pinsActionOnClick).", SYSTEM_MESSAGE_PINNED_MESSAGE_MOBILE: "[!!{username}!!](usernameOnClick) pinned a message to this channel. See all [pinned messages](pinsOnClick).", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED_HOOK: "$[!!{username}!!](usernameHook) just boosted the server!", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED: "[!!{username}!!](usernameOnClick) just boosted the server!", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED_ACHIEVED_TIER_HOOK: "$[!!{username}!!](usernameHook) just boosted the server! !!{guildName}!! has achieved **{newTierName}!**", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED_ACHIEVED_TIER: "[!!{username}!!](usernameOnClick) just boosted the server! !!{guildName}!! has achieved **{newTierName}!**", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED_MANY_HOOK: "$[!!{username}!!](usernameHook) just boosted the server **{numSubscriptions}** times!", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED_MANY: "[!!{username}!!](usernameOnClick) just boosted the server **{numSubscriptions}** times!", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED_MANY_ACHIEVED_TIER_HOOK: "$[!!{username}!!](usernameHook) just boosted the server **{numSubscriptions}** times! !!{guildName}!! has achieved **{newTierName}!**", SYSTEM_MESSAGE_GUILD_MEMBER_SUBSCRIBED_MANY_ACHIEVED_TIER: "[!!{username}!!](usernameOnClick) just boosted the server **{numSubscriptions}** times! !!{guildName}!! has achieved **{newTierName}!**", SYSTEM_MESSAGE_CHANNEL_FOLLOW_ADD: "[!!{username}!!](usernameOnClick) has added **$[!!{webhookName}!!](webhookNameHook)** to this channel. Its most important updates will show up here.", SYSTEM_MESSAGE_CHANNEL_FOLLOW_ADD_HOOK: "$[!!{username}!!](usernameHook) has added **$[!!{webhookName}!!](webhookNameHook)** to this channel. Its most important updates will show up here.", SYSTEM_MESSAGE_CHANNEL_FOLLOW_ADD_IOS: "[!!{username}!!](usernameOnClick) has added **[!!{webhookName}!!](webhookNameOnClick)** to this channel. Its most important updates will show up here.", SOURCE_MESSAGE_DELETED: "[Original Message Deleted]", SYSTEM_MESSAGE_GUILD_DISCOVERY_DISQUALIFIED: "This server has been removed from Server Discovery because it no longer passes all the requirements. Check [Server Settings](onClick) for more details.", SYSTEM_MESSAGE_GUILD_DISCOVERY_DISQUALIFIED_MOBILE: "This server has been removed from Server Discovery because it no longer passes all the requirements. Check Server Settings on desktop for more details.", SYSTEM_MESSAGE_GUILD_DISCOVERY_REQUALIFIED: "This server is eligible for Server Discovery again and has been automatically relisted!", SYSTEM_MESSAGE_GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING: "This server has failed Discovery activity requirements for 1 week. If this server fails for 4 weeks in a row, it will be automatically removed from Discovery.", SYSTEM_MESSAGE_GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING: "This server has failed Discovery activity requirements for 3 weeks in a row. If this server fails for 1 more week, it will be removed from Discovery.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_001_HOOK: "$[!!{username}!!](usernameHook) joined the party.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_002_HOOK: "$[!!{username}!!](usernameHook) is here.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_003_HOOK: "Welcome, $[!!{username}!!](usernameHook). We hope you brought pizza.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_004_HOOK: "A wild $[!!{username}!!](usernameHook) appeared.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_005_HOOK: "$[!!{username}!!](usernameHook) just landed.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_006_HOOK: "$[!!{username}!!](usernameHook) just slid into the server.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_007_HOOK: "$[!!{username}!!](usernameHook) just showed up!", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_008_HOOK: "Welcome $[!!{username}!!](usernameHook). Say hi!", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_009_HOOK: "$[!!{username}!!](usernameHook) hopped into the server.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_010_HOOK: "Everyone welcome $[!!{username}!!](usernameHook)!", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_011_HOOK: "Glad you're here, $[!!{username}!!](usernameHook).", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_012_HOOK: "Good to see you, $[!!{username}!!](usernameHook).", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_013_HOOK: "Yay you made it, $[!!{username}!!](usernameHook)!", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_001: "[!!{username}!!](usernameOnClick) joined the party.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_002: "[!!{username}!!](usernameOnClick) is here.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_003: "Welcome, [!!{username}!!](usernameOnClick). We hope you brought pizza.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_004: "A wild [!!{username}!!](usernameOnClick) appeared.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_005: "[!!{username}!!](usernameOnClick) just landed.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_006: "[!!{username}!!](usernameOnClick) just slid into the server.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_007: "[!!{username}!!](usernameOnClick) just showed up!", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_008: "Welcome [!!{username}!!](usernameOnClick). Say hi!", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_009: "[!!{username}!!](usernameOnClick) hopped into the server.", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_010: "Everyone welcome [!!{username}!!](usernameOnClick)!", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_011: "Glad you're here, [!!{username}!!](usernameOnClick).", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_012: "Good to see you, [!!{username}!!](usernameOnClick).", SYSTEM_MESSAGE_GUILD_MEMBER_JOIN_013: "Yay you made it, [!!{username}!!](usernameOnClick)!", SYSTEM_MESSAGE_GUILD_BOT_JOIN: "[Learn how to use this bot.](learnOnClick)", SYSTEM_MESSAGE_APPLICATION_COMMAND_USED_HOOK: "$[!!{username}!!](usernameHook) used $[](commandNameHook) with $[](applicationNameHook)", SYSTEM_MESSAGE_APPLICATION_COMMAND_USED_MOBILE: "[!!{username}!!](usernameOnClick) used **!!{commandName}!!** with **!!{applicationName}!!**", SYSTEM_MESSAGE_APPLICATION_COMMAND_USED_SHORT_MOBILE: "[!!{username}!!](usernameOnClick) used **[!!{commandName}!!](commandNameOnClick)**", SYSTEM_MESSAGE_APPLICATION_COMMAND_REPLY: "used **[!!{commandName}!!](commandNameOnClick)**", SYSTEM_MESSAGE_APPLICATION_COMMAND_USED_AS_TITLE: "[!!{username}!!](usernameOnClick) used **[!!{commandName}!!](commandName)** with", SYSTEM_MESSAGE_STAGE_START_HOOK: "$[!!{username}!!](usernameHook) started **!!{topic}!!**", SYSTEM_MESSAGE_STAGE_START_MOBILE: "[!!{username}!!](usernameOnClick) started **!!{topic}!!**", SYSTEM_MESSAGE_STAGE_END_HOOK: "$[!!{username}!!](usernameHook) ended **!!{topic}!!**", SYSTEM_MESSAGE_STAGE_END_MOBILE: "[!!{username}!!](usernameOnClick) ended **!!{topic}!!**", SYSTEM_MESSAGE_STAGE_SPEAKER_HOOK: "$[!!{username}!!](usernameHook) is now a speaker.", SYSTEM_MESSAGE_STAGE_SPEAKER_MOBILE: "[!!{username}!!](usernameOnClick) is now a speaker.", SYSTEM_MESSAGE_STAGE_RAISE_HAND_HOOK: "$[!!{username}!!](usernameHook) requested to speak.", SYSTEM_MESSAGE_STAGE_RAISE_HAND_MOBILE: "[!!{username}!!](usernameOnClick) requested to speak.", SYSTEM_MESSAGE_STAGE_TOPIC_HOOK: "$[!!{username}!!](usernameHook) changed the Stage topic: **!!{topic}!!**", SYSTEM_MESSAGE_STAGE_TOPIC_MOBILE: "[!!{username}!!](usernameOnClick) changed the Stage topic: **!!{topic}!!**", STAGE_SYSTEM_MESSAGE_MODERATOR_VISIBILITY_MESSAGE: "Only Stage moderators can see this • [Dismiss message](handleDelete)", SYSTEM_MESSAGE_GET_GAMING_STATS: "Get my stats!", SYSTEM_MESSAGE_POLL_RESULT_MOBILE: "Poll results are in: [!!{title}!!](titleOnClick)", SYSTEM_MESSAGE_POLL_RESULT_WINNER_MOBILE: "The poll [!!{title}!!](titleOnClick) has closed! The winner was $[](answerHook) ({percentage})", SYSTEM_MESSAGE_POLL_RESULT_NO_VOTERS_MOBILE: "The poll [!!{title}!!](titleOnClick) has closed! There was no winner $[](sadEmojiHook).", SYSTEM_MESSAGE_POLL_RESULT_TIED_MOBILE: "The poll [!!{title}!!](titleOnClick) has closed! The results were tied ({percentage}).", ACCEPT_INVITE_MODAL_BUTTON: "Accept Invite", ACCEPT_INVITE_MODAL_BUTTON_WITH_USERNAME: "Accept as $[](usernameHook)", INVITE_MODAL_BUTTON: "Join **!!{guildName}!!**", INIVTE_MODAL_NO_THANKS: "No Thanks", INVITE_MODAL_ERROR_TITLE: "Whoops...", INVITE_MODAL_ERROR_INVALID_TITLE: "The invite link is invalid or has expired.", INVITE_MODAL_ERROR_INVALID_BODY: "Try using a different link to join this server.", INVITE_MODAL_ERROR_BUTTON_TEXT: "Got it", INVITE_MODAL_ERROR_DEFAULT: "Unable to accept invite", INVALID_COUNTRY_CODE: "This server is not available in your location.", INVALID_CANNOT_FRIEND_SELF: "You cannot friend yourself", INVITES_DISABLED_MODAL_TITLE: "Invites Paused", INVITES_DISABLED_MODAL_DESCRIPTION: "Invites are currently paused for this server. Please try again later. [Learn More]({articleLink})", INVITES_DISABLED_TOOLTIP: "Invites paused for this server", INVITES_DISABLED_CONFIRMATION: "Got it", INVITES_DISABLED_EMBED_HEADER: "Server invite paused... what the", INVITES_DISABLED_EMBED_TITLE: "Invites Paused", INVITES_DISABLED_EMBED_DESCRIPTION: "Invites are currently paused for", INVITES_DISABLED_ARTICLE_LABEL: "Learn More", INVITES_DISABLED_GUILD_NAME_DEFAULT: "this server", DISABLE_EMAIL_NOTIFICATIONS: "Success! We've disabled e-mail notifications for you!", KEYBIND_CONFLICT: "This conflicts with a built-in shortcut. We have disabled the built-in shortcut.", KEYBIND_NAVIGATION_CONFLICT: "This key is used for [keyboard navigation]({keyboardNavArticle}). It will no longer activate Keyboard Mode.", KEYBIND_DESCRIPTION_MODAL_TITLE: "Keyboard Combos", KEYBIND_DESCRIPTION_MODAL_SUBTITLE: "Master these to be the greatest Discord Discord Revolution player", KEYBIND_DESCRIPTION_MODAL_NAVIGATE_SERVERS: "Navigate between servers", KEYBIND_DESCRIPTION_MODAL_MARK_SERVER_READ: "Mark server read", KEYBIND_DESCRIPTION_MODAL_NAVIGATE_CHANNELS: "Navigate between channels", KEYBIND_DESCRIPTION_MODAL_UNREAD_CHANNELS: "Navigate between unread channels", KEYBIND_DESCRIPTION_MODAL_UNREAD_MENTION_CHANNELS: "Navigate between unread channels with mentions", KEYBIND_DESCRIPTION_MODAL_NAVIGATE_BACK_FORWARD: "Navigate forward and backward in page history", KEYBIND_DESCRIPTION_MODAL_NAVIGATE_TO_CALL: "Navigate to current call", KEYBIND_DESCRIPTION_MODAL_JUMP_TO_FIRST_UNREAD: "Jump to oldest unread message", KEYBIND_DESCRIPTION_MODAL_MARK_CHANNEL_READ: "Mark channel as read", KEYBIND_DESCRIPTION_MODAL_TOGGLE_PREVIOUS_GUILD: "Toggle between last server and DMs", KEYBIND_DESCRIPTION_MODAL_CREATE_GUILD: "Create or join a server", KEYBIND_DESCRIPTION_MODAL_QUICKSWITCHER: "Toggle QuickSwitcher", KEYBIND_DESCRIPTION_MODAL_CREATE_DM_GROUP: "Create a private group", KEYBIND_DESCRIPTION_MODAL_TOGGLE_PINS: "Toggle pins popout", KEYBIND_DESCRIPTION_MODAL_TOGGLE_INBOX: "Toggle inbox popout", KEYBIND_DESCRIPTION_MODAL_MARK_TOP_INBOX_CHANNEL_READ: "Mark top inbox channel read", KEYBIND_DESCRIPTION_MODAL_TOGGLE_USERS: "Toggle channel member list or voice text chat", KEYBIND_DESCRIPTION_MODAL_TOGGLE_MUTE: "Toggle mute", KEYBIND_DESCRIPTION_MODAL_TOGGLE_DEAFEN: "Toggle deafen", KEYBIND_DESCRIPTION_MODAL_CALL_ACCEPT: "Answer incoming call", KEYBIND_DESCRIPTION_MODAL_CALL_DECLINE: "Decline incoming call", KEYBIND_DESCRIPTION_MODAL_CALL_START: "Start call in private message or group", KEYBIND_DESCRIPTION_MODAL_SCROLL_CHAT: "Scroll chat up or down", KEYBIND_DESCRIPTION_MODAL_FOCUS_TEXT_AREA: "Focus text area", KEYBIND_DESCRIPTION_MODAL_UPLOAD_FILE: "Upload a file", KEYBIND_DESCRIPTION_MODAL_SEARCH_EMOJIS: "Toggle emoji picker", KEYBIND_DESCRIPTION_MODAL_SEARCH_GIFS: "Toggle GIF picker", KEYBIND_DESCRIPTION_MODAL_SEARCH_STICKERS: "Toggle sticker picker", KEYBIND_DESCRIPTION_MODAL_SEARCH_SOUNDBOARD: "Toggle soundboard", KEYBIND_DESCRIPTION_MODAL_TOGGLE_HELP: "Get help", KEYBIND_DESCRIPTION_MODAL_EASTER_EGG: "Raging Demon", KEYBIND_DESCRIPTION_MODAL_SEARCH: "Search", INVITE_STREAM_HEADER: "Invite to Stream", INVITE_SHARE_LINK_TO_STREAM: "Share this link with others to grant access to this server and watch the stream", INVITE_STREAM_FOOTER_LINK_HEADER: "Or, send a stream invite link to a friend", INVITE_SEARCH_FOR_FRIENDS: "Search for friends", INVITE_FOOTER_LINK_HEADER: "Or, send a server invite link to a friend", INVITE_SHARE_LINK_OWN_SERVER: "Share this link with others to grant access to your server!", INVITE_COPIED: "Copied", INVITE_SETTINGS_TITLE: "Server invite link settings", INVITE_EXPIRES_MINUTES: "Your invite link expires in 30 minutes.", INVITE_EXPIRES_MINUTES_OR_USES: "Your invite link expires in 30 minutes, or after {numUses, plural, =1 {{numUses} use} other {{numUses} uses}}.", INVITE_EXPIRES_HOURS: "Your invite link expires in {numHours, plural, =1 {{numHours} hour} other {{numHours} hours}}.", INVITE_EXPIRES_HOURS_OR_USES: "Your invite link expires in {numHours, plural, =1 {{numHours} hour} other {{numHours} hours}}, or after {numUses, plural, =1 {{numUses} use} other {{numUses} uses}}.", INVITE_EXPIRES_DAYS_PLURAL: "Your invite link expires in {numDays, plural, =1 {{numDays} day} other {{numDays} days}}.", INVITE_EXPIRES_DAYS_OR_USES_PLURAL: "Your invite link expires in {numDays, plural, =1 {{numDays} day} other {{numDays} days}}, or after {numUses, plural, =1 {{numUses} use} other {{numUses} uses}}.", INVITE_EXPIRES_USES: "Your invite link expires after {numUses, plural, =1 {{numUses} use} other {{numUses} uses}}.", INVITE_EXPIRES_NEVER: "Your invite link will never expire.", INVITE_VANITY_USED: "Using this server's custom invite link.", INVITE_EDIT_LINK: "Edit invite link.", INVITE_WELCOME_HEADING: "Welcome to your new server!", INVITE_WELCOME_SUBHEADING: "Let's start by inviting your friends", INVITE_YOUR_FRIENDS_HEADER_MOBILE: "Your Friends", INVITE_YOUR_FRIENDS_CHANNEL_MOBILE: "Invite friends to {channelName}", INVITE_COPY_INVITE_LINK_HEADER_MOBILE: "Copy Invite Link", INVITE_EXPIRED_SUBTEXT_MOBILE: " • expires in !!{maxAge}!!", INVITE_PRIVATE_CALL_HEADS_UP: "Heads up! Friends you invite can see your previous message history.", INVITE_EMPTY_BODY: "Share this link with friends and they'll automatically join your server.", INVITE_EMPTY_TITLE: "Invite a friend to your server!", INVITE_A_FRIEND: "Invite a friend", LINK_COPIED: "Link Copied!", INVITE_NOTICE_MESSAGE: "An adventure begins.", INVITE_NOTICE_MESSAGE_PART_2: "Let's add some friends!", INVITE_PEOPLE: "Invite People", INVITE_FRIENDS: "Invite Friends", SHARE_INVITE_LINK_FOR_ACCESS: "Share this link with others to grant access to this server", SHARE_INVITE_MOBILE: "Share {inviteUrl}", INVITE_LINK_COPIED: "Invite copied!", INVITE_LINKS_EXPIRE_AFTER_DEFAULT: "Invite links expire every {days} by default", SET_INVITE_LINK_NEVER_EXPIRE: "Set this link to never expire", LINK_SETTINGS: "Link Settings", GENERATE_A_NEW_LINK: "Generate a New Link", CREATE_LINK: "Create Link", HOW_TO_INVITE_OTHERS: 'Hello. Beep. Boop. If you wanna invite friends to this server, click the server name in the top left and select "!!{invitePeople}!!". Beep!', GRANT_TEMPORARY_MEMBERSHIP: "Grant temporary membership", TEMPORARY_MEMBERSHIP_EXPLANATION: "Temporary members are automatically kicked when they disconnect unless a role\n has been assigned", MAX_NUMBER_OF_USES: "Max Number of Uses", EXPIRE_AFTER: "Expire After", ONLY_YOU_CAN_SEE_AND_DELETE_THESE: "Only you can see {count, plural, one {this} other {these}} • [Dismiss {countMessages, plural, one {message} other {messages}}](handleDelete)", NEW: "new", UPDATED: "updated", NEW_MENTIONS: "New Mentions", NEW_UNREADS: "New Unreads", MENTIONS_COUNT: "{count} mentions", NEW_MENTIONS_COUNT: "{count, plural, =1 {1 New Mention} other {{count} New Mentions}}", FILTER_OPTIONS: "Filter Options", FILTER_MENTIONS: "Filter Mentions", SERVER_OPTIONS: "Server Options", INVALID_ANIMATED_EMOJI_BODY: "This emoji doesn't work because it's animated. Upgrade to Discord Nitro to fulfill all your animated emoji dreams", INVALID_ANIMATED_EMOJI_BODY_UPGRADE: "This emoji doesn't work because it's animated. Discord Nitro can solve all of that, check User Settings > Nitro for details", INVALID_EXTERNAL_EMOJI_BODY: "This emoji doesn't work here because it's from a different server. Upgrade to Discord Nitro to use emoji from other servers", INVALID_EXTERNAL_EMOJI_BODY_UPGRADE: "This emoji doesn't work here because it's from a different server. Discord Nitro can solve all of that, check User Settings > Nitro for details", REACTION_PICKER: "Reaction Picker", ADD_REACTION: "Add Reaction", REACT: "React", SUPER_REACT: "Super React", BURST_REACTION_ADD_UNLIMITED_SUCCESS_A11Y: "{name} super reaction successfully added.", BURST_REACTION_ADD_UNLIMITED_ERROR_A11Y: "{name} super reaction could not be added.", BURST_REACTION_REMOVE_SUCCESS_A11Y: "{name} super reaction successfully removed.", BURST_REACTION_REMOVE_ERROR_A11Y: "{name} super reaction could not be removed.", SUPER_REACTIONS_FIRST_SEND_HEADER: "Time to celebrate!", SUPER_REACTIONS_FIRST_SEND_BODY_V2: "You sent your first Super Reaction on mobile. Keep the hype coming, friend!", SUPER_REACTIONS_FIRST_SEND_BODY: "You sent your first Super Reaction! You’ll get {refillAmount} more Super Reactions each week with Nitro. Enjoy!", SUPER_REACTIONS_FIRST_SEND_BODY_DAILY: "You sent your first Super Reaction! You’ll get {refillAmount} more Super Reactions each day with Nitro. Enjoy!", SUPER_REACTIONS_EMOJI_PICKER_UPSELL: "NEW! Hype up the chat with Super Reactions.", SUPER_REACTIONS_LAUNCH_EMOJI_PICKER_UPSELL_NITRO: "NEW! Hype up the chat with Super Reactions. You’ll get {refillAmount} more each week with Nitro", SUPER_REACTIONS_LAUNCH_EMOJI_PICKER_UPSELL_NITRO_DAILY: "NEW! Hype up the chat with Super Reactions. You’ll get {refillAmount} per day with Nitro", SUPER_REACTIONS_LAUNCH_EMOJI_PICKER_UPSELL_FREE: "NEW! Hype up the chat with Super Reactions. Try it out with 2 free reactions.", SUPER_REACTIONS_LAUNCH_EMOJI_PICKER_UPSELL: "Hype up the chat with Super Reactions. Get more each week with [Nitro](onClick).", SUPER_REACTIONS_LAUNCH_EMOJI_PICKER_DAILY_UPSELL: "Hype up the chat with Super Reactions. Get more each day with [Nitro](onClick).", SUPER_REACTIONS_MOBILE_DISMISS_MESSAGE: "Tap anywhere to close", SUPER_REACTION_OUT_OF_BURSTS: "Looks like you’re out of Super Reactions", SUPER_REACTIONS_OUT_OF_BURST_GOT_IT: "Got it!", SUPER_REACTIONS_OUT_OF_BURSTS_SIMPLE: "But don’t worry! You’ll get more Super Reactions in {n, plural, =1 {1 day} other {{n} days}}.", SUPER_REACTIONS_OUT_OF_BURSTS_SIMPLE_SOON: "But don’t worry! You’ll get more Super Reactions later today.", SUPER_REACTIONS_OUT_OF_BURSTS_DAILY_SIMPLE_SOON: "But don’t worry! You’ll get more Super Reactions tomorrow.", SUPER_REACTIONS_REFILL_COUNTDOWN: "You’ll get {refillAmount} more Super Reactions in {n, plural, =1 {1 day} other {{n} days}}.", SUPER_REACTIONS_REFILL_SOON: "You’ll get {refillAmount} more Super Reactions later today.", SUPER_REACTIONS_TAB_TOOLTIP: "You’re out of Super Reactions. You’ll get more in {n, plural, =1 {1 day} other {{n} days}}!", SUPER_REACTIONS_TAB_TOOLTIP_AMOUNT: "You have {count, plural, =1 {1 Super Reaction} other {{count} Super Reactions}}. You’ll get {refillAmount} more in {n, plural, =1 {1 day} other {{n} days}}.", SUPER_REACTIONS_TAB_TOOLTIP_AMOUNT_SOON: "You have {count, plural, =1 {1 Super Reaction} other {{count} Super Reactions}}. You’ll get {refillAmount} more later today.", SUPER_REACTIONS_TAB_TOOLTIP_SOON: "You’ll get more Super Reactions later today.", SUPER_REACTIONS_TOOLTIP_COACHMARK_TITLE: "NEW! Super Reactions", SUPER_REACTIONS_TOOLTIP_COACHMARK: "A better way to react, now available with [Nitro]({nitroLink}).", SUPER_REACTION_COACHMARK_DESCRIPTION: "Hype up the chat with Super Reactions [[Beta]]({helpdeskArticle}). Now available with Nitro.", SUPER_REACTION_COACHMARK_DESCRIPTION_FREE: "Hype up the chat and get a taste of our newest Nitro-exclusive perk: Super Reactions.", SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION: "Hype up the chat with Super Reactions. Now available with [Nitro]({nitroLink}).", SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_CLICK: "Hype up the chat with Super Reactions. Now available with [Nitro](onClick).", SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_CLICK_V2: "Hype up the chat with Super Reactions. Now available with [{planName}](onClick).", SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_UNLIMITED: "Hype up the chat with unlimited Super Reactions. Now available with [{planName}](onClick).", SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_UNLIMITED_V2: "Hype up the chat with unlimited Super Reactions! Now available with Nitro.", SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_UNLIMITED_V2_A: "Hype up the chat with unlimited Super Reactions!", SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_UNLIMITED_V2_B: "Now available with Nitro.", SUPER_REACTIONS_LAUNCH_COACHMARK_NITRO_DESCRIPTION: "Hype up the chat with Super Reactions. Get {refillAmount} per week, available with [Nitro]({nitroLink}).", SUPER_REACTIONS_LAUNCH_COACHMARK_NITRO_DESCRIPTION_DAILY: "Hype up the chat with Super Reactions. Get {refillAmount} per day, available with [Nitro]({nitroLink}).", SUPER_REACTIONS_LAUNCH_COACHMARK_NITRO_LINK: "Hype up the chat with Super Reactions. Get {refillAmount} per week, now with [Nitro](onClick).", SUPER_REACTIONS_LAUNCH_COACHMARK_NITRO_LINK_DAILY: "Hype up the chat with Super Reactions. Get {refillAmount} per day, now with [Nitro](onClick).", SUPER_REACTIONS_LAUNCH_COACHMARK_NITRO: "Hype up the chat with Super Reactions. Get {refillAmount} per week, now with Nitro.", SUPER_REACTIONS_LAUNCH_COACHMARK_NITRO_DAILY: "Hype up the chat with Super Reactions. Get {refillAmount} per day, now with Nitro.", SUPER_REACTION_COACHMARK_DESCRIPTION_MOBILE: "Hype up the chat with Super Reactions $[[Beta]](betaHook). Now available with Nitro.", SUPER_REACTIONS_CONGRATS_HEADER: "Congratulations!", SUPER_REACTIONS_CONGRATS_DESCRIPTION: "You just sent your first Super Reaction. Get weekly Super Reactions with [Nitro](onClick)", SUPER_REACTIONS_CONGRATS_DESCRIPTION_DAILY: "You just sent your first Super Reaction. Get daily Super Reactions with [Nitro](onClick)", SUPER_REACTIONS_REMINDER_COACHMARK_TITLE: "Ready to bring the hype?", SUPER_REACTIONS_REMINDER_COACHMARK_DESCRIPTION: "Celebrate your favorite posts and pump up your friends with Super Reactions.", SUPER_REACTIONS_REMINDER_COACHMARK_NITRO_DESCRIPTION: "Use Super Reactions to emphasize your reaction with a fun animation.", SUPER_REACTION_COACHMARK_NITRO_DESCRIPTION: "Hype up the chat with Super Reactions [[Beta]]({helpdeskArticle}). Get {refillAmount} per week, now with {premiumTier}.", SUPER_REACTION_COACHMARK_NITRO_DESCRIPTION_MOBILE: "Hype up the chat with Super Reactions $[[Beta]](betaHook). Get {refillAmount} per week, now with {premiumTier}.", SUPER_REACTIONS_BANNER_TITLE: "A new way to react", SUPER_REACTIONS_BANNER_DESCRIPTION: "Hype up the chat with Super Reactions. Now available to all Nitro members.", REACTION_ADD_SUCCESS_A11Y: "{name} reaction successfully added", REACTION_ADD_ERROR_A11Y: "{name} reaction could not be added", REACTION_REMOVE_SUCCESS_A11Y: "{name} reaction successfully removed", REACTION_REMOVE_ERROR_A11Y: "{name} reaction could not be removed", ADD_BURST_REACTION: "Add Super Reaction", REACTION_REACTORS_A11Y: "{name} {n, plural, =1 {1 reaction} other {{n} reactions}}", BURST_REACTION_REACTORS_A11Y: "{name} {n, plural, =1 {1 super reaction} other {{n} super reactions}}", BURST_REACTIONS_LEFT: "{count} left", BURST_REACTIONS_REMOVE_MODAL_TITLE: "Are you sure?", BURST_REACTIONS_REMOVE_MODAL_DESCRIPTION: "You will not get a credit refund if you choose to remove this Super Reaction.", BURST_REACTIONS_REMOVE_MODAL_CONFIRM: "Remove Super Reaction", BURST_REACTIONS_REMOVE_MODAL_CANCEL: "Cancel", BURST_MOBILE_NOT_READY_IMG_ALT: "Wumpus waving", BURST_MOBILE_NOT_READY_TITLE: "Super Reactions", SUPER_MOBILE_NOT_READY_SUBTITLE: "The ability to add Super Reactions is only on desktop for now. Use the desktop app to send and view these special animated reactions.", REACT_WITH_COUNT_A11Y_LABEL: "!!{emojiName}!!{reactions, plural, =1 {, # reaction} other {, # reactions}}, press to react", REACT_REMOVE_WITH_COUNT_A11Y_LABEL: "!!{emojiName}!!{reactions, plural, =1 {, # reaction} other {, # reactions}}, press to remove your reaction", SUPER_REACT_WITH_COUNT_A11Y_LABEL: "!!{emojiName}!!{reactions, plural, =1 {, # super reaction} other {, # super reactions}}, press to super react", SUPER_REACT_REMOVE_WITH_COUNT_A11Y_LABEL: "!!{emojiName}!!{reactions, plural, =1 {, # super reaction} other {, # super reactions}}, press to remove your super reaction", OTHER_REACTIONS: "Other Reactions", VIEW_MORE: "View More", VIEW_LESS: "View Less", TOO_MANY_REACTIONS_ALERT_HEADER: "We appreciate the enthusiasm, but...", TOO_MANY_REACTIONS_ALERT_BODY: "Your reaction was not added because there are too many reactions on this message.", REACTION_TOOLTIP_1: "!!{emojiName}!! reacted by !!{a}!!", REACTION_TOOLTIP_1_N: "!!{emojiName}!! reacted by !!{a}!! and {n, plural, one {1 other} other {{n} others}}", REACTION_TOOLTIP_1_N_INTERACTIVE: "!!{emojiName}!! reacted by !!{a}!! and {n, plural, one {[1 other](onClick)} other {[{n} others](onClick)}}", REACTION_TOOLTIP_2: "!!{emojiName}!! reacted by !!{a}!! and !!{b}!!", REACTION_TOOLTIP_2_N: "!!{emojiName}!! reacted by !!{a}!!, !!{b}!!, and {n, plural, one {1 other} other {{n} others}}", REACTION_TOOLTIP_2_N_INTERACTIVE: "!!{emojiName}!! reacted by !!{a}!!, !!{b}!!, and {n, plural, one {[1 other](onClick)} other {[{n} others](onClick)}}", REACTION_TOOLTIP_3: "!!{emojiName}!! reacted by !!{a}!!, !!{b}!!, and !!{c}!!", REACTION_TOOLTIP_3_N: "!!{emojiName}!! reacted by !!{a}!!, !!{b}!!, !!{c}!!, and {n, plural, one {1 other} other {{n} others}}", REACTION_TOOLTIP_3_N_INTERACTIVE: "!!{emojiName}!! reacted by !!{a}!!, !!{b}!!, !!{c}!!, and {n, plural, one {[1 other](onClick)} other {[{n} others](onClick)}}", REACTION_TOOLTIP_N: "!!{emojiName}!! reacted by {n, plural, one {1 person} other {{n} people}}", REACTION_TOOLTIP_N_INTERACTIVE: "!!{emojiName}!! reacted by {n, plural, one {1 person} other {[{n} people](onClick)}}", BURST_REACTION_TOOLTIP_1: "!!{emojiName}!! Super reacted by !!{a}!!", BURST_REACTION_TOOLTIP_1_N: "!!{emojiName}!! Super reacted by !!{a}!! and {n, plural, one {1 other} other {{n} others}}", BURST_REACTION_TOOLTIP_1_N_INTERACTIVE: "!!{emojiName}!! Super reacted by !!{a}!! and {n, plural, one {[1 other](onClick)} other {[{n} others](onClick)}}", BURST_REACTION_TOOLTIP_2: "!!{emojiName}!! Super reacted by !!{a}!! and !!{b}!!", BURST_REACTION_TOOLTIP_2_N: "!!{emojiName}!! Super reacted by !!{a}!!, !!{b}!!, and {n, plural, one {1 other} other {{n} others}}", BURST_REACTION_TOOLTIP_2_N_INTERACTIVE: "!!{emojiName}!! Super reacted by !!{a}!!, !!{b}!!, and {n, plural, one {[1 other](onClick)} other {[{n} others](onClick)}}", BURST_REACTION_TOOLTIP_3: "!!{emojiName}!! Super reacted by !!{a}!!, !!{b}!!, and !!{c}!!", BURST_REACTION_TOOLTIP_3_N: "!!{emojiName}!! Super reacted by !!{a}!!, !!{b}!!, !!{c}!!, and {n, plural, one {1 other} other {{n} others}}", BURST_REACTION_TOOLTIP_3_N_INTERACTIVE: "!!{emojiName}!! Super reacted by !!{a}!!, !!{b}!!, !!{c}!!, and {n, plural, one {[1 other](onClick)} other {[{n} others](onClick)}}", BURST_REACTION_TOOLTIP_N: "!!{emojiName}!! Super reacted by {n, plural, one {1 person} other {{n} people}}", BURST_REACTION_TOOLTIP_N_INTERACTIVE: "!!{emojiName}!! super reaction sent by {n, plural, one {1 person} other {[{n} people](onClick)}}", SUPER_REACTION_TOOLTIP_CTA: "Add Super Reaction", SUPER_REACTION_TOOLTIP_CTA_REACTED: "You've sent this Super Reaction", SUPER_REACTION_TOOLTIP_UPSELL: "Want to start the hype train? Get Nitro to add a Super Reaction.", LOAD_REACTIONS_ERROR: "Whoops, something went wrong. Give it another try?", NO_REACTIONS_HEADER: "No Reactions", NO_REACTIONS_BODY: "What a cold, emotionless world.", SUPER_REACTION_TOGGLE_ENABLED: "Super Reactions enabled", SUPER_REACTION_TOGGLE_DISABLED: "Enable Super Reactions", SUPER_REACTIONS_UPSELL_TITLE: "A better way to react on Discord", SUPER_REACTIONS_UPSELL_TITLE_MOBILE: "A better way to react!", SUPER_REACTIONS_UPSELL_UNLIMITED_BODY: "Hype up the chat with Super Reactions! Get unlimited Super Reactions and other cool perks with [Nitro](onClick).", SUPER_REACTIONS_UNLIMITED_NOTICE_TITLE: "Unlimited Super Reactions!", SUPER_REACTIONS_UNLIMITED_NOTICE_DESCRIPTION_DESKTOP_V2: "Click the button to add a Super Reaction.", SUPER_REACTIONS_UNLIMITED_NOTICE_DESCRIPTION_MOBILE_V2: "Tap the button to add a Super Reaction.", HOLD_UP: "Hold Up", MASKED_LINK_ALERT_V2_HEADER: "Leaving Discord", MASKED_LINK_ALERT_V2_WARNING_WEBSITE: "This link is taking you to the following website", MASKED_LINK_ALERT_V2_WARNING_PROTOCOL: "This link is trying to open **an application on your device**", MASKED_LINK_ALERT_V2_TRUST_WEBSITE: "Trust **!!{domain}!!** links from now on", MASKED_LINK_ALERT_V2_TRUST_PROTOCOL: "Trust **!!{protocol}!!** links from now on", MASKED_LINK_ALERT_V2_CONFIRM_WEBSITE: "Visit Site", MASKED_LINK_ALERT_V2_CONFIRM_PROTOCOL: "Open Link", MALFORMED_LINK_BODY: "This link **!!{url}!!** is malformed and potentially dangerous.", MALFORMED_LINK_BODY_NO_URL: "Unable to open link because it is malformed and potentially dangerous.", BAD_LINK_WARNING_TITLE_V2: "Dangerous Website Ahead", BAD_LINK_WARNING_BODY_V2: "Heads up, this link goes to **a known abusive domain**. Websites like these might try to trick you into sharing personal information, steal your password, or install unwanted software on your device.", SUSPICIOUS_DOWNLOAD_WARNING_TITLE: "Potential Dangerous Download", SUSPICIOUS_DOWNLOAD_WARNING_BODY: "Woah there! While programs downloaded from the internet may be beneficial, this type of file can damage your device or steal your personal data. Make sure to only run executables from developers that you trust!", SUSPICIOUS_DOWNLOAD_WARNING_DOWNLOAD: "Continue to download", SUSPICIOUS_DOWNLOAD_WARNING_CANCEL: "Close", LINK_NOT_DISCORD_WARNING_TITLE: "Hold Up! This is not Discord!", LINK_NOT_DISCORD_WARNING_BODY: "Heads up, **!!{url}!!** may look or seem like it is from Discord, but this website is not run or managed by us! Websites like these might try to trick you into sharing personal information, steal your password, or install unwanted software on your device. Make sure not to enter your account credentials anywhere that isn't Discord.", LINK_NOT_DISCORD_WARNING_CONTINUE: "Continue to link", LINK_NOT_DISCORD_WARNING_CANCEL: "Close", ACCESSIBILITY: "Accessibility", ACCESSIBILITY_FONT_SCALING_LABEL: "Chat font scaling", ACCESSIBILITY_FONT_SCALE_CLASSIC_LABEL: "Classic chat text size", ACCESSIBILITY_FONT_SCALE_CLASSIC_HINT: "When enabled uses a slightly smaller font size for the chat text.", ACCESSIBILITY_ZOOM_LEVEL_LABEL: "Zoom level", ACCESSIBILITY_ZOOM_LEVEL_VALUE_LABEL: "Zoom level ({value})", ACCESSIBILITY_FONT_SCALING_USE_APP: "Currently using the Discord-specific font scale.", ACCESSIBILITY_FONT_SCALING_USE_OS: "Currently using your device's font scale.", ACCESSIBILITY_DARK_SIDEBAR: "Dark Sidebar", ACCESSIBILITY_MESSAGE_GROUP_SPACING: "Space Between Message Groups", ACCESSIBILITY_PREFERS_REDUCED_MOTION: "Reduced Motion", ACCESSIBILITY_PREFERS_REDUCED_MOTION_DESCRIPTION: "Reduce the amount and intensity of animations, hover effects, and other moving effects across Discord. Need help? Check our [Help Center]({helpdeskArticle}) for more info!", ACCESSIBILITY_PREFERS_REDUCED_MOTION_AUTO: "Sync with computer", ACCESSIBILITY_PREFERS_REDUCED_MOTION_AUTO_MOBILE: "Sync with Device Settings", ACCESSIBILITY_PREFERS_REDUCED_MOTION_ENABLE: "Enable Reduced Motion", ACCESSIBILITY_REDUCED_MOTION_SETTINGS_OVERRIDE: "This setting has been automatically disabled because of your **Reduced Motion** setting.", ACCESSIBILITY_FORCED_COLORS_MODAL_HEADER: "Introducing, contrast sync", ACCESSIBILITY_FORCED_COLORS_MODAL_BODY: "Discord now syncs with your computer's contrast theme! Change this any time in the Accessibility settings.", ACCESSIBILITY_FORCED_COLORS_MODAL_LEARN_MORE: "[Learn more]({helpCenterLink}) about contrast settings.", ACCESSIBILITY_FORCED_COLORS_GOTO_SETTINGS: "Go to Accessibility", ACCESSIBILITY_SETTINGS_APPEARANCE_LINK: "Can’t find what you’re looking for? Check out the [Appearance](onAppearanceClick) settings.", APPEARANCE_SETTINGS_ACCESSIBILITY_LINK: "Can’t find what you’re looking for? Check out the [Accessibility](onAccessibilityClick) settings.", ACCESSIBILITY_SETTINGS_PROFILE_COLORS_TITLE: "Profile Colors", ACCESSIBILITY_SETTINGS_PROFILE_THEMES_DESCRIPTION: "Sync profile themes", ACCESSIBILITY_SETTINGS_PROFILE_THEMES_NOTE: "Make profiles sync with your Discord [theme](onThemeClick).", ACCESSIBILITY_SETTINGS_TAGS_TITLE: "Guild Tags", ACCESSIBILITY_SETTINGS_TAGS_LABEL: "Show guild tags next to names", ACCESSIBILITY_SETTINGS_ROLE_STYLE_TITLE: "Role Colors", ACCESSIBILITY_SETTINGS_ROLE_STYLE_DESCRIPTION: "Choose a display for role colors.", ACCESSIBILITY_SETTINGS_ROLE_STYLE_USERNAME_LABEL: "Show role colors in names", ACCESSIBILITY_SETTINGS_ROLE_STYLE_DOT_LABEL: "Show role colors next to names", ACCESSIBILITY_SETTINGS_ROLE_STYLE_HIDDEN_LABEL: "Don't show role colors", ACCESSIBILITY_SETTINGS_ROLE_STYLE_LEARN_MORE: "Learn more about [role colors and other accessibility settings]({learnMoreLink}).", ACCESSIBILITY_SETTINGS_SATURATION_TITLE: "Saturation", ACCESSIBILITY_SETTINGS_SATURATION_DESCRIPTION: "Reduce the saturation of colors within the application, for those with color sensitivities. This does not affect the saturation of images, videos, role colors or other user-provided content by default.", ACCESSIBILITY_SETTINGS_SATURATION_CUSTOM_COLORS_LABEL: "Apply to custom color choices", ACCESSIBILITY_SETTINGS_SATURATION_CUSTOM_COLORS_DESCRIPTION: "Turn on to apply this adjustment to custom color choices, like role colors", ACCESSIBILITY_SETTINGS_SATURATION_PREVIEW_MESSAGE: "links will look like this https://discord.com/", ACCESSIBILITY_SETTINGS_SATURATION_LINK_PREVIEW_MESSAGE: "links will look like this {previewLink}", ACCESSIBILITY_SETTINGS_TTS_RATE_LABEL: "Text-to-Speech rate", ACCESSIBILITY_SETTINGS_TTS_RATE_TEST: "This is what text-to-speech sounds like at the current speed.", ACCESSIBILITY_SETTINGS_TTS_RATE_PREVIEW: "Preview", ACCESSIBILITY_SETTINGS_TTS_RATE_SLOWER: "Slower", ACCESSIBILITY_SETTINGS_TTS_RATE_FASTER: "Faster", ACCESSIBILITY_SETTINGS_CONTRAST: "Contrast", ACCESSIBILITY_SETTINGS_CONTRAST_MOBILE_DESCRIPTION: "Adjust the contrast between foreground and background colors", ACCESSIBILITY_SETTINGS_INCREASE_CONTRAST: "Increase Contrast", ACCESSIBILITY_SETTINGS_REDUCE_CONTRAST: "Reduce Contrast", ACCESSIBILITY_SETTINGS_REDUCE_SATURATION: "Reduce Saturation", ACCESSIBILITY_SETTINGS_SYNC_FORCED_COLORS_LABEL: "Sync contrast settings", ACCESSIBILITY_SETTINGS_SYNC_FORCED_COLORS_DESCRIPTION: "This allows Discord to use your computer's contrast theme. [Learn more]({learnMoreLink}) about contrast settings.", ACCESSIBILITY_SETTINGS_SYNC_FORCED_COLORS_DESCRIPTION_WITH_FEEDBACK: "This allows Discord to use your computer's contrast theme. [Learn more]({learnMoreLink}) about contrast settings, or [share your feedback]({shareFeedbackLink}).", ACCESSIBILITY_SETTINGS_ALWAYS_SHOW_LINK_DECORATIONS_LABEL: "Always underline links", ACCESSIBILITY_SETTINGS_ALWAYS_SHOW_LINK_DECORATIONS_NOTE: "Make links to websites, help articles, and other pages stand out more by underlining them.", ACCESSIBILITY_EXAMPLE_BUTTON_LABEL: "Example Button", GUILDS_BAR_A11Y_LABEL: "Servers sidebar", DM_TOOLTIP_A11Y_LABEL: "!!{name}!! {mentions, plural, =0 {} =1 {, # unread message} other {, # unread messages}}", GUILD_TOOLTIP_A11Y_LABEL: " {mentions, plural, =0 {} =1 {# mention,} other {# mentions,}} !!{guildName}!!", GUILD_TOOLTIP_A11Y_LABEL_UNREADS: "Unread messages, !!{guildName}!!", GUILD_FOLDER_TOOLTIP_A11Y_LABEL: "!!{folderName}!!, folder {mentions, plural, =0 {} =1 {, # unread mention} other {, # unread mentions}}", GUILD_FOLDER_TOOLTIP_A11Y_LABEL_WITH_EXPANDED_STATE: "!!{folderName}!!, folder {mentions, plural, =0 {} =1 {, # unread mention} other {, # unread mentions}}, !!{expandedState}!!", CHANNEL_MEMBERS_A11Y_LABEL: "!!{title}!!, {count, plural, =1 {# member} other {# members}}", CHANNEL_CALL_MEMBERS_POPOUT_HEADER: "Participants — {count}", CHANNEL_CALL_PARTICIPANTS: "Participants", CHANNEL_CALL_CURRENT_SPEAKER: "Currently Speaking: !!{username}!!", CALL_TILE_A11Y_LABEL_ACTIVITY: "Call tile, activity, {activityName}", CALL_TILE_A11Y_LABEL_HIDDEN_STREAM: "Call tile, hidden stream, {streamerName}", CALL_TILE_A11Y_LABEL_STREAM: "Call tile, stream, {streamerName}", CALL_TILE_A11Y_LABEL_USER: "Call tile, {username}", PRIVATE_CHANNELS_A11Y_LABEL: "Private channels", ACCOUNT_A11Y_LABEL: "User area", GUILD_SIDEBAR_A11Y_LABEL: "!!{guildName}!! (server)", GUILD_SIDEBAR_ACTIONS_BUTTON: "!!{guildName}!!, server actions", GUILD_SIDEBAR_DEFAULT_CHANNEL_A11Y_LABEL: "!!{channelName}!! (text channel)", GUILD_SIDEBAR_THREAD_A11Y_LABEL: "!!{channelName}!! (thread)", GUILD_SIDEBAR_STORE_CHANNEL_A11Y_LABEL: "!!{channelName}!! (store channel)", GUILD_SIDEBAR_DIRECTORY_CHANNEL_A11Y_LABEL: "!!{channelName}!! (directory channel)", GUILD_SIDEBAR_ANNOUNCEMENT_CHANNEL_A11Y_LABEL: "!!{channelName}!! (announcement channel)", GUILD_SIDEBAR_DEFAULT_CHANNEL_A11Y_LABEL_WITH_UNREADS: "unread, !!{channelName}!! (text channel)", GUILD_SIDEBAR_THREAD_A11Y_LABEL_WITH_UNREADS: "unread, !!{channelName}!! (thread)", GUILD_SIDEBAR_ANNOUNCEMENT_CHANNEL_A11Y_LABEL_WITH_UNREADS: "unread, !!{channelName}!! (announcement channel)", GUILD_SIDEBAR_DEFAULT_CHANNEL_A11Y_LABEL_WITH_MENTIONS: "{mentionCount, plural, one {# mention} other {# mentions}}, !!{channelName}!! (text channel)", GUILD_SIDEBAR_THREAD_A11Y_LABEL_WITH_MENTIONS: "{mentionCount, plural, one {# mention} other {# mentions}}, !!{channelName}!! (thread)", GUILD_SIDEBAR_ANNOUNCEMENT_CHANNEL_A11Y_LABEL_WITH_MENTIONS: "{mentionCount, plural, one {# mention} other {# mentions}}, !!{channelName}!! (announcement channel)", GUILD_SIDEBAR_VOICE_CHANNEL_A11Y_LABEL: "!!{channelName}!! (voice channel)", GUILD_SIDEBAR_VOICE_CHANNEL_A11Y_LABEL_WITH_USERS: "!!{channelName}!! (voice channel), {userCount, plural, one {1 user} other {# users}}", GUILD_SIDEBAR_VOICE_CHANNEL_A11Y_LABEL_WITH_LIMIT: "!!{channelName}!! (voice channel), {userCount, number} of {limit, number} users", GUILD_SIDEBAR_CHANNEL_A11Y_LABEL_MENTIONS: "{mentionCount, plural, one {# mention} other {# mentions}}", GUILD_SIDEBAR_CHANNEL_A11Y_LABEL_UNREAD: "unread", GUILD_SIDEBAR_VOICE_CHANNEL_A11Y_LABEL_USERS: "{userCount, plural, one {1 user} other {# users}}", GUILD_SIDEBAR_ACTIVE_VOICE_CHANNEL_A11Y_LABEL: "{channelCount, plural, one {# Active Voice Channel} other {# Active Voice Channels}}", GUILD_SIDEBAR_ACTIVE_VOICE_CHANNEL_A11Y_HINT: "Tap to expand", GUILD_SIDEBAR_VOICE_CHANNEL_DESCRIBED_BY_LABEL_ACTIVITIES: "Active activities in this channel: {activeActivities}", GUILD_SIDEBAR_CHANNEL_A11Y_LABEL_LIMIT: "{userCount, number} of {limit, number} users", GUILD_SIDEBAR_CHANNEL_A11Y_LABEL_ACTIVITIES: "{activitiesCount, plural, one {# activity} other {# activities}}", GUILD_SIDEBAR_CHANNEL_A11Y_LABEL_PREMIUM_UNLOCKED: "Premium Channel", GUILD_SIDEBAR_CHANNEL_A11Y_LABEL_PREMIUM_LOCKED: "Premium Channel (locked)", GUILD_SIDEBAR_STAGE_CHANNEL_A11Y_LABEL: "!!{channelName}!! (stage channel)", GUILD_SIDEBAR_STAGE_CHANNEL_A11Y_LABEL_WITH_USERS: "!!{channelName}!! (stage channel), {userCount, plural, one {1 user} other {# users}}", GUILD_SIDEBAR_STAGE_CHANNEL_A11Y_LABEL_WITH_LIMIT: "!!{channelName}!! (stage channel), {userCount, number} of {limit, number} users", GUILD_SIDEBAR_UNKNOWN_CHANNEL_A11Y_LABEL: "!!{channelName}!! (unknown channel)", GUILD_SIDEBAR_VOICE_CHANNEL_A11Y_LABEL_WITH_LIMIT_WITH_MENTIONS: "{mentionCount, plural, one {# mention} other {# mentions}}, !!{channelName}!! (voice channel), {userCount, number} of {limit, number} users", GUILD_SIDEBAR_VOICE_CHANNEL_A11Y_LABEL_WITH_USERS_WITH_MENTIONS: "{mentionCount, plural, one {# mention} other {# mentions}}, !!{channelName}!! (voice channel), {userCount, plural, one {1 user} other {# users}}", GUILD_SIDEBAR_VOICE_CHANNEL_A11Y_LABEL_WITH_MENTIONS: "{mentionCount, plural, one {# mention} other {# mentions}}, !!{channelName}!! (voice channel)", CHANNEL_A11Y_LABEL: "!!{channelName}!! (channel)", THREAD_A11Y_LABEL: "!!{channelName}!! (thread)", TEXT_IN_VOICE_A11Y_LABEL: "Text chat for voice channel !!{channelName}!!", TEXT_IN_STAGE_A11Y_LABEL: "Text chat for stage channel !!{channelName}!!", THREAD_PARENT_A11Y_LABEL: "parent channel !!{channelName}!!", CATEGORY_A11Y_LABEL: "!!{categoryName}!! (category)", CATEGORY_A11Y_LABEL_WITH_EXPANDED_STATE: "!!{categoryName}!! (category), !!{isExpanded}!!", CATEGORY_A11Y_HINT_COLLAPSED: "Double tap to expand", CATEGORY_A11Y_HINT_EXPANDED: "Double tap to collapse", OPEN_USER_PROFILE_A11Y_HINT: "Double tap to view profile", CHANNEL_MUTED_A11Y_HINT: "Muted", DIRECT_MESSAGE_A11Y_LABEL: "!!{channelName}!! (direct message)", DIRECT_MESSAGE_A11Y_LABEL_WITH_UNREADS: "unread, !!{channelName}!! (direct message)", GROUP_MESSAGE_A11Y_LABEL: "!!{channelName}!! (group message)", GROUP_MESSAGE_A11Y_LABEL_WITH_UNREADS: "unread, !!{channelName}!! (group message)", CHANNEL_HEADER_BAR_A11Y_LABEL: "Channel header", THREAD_HEADER_BAR_A11Y_LABEL: "Thread header", CHANNEL_MESSAGES_A11Y_LABEL: "Messages in !!{channelName}!!", CHANNEL_MESSAGES_A11Y_DESCRIPTION: "Use the up and down arrow keys to navigate between messages quickly. New messages will be added to the bottom of the list as they come in.", CHANNEL_MESSAGE_REPLY_A11Y_LABEL: "!!{author}!! replying to !!{repliedAuthor}!!", MESSAGE_UTILITIES_A11Y_LABEL: "Message Actions", LOADING_MESSAGES_A11Y_LABEL: "Loading more messages", SELECT_FROM_APPLICATION_A11Y_LABEL: "Select from Application", CAMERA_A11Y_TURNED_ON: "Camera On", CAMERA_A11Y_TURNED_OFF: "Camera Off", SHEET_GRABBER_A11Y_LABEL: "Sheet Grabber", SHEET_GRABBER_A11Y_HINT: "Double tap to expand/collapse more actions", PIXEL_VALUE_A11Y_TEXT: "!!{value}!! pixels", CLOSE_MODAL_A11Y_LABEL: "Close modal", EXPANDED: "Expanded", COLLAPSED: "Collapsed", IMG_ALT_ATTACHMENT_FILE_TYPE: "Attachment file type: !!{fileType}!!", IMG_ALT_ICON: "!!{name}!! Icon", IMG_ALT_LOGO: "!!{name}!! Logo", IMG_ALT_EMOJI: "!!{name}!! Emoji", ATTACHMENT_IMG_A11Y_HINT: "double tap to enlarge", ATTACHMENT_VIDEO_A11Y_HINT: "double tap to play video and enlarge", HOME: "Home", SERVER_FOLDER_PLACEHOLDER: "Server Folder", SHOW_FOLDER: "Show Folder", OPEN_NAVIGATION: "Open Navigation", HIDE_NAVIGATION: "Hide Navigation", SKIP_TO_CONTENT: "Skip to Content", WUMPUS: "Wumpus", GO_BACK: "Go Back", BACK_TO: "Back to !!{destination}!!", UNGROUPED: "Ungrouped", NEW_TERMS_TITLE: "Terms of Service and Policy Updates", NEW_TERMS_DESCRIPTION: "\nTo continue using Discord, please read and agree to\nour updated Terms of Service and Privacy Policy.", NEW_TERMS_ACK: "I understand and agree with these terms.", NEW_TERMS_CONTINUE: "Continue to Discord", TERMS_OF_SERVICE: "[Terms of Service]({url})", PRIVACY_POLICY: "[Privacy Policy]({url})", PAID_SERVICES_TERMS: "[Paid Services Terms]({url})", TERMS_ACKNOWLEDGEMENT_DESCRIPTION_1: "Heads up! Updates are coming to the following policies below. These changes will go into effect on **{date, date, long}**. We’re letting you know now so you have time to learn what’s changing.", TERMS_ACKNOWLEDGEMENT_DESCRIPTION_2: "We encourage you to read the updated documents in full. Some of the most important changes are explained in our blog post.", TERMS_AGREEMENT_DESCRIPTION_1: "We announced updates to the policies below. The changes are now in effect. To agree, just keep using Discord.", TERMS_AGREEMENT_DESCRIPTION_2: "We encourage you to read the updated documents in full, as they apply to your use of Discord. We’ve explained some of the most important changes in our blog post.", TERMS_OF_SERVICE_UPDATE_03_27_2023_DESCRIPTION: "We announced our annual updates to our policies last month, which are now in effect. Check out our [blog post](https://discord.com/blog/important-policy-updates) for a summary of these changes, and read the full policies below.", TERMS_OF_SERVICE_AGREEMENT_DESCRIPTION: "By clicking Agree, you acknowledge that you agree to Discord’s Terms of Service and have read our Privacy Policy.", COMMUNITY_GUIDELINES: "[Community Guidelines]({url})", BLOG_POST: "[Our blog post]({url})", SEARCH_FILTER_CONTEXT_MENU_FROM: "From a specific person", SEARCH_FILTER_CONTEXT_MENU_HAS: "Has specific data", SEARCH_FILTER_CONTEXT_MENU_MENTIONS: "Mention someone", SEARCH_FILTER_CONTEXT_MENU_CHANNEL: "In a specific channel", SEARCH_FILTER_CONTEXT_MENU_BEFORE_DATE: "Before a date", SEARCH_FILTER_CONTEXT_MENU_AFTER_DATE: "After a date", SEARCH_FILTER_CONTEXT_MENU_ON_DATE: "Sent on a date", SEARCH_FILTER_MESSAGES_FROM_USER: "Filter messages from a particular user", SEARCH_FILTER_MESSAGES_FROM_CHANNEL: "Filter messages from a particular channel", SEARCH_FILTER_MESSAGES_HAS: "Filter messages with certain data types", SEARCH_FILTER_MESSAGES_MENTION_USER: "Filter messages that mention a particular user", SEARCH_FILTER_MESSAGES_BEFORE_DATE: "Filter messages from before a date", SEARCH_FILTER_MESSAGES_AFTER_DATE: "Filter messages from after a date", SEARCH_FILTER_MESSAGES_ON_DATE: "Filter messages sent on a specific date", SEARCH_AUTOCOMPLETE_PROMPT: "Start typing to see some suggestions!", SEARCH_AUTOCOMPLETE_NO_RESULTS: "Unfortunately, we could not find any suggestions.", SEARCH_ADD_FILTERS: "Add Filters", SEARCH_RESULTS_SECTION_LABEL: "Search Results", SEARCH_IN: "Search in {guildName}", SEARCH_DM_WITH: "Search DM with {userName}", SEARCH_DATE_PICKER_HINT: "You can also do", SEARCH_NEWEST: "Newest", SEARCH_MOST_RELEVANT_SHORT: "Relevant", SEARCH_NEWEST_SHORT: "New", SEARCH_OLDEST_SHORT: "Old", SEARCH_FOR_VALUE: "Search For: **!!{value}!!**", TOTAL_RESULTS: "{count, plural, =0 {No Results} one {{count} Result} other {{count} Results}}", STILL_INDEXING: "Indexing", SEARCHING: "Searching…", SEARCH_NO_RESULTS: "We searched far and wide. Unfortunately, no results were found.", SEARCH_NO_RESULTS_ALT: "No results found. Empathy banana is here for you.", SEARCH_GUILD_STILL_INDEXING: "Before searching, we need to index this server. Give us a bit.", SEARCH_DM_STILL_INDEXING: "Before searching, we need to index this DM. Give us a bit.", SEARCH_DMS_STILL_INDEXING: "Before searching, we need to index your messages. Give us a bit.", SEARCH_ERROR: "We dropped the magnifying glass. Can you try searching again?", SEARCH_STILL_INDEXING_HINT: "{count, plural, =0 {No results} one {{count} result} other {{count} results}} indexed so far. We’re still indexing older messages.", SEARCH_NUM_RESULTS_BLOCKED_NOT_SHOWN: "We’ve hidden {count, plural, one {{count} result} other {{count} results}} from users you’ve blocked.", SEARCH_HIDE_BLOCKED_MESSAGES: "Hide {count, plural, one {{count} message} other {{count} messages}} from blocked users", SEARCH_PICK_DATE: "Pick a date", SEARCH_FROM_SUGGESTIONS: 'Search for "{suggestion}"', SEARCH_GROUP_HEADER_FROM: "From User", SEARCH_GROUP_HINT_FROM_USER: "Tap to append filter. Search messages from this user", SEARCH_GROUP_HEADER_MENTIONS: "Mentions User", SEARCH_GROUP_HINT_MENTIONS_USER: "Tap to append filter. Search messages which mention this user", SEARCH_GROUP_HEADER_HAS: "Message Contains", SEARCH_GROUP_HINT_HAS_CONTENT: "Tap to append filter. Search messages which contain this content", SEARCH_GROUP_HEADER_CHANNELS: "In Channel", SEARCH_GROUP_HINT_IN_CHANNEL: "Tap to append filter. Search messages in this channel", SEARCH_GROUP_HEADER_LINK_FROM: "Link From Website", SEARCH_GROUP_HEADER_FILE_TYPE: "File type", SEARCH_GROUP_HEADER_SEARCH_OPTIONS: "Search Options", SEARCH_GROUP_HINT_SEARCH_OPTION: "Tap to append filter to current search", SEARCH_GROUP_HEADER_HISTORY: "History", SEARCH_GROUP_HINT_PAST_SEARCH: "Tap to submit this past search", SEARCH_GROUP_HEADER_DATES: "Dates", SEARCH_GROUP_HEADER_PINNED: "Pinned", SEARCH_GROUP_HINT_PINNED: "Tap to append filter. Search pinned messages", SEARCH_FILTERS: "Search Filters", SEARCH_FILTER_RESULTS_ELLIPSIZED: "Filter results...", SEARCH_FILTER_FROM: "from", SEARCH_FILTER_HAS: "has", SEARCH_FILTER_BEFORE: "before", SEARCH_FILTER_ON: "on", SEARCH_FILTER_DURING: "during", SEARCH_FILTER_AFTER: "after", SEARCH_FILTER_IN: "in", SEARCH_FILTER_MENTIONS: "mentions", SEARCH_FILTER_LINK_FROM: "linkFrom", SEARCH_FILTER_FILE_TYPE: "fileType", SEARCH_FILTER_FILE_NAME: "fileName", SEARCH_FILTER_PINNED: "pinned", SEARCH_HISTORY_SECTION: "Search History", SEARCH_MEDIA_SECTION: "Photos & Media", SEARCH_VIEW_ALL: "View all", SEARCH_CLEAR_ALL: "Clear all", SEARCH_ANSWER_FROM: "user", SEARCH_ANSWER_HAS: "link, embed or file", SEARCH_ANSWER_DATE: "specific date", SEARCH_ANSWER_IN: "channel", SEARCH_ANSWER_MENTIONS: "user", SEARCH_ANSWER_LINK_FROM: "website", SEARCH_ANSWER_FILE_TYPE: "extension", SEARCH_ANSWER_FILE_NAME: "file name", SEARCH_ANSWER_BOOLEAN: "true or false", SEARCH_SHORTCUT_TODAY: "today", SEARCH_SHORTCUT_YESTERDAY: "yesterday", SEARCH_SHORTCUT_WEEK: "week", SEARCH_SHORTCUT_MONTH: "month", SEARCH_SHORTCUT_YEAR: "year", SEARCH_ANSWER_HAS_LINK: "link", SEARCH_ANSWER_HAS_ATTACHMENT: "file", SEARCH_ANSWER_HAS_EMBED: "embed", SEARCH_ANSWER_HAS_IMAGE: "image", SEARCH_ANSWER_HAS_POLL: "poll", SEARCH_ANSWER_HAS_VIDEO: "video", SEARCH_ANSWER_HAS_SNAPSHOT: "forward", SEARCH_ANSWER_HAS_SOUND: "sound", SEARCH_ANSWER_HAS_STICKER: "sticker", SEARCH_CLEAR_HISTORY: "Clear Search History", SEARCH_REMOVE_FROM_HISTORY_A11Y_LABEL: "Remove from Search History", SEARCH_STARTED_A11Y_ANNOUNCE: "Search Started", SEARCH_CLEAR: "Clear search", PAGINATION_PAGE_OF: "Page {page} of {totalPages}", PREMIUM_NOT_VERIFIED: "Verify your email first", PREMIUM_NOT_VERIFIED_BODY: "Hey friend! If you want to make purchases, you’ll need to verify your email first.", PREMIUM_NOT_CLAIMED: "Claim your account first", PREMIUM_NOT_CLAIMED_BODY: "Hey friend! If you want to make purchases, you’ll need to claim your account first so you don’t lose your stuff.", ALPHA: "Alpha", BETA: "Beta", EXPERIMENTAL: "Experimental", EXPERIMENTAL_FEATURES: "Experimental Features", EXPERIMENTAL_DESCRIPTION: "These settings/features are in testing phase and may be unstable. They are subject to change or removal without notice. Use with caution.", EXPERIMENTAL_FEATURES_TOAST: "These settings are still baking. Try not to get burnt \uD83D\uDD25", PREMIUM_PERKS_TIER_2_PROFILE: "Style your profile with a banner, custom tag, theme, animated avatar, and exclusive Nitro badge", PREMIUM_PERKS_TIER_1_PROFILE: "Style your profile with a custom tag, animated avatar, and exclusive Nitro badge", PREMIUM_PERKS_TIER_2_CUSTOM_EMOJI: "Use your custom emoji anywhere and animate them", PREMIUM_PERKS_TIER_2_PREMIUM_PROFILES: "Be who you want and use a different avatar, banner, and bio in each of your servers.", PREMIUM_PERKS_TIER_1_CUSTOM_EMOJI: "Use custom and animated emoji anywhere", PREMIUM_PERKS_TIER_2_STREAM_RESOLUTION: "Better video resolutions for all your desktop screen shares up to 4k 60fps", PREMIUM_PERKS_TIER_1_STREAM_RESOLUTION: "Screen share up to 1080p and up to 60 fps", PREMIUM_PERKS_UPLOAD_SIZE: "Increased upload size from {maxUploadStandard} to {maxUploadPremium}", PREMIUM_PERKS_TIER_2_GUILD_SUBSCRIPTION: "Get {numBoosts} Boosts and {discountPercentage} off future Boosts", PREMIUM_PERKS_TIER_1_GUILD_SUBSCRIPTION: "{discountPercentage} off Server Boosts", PREMIUM_PERKS_TIER_2_MAX_GUILDS: "Double the number of servers you can join from {nonPremiumMaxGuilds} to {premiumMaxGuilds}", PREMIUM_PERKS_TIER_2_ACTIVITIES: "Get access to even more Activities", PREMIUM_CHAT_PERKS_CUSTOM_STICKERS: "Use custom stickers anywhere", PREMIUM_CHAT_PERKS_MAX_MESSAGE_LENGTH: "Say what's on your mind with an increased character count from {nonPremiumMaxMessageLength} to {premiumMaxMessageLength} characters", PREMIUM_CHAT_PERKS_MAX_MESSAGE_LENGTH_UPSELL: "Lift off with Discord Nitro to type to your heart’s content, up to {premiumMaxMessageLength} characters. [Learn more](onClick).", PREMIUM_SUBSCRIPTION_CREDIT: "!!{planName}!! Credit", PREMIUM_SUBSCRIPTION_CREDIT_COUNT_MONTHS: "{count, plural, =1 {# Month} other {# Months}}", PREMIUM_SUBSCRIPTION_CREDIT_APPLIED_ON: "Credit will be applied on {date, date, medium}.", PREMIUM_SUBSCRIPTION_CREDIT_APPLIED_MISMATCHED_PLAN: "This credit will apply once you sign up for a !!{planName}!! subscription.", PREMIUM_SUBSCRIPTION_CREDIT_APPLIED_MISMATCHED_PLAN_ANDROID: "This credit can be applied to a !!{planName}!! subscription purchased on desktop.", PREMIUM_SUBSCRIPTION_SUBSCRIPTIONS_LINK: "Trying to manage your Nitro subscription? Go to your [Subscriptions](onSubscriptionsClick) page.", PREMIUM_SUBSCRIPTION_MANAGE_YOURS_LINK: "Trying to manage your {subscriptionName} subscription? Go to your [Subscriptions](onSubscriptionsClick) page.", PREMIUM_SUBSCRIPTION_TIER_1_DEPRECATION: "Nitro Classic is no longer available for new purchases. As an existing Classic subscriber, you can keep your plan as long as your renewal is successful. For more details, check this [support article]({helpdeskArticle}). Go to the [Subscriptions](onSubscriptionsClick) page to manage your Nitro plan.", PREMIUM_UPSELL_FEATURE_PRETEXT: "Boost at a better price with Discord Nitro! For **{monthlyPrice}/Month** you’ll get:", PREMIUM_UPSELL_FEATURE_PRETEXT_WITHOUT_PRICE: "Boost at a better price with Discord Nitro! You’ll get:", PREMIUM_UPSELL_FEATURE_PRETEXT_TRIAL: "Boost at a better price with Discord Nitro! Start your free month and gain access to:", PREMIUM_UPSELL_FEATURE_PRETEXT_TRIAL_VARIANT: "Boost at a better price with Discord Nitro! Start your free trial and gain access to:", PREMIUM_UPSELL_FEATURE_FREE_GUILD_SUBSCRIPTION: "{numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}} for instant Level 1 perks", PREMIUM_UPSELL_FEATURE_GUILD_SUBSCRIPTION_DISCOUNT: "{percent} off Server Boosts", PREMIUM_UPSELL_FEATURE_STREAM: "Source-quality Go Live streaming", PREMIUM_UPSELL_FEATURE_UPLOAD: "Upload file size increase to 100MB", PREMIUM_UPSELL_FEATURE_UPLOAD_INCREASE: "Upload file size increase to {premiumMaxSize}", PREMIUM_UPSELL_FEATURE_CHAT_PERKS: "Superpower chat perks: animated emoji, custom Discord tag, and more", PREMIUM_UPSELL_FEATURE_CHAT_PERKS_MOBILE: "Extra chat perks: animated emoji, custom Discord tag, and more", PREMIUM_UPSELL_UPGRADE: "Upgrade to Nitro", PREMIUM_UPSELL_CONTINUE_TO_BOOSTS: "Continue to Boosts", PREMIUM_UPSELL_CONTINUE_TO_MONTHLY: "Continue to Monthly", PREMIUM_UPSELL_YEARLY_TITLE: "Get {discountPercentage} off {planName}", PREMIUM_UPSELL_YEARLY_DESCRIPTION: "Subscribe to a yearly subscription and get a {discountPercentage} discount.", PREMIUM_UPSELL_YEARLY_CTA: "Subscribe Yearly - !!{price}!! / Year", PREMIUM_UPSELL_MOBILE_FEATURE_FILE_UPLOAD_TITLE: "Your files are too powerful", PREMIUM_UPSELL_MOBILE_FEATURE_FILE_UPLOAD_DESCRIPTION_V3: "Upgrade to {nitroTierName} to upload files up to {maxFileSize}. Perfect for sharing those high resolution clips.", PREMIUM_UPSELL_MOBILE_FEATURE_FILE_UPLOAD_POPUP_LABEL_V3: "Send up to {maxFileSize} with [{nitroTierName}](onClick)", PREMIUM_UPSELL_MOBILE_FEATURE_SOUNDBOARD_TITLE: "Express yourself with more sounds", PREMIUM_UPSELL_MOBILE_FEATURE_SOUNDBOARD_DESCRIPTION_V3: "Access the best sounds from Soundboard across any of your Discord servers. Available with {nitroTierName}.", PREMIUM_UPSELL_MOBILE_FEATURE_SOUNDBOARD_POPUP_LABEL_V2: "Make some noise with [{nitroTierName}](onClick)", PREMIUM_UPSELL_MOBILE_FEATURE_EMOJI_TITLE: "Up your emoji game", PREMIUM_UPSELL_MOBILE_FEATURE_EMOJI_DESCRIPTION_V3: "Add your own flair to any conversation with custom emoji anywhere. Available with {nitroTierName}.", PREMIUM_UPSELL_MOBILE_FEATURE_EMOJI_POPUP_LABEL_V2: "Unlock every emoji with [{nitroTierName}](onClick)", PREMIUM_UPSELL_MOBILE_FEATURE_ANIMATED_EMOJI_TITLE: "Animate your Emoji", PREMIUM_UPSELL_MOBILE_FEATURE_ANIMATED_EMOJI_DESCRIPTION_V2: "Bring your emoji to life with animated emoji. Available with {nitroTierName}.", PREMIUM_GRANDFATHERED_YEARLY: "As a thank you for supporting Discord, you have access to Nitro for two years. Your access ends **{date, date, medium}**.", PREMIUM_GRANDFATHERED_MONTHLY: "Thanks for being an early supporter. Your grandfathered Nitro subscription changes to Nitro Classic on **{date, date, medium}**. Upgrade now for a free month and keep your current perks", PREMIUM_GUILD_SUBSCRIPTION_TITLE: "Server Boost", PREMIUM_GUILD_SUBSCRIPTION_SUBTITLE: "Boosting a server allows it to progress towards levels. Each level gives collective perks for the entire server.\n\n Boosting a server activates a 7-day cooldown. You may not transfer a Boost to another server until this cooldown is finished. [Learn more about Server Boosting.]({helpdeskArticle})", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_GUILDS_BLURB: "You can Boost a joined server, check the current level progress, and view level perks within the server itself. Get started with any of your joined servers:", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_GUILDS_BLURB_WITHOUT_PROMPT: "You can Boost a joined server, check the current level progress, and view level perks within the server itself.", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_GUILDS_BLURB_PROMPT: "Get started with any of your joined servers:", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_GUILDS_EMPTY_DESCRIPTION_TITLE: "Looks like you haven't joined a server yet.", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_GUILDS_EMPTY_DESCRIPTION_TEXT: "Come back after you've found some cool people to Boost with.", PREMIUM_GUILD_SUBSCRIPTION_SUBTITLE_MOBILE_1: "Boosting allows a server to progress towards levels. Each level unlocks perks for the entire server.", PREMIUM_GUILD_SUBSCRIPTION_SUBTITLE_MOBILE_2: "Boosting a server activates a 7-day cooldown. You may not use this Boost on another server until this cooldown is finished. [Learn more about Server Boosting.]({helpdeskArticle})", PREMIUM_GUILD_SUBSCRIPTION_UNUSED_SLOT_DESCRIPTION: "Unused Boost", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_TITLE: "Uncancel Boost Subscription", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_TITLE_MOBILE: "Save the Boost?", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_DESCRIPTION: "Would you like to uncancel this Server Boost?", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_BUTTON: "Yes, Uncancel Now", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_BUTTON_MOBILE: "Uncancel Now", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_ERROR: "There was an error trying to uncancel this boost.", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_CONFIRM_TITLE: "Boosts Saved!", PREMIUM_GUILD_SUBSCRIPTION_INVENTORY_UNCANCEL_CONFIRM_DESCRIPTION: "This Server Boost is saved from cancellation! Keep on Boosting!", PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_PENDING_MUTATION_PLAN: "You have to cancel your pending plan change before buying boosts.", PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_PENDING_MUTATION_PREMIUM_GUILD_SUBSCRIPTION: "You have a pending boost cancellation. You have to uncancel it before buying boosts.", PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_SUBSCRIPTION_PAST_DUE: "Your subscription is past due. You have to update your payment information before buying boosts.", PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_SUBSCRIPTION_ACCOUNT_HOLD: "Your subscription is on hold. You have to update your payment information before buying boosts.", PREMIUM_GUILD_SUBSCRIPTION_ACTIVE_TITLE: "Active Server Boosts", PREMIUM_GUILD_COOLDOWN_AVAILABLE_COUNTDOWN: "Boost Cooldown: **{days, number}d {hours, number}h {minutes, number}m**", PREMIUM_GUILD_COOLDOWN_AVAILABLE_COUNTDOWN_DAYS: "Cooldown! Boost cannot be moved for {days, plural, =1 {# day} other {# days}}.", PREMIUM_GUILD_COOLDOWN_AVAILABLE_COUNTDOWN_HOURS: "Cooldown! Boost cannot be moved for {hours, plural, =1 {# hour} other {# hours}} and {minutes, plural, =1 {# minute} other {# minutes}}.", PREMIUM_GUILD_COOLDOWN_AVAILABLE_COUNTDOWN_MINUTES: "Cooldown! Boost cannot be moved for {minutes, plural, =1 {# minute} other {# minutes}}.", PREMIUM_GUILD_GRACE_PERIOD_TITLE: "**Your server is going to lose a level!**", PREMIUM_GUILD_GRACE_PERIOD_COOLDOWN: "This server will lose {tierName} perks in: **{days, number}d {hours, number}h**. You need **{numPremiumSubscriptions, plural, =1 {# Boost} other {# Boosts}}** to maintain it.", PREMIUM_GUILD_GRACE_PERIOD_COOLDOWN_SOON: "This server will lose {tierName} perks soon. You need **{numPremiumSubscriptions, plural, =1 {# Boost} other {# Boosts}}** to maintain it.", PREMIUM_GUILD_SUBSCRIPTION_GUILD_SUBSRIPTION_SUBTITLE: "You Boosted {numSubscriptions, plural, =1 {# time} other {# times}}", PREMIUM_GUILD_SUBSCRIPTION_NUM_SUBSCRIPTIONS: "{numSubscriptions, plural, =1 {# Boost} other {# Boosts}}", PREMIUM_GUILD_SUBSCRIPTION_AVAILABLE: "{numSubscriptions, plural, =1 {# Boost} other {# Boosts}} Available", PREMIUM_GUILD_SUBSCRIPTION_SUBSCRIBE: "Boost a server", PREMIUM_GUILD_SUBSCRIPTION_SELECT_SERVER_BUTTON: "Select a Server", PREMIUM_GUILD_SUBSCRIPTION_TRANSFER_BUTTON: "Transfer Boost", PREMIUM_GUILD_SUBSCRIPTION_TRANSFER_HERE: "Transfer here", PREMIUM_GUILD_SUBSCRIPTION_TRANSFER_BUTTON_DISABLED_TOOLTIP: "This Boost is on cooldown", PREMIUM_GUILD_SUBSCRIPTION_APPLY_NON_GUILD_MEMBER: "You're not a member of any servers yet!\n\n$[Explore public servers](publicGuildDirectoryHook) and join one to apply your Boost.", PREMIUM_GUILD_SUBSCRIPTION_APPLY_GUILD_NOT_FOUND: "Couldn't find any guilds by that name.", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_BUTTON_DISABLED_TOOLTIP: "This Boost is included with your Nitro subscription", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_BUTTON_DISABLED_PAST_DUE_TOOLTIP: "Your subscription is past due. Please update your payment information before managing boosts.", PREMIUM_GUILD_SUBSCRIPTION_SLOT_CANCEL_BUTTON: "Cancel Boost Subscription", PREMIUM_GUILD_SUBSCRIPTION_SLOT_UNCANCEL_BUTTON: "Uncancel Boost Subscription", PREMIUM_GUILD_SUBSCRIPTION_SLOT_UNCANCEL_BUTTON_MOBILE: "Uncancel", PREMIUM_GUILD_SUBSCRIPTION_CREATION_DATE: "{date, date, long}", PREMIUM_GUILD_SUBSCRIPTION_DURATION: "Boosting since {date, date, medium} ({months, plural, =1 {# Month} other {# Months}})", PREMIUM_GUILD_SUBSCRIPTION_DURATION_SHORTENED: "Since {date, date, medium}", PREMIUM_GUILD_SUBSCRIPTION_PENDING_CANCELATION: "Pending Cancellation: **{date, date, medium}**", PREMIUM_GUILD_SUBSCRIPTION_SUBSCRIBER_COUNT_TOOLTIP: "{subscriberCount, plural, =1 {# Boost} other {# Boosts}}", PREMIUM_GUILD_NUM_MONTH_GUILD_SUBSCRIPTIONS: "**{num}** \xd7 {num, plural, =1 {Server Boost} other {Server Boosts}} Monthly", PREMIUM_GUILD_NUM_MULTI_MONTHS_GUILD_SUBSCRIPTIONS: "**{num}** \xd7 {num, plural, =1 {Server Boost} other {Server Boosts}} {intervalCount} Month", PREMIUM_GUILD_NUM_YEAR_GUILD_SUBSCRIPTIONS: "**{num}** \xd7 {num, plural, =1 {Server Boost} other {Server Boosts}} Yearly", PREMIUM_GUILD_NUM_MONTH_GUILD_SUBSCRIPTIONS_UNFORMATTED: "{num} \xd7 {num, plural, =1 {Server Boost} other {Server Boosts}} Monthly", MANAGE_PREMIUM_GUILD_SUBSCRIPTION: "Manage Boost", GUILD_BOOSTING_USER_SETTINGS_HEADING_NO_GUILD_BOOSTS: "Uh oh, you haven't Boosted yet!", GUILD_BOOSTING_USER_SETTINGS_HEADING_YOUR_GUILD_BOOSTS: "Your server\n\nBoosts", GUILD_BOOSTING_USER_SETTINGS_HEADING_HAS_UNAPPLIED_FREE_GUILD_BOOSTS: "Your Boosts are\n\nwaiting", GUILD_BOOSTING_USER_SETTINGS_HEADING_UNAPPLIED_GUILD_BOOST_HEADING_V2: "Your {numUnappliedGuildBoostSlots, plural, =1 {Boost} other {Boosts}} {numUnappliedGuildBoostSlots, plural, =1 {is} other {are}} waiting!", GUILD_BOOSTING_USER_SETTINGS_HEADING_UNAPPLIED_GUILD_BOOST_HEADING_INCLUDED_WITH_SUBSCRIPTION: "Your free {numUnappliedGuildBoostSlots, plural, =1 {Boost} other {Boosts}} {numUnappliedGuildBoostSlots, plural, =1 {is} other {are}} waiting", GUILD_BOOSTING_USER_SETTINGS_HEADING_UNAPPLIED_GUILD_BOOST_SUBHEADING: "Just waiting here until you choose a server to give {numUnappliedGuildBoostSlots, plural, =1 {it} other {them}} to!", GUILD_BOOSTING_USER_SETTINGS_HEADING_UNAPPLIED_GUILD_BOOST_SUBHEADING_WITH_PREMIUM_SUBSCRIPTION: "Just waiting here until you choose a server to give {numUnappliedGuildBoostSlots, plural, =1 {it} other {them}} to! Learn more about your Nitro Perks $[here](learnMoreHook).", GUILD_BOOSTING_USER_SETTINGS_HEADING_UNAPPLIED_GUILD_BOOST_SUBHEADING_WITH_PREMIUM_SUBSCRIPTION_V2: "Just waiting here until you **choose a server to give {numUnappliedGuildBoostSlots, plural, =1 {it} other {them}} to!** Learn more about your Nitro Perks $[here](learnMoreHook).", GUILD_BOOSTING_USER_SETTINGS_CANCEL_BOOST: "Cancel Boost", GUILD_BOOSTING_USER_SETTINGS_UNCANCEL_BOOST: "Uncancel Boost", GUILD_BOOSTING_USER_SETTINGS_BOOST_ANY_SERVER: "Boost any server", GUILD_BOOSTING_USER_SETTINGS_BOOST_THIS_SERVER: "Boost this server", GUILD_BOOSTING_USER_SETTINGS_SUBTITLE_ACTIVE_BOOSTS: "Active Boosts", GUILD_BOOSTING_USER_SETTINGS_SUBTITLE_ACTIVE_BOOSTS_FLAVOR: "These are your purchased Boosts, powering your favorite servers. You can manage them here (add, subtract, cancel — just beware the 7-day cooldown). [Learn more here.]({helpdeskArticle})", GUILD_BOOSTING_USER_SETTINGS_SUBTITLE_SUBBED_NO_ACTIVE_BOOSTS: "Give your Boosts to your favorite servers", GUILD_BOOSTING_USER_SETTINGS_SUBTITLE_NO_ACTIVE_BOOSTS_FLAVOR: "Server Boosts start at {monthlyGuildBoostPrice}.", GUILD_BOOSTING_USER_SETTINGS_SUBTITLE_NO_SUB_NO_ACTIVE_BOOSTS: "Boost your favorite servers", GUILD_BOOSTING_USER_SETTINGS_RECOMMENDED_SERVERS_HEADING: "These servers could use a Boost", GUILD_BOOSTING_USER_SETTINGS_NO_JOINED_SERVER_SUBTITLE: "Join a server to get started", GUILD_BOOSTING_USER_SETTINGS_PUBLIC_SERVER_TITLE: "Discoverable Servers", GUILD_BOOSTING_USER_SETTINGS_PUBLIC_SERVER_SUBTITLE: "Find your community on Discord", GUILD_BOOSTING_USER_SETTINGS_PUBLIC_SERVER_CTA: "Explore servers", GUILD_BOOSTING_USER_SETTINGS_UNAPPLIED_GUILD_BOOST_DESCRIPTION: "Looks like this Boost could use a new home!", GUILD_BOOSTING_USER_SETTINGS_NO_AVAILABLE_GUILD_BOOST_SLOTS: "Oh no! You don't have any available Boosts.", GUILD_BOOSTING_USER_SETTINGS_APPLIED_GUILD_BOOST_UNKNOWN_GUILD: "Unknown Server", GUILD_BOOSTING_USER_SETTINGS_PERK_TEMPLATE: "This Boost helped unlock **{perk}** for everyone", GUILD_BOOSTING_USER_SETTINGS_PERK_EMOJI_SLOTS: "{numEmojiSlots} emoji slots", GUILD_BOOSTING_USER_SETTINGS_PERK_STICKER_SLOTS: "{numStickerSlots} sticker slots", GUILD_BOOSTING_USER_SETTINGS_PERK_SOUNDBOARD_SLOTS: "{numSoundboardSlots} soundboard slots", GUILD_BOOSTING_USER_SETTINGS_PERK_STREAM_QUALITY: "{resolution} & {framerate}fps stream quality", GUILD_BOOSTING_USER_SETTINGS_PERK_AUDIO_QUALITY: "{bitrate}kbps audio quality", GUILD_BOOSTING_USER_SETTINGS_PERK_UPLOAD_SIZE_LIMIT: "{filesize} upload size limit", GUILD_BOOSTING_USER_SETTINGS_PERK_VIDEO_STAGE_SEATS: "{numVideoStageSeats} video stage seats", GUILD_BOOSTING_USER_SETTINGS_PERK_ANIMATED_GUILD_ICON: "an animated server icon", GUILD_BOOSTING_USER_SETTINGS_PERK_GUILD_INVITE_BACKGROUND: "a server invite background", GUILD_BOOSTING_USER_SETTINGS_PERK_GUILD_BANNER: "a server banner", GUILD_BOOSTING_USER_SETTINGS_PERK_CUSTOM_ROLE_ICONS: "custom role icons", GUILD_BOOSTING_USER_SETTINGS_PERK_VANITY_URL: "a custom invite link", GUILD_BOOSTING_USER_SETTINGS_BOOST_ANY_GUILD_CTA: "Don't see the server you're looking for? $[Boost any server here.](boostAnyGuildHook)", GUILD_BOOSTING_DISABLED_FOR_PAUSED_SUBSCRIPTION: "Boosting is not available while your Nitro subscription is paused!", GUILD_BOOSTING_DISABLED_FOR_PAUSED_SUBSCRIPTION_WITH_LINK: "You cannot boost while your subscription is paused. [Manage subscription](onClick)", GUILD_BOOSTING_DISABLED_HEADER: "You cannot manage Server Boosts while your Nitro subscription is paused.", GUILD_BOOSTING_TRANSFER_DISABLED_FOR_PAUSED_SUBSCRIPTION: "Transfer is unavailable while your Nitro Subscription is paused", GUILD_BOOSTING_CANCEL_DISABLED_FOR_PAUSED_SUBSCRIPTION: "You cannot cancel your boost while your Nitro Subscription is paused", MONTHLY_GUILD_SUBSCRIPTION: "Monthly Subscription (!!{planName}!!)", MULTI_MONTHS_GUILD_SUBSCRIPTION: "{intervalCount} Month Subscription (!!{planName}!!)", YEARLY_GUILD_SUBSCRIPTION: "Yearly Subscription (!!{planName}!!)", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_TITLE: "Cancel Server Boost", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_TITLE_INVENTORY: "Cancel Server Boost From Inventory", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_TITLE_GUILD: "Cancel Server Boost From A Server", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_TITLE_PENDING_CANCELLATION: "Boost Pending Cancellation", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_BODY_INVENTORY: "Are you sure you want to cancel a Server Boost from your Inventory? We’ll smash this gem to pieces.\n\nIt will be removed from associated servers and canceled from your subscription at the end of your billing period: **{endDate, date, long}**.", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_BODY_GUILD: "Are you sure you want to cancel this Server Boost? We’ll smash this gem to pieces.\n\nIt will be removed from associated servers and canceled from your subscription at the end of your billing period: **{endDate, date, long}**.", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_BODY_EXTERNAL: "Sorry, we don't currently support canceling boosts purchased through !!{paymentGatewayName}!!. You can cancel your boost through [!!{paymentGatewayName}!!'s Subscription Management]({subscriptionManagementLink}).", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_PREVIEW: "This Server Boost subscription will be canceled at the end of your Nitro or Nitro Classic billing period, **{endDate, date, medium}**.\n\nThe changes to your subscription are reflected below:", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_INVOICE_SUBSCRIPTION_CANCELLED: "**{subscriptionCount, number}** {subscriptionCount, plural, =1 {Server Boost} other {Server Boosts}} Canceled", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_BUTTON: "Yes, Cancel Boost", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_BUTTON_MOBILE: "Cancel Boost", PREMIUM_GUILD_SUBSCRIPTION_CANCEL_ERROR_MOBILE: "There was an error trying to cancel this boost.", PREMIUM_GUILD_SUBSCRIPTION_CONFIRM_TITLE: "Boost Canceled!", PREMIUM_GUILD_SUBSCRIPTION_CONFIRM_BODY: "Alright, we're ready to smash this Boost gem for you.\n\nThis Boost is scheduled to be canceled on: **{endDate, date, medium}**.\n\n**You can still use this Boost until it gets demolished!**", PREMIUM_GUILD_SUBSCRIPTION_NOTICE: "Server Boosts are here! Rally your community to boost your server.", PREMIUM_GUILD_SUBSCRIPTION_NOTICE_SMALL_GUILD: "Server Boosts are here! Rally your friends to boost your server.", PREMIUM_GUILD_SUBSCRIPTION_NOTICE_BUTTON: "See Levels & Perks", PREMIUM_GUILD_SUBSCRIPTION_GUILD_AFFINITY_NOTICE: "Support your top server with a boost and get a special badge!", PREMIUM_GUILD_SUBSCRIPTION_GUILD_AFFINITY_NOTICE_SMALL_GUILD: "Unlock perks for your favorite server and get a special badge!", PREMIUM_GUILD_SUBSCRIPTION_GUILD_AFFINITY_NOTICE_BUTTON: "Boost This Server", PREMIUM_GUILD_GRACE_PERIOD_NOTICE: "Oh no! Your server is going to lose a level! Refer to your server settings for status details.", PREMIUM_GUILD_GRACE_PERIOD_NOTICE_BUTTON: "Check Status", GUILD_BANNER_NOTICE: "Want this server to feel unique? Unlock custom server banners with **{boostsNeeded} more {boostsNeeded, plural, =1 {boost} other {boosts}}.**", GUILD_BANNER_NOTICE_CTA: "Boost This Server", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_HEADER: "Anyone can help your favorite server level up & unlock customizations, and collective perks", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_HEADER_IOS: "Support your favorite servers", PREMIUM_GUILD_SUBSCRIPTION_MARKETING_BLURB: "Give Boosts to a server and help unlock up to three levels. The more Boosts, the higher the level, the more perks unlock for everyone in that server!", PREMIUM_GUILD_SUBSCRIPTION_HEADER_SUBSCRIBE_TOOLTIP_HEADER: "Server Boosting", PREMIUM_GUILD_SUBSCRIPTION_HEADER_SUBSCRIBE_TOOLTIP_TEXT: "Level up and unlock new perks for everyone in your server!", PREMIUM_GUILD_SUBSCRIPTION_HEADER_SUBSCRIBE_TOOLTIP_CLOSE: "Got it", PREMIUM_GUILD_SUBSCRIPTION_OUT_OF_SLOTS_TITLE: "You're Out of Boosts!", PREMIUM_GUILD_SUBSCRIPTION_OUT_OF_SLOTS_PURCHASE_ON_DESKTOP: "You have no more boosts to apply. Purchase additional boosts on the desktop app.\n[Learn more.]({helpdeskArticle})", PREMIUM_GUILD_SUBSCRIPTION_OUT_OF_SLOTS_PENDING_PLAN_CHANGE: "You have no more boosts to apply. To purchase more, upgrade your plan once your pending plan change is complete.", PREMIUM_GUILD_SUBSCRIPTION_OUT_OF_SLOTS_CANCELED_SUBSCRIPTION: "You have no more boosts to apply. To purchase more, please re-subscribe and upgrade your plan.", PREMIUM_GUILD_SUBSCRIPTION_OUT_OF_SLOTS_ACCOUNT_HOLD_TITLE: "Your subscription is on hold", PREMIUM_GUILD_SUBSCRIPTION_OUT_OF_SLOTS_ACCOUNT_HOLD: "In order to use your existing Boosts or purchase more please resolve your subscription hold by updating your payment info.", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_MODAL_HEADER: "Unlock customization and upgrades for everyone:", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_MODAL_PROGRESS_BAR_HEADER: "Boosting unlocks powerful features and upgrades for everyone in the server to enjoy. Give a Boost and get:", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_MODAL_HEADER_IMG_ALT_TEXT: "Image of a pink crystal with wings", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_MODAL_FEATURE_BANNER_TITLE: "Personalize your invites", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_MODAL_FEATURE_BANNER_SUBTITLE: "Reach Boosting Level 1 and add a custom image to your server invites.", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_AUDIO_QUALITY: "Increased audio quality to {targetQuality} kbps", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_THREADS_PRIVATE: "Create private threads", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_ACTIVITIES: "Access to more fun Activities!", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_OTHER: "Powerful upgrades: larger file upload sizes, increased audio quality, and more!", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_OTHER_TIER_1: "Powerful upgrades: animated server icon, additional thread options, and more!", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_OTHER_TIER_2: "Powerful upgrades: larger file upload sizes, server banner, custom role icons, and more!", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_OTHER_TIER_3: "Powerful upgrades: Custom Invite Link, extra emoji slots, and animated server banner.", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_ROLE_ICON: "Set a unique icon for each role in the server", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_GUILD_BANNER: "Show everyone what your server is about with a server banner", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_ANIMATED_GUILD_BANNER: "Stand out with an animated server banner", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_CUSTOM_INVITE: "Customize your server invites with a custom background", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_ANIMATED_ICON: "Stand out with an animated server icon", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_FILE_UPLOAD_TIER_3: "Increased file upload limit to 100MB", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_STICKERS: "Upload custom stickers for everyone to use", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_STICKERS_UPLOAD: "Upload up to {numStickers} custom stickers", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_STICKERS_AND_EMOJIS: "Upload up to {numStickers} custom stickers and {numEmojis} custom emoji", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_VANITY_URL: "Easily add new members with a Custom Invite Link", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_SCREEN_SHARE_720P: "Screen share in 720p/60fps", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_SCREEN_SHARE_1080P: "Screen share in 1080p/60fps", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_BANNER_HEADER: "Get Boosted", PREMIUM_GUILD_SUBSCRIPTION_UPSELL_BANNER_BUTTON: "Boost Server", NAVIGATE_TO_GUILD: "Go to server", GUILD_BANNER_UPSELL_MODAL_TITLE: "This looks great!", GUILD_BANNER_UPSELL_MODAL_SUBTITLE_STATIC: "Boost your server to {targetLevelOrPlan} to use your new server banner.", GUILD_BANNER_UPSELL_MODAL_SUBTITLE_ANIMATED: "Boost your server to {targetLevelOrPlan} to apply your new animated server banner.", GUILD_BANNER_UPSELL_MODAL_PERK_INTRO: "You’ll also help unlock more customization features and utility upgrades for everyone in the server like:", GUILD_CHECKLIST_UPSELL_PROGRESS_BAR_TITLE: "Get to the next level", GUILD_CHECKLIST_UPSELL_PROGRESS_BAR_INTRO: "Boosting unlocks powerful features. Reach Level 1 and get new customizations and upgrades for the whole server.", GUILD_CHECKLIST_UPSELL_PROGRESS_BAR_FOOTER: "[But wait, there’s more. See all perks that come with Boosting.](onClick)", GUILD_CHECKLIST_UPSELL_FLAIR_TITLE: "Boosting Server Flair", GUILD_CHECKLIST_UPSELL_FLAIR_SUBTITLE: "Servers who reach Boosting Level 1 and above get unique invite embeds with custom Server Invite Backgrounds.", GUILD_CHECKLIST_UPSELL_FLAIR_INTRO: "Level 1 also unlocks more customization features and utility upgrades for everyone in the server like:", GUILD_CHECKLIST_UPSELL_BOOST_INTRO: "Boosting unlocks powerful features. Reach **Level 1** and get new customizations and upgrades for the whole server. [Learn more.](onClick)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0: "You have custom emoji, bigger uploads, and more for **!!{price}!!**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_TAX_EXCLUSIVE: "You have custom emoji, bigger uploads, and more for **!!{price}!!** + applicable taxes", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_NO_PRICE: "You have custom emoji, bigger uploads, and more", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_CANCELATION: "You have custom emoji, bigger uploads, and more for **!!{price}!!** (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_CANCELATION_TAX_EXCLUSIVE: "You have custom emoji, bigger uploads, and more for **!!{price}!!** + applicable taxes (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_CANCELATION_NO_PRICE: "You have custom emoji, bigger uploads, and more (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_ACCOUNT_HOLD: "Your subscription to Nitro Basic, which gives you custom emoji, bigger uploads, and other perks for **!!{price}!!** is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_ACCOUNT_HOLD_TAX_EXCLUSIVE: "Your subscription to Nitro Basic, which gives you custom emoji, bigger uploads, and other perks for **!!{price}!!** + applicable taxes is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_ACCOUNT_HOLD_NO_PRICE: "Your subscription to Nitro Basic, which gives you custom emoji, bigger uploads, and other perks is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_PAYMENT: "You will have custom emoji, bigger uploads, and more **as soon as your payment processes.** We will send you an email as soon as it does", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1: "You have chat perks and a Boost discount for **!!{price}!!**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_TAX_EXCLUSIVE: "You have chat perks and a Boost discount for **!!{price}!!** + applicable taxes", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_NO_PRICE: "You have chat perks and a Boost discount", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_CANCELATION: "You have chat perks and a Boost discount for **!!{price}!!** (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_CANCELATION_TAX_EXCLUSIVE: "You have chat perks and a Boost discount for **!!{price}!!** + applicable taxes (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_CANCELATION_NO_PRICE: "You have chat perks and a Boost discount (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_ACCOUNT_HOLD: "Your chat perks and a Boost discount for **!!{price}!!** subscription is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_ACCOUNT_HOLD_TAX_EXCLUSIVE: "Your chat perks and a Boost discount for **!!{price}!!** + applicable taxes subscription is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_ACCOUNT_HOLD_NO_PRICE: "Your chat perks and a Boost discount subscription is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_PAYMENT: "You will have chat perks and a Boost discount **as soon as your payment processes.** We will send you an email as soon as it does", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2: "You have premium chat, **{num, number}x** Boosts, and a Boost discount for **!!{price}!!**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_TAX_EXCLUSIVE: "You have premium chat, **{num, number}x** Boosts, and a Boost discount for **!!{price}!!** + applicable taxes", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_NO_PRICE: "You have premium chat, **{num, number}x** Boosts, and a Boost discount", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_CANCELATION: "You have premium chat, **{num, number}x** Boosts, and a Boost discount for **!!{price}!!** (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_CANCELATION_TAX_EXCLUSIVE: "You have premium chat, **{num, number}x** Boosts, and a Boost discount for **!!{price}!!** + applicable taxes (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_CANCELATION_NO_PRICE: "You have premium chat, **{num, number}x** Boosts, and a Boost discount (Pending Cancellation)", PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING: "Your subscription will pause on **{pauseDate, date, medium}** for **{pauseDuration} days**. You can cancel the pause anytime to avoid interruption to your Nitro subscription", PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING_NO_DURATION: "Your subscription will pause on **{pauseDate, date, medium}**. You can cancel pause now to avoid interruption to your Nitro subscription", PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSED: "You have paused your Nitro subscription until **{resumeDate, date, medium}**. Once your subscription resumes you will regain access to Nitro", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_ACCOUNT_HOLD: "Your premium chat, **{num, number}x** Boosts, and a Boost discount subscription for **!!{price}!!** is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_ACCOUNT_HOLD_TAX_EXCLUSIVE: "Your premium chat, **{num, number}x** Boosts, and a Boost discount subscription for **!!{price}!!** + applicable taxes is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_ACCOUNT_HOLD_NO_PRICE: "Your premium chat, **{num, number}x** Boosts, and a Boost discount subscription is **on hold**", PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_PAYMENT: "You will have premium chat, **{num, number}** Boosts, and a Boost discount **as soon as your payment processes.** We will send you an email as soon as it does", PREMIUM_SUBSCRIPTION_DESCRIPTION_DISCOUNT_APPLIED: "Your first **3 months** are **{discountedPrice}**. After that you'll be charged {price}/month", PREMIUM_SUBSCRIPTION_DESCRIPTION_PAST_DUE_WITH_HC_LINK: "Your subscription is **past due** and will **end on {endDate}**. [Learn more](onClick).", PREMIUM_SUBSCRIPTION_DESCRIPTION_PAST_DUE: "Your subscription is **past due** and will **end on {endDate}**.", PREMIUM_WITH_PREMIUM_GUILD_EXTERNAL_PLAN_DESCRIPTION: "{premiumDescription} with {premiumGuildDescription}", PREMIUM_GUILD_USER_FEATURES_HEADER: "Boost a server and get:", PREMIUM_GUILD_USER_FEATURE_MEMBER_BADGE: "A member list icon next to your name", PREMIUM_GUILD_USER_FEATURE_BOOST_CRYSTAL: "An exclusive crystal badge next to your name", PREMIUM_GUILD_USER_FEATURE_SPECIAL_ROLE: "Special role only available to those who give a Boost", PREMIUM_GUILD_USER_FEATURE_PROFILE_BADGE: "A shiny user profile badge that changes over time", PREMIUM_GUILD_USER_FEATURE_ROLE: "An exclusive new role in that server", PREMIUM_GUILD_USER_FEATURE_OTHERS: "Access to server-wide features like: custom stickers, larger file upload limits, and more!", PREMIUM_GUILD_GUILD_FEATURES_HEADER: "Boosted servers can get:", PREMIUM_GUILD_GUILD_FEATURE_EMOJI: "Room for more custom emoji", PREMIUM_GUILD_GUILD_FEATURE_AUDIO_QUALITY: "Better quality for voice channels and Go Live", PREMIUM_GUILD_GUILD_FEATURE_UPLOAD_SIZE: "Bigger upload size for all server members", PREMIUM_GUILD_GUILD_FEATURE_STICKERS: "Unlock more slots for custom stickers", PREMIUM_GUILD_GUILD_FEATURE_CUSTOMIZATION: "Server Customization for avatar, banner and URL", PREMIUM_GUILD_GUILD_FEATURE_THREADS: "Create private threads", PREMIUM_GUILD_GUILD_ROLE_ICONS: "Set and display a unique icon for each role", PREMIUM_GUILD_FULL_FEATURE_LIST: "Check out the full list of server perks in our [Server Boosting FAQ.]({helpdeskArticle})", PREMIUM_TIER_UPLOAD_ITEM: "{maxUploadPremium} uploads", PREMIUM_TIER_NITRO_BADGE_ITEM: "Special Nitro badge on your profile", PREMIUM_TIER_CUSTOM_EMOJI_ITEM: "Custom emoji anywhere", PREMIUM_TIER_HD_STREAMING_ITEM: "HD video streaming", PREMIUM_TIER_SERVER_BOOST_ITEM: "2 Server Boosts", PREMIUM_TIER_SERVER_BOOST_MORE_ITEM: "2 Server Boosts, and more!", PREMIUM_TIER_SERVER_BOOST_WITH_PERCENTAGE_ITEM: "{numBoosts, plural, =1 {# Server Boost} other {# Server Boosts}} + !!{percentageOff}!! off others", PREMIUM_TIER_CUSTOM_PROFILE_ITEM: "Custom profiles and more!", PREMIUM_TIER_0_MOBILE_PREMIUM_BADGE: "Starting at {monthlyPrice}", PREMIUM_TIER_CLIENT_THEMES_ITEM: "Color app themes", PREMIUM_TIER_2_TITLE: "Get an enhanced Discord experience for one low monthly cost.", PREMIUM_TIER_2_SUBTITLE: "Customize your profile with a unique tag, access animated emoji, enjoy bigger file uploads, boost your favorite server, and more.", PREMIUM_TIER_2_TRIAL_CTA_SUBTITLE: "Claim by signing up for Nitro and start your emoji collection today.", PREMIUM_TIER_2_TRIAL_CTA_NOTE: "*Please note that gifts and Nitro Classic are not included in this offer.", PREMIUM_TRIAL_CTA_BUTTON_VARIANT: "Try Nitro for Free", PREMIUM_TRIAL_TIER_0_CTA_BUTTON_VARIANT: "Try Nitro Basic for Free", PREMIUM_TRIAL_FREE_DURATION_DAYS: "{days, plural, =1 {# day free} other {# days free}}", PREMIUM_TRIAL_FREE_DURATION_WEEKS: "{weeks, plural, =1 {# week free} other {# weeks free}}", PREMIUM_TRIAL_FREE_DURATION_MONTHS: "{months, plural, =1 {# month free} other {# months free}}", PREMIUM_TRIAL_FREE_DURATION_YEARS: "{years, plural, =1 {# year free} other {# years free}}", PREMIUM_TRIAL_REMAINING_AVAILABILITY_DAYS: "Offer available for {days, plural, =1 {# day} other {# days}}.", PREMIUM_TRIAL_REMAINING_AVAILABILITY_HOURS: "Offer available for {hours, plural, =1 {# hour} other {# hours}} and {minutes, plural, =1 {# minute} other {# minutes}}.", PREMIUM_TRIAL_REMAINING_AVAILABILITY_MINUTES: "Offer available for {minutes, plural, =1 {# minute} other {# minutes}}.", PREMIUM_TRIAL_MARKETING_EXPERIMENT_TRIAL_HEADING: "1 Month Free!", PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_DAYS: "{days, plural, =1 {# day Free} other {# Days Free}}!", PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_WEEKS: "{weeks, plural, =1 {# Week Free} other {# Weeks Free}}!", PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_MONTHS: "{months, plural, =1 {# Month Free} other {# Months Free}}!", PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_YEARS: "{years, plural, =1 {# Year Free} other {# Years Free}}!", PREMIUM_TRIAL_MARKETING_TRIAL_CTA_DAYS: "{days, plural, =1 {Try # day Free} other {Try # Days Free}}", PREMIUM_TRIAL_MARKETING_TRIAL_CTA_WEEKS: "{weeks, plural, =1 {Try # Week Free} other {Try # Weeks Free}}", PREMIUM_TRIAL_MARKETING_TRIAL_CTA_MONTHS: "{months, plural, =1 {Try # Month Free} other {Try # Months Free}}", PREMIUM_TRIAL_MARKETING_TRIAL_CTA_YEARS: "{years, plural, =1 {Try # Year Free} other {Try # Years Free}}", PREMIUM_TRIAL_MARKETING_TRIAL_BODY: "Get your first {duration} free when signing up for Nitro. Offer available for...", PREMIUM_TRIAL_MARKETING_TRIAL_BODY_REMAINING: "Get your first {duration} free when signing up for Nitro. Offer available for **{remaining}**.", PREMIUM_TRIAL_MARKETING_TRIAL_BODY_REMAINING_DAYS: "{days, plural, =1 {# day} other {# days}}", PREMIUM_TRIAL_MARKETING_TRIAL_BODY_REMAINING_HOURS: "{hours, plural, =1 {# hour} other {# hours}}*", PREMIUM_TRIAL_MARKETING_TRIAL_BODY_REMAINING_MINUTES: "{minutes, plural, =1 {# minute} other {# minutes}}", PREMIUM_TRIAL_MARKETING_EXPERIMENT_TRIAL_CTA: "Try Nitro for Free", PREMIUM_TRIAL_MARKETING_EXPERIMENT_GIFT_HEADING: "Give the gift of Nitro", PREMIUM_TRIAL_MARKETING_EXPERIMENT_GIFT_BODY: "Gift someone Nitro to give them access to profile customization, emoji, and superpowered chat features.", PREMIUM_TRIAL_MARKETING_EXPERIMENT_SEASONAL_GIFT_HEADING: "Gift the joy of Nitro", PREMIUM_TRIAL_MARKETING_EXPERIMENT_SEASONAL_GIFT_BODY: "Gift Nitro and unlock profile customization, custom emoji, and superpowered chat features for your friends to unleash more holiday fun.", PREMIUM_TRIAL_UPSELL_STICKERS_IN_HOUSE: "Subscribe to add personality to your conversations.", PREMIUM_TRIAL_ACTION_SHEET_TIER_0_HEADER: "Try Nitro Basic free for 30 days", PREMIUM_TRIAL_ACTION_SHEET_TIER_2_HEADER: "Try Nitro free for 30 days", PREMIUM_TRIAL_ACTION_SHEET_HEADER: "Try {displayName} free for {duration}", PREMIUM_TRIAL_ACTION_SHEET_INTERVAL_CTA: "Continue to {duration} trial", PREMIUM_TRIAL_ACTION_SHEET_CTA: "Continue to 30 day trial", PREMIUM_TRIAL_ACTION_SHEET_CUSTOM_APP_ICONS: "Custom app icons", PREMIUM_TRIAL_ACTION_SHEET_REVAMP_HEADER_PILL: "Enjoy {duration} on us", PREMIUM_TRIAL_ACTION_SHEET_REVAMP_HEADER: "Unleash more fun with {nitroTierName}", PREMIUM_TRIAL_ACTION_SHEET_REVAMP_NITRO_FEATURES: "Unique profile customizations and more!", PREMIUM_TRIAL_ACTION_SHEET_REVAMP_NITRO_BASIC_FEATURES: "Add a custom app icon, super reactions, and more!", PREMIUM_TRIAL_ACTION_SHEET_REVAMP_SUBHEADER: "{nitroTierName} starts at {price}/month", PREMIUM_TRIAL_TUTORIAL_COACHMARK_HEADER: "Welcome to Nitro!", PREMIUM_TRIAL_TUTORIAL_COACHMARK_HEADER_COMPLETED: "You’re ready to blast off!", PREMIUM_TRIAL_TUTORIAL_COACHMARK_HEADER_COMPLETED_ONE: "1 down, 2 to go!", PREMIUM_TRIAL_TUTORIAL_COACHMARK_HEADER_LAST_ONE: "Last one!", PREMIUM_TRIAL_TUTORIAL_COACHMARK_SUB_HEADER: "Check out a few of your new perks. Choose one to get started.", PREMIUM_TRIAL_TUTORIAL_COACHMARK_SUB_HEADER_CHOOSE_ANOTHER_PERK: "Choose another perk to explore.", PREMIUM_TRIAL_TUTORIAL_COACHMARK_SUB_HEADER_COMPLETED: "Have fun trying out all your new perks.", PREMIUM_TRIAL_TUTORIAL_COACHMARK_SUB_HEADER_LAST_ONE: "Check out your last perk.", PREMIUM_TRIAL_TUTORIAL_COACHMARK_CUSTOM_PROFILES: "Custom profiles", PREMIUM_TRIAL_TUTORIAL_COACHMARK_SERVER_PROFILES: "Server profiles", PREMIUM_TRIAL_TUTORIAL_COACHMARK_BOOSTS: "Server Boosts", PREMIUM_TRIAL_TUTORIAL_COACHMARK_EMOJI: "Unlocked emoji", PREMIUM_TRIAL_TUTORIAL_COACHMARK_MARKETING_REDIRECT: "See all perks", PREMIUM_TRIAL_TUTORIAL_COACHMARK_MARKETING_CLOSE: "Close", PREMIUM_TRIAL_TUTORIAL_COACHMARK_CLOSE_CONFIRMATION_HEADER: "Close this tutorial?", PREMIUM_TRIAL_TUTORIAL_COACHMARK_CLOSE_CONFIRMATION_SUBHEADER: "You won't be able to reopen this tutorial once it's closed.", PREMIUM_TRIAL_TUTORIAL_COACHMARK_CLOSE_YES: "Yes, close", PREMIUM_TRIAL_TUTORIAL_COACHMARK_CLOSE_CANCEL: "Cancel", PREMIUM_TRIAL_TUTORIAL_COLLAPSED_COACHMARK_HEADING: "Explore your Nitro perks", PREMIUM_TRIAL_TUTORIAL_FILE_UPLOAD_TOOLTIP: "Upload files up to 500MB with Nitro!", PREMIUM_TRIAL_TUTORIAL_STICKER_TOOLTIP: "Use stickers from any of your servers in **all** your servers and DMs!", PREMIUM_TRIAL_TUTORIAL_STICKER_TOOLTIP_UNFORMATTED: "Use stickers from any of your servers in all your servers and DMs!", PREMIUM_TRIAL_TUTORIAL_EMOJI_TOOLTIP: "Use emoji from any of your servers in **all** your servers and DMs!", PREMIUM_TRIAL_TUTORIAL_EMOJI_TOOLTIP_UNFORMATTED: "Use emoji from any of your servers in all your servers and DMs!", PREMIUM_TRIAL_TUTORIAL_EMOJI_FLOW_DISABLED_TOOLTIP: "None of your servers have custom emoji. Upload custom emoji in the Server Settings.", PREMIUM_TRIAL_TUTORIAL_BOOST_FLOW_DISABLED_TOOLTIP: "Go to one of your servers to check out Server Boosts.", PREMIUM_TRIAL_TUTORIAL_OPEN_CHANNEL_TOOLTIP: "Open a DM or text channel to check out unlocked emoji.", PREMIUM_TRIAL_TUTORIAL_CHANNEL_DOESNT_ALLOW_EMOJI_TOOLTIP: "This channel doesn’t allow custom emoji. Go to another channel to check out unlocked emoji.", PREMIUM_TRIAL_TUTORIAL_WELCOME_BACK: "Welcome back!", PREMIUM_TRIAL_OFFER_ENDS_MINUTES: "Offer ends in {numMinutes, plural, one {1 minute} other {{numMinutes} minutes}}", PREMIUM_TRIAL_OFFER_ENDS_HOURS: "Offer ends in {numHours, plural, one {{numHours} hour} other {{numHours} hours}}", PREMIUM_TRIAL_OFFER_ENDS_DAYS: "Offer ends in {numDays, plural, one {{numDays} day} other {{numDays} days}}", PREMIUM_FREE_NITRO_TRIAL_TEXT: "Free Nitro trial", PREMIUM_DISCOUNT_BADGE: "Discount", PREMIUM_DISCOUNT_AMOUNT_OFF_BADGE: "!!{percent, number}!!% discount", PREMIUM_DISCOUNT_CTA: "Save !!{percent, number}!!% on Nitro", PREMIUM_DISCOUNT_CTA_WITHOUT_PERCENT: "Save on Nitro", PREMIUM_TIER_CARD_DISCOUNT_HEADER_BEFORE_REDEMPTION: "Pay just **{discountedPrice}** a month for **3 months!** Then pay {regularPrice}.", PREMIUM_TIER_CARD_DISCOUNT_HEADER_BEFORE_REDEMPTION_GENERIC: "Pay just **{discountedPrice}** for **{numMonths, plural, one {1 month!} other {{numMonths} months!}}** Then pay {regularPrice}.", PREMIUM_TIER_CARD_DISCOUNT_HEADER_AFTER_REDEMPTION: "Your !!{percent, number}!!% discount will end 3 months after purchase. After that you'll be charged {regularPrice}.", PREMIUM_TIER_CARD_DISCOUNT_HEADER_AFTER_REDEMPTION_GENERIC: "Your !!{percent, number}!!% discount will end {numMonths, plural, one {1 month} other {{numMonths} months}} after purchase. After that you'll be charged {regularPrice}.", PREMIUM_TIER_CARD_DISCOUNT_HEADER_AFTER_REDEMPTION_GENERIC_TAX_EXCLUSIVE: "Your !!{percent, number}!!% discount will end {numMonths, plural, one {1 month} other {{numMonths} months}} after purchase. After that you'll be charged {regularPrice} + applicable taxes.", PREMIUM_TIER_SUBSCRIPTION_DESCRIPTION_AFTER_REDEMPTION: "Your first **3 months** are **{discountedPrice}**. After that you'll be charged {regularPrice}.", PREMIUM_TIER_SUBSCRIPTION_DESCRIPTION_AFTER_REDEMPTION_WITH_ACTIVE_SUB: "Your next **{numMonths, plural, one {month} other {{numMonths} months}}** {numMonths, plural, one {is} other {are}} **{discountedPrice}**. After that you'll be charged {regularPrice}/month.", PREMIUM_TIER_CARD_DISCOUNT_APPLIED: "discount applied", CHURN_DISCOUNT_DESCRIPTION: "Before canceling, enjoy **{percent, number}% off your Nitro subscription** for {numMonths, plural, one {1 month} other {{numMonths} months}}.", CHURN_DISCOUNT_CLAIM: "Claim Discount", PREMIUM_TIER_CARD_DISCOUNT_APPLIED_PUNCTUATED: "Discount Applied!", PREMIUM_DISCOUNT_SWEET: "Sweet", PREMIUM_TUTORIAL_GOT_IT: "Got it!", CHURN_DISCOUNT_CONFIRM_HEADER: "Confirm {percent, number}% Off Discount", CHURN_DISCOUNT_CONFIRM_DESCRIPTION: "Your {percent, number}% discount will end {numMonths, plural, one {1 month} other {{numMonths} months}} after purchase. After than you’ll be charged **{price}** a month.", CHURN_DISCOUNT_CONFIRM_LEGALESE: "By clicking “Confirm Discount” you are agreeing to continue your Nitro recurring subscription. You’ll be charged {discountedPrice}/{billingPeriod} for {numMonths, plural, one {1 month} other {{numMonths} months}}, and then {fullPrice}/{billingPeriod} after that until you cancel. Cancel anytime from your Settings page. [Paid Services Terms]({helpdeskArticle}) apply.", CHURN_DISCOUNT_NEVERMIND: "Nevermind", CHURN_DISCOUNT_CONFIRM_DISCOUNT: "Confirm Discount", CHURN_DISCOUNT_REDEMPTION_ERROR: "Something went wrong. Try again.", PREMIUM_TIER_CARD_ANNUAL_DISCOUNT_HEADER: "Your **{percent, number}% discount** will end 1 year after purchase. After that you'll be charged **{regularPrice}**, + applicable taxes.", BILLING_ANNUAL_DISCOUNT_PAYMENT_MODAL_INFO: "Your first year of Nitro is **{discountedPrice}**. After that it will be **{regularPrice}, billed yearly.**", BILLING_ANNUAL_DISCOUNT_TIER_CARD_YEARLY_PRICE: "**{discountedPrice}/ first year**", BILLING_ANNUAL_DISCOUNT_TIER_CARD_YEARLY_PRICE_SUBTEXT: "After that {regularPrice} / year", BILLING_ANNUAL_DISCOUNT_YEARLY_PRICE_SUBTEXT: "{regularPrice}/year after first year", PREMIUM_TIER_CARD_TRIAL_HEADER_BEFORE_REDEMPTION_NEW: "Try {planName} for {duration} on us. Then !!{price}!!.", PREMIUM_TIER_CARD_TRIAL_HEADER_AFTER_REDEMPTION: "Your **free trial ends {remainingTime, plural, =0 {today} one {in # day} other {in # days}}**. After that, you’ll be charged !!{price}!!.", PREMIUM_TIER_CARD_TRIAL_ACTIVATED: "free trial activated", PREMIUM_TIER_CARD_TRIAL_REVAMP_HEADER_PILL: "Enjoy {duration} on us", INCLUDED: "Included", NOT_INCLUDED: "Not included", MARKETING_REFRESH_PREMIUM_FEATURES_GO_LIVE_INFO: "Up to 4K source resolution and up to 60fps screen share.", MARKETING_REFRESH_PREMIUM_TIER_2_CTA_TITLE: "Ready to upgrade to Nitro?", MARKETING_REFRESH_PREMIUM_TIER_2_CTA_SUBTITLE: "Pick the plan that works best for you and start your emoji collection.", MARKETING_REFRESH_PREMIUM_TIER_1_CTA_DESCRIPTION_WITH_PRICE_NO_INFO_HOOK: "Want to keep it simple? Enjoy a light plan with fewer perks, continue to support Discord, and get !!{discountPercentage}!! off Server Boosts. Choose between **!!{monthlyPrice}!! per month** or **!!{yearlyPrice}!! per year**.", HOLIDAY_PREMIUM_MARKETING_FEATURE_HEADER: "Here's what you get with Nitro:", GIFT_NITRO: "Gift Nitro", GIFT_NITRO_TIER_0: "Gift Nitro Basic", SEASONAL_GIFTING_PREMIUM_HERO_HEADER: "Our Holiday Gift Guide", SEASONAL_GIFTING_PREMIUM_HERO_BODY_INTRO: "Nitro. That's it, that's the guide.", SEASONAL_GIFTING_PREMIUM_HERO_BODY: "Give a friend the gift of higher quality streams, multiple custom profiles, and all the emoji!", SEASONAL_GIFTING_CUSTOMIZE_YOUR_GIFT_BOX: "Customize your gift BOX:", SEASONAL_GIFTING_SPREAD_CHEER_TOOLTIP: "Spread some cheer! Gift Nitro in special holiday gift boxes.", SEASONAL_GIFTING_OPEN_GIFT: "Open Gift", SEASONAL_GIFTING_OPTION_SNOWGLOBE: "Wumpus Snow Globe", SEASONAL_GIFTING_OPTION_BOX: "Wumpus Box", SEASONAL_GIFTING_OPTION_CUP: "Wumpus Cup", SEASONAL_GIFTING_INFO_TOOLTIP: "Your friend will see this image when they receive their gift.", SEASONAL_GIFTING_POPUP_HEADER: "Looking for a holiday gift?", SEASONAL_GIFTING_DM_POPUP_HEADER: "Gift Nitro for the holidays.", SEASONAL_GIFTING_DM_POPUP_BODY: "Send a personalized Nitro gift to spread holiday cheer!", SEASONAL_GIFTING_MAKE_SOMEONES_DAY_TOOLTIP: "Make someone's day when you send some sweet Nitro their way.", SEASONAL_GIFTING_SEND_GIFT_CTA: "Send gift", SEASONAL_GIFTING_DM_POPUP_CTA: "Try it out", PREMIUM_MARKETING_FEATURE_EMOJI_TITLE: "More Emoji Power", PREMIUM_MARKETING_FEATURE_PREMIUM_BADGE_DESCRIPTION_VARIANT_1: "Get this cool badge for being a Nitro subscriber.", PREMIUM_MARKETING_FEATURE_PREMIUM_GO_LIVE_TITLE: "HD Video", PREMIUM_MARKETING_VARIANT_2_FEATURE_CLIENT_THEMES_TITLE: "Color Themes", PREMIUM_MARKETING_VARIANT_2_FEATURE_CLIENT_THEMES_DESCRIPTION: "Add your vibe to Discord with unique theme colors.", PREMIUM_MARKETING_FEATURE_CUSTOM_APP_ICONS_TITLE: "Custom App Icons", PREMIUM_MARKETING_FEATURE_CUSTOM_APP_ICONS_DESCRIPTION: "Choose a mobile and in-app desktop icon that fits your vibe.", PREMIUM_MARKETING_SURFACE_PERKS_TITLE: "The Perks", PREMIUM_MARKETING_SURFACE_HERO_HEADING: "Upgrade Your Discord Experience", PREMIUM_MARKETING_SURFACE_HERO_SUBHEADING: "Get more of what you love when you subscribe to Nitro.", PREMIUM_MARKETING_SURFACE_TOP_PERK_EMOJI: "Use your favorite emoji everywhere", PREMIUM_MARKETING_SURFACE_TOP_PERK_PROFILE: "Add more personality to your profile", PREMIUM_MARKETING_SURFACE_TOP_PERK_HD_STREAMING: "Stream in sweet, sweet HD resolution", PREMIUM_MARKETING_SURFACE_TOP_PERK_FILE_UPLOADS: "Share 100MB videos and photos", PREMIUM_MARKETING_SURFACE_TOP_PERK_FILE_UPLOADS_INCREASE: "Share {premiumMaxSize} videos and photos", PREMIUM_MARKETING_SURFACE_PERK_HEADING_COMING_SOON: "More Coming Soon", PREMIUM_MARKETING_SURFACE_PERK_DESCRIPTION_COMING_SOON: "We're always adding new perks to Discord Nitro.", PREMIUM_MARKETING_SURFACE_FEATURE_GRID_HEADING: "Not enough? You get this stuff too!", PREMIUM_MARKETING_SURFACE_SIDEBAR_ABOUT: "About Nitro", PREMIUM_MARKETING_SURFACE_FEATURE_PREMIUM_GUILD_TITLE: "Server Boosting", PREMIUM_MARKETING_SURFACE_FEATURE_PREMIUM_GUILD_DESCRIPTION: "Get {numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}} and !!{percentageOff}!! off extra Boosts to unlock server features.", PREMIUM_MARKETING_SURFACE_FEATURE_STICKERS_TITLE: "Special Stickers", PREMIUM_MARKETING_SURFACE_FEATURE_STICKERS_DESCRIPTION: "Use custom stickers anywhere.", PREMIUM_MARKETING_SURFACE_PREMIUM_TIER_2_DESCRIPTION: "Pick the plan that works for you. Cancel anytime.", PREMIUM_MARKETING_PERKS_TITLE: "Favorite Nitro Perks", PREMIUM_MARKETING_PERKS_TITLE_NITRO_HOME: "More Perks, More Fun", PREMIUM_MARKETING_PERKS_SEE_ALL: "See All", PREMIUM_MARKETING_PERKS_SEE_LESS: "See Less", PREMIUM_MARKETING_UPLOADS_PERK_TITLE: "From clips to pics, share away with bigger file uploads", PREMIUM_MARKETING_STREAMING_PERK_TITLE: "Stream apps and games in sweet, sweet HD", PREMIUM_MARKETING_EMOJI_PERK_TITLE: "Hype, roast, and meme with custom emoji anywhere.", PREMIUM_MARKETING_BOOST_PERK_TITLE: "Unlock perks for your communities with 2 Server Boosts", PREMIUM_MARKETING_STICKER_PERK_TITLE_OLD: "Super Stickers", PREMIUM_MARKETING_STICKER_PERK_TITLE: "Special Sticker Access", PREMIUM_MARKETING_STICKER_PERK_DESCRIPTION: "Use custom stickers anywhere.", PREMIUM_MARKETING_PER_GUILD_PROFILES_PERK_TITLE: "Custom Profiles", PREMIUM_MARKETING_PER_GUILD_PROFILE_THEMES_PERK_DESCRIPTION_CHECK_IT_OUT: "Use a different avatar, profile theme, banner, and bio in each of your servers. [Check it out.](onCheckItOutClick)", PREMIUM_MARKETING_PER_GUILD_PROFILE_THEMES_PERK_DESCRIPTION_TRY_IT_OUT: "Use a different avatar, profile theme, banner, and bio in each of your servers. [Try it out.](onTryItOutClick)", PREMIUM_MARKETING_BADGE_PERK_TITLE: "Nitro Badge", PREMIUM_MARKETING_BADGE_PERK_DESCRIPTION: "Show off your Nitro membership with a badge in your profile.", PREMIUM_MARKETING_LONGER_MESSAGES_PERK_TITLE: "Longer Messages", PREMIUM_MARKETING_LONGER_MESSAGES_PERK_DESCRIPTION: "Say what's on your mind with an increased character count.", PREMIUM_MARKETING_MORE_GUILDS_PERK_TITLE: "More Servers", PREMIUM_MARKETING_MORE_GUILDS_PERK_DESCRIPTION: "Join up to 200 of your favorite servers.", PREMIUM_MARKETING_SUPER_REACTIONS_PERK_TITLE: "Super Reactions", PREMIUM_MARKETING_SUPER_REACTIONS_PERK_TITLE_V2: "Unlimited Super Reactions", PREMIUM_MARKETING_SUPER_REACTIONS_PERK_TITLE_UNLIMITED: "Unlimited Super Reactions", PREMIUM_MARKETING_SUPER_REACTIONS_PERK_DESCRIPTION: "Hype up the chat with action-packed, animated reactions.", PREMIUM_MARKETING_SUPER_REACTIONS_PERK_DESCRIPTION_V2: "We made Super Reactions unlimited so you can unleash the chaos in your chats.", PREMIUM_MARKETING_UPLOADS_SMALL_PERK_TITLE: "{premiumMaxSize} Uploads", PREMIUM_MARKETING_UPLOADS_SMALL_PERK_DESCRIPTION: "Upload what you want with increased {premiumMaxSize} upload size.", PREMIUM_MARKETING_STREAMING_SMALL_PERK_DESCRIPTION: "Better video resolutions for all your streams. Stream apps and games in sweet, sweet HD.", PREMIUM_MARKETING_VIDEO_BACKGROUND_PERK_TITLE: "Video Backgrounds", PREMIUM_MARKETING_VIDEO_BACKGROUND_PERK_DESCRIPTION: "Make video calls unique with your own backgrounds.", PREMIUM_MARKETING_STICKER_PERK_LONG_DESCRIPTION: "Use custom stickers anywhere and access 300+ Nitro exclusives.", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_TITLE: "Check Out These Nitro Favorites", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_SUBTITLE: "Explore the most popular perks that come with your Nitro subscription.", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_PROFILES_TITLE: "Customize Your Profile", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_PROFILES_SUBTITLE: "Use a different avatar, profile theme, banner, and bio in each of your servers.", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_PROFILES_DESCRIPTION: "Explore all the ways to customize your profiles across servers. Only available with Nitro.", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_THEMES_TITLE: "Color Your Experience", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_THEMES_SUBTITLE: "Add your vibe to Discord with unique theme colors.", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_THEMES_DESCRIPTION: "Bring some fresh hues to your Discord views with themes. Choose from over 20 color themes, like Cotton Candy, Midnight Blurple, and many more.", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_BOOSTS_TITLE: "2 Server Boosts + 30% off", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_BOOSTS_SUBTITLE: "Give your favorite communities a boost and unlock awesome perks.", PREMIUM_MARKETING_PERKS_DISCOVERABILITY_BOOSTS_DESCRIPTION: "Support your favorite communities and friend servers! Nitro members get 2 free Boosts & 30% off all others.", PREMIUM_MARKETING_WHATS_NEW_TITLE_NON_SUB: "See What's New With Nitro", PREMIUM_MARKETING_WHATS_NEW_SUBTITLE_NON_SUB: "These are the freshest offerings exclusive for our illustrious Nitro members. We're adding more all the time!", PREMIUM_MARKETING_WHATS_NEW_TITLE_SUB: "Explore What's New", PREMIUM_MARKETING_WHATS_NEW_SUBTITLE_SUB: "Check back here often for the latest offerings exclusive for our illustrious Nitro members, like yourself.", PREMIUM_MARKETING_WHATS_NEW_ENTRANCE_SOUNDS_TITLE: "Entrance Sounds", PREMIUM_MARKETING_WHATS_NEW_ENTRANCE_SOUNDS_SUBTITLE: "Pick a Soundboard sound to play whenever you join a voice channel.", PREMIUM_MARKETING_WHATS_NEW_ENTRANCE_SOUNDS_DESCRIPTION_NON_SUB: "Drop into voice channels in style with your favorite Soundboard sound. Now available on Nitro.", PREMIUM_MARKETING_WHATS_NEW_ENTRANCE_SOUNDS_DESCRIPTION_SUB: "Ready your airhorns! You can now drop into voice channels in style with Soundboard sound. Now available on Nitro.", PREMIUM_MARKETING_WHATS_NEW_REMIXING_TITLE: "Remix on Mobile", PREMIUM_MARKETING_WHATS_NEW_REMIXING_SUBTITLE: "Media editing and meme creation, at the speed of Discord.", PREMIUM_MARKETING_WHATS_NEW_REMIXING_DESCRIPTION_NON_SUB: "Nitro members get early beta access to the Remix tool. Join Nitro to create and share your own memes within the mobile app, and much more!", PREMIUM_MARKETING_WHATS_NEW_REMIXING_DESCRIPTION_SUB: "Nitro members get early beta access to the Remix tool on mobile. Remix lets you create and share your own memes by adding text, emoji, and stickers to images. Head on over to your mobile app to check it out!", PREMIUM_MARKETING_WHATS_NEW_AVATAR_DECO_TITLE: "New Avatar Decorations", PREMIUM_MARKETING_WHATS_NEW_AVATAR_DECO_SUBTITLE_SUB: "Enjoy special deals in the Shop, where you can buy and collect your favorite styles!", PREMIUM_MARKETING_WHATS_NEW_AVATAR_DECO_SUBTITLE_NON_SUB: "Unlock access to the Shop, where you can buy and collect the latest styles for your avatar.", PREMIUM_MARKETING_WHATS_NEW_AVATAR_DECO_DESCRIPTION_SUB: "Ready for a new look? The latest avatar decorations just landed in the Shop! Find your favorite styles to rock for any occasion.", PREMIUM_MARKETING_WHATS_NEW_AVATAR_DECO_DESCRIPTION_NON_SUB: "Ready for a new look? Get Nitro to buy and collect your favorite avatar decorations to rock for any occasion.", PREMIUM_MARKETING_WHATS_NEW_PROFILE_EFFECTS_TITLE: "Profile Effects", PREMIUM_MARKETING_WHATS_NEW_PROFILE_EFFECTS_SUBTITLE: "Level up your look with the latest addition to the Shop: animated profile effects.", PREMIUM_MARKETING_WHATS_NEW_PROFILE_EFFECTS_DESCRIPTION_SUB: "Complete your profile vibe with fun, flashy profile effects. Early access to the Shop and special deals are now available with Nitro.", PREMIUM_MARKETING_WHATS_NEW_PROFILE_EFFECTS_DESCRIPTION_NON_SUB: "Complete your profile vibe with fun, flashy profile effects. Unlock exclusive Shop access and special deals with Nitro.", PREMIUM_MARKETING_WHATS_NEW_CLIPS_SUBTITLE: "Capture your favorite streaming moments right in Discord and share with friends.", PREMIUM_MARKETING_WHATS_NEW_CLIPS_DESCRIPTION_SUB: "Start creating and sharing your favorite clips. Early access now available with Nitro.", PREMIUM_MARKETING_WHATS_NEW_CLIPS_DESCRIPTION_NON_SUB: "Clip, edit, share! It's as simple as that. Get early access to clips, only with Nitro.", PREMIUM_MARKETING_WHATS_NEW_CLIPS_CTA: "Explore clips", PREMIUM_MARKETING_WHATS_NEW_SPECIAL_SHOP_PERKS_TITLE: "Special Shop Perks", PREMIUM_MARKETING_WHATS_NEW_SPECIAL_SHOP_PERKS_SUBTITLE: "Enjoy member pricing plus Nitro exclusive items in the Shop.", PREMIUM_MARKETING_PLAN_COMPARISON_REFERRAL_PROGRAM: "Share Nitro trials with friends", PREMIUM_MARKETING_WHATS_NEW_REFERRAL_PROGRAM_TITLE: "Share Nitro with Friends", PREMIUM_MARKETING_WHATS_NEW_REFERRAL_PROGRAM_SUBTITLE: "Get up to three 2-week Nitro trials and give the gift of Discord without limits.", PREMIUM_MARKETING_WHATS_NEW_REFERRAL_PROGRAM_DESCRIPTION: "Eligibility requirements apply. See our [Help Center]({helpdeskArticle}) for more information.", PREMIUM_MARKETING_WHATS_NEW_SERVER_PROFILES_TITLE: "Elevate Your Server Profile", PREMIUM_MARKETING_WHATS_NEW_SERVER_PRORFILES_SUBTITLE: "Personalize your presence in different servers with unique avatar decorations and profile effects.", PREMIUM_MARKETING_WHATS_NEW_CUSTOM_NOTIFICATION_TITLE: "Custom Notification Sounds", PREMIUM_MARKETING_WHATS_NEW_CUSTOM_NOTIFICATION_SUBTITLE: "Set custom sounds for the servers and DMs that matter most.", PREMIUM_MARKETING_WHATS_NEW_CUSTOM_NOTIFICATION_DESCRIPTION: "Now available with Nitro", PREMIUM_MARKETING_WHATS_NEW_NON_NITRO_CUSTOM_NOTIFICATION_DESCRIPTION: "Get Nitro", PREMIUM_MARKETING_WHATS_NEW_NITRO_CUSTOM_NOTIFICATION_DESCRIPTION: "Take me there", PREMIUM_MARKETING_WHATS_NEW_NEW_APP_STYLES_TITLE: "New Styles Added", PREMIUM_MARKETING_WHATS_NEW_NEW_APP_STYLES_SUBTITLE: "Deck out your Discord with new custom app icons and a new color Theme.", PREMIUM_MARKETING_WHATS_NEW_NEW_APP_STYLES_DESCRIPTION: "Now available with Nitro", PREMIUM_MARKETING_WHATS_NEW_NON_NITRO_NEW_APP_STYLES: "Get Nitro", PREMIUM_MARKETING_WHATS_NEW_NITRO_NEW_APP_STYLES: "Take me there", PREMIUM_MARKETING_WHATS_NEW_SO_NEW_BADGE: "SO NEW", PREMIUM_MARKETING_WHATS_NEW_NEW_NEW_BADGE: "NEW NEW", COMING_SOON: "Coming Soon!", NEW_DROP: "New Drop", VISIT_THE_SHOP_CTA: "Visit the Shop", SUBSCRIBER_NITRO_HOME_TITLE: "Welcome to\n\nYour Nitro Home", SUBSCRIBER_NITRO_HOME_TITLE_ONE_LINE: "Welcome to Your Nitro Home", SUBSCRIBER_NITRO_HOME_SUBTITLE: "Share the magic of Nitro.", SUBSCRIBER_NITRO_HOME_MANAGE_MEMBERSHIP_TITLE: "Looking to manage your membership?", SUBSCRIBER_NITRO_HOME_MANAGE_MEMBERSHIP_SUBTITLE: "You can manage your {planName} membership in the Subscriptions tab in Settings. Your {planName} subscription will automatically renew on **{renewalDate, date, short}**.", PROFILE_THEMES_TOOLTIP_TITLE: "Customize more with Profile Themes", PROFILE_THEMES_TOOLTIP_DESCRIPTION_PREMIUM: "Add your personal style to your profile with custom colors!", PREMIUM_SWITCH_PLAN_DISABLED_PENDING_MUTATION_PLAN: "You have to cancel your pending plan change before choosing another plan.", PREMIUM_SWITCH_PLAN_DISABLED_PENDING_MUTATION_PREMIUM_GUILD_SUBSCRIPTION: "You have a pending boost cancellation. You have to uncancel it before switching plans.", PREMIUM_SWITCH_PLAN_DISABLED_IN_TRIAL: "You cannot switch plans during your trial.", PREMIUM_TIER_1_ACCOUNT_CREDIT_HEADER: "Nitro Classic is no longer available for purchase in your region, but you can still redeem your credits. Enjoy your perks!", PREMIUM_TIER_1_ACCOUNT_CREDIT_BANNER_DESCRIPTION: "Get chat perks and a Boost discount with Nitro Classic", PREMIUM_TIER_1_ACCOUNT_CREDIT_BANNER_CTA: "Subscribe", PREMIUM_GUILD_UNLOCK_WTH_BOOSTING_CTA: "Unlock with Boosting", PREMIUM_GUILD_FEATURES_UPLOAD_SIZES_MOBILE: "Increased community-wide upload sizes", PREMIUM_GUILD_FEATURES_CUSTOM_EMOJI_MOBILE: "Room for more custom emoji", PREMIUM_GUILD_FEATURES_VOICE_QUALITY: "Better quality for voice channels and Go Live", PREMIUM_GUILD_FEATURES_UPSELL_BANNER_SUBSCRIBE: "Subscribe to Nitro to get {numFreeGuildSubscriptions, plural, =1 {# Boost} other {# Boosts}} and a Boost discount! [Learn more about Server Boosting.]({helpdeskArticle})", PREMIUM_GUILD_SUBSCRIBER_FEATURE_MEMBER_BADGE: "Show off with a new Member List icon", PREMIUM_GUILD_SUBSCRIBER_FEATURE_PROFILE_BADGE: "New profile badge that evolves over time", PREMIUM_GUILD_SUBSCRIBER_FEATURE_ROLE: "Get an exclusive Booster role", PREMIUM_GUILD_SUBSCRIBE_SELECT_GUILD_HEADER: "Select a Server", PREMIUM_GUILD_SUBSCRIBE_SELECT_GUILD_TRANSFER_HEADER: "Select a server to transfer to", PREMIUM_GUILD_SUBSCRIBE_SEARCH_GUILD_PLACEHOLDER: "Search servers", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_TRANSFER_FROM_GUILD: "Current {guildCount, plural, =1 {server} other {servers}}", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_TRANSFER_TO_GUILD: "Move {slotCount, plural, =1 {boost} other {boosts}} to", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_BLURB: "Ready to Boost this server?", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_TRANSFER_HEADER: "Transfer Server Boost?", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_TRANSFER_BLURB: "Are you sure you want to transfer {slotCount, plural, =1 {this Server Boost} other {these Server Boosts}}? {guildCount, plural, =1 {The current server} other {The current servers}} will lose progress if you continue.", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_COOLDOWN_WARNING: "Boosting this server will prevent transferring {slotCount, plural, =1 {this Boost} other {these Boosts}} to another server for {days, plural, =1 {# day} other {# days}}.", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_CANCEL_WARNING: "{canceledCount, plural, =1 {This Boost is} other {# Boosts are}} pending cancellation and will automatically be removed from this server on {date, date, long}.", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_CONFIRMATION: "{slotCount, plural, =1 {Boost} other {Boost # times}}", PREMIUM_GUILD_SUBSCRIBE_CONFIRM_CONFIRMATION_LABEL: "Select this server. It will take a moment for your {slotCount, plural, =1 {Boost} other {Boosts}} to take effect.", PREMIUM_GUILD_SUBSCRIBE_TRANSFER_CONFIRM_CONFIRMATION: "Yes, Transfer {slotCount, plural, =1 {Boost} other {Boosts}}", PREMIUM_GUILD_SUBSCRIBE_TRANSFER_ERROR_HEADER: "Transfer Error", PREMIUM_GUILD_SUBSCRIBE_TRANSFER_ERROR_BODY: "There was an error with the Boost transfer. Please try again.", PREMIUM_GUILD_SUBSCRIBE_TRANSFER_CONFIRM_CONFIRMATION_LABEL: "Transfer {slotCount, plural, =1 {Boost} other {Boosts}} to this server. It will take a moment for your {slotCount, plural, =1 {boost} other {boosts}} to take effect.", PREMIUM_GUILD_SUBSCRIBE_SUCCESS_OKAY: "Okay!", PREMIUM_GUILD_SUBSCRIBE_UNUSED_SLOTS_HEADER: "Unused Boosts", PREMIUM_GUILD_SUBSCRIBE_UNUSED_SLOTS_DESCRIPTION: "You have some unused Boosts. How many do you want to use for this server?", PREMIUM_GUILD_SUBSCRIBE_UNUSED_SLOTS_COUNTER: "Server Boost(s)", PREMIUM_GUILD_SUBSCRIBE_UNUSED_SLOTS_CANCEL: "Cancel", PREMIUM_GUILD_SUBSCRIBE_UNUSED_SLOTS_NEXT: "Next", PREMIUM_GUILD_SUBSCRIPTION_ERROR_RATE_LIMIT_DAYS: "Looks like you're on cooldown. Please wait **{days, plural, =1 {# day} other {# days}} and {hours, plural, =1 {# hour} other {# hours}}** before trying again", PREMIUM_GUILD_SUBSCRIPTION_ERROR_RATE_LIMIT_HOURS: "Looks like you're on cooldown. Please wait **{hours, plural, =1 {# hour} other {# hours}} and {minutes, plural, =1 {# minute} other {# minutes}}** before trying again", PREMIUM_GUILD_SUBSCRIPTION_ERROR_RATE_LIMIT_MINUTES: "Looks like you're on cooldown. Please wait **{minutes, plural, =1 {# minute} other {# minutes}}** before trying again", PREMIUM_GUILD_SUBSCRIPTION_ERROR_MOBILE: "There was an error trying to boost. Please try again.", PREMIUM_GUILD_SUBSCRIPTION_ERROR_PENDING_MUTATION: "You must cancel your pending plan change before purchasing boosts.", PREMIUM_GUILD_HEADER_BADGE_NO_TIER: "No Level", PREMIUM_GUILD_HEADER_DROPDOWN_NITRO_SERVER_SUBSCRIBE: "Server Boost", PREMIUM_GUILD_PERKS_MODAL_HEADER: "Server Boost Status", PREMIUM_GUILD_PERKS_MODAL_HEADER_SUBSCRIPTION_COUNT: "{subscriptions, plural, =0 {No Boosts} =1 {# Boost} other {# Boosts}}", PREMIUM_GUILD_PERKS_MODAL_HEADER_USER_SUBSCRIPTION_COUNT: "(You've Boosted this server {numSubscriptions, plural, =1 {# time} other {# times!}})", PREMIUM_GUILD_PERKS_MODAL_HEADER_USER_SUBSCRIPTION_COUNT_WITHOUT_PARENTHESES: "You've Boosted this server {numSubscriptions, plural, =1 {# time} other {# times!}}", PREMIUM_GUILD_PERKS_MODAL_GIFT_NITRO: "Gift Nitro", PREMIUM_GUILD_PERKS_MODAL_SUBSCRIBE_WITH_FREE_BOOSTS: "Get Nitro with 2 Free Boosts", PREMIUM_GUILD_PERKS_MODAL_BLURB: "Support your favorite server with a Boost. Every Boost helps unlock new levels and more perks for everyone in the server. [Learn more about Server Boosting]({helpdeskArticle}). Manage your Boosts in [User Settings](openPremiumGuildSettings).", PREMIUM_GUILD_PERKS_MODAL_BLURB_MOBILE: "Support your favorite server with a Boost. Every Boost helps unlock new levels and more perks for everyone in the server.", PREMIUM_GUILD_PERKS_MODAL_BLURB_MOBILE_LEARN_MORE: "[Learn more about Server Boosting.]({helpdeskArticle})", PREMIUM_GUILD_PERKS_MODAL_BOOST_ALERT_IOS_TITLE: "Sorry :(", PREMIUM_GUILD_PERKS_MODAL_PROTIP: "$[Protip:](protipHook) Discord Nitro includes {numFreeGuildSubscriptions, plural, =1 {# Boost} other {# Boosts}}! [Learn more.](onLearnMore)", PREMIUM_GUILD_PERKS_MODAL_PROTIP_MOBILE: "**PROTIP:** Discord Nitro includes {numFreeGuildSubscriptions, plural, =1 {# Boost} other {# Boosts}}! [Learn more.]({onLearnMore})", PREMIUM_GUILD_PERKS_MODAL_LEVEL_SUBSCRIBER_COUNT_TOOLTIP: "**{subscriberCount, number}/{numRequired, number}** Boosts", PREMIUM_GUILD_PERKS_MODAL_SUBSCRIBE_TO_TIER_TOOLTIP: "Boost to **!!{tierName}!!**", PREMIUM_GUILD_PERKS_MODAL_BASE_PERKS: "Boosted server perks include —", PREMIUM_GUILD_PERKS_MODAL_PREVIOUS_PERKS: "Boosted servers get everything previous, and —", PREMIUM_GUILD_PERKS_MODAL_MANAGE_YOUR_SUBSCRIPTIONS: "Manage Boosts", PREMIUM_GUILD_PERKS_MODAL_VIEW_YOUR_SUBSCRIPTIONS: "View Boosts", PREMIUM_GUILD_PERKS_MODAL_BUTTON_UPGRADE_TO_PREMIUM_EXTERNAL_ERROR: "We don't currently support upgrades to Nitro for subscriptions through !!{paymentGatewayName}!!. You can cancel your subscription through [!!{paymentGatewayName}!!'s Subscription Management]({subscriptionManagementLink}), but the subscription will remain active until its expiration date.", PREMIUM_GUILD_PERKS_MODAL_BUTTON_SUBSCRIBE_THIS_SERVER: "Boost This Server", PREMIUM_GUILD_PERKS_MODAL_SUBSCRIBER_PERKS_HEADER: "Get cool rewards for becoming a Booster! ", PREMIUM_GUILD_PERKS_MODAL_VIDEO_STAGE_HEADER: "Video Stages are Here", PREMIUM_GUILD_PERKS_MODAL_VIDEO_STAGE_BODY: "Now you can host Stage events with video and screenshare. Boosted servers can host larger Video Stage events (150 users for Level 2, 300 for Level 3).", PREMIUM_GUILD_PERKS_MODAL_VIDEO_STAGE_BODY_BOOSTING_EXPT: "For Level 3 servers, each additional Boost grants 30 more seats for every Video Stage event (up to 10,000).", GUILD_BOOSTING_MANAGEMENT_OPEN_DESKTOP_APP: "To manage your Server Boosts, please [open the Discord desktop app](openAppHook).", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_HEADING: "Boost this server & unlock perks for everyone", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_NONE_NAME: "Unboosted", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTS_REQUIRED: "{numBoostsRequired, number} Boosts", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_CUSTOM_EMOJI: "{numEmojiSlots, number} Emoji Slots", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_CUSTOM_STICKERS: "{numStickerSlots, number} Sticker Slots", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_CUSTOM_SOUNDS: "{numSoundboardSlots, plural, =1 {# Soundboard Slot} other {# Soundboard Slots}}", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_ANIMATED_GUILD_ICON: "Animated Server Icon", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_AUDIO_QUALITY: "Better Quality Audio", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_AUDIO_QUALITY_WITH_BITRATE: "{bitrate} Audio Quality", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_STREAM_QUALITY: "HD Streaming", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_STREAM_QUALITY_WITH_RESOLUTION: "{resolution} Stream Quality", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_LARGER_FILE_UPLOADS: "{uploadSizeLimit} File Uploads", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_ROLE_ICONS: "Custom Role Icons", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_GUILD_BANNER: "Server Banner", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_GUILD_BANNER_STATIC: "Static Server Banner", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_GUILD_BANNER_ANIMATED: "Animated Server Banner", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_VANITY_URL: "Custom Server Invite Link", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_HIGHEST_AUDIO_QUALITY: "Highest Quality Audio", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_ANIMATED_GUILD_BANNER: "Animated Server Banner", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_STAGE_SEATS_AND_MORE: "{numStageSeats, number} Video Stage Seats & more!", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_STAGE_SEATS: "{numStageSeats, number} Video Stage Seats", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_CURRENT_TIER_LABEL: "Current", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_HEADING: "Top perks you can unlock with Boosting", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_HD_STREAMING_HEADING: "HD Streaming", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_HD_STREAMING_DESCRIPTION: "Support your server’s access to high quality streams, for everyone.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_ANIMATED_GUILD_ICON_HEADING: "Animated Server Icon", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_ANIMATED_GUILD_ICON_DESCRIPTION: "Reach max cool status with a sleek custom animated icon.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_VANITY_URL_HEADING: "Custom Invite Link", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_VANITY_URL_DESCRIPTION: "Help your server grow and look very official with a custom invite link.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_TOOLTIP_REMAINING_FOR_TIER: "{numBoostsRequired, plural, one {{numBoostsRequired, number} more Boost} other {{numBoostsRequired, number} more Boosts}} to !!{tierName}!!", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_TOOLTIP_TIER_UNLOCKED: "!!{tierName}!! unlocked!", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_SCREEN_READER_VALUE: "This server currently has {numSubscriptionsApplied, plural, one {{numSubscriptionsApplied, number} Boost} other {{numSubscriptionsApplied, number} Boosts}} applied.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_SCREEN_READER_VALUE_TIER_UNLOCKED: "This server currently has {numSubscriptionsApplied, plural, one {{numSubscriptionsApplied, number} Boost} other {{numSubscriptionsApplied, number} Boosts}} applied. It has unlocked the !!{tierName}!! plan.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_HEADING: "Boost this server & unlock perks for everyone", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_HEADING: "Uplevel this server with the best perks", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_RECOMMENDED_TAG: "Recommended", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CURRENT_TAG: "Current", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_COLUMN_HEADING_PERKS: "Perks", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_EMOJI_SLOTS: "Emoji Slots", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_STICKER_SLOTS: "Sticker Slots", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_SOUNDBOARD_SLOTS: "Soundboard Slots", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_STREAM_QUALITY: "Stream Quality", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_VOICE_QUALITY: "Audio Quality", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_UPLOAD_SIZE_LIMIT: "Upload Size Limit", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_VIDEO_STAGE_SEATS: "Video Stage Seats", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_ANIMATED_GUILD_ICON: "Animated Server Icon", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_GUILD_INVITE_BACKGROUND: "Server Invite Background", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_GUILD_BANNER: "Server Banner", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_CUSTOM_ROLE_ICONS: "Custom Role Icons", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_VANITY_URL: "Custom Invite Link", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_STREAM_QUALITY: "!!{resolution}!! & !!{framerate}!!fps", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_GUILD_BANNER_STATIC: "Static", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_GUILD_BANNER_ANIMATED: "Animated", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_HEADING: "Give your community a Boost & be recognized", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_MEMBER_LIST_ICON: "Display your support with a Member List icon", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_PROFILE_BADGE: "Unlock a profile badge that evolves over time", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_BOOSTER_ROLE: "Get an exclusive Booster role", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_COMMUNITY_SUPPORT: "Show support for your community", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_HEADING: "Boosting FAQ", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_1: "What is a Server Boost?", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_2: "How do I Boost a server?", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_3: "Can I Boost a Server multiple times?", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_4: "Can I continue Boosting a server after it reaches Level 3?", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_1: "Boosts allow you to support your favorite Servers, by unlocking perks for everyone in them. The more Boosts a server has, the more epic the perks that can be unlocked. See the chart above for more details.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_2: "You can Boost this server directly on this page! If you want to Boost a different server, you can find step-by-step instructions [in our Help Center]({helpCenterUrl}).", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_3: "Yes, you can Boost a server as many times as you want! The more Boosts the server gets, the better the perks that will be unlocked.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_4: "Absolutely! Server Boosts are a great way to support your favorite servers. When you Boost a server, you'll be recognized with a special Member List Icon, a Boosting role, and a Profile Badge.", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PRODUCT_DEMO_HEADING: "More Boosts means more fun for everyone", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_MOBILE_HEADING: "Boost this server to unlock perks", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_SHOW_MORE: "Show more", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_SHOW_LESS: "Show less", BOOSTING_MARKETING_REDESIGN_EXPERIMENT_NEXT_TIER: "Your next level", GUILD_SUBSCRIPTION_PURCHASE_MODAL_STEP_SELECT_DESCRIPTION: "Help a server unlock great perks with Server Boosts. Purchase at any time — we'll do the math and prorate it.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_COUNTER: "Server Boost(s)", GUILD_SUBSCRIPTION_PURCHASE_MODAL_SUBTOTAL: "Subtotal", GUILD_SUBSCRIPTION_PURCHASE_MODAL_UNUSED_SLOT_NOTICE: "Looks like you have {slotCount, plural, =1 {# unused Boost} other {# unused Boosts}}. We'll add 'em to this server for you.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_FOOTER_UPSELL: "You could be paying **{discountPercentage} less** for each Boost, and get an additional {freeSubscriptionCount} Boosts with [Discord Nitro](onPremiumSubscriptionClick)!", GUILD_SUBSCRIPTION_PURCHASE_MODAL_FOOTER_UPSELL_TRIAL: "Claim your free month to get {freeSubscriptionCount} Boosts, and save **{discountPercentage}** on additional Boosts with [Discord Nitro](onPremiumSubscriptionClick)!", GUILD_SUBSCRIPTION_PURCHASE_MODAL_FOOTER_UPSELL_TRIAL_VARIANT: "Claim your free trial to get {freeSubscriptionCount} Boosts, and save **{discountPercentage}** on additional Boosts with [Discord Nitro](onPremiumSubscriptionClick)!", GUILD_SUBSCRIPTION_PURCHASE_MODAL_FOOTER_DISCOUNT: "You get a discount as part of your **{planName}** subscription!", GUILD_SUBSCRIPTION_PURCHASE_MODAL_PURCHASE_DETAILS_HEADER: "Purchase Details", GUILD_SUBSCRIPTION_PURCHASE_MODAL_INVOICE_ROW_CONTENT: "!!{numGuildSubscriptions}!! \xd7 {planName}", GUILD_SUBSCRIPTION_PURCHASE_MODAL_PAYMENT_SOURCE_TOOLTIP: "We'll use the payment method you selected for your subscription", GUILD_SUBSCRIPTION_PURCHASE_MODAL_SUBMIT: "Purchase", GUILD_SUBSCRIPTION_PURCHASE_MODAL_ACTIVATED_DESCRIPTION: "Boost success!\n\nYou just Boosted !!{guildName}!! **{guildSubscriptionQuantity, plural, =1 {# time} other {# times}}**.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_ACTIVATED_DESCRIPTION_GENERIC_GUILD: "Boost success!\n\nYou just Boosted the server **{guildSubscriptionQuantity, plural, =1 {# time} other {# times}}**.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_ACTIVATED_DESCRIPTION_MOBILE1: "Boost success!", GUILD_SUBSCRIPTION_PURCHASE_MODAL_ACTIVATED_DESCRIPTION_MOBILE2: "You just Boosted !!{guildName}!! **{guildSubscriptionQuantity, plural, =1 {# time} other {# times}}**.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_ACTIVATED_DESCRIPTION_NO_APPLICATION: "You now have **{guildSubscriptionQuantity, plural, =1 {# Server Boost} other {# Server Boosts}}** available for use.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_ACTIVATED_CLOSE_BUTTON: "Nice!", GUILD_SUBSCRIPTION_PURCHASE_MODAL_TRANSFERRED_DESCRIPTION: "Boost transfer success!\n\nYou just Boosted !!{guildName}!!.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_TRANSFERRED_DESCRIPTION_GENERIC_GUILD: "Boost transfer success!\n\nYou just Boosted the server.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_TRANSFERRED_DESCRIPTION_MOBILE1: "Boost transfer success!", GUILD_SUBSCRIPTION_PURCHASE_MODAL_TRANSFERRED_DESCRIPTION_MOBILE2: "You just Boosted !!{guildName}!! **{guildSubscriptionQuantity, plural, =1 {# time} other {# times}}**.", GUILD_SUBSCRIPTION_PURCHASE_MODAL_EXTERNAL: "Sorry, we don't currently support buying Boosts with a subscription through !!{paymentGatewayName}!!.", PREMIUM_PROMO_TITLE_SEARCH_UPSELL: "You can't use this emoji right now.", PREMIUM_PROMO_DESCRIPTION_SEARCH_UPSELL: "Lift off with **Discord Nitro** to use animated and custom emoji anywhere. [Learn more](onClick)", PREMIUM_PROMO_DESCRIPTION_SEARCH_TIER_UPSELL: "Lift off with **{planName}** to use animated and custom emoji anywhere. [Learn more](onClick)", PREMIUM_PROMO_DESCRIPTION_SEARCH_UPSELL_NO_BOLD: "Lift off with Discord Nitro to use animated and custom emoji anywhere. [Learn more](onClick).", PREMIUM_PROMO_DESCRIPTION_SEARCH_UPSELL_NO_BOLD_V2: "Lift off with {planName} to use animated and custom emoji anywhere. [Learn more.](onClick)", PREMIUM_TITLE: "Discord Nitro", PREMIUM_CHOOSE_PLAN_TITLE: "Choose a Plan", SUBSCRIPTIONS_TITLE: "Subscriptions", PREMIUM_GIFTING_BUTTON: "Gift", PREMIUM_GIFTING_TITLE: "Nitro Gifting", PREMIUM_GIFTING_TITLE_MOBILE: "Select a Nitro Gift", PREMIUM_GIFTING_PURCHASE_GIFT: "Purchase a Nitro Gift", PREMIUM_INCLUDED: "Included in Nitro:", PREMIUM_TIER_1_PERKS_TITLE: "Or keep it simple and get the basics.", PREMIUM_PLAN_MONTH: "Nitro Monthly", PREMIUM_PLAN_YEAR: "Nitro Yearly", PREMIUM_PLAN_MONTH_TIER_0: "Nitro Basic Monthly", PREMIUM_PLAN_ONE_MONTH_TIER_0: "1 Month Nitro Basic", PREMIUM_PLAN_YEAR_TIER_0: "Nitro Basic Yearly", PREMIUM_PLAN_ONE_YEAR_TIER_0: "1 Year Nitro Basic", PREMIUM_PLAN_MONTH_TIER_0_TRIAL_DURATION: "Nitro Basic Monthly **(+{duration} free)**", PREMIUM_PLAN_YEAR_TIER_0_TRIAL_DURATION: "Nitro Basic Yearly **(+{duration} free)**", PREMIUM_PLAN_MONTH_TIER_1: "Nitro Classic Monthly", PREMIUM_PLAN_YEAR_TIER_1: "Nitro Classic Yearly", PREMIUM_PLAN_ONE_MONTH_TIER_1: "1 Month Nitro Classic", PREMIUM_PLAN_ONE_YEAR_TIER_1: "1 Year Nitro Classic", PREMIUM_PLAN_MONTH_TIER_2: "Nitro Monthly", PREMIUM_PLAN_MONTH_TIER_2_TRIAL: "Nitro Monthly **(+{months} {months, plural, =1 {month} other {months}} free)**", PREMIUM_PLAN_MONTH_TIER_2_TRIAL_DURATION: "Nitro Monthly **(+{duration} free)**", PREMIUM_PLAN_YEAR_TIER_2: "Nitro Yearly", PREMIUM_PLAN_YEAR_TIER_2_TRIAL: "Nitro Yearly **(+{months} {months, plural, =1 {month} other {months}} free)**", PREMIUM_PLAN_YEAR_TIER_2_TRIAL_DURATION: "Nitro Yearly **(+{duration} free)**", PREMIUM_PLAN_3_MONTH_TIER_2: "Nitro 3 Month", PREMIUM_PLAN_6_MONTH_TIER_2: "Nitro 6 Month", PREMIUM_PLAN_ONE_MONTH_TIER_2: "1 Month Nitro", PREMIUM_PLAN_ONE_YEAR_TIER_2: "1 Year Nitro", PREMIUM_TIER_0: "Nitro Basic", PREMIUM_TIER_1: "Nitro Classic", PREMIUM_TIER_2: "Nitro", PREMIUM_GUILD_PLAN_MONTH: "Server Boost Monthly", PREMIUM_GUILD_PLAN_YEAR: "Server Boost Yearly", PREMIUM_GUILD_PLAN_SINGLE_MONTH: "Single Month Server Boost(s)", PREMIUM_GUILD_PLAN_SINGLE_YEAR: "Single Year Server Boost(s)", PREMIUM_GUILD_PLAN_3_MONTH: "Server Boost 3 Month", PREMIUM_GUILD_PLAN_6_MONTH: "Server Boost 6 Month", MONTHLY: "Monthly", YEARLY: "Yearly", MULTI_MONTHS: "{intervalCount} Month", ESTIMATED_TAX_LABEL: "Estimated Tax", TAX_LABEL: "Tax", PREMIUM_ACTIVATED: "Nitro Activated", PREMIUM_SUBSCRIPTION_POLICY_HINT_IOS: "See subscription and auto-renewal details below", PREMIUM_SUBSCRIPTION_TERMS_POLICY_IOS: "By purchasing a Nitro subscription, you agree to our [Terms of Service]({termsURL}), [Paid Services Terms]({paidURL}), and [Privacy Policy]({privacyURL}). Payment will be charged to your Apple ID account at the confirmation of purchase. Subscription automatically renews unless it is canceled at least 24 hours before the end of the current period. Your account will be charged for renewal within 24 hours prior to the end of the current period. You can manage and cancel your subscriptions by going to your account settings on the App Store after purchase.", PREMIUM_SUBSCRIPTION_TERMS_POLICY_ANDROID: "By purchasing a Nitro subscription, you agree to our [Terms of Service]({termsURL}), [Paid Services Terms]({paidURL}), and [Privacy Policy]({privacyURL}). Payment will be charged to your Google Play account at the confirmation of purchase. Subscription automatically renews unless it is canceled at least 24 hours before the end of the current period. Your account will be charged for renewal within 24 hours prior to the end of the current period. You can manage and cancel your subscriptions by going to your account settings on the Google Play Store after purchase.", PREMIUM_SUBSCRIPTION_BILLING_INFO_MOBILE: "These are your current subscriptions. They will be billed on the same billing cycle.", PREMIUM_SUBSCRIPTION_BILLING_INFO_NITRO_ONLY: "This is your current Nitro subscription. You can update your subscription at any time.", PREMIUM_CANCEL_CONFIRM_TITLE: "Cancel !!{planPremiumType}!!?", PREMIUM_CANCEL_CONFIRM_BODY_TIER_0: "Cancellation will take effect at the end of your current billing period on **{date, date, medium}**, you'll lose access to all your Nitro perks, including bigger file uploads and the ability to use custom emoji everywhere.\n\nYou can restart your subscription anytime.", PREMIUM_CANCEL_CONFIRM_BODY_TIER_1: "Cancellation will take effect at the end of your current billing period on **{date, date, medium}**.\n\nYou can restart your subscription anytime.", PREMIUM_CANCEL_CONFIRM_BODY_TIER_2: "Cancellation will take effect at the end of your current billing period. On **{date, date, medium}**, you will lose access to Nitro, and your included Server Boosts will be removed.\n\n You can restart your subscription anytime.", PREMIUM_CANCEL_CONFIRM_BODY_TIER_0_PAYMENT_BLOCKED_RUSSIA: "Cancellation will take effect at the end of your current billing period on **{date, date, medium}**, you'll lose access to all your Nitro perks, including bigger file uploads and the ability to use custom emoji everywhere.\n\n At this time we are temporarily unable to renew subscriptions for those located in Russia or who use a Russian payment method. [Learn More]({helpdeskArticle}).", PREMIUM_CANCEL_CONFIRM_BODY_TIER_1_PAYMENT_BLOCKED_RUSSIA: "Cancellation will take effect at the end of your current billing period on **{date, date, medium}**.\n\n At this time we are temporarily unable to renew subscriptions for those located in Russia or who use a Russian payment method. [Learn More]({helpdeskArticle}).", PREMIUM_CANCEL_CONFIRM_BODY_TIER_2_PAYMENT_BLOCKED_RUSSIA: "Cancellation will take effect at the end of your current billing period. On **{date, date, medium}**, you will lose access to Nitro, and your included Server Boosts will be removed.\n\n At this time we are temporarily unable to renew subscriptions for those located in Russia or who use a Russian payment method. [Learn More]({helpdeskArticle})", PREMIUM_CANCEL_PAST_DUE_CONFIRM_BODY: "Cancellation will take effect immediately for any Nitro and Server Boost subscriptions.", PREMIUM_CANCEL_CONFIRM_NEW: "Yup, Cancel !!{planPremiumType}!!", PREMIUM_PAUSE_CONFIRM_TITLE: "Pause !!{planPremiumType}!!?", PREMIUM_PAUSE_CONFIRM_BODY: "You will continue to have access to Nitro until **{pauseDate, date, medium}**, and then your subscription will be paused for {pauseDuration} days. We’ll start billing you again on **{resumeDate, date, medium}**. You can resume your subscription anytime.", PREMIUM_PAUSE_PAST_DUE_CONFIRM_BODY: "Your Nitro subscription will be paused **now** for {pauseDuration} days. We’ll start billing you again on **{resumeDate, date, medium}**. You can resume your subscription anytime.", PREMIUM_PAUSE_EXTEND_CONFIRM_BODY: "You will extend your nitro until **{resumeDate, date, medium}**. You can resume your subscription anytime.", PREMIUM_PAUSE_CONFIRM_NEW: "Yup, Pause !!{planPremiumType}!!", PREMIUM_UPGRADE_DONE_BUTTON: "Sweet!", PREMIUM_DOWNGRADE_DONE_BUTTON: "Got It", PREMIUM_UPLOAD_PROMO: "Upgrade to Discord Nitro for {maxUploadPremium} file limit", PREMIUM_UPLOAD_PROMO_TRIAL: "Get 1 month free of Discord Nitro and increase your limit to {maxUploadPremium}", PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_MONTH_TIER_0: "Switch to Nitro Basic Monthly", PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_YEAR_TIER_0: "Switch to Nitro Basic Yearly", PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_MONTH_TIER_1: "Switch to Nitro Classic Monthly", PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_YEAR_TIER_1: "Switch to Nitro Classic Yearly", PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_MONTH_TIER_2: "Switch to Nitro Monthly", PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_YEAR_TIER_2: "Switch to Nitro Yearly", PREMIUM_ALERT_ERROR_TITLE: "Oops, something went wrong...", PREMIUM_PENDING_PLAN_CHANGE_NOTICE: "Your plan change is pending. **{planName}** will start on **{date, date, medium}**.", PREMIUM_PENDING_PLAN_CHANGE_CANCEL_HEADER: "Cancel Subscription Plan Change", PREMIUM_PENDING_PLAN_CHANGE_CANCEL_BODY: "You have chosen to cancel the change from **{existingPlan}** to **{downgradedPlan}**. If you cancel this plan change, your **{existingPlan}** at **{existingRate}** will continue.", PREMIUM_PENDING_PLAN_CHANGE_CANCEL_BODY_NO_EXISTING_PLAN: "You have chosen to cancel the change to **{downgradedPlan}**. If you cancel this plan change, your existing plan at **{existingRate}** will continue.", PREMIUM_PENDING_PLAN_CHANGE_CANCEL_BUTTON: "Cancel Plan Change", PREMIUM_CHANGE_DISCRIMINATOR_WARNING: "When your Nitro subscription ends, your Discord Tag will be randomized.", PREMIUM_CHANGE_DISCRIMINATOR_LENGTH_ERROR: "This tag is invalid. Tags must contain 4 digits.", PREMIUM_CHANGE_DISCRIMINATOR_ZERO_ERROR: "This tag is invalid. Tags must be greater than 0.", PREMIUM_SETTINGS_SUBSCRIPTIONS_MOBILE_HEADER: "Your subscriptions", PREMIUM_SETTINGS_BILLING_INFO: "Billing Information", PREMIUM_SETTINGS_PAYMENT_PROCESSING: "**Your payment is processesing.** Please be patient, this can take up to {maxProcessingTimeInDays} days. We will email you a confirmation when it’s complete.", PREMIUM_SETTINGS_PREPAID_THROUGH_DATE: "Your **Nitro** subscription is prepaid through **{prepaidEndDate, date, medium}**. You can extend your plan by editing your payment method.", PREMIUM_SETTINGS_RENEWAL_INFO: "Your subscriptions will automatically renew on **{renewalDate, date, medium}** and you'll be charged **!!{price}!!**.", PREMIUM_SETTINGS_RENEWAL_INFO_EXTERNAL: "Your subscriptions will automatically renew on **{renewalDate, date, medium}**. Please [visit your !!{paymentGatewayName}!! Subscription settings]({subscriptionManagementLink}) for more details.", PREMIUM_SETTINGS_CANCELLED_INFO: "Your subscription will end on **{endDate, date, medium}**.", PREMIUM_SETTINGS_PAUSE_PENDING_INFO: "Your subscription will pause on **{pauseDate, date, medium}** and automatically resume on **{resumeDate, date, medium}**.", PREMIUM_SETTINGS_PAUSE_ENDS_AT_INFO: "Your subscription is currently on pause and will automatically resume on **{resumeDate, date, medium}**.", PREMIUM_SETTINGS_PAUSE_ENDS_AT_INFO_WITH_PLAN: "Your **{planName}** subscription is currently on pause and will automatically resume on **{resumeDate, date, short}** and you'll be charged **!!{price}!!**.", PREMIUM_SETTINGS_PAUSED_INFO: "Your subscription will resume pending payment.", PREMIUM_SETTINGS_PAUSED_INFO_WITH_PLAN: "Your **{planName}** subscription will resume pending payment and you'll be charged **!!{price}!!**.", PREMIUM_SETTINGS_PAST_DUE_INFO: "Your **!!{price}!!** subscription is past due. Please update your payment info or your subscription will end on **{endDate, date, medium}**.", PREMIUM_SETTINGS_PAST_DUE_INFO_EXTERNAL: "Your subscription is past due. Please [update your payment info for !!{paymentGatewayName}!!]({paymentSourceLink}) or your subscription will end on **{endDate, date, medium}**.", PREMIUM_SETTINGS_ACCOUNT_HOLD_INFO: "Your subscription is **on hold**. Please update your payment info or your subscription will end on {endDate, date, medium}.", PREMIUM_SETTINGS_ACCOUNT_HOLD_INFO_PRICE: "Your **!!{price}!!** subscription is on hold. Please update your payment info or your subscription will end on **{endDate, date, medium}**.", PREMIUM_SETTINGS_ACCOUNT_HOLD_NOTICE_INFO: "Your payment method needs to be updated. Your subscription is on hold and you currently don't have access to your perks. Please update your payment method by **{endDate, date, medium}** or you'll lose your **!!{planDescription}!!** perks.", PREMIUM_SETTINGS_ACCOUNT_HOLD_NOTICE_CHANGE_PAYMENT_METHOD_BUTTON: "Change your payment method", PREMIUM_SETTINGS_ACCOUNT_HOLD_INFO_EXTERNAL: "Your subscription is on hold. Please [update your payment info for !!{paymentGatewayName}!!]({paymentSourceLink}) or your subscription will end on **{endDate, date, medium}**.", PREMIUM_SETTINGS_RENEWAL_INFO_WITH_PLAN: "Your **{planName}** subscription will automatically renew on **{renewalDate, date, short}** and you'll be charged **!!{price}!!**.", PREMIUM_SETTINGS_NAVIGATE_TO_HOME_CTA: "Take Me to My Nitro", PREMIUM_SETTINGS_NATIGATE_TO_SUBSCRIPTIONS_CTA: "Manage Plan in Subscriptions", PREMIUM_SETTINGS_NAVIGATE_TO_HOME_CTA_V2: "Learn More About My Nitro", PREMIUM_SETTINGS_NITRO_HOME_HEADER: "Your Nitro Home", PREMIUM_SETTINGS_PLAN_MANAGEMENT_HEADER: "Your Nitro Plan", PREMIUM_SETTINGS_SUBSCRIPTION_DESCRIPTION: "This is where your current subscriptions live. If you have multiple subscriptions, they will be billed on the same billing cycle. You can [switch plans](onSwitchPlans) or [cancel](onCancel) at any time.", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO: "**{quantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!**", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_TAX_EXCLUSIVE: "**{quantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!** + applicable taxes", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_NO_PRICE: "**{quantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}}", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_PENDING_CANCELATION: "**{quantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!** (Pending Cancellation)", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_PENDING_CANCELATION_TAX_EXCLUSIVE: "**{quantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!** + applicable taxes (Pending Cancellation)", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_PENDING_CANCELATION_NO_PRICE: "**{quantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} (Pending Cancellation)", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_ANDROID: "**{boostQuantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!**", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_PENDING_CANCELATION_ANDROID: "**{boostQuantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!** (Pending Cancellation)", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_ACCOUNT_HOLD: "**{boostQuantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!** (Subscription on hold)", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_ACCOUNT_HOLD_TAX_EXCLUSIVE: "**{boostQuantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} - **!!{rate}!!** + applicable taxes (Subscription on hold)", PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_ACCOUNT_HOLD_NO_PRICE: "**{boostQuantity}x** {quantity, plural, =1 {Server Boost} other {Server Boosts}} (Subscription on hold)", PREMIUM_RESTORE_SUBSCRIPTION_IOS: "Restore App Store Subscriptions", PREMIUM_SWITCH_PLANS: "Switch Plans", PREMIUM_CURRENT_ACTIVE_SUBSCRIPTION: "Current active subscription", PREMIUM_MANAGE_VIA_DESKTOP: "Please manage your subscription on desktop.\n[Learn more.]({helpdeskArticle})", PREMIUM_CANCEL_CONFIRM_HEADER: "Cancel Your Subscription?", PREMIUM_CANCEL_CONFIRM_BODY: "Are you sure you want to delete your subscription? You won't be able to reactivate it from your mobile device unless you switch to using Google Play.\n[Learn more.]({helpdeskArticle})", PREMIUM_CANCEL_CONFIRM_BUTTON: "Cancel Subscription", PREMIUM_NO_PLANS_HEADER: "Sorry!", PREMIUM_NO_PLANS_BODY: "We don't current offer a plan through Google Play Billing with more boosts. [Learn more.]({helpdeskArticle})", PREMIUM_PAUSE_OR_CANCEL_SUBSCRIPTION: "Pause or Cancel Subscription", PREMIUM_CANCEL_OR_EXTEND_PAUSE_SUBSCRIPTION: "Cancel or Pause Subscription", PREMIUM_SETTINGS_STARTING_AT_PER_MONTH: "Subscribe - Starting at !!{price}!! / Month", PREMIUM_SUBSCRIPTION_UPDATES: "Subscription Updates", PREMIUM_SUBSCRIPTION_PLAN_ADJUSTMENT: "{planName} Adjustment", PREMIUM_SUBSCRIPTION_GUILD_SUBSCRIPTION_ADJUSTMENT: "Boost Adjustment", PREMIUM_SUBSCRIPTION_RENEWAL_FOOTER: "Any eligible subscription credit will be applied until it runs out. Your subscription will renew for **{rate}** on **{renewalDate, date, medium}**. Have questions? [Contact our support team]({contactLink}) or [check out our subscription FAQ]({helpdeskArticle}).", PREMIUM_SUBSCRIPTION_RENEWAL_FOOTER_TAX_EXCLUSIVE: "Any eligible subscription credit will be applied until it runs out. Your subscription will renew for **{rate}** plus tax on **{renewalDate, date, medium}**. Have questions? [Contact our support team]({contactLink}) or [check out our subscription FAQ]({helpdeskArticle}).", PREMIUM_SUBSCRIPTION_RENEWAL_FOOTER_TRIAL: "Your free month credit will be applied until it runs out, and we'll send you a reminder email **{days, plural, =1 {1 day} other {{days} days}}** before your free period ends. Have questions? [Check out our offer FAQ]({helpdeskArticle}) or [contact our support team]({contactLink}).", PREMIUM_SUBSCRIPTION_RENEWAL_FOOTER_TRIAL_DURATION: "Your free {duration} credit will be applied until it runs out, and we'll send you a reminder email **{days, plural, =1 {1 day} other {{days} days}}** before your free period ends. Have questions? [Check out our offer FAQ]({helpdeskArticle}) or [contact our support team]({contactLink}).", PREMIUM_SUBSCRIPTION_SHOW_DETAILS: "Show Subscription Details", PREMIUM_SUBSCRIPTION_HIDE_DETAILS: "Hide Subscription Details", PREMIUM_SUBSCRIPTION_NEW_LABEL: "New Subscription", PREMIUM_SUBSCRIPTION_CURRENT_LABEL: "Current Subscription", PREMIUM_SUBSCRIPTION_NEW_TOTAL: "New Subscription Total", PREMIUM_SUBSCRIPTION_CANCELLED: "{planName} Canceled", PREMIUM_SUBSCRIPTION_ADJUSTMENT_TOOLTIP: "This adjustment includes prorations, discounts, applicable taxes, and refunds.", PREMIUM_SUBSCRIPTION_GUILD_SUBSCRIPTION_ADJUSTMENT_TOOLTIP: "**Why am I seeing this?**\n\nYou are purchasing a plan change. Your Server Boosts are being updated accordingly.", PREMIUM_SUBSCRIPTION_GUILD_SUBSCRIPTION_ADJUSTMENT_TEXT: "You are purchasing a plan change. Your Server Boosts are being updated accordingly.", PREMIUM_SUBSCRIPTION_PERIOD_RESET_NOTICE: "Your next renewal date will be **{renewalDate, date, medium}**.", USER_SETTINGS_SUBSCRIPTIONS_HEADER: "Your Subscriptions", USER_SETTINGS_NO_SUBSCRIPTIONS: "You have no active subscriptions", USER_SETTINGS_NO_SUBSCRIPTION_CREDIT: "You have no unused credits", PROMOTION_ERROR_TITLE: "Wait a second...", PROMOTION_ERROR_BODY: "Seems like something’s gone wrong and you can’t use that code. Sorry about that.", PROMOTION_ERROR_CLAIMED_BODY: "Sorry, looks like this code has already been redeemed.", PROMOTION_ERROR_NOT_YOUR_CODE_BODY: "Looks like this code belongs to someone else.", PROMOTION_ERROR_NO_CODE_BODY: "Looks like this code didn't work. Make sure you have the right code and try again.", PROMOTION_ERROR_NOT_VERIFIED_BODY: "Looks like your email isn't verified. Make sure to verify your email before redeeming this code.", PROMOTION_ERROR_HELP_CENTER_LINK: "Visit our [Help Center]({helpCenterLink}) for more information.", PROMOTION_EXISTING_SUBSCRIBER_TITLE: "Oh no!", PROMOTION_EXISTING_SUBSCRIBER_BODY: "It looks like you have Nitro already. Sorry, promotions are for new subscribers only. You can give your link to a friend and send {months, plural, =1 {# month} other {# months}} of free {planName} their way.", PROMOTION_PREVIOUS_SUBSCRIBER_BODY: "It looks like you've had Nitro before. Sorry, promotions are for new subscribers only. You can give your link to a friend and send {months, plural, =1 {# month} other {# months}} of free {planName} their way.", PROMOTION_REDEEM_BODY: "You get {months, plural, =1 {# month} other {# months}} of free {planName} from this promotion!", PROMOTION_ACCOUNT_IDENTIFIER: "Signed in as $[](avatarHook) {tag}. [Not You?](logoutHook)", PROMOTION_ACCOUNT_IDENTIFIER_SWITCH_ACCOUNTS: "Signed in as $[](avatarHook) {tag}. [Switch Accounts](logoutHook)", PROMOTION_CONFIRM_UPGRADE_HEADER: "You have an active subscription!", PROMOTION_CONFIRM_UPGRADE_DESCRIPTION: "If you claim this promotion, your current subscription of:\n\n$[](lineItemsHook)\n\nwill be replaced with a {newPlanName} subscription.", PROMOTION_CONFIRM_UPGRADE_TERMS: "You'll receive the full value of the promotion, including {trialMonths, plural, =1 {# month} other {# months}} free ([learn more]({helpCenterLink})). **But you'll lose any features associated with your current subscription, and you won't receive a refund for any remaining value on your current subscription.** At the end of the promotion period, you'll be converted to a paying {newPlanName} subscription at the price of {planPrice}.", PROMOTION_CONFIRM_UPGRADE_LINE_ITEM: "{quantity, plural, =1 {} other {#x }}{lineItem}", PROMOTION_CONFIRM_UPGRADE_BUTTON: "Upgrade Anyway", OUTBOUND_PROMOTION_CARD_UNCLAIMED_UNEXPANDED_BODY: "Gift is available to claim until {endDate}. [More Details](onClickDetails)", OUTBOUND_PROMOTION_CARD_UNCLAIMED_EXPANDED_BODY: "Gift is available to claim until {endDate}. [Less Details](onClickDetails)", OUTBOUND_PROMOTION_CARD_CLAIMED_UNEXPANDED_BODY: "Use your code before {endDate}. [More Details](onClickDetails)", OUTBOUND_PROMOTION_CARD_CLAIMED_EXPANDED_BODY: "Use your code before {endDate}. [Less Details](onClickDetails)", OUTBOUND_PROMOTION_MORE_DETAILS: "[More Details](onClick)", OUTBOUND_PROMOTION_SEE_CODE: "See Code", MOBILE_OUTBOUND_PROMOTION_CARD_UNCLAIMED_BODY: "Claim your code before {endDate}", MOBILE_OUTBOUND_PROMOTION_CARD_CLAIMED_BODY: "Use your code before {endDate}", OUTBOUND_PROMOTION_CODE_CONFIRMATION_EMAIL: "This code is included in a confirmation email we just sent you.", REDEMPTION_CODE: "Redemption Code", PARTNER_PROMOTION_TITLE: "Claim your gift!", PARTNER_PROMOTION_ACCOUNT_SUBTITLE: "This gift will apply to the account you’re currently logged into.", PARTNER_PROMOTION_CLAIM: "Next", PARTNER_PROMOTION_ERROR_TITLE: "Uh oh!", PARTNER_PROMOTION_ERROR_BODY: "Looks like something went wrong.", PARTNER_PROMOTION_MAX_CLAIMS_ERROR_BODY: "Looks like this promotion has reached its maximum number of claims.", PARTNER_PROMOTION_NEW_SUBSCRIPTION_REQUIRED_ERROR_BODY: "It looks like you have Nitro already.", PARTNER_PROMOTION_PREVIOUS_PURCHASE_ERROR_BODY: "Sorry, looks like you’ve already had a Nitro sub!", PARTNER_PROMOTION_USER_CLAIMED_ERROR_BODY: "Looks like you already claimed a gift.", PARTNER_PROMOTION_GIFT_CLAIMED_ERROR_BODY: "Looks like this gift has already been claimed.", PARTNER_PROMOTION_USER_NOT_VERIFIED_ERROR_BODY: "Looks like your email isn’t verified. Make sure to verify your email before claiming this gift.", PARTNER_PROMOTION_UNKNOWN_GIFT_ERROR_BODY: "Unknown gift.", REDEEM: "Redeem", UNLOCK_CODE: "Unlock Code", OUTBOUND_PROMOTION_REDEMPTION_MODAL_TITLE: "Awesome!", TERMS_AND_CONDITIONS: "Terms & Conditions", OUTBOUND_PROMOTION_NOTICE: "Hey, you have something waiting for you in your gift inventory! Don’t forget to claim it before it’s lost.", TAKE_ME_THERE: "Take me there", PREMIUM_UPSELL_ANIMATED_AVATAR: "Want an animated avatar?", PREMIUM_UPSELL_ANIMATED_AVATAR_SUBTITLE: "Join Nitro to get this feature and more!", PREMIUM_UPSELL_ANIMATED_AVATAR_TEXT: "Get Nitro and you'll be able to set .gifs as your profile picture", PREMIUM_UPSELL_EMOJI_ACTIVE_MOBILE: "You can’t use this emoji right now", PREMIUM_UPSELL_EMOJI_PASSIVE_MOBILE: "Get upgraded emoji power!", PREMIUM_UPSELL_EMOJI_MOBILE: "You can’t use this emoji right now", PREMIUM_UPSELL_BADGE_ACTIVE_MOBILE: "Looking to add a badge?", PREMIUM_UPSELL_BADGE_PASSIVE_MOBILE: "Badges are pretty neat!", PREMIUM_UPSELL_UPLOAD_ACTIVE_MOBILE: "Your files are too powerful!", PREMIUM_UPSELL_UPLOAD_PASSIVE_MOBILE: "Upload higher quality memes", PREMIUM_UPSELL_ANIMATED_AVATAR_ACTIVE_MOBILE: "You can't have a dancing avatar (yet)!", PREMIUM_UPSELL_ANIMATED_AVATAR_PASSIVE_MOBILE: "Want an animated avatar?", PREMIUM_UPSELL_ANIMATED_EMOJIS_ACTIVE_MOBILE: "Trying to move and groove?", PREMIUM_UPSELL_ANIMATED_EMOJIS_PASSIVE_MOBILE: "Want to move and groove?", PREMIUM_UPSELL_VIDEO_QUALITY_TITLE: "You can't choose this setting right now", PREMIUM_UPSELL_VIDEO_QUALITY_DESC: "**Discord Nitro** subscribers can upload high quality videos anywhere, up to a maximum of 1080p.", PREMIUM_UPSELL_UPLOAD_DESCRIPTION_MOBILE: "Max file size is {maxUploadStandard}. Upgrade to **Discord Nitro** for {maxUploadPremium} file limit!", PREMIUM_UPSELL_BADGE_DESCRIPTION_MOBILE: "Deck out your profile! Subscribe to **Discord Nitro** and get an exclusive Nitro badge.", PREMIUM_UPSELL_EMOJI_DESCRIPTION_MOBILE: "Lift off with **Discord Nitro** to use animated and custom emoji on any server.", PREMIUM_UPSELL_EMOJI_DESCRIPTION_MOBILE_NEW: "Subscribe to lift off with **Discord Nitro** to use animated and custom emoji on any server.", PREMIUM_UPSELL_ANIMATED_AVATAR_DESCRIPTION_MOBILE: "If you wanna upload a fun animated avatar, you should subscribe to **Discord Nitro**.", PREMIUM_UPSELL_ANIMATED_EMOJIS_DESCRIPTION_MOBILE: "Hey friend you gotta subscribe to **Discord Nitro** to use animated emoji.", PREMIUM_UPSELL_ANIMATED_EMOJIS_DESCRIPTION_MOBILE_GENERIC: "Hey friend you gotta subscribe to **{planName}** to use animated emoji.", PREMIUM_UPSELL_GLOBAL_STICKERS_TITLE_MOBILE: "You can't use this sticker right now", PREMIUM_UPSELL_GLOBAL_STICKERS_DESCRIPTION_MOBILE: "Subscribe to lift off with **Discord Nitro** to use custom stickers on any server.", PREMIUM_UPSELL_GLOBAL_STICKERS_DESCRIPTION_MOBILE_GENERIC: "Subscribe to lift off with **{planName}** to use custom stickers on any server.", PREMIUM_RETENTION_EMOJI_PICKER_DESCRIPTION: "Careful! Your !!{planName}!! perks, including global and animated emoji, expire soon on **{endsAt, date, medium}**.", PREMIUM_RETENTION_EMOJI_PICKER_UPDATE_PAYMENT_INFORMATION: "Update your payment information.", PREMIUM_NITRO_DROP_2023_HEADER: "We Unleashed 4x the Fun on Nitro!", PREMIUM_NITRO_DROP_2023_SUBHEADER: "Get your airhorn ready, because these 4 new Nitro perks are coming in hot", PREMIUM_NITRO_DROP_2023_SHARE_NITRO_PROMO: "For a limited time, Nitro members can share a trial with up to 3 friends.", PREMIUM_NITRO_DROP_2023_TERMS: "Additional terms apply. [Learn more]({helpdeskArticle})", PREMIUM_NITRO_DROP_2023_SHARE_NITRO_TIER_2_NUDGE: "Share the Nitro fun!", PREMIUM_NITRO_DROP_2023_SHARE_NITRO_NON_TIER_2_SUB_NUDGE: "Need an extra reason to upgrade to Nitro?", PREMIUM_NITRO_DROP_2023_SHARE_NITRO_NON_SUB_NUDGE: "Need an extra reason to get Nitro?", PREMIUM_NITRO_DROP_2023_SHARE_NITRO_WITH_TRIAL_NUDGE: "Need an extra reason to try Nitro?", PREMIUM_NITRO_DROP_2023_CLIENT_THEMES_FEATURE_HEADER: "New Themes", PREMIUM_NITRO_DROP_2023_CLIENT_THEMES_FEATURE_SUBHEADER: "Bring your vibe to Discord with new themes.", PREMIUM_NITRO_DROP_2023_AVATAR_DECO_FEATURE_HEADER: "Avatar Decorations", PREMIUM_NITRO_DROP_2023_AVATAR_DECO_FEATURE_SUBHEADER: "Add some flair to your profile with limited-time decorations.", PREMIUM_NITRO_DROP_2023_SOUNDBOARD_FEATURE_HEADER: "Soundboard", PREMIUM_NITRO_DROP_2023_SOUNDBOARD_FEATURE_SUBHEADER: "Crank up the fun in voice with sound reactions.", PREMIUM_NITRO_DROP_2023_SUPER_REACTIONS_FEATURE_HEADER: "Super Reactions", PREMIUM_NITRO_DROP_2023_SUPER_REACTIONS_FEATURE_SUBHEADER: "Hype up the chat with new animated reactions (coming soon).", PREMIUM_NITRO_DROP_2023_SUPER_REACTIONS_FEATURE_SUBHEADER_2: "Hype up the chat with new animated reactions.", PREMIUM_NITRO_DROP_2023_TIER_2_SUB_BUTTON_TEXT: "Learn more", PREMIUM_NITRO_DROP_2023_NON_TIER_2_SUB_BUTTON_TEXT: "Upgrade your plan", PREMIUM_NITRO_DROP_2023_NON_SUB_BUTTON_TEXT: "Get Nitro", PREMIUM_NITRO_DROP_2023_WITH_TRIAL_BUTTON_TEXT: "Try 1 month free", PREMIUM_NITRO_DROP_2023_BANNER_HEADER: "4x the Fun Incoming with Nitro", PREMIUM_NITRO_DROP_2023_BANNER_TIER_2_SUB_SUBHEADER: "Try the latest perks: Themes, Avatar Decorations, Super Reactions (coming soon), and Soundboard!", PREMIUM_NITRO_DROP_2023_BANNER_TIER_2_SUB_SUBHEADER_2: "Try the latest perks: Themes, Avatar Decorations, Soundboard, and Super Reactions!", PREMIUM_NITRO_DROP_2023_BANNER_NON_TIER_2_SUB_SUBHEADER: "Check out the latest perks: Themes, Avatar Decorations, Super Reactions (coming soon), and Soundboard!", PREMIUM_NITRO_DROP_2023_BANNER_NON_TIER_2_SUB_SUBHEADER_2: "Check out the latest perks: Themes, Avatar Decorations, Soundboard, and Super Reactions!", PREMIUM_2024_APRIL_NITRO_OFFER_HEADER: "Spring into Style with a Nitro Offer", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_SUBHEADER: "Join Nitro and get a Gyoiko Sakura decoration on us! Yours to use with Nitro. Plus, enjoy perks like:", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_CUSTOM_PROFILE_TILE_HEADER: "Custom Profiles", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_CUSTOM_PROFILE_TILE_BODY: "Look your best no matter where you are on Discord with a profile color theme, banner image, and animated avatar.", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_COLOR_THEMES_TILE_HEADER: "Color Themes", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_COLOR_THEMES_TILE_BODY: "Freshen up your desktop and mobile app and choose from over 20 themes like Cotton Candy, Hanami, and more.", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_APP_ICONS_TILE_HEADER: "Custom App Icons", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_APP_ICONS_TILE_BODY: "Personalize your mobile and desktop screens with a custom app icon that fits your vibe.", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_MODAL_TOP_PILL: "New Offer", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_BUTTON_CTA_NON_SUB: "Join Nitro", PREMIUM_2024_APRIL_NITRO_OFFER_MODAL_BUTTON_CTA_NON_TIER_2_SUB: "Upgrade", PREMIUM_2024_APRIL_NITRO_OFFER_BANNER_HEADER: "Spring into Style with a\n\nNitro Offer", PREMIUM_2024_APRIL_NITRO_OFFER_BANNER_BODY_NON_SUB: "Join Nitro and get an avatar decoration on us! [Learn more.]({helpCenterLink})", PREMIUM_2024_APRIL_NITRO_OFFER_BANNER_BODY_UPGRADE: "Upgrade and get an avatar decoration on us! [Learn more.]({helpCenterLink})", PREMIUM_2024_APRIL_NITRO_OFFER_PAYMENT_FLOW_BANNER_HEADER: "Join & Get Your Avatar Decoration", PREMIUM_2024_APRIL_NITRO_OFFER_CLAIM_DECO_MODAL_BODY: "Welcome to Nitro!\n\nWe wanted you to look good on your first day. Head to your profile to equip your new avatar decoration.", PROFILE_LOOKING_GOOD_TOOLTIP_TEXT: "Lookin’ good!", PREMIUM_FEATURE_AVATAR_DECORATIONS_HEADER: "Avatar Decorations", EMOJI_PICKER_PREMIUM_UPSELL_TITLE: "Unlock these emoji with Nitro", EMOJI_PICKER_PREMIUM_UPSELL_BODY: "Use these emoji and more by subscribing to Nitro.", EMOJI_PICKER_PREMIUM_TIER_0_UPSELL_BODY: "Use these emoji and more by subscribing to {planName}.", EMOJI_PICKER_PREMIUM_UPSELL_BODY_TOP_OF_LIST: "Unlock every emoji and use them anywhere with Nitro.", EMOJI_PICKER_PREMIUM_UPSELL_CTA: "Get Nitro", EMOJI_PICKER_CREATE_EMOJI_TITLE: "Upload a custom emoji", EMOJI_PICKER_CREATE_EMOJI_TITLE_DESCRIPTION: "Feeling emoji-tional?", EMOJI_PICKER_PREMIUM_PROMO_DESCRIPTION: "Lift off with **{planName}** to use animated and custom emoji anywhere.", SUBSCRIPTION_PAYMENT_LEGALESE_MONTHLY: "Hey! What you're purchasing is a recurring subscription, which means we'll charge you today and continue to charge you monthly until you cancel the subscription. You can cancel anytime from your Settings page, though!", SUBSCRIPTION_PAYMENT_LEGALESE_MULTI_MONTH: "Hey! What you're purchasing is a recurring subscription, which means we'll charge today and continue to charge you every {intervalCount} months until you cancel the subscription. You can cancel anytime from your Settings page, though!", SUBSCRIPTION_PAYMENT_LEGALESE_YEARLY: "Hey! What you're purchasing is a recurring subscription, which means we'll charge you today and continue to charge you yearly until you cancel the subscription. You can cancel anytime from your Settings page, though!", SUBSCRIPTION_PAYMENT_LEGALESE_V2: '**By clicking "{primaryText}", you are purchasing a recurring subscription.** You\'ll be charged {rate} plus applicable taxes starting today, less any applicable credits or discounts, until you cancel. Cancel anytime from your Settings page. [Paid Service Terms]({paidURL}) apply. Have questions? [Contact us]({contactLink}) or see our [Subscriptions FAQ]({helpdeskArticle}).', SUBSCRIPTION_PAYMENT_LEGALESE_PLAN_CHANGE_V2: '**By clicking "{primaryText}", you are purchasing a recurring subscription.** You\'ll be charged {rate} plus applicable taxes on the date shown above, less any applicable credits or discounts, until you cancel. Cancel anytime from your Settings page. [Paid Service Terms]({paidURL}) apply. Have questions? [Contact us]({contactLink}) or see our [Subscriptions FAQ]({helpdeskArticle}).', SUBSCRIPTION_PAYMENT_LEGALESE_RESUME: '**By clicking "{primaryText}", you are resuming a recurring subscription.** You\'ll be charged {rate} plus applicable taxes starting today, less any applicable credits or discounts, until you cancel. Cancel anytime from your Settings page. [Paid Service Terms]({paidURL}) apply. Have questions? [Contact us]({contactLink}) or see our [Subscriptions FAQ]({helpdeskArticle}).', SUBSCRIPTION_PAYMENT_LEGALESE_PAYSAFECARD: "Please note that Discord can’t refund purchases made with a Paysafecard.", SOFORT_MANDATE_AGREEMENT: "By providing your payment information and confirming this payment, you authorise (A) Discord and Stripe, our payment service provider and/or PPRO, its local service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur.", PAYMENT_SOURCES_ADD: "Add a new payment method", ATTACH_PAYMENT_SOURCE_PROMPT_OPTION: "Attach a payment method to continue", ATTACH_PAYMENT_SOURCE_PROMPT_OPTION_OPTIONAL: "Attach a payment method (Optional)", ATTACH_PAYMENT_SOURCE_OPTIONAL_WITH_ENTITLEMENTS_WARNING: "You have **{months, plural, =1 {# month} other {# months}} of credit**. A payment source is required to avoid interruptions after your credit has been used.", PAYMENT_SOURCE_TYPE_SELECT: "Select Payment Type", PAYMENT_SOURCE_TYPE: "Payment Type", PAYMENT_SOURCE_INFORMATION: "Payment Information", PAYMENT_SOURCE_CREDIT_CARD_CARD_ONLY: "Card", PAYMENT_SOURCE_UNKNOWN: "Unknown", PAYMENT_SOURCE_PRZELEWY24: "Przelewy24", PAYMENT_SOURCE_PRZELEWY24_INFO: "Przelewy24 Info", PAYMENT_SOURCE_PRZELEWY24_BANK_LABEL: "Przelewy24 Bank", PAYMENT_SOURCE_EPS: "EPS", PAYMENT_SOURCE_EPS_WITH_BANK: "EPS with **{bank}**", PAYMENT_SOURCE_EPS_INFO: "EPS Info", PAYMENT_SOURCE_EPS_BANK_LABEL: "EPS Bank", PAYMENT_SOURCE_EPS_ACCOUNT_HOLDER_NAME: "Account Holder Name", PAYMENT_SOURCE_ACCOUNT_HOLDER_NAME: "Account Holder Name", PAYMENT_SOURCE_IDEAL: "iDEAL", PAYMENT_SOURCE_IDEAL_WITH_BANK: "iDEAL with **{bank}**", PAYMENT_SOURCE_IDEAL_BANK_LABEL: "iDEAL Bank", PAYMENT_SOURCE_SOFORT: "Sofort", PAYMENT_SOURCE_SOFORT_INFO: "Sofort Info", PAYMENT_SOURCE_PAYSAFE_CARD: "Paysafecard", PAYMENT_SOURCE_PAYSAFE_CARD_REDIRECT: "Paysafecard (auto-redirect to new browser)", PAYMENT_SOURCE_GIROPAY: "Giropay", PAYMENT_SOURCE_PAYPAL: "PayPal", PAYMENT_SOURCE_GCASH: "GCash", PAYMENT_SOURCE_GRABPAY: "GrabPay", PAYMENT_SOURCE_MOMO_WALLET: "MoMo Wallet", PAYMENT_SOURCE_VENMO: "Venmo", PAYMENT_SOURCE_KAKAOPAY: "KaKaoPay", PAYMENT_SOURCE_GOPAY_WALLET: "GoPay", PAYMENT_SOURCE_BANCONTACT: "Bancontact", PAYMENT_SOURCE_CASH_APP_PAY: "Cash App Pay", PAYMENT_SOURCE_APPLE: "Apple", PAYMENT_SOURCE_PAYPAL_LOADING: "Contacting PayPal...", PAYMENT_SOURCE_CARD_ENDING: "{brand} ending in **{last_4}**", PAYMENT_SOURCE_CARD_EXPIRES: "Expires {month} {year}", PAYMENT_SOURCE_PAYPAL_ACCOUNT: "PayPal Account", PAYMENT_SOURCE_PAYMENT_REQUEST_LABEL: "Add Payment", PAYMENT_SOURCE_PAYMENT_REQUEST_INFO_LOADING: "Confirming payment in your browser!", PAYMENT_SOURCE_PAYMENT_REQUEST_INFO_CREATING: "Creating card ending in {last4}...", PAYMENT_SOURCE_PAYMENT_REQUEST_INFO_TITLE: "Pay for it with", PAYMENT_SOURCE_PAYMENT_REQUEST_BUTTON_GENERIC: "Autofill from Browser", PAYMENT_SOURCE_PAYMENT_REQUEST_BUTTON_GPAY: "Google Pay", PAYMENT_SOURCE_PAYMENT_REQUEST_UNSUPPORTED: "Autofill from Browser (N/A)", PAYMENT_SOURCE_CONFIRM_PAYPAL_DETAILS: "Confirm PayPal details in your browser!", PAYMENT_SOURCE_CONNECT_TO_PAYPAL: "Connect to PayPal", PAYMENT_SOURCE_PAYPAL_DETAILS: "PayPal Details", PAYMENT_SOURCE_CARD_NUMBER: "Card Number", PAYMENT_SOURCE_EXPIRATION_DATE_PLACEHOLDER: "MM/YY", PAYMENT_SOURCE_MAKE_DEFAULT: "Make this my default payment method.", PAYMENT_SOURCE_DELETE: "Delete Payment Method", PAYMENT_SOURCE_DELETED: "Payment Method deleted", PAYMENT_SOURCE_EDIT_SELECT_STATE: "Select State", PAYMENT_SOURCE_EDIT_TITLE: "Edit Payment Method", PAYMENT_SOURCE_EDIT_HELP_CARD: "To edit other card information, please use the 'Add Payment Method' button.", PAYMENT_SOURCE_EDIT_HELP_PAYPAL: "To edit your PayPal payment information, visit [PayPal.com]({paypalURL}).", PAYMENT_SOURCE_EDIT_SAVED: "Payment information saved", PAYMENT_SOURCE_NAME_ERROR_REQUIRED: "Name is required.", PAYMENT_SOURCE_EMAIL_ERROR_REQUIRED: "Email is required.", PAYMENT_SOURCE_CARD_ENDING_IN: "Card ending in {last4}", PAYMENT_SOURCE_DELETE_DISABLED_TOOLTIP: "Cannot delete this payment source while you have an active Nitro subscription.", PAYMENT_SOURCE_INVALID: "Invalid", PAYMENT_SOURCE_INVALID_HELP: "We were unable to successfully charge this payment source. Please ensure the information is correct.", PAYMENT_SOURCE_SUBSCRIPTION: "Subscription", PAYMENT_SOURCE_REDEMPTION_INVALID: "Sorry, This Payment Source Cannot Be Used for Redemption", PAYMENT_SOURCE_VENMO_DETAILS: "Venmo Details", PAYMENT_SOURCE_VENMO_LOADING: "Contacting Venmo...", PAYMENT_SOURCE_CONNECT_TO_VENMO: "Connect to Venmo", PAYMENT_SOURCE_VENMO_CONNECTION_INSTRUCTIONS: "Follow the steps to complete your account connection.", PAYMENT_SOURCE_VENMO_CONNECTED_SUCCESS: "You've connected {venmoUsername}'s account.", PAYMENT_SOURCE_VENMO_CONNECTED_SUCCESS_INSTRUCTIONS: "Hooray! You can now pay via your Venmo account.", PAYMENT_SOURCE_CASH_APP_PAY_DETAILS: "Cash App Pay Details", PAYMENT_SOURCE_CASH_APP_PAY_LOADING: "Contacting Cash App Pay...", PAYMENT_SOURCE_CONNECT_TO_CASH_APP_PAY: "Connect to Cash App Pay", PAYMENT_SOURCE_CASH_APP_PAY_CONNECTION_INSTRUCTIONS: "Follow the steps to complete your account connection.", PAYMENT_SOURCE_CASH_APP_PAY_CONNECTED_SUCCESS: "You've connected {cashtag}'s account.", PAYMENT_SOURCE_CASH_APP_PAY_CONNECTED_SUCCESS_INSTRUCTIONS: "Hooray! You can now pay via your Cash App account.", PAYMENT_MODAL_SUBTITLE_PREMIUM_GIFT: "Buy a Gift", PAYMENT_MODAL_BUTTON_PREMIUM: "Get !!{planPremiumType}!!", PAYMENT_MODAL_BUTTON_PREMIUM_GIFT: "Buy Gift", PAYMENT_MODAL_ONE_YEAR: "1 Year", PAYMENT_MODAL_ONE_MONTH: "1 Month", PAYMENT_PRICE_CHANGE_TITLE: "The price changed!", PAYMENT_PRICE_CHANGE_BODY: "The price has changed since you started the purchase. Please restart the purchase after checking the price.", PAYMENT_CURRENCY: "Currency", PAYMENT_CURRENCY_PAYING_IN: "Paying in", PREMIUM_PAYMENT_IS_GIFT: "You are purchasing a gift.", PREMIUM_PAYMENT_IS_GIFT_IN_TIER_0_EXPERIMENT: "Gifting is only available for Nitro (Nitro Basic coming soon)", PREMIUM_PAYMENT_IS_GIFT_STREAM_QUALITY_UPSELL: "This Nitro gift includes HD quality streaming and other perks.", PREMIUM_PAYMENT_GIFT_SUBTEXT_MONTHLY: "This will be a one time charge for the amount of time chosen. You will not be billed monthly.", PREMIUM_PAYMENT_GIFT_SUBTEXT_YEARLY: "This will be a one time charge for the amount of time chosen. You will not be billed yearly.", PREMIUM_PAYMENT_CONFIRMATION_BLURB_IAP: "You can now claim {skuName} using your Nitro subscription. Let's get this bread!!!", PREMIUM_PAYMENT_CONFIRMATION_BUTTON_IAP: "Get {skuName}!", PREMIUM_TIER_2_GIFT_BLURB_MOBILE: "Gift someone Nitro to give them access to all the perks, including HD video, 2 Server Boosts, Profile personalization, and more. [Learn more about Nitro.](onClick)", PREMIUM_PAYMENT_GIFT_BLURB_MOBILE: "Gift someone Nitro to give access to super powered chat perks and Server Boosting. [Learn more about Nitro.](onClick)", PREMIUM_CLASSIC_PAYMENT_GIFT_BLURB_MOBILE: "Gift someone Nitro Classic to enhance their experience with super powered chat perks. [Learn more about Nitro Classic.](onClick)", PREMIUM_TIER_0_GIFT_BLURB_MOBILE: "Gift someone Nitro Basic to give them access to custom emoji & stickers anywhere, bigger file uploads, and more. [Learn more about Nitro Basic.](onClick)", PREMIUM_REQUIRED: "Nitro Required", PREMIUM_SUBSCRIPTION_REQUIRED_BODY: "Hold up! You need Nitro to get this loot.", PREMIUM_UPGRADE_REQUIRED_BODY: "Hold up! You need Nitro to get this loot. You have Nitro Classic.", PREMIUM_REQUIRED_GET_NITRO: "Get Nitro!", BILLING: "Billing", BILLING_SECURE_TOOLTIP: "Your payment methods are encrypted and stored with a secure payment processing service.", BILLING_PAYMENT_SOURCES: "Payment Methods", BILLING_ADD_PAYMENT_METHOD: "Add Payment Method", BILLING_SECURE: "Secure", BILLING_NO_PAYMENT_METHOD: "No payment method saved", BILLING_NO_PAYMENT_METHOD_DESCRIPTION: "Checkout faster by saving a payment method", BILLING_SALES_TAX_ADDED: "!!{tax}!! in sales tax has been added due to your billing address.", BILLING_SALES_TAX_INCLUDED: "Tax is included with the price.", BILLING_CODE_REDEMPTION_REDIRECT: "Psst! Looking to redeem a Discord key? We've moved it to [your inventory](onClick).", BILLING_MANAGED_BY_APPLE: "Your subscription is handled by Apple.", BILLING_MANAGED_BY_PAYMENT_GATEWAY: "Your subscription is handled by !!{paymentGatewayName}!!", BILLING_MANAGE_SUBSCRIPTION: "Manage Subscription", BILLING_MANAGE_ON_GOOGLE_PLAY: "Manage subscription in Google Play", BILLING_MANAGE_ON_GOOGLE_PLAY_LINK: "[Manage subscription in Google Play]({onClick})", BILLING_MANAGE_BILLING: "Change Payment Method", BILLING_ADDRESS: "Billing Address", BILLING_ADDRESS_ADDRESS: "Address", BILLING_ADDRESS_ADDRESS_ERROR_REQUIRED: "Oops! You forgot this one!", BILLING_ADDRESS_ADDRESS_PLACEHOLDER: "123 Discord Drive", BILLING_ADDRESS_ADDRESS2: "Address 2 (Optional)", BILLING_ADDRESS_ADDRESS2_PLACEHOLDER: "Apt, Ste, Dimension", BILLING_ADDRESS_CITY: "City", BILLING_ADDRESS_CITY_ERROR_REQUIRED: "City is required", BILLING_ADDRESS_CITY_PLACEHOLDER: "Coolsville", BILLING_ADDRESS_ZIP_CODE: "ZIP Code", BILLING_ADDRESS_ZIP_CODE_ERROR_REQUIRED: "ZIP code is required", BILLING_ADDRESS_ZIP_CODE_ERROR_LENGTH: "ZIP code must be 5 digits", BILLING_ADDRESS_ZIP_CODE_INVALID: "ZIP code is invalid", BILLING_ADDRESS_ZIP_CODE_PLACEHOLDER: "00000", BILLING_ADDRESS_POSTAL_CODE: "Postal Code", BILLING_ADDRESS_POSTAL_CODE_ERROR_REQUIRED: "Postal code is required", BILLING_ADDRESS_POSTAL_CODE_CANADA_PLACEHOLDER: "A1B 2C3", BILLING_ADDRESS_STATE: "State", BILLING_ADDRESS_STATE_ERROR_REQUIRED: "State is required", BILLING_ADDRESS_REGION: "State/Province/Region", BILLING_ADDRESS_PROVINCE: "Province", BILLING_ADDRESS_PROVINCE_ERROR_REQUIRED: "Province is required", BILLING_ADDRESS_COUNTRY: "Country", BILLING_ADDRESS_COUNTRY_ERROR_REQUIRED: "Country is required", BILLING_ADDRESS_NAME: "Name", BILLING_ADDRESS_NAME_ERROR_REQUIRED: "Name is required", BILLING_STEP_SELECT_PLAN: "Select Plan", BILLING_STEP_PAYMENT: "Payment", BILLING_STEP_PAYMENT_TYPE: "Payment Type", BILLING_STEP_PAYMENT_INFO: "Payment Information", BILLING_STEP_PAYPAL: "PayPal Information", BILLING_STEP_VENMO: "Venmo Information", BILLING_STEP_CREDIT_CARD_INFORMATION: "Payment Information", BILLING_STEP_ADDRESS: "Address", BILLING_STEP_REVIEW: "Review", BILLING_STEP_AWAITING_AUTHENTICATION: "Awaiting Authentication", BILLING_STEP_SHOP: "Shop", BILLING_STEP_PLAN: "Plan", BILLING_STEP_PAYMENT_METHOD: "Payment Method", BILLING_STEP_PLAN_AND_PAYMENT: "Plan & Payment", BILLING_CHECKOUT_CONFIRMATION_HEADER: "Close Checkout?", BILLING_CHECKOUT_CONFIRMATION_BODY: "You may lose any unsaved progress for your purchase. Are you sure you want to close checkout?", BILLING_CHECKOUT_CONFIRMATION_CONFIRM: "Close Checkout", BILLING_CHECKOUT_CONFIRMATION_CANCEL: "Cancel", BILLING_PAY_FOR_IT_WITH: "Pay for it With", BILLING_PAYMENT_AUTHORIZATION_CHARGE: "A hold may be placed on your payment method. [Learn More]({helpDeskArticle})", BILLING_IS_GIFT_PURCHASE: "Is this a gift?", BILLING_GIFT_LINK: "Gift Link", BILLING_GIFT_COPIED: "Copied!", BILLING_LEGAL_MUMBO_JUMBO: "Legal Mumbo Jumbo", BILLING_LEGAL_MUMBO_JUMBO_TERMS_LABEL: "I agree to the [Discord Terms of Service]({termsURL}) and [Paid Services Terms]({paidURL})", BILLING_LEGAL_MUMBO_JUMBO_TERMS_LABEL_SIMPLE: "I agree to the [Paid Services Terms]({paidURL})", BILLING_LEGAL_MUMBO_JUMBO_TERMS_LABEL_V2: 'By clicking "{primaryText}", you agree to the [Paid Services Terms]({paidURL}).', BILLING_LEGAL_MUMBO_JUMBO_TRIAL_TERMS_LABEL: "I agree to the [Discord Terms of Service]({termsURL}), [Paid Services Terms]({paidURL}), and that my subscription will renew for **{rate}** on **{renewalDate, date, medium}**. I can cancel anytime under User Settings > Subscriptions, and previous charges won’t be refunded unless required by law.", BILLING_THIRD_PARTY_EULA_LABEL: "I agree to the [{applicationName} EULA](onClick)", BILLING_ONLINE_PURCHASE_WAIVER: "Online Purchase Waiver", BILLING_ONLINE_PURCHASE_WAIVER_CHECKBOX: "I agree to Discord’s Right to Withdrawal waiver", BILLING_ONLINE_PURCHASE_WAIVER_DISCLAIMER: "You understand that services begin upon purchase, and you waive your Right to Withdrawal once those services begin.", BILLING_PURCHASE_TERMS_ONE_TIME_DISCLAIMER: "By clicking {primaryText}, you agree to our [Terms of Service]({termsURL}).", BILLING_PURCHASE_TERMS_SUBSCRIPTION_DISCLAIMER: "By clicking {primaryText}, you are agreeing to our [Terms of Service]({termsURL}). This is a recurring subscription, which means that we'll charge you today and continue to charge you every {period} until you cancel your subscription. You can cancel anytime through [User Settings]({userSettingsURL}).", BILLING_PRICE_PER_MONTH: "!!{price}!! / Month", BILLING_PRICE_PER_MONTH_CURRENT_PLAN_MOBILE: "(Current Plan) !!{price}!! / Month", BILLING_PRICE_PER_YEAR: "!!{price}!! / Year", BILLING_PRICE_PER_MONTH_BOLD: "**!!{price}!!** / Month", BILLING_PRICE_PER_YEAR_BOLD: "**!!{price}!!** / Year", BILLING_PRICE_PER_MULTI_MONTHS_BOLD: "**!!{price}!!** Every {intervalCount} months", BILLING_PRICE_PER_YEAR_CURRENT_PLAN_MOBILE: "(Current Plan) !!{price}!! / Year", BILLING_PRICE_PER_MONTH_EACH: "!!{price}!! / Month each", BILLING_PRICE_PER_YEAR_EACH: "!!{price}!! / Year each", BILLING_PRICE_PER_MULTI_MONTH_EACH: "!!{price}!! each", BILLING_PRICE_PER_MULTI_MONTHS: "!!{price}!! every {intervalCount} months", BILLING_PREMIUM_GIFT_YEAR_MOBILE: "!!{price}!! for 1 Year", BILLING_PREMIUM_GIFT_MONTH_MOBILE: "!!{price}!! for 1 Month", BILLING_PREMIUM_PREMIUM_TEXT_A11Y_LABEL: "{product}, {description}", BILLING_ACCEPT_TERMS_PAID_SERVICES_TOOLTIP: "Accept the Terms of Service and Paid Services Terms to continue", BILLING_SELECT_PAYMENT_SOURCE_TOOLTIP: "Select a payment source to continue", BILLING_PAYMENT_SOURCE_INVALID: "This payment source is invalid.", BILLING_TRIAL_REDEMPTION_DISABLED: "Trial redemption is temporarily unavailable. Please try again later.", BILLING_ACCOUNT_CREDIT: "Account Credit", BILLING_ACCOUNT_CREDIT_DESCRIPTION: "When you accept a gift while you have a running subscription, or accept a gift that differs from your current subscription, it will appear here as credit.", BILLING_ACCOUNT_CREDIT_DESCRIPTION_IOS_DISCLAIMER: "Unfortunately mobile subscriptions are not eligible for account credit. Account credit will be applied while subscribing through the desktop app.", BILLING_SUBSCRIPTION_CREDIT: "Subscription Credit", BILLING_PAYMENT_PREMIUM: "Your Subscription", BILLING_PAYMENT_PREMIUM_DESCRIPTION: "These are your current subscriptions. They will be billed on the same billing cycle. You can update any subscription at any time.", BILLING_PAYMENT_PREMIUM_TERMS_LEGALESE_MONTHLY: "By purchasing a Discord subscription, you agree to our [Terms of Service]({termsUrl}), [Paid Services Terms]({paidURL}), and [Privacy Policy]({privacyUrl}). Nitro and Server Boost are auto-recurring subscriptions. You authorize Discord to immediately charge the payment method provided at !!{price}!! and to continue to do so automatically monthly until you cancel. You may cancel anytime.", BILLING_PAYMENT_PREMIUM_TERMS_LEGALESE_MULTI_MONTH: "By purchasing a Discord subscription, you agree to our [Terms of Service]({termsUrl}), [Paid Services Terms]({paidURL}), and [Privacy Policy]({privacyUrl}). Nitro and Server Boost are auto-recurring subscriptions. You authorize Discord to immediately charge the payment method provided at !!{price}!! and to continue to do so automatically every {intervalCount} months until you cancel. You may cancel anytime.", BILLING_PAYMENT_PREMIUM_TERMS_LEGALESE_YEARLY: "By purchasing a Discord subscription, you agree to our [Terms of Service]({termsUrl}), [Paid Services Terms]({paidURL}), and [Privacy Policy]({privacyUrl}). Nitro and Server Boost are auto-recurring subscriptions. You authorize Discord to immediately charge the payment method provided at !!{price}!! and to continue to do so automatically yearly until you cancel. You may cancel anytime.", BILLING_HISTORY: "Billing History", BILLING_PAYMENT_HISTORY: "Transaction History", BILLING_PAYMENT_BREAKDOWN_TAXES: "Taxes", BILLING_PAYMENT_ID: "Payment ID", BILLING_PAYMENT_ID_COPY: "Copy", BILLING_PAYMENT_ID_COPIED: "Copied!", BILLING_PAYMENT_BREAKDOWN_TOTAL: "Total", BILLING_PAYMENT_BREAKDOWN_REFUNDED: "Refunded", BILLING_PAYMENT_BREAKDOWN_NET: "Net", BILLING_PAYMENT_TABLE_HEADER_DATE: "Date", BILLING_PAYMENT_TABLE_HEADER_DESCRIPTION: "Description", BILLING_PAYMENT_TABLE_HEADER_AMOUNT: "Amount", BILLING_PURCHASE_DETAILS_HEADER: "Purchase Details", BILLING_DOWNLOAD_INVOICE_VAT: "Download Tax Invoice", BILLING_DOWNLOAD_REFUND_INVOICE: "Download VAT Credit Note", BILLING_DOWNLOAD_INVOICE: "Download extended purchase receipt", BILLING_DOWNLOAD_INVOICE_ADDRESS_OVERRIDE_TOGGLE: "Override Billing Address (Optional)", BILLING_DOWNLOAD_INVOICE_ADDRESS_OVERRIDE_DESCRIPTION: "Replace the billing address used during payment with a custom address to be displayed in the PDF", BILLING_DOWNLOAD_INVOICE_PDF_BUTTON: "Download PDF", BILLING_DOWNLOAD_INVOICE_PDF_BUTTON_ERROR: "Oops! Download doesn't seem to be working right now", BILLING_REFUND_HEADER: "Issues with your purchase?", BILLING_TAG_PENDING: "Pending", BILLING_TAG_FAILED: "Failed", BILLING_TAG_REFUNDED: "Refunded", BILLING_TAG_PARTIALLY_REFUNDED: "Partially Refunded", BILLING_TAG_REVERSED: "Reversed", BILLING_TAG_CANCELED: "Canceled", BILLING_APPLICATION_CONSUMABLE_REFUND_TEXT_UNABLE: "In-game content cannot be refunded. If there is an issue with your purchase, [please contact our support.]({supportURL})", BILLING_APPLICATION_REFUND_TEXT: "A refund can be requested if this purchase was made in the last {dateLimit, number} days and the game has been played for less than {playtimeLimit, number} hours. [Our friendly help desk will help you get your coins back.]({supportURL})", BILLING_PREMIUM_REFUND_TEXT: "A refund can be requested if this purchase was made in the last {dateLimit, number} days. [Our friendly help desk will help you get your coins back.]({supportURL})", BILLING_GIFT_REFUND_TEXT: "A refund can be requested if this purchase was made in the last {dateLimit, number} days and the gift has not been redeemed. [Our friendly help desk will help you get your coins back.]({supportURL})", BILLING_PREORDER_REFUND_TEXT: "A refund can be requested at any time before the game's release for preorders. [Our friendly help desk will help you get your coins back.]({supportURL})", BILLING_APPLICATION_REFUND_TEXT_UNABLE: "We're sorry, this purchase is not eligible for refunds. A refund can be requested if this purchase was made in the last {dateLimit, number} days and the game has been played for less than {playtimeLimit, number} hours.", BILLING_PREMIUM_REFUND_TEXT_UNABLE: "We're sorry, this purchase is not eligible for refunds. A refund can be requested if this purchase was made in the last {dateLimit, number} days.", BILLING_GIFT_REFUND_TEXT_UNABLE: "We're sorry, this purchase is not eligible for refunds. A refund can be requested if this purchase was made in the last {dateLimit, number} days and the gift has not been redeemed.", BILLING_COLLECTIBLES_REFUND_TEXT_UNABLE: "We're sorry, this purchase is not eligible for refunds.", BILLING_REFUND_PURCHASE_DATE_SUBHEADER: "Purchase Date", BILLING_REFUND_RELEASE_DATE_SUBHEADER: "Release Date", BILLING_REFUND_PURCHASE_DATE: "{daysSincePurchase, plural, =0 {Today} =1 {{daysSincePurchase} day ago} other {{daysSincePurchase} days ago}}", BILLING_REFUND_MODAL_HEADER: "Submit Refund", BILLING_REFUND_MODAL_HEADER_ERROR: "Something went wrong", BILLING_REFUND_ERROR: 'Looks like there was a problem when we tried to refund your purchase: "!!{error}!!".', BILLING_REFUND_ERROR_CONTACT_SUPPORT: "Please contact our [customer support team]({supportUrl}) for assistance.", BILLING_REFUND_BUTTON_TEXT: "Refund", BILLING_REFUND_SELECT_REASON: "Select a reason for the refund", BILLING_REFUND_REVOCATION_NOTICE: "By requesting a refund, you agree to lose access to this feature.", BILLING_REFUND_ONE_TIME_REFUND_NOTICE: "Limit one refund per subscription type, including gifts you redeem for yourself.", BILLING_REFUND_GENERIC_REASON: "We're sorry, this purchase is not eligible for refunds.", BILLING_REFUND_ALREADY_REFUNDED_PREMIUM_REASON: "You have already refunded a Nitro subscription.", BILLING_REFUND_ALREADY_REFUNDED_PREMIUM_GUILD_REASON: "You have already refunded a Boost subscription.", BILLING_REFUND_ALREADY_CONSUMED_REASON: "This gift has already been used.", BILLING_REFUND_USER_REASON_OTHER: "Something else", BILLING_REFUND_USER_REASON_USER_CONFUSION: "Wasn't what I expected", BILLING_REFUND_USER_REASON_GIFTING_REFUND: "Bought a gift I didn't use", BILLING_REFUND_USER_REASON_BUYERS_REMORSE: "Changed my mind", BILLING_REFUND_USER_REASON_WRONG_PURCHASE: "Bought it by mistake", BILLING_REFUND_USER_REASON_FORGOT_TO_CANCEL: "Forgot to cancel", BILLING_REFUND_USER_REASON_SERVER_BOOSTING_COOLDOWN: "Had a problem using Boosts", BILLING_REFUND_USER_REASON_WANT_TO_SWITCH_TIERS: "Want to switch Nitro plans", BILLING_REFUND_USER_REASON_DONT_NEED: "Don't need it anymore", BILLING_REFUND_REPORT_A_PROBLEM: "Report a problem", BILLING_GIFT_PURCHASE_TOOLTIP: "This was a gift", BILLING_EXTERNAL_HEADER: "You subscribed through !!{paymentGatewayName}!!", BILLING_EXTERNAL_DESCRIPTION: "!!{paymentGatewayName}!! transactions will not be listed below. To view !!{paymentGatewayName}!! transaction history or to change your !!{paymentGatewayName}!! payment method, [visit your !!{paymentGatewayName}!! Billing settings]({billingHistoryLink}).", BILLING_EXTERNAL_MANAGE_ELSEWHERE: "This is not supported for !!{paymentGatewayName}!! subscriptions. To manage your subscription, please [visit your !!{paymentGatewayName}!! Billing settings]({subscriptionManagementLink}).", BILLING_SWITCH_PLAN_TIER_2_DESCRIPTION: "Get access to superpowered perks and {numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}}.", BILLING_SWITCH_PLAN_TIER_1_DESCRIPTION: "Enhance your Discord experience with sweet perks.", BILLING_SWITCH_PLAN_TIER_0_DESCRIPTION_V3: "Get access to custom emoji & stickers and $[!!{uploadSize}!!](uploadSizeHook) uploads.", BILLING_SWITCH_PLAN_CHOOSE_ONE: "Choose one:", BILLING_SWITCH_PLAN_CHOOSE_ONE_TRIAL_SUBTITLE: "You won't be charged until after **your free month**, and you may cancel at any time.", BILLING_SWITCH_PLAN_CHOOSE_ONE_TRIAL_SUBTITLE_DURATION: "You won't be charged until after **your free {duration}**, and you may cancel at any time.", BILLING_SWITCH_PLAN_CURRENT_PLAN: "Current Plan", BILLING_SWITCH_PLAN_YEARLY_FREE_MONTHS: "2 months free!", BILLING_PLAN_SELECTION_DISCOUNT: "save !!{discount}!!", BILLING_SWITCH_PLAN_PURCHASE_DETAILS: "Purchase Details", BILLING_SWITCH_PLAN_SUBSCRIPTION_COST: "Subscription Cost", BILLING_SWITCH_PLAN_CHANGE_DATE: "Your subscription will change starting on **{renewalDate, date, medium}**.", BILLING_SWITCH_PLAN_CHANGE_DATE_WITH_CHARGE: "Your subscription will change starting on **{renewalDate, date, medium}** and will cost **{rate}**.", BILLING_SWITCH_PLAN_UPGRADE: "Upgrade", BILLING_SWITCH_PLAN_CHANGE: "Change Plan", BILLING_SWITCH_PLAN_UPGRADE_BODY_TIER_1: "Switch to Nitro Classic and get a discount on Server Boosts and some superpowered perks.", BILLING_SWITCH_PLAN_UPGRADE_BODY_TIER_2: "Get Nitro to gain access to superpowered perks and Server Boosts.", BILLING_SWITCH_PLAN_UPGRADE_BODY_TIER_2_YEAR: "Switch to a yearly plan and save some cash. Enjoy superpowered perks and {numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}} all year round.", BILLING_SWITCH_PLAN_UPGRADE_BODY_TIER_1_YEAR: "Save some cash and switch to a yearly plan. Enjoy sweet perks all year round.", BILLING_SWITCH_PLAN_DOWNGRADE_BODY_TIER_1: "Once you switch from Nitro to Nitro Classic, you lose the included Server Boosts and some superpowered perks.", BILLING_SWITCH_PLAN_DOWNGRADE_BODY_TIER_1_TO_TIER_0: "Once you switch from Nitro Classic to Nitro Basic, you lose the included Boost discount and some superpowered perks.", BILLING_SWITCH_PLAN_DOWNGRADE_BODY_TIER_0: "Once you switch from Nitro to Nitro Basic, you lose the included Server Boosts and some superpowered perks.", BILLING_SWITCH_PLAN_DOWNGRADE_BODY_MONTH: "Once you switch from the yearly plan to monthly, you keep all the same perks but you lose the 2 month free discount.", BILLING_SWITCH_PLAN_CONFIRM_TIER_0: "Hooray! You've got Nitro Basic. You can now use custom emoji anywhere, share bigger files, and more!", BILLING_SWITCH_PLAN_CONFIRM_TIER_1: "You now have sweet perks. Enjoy friend!", BILLING_SWITCH_PLAN_CONFIRM_TIER_2: "You now have superpowered perks and Server Boosts. Enjoy friend!", BILLING_SWITCH_PLAN_CONFIRM_TIER_2_NO_PAYMENT_TRIAL: "You will not be charged for this trial. After your free Nitro trial, you can extend it to a subscription by adding a payment method.", BILLING_SWITCH_PLAN_DELAYED_CONFIRMATION_TIER_1: "You will have sweet perks **once your payment has been completed.** We will send you an email as soon as it does.", BILLING_SWITCH_PLAN_DELAYED_CONFIRMATION_TIER_2: "You will have access to premium chat, 2 Boosts and a Boost discount **once your payment has been completed.** We will send you an email as soon as it does.", BILLING_SWITCH_PLAN_CONFIRM_UPGRADE_TIER_2_MONTH: "You now have superpowered perks and Server Boosts. Enjoy friend!", BILLING_SWITCH_PLAN_CONFIRM_UPGRADE_TIER_1_YEAR: "You now have sweet perks all year round. Enjoy friend!", BILLING_SWITCH_PLAN_DELAYED_CONFIRMATION_UPGRADE_TIER_1_YEAR: "You will have sweet perks all year round **once your payment has been completed.** We will send you an email as soon as it does.", BILLING_SWITCH_PLAN_CONFIRM_UPGRADE_TIER_2_YEAR: "You now have superpowered perks and {numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}} all year round. Enjoy friend!", BILLING_SWITCH_PLAN_DELAYED_CONFIRMATION_UPGRADE_TIER_2_YEAR: "You will have superpowered perks and {numFreeGuildSubscriptions, plural, =1 {# Server Boost} other {# Server Boosts}} all year round **once your payment has been completed.** We will send you an email as soon as it does.", BILLING_SWITCH_PLAN_CONFIRM_UPGRADE_TIER_2_MULTI_MONTH: "You now have superpowered perks and Server Boosts. Enjoy friend!", BILLING_SWITCH_PLAN_CONFIRM_TO_TIER_0: "You're now subscribed to Nitro Basic. Enjoy! Upgrade any time for more Nitro perks.", BILLING_SWITCH_PLAN_CONFIRM_TIER_2_TO_TIER_1: "You lose your included Server Boosts but keep some sweet perks. You can switch back plans at any time.", BILLING_SWITCH_PLAN_CONFIRM_TIER_2_YEAR_TO_MONTH: "You lose two free months but keep all superpowered perks and your Server Boosts. You can switch back to a yearly plan at any time.", BILLING_SWITCH_PLAN_CONFIRM_TIER_2_GENERIC_TO_MONTH: "Keep all superpowered perks and your Server Boosts with a monthly plan.", BILLING_SWITCH_PLAN_CONFIRM_TIER_1_YEAR_TO_MONTH: "You lose two free months but keep all your sweet perks.", BILLING_POST_PURCHASE_JOIN_GUILD_FOR_EMOJI: "Ready to join the **!!{guildName}!!** server and get that emoji?", BILLING_POST_PURCHASE_JOIN_GUILD_FOR_EMOJI_CTA: "Join Server", BILLING_SELECT_PLAN_PREMIUM_YEAR_TIER_0: "Get Nitro Basic Yearly", BILLING_SELECT_PLAN_PREMIUM_MONTH_TIER_0: "Get Nitro Basic Monthly", BILLING_SELECT_PLAN_PREMIUM_YEAR_TIER_1: "Get Nitro Classic Yearly", BILLING_SELECT_PLAN_PREMIUM_MONTH_TIER_1: "Get Nitro Classic Monthly", BILLING_SELECT_PLAN_PREMIUM_YEAR_TIER_2: "Get Nitro Yearly", BILLING_SELECT_PLAN_PREMIUM_MONTH_TIER_2: "Get Nitro Monthly", BILLING_SELECT_PLAN_PREMIUM_MONTHS_TIER_2: "Get Nitro {intervalCount} Month", BILLING_SELECT_PLAN: "Get Nitro", BILLING_PLAN_SELECT_DESCRIPTION_PREMIUM_TIER_1_PREMIUM_GUILD_BUNDLE: "Nitro Classic + {num, plural, =1 {# Boost} other {# Boosts}}", BILLING_PLAN_SELECT_DESCRIPTION_PREMIUM_TIER_2_PREMIUM_GUILD_BUNDLE: "Nitro + {num, plural, =1 {# Boost} other {# Boosts}}", BILLING_PLAN_SELECT_INCLUDES_BOOSTS: "(Includes {num, plural, =1 {# Boost} other {# Boosts}})", BILLING_PLAN_SELECTION: "Plan Selection", BILLING_SELECT_PLAN_GUILD_SUBSCRIPTION: "Get !!{planName}!!", BILLING_SUBSCRIBE_TO_PLAN: "Subscribe", BILLING_INVOICE_GIFT_PLAN: "Gift !!{planName}!!", BILLING_INVOICE_SUBSCRIPTION_CREDIT_APPLIED: "Subscription Credit applied!", BILLING_INVOICE_TOTAL: "**Total**", BILLING_INVOICE_TODAY_TOTAL: "**Today's Total**", BILLING_INVOICE_TODAY_TOTAL_TAX_INCLUSIVE: "**Today's Total** (Tax Included)", BILLING_INVOICE_TOTAL_TAX_INCLUSIVE: "**Total** (Tax Included)", BILLING_PREMIUM_TIER_0_PLAN_ACTIVATED: "You can now use your favorite emoji anywhere, share bigger files, and more.", BILLING_PREMIUM_TIER_1_PLAN_ACTIVATED: "You now have access to your favorite emoji that you can use anywhere, more ways to style your profile, and so much more! Enjoy friend.", BILLING_PREMIUM_TIER_2_PLAN_ACTIVATED: "You now have access to your favorite emoji that you can use anywhere, more ways to style all your profiles across each of your servers, bigger uploads, and so much more! Enjoy friend.", BILLING_RESUME_PAUSED_SUBSCRIPTION_IMMEDIATELY: "Your subscription will resume immediately", BILLING_ERROR_SECTION_CARD: "Uh oh! Looks like there is an issue with this card. Please fix the fields and try again!", BILLING_ERROR_UNSUPPORTED_CURRENCY: "Your payment method does not support the eligible currencies. Please add another payment method and set it to default.", BILLING_ERROR_SECTION_ADDRESS: "Uh oh! Looks like there is an issue with this address. Please fix the fields and try again!", BILLING_ERROR_ADD_PAYMENT_SOURCE_STREAMER_MODE: "You cannot add new payment sources while in Streamer Mode.", BILLING_ERROR_RATE_LIMIT: "You've attempted too many purchases too quickly. Please wait a bit and try again!", BILLING_ERROR_NEGATIVE_INVOICE_AMOUNT: "This purchase results in a negative balance and unfortunately cannot be completed. We know this is frustrating and are currently working on improving this system. Check back soon!", BILLING_ERROR_UNKNOWN_PAYMENT_SOURCE: "An unknown payment source was specified. Select another and try again.", BILLING_ERROR_GENERIC: "Something went wrong while processing your request, please try again!", BILLING_ERROR_PURCHASE: "An issue has occurred with your purchase. Please wait and try again.", BILLING_ERROR_PURCHASE_DETAILS_NOT_FOUND: "Purchase details not found. Please wait and try again.", BILLING_ERROR_TRY_ANOTHER: "Try another card or currency.", BILLING_ERROR_CONTACT_PAYMENT_SOURCE: "Try again or contact your payment source provider for help.", BILLING_ERROR_INVALID_PLAN_FOR_PAYMENT_SOURCE: "This plan is not available for this payment source. Please select a different plan or try a different payment source.", BILLING_ERROR_PENDING_PAYMENT: "Unable to process change due to pending payment.", BILLING_ERROR_INVALID_CAPTCHA_RESPONSE: "Invalid captcha response. Please try again.", BILLING_PREMIUM_PLANS: "Nitro Plans", BILLING_PREMIUM_AND_PREMIUM_GUILD_PLANS: "Nitro + Boost Plans", BILLING_PREMIUM_GUILD_PLANS: "Boost Plans", BILLING_PREMIUM_AND_PREMIUM_GUILD_PLAN_ACTIVATED: "You now have **{planName}**. Enjoy friend!", BILLING_FINAL_PRICE_MAY_CHANGE: "Final price and currency will be based on your selected payment method. [Learn More]({documentationLink}).", BILLING_HOW_PRICING_WORKS: "[Click here]({documentationLink}) to learn about how we determine what currency and price you pay.", BILLING_CONFIRM_PRICE_CHANGE_TITLE: "Confirm Price Change", BILLING_TRIAL_PAYMENT_MODAL_INFO: "Your **free trial** will end on {trialEnd, date, short}. Choose a plan for after your {trialPeriod} trial ends.", BILLING_TRIAL_MONTHLY_PRICE_AFTER_TRIAL: "{price}/month after trial", BILLING_TRIAL_YEARLY_PRICE_AFTER_TRIAL: "{price}/year after trial", BILLING_TRIAL_MONTHLY_PRICE_AFTER_TRIAL_TAX_EXCLUSIVE: "{price} + tax /month after trial", BILLING_TRIAL_YEARLY_PRICE_AFTER_TRIAL_TAX_EXCLUSIVE: "{price} + tax /year after trial", BILLING_TRIAL_PRICE_NOW: "{price} now", BILLING_TRIAL_CANCEL_ANYTIME_LINK: "[Cancel anytime in your Subscriptions]({link})", BILLING_TRIAL_CANCEL_ANYTIME: "Cancel anytime in your Subscriptions", BILLING_TRIAL_CHOOSE_PAYMENT: "Choose a payment method", BILLING_TRIAL_FREE_TRIAL_TEXT: "free trial", BILLING_DISCOUNT_PAYMENT_MODAL_INFO: "Pay just **{discountedPrice}** a month for your first **3 months** of Nitro. Pay {regularPrice} a month after the 3-month discount end.", BILLING_DISCOUNT_PAYMENT_MODAL_INFO_GENERIC: "Your first {numMonths, plural, one {month} other {{numMonths} months}} of Nitro Monthly {numMonths, plural, one {is} other {are}} **{discountedPrice}**. Pay {regularPrice} a month after the discount ends", BILLING_DISCOUNT_MONTHLY_PRICE: "{discountedPrice}/month for 3 months\n\n{regularPrice}/month after 3 months", BILLING_DISCOUNT_MONTHLY_PRICE_GENERIC: "{discountedPrice}/month for **{numMonths, plural, one {one month} other {{numMonths} months}}**\n\n{regularPrice}/month after {numMonths, plural, one {one month} other {{numMonths} months}}", BILLING_YEARLY_PLAN_SAVINGS: "Save !!{percent, number}!!% with annual subscription", BILLING_SUBTOTAL: "Subtotal", BILLING_TRIAL_LEGAL_COPY: 'By selecting "{buttonText}", you’re agreeing to Discord’s [Paid Service Terms]({paidServiceTermsArticle}). Nitro is a recurring subscription. Your payment method will be charged after your trial ends and continue to be charged every month unless you [cancel your subscription]({cancelSubscriptionArticle}). We’ll send a reminder email 7 days before your trial ends. Total doesn’t include any additional fees charged by your financial institution.', BILLING_TRIAL_LEGAL_COPY_V2: 'By selecting "{buttonText}", you’re agreeing to Discord’s [Paid Service Terms]({paidServiceTermsArticle}). Nitro is a recurring subscription. Your payment method will be charged after your trial ends and continue to be charged every {interval} unless you [cancel your subscription]({cancelSubscriptionArticle}). We’ll send a reminder email 7 days before your trial ends. Total doesn’t include any additional fees charged by your financial institution.', BILLING_DISCOUNT_LEGAL_COPY: 'By selecting "{buttonText}", you’re agreeing to Discord’s [Paid Service Terms]({paidServiceTermsArticle}). Nitro is a recurring subscription. Your payment method will be charged after your discount ends and continue to be charged every {interval} unless you [cancel your subscription]({cancelSubscriptionArticle}). We’ll send a reminder email 7 days before your discount ends. Total doesn’t include any additional fees charged by your financial institution.', BILLING_TRIAL_2_WEEK_PERIOD: "2-week", BILLING_TRIAL_30_DAY_PERIOD: "30-day", PAYMENT_AUTHENTICATION_MODAL_TITLE: "There was a problem with your payment", PAYMENT_AUTHENTICATION_MODAL_START: "We were unable to complete your payment of **!!{price}!!** for **!!{item}!!**. This is probably because it must be authenticated manually with your bank.", PAYMENT_AUTHENTICATION_MODAL_BUTTON: "Continue", PAYMENT_AUTHENTICATION_MODAL_BUTTON_CANCEL_PAYMENT: "Cancel Payment", PAYMENT_AUTHENTICATION_MODAL_TITLE_SUCCESS: "Payment Authenticated", PAYMENT_AUTHENTICATION_MODAL_SUCCESS: "Your payment was authenticated successfully. Thanks!", PAYMENT_AUTHENTICATION_MODAL_TITLE_FAIL: "Payment Authentication Failed", PAYMENT_AUTHENTICATION_MODAL_TITLE_CANCELED: "Payment Canceled", PAYMENT_AUTHENTICATION_MODAL_FAIL: "We were unable to authenticate your payment. Please try updating your payment method.", PAYMENT_AUTHENTICATION_MODAL_CANCELED: "Your payment for **!!{item}!!** has been canceled.", PAYMENT_WAITING_FOR_AUTHENTICATION: "Waiting for authentication...", PAYMENT_WAITING_FOR_PURCHASE_TOKEN_AUTHORIZATION_MODAL_HEADER: "Action Required", PAYMENT_WAITING_FOR_PURCHASE_TOKEN_AUTHORIZATION_MODAL: "Your purchase is almost complete.", PAYMENT_WAITING_FOR_PURCHASE_TOKEN_AUTHORIZATION_MODAL_INSTRUCTIONS: "We just sent you an email. Click the verification link in the email to authorize this purchase.", PAYMENT_WAITING_FOR_PURCHASE_TOKEN_AUTHORIZATION_MODAL_NEXT_BUTTON: "Continue", PAYMENT_WAITING_FOR_PURCHASE_TOKEN_AUTHORIZATION_MODAL_RESEND_PROMPT: "Didn't receive anything?", PAYMENT_WAITING_FOR_PURCHASE_TOKEN_AUTHORIZATION_MODAL_RESEND_ACTION: "Resend email", PAYMENT_WAITING_FOR_PURCHASE_TOKEN_AUTHORIZATION_MODAL_RESEND_SENT: "Email sent!", PAYMENT_WAITING_FOR_BROWSER_CHECKOUT_MODAL_HEADER: "Complete checkout on your browser", PAYMENT_WAITING_FOR_BROWSER_CHECKOUT_MODAL_NEXT_BUTTON: "Pay Here", FORM_ERROR_GENERIC: "Oops! You've caught an ultra rare error. This is probably our fault, so please try again or check [our status page]({statusPageURL}).", FORM_ERROR_GENERIC_WITH_DETAILS: "Oops! You've caught an ultra rare error. This is probably our fault, so please try again or check [our status page]({statusPageURL}). ({details})", ERROR_GENERIC_TITLE: "Oops, something went wrong...", DATE: "Date", DESCRIPTION: "Description", AMOUNT: "Amount", PENDING: "Pending", COMPLETED: "Completed", FAILED: "Failed", REVERSED: "Reversed", REFUND: "Refund", RESUBSCRIBE: "Re-subscribe", RESUME: "Resume Subscription", CANCEL_PAUSE: "Cancel Pause", CREDIT_CARD_ERROR_REQUIRED: "Card number required.", CREDIT_CARD_ERROR_NUMBER: "Something is wrong with your credit card number", CREDIT_CARD_ERROR_EXPIRATION: "Something is wrong with your expiration date", CREDIT_CARD_ERROR_SECURITY_CODE: "Something is wrong with your security code", PAYMENT_METHOD_CONFIRMATION_ERROR: "Unable to confirm payment method", PAYPAL_ACCOUNT_VERIFYING: "Connecting to PayPal", PAYMENT_ACCOUNT_VERIFYING: "Connecting with your payment source", PAYPAL_CALLBACK_SUCCESS: "**PayPal** account authorized. Return to **Discord** to complete the transaction.", REDIRECTED_CONFIRMATION_CALLBACK_SUCCESS: "Payment confirmed. Return to **Discord**.", REDIRECTED_CALLBACK_PENDING: "Connecting your payment source. Your payment method will show up in Billing Settings once confirmed.", REDIRECTED_PAYMENT_METHOD_CONFIRMATION_CALLBACK_SUCCESS: "Payment method confirmed. Return to **Discord**.", REDIRECTED_CALLBACK_ERROR: "Something went wrong, try again.", CARD_NUMBER: "Card Number", CREDIT_CARD_NUMBER: "Credit Card Number", CREDIT_CARD_CVC: "CVC", CREDIT_CARD_SECURITY_CODE: "Security Code", CREDIT_CARD_NAME_ON_CARD: "Name On The Card", CREDIT_CARD_NAME: "Name", CREDIT_CARD_EXPIRATION_DATE: "Expiration Date", IOS_IAP_ERROR_TITLE: "Oops...", IOS_IAP_ITUNES_ERROR: "Apple Error", IOS_IAP_GENERIC_BILLING_ERROR: "Something went wrong while processing your request, please try again.", IOS_IAP_RESTORE_SUBSCRIPTION_ERROR: "An error occurred while restoring your subscription. Please try again!", IOS_IAP_RESTORE_SUBSCRIPTION_SUCCESS: "Done.", IOS_IAP_RESTORE_SUBSCRIPTION_NONE_TITLE: "Nothing to restore.", IOS_IAP_RESTORE_SUBSCRIPTION_NONE_DESCRIPTION: "There are no purchases to restore.", IOS_IAP_MANAGE_SUBSCRIPTION_BUTTON: "Manage my subscription", IOS_IAP_SWITCH_PLANS_BUTTON: "Switch plans", IOS_IAP_MANAGE_PREMIUM_GUILD_BUTTON: "Manage Boosts", IOS_IAP_TESTFLIGHT_ERROR: "Oops! We cannot accept purchases via the Testflight build. You'll have to use the production build that's available on the App Store.", IAP_RESUBSCRIBE_BUTTON: "Resubscribe", GPLAY_BILLING_ALERT_TITLE: "Oh no!", GPLAY_BILLING_ALERT_BODY: "An issue has occurred with your purchase. Please wait and try again.", GPLAY_BILLING_VALIDATE_FAILURE: "Unable to make purchase. Please wait and try again.", GPLAY_BILLING_VALIDATE_FAILURE_RELOAD: "Unable to make purchase. Please reload app and try again.", GPLAY_BILLING_CONNECTION_ERROR: "Unable to connect to Google Play Services. Please wait and try again.", MOBILE_MANAGE_SUBSCRIPTION_DESKTOP: "Unfortunately, you cannot manage this subscription within the {mobilePlatform} app. Please go to the desktop app and manage your subscription via User Settings.", MOBILE_MANAGE_SUBSCRIPTION_EXTERNAL: "Unfortunately, you cannot manage this subscription within the {mobilePlatform} app. Please go to the {externalPaymentGateway} subscription settings to manage your subscription.", FILE_UPLOAD_LIMIT_NEW_STANDARD: "25MB", FILE_UPLOAD_LIMIT_PREMIUM_TIER_0_CORRECTED: "50MB", FILE_UPLOAD_LIMIT_PREMIUM_TIER_2_INCREASE: "500MB", FILE_UPLOAD_LIMIT_BOOSTED_GUILD_TIER_2: "50MB", FILE_UPLOAD_LIMIT_BOOSTED_GUILD_TIER_3: "100MB", STAFF_BADGE_TOOLTIP: "Discord Staff", PREMIUM_BADGE_TOOLTIP: "Subscriber since {date, date, medium}", PREMIUM_GUILD_SUBSCRIPTION_TOOLTIP: "Server boosting since {date, date, medium}", SELF_XSS_HEADER: "Hold Up!", SELF_XSS_LINE_1: "If someone told you to copy/paste something here you have an 11/10 chance you're being scammed.", SELF_XSS_LINE_2: "Pasting anything in here could give attackers access to your Discord account.", SELF_XSS_LINE_3: "Unless you understand exactly what you are doing, close this window and stay safe.", SELF_XSS_LINE_4: "If you do understand exactly what you are doing, you should come work with us {url}", QUICKSWITCHER_PLACEHOLDER: "Where would you like to go?", QUICKSWITCHER_NOTICE: "Use Quick Switcher to get around Discord quickly. Just press:", QUICKSWITCHER_QUERYMODE_USERS: "Searching All Users", QUICKSWITCHER_QUERYMODE_USERS_IN_GUILD: "Search friends and users in: {name}", QUICKSWITCHER_QUERYMODE_TEXT_CHANNELS: "Searching Text Channels", QUICKSWITCHER_QUERYMODE_VOICE_CHANNELS: "Searching Voice Channels", QUICKSWITCHER_QUERYMODE_GUILDS: "Searching Servers", QUICKSWITCHER_QUERYMODE_APPLICATIONS: "Searching Games", QUICKSWITCHER_LAST_CHANNEL: "Previous Channels", QUICKSWITCHER_DRAFTS: "Drafts", QUICKSWITCHER_MENTIONS: "Mentions", QUICKSWITCHER_UNREAD_CHANNELS: "Unread Channels", QUICKSWITCHER_EMPTY_TEXT: "Can’t seem to find what you’re looking for?", QUICKSWITCHER_EMPTY_CTA: "Learn more about Quick Switcher", QUICKSWITCHER_LINK_MESSAGE: "Go to message", QUICKSWITCHER_LINK_UNKNOWN: "Go to link", QUICKSWITCHER_LINK_NO_ACCESS: "You don't have access to this link", QUICKSWITCHER_PROTIP: "Start searches with $[](userSymbolHook) $[](textChannelSymbolHook) $[](voiceChannelSymbolHook) $[](guildSymbolHook) to narrow results. [Learn more]({helpdeskArticle})", QUICKSWITCHER_PROTIP_USERNAMES: "Usernames", QUICKSWITCHER_PROTIP_TEXT_CHANNELS: "Text Channels", QUICKSWITCHER_PROTIP_VOICE_CHANNELS: "Voice Channels", QUICKSWITCHER_PROTIP_GUILDS: "Servers", QUICKSWITCHER_TUTORIAL_MESSAGE_SEARCH: "Search for servers, channels or DMs", QUICKSWITCHER_TUTORIAL_MESSAGE_SELECT: "Select a result and press ENTER to jump to it", SUGGESTIONS: "Suggestions", SUGGESTED: "Suggested", LAUNCH_PAD: "LaunchPad", LAUNCH_PAD_DESCRIPTION: "Enables an experimental feature for faster navigation throughout the app. Accessible globally with a gesture or pull-tab UI element.", LAUNCH_PAD_STANDARD_RADIO: "Full Screen Gesture", LAUNCH_PAD_STANDARD_RADIO_ALT: "Right Edge Gesture", LAUNCH_PAD_STANDARD_RADIO_DESCRIPTION: "Use a global right to left gesture to activate Launch Pad (Please Note: this will disable the swipe-to-reply function in chat and require a right edge gesture to drag chats back in due to gesture conflicts).", LAUNCH_PAD_STANDARD_RADIO_DESCRIPTION_ALT: "Use a global right to left gesture to activate Launch Pad that you activate from the right edge (on Android this may conflict with system gestures if you have them enabled and while this keeps swipe to reply enabled, there may be conflicts we still need to fix).", LAUNCH_PAD_PULL_TAB_RADIO: "Pull Tab", LAUNCH_PAD_PULL_TAB_RADIO_DESCRIPTION: "Use a persistent pull tab element on the right of the screen to activate Launch Pad.", LAUNCH_PAD_DISABLED_RADIO: "Disabled", LAUNCH_PAD_DISABLED_RADIO_DESCRIPTION: "Disable usage of Launch Pad.", LAUNCH_PAD_UNREAD_CHANNELS_GUILD: "Unread Channels in {guildName}", LAUNCH_PAD_HISTORY_SHOW_MORE: "Show More", LAUNCH_PAD_HISTORY_SHOW_LESS: "Show Less", LAUNCH_PAD_NUX_TITLE: "Swipe the tab to activate LaunchPad", LAUNCH_PAD_NUX_SUBTITLE: "Quickly navigate to your recent conversations", USER_SETTIONS_NEW_DISCORD_TITLE: "New Discord", USER_SETTINGS_VOICE_CODEC_TITLE: "Audio Codec", USER_SETTINGS_VOICE_CODEC_DESCRIPTION: "Discord uses only the best organic, locally-sourced Opus Voice codec.", USER_SETTINGS_VOICE_ADD_MULTIPLE: "You can add multiple Push to Talk binds under [Keybind Settings](onClick).", USER_SETTINGS_VOICE_MIC_TEST_TITLE: "Mic Test", USER_SETTINGS_VOICE_MIC_TEST_DESCRIPTION: "Having mic issues? Start a test and say something fun—we'll play your voice back to you.", USER_SETTINGS_VOICE_MIC_TEST_BUTTON_ACTIVE: "Stop Testing", USER_SETTINGS_VOICE_MIC_TEST_BUTTON_INACTIVE: "Let's Check", USER_SETTINGS_VOICE_MIC_TEST_VOICE_CAPTION: "Playing back your beautiful voice", USER_SETTINGS_VOICE_MIC_TEST_VOICE_NO_INPUT_NOTICE: "Discord isn’t detecting any input from your mic. Please check that you’ve selected the right input device.", USER_SETTINGS_VOICE_VIDEO_HOOK_LABEL: "Use our advanced technology to capture your screen", USER_SETTINGS_VOICE_VIDEO_CODEC_TITLE: "Video Codec", USER_SETTINGS_VOICE_OPEN_H264: "OpenH264 Video Codec provided by Cisco Systems, Inc.", USER_SETTINGS_VOICE_HARDWARE_H264: "Hardware Acceleration", USER_SETTINGS_VOICE_EXPERIMENTAL_SOUNDSHARE_LABEL: "Use an experimental method to capture audio from applications", FORM_HELP_OPEN_H264: "Disabling OpenH264 may limit available codecs and degrade call quality.", FORM_HELP_HARDWARE_H264: "Hardware acceleration uses your GPU for efficient video encoding and decoding, if available.", FORM_HELP_VIDEO_HOOK: "Our signed DLL is injected into the application to capture frames.", USERNAME: "Username", USERNAME_AND_TAG: "Username and Tag", SERVICE_CONNECTIONS_DISCONNECT: "Disconnect", REPORT_SERVER: "Report Server — !!{name}!!", REPORT_SERVER_NO_NAME: "Report Server", REPORT_MESSAGE: "Report Message Posted by !!{name}!!", REPORT_USER: "Report User — !!{name}!!", FORM_LABEL_REPORT_REASON: "What is it you’re reporting?", FORM_REPORT_HELP_TEXT: "Reports are sent to the Discord Trust & Safety team - **not the server owner**. Creating false reports and/or spamming the report button may result in a suspension of reporting abilities. Learn more from the [Discord Community Guidelines]({guidelinesURL}). Thanks for keeping things safe and sound.", APP_PERMISSION_CONNECT_LABEL: "Connect to Discord app", APP_PERMISSION_CONNECT_DESC: "Connect to Discord and join voice channels", PERMISSION_MICROPHONE_DENIED: "Microphone access denied - Discord requires audio access to connect to a call.", STAGE_CHANNEL_PERMISSION_MICROPHONE_DENIED: "Discord requires audio access to allow you to speak.", PERMISSION_MEDIA_DENIED: "Media access denied - Discord requires access to storage to post attachments.", PERMISSION_MEDIA_DOWNLOAD_DENIED: "Download access denied - Discord requires storage access to download files.", PERMISSION_QR_SCANNER_DENIED: "Camera access denied - Discord requires camera access to scan QR codes.", SERVER_OVERVIEW: "Server Overview", DISPLAY: "Display", GUILD_SETTINGS_PREMIUM_PROGRESS_BAR_TITLE: "Show Boost progress bar", GUILD_SETTINGS_PREMIUM_PROGRESS_BAR_DESCRIPTION: "This progress bar will display in your channel list, attached to your server name (or server banner if you have one set).", GUILD_SETTINGS_PREMIUM_PROGRESS_BAR_IMG_ALT: "Boost progress bar example", GUILD_ENABLE_PROGRESS_BAR: "Enable Progress Bar", GUILD_SETTINGS_ICON_RECOMMEND: "We recommend an image of at least 512x512 for the server.", GUILD_SETTINGS_SPLASH_RECOMMEND: "The recommended minimum size is 1920x1080 and recommended aspect ratio is 16:9. [Learn more]({articleURL})", GUILD_SETTINGS_SPLASH_DESCRIPTION: "This image will display in server invite embeds, invite in browser, and invite confirmation modal.", GUILD_SETTINGS_SPLASH_INFO: "This image will display when users receive an invite to the server.", UPLOAD_IMAGE: "Upload Image", REPLACE_IMAGE: "Replace Image", UPLOAD_BACKGROUND: "Upload Background", GUILD_SETTINGS_DEFAULT_NOTIFICATION_SETTINGS_INTRO: "This will determine whether members who have not explicitly set their notification settings receive a notification for every message sent in this server or not.", GUILD_SETTINGS_DEFAULT_NOTIFICATION_SETTINGS_TIP: "We highly recommend setting this to only @mentions for a Community Server.", GUILD_SETTINGS_DEFAULT_NOTIFICATIONS_LARGE_GUILD_NOTIFY_ALL: "Due to this server's size, members will not get mobile push notifications for non-@mention messages.", GUILD_SETTINGS_SERVER_INVITE_BACKGROUND: "Server Invite Background", GUILD_SETTINGS_OVERVIEW_TIER_INFO: "This is a Tier {tier} Nitro Feature. [Check your tier status]({tierStatusUrl})", GUILD_SETTINGS_OVERVIEW_BOOST_UNLOCK: "{boosts, plural, =1 {# boost} other {# boosts}} to unlock", GUILD_SETTINGS_OVERVIEW_BOOST_UNLOCKED: "Tier {tier} perk unlocked", GUILD_SETTINGS_HOME_HEADER: "Home Page Banner Background", GUILD_SETTINGS_HOME_HEADER_DESCRIPTION: "This image will be displayed on the Home page of your community server.", GUILD_SETTINGS_HOME_HEADER_RECOMMEND: "The recommended minimum size is 1920x480 and recommended aspect ratio is 4:1.", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_SETUP_WELCOME: "Set Up Welcome Sign", GUILD_SETTINGS_ONBOARDING_HOME_NEW_MEMBER_EXAMPLE: "Joiner", GUILD_SETTINGS_ONBOARDING_HOME_EXISTING_MEMBER_EXAMPLE: "Member", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_WELCOME_TITLE: "Welcome Sign", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_WELCOME_DESCRIPTION: "Tell new members what's special about your community and why you're excited to see them!", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_WELCOME_DESCRIPTION_TIP: "**TIP:** Use [@username] to mention the member by name.", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_WELCOME_PLACEHOLDER: "Hi [@username]! I made this server so that nerds like us could have a safe space to be ourselves. I've made a bunch of lifelong friends and hope you can find the same thing too. I've curated some things for you to get started with below:", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_WELCOME_AUTHOR_TITLE: "Message Author", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_WELCOME_AUTHOR_EXPLAINER: "Members with permissions to manage the guild and roles.", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_WELCOME_MESSAGE_INPUT_HEADER: "Welcome Message", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_TODOS_TITLE: "New Member To Do's", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_TODOS_DESCRIPTION: "Set 3-5 tasks for your new members to do. Get them to **talk and engage in your channels.**", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_TODOS_BAD_EXAMPLE_TITLE: "chat with the community", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_TODOS_BAD_EXAMPLE_CHANNEL: "in #general", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_TODOS_BAD_EXAMPLE_REASON: "Don't Do This: Too General", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_TODOS_RULES: "Read the rules", GUILD_SETTINGS_ONBOARDING_HOME_REVIEW_TITLE: "Server Guide", GUILD_SETTINGS_ONBOARDING_HOME_GUIDE_EXAMPLE_ALT: "Server Guide example", GUILD_SETTINGS_ONBOARDING_HOME_REVIEW_DESCRIPTION: "Your Welcome Message, Banner, To Do tasks, and Resources are all set up", NEW_MEMBER_ACTION_CHANNEL: "in #{channelName}", GUILD_SETTINGS_ONBOARDING_RULES_ACTION: "Read the rules", GUILD_SETTINGS_ONBOARDING_CUSTOMIZE_ACTION: "Visit Channels & Roles", GUILD_SETTINGS_ONBOARDING_ADD_A_TASK: "Add a task", GUILD_SETTINGS_ONBOARDING_HOME_BANNER: "Server Guide Banner", GUILD_SETTINGS_ONBOARDING_HOME_BANNER_EXPLAINER_1: "This image will display at the top of the Server Guide.", GUILD_SETTINGS_ONBOARDING_HOME_BANNER_EXPLAINER_2: "The recommended minimum size is 960x540 and recommended aspect ratio is 16:9. $[Learn More](learnMoreHook).", GUILD_SETTINGS_ONBOARDING_ACTION_VIEW: "Member visits the channel", GUILD_SETTINGS_ONBOARDING_ACTION_TALK: "Member sends a message in the channel", GUILD_SETTINGS_ONBOARDING_ACTION_TALK_IN_FORUM: "Member posts or responds in the forum", GUILD_SETTINGS_ONBOARDING_ACTION_TITLE: "What should the new member do?", GUILD_SETTINGS_ONBOARDING_ACTION_TITLE_PLACEHOLDER: "Ex: Post a photo of your pet", GUILD_SETTINGS_ONBOARDING_ACTION_CHANNEL: "Where should they do it?", GUILD_SETTINGS_ONBOARDING_ACTION_CHANNEL_EXPLAINER: "Channels must be viewable by @everyone", GUILD_SETTINGS_ONBOARDING_ACTION_ICON: "Upload a custom thumbnail", GUILD_SETTINGS_ONBOARDING_ACTION_ICON_EXPLAINER: "72x72 minimum. 1:1 aspect ratio. PNG, JPG", GUILD_SETTINGS_ONBOARDING_ACTION_ICON_EMOJI: "Choose Emoji", GUILD_SETTINGS_ONBOARDING_ACTION_ICON_UPLOAD: "Upload Icon", GUILD_SETTINGS_ONBOARDING_ACTION_ICON_REMOVE: "Remove Image", GUILD_SETTINGS_ONBOARDING_ACTION_TYPE: "This task is complete when:", GUILD_SETTINGS_ONBOARDING_RESOURCE_CHANNEL_EDIT_TITLE: "Edit Resource", GUILD_SETTINGS_ONBOARDING_RESOURCE_TITLE: "2. Give this resource a name", GUILD_SETTINGS_ONBOARDING_RESOURCE_TITLE_PLACEHOLDER: "#rules might be Rules", GUILD_SETTINGS_ONBOARDING_RESOURCE_DESCRIPTION: "3. Give this resource a description", GUILD_SETTINGS_ONBOARDING_RESOURCE_DESCRIPTION_PLACEHOLDER: "Ex: Rules for the server", GUILD_SETTINGS_ONBOARDING_RESOURCE_CHANNEL: "1. Choose a resource channel", GUILD_SETTINGS_ONBOARDING_RESOURCE_CHANNEL_EXPLAINER: "You can only select channels that are readonly for @everyone.", GUILD_SETTINGS_ONBOARDING_RESOURCE_UPLOAD: "4. Upload a custom thumbnail", GUILD_SETTINGS_ONBOARDING_RESOURCE_UPLOAD_EXPLAINER: "72x72 minimum. 1:1 aspect ratio. PNG, JPG", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESOURCES_TITLE: "Resource Pages", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESOURCES_DESCRIPTION: "Turn read-only channels into fancy resource pages in your Server Guide. They will no longer appear on the channel list unless you enable All Channels. Resources come with some perks:", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESOURCE_BULLET_1: "Members start at the top of pages instead of the bottom of a message thread", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESOURCE_BULLET_2: "Chat bars and avatars are removed so it looks cleaner", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESOURCE_BULLET_3: "All the content, embeds, media, and formatting will stay the same", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESOURCE_NEW_USER: "New User", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_RESOURCE_EXISTING_USER: "Existing User", GUILD_SETTINGS_ONBOARDING_ADD_A_RESOURCE: "Add a resource", WELCOME_MESSAGE_VALIDATION_ERROR_AUTHOR_AND_MESSAGE: "Welcome messages require both an author and a message of at least {minLength} characters.", WELCOME_MESSAGE_VALIDATION_ERROR_AUTHOR: "Welcome messages require an author", WELCOME_MESSAGE_VALIDATION_ERROR_MESSAGE: "Welcome messages require a message of at least {minLength} characters.", NEW_MEMBER_ACTION_VALIDATION_ERROR_TITLE_REQUIRED: "Actions must be at least {minLength} characters.", NEW_MEMBER_ACTION_VALIDATION_ERROR_TYPE_VIEW_INVALID_FOR_CHANNEL: "The selected channel does not have view channel permissions for @everyone.", NEW_MEMBER_ACTION_VALIDATION_ERROR_TYPE_CHAT_INVALID_FOR_CHANNEL: "The selected channel does not have send message permissions for @everyone.", GUILD_ONBOARDING_SETUP_EDUCATION_HOME_TITLE: "Set up your Server Guide", GUILD_ONBOARDING_SETUP_EDUCATION_HOME_SUBTITLE: "Try making sure all your Get Started items are actionable. We've added a \"Read the Rules\" task so you don't have to!", GUILD_SETTINGS_ONBOARDING_HOME_REVIEW_INVALID_DESCRIPTION: "You must have a welcome message and at least 3 To Do tasks.", GUILD_SETTINGS_ONBOARDING_HOME_REVIEW_NOT_STARTED_DESCRIPTION: "Set up your Server Guide to help new members get started.", GUILD_SETTINGS_ONBOARDING_HOME_SAVE_FAILED: "Failed to save Server Guide", GUILD_SETTINGS_ONBOARDING_HOME_SAVE_FAILED_REASON: "You must have a welcome message and at least 3 To Do tasks.", GUILD_SETTINGS_ONBOARDING_HOME_SAVE_FAILED_INVALID: "Check that the permissions on your To Do and Resource channels are set correctly.", GUILD_SETTINGS_ONBOARDING_HOME_SAVE_FAILED_INVALID_WITH_DETAILS: "Check that the permissions on your To Do and Resource channels are set correctly.\n\nErrors: {errorMessage}", GUILD_SETTINGS_ONBOARDING_SUGGESTED_RESOURCES_EXPLAINER: "We picked a few channels that are read-only", GUILD_SETTINGS_ONBOARDING_SUGGESTED_RESOURCES_DISMISS: "Dismiss All", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_INVALID_ACTION_CHANNEL: "Assigned channel is missing permissions for @everyone", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_INVALID_ACTION_CHANNEL_EMOJI: "This emoji no longer exists. Select a new one.", GUILD_SETTINGS_ONBOARDING_HOME_SETTINGS_INVALID_RESOURCE_CHANNEL: "Assigned channel must be readonly for @everyone", GUILD_SETTINGS_ONBOARDING_PROMPT_INVALID_EMOJI: "This emoji no longer exists. Select a new one.", GUILD_ONBOARDING_HOME_GUILD_MEMBERS_RATIO: "{online, number} / {total, number} Members online", GUILD_SETTINGS_EMOJI_ALIAS: "Alias", GUILD_SETTINGS_EMOJI_NAME: "Name", GUILD_SETTINGS_EMOJI_IMAGE: "Image", GUILD_SETTINGS_EMOJI_ALIAS_PLACEHOLDER: "Enter Alias", GUILD_SETTINGS_EMOJI_UPLOAD_TO_SERVER_MESSAGE: "Add up to {count} custom emoji that anyone can use in this server. Animated GIF emoji may be used by members with Discord Nitro. Emoji names must be at least 2 characters long and can only contain alphanumeric characters and underscores. Emoji must be under {maxSize} KB in size.", GUILD_SETTINGS_EMOJI_UPLOAD_TO_SERVER_DESCRIPTION: "Add up to {count} custom emoji that anyone can use in this server. Animated GIF emoji may be used by members with Discord Nitro.", GUILD_SETTINGS_EMOJI_UPLOAD_HEADING: "Upload Requirements", GUILD_SETTINGS_EMOJI_UPLOAD_REQUIREMENTS_1: "File type: JPEG, PNG, GIF", GUILD_SETTINGS_EMOJI_UPLOAD_REQUIREMENTS_2: "Recommended file size: {maxSize} KB (We’ll compress it for you)", GUILD_SETTINGS_EMOJI_UPLOAD_REQUIREMENTS_3: "Recommended dimensions: 128x128", GUILD_SETTINGS_EMOJI_UPLOAD_REQUIREMENTS_4: "Naming: Emoji names must be at least 2 characters long and can only contain alphanumeric characters and underscores", GUILD_SETTINGS_EMOJIS_UPSELL_BANNER_TOO_MANY_EMOJIS_HEADER: "Level {level} emoji lost", GUILD_SETTINGS_EMOJIS_UPSELL_BANNER_TOO_MANY_EMOJIS_TEXT: "Boost your server to Level {level} or buy a level to unlock your emoji!", GUILD_SETTINGS_EMOJIS_UPSELL_BANNER_TEXT: "Boost your server to Level {level} to unlock more emoji slots!", GUILD_SETTINGS_STICKERS: "Stickers", GUILD_SETTINGS_STICKERS_UPSELL_TITLE: "Get Boosted", GUILD_SETTINGS_STICKERS_UPSELL_DESCRIPTION: "Enjoy stickers and more perks by boosting your server to Level 1. Each Level unlocks more sticker slots and new benefits for everyone.", GUILD_SETTINGS_STICKERS_UPSELL_DESCRIPTION_FREE_SLOTS: "Enjoy more stickers and other perks by boosting your server to Level 1. Each Level unlocks more sticker slots and new benefits for everyone.", GUILD_SETTINGS_STICKERS_UPSELL_BANNER_TEXT: "Boost your server to Level {level} to unlock {numAdditional} more sticker slots!", GUILD_SETTINGS_STICKERS_UPSELL_BANNER_TOO_MANY_STICKERS_HEADER: "Level {level} stickers lost", GUILD_SETTINGS_STICKERS_UPSELL_BANNER_TOO_MANY_STICKERS_TEXT: "Boost your server to Level {level} or buy a level to unlock your stickers!", GUILD_SETTINGS_STICKERS_BOOST_SERVER: "Boost Server", GUILD_SETTINGS_STICKERS_UPLOAD_AUTO_RESIZE_HEADING: "Upload Instructions", GUILD_SETTINGS_STICKERS_UPLOAD_AUTO_RESIZE_INSTRUCTIONS: "Stickers can be static (PNG) or animated (APNG, GIF). Stickers must be exactly 320 x 320 pixels and no larger than {fileSize}. We will automatically resize static PNG and animated GIF stickers for you.", GUILD_SETTINGS_STICKERS_UPLOAD_AUTO_RESIZE_HELP: "For more information about file types and tips on uploading custom stickers, check out this [Help Center article]({articleUrl}).", GUILD_SETTINGS_STICKERS_FREE_SLOTS_HEADER: "Free Slots", GUILD_STICKER_A11Y_REMOVE_STICKER: "Remove attached {name} sticker from message", GUILD_STICKER_UPLOAD_TITLE: "Upload a file", GUILD_STICKER_UPLOAD_DESCRIPTION_NO_LOTTIE: "File should be APNG, PNG, or GIF ({fileSize} max)", GUILD_STICKER_UPLOAD_DESCRIPTION: "File should be APNG, PNG, Lottie, or GIF ({fileSize} max)", GUILD_STICKER_UPLOAD_NAME_TITLE: "Sticker Name", GUILD_STICKER_UPLOAD_NAME_PLACEHOLDER: "ex: cat hug", GUILD_STICKER_UPLOAD_PREVIEW_TITLE: "Preview", GUILD_STICKER_UPLOAD_FILE_TITLE: "File", GUILD_STICKER_UPLOAD_FILE_TITLE_BLOCKED: "File (This cannot be edited)", GUILD_STICKER_UPLOAD_FILE_PLACEHOLDER: "Choose a file", GUILD_STICKER_UPLOAD_FILE_BUTTON: "Browse", GUILD_STICKER_UPLOAD_RELATED_EMOJI_TITLE: "Related Emoji", GUILD_STICKER_UPLOAD_RELATED_EMOJI_PLACEHOLDER: "Click to select", GUILD_STICKER_UPLOAD_DESCRIPTION_TITLE: "Description", GUILD_STICKER_UPLOAD_DESCRIPTION_PLACEHOLDER: "See our Help Center for tips on writing sticker descriptions.", GUILD_STICKER_UPLOAD_DESCRIPTION_TOOLTIP: "You can add a description, sometimes called alt-text, to your stickers so they’re accessible to even more people, including those who are blind or visually impaired. Good descriptions are concise, but present what’s in your stickers accurately enough to understand their context. Descriptions are optional but must be more than 1 character.", GUILD_STICKER_PREVIEW_IMG_ALT_DARK: "Sticker preview on dark theme", GUILD_STICKER_PREVIEW_IMG_ALT_LIGHT: "Sticker preview on light theme", GUILD_STICKERS_UPDATE: "Update", GUILD_STICKER_GRID_UPLOAD_LABEL: "Upload Sticker", GUILD_STICKER_INVALID_STICKER: "Invalid sticker file", GUILD_STICKER_FILE_TOO_BIG: "That sticker was too big! Stickers must be under {maxSize}.", GUILD_STICKER_UNKNOWN_MIME_TYPE: "Unsupported file format", GUILD_STICKER_UNSUPPORTED_MIME_TYPE: "Unsupported file format. [Learn more]({articleURL})", GUILD_STICKER_SETTINGS_ADDITIONAL_SLOTS_WITHOUT_TOTAL: "+{numAdditional, plural, =1 {{numAdditional} Sticker Slot} other {{numAdditional} Sticker Slots}}", GUILD_STICKER_SETTINGS_ADDITIONAL_SLOTS: "+{numAdditional, plural, =1 {{numAdditional} Sticker Slot} other {{numAdditional} Sticker Slots}} ({numTotal, number} total)", GUILD_STICKER_SETTINGS_BUY_LEVEL: "Buy Level", GUILD_STICKER_SETTINGS_UNLOCK_SLOTS: "Unlock More Slots", GUILD_STICKER_SETTINGS_ICON_ALT_TEXT: "A smiling sticker icon surrounded by purple and pink sparkles", GUILD_STICKER_SETTINGS_PLACEHOLDER_ALT_TEXT: "A grayscale wumpus sticker peeling off the screen from the top left corner.", GUILD_STICKER_UNUSED_TIER: "Upload more stickers to make use of this unlocked level.", GUILD_STICKER_SETTINGS_REMAINING_SLOTS_AVAILABLE: "{numAvailable, number} of {numTotal, plural, =1 {{numTotal} slot} other {{numTotal} slots}} available", SETTINGS_WEBHOOKS_INTRO: "\nWebhooks are an easy way to get automated messages and data updates sent to a text channel in the server using internet magic. [Learn more]({articleURL}).\n", SETTINGS_WEBHOOKS_EMPTY_TITLE: "No Webhooks", SETTINGS_WEBHOOKS_EMPTY_BODY_IOS: "For now, webhooks can only be created on web or desktop", SETTINGS_NOTICE_MESSAGE: "Careful — you have unsaved changes!", SAVE_CHANGES: "Save Changes", WEBHOOK_MODAL_TITLE: "Edit Webhook", WEBHOOK_MODAL_ICON_DESCRIPTION: "We recommend an image of at least 256x256", SETTINGS_ROLES_DELETE_TITLE: "Delete Role", SETTINGS_ROLES_DELETE_BODY: "Are you sure you want to delete the **!!{name}!!** role? This action cannot be undone.", SETTINGS_PERMISSIONS_DELETE_TITLE: "Delete Permission Settings", SETTINGS_PERMISSIONS_DELETE_BODY: "Are you sure you want to delete **!!{name}!!** permissions? This action cannot be undone.", SETTINGS_INVITE_TIP: "Here's a list of all active invite links. You can revoke any one or [create one](onCreateInvite).", SETTINGS_INVITE_TIP_WITHOUT_CREATE: "Here's a list of all active invite links. You can revoke any one.", INVITES: "Invites", GRANT_GUEST_MEMBERSHIP: "Invite as Guest", GRANT_GUEST_MEMBERSHIP_VOICE_ONLY: "Invite as Guest (Voice Only)", INVITE_A_GUEST: "Invite a Guest", INVITE_A_GUEST_VOICE_ONLY: "Invite a Guest (Voice Only)", INVITE_A_GUEST_EXPLANATION: "A guest invite allows someone to join a server voice channel without being a server member. Guests cannot see the rest of the server, and are kicked once they leave voice.", INVITE_A_GUEST_SELECT_VOICE_CHANNEL: "Select a Voice Channel", INVITE_A_GUEST_STEP_1: "1. Pick a Voice Channel", INVITE_A_GUEST_STEP_2: "2. Send a guest invite link to a friend", GUEST_MEMBERSHIP_EXPLANATION: "Guests are automatically kicked when they leave the voice channel. They cannot see other channels in the server.", GUEST_NAME_SUFFIX: "(Guest)", GUEST_INVITE_EMBED_TITLE_RECEIVER: "You received a guest invite to join a voice channel", GUEST_INVITE_EMBED_TITLE_SENDER: "You sent a guest invite to join a voice channel", GUILD_SETTINGS_SERVER_BANNER_BACKGROUND: "Server Banner Background", FORM_LABEL_SERVER_DESCRIPTION: "Server Description", CHANGE_BANNER: "Change Banner", FORM_HELP_SERVER_BANNER: "This image will display at the top of your channels list.", FORM_HELP_SERVER_DESCRIPTION: "Describe your community. This description will be displayed in external embeds of this server’s invite link.", SERVER_DESCIPTION_EMPTY: "Tell the world a bit about this server.", FORM_LABEL_SERVER_BANNER: "Server Banner Background", GUILD_SETTINGS_BANNER_RECOMMEND: "The recommended minimum size is 960x540 and recommended aspect ratio is 16:9. [Learn more]({articleURL}).", FORM_LABEL_SERVER_LANGUAGE: "Server Primary Language", GUILD_SETTINGS_ANIMATED_BANNER_UPSELL: "**NEW!** Boost to Level 3 to use an animated server banner.", GUILD_SETTINGS_ANIMATED_BANNER_TRY_IT: "**NEW!** Set an animated server banner by uploading or selecting a GIF.", GUILD_SETTINGS_ANIMATED_BANNER_TRY_IT_MOBILE: "**NEW!** Set an animated server banner by uploading a GIF.", GUILD_SETTINGS_ANIMATED_BANNER_UPSELL_TRY_IT_CTA: "Try it!", GUILD_SETTINGS_ANIMATED_BANNER_UPSELL_MOBILE_BOOST_CTA: "Boost This Server", SEARCH_COUNTRY: "Search a country", ENTER_PHONE_TITLE: "Enter a Phone Number", ENTER_PHONE_DESCRIPTION: "You will receive a text message with a verification code.", ENTER_PHONE_DESCRIPTION_NOTE: "Your phone number can be used to verify **one Discord account** at a time and is only used for verification and login.", VERIFICATION_PHONE_TITLE: "Verify Your Number", VERIFICATION_PHONE_DESCRIPTION: "Enter the 6 digit code we sent to your phone.", RESEND_CODE: "Resend Code", COUNTRY_CODE: "Country Code", COUNTRY_CODES: "Country Codes", COUNTRY_NO_RESULTS: "No countries found.", EMAIL: "Email", YOUR_EMAIL: "Your Email", USE_EMAIL: "Use Email", PHONE: "Phone", USE_PHONE: "Use Phone", VERIFY_BY: "Verify by", VERIFY_BY_EMAIL: "Verify by Email", VERIFY_BY_EMAIL_FORMATTED: "Verify by\n**Email**", ENTER_EMAIL_BODY: "In order to verify your email address, you must first enter an email address.", VERIFY_EMAIL_BODY: "Please check your email and follow the instructions to verify your account. If you did not receive an email or if it expired, you can resend one.", VERIFY_EMAIL_BODY_RESENT: "\n We have sent you a new verification email to **!!{email}!!**, please check both your inbox and spam folder.\n ", VERIFY_EMAIL: "Verify Email", VERIFY_ACCOUNT: "Verify Account", VERIFICATION_TITLE: "Verification Required", VERIFICATION_BODY: "We've detected something out of the ordinary going on.\nTo continue using Discord, **we will need you to verify your account.**", VERIFICATION_BODY_ALT: "Now, let's make sure you're human...", VERIFICATION_BODY_WITH_HELP_LINK: "We've detected something out of the ordinary going on, and we want to keep you and the community safe. To continue using Discord, **we will need you to verify your account.** [Learn more.]({helpCenterURL})", VERIFICATION_FOOTER: "Think you're seeing this by mistake?", VERIFICATION_FOOTER_SUPPORT: "[Support]({supportURL})", VERIFICATION_FOOTER_LOGOUT: "[Log Out](logoutOnClick)", VERIFY_BY_PHONE_FORMATTED: "Verify by\n**Phone**", START_VERIFICATION_BUTTON: "Start Verification", START_PHONE_VERIFICATION_BUTTON: "Verify by Phone", START_PHONE_REVERIFICATION_BUTTON: "Re-verify by Phone", START_EMAIL_REVERIFICATION_BUTTON: "Re-verify by Email", PHONE_THEN_EMAIL_INTERSTITIAL_TITLE: "Phone verified!", PHONE_THEN_EMAIL_INTERSTITIAL_BODY: "Great! Next, we'll verify your email.", PHONE_THEN_EMAIL_INTERSTITIAL_CONFIRM: "Continue", RESEND_EMAIL: "Resend my verification email!", CHANGE_EMAIL: "Click here to change your email", CHANGE_EMAIL_SHORT: "Change Email", ADD_EMAIL: "Add an Email", ADD_EMAIL_SHORT: "Add Email", ADD_EMAIL_DESCRIPTION: "Some Discord features require your account to have a verified email.", ADD_EMAIL_BANNER_TITLE: "Add an email to your account", VERIFY_YOUR_EMAIL: "Verify your email", RESEND_EMAIL_SHORT: "Resend Email", ENTER_CODE: "Enter your confirmation code", VERIFY_PHONE_FOR_SUPPORT: "Please enter the 6 digit code sent to you and reenter your phone number.", BOUNCED_EMAIL_DETECTED_NOTICE: "We can't reach your email which could impact access to your account.", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_TITLE: "Pick the plan that works best for you", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_HEADER: "Pricing and Features", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_PRICE: "Price", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_EMOJI: "Custom emoji anywhere and make them animated", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_STICKER: "Custom stickers anywhere", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_STICKER_V2: "Custom stickers anywhere plus 300+ Nitro exclusives", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_SUPER_REACTIONS: "Super Reactions", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_SUPER_REACTIONS: "{weeklyReactionsNumber}/week", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_SUPER_REACTIONS_DAILY: "{dailyReactionsNumber}/day", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_UPLOAD: "Bigger file sharing", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_STREAMING: "HD streaming", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_STREAMING_DETAILS: "Up to 4K and 60fps", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_BOOSTS: "{numBoosts} Boosts + {percentageOff} off extra Boosts", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_PROFILE_THEMES: "Animated avatar, banner, and profile theme", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_SERVER_PROFILE: "Custom server profiles", MARKETING_PAGE_COMPARISON_TABLE_PROFILE_THEMES_V2: "Custom profiles", MARKETING_PAGE_COMPARISON_TABLE_CUSTOM_SOUNDS_V2: "Soundboard sounds anywhere", MARKETING_PAGE_COMPARISON_TABLE_SERVER_PROFILES_V2: "Per-server profiles", MARKETING_PAGE_COMPARISON_TABLE_ENTRANCE_SOUNDS_V2: "Entrance sounds", MARKETING_PAGE_COMPARISON_TABLE_CUSTOM_EMOJI_V2: "Animated and custom emojis anywhere", MARKETING_PAGE_COMPARISON_TABLE_CLIENT_THEME_V2: "20+ app theme colors", MARKETING_PAGE_COMPARISON_TABLE_EARLY_ACCESS: "Early Access", MARKETING_PAGE_COMPARISON_TABLE_SHOW_OFF_YOUR_STYLE_SECTION_V2: "Show off your style", MARKETING_PAGE_COMPARISON_TABLE_YOUR_SPACE_SECTION_V2: "Make this place, your space", MARKETING_PAGE_COMPARISON_TABLE_NO_LIMIT_ALL_FUN_SECTION_V2: "No limits, all fun", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_SHOP_DISCOUNTS_GENERIC: "Shop member pricing, and exclusive items", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_CLIENT_THEME: "Colors for your Discord theme", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_BADGE: "Nitro badge on your profile", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_VIDEO_BACKGROUND: "Custom video backgrounds", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_SERVER_LIMIT: "Join up to 200 servers", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_ROW_LABEL_MESSAGE_LENGTH: "Longer messages up to {maxChars} characters", PREMIUM_TIER_0_DESKTOP_MARKETING_COMPARISON_TABLE_PLAN_ACTIVATED_PILL: "activated", PREMIUM_COMPARISON_TABLE_WHAT_YOU_HAVE_GOT_TITLE: "What You’ve Got", DURATION_SECONDS: "{seconds, plural, =1 {1 second} other {{seconds} seconds}}", DURATION_MINUTES: "{minutes, plural, =1 {1 minute} other {{minutes} minutes}}", DURATION_HOURS: "{hours, plural, =1 {1 hour} other {{hours} hours}}", DURATION_DAYS: "{days, plural, =1 {1 day} other {{days} days}}", DURATION_MINS: "{mins, plural, =1 {1 min} other {{mins} mins}}", DURATION_SECS: "{secs, plural, =1 {1 sec} other {{secs} secs}}", DURATION_WEEKS: "{weeks, plural, =1 {1 week} other {{weeks} weeks}}", DURATION_MONTHS: "{months, plural, =1 {1 month} other {{months} months}}", DURATION_YEARS: "{years, plural, =1 {1 year} other {{years} years}}", DURATION_SECONDS_SHORT: "{seconds, plural, =1 {1s} other {{seconds}s}}", DURATION_MINUTES_SHORT: "{minutes, plural, =1 {1m} other {{minutes}m}}", DURATION_HOURS_SHORT: "{hours, plural, =1 {1h} other {{hours}h}}", DURATION_DAYS_SHORT: "{days, plural, =1 {1d} other {{days}d}}", DURATION_MONTHS_SHORT: "{months, plural, =1 {1mo} other {{months}mo}}", DURATION_YEARS_SHORT: "{years, plural, =1 {1y} other {{years}y}}", DURATION_SECONDS_CAPITALIZE: "{seconds, plural, =1 {1 Second} other {{seconds} Seconds}}", DURATION_MINUTES_CAPITALIZE: "{minutes, plural, =1 {1 Minute} other {{minutes} Minutes}}", DURATION_HOURS_CAPITALIZE: "{hours, plural, =1 {1 Hour} other {{hours} Hours}}", DURATION_DAYS_CAPITALIZE: "{days, plural, =1 {1 Day} other {{days} Days}}", DURATION_WEEKS_CAPITALIZE: "{weeks, plural, =1 {1 Week} other {{weeks} Weeks}}", DURATION_MONTHS_CAPITALIZE: "{months, plural, =1 {1 Month} other {{months} Months}}", DURATION_YEARS_CAPITALIZE: "{years, plural, =1 {1 Year} other {{years} Years}}", DURATION_SECONDS_AGO: "{seconds, number} {seconds, plural, =1 {second} other {seconds}} ago", DURATION_MINUTES_AGO: "{minutes, number} {minutes, plural, =1 {minute} other {minutes}} ago", DURATION_HOURS_AGO: "{hours, number} {hours, plural, =1 {hour} other {hours}} ago", DURATION_DAYS_AGO: "{days, number} {days, plural, =1 {day} other {days}} ago", DURATION_MONTHS_AGO: "{months, number} {months, plural, =1 {month} other {months}} ago", DURATION_YEARS_AGO: "{years, number} {years, plural, =1 {year} other {years}} ago", REPORT_MODAL_REPORT_MESSAGE: "Report a message", REPORT_MODAL_MESSAGE_SELECTED: "Message Selected", REPORT_MODAL_TYPE_TITLE: "What can we help you with?", REPORT_MODAL_SELECT_ONE: "Select one", REPORT_MODAL_SUBMIT: "Submit", REPORT_MODAL_SUBJECT: "Subject", REPORT_MODAL_DESCRIPTION: "Description", REPORT_MODAL_ERROR: "There was an error submitting your report. Please try again or click [here]({tnsReportUrl}) to submit online.", REPORT_MODAL_SUBMITTED: "Report Submitted", REPORT_USER_MODAL_SUBMITTED: "User Reported", REPORT_OTHER_USER_SUBMITTED: "Thank you for notifying us.", REPORT_MODAL_SUBMITTED_EMAIL_CONFIRMATION: "Thank you for notifying us. You’ll receive an email confirmation shortly.", REPORT_MODAL_DESCRIPTION_MIN_MAX: "{min, number} character minimum, {max} character maximum", REPORT_MODAL_DESCRIPTION_MAX_EXCEEDED: "You are over the maximum character limit.", REPORT_MODAL_SHOULD_DELETE: "Do you want to delete this message?", REPORT_MODAL_SHOULD_BLOCK: "Do you want to block this user?", REPORT_MODAL_BLOCK_USER: "Block user", REPORT_MODAL_REPORT_STAGE_MENU_ITEM: "Report Stage", REPORT_MODAL_REPORT_EVENT_MENU_ITEM: "Report Event", REPORT_MODAL_SERVER_PREVIEW_HEADER: "Selected Server", REPORT_MODAL_TEXT_LINE_START_TEXTING: "Start Texting", MOBILE_REPORTS_BREADCRUMBS_TITLE: "Report Category", MOBILE_REPORTS_MESSAGE_PREVIEW_TITLE: "Selected Message", MOBILE_REPORTS_STAGE_CHANNEL_PREVIEW_TITLE: "Selected Stage", MOBILE_REPORTS_EVENT_PREVIEW_TITLE: "Selected Event", MOBILE_REPORTS_SUBMIT_REPORT: "Submit Report", MOBILE_REPORTS_SUBMIT_INFO_TEXT: "By submitting this report you confirm that it is truthful and made in good faith. Please follow our [Community Guidelines](https://discord.com/guidelines) and do not submit false or duplicate reports.", MOBILE_REPORTS_BLOCK_ELEMENT_HEADER: "More you can do", MOBILE_REPORTS_BLOCK_ELEMENT_DESCRIPTION: "This is who posted the message you reported. Block them to stop seeing any of their messages.", MOBILE_REPORTS_MUTE_ELEMENT_DESCRIPTION: "This is who posted the message you reported. Mute to stop seeing direct message notifications from this user.", MOBILE_REPORTS_BLOCK_AND_MUTE_ELEMENT_DESCRIPTION: "This is who posted the message you reported. Mute to stop seeing direct message notifications from this user. Block them to stop seeing any of their messages.", MOBILE_REPORTS_DELETE_MESSAGE_ELEMENT_DESCRIPTION: "Delete the message to prevent others from seeing this message.", MOBILE_REPORTS_LEAVE_ELEMENT_DESCRIPTION: "Leave the server", MOBILE_REPORTS_LEFT_SERVER: "Left Server", MOBILE_REPORTS_SUBMIT_FAILED: "There was an error trying to submit this report. Please try again!", IAR_FEEDBACK_TITLE: "How'd your reporting experience go?", IAR_FEEDBACK_PROMPT: "Tell us about your reporting experience.", IAR_FEEDBACK_PROBLEM_COULD_NOT_FIND: "I couldn't find what I was looking for", IAR_FEEDBACK_PROBLEM_CONFUSING_LANGUAGE: "I found the language in the menu confusing", FORM_LABEL_PUSH_AFK_TIMEOUT: "Push Notification Inactive Timeout", FORM_DESCRIPTION_PUSH_AFK_TIMEOUT: "\nDiscord avoids sending push notifications to your mobile device when you are at your computer.\nUse this setting to control how long you need to be inactive on desktop for before you receive push notifications.\n", USER_SETTINGS_NOTIFICATIONS_SHOW_BADGE_LABEL: "Enable Unread Message Badge", USER_SETTINGS_NOTIFICATIONS_SHOW_BADGE_BODY: "Shows a red badge on the app icon when you have unread messages.", USER_SETTING_NOTIFICATIONS_ENABLE_BURST_REACTION_NOTIFICATIONS_LABEL: "Enable Super Reaction Notifications", USER_SETTINGS_NOTIFICATIONS_SHOW_FLASH_LABEL: "Enable Taskbar Flashing", USER_SETTINGS_NOTIFICATIONS_SHOW_FLASH_BODY: "Flashes the app in your taskbar when you have new notifications.", USER_SETTINGS_NOTIFICATIONS_PREVIEW_SOUND: "Preview sound", USER_SETTINGS_NOTIFICATIONS_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL_LABEL: "Enable same-channel message notifications", USER_SETTINGS_NOTIFICATIONS_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL_NOTE: "Play a unique sound when there's a new message in the channel you're currently reading.", AUTH_SESSIONS: "Devices", AUTH_SESSIONS_DESCRIPTION: "Here are all the devices that are currently logged in with your Discord account. You can log out of each one individually or all other devices.\n \nIf you see an entry you don't recognize, log out of that device and change your Discord account password immediately.", AUTH_SESSIONS_CURRENT: "Current Device", AUTH_SESSIONS_OTHERS: "Other Devices", AUTH_SESSIONS_LINK_NEW_DEVICE: "Link New Device", AUTH_SESSIONS_OTHERS_LOG_OUT_TITLE: "Log out of all known devices", AUTH_SESSIONS_OTHERS_LOG_OUT_SELECTED_TITLE: "Log out of selected devices", AUTH_SESSIONS_OTHERS_LOG_OUT_DESCRIPTION: "You'll have to log back in on all logged out devices.", AUTH_SESSIONS_OTHERS_LOG_OUT_ACTION: "Log Out All Known Devices", AUTH_SESSIONS_OTHERS_LOG_OUT_SELECTED_ACTION: "Log Out {count, plural, =1 {# Device} other {# Devices}}", AUTH_SESSIONS_ACTIVE_RECENTLY: "less than an hour ago", AUTH_SESSIONS_SESSION_LOG_OUT: "Log Out of Device", AUTH_SESSIONS_OS_UNKNOWN: "Unknown", AUTH_SESSIONS_UNKNOWN_LEGACY: "Some older devices may not be shown here", AUTH_SESSIONS_UNKNOWN_LEGACY_LOG_OUT: "To log them out, please [change your password](onClick)", MERCHANDISE: "Merch", CHANNEL_TYPE: "Channel Type", TEXT_CHANNEL: "Text Channel", FORUM_CHANNEL: "Forum Channel", FORUM_POST: "Forum Post", STORE_CHANNEL: "Store Channel", NEWS_CHANNEL: "Announcement Channel", DM: "Direct Message", DM_ABBREVIATED: "DM", GROUP_DM: "Group DM", STAGE_CHANNEL: "Stage Channel", STAGE_CHANNEL_LOCKED: "Stage Channel (Locked)", VOICE_CHAT_TEXT_CHANNEL: "Voice Chat Text Channel", CATEGORY: "Category", TEXT_CHANNEL_DESC: "Post images, GIFs, stickers, opinions, and puns", VOICE_CHANNEL_DESC: "Connect to live audio for group conversations", NEWS_CHANNEL_DESC: "A text channel that can post to servers following it", STAGE_CHANNEL_DESC: "A voice channel for hosting events with an audience", WHATS_NEW: "What's New", WHATS_NEW_DATE: "{date, date, long}", EDIT_CATEGORY: "Edit Category", CATEGORY_NAME: "Category Name", HIDE_MUTED_CHANNELS: "Hide Muted Channels", COLLAPSE_CATEGORY: "Collapse Category", COLLAPSE_ALL_CATEGORIES: "Collapse All Categories", CHANNEL_OR_CATEGORY: "Channel or Category", CREATE_CATEGORY: "Create Category", MUTE_CATEGORY: "Mute Category", UNMUTE_CATEGORY: "Unmute Category", NO_CATEGORY: "No Category", IN_CATEGORY: "in !!{categoryName}!!", NUM_CHANNELS: "{num, plural, =1 {{num} channel} other {{num} channels}}", ADD_CHANNEL_TO_OVERRIDE: "Add a channel to override its default notification settings", ADD_CHANNEL_OR_CATEGORY: "Add a Channel or Category", ADD_OVERRIDE: "Add Override", NEW_OVERRIDE: "New Override", SELECT_CHANNEL_OR_CATEGORY: "Select a channel or category…", NOTIFICATION_OVERRIDES: "Notification Overrides", CHANNEL_NOTIFICATION_OVERRIDES: "Channel Notification Overrides", PRIVATE_CHANNEL: "Private Channel", CATEGORY_SETTINGS: "Category Settings", PRIVATE_CATEGORY: "Private Category", PRIVATE_CHANNEL_NOTE: "By making a channel private, only selected roles will have access to read or connect to this channel.", PRIVATE_CATEGORY_NOTE: "By making a category private, all locked channels within it will inherit permissions.", CHAT_ATTACH_UPLOAD_A_FILE: "Upload a File", CHAT_ATTACH_UPLOAD_OR_INVITE: "Upload a file or send invites", CHAT_ATTACH_INVITE_TO_PLAY_GAME: "Invite !!{channel}!! to Play !!{game}!!", CHAT_ATTACH_INVITE_TO_LISTEN: "Invite !!{channel}!! to Listen to !!{name}!!", CHAT_ATTACH_INVITE_TO_WATCH: "Invite !!{channel}!! to Watch !!{name}!!", CHAT_ATTACH_USE_SLASH_COMMAND: "Use Apps", CHAT_ATTACH_UPLOAD_TEXT_AS_FILE: "Upload your message as a file", CHANNEL_LOCKED_TO_CATEGORY: "Permissions synced with category: **{categoryName}**", PERMISSIONS_UNSYNCED: "Permissions not synced with category: **{categoryName}**", CONFIRM_CHANNEL_DRAG_TITLE: "Sync permissions?", SYNC_PERMISSIONS: "Sync Permissions", SYNC_NOW: "Sync Now", SYNC_PERMISSIONS_EXPLANATION: "Would you like to sync **{channelName}** permissions with **{categoryName}**?", KEEP_PERMISSIONS: "Keep Current Permissions", NEVERMIND: "Never Mind", GIF: "GIF", NITRO_HOME_ENJOY_UPDATED_DISCORD: "Enjoy An Upgraded Discord", NITRO_HOME_SHOW_UP_HOW_YOU_WANT: "Show Up The Way You Want", NITRO_HOME_ALL_YOUR_NITRO_PERKS: "All Your Nitro Perks", NITRO_HOME_CARD_INCLUDED_WITH_BASIC_AND_NITRO: "Included with Basic and Nitro.", NITRO_HOME_CARD_INCLUDED_WITH_ONLY_NITRO: "Only with Nitro.", NITRO_HOME_CARD_CHOOSE_CUSTOM_EMOJI: "Choose from all of your custom emojis in any conversation.", NITRO_HOME_CARD_CUSTOM_SOUNDS_EVERYWHERE: "Custom Sounds Everywhere", NITRO_HOME_CARD_USE_CUSTOM_SOUNDS: "Use custom soundboard sounds across voice channels.", NITRO_HOME_CARD_USE_CUSTOM_SOUNDS_V2: "Use custom soundboard sounds across voice channels. Only with Nitro.", NITRO_HOME_CARD_UPLOAD_POWER: "Feel the upload power.", NITRO_HOME_STREAM_UP_TO_4K: "Up to 4K and 60FPS.", NITRO_HOME_UPLOAD_ALL_YOU_WANT: "Upload what you want with increased 500MB upload size.", NITRO_HOME_SUPER_REACTIONS: "Super Reactions", NITRO_HOME_SUPER_REACTIONS_DESCRIPTION: "Hype up the chat with action-packed, animated reactions.", NITRO_HOME_ENTRANCE_SOUNDS_BENEFIT: "Make a splash like only Nitro subscribers can in your favorite voice channels.", NITRO_HOME_SUBSCRIBER_BADGE: "Subscriber Badge", NITRO_HOME_GET_THIS_SUBSCRIBER_BADGE: "Get this cool badge for being a Nitro subscriber.", NITRO_HOME_SUBSCRIBER_BADGE_FOR_THE_COLLECTORS: "For the collectors. Grab this exclusive Nitro-only badge.", NITRO_HOME_REWARDING_TENURE_FREE_BOOST: "{numFreeBoosts} Free {numFreeBoosts, plural, =1 {Boost} other {numFreeBoosts}}", NITRO_HOME_REWARDING_TENURE_CONGRATULATIONS: "Congratulations on your first month of Nitro.", NITRO_HOME_REWARDING_TENURE_REWARD: "Nitro Reward", NITRO_HOME_REWARDING_TENURE_DISCLAIMER: "Your extra Boost is yours to use as long as your current Nitro subscription remains active.", NITRO_HOME_REWARDING_TENURE_REDEEM_YOUR_REWARD: "Redeem Your Reward!", NITRO_HOME_REWARDING_TENURE_REDEEM_ACTION: "Redeem", NITRO_HOME_REWARDING_TENURE_REDEEMED_REWARD: "Redeemed", NITRO_HOME_REWARDING_TENURE_REDEEMED_REWARD_GRATITUDE: "Thanks for being a Nitro member.", NITRO_HOME_REWARDING_TENURE_REDEEMED_REWARD_DISLAIMER: "Keep your Boost with an active Nitro subscription. Canceling resets progress and removes the Boost.", NITRO_HOME_REWARDING_TENURE_DESCRIPTION: "Earn a Boost when you hit your first month of Nitro.", NITRO_HOME_REWARDING_TENURE_BOOST_AVAILABLE_DATE: "Redeem in {days} {days, plural, =1 {day} other {days}}", NITRO_HOME_REWARDING_TENURE_REDEEM_BOOST: "Redeem in {numDays} {numDays, plural, =1 {day} other {days}}", NITRO_HOME_REWARDING_LOCKED_STATE_TITLE: "Nitro Reward", NITRO_HOME_REWARDING_FREE_BOOST_LOCKED_STATE_SUBTITLE_1_MONTH_VARIANT: "Earn a Boost when you hit your first month of Nitro.", NITRO_HOME_REWARDING_FREE_BOOST_LOCKED_STATE_SUBTITLE_3_MONTHS_VARIANT: "Earn a Boost when you hit 3 months of Nitro.", NITRO_HOME_REWARDING_LOCKED_STATE_DESCRIPTION: "Your extra Boost is yours to use as long as your current Nitro subscription remains active.", NITRO_HOME_REWARDING_REDEEMABLE_STATE_TITLE: "Redeem Your Reward!", NITRO_HOME_REWARDING_FREE_BOOST_REDEEMABLE_STATE_SUBTITLE_1_MONTH_VARIANT: "Congratulations on your first month of Nitro.", NITRO_HOME_REWARDING_FREE_BOOST_REDEEMABLE_STATE_SUBTITLE_3_MONTHS_VARIANT: "Congratulations on 3 months of Nitro.", NITRO_HOME_REWARDING_REDEEMED_STATE_SUBTITLE: "Thanks for being a Nitro member.", NITRO_HOME_REWARDING_REDEEMED_STATE_DESCRIPTION: "Keep your Boost with an active Nitro subscription. Canceling resets progress and removes the Boost.", NITRO_HOME_REWARDING_REDEEMED_LABEL: "Redeemed", NITRO_HOME_SHY_PROJECT_TITLE: "25% off VALORANT", NITRO_HOME_SHY_PROJECT_SUBTITLE: "Lock in. Stand out. Enjoy 25% off limited time VALORANT styles in the Shop.", NITRO_HOME_SPECIAL_PRICING: "Special Member Pricing", NITRO_HOME_SPECIAL_PRICING_DESCRIPTION: "Snag sweet discounts on any - or every! - item at the Shop. Only with Nitro.", NITRO_HOME_FILE_UPLOADS: "500MB Uploads", NITRO_HOME_EARLY_ACCESS_DESCRIPTION: "Get exclusive access to certain new features before they’re released to everyone.", NITRO_HOME_TAB_NEW: "New", NITRO_HOME_TAB_PERKS: "Perks", NITRO_HOME_CATEGORY_FAVORITES: "Nitro Favorites", GUILD_BOOST_NITRO_REWARD_BANNER: "You earned an extra Boost, nice work.", SINGLE_UNUSED_GUILD_BOOST_NITRO_REWARD_TITLE: "Your Boost awaits!", SINGLE_UNUSED_GUILD_BOOST_NITRO_REWARD_SUBTITLE_1_MONTH_VARIANT: "Thanks for being a Nitro member. Here’s an extra Boost for reaching your first month of Nitro.", SINGLE_UNUSED_GUILD_BOOST_NITRO_REWARD_SUBTITLE_3_MONTHS_VARIANT: "Thanks for being a Nitro member. Here’s an extra Boost for reaching 3 months of Nitro.", NITRO_MARKETING_CARDS_SUPERCHARGE_YOUR_DISCORD: "Supercharge your Discord", NITRO_MARKETING_CARDS_CUSTOM_PROFILES: "Custom Profiles Across All Servers", NITRO_MARKETING_CARDS_UNLIMITED_SUPER_REACTIONS: "Unlimited Super Reactions per week", NITRO_MARKETING_CARDS_BOOSTS_UPLOADS_AND_MORE: "2 Server Boosts, 500 MB uploads, and more!", NITRO_MARKETING_JUST_THE_BASICS: "Just the basics", NITRO_MARKETING_BASIC_PERKS: "Nitro Basic Perks", MARKETING_PAGE_CAROUSEL_TITLE: "Make Discord Yours", MARKETING_PAGE_CHOOSE_PLAN_TITLE: "Choose Your Nitro", MARKETING_PAGE_CHOOSE_PLAN_SUBTITLE: "Upgrade to get all the customization thangs.", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_EMOJIS: "Use all your emoji and stickers everywhere", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_PROFILES: "Multiple profiles! Use a different avatar, banner, and bio in each of your servers", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_UPLOADS: "Upload media up to 100MB", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_UPLOADS_INCREASE: "Upload media up to {premiumMaxSize}", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_BOOSTS: "Get 2 Boosts to use on your favorite server and 30% off Boosts", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_BADGE: "Special Nitro badge on your profile and custom tag", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_SERVERS: "Join twice as many servers (up to 200)", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_MESSAGES: "Longer messages (up to 4,000 characters)", MARKETING_PAGE_CHOOSE_PLAN_TIER_2_PERK_LIST_STREAMING: "Best HD streaming quality on desktop (up to 4k 60fps)", MARKETING_PAGE_CHOOSE_PLAN_TIER_1_PERK_LIST_LESS: "What you love about Nitro, just a little less", MARKETING_PAGE_CHOOSE_PLAN_TIER_1_PERK_LIST_UPLOADS: "Up to 50MB file uploads", MARKETING_PAGE_CHOOSE_PLAN_TIER_1_PERK_LIST_STREAMING: "1080p and 60fps streaming on desktop", MARKETING_PAGE_PERK_CARD_EMOJIS_HEADER: "All Emoji, Everywhere", MARKETING_PAGE_PERK_CARD_EMOJIS_SUBHEADER: "Use your **favorite custom and animated emoji**, along with custom stickers.", MARKETING_PAGE_PERK_CARD_UPLOADS_HEADER: "Bigger Uploads", MARKETING_PAGE_PERK_CARD_UPLOADS_SUBHEADER: "Share your favorite photos, videos, and more with 100MB upload size.", MARKETING_PAGE_PERK_CARD_UPLOADS_SUBHEADER_INCREASE: "Share your favorite photos, videos, and more with {premiumMaxSize} upload size.", MARKETING_PAGE_PERK_CARD_PROFILE_HEADER: "Express Yourself", MARKETING_PAGE_PERK_CARD_PROFILE_SUBHEADER: "Style your profile with a different animated avatar, banner, and bio in each server.", MARKETING_PAGE_PERK_CARD_BOOSTS_HEADER: "2 Boosts and more!", MARKETING_PAGE_PERK_CARD_BOOSTS_SUBHEADER: "Get 2 Boosts to support your favorite servers, plus 30% off Boosts purchases.", MARKETING_PAGE_CTA_TIER_2: "Get Nitro for {price}", MARKETING_PAGE_CTA_TIER_1: "Get Nitro Classic for {price}", MARKETING_PAGE_CTA_BUY_NOW: "Buy Now", MARKETING_PAGE_CTA_GET_NITRO: "Get Nitro", MARKETING_PAGE_CTA_JOIN_NITRO: "Join Nitro", MARKETING_PAGE_CTA_UPGRADE_NOW: "Upgrade Now", MARKETING_PAGE_CTA_UPGRADE_NITRO: "Upgrade Nitro", MARKETING_PAGE_CTA_SWITCH_PLANS: "Switch Plans", MARKETING_PAGE_CTA_GET_BASIC: "Get Basic", MARKETING_PAGE_CTA_GET_FREE_TRIAL: "Get Free Trial", MARKETING_PAGE_CTA_TRY_1_MONTH_FREE: "Try 1 Month Free", MARKETING_PAGE_CTA_START_FREE_TRIAL: "Start Free Trial", MARKETING_PAGE_HEADLINE_MAKE_DISCORD_YOURS: "Make Discord yours", MARKETING_PAGE_HEADLINE_MAKE_DISCORD_YOURS_WITH_NITRO: "Make Discord Yours with Nitro", MARKETING_PAGE_HEADLINE_UPGRADE_YOUR_DISCORD_WITH_NITRO: "Upgrade Your Discord with Nitro", MARKETING_PAGE_HEADLINE_JOIN_NITRO_HAVE_FUN_YOUR_WAY: "Join Nitro And Have Fun Your Way", MARKETING_PAGE_HEADLINE_UPGRADE_YOUR_DISCORD: "Upgrade your Discord", SUBSCRIPTION_MANAGEMENT: "Subscription Management", PREMIUM_SUBSCRIPTION_LEGAL_DISCLAIMER_IOS: "By clicking “Get Nitro” you agree to the Terms of Service and Paid Services Terms. This is a recurring subscription. We'll charge your Apple ID account today and every {interval} until you cancel. You can cancel any time up to 24 hours before your current period ends in the App Store Settings.", PREMIUM_SUBSCRIPTION_LEGAL_DISCLAIMER_ANDROID: "By clicking “Get Nitro” you agree to the Terms of Service and Paid Services Terms. This is a recurring subscription. We'll charge your Google Play account today and every {interval} until you cancel. You can cancel any time up to 24 hours before your current period ends in the Google Play Store Settings.", PREMIUM_SUBSCRIPTION_INTERVAL_MONTH: "month", PREMIUM_SUBSCRIPTION_INTERVAL_YEAR: "year", ANOTHER_PREMIUM_SUBSCRIPTION_LEGAL_DISCLAIMER_IOS: "By clicking \"Purchase\" you agree to the [Terms of Service]({termsURL}) and [Paid Services Terms]({paidURL}). What you're purchasing is a recurring subscription, which means we'll charge your Apple ID account today and continue to charge you every {interval} until you cancel. You can cancel any time up to 24 hours before your current period ends in the App Store Settings.", ANOTHER_PREMIUM_SUBSCRIPTION_LEGAL_DISCLAIMER_ANDROID: "By clicking \"Purchase\" you agree to the [Terms of Service]({termsURL}) and [Paid Services Terms]({paidURL}). What you're purchasing is a recurring subscription, which means we'll charge your Google Play account today and continue to charge you every {interval} until you cancel. You can cancel any time up to 24 hours before your current period ends in the Google Play Store Settings.", GOOGLE_PLAY_PREMIUM_TRIAL_DISCLAIMER: "By clicking \"Continue on Google Play\" you're agreeing to Discord's [Paid Services Terms]({paidURL}). Nitro is a recurring subscription. Your payment method will be charged after your trial ends and continue to be charged every {interval} unless you [cancel your subscription]({cancelURL}). You will receive a reminder email before your trial ends. Total doesn't include any additional fees charged by your financial institution.", IOS_PREMIUM_TRIAL_DISCLAIMER: "By clicking \"Continue on App Store\" you're agreeing to Discord's [Paid Services Terms]({paidURL}). Nitro is a recurring subscription. Your payment method will be charged after your trial ends and continue to be charged every {interval} unless you [cancel your subscription]({cancelURL}). You will receive a reminder email before your trial ends. Total doesn't include any additional fees charged by your financial institution.", THIS_IS_WHAT_YOU_HAVE: "This is what you have", PREMIUM_CTA_TIER_0: "Get Basic", PREMIUM_MOBILE_TRIAL_MARKETING_PAGE_BADGE: "Free Trial ({days, plural, =1 {# day left} other {# days left}})", PREMIUM_MOBILE_TRIAL_FREE_TRIAL_BADGE: "Free Trial", POWERED_BY_NITRO: "Powered by Nitro", PREMIUM_ATTACHMENT_HOVER_NON_SUBSCRIBER: "Unlock 500MB uploads with Nitro", PREMIUM_ATTACHMENT_HOVER_SUBSCRIBER: "500MB uploads unlocked!", USER_ACTIVITY_HEADER_PLAYING: "Playing a game", USER_ACTIVITY_HEADER_LIVE_ON_PLATFORM: "Live on !!{platform}!!", USER_ACTIVITY_HEADER_PLAYING_ON_PLATFORM: "Playing on !!{platform}!!", USER_ACTIVITY_HEADER_WATCHING: "Watching !!{name}!!", USER_ACTIVITY_HEADER_LISTENING: "Listening to !!{name}!!", USER_ACTIVITY_HEADER_STREAMING_TO_GUILD: "Streaming to !!{server}!!", USER_ACTIVITY_HEADER_STREAMING_TO_DM: "Streaming", USER_ACTIVITY_HEADER_COMPETING: "Competing in !!{name}!!", USER_ACTIVITY_STATE_SIZE: "({count} of {max})", USER_ACTIVITY_TIMESTAMP_END_SIMPLE: "{timeDelta} left", USER_ACTIVITY_TIMESTAMP_START_SIMPLE: "{timeDelta} elapsed", USER_ACTIVITY_TIMESTAMP_END: "{hours, plural, =-1 {} other {{hours}:}}{minutes, plural, =-1 {} other {{minutes}:}}{seconds, plural, =-1 {} other {{seconds}}} left", USER_ACTIVITY_TIMESTAMP_START: "{hours, plural, =-1 {} other {{hours}:}}{minutes, plural, =-1 {} other {{minutes}:}}{seconds, plural, =-1 {} other {{seconds}}} elapsed", USER_ACTIVITY_USER_PLAYING_FOR_SECONDS: "for {time, number} {time, plural, =1 {second} other {seconds}}", USER_ACTIVITY_USER_PLAYING_FOR_MINUTES: "for {time, number} {time, plural, =1 {minute} other {minutes}}", USER_ACTIVITY_USER_PLAYING_FOR_HOURS: "for {time, number} {time, plural, =1 {hour} other {hours}}", USER_ACTIVITY_USER_PLAYING_FOR_DAYS: "for {time, number} {time, plural, =1 {day} other {days}}", USER_ACTIVITY_ACTION_NOTIFY_ME: "Notify Me", USER_ACTIVITY_ACTION_ASK_TO_JOIN: "Ask to Join", USER_ACTIVITY_ACTION_INVITE_TO_JOIN: "Invite to Join", USER_ACTIVITY_ACTION_INVITE_TO_LISTEN_ALONG: "Invite to Listen Along", USER_ACTIVITY_ACTION_ASK_TO_JOIN_USER: "Ask to Join !!{name}!!", USER_ACTIVITY_ACTION_DOWNLOAD_APP: "Download", USER_ACTIVITY_CANNOT_JOIN_SELF: "You can't join yourself", USER_ACTIVITY_NOT_DETECTED: "{name} is not detected", USER_ACTIVITY_LISTENING: "Listening", USER_ACTIVITY_LISTEN_ALONG: "Listen Along", USER_ACTIVITY_WATCH_ALONG: "Watch Along", USER_ACTIVITY_PLAY_ON_PLATFORM: "Play on {platform}", USER_ACTIVITY_CONNECT_PLATFORM: "Connect {platform}", USER_ACTIVITY_CANNOT_PLAY_SELF: "You played yourself. Wait, you can't.", USER_ACTIVITY_CANNOT_SYNC_SELF: "Listen along with someone else, not yourself.", USER_ACTIVITY_ALREADY_PLAYING: "You're already playing this.", USER_ACTIVITY_ALREADY_SYNCING: "You're already along for this ride.", USER_ACTIVITY_INVITE_REQUEST_REQUESTED: "**!!{username}!!** wants to join you in **!!{game}!!**.", USER_ACTIVITY_JOINING: "Joining", USER_ACTIVITY_RESPOND_YEAH: "Yeah", USER_ACTIVITY_RESPOND_NOPE: "Nope", USER_ACTIVITY_CHAT_INVITE_EDUCATION: "**!!{game}!!** supports game invites. [Dismiss](dismissOnClick)", USER_ACTIVITY_LISTENING_ARTISTS: "by $[!!{artists}!!](artistsHook)", USER_ACTIVITY_LISTENING_ALBUM: "on $[!!{album}!!](albumHook)", USER_ACTIVITY_LISTEN_ALONG_DESCRIPTION: "Listen along with !!{name}!!", USER_ACTIVITY_USER_JOIN: "**!!{username}!!** is joining your game via Discord.", USER_ACTIVITY_USER_JOIN_HINT: "This may take a moment while their game launches.", USER_ACTIVITY_STAGE_STATE_SIZE: "{numSpeakers, number} speakers, {numListeners, number} listeners", INVITE_EMBED_GAME_INVITE: "Game Invite", INVITE_EMBED_LISTENING_INVITE: "Listen Along Invite", INVITE_EMBED_ASK_TO_JOIN: "Ask to Join", INVITE_EMBED_INVITE_TO_JOIN: "Invite to Join", INVITE_EMBED_INVITE_TO_JOIN_GROUP: "Invite to Join Group", INVITE_EMBED_INVITE_TO_LISTEN: "Invite to Listen Along on {name}", INVITE_EMBED_INVITE_TO_WATCH: "Invite to Watch {name}", INVITE_EMBED_NUM_OPEN_SLOTS: "{number, number} open {number, plural, =1 {slot} other {slots}}", INVITE_EMBED_GAME_HAS_ENDED: "Game has ended", INVITE_EMBED_LISTEN_HAS_ENDED: "The listening party is over!", INVITE_EMBED_WATCH_HAS_ENDED: "The watching party is over!", INVITE_EMBED_FULL_GROUP: "Full group", INVITE_EMBED_JOIN_VIA_DESKTOP_APP: "Join via Desktop App", INVITE_EMBED_JOIN_VIA_IOS: "Join via iOS", INVITE_EMBED_JOIN_VIA_ANDROID: "Join via Android", INVITE_EMBED_JOIN_VIA_XBOX: "Join via Xbox", INVITE_EMBED_IN_GROUP: "Joined group", INVITE_EMBED_SEND_INVITE: "Send Invite", INVITE_EMBED_JOINED: "Joined", GIFT_EMBED_TITLE: "A wild gift appears!", GIFT_EMBED_TITLE_SUBSCRIPTION: "You've been gifted a subscription!", GIFT_EMBED_TITLE_SELF: "You sent a gift!", GIFT_EMBED_TITLE_SUBSCRIPTION_SELF: "You gifted a subscription!", GIFT_EMBED_BODY_DEFAULT: "**!!{username}!!** has gifted you a game. Accept the gift to add it to your library.", GIFT_EMBED_BODY_NO_USER_DEFAULT: "You've been gifted a game. Accept the gift to add it to your library.", GIFT_EMBED_BODY_SUBSCRIPTION_DEFAULT_MONTHS: "**!!{username}!!** has gifted you {skuName} for **{intervalCount, plural, =1 {# month} other {# months}}**!", GIFT_EMBED_BODY_SUBSCRIPTION_NO_USER_DEFAULT_MONTHS: "You've been gifted {skuName} for **{intervalCount, plural, =1 {# month} other {# months}}**!", GIFT_EMBED_BODY_SUBSCRIPTION_DEFAULT_YEARS: "**!!{username}!!** has gifted you {skuName} for **{intervalCount, plural, =1 {# year} other {# years}}**!", GIFT_EMBED_BODY_SUBSCRIPTION_NO_USER_DEFAULT_YEARS: "You've been gifted {skuName} for **{intervalCount, plural, =1 {# year} other {# years}}**!", GIFT_EMBED_BODY_SELF: "If you want to claim this gift for yourself, go right ahead. We won't judge :)", GIFT_EMBED_BODY_SELF_NOT_REDEEMABLE: "Thanks for giving the gift of !!{skuName}!!.", GIFT_EMBED_BODY_SUBSCRIPTION_ALREADY_ACTIVE: "This gift cannot be redeemed with an existing subscription.", GIFT_EMBED_BODY_CLAIMED_SELF: "It looks like you already claimed this gift. {skuName} is in your [Library](onViewInLibrary).", GIFT_EMBED_BODY_CLAIMED_SELF_MOBILE: "Looks like you already claimed this gift.", GIFT_EMBED_BODY_CLAIMED_SELF_SUBSCRIPTION: "Looks like you already claimed this gift.", GIFT_EMBED_BODY_CLAIMED_OTHER: "Hmm, it seems someone already claimed this gift.", GIFT_EMBED_BODY_OWNED: "Oops! You can't claim {skuName} because you already own it. [View in Library](onViewInLibrary)", GIFT_EMBED_BODY_SUBSCRIPTION_MISMATCH: "Oops! You're unable to accept this gift because you're already subscribed to {planName}.", GIFT_EMBED_BODY_REQUIRES_VERIFICATION: "[Verify your account](onClick) before claiming this gift.", GIFT_EMBED_BODY_REQUIRES_VERIFICATION_EMAIL: "[Verify your email address](onClick) before claiming this gift.", GIFT_EMBED_BODY_GIVEAWAY: "**!!{username}!!** is giving away {totalCopies, number} copies of {skuName}. Claim your gift before they're gone!", GIFT_EMBED_BODY_NO_USER_GIVEAWAY: "{totalCopies, number} copies of {skuName} are up for grabs! Claim your gift before they're gone!", GIFT_EMBED_EXPIRATION: "Expires in {hours, plural, =1 {# hour} other {# hours}}", GIFT_EMBED_BODY_SUBSCRIPTION_GIVEAWAY: "**!!{username}!!** is giving away {maxUses, number} subscriptions to {skuName}. Claim your gift before they're gone! Wahoooo!!!", GIFT_EMBED_BODY_SUBSCRIPTION_NO_USER_GIVEAWAY: "{maxUses, number} copies of {skuName} are up for grabs! Claim your gift before they're gone! Wahoooo!!!", GIFT_EMBED_COPIES_LEFT: "{remaining, number} of {total, number} copies left", GIFT_EMBED_SUBSCRIPTIONS_LEFT: "{remaining, number} of {total, number} subscriptions left", GIFT_EMBED_BUTTON_ACCEPT: "Accept", GIFT_EMBED_BUTTON_CLAIMED: "Claimed", GIFT_EMBED_BUTTON_CLAIMING: "Claiming", GIFT_EMBED_BUTTON_CLAIM: "Claim", GIFT_EMBED_BUTTON_OWNED: "Owned", GIFT_EMBED_BUTTON_OPEN: "Open Gift", GIFT_EMBED_HEADER_OWNER_INVALID: "You sent a gift, but...", GIFT_EMBED_HEADER_RECEIVER_INVALID: "You received a gift, but...", GIFT_EMBED_INFO_OWNER_INVALID: "Try sending another gift link!", GIFT_EMBED_INFO_RECEIVER_INVALID: "If you missed it, try asking for another link!", GIFT_EMBED_INVALID: "Gift Link Invalid", GIFT_EMBED_INVALID_TITLE_OTHER: "You received a gift, but...", GIFT_EMBED_INVALID_TITLE_SELF: "You sent a gift, but...", GIFT_EMBED_INVALID_TAGLINE_SELF: "The gift link has either expired or has been revoked. You can still create a new link to send again.", GIFT_EMBED_INVALID_TAGLINE_OTHER: "The gift link has either expired or has been revoked. The sender can still create a new link to send again.", GIFT_EMBED_TITLE_PROMOTION: "You got a promotion code!", GIFT_EMBED_TAGLINE_PROMOTION: "This gift link is a promotion code. Click the button below to claim it.", GIFT_EMBED_RESOLVING: "Resolving gift", GIFT_EMBED_BODY_REQUIRES_VERIFICATION_MOBILE: "Verify your account before claiming this gift.", GIFT_EMBED_BODY_REQUIRES_VERIFICATION_EMAIL_MOBILE: "Verify your email address before claiming this gift.", GIFT_INVENTORY: "Gift Inventory", GIFT_INVENTORY_EXPIRES_IN: "Link expires in {hours, plural, =1 {# hour} other {# hours}}", GIFT_INVENTORY_EXPIRES_IN_MOBILE: "Link expires in {hours, plural, =1 {# hour} other {# hours}} - $[Revoke](revokeHook)", GIFT_INVENTORY_NO_GIFTS: "There are no gifts.", GIFT_INVENTORY_NO_GIFTS_SUBTEXT: "Feeling generous? Give someone the gift of [Nitro](onClick) and make their day!", GIFT_INVENTORY_NO_GIFTS_SUBTEXT_MOBILE: "Feeling generous? Give someone the gift of Nitro and make their day!", GIFT_INVENTORY_COPIES: "{copies, plural, =1 {# copy} other {# copies}}", GIFT_INVENTORY_REDEEM_CODES: "Redeem Codes", GIFT_INVENTORY_GENERATE_LINK: "Generate Link", GIFT_INVENTORY_GENERATE_LINK_IOS: "Generate", GIFT_INVENTORY_HIDDEN: "Gift code hidden. Use copy button.", GIFT_INVENTORY_GENERATE_HELP: "You have more gifts! Make another link?", GIFT_INVENTORY_SUBSCRIPTION_MONTHS: "{skuName} ({intervalCount, plural, =1 {# month} other {# months}})", GIFT_INVENTORY_SUBSCRIPTION_YEARS: "{skuName} ({intervalCount, plural, =1 {# year} other {# years}})", GIFT_INVENTORY_SELECT_NITRO_GIFT: "Select a Nitro Gift", GIFT_INVENTORY_SELECT_NITRO_CLASSIC_GIFT: "Select a Nitro Classic Gift", GIFT_INVENTORY_YOUR_GIFTS: "Your Gifts", GIFT_INVENTORY_CLAIM_GIFT: "Claim", GIFT_INVENTORY_GIFTS_YOU_PURCHASED: "Gifts You Purchased", GIFT_PURCHASE_GOOGLE_PLAY_NOTICE: "Currently, gifts cannot contribute towards subscriptions managed by the Google Play Store.", GIFT_PURCHASE_GOOGLE_PLAY_NOTICE_EXTENDED: "Currently, gifts cannot contribute towards subscriptions managed by the Google Play Store.\n\nRedeemed gifts can still contribute towards subscriptions purchased on our desktop or browser apps.", GIFT_CONFIRMATION_BODY_CONFIRM: "Once you accept, {skuName} will be yours FOR-EV-ERRRRRR!", GIFT_CONFIRMATION_BODY_CONFIRM_NITRO: "Once you accept you'll have credit for **{skuName}** for **{timeFrame}** *", GIFT_CONFIRMATION_BODY_CONFIRM_NITRO_DISCLAIMER: "*If you have a subscription through Google Play, you cannot apply this credit to your subscription at this time. [Learn more.]({helpdeskArticle})", GIFT_CONFIRMATION_BODY_SUBSCRIPTION_MONTHLY_CONFIRM: "Once you accept you will have {skuName} for **{intervalCount, plural, =1 {# month} other {# months}}**.", GIFT_CONFIRMATION_BODY_SUBSCRIPTION_YEARLY_CONFIRM: "Once you accept you will have {skuName} for **{intervalCount, plural, =1 {# year} other {# years}}**.", GIFT_CONFIRMATION_BUTTON_CONFIRM: "Heck Yeah! Add to Library", GIFT_CONFIRMATION_BUTTON_CONFIRM_SUBSCRIPTION: "I accept", GIFT_CONFIRMATION_BUTTON_CONFIRM_MOBILE: "Gimme", GIFT_CONFIRMATION_BUTTON_SUCCESS_MOBILE: "Noice!", GIFT_CONFIRMATION_BUTTON_GO_TO_LIBRARY: "Go to my Library", GIFT_CONFIRMATION_BUTTON_SUBSCRIPTION_SUCCESS: "Sweet!", GIFT_CONFIRMATION_BUTTON_FAIL: "Oh ok.", GIFT_CONFIRMATION_HEADER_CONFIRM: "Accept this gift?", GIFT_CONFIRMATION_HEADER_CONFIRM_NITRO: "You've been gifted {skuName}", GIFT_CONFIRMATION_HEADER_SUCCESS: "Noice!", GIFT_CONFIRMATION_HEADER_SUCCESS_NITRO: "You got {skuName}!", GIFT_CONFIRMATION_HEADER_FAIL: "*Sad Trombone*", GIFT_CONFIRMATION_BODY_CLAIMED: "You couldn't claim this gift because someone else beat you to the punch. That's jazz baby!", GIFT_CONFIRMATION_BODY_OWNED: "You couldn't claim this gift because you already have it. You can find it in [your library](onGoToLibrary).", GIFT_ERROR_OWNED: "You couldn't claim this gift because you already have it.", GIFT_CONFIRMATION_BODY_UNKNOWN_ERROR: "Something funky happened and we failed to secure the bag...try again?", GIFT_CONFIRMATION_BODY_SELF_GIFT_NO_PAYMENT: "You can't accept this gift. You need to give this gift to someone else.", GIFT_CONFIRMATION_BODY_ERROR_NITRO_UPGRADE_DOWNGRADE: "Oops! You're unable to accept this gift because of your existing subscription.", GIFT_CONFIRMATION_BODY_ERROR_SUBSCRIPTION_MANAGED: "Unfortunately, since you have an active subscription through an external provider, you cannot accept Nitro gifts.", GIFT_CONFIRMATION_BODY_ERROR_INVOICE_OPEN: "Unfortunately, you're unable to accept this gift because your subscription has an open invoice.", GIFT_CONFIRMATION_BODY_INVALID: "Bummer! You couldn't claim this gift because it has been revoked.", GIFT_CONFIRMATION_BODY_SUCCESS: "{skuName} is now available in your library. Go forth and play!", GIFT_CONFIRMATION_BODY_SUCCESS_GENERIC: "Go forth and enjoy your gift!", GIFT_CONFIRMATION_BODY_SUCCESS_NITRO_CLASSIC_MOBILE: "Thanks to another generous human, you now have access to enhanced chat perks for {timeFrame}.", GIFT_CONFIRMATION_BODY_SUCCESS_NITRO_MOBILE: "Thanks to another generous human, you now have access to enhanced chat perks and Server Boosts for {timeframe}.", GIFT_CONFIRMATION_BODY_SUCCESS_PREMIUM_TIER_1_MONTHLY: "Thanks to another generous human, you now have access to enhanced chat perks for {intervalCount, plural, =1 {# month} other {# months}}.", GIFT_CONFIRMATION_BODY_SUCCESS_PREMIUM_TIER_1_YEARLY: "Thanks to another generous human, you now have access to enhanced chat perks for {intervalCount, plural, =1 {# year} other {# years}}.", GIFT_CONFIRMATION_BODY_SUCCESS_PREMIUM_TIER_2_MONTHLY: "Thanks to another generous human, you now have access to enhanced chat perks and Server Boosts for {intervalCount, plural, =1 {# month} other {# months}}.", GIFT_CONFIRMATION_BODY_SUCCESS_PREMIUM_TIER_2_YEARLY: "Thanks to another generous human, you now have access to enhanced chat perks and Server Boosts for {intervalCount, plural, =1 {# year} other {# years}}.", GIFT_CONFIRMATION_BODY_SUCCESS_GENERIC_SUBSCRIPTION_MONTHLY: "Thanks to another generous human, you now have {skuName} for {intervalCount, plural, =1 {# month} other {# months}}.", GIFT_CONFIRMATION_BODY_SUCCESS_GENERIC_SUBSCRIPTION_YEARLY: "Thanks to another generous human, you now have {skuName} for {intervalCount, plural, =1 {# year} other {# years}}.", GIFT_CONFIRMATION_BODY_SUCCESS_MOBILE: "**{skuName}** has been added to your library.", GIFT_CONFIRMATION_NITRO_TIME_FRAME_YEARS: "{time, plural, =1 {# year} other {# years}}", GIFT_CONFIRMATION_NITRO_TIME_FRAME_MONTHS: "{time, plural, =1 {# month} other {# months}}", GIFT_CONFIRMATION_BUTTON_NOICE: "Noice!", GIFT_CODE_AUTH_INVALID_BODY: "This gift code may be expired or you might have the wrong code.", GIFT_CODE_AUTH_INVALID_TITLE: "Gift Code Invalid", GIFT_CODE_AUTH_VERIFICATION_TITLE: "Welcome !!{username}!!", GIFT_CODE_AUTH_INVALID_TIP: "Why is my gift code invalid?", GIFT_CODE_AUTH_ACCEPT: "Woo! Accept Gift", GIFT_CODE_AUTH_CONTINUE_IN_BROWSER: "Continue in browser", GIFT_CODE_AUTH_HELP_TEXT_VERIFICATION_REQUIRED: "To accept this gift you must have a verified email address. Check your email to verify your account.", GIFT_CODE_AUTH_CHECK_VERIFICATION_AGAIN: "Already verified you say? Click here to check again...", GIFT_CODE_AUTH_HELP_TEXT_OWNED: "You already have this game. Find it in [your library.]({libraryLink})", GIFT_CODE_AUTH_HELP_TEXT_CLAIMED: "This gift has already been claimed.", GIFT_CODE_AUTH_GIFTED_BY: "!!{username}!! gifted you", GIFT_CODE_AUTH_GIFTED: "You've been gifted", GIFT_CODE_AUTH_GIFTED_SUBSCRIPTION_MONTHLY: "{skuName} for {intervalCount, plural, =1 {# month} other {# months}}", GIFT_CODE_AUTH_GIFTED_SUBSCRIPTION_YEARLY: "{skuName} for {intervalCount, plural, =1 {# year} other {# years}}", GIFT_CODE_AUTH_ACCEPTING: "Accepting", GIFT_CODE_AUTH_RESOLVING: "Retrieving your gift from cyberspace", GIFT_CODE_AUTH_FETCHING_USER: "Checking your ID", GIFT_CODE_AUTH_VERIFICATION_SENT: "Sent!", GIFT_CODE_AUTH_LOGGED_IN_AS: "You are accepting this gift as **!!{userTag}!!**. [Wrong account?](onLogoutClick)", GIFT_CODE_CANNOT_ACCEPT_BODY_IOS: "Sorry, you can only accept your own gift on the desktop app.", GIFT_CODE_SMITE_REJECT_HELP_TEXT: "Sorry, seems like something's gone wrong and you can't use that code.", GIFT_CODE_PAYMENT_SOURCE_INVALID: "Sorry, this payment source cannot be used for redemption", REGION_BLOCKED_PAYMENTS_HEADER: "Billing is paused in your country", REGION_BLOCKED_PAYMENTS_BODY: "Payments and gift redemptions are temporarily suspended in Russia, but the rest of Discord will stay online.", REGION_BLOCKED_PAYMENTS_CTA: "[Why am I seeing this?]({helpdeskArticle})", REGION_BLOCKED_PAYMENTS_ONE_LINER: "Billing is paused in your country. [Learn more]({helpdeskArticle})", PREORDER_SKU_NAME: "!!{name}!! (Preorder)", ADD_A_COMMENT_OPTIONAL: "Add a Comment (Optional)", MESSAGE_PREVIEW: "Message Preview", CHANGE_CATEGORY: "Change Category", UNCATEGORIZED: "Uncategorized", MOVE_FROM_CATEGORY_TO: "Move from {categoryName} to", RTC_DEBUG_OPEN: "Open Debug Panel", RTC_DEBUG_CONTEXT: "RTC Debug: {context}", RTC_DEBUG_TRANSPORT: "Transport", RTC_DEBUG_RTP_OUTBOUND: "Outbound", RTC_DEBUG_RTP_INBOUND: "Inbound", RTC_DEBUG_SCREENSHARE: "Screen Share", RTC_DEBUG_CAMERA: "Camera", RTC_DEBUG_CLIPS: "Clips", RTC_DEBUG_POPOUT_WINDOW_TITLE: "RTC Debug", MENTIONS: "Mentions", MENTIONS_AND_QUICKSWITCHER: "Mentions and Quickswitcher", CATEGORIES: "Categories", GAME_INVITES: "Invites", GAME_INVITES_RECENT_HEADER: "Recent invites", GAME_INVITES_EXPIRED_HEADER: "Expired invites", GAME_INVITES_DELETE_ALL: "Delete all invites", GAME_INVITES_SENT_YOU_AN_INVITE: "{username} Sent You a Game Invite", GAME_INVITES_INVITE_FROM: "Invite from {username}", GAME_INVITES_JOIN_GAME: "Join Game", GAME_INVITES_LAUNCH_GAME: "Launch Game", GAME_INVITES_INSTALL_GAME: "Install Game", GAME_INVITES_LAUNCH_TO_JOIN: "Launch to Join", GAME_INVITES_EMPTY_STATE_TITLE: "Game invites from your friends will show up here!", GAME_INVITES_EMPTY_STATE_SUBTITLE: "You’ll be able to launch or install games you own\n directly your from invites.", GAME_INVITE_ACTIONS_MENU_LABEL: "Game invite actions", GAME_INVITES_DELETE_MODAL_TITLE: "Are you sure you want to delete all game invites?", GAME_INVITES_DELETE_MODAL_SUBTITLE: "Your current game invites will be deleted permanently.", GAME_INVITES_DELETE_INVITES: "Delete invites", GAME_INVITES_NOT_DETECTED_TOOLTIP: "!!{gameTitle}!! is not detected", GAME_INVITES_EXPIRED: "Expired", NUX_NAVIGATION_HELP_GUILD: "A server is a superpowered group chat where people come together to hang out", NUX_NAVIGATION_HELP_CHANNELS: "Servers are made up of channels; places where people talk about different topics", NUX_NAVIGATION_HELP_DMS: "Add friends and chat with them directly", NUX_POST_REG_JOIN_SERVER_TITLE: "Do you have an invite?", NUX_POST_REG_JOIN_SERVER_DESCRIPTION: "Get the most out of Discord by joining a server.", NUX_POST_REG_JOIN_SERVER_SKIP: "I don't have one", NUX_OVERLAY_TITLE: "Meet the Mobile Voice Overlay!", NUX_OVERLAY_DESCRIPTION: "See who's talking and access shortcuts while using other apps—no need to switch back to Discord.", NUX_OVERLAY_ENABLE: "Enable Overlay", NUX_SAMSUNG_GAME_PRESENCE_LINK_TITLE: "What are you playing?!", NUX_SAMSUNG_GAME_PRESENCE_LINK_DESCRIPTION: "Let friends see when you’re gaming by linking your account with Samsung and enabling Mobile Game Detection.", NUX_SAMSUNG_GAME_PRESENCE_LINK_ENABLE: "Let's do it", NUX_VALUE_PROPS_NEXT_BUTTON: "Let's Go!", NUX_VALUE_PROPS_CHAT_CARD_TITLE: "Follow conversations and topics in text chat", NUX_VALUE_PROPS_VOICE_CARD_TITLE: "Chat over voice with multiple people at once", NUX_VALUE_PROPS_CAMERA_CARD_TITLE: "Hang out using video chat and screenshare", NUX_VALUE_PROPS_SERVERS_CARD_TITLE: "Connect with all your communities in servers", NUX_VALUE_PROPS_SERVERS_2_CARD_TITLE: "Connect with all your communities in one place", NUX_VALUE_PROPS_WELCOME_CARD_TITLE: "Welcome to Discord!", NUX_VALUE_PROPS_HEADER_TITLE: "Welcome to Discord!", NUX_VALUE_PROPS_SUBTITLE: "Discord is a home for your communities, friends, book clubs, study groups, and more.", CRASH_UNEXPECTED: "Discord has crashed unexpectedly.", CRASH_TESTERS_INVITE: "Not all is lost! Join us at {testers} and let us know what happened. We'll get right on it.", CRASH_DISCLAIMER: "Please note that using apps which attempt to customize your device's UI are not officially supported and may cause undesired behavior.", CRASH_DETAILS: "Crash Details", CRASH_APP_VERSION: "App Version: {version}", CRASH_DEVICE: "Device: {device}", CRASH_DEVICE_VERSION: "Device Version: {version}", CRASH_TIMESTAMP: "Crash Timestamp: {timestamp}", CRASH_SOURCE: "Crash Source: {source}", CAPTCHA: "Captcha", VERIFY_BY_RECAPTCHA: "Verify by reCaptcha", VERIFY_BY_HCAPTCHA: "Verify by hCaptcha", VERIFY_BY_RECAPTCHA_DESCRIPTION: "We need to know you're not a robo.", CAPTCHA_FAILED: "The captcha failed. Please try again.", CAPTCHA_FAILED_UNSUPPORTED: "The captcha failed, your device is unsupported.", CAPTCHA_FAILED_PLAY_SERVICES: "The captcha failed, Google Play Services is required. After installing or updating please restart the app and try again.", VERIFY: "Verify", CAPTCHA_ISSUES: "Having issues with CAPTCHA?", CAPTCHA_PROBLEMS: "CAPTCHA Problems?", CAPTCHA_PROBLEMS_INFO: "If you're unable to complete the CAPTCHA, try doing it in your browser", CAPTCHA_OPEN_BROWSER: "Open Browser", SPOTIFY_CONNECTION_INFO_ANDROID: "To enable Spotify Status on Android, be sure to enable **Device Broadcast Status** within the Spotify app's settings. This will not update your status while the Discord app is in the background.", SPOTIFY_LISTEN_ALONG_TITLE_HOST: "{count, number} {count, plural, =1 {Listener} other {Listeners}}", SPOTIFY_LISTEN_ALONG_TITLE_LISTENER: "Listening Along", SPOTIFY_LISTEN_ALONG_SUBTITLE_LISTENER: "on Spotify", SPOTIFY_LISTEN_ALONG_STOP: "Stop", SPOTIFY_LISTEN_ALONG_HOST: "Host", SPOTIFY_LISTEN_ALONG_LISTENER: "Listener", SPOTIFY_LISTEN_ALONG_LISTENERS: "Listeners", SPOTIFY_LISTEN_ALONG_LISTENING_ALONG_COUNT: "{count, number} Listening Along", SPOTIFY_LISTEN_ALONG_INFO: "What's this?", XBOX_AUTHORIZATION_TITLE: "Xbox Account Authorization", LINK_YOUR_XBOX_ACCOUNT_1: "Link your Xbox account to Discord to show what game you're playing.", LINK_YOUR_XBOX_ACCOUNT_2: "Discord is a voice, text, and video chat app that's free, secure, and works on both desktop and mobile.", XBOX_PIN_STEP1: "Open the Discord app on your phone", XBOX_PIN_STEP2: "Go to Settings > Connections > Add", XBOX_PIN_STEP3: "Click on Xbox and enter the PIN above", XBOX_LINK: "Link", JOIN_ON_XBOX: "Join on Xbox", TRANSFER_TO_XBOX: "Transfer to Xbox", GET_XBOX_APP: "Get the Xbox App", GET_XBOX_APP_BODY: "Download the Xbox app to connect to Discord on your Xbox.", GET_THE_APP: "Get the app", GET_XBOX_APP_CANCEL: "Nevermind", XBOX_REMOTE_CONNECTING: "Connecting on **Xbox**", XBOX_REMOTE_CONNECTING_RAW: "Connecting on Xbox", XBOX_REMOTE_CONNECTING_ELLIPSIS: "Connecting on **Xbox...**", XBOX_REMOTE_CONNECTED: "Connected on **Xbox**", XBOX_REMOTE_CONNECTED_RAW: "Connected on Xbox", XBOX_REMOTE_CONNECTING_SUBTITLE: "Hold on while we connect to your console.", CONNECT_XBOX_LANDING_TITLE: "Discord is now on Xbox!", RECONNECT_XBOX_LANDING_TITLE: "Relink Xbox to get new features!", CONNECT_XBOX_LANDING_BODY: "It's what you've been waiting for! Two things: first sign in with your Xbox account and then authorize here on Discord.", CONNECT_CONSOLE_LANDING_BODY_LEARN_MORE: "[Learn more at the Discord Help Center.]({helpCenterLink})", CONNECT_XBOX_LANDING_ONE_WAY_WARNING: "Although you’ve previously connected your Xbox account, please reconnect to enable new features.", XBOX_DETAILS_TITLE: "First let's sign in with Xbox", XBOX_DETAILS_TITLE_WAITING: "Waiting for connection...", XBOX_DETAILS_BODY: "We'll use this to display your Xbox gamertag and what games you’re playing.", CONSOLE_REDIRECT_NOTICE: "You will be redirected to: {redirectUrl}", XBOX_DETAILS_BODY_WAITING: "Sign in to Xbox in your browser and return here when you're done.", BIDIRECTIONAL_STEP_HEADER: "Step {number} of {total}", CONNECT_XBOX_SUCCESS_TITLE: "You're all set up!", CONNECT_XBOX_SUCCESS_BODY: "Head over to a voice channel to try it out.", CONNECT_XBOX_SUCCESS_APP_TITLE: "Get the Xbox Mobile App", CONNECT_XBOX_SUCCESS_APP_BODY: "In order to enable voice chat on console, please have the Xbox Mobile app installed.", CONNECT_XBOX_SUCCESS_APP_BUTTON_IOS: "View on App Store", CONNECT_XBOX_SUCCESS_APP_BUTTON_ANDROID: "View on Google Play Store", CONNECT_XBOX_ERROR_TITLE: "Oops, something went wrong...", CONNECT_XBOX_ERROR_BODY: "We were unable to link your Xbox account. Please try again or contact support if the issue persists.", CONNECT_XBOX_EDUCATION_TITLE: "You’re all set up!", CONNECT_XBOX_TRANSFER_VOICE_VALUE_PROP: "Transfer voice chat to Series X|S or Xbox One", CONNECT_XBOX_DISPLAY_GAME_VALUE_PROP: "Display the Xbox game you're playing on Discord", CONNECT_XBOX_ONE_MORE_THING: "One more thing...", CONNECT_XBOX_ENSURE_APP_INSTALLED: "Please make sure that you have the Xbox mobile app installed. You’ll need this for voice chat on console.", CONNECT_XBOX_APP_INSTALLED: "Xbox Mobile App Installed", AUTHORIZE_AND_CONTINUE: "Authorize and Continue", TRANSFER_VOICE_TO_DEVICE: "Transfer Voice to This Device", TRANSFER_VOICE_TO_XBOX: "Transfer Voice to Xbox", CONSOLE_NUX_MOBILE: "Try voice chat on console!", CONSOLE_NUX_MOBILE_SUBTITLE: "Tap on the output switcher to switch to console.", CONSOLE_STREAM_DISABLED: "Unavailable on console", AUTHORIZED_APP_IS_CONNECTED_ACCOUNT: "!!{applicationName}!! is also a connected account. Visit [Connections](onConnectionPress) for more information.", CONSOLE_NUX_TOOLTIP_HEADER: "Try voice chat on console!", CONSOLE_NUX_TOOLTIP_BODY_XBOX: "Now you're ready to join a call on your Xbox. Grab your headset and controller!", CONSOLE_NUX_TOOLTIP_BODY_PS5: "Now you're ready to join a call on your PS5. Grab your headset and controller!", CONSOLE_NUX_TOOLTIP_DISMISS: "Dismiss", CONSOLE_NUX_TOOLTIP_ACCEPT: "Check it out", PS_LINK_UPSELL_HEADER_RECONNECT: "Send Discord audio to your PS5!", PS_LINK_UPSELL_HEADER: "Connect PlayStation Network", PS_LINK_UPSELL_CONTENT_RECONNECT: "Now you can chat in Discord Voice Channels and Voice Calls while gaming on your PS5!", PS_LINK_UPSELL_CONTENT: "Hang out with Discord friends while playing games in voice chat.", CONSOLE_CONNECTING_DISABLED: "Disabled while connecting to console", XBOX_APP_REQUIRED_SUBHEADER: "Grab your headset and controller! The Xbox mobile app is required for audio on console.", XBOX_APP_FOR_MOBILE: "Xbox app for mobile", XBOX_APP_STEP_ONE: "Have the mobile Xbox app installed", XBOX_APP_STEP_TWO: "Scan the QR code to join!", CONSOLE_TRANSFER: "Transfer to Console", FEATURE_DISABLED_WHILE_IN_BETA: "During the beta, status sync is enabled.", CONNECTED_ACCOUNT_IS_AUTHORIZED_APP_DISCONNECT_WARNING: "!!{platformName}!! is also an Authorized Application. Disconnecting will also remove it from Authorized Apps.", AUTHORIZED_APP_IS_CONNECTED_ACCOUNT_DISCONNECT_WARNING: "!!{applicationName}!! is also a Connected Account. Disconnecting will also remove it from Connected Accounts.", XBOX_TWO_WAY_UPSELL_TITLE: "Send Discord audio to your Xbox!", XBOX_TWO_WAY_UPSELL_BODY: "Now you can chat in Discord Voice Channels and Voice Calls on your Xbox! You'll need to reconnect to Xbox in order to enable this feature. [Learn more]({help_article})", CANCEL_TRANSFER_VOICE_FAILED_TITLE: "Unable to disconnect", CANCEL_TRANSFER_VOICE_FAILED_BODY: "There was an error canceling the transfer. Please leave the voice channel on your console.", ACTIVATE_DEVICE_TITLE: "Connect Your Device", ACTIVATE_DEVICE_BODY: "Enter the code displayed on your TV to link your device with your Discord account.", ACTIVATE_DEVICE_ERROR_BAD_CODE: "Incorrect Code", ACTIVATE_DEVICE_ERROR_RATE_LIMIT: "Slow down! You're submitting too fast.", ACTIVATE_DEVICE_ERROR_UNKNOWN: "Something went wrong, try again later.", ACTIVATE_DEVICE_LINK_ERROR_TITLE: "Unexpected error linking your account", ACTIVATE_DEVICE_INPUT_PLACEHOLDER: "{number} character code", ACTIVATE_DEVICE_ERROR_TITLE: "Oops, something went wrong…", ACTIVATE_DEVICE_ERROR_BODY: "We weren’t able to connect accounts. Please try again or contact support if the issue persists.", ACTIVATE_DEVICE_SUCCESS_TITLE: "You’re all set up!", ACTIVATE_DEVICE_SUCCESS_TWO_WAY_BODY: "Head over to a voice channel to try it out.", GAME_CONSOLE_TRANSFER_TIMEOUT_TITLE: "Voice Transfer Failed", GAME_CONSOLE_TRANSFER_TIMEOUT_BODY: "Transfer to console timed out, please check that your console is on and try again.", CONSOLE_VOICE_MOBILE_UPSELL: "Transfer voice chat to console!", CONSOLE_VOICE_MOBILE_UPSELL_HEADER: "XBOX DETECTED", CONSOLE_VOICE_MOBILE_UPSELL_HEADER_PLAYSTATION: "PLAYSTATION DETECTED", CONSOLE_VOICE_MOBILE_UPSELL_REDESIGN_PLAYSTATION: "Playing on PlayStation?", CONSOLE_VOICE_MOBILE_UPSELL_REDESIGN_XBOX: "Playing on Xbox?", CONSOlE_VOICE_MOBILE_UPSELL_REDESIGN_SUBTITLE_PLAYSTATION: "Transfer voice chat to your PlayStation!", CONSOlE_VOICE_MOBILE_UPSELL_REDESIGN_SUBTITLE_XBOX: "Transfer voice chat to your Xbox!", PTT_NOT_SUPPORTED_XBOX: "Push to Talk isn’t supported on Xbox", PTT_NOT_SUPPORTED_PLAYSTATION: "Push to Talk isn’t supported on PlayStation", PTT_NOT_SUPPORTED_ALERT_BODY: "Once you join this Voice Channel, your Input Mode will switch to Voice Activity.", CONSOLE_TRANSFER_VOICE: "Transfer Voice", CONSOLE_PLAYSTATION_TRANSFER_VOICE_MODAL_HEADER: "Transfer Voice To PlayStation", CONSOLE_PLAYSTATION_TRANSFER_VOICE_MODAL_SUBHEADING: "Check that your console is turned on, and grab your headset and controller! Transferring this call will route audio input and output through the selected console.", CONSOLE_PLAYSTATION_TRANSFER_VOICE: "Transfer to PlayStation", CONSOLE_PLAYSTATION_JOIN_VOICE: "Join on PlayStation", CONSOLE_SWITCH_DEVICE: "Switch", CONSOLE_CONNECTING: "Connecting...", CONNECT_PS_LANDING_TITLE: "Discord is now on PlayStation!", RECONNECT_PS_LANDING_TITLE: "Reconnect PlayStation to enable new features!", PS5: "PS5", PS_VALUE_PROP_VOICE: "Join voice chat on PS5", PS_VALUE_PROP_GAME: "Display the game you're playing", PS4: "PS4", CONNECT_PS_LANDING_BODY: "A match made in gamer heaven. Certain features are only available on PS5.", PS_PRECONNECT_TITLE: "First let's sign in", PS_PRECONNECT_BODY: "We'll use this to display your PlayStation Online ID and what games you're playing.", CONSOLE_PRECONNECT_TITLE_WAITING: "Waiting for connection...", PS_PRECONNECT_BODY_WAITING: "Sign in to PlayStation Network in your browser and return here when you're done", CONNECT_CONSOLE_ERROR_TITLE: "Oops, something went wrong...", CONNECT_PS_ERROR_BODY: "We were unable to link your account for PlayStation Network. Please try again or contact support if the issue persists.", PS_LINK_SUCCESS_TITLE: "That's it!", PS_LINK_SUCCESS_BODY: "Head over to a voice channel to try it out! Chat with Discord voice chat on your PS5. Show which games you're playing with rich presence, and more.", CONSOLE_DEVICE_NOT_RESPONDING: "Your !!{deviceType}!! isn’t responding", CONSOLE_DEVICE_NOT_RESPONDING_BODY: "Please make sure !!{deviceName}!! is turned on or in rest mode.", CONSOLE_DEVICE_REQUIRES_PASSCODE: "!!{deviceType}!! requires passcode", CONSOLE_DEVICE_REQUIRES_PASSCODE_BODY: "Please enter the passcode on !!{deviceName}!! to continue.", CONSOLE_DEVICE_IN_USE: "Someone’s already using this !!{deviceType}!!", CONSOLE_DEVICE_IN_USE_BODY: "Please logout on !!{deviceName}!! and try again.", CONSOLE_DEVICE_RECONNECT_ACCOUNT: "Re-link your !!{deviceType}!! account in connection settings to transfer voice to your !!{deviceType}!!", CONSOLE_DEVICE_COMMUNICATION_RESTRICTED: "Unable to transfer", CONSOLE_DEVICE_COMMUNICATION_RESTRICTED_BODY: "You’re restricted from using communication features on your !!{deviceType}!!.", CONSOLE_DEVICE_UNKNOWN_ERROR: "Something went wrong", CONSOLE_DEVICE_UNKNOWN_ERROR_BODY: "We weren’t able to connect to !!{deviceName}!!. Please try again later!", PLAYSTATION_DEVICES_NOT_FOUND: "We couldn’t find any PS5s…", PLAYSTATION_DEVICES_NOT_FOUND_BODY: "Unable to find a PS5 to connect to. Make sure your PS5 is registered to the account you have linked here.", PLAYSTATION_DEVICES_INFOBOX: "Not seeing your PS5? Make sure it’s associated with the account you have linked.", PLAYSTATION_REMOTE_CONNECTED: "Connected on **PS5**", PLAYSTATION_REMOTE_CONNECTED_RAW: "Connected on PS5", PS_TWO_WAY_UPSELL_TITLE: "Send Discord audio to your PlayStation 5!", PS_TWO_WAY_UPSELL_BODY: "Now you can chat in Discord Voice Channels and Voice Calls on your PlayStation 5! You'll need to reconnect to PlayStation Network in order to enable this feature. [Learn more]({help_article})", PLAYSTATION_TRANSFERRING: "Transferring to PS5", PLAYSTATION_TRANSFERRING_ELLIPSIS: "Transferring to PS5…", PLAYSTATION_TRANSFERRING_ELLIPSIS_BOLD: "Transferring to **PS5…**", CONSOLE_TRANSFERRING_SUBTITLE: "We’re working on it… [Cancel](onCancel)", XBOX_TRANSFERRING: "Transferring to Xbox", XBOX_TRANSFERRING_ELLIPSIS: "Transferring to Xbox…", XBOX_TRANSFERRING_ELLIPSIS_BOLD: "Transferring to **Xbox…**", PLAYSTATION_SELECT_DEVICE: "Select a PS5", PLAYSTATION_SELECT_DEVICE_RELOAD: "Reload", PLAYSTATION_JOIN_CALL: "Join Call on PlayStation", CONSOLE_ERROR_CODE_SUPPORT: "If the error persists, contact [customer support]({supportURL}) with error code: {errorCode}", CONSOLE_LAN_DETECT_CTA: "Want to join calls directly from your gaming console? Tap here to setup!", ENABLE_LOCAL_NETWORK_ACCESS: "Enable local network access", ENABLE_LOCAL_NETWORK_ACCESS_DESCRIPTION: "This will give Discord access to your local network to find consoles and suggest account connections like Xbox, Playstation, and more.", FIND_CONSOLES: "Find consoles", CONSOLE_LAN_SEARCHING: "Searching...", CONSOLE_LAN_SEARCHING_DESCRIPTION: "Looking for devices on your network.", CONSOLE_DETECT_NO_DEVICES_FOUND: "No devices found", CONSOLE_DETECT_NO_DEVICES_FOUND_DESCRIPTION: "Don’t see your console? Make sure this device is connected to WiFi and all your devices are using the same internet connection.", CONSOLE_DETECT_DEVICE_FOUND: "{count, plural, one {Device} other {Devices}} found!", CONSOLE_DETECT_DEVICE_FOUND_DESCRIPTION: "We found some devices on your network. {count, plural, one {Here is a connection suggestion to make the most of it!} other {Here are some connection suggestions to make the most of them!}}", CONNECT_XBOX: "Connect Xbox", CONNECT_PLAYSTATION: "Connect PlayStation", CONNECT_CRUNCHYROLL_LANDING_TITLE: "Crunchyroll is now on Discord!", CONNECT_CRUNCHYROLL_LANDING_BODY: "It’s anime time! Sign in to Crunchyroll to connect your accounts.", CRUNCHYROLL_DETAILS_TITLE: "First let's sign in with Crunchyroll", CRUNCHYROLL_DETAILS_TITLE_WAITING: "Waiting for connection...", CRUNCHYROLL_DETAILS_BODY: "We’ll use this to display what show you’re watching on Crunchyroll", CRUNCHYROLL_DETAILS_BODY_WAITING: "Sign in to Crunchyroll in your browser and return here when you're done.", CONNECT_CRUNCHYROLL_SUCCESS_TITLE: "You're ready to go!", CONNECT_CRUNCHYROLL_SUCCESS_BODY: "Start watching your favorite anime on Crunchyroll to try it out.", CONNECT_CRUNCHYROLL_ERROR_TITLE: "Oops, something went wrong...", CONNECT_CRUNCHYROLL_ERROR_BODY: "We were unable to link your Crunchyroll account. Please try again or contact support if the issue persists.", CONNECT_CRUNCHYROLL_DISPLAY_SHOW_VALUE_PROP: "Display the Crunchyroll show you’re watching on Discord.", CONNECTION_LOGIN_WITH: "or login with", _CONNECTION_LOGIN_WITH: "or log in with", CONNECTION_LOGIN_MICROSOFT: "Microsoft", CONNECTION_ENTER_CODE: "Enter the code as it appears on your screen", CONNECTION_INVALID_PIN: "Invalid pin code entered", DISCORD_RICH_PRESENCE: "Discord Rich Presence", LINK_YOUR_DISCORD_ACCOUNT: "Link your Discord Account", LOADING_YOUR_PIN: "Loading your pin", YOUR_PIN_EXPIRES: "Your pin expires {time}", YOUR_PIN_IS_EXPIRED: "Your pin has expired", STEP_NUMBER: "Step {number}", BROWSER_HANDOFF_DETECTING_TITLE: "Detecting Account", BROWSER_HANDOFF_AUTHENTICATING_TITLE: "Authenticating", BROWSER_HANDOFF_AUTHENTICATING_DESCRIPTION: "Attempting to authenticate the Discord desktop client. Do not close this window.", BROWSER_HANDOFF_DONE_TITLE: "Done", BROWSER_HANDOFF_DONE_SAFE_TO_CLOSE: "This window is safe to close now.", BROWSER_HANDOFF_FAILED_TITLE: "Authentication Failed", BROWSER_HANDOFF_SUCCESS_TITLE: "Hey !!{name}!!!", BROWSER_HANDOFF_SUCCESS_BODY: "Do you want to login with this account?", _BROWSER_HANDOFF_SUCCESS_BODY: "Do you want to log in with this account?", BROWSER_HANDOFF_SUCCESS_ACTION: "Continue as !!{name}!!", BROWSER_HANDOFF_SUCCESS_CANCEL: "Switch to another account?", GAME_ACTION_BUTTON_PLAY: "Play", GAME_ACTION_BUTTON_INSTALL: "Install", GAME_ACTION_BUTTON_UPDATE: "Update", GAME_ACTION_BUTTON_PAUSED: "Paused", GAME_ACTION_BUTTON_LOCATE: "Locate", GAME_ACTION_BUTTON_QUEUED: "Queued", GAME_ACTION_BUTTON_DOWNLOADING: "Downloading", GAME_ACTION_BUTTON_VIEW_IN_STORE: "View in Store", GAME_ACTION_BUTTON_ADD_TO_LIBRARY: "Add to library", GAME_ACTION_BUTTON_UNAVAILABLE: "Unavailable", GAME_ACTION_BUTTON_GAME_NOT_DETECTED: "Game not detected", GAME_ACTION_BUTTON_PLAY_DISABLED_DESKTOP_APP: "Launch via Desktop App", GAME_ACTION_BUTTON_CANNOT_INSTALL: "Not installable", GAME_ACTION_BUTTON_LOGIN_TO_BUY: "Log In to Buy", GAME_ACTION_BUTTON_NOW_PLAYING: "Now Playing", GAME_ACTION_BUTTON_UNAVAILABLE_TOOLTIP: "Available on {operatingSystem}", GAME_ACTION_BUTTON_RESTRICTED_IN_REGION: "Unavailable in Your Country", GAME_ACTION_BUTTON_PREORDER_WAIT: "Coming Soon", GAME_ACTION_BUTTON_PREORDER_WAIT_TOOLTIP: "Available !!{date}!!", GAME_ACTION_BUTTON_UNINSTALLING_1: "Uninstalling", GAME_ACTION_BUTTON_UNINSTALLING_2: "Obliterating", GAME_ACTION_BUTTON_UNINSTALLING_3: "Vaporizing", GAME_ACTION_BUTTON_UNINSTALLING_4: "Destroying", GAME_ACTION_BUTTON_UNINSTALLING_5: "Terminating", GAME_ACTION_BUTTON_UNINSTALLING_6: "Annihilating", GAME_ACTION_BUTTON_UNINSTALLING_7: "Dismantling", GAME_ACTION_BUTTON_UNINSTALLING_8: "Deleting", GAME_ACTION_BUTTON_UNINSTALLING_9: "Razing", GAME_ACTION_BUTTON_UNINSTALLING_10: "Expunging", GAME_FEED_CURRENT_HEADER_TITLE: "Active Now", GAME_FEED_ACTIVITY_ACTION_PLAY: "Play", GAME_FEED_ACTIVITY_PLAYING_XBOX: "Playing on Xbox", GAME_FEED_ACTIVITY_STREAMING_TWITCH: "Streaming on Twitch", GAME_FEED_USER_PLAYING_JUST_STARTED: "Just started playing", GAME_FEED_USER_PLAYING_FOR_MINUTES: "Playing for {time, number} {time, plural, =1 {minute} other {minutes}}", GAME_FEED_USER_PLAYING_FOR_HOURS: "Playing for {time, number} {time, plural, =1 {hour} other {hours}}", GAME_FEED_USER_PLAYING_FOR_DAYS: "Playing for {time, number} {time, plural, =1 {day} other {days}}", GAME_FEED_USER_PLAYING_JUST_ENDED: "Just stopped playing", GAME_FEED_USER_PLAYED_MINUTES_AGO: "Played {time, number} {time, plural, =1 {minute} other {minutes}} ago", GAME_FEED_USER_PLAYED_HOURS_AGO: "Played {time, number} {time, plural, =1 {hour} other {hours}} ago", GAME_FEED_USER_PLAYED_DAYS_AGO: "Played {time, number} {time, plural, =1 {day} other {days}} ago", GAME_FEED_USER_PLAYED_WEEKS_AGO: "Played {time, number} {time, plural, =1 {week} other {weeks}} ago", GAME_FEED_USER_PLAYED_MONTHS_AGO: "Played {time, number} {time, plural, =1 {month} other {months}} ago", GAME_FEED_USER_PLAYED_YEARS_AGO: "Played {time, number} {time, plural, =1 {year} other {years}} ago", GAME_FEED_UNKNOWN_PLAYERS: "{count, plural, one {# Unknown Player} other {# Unknown Players}}", GAME_POPOUT_VIEW_SERVER: "View Server", GAME_POPOUT_FOLLOW: "Follow", GAME_POPOUT_NITRO_UPSELL: "Use anywhere with Nitro", APPLICATION_LIBRARY_MY_GAMES: "My Games", APPLICATION_LIBRARY_INVENTORY: "Gift Inventory", APPLICATION_LIBRARY_FILTER_PLACEHOLDER: "Filter", APPLICATION_LIBRARY_EMPTY_SEARCH_DESCRIPTION: "After looking far and wide, we couldn't find any games matching **!!{query}!!**...", APPLICATION_LIBRARY_EMPTY_STATE_HEADER: "No games found", APPLICATION_LIBRARY_EMPTY_STATE_DESCRIPTION_NO_IMPORT: "Hm, seems you don't have any games. Purchase games and they'll show up here!", APPLICATION_LIBRARY_REMOVE_CONFIRM_HEADER: "Hide from library", APPLICATION_LIBRARY_REMOVE_CONFIRM_BODY: "!!{name}!! will be hidden from your library. You can show it again from the Game Library settings page.", APPLICATION_LIBRARY_REMOVE_CONFIRM_CONFIRM: "I'm Sure", APPLICATION_PROGRESS_INDICATOR_PAUSED: "Paused", APPLICATION_PROGRESS_INDICATOR_INSTALLING: "Downloading !!{name}!!", APPLICATION_PROGRESS_INDICATOR_INSTALLING_SECONDS: "Downloading !!{name}!! - {timeRemaining, plural, =1 {wrapping up} other {# seconds remaining}}", APPLICATION_PROGRESS_INDICATOR_INSTALLING_MINUTES: "Downloading !!{name}!! - {timeRemaining, plural, =1 {# minute} other {# minutes}} remaining", APPLICATION_PROGRESS_INDICATOR_INSTALLING_HOURS: "Downloading !!{name}!! - {timeRemaining, plural, =1 {# hour} other {# hours}} remaining", APPLICATION_PROGRESS_INDICATOR_UPDATING: "Updating !!{name}!!", APPLICATION_PROGRESS_INDICATOR_UPDATING_SECONDS: "Updating !!{name}!! - {timeRemaining, plural, =1 {wrapping up} other {# seconds remaining}}", APPLICATION_PROGRESS_INDICATOR_UPDATING_MINUTES: "Updating !!{name}!! - {timeRemaining, plural, =1 {# minute} other {# minutes}} remaining", APPLICATION_PROGRESS_INDICATOR_UPDATING_HOURS: "Updating !!{name}!! - {timeRemaining, plural, =1 {# hour} other {# hours}} remaining", APPLICATION_CONTEXT_MENU_LAUNCH: "Play Game", APPLICATION_CONTEXT_MENU_LAUNCH_OPTIONS: "Show Launch Options", APPLICATION_CONTEXT_MENU_LAUNCH_APPLICATION_NAME: "Play !!{name}!!", APPLICATION_CONTEXT_MENU_SHOW: "Show Game in Library", APPLICATION_CONTEXT_MENU_HIDE: "Hide Game from Library", APPLICATION_CONTEXT_MENU_PRIVATE_STATUS: "Hide Playing Status", APPLICATION_CONTEXT_MENU_TOGGLE_OVERLAY_DISABLE: "Disable Overlay", APPLICATION_CONTEXT_MENU_INSTALL: "Install", APPLICATION_CONTEXT_MENU_REPAIR: "Repair", APPLICATION_CONTEXT_MENU_UNINSTALL: "Uninstall", APPLICATION_CONTEXT_MENU_CREATE_DESKTOP_SHORTCUT: "Create Desktop Shortcut", APPLICATION_UNINSTALL_PROMPT_TITLE: "Uninstall {gameName}?", APPLICATION_UNINSTALL_PROMPT_BODY: "Say goodbye to all of {gameName}'s data on your computer. Press the red button and it will be no more.", APPLICATION_UNINSTALL_PROMPT_CANCEL: "Nevermind", APPLICATION_UNINSTALL_PROMPT_CONFIRM: "Uninstall", PLAY_FULL_VIDEO: "Play Full Video", FILE_SIZE_KB: "{size, number} KB", FILE_SIZE_KB_NO_SPACE: "{size, number}KB", FILE_SIZE_MB: "{size, number} MB", FILE_SIZE_MB_NO_SPACE: "{size, number}MB", FILE_SIZE_GB: "{size, number} GB", FILE_SIZE_GB_NO_SPACE: "{size, number}GB", FILE_RATE_KB: "{size, number} KB/S", FILE_RATE_MB: "{size, number} MB/S", BITRATE_KBPS: "{bitrate, number} kbps", BITRATE_KBPS_NO_SPACE: "{bitrate, number}kbps", GAME_LIBRARY_UPDATES_INSTALLING: "Downloading — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_INSTALLING_SECONDS: "Downloading — {progress} of {total} (!!{percent, number}!!%) — {timeRemaining, plural, =1 {wrapping up} other {# seconds remaining}}", GAME_LIBRARY_UPDATES_INSTALLING_MINUTES: "Downloading — {progress} of {total} (!!{percent, number}!!%) — {timeRemaining, plural, =1 {1 minute} other {# minutes}} remaining", GAME_LIBRARY_UPDATES_INSTALLING_HOURS: "Downloading — {progress} of {total} (!!{percent, number}!!%) — {timeRemaining, plural, =1 {1 hour} other {# hours}} remaining", GAME_LIBRARY_UPDATES_UPDATING: "Patching — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_UPDATING_UPDATING_SECONDS: "Patching — {progress} of {total} (!!{percent, number}!!%) — {timeRemaining, plural, =1 {wrapping up} other {# seconds remaining}}", GAME_LIBRARY_UPDATES_UPDATING_UPDATING_MINUTES: "Patching — {progress} of {total} (!!{percent, number}!!%) — {timeRemaining, plural, =1 {1 minute} other {# minutes}} remaining", GAME_LIBRARY_UPDATES_UPDATING_UPDATING_HOURS: "Patching — {progress} of {total} (!!{percent, number}!!%) — {timeRemaining, plural, =1 {1 hour} other {# hours}} remaining", GAME_LIBRARY_UPDATES_PROGRESS_PLANNING: "Planning — !!{percent, number}!!%", GAME_LIBRARY_UPDATES_PROGRESS_WAITING_FOR_ANOTHER: "Waiting for another download to pause — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_PROGRESS_WAITING_FOR_ANOTHER_NO_TRANSITION: "Waiting for another download to pause", GAME_LIBRARY_UPDATES_PROGRESS_ALLOCATING_DISK: "Allocating Disk Space — (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_PROGRESS_FINALIZING: "Finalizing — !!{percent, number}!!%", GAME_LIBRARY_UPDATES_PROGRESS_PAUSING: "Pausing — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_PROGRESS_VERIFYING: "Verifying Install — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_PROGRESS_POST_INSTALL_SCRIPTS: "Running Scripts — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_PROGRESS_PAUSED: "Paused — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_PROGRESS_PAUSED_NO_TRANSITION: "Paused", GAME_LIBRARY_UPDATES_PROGRESS_QUEUED: "Queued — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_PROGRESS_QUEUED_NO_TRANSITION: "Queued", GAME_LIBRARY_UPDATES_PROGRESS_FINISHED: "Finished — [Clear](remove)", GAME_LIBRARY_UPDATES_PROGRESS_REPAIRING: "Repairing — {progress} of {total} (!!{percent, number}!!%)", GAME_LIBRARY_UPDATES_ACTION_PAUSE: "Pause", GAME_LIBRARY_UPDATES_ACTION_RESUME: "Resume", GAME_LIBRARY_UPDATES_ACTION_REMOVE: "Remove", GAME_LIBRARY_UPDATES_ACTION_MOVE_UP: "Move Up", GAME_LIBRARY_NOT_APPLICABLE: "N/A", GAME_LIBRARY_LIST_HEADER_NAME: "Name", GAME_LIBRARY_LIST_HEADER_PLATFORM: "Platform", GAME_LIBRARY_LIST_HEADER_LAST_PLAYED: "Last Played", GAME_LIBRARY_UPDATES_HEADER_DISK: "Disk", GAME_LIBRARY_UPDATES_HEADER_NETWORK: "Network", GAME_LIBRARY_NEW: "new!", GAME_LIBRARY_PRIVATE_TOOLTIP: "Playing Status Hidden", GAME_LIBRARY_OVERLAY_DISABLED_TOOLTIP: "Overlay Disabled", GAME_LIBRARY_TIME_PLAYED_NONE: "never played", GAME_LIBRARY_TIME_PLAYED_SECONDS: "!!{time}!! {time, plural, =1 {second} other {seconds}}", GAME_LIBRARY_TIME_PLAYED_MINUTES: "!!{time}!! {time, plural, =1 {minute} other {minutes}}", GAME_LIBRARY_TIME_PLAYED_HOURS: "!!{time}!! {time, plural, =1 {hour} other {hours}}", GAME_LIBRARY_LAST_PLAYED_NONE: "never played", GAME_LIBRARY_LAST_PLAYED_PLAYING_NOW: "now playing", GAME_LIBRARY_LAST_PLAYED_JUST_NOW: "just now", GAME_LIBRARY_LAST_PLAYED_MINUTES: "{time, plural, =1 {# minute} other {# minutes}} ago", GAME_LIBRARY_LAST_PLAYED_HOURS: "{time, plural, =1 {# hour} other {# hours}} ago", GAME_LIBRARY_LAST_PLAYED_DAYS: "{time, plural, =1 {yesterday} other {# days ago}}", GAME_LIBRARY_LAST_PLAYED_WEEKS: "{time, plural, =1 {last week} other {# weeks ago}}", GAME_LIBRARY_LAST_PLAYED_MONTHS: "{time, plural, =1 {last month} other {# months ago}}", GAME_LIBRARY_LAST_PLAYED_YEARS: "{time, plural, =1 {last year} other {# years ago}}", GAME_LIBRARY_NOTIFICATION_GAME_INSTALLED_TITLE: "Ready to Play", GAME_LIBRARY_NOTIFICATION_GAME_INSTALLED_BODY: "!!{name}!! finished installing. Have fun!", GAME_LAUNCH_FAILED_LAUNCH_TARGET_NOT_FOUND: "Failed to launch game. Game executable was not found.", APPLICATION_CONTEXT_MENU_APPLICATION_ID: "Application ID", APPLICATION_CONTEXT_MENU_BRANCH_ID: "Branch ID", APPLICATION_CONTEXT_MENU_SKU_ID: "SKU ID", APPLICATION_INSTALLATION_MODAL_TITLE: "Install game", APPLICATION_INSTALLATION_MODAL_LOCATION: "Install location", APPLICATION_INSTALLATION_MODAL_SELECT_DIRECTORY: "Select a directory", APPLICATION_INSTALLATION_MODAL_NO_PERMISSION: "Unfortunately, we can't install this here. Choose another spot.", APPLICATION_INSTALLATION_MODAL_NOT_ENOUGH_SPACE: "Not enough disk space", APPLICATION_INSTALLATION_MODAL_DIRECTORY_WITH_SPACE: "!!{path}!! ({size} available)", APPLICATION_INSTALLATION_SPACE_USED: "{used} of disk space used", APPLICATION_STORE_LINK_COPIED: "Link Copied!", APPLICATION_STORE_BUY: "Buy", APPLICATION_STORE_BUY_GIFT: "Buy Gift", APPLICATION_STORE_BUY_AS_GIFT: "Buy as Gift", APPLICATION_STORE_BUY_FOR_PRICE: "Buy for !!{price}!!", APPLICATION_STORE_PREORDER: "Preorder", APPLICATION_STORE_PREORDER_AS_GIFT: "Preorder as Gift", APPLICATION_STORE_PREORDER_FOR_PRICE: "Preorder for !!{price}!!", APPLICATION_STORE_COMING_SOON: "Coming Soon", APPLICATION_STORE_RESTRICTED: "Unavailable in your region", APPLICATION_STORE_FREE_WITH_PREMIUM: "Free with Nitro", APPLICATION_STORE_FREE: "Free", APPLICATION_STORE_IN_LIBRARY: "In library", APPLICATION_STORE_GET_PREMIUM: "Subscribe", APPLICATION_STORE_FIRST_ON_DISCORD: "First On Discord", APPLICATION_STORE_ABOUT_HEADER: "About !!{name}!!", APPLICATION_STORE_THE_GAME_AWARDS_WINNER: "The Game Awards 2018 Winner", APPLICATION_STORE_LISTING_PURCHASE_GENERIC_ERROR: "Something went wrong. Please try again later or contact support.", APPLICATION_STORE_LISTING_PURCHASE_GENERIC_ERROR_SHORT: "Something went wrong.", APPLICATION_STORE_LISTING_PURCHASE_RATE_LIMIT_ERROR: "Woah there! You're adding games too fast. Give us some time to catch up and then try again.", APPLICATION_STORE_LISTING_PURCHASE_RATE_LIMIT_ERROR_SHORT: "Too fast! Wait a bit and try again.", APPLICATION_STORE_LISTING_SELECT_EDITION: "Select Edition", APPLICATION_STORE_PURCHASE_HEADER_DISTRIBUTION_APPLICATION: "Buy Game", APPLICATION_STORE_PURCHASE_HEADER_DISTRIBUTION_DLC: "Buy DLC", APPLICATION_STORE_PURCHASE_HEADER_DISTRIBUTION_CONSUMABLE: "Buy In-App Item", APPLICATION_STORE_PURCHASE_HEADER_DISTRIBUTION_BUNDLE: "Buy Bundle", APPLICATION_STORE_PURCHASE_HEADER_FREE_APPLICATION: "Get Game", APPLICATION_STORE_PURCHASE_HEADER_FREE_DLC: "Get DLC", APPLICATION_STORE_PURCHASE_HEADER_FREE_CONSUMABLE: "Get In-App Item", APPLICATION_STORE_PURCHASE_HEADER_FREE_BUNDLE: "Get Bundle", APPLICATION_STORE_PURCHASE_HEADER_PREORDER_APPLICATION: "Preorder Game", APPLICATION_STORE_PURCHASE_HEADER_PREORDER_DLC: "Preorder DLC", APPLICATION_STORE_PURCHASE_HEADER_PREORDER_CONSUMABLE: "Preorder In-App Item", APPLICATION_STORE_PURCHASE_HEADER_PREORDER_BUNDLE: "Preorder Bundle", APPLICATION_STORE_PURCHASE_HEADER_PREORDER_ENTITLED: "Coming Soon", APPLICATION_STORE_PURCHASE_HEADER_TIME_LEFT_UNTIL_RELEASE: "Time Left Until Release", APPLICATION_STORE_PURCHASE_AVAILABLE_DATE: "Available !!{releaseDate}!!", APPLICATION_STORE_PURCHASE_IN_LIBRARY: "In library", APPLICATION_STORE_PURCHASE_IN_LIBRARY_HIDDEN: "In library (hidden)", APPLICATION_STORE_PURCHASE_HEADER_GAMES_DIFFERENT: "Games", APPLICATION_STORE_PURCHASE_HEADER_GAMES_SAME: "More Games", APPLICATION_STORE_PURCHASE_HEADER_DLC_DIFFERENT: "Downloadable Content", APPLICATION_STORE_PURCHASE_HEADER_DLC_SAME: "More Downloadable Content", APPLICATION_STORE_PURCHASE_HEADER_CONSUMABLES_DIFFERENT: "In-App Item", APPLICATION_STORE_PURCHASE_HEADER_CONSUMABLES_SAME: "More In-App Items", APPLICATION_STORE_PURCHASE_HEADER_BUNDLES_DIFFERENT: "Bundles", APPLICATION_STORE_PURCHASE_HEADER_BUNDLES_SAME: "More Bundles", APPLICATION_STORE_PURCHASE_HEADER_FIRST_ON: "First On", APPLICATION_STORE_WARNING_RESTRICTED_IN_REGION_TITLE: "Restricted in Country", APPLICATION_STORE_WARNING_RESTRICTED_IN_REGION_DESCRIPTION: "This game is not available in your country. [Learn about country restrictions.]({helpArticle})", APPLICATION_STORE_WARNING_REQUIRES_DESKTOP_APP_TITLE: "Requires Desktop App", APPLICATION_STORE_WARNING_REQUIRES_DESKTOP_APP_DESCRIPTION: "In order to play this game, you must have the Discord $[desktop app](downloadHook) installed.", APPLICATION_STORE_WARNING_UNAVAILABLE_WINDOWS_TITLE: "Unavailable for Windows", APPLICATION_STORE_WARNING_UNAVAILABLE_MAC_OS_TITLE: "Unavailable for macOS", APPLICATION_STORE_WARNING_UNAVAILABLE_LINUX_TITLE: "Unavailable for Linux", APPLICATION_STORE_WARNING_UNAVAILABLE_LINUX_DESCRIPTION: "Discord does not yet support Linux for games. You can still purchase it and play on supported operating systems.", APPLICATION_STORE_WARNING_UNAVAILABLE_OS_DESCRIPTION: "This game is not available for your current operating system. You can still purchase it and play on supported operating systems.", APPLICATION_STORE_WARNING_DLC_REQUIRES_BASE_APPLICATION_TITLE: "Downloadable Content", APPLICATION_STORE_WARNING_DLC_REQUIRES_BASE_APPLICATION_DESCRIPTION: "This DLC requires you to own $[!!{baseName}!!](baseHook) on Discord in order to play. [Learn about DLC.]({helpArticle})", APPLICATION_STORE_WARNING_EARLY_ACCESS_TITLE: "Early Access", APPLICATION_STORE_WARNING_EARLY_ACCESS_DESCRIPTION: "Provide feedback and help the devs build a game you want to play! Still in development. [Learn more about early access.]({helpArticle})", APPLICATION_STORE_WARNING_UNAVAILABLE_IN_LANGUAGE_TITLE: "Your Language is not Supported", APPLICATION_STORE_WARNING_UNAVAILABLE_IN_LANGUAGE_DESCRIPTION: "This game does not feature any audio, interface, or subtitle support for your currently selected language.", APPLICATION_STORE_SECTION_TITLE_VERIFIED_GUILD: "Verified Discord Server", APPLICATION_STORE_SECTION_TITLE_SYSTEM_REQUIREMENTS: "System Requirements", APPLICATION_STORE_SECTION_TITLE_DETAILS: "Details", APPLICATION_STORE_SECTION_TITLE_RECOMMENDATION: "Why you might like it", APPLICATION_STORE_SECTION_TITLE_FEATURES: "Features", APPLICATION_STORE_SECTION_TITLE_RATINGS: "Rating", APPLICATION_STORE_SECTION_TITLE_COPYRIGHT: "Copyright", APPLICATION_STORE_RECOMMENDATION_NOW_PLAYING_SINGLE: "$[!!{user1}!!](user1Hook) is playing right now", APPLICATION_STORE_RECOMMENDATION_NOW_PLAYING_DOUBLE: "$[!!{user1}!!](user1Hook) and $[!!{user2}!!](user2Hook) are playing right now", APPLICATION_STORE_RECOMMENDATION_NOW_PLAYING_OTHER: "**{count, plural, one {1 person} other {{count} people}} you know** are playing right now", APPLICATION_STORE_RECOMMENDATION_RECENTLY_PLAYED_SINGLE: "$[!!{user1}!!](user1Hook) has played recently", APPLICATION_STORE_RECOMMENDATION_RECENTLY_PLAYED_DOUBLE: "$[!!{user1}!!](user1Hook) and $[!!{user2}!!](user2Hook) have played recently", APPLICATION_STORE_RECOMMENDATION_RECENTLY_PLAYED_OTHER: "**{count, plural, one {1 person} other {{count} people}} you know** have played recently", APPLICATION_STORE_RECOMMENDATION_EVER_PLAYED_SINGLE: "$[!!{user1}!!](user1Hook) has played before", APPLICATION_STORE_RECOMMENDATION_EVER_PLAYED_DOUBLE: "$[!!{user1}!!](user1Hook) and $[!!{user2}!!](user2Hook) have played before", APPLICATION_STORE_RECOMMENDATION_EVER_PLAYED_OTHER: "**{count, plural, one {1 person} other {{count} people}} you know** have played before", APPLICATION_STORE_STAFF_PICK: "Discord Staff Pick", APPLICATION_STORE_EARLY_ACCESS: "Early Access", APPLICATION_STORE_DESCRIPTION_READ_MORE: "Read More", APPLICATION_STORE_DESCRIPTION_READ_LESS: "Read Less", APPLICATION_STORE_EXPAND_DOWNLOADABLE_CONTENT: "Show All DLC", APPLICATION_STORE_SINGLE_PLAYER: "Single Player", APPLICATION_STORE_LOCAL_MULTIPLAYER: "Local Multiplayer", APPLICATION_STORE_ONLINE_MULTIPLAYER: "Online Multiplayer", APPLICATION_STORE_PVP: "PvP", APPLICATION_STORE_LOCAL_COOP: "Local Cooperative", APPLICATION_STORE_ONLINE_COOP: "Online Cooperative", APPLICATION_STORE_CROSS_PLATFORM: "Cross Platform", APPLICATION_STORE_RICH_PRESENCE: "Rich Presence", APPLICATION_STORE_DISCORD_GAME_INVITES: "Discord Game Invites", APPLICATION_STORE_SPECTATOR_MODE: "Spectator Mode", APPLICATION_STORE_CONTROLLER_SUPPORT: "Controller Support", APPLICATION_STORE_CLOUD_SAVES: "Cloud Saves", APPLICATION_STORE_SECURE_NETWORKING: "Secure Networking", APPLICATION_STORE_SINGLE_PLAYER_TOOLTIP: "For when you're tired of other people!", APPLICATION_STORE_LOCAL_MULTIPLAYER_TOOLTIP: "Yes, we want you to sit next to people.", APPLICATION_STORE_ONLINE_MULTIPLAYER_TOOLTIP: "For when you need strangers in your life!", APPLICATION_STORE_PVP_TOOLTIP: "How's your anger management?", APPLICATION_STORE_LOCAL_COOP_TOOLTIP: "Because fist bumps are great.", APPLICATION_STORE_ONLINE_COOP_TOOLTIP: "For when you need to chill on that PVP grind.", APPLICATION_STORE_CROSS_PLATFORM_TOOLTIP: "The gates are open!", APPLICATION_STORE_RICH_PRESENCE_TOOLTIP: "Show detailed stats about your game experience on your profile.", APPLICATION_STORE_DISCORD_GAME_INVITES_TOOLTIP: "Send game invites directly through Discord.", APPLICATION_STORE_SPECTATOR_MODE_TOOLTIP: "For when your friends are eating dinner while you finish a match.", APPLICATION_STORE_CONTROLLER_SUPPORT_TOOLTIP: 'This should really say "play with a controller."', APPLICATION_STORE_CLOUD_SAVES_TOOLTIP: "We store your save data for you. Access it anywhere from Discord!", APPLICATION_STORE_SECURE_NETWORKING_TOOLTIP: "This game's networking is on our secure network, rather than a third party.", CLOUD_SYNC_MODAL_OR: "OR", CLOUD_SYNC_MODAL_CONFLICT_HEADER: "Cloud Save Conflict", CLOUD_SYNC_MODAL_CONFLICT_DESCRIPTION: "Local save files conflict with cloud save files for **{applicationName}**. Please choose which save you'd like to use before launching the game.", CLOUD_SYNC_MODAL_CONFLICT_LAST_MODIFIED: "Last modified:", CLOUD_SYNC_MODAL_CONFLICT_CHOICE_DOWNLOAD: "Download Cloud Saves", CLOUD_SYNC_MODAL_CONFLICT_CHOICE_UPLOAD: "Upload Local Saves", CLOUD_SYNC_ICON_TOOLTIP_SUPPORTED: "Supports Cloud Saves", CLOUD_SYNC_ICON_TOOLTIP_PLANNING: "Checking Cloud Saves", CLOUD_SYNC_ICON_TOOLTIP_PREPARING: "Preparing Cloud Saves", CLOUD_SYNC_ICON_TOOLTIP_PUSHING: "Uploading Cloud Saves", CLOUD_SYNC_ICON_TOOLTIP_PULLING: "Downloading Cloud Saves", CLOUD_SYNC_ICON_TOOLTIP_DONE: "Cloud Save Sync Completed", CLOUD_SYNC_MODAL_ERROR_HEADER: "Unable to sync cloud saves", CLOUD_SYNC_MODAL_ERROR_DESCRIPTION: "An issue is preventing Discord from syncing cloud saves for **{applicationName}.** Do you want to play anyway?", APPLICATION_STORE_SPECS_MINIMUM: "Minimum", APPLICATION_STORE_SPECS_RECOMMENDED: "Recommended", APPLICATION_STORE_SPECS_OS: "Operating System", APPLICATION_STORE_SPECS_CPU: "CPU", APPLICATION_STORE_SPECS_MEMORY: "Memory", APPLICATION_STORE_SPECS_MEMORY_VALUE: "{size} RAM", APPLICATION_STORE_SPECS_VIDEO: "Video", APPLICATION_STORE_SPECS_STORAGE: "Storage", APPLICATION_STORE_SPECS_SOUND: "Sound", APPLICATION_STORE_SPECS_NETWORK: "Network", APPLICATION_STORE_SPECS_NOTES: "Notes", APPLICATION_STORE_DETAILS_RELEASE_DATE: "Release Date", APPLICATION_STORE_DETAILS_GENRES: "Genres", APPLICATION_STORE_DETAILS_DEVELOPER: "Developer", APPLICATION_STORE_DETAILS_PUBLISHER: "Publisher", APPLICATION_STORE_NEW_RELEASE: "New release", APPLICATION_STORE_FREE_PREMIUM_CONTENT: "Free Nitro Content", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_ALCOHOL_REFERENCE: "Alcohol Reference", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_ANIMATED_BLOOD: "Animated Blood", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_BLOOD: "Blood", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_BLOOD_AND_GORE: "Blood and Gore", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_CARTOON_VIOLENCE: "Cartoon Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_COMIC_MISCHIEF: "Comic Mischief", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_CRUDE_HUMOR: "Crude Humor", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_DRUG_REFERENCE: "Drug Reference", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_FANTASY_VIOLENCE: "Fantasy Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_INTENSE_VIOLENCE: "Intense Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_LANGUAGE: "Language", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_LYRICS: "Lyrics", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MATURE_HUMOR: "Mature Humor", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_NUDITY: "Nudity", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_PARTUAL_NUDITY: "Partial Nudity", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_REAL_GAMBLING: "Real Gambling", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_SEXUAL_CONTENT: "Sexual Content", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_SEXUAL_THEMES: "Sexual Themes", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_SEXUAL_VIOLENCE: "Sexual Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_SIMULATED_GAMBLING: "Simulated Gambling", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_STRONG_LANGUAGE: "Strong Language", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_STRONG_LYRICS: "Strong Lyrics", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_STRONG_SEXUAL_CONTENT: "Strong Sexual Content", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_SUGGESTIVE_THEMES: "Suggestive Themes", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_TOBACCO_REFERENCE: "Tobacco Reference", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_USE_OF_ALCOHOL: "Use Of Alcohol", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_USE_OF_DRUGS: "Use Of Drugs", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_USE_OF_TOBACCO: "Use Of Tobacco", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_VIOLENCE: "Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_BLOOD: "Mild Blood", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_CARTOON_VIOLENCE: "Mild Cartoon Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_FANTASY_VIOLENCE: "Mild Fantasy Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_LANGUAGE: "Mild Language", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_LYRICS: "Mild Lyrics", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_SEXUAL_THEMES: "Mild Sexual Themes", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_SUGGESTIVE_THEMES: "Mild Suggestive Themes", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_MILD_VIOLENCE: "Mild Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_ANIMATED_VIOLENCE: "Animated Violence", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_VIOLENT_REFERENCES: "Violent References", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_IN_GAME_PURCHASES: "In-Game Purchases", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_USERS_INTERACT: "Users Interact", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_SHARES_LOCATION: "Shares Location", APPLICATION_STORE_RATING_DESCRIPTORS_ESRB_UNRESTRICTED_INTERNET: "Unrestricted Internet", APPLICATION_STORE_RATING_DESCRIPTORS_PEGI_VIOLENCE: "Violence", APPLICATION_STORE_RATING_DESCRIPTORS_PEGI_BAD_LANGUAGE: "Bad Language", APPLICATION_STORE_RATING_DESCRIPTORS_PEGI_FEAR: "Fear", APPLICATION_STORE_RATING_DESCRIPTORS_PEGI_GAMBLING: "Gambling", APPLICATION_STORE_RATING_DESCRIPTORS_PEGI_SEX: "Sex", APPLICATION_STORE_RATING_DESCRIPTORS_PEGI_DRUGS: "Drugs", APPLICATION_STORE_RATING_DESCRIPTORS_PEGI_DISCRIMINATION: "Discrimination", APPLICATION_STORE_PURCHASE_APPLICATION: "Buy Game", APPLICATION_STORE_PURCHASE_DLC: "Buy DLC", APPLICATION_STORE_PURCHASE_CONSUMABLE: "Buy In-App Item", APPLICATION_STORE_PURCHASE_BUNDLE: "Buy Bundle", APPLICATION_STORE_PURCHASE_IAP: "In-App Purchase", APPLICATION_STORE_PURCHASE_CONFIRMATION_TITLE_1: "Get excited!", APPLICATION_STORE_PURCHASE_CONFIRMATION_TITLE_2: "Complete!", APPLICATION_STORE_PURCHASE_CONFIRMATION_TITLE_3: "Finished!", APPLICATION_STORE_PURCHASE_CONFIRMATION_TITLE_4: "Congrats!", APPLICATION_STORE_PURCHASE_GIFT_CONFIRMATION_TITLE: "Gift ready for delivery", APPLICATION_STORE_PURCHASE_GIFT_AND_MESSAGE_CONFIRMATION_TITLE: "Your gift has been sent to", APPLICATION_STORE_PURCHASE_CONFIRMATION_BLURB: "You can install !!{name}!! below and launch it from the library tab once it finishes. We hope you enjoy it!", APPLICATION_STORE_BUNDLE_PURCHASE_CONFIRMATION_BLURB: "!!{name}!! was purchased and its contents are now available in your library.", APPLICATION_STORE_GIFT_PURCHASE_CONFIRMATION_BLURB: "Send this link to a friend to give them the game. We hope they enjoy it!", APPLICATION_STORE_GIFT_PURCHASE_CONFIRM_SUBSCRIPTION_MONTHLY: "You're so generous! Send this gift to a friend to give them {intervalCount, plural, =1 {# month} other {# months}} of {skuName}. We hope they enjoy!", APPLICATION_STORE_GIFT_PURCHASE_AND_MESSAGE_CONFIRM_SUBSCRIPTION_MONTHLY: "You're so generous! You've given {intervalCount, plural, =1 {# month} other {# months}} of {skuName}. We hope they enjoy!", APPLICATION_STORE_SEASONAL_GIFT_PURCHASE_AND_MESSAGE_CONFIRM_SUBSCRIPTION_MONTHLY: "You've gifted {intervalCount, plural, =1 {# month} other {# months}} of {skuName}. We know they'll enjoy your holiday surprise!", APPLICATION_STORE_GIFT_PURCHASE_FAILURE_GENERIC_BLURB: "We tried to deliver your gift but Wumpus got lost. Share the gift code link to try again!", APPLICATION_STORE_GIFT_PURCHASE_AND_MESSAGE_FAILED: "Uh-oh! Something went wrong!", APPLICATION_STORE_GIFT_PURCHASE_CONFIRM_SUBSCRIPTION_YEARLY: "You're so generous! Send this gift to a friend to give them {intervalCount, plural, =1 {# year} other {# years}} of {skuName}. We hope they enjoy!", APPLICATION_STORE_GIFT_PURCHASE_AND_MESSAGE_CONFIRM_SUBSCRIPTION_YEARLY: "You're so generous! You've given {intervalCount, plural, =1 {# year} other {# years}} of {skuName}. We hope they enjoy!", APPLICATION_STORE_SEASONAL_GIFT_PURCHASE_AND_MESSAGE_CONFIRM_SUBSCRIPTION_YEARLY: "You've gifted {intervalCount, plural, =1 {# year} other {# years}} of {skuName}. We know they'll enjoy your holiday surprise!", APPLICATION_STORE_GIFT_PURCHASE_CONFIRM_MONTHLY_MOBILE: "You're so generous! Send this gift to a friend to give them {intervalCount, plural, =1 {# month} other {# months}} of {name}.", APPLICATION_STORE_GIFT_PURCHASE_CONFIRM_YEARLY_MOBILE: "You're so generous! Send this gift to a friend to give them {intervalCount, plural, =1 {# year} other {# years}} of {name}.", APPLICATION_STORE_GIFT_PURCHASE_CONFIRMATION_SUBTEXT: "This link is included in your confirmation email and can be found and managed in your [gift inventory](onInventoryClick). Gift link expires after 48 hours.", APPLICATION_STORE_GIFT_PURCHASE_CONFIRMATION_SUBTEXT_WO_LINK: "This link is included in your confirmation email and can be found and managed in your gift inventory. Gift link expires after 48 hours.", APPLICATION_STORE_GIFT_PURCHASE_CONFIRMATION_SUBTEXT_NO_FORMAT: "Expires in 48 hours; you can renew expired links in User Settings > Gift Inventory. Be sure to only share a gift link with your intended recipient.", APPLICATION_STORE_GIFT_PURCHASE_GIFT_RECIPIENT_SECTION_LABEL: "Gift Recipient", APPLICATION_STORE_GIFT_PURCHASE_GIFT_RECIPIENT_SUBTEXT: "Gift will be delivered to recipient via direct message.", APPLICATION_STORE_GIFT_PURCHASE_PRIVATE_LINK: "Private Gift Link", APPLICATION_STORE_GIFT_PURCHASE_GIFT_RECIPIENT_SELECT_PLACEHOLDER: "Type your friend’s name", APPLICATION_STORE_GIFT_PURCHASE_GIFT_SEND_NOW_BUTTON: "Send Now", APPLICATION_STORE_GIFT_PURCHASE_GIFT_ERROR_SENDING_LINK: "Your message could not be delivered to this recipient.", APPLICATION_STORE_PURCHASE_INSTALL_GAME: "Install Game", APPLICATION_STORE_PURCHASE_GAME_CURRENT_OS_UNSUPPORTED: "Your platform is not supported by this game.", APPLICATION_STORE_PURCHASE_TEST_MODE: "You are in test mode for this application and will not be charged.", APPLICATION_STORE_PURCHASE_GIFT_ONLY: "You already own this application, only gifts can be purchased.", APPLICATION_STORE_PURCHASE_GIFT_ONLY_UNGIFTABLE: "You can only purchase a gift and unfortunately we do not support gifting for this payment method.", APPLICATION_STORE_PURCHASE_CONFIRMATION_UNSUPPORTED_OS: "!!{name}!! can be downloaded the next time you launch the {operatingSystem} Discord app. We hope you enjoy it!", APPLICATION_STORE_PURCHASE_WARNING_PREORDER: "You are preordering this game. It will be available !!{date}!!!", APPLICATION_STORE_PREORDER_PURCHASE_CONFIRMATION_BLURB: "!!{applicationName}!! will be ready to install on !!{date}!!. For now you can stare longingly at it in your library.", APPLICATION_IAP_PURCHASE_RETURN_TO_GAME: "Return to Game", APPLICATION_PREORDER_PURCHASE_CONFIRMATION_BUTTON: "Go to Library", APPLICATION_ADDON_PURCHASE_CONFIRMATION_BLURB: "!!{itemName}!! has been purchased and will be available in !!{applicationName}!!.", APPLICATION_ENTITLEMENT_CODE_REDEMPTION_PROMPT: "Received a code for Nitro or a game? That's exciting! Enter it below:", APPLICATION_ENTITLEMENT_CODE_REDEMPTION_REDEEM: "Redeem", APPLICATION_ENTITLEMENT_CODE_REDEMPTION_INVALID: "Invalid code entered", APPLICATION_ENTITLEMENT_CODE_REDEMPTION_PROMOTION: "This looks like a promotion code. [Click here](promoLink) to redeem.", APPLICATION_STORE_GENRE_ACTION: "Action", APPLICATION_STORE_GENRE_ACTION_RPG: "Action RPG", APPLICATION_STORE_GENRE_BRAWLER: "Beat 'Em Up/Brawler", APPLICATION_STORE_GENRE_HACK_AND_SLASH: "Hack and Slash", APPLICATION_STORE_GENRE_PLATFORMER: "Platformer", APPLICATION_STORE_GENRE_STEALTH: "Stealth", APPLICATION_STORE_GENRE_SURVIVAL: "Survival", APPLICATION_STORE_GENRE_ADVENTURE: "Adventure", APPLICATION_STORE_GENRE_ACTION_ADVENTURE: "Action-Adventure", APPLICATION_STORE_GENRE_METROIDVANIA: "Metroidvania", APPLICATION_STORE_GENRE_OPEN_WORLD: "Open-World", APPLICATION_STORE_GENRE_PSYCHOLOGICAL_HORROR: "Psychological Horror", APPLICATION_STORE_GENRE_SANDBOX: "Sandbox", APPLICATION_STORE_GENRE_SURVIVAL_HORROR: "Survival Horror", APPLICATION_STORE_GENRE_VISUAL_NOVEL: "Visual Novel", APPLICATION_STORE_GENRE_DRIVING_RACING: "Driving/Racing", APPLICATION_STORE_GENRE_VEHICULAR_COMBAT: "Vehicular Combat", APPLICATION_STORE_GENRE_MASSIVELY_MULTIPLAYER: "Massively Multiplayer", APPLICATION_STORE_GENRE_MMORPG: "MMORPG", APPLICATION_STORE_GENRE_ROLE_PLAYING: "Role-Playing", APPLICATION_STORE_GENRE_DUNGEON_CRAWLER: "Dungeon Crawler", APPLICATION_STORE_GENRE_ROGUELIKE: "Roguelike", APPLICATION_STORE_GENRE_SHOOTER: "Shooter", APPLICATION_STORE_GENRE_LIGHT_GUN: "Light-Gun", APPLICATION_STORE_GENRE_SHOOT_EM_UP: "Shoot 'Em Up", APPLICATION_STORE_GENRE_FPS: "FPS", APPLICATION_STORE_GENRE_DUAL_JOYSTICK_SHOOTER: "Dual-Joystick Shooter", APPLICATION_STORE_GENRE_SIMULATION: "Simulation", APPLICATION_STORE_GENRE_FLIGHT_SIMULATOR: "Flight Simulator", APPLICATION_STORE_GENRE_TRAIN_SIMULATOR: "Train Simulator", APPLICATION_STORE_GENRE_LIFE_SIMULATOR: "Life Simulator", APPLICATION_STORE_GENRE_FISHING: "Fishing", APPLICATION_STORE_GENRE_SPORTS: "Sports", APPLICATION_STORE_GENRE_BASEBALL: "Baseball", APPLICATION_STORE_GENRE_BASKETBALL: "Basketball", APPLICATION_STORE_GENRE_BILLIARDS: "Billiards", APPLICATION_STORE_GENRE_BOWLING: "Bowling", APPLICATION_STORE_GENRE_BOXING: "Boxing", APPLICATION_STORE_GENRE_FOOTBALL: "Football", APPLICATION_STORE_GENRE_GOLF: "Golf", APPLICATION_STORE_GENRE_HOCKEY: "Hockey", APPLICATION_STORE_GENRE_SKATEBOARDING_SKATING: "Skateboarding/Skating", APPLICATION_STORE_GENRE_SNOWBOARDING_SKIING: "Snowboarding/Skiing", APPLICATION_STORE_GENRE_SOCCER: "Soccer", APPLICATION_STORE_GENRE_TRACK_FIELD: "Track & Field", APPLICATION_STORE_GENRE_SURFING_WAKEBOARDING: "Surfing/Wakeboarding", APPLICATION_STORE_GENRE_WRESTLING: "Wrestling", APPLICATION_STORE_GENRE_STRATEGY: "Strategy", APPLICATION_STORE_GENRE_FOUR_X: "4X", APPLICATION_STORE_GENRE_ARTILLERY: "Artillery", APPLICATION_STORE_GENRE_RTS: "RTS", APPLICATION_STORE_GENRE_TOWER_DEFENSE: "Tower Defense", APPLICATION_STORE_GENRE_TURN_BASED_STRATEGY: "Turn Based Strategy", APPLICATION_STORE_GENRE_WARGAME: "Wargame", APPLICATION_STORE_GENRE_MOBA: "MOBA", APPLICATION_STORE_GENRE_FIGHTING: "Fighting", APPLICATION_STORE_GENRE_PUZZLE: "Puzzle", APPLICATION_STORE_GENRE_CARD_GAME: "Card Game", APPLICATION_STORE_GENRE_EDUCATION: "Education", APPLICATION_STORE_GENRE_FITNESS: "Fitness", APPLICATION_STORE_GENRE_GAMBLING: "Gambling", APPLICATION_STORE_GENRE_MUSIC_RHYTHM: "Music/Rhythm", APPLICATION_STORE_GENRE_PARTY_MINI_GAME: "Party/Mini-Game", APPLICATION_STORE_GENRE_PINBALL: "Pinball", APPLICATION_STORE_GENRE_TRIVIA_BOARD_GAME: "Trivia/Board Game", APPLICATION_STORE_GENRE_MISCELLANEOUS: "Other", APPLICATION_STORE_COUNTDOWN_SECONDS: "sec", APPLICATION_STORE_COUNTDOWN_MINUTES: "min", APPLICATION_STORE_COUNTDOWN_HOURS: "hrs", APPLICATION_STORE_COUNTDOWN_DAYS: "days", APPLICATION_BRANCH_NAME_MASTER: "Master", APPLICATION_BRANCH_NAME_UNKNOWN: "Unknown", NEWS_CHANNEL_PUBLISH: "Publish", NEWS_CHANNEL_PUBLISHED: "Published", NEWS_CHANNEL_PUBLISH_BUMP: "Share with your followers!", NEWS_CHANNEL_PUBLISH_BUMP_HIDE_PERMANENTLY: "Don't show again", DISPATCH_ERROR_MODAL_HEADER: "Discord Dispatch Error", DISPATCH_ERROR_MODAL_DESCRIPTION: "Something went wrong. [Get help here.]({link})", DISPATCH_ERROR_MODAL_BODY: "If the problem persists, create a support ticket and copy the message content below.", DISPATCH_ERROR_MODAL_ERROR_LABEL: "Error Message (Copy and paste me)", DISPATCH_ERROR_MODAL_OPEN_TICKET: "Open a ticket", MISSING_ENTITLEMENT_MODAL_HEADER: "Unable to launch {applicationName}", MISSING_ENTITLEMENT_MODAL_HEADER_UNKNOWN_APPLICATION: "Unable to launch game", MISSING_ENTITLEMENT_MODAL_BODY: "Discord cannot launch **{applicationName}** for you because you've lost entitlement to it. This can be for a variety of reasons, such as a lapsed Nitro subscription, a refund, or if **{applicationName}** has been removed from the Discord store. [Please see this help article for more information or support.]({supportArticleURL})", MISSING_ENTITLEMENT_MODAL_BODY_UNKNOWN_APPLICATION: "Discord cannot launch this game for you because you've lost entitlement to it. This can be for a variety of reasons, such as a lapsed Nitro subscription, a refund, or if the game has been removed from the Discord store. [Please see this help article for more information or support.]({supportArticleURL})", SPOTIFY_PREMIUM_UPGRADE_HEADER: "*Record Scratch*", SPOTIFY_PREMIUM_UPGRADE_BODY: "Sorry pal, looks like you aren't a Spotify Premium member! Premium members are able to listen along with other Spotify listeners.", SPOTIFY_PREMIUM_UPGRADE_BUTTON: "Upgrade Spotify", EXPERIMENT_MOBILE_ONLY_USER_HEADER: "Howdy Friend!", EXPERIMENT_MOBILE_ONLY_USER_TEXT1: "Why don’t you saddle up with Discord for your desktop computer? Here’s the link to grab the desktop app: {downloadUrl}", GROUP_OWNER: "Group Owner", ACTIVE_ON_MOBILE: "Active on Mobile", FULL: "Full", PAGINATOR_CURRENT_PAGE: "Page !!{currentPage, number}!!", PAGINATOR_OF_PAGES: "Page !!{currentPage, number}!! of !!{numPages, number}!!", ATTACHMENT_PROCESSING: "Processing...", ATTACHMENT_PROCESSING_SERVER: "Server processing...", ATTACHMENT_PROCESSING_GATHERING: "Gathering wood...", ATTACHMENT_PROCESSING_WUMPUS: "Wumpus is working...", ATTACHMENT_PROCESSING_UNSURE: "Not sure about this one...", ATTACHMENT_PROCESSING_PYLONS: "Constructing pylons...", ATTACHMENT_PROCESSING_BYTES: "That's a lot of bytes", ATTACHMENT_PROCESSING_WEATHER: "How about that weather?", ATTACHMENT_PROCESSING_FILING: "Filing that away... get it?", ATTACHMENT_PROCESSING_CALL: "Your call is very important to us", ATTACHMENT_COMPRESSING: "Compressing files...", UPLOADING_FILES_TITLE: "Uploading...", SENDING_MESSAGE_TITLE: "Sending...", UPLOADING_LOADING_TEXT: "Your files are being prepared. Please wait.", UPLOAD_ERROR_TITLE: "Something went wrong", UPLOAD_ERROR_RETRY: "Try again later", UPLOAD_ERROR_DESCRIPTION: "The following files failed to upload:", UPLOAD_ERROR_TOO_LARGE: "File too large", UPLOAD_ERROR_WRONG_TYPE: "Wrong file type", UPLOAD_ERROR_TOO_MANY_EMOJI: "Too many emoji", UPLOAD_ERROR_TOO_MANY_ANIMATED_EMOJI: "Too many animated emoji", UPLOAD_ERROR_RATE_LIMIT: "Rate Limited", UPLOAD_ERROR_RESIZE_GIF: "Cannot resize GIF", UPLOAD_QUEUED: "Upload Queued", QUEUED_FILES: "{count, plural, =1 {{filename} queued} other {{count} Files queued}}", UPLOADING_FILES: "{count, plural, one, {Uploading 1 File} other {Uploading {count} Files}}", UPLOADING_FILES_FAILED: "{count, plural, one, {1 File Uploading Failed} other {{count} Files Uploading Failed}}", PREVIEW_CHANGE_LANGUAGE: "Change language", PREVIEW_SEARCH_LANGUAGE_PLACEHOLDER: "Search languages", PREVIEW_NUM_LINES: "{lines, plural, =1 {# line} other {# lines}}", PREVIEW_NUM_LINES_AT_LEAST: "More than {lines, plural, =1 {# line} other {# lines}}", PREVIEW_MODAL_LABEL: "Plaintext file previews", PREVIEW_WHOLE_FILE: "View whole file", PREVIEW_LINES_LEFT: "({lines, plural, =1 {# line} other {# lines}} left)", PREVIEW_BYTES_LEFT: "({formattedBytes} left)", EXECUTED_COMMAND_POPOUT_ATTACHMENT_OPTION_VALUE: "[attachment]", NUM_IMAGES: "{count, plural, one {1 image} other {{count} images}}", NUM_VIDEOS: "{count, plural, one {1 video} other {{count} videos}}", NUM_LINKS: "{count, plural, one {1 link} other {{count} links}}", NUM_ATTACHMENTS: "{count, plural, one {1 file} other {{count} files}}", MOST_POPULAR: "Most Popular", SPELLCHECK: "Spellcheck", ADD_TO_DICTIONARY: "Add to Dictionary", REMOVE_FROM_DICTIONARY: "Remove from Dictionary", LANGUAGES: "Languages", AUTO_SUGGEST_STICKERS: "Sticker Suggestions", AUTO_SUGGEST_STICKERS_DESCRIPTION: "Allows sticker suggestions to appear when typing messages.", STICKERS_IN_AUTOCOMPLETE: "Stickers in Autocomplete", INCLUDE_STICKER_RESULTS_IN_AUTOCOMPLETE: "Allows stickers to appear in your autocomplete results.", NUF_AGE_GATE_BODY: "We're so excited you're here! Before we get started please enter your birthday. [Why do I need to provide my birthday?]({helpURL})", NUF_COMPLETE_TITLE: "Your server is ready!", NUF_COMPLETE_SUBTITLE: "Welcome! You belong here", NUF_COMPLETE_CTA: "Take me to my server!", NUF_CREATE_SERVER_CUSTOMIZE_HEADER: "Customize Your Server", NUF_CREATE_SERVER_CUSTOMIZE_SUBHEADER: "Give your new server a personality with a name and an icon. You can always change it later.", NUF_CREATE_SERVER_BUTTON: "Create Server", NUF_JOIN_SERVER_TITLE_2: "Welcome to Discord!", NUF_JOIN_SERVER_BUTTON: "Join Server", NUF_DOWNLOAD_APP_BUTTON_PLATFORM: "Download for {platform}", NUF_ASK_FRIEND_SERVER_INVITE: "Ask your friends to invite you to their servers, which are places for hanging out and talking.", NUF_CREATE_GUILD_CTA_DESCRIPTION: "You can also [start your own server](onClick)", DATA_PRIVACY_RATE_LIMIT_TITLE: "Sorry about that", USAGE_STATISTICS_DISABLE_MODAL_TITLE: "Turn off use data to improve Discord?", USAGE_STATISTICS_DISABLE_MODAL_BODY: "If you turn this off, we’ll stop processing new data for analytics. You will lose access to new experimental features and usage-based improvements to features like voice chat. If you'd like to further assert your right to object to our processing of your data, email privacy@discord.com.", USAGE_STATISTICS_DISABLE_MODAL_CONFIRM: "Yes, I'm sure", USAGE_STATISTICS_DISABLE_MODAL_CANCEL: "No, take me back!", PERSONALIZATION_DISABLE_MODAL_TITLE: "Turn off personalization?", PERSONALIZATION_DISABLE_MODAL_BODY: "By turning this off you lose access to things like personalized recommendations and suggestions. You won’t be able to recover them in the future!", PERSONALIZATION_DISABLE_MODAL_CONFIRM: "Yes, I'm sure", PERSONALIZATION_DISABLE_MODAL_CANCEL: "No, take me back!", DATA_DOWNLOAD_REQUESTED_STATUS_NOTE: "You've recently requested a copy of your data. You can request again on {date}.", RATING_REQUEST_TITLE: "Enjoying Discord?", RATING_REQUEST_BODY_ANDROID: "Head over to the Play Store and leave us a rating. Every little bit helps!", OVERLAY_NOTIFICATIONS_DISABLED: "Disabled", OVERLAY_NOTIFICATIONS_TOP_LEFT: "Top Left", OVERLAY_NOTIFICATIONS_TOP_RIGHT: "Top Right", OVERLAY_NOTIFICATIONS_BOTTOM_LEFT: "Bottom Left", OVERLAY_NOTIFICATIONS_BOTTOM_RIGHT: "Bottom Right", OVERLAY_LINK_ALERT_TITLE: "Hold Up!", OVERLAY_LINK_ALERT_BODY: "You're about to open this link in an external browser. Do you want to continue?", OVERLAY_LINK_ALERT_SECONDARY: "Open and don't bother me again.", OVERLAY_CRASHED_TITLE: "Discord Overlay has crashed!", OVERLAY_RELOAD: "Reload Overlay", OVERLAY_CLICK_TO_JUMP_TO_CHANNEL: "Click to jump to channel", OVERLAY_CLICK_TO_UNLOCK: "Click to unlock overlay", OVERLAY_RESET_DEFAULT_LAYOUT: "Reset Default Layout", ACTIVITY_INVITE_MODAL_HEADER: "Invite to Play !!{name}!!", ACTIVITY_INVITE_MODAL_SEARCH_PLACEHOLDER: "Search users and channels", ACTIVITY_INVITE_MODAL_SENT: "Sent", ACTIVITY_INVITE_MODAL_INVITE: "Invite", ACTIVITY_INVITE_PRIVATE: "\nYou cannot send an invite because you are either invisible or are hiding your playing status. If you prefer to not change\nyour settings you can have someone invite you instead.\n", GUILD_DISCOVERY_TOOLTIP: "Explore Discoverable Servers", GUILD_DISCOVERY_HOME_TITLE: "Find your community on Discord", GUILD_DISCOVERY_HOME_SUBTITLE: "From gaming, to music, to learning, there's a place for you.", GUILD_DISCOVERY_CATEGORY_TITLE: "Find {categoryName} communities on Discord", GUILD_DISCOVERY_SEARCH_PLACEHOLDER: "Explore communities", GUILD_DISCOVERY_CATEGORY_SEARCH_PLACEHOLDER: "Explore {categoryName} servers", GUILD_DISCOVERY_CATEGORY_FOOTER_TITLE: "There are more communities out there!", GUILD_DISCOVERY_FOOTER_BODY: "Try searching for them.", GUILD_DISCOVERY_SEARCH_LABEL: "Explore popular communities", GUILD_DISCOVERY_SEARCH_ENTER_CTA: '"ENTER" to Search', GUILD_DISCOVERY_HEADER_GAMES_YOU_PLAY: "Communities for games you play", GUILD_DISCOVERY_POPULAR_HEADER: "Popular communities", GUILD_DISCOVERY_FEATURED_HEADER: "Featured communities", GUILD_DISCOVERY_SEARCH_RESULTS_HEADER: '{count, plural, =0 {0 communities} one {1 community} other {{count} communities}} for "{query}"', GUILD_DISCOVERY_SEARCH_RESULTS_CATEGORY_HEADER: '{count, plural, =0 {0 **{category}** communities} one {1 **{category}** community} other {{count} **{category}** communities}} for "{query}"', GUILD_DISCOVERY_SEARCH_EMPTY_HEADER: "No results found", GUILD_DISCOVERY_SEARCH_EMPTY_CATEGORY_HEADER: "No results found in {categoryName}", GUILD_DISCOVERY_SEARCH_EMPTY_BODY: "Try searching for something else.", GUILD_DISCOVERY_SEARCH_EMPTY_CATEGORY_BODY: "Try searching for something else or [see results from all categories](onClick).", GUILD_DISCOVERY_SEARCH_ERROR: "Uh oh, Discovery search is having issues right now. Check back later.", GUILD_DISCOVERY_ALL_CATEGORY_FILTER: "All", GUILD_DISCOVERY_MAIN_VIEW_TITLE: "Find your Community", GUILD_DICOVERY_MAIN_VIEW_SUBTITLE: "From gaming, to music, to education, there's a place for you on Discord.", GUILD_DISCOVERY_CATEGORY_HEADER: "Popular {categoryName} communities", GUILD_DISCOVERY_MOBILE_SEARCH_PLACEHOLDER: "Search for communities", GUILD_DISCOVERY_SEARCH_PROTIP: "$[PROTIP:](protipHook) You can search for a server by name, category, or keyword. Try any shared interest or hobby, no matter how obscure!", GUILD_DISCOVERY_CHAT_INPUT_BACK: "Back to Discovery", GUILD_DISCOVERY_LURKER_FOLLOW_NEWS_BUTTON: "Follow Updates", CLAN_SETUP_PLAYSTYLE_SOCIAL_TITLE: "Very Casual", CLAN_SETUP_PLAYSTYLE_CASUAL_TITLE: "Casual", CLAN_SETUP_PLAYSTYLE_COMPETITIVE_TITLE: "Competitive", CLAN_SETUP_PLAYSTYLE_VERY_HARDCORE_TITLE: "Very Competitive", CLAN_DISCOVERY_CARD_TAG_TOOLTIP: "Become a member to unlock this tag", CLAN_USER_WAITLIST_TOAST_SUCCESS: "You have been added to the waitlist!", CLAN_USER_WAITLISTED: "Waitlisted", CLAN_USER_WAITLIST_CTA: "Join Waitlist for Guilds", GUILD_POPOUT_VIEW_SERVER_BUTTON: "View Server", GUILD_POPOUT_UNAVAILABLE_HEADER: "This server is not available.", GUILD_POPOUT_UNAVAILABLE_FLAVOR: "We can't show any further details.", ANNOUNCEMENT_GUILD_POPOUT_NAME: "Community Updates", ANNOUNCEMENT_GUILD_DESCRIPTION: "Official announcements from Discord for Community Server admins and moderators.", ANNOUNCEMENT_GUILD_HERE_TO_HELP: "We're here to help!", GUILD_PROFILE_JOIN_SERVER_BUTTON: "Join Server", LAUNCH_APP: "Launch {app}", FOLLOW_MODAL_TITLE: "Add this channel's updates to your server!", FOLLOW_MODAL_BODY: "Select where you want these updates to go. You can remove this at any time in Server Settings > Integrations > Channels Followed.", FOLLOW_MODAL_HINT: "Only servers and channels you have webhook permissions in are shown.", FOLLOW_MODAL_HINT_NO_PERMS: "Uh oh, you don't have webhook permissions in any server you're in. Ask your server admin to give you the permission or ask them to come follow themselves!", FOLLOW_MODAL_WARNING: "Note: This is an age-restricted channel.", FORM_LABEL_SEND_TO: "Send to", FORM_LABEL_SELECT_CHANNEL: "Select channel", FOLLOW: "Follow", FOLLOW_MODAL_FAIL: "Failed to follow the channel, please try again.", FOLLOW_MODAL_TOO_MANY_WEBHOOKS: "The selected channel has too many webhooks. Please remove a webhook or select another channel.", FOLLOW_SUCCESS_MODAL_HEADER_01: "What a nice addition to your server. Lookin' real spiffy in here.", FOLLOW_SUCCESS_MODAL_HEADER_02: "What a nice addition to your server. Lookin' real good in here.", FOLLOW_SUCCESS_MODAL_HEADER_03: "What a nice addition to your server. Lookin' real dapper in here.", FOLLOW_SUCCESS_MODAL_HEADER_04: "What a nice addition to your server. Lookin' real swanky in here.", FOLLOW_SUCCESS_MODAL_HEADER_05: "What a nice addition to your server. Lookin' real snazzy in here.", FOLLOW_SUCCESS_MODAL_HEADER_06: "What a nice addition to your server. Lookin' real dandy in here.", FOLLOW_SUCCESS_MODAL_HEADER_07: "What a nice addition to your server. Lookin' real cozy in here.", FOLLOW_SUCCESS_MODAL_HEADER_08: "What a nice addition to your server. Lookin' real nifty in here.", FOLLOW_SUCCESS_MODAL_HEADER_09: "What a nice addition to your server. Lookin' real neato in here", FOLLOW_SUCCESS_MODAL_HEADER_10: "What a nice addition to your server. Lookin' real lively in here.", FOLLOW_SUCCESS_MODAL_BODY: "The most important updates from this channel will now show up directly in your server. Enjoy!", FOLLOW_NEWS_CHAT_INPUT_MESSAGE: "Follow to get this channel's updates in your own server.", FOLLOW_NEWS_CHAT_INPUT_SUBTITLE: "Over !!{count}!! other people are also following.", MODIFY_FOLLOWED_NEWS_HEADER: "Are you sure?", DELETE_FOLLOWED_NEWS_BODY: "This message will be deleted in all servers following this channel. It may take some time before it’s removed from all servers.", EDIT_FOLLOWED_NEWS_BODY: "This message will also be updated in all servers following this channel. It may take some time before all servers are updated.", PUBLISH_FOLLOWED_NEWS_BODY: "This message will be sent to all servers following this channel. You can edit or delete this message later, and it will update correspondingly in each following server.", PUBLISH_FOLLOWED_NEWS_BODY_REACH: "This message will be sent to **{numGuildsFollowing, plural, one {# server} other {# servers}}** following this channel. You can edit or delete this message later, and it will update correspondingly in each following server.", PUBLISH_FOLLOWED_NEWS_FAIL_TITLE: "Uh-oh, a pop up box.", PUBLISH_FOLLOWED_NEWS_FAIL_BODY: "You've reached your 10 published messages per-hour limit. But we love the enthusiasm, so please try again in {retryAfter, plural, one {1 minute} other {{retryAfter} minutes}}.", PUBLISH_FOLLOWED_NEWS_GENERIC_BODY: "Sorry, something went wrong.", PUBLISH_FOLLOWED_NEWS_BODY_SETTINGS_INSIGHTS: "Announcement stats can be found in [Server Insights.](onClick)", ANNOUNCEMENT_EDIT_RATE_LIMIT: "To keep announcements speedy, published messages can only be edited 3 times per hour. Please try again in {retryAfterMinutes, plural, one {1 minute} other {{retryAfterMinutes} minutes}}.", ACTIVITY_PANEL_GO_LIVE: "Go Live", ACTIVITY_PANEL_GO_LIVE_STREAM_GAME: "Stream !!{game}!!", ACTIVITY_PANEL_GO_LIVE_TOOLTIP_NO_PERMISSION_IN_VOICE: "You can’t stream into this channel.", ACTIVITY_PANEL_GO_LIVE_TOOLTIP_NO_PERMISSION_IN_GUILD: "You can’t stream into this server.", ACTIVITY_PANEL_GO_LIVE_TOOLTIP_NOT_IN_GUILD: "Navigate to a server to start streaming.", GO_LIVE_MODAL_TITLE: "Screen Share", GO_LIVE_MODAL_CAPTURE: "Capture Devices", GO_LIVE_MODAL_DESCRIPTION_GENERIC: "Set up your stream and have your friends grab a seat!", GO_LIVE_MODAL_DESCRIPTION_SELECT_SOURCE: "Select something to stream and have your friends grab a seat!", GO_LIVE_MODAL_APPLICATIONS: "Applications", GO_LIVE_MODAL_SCREENS: "Screens", GO_LIVE_MODAL_APPLICATION_FORM_TITLE: "What you're streaming", GO_LIVE_MODAL_SELECT_CHANNEL_FORM_TITLE: "Select a voice channel", GO_LIVE_MODAL_CURRENT_CHANNEL_FORM_TITLE: "Streaming channel", GO_LIVE_MODAL_HARDWARE_WARNING_INFOBOX: "Discord relies on the video hardware encoder of your graphics card for optimal system performance and visual quality. [Enable Hardware Acceleration](onClick) in your settings for the best experience.", GO_LIVE_MODAL_CTA: "Go Live", GO_LIVE_MODAL_OVERFLOW_TWO_USERS: "!!{nickname0}!! and !!{nickname1}!!", GO_LIVE_MODAL_OVERFLOW_THREE_USERS: "!!{nickname0}!!, !!{nickname1}!!, and !!{nickname2}!!", GO_LIVE_MODAL_OVERFLOW_FOUR_OR_MORE_USERS: "!!{nickname0}!!, !!{nickname1}!!, and !!{remainingCount}!! others", GO_LIVE_MODAL_CAPTURE_DESCRIPTION: "Pick your video device and the matching audio device.", GO_LIVE_FORM_LABEL_AUDIO_DEVICE: "Audio Device", GO_LIVE_FORM_LABEL_VIDEO_DEVICE: "Video Device", GO_LIVE_FORM_BUTTON_CAMERA_READY: "Looks Good!", GO_LIVE_HEY: "Hey!", GO_LIVE_LOOK: "Look!", GO_LIVE_LISTEN: "Listen!", GO_LIVE_VIDEO_DRIVERS_OUTDATED: "Your video drivers are out of date. Update them for better screen share performance.", GO_LIVE_SCREENSHARE_NO_SOUND: "Sound may not be available when sharing a screen on your device.", GO_LIVE_SCREENSHARE_UPDATE_WINDOWS_FOR_SOUNDSHARE: "Audio sharing may not work on your Windows version. Please upgrade to the latest Windows 10.", GO_LIVE_SCREENSHARE_UPDATE_MACOS_FOR_SOUNDSHARE: "Audio sharing may not work on your device. Please upgrade to at least macOS 10.15.", GO_LIVE_TILE_SCREEN: "!!{username}!!’s Screen", GO_LIVE_USER_PLAYING: "!!{username}!! Playing {applicationName}", GO_LIVE_SHARE_SCREEN: "Screen", GO_LIVE_WATCHING_USER: "Watching {username}", GO_LIVE_MODAL_NOTIFY_FRIENDS_CHECKBOX_LABEL: "Notify my friends in this server that I'm streaming.", GO_LIVE_MODAL_ENABLE_SCREEN_SOUNDSHARE_LABEL: "Also share system audio.", GO_LIVE_MODAL_PERK_DEMO_HD_STREAMING_INITIAL_UPSELL: "Get a taste of Nitro. Try out HD streaming, our treat!", GO_LIVE_MODAL_PERK_DEMO_HD_STREAMING_UPSELL_TOOLTIP: "You are currently streaming in high resolution", GO_LIVE_MODAL_PERK_DEMO_HD_STREAMING_ENDED_UPSELL_TITLE: "Lock in endless HD streaming", GO_LIVE_MODAL_PERK_DEMO_HD_STREAMING_ENDED_UPSELL_BODY: "You don't have to say goodbye to HD streams forever. Access high quality streaming and other premium perks with Nitro.", VOICE_CHANNEL_EFFECTS: "Voice Channel Effects", VOICE_CHANNEL_EFFECTS_COOLDOWN: "Reaction Cooldown {seconds}s", VOICE_CHANNEL_EFFECTS_MORE: "More Reactions", VOICE_CHANNEL_EFFECTS_REDUCED_MOTION_TOOLTIP_TITLE: "Turn off Reduced Motion to see reactions", VOICE_CHANNEL_EFFECTS_REDUCED_MOTION_TOOLTIP_BODY: "To view animated reactions, turn off Reduced Motion in your Accessibility settings.", VOICE_CHANNEL_EFFECTS_REDUCED_MOTION_TOOLTIP_CONFIRM: "Update Setting", VOICE_CHANNEL_EFFECTS_REDUCED_MOTION_TOOLTIP_CANCEL: "Cancel", GUILD_VOICE_CHANNEL_EMPTY_BODY_MOBILE: "Ready to talk? Grab a seat in this voice channel so people know you're around to hang out.", JOIN_VOICE_CHANNEL_CTA: "Join Voice", JOIN_VIDEO_CHANNEL: "Join Video", SET_VOICE_CHANNEL_TOPIC_SHORT_CTA: "Set a topic", SET_VOICE_CHANNEL_TOPIC: "Set Voice Status", SET_VOICE_CHANNEL_TOPIC_PLACEHOLDER: "What's going on?", SET_VOICE_CHANEL_TOPIC_UPDATE_CHANNEL_CTA: "Post an update to", CHANNEL_STATE_OPEN: "Open", CHANNEL_STATE_BUSY: "Busy", GUILD_VOICE_CHAT_EMPTY_STATE_TITLE: "No one's here yet", GUILD_VOICE_CHAT_EMPTY_STATE_SUBTITLE: "Voice channels are for hanging out. When you’re ready to talk, just hop in. Friends will be able to see and join you. It’s like using telepathy to say hi.", LOCAL_PUSH_NOTIFICATION_GUILD_VERIFICATION_BODY: "You can now talk in this server. Thanks for waiting!", LOCAL_PUSH_NOTIFICATION_SCREENSHARE_NOT_SUPPORTED: "This application may not support screensharing.", ELEVATED_PERMISSIONS_SOUND_TITLE: "Sound Permissions", ELEVATED_PERMISSIONS_SOUND_BODY: "Discord is unable to stream your application audio due to missing permissions. Grant Discord administrator permissions in order to send those sweet, sweet soundwaves to your friends?", ELEVATED_PERMISSIONS_SOUND_NO_SOUND_BUTTON: "Stream Without Sound", ELEVATED_PERMISSIONS_SOUND_REQUEST_ACCESS_BUTTON: "Grant Access", CUSTOM_STATUS: "Custom Status", CUSTOM_STATUS_ADD_STATUS: "Add Status", CUSTOM_STATUS_SET_CUSTOM_STATUS: "Set a custom status", CUSTOM_STATUS_SET_CUSTOM_STATUS_CTA: "Set Custom Status", CUSTOM_STATUS_CHANGE_CUSTOM_STATUS_A11Y_LABEL: "Change custom status", CUSTOM_STATUS_CUSTOM_STATUS_A11Y_LABEL: "Custom status: !!{emoji}!! !!{status}!!", CUSTOM_STATUS_CHANGE_CUSTOM_STATUS_A11Y_HINT: "Current: !!{emoji}!! !!{status}!!", CUSTOM_STATUS_EDIT_CUSTOM_STATUS_PLACEHOLDER: "Edit Custom Status", CUSTOM_STATUS_EMOJI_BUTTON_A11Y_LABEL: "Select Custom Status Emoji", CUSTOM_STATUS_CLEAR_CUSTOM_STATUS: "Clear Status", CUSTOM_STATUS_MODAL_BODY: "What's cookin', !!{username}!!?", CUSTOM_STATUS_MODAL_PLACEHOLDER: "Support has arrived!", CUSTOM_STATUS_CLEAR_AFTER: "Clear after", CUSTOM_STATUS_DONT_CLEAR: "Don't clear", CUSTOM_STATUS_MINUTES: "{minutes, plural, =1 {# minute} other {# minutes}}", CUSTOM_STATUS_CLEAR_IN_MINUTES: "Clear in {minutes, plural, =1 {# minute} other {# minutes}}", CUSTOM_STATUS_HOURS: "{hours, plural, =1 {# hour} other {# hours}}", CUSTOM_STATUS_CLEAR_IN_HOURS: "Clear in {hours, plural, =1 {# hour} other {# hours}}", CUSTOM_STATUS_TODAY: "Today", CUSTOM_STATUS_CLEAR_TOMORROW: "Clear tomorrow", CUSTOM_STATUS_UPDATE_SUCCESS: "Custom status updated!", CUSTOM_STATUS_STATUS_TITLE: "Status", CUSTOM_STATUS_CLEARS_IN_MINUTES: "Clears in {minutes} minutes", CUSTOM_STATUS_CLEARS_IN_HOURS: "Clears in {hours} hours", CUSTOM_STATUS_PLACEHOLDER: "What're you up to?", CUSTOM_STATUS_DURATION: "Status Duration", SYSTEM_DM_CHANNEL_DESCRIPTION: "This chat is reserved for official Discord notifications.", SYSTEM_DM_CHANNEL_DESCRIPTION_SUBTEXT: "Discord will never ask you for your password or account token.", SYSTEM_DM_EMPTY_MESSAGE: "This is an official message from Team Discord. Please be advised that Discord will never ask you for your password or account token.", SYSTEM_DM_TAG_SYSTEM: "SYSTEM", SYSTEM_DM_ACTIVITY_TEXT: "Official Discord Message", SYSTEM_DM_URGENT_MESSAGE_MODAL_HEADER: "Urgent Message", SYSTEM_DM_URGENT_MESSAGE_MODAL_BODY: "There's an official message from the Discord team that needs your attention.", SYSTEM_DM_CHANGELOG_BIO: "The latest announcements and updates about what's new at Discord, straight to your inbox! Nice to see ya! \uD83D\uDC4B", SYSTEM_DM_CHANGELOG_BIO_CTA: "Catch up on past Changelogs here.", SYSTEM_DM_CHANGELOG_BIO_WITH_CTA: "Catch up on past Changelogs $[here](blogHook)", SYSTEM_DM_OPEN_BLOG: "Open Blog", SYSTEM_DM_CHANGELOG_STATUS: "Discord Product Updates", BUILD_OVERRIDE: "Build Override", BUILD_OVERRIDE_FOR: "Build Override for {releaseChannel}", BUILD_OVERRIDE_ID: "Commit Hash", BUILD_OVERRIDE_APPLY: "Apply", BUILD_OVERRIDE_CLEAR: "Clear", BUILD_OVERRIDE_ISNT_AVAILABLE: "Build isn't available", BUILD_OVERRIDE_LINK_COPY: "Copy Link", BUILD_OVERRIDE_LINK_COPIED: "Link Copied!", BUILD_OVERRIDE_INVALID: "Invalid build override", BUILD_OVERRIDE_INCOMPATIBLE_CLIENT: "{releaseChannel} client only", BUILD_OVERRIDE_INCOMPATIBLE_TARGETS: "This build override is only valid for targets: {requestedTargets}", BUILD_OVERRIDE_EXPIRED: "Build expired", BUILD_OVERRIDE_INVALID_USER: "Incorrect user", CLEAR_BUILD_OVERRIDE: "Clear Build Override", LABEL_WITH_ONLINE_STATUS: "{label}, {status}", INCOMPATIBLE_BROWSER: "Or, visit this page from a [supported browser]({supportedBrowserURL}).", DESKTOP_APP: "Desktop App", CONNECTED_ON_ANOTHER_CLIENT: "Connected on another client", NOW_PLAYING_GDPR_HEADER: "This section could be better", NOW_PLAYING_GDPR_BODY: "We can customize Active Now, and other parts of Discord, based on information like who you talk to and what games you play. You can change this anytime in [privacy settings](onPrivacyClick).", hr: "Croatian", "zh-TW": "Chinese, Taiwan", fr: "French", de: "German", "en-US": "English, US", "en-GB": "English, UK", "pt-BR": "Portuguese, Brazilian", ru: "Russian", it: "Italian", "es-ES": "Spanish", "es-419": "Spanish, LATAM", ko: "Korean", nl: "Dutch", "sv-SE": "Swedish", pl: "Polish", ja: "Japanese", bg: "Bulgarian", uk: "Ukrainian", tr: "Turkish", da: "Danish", cs: "Czech", fi: "Finnish", no: "Norwegian", el: "Greek", lt: "Lithuanian", hu: "Hungarian", ro: "Romanian, Romania", "zh-CN": "Chinese, China", th: "Thai", vi: "Vietnamese", hi: "Hindi", en: "English", I18N_LOCALE_LOADING_ERROR: "An error occurred loading {locale}", NUF_HAVE_AN_INVITE_ALREADY: "Have an invite already?", NUF_JOIN_A_FRIEND: "Join a friend on Discord", GUILD_FOLDER_NAME: "Folder Name", GUILD_FOLDER_COLOR: "Folder Color", GUILD_FOLDER_UNNAMED: "Unnamed Server Folder", GUILD_FOLDER_UPDATED_SUCCESS: "Folder settings saved!", VIEW_PROFILE: "View Profile", VIEW_PROFILE_USERNAME: "View Profile, !!{username}!!", VIEW_FULL_PROFILE: "View Full Profile", VIEW_MAIN_PROFILE: "View Main Profile", VIEW_SERVER_PROFILE: "View Server Profile", EDIT_PROFILE: "Edit Profile", EDIT_MAIN_PROFILE: "Edit Main Profile", USER_PROFILE_MESSAGE: "Message", USER_PROFILE_AUDIO: "Call", USER_PROFILE_VIDEO: "Video", USER_PROFILE_VIEW_FULL_BIO: "View Full Bio", USER_PROFILE_ADD_ROLE: "Add Role", USER_PROFILE_ADD_FRIEND: "Add Friend", USER_PROFILE_PENDING: "Pending", USER_PROFILE_NO_MUTUAL_FRIENDS: "No Mutual Friends", USER_PROFILE_NO_MUTUAL_SERVERS: "No Mutual Servers", USER_PROFILE_MUTUAL_FRIENDS: "{count, plural, =0 {0 Mutual Friends} one {1 Mutual Friend} other {{count} Mutual Friends}}", USER_PROFILE_MUTUAL_GUILDS: "{count, plural, =0 {0 Mutual Servers} one {1 Mutual Server} other {{count} Mutual Servers}}", USER_PROFILE_MUTUAL_FRIENDS_SHORT: "{count, plural, =0 {0 Friends} one {1 Friend} other {{count} Friends}}", USER_PROFILE_MUTUAL_GUILDS_SHORT: "{count, plural, =0 {0 Servers} one {1 Server} other {{count} Servers}}", USER_PROFILE_MUTUAL_FRIENDS_ONE: "friends with **{usernameOne}**", USER_PROFILE_MUTUAL_FRIENDS_TWO: "friends with **{usernameOne}** and **{usernameTwo}**", USER_PROFILE_MUTUAL_FRIENDS_MANY: "friends with **{usernameOne}**, **{usernameTwo}**, and {count} more", USER_PROFILE_MUTUAL_FRIENDS_MANY_SHORT: "friends with **{usernameOne}** and {count} more", USER_PROFILE_MUTUAL_FRIENDS_COUNT: "friends with {count, plural, =0 {0 people} one {1 person} other {{count} people}}", USER_PROFILE_MUTUAL_GUILDS_ONE: "member of **{guildNameOne}**", USER_PROFILE_MUTUAL_GUILDS_TWO: "member of **{guildNameOne}** and **{guildNameTwo}**", USER_PROFILE_MUTUAL_GUILDS_MANY: "member of **{guildNameOne}**, **{guildNameTwo}**, and {count} more", USER_PROFILE_MUTUAL_GUILDS_COUNT: "member of {count, plural, =0 {0 servers} one {1 server} other {{count} servers}}", USER_PROFILE_MUTUAL_FRIENDS_PLACEHOLDER: "Mutual Friends", USER_PROFILE_MUTUAL_GUILDS_PLACEHOLDER: "Mutual Servers", USER_PROFILE_MUTUAL_FRIENDS_TOOLTIP: "See all mutual friends", USER_PROFILE_MUTUAL_GUILDS_TOOLTIP: "See all mutual servers", USER_PROFILE_MUTUALS_TITLE: "Mutuals", PROFILE_JOIN_VOICE_CHANNEL: "Join Voice Channel", PROFILE_IN_VOICE_CALL: "In a voice call", PROFILE_OPEN_VOICE_CHANNEL: "Open Voice Channel", IOS_PROFILE_IN_VOICE_CALL: "In a voice call", IOS_PROFILE_OPEN_VOICE_CHANNEL: "Open Voice Channel", USER_PROFILE_INCOMING_FRIEND_REQUEST_DIALOG_BODY: "Accept this friend request?", USER_PROFILE_VOLUME: "Volume", USER_PROFILE_FAILURE_TO_OPEN_MESSAGE: "Uh oh! We can't view details for this user", WRONG_USER_LOGOUT: "Wrong account?", USER_PROFILE_HEADER_A11Y_ANIMATE: "Animate Profile Banner GIF", USER_PROFILE_HEADER_A11Y_LABEL: "{username}'s User Profile Banner", USER_PROFILE_ACTIVITY_LISTENING_TO: "Listening to **{name}**", USER_PROFILE_IN_GUILD_DETAILS: "in {guildName}", USER_PROFILE_REMOVE_ROLE: "Remove Role", SERVER_INSIGHTS: "Server Insights", GUILD_ANALYTICS_DESCRIPTION: "We’ve put together a bunch of helpful data to help you better run your community. Learn how active your community is, where new members are coming from, and much more. Use what you learn to make informed decisions to improve your server’s engagement!\n\nAnalytics about Announcement Channels, Server Discovery, and Welcome Screen also live here.", GUILD_ANALYTICS_DEVELOPERS_CTA: "Server Insights is hosted on a separate website so that it’s easier to share links and browse cross platform.", GUILD_ANALYICS_DEVELOPERS_BUTTON: "Go to Server Insights", WEEKLY_COMMUNICATORS: "Weekly Communicators", COMMUNICATORS_INFO: "A visitor who talked (voice or text).", WEEKLY_VISITORS: "Weekly Visitors", VISITORS_INFO: "A member who has clicked into the server and viewed a channel.", WEEKLY_NEW_MEMBERS: "Weekly New Members", WEEKLY_NEW_MEMBER_RETENTION: "Weekly New Member Retention", NEW_MEMBER_RETENTION_INFO: "Percentage of new members that still came back to the server the week after joining.", NOT_AVAILABLE: "N/A", TRENDING_ARROW_UP: "Trending Arrow Up", TRENDING_ARROW_DOWN: "Trending Arrow Down", PERCENTAGE_SINCE_LAST_WEEK: "{percentage}% since last week", GUILD_ANALYTICS_METRICS_LAST_WEEK: "From the most recent week", GUILD_ANALYTICS_ERROR_MESSAGE: "Uh oh! Looks like something broke. Please refresh the application and try again.", GUILD_ANALYTICS_ERROR_GUILD_SIZE: "Looks like your server isn’t quite ready to see full insights. You will only have access to Announcement Channels and Welcome Screen analytics.", NOISE_CANCELLATION_POPOUT_HEADER: "Noise Suppression", NOISE_CANCELLATION_POPOUT_DESCRIPTION: "Enable Krisp noise suppression! Make some noise—like clapping your hands—while speaking. Your friends will hear nothing but your beautiful voice.", NOISE_CANCELLATION_POPOUT_FOOTER: "Powered by", NOISE_CANCELLATION_POPOUT_TEST: "Test", NOISE_CANCELLATION_POPOUT_STOP: "Stop", NOISE_CANCELLATION_POPOUT_MIC_TEST_TITLE: "Mic Test", NOISE_CANCELLATION_TOOLTIP: "Noise Suppression powered by Krisp", USER_SETTINGS_NOISE_CANCELLATION: "Noise Suppression", USER_SETTINGS_NOISE_CANCELLATION_DESCRIPTION: "Suppress background noise from your mic.", USER_SETTINGS_NOISE_CANCELLATION_KRISP: "Krisp", USER_SETTINGS_NOISE_CANCELLATION_STANDARD: "Standard", USER_SETTINGS_NOISE_CANCELLATION_DISABLED: "None", USER_SETTINGS_DISABLE_NOISE_SUPPRESSION: "Noise reduction is disabled while Noise Suppression is active.", MOBILE_NOISE_CANCELLATION_POPOUT_TITLE: "Noise suppression", MOBILE_NOISE_CANCELLATION_FAILED: "We couldn't enable Krisp due to an error. Give it another go and try again.", MOBILE_NOISE_CANCELLATION_CPU_OVERUSE: "We disabled noise suppression to improve phone performance.", NOISE_CANCELLATION_CPU_OVERUSE: "We disabled noise suppression to improve performance.", MOBILE_ADVANCED_VOICE_ACTIVITY_CPU_OVERUSE: "We disabled voice activity detection to improve phone performance.", MOBILE_NOISE_CANCELLATION_POPOUT_DESCRIPTION: "While speaking, filter out background noise and showcase your wonderful voice. Powered by Krisp.", ENABLE_NOISE_CANCELLATION: "Enable Noise Suppression", DISABLE_NOISE_CANCELLATION: "Disable Noise Suppression", MIC_TEST_VOICE_CHANNEL_WARNING: "You'll be muted and deafened in your voice session during Mic Testing.", CAMERA: "Camera", FILES: "Files", TAKE_A_PHOTO: "Take a Photo", IOS_VIEW_ALL: "View all", ALL_ALBUMS: "All Albums", VIEW_ALL: "View all", SHOW_ALL: "Show all", CLEAR_ALL: "Clear all", PHOTOS: "Photos", PHOTOS_AND_FILES: "Photos & Files", RECENTS: "Recents", IOS_MEDIA_KEYBOARD_NO_PERMISSION: "Enable permissions to access your photo library. Show everyone how cute your pet is.", IOS_MEDIA_KEYBOARD_NO_PHOTOS: "You don’t have any photos in your photo library. The best time to start is now.", IOS_MEDIA_KEYBOARD_MORE_PHOTOS: "Not what you’re looking for? Browse your photo library for that perfect picture.", IOS_MEDIA_KEYBOARD_ENABLE_IN_SETTINGS: "Enable in Settings", IOS_MEDIA_KEYBOARD_BROWSE_PHOTO: "Browse Photos", CANNOT_ATTACH_FILES: "You don't have permission to attach files", MEDIA_KEYBOARD_BROWSE: "Browse", MEDIA_KEYBOARD_GIFT: "Gift", MEDIA_KEYBOARD_NUM_SELECTED: "{num} selected", MEDIA_KEYBOARD_MAX_SELECTION_INFO: "Select up to {max}", EXPAND_BUTTONS: "Expand Buttons", CLEAR_ATTACHMENTS: "Clear Attachments", MESSAGE_ATTACHMENTS: "Message Attachments", MESSAGE_ATTACHMENT_A11Y_LABEL: "Message Attachment, {name}", MESSAGE_ATTACHMENT_MOBILE_A11Y_HINT: "Tap to modify", SEND_A_MESSAGE: "Send a Message", ATTACHMENT_FILES: "File Selector", ATTACHMENT_MEDIA: "Media Selector", SHOW_KEYBOARD: "Show Keyboard", ENABLE_PERMISSION: "Enable Permission", STORAGE_PERMISSION_DENIED: "Storage Permission Required", CAMERA_INTENT_RESULT_ERROR: "Camera Result Invalid", CAMERA_UNKNOWN_ERROR: "Unknown Camera Error", FLASH_AUTO: "Auto Flash", FLASH_ON: "Flash On", FLASH_OFF: "Flash Off", FLASH_TORCH: "Flash Torch", PREMIUM_GAME: "Discord Nitro Game", GIFT_NITRO_ACTION: "Gift Nitro", GIFT_NITRO_BENEFITS: "Give this friend custom profiles, HD video, animated emoji, and more!", GIFT_CARD_SELECTION: "Select gift card", GIFT_OPTIONAL_MESSAGE: "Add message (optional)", GIFT_SUBSCRIPTION_SELECTION: "Select gift", GIFT_PREVIEW: "Preview gift", GIFT_CARD_PREVIEW: "Gift card preview", GIFT_PURCHASE_REVIEW: "Review your gift", ONE_TIME_CHARGE: "Pay a one time charge of {currencyAmount}", PAYMENT_METHOD_SELECTION: "Choose payment method", BILLING_ADDRESS_ACTION: "Add billing address", DEFAULT_CUSTOM_GIFT_MESSAGE: "You’re awesome, just like this gift. Enjoy!", MOBILE_CUSTOM_GIFT_PLAN_SELECTION_HEADER: "Gift {username} a new Nitro membership", MOBILE_CUSTOM_GIFT_PLAN_SELECTION_HEADER_NO_USERNAME: "Gift a new Nitro membership", MOBILE_CUSTOM_GIFT_PLAN_SELECTION_BODY: "Warning: gift may cause uncontrollable happiness!", MOBILE_CUSTOM_GIFT_PLAN_SELECTION_CHOOSE_MONTHLY_OR_YEARLY_V2: "Choose from {monthlyPrice}/month or {yearlyPrice}/year", MOBILE_CUSTOM_GIFT_PLAN_SELECTION_CARD_HEADER: "Your recipient will receive:", MOBILE_CUSTOM_GIFT_TITLE_WITH_PLAN: "Gift a {nitroTierName} membership", MOBILE_CUSTOM_GIFT_DURATION_LABEL: "Gift duration", MOBILE_CUSTOM_GIFT_DURATION_AVATAR_LABEL: "Gift {username}:", MOBILE_CUSTOM_GIFT_DURATION_SELECTION_MONTH: "Gift {count, plural, one {# month} other {# months}} of {nitroTierName}", MOBILE_CUSTOM_GIFT_DURATION_SELECTION_YEAR: "Gift {count, plural, one {# year} other {# years}} of {nitroTierName}", MOBILE_CUSTOM_GIFT_DURATION_SELECTION_MONTH_WITH_USERNAME: "Gift {username} {count, plural, one {# month} other {# months}} of {nitroTierName}", MOBILE_CUSTOM_GIFT_DURATION_SELECTION_YEAR_WITH_USERNAME: "Gift {username} {count, plural, one {# year} other {# years}} of {nitroTierName}", MOBILE_CUSTOM_GIFT_PAID_SERVICE_TERMS_AGREEMENT: "By tapping “Buy gift”, you agree to the [Paid Services Terms.]({paidURL}) This will be a one time charge for the amount of time chosen.", MOBILE_CUSTOM_GIFT_SUCCESS_HEADER: "Your gift is on its way!", MOBILE_CUSTOM_GIFT_SUCCESS_BODY: "Delivered with ninja-like efficiency (and zero paper waste).", PREMIUM_ROADBLOCK_UPSELL_SECONDARY_CTA: "View all Nitro perks", PREMIUM_CUSTOM_NOTIFICATION_SOUND: "Notification Sound", PREMIUM_CUSTOM_NOTIFICATION_SOUND_NOTIFICATION_SETTINGS_DESCRIPTION_V2: "Set a unique sound for **desktop notifications** from $[](guildName). Now available in Beta with Nitro.", PREMIUM_CUSTOM_NOTIFICATION_SOUND_NOTIFICATION_SETTINGS_LABEL: "Choose a custom notification sound", PREMIUM_CUSTOM_NOTIFICATION_SOUND_NOTIFICATION_SETTINGS_UPSELL: "Set custom notification sounds with Nitro.", PREMIUM_CUSTOM_NOTIFICATION_SOUND_NOTIFICATION_SETTINGS_WARNING: "You may not hear notification sounds because you’ve muted this server!", PREMIUM_CUSTOM_NOTIFICATION_SOUND_ROADBLOCK_TITLE: "Hear the difference with custom notification sounds [Beta]!", PREMIUM_CUSTOM_NOTIFICATION_SOUND_ROADBLOCK_LABEL: "Try them out!", PREMIUM_CUSTOM_NOTIFICATION_SOUND_ROADBLOCK_DESCRIPTION: "Access custom notification sounds, HD streaming, personalized profiles, and more with Nitro.", PREMIUM_CUSTOM_NOTIFICATION_SOUND_COACHMARK_TITLE: "Personalize your notification sounds!", PREMIUM_CUSTOM_NOTIFICATION_SOUND_COACHMARK_DESCRIPTION: "Assign custom notification sounds [Beta] to the servers & direct messages that matter most to you.", PREMIUM_CUSTOM_NOTIFICATION_SOUND_COACHMARK_DESCRIPTION_V2: "Assign custom notification sounds [Beta] in the **servers & DMs** that matter most to you.", SOUNDPACK_DEFAULT_LABEL: "Discord Default", SOUNDPACK_DEFAULT_DESCRIPTION: "Wumpus' Favorite", SOUNDPACK_RETRO_LABEL: "Power up!", SOUNDPACK_RETRO_DESCRIPTION: "Retro", SOUNDPACK_LOFI_LABEL: "Twinkle", SOUNDPACK_LOFI_DESCRIPTION: "Lofi", SOUNDPACK_DUCKY_LABEL: "Quack", SOUNDPACK_DUCKY_DESCRIPTION: "Ducky", SOUNDPACK_BUBBLE_LABEL: "Bloop", SOUNDPACK_BUBBLE_DESCRIPTION: "Bubble", SOUNDPACK_ASMR_LABEL: "ASMR", SOUNDPACK_ASMR_DESCRIPTION: "*hey there*", PAYMENT_METHOD_INFO: "Payment method", PAID_SERVICE_TERMS_AGREEMENT: "By clicking “Buy gift”, you agree to the Paid Services Terms", ONE_TIME_CHARGE_INFO: "This will be a one time charge for the amount of time chosen. You will not be billed yearly.", GIFT_RECIPIENT_NOTIFICATION: "{recipientDisplayName}, you have a gift!", GIFT_DURATION: "1 {timeInterval} of Nitro", BASIC_GIFT_DURATION: "1 {timeInterval} of Nitro Basic", GIFT_OPEN_PROMPT: "Open gift", GIFT_RECIPIENT_INFO: "To: {recipientDisplayName}", GIFT_SENDER_INFO: "From: {sender}", GIFT_SUBSCRIPTION_INFO: "{sender} has gifted you Nitro for 1 {timeInterval}!", GIFT_SUBSCRIPTION_INFO_TIER_0: "{sender} has gifted you Nitro Basic for 1 {timeInterval}!", GIFT_SUBSCRIPTION_INFO_GENERIC: "{sender} has gifted you Nitro!", GIFT_SUBSCRIPTION_INFO_SENDER_UNKNOWN: "You have been gifted Nitro for 1 {timeInterval}!", GIFT_SUBSCRIPTION_INFO_TIER_0_SENDER_UNKNOWN: "You have been gifted Nitro Basic for 1 {timeInterval}!", GIFT_SUBSCRIPTION_INFO_GENERIC_SENDER_UNKNOWN: "You have been gifted Nitro!", GIFT_SELECT_SOUND: "Add sound effect", GIFT_SELECT_EMOJI: "Add emoji confetti", GIFT_SELECT_SOUNDBOARD_ADD: "Add", GIFT_SELECT_SOUNDBOARD_OR_EMOJI_DESCRIPTION: "This will play when your friend opens their gift", NITRO_CONFIRMATION: "You've got Nitro", PREMIUM_FEATURES_TIER_2: "Now you can use HD streaming, bigger file uploads, custom stickers, and more for 1 {timeInterval}.", PREMIUM_FEATURES_TIER_2_GENERIC: "Now you can use HD streaming, bigger file uploads, custom stickers, and more.", OPENED_GIFT_CONFIRMATION: "You opened this gift!", NITRO_PERKS: "Check out your new Nitro perks!", TEAL: "Teal", LIGHT_GREEN: "Light green", BLUE: "Blue", PURPLE: "Purple", MAGENTA: "Magenta", DARK_TEAL: "Dark teal", GREEN: "Green", DARK_BLUE: "Dark blue", LIGHT_BLUE: "Light blue", SKY_BLUE: "Sky blue", DARK_PURPLE: "Dark purple", BURGUNDY: "Burgundy", YELLOW: "Yellow", ORANGE: "Orange", SALMON: "Salmon", LIGHT_GREY: "Light grey", DARK_GREY: "Dark grey", GREY: "Grey", TAN: "Tan", BROWN: "Brown", TERRACOTTA: "Terracotta", DISCODO_ENABLED: "ディスコード enabled", DISCODO_DISABLED: "ディスコード disabled", PROMOTION_CARD_ACTION_CLAIM: "Claim", ALLOW_DIRECT_MESSAGES: "Allow Direct Messages", ALLOW_DIRECT_MESSAGES_CAPTION: "Anyone in the server can message you", ALLOW_DIRECT_MESSAGES_HUB_CAPTION: "Anyone in the Hub can message you", ALLOW_MESSAGE_REQUESTS: "Allow Message Requests", ALLOW_MESSAGE_REQUESTS_CAPTION: "Filter messages from members you may not know", HUMANIZE_DURATION_A_FEW_SECONDS: "a few seconds", HUMANIZE_DURATION_SECONDS: "{time, plural, =1 {1 second} other {# seconds}}", HUMANIZE_DURATION_MINUTES: "{time, plural, =1 {1 minute} other {# minutes}}", HUMANIZE_DURATION_HOURS: "{time, plural, =1 {1 hour} other {# hours}}", HUMANIZE_DURATION_DAYS: "{time, plural, =1 {1 day} other {# days}}", BILLING_STANDALONE_GUILD_SUBSCRIPTION_PURCHASE_TITLE: "Purchase Server Boosts", BILLING_STANDALONE_PREMIUM_PURCHASE_TITLE: "Purchase Discord Nitro", BILLING_STANDALONE_PREMIUM_SWITCH_PLAN_TITLE: "Switch Discord Nitro Plan", BILLING_STANDALONE_PREMIUM_GIFT_PURCHASE_TITLE: "Gift Discord Nitro", BILLING_STANDALONE_ADD_PAYMENT_TITLE: "Add Payment Method", BILLING_STANDALONE_PAYMENT_HISTORY_TITLE: "View Payment History", BILLING_STANDALONE_PROMOTION_REDEMPTION_TITLE: "Redeem Promotion", BILLING_STANDALONE_MANAGE_SUBSCRIPTION_TITLE: "Manage Subscription", BILLING_STANDALONE_PARTNER_PROMOTION_CLAIM_TITLE: "Claim Promotion", SHARE_SETTINGS_TITLE: "Sharing", IOS_SHARE_SUGGESTIONS_TOGGLE: "iOS Conversation Suggestions", IOS_SHARE_SUGGESTIONS_HINT: "Allows Discord conversations to appear as suggestions for sharing and search in iOS. Disabling this will hide those suggestions and make iOS forget which friends and servers are your favorite.", SUPPRESS_EMBED_TITLE: "Are you sure?", SUPPRESS_EMBED_BODY: "This will remove all embeds on this message for everyone.", SUPPRESS_EMBED_CONFIRM: "Remove All Embeds", SUPPRESS_EMBED_TIP: "Hold shift when clearing embeds to skip this modal.", REMOVE_ATTACHMENT_TITLE: "Are you sure?", REMOVE_ATTACHMENT_BODY: "This will remove this attachment from this message permanently.", REMOVE_ATTACHMENT_CONFIRM: "Remove Attachment", REMOVE_ATTACHMENT_TOOLTIP_TEXT: "Delete", BLOCKED_MESSAGE_COUNT: "{count, plural, =0 {No blocked messages} one {{count} blocked message} other {{count} blocked messages}}", BLOCKED_MESSAGES_SHOW: "{count, plural, one {Show message} other {Show messages}}", BLOCKED_MESSAGES_HIDE: "{count, plural, one {Collapse message} other {Collapse messages}}", AUDIO_DEVICES_OUTPUT_SELECTION_PROMPT: "Select Audio Output", AUDIO_DEVICES_CHANGE_OUTPUT: "Change Audio Output", AUDIO_DEVICES_BLUETOOTH: "Bluetooth", AUDIO_DEVICES_SPEAKER: "Speaker", AUDIO_DEVICES_CHANGE_SPEAKER: "Switch to Speaker", AUDIO_DEVICES_EARPIECE: "Phone", AUDIO_DEVICES_CHANGE_EARPIECE: "Switch to Phone", AUDIO_DEVICES_WIRED: "Wired Headset", AUDIO_DEVICES_UNKNOWN: "Unknown", AUDIO_DEVICES_INVALID: "INVALID", AUDIO_DEVICES_TOGGLE_UNAVAILABLE: "Unavailable during video call.", AUDIO_DEVICES_NONE_AVAILABLE: "No devices available", AUDIO_DEVICES_BLUETOOTH_LE_HEADSET: "Bluetooth LE", WORKING: "Working...", GUILD_TEMPLATE_RESOLVING_TITLE: "Loading server template", GUILD_TEMPLATE_INVALID_TITLE: "Invalid server template", GUILD_TEMPLATE_INVALID_SUBTITLE: "You can ask the owner to make a new one though", GUILD_TEMPLATE_MOBILE_INVALID_CTA: "Tap to learn more", GUILD_TEMPLATE_MOBILE_INVALID_ERROR: "This template link is invalid or has expired.\nWant to know more about Discord?", GUILD_TEMPLATE_RESOLVED_EMBED_TITLE: "Server template", GUILD_TEMPLATE_MODAL_TITLE: "Create a server based on:", GUILD_TEMPLATE_OPEN: "View Template", GUILD_TEMPLATE_EMBED_VIEW_IN_APP: "Available in App", GUILD_TEMPLATE_USAGES: "{usageCount, plural, =0 {Be the first to use this!} one {**1** person used this template} other {**{usageCount}** people used this template}}", GUILD_TEMPLATE_USAGES_NO_BOLD: "{usageCount, plural, =0 {Be the first to use this!} one {1 person used this template} other {{usageCount} people used this template}}", GUILD_TEMPLATE_USAGES_BY_CREATOR2: "{usageCount, plural, =0 {Be the first to use this template by $[**!!{creator}!!**](creatorHook)!} one {**1** person used this template by $[**!!{creator}!!**](creatorHook)} other {**{usageCount}** people used this template by $[**!!{creator}!!**](creatorHook)}}", GUILD_TEMPLATE_MODAL_CHANNELS_HEADER: "Template Channels", GUILD_TEMPLATE_MODAL_CHANNELS_DESCRIPTIONS: "Use channels to organize your server by specific topics.", GUILD_TEMPLATE_MODAL_CHANNELS_TIP: "You can always edit the channels, roles, and permissions after creation.", GUILD_TEMPLATE_MODAL_ROLES_HEADER: "Roles and Permissions", GUILD_TEMPLATE_MODAL_ROLES_HEADER2: "Template Roles and Permissions", GUILD_TEMPLATE_MODAL_ROLES_DESCRIPTION: "Use roles to organize your members and to grant permissions like access to private channels.", GUILD_TEMPLATES: "Server Template", GUILD_TEMPLATE_SETTINGS_DESCRIPTION: "A server template is an easy way to share your server setup and help anyone create a server instantly.\n\n When someone uses your server template link, they create a new server pre-filled with the same channels, roles, permissions, and settings as yours.", GUILD_TEMPLATES_FORM_LABEL_LINK: "Template Link", GUILD_TEMPLATES_CREATE_LINK: "Generate Template", GUILD_TEMPLATES_FORM_LABEL_NAME: "Template Title", GUILD_TEMPLATES_FORM_PLACEHOLDER_NAME: "Who is this server for? E.g. School Club, Artists' Community", GUILD_TEMPLATES_FORM_LABEL_DESCRIPTION: "Template Description", GUILD_TEMPLATES_FORM_PLACEHOLDER_DESCRIPTION: "What can people do in this server?", GUILD_TEMPLATES_PREVIEW_TEMPLATE: "Preview Template", GUILD_TEMPLATES_SYNC_TEMPLATE: "Sync Template", GUILD_TEMPLATES_UNSYNCED_WARNING: "* You have unsynced changes. Update the channels, roles, and permissions in your template by syncing.", GUILD_TEMPLATES_LAST_SYNC: "Last sync: {timestamp, date, long}", GUILD_TEMPLATES_DELETE_TEMPLATE: "Delete Template", GUILD_TEMPLATES_DELETE_DESCRIPTION: "Are you sure you want to delete your template? This will prevent anyone with the link from using it.", GUILD_TEMPLATES_FORM_DESCRIPTION_WILL_COPY: "Templates will copy:", GUILD_TEMPLATES_FORM_DESCRIPTION_WONT_COPY: "Templates will not copy:", GUILD_TEMPLATES_FORM_DESCRIPTION_CHANNELS: "Channels and channel topics", GUILD_TEMPLATES_FORM_DESCRIPTION_ROLES: "Roles and permissions", GUILD_TEMPLATES_FORM_DESCRIPTION_SETTINGS: "Default server settings", GUILD_TEMPLATES_FORM_DESCRIPTION_MESSAGES: "Messages or any content", GUILD_TEMPLATES_FORM_DESCRIPTION_MEMBERS: "Members or bots", GUILD_TEMPLATES_FORM_DESCRIPTION_PERKS: "Your server icon, Boosts, or other perks", GUILD_TEMPLATES_UNSYNCED_TOOLTIP: "Your server is out of sync with your server template. Sync template?", GUILD_TEMPLATE_SETUP_DISCORD: "Set up your Server", GUILD_TEMPLATE_CREATE_DISCORD: "Create a Server", GUILD_TEMPLATE_BASED_ON: "based on", TABS_HOME_ACCESSIBILITY_LABEL: "Home tab", TABS_FRIENDS_ACCESSIBILITY_LABEL: "Friends tab", TABS_SEARCH_ACCESSIBILITY_LABEL: "Search tab", TABS_MENTIONS_ACCESSIBILITY_LABEL: "Mentions tab", TABS_SETTINGS_ACCESSIBILITY_LABEL: "Settings tab", VIDEO_PLAYBACK_MUTE_ACCESSIBILITY_LABEL: "Mute video", VIDEO_PLAYBACK_UNMUTE_ACCESSIBILITY_LABEL: "Unmute video", WELCOME_SCREEN_TITLE: "Welcome to $[!!{guildName}!!](guildNameHook)", WELCOME_SCREEN_CHOICE_HEADER: "Top things to do here", WELCOME_SCREEN_SKIP: "I'll just look around for now", NUF_CHANNELS_TITLE_V2: "These are your channels", NUF_CHANNELS_TITLE: "These are your channels!", NUF_CHANNELS_DESCRIPTION: "Channels are places in your server where people can talk about different topics.", NUF_CHANNELS_CTA_LABEL: "View my channels", NUF_VOICE_CHANNELS_TITLE: "Voice channels are where people come together to talk.", NUF_VOICE_CHANNELS_DESCRIPTION: "There's no ringing or calling. Pop into a voice channel and friends can jump in to talk with you, use video, or even share their screen.", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_TITLE: "Welcome to **Wumpus Land!**", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_DESCRIPTION: "Here you can meet other Wumpus fans and participate in weekly group events", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_CHANNEL_DESCRIPTION_1: "Chat about the latest Wumpus sightings", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_CHANNEL_NAME_1: "general", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_CHANNEL_DESCRIPTION_2: "Find others to hunt Wumpus together", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_CHANNEL_NAME_2: "looking-for-group", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_CHANNEL_DESCRIPTION_3: "Get the latest news about Wumpus", GUILD_SETTINGS_PUBLIC_WELCOME_EXAMPLE_CHANNEL_NAME_3: "wumpus-news", MEMBER_VERIFICATION_MODAL_TITLE: "Before you can talk here...", MEMBER_VERIFICATION_MODAL_TITLE_WITH_GUILD_NAME: "Before you can talk in !!{guildName}!!...", MEMBER_VERIFICATION_MODAL_SUBTITLE: "You’ll need to complete the required steps below.", MEMBER_VERIFICATION_MODAL_PRIVACY_DESCRIPTION: "Your email and phone number will not be shared with the community staff.", MEMBER_VERIFICATION_MODAL_PRIVACY_DESCRIPTION_EMAIL: "Your email address will not be shared with the community staff.", MEMBER_VERIFICATION_NUM_EMOJIS: "{emojis, plural, =0 {no server emoji} one {{emojis} server emoji} other {{emojis} server emoji}}", MEMBER_VERIFICATION_NUM_ONLINE: "{membersOnline, number} Online", MEMBER_VERIFICATION_NUM_MEMBERS: "{members, number} Members", MEMBER_VERIFICATION_READ_RULES: "I have read and agree to the rules", MEMBER_VERIFICATION_OTHER_RULES: "{count, plural, one {{count} other rule} other {{count} other rules}}", MEMBER_VERIFICATION_WARNING: "Make sure you have not entered your password or any other sensitive information.", MEMBER_VERIFICATION_NOTICE_TEXT: "You must complete a few more steps before you can start talking in this server.", MEMBER_VERIFICATION_CHAT_BLOCKER_TEXT: "You must complete a few more steps before you can talk.", MEMBER_VERIFICATION_NOTICE_CTA: "Complete", MEMBER_VERIFICATION_VERSION_MISMATCH_ERROR: "This server's requirements have changed. Please close this and try again.", MEMBER_VERIFICATION_FORM_INCOMPLETE: "You have not completed all the required steps.", MEMBER_VERIFICATION_MUST_READ_RULES: "You must finish reading the rules to join.", MEMBER_VERIFICATION_READ_AGREE_RULES: 'By clicking "Finish", you have read and agreed to the Server Rules.', MEMBER_VERIFICATION_CLAIM_ACCOUNT_TITLE: "Claim your account to talk in this server.", MEMBER_VERIFICATION_CLAIM_ACCOUNT_SUBTITLE: "This will also save all your messages and servers even after you close the browser.", MEMBER_VERIFICATION_CLAIM_ACCOUNT_INFO: "We will send you a verification email once you press Next. You must verify your email to continue.", MEMBER_VERIFICATION_EMAIL_CONFIRMATION_TITLE: "We've sent a confirmation link to !!{email}!!", MEMBER_VERIFICATION_EMAIL_CONFIRMATION_SUBTITLE: "Confirm the link from your email to continue verification. This page will automatically refresh.", MEMBER_VERIFICATION_EMAIL_RESEND: "Resend Confirmation Email", MEMBER_VERIFICATION_CLAIM_ACCOUNT_ICON: "User avatar icon", MEMBER_VERIFICATION_VERIFY_EMAIL_ICON: "Stylized image of a mail envelope", MEMBER_VERIFICATION_VERIFICATION_ICON: "Stylized image of a sparkle for emphasis", MEMBER_VERIFICATION_CANCEL_PENDING_APPLICATION_MODAL_TITLE: "Are you sure you want to withdraw your application?", MEMBER_VERIFICATION_CANCEL_PENDING_APPLICATION_MODAL_DESC: "If you want to join in the future, you’ll have to apply again.", MEMBER_VERIFICATION_PENDING_APPLICATION_NOTICE_TITLE: "Your application is awaiting review.", MEMBER_VERIFICATION_PENDING_APPLICATION_ICON: "Stylized image of a clipboard and pencil", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_TITLE: "Your application is pending!", MEMBER_VERIFICATION_PENDING_APPLICATION_CANCEL_MODAL_TITLE: "Are you sure you want to withdraw your application?", MEMBER_VERIFICATION_PENDING_APPLICATION_LEAVE_SERVER_MODAL_TITLE: "Are you sure you want to leave this server?", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_DESC: "You’ll get notified when there’s an update.", MEMBER_VERIFICATION_PENDING_APPLICATION_LEAVE_SERVER_MODAL_DESC: "You’ll have to resubmit your application if you want to join again in the future.", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_CONFIRM: "Got it", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_CANCEL: "Cancel Application", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_LEAVE: "Leave Server", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_WITHDRAW_AND_LEAVE: "Withdraw and Leave Server", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_DISMISS: "Never mind", MEMBER_VERIFICATION_PENDING_APPLICATION_MODAL_REAPPLY: "Reapply", MEMBER_VERIFICATION_LEAVE_APPLICATION_TITLE: "Are you sure you want to quit?", MEMBER_VERIFICATION_LEAVE_APPLICATION_DESC: "You’ll have to resubmit your application if you want to join again in the future.", MEMBER_VERIFICATION_LEAVE_APPLICATION_COMPLETE_LATER: "Complete Application Later", MEMBER_VERIFICATION_APPROVED_APPLICATION_MODAL_TITLE: "You are now a member of !!{guildName}!!!", MEMBER_VERIFICATION_APPROVED_APPLICATION_MODAL_DESC: "Hooray! It's time to talk and meet your new community.", MEMBER_VERIFICATION_APPROVED_APPLICATION_MODAL_CONFIRM: "Let's Go!", MEMBER_VERIFICATION_PROGRESS_LOST_TITLE: "Are you sure? Your progress will be lost.", MEMBER_VERIFICATION_PROGRESS_LOST_CONTINUE: "Close Anyway", MEMBER_VERIFICATION_APPLICATION_REJECTED_NOTICE_TITLE: "Your application has been rejected.", MEMBER_VERIFICATION_APPLICATION_REJECTED_TITLE: "Your application to join the server has been denied.", MEMBER_VERIFICATION_APPLICATION_REJECTED_TITLE_WITH_GUILD_NAME: "Your application to join {guildName} has been denied.", MEMBER_VERIFICATION_APPLICATION_REJECTED_REASON: "Reason:", MEMBER_VERIFICATION_APPLICATION_REAPPLY: "Reapply", MEMBER_VERIFICATION_APPLICATION_REJECTED_ICON: "Stylized image of a clipboard with an X", MEMBER_VERIFICATION_FOLDER_NAME: "Pending Applications", MEMBER_VERIFICATION_CONFIRM_LEAVE_TITLE: "Are you sure?", MEMBER_VERIFICATION_ICON_DESC: "Server Application Status", MEMBER_VERIFICATION_WARNING_UPDATE_MODAL_TITLE: "You need to update your app to join this server.", MEMBER_VERIFICATION_WARNING_UPDATE_MODAL_DESC: "If you are still seeing this screen after updating, please reach out to support.", MEMBER_VERIFICATION_WARNING_UPDATE: "Update", MEMBER_VERIFICATION_ON: "On", MEMBER_VERIFICATION_OFF: "Off", MEMBER_VERIFICATION_AUTOMATIC_DISABLED: "Members won’t see the requirements until you enable Rules Screening.", MEMBER_VERIFICATION_AUTOMATIC_ENABLED: "New members must accept the rules to talk in the server.", MEMBER_VERIFICATION_MANUAL: "Members won’t see the application until you enable Member Application.", MEMBER_VERIFICATION_AUTOMATIC_WARNING: "You currently have no rules, which means new members will just see an empty pop-up.", WELCOME_MESSAGE_TITLE_CHANNEL: "Welcome to !!{channelName}!!!", ANDROID_WELCOME_MESSAGE_TITLE_CHANNEL: "Welcome to #!!{channelName}!!!", WELCOME_MESSAGE_SUBTITLE_CHANNEL: "This is the start of the !!{channelName}!! channel.", ANDROID_WELCOME_MESSAGE_SUBTITLE_CHANNEL: "This is the start of the #!!{channelName}!! channel.", WELCOME_MESSAGE_EDIT_CHANNEL: "Edit channel", WELCOME_CTA_TITLE: "Welcome to\n\n!!{guildName}!!", WELCOME_CTA_TITLE_MOBILE: "Welcome to !!{guildName}!!", WELCOME_CTA_SUBTITLE_OWNER: "This is your brand new, shiny server.", WELCOME_CTA_SUBTITLE_MEMBER: "This is a brand new, shiny server.", WELCOME_CTA_SUBTITLE_EXISTING_SERVER: "This is the beginning of this server.", WELCOME_CTA_SUBTITLE_ACTION_WITH_GUIDE: "Here are some steps to help you get started. For more, check out our [Getting Started guide]({guideURL}).", WELCOME_CTA_INVITE_TITLE: "Invite your friends", WELCOME_CTA_MESSAGE_TITLE: "Send your first message", WELCOME_CTA_PERSONALIZE_TITLE: "Personalize your server with an icon", WELCOME_CTA_PERSONALIZE_TITLE_MOBILE: "Personalize your server", WELCOME_CTA_DOWNLOAD_TITLE: "Download the Discord App", WELCOME_CTA_BOOSTING: "Upgrade your server with Boosts", WELCOME_CTA_BOOSTING_PROGRESS_BAR: "Wanna make hangouts more fun?", WELCOME_CTA_BOOSTING_PROGRESS_BAR_SUBTITLE: "Boost to Level 1 and gain perks for everyone. Turn on the Boost progress bar to get support from your server. [Learn more](onClick)", WELCOME_CTA_BOOSTING_AWARENESS_TITLE: "Get server flair with Boosting", WELCOME_CTA_BOOSTING_AWARENESS_SUBTITLE: "Servers who reach Boosting Level 1 and above get unique invite embeds with custom Server Invite Backgrounds. [Learn more.](onClick)", WELCOME_CTA_BOOSTING_PURCHASE_MODAL_TITLE: "Get to the next level", WELCOME_CTA_APPS_RECOMMENDATION_TITLE: "Add your first app", GUILD_RULES_HEADER: "Server Rules", GUILD_RULES_SUBHEADER: "By participating in this server, you have read and agreed to the server's rules.", GUILD_RULES_EDIT_LINK: "Edit Server Rules", GUILD_RULES_INVALID_CHANNEL: "Invalid server rules channel", DISCOVER: "Discover", AVATAR_UPLOAD_EDIT_MEDIA: "Edit Image", AVATAR_UPLOAD_CANCEL: "Cancel", AVATAR_UPLOAD_APPLY: "Apply", AVATAR_UPLOAD_SKIP: "Skip", AVATAR_IN_ONBOARDING_MODAL_TITLE: "Choose profile picture", AVATAR_IN_ONBOARDING_MODAL_SUBTITLE: "Choose a photo that represents you!", AVATAR_IN_ONBOARDING_DEFAULT_SELECT_SUBTITLE: "or choose a Discord avatar", AVATAR_IN_ONBOARDING_SELECT_DEFAULT_AVATAR: "Select default avatar", AVATAR_IN_ONBOARDING_SKIP_STEP_ALERT_TITLE: "Skip uploading a picture?", AVATAR_IN_ONBOARDING_SKIP_STEP_ALERT_SUBTITLE: "You can always upload a profile picture later within Settings.", AVATAR_IN_ONBOARDING_ADD_PICTURE_CTA: "Add profile picture", AVATAR_IN_ONBOARDING_SKIP_FOR_NOW: "Skip for now", AVATAR_IN_ONBOARDING_FILE_TYPE_ERROR: "Please upload a JPG or PNG file.", AVATAR_IN_ONBOARDING_SELECT_DEFAULT_AVATAR_A11Y_LABEL: "Default Avatar {index}, {description}", DEFAULT_AVATAR_1_A11Y_LABEL: "a character with an Apple shaped head with a yellow shirt, head in hands, making a kissing face", DEFAULT_AVATAR_2_A11Y_LABEL: "a character with pink skin and a purple mohwak, wearing a purple jacket and drinking from a blue straw", DEFAULT_AVATAR_3_A11Y_LABEL: "a yellow bunny character wearing large orange glasses", DEFAULT_AVATAR_4_A11Y_LABEL: "a character with green skin drinking from a pink straw and wearing a blue gaming headset", DEFAULT_AVATAR_5_A11Y_LABEL: "a character with blue skin with a large smile, wearing a pink baseball cap", DEFAULT_AVATAR_6_A11Y_LABEL: "a yellow bird character with a long neck, wearing a blue shirt and small black sunglasses", DEFAULT_AVATAR_7_A11Y_LABEL: "a purple speaker shaped character with one large eye, smiling", DEFAULT_AVATAR_8_A11Y_LABEL: "a character with blue skin and yellow lips, looking suspicious, with a pink book on their head", DISCOVERABILITY_LANDING_TITLE: "Help your friends find you", DISCOVERABILITY_LANDING_SUBTITLE: "Let people who have your email address or phone number search for you on Discord.", DISCOVERABILITY_LANDING_TOGGLE_LABEL: "Allow search by email/number", DISCOVERABILITY_LANDING_INFO: "Allow someone to search for you if they have your phone number and/or email. This can be changed anytime in settings.", DISCOVERABILITY_LANDING_INFO_SETTINGS: "This can be changed anytime in Settings.", DISCOVERABILITY_LEARN_MORE_REDESIGN: "$[Learn more](learnMoreHook)", DISCOVERABILITY_LEARN_MORE: "$[Learn More](learnMoreHook)", DISCOVERABILITY_ALLOW_FIND_ME: "Allow people to find me", LAUNCH_WELCOME_LANDING_TITLE: "We've improved our mobile app!", LAUNCH_WELCOME_LANDING_SUBTITLE: "Choose a theme to get started.", LAUNCH_WELCOME_LEARN_MORE: "[Learn more here]({learnMoreUrl})", LAUNCH_WELCOME_NUX_TITLE: "Your DMs live here now!", LAUNCH_WELCOME_NUX_SUBTITLE: "Tap anywhere to dismiss.", LAUNCH_WELCOME_CHOOSE_A_THEME: "Choose a theme", APP_THEME: "App Theme", CHANNEL_PREVIEW_A11Y_LABEL: "App preview, with your theme applied", THEME_PICKER_MESSAGE_AUTHOR_1: "Nelly", THEME_PICKER_MESSAGE_PREVIEW_1: "Enjoy your trip to spain!", THEME_PICKER_MESSAGE_AUTHOR_2: "bio study group", THEME_PICKER_MESSAGE_PREVIEW_2: "graggle: Can someone explain #4?", THEME_PICKER_MESSAGE_AUTHOR_3: "phibi", THEME_PICKER_MESSAGE_PREVIEW_3: "I'll add them to the server", THEME_PICKER_MESSAGE_AUTHOR_4: "Dodgeball", THEME_PICKER_MESSAGE_PREVIEW_4: "cap: Registration opens on the third!", THEME_PICKER_MESSAGE_AUTHOR_5: "mac", THEME_PICKER_MESSAGE_PREVIEW_5: "What time should we start tonight?", THEME_PICKER_MESSAGE_AUTHOR_6: "Wumpus and Locke", THEME_PICKER_MESSAGE_PREVIEW_6: "Locke: okay I'll see you there", THEME_PICKER_MESSAGE_AUTHOR_7: "amanda", THEME_PICKER_MESSAGE_PREVIEW_7: "ok", THEME_PICKER_MESSAGE_AUTHOR_8: "Wumpus", THEME_PICKER_MESSAGE_PREVIEW_8: "let's play on saturday!", THEME_PICKER_MESSAGE_AUTHOR_9: "olive", THEME_PICKER_MESSAGE_PREVIEW_9: "yeppers", THEME_PICKER_MESSAGE_AUTHOR_10: "tofu", THEME_PICKER_MESSAGE_PREVIEW_10: "lmk if you need another for the group", THEME_PICKER_ACTIVITY_TITLE_1: "Mallow, Cap, and 3 others", THEME_PICKER_ACTIVITY_TITLE_2: "locke, mallow, and graggle", THEME_PICKER_SAMPLE_CHANNEL_NAME: "the-couch", THEME_PICKER_SAMPLE_ACTIVITY_NAME: "SketchHeads", THEME_PICKER_NITRO_ONLY: "This theme is available to Nitro users only.", THEME_PICKER_SYNC_APPEARANCE_HINT: "This will change the theme across all your devices.", THEME_PICKER_YOU_CAN_CHANGE_THIS_LATER: "You can always change this later!", AGE_GATE_GO_BACK: "Go back", AGE_GATE_SUBMIT: "Submit", AGE_GATE_AGE_VERIFIED_BODY: "Thank you for verifying your age. This helps us to keep Discord safe.", AGE_GATE_HEADER: "Enter your birthday", AGE_GATE_DATE_OF_BIRTH: "Date of birth", AGE_GATE_DATE_OF_BIRTH_A11Y_HINT: "Tap to open date picker", AGE_GATE_UNDERAGE_HEADER: "Unable to register", AGE_GATE_UNDERAGE_BODY_POST_REGISTER_MESSAGE: "Based on the information you provided, we can’t create an account for you right now.", AGE_GATE_UNDERAGE_BODY_DEFAULT_REG_MESSAGE: "You must be at least 13 years old to use Discord.", AGE_GATE_UNDERAGE_BODY: "{underageMessage} [View our help article]({helpURL}) to learn more.", AGE_GATE_UNDERAGE_BACK_TO_LOGIN: "Back to Login", AGE_GATE_VIEW_HELP_ARTICLE: "View Help Article", AGE_GATE_INVALID_BIRTHDAY: "Please enter a valid date of birth", AGE_GATE_YOUR_BIRTHDAY: "Your birthday", AGE_GATE_EXISTING_HEADER: "Help us keep Discord safe", AGE_GATE_FAMILY_CENTER_HEADER: "Please confirm your age", AGE_GATE_BODY: "To keep our users safe, we need to verify your age. We will only ask you for this once. [Why do I need to provide my birthday?]({helpURL})", AGE_GATE_NSFW_BODY: "Before you can view this age-restricted channel, we need to verify your age. We will only ask you for this once. [Why do I need to provide my birthday?]({helpURL})", AGE_GATE_DEEP_LINK_BODY: "We need to verify your age. [Why do I need to provide my birthday?]({helpURL})", AGE_GATE_FAMILY_CENTER_BODY: "Before you can use Family Center, we need to verify your age so we can show you the appropriate experience. We will only ask you for this once.", AGE_GATE_UNDERAGE_EXISTING_HEADER: "Sorry, there's an issue.", AGE_GATE_UNDERAGE_EXISTING_BODY_DELETION: "You have **14 days** to verify your age before your account will be deleted. Check your email for instructions on verifying your age.", AGE_GATE_UNDERAGE_EXISTING_BODY_DELETION_WITH_DAYS: "You have **{days, plural, =1 {1 day} other {{days} days}}** to verify your age before your account will be deleted. Check your email for instructions on verifying your age.", AGE_GATE_AGE_VERIFIED: "Age Verified", AGE_GATE_FAILED_TO_UPDATE_BIRTHDAY: "Failed to verify your birthday, please try again", AGE_GATE_NSFW_UNDERAGE_HEADER: "Sorry, you're not old enough to view this age-restricted channel", AGE_GATE_NSFW_UNDERAGE_BODY: "You need to be 18 or older in order to view age-restricted channels on Discord. [View our help article]({helpURL}) on age verification.", AGE_GATE_NSFW_DESCRIPTION: "This channel contains adult content marked as age-restricted. Do you wish to proceed?", AGE_GATE_CONFIRM_HEADER: "You submitted that you're {age, plural, =1 {1 year old} other {{age} years old}}. Is that correct?", AGE_GATE_CONFIRM_GO_BACK: "Go back", AGE_GATE_CONFIRM_BUTTON: "Confirm age", AGE_GATE_DOB_DAY: "Day", AGE_GATE_DOB_MONTH: "Month", AGE_GATE_DOB_YEAR: "Year", NSFW_GUILD_HEADER: "Age-restricted server", NSFW_GUILD_DESCRIPTION: "Sorry, age-restricted servers are blocked on the iOS platform per App Store guidelines. If you're over 18 you can join on the desktop app or website.", NSFW_GUILD_DESCRIPTION_MORE: "Read more at our [Help Center]({helpURL}).", NSFW_GUILD_CLOSE: "Got it", NSFW_GUILD_SIDEBAR_HEADER: "Age-restricted server", NSFW_GUILD_SIDEBAR_DESCRIPTION: "Age-restricted servers are blocked on the iOS platform per App Store guidelines. [Visit our Help Center]({helpURL}) to learn more.", NSFW_CHANNEL_HEADER: "Unavailable", NSFW_GUILD_EMOJI_UNAVAILABLE: "Emoji from this server are unavailable", NSFW_GUILD_STICKERS_UNAVAILABLE: "Stickers from this server are unavailable", NSFW_GUILD_CHANNEL_DESCRIPTION: "This server's content is unavailable on iOS", NSFW_GUILDS_TOGGLE_HEADER: "Allow access to age-restricted servers on iOS", NSFW_GUILDS_TOGGLE_CAPTION: "After joining on desktop, view your servers for people 18+ on iOS devices.", NSFW_DM_COMMANDS_HEADER: "Allow access to age-restricted commands from apps in Direct Messages", NSFW_DM_COMMANDS_CAPTION: "This setting applies to all apps. Allows people 18+ to access commands marked as age-restricted in DMs", MULTI_ACCOUNT_LOGIN_TITLE: "Add Account", MULTI_ACCOUNT_LOGIN_SUBTITLE: "Logging in to another account will let you easily switch between accounts on this device.", MULTI_ACCOUNT_MAX_ACCOUNTS_ERROR: "Sorry, you can only add {maxNumAccounts, number} accounts.", MULTI_ACCOUNT_ANNOUNCEMENT_TOOLTIP_TITLE: "New: Account Switching", MULTI_ACCOUNT_ANNOUNCEMENT_SUBTITLE: "Now you can easily switch between your main account and up to {maxAltAccounts, number} alts.", MULTI_ACCOUNT_GOODBYE_TITLE: "Account Switching Ends Soon", MULTI_ACCOUNT_GOODBYE_SUBTITLE: "The beta test is ending and we'll be turning off the account switcher shortly. Be sure to switch back to your primary account to stay signed in.", MULTI_ACCOUNT_GOODBYE_THANKS: "Thanks again for trying it out!", MULTI_ACCOUNT_GOODBYE_BUTTON: "Ok, will do", MULTI_ACCOUNT_LOGGED_OUT: "{username} logged out", MULTI_ACCOUNT_MENU_LABEL: "Account Actions", SWITCH_ACCOUNTS_MENU_ITEM_TITLE: "Switch Accounts", SWITCH_ACCOUNTS_MANAGE_ACCOUNTS: "Manage Accounts", SWITCH_ACCOUNTS_MODAL_SUBHEADER: "Switch accounts, sign in, sign out, go wild.", SWITCH_ACCOUNTS_ADD_AN_ACCOUNT_BUTTON: "Add an account", SWITCH_ACCOUNTS_ACTIVE_ACCOUNT: "Active account", SWITCH_ACCOUNTS_ACTION_LOG_IN: "Log in", SWITCH_ACCOUNTS_ACTION_SWITCH: "Switch", SWITCH_ACCOUNTS_CHOOSE_ACCOUNT: "Choose an account", SWITCH_ACCOUNTS_CHOOSE_ACCOUNT_HELPER: "Select an account to log in with or add a new one.", SWITCH_ACCOUNTS_REMOVE_ACCOUNT: "Log out", SWITCH_ACCOUNTS_MANAGE_ACCOUNT: "Manage account", SWITCH_ACCOUNTS_INVALID_TOKEN: "Please log in again.", MULTI_ACCOUNT_SERVER_INVITE_JOINING_AS: "Joining as", SWITCH_ACCOUNTS_TOAST_LOGIN_SUCCESS: "Switched to {username}", SWITCH_ACCOUNTS_TOAST_LOGIN_ERROR: "Switch failed, sorry :(", MULTI_ACCOUNT_MAX_ACCOUNTS_ALERT_TITLE: "Account limit reached", MULTI_ACCOUNT_MAX_ACCOUNTS_ALERT_BODY: "You can switch between up to {maxNumAccounts, number} accounts. Remove an account first to add a new one.", MULTI_ACCOUNT_REMOVE_ACCOUNT_ALERT_TITLE: "Remove this account?", MULTI_ACCOUNT_REMOVE_ACCOUNT_ALERT_BODY: "You'll have to log in to !!{username}!! again later.", MULTI_ACCOUNT_CHANGE_ACCOUNT_A11Y_HINT: "double tap to switch accounts", MULTI_ACCOUNT_SWITCHING_ACCOUNTS: "Switching accounts...", MULTI_ACCOUNT_TAB_A11Y_ACTION: "Switch accounts", NUF_CHANNEL_PROMPT_TITLE: "Start a conversation", NUF_CHANNEL_PROMPT_SUBTITLE: "Let's get you ready to talk.\n What's a topic your group likes?", NUF_CHANNEL_PROMPT_TOPIC: "Topic", NUF_CHANNEL_PROMPT_CTA: "Take me to my server!", NUF_CHANNEL_PROMPT_CHANNEL_TOPIC_TEMPLATE: "This is a good place to talk about !!{topic}!!", NUF_CHANNEL_PROMPT_TOPIC_PLACEHOLDER: "Drawing, climbing, memes, etc.", EMOJI_TOOLTIP_CLICK_CTA: "Click to learn more", EMOJI_POPOUT_UNJOINED_GUILD_EMOJI_DESCRIPTION: "Get this emoji from", EMOJI_POPOUT_JOINED_GUILD_EMOJI_DESCRIPTION: "This emoji is from", EMOJI_POPOUT_PREMIUM_CURRENT_GUILD_DESCRIPTION: "This emoji is from this server. You can use it everywhere.", EMOJI_POPOUT_PREMIUM_JOINED_GUILD_DESCRIPTION: "This emoji is from one of your servers. Type its name in the chat bar to use it.", EMOJI_POPOUT_PREMIUM_UNJOINED_DISCOVERABLE_GUILD_DESCRIPTION: "Want to use this emoji everywhere? Join the server.", EMOJI_POPOUT_PREMIUM_UNJOINED_PRIVATE_GUILD_DESCRIPTION: "This emoji is from a server that is either invite-only or unavailable.", EMOJI_POPOUT_CURRENT_GUILD_DESCRIPTION: "This emoji is from this server. Get Nitro to use it everywhere.", EMOJI_POPOUT_JOINED_GUILD_DESCRIPTION: "This emoji is from one of your servers. Get Nitro to use it everywhere.", EMOJI_POPOUT_ADDED_PACK_DESCRIPTION: "This emoji is from one of your packs. Type its name in the chat bar to use it.", EMOJI_POPOUT_UNJOINED_DISCOVERABLE_GUILD_DESCRIPTION: "Want to use this emoji everywhere? Get Nitro and join the server.", EMOJI_POPOUT_UNJOINED_PRIVATE_GUILD_DESCRIPTION: "This emoji is from a server that is either invite-only or unavailable. [Learn more](openPremiumSettings) about using custom emoji.", STICKER_POPOUT_UNJOINED_GUILD_EMOJI_DESCRIPTION: "Get this sticker from", STICKER_POPOUT_JOINED_GUILD_EMOJI_DESCRIPTION: "This sticker is from", STICKER_POPOUT_PREMIUM_CURRENT_GUILD_DESCRIPTION: "This sticker is from this server. You can use it everywhere.", STICKER_POPOUT_PREMIUM_JOINED_GUILD_DESCRIPTION: "This sticker is from one of your servers. Type its name in the chat bar to use it.", STICKER_POPOUT_PREMIUM_UNJOINED_DISCOVERABLE_GUILD_DESCRIPTION: "Want to use this sticker everywhere? Join the server.", STICKER_POPOUT_PREMIUM_UNJOINED_PRIVATE_GUILD_DESCRIPTION: "This sticker is from a server that is either invite-only or unavailable.", STICKER_POPOUT_CURRENT_GUILD_DESCRIPTION: "This sticker is from this server. Get Nitro to use it everywhere.", STICKER_POPOUT_JOINED_GUILD_DESCRIPTION: "This sticker is from one of your servers. Get Nitro to use it everywhere.", STICKER_POPOUT_UNJOINED_DISCOVERABLE_GUILD_DESCRIPTION: "Want to use this sticker everywhere? Get Nitro and join the server.", STICKER_POPOUT_UNJOINED_PRIVATE_GUILD_DESCRIPTION: "This sticker is from a server that is either invite-only or unavailable. [Learn more](openPremiumSettings) about using custom stickers.", STICKER_POPOUT_JOIN_SERVER: "Join Server", STICKER_POPOUT_PUBLIC_SERVER: "Discoverable Server", STICKER_POPOUT_PRIVATE_SERVER: "Invite-only server", STICKER_POPOUT_SHOW_MORE_STICKERS: "Show More Stickers", EMOJI_POPOUT_PREMIUM_CTA: "Get Nitro", EMOJI_POPOUT_SHOW_MORE_EMOJIS: "Show More Emoji", EMOJI_POPOUT_PUBLIC_SERVER: "Discoverable Server", EMOJI_POPOUT_PRIVATE_SERVER: "Invite-only server", EMOJI_POPOUT_STANDARD_EMOJI_DESCRIPTION: "A default emoji. You can use this emoji everywhere on Discord.", TEST_NEWLINES_KEY: "\nThis is a test string, let's see if we can preserve newlines.\n\n ", POLLS_MARKETING_EASTER_EGG_PIZZA_EMOJI_DESCRIPTION: "{emojiName} (without pineapple)", POLLS_MARKETING_EASTER_EGG_LOADING_LINE: "Statistically speaking, the majority of Discord users believe that pineapple and pizza is the most cursed food combo. Thank our Polls feature launch for this Discord Fact™.", LOADING_DID_YOU_KNOW: "Did you know", LOADING_LINE_1: "Discord was almost called Bonfire before we picked our name. It was meant to be nice and cozy.", LOADING_LINE_2: "Discord was almost called Wyvern before we picked our name. Not too proud of that one.", LOADING_LINE_4: 'There are a bunch of hidden "Easter Eggs" in the app that happen when you click certain things...', LOADING_LINE_5: "Discord started as a game company making a mobile game called Fates Forever.", LOADING_LINE_6: "Discord’s official birthday is May 13, 2015.", LOADING_LINE_7: "We came up with the idea of Discord Nitro over morning breakfast potatoes.", LOADING_LINE_8: "Our mascot, Wumpus, was originally created as a character with no friends :(", LOADING_LINE_9: "In Discord's early days, light theme was the only theme. Dark theme didn't arrive until August 2015.", LOADING_LINE_10: "In the ancient days, Discord started as a browser-only app.", LOADING_LINE_11: "Our HypeSquad program has three houses you can be sorted in to by taking the in-app quiz: Bravery, Balance, and Brilliance.", LOADING_LINE_12: "The character on our 404 page is a robot hamster named Nelly.", LOADING_LINE_13: "You can play our version of the Snake game on our 404 page by pressing a ~secret~ button.", LOADING_LINE_14: "There's a very small—and we mean small—chance you can get a secret ringtone when calling someone. Good luck!", LOADING_LINE_15: "Our old Partner mascot was an elf named Springle. He recently retired.", LOADING_KEYBIND_TIP_1: "$[](quickSwitcherHook) to quickly find a previous conversation or channel.", LOADING_KEYBIND_TIP_2: "$[](markUnreadHook) a message to mark it as unread.", LOADING_KEYBIND_TIP_3: "$[](markServerUnreadHook) to mark an entire server as read.", LOADING_KEYBIND_TIP_4: "$[](navigateUnreadHook) or $[](downHook) will navigate between unread channels", LOADING_KEYBIND_TIP_5: "Use $[](keyboardShortcutsHook) to bring up the list of keyboard shortcuts.", LOADING_KEYBIND_TIP_6: "$[](messageNewlineHook) to make a new line without sending your message.", LOADING_KEYBIND_TIP_7: "Holding $[](shiftHook) while clicking emoji allows you to send multiple emoji.", LOADING_KEYBIND_TIP_8: "You can press $[](upHook) to quickly edit your most recent message.", LOADING_TIP_1: "You can use Streamer Mode to hide personal details while streaming.", LOADING_TIP_2: "You can type /tableflip and /unflip to spice up your messages.", LOADING_TIP_3: "Characters like @, #, !, and * will narrow Quick Switcher results.", LOADING_TIP_4: "Click a server name in the emoji picker to hide that server's emoji.", LOADING_TIP_5: "Hover a GIF and click the star to save it to your favorites.", LOADING_TIP_6: "The top-most role for a user defines that user's color.", LOADING_TIP_7: "A red mic icon means that person has been muted by a server admin.", LOADING_TIP_8: "You can temporarily mute a server or channel by right-clicking it.", LOADING_TIP_9: "Click your avatar in the lower-left corner to set a custom status.", LOADING_TIP_10: "Group DMs can have up to ten members.", LOADING_TIP_11: "Click the compass in your server list to find new servers.", LOADING_TIP_12: "Drag and drop servers on top of each other to create server folders.", LOADING_TIP_13: "Type /gif or /tenor + anything to find a GIF for that topic!", LOADING_TIP_14: "Share what you're playing by using the Game Activity settings.", LOADING_TIP_15: "Highlight text in your chat bar to bold, use italics, and more.", LOADING_TIP_16: "Hide muted channels in a server by right clicking the server name.", LOADING_TIP_17: "Customize Discord's appearance in the user settings menu.", LOADING_TIP_18: "Link your favorite social media accounts in the connections settings.", LOADING_TIP_19: "You can create channel categories to group and organize your channels.", LOADING_TIP_20: "You can join up to 100 servers, and up to 200 with Nitro!", LOADING_TIP_21: "You can drag and drop files onto Discord to upload them.", LOADING_TIP_22: "Change each participant's volume by right-clicking them in a call.", LOADING_TIP_23: "Right click to pin messages in a channel or DM to save them for later.", LOADING_TIP_24: "Type a plus sign before an emoji name to turn it into a reaction.", LOADING_TIP_25: "You can type /nick to quickly change your nickname in a server.", LOADING_TIP_26: "You can type / to view bot commands and other built-in commands", LOADING_TIP_27: "You can type !!{asterisks}!! around your words to make them **bold**.", HALLOWEEN_LOADING_TEXT_1: "happy halloween make sure to bring your server back from the dead", HALLOWEEN_LOADING_TEXT_2: "oooOOOooO have a very spoopy halloween season", HALLOWEEN_LOADING_TEXT_3: "Brewing up a bone-chilling ringtone", HALLOWEEN_LOADING_TEXT_4: "BoooOOOOooOo0o", HALLOWEEN_LOADING_TEXT_5: "In voice chat, everyone is a spirit", HALLOWEEN_LOADING_TEXT_6: "Verifying your servers aren't haunted (probably)", HALLOWEEN_LOADING_TEXT_7: "We’re getting into the “spirit” of Halloween", HALLOWEEN_LOADING_TEXT_8: "Do zombies only post dead memes?", HALLOWEEN_LOADING_TEXT_9: "Discord is getting infected! Watch out for Zombie Wumpus", ACCESSIBILITY_LOADING_TIP_1: "Pick light or dark theme in Appearance Settings.", ACCESSIBILITY_LOADING_TIP_2: "Turn off animations with Reduced Motion in Accessibility Settings.", ACCESSIBILITY_LOADING_TIP_3: "Change Text-to-Speech speed in Accessibility Settings.", ACCESSIBILITY_LOADING_TIP_4: "Make images accessible to everyone. Add a description on upload.", ACCESSIBILITY_LOADING_TIP_5: "Make roles with unique colors easier to read in Accessibility Settings.", ACCESSIBILITY_LOADING_TIP_6: "No mouse? Use Keyboard Mode to get around. $[](tabHook) to get started.", ACCESSIBILITY_LOADING_TIP_7: "No keyboard? Enable the Send Message button in Accessibility Settings to chat.", ACCESSIBILITY_LOADING_TIP_8: "Adjust color saturation in Accessibility Settings.", ACCESSIBILITY_LOADING_TIP_9: "Scale chat font size in Appearance Settings.", ACCESSIBILITY_LOADING_TIP_10: "Jump to different sections of Discord with $[](F6Hook). $[](tabHook) to get started.", VOICE_PANEL_EMPTY_SUBTITLE: "No one’s here yet!\nWhen you are ready to talk, just hop in.", VOICE_PANEL_STREAM_PREVIEW_HEADER: "{username}'s stream", VOICE_PANEL_INTRODUCTION_HEADER: "Welcome to your first voice channel!", VOICE_PANEL_INTRODUCTION_TEXT: "Control your voice settings, turn on video, or start screensharing here.", VOICE_PANEL_INTRODUCTION_CLOSE: "Got it", VOICE_PANEL_SHOW_VOICE_USERS: "Show Voice Users", VOICE_PANEL_USERS_A11Y_LABEL: "Voice Users", VOICE_PANEL_USER_A11Y_DEAFENED_LABEL: "{username}, deafened and muted", VOICE_PANEL_USER_A11Y_MUTED_LABEL: "{username}, muted", VOICE_PANEL_SHOW_EXTRAS: "Show All Users", VOICE_PANEL_HIDE_EXTRAS: "Minimize", VOICE_PANEL_USER_TOOLTIP: "!!{userName}!!, {status}", VOICE_PANEL_PEOPLE_IN_VOICE: "{n, plural, one {1 Person} other {{n} People}} in Voice", VOICE_PANEL_NAVIGATE_TO_PIP_A11Y_LABEL: "Minimize to PIP", VOICE_PANEL_NAVIGATE_TO_GRID_A11Y_LABEL: "View voice grid", VOICE_PANEL_HEADER_ACCESSIBILITY_HINT: "Double-tap for Settings", VOICE_PANEL_OVERVIEW_HEADER_2_PEOPLE: "{user1} and {user2}", VOICE_PANEL_OVERVIEW_HEADER_3_OR_MORE_PEOPLE: "{user1}, {user2}, and {numPeople, plural, =1 {1 other} other {{numPeople} others}}", VOICE_PANEL_CUSTOMIZE_BACKGROUND_TITLE: "Customize Call Background", VOICE_PANEL_CUSTOMIZE_BACKGROUND_SUBTITLE: "Set background for everyone in the call", VOICE_PANEL_CHANNEL_SETTINGS_SUBTITLE: "Edit preferences for this shared space", VOICE_PANEL_VOICE_SETTINGS_SUBTITLE: "Adjust your personal voice & video settings", VOICE_PANEL_DEAFEN_SUBTITLE: "Disables all sound", VOICE_PANEL_ONLY_SHOW_VIDEO_TITLE: "Only Show Videos", VOICE_PANEL_ONLY_SHOW_VIDEO_SUBTITLE: "We won't show non-video participants", VOICE_PANEL_CHANGE_BACKGROUND_TITLE: "Change Background", VOICE_PANEL_CHANGE_BACKGROUND_SUBTITLE: "Set background for everyone", VOICE_PANEL_CHANGE_BACKGROUND_FOOTER: "This background will be shown to everyone after saving.", VOICE_PANEL_CHANGE_BACKGROUND_SUBTITLE_DISABLED: "Voice backgrounds are currently disabled in your settings.", VOICE_PANEL_LOAD_MORE: "Load more", VOICE_PANEL_NO_JOIN_PERMISSIONS_ALERT_TITLE: "You don’t have permission to join this Voice Channel.", VOICE_PANEL_NO_JOIN_PERMISSIONS_ALERT_SUBTITLE: "This channel is only for selected members and roles.", VOICE_PANEL_MAX_CAPACITY_ALERT_TITLE: "This channel is full", VOICE_PANEL_MAX_CAPACITY_ALERT_SUBTITLE: "Only {count, plural, =1 {# person} other {# people}} can join this voice channel.", VOICE_PANEL_AUDIO_SELECTOR_PHONE: "This Phone", VOICE_PANEL_AUDIO_SELECTOR_EXTERNAL: "External Device", VOICE_PANEL_FLOATING_CTA_INVITE_LABEL: "Add people to Voice Chat", VOICE_PANEL_FLOATING_CTA_INVITE_SUBLABEL: "Let the group know you are here!", VOICE_PANEL_BAD_CONNECTION_CTA_LABEL: "Somone has a weak connection", VOICE_PANEL_BAD_CONNECTION_CTA_SUB_LABEL: "Some participants will be audio only.", VOICE_PANEL_FOR_DEVELOPERS: "For Developers", VOICE_PANEL_SCREENSHARE_SHORTCUTS: "Screen Share Shortcuts", VOICE_PANEL_HIDE_DRAWER: "Hide Drawer", VOICE_PANEL_SHOW_DRAWER: "Show Settings Drawer", NUF_DESKTOP_TEMPLATES_TITLE: "Create Your First Discord Server", NUF_DESKTOP_TEMPLATES_SUBTITLE: "Your server is where you and your friends hang out.\n Make yours and start talking.", TOO_MANY_USER_GUILDS_TITLE_2: "You are at the {quantity, number} server limit.", TOO_MANY_USER_GUILDS_DESCRIPTION: "You must leave a server first to join.", ONGOING_CALL_TAP_TO_JOIN: " — Tap to join", CALL_ENDED_DESCRIPTION: "!!{duration}!! — !!{timestamp}!!", CALL_MOBILE_TAP_TO_RETURN: "!!{callState}!! — Tap to return to call", TOO_MANY_USER_GUILDS_ALERT_TITLE: "Oh no!", TOO_MANY_USER_GUILDS_ALERT_DESCRIPTION: "You are at the {quantity, number} server limit. You must leave a server first to join.", MESSAGES_FAILED_TO_LOAD: "Messages failed to load", MESSAGES_FAILED_TO_LOAD_TRY_AGAIN: "Try Again", BUILD_OVERRIDE_MODAL_INVITE: "You have been invited to try a test build of Discord", BUILD_OVERRIDE_MODAL_APPLY: "Okay let's try it!", BUILD_OVERRIDE_MODAL_EXPIRES_DURATION: "expires in {expirationDuration}", BUILD_OVERRIDE_MODAL_INVALID: "This link is no longer valid.", BUILD_OVERRIDE_MODAL_INVALID_BUTTON: "Continue to Discord", APPLICATION_COMMAND: "Slash Command", COPY_COMMAND: "Copy Command", OPTIONAL_APPLICATION_COMMAND_INDICATOR: "optional", APPLICATION_COMMAND_SENDING: "Sending command...", APPLICATION_COMMAND_WAITING: "!!{applicationName}!! is thinking...", APPLICATION_COMMAND_FAILED: "This interaction failed", APPLICATION_COMMAND_TIMED_OUT: "The application did not respond", APPLICATION_COMMAND_USED: "$[](userHook) used $[](commandHook) with $[](applicationHook)", APPLICATION_COMMAND_USED_SHORT: "$[](userHook) used $[](commandHook)", APPLICATION_COMMAND_USED_MOBILE: "[!!{username}!!](handleTapUsername) used [!!{commandName}!!](handleTapCommandName) with [!!{applicationName}!!](handleTapApplicationName)", APPLICATION_COMMAND_USED_MOBILE_SHORT: "[!!{username}!!](usernameOnClick) used [!!{commandName}!!](commandNameOnClick)", APPLICATION_COMMAND_AUTOCOMPLETE_NO_OPTIONS: "No options match your search", APPLICATION_COMMAND_AUTOCOMPLETE_FAILED: "Loading options failed", APPLICATION_COMMAND_NO_PERMISSIONS: "You don't have permission to use any commands from **!!{applicationName}!!**", APPLICATION_COMMAND_NO_COMMANDS: "No Commands Available", APPLICATION_COMMAND_EDUCATION: "Try slash commands! A new way to use apps by typing slash. [Dismiss](dismissOnClick)", APPLICATION_COMMAND_FILE_ATTACHMENT: "Please attach a file", APPLICATION_COMMAND_MENTION_CONFIRM_HEADER: "Clear message?", APPLICATION_COMMAND_MENTION_CONFIRM_BODY: "Looks like you've already written something. Do you want to clear it and use a command?", APPLICATION_COMMAND_USER_INSTALL_EDUCATION: "You can use this app anywhere on Discord. Responses are visible only to you in servers with over {betaUserLimit} people.", APPLICATION_COMMAND_USER_INSTALL_EDUCATION_MOBILE: "App will respond to you privately", APPLICATION_COMMAND_USER_INSTALL_BETA_EPHEMERAL: "Only you can see this message during beta.\n\n[Why am I seeing this?]({learnMoreUrl}) • [Dismiss](handleDelete)", APPLICATION_COMMAND_USER_INSTALL_BETA_EPHEMERAL_MOBILE: "Only you can see this message during beta • [Dismiss](handleDelete)", APPLICATION_COMMAND_USER_INSTALL_VIEW_HELP_ARTICLE: "View Help Article", APPLICATION_COMMAND_USER_INSTALL_LEARN_MORE: "[Learn More]({learnMoreUrl})", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_WITH_REASON: "Only you can see this message.\n\n{reason} • [Dismiss](handleDelete)", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_WITH_REASON_MOBILE: "Only you can see this message.\n{reason} • [Dismiss](handleDelete)", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_SEND: "Message Cannot be Sent", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_USE_COMMAND: "You cannot use this command in this channel", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_AUTOMOD_BLOCKED: "This message was blocked by AutoMod. The message may also be viewed by the community owners.", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_HARMFUL_LINK: "This message contains a link blocked by Discord.", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_BETA: "Only you can see this message during beta", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_UNKNOWN: "An unknown error occurred", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_FEATURE_LIMITED: "This feature is temporarily limited", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_GUILD_FEATURE_LIMITED: "This feature is temporarily limited for this server", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_USER_FEATURE_LIMITED: "This feature is temporarily limited for you", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_SLOWMODE: "You are sending messages too quickly", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_RATE_LIMIT: "You are being rate limited", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_MESSAGE_USER: "You cannot message this user", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_USER_VERIFICATION_LEVEL: "You do not meet this server's verification level", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_UNARCHIVE_THREAD: "You cannot unarchive this thread", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_JOIN_THREAD: "You cannot join this thread", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_MISSING_PERMISSIONS: "You cannot send messages in this channel", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_SEND_ATTACHMENTS: "You cannot send attachments in this channel", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_SEND_EMBEDS: "You cannot send embeds in this channel", APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_SEND_STICKERS: "You cannot send stickers in this channel", MJ_CHATBAR_BODY: "Type “$[command](commandHook)” to use Midjourney. Tip: Create a server to try it with just friends.", APPLICATION_IFRAME_MODAL_LOAD_ERROR: "There was an error trying to load the application.", INTERACTION_RATE_LIMITED: "Slow down! You're clicking too fast.", APPLICATION_ADD_BUTTON: "Add App", APPLICATION_ADD_BUTTON_ACTIONS: "Add App Actions", APPLICATION_ADD_BUTTON_ACTIONS_COPY: "Copy Add App URL", COMMANDS_SCOPE_MIGRATION_OVERVIEW_TOOLTIP: "Members can't use this bot until you turn on permissions.", COMMANDS_SCOPE_MIGRATION_TOGGLE_TOOLTIP: "Flip this switch to enable {botName}'s commands for everyone! Read more about command permissions [here.]({link})", COMMANDS_SCOPE_MIGRATION_ADMIN_NOTICE: "Commands have been enabled for apps in your server. Customize permissions in **Server Settings > Integrations**.", VIEWING_AS_ROLES: "You are viewing this server as {numRoles, plural, =0 {@everyone} =1 {1 role} other {{numRoles} roles}}.", VIEWING_AS_ROLES_SELECT: "Select Roles", VIEWING_AS_ROLES_BACK: "Back to Roles Settings", VIEW_AS_ROLE: "View Server As Role", VIEW_AS_ROLE_DESCRIPTION: "This will let you test what actions this role can take and what channels it can see. Only available to Server Owners and Admins.", VIEW_AS_ROLES_HIDDEN_VC_WARNING: "This voice channel is not visible to the role(s) you are viewing as. You will no longer see this channel once you disconnect.", VIEW_AS_ROLES_VOICE_WARNING: "View as Role does not reflect a role's voice restrictions, including priority speaker and suppression.", VIEW_AS_ROLES_MENTIONS_WARNING: "You are viewing as roles. Notifications may be in channels you can't see.", VIEWING_AS_ROLES_BACK_INTEGRATIONS: "Back to Integrations Settings", VIEW_AS_ROLES_SEE_ROLES: "See Roles", VIEW_AS_MEMBER_DESCRIPTION: "You are viewing the server as a new member.", VIEW_AS_MEMBER_DESCRIPTION_WITH_ROLES: "You are viewing the server as a new member. {numRoles, plural, =0 {You have no roles} =1 {You have 1 role} other {You have {numRoles} roles}}.", VIEW_AS_MEMBER_ROLES_WARNING: "Changing roles manually may not reflect the new member experience.", VIEW_AS_ROLES_NO_ACCESS: "You do not have permissions to use this feature", VIEWING_AS_ONBOARDING_MEMBER_BACK: "Back to Onboarding Settings", SERVER_SHOP_PREVIEW_DISCLAIMER: "Currently viewing all server subscription tiers and products. There is a maximum of {maxTiers} tiers and {maxProducts} products that can be published at a time.", MESSAGE_ACTION_REPLY: "Reply", REPLYING_TO: "Replying to $[](userHook)", REPLYING_TO_A11Y_LABEL: "Replying to !!{username}!!", REPLYING_TO_A11Y_HINT: "go to the replied message", MOBILE_REPLYING_TO: "Replying to **{username}**", MOBILE_REPLYING_TO_A11Y_LABEL: "Replying to {username}", MOBILE_REPLY_PREVIEW_A11Y_LABEL: "Reply message preview", MOBILE_SCROLL_TO_MESSAGE_ACTION_A11Y_LABEL: "Scroll to message", CANCEL_REPLYING_TO: "Cancel reply", JUMP_BAR_VIEWING_REPLY: "You are viewing a reply.", JUMP_TO_ORIGINAL_MESSAGE: "Jump to original message", REPLY_QUOTE_NO_TEXT_CONTENT: "Click to see attachment", REPLY_QUOTE_NO_TEXT_CONTENT_MOBILE: "Tap to see attachment", REPLY_QUOTE_MESSAGE_BLOCKED: "Blocked message", REPLY_QUOTE_MESSAGE_NOT_LOADED: "Message could not be loaded", REPLY_QUOTE_MESSAGE_DELETED: "Original message was deleted", REPLY_QUOTE_STICKER: "Click to see sticker", REPLY_QUOTE_STICKER_MOBILE: "Tap to see sticker", REPLY_QUOTE_COMMAND: "Click to see command", REPLY_QUOTE_VOICE_MESSAGE: "Click to see voice message", REPLY_QUOTE_VOICE_MESSAGE_MOBILE: "Tap to see voice message", REPLY_MENTION_ON: "ON", REPLY_MENTION_ON_TOOLTIP: "Click to disable pinging the original author.", REPLY_MENTION_OFF: "OFF", REPLY_MENTION_OFF_TOOLTIP: "Click to enable pinging the original author.", REPLY_MENTION_ON_MOBILE_A11Y_HINT: "Tap to disable pinging the original author.", REPLY_MENTION_OFF_MOBILE_A11Y_HINT: "Tap to enable pinging the original author.", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_PROMPT: "Your current email address is !!{email}!! What would you like to change it to?", USER_SETTINGS_ACCOUNT_VERIFY_PASSWORD_TITLE: "Verify your password", USER_SETTINGS_ACCOUNT_VERIFY_PASSWORD_TITLE_IN_TITLE_CASE: "Confirm Password", USER_SETTINGS_ACCOUNT_VERIFY_PASSWORD_SUBTITLE: "Please enter your password to edit your account.", USER_SETTINGS_ACCOUNT_VERIFY_PASSWORD_DESCRIPTION: "Last step: Enter your password to complete the change.", USER_SETTINGS_ACCOUNT_VERIFY_PASSWORD_FORGOT: "[Forgot your password? It happens.]({passwordResetURL})", USER_SETTINGS_ACCOUNT_CHANGE_USERNAME_TITLE: "Edit Username", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_TITLE: "Edit Email", USER_SETTINGS_ACCOUNT_REMOVAL_SECTION: "Account Removal", USER_SETTINGS_ACCOUNT_REMOVAL_DESCRIPTION: "Disabling your account means you can recover it at any time after taking this action.", USER_SETTINGS_ACCOUNT_REMOVAL_DESCRIPTION_UNCLAIMED: "No longer need your account?", USER_SETTINGS_ACCOUNT_PASSWORD_AND_AUTHENTICATION: "Password and Authentication", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_TITLE_DESKTOP: "Enter an email address", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_PROMPT_DESKTOP: "Enter a new email address and your existing password.", USER_SETTINGS_ACCOUNT_CHANGE_USERNAME_TITLE_DESKTOP: "Change your username", USER_SETTINGS_ACCOUNT_CHANGE_USERNAME_PROMPT_DESKTOP: "Enter a new username and your existing password.", USER_SETTINGS_ACCOUNT_CHANGE_PASSWORD_TITLE_DESKTOP: "Change your password", USER_SETTINGS_ACCOUNT_CHANGE_PASSWORD_PROMPT_DESKTOP: "Enter your current password and a new password.", USER_SETTINGS_ACCOUNT_REMOVE_PHONE_NUMBER_TITLE: "Remove phone number", USER_SETTINGS_ACCOUNT_REMOVE_PHONE_SMS_BACKUP_WARNING: "Removing your phone number will disable SMS backup for two-factor authentication.", USER_SETTINGS_ACCOUNT_REMOVE_PHONE_NUMBER_BUTTON: "Remove Phone Number", USER_SETTINGS_ACCOUNT_REMOVE_PHONE_NUMBER_WARNING_TITLE: "Removing your phone number will disable SMS backup", USER_SETTINGS_ACCOUNT_REMOVE_PHONE_NUMBER_WARNING_BODY: "You won't be able to use SMS as a recovery tool if you're locked out of your account.", USER_SETTINGS_ACCOUNT_EMAIL_DESCRIPTION_NO_LINK: "We’ll need to verify your old email address in order to change it.\n\nLost access to your email? Please contact your email provider to regain access.", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CONFIRM_TITLE: "Enter Code", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CONFIRM_TITLE_DESKTOP: "Enter code", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CONFIRM_DESCRIPTION: "Check your email: we just sent a verification code to **{oldEmail}**. Enter it here to verify you’re really you.", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CONFIRM_SUBTITLE: "Check your email: we sent you a verification code. Enter it here to verify you’re really you.", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CONFIRM_PROMPT: "Verification Code", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CONFIRM_RESEND: "[Didn’t receive a code or it expired? Resend it.](onResend)", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CONFIRM_CODE_SENT: "Verification code sent.", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_SEND_TITLE: "Verify email address", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_SEND_DESCRIPTION_NO_LINK: "We’ll need to verify your old email address, **!!{oldEmail}!!**, in order to change it.\n\nLost access to your email? Please contact your email provider to regain access.", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_COMPLETE_TITLE: "Confirm your new email", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_COMPLETE_DESCRIPTION: "To finish, we sent a verification email to: **!!{email}!!**", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CHECK_SPAM: "Didn't get the email? Make sure to check your spam folder.", USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_SEND_BUTTON: "Send Verification Code", USER_SETTINGS_ACCOUNT_EDIT_USERNAME_A11Y_LABEL: "Edit username", USER_SETTINGS_ACCOUNT_EDIT_DISPLAYNAME_A11Y_LABEL: "Edit display name", USER_SETTINGS_ACCOUNT_ADD_EMAIL_A11Y_LABEL: "Add an email address", USER_SETTINGS_ACCOUNT_ADD_PHONE_A11Y_LABEL: "Add a phone number", USER_SETTINGS_ACCOUNT_EDIT_EMAIL_A11Y_LABEL: "Edit email address", USER_SETTINGS_ACCOUNT_EDIT_PHONE_A11Y_LABEL: "Edit phone number", USER_SETTINGS_ACCOUNT_REVEAL_EMAIL_A11Y_LABEL: "Reveal email address", USER_SETTINGS_ACCOUNT_REVEAL_PHONE_A11Y_LABEL: "Reveal phone number", USER_SETTINGS_ACCOUNT_HIDE_EMAIL_A11Y_LABEL: "Hide email address", USER_SETTINGS_ACCOUNT_HIDE_PHONE_A11Y_LABEL: "Hide phone number", USER_SETTINGS_ACCOUNT_REMOVE_PHONE_A11Y_LABEL: "Remove phone number", USER_SETTINGS_COPIED: "Copied!", USER_SETTINGS_CACHES_CLEARED: "Caches Cleared!", USER_SETTINGS_CACHES_WRITTEN: "Caches Written!", PHONE_VERIFICATION_UPDATE_TITLE: "Update your phone number", PHONE_VERIFICATION_ADD_TITLE: "Enter a phone number", PHONE_VERIFICATION_CURRENT_PHONE: "The current number on your account is !!{phone}!!.", PHONE_VERIFICATION_RECEIVE_TEXT: "You will receive a text message with a verification code.", PHONE_VERIFICATION_NEW_PHONE_LABEL: "New Phone Number", PHONE_VERIFICATION_PHONE_LABEL: "Phone Number", COUNTDOWN_UNITS_DAYS: "d", COUNTDOWN_UNITS_HOURS: "h", COUNTDOWN_UNITS_MINUTES: "m", COUNTDOWN_UNITS_SECONDS: "s", SETUP_PROGRESS: "Setup Progress", RESUME_SETUP: "Resume your server setup", GUILD_PROGRESS_CTA: "Set up your server", GUILD_PROGRESS_TITLE: "Finish setting up your server!", GUILD_PROGRESS_STEPS: "You have completed $[**!!{numFinished}!! of {total} steps**](stepsHook).", GUILD_PROGRESS_CURRENT_STEP: "Step {currStep} of {total}: {step}", GUILD_PROGRESS_SKIP: "Skip these steps", GUILD_PROGRESS_FINISH: "Finish", GUILD_PROGRESS_DISMISS: "Dismiss Server Setup", BLACK_FRIDAY_PROMOTION_GIFT_INVENTORY_TITLE: "Black Friday Deal", STICKERS_GIFT_INVENTORY_TITLE_MONTH: "Stickers Gift — {skuName} ({intervalCount, plural, =1 {# month} other {# months}})", STICKERS_GIFT_INVENTORY_TITLE_YEAR: "Stickers Gift — {skuName} ({intervalCount, plural, =1 {# year} other {# years}})", ROLE_REQUIRED_SINGLE_USER_MESSAGE: "(Only you can see this channel)", BEGINNING_ROLE_REQUIRED_CHANNEL_DESCRIPTION: "This is the start of the !!{channelName}!! **private** channel. $[](topicHook)", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_SUBTITLE: "Add individual members by starting with @, or type a role name", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_SKIP: "Skip for now", CHANNEL_PERMISSIONS_PRIVATE_CHANNEL_DESCRIPTION: "By making a channel private, only select members and roles will be able to view this channel.", CHANNEL_PERMISSIONS_PRIVATE_CHANNEL_DESCRIPTION_VOICE: "By making a channel private, only select members and roles will have access to view or connect to this channel.", CHANNEL_PERMISSIONS_PRIVATE_CATEGORY_DESCRIPTION: "By making a category private, only select members and roles will be able to view this category. Synced channels in this category will automatically match to this setting.", CHANNEL_PERMISSIONS_ADD_MEMBERS_TITLE: "Add members or roles", CHANNEL_PERMISSIONS_NO_ROLES: "No Roles", CHANNEL_PERMISSIONS_EVERYONE_IS_ADMIN_WARNING: "All members can view this channel because @everyone has Administrator permissions. You can change this in Roles via Server Settings.", CHANNEL_PERMISSIONS_EVERYONE_CAN_NOT_VIEW_WARNING: "Heads up, @everyone does not have permission to view or connect to channels in this server. All channels will be default hidden to members. Use the Advanced View to give specific roles or members access to this channel.", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_SEARCH_PLACEHOLDER_MOBILE: "Search Roles & Members", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_ROLE: "Role", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_OWNER: "Server Owner", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_ADMINISTRATOR: "Administrator", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_MEMBER: "Member", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_NO_RESULT: "There are no members or roles with the name **!!{query}!!**.", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_NO_ROLES: "You haven't created any roles yet", PRIVATE_CHANNEL_ACCESS_INFO_TITLE: "Who can access", PRIVATE_CHANNEL_ACCESS_INFO_TITLE_WITH_COLON: "Who can access:", PRIVATE_CHANNEL_ACCESS_INFO_MEMBERS: "{count, plural, one {{count} Member} other {{count} Members}}", PRIVATE_CHANNEL_ACCESS_INFO_ROLES: "{count, plural, one {{count} Role} other {{count} Roles}}", PRIVATE_CHANNEL_ACCESS_INFO_MEMBERS_OVERFLOW: "{count}+ Members", PRIVATE_CHANNEL_ACCESS_INFO_ROLES_OVERFLOW: "{count}+ Roles", PRIVATE_CHANNEL_MEMBERS_SECTION_HEADER: "{sectionTitle} – {numberOfItems}", PRIVATE_CHANNEL_MEMBERS_REMOVE_YES_CONFIRMATION: "Yes, remove now", PRIVATE_CHANNEL_MEMBERS_REMOVED: "!!{name}!! removed", CHANNEL_PERMISSIONS_BASIC_VIEW: "Basic View", CHANNEL_PERMISSIONS_ADVANCED_VIEW: "Advanced View", CHANNEL_PERMISSIONS_MAKE_PUBLIC_ALERT_TITLE: "Make this channel open to everyone?", CHANNEL_PERMISSIONS_MAKE_PUBLIC_ALERT_SUBTITLE: "**#!!{channelName}!!** will become available to all members.", CHANNEL_PERMISSIONS_MAKE_PRIVATE_ALERT_TITLE: "Make this channel private?", CHANNEL_PERMISSIONS_MAKE_PRIVATE_ALERT_SUBTITLE: "**#!!{channelName}!!** will become private and visible to select members and roles.", PRIVATE_CHANNEL_MANAGE_CHANNEL_ACCESS_CTA: "Manage channel access", PRIVATE_CHANNEL_MEMBERS_ADDED_TOAST_MSG: "{count, plural, one {{count} member} other {{count} members}} added", PRIVATE_CHANNEL_ROLES_ADDED_TOAST_MSG: "{count, plural, one {{count} role} other {{count} roles}} added", PRIVATE_CHANNEL_MEMBERS_ROLES_ADDED_TOAST_MSG: "Members and roles added", PRIVATE_CHANNEL_MANAGE_ROLE_PERMISSION_MISSING_HINT: "You will need the Manage Roles permission to edit access to this private channel.", PRIVATE_TEXT_CHANNEL_CREATION_PERMISSION_MISSING_HINT: "**View Channels** permission required to create this private channel.", PRIVATE_VOICE_CHANNEL_CREATION_PERMISSION_MISSING_HINT: "**View Channels** and **Connect** permissions required to create this private channel.", PRIVATE_CATEGORY_CREATION_PERMISSION_MISSING_HINT: "**View Channels** and **Connect** permissions required to create this private category.", CHANNEL_PERMISSIONS_ADVANCED_PERMISSIONS: "Advanced permissions", CHANNEL_PERMISSIONS_SUBTITLE: "Use permissions to customize who can do what in this channel.", CATEGORY_PERMISSIONS_SUBTITLE: "Use permissions to customize who can do what in this category.", CHANNEL_PERMISSIONS_ADD_MEMBERS_TOOLTIP_OWNER: "Server owner cannot be removed.", CHANNEL_PERMISSIONS_ADD_MEMBERS_TOOLTIP_ADMINISTRATOR: "Cannot be removed due to Administrator access.", CHANNEL_PERMISSIONS_ADD_MEMBERS_TOOLTIP: "Remove access to channel.", CHANNEL_PERMISSIONS_CANNOT_REMOVE_PERMISSIONS: "Cannot remove permissions", PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_PLACEHOLDER: "e.g. Moderators, @wumpus", KEYBOARD_SHORTCUTS_EXPLAINER_MODAL_TITLE: "Hey there $[](tab) friend", KEYBOARD_SHORTCUTS_EXPLAINER_MODAL_BODY: "You can navigate Discord with your tab and arrow keys just fine, but there are some other helpful things we’ve added.", KEYBOARD_SHORTCUTS_EXPLAINER_LIST_SHORTCUT: "List of keyboard shortcuts", KEYBOARD_SHORTCUTS_EXPLAINER_QUICKSWITCHER_SHORTCUT: "Open the Quick Switcher—it’s the fastest way to move around!", KEYBOARD_SHORTCUTS_EXPLAINER_HELP_CENTER_LINK: "This [help center article]({link}) has more info.", DIALOG_JUST_SO_YOU_KNOW: "Just so you know!", ROLE_PERMISSIONS_SECTION_GENERAL_GUILD: "General Server Permissions", ROLE_PERMISSIONS_SECTION_GENERAL_CHANNEL: "General Channel Permissions", ROLE_PERMISSIONS_SECTION_GENERAL_CATEGORY: "General Category Permissions", ROLE_PERMISSIONS_SECTION_MEMBERSHIP: "Membership Permissions", ROLE_PERMISSIONS_SECTION_TEXT: "Text Channel Permissions", ROLE_PERMISSIONS_SECTION_VOICE: "Voice Channel Permissions", ROLE_PERMISSIONS_SECTION_VOICE_CHAT: "Voice Channel Chat Permissions", ROLE_PERMISSIONS_SECTION_VOICE_CHAT_DESCRIPTION: "Automated moderation makes monitoring text chat in voice channels easier. [Enable AutoMod](setUpAutomod)", ROLE_PERMISSIONS_SECTION_ADVANCED: "Advanced Permissions", ROLE_PERMISSIONS_VIEW_CHANNEL: "View Channels", ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION: "Allows members to view channels by default (excluding private channels).", MANAGE_CHANNELS: "Manage Channels", ROLE_PERMISSIONS_MANAGE_CHANNELS_DESCRIPTION: "Allows members to create, edit, or delete channels.", MANAGE_ROLES: "Manage Roles", ROLE_PERMISSIONS_MANAGE_ROLES_DESCRIPTION: "Allows members to create new roles and edit or delete roles lower than their highest role. Also allows members to change permissions of individual channels that they have access to.", MANAGE_EXPRESSIONS: "Manage Expressions", ROLE_PERMISSIONS_MANAGE_EXPRESSIONS_DESCRIPTION: "Allows members to edit or remove custom emoji, stickers, and sounds in this server.", CREATE_EXPRESSIONS: "Create Expressions", ROLE_PERMISSIONS_CREATE_EXPRESSIONS_DESCRIPTION: "Allows members to add custom emoji, stickers, and sounds in this server.", VIEW_AUDIT_LOG: "View Audit Log", ROLE_PERMISSIONS_VIEW_AUDIT_LOG_DESCRIPTION: "Allows members to view a record of who made which changes in this server.", VIEW_GUILD_ANALYTICS: "View Server Insights", ROLE_PERMISSIONS_VIEW_GUILD_ANALYTICS_DESCRIPTION: "Allows members to view Server Insights, which shows data on community growth, engagement, and more. This will allow them to see certain data about channel activity, even for channels they cannot access.", MANAGE_WEBHOOKS: "Manage Webhooks", ROLE_PERMISSIONS_MANAGE_WEBHOOKS_DESCRIPTION: "Allows members to create, edit, or delete webhooks, which can post messages from other apps or sites into this server.", MANAGE_SERVER: "Manage Server", ROLE_PERMISSIONS_MANAGE_SERVER_DESCRIPTION: "Allow members to change this server's name, switch regions, view all invites, add apps to this server and create and update AutoMod rules.", CREATE_INSTANT_INVITE: "Create Invite", ROLE_PERMISSIONS_CREATE_INSTANT_INVITE_DESCRIPTION: "Allows members to invite new people to this server.", ROLE_PERMISSIONS_CHANGE_NICKNAME_DESCRIPTION: "Allows members to change their own nickname, a custom name for just this server.", MANAGE_NICKNAMES: "Manage Nicknames", ROLE_PERMISSIONS_MANAGE_NICKNAMES_DESCRIPTION: "Allows members to change the nicknames of other members.", KICK_MEMBERS: "Kick Members", KICK_MEMBERS_AND_REVIEW_APPLICATIONS: "Kick, Approve, and Reject Members", ROLE_PERMISSIONS_KICK_MEMBERS_DESCRIPTION: "Allows members to remove other members from this server. Kicked members will be able to rejoin if they have another invite.", ROLE_PERMISSIONS_KICK_MEMBERS_AND_REVIEW_APPLICATION_DESCRIPTION: "Kick will remove other members from this server. Kicked members will be able to rejoin if they have another invite. If the server enables Member Requirements, this permission enables the ability to approve or reject members who request to join.", BAN_MEMBERS: "Ban Members", ROLE_PERMISSIONS_BAN_MEMBERS_DESCRIPTION: "Allows members to permanently ban and delete the message history of other members from this server.", SEND_MESSAGES: "Send Messages", ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION: "Allows members to send messages in text channels.", EMBED_LINKS: "Embed Links", ROLE_PERMISSIONS_EMBED_LINKS_DESCRIPTION: "Allows links that members share to show embedded content in text channels.", ATTACH_FILES: "Attach Files", ROLE_PERMISSIONS_ATTACH_FILES_DESCRIPTION: "Allows members to upload files or media in text channels.", ADD_REACTIONS: "Add Reactions", ROLE_PERMISSIONS_ADD_REACTIONS_DESCRIPTION: "Allows members to add new emoji reactions to a message. If this permission is disabled, members can still react using any existing reactions on a message.", ROLE_PERMISSIONS_USE_EXTERNAL_EMOJIS: "Use External Emoji", ROLE_PERMISSIONS_USE_EXTERNAL_EMOJIS_DESCRIPTION: "Allows members to use emoji from other servers, if they’re a Discord Nitro member.", ROLE_PERMISSIONS_USE_EXTERNAL_STICKERS: "Use External Stickers", ROLE_PERMISSIONS_USE_EXTERNAL_STICKERS_DESCRIPTION: "Allows members to use stickers from other servers, if they’re a Discord Nitro member.", MENTION_EVERYONE: "Mention @everyone, @here, and All Roles", ROLE_PERMISSIONS_MENTION_EVERYONE_DESCRIPTION: "Allows members to use @everyone (everyone in the server) or @here (only online members in that channel). They can also @mention all roles, even if the role’s “Allow anyone to mention this role” permission is disabled.", MANAGE_MESSAGES: "Manage Messages", ROLE_PERMISSIONS_MANAGE_MESSAGES_DESCRIPTION: "Allows members to delete messages by other members or pin any message.", READ_MESSAGE_HISTORY: "Read Message History", READ_POST_HISTORY: "Read Post History", ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION: "Allows members to read previous messages sent in channels. If this permission is disabled, members only see messages sent when they are online and focused on that channel.", ROLE_PERMISSIONS_SEND_TTS_MESSAGES: "Send Text-to-Speech Messages", ROLE_PERMISSIONS_SEND_TTS_MESSAGES_DESCRIPTION: "Allows members to send text-to-speech messages by starting a message with /tts. These messages can be heard by anyone focused on the channel.", ROLE_PERMISSIONS_USE_APPLICATION_COMMANDS: "Use Application Commands", ROLE_PERMISSIONS_USE_APPLICATION_COMMANDS_GUILD_DESCRIPTION: "Allows members to use commands from applications, including slash commands and context menu commands.", ROLE_PERMISSIONS_SEND_VOICE_MESSAGE: "Send Voice Messages", ROLE_PERMISSIONS_SEND_VOICE_MESSAGE_GUILD_DESCRIPTION: "Allows members to send voice messages.", ROLE_PERMISSIONS_USE_CLYDE_AI: "Use Clyde", ROLE_PERMISSIONS_USE_CLYDE_AI_GUILD_DESCRIPTION: "Allows members to interact with and customize the Clyde AI bot.", ROLE_PERMISSIONS_USE_CLYDE_AI_CHANNEL_DESCRIPTION: "Allows members to interact with the Clyde AI bot.", CONNECT: "Connect", ROLE_PERMISSIONS_CONNECT_DESCRIPTION: "Allows members to join voice channels and hear others.", SPEAK: "Speak", ROLE_PERMISSIONS_SPEAK_DESCRIPTION: "Allows members to talk in voice channels. If this permission is disabled, members are default muted until somebody with the “Mute Members” permission un-mutes them.", ROLE_PERMISSIONS_STREAM_DESCRIPTION: "Allows members to share their video, screen share, or stream a game in this server.", USE_VAD: "Use Voice Activity", ROLE_PERMISSIONS_USE_VAD_DESCRIPTION: "Allows members to speak in voice channels by simply talking. If this permission is disabled, members are required to use Push-to-talk. Good for controlling background noise or noisy members.", PRIORITY_SPEAKER: "Priority Speaker", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION: "Allows members to be more easily heard in voice channels. When activated, the volume of others without this permission will be automatically lowered.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_APP: "Allows members to be more easily heard in voice channels. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **[{keybind}](onClick)** keybind.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_MOBILE: "Allows members to be more easily heard in voice channels. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **{keybind}** keybind.", MUTE_MEMBERS: "Mute Members", ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION: "Allows members to mute other members in voice channels for everyone.", DEAFEN_MEMBERS: "Deafen Members", ROLE_PERMISSIONS_DEAFEN_MEMBERS_DESCRIPTION: "Allows members to deafen other members in voice channels, which means they won’t be able to speak or hear others.", MOVE_MEMBERS: "Move Members", ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION: "Allows members to disconnect or move other members between voice channels that the member with this permission has access to.", ADMINISTRATOR: "Administrator", ROLE_PERMISSIONS_ADMINISTRATOR_DESCRIPTION: "Members with this permission will have every permission and will also bypass all channel specific permissions or restrictions (for example, these members would get access to all private channels). **This is a dangerous permission to grant**.", ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_CHANNEL: "Allows members to view this channel by default.", ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_CATEGORY: "Allows members to view these channels by default.", ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_TEXT_EVERYONE: "Allows members to view this channel by default. Disabling this for @everyone will make this channel private.", ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_CATEGORY_EVERYONE: "Allows members to view these channels by default. Disabling this for @everyone will make text channels private. Disabling this and the Connect permission for @everyone will make voice channels private.", ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_VOICE_EVERYONE: "Allows members to view this channel by default. Disabling this and the Connect permission for @everyone will make this channel private.", ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_TEXT: "Allows members to change this channel’s name, description, and text settings. They can also delete the channel.", ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_VOICE: "Allows members to change this channel’s name, description, and voice settings. They can also delete the channel.", ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_CATEGORY: "Allows members to change these channels’ name, description, and text / voice settings. They can also delete these channels.", ROLE_PERMISSIONS_MANAGE_ROLES_DESCRIPTION_CHANNEL: "Allows members to change this channel’s permissions.", ROLE_PERMISSIONS_MANAGE_ROLES_DESCRIPTION_CATEGORY: "Allows members to change these channels’ permissions.", ROLE_PERMISSIONS_MANAGE_WEBHOOKS_DESCRIPTION_CHANNEL: "Allows members to create, edit, or delete webhooks in this channel, which can post messages from other apps or sites.", ROLE_PERMISSIONS_MANAGE_WEBHOOKS_DESCRIPTION_CATEGORY: "Allows members to create, edit, or delete webhooks in these channels, which can post messages from other apps or sites.", ROLE_PERMISSIONS_CREATE_INSTANT_INVITE_DESCRIPTION_TEXT: "Allows members to invite new people to this server via a direct invite link to this channel.", ROLE_PERMISSIONS_CREATE_INSTANT_INVITE_DESCRIPTION_VOICE: "Allows members to invite new people to this server via a direct invite link to this channel. The recipient will automatically join the voice channel if they have permission to connect.", ROLE_PERMISSIONS_CREATE_INSTANT_INVITE_DESCRIPTION_CATEGORY: "Allows members to invite new people to this server via a direct invite link to these channels.", ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION_TEXT: "Allows members to send messages in this channel.", ROLE_PERMISSIONS_SEND_MESSAGES_WITH_TIV_DESCRIPTION_TEXT_DISABLED: "Allows members to send messages in this channel. \n $[We recommend you keep this permission enabled.](warningHook) \n Keeping Send Messages enabled allows your members to participate in conversations when they're unable to speak, either because of their environment or comfort level.", ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION_CATEGORY: "Allows members to send messages in these channels.", ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION_ANNOUNCEMENT: "Allows members to publish their own messages to all servers following this [Announcement Channel]({articleURL}).", ROLE_PERMISSIONS_EMBED_LINKS_DESCRIPTION_TEXT: "Allows links that members share to show embedded content in this channel.", ROLE_PERMISSIONS_EMBED_LINKS_DESCRIPTION_CATEGORY: "Allows links that members share to show embedded content in these channels.", ROLE_PERMISSIONS_ATTACH_FILES_DESCRIPTION_TEXT: "Allows members to upload files or media in this channel.", ROLE_PERMISSIONS_ATTACH_FILES_DESCRIPTION_CATEGORY: "Allows members to upload files or media in these channels.", ROLE_PERMISSIONS_ADD_REACTIONS_DESCRIPTION_TEXT: "Allows members to add new emoji reactions to a message in this channel. If this permission is disabled, members can still react using any existing reactions on a message.", ROLE_PERMISSIONS_ADD_REACTIONS_DESCRIPTION_TEXT_WITH_VOICE_CHANNEL_EFFECTS: "Allows members to add new emoji reactions to a message in this channel and send reactions in voice channels. If this permission is disabled, members can still react using any existing reactions on a message.", ROLE_PERMISSIONS_ADD_REACTIONS_DESCRIPTION_CATEGORY: "Allows members to add new emoji reactions to a message in these channels. If this permission is disabled, members can still react using any existing reactions on a message.", ROLE_PERMISSIONS_USE_EXTERNAL_EMOJIS_DESCRIPTION_TEXT: "Allows members to use emoji from other servers in this channel, if they’re a Discord Nitro member.", ROLE_PERMISSIONS_USE_EXTERNAL_STICKERS_DESCRIPTION_TEXT: "Allows members to use stickers from other servers in this channel, if they’re a Discord Nitro member.", ROLE_PERMISSIONS_USE_EXTERNAL_EMOJIS_DESCRIPTION_CATEGORY: "Allows members to use emoji from other servers in these channels, if they’re a Discord Nitro member.", ROLE_PERMISSIONS_USE_EXTERNAL_STICKERS_DESCRIPTION_CATEGORY: "Allows members to use stickers from other servers in these channels, if they’re a Discord Nitro member.", ROLE_PERMISSIONS_MENTION_EVERYONE_DESCRIPTION_TEXT: "Allows members to use @everyone or @here (only online members) in this channel. They can also @mention all roles in this channel, even if the role’s “Allow anyone to mention this role” permission is disabled.", ROLE_PERMISSIONS_MENTION_EVERYONE_DESCRIPTION_CATEGORY: "Allows members to use @everyone or @here (only online members) in these channels. They can also @mention all roles in these channels, even if the role’s “Allow anyone to mention this role” permission is disabled.", MENTION_EVERYONE_STAGE: "Mention @everyone when a Stage starts", ROLE_PERMISSIONS_MENTION_EVERYONE_DESCRIPTION_STAGE: "Allow Stage Moderators with this role to notify @everyone when a Stage starts. This is the same permission as Mention @everyone, @here, and All Roles.", ROLE_PERMISSIONS_MANAGE_MESSAGES_DESCRIPTION_TEXT: "Allows members to delete messages by other members or pin any message in this channel.", ROLE_PERMISSIONS_MANAGE_MESSAGES_DESCRIPTION_CATEGORY: "Allows members to delete messages by other members or pin any message in these channels.", ROLE_PERMISSIONS_MANAGE_MESSAGES_DESCRIPTION_ANNOUNCEMENT: "Allows members to delete messages by other members or pin any message in this channel. They can also publish messages by other members to all servers that follow this [Announcement Channel]({articleURL}).", ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION_TEXT: "Allows members to read previous messages sent in this channel. If this permission is disabled, members only see messages sent when they are online and focused on this channel.", ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION_FORUM_CHANNEL: "Allows members to read previous messages and posts created in this channel. If this permission is disabled, members only see messages and posts created when they are online and focused on this channel.", ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_WITH_TIV_DESCRIPTION_TEXT_DISABLED: "Allows members to read previous messages sent in this channel. If this permission is disabled, members only see messages sent when they are online and focused on this channel. \n $[We recommend you keep this permission enabled.](warningHook) \n Keeping Read Message History enabled gives your members context in ongoing conversations so that they can participate, leading to a more engaged community. Members can also refer back to previously shared links and memes.", ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION_CATEGORY: "Allows members to read previous messages sent in these channels. If this permission is disabled, members only see messages sent when they are online and focused on that channel.", ROLE_PERMISSIONS_SEND_TTS_MESSAGES_DESCRIPTION_TEXT: "Allows members to send text-to-speech messages in this channel by starting a message with /tts. These messages can be heard by anyone focused on this channel.", ROLE_PERMISSIONS_SEND_TTS_MESSAGES_DESCRIPTION_CATEGORY: "Allows members to send text-to-speech messages in these channels by starting a message with /tts. These messages can be heard by anyone focused on that channel.", ROLE_PERMISSIONS_USE_APPLICATION_COMMANDS_DESCRIPTION_TEXT: "Allows members to use commands from applications in this channel, including slash commands and context menu commands.", ROLE_PERMISSIONS_USE_APPLICATION_COMMANDS_DESCRIPTION_CATEGORY: "Allows members to use commands from applications in these channels, including slash commands and context menu commands.", ROLE_PERMISSIONS_SEND_VOICE_MESSAGES_DESCRIPTION_TEXT: 'Allows members to send voice messages in this channel. Requires the "Attach Files" permission as well.', ROLE_PERMISSIONS_SEND_VOICE_MESSAGES_DESCRIPTION_CATEGORY: 'Allows members to send voice messages in these channels. Requires the "Attach Files" permission as well.', ROLE_PERMISSIONS_SEND_POLLS: "Create Polls", ROLE_PERMISSIONS_SEND_POLLS_DESCRIPTION_GUILD: "Allows members to create polls.", ROLE_PERMISSIONS_SEND_POLLS_DESCRIPTION_TEXT: "Allows members to create polls in this channel.", ROLE_PERMISSIONS_SEND_POLLS_DESCRIPTION_CATEGORY: "Allows members to create polls in these channels.", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_VOICE: "Allows members to join this voice channel and hear others.", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_CATEGORY: "Allows members to join these voice channels and hear others.", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_VOICE_EVERYONE: "Allows members to join this voice channel and hear others. Disabling this and the View Channel permissions for @everyone will make this channel private.", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_CATEGORY_EVERYONE: "Allows members to join these voice channels and hear others. Disabling this and the View Channel permissions for @everyone will make these channels private.", ROLE_PERMISSIONS_SPEAK_DESCRIPTION_VOICE: "Allows members to talk in this voice channel. If this permission is disabled, members are default muted until somebody with the “Mute Members” permission un-mutes them.", ROLE_PERMISSIONS_SPEAK_DESCRIPTION_CATEGORY: "Allows members to talk in these voice channels. If this permission is disabled, members are default muted until somebody with the “Mute Members” permission un-mutes them.", ROLE_PERMISSIONS_STREAM_DESCRIPTION_VOICE: "Allows members to share their video, screen share, or stream a game in this voice channel.", ROLE_PERMISSIONS_STREAM_DESCRIPTION_STAGE: "Allows speakers to share their video, screen share, or stream a game in this Stage channel.", ROLE_PERMISSIONS_STREAM_DESCRIPTION_CATEGORY: "Allows members to share their video, screen share, or stream a game in these voice channels.", ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_VOICE: "Allows members to speak in this voice channel by simply talking. If this permission is disabled, members are required to use Push-to-talk. Good for controlling background noise or noisy members.", ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_CATEGORY: "Allows members to speak in these voice channels by simply talking. If this permission is disabled, members are required to use Push-to-talk. Good for controlling background noise or noisy members.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_VOICE: "Allows members to be more easily heard in this voice channel. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **[{keybind}](onClick)** keybind.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_VOICE_MOBILE: "Allows members to be more easily heard in this voice channel. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **{keybind}** keybind.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_CATEGORY: "Allows members to be more easily heard in these voice channels. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **[{keybind}](onClick)** keybind.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_CATEGORY_MOBILE: "Allows members to be more easily heard in these voice channels. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **{keybind}** keybind.", ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_VOICE: "Allows members to mute other members in this voice channel for everyone.", ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_CATEGORY: "Allows members to mute other members in these voice channels for everyone.", ROLE_PERMISSIONS_DEAFEN_MEMBERS_DESCRIPTION_VOICE: "Allows members to deafen other members in this voice channel, which means they won’t be able to speak or hear others.", ROLE_PERMISSIONS_DEAFEN_MEMBERS_DESCRIPTION_CATEGORY: "Allows members to deafen other members in these voice channels, which means they won’t be able to speak or hear others.", ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_VOICE: "Allows members to disconnect other members from this channel. They will also be able to move somebody into other channels that they have this permission in.", ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_CATEGORY: "Allows members to disconnect other members from these channels. They will also be able to move somebody into other channels that they have this permission in.", ROLE_PERMISSIONS_USE_EMBEDDED_ACTIVITIES_DESCRIPTION: "Allows members to use Activities in this server.", ROLE_PERMISSIONS_USE_EMBEDDED_ACTIVITIES_DESCRIPTION_CHANNEL: "Allows members to use Activities in this channel.", ROLE_PERMISSIONS_USE_EMBEDDED_ACTIVITIES_DESCRIPTION_CATEGORY: "Allows members to use Activities in these channels.", IOS_GUILD_DELETE_FEEDBACK_HEADER: "Why are you deleting this server?", GUILD_DELETE_FEEDBACK_HEADER: "Can you tell us more?", GUILD_DELETE_FEEDBACK_BODY: "Help us understand why you're deleting this server.", GUILD_DELETE_FEEDBACK_TOO_HARD: "The server was too hard to figure out", GUILD_DELETE_FEEDBACK_TEST: "I wanted to test features and/or apps", GUILD_DELETE_FEEDBACK_ACCIDENT: "I didn't mean to make a server", GUILD_DELETE_FEEDBACK_TEMPLATE: "I was curious what a server or template looked like", GUILD_DELETE_FEEDBACK_LONELY: "I couldn't get people to join", GUILD_DELETE_FEEDBACK_INACTIVE: "Server was no longer active", GUILD_DELETE_FEEDBACK_OTHER: "Other", GUILD_DELETE_FEEDBACK_REPORT: "Thanks for reporting your issue! Feedback like yours helps us improve Discord.", GUILD_LEAVE_FEEDBACK_HEADER: "Can you tell us more?", GUILD_LEAVE_FEEDBACK_BODY: "Why did you leave !!{server}!!?", GUILD_LEAVE_FEEDBACK_UNINTERESTED: "I am not interested in the topic of this server", GUILD_LEAVE_FEEDBACK_ACCIDENT: "I didn't mean to join this server", GUILD_LEAVE_FEEDBACK_INACTIVE: "There is no activity in this server", GUILD_LEAVE_FEEDBACK_UNCOMFORTABLE: "Server content and/or members made me uncomfortable", GUILD_LEAVE_FEEDBACK_DISRUPTIVE: "Too many notifications", GUILD_LEAVE_FEEDBACK_OVERACTIVE: "Too much activity in this server", GUILD_LEAVE_FEEDBACK_CONFUSING: "Server was too confusing/I did not understand how to use it", GUILD_LEAVE_FEEDBACK_REPORT: "Thanks for your feedback! Feedback like yours helps us improve Discord.", ROLE_CREATED_TOAST: "New role created", ROLE_CREATE_CTA: "Create Role", ROLE_OVERVIEW_HEADER: "Server Roles", ROLE_OVERVIEW_DESCRIPTION: "Use roles to group your server members and assign permissions.", ROLE_OVERVIEW_EMPTY_SUBHEADER: "Organize your members", ROLE_OVERVIEW_VIEW_MEMBERS: "View members", ROLE_LIST_HEADER: "Roles – {numRoles}", ROLE_LIST_BODY: "Members use the color of the highest role they have on this list. Drag roles to reorder them.", ROLE_LIST_BODY_WITH_HELP: "Members use the color of the highest role they have on this list. Drag roles to reorder them. [Need help with permissions?]({articleURL})", ROLE_DELETE_CANNOT_BE_UNDONE: "This cannot be undone.", ROLE_EVERYONE_SUBLABEL: "Default permissions for all server members", ROLE_ROW_DESCRIPTION: "!!{name}!!, {count, plural, one {{count} member} other {{count} members}}, edit", ROLE_ROW_VIEW_MEMBERS: "View {count, plural, one {{count} Member} other {{count} Members}}", ROLE_MEMBER_COUNT: "{count, plural, one {{count} Member} other {{count} Members}}", ROLE_LIST_EMPTY: "No roles", ROLE_EDIT_TITLE_WITH_NAME: "Edit Role — !!{roleName}!!", ROLE_EDIT_TAB_DISPLAY: "Display", ROLE_COLOR_HELP: "Members use the color of the highest role they have on the roles list.", ROLE_ICON_HELP: "Upload an image under 256 KB or pick a custom emoji from this server. We recommend at least 64x64 pixels. Members will see the icon for their highest role if they have multiple roles.", ROLE_ICON_CHOOSE_IMAGE: "Choose Image", ROLE_ICON_TAB_UPLOAD_IMAGE: "Upload Image", ROLE_ICON_TAB_EMOJI: "Emoji", ROLE_ICON_UPLOAD_FILES_INFO: "Choose a PNG or JPG to upload", ROLE_ICON_UPLOAD_BROWSE_FILES: "Browse Files", ROLE_ICON_UPLOAD_FILE_TOO_BIG: "Oh no! File is too big. Please select a .png or .jpg 256 KB or smaller.", ROLE_ICON_TOAST_MESSAGE: "**!!{roleName}!!**", ROLE_ICON_POPOUT_DESCRIPTION: "Custom Role Icon for {name}. This feature is a part of Server Boosting.", ROLE_ICON_POPOUT_CTA: "Learn more", ROLE_EDIT_TAB_PERMISSIONS: "Permissions", ROLE_EDIT_TAB_MEMBERS: "Members", ROLE_EDIT_TAB_MANAGE_MEMBERS: "Manage Members", ROLE_EDIT_TAB_MEMBERS_WITH_LIST: "Manage Members ({numMembers})", ROLE_EDIT_TAB_VERIFICATION: "Links", ROLE_EDIT_SAVED: "Changes saved", ROLE_EDIT_HOIST_LABEL: "Display separately", ROLE_EDIT_PERMISSIONS_NO_RESULTS: "No permissions with the name **!!{query}!!**", ROLE_EDIT_MEMBERS_NO_RESULTS: "No members with the name **!!{query}!!**", ROLE_EDIT_MEMBERS_MISSING: "Not all members are shown, use Search to find specific members", ROLE_ADD_MEMBERS_SEARCH: "Search members", ROLE_EDIT_MEMBERS_NO_SEARCH_RESULTS: "No members were found. $[Add members to this role.](addMembersHook)", ROLE_ADD_MEMBERS_TITLE: "Add members", ROLE_ADD_MEMBERS_BUTTON: "Add Members", ROLE_PERMISSIONS_SEARCH_PLACEHOLDER: "Search permissions", ROLE_PERMISSIONS_CLEAR_PERMISSIONS: "Clear permissions", ROLE_PERMISSIONS_EMPTY_TEXT: "No permissions found", ROLE_REMOVE_MEMBER_CONFIRM_TITLE: "Remove member", ROLE_REMOVE_MEMBER_CONFIRM_BODY: "Remove **!!{username}!!** from role **!!{roleName}!!**?", ROLE_REMOVE_MEMBER_CONFIRM_TIP: "Hold shift when removing members to skip this modal.", ROLE_REMOVE_MEMBER_MANAGED: "Members cannot be manually added or removed from this role", ROLE_CHANGED_SAVE_CHANGES: "Save changes?", ROLE_CHANGED_SAVE_CHANGES_BODY: "You've made changes. Do you want to save them before leaving this page?", ROLE_CHANGED_DONT_SAVE: "Don't Save", ROLE_SAMPLE_MESSAGE: "rocks are really old", ROLE_EVERYONE_LABEL: "Default Permissions", ROLE_EVERYONE_DESCRIPTION: "applies to all server members", ROLE_EMPTY_STATE_CLUBS_ROLE_1: "president", ROLE_EMPTY_STATE_CLUBS_ROLE_2: "leadership", ROLE_EMPTY_STATE_CLUBS_ROLE_3: "coach", ROLE_EMPTY_STATE_CLUBS_ROLE_4: "new recruit", ROLE_EMPTY_STATE_CLUBS_ROLE_5: "alumni", ROLE_EMPTY_STATE_CLUBS_ROLE_6: "mentee", ROLE_EMPTY_STATE_GAMING_ROLE_1: "D&D", ROLE_EMPTY_STATE_GAMING_ROLE_2: "FFXIV", ROLE_EMPTY_STATE_GAMING_ROLE_3: "WoW", ROLE_EMPTY_STATE_GAMING_ROLE_4: "tank", ROLE_EMPTY_STATE_GAMING_ROLE_5: "dps", ROLE_EMPTY_STATE_GAMING_ROLE_6: "support", ROLE_EMPTY_STATE_HOBBIES_ROLE_1: "streamer", ROLE_EMPTY_STATE_HOBBIES_ROLE_2: "moderator", ROLE_EMPTY_STATE_HOBBIES_ROLE_3: "kpop", ROLE_EMPTY_STATE_HOBBIES_ROLE_4: "subscriber", ROLE_EMPTY_STATE_HOBBIES_ROLE_5: "artist", ROLE_EMPTY_STATE_HOBBIES_ROLE_6: "pianist", ROLE_PERMISSION_HELP_BODY: "Need help? [Start with one of our templates](onTemplateOpen)", ROLE_PERMISSION_TEMPLATE_TITLE: "Start with a template", ROLE_PERMISSION_TEMPLATE_NAME_COSMETIC: "Cosmetic", ROLE_PERMISSION_TEMPLATE_DESCRIPTION_COSMETIC: "Just for looks. Great for giving labels or color to members.", ROLE_PERMISSION_TEMPLATE_NAME_MEMBER: "Member", ROLE_PERMISSION_TEMPLATE_DESCRIPTION_MEMBER: "Basic permissions for a regular member to talk.", ROLE_PERMISSION_TEMPLATE_NAME_MODERATOR: "Moderator", ROLE_PERMISSION_TEMPLATE_DESCRIPTION_MODERATOR: "People who can help you manage other members in this server.", ROLE_PERMISSION_TEMPLATE_NAME_MANAGER: "Manager", ROLE_PERMISSION_TEMPLATE_DESCRIPTION_MANAGER: "Trusted leaders who can help you build the server.", ROLE_PERMISSION_TEMPLATE_SELECT_CTA: "Select", ROLE_PERMISSION_TEMPLATE_SELECT_WARNING_TITLE: "Wait!", ROLE_PERMISSION_TEMPLATE_SELECT_WARNING_BODY: "Looks like you already made some changes to your permissions. Do you want to override them with this template?", ROLE_PERMISSION_TEMPLATE_SELECT_CONFIRMATION_TOAST: "Template applied", ROLE_PERMISSION_TEMPLATE_COSMETIC_CONTENT_1: "Shows up on their profile", ROLE_PERMISSION_TEMPLATE_COSMETIC_CONTENT_2: "Colors their name", ROLE_PERMISSION_TEMPLATE_MEMBER_CONTENT_1: "Talk in channels", ROLE_PERMISSION_TEMPLATE_MEMBER_CONTENT_2: "Invite friends", ROLE_PERMISSION_TEMPLATE_MEMBER_CONTENT_3: "Change nickname", ROLE_PERMISSION_TEMPLATE_MODERATOR_CONTENT_PREFACE: "Everything members can do, and:", ROLE_PERMISSION_TEMPLATE_MODERATOR_CONTENT_1: "Delete any messages", ROLE_PERMISSION_TEMPLATE_MODERATOR_CONTENT_2: "Mute people in voice chat", ROLE_PERMISSION_TEMPLATE_MODERATOR_CONTENT_3: "Kick/ban members", ROLE_PERMISSION_TEMPLATE_MODERATOR_CONTENT_4: "Timeout members", ROLE_PERMISSION_TEMPLATE_MANAGER_CONTENT_PREFACE: "Everything moderators can do, and:", ROLE_PERMISSION_TEMPLATE_MANAGER_CONTENT_1: "Create and delete channels", ROLE_PERMISSION_TEMPLATE_MANAGER_CONTENT_2: "Create and delete roles", ROLE_PERMISSION_TEMPLATE_MANAGER_CONTENT_3: "Add emoji and apps", ROLE_PERMISSION_TEMPLATE_MANAGER_CONTENT_4: "Pretty much anything", ROLE_EDIT_CONNECTIONS_CONTROLS_HEADER: "Create Linked Role", ROLE_EDIT_CONNECTIONS_CONTROLS_SELECT_CONNECTION_HEADER: "Add requirement", ROLE_EDIT_CONNECTIONS_CONTROLS_CLEAR_ALL: "Clear all", ROLE_EDIT_CONNECTIONS_CONTROLS_ADD_CONNECTION: "Add requirement", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_ACCOUNT: "Must connect {platformName} account", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_GAMES: "Must have at least $[](metadataHook) games", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_DOTA2: "Must have at least $[](metadataHook) DOTA 2 items", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_TF2: "Must have at least $[](metadataHook) TF2 items", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_KARMA: "Must have at least $[](metadataHook) Karma", ROLE_EDIT_CONNECTIONS_CONTROLS_AGE: "Account must be at least $[](metadataHook) days old", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_FOLLOWERS: "Must have at least $[](metadataHook) followers", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_FOLLOWING: "Must follow at least $[](metadataHook) users", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_LIKES: "Must have at least $[](metadataHook) likes", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_TWEETS: "Must have at least $[](metadataHook) posts", ROLE_EDIT_CONNECTIONS_CONTROLS_HEADER_ITEMS: "{gameName} Items", ROLE_EDIT_CONNECTIONS_CONTROLS_HEADER_ACCOUNT_AGE: "Account Age", ROLE_EDIT_CONNECTIONS_CONTROLS_HEADER_VERIFIED: "Verified", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_BE_MOD: "Must be a verified moderator", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_GOLD: "Must have Reddit Gold", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_BE_VERIFIED: "Must be verified", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_PAYPAL_VERIFIED_BANK_ACCOUNT: "Must have verified bank account", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_BE_TOP_RATED_SELLER: "Must be Top Rated Seller", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_POSITIVE_FEEDBACK_PERCENTAGE: "Must have at least $[](metadataHook) percent positive ratings", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_UNIQUE_POSITIVE_FEEDBACK_COUNT: "Must have at least $[](metadataHook) positive feedback review(s)", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_MOST_UNIQUE_NEGATIVE_FEEDBACK_COUNT: "Must have at most $[](metadataHook) negative feedback review(s)", ROLE_EDIT_CONNECTIONS_CONTROLS_REQUIREMENTS: "Requirements", ROLE_EDIT_CONNECTIONS_CONTROLS_OR_DESCRIPTION: "Must connect at least one", ROLE_EDIT_CONNECTIONS_CONTROLS_AND_DESCRIPTION: "Must connect all", ROLE_EDIT_CONNECTIONS_CONTROLS_WARNING: "Adding connection or app requirements to an existing role will remove members from that role unless they already pass the new requirements. Consider creating a new role instead.", ROLE_EDIT_CONNECTIONS_CONTROLS_MEMBERS_WARNING: "Adding connection or app requirements to an existing role is only possible if the role has no members. Consider creating a new role instead.", ROLE_EDIT_CONNECTIONS_CONTROLS_DESCRIPTION_LEARN_MORE: "Linking a connection or app requires members to connect their accounts before being added to the role. [Learn more about Linked Roles]({helpdeskArticleUrl}).", ROLE_EDIT_CONNECTIONS_CONTROLS_MUST_HAVE_AT_LEAST_POSTS: "Must have at least $[](metadataHook) posts", COUNTRY_NAME_AF: "Afghanistan", COUNTRY_NAME_AX: "Aland Islands", COUNTRY_NAME_AL: "Albania", COUNTRY_NAME_DZ: "Algeria", COUNTRY_NAME_AS: "American Samoa", COUNTRY_NAME_AD: "Andorra", COUNTRY_NAME_AO: "Angola", COUNTRY_NAME_AI: "Anguilla", COUNTRY_NAME_AQ: "Antarctica", COUNTRY_NAME_AG: "Antigua and Barbuda", COUNTRY_NAME_AR: "Argentina", COUNTRY_NAME_AM: "Armenia", COUNTRY_NAME_AW: "Aruba", COUNTRY_NAME_AC: "Ascension", COUNTRY_NAME_AU: "Australia", COUNTRY_NAME_AT: "Austria", COUNTRY_NAME_AZ: "Azerbaijan", COUNTRY_NAME_BS: "Bahamas", COUNTRY_NAME_BH: "Bahrain", COUNTRY_NAME_BD: "Bangladesh", COUNTRY_NAME_BB: "Barbados", COUNTRY_NAME_BY: "Belarus", COUNTRY_NAME_BE: "Belgium", COUNTRY_NAME_BZ: "Belize", COUNTRY_NAME_BJ: "Benin", COUNTRY_NAME_BM: "Bermuda", COUNTRY_NAME_BT: "Bhutan", COUNTRY_NAME_BO: "Bolivia", COUNTRY_NAME_BQ: "Bonaire, Sint Eustatius and Saba", COUNTRY_NAME_BA: "Bosnia and Herzegovina", COUNTRY_NAME_BW: "Botswana", COUNTRY_NAME_BV: "Bouvet Island", COUNTRY_NAME_BR: "Brazil", COUNTRY_NAME_IO: "British Indian Ocean Territory", COUNTRY_NAME_VG: "British Virgin Islands", COUNTRY_NAME_BN: "Brunei", COUNTRY_NAME_BG: "Bulgaria", COUNTRY_NAME_BF: "Burkina Faso", COUNTRY_NAME_BI: "Burundi", COUNTRY_NAME_KH: "Cambodia", COUNTRY_NAME_CM: "Cameroon", COUNTRY_NAME_CA: "Canada", COUNTRY_NAME_CV: "Cape Verde", COUNTRY_NAME_KY: "Cayman Islands", COUNTRY_NAME_CF: "Central African Republic", COUNTRY_NAME_TD: "Chad", COUNTRY_NAME_CL: "Chile", COUNTRY_NAME_CN: "China", COUNTRY_NAME_CX: "Christmas Island", COUNTRY_NAME_CC: "Cocos-Keeling Islands", COUNTRY_NAME_CO: "Colombia", COUNTRY_NAME_KM: "Comoros", COUNTRY_NAME_CG: "Congo", COUNTRY_NAME_CD: "Congo, Dem. Rep. of (Zaire)", COUNTRY_NAME_CK: "Cook Islands", COUNTRY_NAME_CR: "Costa Rica", COUNTRY_NAME_HR: "Croatia", COUNTRY_NAME_CU: "Cuba", COUNTRY_NAME_CW: "Curacao", COUNTRY_NAME_CY: "Cyprus", COUNTRY_NAME_CZ: "Czech Republic", COUNTRY_NAME_DK: "Denmark", COUNTRY_NAME_DG: "Diego Garcia", COUNTRY_NAME_DJ: "Djibouti", COUNTRY_NAME_DM: "Dominica", COUNTRY_NAME_DO: "Dominican Republic", COUNTRY_NAME_TP: "East Timor", COUNTRY_NAME_EC: "Ecuador", COUNTRY_NAME_EG: "Egypt", COUNTRY_NAME_SV: "El Salvador", COUNTRY_NAME_GQ: "Equatorial Guinea", COUNTRY_NAME_ER: "Eritrea", COUNTRY_NAME_EE: "Estonia", COUNTRY_NAME_ET: "Ethiopia", COUNTRY_NAME_FK: "Falkland Islands", COUNTRY_NAME_FO: "Faroe Islands", COUNTRY_NAME_FJ: "Fiji", COUNTRY_NAME_FI: "Finland", COUNTRY_NAME_FR: "France", COUNTRY_NAME_GF: "French Guiana", COUNTRY_NAME_PF: "French Polynesia", COUNTRY_NAME_TF: "French Southern Territories", COUNTRY_NAME_GA: "Gabon", COUNTRY_NAME_GM: "Gambia", COUNTRY_NAME_GE: "Georgia", COUNTRY_NAME_DE: "Germany", COUNTRY_NAME_GH: "Ghana", COUNTRY_NAME_GI: "Gibraltar", COUNTRY_NAME_GR: "Greece", COUNTRY_NAME_GL: "Greenland", COUNTRY_NAME_GD: "Grenada", COUNTRY_NAME_GP: "Guadeloupe", COUNTRY_NAME_GU: "Guam", COUNTRY_NAME_GT: "Guatemala", COUNTRY_NAME_GG: "Guernsey", COUNTRY_NAME_GN: "Guinea", COUNTRY_NAME_GW: "Guinea-Bissau", COUNTRY_NAME_GY: "Guyana", COUNTRY_NAME_HT: "Haiti", COUNTRY_NAME_HM: "Heard Island and McDonald Islands", COUNTRY_NAME_VA: "Holy See (Vatican City State)", COUNTRY_NAME_HN: "Honduras", COUNTRY_NAME_HK: "Hong Kong SAR China", COUNTRY_NAME_HU: "Hungary", COUNTRY_NAME_IS: "Iceland", COUNTRY_NAME_IN: "India", COUNTRY_NAME_ID: "Indonesia", COUNTRY_NAME_IR: "Iran", COUNTRY_NAME_IQ: "Iraq", COUNTRY_NAME_IE: "Ireland", COUNTRY_NAME_IM: "Isle of Man", COUNTRY_NAME_IL: "Israel", COUNTRY_NAME_IT: "Italy", COUNTRY_NAME_CI: "Ivory Coast", COUNTRY_NAME_JM: "Jamaica", COUNTRY_NAME_JP: "Japan", COUNTRY_NAME_JE: "Jersey", COUNTRY_NAME_JO: "Jordan", COUNTRY_NAME_KZ: "Kazakhstan", COUNTRY_NAME_KE: "Kenya", COUNTRY_NAME_KI: "Kiribati", COUNTRY_NAME_XK: "Kosovo", COUNTRY_NAME_KW: "Kuwait", COUNTRY_NAME_KG: "Kyrgyzstan", COUNTRY_NAME_LA: "Laos", COUNTRY_NAME_LV: "Latvia", COUNTRY_NAME_LB: "Lebanon", COUNTRY_NAME_LS: "Lesotho", COUNTRY_NAME_LR: "Liberia", COUNTRY_NAME_LY: "Libya", COUNTRY_NAME_LI: "Liechtenstein", COUNTRY_NAME_LT: "Lithuania", COUNTRY_NAME_LU: "Luxembourg", COUNTRY_NAME_MO: "Macau SAR China", COUNTRY_NAME_MK: "North Macedonia", COUNTRY_NAME_MG: "Madagascar", COUNTRY_NAME_MW: "Malawi", COUNTRY_NAME_MY: "Malaysia", COUNTRY_NAME_MV: "Maldives", COUNTRY_NAME_ML: "Mali", COUNTRY_NAME_MT: "Malta", COUNTRY_NAME_MH: "Marshall Islands", COUNTRY_NAME_MQ: "Martinique", COUNTRY_NAME_MR: "Mauritania", COUNTRY_NAME_MU: "Mauritius", COUNTRY_NAME_YT: "Mayotte", COUNTRY_NAME_MX: "Mexico", COUNTRY_NAME_FM: "Micronesia", COUNTRY_NAME_MI: "Midway Island", COUNTRY_NAME_MD: "Moldova", COUNTRY_NAME_MC: "Monaco", COUNTRY_NAME_MN: "Mongolia", COUNTRY_NAME_ME: "Montenegro", COUNTRY_NAME_MS: "Montserrat", COUNTRY_NAME_MA: "Morocco", COUNTRY_NAME_MZ: "Mozambique", COUNTRY_NAME_MM: "Myanmar", COUNTRY_NAME_NA: "Namibia", COUNTRY_NAME_NR: "Nauru", COUNTRY_NAME_NP: "Nepal", COUNTRY_NAME_NL: "Netherlands", COUNTRY_NAME_AN: "Netherlands Antilles", COUNTRY_NAME_KN: "Nevis", COUNTRY_NAME_NC: "New Caledonia", COUNTRY_NAME_NZ: "New Zealand", COUNTRY_NAME_NI: "Nicaragua", COUNTRY_NAME_NE: "Niger", COUNTRY_NAME_NG: "Nigeria", COUNTRY_NAME_NU: "Niue", COUNTRY_NAME_NF: "Norfolk Island", COUNTRY_NAME_KP: "North Korea", COUNTRY_NAME_MP: "Northern Mariana Islands", COUNTRY_NAME_NO: "Norway", COUNTRY_NAME_OM: "Oman", COUNTRY_NAME_PK: "Pakistan", COUNTRY_NAME_PW: "Palau", COUNTRY_NAME_PS: "Palestinian Territory", COUNTRY_NAME_PA: "Panama", COUNTRY_NAME_PG: "Papua New Guinea", COUNTRY_NAME_PY: "Paraguay", COUNTRY_NAME_PE: "Peru", COUNTRY_NAME_PH: "Philippines", COUNTRY_NAME_PN: "Pitcairn", COUNTRY_NAME_PL: "Poland", COUNTRY_NAME_PT: "Portugal", COUNTRY_NAME_PR: "Puerto Rico", COUNTRY_NAME_QA: "Qatar", COUNTRY_NAME_RE: "Reunion", COUNTRY_NAME_RO: "Romania", COUNTRY_NAME_RU: "Russia", COUNTRY_NAME_RW: "Rwanda", COUNTRY_NAME_BL: "Saint Barth\xe9lemy", COUNTRY_NAME_PM: "Saint Pierre and Miquelon", COUNTRY_NAME_SH: "Saint Helena, Ascension and Tristan da Cunha", COUNTRY_NAME_LC: "Saint Lucia", COUNTRY_NAME_MF: "Saint Martin", COUNTRY_NAME_VC: "Saint Vincent and the Grenadines", COUNTRY_NAME_WS: "Samoa", COUNTRY_NAME_SM: "San Marino", COUNTRY_NAME_ST: "Sao Tome and Principe", COUNTRY_NAME_SA: "Saudi Arabia", COUNTRY_NAME_SN: "Senegal", COUNTRY_NAME_RS: "Serbia", COUNTRY_NAME_SC: "Seychelles", COUNTRY_NAME_SL: "Sierra Leone", COUNTRY_NAME_SG: "Singapore", COUNTRY_NAME_SX: "Sint Maarten", COUNTRY_NAME_SK: "Slovakia", COUNTRY_NAME_SI: "Slovenia", COUNTRY_NAME_SB: "Solomon Islands", COUNTRY_NAME_SO: "Somalia", COUNTRY_NAME_ZA: "South Africa", COUNTRY_NAME_GS: "South Georgia and the South Sandwich Islands", COUNTRY_NAME_KR: "South Korea", COUNTRY_NAME_SS: "South Sudan", COUNTRY_NAME_ES: "Spain", COUNTRY_NAME_LK: "Sri Lanka", COUNTRY_NAME_SD: "Sudan", COUNTRY_NAME_SR: "Suriname", COUNTRY_NAME_SJ: "Svalbard and Jan Mayen", COUNTRY_NAME_SZ: "eSwatini", COUNTRY_NAME_SE: "Sweden", COUNTRY_NAME_CH: "Switzerland", COUNTRY_NAME_SY: "Syria", COUNTRY_NAME_TW: "Taiwan", COUNTRY_NAME_TJ: "Tajikistan", COUNTRY_NAME_TZ: "Tanzania", COUNTRY_NAME_TH: "Thailand", COUNTRY_NAME_TL: "Timor Leste", COUNTRY_NAME_TG: "Togo", COUNTRY_NAME_TK: "Tokelau", COUNTRY_NAME_TO: "Tonga", COUNTRY_NAME_TT: "Trinidad and Tobago", COUNTRY_NAME_TN: "Tunisia", COUNTRY_NAME_TR: "Turkey", COUNTRY_NAME_TM: "Turkmenistan", COUNTRY_NAME_TC: "Turks and Caicos Islands", COUNTRY_NAME_TV: "Tuvalu", COUNTRY_NAME_VI: "U.S. Virgin Islands", COUNTRY_NAME_UG: "Uganda", COUNTRY_NAME_UA: "Ukraine", COUNTRY_NAME_AE: "United Arab Emirates", COUNTRY_NAME_GB: "United Kingdom", COUNTRY_NAME_US: "United States", COUNTRY_NAME_UM: "United States Minor Outlying Islands", COUNTRY_NAME_UY: "Uruguay", COUNTRY_NAME_UZ: "Uzbekistan", COUNTRY_NAME_VU: "Vanuatu", COUNTRY_NAME_VE: "Venezuela", COUNTRY_NAME_VN: "Vietnam", COUNTRY_NAME_WK: "Wake Island", COUNTRY_NAME_WF: "Wallis and Futuna", COUNTRY_NAME_EH: "Western Sahara", COUNTRY_NAME_YE: "Yemen", COUNTRY_NAME_ZM: "Zambia", COUNTRY_NAME_ZW: "Zimbabwe", INACCESSIBLE_CHANNEL_LINK_TITLE: "You don't have access to this link.", INACCESSIBLE_CHANNEL_LINK_SUBTITLE: "This link is to a server or channel you don't have access to.", INACCESSIBLE_USER_LINK_SUBTITLE: "This link is to a user you don't have access to.", CREATION_INTENT_TITLE: "Tell Us More About Your Server", CREATION_INTENT_DESCRIPTION: "In order to help you with your setup, is your new server for just a few friends or a larger community?", CREATION_INTENT_OPTION_FRIENDS: "For me and my friends", CREATION_INTENT_OPTION_COMMUNITY: "For a club or community", CREATION_INTENT_SKIP: "Not sure? You can [skip this question](onSkip) for now.", VIEW: "View", GUILD_CREATE_INVITE_TITLE: "Add some people", GUILD_CREATE_INVITE_DESCRIPTION: "You’ll need a few friends to get the most out of your server.", GUILD_CREATE_INVITE_SEE_MORE_SUGGESTIONS: "See more friends", GUILD_INVITE_SEARCH_SERVERS_PLACEHOLDER: "Search your servers", GUILD_INVITE_EXPIRATION_SUBLABEL: "Invites expire in {xDays}.", GUILD_INVITE_YOUR_GUILDS_LIST_LABEL: "Owned by you", GUILD_INVITE_OTHER_GUILDS_LIST_LABEL: "Other servers", GUILD_INVITE_SEARCH_NO_RESULTS: "No Results", GUILD_INVITE_CTA: "Invite to Servers", FRIEND_FINDER_SUGGESTIONS: "Suggestions", FRIEND_FINDER_FRIENDS: "All Friends", FRIEND_FINDER_CONTACT_FRIEND_SUGGESTIONS_HEADER: "Contacts on Discord — {count}", FRIEND_FINDER_PEOPLE_YOU_MAY_KNOW_HEADER_NEW_USER: "People you may know — {count}", FRIEND_FINDER_SEARCH_ROW_NOT_FOUND: "No exact username matches found", FRIEND_FINDER_SHOW_ALL: "Show All ({count})", FRIEND_FINDER_HIDE_CONTACTS_FROM_NOTIFICATIONS_TITLE: "Hide Contacts", FRIEND_FINDER_HIDE_CONTACTS_FROM_NOTIFICATIONS_BODY: "Are you sure you want to hide this section? You will no longer see your contacts in Notifications.", CONTACT_SYNC_TITLE: "Find your friends", CONTACT_SYNC_LANDING_TITLE: "Find your friends", CONTACT_SYNC_LANDING_SUBTITLE_REDESIGN: "Let's see which of your contacts is already on Discord!", CONTACT_SYNC_SUBTITLE: "Discord can connect you with your friends and help them find you.", CONTACT_SYNC_ADD_FRIENDS_SUBTITLE: "Sync your phone contacts to find people you know on Discord. [Learn more](learnMoreHook)", CONTACT_SYNC_LANDING_TOGGLE_LABEL: "Allow contacts to add me", CONTACT_SYNC_FIND_FRIENDS: "Find friends", CONTACT_SYNC_LANDING_DISCOVERABILITY_FOOTER: "This allows people to send you friend requests if they have your phone number saved in their contacts. $[Learn more about finding your friends](learnMoreHook)", CONTACT_SYNC_SETTING_LABEL: "Sync Contacts", CONTACT_SYNC_LANDING_INFO_2: "Allow someone to add you if they have your phone number saved in their phone contacts. (Email coming soon!)", CONTACT_SYNC_INFO_2: "Use the settings below to allow someone to add you if they have your contact information saved in their phone contacts.", CONTACT_SYNC_INFO_3: "Allow someone to add you if they have your contact information saved in their phone contacts.", CONTACT_SYNC_LEARN_MORE: "This can be changed anytime in settings. $[Learn More](learnMoreHook)", CONTACT_SYNC_DONT_SHOW_AGAIN: "Don't show me this again", CONTACT_SYNC_SUGGESTIONS_TITLE: "Add Friends", REDESIGN_CONTACT_SYNC_SUGGESTIONS_TITLE: "Add friends", CONTACT_SYNC_CONTACT_INVITE_TITLE: "Invite friends", CONTACT_SYNC_CONTACT_INVITE_SUBTITLE_INCENTIVIZED: "Get a free month of Nitro, the premium Discord experience, when these friends sign up.", CONTACT_SYNC_CONTACT_INVITE_SUBTITLE_NON_INCENTIVIZED: "Invite your friends to to join you on Discord for more fun!", CONTACT_SYNC_SUGGESTIONS_CTA: "Add Friends", CONTACT_SYNC_FRIEND_FINDER_TITLE: "You have {count, plural, one {1 friend} other {{count} friends}} on Discord", CONTACT_SYNC_FRIEND_FINDER_SUBTITLE: "Discord can connect you with your friends and help them find you. Enable access to your contacts to find out who they are.", CONTACT_SYNC_SUGGESTIONS_SUBTITLE: "We found some people you know on Discord! Select who you’d like to send a friend request to.", REDESIGN_CONTACT_SYNC_SUGGESTIONS_SUBTITLE: "Looks like you know some people who are already using Discord! Add them below.", CONTACT_SYNC_NEEDS_PERMISSIONS: "To help you find your friends Discord, we’ll need permission to access your contacts.", CONTACT_SYNC_NEEDS_PERMISSIONS_ANDROID: "To help you find your friends Discord, we’ll need permission to access your contacts. Go to settings, then permissions, then turn contacts on.", CONTACT_SYNC_ENTER_NAME_TITLE: "Enter your name", CONTACT_SYNC_ENTER_NAME_SUBTITLE: "Your name is used for friend requests, suggestions to your contacts and connecting with people you may know.", CONTACT_SYNC_ENTER_NAME_INPUT_HEADER: "Your name", CONTACT_SYNC_UPDATE_NAME_TITLE: "Update your name", CONTACT_SYNC_UPDATE_NAME_SUBTITLE: "Your name is only used when you send friend requests to people you have in your contact book.", CONTACT_SYNC_REMOVE_NAME: "Remove name", CONTACT_SYNC_SUGGESTIONS_EMPTY_TITLE: "Invite your friends to Discord", CONTACT_SYNC_SUGGESTIONS_EMPTY_SUBTITLE: "None of your contacts are on Discord yet, but we’ll let you know when your friends join. For now, you can invite your friends to join Discord!", CONTACT_SYNC_PHONE_VERIFY_TITLE: "Enter your phone number", CONTACT_SYNC_PHONE_VERIFY_TITLE_2: "Find your friends by adding your phone number", CONTACT_SYNC_PHONE_VERIFY_SUBTITLE: "Before we can sync your contacts, we need to verify your phone number.", CONTACT_SYNC_FIND_FRIENDS_TITLE: "Find your friends", CONTACT_SYNC_FIND_FRIENDS_SUBTITLE: "Sync your contacts and start chatting.", CONTACT_SYNC_EMPTY_FRIENDS_SUBTITLE: "Add friends from your contacts and let them know you’re on Discord.", CONTACT_SYNC_INFO_SETTINGS_2: "Discord can connect you with your friends and help them find you. Your contacts will be regularly sent to us. [Learn More](onClick)", CONTACT_SYNC_INFO_PERMISSIONS_FORM_HEADER: "Discovery permissions", SETTINGS_CONTACT_SYNC_DISCOVERY: "Discovery Permissions", CONTACT_SYNC_INFO_PHONE: "People can add you by your phone number", CONTACT_SYNC_INFO_EMAIL: "People can add you by your email", SUGGESTED_FRIENDS_LIST_HEADER: "Suggested Friends", PENDING_FRIENDS_LIST_HEADER: "Pending Friends", PEOPLE_YOU_MAY_KNOW_LIST_HEADER: "People You May Know", FORM_LABEL_REGION_OVERRIDE: "Region Override", FORM_HELP_REGION_OVERRIDE: "Anyone in this channel will connect to the region you set, regardless of where they live. Regions affect voice and video quality. Leave it on Automatic and Discord will figure out what works best.", AUTOMATIC_REGION: "Automatic", STAGE_VOICE_CHANNEL: "Stage Channel", LISTENING_COUNT: "{count, plural, =0 {0 in audience} other {{count} in audience}}", BLOCKED_COUNT: "{count} blocked", SPEAKING_COUNT: "{count, plural, =0 {0 is speaking} other {{count} speaking}}", DISCOVERY_SPEAKER_COUNT: "{speakersCount, plural, =1 {+{count} Speaker} other {+{count} Speakers}}", STAGE_CHANNEL_USERS_ARE_SPEAKING: "{count, plural, =1 {is} other {are}} speaking", STAGE_SETTINGS: "Stage Settings", VISIT_COMMUNITY: "Visit Community", STAGE_MUSIC_MUTE: "Mute Music", STAGE_MUSIC_UNMUTE: "Unmute Music", START_STAGE_CHANNEL_EVENT_MODAL_TITLE: "What will you be talking about?", START_STAGE_CHANNEL_EVENT_MODAL_SUBTITLE: "Write a topic to start your Stage.", START_STAGE_CHANNEL_EVENT_MODAL_TOPIC_LABEL: "Stage Topic", START_STAGE_CHANNEL_EVENT_MODAL_TOPIC_PLACEHOLDER: "The debate is over: diet is better than regular", START_STAGE_CHANNEL_EVENT_MODAL_BUTTON: "Start Stage", START_STAGE_CHANNEL_EVENT_MODAL_TOPIC_REQUIRED: "You must set a topic. It’s a rule we made up.", START_STAGE_CHANNEL_EVENT_MODAL_SPEAKER_HINT: "You will be a Speaker when the Stage opens.", EDIT_STAGE_TITLE: "Edit Stage", EDIT_STAGE_SUBTITLE: "Change the topic", EDIT_STAGE_CHANNEL_TITLE: "Edit Stage", RECOMMENDED: "Recommended", START_STAGE_CHANNEL_EVENT_MEMBERS_TITLE: "Members Only", START_STAGE_CHANNEL_EVENT_MEMBERS_SUBTITLE: "Only members of your server can join.", START_STAGE_CHANNEL_EVENT_PUBLIC_SUBTITLE: "Your Stage will be listed in Stage Discovery.\nAnyone can listen in!", START_STAGE_CHANNEL_EVENT_PUBLIC_EXPLANATION: "People who listen in will also be able to join your server while the Stage is live. Public Stages must follow [additional guidelines.]({articleURL})", START_STAGE_CHANNEL_EVENT_PUBLIC_PERMISSIONS_DISCLAIMER: "Only Stage moderators with Invite Members permission can make their Stage public.", START_STAGE_CHANNEL_EVENT_PUBLIC_PERMANENT_DISCLAIMER: "Public Stages cannot become closed.", START_STAGE_CHANNEL_EVENT_PUBLIC_EVERYONE_WARNING: "You can only start public Stages in channels that are joinable by @everyone.", START_STAGE_PUBLIC_SHORT_TOPIC_WARNING: "Is your topic descriptive enough? Make sure it's clear so that people browsing Stage Discovery can easily know what your Stage and community is about.", START_STAGE_PUBLIC_INFO_TITLE: "Your Stage is going public!", START_STAGE_PUBLIC_INFO_TITLE_CAPTION: "Here are a few things you should know.", START_STAGE_PUBLIC_INFO_ALT_TEXT: "People performing", START_STAGE_PUBLIC_INFO_SECTION_ONE: "This Stage will be listed in Stage Discovery. Anyone can listen in!", START_STAGE_PUBLIC_INFO_SECTION_TWO: "While the Stage is live, listeners can join your server and become part of your community.", START_STAGE_PUBLIC_INFO_SECTION_THREE: "Public Stages must follow a few additional rules. [Read full guidelines here.]({articleURL})", START_STAGE_PUBLIC_INFO_SECTION_FOUR: "Public Stages cannot feature explicit, graphic, or sexual content, and make sure your topic is accurate and descriptive.", START_STAGE_PUBLIC_CONFIRM: "Let's do it", START_STAGE_PUBLIC_PREVIEW_TITLE: "Your Stage is going public!", START_STAGE_PUBLIC_PREVIEW_SUBTITLE: "It'll be listed publicly in Stage Discovery.", START_STAGE_PUBLIC_PREVIEW_SECTION_ONE: "This is a great chance to grow your community! Anyone can listen in from Stage Discovery.", START_STAGE_PUBLIC_PREVIEW_SECTION_TWO: "Listeners can also directly join your server if they like the Stage.", START_STAGE_PUBLIC_PREVIEW_SECTION_THREE: "We recommend a more descriptive topic since listeners might not know about your server.", START_STAGE_PUBLIC_PREVIEW_SECTION_FOUR: "Public Stages must follow [Stage Guidelines.]({articleURL}) No explicit or sexual content allowed.", STAGE_MODERATOR_JOIN_MODAL_TITLE: "Talking or just listening in?", STAGE_MODERATOR_JOIN_MODAL_SUBTITLE: "Join as Speaker to talk, or chill out in the audience.", STAGE_MODERATOR_JOIN_MODAL_JOIN_SPEAKER: "Join as Speaker", STAGE_MODERATOR_JOIN_MODAL_JOIN_AUDIENCE: "Join Audience", STAGE_BLOCKED_USERS_TITLE: "Blocked Accounts Present", STAGE_BLOCKED_USERS_TITLE_PLURAL: "Blocked {number, plural, =1 {Account} other {Accounts}} Present", STAGE_BLOCKED_USERS_BODY: "Just so you know, {number, plural, =1 {# account you blocked is} other {# accounts you blocked are}} in this Stage.", STAGE_BLOCKED_USERS_DESCRIPTION_COUNT: "{number, plural, =1 {# account you blocked is} other {# accounts you blocked are}} in this Stage.", STAGE_BLOCKED_USERS_ACCEPT: "Got it, thanks", STAGE_BLOCKED_USERS_CANCEL: "Never mind", STAGE_BLOCKED_USERS_LIST_A11Y_LABEL: "blocked users", STAGE_START_PROMPT_TITLE: "Waiting for the Stage to start… Any day now.", STAGE_START_PROMPT_TITLE_MODERATOR: "Waiting for the Stage to start.", STAGE_START_PROMPT_TITLE_MODERATOR_DESKTOP: 'Click "Start the Stage", and pick a topic to start the conversation.', STAGE_START_PROMPT_SUBTITLE: "What will you be talking about today?", STAGE_START_PROMPT_SUBTITLE_MOBILE: "Here is some music while you wait.", STAGE_START_PROMPT_SUBTITLE_MOBILE_MODERATOR: 'Press "Start the Stage", and pick a topic to start the conversation.', STAGE_CONTINUE_PROMPT_TITLE: "Continue without starting", STAGE_CONTINUE_PROMPT_SUBTITLE: "For mic checks. Start when you're ready.", STAGE_AUDIENCE_WAITING_ONE: "!!{first}!! is currently waiting.", STAGE_AUDIENCE_WAITING_TWO: "!!{first}!!, and !!{second}!! are currently waiting.", STAGE_AUDIENCE_WAITING_MANY: "!!{first}!!, !!{second}!!, and {numOthers, plural, =1 {# other} other {# others}} are currently waiting.", AUDIENCE_LABEL: "Audience", AUDIENCE_A11Y_LABEL: "!!{name}!! - Audience", SPEAKER_LABEL: "Speakers", SPEAKER_A11Y_LABEL: "!!{name}!! - Speaker", AUDIENCE_RAISE_HAND_CTA: "Request to Speak", AUDIENCE_RAISE_HAND_NO_PERMISSION: "Raise Hand Disabled", AUDIENCE_LOWER_HAND: "Cancel Request", AUDIENCE_DISCONNECT: "Disconnect Quietly", AUDIENCE_SECTION_HEADER: "Audience — {audienceSize}", MODERATOR_RAISE_OWN_HAND: "Speak on Stage", MODERATOR_ALLOW_EVERYONE_RAISE_HAND: "Allow requests from @everyone", STAGE_MODERATOR_TOOLTIP: "Stage Moderator", REQUEST_TO_SPEAK_AREA_TITLE: "Requests to Speak", REQUEST_TO_SPEAK_AREA_OPEN: "Show Requests", REQUEST_TO_SPEAK_AREA_CLOSE: "Hide Requests", REQUEST_TO_SPEAK_AREA_ALL_ROLES: "@everyone can request to speak", REQUEST_TO_SPEAK_AREA_ALL_ROLES_DISABLED: "Requests Disabled", REQUEST_TO_SPEAK_LIST_TITLE: "Requests to Speak — {numHands}", REQUEST_TO_SPEAK_EMPTY_LIST_TITLE: "No Requests", REQUEST_TO_SPEAK_EMPTY_LIST_BODY: "Requests to speak will show up here.", REQUEST_TO_SPEAK_ACCEPT: "Invite to Speak", REQUEST_TO_SPEAK_INVITATION_SEND: "Invite Sent", REQUEST_TO_SPEAK_DECLINE: "Dismiss", REQUEST_TO_SPEAK_ACCESSIBILITY_TEXT: "Open Raised Hands List", REQUEST_TO_SPEAK_ACCESSIBILITY_TEXT_WITH_PENDING_REQUESTS: "Open Raised Hands List, {count, plural, one {# request} other {# requests}} pending", REQUEST_TO_SPEAK_MEMBER_INFO_MEMBER: "Member", REQUEST_TO_SPEAK_MEMBER_INFO_MEMBER_ROLES: "Member with Role(s)", REQUEST_TO_SPEAK_MEMBER_INFO_NEW_MEMBER: "New Member", REQUEST_TO_SPEAK_MEMBER_INFO_NON_MEMBER: "Visitor (Non-Member)", REQUEST_TO_SPEAK_MEMBER_INFO_NEW_TO_DISCORD: "New to Discord", MOVE_ME_TO_AUDIENCE: "Leave the Stage", RAISED_HAND_LIST_MOVED_NUX_TITLE: "Raised Hand list has moved!", RAISED_HAND_LIST_MOVED_NUX_DESCRIPTION: "Click here in the future to see who's requesting to speak.", REQUEST_TO_SPEAK: "Request to Speak", ROLE_PERMISSIONS_REQUEST_TO_SPEAK_DESCRIPTION: "Allow requests to speak in Stage channels. Stage moderators manually approve or deny each request.", ROLE_PERMISSIONS_REQUEST_TO_SPEAK_DESCRIPTION_CATEGORY: "Allow requests to speak in these Stage channels. Stage moderators manually approve or deny each request.", ROLE_PERMISSIONS_REQUEST_TO_SPEAK_DESCRIPTION_STAGE: "Allow requests to speak in this Stage channel. Stage moderators manually approve or deny each request.", ROLE_PERMISSIONS_SECTION_STAGE: "Stage Channel Permissions", ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_STAGE: "(Required for Stage moderator) Allow members to set a topic to start the Stage and enable or disable requests to speak. They can also delete the Stage channel.", ROLE_PERMISSIONS_MANAGE_ROLES_DESCRIPTION_STAGE: "Allow members to change this channel's permissions.", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_STAGE_EVERYONE: "Allow members to join this Stage channel as the audience. Disabling this and the View Channel permissions for @everyone will make this channel private.", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_STAGE: "Allow members to join this Stage channel as the audience.", ROLE_PERMISSIONS_SPEAK_DESCRIPTION_STAGE: "Allow members to be Speakers in this channel.", ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_STAGE: "Allow Speaker voices to be heard automatically when they start talking. If this permission is disabled, Speakers will be required to use Push to Talk.", ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_STAGE: "(Required for Stage moderator) Allow members to add or remove Speakers.", ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_STAGE: "(Required for Stage moderator) Allow members to force others to disconnect from this channel.", STAGE_CHANNEL_CANNOT_OVERWRITE_PERMISSION: "This override is currently disabled for Stage channels.", STAGE_INVITE_GUILD_HEADER: "Presented By", STAGE_INVITE_SPEAKER_COUNT: "{count, plural, =1 {1 Speaker} other {{count} Speakers}}", STAGE_CHANNEL_USER_MOVE_TO_AUDIENCE: "Leave the Stage", STAGE_CHANNEL_USER_MOVE_TO_AUDIENCE_OTHER: "Move to Audience", STAGE_CHANNEL_USER_INVITE_TO_SPEAK: "Invite to Speak", STAGE_CHANNEL_USER_INVITED_TO_SPEAK: "Invite Sent", STAGE_CHANNEL_USER_SET_MYSELF_TO_SPEAKER: "Speak on Stage", STAGE_AUDIENCE: "Audience", STAGE_SPEAKER: "Speaker", STAGE_CHANNEL_START_TITLE: "Start the Stage", STAGE_CHANNEL_START_SUBTITLE: "Pick a topic to start the conversation.", STAGE_CHANNEL_AUDIENCE_COUNT: "{userCount} listening", STAGE_CHANNEL_NO_AUDIENCE: "No listeners yet", STAGE_CHANNEL_LIVE_NOW: "Live Now", STAGE_CHANNEL_HAPPENING_NOW: "Happening Now", STAGE_CHANNEL_JOIN_BUTTON: "Listen In", STAGE_CHANNEL_JOINED_AUDIENCE_BUTTON: "Joined Audience", STAGE_CHANNEL_JOINED_SPEAKER_BUTTON: "Joined as Speaker", STAGE_CHANNEL_LEAVE_BUTTON: "Disconnect Quietly", STAGE_CHANNEL_NO_TOPIC: "No topic yet. Write one to start the Stage!", STAGE_CHANNEL_AUDIENCE_NO_TOPIC: "Waiting for event to start. [elevator music]", STAGE_CHANNEL_AUDIENCE_MODAL_TITLE: "Welcome to Stages!", STAGE_CHANNEL_AUDIENCE_MODAL_BULLET_1: "Your mic will be muted unless you are invited to speak.", STAGE_CHANNEL_AUDIENCE_MODAL_BULLET_2: "You can leave and rejoin anytime without making noise.", STAGE_CHANNEL_AUDIENCE_MODAL_BULLET_3: "Request to speak to join the conversation!", STAGE_CHANNEL_AUDIENCE_MODAL_BULLET_4: "Listening to a public Stage will show up as your status. Go to User Settings > Activity Status for more info.", STAGE_CHANNEL_AUDIENCE_MODAL_ACTION: "Got it!", STAGE_CHANNEL_AUDIENCE_MODAL_ALT_TEXT: "Illustration of four people sitting on a couch watching a stage curtain open", STAGE_SPEAK_INVITE_HEADER: "You have been invited to speak.", STAGE_SPEAK_INVITE_HEADER_BLOCKED_USERS: "{number, plural, =1 {# blocked user} other {# blocked users}} present", STAGE_SPEAK_INVITE_PUSH_NOTIFICATION: "You have been invited to speak in !!{channelName}!! about !!{channelTopic}!!.", STAGE_SPEAK_INVITE_ACCEPT: "Accept", STAGE_SPEAK_INVITE_DECLINE: "Decline", STAGE_SPEAK_INVITE_BLOCKED_USERS: "{number, plural, =1 {# blocked user} other {# blocked users}} in this Stage", STAGE_SPEAK_INVITE_MODAL: "Join the speakers in $[](stageChannelHook)", STAGE_CHANNEL_JOIN: "Join Stage", GUILD_STAGES_CANT_START_EVENT_YET: "This Stage isn't scheduled to start until {startDate} at {startTime}", EXIT_EVENT_STAGE_OPTIONS_LABEL: "Disconnect Quietly", END_GUILD_EVENT_FOR_EVERYONE: "End Stage for Everyone", END_EVENT_STAGE_CONFIRMATION_TITLE: "Are you sure you want to end the Stage for everyone?", END_EVENT_STAGE_CONFIRMATION_SUBTITLE: "The Stage will end immediately.", STAGE_START_NOTIFICATION_CATEGORY: "Stage Live", STAGE_START_PUSH_NOTIFICATION_TITLE: "!!{guildName}!! is hosting a live Stage", STAGE_START_PUSH_NOTIFICATION_BODY: '!!{username}!!: @everyone "!!{topic}!!" is starting. Listen in!', STAGE_FULL_MODERATOR_TITLE: "This Video Stage is full!", STAGE_FULL_MODERATOR_BODY: "Boost the server to let more people in.\nLevel 2 supports 150 people. Level 3 supports 300.", STAGE_FULL_MODERATOR_MAX_TITLE: "This Video Stage is maxed out.", STAGE_FULL_MODERATOR_MAX_TITLE_MOBILE: "You've maxed out!", STAGE_FULL_TITLE: "Sorry, this Stage is full.", STAGE_FULL_BODY: "This server will need to be Boosted to the next level to support more people.", STAGE_FULL_MAX_BODY: "This Stage is at maximum capacity.", STAGE_FULL_BOOST_MORE_BODY: "This server will need to be Boosted to the next level to support more people. Each additional Boost grants 30 more seats in Video Stage events.", GUILD_SCHEDULED_EVENT_STAGE_START_TITLE: "Your event is starting in !!{guildName}!!", GUILD_SCHEDULED_EVENT_STAGE_START_BODY: '"!!{topic}!!" with !!{username}!!. Join in!', GUILD_SCHEDULED_EVENT_EXTERNAL_START_BODY: '"!!{topic}!!". Join in!', GUILD_SCHEDULED_EVENT_LIVE: "Event Live", GUILD_SCHEDULED_EVENT_JOIN_LIVE: "Join Event", GUILD_SCHEDULED_EVENT_VIEW_DETAIL: "View Details", GUILD_EVENT_INTERESTED_COUNT: "{count, plural, =1 {# person is} other {# people are}} interested", GUILD_EVENT_CREATED_BY_HOOK: "Created by $[](usernameHook)", GUILD_EVENT_CREATED_BY: "Created by {username}", DATE_GENERIC_ERROR: "The date selected is invalid.", DATE_BELOW_MIN_ALERT_BODY: "Please choose a date on or after {minDate}.", DATE_ABOVE_MAX_ALERT_BODY: "Please choose a date before {maxDate}.", CREATE_EVENT_START_DATE_LABEL: "Start Date", CREATE_EVENT_START_TIME_LABEL: "Start Time", CREATE_EVENT_ADD_END_TIME_LABEL: "Add end date and time", CREATE_EVENT_REMOVE_END_TIME_LABEL: "Remove end date and time", CREATE_EVENT_END_DATE_LABEL: "End Date", CREATE_EVENT_END_TIME_LABEL: "End Time", CREATE_EVENT_PRIVACY_LABEL: "Visibility/Privacy", MANAGE_EVENTS: "Manage Events", CREATE_EVENTS: "Create Events", ROLE_PERMISSIONS_SECTION_GUILD_EVENTS: "Events Permissions", ROLE_PERMISSIONS_MANAGE_EVENTS_DESCRIPTION: "Allows members to edit and cancel events.", ROLE_PERMISSIONS_CREATE_EVENTS_DESCRIPTION: "Allows members to create events.", ROLE_PERMISSIONS_MANAGE_EVENTS_DESCRIPTION_CATEGORY: "Allows members to edit and cancel events in these channels.", ROLE_PERMISSIONS_MANAGE_EVENTS_DESCRIPTION_CHANNEL: "Allows members to edit and cancel events in this channel.", ROLE_PERMISSIONS_CREATE_EVENTS_DESCRIPTION_CATEGORY: "Allows members to create events in these channels.", ROLE_PERMISSIONS_CREATE_EVENTS_DESCRIPTION_CHANNEL: "Allows members to create events in this channel.", STAGE_SPEAK_INVITE_SEND: "Invite to Speak", STAGE_IS_SPEAKING_ZERO_QUANTITY_HOOK: "](usernameHook)is speaking...", STAGE_IS_SPEAKING_HOOK: "$[{username} {count, plural, =1 {and one other](usernameHook) are speaking...} other {and {count} others](usernameHook) are speaking...}}", STAGE_DISCOVERY_TOOLTIP: "New: Discover Live Stages", STAGE_DISCOVERY_INTRO_CARD_BODY_DESKTOP: "There's a community talking about it on Discord.\nListen to conversations happening live with Stages.", ACTIVITY_CARD_GUILD_MEMBERS: "{count, plural, one {{count} Member} other {{count, number} Members}}", ACTIVITY_CARD_GUILD_EVENT_LIVE: "Live Event", ACTIVITY_CARD_GUILD_EVENT_UPCOMING: "Upcoming Event", ACTIVITY_CARD_LIVE_STAGE_LISTENERS_NO_SPEAKER: "{listener_count, number} listeners", ACTIVITY_CARD_LIVE_STAGE_LISTENERS: "{speaker_name} + {listener_count, number} listeners", ACTIVITY_CARD_LIVE_STAGE_LISTENING: "!!{name}!! is listening", ACTIVITY_CARD_LIVE_STAGE_LISTENING_TWO: "!!{name1}!! and !!{name2}!! are listening", ACTIVITY_CARD_LIVE_STAGE_LISTENING_MANY: "!!{name}!! and !!{count}!! others are listening", ACTIVITY_CARD_LIVE_STAGE_WATCHING: "!!{name}!! is watching", ACTIVITY_CARD_LIVE_STAGE_WATCHING_TWO: "!!{name1}!! and !!{name2}!! are watching", ACTIVITY_CARD_LIVE_STAGE_WATCHING_MANY: "!!{name}!! and !!{count}!! others are watching", ACTIVITY_CARD_LIVE_STAGE_SPEAKING: "!!{name}!! is speaking", ACTIVITY_CARD_LIVE_STAGE_ON_STAGE: "!!{name}!! on stage", ACTIVITY_CARD_LIVE_STAGE_ON_STAGE_TWO: "!!{name1}!! and !!{name2}!! on stage", ACTIVITY_CARD_LIVE_STAGE_ON_STAGE_MANY: "!!{name}!! and !!{count}!! others on stage", ACTIVITY_CARD_LIVE_STAGE_SHARING: "!!{name}!! is sharing", ACTIVITY_CARD_LIVE_STAGE_SHARING_TWO: "!!{name1}!! and !!{name2}!! are sharing", ACTIVITY_CARD_LIVE_STAGE_SHARING_MANY: "!!{name}!! and !!{count}!! others are sharing", ACTIVITY_CARD_LIVE_STAGE_MANY_FRIENDS: "!!{name}!! and {count, number} other friends", ACTIVITY_CARD_LIVE_STAGE_MANY_PARTICIPANTS: "!!{name}!! and {count, number} others", GUILD_EVENTS: "Events", GUILD_EVENTS_PLURAL: "{number, plural, =1 {# Event} other {# Events}}", LIVE_EVENT: "Live Event", START_EVENT: "Start Event", SCHEDULE_EVENT: "Create Event", CREATE_AND_VIEW_EVENTS: "Create & View Events", INDICATE_RSVP: "Interested", GUILD_MEMBER_REQUIRED_FOR_EVENT: "You must join the server first.", ADD_TO_CALENDAR: "Add to Calendar", ADD_TO_GOOGLE_CALENDAR: "Add to Google Calendar", DOWNLOAD_ICS: "Download ICS file", ADD_TO_YAHOO: "Add to Yahoo", ADD_TO_OUTLOOK: "Add to Outlook", CALENDAR_CHANNEL_LOCATION: "Discord: !!{guildName}!! server, !!{channelName}!!", EDIT_EVENT: "Edit Event", DELETE_EVENT: "Cancel Event", SAVE_EVENT: "Save Event", END_EVENT: "End Event", HAPPENING_NOW: "Happening Now", ACTIVE_NOW: "Active Now", SEE_DETAIL: "Event Details", EVENT_MARK_INTERESTED: "Mark as Interested", EVENT_MARK_NOT_INTERESTED: "Mark as Not Interested", EVENT_DETAILS_A11Y_HINT: "Double tap to view event details", SCHEDULE_EVENT_DESCRIPTION: "Schedule a Stage for a future date.", GO_TO_CHANNEL: "Go To Channel", STARTING_SOON: "Starting soon", NEW_EVENT: "New Event", DISCONNECT_MENU: "Disconnect Actions", STARTING_IN_MINUTES: "Starting in {minutes}m", STARTING_ON_DATE: "Starting on {date}", ENDING_ON_DATE: "Ends {date}", START_DATE_TO_END_DATE: "{start} — {end}", START_DATE_TO_END_DATE_WITH_COLOR: "$[!!{start}!!](startHook) — Ends {end}", START_EVENT_CONFIRMATION: "You are about to start this $[**!!{privacyLevel}!!**](privacyLevelHook) event", START_EVENT_CONFIRMATION_NO_HOOK: "You are about to start this event", GUILD_NOTIFY_MEMBERS: "Notify @everyone", GUILD_NOTIFY_MEMBERS_DESKTOP: "Also let @everyone know the event is starting.", GUILD_NOTIFY_MEMBERS_TOOLTIP_NEW: "This will send a notification to members who can see this channel.", GUILD_NOTIFY_MEMBERS_ENABLED_NEW: "We'll let @everyone know the Stage is starting.", GUILD_NOTIFY_MEMBERS_DISABLED_NEW: "Tell @everyone that the Stage is starting.", GUILD_EVENT_INTERESTED: "{count, number} Interested", GUILD_EVENT_INTERESTED_NOTIFICATION: "You'll be notified when the event starts", GUILD_EVENT_PREVIEW_TITLE: "Here's a preview of your event.", GUILD_EVENT_PREVIEW_BODY: "When it's time, visit $[**!!{channelName}!!**](channelHook) to start the event!", GUILD_EVENT_PREVIEW_BODY_A11Y_LABEL: "When it's time, visit !!{channelName}!! to start the event!", GUILD_EVENT_PREVIEW_EXTERNAL_EVENT_BODY: "This event will auto start when it's time.", GUILD_EVENT_START_DATE_REQUIRED: "Events must have a start date and time.", GUILD_EVENT_END_DATE_REQUIRED: "End date and time are required.", GUILD_EVENT_PAST_START_DATE: "The start time must be in the future.", GUILD_EVENT_PAST_END_DATE_1: "The end time must be in the future.", GUILD_EVENT_END_DATE_BEFORE_START_DATE: "The end time must be after the start time.", GUILD_EVENT_DELETE_CONFIRM_HEADER: "Cancel Event?", GUILD_EVENT_DELETE_CONFIRM_BODY: "Are you sure you want to cancel this event?", GUILD_EVENT_CREATE_HEADER: "What's your event about?", GUILD_EVENT_CREATE_BODY: "Fill out the details of your event.", GUILD_EVENT_CREATE_TOPIC_LABEL: "Event Topic", GUILD_EVENT_CREATE_TOPIC_PLACEHOLDER: "What's your event?", GUILD_EVENT_CREATE_DESCRIPTION_PLACEHOLDER: "Tell people a little more about your event. Markdown, new lines, and links are supported.", GUILD_EVENT_IMAGE: "Cover Image", GUILD_EVENT_ADD_IMAGE: "Upload Cover Image", GUILD_EVENT_CHANGE_IMAGE: "Change Image", GUILD_EVENT_ADD_IMAGE_SUGGESTION: "We recommend an image that’s at least 800px wide and 320px tall.", GUILD_EVENT_REMOVE_IMAGE: "Remove Image", GUILD_EVENT_CREATE_TOPIC_ERROR_EMPTY_FIELD: "An event topic is required.", GUILD_EVENT_CREATE_START_TIME_ERROR_EVENT_STARTED: "You cannot edit the start time of an already active event.", GUILD_EVENT_CREATE_ENTITY_TYPE_ERROR_EMPTY_FIELD: "You must first choose an event location.", GUILD_EVENT_CREATE_IRL_LOCATION_ERROR_EMPTY_FIELD: "A location is required.", GUILD_EVENT_CREATE_CHANNEL_ERROR_EMPTY_FIELD: "A channel is required.", GUILD_EVENT_START_PROMPT: 'Start Event: "{eventName}"', GUILD_EVENT_UPCOMING_PROMPT: 'Upcoming Event: "{eventName}"', GUILD_EVENT_START_PROMPT_DESCRIPTION: "Scheduled for {startTime}", GUILD_EVENT_MODAL_EMPTY_TITLE: "There are no upcoming events.", GUILD_EVENT_MODAL_EMPTY_SUBTITLE: "Schedule an event for any planned activity in your server.", GUILD_EVENT_ROLE_TIP: "You can give other people permission to create events in **[Server Settings > Roles](onClick)**.", GUILD_EVENT_PRIVATE_CHANNEL_TOOLTIP: "Only members who can view this channel can see this event.", GUILD_EVENT_CANNOT_CONNECT: "Missing permission to connect.", GUILD_EVENT_DATE_AT_TIME: "{date} at {time}", GUILD_EVENT_STEP_LABEL: "Step {step} of {total}", GUILD_EVENT_MODAL_PROGRESS_BAR_STEP_1: "Location", GUILD_EVENT_MODAL_PROGRESS_BAR_STEP_2: "Event Info", GUILD_EVENT_MODAL_PROGRESS_BAR_STEP_3: "Review", GUILD_EVENT_LOCATION_TITLE: "Where is your event?", GUILD_EVENT_PRIVATE_DESCRIPTION: "Events in private channels will only be visible to people who can access that channel.", GUILD_EVENT_LOCATION_SUBTITLE: "So no one gets lost on where to go.", GUILD_EVENT_LOCATION_EXTERNAL: "Somewhere Else", GUILD_EVENT_LOCATION_OPTION_STAGE_HINT: "Great for larger community audio events.", GUILD_EVENT_LOCATION_OPTION_VOICE_HINT: "Hang out with voice, video, screenshare, and Go Live.", GUILD_EVENT_LOCATION_OPTION_ELSEWHERE_HINT: "Text channel, external link, or in-person location.", GUILD_EVENT_LOCATION_OPTION_ELSEWHERE_PLACEHOLDER: "Add a location, link, or something.", GUILD_EVENT_LOCATION_VOICE_FIELD_LABEL: "Select a channel", GUILD_EVENT_LOCATION_SELECT_BUTTON_A11Y_HINT: "Tap to open the channel selection list", GUILD_EVENT_LOCATION_DISABLED_NO_AVAILABLE_CHANNEL: "There are no available channels.", GUILD_EVENT_LOCATION_DISABLED_NO_PERMISSION: "You do not have the required server or channel permission.", GUILD_EVENT_LOCATION_DISABLED_EXTERNAL_NO_PERMISSION: "You do not have permission.", GUILD_EVENT_LOCATION_DISABLED_CANNOT_EDIT: "You cannot edit the location type of an event after it starts.", GUILD_EVENT_LOCATION_A11Y_LABEL: "Event Location", GUILD_EVENT_STAGE_UPSELL_TITLE: "Try using a Stage channel!", GUILD_EVENT_STAGE_UPSELL: "Good for: $[Q&A, AMA, Panel Discussion](suggestionsHook)", GUILD_EVENT_STAGE_UPSELL_HINT_1: "Q&A", GUILD_EVENT_STAGE_UPSELL_HINT_2: "AMA", GUILD_EVENT_STAGE_UPSELL_HINT_3: "Panel", GUILD_EVENT_STAGE_UPSELL_HINT_4: "Discussion", GUILD_EVENT_STAGE_UPSELL_ALT_IMAGE: "Three speakers in a Stage channel speak to five audience members, two audience members have their hand raised", GUILD_EVENT_LOCATION_ELSEWHERE_FIELD_LABEL: "Enter a location", GUILD_EVENT_LOCATION_ELSEWHERE_FIELD_PLACEHOLDER: "Add a location, link, or something.", GUILD_EVENT_INVITE_EMBED_JOIN_SERVER_BUTTON_LABEL: "Join and View Event", GUILD_EVENT_INVITE_COMPLETED: "Event is over", GUILD_EVENT_TOOLTIP_COPY_INVITE: "Share server invite link to event", GUILD_EVENT_TOOLTIP_COPY_INVITE_WITHOUT_PERMISSION: "Copy direct event link. Invite permission is required to create a server invite link.", GUILD_EVENT_TOOLTIP_COPY_INVITE_PRIVATE_CHANNEL: "Copy direct event link. Events in private channels don't support server invite links.", GUILD_EVENT_STARTED: "Event is in progress", GUILD_EVENT_END_PROMPT_TITLE: "Do you want to also end the event?", GUILD_EVENT_END_PROMPT_BODY: "If no one is in the channel, the event will automatically end once it feels lonely.", GUILD_EVENT_END_PROMPT_CONFIRM: "Yes, end the event", GUILD_EVENT_END_PROMPT_CANCEL: "No, just disconnect", GUILD_EVENT_EXTERNAL_END_PROMPT_TITLE: "Are you sure you want to end the event?", GUILD_EVENT_JOIN: "Join", GUILD_EVENT_DETAILS_INFO_TAB_TITLE: "Event Info", GUILD_EVENT_DETAILS_USER_LIST_TAB_TITLE: "{userCount} Interested", GUILD_EVENT_DETAILS_USER_LIST_EMPTY_TITLE: "No one's interested in this event yet.", GUILD_EVENT_DETAILS_USER_LIST_REMAINING: "{userRemainCount, plural, =1 {# more person is} other {# more people are}} interested.", GUILD_EVENT_DETAILS_USER_LIST_FETCH_ERROR: "We are having problems looking up who is interested in this event. Please try again later.", GUILD_EVENT_CHANNEL_DELETE_GUILD_EVENTS: "There {count, plural, =1 {is **{count}** Event} other {are **{count}** Events}} associated with this channel. Deleting this channel will also delete the {count, plural, =1 {Event} other {Events}}.", GUILD_EVENTS_LIST_ACTION_SHEET_HEADER: "{count, plural, one {1 Event} other {{count} Events}}", GUILD_EVENTS_LIST_ACTION_SHEET_CREATE_EVENT: "Create", GUILD_EVENT_UPSELL_HEADER_PART_1: "Starting now:", GUILD_EVENT_UPSELL_HEADER_PART_2: "Scheduled Events", GUILD_EVENT_UPSELL_HEADER: "Starting now:\nScheduled Events", GUILD_EVENT_UPSELL_BODY: "Plan a watch party, game night, hangout, mysterious guest appearance, anything you want in advance.", GUILD_EVENT_UPSELL_PRIMARY_CTA: "Check it out", GUILD_EVENT_UPSELL_ALT_IMG: "Calendar next to three friends in voice chat, with lots of sparkles and excitement", GUILD_EVENT_CREATED_MODAL_HEADER: "All set. Now share your event!", GUILD_EVENT_CREATED_MODAL_BODY: "Copy the event link below to invite people to your event. This also acts as a server invite link.", EVENT_CANCELED: "Canceled", GUILD_EVENT_DELETE_CONFIRM_BODY_IS_RECURRING: "Canceling this event will also **cancel all events** in this series.", DELETE_ALL_EVENTS: "Cancel all Events", DELETE_THIS_EVENT: "Cancel this Event", DELETE_ALL_EVENTS_IN_SERIES: "Cancel all Events in this Series", RESTORE_EVENT: "Restore Event", CREATE_EVENT_RECUR_LABEL: "Event Frequency", CREATE_EVENT_RECUR_NONE: "Does not repeat", CREATE_EVENT_RECUR_WEEKLY: "Weekly on {weekday}", CREATE_EVENT_RECUR_BIWEEKLY: "Every other {weekday}", CREATE_EVENT_RECUR_MONTHLY: "Monthly on the {nth, plural, =1 {first} =2 {second} =3 {third} =4 {fourth} =5 {fifth}} {weekday}", CREATE_EVENT_RECUR_YEARLY: "Annually on {date}", CREATE_EVENT_RECUR_WEEKDAYS: "Every weekday (Monday to Friday)", CREATE_EVENT_RECUR_WEEKENDS: "Every weekend (Saturday and Sunday)", GUILD_SCHEDULED_EVENT_VIEW_MORE_RECURRENCES: "View future events", GUILD_SCHEDULED_EVENT_RECURRENCE_RULE: "Repeats {recurrenceRule}", GUILD_SCHEDULED_EVENT_REPEATS: "Events in series", GUILD_SCHEDULED_EVENT_REPEATS_WEEKLY: "Repeats every {weekday}", GUILD_SCHEDULED_EVENT_REPEATS_BIWEEKLY: "Repeats every other {weekday}", GUILD_SCHEDULED_EVENT_REPEATS_MONTHLY: "Repeats monthly on the {nth, plural, =1 {first} =2 {second} =3 {third} =4 {fourth} =5 {fifth}} {weekday}", GUILD_SCHEDULED_EVENT_REPEATS_YEARLY: "Repeats every {date}", GUILD_SCHEDULED_EVENT_REPEATS_WEEKDAYS: "Repeats every weekday (Monday to Friday)", GUILD_SCHEDULED_EVENT_REPEATS_WEEKENDS: "Repeats every weekend (Saturday and Sunday)", GUILD_SCHEDULED_EVENT_RSVP_PICKER_HEADER_INTERESTED: "I am interested in...", GUILD_SCHEDULED_EVENT_RSVP_PICKER_HEADER_UNINTERESTED: "I am not interested in...", GUILD_SCHEDULED_EVENT_RSVP_PICKER_OPTION_SERIES: "All events in this series", GUILD_SCHEDULED_EVENT_RSVP_PICKER_OPTION_RECURRENCE: "Only this event", GUILD_CREATE_STAFF_ONLY_HINT: "Only Discord employees would be able to join this server.", EDIT_THIS_EVENT: "Edit this Event", EDIT_ALL_EVENTS: "Edit all Events in this Series", GUILD_EVENT_EDIT_CONFIRM_BODY_CONFIRM: "Are you sure you want to edit this event?", GUILD_EVENT_EDIT_CONFIRM_BODY_EDIT_ALL_HINT: "Editing this event will also **update all events** in this series.", COPY_RECURRENCE_LINK: "Copy Link for Only this Event", COPY_SERIES_LINK: "Copy Link for all Events", GUILD_SETTINGS_ACTION_FILTER_GUILD_SCHEDULED_EVENT_CREATE: "Create Event", GUILD_SETTINGS_ACTION_FILTER_GUILD_SCHEDULED_EVENT_UPDATE: "Update Event", GUILD_SETTINGS_ACTION_FILTER_GUILD_SCHEDULED_EVENT_DELETE: "Cancel Event", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_CREATE: "$[**!!{user}!!**](userHook) scheduled the event $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_UPDATE: "$[**!!{user}!!**](userHook) updated the scheduled event $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_DELETE: "$[**!!{user}!!**](userHook) canceled the scheduled event $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_RECURRENCE_UPDATE: "$[**!!{user}!!**](userHook) updated an event recurrence for $[**!!{target}!!**](targetHook) at **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_RECURRENCE_DELETE: "$[**!!{user}!!**](userHook) reset an event recurrence for $[**!!{target}!!**](targetHook) at **!!{subtarget}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_NAME_CREATE: "With the name **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_DESCRIPTION_CREATE: "Set the description to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_STATUS_SCHEDULED: "Set the status to **Scheduled**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_STATUS_ACTIVE: "Set the status to **Active**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_STATUS_COMPLETED: "Set the status to **Completed**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_STATUS_CANCELED: "Set the status to **Canceled**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_ENTITY_TYPE_NONE: "Linked to **Nothing**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_ENTITY_TYPE_STAGE_INSTANCE: "Linked with a **Stage**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_ENTITY_TYPE_VOICE: "Linked with a **Voice Channel**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_ENTITY_TYPE_EXTERNAL: "Linked **externally**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_CHANNEL: "Set the channel to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_CHANNEL_CLEAR: "Removed the channel", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_LOCATION: "Set the location to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_LOCATION_CLEAR: "Removed the location", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_RECURRENCE_RULE: "Updated the recurrence", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_RECURRENCE_RULE_CLEAR: "Removed the recurrence", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_IMAGE_HASH_CHANGE: "Set the cover image", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_IMAGE_HASH_REMOVE: "Removed the cover image", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_EXCEPTION_SCHEDULED_START_TIME_CHANGE: "Set the start time to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_EXCEPTION_SCHEDULED_START_TIME_REMOVED: "Reset the start time", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_EXCEPTION_SCHEDULED_END_TIME_CHANGE: "Set the start time to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_EXCEPTION_SCHEDULED_END_TIME_REMOVED: "Reset the end time", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_EXCEPTION_IS_CANCELED_CANCELED: "Canceled this event", GUILD_SETTINGS_AUDIT_LOG_SCHEDULED_EVENT_EXCEPTION_IS_CANCELED_RESTORED: "Restored this event", CHANNEL_PERMISSIONS_MODERATOR_TITLE: "Stage Moderators", CHANNEL_PERMISSIONS_MODERATOR_CURRENT_TITLE: "Current Stage moderators", CHANNEL_PERMISSIONS_MODERATOR_DESCRIPTION: "Stage moderators are Speakers who can add and remove other Speakers. They can also start the Stage event. Stage moderators don't have to be mods of the server.", CHANNEL_PERMISSIONS_MODERATOR_LABEL: "Who is a Stage moderator for this channel?", CHANNEL_PERMISSIONS_REMOVE_MODERATOR_TOOLTIP: "Remove Stage moderator from channel.", CHANNEL_PERMISSIONS_NOT_MODERATOR: "You are not a Stage moderator.", CHANNEL_PERMISSIONS_SEARCH_TOOLTIP: "Only users or roles with Manage Roles permission can be added.", CHANNEL_PERMISSIONS_CANNOT_EDIT_MODERATORS: "You cannot add or remove Stage moderators.", CHANNEL_PERMISSIONS_ADD_MODERATOR_TITLE: "Add Stage moderators", CHANNEL_PERMISSIONS_REMOVE_NOT_OVERWRITE: "Permissions do not come from a channel overwrite.", CHANNEL_PERMISSIONS_ROLE_ALREADY_HAS_PERMISSIONS: "Already has permissions", CHANNEL_PERMISSIONS_MODERATOR_TITLE_SIMPLE: "Moderators", CHANNEL_PERMISSIONS_ADD_MODERATOR_TITLE_SIMPLE: "Add Stage moderators", CHANNEL_PERMISSIONS_ADD_HAS_GUILD_PERMISSIONS: "Role already has server-level permissions.", TIMEOUT_SUBMIT: "Timeout", DISABLE_GUILD_COMMUNICATION_FOR_USER: "Timeout !!{user}!!", ENABLE_GUILD_COMMUNICATION_FOR_USER: "Remove Timeout From !!{user}!!", MANUALLY_VERIFY_MEMBER: "Verify Member", MANUALLY_UNVERIFY_MEMBER: "Unverify Member", MODERATE_MEMBER: "Timeout Members", MODERATE_MEMBERS_PERMISSION_INTERNAL: "Moderate Members", ROLE_PERMISSIONS_MODERATE_MEMBER_DESCRIPTION: "When you put a user in timeout they will not be able to send messages in chat, reply within threads, react to messages, or speak in voice or Stage channels.", DISABLE_GUILD_COMMUNICATION_TITLE: "Timeout", TIME_OUT: "Timeout", REMOVE_TIME_OUT: "Remove Timeout", DISABLE_GUILD_COMMUNICATION_BODY: "When you put a user in timeout they will not be able to send messages in chat, reply within threads, react to messages, or speak in voice or Stage channels. [Learn more]({helpdeskArticle})", REASON: "Reason", DURATION: "Duration", DISABLE_GUILD_COMMUNICATION_CONFIRMED: "!!{user}!! has been timed out for {duration}", ENABLE_GUILD_COMMUNICATION_BODY: "!!{user}!! has {timeRemaining} remaining in timeout.", ENABLE_GUILD_COMMUNICATION_BODY_HELP_TEXT: "Remove it now to let them post and react to messages, and join voice and stage channels. [Learn more]({helpdeskArticle})", GUILD_ENABLE_COMMUNICATION_HEADER: "Remove Timeout", GUILD_ENABLE_COMMUNICATION_TIME_REMAINING: "!!{username}!! has $[](countdown) remaining in timeout.", GUILD_ENABLE_COMMUNICATION_CTA: "Remove it now to let them post and react to messages, and join voice and stage channels. [Learn More]({link})", GUILD_ENABLE_COMMUNICATION_SUCCESS: "Timeout Removed", DISABLE_GUILD_COMMUNICATION_REASON_HEADER: "Reason for Timeout", DISABLE_GUILD_COMMUNICATION_BODY_HEADER: "Members who are in timeout are temporarily not allowed to chat or react in text channels. They are also not allowed to connect to voice or Stage channels. [Learn more.]({helpdeskArticle})", DISABLE_GUILD_COMMUNICATION_BODY_ITEM_1: "Disables posting or reacting to messages in text chat", DISABLE_GUILD_COMMUNICATION_BODY_ITEM_2: "Prevents them from connecting to voice or stage channels", DISABLE_GUILD_COMMUNICATION_BODY_ITEM_3: "Automatically disconnects them from a voice or stage channel", DISABLE_GUILD_COMMUNICATION_FOOTER: "This will be visible in Server Settings > Audit Log.", TIMEOUT_USER: "Timeout", GUILD_COMMUNICATION_DISABLED_ON_MEMBER: "Timed Out", GUILD_COMMUNICATION_DISABLED_NOTICE_HEADER: "Timed Out", GUILD_COMMUNICATION_DISABLED_REMOVED: "Removed", GUILD_COMMUNICATION_DISABLED_DURATION: "DURATION", GUILD_COMMUNICATION_DISABLED_REASON: "REASON", GUILD_COMMUNICATION_DISABLED_REASON_HINT_ANDROID: "Enter a reason.", GUILD_COMMUNICATION_DISABLED_REASON_PLACEHOLDER: "Enter a reason. This will only be visible in the Audit Log and will not be shown to the member.", GUILD_COMMUNICATION_DISABLED_SUCCESS: "!!{user}!! Timed Out", GUILD_COMMUNICATION_DISABLED_CHAT_NOTICE_TITLE: "TIMED OUT", GUILD_COMMUNICATION_DISABLED_CHAT_NOTICE_DESCRIPTION: "You can not chat, reply, react, or join voice channels during timeout. [Learn more]({link})", GUILD_COMMUNICATION_DISABLED_BOTTOM_SHEET_TITLE: "Timed Out", GUILD_COMMUNICATION_DISABLED_POPOUT_HEADER: "Timed Out", GUILD_COMMUNICATION_DISABLED_POPOUT_SUBHEADER: "You received a timeout in {guildName}.", GUILD_SETTINGS_AUDIT_LOG_COMMUNICATION_DISABLED_UNTIL: "Set timeout for user until **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_COMMUNICATION_DISABLED_UNTIL_REMOVED: "Removed timeout", GUILD_COMMUNICATION_DISABLED_ICON_TOOLTIP_BODY: "This is only visible to moderators and indicates this user is timed out.", STAGE_DISCOVERY_NO_RESULTS_HEADER: "We couldn't find any live Stages happening right now.", GUILD_EVENT_STAGE_TOOLTIP_BODY: "They’re built for larger events and come with features like hand raise and auto-mute.", START_STAGE_MODAL_SERVER_SELECTION_EMPTY_TITLE: "You can't start a Stage yet", START_STAGE_MODAL_SET_TOPIC_SELECT_LABEL: "Stage channel", START_STAGE_MODAL_SET_TOPIC_SELECT_A11Y_HINT: "the channel selection list", START_STAGE_MODAL_SET_TOPIC_HELP_TEXT: "Your Stage will be hosted in $[**!!{stageName}!!**](stageHook).", START_STAGE_MODAL_SET_TOPIC_CHANGE_CHANNEL: "Your Stage will be hosted in $[**!!{stageName}!!**](stageHook). $[Change Channel](changeHook)", START_STAGE_MODAL_SELECT_CHANNEL: "Select a Stage channel", END_STAGE: "End Stage", END_STAGE_TITLE: "Do you want to end the Stage?", EXPLICIT_END_STAGE_TITLE: "Do you want to also end the Stage?", EXPLICIT_END_STAGE_SUBTITLE: "A Stage with no speakers will automatically end after a few minutes.", EXPLICIT_END_STAGE_CONFIRM: "Disconnect and End", EXPLICIT_END_STAGE_CONFIRM_MOBILE: "Disconnect and end the Stage", EXPLICIT_END_STAGE_CANCEL: "No, just disconnect quietly", TOKEN_POPOUT_BODY: "This message may contain a Discord authentication token, which can grant an attacker access to your account. Are you sure you want to send it?", STAGE_DISCOVERY_CARD_SPEAKER_TEXT_OVERFLOW: "{count, plural, =0 {} other {+{count} speaking}}", STAGE_DISCOVERY_ORIGIN_TEXT: "From {origin}", STAGE_DISCOVERY: "Stage Discovery", STAGE_DISCOVERY_CONNECTION_ERROR_GENERIC: "We are having problems connecting you to this Stage. Please try later.", VOICE_CONNECTION_ERROR_GENERIC: "We are having problems connecting you to this Channel. Please try later.", STAGE_DISCOVERY_LIVE_STAGE_TILE_SPEAKER_SUMMARY_OVERFLOW: "{count, plural, =1 {+{count} Speaker} other {+{count} Speakers}}", STAGE_DISCOVERY_LIVE_STAGE_TILE_FRIENDS_GUILDS_CONTEXT_AUDIENCE_1: "**!!{a}!!** is in the audience", STAGE_DISCOVERY_LIVE_STAGE_TILE_FRIENDS_GUILDS_CONTEXT_AUDIENCE_2: "**!!{a}!! and !!{b}!!** are in the audience", STAGE_DISCOVERY_LIVE_STAGE_TILE_FRIENDS_GUILDS_CONTEXT_AUDIENCE_3: "**!!{a}!!, !!{b}!! and !!{c}!!** are in the audience", STAGE_DISCOVERY_LIVE_STAGE_TILE_FRIENDS_GUILDS_CONTEXT_AUDIENCE_3_N: "**!!{a}!!, !!{b}!!, !!{c}!!, and {n, plural, one {1 other} other {{n} others}}** are in the audience", START_STAGE_CHANNEL_EVENT_PRIVACY_TITLE: "Privacy", STAGE_CHANNEL_ACTIVITY_FEED_DEFAULT: "In a Stage Channel", STAGE_CHANNEL_ACTIVITY_FEED_JOIN: "Join {channel}", STAGE_CHANNEL_INVITE_TO_STAGE_MODAL_HEADER: "Invite friends to Stage", STAGE_CHANNEL_INVITE_TO_STAGE_MODAL_FOOTER: "Or, send a Stage invite link to a friend", STAGE_CHANNEL_V2_UPSELL_TITLE: "Screenshare and Video in Stage Channels!", STAGE_CHANNEL_V2_UPSELL_SUBTITLE: "Now you can do more in your next community event. There's also built-in text chat now too.", GUILD_EVENT_INVITE_MODAL_TITLE: "Invite friends to event", GUILD_EVENT_INVITE_MODAL_FOOTER: "Or, send an event invite link to a friend", STAGE_INSTANCE_PRIVACY_TYPE_PUBLIC_LABEL: "Public", STAGE_INSTANCE_PRIVACY_TYPE_PRIVATE_LABEL: "Private", CREATE_STAGE_INSTANCE_DESCRIPTION_INPUT_LABEL: "Description", MESSAGE_BUTTON_COMPONENT_LINK_CONTEXT_MENU_NAME: "Button Link Actions", MESSAGE_BUTTON_COMPONENT_LINK_CONTEXT_MENU_COPY: "Copy link", MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER: "Make a selection", MESSAGE_SELECT_COMPONENT_SELECT_REQUIREMENT: "Select at least {count}", MESSAGE_SELECT_COMPONENT_MAX_SELECT_REQUIREMENT: "Select at most {count}", SELECT_ACCESSIBILITY_DESC_OPEN_OPTIONS_LIST: "Select options list opened", SELECT_ACCESSIBILITY_DESC_OPTION: "Option {emojiName} {optionName} {optionDescription}", SELECT_ACCESSIBILITY_DESC: "Select component {placeholder}", SELECT_ACCESSIBILITY_DESC_WITH_SELECTION: "Select component with {selections} selected", SELECT_USER_OPTION_A11Y_LABEL: "{username}#{discriminator} (user)", SELECT_BOT_OPTION_A11Y_LABEL: "{username}#{discriminator} (bot)", SELECT_ROLE_OPTION_A11Y_LABEL: "{roleName} (role)", USER_SETTINGS_USER_PROFILE: "User Profile", USER_SETTINGS_PROFILES: "Profiles", USER_SETTINGS_PROFILE_COLOR: "Profile Color", USER_SETTINGS_PROFILE_COLOR_DEFAULT: "Default", USER_SETTINGS_PROFILE_COLOR_DEFAULT_BUTTON: "Use default profile color, calculated from your avatar. {colorHex}", USER_SETTINGS_PROFILE_COLOR_CUSTOM: "Custom", USER_SETTINGS_PROFILE_COLOR_CUSTOM_BUTTON: "Use a custom profile color. Selected: {colorHex}", USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR: "Select custom color", USER_SETTINGS_CUSTOMIZATION_UPSELL: "Unlock with Nitro", USER_SETTINGS_CUSTOMIZATION_UPGRADE_UPSELL: "Upgrade to Unlock", USER_SETTINGS_AVATAR: "Avatar", USER_SETTINGS_DISPLAY_NAME_TITLE: "Name", USER_SETTINGS_AVATAR_SPECS: "Upload a PNG or JPG under 8MB. Images should be at least 128x128.", USER_SETTINGS_PROFILE_BANNER: "Profile Banner", USER_SETTINGS_ADD_BANNER_SPECS: "Turn your favorite photos, memes, or GIFs into profile banners!", USER_SETTINGS_CUSTOMIZE_PROFILE_TITLE: "Customizing My Profile", USER_SETTINGS_CUSTOMIZE_PROFILE_EXAMPLE_BUTTON: "Example Button", USER_SETTINGS_REMOVE_BANNER: "Remove Banner", USER_SETTINGS_RESET_BANNER: "Reset Banner", USER_SETTINGS_UNLOCK_BANNER: "Unlock Banner", USER_SETTINGS_ADD_BANNER: "Add Banner", USER_SETTINGS_REMOVE_AVATAR: "Remove Avatar", USER_SETTINGS_RESET_AVATAR: "Reset Avatar", USER_SETTINGS_ADD_ANIMATED_AVATAR: "Add Animated Avatar", USER_SETTINGS_AVATAR_DECORATION: "Avatar Decoration", USER_SETTINGS_REMOVE_AVATAR_DECORATION: "Remove Decoration", USER_SETTINGS_REMOVE_PER_GUILD_AVATAR_DECORATION: "Use Default", USER_SETTINGS_CHANGE_AVATAR_DECORATION: "Change Decoration", USER_SETTINGS_PROFILE_EFFECT: "Profile Effect", USER_SETTINGS_REMOVE_PROFILE_EFFECT: "Remove Effect", USER_SETTINGS_CHANGE_PROFILE_EFFECT: "Change Effect", USER_SETTINGS_USE_DEFAULT_PROFILE_EFFECT: "Use Default", USER_SETTINGS_ABOUT_ME: "About Me", USER_SETTINGS_ABOUT_ME_HINT: "Tap to add an about me", USER_SETTINGS_PRONOUNS_HINT: "Tap to add pronouns", USER_SETTINGS_ABOUT_ME_EDIT_A11Y_HINT: "Tap to edit about me", USER_SETTINGS_PRONOUNS_EDIT_A11Y_HINT: "Tap to edit pronouns", USER_SETTINGS_ABOUT_ME_EDIT_A11Y_LABEL: "Edit About Me", USER_SETTINGS_PRONOUNS_EDIT_A11Y_LABEL: "Edit Pronouns", USER_SETTINGS_PROFILE_EFFECT_EDIT_A11Y_HINT: "Tap to edit profile effect", USER_SETTINGS_PROFILE_EFFECT_EDIT_A11Y_LABEL: "Edit Profile Effect", USER_SETTINGS_AVATAR_DECORATION_EDIT_A11Y_HINT: "Tap to edit avatar decoration", USER_SETTINGS_AVATAR_DECORATION_EDIT_A11Y_LABEL: "Edit avatar decoration", USER_SETTINGS_ABOUT_ME_DETAILS: "You can use markdown and links if you’d like.", USER_SETTINGS_BANNER_COLOR_TITLE: "Banner Color", USER_SETTINGS_PROFILE_COLOR_MOBILE: "Banner Color", USER_SETTINGS_PROFILE_THEME: "Profile Theme", USER_SETTINGS_PROFILE_THEME_PRIMARY: "Primary", USER_SETTINGS_PROFILE_THEME_ACCENT: "Accent", USER_SETTINGS_RESET_PROFILE_THEME: "Reset Theme", USER_SETTINGS_RESET_PROFILE_THEME_DESCRIPTION: "Resets theme to match User Profile theme.", USER_SETTINGS_PROFILE_THEMES_BANNER_MODAL_SPECS: "Upload a PNG, JPG, or GIF under 10MB. Images should be at least 680x240.", USER_SETTINGS_PROFILE_PREVIEW_MOBILE: "Preview profile", USER_SETTINGS_PROFILE_PREVIEW_NOTICE_MOBILE: "This is what others see when they view your profile.", EDIT_PROFILE_CATEGORY_USER_PROFILE: "User Profile", EDIT_PROFILE_CATEGORY_GUILD_IDENTITY: "Server Profiles", LIMITED_TIME: "Limited time", TRENDING: "Trending", NEW_ADDITIONS: "New additions", USER_SETTINGS_TRY_OUT_PREMIUM_HEADER: "Try out Nitro!", USER_SETTINGS_TRY_OUT_PREMIUM_HEADER_MOBILE: "Try out Profile Customization", USER_SETTINGS_TRY_OUT_PREMIUM_DESCRIPTION: "See what your profile could look like with Nitro.", USER_SETTINGS_TRY_OUT_PREMIUM_DESCRIPTION_VARIANT: "See what your profile could look like with Nitro!", USER_SETTINGS_TRY_OUT_PREMIUM_PREVIEW: "Nitro Preview", USER_SETTINGS_TRY_OUT_PREMIUM_ALSO_INCLUDES: "Nitro also includes an exclusive Nitro badge.", USER_SETTINGS_TRY_OUT_PREMIUM_TRIAL_DESCRIPTION: "Try out all Nitro perks with a [free trial](onClick)!", USER_SETTINGS_PROFILE_THEMES_USER_PROFILE_ICON_TOOLTIP_UPSELL: "Customize your own profile theme, banner, animated avatar, and more with Nitro!", USER_SETTINGS_PROFILE_THEMES_UPSELL_FROM_BANNER_MODAL_TITLE: "Create a vibe with Profile Themes", USER_SETTINGS_PROFILE_THEMES_UPSELL_FROM_ICON_MODAL_TITLE: "Make it yours with Profile Customization", USER_SETTINGS_PROFILE_THEMES_UPSELL_FROM_BANNER_MODAL_DESCRIPTION: "Customize colors for your profile border, background, and button.", USER_SETTINGS_PROFILE_THEMES_UPSELL_FROM_ICON_MODAL_DESCRIPTION: "Get more customization with a profile theme, banner, animated avatar, custom tag, [and more with Nitro!](onAndMoreWithPremiumClick)", USER_SETTINGS_PROFILE_THEMES_UPSELL_MODAL_IMAGE_ALT: "Five profile theme examples in various colors", USER_SETTINGS_PROFILE_THEMES_UPSELL_UPGRADE: "Upgrade Nitro", USER_SETTINGS_PROFILE_THEMES_UPSELL_TRY_IT_OUT: "Try it out", USER_SETTINGS_PROFILE_THEMES_UPSELL_PREVIEW_NITRO: "Preview Nitro", USER_SETTINGS_PROFILE_THEMES_UPSELL_TRY_IT_OUT_DESCRIPTION: "Like what you see? Get profile themes, animated avatars, profile banners, and more with Nitro!", PROFILE_THEMES_ACCESSIBILITY_TOOLTIP_TITLE: "Are some profiles too bright?", PROFILE_THEMES_ACCESSIBILITY_TOOLTIP_DESCRIPTION: "Make profile colors easier on the eyes by syncing them to your Discord theme under Accessibility settings.", PREMIUM_UPSELL_PROFILE_CUSTOMIZATION_TITLE: "Show up how you want with profile customization", PREMIUM_UPSELL_PROFILE_CUSTOMIZATION_DESCRIPTION: "Get profile themes, animated avatars, banners and more with Nitro!", AVATAR_DECORATION_MODAL_APPLY: "Apply", AVATAR_DECORATION_SELECTION_SECTION_A11Y: "Avatar Decoration Selection Section", PROFILE_EFFECT_MODAL_HEADER: "Add Profile Effect", PROFILE_EFFECT_MODAL_SHOP_PREVIEW_HEADER: "Preview the Shop", PROFILE_EFFECT_MODAL_APPLY: "Apply", PROFILE_EFFECT_ACQUIRABILITY_DISCLAIMER_MOBILE: "The ability to acquire new profile effects is not available on this platform.", PROFILE_EFFECT_NON_NITRO_DISCLAIMER_HEADER_MOBILE: "Looking for profile effects?", PROFILE_EFFECTS_SOCIAL_UPSELL: "Level up your look with animated profile effects! $[Check them out](openShop).", GUILD_IDENTITY_UPSELL_OVERLAY_TITLE: "Make unique profiles for each server", GUILD_IDENTITY_UPSELL_OVERLAY_DESCRIPTION_THEMES: "Customize your profile for every server, from avatar decorations to bios. Only with Nitro.", GUILD_IDENTITY_UPSELL_OVERLAY_TITLE_VARIANT: "Customize your profile for every server!", GUILD_IDENTITY_UPSELL_OVERLAY_IMAGE_ALT: "customized profile image", GUILD_IDENTITY_PFX_COACHMARK_TITLE: "Elevate your profile styles", GUILD_IDENTITY_PFX_COACHMARK_BODY: "You can now set server-specific avatar decorations & profile effects with Nitro.", USER_POPOUT_ABOUT_ME: "About Me", PREMIUM_PROFILE_CUSTOMIZATION_UPSELL_HEADER: "Wanna upload your own banner?", PREMIUM_PROFILE_CUSTOMIZATION_UPGRADE_BODY: "Get more customization with a profile banner and join more servers by [upgrading to Discord Nitro](onLearnMore)", PREMIUM_PROFILE_CUSTOMIZATION_UPSELL_BODY: "Get more customization with a profile banner, an animated avatar, a custom tag, [and more with Discord Nitro!](onLearnMore)", PROFILE_CUSTOMIZATION_NITRO_ICON_TOOLTIP: "Exclusive to Nitro", PROFILE_USER_BADGES: "User Badges", PROFILE_USER_BADGE_A11Y_LABEL: "Badge, {badgeLabel}", PROFILE_HEADING_COPY_ID_A11Y_HINT: "double tap to copy user I.D", PROFILE_CUSTOMIZATION_PREVIEW: "Preview", PROFILE_CUSTOMIZATION_ACTIVITY_TIME: "$[](renderTimeHook) elapsed", USER_SETTINGS_BANNER_A11Y_LABEL: "Change Profile Banner", PROFILE_CUSTOMIZATION_GUILD_SELECT_TITLE: "Choose a Server", PROFILE_CUSTOMIZATION_GUILD_SELECT_PLACEHOLDER: "Search servers", PROFILE_CUSTOMIZATION_GUILD_HINT: "Show who you are with different profiles for each of your servers. [Learn more about Server Profiles]({helpCenterLink})", PREMIUM_MESSAGE_LENGTH_UPSELL_MODAL_HEADER: "Wanna send longer messages?", PREMIUM_MESSAGE_LENGTH_UPSELL_MODAL_BODY: "Speak your mind with 2x longer messages, send larger file uploads, [and more with Discord Nitro!](onLearnMore)", PREMIUM_MESSAGE_LENGTH_UPSELL_TOOLTIP: "Send longer messages with [Discord Nitro!](onLearnMore)", PREMIUM_MESSAGE_LENGTH_UPSELL_TOOLTIP_WITHOUT_LINK: "Send longer messages with Discord Nitro!", PREMIUM_MESSAGE_LENGTH_UPSELL_MODAL_UPLOAD: "Upload as File", PREMIUM_FEATURES_MESSAGE_LENGTH_HEADING: "Longer Messages", PREMIUM_FEATURES_MESSAGE_LENGTH_SUBHEADING: "Say what’s on your mind with an increased character count.", PREMIUM_MESSAGE_LENGTH_ROADBLOCK_MODAL_HEADER: "Your message is too long...", PREMIUM_MESSAGE_LENGTH_ROADBLOCK_MODAL_BODY: "You’ve hit the {maxLength} character count limit.\n\nSpeak your mind with 2x longer messages, send larger file uploads, [and more with Discord Nitro!](onLearnMore)", PREMIUM_MESSAGE_LENGTH_ROADBLOCK_MODAL_CONTEXT: "You’ve hit the {maxLength} character count limit.", PREMIUM_MESSAGE_LENGTH_ROADBLOCK_MODAL_CONTEXT_NO_COUNT: "You've hit the character limit.", PREMIUM_MESSAGE_LENGTH_ROADBLOCK_MODAL_GLOW_UP: "Speak your mind with 2x longer messages, send larger file uploads, [and more with Discord Nitro!](onLearnMore)", PREMIUM_MESSAGE_LENGTH_CHATBOX_FLAIR: "Nitro is powering you with {maxLength} characters per message!", PREMIUM_MESSAGE_LENGTH_MOBILE_ALERT_HEADER: "Your message is too long", PREMIUM_MESSAGE_LENGTH_MOBILE_ALERT_BODY: "You’ve hit the {maxLength} character count limit. Speak your mind with 2x longer messages, send larger file uploads, and more with Discord Nitro!", GUILD_CAP_INVITE_MODAL_BUTTON: "You are at the 100 server limit", GUILD_CAP_UPSELL_TOOLTIP: "Upgrade to Discord Nitro to join up to 200 servers!", GUILD_CAP_UPSELL_GET_NITRO: "Get Nitro", GUILD_CAP_UPSELL_MODAL_TITLE: "Wanna join more servers?", GUILD_CAP_UPSELL_MODAL_AT_LIMIT_BODY: "We love the enthusiasm, but you've hit the 100 server limit.\n\nJoin up to 200 servers $[NEW](newBadgeHook), use your server emoji everywhere, $[and more with Discord Nitro!](onAndMore)", GUILD_CAP_UPSELL_MODAL_AT_LIMIT_CONTEXT: "We love the enthusiasm, but you've hit the 100 server limit.", GUILD_CAP_UPSELL_MODAL_GLOW_UP: "Join up to 200 servers, use your server emoji everywhere, $[and more with Discord Nitro!](onAndMore)", GUILD_CAP_UPSELL_MODAL_AT_LIMIT_BODY_NON_FORMATTED: "We love the enthusiasm, but you've hit the 100 server limit.\n\n Join up to 200 servers, use your server emoji everywhere, and more with Discord Nitro!", GUILD_CAP_UPSELL_MODAL_NEAR_LIMIT_BODY: "You're in {guildCount} servers and might hit the 100 server limit soon.\n\nJoin up to 200 servers $[NEW](newBadgeHook), use your server emoji everywhere, $[and more with Discord Nitro!](onAndMore)", GUILD_CAP_UPSELL_MODAL_NEAR_LIMIT_CONTEXT: "You're in {guildCount} servers and might hit the 100 server limit soon.", GUILD_CAP_PREMIUM_FEATURE_TITLE: "More Servers", GUILD_CAP_PREMIUM_FEATURE_DESCRIPTION: "Double the number of servers you can join up to 200.", MARKETING_TIER_1_PERK_LIST_BOOST_DISCOUNT: "30% off Server Boosts", SUBMIT_BUG: "Submit Bug", BUG_REPORT_TITLE: "Submit a Bug Report", BUG_REPORT_NAME: "What's the issue?", BUG_REPORT_NO_SCREENSHOT: "Screenshot removed from report", BUG_REPORT_DESCRIPTION: "Detailed description (optional)", BUG_REPORT_PRIORITY: "Priority", BUG_REPORT_PRIORITY_CRITICAL_TITLE: "Critical (P0)", BUG_REPORT_PRIORITY_CRITICAL_DESCRIPTION: "**Urgent and important.** These are **mission critical** issues that prevent a **widespread** number of users from using critical functions of the app.", BUG_REPORT_PRIORITY_HIGH_TITLE: "High (P1)", BUG_REPORT_PRIORITY_HIGH_DESCRIPTION: "**Important but not urgent.** These are issues that impact a user's ability to use a core function of the app, while not preventing them from using other parts of the app.", BUG_REPORT_PRIORITY_LOW_TITLE: "Low (P2)", BUG_REPORT_PRIORITY_LOW_DESCRIPTION: "**Urgent but not important.** These are issues that negatively impact a user's experience with the application but do not actively prevent them from using core application functionality.", BUG_REPORT_PRIORITY_VERY_LOW_TITLE: "Very Low (P3)", BUG_REPORT_PRIORITY_VERY_LOW_DESCRIPTION: "**Not urgent and not important.** P3 allows us to acknowledge that something is an issue, but these kinds of issues do not need to be fixed until other more pressing concerns are dealt with.", BUG_REPORT_URL: "Url (optional)", BUG_REPORT_ERROR_NAME_REQUIRED: "Issue name required", BUG_REPORT_ERROR_PRIORITY_REQUIRED: "Priority required", BUG_REPORT_STATUS_SENDING: "Sending report", BUG_REPORT_STATUS_SENT: "Report sent", BUG_REPORT_FEATURE_AREA: "Feature area", BUG_REPORT_SELECT_FEATURE_AREA: "Select Feature Area", BUG_REPORT_OVERRIDE_PLATFORM_INFORMATION: "Override Platform Information", BUG_REPORT_DEVICE: "Device", BUG_REPORT_OS: "Operating System", BUG_REPORT_OS_VERSION: "Operating System Version", BUG_REPORT_CLIENT_VERSION: "Client Version", BUG_REPORT_IS_ANDROID_REACT_NATIVE: "Is Android React Native Client", BUG_REPORT_CLIENT_BUILD_NUMBER: "Client Build Number", BUG_REPORT_LOCALE: "Client Locale", BUG_REPORT_SUBMITTING: "Submitting", BUG_REPORT_WHAT_DID_YOU_EXPECT_TO_SEE: "What did you expect to see?", BUG_REPORT_TURN_OFF_TEXT: "Turn this thing off for me", BUG_REPORT_HAS_BEEN_TURNED_OFF_TEXT: "Bug reporter turned off", BUG_REPORT_SOMETHING_IS_BROKEN: "Something is broken on this screen", BUG_REPORT_EXTERNAL_SOURCE: "Reddit post, Zendesk ticket, Tweet?", BUG_REPORT_REMOVE_SCREENSHOT: "Remove screenshot", BUG_REPORT_SUBMITTING_BUG: "Submitting Bug", BUG_REPORT_BUG_SUBMITTED: "Bug submitted", BUG_REPORT_FAILED_TO_SUBMIT: "Failed to submit report", BUG_REPORT_ATTACHMENTS: "Attachments", BUG_REPORT_ADD_ATTACHMENTS: "Add attachment(s)", BUG_REPORT_UPLOAD_ATTACHMENT: "Upload Attachment", UNLOCK_GUILD_MEMBER_AVATAR: "Unlock\nAvatar", GUILD_IDENTITY_UPSELL_MODAL_TITLE: "Express yourself fully with server profiles", GUILD_IDENTITY_UPSELL_MODAL_BODY: "Be who you want and use a different avatar, banner, and bio in each of your servers, unlock animated avatars, and more with [Discord Nitro!](onAndMore)", GUILD_IDENTITY_BANNER_A11Y_LABEL: "Change Server Profile Banner", GUILD_IDENTITY_BIO_EDIT_SUBTITLE: "If left blank, your default about me will be used.", GUILD_IDENTITY_PRONOUNS_EDIT_SUBTITLE: "If left blank, your default pronouns will be used.", GUILD_IDENTITY_BIO_TOAST: "Server Bio for !!{guildName}!!", GUILD_IDENTITY_PRONOUNS_TOAST: "Pronouns for !!{guildName}!!", GUILD_IDENTITY_BIO_HINT: "Tap to add an about me for this server", GUILD_IDENTITY_PRONOUNS_HINT: "Tap to add pronouns for this server", GUILD_IDENTITY_BIO_EDIT_A11Y_HINT: "Tap to edit about me for this server", GUILD_IDENTITY_PRONOUNS_EDIT_A11Y_HINT: "Tap to edit pronouns for this server", GUILD_IDENTITY_BIO_EDIT_A11Y_LABEL: "Edit About Me for this server", GUILD_IDENTITY_PRONOUNS_EDIT_A11Y_LABEL: "Edit Pronouns for this server", GUILD_IDENTITY_UPSELL_NATIVE_MODAL_TITLE: "Wanna use a different avatar, banner, and bio?", GUILD_IDENTITY_UPSELL_NATIVE_MODAL_BODY: "Be who you want and use a different avatar, banner, bio in each of your servers, upgrade your profile, and more with Discord Nitro!", GUILD_IDENTITY_SETTINGS_EMPTY_STATE_TITLE: "You don't belong to a server yet", GUILD_IDENTITY_SETTINGS_EMPTY_STATE_DESCRIPTION: "Join servers to hang out with friends and explore new communities.", GUILD_IDENTITY_SETTINGS_EMPTY_STATE_DESCRIPTION_V2: "Create or join a server to hang out with friends.", GUILD_IDENTITY_SETTINGS_EMPTY_STATE_CTA: "Browse Servers", CHANGE_IDENTITY: "Edit Server Profile", CHANGE_IDENTITY_MODAL_UNKNOWN_ERROR: "Unknown error", CHANGE_IDENTITY_MODAL_CHANGE_NICKNAME_DISABLED: "Nickname (Disabled)", AKA_MORE_AVATARS_OVERFLOW: "See more server avatars", CHANGE_IDENTITY_UPSELL: "Unlock with Nitro", CHANGE_IDENTITY_PREVIEW_WITH_GUILD_NAME: "Preview For !!{guildName}!!", CHANGE_IDENTITY_BIO_PLACEHOLDER: "Tell this server a bit about yourself", CHANGE_IDENTITY_SERVER_PROFILE: "Server Profile", CHANGE_IDENTITY_SERVER_PROFILE_MENU_HELP: "Visible only to those in this server", CHANGE_IDENTITY_NICKNAME_PERMISSIONS_DISABLED: "You don't have permission to change your nickname in this server.", USER_PROFILE_MENU_HELP: "Default profile and visible to everyone", PREMIUM_PROGRESS_BAR_GUILD_HEADER_TOOLTIP_TITLE: "Want to get to the next Level?", PREMIUM_PROGRESS_BAR_GUILD_HEADER_TOOLTIP_CONTENT: "The **Boost Progress Bar** shows members how many Boosts your server needs to reach the next Level. Toggle it under **Server Settings > Display**.", PREMIUM_PROGRESS_BAR_GUILD_HEADER_TOOLTIP_CTA_PRIMARY_ROLE_SETTINGS: "Toggle On", PREMIUM_PROGRESS_BAR_GUILD_HEADER_TOOLTIP_CTA_SECONDARY: "Got it", PREMIUM_PROGRESS_BAR_GUILD_HEADER_SIZE_TOOLTIP_TITLE: "Want more perks for @everyone?", PREMIUM_PROGRESS_BAR_GUILD_HEADER_SIZE_TOOLTIP_CONTENT: "Enable the **Boost Progress Bar** under Server Settings > Display so members can Boost easily and help unlock server perks together.", INVITE_SPLASH_GUILD_HEADER_TOOLTIP_TITLE: "Personalize your server invites", INVITE_SPLASH_GUILD_HEADER_TOOLTIP_CONTENT: "Your server invite image will now display in chat. Customize yours under **Server Settings > Overview**.", INVITE_SPLASH_GUILD_HEADER_TOOLTIP_CONTENT_LOCKED: "Boost this server to add an image to your invite link embeds. Unlock with only {boostCount, plural, =1 {# more Boost} other {# more Boosts}}.", INVITE_SPLASH_GUILD_HEADER_TOOLTIP_CTA_PRIMARY_ROLE_SETTINGS: "Server Settings", INVITE_SPLASH_GUILD_HEADER_TOOLTIP_CTA_SECONDARY: "Got it", DISPLAY_COMPACT_AVATARS: "Show avatars in Compact mode", NUX_REDESIGN_NOTIFICATION_TITLE: "Turn on notifications", NUX_REDESIGN_NOTIFICATION_BODY: "Get notifications for new messages, friend requests, events, and more.", NUX_NOTIFICATION_PERMISSION_PROMPT_TEXT: "You’ll receive push notifications for Discord activities like messages, mentions, friend requests, and events.", NUX_NOTIFICATION_PERMISSION_PROMPT_SUBTITLE: "Don’t miss a thing! Setup notifications to know when your friends send you a message.", NUX_NOTIFICATION_PERMISSION_ALERT_TITLE: "Allow Notifications", ENABLE_NOTIFICATIONS_TITLECASE: "Enable Notifications", SKIP_FOR_NOW: "Skip For Now", MAYBE_LATER: "Maybe Later", ALLOW: "Allow", DISCORD_U_COMING_SOON_TO_MOBILE: "Coming soon to mobile! For now, head over to desktop to access Student Hubs", USER_SETTING_NOTIFICATION_NOT_ENABLED_PROMPT: "Push notifications not enabled", NOTIFICATION_NOT_ENABLED_PROMPT_CTA: "Don't miss out, enable notifications!", THREADS: "Threads", VIEW_THREAD: "View Thread", CREATE_THREAD: "Create Thread", EDIT_THREAD: "Edit Thread", DELETE_THREAD: "Delete Thread", ARCHIVE_THREAD: "Close Thread", ARCHIVE_LOCK_THREAD: "Close & Lock Thread", LOCK_THREAD: "Lock Thread", UNLOCK_THREAD: "Unlock Thread", UNARCHIVE_THREAD: "Open Thread", THREAD_SETTINGS: "Thread Settings", ARCHIVE_SETTINGS: "Auto-Hide Settings", ARCHIVE_NOW: "Close Now", AUTO_ARCHIVE: "Auto-hide", AUTO_ARCHIVE_OPTIONS: "Auto-hide options", AUTO_ARCHIVE_THREAD_AT_LONG: "This thread will archive: {time}", EMPTY_MESSAGE_PRIVATE_THREAD_INSTRUCTIONS: "@mention users to add them to this private thread.", MEMBER_LIST_PRIVATE_THREAD_INSTRUCTIONS: "Only people you invite and moderators can see this thread.", AUTO_ARCHIVE_THREAD_AFTER: "Hide after {duration} of inactivity", AUTO_ARCHIVE_DURATION_1_HOUR: "1 Hour", AUTO_ARCHIVE_DURATION_24_HOURS: "24 Hours", AUTO_ARCHIVE_DURATION_3_DAYS: "3 Days", AUTO_ARCHIVE_DURATION_1_WEEK: "1 Week", ACTIVE_THREADS_POPOUT_HEADER: "More Active Threads", ACTIVE_THREADS_POPOUT_HEADER_FORUM: "More Active Posts", ACTIVE_THREADS_POPOUT_LINK: "See All", ACTIVE_THREADS_UPSELL_HEADER: "Active Threads has moved", ACTIVE_THREADS_UPSELL_CONTENT: "It will now appear in the server menu.", JOIN_THREAD: "Join Thread", LEAVE_THREAD: "Leave Thread", THREAD_MESSAGE_COUNT: "{count, plural, one {1 Message ›} other {{count} Messages ›}}", THREAD_MESSAGE_COUNT_MOBILE: "{count} ›", THREAD_MESSAGE_ROLE_DESCRIPTION: "Open Thread Button", SEE_THREAD: "See Thread ›", THREAD_ARCHIVED: "This thread is archived", NO_THREAD_MESSAGES: "There are no messages in this thread yet.", NO_RECENT_THREAD_MESSAGES: "There are no recent messages in this thread.", THREAD_STARTER_MESSAGE_ORIGINAL_MESSAGE: "Original message from channel", THREAD_STARTER_MESSAGE_NOT_LOADED: "Sorry, we couldn't load the first message in this thread", THREAD_STARTED_BY: "Started by $[](usernameHook)", THREAD_STARTER_MESSAGE_NOTIFICATION: '!!{username}!! started a thread, "!!{threadName}!!"', THREAD_BROWSER_MESSAGE_PREVIEW: "$[](usernameHook) $[](messageTextHook)", BEGINNING_THREAD_ARCHIVE_DESCRIPTION: "This thread will archive after $[](autoArchiveDurationHook) of inactivity.", THREAD: "Thread", THREAD_SETTINGS_UPDATED: "Thread settings have been updated.", OPEN_IN_FULL_VIEW: "Open in Full View", OPEN_IN_SPLIT_VIEW: "Open in Split View", THREAD_HEADER_NOTICE_JOIN: "Join this thread to get notifications and to save in your channel list.", THREAD_HEADER_NOTICE_ARCHIVED: "This thread is archived. You can send a message to unarchive it.", THREAD_HEADER_NOTICE_LOCKED: "This thread has been closed and locked. Only moderators can reopen it.", THREAD_HEADER_NOTICE_ACTIVE_LOCKED: "This thread has been locked. Only moderators can send messages.", UNARCHIVE: "Open", UNLOCK: "Unlock", ARCHIVED_THREAD_REACTIONS_DISABLED_TOAST: "You cannot add or remove reactions in archived threads.", ARCHIVED_THREAD_FOLLOW_DISABLED_TOAST: "You cannot follow archived threads.", THREAD_BROWSER_TITLE: "Threads", THREAD_BROWSER_ROW_TITLE_A11Y_LABEL: "Thread, {name}", THREAD_BROWSER_ACTIVE: "Active", THREAD_BROWSER_ARCHIVED: "Archived", THREAD_BROWSER_PUBLIC: "Public", THREAD_BROWSER_PRIVATE: "Private", THREAD_BROWSER_STARTED_BY: "Started by $[](authorHook)", THREAD_BROWSER_CREATION_TIME: "Created {time}", THREAD_BROWSER_ARCHIVE_TIME: "Archived {time}", THREAD_BROWSER_LAST_ACTIVE_TIME: "Last active {time}", THREAD_BROWSER_PUBLIC_HEADER: "Public Threads", THREAD_BROWSER_PRIVATE_HEADER: "Private Threads", THREAD_BROWSER_OTHER_HEADER: "{count} other active threads", THREAD_BROWSER_ARCHIVED_HEADER: "older threads", THREAD_BROWSER_JOINED_HEADER: "{count} joined threads", THREAD_BROWSER_ACTIVE_COUNT: "Active Threads - {count}", THREAD_BROWSER_ARCHIVED_REDESIGN_HEADER: "Older Threads", THREAD_BROWSER_JOINED_COUNT: "Joined Threads - {count}", THREAD_BROWSER_TIMESTAMP_SECONDS: "{count}s ago", THREAD_BROWSER_TIMESTAMP_DAYS: "{count}d ago", THREAD_BROWSER_TIMESTAMP_HOURS: "{count}h ago", THREAD_BROWSER_TIMESTAMP_MINUTES: "{count}m ago", THREAD_BROWSER_TIMESTAMP_MORE_THAN_MONTH: ">30d ago", THREAD_BROWSER_TIMESTAMP_MORE_THAN_YEAR: ">1y ago", THREAD_BROWSER_TIMESTAMP_DAYS_A11Y_LABEL: "{count} days ago", THREAD_BROWSER_TIMESTAMP_HOURS_A11Y_LABEL: "{count} hours ago", THREAD_BROWSER_TIMESTAMP_MINUTES_A11Y_LABEL: "{count} minutes ago", THREAD_BROWSER_TIMESTAMP_MORE_THAN_MONTH_A11Y_LABEL: "more than 30 days ago", THREAD_BROWSER_NO_RECENT_MESSAGES: "No recent messages", THREAD_BROWSER_EMPTY_STATE_HEADER: "There are no threads.", THREAD_BROWSER_EMPTY_STATE_ACTIVE_HEADER: "There are no active threads.", THREAD_BROWSER_EMPTY_STATE_ARCHIVED_HEADER: "There are no archived threads.", THREAD_BROWSER_EMPTY_STATE_SUBTEXT_REDESIGN: "Stay focused on a conversation with a thread - a temporary text channel.", THREAD_BROWSER_FILTER_SETTINGS_TITLE: "Filter Settings", THREAD_BROWSER_FILTER_SETTINGS_VISIBILITY: "Thread visibility", THREAD_MEMBER_WITHOUT_ACCESS: "Cannot view this thread", ALL_ACTIVE_THREADS: "All Active Threads", ACTIVE_THREADS: "Active Threads", MODERATOR_VIEW: "Moderator View", MODERATOR_VIEW_DESCRIPTION: "See all private threads created by all users", MODERATOR_VIEW_TOOLTIP: "Moderator view lets you see all private threads, even those created by others.", MODERATOR_VIEW_TOOLTIP_MOBILE: "See all private threads created by all users", NEW_THREAD: "New Thread", THREAD_NAME: "Thread Name", FORM_THREAD_NAME_PLACEHOLDER: "New Thread", FORM_THREAD_NAME_REQUIRED_ERROR: "Thread Name is required", FORM_THREAD_AUTO_ARCHIVE_SECTION_LABEL: "Hide After Inactivity", FORM_THREAD_STARTER_MESSAGE_SECTION_LABEL: "Starter Message", FORM_THREAD_STARTER_MESSAGE_PLACEHOLDER: "Enter a message to start the conversation!", FORM_THREAD_STARTER_MESSAGE_REQUIRED_ERROR: "Starter Message is required", FORM_THREAD_PRIVATE_THREAD_SECTION_LABEL: "Only people you invite and moderators can see", FORM_THREAD_PRIVATE_THREAD_DESCRIPTION: "You can invite new people by @mentioning them.", PRIVATE_THREAD: "Private Thread", THREAD_REPLY_SUGGESTION: "Want to make it easier to follow this chain of {count, plural, =1 {# reply} other {# replies}}?", FORM_PRIVATE_THREAD_DESCRIPTION: "Only people you invite and moderators can see this thread.", CREATE_THREAD_HEADER_1: "Send a message to start a thread in this channel!", CREATE_THREAD_HEADER_2: "It will hide after $[](durationHook) of inactivity.", CANNOT_JOIN_THREAD: "Cannot join thread", CANNOT_ADD_USER_TO_THREAD: "Cannot add user to thread", CANNOT_CREATE_THREAD: "Cannot create thread", CANNOT_UNARCHIVE_THREAD: "Cannot reopen thread", TOO_MANY_MEMBERS_MESSAGE: "This thread has reached the maximum possible number of members.", TOO_MANY_THREADS_MESSAGE: "This server has reached the maximum number of active threads. Free up space by archiving a thread.", TOO_MANY_ANNOUNCEMENT_THREADS_MESSAGE: "This server has reached the maximum number of active announcement threads. Free up space by archiving a thread.", BOT_DM_TOO_MANY_THREADS: "Your message could not be sent because this server has reached the maximum number of threads. Free up space by archiving a thread.", BOT_DM_TOO_MANY_ANNOUNCEMENT_THREADS: "Your message could not be sent because this server has reached the maximum number of announcement threads. Free up space by archiving a thread.", CANNOT_JOIN_FORUM_POST: "Cannot join post", CANNOT_ADD_USER_TO_FORUM_POST: "Cannot add user to post", CANNOT_CREATE_FORUM_POST: "Cannot create post", CANNOT_UNARCHIVE_FORUM_POST: "Cannot reopen post", TOO_MANY_MEMBERS_MESSAGE_FORUM_POST: "This post has reached the maximum possible number of members.", TOO_MANY_FORUM_POSTS_MESSAGE: "This server has reached the maximum number of active posts. Free up space by archiving a post.", BOT_DM_TOO_MANY_POSTS: "Your message could not be sent because this server has reached the maximum number of posts. Free up space by archiving a post.", FORM_HELP_DEFAULT_AUTO_ARCHIVE_DURATION: "New threads will not show in the channel list after being inactive for the specified duration.", FORM_HELP_AUTO_ARCHIVE_DURATION: "Threads will not show in the channel list after being inactive for the specified duration.", UPLOAD_FILE_SUBTEXT: "Tip: Double click the $[](icon)", SYSTEM_MESSAGE_THREAD_CREATED: "$[!!{actorName}!!](actorHook) started a thread: **[!!{threadName}!!](threadOnClick)**. See all [threads](viewThreadsOnClick).", SYSTEM_MESSAGE_THREAD_CREATED_MOBILE: "[!!{actorName}!!](actorHook) started a thread: **[!!{threadName}!!](threadOnClick)**.", SYSTEM_MESSAGE_THREAD_CREATED_MOBILE2: "$[!!{actorName}!!](actorHook) started a thread: **$[!!{threadName}!!](threadOnClick)**.", SYSTEM_MESSAGE_THREAD_MEMBER_ADD: "$[!!{actorName}!!](actorHook) added $[!!{targetName}!!](targetHook) to the thread.", SYSTEM_MESSAGE_THREAD_MEMBER_ADD_MOBILE: "[!!{username}!!](usernameOnClick) added [!!{otherUsername}!!](otherUsernameOnClick) to the thread.", SYSTEM_MESSAGE_THREAD_MEMBER_REMOVE: "$[!!{actorName}!!](actorHook) removed $[!!{targetName}!!](targetHook) from the thread.", SYSTEM_MESSAGE_THREAD_MEMBER_REMOVE_MOBILE: "[!!{username}!!](usernameOnClick) removed [!!{otherUsername}!!](otherUsernameOnClick) from the thread.", SYSTEM_MESSAGE_THREAD_MEMBER_REMOVE_SELF_MOBILE: "[!!{username}!!](usernameOnClick) left the thread", REMOVE_USER_FROM_THREAD: "Remove !!{user}!! from Thread", KICK_USER_FROM_SERVER: "Kick !!{user}!! from Server", BAN_USER_FROM_SERVER: "Ban !!{user}!! from Server", MANAGE_THREADS: "Manage Threads", ROLE_PERMISSIONS_MANAGE_THREADS_DESCRIPTION: "Allows members to rename, delete, close, and turn on slow mode for threads. They can also view private threads.", ROLE_PERMISSIONS_MANAGE_THREADS_DESCRIPTION_TEXT: "Allows members to rename, delete, close, and turn on slow mode for threads in this channel. They can also view private threads.", ROLE_PERMISSIONS_MANAGE_THREADS_DESCRIPTION_CATEGORY: "Allows members to rename, delete, close, and turn on slow mode for threads in these channels. They can also view private threads.", CREATE_PUBLIC_THREADS: "Create Public Threads", ROLE_PERMISSIONS_CREATE_PUBLIC_THREADS_DESCRIPTION: "Allow members to create threads that everyone in a channel can view.", ROLE_PERMISSIONS_CREATE_PUBLIC_THREADS_DESCRIPTION_TEXT: "Allow members to create threads that everyone in this channel can view.", ROLE_PERMISSIONS_CREATE_PUBLIC_THREADS_DESCRIPTION_CATEGORY: "Allow members to create threads that everyone in these channels can view.", CREATE_PRIVATE_THREADS: "Create Private Threads", ROLE_PERMISSIONS_CREATE_PRIVATE_THREADS_DESCRIPTION: "Allow members to create invite-only threads.", ROLE_PERMISSIONS_CREATE_PRIVATE_THREADS_DESCRIPTION_TEXT: "Allow members to create invite-only threads in this channel.", ROLE_PERMISSIONS_CREATE_PRIVATE_THREADS_DESCRIPTION_CATEGORY: "Allow members to create invite-only threads in these channels.", SEND_MESSAGES_IN_THREADS: "Send Messages in Threads", ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_DESCRIPTION: "Allow members to send messages in threads.", ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_DESCRIPTION_TEXT: "Allow members to send messages in threads under this channel.", ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_DESCRIPTION_CATEGORY: "Allow members to send messages in threads under these channels.", DURATION_DAYS_SHORT: "{days, plural, =1 {1d} other {{days}d}}", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_DEFAULT_AUTO_ARCHIVE_DURATION_CREATE: "{newValue, plural, =0 {Removed default hide duration} =1 {Set default hide duration to **# minute**} other {Set default hide duration to **# minutes**}}", GUILD_SETTINGS_AUDIT_LOG_CHANNEL_DEFAULT_AUTO_ARCHIVE_DURATION_CHANGE: "{newValue, plural, =0 {Removed default hide duration} =1 {Changed default hide duration to **# minute**} other {Changed default hide duration to **# minutes**}}", GUILD_SETTINGS_ACTION_FILTER_THREAD_CREATE: "Create Thread", GUILD_SETTINGS_ACTION_FILTER_THREAD_UPDATE: "Update Thread", GUILD_SETTINGS_ACTION_FILTER_THREAD_DELETE: "Delete Thread", GUILD_SETTINGS_AUDIT_LOG_PRIVATE_THREAD_CREATE: "$[**!!{user}!!**](userHook) created a private thread $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_ANNOUNCEMENT_THREAD_CREATE: "$[**!!{user}!!**](userHook) created an announcement thread $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_THREAD_CREATE: "$[**!!{user}!!**](userHook) created a thread $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_THREAD_UPDATE: "$[**!!{user}!!**](userHook) made changes to the thread $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_THREAD_DELETE: "$[**!!{user}!!**](userHook) deleted the thread $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_THREAD_NAME_CREATE: "Set the name to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_THREAD_NAME_CHANGE: "Changed the name from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_THREAD_ARCHIVED: "Closed the thread", GUILD_SETTINGS_AUDIT_LOG_THREAD_UNARCHIVED: "Reopened the thread", GUILD_SETTINGS_AUDIT_LOG_THREAD_LOCKED: "Locked the thread, restricting it to only be opened by moderators", GUILD_SETTINGS_AUDIT_LOG_THREAD_UNLOCKED: "Unlocked the thread, allowing it to be opened by non-moderators", GUILD_SETTINGS_AUDIT_LOG_THREAD_INVITABLE_ENABLED: "Allowed non-moderators to add members to the thread", GUILD_SETTINGS_AUDIT_LOG_THREAD_INVITABLE_DISABLED: "Disallowed non-moderators from adding members to the thread", GUILD_SETTINGS_AUDIT_LOG_THREAD_AUTO_ARCHIVE_DURATION_CREATE: "{newValue, plural, =0 {Removed auto hide duration} =1 {Set auto hide duration to **# minute**} other {Set auto hide duration to **# minutes**}}", GUILD_SETTINGS_AUDIT_LOG_THREAD_AUTO_ARCHIVE_DURATION_CHANGE: "{newValue, plural, =0 {Removed auto hide duration} =1 {Changed auto hide duration to **# minute**} other {Changed auto hide duration to **# minutes**}}", THREAD_MEMBER_LIST_EMPTY_STATE_HEADER: "There’s no one in this thread.", THREAD_MEMBER_LIST_EMPTY_STATE_SUBTEXT: "You can invite people by @mentioning them in a message.", THREAD_ROLE_MENTION_FAILURE: "Some roles were not mentioned or added to the thread.", FORM_HELP_THREAD_INVITABLE: "When disabled, only moderators and the thread creator can add new members to this thread.", THREAD_INVITABLE_TOGGLE_LABEL: "Anyone can invite", THREAD_GROUP_A11Y_LABEL: "!!{channelName}!! threads", GENERIC_ERROR_TITLE: "Oh no! Something went wrong.", GENERIC_ERROR_BODY: "Seems like something's gone wrong. Sorry about that.", FREQUENTLY_USED: "Frequently Used", CLICK_TO_LEARN_MORE: "Click to learn more", NITRO_CHURN_SURVEY_TITLE: "Farewell, {subscriptionName}", NITRO_CHURN_SURVEY_SUBTITLE: "Your {subscriptionName} subscription has been canceled.", NITRO_CHURN_SURVEY_QUESTION: "Could we ask: What was the main reason you decided to cancel {subscriptionName}?", NITRO_CHURN_SURVEY_ANSWER_CHOICE_NO_LONGER_SUPPORT_DISCORD: "I no longer want to support Discord", NITRO_CHURN_SURVEY_ANSWER_CHOICE_DONT_UNDERSTAND_NITRO: "I don’t really understand Nitro or what it’s for", NITRO_CHURN_SURVEY_ANSWER_CHOICE_DONT_LIKE_MONTHLY_SUBS: "I don’t like monthly subscriptions", NITRO_CHURN_SURVEY_ANSWER_CHOICE_DIDNT_FEEL_WORTH: "I don’t feel like Nitro is worth its price", NITRO_CHURN_SURVEY_ANSWER_CHOICE_DONT_NEED_SPECIFIC_FEAT: "I subscribed for a Nitro feature I don’t need anymore", NITRO_CHURN_SURVEY_ANSWER_CHOICE_DONT_USE_DISCORD_OFTEN: "I don’t currently use Discord enough to need Nitro", NITRO_CHURN_SURVEY_ANSWER_CHOICE_WANT_TO_SWITCH_TIERS: "I want to switch to a different tier of Nitro", NITRO_CHURN_SURVEY_ANSWER_CHOICE_CANT_AFFORD: "I can’t afford it right now", NITRO_CHURN_SURVEY_ANSWER_OTHER: "Other", NITRO_CHURN_SURVEY_OTHER_PLACEHOLDER: "Share your reason here.", PREMIUM_SURVEY_THANK_YOU: "Thank you!", PREMIUM_SURVEY_WE_APPRECIATE_IT: "Thanks for your feedback. We appreciate it!", PREMIUM_NO_PROBLEM: "No problem", HUB_WAITLIST_MODAL_JOIN_HEADER: "Find study groups, clubs, and friends in the Student Hub for your school!", HUB_WAITLIST_MODAL_JOIN_SUBHEADER: "Get notified when your hub launches so you can easily find\nstudent-run servers for your study groups and clubs.", HUB_WAITLIST_MODAL_FORM_DESCRIPTION: "Enter your official student email address", HUB_WAITLIST_MODAL_FORM_PLACEHOLDER: "sam@college.edu", HUB_WAITLIST_MODAL_FORM_TITLE: "School Email", HUB_DISCORD_HUB: "Student Hub", HUB_VERIFIED_DISCORD_HUB: "Verified Student Hub", JOIN_WAITLIST: "Join Waitlist", HUB_WAITLIST_MODAL_JOINED_HEADER: "Thanks! You're on the waitlist.", HUB_WAITLIST_MODAL_JOINED_DESCRIPTION: "We'll reach out when the Student Hub for !!{school}!! is live.", HUB_EMAIL_CONNECTION_SIDEBAR_HEADER: "Student Hubs", HUB_EMAIL_CONNECTION_SIDEBAR_LEARN_MORE_HEADER: "What's a Student Hub?", HUB_EMAIL_CONNECTION_SIDEBAR_DESCRIPTION: "Hubs are not affiliated with or managed by schools.\n\nServers listed in the school’s Student Hub are run by students. Users do not need to be a member of a Student Hub to be invited to join a server listed there.", MOBILE_HUB_EMAIL_CONNECTION_SIDEBAR_DESCRIPTION_1: "An exclusive place to connect with students, discover servers, and share your own servers for students to join.", MOBILE_HUB_EMAIL_CONNECTION_SIDEBAR_DESCRIPTION_2: "Hubs are not affiliated with or managed by schools.", MOBILE_HUB_EMAIL_CONNECTION_SIDEBAR_DESCRIPTION_3: "Servers in the Hub are student-run, but may include non-students.", MOBILE_HUB_EMAIL_CONNECTION_SIDEBAR_DESCRIPTION_4: "Servers listed in the school’s Student Hub are run by students. Users do not need to be a member of a Student Hub to be invited to join a server listed there.", HUB_EMAIL_CONNECTION_CONTENT_HEADER: "Find study groups, clubs, and friends in the Student Hub for your school!", HUB_EMAIL_CONNECTION_NUX_HEADER: "Find your classmates in the Student Hub for your school", HUB_EMAIL_CONNECTION_CONTENT_DESCRIPTION: "Meet classmates from your school, discover communities, and share your servers, all in one place.", HUB_EMAIL_CONNECTION_NUX_CONTENT_DESCRIPTION: "Join for exclusive access to student-run study groups, clubs, game nights, and more.", MOBILE_HUB_EMAIL_CONNECTION_CONTENT_DESCRIPTION: "Meet classmates from your school, discover communities, and share your servers, all in one place. [Learn more.](onClick)", HUB_EMAIL_CONNECTION_CONTENT_INPUT_HEADER: "School Email", HUB_EMAIL_CONNECTION_CONTENT_INPUT_HEADER_MOBILE: "Official School Email Address", HUB_EMAIL_CONNECTION_CONTENT_INPUT_PLACEHOLDER: "name@school.edu", HUB_EMAIL_CONNECTION_CONTENT_INPUT_DESCRIPTION: "Enter your official student email address", HUB_EMAIL_CONNECTION_CONTENT_BUTTON: "Join Hub", HUB_EMAIL_CONNECTION_CONTENT_CANCEL_BUTTON: "No Thanks", HUB_EMAIL_CONNECTION_CONTENT_TOS_AND_PP: "Review Discord's [Terms of Service]({termsURL}) and [Privacy Policy]({privacyURL}) to learn more about how we use your data.", HUB_EMAIL_CONFIRMATION_DIFFERENT_EMAIL: "Try A Different Email", HUB_EMAIL_CONNECTION_ADD_HEADER: "Attend multiple schools?", HUB_EMAIL_CONNECTION_ADD_DESCRIPTION: "Join the Student Hub for any school you’re attending.", HUB_EMAIL_CONNECTION_JOIN_MY_SCHOOOL: "Join Hub", HUB_EMAIL_CONNECTION_JOIN_ANOTHER: "Join Another Hub", HUB_EMAIL_CONNECTION_JOIN_HEADER: "Find study groups, clubs, and friends in the Student Hub for your school!", HUB_EMAIL_CONNECTION_JOIN_DESCRIPTION: "An exclusive place to meet classmates and discover student-run servers for whatever you're into.", HUB_EMAIL_CONNECTION_JOIN_CARD_DESCRIPTION: "Meet classmates from your school, discover communities, and share your servers, all in one place.", HUB_DISCORD_HUBS: "Student Hubs", HUB_SCHOOL_HUBS: "Student Hubs", HUB_DISCOVERY_FOOTER_DESCRIPTION: "Hubs are not affiliated with or managed by schools.\nServers listed in the school’s Student Hub are run by students in that Hub. Users do not need to be a member of a Student Hub to be invited to join a server listed there.", HUB_EMAIL_CONNECTION_INVITE_HEADER: "Join {count, plural, =0 {} =1 {{count} other friend} other {{count} other friends}} in the Student Hub for !!{guildName}!!!", HUB_INVITE_BUTTON_TITLE_INVITED: "You've been invited to join a Hub", HUB_INVITE_BUTTON_TITLE_INVITER: "You sent an invite to join a Hub", HUB_INVITE_ANOTHER_SCHOOL_LINK: "Go to a different school? [Join here](onClick)", HUB_EXTRA_DESCRIPTION: "What’s a Student Hub?", HUB_EMAIL_CONNECTION_SCHOOL_SUBMIT_HEADER: "Join the waitlist", HUB_EMAIL_CONNECTION_SCHOOL_SUBMIT_DESCRIPTION: "The Hub for your school isn't live yet. Enter your school's name and we'll let you know when it is!", HUB_EMAIL_CONNECTION_SCHOOL_SUBMIT_INPUT_HEADER: "School Name", HUB_EMAIL_CONNECTION_SCHOOL_SUBMIT_INPUT_PLACEHOLDER: "Full school name", HUB_EMAIL_CONNECTION_GUILD_SELECT_HEADER: "Select your school", HUB_EMAIL_CONNECTION_GUILD_SELECT_MISSING_SCHOOL: "My school isn't here", HUB_EMAIL_CONNECTION_GUILD_SELECT_SUBHEADER: "Can't find your school? [Join the waitlist.](onJoinWaitlist)", HUB_EMAIL_CONNECTION_GUILD_SELECT_NO_RESULTS_HEADER: "No matches found", HUB_EMAIL_CONNECTION_GUILD_SELECT_NO_RESULTS_SUBHEADER: "[Join the waitlist.](onJoinWaitlist)", HUB_UNAVAILABLE_SCHOOL: "My school isn't here", YOUR_HUB: "Your Hubs", HUB_VERIFY_EMAIL_ADDRESS: "Verify your email to join", HUB_PIN_DESCRIPTION: "Your code has been emailed to your official school email.\nDidn't get the code? [Resend code](onClick) to !!{email}!!", HUB_ENTER_PIN: "Enter Discord verification code", HUB_RESEND: "Sent", HUB_RESEND_ERROR: "Unable to send email", HUB_EMAIL_CONNECTION_CANCEL: "No, thanks", HUB_INVITE_HEADER: "Invite friends to the Student Hub for your school", HUB_INVITE_SUBHEADER: "A student email address is required to join.", HUB_LINK_CHANNEL_NOTICE_BODY: "New! Find study groups and clubs in the Student Hub for your school.", HUB_CHAT_INPUT_BACK: "Back to Hub", HUB_PROGRESS_JOIN_GUILD: "Join your first server", HUB_PROGRESS_INVITE_USER: "Invite your classmates", HUB_PROGRESS_SYNC_CONTACTS: "Find your friends", HUB_PROGRESS_STEP_SUBTITLE: "{number} of {total} steps completed", HUB_PROGRESS_TITLE: "Finish Student Hub orientation!", HUB_PROGRESS_TITLE_FINISHED: "You're all set!", HUB_STUDY_ROOM_NOTICE_TITLE: "NEW! Hub study rooms", HUB_STUDY_ROOM_NOTICE_DESCRIPTION: "Everyone stays muted so you can quietly cram for tests together.", HUB_STUDY_ROOM_NOTICE_CTA: "Hop into library", HUB_STUDY_ROOM_NOTICE_VOICE_CTA: "Study Together", HUB_STUDY_ROOM_SUPPRESS_TITLE: "In Hubs, everyone is muted by default in Voice Channels", HUB_STUDY_ROOM_SUPPRESS_DESCRIPTION: "This is a special place where people hang out quietly.", HUB_STUDY_ROOM_VOICE_CHANNEL_TOOLTIP: "quiet studying", HUB_EVENTS_HEADER_TITLE: "Want to promote events in Hubs?", HUB_EVENTS_HEADER_DESCRIPTION: 'Add your server to the hub, create an event in your server, and select "Share to Student Hubs" in the Event Settings.', HUB_EVENTS_FOOTER_TITLE: "That’s it for now! But wait, there might be more...", HUB_EVENTS_FOOTER_DESCRIPTION: "Refresh to see latest events", HUB_EVENTS_FOOTER_BUTTON_TEXT: "Reload Events", HUB_EVENTS_SHARE_TITLE: "Share event to Student Hubs", HUB_EVENTS_SHARE_DESCRIPTION: "This event will be discoverable by people in Student Hubs this server is in.", HUB_EVENTS_SHARE_CHANNEL_EVERYONE_VIEWABLE_WARNING: "You can only show this event in Student Hubs if it is in a channel that is viewable by @everyone.", HUB_EVENTS_GO_TO_GUILD: "Go to Server", HUB_EVENTS_JOIN_GUILD: "Join !!{guildName}!!", HUB_ONBOARDING_STUDENT_PROMPT_HEADER: "Get access to features just for students", HUB_ONBOARDING_STUDENT_PROMPT_YES_LABEL: "Yes, I'm a student", HUB_ONBOARDING_STUDENT_PROMPT_YES_SUBLABEL: "Give me student features", HUB_ONBOARDING_STUDENT_PROMPT_NO_LABEL: "No, I'm not interested", HUB_ONBOARDING_VALUE_PROP_HEADER: "Connect with your classmates", HUB_ONBOARDING_VALUE_PROP_SUBHEADER: "Discover class chats, study groups, clubs, and more in the Student Hub for your school.", HUB_ONBOARDING_VALUE_PROP_TITLE_1: "Easily find class chats and study groups.", HUB_ONBOARDING_VALUE_PROP_TITLE_2: "Meet new students at your school.", HUB_ONBOARDING_VALUE_PROP_TITLE_3: "Join clubs and communities for your interests.", USER_SETTINGS_EMAIL_NOTIFICATIONS: "Email Notifications", USER_SETTINGS_EMAIL_NOTIFICATIONS_UNSUB_MARKETING: "Unsubscribe from all marketing emails", USER_SETTINGS_EMAIL_NOTIFICATIONS_UNSUB_MARKETING_DESCRIPTION: "This includes any emails about product updates, new features, tips on using Discord, and recommendations on new servers, events or stage channels.", USER_SETTINGS_EMAIL_CATEGORY_COMMUNICATION: "Communication Emails", USER_SETTINGS_EMAIL_CATEGORY_COMMUNICATION_SUBLABEL: "Receive emails for missed calls, messages, and message digests.", USER_SETTINGS_EMAIL_CATEGORY_SOCIAL: "Social Emails", USER_SETTINGS_EMAIL_CATEGORY_SOCIAL_SUBLABEL: "Receive emails for friend requests, new friend suggestions, and events in your server.", USER_SETTINGS_EMAIL_CATEGORY_UPDATES_AND_ANNOUNCEMENTS: "Announcements and Update Emails", USER_SETTINGS_EMAIL_CATEGORY_UPDATES_AND_ANNOUNCEMENTS_SUBLABEL: "Receive emails about product updates, our newest features, improvements and bug fixes.", USER_SETTINGS_EMAIL_CATEGORY_TIPS: "Tip Emails", USER_SETTINGS_EMAIL_CATEGORY_TIPS_SUBLABEL: "Receive emails with helpful advice on how to use Discord and information on lesser known features.", USER_SETTINGS_EMAIL_CATEGORY_RECOMMENDATIONS_AND_EVENTS: "Recommendations Emails", USER_SETTINGS_EMAIL_CATEGORY_RECOMMENDATIONS_AND_EVENTS_SUBLABEL: "Receive emails with recommended servers and suggested events.", EMAIL_CATEGORY_UNSUBSCRIBE_HEADER: "You’re unsubscribed", EMAIL_CATEGORY_UNSUBSCRIBE_EMAIL_BODY: "You have unsubscribed from: {category}. To change your email notification settings, visit user settings.", EMAIL_CATEGORY_MANAGE_SETTING_LABEL: "Manage your user settings.", PROMOTIONAL_EMAIL_OPT_IN_CONSENT: "(Optional) It’s okay to send me emails with Discord updates, tips, and special offers. You can opt out at any time.", PREMIUM_TIER_0_CAROUSEL_EMOJIS: "Hype, roast, and meme with custom emoji anywhere.", PREMIUM_TIER_0_CAROUSEL_UPLOADS: "From clips to pics, share away with bigger file uploads", PREMIUM_TIER_0_CAROUSEL_PROFILES: "Show up how you want with custom profiles for each of your servers", PREMIUM_TIER_0_CAROUSEL_BOOSTS: "Unlock perks for your communities with 2 Server Boosts", SERVER_HIGHLIGHT_UNSUBSCRIBE_HEADER: "You’ve turned off Highlights for this server", SERVER_HIGHLIGHT_UNSUBSCRIBE_BODY: "Highlights are now off for **!!{guildName}!!**. You can turn them back on via server notification settings.", SERVER_HIGHLIGHT_MANAGE_SETTINGS: "Manage your notification settings for this server", HUB_DIRECTORY_CHANNEL_TITLE: "Student Hub for !!{guildName}!!", HUB_DIRECTORY_CHANNEL_EMPTY_TITLE: "Welcome to the Student Hub for !!{guildName}!! students", HUB_DIRECTORY_CHANNEL_EMPTY_SUBTITLE: "You're one of the first people here! Let's start by adding some servers and members.", HUB_DIRECTORY_CHANNEL_EMPTY_ADD_SERVER: "Add a server to this Hub", HUB_DIRECTORY_CHANNEL_EMPTY_INVITE: "Invite people to this Hub", HUB_DIRECTORY_CARD_JOINED_GUILD_BUTTON: "Go to Server", HUB_CREATE_OR_ADD_GUILD_TITLE: "Help grow the Student Hub for !!{guildName}!!", HUB_CREATE_OR_ADD_GUILD_SUBTITLE: "You will still be able to invite people from outside the Hub to your server.", HUB_CREATE_GUILD_LABEL: "Want to start a new group?", HUB_CREATE_GUILD_CTA: "Create New Server", HUB_ADD_GUILD_DESCRIPTION_TITLE: "Server Description", HUB_ADD_GUILD_DESCRIPTION_HELP: "This server description will appear in the Student Hub.", HUB_ADD_GUILD_DESCRIPTION_PLACEHOLDER: "What's your server about? What do people do there?", HUB_ENTRY_REMOVE: "Remove from Hub", HUB_ENTRY_UPDATE: "Edit settings", HUB_ENTRY_REMOVE_BODY: "Are you sure you want to remove !!{guildName}!! from this Student Hub?", HUB_CHOOSE_GUILD_TITLE: "Add a server to !!{guildName}!!", HUB_CHOOSE_GUILD_SUBTITLE: "Your server will be discoverable by people in this Hub. You can add a server if you have Admin permissions for that server.", HUB_CHOOSE_GUILD_CHOOSE_TAB: "Servers You Can Add", HUB_CHOOSE_GUILD_ADDED_TAB: "Servers You've Added", HUB_CHOOSE_GUILD_EMPTY: "You are not an admin of any unlisted servers.", HUB_CHOOSE_GUILD_ADDED_EMPTY: "You haven't added any servers yet!", HUB_CUSTOMIZE_EXISTING_GUILD_TITLE: "Help other students find !!{guildName}!!", HUB_CUSTOMIZE_GUILD_TITLE: "One last step!", HUB_CUSTOMIZE_GUILD_SUBTITLE: "Give your server a description and category to help people find it.", HUB_CUSTOMIZE_NEW_GUILD_SUBTITLE: "This server description will appear in the Hub. Use it to help students decide whether to join.", HUB_ADD_SERVER_CTA: "Add Server", HUB_ADD_STUDENT_SERVER_CTA: "Add Student Hub", HUB_ADD_OR_CREATE_SERVER_CONFIRMATION_TITLE: "Success!", HUB_ADD_SERVER_CONFIRMATION_SUBTITLE: "Your server has been added to the !!{guildName}!! Student Hub.", HUB_ADD_SERVER_CONFIRMATION_BUTTON: "Got it!", HUB_CREATE_SERVER_CONFIRMATION_SUBTITLE: "Your server has been created and added to the !!{guildName}!! Student Hub", HUB_CREATE_SERVER_CONFIRMATION_STAY: "Back to Hub", HUB_CREATE_SERVER_CONFIRMATION_GO: "Go to Server", HUB_DIRECTORY_SEARCH_TITLE: "Find your people", HUB_DIRECTORY_SEARCH_SUBTITLE: "From clubs, to study groups, to game nights, there’s a place for you.", DIRECTORY_SEARCH_PLACEHOLDER: "Explore servers", DIRECTORY_SEARCH_RESULTS_HEADER: '{numResults, plural, =0 {**0** communities} one {**1** community} other {**{numResults}** communities}} for **"{query}"**', DIRECTORY_SEARCH_NO_RESULTS_TITLE: "No matches found", DIRECTORY_SEARCH_INITIAL_TITLE: "Search for your school", DIRECTORY_SEARCH_NO_RESULTS_SUBTITLE: "Try another search or $[add a server](addServerHook).", HUB_ENTRY_UPDATE_DESCRIPTION_TITLE: "Edit Settings for !!{guildName}!!", DIRECTORY_SEARCH_NO_RESULTS_SUBTITLE_MOBILE: "Try another search or [add a server](addServerHook).", DIRECTORY_SEARCH_NO_RESULTS_NO_ADD: "Try another search", HUB_CREATE_TITLE: "Customize Your Server", HUB_CREATE_DESCRIPTION: "Give your server a personality with a name and icon.", GUILD_TEMPLATE_HEADER_CLASS: "Class", GUILD_TEMPLATE_HEADER_SOCIAL: "Social", GUILD_TEMPLATE_HEADER_MAJOR: "Subject or Major", GUILD_TEMPLATE_HEADER_DORM: "Dorm", GUILD_TEMPLATE_HEADER_SCHOOL_CLUB: "School Club", GUILD_TEMPLATE_NAME_HELP_QUESTIONS: "help-and-questions", GUILD_TEMPLATE_NAME_ASSIGNMENTS: "assignments", GUILD_TEMPLATE_NAME_DORM_NEWS: "dorm-news", GUILD_TEMPLATE_NAME_INTRODUCTIONS: "introductions", GUILD_TEMPLATE_NAME_VOICE_MEETING_ROOM_1: "Meeting Room 1", GUILD_TEMPLATE_NAME_VOICE_MEETING_ROOM_2: "Meeting Room 2", GUILD_TEMPLATE_NAME_VOICE_COUCHES: "Couches", GUILD_TEMPLATE_NAME_VOICE_MOVIE_ROOM: "Movie Room", GUILD_TEMPLATE_NAME_VOICE_UNNUMBERED_STUDY_ROOM: "Study Room", GUILD_TEMPLATE_NAME_CATEGORY_INFO: "Info", GUILD_TEMPLATE_NAME_CATEGORY_CHAT: "Chat", HUB_ADD_GUILD_CATEGORY_TITLE: "Category", HUB_ADD_GUILD_CATEGORY_PLACEHOLDER: "Choose category", DIRECTORY_CATEGORY_SCHOOL_CLUB: "Clubs", DIRECTORY_CATEGORY_CLASS: "Classes & Subjects", DIRECTORY_CATEGORY_STUDY_SOCIAL: "Social & Study", DIRECTORY_CATEGORY_SUBJECT_MAJOR: "Majors & Subjects", DIRECTORY_CATEGORY_MISCELLANEOUS: "Miscellaneous", DIRECTORY_CATEGORY_ALL: "Home", DIRECTORY_CATEGORY_RECOMMENDED: "Recommended", HUB_PRIVACY_SETTINGS_TOOLTIP: "Check your Hub Privacy Settings to choose who can direct message you in the Hub.", HUB_PRIVACY_SETTINGS_TOOLTIP_MOBILE: "Check your Hub Settings to choose who can direct message you in the Hub.", HUB_REAL_NAME_MODAL_HEADER: "Welcome to the Student Hub for !!{guildName}!!!", HUB_REAL_NAME_MODAL_SUBHEADER: "What name would help your classmates recognize you in the Hub? You can change this any time via the Hub Settings.", HUB_REAL_NAME_MODAL_FORM_PLACEHOLDER: "Hub's nickname", HUB_REAL_NAME_MODAL_FORM_TITLE: "Name you'd like to use in the Hub", HUB_REAL_NAME_CTA: "Let's go!", WELCOME_CTA_LABEL: "Wave to say hi!", LEAVE_HUB_BODY: "\n Are you sure you want to leave **!!{name}!!**?\n ", LEAVE_HUB: "Leave Hub", HUB_PRIVACY_SETTINGS: "Hub Privacy Settings", HUB_EDIT_PROFILE: "Edit Hub Profile", INVITE_BUTTON_TITLE_INVITED_HUB: "You've been invited to join a Hub", INVITE_BUTTON_TITLE_INVITER_HUB: "You sent an invite to join a Hub", HUB_SIDEBAR_JOIN_SERVERS: "Join Servers", HUB_SIDEBAR_ADD_SERVERS: "Add Servers", HUB_SIDEBAR_INVITE_MEMBERS: "Invite People", EDUCATION_NEW_FEATURE_CONFIRM: "Got it", EDUCATION_NEW_FEATURE_TRY_IT: "Try it out", EDUCATION_NEW_FEATURE_DISMISS: "Maybe later", PREMIUM_DOWNGRADE_WHAT_YOU_LOSE_TITLE: "Are you sure you want to downgrade?", PREMIUM_DOWNGRADE_WHAT_YOU_LOSE_SUBTITLE: "If you switch your {subscriptionName} subscription, **you will lose:**", PREMIUM_CANCEL_WHAT_YOU_LOSE_TITLE: "Are you sure you want to cancel?", PREMIUM_CANCEL_WHAT_YOU_LOSE_SUBTITLE: "If you cancel, **you will lose these perks:**", PREMIUM_CANCEL_WHAT_YOU_LOSE_BACK: "Nevermind, keep Nitro", PREMIUM_CANCEL_WHAT_YOU_LOSE_BACK_CTA: "Never mind, keep Nitro", PREMIUM_CANCEL_WHAT_YOU_LOSE_SUBTITLE_TENURE_REWARD: "If you cancel, you will lose your reward progress and all of these rewards:", PREMIUM_CANCEL_WHAT_YOU_LOSE_SUBTITLE_TENURE_REWARD_V2: "If you cancel, you will lose your reward progress and all of these perks:", PREMIUM_PAUSE_INSTEAD: "Pause Instead", PREMIUM_PAUSE_SELECT_TITLE: "Pause or cancel subscription", PREMIUM_PAUSE_SELECT_SUBTITLE: "If you want to take a break from paid subscriptions, you have the option to pause it for a few months", PREMIUM_PAUSE_SELECT_EXTEND_DURATION_SUBTITLE: "You have the option to continue pausing for additional months", PREMIUM_PAUSE_SELECT_PLACEHOLDER: "Select a pause duration", PREMIUM_PAUSE_INSTEAD_TITLE: "Would you like to **Pause Instead**?", PREMIUM_PAUSE_INSTEAD_SUBTITLE: "Pause your subscription for up to 90 days instead of canceling.", PREMIUM_PAUSE_DURATION_MONTHS_CAPITALIZE: "Pause for {days} days", PREMIUM_PAUSE_EXTEND_DURATION_MONTHS_CAPITALIZE: "Pause for another {days} days", PREMIUM_PAUSE_DURATION_CANCEL: "Cancel subscription", PREMIUM_PAUSE_YOUR_SUBSCRIPTION_WILL_BE_PAUSED: "Your subscription will be paused", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_HEADER: "Keep some perks for less", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_BODY: "With Nitro Basic, you still get custom emoji, bigger uploads, and [more perks]({helpCenterLink}) for just {monthlyPrice}/month.", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_CUSTOM_EMOJI_AND_STICKERS: "**Custom emoji & stickers** everywhere", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_BIGGER_FILES: "Share bigger files, up to **{tier0MaxFileSize}**", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_CUSTOM_VIDEO_BACKGROUNDS: "Stand out with **custom video backgrounds**", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_MAIN_CTA: "Get Nitro Basic", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_MAIN_CTA_V2: "Get Nitro Basic and save {percentSavings}%", PREMIUM_CANCEL_DOWNGRADE_TO_TIER_0_SECONDARY_CTA: "Continue to cancel plan", PREMIUM_CANCEL_WHAT_YOU_LOSE_PROFILE: "Customizing your profile with an **animated avatar**, **profile banner**, or **profile theme**", PREMIUM_CANCEL_WHAT_YOU_LOSE_PROFILE_TIER_1: "An **animated avatar** and **exclusive Nitro badge**", PREMIUM_CANCEL_WHAT_YOU_LOSE_EMOJI_STICKERS: "Access to **custom emoji** and **stickers** across all of your servers", PREMIUM_CANCEL_WHAT_YOU_LOSE_EMOJI_STICKERS_TIER_1: "Access to **custom emoji** across all of your servers", PREMIUM_CANCEL_WHAT_YOU_LOSE_BOOSTS: "Your **2 free Boosts** and **30% Boost discount**", PREMIUM_CANCEL_WHAT_YOU_LOSE_BOOSTS_TIER_1: "Your **30% Boost discount**", PREMIUM_CANCEL_WHAT_YOU_LOSE_BOOSTS_APPLIED: "{boostCount, plural, =1 {# Boost Applied} other {# Boosts Applied}}", PREMIUM_CANCEL_WHAT_YOU_LOSE_SCREENSHARE: "Higher **screen share** quality", PREMIUM_CANCEL_WHAT_YOU_LOSE_UPLOADS_MESSAGES: "Bigger **uploads** and **longer messages**", PREMIUM_CANCEL_WHAT_YOU_LOSE_UPLOADS_MESSAGES_TIER_1: "Bigger **uploads**", PREMIUM_CANCEL_WHAT_YOU_LOSE_SUBTITLE_MOBILE: "If you cancel your {subscriptionName} subscription, **you will lose:**", PREMIUM_CANCEL_WHAT_YOU_LOSE_SCREENSHARE_TIER_2: "Sharing your screen with **higher quality**", TEXTAREA_ACTIONS_SUGGESTIONS: "Suggestions", TEXTAREA_ACTIONS_SUBMIT_BUTTON: "Send Message Button", SUGGEST_SLASH_COMMANDS: "Slash Commands", SUGGEST_STICKERS: "Stickers", MISSING_PAYMENT_METHOD_BANNER: "Your Nitro sub is about to expire. Enter a valid payment method to keep your subscription.", INVALID_PAYMENT_METHOD_BANNER: "Your payment method failed, update your payment details to continue your Nitro subscription.", DUPLICATE_SUBSCRIPTIONS_BANNER: "You currently have multiple active Nitro subscriptions. For instructions on how cancel your duplicate subscriptions, please [click here]({helpCenterLink}).", BRL_NAME: "Brazilian Real", PLN_NAME: "Polish Złoty", TRY_NAME: "Turkish Lira", USD_NAME: "United States Dollar", AUD_NAME: "Australian Dollar", PEN_NAME: "Peruvian Sol", PHP_NAME: "Philippine Peso", ARS_NAME: "Argentine Peso", COP_NAME: "Colombian Peso", CLR_NAME: "Chilean Peso", JPY_NAME: "Japanese Yen", IDR_NAME: "Indonesian Rupiah", VND_NAME: "Vietnamese Dong", THB_NAME: "Thai Baht", MYR_NAME: "Malaysian Ringgit", KRW_NAME: "South Korean Won", MXN_NAME: "Mexican Peso", BGN_NAME: "Bulgarian Lev", CZK_NAME: "Czech Koruna", DKK_NAME: "Danish Krone", HUF_NAME: "Hungarian Forint", RON_NAME: "Romanian Leu", SEK_NAME: "Swedish Krona", EUR_NAME: "Euro", GET_FREE_TRIAL: "Get {freeTrialText}", LOCALIZED_PRICING_ON_CHANGE_PAYMENT_METHOD: "Changing your payment method will change your subscription price and currency to {newCurrencyAndPrice}. [Click here]({helpCenterLink}) to learn more about how we determine what you pay.", LOCALIZED_PRICING_MOBILE_PRICE_CHANGE_NOTICE_HAS_SUB: "As a resident of {country}, you're now paying the discounted price of {newPrice} for Nitro. [Learn More]({helpCenterLink}).", LOCALIZED_PRICING_MOBILE_PRICE_CHANGE_NOTICE_NO_SUB: "As a resident of {country}, you can now get Nitro for a discounted price of {newPrice}. [Learn More]({helpCenterLink}).", LOCALIZED_PRICING_MOBILE_PRICE_CHANGE_NOTICE_HAS_SUB_AU: "We lowered Nitro to A$12.99 a month. You get the new price automatically. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_MOBILE_PRICE_CHANGE_NOTICE_NO_SUB_AU: "We lowered Nitro to A$12.99 a month and now accept AUD. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_BANNER_SUB_NOTIF: "You get the new price automatically.", LOCALIZED_PRICING_BANNER_LINK_ONLY: "[Learn More]({helpCenterLink})", LOCALIZED_PRICING_NOTICE: "New lower Nitro prices for our friends in {country}.", LOCALIZED_PRICING_BANNER_HEADER: "Hey, {country}", LOCALIZED_PRICING_BANNER_BODY_EXISTING_CURRENCY: "We lowered Nitro to {localizedPriceWithCurrencySymbol} a month. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_BANNER_BODY_WITHOUT_PRICE: "We lowered the price of Nitro and now accept {currencyISOCode}. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_BANNER_BODY_NEW_CURRENCY_WITH_AMBIGUOUS_SYMBOL: "We lowered Nitro to {currencyISOCode} {localizedPriceWithCurrencySymbol} a month and now accept {currencyISOCode}. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_BANNER_BODY_NEW_CURRENCY: "We lowered Nitro to {localizedPriceWithCurrencySymbol} a month and now accept {currencyISOCode}. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_BANNER_NO_LOWERED_PRICE: "We now accept {currencyISOCode}. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_BANNER_NO_LOWERED_PRICE_SINGLE_STRING: "Hey, {country}. We now accept {currencyISOCode}. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_NOTICE_NO_LOWERED_PRICE: "You can now pay for Nitro with {currencyISOCode}.", LOCALIZED_PRICING_NOTICE_GENERALIZED_PAYMENT_METHODS_PROMO: "We’ve added new ways to pay for Nitro in {country}.", LOCALIZED_PRICING_PAYMENT_METHODS_PROMO: "We now accept {paymentMethods}. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_GENERALIZED_PAYMENT_METHODS_PROMO: "We’ve added new ways to pay for Nitro in {country}. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_MORE_NEW_WAYS_TO_PAY: "more new ways to pay", LOCALIZED_PRICING_HRK_EURO_WARNING: "Kuna price = {kunaPriceWithCurrency} (conversion rate: 1 EUR = 7.53450 HRK)", LOCALIZED_PRICING_PLN_LEGACY_PRICING_WARNING: "Polish users who subscribed before 2022-12-14 will **lose their existing pricing** if plan changes are made. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_PLN_LEGACY_PRICING_WARNING_NO_HELP_CENTER_LINK: "Polish users who subscribed before 2022-12-14 will **lose their existing pricing**", LOCALIZED_PRICING_PLN_LEGACY_PRICING_BOOST_WARNING: "Boosts purchased before 2022-12-14 will lose their existing pricing if canceled for Polish users. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_TRY_LEGACY_PRICING_WARNING: "Turkish users who subscribed before 2023-06-07 will **lose their existing pricing** if plan changes are made. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_TRY_LEGACY_PRICING_WARNING_NO_HELP_CENTER_LINK: "Turkish users who subscribed before 2023-06-07 will **lose their existing pricing**", LOCALIZED_PRICING_TRY_LEGACY_PRICING_BOOST_WARNING: "Boosts purchased before 2023-06-07 will lose their existing pricing if canceled for Turkish users. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_LEGACY_PRICING_WARNING: "Your subscription will **lose its existing pricing** if any plan changes are made. [Learn More]({helpCenterLink})", LOCALIZED_PRICING_LEGACY_PRICING_WARNING_NO_HELP_CENTER_LINK: "Your subscription will **lose its existing pricing** if any plan changes are made.", LOCALIZED_PRICING_LEGACY_PRICING_BOOST_WARNING: "Your Boost subscription will **lose its existing pricing** if any plan changes are made. [Learn More]({helpCenterLink})", PREMIUM_SUBSCRIPTION_ENDING_NOTICE_TEXT: "You’ll lose access to profile customization, bigger file uploads, better screen share, and more {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}.", PREMIUM_SUBSCRIPTION_ENDING_NOTICE_BUTTON_TEXT: "Learn More", PREMIUM_SUBSCRIPTION_ENDING_TIER_1_NOTICE_TEXT: "Your Nitro Classic access ends {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}. Renew now to keep custom emoji, bigger uploads, and more.", PREMIUM_SUBSCRIPTION_ENDING_TIER_0_NOTICE_TEXT: "Your Nitro Basic access ends {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}. Renew now to keep custom emoji and more.", PREMIUM_SUBSCRIPTION_ENDING_TIER_1_NOTICE_BUTTON_TEXT: "Manage Plan", PREMIUM_SUBSCRIPTION_ENDING_TIER_0_NOTICE_BUTTON_TEXT: "Manage Plan", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_TITLE: "Your Nitro access ends {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_SUBTITLE: "If you don’t keep Nitro, **you will lose:**", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_FOOTER_MONTHLY: "If you reinstate Nitro, we’ll resume charging your payment method **{price}** and continue to charge you **monthly** until you cancel the subscription. You can cancel any time from your Settings page.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_FOOTER_MULTI_MONTH: "If you reinstate Nitro, we’ll resume charging your payment method **{price}** and continue to charge you **every {intervalCount} months** until you cancel the subscription. You can cancel any time from your Settings page.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_FOOTER_YEARLY: "If you reinstate Nitro, we’ll resume charging your payment method **{price}** and continue to charge you **yearly** until you cancel the subscription. You can cancel any time from your Settings page.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_TITLE_TIER_1: "Your Nitro Classic access ends {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_SUBTITLE_TIER_1: "If you don’t keep Nitro Classic, **you will lose:**", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_FOOTER_MONTHLY_TIER_1: "If you reinstate Nitro Classic, we’ll resume charging your payment method **{price}** and continue to charge you **monthly** until you cancel the subscription. You can cancel any time from your Settings page.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_FOOTER_YEARLY_TIER_1: "If you reinstate Nitro Classic, we’ll resume charging your payment method **{price}** and continue to charge you **yearly** until you cancel the subscription. You can cancel any time from your Settings page.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_DISCOUNT_PRICE_FOOTER: "If you reinstate Nitro, we’ll resume charging your payment method **{discountPrice}** a month until your discounted rate ends, then charge ***{defaultPrice}*** a month until you cancel your subscription. You can cancel any time from your Settings page.", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_FOOTER_BUTTON_KEEP_NITRO: "Keep Nitro", PREMIUM_SUBSCRIPTION_ENDING_WHAT_YOU_LOSE_FOOTER_BUTTON_CANCEL: "Dismiss", PREMIUM_SUBSCRIPTION_ENDING_MISSING_PAYMENT_NOTICE_TEXT: "Your Nitro subscription ends {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}. Add a payment method to keep using profile customization and more.", PREMIUM_SUBSCRIPTION_ENDING_MISSING_PAYMENT_NOTICE_BUTTON_TEXT: "Add Payment", PREMIUM_SUBSCRIPTION_ENDING_MISSING_PAYMENT_TIER_1_NOTICE_TEXT: "Your Nitro Classic sub ends {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}. Add a payment method to keep using custom emoji and more.", PREMIUM_SUBSCRIPTION_ENDING_MISSING_PAYMENT_TIER_1_NOTICE_BUTTON_TEXT: "Add Payment", PREMIUM_SUBSCRIPTION_ENDING_MISSING_PAYMENT_TIER_0_NOTICE_TEXT: "Your Nitro Basic sub ends {daysLeft, plural, =0 {today} =1 {in # day} other {in # days}}. Add a payment method to keep using custom emoji and more.", PREMIUM_SUBSCRIPTION_ENDING_MISSING_PAYMENT_TIER_0_NOTICE_BUTTON_TEXT: "Add Payment", PREMIUM_SUBSCRIPTION_PAST_DUE_INVALID_PAYMENT_NOTICE_TEXT: "Your Nitro subscription payment failed, please update your payment details.", PREMIUM_SUBSCRIPTION_PAST_DUE_INVALID_PAYMENT_NOTICE_BUTTON_TEXT: "Update Now", PREMIUM_SUBSCRIPTION_PAST_DUE_MISSING_PAYMENT_NOTICE_TEXT: "Your Nitro sub is about to run out. Add a payment method to keep using profile customization and more.", PREMIUM_SUBSCRIPTION_PAST_DUE_MISSING_PAYMENT_NOTICE_BUTTON_TEXT: "Add Payment", PREMIUM_SUBSCRIPTION_ONE_TIME_PAYMENT_PAST_DUE_SUBSCRIPTION_TEXT: "Your Nitro subscription expired {daysPastDue, plural, =0 {today} =1 {# day ago} other {# days ago}}. [Purchase again.](paymentModalRedirect)", PREMIUM_SUBSCRIPTION_ONE_TIME_PAYMENT_PAST_DUE_SUBSCRIPTION_TEXT_NO_ACTION: "Your Nitro subscription expired {daysPastDue, plural, =0 {today} =1 {# day ago} other {# days ago}}.", PREMIUM_SUBSCRIPTION_PAST_DUE_RENEW_NOW_BUTTON_TEXT: "Renew Now", PREMIUM_MARKETING_HERO_HEADER_TITLE: "Unleash More Fun with Nitro", PREMIUM_MARKETING_HERO_HEADER_TITLE_V2: "Explore a World of Perks with Nitro", PREMIUM_MARKETING_HERO_HEADER_DESCRIPTION: "Plans start at only {cheapestMonthlyPrice}/month. Cancel anytime", PREMIUM_MARKETING_TIER_2_CTA_COPY: "Get access to all the Nitro perks, including HD video, 2 Server Boosts, and more.", PREMIUM_MARKETING_TIER_0_CTA_COPY_V2: "Get access to custom emoji & stickers, {uploadSize} uploads, and more.", PREMIUM_MARKETING_TIER_2_FEATURE_GRID_HEADING: "Nitro includes:", PREMIUM_MARKETING_TIER_0_FEATURE_GRID_HEADING: "Nitro Basic includes:", PREMIUM_MARKETING_FOOTER_CTAS_HEADING: "Unleash the fun with Nitro!", PREMIUM_MARKETING_PERK_GRID_ITEM_HEADING_PREMIUM_SUBSCRIPTION_BADGE: "Subscriber Badge", PREMIUM_TIER_0_MOBILE_MARKETING_HEADER: "Unleash more fun on Discord", PREMIUM_TIER_0_MOBILE_MARKETING_FOOTER: "Unleash the fun with Nitro!", PREMIUM_TIER_0_FEATURE_UPLOADS: "{uploadSize} uploads", PREMIUM_TIER_0_FEATURE_EMOJIS: "Custom emoji anywhere", PREMIUM_TIER_0_FEATURE_BADGE: "Special Nitro badge on your profile", PREMIUM_TIER_0_FEATURE_AVATAR: "Animated avatar", PREMIUM_TIER_2_FEATURE_REMIXING: "Remix any media with Early Access", PREMIUM_TIER_2_FEATURE_STREAMING: "HD video streaming", PREMIUM_TIER_2_FEATURE_BOOSTS: "{numBoosts} Server Boosts", PREMIUM_TIER_2_FEATURE_MORE: "Custom profiles and more!", AFFINITIES_MARKETING_HEADER_3: "{username} and other friends have more fun with Nitro", AFFINITIES_MARKETING_HEADER_2: "{username} and {otherUsername} have more fun with Nitro", AFFINITIES_MARKETING_HEADER_1: "{username} has more fun with Nitro", AFFINITIES_MARKETING_HEADER_V2_3: "Join {username} and other friends on Nitro", AFFINITIES_MARKETING_HEADER_V2_2: "Join {username} and {otherUsername} on Nitro", AFFINITIES_MARKETING_HEADER_V2_1: "Join {username} on Nitro", PICK_YOUR_PLAN: "Pick Your Plan", AND_MORE: "And more!", PREMIUM_FEATURES_TABLE_TITLE_SUBSCRIBER: "What You've Got", PREMIUM_FEATURES_TABLE_TITLE_CHURN: "What You'll Miss", PREMIUM_TIER_0_MARKETING_COMPARISON_TABLE_ROW_LABEL_MONTHLY_PRICE: "Monthly Price", PREMIUM_TIER_0_MARKETING_COMPARISON_TABLE_ROW_LABEL_EMOJI_STICKER: "Custom emoji and stickers anywhere", PREMIUM_TIER_0_MARKETING_COMPARISON_TABLE_ROW_LABEL_BADGE: "Nitro profile badge", PREMIUM_TIER_0_MARKETING_COMPARISON_TABLE_ROW_LABEL_AVATAR_PROFILE: "Animated avatar and custom profiles", PREMIUM_TIER_0_MARKETING_COMPARISON_TABLE_ROW_LABEL_PROFILE: "Profile banner and custom tag", PREMIUM_MOBILE_MARKETING_COMPARISON_TABLE_ACCESSIBILITY: "Plan comparison table", PREMIUM_MOBILE_MARKETING_ACCESSIBILITY_TIER_0: "Nitro Basic: {accessibilityLabel}", PREMIUM_MOBILE_MARKETING_ACCESSIBILITY_TIER_2: "Nitro: {accessibilityLabel}", PREMIUM_TIER_0_MOBILE_ACTION_SHEET_HEADER: "Nitro now starts at {monthlyPrice}/month", PREMIUM_TIER_0_MOBILE_ACTION_SHEET_HEADER_V2: "Nitro now starts at $[!!{monthlyPrice}!!/month](monthlyPriceHook)", PREMIUM_TIER_0_MOBILE_ACTION_SHEET_CTA: "Check it out", PREMIUM_TIER_0_FEATURE_UPLOADS_LONGER: "Bigger file uploads", PREMIUM_TIER_0_FEATURE_BADGE_LONGER: "Special Nitro profile badge, and more!", PREMIUM_SUBSCRIPTION_BUTTON_DISABLED_MANAGE_PLAN_TOOLTIP: "To manage your Nitro subscription, go to the Subscriptions page in User Settings.", GENERIC_CAPTCHA_HEADER: "Wait! Are you human?", GENERIC_CAPTCHA_DESCRIPTION: "Please confirm you’re not a robot.", PREMIUM_SUBSCRIPTION_REACTIVATION_NOTICE_TEXT: "Your Nitro subscription has ended. Reactivate to regain access to larger file uploads and more.", PREMIUM_SUBSCRIPTION_REACTIVATION_NOTICE_BUTTON_TEXT: "Manage Plan", PREMIUM_PREVIEW: "**This is a Nitro Preview**", PREMIUM_PREVIEW_GET_NITRO: "**Get Nitro!**", PREMIUM_PREVIEW_EXIT: "Exit Preview", PREMIUM_PREVIEW_JOIN_AVATAR: "This is looking great! Join Nitro now to show off your fancy new avatar!", PREMIUM_PREVIEW_JOIN_BANNER: "This is looking great! Join Nitro now to show off your fancy new banner!", PREMIUM_PREVIEW_JOIN_NITRO: "Join Nitro", PREMIUM_GUILD_PREVIEW: "This is a Boosting preview", PREMIUM_GUILD_BOOST_SERVER: "Boost Server", PREMIUM_GUILD_BOOST_THIS_SERVER: "Boost this server", SELECT_IMAGE_TRY_ANIMATED_AVATAR: "Try animated avatar", SELECT_IMAGE_MODAL_TITLE: "Select an Image", SELECT_IMAGE_MODAL_UPLOAD_FILE: "Upload File", SELECT_IMAGE_MODAL_CHOOSE_GIF: "Choose GIF", SELECT_IMAGE_MODAL_UPLOAD_IMAGE_OR_VIDEO: "Upload Image or Video", USER_SETTINGS_CHOOSE_FROM_LIBRARY: "**NEW!** Choose a GIF from our library for your avatar.", USER_SETTINGS_ANIMATED_AVATAR_UPSELL: "Get Animated Avatars", USER_SETTINGS_ANIMATED_AVATAR_UPSELL_DESCRIPTION: "Upload GIFs to animate your avatars! Only with Nitro.", USER_SETTINGS_TRY_IT_OUT: "Try it out!", USER_SETTINGS_WITH_IMAGE_DESCRIPTIONS: "With image descriptions", DONT_ASK_AGAIN: "Don't ask again", VOICE_CHANNEL_CHANGE_CONFIRMATION_BODY: "Looks like you're in another voice channel. Are you sure you want to switch to **!!{channel}!!**?", VOICE_CHANNEL_CHANGE_CONFIRMATION_HEADER: "You sure?", HIDE_SELF_STREAM_CONFIRMATION_BODY: 'Unchecking "Show My Screen Share" doesn’t end your stream, it just hides it from your own personal view. Others in this voice channel will still see your stream. If that’s what you wanted, confirm below.', HIDE_SELF_STREAM_CONFIRMATION_HEADER: "Are you sure?", HIDE_SELF_VIDEO_CONFIRMATION_BODY: 'Unchecking "Show My Camera" doesn’t end your video, it just hides it from your own personal view. Others in this voice channel will still see your camera. If that’s what you wanted, confirm below.', HIDE_SELF_VIDEO_CONFIRMATION_HEADER: "Are you sure?", ATTACHMENT_UTILITIES: "Upload Attachment Utilities", ATTACHMENT_UTILITIES_SPOILER: "Spoiler Attachment", ATTACHMENT_UTILITIES_MODIFY: "Modify Attachment", ATTACHMENT_UTILITIES_REMOVE: "Remove Attachment", ATTACHMENT_MODAL_SAVE: "Save", ATTACHMENT_MODAL_IMAGE_DESCRIPTION_LABEL: "Description (ALT Text)", ATTACHMENT_MODAL_IMAGE_DESCRIPTION_PLACEHOLDER: "Add a description", ATTACHMENT_TOO_MANY_ERROR_TITLE: "Too many uploads!", ATTACHMENT_TOO_MANY_ERROR_MESSAGE: "You can only upload !!{limit}!! files at a time!", FILE_PICKER_ERROR_TITLE: "Issue selecting files", FILE_PICKER_ERROR_DESCRIPTION: "Something went wrong getting your file. Please try again.", UNKNOWN_CHANNEL_UPDATE_DISCORD: "Please update Discord to access this channel", AUDIT_LOG: "Audit Log", ALL_CHANNELS: "all channels", CLEAR: "Clear", FORM_LENGTH_ERROR: "Must be between !!{min, number}!! and !!{max, number}!! in length.", INTERACTION_FORM_SUBMISSION_APPLICATION: "This form will be submitted to **!!{applicationName}!!**. Do not share passwords or other sensitive information.", INTERACTION_FORM_SUBMISSION_FAILED: "Something went wrong. Try again.", OTHER_HIGH_PRIORITY: "Other (High Priority)", MOBILE_WEB_HANDOFF_EXPLANATION_TEXT_LINE_1: "Already logged into the Discord app?", MOBILE_WEB_HANDOFF_EXPLANATION_TEXT_LINE_2: "Sign in with a single tap.", MOBILE_WEB_HANDOFF_ERROR_TRY_AGAIN: "Your login session has expired. Check your internet connection and try again.", MOBILE_WEB_HANDOFF_ERROR_NO_TRY_AGAIN: "Unable to retrieve login information.", MOBILE_WEB_HANDOFF_BUTTON_TEXT: "Open App", MOBILE_WEB_GET_APP_UPSELL: "Get the Discord App", MOBILE_WEB_GET_APP_UPSELL_HALFSHEET_HEADER: "Get the Discord app", MOBILE_WEB_GET_APP_UPSELL_HALFSHEET_SUBHEADER: "More features, better performance, and easy access to all your conversations.", MOBILE_WEB_GET_APP_UPSELL_HALFSHEET_BUTTON_TEXT: "Get the App", GUILD_DISCOVERY_RECOMMENDATIONS_TITLE: "!!{username}!!, you might like these servers", PREMIUM_5TH_ANNIVERSARY_TITLE: "Nitro is turning 5!", PREMIUM_5TH_ANNIVERSARY_BODY: "They grow up so fast :') and we couldn't have done it without subscribers like you. Watch out for more Nitro goodies this year, and thanks for being awesome.", GUILD_HOME: "Home", GUILD_HOME_HTML_TITLE: "Home - !!{guildName}!!", GUILD_HOME_TITLE: "You found a new feature!", GUILD_FEED_MOBILE_CHANNEL_UPSELL_TITLE: "View the channel list", GUILD_FEED_MOBILE_CHANNEL_UPSELL_DESCRIPTION: "See where these conversations come from", GUILD_FEED_WELCOME_HEADER_SHOW_MORE: "Show more ({count})", GUILD_FEED_WELCOME_HEADER_SHOW_LESS: "Show less", GUILD_HOME_ABOUT: "About", GUILD_HOME_SIDEBAR_A11Y_LABEL: "Home Sidebar", GUILD_HOME_DESCRIPTION: "This is a new surface we're beta testing to help you keep up with what's happening in your server.", GUILD_FEED_TITLE: "Your Highlights", GUILD_FEED_FOOTER_TITLE: "That's it for now!", GUILD_FEED_FOOTER_SUBTITLE: "If you really really want to, reload to see if anything's new", GUILD_FEED_MUTED_CHANNELS_SUBTITLE: "We're not showing content from $[{numMutedChannels, plural, one {# muted channel} other {# muted channels}}](mutedChannelsHook).", GUILD_FEED_EMPTY_TITLE: "There are no Highlights to show you yet!", GUILD_FEED_EMPTY_SUBTITLE: "But you could write some!", GUILD_FEED_ERROR_TITLE: "Oops! You've caught an ultra-rare error.", GUILD_FEED_ERROR_SUBTITLE: "Please reload the page or check our [status page]({url}).", GUILD_FEED_RELOAD: "Reload", GUILD_FEED_MESSAGE_ITEM_A11Y_LABEL: "Open message from !!{channelName}!! in sidebar", GUILD_FEED_MESSAGE_ITEM_NUM_REPLIES: "{numReplies, plural, =1 {# reply} other {# replies}}", GUILD_FEED_MESSAGE_ITEM_VIEW_MORE_REPLIES: "View {numReplies, plural, =1 {# more reply} other {# more replies}}", GUILD_FEED_MESSAGE_ITEM_MAX_REPLIES: "{maxReplies}+ replies", GUILD_FEED_UNREAD_DIVIDER_TITLE: "You're all caught up", GUILD_FEED_UNREAD_DIVIDER_SUBTITLE: "You've seen all highlights from the past 2 weeks", GUILD_FEED_FEATURE_ITEM_24_HOURS: "24 Hours", GUILD_FEED_FEATURE_ITEM_THREE_DAYS: "3 Days", GUILD_FEED_FEATURE_ITEM_SEVEN_DAYS: "7 Days", GUILD_FEED_FEATURE_ITEM_MENU_ITEM_TEXT: "For {timePeriod}", GUILD_FEED_FEATURED_ITEMS_NO_ITEMS: "There are no featured items right now", GUILD_FEED_FEATURED_ITEMS: "Featured Items", GUILD_FEED_UNFEATURE_BUTTON_TEXT: "Unfeature", GUILD_FEED_FEATURE_BUTTON_TEXT: "Feature", GUILD_FEED_FEATURED_BUTTON_TEXT: "Featured", GUILD_FEED_FEATURED_BY_MODERATORS: "Featured by moderators", GUILD_FEED_FEATURED_BY: "Featured by", GUILD_FEED_FEATURE_MESSAGE: "Feature Message", GUILD_FEED_FEATURED_MESSAGES: "Featured Items", GUILD_FEED_UNFEATURED_MESSAGE_MODAL_HEADER: "Unfeature this message from home?", GUILD_FEED_UNFEATURED_MESSAGE_MODAL_BODY: "If you unfeature this message it may no longer show up at the top of home for all of the server's members.", GUILD_FEED_UNFEATURE_MESSAGE: "Unfeature Message", GUILD_FEED_FEATURED_MESSAGE_MODAL_HEADER: "Feature this message in home?", GUILD_FEED_FEATURE_MESSAGE_MODAL_BODY: "This message will appear in this server's home for {timePeriod} for all members who haven't seen it yet.", GUILD_FEED_FEATURE_FORUM_POST: "Feature Post", GUILD_FEED_UNFEATURE_FORUM_POST: "Unfeature Post", GUILD_FEED_UNFEATURE_FORUM_POST_MODAL_HEADER: "Unfeature this post from home?", GUILD_FEED_UNFEATURED_FORUM_POST_MODAL_BODY: "If you unfeature this post it may no longer show up at the top of home for all of the server's members.", GUILD_FEED_FEATURED_FORUM_POST_MODAL_HEADER: "Feature this post in home?", GUILD_FEED_FEATURE_FORUM_POST_MODAL_BODY: "\"**!!{threadName}!!**\" will appear on this server's home for {timePeriod} for all members who haven't seen it yet.", GUILD_FEED_FEATURED_EMPTY: "There are no featured messages right now", GUILD_FEED_FEATURED_EXPIRED_IN: "Expires {fromNow}", GUILD_FEED_VIEW_AS_ROLE_WARNING: "Your Highlights does not currently support View as Role. A member will only see content from channels that they have permission to view.", GUILD_HOME_HEADER_A11Y_LABEL: "Background image header for Home", GUILD_FEED_SPECIAL_HIGHLIGHT: "Just for you", GUILD_FEED_HIDE_MESSAGE_ITEM: "Not Interested", GUILD_FEED_HIDDEN_MESSAGE_ITEM: "This message has been removed", GUILD_FEED_HIDDEN_MESSAGE_FEEDBACK_NO_LIKE: "I don't like it", GUILD_FEED_HIDDEN_MESSAGE_FEEDBACK_SHOW_LESS_CHANNEL: "Show less from $[**!!{channelName}!!**](channelNameHook)", GUILD_FEED_HIDDEN_MESSAGE_FEEDBACK_SHOW_LESS_USER: "Show less from $[**!!{username}!!**](usernameHook)", MOBILE_GUILD_FEED_HIDDEN_MESSAGE_FEEDBACK_SHOW_LESS_CHANNEL: "Show less from **!!{channelName}!!**", MOBILE_GUILD_FEED_HIDDEN_MESSAGE_FEEDBACK_SHOW_LESS_USER: "Show less from **!!{username}!!**", GUILD_FEED_HIDDEN_MESSAGE_ITEM_FEEDBACK_RECEIVED_TITLE: "Thanks!", GUILD_FEED_HIDDEN_MESSAGE_ITEM_FEEDBACK_RECEIVED_SUBTITLE: "We'll get to work improving your feed.", GUILD_FEED_REMOVE_MESSAGE_ITEM: "Remove for Everyone", GUILD_FEED_REMOVE_MESSAGE_ITEM_HEADER: "Remove for everyone?", GUILD_FEED_REMOVE_MESSAGE_ITEM_CONFIRM_TEXT: "Members won't see it in Home anymore, but it'll still appear in the original channel.", GUILD_FEED_REMOVE_CONFIRM: "Remove", GUILD_FEED_REMOVED_MESSAGE: "This message was removed.", GUILD_HOME_CHANNEL_SETTINGS_SUBTITLE: "Customize how this channel appears in Home. Only members who can view this channel will see content from this channel in Home. [Learn more about the Home beta.]({helpCenterLink})", GUILD_FEED_DEMOTE_CHANNEL: "Deprioritize Channel in Highlights", GUILD_FEED_DEMOTE_CHANNEL_DESCRIPTION: "Content in this channel may be ranked lower than it otherwise would be, appear less frequently, or not appear at all. $[This setting is being tested and could be changed or removed.](warningHook)", ACTIVE_CHANNELS_SHOW_CHANNEL: "Show Channel in Active Now", ACTIVE_CHANNELS_SHOW_CHANNEL_DESCRIPTION: "This channel will appear in a member's Active Now section of Home.", GUILD_FEED_NUX_MEMBER_TITLE: "Keep up with top moments!", GUILD_FEED_NUX_MEMBER_BODY_1: "This community has been selected to test Home, a new feature.", GUILD_FEED_NUX_MEMBER_BODY_2: "Home can help you find cool moments in this community based on member engagement and moderator curation.", GUILD_FEED_NUX_MEMBER_BODY_3: "Learn More", GUILD_FEED_NUX_MODERATOR_TITLE: "Help your members keep up!", GUILD_FEED_NUX_MODERATOR_CTA: "Learn How to Curate", GUILD_FEED_NUX_MOBILE_TITLE: "Introducing Home!", GUILD_FEED_NUX_MOBILE_MODERATOR_SUBTITLE: "Welcome to a new way to help your members keep up with updates, highlights and cool moments in this community.", GUILD_FEED_NUX_MOBILE_MEMBER_SUBTITLE: "Welcome to a new place for updates and highlights, helping you find cool moments across this community.", GUILD_FEED_NUX_CURATION_TITLE: "Curating Content on Home", GUILD_FEED_NUX_CURATION_SUBTITLE: "With the Manage Messages permission, you can curate the experience on Home for your members in 3 ways.", GUILD_FEED_NUX_CURATION_FEATURE_TITLE: "Feature Messages", GUILD_FEED_NUX_CURATION_FEATURE_SUBTITLE: "Want to highlight cool moments or important messages? Feature a message at the top of Home temporarily.", GUILD_FEED_NUX_CURATION_BLOCK_TITLE: "Deprioritize Channels", GUILD_FEED_NUX_CURATION_BLOCK_SUBTITLE: "Have a spammy channel? You can depriortize a channel from populating Home in that channel's settings.", GUILD_FEED_NUX_CURATION_REMOVE_TITLE: "Remove Messages", GUILD_FEED_NUX_CURATION_REMOVE_SUBTITLE: "See something sensitive? You can remove any message from Home without deleting the message.", GUILD_FEED_TRUNCATED_MESSAGE_SEE_MORE: "See more", GUILD_FEED_TRUNCATED_REPLIES_VIEW_MORE: "View {count, plural, one {1 more reply} other {{count} more replies}}", GUILD_FEED_FEEDBACK_SECTION_1_TITLE: "How would you rate this content?", GUILD_FEED_FEEDBACK_SECTION_1_SUBTITLE: "Help us improve Discord", GUILD_FEED_FEEDBACK_SECTION_2_TITLE: "Why is it {rating} content?", GUILD_FEED_FEEDBACK_RATING_TERRIBLE: "Terrible", GUILD_FEED_FEEDBACK_RATING_BAD: "Bad", GUILD_FEED_FEEDBACK_RATING_OKAY: "Okay", GUILD_FEED_FEEDBACK_RATING_GOOD: "Good", GUILD_FEED_FEEDBACK_RATING_EXCELLENT: "Excellent", GUILD_FEED_FEEDBACK_OPTION_ALREADY_SAW: "Already saw", GUILD_FEED_FEEDBACK_OPTION_IRRELEVANT: "Irrelevant", GUILD_FEED_FEEDBACK_OPTION_TOO_OLD: "Too old", GUILD_FEED_FEEDBACK_OPTION_CONFUSING: "Confusing or random", GUILD_FEED_FEEDBACK_OPTION_INAPPROPRIATE: "Inappropriate", GUILD_FEED_FEEDBACK_OPTION_UNINTERESTING: "Uninteresting", GUILD_FEED_FEEDBACK_OPTION_ENTERTAINING: "Entertaining", GUILD_FEED_FEEDBACK_OPTION_INFORMATIVE: "Informative", GUILD_FEED_FEEDBACK_OPTION_USEFUL: "Useful", GUILD_FEED_FEEDBACK_OPTION_FUNNY: "Funny", GUILD_FEED_FEEDBACK_OTHER_REASON: "Other", GUILD_FEED_FEEDBACK_OTHER_PLACEHOLDER: "Share your reason here.", GUILD_FEED_FEEDBACK_SECTION_3_TITLE: "Thank you for your feedback!", GUILD_HOME_DEPRECATION_TITLE: "Server Home is going away soon", GUILD_HOME_DEPRECATION_DESCRIPTION: "After today, we'll start phasing out Server Home for this community. Thanks for participating and sharing your feedback during the beta. Stay tuned for exciting new things to try out soon!", ACTIVE_CHANNELS_COLLAPSED_SPACER_TITLE: "See what's up!", ACTIVE_CHANNELS_COLLAPSED_SPACER_SUBTITLE: "Hop in a channel and start talking.", ACTIVE_CHANNELS_HEADER: "Active Now", ACTIVE_CHANNELS_FEW_MESSAGES: "{count, plural, one {1 recent message} other {{count} recent messages}}", ACTIVE_CHANNELS_MANY_MESSAGES: "Many recent messages", ACTIVE_VOICE_PARTICIPANTS: "{count, plural, one {1 participant} other {{count} participants}}", ACTIVE_CHANNELS_EMPTY_TITLE: "All channels are chilling", ACTIVE_CHANNELS_EMPTY_SUBTITLE: "Check back in a bit", GUILD_SETTINGS_AUDIT_LOG_ACTIVE_CHANNELS_REMOVE_CHANNEL: "Removed channel from Active Now", GUILD_SETTINGS_AUDIT_LOG_ACTIVE_CHANNELS_UNREMOVE_CHANNEL: "Added channel back to Active Now", GUILD_HOME_SEE_ALL: "See all ({count})", GUILD_HOME_SEE_LESS: "See less", GUILD_HOME_EVENTS_TITLE: "Upcoming", GUILD_HOME_EVENTS_TOOLTIP_TEXT: "Event", MOBILE_GUILD_HOME_EVENTS_UPCOMING_TITLE: "Upcoming Event", MOBILE_GUILD_HOME_EVENTS_NEW_TITLE: "New Event", GUILD_HOME_FEEDBACK_MENU_ITEM_LABEL: "Give feedback", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_TITLE: "Can you tell us more?", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_SUBTITLE: "This will help us improve. Why are you removing this channel from Highlights?", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_OPTION_BOTS: "This channel is for logs or bot-spam", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_OPTION_NO_GO: "I don't want members to come to this channel", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_OPTION_TOO_MUCH: "This channel is overwhelming Highlights", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_OPTION_SENSITIVE: "This channel has sensitive content", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_OPTION_OTHER: "Other", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_MOBILE_TITLE: "Why are you removing this channel?", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_MOBILE_OTHER_TITLE: "Your reason", GUILD_HOME_CHANNEL_REMOVE_FEEDBACK_MOBILE_OTHER_DESCRIPTION: "Tell us more", GUILD_HOME_RESOURCES: "Resources", GUILD_SETTINGS_ACTION_FILTER_GUILD_HOME_FEATURE_ITEM: "Feature Item on Home", GUILD_SETTINGS_ACTION_FILTER_GUILD_HOME_REMOVE_ITEM: "Remove Item from Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_FEATURE_ITEM: "$[**!!{user}!!**](userHook) featured something on Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_FEATURE_MESSAGE: "$[**!!{user}!!**](userHook) featured a message on Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_FEATURE_FORUM_POST: "$[**!!{user}!!**](userHook) featured a forum post on Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_REMOVE_ITEM: "$[**!!{user}!!**](userHook) removed an item from Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_REMOVE_MESSAGE: "$[**!!{user}!!**](userHook) removed a message from Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_REMOVE_FORUM_POST: "$[**!!{user}!!**](userHook) removed a forum post from Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_REMOVE_CHANNEL: "Removed channel from Home", GUILD_SETTINGS_AUDIT_LOG_GUILD_HOME_UNREMOVE_CHANNEL: "Added channel back to Home", IN_APP_EDUCATION_SERVER_HEADER: "What is a server?", IN_APP_EDUCATION_SERVER_SUBHEADER: "Servers are places where you can hang out with friends and meet people. Most servers are invite-only.", IN_APP_EDUCATION_CHANNEL_HEADER: "What are channels?", IN_APP_EDUCATION_CHANNEL_SUBHEADER: "Channels are where you can talk, hop in voice, play games, and more. Every server has a channel list you can scroll through to see what’s happening.", IN_APP_EDUCATION_DM_HEADER: "Direct Messages", IN_APP_EDUCATION_DM_SUBHEADER: "Direct messages are separate from servers. You can DM a friend privately for a quick chat or create a group DM with up to 10 people.", IN_APP_EDUCATION_MORE_HELP_HEADER: "Still need help?", IN_APP_EDUCATION_MORE_HELP_SUBHEADER: "Not finding what you’re looking for? [Visit our help center]({helpCenterUrl}) for more information.", INVITE_PERMISSION_MODAL_TITLE: "Invites are disabled", INVITE_PERMISSION_MODAL_TEXT: "To add a friend to this server, ask someone with invite permissions for help.", DISABLE_INVITES: "Pause Invites", ENABLE_INVITES: "Enable Invites", INVITES_PERMANENTLY_DISABLED_TIP: "Invites to this server are currently permanently disabled.", INVITES_DISABLED_TIP: "Invites to this server are currently paused.", INVITES_DISABLED_DESCRIPTION: "Invite links, embeds, and vanity urls will still be visible, but their usage will be paused. New users will no longer be able to join this server. Managing invites will still work. [Learn More]({helpArticleUrl})", INVITES_DISABLED_DESCRIPTION_MOBILE: "Invite links, embeds, and vanity urls will still be visible, but new users will no longer be able to join this server. [Learn More]({helpArticleUrl})", DISABLE_DMS: "Pause DMs", DISABLE_DMS_DESCRIPTION: "Temporarily stops new direct messages from being sent between members in your server. Friends can still DM each other, and moderators can still DM members, and your Apps can still DM members.", PAYMENT_AUTHORIZATION_SUCCEEDED: "Payment Authorized", PAYMENT_AUTHORIZING: "Authorizing", PAYMENT_AUTHORIZATION_EXPIRED: "Payment authorization link has expired.", PAYMENT_AUTH_SUCCEEDED_SUGGESTION: "If you followed this link after trying to make a purchase, please go back to the app to see the status of your purchase.", PAYMENT_AUTH_EXPIRED_SUGGESTION: "Please try to make the purchase again.", TEXT_IN_VOICE_ONBOARDING_TITLE: "NEW! Text chat in voice!", TEXT_IN_VOICE_ONBOARDING_SUBTITLE: "No more clogging general. Send messages, images, and links to everyone in this voice channel.", TEXT_IN_VOICE_ONBOARDING_CTA: "Try It", TEXT_IN_VOICE_POPOUT_DISABLED: "Chat in the popout is coming soon.", NEW_MEMBER_BADGE_TOOLTIP_TEXT: "I'm new here, say hi!", NEW_MEMBER_BADGE_POPOUT_TEXT: "System icon for new server members.", ROLE_CREATION_SKIP: "Skip this step", ROLE_CREATION_STEP_TITLE: "Step {number} of {total}", ROLE_CREATION_FINISH: "Finish", ROLE_CREATION_CREATE_STEP_TITLE: "Create a new role", ROLE_CREATION_CREATE_STEP_SUBTITLE: "Give this role a unique name and color. You can always change this later.", ROLE_CREATION_CREATE_STEP_NAME_HINT: "e.g. coach, moderator, subscriber, pet club", ROLE_CREATION_CREATE_STEP_COLOR_HINT: "Members use the color of the highest role they have in the roles list.", ROLE_CREATION_PERMISSION_STEP_TITLE: "Set up permissions", ROLE_CREATION_PERMISSION_STEP_SUBTITLE: "How powerful should this role be? You can always change permissions later.", ROLE_CREATION_MEMBER_STEP_TITLE: "Add members", ROLE_CREATION_MEMBER_STEP_SUBTITLE: "Assign this role to your members. Members can have more than one role.", ROLE_CREATION_FAILED: "Failed to create role", EMPTY_MENTIONS_TITLE: "No recent mentions", EMPTY_MENTIONS_BODY: "All of your recent mentions will show up here.", EMPTY_MENTIONS_BODY_V2: "Come back to see when others have tagged or replied to you.", EMPTY_FRIENDS_TITLE: "None of your friends are here yet", EMPTY_FRIENDS_BODY: "Start a conversation by finding a friend who's already on Discord.", EMPTY_FRIENDS_CTA: "Find your friends on Discord", EMPTY_INSTANT_INVITE_FRIENDS_TITLE: "No friends to invite yet", EMPTY_INSTANT_INVITE_FRIENDS_BODY: "Add some friends so that you can invite them to this server!", EMPTY_INSTANT_INVITE_FRIENDS_LINK: "Go to the Friends tab", EMPTY_QUICK_QUERY_TITLE: "No results", EMPTY_QUICK_NO_QUERY_TITLE: "What're you looking for?", EMPTY_QUICK_NO_QUERY_BODY: "Search servers, channels, or DMs.", EMPTY_PRIVATE_DMS_TITLE: "No messages yet!", EMPTY_PRIVATE_DMS_BODY: "When you chat with friends directly it will show up here.", EMPTY_PRIVATE_DMS_CTA: "Add Friends", EMPTY_MESSAGES_TITLE: "DMs with superpowers", EMPTY_MESSAGES_BODY: "Invite your friends to play games, listen to music together, and more.", EMPTY_PRIVATE_ADD_RECIPIENT_TITLE: "No friends to message yet", EMPTY_PRIVATE_ADD_RECIPIENT_BODY: "You can start a conversation by finding a friend already on Discord.", EMPTY_VOICE_CHANNEL_TITLE: "You're the first one here!", EMPTY_VOICE_CHANNEL_BODY: "Voice channels are where people hang out and talk over voice and video.", DISCOVERABLE_GUILD_HEADER_PUBLIC: "Discoverable", DISCOVERABLE_GUILD_HEADER_PUBLIC_INFO: "Anyone can join this server.", DISCOVERABLE_GUILD_PROFILE_PUBLIC_LABEL: "Discoverable Community", REPORT_APP: "Report App", FORUM: "Forum", CREATE_FORUM_CHANNEL: "Try out Forums", FORUM_CHANNEL_DESCRIPTION: "Create a space for organized discussions", CHANNEL_TYPE_NEW: "New", CHANNEL_NEW_POSTS_LABEL: "{count} New", FORUM_SECTION_ARCHIVED: "Older Posts", FORUM_NO_POST_WITH_TAG_TITLE: "There are no posts with {numTags, plural, =1 {this tag} other {these tags}} yet!", FORUM_NO_POST_WITH_TAG_DESCRIPTION: "Be the first to start a conversation with {numTags, plural, =1 {this tag} other {these tags}}", FORUM_EMPTY_STATE_CREATE_POST_CTA: "Create a post", AUTO_ARCHIVE_THREAD_PINNED: "Pinned post will not be auto-closed", FORUM_SETTING_SLOW_MODE_POSTS: "Posts", FORUM_SETTING_SLOW_MODE_MESSAGES: "Messages", FORUM_SETTING_SLOW_MODE_MESSAGE_TEXT: "Members will be limited to one message per this interval for any new posts, unless they have Manage Channel or Manage Messages permissions.", FORM_POST_ACTIVE_AGO_TIMESTAMP_MINUTES: "Active {count}m ago", FORM_POST_ACTIVE_AGO_TIMESTAMP_HOURS: "Active {count}h ago", FORM_POST_ACTIVE_AGO_TIMESTAMP_DAYS: "Active {count}d ago", FORM_POST_ACTIVE_AGO_TIMESTAMP_MORE_THAN_MONTH: "Active >30d ago", FORM_POST_CREATED_AGO_TIMESTAMP_MINUTES: "Posted {count}m ago", FORM_POST_CREATED_AGO_TIMESTAMP_HOURS: "Posted {count}h ago", FORM_POST_CREATED_AGO_TIMESTAMP_DAYS: "Posted {count}d ago", FORM_POST_CREATED_AGO_TIMESTAMP_MORE_THAN_MONTH: "Posted >30d ago", FORUM_SORT_AY11_LABEL: "Sort Posts", FORUM_SORT_AND_VIEW_AY11_LABEL: "Set sort or view", FORUM_SORT_ACTIVITY: "Recent Activity", FORUM_SORT_CREATION: "Creation Time", FORUM_TAG_FILTER_LABEL: "Tags", FORUM_TAG_FILTER_HEADER: "Filter by tags", FORUM_TAG_FILTER_SUBMIT: "Show posts", FORUM_TAG_FILTER_CLEAR: "Clear all", FORUM_TAG_A11Y_FILTER_BY_TAG: "Filter by tag, {tagName}", FORUM_TAG_A11Y_ADD_TAG: "Add tag, {tagName}", FORUM_TAG_A11Y_TAG_BY: "tag, {tagName}", NEW_FORUM_POST: "Create Post", NEW_FORUM_POST_NEW: "New Post", SUBMIT_POST: "Post", FORUM_POST_TITLE_PLACEHOLDER: "Start a conversation...", FORUM_POST_TITLE_PLACEHOLDER_SEARCH: "Search or create a post...", FORUM_CHANNEL_NO_POST_HISTORY: "You do not have permission to view the post history of **#!!{channelName}!!**.", FORUM_CHANNEL_NO_SEARCH_POST_HISTORY: "You do not have permission to search the post history of **#!!{channelName}!!**.", FORUM_POST_TITLE_PLACEHOLDER_FOCUSED: "Title", FORUM_POST_MESSAGE_PLACEHOLDER: "Enter a message...", NEW_FORUM_POST_COUNT: "{count, plural, =1 {1 New Post} other {{count} New Posts}}", ACTIVE_FORUM_POST_COUNT: "{count, plural, =1 {1 Active Post} other {{count} Active Posts}}", FORUM_POST_MESSAGE_COUNT: "{count, plural, =1 {1 Message} other {{count} Messages}}", FORUM_POST_MESSAGE_COUNT_A11Y: "{count, plural, =1 {1 Comment} other {{count} Comments}}", FORUM_POST_MESSAGE_COUNT_SHORT: "{count} New", FORUM_POST_MESSAGE_COUNT_SHORT_PARENTHETICAL: "({count} New)", FORUM_POST_ARIA_LABEL: "Post {title}, {count, plural, =1 {1 message} other {{count} messages}}", FORUM_EMPTY_STATE_TITLE: "Be the first to start the conversation!", FORUM_EMPTY_STATE_DESCRIPTION: "What do you want to post about in #{channelName}?", FORUM_EMPTY_STATE_CTA: "See Examples", FORUM_NEW_POSTS_CREATED: "New Posts Created", FORUM_POST_NOTIFICATIONS: "Post Notifications", FORUM_MESSAGE_NOTIFICATIONS: "Message Notifications", FORUM_MESSAGE_NOTIFICATIONS_DESCRIPTION: "This setting applies when you send messages or get mentioned in a post.", EDIT_FORUM_POST_SETTINGS: "Post Settings", EDIT_FORUM_POST: "Edit Post", DELETE_FORUM_POST: "Delete Post", ARCHIVE_FORUM_POST: "Close Post", ARCHIVE_LOCK_FORUM_POST: "Close & Lock Post", LOCK_FORUM_POST: "Lock Post", UNLOCK_FORUM_POST: "Unlock post", DELETE_FORUM_POST_BODY: "Are you sure you want to delete this post?", DELETE_FORUM_POST_CONFIRM_BODY: "Are you sure you want to delete **!!{postName}!!**? All message replies will also be deleted. This cannot be undone.", DELETE_FORUM_POST_OP_CONFIRM_BODY: "Are you sure you want to delete **!!{postName}!!**? This cannot be undone.", DELETE_FORUM_POST_OP_WITH_REPLIES_CONFIRM_BODY: "Are you sure you want to delete your message? Since other members have replied to your post, only your original message will be deleted. This cannot be undone.", UNARCHIVE_FORUM_POST: "Open Post", FORUM_POST_SETTINGS: "Post Settings", JOIN_FORUM_POST: "Follow Post", LEAVE_FORUM_POST: "Unfollow Post", MUTE_FORUM_POST: "Mute Post", UNMUTE_FORUM_POST: "Unmute Post", TOAST_FORUM_POST_ID_COPIED: "Copied Post ID", PIN_POST: "Pin Post", UNPIN_POST: "Unpin Post", PINNED_POST: "Pinned", UNPINNED_POST: "Unpinned", FORUM_POST_HEADER_NOTICE_LOCKED: "This post has been closed and locked. Only moderators can reopen it.", FORUM_POST_HEADER_NOTICE_ACTIVE_LOCKED: "This post has been locked. Only moderators can send messages.", FORM_HELP_DEFAULT_AUTO_ARCHIVE_DURATION_FORUM_POST: "New posts will not show in the channel list after being inactive for the specified duration.", FORM_HELP_AUTO_ARCHIVE_DURATION_FORUM_POST: "Posts will not show in the channel list after being inactive for the specified duration.", REMOVE_USER_FROM_FORUM_POST: "Remove !!{user}!! from Post", FORUM_POST_MEMBER_LIST_EMPTY_STATE_HEADER: "There’s no one in this post.", MANAGE_FORUM_POSTS: "Manage Posts", MANAGE_THREADS_AND_FORUM_POSTS: "Manage Threads and Posts", ROLE_PERMISSIONS_MANAGE_THREADS_AND_FORUMS_DESCRIPTION: "Allows members to rename, delete, close, and turn on slow mode for threads and posts. They can also view private threads.", ROLE_PERMISSIONS_MANAGE_THREADS_AND_FORUMS_DESCRIPTION_TEXT: "Allows members to rename, delete, close, and turn on slow mode for posts in this channel.", ROLE_PERMISSIONS_MANAGE_THREADS_AND_FORUMS_DESCRIPTION_CATEGORY: "Allows members to rename, delete, close, and turn on slow mode for threads and posts in these channels. They can also view private threads.", CREATE_FORUM_POSTS: "Create Posts", SEND_MESSAGES_AND_CREATE_FORUM_POSTS: "Send Messages and Create Posts", ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION: "Allow members to send messages in text channels and create posts in forum channels.", ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION_TEXT: "Allow members to create posts in this channel.", ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION_TEXT_DISABLED: "Allow members to create posts in this channel. \n $[We recommend you keep this permission enabled.](warningHook) \n Communities that let all members post have more success keeping their servers active and engaging members.", ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION_CATEGORY: "Allow members to send messages and create posts in these channels.", SEND_MESSAGES_IN_FORUM_POSTS: "Send Messages in Posts", SEND_MESSAGES_IN_THREADS_AND_FORUM_POSTS: "Send Messages in Threads and Posts", ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_AND_FORUM_POSTS_DESCRIPTION: "Allow members to send messages in threads and in posts on forum channels.", ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_AND_FORUM_POSTS_DESCRIPTION_CATEGORY: "Allow members to send messages in threads and posts under these channels.", ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_AND_FORUM_POSTS_DESCRIPTION_TEXT: "Allow members to send messages in threads and posts under this channel.", ROLE_PERMISSIONS_SECTION_FORUMS: "Forum Channel Permissions", ROLE_PERMISSIONS_SECTION_FORUMS_DESCRIPTION: "Automated moderation makes monitoring forums easier. [Enable](setUpAutomod)", FORUM_ANDROID_WARNING: "This channel isn’t fully built yet for Android devices. Log on to your desktop client for the full experience.", ADD_ATTACHMENT_FORUM_POST: "Add Media", ADD_TAG_FORUM_POST: "Add Tag", FORUM_POST_TYPING: "Typing...", FORUM_CHANNEL_TOPIC_HEADING: "Guidelines", FORUM_CHANNEL_TOPIC_MISSING_HEADING: "Create Post Guidelines!", FORUM_CHANNEL_TOPIC_MISSING_DESCRIPTION: "Help your members understand what this channel is for, and set rules to keep it civil!", FORUM_CHANNEL_TOPIC_MISSING_CTA: "Create Post Guidelines", FORUM_CHANNEL_TOPIC_SHOW_MORE: "See More", FORUM_CHANNEL_TOPIC_VIEW_ALL: "View All", FORUM_PIN_CONFIRM_TITLE: "Pin this post?", FORUM_PIN_CONFIRM_BODY: "There’s a post that’s pinned already. Pinning this post will remove the existing pinned post.", FORUM_BEFORE_YOU_POST: "Before you post...", FORUM_READ_THE_GUIDELINES_BEFORE_YOU_POST: "Read the post guidelines to understand what this channel is for and create a better discussion!", FORUM_POST_GUIDELINES_TITLE: "Post Guidelines", CHANNEL_TOOLTIP_FORUM_NSFW: "Forum (Age-Restricted)", CHANNEL_TOOLTIP_FORUM_LIMITED: "Forum (Limited)", FORM_LABEL_CHANNEL_TEMPLATE: "Template", FORM_PLACEHOLDER_CHANNEL_TEMPLATE: "Help members make better posts with a simple starter template", FORUM_TAGS: "Tags", FORM_HELP_FORUM_TAGS: "Help people organize their posts into subcategories by creating a tag.", FORUM_TAG_CREATE: "Create Tag", FORUM_TAG_EDIT: "Edit Tag", FORUM_TAG_EDIT_ERROR: "Failed to save tag edit", FORUM_TAG_EDIT_LABEL: "{name}, edit tag", FORUM_TAG_EDIT_RESET_LABEL: "reset tag's emoji and name", FORUM_TAG_REMOVE: "Remove Tag", FORUM_TAG_REMOVE_ERROR: "Failed to remove tag", FORUM_TAG_CREATE_DESCRIPTION: "Create a tag to help people organize their posts into subcategories. Maximum 20 characters.", FORUM_TAG_CREATE_PLACEHOLDER: "Relationships, Advice, Art, Gear, Health, Recipes", FORUM_TAG_REMOVE_CONFIRM: "Are you sure you want to remove this tag?", FORUM_TAG_SEE_MORE: "See More", FORUM_TAG_SEE_MORE_A11Y_LABEL: "see more tags", FORUM_TAG_ALL: "All", FORUM_TAG_ALL_A11Y_LABEL: "see all tags", FORUM_DEFAULT_REACTION: "Default Reaction", FORUM_DEFAULT_REACTION_DESCRIPTION: "Pick a default emoji that your members will use to react to a post from this channel.", FORUM_MOBILE_TAG_CREATE: "+ Create a Tag", FORUM_MOBILE_TAG_PLACEHOLDER: "Cool Stuff", BOT_TAG_FORUM_ORIGINAL_POSTER: "OP", BOT_TAG_FORUM_ORIGINAL_POSTER_TOOLTIP: "Original Poster", FORUM_REACT_BUTTON: "Like", FORUM_FOLLOW_BUTTON: "Follow", FORUM_UNFOLLOW_BUTTON: "Following", FORUM_FOLLOW_BUTTON_A11Y_LABEL: "Follow the post", FORUM_UNFOLLOW_BUTTON_A11Y_LABEL: "Unfollow the post", FORUM_START_THE_CONVERSATION_HEADER: "Start the conversation!", FORUM_START_THE_CONVERSATION_DESCRIPTION: "Be the first to share what you think!", FORUM_TAG_POST_SEARCH_PLACEHOLDER: "Enter a tag...", FORUM_TAG_FILTER_SEARCH_PLACEHOLDER: "Enter a filter...", FORUM_TAG_POST_MAX_REACHED: "Max number of forum tags applied", FORUM_TAG_POST_EDIT: "Edit Tags", FORUM_TAG_POST_SELECT: "Select Tags", FORUM_REACTIONS_OVERFLOW: "+{count}", FORUM_REACT_TO_POST: "React to Post", FORUM_FOLLOWING_POST: "Following", FORUM_CHANNEL_ONBOARDING_SHOW: "Show Get Started list", FORUM_CHANNEL_ONBOARDING_HIDE: "Hide Get Started list", FORUM_CHANNEL_ONBOARDING_COMPLETED_COUNT: "({numCompleted} of {numSteps} Completed)", FORUM_CHANNEL_ONBOARDING_CHECKLIST_PERMISSION_TITLE: "Set recommended permissions", FORUM_CHANNEL_ONBOARDING_CHECKLIST_PERMISSION_DESCRIPTION: "Communities that let everyone post typically see more engagement.", FORUM_CHANNEL_ONBOARDING_CHECKLIST_GUIDELINES_TITLE: "Create post guidelines", FORUM_CHANNEL_ONBOARDING_CHECKLIST_GUIDELINES_DESCRIPTION: "Make rules for posters to follow.", FORUM_CHANNEL_ONBOARDING_CHECKLIST_TAGS_TITLE: "Create tags", FORUM_CHANNEL_ONBOARDING_CHECKLIST_TAGS_DESCRIPTION: "Help people organize their posts into subcategories and filter searches.", FORUM_CHANNEL_ONBOARDING_CHECKLIST_FIRST_POST_TITLE: "Make the first post!", FORUM_CHANNEL_ONBOARDING_CHECKLIST_FIRST_POST_DESCRIPTION: "Start the conversation and get things going. [See Examples](onClick)", FORUM_CHANNEL_ONBOARDING_CHECKLIST_DEFAULT_REACTION_TITLE: "Set a default reaction for posts", FORUM_CHANNEL_ONBOARDING_CHECKLIST_DEFAULT_REACTION_DESCRIPTION: "Choose the default emoji people will use to react to a post.", FORM_LABEL_CHANNEL_GUIDELINES: "Post Guidelines", FORUM_CHANNEL_ONBOARDING_PERMISSION_MODAL_TITLE: "Who can create a post?", FORUM_CHANNEL_ONBOARDING_PERMISSION_MODAL_ROLE_INPUT_PLACEHOLDER: "Enter @role...", FORUM_CHANNEL_ONBOARDING_PERMISSION_MODAL_LET_EVERYONE_POST: "Let @everyone post", FORUM_CHANNEL_ONBOARDING_PERMISSION_MODEL_DESCRIPTION: "Communities that **let all members post** have more success keeping their servers active and engaging members.", FORUM_CHANNEL_ONBOARDING_PERMISSION_MODEL_ERROR: "Failed to save permission change.", FORUM_CHANNEL_ONBOARDING_DEFAULT_REACTION_MODAL_TITLE: "Choose a default reaction", FORUM_CHANNEL_ONBOARDING_DEFAULT_REACTION_MODAL_DESCRIPTION: "Pick a default emoji that your members will use to react to a post from this channel.", FORUM_CHANNEL_ONBOARDING_DEFAULT_REACTION_MODAL_ERROR: "Failed to save default reaction", FORUM_CHANNEL_THREAD_CREATED_PUSH_TITLE_MOBILE: "{guildName} (#{channelName})", FORUM_CHANNEL_THREAD_CREATED_PUSH_BODY_MOBILE: "{channelName} - Posted by {userUsername}", FORUM_CHANNEL_THREAD_CREATED_PUSH_DESCRIPTION_MOBILE: "Forum Post Created", FORUM_POST_CREATE_CLOSE_ALERT_TITLE: "Save changes", FORUM_POST_CREATE_CLOSE_ALERT_BODY: "Do you want to save your changes as a draft?", FORUM_POST_CREATE_CLOSE_ALERT_SAVE: "Save as Draft", FORUM_POST_CREATE_CLOSE_ALERT_DISCARD: "Discard", FORUM_CHANNEL_ONBOARDING_VISIBILITY: "Only moderators can see this", FORUM_POST_CREATED_AT_TOOLTIP: "Posted {timestamp}", FORUM_POST_CREATED_AT_TOOLTIP_LABEL: "Post time", FORUM_DEFAULT_SORT_ORDER: "Sort Order", FORUM_DEFAULT_SORT_ORDER_DESCRIPTION: "Set the default sort order for new posts. Members will still be able to toggle between these options.", FORUM_CHANNEL_SORT_BY: "Sort by", FORUM_CHANNEL_SORT_BY_RECENTLY_ACTIVE: "Recently Active", FORUM_CHANNEL_SORT_BY_DATE_POSTED: "Date Posted", FORUM_CHANNEL_RESET_ALL: "Reset to default", FORUM_CHANNEL_CLEAR_ALL: "Clear all", FORUM_CHANNEL_SHOW_POSTS: "Show posts", FORUM_CHANNEL_VIEW_AS: "View as", FORUM_CHANNEL_VIEW_AS_LIST: "List", FORUM_CHANNEL_VIEW_AS_GRID: "Gallery", FORUM_CHANNEL_SORT_AND_VIEW: "Sort & View", FORUM_CHANNEL_SORT_AND_VIEW_A11Y_LABEL: "Change the sort and layout for Forum Posts", FORUM_CHANNEL_TAGS: "Tags", FORUM_CHANNEL_TAGS_REMAINING: "{count} remaining", FORUM_CHANNEL_SETTINGS_DEFAULT_LAYOUT: "Default Layout", FORUM_CHANNEL_SETTINGS_DEFAULT_LAYOUT_BEHAVIOR_DESCRIPTION: "All posts will be displayed by the specified option by default. Members will still be able to toggle between these options.", FORUM_CHANNEL_SETTINGS_DEFAULT_LAYOUT_DESCRIPTION: "Set the default layout view to a media-focused gallery or a text-focused list. Members will still be able to toggle between these options.", FORUM_CHANNEL_SETTINGS_DEFAULT_LAYOUT_DESCRIPTION_SEE_EXAMPLES: "Set the default layout view to a media-focused gallery or a text-focused list. Members will still be able to toggle between these options. [See Examples](onClick)", FORUM_CHANNEL_SETTINGS_DEFAULT_LAYOUT_EXAMPLE_POSTS: "Example posts", FORUM_CHANNEL_SETTINGS_LIST_VIEW: "List View", FORUM_CHANNEL_SETTINGS_GRID_VIEW: "Gallery View", FORUM_CHANNEL_SETTINGS_LIST: "List", FORUM_CHANNEL_SETTINGS_GRID: "Gallery", FORUM_CHANNEL_CREATE_DEFAULT_GRID_VIEW: "Default Gallery View", FORUM_CHANNEL_CREATE_LIST_VIEW: "List View", FORUM_CHANNEL_CREATE_GRID_VIEW: "Gallery View", FORUM_CHANNEL_SET_DEFAULT_LAYOUT: "Set the default layout", FORUM_FOLLOW_TOOLTIP: "Add this post to your channel list and receive notifications about it.", FORUM_FOLLOW_TOOLTIP_ARCHIVED: "Archived posts cannot be followed.", FORUM_POST_EMPTY_TITLE_ERROR: "A title is required", FORUM_POST_EMPTY_MESSAGE_ERROR: "A message is required", THREAD_AUTOMOD_ERROR: "This thread cannot be sent because it contains content blocked by this community. Please revise your post and try again.", FORUM_POST_AUTOMOD_ERROR: "This post cannot be sent because it contains content blocked by this community. Please revise your post and try again.", FORUM_POST_TITLE: "Post Title", FORUM_POST_AUTHOR_A11Y_LABEL: "{name}, post author", FORUM_TAGS_INFO: "Tags will be displayed in the order you select them", FORUM_ADD_MEDIA_TO_ORIGINAL_POST_TITLE: "Would you like to add media to the original post?", FORUM_ADD_MEDIA_TO_ORIGINAL_POST_DESCRIPTION: "We recommend doing this so that people can see your thumbnail while browsing the list view.", FORUM_ADD_MEDIA_TO_ORIGINAL_POST_ADD: "Add to Post", FORUM_ADD_MEDIA_TO_ORIGINAL_POST_DONT_ADD: "Don't Add", ARCHIVED_POST_REACTIONS_DISABLED_TOAST: "You cannot add or remove reactions in archived posts.", ARCHIVED_POST_FOLLOW_DISABLED_TOAST: "You cannot follow archived posts.", FORUM_POST_BLOCKED_FIRST_MESSAGE: "Post contains a blocked message", FORUM_POST_BLOCKED_MOST_RECENT_MESSAGE: "Message blocked", FORUM_REQUIRE_TAG: "Require tag", FORUM_REQUIRE_TAG_NOTE: "Require people to select tags when posting", FORUM_REQUIRE_TAG_NOTE_MOBILE: "Require Tags when posting", FORUM_POST_TAG_REQUIRED_ERROR: "A tag is required to create a post in this channel", FORUM_POST_NON_MODERATED_TAG_REQUIRED: "There are no tags available that can be set by non-moderators", FORUM_MODERATED_TAG_CHECKBOX: "Only allow moderators to apply tag", FORUM_SEARCH_MATCHING_POSTS: "{numPosts, plural, =1 {{numPosts} matching post} other {{numPosts} matching posts}}", FORUM_SEARCH_MATCHING_POSTS_ALT: '{numPosts, plural, =1 {{numPosts} post} other {{numPosts} posts}} with "{query}"', FORUM_SEARCH_NO_MATCHING_POSTS: "No matching posts", FORUM_SEARCHING: "Searching...", FORUM_SEARCH_PLACEHOLDER: "Search forum posts", FORUM_ENTER_TO_START_POST: "to create a new post", FORUM_CLEAR_ALL: "Clear all", FORUM_NO_POST_PERMISSION_HELP: "You do not have permission to post in this channel.", FORUM_CHANNEL_NAME_PLACEHOLDER: "forum-discussion", FORUM_CHANNEL_NAME_NOTE: "Setting a clear title and specific purpose on your forum helps your members engage more! $[See Examples](forumUpsellHook)", FORUM_CHANNEL_NAME_NOTE_MOBILE: "Setting a clear title and specific purpose on your forum helps your members engage more!", CHANNEL_PERMISSIONS_PRIVATE_CHANNEL_DESCRIPTION_NEW: "Only selected members and roles will be able to view this channel.", FORUM_CHANNEL_GRID_UPSELL_AUTO_TITLE: "You got Gallery View!", FORUM_CHANNEL_GRID_UPSELL_AUTO_DESCRIPTION: "Easily scroll through posts with photos and videos using gallery view! To reset your default view, go to channel settings.", FORUM_CHANNEL_GRID_UPSELL_AUTO_CANCEL: "Reset", FORUM_CHANNEL_GRID_UPSELL_AUTO_CONFIRM: "Sounds good!", FORUM_CHANNEL_GRID_UPSELL_MANUAL_TITLE: "Gallery View is here!", FORUM_CHANNEL_GRID_UPSELL_MANUAL_DESCRIPTION: "Easily scroll through posts with photos and videos using gallery view! Set this as the default view in the channel settings.", FORUM_CHANNEL_GRID_UPSELL_MANUAL_CANCEL: "Dismiss", FORUM_CHANNEL_GRID_UPSELL_MANUAL_CONFIRM: "Check it out", FORUM_COMPOSER_TO_CHANNEL: "to #{channelName}", FORUM_COMPOSER_TO_CHANNEL_A11Y_LABEL: "{nickname} to channel {channelName}", FORUM_CHANNEL_MOST_RECENT_MESSAGE_DELETED: "This message has been deleted.", FORUM_COMPOSER_AVATAR_A11Y_LABEL: "{nickname} Avatar", FORUM_UPSELL_MODAL_HEADER: "Forum Channels: a space for organized discussion", FORUM_UPSELL_MODAL_BODY: "An organized way for your members to start their own topics and have conversations that don’t get buried. Forums are great for discussion, advice, LFG, buy/sell listings, Q&A, feedback, and more. Check out our examples:", FORUM_UPSELL_DEMO_TAG_NAME_1: "\uD83C\uDFB8 Guitar Advice", FORUM_UPSELL_DEMO_TAG_NAME_2: "\uD83D\uDCDA Book Club", FORUM_UPSELL_DEMO_TAG_NAME_3: "\uD83C\uDFAE Game Discussion", FORUM_UPSELL_DEMO_ALT_TEXT: "Image of a sample forum channel", FORUM_UPSELL_DEMO_1_ALT_TEXT: "Mock-up of a Guitar Advice channel, with forum tags like Technique, Instrument Care, and Newbie.", FORUM_UPSELL_DEMO_2_ALT_TEXT: "Mock-up of a Book Club channel, with forum tags like Book Club, Recommendations, and Writers.", FORUM_UPSELL_DEMO_3_ALT_TEXT: "Mock-up of a Game Discussion channel, with forum tags like Events, Recommendations, and LFG.", FORUM_UPSELL_DEMO_1_TAG_NAME_1: "\uD83E\uDD14 Technique", FORUM_UPSELL_DEMO_1_TAG_NAME_2: "\uD83C\uDFB8 Instrument Care", FORUM_UPSELL_DEMO_1_TAG_NAME_3: "\uD83D\uDC4B Newbie", FORUM_UPSELL_DEMO_2_TAG_NAME_1: "\uD83D\uDCDA Book Club", FORUM_UPSELL_DEMO_2_TAG_NAME_2: "\uD83E\uDD14 Recommendations", FORUM_UPSELL_DEMO_2_TAG_NAME_3: "✏️ Writers", FORUM_UPSELL_DEMO_3_TAG_NAME_1: "\uD83D\uDCC6 Events", FORUM_UPSELL_DEMO_3_TAG_NAME_2: "\uD83E\uDD14 Recommendations", FORUM_UPSELL_DEMO_3_TAG_NAME_3: "\uD83C\uDFAE LFG", FORUM_UPSELL_DEMO_1_POST_TITLE_1: "Any acoustic guitar recommendations for a beginner?", FORUM_UPSELL_DEMO_1_POST_TITLE_2: "My strings broke! How do I know which brand my guitar uses?", FORUM_UPSELL_DEMO_1_POST_TITLE_3: "Advice for learning where different notes are on the fretboard?", FORUM_UPSELL_DEMO_1_POST_TITLE_4: "Help with learning guitar solo, can’t get 12th fret of b to sound right", FORUM_UPSELL_DEMO_2_POST_TITLE_1: "Weekly Book Club Meetings: Next Book Poll", FORUM_UPSELL_DEMO_2_POST_TITLE_2: "Looking for new Young Adult novel recs!", FORUM_UPSELL_DEMO_2_POST_TITLE_3: "Any book recommendations? Literally any genre", FORUM_UPSELL_DEMO_2_POST_TITLE_4: "Most underrated authors in the last decade?", FORUM_UPSELL_DEMO_3_POST_TITLE_1: "Rhythm game score posting!", FORUM_UPSELL_DEMO_3_POST_TITLE_2: "Game recs for couples? (something easy!)", FORUM_UPSELL_DEMO_3_POST_TITLE_3: "Hosting a charity gaming tournament!", FORUM_UPSELL_DEMO_3_POST_TITLE_4: "Hidden gems of VR games", FORUM_UPSELL_DEMO_1_MESSAGE_CONTENT_1: "I accidentally broke the thinnest “E” string on my acoustic guitar. How do I find the right replacement?", FORUM_UPSELL_DEMO_1_MESSAGE_CONTENT_2: "Quick answer: The brand of strings might be listed online if you search the specific guitar model!", FORUM_UPSELL_DEMO_1_MESSAGE_CONTENT_3: "don't think you can buy packs of just 1 string, but make sure to check if the rest of the strings still look good to you. if so, don't change it. the high E string is usually the first one to break!", FORUM_UPSELL_DEMO_2_MESSAGE_CONTENT_1: "I’ve been itching to read more books lately, but haven’t really found the motivation to start any books. I just miss the feeling of being completely absorbed in a book.", FORUM_UPSELL_DEMO_2_MESSAGE_CONTENT_2: "Are there any particular genres you don’t like?", FORUM_UPSELL_DEMO_2_MESSAGE_CONTENT_3: "You can find some books in our pinned post. They are all books for the upcoming book club meetings (yes we have book club and it’s super interesting - join us!!)", FORUM_UPSELL_DEMO_3_MESSAGE_CONTENT_1: "Hello gamers! Do you like to click circles and smash keys like me? Do you have some cool scores to post? Post some scores here!!", FORUM_UPSELL_DEMO_3_MESSAGE_CONTENT_2: "\uD83D\uDC40 gonna lurk here and see how pro this group is before i share mine", FORUM_UPSELL_DEMO_3_MESSAGE_CONTENT_3: "wait where's your score??", FORUM_HELPER_CARD_TITLE: "New to Forum Channels? Check out our guide!", FORUM_HELPER_CARD_BODY: "Learn how to make the best use of forums to create a more engaging community.", FORUM_HELPER_CARD_PRIMARY: "Read Guide", FORUM_HELPER_CARD_NOTICE: "Only moderators can see this", FORUM_HELPER_CARD_ALT_TEXT: "Forum Channel Icon", POGGERMODE: "Party Mode", POGGERMODE_ENABLE: "Enable Party Mode", POGGERMODE_ENABLE_DESCRIPTION: "Turn this on when you're ready to party.", POGGERMODE_WARNING_TITLE: "Before we get started...", POGGERMODE_WARNING_TITLE_REDUCED_MOTION: "Your Reduced Motion setting is on", POGGERMODE_WARNING_BODY: "There will be motion like confetti and screen shaking. You can disable Party Mode at any time or customize your experience below.", POGGERMODE_WARNING_BODY_REDUCED_MOTION: "We've disabled most of Party Mode to respect your settings. To fully enjoy the party, turn off Reduced Motion in User Settings.", POGGERMODE_LOCATIONS: "Locations", POGGERMODE_COMBOS_CUSTOMIZATION: "Combos", POGGERMODE_COMBOS_ENABLED: "Enable Combos", POGGERMODE_COMBOS_ENABLED_DESCRIPTION: "Show a combo indicator as you type.", POGGERMODE_COMBOS_REQUIRED: "Combo Score Requirement", POGGERMODE_COMBOS_REQUIRED_DESCRIPTION: "How high your combo score has to reach before the party starts.", POGGERMODE_COMBO_SOUNDS_ENABLED: "Enable Sounds", POGGERMODE_COMBO_SOUNDS_ENABLED_DESCRIPTION: "Hear the roar of the crowd as you type and your combo score increases.", POGGERMODE_SCREENSHAKE_CUSTOMIZATION: "Screenshake", POGGERMODE_SCREENSHAKE_ENABLED: "Enable Screenshake", POGGERMODE_SCREENSHAKE_ENABLED_DESCRIPTION: "Shakes your screen as your combo score increases.", POGGERMODE_SCREENSHAKE_DISABLED_REDUCED_MOTION: "To enable screenshake, turn off Reduced Motion in Accessibility settings.", POGGERMODE_SCREENSHAKE_LOCATION_CHAT_INPUT_ENABLED: "Chat Input", POGGERMODE_SCREENSHAKE_LOCATION_CHAT_INPUT_ENABLED_DESCRIPTION: "Your whole message bar will shake while you are typing.", POGGERMODE_SCREENSHAKE_LOCATION_VOICE_USER_ENABLED: "Voice Channels", POGGERMODE_SCREENSHAKE_LOCATION_VOICE_USER_ENABLED_DESCRIPTION: "When someone speaks, their video tile will shake.", POGGERMODE_SCREENSHAKE_LOCATION_MENTION_ENABLED: "Mentions", POGGERMODE_SCREENSHAKE_LOCATION_MENTION_ENABLED_DESCRIPTION: "Shakes your screen when someone mentions you.", POGGERMODE_SCREENSHAKE: "Intensity", POGGERMODE_SCREENSHAKE_DESCRIPTION: "How hard do you want your screen to shake?", POGGERMODE_SCREENSHAKE_MAX: "AAAAA", POGGERMODE_CONFETTI_CUSTOMIZATION: "Confetti", POGGERMODE_CONFETTI_ENABLED: "Enable Confetti", POGGERMODE_CONFETTI_ENABLED_DESCRIPTION: "You will now see confetti. Like, a lot.", POGGERMODE_CONFETTI_LOCATION_CHAT_INPUT_ENABLED: "Chat Input", POGGERMODE_CONFETTI_LOCATION_CHAT_INPUT_ENABLED_DESCRIPTION: "Appears in the chat input while you are typing.", POGGERMODE_CONFETTI_LOCATION_REACTION_ENABLED: "Message Reactions", POGGERMODE_CONFETTI_LOCATION_REACTION_ENABLED_DESCRIPTION: "Appears on a message when it receives a reaction.", POGGERMODE_CONFETTI_LOCATION_MEMBER_USER_ENABLED: "Member List", POGGERMODE_CONFETTI_LOCATION_MEMBER_USER_ENABLED_DESCRIPTION: "Appears when the member list is shown and someone else is typing.", POGGERMODE_CONFETTI_LOCATION_CALL_TILE_ENABLED: "Voice Tiles", POGGERMODE_CONFETTI_LOCATION_CALL_TILE_ENABLED_DESCRIPTION: "Appears when you click on a participant in a voice channel or call to focus on them.", POGGERMODE_CONFETTI_COUNT: "Quantity", POGGERMODE_CONFETTI_COUNT_DESCRIPTION: "How much confetti do you want to see?", POGGERMODE_CONFETTI_SIZE: "Size", POGGERMODE_CONFETTI_SIZE_DESCRIPTION: "Size", POGGERMODE_ACHIEVEMENTS: "Achievements", POGGERMODE_COMBO_BAR: "Combo Gauge", POGGERMODE_COMBO: "COMBO x{multiplier, number}", POGGERMODE_COMBO_TIP: "[enter] to Combo!", POGGERMODE_SETTINGS_CUSTOMIZATION: "Hide Party Mode", POGGERMODE_HIDE_SETTINGS_DESCRIPTION: "Turn off and hide Party Mode. You can always turn it back on the same way you originally did.", POGGERMODE_HIDE_SETTINGS: "Hide Party Mode", POGGERMODE_TEMPORARILY_DISABLED_TOAST_TITLE: "Thanks for partying with us!", POGGERMODE_TEMPORARILY_DISABLED_TOAST_BODY: "Our 7th birthday celebration is over for now, but we hope you enjoyed your time using Party Mode while we had it available! Loved it? Let us know on Twitter, TikTok, Instagram, or whichever platform you prefer!", POGGERMODE_ACHIEVEMENT_TITLE: "Achievements", POGGERMODE_ACHIEVEMENT_DESCRIPTION: "Reach the greatest of heights, and brag to your friends!", POGGERMODE_ACHIEVEMENT_ENABLE_POGGERMODE_NAME: "Is this thing on?", POGGERMODE_ACHIEVEMENT_ENABLE_POGGERMODE_DESCRIPTION: "Enable Party Mode", POGGERMODE_ACHIEVEMENT_DISABLE_POGGERMODE_NAME: "The IT solution", POGGERMODE_ACHIEVEMENT_DISABLE_POGGERMODE_DESCRIPTION: "Disable Party Mode", POGGERMODE_ACHIEVEMENT_PING_SOMEONE_NAME: "Is it me you're looking for?", POGGERMODE_ACHIEVEMENT_PING_SOMEONE_DESCRIPTION: "@mention someone", POGGERMODE_ACHIEVEMENT_PING_ME_NAME: "*Discord notification sound*", POGGERMODE_ACHIEVEMENT_PING_ME_DESCRIPTION: "Get @mentioned", POGGERMODE_ACHIEVEMENT_VISITOR_100_NAME: "Click for your free prize!", POGGERMODE_ACHIEVEMENT_VISITOR_100_DESCRIPTION: "Congrats, 100th visitor!", POGGERMODE_ACHIEVEMENT_CUSTOMIZE_CONFETTI_NAME: "Stuck in character creation", POGGERMODE_ACHIEVEMENT_CUSTOMIZE_CONFETTI_DESCRIPTION: "Customize confetti", POGGERMODE_ACHIEVEMENT_MORE_NAME: "More!!", POGGERMODE_ACHIEVEMENT_MORE_DESCRIPTION: "Increase shake intensity", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_1_NAME: "Prepare for trouble", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_1_DESCRIPTION: "Combo multiplier (x2)", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_2_NAME: "And Make It Double", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_2_DESCRIPTION: "Combo multiplier (x4)", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_3_NAME: "A Puebla party", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_3_DESCRIPTION: "Combo multiplier (x5)", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_4_NAME: "Happy Birthday!!", POGGERMODE_ACHIEVEMENT_COMBO_MULTI_LEVEL_4_DESCRIPTION: "Combo multiplier (x7)", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_1_NAME: "Two birds, one stone", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_1_DESCRIPTION: "Remember 430", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_2_NAME: "Klondike's cell", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_2_DESCRIPTION: "Total score (555)", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_3_NAME: "Gonna be the very best", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_3_DESCRIPTION: "Catch them if you can", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_4_NAME: "Be elite", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_4_DESCRIPTION: "Total Score (1337)", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_5_NAME: "A Slide Puzzle", POGGERMODE_ACHIEVEMENT_TOTAL_SCORE_LEVEL_5_DESCRIPTION: "True Math Fan", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_1_NAME: "Will you still need me?", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_1_DESCRIPTION: "When I'm 64", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_2_NAME: "Travel through time", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_2_DESCRIPTION: "88 miles per hour", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_3_NAME: "80's pop", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_3_DESCRIPTION: "Total score (99)", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_4_NAME: "Animation fan", POGGERMODE_ACHIEVEMENT_COMBO_VALUE_LEVEL_4_DESCRIPTION: "Total score (113)", POGGERMODE_ACHIEVEMENT_LOCKED_TITLE: "Locked Achievements", PREMIUM_UPSELL_GET_NITRO: "Get Nitro", FORM_LABEL_HIGHLIGHTS: "Include Highlights", FORM_LABEL_HIGHLIGHTS_NOTE: "Receive notifications for noteworthy content like messages, friend activity, events, and more.", FORM_LABEL_SUPPRESS_HIGHLIGHTS: "Suppress Highlights", FORM_LABEL_SUPPRESS_HIGHLIGHTS_NOTE: "Suppress notifications for noteworthy content like messages, friend activity, events, and more.", HIGHLIGHTS_LEARN_MORE: "Learn more about Highlights", HIGHLIGHTS_SERVER_TOO_LARGE: "Due to the server's size, you may not receive highlights.", HIGHLIGHTS_NOTE_SUBTEXT: "Highlights provide occasional updates when your friends are chatting in busy servers, and more.", GUILD_HIGHLIGHTS_NOTIFICATIONS_CATEGORY: "Highlights", NOTIFICATION_BODY_DISCORD_HIDDEN: "Discord is still running, click to change settings", CHAT_DISABLED_CHANNEL_LIST: "Done reading? Check out other channels.", CHAT_DISABLED_CHANNEL_LINK: "Done reading? Check out #{channelName}.", CHAT_DISABLED_HOME_BACK: "Done reading? Hop back to Home.", CHAT_DISABLED_CTA: "Explore", GUILD_AUTOMOD_ADD_SELECTION: "Filter ({keywordCount, plural, =1 {# Word} other {# Words}})", GUILD_AUTOMOD_ADD_NEW_RULE: "Create New AutoMod Rule", GUILD_SETTINGS_AUTOMOD_TITLE: "AutoMod", GUILD_SETTINGS_AUTOMOD_DESCRIPTION: "Set up rules for moderation in your server to automatically filter content and post alerts to keep your server safe around the clock. Users with Admin permissions will be ignored from AutoMod rules.", GUILD_SETTINGS_AUTOMOD_MESSAGE_FILTER_TITLE: "Content Moderation", GUILD_SETTINGS_AUTOMOD_MESSAGE_FILTER_DESCRIPTION_HEADER: "Moderate Words and Phrases", GUILD_SETTINGS_AUTOMOD_MESSAGE_FILTER_DESCRIPTION: "Give your mods a break while keeping your server safe! Set up filters to moderate content and automate a custom response when they’re found, and AutoMod will make it happen.", GUILD_SETTINGS_AUTOMOD_MEMBER_CATEGORY_TITLE: "Members", GUILD_SETTINGS_AUTOMOD_CONTENT_CATEGORY_TITLE: "Content", GUILD_AUTOMOD_RULE_SETUP_BUTTON: "Set Up", GUILD_AUTOMOD_ML_SPAM_FILTER_NAME: "Block Suspected Spam Content", GUILD_AUTOMOD_ML_SPAM_FILTER_DESCRIPTION: "Monitor messages, Forum posts, and threads for potentially spammy content or activity. (Support for English only)", GUILD_AUTOMOD_LINK_FILTER_MATCHING_STRATEGY_DESCRIPTION: "Use the ** * ** character at the beginning or end of your keyword for partial matches within a word.", GUILD_AUTOMOD_KEYWORD_FILTER_NAME: "Block Custom Words", GUILD_AUTOMOD_KEYWORD_FILTER_DESCRIPTION: "Create your own filter to block specific language from your server.", GUILD_AUTOMOD_KEYWORD_FILTER_TRIGGER_HEADER: "Choose your words", GUILD_AUTOMOD_ML_SPAM_FILTER_TRIGGER_HEADER: "If message is suspected of being spam...", GUILD_AUTOMOD_ACTIONS_HEADER: "Choose a response", GUILD_AUTOMOD_EVENT_TYPE_MESSAGE_SEND: "Message Send", GUILD_AUTOMOD_EVENT_TYPE_GUILD_MEMBER_JOIN_OR_UPDATE: "Member join or update", GUILD_AUTOMOD_MENTION_SPAM_FILTER_NAME: "Block Mention Spam", GUILD_AUTOMOD_MENTION_SPAM_FILTER_DESCRIPTION: "Block messages with an excessive # of role and user mentions", GUILD_AUTOMOD_MENTION_SPAM_FILTER_TRIGGER_HEADER: "Configure limits", GUILD_AUTOMOD_MENTION_SPAM_FILTER_TRIGGER_DESCRIPTION: "Unique mentions (role + user) per message", GUILD_AUTOMOD_MENTION_SPAM_FILTER_TRIGGER_DESCRIPTION_HINT: "Limit the number of unique mentions in each message.", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_NAME: "Block message", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_DESCRIPTION: "Block messages containing these words from being posted.", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_DESCRIPTION_MENTION_SPAM: "Block messages with an excessive # of unique mentions.", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_DESCRIPTION_ML_SPAM: "Block messages with spam-like content from being posted.", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_DESCRIPTION_SPAM_LINK: "Block messages with suspicious links from being posted.", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_NAME: "Send alert", GUILD_AUTOMOD_ACTIONS_USER_COMMUNICATION_DISABLED: "Timeout user", GUILD_AUTOMOD_ACTIONS_QUARANTINE_USER: "Quarantine user", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_DESCRIPTION: "Sends an alert containing the flagged message to a chosen channel.", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_MODAL_ERROR_NO_CHANNEL: "Please select a channel.", GUILD_AUTOMOD_ACTIONS_DISABLE_GUILD_COMMUNICATION_FOR_USER: "Timeout member", GUILD_AUTOMOD_ACTIONS_DISABLE_GUILD_COMMUNICATION_FOR_USER_DESCRIPTION: "Temporarily disables a member's ability to send messages or join voice channels.", GUILD_AUTOMOD_ACTIONS_USER_DISABLE_COMMUNICATION_DISPLAY_HELPER: "**({duration})**", GUILD_AUTOMOD_DISABLE_GUILD_COMMUNICATION_MODAL_DESCRIPTION: "Choose how long you want to timeout a member if they break this rule. Members in timeout are temporarily not allowed to chat, react in text channels, or connect to voice or Stage channels.", GUILD_AUTOMOD_DISABLE_GUILD_COMMUNICATION_PLACEHOLDER: "Choose duration", GUILD_AUTOMOD_ACTIONS_TIMEOUT_EDIT_HELPER: "Members who use blocked words will be timed out for: **{friendlyDurationString}**", GUILD_AUTOMOD_ACTIONS_TIMEOUT_EDIT_HELPER_MENTION_SPAM: "Members who exceed your set mention limit will be timed out for: **{friendlyDurationString}**", GUILD_AUTOMOD_ACTIONS_TIMEOUT_UPDATE_DURATION: "Edit Duration", GUILD_AUTOMOD_ADD_ADDITIONAL_RULE: "Create {ruleName}", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_MODAL_DESCRIPTION: "Choose a channel to post the alert message to. The alert will contain the flagged message contents, author, and channel it was originally posted to.", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_EDIT_HELPER: "Alert message will be sent to **(#!!{channelName}!!)**.", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_DISPLAY_HELPER: "**(#!!{channelName}!!)**", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_MODAL_CHANNEL_HELPER: "Anyone with access to this text channel will see the alert.", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_MODAL_SUBMIT: "Add Alert", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_MODAL_EDIT: "Edit", GUILD_AUTOMOD_ACTIONS_FLAG_TO_CHANNEL_MODAL_CHANNEL_PLACEHOLDER: "Select a text channel", GUILD_AUTOMOD_KEYWORD_FILTER_EMPTY: "No keywords have been added.", GUILD_AUTOMOD_BLOCKED_MESSAGE_EDIT_POSTFIX: "reverted", GUILD_AUTOMOD_BLOCKED_MESSAGE_SEND_NOTICE: "This message can't be posted because it contains content blocked by this community. The message may also be viewed by the community owners.", GUILD_AUTOMOD_BLOCKED_MESSAGE_EDIT_NOTICE: "This message can't be edited because it contains content blocked by this community. The message may also be viewed by the community owners.", GUILD_AUTOMOD_BLOCKED_MESSAGE_LEARN_MORE: "• [Learn more]({helpUrl})", GUILD_AUTOMOD_LEARN_MORE_LINK: "[Learn More]({helpUrl})", GUILD_AUTOMOD_KEYWORD_ENTRY_HINT: "Separate words or phrases with a comma (dog, cat, tiger) or new line. For each word, use * at the beginning, end, or both for partial matching.", GUILD_AUTOMOD_KEYWORD_ERROR_NO_KEYWORDS: "Please enter at least one keyword.", GUILD_AUTOMOD_KEYWORD_ERROR_NO_KEYWORDS_OR_REGEX: "Please enter at least one keyword or one regex pattern.", GUILD_AUTOMOD_KEYWORD_ERROR_TOO_MANY_KEYWORDS: "Please enter no more than {limit} keywords.", GUILD_AUTOMOD_KEYWORD_ERROR_TOO_MANY_REGEX: "Please enter no more than {limit} regex patterns.", GUILD_AUTOMOD_KEYWORD_ERROR_INVALID_KEYWORD_LENGTH: "{keyword} has an invalid length. Keywords must be between {min} and {max} characters.", GUILD_AUTOMOD_REGEX_ERROR_INVALID_REGEX_LENGTH: "{regex} has an invalid length. Regex patterns must be between {min} and {max} characters.", GUILD_AUTOMOD_KEYWORD_GENERIC_SAVE_ERROR: "Please change any keywords that have errors and try again.", GUILD_AUTOMOD_REGEX_GENERIC_SAVE_ERROR: "Please change any regexes that have errors and try again.", GUILD_AUTOMOD_ERROR_NO_ACTIONS: "Please add at least one action to this rule.", GUILD_AUTOMOD_KEYWORDS_PLACEHOLDER: "Enter 1 or more words or phrases", GUILD_AUTOMOD_KEYWORDS_EXPAND: "{count} words", GUILD_SETTINGS_AUDIT_LOG_AUTO_MODERATION_BLOCK_MESSAGE: "AutoMod blocked a message sent by $[**!!{target}!!**](targetHook) in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_AUTO_MODERATION_TRIGGERED_RULE_NAME_CHANGE: "Detected by rule **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTO_MODERATION_FLAG_TO_CHANNEL_MESSAGE: "AutoMod flagged a message sent by $[**!!{target}!!**](targetHook) in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_AUDIT_LOG_AUTO_MODERATION_USER_COMMUNICATION_DISABLED_MESSAGE: "AutoMod timed out $[**!!{target}!!**](targetHook) for a message posted in $[**!!{channel}!!**](channelHook)", GUILD_SETTINGS_ACTION_FILTER_AUTO_MODERATION_BLOCK_MESSAGE: "AutoMod Block Message", GUILD_SETTINGS_ACTION_FILTER_AUTO_MODERATION_FLAG_TO_CHANNEL: "AutoMod Flagged", GUILD_SETTINGS_ACTION_FILTER_AUTO_MODERATION_TIMEOUT: "AutoMod Timeout", GUILD_SETTINGS_ACTION_FILTER_AUTO_MODERATION_QUARANTINE: "AutoMod Quarantine", GUILD_AUTOMOD_LAUNCH_MODAL_HEADER_ACTION_APP_BLOCKED: "has blocked **!!{applicationName}!!**'s modal from being shown to $[](interactionUserHook). The interaction with **!!{applicationName}!!** was started by $[](integrationOwnerHook).", GUILD_AUTOMOD_LAUNCH_MODAL_HEADER_ACTION_APP_FLAGGED: "has flagged **!!{applicationName}!!**'s modal, shown to $[](interactionUserHook). The interaction with **!!{applicationName}!!** was started by $[](integrationOwnerHook).", GUILD_AUTOMOD_POST_TO_CHANNEL_RULE_NAME: "Rule: {ruleName}", GUILD_AUTOMOD_POST_TO_CHANNEL_KEYWORD: "Keyword: {keyword}", GUILD_AUTOMOD_POST_TO_CHANNEL_TIMEOUT_DURATION: "Timeout: {duration}", GUILD_AUTOMOD_POST_TO_CHANNEL_CHANNEL_NAME: "Channel: $[**!!{channelName}!!**](channelHook)", GUILD_AUTOMOD_POST_TO_CHANNEL_REASON: "Reason: {reason}", GUILD_AUTOMOD_POST_TO_CHANNEL_REASON_NICKNAME: "Nickname", GUILD_AUTOMOD_POST_TO_CHANNEL_REASON_USERNAME: "Username", GUILD_AUTOMOD_POST_TO_CHANNEL_REASON_GLOBAL_NAME: "Display Name", GUILD_AUTOMOD_POST_TO_CHANNEL_REASON_CLAN_TAG: "Tag", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_BLOCKED: "has blocked a message", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_FLAGGED: "has flagged a message", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_BLOCKED_MOBILE: "blocked a message", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_FLAGGED_MOBILE: "flagged a message", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_BLOCKED_HOOK: "has blocked a message in $[**!!{channelName}!!**](channelHook)", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_FLAGGED_HOOK: "has flagged a message in $[**!!{channelName}!!**](channelHook)", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_APP_BLOCKED_HOOK: "has blocked **!!{applicationName}!!**'s message in $[**!!{channelName}!!**](channelHook), sent by $[](integrationOwnerHook)", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_APP_FLAGGED_HOOK: "has flagged **!!{applicationName}!!**'s message in $[**!!{channelName}!!**](channelHook), sent by $[](integrationOwnerHook)", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_BLOCKED_VOICE_CHANNEL_STATUS_HOOK: "has blocked a voice channel status for $[**!!{channelName}!!**](channelHook)", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_ACTION_FLAGGED_VOICE_CHANNEL_STATUS_HOOK: "has flagged a voice channel status for $[**!!{channelName}!!**](channelHook)", GUILD_AUTOMOD_USERNAME: "AutoMod", GUILD_AUTOMOD_USER_BADGE_TEXT: "SYSTEM", GUILD_AUTOMOD_INPUT_FILTER_NAME: "Rule Name", GUILD_AUTOMOD_INPUT_FILTER_NAME_PLACEHOLDER: "Enter a rule name", GUILD_AUTOMOD_EXEMPTION_SEARCH_PLACEHOLDER: "Search channels or roles", GUILD_AUTOMOD_EXEMPTION_SEARCH_CHANNEL_PLACEHOLDER: "Enter channels...", GUILD_AUTOMOD_EXEMPTION_SEARCH_ROLE_PLACEHOLDER: "Enter roles...", GUILD_AUTOMOD_EXEMPTION_HEADER: "Allow certain roles or channels (optional)", GUILD_AUTOMOD_ROLES_EXEMPTION_HEADER: "Allow certain roles (optional)", GUILD_AUTOMOD_EXEMPTION_HINT: "Pssst — members with Admin and Manage Server permissions are always excluded from filter rules.", GUILD_AUTOMOD_EXEMPT_CHANNELS_EDIT_BUTTON: "Edit Channels", GUILD_AUTOMOD_EXEMPT_ROLES_EDIT_BUTTON: "Edit Roles", GUILD_AUTOMOD_WARNING_UNSAVED_CHANGES_TITLE: "Unsaved Changes", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_FILTER_NAME: "Block Commonly Flagged Words", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_DESCRIPTION_TEXT: "Flag messages that contain profanity and more. (Support for English only)", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_DESCRIPTION_TEXT_URL: "Screen messages that contain profanity and more. [Learn More]({helpUrl})", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_TRIGGER_DESCRIPTION: "Select the type of language", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_PROFANITY_HEADER: "Severe Profanity", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_PROFANITY_SUBTITLE: "Extreme forms of swearing or cursing", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_SEXUAL_CONTENT_HEADER: "Sexual Content", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_SEXUAL_CONTENT_SUBTITLE: "Terms that refer to sexually explicit behavior or activity", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_SLURS_HEADER: "Insults & Slurs", GUILD_AUTOMOD_DEFAULT_KEYWORD_LIST_SLURS_SUBTITLE: "Personally insulting terms and terms that may be considered hate speech", GUILD_AUTOMOD_WARNING_UNSAVED_CHANGES_DESCRIPTION: 'You have unsaved changes to the "{ruleName}" AutoMod rule. Are you sure you want to stop editing without saving?', GUILD_AUTOMOD_ACTIONS_MODERATE_USER: "Moderate !!{nick}!!", GUILD_AUTOMOD_REPORT_FEEDBACK_MODAL_TITLE: "Did we get it wrong?", GUILD_AUTOMOD_REPORT_FEEDBACK_MODAL_SUBTITLE: "Let us know if this message shouldn’t have been caught so we can improve AutoMod for the future. By doing this, you are also sending the flagged message to Discord.", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_MODAL_SUBTITLE: "Let us know if this alert was a false positive (i.e. there wasn't a raid) so we can improve our thresholds.", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_LEGITIMATE_ACCOUNTS: "A bunch of legitimate accounts joined at the same time", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_LEGITIMATE_DMS: "A bunch of legitimate DMs were sent at the same time", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_OTHER: "Other", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_MODAL_OTHER_REASON_PLACEHOLDER: "Tell us what happened", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_SUBMIT_BUTTON: "Not A Raid", GUILD_AUTOMOD_REPORT_FEEDBACK_MODAL_BUG_REASON: "I think this is a bug.", GUILD_AUTOMOD_REPORT_FEEDBACK_MODAL_ALLOWED_REASON: "This message is allowed in my community.", GUILD_AUTOMOD_SUBMIT_ISSUE: "Submit Issue", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_CONFIRM_TITLE: "Thanks!", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_CONFIRM_SUBTITLE: "We use this information to deliver relevant alerts to you.", GUILD_AUTOMOD_REPORT_RAID_FEEDBACK_CONFIRM_CTA: "Okay!", ROLE: "Role", GUILD_AUTOMOD_REMOVE_RULE_CONFIRM_TITLE: "Remove Rule", GUILD_AUTOMOD_REMOVE_RULE_CONFIRM_DESCRIPTION: 'Are you sure you want to remove the "{ruleName}" AutoMod rule?', GUILD_AUTOMOD_ADD_KEYWORD_TO_RULE_CONFIRM_TITLE: "Add Keyword To Rule", GUILD_AUTOMOD_ADD_KEYWORD_TO_RULE_CONFIRM_DESCRIPTION: "Are you sure you want to add **{keyword}** to **{ruleName}** AutoMod rule?", GUILD_AUTOMOD_REPORT_ISSUES: "Report Issues", GUILD_AUTOMOD_VISIBILITY_MESSAGE: "Only you can see this • [Dismiss message](onClick)", GUILD_AUTOMOD_VIEW_HELP_ARTICLE: "View Blocked Message Help Article", GUILD_AUTOMOD_VISIBILITY_ICON_DESCRIPTION: "Eye icon to depict visibility", GUILD_AUTOMOD_ERROR_BAR: "Red bar indicating an error sending the message due to AutoMod", GUILD_AUTOMOD_SYSTEM_MESSAGE_TEXT: "[AutoMod](autoModHook) [System](systemHook) has blocked a message.", GUILD_AUTOMOD_SYSTEM_MESSAGE_TEXT_FLAGGED: "[AutoMod](autoModHook) [System](systemHook) has flagged a message.", GUILD_AUTOMOD_CHANNEL_RULE_SUBTEXT: "[{channelName}](channelHook) • Rule: {ruleName}", GUILD_AUTOMOD_KEYWORD_FILTER_HEADER_WORD_COUNT: "({keywordCount, plural, =1 {# word} other {# words}})", GUILD_AUTOMOD_ANDROID_BACKGROUND_CONTENT_DESCRIPTION: "Dark gray background outlining all the contents of a message flagged by AutoMod", GUILD_AUTOMOD_MODERATOR_REPORT_BUTTON: "Report", GUILD_AUTOMOD_SEPARATOR: "•", GUILD_AUTOMOD_SHIELD_CONTENT_DESCRIPTION: "Blue shield icon to denote security", GUILD_AUTOMOD_SYSTEM_MESSAGE_AVATAR_CONTENT_DESCRIPTION: "A smiling robot is sweeping up dust", GUILD_AUTOMOD_EDIT_RULE: "Edit Rule", GUILD_AUTOMOD_DELETE_RULE: "Delete Rule", GUILD_AUTOMOD_RULE_CONTEXT_MENU: "Rule Context Menu", GUILD_AUTOMOD_NEW_RULE_ERROR: "Encountered an issue while generating a new rule", GUILD_AUTOMOD_EDIT_NO_CHANGES: 'Currently Editing "{ruleName}" Rule', GUILD_AUTOMOD_EDIT_NO_CHANGES_BUTTON_CANCEL: "Cancel", GUILD_AUTOMOD_UPSELL_HEADER: "Block words and phrases", GUILD_AUTOMOD_UPSELL_CONTENT: "Keep your server safe by setting up rules that block messages before they are sent. Check out **Server Settings > Content Moderation.**", GUILD_AUTOMOD_UPSELL_ASSET_HEADER: "AutoMod", GUILD_AUTOMOD_UPSELL_CTA: "Set Up", GUILD_AUTOMOD_UPSELL_DISMISSAL: "Got it", GUILD_AUTOMOD_UNKNOWN: "Unknown", GUILD_AUTOMOD_ERROR_MESSAGE_NOT_MEMBER: "User is no longer a member of this server.", GUILD_AUTOMOD_MISSING_TIMEOUT_PERMISSIONS: "**Timeout Members** permission is required to configure this action.", GUILD_AUTOMOD_ALLOW_LIST_TITLE: "Allow words and phrases (optional)", GUILD_AUTOMOD_ALLOW_LIST_SUBTITLE: "Add words or phrases members are allowed to use, separated by a comma (cat, happy puppy, *cookie*)", GUILD_AUTOMOD_REGEX_TEXTAREA_TITLE: "Use regex patterns for advanced matching (optional)", GUILD_AUTOMOD_REGEX_TEXTAREA_SUBTITLE: "Separate patterns with a new line. Visit our [Help Center article]({articleUrl}) for more info", GUILD_AUTOMOD_KEYWORD_FILTER_HEADER_WORD_AND_REGEX_COUNT: "({keywordCount, plural, =1 {# word} other {# words}}, {regexPatternCount, plural, =1 {# regex} other {# regexes}})", GUILD_AUTOMOD_REGEX_SUBTEXT: "Use a new line for each regex pattern. Case-insensitive and global flags are applied by default (and other flags are not supported). Visit our [Help Center]({helpArticle}) for more info.", GUILD_AUTOMOD_REGEX_ERROR_HELP: "There are issues with your regex input. Please correct the highlighted errors above. [Need Help?]({helpArticle})", GUILD_AUTOMOD_REGEX_ERROR_SUMMARY_SINGLE: "There was an issue with your regex: {error}", GUILD_AUTOMOD_REGEX_ERROR_SUMMARY_MULTIPLE: "There were issues with your regexes: {error}, and", GUILD_AUTOMOD_REGEX_ERROR_SUMMARY_OTHER_ERRORS: "{otherErrorCount, plural, =1 {# other error} other {# other errors}}", GUILD_AUTOMOD_DEFAULT_UPSELL_ASSET_HEADER: "AutoMod", GUILD_AUTOMOD_DEFAULT_UPSELL_CTA: "Set up", GUILD_AUTOMOD_DEFAULT_UPSELL_DISMISSAL: "Got it", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_MODAL_TITLE: "Edit Custom Message", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_MODAL_DESCRIPTION: "Your custom message will be shown when AutoMod blocks a member's message. This is a chance to help members understand your server's guidelines!", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_MODAL_CUSTOM_MESSAGE_PLACEHOLDER: "Enter your custom message", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_CUSTOM_MESSAGE_HELPER: "A custom error message can be shown to members.", GUILD_AUTOMOD_ACTIONS_BLOCK_MESSAGE_CUSTOM_MESSAGE_CTA: "Edit Custom Message", GUILD_AUTOMOD_CUSTOM_BLOCK_MESSAGE_UPSELL_HEADER: "Custom Messages from AutoMod", GUILD_AUTOMOD_CUSTOM_BLOCK_MESSAGE_UPSELL_CONTENT: "Add a note to educate members whenever AutoMod blocks their message in **AutoMod ➜ Block Message ➜ Edit**", GUILD_AUTOMOD_SERVER_POLICY_FILTER_NAME: "Enforce Server Rules (AI)", GUILD_AUTOMOD_SERVER_POLICY_FILTER_DESCRIPTION: "Flag messages that may break server rules using OpenAI technology.", GUILD_AUTOMOD_SERVER_POLICY_FILTER_TRIGGER_HEADER: "Define your server rules", GUILD_AUTOMOD_SERVER_POLICY_FILTER_TRIGGER_SUBHEADER: "AutoMod uses rules from [Rules Screening](onClick)", GUILD_AUTOMOD_SERVER_POLICY_FILTER_TRIGGER_SUBHEADER_WITH_CHANNEL: "AutoMod uses rules from [Rules Screening](onClick) and what is posted in your community rules channel $[**!!{channelName}!!**](channelHook)", GUILD_AUTOMOD_ALERT_ACTION_ICON_TOOLTIP_DELETE_MESSAGE: "{userName} deleted message {timestamp}", GUILD_AUTOMOD_ALERT_ACTION_ICON_TOOLTIP_SET_COMPLETED: "{userName} marked complete {timestamp}", GUILD_AUTOMOD_ALERT_ACTION_ICON_TOOLTIP_SUBMIT_FEEDBACK: "{userName} reported issues {timestamp}", GUILD_AUTOMOD_ALERT_DELETE_MEMBERS_MESSAGE: "Delete User's Message", GUILD_AUTOMOD_ALERT_SET_COMPLETED: "Mark Alert Completed", GUILD_AUTOMOD_ALERT_UNSET_COMPLETED: "Mark Alert Not Completed", GUILD_AUTOMOD_MENTION_SPAM_FILTER_RAID_DESCRIPTION: "Enable mention raid detection", GUILD_AUTOMOD_MENTION_SPAM_FILTER_RAID_DESCRIPTION_HINT: "Allow automatic detection of mention raids in the server.", GUILD_AUTOMOD_MENTION_SPAM_NOTICE_MESSAGE: "We're restricting some messages due to a potential mention raid", GUILD_AUTOMOD_MENTION_SPAM_NOTICE_CONFIGURE_SETTINGS: "Configure Settings", GUILD_AUTOMOD_MENTION_SPAM_NOTICE_REMOVE_RESTRICTION: "Remove Restrictions", GUILD_AUTOMOD_REMOVE_MENTION_RAID_MODAL_TITLE: "Remove Mention Raid Restrictions", GUILD_AUTOMOD_REMOVE_MENTION_RAID_MODAL_BODY: "Are you sure you want to remove all message restrictions that were placed on this server due to a suspected mention raid?", GUILD_AUTOMOD_NOTFICATION_ALERT_TITLE: "safety alert!", GUILD_AUTOMOD_NOTFICATION_UNSUPPORTED_TITLE: "Unsupported Message", GUILD_AUTOMOD_NOTFICATION_UNSUPPORTED_DESCRIPTION: "Your Discord client doesn’t support this message type. Please update it to see this message.", GUILD_AUTOMOD_NOTIFICATION_ACTIVITY_ALERTS_ENABLED_TITLE: "Activity Alerts Enabled", GUILD_AUTOMOD_NOTIFICATION_ACTIVITY_ALERTS_ENABLED_DESCRIPTION: "New and improved Activity Alerts are monitoring your server safety. AutoMod will send a message here if there is any DM or join activity that exceed what is normal for your server.", GUILD_AUTOMOD_NOTIFICATION_ACTIVITY_ALERTS_ENABLED_BY_PREFIX: "Enabled by", GUILD_AUTOMOD_NOTIFICATION_RAID_JOINS: "~{joinCount, number} Joins Actioned", GUILD_AUTOMOD_NOTIFICATION_RAID_TITLE: "Unusual Join Activity Detected", GUILD_AUTOMOD_NOTIFICATION_DM_RAID_TITLE: "Unusual DM Activity Detected", GUILD_AUTOMOD_NOTIFICATION_RAID_ACTION_DESCRIPTION: "Activity began on {dateTime}. Discord is serving CAPTCHA to all joiners and blocks suspicious joins and DMs. Enable security actions and review members, if needed.", GUILD_AUTOMOD_NOTIFICATION_RAID_DESCRIPTION: "Server is temporarily in raid protection mode, which will CAPTCHA and block suspicious joins.", GUILD_AUTOMOD_NOTIFICATION_RAID_FALSE_ALARM: "Report False Alarm", GUILD_AUTOMOD_NOTIFICATION_RAID_DMS: "~{dmsSent, number} DMs Detected", GUILD_AUTOMOD_NOTIFICATION_MARK_AS_RESOLVED: "Mark as resolved", GUILD_AUTOMOD_NOTIFICATION_MENTION_RAID_TITLE: "Unusual Mention Activity Detected", GUILD_AUTOMOD_NOTIFICATION_MENTION_RAID_DESCRIPTION: "We're restricting some messages due to a potential mention raid.", GUILD_AUTOMOD_NOTFICATION_APP_INTERACTION_BLOCKED_TITLE: "App Action Blocked", GUILD_AUTOMOD_NOTFICATION_APP_INTERACTION_BLOCKED_DESCRIPTION: "The application's response contained content blocked by this server.", MEMBER_SAFETY_CHANNEL_TITLE: "Members", MEMBER_SAFETY_TABLE_TITLE: "Recent Members", MEMBER_SAFETY_TABLE_TITLE_SEARCH: "Search Results", MEMBER_SAFETY_TABLE_HEADER_NAME: "Name", MEMBER_SAFETY_TABLE_HEADER_JOINED_AT: "Member Since", MEMBER_SAFETY_TABLE_HEADER_ACCOUNT_AGE: "Joined Discord", MEMBER_SAFETY_TABLE_HEADER_JOIN_METHOD: "Join Method", MEMBER_SAFETY_TABLE_HEADER_ROLES: "Roles", MEMBER_SAFETY_TABLE_HEADER_FLAGS: "Signals", MEMBER_SAFETY_TABLE_HEADER_ACTIONS: "", MEMBER_SAFETY_TABLE_PAGINATION_LABEL: "members of **{count}**", MEMBER_SAFETY_TABLE_PAGINATION_ADVANCED_LABEL: "members **{pageRange}** of **{total}**", MEMBER_SAFETY_TABLE_PAGINATION_TOOLTIP: "This only shows the most recent members - older members may not be shown (but will be soon).", MEMBER_SAFETY_TABLE_PAGINATION_PRE_LABEL: "Showing", MEMBER_SAFETY_TABLE_PAGINATION_NO_PAGE_NUMBERS_LABEL: "Showing {count, plural, one {**#** member} other {**#** members}}", MEMBER_SAFETY_TABLE_NEW_MEMBER_NOTICE_LABEL: "{count} new members since {date}", MEMBER_SAFETY_TABLE_NEW_MEMBER_NOTICE_ACTION: "View New Members", MEMBER_SAFETY_TABLE_SEARCH_PLACEHOLDER: "Search by username or id", MEMBER_SAFETY_TABLE_NO_RESULTS: "No members match these search results.", MEMBER_SAFETY_TABLE_FLAGS_POPOUT_TITLE: "Member Safety Flags", MEMBER_SAFETY_TABLE_ADD_ROLES_TOOLTIP: "Add Roles", MEMBER_SAFETY_TABLE_PROFILE_TOOLTIP: "View Profile", MEMBER_SAFETY_TABLE_MOD_VIEW_TOOLTIP: "Open Mod View", MEMBER_SAFETY_TABLE_OVERFLOW_TOOLTIP: "More Options", MEMBER_SAFETY_UNUSUAL_DM_ACTIVITY: "Unusual DM Activity", MEMBER_SAFETY_COMMUNICATION_DISABLED: "Timed Out", MEMBER_SAFETY_UNUSUAL_ACCOUNT_ACTIVITY: "Unusual Account Activity", MEMBER_SAFETY_USERNAME_QUARANTINED: "Quarantined", MEMBER_SAFETY_COMMUNICATION_DISABLED_TOOLTIP: "Timed out for", MEMBER_SAFETY_MORE_ROLES_TOOLTIP: "More Roles", MEMBER_SAFETY_UNUSUAL_DM_ACTIVITY_TOOLTIP: "Sent excessive DMs to non-friend server members in last 24 hrs", MEMBER_SAFETY_MEMBER_ROW_ARIA_LABEL: "Member {name}", MEMBER_SAFETY_DM_PAUSED_HEADER: "Direct messages are paused", MEMBER_SAFETY_INVITES_PAUSED_HEADER: "Invites are paused", MEMBER_SAFETY_DM_AND_INVITES_PAUSED_HEADER: "Direct messages and invites are paused", MEMBER_SAFETY_LOCKDOWN_SUBHEADER: "Filler subheader text with help center article link", MEMBER_SAFETY_JOIN_RAID_ALERT_HEADER: "Unusual join activity detected", MEMBER_SAFETY_DM_RAID_ALERT_HEADER: "Unusual DM activity detected", MEMBER_SAFETY_RAID_ALERT_SUBHEADER: "Unusual activity began on {dateTime}", MEMBER_SAFETY_RESOLVE_RAID_ALERT_BUTTON: "Mark as Resolved", MEMBER_SAFETY_BANNER_HEADER: "Meet the new safety-centric Members page!", MEMBER_SAFETY_BANNER_SUBHEADER: "See who's recently joined your server and swiftly address any users flagged for unusual activity.", MEMBERS_TABLE_ROLE_SELECTION_PLACEHOLDER: "Select a role", MEMBERS_TABLE_ROLE_SELECTION_CANCEL: "Cancel", MEMBERS_TABLE_ROLE_SELECTION_CONFIRM: "Confirm", MEMBERS_TABLE_NEW_MEMBER_TIMESTAMP_REFRESH_MODAL_TITLE: "View New Members?", MEMBERS_TABLE_NEW_MEMBER_TIMESTAMP_REFRESH_MODAL_DESCRIPTION: "Doing this will reset your search. Are you sure you want to continue?", MEMBERS_TABLE_MEMBER_SEARCH_LOADING: "Searching all members...", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_SECONDS: "just now", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_MINUTES: "{count} {count, plural, =1 {min} other {mins}} ago", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_HOURS: "{count} {count, plural, =1 {hr} other {hrs}} ago", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_DAYS: "{count} {count, plural, =1 {day} other {days}} ago", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_MORE_THAN_MONTH: "{count} {count, plural, =1 {month} other {months}} ago", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_MORE_THAN_YEAR: "{count} {count, plural, =1 {year} other {years}} ago", MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_HOURS: "<1 day ago", MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_DAYS: "{count} {count, plural, =1 {day} other {days}} ago", MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_MORE_THAN_MONTH: "{count} {count, plural, =1 {month} other {months}} ago", MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_MORE_THAN_YEAR: "{count} {count, plural, =1 {year} other {years}} ago", MEMBERS_SAFETY_UNKNOWN_INVITE_CODE: "Unknown", MEMBER_SAFETY_COACHMARK_TITLE: "A new Members page appears!", MEMBER_SAFETY_COACHMARK_DESCRIPTION: "View a list of new members and see who’s been marked with safety signals such as unusual DM activity.", MEMBER_SAFETY_COACHMARK_CTA: "Check it out", MEMBER_SAFETY_SIGNALS_DESCRIPTION: "Filter based on safety info, such as timed out or engaging in unusual DM activity.", MEMBER_SAFETY_ACTION_NOTICE_SELECTED_MEMBERS_MESSAGE: "{count, plural, one {1 member selected} other {{count} members selected}}", MEMBER_SAFETY_ACTION_NOTICE_CLEAR_SELECTION: "Clear selection", MEMBER_SAFETY_ACTION_NOTICE_BAN_ACTION: "Ban Members", MEMBER_SAFETY_ACTION_PERMISSIONS_MISSING: "Cannot action this member", MEMBER_SAFETY_CANNOT_SELECT_ALL: "There are no actionable members", MEMBER_SAFETY_JOIN_TYPE_UNKNOWN: "Unknown", MEMBER_SAFETY_JOIN_TYPE_UNKNOWN_TOOLTIP: "Join method not available", MEMBER_SAFETY_JOIN_TYPE_HIDDEN: "Hidden", MEMBER_SAFETY_JOIN_TYPE_HIDDEN_TOOLTIP: "Streamer mode is active, invite codes are hidden", MEMBER_SAFETY_JOIN_TYPE_BOT: "Bot Invite", MEMBER_SAFETY_JOIN_TYPE_INTEGRATION: "Integration", MEMBER_SAFETY_JOIN_TYPE_INTEGRATION_TWITCH: "Twitch (Integration)", MEMBER_SAFETY_JOIN_TYPE_INTEGRATION_YOUTUBE: "YouTube (Integration)", MEMBER_SAFETY_JOIN_TYPE_DISCOVERY: "Server Discovery", MEMBER_SAFETY_JOIN_TYPE_HUB: "Student Hub", MEMBER_SAFETY_INVITER_TOOLTIP: "Invited by", MEMBER_SAFETY_INVITER_BOT_TOOLTIP: "Added by Bot", MEMBER_SAFETY_JOIN_TYPE_FILTER_NAME: "Other Join Methods", MEMBER_SAFETY_JOIN_TYPE_HUB_LABEL_NAME: "Hub", MEMBER_SAFETY_JOIN_TYPE_VANITY_URL_LABEL_NAME: "{vanityUrl} (Vanity)", MEMBER_SAFETY_JOIN_TYPE_VANITY_URL: "Vanity URL", MEMBER_SAFETY_JOIN_TYPE_BOT_LABEL_NAME: "Bot (OAuth2)", MEMBER_SAFETY_JOIN_TYPE_LABEL_NAME: "Member Joined Via", MEMBER_SAFETY_INVITE_CODE_: "Member Joined Via", MEMBER_SAFETY_INVITE_CODE_SEARCH_PLACEHOLDER: "Enter invite code...", MEMBER_SAFETY_JOIN_TYPE_INVITE: "Server Invite", MEMBER_SAFETY_JOIN_TYPE_VANITY: "Vanity URL", MEMBER_SAFETY_JOIN_TYPE_MANUAL_VERIFICATION: "Manual Verification", MEMBER_SAFETY_JOIN_TYPE_MANUAL_VERIFICATION_CODE: "Manual Verification ({code})", MEMBER_SAFETY_INTEGRATION_TYPE_DISCORD: "Discord", MEMBER_SAFETY_INTEGRATION_TYPE_TWITCH: "Twitch", MEMBER_SAFETY_INTEGRATION_TYPE_YOUTUBE: "YouTube", MEMBER_SAFETY_INTEGRATION_TYPE_GUILD_SUBSCRIPTION: "Server Subscription", MEMBER_SAFETY_UNUSUAL_ACCOUNT_ACTIVITY_TOOLTIP: "Engaged in suspected spam activity", MEMBER_SAFETY_QUARANTINED_USER_TOOLTIP: "User can't talk in server until they change their member name", MEMBER_SAFETY_DATE_OPTION_LABEL_ALL: "All", MEMBER_SAFETY_DATE_OPTION_LABEL_1_HOUR: "Past 1 hr", MEMBER_SAFETY_DATE_OPTION_LABEL_24_HOURS: "Past 24 hrs", MEMBER_SAFETY_DATE_OPTION_LABEL_7_DAYS: "Past 7 days", MEMBER_SAFETY_DATE_OPTION_LABEL_2_WEEKS: "Past 2 weeks", MEMBER_SAFETY_DATE_OPTION_LABEL_4_WEEKS: "Past 4 weeks", MEMBER_SAFETY_DATE_OPTION_LABEL_3_MONTHS: "Past 3 months", MEMBER_SAFETY_DATE_OPTION_LABEL_CUSTOM: "Custom Range", MEMBER_SAFETY_DATE_OPTION_AFTER: "After Date", MEMBER_SAFETY_DATE_OPTION_BEFORE: "Before Date", MEMBER_SAFETY_DATE_OPTION_BEFORE_ONLY: "Before {date}", MEMBER_SAFETY_DATE_OPTION_AFTER_ONLY: "After {date}", MEMBER_SAFETY_JOINED_DATE_LABEL: "Member Since Date Options", MEMBER_SAFETY_ACCOUNT_AGE_LABEL: "Discord Join Date Options", MEMBER_SAFETY_JOIN_METHOD_LABEL: "Server Join Method Options", MEMBER_SAFETY_GUILD_JOINED_AT_DESC: "Member Since (Newest first)", MEMBER_SAFETY_GUILD_JOINED_AT_ASC: "Member Since (Oldest first)", MEMBER_SAFETY_USER_JOINED_AT_DESC: "Joined Discord (Newest first)", MEMBER_SAFETY_USER_JOINED_AT_ASC: "Joined Discord (Oldest first)", GUILD_MEMBER_MOD_VIEW_PHONE_VERIFIED: "Phone Verified", GUILD_MEMBER_MOD_VIEW_AGREE_TO_RULES: "Agreed to Rules", GUILD_MEMBER_MOD_VIEW_INVITE_LINK: "Invite Link", GUILD_MEMBER_MOD_VIEW_INVITE_LINK_TOOLTIP: "Invite link used to join server", GUILD_MEMBER_MOD_VIEW_INVITE_LINK_LABEL: "Join Method", GUILD_MEMBER_MOD_VIEW_DISCORD_JOIN_DATE: "Discord Join Date", GUILD_MEMBER_MOD_VIEW_GUILD_JOIN_DATE: "Server Join Date", GUILD_MEMBER_MOD_VIEW_GUILD_MESSAGE_ACTIVITY_TITLE: "Server Activity", GUILD_MEMBER_MOD_VIEW_ROLES_ADDED_CONTEXT: "Roles Added", GUILD_MEMBER_MOD_VIEW_ROLES_REMOVED_CONTEXT: "Roles Removed", GUILD_MEMBER_MOD_VIEW_ROLES_ADDED_AND_REMOVED_CONTEXT: "Roles Modified", GUILD_MEMBER_MOD_VIEW_ROLES_ADDED: "(Added) {roleNames}", GUILD_MEMBER_MOD_VIEW_ROLES_REMOVED: "(Removed) {roleNames}", GUILD_MEMBER_MOD_VIEW_ROLES_ADDED_AND_REMOVED: "(Added) {roleNamesAdded}\n(Removed) {roleNamesRemoved}", GUILD_MEMBER_MOD_VIEW_RECENT_AUDIT_LOG: "Moderator Action Log", GUILD_MEMBER_MOD_VIEW_AUDIT_LOG_SOURCE_USER: "Member who initiated this action.", GUILD_MEMBER_MOD_VIEW_MOD_PERMSSISONS_TITLE: "Mod Permissions", GUILD_MEMBER_MOD_VIEW_PERMISSIONS_SEARCH_PLACEHOLDER: "Search permission names, category, or description...", GUILD_MEMBER_MOD_VIEW_VIEW_ALL_PERMISSIONS: "All ({count})", GUILD_MEMBER_MOD_VIEW_ROLE_COUNT: "{roleCount, plural, =1 {# Role} other {# Roles}}", GUILD_MEMBER_MOD_VIEW_MOD_PERMSSISONS_PANEL_TITLE: "All Granted Permissions", GUILD_MEMBER_MOD_VIEW_MOD_NO_MOD_PERMS_FOUND: "No Mod Permissions", GUILD_MEMBER_MOD_VIEW_PERMISSION_GRANTED_BY: "Granted By", GUILD_MEMBER_MOD_VIEW_ELEVATED_PERMISSION_GRANTED_BY: "(Elevated) Granted By", GUILD_MEMBER_MOD_VIEW_ELEVATED_PERMISSION: "Elevated", GUILD_MEMBER_MOD_VIEW_MOD_PERMISSION: "Moderator", GUILD_MEMBER_MOD_VIEW_ELEVATED_PERMISSION_TOOLTIP: "Elevated permissions grant higher levels of access to server settings, and should only be granted to highly trusted mods.", GUILD_MEMBER_MOD_VIEW_PERMISSION_GRANTED_BY_ARIA_LABEL: "Permission Granted By These Roles", GUILD_MEMBER_MOD_VIEW_HIGHEST_ROLE: "Highest Role", GUILD_MEMBER_MOD_VIEW_TITLE: "Mod View", GUILD_SETTINGS_SAFETY_ENABLE_MODERATION_EXPERIENCE: "Show Members In Channel List", GUILD_SETTINGS_SAFETY_ENABLE_MODERATION_EXPERIENCE_DESCRIPTION: "Enabling this will show the members page in the channel list, allowing you to quickly see who's recently joined your server, and find any users flagged for unusual activity.", GUILD_SETTINGS_SAFETY_MODERATION_EXPERIENCE_ENABLED: "The members page has been moved to the server channel list. [Go There](onClick)", GUILD_SETTINGS_SAFETY_MODERATION_EXPERIENCE_IN_COMMUNITY: "Becoming a community will automatically enable this experience for you.", GUILD_ANTIRAID_SAFETY_SETUP_TITLE: "Raid Protection", GUILD_ANTIRAID_SAFETY_SETUP_DESCRIPTION: "Takes automated actions to safeguard your server from potential raids or other suspicious activity. Report a raid that we miss to improve raid protection.", GUILD_ANTIRAID_UPSELL_ASSET_HEADER: "Raid Protection", GUILD_ANTIRAID_UPSELL_HEADER: "Get Notified of Raids", GUILD_ANTIRAID_UPSELL_CONTENT: "We now protect your server from raids. Set up alerts in **Server Settings ➜ Safety Setup** to be notified.", GUILD_ANTIRAID_UPSELL_CTA: "Set Up", GUILD_ANTIRAID_UPSELL_DISMISSAL: "No Thanks", GUILD_ANTIRAID_NAGBAR_MESSAGE_2_NEW: "Unusual activity detected in {guildName}", GUILD_ANTIRAID_NAGBAR_RAID_MESSAGE_2_NEW: "Unusual join activity detected in {guildName}", GUILD_ANTIRAID_NAGBAR_DM_RAID_MESSAGE_2_NEW: "Unusual DM activity detected in {guildName}", GUILD_ANTIRAID_NAGBAR_RAID_BODY: "Unusual join activity", GUILD_ANTIRAID_NAGBAR_DM_RAID_BODY: "Unusual DM activity", GUILD_ANTIRAID_NAGBAR_ACTION: "Security Actions", GUILD_ANTIRAID_NAGBAR_EDIT_ACTION: "Edit Security Actions", GUILD_ANTIRAID_NAGBAR_ACTION_VIEW: "Review the Alert", GUILD_ANTIRAID_NAGBAR_MANAGE_ALERTS: "Manage Alerts", GUILD_ANTIRAID_PAUSE_DMS_NAGBAR_MESSAGE_NEW: "Direct messages are paused for {guildName} until {time}", GUILD_ANTIRAID_PAUSE_JOINS_NAGBAR_MESSAGE_NEW: "Joins are paused for {guildName} until {time}", GUILD_ANTIRAID_PAUSE_DMS_AND_JOINS_NAGBAR_MESSAGE_NEW: "DMs and joins are paused for {guildName} until {time}", GUILD_ANTIRAID_LOCKDOWN_NAGBAR_ACTION: "Edit Security Actions", GUILD_ANTIRAID_LOCKDOWN_FEEDBACK_DM_SPAM: "DM Spam", GUILD_ANTIRAID_LOCKDOWN_FEEDBACK_MENTION_SPAM: "Mention Spam", GUILD_ANTIRAID_LOCKDOWN_FEEDBACK_CHANNEL_SPAM: "Channel Spam", GUILD_ANTIRAID_LOCKDOWN_FEEDBACK_SUS_NEW_MEMBERS: "No harm done, but suspicious new members", GUILD_ANTIRAID_LOCKDOWN_FEEDBACK_CHANGING_SETTINGS: "Changing server and channel settings", GUILD_ANTIRAID_LOCKDOWN_FEEDBACK_OTHER: "Other", GUILD_ANTIRAID_LOCKDOWN_FEEDBACK_SUBMIT: "Submit", GUILD_ANTIRAID_RESOLVE_TITLE: "What happened?", GUILD_ANTIRAID_RESOLVE_DESCRIPTION: "Let your mods know how this alert was resolved. Discord will use your response to improve our alerts and tools.", GUILD_ANTIRAID_RESOLVE_REASON_LEGITIMATE_ACTIVITY: "Increased activity from normal members. No action needed.", GUILD_ANTIRAID_RESOLVE_REASON_DM_SPAM: "DM spam. Spammers were removed.", GUILD_ANTIRAID_RESOLVE_REASON_JOIN_RAID: "Join raid. Raiders were removed.", GUILD_ANTIRAID_EMBED_RESOLVE_REASON_NO_ACTION: "Resolved: No action", GUILD_ANTIRAID_EMBED_RESOLVE_REASON_DM_SPAM: "Resolved: DM spam", GUILD_ANTIRAID_EMBED_RESOLVE_REASON_JOIN_RAID: "Resolved: Join raid", GUILD_ANTIRAID_EMBED_RESOLVE_REASON_OTHER: "Resolved: Other", GUILD_SERVER_LOCKDOWN_TITLE: "Security Actions", GUILD_SERVER_LOCKDOWN_DURATION_PLACEHOLDER: "Select a time", GUILD_SERVER_LOCKDOWN_DURATION_1_HOUR: "1 hour", GUILD_SERVER_LOCKDOWN_DURATION_2_HOURS: "2 hours", GUILD_SERVER_LOCKDOWN_DURATION_4_HOURS: "4 hours", GUILD_SERVER_LOCKDOWN_DURATION_6_HOURS: "6 hours", GUILD_SERVER_LOCKDOWN_DURATION_12_HOURS: "12 hours", GUILD_SERVER_LOCKDOWN_DURATION_24_HOURS: "24 hours", GUILD_SERVER_LOCKDOWN_MODAL_CTA: "Save", GUILD_SERVER_LOCKDOWN_CONTEXT_MENU_LOCK: "Security Actions", GUILD_SERVER_LOCKDOWN_CONTEXT_MENU_UNLOCK: "Edit Security Actions", GUILD_INVITE_DISABLE_ACTION_SHEET_DESCRIPTION: "Temporarily stop new members from joining this server via invite or vanity links.", GUILD_DMS_DISABLE_ACTION_SHEET_DESCRIPTION: "Temporarily stop new direct messages from being sent between members in your server. Friends can still DM each other, moderators can still DM members, and your Apps can still DM members.", GUILD_SERVER_LOCKDOWN_FEEDBACK_DESCRIPTION: "Why was this server locked?", GUILD_SERVER_LOCKDOWN_ENABLED_SYSTEM_MESSAGE: "$[!!{username}!!](usernameHook) enabled security actions in !!{guildName}!! until {time}.", GUILD_SERVER_LOCKDOWN_DISABLED_SYSTEM_MESSAGE: "$[!!{username}!!](usernameHook) disabled security actions.", GUILD_SERVER_LOCKDOWN_ENABLED_SYSTEM_MESSAGE_MOBILE: "[!!{username}!!](usernameOnClick) enabled security actions in !!{guildName}!! until {time}.", GUILD_SERVER_LOCKDOWN_DISABLED_SYSTEM_MESSAGE_MOBILE: "[!!{username}!!](usernameOnClick) disabled security actions.", GUILD_RAID_REPORT_SYSTEM_MESSAGE: "$[!!{username}!!](usernameHook) reported a raid in !!{guildName}!!.", GUILD_REPORT_FALSE_ALARM_SYSTEM_MESSAGE: "$[!!{username}!!](usernameHook) resolved an Activity Alert in !!{guildName}!!.", GUILD_RAID_REPORT_SYSTEM_MESSAGE_MOBILE: "[!!{username}!!](usernameOnClick) reported a raid in !!{guildName}!!.", GUILD_REPORT_FALSE_ALARM_SYSTEM_MESSAGE_MOBILE: "[!!{username}!!](usernameOnClick) resolved an Activity Alert in !!{guildName}!!.", GUILD_SERVER_LOCKDOWN_ENABLED_NOTIFICATION: "!!{username}!! enabled security actions for !!{guildName}!! until {time}", GUILD_SERVER_LOCKDOWN_DISABLED_NOTIFICATION: "!!{username}!! disabled security actions for !!{guildName}!!", GUILD_SERVER_RAID_ALERT_NOTIFICATION: "Unusual activity detected in !!{guildName}!!", GUILD_RAID_REPORT_NOTIFICATION: "!!{username}!! reported a raid in !!{guildName}!!", GUILD_SERVER_LOCKDOWN_ENABLED_SYSTEM_MESSAGE_SHORT: "$[!!{username}!!](usernameHook) enabled security actions until {time}.", GUILD_SERVER_LOCKDOWN_ENABLED_SYSTEM_MESSAGE_MOBILE_SHORT: "[!!{username}!!](usernameOnClick) enabled security actions until {time}.", GUILD_RAID_REPORT_SYSTEM_MESSAGE_SHORT: "$[!!{username}!!](usernameHook) reported a raid in !!{guildName}!!.", GUILD_REPORT_FALSE_ALARM_SYSTEM_MESSAGE_SHORT: "$[!!{username}!!](usernameHook) resolved an Activity Alert.", GUILD_REPORT_FALSE_ALARM_SYSTEM_MESSAGE_MOBILE_SHORT: "[!!{username}!!](usernameOnClick) resolved an Activity Alert.", GUILD_COMMUNITY_ALERTS_HEADER: "Community Activity Alerts", GUILD_COMMUNITY_ALERTS_DESCRIPTION: "Receive notifications for DM or join activity that exceeds usual numbers for your server.", GUILD_COMMUNITY_ALERTS_CHOOSE_SERVER: "Choose a Server", GUILD_COMMUNITY_ALERTS_NAG_HEADER: "In-app alerts", GUILD_COMMUNITY_ALERTS_NAG_DESCRIPTION: "A global bar that appears across the top of Discord when you are using it, regardless of what channel or server you're in at the time.", GUILD_COMMUNITY_ALERTS_PUSH_HEADER: "Push notifications", GUILD_COMMUNITY_ALERTS_PUSH_DESCRIPTION: "Sends to mobile or desktop devices when you are not using Discord.", GUILD_MENTION_RAID_LIMIT_UPSELL_ASSET_HEADER: "Raid Protection", GUILD_MENTION_RAID_LIMIT_UPSELL_HEADER: "Mention Raid Protections", GUILD_MENTION_RAID_LIMIT_UPSELL_CONTENT: "We now slow down unusual surges in mentions to prevent raids. Choose roles or channels to be exempt and where alerts can go.", GUILD_MENTION_RAID_LIMIT_UPSELL_CTA: "Set up", GUILD_MENTION_RAID_LIMIT_UPSELL_DISMISSAL: "Got it", GUILD_ANTIRAID_SAFETY_SETUP_ENABLE_TIP: "In order to enable activity alerts, your server must set a **Safety Notification Channel** for these notifcations. You can do that in your [Community Settings ➜ Overview](onClick)", GUILD_ANTIRAID_SAFETY_SETUP_ERROR: "Something went wrong when enabling alerts. Please try again later.", GUILD_ANTIRAID_SAFETY_JOIN_RAIDS_TITLE: "Join Raids", GUILD_ANTIRAID_SAFETY_MENTION_RAIDS_TITLE: "Mention Raids", GUILD_ANTIRAID_SETTING_PROTECTION_LABEL: "Protection", GUILD_ANTIRAID_SETTING_ENABLED: "Enabled", GUILD_ANTIRAID_SETTING_ENABLED_ALERTS: "Enabled + Alerts", GUILD_ANTIRAID_SETTING_CHANNEL_NONE_LABEL: "Raid Alerts", GUILD_ANTIRAID_SETTING_CHANNEL_LABEL: "Alert Channel", GUILD_ANTIRAID_SETTING_CHANNEL_NONE: "None", GUILD_ANTIRAID_RAID_ALERT: "Raid Alert", GUILD_ANTIRAID_SAFETY_SETUP_NO_EXPERIMENT_ACTION: "Protection Enabled", GUILD_ANTIRAID_SAFETY_SETUP_CHANNEL_SETUP_ACTION: "Setup Alerts", GUILD_ANTIRAID_SAFETY_SETUP_IN_AUTOMOD_ACTION: "Setup in AutoMod", GUILD_ANTIRAID_SAFETY_SETUP_CHANNEL_MANAGE_ACTION: "Manage Alerts", GUILD_ANTIRAID_SAFETY_CHANNEL_TITLE: "Safety Notifications Channel", GUILD_ANTIRAID_SAFETY_CHANNEL_DESCRIPTION: "This is the channel where Discord will send you important safety updates about your server. As some info might be sensitive, we recommend selecting a role-restricted channel.", GUILD_ANTIRAID_SAFETY_SETUP_CHANNEL_MODAL_TITLE: "Join Raid Alerts", GUILD_ANTIRAID_SAFETY_SETUP_CHANNEL_MODAL_ENABLE_ALERTS: "Enable Alerts", GUILD_ANTIRAID_SAFETY_SETUP_CHANNEL_MODAL_DESCRIPTION: "Choose a channel to post raid notifications to. Each notification will contain information about the raid, including time period, and approximate number of join attempts.", GUILD_ANTIRAID_SAFETY_SETUP_CHANNEL_MODAL_CHANNEL_PERMISSIONS_NOTICE: "Anyone with access to this text channel will be able to see the notifications.", GUILD_SETTINGS_SAFETY_SETUP_HEADER: "Safety Setup", GUILD_SETTINGS_SAFETY_OVERVIEW_NUM_ENABLED: "{enabled, number} of {total, number} enabled", GUILD_SETTINGS_SAFETY_CAPTCHA_RAID_PROTECTION: "Raid Protection and CAPTCHA", GUILD_SETTINGS_SAFETY_DM_SPAM_PROTECTION: "DM and Spam Protection", GUILD_SETTINGS_SAFETY_ON_BY_DEFAULT: "This feature is on by default", GUILD_SETTINGS_SAFETY_RAID_ALERTS_TITLE: "Activity Alerts", GUILD_SETTINGS_SAFETY_RAID_ALERTS_DESCRIPTION: "Receive notifications for DM or join activity that exceeds usual numbers for your server. Each notification will contain information about the activity, including time period and approximate number of joins or DMs.", GUILD_SETTINGS_SAFETY_RULES_SCREENING: "Members must accept rules before they can talk or DM", GUILD_SETTINGS_SAFETY_RULES_EDIT_SUBTITLE: "Set up rules that new members must explicitly agree to before they can talk, react, or DM other members. Granting a role to a new member will bypass this requirement.", GUILD_SETTINGS_SAFETY_RULES_FORM_PILL: "Accept the rules", GUILD_SETTINGS_SAFETY_VERIFICATION_DESCRIPTION: "Members of the server must meet the following criteria before they can send messages. If a member has an assigned role and server onboarding is not enabled, this does not apply.", GUILD_SETTINGS_SAFETY_NOTIFICATIONS_CHANNEL_DESCRIPTION: "Anyone with access to this text channel will be able to see the notifications.", GUILD_SETTINGS_SAFETY_RAID_CAPTCHA: "CAPTCHA suspicious accounts before they are able to join", GUILD_SETTINGS_SAFETY_RAID_CAPTCH_RAID: "CAPTCHA all accounts before they can join during a suspected raid", GUILD_SETTINGS_SAFETY_SPAM_SUSPICIOUS_DMS: "Hide DMs from suspicious users", GUILD_SETTINGS_SAFETY_SPAM_SUSPICIOUS_DMS_DESCRIPTION: "Send suspicious DMs to a separate Spam Inbox. Members can send a scam report or move it back to Inbox.", GUILD_SETTINGS_SAFETY_SPAM_DM_NON_FRIENDS: "Filter DMs from unknown users", GUILD_SETTINGS_SAFETY_SPAM_DM_NON_FRIENDS_DESCRIPTION: "Filter DMs from unknown users to Message Requests Inbox. Members must approve the request before they are able to respond.", GUILD_SETTINGS_SAFETY_SPAM_SUSPICIOUS_LINKS: "Warn members before they visit outbound links", GUILD_SETTINGS_SAFETY_SPAM_DM_SUSPCIOUS_MESSAGES: "Hide all messages from and delete suspected spammers", GUILD_SETTINGS_SAFETY_EVERYONE_RISKY_PERMISSIONS: "Remove risky permissions from @everyone", GUILD_SETTINGS_SAFETY_EVERYONE_RISKY_PERMISSIONS_DETAILS: "@everyone currently has {numPerms, number} risky permissions enabled", GUILD_SETTINGS_SAFETY_UPDATES_HEADER: "Recent updates", GUILD_SETTINGS_SAFETY_UPDATES_LINE_1: "Looking for Rule Screening, Verification Level, or Automod? We've re-organized them into this page", GUILD_SETTINGS_SAFETY_UPDATES_LINE_2: "We've also added a lot of safety tooling you can check out below. Some highlights:", GUILD_SETTINGS_SAFETY_UPDATES_ITEM_1: "CAPTCHA is intelligently verifying joiners", GUILD_SETTINGS_SAFETY_UPDATES_ITEM_2: "Suspicious joiners are automatically blocked during suspected raids", GUILD_SETTINGS_SAFETY_UPDATES_ITEM_3: "We warn users before they follow any suspicious outbound links", GUILD_SETTINGS_SAFETY_UPDATES_ITEM_4: "We send suspected spam DMs to a special Requests inbox", SAFETY_REMOVE_RISKY_PERMS_MODAL_TITLE: "Remove risky permissions", SAFETY_REMOVE_RISKY_PERMS_MODAL_SUBTITLE: "With one easy click you can disable risky permissions for the @everyone role", SAFETY_REMOVE_RISKY_PERMS_ARIA_LABEL: "Item incomplete", SAFETY_REMOVE_RISKY_PERMS_ARIA_LABEL_COMPLETE: "Item completed", SAFETY_REMOVE_RISKY_PERMS_WARNING: "Cannot disable risky permissions because this would revoke your own permissions.", GUILD_ONBOARDING_UPSELL_SAFETY_TITLE: "Let's confirm your safety setup", GUILD_ONBOARDING_UPSELL_SAFETY_TITLE_TOOLTIP: "Discord Raid and DM protection is active. Enable any additional Automod settings now.", GUILD_SETTINGS_SAFETY_MFA_NON_OWNER_TOOLTIP: "This setting can only be changed by a server owner with 2FA enabled on their account.", GUILD_SETTINGS_SAFETY_MFA_OWNER_TOOLTIP: "To change this setting, first enable 2FA on your account.", GUILD_SETTINGS_SAFETY_MFA_BODY: "Moderators must have two-factor authentication enabled to ban, kick, or timeout members and delete messages.", GUILD_SETTINGS_SAFETY_MFA_NON_OWNER_DETAIL: "Only the server owner can change this setting if they have 2FA enabled.", GUILD_SETTINGS_SAFETY_MFA_OWNER_DETAIL: "To change this setting, first enable 2FA on your account [here](settingsHook).", GUILD_SETTINGS_SAFETY_MFA_DISCOVERABLE_DISABLED_TOOLTIP: "2FA is required while this server is in Server Discovery", GUILD_SETTINGS_SAFETY_PERMISSIONS_TITLE: "Permissions", GUILD_SETTINGS_ACTION_FILTER_AUTOMOD_RULE_CREATE: "Create AutoMod Rule", GUILD_SETTINGS_ACTION_FILTER_AUTOMOD_RULE_UPDATE: "Update AutoMod Rule", GUILD_SETTINGS_ACTION_FILTER_AUTOMOD_RULE_DELETE: "Cancel AutoMod Rule", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_CREATE: "$[**!!{user}!!**](userHook) created AutoMod rule $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_UPDATE: "$[**!!{user}!!**](userHook) updated AutoMod rule $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_DELETE: "$[**!!{user}!!**](userHook) deleted AutoMod rule $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_NAME_UPDATE: "Set the name to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_TRIGGER_TYPE_UPDATE: "Set the trigger type to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_EVENT_TYPE_UPDATE: "Set the event type to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_ACTIONS_UPDATE: "Set actions to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_TRIGGER_METADATA_UPDATE: "Set trigger metadata **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_TRIGGER_METADATA_KEYWORDS_UPDATE: "keywords to {newValue}", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_ADD_KEYWORDS: "added keywords **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_REMOVE_KEYWORDS: "removed keywords **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_ADD_REGEX_PATTERNS: "added regex patterns **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_REMOVE_REGEX_PATTERNS: "removed regex patterns **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_ADD_ALLOW_LIST: "added allow list keywords **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_REMOVE_ALLOW_LIST: "removed allow list keywords **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_KEYWORDS_ADD: "added keywords **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_KEYWORDS_REMOVED: "removed keywords **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_ENABLED_UPDATE: "Enabled rule", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_DISABLED_UPDATE: "Disabled rule", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_EXEMPT_ROLES_UPDATE: "Set exempt roles to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_EXEMPT_CHANNELS_UPDATE: "Set exempt channels to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_AUTOMOD_RULE_NONE: "None", GUILD_AUTOMOD_CHATBLOCKER_PROFILE_INVALID_GENERAL_MOBILE: "Your server profile contains words that are not allowed.", GUILD_AUTOMOD_CHATBLOCKER_PROFILE_INVALID_GENERAL_DESCRIPTION_MOBILE: "**!!{guildName}!!** wants you to update your server profile so you can start chatting.", GUILD_AUTOMOD_PROFILE_INVALID_MODAL_TITLE_MOBILE: "Your server profile contains words that are not allowed in **!!{guildName}!!**", GUILD_AUTOMOD_USERNAME_INVALID_MODAL_DESCRIPTION_MOBILE: "Your \"Username\" violate this server's guidelines. You'll have to update your server profile before you can start chatting.", GUILD_AUTOMOD_BIO_INVALID_MODAL_DESCRIPTION_MOBILE: "Your \"About Me\" violate this server's guidelines. You'll have to update your server profile before you can start chatting.", GUILD_AUTOMOD_USERNAME_INVALID_NO_PERMS_MODAL_DESCRIPTION_MOBILE: "Your \"Username\" violate this server's guidelines. You'll have to change it before you can start chatting.", GUILD_AUTOMOD_PROFILE_INVALID_DESCRIPTION: "Please update your server profile to start chatting in this community.", GUILD_AUTOMOD_PROFILE_INVALID_NO_PERMS_DESCRIPTION: "Please update your username to start chatting in this community.", GUILD_AUTOMOD_UPDATE_PROFILE_CTA: "Update Server Profile", GUILD_AUTOMOD_UPDATE_ACCOUNT_USERNAME_CTA: "Update Username", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_BLOCK_NICKNAME_UPDATE: "blocked a nickname update", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_BLOCK_NICKNAME_RESET: "blocked a nickname reset", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_QUARANTINE_USER_ON_GUILD_JOIN: "quarantined a member at server join", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_BLOCK_GUEST_ON_GUILD_JOIN: "blocked a guest at server join", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_QUARANTINE_USER_MESSAGE_SEND: "quarantined a member at message send", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_QUARANTINE_USERNAME_UPDATE: "quarantined a member at username update", GUILD_AUTOMOD_POST_TO_CHANNEL_HEADER_QUARANTINE_CLAN_TAG_UPDATE: "quarantined a member at tag adoption", GUILD_AUTOMOD_PROFILE_ERROR_QUARANTINE_USERNAME: "Your nickname contains words flagged by this community.", GUILD_AUTOMOD_PROFILE_ERROR_QUARANTINE_USERNAME_IN_GUILD: "Your username contains words flagged in {guildName}.", GUILD_AUTOMOD_PROFILE_ERROR_QUARANTINE_BIO: "Your bio contains words flagged by this community.", AUTOMOD_USER_PROFILE_UPSELL_HEADER: "Block Bad Usernames", AUTOMOD_USER_PROFILE_UPSELL_CONTENT: "Filter out Bad Words in Usernames in **Server Settings > Automod.**", GUILD_AUTOMOD_USER_PROFILE_FILTER_NAME: "Block Words in Member Profile Names", GUILD_AUTOMOD_USER_PROFILE_FILTER_DESCRIPTION: "Block specific language in your member's usernames.", GUILD_AUTOMOD_ACTIONS_QUARANTINE_USER: "Block member interactions", GUILD_AUTOMOD_ACTIONS_QUARANTINE_USER_DESCRIPTION: "Prevents a member from using text, voice, or other interactions.", GUILD_AUTOMOD_NAGBAR_QUARANTINED_USER_PROFILE: "Please update your server profile to start chatting in this community.", GUILD_AUTOMOD_NAGBAR_QUARANTINED_USER_PROFILE_NO_PERMS: "Please update your username to start chatting in this community.", GUILD_AUTOMOD_NAGBAR_QUARANTINED_USER_PROFILE_CTA: "Update Server Profile", GUILD_AUTOMOD_NAGBAR_QUARANTINED_ACCOUNT_USERNAME_CTA: "Update Username", GUILD_AUTOMOD_RULE_DELETE_ERROR_CONFIRM_MODAL_HEADER: "Cannot delete rule", GUILD_AUTOMOD_RULE_DELETE_ERROR_CONFIRM_MODAL_BODY: "The Mention Spam AutoMod rule cannot be deleted from community servers. Please disable the rule instead.", GUILD_REPORT_RAID_BUTTON_TITLE: "Report Raid", GUILD_REPORT_RAID_MODAL_TITLE: "Report a Raid", GUILD_REPORT_RAID_MODAL_DESCRIPTION: "Which behavior best describes how this raid is currently disrupting your server? [Learn more about raids]({helpArticle})", GUILD_REPORT_RAID_MODAL_DESCRIPTION_CLICKABLE: "Which behavior best describes how this raid is currently disrupting your server? [Learn more about raids](onClick)", GUILD_REPORT_RAID_MODAL_CHOICE_MESSAGE_SPAM: "Spamming channels", GUILD_REPORT_RAID_MODAL_CHOICE_DM_SPAM: "Spamming DMs", GUILD_REPORT_RAID_MODAL_CHOICE_MENTION_SPAM: "Spamming mentions", GUILD_REPORT_RAID_MODAL_CHOICE_SUSPICIOUS_USERS: "Nothing yet, but suspicious new members", GUILD_REPORT_RAID_MODAL_CHOICE_SETTINGS_SPAM: "Changing server and channel settings", ENABLE_COMMUNITY_MODAL_UPDATED_SETTINGS_LABEL: "Safe settings", ENABLE_COMMUNITY_MODAL_DEFAULT_NOTIFICATIONS_LABEL: "Set default settings to Mentions Only $[info](infoHook)", ENABLE_COMMUNITY_MODAL_DEFAULT_NOTIFICATIONS_LABEL_MOBILE: "Set default settings to Mentions Only", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_LABEL_UPDATED: "Disable risky permissions for", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_LABEL_MOBILE: "Disable risky permissions for **@everyone** role", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_DISABLED_TOOLTIP: "This permission will be disabled", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_MENTION_EVERYONE: "Mention @everyone", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_CREATE_EMOJI: "Create Emoji", ENABLE_COMMUNITY_MODAL_EVERYONE_ROLE_PERMISSION_MANAGE_EMOJI: "Manage Emoji", ENABLE_COMMUNITY_MODAL_PUBLIC_GUILD_POLICY_TITLE: "Abide by the guidelines", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_NOTICE_HEADER: "Stop @everyone spam", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_NOTICE_SUBHEADER: "With one easy click you can disable risky permissions for the @everyone role.", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_NOTICE_CONFIRMATION: "Yes, keep me safe", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_NOTICE_DISMISS: "No, thanks", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_NOTICE_CONFIRMATION_DONE: "Done", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_ENABLED_PERMISSIONS: "Currently Enabled", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_DISABLED_PERMISSIONS: "Currently Disabled", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_DISABLING_PERMISSIONS: "Disabling risky permissions...", DISABLE_UNSAFE_DEFAULT_PERMISSIONS_DISABLED: "All risky permissions disabled!", UPDATE_COMMUNICATION_NOTIFICATIONS_HEADER: "Members are muting your server", UPDATE_COMMUNICATION_NOTIFICATIONS_SUBHEADER: "They're getting a notification for every message! Let's change the notification settings so they don't get overwhelmed and stay engaged.", UPDATE_COMMUNICATION_NOTIFICATIONS_CONFIRMATION: "Yes, change the default", AGGREGATE_PREMIUM_UPSELL_HEADER_CUSTOM_PROFILES: "Express yourself more with customized profiles", AGGREGATE_PREMIUM_UPSELL_HEADER_EMOJI: "Use your favorite emoji everywhere", AGGREGATE_PREMIUM_UPSELL_HEADER_HD_STREAMING: "Stream in sweet, sweet HD like the pros", AGGREGATE_PREMIUM_UPSELL_HEADER_LARGER_FILE_UPLOAD: "Share what you want, with who you want", LARGER_FILE_UPLOAD_SIDEBAR_TITLE: "Upload larger files", ANIMATED_EMOJI_SIDEBAR_TITLE: "Express more with emoji", HD_VIDEO_STREAMING_SIDEBAR_TITLE: "Stream in HD", CUSTOM_PROFILES_SIDEBAR_TITLE: "Customize your profile", CUSTOM_PROFILES_DESCRIPTION_BULLETED: "* Animate your avatars\n\n* Turn your favorite GIFs and images into banners\n\n* Make different profiles for each server\n\n* Choose the numbers in your username", HD_VIDEO_STREAMING_DESCRIPTION: "Say goodbye to pixels and hello to higher stream quality. Nitro lets you stream gameplay with friends in crisp, smooth HD (1080p and up) at 60 FPS.", ANIMATED_EMOJI_DESCRIPTION_BULLETED: "* Unlock all custom emoji from servers you join\n\n* Use all of them, anywhere you want\n\n* Upload animated emoji to servers you own, with 50 extra slots to play with", LARGER_FILE_UPLOAD_DESCRIPTION: "Nitro lets you upload files up to 100MB. Share longer clips, higher quality photos, bigger documents, and more!", LARGER_FILE_UPLOAD_DESCRIPTION_INCREASE: "Nitro lets you upload files up to {premiumMaxSize}. Share longer clips, higher quality photos, bigger documents, and more!", AGGREGATE_PREMIUM_UPSELL_CTA: "Get Nitro", AGGREGATE_PREMIUM_UPSELL_LEARN_MORE_CTA: "Explore more Nitro perks", DONUT_GET_ANDROID_BETA: "Get the Beta on Google Play", DONUT_GET_ANDROID_BETA_TITLE: "Wait! You need the beta app.", DONUT_GET_ANDROID_BETA_BODY: "To use all of the available features, you'll need to be using the beta Discord app for Android.\n\n[Learn more about joining the beta.]({helpArticle})", CONSOLE_STREAMING: "Streaming from console", CONSOLE_STREAMING_TOOLTIP: "You're streaming! Stream not viewable from your other devices", CONSOLE_STREAM_UNAVAILABLE: "Unavailable while connected via console", CONSOLE_STREAM_UNAVAILABLE_TOOLTIP: "Streams are not viewable while connected via console", PROACTIVE_UPSELL_CUSTOM_PROFILE: "Get custom profiles like this __with Nitro__", CONNECTIONS_ADD_CONNECTIONS: "Add Connection", CONNECTIONS_VIEW_MORE: "View more", CONNECTIONS_EBAY_TOP_RATED_SELLER: "Top Rated Seller", CONNECTIONS_EBAY_POSITIVE_FEEDBACK_PERCENTAGE: "Percentage of Positive Ratings", CONNECTIONS_EBAY_UNIQUE_POSITIVE_FEEDBACK_COUNT: "Positive Feedback Reviews", CONNECTIONS_EBAY_UNIQUE_NEGATIVE_FEEDBACK_COUNT: "Negative Feedback Reviews", CONNECTIONS_PAYPAL_VERIFIED: "Verified Bank Account", CONNECTIONS_REDDIT_KARMA: "Karma", CONNECTIONS_REDDIT_GOLD: "Gold", CONNECTIONS_REDDIT_MOD: "Mod", CONNECTIONS_STEAM_GAMES: "Games", CONNECTIONS_STEAM_ITEMS: "{count, plural, =1 {**#** item} other {**#** items}}", CONNECTIONS_STEAM_DOTA2: "DOTA 2", CONNECTIONS_STEAM_TF2: "Team Fortress 2", CONNECTIONS_STEAM_TOOLTIP: "Make sure your Steam profile is set to public before connecting.", CONNECTIONS_TWITTER_STATUSES: "Posts", CONNECTIONS_TWITTER_FOLLOWERS: "Followers", CONNECTIONS_TIKTOK_VERIFIED: "Verified", CONNECTIONS_TIKTOK_FOLLOWERS: "Followers", CONNECTIONS_TIKTOK_FOLLOWING: "Following", CONNECTIONS_TIKTOK_LIKES: "Likes", CONNECTIONS_INSTAGRAM_POSTS: "Posts", CONNECTIONS_ROLE_RULE_ACCOUNT_AGE: "{days, plural, =1 {# day} other {# days}} old account", CONNECTIONS_ROLE_RULE_EBAY_POSITIVE_FEEDBACK_PERCENTAGE: "{value}% Positive Ratings", CONNECTIONS_ROLE_RULE_EBAY_UNIQUE_POSITIVE_FEEDBACK_COUNT: "{count, plural, =1 {# Positive Feedback Review} other {# Positive Feedback Reviews}}", CONNECTIONS_ROLE_RULE_EBAY_UNIQUE_NEGATIVE_FEEDBACK_COUNT: "{count, plural, =1 {# Negative Feedback Review} other {# Negative Feedback Reviews}}", CONNECTIONS_ROLE_RULE_PAYPAL_VERIFIED: "verified bank account", CONNECTIONS_ROLE_RULE_REDDIT_KARMA: "{karma, number} Karma", CONNECTIONS_ROLE_RULE_REDDIT_GOLD: "Reddit Gold", CONNECTIONS_ROLE_RULE_REDDIT_MODERATOR: "a subreddit moderator", CONNECTIONS_ROLE_RULE_STEAM_GAMES: "{count, plural, =1 {# game} other {# games}} in library", CONNECTIONS_ROLE_RULE_STEAM_TF2_ITEMS: "{count, plural, =1 {# Team Fortress 2 item} other {# Team Fortress 2 items}} in inventory", CONNECTIONS_ROLE_RULE_STEAM_DOTA2_ITEMS: "{count, plural, =1 {# DOTA 2 item} other {# DOTA 2 items}} in inventory", CONNECTIONS_ROLE_RULE_TWITTER_FOLLOWERS: "{count, plural, =1 {# follower} other {# followers}}", CONNECTIONS_ROLE_RULE_TWITTER_STATUSES: "{count, plural, =1 {# post} other {# posts}}", CONNECTIONS_ROLE_RULE_TWITTER_VERIFIED: "verified", CONNECTIONS_ROLE_RULE_INSTAGRAM_POSTS: "{count, plural, =1 {# post} other {# posts}}", CONNECTIONS_ROLE_RULE_GENERIC: "!!{description}!! - **{count, number}**", CONNECTIONS_ROLE_RULE_TIKTOK_VERIFIED: "verified", CONNECTIONS_ROLE_RULE_TIKTOK_FOLLOWER_COUNT: "{count, plural, =1 {# follower} other {# followers}}", CONNECTIONS_ROLE_RULE_TIKTOK_FOLLOWING_COUNT: "{count, plural, =1 {# following} other {# following}}", CONNECTIONS_ROLE_RULE_TIKTOK_LIKES_COUNT: "{count, plural, =1 {# like} other {# likes}}", CONNECTIONS_PROFILE_MEMBER_SINCE: "Member since {date}", CONNECTIONS_PROFILE_REDDIT_KARMA: "**{value}** Karma", CONNECTIONS_PROFILE_STEAM_GAMES: "**{value}** Games", CONNECTIONS_PROFILE_TWITTER_FOLLOWERS: "**{value}** Followers", CONNECTIONS_PROFILE_TWITTER_STATUSES: "**{value}** Posts", CONNECTIONS_PROFILE_EBAY_POSITIVE_FEEDBACK_PERCENTAGE: "**{value}** Positive Ratings", CONNECTIONS_PROFILE_TIKTOK_FOLLOWERS: "**{value}** Followers", CONNECTIONS_PROFILE_TIKTOK_FOLLOWING: "**{value}** Following", CONNECTIONS_PROFILE_TIKTOK_LIKES: "**{value}** Likes", CONNECTIONS_PROFILE_INSTAGRAM_POSTS: "**{value}** Posts", CONNECTIONS_PROFILE_GENERIC_VANITY_METRIC: "**{value}** {name}", CONNECTIONS_PROFILE_POWERED_BY: "Powered by $[](applicationHook)", CONNECTIONS_ROLE_POPOUT_MUST_HAVE_A: "A $[](platformQuantityHook)", CONNECTIONS_ROLE_POPOUT_MUST_HAVE_AT_LEAST: "At least $[](platformQuantityHook)", CONNECTIONS_ROLE_POPOUT_MUST_HAVE_AT_MOST: "At most $[](platformQuantityHook)", CONNECTIONS_ROLE_POPOUT_MUST_BE: "Is $[](platformQuantityHook)", CONNECTIONS_ROLE_POPOUT_MUST_NOT_BE: "Is not $[](platformQuantityHook)", CONNECTIONS_ROLE_POPOUT_VIEW_ALL: "View all", CONNECTIONS_ROLE_POPOUT_CLICK_TO_VIEW: "Click to view", CONNECTIONS_ROLE_POPOUT_HEADER_ALL: "Has linked **all** of the following accounts:", CONNECTIONS_ROLE_POPOUT_HEADER_OR: "Has linked **at least one** of the following accounts:", CONNECTIONS_ROLE_POPOUT_HEADER_ONE: "Has linked the following account:", CONNECTIONS_ROLE_POPOUT_GET_ROLES: "Get Linked Roles", CONNECTIONS_ROLE_POPOUT_VIEW_CONNECTIONS: "View Connections", CONNECTIONS_ROLE_OFFICIAL_ICON_TOOLTIP: "Official", CONNECTIONS_USER_SETTINGS_CONNECT_ACCOUNTS_HEADER: "Add accounts to your profile", CONNECTIONS_USER_SETTINGS_CONNECT_ACCOUNTS_DESCRIPTION: "This information will not be shared outside of Discord without your permission, and is used in accordance with Discord’s [Privacy Policy]({privacyPolicyUrl}).", CONNECTIONS_ROLES_CHANNEL_NAME: "Linked Roles", CONNECTIONS_ROLES_CHANNEL_CALL_TO_ACTION_LEARN_MORE: "Connect your accounts or apps to get Linked Roles in this server. [Learn more]({helpdeskArticleUrl}).", CONNECTIONS_ROLES_CHANNEL_CONNECTIONS_REQUIRED: "Requires {count, plural, =1 {# connection} other {# connections}}", CONNECTIONS_ROLES_CHANNEL_LEAVE_VERIFIED_ROLE: "Leave Linked Role", CONNECTIONS_ROLES_CHANNEL_LEAVE_VERIFIED_ROLE_INFO: "You might lose access to certain channels and permissions if you leave this role.", CONNECTIONS_ROLES_CHANNEL_LEAVE_VERIFIED_ROLE_MOBILE: "Leave Role", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_MANAGE_CONNECTIONS: "Manage Connections", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_MUST_HAVE_A: "Must have a $[](platformQuantityHook)", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_MUST_HAVE_AT_LEAST: "Must have at least $[](platformQuantityHook)", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_MUST_HAVE_AT_MOST: "Must have at most $[](platformQuantityHook)", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_MUST_BE: "Must be $[](platformQuantityHook)", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_MUST_NOT_BE: "Must not be $[](platformQuantityHook)", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_USAGE: "This information will be used to verify your identity to the server, and in accordance with Discord’s [Privacy Policy]({privacyPolicyUrl}).", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_USAGE_SETTINGS: "This information will be used to verify your identity to the server, and in accordance with Discord's [Privacy Policy]({privacyPolicyUrl}). You can manage apps and connections by going to [Authorized Apps](onAuthorizedApplicationsClick) or [Connections](onConnectionsClick) in user settings.", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_REQUIREMENTS_NOT_MET: "Requirements not met", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_HEADER_TEXT_ANY: "You must verify **at least one** of the following accounts to get this role", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_HEADER_TEXT_ALL: "You must verify **all** of the following accounts to get this role", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_ACCOUNT_CONNECTED: "!!{platformName}!! connected!", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_ACCOUNT_CONNECTED_PREVIEW: "Connection Preview", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_ACCOUNT_CONNECTED_PRIVACY: "Privacy", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_ACCOUNT_CONNECTED_TOOLTIP: "This will only appear on your profile in channels where this role was added to permissions", CONNECTIONS_CONNECT_ACCOUNTS_MODAL_ROLE_GRANTED: "Role granted!", CONNECTIONS_NUX_TITLE: "NEW! Connection Details", CONNECTIONS_NUX_CONTENT: "You can now show off details from your Connections, like follower count or game stats on your profile! [Learn more.]({helpdeskArticle})", LINKED_ROLES_ADMIN_NUX_TITLE: "Did you know?", LINKED_ROLES_ADMIN_NUX_CONTENT: "Adding Linked Roles to any channel will give members Role Tags!", GENERIC_FORMATTED_LIST_TWO: "$[](a) and $[](b)", GENERIC_FORMATTED_LIST_THREE: "$[](a), $[](b), and $[](c)", GENERIC_FORMATTED_LIST_FOUR: "$[](a), $[](b), $[](c), and $[](d)", NUMBER_ABBREVIATION_FULL: "{value, number}", NUMBER_ABBREVIATION_THOUSANDS: "{value, number}k", NUMBER_ABBREVIATION_MILLIONS: "{value}M", FINISH: "Finish", ONBOARDING_NO_PROMPTS: "We hope you enjoy your stay!", ONBOARDING_COVER_WELCOME_TITLE: "Welcome to !!{guildName}!!, !!{userName}!!!", ONBOARDING_COVER_WELCOME_SUBTITLE: "Let's customize your experience", ONBOARDING_COVER_PRIVACY_POLICY: "Your responses will be treated in accordance with Discord's [Privacy Policy]({privacyLink})", ONBOARDING_LANDING_TITLE: "Answer a few questions to customize your experience", ONBOARDING_LANDING_SUBTITLE: "Almost there!", ONBOARDING_MODAL_LANDING_TITLE: "Let's start by customizing your experience", ONBOARDING_MODAL_LANDING_SUBTITLE: "Welcome to !!{guildName}!!!", ONBOARDING_CHOOSE_ONE_OPTION: "Select an option.", ONBOARDING_CHOOSE_ALL_OPTIONS: "Choose all that apply.", ONBOARDING_QUESTION_COUNT: "Question {currentQuestion, number} of {questionCount, number}", ONBOARDING_REQUIRED_QUESTION: "This is a required question.", ONBOARDING_HELP_TEXT_ADD_CHANNELS: "You will be added to {count, plural, =1 {$[!!{channel1}!!](itemHook).} =2 {$[!!{channel1}!!](itemHook) and $[!!{channel2}!!](itemHook).} other {$[!!{channel1}!!](itemHook), $[!!{channel2}!!](itemHook), and {extraCount, plural, one {1 other} other {{extraCount} others}}.}}", ONBOARDING_HELP_TEXT_ADD_ROLES: "You will receive the {count, plural, =1 {$[!!{role1}!!](itemHook) role.} =2 {$[!!{role1}!!](itemHook) and $[!!{role2}!!](itemHook) roles.} other {$[!!{role1}!!](itemHook), $[!!{role2}!!](itemHook), and {extraCount, plural, one {1 other role} other {{extraCount} other roles}}.}}", ONBOARDING_HELP_TEXT_ADD_ROLES_ALSO: "You will also receive the {count, plural, =1 {$[!!{role1}!!](itemHook) role.} =2 {$[!!{role1}!!](itemHook) and $[!!{role2}!!](itemHook) roles.} other {$[!!{role1}!!](itemHook), $[!!{role2}!!](itemHook), and {extraCount, plural, one {1 other role} other {{extraCount} other roles}}.}}", ONBOARDING_OPTION_ROLE_COUNTS: "**+{memberCount}** people in common", ONBOARDING_RULES_STEP: "One last step!", ONBOARDING_RULES_TITLE: "Read & Agree to Server Rules", ONBOARDING_RULES_AGREE_AND_FINISH: "Agree and Finish \uD83C\uDF89", DROPDOWN_OPTIONS_TITLE: "Answers", DROPDOWN_OPTIONS_EMPTY: "No answers selected.", START_ONBOARDING: "Start Onboarding", ONBOARDING_ERROR_PAGE_TEXT: "Welcome! You must complete Onboarding to view this community.", NO_GUILDS_HEADER: "Ready for a next-level group chat?", NO_GUILDS_SUBHEADER: "Build your community with organized conversations, spontaneous hangouts, and powerful customization features!", GUILD_NO_CHANNELS_HEADER: "No channels here", GUILD_NO_CHANNELS_SUBHEADER: "This server might be empty or you don’t have access to any channels.", GUILD_CREATE_CHANNEL_CTA: "Create a Channel", GUILD_NO_UNREADS_HEADER: "All caught up!", GUILD_NO_UNREADS_SUBHEADER: "You don't have any unread messages.", NOTIFICATION_PRESET_1: "All Messages", NOTIFICATION_PRESET_2: "@Mentions", NOTIFICATION_PRESET_3: "Nothing", NOTIFICATION_PRESET_CUSTOM: "Custom", NOTIFICATION_PRESET_CUSTOM_DESCRIPTION: "You are changing settings manually.", NOTIFICATION_SETTINGS_USE_PRESET: "Use Presets", NOTIF_MIGRATION_SETTINGS_TITLE: "New Unreads Setting (Experimental)", NOTIF_MIGRATION_SETTINGS_SUBTITLE: "Turns off the new unread setting that allows you to pick which channels are most important in a server.", NOTIF_MIGRATION_SETTINGS_CONFIRM_BODY: "This will turn off the the new unread setting and restore *all* of your notification settings to a backup created on {date, date, medium}", NOTIF_MIGRATION_SETTINGS_CONFIRM_ACTION: "Turn Off", NOTIF_MIGRATION_INTRO_TAB: "1. What's New", NOTIF_MIGRATION_CUSTOMIZE_TAB: "2. Choose Servers", NOTIF_MIGRATION_TIPS_TAB: "3. Apply Changes", NOTIF_MIGRATION_INTRO_TITLE: "Discord notifications just got better!", NOTIF_MIGRATION_INTRO_SUB_TITLE: "We added a new setting to cut through the noise and stay focused on what's important.", NOTIF_MIGRATION_INTRO_CHANNEL_1: "announcements", NOTIF_MIGRATION_INTRO_CHANNEL_2: "general", NOTIF_MIGRATION_INTRO_CHANNEL_3: "random", NOTIF_MIGRATION_INTRO_CHANNEL_4: "introductions", NOTIF_MIGRATION_INTRO_CHANNEL_5: "mods-only", NOTIF_MIGRATION_INTRO_CHANNEL_6: "jokes", NOTIF_MIGRATION_INTRO_CHANNEL_7: "chatter", NOTIF_MIGRATION_INTRO_BEFORE: "Before", NOTIF_MIGRATION_INTRO_AFTER: "After", NOTIF_MIGRATION_INTRO_TIP_BEFORE1: "Every server is unread for any new message.", NOTIF_MIGRATION_INTRO_TIP_BEFORE2: "Every channel is highlighted for each new message.", NOTIF_MIGRATION_INTRO_TIP_AFTER1: "Server is unread only when there’s a message from channels you care about, like #announcements.", NOTIF_MIGRATION_INTRO_TIP_AFTER2: "New messages from channels you don’t care about are de-emphasized.", NOTIF_MIGRATION_CUSTOMIZE_TITLE: "Choose servers to update", NOTIF_MIGRATION_CUSTOMIZE_SUB_TITLE: "Your notification settings will be updated based on what channels you use the most.", NOTIF_MIGRATION_CUSTOMIZE_SECTION1_TITLE: "Selected", NOTIF_MIGRATION_CUSTOMIZE_SECTION1_SUBTITLE: "You will only be notified for important channels and mentions.", NOTIF_MIGRATION_CUSTOMIZE_SECTION2_TITLE: "Unselected", NOTIF_MIGRATION_CUSTOMIZE_SECTION2_SUBTITLE: "Your settings will not be changed.", NOTIF_MIGRATION_BACKUP: "You can undo this later in Settings > Notifications.", NOTIF_MIGRATION_GUILD_TOOLTIP_BUSY: "Busy server", NOTIF_MIGRATION_GUILD_TOOLTIP_QUIET: "Quiet server", NOTIF_MIGRATION_GUILD_TOOLTIP_ALOT: "You visit a lot", NOTIF_MIGRATION_GUILD_TOOLTIP_ALITTLE: "You visit occassionally", NOTIF_MIGRATION_GUILD_TOOLTIP_MUTED: "Muted", NOTIF_MIGRATION_GUILD_TOOLTIP_NOT_MUTED: "Not muted", NOTIF_MIGRATION_TIPS_TITLE: "{count, plural, =0 {No servers updated.} one {1 server updated!} other {{count} servers updated!}}", NOTIF_MIGRATION_TIPS_SUB_TITLE: "Here’s how you can change your settings in the future.", NOTIF_MIGRATION_TIPS_TAB1: "Server Notifications", NOTIF_MIGRATION_TIPS_TAB2: "Channel Notifications", NOTIF_MIGRATION_TIPS_TAB1_TIP2: "Choose @Mentions to get notified for only mentions and important channels.", NOTIF_MIGRATION_TIPS_TAB2_TIP1: "Choose @Mentions to make a channel less overwhelming.", NOTIF_MIGRATION_TIPS_TAB2_TIP2: "Choose Custom to control notification and unread settings individually.", NOTIF_MIGRATION_ERROR: "Looks like something went wrong! We'll try again the next time you launch Discord.", APP_DIRECTORY: "App Directory", APP_DIRECTORY_LISTING_VIEW_ALL_BUTTON: "View All", APP_DIRECTORY_LISTING_ADD_BUTTON: "Add", APP_DIRECTORY_GUILD_COUNT: "in {guildCount} servers", APP_DIRECTORY_MUTUAL_GUILD_COUNT: "in {mutualGuildCount, plural, =1 {1 mutual server} other {{mutualGuildCount} mutual servers}}", APP_DIRECTORY_GUILD_COUNT_WITH_MUTUALS: "in {mutualGuildCount, plural, =1 {1 mutual server} other {{mutualGuildCount} mutual servers}} + {nonMutualGuildCount} more", APP_DIRECTORY_GUILD_COUNT_PLUS_MUTUALS_TOOLTIP: "This app is also in !!{appNames}!!", APP_DIRECTORY_ALL_CATEGORY: "All", APP_DIRECTORY_ERROR_HEADING: "Uh oh, something went wrong", APP_DIRECTORY_ERROR_BODY: "Try again later", APP_DIRECTORY_CONFUSED_CLYDE_IMAGE_ALT: "Confused bot", APP_DIRECTORY_FIXING_DABATOUILLE_IMAGE_ALT: "Bot owner working on their mouse bot", APP_DIRECTORY_PARTNER: "Partner", APP_DIRECTORY_LISTING_CARD_BUTTON_A11Y_LABEL: "View App, !!{name}!!", APP_DIRECTORY_CATEGORY_BUTTON_A11Y_LABEL: "View App Category, !!{categoryName}!!", APP_DIRECTORY_HERO_HEADING: "Customize your server with Apps", APP_DIRECTORY_HERO_DABATOUILLE_IMAGE_ALT: "Cheerful mouse bot", APP_DIRECTORY_GALLERY_COLLECTION_VIEW_APP_CTA: "View App", APP_DIRECTORY_HOME_LEARN_MORE_BANNER_HEADING: "Can't find what you're looking for?", APP_DIRECTORY_HOME_LEARN_MORE_BANNER_BODY: "Maybe it's time to make your own Discord app!", APP_DIRECTORY_HOME_LEARN_MORE_BANNER_CTA: "Learn More", APP_DIRECTORY_HOME_NEW_TO_APPS_BANNER_HEADING: "New to apps?", APP_DIRECTORY_HOME_NEW_TO_APPS_BANNER_BODY: "Check out our starter guide to get familiar with all the cool things apps can do!", APP_DIRECTORY_HOME_NEW_TO_APPS_BANNER_CTA: "Learn More", APP_DIRECTORY_PROFILE_SHARE_BUTTON: "Copy Link", APP_DIRECTORY_PROFILE_DESCRIPTION_HEADING: "Overview", APP_DIRECTORY_PROFILE_COMMANDS_HEADING: "Popular Slash Commands", APP_DIRECTORY_PROFILE_LANGUAGES_HEADING: "Supported Languages", APP_DIRECTORY_PROFILE_RELATED_APPS_HEADING: "You might also like", APP_DIRECTORY_PROFILE_CATEGORIES_HEADING: "Categories", APP_DIRECTORY_PROFILE_SERVER_HEADING: "Support Server", APP_DIRECTORY_PROFILE_LINKS_HEADING: "Links", APP_DIRECTORY_PROFILE_REQUIRED_PERMISSIONS_HEADING: "Permissions", APP_DIRECTORY_PROFILE_REQUIRED_PERMISSIONS_SUB_HEADING: "Required Permissions", APP_DIRECTORY_PROFILE_TERMS_LINK: "Terms of Service", APP_DIRECTORY_PROFILE_PRIVACY_LINK: "Privacy Policy", APP_DIRECTORY_PROFILE_EMPTY_HEADING: "No match found", APP_DIRECTORY_PROFILE_SHOW_MORE: "Show more", APP_DIRECTORY_PROFILE_SHOW_LESS: "Show less", APP_DIRECTORY_PROFILE_IMAGE_CAROUSEL_ALT: "Image {index} of {totalImages} for the {name} application", APP_DIRECTORY_PROFILE_IMAGE_DEFAULT_ALT: "User-submitted image", APP_DIRECTORY_PROFILE_DATA_ACCESS_HEADING: "Data Access", APP_DIRECTORY_PROFILE_DATA_ACCESS_INTENTS_LIST_HEADING: "This app can access the following data in the server:", APP_DIRECTORY_PROFILE_DATA_ACCESS_MESSAGE_CONTENT_HEADING: "Read Messages", APP_DIRECTORY_PROFILE_DATA_ACCESS_MESSAGE_CONTENT_BODY: "Can access messages in the server and read their contents.", APP_DIRECTORY_PROFILE_DATA_ACCESS_GUILD_PRESENCES_HEADING: "Presence", APP_DIRECTORY_PROFILE_DATA_ACCESS_GUILD_PRESENCES_BODY: "Can see online status of server members and what they are playing, watching, or listening to.", APP_DIRECTORY_PROFILE_DATA_ACCESS_GUILD_MEMBERS_HEADING: "Members", APP_DIRECTORY_PROFILE_DATA_ACCESS_GUILD_MEMBERS_BODY: "Can see who's in the server and their roles, nicknames, and permission changes.", APP_DIRECTORY_PROFILE_DATA_ACCESS_BASELINE: "All apps can access a set of baseline data. Please visit the [Help Center]({helpCenterUrl}) to learn more.", APP_DIRECTORY_PROFILE_DATA_ACCESS_PRIVACY_POLICY_V2: "For more information about this app's privacy practices, see the developer's [privacy policy](onClick).", APP_DIRECTORY_PROFILE_TAB_GENERAL: "General", APP_DIRECTORY_PROFILE_TAB_IMAGES: "Images", APP_DIRECTORY_PROFILE_TAB_PREMIUM: "Premium", APP_DIRECTORY_PROFILE_TAB_PRIVACY: "Privacy", APP_DIRECTORY_SEARCH_PLACEHOLDER: "Search thousands of apps", APP_DIRECTORY_EMPTY_SEARCH_HEADING: "No matches found", APP_DIRECTORY_EMPTY_SEARCH_SUBHEADING: "Try another search", APP_DIRECTORY_EMPTY_CATEGORY_SEARCH_HEADING: "No matches found in {categoryName}", APP_DIRECTORY_EMPTY_CATEGORY_SEARCH_SUBHEADING: "Try another search or $[see results from all categories](viewAllHook)", APP_DIRECTORY_JOIN_SERVER_LABEL: "Join the support server", APP_DIRECTORY_PROFILE_UTILITIES_A11Y_LABEL: "Application Directory Profile Actions", APP_DIRECTORY_MUSIC_CATEGORY: "Music", APP_DIRECTORY_ACTIVITY_LABEL: "Activity", APP_DIRECTORY_CONNECTION_LABEL: "Connection", APP_DIRECTORY_SHORT_GUILD_COUNT: "{guildCount} servers", APP_DIRECTORY_MUSIC_BANNER_TITLE: "Music", APP_DIRECTORY_MUSIC_BANNER_HEADER: "Discord Loves Music!", APP_DIRECTORY_MUSIC_BANNER_CONTENT: "These apps offer great ways to discover new music, share what you’re listening to, and listen together with your friends.", APP_DIRECTORY_MUSIC_FOOTER_HEADER: "Building a music app?", APP_DIRECTORY_MUSIC_FOOTER_CONTENT: "Request to be included on this page.", APP_DIRECTORY_MUSIC_FOOTER_CTA: "Request", APP_DIRECTORY_SPOTIFY_TITLE: "Spotify", APP_DIRECTORY_SPOTIFY_DESCRIPTION: "Connect your Spotify account with Discord.\n\nShare what you're listening to, play Spotify tracks, and listen along with your friends", APP_DIRECTORY_IPP_HEADER: "Introducing App Directory", APP_DIRECTORY_IPP_SECONDARY_HEADER: "Search, browse, and explore thousands of apps", APP_DIRECTORY_IPP_CUSTOMIZATION: "Customize and personalize your server", APP_DIRECTORY_IPP_AUTOMATION: "Automate useful tasks and free up time", APP_DIRECTORY_IPP_FUN: "Add fun and delight to your community", APP_DIRECTORY_COACHMARK_HEADER: "Finding the App Directory", APP_DIRECTORY_COACHMARK: "You can find the App Directory at any point under Server Settings!", APP_DIRECTORY_PROFILE_EMBED_HEADER: "Invite app to server", APP_DIRECTORY_PROFILE_EMBED_GUILD_COUNT: "in {guildCount} servers", APP_DIRECTORY_PROFILE_EMBED_INVALID_HEADER: "Oops, this link doesn't work...", APP_DIRECTORY_PROFILE_EMBED_INVALID_INFO_TITLE: "Invalid Link", APP_DIRECTORY_PROFILE_EMBED_INVALID_INFO_BODY: "Try sending another one!", APP_DIRECTORY_PROFILE_EMBED_RESOLVING_HEADER: "Resolving Application", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_TITLE_V2: "Welcome to **{tier}**", APPLICATION_GUILD_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_SUBTITLE: "You now have access to all **{tier}** tier benefits.", APPLICATION_USER_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_SUBTITLE: "You now have access to the following in all servers with **{applicationName}**.", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_BENEFITS_PREVIEW: "A few of your benefits", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_DONE_BUTTON: "Done", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_CONTINUE_BUTTON: "Continue", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_CANCEL_BUTTON: "Cancel", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_TITLE_V2: "**Welcome to {tierName}!**", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_SUBTITLE: "Congrats! You now have access to {benefits}.", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_OPEN_DISCORD_BUTTON: "Open Discord", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_DONE_BUTTON: "Done", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_CONTINUE_BUTTON: "Continue", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_CANCEL_BUTTON: "Cancel", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_EXCLUSIVE_CHANNELS_SUBTITLE: "{commandCount, plural, one {1 exclusive command} other {# exclusive commands}}", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_BENEFITS_SUBTITLE: "{benefitCount, plural, one {1 benefit} other {# benefits}}", APPLICATION_SUBSCRIPTIONS_CANNOT_MANAGE_SUBSCRIPTION: "You can't manage the subscription", APPLICATION_USER_SUBSCRIPTION_ALREADY_SUBSCRIBED: "You are already subscribed to {tierName}", ONE_APPLICATION_SUBSCRIPTION_EXPIRATION_CHANNEL_NOTICE_CONTENT: "Your subscription to {a} has expired. Don't lose out on your server's favorite features!", TWO_APPLICATION_SUBSCRIPTION_EXPIRATION_CHANNEL_NOTICE_CONTENT: "Your subscriptions to {a} and {b} have expired. Don't lose out on your server's favorite features!", THREE_APPLICATION_SUBSCRIPTION_EXPIRATION_CHANNEL_NOTICE_CONTENT: "Your subscriptions to {a}, {b}, and {c} have expired. Don't lose out on your server's favorite features!", MORE_APPLICATION_SUBSCRIPTION_EXPIRATION_CHANNEL_NOTICE_CONTENT: "Several subscriptions have expired. Don't lose out on your server's favorite features!", APPLICATION_SUBSCRIPTION_EXPIRATION_CHANNEL_NOTICE_CTA: "Resubscribe", APPLICATION_SUBSCRIPTION_PREMIUM: "Premium", APPLICATION_SUBSCRIPTION_TIER_EXCLUSIVE_COMMANDS_SECTION_TITLE: "Exclusive Commands", APPLICATION_SUBSCRIPTION_TIER_ADDITIONAL_BENEFITS_SECTION_TITLE: "Additional Benefits", APPLICATION_SUBSCRIPTION_TIER_SHOW_MORE_DESCRIPTION: "Show More", APPLICATION_SUBSCRIPTION_TIER_SHOW_LESS_DESCRIPTION: "Show Less", APPLICATION_SUBSCRIPTION_TIER_REVIEW_SUBSCRIBE_LABEL: "Subscribe", APPLICATION_SUBSCRIPTION_TIER_REVIEW_CANCELED_LABEL: "Canceled", APPLICATION_SUBSCRIPTION_TIER_REVIEW_CURRENT_TIER_LABEL: "Current Tier", APPLICATION_SUBSCRIPTION_AMOUNT_PER_PERIOD: "{amount}/{period}", APPLICATION_SUBSCRIPTION_FREE: "Free", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_BENEFITS_TITLE_V2: "**{tier}**", APPLICATION_GUILD_SUBSCRIPTION_PURCHASE_MODAL_BENEFITS_SUBTITLE: "By subscribing, you will unlock benefits for {guildName}", APPLICATION_USER_SUBSCRIPTION_PURCHASE_MODAL_BENEFITS_SUBTITLE: "By subscribing, you will unlock {tier}'s benefits in any server", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_BENEFITS_LITE_TITLE_V2: "**{tier}**", APPLICATION_SUBSCRIPTION_PURCHASE_MODAL_BENEFITS_LITE_SUBTITLE: "By subscribing, you will unlock benefits for {guildName}", APPLICATION_USER_SUBSCRIPTION_PURCHASE_MODAL_BENEFITS_LITE_SUBTITLE: "By subscribing, you will unlock benefits for yourself", APPLICATION_SUBSCRIPTION_BILLING_STEP_SUBSCRIPTION_DETAILS: "Subscription Details", APPLICATION_SUBSCRIPTION_PAYMENT_CHOOSE_SERVER_TITLE: "Choose a server", APPLICATION_SUBSCRIPTION_PAYMENT_CHOOSE_SERVER_SUBTITLE: "Only apps already added to servers may be upgraded", APPLICATION_SUBSCRIPTION_GUILD_PICKER_PLACEHOLDER: "Select a server", MONTHLY_APPLICATION_SUBSCRIPTION_V2: "Monthly Subscription (!!{tier}!!)", APPLICATION_SUBSCRIPTION_FROM_DELETED_APPLICATION: "Premium subscription from a deleted application", APPLICATION_SUBSCRIPTION_NO_GUILD_AVAILABLE: "This app is not in any of your servers", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_TITLE: "Cancelled Premium Subscription", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_SUBTITLE: "Let us know why you’re cancelling", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_ANSWER_CHOICE_NOT_USING_ENOUGH: "Not using it enough", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_ANSWER_CHOICE_TOO_EXPENSIVE: "Too expensive", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_ANSWER_CHOICE_NOT_WORTH: "Not enough premium features/not worth it", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_ANSWER_CHOICE_NOT_SURE_HOW_TO_USE: "Not sure how to use premium features", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_ANSWER_CHOICE_OTHER: "Other", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_DONT_SHOW_AGAIN: "Don’t show me this again", APPLICATION_SUBSCRIPTION_CANCELLATION_SURVEY_OTHER_PLACEHOLDER: "Please provide details here", APPLICATION_GUILD_SUBSCRIPTION_LISTING_HEADER: "Subscribe for your server", APPLICATION_GUILD_SUBSCRIPTION_LISTING_DETAILS: "Unlock premium features for all members of your server", APPLICATION_USER_SUBSCRIPTION_LISTING_HEADER: "Subscribe for yourself", APPLICATION_USER_SUBSCRIPTION_LISTING_DETAILS: "Get access to {applicationName}'s premium features in any server", APPLICATION_USER_SUBSCRIPTION_NO_SHARED_SERVER_WARNING_TITLE: "You don't share any servers with {applicationName}", APPLICATION_USER_SUBSCRIPTION_NO_SHARED_SERVER_WARNING_BODY: "You can still subscribe, but you won't be able to use this app until you add it to one of your servers.", SYSTEM_MESSAGE_APPLICATION_SUBSCRIPTION_PURCHASE: "$[!!{username}!!](usernameHook) upgraded !!{applicationName}!! to premium for this server! \uD83C\uDF89", SYSTEM_MESSAGE_APPLICATION_SUBSCRIPTION_PURCHASE_FROM_DELETED_APPLICATION: "$[!!{username}!!](usernameHook) upgraded a deleted application to premium for this server! \uD83C\uDF89", SYSTEM_MESSAGE_APPLICATION_SUBSCRIPTION_PURCHASE_MOBILE: "[!!{username}!!](usernameOnClick) upgraded !!{applicationName}!! to premium for this server! \uD83C\uDF89", SYSTEM_MESSAGE_APPLICATION_SUBSCRIPTION_PURCHASE_FROM_DELETED_APPLICATION_MOBILE: "[!!{username}!!](usernameOnClick) upgraded a deleted application to premium for this server! \uD83C\uDF89", APPLICATION_USER_SUBSCRIPTIONS_TITLE: "Premium Apps", APPLICATION_USER_SUBSCRIPTIONS_DESCRIPTION: "Premium app subscriptions are billed separately. They may have different renewal dates and payment methods.", APPLICATION_MANAGE_SUBSCRIPTIONS_BUTTON: "Manage Subscriptions", APPLICATION_ACTIVE_USER_SUBSCRIPTIONS_DESCRIPTION: "You have **{numSubscriptions} active app {numSubscriptions, plural, =1 {subscription} other {subscriptions}}**", APPLICATION_MANAGE_SUBSCRIPTION_PAGE_BACK_CTA: "Your Subscriptions", APPLICATION_MANAGE_SUBSCRIPTION_PAGE_TITLE: "Premium App Subscriptions", APPLICATION_MANAGE_SUBSCRIPTION_PAGE_DESCRIPTION: "Upgrade how apps work in your servers by purchasing premium features from developers.", APPLICATION_MANAGE_SUBSCRIPTION_CARD_APPLICATION_NAME_UNAVAILABLE: "Application Name Unavailable", APPLICATION_MANAGE_SUBSCRIPTION_CARD_IN_GUILD: "in {guildName}", APPLICATION_MANAGE_SUBSCRIPTION_CARD_PERSONAL_SUBSCRIPTION: "Personal subscription", APPLICATION_MANAGE_SUBSCRIPTION_CARD_GUILD_NAME_UNAVAILABLE: "Server Name Unavailable", APPLICATION_MANAGE_SUBSCRIPTION_DELETED_WARNING: "This subscription has been discontinued by the app developer. You will not be charged next billing cycle", APPLICATION_MANAGE_SUBSCRIPTION_INFO_SUBSCRIPTION_ENDED: "Subscription ended", APPLICATION_MANAGE_SUBSCRIPTION_INFO_CURRENT_PERIOD_END_DATE: "{timestamp, date, short}", APPLICATION_MANAGE_SUBSCRIPTION_INFO_SUBSCRIBED_SINCE_DATE: "{timestamp, date, short}", APPLICATION_MANAGE_SUBSCRIPTION_INFO_SUBSCRIPTION_ENDS: "Subscription ends", APPLICATION_MANAGE_SUBSCRIPTION_INFO_PRICE: "Monthly Cost", APPLICATION_MANAGE_SUBSCRIPTION_INFO_SUBSCRIBED_SINCE: "Subscribed since", APPLICATION_MANAGE_SUBSCRIPTION_PAYMENT_METHOD_LABEL: "Payment Method", APPLICATION_MANAGE_SUBSCRIPTION_MANAGE_OPTIONS_LABEL: "Manage Subscription", APPLICATION_MANAGE_SUBSCRIPTION_MANAGE_OPTIONS_CANCEL: "Cancel my subscription", APPLICATION_MANAGE_SUBSCRIPTION_MANAGE_OPTIONS_RESTART: "Restart my subscription", APPLICATION_CANCEL_SUBSCRIPTION_MODAL_CANCEL_CTA: "Cancel Subscription", APPLICATION_CANCEL_SUBSCRIPTION_MODAL_NEVERMIND_CTA: "Nevermind", APPLICATION_CANCEL_SUBSCRIPTION_MODAL_TITLE_V2: "**{tier}**", APPLICATION_CANCEL_SUBSCRIPTION_PREMIUM_BENEFITS: "Premium Benefits", APPLICATION_MANAGE_SUBSCRIPTION_CANCELED: "Canceled", APPLICATION_MANAGE_SUBSCRIPTION_PAST_DUE: "Payment Due", APPLICATION_CANCEL_SUBSCRIPTION_MODAL_HEADER: "Confirm cancellation", APPLICATION_CANCEL_GUILD_SUBSCRIPTION_MODAL_DESCRIPTION: "Are you sure you want to cancel? On {timestamp, date, medium}, {guildName} will lose access to benefits like:", APPLICATION_CANCEL_USER_SUBSCRIPTION_MODAL_DESCRIPTION: "Are you sure you want to cancel? On {timestamp, date, medium}, you will lose access to benefits like:", APPLICATION_SUBSCRIPTION_TOGGLE_SECTION_LABEL: "Expand/collapse section", APPLICATION_SUBSCRIPTION_USER_SUBSCRIPTION_PAST_DUE_WARNING: "Your current subscription is past due. Please update your payment method.", APPLICATION_SUBSCRIPTION_PURCHASE_CONFIRMATION_TITLE: "**You now have {tier}!**", APPLICATION_SUBSCRIPTION_PURCHASE_CONFIRMATION_SUBTITLE: "You can start using your premium features now! Your subscription will renew on {timestamp, date, medium}", APPLICATION_USER_SUBSCRIPTION_PURCHASE_TITLE: "Personal Subscription", APPLICATION_USER_SUBSCRIPTION_PURCHASE_SUBTITLE: "You are purchasing a personal subscription. This will give you access to premium features in any server with {applicationName}.", BUY_ONE_GET_ONE_FREE: "Buy One, Get One Free", BUY_ONE_GET_ONE_FREE_NEWLINE: "Buy One,\n\nGet One Free", BUY_ONE_GET_ONE_MONTH_FREE: "Buy One, Get One Month Free", BUY_ONE_GET_ONE_MONTH_FREE_NEWLINE: "Buy One,\n\nGet One Month Free", OFFER_ENDS_IN: "Offer Ends In {hours}:{minutes}:{seconds}", OFFER_ENDS_IN_DAYS: "Offer Ends In {days, plural, =1 {# Day} other {# Days}}", OFFER_ENDS_ON_DATE: "Offer Ends {date}", BOGO_SUPERCHARGE_YOUR_EXPERIENCE: "Supercharge your Discord experience with this limited time Nitro deal.", SUBSCRIBE_NOW_FREE_MONTH: "Subscribe now and get a free month of Nitro.", BOGO_VALUE_PROP: "Subscribe now and get a free month. Hurry, offer ends soon!", BOGO_LIMITED_TIME_VALUE_PROP: "Limited Time Deal! Buy Nitro and get one month free.", BOGO_HURRY_UP_OFFER_ENDS_ON_DATE: "Hurry up, the offer ends on {date}! [Learn more.]({helpdeskArticle})", BOGO_HURRY_UP_OFFER_ENDS_ON_DATE_WITHOUT_LINK: "Hurry up, the offer ends on {date}!", RULES_AND_RESTRICTIONS_APPLY: "Rules and restrictions apply.", BOGO_TERMS_APPLY: "Terms apply.", NITRO_BADGE_TEXT: "Offer", ENJOY_A_FREE_MONTH: "Enjoy a free month with your purchase!", BOGO_CHANGE_LOG_TITLE: "Upgrade your Discord experience with Nitro. Subscribe now and get a free month.", BOGO_CHANGE_LOG_STREAM_SUBTITLE: "Enjoy crystal clear streams", BOGO_CHANGE_LOG_STREAM_BODY: "With full HD resolution, every gameplay and hangout is smooth and clear for you and your friends.", BOGO_CHANGE_LOG_FILE_SUBTITLE: "Cheer, roast, and meme like never before", BOGO_CHANGE_LOG_FILE_BODY_INCREASE: "With {premiumMaxSize} file uploads and expanded emoji & stickers, bring on the fun with legendary reactions.", BOGO_CHANGE_LOG_BOOST_SUBTITLE: "Support your favorite server", BOGO_CHANGE_LOG_BOOST_BODY: "With your 2 free Boosts, unlock perks for everyone in your favorite Discord community.", BOGO_CHANGE_LOG_MORE: "...and so much more!", BOGO_CHANGE_LOG_REDEEM: "Redeem Offer", BOGO_ANNOUNCEMENT_MODAL_HEADER: "Buy Nitro, get a month free!", BOGO_ANNOUNCEMENT_MODAL_SUBHEADER: "Enjoy the Nitro days of summer with a free month and thrilling perks", BOGO_ANNOUNCEMENT_MODAL_REMIXING_CARD_HEADER: "Remix", BOGO_ANNOUNCEMENT_MODAL_REMIXING_CARD_BODY_FORMATTED: "Make meme masterpieces with Remix. [Learn more.]({helpCenterLink})", BOGO_ANNOUNCEMENT_MODAL_THEMES_CARD_HEADER: "Color Themes", BOGO_ANNOUNCEMENT_MODAL_THEMES_CARD_BODY: "Style your Discord with a new look.", BOGO_ANNOUNCEMENT_MODAL_SOUNDBOARD_CARD_HEADER: "Soundboard", BOGO_ANNOUNCEMENT_MODAL_SOUNDBOARD_CARD_BODY_FORMATTED: "Use your favorite sounds across servers. Quack.", BOGO_ANNOUNCEMENT_MODAL_UPGRADE_HEADER: "Buy 1 or Upgrade, Get 1 Month Free", BOGO_BUY_HEADLINE: "Buy Nitro & Get 1 Month Free!", BOGO_UPGRADE_HEADLINE: "Upgrade for 1 Free Month!", BOGO_CLAIM_OFFER: "Claim Offer", BOGO_UNTIL_OFFER_ENDS: "{hours}:{minutes}:{seconds} Until Offer Ends", BOGO_UNTIL_OFFER_ENDS_DAYS: "{days, plural, =1 {# Day} other {# Days}} Until Offer Ends", BOGO_PERKS_SUBTITLE_NON_SUB_FORMATTED: "WOO! Unleash the fun this summer when you get Nitro. [Learn more.]({helpCenterLink})", BOGO_PERKS_SUBTITLE_SUB_FORMATTED: "Unleash more fun this summer when you upgrade Nitro. [Learn more.]({helpCenterLink})", BOGO_PILL: "Buy 1, Get 1", Q4_DROP_WHATS_NEW_EARLY_ACCESS_CARD_TITLE: "Early Access", Q4_DROP_WHATS_NEW_EARLY_ACCESS_CARD_SUBTITLE: "Be the first to try some of our newest Discord features. Now including early access to Clips!", Q4_DROP_WHATS_NEW_EARLY_ACCESS_CARD_SUBTITLE_V2: "Get exclusive access to certain new features before they’re released to everyone.", Q4_DROP_WHATS_NEW_EARLY_ACCESS_CARD_DESCRIPTION_NON_SUB: "Get Nitro to get in on the inside scoop.", Q4_DROP_WHATS_NEW_EARLY_ACCESS_CARD_DESCRIPTION_SUB: "Nitro members, get ready to get your hands on the latest and greatest before everyone else.", Q4_DROP_WHATS_NEW_SPECIAL_PRICING_CARD_TITLE: "Special Member Pricing", Q4_DROP_WHATS_NEW_SPECIAL_PRICING_CARD_SUBTITLE: "Snag sweet discounts on any (or every!) item at the Shop.", Q4_DROP_WHATS_NEW_SPECIAL_PRICING_CARD_SUBTITLE_V2: "Snag sweet discounts on any - or every! - item at the Shop.", Q4_DROP_WHATS_NEW_SPECIAL_PRICING_CARD_DESCRIPTION_NON_SUB: "Join Nitro to take advantage of these exclusive prices.", Q4_DROP_WHATS_NEW_SPECIAL_PRICING_CARD_DESCRIPTION_SUB: "Exclusive savings are reserved for Nitro members only.", Q4_DROP_WHATS_NEW_UNLIMITED_SUPER_REACTIONS_CARD_TITLE: "Unlimited Super Reactions", Q4_DROP_WHATS_NEW_UNLIMITED_SUPER_REACTIONS_CARD_SUBTITLE: "We made Super Reactions unlimited so you can unleash the chaos in your chats.", Q4_DROP_WHATS_NEW_UNLIMITED_SUPER_REACTIONS_CARD_DESCRIPTION_NON_SUB: "Supercharge your own conversations with any tier of Nitro.", Q4_DROP_WHATS_NEW_UNLIMITED_SUPER_REACTIONS_CARD_DESCRIPTION_SUB: "Now available on Nitro and Nitro Basic.", INTERACTION_PREMIUM_UPSELL_CTA: "Upgrade", FOR_YOU: "For You", FOR_YOU_EMPTY_TITLE: "Nothing here yet", FOR_YOU_EMPTY_BODY: "Come back for notifications on events, streams, and more.", REMOVE_NOTIFICATION: "Remove Notification", REMOVE_NOTIFICATION_ERROR: "Error removing notification", USER_SURVEY_ERROR: "Error opening survey", FILTERING_ON_GUILD: "Filtering on **{guild}**", NOTIF_CENTER_ACTIVE_NOW: "Active Now", OK: "OK", MARK_ALL_AS_READ: "Mark All as Read", NOTIF_CENTER_V2_PAST_NOTIFICATIONS: "Past Notifications", NOTIF_CENTER_V2_ALL_CLEARED: "You're all caught up!", NOTIF_CENTER_V2_NO_NEW_NOTIFS: "You have no new notifications.", NOTIF_CENTER_V2_ACCEPT_FRIEND_REQUEST: "Accept", NOTIF_CENTER_V2_IGNORE_FRIEND_REQUEST: "Ignore", NOTIF_CENTER_V2_JOIN_STREAM: "Join Stream", NOTIF_CENTER_V2_SEND_MESSAGE: "Send Message", NOTIF_CENTER_V2_ADD_FRIEND: "Add Friend", NOTIF_CENTER_V2_ADD_FRIEND_TOAST: "Friend request sent", NOTIF_CENTER_V2_ADD_FRIEND_REQUEST_SENT: "You sent {user} a friend request!", NOTIF_CENTER_V2_JOIN_EVENT: "Join Event", NOTIF_CENTER_V2_SEND_REPLY: "Send a Reply", NOTIF_CENTER_V2_FIND_FRIENDS: "Find Friends", NOTIF_CENTER_V2_UPDATE_AVATAR: "Update Avatar", NOTIF_CENTER_V2_MESSAGE_PREVIEW_PLACEHOLDER: "Tap to see message content", HARMFUL_LINK_MESSAGE_BLOCKED_ERROR: "Your message could not be delivered because this message contains a link blocked by Discord. You can learn more here: {helpUrl}.", QUICKSEARCH_RECENT: "Recent", QUICKSEARCH_MEDIA: "Media", QUICKSEARCH_GIFS: "GIFs", QUICKSEARCH_LINKS: "Links", QUICKSEARCH_FILES: "Files", QUICKSEARCH_MESSAGES: "Messages", QUICKSEARCH_PEOPLE: "People", QUICKSEARCH_PINS: "Pins", SERVER_ACTIVITY_STATUS_RESTRICTION: "Share your activity status in this server", SERVER_ACTIVITY_STATUS_RESTRICTION_NOTE: "[Learn more about this setting here.]({helpdeskArticle})", VOICE_CHANNEL_ACTIVITY_STATUS_REDIRECT: "Your activity status is off in this server. [Let friends see or join your activity.](onClick)", WARNING_SCREEN_RECORDING_PERMISSION_TITLE: "Screen Share Permissions", WARNING_SCREEN_RECORDING_PERMISSION_BODY: "Warning! The app doesn't have permission to record your screen. You may get unexpected results until you grant access and restart the app.", MEDIA_VIEWER_REACTION_LABEL: "React", MEDIA_VIEWER_ALT_TEXT_CTA: "ALT", MEDIA_VIEWER_ALT_TEXT_PARTIAL_TITLE: "ALT Text", MEDIA_VIEWER_ALT_TEXT_FULL_TITLE: "Image Description (Alt Text)", REMIXING_TITLE: "Remix", REMIXING_TAG: "REMIX", REMIXING_PERKS_CARD_TITLE: "Remix on Mobile", REMIXING_PERKS_CARD_DESCRIPTION: "Media editing and meme creation, at the speed of Discord.", EARLY_ACCESS: "Early Access", REWARD: "Reward", REMIXING_POST_CTA: "Send", REMIXING_CROP: "Crop media", REMIXING_BACKDROP_EDITOR_TITLE: "Adjust & Crop", REMIXING_FREE_DRAW: "Free draw on media", REMIXING_ADD_TEXT: "Add text to media", REMIXING_ADD_STICKER: "Add sticker to media", REMIXING_ADD_MENTION: "Add a user/role mention to the media", REMIXING_UNDO: "Undo previous change to the canvas", REMIXING_REDO: "Redo previously undone change to the canvas", REMIXING_ROTATE: "Rotate media clockwise", REMIXING_FLIP: "Flip media horizontally", REMIXING_DRAWING_DONE: "Done", REMIXING_EXIT_ALERT_TITLE: "Leave without Saving?", REMIXING_EXIT_ALERT_BODY: "You will lose any unsaved changes to your remix creation if you leave", REMIXING_EXIT_ALERT_STAY_BUTTON: "Keep Remix", REMIXING_EXIT_ALERT_LEAVE_BUTTON: "Discard", REMIXING_UNDO_ALL_ALERT: "Undo All", REMIXING_UNDO_ALL_ALERT_BODY: "You will lose all changes to your remix creation if you undo all.", REMIXING_UNDO_ALL_ALERT_CANCEL_BUTTON: "Cancel", REMIXING_OPEN_ERROR: "Can't open media for remix", SAVE_IMAGE_TO_DEVICE: "Save image to device", REMIXING_ASPECT_RATIO_ORIGINAL: "Original", REMIXING_ASPECT_RATIO_VERTICAL: "Vertical", REMIXING_ASPECT_RATIO_SQUARE: "Square", REMIXING_ASPECT_RATIO_FOUR_THREE: "4:3", REMIXING_ASPECT_RATIO_SIXTEEN_NINE: "16:9", REMIXING_TWO_FINGER_HINT: "Use two fingers to adjust", REMIXING_TOOLTIP_NITRO_EARLY_ACCESS: "NITRO EARLY ACCESS", REMIXING_TOOLTIP_TITLE_REMIX: "Remix Your Images", REMIXING_TOOLTIP_TITLE_MEME_IT: "Meme it. Share it.", REMIXING_TOOLTIP_DESCRIPTION: "Select an image and tap Remix to get started.", REMIXING_TOOLTIP_DESCRIPTION_MEME: "Make memes of anything", REMIXING_TOOLTIP_CTA_TRY_IT_OUT: "Try it out", REMIXING_TOOLTIP_NOT_NOW: "Not Now", REMIXING_MENTIONS_TOOLTIP: "Tap to change the layout", REMIXING_QUARTERSHEET_UNLOCK_WITH_NITRO: "Unlock with Nitro", REMIXING_QUARTERSHEET_CTA_TRY_IT: "Try it", REMIXING_QUARTERSHEET_DESCRIPTION: "Create a memesterpiece in seconds with Remix. Early access now available with Nitro.", REMIXING_QUARTERSHEET_DESCRIPTION_GA: "Create a memesterpiece in seconds with Remix.", REMIXING_DOWNLOAD_APP: "Download the mobile app to make your first remix", REMIXING_LANGUAGE_SUPPORT_WARNING: "Limited characters available. [Learn more.](handleClick)", REMIXING_CAROUSEL_SCROLL_PAGE: "scroll to the next page of colors", REMIXING_DRAWING_COLOR_BLACK: "Black", REMIXING_DRAWING_COLOR_WHITE: "White", REMIXING_DRAWING_COLOR_RED500: "Red", REMIXING_DRAWING_COLOR_BRAND500: "Light Purple", REMIXING_DRAWING_COLOR_YELLOW260: "Yellow", REMIXING_DRAWING_COLOR_GREEN430: "Green", REMIXING_DRAWING_COLOR_ORANGE345: "Orange", REMIXING_DRAWING_COLOR_LIGHT_PURPLE: "Light Purple", REMIXING_DRAWING_COLOR_GREENISH_YELLOW: "Greenish Yellow", REMIXING_DRAWING_COLOR_FADED_GREEN: "Faded Green", REMIXING_DRAWING_COLOR_BABY_BLUE: "Baby Blue", REMIXING_DRAWING_COLOR_LIGHT_PINK: "Light Pink", REMIXING_DRAWING_COLOR_LILAC: "Lilac", REMIXING_DRAWING_COLOR_PINK_TAN: "Pink Tan", REMIXING_DRAWING_COLOR_TAN: "Tan", REMIXING_DRAWING_COLOR_DARK_TAN: "Dark Tan", REMIXING_DRAWING_COLOR_DARK_BLUE: "Dark Blue", REMIXING_DRAWING_COLOR_DARK_RED: "Dark Red", REMIXING_DRAWING_COLOR_BROWN: "Brown", REMIXING_DRAWING_COLOR_DARK_GREEN: "Dark Green", REMIXING_DRAWING_COLOR_DARK_ORANGE: "Dark Orange", REMIXING_DRAWING_COLOR_DARK_PURPLE: "Dark Purple", REMIXING_DRAWING_COLOR_DARK_GOLD: "Dark Gold", REMIXING_DRAWING_COLOR_LIGHT_YELLOW: "Light Yellow", MEDIA_MOSAIC_ALT_TEXT_CTA: "ALT", MEDIA_MOSAIC_ALT_TEXT_POPOUT_TITLE: "Image Description (Alt Text)", OPT_IN_NUX_CHANNELS_TITLE: "Choose your channels", OPT_IN_NUX_CHANNELS_DESCRIPTION: "Customize your channel list and roles so you see just the stuff you care about. Click next to learn what's new.", OPT_IN_NUX_RECENTS_TITLE: "Never Miss a Moment", OPT_IN_NUX_RECENTS_DESCRIPTION: "Important updates like new channels and mentions in hidden channels will appear up top.", OPT_IN_NUX_VOICE_TITLE: "Never Miss a Hangout", OPT_IN_NUX_VOICE_DESCRIPTION: "Voice channels you don't add to your list can be found at the bottom of your channel list.", CHANNEL_OPT_IN: "Add to Channel List", CHANNEL_OPT_OUT: "Remove from Channel List", CHANNEL_OPT_OUT_PARENT_CATEGORY: "Unfollow Channel Category", GUILD_CHANNEL_OPT_IN: "Show All Channels", CHANNEL_OPT_IN_ALL_CHANNELS: "All Channels", FAVORITES: "Favorites", ADD_FAVORITE: "Favorite", REMOVE_FAVORITE: "Unfavorite", REMOVE_FAVORITE_SUGGESTION: "Remove Suggestion", PINNED_CHANNELS: "Pinned Channels", PIN_CHANNEL_TO_TOP: "Pin Channel to Top", UNPIN_CHANNEL: "Unpin Channel", OPT_IN_CHANNEL_NOTICE: "This channel is not on your channel list.", OPT_IN_CHANNEL_NOTICE_VOICE: "This voice channel is not on your channel list.", OPT_IN_CHANNEL_NOTICE_CTA: "Add to Channel List", OPT_IN_CHANNEL_NOTICE_MOBILE_CTA: "+ Add", NEW_MESSAGES_PILL: "{count, plural, one {1 new message} other {{count} new messages}}", NEW_MESSAGES_PILL_ESTIMATED: "{count}+ new messages", SUMMARIES_SHOWN: "Hide Summaries", SUMMARIES_HIDDEN: "Show Summaries", SUMMARIES: "Summaries", SUMMARY_PILL: "Current summary", SUMMARY_PILL_NEXT: "Jump to next summary", SUMMARY_PILL_PREVIOUS: "Jump to previous summary", SUMMARY_EMPTY_STATE_TITLE: "There are no summaries.", SUMMARY_EMPTY_STATE_TEXT: "When there are active conversations, you can check out the summaries here!", SUMMARY_RECENT_SUMMARIES: "Recent Summaries", SUMMARY_SHOW_SIDEBAR: "Show Sidebar", SUMMARY_HIDE_SIDEBAR: "Hide Sidebar", SUMMARY_FEEDBACK: "Was this a good summary?", SUMMARY_NO_SUMMARIES_ALT_TEXT: "A lost bird looking at map", SUMMARIES_VIEW_ALL: "View all summaries", SUMMARIES_NO_SUMMARIES: "No summaries", JUMP_TO_PRESENT_BUTTON_LABEL: "Jump to Present", GUILD_SIDEBAR_HEADER_MOBILE_A11Y_HINT: "double-tap for server options", GUILD_SIDEBAR_CHANNEL_BROWSER: "Browse Channels", GUILD_SIDEBAR_REORDER_DIALOG_TITLE: "Trying to reorder channels?", GUILD_SIDEBAR_REORDER_CONFIRM: "Take Me There", GUILD_SIDEBAR_REORDER_DESCRIPTION: "Turn on **Show All Channels** in your server menu. You can reorder channels when this view is enabled.", GUILD_SIDEBAR_DO_NOT_SHOW_AGAIN: "Do not show again.", CHANNEL_BROWSER_HTML_TITLE: "Browse Channels - !!{guildName}!!", CHANNEL_BROWSER_TITLE: "Browse Channels", CHANNEL_BROWSER_SEARCH_PLACEHOLDER: "Search Channels", CHANNEL_BROWSER_ACTIVE_TEXT: "Active {timeAgo}", CHANNEL_BROWSER_VIEW: "View", CHANNEL_BROWSER_DISABLED_BY_CATEGORY: "You must unfollow this category to add or remove specific channels.", EDIT_ONBOARDING: "Edit Onboarding", HIGHLIGHT: "Highlight", JUMP_TO_BOTTOM: "Jump to Bottom", CHANNEL_BROWSER_SELECT_ALL: "Follow Category", RETURN_TO_CHANNEL: "Return to $[channelName](channelNameHook)", RECENTLY_MESSAGED_SUBTITLE: "You recently chatted", RECENTLY_JOINED_SUBTITLE: "You recently joined", RECENTS_CATEGORY_HEADER: "Suggested", RECENTLY_ACTIVE_CATEGORY_HEADER: "Recently Active", RECENTLY_VISITED_CATEGORY_HEADER: "Recently Visited", VOICE_CHANNELS_CATEGORY_HEADER: "Active Now", VOICE_CHANNELS_CATEGORY_BUTTON_EXPAND: "Show All", VOICE_CHANNELS_CATEGORY_BUTTON_COLLAPSE: "Hide Voice Channels", CLEAR_RECENT_CHANNELS: "Clear", VOICE_CHANNEL_BAR_ACTIVE: "{count} in Voice", GO_LIVE_SUBTITLE: "Screensharing", UNREAD_SETTINGS: "Unread Settings", HIGHLIGHTS_AND_MENTIONS: "Mentions", FORM_LABEL_UNREAD_SETTINGS_OPT_IN: "Configure Unread Settings", FORM_LABEL_UNREAD_SETTINGS_OPT_IN_NOTE: "More granular settings to control when channels should appear as unread.", UNREAD_NOTIFICATION_SETTING_NOTICE: "Should we mark this channel as unread for every new message, instead of only mentions?", UNREAD_NOTIFICATION_SETTING_NOTICE_TITLE: "Mark unread for every message?", UNREAD_NOTIFICATION_SETTING_NOTICE_DESCRIPTION: "The channel will show as unread for every message so you don't miss a thing.", UNREAD_NOTIFICATION_SETTING_NOTICE_ALL_MESSAGES: "Change to all messages", UNREAD_NOTIFICATION_SETTING_NOTICE_MENTION_ONLY: "Change to mention only", NEW_GUILD_EVENTS_ACCESSIBILITY_LABEL: "New Events", OPT_IN_GUILD_NOTICE_TITLE: "Heads up!", OPT_IN_GUILD_NOTICE_DESCRIPTION: "This community now has a customizable Channel List. [Customize](onCustomizeClick) your list further, or go back to All Channels via [Server Settings](onServerSettingsClick).", OPT_IN_GUILD_NOTICE_CTA: "Customize", CHANNEL_BROWSER_NUX_TITLE: "Choose Your Channels", CHANNEL_BROWSER_NUX_DESCRIPTION: "Customize what's on your channel list, so you see just the stuff you care about.", CHANNEL_BROWSER_NUX_DESCRIPTION_2: "**Tip:** Channels with mentions will always appear on your channel list, even if you hide them.", CHANNEL_BROWSER_ADMIN_NUX_TITLE: "Hey admin, make this page less overwhelming for members", CHANNEL_BROWSER_ADMIN_NUX_DESCRIPTION: "Use the new Community Onboarding features to help members pick their channels and roles. Easy to use for you and your community!", CHANNEL_BROWSER_ADMIN_NUX_CTA: "Check it out", CHANNEL_RECOMMENDED: "Recommended", CHANNEL_POPULAR: "Popular", GUILD_ONBOARDING_DEFAULT_CHANNELS_MIN_CHANNELS: "Must include at least {count} channels", GUILD_ONBOARDING_DEFAULT_CHANNELS_MIN_CHATTABLE_CHANNELS: "Must include {count} channels where @everyone can read and send message.", GUILD_ONBOARDING_DEFAULT_CHANNELS_RECOMMENDED_DESCRIPTION: "These are the channels your members read most.", GUILD_ONBOARDING_DEFAULT_CHANNELS_RECOMMENDED_DISMISS_ALL: "Dismiss all", GUILD_ONBOARDING_DEFAULT_CHANNELS_RULES_DISCOURAGED: "We don't recommend adding the rules channel as a Default Channel", GUILD_ONBOARDING_DEFAULT_CHANNELS_VOICE_TOOLTIP: "Voice Channels you don't select will still be available in the Voice Channel section of the channel list.", GUILD_SIDEBAR_CUSTOMIZE_COMMUNITY: "Customize Community", CUSTOMIZE_COMMUNITY_HTML_TITLE: "Customize Community - !!{guildName}!!", CUSTOMIZE_COMMUNITY_TITLE: "Customize Community", CUSTOMIZE_COMMUNITY_EMPTY_HEADER: "There are no customization options yet.", CUSTOMIZE_COMMUNITY_EMPTY_SUBHEADER: "You can add and remove channels from [Browse Channels](onBrowseChannels).", CHANNELS_AND_ROLES: "Channels & Roles", CHANNELS_AND_ROLES_HTML_TITLE: "Channels & Roles - !!{guildName}!!", CUSTOMIZE_COMMUNITY_TAB: "Customize", BROWSE_CHANNELS_TAB: "All Channels", CUSTOMIZE_TAB_TITLE: "Customization Questions", CUSTOMIZE_TAB_SUBTITLE: "Answer questions to get access to more channels and roles.", SERVER_GUIDE: "Server Guide", MEMBER_ACTION_CHAT: "Send a message", MEMBER_ACTION_COMPLETE_MODAL_TEXT: "You're all set!", MEMBER_ACTION_COMPLETE_MODAL_TEXT_WITH_COUNT: "You've explored {count} starter channels, great job!", MEMBER_ACTIONS_READ_RULES_FIRST: "Remember to read the $[Rules](rulesHook) before you talk", MEMBER_ACTIONS_NEXT_STEP: "Next: !!{step}!!", MEMBER_ACTION_COMPLETE_EMPTY_STATE: "You're all set!", MEMBER_ACTION_COMPLETE_EMPTY_STATE_CTA: "Explore the Server", GUILD_ONBOARDING_NAGBAR_MESSAGE: "Introducing Community Onboarding: a better way for members to get roles!", GUILD_ONBOARDING_CHANNEL_NOTICE_TITLE: "Introducing Community Onboarding", GUILD_ONBOARDING_CHANNEL_NOTICE_MESSAGE: "A better way for members to get roles", GUILD_ONBOARDING_NOTICE_TITLE: "Complete Onboarding!", GUILD_ONBOARDING_COMPLETED_TITLE: "Welcome!", GUILD_ONBOARDING_COMPLETED_SUBTITLE: "Start chatting with your new friends!", GUILD_ONBOARDING_NOTICE_SUBTITLE: "Answer a few questions to customize your channels and start chatting.", GUILD_ONBOARDING_COMPLETED_JOINED: "Joined !!{guildName}!!", GUILD_ONBOARDING_COMPLETED_ROLES: "Sharing roles with {numSharedRoleMembers} other members", GUILD_ONBOARDING_PREVIEW_AS_MEMBER: "Preview onboarding as a new member before you enable it!", GUILD_ONBOARDING_PREVIEW_CTA: "Test Onboarding", GUILD_ONBOARDING_SETUP_STEP_SAFETY: "{stepNumber, number}. Safety Check", GUILD_ONBOARDING_SETUP_STEP_CHANNELS: "{stepNumber, number}. Default Channels", GUILD_ONBOARDING_SETUP_STEP_CHANNELS_ADVANCED: "{stepNumber, number}. Default Channels & Pre-join Questions", GUILD_ONBOARDING_SETUP_STEP_WELCOME: "{stepNumber, number}. Welcome Card", GUILD_ONBOARDING_SETUP_STEP_PROMPTS: "{stepNumber, number}. Customization Questions", GUILD_ONBOARDING_SETUP_STEP_PROMPTS_ADVANCED: "{stepNumber, number}. Post-join Questions", GUILD_ONBOARDING_SETUP_STEP_HOME: "{stepNumber, number}. Server Guide", GUILD_ONBOARDING_SETUP_STEP_REVIEW: "{stepNumber, number}. Review", GUILD_ONBOARDING_SETUP_STEP_COUNTER: "{count, number} of {total, number}", GUILD_ONBOARDING_ON: "On", GUILD_ONBOARDING_OFF: "Off", GUILD_ONBOARDING_UPSELL_MODAL_TITLE: "Onboarding: a better way to grant roles", GUILD_ONBOARDING_UPSELL_MODAL_DESCRIPTION: "With Community Onboarding, members answer a few questions and automatically receive roles. Set it up for {guildName} today to improve engagement and retention!", GUILD_ONBOARDING_TESTIMONIAL_DESIGN_BUDDIES: "After Design Buddies replaced our role reaction gating with Onboarding, we saw a 134% increase in retention and significantly $[more new members chatting.](testimonialHook)", GUILD_ONBOARDING_TESTIMONIAL_DUNGEON_SLIMES: "Onboarding streamlines the new user experience, $[breaking down customization barriers](testimonialHook), promoting inclusivity, and delivering a personalized, welcoming experience.", GUILD_ONBOARDING_TESTIMONIAL_HARRY_POTTER: "Onboarding let newbies tailor their own unique experience on the server based on how they wanted to engage. It $[strengthened our retention over 10%](testimonialHook) since enabling!", GUILD_ONBOARDING_TESTIMONIAL_VALORANT: "We gained $[~15,000 members assigning themselves a ping role](testimonialHook) in a month or so. It’s far more effective compared to just having a self assign roles channel.", GUILD_ONBOARDING_TESTIMONIAL_ADMIN_VALORANT: "cal, VALORANT admin", GUILD_ONBOARDING_TESTIMONIAL_ADMIN_DESIGN_BUDDIES: "Grace, Design Buddies founder", GUILD_ONBOARDING_TESTIMONIAL_ADMIN_DUNGEON_SLIMES: "Dr Pigeon, Dungeon Slimes admin", GUILD_ONBOARDING_TESTIMONIAL_ADMIN_HARRY_POTTER: "Howl, Harry Potter admin", GUILD_ONBOARDING_UPSELL_DESCRIPTION: "This new feature lets you customize channels and roles for your new members. Give them the perfect starting experience.", GUILD_ONBOARDING_UPSELL_DESCRIPTION_1: "Choose the top channels that all new members should start with.", GUILD_ONBOARDING_UPSELL_DESCRIPTION_2: "Set up questions that customize their other channels and roles based on their interests.", GUILD_ONBOARDING_UPSELL_DESCRIPTION_3: "A hassle-free way to help your new members succeed and feel welcome.", GUILD_ONBOARDING_UPSELL_DESCRIPTION_4: "Includes added protection from join raids.", GUILD_ONBOARDING_UPSELL_COACHMARK_TITLE: "Set up Community Onboarding!", GUILD_ONBOARDING_UPSELL_COACHMARK_DESCRIPTION: "Customize channels and roles for your new members.", GUILD_ONBOARDING_UPSELL_COACHMARK_CHECK_IT_OUT: "Check it out", GUILD_ONBOARDING_SETUP_LANDING_TITLE: "Welcome your new members with Onboarding!", GUILD_ONBOARDING_SETUP_LANDING_SUBTITLE: "Customize channels and roles for your new members. Give them the perfect starting experience.", GUILD_ONBOARDING_SETUP_LANDING_CTA: "Check it out", GUILD_ONBOARDING_SETUP_LANDING_CHANNELS_TITLE: "Help members pick additional channels and roles", GUILD_ONBOARDING_SETUP_LANDING_CHANNELS_SUBTITLE: "Create customization questions and ask members to answer them before or after joining. Hassle-free and easy to use, for both you and your members!", GUILD_ONBOARDING_SETUP_LANDING_WELCOMECARD_TITLE: "Introduce your community", GUILD_ONBOARDING_SETUP_LANDING_WELCOMECARD_SUBTITLE: "Showcase up to 5 channels on Home to help new members discover all the cool things to do here!", GUILD_ONBOARDING_SETUP_LANDING_ONBOARDING_TITLE: "Choose which channels new members start with", GUILD_ONBOARDING_SETUP_LANDING_ONBOARDING_SUBTITLE: "Give them a set of channels that's just the stuff they care about. Hide any unwanted Archives or bot-spam. Less overwhelming, more chatting!", GUILD_ONBOARDING_SETUP_LANDING_GUIDE_TITLE: "Say hi to every member and help them engage", GUILD_ONBOARDING_SETUP_LANDING_GUIDE_SUBTITLE: "Create a custom welcome message and instructions for getting started. You can also show members resource pages for FAQ, Rules, and more.", GUILD_ONBOARDING_SETUP_LANDING_GUIDE_WELCOME_MESSAGE: "Hi [@username]! I made this server so that nerds like us could have a safe space to be ourselves. So excited to have you here", GUILD_ONBOARDING_SETUP_LANDING_GUIDE_TODO_1_TITLE: "Introduce yourself", GUILD_ONBOARDING_SETUP_LANDING_GUIDE_TODO_2_TITLE: "Share your favorite thing", GUILD_ONBOARDING_SETUP_LANDING_GUIDE_TODO_1_CHANNEL_NAME: "in #introductions", GUILD_ONBOARDING_SETUP_LANDING_GUIDE_TODO_2_CHANNEL_NAME: "in #showcase", GUILD_ONBOARDING_SETUP_EDUCATION_OVERVIEW_TITLE: "Let's create a welcoming new member experience!", GUILD_ONBOARDING_SETUP_EDUCATION_OVERVIEW_SUBTITLE: "In the next few steps, you will set up...", GUILD_ONBOARDING_SETUP_EDUCATION_OVERVIEW_DEFAULT_CHANNELS_TITLE: "$[Default Channels](textHook) that every member starts with.", GUILD_ONBOARDING_SETUP_EDUCATION_OVERVIEW_CUSTOMIZATION_QUESTIONS_TITLE: "$[Customization Questions](textHook) to help your members pick their channels and roles.", GUILD_ONBOARDING_SETUP_EDUCATION_OVERVIEW_SUBTEXT: "Your changes are saved automatically, and these features will not be enabled until you turn it on.", GUILD_ONBOARDING_SETUP_EDUCATION_OVERVIEW_CTA: "Got it!", GUILD_ONBOARDING_SETUP_EDUCATION_DEFAULT_CHANNELS_TITLE: "What are the channels every member should have?", GUILD_ONBOARDING_SETUP_EDUCATION_DEFAULT_CHANNELS_SUBTITLE: "Choose as many defaults as you need. Members can pick more channels from Customization Questions. And we'll show members any new channels you make.", GUILD_ONBOARDING_SETUP_EDUCATION_CUSTOMIZATION_QUESTIONS_TITLE: "Ask questions to help members pick additional channels and roles.", GUILD_ONBOARDING_SETUP_EDUCATION_CUSTOMIZATION_QUESTIONS_SUBTITLE: 'Try using questions like "What do you want to do here?" or "What are your hobbies?" to further customize each member\'s channel list.', GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_TITLE: "What do you want to do in this server?", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_TITLE_TOOLTIP: "What do you want to do here?", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_1: "Discuss cool books", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_1_EMOJI: "Wizard Emoji", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_2: "Join the weekly book club", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_2_EMOJI: "Microphone Emoji", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_3: "Keep up with book news", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_3_EMOJI: "Eyes Emoji", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_SUBTITLE: "You will be added to **@Books** and **#book-chat** channel", GUILD_ONBOARDING_UPSELL_PREVIEW_CHANNELS_SUBTITLE_TOOLTIP: "You will be added to **@Books** and **#book-chat**", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_TITLE: "Top things to do", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_1_CHANNEL: "#lounge", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_1_SUBTITLE: "Chat and hang out with your fellow bookies", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_1_EMOJI: "Magic Wand Emoji", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_2_CHANNEL: "#book-recs", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_2_SUBTITLE: "Share and browse book recommendations!", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_2_EMOJI: "Waving Hand Emoji", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_3_CHANNEL: "#quote-of-the-week", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_3_SUBTITLE: "Discuss great quotes from literary history", GUILD_ONBOARDING_UPSELL_PREVIEW_WELCOMECARD_3_EMOJI: "Hourglass Emoji", GUILD_ONBOARDING_UPSELL_PREVIEW_LANDING_1: "announcements", GUILD_ONBOARDING_UPSELL_PREVIEW_LANDING_2: "introductions", GUILD_ONBOARDING_UPSELL_PREVIEW_LANDING_3: "bot-spam", GUILD_ONBOARDING_UPSELL_PREVIEW_LANDING_4: "book-recs", GUILD_ONBOARDING_UPSELL_PREVIEW_VALUE_TITLE: "Let’s create a welcoming new member experience!", GUILD_ONBOARDING_SETUP_WELCOME_CARD_TITLE: "Welcome Card", GUILD_ONBOARDING_SETUP_REVIEW_SET_UP: "Set up", GUILD_ONBOARDING_SETUP_REVIEW_NUM_DEFAULT_CHANNELS: "You have {numDefaultChannels, plural, =1 {1 Default Channel} other {{numDefaultChannels} Default Channels}}", GUILD_ONBOARDING_SETUP_REVIEW_NUM_DEFAULT_CHANNELS_ADVANCED: "You have {numDefaultChannels, plural, =1 {1 Default Channel} other {{numDefaultChannels} Default Channels}} and at least {numFromQuestions, plural, =1 {1 channels} other {{numFromQuestions} channels}} assigned by questions.", GUILD_ONBOARDING_SETUP_REVIEW_NOT_ENOUGH_DEFAULT_CHANNELS: "You must have {numDefaultChannels} total channels and {numChattableChannels} channels new members can talk in", GUILD_ONBOARDING_SETUP_REVIEW_NUM_STARTER_QUESTIONS: "You have created {numOnboardingPrompts, plural, =0 {no Customization Questions} =1 {1 Customization Question} other {{numOnboardingPrompts} Customization Questions}}", GUILD_ONBOARDING_SETUP_REVIEW_NO_STARTER_QUESTIONS: "You have not set up Customization Questions.", GUILD_ONBOARDING_SETUP_REVIEW_NUM_WELCOME_CHANNELS: "You have {numWelcomeChannels, plural, =0 {no channels} =1 {1 channel} other {{numWelcomeChannels} channels}} in your Welcome Card", GUILD_ONBOARDING_SETUP_REVIEW_NO_WELCOME_CHANNELS: "You have not set up a Welcome Card.", GUILD_ONBOARDING_SETUP_REVIEW_ENABLE_ONBOARDING: "Enable Onboarding", GUILD_ONBOARDING_SETUP_REVIEW_DESCRIPTION: "Push the big blue button to turn on your new member experience!", GUILD_ONBOARDING_SETUP_REVIEW_TITLE: "You're ready to enable", GUILD_ONBOARDING_SETUP_REVIEW_TITLE_INCOMPLETE: "You're missing a few items...", GUILD_ONBOARDING_SETUP_REVIEW_DESCRIPTION_INCOMPLETE: "To enable Onboarding, you must meet these requirements.", GUILD_ONBOARDING_SETUP_PREVIEW: "Preview", GUILD_ONBOARDING_SETUP_PREVIEW_ROLES_WARNING: "Once enabled, getting a role will not bypass a member through verification and Rules. To manually verify members, you can right click a user and select Verify Member, or use the Members tab.", GUILD_ONBOARDING_OVERVIEW_UPDATES_HEADER: "Recent Updates", GUILD_ONBOARDING_OVERVIEW_UPDATES_2: "You can now upload custom images for New Member To Dos and Resource Pages.", GUILD_ONBOARDING_OVERVIEW_UPDATES_3: "Added a custom description option for Resource pages", GUILD_ONBOARDING_OVERVIEW_SUBTITLE: "Give your members a simple starting experience with custom channels, roles, and first steps.", GUILD_ONBOARDING_OVERVIEW_SEE_EXAMPLES: "See examples", GUILD_ONBOARDING_OVERVIEW_TITLE_ENABLED: "Onboarding is Enabled", GUILD_ONBOARDING_OVERVIEW_TITLE_DISABLED: "Onboarding is Disabled", GUILD_ONBOARDING_OVERVIEW_SUBTITLE_ENABLED: "Changes will not take effect until you save.", GUILD_ONBOARDING_OVERVIEW_SUBTITLE_DISABLED: "Changes will not take effect until you save.", GUILD_ONBOARDING_NEW_MEMBER_PROGRESS_BAR_GET_STARTED: "Get Started", GUILD_ONBOARDING_NEW_MEMBER_PROGRESS_BAR_COUNTER: "$[{completed}](numberHook) of $[{total}](numberHook)", GUILD_SETTINGS_DEFAULT_CHANNELS: "Default Channels", GUILD_SETTINGS_DEFAULT_CHANNELS_ADVANCED: "Default Channels & Pre-join Questions", GUILD_SETTINGS_DEFAULT_CHANNELS_SUBHEADER: "Set default channels every member will see in their channel list when they join. Members can add more channels using Customization Questions.", GUILD_SETTINGS_PRE_JOIN_QUESTIONS_HEADER: "Pre-join Questions", GUILD_SETTINGS_PRE_JOIN_QUESTIONS_SUBHEADER: "Set questions to ask every member on join. Answers will be used to assign roles and channels.", GUILD_SETTINGS_DEPRIVATE_MODAL_HEADER: "Allow @everyone", GUILD_SETTINGS_DEPRIVATE_EXPLAINER_1: "Default Channels need $[View Channel permission for @everyone.](emphasisHook) Members can't be opted into channels they don't have access to.", GUILD_SETTINGS_DEPRIVATE_EXPLAINER_2: "Letting your members view top channels will $[help them understand your community.](emphasisHook)", GUILD_SETTINGS_DEPRIVATE_EXPLAINER_3: "Don't worry, new members still need to $[agree to the rules](emphasisHook) before chatting in your server.", GUILD_SETTINGS_DEPRIVATE_EXPLAINER_4: "$[@everyone](emphasisHook) role will be granted $[View Channel](brandHook) and $[Connect](brandHook) permissions.", GUILD_SETTINGS_DEPRIVATE_TITLE: "Update Channel Permissions", GUILD_SETTINGS_DEPRIVATE_SUBTITLE: "Select channels to allow everyone to either view this channel and/or connect to voice", GUILD_SETTINGS_DEPRIVATE_CHANNEL_COUNT: "{count, plural, =1 {1 Private Channel} other {{count} Private Channels}}", GUILD_SETTINGS_UPDATE_PERMISSIONS: "Update Permissions", GUILD_SETTINGS_REVIEW_PERMISSIONS: "Review Permissions", GUILD_SETTINGS_CHANNEL_SETTINGS: "Channel Settings", GUILD_SETTINGS_SUMMARIES_TOGGLE: "Enable Channel Summaries", GUILD_SETTINGS_SUMMARIES_TOGGLE_DESCRIPTION: "Enable Channel Summaries for this server to help your members catch up and dive into discussions. In text channels, members will be able to see a list of topics being discussed and which members are involved. [Learn More]({helpdeskArticle})", UNLOCK: "Unlock", DEFAULT_CHANNELS_PREVIEW_HEADER: "Preview", DEFAULT_CHANNELS_PREVIEW_EMPTY_STATE: "Add 5-10 channels that all users will see!", DEFAULT_CHANNELS_GOOD: "Good", DEFAULT_CHANNELS_CHATTABLE_COUNT: "{count, plural, =0 {0 chattable} other {{count} chattable}}", DEFAULT_CHANNELS_TOTAL_COUNT: "{count, plural, =0 {0 total} other {{count} total}}", DEFAULT_CHANNELS_ADVANCED_EXPLAINER: "Total is calculated by the number of Default Channels + minimum possible channels assigned through Required Questions", DEFAULT_CHANNELS_TOGGLE: "After you've saved your changes, remember to enable Default Channels for your community!", DEFAULT_CHANNELS_PREVIEW_VOICE_HELP: "Voice and Stage channels you do not select as default will be accessible in this Voice Channel section. It will also spotlight any active voice or stage channels in your community.", DEFAULT_CHANNELS_PREVIEW_BROWSE_CHANNELS_HELP: "All channels a member has permission to view will be accessible in Browse Channels. Here they can add and remove channels and categories to their channel list.", DEFAULT_CHANNELS_DISABLED_PRIVATE: "@everyone must have View permission for this channel.", DEFAULT_CHANNELS_PREVIEW_ADDITIONAL: "Minimum {count} channels assigned through required $[Pre-join Questions](prejoinHook).", ONBOARDING_PROMPT_OPTION_MODAL_TITLE: "Add an Answer", ONBOARDING_PROMPT_OPTION_TITLE_PLACEHOLDER: "Enter an answer...", ONBOARDING_PROMPT_OPTION_NAME_HEADER: "1. Add an answer", ONBOARDING_PROMPT_OPTION_ROLES_CHANNELS_HEADER: "2. Assign channels and/or roles", ONBOARDING_PROMPT_OPTION_ROLES_CHANNELS_FOOTER: "Based on people's responses, you'll be assigning them to channels and/or roles.", ONBOARDING_PROMPT_OPTION_EMOJI_HEADER: "3. Pick an emoji", ONBOARDING_PROMPT_OPTION_EMOJI_SUBHEADER: "Optional, but why not add some fun?", ONBOARDING_PROMPT_OPTION_DESCRIPTION_PLACEHOLDER: "Enter a description... (optional)", ONBOARDING_PROMPT_OPTION_CHANNEL_ROLES_PLACEHOLDER: "Enter #channels or @roles", ONBOARDING_PROMPT_SAVE_FAILED: "Failed to save changes", ONBOARDING_PROMPT_SAVE_TOO_MANY_PROMPTS_IN_ONBOARDING: 'You cannot have more than {numQuestions} questions marked as "Ask before member joins"', DEFAULT_CHANNELS_SAVE_INVALID_DEFAULT_CHANNELS: "Your Default Channels must meet the latest requirements to be saved.", ONBOARDING_PROMPT_TITLE_REQUIRED: "Question is required", ONBOARDING_PROMPT_ANSWER_REQUIRED: "At least one answer is required", ONBOARDING_PROMPT_OPTION_TITLE_REQUIRED: "Title is required", ONBOARDING_PROMPT_OPTION_ROLES_REQUIRED: "At least one channel or role is required", ONBOARDING_PROMPT_OPTION_QUESTION_NUMBER: "Question {index, number}", GUILD_SETTINGS_ONBOARDING: "Onboarding", ONBOARDING_PROMPT_ANSWERS_NEW: "{count, plural, =1 {New Option} other {New Options}}", ONBOARDING_PROMPT_QUESTIONS_HEADER: "{count, plural, =1 {Customization Question} other {Customization Questions}}", ONBOARDING_PROMPT_SETTINGS_HEADER: "Questions", ONBOARDING_PROMPT_SETTINGS_HEADER_ADVANCED: "Post-join Questions", ONBOARDING_PROMPT_SETTINGS_SUBHEADER: "Create questions to help members pick additional channels and roles. Their channel list will be customized based on their answers.", ONBOARDING_PROMPTS_INCOMPLETE: "You have incomplete questions", ONBOARDING_QUESTIONS_PRE_JOIN_HEADER: "Pre-join Questions", ONBOARDING_QUESTIONS_PRE_JOIN_SUBHEADER: "Members will be asked these questions before they join your server. Use them to assign channels and important roles. Pre-join Questions will also be available on the Channels & Roles page.", ONBOARDING_QUESTIONS_POST_JOIN_HEADER: "Post-join Questions", ONBOARDING_QUESTIONS_POST_JOIN_SUBHEADER: "Members will be asked these questions after they join your server, on the Channels & Roles page. Use them to\n assign roles that members can pick later, like vanity roles.", ONBOARDING_QUESTIONS_CANNOT_MOVE: "Cannot move this Question", ONBOARDING_QUESTIONS_SAVE_TOO_MANY_PROMPTS_IN_ONBOARDING: "You cannot have more than {numQuestions} pre-join Questions", ONBOARDING_PROMPTS_WARNING: "Warning", ONBOARDING_PROMPT_CHANNEL_COVERAGE: "{numChannels, plural, =0 {$[0 of {numTotalChannels}](channelsHook)} other {$[{numChannels} of {numTotalChannels}](channelsHook)}} public channels are assignable through Questions and Default Channels.", ONBOARDING_PROMPT_CHANNEL_COVERAGE_MISSING_CHANNELS: "{numChannelsMissing, plural, =0 {No} other {{numChannelsMissing}}} public channels are missing from Questions and Default Channels.", ONBOARDING_PROMPT_CHANNEL_COVERAGE_CHANNELS: "CHANNELS NOT ASSIGNED", ONBOARDING_PROMPT_CHANNEL_COVERAGE_HELP: "At least {percent}% ({numChannels}) of your public channels should be assignable through Questions or Default Channels, or members will have a hard time finding them.", ONBOARDING_PROMPT_CHANNEL_COVERAGE_ADD_HELP: "Add at least {numChannels} more channels to Questions or Default Channels, or members will have a hard time finding them.", ONBOARDING_PROMPT_TOGGLE: "After you've saved your changes, remember to enable Starter Questions for your community!", ONBOARDING_PROMPT_INCLUDE_IN_ONBOARDING_LABEL: "Ask before member joins", ONBOARDING_PROMPT_REQUIRED_DISABLED_TOOLTIP: "Question must be asked before join to be Required", ONBOARDING_PROMPT_REQUIRED_LABEL: "Required", ONBOARDING_PROMPT_REQUIRED_LABEL_WITH_COUNT: "Required {count, plural, =0 {} =1 {+ Assigns at least 1 channel} other {+ Assigns at least {count} channels}}", ONBOARDING_PROMPT_SINGLE_SELECT_LABEL: "Limit to only one answer", ONBOARDING_PROMPT_ALLOW_MULTIPLE_LABEL: "Allow multiple answers", ONBOARDING_PROMPT_DELETE: "Delete this question", ONBOARDING_PROMPT_DEFAULT_TITLE: "What do you want to do in this community?", ONBOARDING_PROMPT_TITLE_PLACEHOLDER: "Enter a question...", ONBOARDING_PROMPT_OPTIONS_HEADER: "Available Answers — {count, number} of {total, number}", ONBOARDING_PROMPT_DROPDOWN_OPTIONS_HEADER: "Available Answers — {count, number} of {total, number} shown in a dropdown list", ONBOARDING_PROMPT_ADD_PROMPT: "Add a Question", ONBOARDING_PROMPT_ADD_OPTION: "Add an Answer", ONBOARDING_PROMPT_EXAMPLES_HEADER: "Here are some examples:", ONBOARDING_PROMPT_EXAMPLES_1: "What off-topic channels do you want?", ONBOARDING_PROMPT_EXAMPLES_2: "What do you want notifications for?", ONBOARDING_PROMPT_EXAMPLES_3: "What kind of events are you interested in?", ONBOARDING_PROMPT_EXAMPLES_4: "What’s your favorite book genre?", ONBOARDING_PROMPT_EXAMPLES_5: "What region are you in?", ONBOARDING_PROMPT_EXAMPLES_6: "Pick a favorite color!", ONBOARDING_PROMPT_SINGLE_SELECT_UNIQUE_ROLES: "Roles used in single-select questions cannot be granted by other questions", ONBOARDING_PROMPT_NO_PRIVATE_CHANNELS: "@everyone must have View permission for channels used in answers", ONBOARDING_PROMPT_NO_PRIVATE_CHANNELS_SUBTEXT: "Members will receive all channels granted by these roles", ONBOARDING_PROMPT_ACCEPT_SERVER_RULES: "Members will be asked to accept Server Rules after questions in Onboarding.", ONBOARDING_PROMPT_MEMBER_DESCRIPTION: "Answer questions to get access to more channels and roles.", ONBOARDING_PROMPT_THRESHOLD_ALERT_TITLE: "Changing answers to a dropdown", ONBOARDING_PROMPT_THRESHOLD_ALERT_DESCRIPTION: "When adding {thresholdCount, number} or more answers to a question, we show them to members as dropdown options without descriptions.", CUSTOMIZE_COMMUNITY_PROFILE: "My Profile", CUSTOMIZE_COMMUNITY_PROFILE_DESCRIPTION: "This is how you'll look to others!", CUSTOMIZE_COMMUNITY_ADD_CHANNELS: "You received {count, plural, =1 {the $[!!{channel1}!!](itemHook) channel.} =2 {the $[!!{channel1}!!](itemHook) and $[!!{channel2}!!](itemHook) channels.} other {$[!!{channel1}!!](itemHook), $[!!{channel2}!!](itemHook), and {extraCount, plural, one {1 other channel} other {{extraCount} other channels}}.}}", CUSTOMIZE_COMMUNITY_ADD_ROLES: "You received {count, plural, =1 {the $[!!{role1}!!](itemHook) role.} =2 {the $[!!{role1}!!](itemHook) and $[!!{role2}!!](itemHook) roles.} other {$[!!{role1}!!](itemHook), $[!!{role2}!!](itemHook), and {extraCount, plural, one {1 other role} other {{extraCount} other roles}}.}}", CUSTOMIZE_COMMUNITY_ADD_CHANNELS_AND_ROLES: "You received {channelCount, plural, =1 {the $[!!{channel1}!!](itemHook) channel} =2 {the $[!!{channel1}!!](itemHook) and $[!!{channel2}!!](itemHook) channels} other {$[!!{channel1}!!](itemHook), $[!!{channel2}!!](itemHook), and {extraChannelCount, plural, one {1 other channel} other {{extraChannelCount} other channels}}}}, and {roleCount, plural, =1 {the $[!!{role1}!!](itemHook) role.} =2 {the $[!!{role1}!!](itemHook) and $[!!{role2}!!](itemHook) roles.} other {$[!!{role1}!!](itemHook), $[!!{role2}!!](itemHook), and {extraRoleCount, plural, one {1 other role} other {{extraRoleCount} other roles}}.}}", ROLE_IN_PROMPT_NOTICE_TEXT: "This role can be selected by members.", ROLE_IN_PROMPT_POWERFUL_NOTICE_TEXT: "This role can be selected by members and has powerful permissions.", ROLE_PROMPT_ROLE_IS_POWERFUL: "This role has potentially dangerous permissions: !!{permissions}!!.", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_CREATE: "$[**!!{user}!!**](userHook) created a new customization question", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_UPDATE: "$[**!!{user}!!**](userHook) updated the customization question $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_DELETE: "$[**!!{user}!!**](userHook) deleted the customization question $[**!!{target}!!**](targetHook)", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_TITLE_CREATE: "Set the title to empty", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_TITLE_CHANGE: "Changed the title from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_DESCRIPTION_CREATE: "Set the description to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_DESCRIPTION_CHANGE: "Changed the description from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_SINGLE_SELECT: "Set the customization question to single select", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_MULTI_SELECT: "Set the customization question to multi select", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_REQUIRED: "Set the customization question to required", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_OPTIONAL: "Set the customization question to optional", GUILD_SETTINGS_ACTION_FILTER_ROLE_PROMPT_CREATE: "Create Customization Question", GUILD_SETTINGS_ACTION_FILTER_ROLE_PROMPT_UPDATE: "Update Customization Question", GUILD_SETTINGS_ACTION_FILTER_ROLE_PROMPT_DELETE: "Delete Customization Question", GUILD_SETTINGS_AUDIT_LOG_ROLE_PROMPT_EMPTY_VALUE: "[empty]", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_CREATED_OPTION: "Created answer **!!{title}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_WITH_ROLES: "with roles **!!{roles}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_WITH_CHANNELS: "with channels **!!{channels}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_UPDATED_OPTION: "Updated answer **!!{title}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_ADD_CHANNELS: "added channels **!!{channels}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_REMOVE_CHANNELS: "removed channels **!!{channels}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_ADD_ROLES: "added roles **!!{roles}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_REMOVE_ROLES: "removed roles **!!{roles}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_VALUE_CHANGE: "Changed **{key}** from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_DELETED_OPTION: "Deleted answer **!!{title}!!**", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_PROMPT_CHANGED_OPTIONS: "Changed answers for customization question", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_CREATE: "$[**!!{user}!!**](userHook) started onboarding for this server", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_UPDATE: "$[**!!{user}!!**](userHook) updated onboarding for this server", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_CREATE: "$[**!!{user}!!**](userHook) created the Server Guide for this server", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_UPDATE: "$[**!!{user}!!**](userHook) updated the Server Guide for this server", GUILD_SETTINGS_ACTION_FILTER_ONBOARDING_CREATE: "Create Onboarding", GUILD_SETTINGS_ACTION_FILTER_ONBOARDING_UPDATE: "Update Onboarding", GUILD_SETTINGS_ACTION_FILTER_HOME_SETTINGS_CREATE: "Create Server Guide", GUILD_SETTINGS_ACTION_FILTER_HOME_SETTINGS_UPDATE: "Update Server Guide", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_DEFAULT_CHANNEL_IDS: "Set {count, plural, =1 {1 default channel} other {{count} default channels}}", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_ENABLE_DEFAULT_CHANNELS: "Set default channels to enabled", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_DISABLE_DEFAULT_CHANNELS: "Set default channels to disabled", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_ENABLE_PROMPTS: "Set customization questions to enabled", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_DISABLE_PROMPTS: "Set customization questions to disabled", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_ENABLE: "Enabled Onboarding", GUILD_SETTINGS_AUDIT_LOG_ONBOARDING_DISABLE: "Disabled Onboarding", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_AUTHOR_CHANGE: "Change welcome message author from **!!{oldUser}!!** to **!!{newUser}!!**", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_MESSAGE_CHANGE: "Change welcome message from **!!{oldMessage}!!** to **!!{newMessage}!!**", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_CHANGED_WELCOME_MESSAGE: "Changed the welcome message", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_CHANGED_NEW_MEMBER_ACTIONS: "Changed the new member To Dos", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_CHANGED_RESOURCE_CHANNELS: "Changed resource channels", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_NEW_MEMBER_ACTION_ADDED: "Added To Do **!!{name}!!**", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_NEW_MEMBER_ACTION_REMOVED: "Removed To Do **!!{name}!!**", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_RESOURCE_CHANNEL_ADDED: "Added resource **!!{name}!!**", GUILD_SETTINGS_AUDIT_LOG_HOME_SETTINGS_RESOURCE_CHANNEL_REMOVED: "Removed resource **!!{name}!!**", APPLICATION_DIRECTORY_PROFILE_TOOLTIP_PREMIUM: "This app has premium features!", APPLICATION_DIRECTORY_LISTING_TOOLTIP_PREMIUM: "Premium Features Available", INTERACTION_PREMIUM_UPSELL_MOBILE: "This command requires !!{appName}!! Premium, which isn't available to purchase on mobile.", NITRODUCTION_ONBOARDING_HEADING_PROFILE_CUSTOMIZATION_AVATAR: "Animate your avatar", NITRODUCTION_ONBOARDING_HEADING_PROFILE_CUSTOMIZATION_AVATAR_DECORATIONS: "Deck out your avatar", NITRODUCTION_ONBOARDING_HEADING_PROFILE_CUSTOMIZATION_BANNER: "Express yourself!", NITRODUCTION_ONBOARDING_HEADING_PROFILE_CUSTOMIZATION_THEME: "Give it some color", NITRODUCTION_ONBOARDING_HEADING_PROFILE_CUSTOMIZATION_GUILD_PROFILES: "Create multiple profiles!", NITRODUCTION_ONBOARDING_HEADING_BOOSTING_GUILD_MENU_ITEM: "Support your favorite servers", NITRODUCTION_ONBOARDING_HEADING_BOOSTING_GUILD_BANNER: "Unlock server perks", NITRODUCTION_ONBOARDING_HEADING_CUSTOM_EMOJI_GENERAL: "Your emoji, everywhere", NITRODUCTION_ONBOARDING_HEADING_CUSTOM_EMOJI_ANIMATED_EMOJI: "Animated emoji!", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_AVATAR: "Show more personality with an animated avatar.", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_AVATAR_DECORATIONS: "Add extra fun to your avatar with decorations.", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_BANNER: "Turn your favorite image, GIF, or meme into a profile banner.", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_THEME: "Personalize your profile with custom colors.", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_GUILD_PROFILES: "Customize different profiles for each of your servers.", NITRODUCTION_ONBOARDING_BODY_BOOSTING_GUILD_MENU_ITEM: "Boost servers to show your support and score cool perks for your friends.", NITRODUCTION_ONBOARDING_BODY_BOOSTING_GUILD_BANNER: "More Boosts = more perks. Nitro members get 2 Boosts and 30% off additional Boosts.", NITRODUCTION_ONBOARDING_BODY_CUSTOM_EMOJI_GENERAL2: "Use emoji and stickers from any of your servers in **all** your servers and DMs!", NITRODUCTION_ONBOARDING_BODY_CUSTOM_EMOJI_GENERAL_UNFORMATTED: "Use emoji and stickers from any of your servers in all your servers and DMs!", NITRODUCTION_ONBOARDING_BODY_CUSTOM_EMOJI_ANIMATED_EMOJI: "Have more fun expressing yourself with animated emoji.", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_AVATAR_LIGHTWEIGHT: "Now you can use an animated avatar!", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_BANNER_LIGHTWEIGHT: "Turn your favorite image, GIF, or meme into a profile banner.", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_THEME_LIGHTWEIGHT: "Personalize your profile with custom colors.", NITRODUCTION_ONBOARDING_BODY_PROFILE_CUSTOMIZATION_GUILD_PROFILES_LIGHTWEIGHT: "Customize different profiles for each of your servers!", NITRODUCTION_ONBOARDING_BODY_BOOSTING_GUILD_MENU_ITEM_LIGHTWEIGHT: "Boost servers to show your support and score cool perks for your friends.", NITRODUCTION_ONBOARDING_BODY_BOOSTING_GUILD_BANNER_LIGHTWEIGHT: "With Nitro, you get 2 Boosts and 30% off any additional Boosts!", NITRODUCTION_ONBOARDING_BODY_CUSTOM_EMOJI_GENERAL_LIGHTWEIGHT: "Use emoji from any of your servers in **all** your servers and DMs!", NITRODUCTION_ONBOARDING_BODY_CUSTOM_EMOJI_GENERAL_UNFORMATTED_LIGHTWEIGHT: "Use emoji from any of your servers in all your servers and DMs!", NITRODUCTION_ONBOARDING_BODY_CUSTOM_EMOJI_ANIMATED_EMOJI_LIGHTWEIGHT: "Now you can use animated emoji!", SHARE_NITRO_TOOLTIP_DISABLED: "This friend isn’t eligible for a Nitro trial right now.", SHARE_NITRO_TOOLTIP: "Share a free Nitro trial with this friend!", SHARE_NITRO_BIRTHDAY_TOOLTIP: "Share a **free** Nitro trial with this friend as part of Discord’s 8th Birthday. Woohooo!", SHARE_NITRO_BIRTHDAY_TOOLTIP_UNFORMATTED: "Share a free Nitro trial with this friend as part of Discord’s 8th Birthday. Woohooo!", SHARE_NITRO_RESEND_TOOLTIP: "Resend a Nitro trial to this friend.", SHARE_NITRO_MODAL_HEADER: "Share a Nitro trial", SAHRE_NITRO_MODAL_CONFIRMATION_HEADER: "Share Nitro with this friend?", SHARE_NITRO_MODAL_BODY_GENERAL: "Give this friend 2 weeks of Nitro - for **free**!\n\nYou have {count, plural, =1 {1 trial} other {{count} trials}} left.", SHARE_NITRO_MODAL_BODY_SHARE_THEM_BY: "Share them by {date}.", SHARE_NITRO_MODAL_CONFIRMATION_GENERAL: "You’ll have {count, plural, =1 {1 trial} other {{count} trials}} left to share.", SHARE_NITRO_MODAL_CONFIRMATION_GENERAL_LAST_REFERRAL: "It’s the last trial you have left to share.", SHARE_NITRO_BUTTON_TEXT: "Share Trial", SHAER_NITRO_CONFIRMATION_BUTTON_TEXT: "Yes, Share Trial", SHARE_NITRO_EMBEDDED_MESSAGE_HEADER: "{username}, you got a 2 week trial of Nitro.", SHARE_NITRO_EMBEDDED_MESSAGE_BODY: "**{username}** gave you **2 weeks** of Nitro. Try out custom profiles, animated emoji, and more!", SHARE_NITRO_EMBEDDED_MESSAGE_BODY_SHORT: "{username} shared a nitro trial with you!", SHARE_NITRO_EMBEDDED_MESSAGE_DISABLED_HEADER: "Looks like {username} already has Nitro", SHARE_NITRO_EMBEDDED_MESSAGE_DISABLED_BODY: "This offer is no longer available.", SHARE_NITRO_EMBEDDED_MESSAGE_EXPIRED_HEADER: "This trial offer expired", SHARE_NITRO_EMBEDDED_MESSAGE_EXPIRED_BODY: "Share this trial with another friend.", SHARE_NITRO_DISMISS_MODAL_HEADER: "Hide Nitro trials?", SHARE_NITRO_DISMISS_MODAL_BODY: "You won't be able to share free Nitro trials with your friends.", SHARE_NITRO_RESEND_TRIAL_HEADER: "Resend Nitro trial", SHARE_NITRO_RESEND_TRIAL_BODY: "Want to remind your friend about their free Nitro trial?", SHARE_NITRO_RESEND_TRIAL_BODY_2: "Resend it!", SHARE_NITRO_RESEND_BUTTON_TEXT: "Resend Trial", START_TRIAL: "Start Trial", EXPIRES_MINUTES: "Expires in {numMinutes, plural, one {1 minute} other {{numMinutes} minutes}}", EXPIRES_HOURS: "Expires in {numHours, plural, one {{numHours} hour} other {{numHours} hours}}", EXPIRES_DAYS: "Expires in {numDays, plural, one {{numDays} day} other {{numDays} days}}", EXPIRED_DATE: "Expired {date}", TRIAL_EXPIRES: "Trial expires {date}", DISMISS_BUTTON_TEXT: "I'm not interested in this", SHARE_NITRO_VIEW_ON_DESKTOP: "Open this DM on desktop to start your free trial.", USER_TRIAL_OFFER_ATTRIBUTION_BANNER: "{username} has shared a free Nitro trial with you.", REFERRAL_PROGRAM_SHARE_NITRO_WITH_FRIENDS: "Share Nitro with Friends", REFERRAL_PROGRAM_PROGRESS_BAR_SUBHEADER: "Share a 2-week trial with up to {numFriends} friends and give the gift of Discord without limits! [Learn more]({helpdeskArticle}).", REFERRAL_PROGRAM_SELECT_FRIENDS: "Select Friends", REFERRAL_PROGRAM_PROGRESS_BAR_SUBHEADER_AT_LEAST_ONE_SHARED: "We have lift off! You can share trials with {numFriends} more {numFriends, plural, one {friend} other {friends}}. [Learn more]({helpdeskArticle}).", REFERRAL_PROGRAM_PROGRESS_BAR_HEADER_ALL_SHARED: "Trials Shared. Nice work.", REFERRAL_PROGRAM_PROGRESS_BAR_SUBHEADER_ALL_SHARED: "You get {numReferrals} trials to share every {numMonths} months. Maybe it’s time to see who’s on your nice list. [Learn more]({helpdeskArticle}).", REFERRAL_PROGRAM_REMIND_FRIENDS: "Remind Friends", REFERRAL_PROGRAM_PROGRESS_BAR_HEADER_COOL_DOWN: "More Trials Incoming", REFERRAL_PROGRAM_PROGRESS_BAR_SUBHEADER_ALL_SHARED: "More trials are on the way dear! You get {numReferrals} trials to share every {numMonths} months. [Learn more]({helpdeskArticle}).", REFERRAL_PROGRAM_PROGRESS_BAR_SUBHEADER_ALL_SHARED_NO_REFRESH: "You will get more trials in the future. While you wait, you can Gift Nitro to give the gift of Discord without limits. [Learn more]({helpdeskArticle}).", REFERRAL_PROGRAM_FRIEND_SELECT_HEADER: "Select {numReferrals, plural, one {a friend} other {up to {numReferrals} friends}} to share a Nitro trial with. The trial will be sent in a direct message.", REFERRAL_PROGRAM_SHARE_TRIAL: "Share Trial", REFERRAL_PROGRAM_FRIEND_SELECT_COMPLETE_HEADER: "Lift Off! You Shared {numReferrals} {numReferrals, plural, one {Trial} other {Trials}}", REFERRAL_PROGRAM_FRIEND_SELECT_COMPLETE_TOOL_TOP: "See trial in DMs", REFERRAL_PROGRAM_FRIEND_SELECT_COMPLETE_SUBHEADER: "They have {days} days to accept the trial before it is returned to you. [Learn more]({helpdeskArticle}).", REFERRAL_PROGRAM_HOME_BADGE_SUBHEADER: "You’ve got {numReferrals} trials to share with friends!", REFERRAL_PROGRAM_FRIEND_SELECT_RESENT_HEADER: "Did your Nitro trial get lost in conversation? No worries! Resend a previously shared trial to your friends below.", REFERRAL_PROGRAM_FRIEND_SELECT_RESENT_COMPLETE_HEADER: "Reminder Sent!", REFERRAL_PROGRAM_PROGRESS_BAR_UNSENT_TOOLTIP: "Either you have more trials to send or this trial offer has expired. You can resend or share with another friend.", REFERRAL_PROGRAM_NO_ELIGIBLE_FRIENDS_HEADER: "No Eligible Friends", REFERRAL_PROGRAM_NO_ELIGIBLE_FRIENDS_SUBHEADER: "Unfortunately none of your friends are eligible for a Nitro trial at the moment. Check back later to see if their luck changes! [Learn more]({helpdeskArticle}).", REFERRAL_PROGRAM_CLOSE: "Close", REFERRAL_PROGRAM_FRIEND_SELECT_ERROR_HEADER: "Well This is Embarrassing", REFERRAL_PROGRAM_FRIEND_SELECT_ERROR_SUBHEADER: "We can’t find your friends right now. Maybe they are having a snack break. Try again later!", REFERRAL_PROGRAM_EMBED_RECIPIENT_INELIGIBLE_HEADER: "Looks like {userName} already has Nitro.", REFERRAL_PROGRAM_EMBED_RECIPIENT_INELIGIBLE_SUBHEADER: "{userName} can share it with someone else.", REFERRAL_PROGRAM_EMBED_TIRAL_EXPIRED: "This trial offer expired! Maybe {userName} can resend it.", REFERRAL_PROGRAM_MOBILE_EMBED_HEADER_1: "{userName} SHARED A NITRO TRIAL WITH YOU!", REFERRAL_PROGRAM_MOBILE_EMBED_SUBHEADER_1: "{userName}, you got a 2 week trial of Nitro.", REFERRAL_PROGRAM_MOBILE_EMBED_BODY_1: "Open this DM on desktop to start your trial.", REFERRAL_PROGRAM_MOBILE_EMBED_HEADER_2: "{userName} gave {receiverName} a 2-week Nitro trial!", REFERRAL_PROGRAM_MOBILE_EMBED_SUBHEADER_DAYS_2: "Expires in {numDays} {numDays, plural, one {day} other {days}}", REFERRAL_PROGRAM_MOBILE_EMBED_SUBHEADER_HOURS_2: "Expires in {numHours} {numHours, plural, one {hour} other {hours}}", REFERRAL_PROGRAM_MOBILE_EMBED_BODY: "Open this DM on desktop to start your trial.", REFERRAL_PROGRAM_SUBSCRIBER_HOMER_BANNER: "{username} has shared a 2-week Nitro trial with you!", REFERRAL_PROGRAM_TWO_WEEK_TRIAL: "2-WEEK TRIAL", REFERRAL_PROGRAM_START_TRIAL: "Start Trial", REFERRAL_PRORAM_PAYMENT_MODAL_BANNER: "{userName} has shared a Nitro trial with you", REFERRAL_PROGRAM_PAYMENT_MODAL_COPY: "Your **2-week trial** will end on {endDate, date, short}. Choose a plan for after your 2-week trial ends.", REFERRAL_PROGRAM_EMBED_HEADER: "{senderUserName} gave {recipientUserName} a Nitro trial!", REFERRAL_PROGRAM_EMBED_BODY: "Start your 2-week trial of Nitro to try out custom profiles, animated emoji, and more!", REFERRAL_PROGRAM_SELECT_FRIENDS_NO_RESULTS_HEADER: "Hmm... No Results", REFERRAL_PROGRAM_SELCT_FRIENDS_NO_RESULTS_SUBHEADER: "Congratulations, you’ve found the lonely cactus. Try a different search to find your friends.", REFERRAL_PROGRAM_SELECT_ONE_MORE_FRIEND: "You can select 1 more friend.", REFERRAL_PROGRAM_SELECT_MORE_FRIEND: "You can select {numFriends} more friends.", REFERRAL_PROGRAM_FRIEND_SELECTION_HIT_LIMIT: "You've hit the {numReferrals} friend limit for this offer.", REFERRAL_PROGRAM_SEARCH_FRIENDS: "Search friends", REFERRAL_PROGRAM_LEARN_MORE_ABOUT_SHARING: "[Learn more]({helpdeskArticle}) about sharing Nitro trials.", REFERRAL_PROGRAM_PLAN_COMPARISON_ROW: "3 Nitro friend passes", EMOJI_CATEGORY_TOP_GUILD_EMOJI: "Top Emoji in !!{guildName}!!", TOP_GUILD_EMOJI_BADGE: "Popular", NEWLY_ADDED_GUILD_EMOJI_BADGE: "Newly Added", VOICE_CHANNEL_STATUS_PERMISSION_TITLE: "Set Voice Channel Status", VOICE_CHANNEL_STATUS_PERMISSION_DESCRIPTION: "Allows members to create and edit voice channel status.", VOICE_CHANNEL_STATUS_PERMISSION_TOOLTIP_BODY: "Let others know what everyone's up to in the voice channel! Control who can set a status with our [new permission](onClickPermission).", VOICE_CHANNEL_SET_STATUS: "Set a channel status", VOICE_CHANNEL_STATUS_MODAL_TITLE: "What are we chatting about?", VOICE_CHANNEL_STATUS_MODAL_SUBTITLE: "Let others know what you're up to in the voice channel!", VOICE_CHANNEL_STATUS_MODAL_SET_STATUS: "Set Status", VOICE_CHANNEL_CLEAR_STATUS: "Clear Channel Status", VOICE_CHANNEL_STATUS: "Status", VOICE_CHANNEL_STATUS_MODAL_PREFILL_CHANNEL: "Status for !!{channelName}!!", INCOMING_CALLS: "Incoming calls", DIRECT_MESSAGE_NOTIFICATIONS: "Direct messages", VOICE_CONNECTED: "Voice connected", SOCIAL: "Social", FORUM_NOTIFICATIONS: "Forum notifications", STAGE_NOTIFICATIONS: "Stage notifications", FRIEND_REQUEST_NOTIFICATIONS: "Friend requests", EVENT_NOTIFICATIONS: "Event notifications", OTHER_SERVER_NOTIFICATIONS: "Other server notifications", DISCORD_SYSTEM_MESSAGES: "Discord system messages", DISCORD_SYSTEM_MESSAGE_BOT_TAG_TOOLTIP: "System Message", REALTIME: "Real-time", SERVER: "Server", GUILD_MEMBERS: "Server Members", VIEW_FRIEND_REQUESTS: "View Friend Requests", SUPPRESS_NOTIFICATIONS_TOOLTIP: "This is a @silent message.", RECORD_VOICE_MESSAGE: "Record Voice Message", DELETE_VOICE_MESSAGE: "Delete Voice Message", SEND_VOICE_MESSAGE: "Send Voice Message", VOICE_MESSAGES_SEND: "Release to Send", VOICE_MESSAGES_CANCEL: "Release to Cancel", VOICE_MESSAGES_LOCK: "Release to Lock", VOICE_MESSAGES_LIMIT: "Limit reached!", VOICE_MESSAGES_LIMIT_SEND: "Limit reached! Release to Send", VOICE_MESSAGES_LIMIT_CANCEL: "Limit reached! Release to Cancel", VOICE_MESSAGES_TAP: "Hold to record", VOICE_MESSAGES_SENT_NOTIFICATION: "Sent a voice message", VOICE_MESSAGES_UPSELL_TITLE: "Voice Messages", VOICE_MESSAGES_UPSELL_LABEL_DM: "Hold to record! Available only in direct messages.", VOICE_MESSAGES_UPSELL_LABEL_GUILD: "Hold to record! Available in select servers.", VOICE_MESSAGES_UPSELL_BUTTON_LABEL: "Got It", VOICE_MESSAGES_RECORDING_FAILED: "Failed to start recording", VOICE_MESSAGES_A11Y_LABEL: "Voice Message", VOICE_MESSAGES_A11Y_HINT: "Double tap to play or pause.", VOICE_MESSAGES_A11Y_NOT_PLAYING_VALUE: "Duration: {duration}", VOICE_MESSAGES_A11Y_PLAYING_VALUE: "Current position: {currentTime}, Duration: {duration}", VOICE_MESSAGES_A11Y_STATUS: "Voice Message; Duration: {duration}", VOICE_MESSAGES_PLAYING_A11Y_STATUS: "Voice Message; Current position: {currentTime}, Duration: {duration}", CALL_HIGH_FIVE_EXCLAMATION: "High Five!", NO_ACCESS: "No Access", NEW_LAYOUT_ANNOUNCEMNT_TITLE: "Welcome to the new layout!", NEW_LAYOUT_ANNOUNCEMENT_TEXT: "What's new?", NEW_LAYOUT_ANNOUNCEMENT_SERVERS: "Enjoy more organized chatting with the new Servers tab", NEW_LAYOUT_ANNOUNCEMENT_ACTIVITY_CARDS: "Check the status of your friends in the Messages tab with Activity Cards", NEW_LAYOUT_ANNOUNCEMENT_MESSAGES: "Jump into a chat with your friends in the new Messages tab", NEW_LAYOUT_ANNOUNCEMENT_HELP: "Learn more about this change and how to share your feedback [here](onPress).", NEW_LAYOUT_ANNOUNCEMENT_CTA: "Got it", IN_CHANNEL: "in !!{channelName}!!", COUNT_REMAINING: "+{count} more", USER_PROFILE_PRONOUNS: "Pronouns", USER_SETTINGS_PRONOUNS: "Pronouns", USER_POPOUT_PRONOUNS: "Pronouns", PROFILE_CUSTOMIZATION_PRONOUNS_PLACEHOLDER: "Add your pronouns", MESSAGE_SENDING_TIMESTAMP: "Sending...", MOBILE_CLIENT_THEMES_UPSELL_BODY: "Like what you see? Get Nitro to unlock more themes.", CALL_SOUNDS_SETTINGS: "Entrance Sounds", CALL_SOUNDS_SETTINGS_DESCRIPTION_2: "Choose a Soundboard sound to automatically play whenever you join a voice channel. Right-click on a voice channel to join without playing your entrance sound. [Learn More]({helpdeskArticle}).", CALL_SOUNDS_SETTINGS_JOIN_SOUND: "Choose a sound $[](nitroWheelHook)", CALL_SOUNDS_SETTINGS_JOIN_SOUND_CHANGE: "Change sound", CALL_SOUNDS_SETTINGS_JOIN_SOUND_REMOVE: "Remove sound", CALL_SOUNDS_SETTINGS_GLOBAL_GUILD_SEARCH: "All Servers", CALL_SOUNDS_SETTINGS_ALL_SERVERS: "!!{soundName}!! $[(All Servers)](subtextHook)", CALL_SOUNDS_SETTINGS_SOUND_REMOVED: "The sound used has been removed from the server it came from. Choose another sound.", CALL_SOUNDS_UPSELL_TITLE_NON_SUB: "Drop into voice channels in style", CALL_SOUNDS_UPSELL_DESCRIPTION_NON_SUB: "Choose a Soundboard sound to automatically play whenever you join a voice channel. Only with Nitro.", CALL_SOUNDS_UPSELL_DESCRIPTION_NON_TIER_2: "Upgrade your Nitro to automatically play a Soundboard sound whenever you join a voice channel.", CALL_SOUNDS_UPSELL_DESCRIPTION_TIER_2: "Choose a Soundboard sound to automatically play whenever you join a voice channel. Now available with Nitro.", CALL_SOUNDS_CONTEXT_MENU_GUILD: "Set as server entrance sound", CALL_SOUNDS_CONTEXT_MENU_GLOBAL: "Set as global entrance sound", SOUNDBOARD: "Soundboard", USE_EXTERNAL_SOUNDS: "Use External Sounds", ROLE_PERMISSIONS_USE_EXTERNAL_SOUNDS_DESCRIPTION: "Allows members to use sounds from other servers, if they're a Discord Nitro member.", USE_SOUNDBOARD: "Use Soundboard", ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION: "Allows members to send sounds from server soundboard.", ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION_LEARN_MORE: "Allows members to send sounds from server soundboard. [Learn more.]({helpCenterArticle})", ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION_CATEGORY: "Allows members to send sounds from server soundboard in these voice channels. [Learn more.]({helpCenterArticle})", ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION_THREADS: "Allows members to send sounds from server soundboard in this channel's threads. [Learn more.]({helpCenterArticle})", ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION_VOICE: "Allows members to send sounds from server soundboard in this voice channel. [Learn more.]({helpCenterArticle})", USER_SETTINGS_SOUNDBOARD: "Soundboard", USER_SETTINGS_SOUNDBOARD_VOLUME: "Soundboard Volume", USER_SETTINGS_SOUNDBOARD_VOLUME_DESCRIPTION: "Control how loud sounds are for you personally. Go to server settings to edit server sounds.", USER_SETTINGS_SOUNDBOARD_VOLUME_DESCRIPTION_WITH_LINK: "Control how loud sounds are for you personally. For more info, [click here]({helpCenterArticle}).", GUILD_SETTINGS_SOUNDBOARD: "Soundboard", NO_SOUNDS_TITLE: "No Sounds", NO_SOUNDS: "Get the party started by uploading a sound", GUILD_SETTINGS_SOUNDBOARD_DESCRIPTION: "Upload custom sound reactions that anyone in this server can use. Nitro members will be able to access these sounds in any server on Discord.", GUILD_SETTINGS_SOUNDBOARD_DESCRIPTION_WITH_COUNT: "Upload up to {maxSounds} custom sound reactions that anyone in this server can use. Nitro members will be able to access these sounds in any server on Discord.", GUILD_SETTINGS_SOUNDBOARD_UPLOAD_SOUND: "Upload Sound", GUILD_SETTINGS_SOUNDBOARD_UPLOAD_SOUND_NOT_SUPPORTED: "Sound upload is not supported in this browser, try downloading our [desktop client](https://discord.com/download).", GUILD_SETTINGS_SOUND_LIST_HEADER: "Soundboard - {slots, plural, one {1 Slot} other {# Slots}} available", GUILD_SETTINGS_SOUND_LIST_SOUNDS_AVAILABLE: "{slots, plural, one {1 Slot} other {# Slots}} of {totalSlots} available", GUILD_SETTINGS_SOUND_LIST_SOUNDS_AVAILABLE_BOOST_LEVEL: "Level {boostLevel} - {slots, plural, one {1 Slot} other {# Slots}} of {totalSlots} available", GUILD_SETTINGS_SOUNDBOARD_BOOST_LEVEL: "This server is boosted to level {currentBoostLevel}", GUILD_SETTINGS_SOUND_NAME_COLUMN: "Name", GUILD_SETTINGS_SOUND_UPLOADER_COLUMN: "Uploaded By", GUILD_SETTINGS_SOUNDBOARD_CTA: "Unlock more Slots", GUILD_SETTINGS_SOUNDBOARD_UPSELL_BANNER_TEXT: "Boost your server to Level {level} to unlock {numAdditional} more soundboard slots!", SOUNDBOARD_SOUND_UPLOAD_BUTTON_DISABLED: "You don't have permissions to upload sounds to this server.", SOUNDBOARD_CONTEXT_MENU_DOWNLOAD_SOUND: "Download Sound", SOUNDBOARD_DOWNLOAD_SOUND_FAILED_TITLE: "Sound Download Failed", SOUNDBOARD_DOWNLOAD_SOUND_FAILED_BODY: "Discord failed to download that sound for some reason. Sorry about that.", SOUNDBOARD_CONTEXT_MENU_EDIT_SOUND: "Edit Sound", SOUNDBOARD_SOUND_PREVIEW_SOUND: "Preview !!{emojiName}!! !!{soundName}!!", SOUNDBOARD_SOUND_PREVIEW_SOUND_LOW_VOLUME: "Increase your Soundboard volume setting to preview", SOUNDBOARD_SOUND_FAVORITE_SOUND: "Favorite !!{emojiName}!! !!{soundName}!!", SOUNDBOARD_ERROR_INVALID_FILE_TYPE: "Invalid audio file type. {fileType} is not supported.", SOUNDBOARD_ERROR_FAILED_TO_ENCODE_FILE: "Failed to encode file.", SOUNDBOARD_SOUND_UPLOAD_MODAL_HEADER: "Upload a Sound", SOUNDBOARD_SOUND_UPDATE_MODAL_HEADER: "Edit Sound", SOUNDBOARD_SOUND_UPLOAD_MODAL_BROWSE: "Browse", SOUNDBOARD_SOUND_UPLOAD_MODAL_UPLOAD: "Upload", SOUNDBOARD_SOUND_UPLOAD_MODAL_SAVE: "Save", SOUNDBOARD_SOUND_UPLOAD_MODAL_CANCEL: "Never mind", SOUNDBOARD_SOUND_UPLOAD_MODAL_NO_SOUND: "No sound selected", SOUNDBOARD_SOUND_UPLOAD_MODAL_SOUND_NAME: "Sound Name", SOUNDBOARD_SOUND_UPLOAD_MODAL_SOUND_VOLUME: "Sound Volume", SOUNDBOARD_SOUND_UPLOAD_MODAL_FILE: "File", SOUNDBOARD_SOUND_UPLOAD_MODAL_PREVIEW: "Preview", SOUNDBOARD_SOUND_UPLOAD_MODAL_EMOJI: "Related Emoji", SOUNDBOARD_SOUND_UPLOAD_MODAL_INPUT_PLACEHOLDER: "Choose a file", SOUNDBOARD_SOUND_UPLOAD_MODAL_UNKNOWN_ERROR: "An unknown error occurred", SOUNDBOARD_SOUND_UPLOAD_DURATION_EXCEEDED_ERROR: "The provided file duration exceeds maximum of {limit, number} seconds.", SOUNDBOARD_SOUND_UPLOAD_GUILD_SELECT_PLACEHOLDER: "Select a Server", SOUNDBOARD_SOUND_UPLOAD_GUILD_SELECT_NONE_AVAILABLE: "No Servers Available", SOUNDBOARD_SOUND_UPLOAD_GUILD_SELECT_AVAILABLE_COUNT: "{slots, plural, one {1 Available} other {# Available}}", SOUNDBOARD_SOUND_UPLOAD_GUILD_SELECT: "Server", SOUNDBOARD_KEYBIND_HINT_NO_POPOUT_WHEEL_SUPPORT: "**TIP:** Hold {keybind} to use Soundboard in a game overlay. $[Edit Keybind](openSettingsHook).", SOUNDBOARD_KEYBIND_HINT: "**TIP:** Hold {keybind} to use Soundboard in app or in a game overlay. $[Edit Keybind](openSettingsHook).", SOUNDBOARD_KEYBIND_HINT_GLOBAL: "**TIP:** Hold {keybind} to use Soundboard in app. $[Edit Keybind](openSettingsHook).", SOUNDBOARD_POPOUT_WINDOW_TITLE: "Discord Soundboard", SOUNDBOARD_SOUND_ADD_SOUND: "Add Sound", SOUNDBOARD_SOUND_ADD_DISABLED: "Your server hit the limit of {maxSounds, plural, =1 {# sound} other {# sounds}}. Go to server settings to remove a sound before you can add another.", SOUNDBOARD_OPEN_SOUNDBOARD: "Open Soundboard", SOUNDBOARD_OPEN_SOUNDBOARD_ERROR_GUILD_MUTE: "Soundboard disabled when server muted", SOUNDBOARD_OPEN_SOUNDBOARD_ERROR_SUPPRESSED: "Soundboard disabled when suppressed", SOUNDBOARD_OPEN_SOUNBOARRD_ERROR_DEAFENED: "Soundboard disabled when deafened", SOUNDBOARD_NEW_FEATURE_TOOLTIP_HEADER: "NEW! React with sounds", SOUNDBOARD_NEW_FEATURE_TOOLTIP_BODY: "Take the fun in voice to the next level with **Soundboard**. Air horns incoming.", SOUNDBOARD_NEW_FEATURE_TOOLTIP_GOT_IT: "Got it", SOUNDBOARD_NEW_FEATURE_TOOLTIP_TRY_IT_OUT: "Try it out", SOUNDBOARD_VOLUME_TOOLTIP_HEADER: "Adjust your Soundboard volume", SOUNDBOARD_VOLUME_TOOLTIP_BODY: "Crank your Soundboard volume up or down in User Settings -> Voice & Video", SOUNDBOARD_KEYBIND_MODAL_HEADER: "Soundboard Keybind", SOUNDBOARD_KEYBIND_MODAL_KEYBINDS_DISABLED_MESSAGE: "Keybinds are disabled while you're editing.", SOUNDBOARD_KEYBIND_MODAL_RESET_KEYBIND: "Reset Keybind", SOUNDBOARD_MODAL_AUDIO_STATE_ENCODING: "Processing Sound...", SOUNDBOARD_MODAL_AUDIO_STATE_ENCODING_FAILED: "Processing Failed", SOUNDBOARD_MODAL_AUDIO_STATE_UPLOADING: "Uploading Sound...", CHAT_WHEEL_PAGINATION_HINT: "Scroll for more", KEYBIND_SOUNDBOARD: "Open Soundboard", KEYBIND_SOUNDBOARD_HOLD: "Open Soundboard (Hold)", KEYBIND_DESCRIPTION_SOUNDBOARD: "Open the soundboard at your mouse's location while in app or in the game overlay.", KEYBIND_DESCRIPTION_SOUNDBOARD_GLOBAL: "Open the soundboard at your mouse's location anywhere.", KEYBIND_DESCRIPTION_SOUNDBOARD_NO_POPOUT_WHEEL_SUPPORT: "Open the soundboard at your mouse's location while in the game overlay.", KEYBIND_DESCRIPTION_SOUNDBOARD_HOLD: "Hold to open the soundboard at your mouse's location while in app or in the game overlay.", KEYBIND_DESCRIPTION_SOUNDBOARD_HOLD_GLOBAL: "Hold to open the soundboard at your mouse's location anywhere.", KEYBIND_DESCRIPTION_SOUNDBOARD_HOLD_NO_POPOUT_WHEEL_SUPPORT: "Hold to open the soundboard at your mouse's location while in the game overlay.", SOUNDBOARD_SOUND_WHEEL_EDUCATION_MODAL_HEADER: "Try Soundboard in the In-Game Overlay!", SOUNDBOARD_SOUND_WHEEL_EDUCATION_MODAL_BODY: "Use $[!!{keybind}!!](keybindHook) to open the sound wheel from anywhere, including directly in-game.\n\n To enable the overlay, visit $[User Settings > Game Overlay](openSettingsHook).", SOUNDBOARD_SOUND_WHEEL_EDUCATION_MODAL_CONFIRM: "Got it!", SOUNDBOARD_SOUND_WHEEL_EDUCATION_MODAL_EDIT_KEYBIND: "Edit Keybind", SOUNDBOARD_PLAY_SOUND: "Play !!{emojiName}!! !!{soundName}!!", SOUNDBOARD_UPLOAD_SOUND_FOR_GUILD: "Upload sound for !!{guildName}!!", SOUNDBOARD_SOUND_SECTION_DEFAULTS: "Discord Sounds", SOUNDBOARD_TOOLTIP_TITLE: "Coming soon: Soundboard", SOUNDBOARD_TOOLTIP_TITLE_NEW: "NEW: Soundboard", SOUNDBOARD_TOOLTIP_BODY: "Learn more about Soundboard and manage permissions.", SOUNDBOARD_MARKETING_BOOSTING_PERKS: "+{soundCount, plural, one {# Soundboard slot} other {# Soundboard slots}} (for a total of {totalSoundCount, number})", SOUNDBOARD_MARKETING_CUSTOM_SOUNDS_ANYWHERE: "Custom sounds anywhere", SOUND_BOARD_MARKETING_USE_CUSTOM_SOUNDS: "Use Custom Sounds", SOUNDBOARD_MARKETING_CUSTOM_ENTRY_SOUNDS: "Personalized entrance sounds", SOUNDBOARD_MARKETING_CUSTOM_ENTRY_SOUNDS_V2: "Custom entrance sounds", AVATAR_PROFILE_BANNER_MARKETING: "Animated avatar, profile banner, and custom tag", SOUNDBOARD_MARKETING_REACT_WITH_SOUNDBOARD: "Use custom sounds and personalized entrance sounds across voice channels.", SOUNDBOARD_MARKETING_TRY_ON_MOBILE: "Try Soundboard on mobile!", SOUNDBOARD_SEARCH_PLACEHOLDER: "Search for sound", SOUNDBOARD_SEARCH_EMPTY_STATE_BODY: "No sounds match your search", SOUNDBOARD_SOUND_DISABLED_PREMIUM_TIER_LOST: "Requires higher Server Boost Level", SOUNDBOARD_NITRO_UPSELL_TITLE: "You can't use this sound right now", SOUNDBOARD_NITRO_UPSELL_BODY: "Use your favorite sounds across Discord and much more with Nitro. [Learn more](onClick)", SOUNDBOARD_PREMIUM_UPSELL_TOAST: "Subscribe to Nitro to send sounds across servers.", SOUNDBOARD_PREMIUM_UPGRADE_UPSELL_TOAST: "Upgrade to Nitro to send sounds across servers.", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_CREATED: "$[**!!{user}!!**](userHook) uploaded a Soundboard sound", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_UPDATED: "$[**!!{user}!!**](userHook) updated a Soundboard sound", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_DELETED: "$[**!!{user}!!**](userHook) deleted a Soundboard sound", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_NAME_CREATE: "With the name **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_NAME_CHANGE: "Changed the name from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_VOLUME_CREATE: "With the volume set to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_VOLUME_CHANGE: "Changed the volume from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_EMOJI_NAME_CREATE: "With the emoji **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_EMOJI_NAME_REPLACE: "Changed the emoji from **!!{oldValue}!!** to **!!{newValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_EMOJI_NAME_REMOVE: "Removed the emoji **!!{oldValue}!!**", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_EMOJI_ID_CREATE: "With the emoji $[](newEmojiHook)", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_EMOJI_ID_REPLACE: "Changed the emoji from $[](oldEmojiHook) to $[](newEmojiHook)", GUILD_SETTINGS_AUDIT_LOG_GUILD_SOUNDBOARD_SOUND_EMOJI_ID_REMOVE: "Removed the emoji $[](oldEmojiHook)", GUILD_SETTINGS_ACTION_FILTER_SOUNDBOARD_SOUND_CREATE: "Create Soundboard Sound", GUILD_SETTINGS_ACTION_FILTER_SOUNDBOARD_SOUND_UPDATE: "Update Soundboard Sound", GUILD_SETTINGS_ACTION_FILTER_SOUNDBOARD_SOUND_DELETE: "Delete Soundboard Sound", GUILD_SETTINGS_ACTION_FILTER_CLYDE_AI_PROFIE_UPDATE: "Update Clyde AI Profile", GUILD_SETTINGS_SOUNDBOARD_DELETE_SOUND_TITLE: "Delete '!!{soundName}!!'", GUILD_SETTINGS_SOUNDBOARD_DELETE_SOUND_BODY: "Are you sure you want to delete **!!{soundName}!!**? This action cannot be undone.", RECENTLY_HEARD: "Recently Heard", SHARE_TITLE: "Send To", SHARE_MESSAGE_PLACEHOLDER: "Add a message", NEW_MESSAGE_COMPOSER_SEARCH_EMPTY_TITLE: "Unfortunately, no results were found.", NEW_MESSAGE_COMPOSER_SEARCH_EMPTY_SUBTITLE: "The person you're looking for might not be connected to you on Discord. Try adding them as a friend.", NEW_MESSAGE_COMPOSER_BACK_TO_CHAT: "Back to Chat Preview", NEW_MESSAGE_COMPOSER_ADD_USER_A11Y_LABEL: "Add Recipient", SERVER_BADGE_DESCRIPTION_INVITE_ONLY: "People with an invite link can join.", SERVER_BADGE_DESCRIPTION_ANYONE_CAN_JOIN: "Anyone can join this server.", SERVER_BADGE_DESCRIPTION_APPLICATION_REQUIRED: "People must submit an application to join.", SERVER_BADGE_TITLE_COMMUNITY: "Community Server", SERVER_BADGE_TITLE_UNKNOWN: "Unknown", SERVER_BADGE_PREMIUM_FOOTER_BOOST_COUNT: "{count, plural, =1 {# Boost} other {# Boosts}}", SERVER_BADGE_PREMIUM_FOOTER: "{count, plural, =1 {# Server Boost} other {# Server Boosts}}", SERVER_BADGE_TITLE_CLAN: "Guild Server", FAMILY_CENTER_SIDEBAR_TITLE: "Family Center", FAMILY_CENTER_TITLE: "Family Center", FAMILY_CENTER_SETTINGS_TITLE: "Family Center", FAMILY_CENTER_SETTINGS_FORM_TITLE: "General Settings", FAMILY_CENTER_SETTINGS_ENABLE_SWITCH: "Enable Family Center tab", FAMILY_CENTER_SETTINGS_ENABLE_SWITCH_NOTE: "This will show you the Family Center tab. Here you can pair with your family members to create a safe, yet privacy conscious environment for your family!", FAMILY_CENTER_SETTINGS_ENABLE_PROMPT: "Now that Family Center is enabled, let’s check it out!", FAMILY_CENTER_SETTINGS_ENABLE_CTA: "View Family Center", FAMILY_CENTER_ACTIVITY_TAB: "Activity", FAMILY_CENTER_REQUESTS_TAB: "My Family", FAMILY_CENTER_PENDING_TIMESTAMP_SECONDS: "Request sent < 1 minute ago", FAMILY_CENTER_PENDING_TIMESTAMP_MINUTES: "Request sent {count, number} {count, plural, =1 {minute} other {minutes}} ago", FAMILY_CENTER_PENDING_TIMESTAMP_HOURS: "Request sent {count, number} {count, plural, =1 {hour} other {hours}} ago", FAMILY_CENTER_PENDING_TIMESTAMP_YESTERDAY: "Request sent yesterday", FAMILY_CENTER_PENDING_TIMESTAMP_DAYS: "Request sent {count, number} {count, plural, =1 {day} other {days}} ago", FAMILY_CENTER_PENDING_TIMESTAMP_DATE: "Request sent on {date}", FAMILY_CENTER_ACCEPTED_TIMESTAMP_SECONDS: "Connected < 1 minute ago", FAMILY_CENTER_ACCEPTED_TIMESTAMP_MINUTES: "Connected {count, number} {count, plural, =1 {minute} other {minutes}} ago", FAMILY_CENTER_ACCEPTED_TIMESTAMP_HOURS: "Connected {count, number} {count, plural, =1 {hour} other {hours}} ago", FAMILY_CENTER_ACCEPTED_TIMESTAMP_YESTERDAY: "Connected yesterday", FAMILY_CENTER_ACCEPTED_TIMESTAMP_DAYS: "Connected {count, number} {count, plural, =1 {day} other {days}} ago", FAMILY_CENTER_ACCEPTED_TIMESTAMP_DATE: "Connected on {date}", FAMILY_CENTER_LINK_ACTION_ACCEPT: "Accept", FAMILY_CENTER_LINK_ACTION_DECLINE: "Decline", FAMILY_CENTER_LINK_ACTION_DISCONNECT: "Disconnect", FAMILY_CENTER_LINK_ACTION_CANCEL: "Cancel", FAMILY_CENTER_PENDING_REQUESTS_TITLE_TEEN: "INCOMING PARENT REQUESTS — {count}", FAMILY_CENTER_PENDING_REQUESTS_TITLE_PARENT: "PENDING REQUESTS — {count}", FAMILY_CENTER_ACCEPTED_REQUESTS_TITLE_PARENT: "CONNECTED TEENS — {count, number} OF {max}", FAMILY_CENTER_ACCEPTED_REQUESTS_TITLE_TEEN: "CONNECTED PARENTS — {count, number} OF {max}", FAMILY_CENTER_ACCEPTED_REQUESTS_EMPTY_DESCRIPTION: "No family members connected yet.", FAMILY_CENTER_ACCESSIBILITY_LABEL_ACCEPT_WITH_NAME: "Accept request from {name}", FAMILY_CENTER_ACCESSIBILITY_LABEL_DISCONNECT_WITH_NAME: "Disconnect from {name}", FAMILY_CENTER_ACCESSIBILITY_LABEL_DECLINE_WITH_NAME: "Decline request from {name}", FAMILY_CENTER_ACCESSIBILITY_LABEL_CANCEL_WITH_NAME: "Cancel request with {name}", FAMILY_CENTER_ACCEPT_LINK_MODAL_TITLE: "Confirm parent connection with:", FAMILY_CENTER_ACCEPT_LINK_ACTIVITY_DISCLAIMER: "By accepting this request, I agree to connect my account with {username} in Family Center. I understand that I can withdraw my consent at any time by disconnecting from this user.", FAMILY_CENTER_ACCEPT_REQUEST: "Accept Request", FAMILY_CENTER_ACCEPT_LINK_MODAL_ERROR: "There was an error accepting the request. Please try again later.", FAMILY_CENTER_AVATAR_ARIA: "Avatar for !!{name}!!", FAMILY_CENTER_DATA_CONFIRMATION_INCLUDED_HEADER_TEEN: "WHAT ARE CONNECTED PARENTS ABLE TO SEE?", FAMILY_CENTER_DATA_CONFIRMATION_EXCLUDED_HEADER_TEEN: "FAMILY CENTER WILL NEVER SHARE WITH YOUR PARENTS:", FAMILY_CENTER_DATA_CONFIRMATION_INCLUDED_HEADER_PARENT: "WHAT ARE CONNECTED PARENTS ABLE TO SEE?", FAMILY_CENTER_DATA_CONFIRMATION_EXCLUDED_HEADER_PARENT: "FAMILY CENTER DOES NOT SHARE:", FAMILY_CENTER_DATA_CONFIRMATION_FRIEND_ADD_HEADER: "Recently added friends", FAMILY_CENTER_DATA_CONFIRMATION_FRIEND_ADD_DESCRIPTION: "Names and avatars", FAMILY_CENTER_DATA_CONFIRMATION_GUILD_PARTICIPATION_HEADER: "Servers joined or participated in", FAMILY_CENTER_DATA_CONFIRMATION_GUILD_PARTICIPATION_DESCRIPTION: "Names, icons, and member counts", FAMILY_CENTER_DATA_CONFIRMATION_USERS_MESSAGED_HEADER: "Users messaged or called in direct or group chats", FAMILY_CENTER_DATA_CONFIRMATION_USERS_MESSAGED_DESCRIPTION: "Names, avatars, and times of last message or call", FAMILY_CENTER_DATA_CONFIRMATION_EXCLUDED_CONTENT_HEADER_TEEN: "What you write or say", FAMILY_CENTER_DATA_CONFIRMATION_EXCLUDED_CONTENT_DESCRIPTION_TEEN: "Your parents will not see the contents of your messages or calls.", FAMILY_CENTER_DATA_CONFIRMATION_EXCLUDED_CONTENT_HEADER_PARENT: "What your teen writes or says", FAMILY_CENTER_DATA_CONFIRMATION_EXCLUDED_CONTENT_DESCRIPTION_PARENT: "To protect your teen's privacy, you will not be able to see the contents of their messages or calls.", FAMILY_CENTER_DISCONNECT_LINK_MODAL_TITLE: "Disconnect from {isAdult, select, true {teen} other {parent}}:", FAMILY_CENTER_DISCONNECT_LINK_MODAL_NOTICE_HEADER: "Notice", FAMILY_CENTER_DISCONNECT_LINK_MODAL_NOTICE_DESCRIPTION_TEEN: "Disconnecting from your parent will send them a notification that you removed them. It will also revoke their access to your Discord activity information.", FAMILY_CENTER_DISCONNECT_LINK_MODAL_NOTICE_DESCRIPTION_PARENT: "Disconnecting from your teen will send them a notification that you removed them. It will also revoke your access to their Discord activity information.", FAMILY_CENTER_DISCONNECT_LINK_MODAL_DISCLAIMER_TEEN: "I understand that disconnecting this parent will revoke their access to my Discord activity information.", FAMILY_CENTER_DISCONNECT_LINK_MODAL_DISCLAIMER_PARENT: "I understand that disconnecting this teen will revoke my access to their Discord activity information.", FAMILY_CENTER_DISCONNECT_BUTTON: "Disconnect", FAMILY_CENTER_DISCONNECT_LINK_MODAL_ERROR: "Something went wrong disconnecting from the user. Please try again later.", FAMILY_CENTER_DECLINE_REQUEST: "Decline", FAMILY_CENTER_DECLINE_LINK_MODAL_TITLE: "Decline parent connection request?", FAMILY_CENTER_DECLINE_LINK_MODAL_NOTICE_HEADER: "Notice", FAMILY_CENTER_DECLINE_LINK_MODAL_DISCLAIMER_TEEN: "Declining your parent’s request will send them a notification that you declined their request.", FAMILY_CENTER_DECLINE_LINK_MODAL_ERROR: "Something went wrong declining the request. Please try again later.", FAMILY_CENTER_CANCEL_REQUEST: "Cancel request", FAMILY_CENTER_CANCEL_REQUEST_BACK: "Do nothing", FAMILY_CENTER_CANCEL_LINK_MODAL_TITLE: "Cancel parent connection request?", FAMILY_CENTER_CANCEL_LINK_MODAL_ERROR: "Something went wrong cancelling the request to that user. Please try again later.", FAMILY_CENTER_REQUEST_LINK_MODAL_TITLE_PARENT: "Connect with your Teen:", FAMILY_CENTER_REQUEST_LINK_BUTTON: "Send Connection Request", FAMILY_CENTER_REQUEST_SUCCESS_HEADER: "Connection request sent!", FAMILY_CENTER_REQUEST_SUCCESS_DESCRIPTION: "Your teen can accept your request in the Family Center. You'll receive an email to {email} once they accept or deny the request.", FAMILY_CENTER_ACTIVITY_BANNER_HEADER_TEEN: "Keep your parents informed, while maintaining your privacy.", FAMILY_CENTER_ACTIVITY_BANNER_HEADER_PARENT: "Stay informed about how your teen is using Discord.", FAMILY_CENTER_ACTIVITY_BANNER_DESCRIPTION_TEEN: "Connected family members will not see your message contents, and you can always see what they can see by coming to this Family Center dashboard. [Learn more]({articleLink})", FAMILY_CENTER_ACTIVITY_BANNER_DESCRIPTION_PARENT: "We built Family Center to provide you with more context on how your teen uses Discord so you can work together on building positive online behaviors. [Learn more]({articleLink})", FAMILY_CENTER_ACTIVITY_BANNER_IMAGE_ALT: "Mallow and graggle high fiving", FAMILY_CENTER_ACTIVITY_DATA_CONFIRMATION_BANNER_HEADER: "What are connected parents able to see?", FAMILY_CENTER_ACTIVITY_DATA_CONFIRMATION_BANNER_DESCRIPTION_TEEN: "We value your privacy, which is why your parents will not have access to the private contents of your messages.", FAMILY_CENTER_ACTIVITY_DATA_CONFIRMATION_BANNER_DESCRIPTION_PARENT: "Our goal is to help family members stay informed on how their teens use Discord at a high level. To respect your teen’s privacy, we only allow you to see:", FAMILY_CENTER_ACTIVITY_DATA_CONFIRMATION_BANNER_ALT: "Clyde standing in front of graphs", FAMILY_CENTER_FEATURE_CARDS_HEADER: "Why Family Center?", FAMILY_CENTER_FEATURE_CARD_MESSAGES_HEADER: "Messages stay private", FAMILY_CENTER_FEATURE_CARD_MESSAGES_DESCRIPTION_TEEN: "Message contents are never shared with your parents.", FAMILY_CENTER_FEATURE_CARD_MESSAGES_DESCRIPTION_PARENT: "You can see who your teen is talking to, while still respecting their privacy.", FAMILY_CENTER_FEATURE_CARD_SHARING_HEADER: "Transparent sharing", FAMILY_CENTER_FEATURE_CARD_SHARING_DESCRIPTION_TEEN: "You and your parents see the exact same information.", FAMILY_CENTER_FEATURE_CARD_SHARING_DESCRIPTION_PARENT: "You and your teen see the exact same information, so you’re on the same page.", FAMILY_CENTER_FEATURE_CARD_PAIRING_HEADER: "Easily connect", FAMILY_CENTER_FEATURE_CARD_PAIRING_DESCRIPTION_TEEN: "Setup is as simple as having your parent scan a QR code.", FAMILY_CENTER_FEATURE_CARD_PAIRING_DESCRIPTION_PARENT: "Setup is as simple as using your phone to scan the QR code your teen shows you.", FAMILY_CENTER_ACTIVITY_OVERVIEW_PREFACE_TEEN: "VISIBLE TO {activeLinks, number} FAMILY {activeLinks, plural, one {MEMBER} other {MEMBERS}}", FAMILY_CENTER_ACTIVITY_OVERVIEW_PREFACE_PARENT: "ACTIVITY SUMMARY", FAMILY_CENTER_ACTIVITY_OVERVIEW_DESCRIPTION_TEEN_TODAY: "Your activity today", FAMILY_CENTER_ACTIVITY_OVERVIEW_DESCRIPTION_TEEN_YESTERDAY: "Your activity since yesterday", FAMILY_CENTER_ACTIVITY_OVERVIEW_DESCRIPTION_TEEN_DAYS: "Your activity in the last {days} days", FAMILY_CENTER_ACTIVITY_OVERVIEW_DESCRIPTION_PARENT_TODAY: "Activity today", FAMILY_CENTER_ACTIVITY_OVERVIEW_DESCRIPTION_PARENT_YESTERDAY: "Activity since yesterday", FAMILY_CENTER_ACTIVITY_OVERVIEW_DESCRIPTION_PARENT_DAYS: "Activity in the last {days} days", FAMILY_CENTER_ACTIVITY_OVERVIEW_NO_ACTIVITY: "No activity over the last 7 days", FAMILY_CENTER_ACTIVITY_MORE: "See {pageSize, number} more", FAMILY_CENTER_TOOLTIP_MODAL_HEADER_TEEN: "What can my parent see?", FAMILY_CENTER_TOOLTIP_MODAL_HEADER_PARENT: "What can I see?", FAMILY_CENTER_ACTIVITY_USER_INTERACTION_HEADER: "Users messaged", FAMILY_CENTER_ACTIVITY_USER_INTERACTION_TOOLTIP_TEEN: "Users that you messaged in 1:1 DMs and group chats in the last week.", FAMILY_CENTER_ACTIVITY_USER_INTERACTION_TOOLTIP_PARENT: "Users that your teen messaged in 1:1 DMs and group chats in the last week.", FAMILY_CENTER_ACTIVITY_USER_INTERACTION_SECTION_HEADER: "Users Messaged — {count, number}", FAMILY_CENTER_ACTIVITY_USER_CALLED_HEADER: "Users called", FAMILY_CENTER_ACTIVITY_USER_CALLED_TOOLTIP_TEEN: "Calls you had in 1:1 DMs and group chats in the last week.", FAMILY_CENTER_ACTIVITY_USER_CALLED_TOOLTIP_PARENT: "Users that your teen had calls with in 1:1 DMs and group chats in the last week.", FAMILY_CENTER_ACTIVITY_USER_CALLED_SECTION_HEADER: "Users Called — {count, number}", FAMILY_CENTER_ACTIVITY_ADD_FRIENDS_HEADER: "New friends", FAMILY_CENTER_ACTIVITY_ADD_FRIENDS_TOOLTIP_TEEN: "New friends that you added in the last week.", FAMILY_CENTER_ACTIVITY_ADD_FRIENDS_TOOLTIP_PARENT: "New friends that your teen added in the last week.", FAMILY_CENTER_ACTIVITY_ADD_FRIENDS_SECTION_HEADER: "New Friends — {count, number}", FAMILY_CENTER_ACTIVITY_GUILD_JOIN_HEADER: "Servers joined", FAMILY_CENTER_ACTIVITY_GUILD_JOIN_TOOLTIP_TEEN: "New servers that you joined in the last week. These are not invite links, your parents will not be able to click on them.", FAMILY_CENTER_ACTIVITY_GUILD_JOIN_TOOLTIP_PARENT: "New servers that your teen joined in the last week.", FAMILY_CENTER_ACTIVITY_GUILD_JOIN_SECTION_HEADER: "Servers Joined — {count, number}", FAMILY_CENTER_ACTIVITY_GUILD_INTERACTION_HEADER: "Active servers", FAMILY_CENTER_ACTIVITY_GUILD_INTERACTION_TOOLTIP_TEEN: "Servers that you have sent messages in within the last week. These are not invite links, your parents will not be able to click on them.", FAMILY_CENTER_ACTIVITY_GUILD_INTERACTION_TOOLTIP_PARENT: "Servers that your teen has sent messages in within the last week.", FAMILY_CENTER_ACTIVITY_GUILD_INTERACTION_TOOLTIP_TEEN_WITH_VC: "Servers that you have been active in (sent messages or joined voice chat) within the last week. These are not invite links, your parents will not be able to click on them.", FAMILY_CENTER_ACTIVITY_GUILD_INTERACTION_TOOLTIP_PARENT_WITH_VC: "Servers that your teen has been active in (sent messages or joined voice chat) within the last week.", FAMILY_CENTER_ACTIVITY_GUILD_INTERACTION_SECTION_HEADER: "Active Servers — {count, number}", FAMILY_CENTER_REQUESTS_LINKING_BANNER_HEADER_TEEN: "Easily connect with your parents!", FAMILY_CENTER_REQUESTS_LINKING_BANNER_HEADER_PARENT: "Download the Discord app to connect with your teens!", FAMILY_CENTER_REQUESTS_LINKING_BANNER_HEADER_PARENT_MOBILE: "Easily connect with your teens!", FAMILY_CENTER_REQUESTS_LINKING_BANNER_DESCRIPTION_TEEN: "Connecting with your parent will give them limited visibility to information about your account. You will see the exact same information they do on the Activity tab! [Learn more]({link})", FAMILY_CENTER_REQUESTS_LINKING_BANNER_DESCRIPTION_PARENT: "In order to connect with your teen, you'll need to download the Discord app on your phone. You can then complete setup by going to Family Center in user settings. After connecting, you will see high-level information about your teen's activity on Discord.", FAMILY_CENTER_REQUESTS_LINKING_BANNER_DESCRIPTION_PARENT_MOBILE: "In order to connect with your teen, use the Discord app on your phone to scan the QR code they provide. After connecting, you will see high-level information about your teen's activity on Discord.", FAMILY_CENTER_REQUESTS_LINKING_BANNER_TEEN_ASSET_ALT: "Wizard standing on a floating island", FAMILY_CENTER_REQUESTS_LINKING_BANNER_TEEN_BUTTON: "Connect with Parent", FAMILY_CENTER_REQUESTS_LIMIT_INFO_TEEN: "You can connect up to {maxConnections, number} parents in Family Center. To add another account, you must first remove one of the connected accounts above.", FAMILY_CENTER_REQUESTS_LIMIT_INFO_PARENT: "You can connect up to {maxConnections, number} teens in Family Center. To add another account, you must first remove one of the connected accounts above.", FAMILY_CENTER_QR_CODE_SCAN: "Connect with Teen", FAMILY_CENTER_QR_CODE_MODAL_NOTICE: "Only allow your parents to see this QR code.", FAMILY_CENTER_QR_CODE_MODAL_HEADER: "Connect with your parent", FAMILY_CENTER_QR_CODE_MODAL_DESCRIPTION: "When your parent scans this QR code, you will receive a connection request. If you accept this request, they will be able to view information about your activity in Family Center. [Learn more]({link})", FAMILY_CENTER_QR_CODE_MODAL_BUTTON_SHOW: "Reveal QR Code", FAMILY_CENTER_QR_CODE_MODAL_BUTTON_HIDE: "Hide QR Code", FAMILY_CENTER_QR_CODE_MODAL_REMINDER: "You can disconnect from a connected family member at any time if you change your mind.", FAMILY_CENTER_REQUESTS_LINKING_BANNER_PARENT_STEP_1_HEADER: "Ask your teen for their QR code", FAMILY_CENTER_REQUESTS_LINKING_BANNER_PARENT_STEP_1_DESCRIPTION: "Your teen can find this by going to Family Center in user settings and clicking My Family.", FAMILY_CENTER_REQUESTS_LINKING_BANNER_PARENT_STEP_2_HEADER: "Scan the QR code with your Discord app", FAMILY_CENTER_REQUESTS_LINKING_BANNER_PARENT_STEP_2_DESCRIPTION: "This will send a connection request to your teen, like magic!", FAMILY_CENTER_REQUESTS_LINKING_BANNER_PARENT_STEP_3_HEADER: "Have your teen accept the connection request", FAMILY_CENTER_REQUESTS_LINKING_BANNER_PARENT_STEP_3_DESCRIPTION: "Once they give consent for you to view their activity data, you’re good to go.", FAMILY_CENTER_ACTIVITY_USER_MESSAGED_TIMESTAMP_YESTERDAY: "Last messaged yesterday", FAMILY_CENTER_ACTIVITY_USER_MESSAGED_TIMESTAMP_TODAY: "Last messaged today", FAMILY_CENTER_ACTIVITY_USER_MESSAGED_TIMESTAMP_DAYS: "Last messaged {days, number} days ago", FAMILY_CENTER_ACTIVITY_USER_CALLED_TIMESTAMP_YESTERDAY: "Last called yesterday", FAMILY_CENTER_ACTIVITY_USER_CALLED_TIMESTAMP_TODAY: "Last called today", FAMILY_CENTER_ACTIVITY_USER_CALLED_TIMESTAMP_DAYS: "Last called {days, number} days ago", FAMILY_CENTER_ACTIVITY_USER_ADDED_TIMESTAMP_YESTERDAY: "Added yesterday", FAMILY_CENTER_ACTIVITY_USER_ADDED_TIMESTAMP_TODAY: "Added today", FAMILY_CENTER_ACTIVITY_USER_ADDED_TIMESTAMP_DAYS: "Added {days, number} days ago", FAMILY_CENTER_ACTIVITY_GUILD_ROW_MEMBER_COUNT: "{members, number} members", FAMILY_CENTER_DISABLE_FEATURE_MODAL_HEADER_TEXT: "Disable Family Center", FAMILY_CENTER_DISABLE_FEATURE_MODAL_SUBTITLE_TEXT: "Are you sure you want to disable Family Center? You can always enable it again by heading over to $[User Settings > Family Center](openSettingsHook).", FAMILY_CENTER_DISABLE_FEATURE_MODAL_DISABLE_BUTTON_TEXT: "Disable Family Center", FAMILY_CENTER_TEEN_SELECT_TITLE: "Select a family member", FAMILY_CENTER_ERROR_GENERIC_HEADER: "Something went wrong!", FAMILY_CENTER_ERROR_GENERIC_DESCRIPTION: "Please try again later.", FAMILY_CENTER_ERROR_GENERIC_TOAST: "Something went wrong! Please try again later.", FAMILY_CENTER_ERROR_REQUEST_PENDING_HEADER: "Connection request already sent!", FAMILY_CENTER_ERROR_REQUEST_PENDING_DESCRIPTION: "Your teen can accept your request in the Family Center. You'll receive an email to {email} once they accept or deny the request.", FAMILY_CENTER_ERROR_REQUEST_PENDING_DESCRIPTION_NO_EMAIL: "Your teen can accept your request in the Family Center. You'll receive an email to your email once they accept or deny the request.", FAMILY_CENTER_ERROR_CONNECTION_LIMIT_PARENT_HEADER: "You've reached your connection limit!", FAMILY_CENTER_ERROR_CONNECTION_LIMIT_PARENT_DESCRIPTION: "You can connect up to 8 accounts in Family Center. To add another account, you must first remove a connected account. Visit our [Help Center]({link}) to learn more.", FAMILY_CENTER_ERROR_CONNECTION_LIMIT_TEEN_HEADER: "You've reached your connection limit!", FAMILY_CENTER_ERROR_CONNECTION_LIMIT_TEEN_DESCRIPTION: "You can connect up to 3 accounts in Family Center. To add another account, you must first remove a connected account. Visit our [Help Center]({link}) to learn more.", FAMILY_CENTER_ERROR_TEEN_TO_TEEN_LINK_HEADER: "You must be over 18 to connect with this teen as a parent", FAMILY_CENTER_ERROR_TEEN_TO_TEEN_LINK_DESCRIPTION: "Visit our [Help Center]({link}) to learn more.", FAMILY_CENTER_EMPTY_ACTIVITY_TODAY: "No activity today", FAMILY_CENTER_EMPTY_ACTIVITY_YESTERDAY: "No activity since yesterday", FAMILY_CENTER_EMPTY_ACTIVITY_DAYS: "No activity over the last {days} days", FAMILY_CENTER_SETTINGS_EMAIL_DIGEST_ENABLE_SWITCH: "Receive Activity Summary emails", FAMILY_CENTER_SETTINGS_EMAIL_DIGEST_ENABLE_SWITCH_NOTE: "You will receive a weekly email summarizing your teen(s)' recent activity. We recommend keeping this setting on.", FAMILY_CENTER_HELP_LINE_HEADER: "Need extra support?", FAMILY_CENTER_HELP_LINE_CONTENT: "Text DISCORD to 741741 to speak to a trained volunteer crisis counselor at Crisis Text Line, available 24/7. [Learn more]({helpLink}) about our partnership with Crisis Text Line", SAFETY_USER_SENTIMENT_NOTICE: "Tell us how you feel about safety on Discord.", SAFETY_USER_SENTIMENT_NOTICE_CTA: "Let us know", SAFETY_USER_SENTIMENT_FEEDBACK_PROMPT: "Do you feel safe on Discord?", SAFETY_USER_SENTIMENT_FEEDBACK_SUBHEADER: "Safety on Discord is extremely important to us. Your feedback helps us improve.", SAFETY_USER_SENTIMENT_FOOTER: "Learn more about Discord Safety [here]({safetyCenterUrl}).", SAFETY_USER_SENTIMENT_FEEDBACK_CONFIRMATION: "Thanks for the feedback!", COLLECTIBLES_SHOP: "Shop", COLLECTIBLES_USE_NOW: "Use Now", COLLECTIBLES_CTA_GO_TO_SHOP: "Go to Shop", COLLECTIBLES_ACQUIRED_DATE: "Acquired {date}", COLLECTIBLES_MOBILE_IAP_NOTICE: "The ability to acquire new decorations is not available on this platform.", COLLECTIBLES_MOBILE_IAP_NOTICE_EDIT_HEADER: "Add more flair to your avatar.", COLLECTIBLES_PURCHASE: "Buy for {price}", COLLECTIBLES_BUY_DECORATION: "Buy Decoration", COLLECTIBLES_ADD_TO_YOUR_COLLECTION: "Add to your collection", COLLECTIBLES_CLAIM: "Claim", COLLECTIBLES_COLLECTING: "Collecting", COLLECTIBLES_COLLECTING_FINISHED: "Collecting finished", COLLECTIBLES_NITRO_EXCLUSIVE: "Nitro exclusive", COLLECTIBLES_PERMANENT_COLLECTION: "This decoration is now part of your collection and can be used anytime!", COLLECTIBLES_PERMANENT_COLLECTION_BUNDLE: "These decorations are now part of your collection and can be used anytime from your User Profile.", COLLECTIBLES_YOU_COLLECTED: "You've collected {itemName}!", COLLECTIBLES_ALREADY_OWNED: "Already owned", COLLECTIBLES_PARTIALLY_OWNED_DISCLAIMER: "You already own one or more bundle items.", COLLECTIBLES_INCLUDED_WITH_PREMIUM: "Included with Nitro", COLLECTIBLES_DETAILS_MODAL_PREMIUM_PURCHASE_DISCLAIMER: "Once purchased, this decoration will be added to your collection and can be used anytime", COLLECTIBLES_DETAILS_MODAL_INCLUDED_WITH_PREMIUM_DISCLAIMER: "This bonus item is yours to keep and use anytime with an active Nitro subscription.", COLLECTIBLES_PURCHASE_DISCLAIMER_PAYMENT: "Hey! This purchase is non-refundable. Once you complete your purchase, the item will be available for use immediately and can be accessed in your User Profile settings. Note that Nitro subscriptions become non-refundable once you’ve purchased an item.", COLLECTIBLES_PURCHASE_DISCLAIMER_GIFT_PAYMENT: "This purchase is non-refundable. Once you complete your purchase, the item will be sent to the recipient and can be accessed in their User Profile settings.", COLLECTIBLES_PREMIUM_DISCOUNT_TOOLTIP_TEXT: "Nitro subscribers get a discount on this decoration", COLLECTIBLES_NON_PREMIUM_PRICE: "{price} with Nitro", COLLECTIBLES_NON_PREMIUM_PRICE_SUBSCRIBE_NOW: "{price} with Nitro. $[Subscribe now](subscribeNowHook)", COLLECTIBLES_NON_PREMIUM_PRICE_SUBSCRIBE_NOW_MOBILE: "{price} with Nitro $[subscribe now](subscribeNowHook)", COLLECTIBLES_SHOP_HERO_BANNER_TITLE: "Ready for a new look?", COLLECTIBLES_SHOP_HERO_BANNER_SUBTITLE_ALT: "Charming. Fierce. Hungry. Whatever your vibe, buy and collect your favorite styles for your profile for any occasion.", COLLECTIBLES_SHOP_ERROR_HEADING: "Well, this is awkward.", COLLECTIBLES_SHOP_ERROR_SHOP_LOAD: "Hmmm, we weren't able to load the Shop. Check back later.", CHANGE_DECORATION_MODAL_PURCHASE_HEADER: "Your Decorations", CHANGE_DECORATION_MODAL_STARTER_DESC: "Use anytime with an active Nitro subscription.", COLLECTIBLES_CHAT_PREVIEW_TEXT: "Look at my beautiful decoration", CHANGE_DECORATION_MODAL_PREMIUM_STARTER_HEADER: "Exclusive to Nitro", CHANGE_DECORATION_MODAL_PREVIEW_STARTER: "Want this for yourself? Collect and use this bonus decoration anytime with an active Nitro subscription.", CHANGE_DECORATION_MODAL_PREVIEW_STARTER_CHURNED: "Use this bonus decoration with an active Nitro subscription.", CHANGE_DECORATION_MODAL_PREVIEW_PURCHASE_PREMIUM: "Want this decoration for yourself? Head to the Shop to buy and collect it!", CHANGE_DECORATION_MODAL_PREVIEW_STARTER_PREMIUM: "Want this for yourself? Head to the Shop to collect it!", CHANGE_PFX_MODAL_PREVIEW_STARTER: "Want this for yourself? Collect and use this bonus profile effect anytime with an active Nitro subscription.", CHANGE_PFX_MODAL_PREVIEW_STARTER_CHURNED: "Use this bonus profile effect with an active Nitro subscription.", COLLECTIBLES_BUY_PROFILE_EFFECT: "Buy Profile Effect", COLLECTIBLES_DETAILS_MODAL_PROFILE_EFFECT_PREMIUM_PURCHASE_DISCLAIMER: "Once purchased, this effect will be added to your collection and can be used anytime", COLLECTIBLES_PROFILE_EFFECT_PERMANENT_COLLECTION: "This effect is now part of your collection and can be used anytime!", CHANGE_PROFILE_EFFECT_MODAL_PREVIEW_PURCHASE_PREMIUM: "Want this profile effect for yourself? Head to the Shop to buy and collect it!", COLLECTIBLES_MOBILE_SHOP_USUAL_PRICE: "Usually {price}", COLLECTIBLES_PURCHASE_DISCLAIMER_PAYMENT_MOBILE: "By Clicking '{buyButtonLabel}' you agree to the [Paid Service Terms]({paidServiceTermURL}). This purchase is non-refundable. Once you complete your purchase, the item will be added to your collection and can be used anytime. Note that Nitro subscriptions become non-refundable once you've purchased an item.", COLLECTIBLES_MOBILE_SHOP_MARKETING_COACHTIP_TITLE: "See what's in Shop", COLLECTIBLES_MOBILE_SHOP_MARKETING_COACHTIP_DESCRIPTION: "Personalize your profile with Anime, Cyberpunk, Fantasy decorations and more.", COLLECTIBLES_MOBILE_SHOP_MARKETING_SHEET_USER_DESCRIPTION_1: "Super Smash Toads Champ 2024", COLLECTIBLES_MOBILE_SHOP_MARKETING_SHEET_USER_DESCRIPTION_2: "GM, protector of the Enchanted Lake", COLLECTIBLES_CATEGORY_BANNER_A11Y_LABEL: "Category: {category}, view all", COLLECTIBLES_LIMITED_TIME_BADGE_A11Y_LABEL: "{daysLeft} days remaining", COLLECTIBLES_ITEM_ORIGINAL_PRICE_A11Y_LABEL: "Original price: {price}", COLLECTIBLES_ITEM_NITRO_PRICE_A11Y_LABEL: "{price} with Nitro", COLLECTIBLES_AVATAR_DECORATION_PREVIEW_A11Y_LABEL: "Avatar decoration preview: {avatarDecoration}", COLLECTIBLES_PROFILE_EFFECT_PREVIEW_A11Y_LABEL: "Profile effect preview: {profileEffect}", COLLECTIBLES_DAYS_LEFT_IN_SHOP: "{days} days left in Shop", COLLECTIBLES_DAYS_LEFT: "{days} days left", COLLECTIBLES_LAST_DAY: "Last day to buy", COLLECTIBLES_SHOP_VIEW_ALL: "View all", COLLECTIBLES_MOBILE_SHOP_DAYS_LEFT: "{days, number}D LEFT", COLLECTIBLES_MOBILE_SHOP_HOURS_LEFT: "{hours, number}H LEFT", COLLECTIBLES_SFA_TITLE: "The Shop is now open to you!", COLLECTIBLES_SFA_STARTER_BANNER_DESCRIPTION: "Collect these sweet, bonus items when you join Nitro! $[Unlock with Nitro](getPremium)", COLLECTIBLES_SFA_HERO_BANNER_SUBTITLE: "Charming. Fierce. Hungry. Whatever your vibe, buy and collect your favorite styles for your profile for any occasion.", COLLECTIBLES_SFA_BANNER_DESCRIPTION: "Make your profile feel alive with snazzy profile effects and avatar decorations. What's not to love?", COLLECTIBLES_SENDER_GIFTED_YOU_DECORATION: "{sender} gifted you an avatar decoration!", COLLECTIBLES_SENDER_GIFTED_YOU_EFFECT: "{sender} gifted you a profile effect!", COLLECTIBLES_SENDER_GIFTED_YOU_DECORATION_UNKNOWN_SENDER: "You have been gifted an avatar decoration!", COLLECTIBLES_SENDER_GIFTED_YOU_EFFECT_UNKNOWN_SENDER: "You have been gifted a profile effect!", COLLECTIBLES_ACCEPT_GIFT: "Accept gift", COLLECTIBLES_FROM_SENDER: "From {sender}", COLLECTIBLES_SEND_ITEM_AS_A_GIFT: "Send item as a gift", COLLECTIBLES_GIFT_COACHMARK_HEADING: "Give the gift of style", COLLECTIBLES_GIFT_COACHMARK_DESC: "Check out the latest profile styles and surprise your friend with a fresh new look.", COLLECTIBLES_GIFT_SEND_ERROR_OWNED: "Hey! Your friend already has this. Try sending something else.", COLLECTIBLES_GIFT_RECIPIENT_PLACEHOLDER: "Select a friend", COLLECTIBLES_GIFT_LABEL: "Your gift", COLLECTIBLES_PREVIEW_GIFT_PROFILE: "Preview on your friend's profile", COLLECTIBLES_SHOP_GIFT_MODAL_SELECT_HEADER: "Send a gift", COLLECTIBLES_SHOP_GIFT_MODAL_REVIEW_HEADER: "Review your gift", COLLECTIBLES_GIFT_CODE_MODAL_UPSELL: "You can also send gifts to your friends from the Shop! $[Check it out](checkItOut).", COLLECTIBLES_MOBILE_SHOP_IAP_TITLE: "Shop anywhere, anytime", COLLECTIBLES_MOBILE_SHOP_IAP_DESCRIPTION_1: "Buy Avatar Decorations and Profile Effects to personalize your profile.", COLLECTIBLES_MOBILE_SHOP_IAP_DESCRIPTION_2: "Popular styles include Anime, Fantasy, Cyberpunk, and more.", COLLECTIBLES_MOBILE_SHOP_IAP_DESCRIPTION_3: "Nitro members get discounts on everything in the Shop.", COLLECTIBLES_MOBILE_SHOP_IAP_CONFIRMATION: "Visit Shop", COLLECTIBLES_BUNDLE_DESCRIPTION_PRFIX: "Bundle Includes", COLLECTIBLES_BUNDLE_DECORATION: "Decoration", COLLECTIBLES_BUNDLE_PROFILE_EFFECT: "Profile Effect", COLLECTIBLES_BUNDLE_DESCRIPTION: "Bundle Includes: {avatarDecorationName} Decoration & {profileEffectName} Profile Effect", COLLECTIBLES_BUNDLE_DESCRIPTION_ALT: "Bundle includes: {avatarDecorationName} (avatar decoration) & {profileEffectName} (profile effect)", COLLECTIBLES_BUNDLE_BUY_BUNDLE: "Buy Bundle", COLLECTIBLES_BUNDLE_PURCHASE_BUNDLE_AT_PRICE: "Buy Bundle for {price}", COLLECTIBLES_DETAILS_MODAL_BUNDLE_PURCHASE_DISCLAIMER: "Once purchased, these decorations will be added to your collection and can be used anytime", DIRECTORY_CATEGORY_TOWN_HALL_1: "Staff Picks", DIRECTORY_CATEGORY_TOWN_HALL_2: "Gaming", DIRECTORY_CATEGORY_TOWN_HALL_3: "Indie Spotlight", DIRECTORY_CATEGORY_TOWN_HALL_5: "Creator Corner", USER_PROFILE_SETTINGS_SHOP_FOR_ALL_BANNER_HEADER: "‘Tis the season for feelin’ festive!", USER_PROFILE_SETTINGS_SHOP_FOR_ALL_BANNER_SUBHEADER: "Deck your profile in seasonal styles with new items in the Shop.", AVATAR_DECORATIONS_SOCIAL_UPSELL: "Like this avatar decoration? $[Get your own from the Shop](openShop).", COMBINED_COLLECTIBLES_SOCIAL_UPSELL: "Customize your profile with snazzy animations. $[Check them out](openShop).", STARTER_PROFILE_EFFECTS_SOCIAL_UPSELL_NON_NITRO: "Like this profile effect? $[Get your own from the Shop](openShop).", COMBINED_STARTER_COLLECTIBLES_SOCIAL_UPSELL_NON_NITRO: "Unlock this profile customization with Nitro. $[Check it out](openShop).", STARTER_AVATAR_DECORATIONS_SOCIAL_UPSELL_NITRO: "Like this avatar decoration? $[Claim it with your Nitro subscription](openShop).", STARTER_PROFILE_EFFECTS_SOCIAL_UPSELL_NITRO: "Like this profile effect? $[Claim it with your Nitro subscription](openShop).", COMBINED_STARTER_COLLECTIBLES_SOCIAL_UPSELL_NITRO: "Like this profile customization? $[Get your own from the Shop](openShop).", COLLECTIBLES_BANNER_TITLE_2024: "Give your profile a fresh look", COLLECTIBLES_BANNER_DESCRIPTION_2024: "Check out the latest avatar decorations and profile effects and collect your favorite styles.", COLLECTIBLES_SHY_FOR_A_LIMITED_TIME: "For a limited time", COLLECTIBLES_SHY_COACHTIP_TITLE: "Lock in. Stand out.", COLLECTIBLES_SHY_COACHTIP_DESCRIPTION: "New VALORANT looks for styling on your enemies.", COLLECTIBLES_LOFI_VIBES_COACHTIP_TITLE: "Lofi Vibes", COLLECTIBLES_LOFI_VIBES_COACHTIP_DESCRIPTION: 'For when you want that "study & chill" look', COLLECTIBLES_GALAXY_COACHTIP_TITLE: "New Galaxy styles", COLLECTIBLES_GALAXY_COACHTIP_DESCRIPTION: "New arrivals just landed, and we don't mean aliens.", COLLECTIBLES_FEELIN_RETRO_PIRATES_COACHTIP_TITLE: "Feelin' Retro & Pirates", COLLECTIBLES_FEELIN_RETRO_PIRATES_COACHTIP_DESCRIPTION: "Give 'em a look-see if yer feelin' curious, matey…", COLLECTIBLES_ARCADE_COACHTIP_TITLE: "New Arcade styles", COLLECTIBLES_ARCADE_COACHTIP_DESCRIPTION: "Ready to score some extra style points?", COLLECTIBLES_NEW_BADGE: "NEW", NEW_ARRIVALS: "New Arrivals", COLLECTIBLES_SEE_WHATS_NEW: "See what's new in the Shop!", INVENTORY_EMOJI_DETAILS_V2: "See emoji details", PRIVATE_CHANNEL_INTEGRATION_ADDED: "$[!!{username}!!](usernameHook) added the $[!!{otherUsername}!!](otherUsernameHook) app. See our [help center]({helpCenterLink}) for more info.", PRIVATE_CHANNEL_INTEGRATION_ADDED_DELETED_APPLICATION: "$[!!{username}!!](usernameHook) added a deleted application. See our [help center]({helpCenterLink}) for more info.", PRIVATE_CHANNEL_INTEGRATION_REMOVED: "$[!!{username}!!](usernameHook) removed the $[!!{otherUsername}!!](otherUsernameHook) app. See our [help center]({helpCenterLink}) for more info.", PRIVATE_CHANNEL_INTEGRATION_REMOVED_DELETED_APPLICATION: "$[!!{username}!!](usernameHook) removed a deleted application. See our [help center]({helpCenterLink}) for more info.", PRIVATE_CHANNEL_INTEGRATION_ADDED_MOBILE: "[!!{username}!!](usernameOnClick) added the [!!{otherUsername}!!](otherUsernameOnClick) app. See our [help center](helpCenterLink) for more info.", PRIVATE_CHANNEL_INTEGRATION_ADDED_DELETED_APPLICATION_MOBILE: "[!!{username}!!](usernameOnClick) added a deleted application. See our [help center](helpCenterLink) for more info.", PRIVATE_CHANNEL_INTEGRATION_REMOVED_MOBILE: "[!!{username}!!](usernameOnClick) removed the [!!{otherUsername}!!](otherUsernameOnClick) app. See our [help center](helpCenterLink) for more info.", PRIVATE_CHANNEL_INTEGRATION_REMOVED_DELETED_APPLICATION_MOBILE: "[!!{username}!!](usernameOnClick) removed a deleted application. See our [help center](helpCenterLink) for more info.", PRIVATE_CHANNEL_AVAILABLE_APPS: "Available Apps", PRIVATE_CHANNEL_INSTALLED_APPS: "Added Apps", PRIVATE_CHANNEL_ADD_APPS: "Add Apps", PRIVATE_CHANNEL_INTEGRATION_OAUTH_SHEET_TITLE: "Heads up!", PRIVATE_CHANNEL_INTEGRATION_OAUTH_SHEET_BODY: "Some things to know about adding apps.", PRIVATE_CHANNEL_INTEGRATION_OAUTH_SHEET_COMMAND_SUMMARY: "Apps will be able to create commands in this chat", PRIVATE_CHANNEL_INTEGRATION_OAUTH_SHEET_CANNOT_READ_MESSAGE: "Apps cannot read messages", PRIVATE_CHANNEL_INTEGRATION_OAUTH_SHEET_LEARN_MORE: "To learn more about apps in group messages visit our help center", PRIVATE_CHANNEL_INTEGRATION_MORE_APPS_INFO: "Learn more about apps in friend groups", PRIVATE_CHANNEL_INTEGRATION_MORE_APPS_INFO_LINKED: "[Learn more]({helpCenterLink}) about apps in friend groups", PRIVATE_CHANNEL_INTEGRATION_ADD_MODAL_ROW_INFO: "Open {appName} profile", PRIVATE_CHANNEL_ADD_APPS_INFO: "Add apps to this message to do stuff together!", PRIVATE_CHANNEL_APPS_HEADER: "Apps", PRIVATE_CHANNEL_APPS_HEADER_COUNT: "{count, number} {count, plural, =1 {App} other {Apps}}", PRIVATE_CHANNEL_TRY_APPS: "Learn more about apps in friend groups", PRIVATE_CHANNEL_TRY_APPS_LINKED: "[Learn more]({helpCenterLink}) about apps in friend groups", OAUTH2_REQUESTS_PRIVATE_CHANNEL_INTEGRATION: "wants to access your group message", BOT_PROFILE_MANAGE_PRIVATE_CHANNEL_INTEGRATION: "Manage App", BOT_PROFILE_REMOVE_PRIVATE_CHANNEL_INTEGRATION: "Remove App", BOT_PROFILE_ADD_TO_PRIVATE_CHANNEL: "Add App", MONETIZATION: "Monetization", GUILD_SETTINGS_MONETIZATION: "Server Monetization", GUILD_ROLE_SUBSCRIPTIONS_TITLE: "Server Subscriptions", GUILD_SETTINGS_ROLE_SUBSCRIPTIONS_STORE_PAGE: "Promo Page", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIER_EDIT_SUBTITLE: "Subscription Tier", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_CONTINUE: "Continue", GUILD_ROLE_SUBSCRIPTION_PLAN_FINISH: "Done", GUILD_SETTINGS_OWNER_MUST_ENABLE_MONETIZATION_TITLE: "Monetization not enabled", GUILD_SETTINGS_OWNER_MUST_ENABLE_MONETIZATION_DESCRIPTION: "The server owner must enable monetization before you can get started!", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIER_EDIT_DETAILS_TITLE: "Basic Info", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIER_EDIT_BENEFITS_TITLE: "Perks", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIER_EDIT_DESIGN_TITLE: "Flair", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIER_EDIT_PUBLISH_DRAFT_DESCRIPTION: "This tier is currently in Draft Mode. Tap Publish to go live to all server members.", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIER_EDIT_PUBLISH_DRAFT_CTA: "Publish", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIER_CARD_CREATE: "Create New Tier", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIERS_TAB_TITLE: "Manage Tiers", GUILD_SETTINGS_ROLE_SUBSCRIPTION_TIERS_TAB_DESCRIPTION: "Create and edit {maxTiers, plural, =1 {# tier} other {up to # tiers}} with different prices and levels of exclusive access.", GUILD_ROLE_SUBSCRIPTION_EMPTY_TITLE: "Create a Premium experience for your community", GUILD_ROLE_SUBSCRIPTION_EMPTY_DESCRIPTION: "Let members support you and the server. Monetization for all types of creators and community organizers.", GUILD_ROLE_SUBSCRIPTION_EMPTY_PERK_1_TITLE: "Reward your supporters", GUILD_ROLE_SUBSCRIPTION_EMPTY_PERK_1_DESCRIPTION: "Offer unique access, recognition, and benefits to community members who continue to support you", GUILD_ROLE_SUBSCRIPTION_EMPTY_PERK_2_TITLE: "Share exclusives", GUILD_ROLE_SUBSCRIPTION_EMPTY_PERK_2_DESCRIPTION: "Create channels or an entire server where only your subcribers can hang out and see your latest content", GUILD_ROLE_SUBSCRIPTION_EMPTY_PERK_3_TITLE: "Get paid", GUILD_ROLE_SUBSCRIPTION_EMPTY_PERK_3_DESCRIPTION: "Improve the community (and your bank account) with revenue earned from monthly subscription fees", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_CTA: "Request Access", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_OWNERS_ONLY_NOTICE: "Only the server owner can apply for Server Monetization. Give ’em a heads up!", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUIREMENTS_DESCRIPTION: "To request access, refer to the requirements below. Note that these are just the minimum requirements to apply, and acceptance is not guaranteed.\n\nTo learn more about Server Monetization, [check out the FAQ]({faqUrl}).", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_PENDING_DESCRIPTION: "Your request for Server Monetization access has been submitted. Please allow about 5 business days for a status update.\n\nTo learn more about Server Monetization, [check out the FAQ]({faqUrl}).", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBLE_MESSAGE: "Great work! Your server meets all the requirements to request Server Subscriptions access.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_NOT_ELIGIBLE_MESSAGE: "Not yet! Your server **$[does not](doesNotHook)** currently meet all the requirements to request Server Subscriptions access.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_2FA_ELIGIBLE: "2FA enabled", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_2FA_NOT_ELIGIBLE: "2FA not enabled", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_2FA_DESCRIPTION: "You must $[enable Two-Factor Authentication](enableMFAHook) on your account and require it for your server to enable Monetization—for your safety!", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_MEMBERS_ELIGIBLE: "Enough members", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_MEMBERS_NOT_ELIGIBLE: "Not enough members", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_MEMBERS_DESCRIPTION: "Your server needs at least {minimumSize, plural, one {1 member} other {{minimumSize} members}} to qualify for Server Subscriptions.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_AGE_ELIGIBLE: "Meets server age requirement", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_AGE_NOT_ELIGIBLE: "Does not meet server age requirement", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_AGE_DESCRIPTION: "Your server must be at least {minimumAge} old.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_OWNER_AGE_ELIGIBLE: "Meets server owner age requirement", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_OWNER_AGE_NOT_ELIGIBLE: "Does not meet server owner age requirement", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_OWNER_AGE_DESCRIPTION: "Your server owner must be at least {minimumOwnerAgeInYears} years old.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_VIOLATIONS_ELIGIBLE: "No policy violations", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_VIOLATIONS_NOT_ELIGIBLE: "Recent policy violations", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_VIOLATIONS_DESCRIPTION: "Your server must abide by our [Community Guidelines]({communityGuidelinesUrl}).", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_COMMUNICATORS_ELIGIBLE: "Weekly communicators", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_COMMUNICATORS_NOT_ELIGIBLE: "Lack of weekly communicators", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_COMMUNICATORS_DESCRIPTION: "Server members should be active and engaged.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_RETENTION_ELIGIBLE: "Healthy member retention", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_RETENTION_NOT_ELIGIBLE: "Poor member retention", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_RETENTION_DESCRIPTION: "Server member attrition should be relatively low.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_NSFW_CONTENT_ELIGIBLE: "Not primarily 18+ content", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_NSFW_CONTENT_NOT_ELIGIBLE: "Primarily 18+ content", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ELIGIBILITY_REQUIREMENT_NSFW_CONTENT_DESCRIPTION: "Age-restricted content is allowed, but it cannot be the focus of the server.", GUILD_ROLE_SUBSCRIPTION_WELCOME_TITLE: "Welcome to Server Subscriptions", GUILD_ROLE_SUBSCRIPTION_WELCOME_DESCRIPTION: "Time to set up shop. It's as easy as 1, 2, 3.", GUILD_ROLE_SUBSCRIPTION_WELCOME_ACCEPT_TERMS_TITLE: "Agree to the terms", GUILD_ROLE_SUBSCRIPTION_WELCOME_ACCEPT_TERMS_DESCRIPTION: "[Check out the terms]({fullTermsUrl}), then let us know you’re good to go.", GUILD_ROLE_SUBSCRIPTION_WELCOME_ACCEPT_TERMS_CHECKBOX: "I have read and agree to the terms", GUILD_ROLE_SUBSCRIPTION_WELCOME_SETUP_TIERS_TITLE: "Set up some tiers", GUILD_ROLE_SUBSCRIPTION_WELCOME_SETUP_TIERS_DESCRIPTION: "Reward your most loyal community members with access to exclusive channels, visual flair, fun perks, and pretty much anything else you can think of.", GUILD_ROLE_SUBSCRIPTION_WELCOME_GET_STARTED_TITLE: "Start making money", GUILD_ROLE_SUBSCRIPTION_WELCOME_GET_STARTED_DESCRIPTION: "Once you publish your first tier, you’ll be able to access detailed subscriber analytics that let you know what’s going on and how you might be able to improve.", GUILD_ROLE_SUBSCRIPTION_WELCOME_GET_STARTED_BUTTON: "Get Started", GUILD_ROLE_SUBSCRIPTION_WELCOME_GET_STARTED_BUTTON_DISABLED_TOOLTIP: "Agree to the terms to continue.", GUILD_ROLE_SUBSCRIPTIONS_TOGGLE_SECTION_LABEL: "Expand/collapse section", GUILD_ROLE_SUBSCRIPTION_WELCOME_V2_TITLE: "Earn money on Discord", GUILD_ROLE_SUBSCRIPTION_WELCOME_DESKTOP_V2_TITLE: "Earn money on Discord", GUILD_ROLE_SUBSCRIPTION_WELCOME_V2_SUBTITLE: "Generate an income by creating and selling monthly subscriptions, one-time downloadables, and Premium Roles. Discord makes it easy to promote your products within your server and beyond—and we're here to help you earn!", GUILD_ROLE_SUBSCRIPTION_WELCOME_V2_ACCEPT_TERMS_CHECKBOX: "I agree to the [Monetization Terms]({fullTermsUrl}) & [Server Monetization Policy]({creatorRevenuePolicyUrl})", GUILD_ROLE_SUBSCRIPTION_START_EARNING_CTA: "Start Earning", GUILD_ROLE_SUBSCRIPTION_WELCOME_HERO_BANNER_ALT: "A character looking excitedly at coins raining from the sky", GUILD_ROLE_SUBSCRIPTION_HOW_IT_WORKS_TITLE: "How it Works", GUILD_ROLE_SUBSCRIPTION_HOW_IT_WORKS_STEP_1: "Create exclusive perks and digital products on Discord", GUILD_ROLE_SUBSCRIPTION_HOW_IT_WORKS_STEP_2: "Tell your community to purchase", GUILD_ROLE_SUBSCRIPTION_HOW_IT_WORKS_STEP_3: "Grow your customer base & start earning!", GUILD_ROLE_SUBSCRIPTION_HOW_IT_WORKS_FOOTER: "Need inspiration? The [Creator Portal]({creatorPortalUrl}) has you covered.", GUILD_ROLE_SUBSCRIPTION_BENEFITS_FOR_CREATORS_TITLE: "Benefits for Servers", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_1: "Earn income by selling digital goods and experiences", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_2: "Reward and create a home for your super supporters", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_3: "Revenue share", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_NEW_SUBS: "100 sales and 50 new subscribers!", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_REVENUE_INCREASE: "+$1200 this month", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_1_PREVIEW_IMG_ALT: "A character monetizing as a creator", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_1_GRID_ARIA_LABEL: "A grid of user avatars", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_2_IMG_1_ALT: "Two characters enjoying ice cream together", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_2_IMG_2_ALT: "A hand offering a membership badge", GUILD_ROLE_SUBSCRIPTION_CREATOR_BENEFIT_3_IMG_ALT: "A character paying a subscription fee with coins", GUILD_ROLE_SUBSCRIPTION_SETTINGS_NOT_ELIGIBLE_TITLE_V2: "You don't meet certain Discord monetization requirements.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_RECENT_VIOLATION_ELIGIBILITY_CTA: "Contact Support", GUILD_ROLE_SUBSCRIPTION_SETTINGS_2MFA_ELIGIBILITY_CTA: "Go to enable", GUILD_ROLE_SUBSCRIPTION_WAITLIST_NOTICE: "We don't currently support server monetization where you're located in the world. Until we do, feel free to sign up for updates regarding Server Subscriptions.", GUILD_ROLE_SUBSCRIPTION_WAITLIST_CTA_LABEL: "Sign up for updates", GUILD_ROLE_SUBSCRIPTION_COMMUNITY_REQUIREMENT_NOTICE: "Before you can start monetizing, you need to convert your server to a Community", GUILD_ROLE_SUBSCRIPTION_COMMUNITY_REQUIREMENT_CTA_LABEL: "Become a Community", GUILD_ROLE_SUBSCRIPTION_OTHER_CREATOR_GUILD_SECTION_TITLE: "Learn from other monetizing servers", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SUBSCRIBERS_LABEL: "Subscribers", GUILD_ROLE_SUBSCRIPTION_OTHER_CREATOR_QUOTE_ATTRIBUTION: "- {attributionName}, {attributionTitle}", GUILD_ROLE_SUBSCRIPTION_OTHER_CREATOR_PREVIOUS_CARD_ARIA_LABEL: "See previous creator highlight", GUILD_ROLE_SUBSCRIPTION_OTHER_CREATOR_NEXT_CARD_ARIA_LABEL: "See next creator highlight", GUILD_ROLE_SUBSCRIPTION_OTHER_CREATOR_CARD_PREMIUM_EMOJI_TITLE: "My Premium Emoji", GUILD_ROLE_SUBSCRIPTION_OTHER_CREATOR_VIEW_SERVER_CTA: "View my server", CREATOR_MONETIZATION_SETTINGS_RESTRICTED_NOTICE: "Monetization has been restricted for this server. Please check your email for more information.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_READ_ONLY_FOR_PENDING_NEW_OWNER_PENDING_NOTICE: "Access to settings has been restricted for this server since new owner has not accepted the monetization terms.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_PENDING: "Request Pending", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_RECEIVED_AND_PENDING: "Your request has been received and is being reviewed.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_REJECTED: "Your request was not approved. You'll be able to try again in {requestCooldownDuration}.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_REJECTED_STATIC: "Your request was not approved. You'll be able to try again in 1 month.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_RESUBMIT: "Your previous request was not approved. Check your email and reapply after addressing the issues!", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_REJECTED_V2: "Your appeal was not approved. You will not be able to re-apply for {requestCooldownDuration}. Please review our [Server Monetization Policy]({creatorRevenuePolicyUrl}) to ensure you are in compliance.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_REJECTED_STATIC_V2: "Your appeal was not approved. You will not be able to re-apply for 30 days. Please review our Server Monetization Policy to ensure you are in compliance.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_REJECTED_HIGH_HARM: "Your server has been found in violation of our [Discord Community guidelines.]({communityGuidelineUrl}) Due to the nature of this violation you are not eligible for a payout.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_REJECTED_HIGH_HARM_ALT: "Your server has been found in violation of our [Discord Community guidelines]({communityGuidelineUrl}) and is ineligible for server subscriptions.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_ENABLE_REQUEST_RESUBMIT_V2: "Your server has been found in violation of our Server Monetization Policy and therefore your payout was not approved. Please check the email associated with this server for more details.\n\nDo not start an appeal until you have resolved the issue detailed in the email. If you do not pass the appeal you will not be able to re-apply for 30 days.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SUBMIT_APPEAL_CTA: "Submit Appeal", GUILD_ROLE_SUBSCRIPTION_SETTINGS_NO_PUBLISHED_TIERS: "Get Started", GUILD_ROLE_SUBSCRIPTION_SETTINGS_DESCRIPTION: "Monetize your server by offering exclusive channels and benefits.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYOUTS_PROBLEM_WARNING: "Oops, a problem with your account is preventing payout. Check your email for more information, and [update your payment settings]({url}).", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_BASIC_INFO: "Basic Info", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_TIERS: "Tiers", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_EMOJI: "Emoji", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_EMOJI_MOBILE: "Premium Emoji", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_PAYMENT: "Payment", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_PREVIEW: "Preview", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_PREVIEW_DISABLED: "You need to fill out any empty tiers to preview what everything looks like", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_ADVANCED: "Advanced", GUILD_ROLE_SUBSCRIPTION_PREMIUM_ROLE_ICON_LABEL: "Server Subscriptions role", VIEWING_AS_SUBSCRIPTION_ROLES_BACK: "Back to Server Subscriptions Settings", VIEWING_AS_SUBSCRIPTION_ROLES_SELECT: "Select Tier", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_TITLE: "Promo Page", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_DESCRIPTION: "Easily share your premium offering with people new to your server. Your public Promo Page may need 5 minutes to reflect latest changes.", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_ENABLE: "Show your premium offering", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_PROMO_URL: "Your Promo Page URL", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_GO_TO_PAGE: "Go to Page", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_ACCENT_COLOR_TITLE: "Choose Page Accent Color", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_ACCENT_COLOR_DESCRIPTION: "Add your personal style to your profile with a custom accent color.", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_ACCENT_COLOR_BUTTON_PREVIEW: "Button Preview", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_TRAILER_TITLE: "Teaser Trailer", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_TRAILER_DESCRIPTION: "Add an unlisted or public youtube video link that we'll embed on your promo page.", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_TRAILER_PLACEHOLDER: "Enter a YouTube URL", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_TRAILER_BAD_LINK: "Please enter a valid YouTube URL", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_DISPLAY_OPTIONS_TITLE: "Choose what you want to show", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_DISPLAY_OPTIONS_DESCRIPTION: "Decide which of the following choices you want to show on your live promo page.", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_DISPLAY_OPTIONS_PREMIUM_MEMBER_COUNT: "Subscriber Count", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_DISPLAY_OPTIONS_PREMIUM_MEMBER_COUNT_DESCRIPTION: "Display how many subscribers you have", GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_SETTINGS_PRIMARY_TOGGLE_DISABLED_TOOLTIP: "You need at least one published tier to enable the Promo Page.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_SECTION_BASIC_INFO_NEEDS_APPLICATION: "Enable monetization first!", FORM_HELP_SYSTEM_CHANNEL_ROLE_SUBSCRIPTION_PURCHASE_MESSAGES: "Send a message when someone purchases a Server Product or Server Subscription", FORM_HELP_SYSTEM_CHANNEL_ROLE_SUBSCRIPTION_PURCHASE_MESSAGE_REPLIES: "Prompt members to reply to Server Subscription congratulation messages with a sticker", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_HEADER: "Premium Setup", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_PAYMENT_ENABLE: "Enable monetization", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_INFO_FORMAT: "Select a format", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_INFO_DESCRIPTION: "Write a description", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_INFO_COVER_IMAGE: "Upload a cover photo", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_TIER_BASICS: "Fill out the basics", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_TIER_FLAIR: "Set visual flair", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_TIER_PERKS: "Select perks", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_LEARN_MORE_SECTION_TITLE: "Learn More", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_LINK_PROMO_PAGE: "[Set up your promo page]({promoPageGuideUrl})", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_LINK_CASE_STUDIES: "[Get inspired from fellow creators]({caseStudiesUrl})", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_LINK_SUBSCRIPTION_OFFERING: "[Build your Subscription offering]({subscriptionOfferingGuideUrl})", GUILD_ROLE_SUBSCRIPTION_CHECKLIST_LINK_TIER_STRUCTURE: "[Deciding your tier structure]({tierStructureGuideUrl})", GUILD_ROLE_SUBSCRIPTION_FORMAT_TITLE: "Exclusivity Level", GUILD_ROLE_SUBSCRIPTION_FORMAT_DESCRIPTION: "Do you want to make your entire server exclusive or just a manually selected set of channels?", GUILD_ROLE_SUBSCRIPTION_FORMAT_SOME_CHANNELS_NAME: "I just want to make some channels exclusive", GUILD_ROLE_SUBSCRIPTION_ENABLE_MONETIZATION_UNAVAILABLE_MOBILE_TITLE: "In order to set up Server Subscriptions, you must first enable server monetization", GUILD_ROLE_SUBSCRIPTION_ENABLE_MONETIZATION_UNAVAILABLE_MOBILE_DESCRIPTION: "That feature isn’t yet available on Discord mobile. Check out Server Subscriptions settings on desktop or web to get started!", GUILD_ROLE_SUBSCRIPTION_PAYMENT_ANALYTICS_UNAVAILABLE_MOBILE_TITLE: "Sorry, payment analytics isn’t available on mobile yet", GUILD_ROLE_SUBSCRIPTION_PAYMENT_ANALYTICS_UNAVAILABLE_MOBILE_DESCRIPTION: "That feature isn’t yet available on Discord mobile. Check out Server Subscriptions settings on desktop or web to get started!", GUILD_ROLE_SUBSCRIPTION_FORMAT_SOME_CHANNELS_DESCRIPTION: "Manually select which channels you want to lock to non-subscribers.", GUILD_ROLE_SUBSCRIPTION_FORMAT_ALL_CHANNELS_NAME: "I want to make my entire server exclusive", GUILD_ROLE_SUBSCRIPTION_FORMAT_ALL_CHANNELS_DESCRIPTION: "All channels in your server will be locked to non-subscribers.", GUILD_ROLE_SUBSCRIPTION_FORMAT_ALL_CHANNELS_DIALOG_TITLE: "Make entire server exclusive", GUILD_ROLE_SUBSCRIPTION_FORMAT_ALL_CHANNELS_DIALOG_TEXT: "After saving this change, only admins and server subscribers can view channels and send messages on your server.", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_DESCRIPTION_TITLE: "Description", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_DESCRIPTION_PLACEHOLDER: "Let folks know what’s great about Server Subscriptions on your server", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_COVER_IMAGE_TITLE: "Cover photo", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_COVER_IMAGE_DESCRIPTION: "We recommend an image that’s at least 1600px by 400px. You can upload a PNG or JPG under 10 MB.", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_COVER_IMAGE_CTA_UPLOAD: "Upload Image", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_COVER_IMAGE_CTA_EDIT: "Edit Image", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_COVER_IMAGE_CTA_EDIT_A11Y: "Edit Image, replace {filename}", GUILD_ROLE_SUBSCRIPTION_IMAGE_CTA_DEFAULT_FILENAME: "saved image", GUILD_ROLE_SUBSCRIPTION_SETUP_INFO_FULL_OUT_ALL_INFO: "Please add a description and cover image", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_SYMBOL_TITLE: "Tier avatar", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_SYMBOL_DESCRIPTION: "Upload an image under 256kb. We recommend at least 96x96 pixels.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_NAME_TITLE: "Tier Name", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_NAME_PLACEHOLDER: "Golden Wumpus", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_PRICE_TITLE: "Price Per Month", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_PRICE_PLACEHOLDER: "Select a price", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DESCRIPTION_TITLE: "Description", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DESCRIPTION_PLACEHOLDER: "Let people know why they might want to join this tier.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_FLAIR_HEADER_TITLE: "Visual Flair", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_FLAIR_HEADER_SUBTITLE: "Give your server subscribers a way to show off their support.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_BENEFITS_HEADER_TITLE: "Channels & Benefits", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_BENEFITS_HEADER_SUBTITLE: "You can offer access to every channel on your server or just a few that you choose by hand. You can also add benefits like merch or digital goods.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DRAFT_BANNER_TITLE: "This tier is in Draft Mode.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DRAFT_BANNER_DESCRIPTION: "It will not be visible to server members until you publish it.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_SAVE_BEFORE_PUBLISH_TOOLTIP: "Please save before publishing", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_BASIC_INFO_SECTION_TITLE: "Basic Info", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ADVANCE_SECTION_TITLE: "Advanced Options", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ARCHIVE_LABEL: "Archive Tier", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ARCHIVE_BUTTON: "Archive Tier", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ARCHIVE_DESCRIPTION: "Archiving a tier removes it from public view and cancels renewals for existing members. This action is not reversible.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ARCHIVE_HEADER: "Archive {tierName}", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DELETE_LABEL: "Delete Tier", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DELETE_BUTTON: "Delete Tier", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DELETE_DESCRIPTION: "Permanently delete this tier and its role. This can only be done if there are no remaining subscribers of this tier.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DELETE_UNSAVED_DESCRIPTION: "Discard all changes and delete this tier.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DELETE_HEADER: "Delete {tierName}", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DELETE_TOOLTIP: "Cannot delete a tier with subscribers ({listingMemberCount} remaining)", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_REMOVAL_BUTTON: "Delete Tier", GUILD_ROLE_SUBSCRIPTION_SETUP_INITIAL_TIER_NAME: "New Tier", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_EDIT_LABEL: "Edit Tier", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_DELETED_CHANNEL_LABEL: "Channel Deleted", GUILD_ROLE_SUBSCRIPTION_NAGBAR_TEXT: "Finish setting up Server Subscription tiers to start earning!", GUILD_ROLE_SUBSCRIPTION_SETUP_CHANNEL_BENEFITS_CHANNELS_TITLE: "Exclusive Channels", GUILD_ROLE_SUBSCRIPTION_SETUP_CHANNEL_BENEFITS_CHANNELS_DESCRIPTION: "Create a new premium channel or convert an existing channel. The order here will match what is displayed.", GUILD_ROLE_SUBSCRIPTION_SETUP_CHANNEL_BENEFITS_ADD_BUTTON_TEXT: "Add a channel", GUILD_ROLE_SUBSCRIPTION_SETUP_INTANGIBLE_BENEFITS_TITLE: "Additional Benefits", GUILD_ROLE_SUBSCRIPTION_SETUP_INTANGIBLE_BENEFITS_DESCRIPTION: "Offer other perks that exist outside Discord. The order here will match what is displayed.", GUILD_ROLE_SUBSCRIPTION_SETUP_INTANGIBLE_BENEFITS_ADD_BUTTON_TEXT: "Add a benefit", GUILD_ROLE_SUBSCRIPTION_SETUP_EMOJI_TITLE: "Emoji", GUILD_ROLE_SUBSCRIPTION_SETUP_EMOJI_DESCRIPTION: "Add up to {premiumEmojiMaximum} emoji that members of this tier can use.", GUILD_ROLE_SUBSCRIPTION_SETUP_EMOJI_MANAGE_LINK: "[Manage Premium Emoji](handleTransitionToManageEmoji)", GUILD_ROLE_SUBSCRIPTION_SETUP_EMOJI_ADD_BUTTON_TEXT: "Add emoji", GUILD_ROLE_SUBSCRIPTION_SETUP_EMOJI_REMOVE_BUTTON_ARIA_LABEL: "Remove emoji", GUILD_ROLE_SUBSCRIPTION_SETUP_MOBILE_TIER_EMOJI_EDIT_BUTTON_TEXT: "Edit tier emoji", GUILD_ROLE_SUBSCRIPTION_SETUP_MOBILE_TIER_EMOJI_EDIT_TITLE: "Edit Tier Emoji", GUILD_ROLE_SUBSCRIPTION_SETUP_MOBILE_TIER_EMOJI_EDIT_INLINE_MESSAGE: "This is the last tier using this emoji.", GUILD_ROLE_SUBSCRIPTION_SETUP_MOBILE_TIER_EMOJI_EDIT_INLINE_WARNING: "Removing this emoji will remove it from your server.", GUILD_ROLE_SUBSCRIPTION_SETUP_MOBILE_TIER_EMOJI_EDIT_CONFIRM_ALERT_TITLE: "Are you sure?", GUILD_ROLE_SUBSCRIPTION_SETUP_MOBILE_TIER_EMOJI_EDIT_CONFIRM_ALERT_BODY: "{numberOfEmojiSlatedForDeletion, plural, =1 {This is the last tier using this emoji. Removing this emoji will delete it from your server.} other {This is the last tier using these {numberOfEmojiSlatedForDeletion} emoji. Removing these emoji will delete them from your server.}}", GUILD_ROLE_SUBSCRIPTION_SETUP_FREE_TRIAL_TITLE: "Free Trial", GUILD_ROLE_SUBSCRIPTION_SETUP_FREE_TRIAL_DESCRIPTION: "Offer server members a one-time opportunity to take this tier for a spin without upfront payment. You may choose not to include Additional Benefits as part of this offer.", GUILD_ROLE_SUBSCRIPTION_SETUP_ENABLE_FREE_TRIAL_CTA: "Enable free trials for this tier", GUILD_ROLE_SUBSCRIPTION_SETUP_FREE_TRIAL_DISABLED: "Disabled", GUILD_ROLE_SUBSCRIPTION_SETUP_FREE_TRIAL_TIME_LIMIT_TITLE: "Time Limit", GUILD_ROLE_SUBSCRIPTION_SETUP_FREE_TRIAL_TIME_LIMIT_DESCRIPTION: "Choose a duration for free trials of this tier.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_TRIAL_TIME_LIMIT_DEFAULT_OPTION: "{defaultLimit} (Default)", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ACTIVE_TRIAL_USER_LIMIT_TITLE: "Quantity", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ACTIVE_TRIAL_USER_LIMIT_DESCRIPTION: "Set how many users can claim a free trial at a given time.", GUILD_ROLE_SUBSCRIPTION_SETUP_TIER_ACTIVE_TRIAL_USER_LIMIT_NONE_OPTION: "Unlimited (Default)", GUILD_ROLE_SUBSCRIPTION_TRIAL_RENEWAL_FOOTER: "Your free {trialInterval} credit will be applied until it runs out, and we'll send you a reminder email **{days, plural, =1 {1 day} other {{days} days}}** before your free period ends. Have questions? [Check out our offer FAQ]({helpdeskArticle}) or [contact our support team]({contactLink}).", GUILD_ROLE_SUBSCRIPTION_TRIAL_RENEWAL_FOOTER_V2: 'By selecting "{buttonText}", you’re agreeing to Discord’s [Paid Service Terms]({paidServiceTermsArticle}). "{tierName}" is a recurring subscription. Your payment method will be charged after your trial ends and continue to be charged every {interval} unless you [cancel your subscription]({cancelSubscriptionArticle}). We’ll send a reminder email **{days, plural, =1 {1 day} other {{days} days}}** before your trial ends. Total doesn’t include any additional fees charged by your financial institution. Have questions? [Check out our offer FAQ]({helpdeskArticle}) or [contact our support team]({contactLink}).', GUILD_ROLE_SUBSCRIPTION_SETUP_FLAIR_PREVIEW_MESSAGE_TEXT: "wow this looks so cool", GUILD_ROLE_SUBSCRIPTION_SETUP_FLAIR_BADGE_TITLE: "Icon", GUILD_ROLE_SUBSCRIPTION_SETUP_FLAIR_BADGE_DESCRIPTION: "Upload an image under 256kb or pick a custom emoji from this server. We recommend at least 64x64 pixels. Members will see the icon for their highest role if they have multiple roles.", GUILD_ROLE_SUBSCRIPTION_SETUP_FLAIR_COLOR_TITLE: "Color", GUILD_ROLE_SUBSCRIPTION_BENEFIT_EDIT_ARIA_LABEL: "Edit benefit", GUILD_ROLE_SUBSCRIPTION_BENEFIT_CHANNEL_MODAL_TITLE: "Exclusive Channel", GUILD_ROLE_SUBSCRIPTION_BENEFIT_CHANNEL_MODAL_WARNING: "Adding a channel to a subscription tier will remove access to server members who are not server subscribers.", GUILD_ROLE_SUBSCRIPTION_BENEFIT_CHANNEL_SELECT_CREATE_LABEL: "Create a new channel", GUILD_ROLE_SUBSCRIPTION_BENEFIT_CHANNEL_DESCRIPTION_PLACEHOLDER: "What can subscribers do in this channel?", GUILD_ROLE_SUBSCRIPTION_BENEFIT_INTANGIBLE_MODAL_TITLE: "Additional Benefit", GUILD_ROLE_SUBSCRIPTION_BENEFIT_INTANGIBLE_NAME_TITLE: "Benefit", GUILD_ROLE_SUBSCRIPTION_BENEFIT_INTANGIBLE_DESCRIPTION_PLACEHOLDER: "What do subscribers get?", GUILD_ROLE_SUBSCRIPTION_BENEFIT_EMOJI_PLACEHOLDER: "Type or select an emoji", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_TITLE: "Payment Team", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_DESCRIPTION: "Payments will be sent to the payment info on file for the team named **{teamName}**.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_NO_TEAM_DESCRIPTION: "No team selected for this server. Please select a team so we can send you payments.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_CHANGE_TEAM_CTA: "Change Your Payment Team", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_SELECT_TEAM_CTA: "Select Your Payment Team", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_TITLE: "Change Payment Team", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_SELECT_TEAM_TITLE: "Select Payment Team", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_DESCRIPTION: "Change the team that payments for server monetization will be sent to.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_TEAM_CHANGE_WARNING_HEADING: "Changing your team may affect payout eligibility", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_TEAM_CHANGE_WARNING: "To be eligible to receive payment, you must earn a minimum balance of $100 for your first payout, and $25 for each subsequent payout. Any previous team's earnings will not count toward your minimum balance.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_SELECT_TEAM_DESCRIPTION: "Select the team that payments for server subscriptions will be sent to.", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_SELECT_TEAM_TO_TRANSFER_LABEL: "Select team to transfer to", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_SELECT_TEAM_LABEL: "Select team", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_MFA_LABEL: "Enter 2FA verification code", GUILD_ROLE_SUBSCRIPTION_SETTINGS_PAYMENT_TEAM_SECTION_MODAL_MFA_PLACEHOLDER: "MFA Code", CREATOR_MONETIZATION_SETTINGS_DISABLE_MONETIZATION_SECTION_TITLE: "Disable Monetization", CREATOR_MONETIZATION_SETTINGS_DISABLE_MONETIZATION_SECTION_DESCRIPTION: "This will disable Server Subscriptions and Server Products for **!!{guildName}!!**. There should be no remaining payouts and all subscription tiers must be deleted in order to complete this action.", CREATOR_MONETIZATION_SETTINGS_DISABLE_MONETIZATION_CTA: "Disable Monetization", CREATOR_MONETIZATION_SETTINGS_DISABLE_MONETIZATION_MODAL_HEADER: "Disable Monetization", CREATOR_MONETIZATION_SETTINGS_DISABLE_MONETIZATION_MODAL_DESCRIPTION: "Disable server subscriptions and products for **!!{guildName}!!**. To delete your payment team you will need to do so in the [Developer Portal]({url}).", GUILD_ROLE_SUBSCRIPTION_EMOJI_ADD_MODAL_HEADER: "Select Premium Emoji", GUILD_ROLE_SUBSCRIPTION_EMOJI_ADD_MODAL_DESCRIPTION: "Want to upload new emoji? You can do so from the [Manage Premium Emoji](transitionToManageEmoji) page.", GUILD_ROLE_SUBSCRIPTION_EMOJI_ADD_MODAL_SAVE_BUTTON: "Add {totalEmoji, plural, =1 {1 Emoji} other {{totalEmoji} Emoji}}", GUILD_ROLE_SUBSCRIPTION_EMOJI_DELETE_MODAL_HEADER: "Are you sure?", GUILD_ROLE_SUBSCRIPTION_EMOJI_DELETE_MODAL_BODY: "This is the last tier that offers this emoji. Removing it will delete the emoji.", GUILD_ROLE_SUBSCRIPTION_EMOJI_DELETE_MODAL_DELETE_BUTTON: "Delete Emoji", GUILD_ROLE_SUBSCRIPTION_BENEFIT_IMPORT_HEADER_TITLE: "Import Benefits", GUILD_ROLE_SUBSCRIPTION_BENEFIT_IMPORT_HEADER_SUBTITLE: "Duplicate the benefits or channel permissions from an existing tier or role.", GUILD_ROLE_SUBSCRIPTION_BENEFIT_IMPORT_BUTTON: "Import", GUILD_ROLE_SUBSCRIPTION_BENEFIT_IMPORT_NUM_BENEFITS: "{channels, plural, one {1 channel} other {# channels}} & {benefits, plural, one {1 benefit} other {# benefits}}", GUILD_ROLE_SUBSCRIPTION_BENEFIT_IMPORT_SELECT_ROLE: "Select a role", GUILD_ROLE_SUBSCRIPTION_BENEFIT_IMPORT_SELECT_ROLE_EMPTY: "There are no roles with channel permissions to import.", GUILD_ROLE_SUBSCRIPTION_IMPORT_BENEFITS_MODAL_HEADER: "Import Benefits - !!{tierName}!!", GUILD_ROLE_SUBSCRIPTION_IMPORT_BENEFITS_FROM_ROLE_MODAL_HEADER_1: "Import Channel Permissions", GUILD_ROLE_SUBSCRIPTION_IMPORT_BENEFITS_FROM_ROLE_MODAL_HEADER_2: "Import Channel Permissions from **!!{roleName}!!**", GUILD_ROLE_SUBSCRIPTION_IMPORT_BENEFITS_SELECT_ALL_CHANNEL_BENEFITS: "Select all channels", GUILD_ROLE_SUBSCRIPTION_IMPORT_BENEFITS_SELECT_ALL_INTANGIBLE_BENEFITS: "Select all benefits", GUILD_ROLE_SUBSCRIPTION_IMPORT_BENEFITS_CONFIRM_BUTTON: "Add Benefits to Tier", GUILD_ROLE_SUBSCRIPTION_IMPORT_BENEFITS_FROM_ROLE_CONFIRM_BUTTON: "Add Channels", CREATE_CHANNEL_MODAL_CATEGORY_PLACEHOLDER: "Select a category", GUILD_ROLE_SUSBCRIPTION_TIER_MANAGEMENT_TITLE: "Manage Tiers", GUILD_ROLE_SUBSCRIPTION_TIER_MANAGEMENT_DRAFT_LABEL: "Draft", GUILD_ROLE_SUBSCRIPTION_TIER_MANAGEMENT_ARCHIVED_LABEL: "Archived", GUILD_ROLE_SUBSCRIPTION_TIER_MANAGEMENT_UNSAVED_LABEL: "Unsaved", GUILD_ROLE_SUBSCRIPTION_PRICE_PER_INTERVAL: "{price}/{interval}", GUILD_ROLE_SUBSCRIPTION_PUBLISH_TIER_DIALOG_TITLE: "Are you ready to publish this tier?", GUILD_ROLE_SUBSCRIPTION_PUBLISH_TIER_DIALOG_DESCRIPTION: "Any changes will be saved and the tier will immediately become visible to members of your server.", GUILD_ROLE_SUBSCRIPTION_PUBLISH_TIER_CTA: "Publish Tier", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_DETAILS_TITLE: "Let's create a tier", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_DETAILS_DESCRIPTION: "You’ll be able to create additional tiers later, or you can just have one! Totally up to you.", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_CHANNEL_BENEFITS_TITLE: "Pick some channels.", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_CHANNEL_BENEFITS_DESCRIPTION: "You can offer access to every channel on your server or just a few that you choose by hand.", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_INTANGIBLE_BENEFITS_TITLE: "Any other benefits?", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_INTANGIBLE_BENEFITS_DESCRIPTION: "Access to exclusive channels is just one way to reward server subscribers. You can also offer other benefits.", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_BENEFITS_DESCRIPTION: "Your heart's been aching, but you're too shy to say it", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_DESIGN_TITLE: "Make it look cool.", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_DESIGN_DESCRIPTION: "Give your server subscribers a way to show off their patronage to the world—or at least the server.", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_CONFIRMATION_TITLE: "All good?", GUILD_ROLE_SUBSCRIPTION_CREATE_TIER_CONFIRMATION_DESCRIPTION: "You’ll still have the opportunity to make changes after you tap Done.", GUILD_ROLE_SUBSCRIPTION_MOBILE_SUBCRIBE_CTA_TITLE: "A full commitment's what I'm thinking of", GUILD_ROLE_SUBSCRIPTION_MOBILE_SUBCRIBE_CTA_DESCRIPTION: "You wouldn't get this from any other guy", GUILD_ROLE_SUBSCRIPTION_TIER_EXCLUSIVE_CHANNEL_TITLE: "Exclusive Channel", GUILD_ROLE_SUBSCRIPTION_TIER_EXCLUSIVE_CHANNELS_SECTION_TITLE: "Exclusive Channels", GUILD_ROLE_SUBSCRIPTION_TIER_ADDITIONAL_BENEFIT_TITLE: "Additional Benefit", GUILD_ROLE_SUBSCRIPTION_TIER_ADDITIONAL_BENEFITS_SECTION_TITLE: "Additional Benefits", GUILD_ROLE_SUBSCRIPTION_TIER_EMOJI_SECTION_TITLE: "{count, plural, =1 {Emoji} other {{count} Emoji}}", GUILD_ROLE_SUBSCRIPTION_BENEFIT: "Benefit", GUILD_ROLE_SUBSCRIPTION_TIER_SHOW_MORE_DESCRIPTION: "Show More", GUILD_ROLE_SUBSCRIPTION_TIER_SHOW_MORE_DESCRIPTION_WITH_ITEMS: "Show {numTruncated} More", GUILD_ROLE_SUBSCRIPTION_TIER_SHOW_LESS_DESCRIPTION: "Show Less", GUILD_ROLE_SUBSCRIPTION_LISTINGS_SCROLLABLE_NOTICE: "Scroll for more options!", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_NAME_LABEL: "Tier Name", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_NAME_PLACEHOLDER: "Golden Wumpus Club", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_CUSTOM_IMAGE_LABEL: "Custom Image", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_CUSTOM_IMAGE_DESCRIPTION: "We recommend an image that's at least 500px square.", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_CUSTOM_IMAGE_BUTTON: "Upload Image", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_CUSTOM_IMAGE_EDIT_BUTTON: "Edit Image", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_CUSTOM_IMAGE_A11Y_LABEL: "Select Image", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_PRICE_LABEL: "Price", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_PRICE_PLACEHOLDER: "Select a price", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_DESCRIPTION_LABEL: "Description", GUILD_ROLE_SUBSCRIPTION_TIER_DETAIL_DESCRIPTION_PLACEHOLDER: "Let people know why they should join this tier!", GUILD_ROLE_SUBSCRIPTION_SEARCH_CHANNELS_PLACEHOLDER: "Search channels", GUILD_ROLE_SUBSCRIPTION_TIER_DELETE_CTA: "Delete Tier", GUILD_ROLE_SUBSCRIPTION_TIER_ARCHIVE_CTA: "Archive Tier", GUILD_ROLE_SUBSCRIPTION_TIER_DELETE_CONFIRMATION_TITLE: "Are you sure you want to delete this tier?", GUILD_ROLE_SUBSCRIPTION_TIER_ARCHIVE_CONFIRMATION_TITLE: "Are you sure you want to archive this tier?", GUILD_ROLE_SUBSCRIPTION_TIER_DELETE_CONFIRMATION_SUBTITLE: "This cannot be undone.", GUILD_ROLE_SUBSCRIPTION_TIER_ARCHIVE_CONFIRMATION_SUBTITLE: "This cannot be undone.", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_ADD_CHANNEL_LABEL: "Add a channel", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_ADD_BENEFIT_LABEL: "Add a benefit", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_CREATE_A_CHANNEL_LABEL: "Create a new channel", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_REMOVE_FROM_TIER_LABEL: "Remove from tier", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_CHANNEL_NAME_PLACEHOLDER: "Select a channel", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_INTANGIBLE_NAME_PLACEHOLDER: "What do subscribers get?", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_EMOJI_PLACEHOLDER: "Select an emoji", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_INCLUDE_ALL_CHANNELS_LABEL: "Include all channels", GUILD_ROLE_SUBSCRIPTION_TIER_BENEFITS_SELECT_CHANNELS_MANUALLY_LABEL: "Select channels manually", GUILD_ROLE_SUBSCRIPTION_CHANNEL_BENEFIT_DESCRIPTION_PLACEHOLDER: "What can members do in this channel?", GUILD_ROLE_SUBSCRIPTION_INTANGIBLE_BENEFIT_DESCRIPTION_PLACEHOLDER: "Any additional details?", GUILD_ROLE_SUBSCRIPTION_EMOJI: "Emoji", GUILD_ROLE_SUBSCRIPTION_TIER_SUBSCRIBE: "Subscribe", GUILD_ROLE_SUBSCRIPTION_TIER_DESIGN_MEMBER_COLOR_LABEL: "Member Color", GUILD_ROLE_SUBSCRIPTION_TIER_DESIGN_MEMBER_BADGE_LABEL: "Member Badge", GUILD_ROLE_SUBSCRIPTION_TIER_DESIGN_MEMBER_BADGE_DESCRIPTION: "We recommend an image that's at least 32px square.", GUILD_ROLE_SUBSCRIPTION_TIER_DESIGN_MEMBER_PREVIEW_PLACEHOLDER_MESSAGE: "check out how cool this looks", GUILD_ROLE_SUBSCRIPTION_TIER_REVIEW_SUBSCRIBE_LABEL: "Subscribe", GUILD_ROLE_SUBSCRIPTION_TIER_REVIEW_SUBSCRIBED_LABEL: "Subscribed", GUILD_ROLE_SUBSCRIPTION_TIER_REVIEW_CANCELED_LABEL: "Canceled", GUILD_ROLE_SUBSCRIPTION_TIER_REVIEW_EXCLUSIVE_CHANNEL_HEADER: "{count, plural, =1 {Exclusive Channel} other {{count} Exclusive Channels}}", GUILD_ROLE_SUBSCRIPTION_TIER_REVIEW_INTANGIBLE_BENEFITS_HEADER: "{count, plural, =1 {Additional Benefit} other {Additional Benefits}}", GUILD_ROLE_SUBSCRIPTION_TIER_REVIEW_MEMBER_PREVIEW: "Member Color & Badge", GUILD_ROLE_SUBSCRIPTION_TIER_REVIEW_ENTIRE_SERVER_ACCESS_BENEFIT: "Access to the entire server", GUILD_ROLE_SUBSCRIPTION_PLAN_SETUP_FORMAT_TITLE: "Important decision time.", GUILD_ROLE_SUBSCRIPTION_PLAN_SETUP_FORMAT_SUBTITLE: "Do you want to make your entire server exclusive or just a manually selected set of channels?", GUILD_ROLE_SUBSCRIPTION_PLAN_SETUP_DETAILS_TITLE: "Fill out some basics.", GUILD_ROLE_SUBSCRIPTION_PLAN_SETUP_DETAILS_SUBTITLE: "This stuff will help you make a great first impression on people thinking about joining premium.", GUILD_ROLE_SUBSCRIPTION_PLAN_SETUP_COVER_PHOTO_LABEL: "Cover Photo", GUILD_ROLE_SUBSCRIPTION_PLAN_SETUP_COVER_PHOTO_DESCRIPTION: "We recommend an image that’s at least 1500px wide and 500px tall.", GUILD_ROLE_SUBSCRIPTION_PLAN_SETUP_DESCRIPTION_PLACEHOLDER: "Let the people know about your Server Subscription!", GUILD_ROLE_SUBSCRIPTION_EARNINGS_HEADER: "Payment Overview", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_PERIOD: "Period", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_TIERS: "Tier", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_PRICE: "Price", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_MEMBERS: "Members", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_AMOUNT: "Amount", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_AMOUNT_DISCLAIMER: "Total payout after deductions", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS: "Status", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_PENDING: "Pending", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_SCHEDULED: "Scheduled", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_PENDING_OR_SCHEDULED_WITH_DATE: "Scheduled for {payoutDate}", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_PAID: "Paid", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_ERROR: "Error", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_CANCELLED: "Canceled", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_DEFERRED: "Deferred", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_REJECTED: "Rejected", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_STATUS_RISK_REVIEW: "Under Review", GUILD_ROLE_SUBSCRIPTION_EARNINGS_TABLE_TIER_DELETED: "Tier Deleted", GUILD_ROLE_SUBSCRIPTION_EARNINGS_EDIT_PAYMENT_METHOD_LINK: "[Edit Payment Info]({url})", GUILD_ROLE_SUBSCRIPTION_EARNINGS_EDIT_PAYOUT: "Edit Payment Info", GUILD_ROLE_SUBSCRIPTION_EARNINGS_METRIC_REVENUE: "Revenue", GUILD_ROLE_SUBSCRIPTION_EARNINGS_METRIC_SUBSCRIBERS: "Total Members", GUILD_ROLE_SUBSCRIPTION_EARNINGS_METRIC_NEXT_PAYMENT: "Next Payment By", GUILD_ROLE_SUBSCRIPTION_EARNINGS_METRIC_NEXT_PAYMENT_DISCLAIMER: "Eligible payouts will be paid within 15 days of the end of the calendar month during which revenue was earned. For more information on payout eligibility, please see our Monetization Terms", GUILD_ROLE_SUBSCRIPTION_EARNINGS_METRIC_TREND_DESCRIPTION: "{value} this month", GUILD_ROLE_SUBSCRIPTION_EARNINGS_METRIC_TREND_EMPTY_TEXT: "Check back later!", GUILD_ROLE_SUBSCRIPTION_EARNINGS_EARNINGS_HISTORY_HEADER: "Transaction History", GUILD_ROLE_SUBSCRIPTION_EARNINGS_EARNINGS_HISTORY_DESCRIPTION: "Expand pay periods to see a breakdown by tier.", GUILD_ROLE_SUBSCRIPTION_EARNINGS_EARNINGS_HISTORY_EMPTY: "Check back here for a history of your transactions once you’ve had monetization enabled on your server for a full month.", GUILD_ROLE_SUBSCRIPTION_EARNINGS_A11Y_TOGGLE_TRANSACTION_PERIOD: "Toggle transaction period details for {transactionPeriod}", GUILD_MONETIZATION_ENABLE_HEADER: "Enable Monetization", GUILD_MONETIZATION_ENABLE_NON_OWNER_WARNING: "Only server owners can enable monetization. You'll need to ask them to do so first before being able to access monetization settings.", GUILD_MONETIZATION_ENABLE_DESCRIPTION: "In order to enable server monetization, you must $[set up a team](onCreateTeamHook) and then select it below. Teams **must** have valid payment information. **This process cannot be completed with a pseudonym instead of your legal name or business name**.\n\nOnce enabled, you will be able to accept payment for monetization.", GUILD_MONETIZATION_ENABLE_SELECT_PLACEHOLDER: "Select a Team", GUILD_MONETIZATION_ENABLE_CREATE_TEAM: "Create Team", GUILD_MONETIZATION_ENABLE_CTA: "Enable", GUILD_MONETIZATION_ENABLE_CONFIRMATION_TITLE: "Monetization has been enabled.", GUILD_MONETIZATION_ENABLE_CONFIRMATION_SUBTITLE: "You can now accept payment for Server Monetization.", GUILD_ROLE_SUBSCRIPTION_EARNINGS_INSIGHTS_NOTICE_TEXT: "Want to view more detailed data? Visit [Server Subscriptions Insights]({insightsURL}).", GUILD_ROLE_SUBSCRIPTION_EARNINGS_INCLUDE_PREVIOUS_OWNER_NOTICE_TEXT: "This month's revenue includes all earnings since the last payout for your current team.", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_UPLOAD_TITLE: "Upload Premium Emoji", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_UPLOAD_DESCRIPTION: "Add up to {maxSlots} additional custom emoji that can only be used by subscribers. Animated emoji can be used by all subscribers even without Nitro. However, only subscribers with Nitro can use premium emoji outside of this server.", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_UPLOAD_CTA: "Upload Premium Emoji", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_EMOJI_SECTION_TITLE: "Premium Emoji", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_ROLES_MODAL_HEADER: "Emoji Access", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_ROLES_MODAL_DESCRIPTION: "Choose which tiers can use this emoji.", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_ROLES_MODAL_SELECT_ALL_LABEL: "All Subscription Tiers", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_ROLES_MODAL_NEEDS_ONE_ROLE: "Please select at least one role", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_EMOJI_ROLES_MODAL_ARCHIVED_BADGE: "Archived", GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL_TITLE: "You can't use this emoji right now.", GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_PURCHASE_UPSELL_DESCRIPTION: "Join {serverName}'s Server Subscription to get access to this emoji.", GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPGRADE_UPSELL_DESCRIPTION: "Change your Server Subscription tier to use this emoji.", GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL_PURCHASE_CTA: "Subscribe", GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL_UPGRADE_CTA: "Change Tier", GUILD_ROLE_SUBSCRIPTION_EMOJI_SELECT_ROLE_ACTION_SHEET_TITLE: "Select Tiers", GUILD_ROLE_SUBSCRIPTION_EMOJI_SELECT_ROLE_ACTION_SHEET_SUBTITLE: "Select which tiers can use this emoji.", GUILD_ROLE_SUBSCRIPTION_EMOJI_SETTINGS_MANAGE_PREMIUM_TEXT: "To manage premium emoji, go to [Server Subscriptions settings](onClick).", GUILD_ROLE_SUBSCRIPTION_IAP_CANCEL_MODAL_TITLE: "You'll need to cancel your current subscription to {activeListingName}", GUILD_ROLE_SUBSCRIPTION_IAP_CANCEL_MODAL_DESCRIPTION: "Before you can change to $[{changeToListingName}](emphasisHook), you'll need to cancel your active subscription to $[{activeListingName}](emphasisHook) and wait until it ends on $[{billingEndDate}](emphasisHook). We're working on making this easier in the near future.", GUILD_ROLE_SUBSCRIPTION_IAP_CANCEL_MODAL_DESCRIPTION_CONTINUED: "You can cancel your current subscription in the $[Subscriptions](emphasisHook) section of your personal settings.", GUILD_ROLE_SUBSCRIPTION_IAP_CANCEL_MODAL_CTA: "Cancel my current subscription", GUILD_ROLE_SUBSCRIPTION_IAP_SWITCH_TIERS_BUTTON_LABEL: "You'll need to cancel your current subscription to $[{activeListingName}](emphasisHook) and wait until it ends on $[{billingEndDate}](emphasisHook) to switch tiers.", GUILD_ROLE_SUBSCRIPTION_IAP_SWITCH_TIERS_BUTTON_CTA: "How to change tiers", GUILD_ROLE_SUBSCRIPTION_IAP_COMPLETE_ONBOARDING_DIALOG_BODY: "Please complete onboarding before subscribing.", GUILD_ROLE_SUBSCRIPTION_IAP_COMPLETE_ONBOARDING_BUTTON: "Complete onboarding", GUILD_ROLE_SUBSCRIPTION_IAP_UPSELL_TITLE: "You can now purchase Server Subscriptions on Mobile!", GUILD_ROLE_SUBSCRIPTION_IAP_UPSELL_BODY: "Good news — you can now start supporting your favorite server owners that have subscription offerings right here on your mobile device.\n \nAll it takes is a few clicks to unlock exclusive channels to hang out in, subscriber only benefits, and anything else the server owner has cooked up for you!\n \nCheck out this server's subscription offerings and start new adventures with your fellow subs!", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_MODAL_TITLE: "New Monetization Terms", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_TITLE: "We're making changes to our Monetization terms!", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_BODY: "We've recently updated our [Monetization Terms]({termsURL}). Please read the updated documents in full, as they apply to your use of Discord. Here's a quick summary of what's changing:", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_BODY_POINT_1_HEADER: "iOS In-App Purchases for Server Subscriptions", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_BODY_POINT_1_BODY: "Effective today, you will be able to sell Server Subscriptions directly through our iOS app. We've updated our terms to address specific app store requirements, including a new approach to mobile tier pricing to address the costs associated with in-app purchases.", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_BODY_POINT_2_HEADER: "Changes to Creator Fees", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_BODY_POINT_2_BODY: "Effective May 1, 2023, all sales of Server Subscriptions on desktop and mobile will be subject to an updated fee structure. This includes a new fee category to cover payment processing costs. For more information on these specific fees, please review Schedule 1 of the Monetization Terms.", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_ACCEPT_CTA: "I accept", CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_ACCEPT_DISCLAIMER: 'By clicking "I accept", you agree to the [Monetization Terms]({termsURL}).', CREATOR_MONETIZATION_ACCEPT_NEW_TERMS_REMIND_ME_LATER: "Remind me later", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_GROUP_CTA: "Join **{serverName}'s Server Subscription** to unlock exclusive benefits and support the server", GUILD_ROLE_SUBSCRIPTION_PURCHASE_UPSELL_PAGE_CTA: "Join **{serverName}'s Server Subscription** to unlock #{channelName}", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_GROUP_CTA_HOOK: "Join $[{serverName}'s Server Subscription](serverNameHook) to unlock exclusive benefits and support the server", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_UNAVAILABLE_CTA_HOOK: "Sorry, $[{serverName}'s Server Subscription](serverNameHook) isn't available to purchase on mobile", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_UNAVAILABLE_DESCRIPTION: "We’re working on a solution. In the meantime, visit this server on desktop or web for more info.", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_TITLE: "Welcome to **{serverName}'s Server Subscription**", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_SUBTITLE: "You now have access to all **{tier}** tier benefits.", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_CHANNEL_PREVIEW: "A few of your new exclusive channels", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_PREMIUM_EMOJI_PREVIEW_TITLE: "...and a new benefit!", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_PREMIUM_EMOJI_BENEFIT_TEXT: "Premium Emoji", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_PREMIUM_EMOJI_BENEFIT_DESCRIPTION: "Unlocked {count} new member-only emoji.", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_DONE_BUTTON: "All right!", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_TITLE: "**Welcome to {serverName} ({tierName})!**", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_SUBTITLE: "Congrats! You now have access to {benefits}.", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_OPEN_DISCORD_BUTTON: "Open Discord", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_DONE_BUTTON: "Done", GUILD_ROLE_SUBSCRIPTION_BENEFIT_VISUAL_FLAIR: "visual flair", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_EXCLUSIVE_CHANNELS_SUBTITLE: "{channelCount, plural, one {1 exclusive channel} other {# exclusive channels}}", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_BENEFITS_SUBTITLE: "{benefitCount, plural, one {1 benefit} other {# benefits}}", GUILD_ROLE_SUBSCRIPTION_PURCHASE_MODAL_CONFIRMATION_LITE_EMOJI_SUBTITLE: "{emojiCount} emoji", GUILD_ROLE_SUBSCRIPTION_USER_SUBSCRIPTION_PAST_DUE_WARNING: "Your current subscription is past due. Please update your payment method.", GUILD_ROLE_SUBSCRIPTION_USER_SUBSCRIPTION_PAST_DUE_CTA: "Manage Subscription", GUILD_ROLE_SUBSCRIPTION_PURCHASE_ERROR_PAGE_GUILD_NOT_ELIGIBLE_TITLE: "Oops. Mobile payment isn't available for this server.", GUILD_ROLE_SUBSCRIPTION_PURCHASE_ERROR_PAGE_NOT_GUILD_MEMBER_TITLE: "Oops. Server Subscriptions are only available to members of this server.", GUILD_ROLE_SUBSCRIPTION_PURCHASE_ERROR_PAGE_GUILD_NOT_ELIGIBLE_SUBTITLE: "Check with an admin for more info!", GUILD_ROLE_SUBSCRIPTION_PURCHASE_ERROR_PAGE_NOT_GUILD_MEMBER_SUBTITLE: "Check with an admin for more info or join the server to subscribe!", GUILD_ROLE_SUBSCRIPTION_AMOUNT_PER_PERIOD: "per {period}", GUILD_ROLE_SUBSCRIPTION_TRIAL_PERIOD: "{trialPeriodDuration} Free Trial", GUILD_ROLE_SUBSCRIPTION_TRIAL_DISCLAIMER: "Available to {activeTrialUserLimit, plural, =0 {server members} one {up to 1 server member} other {up to {activeTrialUserLimit} server members}} who have not yet received a free trial. Ask the server owner if Additional Benefits are included in this offer.", GUILD_ROLE_SUBSCRIPTION_INELIGIBLE_TRIAL_DISCLAIMER: "You are not eligible for a free trial of this tier.", GUILD_ROLE_SUBSCRIPTIONS_ACTION_MENU_LABEL: "Server Subscriptions Actions", GUILD_ROLE_SUBSCRIPTIONS_EDIT_SETTINGS: "Edit Subscription Settings", GUILD_ROLE_SUBSCRIPTIONS_DELETE_CHANNEL_BODY: "Are you sure you want to delete **!!{channelName}!!**? You have **{numGuildRoleSubscriptionMembers, plural, =1 {# subscriber} other {# subscribers}}** that will lose access to this channel. This cannot be undone.", GUILD_SETTINGS_PICKER_DEFAULT_TITLE: "Select a Server", GUILD_SETTINGS_PICKER_DEFAULT_DESCRIPTION: "Select a Server whose settings you have access to.", GUILD_SETTINGS_PICKER_DEFAULT_CREATE_DESCRIPTION: "No server yet? Let's do something about that!", GUILD_ROLE_SUBSCRIPTIONS_ONBOARDING_DESCRIPTION: "Welcome to Server Subscriptions! To get started, pick a Server you own that you want to monetize.", GUILD_ROLE_SUBSCRIPTIONS_FINISH_SETTING_UP_DESCRIPTION: "Pick a server to finish setting up server subscription!", GUILD_ROLE_SUBSCRIPTIONS_USER_SUBSCRIPTIONS_DESCRIPTION: "Paid server memberships are billed separately. They may have different renewal dates and payment methods.", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_SUBSCRIPTIONS_BUTTON: "Manage Memberships", GUILD_ROLE_SUBSCRIPTIONS_MANAGE_SUBSCRIPTIONS_PAGE_BACK_BUTTON_CTA: "Your Subscriptions", GUILD_ROLE_SUBSCRIPTIONS_ACTIVE_USER_SUBSCRIPTIONS_DESCRIPTION: "You have **{numSubscriptions} active {numSubscriptions, plural, =1 {subscription} other {subscriptions}}**", GUILD_ROLE_MANAGE_SUBSCRIPTION_PAGE_DESCRIPTION: "Manage paid memberships from any of your servers.", GUILD_ROLE_MANAGE_SUBSCRIPTION_INFO_NEXT_RENEWAL: "Next renewal", GUILD_ROLE_MANAGE_SUBSCRIPTION_INFO_MEMBERSHIP_ENDS: "Membership ends", GUILD_ROLE_MANAGE_SUBSCRIPTION_INFO_CANNOT_RESUBSCRIBE_TO_TRIAL: "Cannot re-subscribe to a trial.", GUILD_ROLE_MANAGE_SUBSCRIPTION_INFO_PRICE: "Monthly Cost", GUILD_ROLE_SUBSCRIPTION_MANAGE_SUBSCRIPTION_PAGE_TRIAL_PRICE_INFO: "You will not be billed until your free trial ends.", GUILD_ROLE_MANAGE_SUBSCRIPTION_INFO_MEMBER_SINCE: "Member since", GUILD_ROLE_MANAGE_SUBSCRIPTION_PAYMENT_METHOD_LABEL: "Payment Method", GUILD_ROLE_MANAGE_SUBSCRIPTION_MANAGE_OPTIONS_LABEL: "Manage Subscription", GUILD_ROLE_MANAGE_SUBSCRIPTION_MANAGE_OPTIONS_CHANGE_TIER: "Select a different tier", GUILD_ROLE_MANAGE_SUBSCRIPTION_MANAGE_OPTIONS_RESTART_SUBSCRIPTION: "Restart my membership", GUILD_ROLE_MANAGE_SUBSCRIPTION_MANAGE_OPTIONS_CANCEL: "Cancel my membership", GUILD_ROLE_CANCEL_SUBSCRIPTION_MODAL_CANCEL_CTA: "Cancel Membership", GUILD_ROLE_CANCEL_SUBSCRIPTION_MODAL_NEVERMIND_CTA: "Nevermind", GUILD_ROLE_CANCEL_SUBSCRIPTION_MODAL_TITLE: "Are you sure you want to cancel?", GUILD_ROLE_CANCEL_WHEN_YOU_LOSE: "On **{subscriptionEndDate}**, you'll lose access to:", GUILD_ROLE_CANCEL_WHAT_YOU_LOSE: "your role color\n{numEmojis} premium emoji\n{numChannels} exclusive channels\n{numIntangibles} benefits", GUILD_ROLE_CANCEL_ARE_YOU_SURE: "Are you sure you want to cancel?", GUILD_ROLE_CANCEL_YOURE_GIVING_UP: "YOU'RE GIVING UP...", GUILD_ROLE_CANCEL_NAMED_SUBSCRIPTION_MODAL_TITLE: "Are you sure you want to cancel your subscription in {guildName}?", GUILD_ROLE_CANCEL_SUBSCRIPTION_CONFIRMATION: "You can resubscribe any time before {endDate}.", GUILD_ROLE_CANCEL_SUBSCRIPTION_MODAL_CANCEL_SUBSCRIPTION_CTA: "Cancel Subscription", GUILD_ROLE_MANAGE_SUBSCRIPTION_CANCELLED: "Canceled", GUILD_ROLE_MANAGE_SUBSCRIPTION_PAST_DUE: "Payment Due", GUILD_ROLE_MANAGE_SUBSCRIPTION_PAST_DUE_MOBILE: "Unable To Process Payment", GUILD_ROLE_MANAGE_SUBSCRIPTION_UPDATE_PAYMENT_METHOD: "Update Payment Method", GUILD_ROLE_MANAGE_SUBSCRIPTION_CHANGE_PAYMENT_ONLY_ON_DESKTOP: "This subscription was purchased on desktop, please change your payment method there.", GUILD_ROLE_MANAGE_SUBSCRIPTION_PAST_DUE_DESCRIPTION: "Please update your payment method to avoid losing your subscription.", GUILD_ROLE_MANAGE_SUBSCRIPTION_IOS_PLATFORM: "Managed By iOS", GUILD_ROLE_MANAGE_SUBSCRIPTION_IOS_PLATFORM_TOOLTIP: "Subscriptions purchased on iOS must be managed there", GUILD_ROLE_CANCEL_SUBSCRIPTION_MODAL_DESCRIPTION: "You will lose access to {numChannels} exclusive {numChannels, plural, =1 {channel} other {channels}} and {numAdditionalBenefits} additional {numAdditionalBenefits, plural, =1 {benefit} other {benefits}} on {subscriptionEndDate}.", GUILD_ROLE_CANCEL_SUBSCRIPTION_DELETE_MUTATION_DESCRIPTION: "Your membership will be changed from **{currentListing}** to **{nextListing}** on **{changeDate}**.", GUILD_ROLE_CANCEL_SUBSCRIPTION_DELETE_MUTATION_CTA: "Undo Change", GUILD_ROLE_SUBSCRIPTION_HAS_PENDING_MUTATION_TO_CURRENT_LISTING: "Your membership will be changed to this tier on {changeDate}.", GUILD_ROLE_SUBSCRIPTION_HAS_PENDING_MUTATION: "Cancel your pending membership change to enable this tier.", GUILD_ROLE_SUBSCRIPTION_CHANGE_TIER_DISABLED_IN_TRIAL: "You cannot change tiers during your trial", GUILD_ROLE_SUBSCRIPTION_CHANGE_TIER_DISABLED_IF_IAP: "Your current subscription was purchase on mobile please update it using your mobile app.", GUILD_ROLE_SUBSCRIPTION_SERVER_NAME_UNAVAILABLE: "Server Name Unavailable", GUILD_ROLE_SUBSCRIPTION_PURCHASE_CARD_SHOW_ALL_PERKS: "Show all benefits", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_TITLE: "{serverName} Premium", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_DESCRIPTION_SEE_MORE: "See more", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_DESCRIPTION_SEE_LESS: "See less", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_PARTNER_SERVER_LABEL: "Partner server", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_WATCH_TRAILER: "Watch the trailer", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_CHOOSE_SUBSCRIPTION_FOR_GATED_CHANNEL_CTA: "Subscribe to unlock $[](unlockHook)", GUILD_ROLE_SUBSCRIPTION_PURCHASE_PAGE_CHOOSE_SUBSCRIPTION_CTA: "Choose a subscription to unlock more", GUILD_ROLE_SUBSCRIPTION_PURCHASE_CARD_SHOW_ALL_PERKS: "Show all benefits", GUILD_ROLE_SUBSCRIPTION_PURCHASE_LEGAL_DISCLAIMER: 'By clicking "Subscribe", you agree to the [Paid Services Terms]({paidURL}) and [Terms of Service]({termsURL}). This is a recurring subscription, we\'ll charge your account today and every month until you cancel.', GUILD_ROLE_SUBSCRIPTION_PURCHASE_CARD_UNLOCK: "what you'll unlock", GUILD_ROLE_SUBSCRIPTION_PURCHASE_CARD_CHANNEL_BENEFIT_TITLE: "Exclusive {numChannels, plural, =1 {Channel} other {Channels}}", GUILD_ROLE_SUBSCRIPTION_PURCHASE_CARD_INTANGIBLE_BENEFIT_TITLE: "{numBenefits, plural, =1 {benefit} other {benefits}}", GUILD_ROLE_SUBSCRIPTION_PURCHASE_CARD_EMOJI_BENEFIT_TITLE: "Premium emoji", GUILD_ROLE_SUBSCRIPTION_CARD_ROLE_AND_ICON_HEADER: "Your role and icon", GUILD_ROLE_SUBSCRIPTION_CARD_EMOJI_HEADER: "Your {numEmojis} emoji", GUILD_ROLE_SUBSCRIPTION_CARD_CHANNELS_HEADER: "Your {numChannels} exclusive {numChannels, plural, =1 {channel} other {channels}}", GUILD_ROLE_SUBSCRIPTION_CARD_INTANGIBLES_HEADER: "Your {numIntangibles} {numIntangibles, plural, =1 {benefit} other {benefits}}", GUILD_ROLE_SUBSCRIPTION_RESTARTED_TITLE: "Your membership has been restarted!", GUILD_ROLE_SUBSCRIPTION_RESTARTED_DESCRIPTION: "Your payment method will be charged at the beginning of the next billing period.", USER_SETTINGS_GUILD_ROLE_SUBSCRIPTION_CANCEL_TITLE: "Cancel Subscription", GUILD_ROLE_SUBSCRIPTIONS_REQUIRE_APPROVED_MEMBER: "Subscription tiers are available to approved server members.", GUILD_ROLE_SUBSCRIPTION_UPSELL_HEADER: "Introducing Server Subscriptions!", GUILD_ROLE_SUBSCRIPTION_UPSELL_BODY: "Let server members support you and the community by paying for exclusive access and visual flair.", GUILD_ROLE_SUBSCRIPTIONS_UPSELL_CTA: "Check it out", GUILD_ROLE_SUBSCRIPTION_UPSELL_IMG_ALT: "A hand holding a membership badge, surrounded by sparkles", GUILD_ROLE_SUBSCRIPTION_PROMO_PAGE_UPSELL_HEADER: "NEW - Promo Pages are here!", GUILD_ROLE_SUBSCRIPTION_PROMO_PAGE_UPSELL_BODY: "Quickly customize and share a webpage to promote your paid tiers outside of Discord—and grow your memberships!", CREATOR_MONETIZATION_APPLIED_AUDIT_LOG_TITLE: "$[**!!{user}!!**](userHook) applied for monetization", CREATOR_MONETIZATION_TERMS_ACCEPTED_AUDIT_LOG_TITLE: "$[**!!{user}!!**](userHook) accepted terms for monetization", CREATOR_MONETIZATION_DISABLED_NOTICE_TITLE: "Server Subscriptions are going away", CREATOR_MONETIZATION_DISABLED_NOTICE_DESCRIPTION: "This server is no longer monetizating. Your subscription will not renew. Please talk to the Server owner for more information.", CREATOR_MONETIZATION_NOTICE_ILLO_A11Y_LABEL: "A hand holding a membership badge", VIEW_CREATOR_MONETIZATION_ANALYTICS: "View Server Subscription Insights", ROLE_PERMISSIONS_VIEW_CREATOR_MONETIZATION_ANALYTICS_DESCRIPTION: "Allows members to view Server Subscription Insights, which shows data on revenue, subscribers, and free trials.", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_JOIN: "$[!!{username}!!](usernameHook) joined **{tierName}** as a subscriber of [{guildName}](handleGuildNameClick)!", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_JOIN_WITH_DURATION: "$[!!{username}!!](usernameHook) joined **{tierName}** and has been a subscriber of [{guildName}](handleGuildNameClick) for {months, plural, =1 {# month} other {# months}}!", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_RENEW: "$[!!{username}!!](usernameHook) renewed **{tierName}** in their [{guildName}](handleGuildNameClick) membership!", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_RENEW_WITH_DURATION: "$[!!{username}!!](usernameHook) renewed **{tierName}** and has been a subscriber of [{guildName}](handleGuildNameClick) for {months, plural, =1 {# month} other {# months}}!", ROLE_SUBSCRIPTION_JOIN_CTA_LABEL1: "Welcome them aboard!", ROLE_SUBSCRIPTION_JOIN_CTA_LABEL2: "Wave to say hi!", ROLE_SUBSCRIPTION_RENEW_CTA_LABEL1: "Say congrats!", ROLE_SUBSCRIPTION_RENEW_CTA_LABEL2: "Give them a high five!", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_JOIN_MOBILE: "[!!{username}!!](usernameOnClick) joined **{tierName}** as a subscriber of [{guildName}](roleSubscriptionOnClick)!", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_JOIN_WITH_DURATION_MOBILE: "[!!{username}!!](usernameOnClick) joined **{tierName}** and has been a subscriber of [{guildName}](roleSubscriptionOnClick) for {months, plural, =1 {# month} other {# months}}!", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_RENEW_MOBILE: "[!!{username}!!](usernameOnClick) renewed **{tierName}** in their [{guildName}](roleSubscriptionOnClick) subscription!", SYSTEM_MESSAGE_ROLE_SUBSCRIPTION_RENEW_WITH_DURATION_MOBILE: "[!!{username}!!](usernameOnClick) renewed **{tierName}** and has been a subscriber of [{guildName}](roleSubscriptionOnClick) for {months, plural, =1 {# month} other {# months}}!", ROLE_SUBSCRIPTION_WELCOME_CARD_TEXT: "Welcome,\n$[!!{username}!!](usernameHook)", ROLE_SUBSCRIPTION_WELCOME_CARD_ARIA_LABEL: 'A special access badge containing {username}\'s avatar. Next to it reads, "Welcome, {username}!"', ROLE_SUBSCRIPTION_WELCOME_LABEL: "Welcome", ROLE_SUBSCRIPTION_EMOJI_POPOUT_SUBSCRIBED_DESCRIPTION: "This is a premium emoji. Type its name in the chat bar to use it.", ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UPSELL_DESCRIPTION: "Get Server Subscription to use this emoji.", ROLE_SUBSCRIPTION_EMOJI_POPOUT_UPGRADE_UPSELL_DESCRIPTION: "Change your Server Subscription tier to use this emoji.", ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UPSELL_BUTTON: "Subscribe", ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UNAVAILABLE_DESCRIPTION: "This emoji is unavailable.", ROLE_SUBSCRIPTION_EMOJI_POPOUT_UPGRADE_UPSELL_BUTTON: "Change Tier", ROLE_ICON_POPOUT_DESCRIPTION_ROLE_SUBSCRIPTIONS: "Custom Role Icon for {name}. This feature is a part of Server Subscriptions.", CREATOR_MONETIZATION_ONBOARDING_V2_UPSELL_TITLE: "Earn money from your Discord community!", CREATOR_MONETIZATION_ONBOARDING_V2_UPSELL_DESCRIPTION: "Server Subscriptions lets you monetize your audience by offering exclusive benefits.", CREATOR_MONETIZATION_ONBOARDING_V2_UPSELL_IMG_ALT: "A visual overview and examples of Server Subscriptions.", CREATOR_MONETIZATION_NEW_OWNER_ONBOARDING_MODAL_TITLE: "Finalize the onboarding details to start earning money", CREATOR_MONETIZATION_NEW_OWNER_ONBOARDING_MODAL_TITLE_ACCEPT_TERM_ONLY: "Agree to our terms to start earning money", CREATOR_MONETIZATION_NEW_OWNER_ONBOARDING_MODAL_NO_TEAM_BODY: "In order to enable server monetization, you must set up a Team and then select it below. Teams must have valid payment information. Make sure you use your legal personal or business name to complete this process — no fake names.\n\nOnce enabled, you’ll be able to accept payment for Server Subscriptions.", CREATOR_MONETIZATION_NEW_OWNER_ONBOARDING_MODAL_CHOOSE_TEAM_BODY: "Teams are essentially what allow you to get paid here on Discord. It looks like you have a least one set up — select one below.", CREATOR_MONETIZATION_NEW_OWNER_ONBOARDING_MODAL_SETUP_TEAM_CTA: "Set up a Team", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_SELECT_TEMPLATE_BUTTON: "Select Template", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_HEADER: "Choose a tier template to start from", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_BODY: "Turn members into subscribers quick — just pick out a tier template with that feels close to what you might want to offer to you server members. You can edit the template's details later.", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_CREATOR_PORTAL_LINK: "Learn more about what you can offer to members in the [Creator Portal]({creatorPortalUrl}).", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_CREATE_FROM_SCRATCH_PROMPT: "Not feeling any of these templates? Feel free to start from an empty canvas!", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_CREATE_FROM_SCRATCH_BUTTON: "Create tier from scratch", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_PERKS_HEADER: "Benefits you could offer", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_EXCLUSIVE_CHANNELS_HEADER: "Exclusive Channels", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_EXCLUSIVE_BENEFITS_HEADER: "Exclusive Benefits", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_PRICE_RESELECTION_HEADER: "Choose a different price for your new {tierName} tier", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_PRICE_RESELECTION_BODY: "You can’t have more than one tier listed at {price}/mo. Here are some more options:", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MODAL_PRICE_RESELECTION_GO_BACK: "Back to templates", GUILD_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL_UPSELL_HEADER: "This channel doesn’t actually exist yet — you gotta publish!", GUILD_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL_UPSELL_BODY: "Looks like this channel is part of the tier you haven’t published yet. Until you publish that tier, your member can’t see it and you can’t sell it to them!", GUILD_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL_UPSELL_BUTTON: "Go publish unsaved tiers", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_VIEW_TITLE: "Go faster with templates", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_VIEW_DESCRIPTION: "Choose any of the 1-tier templates below to make life easier. You can edit the template’s details later.", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_PERKS_DESCRIPTION: "We’ll create the everything for you, but ultimately, it’s on you to choose what you want to offer subs and follow through for your supporters!", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_START_FROM_SCRATCH: "Start from scratch", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_ROLE_ICON: "Subscriber role icon", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_CHANNELS: "Sub only channels", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_BENEFITS: "Sub only benefits", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_TEMPLATE_SELECTED_HEADER: "A new tier made just like that! Now, make your final tweaks and save", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_TEMPLATE_SELECTED_DESCRIPTION: "You’re so close to monetizing with this tier! Make sure to make any edits to the benefits subs will get and save the tier.", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_TEMPLATE_SELECTED_CLOSE: "Got it", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_MOBILE_VIEW_ENTIRE_TEMPLATE: "View entire template", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_DEEPLINK_MODAL_DESCRIPTION: "To get started, pick a server you own that you want to monetize. After that, you can start putting together some tiers to offer to members.", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_UPSELL_TITLE: "Launch subscriptions in seconds", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_UPSELL_BODY: "Choose from four NEW Tier Templates that make monetizing your server as easy as copy/paste", GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATE_UPSELL_CTA: "Use a template", GUILD_PRODUCTS_TITLE: "Server Products", GUILD_PRODUCTS_SETTINGS_DESCRIPTION: "Create new digital products to sell in your server, including downloadable files, Premium Roles, and more.\n\nCheck out [Server Products support article]({serverProductsSupportLink}) and our [Monetization Policy]({monetizationPolicyLink}) to learn more.", GUILD_PRODUCTS_CREATE_PRODUCT_BUTTON: "Create New Product", GUILD_PRODUCTS_BASIC_INFO_SECTION: "Basic Info", GUILD_PRODUCT_SETUP_INFO_DESCRIPTION_PLACEHOLDER: "Let your community know what you're selling and why they should purchase your products.", GUILD_PRODUCTS_LISTINGS_SECTION: "Your Products", GUILD_PRODUCTS_YOUR_PRODUCTS_HEADER: "Your Server Products", GUILD_PRODUCTS_NO_PRODUCTS_HEADER: "You have no server products yet", GUILD_PRODUCTS_NO_PRODUCTS_DESCRIPTION: "You can’t sell what you don’t have! Create a product to get started.", GUILD_PRODUCT_EDIT_ARIA_LABEL: "Edit {productName}", GUILD_PRODUCT_STATUS_BADGE_PUBLISHED: "Published", GUILD_PRODUCT_STATUS_BADGE_DRAFT: "In Progress", GUILD_PRODUCTS_ACTION_MENU_BUTTON_ARIA_LABEL: "Open action menu for {productName}", GUILD_PRODUCTS_ACTION_MENU_LABEL: "Server Product Actions", GUILD_PRODUCT_EDIT: "Edit Product", GUILD_PRODUCT_COPY_LINK: "Copy Product Link", GUILD_PRODUCT_TEST_DOWNLOAD: "Test Download", GUILD_PRODUCT_UNPUBLISH: "Unpublish Product", GUILD_PRODUCT_DELETE: "Delete Product", GUILD_PRODUCTS_DELETE_CONFIRMATION_HEADER: "Delete product?", GUILD_PRODUCTS_DELETE_CONFIRMATION_BODY: "Are you sure you want to delete **!!{productName}!!**? This action cannot be undone.", GUILD_PRODUCTS_DELETE_CONFIRMATION_BODY_ROLE_WARNING: "The role **!!{roleName}!!** will become unlinked from this product, and you'll be able to manage or delete it in Role Settings.", GUILD_PRODUCTS_DELETE_CONFIRMATION_BODY_ROLE_WARNING_HEADER: "This product has a role", GUILD_PRODUCTS_DELETE_CONFIRMATION_BUTTON: "Delete Product", GUILD_PRODUCTS_DELETE_ERROR_TITLE: "Error Deleting Product", GUILD_PRODUCTS_DELETE_ERROR_TEXT: "An internal server error has occurred.", GUILD_PRODUCTS_PAYMENT_SECTION: "Payment", GUILD_PRODUCTS_PAYMENT_HEADER: "Payment Overview", GUILD_PRODUCTS_BASIC_INFO_SYNC_DISCLAIMER: "Server Products and Server Subscriptions share the same description and cover photo. Changes here will apply to Server Subscriptions and vice versa.", GUILD_PRODUCT_EDIT_MODAL_HEADING: "Wrap up the details", GUILD_PRODUCT_EDIT_MODAL_DESCRIPTION: "Give us the details of your product, bring it to life, and start earning from it.", GUILD_PRODUCT_EDIT_MODAL_NAME_LABEL: "Title", GUILD_PRODUCT_EDIT_MODAL_NAME_PLACEHOLDER: "Enter your product title", GUILD_PRODUCT_EDIT_MODAL_DESCRIPTION_LABEL: "Description", GUILD_PRODUCT_EDIT_MODAL_DESCRIPTION_PLACEHOLDER: "Enter your product description", GUILD_PRODUCT_EDIT_MODAL_PRICE_LABEL: "Price", GUILD_PRODUCT_EDIT_MODAL_PRICE_PLACEHOLDER: "Enter a price", GUILD_PRODUCT_EDIT_MODAL_THUMBNAIL_LABEL: "Thumbnail", GUILD_PRODUCT_EDIT_MODAL_THUMBNAIL_DESCRIPTION: "Select a thumbnail for your product to attract purchasers. Feel free to upload your own. We recommend an image that's at least 1024px by 576px.", GUILD_PRODUCT_EDIT_MODAL_THUMBNAIL_RADIO_GROUP_ARIA_LABEL: "Select a product thumbnail", GUILD_PRODUCT_ERROR_EMPTY_ROLE_NAME: "A role name must be provided if you want to attach one", GUILD_PRODUCT_ERROR_MISSING_DRAFT_REQUIREMENTS: "You must at least provide a name and price", GUILD_PRODUCT_ERROR_MISSING_PUBLISH_REQUIREMENTS: "You may not publish without a description and at least one benefit", GUILD_PRODUCT_ERROR_NO_ARCHIVES: "Archive files are not supported", GUILD_PRODUCT_ERROR_OTHER_CODE: "Oops, something went wrong! Error code: {code}", GUILD_PRODUCT_A11Y_UPLOAD_FAILED: "A file failed to upload: {reason}", GUILD_PRODUCT_A11Y_NAMED_UPLOAD_FAILED: "{filename} failed to upload: {reason}", GUILD_PRODUCT_A11Y_TOO_MANY_ATTACHMENTS: "You may only attach {maxAttachmentsCount} files", GUILD_PRODUCT_EDIT_MODAL_WARNING_UNSAVED_CHANGES_TITLE: "You have unsaved changes", GUILD_PRODUCT_EDIT_MODAL_WARNING_UNSAVED_CHANGES_BODY: "Are you sure you want to exit? You have unsaved changes to this product that may be lost if you leave now.", GUILD_PRODUCT_EDIT_MODAL_WARNING_UNSAVED_CHANGES_CTA_EXIT: "Exit", GUILD_PRODUCT_EDIT_MODAL_WARNING_UNSAVED_CHANGES_BACK_TO_EDITING: "Back to editing", GUILD_PRODUCT_TOO_MANY_PUBLISHED_PRODUCT_ERROR_TITLE: "Max product limit reached", GUILD_PRODUCT_TOO_MANY_PUBLISHED_PRODUCT_ERROR_BODY: "You've already reached the maximum number (10) of products that can be published and available to members. Un-publish or delete a previously created public product to create space for this one.\n\nUntil then, $[we've already saved this listing as a draft for you](highlightHook).", GUILD_PRODUCT_TWO_FA_NOT_ENABLED_ERROR_TITLE: "2FA not enabled", GUILD_PRODUCT_TWO_FA_NOT_ENABLED_ERROR_BODY: "You’ll need to set up and enabled Two-Factor Authentication to publish any Server Product. Head over to the $[My Account](highlightHook) section of your User Settings to get that sorted out before sharing this product with your members.\n\nBe sure to save any changes before exiting!", GUILD_PRODUCT_MISSING_BENEFITS_ERROR_TITLE: "What are you selling?", GUILD_PRODUCT_MISSING_BENEFITS_ERROR_BODY: "You need to at least add a Role or a Downloadable before you can publish this product. Just be sure to $[toggle on one or both](highlightHook) of the available benefit types in the footer of the product composer.", GUILD_PRODUCT_TERMS_NOT_ACCEPTED_ERROR_TITLE: "Terms not accepted", GUILD_PRODUCT_TERMS_NOT_ACCEPTED_ERROR_BODY: "You haven’t accepted monetization terms yet, so you aren’t able to publish or earn from any Server Products currently. Once you’ve accepted terms, you’ll be good to go.", GUILD_PRODUCT_GENERIC_ERROR_TITLE: "Error while publishing the product", CREATOR_MONETIZATION_PAYMENT_TEAM_REQUIRED_TITLE: "Payment team required", CREATOR_MONETIZATION_PAYMENT_TEAM_REQUIRED_BODY: "You must set up a payment team before you can publish. To do that, head over to the $[Payment](highlightHook) tab!", CREATOR_MONETIZATION_PAYMENT_ACCOUNT_VERIFICATION_REQUIRED_TITLE: "Verified payment account required", CREATOR_MONETIZATION_PAYMENT_ACCOUNT_VERIFICATION_REQUIRED_BODY: "You must set up and complete verification of your payment account before you can publish.\n\nHead over to the $[Payment](highlightHook) tab and click $[Edit Payment Info](highlightHook) to get started.", CREATOR_MONETIZATION_PAYMENT_ACCOUNT_VERIFICATION_REQUIRED_BODY_WITH_LINK: "You must set up and complete verification of your payment account before you can publish.\n\n[Click here]({url}) to get started, or head over to the $[Payment](highlightHook) tab at any time and click $[Edit Payment Info](highlightHook).", CREATOR_MONETIZATION_RESTRICTED_GUILD_CANNOT_EDIT_PRODUCT_TITLE: "Cannot edit the product", CREATOR_MONETIZATION_RESTRICTED_GUILD_CANNOT_EDIT_PRODUCT_BODY: "Your server is currently restricted for monetization and you cannot edit products. Check your email for details", GUILD_PRODUCT_EDIT_MODAL_CARD_PREVIEW_HEADING: "Here's what members see", GUILD_PRODUCT_EDIT_MODAL_CARD_PREVIEW_DESCRIPTION: "This is a preview of what your server product will look like to people on Discord when you share in-chat.", GUILD_PRODUCT_EDIT_MODAL_SAVE_DRAFT_BUTTON: "Save as draft", GUILD_PRODUCT_EDIT_MODAL_PUBLISH_BUTTON: "Publish", GUILD_PRODUCT_EDIT_MODAL_UNPUBLISH_BUTTON: "Unpublish", GUILD_PRODUCT_EDIT_MODAL_SAVE_CHANGES_BUTTON: "Save Changes", GUILD_PRODUCT_EDIT_NOTICE_BAR_SAVE_DRAFT_SUCCESS: "Your server product draft has been saved.", GUILD_PRODUCT_EDIT_NOTICE_BAR_MODAL_UPDATE_PUBLISH_SUCCESS: "Your changes to the product have been saved.", GUILD_PRODUCT_EDIT_NOTICE_BAR_MODAL_UNPUBLISH_SUCCESS: "Your server product has been unpublished.", GUILD_PRODUCT_EDIT_NOTICE_BAR_DISMISS: "Dismiss", GUILD_PRODUCT_SETTINGS_INCLUDE_ATTACHMENTS_TOGGLE_LABEL: "Include a Downloadable", GUILD_PRODUCT_EDIT_MODAL_ATTACHMENTS_LABEL: "Upload your Downloadable", GUILD_PRODUCT_UPLOAD_FILE_BUTTON: "Upload file", GUILD_PRODUCT_UPLOAD_AREA_TITLE: "Upload your Attachments", GUILD_PRODUCT_UPLOAD_AREA_INSTRUCTIONS: "Drop them right here", GUILD_PRODUCT_UPLOAD_ATTACHMENT_INSTRUCTIONS: "Upload up to 10 files. Max {fileUploadLimit} total. No archive files allowed (.zip, .rar, etc.).", GUILD_PRODUCT_UPLOAD_ATTACHMENT_INSTRUCTIONS_ARCHIVES_ALLOWED: "Upload up to 10 files. Max {fileUploadLimit} total.", GUILD_PRODUCT_ATTACHED_FILES_SECTION_LABEL: "Attached Files", GUILD_PRODUCT_DELETE_ATTACHMENT: "Delete {attachment}", GUILD_PRODUCT_CANCEL_ATTACHMENTS_CONFIRMATION_HEADER: "Remove downloadables?", GUILD_PRODUCT_CANCEL_ATTACHMENTS_CONFIRMATION_BODY: "Are you sure you want to remove all files you have uploaded?", GUILD_PRODUCT_SETTINGS_INCLUDE_ROLE_TOGGLE_LABEL: "Include a Role", GUILD_PRODUCT_SETTINGS_CREATE_ROLE_SELECT_COLOR_ARIA: "Select custom color", GUILD_PRODUCT_SETTINGS_CREATE_ROLE_NAME_PLACEHOLDER: "Enter a role name", GUILD_PRODUCT_SETTINGS_ATTACHED_ROLE_HEADER: "Attached Role", GUILD_PRODUCT_SETTINGS_ATTACHED_ROLE_DESCRIPTION: "This is the current role attached to this product. You'll have to detach it to create a new role.", GUILD_PRODUCT_SETTINGS_ADD_ROLE_HEADER: "Add Role", GUILD_PRODUCT_SETTINGS_ADD_ROLE_DESCRIPTION: "Members who purchase this product will receive this role. You can edit role details in the Roles tab in Server Settings.", GUILD_PRODUCT_SETTINGS_REMOVE_ATTACHED_ROLE_ARIA: "Remove attached role", GUILD_PRODUCT_SETTINGS_ROLE_COLOR_ARIA: "Role color: {color}", GUILD_PRODUCT_SETTINGS_SELECT_ROLE_COLOR_ARIA: "Selected color: {color}", GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_REMOVE_CTA: "Sounds Good", GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_REMOVE_CLOSE_LABEL: "Nevermind", GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_TITLE: "Remove this Role upon save?", GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_BODY: 'By clicking "Sounds Good," upon saving your changes, the $[{roleName}](emphasisHook) Role will be removed from this product permanently.', GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_SECTION_1_TITLE: "New buyers lose out", GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_SECTION_1_DETAIL: "Removing a Role from a product means new purchasers of this product will not get the role. If you remove and change the attached role, existing purchasers will also gain access to the newly added Role.", GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_SECTION_2_TITLE: "Deletion ability", GUILD_PRODUCT_SETTINGS_REMOVE_ROLE_MODAL_SECTION_2_DETAIL: "Upon removal, this role will also become unmanaged. That's just a fancy word that means you'll be able to delete it from your Role Settings.", GUILD_PRODUCT_SETTINGS_WARNING_MODAL_TITLE: "Are you sure?", GUILD_PRODUCT_SETTINGS_DETACHED_ROLE_HEADER: "Role Removal Pending", GUILD_PRODUCT_SETTINGS_DETACHED_ROLE_DESCRIPTION: "This role will be removed from this product upon saving your changes. You will not be able to undo this once finalized. To add a new role, save and re-open this product's edit mode.", GUILD_PRODUCT_SETTINGS_DETACHED_ROLE_UNDO_CTA: "Restore", GUILD_PRODUCT_PUBLISH_TITLE: "Make it official!", GUILD_PRODUCT_PUBLISH_DESCRIPTION: "This product won’t be visible to members until you publish.", GUILD_PRODUCT_UNPUBLISH_TITLE: "Pause selling", GUILD_PRODUCT_UNPUBLISH_DESCRIPTION: "This product will become unavailable for purchase.", GUILD_PRODUCT_PUBLISH_REQUIRES_SAVE: "Please save before publishing", GUILD_PRODUCT_UNPUBLISH_REQUIRES_SAVE: "Please save before unpublishing", GUILD_PRODUCT_UNPUBLISHED_TITLE: "Unpublished", GUILD_PRODUCT_CARD_PURCHASE_TO_UNLOCK: "Purchase to Unlock", GUILD_PRODUCT_CARD_EMPTY_NAME: "No title yet", GUILD_PRODUCT_CARD_EMPTY_DESCRIPTION: "Empty Description", GUILD_PRODUCT_CARD_EMPTY_PRICE: "$——", GUILD_PRODUCT_CARD_SEE_FULL_DESCRIPTION: "See full description", GUILD_PRODUCT_CARD_HIDE_FULL_DESCRIPTION: "Hide full description", GUILD_PRODUCT_CARD_TYPE_DOWNLOADABLE: "Downloadable", GUILD_PRODUCT_CARD_TYPE_ROLE: "Role", GUILD_PRODUCT_CARD_TYPE_DOWNLOADABLE_AND_ROLE: "Downloadable + Role", GUILD_PRODUCT_CARD_PURCHASE_BUTTON: "Purchase", GUILD_PRODUCT_CARD_HIDDEN_ROLE_SCREEN_READER: "Role:", GUILD_PRODUCT_CARD_EDIT_PRODUCT: "Edit Product", GUILD_PRODUCT_CARD_DOWNLOAD: "Download", GUILD_PRODUCT_CARD_PURCHASED: "Purchased", GUILD_PRODUCT_PURCHASE_DISABLED_TOOLTIP: "Disabled because you are admin for the server", GUILD_PRODUCT_DOWNLOAD_BUTTON_MULTIPLE_FILES: "Access Files", GUILD_PRODUCT_DOWNLOAD_BUTTON_SINGLE_FILE: "Download Now", ONE_TIME_PURCHASE_REVIEW_STEP_PURCHASE_DETAILS_LABEL: "Purchase Details", GUILD_PRODUCT_INFO_MODAL_PRODUCT_OFFER: "{productType} offered by {personName}", GUILD_PRODUCT_INFO_MODAL_DETAIL_HEADER: "Product Details", GUILD_PRODUCT_INFO_MODAL_VIEW_CONTENTS: "View Product Contents", GUILD_PRODUCT_INFO_MODAL_COLLAPSE_CONTENTS: "Collapse Product Contents", GUILD_SETTINGS_ENABLE_MONETIZATION_TAB_TITLE: "Enable Monetization", GUILD_PRODUCT_CONFIRMATION_MODAL_BODY_INTRO: "Your purchase of $[{productName}](emphasisHook) was successful!", GUILD_PRODUCT_CONFIRMATION_MODAL_BODY_ATTACHMENT: "You can download your purchase now or anytime in the product embed card.", GUILD_PRODUCT_CONFIRMATION_MODAL_BODY_ROLE: "The $[{roleName}](emphasisHook) role and exclusive channels associated with it have been granted.", GUILD_PRODUCT_CONFIRMATION_MODAL_BODY_THANK_YOU: "Thank you and enjoy your purchase!", GUILD_PRODUCT_CONFIRMATION_MODAL_DOWNLOADABLE_UNLOCKED: "Downloadable unlocked", GUILD_PRODUCT_CONFIRMATION_MODAL_ROLE_UNLOCKED: "Role unlocked", GUILD_PRODUCT_CONFIRMATION_MODAL_TITLE: "You're all set.", GUILD_PRODUCT_PURCHASE_MODAL_CTA: "Purchase", GUILD_PRODUCT_CONFIRMATION_MODAL_GENRIC_ERROR_BODY: "Your purchase was successful but there was a problem loading your purchase benefits. Please refresh to access your benefits.", GUILD_PRODUCT_CONFIRMATION_MODAL_GENRIC_ERROR_HEADER: "Uh Oh", GUILD_PRODUCT_PURCHASE_SUMMARY_TOTAL_PAID: "Total paid", GUILD_STORE_HERO_TITLE: "Shop {guildName}", GUILD_STORE_HERO_DESCRIPTION_GREETING: "Hey $[**{username}**](usernameHook)!", GUILD_STORE_HERO_SHOW_MORE_DESCRIPTION_LABEL: "Show more", GUILD_STORE_HERO_DESCRIPTION_MODAL_CTA: "Sounds good", GUILD_STORE_HERO_DESCRIPTION_MODAL_HEADER: "Read up on the shop", GUILD_STORE_HERO_DESCRIPTION_MODAL_ARIA: "Server Shop Description", GUILD_STORE_HERO_PREVIEW_TITLE: "Shop access unlocked!", GUILD_STORE_HERO_DEFAULT_DESCRIPTION: "Welcome to the Server Shop! \uD83C\uDF89 Browse subscriptions, downloadables, and premium roles crafted just for you!", GUILD_STORE_HERO_PREVIEW_PAGE_DESCRIPTION: "Welcome \uD83D\uDC4B to a pretty boring version of Server Shop, a new way to offer cool stuff to your members and earn. Your server members can’t see this page — not until you create and publish your first product!!", GUILD_STORE_HERO_PREVIEW_TAB_DESCRIPTION: "Welcome \uD83D\uDC4B to a pretty boring version of Server Shop, a new way to offer cool stuff to your members and earn. Your server members can’t see this tab — not until you create and publish your first product!!", GUILD_STORE_PREVIEW_CARD_DESCRIPTION: "Let’s get this bread. A new world of possibilities awaits you and your members. Get started with Server Shop \uD83D\uDC47\uD83C\uDFFD", GUILD_STORE_PREVIEW_MURAL_TITLE: "What will your first product be?", GUILD_STORE_PREVIEW_CARD_TITLE: "Sell a Downloadable or Role! \uD83D\uDD25", GUILD_STORE_PREVIEW_LEARN_MORE: "Got more questions about Server Shop? [Learn more]({learnMoreLink})", GUILD_STORE_PREVIEW_CHIP_ROLE_ACCESS: "Role access \uD83D\uDD13", GUILD_STORE_PREVIEW_CHIP_GAME_TUTORIALS: "Game Tutorials \uD83D\uDD79", GUILD_STORE_PREVIEW_CHIP_DOPE_WALLPAPERS: "Dope Wallpapers \uD83D\uDDBC", GUILD_STORE_PREVIEW_CHIP_PFP_ART: "PFP Art \uD83D\uDC36", GUILD_STORE_PREVIEW_CHIP_FILTER_PRESETS: "Filter Presets \uD83C\uDFA8", GUILD_STORE_PREVIEW_CHIP_SONG_DROPS: "Song Drops \uD83C\uDFA7", GUILD_STORE_PREVIEW_CHIP_COSPLAY_PICS: "Cosplay Pics \uD83D\uDC57", GUILD_STORE_PREVIEW_CHIP_3D_MODELS: "3D Models \uD83D\uDCC1", GUILD_STORE_PREVIEW_TAB_SELECTOR_BODY: "Discover this new way to offer cool stuff!", GUILD_STORE_SORT_OPTION_NAME: "Alphabetical", GUILD_STORE_SORT_OPTION_PRICE_DESC: "Price: High to Low", GUILD_STORE_SORT_OPTION_PRICE_ASC: "Price: Low to High", GUILD_STORE_SORT_OPTION_NEWEST_ARRIVALS: "Newest Arrivals", GUILD_STORE_SORT_OPTION_SELECT_MENU_ARIA: "Change the sort for Server Shop Listings", GUILD_STORE_SORT_OPTION_SELECT_MENU_SORT_BY_LABEL: "Sort By", GUILD_STORE_SORT_OPTION_TOGGLE_ARIA: "Sort by:", CREATOR_MONETIZATION_SETTINGS_GUILD_PRODUCT_SORT_OPTION_TITLE: "Server Products Sort Order", CREATOR_MONETIZATION_SETTINGS_GUILD_PRODUCT_SORT_OPTION_DESCRIPTION: "Sets how your server products will be ordered in your Server Shop page.", CREATOR_MONETIZATION_SETTINGS_SERVER_SHOP_DEFAULT_TAB_OPTION_TITLE: "Server Shop Default Tab", CREATOR_MONETIZATION_SETTINGS_SERVER_SHOP_DEFAULT_TAB_OPTION_DESCRIPTION: "Sets the default tab when there are both Server Products and Server Subscriptions published.", GUILD_PRODUCT_DOWNLOAD_MODAL_ARIA_LABEL: "All downloadables", GUILD_PRODUCT_DOWNLOADS_COUNT: "{count, plural, =1 {1 file} other {{count} files}}", EXPANDABLE_TEXT_SHOW_MORE: "Show more", EXPANDABLE_TEXT_SHOW_LESS: "Show less", CUSTOM_IMAGE_SELECTOR_YOUR_CUSTOM_IMAGE: "Your custom image", CUSTOM_IMAGE_SELECTOR_YOUR_CUSTOM_IMAGE_WITH_FILENAME: "Your custom image: {filename}", CUSTOM_IMAGE_SELECTOR_EDIT_IMAGE_TOOLTIP: "Edit Image", CUSTOM_IMAGE_SELECTOR_DELETE_IMAGE_TOOLTIP: "Delete Image", CUSTOM_IMAGE_SELECTOR_EDIT_CUSTOM_IMAGE_ARIA_LABEL: "Edit custom image: {filename}", CUSTOM_IMAGE_SELECTOR_DELETE_CUSTOM_IMAGE_ARIA_LABEL: "Delete custom image: {filename}", CUSTOM_IMAGE_SELECTOR_RADIO_GROUP_ARIA_LABEL: "Select an image", GUILD_PRODUCT_NOT_AVAILABLE_TITLE: "This product is not available.", GUILD_PRODUCT_NOT_AVAILABLE_BODY: "Please contact the server owner for more information.", GUILD_PRODUCT_FEATURE_NOT_AVAILABLE_ON_MOBILE_TITLE: "This is currently not supported on this device.", GUILD_PRODUCT_PURCHASES_TITLE: "Purchases", GUILD_PRODUCT_EARNINGS_TABLE_LISTING_COLUMN_TITLE: "Listing", GUILD_PRODUCT_EARNINGS_TABLE_PURCHASES_COLUMN_TITLE: "Purchases", GUILD_PRODUCT_EARNINGS_TABLE_PRICE_COLUMN_TITLE: "Price", GUILD_PRODUCT_BILLING_PRODUCT_TYPE: "Product Type", GUILD_PRODUCT_BILLING_SERVER_NAME: "Server Name", GUILD_PRODUCT_BILLING_TYPE_PREMIUM_ROLE: "Premium Role", GUILD_PRODUCT_BILLING_ACCESS_DOWNLOADABLES: "Access your downloadables", GUILD_PRODUCT_BILLING_PRODUCT_UNAVAILABLE: "This product is no longer available for access and its benefits have been voided. Submit a request with any questions.", GUILD_PRODUCT_BILLING_DELISTED_PRODUCT: "Delisted Product", GUILD_PRODUCT_BILLING_CONTACT_SUPPORT: "Contact Support", GUILD_SHOP_EMBED_LISTINGS_AVAILABLE: "{listingCount} items available", GUILD_SHOP_EMBED_SHOP_AGE: "Selling since {createdYear}", GUILD_SHOP_EMBED_CTA: "Visit Shop", GUILD_PRODUCT_REPORT: "Report Product", GUILD_SUBSCRIPTION_REPORT: "Report Subscription", GUILD_SHOP_REPORT_MODAL_HEADER: "Report [**!!{listingName}!!**]", GUILD_SHOP_REPORT_MODAL_BODY: "Do you want to report [**!!{listingName}!!**] for violation of the [Server Monetization Terms]({monetizationTermsUrl}) or [Community Guidelines]({communityGuidelinesUrl})?", SKU_REPORT_CONFIRMATION_HEADER: "Report Submitted", SKU_REPORT_CONFIRMATION_BODY: "Your report has been submitted against [**!!{skuName}!!**]", SYSTEM_MESSAGE_GUILD_PRODUCT_PURCHASE: "$[!!{username}!!](usernameHook) has purchased [{productName}](handleProductListingClick)!", SYSTEM_MESSAGE_GUILD_PRODUCT_PURCHASE_MOBILE: "[!!{username}!!](usernameHook) has purchased {productName}!", GUILD_PRODUCT_PURCHASE_THANK_YOU_CARD_TEXT: "Thank you,\n $[!!{username}!!](usernameHook)", GUILD_PRODUCT_PURCHASE_THANK_YOU_CARD_TEXT_MOBILE: "Thank you,", MEDIA_CHANNEL_TYPE: "Media", MEDIA_CHANNEL: "Media Channel", MEDIA_CHANNEL_LEARN_MORE: "[Learn more]({hcArticleUrl})", CREATE_MEDIA_CHANNEL_DESCRIPTION: "Share videos, photos, and files with your members.", CHANNEL_TOOLTIP_MEDIA_NSFW: "Media Channel (Age-Restricted)", CHANNEL_TOOLTIP_MEDIA_LIMITED: "Media Channel (Limited)", GUILD_SETTINGS_ONBOARDING_ACTION_TALK_IN_MEDIA_CHANNEL: "Member posts or responds in the media channel", ROLE_PERMISSIONS_SECTION_MEDIA_CHANNEL: "Media Channel Permissions", ROLE_PERMISSIONS_SECTION_MEDIA_CHANNEL_DESCRIPTION: "Automated moderation makes monitoring media channels easier. [Enable](setUpAutomod)", MEDIA_CHANNEL_ONBOARDING_CHECKLIST_FIRST_POST_DESCRIPTION: "Start the conversation and get things going.", MEDIA_CHANNEL_SORT: "Sort", MEDIA_CHANNEL_SORT_A11Y_LABEL: "Change the sort for Media Posts", MEDIA_CHANNEL_ATTACHMENTS_SECTION_TITLE: "Upload your media", MEDIA_CHANNEL_ATTACHMENTS_SECTION_DESCRIPTION: "Add any video, photo, and files to share with members.", MEDIA_CHANNEL_UPLOAD_THUMBNAIL_LABEL: "Upload thumbnail", MEDIA_CHANNEL_CHANGE_THUMBNAIL_LABEL: "Change thumbnail", MEDIA_CHANNEL_SET_AS_THUMBNAIL_LABEL: "Set as thumbnail", MEDIA_CHANNEL_UPSELL_TITLE: "Turn content into conversation!", MEDIA_CHANNEL_UPSELL_NON_MONETIZING_GUILD_TITLE: "Introducing Media Channels!", MEDIA_CHANNEL_UPSELL_NON_MONETIZING_GUILD_BODY: "Create a space where photos and videos get the spotlight.", MEDIA_CHANNEL_UPSELL_BODY: "Create a media channel to share exclusive photos, videos, and files with your subscribers.", MEDIA_CHANNEL_UPSELL_CREATE_NOW_CTA: "Create now", MEDIA_CHANNEL_HIDE_MEDIA_DOWNLOAD_OPTIONS_TOGGLE_LABEL: "Show Option to Save and Copy Embedded Media", MEDIA_CHANNEL_HIDE_MEDIA_DOWNLOAD_OPTIONS_TOGGLE_DESCRIPTION: "Allows members to save, copy, and share media attachments uploaded to this channel. However, files that cannot be embedded can still be downloaded.", MEDIA_CHANNEL_ADMIN_EDUCATION_SHOW: "Show channel benefits", MEDIA_CHANNEL_ADMIN_EDUCATION_HIDE: "Hide channel benefits", MEDIA_POST_SHARE_PROMPT_TITLE: "Share this post with your community!", MEDIA_POST_SHARE_PROMPT_SUBTITLE: "[Learn more]({helpArticleUrl}) about how sharing works.", MEDIA_POST_SHARE_PROMPT_SUBTITLE_MOBILE: "[Learn more](helpArticleUrl) about how sharing works.", MEDIA_POST_SHARE_PROMPT_CTA: "Copy post link", MEDIA_POST_ADMIN_EDUCATION_SERVER_SUB_PILL: "SERVER SUB EXCLUSIVE", MEDIA_POST_ADMIN_EDUCATION_SHARE_TITLE: "Share exclusive videos and photos with subscribers!", MEDIA_POST_ADMIN_EDUCATION_SHARE_SUBTITLE: "Add Media Channels as an premium benefit for your subscribers to enjoy. You can share media posts in other channels that are exclusive for subscribers.", MEDIA_POST_ADMIN_EDUCATION_HAS_TIERS_CTA: "Add channel to tier", MEDIA_POST_ADMIN_EDUCATION_NO_TIERS_CTA: "Set up server subscriptions", MEDIA_POST_ADMIN_EDUCATION_ABOUT_MONETIZING_TITLE: "What can Media Channels be used for?", MEDIA_POST_ADMIN_EDUCATION_ABOUT_NON_MONETIZING_TITLE: "Media Channels give photos and videos the spotlight", MEDIA_POST_ADMIN_EDUCATION_ABOUT_MONETIZING_SUBTITLE: "Media Channels gives you a new space to share videos, photos, and files with your subscribers.", MEDIA_POST_ADMIN_EDUCATION_ABOUT_NON_MONETIZING_SUBTITLE: "Give your members a dedicated channel for sharing videos, photos, and files in a vibrant, visual layout.", MEDIA_POST_ADMIN_EDUCATION_PREVIEW_TITLE_ONE: "How to Collect Gem | CheeseTuts", MEDIA_POST_ADMIN_EDUCATION_PREVIEW_USERNAME_ONE: "Phibi", MEDIA_POST_ADMIN_EDUCATION_PREVIEW_TITLE_TWO: "Wumpus Day in the Life | BTS", MEDIA_POST_ADMIN_EDUCATION_PREVIEW_USERNAME_TWO: "Nelly", MEDIA_POST_ADMIN_EDUCATION_PREVIEW_TITLE_THREE: "NEW Animation Short First Look", MEDIA_POST_ADMIN_EDUCATION_PREVIEW_USERNAME_THREE: "Wumpus", MEDIA_POST_ADMIN_EDUCATION_HELP_CENTER: "More about Media Channels", MEDIA_POST_ADMIN_EDUCATION_PREVIEW_TIMESTAMP: "Posted 2d ago", MEDIA_POST_ADMIN_EDUCATION_BEHIND_THE_SCENES_TAG: "Behind the Scenes", MEDIA_POST_ADMIN_EDUCATION_EXCLUSIVE_ART_TAG: "Exclusive Art", MEDIA_POST_ADMIN_EDUCATION_PRERELEASES_TAG: "Pre-releases", MEDIA_POST_ADMIN_EDUCATION_TUTORIALS_TAG: "Tutorials", MEDIA_POST_ADMIN_EDUCATION_FAN_ART_TAG: "Fan Art", MEDIA_POST_ADMIN_EDUCATION_DESK_SETUP_TAG: "Desk Setup", MEDIA_POST_ADMIN_EDUCATION_PETS_TAG: "Pets", MEDIA_POST_ADMIN_EDUCATION_HOUSEPLANTS_TAG: "Houseplants", MEDIA_POST_EMBED_SUBSCRIBED_CTA: "View", MEDIA_POST_EMBED_SUBSCRIBE_CTA: "Subscribe", MEDIA_POST_EMBED_FOOTER_WITH_AUTHOR_AND_CHANNEL: "Posted in **!!{channelName}!!** by [!!{username}!!](usernameOnClick)", MEDIA_POST_EMBED_FOOTER: "Posted in **!!{guildName}!!**", MEDIA_POST_EMBED_FOOTER_WEB: "posted by $[{authorName}](authorNameHook)", MEDIA_POST_EMBED_THUMBNAIL_ALT: "Media post embed thumbnail image", MEDIA_POST_EMBED_AUTHOR_AVATAR_ALT: "Media post author avatar", MEDIA_POST_EMBED_CHANNEL_ICON_ALT: "Channel icon with sparkle", MEDIA_POST_EMBED_BLURRED_THUMBNAIL_TEXT: "SUBSCRIBE TO VIEW", MEDIA_POST_MULTIPLE_THUMBNAIL_NOTICE_TITLE: "Tap to set thumbnail", MEDIA_POST_MULTIPLE_THUMBNAIL_NOTICE_DESCRIPTION: "Tap on a media attachment and set it as the post thumbnail.", DOMAIN_VERIFICATION_HEADER: "Connect your Domain", DOMAIN_VERIFICATION_DESCRIPTION: "Verify ownership of your domain and show it off on your profile!", DOMAIN_VERIFICATION_LABEL: "Domain", DOMAIN_VERIFICATION_INSTRUCTIONS_DNS_1: "Sign in to your domain name provider", DOMAIN_VERIFICATION_INSTRUCTIONS_DNS_2: "Create a new DNS record:", DOMAIN_VERIFICATION_DNS_WARNING: "It may take a few minutes for the DNS record to propagate.", DOMAIN_VERIFICATION_RECORD_NAME: "Name", DOMAIN_VERIFICATION_RECORD_TYPE: "Type", DOMAIN_VERIFICATION_RECORD_CONTENT: "Content", DOMAIN_VERIFICATION_USE_HTTP: "Verify using HTTPS", DOMAIN_VERIFICATION_USE_DNS: "Verify using DNS", DOMAIN_VERIFICATION_INSTRUCTIONS_HTTP: "Create a new file on your website:", CLIP_TAG: "Clip (Beta)", CLIP_TAG_MOBILE: "CLIP", CLIPS: "Clips", CLIPS_CLIPPING: "Clipping", CLIPS_SETTINGS: "Clips Settings", CLIPS_SETTINGS_TOP_SUBHEADER: "Change settings for clipping", CLIPS_SETTINGS_ENABLE_CLIPS: "Enable Clipping", CLIPS_SETTINGS_ENABLE_CLIPS_HELP: "Enables you to capture clips while you're streaming by using the clipping keybind.", CLIPS_SETTINGS_ENABLE_REMINDERS: "Enable Reminders", CLIPS_SETTINGS_ENABLE_REMINDERS_HELP: "After a clip is captured, show a reminder for new clips", CLIPS_SETTINGS_ENABLE_DECOUPLED_CLIPS: "Enable Always-On Game Clipping", CLIPS_SETTINGS_ENABLE_DECOUPLED_CLIPS_HELP: "Enables you to capture clips while gaming (even if you’re not streaming).", CLIPS_SETTINGS_HELP_IN_GO_LIVE_CTA: "Capture clips during your stream with $[!!{keybind}!!](keybindHook).", CLIPS_SETTINGS_VIDEO_QUALITY: "Video Quality Settings", CLIPS_SETTINGS_VIDEO_QUALITY_HELP: "Clips will be captured at the same quality as your stream.", CLIPS_SETTINGS_QUALITY_INFOBOX: "Please note that clips are currently captured at the same quality as your stream when streaming.", CLIPS_SETTINGS_UNDER_MIN_SPECS: "Your computer doesn't meet the minimum specifications for Clips, performance may be impacted if you enable Clips.", CLIPS_QUALITY_DEFAULT: "Default", CLIPS_SETTINGS_LENGTH: "Clip Length", CLIPS_SETTINGS_LENGTH_HELP: "By default, clips are 30 seconds long.", CLIPS_SETTINGS_STORAGE_LOCATION: "Storage Location", CLIPS_SETTINGS_STORAGE_LOCATION_HELP: "Choose where to store your clips.", CLIPS_SETTINGS_STORAGE_LOCATION_LABEL: "Storage Location, {storageLocation}", CLIPS_LENGTH_SECONDS: "{count, plural, =1 {# Second} other {# Seconds}}", CLIPS_LENGTH_MINUTES: "{count, plural, =1 {# Minute} other {# Minutes}}", CLIPS_SETTINGS_KEYBIND: "Clipping Keybind", CLIPS_SETTINGS_KEYBIND_HELP: "Set up your keybind to capture clips. The default is ALT + C.", CLIPS_SAVE: "Save Clip", CLIPS_VIEWERSIDE_BUTTON_ENABLE_CLIPS_TOOLTIP: "Enable clips to capture this stream.", CLIPS_VIEWERSIDE_BUTTON_FOCUS_TOOLTIP: "Focus on a stream to capture clips.", CLIPS_VIEWERSIDE_BUTTON_DISABLED_TOOLTIP: "Clips are disabled for this stream.", CLIPS_SETTINGS_ALLOW_VIEWER_CLIPS: "Allow viewers to capture clips", CLIPS_SETTINGS_ALLOW_VIEWER_CLIPS_HELP: "Enable the creation of clips from your Go Live stream", CLIPS_SETTINGS_WHO_CAN_CAPTURE: "Who can capture clips", CLIPS_SETTINGS_WHO_CAN_CAPTURE_HELP: "Choose what layer of connectivity you need viewers to have in order to capture clips", CLIPS_CONNECTIVITY_ALL: "All", CLIPS_CONNECTIVITY_FRIENDS: "Friends", CLIPS_KEYBIND_DESCRIPTION: "Clips the last 30 seconds to 2 minutes of your stream, depending on your settings.", CLIPS_EDIT_GAME_AUDIO: "Stream Audio", CLIPS_EDIT_VOICE_CHANNEL_AUDIO: "Participants Audio", CLIPS_EDIT_SAVE_CLIP: "Save Clip", CLIPS_EDIT_EXPORT: "Export", CLIPS_EDIT_SHARE_CLIP: "Share Clip", CLIPS_EDIT_TITLE: "Clip Title", CLIPS_SHARE_A_CLIP: "Share a Clip", CLIPS_NOTIFICATION_TITLE: "Last {duration} clipped!", CLIPS_SAVE_START_NOTIFICATION_TITLE: "Saving clip", CLIPS_SAVE_ERROR_NOTIFICATION_TITLE: "Unable to save clip", CLIPS_REMINDER_NOTIFICATION_TITLE: "Create clips with keybind $[!!{keybind}!!](keybindHook)", CLIPS_CALL_TOOLTIP_TITLE: "You recently captured a clip!", CLIPS_CALL_TOOLTIP_LINK_CTA: "View Clip", CLIPS_YOU_HAVE_NEW_CLIPS: "You have {count, plural, =1 {# new clip} other {# new clips}}!", CLIPS_REVIEW_NOW: "Review Now", CLIPS_SESSION_ENDED_TOOLTIP_BODY: "You captured clips during your recent !!{applicationName}!! stream. Check them out in your clips library!", CLIPS_SESSION_ENDED_TOOLTIP_PRIMARY_CTA: "View Clips", CLIPS_SESSION_ENDED_TOOLTIP_SECONDARY_CTA: "Stop Reminders", CLIPS_CHANNEL_NOTICE_EDUCATION_BODY: "Clipping is here! Use $[!!{keybind}!!](keybindHook) to capture clips while you're streaming.", CLIPS_DELETE_MODAL_TITLE: "Delete this clip?", CLIPS_DELETE_MODAL_SUBTITLE: "Deleting a clip cannot be undone. Would you like to delete this clip in Discord & remove the file from your computer?", CLIPS_DELETE_CLIP: "Delete Clip", CLIP_SHARE_MODAL_TITLE: "Share clip to friends", CLIP_SHARE_MODAL_SUBTITLE: "Share your clip to a channel or directly with friends!", CLIP_SHARE_SELECT_CHANNEL: "OR SELECT A CHANNEL", CLIPS_SORT_RECENT: "Most Recent", CLIPS_SORT_OLDEST: "Oldest", CLIPS_SORT_PLACEHOLDER: "Sort Clips", CLIPS_LOAD_ERROR_TITLE: "Unable to Open Clip", CLIPS_LOAD_ERROR_BODY: "We couldn't open this clip. The file may have been moved or deleted.", CLIPS_ENABLED_BADGE: "Enabled", CLIPS_ENABLED_VIEWER_TOOLTIP: "Participants in this call have clips enabled.", CLIPS_ENABLED_VIEWER_TOOLTIP_NITRO_EA: "Participants in this call have clips enabled. Now available early access with Nitro.", CLIPS_IN_CALL_WARNING: "A participant in the call you joined has clipping enabled, your voice may be recorded.", CLIPS_GALLERY_TOOLTIP: "View Clips", CLIPS_GALLERY_NO_CLIPS: "You haven't clipped anything yet! Use $[!!{keybind}!!](keybindHook) to capture a clip while streaming.", CLIPS_GALLERY_NO_CLIPS_NO_KEYBIND_SET: "You haven't clipped anything yet! Set up a keybind [here](onClick) to start clipping.", CLIPS_GALLERY_NO_CLIPS_MATCH_QUERY: "We can't find any clips matching your query.", CLIPS_GALLERY_NO_CLIPS_CLIPS_NOT_ENABLED: "You haven’t clipped anything yet! Get started by [enabling clipping](onClick).", CLIPS_EDIT_DATE_TITLE: "Clipped On", CLIPS_EDIT_TIME_TITLE: "Time", CLIPS_EDIT_USER_LIST_TITLE: "Participants", CLIPS_ATTACHMENT_TOOLTIP: "This clip was captured on Discord", CLIPS_BETA_TAG_HOVER: "Clips is an experimental feature and isn't currently available everywhere on Discord.", CLIPS_SAVE_CLIP_TOOLTIP: "Save Clip (!!{hotkey}!!)", CLIPS_ONBOARDING_GO_LIVE_DEFAULT_DISABLED_COACHMARK_TITLE: "Introducing Clips!", CLIPS_ONBOARDING_GO_LIVE_DEFAULT_DISABLED_COACHMARK_BODY: "By enabling clips, you will be able to capture moments from your stream.", CLIPS_ONBOARDING_GO_LIVE_DEFAULT_DISABLED_COACHMARK_HARDWARE_IMPACT_WARNING: "Warning: based on your hardware, enabling clips may impact your game performance. [Learn more]({url})", CLIPS_ONBOARDING_CLIP_BUTTON_ACTIVITY_PANEL_COACHMARK_TITLE: "Take a clip with $[!!{keybind}!!](keybindHook)", CLIPS_ONBOARDING_CLIP_BUTTON_ACTIVITY_PANEL_COACHMARK_BODY: "Save a fun moment from your stream by pressing the clip button or $[!!{keybind}!!](keybindHook).", CLIPS_EXPORT_TO_SOUNDBOARD: "Add to Soundboard", CLIPS_EXPORT_TO_FILE: "Download Edited Clip", CLIPS_CANNOT_ATTACH_FILE_TO_CHANNEL: "You cannot send files in this channel.", CLIPS_SETTINGS_EDUCATION_BANNER_TITLE: "Clip, edit, share!", CLIPS_SETTINGS_EDUCATION_BANNER_TITLE_WITH_KEYBIND: "Clip, edit, share! [$[!!{keybind}!!](keybindHook)]", CLIPS_SETTINGS_EDUCATION_BANNER_BODY: "Capture your favorite streaming moments with clips.", CLIPS_GO_LIVE_EA_UPSELL_TITLE: "Level up your stream with Nitro", CLIPS_GO_LIVE_EA_UPSELL_BODY: "Unlock **HD streaming** and get **early access** to clips.", CLIPS_GO_LIVE_EA_UPSELL_CTA: "Get Nitro", CLIPS_ADD_A_TITLE: "Add a title", CLIPS_UNTITLED: "Untitled", CLIPS_UNKNOWN_SOURCE: "Unknown", CLIPS_SETTINGS_OPT_OUT_OF_VOICE_RECORDING: "Allow my voice to be recorded in Clips", CLIPS_SETTINGS_OPT_OUT_OF_VOICE_RECORDING_DESCRIPTION: "By turning on this setting, your voice may be included when someone in the same voice channel uses Clips.", CLIPS_SETTINGS_VIEWERSIDE_CLIPS_TOGGLE: "Allow viewers to capture clips", CLIPS_SETTINGS_VIEWERSIDE_CLIPS_TOGGLE_DESCRIPTION: "If this is on, viewers can take clips of your stream.", CLIPS_SETTINGS_HW_ENCODING_MUST_BE_ENABLED_INFOBOX: "To use Clips, enable hardware encoding. Find it in [Voice & Video settings](onClick).", CLIPS_PROCESSING_BADGE: "Processing...", CLIPS_SETTINGS_RESOLUTION: "Clip Resolution", CLIPS_SETTINGS_RESOLUTION_NOTE: "This is the maximum resolution your clips will be recorded in.", CLIPS_SETTINGS_FRAMERATE: "Clip Frame Rate", CLIPS_SETTINGS_FRAMERATE_NOTE: "This is the maximum frame rate your clips will be recorded at.", CLIPS_CROP_START: "Crop Start", CLIPS_CROP_END: "Crop End", CLIPS_ATTACHMENT_UTILITIES_SPOILER: "Spoiler Clip", CLIPS_ATTACHMENT_UTILITIES_REMOVE: "Remove Clip", CLIPS_USER_EDUCATION_ENABLED_BODY: "You can now take clips directly in game with $[!!{keybind}!!](keybindHook) or set a custom keybind.", CLIPS_USER_EDUCATION_ENABLED_BODY_NO_KEYBIND: "You can now take clips directly in game. Set a clip keybind in your Clips settings!", CLIPS_USER_EDUCATION_DISABLED_BODY: "Enable Clips now to capture moments directly in game.", CLIPS_USER_EDUCATION_ERROR_BODY: "Oh no! We are currently unable to take clips.", CLIPS_USER_EDUCATION_MANAGE_CLIPS_SETTINGS: "Manage Clips Settings", CLIPS_USER_EDUCATION_LEARN_MORE: "Learn More", SOUND_INCOMING_RING_HALLOWEEN: "Halloween Incoming Ring", SOUND_INCOMING_RING_EOY_2023: "Seasonal Incoming Ring", CUSTOM_SOUNDS: "Custom Sounds", ENABLE_PHONE_INTEGRATION: "Enable integration with the Phone app to experience this.", GUILD_SHOP_CHANNEL_LABEL: "Server Shop", GUILD_SHOP_PRODUCTS_A11Y_LABEL: "Available Products", GUILD_SHOP_LISTING_CARD_A11Y_LABEL: "Product Listing Card for {productName}", GUILD_SHOP_SUPPORT_SERVER_HEADER: "Support the server", GUILD_SHOP_PRODUCT_TYPE_SELECTOR_TITLE: "Products", GUILD_SHOP_PRODUCT_TYPE_BODY: "Snag some Downloadables or special Roles", GUILD_ROLE_SUB_TYPE_BODY: "Moving to this tab soon. For now, view [here](openRoleSubPage)", GUILD_ROLE_SUB_TYPE_BODY_AFTER_CONSOLIDATION: "Subscribe to support this server month to month", GUILD_SHOP_PAGE_PREVIEW_NOTICE_LABEL: "This page is not visible to your members and can be deleted anytime.", GUILD_SHOP_TAB_PREVIEW_NOTICE_LABEL: "This tab is not visible to your members and can be deleted anytime.", GUILD_SHOP_REMOVE_PREVIEW_PAGE_BUTTON: "Remove page", GUILD_SHOP_REMOVE_PREVIEW_TAB_BUTTON: "Remove tab", GUILD_SHOP_PREVIEW_CTA_BUTTON: "Get Started", USER_DISCONNECTED_SUBTEXT: "!!{username}!! can still join anytime while you are here.", REPORTS_USER_BUTTON_TITLE: "Report User Profile", REPORTS_USER_PREVIEW_TITLE: "Selected User", REPORTS_FREE_TEXT_PLACEHOLDER: "(Optional) Provide more context about your report here", REPORTS_BLOCK_USER_ELEMENT_DESCRIPTION: "This is whose profile you reported. Block them to stop seeing any of their messages.", REPORTS_MUTE_USER_ELEMENT_DESCRIPTION: "This is whose profile you reported. Mute to stop seeing direct message notifications from this user.", REPORTS_BLOCK_AND_MUTE_USER_ELEMENT_DESCRIPTION: "This is whose profile you reported. Mute to stop seeing direct message notifications from this user. Block them to stop seeing any of their messages.", SAFETY_HUB_PAGE_TITLE: "Safety Hub", PRIVACY_AND_SAFETY_TAB_TITLE_SETTINGS: "User Settings", PRIVACY_AND_SAFETY_TAB_TITLE_SUPPORT: "Account Standing", PRIVACY_AND_SAFETY_TAB_TITLE_SUPPORT_V2: "Standing", PRIVACY_AND_SAFETY_GUILD_TAB_TITLE: "Server Settings", SAFETY_HUB_ACCOUNT_STANDING_ALL_GOOD_TITLE: "Your account is $[all good!](hook)", SAFETY_HUB_ACCOUNT_STANDING_ALL_GOOD_TITLE_V2: "Your account is $[all good](hook)", SAFETY_HUB_ACCOUNT_STANDING_ALL_GOOD_DESCRIPTION: "Thanks for upholding Discord's [Terms of Service]({termsOfService}) and [Community Guidelines]({communityGuidelines}).", SAFETY_HUB_ACCOUNT_STANDING_ALL_GOOD_DESCRIPTION_V2: "Thanks for upholding Discord's [Terms of Service]({termsOfService}) and [Community Guidelines]({communityGuidelines}). If you break the rules, it will show up here.", SAFETY_HUB_ACCOUNT_STANDING_LIMITED_TITLE: "Your account is $[limited.](hook)", SAFETY_HUB_ACCOUNT_STANDING_LIMITED_TITLE_V2: "Your account is $[limited](hook)", SAFETY_HUB_ACCOUNT_STANDING_LIMITED_DESCRIPTION: "You broke Discord's rules and will lose feature access if you break them again.", SAFETY_HUB_ACCOUNT_STANDING_LIMITED_DESCRIPTION_V2: "You may lose access to some parts of Discord if you break the rules again.", SAFETY_HUB_ACCOUNT_STANDING_VERY_LIMITED_TITLE: "Your account is $[very limited.](hook)", SAFETY_HUB_ACCOUNT_STANDING_VERY_LIMITED_TITLE_V2: "Your account is $[very limited](hook)", SAFETY_HUB_ACCOUNT_STANDING_VERY_LIMITED_DESCRIPTION: "You broke Discord's rules and you may lose your account if you break them again.", SAFETY_HUB_ACCOUNT_STANDING_VERY_LIMITED_DESCRIPTION_V2: "You can't use some parts of Discord. You may be suspended if you break the rules again.", SAFETY_HUB_ACCOUNT_STANDING_AT_RISK_TITLE: "Your account is $[at risk.](hook)", SAFETY_HUB_ACCOUNT_STANDING_AT_RISK_TITLE_V2: "Your account is $[at risk](hook)", SAFETY_HUB_ACCOUNT_STANDING_AT_RISK_DESCRIPTION: "You broke Discord's rules. You will be permanently suspended if you break them again.", SAFETY_HUB_ACCOUNT_STANDING_AT_RISK_DESCRIPTION_V2: "You can't use some parts of Discord. You may be permanently banned if you break the rules again.", SAFETY_HUB_ACCOUNT_STANDING_AT_RISK_DESCRIPTION_V3: "You can't use some parts of Discord. You may be permanently suspended if you break the rules again.", SAFETY_HUB_ACCOUNT_STANDING_SUSPENDED_TITLE: "Your account is $[suspended.](hook)", SAFETY_HUB_ACCOUNT_STANDING_SUSPENDED_TITLE_V2: "Your account is $[suspended](hook)", SAFETY_HUB_ACCOUNT_STANDING_SUSPENDED_DESCRIPTION: "You broke Discord's [Terms of Service]({termsOfService}) and [Community Guidelines]({communityGuidelines}).", SAFETY_HUB_ACCOUNT_STANDING_SUSPENDED_DESCRIPTION_V2: "Due to serious policy violations, your account is permanently suspended. You can no longer use Discord.", SAFETY_HUB_ACCOUNT_STANDING_ALL_GOOD_SHORT: "$[All good!](hook)", SAFETY_HUB_ACCOUNT_STANDING_LIMITED_SHORT: "$[Limited](hook)", SAFETY_HUB_ACCOUNT_STANDING_VERY_LIMITED_SHORT: "$[Very limited](hook)", SAFETY_HUB_ACCOUNT_STANDING_AT_RISK_SHORT: "$[At risk](hook)", SAFETY_HUB_ACCOUNT_STANDING_SUSPENDED_SHORT: "$[Suspended](hook)", SAFETY_HUB_CLASSIFICATION_DETAIL_HEADER: "You broke the rules for $[!!{classification_type}!!](classificationHook).", SAFETY_HUB_CLASSIFICATION_DETAIL_HEADER_V2: "You broke the rules for $[!!{classification_type}!!](classificationHook).", SAFETY_HUB_CLASSIFICATION_DETAIL_HEADER_V3: "You broke Discord's rules for $[!!{classification_type}!!](classificationHook)", SAFETY_HUB_CLASSIFICATION_DETAIL_HEADER_GUILD: "Your server {guildName} broke Discord's rules for $[!!{classification_type}!!](classificationHook)", SAFETY_HUB_CLASSIFICATION_DETAIL_HEADER_GUILD_PRESENCE: "A server you joined, {guildName}, broke Discord's rules for $[!!{classification_type}!!](classificationHook)", SAFETY_HUB_CLASSIFICATION_DETAIL_EVIDENCE_HEADER: "YOUR RECENT ACTIVITY", SAFETY_HUB_CLASSIFICATION_DETAIL_ACTIONS_TAKEN_HEADER: "WE TOOK THESE ACTIONS", SAFETY_HUB_CLASSIFICATION_DETAIL_ACTIONS_TAKEN_HEADER_V2: "What this means for you", SAFETY_HUB_CLASSIFICATION_DETAIL_ACTIONS_TAKEN_VIOLATION_ACCOUNT_STATUS: "This violation affects your account status until {expirationDate}", SAFETY_HUB_CLASSIFICATION_DETAIL_ACTION_EXPLAINED_HEADER: "WHY WE TOOK THIS ACTION", SAFETY_HUB_CLASSIFICATION_DETAIL_ACTION_EXPLAINED_DESCRIPTION: "Our teams use automation and manual review to enforce our rules. We found your activity violated our [Terms of Service]({tosLink}) or [Community Guidelines]({communityGuidelinesLink}).", SAFETY_HUB_CLASSIFICATION_DETAIL_WHAT_YOU_CAN_DO_HEADER: "What you can do", SAFETY_HUB_CLASSIFICATION_DETAIL_WHAT_YOU_CAN_DO_DESCRIPTION: "To keep your account in good standing, get familiar with our [Terms of Service]({tosLink}) and [Community Guidelines]({communityGuidelinesLink}).", SAFETY_HUB_CLASSIFICATION_DETAIL_ACTION_APPEAL: "Did we make a mistake? [Let us know]({link})", SAFETY_HUB_CLASSIFICATION_DETAIL_ACTION_APPEAL_V2: "Did we make a mistake? $[Let us know](letUsKnowHook)", SAFETY_HUB_CLASSIFICATION_DETAIL_POLICY_CARD_HEADER: "Learn about our {classificationDescription} policy.", SAFETY_HUB_CLASSIFICATION_DETAIL_POLICY_CARD_HEADER_V2: "Learn about our {classificationDescription} policy.", SAFETY_HUB_CLASSIFICATION_DETAIL_POLICY_CARD_SUBTEXT: "Discord's rules apply to everyone", SAFETY_HUB_CLASSIFICATION_DETAIL_REDIRECT: "Go to account standing", SAFETY_HUB_CLASSIFICATION_DETAIL_REDIRECT_V2: "Go to account standing", SAFETY_HUB_CLASSIFICATION_DETAIL_REDIRECT_V3: "See account standing", SAFETY_HUB_CLASSIFICATION_DETAIL_APPEAL_STATUS: "You requested a review of this violation.", SAFETY_HUB_ERROR_MESSAGE: "Something went wrong...", SAFETY_HUB_ERROR_ACTION_BUTTON: "Retry", SAFETY_HUB_VIOLATIONS_CONTAINER_HEADER_ACTIVE: "ACTIVE VIOLATIONS — {count}", SAFETY_HUB_VIOLATIONS_CONTAINER_HEADER_EXPIRED: "EXPIRED VIOLATIONS — {count}", SAFETY_HUB_VIOLATIONS_CONTAINER_HEADER_ACTIVE_V2: "Active violations — {count}", SAFETY_HUB_VIOLATIONS_CONTAINER_HEADER_EXPIRED_V2: "Expired violations — {count}", SAFETY_HUB_VIOLATIONS_CONTAINER_SUBHEADER_ACTIVE: "Violations affect your account status until they expire", SAFETY_HUB_VIOLATIONS_CONTAINER_SUBHEADER_ACTIVE_V2: "These affect your account status until they expire.", SAFETY_HUB_VIOLATIONS_CONTAINER_SUBHEADER_EXPIRED: "These violations no longer affect your account", SAFETY_HUB_VIOLATIONS_CONTAINER_SUBHEADER_EXPIRED_V2: "These no longer affect your account status.", SAFETY_HUB_VIOLATIONS_CONTAINER_EMPTY_STATE_ACTIVE: "Your account doesn't have any active violations.", SAFETY_HUB_VIOLATIONS_CONTAINER_EMPTY_STATE_EXPIRED: "Your account doesn't have any expired violations.", SAFETY_HUB_VIOLATIONS_CONTAINER_EMPTY_STATE_SUBTEXT_ACTIVE: "If you break Discord's rules, we'll let you know about it here.", SAFETY_HUB_VIOLATIONS_CONTAINER_EMPTY_STATE_SUBTEXT_EXPIRED: "If you have any expired violations, we'll show them here.", SAFETY_HUB_VIOLATIONS_CONTAINER_PAGINATION_BUTTON: "See {nextPageSize} more", SAFETY_HUB_VIOLATIONS_CONTAINER_EXPIRATION_DATE_ACTIVE: "Expires on {expirationDate}", SAFETY_HUB_VIOLATIONS_CONTAINER_EXPIRATION_DATE_EXPIRED: "Expired on {expirationDate}", SAFETY_HUB_VIOLATIONS_CONTAINER_DESCRIPTION: "You broke the rules for $[!!{description}!!](descriptionHook).", SAFETY_HUB_VIOLATIONS_CONTAINER_DESCRIPTION_V2: "You broke Discord's rules for $[!!{description}!!](descriptionHook).", SAFETY_HUB_VIOLATIONS_CONTAINER_DESCRIPTION_GUILD: "Your server {guildName} broke Discord's rules for $[!!{description}!!](descriptionHook).", SAFETY_HUB_VIOLATIONS_CONTAINER_NEW: "NEW", SAFETY_HUB_STANDALONE_PAGE_NAGBAR: "You lost access to Discord. Review your violations to understand for how long and why.", SAFETY_HUB_STANDALONE_PAGE_NAGBAR_CTA: "Learn More", SAFETY_HUB_GUILD_REMOVED_DATE: "Removed on {removalDate}", SAFETY_POLICY_NOTICE_BUTTON: "Learn more", SAFETY_POLICY_NOTICE_HEADER: "You broke Discord's community guidelines", SAFETY_POLICY_NOTICE_BODY: "We've taken action that affects your account.", SAFETY_POLICY_NOTICE_DAYS_AGO: "{daysAgo, plural, =0 {Today} =1 {Yesterday} other {# days ago}}", SAFETY_SYSTEM_NOTIFICATION_SEE_DETAILS_BUTTON: "See Details", SAFETY_SYSTEM_NOTIFICATION_LEARN_MORE_BUTTON: "Learn More", BLOCKED_BY_PROXY_NOTICE: "Please bear with us as we are encountering some network errors.", OBSCURED_CONTENT_HIDE_CONTENT_ALT: "Hide content", OBSCURED_CONTENT_SHOW_CONTENT_ALT: "Show content", OBSCURED_CONTENT_INFO_LINK_TEXT: "Why we hide some media", EXPLICIT_CONTENT_WARNING: "May contain sensitive content", EXPLICIT_CONTENT_WARNING_PENDING: "May contain sensitive content", EXPLICIT_CONTENT_WARNING_TOOLTIP: "Content Warning: This may contain sensitive content", EXPLICIT_CONTENT_ALT: "Content Warning: This may contain sensitive content", EXPLICIT_CONTENT_BUTTON_TOOLTIP: "Reveal sensitive content", OBSCURED_CONTENT_LEARN_MORE_MESSAGE_LABEL: "Why we hide some media", OBSCURED_CONTENT_LEARN_MORE_HEADER: "Why we hide some media", OBSCURED_CONTENT_LEARN_MORE_DESCRIPTION_ADULT: "We automatically detect and filter media that may be sensitive. You can manage this filter in your Privacy & Safety settings.", OBSCURED_CONTENT_LEARN_MORE_DESCRIPTION_TEEN: "We automatically detect and filter media that may be sensitive to help protect people on Discord who are under 18. You can learn more about this in our Help Center.", OBSCURED_CONTENT_LEARN_MORE_HEADER_IMAGE_ALT: "Safety Alert", OBSCURED_CONTENT_LEARN_MORE_MODAL_LABEL: "Why we hide some media", OBSCURED_CONTENT_UPDATE_SETTINGS_CTA: "Go to Settings", OBSCURED_CONTENT_LEARN_MORE_DISMISS: "Dismiss", OBSCURED_CONTENT_LEARN_MORE_FALSE_POSITIVE: "Did we make a mistake? [Let us know](handleFalsePositiveHook)", OBSCURED_CONTENT_MARK_FALSE_POSITIVE: "Mark As Not Sensitive", OBSCURED_CONTENT_MARK_FALSE_POSITIVE_SUCCESS: "Thanks for letting us know!", OBSCURED_CONTENT_MARK_FALSE_POSITIVE_MODAL_HEADER: "Mark as not sensitive", OBSCURED_CONTENT_MARK_FALSE_POSITIVE_MODAL_DESCRIPTION: "Help improve our sensitive media filter by forwarding this media to Discord.", OBSCURED_CONTENT_SETTINGS_HEADER: "Sensitive Media", OBSCURED_CONTENT_SETTINGS_DESC: "Choose what you see when uploaded or linked media may contain sensitive content. [Learn more about sensitive media.]({learnMoreLink})", OBSCURED_CONTENT_SETTING_FRIENDS: "Direct messages from friends", OBSCURED_CONTENT_SETTING_NON_FRIENDS: "Direct messages from others", OBSCURED_CONTENT_SETTING_GUILDS: "Server channel messages", OBSCURED_CONTENT_SETTINGS_OPTION_SHOW: "Show", OBSCURED_CONTENT_SETTINGS_OPTION_BLUR: "Blur", OBSCURED_CONTENT_SETTINGS_OPTION_BLOCK: "Block", GUILD_HEADER_ACTIVE_CHANNELS_COUNT: "{count, plural, =1 {# Active Channel} other {# Active Channels}}", GUILD_HEADER_ACTIVE_CHANNELS_COUNT_UNKNOWN: "— Active Channels", GUILD_HEADER_ONLINE_COUNT: "{count, number} Online", GUILD_HEADER_ONLINE_COUNT_UNKNOWN: "— Online", GUILD_HEADER_MEMBER_COUNT: "{count, plural, =1 {# Member} other {# Members}}", GUILD_HEADER_MEMBER_COUNT_UNKNOWN: "— Members", SENDER_BLOCKED_MEDIA_MARK_FALSE_POSITIVE: "Mark as not sensitive", SENDER_BLOCKED_MEDIA_FALSE_POSITIVE_LINK: "Did we make a mistake? [Let us know](handleFalsePositiveHook)", SENDER_BLOCKED_MEDIA_BOT_GUILD_MESSAGE: "Your message could not be sent. It may contain explicit media, which has been blocked by the server.", SENDER_BLOCKED_MEDIA_BOT_DMS_MESSAGE: "Your message could not be sent. It may contain sensitive media, which has been blocked by someone in this conversation.", SENDER_BLOCKED_MEDIA_EXPIRED_ERROR_HEADER: "Unable to Mark as Not Sensitive", SENDER_BLOCKED_MEDIA_EXPIRED_ERROR_BODY: "We don't store blocked media permanently. Since this media was uploaded a while ago, the option to mark it as not sensitive has expired.", SAFETY_ALERT_BLOCK_AND_REPORT_DESCRIPTION: "They won’t be able to message you. If you feel their actions could harm someone, please submit a report to Discord.", SAFETY_ALERT_BLOCK_AND_REPORT_BUTTON: "Block and report", SAFETY_WARNING_BANNER_CLOSE_A11Y: "Close", SAFETY_TOOLS_BUTTON_LABEL: "Open Safety Tools", SAFETY_TOOLS_ACTION_SHEET_HEADER: "Safety tools", SAFETY_TOOLS_ACTION_SHEET_BLOCK_TITLE: "Block", SAFETY_TOOLS_ACTION_SHEET_BLOCK_SUBTITLE: "Stop them from messaging you", SAFETY_TOOLS_ACTION_SHEET_REPORT_TITLE: "Report", SAFETY_TOOLS_ACTION_SHEET_REPORT_SUBTITLE: "Help make Discord safer for everyone.", SAFETY_TOOLS_ACTION_SHEET_CRISIS_TEXT_LINE_TITLE: "Contact Crisis Text Line", SAFETY_TOOLS_ACTION_SHEET_CRISIS_TEXT_LINE_SUBTITLE: "Get live support.", SAFETY_TOOLS_ACTION_SHEET_CRISIS_BUTTON: "Contact", SAFETY_TOOLS_ACTION_SHEET_NO_FILTR_TITLE: "Visit NoFiltr", SAFETY_TOOLS_ACTION_SHEET_NO_FILTR_SUBTITLE: "NoFiltr is a community that empowers young people to safely navigate online.", SAFETY_TOOLS_ACTION_SHEET_NO_FILTR_BUTTON: "Visit", SAFETY_TOOLS_ACTION_SHEET_BREAK_TITLE: "Take a break", SAFETY_TOOLS_ACTION_SHEET_BREAK_SUBTITLE: "Listen to Lofi Beats with Wumpus.", SAFETY_TOOLS_ACTION_SHEET_BREAK_BUTTON: "Vibe", SAFETY_TOOLS_ACTION_SHEET_SAFETY_TIPS_TITLE: "Safety tips", SAFETY_TOOLS_ACTION_SHEET_ABOUT_TITLE: "About safety alerts", SAFETY_TOOLS_ACTION_SHEET_ABOUT_DESCRIPTION: "We take teen safety seriously at Discord. When we detect a possible safety risk in a conversation, we'll let you know. [Learn more about safety alerts.]({learnMoreLink})", SAFETY_TOOLS_ACTION_SHEET_ABOUT_GO_TO_SETTINGS: "Go to settings", SAFETY_TOOLS_ACTION_SHEET_ABOUT_DISMISS: "Dismiss", SAFETY_TOOLS_REPORT_FALSE_POSITIVE: "Did we make a mistake? $[Let us know](reportFalsePositiveHook)", SAFETY_TOOLS_REPORT_FALSE_POSITIVE_SUCCESS: "Thanks for your feedback!", STRANGER_DANGER_BANNER_HEADER: "Unwanted message?", STRANGER_DANGER_BANNER_DESCRIPTION: "If you don't want to chat with this person, you can block or mute them.", STRANGER_DANGER_BANNER_MORE_TIPS: "More tips", STRANGER_DANGER_BANNER_BLOCK: "Block", STRANGER_DANGER_BANNER_CLOSE_A11Y: "Close", STRANGER_DANGER_BLOCK_CONFIRM: "User Blocked", STRANGER_DANGER_MUTE_CONFIRM: "User Muted", STRANGER_DANGER_UNMUTE_CONFIRM: "User Unmuted", STRANGER_DANGER_TIPS_HEADER: "Safety Tips", STRANGER_DANGER_TIPS_DESCRIPTION: "Remember, you're always in control", STRANGER_DANGER_TIPS_1: "Trust your gut. If something feels off, you can always take a break.", STRANGER_DANGER_TIPS_2: "Be careful with private details like your full name, school, or how to find you off Discord.", STRANGER_DANGER_TIPS_3: "You're not alone. If you need help, talk to a trusted adult. You can also report messages to us anytime.", STRANGER_DANGER_MORE_HEADER: "More you can do", STRANGER_DANGER_MORE_MUTE: "Mute", STRANGER_DANGER_MORE_UNMUTE: "Unmute", STRANGER_DANGER_MORE_MUTE_DESCRIPTION: "Turn off notifications for this chat.", STRANGER_DANGER_MORE_BLOCK: "Block", STRANGER_DANGER_MORE_BLOCK_DESCRIPTION: "Remove their ability to message, mention, or add you as a friend.", STRANGER_DANGER_WAS_THIS_HELPFUL: "Was this helpful?", STRANGER_DANGER_THUMBS_UP_A11Y: "Vote yes (thumbs up)", STRANGER_DANGER_THUMBS_DOWN_A11Y: "Vote no (thumbs down)", STRANGER_DANGER_FEEDBACK_CONFIRM: "Thanks for your feedback!", INAPPROPRIATE_CONVERSATION_TAKEOVER_HEADER: "This conversation may not be safe", INAPPROPRIATE_CONVERSATION_TAKEOVER_DESCRIPTION: "It looks like {username} is saying things that could put your safety at risk. Take action to protect yourself.", INAPPROPRIATE_CONVERSATION_TAKE_ACTION: "Take action", INAPPROPRIATE_CONVERSATION_READ_SAFETY_TIPS: "Read safety tips", INAPPROPRIATE_CONVERSATION_TAKE_ACTION_HEADER: "Take action", INAPPROPRIATE_CONVERSATION_TAKE_ACTION_DESCRIPTION: "We got you. Here's what you can do.", INAPPROPRIATE_CONVERSATION_SAFETY_TIPS_HEADER: "Safety tips", INAPPROPRIATE_CONVERSATION_TIPS_DESCRIPTION: "Remember, you're always in control", INAPPROPRIATE_CONVERSATION_TIPS_1: "Trust your gut. If something feels off, you can always take a break.", INAPPROPRIATE_CONVERSATION_TIPS_2: "Be careful with private details like your full name, school, or how to find you off Discord.", INAPPROPRIATE_CONVERSATION_TIPS_3: "You're not alone. If you need help, talk to a trusted adult. You can also report messages to us anytime.", INAPPROPRIATE_CONVERSATION_WUMPUS_EXCLAMATION_ALT: "Wumpus looking worried at a computer screen with an exclamation warning symbol above.", INAPPROPRIATE_CONVERSATION_WUMPUS_LIGHTBULB_ALT: "Wumpus looking delighted at a computer screen with a light bulb above.", INAPPROPRIATE_CONVERSATION_SAFETY_TIPS_ALT: "An open book with a warning icon and color blocks.", INAPPROPRIATE_CONVERSATION_BANNER_HEADER: "It looks like this conversation may not be safe", INAPPROPRIATE_CONVERSATION_BANNER_DESCRIPTION: "Take action to protect yourself.", INAPPROPRIATE_CONVERSATION_BANNER_OPEN_SAFETY_TOOLS_BUTTON: "Open safety tools", INAPPROPRIATE_CONVERSATION_BANNER_BLOCK_BUTTON: "Block", INAPPROPRIATE_CONVERSATION_VIBING_WUMPUS_HEADER: "Chats can be a lot", INAPPROPRIATE_CONVERSATION_VIBING_WUMPUS_DESCRIPTION: "Relax with Wumpus for as long as you need.", INAPPROPRIATE_CONVERSATION_VIBING_WUMPUS_RETURN: "Back to conversation", INAPPROPRIATE_CONVERSATION_VIBING_WUMPUS_ALT: "Wumpus vibing to music.", INAPPROPRIATE_CONVERSATION_ACTION_REPORT: "Report them", INAPPROPRIATE_CONVERSATION_ACTION_REPORTED: "Reported", INAPPROPRIATE_CONVERSATION_ACTION_CONTACT_CTL: "Contact Crisis Text Line", INAPPROPRIATE_CONVERSATION_SAFETY_TOOLTIP: "This conversation may not be safe.", INAPPROPRIATE_CONVERSATION_INITIAL_TOOLTIP: "Take action to protect yourself.", INAPPROPRIATE_CONVERSATION_INITIAL_TOOLTIP_ANNOUNCEMENT: "Take action to protect yourself by opening safety tools.", INAPPROPRIATE_CONVERSATION_SAFETY_TOOLTIP_ANNOUNCEMENT: "This conversation may not be safe. Open safety tools to take action.", INAPPROPRIATE_CONVERSATION_BLOCK_THEM: "Block them", INAPPROPRIATE_CONVERSATION_UNBLOCK: "Unblock", INAPPROPRIATE_CONVERSATION_BLOCK_TOAST: "Account blocked", INAPPROPRIATE_CONVERSATION_UNBLOCK_TOAST: "Account unblocked", INAPPROPRIATE_CONVERSATION_REPORT_TOAST: "Account reported", INAPPROPRIATE_CONVERSATION_ERROR_GENERIC_TOAST: "Something went wrong! Please try again later.", INAPPROPRIATE_CONVERSATION_BLOCK_MODAL_DESCRIPTION: "They won't be able to message you. If you feel their actions could harm someone, please submit a report to Discord.", INAPPROPRIATE_CONVERSATION_BLOCK_MODAL_BLOCK_BUTTON: "Block", INAPPROPRIATE_CONVERSATION_BLOCK_MODAL_BLOCK_AND_REPORT_BUTTON: "Block and report", INAPPROPRIATE_CONVERSATION_BLOCK_MODAL_CANCEL_BUTTON: "Cancel", SAFETY_ALERTS_SETTINGS_HEADER: "Safety Alerts", SAFETY_ALERTS_SETTING_TITLE: "Show alerts in direct messages", SAFETY_ALERTS_SETTING_DESCRIPTION: "Display an alert when a possible risk to your safety is detected. [Learn more about safety alerts]({learnMoreLink})", URF_LANDING_PAGE_TITLE: "Report Illegal Content", URF_LANDING_PAGE_SUBTITLE: "Use these forms to report illegal content under the Digital Services Act (DSA). For reports of copyright or trademark infringement please [go here]({supportURL}).", URF_LANDING_PAGE_REPORT_USER_PROFILE_BUTTON: "Report a User Profile", URF_LANDING_PAGE_REPORT_MESSAGE_BUTTON: "Report a Message", EMAIL_ENTER_MODAL_INPUT_ERROR: "Not a well formed email address.", IN_APP_REPORTING_FREE_TEXT_INPUT_ERROR: "Invalid Input", IN_APP_REPORTING_SUBMIT_VALIDATION_ERROR: "We couldn't locate the content you are trying to report. Please review the details of your submission and re-submit.", LEGACY_CHAT_INPUT_SLASH_COMMAND_MISSING_HELP_MESSAGE: "Why don't I see application commands?", LEGACY_CHAT_INPUT_SLASH_COMMAND_EXPLANATION_MODAL_TITLE: "Upgrade your chat", LEGACY_CHAT_INPUT_SLASH_COMMAND_EXPLANATION_MODAL_MESSAGE: "Get access to slash commands and other great ways to chat by enabling our latest features.\n\nYou can always go back to legacy chat at any time by heading over to $[User Settings > Accessibility](openSettingsHook).", LEGACY_CHAT_INPUT_SLASH_COMMAND_EXPLANATION_MODAL_BUTTON_CTA: "Enable now", LARGE_FILE_UPLOAD_POWERED_BY_NITRO: "Large file upload, powered by Nitro • [Learn More](onClick)", CHANNEL_LIST_V2_NUX_TITLE: "Find more channels here!", CHANNEL_LIST_V2_NUX_BODY: "Use **Browse Channels** inside Server Menu to add more channels.", ASSISTANT_SKIP_BUTTON: "Skip Tutorial", ASSISTANT_SPLASH_TITLE: "Welcome, $[username](usernameHook)", ASSISTANT_SPLASH_DESCRIPTION: "Say hi to Wumpus. He'll show you how Discord helps friends hang out more often.", ASSISTANT_SPLASH_BUTTON: "Get Started", ASSISTANT_SPLASH_BODY: "Say hi to Wumpus, he's here to show you how Discord works!", ASSISTANT_VOICE_STEP_BODY: '**Tap "Join"** to show your friends you\'re available to hang.', ASSISTANT_VOICE_JOINED_STEP_BODY: "**Nice!** Now your friends can see you're around and stop by!", ASSISTANT_TEXT_STEP_BODY: "**Text in the main chat** while you chill in !!{voiceChannelName}!!.", ASSISTANT_TEXT_STEP_BODY_NO_VC: "Text in the main chat.", ASSISTANT_CHAT_BANNER_TEXT: "Say hi so your friends know you're here.", ASSISTANT_CHAT_BANNER_BUTTON_TEXT: "Wave", ASSISTANT_CHAT_BANNER_CLOSE_A11Y_LABEL: "Close", ASSISTANT_VOICE_PANEL_PIP_OVERLAY_TITLE: "While you're chilling, friends will pop in like this. Tap to see more.", ASSISTANT_VOICE_PANEL_ACTIVITY_TITLE: "Share your screen, listen to music, or just chill quietly doing your own thing!", SCREENSHARE_APPS_TIKTOK: "TikTok", SCREENSHARE_APPS_TIKTOK_ACCESSIBILITY_LABEL: "Screenshare TikTok", SCREENSHARE_APPS_YOUTUBE: "YouTube", SCREENSHARE_APPS_YOUTUBE_ACCESSIBILITY_LABEL: "Screenshare YouTube", SCREENSHARE_APPS_INSTAGRAM: "Instagram", SCREENSHARE_APPS_INSTAGRAM_ACCESSIBILITY_LABEL: "Screenshare Instagram", SCREENSHARE_APPS_PHOTOS: "Photos", SCREENSHARE_APPS_PHOTOS_ACCESSIBILITY_LABEL: "Screenshare Photos", SCREENSHARE_APPS_SNAPCHAT: "Snapchat", SCREENSHARE_APPS_SNAPCHAT_ACCESSIBILITY_LABEL: "Screenshare Snapchat", STATUS_POPOUT_CUSTOM_TITLE: "Custom", STATUS_POPOUT_SET_CUSTOM: "Set Custom Activity", STATUS_POPOUT_EDIT_CUSTOM: "Edit Custom Activity", STATUS_POPOUT_CLEAR_STATUS: "Clear Status", SET_STATUS_MODAL_TITLE: "Set Custom Voice Activity", SET_STATUS_MODAL_SUBTITLE: "We'll save your most recent creations and auto-delete them after a while.", SET_STATUS_MODAL_CTA: "Confirm", STATUS_LEAD_IN_JUST: "Right now, I'm -", STATUS_CHILLING: "Chilling", STATUS_GAMING: "GAMING", STATUS_FOCUSING: "In the zone", STATUS_BRB: "Gonna BRB", STATUS_EATING: "Grubbin", STATUS_IN_TRANSIT: "Wandering IRL", STATUS_WATCHING: "Watchin' stuff", STATUS_NONE: "No status", HANG_STATUS: "Hang Status", HANG_STATUS_LOCATION: "in !!{guildName}!!", CUSTOM_HANG_STATUS: "Custom Status", CUSTOM_HANG_STATUS_CTA: "Jump in here!", CUSTOM_HANG_STATUS_PLACEHOLDER: "What are you doing?", CUSTOM_HANGS_STATUS_COPY_CTA: "Swipe status", HANG_STATUS_VC_ROW_ADD: "Add a status", HANG_STATUS_HELP: "Show your friends what you're up to by setting an activity status.", HANG_STATUS_SET_CUSTOM_STATUS_PLACEHOLDER: "Set a custom status", HANG_STATUS_MOBILE_SET_ROW: "Set Voice Activity", LAUNCH_PAD: "LaunchPad", LAUNCH_PAD_HISTORY: "Recent Channels", LAUNCH_PAD_STUFF_TO_CATCH_UP_ON: "Stuff To Catch Up On", LAUNCH_PAD_RECENT_SERVERS: "Recent Servers", LAUNCH_PAD_TAB_A11Y_LABEL: "Open LaunchPad", REPORT_SECOND_LOOK_SUCCESS_TITLE: "We have received your request.", REPORT_SECOND_LOOK_FAILURE_TITLE: "You have already submitted a review request for this report.", REPORT_SECOND_LOOK_NOT_FOUND_ERROR: "Report not found.", REPORT_SECOND_LOOK_ALREADY_REQUESTED_ERROR: "Report Review already requested.", REPORT_SECOND_LOOK_LIMITED_TIME_ERROR: "Report Review is only available for a limited time.", REPORT_SECOND_LOOK_INELIGIBLE_ERROR: "Report is ineligible for Review request.", REPORT_SECOND_LOOK_UNKNOWN_ERROR: "Something went wrong. Try again.", APPEAL_INGESTION_AGE_VERIFICATION_LINK_TITLE: "Submit age verification", APPEAL_INGESTION_LEARN_MORE_LINK_TITLE: "Learn more about this policy", APPEAL_INGESTION_BREADCRUMBS_HEADER: "REASON", APPEAL_INGESTION_MODAL_CONFIRM_SUBMISSION_ADD_DETAILS: "Add details", APPEAL_INGESTION_MODAL_CONFIRM_SUBMISSION_EDIT_DETAILS: "Edit details", APPEAL_INGESTION_MODAL_CONFIRM_SUBMISSION_ERROR: "Error requesting review", APPEAL_INGESTION_MODAL_CONFIRM_SUBMISSION_DEFLECTION_ERROR: "Review request is not eligible for this violation currently", APPEAL_INGESTION_MODAL_CONFIRM_SUBMISSION_FOOTER: "Your request will be sent to our team. Violations will stay on your account until they expire or are removed after review.", APPEAL_INGESTION_MODAL_CONFIRM_SUBMISSION_SUBHEADER: "Here's a summary of your request.", APPEAL_INGESTION_FREE_TEXT_REASON_ACTION_SHEET_SUBHEADER: "You can add context or anything else that might be helpful for us to know.", APPEAL_INGESTION_FREE_TEXT_REASON_ACTION_SHEET_PLACEHOLDER: "What would you like us to know?", APPEAL_INGESTION_FREE_TEXT_REASON_ACTION_SHEET_FOOTER: "Your note will be shared with Discord. Please be advised that abusive language may count as another violation.", APPEAL_INGESTION_MODAL_HEADER: "Request a review", APPEAL_INGESTION_MODAL_REQUEST_SENT_HEADER: "Request sent", APPEAL_INGESTION_MODAL_REQUEST_SENT_SUBHEADER: "Thank you for your submission. We will let you know the outcome of this review.", APPEAL_INGESTION_MODAL_REQUEST_SENT_ACTIONS_HEADER: "More you can do", APPEAL_INGESTION_MODAL_REQUEST_SENT_GUIDELINES_LINK: "View our Community Guidelines", APPEAL_INGESTION_MODAL_REQUEST_SENT_RULES_LINK: "Learn about how we enforce rules", APPEAL_INGESTION_MODAL_THANKS_HEADER: "Thanks for letting us know.", APPEAL_INGESTION_MODAL_SPAM_HEADER: "This request is for spam.", APPEAL_INGESTION_MODAL_SPAM_LINK: "Contact Discord Support", APPEAL_INGESTION_MODAL_SPEED_BUMP_SUBHEADER: "Did we make a mistake? Let us know.", APPEAL_INGESTION_MODAL_SPEED_BUMP_ACTIVITY_HEADER: "YOUR ACTIVITY", APPEAL_INGESTION_MODAL_SPEED_BUMP_ACTIVITY_SUBHEADER: "We determined this content violates our policy", APPEAL_INGESTION_MODAL_SPEED_BUMP_POLICY_HEADER: "OUR POLICY", APPEAL_INGESTION_MODAL_COLLECT_SIGNAL_SUBHEADER: "Please select a reason for your request.", APPEAL_INGESTION_MODAL_COLLECT_SIGNAL_DIDNT_VIOLATE_POLICY: "I didn't violate the policy", APPEAL_INGESTION_MODAL_COLLECT_SIGNAL_TOO_STRICT_UNFAIR: "The policy is too strict or unfair", APPEAL_INGESTION_MODAL_COLLECT_SIGNAL_DONT_AGREE_PENALTY: "I don't agree with the penalty", APPEAL_INGESTION_MODAL_COLLECT_SIGNAL_SOMETHING_ELSE: "Something else", APPEAL_INGESTION_MODAL_COLLECT_SIGNAL_DISCLAIMER: "This request is sent to Discord. Creating false reports and/or spamming the report button may result in suspension of reporting abilities. Learn more from the [Discord Community Guidelines](https://discord.com/guidelines).", APPEAL_INGESTION_MODAL_SPEED_BUMP_LEARN_MORE_OTHER_OPTIONS_DSA: "Learn more about your other options under the [Digital Services Act](https://support.discord.com/hc/articles/17861767909527).", APPEAL_INGESTION_MODAL_SPEED_BUMP_SUBMIT_SPAM: "Submit a spam appeal", POLL: "Poll", POLLS: "Polls", POLL_NOTIFICATIONS: "Polls", POLL_CHOOSE_SINGLE_ANSWER_PROMPT: "Choose an Answer", POLL_SUBMIT_VOTE: "Vote", POLL_VOTES_COUNT: "{count, plural, one {{count} vote} other {{count} votes}}", POLL_VOTES_COUNT_CAPTIAL: "{count, plural, one {{count} Vote} other {{count} Votes}}", POLL_ALREADY_VOTED: "Voted", POLL_EDIT_VOTE: "Change Vote", POLL_REMOVE_VOTE: "Remove Vote", POLL_ANSWER_VOTED_ARIA: "You voted for this answer", POLL_OPTIONS_ARIA: "Poll options", POLL_EXPIRY_DAYS_REMAINING: "{days, plural, one {{days}d} other {{days}d}} left", POLL_EXPIRY_HOURS_REMAINING: "{hours, plural, one {{hours}h} other {{hours}h}} left", POLL_EXPIRY_MINUTES_REMAINING: "{minutes, plural, one {{minutes}m} other {{minutes}m}} left", POLL_EXPIRED: "Poll closed", POLL_SELECT_ONE_ANSWER: "Select one answer", POLL_SELECT_MULTIPLE_ANSWERS: "Select one or more answers", POLL_SHOW_VOTES: "Show results", POLL_HIDE_VOTES: "Go back to vote", POLL_VOTES_NO_RESULTS_TITLE: "Nothing to see here", POLL_VOTES_NO_RESULTS_SUBTITLE: "There are no votes for this answer", POLL_COACHMARK_TITLE: "NEW! Polls are here.", POLL_COACHMARK_SUBTITLE: "Plan events, gather opinions, or drop a silly question in the chat.", POLL_COACHMARK_CTA: "Start a poll now!", POLL_COACHMARK_DISMISS: "Maybe later.", POLL_LURKING_VOTE_TITLE: "You can't vote on this poll yet!", POLL_LURKING_VOTE_SUBTITLE: "You have to join the community before you can use polls.", POLL_LURKING_SEE_VOTES_TITLE: "You can't see votes on this poll yet!", POLL_LURKING_UNVOTE_TITLE: "You can't remove your vote unless you're a member.", POLL_LURKING_UNVOTE_SUBTITLE: "You have to re-join the community before you can use polls again.", POLL_GUILD_MEMBER_UNVERIFIED_TITLE: "You can't vote on this poll yet!", POLL_GUILD_MEMBER_UNVERIFIED_SUBTITLE: "You must complete the verification steps required by this server.", POLL_NOT_INTERACTIVE: "View original message to interact", POLL_NO_VOTES_FOR_ANSWER_TITLE: "Nothing to see here", POLL_NO_VOTES_FOR_ANSWER_BODY: "There are no votes for this answer.", POLL_ANSWER_VOTES_MODAL_TITLE: "Votes", POLL_ANSWER_VOTES_MODAL_TAB_GROUP_LABEL: "Poll answers", POLL_ANSWER_VOTES_MODAL_VOTE_TAB: "{numVotes, plural, =0 {0 votes} =1 {{numVotes} vote} other {{numVotes} votes}} for {option}", POLL_TAP_FOR_VOTERS_A11Y_ANDROID: "Reveal voters", POLL_TAP_FOR_VOTERS_A11Y_IOS: "Reveals voters", POLL_VOTES_TOOLTIP_1_N: "!!{a}!! and {n, plural, one {1 other} other {{n} others}}", POLL_VOTES_TOOLTIP_2: "!!{a}!! and !!{b}!!", POLL_VOTES_TOOLTIP_2_N: "!!{a}!!, !!{b}!!, and {n, plural, one {1 other} other {{n} others}}", POLL_VOTES_TOOLTIP_3: "!!{a}!!, !!{b}!!, and !!{c}!!", POLL_VOTES_TOOLTIP_3_N: "!!{a}!!, !!{b}!!, !!{c}!!, and {n, plural, one {1 other} other {{n} others}}", POLL_VOTES_TOOLTIP_N: "{n, plural, one {1 person} other {{n} people}}", CREATE_POLL: "Create Poll", CREATE_POLL_HEADING: "Create a Poll", CREATE_POLL_EXPIRATION: "Poll will be live for 24 hours", CREATE_POLL_QUESTION_INPUT_LABEL: "Question", CREATE_POLL_QUESTION_PLACEHOLDER: "What question do you want to ask?", CREATE_POLL_LAYOUTS_RADIOGROUP_ARIA_LABEL: "Poll answer style", CREATE_POLL_LAYOUT_DEFAULT: "Text answers with optional media", CREATE_POLL_LAYOUT_IMAGE: "Media only answers", CREATE_POLL_ANSWERS_FIELDSET_LABEL: "Answers", CREATE_POLL_ADD_IMAGE_ARIA: "Add media, answer {answerNumber}", CREATE_POLL_EDIT_IMAGE_ARIA: "Update media, {imageName}, answer {answerNumber}", CREATE_POLL_ADD_EMOJI_ARIA: "Add emoji, answer {answerNumber}", CREATE_POLL_EDIT_EMOJI_ARIA: "Update emoji, {emojiName}, answer {answerNumber}", CREATE_POLL_UPDATE_EMOJI_MENU_ARIA: "Update emoji", CREATE_POLL_ANSWER_INPUT_LABEL: "Answer {answerNumber}", CREATE_POLL_ANSWER_PLACEHOLDER: "Type your answer", CREATE_POLL_ADD_ANSWER_BUTTON: "Add another answer", CREATE_POLL_TEXT_PRECEDING_DURATION_SELECTION: "Poll will be live for", CREATE_POLL_DURATION_LABEL: "Duration", CREATE_POLL_DURATION_OPTION_LABEL_N_HOURS: "{num, plural, one {{num} hour} other {{num} hours}}", CREATE_POLL_DURATION_OPTION_LABEL_3_DAYS: "3 days", CREATE_POLL_DURATION_OPTION_LABEL_7_DAYS: "1 week", CREATE_POLL_DURATION_SELECTION_ARIA_LABEL: "Poll will be live for {duration}", CREATE_POLL_POLL_DURATION_HEADING: "Poll Duration", CREATE_POLL_DURATION_BUTTON_A11Y_HINT: "Tap to change poll duration", CREATE_POLL_MULTIPLE_ANSWERS: "Allow Multiple Answers", CREATE_POLL_POST: "Post", CREATE_POLL_REMOVE_ANSWER_A11Y: "Remove answer {answerNumber}", CREATE_POLL_MODAL_WARNING_MODAL_TITLE: "Are you sure?", CREATE_POLL_MODAL_WARNING_UNSAVED_CHANGES_BODY: "Are you sure you want to exit? Any changes made will be lost if you exit now.", CREATE_POLL_MODAL_WARNING_UNSAVED_CHANGES_CTA_EXIT: "Exit", CREATE_POLL_MODAL_WARNING_UNSAVED_CHANGES_BACK_TO_EDITING: "Back to editing", CREATE_POLL_REMOVE_ANSWER: "Remove Answer", CREATE_POLL_REMOVE_EMOJI: "Remove Emoji", CREATE_POLL_ADD_IMAGE: "Add Media", CREATE_POLL_ADD_EMOJI: "Add Emoji", CREATE_POLL_REPLACE_IMAGE: "Replace Media", CREATE_POLL_REPLACE_EMOJI: "Replace Emoji", CREATE_POLL_POLL_ANSWER: "Poll Answer", CREATE_POLL_EDIT_ALT_TEXT: "Edit Image Description (Alt Text)", CREATE_POLL_EDIT_IMAGE_DESCRIPTION: "Edit Image Description", CREATE_POLL_ADD_ALT_ARIA_LABEL: "Add alt text, answer {answerNumber}", CREATE_POLL_EDIT_ALT_ARIA_LABEL: "Edit alt text, answer {answerNumber}", CREATE_POLL_ALT_TEXT_LABEL: "Image Description (Alt Text)", CREATE_POLL_ALT_TEXT_SCREEN_READER_HINT: "Alt text:", POLL_EXPRESSION_PICKER_BUTTON_ARIA: "Select media", CREATE_POLL_QUESTION_REQUIRED: "Oops, you forgot something. Please add a question.", CREATE_POLL_MINIMUM_ANSWERS_REQUIRED: "Oops, you forgot something. Please add at least one answer.", CREATE_POLL_ANSWER_MUST_CONTAIN_TEXT: "Don’t leave the answer field hanging! Please add some text.", POLL_END_EARLY: "End Poll Now", POLL_END_EARLY_CONFIRMATION_TITLE: "End Poll Now?", POLL_END_EARLY_CONFIRMATION_TEXT: "This will close the poll immediately and reveal the results.", POLL_SENT_NOTIFICATION: "[poll] !!{question}!!", POLL_RESULTS_NOTIFICATION: "The poll !!{question}!! has closed", POLL_RESULT_MESSAGE_HEADER: "The poll [!!{title}!!](titleOnClick) has closed.", POLL_RESULT_REPLY_TEXT: "The poll **{title}** has closed", POLL_RESULT_NO_VOTERS: "There was no winner", POLL_RESULT_TIED: "The results were tied", POLL_RESULT_WINNING: "Winning answer", POLL_RESULT_VIEW_POLL: "View Poll", SUMMONED: "Summoned!", WAVED_AT_USER: "\uD83D\uDC4B You waved at !!{username}!!", WAVED_AT_YOU: "\uD83D\uDC4B !!{username}!! waved at you", YOU_ARE_IN_CHANNEL: "You are in $[](channelHook)", THEY_ARE_IN_CHANNEL: "They're hanging out in $[](channelHook)", YOU_ARE_IN_CHANNEL_NAME: "You are in #!!{channelName}!!", THEY_ARE_IN_CHANNEL_NAME: "They're hanging out in #!!{channelName}!!", HANGOUT_OVER_SENDER: "The hangout is over, want to start it again?", HANGOUT_OVER_RECEIVER: "You missed the hangout :(", WAVE_AGAIN: "Wave again", WAVE_BACK: "Wave back", JOIN_HANGOUT: "Join Hangout", CANNOT_ACCESS_HANGOUT: "You cannot access this hangout", GEO_RESTRICTED_MODAL_TITLE: "Server Unavailable", GEO_RESTRICTED_MODAL_BODY: "**{serverName}** is not available in your region.", QUESTS: "Quests", QUEST: "{questName} Quest", QUESTS_SEE_CODE: "See Code", QUESTS_CLAIM_REWARD: "Claim Reward", QUESTS_ACCEPT: "Accept Quest", QUESTS_COMPLETE_TOOLTIP: "Hit claim to get your reward code!", QUESTS_ACCEPT_TOOLTIP: "Accept the Quest and complete the task to unlock the reward", QUESTS_IN_PROGRESS_TOOLTIP: "Complete the task to unlock the reward", QUESTS_STREAM_TASK: "Stream {gameTitle} to a friend for {minutes} minutes", QUESTS_PLAY_TASK: "Play {gameTitle} for {minutes} minutes", QUESTS_UNLOCK_REWARDS: "Unlock Rewards", QUESTS_CHECK_PROGRESS: "Check Progress", QUESTS_JOIN_ME: "Join Me", QUESTS_FOR_YOU: "QUESTS FOR YOU", QUESTS_OTHER: "OTHER QUESTS", QUESTS_ALL: "All Quests", QUESTS_COMPLETED: "Completed Quests", QUESTS_CLAIMED: "Claimed Quests", QUESTS_PROMOTED_BY_GUILD: "Promoted by $[{guildName}]({guildHook})", QUESTS_PROMOTED_BY_BRAND: "Promoted by **{brandName}**", QUESTS_REWARD_VERIFICATION_TITLE: "Verify your account to claim rewards!", QUESTS_REWARD_VERIFICATION_BODY: "We have sent a verification email to: [{emailAddress}]({emailAddressLink})", QUESTS_REWARD_VERIFICATION_ERROR: "Uh oh! We failed to send you a verification email.", QUEST_REWARD: "Win {reward}", QUEST_REWARD_TIERED: "The first {maxRewardCount} will win {maxReward}. Learn more about Quests in the [help center article]({helpCenterLink}).", QUEST_REWARD_COMPLETED: "You unlocked {reward} on {date}", QUEST_REWARD_COMPLETED_UNCLAIMED: "Completed on {date}", QUEST_REWARD_COMPLETED_CLAIMED: "You unlocked {reward} on {date}", QUEST_REWARD_CODE_HIDDEN: "Reward code hidden. Use copy button.", QUESTS_REWARD_CODE_HEADER: "Your Reward Code", QUESTS_REWARD_CODE_CONGRATS: "Congrats!", QUESTS_REWARD_CODE_PLATFORM_SELECTION_HEADER: "What is your preferred platform?", QUESTS_REWARD_CODE_ERROR: "Uh oh! Something went wrong, please try again later", QUESTS_REWARD_CODE_SELECT_PLATFORM_LABEL: "Choose a Platform", QUESTS_REWARD_CODE_SELECT_PLATFORM_PLACEHOLDER: "Select Platform", QUESTS_REWARD_CODE_SELECT_PLATFORM_INSTRUCTIONS: "We will generate a platform-specific code for your {rewardName}. **You will not be able to change your selection after hitting Get Code.**", QUESTS_REWARD_CODE_SELECT_PLATFORM_INSTRUCTIONS_TIERED: "We will generate a platform-specific code for your reward. **You will not be able to change your selection after hitting Get Code.**", QUESTS_REWARD_CODE_DONE: "Done", QUESTS_REWARD_CODE_GET_CODE: "Get Code", QUESTS_REWARD_CODE_TRY_AGAIN: "Try Again", QUESTS_REWARD_CODE_UNCLAIMED_REWARD_TILE_SUBHEADER: "Claim This", QUESTS_REWARD_CODE_CLAIMED_REWARD_TILE_SUBHEADER: "You Claimed This", QUESTS_REWARD_CODE_PLATFORM_CROSS_PLATFORM: "Cross-platform", QUESTS_REWARD_CODE_PLATFORM_PC: "PC", QUESTS_REWARD_CODE_PLATFORM_PLAYSTATION: "PlayStation", QUESTS_REWARD_CODE_PLATFORM_SWITCH: "Switch", QUESTS_REWARD_CODE_PLATFORM_XBOX: "Xbox", QUESTS_REWARD_TILE_EXPIRED_QUEST: "This reward is no longer available.", QUESTS_SPONSORED: "Sponsored", QUESTS_PROMOTED: "Promoted", QUESTS_LEARN_MORE_V2: "Learn More", QUESTS_LEARN_MORE_STACKED: "Learn\n\nMore", QUESTS_LEARN_MORE_LINK: "[Learn More]({questsLearnMoreLink})", QUESTS_ACCEPT_QUEST: "Accept Quest", QUESTS_INSTRUCTIONS_TO_WIN_REWARD: "Stream {gameTitle} to a friend for {streamingDurationRequirement, number} minutes and win {questReward}.", QUESTS_PLAY_INSTRUCTIONS_TO_WIN_REWARD: "Play {gameTitle} for {streamingDurationRequirement, number} minutes with your Discord client open and win {questReward}.", QUESTS_INSTRUCTIONS_TO_WIN_REWARD_V2: "Stream {gameTitle} to a friend for {streamingDurationRequirement, number} minutes and win **{questReward}**.", QUESTS_INSTRUCTIONS_TO_WIN_REWARD_TIERED: "Stream {gameTitle} to a friend for {streamingDurationRequirement, number} minutes and win in-game rewards.", QUESTS_INSTRUCTIONS_TO_WIN_REWARD_TIERED_V2: "Stream {gameTitle} to a friend for {streamingDurationRequirement, number} minutes and win **in-game rewards**.", QUESTS_ACCEPTED_INSTRUCTIONS_TO_WIN_REWARD: "**Quest accepted!** Stream {gameTitle} to a friend for {streamingDurationRequirement, number} minutes and win {questReward}.", QUESTS_ACCEPTED_INSTRUCTIONS_TO_WIN_REWARD_TIERED: "**Quest accepted!** Stream {gameTitle} to a friend for {streamingDurationRequirement, number} minutes and win in-game rewards.", QUESTS_TITLE: "{questName} Quest", QUESTS_LANDING_PAGE_ERROR_HEADING: "Whoops!", QUESTS_LANDING_PAGE_MOBILE_WEB_BODY: "Quests aren’t available on mobile...yet. Sorry about that! From your desktop Discord app or browser you can go to **User Settings > Gift Inventory** and accept the Quest there.", QUESTS_MOBILE_EMBED_TITLE: "Quests aren’t available on mobile", QUESTS_MOBILE_EMBED_BODY: "From your desktop Discord app or browser you can go to \nUser Settings > Gift Inventory and accept the Quest there.", QUESTS_GET_THIS_GAME: "Get Game", QUESTS_PLAY_GAME: "Play Game", QUESTS_DISCLOSURE_LABEL: "Why am I seeing this?", QUESTS_HIDE_THIS: "Hide This", QUESTS_FIND_QUEST: "You can find this again in User Settings > Gift Inventory", QUESTS_CLAIM_BY_DATE: "Claim by {expirationDate}", QUESTS_AVAILABLE_UNTIL_DATE: "Available until {expirationDate}", QUESTS_EXPIRES: "Expires {expirationDate}", QUESTS_EXPIRED_ON: "Expired on {expirationDate}.", QUESTS_EXPIRED_ON_DATE: "Expired on {expirationDate}", QUESTS_EXPIRED_QUEST_CARD_HEADING: "{questName} Quest is expired.", QUESTS_EXPIRED_QUEST_CARD_SUBHEADING: "You missed the chance to win {reward}.", QUESTS_PROGRESS_WEB_TIP: "Use the desktop app to make progress!", QUESTS_COMPLETION_PROGRESS_NOT_STARTED: "Ready when you are...", QUESTS_COMPLETION_PROGRESS_STARTED: "Keep it up!", QUESTS_COMPLETION_PROGRESS_HALFWAY: "You're halfway there!", QUESTS_COMPLETION_PROGRESS_ALMOST_COMPLETE: "You're so close!", QUESTS_COMPLETION_PROGRESS_COMPLETE: "You did it!", QUESTS_COMPLETION_PROGRESS_COMPLETE_ACTIVITY_PANEL: "You completed a Quest!", QUESTS_DISCLOSURE_PUBLISHER_PROMOTING: "{gamePublisher} is promoting {gameTitle} on Discord by partnering with us to offer this Quest. This Quest is available in the gift inventory of all users.", QUESTS_DISCLOSURE_PUBLISHER_TARGETING: "{gamePublisher} is trying to reach certain kinds of Discord users. Based on what you’ve told us or other information we’ve collected, the following information was used to tell you about this Quest:", QUESTS_DISCLOSURE_LEARN_MORE: "Learn more about how to manage your Privacy Settings [here]({privacySettingsUrl}).", QUESTS_DISCLOSURE_LOCATION: "Location", QUESTS_DISCLOSURE_AGE: "Age", QUESTS_DISCLOSURE_ACTIVITY: "Activity: Relevant gaming", QUESTS_EMBED_INVALID_HEADING: "This was a Quest but...", QUESTS_EMBED_INVALID_BODY: "Something went wrong here. Check the Gift Inventory for more available Quests!", QUESTS_EMBED_INVALID_BODY_2: "Something went wrong here. Try refreshing your client, or check the Gift Inventory for available Quests!", QUESTS_PROGRESS_TRACKING_FAILURE_NOTICE: "There's an issue tracking your Quest progress.", QUESTS_SHARE_QUEST: "Share Quest", QUESTS_STREAM_SOURCE_SELECT_NOTICE_HEADING: "Select {gameTitle} to make progress on your Quest!", QUESTS_STREAM_SOURCE_SELECT_NOTICE_SUBHEADING: "You must select the application, not the whole screen.", QUESTS_MEMBERS_LIST_AVAILBLE: "Quest Available!", QUESTS_MEMBERS_LIST_FINISH: "Finish your Quest!", QUESTS_MEMBERS_LIST_CLAIM_REWARD: "You did it!", QUESTS_MEMBERS_LIST_PROMOTED_BY: "Promoted by {gamePublisher}", QUESTS_MEMBERS_LIST_GAME_TILE_ALT: "A game tile displaying {gameTitle}, published by {gamePublisher}.", QUESTS_REWARD_AVATAR_DECORATION_HEADER: "Congratulations!", QUESTS_REWARD_AVATAR_DECORATION_BODY: "{decorationName} is now yours FOR-EV-ERRRR! You can use it anytime on your profile page.", QUESTS_VIEW_COLLECTIBLE: "View Deco", QUEST_AVAILABLE: "Quest Available", QUESTS_COMPLETION_PROGRESS_NOT_STARTED_SUBTITLE: "No Quest progress yet", QUESTS_COMPLETION_PROGRESS_STARTED_V2: "Quest {percent} complete", QUESTS_COMPLETION_COMPLETE: "Quest Completed!", QUESTS_SHARE_LINK: "Copy Link to Quest", QUESTS_CLAIM_THE_REWARD_HOOK: "Claim the $[reward](rewardHook)", QUESTS_HOME_HERO_EYEBROW: "What are Quests?", QUESTS_HOME_HERO_TITLE: "Play Games. Get Rewards.", QUESTS_HOME_HERO_DESCRIPTION: "Quests are a brand new way for players to discover games and earn rewards for playing them on Discord.", QUEST_ACCEPTED: "Quest Accepted", FORM_HELP_SYSTEM_CHANNEL_DEADCHAT_PROMPT_MESSAGE: "Prompt members to chat after this channel has been inactive for a while.", PROMPT_CAMERA_LOADING_TITLE: "What are you looking at?", PROMPT_CAMERA_ERROR: "There was an issue taking a photo, try again", DEADCHAT_ACTION_CAMERA: "My View", DEADCHAT_ACTION_STICKER: "Surprise Me", LIST_SUMMARY_LABEL_ONE: "!!{first}!!", LIST_SUMMARY_LABEL_TWO: "!!{first}!! and !!{second}!!", LIST_SUMMARY_LABEL_THREE: "!!{first}!!, !!{second}!!, and !!{third}!!", LIST_SUMMARY_LABEL_THREE_AND_OTHERS: "!!{first}!!, !!{second}!!, !!{third}!!, and {count, plural, one {1 other} other {{count} others}}", STOREFRONT: "Store", STOREFRONT_TITLE: "{appName} Store", STOREFRONT_APP_SUBSCRIPTIONS: "Subscriptions", STOREFRONT_APP_SUBSCRIPTIONS_BODY: "Purchase subscriptions from {appName}", STOREFRONT_APP_PRODUCTS: "Items", STOREFRONT_APP_PRODUCTS_BODY: "Purchase items from {appName}", STOREFRONT_SUBSCRIPTION: "Subscription", STOREFRONT_SUBSCRIBE_FOR: "Subscribe for {rate}", STOREFRONT_SUBSCRIPTION_BENEFITS: "Subscription Benefits", STOREFRONT_PURCHASE_FOR: "Buy for {price}", STOREFRONT_ONE_TIME_PURCHASE: "One-Time Purchase", STOREFRONT_DURABLE_AVAILABILITY: "1 / 1 Available", STOREFRONT_DURABLE_AVAILABILITY_NONE: "0 / 1 Available", STOREFRONT_MUST_LOGIN: "Login to browse store", STOREFRONT_VIEW_TOS_PP: "View the app's [Terms of Service]({tosUrl}) and [Privacy Policy]({ppUrl})", STOREFRONT_NO_TOS_PP: "This developer has not setup terms of service and privacy policy.", STOREFRONT_DETAILS_TOS_AND_PRIVACY: "[Terms of Service]({tosUrl}) and [Privacy Policy]({ppUrl})", QUIET_MODE_DISABLED: "Focus Mode Disabled", QUIET_MODE_ENABLED: "Focus Mode Enabled", QUIET_MODE_DND: "Focus Mode (DND) Enabled", QUIET_MODE_WHILE_DND_UPSELL_TITLE: "Switch to Online?", QUIET_MODE_WHILE_DND_UPSELL_BODY: "With Focus Mode, Discord will no longer show in-app, desktop notifications or play message sounds, just like with DND. Would you like to switch to Online?", QUIET_MODE_SETTINGS_LABEL: "Focus Mode (BETA)", QUIET_MODE_SETTINGS_DESCRIPTION: "Discord will not show in-app, desktop notifications or play message sounds.", QUIET_MODE_DISABLED_BY: "This is disabled by Focus Mode", FOCUS_MODE_TITLE: "Focus Mode (BETA)", FOCUS_MODE_BADGE_ON: "ON", FOCUS_MODE_BADGE_OFF: "OFF", FOCUS_MODE_BADGE_ON_VIA_DND: "DND", FOCUS_MODE_DESCRIPTION: "Disables desktop notifications & message sounds.", FOCUS_MODE_DESCRIPTION_MOBILE: "Disables in-app notifications & message sounds.", FOCUS_MODE_TURN_OFF: "Turn off Focus Mode", FOCUS_MODE_ENABLE_FOR: "Enable Focus Mode for", QUIET_MODE_HABITUAL_DND_NOTICE: "You've been on Do Not Disturb for a while. Would you like to enable Focus Mode instead?", ACTIVITY_REACTION_REPLY_TITLE: "Chat about {activity}", ACTIVITY_REACTION_IMAGE_ALT_TEXT_BASE: "An activity card showing @{username} and {activity}", ACTIVITY_REACTION_IMAGE_ALT_TEXT_PLAYING: "An activity card showing @{username} playing {activity}", ACTIVITY_REACTION_IMAGE_ALT_TEXT_WATCHING: "An activity card showing @{username} watching {activity}", ACTIVITY_REACTION_IMAGE_ALT_TEXT_LISTENING: "An activity card showing @{username} listening to {activity}", ACTIVITY_REACTION_IMAGE_ALT_TEXT_SPOTIFY: "An activity card showing @{username} listening to {song} by {artist}", ACTIVITY_REACTION_IMAGE_ALT_TEXT_TOP_ARTIST: "An activity card showing @{username}'s top artist, {artist}", ACTIVITY_REACTION_IMAGE_ALT_TEXT_STREAMING: "An activity card showing @{username} streaming {activity}", MEMBER_LIST_CONTENT_FEED_PLAYING_GAME: "Playing **{gameName}**", MEMBER_LIST_CONTENT_FEED_PLAYED_GAME: "Played **{gameName}**", MEMBER_LIST_CONTENT_FEED_USER_IS_PLAYING_GAME: "{userName} is playing **{gameName}**", MEMBER_LIST_CONTENT_FEED_USER_PLAYED_GAME: "{userName} played **{gameName}**", MEMBER_LIST_CONTENT_FEED_USER_IS_PLAYING_NEW_GAME: "{userName} is playing a new game: **{gameName}**", MEMBER_LIST_CONTENT_FEED_USER_PLAYED_NEW_GAME: "{userName} played a new game: **{gameName}**", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_WEEKS_AGO: "{count}w ago", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_DAYS_AGO: "{count}d ago", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_HOURS_AGO: "{count}h ago", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_MINUTES_AGO: "{count}m ago", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_SECONDS_AGO: "{count}s ago", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_FOR_DAYS: "for {days}d", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_HOURS: "{hours}h", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_FOR_HOURS: "for {hours}h", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_HOURS_THIS_WEEK: "{hours}h this week", MEMBER_LIST_CONTENT_FEED_TIMESTAMP_ACTIVE: "{hours, plural, =-1 {} =0 {} other {{hours}:}}{minutes, plural, =-1 {} =0 {0} other {{minutes}}}:{seconds}", MEMBER_LIST_CONTENT_FEED_FIRST_TIME: "First time", MEMBER_LIST_CONTENT_FEED_NEW_PLAYER: "New Player", MEMBER_LIST_CONTENT_FEED_WATCHED_MEDIA: "Watched **{mediaTitle}**", MEMBER_LIST_CONTENT_FEED_USER_WATCHED_MEDIA: "{userName} watched **{mediaTitle}**: {episodeDescription}", MEMBER_LIST_CONTENT_FEED_TOP_GAME: "Most played", MEMBER_LIST_CONTENT_FEED_TOP_GAME_WEEK_POPOUT: "{userName}'s most played this week: **{gameName}**", MEMBER_LIST_CONTENT_FEED_TOP_ARTIST_WEEK_POPOUT: "{userName}'s top artist this week: **{artist}**", MEMBER_LIST_CONTENT_FEED_TOP_ARTIST_TRACKS_THIS_WEEK: "Top Artist — {count} tracks this week", MEMBER_LIST_CONTENT_FEED_TOP_ARTIST_WEEK: "{userName}'s top artist this week: **{artistName}**", MEMBER_LIST_CONTENT_FEED_WATCH_SEASON_EPISODE: "S{seasonNum}E{episodeNum}", MEMBER_LIST_CONTENT_FEED_RESURRECTED: "Returning", MEMBER_LIST_CONTENT_FEED_RESURRECTED_AFTER: "Returning after {months, plural, =-1 {} =0 {} =1 {1 month} other {{months} months}}{weeks, plural, =-1 {} =0 {} =1 {1 week} other {{weeks} weeks}}{days, plural, =-1 {} =0 {} =1 {1 day} other {{days} days}}", MEMBER_LIST_CONTENT_FEED_MARATHON: "Marathon", MEMBER_LIST_CONTENT_FEED_ULTRA_MARATHON: "Ultra-Marathon", MEMBER_LIST_CONTENT_FEED_EPIC_MARATHON: "Epic-Marathon", MEMBER_LIST_CONTENT_FEED_PLAYED_FOR_HOURS: "Played for {hours}h", MEMBER_LIST_CONTENT_FEED_STREAK_DAYS: "{days}x Streak", MEMBER_LIST_CONTENT_FEED_LISTENING_TO_MEDIA: "Listening to **{media}**", MEMBER_LIST_CONTENT_FEED_LISTENED_TO_MEDIA: "Listened to **{media}**", MEMBER_LIST_CONTENT_FEED_TRACKS_THIS_WEEK: "{count} tracks this week", MEMBER_LIST_CONTENT_FEED_USER_LISTENING_TO_MEDIA_ARTIST: "{userName} is listening to **{media}** by **{artist}**", MEMBER_LIST_CONTENT_FEED_STREAK_TOOLTIP: "Played {days} days in a row", MEMBER_LIST_CONTENT_FEED_TRENDING: "Trending", MEMBER_LIST_CONTENT_POPOUT_USER_PLAYING: "{countOthers, plural, =0 {$[{user1}](nameHook) is} =1 {$[{user1}](nameHook) and $[{user2}](nameHook) are} other {$[{user1}](nameHook) and $[{countOthers}](nameHook) others are}} playing", MEMBER_LIST_CONTENT_POPOUT_USER_PLAYED: "{countOthers, plural, =0 {$[{user1}](nameHook)} =1 {$[{user1}](nameHook) and $[{user2}](nameHook)} other {$[{user1}](nameHook) and $[{countOthers}](nameHook) others}} played", MEMBER_LIST_CONTENT_POPOUT_USER_WATCHING: "{countOthers, plural, =0 {$[{user1}](nameHook) is} =1 {$[{user1}](nameHook) and $[{user2}](nameHook) are} other {$[{user1}](nameHook) and $[{countOthers}](nameHook) others are}} watching", MEMBER_LIST_CONTENT_POPOUT_USER_WATCHED: "{countOthers, plural, =0 {$[{user1}](nameHook)} =1 {$[{user1}](nameHook) and $[{user2}](nameHook)} other {$[{user1}](nameHook) and $[{countOthers}](nameHook) others}} watched", MEMBER_LIST_CONTENT_POPOUT_USER_STREAMING: "$[{countOthers, plural, =0 {{user1} is} =1 {{user1} and {user2} are} other {{user1} and {countOthers} others are}}](nameHook) streaming", MEMBER_LIST_CONTENT_POPOUT_USER_LISTENED: "{countOthers, plural, =0 {$[{user1}](nameHook)} =1 {$[{user1}](nameHook) and $[{user2}](nameHook)} other {$[{user1}](nameHook) and $[{countOthers}](nameHook) others}} listened to", MEMBER_LIST_CONTENT_POPOUT_USER_LISTENING: "{countOthers, plural, =0 {$[{user1}](nameHook) is} =1 {$[{user1}](nameHook) and $[{user2}](nameHook) are} other {$[{user1}](nameHook) and $[{countOthers}](nameHook) others are}} listening to", MEMBER_LIST_CONTENT_POPOUT_BLOCKED_USER_WARNING: "Users you've blocked or muted are in this voice channel", CONTENT_INVENTORY_REACTION_USER_PLAYING: "{countOthers, plural, =0 {{user1} is} =1 {{user1} and {user2} are} other {{user1} and {countOthers} others are}} playing **{gameName}**", CONTENT_INVENTORY_REACTION_USER_PLAYED: "{countOthers, plural, =0 {{user1}} =1 {{user1} and {user2}} other {{user1} and {countOthers} others}} played **{gameName}**", CONTENT_INVENTORY_MEMBERLIST_GROUP_TITLE: "Activity", CONTENT_INVENTORY_MEMBERLIST_SETTINGS_HIDE: "Hide Activity Cards", CONTENT_INVENTORY_MEMBERLIST_SETTINGS_ABOUT: "About Recent Activity", CONTENT_INVENTORY_MEMBERLIST_SETTINGS_ALT: "Member List Recent Activity Settings", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_ALT: "Wumpus and Nelly chatting about their recent activity", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_HEADER: "Say Hello to Recent Activity", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_DESCRIPTION: "Learn more about your friends and play more games together by keeping up with their activities.", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_FRIEND_NOTE: "See the activity of people you talk to most", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_PLAYED_NOTE: "Keep up with games they're playing now or played recently", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_REPLY_NOTE: "Quickly jump into a conversation with a reply or even an emoji", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_GOT_IT: "Got it!", CONTENT_INVENTORY_MEMBERLIST_LEARN_MORE_DISCLOSURE: "Learn more about [Recent Activity]({recentActivityURL}) or manage your [Activity Privacy](handleActivityPrivacyClick)", CONTENT_INVENTORY_JOIN_LIVE_CHANNEL: "Join {channelName}", CONTENT_INVENTORY_SWITCH_SHARE_TO_CHANNEL: "Switch to channel message", CONTENT_INVENTORY_SWITCH_SEND_MESSAGE_TO_USER: "Switch to direct message", CONTENT_INVENTORY_REPLY_WITH_EMOJI: "Reply with {emojiName}", CONTENT_INVENTORY_MESSAGE_SENDING: "Message sending...", CONTENT_INVENTORY_MESSAGE_SENT: "Message sent!", CONTENT_INVENTORY_COACHTIP_HEADER: "Reply in 1-click!", CONTENT_INVENTORY_COACHTIP_TEXT: "Friends will receive the emoji as a DM", CONTENT_INVENTORY_COACHTIP_IMAGE_ALT: "Wumpus chatting with a friend while gaming", RECENT_GAMES: "Recent Games", USER_RECENT_GAMES_LAST_PLAYED_WEEKS_AGO: "{count} {count, plural, =1 {week} other {weeks}} ago", USER_RECENT_GAMES_LAST_PLAYED_DAYS_AGO: "{count} {count, plural, =1 {day} other {days}} ago", USER_RECENT_GAMES_LAST_PLAYED_HOURS_AGO: "{count} {count, plural, =1 {hour} other {hours}} ago", USER_RECENT_GAMES_LAST_PLAYED_MINUTES_AGO: "{count} {count, plural, =1 {minute} other {minutes}} ago", USER_RECENT_GAMES_LAST_PLAYED_SECONDS_AGO: "{count} {count, plural, =1 {second} other {seconds}} ago", USER_RECENT_GAMES_LAST_PLAYED_WEEKS_AGO_SHORT: "{count}w ago", USER_RECENT_GAMES_LAST_PLAYED_DAYS_AGO_SHORT: "{count}d ago", USER_RECENT_GAMES_LAST_PLAYED_HOURS_AGO_SHORT: "{count}h ago", USER_RECENT_GAMES_LAST_PLAYED_MINUTES_AGO_SHORT: "{count}m ago", USER_RECENT_GAMES_LAST_PLAYED_SECONDS_AGO_SHORT: "{count}s ago", USER_RECENT_GAMES: "Recently Played", USER_RECENT_GAMES_ON_PROFILE: "Show recent games on profile", USER_RECENT_GAMES_YOU_BOTH_PLAY: "You both play this game", NEW_TO_THIS_GAME: "New to this game", LAST_PLAYED_GAMES: "Last played games", RECENT_GAMES_SETTING_NOTE: "Display up to six recently played games on your profile. Learn more about recent games sharing [here.]({helpdeskArticle})", RECENT_GAMES_SETTING_REQUIREMENT: "You must have [Activity Sharing](onSettingClick) enabled.", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_MINUTES: "{count} {count, plural, =1 {min} other {mins}} ago", MEMBERS_TABLE_JOINED_AT_TIMESTAMP_HOURS: "{count} {count, plural, =1 {hr} other {hrs}} this week", USER_RECENT_GAMES_PLAYED_LAST_WEEK_HOURS: "{count} {count, plural, =1 {hr} other {hrs}} this week", USER_RECENT_GAMES_PLAYED_LAST_WEEK_MINUTES: "{count} {count, plural, =1 {min} other {mins}} this week", USER_RECENT_GAMES_PLAYED_LAST_WEEK_SECONDS: "{count} {count, plural, =1 {sec} other {secs}} this week", LIGHTNING_CHECKOUT_NON_REFUNDABLE_DISCLAIMER: "Non-refundable. By clicking pay, you agree to our [Paid Services Terms]({paidURL})", LIGHTNING_CHECKOUT_GENERIC_ERROR_TITLE: "There was a problem with your payment", LIGHTNING_CHECKOUT_GENERIC_ERROR_DESCRIPTION: "Recheck your payment information, then try again.", LIGHTNING_CHECKOUT_GENERIC_ERROR_CTA: "Manage Payment", LIGHTNING_CHECKOUT_REVIEW_PURCHASE: "Review Purchase", LIGHTNING_CHECKOUT_PAY_CTA: "Pay {price}", GUILD_POPOUT_ACTIVITY_EVENT_LOCATION: "Event in", GUILD_POPOUT_ACTIVITY_EVENT_LOCATION_A11Y: "Event in {location}", GUILD_POPOUT_ACTIVITY_EVENT_CREATED_BY: "Created by {creatorName}", GUILD_POPOUT_ACTIVITY_STREAMER: "!!{username}!! is streaming", GUILD_POPOUT_ACTIVITY_STREAMERS: "{streamerCount} people are streaming", GUILD_POPOUT_ACTIVITY_HANGOUT_CARD_ARIA: "{users, plural, one {{users} person is} other {{users} people are}} hanging out in !!{channelName}!!", GUILD_POPOUT_ACTIVITY_EMBEDDED_ACTIVITY_CARD_ARIA: "{users, plural, one {{users} person is} other {{users} people are}} playing !!{gameName}!! in !!{channelName}!!", GUILD_POPOUT_ACTIVITY_EVENT_CARD_ARIA: "!!{eventName}!! is happening now", GUILD_POPOUT_INVITES_PAUSED: "Invites are paused for this server. [View invite settings](onClick)", GUILD_POPOUT_VIEWING_AS_ROLES: "You are viewing as roles. Notifications may be in channels you can’t see. [View role settings](onClick)", GUILD_POPOUT_JOINED: "Joined", GUILD_POPOUT_EMPTY_PROMPT_HEADER: "No one's in voice yet", GUILD_POPOUT_EMPTY_PROMPT_BODY: "Voice channels are for hanging out. When you're ready to talk, just hop in.", GUILD_POPOUT_EMPTY_PROMPT_ARIA: "Hang out in !!{channelName}!!", MULTIPLE_GAMES_IN_CHANNEL: "{numGames} games", MULTIPLE_ACTIVITIES_IN_CHANNEL: "{numActivities} activities", GUILD_POPOUT_USERS_STREAMING: "{username} and {count, plural, one {{count} other are} other {{count} others are}} streaming", GUILD_POPOUT_USER_IN_VOICE: "{username} is in voice", GUILD_POPOUT_USERS_IN_VOICE: "{username} and {count, plural, one {{count} other are} other {{count} others are}} in voice", GUILD_POPOUT_USER_ON_VIDEO: "{username} is on video", GUILD_POPOUT_USERS_ON_VIDEO: "{username} and {count, plural, one {{count} other are} other {{count} others are}} on video", RECENTLY_ONLINE: "Recently Online", RECENTLY_ONLINE_STATUS: "Online **{time} ago**", MESSAGE_ACTION_FORWARD: "Forward", MESSAGE_ACTION_FORWARD_TO: "Forward To", MESSAGE_FORWARDED: "Forwarded", MESSAGE_ACTION_FORWARD_MEDIA_A11Y: "Forward media from this message", MESSAGE_ACTION_FORWARD_EMBED_A11Y: "Forward embed from this message", MESSAGES_SEND_SEPARATELY: "Send ({count, number})", MESSAGES_FORWARD_MAX_DESTINATION_COUNT: "Maximum {count, number} places at once", MESSAGE_FORWARD_SUCCESS: "Message forwarded!", MESSAGE_FORWARDING_NSFW_NOT_ALLOWED: "Messages cannot be forwarded from age-restricted to unrestricted channels", MESSAGE_CHANNEL_ATTACHMENTS_DISABLED: "Attachments are disabled in this channel.", MESSAGE_CHANNEL_EMBEDS_DISABLED: "Embeds are disabled in this channel.", MESSAGE_FORWARD_FAILED: "Forward Failed", MESSAGE_FORWARD_FAILED_BODY: "The message could not be forwarded to the following {count, plural, one {location} other {locations}}:", MESSAGE_FORWARD_FOOTER_WITH_ORIGIN_A11Y: "Message originally sent in !!{origin}!! at {timestamp}", MESSAGE_FORWARD_FOOTER_A11Y: "Message originally sent at {timestamp}", SELECTED: "Selected" }) }, 924658: function(e) { e.exports = Object.freeze({ DISCORD_NAME: "Discord", DEFAULT_CONFIRMATION_MODAL_HEADER: "Are you sure?", DISAPPROVAL: "ಠ_ಠ", ENGLISH_LANGUAGE: "English", GO_LIVE_MODAL_SELECT_GUILD_FORM_TITLE: "Select a server for your stream", GO_LIVE_MODAL_GUILD_FORM_TITLE: "Where you're streaming", OVERLAY_NEWS_GO_LIVE_BODY_NO_VOICE_CHANNEL: "Stream {game} to your friends!", SYSTEM_MESSAGE_GUILD_STREAM_ACTIVE: "$[!!{username}!!](usernameHook) is live! Now streaming !!{activityName}!!. [Join Stream](onJoinStream)", SYSTEM_MESSAGE_GUILD_STREAM_ACTIVE_MOBILE: "[!!{username}!!](usernameOnClick) is live. [Join Stream](onJoinStream)", SYSTEM_MESSAGE_GUILD_STREAM_ENDED: "$[!!{username}!!](usernameHook) was live for {duration} in !!{channelName}!!", SYSTEM_MESSAGE_GUILD_STREAM_ENDED_MOBILE: "[!!{username}!!](usernameOnClick) was live for {duration}.", INVITE_YOUR_FRIENDS: "Invite your friends!", PROGRESS_STEPS_FINISHED: "Completed!", MESSAGE_STEP_TITLE: "Send your first message", CHANNEL_PERMISSIONS_READ_ONLY_TITLE: "Read Only", CHANNEL_PERMISSIONS_READ_ONLY_DESCRIPTION: "By making a channel read only, members will not be able to send messages.", ROLE_CREATE_ADD_MEMBERS_SUBTITLE: "Assign this role to your members. Members can have more than one role.", INSTANT_INVITE_YOU_HAVE_BEEN_INVITED_TO_JOIN_GROUP_DM_BY_USER: "**!!{username}!!** has invited you to join a group DM", INVITE_MODAL_NEVERMIND_BUTTON: "Nevermind", INVITE_APP_GMAIL: "Gmail", INVITE_APP_WHATSAPP: "WhatsApp", INVITE_APP_LINE: "Line", INVITE_APP_TWITTER: "Twitter", INVITE_APP_MESSENGER: "Messenger", INVITE_APP_TELEGRAM: "Telegram", INVITE_SEND_ERROR: "Message Failed", INVITE_MESSAGE_PLACEHOLDER: "hey come check out Discord with me !!{link}!!", INVITE_URGENT_DAYS_MESSAGE_PLACEHOLDER: "hey join me on Discord! Invite expires in {numDays, plural, one {1 day} other {{numDays} days}}. !!{link}!!", INVITE_URGENT_HOURS_MESSAGE_PLACEHOLDER: "hey join me on Discord! Invite expires in {numHours, plural, one {1 hour} other {{numHours} hours}}. !!{link}!!", INVITE_URGENT_MINUTES_PLACEHOLDER: "hey join me on Discord! Invite expires in {numMinutes, plural, one {1 minute} other {{numMinutes} minutes}}. !!{link}!!", INVITE_EXPIRATION_NOTICE: "Invite expires in **!!{duration}!!.**", SYSTEM_MESSAGE_INVITE_USERS_OWNER: "Wondering who to invite?", SYSTEM_MESSAGE_INVITE_USERS_DESCRIPTION_OWNER: "Start by inviting anyone who can help you build the server!", SYSTEM_MESSAGE_INVITE_NOTIFICATION: "Wondering who to invite? Start by inviting anyone who can help you build the server!", SYSTEM_MESSAGE_INVITE_USERS: "Invite your friends", SYSTEM_MESSAGE_INVITE_USERS_DESCRIPTION: "The best way to setup a server is with your buddies!", SYSTEM_MESSAGE_INVITE_USERS_BUTTON: "Send an Invite", SYSTEM_MESSAGE_INVITE_USERS_OWNER_COMPACT: "**Wondering who to invite?** Start by inviting anyone who can help you build the server! $[Send an invite](inviteHook)", SYSTEM_MESSAGE_INVITE_USERS_COMPACT: "**Invite your friends!** The best way to setup a server is with your buddies! $[Send an invite](inviteHook)", SOUNDPACK_LABEL: "Sound Pack", SOUNDPACK_CLASSIC_LABEL: "classic", SOUNDPACK_DETUNE_LABEL: "discord but something's off", STAGE_INSTANCE_TICKET_PURCHASE_CONFIRMATION_TITLE: "You're in.", UPCOMING_GUILD_STAGE_INSTANCE_DISCOVERY_EMPTY_STATE_SUB_TITLE: "Let people know what’s happening by scheduling an upcoming Stage.\nIt will show up here for everyone in this server.", DELETE_STAGE_EVENT_CONFIRMATION_DESCRIPTION: "Are you sure you want to delete **!!{eventName}!!**? This action cannot be undone.", CREATE_STAGE_INSTANCE_SELECT_GUILD_HEADER: "Where's the party?", GUILD_STAGES_LANDING_MOBILE_SUBTITLE: "Visit this link on your desktop to buy a ticket. Once you have a ticket, you'll be able to attend the event on desktop or mobile.", GET_MOBILE_APP_SUBTITLE: "Discord isn't supported on mobile web browsers. Join over 100 million people who use Discord to talk with communities and friends.", MOBILE_APP_DOWNLOAD_CTA: "Get our mobile app", MOBILE_APP_DOWNLOAD_SUBHEADER: "Keep the conversion going on our iOS or Android app.", QR_CODE_DOWNLOAD_CTA: "Scan this QR code for an easy download link for our iOS or Android apps.", DESKTOP_DOWNLOAD_DESCRIPTION: "More features, better performance, and easy access to all your conversations.", DESKTOP_DOWNLOAD_TITLE_MAC: "Discord for Mac", DESKTOP_DOWNLOAD_TITLE_WINDOWS: "Discord for Windows", DESKTOP_DOWNLOAD_TITLE_LINUX: "Discord for Linux", DESKTOP_DOWNLOAD_TITLE: "Discord for desktop", GUILD_SETTINGS_AUDIT_LOG_V2_FILTER: "Filters", GUILD_SETTINGS_AUDIT_LOG_V2_SORT: "Sort by Date", GUILD_SETTINGS_AUDIT_LOG_V2_MEMBER_BAN_ADD: '$[**!!{user}!!**](userHook) banned $[**!!{target}!!**](targetHook): "!!{reason}!!"', GUILD_SETTINGS_AUDIT_LOG_V2_PRIVATE_THREAD_CREATE: '$[**!!{user}!!**](userHook) created a private thread $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_V2_ANNOUNCEMENT_THREAD_CREATE: '$[**!!{user}!!**](userHook) created an announcement thread $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_V2_THREAD_CREATE: '$[**!!{user}!!**](userHook) created a thread $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_V2_THREAD_UPDATE: '$[**!!{user}!!**](userHook) made changes to the thread $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_V2_THREAD_DELETE: '$[**!!{user}!!**](userHook) deleted the thread $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_V2_SCHEDULED_EVENT_CREATE: '$[**!!{user}!!**](userHook) scheduled the event $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_V2_SCHEDULED_EVENT_UPDATE: '$[**!!{user}!!**](userHook) updated the scheduled event $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_V2_SCHEDULED_EVENT_DELETE: '$[**!!{user}!!**](userHook) canceled the scheduled event $["!!{target}!!"](targetHook)', GUILD_SETTINGS_AUDIT_LOG_AUTO_MODERATION_QUARANTINE_USER: "AutoMod quarantined $[**!!{user}!!**](userHook) for violating content in their user profile", GUILD_SETTINGS_AUDIT_LOG_AUTO_MODERATION_FLAGGED_USER_PROFILE: "AutoMod flagged $[**!!{user}!!**](userHook) for violating content in their user profile", DEV_NOTICE_LOCAL: "Local development mode", DEV_NOTICE_STAGING: "Staging {buildNumber}", NOTIF_CENTER_V2_VIEW_SUMMARY: "Join in!", NOTIFICATION_CENTER_HIGHLIGHT_SETTINGS: "Highlight Notification Settings", NOTIFICATION_REPORT_IRRELEVANT_CHANNEL: "I don't care about this channel", NOTIFICATION_REPORT_IRRELEVANT_USER: "I don't know these people", NOTIFICATION_REPORT_IRRELEVANT_TOPIC: "Topic isn't relevant to me", NOTIFICATION_REPORT_SENSITIVE_OR_OFFENSIVE_TOPIC: "Topic is sensitive or offensive", HIGHLIGHT_NOTIFICATION_SETTINGS_LABEL_SUPPRESS_HIGHLIGHTS: "Suppress Highlights in this server", HIGHLIGHT_NOTIFICATION_ACTIONSHEET_BODY: "Stay informed, without the noise! Highlights provide occasional updates when your friends are chatting in busy servers. [Learn more]({helpUrl})", GUILD_SETTINGS_PARTNER_CHECKLIST_LOADING_FAILED: "We are having trouble loading the requirements. Please check back later.", GUILD_SETTINGS_PARTNER_CHECKLIST_LOADING_FAILED_TOOLTIP: "Something went wrong. Please check back later", PURCHASE_REVIEW_TAX_LABEL: "Tax", ONE_TIME_PURCHASE_FINE_PRINT: "This purchase is non-refundable.", GUILD_ROLE_SUBSCRIPTION_PURCHASE_BACK_TO_SUBSCRIPTION_USER_SETTING_CTA: "Back to Manage Server Subscriptions", FRIEND_INVITE_SHEET_TITLE: "Send Link to Add Friends", FRIEND_INVITE_EXPIRATION: "Links expire in {expirationDays} days, or {expirationUses} uses.", FRIEND_INVITE_REVOKE_ALL: "Revoke All Links", FRIEND_INVITE_ACCEPT_CONFIRMATION: "You are now friends with {username}!", PAYMENTS_ALL_METHOD_BUTTON: "All payment methods", DAY: "{count, plural, =1 {day} other {{count} days}}", MONTH: "{count, plural, =1 {month} other {{count} months}}", YEAR: "{count, plural, =1 {year} other {{count} years}}", DIRECTORY_CATEGORY_INTERNAL_1: "Work", DIRECTORY_CATEGORY_INTERNAL_2: "Social", DIRECTORY_CATEGORY_INTERNAL_3: "ERGs", DIRECTORY_CATEGORY_INTERNAL_5: "Archives", GUILD_DISCOVERY_SEARCH_PLACEHOLDER_TAGS: "Explore communities, or try popular tags below", GUILD_DISCOVERY_CATEGORY_SEARCH_PLACEHOLDER_TAGS: "Explore {categoryName} servers, or try popular tags below", CHANNEL_CHAT_NOTIFICATION_SETTINGS_NOTICE_MUTED: "You will not be notified of new messages because **!!{name}!!** is muted.", CHANNEL_CHAT_NOTIFICATION_SETTINGS_NOTICE_ONLY_MENTIONS: "You will only be notified when you are mentioned because **!!{name}!!** is set to **Only @mentions**.", NOTIFICATION_SETTINGS_UNREAD_MENTION_ONLY_DISABLED: "Disabled when notification is set to all messages", NOTIFICATION_SETTINGS_UNREAD_UPDATE_WARNING: "This will update unread badges to all messages", GUILD_JOIN_FEEDBACK_HEADER: "How is !!{guildName}!! going?", GUILD_JOIN_FEEDBACK_BODY: "Tell us about your community experience", GUILD_JOIN_FEEDBACK_ISSUE_SECTION_HEADER: "Choose your main issue", GUILD_JOIN_FEEDBACK_STILL_EXPLORING: "I am still exploring the server", GUILD_JOIN_FEEDBACK_NO_ACCESS: "I could not get full access to the server", GUILD_JOIN_FEEDBACK_ACCESS_TOO_HARD: "I got full access to the server, but gaining access was too hard", GUILD_JOIN_FEEDBACK_WHAT_DO: "I don't know what to do here", GUILD_JOIN_FEEDBACK_PERSONAL_EXPERIENCE: "I had a negative personal experience upon joining due to another server member(s)", GUILD_JOIN_FEEDBACK_REPORT: "Thanks for your feedback! Feedback like yours helps us improve Discord servers.", GET_STARTED: "Get Started", FEATURED_CHANNELS: "Featured Channels", TOP_CHANNELS: "Top Channels", CHANNELS_YOU_SHOULD_CHECK_OUT: "Channels you should check out", MEMBER_INSIGHTS_SERVER_ACCESS: "New Members", MEMBER_INSIGHTS_ACCESS_RATE_TOOLTIP: "7 day average percentage of non-bot new members who fail to access the community's channels (updated daily). You should aim for <10%.", MEMBER_INSIGHTS_ACCESS_RATING_BAD: "Your server is $[very hard to join](ratingHook)", MEMBER_INSIGHTS_ACCESS_RATING_NEUTRAL: "Your server is $[hard to join](ratingHook)", MEMBER_INSIGHTS_ACCESS_RATING_GOOD: "Your server is $[easy to join, but could be better](ratingHook)", MEMBER_INSIGHTS_ACCESS_RATING_VERY_GOOD: "Your server is $[easy to join](ratingHook)", MEMBER_INSIGHTS_ACCESS_RATING_APPROX: "Approximately {accessRate}% of new members fail to get access to your channels.", MEMBER_INSIGHTS_ACCESS_RATING_MORE: "More than {accessRate}% of new members fail to get access to your channels.", MEMBER_INSIGHTS_ACCESS_RATING_LESS: "Fewer than {accessRate}% of new members fail to get access to your channels.", MEMBER_INSIGHTS_TIPS: "Improve **New Member Retention** with these tips", ACCESS_RATE_ACTION_SUCCESS: "Great job! Check out **$[more insights](insightsHook)** to continue to improve your server.", ACCESS_RATE_ACTION_SIMPLIFY: "If you have verification steps for new members, make instructions clearer for people less\n familiar with Discord.", ACCESS_RATE_ACTION_EXTRA_STEPS: "Remove unnecessary verification steps, so members can check out your community.", ACCESS_RATE_ACTION_BOTS: "If your server is using $[third party integrations](integrationsHook) to restrict access, switch to integrations that are easier to understand.", ACCESS_RATE_ACTION_AUDIT: "Audit your server's onboarding as a new member. Look for any broken or confusing steps.", USER_SETTINGS_CHOOSE_GUILD_TITLE: "Choose a server", USER_SETTINGS_OTHER_QUICK_ACTIONS: "Other Actions", USER_SETTINGS_QUICK_ACTION_FORCE_NEW_USER_ONBOARDING: "Force new user onboarding flow", BETA: "Beta", BAN_MULTIPLE_CONFIRM_TITLE: "Would you like to ban {count, plural, one {1 member} other {{count} members}}?", BAN_MULTIPLE_SUCCESS_TOAST: "Mass ban succesful", BAN_MULTIPLE_FAILED_TOAST: "Mass ban failed", GUILD_MEMBER_MOD_VIEW_PHONE_VERIFIED: "Phone Verified", GUILD_MEMBER_MOD_VIEW_AGREE_TO_RULES: "Agreed to Rules", GUILD_MEMBER_MOD_VIEW_INVITE_LINK: "Invite Link", GUILD_MEMBER_MOD_VIEW_INVITE_LINK_TOOLTIP: "Invite link used to join server", GUILD_MEMBER_MOD_VIEW_INVITE_LINK_LABEL: "Join Method", GUILD_MEMBER_MOD_VIEW_DISCORD_JOIN_DATE: "Discord Join Date", GUILD_MEMBER_MOD_VIEW_GUILD_JOIN_DATE: "Server Join Date", GUILD_MEMBER_MOD_VIEW_GUILD_MESSAGE_ACTIVITY_TITLE: "Server Activity", APP_ICON_MUSHROOM: "One Up", STAFF_PTO_NOTICE: "Heads up! This person may be Out of Office.", CONSOLE_PLAYSTATION_STAGING_TRANSFER_VOICE: "Transfer to PlayStation (sp-int)", CONSOLE_PLAYSTATION_STAGING_JOIN_VOICE: "Join on PlayStation (sp-int)", SEARCH_EVERYWHERE: "Search Everywhere", SEARCH_FAVORITES: "Search Favorites", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_THREADS: "Allows members to talk in voice and hear others in this channel's threads.", ROLE_PERMISSIONS_CONNECT_DESCRIPTION_THREADS_EVERYONE: "Allows members to talk in voice and hear others in this channel's threads.", ROLE_PERMISSIONS_SPEAK_DESCRIPTION_THREADS: "Allows members to talk in voice in this channel's threads. If this permission is disabled, members are default muted until somebody with the “Mute Members” permission un-mutes them.", ROLE_PERMISSIONS_STREAM_DESCRIPTION_THREADS: "Allows members to share their video, screen share, or stream a game in this channel's threads.", ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_THREADS: "Allows members to speak in this channel's threads by simply talking. If this permission is disabled, members are required to use Push-to-talk. Good for controlling background noise or noisy members.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_THREADS: "Allows members to be more easily heard in this channel's threads. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **[{keybind}](onClick)** keybind.", ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_THREADS_MOBILE: "Allows members to be more easily heard in this channel's threads. When activated, the volume of others without this permission will be automatically lowered. Priority Speaker is activated by using the **{keybind}** keybind.", ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_THREADS: "Allows members to mute other members in this channel's threads for everyone.", ROLE_PERMISSIONS_DEAFEN_MEMBERS_DESCRIPTION_THREADS: "Allows members to deafen other members in this channel's threads, which means they won’t be able to speak or hear others.", ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_THREADS: "Allows members to disconnect other members from this channel's threads. They will also be able to move somebody into other channels that they have this permission in.", ROLE_PERMISSIONS_USE_EMBEDDED_ACTIVITIES_DESCRIPTION_THREADS: "Allows members to use Activities in this channel's threads.", MESSAGE_REMINDERS_EMPTY: "You have no Reminders!", MESSAGE_REMINDERS_EMPTY_TIP: "You can mark any message as a Reminder to have it appear here.", MESSAGE_REMINDERS_HEADER: "Message Reminders", MESSAGE_REMINDERS_HEADER_MOBILE: "Reminders", MESSAGE_REMINDERS_MARK_AS_TODO: "Remind Me", MESSAGE_REMINDERS_MARK_AS_DONE: "Remove Reminder", MESSAGE_REMINDERS_HEADER_ALL: "All Reminders", MESSAGE_REMINDERS_HEADER_OVERDUE: "Overdue Reminders", MESSAGE_REMINDERS_HEADER_SHOW_ALL: "Show all ({count, number})", MESSAGE_REMINDERS_HEADER_SHOW_OVERDUE: "Show overdue ({count, number})", MESSAGE_REMINDERS_SNOOZE_FOR: "Snooze for {duration}", MESSAGE_REMINDERS_SNOOZE: "Snooze", MESSAGE_REMINDERS_IN_ONE_HOUR: "in 1 hour", MESSAGE_REMINDERS_IN_TWO_HOURS: "in 2 hours", MESSAGE_REMINDERS_IN_FOUR_HOURS: "in 4 hours", MESSAGE_REMINDERS_IN_ONE_DAY: "in 1 day", MESSAGE_REMINDERS_IN_ONE_WEEK: "in 1 week", MESSAGE_REMINDERS_NEVER: "never", MESSAGE_REMINDERS_DUE_IN: "Due in {duration}", MESSAGE_REMINDERS_OVERDUE: "Due {duration} ago", APPLICATION_AUTOMOD_BADGE: "Uses AutoMod", SHARED_CANVAS_DRAW_MODE_LINE: "Draw", SHARED_CANVAS_DRAW_MODE_EMOJI_HOSE: "Emoji Hose", SHARED_CANVAS_HIDE_OVERLAY_DRAWINGS: "Hide Drawings in Overlay", AI_TAG: "AI", CLYDE_VIEW_SOURCE_SHOW_TOOLTIP: "View Sources", CLYDE_VIEW_SOURCE_HIDE_TOOLTIP: "Hide Sources", PERSONALITY_CHANNEL_BASED_KEY: "channel-based", PERSONALITY_SERIOUS_KEY: "serious-business", PERSONALITY_DEFAULT_KEY: "clyde", PERSONALITY_1_KEY: "pirate-life", PERSONALITY_2_KEY: "whimsical-wizard", PERSONALITY_3_KEY: "astro-adventurer", PERSONALITY_4_KEY: "noir-narrator", PERSONALITY_5_KEY: "inventive-intellectual", PERSONALITY_6_KEY: "knight-narrative", PERSONALITY_7_KEY: "secret-spy", PERSONALITY_8_KEY: "oracle-observations", PERSONALITY_9_KEY: "voyager-voice", PERSONALITY_10_KEY: "cinema-charmer", PERSONALITY_11_KEY: "wumpus", PERSONALITY_12_KEY: "nelly", BROADCASTING_SETTINGS: "Open Party Settings", BROADCASTING_SETTINGS_DESCRIPTION: "Control who can see your Open Party.", BROADCASTING_SETTINGS_CTA: "Configure Open Party Settings", BROADCASTING_SETTINGS_MODAL_AUDIENCE_TITLE: "Who can see your Open Party", BROADCASTING_SETTINGS_MODAL_CUSTOM_AUDIENCE_PLACEHOLDER_USERS: "Enter a friend's username", BROADCASTING_SETTINGS_MODAL_CUSTOM_AUDIENCE_PLACEHOLDER_GUILDS: "Enter a server name", BROADCASTING_SETTINGS_MODAL_FRIENDS: "Allow all of my friends to join my Open Party", BROADCASTING_SETTINGS_MODAL_CUSTOM_USERS: "Allow specific users to join my Open Party", BROADCASTING_SETTINGS_MODAL_CUSTOM_GUILDS: "Allow members of specific servers to join my Open Party", BROADCASTING_SETTINGS_MODAL_CUSTOM_USERS_HINT: "Select up to {count, number} users", BROADCASTING_SETTINGS_MODAL_CUSTOM_GUILDS_HINT: "Select up to {count, number} servers", BROADCASTING_SETTINGS_MODAL_DISABLED_DESCRIPTION: "All of your friends can see your Open Party", BROADCASTING_SETTINGS_MODAL_BEHAVIOR_TITLE: "Creating an Open Party", LEAVE_BROADCAST: "Leave Open Party", STOP_BROADCASTING: "End Open Party", START_BROADCASTING: "Start an Open Party", START_BROADCASTING_CTA: "Start Open Party", BROADCASTING: "In an Open Party", BROADCASTING_DESCRIPTION: "An Open Party is a temporary hangout space for you and your friends. Choose who can join, watch, and chat with you!", BROADCAST_SETTINGS: "Open Party Settings", BROADCAST_SETTINGS_SAVE: "Save Settings", BROADCASTING_CHANNEL_NAME: "!!{name}!!'s Open Party", LIVE_BROADCASTS: "Open Parties", AUTO_BROADCAST_TOGGLE: "Automatically create an Open Party when starting games", BROADCASTING_CAPTURE_PAUSED: "Your Party is Open", BROADCASTING_CAPTURE_PAUSED_DETAILS: "Hang tight and we'll see who's around...", MORE_OPEN_BROADCASTS: "{count, plural, =1 {{count, number} more Open Party} other {{count, number} more Open Parties}}", VIEW_OPEN_BROADCASTS: "View all Open Parties", JOIN_BROADCAST: "Join Open Party", VIEW_BROADCAST: "View Open Party", BROADCAST_FULL: "Open Party Full", BROADCASTING_BROADCASTER_TOOLTIP_HEADER: "Start an Open Party!", BROADCASTING_BROADCASTER_TOOLTIP_BODY: "You can now create your own temporary space where friends can drop by to hang out.", BROADCASTING_STOP_STREAM_CONFIRM_BODY: "Stopping your stream will also close your party, preventing people from seeing and joining it. You can re-open your party at any time by restarting your stream. Are you sure you want to end your stream?", BROADCASTING_START_STREAM_CONFIRM_BODY: "Starting your stream will re-open your party, allowing people to see it and join. Are you sure you want to start your stream?", BROADCASTING_BETA_TOOLTIP_TEXT: "Open Parties is an experimental feature. A limited number of users have the ability to host or join.", START_BROADCAST_NOTIFICATION_BODY: "Start a party, so your friends can drop by!", START_BROADCAST_NOTIFICATION_CTA: "Open a Party", XBOX: "Xbox", PLAYSTATION: "PlayStation", SAFETY_HUB_CLASSIFICATIONS_TABLE_HEADER: "Lorem, ipsum", SAFETY_HUB_CLASSIFICATIONS_TABLE_EMPTY_TEXT: "Lorem, ipsum dolor", SAFETY_HUB_CLASSIFICATIONS_TABLE_COLUMN_HEADER_DATE: "DATE", SAFETY_HUB_CLASSIFICATIONS_TABLE_COLUMN_HEADER_TYPE: "TYPE", SAFETY_HUB_CLASSIFICATIONS_TABLE_COLUMN_HEADER_EXPIRES: "EXPIRES", SAFETY_HUB_CLASSIFICATIONS_TABLE_COLUMN_HEADER_STATUS: "STATUS", CHANNEL_PROMPT_UPLOAD_IMAGE_CTA: "Upload a picture", CHANNEL_PROMPT_RANDOM_STICKER_CTA: "Random sticker", DEADCHAT_PROMPT_1: "It's quiet in here.", CHANNEL_PROMPT_GAMING_CTA: "Get my stats!", USER_SETTINGS_APPEARANCE_CHANNEL_LIST_LAYOUT_MINIMAL: "Minimal", SERVER_USAGE_SURVEY_BODY: "Help us make Discord better by answering a few questions about !!{guildName}!!", SERVER_USAGE_SURVEY_CTA: "Take Survey", REPORTS_USER_PREVIEW_TITLE: "Selected User", REPORTS_FREE_TEXT_PLACEHOLDER: "(Optional) Provide more context about your report here", REPORTS_USER_MENU_OPTION_MOBILE: "Report User Profile", FORM_LABEL_OVERLAY_SHOW_MUTE_DEAFEN_KEYBINDS: "Show mute and deafen keybinds", KEYBIND_NOTIFICATION_DESCRIPTION: "Now you can see your keybind for toggling mute in the overlay.", PROBLEMATIC_GPU_DRIVER_DETECTED: "There is currently a known issue with your GPU driver version which may affect the Go Live quality. If you experience this issue, learn more about how to fix it [here]({helpCenterLink}).", MFA_REQUIRED_FOR_STAFF: "Multi-factor authentication is required for staff.", INAPPROPRIATE_CONVERSATION_CONTACT_CRISIS_TEXT_LINE_HEADER: "Contact Crisis Text Line", INAPPROPRIATE_CONVERSATION_CONTACT_CRISIS_TEXT_LINE_DESCRIPTION: "Get 24-hour, live support from a counselor. To start, text DISCORD to 741-741.", INAPPROPRIATE_CONVERSATION_CONTACT_CRISIS_TEXT_LINE_ALT: "Illustration of floating phone surrounded by various abstract health info bubbles", INAPPROPRIATE_CONVERSATION_SEND_A_TEXT: "Send a text", INAPPROPRIATE_CONVERSATION_CHAT_ON_THE_WEB: "Chat on the web", INAPPROPRIATE_CONVERSATION_MARK_AS_TIER_1: "Add Inappropriate Tier 1 Warning (Experimental)", INAPPROPRIATE_CONVERSATION_MARK_AS_TIER_2: "Add Inappropriate Tier 2 Warning (Experimental)", SAFETY_WARNINGS_DELETE: "Delete all Safety Warnings (Experimental)", STRANGER_DANGER_CONTEXT_MENU_CLEAR: "Reset Safety Warning dismissals (Experimental)", SERVER_DRAWER_ACTIVITY_VOICE: "in **!!{channelName}!!**", SERVER_DRAWER_ACTIVITY_VOICE_STATUS: "$[](statusHook) in **!!{channelName}!!**", SERVER_DRAWER_ACTIVITY_EVENT_IN_UPCOMING: "in !!{relativeTime}!!", SERVER_DRAWER_ACTIVITY_TOPIC: "talking **!!{topic}!!**", SERVER_DRAWER_ACTIVITY_PLAYING: "playing **!!{activity}!!**", SERVER_DRAWER_ACTIVITY_STREAMING: "streaming **!!{activity}!!**", SERVER_DRAWER_ACTIVITY_STREAMING_SCREEN: "sharing screen", CLAN_UPSELL_INVITE: "Exclusive Invite", CLAN_UPSELL_CONTENT: "Want to recruit more people to play games in your server?", CLAN_UPSELL_CONTENT_VALORANT: "Want to recruit more people to play Valorant in your server?", CLAN_UPSELL_CONTENT_GENSHIN: "Want to recruit more people to play Genshin Impact in your server?", CLAN_GUILD_LIST_ADMIN_UPSELL_TITLE: "Join the first Guilds on Discord", CLAN_CHANNEL_LIST_ADMIN_UPSELL_TITLE: "Your Guilds Invite is ready!", CLAN_CHANNEL_LIST_ADMIN_UPSELL_VALORANT_TITLE: "Recruit more Valorant friends", CLAN_CHANNEL_LIST_ADMIN_UPSELL_GENSHIN_TITLE: "Recruit more Genshin friends", CLAN_CHANNEL_LIST_ADMIN_UPSELL_MESSAGE: "Become one of the first Guilds and recruit players that match your server's playstyle and vibe.", CLAN_GUILD_LIST_USER_UPSELL_VALORANT_TITLE: "Join an exclusive gaming Guild", CLAN_GUILD_LIST_USER_UPSELL_VALORANT_MESSAGE: "Check out small Guilds looking to recruit Valorant players and make new friends.", CLAN_GUILD_LIST_USER_UPSELL_GENSHIN_TITLE: "Join an exclusive gaming Guild", CLAN_GUILD_LIST_USER_UPSELL_GENSHIN_MESSAGE: "Check out small Guilds looking to recruit Genshin players and make new friends.", CLAN_SETUP_MODAL_SAVE_AND_QUIT: "Save & Exit", CLAN_SETUP_APPLICATION_TITLE: "Last Step! Set up the application.", CLAN_SETUP_APPLICATION_SUBTITLE: "Ask questions to get to know potential members better. You'll review their answers and decide if they are approved to join. You'll also be able to interview applicants to get to know them better.", CLAN_SETUP_GAMES_TITLE: "What games does your Guild play?", CLAN_SETUP_GAMES_SUBTITLE: "You can always edit this later. More game options coming soon!", CLAN_SETUP_GAMES_SEARCH_PLACEHOLDER: "Search for a game...", CLAN_SETUP_SELECTED_GAMES: "Selected Games", CLAN_SETUP_PLAYSTYLE_TITLE: "What's your Guild's playstyle?", CLAN_SETUP_PLAYSTYLE_SUBTITLE: "Let potential members know the expectations and vibe in your server. How competitive or chill is your Guild?", CLAN_SETUP_PLAYSTYLE_SOCIAL_SUBTITLE: "Skill doesn't matter. We have a good time win or lose.", CLAN_SETUP_PLAYSTYLE_CASUAL_SUBTITLE: "We play to chill and have fun, but more fun if we win!", CLAN_SETUP_PLAYSTYLE_COMPETITIVE_SUBTITLE: "We play together to win, rank up, or beat challenges.", CLAN_SETUP_PLAYSTYLE_VERY_HARDCORE_SUBTITLE: "We won't sleep until we win.", CLAN_SETUP_UTILITY_TRAITS_TITLE: "Who would be a good fit for your Guild?", CLAN_SETUP_UTILITY_TRAITS_SUBTITLE: "These traits will help the right people find and apply for your Guild. You can customize more traits in the next step.", CLAN_SETUP_UTILITY_TRAITS_CATEGORY_VALORANT: "Valorant", CLAN_SETUP_UTILITY_TRAITS_CATEGORY_GENSHIN: "Genshin", CLAN_SETUP_UTILITY_TRAITS_CATEGORY_AGE: "Age Demographic", CLAN_SETUP_UTILITY_TRAITS_CATEGORY_IDENTITY: "Traits", CLAN_SETUP_UTILITY_TRAITS_CATEGORY_LANGUAGE: "Language", CLAN_SETUP_UTILITY_TRAITS_CATEGORY_LOCALE: "Region", CLAN_SETUP_INTERESTS_TITLE: "What does your Guild like to talk about?", CLAN_SETUP_INTERESTS_SUBTITLE: "Add at least **3 topics** that your Guild discusses or traits that you share. The more niche, the better! Here's some ideas, but you can write in your own.", CLAN_SETUP_INTERESTS_LABEL: "Add a topic", CLAN_SETUP_INTERESTS_PLACEHOLDER: "Anime, Roman History, Sad Hamsters, etc...", CLAN_SETUP_SELECTED_INTERESTS: "Selected Interests", CLAN_SETUP_SUGGESTED_INTERESTS: "Some Ideas...", CLAN_SETUP_INTERESTS_HELP: "Press ENTER to add a trait", CLAN_SETUP_LANGUAGE_PLACEHOLDER: "Add a language...", CLAN_SETUP_DESCRIPTION_TITLE: "Tell potential recruits what your Guild is all about.", CLAN_SETUP_DESCRIPTION_SUBTITLE: "They'll see this as a Guild bio before they apply. What brought you together? What makes your Guild unique? Why should they apply?", CLAN_SETUP_DESCRIPTION_PLACEHOLDER: "We're a cozy group of friends who've been playing co-op games for a couple years! Looking for like-minded people to join us at our weekly movie nights :D", CLAN_SETUP_CUSTOMIZE_TITLE: "Create a badge and tag for your Guild", CLAN_SETUP_CUSTOMIZE_SUBTITLE: "Guild members will rep these next to their name and on their profiles across Discord.", CLAN_SETUP_CUSTOMIZE_LOOK_TITLE: "Customize your Guild's look", CLAN_SETUP_CUSTOMIZE_LOOK_SUBTITLE: "This is how your Guild will appear to prospective members in the Guild finder and beyond. You're almost ready to recruit!", CLAN_SETUP_CUSTOMIZE_HELP_TEXT: "Maxmimum 4 characters, alphabet (A-Z) and numbers only", CLAN_SETUP_TAG_PLACEHOLDER: "GLHF", CLAN_SETUP_SIGN_TITLE: "You're almost done!", CLAN_SETUP_SIGN_SUBTITLE: "One last step - sign the charter to become a Guild. Your Guild won't be discoverable for a few days while the Guilds page gets ready. When it launches, only a select number of people will be able to see it and apply.", CLAN_SETUP_OPTIONAL: "Optional", CLAN_SETUP_WILDCARDS_SUBTITLE: "Choose up to 3 words that describe your Guild. Be creative!!", CLAN_SETUP_NUM_TRAITS: "{n, plural, one {1 Trait} other {{n} Traits}}", CLAN_SETUP_GAMES_STEP: "Games", CLAN_SETUP_PLAYSTYLE_STEP: "Playstyle", CLAN_SETUP_UTILITY_TRAITS_STEP: "Traits", CLAN_SETUP_INTERESTS_STEP: "Interests", CLAN_SETUP_DESCRIPTION_STEP: "Description", CLAN_SETUP_TAG_STEP: "Badge", CLAN_SETUP_BANNER_STEP: "Banner", CLAN_SETUP_APPLICATIONS_STEP: "Member Applications", CLAN_SETUP_RANDOMIZE_LOOK: "Randomize", CLAN_PRIMETIME_PLACEHOLDER: "Day", CLAN_PRIMETIME_MONDAY: "Monday", CLAN_PRIMETIME_TUESDAY: "Tuesday", CLAN_PRIMETIME_WEDNESDAY: "Wednesday", CLAN_PRIMETIME_THURSDAY: "Thursday", CLAN_PRIMETIME_FRIDAY: "Friday", CLAN_PRIMETIME_SATURDAY: "Saturday", CLAN_PRIMETIME_SUNDAY: "Sunday", CLAN_PRIMETIME_WEEKDAYS: "Weekdays", CLAN_PRIMETIME_WEEKENDS: "Weekends", CLAN_PRIMETIME_MORNING: "Morning", CLAN_PRIMETIME_AFTERNOON: "Afternoon", CLAN_PRIMETIME_EVENING: "Evening", CLAN_PRIMETIME_LATE_NIGHT: "Late Night", CLAN_PRIMETIME_FORMATTED_RECURRING_TIME: "{day} {time}", CLAN_PRIMETIME_RECURRING_WEEKDAY: "Weekday", CLAN_PRIMETIME_RECURRING_WEEKEND: "Weekend", CLAN_PRIMETIME_RECURRING_MORNING: "mornings", CLAN_PRIMETIME_RECURRING_AFTERNOON: "afternoons", CLAN_PRIMETIME_RECURRING_EVENING: "evenings", CLAN_PRIMETIME_RECURRING_LATE_NIGHT: "late nights", CLAN_SETUP_OVERVIEW_TITLE: "We the people of", CLAN_SETUP_OVERVIEW_ESTABLISHED: "Est. {date}", CLAN_SETUP_OVERVIEW_TEXT_DEFAULT: "...in order to create a space to play games, establish this charter for the Guild.", CLAN_SETUP_OVERVIEW_TEXT_GAMES: "...in order to create a space to play **!!{games}!!**, establish this charter for the Guild.", CLAN_SETUP_OVERVIEW_TEXT_GAMES_AND_PLAYSTYLE: "...in order to create a **{playstyle}** space to play **!!{games}!!**, establish this charter for the Guild.", CLAN_SETUP_OVERVIEW_TEXT_TRAITS: "The Guild's traits shall be defined as **!!{traits}!!**.", CLAN_SETUP_OVERVIEW_TEXT_GAMETIME: "The members of the Guild are committed to make an effort to play games on **{selectedTimes}**.", CLAN_SETUP_OVERVIEW_TEXT_WRAP: "Everyone will work together to uphold and nurture the values of the Guild and keep it safe and welcoming to all members.", CLAN_SETUP_OVERVIEW_SIGNATURE: "sign here", CLAN_SETUP_OVERVIEW_SIGN_CTA: "Click to Sign", CLAN_SETUP_OVERVIEW_SIGN_HELP: "By signing this charter, I agree to grow and uphold the values of the Guild.", CLAN_SETUP_OVERVIEW_SIGN_AGREEMENT: "By becoming a Guild, you agree that your server complies with the [Discovery Guidelines](onGuidelinesClick).", CLAN_OVERVIEW_LIST_TWO_ITEMS: "!!{item1}!! and !!{item2}!!", CLAN_OVERVIEW_LIST_MULTIPLE_ITEMS: "!!{items}!!, and !!{last}!!", CLAN_OVERVIEW_LIST_OTHERS_COUNT: "{n, plural, one {1 other} other {{n} others}}", CLAN_SUBMIT_ERROR_TEXT: "$[**Go back**](backHook) and check error messages for more information.", CLAN_SUBMIT_ERROR_TITLE: "There are errors you need to fix.", CLAN_SUBMIT_ERROR_SUBTITLE: "Please resolve steps marked as error and try again.", CLAN_SUCCESS_TITLE: "Congratulations, **{name}** is now a Guild!", CLAN_SUCCESS_SUBTITLE: "Get ready to rep your Guild, make new friends, and play some games.", CLAN_SUCCESS_USE_TAG_TEXT: "Wear Guild Tag next to username", CLAN_SUCCESS_USE_TAG_HELP: "You can always edit this in Profile settings.", CLAN_SUCCESS_CTA: "Let's Go", CLAN_SUCCESS_POSTSCRIPT: "It may take up to 2 days for your Guild to appear in the Discovery page.", CLAN_JOIN_SUCCESS_TITLE: "Congratulations, you're an official member of **{name}**!", CLAN_JOIN_SUCCESS_SUBTITLE: "Rep your Guild, make new friends, and play some games. Get in and say hi to your new guildmates.", CLAN_JOIN_SUCCESS_MAIN_CTA: "Let's Go", CLAN_JOIN_SUCCESS_SUBTITLE_MOBILE: "Rep your Guild, make new friends, and play some games. Get in and say hi to your new guildmates.", CLAN_USER_APPLICATION_COACHMARK_TITLE: "Your application is pending!", CLAN_USER_APPLICATION_COACHMARK_BODY: "The Guild leader will get back to you soon.", CLAN_USER_APPLICATION_COACHMARK_CTA: "Got it", CLAN_SETTINGS: "Guild Settings", CLAN_SETTINGS_BASIC_INFO: "Basic Info", CLAN_SETTTINGS_SELECT_GAMES: "Select Games", CLAN_SETTTINGS_SELECT_PLAYSTYLE: "Select Playstyle", CLAN_SETTINGS_PERSONALITY_INFO: "Personality Info", CLAN_SETTINGS_SELECT_TRAITS: "Select Traits", CLAN_SETTINGS_SELECT_INTERESTS: "Select Topics", CLAN_SETTINGS_WRITE_DESCRIPTION: "Write Description", CLAN_SETTINGS_CUSTOMIZE_IDENTITY: "Customize Identity", CLAN_SETTINGS_CLAN_BADGE: "Guild Badge", CLAN_SETTINGS_CLAN_PROFILE: "Guild Profile", CLAN_SETTINGS_JOIN_APPLICATION: "Join Application", CLAN_SETTINGS_DISABLE_CLAN: "Disable Guild", CLAN_SETTINGS_DISABLE_CONFIRM_TITLE: "Are you sure?", CLAN_SETTINGS_DISABLE_CONFIRM_BODY: "All open applications to your Guild will be rejected. Members will lose their Guild tags.", CLAN_SETTINGS_APPLICATION_TITLE: "Edit questions for prospective members to answer.", CLAN_SETTINGS_APPLICATION_SUBTITLE: "", CLAN_DM_APPLICANT: "DM Applicant", CLAN_APPLICATION_SETUP_HEADER: "Set up the member screening application for **!!{guildName}!!** here. The application must have at least one Short Answer, Paragraph, or Multiple Choice section.", CLAN_APPLICATION_CANT_REMOVE_FIELD: "Applications must have at least one question.", MEMBER_VERIFICATION_ANSWER_PLACEHOLDER: "Enter your answer", MEMBER_VERIFICATION_USERS_APPLICATION: "!!{username}!!'s application", CLAN_APPLICATION_GDM_CONSENT: "By applying, you give the guild admins permission to message you regarding your application.", CLAN_APPLICATION_RATE_LIMITED_HEADER: "WOAH THERE. WAY TOO SPICY", CLAN_APPLICATION_RATE_LIMITED_BODY: "You've been sending too many Guild applications.", CLAN_APPLICATION_RATE_LIMITED_BUTTON: "Enter the chill zone", CLAN_APPLICATION_MISSING_PERMISSION: "You don't have permission to join this Guild", CLAN_BADGE: "Badge", CLAN_BADGE_ALT: " [{tag}]", CLAN_BADGE_COLORS: "Badge Colors", CLAN_TAG_VALIDATION_RULES: "Max 4 characters", CLAN_LOOK_BRAND_COLOR: "Brand Color", CLAN_LOOK_BANNER: "Banner", CLAN_LOOK_PRESET_BADGE: "Badge", CLAN_LOOK_PRESET_CUSTOM: "Custom", CLAN_PALETTE_PICKER_CUSTOM_COLORS: "Custom Colors", CLAN_OVERVIEW_LABEL_CLAN_TAG: "Guild Tag", CLAN_ADOPT_CLAN_IDENTITY: "Adopt Guild Identity", CLAN_CLEAR_CLAN_IDENTITY: "Clear Guild Identity", CLAN_TAG_GUILD_PROFILE_MEMBERSHIP: "Member Of Guild", CLAN_USER_ADOPT_TAG_UPSELL_TITLE: "{guildName} - Tag Up!", CLAN_USER_ADOPT_TAG_UPSELL_ARIA_LABEL: "Adopt the {guildName} guild tag as part of your identity", CLAN_USER_ADOPT_TAG_UPSELL_DESCRIPTION: "Rep your guild everywhere", CLAN_USER_ADOPT_TAG_NEW_IDENTITY_TITLE: "{guildName} - New Tag!", CLAN_USER_ADOPT_TAG_NEW_IDENTITY_ARIA_LABEL: "A new tag is available for {guildName}", CLAN_USER_ADOPT_TAG_NEW_IDENTITY_DESCRIPTION: "An update to your tag is available", CLAN_USER_ADOPT_TAG_MODAL_HEADING: "**{guildName}**\n\nis now a guild", CLAN_USER_ADOPT_TAG_MODAL_DESCRIPTION: "{guildName} adopted a new guild tag, and you can now rep this server everywhere you chat.", CLAN_USER_ADOPT_TAG_MODAL_NEW_IDENTITY_HEADING: "**{guildName}**\n\nhas changed their tag", CLAN_USER_ADOPT_TAG_MODAL_NEW_IDENTITY_DESCRIPTION: "A new tag is available for {guildName}. Would you like to adopt it?", CLAN_USER_ADOPT_TAG_MODAL_FEATURE: "Wear this tag everywhere", CLAN_USER_ADOPT_TAG_MODAL_FEATURE_CALLOUT: "You can always change your tag in User Profile", CLAN_USER_ADOPT_TAG_MODAL_CTA: "Adopt Tag", CLAN_USER_ADOPT_TAG_MODAL_NEW_IDENTITY_CTA: "Update Tag", CLAN_USER_ADOPT_TAG_MODAL_CANCEL: "Not Now", CLAN_USER_ADOPT_TAG_GUILD_PROFILE_CTA: "Don The Tag", CLAN_USER_APPLY_TAG_GUILD_PROFILE_CTA: "Apply To Join", CLAN_USER_GO_TO_CLAN_CTA: "Go to Guild", CLAN_USER_APPLICATION_EXISTS_TAG_GUILD_PROFILE_CTA: "View Application", CLAN_USER_PROFILE_USE_CLAN_TAG: "Would you like to adopt the {guildName} guild tag as part of your identity?", SIGNUP_BUTTON_TOOLTIP_CTA: "Click to preview", SIGNUP_COMPLETE_CTA: "Sign Up", SIGNUP_EMAIL_PROMPT: "Confirm your email to secure your spot on the waitlist", SIGNUP_EMAIL_PLACEHOLDER: "wumpus@example.com", SIGNUP_EMAIL_ERROR: "We're unable to verify that email address. Please try another", SIGNUP_COMPLETED_TITLE: "Thank you for your interest!", SIGNUP_COMPLETED_DESCRIPTION: "We will get back to you once we have more updates.", SIGNUP_NOTICE_EYEBROW: "EXCLUSIVE DISCORD INVITE", SIGNUP_NOTICE_CTA: "Learn More", SIGNUP_CLAN_PLAYSTYLE_TITLE: "What's your server's play style?", SIGNUP_CLAN_PLAYSTYLE_DESCRIPTION: "Let potential members know what your gaming style is.", SIGNUP_CLAN_ACKNOWLEDGEMENTS_TITLE: "Here is some additional information about Gaming Guilds", SIGNUP_CLAN_ACKNOWLEDGEMENTS_DESCRIPTION: "Select all the checkboxes to acknowledge and continue.", SIGNUP_CLAN_ACKNOWLEDGEMENT_CAP: "Gaming Guilds are capped to 200 members max", SIGNUP_CLAN_ACKNOWLEDGEMENT_APPROVAL: "New members must be approved by you in order to join", SIGNUP_CLAN_OPTION_VERY_CASUAL_TITLE: "Very Casual", SIGNUP_CLAN_OPTION_VERY_CASUAL_DESCRIPTION: "We always have a good time - win or lose!", SIGNUP_CLAN_OPTION_CASUAL_TITLE: "Casual", SIGNUP_CLAN_OPTION_CASUAL_DESCRIPTION: "We play to chill and have fun, but more fun if we win!", SIGNUP_CLAN_OPTION_HARDCORE_TITLE: "Hardcore", SIGNUP_CLAN_OPTION_HARDCORE_DESCRIPTION: "We play together to win, rank up, or beat challenges.", SIGNUP_CLAN_OPTION_VERY_HARDCORE_TITLE: "Very Hardcore", SIGNUP_CLAN_OPTION_VERY_HARDCORE_DESCRIPTION: "We won't sleep until we win or beat the boss.", CLAN_DISCOVERY_TOP_PICKS_TITLE: "Top Picks", CLAN_DISCOVERY_OTHER_GUILDS_TITLE: "Other Guilds", CLAN_DISCOVERY_OTHER_GUIDES_SUBTITLE: "Other guild guides that match your preferences.", CLAN_DISCOVERY_TOP_PICKS_SUBTITLE: "Best Guilds to join based on your preferences", CLAN_DISCOVERY_INSPIRATION_TITLE: "A few Guilds for inspiration", CLAN_DISCOVERY_PREPILOT_SUBTITLE: "Your fellow Guilds waiting to launch!", CLAN_DISCOVERY_PILOT_SUBTITLE: "Select **Browse Guilds** to see them all", CLAN_DISCOVERY_GAME_FILTER: "{count, number} Games", CLAN_DISCOVERY_PREFERENCES_FILTER: "Preferences", CLAN_DISCOVERY_PRIMETIME_FILTER: "Prime Time", CLAN_DISCOVERY_MEMBER_COUNT: "{count, plural, =1 {1 Member} other {{count} Members}}", CLAN_DISCOVERY_PROFILE_TITLE: "Fill out the application to join.", CLAN_DISCOVERY_PROFILE_SUBTITLE: "You'll get notified when there's an update.", CLAN_DISCOVERY_PLAYSTYLE_TITLE: "What's your playstyle?", CLAN_DISCOVERY_PLAYSTYLE_SUBTITLE: "How serious or casual do you want your friends to be? Your selections will sort the Guilds you see. You can always change this later.", CLAN_DISCOVERY_TRAIT_TITLE: "Would you prefer to sort by any of these?", CLAN_DISCOVERY_TRAIT_SUBTITLE: "You can always change this later.", CLAN_DISCOVERY_GAME_TITLE: "What games do you play?", CLAN_DISCOVERY_GAME_SUBTITLE: "Your selections will sort the Guilds you see. You can always change this later.", CLAN_DISCOVERY_GAMES_SEARCH_PLACEHOLDER: "Look for a Game...", CLAN_DISCOVERY_GAMES_SELECTED: "Selected Games", CLAN_DISCOVERY_TRAIT_OVERFLOW: "+ {count, number} more", CLAN_DISCOVERY_UNKNOWN_PLAYSTYLE: "Unknown", CLAN_DISCOVERY_PLAYSTYLE_ARIA_LABEL: "Playstyle", CLAN_DISCOVERY_ADD_CLAN: "Add a Guild", CLAN_DISCOVERY_UPSELL_BROWSE: "Browse Guilds", CLANS: "Guilds", CLAN_USER_PROFILE_PRIMARY_CLAN: "Primary Guild", CLAN_USER_PROFILE_PRIMARY_CLAN_SUBTITLE: "Choose a Guild tag to rep next to your name across Discord.", CLAN_DISCOVERY_ADMIN_UPSELL_COMPLETE_TITLE: "You're all set!", CLAN_DISCOVERY_ADMIN_UPSELL_COMPLETE_SUBTITLE: "Sit tight, this discovery page is only visible to you and your fellow Guild leaders for now. Your Guild will appear soon. We’ll give you a heads up when this Guilds page launches. When it does, only a select number of people will be able to see it and apply.", CLAN_DISCOVERY_SAVED_FILTER: "{count, number} Saved", CLAN_DISCOVERY_MAX_GAMES_SELECTED: "Only a maximum of three games can be selected at a time.", CLAN_DISCOVERY_UPSELL_CTA_GUILD_INVITE: "You're invited to become a Guild!", CLAN_DISCOVERY_UPSELL_CTA_RECRUIT: "Recruit more gaming friends for your server", CLAN_DISCOVERY_UPSELL_VIBES_OR_SKILL: "Discover players with similar vibes or skill.", CLAN_DISCOVERY_UPSELL_APPLICATIONS: "Approve new members and keep it exclusive", CLAN_DISCOVERY_UPSELL_MAX_SIZE: "Guilds are max 200 people in size.", CLAN_DISCOVERY_UPSELL_RESERVE: "Reserve Your Spot", CLAN_DISCOVERY_UPSELL_CONTINUE_SETUP: "Continue Setup", CLAN_DISCOVERY_UPSELL_TITLE: "Join an exclusive gaming Guild", CLAN_DISCOVERY_UPSELL_VALORANT_SUBTITLE: "Check out small Guilds looking to recruit Valorant players and make new friends.", CLAN_DISCOVERY_UPSELL_GENSHIN_TITLE: "Just a few clicks to find your Genshin clique.", CLAN_DISCOVERY_UPSELL_GENSHIN_SUBTITLE: "Check out small Guilds looking to recruit Genshin players and make new friends.", CLAN_DISCOVERY_UPSELL_GET_STARTED: "Get Started", CLAN_DISCOVERY_UPSELL_JOIN_WFS: "Questions? Head over to the $[Wumpus Feedback Squad](wfsHook) server to ask Discord questions or give feedback!", CLAN_DISCOVERY_UPSELL_JOIN_WFS_ARIA_LABEL: "Join Wumpus Feedback Squad server", CLAN_DISCOVERY_APPLICATION_DISABLED_TOOLTIP: "You cannot apply to Guilds right now", CLAN_DISCOVERY_APPLICATION_MAX_MEMBERS: "This Guild is at maximum capacity. You may want to apply for more Guilds.", CLAN_CARD_BADGE_APPLIED: "Applied", CLAN_MEMBER_APPLICATION_REPORT_CTA: "Report Applicant", CLAN_MEMBER_APPLICATION_REPORT_REASON_ABUSIVE: "Abuse or harassment", CLAN_MEMBER_APPLICATION_REPORT_REASON_SPAM: "Spam", CLAN_MEMBER_APPLICATION_REPORT_REASON_HARM: "Harmful misinformation or glorifying violence", CLAN_MEMBER_APPLICATION_REPORT_REASON_PII: "Exposing private identifying information", CLAN_MEMBER_APPLICATION_REPORT_REASON_OTHER: "Something else", CLAN_MEMBER_APPLICATION_REPORT_REASON_OTHER_PLACEHOLDER: "Please provide more details", CLAN_MEMBER_APPLICATION_REPORT_MODAL_HEADER: "Report Application", CLAN_MEMBER_APPLICATION_REPORT_DESCRIPTION: "Report {username}'s application for the following reason:", QUESTS_MOBILE_EMBED_UNKNOWN_TITLE: "This is an invalid quest", QUESTS_MOBILE_EMBED_UNKNOWN_BODY: "Check to confirm you're using a valid quest URL", QUESTS_MOBILE_EMBED_UNSUPPORTED_TITLE: "This Quest is not available on mobile" }) }, 539590: function(e) { e.exports = Object.freeze({ CHANGE_LANGUAGE_MODAL_TITLE_SPANISH: "\xbfCambiar idioma?", CHANGE_LANGUAGE_MODAL_SUBTITLE_SPANISH: "\xbfTe gustar\xeda configurar Discord en Espa\xf1ol?", YES_TEXT_SPANISH: "S\xed", NO_TEXT_SPANISH: "No", GOT_IT_TEXT_SPANISH: "Entendido", LANGUAGE_CHANGED_CONFIRMATION_TITLE_SPANISH: "\xa1El cambio fue hecho!", LANGUAGE_CHANGED_CONFIRMATION_SUBTITLE_SPANISH: 'Discord est\xe1 configurado en Espa\xf1ol. Puedes elegir otro idioma en "Ajustes de aplicaci\xf3n" > "Idioma".' }) }, 93725: function(e, t, n) { "use strict"; n.r(t), n.d(t, { numberParts: function() { return i } }); let i = { __proto__: null, bg: { group: " ", decimal: "," }, cs: { group: " ", decimal: "," }, da: { group: ".", decimal: "," }, de: { group: ".", decimal: "," }, el: { group: ".", decimal: "," }, "en-GB": { group: ",", decimal: "." }, "en-US": { group: ",", decimal: "." }, "es-ES": { group: ".", decimal: "," }, "es-419": { group: ".", decimal: "," }, fi: { group: " ", decimal: "," }, fr: { group: " ", decimal: "," }, hi: { group: ",", decimal: "." }, hr: { group: ".", decimal: "," }, hu: { group: " ", decimal: "," }, it: { group: ".", decimal: "," }, ja: { group: ",", decimal: "." }, ko: { group: ",", decimal: "." }, lt: { group: " ", decimal: "," }, nl: { group: ".", decimal: "," }, no: { group: " ", decimal: "," }, pl: { group: " ", decimal: "," }, "pt-BR": { group: ".", decimal: "," }, ro: { group: ".", decimal: "," }, ru: { group: " ", decimal: "," }, "sv-SE": { group: " ", decimal: "," }, th: { group: ",", decimal: "." }, tr: { group: ".", decimal: "," }, uk: { group: " ", decimal: "," }, vi: { group: ".", decimal: "," }, "zh-CN": { group: ",", decimal: "." }, "zh-TW": { group: ",", decimal: "." } } }, 781272: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("302454"), s = n.n(r), a = n("481060"); function o(e) { return e.paragraph = { ...e.paragraph, react: function(e, t, n) { return (0, i.jsx)("p", { children: t(e.content, n) }, n.key) } }, e.link = { ...e.link, react: function(e, t, n) { let r = {}; if (null != e.context) { let t = e.context[e.target]; t && t.onClick ? (r.onClick = t.onClick, r.onContextMenu = t.onContextMenu) : r.onClick = t } return null == r.onClick && (r.href = s().sanitizeUrl(e.target)), (0, i.jsx)(a.Anchor, { title: e.title, ...r, children: t(e.content, n) }, n.key) } }, e } }, 360038: function(e, t, n) { "use strict"; n.r(t), n.d(t, { JUMP_TO_GUILD: function() { return c } }), n("653041"); var i = n("853856"), r = n("706590"), s = n("703656"), a = n("769654"), o = n("592125"), l = n("496675"), u = n("914010"), d = n("771845"), _ = n("981631"); let c = { binds: (() => { let e = []; for (let t = 1; t < 10; t++) e.push("mod+".concat(t)); return e })(), comboKeysBindGlobal: !0, action(e, t) { let n, c = parseInt(t.split("+")[1], 10); if (0 === c && (c = 10), !isNaN(c) && 0 !== c) { if (null != (n = 1 === c ? _.ME : (0, r.isFavoritesGuildVisible)(i.default, o.default, l.default) ? 2 === c ? _.FAVORITES : d.default.getFlattenedGuildIds()[c - 3] : d.default.getFlattenedGuildIds()[c - 2])) return n === _.ME && null == u.default.getGuildId() ? ((0, s.transitionTo)(_.Routes.CHANNEL(n)), !1) : ((0, a.transitionToGuild)(n), !1) } } } }, 147913: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("411104"), n("47120"), n("17089"); var i = n("570140"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { initialize() { this.initializedCount++, !(this.initializedCount > 1) && (this._initialize(), Object.entries(this.actions).forEach(e => { let [t, n] = e; i.default.subscribe(t, "function" == typeof n ? n : n.callback) }), this.stores.forEach((e, t) => { t.addChangeListener(e), e() })) } terminate(e) { !(this.initializedCount <= 0) && (e ? this.initializedCount = 0 : this.initializedCount--, 0 === this.initializedCount && (this._terminate(), Object.entries(this.actions).forEach(e => { let [t, n] = e; i.default.unsubscribe(t, "function" == typeof n ? n : n.callback) }))) } _initialize() {} _terminate() {} constructor() { r(this, "initializedCount", 0), r(this, "actions", {}), r(this, "stores", new Map) } } }, 89892: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"), n("852437"), n("653041"), n("733860"), n("757143"); var i = n("392711"), r = n.n(i), s = n("612002"), a = n("593472"), o = n("513418"), l = n("710845"), u = n("786761"), d = n("709054"), _ = n("697479"), c = n("981631"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = new l.default("ChannelMessages"); function T(e, t) { let n = e.get(t.id); return null == n || function(e, t) { var n, i; let r = null != e.editedTimestamp ? +e.editedTimestamp : 0; return !!((null != t.edited_timestamp ? +new Date(t.edited_timestamp) : 0) > r) || !!(e.embeds.length < (null !== (i = null === (n = t.embeds) || void 0 === n ? void 0 : n.length) && void 0 !== i ? i : 0)) || e.content !== t.content }(n, t) || e.cached ? (0, u.createMessageRecord)(t) : n } class f { clone() { let e = new f(this._isCacheBefore); return e._map = { ...this._map }, e._messages = [...this._messages], e._wasAtEdge = this._wasAtEdge, e } get wasAtEdge() { return this._wasAtEdge } set wasAtEdge(e) { this._wasAtEdge = e } get length() { return this._messages.length } clear() { this._map = {}, this._messages = [], this._wasAtEdge = !1 } remove(e) { this._messages = r().filter(this._messages, t => { let { id: n } = t; return n !== e }), delete this._map[e] } removeMany(e) { r().each(e, e => { delete this._map[e] }), this._messages = this._messages.filter(t => -1 === e.indexOf(t.id)) } replace(e, t) { let n = this._map[e]; null != n && (delete this._map[e], this._map[t.id] = t, this._messages[this._messages.indexOf(n)] = t) } update(e, t) { let n = this._map[e]; if (null == n) return; let i = t(n); this._map[n.id] = i, this._messages[this._messages.indexOf(n)] = i } has(e) { return null != this._map[e] } get(e) { return this._map[e] } forEach(e, t) { this._messages.forEach(e, t) } cache(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (0 === this.length && (this._wasAtEdge = t), this._messages.length + e.length > c.MAX_MESSAGE_CACHE_SIZE) { if (this._wasAtEdge = !1, e.length > c.MAX_MESSAGE_CACHE_SIZE) { this._isCacheBefore ? this._messages = e.slice(e.length - c.MAX_MESSAGE_CACHE_SIZE) : this._messages = e.slice(0, c.MAX_MESSAGE_CACHE_SIZE), this._map = {}, this._messages.forEach(e => this._map[e.id] = e); return } let t = c.MAX_MESSAGE_CACHE_SIZE - e.length; this._isCacheBefore ? this._messages = this._messages.slice(Math.max(this._messages.length - t, 0)) : this._messages = this._messages.slice(0, t) } this._messages = this._isCacheBefore ? [...this._messages, ...e] : [...e, ...this._messages], this._map = {}, this._messages.forEach(e => this._map[e.id] = e) } extractAll() { let e = this._messages; return this._messages = [], this._map = {}, e } extract(e) { let t; if (this._isCacheBefore) { let n = Math.max(this.length - e, 0), i = this.length; t = this._messages.slice(n, i), this._messages.splice(n) } else { let n = Math.min(e, this.length); t = this._messages.slice(0, n), this._messages.splice(0, e) } return t.forEach(e => delete this._map[e.id]), t } constructor(e) { E(this, "_messages", void 0), E(this, "_map", void 0), E(this, "_wasAtEdge", void 0), E(this, "_isCacheBefore", void 0), this._messages = [], this._map = {}, this._wasAtEdge = !1, this._isCacheBefore = e } } class S { static forEach(e) { r().forEach(S._channelMessages, e) } static get(e) { return S._channelMessages[e] } static hasPresent(e) { let t = S.get(e); return null != t && t.hasPresent() } static getOrCreate(e) { let t = S._channelMessages[e]; return null == t && (t = new S(e), S._channelMessages[e] = t), t } static clear(e) { delete S._channelMessages[e] } static clearCache(e) { let t = S._channelMessages[e]; null != t && (t._before.clear(), t._after.clear(), this.commit(t)) } static commit(e) { S._channelMessages[e.channelId] = e } mutate(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = new S(this.channelId); return n._array = t ? [...this._array] : this._array, n._map = t ? { ...this._map } : this._map, n._after = t ? this._after.clone() : this._after, n._before = t ? this._before.clone() : this._before, e instanceof Function ? (n.ready = this.ready, n.jumpType = this.jumpType, n.jumpTargetId = this.jumpTargetId, n.jumpTargetOffset = this.jumpTargetOffset, n.jumpSequenceId = this.jumpSequenceId, n.jumped = this.jumped, n.jumpedToPresent = this.jumpedToPresent, n.jumpFlash = this.jumpFlash, n.jumpReturnTargetId = this.jumpReturnTargetId, n.focusTargetId = this.focusTargetId, n.hasMoreBefore = this.hasMoreBefore, n.hasMoreAfter = this.hasMoreAfter, n.loadingMore = this.loadingMore, n.revealedMessageId = this.revealedMessageId, n.cached = this.cached, n.hasFetched = this.hasFetched, n.error = this.error, e(n)) : "object" == typeof e && (n.ready = void 0 !== e.ready ? !0 === e.ready : this.ready, n.jumpType = void 0 !== e.jumpType ? e.jumpType : this.jumpType, n.jumpTargetId = void 0 !== e.jumpTargetId ? e.jumpTargetId : this.jumpTargetId, n.jumpTargetOffset = void 0 !== e.jumpTargetOffset ? e.jumpTargetOffset : this.jumpTargetOffset, n.jumpSequenceId = void 0 !== e.jumpSequenceId ? e.jumpSequenceId : this.jumpSequenceId, n.jumped = void 0 !== e.jumped ? !0 === e.jumped : this.jumped, n.jumpedToPresent = void 0 !== e.jumpedToPresent ? !0 === e.jumpedToPresent : this.jumpedToPresent, n.jumpFlash = void 0 !== e.jumpFlash ? !0 === e.jumpFlash : this.jumpFlash, n.jumpReturnTargetId = void 0 !== e.jumpReturnTargetId ? e.jumpReturnTargetId : this.jumpReturnTargetId, n.focusTargetId = void 0 !== e.focusTargetId ? e.focusTargetId : this.focusTargetId, n.hasMoreBefore = void 0 !== e.hasMoreBefore ? !0 === e.hasMoreBefore : this.hasMoreBefore, n.hasMoreAfter = void 0 !== e.hasMoreAfter ? !0 === e.hasMoreAfter : this.hasMoreAfter, n.loadingMore = void 0 !== e.loadingMore ? e.loadingMore : this.loadingMore, n.revealedMessageId = void 0 !== e.revealedMessageId ? e.revealedMessageId : this.revealedMessageId, n.cached = void 0 !== e.cached ? e.cached : this.cached, n.hasFetched = void 0 !== e.hasFetched ? e.hasFetched : this.hasFetched, n.error = void 0 !== e.error ? e.error : this.error), n } get length() { return this._array.length } toArray() { return [...this._array] } forEach(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (n) { let n = this._array; for (let i = n.length - 1; i >= 0 && !1 !== e.call(t, n[i], i); i--); } else this._array.forEach(e, t) } reduce(e, t) { return this._array.reduce(e, t) } some(e, t) { return this._array.some(e, t) } filter(e, t) { return this._array.filter(e, t) } forAll(e, t) { this._before.forEach(e, t), this._array.forEach(e, t), this._after.forEach(e, t) } findOldest(e) { var t, n; return null !== (n = null !== (t = r().find(this._before._messages, e)) && void 0 !== t ? t : r().find(this._array, e)) && void 0 !== n ? n : r().find(this._after._messages, e) } findNewest(e) { var t, n; return null !== (n = null !== (t = r().findLast(this._after._messages, e)) && void 0 !== t ? t : r().findLast(this._array, e)) && void 0 !== n ? n : r().findLast(this._before._messages, e) } map(e, t) { return this._array.map(e, t) } first() { return this._array[0] } last() { return this._array[this._array.length - 1] } get(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], i = this._map[e]; return null == i && n ? null !== (t = this._before.get(e)) && void 0 !== t ? t : this._after.get(e) : i } getByIndex(e) { return this._array[e] } getAfter(e) { let t = this.get(e); if (null == t) return null; let n = this._array.indexOf(t); return -1 === n || n === this.length - 1 ? null : this._array[n + 1] } getManyAfter(e, t, n) { let i = this.get(e); if (null == i) return null; let r = this._array.indexOf(i); if (-1 === r) return null; let s = []; for (let e = r + 1; e < this.length && (-1 === t || s.length < t); e++)(null == n || n(this._array[e])) && s.push(this._array[e]); return s } getManyBefore(e, t, n) { let i = this.get(e); if (null == i) return null; let r = this._array.indexOf(i); if (-1 === r) return null; let s = []; for (let e = r - 1; e >= 0 && (-1 === t || s.length < t); e--)(null == n || n(this._array[e])) && s.unshift(this._array[e]); return s } has(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return null != this._map[e] || t && (this._before.has(e) || this._after.has(e)) } indexOf(e) { let t = -1; return this._array.find((n, i) => n.id === e && (t = i, !0)), t } hasPresent() { return this._after.length > 0 && this._after.wasAtEdge || !this.hasMoreAfter } hasBeforeCached(e) { if (this.length > 0 && this._before.length > 0) { let t = this.first(); return null != t && t.id === e } return !1 } hasAfterCached(e) { if (this.length > 0 && this._after.length > 0) { let t = this.last(); return null != t && t.id === e } return !1 } update(e, t) { let n = this._map[e]; if (null == n) return this._before.has(e) ? this.mutate(n => n._before.update(e, t), !0) : this._after.has(e) ? this.mutate(n => n._after.update(e, t), !0) : this; let i = t(n); return this.mutate(e => { e._map[n.id] = i, e._array[e._array.indexOf(n)] = i }, !0) } replace(e, t) { let n = this._map[e]; if (null == n) return this._before.has(e) ? this.mutate(n => n._before.replace(e, t), !0) : this._after.has(e) ? this.mutate(n => n._after.replace(e, t), !0) : this; return this.mutate(i => { delete i._map[e], i._map[t.id] = t, i._array[i._array.indexOf(n)] = t }, !0) } remove(e) { return this.mutate(t => { delete t._map[e], t._array = t._array.filter(t => t.id !== e), t._before.remove(e), t._after.remove(e) }, !0) } removeMany(e) { return e.some(e => this.has(e)) ? this.mutate(t => { r().each(e, e => { delete t._map[e] }), t._array = t._array.filter(t => -1 === e.indexOf(t.id)), t._before.removeMany(e), t._after.removeMany(e) }, !0) : this } merge(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return this.mutate(i => { i._merge(e, t, n) }, !0) } _merge(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; e = e.filter(e => { let t = this._map[e.id]; return this._map[e.id] = e, null == t || (this._array[this._array.indexOf(t)] = e, !1) }), n && (t ? this._before : this._after).clear(), this._array = t ? [...e, ...this._array] : [...this._array, ...e] } mergeDelta() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; return this.mutate(i => { i._before.clear(), i._after.clear(); let r = new Set(n); e.forEach(e => r.add(e.id)), t.forEach(e => r.add(e.id)), i._array = i._array.filter(e => !r.has(e.id)).concat(e.map(e => (0, u.createMessageRecord)(e)), t.map(e => (0, u.createMessageRecord)(e))).sort((e, t) => d.default.compare(e.id, t.id)) }) } _clearMessages() { this._array = [], this._map = {} } reset(e) { return this.mutate(t => { t._array = e, t._map = {}, e.forEach(e => t._map[e.id] = e), t._before.clear(), t._after.clear() }) } truncateTop(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = this._array.length - e; return n <= 0 ? this : this.mutate(e => { for (let t = 0; t < n; t++) delete e._map[e._array[t].id]; e._before.cache(e._array.slice(0, n), !e.hasMoreBefore), e._array = e._array.slice(n), e.hasMoreBefore = !0 }, t) } truncateBottom(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return this._array.length <= e ? this : this.mutate(t => { for (let n = e; n < this._array.length; n++) delete t._map[t._array[n].id]; t._after.cache(t._array.slice(e, this._array.length), !t.hasMoreAfter), t._array = t._array.slice(0, e), t.hasMoreAfter = !0 }, t) } jumpToPresent(e) { return this.mutate(t => { let n = t._after.extractAll(); t.hasMoreAfter = !1; let i = Math.max(n.length - e, 0), r = n.slice(i); n.splice(i), t._before.cache(t._array), t._before.cache(n), t._clearMessages(), t._merge(r), t.hasMoreBefore = t._before.length > 0, t.jumped = !0, t.jumpTargetId = null, t.jumpTargetOffset = 0, t.jumpedToPresent = !0, t.jumpFlash = !1, t.jumpReturnTargetId = null, t.jumpSequenceId = t.jumpSequenceId + 1, t.ready = !0, t.loadingMore = !1 }, !0) } jumpToMessage(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = arguments.length > 2 ? arguments[2] : void 0, i = arguments.length > 3 ? arguments[3] : void 0, r = arguments.length > 4 ? arguments[4] : void 0; return this.mutate(s => { s.jumped = !0, s.jumpedToPresent = !1, s.jumpType = null != r ? r : a.JumpTypes.ANIMATED, s.jumpTargetId = e, s.jumpTargetOffset = null != e && null != n ? n : 0, s.jumpSequenceId = s.jumpSequenceId + 1, s.jumpFlash = t, s.jumpReturnTargetId = i, s.ready = !0, s.loadingMore = !1 }, !1) } focusOnMessage(e) { return this.mutate(t => { t.focusTargetId = e, t.ready = !0, t.loadingMore = !1 }, !1) } loadFromCache(e, t) { return this.mutate(n => { let i = e ? n._before : n._after; n._merge(i.extract(t), e); let r = i.length > 0 || !i.wasAtEdge; e ? n.hasMoreBefore = r : n.hasMoreAfter = r, n.ready = !0, n.loadingMore = !1 }, !0) } truncate(e, t) { return this.length <= c.MAX_LOADED_MESSAGES ? this : e ? this.truncateBottom(c.TRUNCATED_MESSAGE_VIEW_SIZE) : t ? this.truncateTop(c.TRUNCATED_MESSAGE_VIEW_SIZE) : this } receiveMessage(e) { var t, n; let i = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], r = null == e.nonce ? null : this.get(e.nonce, !0); if (null != r && ((null === (t = e.author) || void 0 === t ? void 0 : t.id) === (null === (n = r.author) || void 0 === n ? void 0 : n.id) || null != e.interaction && e.interaction.user.id === r.author.id) && null != e.nonce && r.id === e.nonce) { let t = (0, u.createMessageRecord)(e); return null != r.interactionData && (t.interactionData = r.interactionData), this.replace(e.nonce, t) } if (this.hasMoreAfter) this._after.wasAtEdge && (this._after.wasAtEdge = !1); else { let t = s.default.getCurrentConfig({ location: "2ecb25_1" }, { autoTrackExposure: !1 }).enabled ? (0, u.createMessageRecord)(e) : T(this, e), n = this.merge([t]); return i ? n.truncateTop(c.TRUNCATED_MESSAGE_VIEW_SIZE, !1) : this.length > c.MAX_LOADED_MESSAGES ? n.truncateBottom(c.TRUNCATED_MESSAGE_VIEW_SIZE, !1) : n } return this } receivePushNotification(e) { return null != (null == e.nonce ? null : this.get(e.nonce, !0)) ? this : this.mutate({ ready: !0, cached: !0 }).merge([T(this, e)]) } loadStart(e) { var t, n, i, r; return this.mutate({ loadingMore: !0, jumped: null != e, jumpedToPresent: null !== (t = null == e ? void 0 : e.present) && void 0 !== t && t, jumpTargetId: null !== (n = null == e ? void 0 : e.messageId) && void 0 !== n ? n : null, jumpTargetOffset: null !== (i = null == e ? void 0 : e.offset) && void 0 !== i ? i : 0, jumpReturnTargetId: null !== (r = null == e ? void 0 : e.returnMessageId) && void 0 !== r ? r : null, ready: null == e && this.ready }) } loadComplete(e) { var t, n, i, o, l, d, _, E, f, S, h; let A = [...e.newMessages], m = null !== (t = e.isBefore) && void 0 !== t && t, N = null !== (n = e.isAfter) && void 0 !== n && n, p = null !== (i = e.jump) && void 0 !== i ? i : null, O = null !== (o = e.hasMoreBefore) && void 0 !== o && o, C = null !== (l = e.hasMoreAfter) && void 0 !== l && l, R = null !== (d = e.cached) && void 0 !== d && d, g = r()(A).reverse().map(s.default.getCurrentConfig({ location: "2ecb25_2" }, { autoTrackExposure: !1 }).enabled ? e => (0, u.createMessageRecord)(e) : e => T(this, e)).value(), L = null; if ((m || N) && null == p && this.ready) L = this.merge(g, m, !0); else { let e = this._array.filter(e => e.state === c.MessageStates.SENDING); L = this.reset(g), !(e.length > 0) || m || N || (null == p ? void 0 : p.messageId) != null || (null == p ? void 0 : p.offset) != null ? I.info("loadComplete: resetting state for channelId=".concat(this.channelId, ", sending.length=").concat(e.length)) : (I.info("loadComplete: merging with SENDING messages for channelId=".concat(this.channelId)), L = L.merge(e)) } return L = L.mutate({ ready: !0, loadingMore: !1, jumpType: null !== (_ = null == p ? void 0 : p.jumpType) && void 0 !== _ ? _ : a.JumpTypes.ANIMATED, jumpFlash: null !== (E = null == p ? void 0 : p.flash) && void 0 !== E && E, jumped: null != p, jumpedToPresent: null !== (f = null == p ? void 0 : p.present) && void 0 !== f && f, jumpTargetId: null !== (S = null == p ? void 0 : p.messageId) && void 0 !== S ? S : null, jumpTargetOffset: null != p && null != p.messageId && null != p.offset ? p.offset : 0, jumpSequenceId: null != p ? L.jumpSequenceId + 1 : L.jumpSequenceId, jumpReturnTargetId: null !== (h = null == p ? void 0 : p.returnMessageId) && void 0 !== h ? h : null, hasMoreBefore: null == p && N ? L.hasMoreBefore : O, hasMoreAfter: null == p && m ? L.hasMoreAfter : C, cached: R, hasFetched: e.hasFetched, error: !1 }) } addCachedMessages(e, t) { (0, o.requireSortedDescending)(e); let n = e.map(e => T(this, e)).reverse(); return this._array.filter(e => !n.some(t => t.id === e.id)).forEach(e => _.insert(n, e, (e, t) => d.default.compare(e.id, t.id))), this.reset(n).mutate({ ready: !0, cached: t, error: !1 }) } constructor(e) { E(this, "channelId", void 0), E(this, "ready", void 0), E(this, "jumpType", void 0), E(this, "jumpTargetId", void 0), E(this, "jumpTargetOffset", void 0), E(this, "jumpSequenceId", void 0), E(this, "jumped", void 0), E(this, "jumpedToPresent", void 0), E(this, "jumpFlash", void 0), E(this, "jumpReturnTargetId", void 0), E(this, "focusTargetId", void 0), E(this, "hasMoreBefore", void 0), E(this, "hasMoreAfter", void 0), E(this, "loadingMore", void 0), E(this, "revealedMessageId", void 0), E(this, "cached", void 0), E(this, "hasFetched", void 0), E(this, "error", void 0), E(this, "_array", []), E(this, "_before", void 0), E(this, "_after", void 0), E(this, "_map", {}), this.channelId = e, this.ready = !1, this.jumpTargetId = null, this.jumpTargetOffset = 0, this.jumpSequenceId = 1, this.jumped = !1, this.jumpedToPresent = !1, this.jumpType = a.JumpTypes.ANIMATED, this.jumpFlash = !0, this.jumpReturnTargetId = null, this.hasMoreBefore = !0, this.hasMoreAfter = !1, this.loadingMore = !1, this.revealedMessageId = null, this._clearMessages(), this._before = new f(!0), this._after = new f(!1), this.cached = !1, this.hasFetched = !1, this.error = !1 } } E(S, "_channelMessages", {}), t.default = S }, 579806: function(e, t, n) { "use strict"; n.r(t); let i = window.DiscordNative; t.default = i }, 704907: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"); var i = n("392711"), r = n.n(i), s = n("913527"), a = n.n(s); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } t.default = class e { overwriteHistory(e, t) { this.usageHistory = r().mapValues(null != e ? e : {}, e => ({ ...e, frecency: -1 })), null == t || t.forEach(e => { let { key: t, timestamp: n } = e; return this.track(t, n) }), this.markDirty() } markDirty() { this.dirty = !0 } isDirty() { return this.dirty } track(e, t) { if (null == e) return; let n = Object.prototype.hasOwnProperty.call(this.usageHistory, e) ? this.usageHistory[e] : void 0; if (null == n) n = { totalUses: 1, recentUses: [null != t ? t : Date.now()], frecency: -1, score: 0 }; else for (n.frecency = -1, n.totalUses += 1, null == t ? n.recentUses.push(Date.now()) : (n.recentUses.push(t), n.recentUses.sort()); n.recentUses.length > this.maxSamples;) n.recentUses.shift(); this.usageHistory[e] = n, this.markDirty() } getEntry(e) { return null == e ? null : (this.dirty && this.compute(), Object.prototype.hasOwnProperty.call(this.usageHistory, e) ? this.usageHistory[e] : void 0) } getScore(e) { let t = this.getEntry(e); return null != t ? t.score : null } getFrecency(e) { let t = this.getEntry(e); return null != t ? t.frecency : null } compute() { let e = a()(); r().forEach(this.usageHistory, (t, n) => { let { totalUses: i, recentUses: s, frecency: o } = t; if (-1 !== o) return; let l = this.computeBonus(n) / 100; t.score = 0, r().forEach(s, (n, i) => { if (i >= this.maxSamples) return !1; let r = this.computeWeight(e.diff(a()(n), "days")); t.score += l * r }), t.score > 0 ? (t.recentUses.length > 0 && (t.frecency = Math.ceil(t.score / s.length * i)), this.usageHistory[n] = t) : delete this.usageHistory[n] }), this.frequently = r()(this.usageHistory).map((e, t) => { let n = this.lookupKey(t); return null == n ? null : [n, e.frecency] }).filter(e => null !== e).sortBy(e => { let [t, n] = e; return -n }).map(e => { let [t] = e; return t }).take(this.numFrequentlyItems).value(), this.dirty = !1, this.afterCompute(this.usageHistory, this._frequently) } get frequently() { return this.dirty && this.compute(), this._frequently } set frequently(e) { this._frequently = e } constructor({ computeBonus: e, computeWeight: t, lookupKey: n, afterCompute: i, numFrequentlyItems: r = 32, maxSamples: s = 10 }) { o(this, "dirty", void 0), o(this, "_frequently", void 0), o(this, "numFrequentlyItems", void 0), o(this, "maxSamples", void 0), o(this, "computeBonus", void 0), o(this, "computeWeight", void 0), o(this, "lookupKey", void 0), o(this, "usageHistory", void 0), o(this, "afterCompute", void 0), this.computeBonus = e, this.computeWeight = t, this.afterCompute = i, this.lookupKey = n, this.usageHistory = {}, this.frequently = [], this.maxSamples = s, this.numFrequentlyItems = r, this.dirty = !1 } } }, 909766: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Histogram: function() { return s } }), n("653041"), n("47120"); var i = n("508385"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { addSample(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1; this.total += e * t, this.totalWeight += t, this.samples++, i.TDigest.prototype.push.call(this.digest, e, t), this.digest.check_continuous() } getReport() { var e, t, n, i; let r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [25, 50, 75, 90, 95], s = {}; for (let t of r) s[t] = null !== (e = this.digest.percentile(t / 100)) && void 0 !== e ? e : 0; return { min: null !== (t = this.digest.percentile(0)) && void 0 !== t ? t : 0, max: null !== (n = this.digest.percentile(1)) && void 0 !== n ? n : 0, count: null !== (i = this.digest.size()) && void 0 !== i ? i : 0, percentiles: s, mean: this.totalWeight > 0 ? this.total / this.totalWeight : 0, samples: this.samples } } constructor() { r(this, "digest", new i.Digest), r(this, "total", 0), r(this, "samples", 0), r(this, "totalWeight", 0) } } }, 303850: function(e, t, n) { "use strict"; n.r(t), n.d(t, { IdGenerator: function() { return i.IdGenerator } }); var i = n("761609") }, 714338: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("757143"), n("653041"); var i = n("879443"), r = n.n(i), s = n("414861"), a = n.n(s), o = n("360038"), l = n("710845"), u = n("626135"), d = n("358085"), _ = n("981631"); let c = {}, E = [], I = !1, T = a()(new(r())(window)), f = (0, d.isMac)() ? "cmd" : "ctrl", S = (0, d.isMac)() ? "opt" : "alt", h = (0, d.isMac)() ? "return" : "enter", A = [...o.JUMP_TO_GUILD.binds, "mod+shift+[", "mod+shift+]", "mod+[", "mod+]", "alt+[", "alt+]", "ctrl+shift+tab", "ctrl+tab", "mod+n", "mod+t", "mod+shift+t", "mod+plus", "mod+minus", "mod+0"].map(e => e.replace("mod", f)), m = () => [], N = []; function p(e) { let t = []; for (let n of Object.values(e)) null != n && t.push(...n.binds); return t.map(e => e.replace("mod", f)) } function O(e, t) { return (n, i) => (u.default.track(_.AnalyticEvents.KEYBOARD_SHORTCUT_USED, { shortcut_name: e }), t(n, i)) } function C(e) { for (let [t, n] of Object.entries(e)) { if (null == n) continue; let e = m(); !d.isPlatformEmbedded && (e = e.concat(A)); let i = n.binds.filter(t => (t = t.replace("mod", f), 0 > e.indexOf(t))); if (0 === i.length) continue; let r = n.comboKeysBindGlobal ? T.bindGlobal : T.bind; if (null != n.action && r.call(T, i, O(t, n.action)), null != n.keyup && r.call(T, i, O(t, n.keyup), "keyup"), null != n.keydown) { let e = i.indexOf("any-character"); - 1 !== e && (! function(e, t) { let n = e => t(e, e.key); document.addEventListener(e, n), N.push(() => document.removeEventListener(e, n)) }("keydown", n.keydown), i.splice(e, 1)), i.length > 0 && r.call(T, i, O(t, n.keydown), "keydown") } null != n.keypress && r.call(T, i, O(t, n.keypress), "keypress") } }(0, d.isDesktop)() && new(r())(document.documentElement).bind("backspace", e => e.preventDefault()), t.default = { combokeys: T, modKey: f, altKey: S, returnKey: h, setGetKeybindList(e) { m = e }, checkDupes(e) { let t = new Set, n = []; for (let i of p(e)) t.has(i) && n.push(i), t.add(i); n.length > 0 && new l.default("Keybinds").warn("Duplicate keyboard shortcuts defined:", n) }, setLayout(e) { c = e }, enable() { !I && (I = !0, this.checkDupes(c), C(c)) }, enableTemp(e) { E.push(c), c = e, C(e), I = !0 }, disableTemp() { let e = E.pop(); null != e && (c = e), this.disable(), this.enable() }, disable() { I && (I = !1, N.forEach(e => e()), N = [], T.reset()) }, validateKeybind(e) { I && this.hasBind(e) && T.unbind(e) }, hasBind(e) { let t = p(c); return e = (e = e.replace("meta", "cmd")).replace(/right |left /i, "").trim(), t.includes(e) } } }, 317770: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return i } }), n("47120"), n("17089"); class i { initialize() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; !this.isInitialized && (this.isInitialized = !0, this._initialize(...t)) } terminate() { this.isInitialized && (this.isInitialized = !1, this._terminate()) } constructor() { var e, t, n; e = this, n = !1, (t = "isInitialized") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 673750: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MessageDataType: function() { return r }, getFailedMessageId: function() { return v }, isMessageDataEdit: function() { return L } }), n("47120"); var i, r, s, a, o = n("512722"), l = n.n(o), u = n("261470"), d = n("544891"), _ = n("911969"), c = n("367907"), E = n("710845"), I = n("432877"), T = n("873741"), f = n("314897"), S = n("866960"), h = n("70956"), A = n("403182"), m = n("651655"), N = n("861990"), p = n("141795"), O = n("981631"); function C(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let R = null; __OVERLAY__ && (R = n("237997").default), (s = i || (i = {})).OVERLAY_UNLOCKED = "overlay_unlocked", s.OVERLAY_UNLOCKED_PINNED = "overlay_unlocked_pinned", s.OVERLAY_LOCKED_ACTIVATED = "overlay_locked_activated", (a = r || (r = {}))[a.SEND = 0] = "SEND", a[a.EDIT = 1] = "EDIT", a[a.COMMAND = 2] = "COMMAND"; let g = e => 0 === e.type, L = e => 1 === e.type, v = e => g(e) ? e.message.nonce : L(e) ? e.message.messageId : e.message.data.id, D = [1 * h.default.Millis.MINUTE, 5 * h.default.Millis.MINUTE]; class M extends m.default { isFull() { return this.queue.length >= this.maxSize } drain(e, t) { switch (this.logger.log("Draining Message Queue with: ", e.type), e.type) { case 0: this.handleSend(e.message, t); break; case 1: this.handleEdit(e.message, t); break; case 2: this.handleCommand(e.message, t) } } cancelRequest(e) { var t; null === (t = this.requests.get(e)) || void 0 === t || t.abort(), this.requests.delete(e), this.cancelQueueMetricTimers(e) } startQueueMetricTimers(e) { let t = D.map(e => setTimeout(() => { (0, c.trackWithMetadata)(O.AnalyticEvents.SEND_MESSAGE_QUEUED, { queued_duration_ms: e }) }, e)); this.analyticsTimeouts.set(e, t) } cancelQueueMetricTimers(e) { var t; null === (t = this.analyticsTimeouts.get(e)) || void 0 === t || t.forEach(clearTimeout), this.analyticsTimeouts.delete(e) } createResponseHandler(e, t) { return n => { if (null != e && (this.requests.delete(e), this.cancelQueueMetricTimers(e)), n.hasErr) return t(null, n); null != n.body && (n.body.code === O.AbortCodes.SLOWMODE_RATE_LIMITED || n.body.code === O.AbortCodes.CHANNEL_FOLLOWING_EDIT_RATE_LIMITED) ? t(null, n) : 429 === n.status ? t({ retryAfter: n.body.retry_after * h.default.Millis.SECOND }) : t(null, n) } } handleSend(e, t) { let n; let { channelId: i, file: r, filename: s, ...a } = e, o = (0, T.getSignalStrength)(), l = { mobile_network_type: S.default.getType(), ...a, ...null != o && { signal_strength: o } }; if (I.default.get("send_fail_100")) { this.logger.log("Skipping message sened because send_fail_100 is enabled"), t(null, { ok: !1, hasErr: !1, status: 500, headers: {}, body: "{}", text: "Simulated failure" }); return } null != R && (R.isInstanceUILocked() ? n = { location: "overlay_locked_activated" } : !R.isInstanceUILocked() && (n = R.isPinned(O.OverlayWidgets.TEXT) ? { location: "overlay_unlocked_pinned" } : { location: "overlay_unlocked" })); let _ = this.createResponseHandler(e.nonce, t), c = new AbortController; if (this.startQueueMetricTimers(e.nonce), null != r && null != s && "" !== s) d.HTTP.post({ url: O.Endpoints.MESSAGES(i), fields: Object.entries(l).map(e => { let [t, n] = e; return { name: t, value: n } }), attachments: [{ name: "file", file: r, filename: s }], context: n, oldFormErrors: !0, signal: c.signal, onRequestCreated: () => { null != e.nonce && this.requests.set(e.nonce, c) } }, _); else { let t = { timeout: 60 * h.default.Millis.SECOND, retries: 3, backoff: new u.default }; d.HTTP.post({ url: O.Endpoints.MESSAGES(i), body: l, context: n, oldFormErrors: !0, ...t, signal: c.signal, onRequestCreated: () => { null != e.nonce && this.requests.set(e.nonce, c) } }, _) } } handleEdit(e, t) { let { channelId: n, messageId: i, ...r } = e, s = new AbortController; d.HTTP.patch({ url: O.Endpoints.MESSAGE(n, i), body: r, retries: 1, oldFormErrors: !0, signal: s.signal, onRequestCreated: () => { this.requests.set(i, s) } }, this.createResponseHandler(i, t)) } handleCommand(e, t) { let n, { applicationId: i, guildId: r, channelId: s, data: a, nonce: o, attachments: u, maxSizeCallback: c, analytics_location: E, sectionName: I } = e, T = { type: _.InteractionTypes.APPLICATION_COMMAND, application_id: i, guild_id: r, channel_id: s, session_id: f.default.getSessionId(), data: a, nonce: o, analytics_location: E, section_name: I }; if (null != u) { T.data.attachments = [], n = []; T.data.attachments = u.map((e, t) => (l()(e.status === p.CloudUploadStatus.COMPLETED, "Uploads must be staged before trying to send a message"), (0, N.getAttachmentPayload)(e, t))) } let S = new AbortController; d.HTTP.post({ url: O.Endpoints.INTERACTIONS, fields: [{ name: "payload_json", value: JSON.stringify(T) }], attachments: n, signal: S.signal, onRequestCreated: e => { this.requests.set(o, S), e.on("progress", e => { let { total: t } = e, n = (0, A.maxFileSize)(r); null != t && t > n && (this.cancelRequest(o), null == c || c(n)) }) } }, this.createResponseHandler(o, t)) } constructor(e = 5) { super(new E.default("MessageQueue")), C(this, "maxSize", void 0), C(this, "requests", void 0), C(this, "analyticsTimeouts", void 0), this.maxSize = e, this.requests = new Map, this.analyticsTimeouts = new Map } } t.default = new M }, 798140: function(e, t, n) { "use strict"; n.r(t), n.d(t, { computeIsMuted: function() { return i }, default: function() { return s }, isTemporarilyMuted: function() { return r } }); function i(e) { var t; let { muted: n, mute_config: i } = e; return !!n && (null == (t = i) || null == t.end_time || new Date(t.end_time) >= new Date) } function r(e) { let { muted: t, mute_config: n } = e; return !!t && null != n && null != n.end_time && new Date(n.end_time) >= new Date } class s { reset() { Object.values(this.timers).forEach(e => clearTimeout(e)), this.timers = {} } setTimer(e, t, n) { var i; if (null == e || null == t) return !1; let r = null == (i = t).end_time ? null : new Date(i.end_time).getTime() - Date.now(); return null != r && (!!(r <= 0) || (this.timers[e] = setTimeout(n, Math.max(0, r)), !1)) } clearTimer(e) { null != e && e in this.timers && (clearTimeout(this.timers[e]), delete this.timers[e]) } constructor() { var e, t, n; e = this, n = void 0, (t = "timers") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, this.timers = {} } } }, 140828: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("379649"), r = n("866960"), s = n("981631"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; return null != e ? Math.round(e) : t } class l { _initStats() { let e = { effectiveConnectionSpeedBuckets: {}, connectionTypeBuckets: {} }; return Object.values(s.NetworkConnectionTypes).forEach(t => { e.connectionTypeBuckets[t] = 0 }), Object.values(s.NetworkConnectionSpeeds).forEach(t => { e.effectiveConnectionSpeedBuckets[t] = 0 }), e } getStats() { let { _networkStats: e } = this; return { duration_connection_type_wifi: o(e.connectionTypeBuckets[s.NetworkConnectionTypes.WIFI]), duration_connection_type_cellular: o(e.connectionTypeBuckets[s.NetworkConnectionTypes.CELLULAR]), duration_connection_type_ethernet: o(e.connectionTypeBuckets[s.NetworkConnectionTypes.ETHERNET]), duration_connection_type_bluetooth: o(e.connectionTypeBuckets[s.NetworkConnectionTypes.BLUETOOTH]), duration_connection_type_other: o(e.connectionTypeBuckets[s.NetworkConnectionTypes.OTHER]), duration_connection_type_unknown: o(e.connectionTypeBuckets[s.NetworkConnectionTypes.UNKNOWN]), duration_connection_type_none: o(e.connectionTypeBuckets[s.NetworkConnectionTypes.NONE]), duration_effective_connection_speed_2g: o(e.effectiveConnectionSpeedBuckets[s.NetworkConnectionSpeeds.TWO_G]), duration_effective_connection_speed_3g: o(e.effectiveConnectionSpeedBuckets[s.NetworkConnectionSpeeds.THREE_G]), duration_effective_connection_speed_4g: o(e.effectiveConnectionSpeedBuckets[s.NetworkConnectionSpeeds.FOUR_G]), duration_effective_connection_speed_5g: o(e.effectiveConnectionSpeedBuckets[s.NetworkConnectionSpeeds.FIVE_G]), duration_effective_connection_speed_unknown: o(e.effectiveConnectionSpeedBuckets[s.NetworkConnectionSpeeds.UNKNOWN]) } } incrementNetworkStats(e) { let t = (e - this._lastSampleTimestamp) / 1e3, n = r.default.getEffectiveConnectionSpeed(); n === s.NetworkConnectionSpeeds.SLOW_TWO_G && (n = s.NetworkConnectionSpeeds.TWO_G); let i = r.default.getType(); i === s.NetworkConnectionTypes.WIMAX && (i = s.NetworkConnectionTypes.WIFI), this._networkStats.effectiveConnectionSpeedBuckets[n] += t, this._networkStats.connectionTypeBuckets[i] += t, this._lastSampleTimestamp = e } constructor() { a(this, "_networkStats", void 0), a(this, "_lastSampleTimestamp", void 0), this._networkStats = this._initStats(), this._lastSampleTimestamp = (0, i.now)() } } }, 726542: function(e, t, n) { "use strict"; n.r(t); var i = n("392711"), r = n.n(i), s = n("692547"), a = n("591759"), o = n("981631"); let l = [{ type: o.PlatformTypes.TWITCH, name: "Twitch", color: s.default.unsafe_rawColors.TWITCH.css, icon: { lightPNG: n("635643"), darkPNG: n("635643"), whitePNG: n("800346"), lightSVG: n("160050"), darkSVG: n("160050"), whiteSVG: n("235779") }, enabled: !0, getPlatformUserUrl: e => { let { name: t } = e; return "https://www.twitch.tv/".concat(encodeURIComponent(t)) }, domains: ["twitch.tv", "twitch.com"] }, { type: o.PlatformTypes.YOUTUBE, name: "YouTube", color: s.default.unsafe_rawColors.YOUTUBE.css, icon: { lightPNG: n("459862"), darkPNG: n("459862"), whitePNG: n("934689"), lightSVG: n("529923"), darkSVG: n("529923"), whiteSVG: n("141989") }, enabled: !0, getPlatformUserUrl: e => { let { id: t } = e; return "https://www.youtube.com/channel/".concat(encodeURIComponent(t)) }, domains: ["youtube.com", "youtu.be"] }, { type: o.PlatformTypes.BATTLENET, name: "Battle.net", color: s.default.unsafe_rawColors.BATTLENET.css, icon: { lightPNG: n("414680"), darkPNG: n("414680"), whitePNG: n("573103"), lightSVG: n("424160"), darkSVG: n("424160"), whiteSVG: n("929858") }, enabled: !0 }, { type: o.PlatformTypes.BUNGIE, name: "Bungie.net", color: s.default.unsafe_rawColors.BUNGIE.css, icon: { lightPNG: n("953522"), darkPNG: n("706264"), whitePNG: n("610891"), lightSVG: n("459293"), darkSVG: n("970714"), whiteSVG: n("891049") }, enabled: !0 }, { type: o.PlatformTypes.SKYPE, name: "Skype", color: s.default.unsafe_rawColors.SKYPE.css, icon: { lightPNG: n("575439"), darkPNG: n("575439"), whitePNG: n("27163"), lightSVG: n("721782"), darkSVG: n("721782"), whiteSVG: n("144578") }, enabled: !1, getPlatformUserUrl: e => { let { id: t } = e; return "skype:".concat(encodeURIComponent(t), "?userinfo") } }, { type: o.PlatformTypes.LEAGUE_OF_LEGENDS, name: "League of Legends", color: s.default.unsafe_rawColors.LOL.css, icon: { lightPNG: n("275556"), darkPNG: n("275556"), whitePNG: n("26963"), lightSVG: n("153711"), darkSVG: n("153711"), whiteSVG: n("327574") }, enabled: !0 }, { type: o.PlatformTypes.STEAM, name: "Steam", color: s.default.unsafe_rawColors.STEAM.css, icon: { lightPNG: n("929234"), darkPNG: n("170131"), whitePNG: n("170131"), lightSVG: n("227304"), darkSVG: n("763613"), whiteSVG: n("763613") }, enabled: !0, getPlatformUserUrl: e => { let { id: t } = e; return "https://steamcommunity.com/profiles/".concat(encodeURIComponent(t)) }, hasMetadata: !0 }, { type: o.PlatformTypes.REDDIT, name: "Reddit", color: s.default.unsafe_rawColors.REDDIT.css, icon: { lightPNG: n("211434"), darkPNG: n("211434"), whitePNG: n("682170"), lightSVG: n("592358"), darkSVG: n("592358"), whiteSVG: n("972428") }, enabled: !0, getPlatformUserUrl: e => { let { name: t } = e; return "https://www.reddit.com/u/".concat(encodeURIComponent(t)) }, hasMetadata: !0 }, { type: o.PlatformTypes.FACEBOOK, name: "Facebook", color: s.default.unsafe_rawColors.FACEBOOK.css, icon: { lightPNG: n("762019"), darkPNG: n("762019"), whitePNG: n("620530"), lightSVG: n("589232"), darkSVG: n("589232"), whiteSVG: n("318049") }, enabled: !0 }, { type: o.PlatformTypes.TWITTER_LEGACY, name: "Twitter", color: s.default.unsafe_rawColors.TWITTER.css, icon: { lightPNG: n("954549"), darkPNG: n("954549"), whitePNG: n("550886"), lightSVG: n("90961"), darkSVG: n("90961"), whiteSVG: n("819273") }, enabled: !1, getPlatformUserUrl: e => { let { name: t } = e; return "https://twitter.com/".concat(encodeURIComponent(t)) }, domains: ["twitter.com"], hasMetadata: !0 }, { type: o.PlatformTypes.TWITTER, name: "X", color: s.default.unsafe_rawColors.TWITTER.css, icon: { lightPNG: n("327555"), darkPNG: n("126776"), whitePNG: n("778385"), lightSVG: n("257325"), darkSVG: n("451168"), whiteSVG: n("580927") }, enabled: !0, getPlatformUserUrl: e => { let { name: t } = e; return "https://x.com/".concat(encodeURIComponent(t)) }, domains: ["x.com"], hasMetadata: !0 }, { type: o.PlatformTypes.SPOTIFY, name: "Spotify", color: s.default.unsafe_rawColors.SPOTIFY.css, icon: { lightPNG: n("182553"), darkPNG: n("182553"), whitePNG: n("955852"), lightSVG: n("545734"), darkSVG: n("545734"), whiteSVG: n("136142") }, enabled: !0, getPlatformUserUrl: e => { let { id: t } = e; return "https://open.spotify.com/user/".concat(encodeURIComponent(t)) } }, { type: o.PlatformTypes.XBOX, name: "Xbox", color: s.default.unsafe_rawColors.XBOX.css, icon: { lightPNG: n("979660"), darkPNG: n("157981"), whitePNG: n("157981"), lightSVG: n("66992"), darkSVG: n("158173"), whiteSVG: n("158173"), customPNG: n("606115") }, enabled: !0 }, { type: o.PlatformTypes.SAMSUNG, name: "Samsung Galaxy", color: s.default.unsafe_rawColors.SAMSUNG.css, icon: { lightPNG: n("664982"), darkPNG: n("664982"), whitePNG: n("442123"), lightSVG: n("601568"), darkSVG: n("601568"), whiteSVG: n("7007") }, enabled: !1 }, { type: o.PlatformTypes.GITHUB, name: "GitHub", color: s.default.unsafe_rawColors.GITHUB.css, icon: { lightPNG: n("843605"), darkPNG: n("789822"), whitePNG: n("789822"), lightSVG: n("247519"), darkSVG: n("184887"), whiteSVG: n("184887") }, enabled: !0, getPlatformUserUrl: e => { let { name: t } = e; return "https://github.com/".concat(encodeURIComponent(t)) }, domains: ["github.com"] }, { type: o.PlatformTypes.PLAYSTATION, name: "PlayStation Network", color: s.default.unsafe_rawColors.PLAYSTATION.css, icon: { lightPNG: n("385751"), darkPNG: n("399592"), whitePNG: n("399592"), lightSVG: n("223434"), darkSVG: n("350379"), whiteSVG: n("350379") }, enabled: !0 }, { type: o.PlatformTypes.PLAYSTATION_STAGING, name: "PlayStation Network (Staging)", color: s.default.unsafe_rawColors.PLAYSTATION.css, icon: { lightPNG: n("399592"), darkPNG: n("385751"), whitePNG: n("385751"), lightSVG: n("350379"), darkSVG: n("223434"), whiteSVG: n("223434") }, enabled: !1 }, { type: o.PlatformTypes.EPIC_GAMES, name: "Epic Games", icon: { lightPNG: n("707873"), darkPNG: n("549727"), whitePNG: n("549727"), lightSVG: n("769582"), darkSVG: n("532293"), whiteSVG: n("532293") }, enabled: !0 }, { type: o.PlatformTypes.RIOT_GAMES, name: "Riot Games", icon: { lightPNG: n("406818"), darkPNG: n("406818"), whitePNG: n("451192"), lightSVG: n("596001"), darkSVG: n("596001"), whiteSVG: n("641169") }, enabled: !0 }, { type: o.PlatformTypes.ROBLOX, name: "Roblox", icon: { lightPNG: n("670423"), darkPNG: n("414773"), whitePNG: n("731596"), lightSVG: n("553715"), darkSVG: n("678922"), whiteSVG: n("752561") }, enabled: !1 }, { type: o.PlatformTypes.PAYPAL, name: "PayPal", icon: { lightPNG: n("501001"), darkPNG: n("501001"), whitePNG: n("219389"), lightSVG: n("698946"), darkSVG: n("698946"), whiteSVG: n("737531") }, enabled: !0, hasMetadata: !0 }, { type: o.PlatformTypes.EBAY, name: "eBay", icon: { lightPNG: n("215741"), darkPNG: n("215741"), whitePNG: n("463728"), lightSVG: n("519515"), darkSVG: n("519515"), whiteSVG: n("98668") }, enabled: !0, hasMetadata: !0, getPlatformUserUrl: e => { let { name: t } = e; return "https://www.ebay.com/usr/".concat(encodeURIComponent(t)) } }, { type: o.PlatformTypes.TIKTOK, name: "TikTok", icon: { lightPNG: n("699308"), darkPNG: n("137181"), whitePNG: n("137181"), lightSVG: n("890849"), darkSVG: n("155885"), whiteSVG: n("155885") }, enabled: !0, hasMetadata: !0, getPlatformUserUrl: e => { let { name: t } = e; return "https://www.tiktok.com/@".concat(encodeURIComponent(t)) } }, { type: o.PlatformTypes.INSTAGRAM, name: "Instagram", icon: { lightPNG: n("232720"), darkPNG: n("232720"), whitePNG: n("71996"), lightSVG: n("526659"), darkSVG: n("526659"), whiteSVG: n("326720") }, enabled: !1, getPlatformUserUrl: e => { let { name: t } = e; return "https://www.instagram.com/".concat(encodeURIComponent(t)) } }, { type: o.PlatformTypes.CRUNCHYROLL, name: "Crunchyroll", color: s.default.unsafe_rawColors.CRUNCHYROLL.css, icon: { lightPNG: n("469024"), darkPNG: n("469024"), whitePNG: n("469024"), lightSVG: n("654009"), darkSVG: n("654009"), whiteSVG: n("670618") }, enabled: !0 }, { type: o.PlatformTypes.DOMAIN, name: "Domain", icon: { lightPNG: n("476735"), darkPNG: n("561036"), whitePNG: n("561036"), lightSVG: n("329074"), darkSVG: n("664935"), whiteSVG: n("664935") }, getPlatformUserUrl: e => { let { id: t } = e; return "https://".concat(t, "/") }, enabled: !0 }, { type: o.PlatformTypes.AMAZON_MUSIC, name: "Amazon Music", icon: { lightPNG: n("495036"), darkPNG: n("495036"), whitePNG: n("495036"), lightSVG: n("605098"), darkSVG: n("605098"), whiteSVG: n("605098") }, enabled: !1 }], u = r().keyBy(l, "type"), d = {}; l.forEach(e => { var t; null === (t = e.domains) || void 0 === t || t.forEach(t => { d[t] = e }) }), t.default = { get(e) { var t; return null !== (t = u[e]) && void 0 !== t ? t : null }, getByUrl(e) { let t = a.default.toURLSafe(e); if (null == t) return; let n = t.hostname; return d[n.startsWith("www.") ? n.slice(4) : n] }, isSupported: e => Object.prototype.hasOwnProperty.call(u, e), map: e => l.map(e), filter(e) { let t = l.filter(e); return t.sort((e, t) => { let { name: n } = e, { name: i } = t; return n.localeCompare(i) }), t }, find: e => l.find(e) } }, 632243: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("710845"), r = n("358085"), s = n("579806"); let a = new i.default("ProgressBarManager"); t.default = new class e { setProgress(e, t) { if (!(0, r.isDesktop)()) throw Error("cannot set progress from non-native"); if (null != this.taskID && this.taskID !== e) { a.warn("".concat(this.taskID, " is already running. cannot set ").concat(e)); return } this.taskID = e, s.default.window.setProgressBar(t) } clearProgress(e) { if (!(0, r.isDesktop)()) throw Error("cannot clear progress from non-native"); if (null == this.taskID) { a.warn("cannot clear progress. No current progress running."); return } if (this.taskID !== e) { a.warn("cannot clear progress of ".concat(e, " when ").concat(this.taskID, " is running")); return } this.taskID = null, s.default.window.setProgressBar(-1) } constructor() { var e, t, n; e = this, n = void 0, (t = "taskID") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 349033: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { NON_TOKEN_TYPE: function() { return s }, Token: function() { return u } }), n("47120"), n("789020"), n("653041"); let r = /.+/g, s = "NON_TOKEN"; function a(e, t, n) { if (null == t) return null; for (let i = 0; i < t.length; i++) { let r; let s = t[i], a = o(e.match(s.regex), n); if (null != a) { let { cache: e } = s; if (null != e && null != (r = e.get(a[0])) && ((r = new u(r)).start = a.index), null == r) { if (r = new u(a, s.type), null != s.validator && !s.validator(r)) continue; null != e && !(null == e ? void 0 : e.has(a[0])) && e.set(a[0], r) } return r } } return null } function o(e, t) { if (null == e) return null; let n = [...e]; return n.index = t, n } class l { reset(e) { this._rules = [], this._followers = {}, this._nonTokenType = null != e ? e : s } addRule(e) { let t; let { type: n, follows: i, validator: r } = e, { regex: s } = e; if ("^" !== s.source.charAt(0) && (s = new RegExp("^".concat(s.source), s.flags)), null != r && (t = new Map), null == i) { this._rules.push({ regex: s, type: n, validator: r, cache: t }); return } i.forEach(e => { null == this._followers[e] && (this._followers[e] = []), this._followers[e].push({ regex: s, type: n, validator: r, cache: t }) }) } tokenize(e) { let t, n = e, i = "", s = 0, a = []; for (; n.length > 0;) { let e = this._getMatch(n, t, s + i.length); null != e ? (null != i && "" !== i && a.push(new u(o(i.match(r), s), this._nonTokenType)), t = e, a.push(e), s += t.length + i.length, n = n.substring(t.length), i = "") : (i += n[0], n = n.substring(1)) } return null != i && "" !== i && a.push(new u(o(i.match(r), s), this._nonTokenType)), a } clearCache() { for (let e in this._rules.forEach(e => { var t; return null === (t = e.cache) || void 0 === t ? void 0 : t.clear() }), this._followers) this._followers[e].forEach(e => { var t; return null === (t = e.cache) || void 0 === t ? void 0 : t.clear() }) } _getMatch(e, t, n) { let i; let r = null != t ? t.type : null; return (null == t ? void 0 : t.end) === n && (i = a(e, this._followers[String(r)], n)), null == i && (i = a(e, this._rules, n)), i } constructor(e = [], t) { i(this, "_rules", []), i(this, "_followers", {}), i(this, "_nonTokenType", s), this.reset(t), e.forEach(e => this.addRule(e)) } } i(l, "NON_TOKEN_TYPE", void 0), i(l, "Token", void 0); class u { get end() { return this.start + this.length } get length() { return this.match[0].length } valueOf() { return this.match[0] } getFullMatch() { return this.match[0] } getMatch() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0; return this.match[e] } setData(e, t) { null == this._data && (this._data = new Map), this._data.set(e, t) } getData(e) { if (null != this._data) return this._data.get(e) } constructor(e, t) { if (i(this, "match", void 0), i(this, "start", void 0), i(this, "type", void 0), i(this, "_data", void 0), e instanceof u) this.match = [...e.match], this.start = e.start, this.type = e.type, null != e._data && (this._data = e._data); else if (null != e) { var n; this.match = [...e], this.start = "string" == typeof e ? 0 : null !== (n = e.index) && void 0 !== n ? n : 0, this.type = t } else this.match = [], this.start = 0, this.type = t } } l.NON_TOKEN_TYPE = s, l.Token = u, t.default = l }, 536285: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("836560"), r = n("525654"), s = n.n(r), a = n("664751"), o = n("153832"), l = n("544891"), u = n("996106"), d = n("981631"); let _ = d.RPC_STARTING_PORT + d.RPC_PORT_RANGE - 1; function c(e, t) { if (null == e || null == t) throw Error("cmd and name required"); return "".concat(e, ":").concat(t) } let E = a.parse(location.search.slice(1)), I = parseInt(null != E.rpc && "" !== E.rpc ? E.rpc : d.RPC_STARTING_PORT, 10), T = null; class f extends i.EventEmitter { get port() { return I } get connected() { return null != T && T.readyState === WebSocket.OPEN } connect() { if (null == T) { if (I > _) { I = d.RPC_STARTING_PORT, this.emit("disconnected"); return } try { T = new WebSocket("ws://127.0.0.1:".concat(this.port, "/?v=").concat(d.RPC_VERSION)) } catch (e) { this.disconnect({ code: d.RPCCloseCodes.CLOSE_ABNORMAL }); return } null != T && (T.onmessage = e => { let t; try { if ("string" == typeof e.data) t = JSON.parse(e.data); else throw Error("payload data not a string") } catch (e) { this.emit("error", e), this.disconnect(); return } let { cmd: n, evt: i, nonce: r, data: s } = t; if (n === d.RPCCommands.DISPATCH) { if (i === d.RPCEvents.READY) { this.emit("connected"); return } if (i === d.RPCEvents.ERROR) { this.emit("error", new u.default({ errorCode: s.code }, s.message)), this.disconnect(); return } this.emit(c(n, i), s); return } let a = null; i === d.RPCEvents.ERROR && (a = new u.default({ errorCode: s.code }, s.message), s = null), this.emit(c(n, r), a, s) }, T.onclose = T.onerror = e => this.disconnect(e)) } } disconnect(e) { if (null != e && "code" in e && [d.RPCCloseCodes.CLOSE_ABNORMAL, d.RPCCloseCodes.INVALID_CLIENTID].includes(e.code)) { I++, T = null, this.connect(); return } null != T && (this.emit("disconnected"), T.close(), T = null) } subscribe(e, t, n) { return this.on(c(d.RPCCommands.DISPATCH, e), n), this.request(d.RPCCommands.SUBSCRIBE, t, e) } unsubscribe(e, t, n) { return this.removeListener(c(d.RPCCommands.DISPATCH, e), n), this.request(d.RPCCommands.UNSUBSCRIBE, t, e) } request(e, t, n) { return new Promise((i, r) => { if (!this.connected) { this.once("connected", () => { this.removeAllListeners("disconnected"), i(this.request(e, t, n)) }), this.once("disconnected", () => { this.removeAllListeners("connected"), r(Error("disconnected during request")) }), this.connect(); return } let s = (0, o.v4)(), a = JSON.stringify({ cmd: e, args: t, evt: n, nonce: s }); this.once(c(e, s), (e, t) => null != e ? r(e) : i(t)), null == T || T.send(a) }) } requestOnce(e, t, n) { return l.HTTP.post({ url: "http://127.0.0.1:".concat(this.port, "/rpc?v=").concat(d.RPC_VERSION), body: { cmd: e, args: t, evt: n, nonce: (0, o.v4)() } }).then(e => { let { body: { evt: t, data: n } } = e; if (t === d.RPCEvents.ERROR) throw new u.default({ errorCode: n.code }, n.message); return n }) } requestRedirect(e, t, n) { if ("Chrome" === s().name && parseInt(s().version, 10) >= 58) return this.requestOnce(e, t, n); let i = encodeURIComponent(JSON.stringify({ cmd: e, args: t, evt: n, nonce: (0, o.v4)() })), r = encodeURIComponent("".concat(location.protocol, "//").concat(location.host).concat(location.pathname, "?done=true")); return window.open("http://127.0.0.1:".concat(this.port, "/rpc?v=").concat(d.RPC_VERSION, "&payload=").concat(i, "&callback=").concat(r), "_self"), new Promise(() => null) } } t.default = new f }, 859401: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("653041"), n("47120"); var i = n("392711"), r = n.n(i); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = []; class o { static create() { let e = new o; return a.push(e), e.record } getTotalBytes() { return r().sum(Object.values(this.bytes)) } constructor() { s(this, "bytes", {}), s(this, "record", e => { if (null != e) { for (let t in e.rtp.inbound) for (let n of e.rtp.inbound[t]) { let e = "inbound-".concat(t, "-").concat(n.type); !(e in this.bytes) && (this.bytes[e] = 0), this.bytes[e] = n.bytesReceived } for (let t of e.rtp.outbound) { let e = "outbound-".concat(t.type); !(e in this.bytes) && (this.bytes[e] = 0), this.bytes[e] = t.bytesSent } } }) } } }, 861687: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return eo } }), n("411104"), n("724458"), n("653041"), n("47120"); var i, r = n("654861"), s = n.n(r), a = n("108131"), o = n.n(a), l = n("729594"), u = n("153832"), d = n("261470"), _ = n("47770"), c = n("46973"), E = n("379649"), I = n("570140"), T = n("846027"), f = n("304680"), S = n("44744"), h = n("710845"), A = n("811660"), m = n("42352"), N = n("148959"), p = n("227196"), O = n("926951"), C = n("859132"), R = n("384406"), g = n("868616"), L = n("848886"), v = n("583215"), D = n("576574"), M = n("307320"), y = n("420363"); n("527702"); var P = n("736871"), U = n("214890"), b = n("592125"), G = n("131951"), w = n("19780"), k = n("226961"), B = n("936349"), V = n("594174"), x = n("626135"), F = n("931619"), H = n("358085"), Y = n("74538"), j = n("579806"), W = n("859401"), K = n("437263"), z = n("423343"), Z = n("685756"), X = n("655306"), Q = n("583794"), q = n("824096"), J = n("53114"), $ = n("174532"), ee = n("895066"), et = n("981631"), en = n("474936"), ei = n("65154"); function er(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let es = /^https/.test((i = "https:", "https:")) ? "wss:" : "ws:"; function ea(e) { return e } class eo extends _.default { get quality() { let e = this.getLastPing(); if (this.state !== et.RTCConnectionStates.RTC_CONNECTED || void 0 === e) return et.RTCConnectionQuality.UNKNOWN; if (e > 500 || null != this._outboundLossRate && this._outboundLossRate > 10) return et.RTCConnectionQuality.BAD; if (e > 250 || null != this._outboundLossRate && this._outboundLossRate > 5) return et.RTCConnectionQuality.AVERAGE; else return et.RTCConnectionQuality.FINE } get endpoint() { return this._endpoint } set endpoint(e) { if (null == e) this._endpoint = null, this.hostname = null; else { e = "".concat(es, "//").concat(e); let { hostname: t, port: n } = l.parse(e), i = null != n ? parseInt(n) : NaN; null != t && (80 === i || 443 === i) && (e = "".concat(es, "//").concat(t)), this._endpoint = e + "/", this.hostname = t } } connect(e, t) { if (this._destroyed) throw Error("RTCConnection.connect(...): Attempting to connect on destroyed instance."); this._backoff.cancel(); let { endpoint: n, token: i } = this; if (this.endpoint = e, this.token = t, (n !== this.endpoint || i !== t) && (this._cleanupSocket(), this._mediaSessionId = null, null != n && (this._rtcConnectionId = (0, u.v4)(), I.default.dispatch({ type: "RTC_CONNECTION_UPDATE_ID", connection: this }))), null == this.endpoint) { this.setState(et.RTCConnectionStates.AWAITING_ENDPOINT); return } let r = this._socket; null != r && this._cleanupSocket(), (r = this._socket = new Z.default(this.endpoint)).on(Z.SocketEvent.Connecting, this._handleConnecting.bind(this, r)), r.on(Z.SocketEvent.Connect, this._handleConnect.bind(this, r)), r.on(Z.SocketEvent.Disconnect, this._handleDisconnect.bind(this, r)), r.on(Z.SocketEvent.Resuming, this._handleResuming.bind(this, r)), r.on(Z.SocketEvent.Ready, this._handleReady.bind(this, r)), r.on(Z.SocketEvent.Speaking, this._handleSpeaking.bind(this, r)), r.on(Z.SocketEvent.Video, this._handleVideo.bind(this, r)), r.on(Z.SocketEvent.Ping, this._handleControlPing.bind(this)), r.on(Z.SocketEvent.ClientDisconnect, this._handleClientDisconnect.bind(this)), r.on(Z.SocketEvent.Codecs, this._handleCodecs.bind(this)), r.on(Z.SocketEvent.MediaSessionId, this._handleMediaSessionId.bind(this)), r.on(Z.SocketEvent.MediaSinkWants, this._handleMediaSinkWants.bind(this)), r.on(Z.SocketEvent.VoiceBackendVersion, this._handleCodeVersion.bind(this)), r.on(Z.SocketEvent.KeyframeInterval, this._handleKeyframeInterval.bind(this)), r.on(Z.SocketEvent.Flags, this.handleFlags.bind(this)), r.on(Z.SocketEvent.Platform, this.handlePlatform.bind(this)), r.on(Z.SocketEvent.BandwidthEstimationExperiment, this._handleBandwidthEstimationExperiment.bind(this)), r.on(Z.SocketEvent.SecureFramesInit, this._handleSecureFramesInit.bind(this)), r.on(Z.SocketEvent.SecureFramesPrepareTransition, this._handleSecureFramesPrepareTransition.bind(this)), r.on(Z.SocketEvent.SecureFramesPrepareEpoch, this._handleSecureFramesPrepareEpoch.bind(this)), r.on(Z.SocketEvent.SecureFramesExecuteTransition, this._handleSecureFramesExecuteTransition.bind(this)), r.on(Z.SocketEvent.MLSExternalSenderPackage, this._handleMLSExternalSenderPackage.bind(this)), r.on(Z.SocketEvent.MLSProposals, this._handleMLSProposals.bind(this, r)), r.on(Z.SocketEvent.MLSPrepareCommitTransition, this._handleMLSPrepareCommitTransition.bind(this)), r.on(Z.SocketEvent.MLSWelcome, this._handleMLSWelcome.bind(this)), this._connectStartTime = (0, E.now)(), this._connectCount++, this._connecting = !0, null != r && this._socket === r && (this._trackVoiceConnectionConnecting(), this._encountered_socket_failure = !1, r.connect()) } destroy() { var e, t, n, i, r; if (this.logger.info("Destroy RTCConnection"), F.default.removeOnlineCallback(this._handleNetworkOnline), F.default.removeOfflineCallback(this._handleNetworkOffline), (0, H.isDesktop)() && (null === (r = this.powerMonitorListener) || void 0 === r || r.call(this)), this._backoff.cancel(), this._cleanupSocket(), null === (e = this._voiceQuality) || void 0 === e || e.stop(), this._voiceQuality = null, clearInterval(this._voiceQualityPeriodicStatsInterval), this._voiceQualityPeriodicStatsInterval = null, this._voiceQualityPeriodicStatsSequenceId = 0, this._noiseCancellationError = 0, null === (t = this._voiceDuration) || void 0 === t || t.stop(), this._voiceDuration = null, null === (n = this._videoQuality) || void 0 === n || n.stop(), this._videoQuality = null, this._videoHealthManager = null, null === (i = this._localMediaSinkWantsManager) || void 0 === i || i.reset(), null != this._connection) { let e = this._connection; this._connection = null, e.destroy() } this.removeAllListeners(), this._destroyed = !0 } sendSpeaking(e, t) { let n = this._socket; if (null != n) { let i = G.default.getPacketDelay(); n.speaking(e, i, t) } } sendVideo(e, t, n, i) { let r = this._socket; null != r && (0 !== t && (this._sentVideo = !0), this._sentVideo && r.video(e, t, n, i)) } getPings() { return this._pings } getAveragePing() { let e = this._pings.slice(0, Math.min(this._pings.length, 20)); return 0 === e.length || null == this._socket ? 0 : e.reduce((e, t) => e + t.value, 0) / e.length } getLastPing() { var e; return null === (e = this._pings[this._pings.length - 1]) || void 0 === e ? void 0 : e.value } getOutboundLossRate() { return this._outboundLossRate } getMediaSessionId() { return this._mediaSessionId } getRTCConnectionId() { return this._rtcConnectionId } getVoiceVersion() { return this.voiceVersion } getRtcWorkerVersion() { return this.rtcWorkerVersion } getDuration() { let e = this._connectCompletedTime > 0 ? (0, E.now)() - this._connectCompletedTime : 0; return e > 0 ? e : 0 } getPacketStats() { var e; return null === (e = this._voiceQuality) || void 0 === e ? void 0 : e.getPacketStats() } getCreatedTime() { return this._createdTime } getVideoHealthManager() { return this._videoHealthManager } getBandwidthEstimationExperiment() { return this._bandwidthEstimationExperiment } pauseStatsCollectionForUser(e, t) { let n = this.getOrCreateVideoQuality(); if (null == n) { this.logger.error("pauseStatsCollectionForUser: Unable to create videoQuality."); return } t ? n.addUserToStatsCollectionPausedSet(e) : n.removeUserFromStatsCollectionPausedSet(e) } setState(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; this.logger.info("RTC connection state: ".concat(this.state, " => ").concat(e)), this.state = e, this.stateHistory.update(this.state), this.emit(K.RTCConnectionEvent.State, e, { hostname: this.hostname, channelId: this.trueChannelId, context: this.context }, t) } expeditedHeartbeat(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "", n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = this._socket; null != i && i.expeditedHeartbeat(e, t, n) && this._backoff.cancel() } resetBackoff() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", t = this._socket; null != t && t.resetBackoff(e) && this._backoff.cancel() } setAppBackgrounded(e, t) { var n; null === (n = this._localMediaSinkWantsManager) || void 0 === n || n.setAppBackgrounded(e, t) } setSelectedParticipant(e) { var t; null === (t = this._localMediaSinkWantsManager) || void 0 === t || t.setSelectedParticipant(e) } setPipOpen(e) { var t; null === (t = this._localMediaSinkWantsManager) || void 0 === t || t.setPipOpen(e) } setClipRecordUser(e, t, n) { var i, r; null === (r = this._connection) || void 0 === r || null === (i = r.setClipRecordUser) || void 0 === i || i.call(r, e, t, n) } setSimulcastDebugOverride(e, t, n) { var i, r; t === this.context && (t === ei.MediaEngineContextTypes.DEFAULT ? null === (i = this._localMediaSinkWantsManager) || void 0 === i || i.setSimulcastDebugOverride(e, n) : null === (r = this._goLiveQualityManager) || void 0 === r || r.setSimulcastDebugOverride(e, n)) } set channelId(e) { this._channelId = e, this.channelIds.add(e) } get channelId() { return this._channelId } get trueChannelId() { return null != this.rtcServerId ? s()(this.rtcServerId).prev().toString() : this.channelId } _cleanupSocket() { let e = this._socket; null != e && (e.close(), e.removeAllListeners(), this._socket = null) } _chooseExperiments(e) { let t = []; if (this._recordingEnabled && t.push("connection_log"), null != this.guildId) { let { shouldOverrideKrisp: e, overrideKrispSetting: n } = g.default.getCurrentConfig({ guildId: this.guildId, location: "handleReady" }, { autoTrackExposure: !0 }); e && (n ? t.push("force_krisp_enabled") : t.push("force_krisp_disabled")) } if (G.default.supports(ei.Features.FIXED_KEYFRAME_INTERVAL) && t.push("fixed_keyframe_interval"), 0 !== this._supportedBandwidthEstimationExperiments.length) { let { enabled: e, fullname: n } = O.default.getConfig(!0, this._supportedBandwidthEstimationExperiments); e && t.push(n) } this._selectedExperiments = t } _handleConnecting(e) { null != this.endpoint && this.logger.info("Connecting to RTC server ".concat(this.endpoint, ", rtc-connection-id: ").concat(this.getRTCConnectionId())), this.setState(et.RTCConnectionStates.CONNECTING) } _handleConnect(e) { var t, n; let i = this.token; if (null == i) throw Error("RTCConnection._handleConnect(...): Token is missing."); this.logger.info("Connected to RTC server."), e.identify({ serverId: null !== (n = null !== (t = this.rtcServerId) && void 0 !== t ? t : this.guildId) && void 0 !== n ? n : this.channelId, userId: this.userId, sessionId: this.sessionId, token: i, maxSecureFramesVersion: G.default.getSupportedSecureFramesProtocolVersion(this.guildId), video: G.default.supports(ei.Features.VIDEO), streamParameters: G.default.getVideoStreamParameters(this.context) }), this.setState(et.RTCConnectionStates.AUTHENTICATING) } _handleDisconnect(e, t, n, i) { var r, s, a, o, l, u; this.logger.info("Disconnected from RTC server, clean: ".concat(t, ", code: ").concat(n, ", reason: ").concat(i, ", state: ").concat(this.state)), !t && this._connecting && !this._encountered_socket_failure && (x.default.track(et.AnalyticEvents.VOICE_CONNECTION_SOCKET_FAILURE, { ...this._getAnalyticsProperties(), hostname: this.hostname, connect_count: this._connectCount, code: n, reason: i }), this._encountered_socket_failure = !0), w.default.getRemoteDisconnectVoiceChannelId() === this.channelId && (null === (l = this._connection) || void 0 === l || l.wasRemoteDisconnected()); let d = "Force Close" !== i; if (d) { let e = this._backoff.fail(this.reconnect); this.logger.warn("Disconnect was not clean! reason=".concat(i, ". Reconnecting in ").concat((e / 1e3).toFixed(2), " seconds.")) } if (this.state !== et.RTCConnectionStates.DISCONNECTED) { let e = this._videoQuality; null != e && this.context === ei.MediaEngineContextTypes.DEFAULT && (e.stop(), this._sentVideo && e.getOutboundStats().forEach(t => { var n; (null !== (n = t.num_frames) && void 0 !== n ? n : 0) > 0 && x.default.track(et.AnalyticEvents.VIDEO_STREAM_ENDED, { ...this._getAnalyticsProperties(), media_session_id: this.getMediaSessionId(), sender_user_id: this.userId, reason: i, participant_type: "sender", guild_region: B.default.getRegion(this.hostname), hostname: this.hostname, hardware_enabled: G.default.getHardwareH264(), ...t, ...e.getNetworkStats(), ...e.getCodecUsageStats("sender", this.userId), ...this._soundshareStats.getStats(), device_performance_class: (0, A.getMediaPerformanceClass)() }) }), e.getInboundParticipants().forEach(t => { var n; let r = e.getInboundStats(t); (null !== (n = null == r ? void 0 : r.num_frames) && void 0 !== n ? n : 0) > 0 && x.default.track(et.AnalyticEvents.VIDEO_STREAM_ENDED, { ...this._getAnalyticsProperties(), media_session_id: this.getMediaSessionId(), sender_user_id: t, reason: i, participant_type: "receiver", guild_region: B.default.getRegion(this.hostname), hostname: this.hostname, hardware_enabled: G.default.getHardwareH264(), ...r, ...e.getNetworkStats(), ...e.getCodecUsageStats("receiver", t) }) })); let t = B.default.shouldIncludePreferredRegion() ? B.default.getPreferredRegion() : null, n = G.default.getSettings(), r = b.default.getChannel(this.channelId); x.default.track(et.AnalyticEvents.VOICE_DISCONNECT, { ...this._getAnalyticsProperties(), hostname: this.hostname, port: this.port, protocol: this.protocol, reconnect: d, reason: i, duration: this.getDuration(), ...null != this._voiceQuality ? this._voiceQuality.getMosStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getPacketStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getBytesStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getBufferStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getNetworkStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getSystemResourceStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getFrameOpStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getDurationStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getTransportStats() : null, ...null != this._voiceQuality ? this._voiceQuality.getE2EEStats() : null, ...null != this._voiceDuration ? this._voiceDuration.getDurationStats() : null, media_session_id: this.getMediaSessionId(), channel_bitrate: null != r ? r.bitrate : null, cloudflare_best_region: t, connect_count: this._connectCount, ping_average: Math.round(this.getAveragePing()), ping_bad_count: this._pingBadCount, ping_timeout: this._pingTimeouts.length, input_detected: this._inputDetected, no_input_detected_notice: G.default.getNoInputDetectedNotice(), audio_input_mode: n.mode, automatic_audio_input_sensitivity_enabled: n.modeOptions.autoThreshold, audio_input_sensitivity: n.modeOptions.threshold, echo_cancellation_enabled: n.echoCancellation, noise_suppression_enabled: n.noiseSuppression, noise_cancellation_enabled: n.noiseCancellation, noise_canceller_error: this._noiseCancellationError, automatic_gain_control_enabled: n.automaticGainControl, voice_output_volume: n.outputVolume, encryption_mode: this._encryptionMode, channel_count: this.channelIds.size, input_device: this.getInputDeviceName(), output_device: this.getOutputDeviceName(), device_performance_class: (0, A.getMediaPerformanceClass)(), num_fast_udp_reconnects: null != this._connection ? null === (u = this._connection) || void 0 === u ? void 0 : u.getNumFastUdpReconnects() : null, parent_media_session_id: this.parentMediaSessionId }); let s = this.getMediaSessionId(); G.default.getMediaEngine().getCodecSurvey().then(e => { let t = JSON.parse(e); if (null == t || null == t.available_video_encoders || null == t.available_video_decoders) throw Error("codec survey is not available"); x.default.track(et.AnalyticEvents.VOICE_CODEC_DETECTED, { ...t, rtc_connection_id: this.getRTCConnectionId(), media_session_id: s }) }).catch(e => { this.logger.warn(e) }) } if (this._pingTimeouts = [], this._pings = [], this._connectCompletedTime = 0, this._pingBadCount = 0, this._inputDetected = !1, this._mediaSessionId = null, null === (r = this._voiceQuality) || void 0 === r || r.stop(), this._voiceQuality = null, clearInterval(this._voiceQualityPeriodicStatsInterval), this._voiceQualityPeriodicStatsInterval = null, this._voiceQualityPeriodicStatsSequenceId = 0, this._noiseCancellationError = 0, null === (s = this._voiceDuration) || void 0 === s || s.stop(), this._voiceDuration = null, null === (a = this._videoQuality) || void 0 === a || a.stop(), this._videoQuality = null, this._videoHealthManager = null, null === (o = this._localMediaSinkWantsManager) || void 0 === o || o.reset(), null != this._connection) { let e = this._connection; this._connection = null, e.destroy() } this.setState(et.RTCConnectionStates.DISCONNECTED, { willReconnect: d }) } _handleResuming(e) { var t, n; null === (t = this._connection) || void 0 === t || t.fastUdpReconnect(), null === (n = this._connection) || void 0 === n || n.clearAllSpeaking() } _handleReady(e, t, n, i, r, s, a) { this.setState(et.RTCConnectionStates.RTC_CONNECTING), this.port = n, null != a && this._chooseExperiments(a), 0 === s.length && s.push({ type: ei.MediaTypes.VIDEO, rid: "100", ssrc: r + 1, rtxSsrc: r + 2, quality: 100, active: !1 }); let o = G.default.getMediaEngine(), l = o.connect(this.context, this.userId, { ssrc: r, address: t, port: n, modes: i, experiments: this._selectedExperiments, streamParameters: s, qosEnabled: G.default.getQoS(), ...this._getExtraConnectionOptions() }); if (l.setUseElectronVideo(o.supports(ei.Features.ELECTRON_VIDEO)), G.default.supports(ei.Features.IMAGE_QUALITY_MEASUREMENT)) { let { enabled: e, measurement: t } = y.default.getConfig(!0); e && l.setVideoQualityMeasurement(t + ",hwdec") } let u = ["unk"]; if (G.default.supports(ei.Features.AMD_EXPERIMENTAL_RATE_CONTROL) && u.push("amdRelaxRc"), this.context === ei.MediaEngineContextTypes.STREAM) { let { nvMediumVbvSizeMs: e } = D.default.getCurrentConfig({ location: "handleReady" }, { autoTrackExposure: !0 }); if (e > 0) { u.push("nvRelaxRc=" + e); let { nvEnableNewPresets: t } = v.default.getCurrentConfig({ location: "handleReady" }, { autoTrackExposure: !0 }); t && u.push("nvNewPresets") } if (null != this.guildId) { let { enableAdaptiveKeyFrame: e } = L.default.getCurrentConfig({ guildId: this.guildId, location: "handleReady" }, { autoTrackExposure: !0 }); e && u.push("nvencAdaptiveIDR") } } l.setVideoEncoderExperiments(u.join(",")), l.on(c.BaseConnectionEvent.Speaking, (e, t, n) => { this.userId === e && this.sendSpeaking(t, n), this.emit(K.RTCConnectionEvent.Speaking, e, t) }), l.on(c.BaseConnectionEvent.ToggleMuteFromNative, () => { let { airpodsMuteSupported: e } = p.default.getCurrentConfig({ location: "RTCConnection ToggleMuteFromNative" }, { autoTrackExposure: !0 }); e && this.context === ei.MediaEngineContextTypes.DEFAULT && T.default.toggleSelfMute({ playSoundEffect: !1 }) }), l.on(c.BaseConnectionEvent.NativeMuteChanged, e => { S.default.nativeMuteChanged(this.context, e) }), l.on(c.BaseConnectionEvent.Video, (e, t, n, i, r, s) => { this._handleVideoStreamId({ userId: e, streamId: t, audioSsrc: n, videoSsrc: null != i ? i : 0, rtxSsrc: r, videoStreamParameters: s }), this.userId === e && (this.sendVideo(null != n ? n : 0, null != i ? i : 0, null != r ? r : 0, s), null == s || s.forEach(t => { if (100 === t.quality) this.emit(K.RTCConnectionEvent.VideoSourceQualityChanged, this.guildId, this.channelId, e, t.maxResolution, t.maxFrameRate, this.context) })) }), l.on(c.BaseConnectionEvent.FirstFrame, (e, t, n) => { if (null != this._localMediaSinkWantsManager) this._localMediaSinkWantsManager.setFirstFrameReceived(t), this.emit(K.RTCConnectionEvent.Video, this.guildId, this.channelId, e, n, this.rtcServerId); if (null != this._goLiveQualityManager) this._goLiveQualityManager.setFirstFrameReceived(t), this.emit(K.RTCConnectionEvent.Video, this.guildId, this.channelId, e, n, this.rtcServerId) }), l.on(c.BaseConnectionEvent.Silence, e => { this._inputDetected = this._inputDetected || !e }), l.on(c.BaseConnectionEvent.Connected, (i, r) => { if (this.logger.info("RTC connected to media server: ".concat(t, ":").concat(n)), e !== this._socket) { this.logger.warn("Socket mismatch, disconnecting"); return } switch (this._voiceQuality = new ee.default(l), this._voiceQuality.start(), this._voiceQualityPeriodicStatsSequenceId = 0, this._voiceQualityPeriodicStatsInterval = setInterval(this._handleVoiceQualityPeriodicsStats, 3e5), this._noiseCancellationError = 0, this._voiceDuration = new $.default(this.userId, l), this._voiceDuration.start(), this.protocol = i, i) { case "udp": this.logger.info("Sending UDP info to RTC server.", r, this._selectedExperiments), e.once(Z.SocketEvent.Encryption, (e, t) => { l === this._connection && (l.setEncryption(e, t), this._encryptionMode = e) }), e.selectProtocol(i, this.getRTCConnectionId(), r, this._selectedExperiments); break; case "webrtc": this.logger.info("Sending local SDP to RTC server."), e.once(Z.SocketEvent.SDP, this._handleSDP.bind(this)), e.selectProtocol(i, this.getRTCConnectionId(), r); break; default: this.logger.error("Unable to determine protocol."); return } this._backoff.succeed() }), l.on(c.BaseConnectionEvent.VideoEncoderFallback, t => { let n = t.filter(e => "video" === e.type).map(e => e.name).join(","); this.logger.info("The originally selected video encoder is not working, fallback to the other available encoders:" + n), e.updateSession({ codecs: t }) }), l.on(c.BaseConnectionEvent.Error, t => { if (e !== this._socket) return; let n = B.default.shouldIncludePreferredRegion() ? B.default.getPreferredRegion() : null; this.logger.error("Error occurred while connecting to RTC server: ".concat(t)), x.default.track(et.AnalyticEvents.VOICE_CONNECTION_FAILURE, { ...this._getAnalyticsProperties(), hostname: this.hostname, port: this.port, protocol: this.protocol, error: t, cloudflare_best_region: n, connect_count: this._connectCount }) }), l.on(c.BaseConnectionEvent.ConnectionStateChange, t => { if (this.logger.info("RTC media connection state change: ".concat(this.state, " => ").concat(t)), e !== this._socket) return; let n = this.state; switch (t) { case ei.ConnectionStates.DISCONNECTED: this.setState(et.RTCConnectionStates.RTC_DISCONNECTED); break; case ei.ConnectionStates.CONNECTING: this.setState(et.RTCConnectionStates.RTC_CONNECTING); break; case ei.ConnectionStates.CONNECTED: this.setState(et.RTCConnectionStates.RTC_CONNECTED); break; case ei.ConnectionStates.NO_ROUTE: this.setState(et.RTCConnectionStates.NO_ROUTE); break; case ei.ConnectionStates.ICE_CHECKING: this.setState(et.RTCConnectionStates.ICE_CHECKING); break; case ei.ConnectionStates.DTLS_CONNECTING: this.setState(et.RTCConnectionStates.DTLS_CONNECTING) } if (n === et.RTCConnectionStates.RTC_CONNECTING && this.state === et.RTCConnectionStates.RTC_DISCONNECTED ? this.reconnect() : this.state === et.RTCConnectionStates.NO_ROUTE && this._backoff.fail(this.reconnect), this.state === et.RTCConnectionStates.RTC_CONNECTED) { var i, r; let e = B.default.shouldIncludePreferredRegion() ? B.default.getPreferredRegion() : null; this._connecting && x.default.track(et.AnalyticEvents.VOICE_CONNECTION_SUCCESS, { ...this._getAnalyticsProperties(), hostname: this.hostname, port: this.port, protocol: this.protocol, cloudflare_best_region: e, connect_time: (0, E.now)() - (this._connected ? this._connectStartTime : this._createdTime), connect_count: this._connectCount, audio_subsystem: G.default.getMediaEngine().getAudioSubsystem(), audio_layer: G.default.getMediaEngine().getAudioLayer(), media_session_id: this.getMediaSessionId(), ...this.stateHistory.getVoiceConnectionSuccessStats() }), null === (i = this._localMediaSinkWantsManager) || void 0 === i || i.setConnection(l), null === (r = this._goLiveQualityManager) || void 0 === r || r.update(), this._connectCompletedTime = (0, E.now)(), this._connected = !0, this._connecting = !1, this._encountered_socket_failure = !1 } else n === et.RTCConnectionStates.RTC_CONNECTED && this.stateHistory.reset(this.state) }), l.on(c.BaseConnectionEvent.Ping, this._handlePing.bind(this)), l.on(c.BaseConnectionEvent.PingTimeout, this._handlePingTimeout.bind(this)), l.on(c.BaseConnectionEvent.OutboundLossRate, this._handleOutboundLossRate.bind(this)), l.on(c.BaseConnectionEvent.SoundshareTrace, this._handleSoundshareTrace.bind(this)), l.on(c.BaseConnectionEvent.LocalVideoDisabled, this._handleLocalVideoDisabled.bind(this)), l.on(c.BaseConnectionEvent.Stats, W.default.create()), l.on(c.BaseConnectionEvent.RemoteStreamsReady, this._handleRemoteStreamsReady.bind(this)), l.on(c.BaseConnectionEvent.NoiseCancellationError, e => { this._noiseCancellationError = e }), l.setOnDesktopEncodingOptionsSet((e, t, n) => { var i; if ((null === (i = b.default.getChannel(this.channelId)) || void 0 === i ? void 0 : i.type) === et.ChannelTypes.GUILD_STAGE_VOICE) return; let r = V.default.getCurrentUser(); if (null == r) return; let { inCallExperienceExperiment: s } = P.default.getCurrentConfig({ location: "RTCConnection DesktopEncodingOptionsSet" }); if (!s) return; let a = (0, Y.isPremium)(r, en.PremiumTypes.TIER_1), o = 0 === t && n >= 10 || t > 720 || n > 30; if (a && o) { let { bucket: e } = C.default.getCurrentConfig({ location: "RTCConnection DesktopEncodingOptionsSet" }); l.setCallExperience(e) } else if (!a && !o) { let { bucket: e } = R.default.getCurrentConfig({ location: "RTCConnection DesktopEncodingOptionsSet" }); l.setCallExperience(e) } }), l.setRemoteVideoSinkWants(this._remoteVideoSinkWants), this._connection = l } _handleSpeaking(e, t, n, i) { let r = this._connection; if (null != r && this.userId !== t) { var s; i !== ei.SpeakingFlags.NONE && (r.createUser(t, n), I.default.dispatch({ type: "RTC_CONNECTION_USER_CREATE", userId: t, context: this.context })), null === (s = this._localMediaSinkWantsManager) || void 0 === s || s.setAudioSSRC(t, n) } } handleFlags(e, t) { this.emit(K.RTCConnectionEvent.Flags, e, t) } handlePlatform(e, t) { this.emit(K.RTCConnectionEvent.Platform, e, t, this.channelId) } getOrCreateVideoQuality() { if (null != this._connection && null == this._videoQuality) { this._videoQuality = new J.VideoQuality(this._connection), this._videoQuality.start(); let { featureEnabled: e, windowLength: t, allowedPoorFpsRatio: n, fpsThreshold: i, backoffTimeSec: r } = M.default.getConfig(!0); if (e) { this._videoHealthManager = new q.VideoHealthManager(t, n, i, r), null != this._localMediaSinkWantsManager && (this._localMediaSinkWantsManager.videoHealthManager = this._videoHealthManager); this._videoQuality.on(J.VideoQualityEvent.FpsUpdate, (e, t, n) => { var i, r; (null === (i = this._localMediaSinkWantsManager) || void 0 === i ? void 0 : i.shouldReceiveFromUser(e)) && (null === (r = this._videoHealthManager) || void 0 === r || r.updateFps(e, t, n)) }) } } return this._videoQuality } _handleVideoStreamId(e) { var t, n, i, r; let { userId: s, streamId: a, videoSsrc: o, videoStreamParameters: l } = e; if (this.emit(K.RTCConnectionEvent.Video, this.guildId, this.channelId, s, a, this.rtcServerId), null != a && null == this.getOrCreateVideoQuality() && this.logger.error("_handleVideoStreamId: Unable to create videoQuality."), null != this._videoQuality && this.userId === s && l.forEach(e => { var t, n; let i = null !== (t = e.ssrc) && void 0 !== t ? t : 0; i > 0 && !0 === e.active && (null === (n = this._videoQuality) || void 0 === n || n.setOutboundSsrc(i)) }), this.userId !== s) { let e = 0 === o && null === a; (!e || e && (null === (t = this._videoQuality) || void 0 === t ? void 0 : t.getInboundParticipants().includes(s))) && (null === (n = this._videoQuality) || void 0 === n || n.setInboundUser(s, o), null === (i = this._videoHealthManager) || void 0 === i || i.createUser(s)) } null != this._connection && this.userId !== s && (null === (r = this._localMediaSinkWantsManager) || void 0 === r || r.setStreamId(s, a)) } _handleLocalVideoDisabled(e, t) { if (this.userId !== e) { let n = this.getOrCreateVideoQuality(); if (null == n) { this.logger.error("_handleLocalVideoDisabled: Unable to create videoQuality."); return } n.setUserVideoDisabled(e, t) } } _handleRemoteStreamsReady(e) { let t = (0, E.now)() - this._connectStartTime; x.default.track(et.AnalyticEvents.VOICE_CONNECTION_REMOTE_STREAMS_CREATED, { ...this._getAnalyticsProperties(), number_of_users: e, duration_ms: t }) } _handleVideo(e, t, n, i, r) { if (null != this._connection && this.userId !== t) { if (null != this._localMediaSinkWantsManager) { this._localMediaSinkWantsManager.setAudioSSRC(t, n); let e = r.map(e => ({ type: ei.MediaTypes.VIDEO, rid: e.rid, ssrc: e.ssrc, rtxSsrc: e.rtxSsrc, quality: e.quality, active: i > 0 })); 0 === e.length && e.push({ type: ei.MediaTypes.VIDEO, rid: "100", ssrc: i, rtxSsrc: i + 1, quality: 100, active: i > 0 }), this._localMediaSinkWantsManager.setVideoSSRCs(t, e) } else { var s, a; let e = []; for (let t of r) null != t.ssrc && null != t.quality && e.push({ ssrc: t.ssrc, quality: t.quality }); null === (s = this._goLiveQualityManager) || void 0 === s || s.setUserID(t), null === (a = this._goLiveQualityManager) || void 0 === a || a.updateAudioAndVideoStreamInfo(n, e) } null == r || r.forEach(e => { 100 === e.quality && this.emit(K.RTCConnectionEvent.VideoSourceQualityChanged, this.guildId, this.channelId, t, e.maxResolution, e.maxFrameRate, this.context) }) } } _handleControlPing(e) { !G.default.supports(ei.Features.NATIVE_PING) && this._handlePing(e) } _handlePing(e) { if (void 0 !== e) { for (this._pings.push({ time: Date.now(), value: e }); this._pings.length >= 200;) this._pings.shift(); e > 500 && this._pingBadCount++, this.emit(K.RTCConnectionEvent.Ping, this._pings, this.quality) } } _handlePingTimeout(e, t) { this._pingTimeouts.push(e); let n = this._pingTimeouts.length; n >= 3 && this._pingTimeouts[n - 1] === this._pingTimeouts[n - 2] + 1 && this._pingTimeouts[n - 2] === this._pingTimeouts[n - 3] + 1 && this._handlePing(t) } _handleOutboundLossRate(e) { this._outboundLossRate = e, this.emit(K.RTCConnectionEvent.OutboundLossRate, e) } _handleSoundshareTrace(e) { this._soundshareStats.traceEvent(void 0, e) } _getAnalyticsProperties() { let e = b.default.getChannel(this.channelId), t = null != e ? e.type : null; return { guild_id: this.guildId, channel_id: this.channelId, channel_type: t, rtc_connection_id: this.getRTCConnectionId(), context: this.context, voice_backend_version: this.voiceVersion, rtc_worker_backend_version: this.rtcWorkerVersion } } _handleClientDisconnect(e) { var t, n, i; let r = this._videoQuality; if (null != r && this.context === ei.MediaEngineContextTypes.DEFAULT) { let t = r.getInboundStats(e), s = null !== (n = null == t ? void 0 : t.num_frames) && void 0 !== n ? n : 0; null != t && s > 0 && (x.default.track(et.AnalyticEvents.VIDEO_STREAM_ENDED, { ...this._getAnalyticsProperties(), media_session_id: this.getMediaSessionId(), sender_user_id: e, reason: "User disconnected", participant_type: "receiver", guild_region: B.default.getRegion(this.hostname), hostname: this.hostname, hardware_enabled: G.default.getHardwareH264(), ...t, ...r.getNetworkStats(), ...r.getCodecUsageStats("receiver", e) }), r.destroyUser(e), null === (i = this._videoHealthManager) || void 0 === i || i.deleteUser(e)) } let s = this._connection; null != s && s.destroyUser(e), null === (t = this._localMediaSinkWantsManager) || void 0 === t || t.destroyUser(e) } _handleCodecs(e, t) { let n = this._connection; null != n && null != this.protocol ? n.setCodecs(null != e && "" !== e ? e : ei.Codecs.OPUS, null != t && "" !== t ? t : ei.Codecs.H264, this.context) : this.logger.warn("Cannot set codecs on connection with protocol:", this.protocol) } _handleSDP(e) { let t = this._connection; null != t && null != this.protocol ? t.setSDP(e) : this.logger.warn("Cannot set SDP on connection with protocol:", this.protocol) } async _handleMediaSessionId(e) { this._mediaSessionId = e, this.logger.info("Setting media-session-id: ".concat(e, " for rtc-connection-id: ").concat(this.getRTCConnectionId())); let t = await (0, m.default)(); x.default.track(et.AnalyticEvents.MEDIA_SESSION_JOINED, { ...this._getAnalyticsProperties(), media_session_id: this.getMediaSessionId(), parent_media_session_id: this.parentMediaSessionId, raw_thermal_state: t }), I.default.dispatch({ type: "MEDIA_SESSION_JOINED", mediaSessionId: this.getMediaSessionId(), context: this.context }) } _handleMediaSinkWants(e) { let t = this._connection; this.logger.info("Remote media sink wants: ".concat(JSON.stringify(e))), this._remoteVideoSinkWants = e, null == t || t.setRemoteVideoSinkWants(e) } _handleCodeVersion(e, t) { this.voiceVersion = e, this.rtcWorkerVersion = t } _handleKeyframeInterval(e) { let t = this._connection; null != t && null != this.protocol ? t.setKeyframeInterval(e) : this.logger.warn("Cannot set keyframe interval on connection with protocol:", this.protocol) } _handleBandwidthEstimationExperiment(e) { this._bandwidthEstimationExperiment = e; let t = O.default.getMediaEngineExperiments(e); if (null !== t && 0 !== t.length) { var n; null === (n = this._connection) || void 0 === n || n.setBandwidthEstimationExperiments(t) } } _trackSecureFrameTransition(e, t) { x.default.track(et.AnalyticEvents.SECURE_FRAMES_TRANSITION, { ...this._getAnalyticsProperties(), media_session_id: this.getMediaSessionId(), parent_media_session_id: this.parentMediaSessionId, sender_user_id: this.userId, transition_id: e, protocol_version: t }) } _handleSecureFramesInit(e) { var t, n; e > 0 && this.logger.info("Secure frames init with protocol version: ".concat(e)), e >= 100 ? (null === (t = this._connection) || void 0 === t || t.prepareSecureFramesEpoch("1", e, this.trueChannelId), this._sendMLSKeyPackage()) : null === (n = this._connection) || void 0 === n || n.prepareSecureFramesTransition(0, e, () => { var t; e > 0 && this._trackSecureFrameTransition(0, e), null === (t = this._connection) || void 0 === t || t.executeSecureFramesTransition(0) }) } _handleSecureFramesPrepareTransition(e, t) { var n; this.logger.info("Preparing secure frames transition: ".concat(e, ", protocol version: ").concat(t)), null === (n = this._connection) || void 0 === n || n.prepareSecureFramesTransition(e, t, () => { this._maybeSendSecureFramesTransitionReady(e), this._trackSecureFrameTransition(e, t) }) } _handleSecureFramesPrepareEpoch(e, t) { var n; this.logger.info("Preparing secure frames epoch: ".concat(e, ", protocol version: ").concat(t)); let i = e.toString(); null === (n = this._connection) || void 0 === n || n.prepareSecureFramesEpoch(i, t, this.trueChannelId), "1" === i && this._sendMLSKeyPackage() } _sendMLSKeyPackage() { var e; null === (e = this._connection) || void 0 === e || e.getMLSKeyPackage(e => { var t; this.logger.info("Got MLS key package, sending to RTC server"), null === (t = this._socket) || void 0 === t || t.sendMLSKeyPackage(e) }) } _maybeSendSecureFramesTransitionReady(e) { if (0 !== e) { var t; this.logger.info("Sending secure frames ready for transition ID ".concat(e)), null === (t = this._socket) || void 0 === t || t.secureFramesReadyForTransition(e) } } _handleSecureFramesExecuteTransition(e) { var t; this.logger.info("Executing secure frames transition: ".concat(e)), null === (t = this._connection) || void 0 === t || t.executeSecureFramesTransition(e) } _handleMLSExternalSenderPackage(e) { var t; this.logger.info("Received MLS external sender package"), null === (t = this._connection) || void 0 === t || t.updateMLSExternalSender(e) } _handleMLSProposals(e, t) { var n; this.logger.info("Received MLS proposals"), null === (n = this._connection) || void 0 === n || n.processMLSProposals(t, t => { this.logger.info("Sending MLS commit welcome message"), e.sendMLSCommitWelcome(t) }) } _handleMLSPrepareCommitTransition(e, t) { var n; this.logger.info("Received MLS commit for transition ID ".concat(e)), null === (n = this._connection) || void 0 === n || n.prepareMLSCommitTransition(e, t, (t, n) => { t ? (this._maybeSendSecureFramesTransitionReady(e), this._trackSecureFrameTransition(e, n)) : (this.logger.warn("Failed to process MLS commit for transition ID ".concat(e)), this._flagMLSInvalidCommitWelcome(e), this._handleSecureFramesInit(n)) }) } _handleMLSWelcome(e, t) { var n; this.logger.info("Received MLS welcome for transition ID ".concat(e)), null === (n = this._connection) || void 0 === n || n.processMLSWelcome(e, t, (t, n) => { t ? (this._maybeSendSecureFramesTransitionReady(e), this._trackSecureFrameTransition(e, n)) : (this._flagMLSInvalidCommitWelcome(e), this._sendMLSKeyPackage()) }) } _flagMLSInvalidCommitWelcome(e) { var t; this.logger.info("Flagging invalid MLS commit/welcome for transition ID ".concat(e)), null === (t = this._socket) || void 0 === t || t.flagMLSInvalidCommitWelcome(e) } _getExtraConnectionOptions() { return {} } shouldReportPeriodicStats(e) { if (e.length > 10) return !1; let { enableSendingVoiceStats: t, percentageOfCalls: n } = U.default.getCurrentConfig({ location: "104dee_3" }, { autoTrackExposure: !1 }); if (!t) return !1; let i = this.getMediaSessionId(); return null != i && (!!(o().v3(i) % 100 <= n) || !1) } getInputDeviceName() { var e; let t = G.default.getInputDeviceId(); return null === (e = G.default.getInputDevices()[t]) || void 0 === e ? void 0 : e.name } getOutputDeviceName() { var e; let t = G.default.getOutputDeviceId(); return null === (e = G.default.getOutputDevices()[t]) || void 0 === e ? void 0 : e.name } getGoLiveSource() { return G.default.getGoLiveSource() } constructor({ userId: e, sessionId: t, guildId: n, channelId: i, context: r = ei.MediaEngineContextTypes.DEFAULT, rtcServerId: s, parentMediaSessionId: a }) { var o, l; super(), er(this, "context", void 0), er(this, "userId", void 0), er(this, "sessionId", void 0), er(this, "guildId", void 0), er(this, "parentMediaSessionId", void 0), er(this, "hostname", void 0), er(this, "state", void 0), er(this, "_videoQuality", void 0), er(this, "_soundshareStats", void 0), er(this, "logger", void 0), er(this, "rtcServerId", void 0), er(this, "_channelId", void 0), er(this, "channelIds", void 0), er(this, "_endpoint", void 0), er(this, "port", void 0), er(this, "token", void 0), er(this, "protocol", void 0), er(this, "voiceVersion", void 0), er(this, "rtcWorkerVersion", void 0), er(this, "_socket", void 0), er(this, "_backoff", void 0), er(this, "_destroyed", void 0), er(this, "_pings", void 0), er(this, "_pingBadCount", void 0), er(this, "_pingTimeouts", void 0), er(this, "_mediaSessionId", void 0), er(this, "_voiceQuality", void 0), er(this, "_voiceQualityPeriodicStatsInterval", void 0), er(this, "_voiceQualityPeriodicStatsSequenceId", void 0), er(this, "_noiseCancellationError", void 0), er(this, "_voiceDuration", void 0), er(this, "_videoHealthManager", void 0), er(this, "_sentVideo", void 0), er(this, "_outboundLossRate", void 0), er(this, "_recordingEnabled", void 0), er(this, "_selectedExperiments", void 0), er(this, "_localMediaSinkWantsManager", void 0), er(this, "_goLiveQualityManager", void 0), er(this, "_remoteVideoSinkWants", void 0), er(this, "_connection", void 0), er(this, "_createdTime", void 0), er(this, "_connectStartTime", void 0), er(this, "_connectCompletedTime", void 0), er(this, "_rtcConnectionId", void 0), er(this, "_connectCount", void 0), er(this, "_connected", void 0), er(this, "_connecting", void 0), er(this, "_encountered_socket_failure", void 0), er(this, "_inputDetected", void 0), er(this, "_encryptionMode", void 0), er(this, "stateHistory", void 0), er(this, "_supportedBandwidthEstimationExperiments", void 0), er(this, "_bandwidthEstimationExperiment", void 0), er(this, "powerMonitorListener", void 0), er(this, "reconnect", () => { let e = this._socket; null != e && (this._connected && (this._connectStartTime = (0, E.now)()), !this._connecting && (this._trackVoiceConnectionConnecting(), this._connecting = !0, this._encountered_socket_failure = !1), this._connectCount++, e.close(), e.connect()) }), er(this, "_handleNetworkOnline", () => { this.expeditedHeartbeat(5e3, "network detected online.") }), er(this, "_handleNetworkOffline", () => { this.expeditedHeartbeat(15e3, "network detected offline.", !1) }), er(this, "_handlePowerResume", () => { this.expeditedHeartbeat(5e3, "power monitor resumed") }), er(this, "_handleVoiceQualityPeriodicsStats", () => { if (null != this._voiceQuality) { let e = this._voiceQuality.getPeriodicStats(); if (this.shouldReportPeriodicStats(e)) for (let t of e) x.default.track(et.AnalyticEvents.VOICE_QUALITY_PERIODIC_STATS, { ...this._getAnalyticsProperties(), media_session_id: this.getMediaSessionId(), sender_user_id: t.userId, hostname: this.hostname, frame_op_silent: t.silent, frame_op_normal: t.normal, frame_op_merged: t.merged, frame_op_expanded: t.expanded, frame_op_accelerated: t.accelerated, frame_op_preemptive_expanded: t.preemptiveExpanded, frame_op_cng: t.cng, accelerate_rate: t.accelerateRate, expand_rate: t.expandRate, preemptive_expand_rate: t.preemptiveExpandRate, speech_expand_rate: t.speechExpandRate, duration_ms: t.durationMs, sequence_id: this._voiceQualityPeriodicStatsSequenceId, input_device: this.getInputDeviceName(), output_device: this.getOutputDeviceName(), ping_average: Math.round(this.getAveragePing()), ping_bad_count: this._pingBadCount, parent_media_session_id: this.parentMediaSessionId }); this._voiceQualityPeriodicStatsSequenceId++ } }), er(this, "_trackVoiceConnectionConnecting", () => { let e = b.default.getChannel(this.channelId), t = null != e ? e.type : null; x.default.track(et.AnalyticEvents.VOICE_CONNECTION_CONNECTING, { guild_id: this.guildId, channel_id: this.channelId, rtc_connection_id: this.getRTCConnectionId(), hostname: this.hostname, connect_count: this._connectCount, context: this.context, channel_type: t }) }), this.context = r, this.logger = new h.default("RTCConnection(".concat(null !== (o = null != s ? s : n) && void 0 !== o ? o : i, ", ").concat(this.context, ")")), this.userId = e, this.sessionId = t, this.guildId = n, this._channelId = i, this.channelIds = new Set([i]), this.rtcServerId = s, this.parentMediaSessionId = a, this._endpoint = null, this.hostname = null, this.port = null, this.token = null, this.voiceVersion = null, this.rtcWorkerVersion = null, this.state = et.RTCConnectionStates.AWAITING_ENDPOINT, this.stateHistory = new z.StateHistory(this.state), this._socket = null, this._backoff = new d.default(1e3, 1e4), this._destroyed = !1, this._pings = [], this._pingBadCount = 0, this._pingTimeouts = [], this._mediaSessionId = null, this._voiceQuality = null, this._voiceQualityPeriodicStatsInterval = null, this._voiceQualityPeriodicStatsSequenceId = 0, this._noiseCancellationError = 0, this._voiceDuration = null, this._videoQuality = null, this._videoHealthManager = null, this._sentVideo = !1, this._outboundLossRate = null, this._createdTime = (0, E.now)(), this._connectStartTime = 0, this._connectCompletedTime = 0, this._rtcConnectionId = (0, u.v4)(), this._connectCount = 0, this._connected = !1, this._connecting = !1, this._encountered_socket_failure = !1, this._inputDetected = !1, this._selectedExperiments = []; let _ = G.default.supports(ei.Features.FIRST_FRAME_CALLBACK) && G.default.supports(ei.Features.REMOTE_USER_MULTI_STREAM); if (r === ei.MediaEngineContextTypes.DEFAULT) { let t = (null === (l = b.default.getChannel(this.channelId)) || void 0 === l ? void 0 : l.type) === et.ChannelTypes.GUILD_STAGE_VOICE; this._localMediaSinkWantsManager = new X.default(e, t, _), this._localMediaSinkWantsManager.on(X.RTCMediaSinkWantsManagerEvent.Update, e => { if (this.state === et.RTCConnectionStates.RTC_CONNECTED && null != this._socket) { var t; this.logger.info("Media sink wants: ".concat(JSON.stringify(e))), this._socket.mediaSinkWants(e), null === (t = this._connection) || void 0 === t || t.setLocalVideoSinkWants(e) } }), this._localMediaSinkWantsManager.on(X.RTCMediaSinkWantsManagerEvent.UserSSRCUpdate, (e, t, n) => { var i; null === (i = this._connection) || void 0 === i || i.createUser(e, t, n) }) } else r === ei.MediaEngineContextTypes.STREAM && (this._goLiveQualityManager = new N.default(_), this._goLiveQualityManager.on(N.GoLiveQualityManagerEvent.RequestedSSRCsUpdate, (e, t, n) => { var i; null === (i = this._connection) || void 0 === i || i.createUser(e, t, n) }), this._goLiveQualityManager.on(N.GoLiveQualityManagerEvent.RequestedStreamsUpdate, e => { if (this.state === et.RTCConnectionStates.RTC_CONNECTED && null != this._socket) { var t; this.logger.info("Go Live Media sink wants: ".concat(JSON.stringify(e))), this._socket.mediaSinkWants(e), null === (t = this._connection) || void 0 === t || t.setLocalVideoSinkWants(e) } })); this._remoteVideoSinkWants = X.DEFAULT_WANTS_FULL, k.default.shouldRecordNextConnection() ? (this._recordingEnabled = !0, f.setShouldRecordNextConnection(!1)) : this._recordingEnabled = !1, this._soundshareStats = new Q.default, F.default.addOnlineCallback(this._handleNetworkOnline), F.default.addOfflineCallback(this._handleNetworkOffline), (0, H.isDesktop)() && (this.powerMonitorListener = j.default.remotePowerMonitor.on("resume", this._handlePowerResume)), this._supportedBandwidthEstimationExperiments = [], this._bandwidthEstimationExperiment = null, G.default.getMediaEngine().getSupportedBandwidthEstimationExperiments(e => { this._supportedBandwidthEstimationExperiments = e }) } } }, 437263: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { RTCConnectionEvent: function() { return i } }), (r = i || (i = {})).State = "state", r.Speaking = "speaking", r.VideoSourceQualityChanged = "video-source-quality-changed", r.Video = "video", r.Flags = "flags", r.Platform = "platform", r.Ping = "ping", r.OutboundLossRate = "outboundlossrate" }, 423343: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StateHistory: function() { return u } }), n("653041"); var i = n("392711"), r = n.n(i), s = n("379649"), a = n("126168"), o = n("981631"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class u { reset(e) { this.current = null, this.history = [], null != e && this.update(e) } update(e) { this.current !== e && (this.current = e, this.history.push({ state: e, startTime: (0, s.now)() })) } getVoiceConnectionSuccessStats() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : (0, s.now)(), t = this.getStateDurations(e), n = e => r().sumBy(t, t => t.state === e ? t.durationMs : 0); return { state_awaiting_endpoint_ms: n(o.RTCConnectionStates.AWAITING_ENDPOINT), state_authenticating_ms: n(o.RTCConnectionStates.AUTHENTICATING), state_connecting_ms: n(o.RTCConnectionStates.CONNECTING), state_disconnected_ms: n(o.RTCConnectionStates.DISCONNECTED), state_ice_checking_ms: n(o.RTCConnectionStates.ICE_CHECKING), state_no_route_ms: n(o.RTCConnectionStates.NO_ROUTE), state_rtc_connecting_ms: n(o.RTCConnectionStates.RTC_CONNECTING), state_rtc_disconnected_ms: n(o.RTCConnectionStates.RTC_DISCONNECTED) } } getStateDurations(e) { if (0 === this.history.length) return []; let t = (0, a.default)(this.history, (e, t) => ({ state: e.state, durationMs: t.startTime - e.startTime })); return t.push((() => { let t = r().last(this.history); return { state: t.state, durationMs: e - t.startTime } })()), t } constructor(e) { l(this, "current", null), l(this, "history", []), null != e && this.update(e) } } }, 685756: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SocketEvent: function() { return a }, default: function() { return v } }), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"), n("47120"), n("789020"); var i, r, s, a, o, l, u, d, _ = n("512722"), c = n.n(_), E = n("261470"), I = n("47770"), T = n("710845"), f = n("857192"), S = n("70956"), h = n("358085"), A = n("65154"); function m(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function N() {}(o = i || (i = {}))[o.IDENTIFY = 0] = "IDENTIFY", o[o.SELECT_PROTOCOL = 1] = "SELECT_PROTOCOL", o[o.READY = 2] = "READY", o[o.HEARTBEAT = 3] = "HEARTBEAT", o[o.SELECT_PROTOCOL_ACK = 4] = "SELECT_PROTOCOL_ACK", o[o.SPEAKING = 5] = "SPEAKING", o[o.HEARTBEAT_ACK = 6] = "HEARTBEAT_ACK", o[o.RESUME = 7] = "RESUME", o[o.HELLO = 8] = "HELLO", o[o.RESUMED = 9] = "RESUMED", o[o.VIDEO = 12] = "VIDEO", o[o.CLIENT_DISCONNECT = 13] = "CLIENT_DISCONNECT", o[o.SESSION_UPDATE = 14] = "SESSION_UPDATE", o[o.MEDIA_SINK_WANTS = 15] = "MEDIA_SINK_WANTS", o[o.VOICE_BACKEND_VERSION = 16] = "VOICE_BACKEND_VERSION", o[o.CHANNEL_OPTIONS_UPDATE = 17] = "CHANNEL_OPTIONS_UPDATE", o[o.FLAGS = 18] = "FLAGS", o[o.SPEED_TEST = 19] = "SPEED_TEST", o[o.PLATFORM = 20] = "PLATFORM", o[o.SECURE_FRAMES_PREPARE_PROTOCOL_TRANSITION = 21] = "SECURE_FRAMES_PREPARE_PROTOCOL_TRANSITION", o[o.SECURE_FRAMES_EXECUTE_TRANSITION = 22] = "SECURE_FRAMES_EXECUTE_TRANSITION", o[o.SECURE_FRAMES_READY_FOR_TRANSITION = 23] = "SECURE_FRAMES_READY_FOR_TRANSITION", o[o.SECURE_FRAMES_PREPARE_EPOCH = 24] = "SECURE_FRAMES_PREPARE_EPOCH", o[o.MLS_EXTERNAL_SENDER_PACKAGE = 25] = "MLS_EXTERNAL_SENDER_PACKAGE", o[o.MLS_KEY_PACKAGE = 26] = "MLS_KEY_PACKAGE", o[o.MLS_PROPOSALS = 27] = "MLS_PROPOSALS", o[o.MLS_COMMIT_WELCOME = 28] = "MLS_COMMIT_WELCOME", o[o.MLS_PREPARE_COMMIT_TRANSITION = 29] = "MLS_PREPARE_COMMIT_TRANSITION", o[o.MLS_WELCOME = 30] = "MLS_WELCOME", o[o.MLS_INVALID_COMMIT_WELCOME = 31] = "MLS_INVALID_COMMIT_WELCOME", (l = r || (r = {}))[l.AUTHENTICATION_FAILED = 4004] = "AUTHENTICATION_FAILED", l[l.INVALID_SESSION = 4006] = "INVALID_SESSION", l[l.SERVER_NOT_FOUND = 4011] = "SERVER_NOT_FOUND", l[l.SERVER_CRASH = 4015] = "SERVER_CRASH", l[l.CANCELED = 4016] = "CANCELED", l[l.HEARTBEAT_TIMEOUT = 4800] = "HEARTBEAT_TIMEOUT", l[l.UNRESUMABLE = 4801] = "UNRESUMABLE", l[l.RESET_BACKOFF = 4802] = "RESET_BACKOFF", (u = s || (s = {}))[u.DISCONNECTED = 0] = "DISCONNECTED", u[u.CONNECTING = 1] = "CONNECTING", u[u.IDENTIFYING = 2] = "IDENTIFYING", u[u.RESUMING = 3] = "RESUMING", u[u.CONNECTED = 4] = "CONNECTED", u[u.RECONNECTING = 5] = "RECONNECTING"; let p = 20 * S.default.Millis.SECOND, O = 1 * S.default.Millis.MINUTE, C = 5 * S.default.Millis.SECOND; function R(e) { return e.map(e => ({ name: e.name, type: e.type, priority: 1e3 * e.priority, payload_type: e.payloadType, rtx_payload_type: e.rtxPayloadType, encode: e.encode, decode: e.decode })) } function g(e) { return null == e ? void 0 : e.map(e => ({ type: e.type, rid: e.rid, ssrc: e.ssrc, active: e.active, quality: e.quality, rtx_ssrc: e.rtxSsrc, max_bitrate: e.maxBitrate, max_framerate: e.maxFrameRate, max_resolution: null != e.maxResolution ? { type: e.maxResolution.type, width: e.maxResolution.width, height: e.maxResolution.height } : void 0 })) } function L(e) { var t; return null !== (t = null == e ? void 0 : e.map(e => ({ type: function(e) { if ("audio" === e) return A.MediaTypes.AUDIO; if ("test" === e) return A.MediaTypes.TEST; if ("screen" === e) return A.MediaTypes.SCREEN; else return A.MediaTypes.VIDEO }(e.type), rid: e.rid, ssrc: e.ssrc, rtxSsrc: e.rtx_ssrc, active: e.active, quality: e.quality, maxBitrate: e.max_bitrate, maxFrameRate: e.max_framerate, maxResolution: null != e.max_resolution ? { type: e.max_resolution.type, width: e.max_resolution.width, height: e.max_resolution.height } : void 0 }))) && void 0 !== t ? t : [] }(d = a || (a = {})).Connecting = "connecting", d.Connect = "connect", d.Disconnect = "disconnect", d.Resuming = "resuming", d.Ready = "ready", d.Speaking = "speaking", d.Video = "video", d.Ping = "ping", d.ClientDisconnect = "client-disconnect", d.Codecs = "codecs", d.MediaSessionId = "media-session-id", d.MediaSinkWants = "media-sink-wants", d.VoiceBackendVersion = "voice-backend-version", d.KeyframeInterval = "keyframe-interval", d.ChannelOptionsUpdateSecureFramesProtocol = "update-secure-frames-protocol", d.Flags = "flags", d.Platform = "platform", d.SDP = "sdp", d.Encryption = "encryption", d.SpeedTest = "speed-test", d.BandwidthEstimationExperiment = "bandwidth-estimation-experiment", d.SecureFramesInit = "secure-frames-init", d.SecureFramesPrepareTransition = "secure-frames-prepare-transition", d.SecureFramesExecuteTransition = "secure-frames-execute-transition", d.SecureFramesPrepareEpoch = "secure-frames-prepare-epoch", d.MLSExternalSenderPackage = "mls-external-sender-package", d.MLSProposals = "mls-proposals", d.MLSPrepareCommitTransition = "mls-prepare-commit-transition", d.MLSWelcome = "mls-welcome"; class v extends I.default { createWebSocket() { this.logger.info("[CONNECT] ".concat(this.url)), null !== this.webSocket && (this.logger.error("Connect called with already existing websocket"), this.cleanupWebSocket(e => e.close(4e3))), this.connectionStartTime = Date.now(), this.helloTimeout = setTimeout(() => { let e = Date.now() - this.connectionStartTime; this.handleClose(!1, 0, "The connection timed out after ".concat(e, " ms - did not receive OP_HELLO in time.")) }, p); let e = this.webSocket = new WebSocket("".concat(this.url, "?v=").concat(7)); e.binaryType = "arraybuffer", e.onopen = () => { 1 === this.connectionState ? this.emit("connect") : 5 === this.connectionState && this.doResumeOrClose(), this.connectionState = 4; let e = Date.now() - this.connectionStartTime; this.logger.info("[CONNECTED] ".concat(this.url, " in ").concat(e, " ms")), this.emit("ping", Math.round(e / 2)) }, e.onmessage = e => { let { op: t, d: n } = this.parseWebSocketMessage(e); if (f.default.isLoggingGatewayEvents) { if (n instanceof Uint8Array) { let e = [...n].map(e => e.toString(16).padStart(2, "0")).join(""); this.logger.info("~> ".concat(t, ": 0x").concat(e)) } else this.logger.info("~> ".concat(t, ": ").concat(JSON.stringify(n))) } switch (t) { case 8: this.clearHelloTimeout(), this.handleHello(n); break; case 2: this.handleReady(n); break; case 9: this.handleResumed(n); break; case 4: n.bandwidth_estimation_experiment && this.emit("bandwidth-estimation-experiment", n.bandwidth_estimation_experiment), this.emit("codecs", n.audio_codec, n.video_codec), n.media_session_id && this.emit("media-session-id", n.media_session_id), n.sdp ? this.emit("sdp", n.sdp) : n.mode && this.emit("encryption", n.mode, n.secret_key), n.keyframe_interval && this.emit("keyframe-interval", n.keyframe_interval), this.emit("secure-frames-init", n.secure_frames_version || 0), this.resumable = !0; break; case 5: let i = n.speaking; "boolean" == typeof i && (i = i ? A.SpeakingFlags.VOICE : A.SpeakingFlags.NONE), this.emit("speaking", n.user_id, n.ssrc, i); break; case 3: this.sendHeartbeat(); break; case 6: this.emit("ping", Date.now() - n), this.handleHeartbeatAck(n); break; case 12: this.emit("video", n.user_id, n.audio_ssrc, n.video_ssrc, L(n.streams)); break; case 13: this.emit("client-disconnect", n.user_id); break; case 14: (null != n.audio_codec || null != n.video_codec) && this.emit("codecs", n.audio_codec, n.video_codec), null != n.media_session_id && this.emit("media-session-id", n.media_session_id), n.keyframe_interval && this.emit("keyframe-interval", n.keyframe_interval); break; case 15: this.emit("media-sink-wants", n); break; case 16: null != n.voice && null != n.rtc_worker && this.emit("voice-backend-version", n.voice, n.rtc_worker); break; case 19: this.emit("speed-test", n.op, n); break; case 18: null != n.flags && null != n.user_id && this.emit("flags", n.user_id, n.flags); break; case 20: null != n.platform && null != n.user_id && this.emit("platform", n.user_id, n.platform); break; case 21: null != n.transition_id && null != n.protocol_version && this.emit("secure-frames-prepare-transition", n.transition_id, n.protocol_version); break; case 22: null != n.transition_id && this.emit("secure-frames-execute-transition", n.transition_id); break; case 24: null != n.epoch && null != n.protocol_version && this.emit("secure-frames-prepare-epoch", n.epoch, n.protocol_version); break; case 25: this.emit("mls-external-sender-package", n); break; case 27: this.emit("mls-proposals", n); break; case 29: { let e = new DataView(n.buffer, n.byteOffset, 2).getUint16(0, !1), t = n.slice(2); this.emit("mls-prepare-commit-transition", e, t); break } case 30: { let e = new DataView(n.buffer, n.byteOffset, 2).getUint16(0, !1), t = n.slice(2); this.emit("mls-welcome", e, t); break } default: this.logger.info("Unhandled op ".concat(t)) } }, e.onerror = () => this.handleClose(!1, 0, "An error with the websocket occurred"), e.onclose = e => { let { wasClean: t, code: n, reason: i } = e; return this.handleClose(t, n, i) } } send(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = this.webSocket; if (null == n || n.readyState !== WebSocket.OPEN) return; let i = JSON.stringify({ op: e, d: t }); f.default.isLoggingGatewayEvents && this.logger.info("<~ ".concat(i)); try { n.send(i) } catch (e) {} } sendBinary(e, t) { let n = this.webSocket; if (null == n || n.readyState !== WebSocket.OPEN) return; let i = new Uint8Array(t.byteLength + 1); i[0] = e, i.set(t, 1); try { n.send(i.buffer) } catch (e) {} } ping() { this.sendHeartbeat() } doResumeOrClose() { let e = Date.now(); null !== this.serverId && null !== this.token && null !== this.sessionId && this.resumable && (null == this.lastHeartbeatAckTime || e - this.lastHeartbeatAckTime <= O) ? (this.doResume(), this.lastHeartbeatAckTime = e) : this.disconnect(!1, 4801, "Cannot resume connection.") } doResume() { var e, t; this.logger.info("[RESUME] resuming session. serverId=".concat(null !== (e = this.serverId) && void 0 !== e ? e : "", " sessionId=").concat(null !== (t = this.sessionId) && void 0 !== t ? t : "")), this.emit("resuming"), this.connectionState = 3, this.send(7, { token: this.token, session_id: this.sessionId, server_id: this.serverId }) } handleHello(e) { var t, n, i; if (this.serverVersion = null !== (t = e.v) && void 0 !== t ? t : 3, this.serverVersion <= 3) { let t = h.isPlatformEmbedded ? .25 : .1; this.heartbeatInterval = e.heartbeat_interval * t } else this.heartbeatInterval = e.heartbeat_interval * this.heartbeatIntervalModifier, !h.isPlatformEmbedded && (this.heartbeatInterval = Math.min(C, null !== (n = this.heartbeatInterval) && void 0 !== n ? n : NaN)); let r = Date.now() - this.connectionStartTime; this.logger.info("[HELLO] heartbeat interval: ".concat(null !== (i = this.heartbeatInterval) && void 0 !== i ? i : "??", ", version: ").concat(this.serverVersion, ", took ").concat(r, " ms")), this.startHeartbeater() } handleReady(e) { this.backoff.succeed(); let t = Date.now() - this.connectionStartTime; this.logger.info("[READY] took ".concat(t, " ms")), this.serverVersion >= 6 && this.send(16, {}), this.emit("ready", e.ip, e.port, e.modes, e.ssrc, L(e.streams), e.experiments) } handleResumed(e) { this.backoff.succeed() } handleClose(e, t, n) { if (this.connectionState = 0, e = e || !1, this.cleanupWebSocket(), 4004 === t || 4015 === t || 4011 === t || 4006 === t) return this.disconnect(e, t, n); if (this.backoff.fails > 3) this.logger.warn("[WS CLOSED] Backoff exceed. Resetting."), this.disconnect(e, t, n); else { let i = this.backoff.fail(() => this.reconnect(e, t, n)); this.logger.warn("[WS CLOSED] (clean: ".concat(e.toString(), ", code: ").concat(t, ", reason: ").concat(n, ") retrying in ").concat((i / 1e3).toFixed(2), " seconds.")) } } disconnect(e, t, n) { this.logger.warn("[DISCONNECT] (".concat(e.toString(), ", ").concat(t, ", ").concat(n, ")")), this.cleanupWebSocket(), this.cleanupState(), this.connectionState = 0, this.emit("disconnect", e, t, n) } reconnect(e, t, n) { this.logger.info("[RECONNECT] wasClean=".concat(e.toString(), " code=").concat(t, " reason=").concat(n)), this.cleanupWebSocket(e => e.close(4e3)), this.connectionState = 5, this.createWebSocket() } cleanupWebSocket(e) { this.stopHeartbeater(), this.clearHelloTimeout(); let t = this.webSocket; this.webSocket = null, null != t && (t.onopen = N, t.onmessage = N, t.onerror = N, t.onclose = N, null == e || e(t)), this.backoff.cancel() } cleanupState() { this.serverId = null, this.sessionId = null, this.token = null, this.resumable = !1 } parseWebSocketMessage(e) { if (!(e.data instanceof ArrayBuffer)) return JSON.parse(e.data); { let t = new Uint8Array(e.data); return { op: t[0], d: t.subarray(1) } } } clearHelloTimeout() { null != this.helloTimeout && (clearTimeout(this.helloTimeout), this.helloTimeout = null) } handleHeartbeatAck(e) { this.logger.info("Heartbeat ACK received"), this.lastHeartbeatAckTime = Date.now(), this.heartbeatAck = !0, null !== this.expeditedHeartbeatTimeout && (clearTimeout(this.expeditedHeartbeatTimeout), this.expeditedHeartbeatTimeout = null, this.logger.info("Expedited heartbeat succeeded")) } handleHeartbeatTimeout() { this.cleanupWebSocket(e => e.close(4e3)); let e = this.backoff.fail(() => this.reconnect(!1, 4800, "Heartbeat timeout.")); this.logger.warn("[HEARTBEAT ACK TIMEOUT] reconnecting in ".concat((e / 1e3).toFixed(2), " seconds.")) } startHeartbeater() { c()(null != this.heartbeatInterval, "RTCControlSocket: Heartbeat interval should never null here."), this.logger.info("Starting heartbeat with interval: ".concat(this.heartbeatInterval)), null !== this.heartbeater && clearInterval(this.heartbeater), this.heartbeatAck = !0, this.heartbeater = setInterval(() => { this.heartbeatAck ? (this.heartbeatAck = !1, this.sendHeartbeat()) : null === this.expeditedHeartbeatTimeout && this.handleHeartbeatTimeout() }, this.heartbeatInterval) } sendHeartbeat() { this.logger.info("Sending heartbeat"), this.send(3, Date.now()) } stopHeartbeater() { null !== this.heartbeater && (clearInterval(this.heartbeater), this.heartbeater = null), null !== this.expeditedHeartbeatTimeout && (clearTimeout(this.expeditedHeartbeatTimeout), this.expeditedHeartbeatTimeout = null) } connect() { return 0 !== this.connectionState ? (this.logger.error("Cannot start a new connection, connection state is not disconnected"), !1) : (this.connectionState = 1, this.createWebSocket(), this.emit("connecting"), !0) } identify(e) { let { serverId: t, userId: n, sessionId: i, token: r, maxSecureFramesVersion: s, video: a = !1, streamParameters: o } = e; this.serverId = t, this.sessionId = i, this.token = r, this.connectionState = 2, this.send(0, { server_id: t, user_id: n, session_id: i, token: r, max_secure_frames_version: s, video: a, streams: g(o) }) } expeditedHeartbeat(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "", n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; if (null != this.webSocket) this.logger.info("Performing an expedited heartbeat ".concat("" !== t ? "reason: " + t : "")), this.heartbeatAck = !1, this.sendHeartbeat(), null !== this.expeditedHeartbeatTimeout && clearTimeout(this.expeditedHeartbeatTimeout), this.expeditedHeartbeatTimeout = setTimeout(() => { this.expeditedHeartbeatTimeout = null, !1 === this.heartbeatAck && this.handleHeartbeatTimeout() }, e); else { if (n) return this.resetBackoff(t); this.logger.info("Expedited heartbeat requested, but is disconnected and a reset was not " + "requested ".concat("" !== t ? "reason: " + t : "")) } return !1 } resetBackoff() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ""; return !!(this.backoff.fails > 0) && null == this.webSocket && (this.logger.info("Connection backoff reset ".concat("" !== e ? "for reason: " + e : "")), this.backoff.succeed(), this.reconnect(!1, 4802, "Reset backoff."), !0) } close() { this.logger.info("CLOSE"), this.cleanupWebSocket(e => e.close(4e3)), this.cleanupState(), this.connectionState = 0, this.emit("disconnect", !0, 1e3, "Force Close") } destroy() { this.close() } selectProtocol(e, t, n, i) { let r; let s = {}; null == n ? r = null : "sdp" in n && null != n.sdp && "" !== n.sdp ? (r = n.sdp, s = { ...n, codecs: R(n.codecs), rtc_connection_id: t }) : "address" in n && null != n.address && "" !== n.address && n.port && null != n.mode && "" !== n.mode && (r = { address: n.address, port: n.port, mode: n.mode }, s = { ...n, codecs: R(n.codecs), rtc_connection_id: t, experiments: i }), this.send(1, { protocol: e, data: r, ...s }) } updateSession(e) { this.send(14, { codecs: R(e.codecs) }) } speaking(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0; this.send(5, { speaking: this.serverVersion <= 3 ? !!e : e, delay: t, ssrc: n }) } video(e, t, n, i) { this.send(12, { audio_ssrc: e, video_ssrc: t, rtx_ssrc: n, streams: g(i) }) } mediaSinkWants(e) { this.serverVersion >= 5 && this.send(15, e) } speedTest(e, t) { this.send(19, { op: e, ...t }) } secureFramesReadyForTransition(e) { this.send(23, { transition_id: e }) } sendMLSKeyPackage(e) { this.logger.info("Sending MLS key package"), this.sendBinary(26, new Uint8Array(e)) } sendMLSCommitWelcome(e) { this.logger.info("Sending MLS commit + welcome message"), this.sendBinary(28, new Uint8Array(e)) } flagMLSInvalidCommitWelcome(e) { this.send(31, { transition_id: e }) } setHeartbeatIntervalModifier(e) { this.heartbeatIntervalModifier = e } constructor(e) { super(), m(this, "url", void 0), m(this, "logger", new T.default("RTCControlSocket")), m(this, "backoff", new E.default(1e3, 5e3)), m(this, "webSocket", void 0), m(this, "connectionState", void 0), m(this, "heartbeatInterval", void 0), m(this, "helloTimeout", void 0), m(this, "heartbeater", void 0), m(this, "lastHeartbeatAckTime", void 0), m(this, "expeditedHeartbeatTimeout", void 0), m(this, "heartbeatAck", void 0), m(this, "heartbeatIntervalModifier", void 0), m(this, "connectionStartTime", void 0), m(this, "sessionId", void 0), m(this, "serverId", void 0), m(this, "token", void 0), m(this, "resumable", void 0), m(this, "serverVersion", 0), this.url = e, this.webSocket = null, this.connectionState = 0, this.helloTimeout = null, this.lastHeartbeatAckTime = null, this.heartbeatInterval = null, this.heartbeater = null, this.heartbeatAck = !0, this.expeditedHeartbeatTimeout = null, this.heartbeatIntervalModifier = 1, this.connectionStartTime = 0, this.sessionId = null, this.serverId = null, this.token = null, this.resumable = !1 } } }, 655306: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_WANTS_FULL: function() { return S }, RTCMediaSinkWantsManagerEvent: function() { return i }, default: function() { return N } }), n("47120"), n("653041"); var i, r, s = n("47770"), a = n("46973"), o = n("966146"), l = n("902704"), u = n("846519"), d = n("526167"), _ = n("70956"), c = n("709054"), E = n("562319"), I = n("981631"), T = n("65154"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = { any: 100 }, h = 30 * _.default.Millis.SECOND, A = 120 * _.default.Millis.SECOND, m = -1 !== (0, d.getFirefoxVersion)(); (r = i || (i = {})).UserSSRCUpdate = "user-ssrc-update", r.Update = "update"; class N extends s.default { getWantsLevel() { let e = this.getVideoParticipantCount(); return this.ladder.getMaxSinkValue(e) } userVideoDisabled(e) { return this.offscreenDisabledUsers[e] } shouldReceiveFromUser(e) { var t, n; let i = !((null === (t = this.connection) || void 0 === t ? void 0 : t.getLocalVideoDisabled(e)) || this.userVideoDisabled(e) && (null === (n = this.videoHealthManager) || void 0 === n ? void 0 : n.getCurrentVideoToggleState(e)) !== I.VideoToggleState.AUTO_PROBING); return E.default.isIncomingVideoEnabled() && i } getAudioSSRCs() { return this.audioSsrcs } setConnection(e) { var t, n, i, r, s, o; let l = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; null === (t = this.connection) || void 0 === t || t.removeListener(a.BaseConnectionEvent.LocalVideoDisabled, this.handleLocalVideoDisabled), null === (n = this.connection) || void 0 === n || n.removeListener(a.BaseConnectionEvent.LocalMute, this.handleLocalMute), null === (i = this.connection) || void 0 === i || i.removeListener(a.BaseConnectionEvent.ActiveSinksChange, this.delayedUpdate), this.connection = e, null === (r = this.connection) || void 0 === r || r.addListener(a.BaseConnectionEvent.LocalVideoDisabled, this.handleLocalVideoDisabled), null === (s = this.connection) || void 0 === s || s.addListener(a.BaseConnectionEvent.LocalMute, this.handleLocalMute), null === (o = this.connection) || void 0 === o || o.addListener(a.BaseConnectionEvent.ActiveSinksChange, this.delayedUpdate), l && this.update() } setAudioSSRC(e, t) { return t > 0 ? this.audioSsrcs[e] = t : delete this.audioSsrcs[e], this.update() } setVideoSSRCs(e, t) { let n = t.filter(e => { var t; return e.active && (null !== (t = e.ssrc) && void 0 !== t ? t : 0) > 0 }).map(e => { var t; return { quality: null !== (t = e.quality) && void 0 !== t ? t : 100, ssrc: e.ssrc } }); if (n.length > 0) this.videoSsrcs[e] = n, this.participants.add(e); else { if (void 0 !== this.videoSsrcs[e]) for (let { ssrc: t } of this.videoSsrcs[e]) delete this.framesReceived[t]; delete this.remoteVideoSsrcs[e], delete this.videoSsrcs[e], this.participants.delete(e), this.emit("user-ssrc-update", e, this.audioSsrcs[e], []) } return this.update(Array.from(this.participants)) } setFirstFrameReceived(e) { return this.framesReceived[e] = !0, this.update() } setStreamId(e, t) { return null != t ? this.streamIds[e] = t : delete this.streamIds[e], this.update() } destroyUser(e) { return delete this.audioSsrcs[e], delete this.videoSsrcs[e], this.participants.delete(e), delete this.streamIds[e], this.update(Array.from(this.participants)) } reset() { this.setConnection(null, !1), this.audioSsrcs = {}, this.videoSsrcs = {}, this.remoteVideoSsrcs = {}, this.framesReceived = {}, this.streamIds = {}, this.latestWants = S } setSelectedParticipant(e) { if (e === this.selectedParticipantId) return this.latestWants; let t = []; if (null != this.selectedParticipantId && this.selectedParticipantId !== this.userId && t.push(this.selectedParticipantId), null != e) { if (this.participants.has(e)) this.selectedParticipantId = e, t.push(e); else { if (this.userId !== e) return console.warn("Participant not found: ".concat(e)), this.latestWants; this.selectedParticipantId = e } } else this.selectedParticipantId = null; return this.update(t.filter(e => { var t; return (null === (t = this.videoSsrcs[e]) || void 0 === t ? void 0 : t.length) > 1 })) } setPipOpen(e) { return (this.pipOpen = e, null != this.selectedParticipantId) ? this.update([this.selectedParticipantId]) : this.latestWants } setAppBackgrounded(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; for (let [i, r] of c.default.entries(this.streamIds)) if (this.offscreenDisabledUsers[i] = e, null != r) { var n; let i = !e || t; null === (n = this.connection) || void 0 === n || n.setHasActiveVideoOutputSink(r, i) } return this.update() } getOffscreenDisabledUsers() { return this.offscreenDisabledUsers } setSimulcastDebugOverride(e, t) { this.simulcastDebugOverrides.set(e, t), this.update() } getVideoParticipantCount() { let e = 0; for (let n of Object.keys(this.videoSsrcs)) { var t; !(null === (t = this.connection) || void 0 === t ? void 0 : t.getLocalVideoDisabled(n)) && e++ } return e } getOffscreenTimeoutMs() { return this.isStageChannel ? A : h } getSimulcastOverrideQuality(e) { return this.simulcastDebugOverrides.has(e) ? this.simulcastDebugOverrides.get(e) : T.SimulcastOverrideQuality.NO_OVERRIDE } constructor(e, t, n, i = new o.MediaSinkWantsLadder) { var r; super(), r = this, f(this, "userId", void 0), f(this, "isStageChannel", void 0), f(this, "supportsSeamless", void 0), f(this, "ladder", void 0), f(this, "connection", void 0), f(this, "audioSsrcs", void 0), f(this, "videoSsrcs", void 0), f(this, "remoteVideoSsrcs", void 0), f(this, "framesReceived", void 0), f(this, "streamIds", void 0), f(this, "offscreenUsers", void 0), f(this, "offscreenDisabledUsers", void 0), f(this, "latestWants", void 0), f(this, "participants", void 0), f(this, "selectedParticipantId", void 0), f(this, "delayedCall", void 0), f(this, "offscreenTimeout", void 0), f(this, "pipOpen", void 0), f(this, "simulcastDebugOverrides", void 0), f(this, "videoHealthManager", void 0), f(this, "delayedUpdate", void 0), f(this, "addLru", void 0), f(this, "updateOffscreenUsers", void 0), f(this, "handleLocalVideoDisabled", void 0), f(this, "handleLocalMute", void 0), f(this, "update", void 0), this.userId = e, this.isStageChannel = t, this.supportsSeamless = n, this.ladder = i, this.connection = null, this.audioSsrcs = {}, this.videoSsrcs = {}, this.remoteVideoSsrcs = {}, this.framesReceived = {}, this.streamIds = {}, this.offscreenUsers = {}, this.offscreenDisabledUsers = {}, this.latestWants = S, this.participants = new Set, this.selectedParticipantId = null, this.pipOpen = !1, this.simulcastDebugOverrides = new Map, this.videoHealthManager = null, this.delayedUpdate = () => { this.delayedCall.delay() }, this.addLru = (e, t, n) => { if (n.push(e), n.length <= 3) return; let i = -1, r = -1; for (let e = 0; e < n.length; e++) { let s = n[e], a = t - this.offscreenUsers[s]; a > i && (i = a, r = e) } this.offscreenDisabledUsers[n[r]] = !0, n.splice(r, 1) }, this.updateOffscreenUsers = () => { var e, t; if (!(null === (e = this.connection) || void 0 === e ? void 0 : e.getActiveOutputSinkTrackingEnabled())) return; let n = Date.now(), i = []; for (let [e, r] of c.default.entries(this.streamIds)) null != r && ((null === (t = this.connection) || void 0 === t ? void 0 : t.getHasActiveVideoOutputSink(r)) ? (delete this.offscreenUsers[e], delete this.offscreenDisabledUsers[e]) : null == this.offscreenUsers[e] ? (this.offscreenUsers[e] = n, this.addLru(e, n, i)) : !this.offscreenDisabledUsers[e] && (n - this.offscreenUsers[e] >= this.getOffscreenTimeoutMs() ? this.offscreenDisabledUsers[e] = !0 : this.addLru(e, n, i))); if (i.length > 0) { let e = n + this.getOffscreenTimeoutMs(); for (let t of i) e = Math.min(e, this.offscreenUsers[t] + this.getOffscreenTimeoutMs()); this.offscreenTimeout.start(e - n, this.update) } else this.offscreenTimeout.stop() }, this.handleLocalVideoDisabled = (e, t) => { this.update() }, this.handleLocalMute = (e, t) => { this.update() }, this.update = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = r.getWantsLevel(), n = { any: t }; for (let [i, s] of(r.updateOffscreenUsers(), c.default.entries(r.videoSsrcs))) { let a = [], o = !1, u = s[0].ssrc; if (r.shouldReceiveFromUser(i)) { let e = i === r.selectedParticipantId && 100 !== t && !r.pipOpen; if (s.length > 1) { for (let t of s) 100 === t.quality ? e ? (n[t.ssrc] = 100, u = t.ssrc) : n[t.ssrc] = 0 : e ? n[t.ssrc] = 0 : u = t.ssrc; if (r.supportsSeamless && !r.framesReceived[u]) for (let e of (o = !0, a = [u], s)) e.ssrc !== u && r.framesReceived[e.ssrc] && (100 === e.quality ? n[e.ssrc] = 100 : n[e.ssrc] = t, a.push(e.ssrc)) } else e && (n[u] = 100) } else for (let e of s) n[e.ssrc] = 0; let d = r.getSimulcastOverrideQuality(i); for (let e of (d === T.SimulcastOverrideQuality.HIGH ? n[u] = 100 : d === T.SimulcastOverrideQuality.LOW && (n[u] = 50), (!r.supportsSeamless || !o) && (a = [u]), s)) !a.includes(e.ssrc) && delete r.framesReceived[e.ssrc]; (e.includes(i) || void 0 !== r.remoteVideoSsrcs[i] && !(0, l.default)(r.remoteVideoSsrcs[i], a)) && (r.remoteVideoSsrcs[i] = [...a], r.emit("user-ssrc-update", i, r.audioSsrcs[i], a)) } for (let [e, t] of Object.entries(r.audioSsrcs)) { var i; (null === (i = r.connection) || void 0 === i ? void 0 : i.getLocalMute(e)) && (n[t] = 0) } return m ? r.latestWants : (null != r.connection && !(0, l.default)(r.latestWants, n) && (r.latestWants = n, r.emit("update", n)), n) }, this.delayedCall = new u.DelayedCall(100, this.update), this.offscreenTimeout = new u.Timeout, E.default.subscribe(() => { this.update() }) } } }, 81825: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return i } }), n("47120"); class i { toJS() { return { ...this } } set(e, t) { let n = this[e]; return t instanceof Date && n instanceof Date && t.getTime() === n.getTime() ? this : n !== t ? new this.constructor({ ...this, [e]: t }) : this } merge(e) { let t = null; for (let n in e) { if (!e.hasOwnProperty(n)) continue; let i = this[n], r = e[n]; (!(r instanceof Date) || !(i instanceof Date) || r.getTime() !== i.getTime()) && i !== r && (null == t && (t = { ...this }), t[n] = e[n]) } return null != t ? new this.constructor(t) : this } update(e, t, n) { null == n && (n = t, t = void 0); let r = this[e]; return r instanceof i || (r instanceof Array ? r = [...r] : r instanceof Object && (r = { ...r })), void 0 === r && (r = t), this.set(e, n(r)) } } }, 840877: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SearchTabFetcherImpl: function() { return _ }, default: function() { return d } }), n("411104"); var i = n("664751"), r = n("544891"), s = n("710845"), a = n("70956"), o = n("981631"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class u { async fetch(e, t, n) { if (!this.isCanceled) try { let r = await this.makeRequest(); if (null == r || this.isCanceled) return; if (200 === r.status) e(r); else if (202 === r.status) { var i; if (this.query.attempts = (null !== (i = this.query.attempts) && void 0 !== i ? i : 0) + 1, this.query.attempts > 5) return; let s = r.body.retry_after * a.default.Millis.SECOND; this.retryDelay = isNaN(s) || 0 === s ? 5e3 : s, this.retryLater(e, t, n), t(r) } } catch (e) { new s.default("SearchFetcher").error(e), n(e) } } cancel() { this.isCanceled = !0, null != this.indexingPollId && clearTimeout(this.indexingPollId) } retryLater(e, t, n) { null != this.indexingPollId && clearTimeout(this.indexingPollId), this.indexingPollId = setTimeout(this.fetch.bind(this, e, t, n), this.retryDelay) } constructor(e, t, n) { l(this, "indexingPollId", void 0), l(this, "searchId", void 0), l(this, "searchType", void 0), l(this, "query", void 0), l(this, "retryDelay", void 0), l(this, "isCanceled", !1), this.searchId = e, this.searchType = t, this.query = n } } class d extends u { getEndpoint() { switch (this.searchType) { case o.SearchTypes.DMS: return o.Endpoints.SEARCH_DMS; case o.SearchTypes.FAVORITES: return o.Endpoints.SEARCH_FAVORITES; case o.SearchTypes.GUILD: if (null == this.searchId || "" === this.searchId) return; return o.Endpoints.SEARCH_GUILD(this.searchId); case o.SearchTypes.CHANNEL: if (null == this.searchId || "" === this.searchId) return; return o.Endpoints.SEARCH_CHANNEL(this.searchId); default: throw Error("[SearchFetcher] Unhandled search type: ".concat(this.searchType)) } } makeRequest() { let e = this.getEndpoint(); return null == e ? null : r.HTTP.get({ url: e, query: i.stringify(this.query), oldFormErrors: !0 }) } } class _ extends u { getEndpoint() { switch (this.searchType) { case o.SearchTypes.DMS: return o.Endpoints.SEARCH_TABS_DMS; case o.SearchTypes.GUILD_CHANNEL: case o.SearchTypes.GUILD: if (null == this.searchId || "" === this.searchId) return; return o.Endpoints.SEARCH_TABS_GUILD(this.searchId); case o.SearchTypes.CHANNEL: if (null == this.searchId || "" === this.searchId) return; return o.Endpoints.SEARCH_TABS_CHANNEL(this.searchId); default: throw Error("[SearchFetcher] Unhandled search type: ".concat(this.searchType)) } } makeRequest() { let e = this.getEndpoint(); return null == e ? null : r.HTTP.post({ url: e, body: this.payload, oldFormErrors: !0 }) } constructor(e, t, n, i) { super(e, t, n), l(this, "payload", void 0), this.payload = i } } }, 999650: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ComponentTypes: function() { return i }, getFilterAutocompletions: function() { return X }, getRandomDateShortcut: function() { return x }, refreshSearchTokens: function() { return Z } }), n("47120"), n("733860"); var i, r, s = n("658722"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("913527"), d = n.n(u), _ = n("346610"), c = n("984933"), E = n("699516"), I = n("768119"), T = n("944486"), f = n("914010"), S = n("246946"), h = n("594174"), A = n("483360"), m = n("226951"), N = n("51144"), p = n("981631"), O = n("689938"); function C() { return new Set(d().months().map(e => e.toLowerCase())) } function R() { return new Set(d().weekdays().map(e => e.toLowerCase())) } function g() { let e = new Date().getFullYear(); return new Set(l().range(2015, e + 1).map(e => e.toString())) } function L(e, t) { return [e, e.clone().add(1, t)] } function v(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; return L(d()().startOf(e).add(t, e), e) } function D(e, t, n) { return L(d()(e, t).local(), n) } function M() { return { [O.default.Messages.SEARCH_SHORTCUT_TODAY]: () => v("day"), [O.default.Messages.SEARCH_SHORTCUT_YESTERDAY]: () => v("day", -1), [O.default.Messages.SEARCH_SHORTCUT_WEEK]: () => v("week"), [O.default.Messages.SEARCH_SHORTCUT_MONTH]: () => v("month"), [O.default.Messages.SEARCH_SHORTCUT_YEAR]: () => v("year") } } let y = RegExp("(?:\\s*(".concat("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", "|").concat("([0-9]{4})-([0-9]{1,2})", "|").concat("\\d{4}", "|").concat("([^\\d\\s]+)", "))"), "i"), P = RegExp("\\s*(true|false)", "i"); function U(e) { return "".concat(e, ":") } function b(e) { return RegExp(U(e), "i") } function G(e) { let t; let n = e.getMatch(1), i = e => null != e ? null == e ? void 0 : e.id : null; return null != (t = p.ID_REGEX.test(n) ? n : n === p.ME ? i(h.default.getCurrentUser()) : null != e.getMatch(4) ? i(h.default.findByTag(e.getMatch(4))) : i(h.default.findByTag(e.getMatch(2), e.getMatch(3)))) && (e.setData("userId", t), !0) } function w(e, t) { let n, i; let r = e.getFullMatch().trim().toLowerCase(), s = M()[r]; return null != s ? [n, i] = s() : C().has(r) ? [n, i] = D(r, "MMMM", "month") : R().has(r) ? [n, i] = D(r, "dddd", "day") : g().has(r) ? [n, i] = D(r, "YYYY", "year") : [n, i] = D(r, p.SEARCH_DATE_FORMAT, "day"), !!(n.isValid() && i.isValid()) && ("before" === t ? (i = n, n = null) : "after" === t && (n = i, i = null), e.setData("start", n), e.setData("end", i), !0) } function k(e) { let t = e.getMatch(1), n = f.default.getGuildId(), i = c.default.getChannels(n)[c.GUILD_SELECTABLE_CHANNELS_KEY].concat(c.default.getChannels(n)[c.GUILD_VOCAL_CHANNELS_KEY]), r = c.default.getTextChannelNameDisambiguations(n), s = l().chain(i).map(e => { let { channel: t } = e; return t }).find(e => { var n, i; return t === (null !== (i = null === (n = r[e.id]) || void 0 === n ? void 0 : n.name) && void 0 !== i ? i : e.name) }).value(); return null != s && (e.setData("channel", s), !0) } function B(e) { let t = { [O.default.Messages.SEARCH_ANSWER_HAS_LINK]: "link", [O.default.Messages.SEARCH_ANSWER_HAS_EMBED]: "embed", [O.default.Messages.SEARCH_ANSWER_HAS_POLL]: "poll", [O.default.Messages.SEARCH_ANSWER_HAS_SNAPSHOT]: "snapshot", [O.default.Messages.SEARCH_ANSWER_HAS_ATTACHMENT]: "file", [O.default.Messages.SEARCH_ANSWER_HAS_VIDEO]: "video", [O.default.Messages.SEARCH_ANSWER_HAS_IMAGE]: "image", [O.default.Messages.SEARCH_ANSWER_HAS_SOUND]: "sound", [O.default.Messages.SEARCH_ANSWER_HAS_STICKER]: "sticker" } [e.getMatch(1)]; return null != t && "" !== t && (e.setData("has", t), !0) } function V() { return [...Array.from(C()), ...Array.from(R()), ...Array.from(g()), ...Object.keys(M())] } function x() { return l().sample(V()) } function F(e, t, n) { return H(e, t, V()).map(e => ({ ...e, group: n, key: "".concat(n, "-").concat(e.text) })) } function H(e, t, n) { let i = e.toLocaleLowerCase(); return l()(n).filter(e => a()(i, e.toLocaleLowerCase())).take(t).map(e => ({ text: e })).value() } function Y(e, t) { let n, i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 10, r = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], s = I.default.getSearchType(t), a = { query: e = e.split("#")[0], limit: i, request: r }; switch (s) { case p.SearchTypes.GUILD: n = A.default.queryGuildUsers({ ...a, guildId: t }); break; case p.SearchTypes.CHANNEL: n = A.default.queryChannelUsers({ ...a, channelId: t }); break; case p.SearchTypes.DMS: n = A.default.queryUsers(e, i, !0, r, () => !0); break; default: return [] } return n.filter(e => { let { record: t } = e; return !E.default.isBlocked(t.id) }).map(e => { let { record: t } = e; return { text: N.default.getUserTag(t), user: t } }) } function j() { return I.default.getSearchType() === p.SearchTypes.GUILD } function W() { return !S.default.hidePersonalInformation } let K = /^(?:\s*(\d{17,20}|@me|([^@#:]+)#([0-9]{4})|([a-z0-9_.]{2,32})))/i; (r = i || (i = {})).FILTER = "FILTER", r.ANSWER = "ANSWER"; let z = {}; function Z() { Object.assign(z, function() { let { canForwardMessages: e } = _.MessageForwardingExperiment.getCurrentConfig({ location: "SearchTokens" }, { autoTrackExposure: !1 }), t = e ? [O.default.Messages.SEARCH_ANSWER_HAS_SNAPSHOT] : [], n = [O.default.Messages.SEARCH_ANSWER_HAS_LINK, O.default.Messages.SEARCH_ANSWER_HAS_EMBED, O.default.Messages.SEARCH_ANSWER_HAS_POLL, O.default.Messages.SEARCH_ANSWER_HAS_ATTACHMENT, O.default.Messages.SEARCH_ANSWER_HAS_VIDEO, O.default.Messages.SEARCH_ANSWER_HAS_IMAGE, O.default.Messages.SEARCH_ANSWER_HAS_SOUND, O.default.Messages.SEARCH_ANSWER_HAS_STICKER, ...t]; return { [p.SearchTokenTypes.FILTER_FROM]: { regex: b(O.default.Messages.SEARCH_FILTER_FROM), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_FROM), plainText: O.default.Messages.SEARCH_FILTER_FROM, validator: W, getAutocompletions: Y }, [p.SearchTokenTypes.ANSWER_USERNAME_FROM]: { follows: [p.SearchTokenTypes.FILTER_FROM], regex: K, validator: G, mutable: !0, componentType: "ANSWER", queryKey: "author_id" }, [p.SearchTokenTypes.FILTER_MENTIONS]: { regex: b(O.default.Messages.SEARCH_FILTER_MENTIONS), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_MENTIONS), plainText: O.default.Messages.SEARCH_FILTER_MENTIONS, validator: W, getAutocompletions: Y }, [p.SearchTokenTypes.ANSWER_USERNAME_MENTIONS]: { follows: [p.SearchTokenTypes.FILTER_MENTIONS], regex: K, validator: G, mutable: !0, componentType: "ANSWER", queryKey: "mentions" }, [p.SearchTokenTypes.FILTER_HAS]: { regex: b(O.default.Messages.SEARCH_FILTER_HAS), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_HAS), plainText: O.default.Messages.SEARCH_FILTER_HAS, getAutocompletions: (e, t, i) => H(e, i, n) }, [p.SearchTokenTypes.ANSWER_HAS]: { regex: RegExp("(?:\\s*-?(".concat(n.map(e => m.default.escape(e)).join("|"), "))"), "i"), follows: [p.SearchTokenTypes.FILTER_HAS], validator: B, componentType: "ANSWER", queryKey: "has" }, [p.SearchTokenTypes.FILTER_FILE_TYPE]: { regex: b(O.default.Messages.SEARCH_FILTER_FILE_TYPE), key: U(O.default.Messages.SEARCH_FILTER_FILE_TYPE), plainText: O.default.Messages.SEARCH_FILTER_FILE_TYPE, componentType: "FILTER" }, [p.SearchTokenTypes.ANSWER_FILE_TYPE]: { regex: /(?:\s*([^\s]+))/, follows: [p.SearchTokenTypes.FILTER_FILE_TYPE], mutable: !0, componentType: "ANSWER", queryKey: "attachment_extensions" }, [p.SearchTokenTypes.FILTER_FILE_NAME]: { regex: b(O.default.Messages.SEARCH_FILTER_FILE_NAME), key: U(O.default.Messages.SEARCH_FILTER_FILE_NAME), plainText: O.default.Messages.SEARCH_FILTER_FILE_NAME, componentType: "FILTER" }, [p.SearchTokenTypes.ANSWER_FILE_NAME]: { regex: /(?:\s*([^\s]+)(?=\s))/, follows: [p.SearchTokenTypes.FILTER_FILE_NAME], mutable: !0, componentType: "ANSWER", queryKey: "attachment_filename" }, [p.SearchTokenTypes.FILTER_BEFORE]: { regex: b(O.default.Messages.SEARCH_FILTER_BEFORE), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_BEFORE), plainText: O.default.Messages.SEARCH_FILTER_BEFORE, getAutocompletions: (e, t, n) => F(e, n, p.SearchTokenTypes.FILTER_BEFORE) }, [p.SearchTokenTypes.FILTER_ON]: { regex: b("(".concat(O.default.Messages.SEARCH_FILTER_ON, "|").concat(O.default.Messages.SEARCH_FILTER_DURING, ")")), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_DURING), plainText: O.default.Messages.SEARCH_FILTER_DURING, getAutocompletions: (e, t, n) => F(e, n, p.SearchTokenTypes.FILTER_ON) }, [p.SearchTokenTypes.FILTER_AFTER]: { regex: b(O.default.Messages.SEARCH_FILTER_AFTER), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_AFTER), plainText: O.default.Messages.SEARCH_FILTER_AFTER, getAutocompletions: (e, t, n) => F(e, n, p.SearchTokenTypes.FILTER_AFTER) }, [p.SearchTokenTypes.ANSWER_BEFORE]: { regex: y, follows: [p.SearchTokenTypes.FILTER_BEFORE], componentType: "ANSWER", mutable: !0, validator: e => w(e, "before") }, [p.SearchTokenTypes.ANSWER_ON]: { regex: y, follows: [p.SearchTokenTypes.FILTER_ON], componentType: "ANSWER", mutable: !0, validator: e => w(e, "on") }, [p.SearchTokenTypes.ANSWER_AFTER]: { regex: y, follows: [p.SearchTokenTypes.FILTER_AFTER], componentType: "ANSWER", mutable: !0, validator: e => w(e, "after") }, [p.SearchTokenTypes.FILTER_IN]: { regex: b(O.default.Messages.SEARCH_FILTER_IN), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_IN), plainText: O.default.Messages.SEARCH_FILTER_IN, validator: j, getAutocompletions(e, t, n) { "#" === e[0] && (e = e.substring(1)); let i = A.default.queryChannels({ query: e, type: c.GUILD_SELECTABLE_CHANNELS_KEY, guildId: t, limit: 1 / 0 }).concat(A.default.queryChannels({ query: e, type: c.GUILD_VOCAL_CHANNELS_KEY, guildId: t, limit: 1 / 0 })).map(e => { let { record: t } = e; return t }).filter(e => !e.isThread()); if ("" === e.trim()) { let e = T.default.getChannelId(t), n = i.find(t => t.id === e); null != n && (i.splice(i.indexOf(n), 1), i.unshift(n)) } let r = c.default.getTextChannelNameDisambiguations(t); return l()(i).take(n).map(e => { var t, n; return { text: "".concat(null !== (n = null === (t = r[e.id]) || void 0 === t ? void 0 : t.name) && void 0 !== n ? n : e.name), channel: e } }).value() } }, [p.SearchTokenTypes.ANSWER_IN]: { regex: /(?:\s*#?([^ ]+))/i, mutable: !0, follows: [p.SearchTokenTypes.FILTER_IN], componentType: "ANSWER", validator: k, queryKey: "channel_id" }, [p.SearchTokenTypes.FILTER_PINNED]: { regex: b(O.default.Messages.SEARCH_FILTER_PINNED), componentType: "FILTER", key: U(O.default.Messages.SEARCH_FILTER_PINNED), plainText: O.default.Messages.SEARCH_FILTER_PINNED, getAutocompletions: () => [{ text: "true" }, { text: "false" }] }, [p.SearchTokenTypes.ANSWER_PINNED]: { regex: P, componentType: "ANSWER", follows: [p.SearchTokenTypes.FILTER_PINNED], queryKey: "pinned", validator: e => { let t = e.getMatch(1); return "true" === t ? (e.setData("pinned", !0), !0) : "false" === t && (e.setData("pinned", !1), !0) } } } }()) } function X(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Object.keys(z).length; return l()(z).keys().filter(e => p.IS_SEARCH_FILTER_TOKEN.test(e)).filter(e => null != z[e].key).map(e => ({ token: e, text: z[e].key })).filter(t => { let { text: n } = t; return a()(e.toLowerCase(), n) }).take(t).value() } t.default = z }, 583794: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return r } }), n("47120"); class r { traceEvent(e, t) { let n; let i = this._report; void 0 !== i[n = "soundshare_state_transition" === t.type ? "soundshare_state_transition_".concat(["detached", "waiting", "attached", "started", "playing", "silence"][t.newState], "_count") : "".concat(t.type, "_count")] ? i[n] < 32767 && i[n]++ : i.soundshare_unknown_event_count++, "pid" in t && (0 === i.soundshare_first_pid && (i.soundshare_first_pid = t.pid), i.soundshare_last_pid = t.pid, this._pids.add(t.pid)), null != e && (null == i.soundshare_first_session && (i.soundshare_first_session = e), i.soundshare_last_session = e) } getStats() { return { ...this._report, soundshare_unique_pids: this._pids.size } } constructor() { i(this, "_report", void 0), i(this, "_pids", void 0), this._report = { soundshare_attach_requested_count: 0, soundshare_capturing_count: 0, soundshare_capture_stopped_count: 0, soundshare_hooked_count: 0, soundshare_recv_connect_count: 0, soundshare_recv_disconnect_count: 0, soundshare_recv_started_count: 0, soundshare_recv_stopped_count: 0, soundshare_recv_failed_count: 0, soundshare_recv_format_count: 0, soundshare_send_announce_count: 0, soundshare_send_start_count: 0, soundshare_send_stop_count: 0, soundshare_malformed_trace_count: 0, soundshare_audio_detected_count: 0, soundshare_state_transition_detached_count: 0, soundshare_state_transition_waiting_count: 0, soundshare_state_transition_attached_count: 0, soundshare_state_transition_started_count: 0, soundshare_state_transition_playing_count: 0, soundshare_state_transition_silence_count: 0, soundshare_unknown_event_count: 0, soundshare_first_pid: 0, soundshare_last_pid: 0, soundshare_unique_pids: 0, soundshare_first_session: null, soundshare_last_session: null }, this._pids = new Set } } }, 928801: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("348327"), r = n.n(i); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { shouldCommit() { return !0 } setState(e) { this.state = { ...this.state, ...e } } getState() { return this.state } reset() { this.dirty = !1, this.state = this.getInitialState() } update() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = this.getNextState({ ...this.state, ...e }); if (t) this.dirty = !r()(n, this.getInitialState()); else for (let e of Object.keys(n)) this.dirty = this.dirty || !r()(this.state[e], n[e]); let i = this.dirty && this.shouldCommit(); return (i || this.alwaysUpdateState) && (this.state = n), !!i && (this.dirty = !1, this.didCommit(this.state), !0) } forceUpdate() { this.dirty = !1, this.didCommit(this.state) } constructor(e = !0) { s(this, "alwaysUpdateState", void 0), s(this, "dirty", void 0), s(this, "state", void 0), this.alwaysUpdateState = e, this.dirty = !1, this.state = this.getInitialState() } } }, 179654: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("848479"), r = n("909766"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { getStats() { let e = this.cpuHistogram.getReport(), t = this.memoryHistogram.getReport(), n = i.default.getCumulativeCPUUsage(), r = null == this.startCPU || null == n ? void 0 : (n.usage - this.startCPU.usage) * 100 / ((n.sampleTime - this.startCPU.sampleTime) / 1e3); return { client_performance_cpu_percentile25: e.percentiles[25], client_performance_cpu_percentile50: e.percentiles[50], client_performance_cpu_percentile75: e.percentiles[75], client_performance_cpu_percentile90: e.percentiles[90], client_performance_cpu_percentile95: e.percentiles[95], client_performance_cpu_mean: null != r ? r : e.mean, client_performance_memory_percentile25: t.percentiles[25], client_performance_memory_percentile50: t.percentiles[50], client_performance_memory_percentile75: t.percentiles[75], client_performance_memory_percentile90: t.percentiles[90], client_performance_memory_percentile95: t.percentiles[95], client_performance_memory_min: t.min, client_performance_memory_max: t.max, client_performance_memory_mean: t.mean } } takeSample() { let e = i.default.getCumulativeCPUUsage(), t = i.default.getCurrentMemoryUsageKB(); if (null != e) { let t = !0; if (null != this.lastCPU) { let n = e.sampleTime - this.lastCPU.sampleTime; if (n >= 1) { let t = e.usage - this.lastCPU.usage; this.cpuHistogram.addSample(t / (n / 1e3) * 100, n) } else t = !1 } t && (this.lastCPU = e) } else { let e = i.default.getCurrentCPUUsagePercent(); null != e && this.cpuHistogram.addSample(e) } null != t && this.memoryHistogram.addSample(t) } constructor() { s(this, "cpuHistogram", new r.Histogram), s(this, "memoryHistogram", new r.Histogram), s(this, "startCPU", i.default.getCumulativeCPUUsage()), s(this, "lastCPU", this.startCPU) } } }, 824096: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VideoHealthManager: function() { return u } }), n("653041"), n("47120"); var i = n("259443"), r = n("379649"), s = n("147063"), a = n("70956"), o = n("981631"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class u { calculateFps(e, t, n) { if (-1 === this.prevFramesCodec[e] || t < this.prevFramesCodec[e] || n < this.prevTimestamp[e] || n > this.prevTimestamp[e] + 1e3 * this.windowLength) return this.prevFramesCodec[e] = t, this.prevTimestamp[e] = n, this.perUserFpsWindow[e] = [], NaN; if (n < this.prevTimestamp[e] + 900) return NaN; let i = this.elapsedSeconds(n, this.prevTimestamp[e]); this.prevTimestamp[e] = n; let r = (t - this.prevFramesCodec[e]) / i; return this.prevFramesCodec[e] = t, r } updateFps(e, t, n) { if (!this.disabled && !this.streamDisabledUsers.has(e)) { let i = this.calculateFps(e, t, n); if (i < 0 || !Number.isFinite(i)) return; if (this.perUserFpsWindow[e].push(i), !(this.perUserFpsWindow[e].length < this.windowLength)) this.perUserFpsWindow[e].length > this.windowLength && this.perUserFpsWindow[e].shift(), this.perUserFpsWindow[e].filter(e => e < this.fpsThreshold).length >= this.fpsWindowBorderlineCount ? (this.logger.info("".concat(e, ": detected poor network quality, turning off video")), this.streamDisabledUsers.add(e), this.currentVideoAutoToggleState[e] = o.VideoToggleState.DISABLED, (0, s.default)(e, o.VideoToggleState.DISABLED), this.startReenableBackoffTimer(e)) : this.currentVideoAutoToggleState[e] === o.VideoToggleState.AUTO_PROBING && (this.currentVideoAutoToggleState[e] = o.VideoToggleState.AUTO_ENABLED, this.logger.info("acceptable conditions reached, will reset and send a AUTO_ENABLED for user ".concat(e)), (0, s.default)(e, o.VideoToggleState.AUTO_ENABLED)), this.probingUserId === e && (this.probingUserId = void 0, this.tryReenableQueue()) } } startReenableBackoffTimer(e) { if (this.disabled) return; this.logger.info("startReenableBackoffTimer for user ".concat(e)); let { lastBackoffTime: t, expBackoffFactor: n } = this.retryBackoffCache[e]; null === t || n > 16 || this.elapsedSeconds((0, r.now)(), t) > 600 ? n = 1 : n *= 2, this.retryBackoffCache[e] = { lastBackoffTime: (0, r.now)(), expBackoffFactor: n }; let i = n * this.backoffTimeSec * a.default.Millis.SECOND; this.logger.info("starting backoff timer with time = ".concat(i, " milliseconds")), this.timeoutIdCache[e] = setTimeout(() => { this.queueReenable(e) }, i) } queueReenable(e) { this.enableQueue.push(e), this.tryReenableQueue() } tryReenableQueue() { if (!this.disabled) { if (null == this.probingUserId || !(this.probingUserId in this.perUserFpsWindow)) for (let e = this.enableQueue.shift(); null != e && !this.reenableVideo(e);); } } reenableVideo(e) { return e in this.perUserFpsWindow && (this.logger.info("reenableVideo called for user ".concat(e, " - time = ").concat((0, r.now)())), this.stateCleanupBeforeEnable(e), this.currentVideoAutoToggleState[e] = o.VideoToggleState.AUTO_PROBING, this.probingUserId = e, (0, s.default)(e, o.VideoToggleState.AUTO_PROBING), !0) } elapsedSeconds(e, t) { return (e - t) / 1e3 } stateCleanupBeforeEnable(e) { this.logger.info("VideoHealthManager::stateCleanupBeforeEnable"), this.perUserFpsWindow[e] = [], this.prevFramesCodec[e] = -1, this.streamDisabledUsers.delete(e) } getCurrentVideoToggleState(e) { return this.currentVideoAutoToggleState[e] } createUser(e) { this.logger.info("VideoHealthManager::createUser ".concat(e)), !(e in this.perUserFpsWindow) && (this.perUserFpsWindow[e] = [], this.prevFramesCodec[e] = -1, this.currentVideoAutoToggleState[e] = o.VideoToggleState.NONE, this.retryBackoffCache[e] = { lastBackoffTime: null, expBackoffFactor: 1 }) } deleteUser(e) { this.logger.info("VideoHealthManager::deleteUser ".concat(e)), delete this.perUserFpsWindow[e], delete this.prevFramesCodec[e], delete this.retryBackoffCache[e], delete this.currentVideoAutoToggleState[e], this.streamDisabledUsers.delete(e), e === this.probingUserId && (this.probingUserId = void 0, this.tryReenableQueue()), clearTimeout(this.timeoutIdCache[e]), delete this.timeoutIdCache[e] } disable() { for (let e in this.disabled = !0, this.perUserFpsWindow) this.deleteUser(e) } constructor(e, t, n, r) { l(this, "logger", new i.Logger("VideoHealthManager")), l(this, "windowLength", void 0), l(this, "fpsThreshold", void 0), l(this, "fpsWindowBorderlineCount", void 0), l(this, "backoffTimeSec", void 0), l(this, "disabled", !1), l(this, "perUserFpsWindow", {}), l(this, "prevFramesCodec", {}), l(this, "prevTimestamp", {}), l(this, "streamDisabledUsers", new Set), l(this, "retryBackoffCache", {}), l(this, "timeoutIdCache", {}), l(this, "currentVideoAutoToggleState", {}), l(this, "probingUserId", void 0), l(this, "enableQueue", []), this.windowLength = e, this.fpsThreshold = n, this.fpsWindowBorderlineCount = Math.ceil(e * t), this.backoffTimeSec = r, this.logger.info("constructor with windowLength = ".concat(this.windowLength, ",\n fpsWindowBorderlineCount = ").concat(this.fpsWindowBorderlineCount, ",\n fpsThreshold = ").concat(this.fpsThreshold, ",\n backoffTimeSec = ").concat(r)) } } }, 53114: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VideoQuality: function() { return f }, VideoQualityEvent: function() { return i } }), n("47120"), n("653041"); var i, r = n("392711"), s = n.n(r), a = n("47770"), o = n("46973"), l = n("379649"), u = n("358085"), d = n("709054"), _ = n("140828"), c = n("255914"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function I(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; return null != e ? Math.round(e) : t } class T { set value(e) { e && !this.state && (this.begin = this.timestampProducer.now()), !e && this.state && (this.total += this.timestampProducer.now() - Number(this.begin), this.begin = null), this.state = e } get value() { return this.state } totalDuration() { return null != this.begin ? this.total + this.timestampProducer.now() - this.begin : this.total } constructor(e, t) { E(this, "timestampProducer", void 0), E(this, "begin", void 0), E(this, "total", void 0), E(this, "state", void 0), this.timestampProducer = t, this.total = 0, this.state = e, this.begin = e ? t.now() : null } }(i || (i = {})).FpsUpdate = "fps-update"; class f extends a.default { addUserToStatsCollectionPausedSet(e) { this.statCollectionPausedUsers.add(e) } removeUserFromStatsCollectionPausedSet(e) { this.statCollectionPausedUsers.delete(e) } start() { this.streamStart = this.timestampProducer.now(), this.connection.on(o.BaseConnectionEvent.Stats, this.sampleStats) } setOutboundSsrc(e) { null == this.outboundStats[e] && (this.outboundStats[e] = new c.OutboundStats(this.timestampProducer)) } getOrCreateInboundStats(e) { return null == this.inboundStats[e] && (this.inboundStats[e] = new c.InboundStats(this.timestampProducer)), this.inboundStats[e] } setInboundUser(e, t) { this.getOrCreateInboundStats(e).setVideoStopped(0 === t, c.VideoStoppedReasons.SenderStopped) } setUserVideoDisabled(e, t) { let n = this.getOrCreateInboundStats(e); n.setVideoStopped(t, c.VideoStoppedReasons.ClientSideDisableVideo), !t && n.statsWindow.length > 0 && 0 === n.statsWindow[0].packets && (n.startTime = this.timestampProducer.now()) } pause() { !this.paused.value && this.pausedCount++, s().forEach(this.outboundStats, e => { e.statsWindow = [] }), s().forEach(this.inboundStats, e => { e.statsWindow = [] }), this.updateSendState({ paused: !0 }) } resume() { this.updateSendState({ paused: !1 }) } stop() { this.connection.off(o.BaseConnectionEvent.Stats, this.sampleStats), this.streamEnd = this.timestampProducer.now(), this.removeAllListeners() } getNetworkStats() { return this.networkQuality.getStats() } getEncoderUsageStats() { let e = new Map; for (let t in this.outboundStats) { let n = new Map; for (let i of this.outboundStats[t].getCodecsUsed()) { let r = i.toUpperCase(); n.set(r, I(this.outboundStats[t].codecBuckets[r])), e.set(parseInt(t), n) } } return e } getDecoderUsageStats() { let e = new Map; for (let t in this.inboundStats) { let n = new Map; for (let i of this.inboundStats[t].getCodecsUsed()) { let r = i.toUpperCase(); n.set(r, I(this.inboundStats[t].codecBuckets[r])), e.set(t, n) } } return e } getCodecUsageStats(e, t) { var n, i, r, s, a, o, l, u, d, _; let E = this.asymmetricCodecUpdates > this.symmetricCodecUpdates, I = new Map; if ("sender" === e || "streamer" === e) { let e = this.getEncoderUsageStats(); if (e.size > 0) { let t = [...e.keys()].sort()[0]; I = e.get(t) } return { codec_asymmetric_session: E, codec_h264_encode_duration_sec: null !== (n = I.get(c.CodecTypes.H264)) && void 0 !== n ? n : 0, codec_h265_encode_duration_sec: null !== (i = I.get(c.CodecTypes.H265)) && void 0 !== i ? i : 0, codec_vp8_encode_duration_sec: null !== (r = I.get(c.CodecTypes.VP8)) && void 0 !== r ? r : 0, codec_vp9_encode_duration_sec: null !== (s = I.get(c.CodecTypes.VP9)) && void 0 !== s ? s : 0, codec_av1_encode_duration_sec: null !== (a = I.get(c.CodecTypes.AV1)) && void 0 !== a ? a : 0 } } { let e = this.getDecoderUsageStats(); return e.has(t) && (I = e.get(t)), { codec_asymmetric_session: E, codec_h264_decode_duration_sec: null !== (o = I.get(c.CodecTypes.H264)) && void 0 !== o ? o : 0, codec_h265_decode_duration_sec: null !== (l = I.get(c.CodecTypes.H265)) && void 0 !== l ? l : 0, codec_vp8_decode_duration_sec: null !== (u = I.get(c.CodecTypes.VP8)) && void 0 !== u ? u : 0, codec_vp9_decode_duration_sec: null !== (d = I.get(c.CodecTypes.VP9)) && void 0 !== d ? d : 0, codec_av1_decode_duration_sec: null !== (_ = I.get(c.CodecTypes.AV1)) && void 0 !== _ ? _ : 0 } } } getOutboundStats() { let e = []; return s().forEach(this.outboundStats, (t, n) => { var i, r, s, a; let o; let l = null === (i = this.connection) || void 0 === i ? void 0 : i.getStreamParameters(); l.length > 1 && l.forEach(e => { if (parseInt(n) === e.ssrc) { var t; o = null !== (t = e.quality) && void 0 !== t ? t : 50 } }); let u = [1, 5, 10, 25, 50, 75], d = t.vmafHistogram.getReport(u), _ = t.psnrHistogram.getReport(u), E = t.targetBitrateHistogram.getReport([1, 5, 10, 25, 50, 75, 99]), T = t.aggregationDuration / 1e3; e.push({ ...this.getStats(t), target_fps: T > 0 ? Math.round((null !== (r = t.targetFrames) && void 0 !== r ? r : 0) / T) : 0, target_bitrate_network: T > 0 ? Math.round((null !== (s = t.targetBytesNetwork) && void 0 !== s ? s : 0) * 8 / T) : 0, target_bitrate_network_percentile1: E.count > 0 ? E.percentiles[1] : null, target_bitrate_network_percentile5: E.count > 0 ? E.percentiles[5] : null, target_bitrate_network_percentile10: E.count > 0 ? E.percentiles[10] : null, target_bitrate_network_percentile25: E.count > 0 ? E.percentiles[25] : null, target_bitrate_network_percentile50: E.count > 0 ? E.percentiles[50] : null, target_bitrate_network_percentile75: E.count > 0 ? E.percentiles[75] : null, target_bitrate_network_percentile99: E.count > 0 ? E.percentiles[99] : null, target_bitrate_max: T > 0 ? Math.round((null !== (a = t.targetBytesMax) && void 0 !== a ? a : 0) * 8 / T) : 0, duration_encoder_nvidia_cuda: I(t.encoderBuckets[c.Encoders.NVIDIA_CUDA]), duration_encoder_nvidia_direct3d: I(t.encoderBuckets[c.Encoders.NVIDIA_DIRECT_3D]), duration_encoder_openh264: I(t.encoderBuckets[c.Encoders.OPENH264]), duration_encoder_videotoolbox: I(t.encoderBuckets[c.Encoders.VIDEOTOOLBOX]), duration_encoder_amd_direct3d: I(t.encoderBuckets[c.Encoders.AMD_DIRECT_3D]), duration_encoder_intel: I(t.encoderBuckets[c.Encoders.INTEL]), duration_encoder_intel_direct3d: I(t.encoderBuckets[c.Encoders.INTEL_DIRECT_3D]), duration_encoder_vp8_libvpx: I(t.encoderBuckets[c.Encoders.VP8_LIBVPX]), duration_encoder_uncategorized: I(t.encoderBuckets[c.Encoders.UNCATEGORIZED]), duration_encoder_unknown: I(t.encoderBuckets[c.Encoders.UNKNOWN]), quality: o, average_encode_time_ms: t.averageEncodeTime, average_encoder_vmaf_score: t.vmafScoreNum > 0 ? t.vmafScoreSum / t.vmafScoreNum : null, encoder_vmaf_score_percentile1: d.count > 0 ? d.percentiles[1] : null, encoder_vmaf_score_percentile5: d.count > 0 ? d.percentiles[5] : null, encoder_vmaf_score_percentile10: d.count > 0 ? d.percentiles[10] : null, encoder_vmaf_score_percentile25: d.count > 0 ? d.percentiles[25] : null, encoder_vmaf_score_percentile50: d.count > 0 ? d.percentiles[50] : null, encoder_vmaf_score_percentile75: d.count > 0 ? d.percentiles[75] : null, average_encoder_psnr_db: t.psnrDbNum > 0 ? t.psnrDbSum / t.psnrDbNum : null, encoder_psnr_db_percentile1: _.count > 0 ? _.percentiles[1] : null, encoder_psnr_db_percentile5: _.count > 0 ? _.percentiles[5] : null, encoder_psnr_db_percentile10: _.count > 0 ? _.percentiles[10] : null, encoder_psnr_db_percentile25: _.count > 0 ? _.percentiles[25] : null, encoder_psnr_db_percentile50: _.count > 0 ? _.percentiles[50] : null, encoder_psnr_db_percentile75: _.count > 0 ? _.percentiles[75] : null, average_outbound_want: t.outboundSinkWantNum > 0 ? t.outboundSinkWantSum / t.outboundSinkWantNum : null, frames_dropped_rate_limiter: t.framesDroppedRateLimiter, frames_dropped_encoder_queue: t.framesDroppedEncoderQueue, frames_dropped_congestion_window: t.framesDroppedCongestionWindow }) }), e } getInboundStats(e) { return this.getStats(this.inboundStats[e]) } destroyUser(e) { delete this.inboundStats[e] } getInboundParticipants() { return d.default.keys(this.inboundStats) } updateSendState(e) { null != e.paused && (this.paused.value = e.paused), null != e.receivers && (this.zeroReceivers.value = 0 === e.receivers); let t = this.paused.value || this.zeroReceivers.value, n = this.videoStopped.value; this.videoStopped.value = t, t !== n && s().forEach(this.outboundStats, e => e.statsWindow = []) } getStats(e) { if (null == e) return; let t = Number(this.streamStart), n = null != this.streamEnd ? this.streamEnd - t : this.timestampProducer.now() - t, i = Math.max(e.aggregationDuration, 0) / 1e3, r = [1, 5, 10, 25, 50, 75], s = e.fpsHistogram.getReport(r), a = e.bitrateHistogram.getReport([1, 5, 10, 25, 50, 75, 99]), o = e.resolutionHistogram.getReport(r), l = e.inboundBitrateEstimateHistogram.getReport([1, 5, 10, 25, 50, 75, 99]), u = e.systemResources.getStats(), d = { duration: Math.floor(n / 1e3), duration_aggregation: I(i), duration_stopped_receiving: I(e.videoStoppedDuration.asSeconds()), duration_stream_under_8mbps: I(e.bitrateBuckets[8e6]), duration_stream_under_7mbps: I(e.bitrateBuckets[7e6]), duration_stream_under_6mbps: I(e.bitrateBuckets[6e6]), duration_stream_under_5mbps: I(e.bitrateBuckets[5e6]), duration_stream_under_4mbps: I(e.bitrateBuckets[4e6]), duration_stream_under_3mbps: I(e.bitrateBuckets[3e6]), duration_stream_under_2mbps: I(e.bitrateBuckets[2e6]), duration_stream_under_1_5mbps: I(e.bitrateBuckets[15e5]), duration_stream_under_1mbps: I(e.bitrateBuckets[1e6]), duration_stream_under_0_5mbps: I(e.bitrateBuckets[5e5]), duration_stream_at_0mbps: I(e.bitrateBuckets[0]), duration_fps_under_60: I(e.fpsBuckets[60]), duration_fps_under_55: I(e.fpsBuckets[55]), duration_fps_under_50: I(e.fpsBuckets[50]), duration_fps_under_45: I(e.fpsBuckets[45]), duration_fps_under_40: I(e.fpsBuckets[40]), duration_fps_under_35: I(e.fpsBuckets[35]), duration_fps_under_30: I(e.fpsBuckets[30]), duration_fps_under_25: I(e.fpsBuckets[25]), duration_fps_under_20: I(e.fpsBuckets[20]), duration_fps_under_15: I(e.fpsBuckets[15]), duration_fps_under_10: I(e.fpsBuckets[10]), duration_fps_under_5: I(e.fpsBuckets[5]), duration_fps_at_0: I(e.fpsBuckets[0]), avg_resolution: e.intervalTotal > 0 ? Math.round(e.resolutionTotal / e.intervalTotal) : 0, avg_minor_resolution: e.intervalTotal > 0 ? Math.round(e.minorResolutionTotal / e.intervalTotal) : 0, avg_major_resolution: e.intervalTotal > 0 ? Math.round(e.majorResolutionTotal / e.intervalTotal) : 0, duration_resolution_under_720: I(e.resolutionBuckets[720]), duration_resolution_under_480: I(e.resolutionBuckets[480]), duration_resolution_under_360: I(e.resolutionBuckets[360]), num_pauses: this.pausedCount, duration_paused: I(this.paused.totalDuration() / 1e3), duration_zero_receivers: I(this.zeroReceivers.totalDuration() / 1e3), duration_video_stopped: I(this.videoStopped.totalDuration() / 1e3), fps_percentile1: s.percentiles[1], fps_percentile5: s.percentiles[5], fps_percentile10: s.percentiles[10], fps_percentile25: s.percentiles[25], fps_percentile50: s.percentiles[50], fps_percentile75: s.percentiles[75], bitrate_percentile1: a.percentiles[1], bitrate_percentile5: a.percentiles[5], bitrate_percentile10: a.percentiles[10], bitrate_percentile25: a.percentiles[25], bitrate_percentile50: a.percentiles[50], bitrate_percentile75: a.percentiles[75], bitrate_percentile99: a.percentiles[99], resolution_percentile1: o.percentiles[1], resolution_percentile5: o.percentiles[5], resolution_percentile10: o.percentiles[10], resolution_percentile25: o.percentiles[25], resolution_percentile50: o.percentiles[50], resolution_percentile75: o.percentiles[75], inbound_bitrate_estimate_percentile1: l.percentiles[1], inbound_bitrate_estimate_percentile5: l.percentiles[5], inbound_bitrate_estimate_percentile10: l.percentiles[10], inbound_bitrate_estimate_percentile25: l.percentiles[25], inbound_bitrate_estimate_percentile50: l.percentiles[50], inbound_bitrate_estimate_percentile75: l.percentiles[75], inbound_bitrate_estimate_percentile99: l.percentiles[99], duration_video_effect: I(this.videoEffectDuration.totalDuration() / 1e3), cryptor_max_attempts: e.cryptorMaxAttempts, ...u }, { bytes: _, framesDropped: c, framesCodecError: E, framesCodec: T, framesNetwork: f, packets: S, packetsLost: h, nackCount: A, pliCount: m, qpSum: N, pauseCount: p, freezeCount: O, totalPausesDuration: C, totalFreezesDuration: R, totalFramesDuration: g, keyframes: L, passthroughCount: v, cryptorSuccessCount: D, cryptorFailureCount: M, cryptorDuration: y, cryptorAttempts: P, qualityDecodeErrors: U, qualityDecoderReboots: b, qualityScoreErrors: G, qualityFrameDrops: w, qualitySizeMismatches: k } = e.aggregatedProperties; return { ...d, avg_bitrate: i > 0 ? Math.round((null != _ ? _ : 0) * 8 / i) : 0, avg_fps: i > 0 ? Math.round((null != T ? T : 0) / i) : 0, num_bytes: _, num_packets_lost: h, num_packets: S, num_frames: f, num_frames_codec_error: E, time_to_first_frame_ms: e.timeToFirstFrame, num_frames_dropped: c, num_nacks: A, num_plis: m, qp_sum: N, receiver_pause_count: p, receiver_freeze_count: O, receiver_total_pauses_duration: C, receiver_total_freezes_duration: R, receiver_total_frames_duration: g, num_keyframes: L, cryptor_passthrough_count: v, cryptor_success_count: D, cryptor_failure_count: M, cryptor_duration: y, cryptor_attempts: P, encoder_quality_decode_errors: U, encoder_quality_decoder_reboots: b, encoder_quality_score_errors: G, encoder_quality_frame_drops: w, encoder_quality_size_mismatches: k } } receivedStats(e, t, n) { var i, r, a, o; let l = t.transport, d = (0, u.isWeb)() ? 1 : null !== (r = null === (i = l.receiverReports) || void 0 === i ? void 0 : i.length) && void 0 !== r ? r : 0, _ = new Set, E = new Set; if (this.updateSendState({ receivers: d }), t.rtp.outbound.filter(e => "video" === e.type).forEach(t => { if (null != t) { var i, r, s, a, o, u, d, E, I; let T = t.ssrc, f = this.outboundStats[T]; if (null == f && (console.warn("Unknown outbound video stream with SSRC: ".concat(T)), f = new c.OutboundStats(this.timestampProducer), this.outboundStats[T] = f), null == f.timeToFirstFrame && (t.framesEncoded > 0 || (null !== (i = t.frameRateInput) && void 0 !== i ? i : 0) > 0) && (f.timeToFirstFrame = Math.max(0, e - f.startTime)), !this.videoStopped.value) { f.appendAndIncrementStats(c.RawVideoStats.parseOutboundStats(t, e)), f.encoderCodec !== c.CodecTypes.UNKNOWN && _.add(f.encoderCodec); let i = null === (r = n.find(e => e.ssrc === T)) || void 0 === r ? void 0 : r.maxBitrate; f.appendTargetRates(null === (s = n.find(e => e.ssrc === T)) || void 0 === s ? void 0 : s.maxFrameRate, null !== (o = t.bitrateTarget) && void 0 !== o ? o : Math.min(null !== (a = l.availableOutgoingBitrate) && void 0 !== a ? a : 0, null != i ? i : 0), i), f.averageEncodeTime = null !== (u = t.averageEncodeTime) && void 0 !== u ? u : 0, f.framesDroppedRateLimiter = null !== (d = t.framesDroppedRateLimiter) && void 0 !== d ? d : null, f.framesDroppedEncoderQueue = null !== (E = t.framesDroppedEncoderQueue) && void 0 !== E ? E : null, f.framesDroppedCongestionWindow = null !== (I = t.framesDroppedCongestionWindow) && void 0 !== I ? I : null } } }), !this.paused.value && s().forEach(t.rtp.inbound, (t, n) => { let i = t.find(e => "video" === e.type); if (null != i) { let t = this.inboundStats[n]; null == t && (console.warn("Unknown inbound video stream for user: ".concat(n)), t = new c.InboundStats(this.timestampProducer), this.inboundStats[n] = t); let r = c.RawVideoStats.parseInboundStats(i, e); !this.statCollectionPausedUsers.has(n) && (t.appendAndIncrementStats(r), t.appendTransportStats(l)), r.packets > 0 && this.emit("fps-update", n, r.framesCodec, r.timestamp), t.decoderCodec !== c.CodecTypes.UNKNOWN && E.add(t.decoderCodec), null == t.timeToFirstFrame && i.framesDecoded > 0 && (t.timeToFirstFrame = e - t.startTime) } }), 0 !== _.size && 0 !== E.size) { ; if (a = _, o = E, a.size === o.size && Array.from(a).every(e => o.has(e))) this.symmetricCodecUpdates++; else this.asymmetricCodecUpdates++ } } updateSystemResourceStats() { for (let e in this.outboundStats) this.outboundStats[e].addSystemResources(); for (let e in this.inboundStats) this.inboundStats[e].addSystemResources() } updateVideoEffectStats(e) { let t = null == e ? void 0 : e.rtp.outbound.find(e => "video" === e.type); this.videoEffectDuration.value = (null == t ? void 0 : t.type) === "video" && null != t.filter } constructor(e, t = l.TimeStampProducer) { super(), E(this, "connection", void 0), E(this, "timestampProducer", void 0), E(this, "networkQuality", void 0), E(this, "paused", void 0), E(this, "pausedCount", void 0), E(this, "zeroReceivers", void 0), E(this, "videoStopped", void 0), E(this, "videoEffectDuration", void 0), E(this, "outboundStats", void 0), E(this, "inboundStats", void 0), E(this, "streamStart", void 0), E(this, "streamEnd", void 0), E(this, "symmetricCodecUpdates", void 0), E(this, "asymmetricCodecUpdates", void 0), E(this, "statCollectionPausedUsers", void 0), E(this, "sampleStats", void 0), this.connection = e, this.timestampProducer = t, this.networkQuality = new _.default, this.pausedCount = 0, this.outboundStats = {}, this.inboundStats = {}, this.symmetricCodecUpdates = 0, this.asymmetricCodecUpdates = 0, this.statCollectionPausedUsers = new Set, this.sampleStats = e => { if (null == e) return; let t = this.timestampProducer.now(); if (this.networkQuality.incrementNetworkStats(t), this.updateSystemResourceStats(), this.updateVideoEffectStats(e), null == e) return; let n = this.connection.getStreamParameters(); this.receivedStats(t, e, n) }, this.paused = new T(!1, t), this.zeroReceivers = new T(!1, t), this.videoStopped = new T(!1, t), this.videoEffectDuration = new T(!1, t) } } }, 255914: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CodecTypes: function() { return i }, Encoders: function() { return r }, InboundStats: function() { return C }, OutboundStats: function() { return R }, RawVideoStats: function() { return O }, VideoStoppedReasons: function() { return a }, parseEncoder: function() { return N } }), n("47120"), n("653041"); var i, r, s, a, o, l, u, d, _ = n("379649"), c = n("909766"), E = n("179654"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let T = [0, 5e5, 1e6, 15e5, 2e6, 3e6, 4e6, 5e6, 6e6, 7e6, 8e6], f = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60], S = [720, 480, 360], h = ["framesCodec", "framesNetwork", "packets", "packetsLost", "framesDropped", "framesCodecError", "bytes", "nackCount", "pliCount", "qpSum", "freezeCount", "pauseCount", "totalFreezesDuration", "totalPausesDuration", "totalFramesDuration", "keyframes", "passthroughCount", "cryptorSuccessCount", "cryptorFailureCount", "cryptorDuration", "cryptorAttempts", "qualityDecodeErrors", "qualityDecoderReboots", "qualityScoreErrors", "qualityFrameDrops", "qualitySizeMismatches"]; (o = i || (i = {})).H264 = "H264", o.H265 = "H265", o.VP8 = "VP8", o.VP9 = "VP9", o.AV1 = "AV1", o.UNKNOWN = "UNKNOWN", (l = r || (r = {})).NVIDIA_CUDA = "nvidia_cuda", l.NVIDIA_DIRECT_3D = "nvidia_direct_3d", l.OPENH264 = "openh264", l.VIDEOTOOLBOX = "videotoolbox", l.AMD_DIRECT_3D = "amd_direct_3d", l.INTEL = "intel", l.INTEL_DIRECT_3D = "intel_direct_3d", l.VP8_LIBVPX = "vp8_libvpx", l.UNCATEGORIZED = "uncategorized", l.UNKNOWN = "unknown", (u = s || (s = {})).NVIDIA_DIRECT_3D = "nvidia_direct_3d", u.OPENH264 = "openh264", u.VIDEOTOOLBOX = "videotoolbox", u.AMD_DIRECT_3D = "amd_direct_3d", u.INTEL = "intel", u.INTEL_DIRECT_3D = "intel_direct_3d", u.VP8_LIBVPX = "vp8_libvpx", u.UNCATEGORIZED = "uncategorized", u.UNKNOWN = "unknown"; let A = Object.freeze({ "nvidia: cuda": "nvidia_cuda", "nvidia: direct3d": "nvidia_direct_3d", "amd: direct3d": "amd_direct_3d", "intel: direct3d": "intel_direct_3d", intel: "intel", VideoToolbox: "videotoolbox", OpenH264: "openh264", libvpx: "vp8_libvpx" }), m = Object.freeze({ "nvidia: direct3d": "nvidia_direct_3d", "amd: direct3d": "amd_direct_3d", "intel: direct3d": "intel_direct_3d", intel: "intel", VideoToolbox: "videotoolbox", OpenH264: "openh264", libvpx: "vp8_libvpx" }); function N(e) { if (null == e) return "unknown"; for (let t of Object.keys(A)) if (e.includes(t)) return A[t]; return "uncategorized" }(d = a || (a = {}))[d.None = 0] = "None", d[d.ClientSideDisableVideo = 1] = "ClientSideDisableVideo", d[d.SenderStopped = 2] = "SenderStopped"; function p(e) { if (null == e) return "UNKNOWN"; if ("H264" === (e = e.toUpperCase())) return "H264"; if ("H265" === e) return "H265"; if ("VP8" === e) return "VP8"; else if ("VP9" === e) return "VP9"; else if ("AV1" === e || "AV1X" === e) return "AV1"; else return "UNKNOWN" } class O { static parseInboundStats(e, t) { var n, i, r, s, a, o, l; let u = new O; return null == e ? u : (u.bytes = e.bytesReceived, u.framesCodec = e.framesDecoded, u.framesCodecError = null !== (n = e.framesDecodeErrors) && void 0 !== n ? n : null, u.framesNetwork = e.framesReceived, u.packets = e.packetsReceived, u.packetsLost = e.packetsLost, u.framesDropped = e.framesDropped, u.resolution = null != e.resolution ? e.resolution.height : 0, u.minorResolution = null != e.resolution ? Math.min(e.resolution.height, e.resolution.width) : 0, u.majorResolution = null != e.resolution ? Math.max(e.resolution.height, e.resolution.width) : 0, u.timestamp = t, u.nackCount = e.nackCount, u.pliCount = e.pliCount, u.decoder = function(e) { if (null == e) return "unknown"; for (let t of Object.keys(m)) if (e.includes(t)) return m[t]; return "uncategorized" }(e.decoderImplementationName), u.codecType = p(e.codec.name), u.qpSum = 0, u.freezeCount = e.freezeCount, u.pauseCount = e.pauseCount, u.totalFreezesDuration = e.totalFreezesDuration, u.totalPausesDuration = e.totalPausesDuration, u.totalFramesDuration = e.totalFramesDuration, u.keyframes = null !== (i = e.keyFramesDecoded) && void 0 !== i ? i : null, u.passthroughCount = null !== (r = e.passthroughCount) && void 0 !== r ? r : 0, u.cryptorSuccessCount = null !== (s = e.decryptSuccessCount) && void 0 !== s ? s : 0, u.cryptorFailureCount = null !== (a = e.decryptFailureCount) && void 0 !== a ? a : 0, u.cryptorDuration = null !== (o = e.decryptDuration) && void 0 !== o ? o : 0, u.cryptorAttempts = null !== (l = e.decryptAttempts) && void 0 !== l ? l : 0, u) } static parseOutboundStats(e, t) { var n, i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, C; let R = new O; return null == e ? R : { bytes: e.bytesSent, framesCodec: e.framesEncoded, framesCodecError: null, framesNetwork: null !== (n = e.framesSent) && void 0 !== n ? n : 0, packets: e.packetsSent, packetsLost: null !== (i = e.packetsLost) && void 0 !== i ? i : 0, framesDropped: 0, resolution: null != e.resolution ? e.resolution.height : 0, minorResolution: null != e.resolution ? Math.min(e.resolution.height, e.resolution.width) : 0, majorResolution: null != e.resolution ? Math.max(e.resolution.height, e.resolution.width) : 0, timestamp: t, encoder: N(e.encoderImplementationName), decoder: null, codecType: p(e.codec.name), nackCount: e.nackCount, pliCount: e.pliCount, qpSum: e.qpSum, freezeCount: 0, pauseCount: 0, totalFreezesDuration: 0, totalPausesDuration: 0, totalFramesDuration: 0, outboundSinkWant: null !== (r = e.sinkWantAsInt) && void 0 !== r ? r : null, vmafScore: null !== (s = e.encoderQualityVmaf) && void 0 !== s ? s : null, qualityDecodeErrors: null !== (a = e.qualityDecodeErrors) && void 0 !== a ? a : 0, qualityDecoderReboots: null !== (o = e.qualityDecoderReboots) && void 0 !== o ? o : 0, qualityScoreErrors: null !== (l = e.qualityScoreErrors) && void 0 !== l ? l : 0, qualityFrameDrops: null !== (u = e.qualityFrameDrops) && void 0 !== u ? u : 0, qualitySizeMismatches: null !== (d = e.qualitySizeMismatches) && void 0 !== d ? d : 0, psnrDb: null !== (_ = e.encoderQualityPsnr) && void 0 !== _ ? _ : null, keyframes: null !== (c = e.keyFramesEncoded) && void 0 !== c ? c : null, framesDroppedRateLimiter: null !== (E = e.framesDroppedRateLimiter) && void 0 !== E ? E : null, framesDroppedEncoderQueue: null !== (I = e.framesDroppedEncoderQueue) && void 0 !== I ? I : null, framesDroppedCongestionWindow: null !== (T = e.framesDroppedCongestionWindow) && void 0 !== T ? T : null, passthroughCount: null !== (f = e.passthroughCount) && void 0 !== f ? f : 0, cryptorSuccessCount: null !== (S = e.encryptSuccessCount) && void 0 !== S ? S : 0, cryptorFailureCount: null !== (h = e.encryptFailureCount) && void 0 !== h ? h : 0, cryptorDuration: null !== (A = e.encryptDuration) && void 0 !== A ? A : 0, cryptorAttempts: null !== (m = e.encryptAttempts) && void 0 !== m ? m : 0, cryptorMaxAttempts: null !== (C = e.encryptMaxAttempts) && void 0 !== C ? C : 0 } } constructor() { I(this, "bytes", 0), I(this, "framesCodec", 0), I(this, "framesCodecError", null), I(this, "framesNetwork", 0), I(this, "resolution", 0), I(this, "minorResolution", 0), I(this, "majorResolution", 0), I(this, "timestamp", 0), I(this, "packets", 0), I(this, "packetsLost", 0), I(this, "framesDropped", 0), I(this, "nackCount", 0), I(this, "pliCount", 0), I(this, "encoder", null), I(this, "decoder", null), I(this, "codecType", null), I(this, "qpSum", 0), I(this, "freezeCount", 0), I(this, "pauseCount", 0), I(this, "totalFreezesDuration", 0), I(this, "totalPausesDuration", 0), I(this, "totalFramesDuration", 0), I(this, "vmafScore", null), I(this, "psnrDb", null), I(this, "outboundSinkWant", null), I(this, "keyframes", null), I(this, "framesDroppedRateLimiter", null), I(this, "framesDroppedEncoderQueue", null), I(this, "framesDroppedCongestionWindow", null), I(this, "passthroughCount", 0), I(this, "cryptorSuccessCount", 0), I(this, "cryptorFailureCount", 0), I(this, "cryptorDuration", 0), I(this, "cryptorAttempts", 0), I(this, "cryptorMaxAttempts", 0), I(this, "qualityDecodeErrors", 0), I(this, "qualityDecoderReboots", 0), I(this, "qualityScoreErrors", 0), I(this, "qualityFrameDrops", 0), I(this, "qualitySizeMismatches", 0) } } class C { get isVideoStopped() { return 0 !== this.videoStoppedReason } get videoStoppedDuration() { return this.videoStoppedWatch.elapsed() } collectAggregationStats(e, t) { for (let i of h) { var n; let r = e[i]; if (null === r) continue; let s = null !== (n = t[i]) && void 0 !== n ? n : 0; s > r ? this.aggregatedProperties[i] += r : this.aggregatedProperties[i] += r - s } this.aggregationDuration += e.timestamp - t.timestamp } setVideoStopped(e, t) { if (e) { this.videoStoppedReason |= t, this.videoStoppedWatch.start(); return } this.videoStoppedReason &= ~t, 0 === this.videoStoppedReason && (this.statsWindow.splice(0), this.videoStoppedWatch.stop()) } appendAndIncrementStats(e) { if (this.isVideoStopped) return; if (this.statsWindow.push(e), this.statsWindow.length < 2) return; let t = this.statsWindow[this.statsWindow.length - 1], n = this.statsWindow[this.statsWindow.length - 2]; this.collectAggregationStats(t, n); let { bytes: i, framesCodec: r, timestamp: s, resolution: a, minorResolution: o, majorResolution: l, encoder: u, decoder: d, codecType: _ } = t, { timestamp: c } = n, E = (s - c) / 1e3; if (this.intervalTotal += E, this.resolutionTotal += a * E, this.minorResolutionTotal += o * E, this.majorResolutionTotal += l * E, this.cryptorMaxAttempts = Math.max(this.cryptorMaxAttempts, t.cryptorMaxAttempts), null != u && null != _ && "encoderBuckets" in this && (this.encoderBuckets[u] += E, this.codecBuckets[_] += E, null != t.codecType && "UNKNOWN" !== t.codecType && (this.encoderCodec = t.codecType), null != e.vmafScore && e.vmafScore >= 0 && (this.vmafScoreNum += 1, this.vmafScoreSum += e.vmafScore, this.vmafHistogram.addSample(e.vmafScore)), null != e.psnrDb && e.psnrDb >= 0 && (this.psnrDbNum += 1, this.psnrDbSum += e.psnrDb, this.psnrHistogram.addSample(e.psnrDb)), null != e.outboundSinkWant && 0 !== e.outboundSinkWant && (this.outboundSinkWantNum += 1, this.outboundSinkWantSum += e.outboundSinkWant)), null != d && null != _ && "decoderBuckets" in this && (this.decoderBuckets[d] += E, this.codecBuckets[_] += E, null != t.codecType && "UNKNOWN" !== t.codecType && (this.decoderCodec = t.codecType)), this.statsWindow.length < 6) return; let { bytes: I, framesCodec: h, timestamp: A } = this.statsWindow[this.statsWindow.length - 3]; S.forEach(e => { a <= e && (this.resolutionBuckets[e] += E) }); let m = (s - A) / 1e3, N = (i - I) * 8 / m, p = (r - h) / m; T.forEach(e => { N <= e && (this.bitrateBuckets[e] += E) }), f.forEach(e => { p <= e && (this.fpsBuckets[e] += E) }), this.resolutionHistogram.addSample(a), this.bitrateHistogram.addSample(N), this.fpsHistogram.addSample(p), this.statsWindow.shift() } addSystemResources() { this.systemResources.takeSample() } appendTransportStats(e) { null != e.inboundBitrateEstimate && this.inboundBitrateEstimateHistogram.addSample(e.inboundBitrateEstimate) } getCodecsUsed() { let e = new Set; for (let [t, n] of Object.entries(this.codecBuckets)) n > 0 && e.add(t); return e } constructor(e) { I(this, "decoderBuckets", { nvidia_direct_3d: 0, openh264: 0, videotoolbox: 0, amd_direct_3d: 0, intel: 0, intel_direct_3d: 0, vp8_libvpx: 0, uncategorized: 0, unknown: 0 }), I(this, "codecBuckets", { H264: 0, H265: 0, VP8: 0, VP9: 0, AV1: 0, UNKNOWN: 0 }), I(this, "statsWindow", []), I(this, "fpsHistogram", new c.Histogram), I(this, "bitrateHistogram", new c.Histogram), I(this, "inboundBitrateEstimateHistogram", new c.Histogram), I(this, "resolutionHistogram", new c.Histogram), I(this, "systemResources", new E.default), I(this, "decoderCodec", "UNKNOWN"), I(this, "startTime", void 0), I(this, "timeToFirstFrame", void 0), I(this, "aggregatedProperties", { framesCodec: 0, framesNetwork: 0, packets: 0, packetsLost: 0, framesDropped: 0, framesCodecError: 0, bytes: 0, nackCount: 0, pliCount: 0, qpSum: 0, freezeCount: 0, pauseCount: 0, totalFreezesDuration: 0, totalPausesDuration: 0, totalFramesDuration: 0, keyframes: 0, passthroughCount: 0, cryptorSuccessCount: 0, cryptorFailureCount: 0, cryptorDuration: 0, cryptorAttempts: 0, qualityDecodeErrors: 0, qualityDecoderReboots: 0, qualityScoreErrors: 0, qualityFrameDrops: 0, qualitySizeMismatches: 0 }), I(this, "aggregationDuration", 0), I(this, "bitrateBuckets", {}), I(this, "fpsBuckets", {}), I(this, "resolutionBuckets", {}), I(this, "resolutionTotal", 0), I(this, "minorResolutionTotal", 0), I(this, "majorResolutionTotal", 0), I(this, "intervalTotal", 0), I(this, "cryptorMaxAttempts", 0), I(this, "videoStoppedWatch", void 0), I(this, "videoStoppedReason", 0), this.startTime = e.now(), this.videoStoppedWatch = new _.StopWatch(e), T.forEach(e => { this.bitrateBuckets[e] = 0 }), f.forEach(e => { this.fpsBuckets[e] = 0 }), S.forEach(e => { this.resolutionBuckets[e] = 0 }) } } class R extends C { appendTargetRates(e, t, n) { if (this.statsWindow.length < 2) return; e = null != e ? e : 0, t = null != t ? t : 0, n = null != n ? n : 0; let i = (this.statsWindow[this.statsWindow.length - 1].timestamp - this.statsWindow[this.statsWindow.length - 2].timestamp) / 1e3; this.targetFrames = this.targetFrames + e * i, this.targetBytesNetwork = this.targetBytesNetwork + t / 8 * i, this.targetBytesMax = this.targetBytesMax + n / 8 * i, this.targetBitrateHistogram.addSample(t) } constructor(...e) { super(...e), I(this, "encoderBuckets", { nvidia_cuda: 0, nvidia_direct_3d: 0, openh264: 0, videotoolbox: 0, amd_direct_3d: 0, intel: 0, intel_direct_3d: 0, vp8_libvpx: 0, uncategorized: 0, unknown: 0 }), I(this, "encoderCodec", "UNKNOWN"), I(this, "targetFrames", 0), I(this, "targetBytesMax", 0), I(this, "targetBytesNetwork", 0), I(this, "targetBitrateHistogram", new c.Histogram), I(this, "averageEncodeTime", 0), I(this, "vmafScoreSum", 0), I(this, "vmafScoreNum", 0), I(this, "vmafHistogram", new c.Histogram), I(this, "psnrDbSum", 0), I(this, "psnrDbNum", 0), I(this, "psnrHistogram", new c.Histogram), I(this, "qualityDecodeErrors", 0), I(this, "qualityDecoderReboots", 0), I(this, "qualityScoreErrors", 0), I(this, "qualityFrameDrops", 0), I(this, "qualitySizeMismatches", 0), I(this, "outboundSinkWantSum", 0), I(this, "outboundSinkWantNum", 0), I(this, "framesDroppedRateLimiter", null), I(this, "framesDroppedEncoderQueue", null), I(this, "framesDroppedCongestionWindow", null) } } }, 174532: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("445686"), r = n("379649"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { start() { this.listeningUsers.clear(), this.listening.reset(), this.speaking.reset(), this.participation.reset(), this.connected.reset(), this.connected.start(), this.connection.on(i.BaseConnectionEvent.Speaking, (e, t, n) => { this.userId === e ? this.onSpeaking(0 !== t) : this.onListening(0 !== t, e) }) } onSpeaking(e) { e ? (this.speaking.start(), this.participation.start()) : (this.speaking.stop(), !this.listening.isRunning() && this.participation.stop()) } onListening(e, t) { e ? (this.listeningUsers.add(t), this.listening.start(), this.participation.start()) : this.listeningUsers.delete(t) && 0 === this.listeningUsers.size && (this.listening.stop(), !this.speaking.isRunning() && this.participation.stop()) } stop() { this.speaking.stop(), this.listening.stop(), this.participation.stop(), this.connected.stop() } getDurationStats() { return { duration_listening_ms: this.listening.elapsed().asMilliseconds(), duration_speaking_ms: this.speaking.elapsed().asMilliseconds(), duration_participation_ms: this.participation.elapsed().asMilliseconds(), duration_connected_ms: this.connected.elapsed().asMilliseconds() } } constructor(e, t, n = r.TimeStampProducer) { s(this, "userId", void 0), s(this, "connection", void 0), s(this, "timestampProducer", void 0), s(this, "listeningUsers", void 0), s(this, "listening", void 0), s(this, "speaking", void 0), s(this, "participation", void 0), s(this, "connected", void 0), this.userId = e, this.connection = t, this.timestampProducer = n, this.listeningUsers = new Set, this.listening = new r.StopWatch(this.timestampProducer), this.speaking = new r.StopWatch(this.timestampProducer), this.participation = new r.StopWatch(this.timestampProducer), this.connected = new r.StopWatch(this.timestampProducer) } } }, 895066: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }), n("724458"), n("47120"), n("653041"); var i = n("392711"), r = n.n(i), s = n("46973"), a = n("379649"), o = n("140828"), l = n("179654"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class d { start() { this.connection.on(s.BaseConnectionEvent.Stats, this.sampleStats) } stop() { this.connection.off(s.BaseConnectionEvent.Stats, this.sampleStats) } getMosStats() { let e = r().reduce(this.inboundStats, (e, t) => { e.mosSum += t.mosSum, e.mosCount += t.mosCount; for (var n = 0; n < 5; n++) e.mosBuckets[n] += t.mosBuckets[n]; return e }, { mosSum: 0, mosCount: 0, mosBuckets: [0, 0, 0, 0, 0] }); return { mos_mean: e.mosCount > 0 ? e.mosSum / e.mosCount : 0, mos_1: e.mosBuckets[1], mos_2: e.mosBuckets[2], mos_3: e.mosBuckets[3], mos_4: e.mosBuckets[4] } } getPacketStats() { let e = r().reduce(this.inboundStats, (e, t) => (e.packetsReceived += t.packetsReceived, e.packetsReceivedLost += t.packetsLost, null != e.fecPacketsReceived && (e.fecPacketsReceived += t.fecPacketsReceived), null != e.fecPacketsDiscarded && (e.fecPacketsDiscarded += t.fecPacketsDiscarded), e), { packetsReceived: 0, packetsReceivedLost: 0, fecPacketsReceived: 0, fecPacketsDiscarded: 0 }); return { packets_sent: this.outboundStats.packetsSent, packets_sent_lost: this.outboundStats.packetsLost, packets_received: e.packetsReceived, packets_received_lost: e.packetsReceivedLost, fec_packets_received: e.fecPacketsReceived, fec_packets_discarded: e.fecPacketsDiscarded } } getBytesStats() { let e = r().reduce(this.inboundStats, (e, t) => e + t.bytesReceived, 0); return { bytes_sent: this.outboundStats.bytesSent, bytes_received: e } } getNetworkStats() { return this.networkQuality.getStats() } getSystemResourceStats() { return this.systemResources.getStats() } getBufferStats() { let e = r().reduce(this.inboundStats, (e, t) => ((null == e || null != t.bufferStats.audioJitterBuffer && null != e.audioJitterBuffer && t.bufferStats.audioJitterBuffer.p75 > e.audioJitterBuffer.p75) && (e = t.bufferStats), e), null); return { ... function(e) { let t = {}; for (let n in e) { let i = e[n]; t[n + "_mean"] = null != i ? i.mean : 0, t[n + "_p75"] = null != i ? i.p75 : 0, t[n + "_p95"] = null != i ? i.p95 : 0, t[n + "_p99"] = null != i ? i.p99 : 0, t[n + "_max"] = null != i ? i.max : 0 } return t }({ audio_jitter_buffer: null != e ? e.audioJitterBuffer : null, audio_jitter_target: null != e ? e.audioJitterTarget : null, audio_jitter_delay: null != e ? e.audioJitterDelay : null, relative_reception_delay: null != e ? e.relativeReceptionDelay : null, relative_playout_delay: null != e ? e.relativePlayoutDelay : null }) } } getFrameOpStats() { let e = r().reduce(this.inboundStats, (e, t) => (null != t.frameOpStats.silent && (e.silent += t.frameOpStats.silent), null != t.frameOpStats.normal && (e.normal += t.frameOpStats.normal), null != t.frameOpStats.merged && (e.merged += t.frameOpStats.merged), null != t.frameOpStats.expanded && (e.expanded += t.frameOpStats.expanded), null != t.frameOpStats.accelerated && (e.accelerated += t.frameOpStats.accelerated), null != t.frameOpStats.preemptiveExpanded && (e.preemptiveExpanded += t.frameOpStats.preemptiveExpanded), null != t.frameOpStats.cng && (e.cng += t.frameOpStats.cng), e), { silent: 0, normal: 0, merged: 0, expanded: 0, accelerated: 0, preemptiveExpanded: 0, cng: 0 }); return { frame_op_silent: e.silent, frame_op_normal: e.normal, frame_op_merged: e.merged, frame_op_expanded: e.expanded, frame_op_accelerated: e.accelerated, frame_op_preemptive_expanded: e.preemptiveExpanded, frame_op_cng: e.cng } } getDurationStats() { return { duration_listening: this.duration.listening, duration_speaking: this.duration.speaking, duration_participation: this.duration.participation, duration_connected: this.duration.connected } } getTransportStats() { return { decryption_failures: this.decryptionFailures, routing_failures: this.routingFailures } } getE2EEStats() { let e = r().reduce(this.inboundStats, (e, t) => { var n, i, r, s, a; return e.passthroughCount += null !== (n = t.passthroughCount) && void 0 !== n ? n : 0, e.decryptSuccessCount += null !== (i = t.decryptSuccessCount) && void 0 !== i ? i : 0, e.decryptFailureCount += null !== (r = t.decryptFailureCount) && void 0 !== r ? r : 0, e.decryptDuration += null !== (s = t.decryptDuration) && void 0 !== s ? s : 0, e.decryptAttempts += null !== (a = t.decryptAttempts) && void 0 !== a ? a : 0, e }, { passthroughCount: 0, decryptSuccessCount: 0, decryptFailureCount: 0, decryptDuration: 0, decryptAttempts: 0 }); return { decrypt_passthrough_count: e.passthroughCount, decrypt_success_count: e.decryptSuccessCount, decrypt_failure_count: e.decryptFailureCount, decrypt_duration: e.decryptDuration, decrypt_attempts: e.decryptAttempts, encrypt_passthrough_count: this.outboundStats.passthroughCount, encrypt_success_count: this.outboundStats.encryptSuccessCount, encrypt_failure_count: this.outboundStats.encryptFailureCount, encrypt_duration: this.outboundStats.encryptDuration, encrypt_attempts: this.outboundStats.encryptAttempts, encrypt_max_attempts: this.outboundStats.encryptMaxAttempts } } getPeriodicStats() { let e = []; for (let [T, f] of Object.entries(this.periodicInboundStats)) { let { previous: S, current: h, currentTimestampMs: A, previousTimestampMs: m, numRateSamples: N } = f; if (void 0 !== m && A > m) { var t, n, i, r, s, a, o, l, u, d, _, c, E, I; let p = A - m, O = { userId: T, silent: null !== (n = h.silent) && void 0 !== n ? n : 0 - (null !== (t = S.silent) && void 0 !== t ? t : 0), normal: null !== (r = h.normal) && void 0 !== r ? r : 0 - (null !== (i = S.normal) && void 0 !== i ? i : 0), merged: null !== (a = h.merged) && void 0 !== a ? a : 0 - (null !== (s = S.merged) && void 0 !== s ? s : 0), expanded: null !== (l = h.expanded) && void 0 !== l ? l : 0 - (null !== (o = S.expanded) && void 0 !== o ? o : 0), accelerated: null !== (d = h.accelerated) && void 0 !== d ? d : 0 - (null !== (u = S.accelerated) && void 0 !== u ? u : 0), preemptiveExpanded: null !== (c = h.preemptiveExpanded) && void 0 !== c ? c : 0 - (null !== (_ = S.preemptiveExpanded) && void 0 !== _ ? _ : 0), cng: null !== (I = h.cng) && void 0 !== I ? I : 0 - (null !== (E = S.cng) && void 0 !== E ? E : 0), accelerateRate: f.accelerateRateSum / N, expandRate: f.expandRateSum / N, preemptiveExpandRate: f.preemptiveExpandRateSum / N, speechExpandRate: f.speechExpandRateSum / N, durationMs: p }; O.normal + O.merged + O.expanded + O.accelerated + O.preemptiveExpanded > 0 && e.push(O) } this.periodicInboundStats[T].accelerateRateSum = 0, this.periodicInboundStats[T].expandRateSum = 0, this.periodicInboundStats[T].preemptiveExpandRateSum = 0, this.periodicInboundStats[T].speechExpandRateSum = 0, this.periodicInboundStats[T].numRateSamples = 0, this.periodicInboundStats[T].previous = h, this.periodicInboundStats[T].previousTimestampMs = A } return e } calculateMos(e, t) { let n = this.calculateR(e, t); return n < 0 ? 1 : n > 100 ? 4.5 : 1 + .035 * n + 71e-7 * n * (n - 60) * (100 - n) } calculateR(e, t) { return 93.4 - (.024 * e + (e > 177.3 ? .11 * (e - 177.3) : 0)) - (10 + 122 * t / (t + 10)) } constructor(e) { u(this, "connection", void 0), u(this, "inboundStats", void 0), u(this, "outboundStats", void 0), u(this, "networkQuality", void 0), u(this, "systemResources", void 0), u(this, "duration", void 0), u(this, "decryptionFailures", void 0), u(this, "routingFailures", void 0), u(this, "periodicInboundStats", void 0), u(this, "sampleStats", void 0), this.connection = e, this.sampleStats = e => { if (null == e) return; this.networkQuality.incrementNetworkStats((0, a.now)()), this.systemResources.takeSample(), this.decryptionFailures = e.transport.decryptionFailures, this.routingFailures = e.transport.routingFailures, this.duration.connected++; let t = this.outboundStats.packetsSent, n = r().reduce(this.inboundStats, (e, t) => (e.packetsReceived += t.packetsReceived, e), { packetsReceived: 0 }); r().forEach(e.rtp.outbound, e => { if ("audio" === e.type) { var t, n, i, r, s, a, o; this.outboundStats = { packetsSent: e.packetsSent, bytesSent: e.bytesSent, packetsLost: null !== (t = e.packetsLost) && void 0 !== t ? t : 0, passthroughCount: null !== (n = e.passthroughCount) && void 0 !== n ? n : 0, encryptSuccessCount: null !== (i = e.encryptSuccessCount) && void 0 !== i ? i : 0, encryptFailureCount: null !== (r = e.encryptFailureCount) && void 0 !== r ? r : 0, encryptDuration: null !== (s = e.encryptDuration) && void 0 !== s ? s : 0, encryptAttempts: null !== (a = e.encryptAttempts) && void 0 !== a ? a : 0, encryptMaxAttempts: null !== (o = e.encryptMaxAttempts) && void 0 !== o ? o : 0 } } }), r().forEach(e.rtp.inbound, (t, n) => { r().forEach(t, t => { if ("audio" === t.type) { var i, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m; let N = null !== (i = e.transport.ping) && void 0 !== i ? i : 0, p = t.packetsReceived, O = t.packetsLost, C = t.bytesReceived, R = null !== (s = t.fecPacketsReceived) && void 0 !== s ? s : 0, g = null !== (a = t.fecPacketsDiscarded) && void 0 !== a ? a : 0, L = null !== (o = t.jitterBuffer) && void 0 !== o ? o : 0, v = { audioJitterBuffer: t.audioJitterBuffer, audioJitterTarget: t.audioJitterTarget, audioJitterDelay: t.audioJitterDelay, relativeReceptionDelay: t.relativeReceptionDelay, relativePlayoutDelay: t.relativePlayoutDelay }, D = { silent: t.opSilence, normal: t.opNormal, merged: t.opMerge, expanded: t.opExpand, accelerated: t.opAccelerate, preemptiveExpanded: t.opPreemptiveExpand, cng: t.opCNG }, M = { passthroughCount: null !== (l = t.passthroughCount) && void 0 !== l ? l : 0, decryptSuccessCount: null !== (u = t.decryptSuccessCount) && void 0 !== u ? u : 0, decryptFailureCount: null !== (d = t.decryptFailureCount) && void 0 !== d ? d : 0, decryptDuration: null !== (_ = t.decryptDuration) && void 0 !== _ ? _ : 0, decryptAttempts: null !== (c = t.decryptAttempts) && void 0 !== c ? c : 0 }; if (null != this.inboundStats[n]) { let e = p - this.inboundStats[n].packetsReceived, i = O - this.inboundStats[n].packetsLost, s = 0, a = this.inboundStats[n].mosBuckets; e > 0 && i >= 0 && (s = this.calculateMos(N + L, r().clamp(i / (e + i), 0, 1)), a[Math.floor(s)]++), this.inboundStats[n] = { packetsReceived: p, bytesReceived: C, packetsLost: O, fecPacketsReceived: R, fecPacketsDiscarded: g, mos: s, mosSum: this.inboundStats[n].mosSum + s, mosCount: this.inboundStats[n].mosCount + (s > 0 ? 1 : 0), mosBuckets: a, bufferStats: v, frameOpStats: D, ...M }, this.periodicInboundStats[n] = { previousTimestampMs: this.periodicInboundStats[n].previousTimestampMs, previous: this.periodicInboundStats[n].previous, currentTimestampMs: Date.now(), current: D, accelerateRateSum: this.periodicInboundStats[n].accelerateRateSum + (null !== (E = t.accelerateRate) && void 0 !== E ? E : 0), expandRateSum: this.periodicInboundStats[n].expandRateSum + (null !== (I = t.expandRate) && void 0 !== I ? I : 0), preemptiveExpandRateSum: this.periodicInboundStats[n].preemptiveExpandRateSum + (null !== (T = t.preemptiveExpandRate) && void 0 !== T ? T : 0), speechExpandRateSum: this.periodicInboundStats[n].speechExpandRateSum + (null !== (f = t.speechExpandRate) && void 0 !== f ? f : 0), numRateSamples: this.periodicInboundStats[n].numRateSamples + 1 } } else this.inboundStats[n] = { packetsReceived: p, bytesReceived: C, packetsLost: O, fecPacketsReceived: R, fecPacketsDiscarded: g, mos: 0, mosSum: 0, mosCount: 0, mosBuckets: [0, 0, 0, 0, 0], bufferStats: v, frameOpStats: D, ...M }, this.periodicInboundStats[n] = { previousTimestampMs: Date.now(), previous: D, currentTimestampMs: Date.now(), current: D, accelerateRateSum: null !== (S = t.accelerateRate) && void 0 !== S ? S : 0, expandRateSum: null !== (h = t.expandRate) && void 0 !== h ? h : 0, preemptiveExpandRateSum: null !== (A = t.preemptiveExpandRate) && void 0 !== A ? A : 0, speechExpandRateSum: null !== (m = t.speechExpandRate) && void 0 !== m ? m : 0, numRateSamples: 1 } } }) }); let i = !1, s = !1; this.outboundStats.packetsSent > t && (i = !0, this.duration.speaking++), r().reduce(this.inboundStats, (e, t) => (e.packetsReceived += t.packetsReceived, e), { packetsReceived: 0 }).packetsReceived > n.packetsReceived && (s = !0, this.duration.listening++), (i || s) && this.duration.participation++ }, this.networkQuality = new o.default, this.systemResources = new l.default, this.inboundStats = {}, this.outboundStats = { packetsSent: 0, bytesSent: 0, packetsLost: 0, passthroughCount: 0, encryptSuccessCount: 0, encryptFailureCount: 0, encryptDuration: 0, encryptAttempts: 0, encryptMaxAttempts: 0 }, this.duration = { listening: 0, speaking: 0, participation: 0, connected: 0 }, this.periodicInboundStats = {} } } }, 764976: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"); var i = n("979651"), r = n("938475"), s = n("65154"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o { updateVoiceStates(e, t) { t === this.channelId ? (this.totalParticipants.add(e), this.maxVoiceStateCount = Math.max(r.default.countVoiceStatesForChannel(t), this.maxVoiceStateCount)) : (null == t && e in this.totalSpeakers && (this.totalSpeakers[e] = s.SpeakingFlags.NONE), e === this.userId && null != t && this.setChannelId(t)) } getStats() { return { max_voice_state_count: this.maxVoiceStateCount, total_voice_state_count: this.totalParticipants.size, max_listener_count: this.maxListenerCount, total_listener_count: this.totalListeners.size, max_speaker_count: this.maxSpeakerCount, total_speaker_count: Object.keys(this.totalSpeakers).length } } setSpeaking(e, t) { if (t !== s.SpeakingFlags.NONE) { let n = i.default.getVoiceStateForChannel(this.channelId, e); if (null != n && !n.selfMute && !n.mute) { this.totalSpeakers[e] = t; let n = Object.values(this.totalSpeakers).filter(e => e !== s.SpeakingFlags.NONE).length; this.maxSpeakerCount = Math.max(this.maxSpeakerCount, n) } } else e in this.totalSpeakers && (this.totalSpeakers[e] = s.SpeakingFlags.NONE); if (this.userId === e) { if (t === this.speaking) return; if (t !== s.SpeakingFlags.NONE) { let e = Object.values(i.default.getVoiceStatesForChannel(this.channelId)).filter(e => !e.selfDeaf && !e.deaf); e.forEach(e => this.totalListeners.add(e.userId)), this.maxListenerCount = Math.max(e.length, this.maxListenerCount) } this.speaking = t } } setChannelId(e) { if (e === this.channelId) return; this.channelId = e, this.totalParticipants = new Set([this.userId]); let t = Object.keys(i.default.getVoiceStatesForChannel(this.channelId)); t.forEach(e => this.totalParticipants.add(e)), this.maxVoiceStateCount = t.length, this.speaking = s.SpeakingFlags.NONE, this.maxListenerCount = 0, this.totalListeners = new Set, this.maxSpeakerCount = 0, this.totalSpeakers = {} } constructor(e, t) { a(this, "userId", void 0), a(this, "channelId", void 0), a(this, "maxVoiceStateCount", 1), a(this, "totalParticipants", void 0), a(this, "speaking", s.SpeakingFlags.NONE), a(this, "maxListenerCount", 0), a(this, "totalListeners", void 0), a(this, "maxSpeakerCount", 0), a(this, "totalSpeakers", void 0), this.userId = e, this.setChannelId(t) } } }, 562319: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("846519"), r = n("570140"), s = n("710845"), a = n("671335"), o = n("928518"), l = n("451478"), u = n("70956"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = new class e { isIncomingVideoEnabled() { return this.incomingVideoEnabled } subscribe(e) { this.videoEnabledObservers.add(e) } unsubscribe(e) { this.videoEnabledObservers.delete(e) } setIncomingVideoEnabled(e) { let t = this.incomingVideoEnabled !== e; this.incomingVideoEnabled = e, t && (this.logger.info("Window visibility incoming video changed, incomingVideoEnabled = ".concat(this.incomingVideoEnabled)), this.videoEnabledObservers.forEach(e => e(this.incomingVideoEnabled))) } anyDiscordWindowVisible() { return l.default.isVisible() || o.default.getWindowVisible(d.PopoutWindowKeys.CHANNEL_CALL_POPOUT) } constructor() { _(this, "hiddenWindowDisableVideoTimer", new i.Timeout), _(this, "incomingVideoEnabled", !0), _(this, "videoEnabledObservers", new Set), _(this, "logger", new s.default("WindowVisibilityVideoManager")), _(this, "HIDDEN_WINDOW_DISABLE_VIDEO_DURATION_MS", 30 * u.default.Millis.SECOND), _(this, "handleWindowVisibilityChange", () => { a.default.getCurrentConfig({ location: "WindowVisibilityVideoManager" }, { autoTrackExposure: !0 }).stopVideoForHiddenWindow && (this.anyDiscordWindowVisible() ? (this.hiddenWindowDisableVideoTimer.stop(), this.setIncomingVideoEnabled(!0)) : this.hiddenWindowDisableVideoTimer.start(this.HIDDEN_WINDOW_DISABLE_VIDEO_DURATION_MS, () => { this.setIncomingVideoEnabled(!1) })) }), r.default.subscribe("WINDOW_VISIBILITY_CHANGE", this.handleWindowVisibilityChange) } }; t.default = new class e { isIncomingVideoEnabled() { return c.isIncomingVideoEnabled() } subscribe(e) { c.subscribe(e) } unsubscribe(e) { c.unsubscribe(e) } } }, 315263: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return D } }), n("47120"); var i = n("729594"), r = n("873546"), s = n("570140"), a = n("447543"), o = n("230711"), l = n("581364"), u = n("132871"), d = n("960904"), _ = n("830121"), c = n("15274"), E = n("924301"), I = n("543842"), T = n("754688"), f = n("336197"), S = n("540709"), h = n("881706"), A = n("701190"), m = n("944486"), N = n("914010"), p = n("771845"), O = n("626135"), C = n("591759"); n("782568"); var R = n("981631"); async function g(e, t) { await s.default.dispatch({ type: "INVITE_MODAL_OPEN", invite: e, code: t, context: R.AppContext.APP }) } async function L(e) { var t; let n = A.default.getInvite(e.code); if (null == n) { let { invite: t } = await a.default.resolveInvite(e.code, "Markdown Link"); n = t } if (null == n) return; if (n.state === R.InviteStates.EXPIRED || n.state === R.InviteStates.BANNED || n.state === R.InviteStates.ERROR) { await g(n, e.code); return } let i = p.default.getFlattenedGuildIds(), r = null == n ? void 0 : null === (t = n.guild) || void 0 === t ? void 0 : t.id; null != r && i.includes(r) ? a.default.transitionToInviteSync(n) : await g(n, e.code) } let v = { skipExtensionCheck: void 0, analyticsLocations: [] }; function D(e) { let { skipExtensionCheck: t, analyticsLocations: s } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v, a = (0, _.findCodedLink)(e); if (null != a && (a.type === d.CodedLinkType.INVITE || a.type === d.CodedLinkType.EMBEDDED_ACTIVITY_INVITE)) return e => (null == e || e.preventDefault(), L(a), !0); if (null != a && a.type === d.CodedLinkType.APP_DIRECTORY_PROFILE) return e => { var t; null == e || e.preventDefault(); let { code: i } = a, s = null !== (t = N.default.getGuildId()) && void 0 !== t ? t : void 0; return O.default.track(R.AnalyticEvents.APP_DIRECTORY_PROFILE_EMBED_URL_CLICKED, { application_id: i, device_platform: r.isMobile ? "mobile_web" : "desktop_web", guild_id: s, channel_id: m.default.getChannelId() }), n.e("56630").then(n.bind(n, "147890")).then(e => { let { goToAppDirectory: t } = e, { ApplicationDirectoryViews: r } = n("132871"); t({ view: r.APPLICATION, applicationId: i, guildId: s, entrypoint: { name: u.ApplicationDirectoryEntrypointNames.APPLICATION_DIRECTORY_URL } }) }), !0 }; if (null != a && a.type === d.CodedLinkType.GUILD_PRODUCT) return e => { null == e || e.preventDefault(); let [t, i] = a.code.split("-"); return n.e("84239").then(n.bind(n, "838433")).then(e => { let { openGuildProductLink: n } = e; n(t, i) }), !0 }; let { path: A, hostname: p = "", host: g, query: D, hash: M } = i.parse(e), y = C.default.isDiscordHostname(p) || C.default.isDiscordLocalhost(g, p); if (y && (null == A ? void 0 : A.startsWith("/application-directory"))) { let [, , e, t] = A.split("/"), i = null != e && (0, l.isSnowflake)(e) ? e : void 0; return s => { var a; null == s || s.preventDefault(); let { ApplicationDirectoryProfileSections: o } = n("272242"), { ApplicationDirectoryViews: l } = n("132871"), d = null !== (a = N.default.getGuildId()) && void 0 !== a ? a : void 0, _ = l.HOME; return "search" === e && (_ = l.SEARCH), null != i && (_ = l.APPLICATION, O.default.track(R.AnalyticEvents.APP_DIRECTORY_PROFILE_EMBED_URL_CLICKED, { application_id: i, device_platform: r.isMobile ? "mobile_web" : "desktop_web", guild_id: d, channel_id: m.default.getChannelId() })), n.e("56630").then(n.bind(n, "147890")).then(e => { let { goToAppDirectory: n } = e; n({ view: _, applicationId: i, guildId: d, applicationSection: (0, I.default)(o, t), entrypoint: { name: u.ApplicationDirectoryEntrypointNames.APPLICATION_DIRECTORY_URL } }) }), !0 } } if (null != A && y && C.default.isAppRoute(A)) { let e = {}; return null != D && (e.search = D), null != M && (e.hash = M), t => (null == t || t.preventDefault(), (0, f.default)(A, Object.keys(e).length > 0 ? e : null), !0) } if (null != A && y) { let { getOAuth2AuthorizeProps: t, openOAuth2ModalWithCreateGuildModal: i } = n("69580"), r = t(e); if (null != r) return e => (null == e || e.preventDefault(), i(r), !0) } let P = (0, T.tryParseEventDetailsPath)(A); if (null != A && y && null != P) return e => { null == e || e.preventDefault(); let t = N.default.getGuildId(); null != P.guildId && "" !== P.guildId && P.guildId !== t && (0, f.default)(R.Routes.CHANNEL(P.guildId)); let n = E.default.getGuildScheduledEvent(P.guildEventId); return null != n && (0, c.openGuildEventDetails)({ eventId: n.id }), !0 }; if (y && (null == A ? void 0 : A.startsWith("/settings/"))) { let { default: e } = n("357269"), t = e(A); if (null != t) return e => (null == e || e.preventDefault(), o.default.open(t.section, t.subsection, { openWithoutBackstack: !1, impressionSource: t.source, analyticsLocations: s }), !0) } if (!t && null != (0, h.isSuspiciousDownload)(e)) return t => (null == t || t.preventDefault(), S.default.show(e), !0) } }, 509848: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_RANGES: function() { return u }, MINIMUM_RANGE: function() { return l }, default: function() { return _ } }); var i = n("392711"), r = n.n(i), s = n("31775"), a = n.n(s); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = 100, u = [ [0, 99] ]; function d(e) { let t = {}; return e.forEach((e, n) => { t[n] = e }), t } class _ { reset() { this._subscriptions = {} } get(e) { return d(this._get(e)) } _get(e) { var t; return null !== (t = this._subscriptions[e]) && void 0 !== t ? t : new(a())({ max: 5 }) } clear(e) { delete this._subscriptions[e] } subscribe(e, t, n) { let i = this._get(e); return !r().isEqual(i.get(t), n) && (i.set(t, n), this._subscriptions[e] = i, this._onChange(e, d(i)), !0) } constructor(e) { o(this, "_subscriptions", {}), o(this, "_onChange", void 0), this._onChange = e } } }, 601635: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("653041"), n("47120"), n("724458"); var i = n("392711"), r = n.n(i), s = n("846519"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o { acknowledge(e) { this._unacknowledgedRequests.delete(e), this._pendingRequests.delete(e) } flushRequests(e) { if (0 === this._pendingRequests.size) return; let t = []; this._pendingRequests.forEach(e => { !this._guildMemberExists(e) && (this._unacknowledgedRequests.add(e), this._sentRequests.add(e), t.push(e)) }), t.length > 0 && e(this._guildId, t), this._pendingRequests.clear() } requestUnacknowledged() { return 0 !== this._unacknowledgedRequests.size && (this._unacknowledgedRequests.forEach(e => { this._guildMemberExists(e) ? this._unacknowledgedRequests.delete(e) : this._pendingRequests.add(e) }), 0 !== this._pendingRequests.size && void 0) } request(e) { if (this._guildMemberExists(e) || this._sentRequests.has(e) || this._pendingRequests.has(e)) return !1; this._pendingRequests.add(e) } constructor(e, t) { a(this, "_guildId", void 0), a(this, "_pendingRequests", new Set), a(this, "_sentRequests", new Set), a(this, "_unacknowledgedRequests", new Set), a(this, "_guildMemberExists", void 0), this._guildId = e, this._guildMemberExists = n => t(e, n) } } class l { reset() { this._guildStates = {}, this._flush.cancel() } request(e, t) { !1 !== this._getGuildState(e).request(t) && this._flush.delay(!1) } acknowledge(e, t) { this._getGuildState(e).acknowledge(t) } flushRequests() { r().forEach(this._guildStates, e => e.flushRequests(this._onChange)) } requestUnacknowledged() { r().reduce(this._guildStates, (e, t) => !1 !== t.requestUnacknowledged() || t, !1) && this._flush.delay() } _getGuildState(e) { let t = this._guildStates[e]; return null == t && (t = this._guildStates[e] = new o(e, this._guildMemberExists)), t } constructor(e, t) { a(this, "_onChange", void 0), a(this, "_guildMemberExists", void 0), a(this, "_guildStates", {}), a(this, "_flush", new s.DelayedCall(0, () => this.flushRequests())), this._guildMemberExists = e, this._onChange = t } } }, 483019: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("846519"), a = n("710845"), o = n("70956"), l = n("709054"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = 1 * o.default.Millis.MINUTE; class _ { reset() { this._subscriptions = {}, this._unsubscriptions = {}, this._unsubscribe.cancel() } get(e) { var t; let n = null !== (t = this._subscriptions[e]) && void 0 !== t ? t : {}; return l.default.keys(n) } clear(e) { delete this._subscriptions[e], delete this._unsubscriptions[e] } subscribe(e, t) { var n, i; let r = null !== (n = this._subscriptions[e]) && void 0 !== n ? n : {}; r[t] = (null !== (i = r[t]) && void 0 !== i ? i : 0) + 1, this._subscriptions[e] = r, 1 === r[t] && this._onChange(e, this.get(e)), this.checkForLeaks(e, t) } isSubscribed(e, t) { return null != this._subscriptions[e] && null != this._subscriptions[e][t] } isSubscribedToAnyMember(e) { return this.get(e).length > 0 } unsubscribe(e, t) { var n, i; if (!this.isSubscribed(e, t)) return; let r = null !== (n = this._unsubscriptions[e]) && void 0 !== n ? n : {}; r[t] = (null !== (i = r[t]) && void 0 !== i ? i : 0) + 1, this._unsubscriptions[e] = r, 1 === r[t] && this._unsubscribe.delay(!1) } checkForLeaks(e, t) { var n, i, r, s; let o = null !== (r = null === (n = this._subscriptions[e]) || void 0 === n ? void 0 : n[t]) && void 0 !== r ? r : 0, l = o - (null !== (s = null === (i = this._unsubscriptions[e]) || void 0 === i ? void 0 : i[t]) && void 0 !== s ? s : 0); l > 5 && new a.default("GuildMemberSubscriptions").warn("GuildMemberSubscriptions.subscribe(...): Potential reference leak! (".concat(l, " subscriptions)")) } flushUnsubscriptions() { !r().isEmpty(this._unsubscriptions) && (r().forEach(this._unsubscriptions, (e, t) => { let n = this._subscriptions[t]; r().forEach(e, (e, t) => { var i; n[t] = (null !== (i = n[t]) && void 0 !== i ? i : 0) - e, n[t] <= 0 && delete n[t] }), r().isEmpty(n) && delete this._subscriptions[t], this._onChange(t, this.get(t)) }), this._unsubscriptions = {}) } constructor(e) { u(this, "_subscriptions", {}), u(this, "_unsubscriptions", {}), u(this, "_onChange", void 0), u(this, "_unsubscribe", new s.DelayedCall(d, () => this.flushUnsubscriptions())), this._onChange = e } } }, 177523: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_RANGES: function() { return a.DEFAULT_RANGES }, default: function() { return c } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("846519"), a = n("509848"), o = n("483019"), l = n("945689"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function _(e) { return null != e && "null" !== e && e !== u.ME && "undefined" !== e && e !== u.FAVORITES } class c { _enqueue(e, t) { this._pending[e] = { ...this._pending[e], ...t }, this._flush.delay() } reset() { this._subscribed.clear(), this._pending = {}, this._members.reset(), this._memberUpdates.clear(), this._channels.reset(), this._threadMemberLists.reset(), this._typing.clear(), this._threads.clear(), this._activities.clear() } get(e) { return { typing: this._typing.has(e), threads: this._threads.has(e), activities: this._activities.has(e), members: this._members.get(e), member_updates: this._memberUpdates.has(e), channels: this._channels.get(e), thread_member_lists: this._threadMemberLists.get(e) } } getSubscribedThreadIds() { return this._threadMemberLists.getSubscribedThreadIds() } isSubscribedToThreads(e) { return this._threads.has(e) } isSubscribedToAnyMember(e) { var t; return null !== (t = this._members.isSubscribedToAnyMember(e)) && void 0 !== t && t } isSubscribedToMemberUpdates(e) { var t; return null !== (t = this.get(e).member_updates) && void 0 !== t && t } forEach(e) { this._subscribed.forEach(e) } clearWithoutFlushing(e, t) { (t || !this._threads.has(e)) && this._subscribed.delete(e), delete this._pending[e], this._members.clear(e), this._channels.clear(e), this._threadMemberLists.clear(e), this._typing.delete(e), this._memberUpdates.delete(e), t && this._threads.delete(e), this._activities.delete(e) } flush() { r().forEach(this._pending, (e, t) => { this._subscribed.add(t) }), this._onChange(this._pending), this._pending = {} } subscribeUser(e, t) { _(e) && this._members.subscribe(e, t) } unsubscribeUser(e, t) { _(e) && this._members.unsubscribe(e, t) } subscribeChannel(e, t, n) { return !!_(e) && this._channels.subscribe(e, t, n) } subscribeToMemberUpdates(e) { if (!_(e)) return !1; this._enqueue(e, { member_updates: !0 }), this._memberUpdates.add(e) } unsubscribeFromMemberUpdates(e) { if (!_(e)) return !1; this._enqueue(e, { member_updates: !1 }) } subscribeThreadMemberList(e, t, n) { return !!_(e) && this._threadMemberLists.subscribe(e, t, n) } unsubscribeThreadMemberList(e, t) { return !!_(e) && this._threadMemberLists.unsubscribe(e, t) } subscribeToGuild(e) { this._subscribeToFeature(e, this._typing, { typing: !0 }), this._subscribeToFeature(e, this._activities, { activities: !0 }), this._subscribeToFeature(e, this._threads, { threads: !0 }) } _subscribeToFeature(e, t, n) { if (!!_(e)) !t.has(e) && (t.add(e), this._enqueue(e, n)) } constructor(e) { d(this, "_members", new o.default((e, t) => this._enqueue(e, { members: t }))), d(this, "_channels", new a.default((e, t) => this._enqueue(e, { channels: t }))), d(this, "_threadMemberLists", new l.default((e, t) => this._enqueue(e, { thread_member_lists: t }))), d(this, "_typing", new Set), d(this, "_threads", new Set), d(this, "_activities", new Set), d(this, "_memberUpdates", new Set), d(this, "_subscribed", new Set), d(this, "_pending", {}), d(this, "_flush", new s.DelayedCall(0, () => this.flush())), d(this, "_onChange", void 0), this._onChange = e } } }, 945689: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("31775"), r = n.n(i); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { reset() { this._subscriptions = {} } get(e) { return this._get(e).keys() } getSubscribedThreadIds() { let e = new Set; for (let t in this._subscriptions) for (let n of this._subscriptions[t].keys()) e.add(n); return e } _get(e) { var t; return null !== (t = this._subscriptions[e]) && void 0 !== t ? t : new(r())({ max: 3, updateAgeOnGet: !0 }) } clear(e) { e in this._subscriptions && (delete this._subscriptions[e], this._onChange(e, [])) } subscribe(e, t, n) { let i = this._get(e); return i.has(t) ? (i.set(t, Date.now()), !1) : (null != n && i.has(n) && i.set(n, Date.now()), i.set(t, Date.now()), this._subscriptions[e] = i, this._onChange(e, i.keys()), !0) } unsubscribe(e, t) { if (!(e in this._subscriptions)) return !1; let n = this._subscriptions[e]; return !!n.has(t) && (n.del(t), this._onChange(e, n.keys()), !0) } constructor(e) { s(this, "_subscriptions", {}), s(this, "_onChange", void 0), this._onChange = e } } }, 58540: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useSubscribeGuildMembers: function() { return o } }), n("735250"); var i = n("470079"), r = n("392711"), s = n.n(r); n("902704"); var a = n("941028"); function o(e) { i.useEffect(() => (s().forEach(e, (e, t) => (0, a.subscribeMembers)(t, e)), () => { s().forEach(e, (e, t) => (0, a.unsubscribeMembers)(t, e)) }), [e]) } }, 887278: function(e, t, n) { "use strict"; n.r(t), n.d(t, { attachToProcess: function() { return A }, cancelAttachToProcess: function() { return m }, isHookModuleTooOld: function() { return S } }), n("411104"); var i, r, s = n("570140"), a = n("923928"), o = n("593472"), l = n("594190"), u = n("77498"), d = n("594174"), _ = n("626135"), c = n("358085"), E = n("998502"), I = n("96592"), T = n("981631"); let f = { development: [0, 0, 0, 0], canary: [1, 0, 30, 10], ptb: [1, 0, 1005, 2], stable: [1, 0, 9001, 2] }; function S() { var e; return !(null === E.default || void 0 === E.default ? void 0 : null === (e = E.default.isModuleVersionAtLeast) || void 0 === e ? void 0 : e.call(E.default, "discord_hook", f)) } async function h() { if (!(0, c.isWindows)()) return Promise.reject(Error("Hook is only available on Windows")); if (S()) return Promise.reject(Error("Hook module is too old")); await E.default.ensureModule("discord_hook"); let e = await E.default.requireModule("discord_hook"); return function(e) { if (null == e.setFlags) return; let t = 0, n = I.default.getCurrentConfig({ location: "edd7d3_1" }, { autoTrackExposure: !1 }); n.enableCrashReporting && (console.log("Hook: Enabling crash reporting."), t |= 1); let i = d.default.getCurrentUser(); null != i && (i.isStaff() || n.enableCrashTrigger) && (console.log("Hook: Enabling crash trigger."), t |= 2), e.setFlags(t) }(e), e }(r = i || (i = {}))[r.None = 0] = "None", r[r.EnableCrashReporting = 1] = "EnableCrashReporting", r[r.EnableCrashTrigger = 2] = "EnableCrashTrigger"; function A(e, t) { return h().then(n => { var i; let r = null === (i = l.default.getGameForPID(e)) || void 0 === i ? void 0 : i.name, d = u.default.getGameByName(r), c = null; return new Promise(i => { let u = (e, n) => { _.default.track(T.AnalyticEvents.HOOK_RESULT, { game_name: r, game_id: null == d ? null : d.id, success: n, error: e, ...t }), null != c && (clearTimeout(c), c = null), n ? i() : i(e = null != e ? e : "Unknown hook error") }, E = l.default.getOverlayOptionsForPID(e), I = { ...o.DEFAULT_OVERLAY_OPTIONS, ...E, elevate: l.default.shouldElevateProcessForPID(e) }; null == I.allowHook || I.allowHook ? (c = setTimeout(() => { n.cancelAttachToProcess(e), u("Timed out waiting for hook response", !1) }, 12e4), n.attachToProcess(e, I, u), s.default.wait(() => a.default.clearElevatedProcess())) : i("Hook is disabled for this game") }) }) } function m(e) { return h().then(t => { t.cancelAttachToProcess(e) }) } }, 96592: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-05_overlay_hook_crash_detection", label: "Detect and report crashes in the overlay hook", defaultConfig: { enableCrashReporting: !1, enableCrashTrigger: !1 }, treatments: [{ id: 1, label: "EnableCrashReporting", config: { enableCrashReporting: !0, enableCrashTrigger: !1 } }, { id: 2, label: "EnableCrashTrigger", config: { enableCrashReporting: !0, enableCrashTrigger: !0 } }] }) }, 337869: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("992774"), r = n("710845"), s = n("358085"), a = n("998502"); (0, i.inject)({ supported() { try { if (__OVERLAY__); else if (s.isPlatformEmbedded) { let e = (0, i.getVoiceEngine)(); if (null == e.VoiceConnection || null == e.setVideoOutputSink && null == e.addVideoOutputSink) throw Error("voe function missing"); return !0 } } catch (e) { new r.default("injectMediaEngine").error("Potentially corrupt installation:", e.message) } return !1 }, supportsFeature: e => a.default.supportsFeature(e), setProcessPriority(e) { a.default.getDiscordUtils().setProcessPriority(e) }, getVoiceEngine: () => a.default.getVoiceEngine() }) }, 232551: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("757143"), n("653041"), n("411104"); var i = n("913527"), r = n.n(i); function s(e, t) { if ("function" == typeof t) { let n = r().localeData(), i = t.bind(n); return (t, n) => i({ [e]: () => t }, n) } return t = Array.isArray(t) ? t : t.format, e => t[e] } function a(e, t, n) { return e < 12 ? n ? "am" : "AM" : n ? "pm" : "PM" } function o(e) { var t, n; let i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : function() { var e; let { months: t, monthsShort: n, weekdays: i, weekdaysShort: o, weekdaysMin: l, meridiem: u = a, ordinal: d, longDateFormat: _, week: c = { dow: 0, doy: 6 } } = r().localeData()._config; return { months: s("month", t), monthsShort: s("month", n), weekdays: s("day", i), weekdaysShort: s("day", o), weekdaysMin: s("day", l), meridiem: u, ordinal: "string" == typeof(e = d) ? t => e.replace("%d", "".concat(t)) : e, longDateFormat: _, week: c } }(), o = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; t = e, n = i; let l = [], u = { month: !1, dayOfYear: !1, date: !1, day: !1, week: !1, isoweek: !1, year: !1, hour: !1, minutes: !1, seconds: !1, millis: !1, offset: !1 }, d = e = t.replace(/L[L|T|S]{0,3}/g, (e, i) => { if (/^LLLL/.test(e)) return n.longDateFormat.LLLL; if (/^LLL/.test(e)) return n.longDateFormat.LLL + e.slice(3); if (/^LL/.test(e)) return n.longDateFormat.LL + e.slice(2); else if (/^LTS/.test(e)) return n.longDateFormat.LTS + e.slice(3); else if (/^LT/.test(e)) return n.longDateFormat.LT + e.slice(2); else if (/^L/.test(e) && "[" !== t[i - 1]) return n.longDateFormat.L + e.slice(1); return e }); function _(e) { l.push("(" + e + ")") } function c(e) { d = d.slice(e) } for (; d.length > 0;) { switch (d.charAt(0)) { case "M": if (u.month = !0, /^MMMM/.test(d)) { _('localeData.months(_month, "'.concat(e, '")')), c(4); continue } if (/^MMM/.test(d)) { _('localeData.monthsShort(_month, "'.concat(e, '")')), c(3); continue } if (/^MM/.test(d)) { _('_month+1 < 10 ? "0" : ""'), _("_month+1"), c(2); continue } if (/^Mo/.test(d)) { _('localeData.ordinal(_month, "M")'), c(2); continue } _("_month + 1"), c(1); continue; case "Q": if (u.month = !0, /^Qo/.test(d)) { _('localeData.ordinal((_month + 1) / 3, "Q")'), c(2); continue } _("Math.ceil((_month + 1) / 3)"), c(1); continue; case "D": if (/^DDD/.test(d)) { if (u.dayOfYear = !0, /^DDDD/.test(d)) { _('_doy < 100 ? "0" : ""'), _('_doy < 10 ? "0" : ""'), _("_doy"), c(4); continue } if (/^DDDo/.test(d)) { _('localeData.ordinal(_doy, "DDD")'), c(4); continue } _("_doy"), c(3); continue } if (u.date = !0, /^DD/.test(d)) { _('_date < 10 ? "0" : ""'), _("_date"), c(2); continue } if (/^Do/.test(d)) { _('localeData.ordinal(_date, "D")'), c(2); continue } _("_date"), c(1); continue; case "d": if (u.day = !0, /^dddd/.test(d)) { _('localeData.weekdays(_day, "'.concat(e, '")')), c(4); continue } if (/^ddd/.test(d)) { _('localeData.weekdaysShort(_day, "'.concat(e, '")')), c(3); continue } if (/^dd/.test(d)) { _('localeData.weekdaysMin(_day, "'.concat(e, '")')), c(2); continue } if (/^do/.test(d)) { _('localeData.ordinal(_day, "d")'), c(2); continue } _("_day"), c(1); continue; case "e": u.day = !0, _("(_day + 7 - " + +i.week.dow + ") % 7"), c(1); continue; case "E": u.day = !0, _("_day === 0 ? 7 : _day"), c(1); continue; case "w": if (u.week = !0, /^ww/.test(d)) { _('_week < 10 ? "0" : ""'), _("_week"), c(2); continue } if (/^wo/.test(d)) { _('localeData.ordinal(_week, "w")'), c(2); continue } _("_week"), c(1); continue; case "W": if (u.isoweek = !0, /^WW/.test(d)) { _('_i_week < 10 ? "0" : ""'), _("_i_week"), c(2); continue } if (/^Wo/.test(d)) { _('localeData.ordinal(_i_week, "W")'), c(2); continue } _("_i_week"), c(1); continue; case "Y": if (u.year = !0, /^YYYY/.test(d)) { _("_year"), c(4); continue } if (/^YY/.test(d)) { _('(_year % 100) < 10 ? "0" : ""'), _("_year % 100"), c(2); continue } _('_year < 9999 ? _year : "+" + _year'), c(1); continue; case "g": if (u.week = !0, /^gggg/.test(d)) { _("_weekYear"), c(4); continue } if (/^gg/.test(d)) { _('(_weekYear % 100) < 10 ? "0" : ""'), _("_weekYear % 100"), c(2); continue } break; case "G": if (u.isoweek = !0, /^GGGG/.test(d)) { _("_i_weekYear"), c(4); continue } if (/^GG/.test(d)) { _('(_i_weekYear % 100) < 10 ? "0" : ""'), _("_i_weekYear % 100"), c(2); continue } break; case "A": u.hour = !0, u.minutes = !0, _("localeData.meridiem(_hour, _mins, false)"), c(1); continue; case "a": u.hour = !0, u.minutes = !0, _("localeData.meridiem(_hour, _mins, true)"), c(1); continue; case "H": if (u.hour = !0, /^HH/.test(d)) { _('_hour < 10 ? "0" : ""'), _("_hour"), c(2); continue } _("_hour"), c(1); continue; case "h": if (u.hour = !0, /^hh/.test(d)) { _('((_hour+11) % 12) < 9 ? "0" : ""'), _("((_hour+11) % 12) + 1"), c(2); continue } _("((_hour+11) % 12) + 1"), c(1); continue; case "k": if (u.hour = !0, /^kk/.test(d)) { _('_hour > 0 && _hour < 10 ? "0" : ""'), _('_hour === 0 ? "24" : _hour'), c(2); continue } _('_hour === 0 ? "24" : _hour'), c(1); continue; case "m": if (u.minutes = !0, /^mm/.test(d)) { _('_mins < 10 ? "0" : ""'), _("_mins"), c(2); continue } _("_mins"), c(1); continue; case "s": if (u.seconds = !0, /^ss/.test(d)) { _('_secs < 10 ? "0" : ""'), _("_secs"), c(2); continue } _("_secs"), c(1); continue; case "S": if (u.millis = !0, /^SSS/.test(d)) { _('_ms < 100 ? "0" : ""'), _('_ms < 10 ? "0" : ""'), _("_ms"); let e = /^S{3,9}/.exec(d); if (null == e) throw Error("ms len regex failed"); let t = e[0].length; t > 3 && _('"'.concat(Array(t - 2).join("0"), '"')), c(t); continue } if (/^SS/.test(d)) { _('_ms < 100 ? "0" : ""'), _("Math.floor(_ms/10)"), c(2); continue } _("Math.floor(_ms / 100)"), c(1); continue; case "Z": if (u.offset = !0, /^ZZ/.test(d)) { _('_offs >= 0 ? "+" : "-"'), _('_offH < 10 ? "0" : ""'), _("_offH"), _('_offM < 10 ? "0" : ""'), _("_offM"), c(2); continue } _('_offs >= 0 ? "+" : "-"'), _('_offH < 10 ? "0" : ""'), _("_offH"), _('":"'), _('_offM < 10 ? "0" : ""'), _("_offM"), c(1); continue; case "X": _("Math.floor(d / 1000)"), c(1); continue; case "x": _("d.valueOf()"), c(1); continue; case "[": let t = d.indexOf("]"); if (-1 === t) { _('"["'), c(1); continue } _(JSON.stringify(d.slice(1, t))), c(t + 1); continue } _(JSON.stringify(d.charAt(0))), c(1) } let E = ""; u.date && (E += "var _date = d.get" + (o ? "UTC" : "") + "Date();\n"), u.month && (E += "var _month = d.get" + (o ? "UTC" : "") + "Month();\n"), u.dayOfYear && (E += "var _startOfYear = new Date(d.valueOf());\n_startOfYear.set" + (o ? "UTC" : "") + "Month(0);\n_startOfYear.set" + (o ? "UTC" : "") + "Date(1);\nvar _doy = Math.round((d - _startOfYear) / 864e5) + 1;\n"), u.day && (E += "var _day = d.get" + (o ? "UTC" : "") + "Day();\n"), u.year && (E += "var _year = d.get" + (o ? "UTC" : "") + "FullYear();\n"), u.hour && (E += "var _hour = d.get" + (o ? "UTC" : "") + "Hours();\n"), u.minutes && (E += "var _mins = d.get" + (o ? "UTC" : "") + "Minutes();\n"), u.seconds && (E += "var _secs = d.get" + (o ? "UTC" : "") + "Seconds();\n"), u.millis && (E += "var _ms = d.get" + (o ? "UTC" : "") + "Milliseconds();\n"), u.offset && (o ? E += "var _offs = 0, _absOffs = 0, _offH = 0, _offM = 0;" : E += "var _offs = -d.getTimezoneOffset();\nvar _absOffs = _offs < 0 ? -_offs : _offs;\nvar _offH = Math.floor(_absOffs / 60);\nvar _offM = _absOffs % 60;\n"), u.week && (E += "var _wend = " + (i.week.doy - i.week.dow) + ";\nvar _ddw = " + +i.week.doy + " - d.get" + (o ? "UTC" : "") + "Day();\nif(_ddw > _wend) _ddw -= 7;\nif(_ddw < _wend - 7) _ddw += 7;\nvar _d2 = new Date(d.valueOf());\n_d2.set" + (o ? "UTC" : "") + "Date(d.get" + (o ? "UTC" : "") + "Date() + _ddw);\nvar _soy2 = new Date(_d2.valueOf());\n_soy2.set" + (o ? "UTC" : "") + "Month(0);\n_soy2.set" + (o ? "UTC" : "") + "Date(1);\nvar _doy2 = Math.round((_d2 - _soy2) / 864e5) + 1;\nvar _week = Math.ceil(_doy2 / 7);\nvar _weekYear = _d2.get" + (o ? "UTC" : "") + "FullYear();\n"), u.isoweek && (E += "var _i_wend = 3;\nvar _i_ddw = 4 - d.get" + (o ? "UTC" : "") + "Day();\nif(_i_ddw > _i_wend) _i_ddw -= 7;\nif(_i_ddw < _i_wend - 7) _i_ddw += 7;\nvar _i_d2 = new Date(d.valueOf());\n_i_d2.set" + (o ? "UTC" : "") + "Date(d.get" + (o ? "UTC" : "") + "Date() + _i_ddw);\nvar _i_soy2 = new Date(_i_d2.valueOf());\n_i_soy2.set" + (o ? "UTC" : "") + "Month(0);\n_i_soy2.set" + (o ? "UTC" : "") + "Date(1);\nvar _i_doy2 = Math.round((_i_d2 - _i_soy2) / 864e5) + 1;\nvar _i_week = Math.ceil(_i_doy2 / 7);\nvar _i_weekYear = _i_d2.get" + (o ? "UTC" : "") + "FullYear();\n"); let I = Function("d", "localeData", E += 'return (\n"" +\n'.concat(l.join(" +\n"), "\n);")); return e => I(e, i) } }, 782568: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("358085"); async function r(e, t) { let { default: r } = await Promise.resolve().then(n.bind(n, "315263")), s = r(e, { skipExtensionCheck: t, analyticsLocations: [] }); if (null != s) s(null); else if (i.isPlatformEmbedded) window.open(e); else { let t = document.createElement("a"); t.href = e, t.target = "_blank", t.rel = "noreferrer noopener", t.click() } } }, 490029: function(e, t, n) { "use strict"; n.r(t), n.d(t, { connect: function() { return u }, disconnect: function() { return d }, send: function() { return E }, setReceiveCommandHandler: function() { return c }, setReceiveEventHandler: function() { return _ } }); var i = n("536285"), r = n("996106"), s = n("812967"), a = n("511405"), o = n("981631"), l = n("186901"); function u() { i.default.connect() } function d() { i.default.disconnect() } function _(e, t) { if (!__OVERLAY__) throw new r.default({ errorCode: o.RPCErrors.UNKNOWN_ERROR }, "called from wrong app context"); i.default.subscribe(o.RPCEvents.OVERLAY, { token: t }, t => e((0, a.deserializeObject)(t))) } function c(e, t) { if (__OVERLAY__) throw new r.default({ errorCode: o.RPCErrors.UNKNOWN_ERROR }, "called from wrong app context"); s.default.setCommandHandler(o.RPCCommands.OVERLAY, { scope: l.RPC_PRIVATE_SCOPE, handler(n) { let { args: i } = n; if (!t(i.token)) throw new r.default({ errorCode: o.RPCErrors.INVALID_TOKEN }, "Invalid RPC auth token provided"); e((0, a.deserializeObject)(i)) } }), s.default.setEventHandler(o.RPCEvents.OVERLAY, { scope: l.RPC_PRIVATE_SCOPE, handler(e) { let { args: n } = e; if (!t(n.token)) throw new r.default({ errorCode: o.RPCErrors.INVALID_TOKEN }, "Invalid RPC auth token provided") } }) } function E(e) { __OVERLAY__ ? i.default.request(o.RPCCommands.OVERLAY, (0, a.serializeObject)(e)) : s.default.dispatchToSubscriptions(o.RPCEvents.OVERLAY, {}, (0, a.serializeObject)(e)) } }, 549895: function(e, t, n) { "use strict"; function i(e, t, n) { let i; let r = [], s = function() { for (var a = arguments.length, o = Array(a), l = 0; l < a; l++) o[l] = arguments[l]; let u = Date.now(); for (null != i && (clearTimeout(i), i = null); r.length > 0 && r[0] <= u;) r.shift(); r.length < e ? (r.push(u + t), n(...o)) : i = setTimeout(() => s(...o), r[0] - u) }; return s } n.r(t), n.d(t, { default: function() { return i } }), n("653041"), n("47120") }, 603767: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("920906"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.FrameLoop { setRAF(e, t) { 0 !== this.id && (this._cancelAnimationFrame(this.id), this.id = 0), this._requestAnimationFrame = e, this._cancelAnimationFrame = t, this.loop() } constructor(...e) { super(...e), r(this, "_requestAnimationFrame", e => requestAnimationFrame(e)), r(this, "_cancelAnimationFrame", e => cancelAnimationFrame(e)), r(this, "writing", !1), r(this, "id", 0), r(this, "lastTime", 0), r(this, "animations", []), r(this, "priority", 0), r(this, "startQueue", new Set), r(this, "frameQueue", new Set), r(this, "writeQueue", new Set), r(this, "timeoutQueue", []), r(this, "addAnimation", e => { let t = this.animations.indexOf(e); t < 0 && (t = this.animations.findIndex(t => t.priority > e.priority), this.animations.splice(0 != ~t ? t : this.animations.length, 0, e)) }), r(this, "loop", () => { if (0 !== this.lastTime) try { this.advance() } catch (e) { console.error(e) } finally { this.animations.length > 0 || this.startQueue.size > 0 || this.frameQueue.size > 0 || this.writeQueue.size > 0 || this.timeoutQueue.length > 0 ? this.id = this._requestAnimationFrame(this.loop) : (this.lastTime = 0, this.id = 0) } }), r(this, "startLoop", () => { !(this.lastTime > 0) && (this.lastTime = i.Globals.now(), this.id = this._requestAnimationFrame(this.loop)) }), r(this, "advance", () => { let e = i.Globals.now(); if (this.startQueue.size > 0 && (this.startQueue.forEach(this.addAnimation), this.startQueue.clear()), this.timeoutQueue.length > 0 && i.Globals.batchedUpdates(() => { let t = a(this.timeoutQueue, t => t.time > e); this.timeoutQueue.splice(0, t).forEach(e => e.handler()) }), e > this.lastTime) { let t = Math.min(64, e - this.lastTime); this.lastTime = e, i.Globals.batchedUpdates(() => { this.animations.length > 0 && (i.Globals.willAdvance(this.animations), this.animations = this.animations.filter(e => (this.priority = e.priority, !e.idle && e.advance(t), !e.idle)), this.priority = 0), this.frameQueue.size > 0 && (this.frameQueue.forEach(t => t(e)), this.frameQueue.clear()), this.writeQueue.size > 0 && (this.writing = !0, this.writeQueue.forEach(t => t(e)), this.writeQueue.clear(), this.writing = !1) }) } }), r(this, "start", e => { this.priority > e.priority ? this.startQueue.add(e) : (this.addAnimation(e), this.startLoop()) }), r(this, "setTimeout", (e, t) => { let n = i.Globals.now() + t, r = () => { let e = this.timeoutQueue.findIndex(e => e.cancel === r); e >= 0 && this.timeoutQueue.splice(e, 1) }, s = a(this.timeoutQueue, e => e.time > n), o = { time: n, handler: e, cancel: r }; return this.timeoutQueue.splice(s, 0, o), this.startLoop(), o }), r(this, "onFrame", e => { this.frameQueue.add(e), this.startLoop() }), r(this, "onWrite", e => { this.writing ? e(this.lastTime) : this.writeQueue.add(e) }) } } function a(e, t) { let n = e.findIndex(t); return n < 0 ? e.length : n } }, 716578: function(e, t, n) { "use strict"; n.r(t), n.d(t, { frameLoop: function() { return r } }); var i = n("920906"); let r = new(n("603767")).default; i.Globals.assign({ frameLoop: r }) }, 598105: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("411104"); var i = n("998502"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { get language() { return this._language } set language(e) { this._language !== e && (this._language = e, this._onChange(e)) } set languageHint(e) { this._languageHint = e } process(e) { !this._processing && (this._processing = !0, requestIdleCallback(t => { var n, r; if (t.timeRemaining() <= this._minimumTimeRemaining) { this._processEnd(); return } e.length > 256 && (e = e.slice(0, 256)), (n = e, r = this._languageHint, i.default.ensureModule("discord_spellcheck").then(() => { let { cld: e } = i.default.requireModule("discord_spellcheck"); return new Promise((t, i) => { e.detect(n, { httpHint: r, encodingHint: "UTF8" }, (e, n) => { null != e ? i(Error(e.message)) : !n.reliable || n.languages[0].percent < 90 || n.languages[0].score < 500 ? i(Error("Not enough reliable text.")) : t(n.languages[0].code) }) }) })).then(e => { this.language = e, this._processEnd(t.didTimeout) }, () => { this._processEnd(t.didTimeout) }) })) } _processEnd() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; this._processing = !1, e && this._minimumTimeRemaining++ } constructor(e, t) { r(this, "_language", void 0), r(this, "_onChange", void 0), r(this, "_languageHint", void 0), r(this, "_shouldProcess", !1), r(this, "_processing", !1), r(this, "_minimumTimeRemaining", 5), this._language = e, this._languageHint = e, this._onChange = t, t(e) } } }, 405826: function(e, t, n) { "use strict"; n.r(t), n.d(t, { install: function() { return A } }), n("757143"), n("47120"); var i = n("623279"), r = n("392711"), s = n.n(r), a = n("374470"), o = n("579806"), l = n("710845"), u = n("706454"), d = n("823379"), _ = n("598105"), c = n("643413"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = new l.default("Spellchecker"), T = null === o.default || void 0 === o.default ? void 0 : o.default.spellCheck; function f(e) { var t; e = null !== (t = c.default[e]) && void 0 !== t ? t : e; let n = (0, i.parse)(e.replace(/[_-]/g, "-")); if (null == n || null == n.langtag.language || null == n.langtag.region) { I.error("".concat(e, " is not a valid locale.")); return } let { language: r, region: s } = n.langtag; return "".concat(r.language.toLowerCase(), "-").concat(s.toUpperCase()) } class S { get enabled() { return this._enabled } set enabled(e) { this._enabled = e } setLearnedWords(e) { T.setLearnedWords(e) } setLocale(e) { var t; null === (t = T.setLocale(e)) || void 0 === t || t.then(t => { I.info("Switching to ".concat(e), t ? "(available)" : "(unavailable)") }) } setAppLocale(e) { this.regionPreference = e.split("-")[1] } detectLanguage(e) { this.enabled && this.languageDetector.process(e) } getAvailableLanguages(e) { let t = {}; return e.forEach(e => { var n; let [i] = e.split("-"); t[i] = null !== (n = t[i]) && void 0 !== n ? n : e }), t } isMisspelled(e, t) { return "" !== this.misspelledWord && e === this.misspelledWord } getCorrectionsForMisspelling(e, t) { return this.isMisspelled(e, t) ? this.corrections : [] } replaceMisspelling(e) { T.replaceMisspelling(e) } constructor(e) { E(this, "languageDetector", void 0), E(this, "regionPreference", void 0), E(this, "_enabled", !0), E(this, "misspelledWord", ""), E(this, "corrections", []); let [t, n] = u.default.locale.split("-"); this.regionPreference = n; let i = this.getAvailableLanguages(e); this.languageDetector = new _.default(t, n => { let r = "".concat(n, "-").concat(this.regionPreference); if (-1 !== e.indexOf(r)) this.setLocale(r); else { var s; let e = null !== (s = i[n]) && void 0 !== s ? s : c.default[t]; null != e && this.setLocale(e) } }), T.on("spellcheck-result", (e, t) => { this.misspelledWord = null != e ? e : "", this.corrections = null != t ? t : [] }) } } let h = s().debounce((e, t) => { let n = function(e) { return null == e ? null : (0, a.isElement)(e, HTMLInputElement) || (0, a.isElement)(e, HTMLTextAreaElement) ? e.value : (0, a.isElement)(e) && e.hasAttribute("contenteditable") ? e.textContent : void 0 }(t); null != n && e.detectLanguage(n) }, 250); async function A() { var e, t; let n = new S((null !== (e = await T.getAvailableDictionaries()) && void 0 !== e ? e : []).map(f).filter(d.isNotNullish)); return t = n, null != document.body && document.body.addEventListener("beforeinput", e => h(t, e.target), !0), n } }, 643413: function(e, t, n) { "use strict"; n.r(t); t.default = { aa: "aa-ET", af: "af-ZA", ak: "ak-GH", am: "am-ET", an: "an-ES", ar: "ar-MA", as: "as-IN", ay: "ay-PE", az: "az-AZ", be: "be-BY", bg: "bg-BG", bi: "bi-TV", bn: "bn-BD", bo: "bo-CN", br: "br-FR", bs: "bs-BA", ca: "ca-ES", ce: "ce-RU", cs: "cs-CZ", cv: "cv-RU", cy: "cy-GB", da: "da-DK", de: "de-DE", dv: "dv-MV", dz: "dz-BT", el: "el-GR", en: "en-US", es: "es-ES", et: "et-EE", eu: "eu-ES", fa: "fa-IR", ff: "ff-SN", fi: "fi-FI", fo: "fo-FO", fr: "fr-FR", fy: "fy-DE", ga: "ga-IE", gd: "gd-GB", gl: "gl-ES", gu: "gu-IN", gv: "gv-GB", ha: "ha-NG", he: "he-IL", hi: "hi-IN", hr: "hr-HR", ht: "ht-HT", hu: "hu-HU", hy: "hy-AM", ia: "ia-FR", id: "id-ID", ig: "ig-NG", ik: "ik-CA", is: "is-IS", it: "it-IT", iu: "iu-CA", ja: "ja-JP", ka: "ka-GE", kk: "kk-KZ", kl: "kl-GL", km: "km-KH", kn: "kn-IN", ko: "ko-KR", ks: "ks-IN", ku: "ku-TR", kw: "kw-GB", ky: "ky-KG", lb: "lb-LU", lg: "lg-UG", li: "li-BE", ln: "ln-CD", lo: "lo-LA", lt: "lt-LT", lv: "lv-LV", mg: "mg-MG", mh: "mh-MH", mi: "mi-NZ", mk: "mk-MK", ml: "ml-IN", mn: "mn-MN", mr: "mr-IN", ms: "ms-MY", mt: "mt-MT", my: "my-MM", nb: "nb-NO", ne: "ne-NP", nl: "nl-NL", nn: "nn-NO", nr: "nr-ZA", oc: "oc-FR", om: "om-KE", or: "or-IN", os: "os-RU", pa: "pa-PK", pl: "pl-PL", ps: "ps-AF", pt: "pt-PT", ro: "ro-RO", ru: "ru-RU", rw: "rw-RW", sa: "sa-IN", sc: "sc-IT", sd: "sd-IN", se: "se-NO", si: "si-LK", sk: "sk-SK", sl: "sl-SI", so: "so-SO", sq: "sq-AL", sr: "sr-RS", ss: "ss-ZA", st: "st-ZA", sv: "sv-SE", sw: "sw-KE", ta: "ta-IN", te: "te-IN", tg: "tg-TJ", th: "th-TH", ti: "ti-ER", tk: "tk-TM", tl: "tl-PH", tn: "tn-ZA", tr: "tr-TR", ts: "ts-ZA", tt: "tt-RU", ug: "ug-CN", uk: "uk-UA", ur: "ur-PK", uz: "uz-UZ", ve: "ve-ZA", vi: "vi-VN", wa: "wa-BE", wo: "wo-SN", xh: "xh-ZA", yi: "yi-US", yo: "yo-NG", zh: "zh-CN", zu: "zu-ZA" } }, 323716: function(e, t, n) { "use strict"; n.r(t), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"), n("724458"), n("653041"), n("315314"), n("203651"); var i = n("544891"), r = n("569611"), s = n("547010"), a = n("580189"), o = n("397550"), l = n("931619"); n("358085"); var u = n("960048"), d = n("591759"), _ = n("303850"), c = n("981631"); let E = ["https://cdn.discordapp.com/bad-domains/updated_hashes.json", "https://cdn.discordapp.com/bad-domains/hashes.json"], I = new _.IdGenerator, T = /\/api(\/v\d+)?\/science/; (0, i.setRequestPatch)({ prepareRequest(e) { let { default: t } = n("314897"), { default: s } = n("857192"), { default: a } = n("706454"), { default: o } = n("594174"), { default: l } = n("626135"), { isPlatformEmbedded: _ } = n("358085"); if ("/" === e.url[0]) { var c, f; e.url = (0, i.getAPIBaseURL)() + e.url, !("Authorization" in e.header) && !("authorization" in e.header) && e.set("Authorization", t.getToken()); let n = l.getSuperPropertiesBase64(); null != n && e.set("X-Super-Properties", n); let r = t.getFingerprint(); if (null != r && "" !== r && e.set("X-Fingerprint", r), _) { let t, n = []; null != navigator && (n = (c = [...navigator.languages], c)); let i = (t = 10, n.reduce((e, n) => (10 === t ? e.push(n) : e.push("".concat(n, ";q=0.").concat(t)), t = Math.max(t - 1, 1), e), []).join(",")); e.set("Accept-Language", i) } e.set("X-Discord-Locale", a.locale); let u = function() { if (null == Intl.DateTimeFormat) return null; let e = Intl.DateTimeFormat(); return null == e.resolvedOptions ? null : e.resolvedOptions().timeZone }(); null != u && e.set("X-Discord-Timezone", u); let E = s.getDebugOptionsHeaderValue(); if (null != E && "" !== E && e.set("X-Debug-Options", E), s.isTracingRequests) { let t = o.getCurrentUser(), n = I.generate(null !== (f = null == t ? void 0 : t.id) && void 0 !== f ? f : "0"); e.set("x-client-trace-id", n); try { let t = new URL(e.url).pathname; if (!T.test(t)) { let i = function(e) { let t = new URLSearchParams; t.append("query", '@http.x_client_trace_id:"'.concat(e, '"')), t.append("showAllSpans", "true"); let n = d.default.toURLSafe("traces?".concat(t.toString()), "https://datadog.discord.tools/apm/"); return null == n ? null : n.toString() }(n); null !== i && console.debug("%c[tracing]%c %s %s\n%s", "font-weight: bold", "", e.method, t, i) } } catch (e) { console.error("error while printing tracing log", e) } } } r.report("Network", "Sending ".concat(e.method, " to ").concat(e.url)), e.on("response", t => { let n = null != t && t.status >= 400 ? t.text : null; r.report("Network", "Completed ".concat(e.method, " to ").concat(e.url, " with status: ").concat(null == t ? void 0 : t.status, " ").concat(null == n ? "" : "and body: ".concat(n))) }), e.on("error", (t, n) => { if (r.report("Network", "Failed ".concat(e.method, " to ").concat(e.url, " with status ").concat(null == t ? void 0 : t.status, " and body: ").concat(null == n ? void 0 : n.text)), null != t && "parse" in t && t.parse) { let n = "[FILTERED]"; if (E.includes(e.url)) { var i, s; n = null === (s = e.xhr) || void 0 === s ? void 0 : null === (i = s.responseText) || void 0 === i ? void 0 : i.slice(0, 1e3) } u.default.addBreadcrumb({ category: "superagent", message: "Failed to parse HTTP response.", data: { method: e.method, url: e.url, responseText: n, status: t.status } }) } }) }, interceptResponse(e, t, i) { var r, l, u, d, _; return 400 === e.statusCode && (null === (r = e.body) || void 0 === r ? void 0 : r.captcha_key) ? (Promise.all([n.e("36514").then(n.bind(n, "475271")), n.e("31177").then(n.bind(n, "353250"))]).then(t => { let [{ default: n }, { extractCaptchaPropsFromResponseBody: i }] = t; return n.showCaptchaAsync(i(e.body)) }).then(e => { let { captcha_key: n, captcha_rqtoken: i } = e, r = { "X-Captcha-Key": n }; null != i && (r["X-Captcha-Rqtoken"] = i), t(r) }).catch(i), !0) : 401 === e.statusCode && (null === (l = e.body) || void 0 === l ? void 0 : l.code) === c.AbortCodes.MFA_REQUIRED && (null === (u = e.body) || void 0 === u ? void 0 : u.mfa) ? (Promise.all([n.e("99387"), n.e("52030"), n.e("85281")]).then(n.bind(n, "24031")).then(n => { let { openMFAModal: r } = n; r(e.body.mfa, t, i) }).catch(i), !0) : (0, o.isLimitedAccessErrorCode)(e.statusCode, null === (d = e.body) || void 0 === d ? void 0 : d.code) ? (Promise.resolve().then(n.bind(n, "895886")).then(e => { let { default: t } = e; t() }), !1) : (0, s.isLimitedAccessErrorCode)(e.statusCode, null === (_ = e.body) || void 0 === _ ? void 0 : _.code) ? (n.e("76731").then(n.bind(n, "626892")).then(t => { var n; let { default: i } = t; i(null === (n = e.body) || void 0 === n ? void 0 : n.guild_id) }), !1) : ((0, a.isBlockedByProxyErrorCode)(e) && n.e("89715").then(n.bind(n, "707708")).then(e => { let { handleBlockedByProxy: t } = e; t() }), !1) } }), (0, i.setAwaitOnline)(async e => { if (r.report("Network", "Request to ".concat(e, " failed, will retry.")), !l.default.isOnline()) await l.default.awaitOnline(), r.report("Network", "Network detected online, retrying ".concat(e)) }) }, 552871: function(e, t, n) { "use strict"; n.r(t), n.d(t, { uploadRtcLogFiles: function() { return _ } }), n("47120"); var i = n("259443"), r = n("544891"), s = n("881052"), a = n("131951"), o = n("403182"), l = n("579806"), u = n("981631"); let d = new i.Logger("uploadRtcLogFiles"); async function _(e, t) { let n; if (null == l.default.fileManager.readLogFiles) throw new s.UploadVoiceDebugLogsError(s.UploadErrorCodes.GENERAL); let i = []; try { i = (i = await l.default.fileManager.readLogFiles(e)).map(e => (0, o.transformNativeFile)(e, "application/octet-stream")) } catch (e) { throw d.error("uploadDebugFiles: read error '".concat(e, "'")), new s.UploadVoiceDebugLogsError(s.UploadErrorCodes.READ) } if (0 === i.length) throw new s.UploadVoiceDebugLogsError(s.UploadErrorCodes.NO_FILE); try { let e = { extraInfo: t, mediaEngineState: a.default.getState() }; n = await r.HTTP.post({ url: u.Endpoints.DEBUG_LOGS(u.DebugLogCategory.RTC), attachments: [...i.map(e => ({ name: e.name, file: e, filename: e.name })), { name: "media_engine_state.json", filename: "media_engine_state.json", file: new Blob([JSON.stringify(e, void 0, 2)]) }] }) } catch (e) { if (429 === e.status) throw new s.UploadVoiceDebugLogsError(s.UploadErrorCodes.PROGRESS); throw d.error("Debug log upload error: status: ".concat(e.status, ", message: ").concat(e.message)), new s.UploadVoiceDebugLogsError(s.UploadErrorCodes.UPLOAD) } let _ = i.length + 1; if ("success_count" in n.body && n.body.success_count !== _) throw d.error("Debug log upload: stored files ".concat(n.body.success_count, " !== ").concat(_)), new s.UploadVoiceDebugLogsError(s.UploadErrorCodes.GENERAL); if ("store_success" in n.body && !n.body.store_success || "id_match" in n.body && !n.body.id_match || "all_success" in n.body && !n.body.all_success) throw d.error("Debug log upload: store_success: ".concat(n.body.store_success, " / ") + "id_match: ".concat(n.body.id_match, " / ") + "all_success: ".concat(n.body.all_success)), new s.UploadVoiceDebugLogsError(s.UploadErrorCodes.GENERAL) } }, 141795: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CloudUpload: function() { return g }, CloudUploadStatus: function() { return i } }), n("47120"), n("411104"); var i, r, s = n("392711"), a = n.n(s), o = n("261470"), l = n("544891"), u = n("710845"), d = n("432877"), _ = n("549464"), c = n("740492"), E = n("866960"), I = n("626135"), T = n("510990"), f = n("70956"), S = n("960048"), h = n("861990"), A = n("476326"), m = n("983544"), N = n("981631"); function p(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let O = new u.default("CloudUpload.tsx"), C = n("224497").default; (r = i || (i = {})).NOT_STARTED = "NOT_STARTED", r.STARTED = "STARTED", r.UPLOADING = "UPLOADING", r.ERROR = "ERROR", r.COMPLETED = "COMPLETED", r.CANCELED = "CANCELED"; class R { constructor() { p(this, "numChunks", void 0), p(this, "totalRequestCount", void 0), p(this, "timing", {}), p(this, "compressAndExtractDisabled", void 0), p(this, "fileAlreadyPrepped", void 0), p(this, "imageCompressionQuality", void 0), p(this, "videoCompressionQuality", void 0), p(this, "convertedMimeType", void 0), p(this, "sourceMediaWidth", void 0), p(this, "sourceMediaHeight", void 0), p(this, "sourceMediaFormat", void 0), p(this, "sourceVideoBitrate", void 0) } } class g extends A.default { static fromJson(e) { let { item: t, channelId: n, showLargeMessageDialog: i, reactNativeFileIndex: r } = e, s = new g(t, n, i, r); return "COMPLETED" !== s.status && (s.status = "NOT_STARTED"), Object.entries(e).forEach(e => { let [t, n] = e; !t.startsWith("_") && (s[t] = n) }), s } retryOpts() { return this.item.platform === A.UploadPlatform.REACT_NATIVE ? { timeout: 1 * f.default.Millis.HOUR, backoff: new o.default(.5 * f.default.Millis.SECOND, 30 * f.default.Millis.MINUTE), retries: 12 } : { timeout: 1 * f.default.Millis.HOUR, retries: 12, backoff: new o.default } } async uploadFileToCloudAsChunks(e) { if (null == this.responseUrl || "" === this.responseUrl) throw Error("_uploadFileToCloudAsChunks - responseUrl is not set"); let { contentType: t, fileSize: n, bufferedFileData: i } = await this.prepareChunkUploadItem(), r = Math.ceil(n / e); this.uploadAnalytics.numChunks = r, this.uploadAnalytics.totalRequestCount = 0; for (let s = 0; s < r; s++) { O.info("Uploading chunk ".concat(s + 1, " of ").concat(r, " for file id ").concat(this.id)); let a = s * e, o = Math.min(a + e, n), l = await this.getChunk(a, o, i); try { await this.uploadChunk({ chunk: l, start: a, end: o, totalSize: n, sessionUrl: this.responseUrl, contentType: t }) } catch (e) { throw O.error("Error uploading chunk ".concat(s + 1, " for file id ").concat(this.id, ": ").concat(e)), e } } O.log("Upload complete for file id ".concat(this.id)) } async prepareChunkUploadItem() { let e, t, n; if (this.item.platform === A.UploadPlatform.REACT_NATIVE) { let i = this.item; if (e = null != i.mimeType && "" !== i.mimeType ? i.mimeType : "application/octet-stream", null == i.size || 0 === i.size || isNaN(i.size)) try { t = await (0, h.getFileContentLength)(i.uri) } catch (e) { O.warn("Failed to peek content length for file id ".concat(this.id, ", reading whole file instead: ").concat(e)), t = (n = await (0, h.getFileData)(i.uri)).size } else t = i.size } else e = "application/octet-stream", t = this.item.file.size; return { contentType: e, fileSize: t, bufferedFileData: n } } async getChunk(e, t, n) { return this.item.platform !== A.UploadPlatform.REACT_NATIVE ? this.item.file.slice(e, t) : null != n ? n.slice(e, t) : await (0, h.getFileChunk)(this.item.uri, e, t) } async uploadChunk(e) { let t = { "Content-Type": e.contentType, "Content-Range": "bytes ".concat(e.start, "-").concat(e.end - 1, "/").concat(e.totalSize) }; for (let i = 1; i <= 3; i++) { var n; this.uploadAnalytics.totalRequestCount = (null !== (n = this.uploadAnalytics.totalRequestCount) && void 0 !== n ? n : 0) + 1, O.log("Attempt ".concat(i, " for file id ").concat(this.id, " : Uploading chunk ").concat(e.start, "-").concat(e.end - 1, " of ").concat(e.totalSize, " bytes")); let r = a().throttle(t => { let n = e.start + t.loaded; this.emit("progress", n, e.totalSize, n - this.loaded), this.loaded = n }, 50); try { if ((await l.HTTP.put({ url: e.sessionUrl, body: e.chunk, headers: t, signal: this._abortController.signal, onRequestProgress: r, ...this.retryOpts() })).ok) return } catch (t) { if (!this.RESUME_INCOMPLETE_CODES.includes(t.status)) throw t; if (this.isUnsuccessfulChunkUpload(t, e.end - 1)) { O.error("Incomplete chunk upload for file id ".concat(this.id, ": ").concat(t.status)); continue } return } } throw Error("Failed to upload chunk") } isUnsuccessfulChunkUpload(e, t) { if (null == e.headers.range || "" === e.headers.range) return !0; let n = e.headers.range.match(/bytes=(\d+)-(\d+)/); return null !== n && parseInt(n[2], 10) !== t } uploadFileToCloud() { let e, t; if (null == this.responseUrl) throw Error("_uploadFileToCloud - responseUrl is not set"); O.log("Uploading ".concat(this.id)), this.item.platform === A.UploadPlatform.REACT_NATIVE ? t = null != (e = { type: this.item.mimeType, uri: this.item.uri, name: this.item.filename }).type && "application/json" !== e.type ? e.type : "application/octet-stream" : (e = this.item.file, t = "application/octet-stream"); let n = a().throttle(e => { this.emit("progress", e.loaded, e.total, e.loaded - this.loaded), this.loaded = e.loaded }, 50), i = { "Content-Type": t }; return l.HTTP.put({ url: this.responseUrl, body: e, headers: i, signal: this._abortController.signal, onRequestProgress: n, ...this.retryOpts() }) } async getSize() { var e; return null !== (e = this.currentSize) && void 0 !== e ? e : 0 } async trackTime(e, t) { let n = performance.now(); try { return await t() } finally { this.uploadAnalytics.timing[e] = performance.now() - n } } async upload() { var e, t, n; if ("COMPLETED" === this.status) return; if (this.setStatus("STARTED"), this.startTime = performance.now(), this.trackUploadStart(), "CANCELED" === this.status) { this.handleComplete(this.id); return } let i = await C.getUploadPayload(this), r = (0, m.getUploadTarget)(this.item.target); if (null == i.filename || "" === i.filename || 0 === this.currentSize) { O.error("File does not have a filename or size is 0.", JSON.stringify(i)), this.handleError(N.AbortCodes.INVALID_FILE_ASSET); return } if ((null !== (e = this.currentSize) && void 0 !== e ? e : 0) > r.getMaxFileSize(this.channelId)) { this.handleError(N.AbortCodes.ENTITY_TOO_LARGE); return } if (d.default.get("upload_fail_50") && .5 > Math.random()) { setTimeout(() => { this.handleError(500) }, 1e3); return } try { O.log("Requesting upload url for ".concat(this.id)); let e = await this.trackTime("getUploadUrlTimeMs", async () => await l.HTTP.post({ url: r.getCreateAttachmentURL(this.channelId), body: { files: [i] }, ...this.retryOpts() })); this.setResponseUrl(e.body.attachments[0].upload_url), this.setUploadedFilename(e.body.attachments[0].upload_filename) } catch (i) { let e = null !== (n = null == i ? void 0 : null === (t = i.body) || void 0 === t ? void 0 : t.code) && void 0 !== n ? n : i.status; e !== N.AbortCodes.ENTITY_TOO_LARGE && (O.error("Requesting upload url failed with code ".concat(null != e ? e : JSON.stringify(i.body), " for ").concat(this.id)), S.default.captureException(i)), this.handleError(e); return } try { let e; let t = _.default.getCurrentConfig({ location: "CloudUpload" }, { autoTrackExposure: !0 }); e = t.enabled && t.chunkSize > 0 ? await this.trackTime("uploadTimeMs", async () => await this.uploadFileToCloudAsChunks(t.chunkSize)) : await this.trackTime("uploadTimeMs", async () => await this.uploadFileToCloud()), this.trackUploadFinished("COMPLETED"), this.handleComplete(e) } catch (e) { "CANCELED" === this.status ? this.handleComplete(e) : (O.info("Error: status ".concat(e.status, " for ").concat(this.id)), this.handleError(e)) } } async reactNativeCompressAndExtractData() { var e; if (!(0, m.getUploadTarget)(this.item.target).shouldReactNativeCompressUploads) return this.uploadAnalytics.compressAndExtractDisabled = !0, O.log("reactNativeCompressAndExtractData() disabled by upload target"), this; if (!0 === this.reactNativeFilePrepped) return this.uploadAnalytics.fileAlreadyPrepped = !0, O.log("reactNativeCompressAndExtractData() file already prepped - ".concat(this.id)), this; O.log("Starting compression/conversion for ".concat(this.id)); let t = await this.trackTime("compressTimeMs", async () => { var e; return await (0, T.getAttachmentFile)(this, null !== (e = this.reactNativeFileIndex) && void 0 !== e ? e : 0) }); if (null == t || null == t.file) return this; let n = t.uri, i = t.file.name, r = t.file.type; if ((0, A.isResolvedUpload)(t.file) && (this.uploadAnalytics.imageCompressionQuality = t.file.imageCompressionQuality, this.uploadAnalytics.videoCompressionQuality = t.file.videoCompressionQuality, this.uploadAnalytics.convertedMimeType = t.file.type, void 0 !== t.file.videoMetadata && (this.uploadAnalytics.sourceMediaWidth = t.file.videoMetadata.width, this.uploadAnalytics.sourceMediaHeight = t.file.videoMetadata.height, this.uploadAnalytics.sourceMediaFormat = t.file.videoMetadata.format, this.uploadAnalytics.sourceVideoBitrate = t.file.videoMetadata.bitrate)), this.filename = i, null == i || null == n || null == r) throw O.error("Insufficient file data: ".concat({ filename: i, uri: n, mimeType: r }, " for ").concat(this.id)), Error("Insufficient file data: ".concat({ filename: i, uri: n, mimeType: r })); let s = null !== (e = t.fileSize) && void 0 !== e ? e : (await (0, h.getFileData)(n)).size; if (this.postCompressionSize = s, this.currentSize = s, null == s) throw O.error("Size missing from file data for ".concat(this.id)), Error("Size missing from file data"); return O.log("Completed compression and conversion. Output size=".concat(s, " bytes; filename=").concat(i, " for ").concat(this.id)), this.item = { ...this.item, uri: n, filename: i, mimeType: r }, this.reactNativeFilePrepped = !0, this } handleError(e) { this.setStatus("ERROR"), this.error = e, this.trackUploadFinished("ERROR"); try { this.emit("error", e) } catch {} this.removeAllListeners() } handleComplete(e) { this.setStatus("COMPLETED"), O.log("Upload complete for ".concat(this.id)), this.emit("complete", e), this.removeAllListeners() } cancel() { O.log("Cancelled called for ".concat(this.id)), this._abortController.abort(), this.trackUploadFinished("CANCELED"), "COMPLETED" === this.status && this.delete(), this.setStatus("CANCELED"), this.emit("complete"), this.removeAllListeners() } resetState() { return this.status = "NOT_STARTED", this.uploadedFilename = void 0, this.responseUrl = void 0, this.error = void 0, this.startTime = void 0, this.uploadAnalytics = new R, this._abortController = new AbortController, super.resetState() } async delete() { if (null == this.uploadedFilename) return; let e = (0, m.getUploadTarget)(this.item.target).getDeleteUploadURL(this.uploadedFilename); try { await l.HTTP.del(e) } catch {} } setResponseUrl(e) { this.responseUrl = e } setStatus(e) { this.status = e } setFilename(e) { this.filename = e } setUploadedFilename(e) { this.uploadedFilename = e } trackUploadStart() { var e; I.default.track(N.AnalyticEvents.ATTACHMENT_UPLOAD_STARTED, { file_size: this.currentSize, mime_type: null !== (e = this.mimeType) && void 0 !== e ? e : "unknown", video_upload_quality: c.default.videoUploadQuality, data_saving_mode: c.default.dataSavingMode, low_quality_image_mode: c.default.lowQualityImageMode, channel_id: this.channelId, connection_type: E.default.getType(), effective_connection_speed: E.default.getEffectiveConnectionSpeed(), service_provider: E.default.getServiceProvider() }) } trackUploadFinished(e) { var t, n, i, r, s; let a = null != this.startTime ? performance.now() - this.startTime : -1; I.default.track(N.AnalyticEvents.ATTACHMENT_UPLOAD_FINISHED, { duration_ms: a, file_size: this.currentSize, pre_compression_file_size: this.preCompressionSize, final_state: e, mime_type: null !== (t = this.mimeType) && void 0 !== t ? t : "unknown", num_chunks: this.uploadAnalytics.numChunks, num_upload_attempts: null !== (n = this.uploadAnalytics.totalRequestCount) && void 0 !== n ? n : 1, error_code: this.error, video_upload_quality: c.default.videoUploadQuality, data_saving_mode: c.default.dataSavingMode, low_quality_image_mode: c.default.lowQualityImageMode, compress_time_ms: this.uploadAnalytics.timing.compressTimeMs, get_upload_url_time_ms: this.uploadAnalytics.timing.getUploadUrlTimeMs, upload_time_ms: this.uploadAnalytics.timing.uploadTimeMs, converted_mime_type: null !== (i = this.uploadAnalytics.convertedMimeType) && void 0 !== i ? i : "unknown", image_compression_quality: null !== (r = this.uploadAnalytics.imageCompressionQuality) && void 0 !== r ? r : 0, video_compression_quality: null !== (s = this.uploadAnalytics.videoCompressionQuality) && void 0 !== s ? s : "unknown", was_converted: this.mimeType !== this.uploadAnalytics.convertedMimeType, was_compressed: this.currentSize < this.preCompressionSize, source_media_width: this.uploadAnalytics.sourceMediaWidth, source_media_height: this.uploadAnalytics.sourceMediaHeight, source_media_format: this.uploadAnalytics.sourceMediaFormat, source_video_bitrate: this.uploadAnalytics.sourceVideoBitrate, channel_id: this.channelId, connection_type: E.default.getType(), effective_connection_speed: E.default.getEffectiveConnectionSpeed(), service_provider: E.default.getServiceProvider() }) } constructor(e, t, n, i) { var r, s, a, o; super(e, n), p(this, "RESUME_INCOMPLETE_CODES", [308]), p(this, "status", "NOT_STARTED"), p(this, "channelId", void 0), p(this, "responseUrl", void 0), p(this, "currentSize", void 0), p(this, "preCompressionSize", void 0), p(this, "postCompressionSize", void 0), p(this, "loaded", 0), p(this, "reactNativeFileIndex", void 0), p(this, "error", void 0), p(this, "reactNativeFilePrepped", !1), p(this, "startTime", void 0), p(this, "uploadAnalytics", new R), p(this, "_abortController", void 0), p(this, "_xhr", void 0), p(this, "_aborted", !1), this.channelId = t, this.preCompressionSize = null !== (a = null === (r = e.file) || void 0 === r ? void 0 : r.size) && void 0 !== a ? a : 0, this.currentSize = null !== (o = null === (s = e.file) || void 0 === s ? void 0 : s.size) && void 0 !== o ? o : 0, this.reactNativeFileIndex = i, this._abortController = new AbortController } } }, 687294: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E }, stageAttachmentFiles: function() { return I } }), n("724458"), n("47120"), n("411104"); var i = n("259443"), r = n("510990"), s = n("141795"), a = n("983544"), o = n("596956"), l = n("865275"), u = n("981631"), d = n("959517"), _ = n("689938"); let c = new i.Logger("CloudUploaderBase.tsx"); class E extends l.default { _fileSize() { return this.files.reduce((e, t) => { var n; return e += null !== (n = t.currentSize) && void 0 !== n ? n : 0 }, 0) } async compressAndCheckFileSize() { var e, t; let n = (0, a.getUploadTarget)(null === (t = this.files[0]) || void 0 === t ? void 0 : null === (e = t.item) || void 0 === e ? void 0 : e.target); return this.files.length > n.getMaxAttachmentsCount() ? (c.log("Too many attachments for ".concat(this.id)), this._handleError({ code: u.AbortCodes.TOO_MANY_ATTACHMENTS }), !1) : !(this._fileSize() > n.getMaxTotalAttachmentSize()) || (this._handleError({ code: u.AbortCodes.ENTITY_TOO_LARGE, reason: { type: d.FileUploadErrorTypes.POSTCOMPRESSION_SUM_TOO_LARGE } }), !1) } _filesTooLarge() { return this.files.some(e => e.error === u.AbortCodes.ENTITY_TOO_LARGE) } setUploadingTextForUI() { let e = 1 === this.files.length && null != this.files[0].filename ? this.files[0].filename : _.default.Messages.UPLOADING_FILES.format({ count: this.files.length }), t = this.files.some(e => e.isImage), n = this.files.some(e => e.isVideo), i = this._fileSize(); c.log("setUploadingTextForUI - total content: ".concat(i, " bytes and ").concat(this.files.length, " attachments for ").concat(this.id)), this._file = { ...this._file, totalPostCompressionSize: i, currentSize: i, name: e, hasVideo: n, hasImage: t, attachmentsCount: this.files.length, items: this.files } } _recomputeProgress() { let { loaded: e, total: t } = this._recomputeProgressTotal(), n = this._recomputeProgressByFile(); this._handleProgress(e, t, n) } _recomputeProgressTotal() { let e = this._fileSize(); return { loaded: this.files.reduce((e, t) => { var n; return e += null !== (n = t.loaded) && void 0 !== n ? n : 0 }, 0), total: e } } _recomputeProgressByFile() { let e = {}; return this.files.forEach(t => { e[t.id] = (0, o.calculateProgress)(t.loaded, t.currentSize) }), e } cancel() { c.log("Cancel called for ".concat(this.id)), !this._aborted && (this._aborted = !0, null != this._cancel && this._cancel(), this.files.forEach(e => e.cancel()), this._handleComplete()) } async cancelItem(e) { c.log("Cancel called for ".concat(this.id, " for item ").concat(e)); let t = this.files.find(t => t.id === e); if (null == t || t.status === s.CloudUploadStatus.CANCELED) return; let n = this.files.indexOf(t); this.files = [...this.files.slice(0, n), ...this.files.slice(n + 1)], this._file = { ...this._file, items: this.files }, await (0, r.cancelGetAttachmentFile)(t), t.cancel(), this.emit("cancel-upload-item", this._file), 0 === this.files.length && this.cancel() } failed() { return this.files.some(e => e.status === s.CloudUploadStatus.ERROR) } _remainingUploadCount() { let e = this.files; return e.length - e.filter(e => e.status === s.CloudUploadStatus.COMPLETED).length } clear() { this.cancel(), this.files = [] } constructor(...e) { var t, n, i; super(...e), t = this, i = [], (n = "files") in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } async function I(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 ? arguments[2] : void 0, i = e.map(e => new Promise((i, r) => { switch (e.status) { case s.CloudUploadStatus.NOT_STARTED: e.upload(); break; case s.CloudUploadStatus.COMPLETED: i("complete"); break; case s.CloudUploadStatus.ERROR: t && e.error !== u.AbortCodes.ENTITY_TOO_LARGE ? e.upload() : r(Error("File failed to upload")); break; case s.CloudUploadStatus.CANCELED: r(Error("Upload is canceled")) } e.on("complete", () => { i("complete") }), e.on("error", () => { r(Error("File ".concat(e.id, " failed to upload"))) }), e.on("progress", (e, t) => { null == n || n(e, t) }) })); await Promise.all(i) } }, 476326: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UploadPlatform: function() { return s }, default: function() { return T }, isResolvedUpload: function() { return I } }); var i, r, s, a, o = n("836560"), l = n("392711"), u = n.n(l), d = n("153832"), _ = n("403182"), c = n("861990"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function I(e) { return void 0 !== e.isVideo && void 0 !== e.isImage }(i = s || (s = {}))[i.REACT_NATIVE = 0] = "REACT_NATIVE", i[i.WEB = 1] = "WEB", (r = a || (a = {}))[r.FILE_ATTACHMENT = 0] = "FILE_ATTACHMENT", r[r.IMAGE_PICKER = 1] = "IMAGE_PICKER"; class T extends o.EventEmitter { cancel() {} resetState() { return this } constructor(e, t) { var n, i; if (super(), E(this, "id", void 0), E(this, "uniqueId", void 0), E(this, "filename", void 0), E(this, "item", void 0), E(this, "spoiler", void 0), E(this, "description", void 0), E(this, "classification", void 0), E(this, "isImage", void 0), E(this, "isVideo", void 0), E(this, "uploadedFilename", void 0), E(this, "showLargeMessageDialog", void 0), E(this, "mimeType", void 0), E(this, "origin", void 0), E(this, "durationSecs", void 0), E(this, "waveform", void 0), E(this, "isThumbnail", void 0), E(this, "isRemix", void 0), E(this, "clip", void 0), this.item = e, 0 === e.platform) { this.id = null !== (n = e.id) && void 0 !== n ? n : e.uri; let t = (0, c.getFile)({ uri: e.uri, overrideFilename: e.filename, overrideType: e.mimeType }); this.filename = t.filename, this.isImage = t.isImage, this.isVideo = t.isVideo, this.mimeType = t.type, this.origin = e.origin, this.durationSecs = e.durationSecs, this.waveform = e.waveform, this.isRemix = e.isRemix } else this.id = null !== (i = e.id) && void 0 !== i ? i : u().uniqueId("upload"), this.classification = _.classifyFile(e.file), this.isImage = "image" === this.classification, this.isVideo = "video" === this.classification, this.filename = e.file.name, this.mimeType = e.file.type; this.isThumbnail = e.isThumbnail, this.clip = e.clip, this.uniqueId = (0, d.v4)(), this.showLargeMessageDialog = t, this.spoiler = !1, this.description = null } } }, 983544: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UploadTargets: function() { return r }, getUploadTarget: function() { return _ } }); var i, r, s = n("277985"), a = n("592125"), o = n("403182"), l = n("861990"), u = n("981631"); class d { getCreateAttachmentURL(e) { return u.Endpoints.MESSAGE_CREATE_ATTACHMENT_UPLOAD(e) } getDeleteUploadURL(e) { return u.Endpoints.MESSAGE_DELETE_UPLOAD(e) } getMaxFileSize(e) { let t = a.default.getBasicChannel(e); return o.maxFileSize(null == t ? void 0 : t.guild_id) } getMaxAttachmentsCount() { return u.MAX_UPLOAD_COUNT } getMaxTotalAttachmentSize() { return l.MAX_TOTAL_ATTACHMENT_SIZE } get shouldReactNativeCompressUploads() { return !0 } } function _(e) { if (1 === e) return new s.default; return new d }(i = r || (r = {}))[i.MESSAGE_ATTACHMENT = 0] = "MESSAGE_ATTACHMENT", i[i.GUILD_PRODUCT_ATTACHMENT = 1] = "GUILD_PRODUCT_ATTACHMENT" }, 596956: function(e, t, n) { "use strict"; n.r(t), n.d(t, { calculateProgress: function() { return s }, doesImageMatchUpload: function() { return r } }); var i = n("476326"); function r(e, t) { if (t.id === e.uri || null != t.id && t.id === e.id) return !0; if (t.item.platform === i.UploadPlatform.REACT_NATIVE) { let { item: i } = t, { filename: r } = e; if (i.originalUri === e.uri) return !0; if (null != r) { var n; if (null === (n = i.originalUri) || void 0 === n ? void 0 : n.includes(r)) return !0 } } return !1 } function s(e, t) { return 0 === t ? 0 : Math.min(Math.floor(e / t * 100), 100) } }, 865275: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"), n("411104"); var i = n("836560"), r = n("392711"), s = n.n(r), a = n("710845"), o = n("596956"), l = n("959517"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = new a.default("UploaderBase.tsx"); class _ extends i.EventEmitter { _addAttachmentsToPayload(e, t, n) { let i = { ...e }, r = [...s().get(i, t, []), ...n]; return s().set(i, t, r) } clearProcessingMessageInterval() { null != this.processingMessageChangeInterval && (clearInterval(this.processingMessageChangeInterval), this.processingMessageChangeInterval = void 0) } cancel() { d.log("cancel() for ".concat(this.id)), this._aborted = !0, null != this._cancel && this._cancel(), this._handleComplete() } cancelItem(e) { throw Error("cancelItem() is not implemented on UploaderBase; must implement cancelItem() on subclass") } upload(e, t, n) { if (null != this._cancel) throw Error("Uploader.upload(...): An upload is already in progress."); this._lastUpdate = Date.now(), this._loaded = 0, this._file = { id: this.id, name: e.name, currentSize: 0, totalPreCompressionSize: 0, compressionProgress: 0, progress: 0, rate: 0, hasImage: !1, hasVideo: !1, attachmentsCount: 0, draftContent: null == t ? void 0 : t.content, channelId: null == t ? void 0 : t.channel_id, items: n } } constructor(e, t = "POST", n) { var i; super(), u(this, "_url", void 0), u(this, "_token", ""), u(this, "_cancel", void 0), u(this, "_lastUpdate", 0), u(this, "_loaded", 0), u(this, "_file", void 0), u(this, "_aborted", !1), u(this, "_errored", !1), u(this, "_method", void 0), u(this, "_raiseEndpointErrors", !1), u(this, "alreadyStarted", !1), u(this, "processingMessageChangeInterval", void 0), u(this, "id", void 0), u(this, "_handleStart", e => { this._cancel = e, !this.alreadyStarted && this.emit("start", this._file), this.alreadyStarted = !0 }), u(this, "_handleProgress", (e, t, n) => { let i = Date.now(), r = (0, o.calculateProgress)(e, t), s = Math.floor((e - this._loaded) / ((i - this._lastUpdate) / 1e3)); if (null != n) { var a; null === (a = this._file.items) || void 0 === a || a.forEach(e => { e.item.progress = n[e.id] }) } this._lastUpdate = i, this._loaded = e, this._file = { ...this._file, currentSize: t, progress: r, rate: s }, this.emit("progress", this._file) }), u(this, "_handleException", e => { this._handleError({ reason: { type: l.FileUploadErrorTypes.ERROR_SOURCE_UNKNOWN, msg: e.toString() } }) }), u(this, "_handleAborted", () => { this.clearProcessingMessageInterval() }), u(this, "_handleError", e => { let { code: t, reason: n, body: i } = e; this.clearProcessingMessageInterval(), !this._aborted && (this._errored = !0, d.log("_handleError: ".concat(t, " (").concat(JSON.stringify(n), ") for ").concat(this.id)), this.emit("error", this._file, t, i, n), this.removeAllListeners()) }), u(this, "_handleComplete", e => { this.clearProcessingMessageInterval(), d.log("_handleComplete for ".concat(this.id)), this.emit("complete", this._file, e), this.removeAllListeners() }), this.id = s().uniqueId("Uploader"), this._url = e, this._method = t, this._raiseEndpointErrors = null !== (i = null == n ? void 0 : n.raiseEndpointErrors) && void 0 !== i && i } } }, 680287: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }), n("653041"); var i = n("544891"), r = n("881052"), s = n("687294"), a = n("476326"), o = n("861990"), l = n("689938"); class u extends s.default { async uploadFiles(e, t) { let { addFilesTo: n } = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; super.upload({ name: l.default.Messages.ATTACHMENT_PROCESSING }, t, e); let i = new AbortController; try { if (this.files = e, this._aborted) return; if (this._handleStart(() => i.abort()), !await this.compressAndCheckFileSize()) return; this.setUploadingTextForUI(), await (0, s.stageAttachmentFiles)(this.files, !0, this._recomputeProgress.bind(this)) } catch (e) { this._handleException(e) } try { return await this._createMessage(i.signal, t, n) } catch (e) { if (this._raiseEndpointErrors) throw e; this._handleException(e) } } async _createMessage(e, t, n) { let s; let l = []; this.files.forEach((e, t) => { let n = (0, o.getAttachmentPayload)(e, t); e.item.platform === a.UploadPlatform.WEB && l.push({ ...n }) }), s = null != n && null != t ? this._addAttachmentsToPayload(t, n, l) : { ...t, attachments: l }; let u = { url: this._url, body: s, signal: e }, d = "POST" === this._method ? i.HTTP.post : i.HTTP.patch; try { let e = await d(u); return this._handleComplete(e.body), e.body } catch (e) { var _; if (this._raiseEndpointErrors) throw new r.APIError(e); this._handleError({ code: null == e ? void 0 : null === (_ = e.body) || void 0 === _ ? void 0 : _.code, body: null == e ? void 0 : e.body }) } } constructor(e, t = "POST", n) { super(e, t, n) } } }, 224497: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getUploadPayload: function() { return l } }); var i = n("512722"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("830496"); function l(e) { var t, n; let i = e.item.file; return r()(null != i, "file data must not be empty"), { filename: i.name, file_size: i.size, id: a().uniqueId(), is_clip: null != e.clip, title: null === (t = e.clip) || void 0 === t ? void 0 : t.name, application_id: null === (n = e.clip) || void 0 === n ? void 0 : n.applicationId, clip_created_at: null != e.clip ? (0, o.getClipCreatedAt)(e.clip.id) : void 0, clip_participant_ids: null != e.clip ? (0, o.getClipParticipantIds)(e.clip.users) : void 0 } } t.default = { getUploadPayload: l } }, 40851: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AppWindowContextProvider: function() { return T }, MainWindowDispatch: function() { return u }, getAppWindowContextValue: function() { return E }, getCurrentlyInteractingAppContext: function() { return I }, getWindowDispatchForElement: function() { return c }, useAppContext: function() { return f }, useWindowDispatch: function() { return S } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("585483"), a = n("830917"), o = n("919570"), l = n("981631"); let u = new s.ComponentDispatcher, d = r.createContext({ appContext: l.AppContext.APP, renderWindow: window, windowDispatch: u, windowId: (0, a.getMainWindowId)() }), _ = new Map; function c(e) { var t; let n = e.ownerDocument.defaultView; if (null == n) return; let i = (0, a.getWindowId)(n); return null === (t = _.get(i)) || void 0 === t ? void 0 : t.windowDispatch } function E(e) { return _.get(e) } function I() { let e = function() { var e; let t = (0, o.getCurrentlyInteractingWindowId)(); return null == t ? null : null !== (e = _.get(t)) && void 0 !== e ? e : null }(); return null != e ? e.appContext : null } function T(e) { let { appContext: t, renderWindow: n, children: r } = e, o = function(e, t) { let n = (0, a.getWindowId)(t), i = _.get(n); return null == i && (i = { appContext: e, renderWindow: t, windowDispatch: new s.ComponentDispatcher, windowId: n }, _.set(n, i), t.addEventListener("unload", () => { _.delete(n) })), i }(t, n); return (0, i.jsx)(d.Provider, { value: o, children: r }) } function f() { return r.useContext(d).appContext } function S() { return r.useContext(d).windowDispatch } t.default = d }, 126168: function(e, t, n) { "use strict"; function i(e, t) { if (e.length < 2) return []; let n = [], i = e[0]; for (let r = 1; r < e.length; r++) { let s = e[r]; n.push(t(i, s)), i = s } return n } n.r(t), n.d(t, { default: function() { return i } }), n("653041") }, 857595: function(e, t, n) { "use strict"; n.r(t), n.d(t, { disableKeyboardMode: function() { return I }, enableKeyboardMode: function() { return E }, keyboardNavigationExplainerModalSeen: function() { return S }, setAlwaysShowLinkDecorations: function() { return C }, setFontSize: function() { return d }, setHideTags: function() { return v }, setMessageGroupSpacing: function() { return _ }, setPrefersReducedMotion: function() { return m }, setRoleStyle: function() { return R }, setSaturation: function() { return A }, setSyncForcedColors: function() { return N }, setZoom: function() { return c }, systemColorPreferencesChanged: function() { return p }, systemPrefersContrastChanged: function() { return O }, systemPrefersReducedMotionChanged: function() { return h }, toggleDarkSidebar: function() { return f }, toggleDesaturateUserColors: function() { return T }, toggleSubmitButton: function() { return g }, toggleSyncProfileThemeWithUserTheme: function() { return L } }); var i = n("570140"), r = n("153867"), s = n("626135"), a = n("607070"), o = n("981631"), l = n("969943"), u = n("611480"); function d(e) { i.default.dispatch({ type: "ACCESSIBILITY_SET_FONT_SIZE", fontSize: e }) } function _() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null; i.default.dispatch({ type: "ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING", messageGroupSpacing: e }) } function c(e) { i.default.dispatch({ type: "ACCESSIBILITY_SET_ZOOM", zoom: e }) } function E() { i.default.dispatch({ type: "ACCESSIBILITY_KEYBOARD_MODE_ENABLE" }), s.default.track(o.AnalyticEvents.KEYBOARD_MODE_TOGGLED, { enabled: !0 }) } function I() { i.default.dispatch({ type: "ACCESSIBILITY_KEYBOARD_MODE_DISABLE" }), s.default.track(o.AnalyticEvents.KEYBOARD_MODE_TOGGLED, { enabled: !1 }) } function T() { i.default.dispatch({ type: "ACCESSIBILITY_DESATURATE_ROLES_TOGGLE" }) } function f() { i.default.dispatch({ type: "ACCESSIBILITY_DARK_SIDEBAR_TOGGLE" }) } function S() { i.default.dispatch({ type: "KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN" }) } function h(e) { i.default.dispatch({ type: "ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED", systemPrefersReducedMotion: e }) } function A(e) { i.default.dispatch({ type: "ACCESSIBILITY_SET_SATURATION", saturation: e }) } function m(e) { let t = a.default.useReducedMotion; i.default.dispatch({ type: "ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION", prefersReducedMotion: e }); let n = a.default.useReducedMotion; !t && n ? r.default.applySettingsOverride({ gifAutoPlay: { value: !1, reasonKey: l.SettingsOverrideReasonKeys.REDUCED_MOTION }, animateEmoji: { value: !1, reasonKey: l.SettingsOverrideReasonKeys.REDUCED_MOTION }, animateStickers: { value: u.StickerAnimationSettings.ANIMATE_ON_INTERACTION, reasonKey: l.SettingsOverrideReasonKeys.REDUCED_MOTION_STICKERS } }) : t && !n && r.default.clearSettingsOverride("gifAutoPlay", "animateEmoji", "animateStickers") } function N(e) { i.default.dispatch({ type: "ACCESSIBILITY_SET_SYNC_FORCED_COLORS", syncForcedColors: e }) } function p(e, t) { i.default.dispatch({ type: "ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED", systemPrefersColorScheme: e, systemForcedColors: t }) } function O(e) { i.default.dispatch({ type: "ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED", systemPrefersContrast: e }) } function C(e) { i.default.dispatch({ type: "ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS", alwaysShowLinkDecorations: e }) } function R(e) { i.default.dispatch({ type: "ACCESSIBILITY_SET_ROLE_STYLE", roleStyle: e }), s.default.track(o.AnalyticEvents.ROLE_STYLE_SETTING_UPDATED, { role_style: e }) } function g() { i.default.dispatch({ type: "ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE" }) } function L() { i.default.dispatch({ type: "ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE" }) } function v(e) { i.default.dispatch({ type: "ACCESSIBILITY_SET_HIDE_TAGS", hideTags: e }) } }, 94752: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { AccessibilityFeatureFlags: function() { return i } }), (r = i || (i = {}))[r.NONE = 0] = "NONE", r[r.SCREENREADER = 1] = "SCREENREADER", r[r.REDUCED_MOTION = 2] = "REDUCED_MOTION", r[r.REDUCED_MOTION_PREFERS_CROSSFADES = 4194304] = "REDUCED_MOTION_PREFERS_CROSSFADES", r[r.REDUCED_TRANSPARENCY = 4] = "REDUCED_TRANSPARENCY", r[r.HIGH_CONTRAST = 8] = "HIGH_CONTRAST", r[r.BOLD_TEXT = 16] = "BOLD_TEXT", r[r.GRAYSCALE = 32] = "GRAYSCALE", r[r.INVERT_COLORS = 64] = "INVERT_COLORS", r[r.PREFERS_COLOR_SCHEME_LIGHT = 128] = "PREFERS_COLOR_SCHEME_LIGHT", r[r.PREFERS_COLOR_SCHEME_DARK = 256] = "PREFERS_COLOR_SCHEME_DARK", r[r.CHAT_FONT_SCALE_INCREASED = 512] = "CHAT_FONT_SCALE_INCREASED", r[r.CHAT_FONT_SCALE_DECREASED = 1024] = "CHAT_FONT_SCALE_DECREASED", r[r.ZOOM_LEVEL_INCREASED = 2048] = "ZOOM_LEVEL_INCREASED", r[r.ZOOM_LEVEL_DECREASED = 4096] = "ZOOM_LEVEL_DECREASED", r[r.MESSAGE_GROUP_SPACING_INCREASED = 8192] = "MESSAGE_GROUP_SPACING_INCREASED", r[r.MESSAGE_GROUP_SPACING_DECREASED = 16384] = "MESSAGE_GROUP_SPACING_DECREASED", r[r.DARK_SIDEBAR = 32768] = "DARK_SIDEBAR", r[r.REDUCED_MOTION_FROM_USER_SETTINGS = 65536] = "REDUCED_MOTION_FROM_USER_SETTINGS", r[r.SATURATION_LEVEL_DECREASED = 131072] = "SATURATION_LEVEL_DECREASED", r[r.FORCED_COLORS = 262144] = "FORCED_COLORS", r[r.FORCED_COLORS_FROM_USER_SETTINGS = 524288] = "FORCED_COLORS_FROM_USER_SETTINGS", r[r.ROLE_STYLE_ADJUSTED = 1048576] = "ROLE_STYLE_ADJUSTED", r[r.SYNC_PROFILE_THEME_WITH_USER_THEME = 2097152] = "SYNC_PROFILE_THEME_WITH_USER_THEME", r[r.CONTRAST_LEVEL_INCREASED = 8388608] = "CONTRAST_LEVEL_INCREASED", r[r.CONTRAST_LEVEL_DECREASED = 16777216] = "CONTRAST_LEVEL_DECREASED" }, 607070: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("433517"), a = n("780384"), o = n("570140"), l = n("695346"), u = n("581883"), d = n("12647"), _ = n("981631"), c = n("959517"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = { fontSize: _.Accessibility.FONT_SIZE_DEFAULT, zoom: _.Accessibility.ZOOM_DEFAULT, keyboardModeEnabled: !1, colorblindMode: !1, lowContrastMode: !1, saturation: 1, contrast: 1, desaturateUserColors: !1, forcedColorsModalSeen: !1, keyboardNavigationExplainerModalSeen: !1, messageGroupSpacing: null, systemPrefersReducedMotion: "no-preference", systemPrefersCrossfades: !1, prefersReducedMotion: "auto", systemForcedColors: "none", syncForcedColors: !0, systemPrefersContrast: "no-preference", alwaysShowLinkDecorations: !1, roleStyle: "username", submitButtonEnabled: !1, syncProfileThemeWithUserTheme: !1, hideGuildTags: !1 }, T = I, f = { 12: "font-size-12", 14: "font-size-14", 15: "font-size-15", 16: "font-size-16", 18: "font-size-18", 20: "font-size-20", 24: "font-size-24" }; class S extends(i = r.default.DeviceSettingsStore) { initialize(e) { this.waitFor(u.default), isNaN((T = { ...I, ...null != e ? e : null }).fontSize) && (T.fontSize = _.Accessibility.FONT_SIZE_DEFAULT), 0 > c.MESSAGE_GROUP_SPACING.indexOf(null != T.messageGroupSpacing ? T.messageGroupSpacing : -1) && (T.messageGroupSpacing = null) } get fontScale() { return T.fontSize / _.Accessibility.FONT_SIZE_DEFAULT * 100 } get fontSize() { return T.fontSize } get isFontScaledUp() { return T.fontSize > _.Accessibility.FONT_SIZE_DEFAULT } get isFontScaledDown() { return T.fontSize < _.Accessibility.FONT_SIZE_DEFAULT } get fontScaleClass() { var e; let t = null !== (e = f[this.fontSize]) && void 0 !== e ? e : ""; return this.isFontScaledUp ? "a11y-font-scaled-up ".concat(t) : this.isFontScaledDown ? "a11y-font-scaled-down ".concat(t) : "".concat(t) } get zoom() { return T.zoom } get isZoomedIn() { return T.zoom > _.Accessibility.ZOOM_DEFAULT } get isZoomedOut() { return T.zoom < _.Accessibility.ZOOM_DEFAULT } get keyboardModeEnabled() { return T.keyboardModeEnabled } get colorblindMode() { return T.colorblindMode } get lowContrastMode() { return T.lowContrastMode } get saturation() { return T.saturation } get contrast() { return T.contrast } get desaturateUserColors() { return T.desaturateUserColors } get forcedColorsModalSeen() { return T.forcedColorsModalSeen } get keyboardNavigationExplainerModalSeen() { return T.keyboardNavigationExplainerModalSeen } get messageGroupSpacing() { return null != T.messageGroupSpacing ? T.messageGroupSpacing : l.MessageDisplayCompact.getSetting() ? c.DEFAULT_COMPACT_SPACING : c.DEFAULT_COZY_SPACING } get isMessageGroupSpacingIncreased() { let e = l.MessageDisplayCompact.getSetting() ? c.DEFAULT_COMPACT_SPACING : c.DEFAULT_COZY_SPACING; return this.messageGroupSpacing > e } get isMessageGroupSpacingDecreased() { let e = l.MessageDisplayCompact.getSetting() ? c.DEFAULT_COMPACT_SPACING : c.DEFAULT_COZY_SPACING; return this.messageGroupSpacing < e } get isSubmitButtonEnabled() { return T.submitButtonEnabled } get syncProfileThemeWithUserTheme() { return T.syncProfileThemeWithUserTheme } get systemPrefersReducedMotion() { return T.systemPrefersReducedMotion } get rawPrefersReducedMotion() { return T.prefersReducedMotion } get useReducedMotion() { switch (T.prefersReducedMotion) { case "no-preference": return !1; case "reduce": return !0; default: return "reduce" === T.systemPrefersReducedMotion } } get systemForcedColors() { return T.systemForcedColors } get syncForcedColors() { return T.syncForcedColors } get useForcedColors() { return !!T.syncForcedColors && "active" === T.systemForcedColors || !1 } get systemPrefersContrast() { return T.systemPrefersContrast } get systemPrefersCrossfades() { return T.systemPrefersCrossfades } get alwaysShowLinkDecorations() { return T.alwaysShowLinkDecorations } get roleStyle() { return T.roleStyle } get hideTags() { return T.hideGuildTags } getUserAgnosticState() { return T } } E(S, "displayName", "AccessibilityStore"), E(S, "persistKey", "AccessibilityStore"), E(S, "migrations", [() => { let e = { FONT_SCALE: "a11yFontScale", ZOOM: "a11yZoom", COLORBLIND_MODE: "a11yColorblindMode" }, t = s.Storage.get(e.FONT_SCALE) || 100, n = s.Storage.get(e.ZOOM) || _.Accessibility.ZOOM_DEFAULT, i = s.Storage.get(e.COLORBLIND_MODE) || !1; return s.Storage.remove(e.FONT_SCALE), s.Storage.remove(e.ZOOM), s.Storage.remove(e.COLORBLIND_MODE), { fontScale: t, zoom: n, colorblindMode: i, keyboardModeEnabled: !1 } }, e => { let { fontScale: t, ...n } = e, i = 16; switch (t) { case 82: i = 12; break; case 92: i = 15; break; case 100: i = 16; break; case 110: i = 18; break; case 125: i = 20; break; case 150: i = 24 } return { ...n, fontSize: i } }, e => ({ ...e, darkSidebar: !1 }), e => ({ ...e, messageGroupSpacing: null }), e => ({ ...e, systemPrefersReducedMotion: "no-preference", prefersReducedMotion: "auto" }), e => ({ ...e, alwaysShowLinkDecorations: e.saturation <= a.LOW_SATURATION_THRESHOLD }), e => ({ ...e, disableVoiceBackgrounds: !1 }), e => { try { delete e.disableVoiceBackgrounds } catch (e) {} return e }]); let h = new S(o.default, { ACCESSIBILITY_SET_FONT_SIZE: function(e) { var t; let n = (t = e.fontSize, _.Accessibility.FONT_SIZES.indexOf(t) >= 0 ? t : _.Accessibility.FONT_SIZE_DEFAULT); if (n > _.Accessibility.FONT_SIZE_MAX || n < _.Accessibility.FONT_SIZE_MIN || T.fontSize === n) return !1; (T = { ...T }).fontSize = n }, ACCESSIBILITY_SET_ZOOM: function(e) { if (e.zoom < _.Accessibility.ZOOM_MIN || e.zoom > _.Accessibility.ZOOM_MAX || T.zoom === e.zoom) return !1; (T = { ...T }).zoom = e.zoom, d.default.setZoomFactor(T.zoom) }, ACCESSIBILITY_RESET_TO_DEFAULT: function() { let e = T.fontSize !== _.Accessibility.FONT_SIZE_DEFAULT, t = T.zoom !== _.Accessibility.ZOOM_DEFAULT; if (!e && !t) return !1; (T = { ...T }).fontSize !== _.Accessibility.FONT_SIZE_DEFAULT && (T.fontSize = _.Accessibility.FONT_SIZE_DEFAULT), T.zoom !== _.Accessibility.ZOOM_DEFAULT && (T.zoom = _.Accessibility.ZOOM_DEFAULT, d.default.setZoomFactor(T.zoom)) }, ACCESSIBILITY_KEYBOARD_MODE_ENABLE: function() { if (T.keyboardModeEnabled) return !1; (T = { ...T }).keyboardModeEnabled = !0 }, ACCESSIBILITY_KEYBOARD_MODE_DISABLE: function() { if (!T.keyboardModeEnabled) return !1; (T = { ...T }).keyboardModeEnabled = !1 }, ACCESSIBILITY_COLORBLIND_TOGGLE: function() { (T = { ...T }).colorblindMode = !T.colorblindMode }, ACCESSIBILITY_LOW_CONTRAST_TOGGLE: function() { (T = { ...T }).lowContrastMode = !T.lowContrastMode }, ACCESSIBILITY_SET_SATURATION: function(e) { (T = { ...T }).saturation = e.saturation }, ACCESSIBILITY_DESATURATE_ROLES_TOGGLE: function() { (T = { ...T }).desaturateUserColors = !T.desaturateUserColors }, ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED: function(e) { var t; return T = { ...T, systemForcedColors: null !== (t = e.systemForcedColors) && void 0 !== t ? t : "none" }, !0 }, ACCESSIBILITY_SYSTEM_PREFERS_CONTRAST_CHANGED: function(e) { if (T.systemPrefersContrast === e.systemPrefersContrast) return !1; T = { ...T, systemPrefersContrast: e.systemPrefersContrast } }, ACCESSIBILITY_SYSTEM_PREFERS_REDUCED_MOTION_CHANGED: function(e) { if (T.systemPrefersReducedMotion === e.systemPrefersReducedMotion) return !1; T = { ...T, systemPrefersReducedMotion: e.systemPrefersReducedMotion } }, ACCESSIBILITY_SYSTEM_PREFERS_CROSSFADES_CHANGED: function(e) { if (T.systemPrefersCrossfades === e.systemPrefersCrossfades) return !1; T = { ...T, systemPrefersCrossfades: e.systemPrefersCrossfades } }, ACCESSIBILITY_SET_PREFERS_REDUCED_MOTION: function(e) { if (T.prefersReducedMotion === e.prefersReducedMotion) return !1; T = { ...T, prefersReducedMotion: e.prefersReducedMotion } }, ACCESSIBILITY_SET_SYNC_FORCED_COLORS: function(e) { T.syncForcedColors = e.syncForcedColors }, ACCESSIBILITY_SET_ALWAYS_SHOW_LINK_DECORATIONS: function(e) { T = { ...T, alwaysShowLinkDecorations: e.alwaysShowLinkDecorations } }, ACCESSIBILITY_SET_ROLE_STYLE: function(e) { T.roleStyle = e.roleStyle }, ACCESSIBILITY_FORCED_COLORS_MODAL_SEEN: function() { T.forcedColorsModalSeen = !0 }, KEYBOARD_NAVIGATION_EXPLAINER_MODAL_SEEN: function() { T = { ...T, keyboardNavigationExplainerModalSeen: !0 } }, ACCESSIBILITY_SET_MESSAGE_GROUP_SPACING: function(e) { let { messageGroupSpacing: t } = e; T = { ...T, messageGroupSpacing: t } }, ACCESSIBILITY_SUBMIT_BUTTON_TOGGLE: function() { (T = { ...T }).submitButtonEnabled = !T.submitButtonEnabled }, ACCESSIBILITY_SYNC_PROFILE_THEME_WITH_USER_THEME_TOGGLE: function() { (T = { ...T }).syncProfileThemeWithUserTheme = !T.syncProfileThemeWithUserTheme }, ACCESSIBILITY_SET_CONTRAST: function(e) { let { contrast: t } = e; T = { ...T, contrast: t } }, ACCESSIBILITY_SET_HIDE_TAGS: function(e) { let { hideTags: t } = e; T = { ...T, hideGuildTags: t } } }); t.default = h }, 446108: function(e, t, n) { "use strict"; n.r(t), n.d(t, { IMAGE_OPEN_DIALOG_DESCRIPTION: function() { return l }, MESSAGE_NICKNAME_PAUSE_LABEL_SEGMENT_ID: function() { return s }, MESSAGE_PRE_TIMESTAMP_PAUSE_LABEL_SEGMENT_ID: function() { return a }, MESSAGE_REACTIONS_LABEL_SEGMENT_ID: function() { return o }, insertAccessibilityLabelElements: function() { return u } }); var i = n("153124"), r = n("689938"); let s = (0, i.uid)(), a = (0, i.uid)(), o = (0, i.uid)(), l = (0, i.uid)(); function u() { [{ id: s, text: "," }, { id: a, text: "," }, { id: o, text: r.default.Messages.REACTIONS }, { id: l, text: r.default.Messages.OPEN_ORIGIANL_IMAGE_BUTTON_A11Y_DESCRIPTION }].forEach(e => { let { id: t, text: n } = e, i = document.getElementById(t); null == i && ((i = document.createElement("div")).setAttribute("id", t), i.innerText = n, i.style.display = "none", document.body.appendChild(i)) }) } }, 627845: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canEnableForcedColors: function() { return A } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("570140"), a = n("594174"), o = n("626135"), l = n("358085"), u = n("857595"), d = n("607070"), _ = n("981631"); let c = window.matchMedia("(prefers-reduced-motion: reduce)"), E = window.matchMedia("(prefers-contrast: more)"), I = window.matchMedia("(prefers-contrast: less)"), T = window.matchMedia("(prefers-color-scheme: dark)"), f = window.matchMedia("(prefers-color-scheme: light)"), S = window.matchMedia("(forced-colors: active)"), h = 5; function A() { return "windows" === (0, l.getOS)() } t.default = { initBasic() { c.addListener(this.handleSystemPrefersReducedMotionChanged), this.handleSystemPrefersReducedMotionChanged(c), T.addListener(this.handleSystemColorPreferencesChanged), f.addListener(this.handleSystemColorPreferencesChanged), S.addListener(this.handleSystemColorPreferencesChanged), this.handleSystemColorPreferencesChanged(), E.addListener(this.handleSystemPrefersContrastChanged), I.addListener(this.handleSystemPrefersContrastChanged), this.handleSystemPrefersContrastChanged() }, init() { this.initBasic(), s.default.subscribe("ACCESSIBILITY_COLORBLIND_TOGGLE", () => { o.default.track(_.AnalyticEvents.LOCAL_SETTINGS_UPDATED, { colorblind_enabled: d.default.colorblindMode }) }), s.default.subscribe("ACCESSIBILITY_SET_SATURATION", e => { o.default.track(_.AnalyticEvents.LOCAL_SETTINGS_UPDATED, { saturation_level: e.saturation }) }) }, maybeShowKeyboardNavigationExplainerModal() { h = Math.max(h - 1, 0), ! function() { let e = a.default.getCurrentUser(); return null == e || Date.now() - +e.createdAt < 864e5 }() && !d.default.keyboardNavigationExplainerModalSeen && 0 === h && (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("6380"), n.e("73872")]).then(n.bind(n, "461964")); return t => (0, i.jsx)(e, { ...t }) }) }, handleSystemPrefersReducedMotionChanged(e) { s.default.wait(() => { u.systemPrefersReducedMotionChanged(e.matches ? "reduce" : "no-preference") }) }, handleSystemColorPreferencesChanged() { let e; T.matches ? e = _.ThemeTypes.DARK : f.matches && (e = _.ThemeTypes.LIGHT); let t = (!l.isPlatformEmbedded || A()) && S.matches ? "active" : "none"; s.default.wait(() => { u.systemColorPreferencesChanged(e, t) }) }, handleSystemPrefersContrastChanged() { let e = "no-preference"; E.matches ? e = "more" : I.matches && (e = "less"), s.default.wait(() => { u.systemPrefersContrastChanged(e) }) } } }, 545006: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("374470"), a = n("442837"), o = n("481060"), l = n("626135"), u = n("5967"), d = n("607070"), _ = n("446108"), c = n("981631"); function E(e) { var t; if (e.ctrlKey || e.altKey || e.metaKey || e.keyCode !== c.KeyboardKeys.TAB || null == e.target) return; let { target: n } = e, i = null === (t = (0, u.eventOwnerDocument)(e)) || void 0 === t ? void 0 : t.activeElement; (0, s.isElement)(n) && l.default.track(c.AnalyticEvents.KEYBOARD_SHORTCUT_USED, { shortcut_name: "tab_navigation", source_class_list: null != i ? Array.from(i.classList) : [], location_object: n.tagName }) } function I(e) { let { children: t } = e, n = (0, a.useStateFromStoresObject)([d.default], () => ({ enabled: d.default.useReducedMotion, rawValue: d.default.rawPrefersReducedMotion })), s = (0, a.useStateFromStoresObject)([d.default], () => ({ enabled: d.default.useForcedColors, rawValue: d.default.systemForcedColors })), l = (0, a.useStateFromStores)([d.default], () => d.default.alwaysShowLinkDecorations), u = r.useMemo(() => ({ reducedMotion: n, prefersCrossfades: !1, forcedColors: s, alwaysShowLinkDecorations: l }), [n, s, l]); return r.useEffect(() => ((0, _.insertAccessibilityLabelElements)(), window.addEventListener("keydown", E), () => window.removeEventListener("keydown", E)), []), (0, i.jsx)(o.AccessibilityPreferencesContext.Provider, { value: u, children: t }) } }, 675896: function(e, t, n) { "use strict"; n.r(t); var i = n("210887"), r = n("626135"), s = n("607070"), a = n("94752"); let o = a.AccessibilityFeatureFlags.NONE, l = window.matchMedia("(prefers-color-scheme: dark)"), u = window.matchMedia("(prefers-color-scheme: light)"), d = window.matchMedia("(inverted-colors: inverted)"), _ = window.matchMedia("(prefers-contrast: more)"), c = window.matchMedia("(forced-colors: active)"); function E(e, t) { t ? o |= e : o &= ~e } t.default = { init() { s.default.addChangeListener(this.handleAccessibilityStoreChanged), i.default.addChangeListener(this.handleAccessibilityStoreChanged), l.addListener(this.handlePrefersColorSchemeDarkChanged), this.handlePrefersColorSchemeDarkChanged(l), u.addListener(this.handlePrefersColorSchemeLightChanged), this.handlePrefersColorSchemeLightChanged(u), _.addListener(this.handlePrefersMoreContrastChanged), this.handlePrefersMoreContrastChanged(_), c.addListener(this.handlePrefersForcedColorsChanged), this.handlePrefersForcedColorsChanged(c), d.addListener(this.handleInvertColorsChanged), this.handleInvertColorsChanged(d), r.default.setSystemAccessibilityFeatures(this.getActiveFeatures) }, getActiveFeatures: () => o, handlePrefersColorSchemeDarkChanged(e) { E(a.AccessibilityFeatureFlags.PREFERS_COLOR_SCHEME_DARK, e.matches) }, handlePrefersColorSchemeLightChanged(e) { E(a.AccessibilityFeatureFlags.PREFERS_COLOR_SCHEME_LIGHT, e.matches) }, handlePrefersMoreContrastChanged(e) { E(a.AccessibilityFeatureFlags.HIGH_CONTRAST, e.matches) }, handlePrefersForcedColorsChanged(e) { E(a.AccessibilityFeatureFlags.FORCED_COLORS, e.matches) }, handleInvertColorsChanged(e) { E(a.AccessibilityFeatureFlags.INVERT_COLORS, e.matches) }, handleAccessibilityStoreChanged() { E(a.AccessibilityFeatureFlags.REDUCED_MOTION, s.default.useReducedMotion), E(a.AccessibilityFeatureFlags.REDUCED_MOTION_FROM_USER_SETTINGS, "auto" !== s.default.rawPrefersReducedMotion), E(a.AccessibilityFeatureFlags.FORCED_COLORS_FROM_USER_SETTINGS, s.default.syncForcedColors), E(a.AccessibilityFeatureFlags.CHAT_FONT_SCALE_DECREASED, s.default.isFontScaledDown), E(a.AccessibilityFeatureFlags.CHAT_FONT_SCALE_INCREASED, s.default.isFontScaledUp), E(a.AccessibilityFeatureFlags.ZOOM_LEVEL_DECREASED, s.default.isZoomedOut), E(a.AccessibilityFeatureFlags.ZOOM_LEVEL_INCREASED, s.default.isZoomedIn), E(a.AccessibilityFeatureFlags.MESSAGE_GROUP_SPACING_DECREASED, s.default.isMessageGroupSpacingDecreased), E(a.AccessibilityFeatureFlags.MESSAGE_GROUP_SPACING_INCREASED, s.default.isMessageGroupSpacingIncreased), E(a.AccessibilityFeatureFlags.DARK_SIDEBAR, i.default.darkSidebar), E(a.AccessibilityFeatureFlags.SATURATION_LEVEL_DECREASED, s.default.saturation < 1), E(a.AccessibilityFeatureFlags.ROLE_STYLE_ADJUSTED, "username" !== s.default.roleStyle), E(a.AccessibilityFeatureFlags.SYNC_PROFILE_THEME_WITH_USER_THEME, s.default.syncProfileThemeWithUserTheme) } } }, 209613: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("924826"), r = n("442837"), s = n("607070"); function a() { return Promise.resolve() } function o(e) { let t = document.querySelector(e); null != t && t.focus() } function l(e, t) { let n = (0, r.useStateFromStores)([s.default], () => s.default.keyboardModeEnabled); return (0, i.default)({ id: e, isEnabled: n, orientation: t, setFocus: o, scrollToStart: a, scrollToEnd: a }) } }, 465029: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchActiveChannels: function() { return o } }); var i = n("544891"), r = n("570140"), s = n("479531"), a = n("981631"); async function o(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 10; r.default.dispatch({ type: "ACTIVE_CHANNELS_FETCH_START", guildId: e }); try { var n, o; let s = await i.HTTP.get({ url: a.Endpoints.ACTIVE_CHANNELS(e), query: { channel_limit: t } }), l = null !== (o = null === (n = s.body) || void 0 === n ? void 0 : n.channels) && void 0 !== o ? o : []; return r.default.dispatch({ type: "ACTIVE_CHANNELS_FETCH_SUCCESS", guildId: e, channels: l }), s } catch (t) { throw r.default.dispatch({ type: "ACTIVE_CHANNELS_FETCH_FAILURE", guildId: e, error: new s.default(t) }), t } } }, 139143: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldMountActivityIFrameFromGatewayUpdateWithoutSessionIdCheck: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-02_activityiframemountfromgatewayupdate", label: "mount activity iframe in response to gateway update", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "enabled", config: { enabled: !0 } }] }); function r(e) { return i.getCurrentConfig({ location: e }).enabled } }, 867176: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isActivitiesInTextEnabled: function() { return c }, isActivityInTextSupportedForChannel: function() { return _ }, useIsActivitiesInTextEnabled: function() { return E }, useIsActivitiesInTextShelfPosterEnabled: function() { return T }, useShowActivitiesInOmniButtonMenu: function() { return I } }); var i = n("106351"), r = n("442837"), s = n("818083"), a = n("592125"), o = n("496675"), l = n("944486"), u = n("231338"); let d = (0, s.createExperiment)({ kind: "user", id: "2023-08_activities_in_text", label: "Activities in Text User", defaultConfig: { entryPointEnabled: !1, activitiesInTextEnabled: !1, showInOmniButtonMenu: !1, showNewMobileLeaveUI: !1 }, treatments: [{ id: 1, label: "Enable Activities in Text, DM, and GDM channels", config: { entryPointEnabled: !0, activitiesInTextEnabled: !0, showInOmniButtonMenu: !0, showNewMobileLeaveUI: !1 } }, { id: 2, label: "Enable Activities in Text, DM, and GDM channels with new mobile leave UI", config: { entryPointEnabled: !0, activitiesInTextEnabled: !0, showInOmniButtonMenu: !0, showNewMobileLeaveUI: !0 } }] }); function _(e) { var t; if (null == e || void 0 === e) return !1; let n = a.default.getChannel(e.parent_id); if (null != n && (null == n ? void 0 : n.type) !== i.ChannelTypes.GUILD_CATEGORY) return !1; return t = e.type, [i.ChannelTypes.GUILD_TEXT, i.ChannelTypes.GROUP_DM, i.ChannelTypes.DM].includes(t) } function c(e, t, n) { if (null == e) return !1; let i = _(e), r = o.default.can(u.Permissions.USE_EMBEDDED_ACTIVITIES, e), s = r && o.default.can(u.Permissions.SEND_MESSAGES | u.Permissions.USE_APPLICATION_COMMANDS, e); if ((null == e ? void 0 : e.guild_id) != null) return t ? s && i : r && i; return t ? d.getCurrentConfig({ location: n }, { autoTrackExposure: !0 }).activitiesInTextEnabled && i : i } function E(e, t, n) { let { isActivitiesInTextEnabledForChannelType: i, channelGuildId: s, hasPermission: l } = (0, r.useStateFromStoresObject)([a.default, o.default], () => { let n = a.default.getChannel(e), i = o.default.can(u.Permissions.USE_EMBEDDED_ACTIVITIES, n), r = i && o.default.can(u.Permissions.SEND_MESSAGES | u.Permissions.USE_APPLICATION_COMMANDS, n); return { isActivitiesInTextEnabledForChannelType: _(n), channelGuildId: null == n ? void 0 : n.guild_id, hasPermission: t ? r : i } }), c = null != s, E = d.useExperiment({ location: n }, { autoTrackExposure: !c, disable: c }); return c ? l && i : t ? E.activitiesInTextEnabled && i : i } function I(e, t) { let n = (0, r.useStateFromStores)([a.default], () => a.default.getChannel(e)), i = (0, r.useStateFromStores)([o.default], () => o.default.can(u.Permissions.USE_EMBEDDED_ACTIVITIES, n)), s = _(n), l = null == n ? void 0 : n.guild_id, c = null != l, E = d.useExperiment({ location: t }, { autoTrackExposure: !c, disable: c }); return c ? i && s : E.showInOmniButtonMenu && s } function T(e, t) { let { hasGuildId: n, isGuildVoiceChannel: s, isInPrivateVoiceCall: o } = (0, r.useStateFromStoresObject)([a.default, l.default], () => { let t = a.default.getChannel(e), n = (null == t ? void 0 : t.guild_id) !== void 0 && (null == t ? void 0 : t.guild_id) !== null, r = (null == t ? void 0 : t.type) === i.ChannelTypes.GUILD_VOICE; return { hasGuildId: n, isGuildVoiceChannel: r, isInPrivateVoiceCall: (null == t ? void 0 : t.isPrivate()) && l.default.getVoiceChannelId() === e } }), u = d.useExperiment({ location: t }, { autoTrackExposure: !n, disable: n }), _ = o && u.activitiesInTextEnabled; return s || _ } }, 24933: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o() { return { usageByApplicationId: {}, shelfOrder: [] } } let l = o(); class u extends(i = r.default.PersistedStore) { initialize(e) { l = { ...o(), ...null != e ? e : {} } } getState() { return l } } a(u, "displayName", "ActivityShelfStore"), a(u, "persistKey", "ActivityShelfStore"), t.default = new u(s.default, { LOGOUT: function() { l = o() } }) }, 701488: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ACTIVITY_INVITE_COVER_IMAGE_SIZE: function() { return R }, ACTIVITY_SHELF_WEB_MODAL_KEY: function() { return et }, AM_HARMONY_PRD_APPLICATION_ID: function() { return X }, AM_HARMONY_STG_APPLICATION_ID: function() { return Z }, APPLICATIONS_WITH_ALLOWED_POPUPS: function() { return en }, APPLICATIONS_WITH_NO_REFFERER: function() { return ei }, ActivityFeedbackReasons: function() { return i }, ActivityIntent: function() { return r }, ActivityLayoutMode: function() { return c }, ActivityPlatform: function() { return s }, ActivityScreenOrientation: function() { return _ }, ActivityShelfSlides: function() { return u }, BLAZIN_8S_APPLICATION_ID: function() { return F }, BOBBLE_LEAGUE_APPLICATION_ID: function() { return B }, BYS_LETTER_APP_ID: function() { return Y }, BYS_TWOODLE_APP_ID: function() { return j }, CHECKERS_IN_THE_PARK_APP_ID: function() { return V }, CHEF_SHOWDOWN_APPLICATION_ID: function() { return W }, CHESS_IN_THE_PARK_APP_ID: function() { return x }, COLOR_TOGETHER_APPLICATION_ID: function() { return U }, DEATH_BY_AI_APPLICATION_ID: function() { return Q }, DEFAULT_EMBEDDED_ACTIVITY_CONFIG: function() { return es }, EMBEDDED_ACTIVITY_SURVEY_URL: function() { return J }, END_GAME_APPLICATION_ID: function() { return v }, EmbeddedActivityUpdateCodes: function() { return o }, GARTIC_PHONE_APPLICATION_ID: function() { return P }, ImageSizes: function() { return $ }, JAM_SPACE_APPLICATION_ID: function() { return y }, KRUNKER_STRIKE_APPLICATION_ID: function() { return z }, KWIM_APPLICATION_ID: function() { return k }, LAND_IO_APPLICATION_ID: function() { return G }, OrientationLockState: function() { return l }, POKER_NIGHT_APPLICATION_ID: function() { return H }, PRIVATE_APPS_HELP_ARTICLE: function() { return eo }, PUTT_PARTY_APPLICATION_ID: function() { return K }, SPELL_CAST_APPLICATION_ID: function() { return b }, STAFF_RELEASE_PHASES: function() { return ee }, SUPPORTED_ACTIVITY_IN_TEXT_CHANNEL_TYPES: function() { return ea }, TUNE_IN_APPLICATION_ID: function() { return q }, WATCH_YOUTUBE_PROD_APP_ID: function() { return w }, WhatsNewSection: function() { return d }, XBOX_ACTIVITY_APPLICATION_ID: function() { return L }, validStreamURL: function() { return g } }), n("47120"); var i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p, O = n("911969"), C = n("981631"); let R = 160, g = /^https?:\/\/(?:www\.)?(twitch\.tv\/(.+)|youtube.com\/watch\?v=)/, L = "438122941302046720", v = "773336526917861400", D = "880218832743055411", M = "1050941315912835122", y = "1070087967294631976", P = "1007373802981822582", U = "1039835161136746497", b = "852509694341283871", G = "903769130790969345", w = "880218394199220334", k = "1078728822972764312", B = "947957217959759964", V = "832013003968348200", x = "832012774040141894", F = "832025144389533716", H = "755827207812677713", Y = "879863686565621790", j = "902271654783242291", W = "1037680572660727838", K = "945737671223947305", z = "1011683823555199066", Z = "1234546995360694434", X = "1214629548377768066", Q = "1194351737264406548", q = "1196535986226745437", J = "https://discord.sjc1.qualtrics.com/jfe/form/SV_6SvWAOxlcSRWiEu", $ = { SMALL: 64, LARGE: 160 }, ee = ["in_development", "activities_team", "employee_release"]; (E = i || (i = {})).ADS = "ADS", E.FAILED_LOAD = "FAILED_LOAD", E.LAGGING = "LAGGING", E.CONFUSING = "CONFUSING", E.NOT_FUN = "NOT_FUN", E.OTHER = "OTHER", (I = r || (r = {}))[I.PLAY = 0] = "PLAY", I[I.SPECTATE = 1] = "SPECTATE", (T = s || (s = {})).DESKTOP = "desktop", T.MOBILE = "mobile", (f = a || (a = {})).BETRAYAL_MARKETING_TOOLTIP = "BETRAYAL_MARKETING_TOOLTIP", f.FISHINGTON_MARKETING_TOOLTIP = "FISHINGTON_MARKETING_TOOLTIP", f.POKER_MARKETING_TOOLTIP = "POKER_MARKETING_TOOLTIP", f.YOUTUBE_MARKETING_TOOLTIP = "YOUTUBE_MARKETING_TOOLTIP", (S = o || (o = {}))[S.NO_UPDATE = 0] = "NO_UPDATE", S[S.ACTIVITY_STATE_UPDATE = 1] = "ACTIVITY_STATE_UPDATE", S[S.ACTIVITY_STARTED = 2] = "ACTIVITY_STARTED", S[S.ACTIVITY_ENDED = 3] = "ACTIVITY_ENDED", S[S.USER_JOINED = 4] = "USER_JOINED", S[S.USER_LEFT = 5] = "USER_LEFT", S[S.ACTIVITY_TERMINATED_NO_ELIGIBLE_HOST = 6] = "ACTIVITY_TERMINATED_NO_ELIGIBLE_HOST", (h = l || (l = {}))[h.UNLOCKED = 1] = "UNLOCKED", h[h.PORTRAIT = 2] = "PORTRAIT", h[h.LANDSCAPE = 3] = "LANDSCAPE", (A = u || (u = {}))[A.DIRECTORY = 0] = "DIRECTORY", A[A.SELECT_CHANNEL = 1] = "SELECT_CHANNEL", A[A.DETAIL_PAGE = 2] = "DETAIL_PAGE"; let et = "activity-shelf", en = new Set(["755600276941176913", D, M, w]), ei = new Set([D, M, w]); (m = d || (d = {})).DISCORD_TURNS_8 = "DISCORD_TURNS_8", m.GDM_ACTIVITIES = "GDM_ACTIVITIES", m.PUTT_PARTY = "PUTT_PARTY", m.JAMSPACE_OLD = "JAMSPACE", m.JAMSPACE = "JAMSPACE2", m.POKER = "POKER", m.FREE = "FREE", (N = _ || (_ = {}))[N.PORTRAIT = 0] = "PORTRAIT", N[N.LANDSCAPE = 1] = "LANDSCAPE", (p = c || (c = {}))[p.FOCUSED = 0] = "FOCUSED", p[p.PIP = 1] = "PIP", p[p.GRID = 2] = "GRID"; let er = { label_type: O.EmbeddedActivityLabelTypes.NONE, release_phase: "", label_until: null }, es = { application_id: "", requires_age_gate: !1, default_orientation_lock_state: 1, tablet_default_orientation_lock_state: 1, supported_platforms: [O.EmbeddedActivitySupportedPlatforms.WEB], client_platform_config: { [O.EmbeddedActivitySupportedPlatforms.WEB]: er, [O.EmbeddedActivitySupportedPlatforms.IOS]: er, [O.EmbeddedActivitySupportedPlatforms.ANDROID]: er }, has_csp_exception: !1, displays_advertisements: !1 }, ea = [C.ChannelTypes.GUILD_TEXT, C.ChannelTypes.DM, C.ChannelTypes.GROUP_DM], eo = "https://support-dev.discord.com/hc/en-us/articles/21692628851351-Private-Activity-Safety" }, 337682: function(e, t, n) { "use strict"; n.r(t), n.d(t, { markActivityUsed: function() { return a }, setActivityUrlOverride: function() { return s }, toggleUseActivityUrlOverride: function() { return r }, updateFilter: function() { return o } }); var i = n("570140"); function r() { i.default.dispatch({ type: "DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE" }) } function s(e) { i.default.dispatch({ type: "DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE", activityUrlOverride: e }) } function a(e) { i.default.dispatch({ type: "DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED", applicationId: e, timestamp: new Date().getTime() }) } function o(e) { i.default.dispatch({ type: "DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER", filter: e }) } }, 115130: function(e, t, n) { "use strict"; n.r(t), n("789020"); var i, r = n("442837"), s = n("570140"), a = n("695346"), o = n("630388"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function d() { return { lastUsedObject: {}, useActivityUrlOverride: !1, activityUrlOverride: null, filter: "" } } let _ = d(), c = null, E = []; class I extends(i = r.default.PersistedStore) { initialize(e) { _ = { ...d(), ...null != e ? e : {} } } getState() { return _ } getIsEnabled() { return a.DeveloperMode.getSetting() && E.length > 0 } getLastUsedObject() { return _.lastUsedObject } getUseActivityUrlOverride() { return this.getIsEnabled() && _.useActivityUrlOverride } getActivityUrlOverride() { return this.getIsEnabled() ? _.activityUrlOverride : null } getFetchState() { return c } getFilter() { return this.getIsEnabled() ? _.filter : "" } getDeveloperShelfItems() { return this.getIsEnabled() ? E : [] } inDevModeForApplication(e) { return this.getIsEnabled() && null != E.find(t => t.id === e) } } u(I, "displayName", "DeveloperActivityShelfStore"), u(I, "persistKey", "DeveloperActivityShelfStore"), u(I, "migrations", [e => (delete e.isEnabled, { ...e })]), t.default = new I(s.default, { LOGOUT: function() { _ = d(), c = null, E = [] }, DEVELOPER_ACTIVITY_SHELF_TOGGLE_USE_ACTIVITY_URL_OVERRIDE: function() { _.useActivityUrlOverride = !_.useActivityUrlOverride }, DEVELOPER_ACTIVITY_SHELF_SET_ACTIVITY_URL_OVERRIDE: function(e) { let { activityUrlOverride: t } = e; _.activityUrlOverride = t }, DEVELOPER_ACTIVITY_SHELF_MARK_ACTIVITY_USED: function(e) { let { applicationId: t, timestamp: n } = e; if (null == E.find(e => e.id === t)) return !1; _.lastUsedObject[t] = n }, DEVELOPER_ACTIVITY_SHELF_FETCH_START() { c = "loading" }, DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS: function(e) { let { applications: t } = e; c = "loaded", E = t.filter(e => null != e.flags && (0, o.hasFlag)(e.flags, l.ApplicationFlags.EMBEDDED)) }, DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL: function(e) { let { type: t } = e; c = "errored" }, DEVELOPER_ACTIVITY_SHELF_UPDATE_FILTER: function(e) { let { filter: t } = e; _.filter = t }, USER_SETTINGS_PROTO_UPDATE() {} }) }, 566620: function(e, t, n) { "use strict"; n.r(t), n.d(t, { disconnectEmbeddedActivity: function() { return U }, dismissNewActivityIndicator: function() { return x }, fetchDeveloperApplications: function() { return b }, fetchShelf: function() { return k }, launchEmbeddedActivity: function() { return y }, sendEmbeddedActivityInvite: function() { return B }, sendEmbeddedActivityInviteUser: function() { return V }, startEmbeddedActivity: function() { return M }, stopEmbeddedActivity: function() { return P }, updateActivityPanelMode: function() { return H }, updateFocusedActivityLayout: function() { return Y }, uploadImageAttachment: function() { return G }, validateTestMode: function() { return F } }), n("47120"); var i = n("990547"), r = n("544891"), s = n("570140"), a = n("493683"), o = n("475179"), l = n("447543"), u = n("904245"), d = n("479531"), _ = n("812236"), c = n("812206"), E = n("358221"), I = n("188597"), T = n("973616"), f = n("314897"), S = n("592125"), h = n("944486"), A = n("594174"), m = n("823379"), N = n("573261"), p = n("867176"), O = n("317381"), C = n("844797"), R = n("672181"), g = n("917107"), L = n("981631"), v = n("674563"), D = n("245335"); function M(e, t, n) { let i = f.default.getId(), r = O.default.getSelfEmbeddedActivityForChannel(e), a = O.default.getEmbeddedActivitiesForChannel(e).find(e => e.applicationId === t && e.userIds.has(i)); null != r ? P({ channelId: e, applicationId: r.applicationId, showFeedback: !1 }) : null != a && U(e, t, !0), s.default.dispatch({ type: "EMBEDDED_ACTIVITY_OPEN", channelId: e, applicationId: t, analyticsLocations: n }), (0, g.default)(e) ? (o.default.selectParticipant(e, t), o.default.updateLayout(e, L.ChannelLayouts.NO_CHAT)) : (0, R.default)(e) } async function y(e) { var t, n; let r = S.default.getChannel(e), a = null !== (t = null == r ? void 0 : r.getGuildId()) && void 0 !== t ? t : void 0; if (null == a && !(null !== (n = null == r ? void 0 : r.isPrivate()) && void 0 !== n && n)) return; let o = O.default.getSelfEmbeddedActivityForChannel(e); if (null === o) return; let l = f.default.getSessionId(); try { s.default.dispatch({ type: "EMBEDDED_ACTIVITY_LAUNCH_START", embeddedActivity: o }); let t = O.default.getEmbeddedActivitiesForChannel(e).some(e => e.applicationId === o.applicationId), n = v.INSTALL_LESS_APP_IDS.includes(o.applicationId), u = (null == r ? void 0 : r.isPrivate()) && (0, p.isActivitiesInTextEnabled)(r, !t, "EmbeddedActivitiesActionCreators#launchEmbeddedActivity"); if (!t && ((0, C.isActivityInTextStart)(e, o.applicationId, h.default, S.default) || n || u)) { let t; try { n && (t = await (0, _.default)(e, o.applicationId)) } catch (e) { if (e.message !== _.NO_PRIMARY_APP_COMMAND_ERROR) throw e } await (0, I.executePrimaryEntryPointInteraction)({ applicationId: o.applicationId, channelId: e, guildId: a, command: t }) } else await N.default.post({ url: L.Endpoints.ACTIVITY_CHANNEL_LAUNCH(e, o.applicationId), body: { session_id: l, guild_id: null != a ? a : void 0 }, trackedActionData: { event: i.NetworkActionNames.EMBEDDED_ACTIVITIES_LAUNCH, properties: { guild_id: a, channel_id: e, application_id: o.applicationId, session_id: l } }, retries: 3, oldFormErrors: !0 }); s.default.dispatch({ type: "EMBEDDED_ACTIVITY_LAUNCH_SUCCESS", applicationId: o.applicationId }) } catch (t) { s.default.dispatch({ type: "EMBEDDED_ACTIVITY_LAUNCH_FAIL", guildId: a, applicationId: o.applicationId, error: new d.default(t) }), P({ channelId: e, applicationId: o.applicationId, showFeedback: !1 }) } } function P(e) { var t, n; let { channelId: i, applicationId: r, showFeedback: a = !0 } = e, l = O.default.getSelfEmbeddedActivityForChannel(i); s.default.dispatch({ type: "EMBEDDED_ACTIVITY_CLOSE", channelId: i, applicationId: r, locationId: null == l ? void 0 : null === (t = l.location) || void 0 === t ? void 0 : t.id, instanceId: null == l ? void 0 : l.launchId, showFeedback: a }); let u = E.default.getSelectedParticipantId(i), d = null === (n = A.default.getCurrentUser()) || void 0 === n ? void 0 : n.id; null != O.default.getEmbeddedActivitiesForChannel(i).find(e => e.applicationId === r) && null != d && "" !== d && u === r && o.default.selectParticipant(i, null) } function U(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; s.default.dispatch({ type: "EMBEDDED_ACTIVITY_DISCONNECT", channelId: e, applicationId: t, isRejoiningFromCurrentSession: n }) } async function b() { try { s.default.dispatch({ type: "DEVELOPER_ACTIVITY_SHELF_FETCH_START" }); let e = await r.HTTP.get({ url: L.Endpoints.APPLICATIONS_WITH_ASSETS, query: { with_team_applications: !0 }, oldFormErrors: !0 }), t = e.body.applications.map(e => T.default.createFromServer(e)); s.default.dispatch({ type: "DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS", applications: t, assets: e.body.assets }) } catch (e) { s.default.dispatch({ type: "DEVELOPER_ACTIVITY_SHELF_FETCH_FAIL" }) } } async function G(e, t, n) { try { s.default.dispatch({ type: "UPLOAD_ACTIVITY_IMAGE_ATTACHMENT_START" }); let i = await r.HTTP.post({ url: L.Endpoints.APPLICATION_UPLOAD_ATTACHMENT(e), query: { channel_id: t }, attachments: [{ name: "file", file: n }] }); return s.default.dispatch({ type: "UPLOAD_ACTIVITY_IMAGE_ATTACHMENT_SUCCESS", attachment: i.body.attachment }), i.body.attachment } catch (e) { return s.default.dispatch({ type: "UPLOAD_ACTIVITY_IMAGE_ATTACHMENT_FAIL" }), new d.default(e) } } let w = (e, t, n) => { let { guildId: i } = n; (i === e || null == i && null == e) && t() }; async function k(e) { var t, n, r, a; let { guildId: o, force: l = !1 } = e, u = O.default.getShelfActivities(o), d = u.map(e => c.default.getApplication(e.application_id)).filter(m.isNotNullish); if (!l && !O.default.shouldFetchShelf(o)) { if (null === (t = O.default.getShelfFetchStatus(o)) || void 0 === t ? void 0 : t.isFetching) { let e, t; let n = new Promise(t => { e = w.bind(null, o, t), s.default.subscribe("EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS", e) }), i = new Promise(e => { t = w.bind(null, o, e), s.default.subscribe("EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL", t) }); await Promise.race([n, i]), null != e && (s.default.unsubscribe("EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS", e), e = null), null != t && (s.default.unsubscribe("EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL", t), t = null) } return { activityConfigs: u, applications: d } } try { s.default.dispatch({ type: "EMBEDDED_ACTIVITY_FETCH_SHELF", guildId: o }); let e = void 0 !== o && "" !== o ? { guild_id: o } : void 0, t = await N.default.get({ url: L.Endpoints.ACTIVITY_SHELF, query: e, trackedActionData: { event: i.NetworkActionNames.EMBEDDED_ACTIVITIES_FETCH_SHELF, properties: { guild_id: o } }, retries: 3, oldFormErrors: !0 }), l = null !== (n = t.body.activities) && void 0 !== n ? n : [], u = null !== (r = t.body.applications) && void 0 !== r ? r : [], d = null !== (a = t.body.assets) && void 0 !== a ? a : {}; return s.default.dispatch({ type: "EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS", guildId: o, activities: l, applications: u, assets: d }), u.length > 0 && s.default.dispatch({ type: "APPLICATIONS_FETCH_SUCCESS", applications: u }), { activityConfigs: l, applications: u.map(e => T.default.createFromServer(e)) } } catch (e) { return s.default.dispatch({ type: "EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL", guildId: o }), { activityConfigs: u, applications: d } } } async function B(e) { let { activityChannelId: t, invitedChannelId: n, applicationId: i, location: r } = e, s = await l.default.createInvite(t, { target_type: D.InviteTargetTypes.EMBEDDED_APPLICATION, target_application_id: i }, r); null != S.default.getChannel(n) && u.default.sendInvite(n, s.code, r, null) } async function V(e) { let { channelId: t, applicationId: n, userId: i, location: r } = e, s = await l.default.createInvite(t, { target_type: D.InviteTargetTypes.EMBEDDED_APPLICATION, target_application_id: n }, r); a.default.ensurePrivateChannel(i).then(e => { null != S.default.getChannel(e) && u.default.sendInvite(e, s.code, r, null) }) } function x() { s.default.dispatch({ type: "EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR" }) } async function F(e) { let t = L.Endpoints.ACTIVITY_TEST_MODE(e); try { return await r.HTTP.get({ url: t, oldFormErrors: !0 }), !0 } catch (e) { return !1 } } function H(e) { s.default.dispatch({ type: "EMBEDDED_ACTIVITY_SET_PANEL_MODE", activityPanelMode: e }) } function Y(e) { s.default.dispatch({ type: "EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT", focusedActivityLayout: e }) } }, 287545: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { default: function() { return X }, getActiveAnalyticsSessionIDs: function() { return Z } }), n("653041"), n("47120"); var r = n("512722"), s = n.n(r), a = n("153832"), o = n("544891"), l = n("570140"), u = n("475179"), d = n("317770"), _ = n("728345"), c = n("812206"), E = n("358221"), I = n("42352"), T = n("131704"), f = n("314897"), S = n("592125"), h = n("19780"), A = n("944486"), m = n("594174"), N = n("626135"), p = n("585483"), O = n("358085"), C = n("24933"), R = n("566620"), g = n("317381"), L = n("969345"), v = n("148720"), D = n("146936"), M = n("782769"), y = n("964517"), P = n("761122"), U = n("983695"), b = n("917107"), G = n("701488"), w = n("981631"), k = n("689938"); function B(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let V = {}, x = {}; function F(e) { var t; return { releasePhase: null == e ? void 0 : null === (t = e.activity) || void 0 === t ? void 0 : t.client_platform_config[(0, P.default)((0, O.getOS)())].release_phase } } async function H(e) { let { channelId: t, applicationId: n, analyticsLocations: i } = e, r = S.default.getChannel(t), s = null == r ? void 0 : r.getGuildId(), a = m.default.getCurrentUser(); if (null == r || null == a) return; let o = g.default.getShelfActivities(s), l = C.default.getState().shelfOrder, u = 0 === g.default.getEmbeddedActivitiesForChannel(t).filter(e => e.applicationId === n).length, d = (0, L.default)({ applicationId: n, activityConfigs: o }), _ = 1 + l.findIndex(e => e === n), { releasePhase: c } = F(d), T = await (0, I.default)(); x[n] = e => { var t, s, o; V[n] = e, N.default.track(w.AnalyticEvents.ACTIVITY_SESSION_JOINED, { channel_id: r.id, guild_id: r.getGuildId(), media_session_id: e.mediaSessionIds[0], activity_session_id: e.activitySessionId, application_id: n, location_stack: i, user_premium_tier: a.premiumType, raw_thermal_state: T, n_participants: E.default.getUserParticipantCount(r.id), is_activity_start: u, release_phase: c, activity_premium_tier_requirement: null == d ? void 0 : null === (t = d.activity) || void 0 === t ? void 0 : t.premium_tier_requirement, shelf_rank: null == d ? void 0 : null === (s = d.activity) || void 0 === s ? void 0 : s.shelf_rank, shelf_sorted_rank: _ > 0 ? _ : null, activity_user_session_id: e.activityUserSessionId, channel_type: r.type }), N.default.track(w.AnalyticEvents.ACTIVITY_IFRAME_MOUNT, { location_stack: i, channel_id: r.id, channel_type: r.type, guild_id: r.getGuildId(), application_id: n, instance_id: e.launchId, initial_media_session_id: e.mediaSessionIds[0], activity_user_session_id: e.activityUserSessionId, raw_thermal_state: T, is_activity_start: u, shelf_rank: null == d ? void 0 : null === (o = d.activity) || void 0 === o ? void 0 : o.shelf_rank, shelf_sorted_rank: _ > 0 ? _ : null, activities_infra_version: null == e ? void 0 : e.activities_infra_version }) } } async function Y(e) { var t, n; let { channelId: i, applicationId: r, locationId: s, instanceId: a } = e, l = V[r], u = S.default.getChannel(i), d = g.default.getEmbeddedActivityDurationMs(i, r), _ = m.default.getCurrentUser(), c = null == u ? void 0 : u.getGuildId(), E = f.default.getSessionId(); if (null != s && null != a && null != E && await o.HTTP.post({ url: w.Endpoints.ACTIVITY_LEAVE(r, s, a), body: { session_id: E } }), null == l || null == u || null == _) return; let T = g.default.getShelfActivities(c), h = (0, L.default)({ applicationId: r, activityConfigs: T }), { releasePhase: A } = F(h), p = await (0, I.default)(); N.default.track(w.AnalyticEvents.ACTIVITY_SESSION_LEFT, { channel_id: u.id, guild_id: u.getGuildId(), media_session_id: l.mediaSessionIds[0], activity_session_id: l.activitySessionId, application_id: r, duration_ms: d, user_premium_tier: _.premiumType, raw_thermal_state: p, release_phase: A, activity_premium_tier_requirement: null == h ? void 0 : null === (t = h.activity) || void 0 === t ? void 0 : t.premium_tier_requirement, shelf_rank: null == h ? void 0 : null === (n = h.activity) || void 0 === n ? void 0 : n.shelf_rank, activity_user_session_id: l.activityUserSessionId, channel_type: u.type, media_session_ids: l.mediaSessionIds }), N.default.track(w.AnalyticEvents.ACTIVITY_IFRAME_UNMOUNT, { channel_id: u.id, guild_id: u.getGuildId(), application_id: r, instance_ids: [l.launchId], media_session_ids: l.mediaSessionIds, activity_user_session_id: l.activityUserSessionId, raw_thermal_state: p, duration_ms: d }), delete x[r], delete V[r] } function j(e) { let { channelId: t, embeddedActivity: n, connections: i, updateCode: r } = e, s = f.default.getId(), a = i.find(e => e.user_id === s); K(t, n, n.application_id, n.activity_id, null == a ? void 0 : a.user_id, r === G.EmbeddedActivityUpdateCodes.ACTIVITY_STARTED) } function W(e) { let { location: t, applicationId: n, launchId: i, participants: r } = e, s = f.default.getId(), a = g.default.getEmbeddedActivitiesForChannel(t.channel_id).find(e => e.launchId === i), o = r.find(e => e.user_id === s); null != a && K(t.channel_id, a, n, i, null == o ? void 0 : o.user_id, !1) } function K(e, t, n, i, r, s) { var o, l; let d = g.default.getEmbeddedActivitiesForChannel(e), _ = S.default.getChannel(e); if (s && null !== (l = null == _ ? void 0 : _.isPrivate()) && void 0 !== l && l && d.length <= 1 && null == r && u.default.selectParticipant(e, null), null == r) return; let c = h.default.getMediaSessionId(), E = "activity_id" in t ? (0, y.getActivitySessionIdFromServerData)(t) : (0, y.default)(t), I = null == c && (null == _ ? void 0 : _.isVocal()) === !0 && (null == _ ? void 0 : _.isPrivate()) === !1; null != E && !I && (null === (o = x[n]) || void 0 === o || o.call(x, { activitySessionId: E, activityUserSessionId: (0, a.v4)(), launchId: i, mediaSessionIds: null != c ? [c] : [], activities_infra_version: "location" in t ? 2 : 1 }), delete x[n]) } function z(e) { let { mediaSessionId: t } = e; if (null == t) return; for (let e in V) V[e].mediaSessionIds.push(t); let n = h.default.getChannelId(); if (null != n) { let e = g.default.getSelfEmbeddedActivityForChannel(n), i = null == e ? void 0 : e.applicationId, r = null == e ? void 0 : e.launchId, o = (0, y.default)(e); if (null != i && null != t && null != o && null != r) { let e = V[i], n = x[i]; s()(null == e || null == n, "an active session and awaiting session both exist"), null == n || n({ activitySessionId: o, activityUserSessionId: (0, a.v4)(), launchId: r, mediaSessionIds: [t] }), delete x[i] } } } function Z(e) { return V[e] } class X extends d.default { _initialize() { A.default.addChangeListener(this.handleSelectedChannelUpdate), p.ComponentDispatch.subscribe(w.ComponentActions.RELEASE_ACTIVITY_WEB_VIEW, this.handleActivityWebViewRelease), l.default.subscribe("EMBEDDED_ACTIVITY_LAUNCH_FAIL", this.handleActivityLaunchFail), l.default.subscribe("EMBEDDED_ACTIVITY_OPEN", H), l.default.subscribe("EMBEDDED_ACTIVITY_CLOSE", Y), l.default.subscribe("EMBEDDED_ACTIVITY_UPDATE", j), l.default.subscribe("EMBEDDED_ACTIVITY_UPDATE_V2", W), l.default.subscribe("EMBEDDED_ACTIVITY_DEFERRED_OPEN", this.handleDeferredOpen), l.default.subscribe("RPC_APP_DISCONNECTED", this.handleRPCDisconnect), l.default.subscribe("MEDIA_SESSION_JOINED", z), l.default.subscribe("CALL_DELETE", this.handleCallDelete), l.default.subscribe("RTC_CONNECTION_STATE", this.handleRTCConnectionState) } _terminate() { A.default.removeChangeListener(this.handleSelectedChannelUpdate), p.ComponentDispatch.unsubscribe(w.ComponentActions.RELEASE_ACTIVITY_WEB_VIEW, this.handleActivityWebViewRelease), l.default.unsubscribe("EMBEDDED_ACTIVITY_LAUNCH_FAIL", this.handleActivityLaunchFail), l.default.unsubscribe("EMBEDDED_ACTIVITY_OPEN", H), l.default.unsubscribe("EMBEDDED_ACTIVITY_CLOSE", Y), l.default.unsubscribe("EMBEDDED_ACTIVITY_UPDATE", j), l.default.unsubscribe("EMBEDDED_ACTIVITY_UPDATE_V2", W), l.default.unsubscribe("EMBEDDED_ACTIVITY_DEFERRED_OPEN", this.handleDeferredOpen), l.default.unsubscribe("RPC_APP_DISCONNECTED", this.handleRPCDisconnect), l.default.unsubscribe("MEDIA_SESSION_JOINED", z), l.default.unsubscribe("CALL_DELETE", this.handleCallDelete), l.default.unsubscribe("RTC_CONNECTION_STATE", this.handleRTCConnectionState) } constructor(...e) { super(...e), B(this, "handleSelectedChannelUpdate", () => { let e = A.default.getVoiceChannelId(); for (let { channelId: t, applicationId: n } of g.default.getSelfEmbeddedActivities().values())(0, b.default)(t) && t !== e && this.leaveActivity({ channelId: t, applicationId: n }); if (null != e) { let t = g.default.getEmbeddedActivitiesForChannel(e), n = f.default.getId(); t.forEach(e => { if (e.userIds.has(n)) { let t = g.default.getSelfEmbeddedActivityForChannel(e.channelId); null == t ? (0, R.disconnectEmbeddedActivity)(e.channelId, e.applicationId) : null == i && this.hidePIPEmbed({ channelId: t.channelId, applicationId: t.applicationId }) } }) } i = null != e ? e : void 0 }), B(this, "handleActivityWebViewRelease", () => { this.releaseWebView() }), B(this, "handleActivityLaunchFail", e => { let { error: t, applicationId: n } = e; delete x[n]; let i = k.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_GENERIC; switch (t.code) { case w.AbortCodes.INVALID_ACTIVITY_LAUNCH_NO_ACCESS: i = k.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_ACCESS; break; case w.AbortCodes.INVALID_ACTIVITY_LAUNCH_PREMIUM_TIER: i = k.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_PREMIUM; break; case w.AbortCodes.INVALID_ACTIVITY_LAUNCH_CONCURRENT_ACTIVITIES: i = k.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_CONCURRENT; break; case w.AbortCodes.INVALID_PERMISSIONS: i = k.default.Messages.EMBEDDED_ACTIVITIES_INVALID_PERMISSIONS; break; case w.AbortCodes.INVALID_ACTIVITY_LAUNCH_AFK_CHANNEL: i = k.default.Messages.EMBEDDED_ACTIVITIES_INVALID_CHANNEL; break; case w.AbortCodes.INVALID_ACTIVITY_LAUNCH_AGE_GATED: i = k.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_AGE_GATE; break; case w.AbortCodes.INVALID_ACTIVITY_LAUNCH_DEV_PREVIEW_GUILD_SIZE: i = k.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_GUILD_SIZE } this.showLaunchErrorModal(i) }), B(this, "superHandleRPCDisconnect", e => { let { reason: t, application: n } = e, i = n.id; if (null != i && null != t) { for (let { applicationId: e, channelId: t } of g.default.getSelfEmbeddedActivities().values()) e === i && this.leaveActivity({ channelId: t, applicationId: i }); t.code !== w.RPCCloseCodes.CLOSE_NORMAL && this.showErrorModal(t, i) } }), B(this, "handleCallDelete", e => { let { channelId: t } = e, n = A.default.getVoiceChannelId(); null != n && n === t && this.handleCallEnded(t) }), B(this, "handleRTCConnectionState", e => { if (e.state !== w.RTCConnectionStates.DISCONNECTED) return; let t = e.channelId; this.handleCallEnded(t) }), B(this, "handleCallEnded", e => { let t = g.default.getSelfEmbeddedActivityForChannel(e); null != t && this.leaveActivity({ channelId: e, applicationId: t.applicationId }) }), B(this, "handleDeferredOpen", async e => { var t, n, i; let r; let { channelId: s, applicationId: a, analyticsLocations: o } = e, l = S.default.getChannel(s); if (void 0 === l || T.GUILD_VOCAL_CHANNEL_TYPES.has(null == l ? void 0 : l.type) && A.default.getVoiceChannelId() !== s) return; let u = g.default.getSelfEmbeddedActivityForChannel(s); if ((null == u ? void 0 : u.applicationId) === a) return; let d = await _.default.fetchApplication(a); if (!(0, M.getIsActivitiesEnabledForCurrentPlatform)(l)) { this.showLaunchErrorModal(k.default.Messages.EMBEDDED_ACTIVITIES_NOT_AVAILABLE_ON_OS); return } if (!(0, U.default)(null == d ? void 0 : null === (t = d.embedded_activity_config) || void 0 === t ? void 0 : t.supported_platforms)) { this.showLaunchErrorModal(k.default.Messages.EMBEDDED_ACTIVITIES_APPLICATION_UNSUPPORTED_OS); return } let E = null == u ? void 0 : u.applicationId; null != E && (await _.default.fetchApplication(E), r = c.default.getApplication(E)); let I = null !== (n = null == l ? void 0 : l.getGuildId()) && void 0 !== n ? n : void 0, { activityConfigs: f, applications: h } = await (0, R.fetchShelf)({ guildId: I }), m = (0, L.default)({ applicationId: a, activityConfigs: f, applications: h }); if (null == m) { let e = await (0, R.fetchShelf)({ guildId: I, force: !0 }); m = (0, L.default)({ applicationId: a, activityConfigs: e.activityConfigs, applications: e.applications }) } let N = g.default.getEmbeddedActivitiesForChannel(s).find(e => e.applicationId === a), p = null !== (i = null == N ? void 0 : N.userIds.size) && void 0 !== i ? i : 0; p > 0 ? (0, v.maybeJoinEmbeddedActivity)({ channelId: s, applicationId: a, launchId: null == N ? void 0 : N.launchId, inputApplication: null, analyticsLocations: o, embeddedActivitiesManager: this }) : await (0, D.default)({ targetApplicationId: a, currentEmbeddedApplication: r, channelId: s, guildId: I, embeddedActivitiesManager: this, analyticsLocations: o }) }) } } }, 317381: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { NO_ACTIVITIES: function() { return O } }), n("47120"), n("653041"), n("51350"); var r, s = n("442837"), a = n("570140"), o = n("911969"), l = n("314897"), u = n("592125"), d = n("944486"), _ = n("594174"), c = n("585483"), E = n("358085"), I = n("139143"), T = n("155268"), f = n("613611"), S = n("761122"), h = n("917107"), A = n("918559"), m = n("981631"); function N(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let p = { everLaunchedActivities: new Set, seenNewActivities: {}, seenUpdatedActivities: {}, shouldShowNewActivityIndicator: !1 }, O = [], C = new Map, R = new Map, g = new Map, L = new Map, v = !1, D = new Map, M = new Map, y = new Map, P = new Map, U = new Map, b = new Map, G = new Map; let w = A.ActivityPanelModes.DISCONNECTED, k = A.FocusedActivityLayouts.RESIZABLE; function B(e) { return null != e ? e : "0" } function V(e) { var t, n, i; let { guildId: r, channelId: s, location: a, applicationId: o, launchId: u, compositeInstanceId: d, participants: _, analyticsActivitySessionId: E } = e, S = (0, T.default)(o); if (null == S) return; let h = _.map(e => e.userId), A = l.default.getId(), N = h.some(e => e === A), p = null === (t = _.find(e => e.userId === A)) || void 0 === t ? void 0 : t.sessionId, O = _.some(e => (0, f.isActivityParticipantCurrentUserCurrentSession)(e)), v = null == d, D = C.get(o), M = { analyticsActivitySessionId: null != E ? E : void 0, applicationId: o, channelId: s, guildId: r, location: null != a ? a : void 0, launchId: u, compositeInstanceId: d, url: S, userIds: new Set(h), participants: _ }; N && null != D && C.set(D.applicationId, { ...D, ...M }); null != D && s === D.channelId && o === (null == D ? void 0 : D.applicationId) && (!N && Array.from(D.userIds).some(e => e === A) || !v && !O) ? L.get(s) === o ? L.delete(s) : (C.delete(o), c.ComponentDispatch.dispatch(m.ComponentActions.RELEASE_ACTIVITY_WEB_VIEW)) : N && (null == D || D.applicationId !== o || D.channelId !== s) && (p === l.default.getSessionId() && !v || (0, I.shouldMountActivityIFrameFromGatewayUpdateWithoutSessionIdCheck)("EmbeddedActivitiesStore")) && (F({ channelId: s, applicationId: o, launchId: u, compositeInstanceId: d }), c.ComponentDispatch.dispatch(m.ComponentActions.OPEN_EMBEDDED_ACTIVITY, { channelId: s })); let y = (null !== (n = g.get(s)) && void 0 !== n ? n : []).filter(e => e.applicationId !== o), P = B(r), U = (null !== (i = R.get(P)) && void 0 !== i ? i : []).filter(e => !(e.applicationId === o && e.channelId === s)); h.length > 0 && (y.push(M), U.push(M)), g.set(s, y), R.set(P, U) } function x(e) { e.embedded_activities.forEach(t => { let { channel_id: n, embedded_activity: i, connections: r } = t; V({ guildId: e.id, channelId: n, applicationId: i.application_id, launchId: i.activity_id, compositeInstanceId: void 0, participants: r.map(e => ({ userId: e.user_id })), analyticsActivitySessionId: i.activity_id }) }) } function F(e) { var t, n; let { channelId: r, applicationId: s, launchId: a, compositeInstanceId: o } = e, c = (0, T.default)(s), E = l.default.getSessionId(); if (null == c || null == E || (null === (t = C.get(s)) || void 0 === t ? void 0 : t.channelId) === r) return !1; let I = u.default.getChannel(r), f = null == I ? void 0 : I.getGuildId(), S = _.default.getCurrentUser(); if (null == f && !(null !== (n = null == I ? void 0 : I.isPrivate()) && void 0 !== n && n) || null == S) return !1; i = r, C.set(s, { guildId: f, channelId: r, applicationId: s, url: c, userIds: new Set([S.id]), connectedSince: Date.now(), launchId: a, compositeInstanceId: o }), w = i !== d.default.getChannelId() || (0, h.default)(r) ? A.ActivityPanelModes.PIP : A.ActivityPanelModes.PANEL, G.set(Y(r, s), Date.now()) } function H() { v = !1 } function Y(e, t) { return "".concat(e, ":").concat(t) } class j extends(r = s.default.PersistedStore) { initialize(e) { var t; let n = new Set(null !== (t = null == e ? void 0 : e.everLaunchedActivities) && void 0 !== t ? t : []); null != e && (p = { ...e, everLaunchedActivities: n }) } getState() { return p } getSelfEmbeddedActivityForChannel(e) { var t; return null !== (t = Array.from(C.values()).find(t => { let { channelId: n } = t; return e === n })) && void 0 !== t ? t : null } getSelfEmbeddedActivities() { return C } getEmbeddedActivitiesForGuild(e) { var t; return null !== (t = R.get(e)) && void 0 !== t ? t : O } getEmbeddedActivitiesForChannel(e) { var t; return null !== (t = g.get(e)) && void 0 !== t ? t : O } getEmbeddedActivitiesByChannel() { return g } getEmbeddedActivityDurationMs(e, t) { let n = G.get(Y(e, t)); return null == n ? null : Date.now() - n } isLaunchingActivity() { return v } getShelfActivities(e) { var t; let n = B(e); return null !== (t = D.get(n)) && void 0 !== t ? t : [] } getShelfFetchStatus(e) { let t = B(e); return M.get(t) } shouldFetchShelf(e) { var t, n; let i = B(e), r = null !== (t = M.get(i)) && void 0 !== t ? t : { isFetching: !1 }, s = Date.now() - (null !== (n = null == r ? void 0 : r.lastFetchTimestampMs) && void 0 !== n ? n : 0) > 216e5; return !(null == r ? void 0 : r.isFetching) && s } getOrientationLockStateForApp(e) { var t; return null !== (t = y.get(e)) && void 0 !== t ? t : null } getPipOrientationLockStateForApp(e) { var t; return null !== (t = P.get(e)) && void 0 !== t ? t : this.getOrientationLockStateForApp(e) } getGridOrientationLockStateForApp(e) { var t, n; return null !== (n = null !== (t = U.get(e)) && void 0 !== t ? t : P.get(e)) && void 0 !== n ? n : this.getOrientationLockStateForApp(e) } getLayoutModeForApp(e) { return b.get(e) } getConnectedActivityChannelId() { return i } getActivityPanelMode() { return w } getFocusedLayout() { return k } getCurrentEmbeddedActivity() { var e; let t = this.getConnectedActivityChannelId(); if (null != t) return null !== (e = this.getSelfEmbeddedActivityForChannel(t)) && void 0 !== e ? e : void 0 } getEmbeddedActivityForUserId(e, t) { let n; if (void 0 !== t) { e: for (let [i, r] of g) for (let i of r) if (i.applicationId === t && i.userIds.has(e)) { n = i; break e }return n } } hasActivityEverBeenLaunched(e) { return p.everLaunchedActivities.has(e) } } N(j, "displayName", "EmbeddedActivitiesStore"), N(j, "persistKey", "EmbeddedActivities"), N(j, "migrations", [e => ({ ...e, seenFeaturedActivities: [], shouldShowNewActivityIndicator: !1 }), e => (delete e.seenFeaturedActivities, { ...e }), e => (delete e.seenActivities, { ...e }), e => (delete e.currentFreeActivity, delete e.lastFreeActivityRotationTimestampMs, delete e.freePeriodActivities, delete e.shouldShowFreeActivityIndicator, { ...e }), e => ({ ...e, seenNewActivities: {}, seenUpdatedActivities: {} }), e => { var t; let n = new Set(null !== (t = e.everLaunchedActivities) && void 0 !== t ? t : []); return { ...e, everLaunchedActivities: n } }, e => (delete e.usersHavePlayedByApp, { ...e })]); let W = new j(a.default, { ACTIVITY_LAYOUT_MODE_UPDATE: function(e) { let { applicationId: t, layoutMode: n } = e; b.set(t, n) }, CONNECTION_OPEN_SUPPLEMENTAL: function(e) { let { guilds: t } = e; g.clear(), R.clear(), t.forEach(e => x(e)) }, GUILD_CREATE: function(e) { let { guild: t } = e; x(t) }, CALL_CREATE: function(e) { let { channelId: t, embeddedActivities: n } = e; ! function(e, t) { t.forEach(e => { let { channel_id: t, embedded_activity: n, connections: i } = e; V({ guildId: null, channelId: t, applicationId: n.application_id, launchId: n.activity_id, compositeInstanceId: void 0, participants: i.map(e => ({ userId: e.user_id })), analyticsActivitySessionId: n.activity_id }) }) }(0, n) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; g.set(t.id, []); let n = t.guild_id; if (null != n) { var i; let e = B(n), r = (null !== (i = R.get(e)) && void 0 !== i ? i : []).filter(e => e.channelId !== t.id); R.set(e, r) } }, EMBEDDED_ACTIVITY_LAUNCH_START: function() { v = !0 }, EMBEDDED_ACTIVITY_LAUNCH_SUCCESS: function(e) { let { applicationId: t } = e; p.everLaunchedActivities.add(t), function() { v = !1 }() }, EMBEDDED_ACTIVITY_LAUNCH_FAIL: function() { (function() { v = !1 })() }, EMBEDDED_ACTIVITY_OPEN: function(e) { let { channelId: t, applicationId: n } = e; F({ channelId: t, applicationId: n }) }, EMBEDDED_ACTIVITY_CLOSE: function(e) { let { applicationId: t } = e, n = C.get(t); C.delete(t), (null == n ? void 0 : n.channelId) === i && (i = void 0) }, EMBEDDED_ACTIVITY_UPDATE: function(e) { let { guildId: t, channelId: n, embeddedActivity: i, connections: r } = e; V({ guildId: t, channelId: n, applicationId: i.application_id, launchId: i.activity_id, compositeInstanceId: void 0, participants: r.map(e => ({ userId: e.user_id })), analyticsActivitySessionId: i.activity_id }) }, EMBEDDED_ACTIVITY_UPDATE_V2: function(e) { let { applicationId: t, launchId: n, compositeInstanceId: i, location: r, participants: s } = e; null != u.default.getChannel(r.channel_id) && V({ guildId: r.guild_id, channelId: r.channel_id, location: r, applicationId: t, launchId: n, compositeInstanceId: i, participants: s.map(e => ({ userId: e.user_id, sessionId: e.session_id })) }) }, LOCAL_ACTIVITY_UPDATE: function(e) { var t; let { activity: n } = e; if (null == n) return !1; let i = C.get(null !== (t = n.application_id) && void 0 !== t ? t : ""); if (null == i) return !1; C.set(i.applicationId, { ...i }) }, EMBEDDED_ACTIVITY_SET_CONFIG: function(e) { let { applicationId: t, config: n } = e, i = C.get(t); null != i && C.set(i.applicationId, { ...i, config: n }) }, EMBEDDED_ACTIVITY_FETCH_SHELF: function(e) { let { guildId: t } = e, n = B(t), i = M.get(n); M.set(n, { isFetching: !0, lastFetchTimestampMs: null == i ? void 0 : i.lastFetchTimestampMs }) }, EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS: function(e) { let { guildId: t, activities: n } = e, i = B(t); D.set(i, n); let r = Date.now(); ! function(e) { let { activities: t, now: n } = e; t.forEach(e => { let t = e.application_id, i = e.client_platform_config[(0, S.default)((0, E.getOS)())]; if (null == i.label_until) return; let r = new Date(i.label_until).getTime(); if (r < n) return; let s = p.seenNewActivities[t], a = Object.hasOwn(p.seenNewActivities, t), l = new Date(s).getTime() < r; i.label_type === o.EmbeddedActivityLabelTypes.NEW && (!a || l) && (p.shouldShowNewActivityIndicator = !0, p.seenNewActivities[t] = i.label_until); let u = p.seenUpdatedActivities[t], d = Object.hasOwn(p.seenUpdatedActivities, t), _ = new Date(u).getTime() < r; i.label_type === o.EmbeddedActivityLabelTypes.UPDATED && (!d || _) && (p.shouldShowNewActivityIndicator = !0, p.seenUpdatedActivities[t] = i.label_until) }) }({ activities: n, now: r }), M.set(i, { isFetching: !1, lastFetchTimestampMs: r }) }, EMBEDDED_ACTIVITY_FETCH_SHELF_FAIL: function(e) { let { guildId: t } = e, n = B(t), i = M.get(n); M.set(n, { isFetching: !1, lastFetchTimestampMs: null == i ? void 0 : i.lastFetchTimestampMs }) }, EMBEDDED_ACTIVITY_DISMISS_NEW_INDICATOR: () => { p.shouldShowNewActivityIndicator = !1 }, EMBEDDED_ACTIVITY_SET_ORIENTATION_LOCK_STATE: function(e) { let { applicationId: t, lockState: n, pictureInPictureLockState: i, gridLockState: r } = e; null == n ? y.delete(t) : y.set(t, n), null === i ? P.delete(t) : void 0 !== i && P.set(t, i), null === r ? U.delete(t) : void 0 !== r && U.set(t, r) }, EMBEDDED_ACTIVITY_SET_PANEL_MODE: function(e) { let { activityPanelMode: t } = e; w = t }, EMBEDDED_ACTIVITY_SET_FOCUSED_LAYOUT: function(e) { let { focusedActivityLayout: t } = e; k = t }, CHANNEL_SELECT: function(e) { let { channelId: t } = e; i !== t && w === A.ActivityPanelModes.PANEL && (w = A.ActivityPanelModes.PIP) }, EMBEDDED_ACTIVITY_DISCONNECT: function(e) { let { channelId: t, applicationId: n, isRejoiningFromCurrentSession: i } = e; i && L.set(t, n) }, CONNECTION_INTERRUPTED: function(e) { e.code === m.RPCCloseCodes.CLOSE_ABNORMAL && (i = void 0, C.clear(), v = !1, w = A.ActivityPanelModes.DISCONNECTED) }, CHANNEL_CALL_POPOUT_WINDOW_OPEN: function(e) { let { channel: t } = e, n = Array.from(C.values()).find(e => { let { channelId: n } = e; return t.id === n }); void 0 !== n && L.set(t.id, n.applicationId) } }); t.default = W }, 424291: function(e, t, n) { "use strict"; n.r(t), n.d(t, { confirmActivityAgeGateAlert: function() { return o } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("522474"), a = n("981631"); function o(e) { let { application: t, onAgree: o, onDisagree: l } = e, u = s.default.getWindowOpen(a.PopoutWindowKeys.CHANNEL_CALL_POPOUT) ? r.POPOUT_MODAL_CONTEXT : r.DEFAULT_MODAL_CONTEXT; return (0, r.openModalLazy)(async () => { let { ActivityAgeGateModal: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("43782")]).then(n.bind(n, "224604")); return n => (0, i.jsx)(e, { ...n, application: t, onAgree: o, onDisagree: l }) }, { modalKey: "activity-age-gate", contextKey: u }), Promise.resolve() } }, 966434: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("668781"), r = n("624138"), s = n("689938"); function a(e, t, n, a) { var o; i.default.show({ title: s.default.Messages.EMBEDDED_ACTIVITY_CHANGE_CONFIRM_TITLE, cancelText: s.default.Messages.CANCEL, confirmText: s.default.Messages.CONFIRM, onConfirm: n, onCancel: a, body: s.default.Messages.EMBEDDED_ACTIVITY_CHANGE_ACTIVITY_CONFIRM_BODY.format({ currentApplicationName: null !== (o = null == e ? void 0 : e.name) && void 0 !== o ? o : s.default.Messages.EMBEDDED_ACTIVITY_CURRENT_APPLICATION_DEFAULT, currentApplicationChannelName: (0, r.isNullOrEmpty)(null == t ? void 0 : t.name) ? s.default.Messages.EMBEDDED_ACTIVITY_CURRENT_APPLICATION_CHANNEL_DEFAULT : null == t ? void 0 : t.name }) }) } }, 649591: function(e, t, n) { "use strict"; n.r(t), n.d(t, { confirmExternalAppLaunchAlert: function() { return s } }); var i = n("735250"); n("470079"); var r = n("481060"); function s(e) { let { application: t, onConfirm: s, onCancel: a } = e; return (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("18367")]).then(n.bind(n, "557751")); return n => (0, i.jsx)(e, { application: t, onConfirm: s, onCancel: a, ...n }) }), Promise.resolve() } }, 969345: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("812206"); function r(e) { var t; let { applicationId: n, activityConfigs: r, applications: s } = e, a = null !== (t = null == s ? void 0 : s.find(e => e.id === n)) && void 0 !== t ? t : i.default.getApplication(n), o = r.find(e => e.application_id === n); return null == o || null == a ? null : { activity: o, application: a } } }, 155268: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("695103"), r = n("115130"); function s(e) { let t = r.default.getState(); return t.useActivityUrlOverride && null != t.activityUrlOverride && "" !== t.activityUrlOverride ? t.activityUrlOverride : i.default.inTestModeForEmbeddedApplication(e) ? i.default.testModeOriginURL : function(e) { let t = window.GLOBAL_ENV.ACTIVITY_APPLICATION_HOST; return null == t ? null : "https://".concat(e, ".").concat(t) }(e) } }, 638880: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }); var i = n("812206"), r = n("592125"), s = n("944486"), a = n("594174"), o = n("867176"), l = n("566620"), u = n("882347"), d = n("917107"), _ = n("89425"), c = n("275920"), E = n("197386"), I = n("701488"), T = n("981631"); async function f(e) { let { applicationId: t, currentEmbeddedApplication: n, activityChannelId: f, locationObject: S, embeddedActivitiesManager: h, analyticsLocations: A } = e, m = r.default.getChannel(f), N = null == m ? void 0 : m.getGuildId(), p = null == N || "" === N, O = a.default.getCurrentUser(); if (null == m || p && !m.isPrivate() || null == f || null == O) return Promise.resolve(!1); if (s.default.getVoiceChannelId() === f && (null == n ? void 0 : n.id) === t) return (0, E.default)(N, f), Promise.resolve(!0); if (!await (0, u.confirmActivityLaunchChecks)({ applicationId: t, application: i.default.getApplication(t), channel: m, currentEmbeddedApplication: n, embeddedActivitiesManager: h, user: O })) return !1; let C = (0, d.default)(m.id), R = I.SUPPORTED_ACTIVITY_IN_TEXT_CHANNEL_TYPES.includes(m.type); if (C) { if (!await (0, _.default)({ channelId: m.id, bypassChangeModal: null != n })) return !1 } else if (!(0, o.isActivitiesInTextEnabled)(m, !1, "joinEmbeddedActivity") || !R) return !1; return (0, E.default)(N, f), (0, l.startEmbeddedActivity)(f, t, A), (0, c.default)({ type: T.AnalyticsGameOpenTypes.JOIN, userId: O.id, applicationId: t, locationObject: S, analyticsLocations: A }), !0 } }, 148720: function(e, t, n) { "use strict"; n.r(t), n.d(t, { maybeJoinEmbeddedActivity: function() { return h } }); var i = n("668781"), r = n("728345"), s = n("812206"), a = n("835873"), o = n("973616"), l = n("592125"), u = n("430824"), d = n("496675"), _ = n("594174"), c = n("979651"), E = n("317381"), I = n("638880"), T = n("782769"), f = n("527805"), S = n("689938"); async function h(e) { var t; let { channelId: n, applicationId: h, launchId: A, inputApplication: m, analyticsLocations: N, embeddedActivitiesManager: p } = e, O = E.default.getEmbeddedActivitiesForChannel(n).find(e => e.applicationId === h && (null == A || e.launchId === A)), C = m; if (null == C) { let e = await r.default.fetchApplication(h); C = o.default.createFromServer(e) } if (null == O || null == C) return; let R = _.default.getCurrentUser(), g = l.default.getChannel(n), L = (0, f.default)({ userId: null == R ? void 0 : R.id, application: C, channelId: n, currentUser: R, isActivitiesEnabledForCurrentPlatform: (0, T.getIsActivitiesEnabledForCurrentPlatform)(g), ChannelStore: l.default, VoiceStateStore: c.default, PermissionStore: d.default, GuildStore: u.default }), v = E.default.getSelfEmbeddedActivityForChannel(n), D = null == v ? void 0 : v.applicationId, M = null != D && null !== (t = s.default.getApplication(D)) && void 0 !== t ? t : void 0; ! function(e) { let { embeddedActivityJoinability: t, handleCanJoin: n } = e; switch (t) { case f.EmbeddedActivityJoinability.CAN_JOIN: null == n || n(); break; case f.EmbeddedActivityJoinability.NO_USE_EMBEDDED_ACTIVITIES_PERMISSION: (0, a.showActivitiesInvalidPermissionsAlert)(); break; case f.EmbeddedActivityJoinability.ACTIVITIES_FEATURE_NOT_ENABLED_FOR_OS: i.default.show({ title: S.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAILURE, body: S.default.Messages.EMBEDDED_ACTIVITIES_NOT_AVAILABLE_ON_OS, hideActionSheet: !1 }); break; case f.EmbeddedActivityJoinability.ACTIVITY_NOT_SUPPORTED_ON_OS: i.default.show({ title: S.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAILURE, body: S.default.Messages.EMBEDDED_ACTIVITIES_APPLICATION_UNSUPPORTED_OS, hideActionSheet: !1 }); break; case f.EmbeddedActivityJoinability.ACTIVITY_AGE_GATED: i.default.show({ title: S.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAILURE, body: S.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_AGE_GATE, hideActionSheet: !1 }); break; case f.EmbeddedActivityJoinability.NO_CHANNEL_CONNECT_PERMISSION: case f.EmbeddedActivityJoinability.CHANNEL_FULL: case f.EmbeddedActivityJoinability.NO_CHANNEL: case f.EmbeddedActivityJoinability.NO_USER: i.default.show({ title: S.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAILURE, body: S.default.Messages.ACTIVITIES_GENERIC_LAUNCH_FAILURE_DIALOG_BODY, hideActionSheet: !1 }) } }({ embeddedActivityJoinability: L, handleCanJoin: async function e() { null != O && await (0, I.default)({ applicationId: O.applicationId, currentEmbeddedApplication: M, activityChannelId: n, locationObject: {}, embeddedActivitiesManager: p, analyticsLocations: N }) } }) } }, 146936: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }); var i = n("668781"), r = n("812206"), s = n("835873"), a = n("592125"), o = n("430824"), l = n("496675"), u = n("594174"), d = n("979651"), _ = n("585483"), c = n("867176"), E = n("337682"), I = n("566620"), T = n("882347"), f = n("307091"), S = n("374065"), h = n("917107"), A = n("89425"), m = n("275920"), N = n("197386"), p = n("701488"), O = n("981631"), C = n("689938"); async function R(e) { var t; let { targetApplicationId: n, currentEmbeddedApplication: R, locationObject: g, channelId: L, guildId: v, embeddedActivitiesManager: D, analyticsLocations: M } = e, y = o.default.getGuild(v), P = u.default.getCurrentUser(); if (null == n) return !1; let U = null !== (t = r.default.getApplication(n)) && void 0 !== t ? t : await (0, f.default)(n, L); if (null == L) return _.ComponentDispatch.dispatch(O.ComponentActions.SHOW_ACTIVITIES_CHANNEL_SELECTOR, { applicationId: n }), !1; let b = a.default.getChannel(L); if (null == b || null == y && !b.isPrivate() || null == P || null == U) return !1; let G = null != L ? (0, S.getEmbeddedActivityLaunchability)({ channelId: L, ChannelStore: a.default, GuildStore: o.default, PermissionStore: l.default, VoiceStateStore: d.default }) : S.EmbeddedActivityLaunchability.NO_CHANNEL; if (G !== S.EmbeddedActivityLaunchability.CAN_LAUNCH) return G === S.EmbeddedActivityLaunchability.NO_USE_EMBEDDED_ACTIVITIES_PERMISSION ? (0, s.showActivitiesInvalidPermissionsAlert)() : G === S.EmbeddedActivityLaunchability.ACTIVITIES_FEATURE_NOT_ENABLED_FOR_OS && i.default.show({ title: C.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAIL_GENERIC, body: C.default.Messages.EMBEDDED_ACTIVITIES_NOT_AVAILABLE_ON_OS, hideActionSheet: !1 }), !1; if (!await (0, T.confirmActivityLaunchChecks)({ applicationId: U.id, application: U, channel: b, currentEmbeddedApplication: R, embeddedActivitiesManager: D, user: P })) return !1; let w = (0, h.default)(L), k = p.SUPPORTED_ACTIVITY_IN_TEXT_CHANNEL_TYPES.includes(b.type); if (w) { if (!await (0, A.default)({ channelId: L, bypassChangeModal: null != R })) return !1 } else if (!(0, c.isActivitiesInTextEnabled)(b, !0, "handleStartEmbeddedActivity") || !k) return !1; return I.startEmbeddedActivity(L, U.id, M), (0, N.default)(v, L), (0, m.default)({ type: O.AnalyticsGameOpenTypes.LAUNCH, userId: P.id, applicationId: U.id, locationObject: g, analyticsLocations: M }), E.markActivityUsed(U.id), !0 } }, 844797: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isActivityInTextStart: function() { return _ }, useIsActivityInTextChannel: function() { return d } }); var i = n("442837"), r = n("592125"), s = n("944486"), a = n("867176"), o = n("317381"), l = n("981631"); function u(e) { let { channelId: t, SelectedChannelStore: n, ChannelStore: i } = e, r = i.getChannel(t), s = (0, a.isActivitiesInTextEnabled)(r, !1, "isActivityInTextChannel"); return !!((null == r ? void 0 : r.type) === l.ChannelTypes.GUILD_TEXT && s || null != r && r.isPrivate() && s && null == n.getVoiceChannelId()) || !1 } function d(e) { return (0, i.useStateFromStores)([r.default, s.default], () => u({ channelId: null == e ? void 0 : e.id, ChannelStore: r.default, SelectedChannelStore: s.default })) } function _(e, t, n, i) { return !o.default.getEmbeddedActivitiesForChannel(e).some(e => e.applicationId === t) && u({ channelId: e, SelectedChannelStore: n, ChannelStore: i }) } }, 613611: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isActivityParticipantCurrentUserCurrentSession: function() { return r } }); var i = n("314897"); function r(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.default, n = t.getId(), r = t.getSessionId(); return e.userId === n && (null == e.sessionId || void 0 === e.sessionId || e.sessionId === r || !1) } }, 918559: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ActivityPanelModes: function() { return i }, FocusedActivityLayouts: function() { return r }, LANDSCAPE_ACTIVITY_ASPECT_RATIO: function() { return o } }), (s = i || (i = {})).DISCONNECTED = "disconnected", s.LAUNCHING_WITH_ORIENTATION_CHANGE = "launching_with_orientation_change", s.PANEL = "panel", s.PIP = "pip", (a = r || (r = {}))[a.NO_CHAT = 0] = "NO_CHAT", a[a.RESIZABLE = 1] = "RESIZABLE"; let o = 16 / 9 }, 246106: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("442837"), r = n("314897"), s = n("317381"), a = n("613611"); function o(e) { let t = r.default.getId(), { userActivity: n, inActivity: o } = (0, i.useStateFromStoresObject)([s.default], () => { let n = s.default.getSelfEmbeddedActivityForChannel(e), i = s.default.getEmbeddedActivitiesForChannel(e).find(e => e.applicationId === (null == n ? void 0 : n.applicationId)), r = !1; if ((null == i ? void 0 : i.participants) != null) { var o; r = (null == i ? void 0 : null === (o = i.participants) || void 0 === o ? void 0 : o.find(e => (0, a.isActivityParticipantCurrentUserCurrentSession)(e))) != null } else(null == i ? void 0 : i.userIds) != null && (r = i.userIds.has(t)); return { userActivity: n, inActivity: null != r && r } }); return { userActivity: n, inActivity: o } } }, 53289: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i = n("470079"), r = n("392711"), s = n("442837"), a = n("208826"), o = n("40851"), l = n("607070"), u = n("585483"), d = n("981631"); let _ = (0, r.debounce)(e => { setTimeout(() => { var t; null === (t = e.current) || void 0 === t || t.focus() }, 0) }, 50); function c(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : window, r = (0, s.useStateFromStores)([l.default], () => l.default.keyboardModeEnabled), c = (0, a.default)(), [E, I] = i.useState(!1), T = (0, o.useWindowDispatch)(); return i.useEffect(() => { if (t) return n.addEventListener("blur", e), () => n.removeEventListener("blur", e); function e() { c && (T.dispatch(d.ComponentActions.POPOUT_CLOSE), u.ComponentDispatch.dispatch(d.ComponentActions.CONTEXT_MENU_CLOSE)) } }, [n, c, t, T]), i.useEffect(() => { var i, s, a; if (r || !E || !t) return; let o = c; function l(t) { let n = t.relatedTarget; setTimeout(() => { (null == n || "BUTTON" === n.tagName) && !o && _(e) }, 100) } return null === (i = e.current) || void 0 === i || i.addEventListener("focusout", l), (null === (s = n.document.activeElement) || void 0 === s ? void 0 : s.tagName) !== "IFRAME" && !o && (null === (a = e.current) || void 0 === a || a.focus()), () => { var t; null === (t = e.current) || void 0 === t || t.removeEventListener("focusout", l), o = !0 } }, [t, E, r, e, n, c]), I } }, 782769: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getIsActivitiesEnabledForCurrentPlatform: function() { return a }, useIsActivitiesEnabledForCurrentPlatform: function() { return s } }); var i = n("873546"); function r() { return !i.isMobile && !i.isTablet && !0 } function s(e) { return r() } function a(e) { return r() } }, 797398: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("470079"), r = n("566620"); function s(e) { let { channel: t, userActivity: n, inActivity: s, embeddedActivitiesManager: a } = e; i.useEffect(() => { !s && (0, r.launchEmbeddedActivity)(t.id) }, [null == n ? void 0 : n.applicationId, t.id, s, a]) } }, 963614: function(e, t, n) { "use strict"; n.r(t), n.d(t, { allowPopups: function() { return r } }); var i = n("701488"); function r(e) { var t, n; if (i.APPLICATIONS_WITH_ALLOWED_POPUPS.has(e.id)) return !0; if ("embeddedActivityConfig" in e) return (null === (t = e.embeddedActivityConfig) || void 0 === t ? void 0 : t.displays_advertisements) === !0; if ("embedded_activity_config" in e) return (null === (n = e.embedded_activity_config) || void 0 === n ? void 0 : n.displays_advertisements) === !0; else return !1 } }, 255621: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("358085"), r = n("782769"), s = n("527805"), a = n("620662"), o = n("981631"); function l(e) { let { user: t, activity: n, application: l, channelId: u, currentUser: d, isEmbedded: _, ChannelStore: c, GuildStore: E, GuildMemberCountStore: I, RelationshipStore: T, SelectedChannelStore: f, VoiceStateStore: S, PermissionStore: h } = e, A = c.getChannel(u), m = (0, r.getIsActivitiesEnabledForCurrentPlatform)(A); if (null == t) return !1; if (_) return (0, s.default)({ userId: t.id, activity: n, channelId: u, currentUser: d, application: l, isActivitiesEnabledForCurrentPlatform: m, ChannelStore: c, VoiceStateStore: S, PermissionStore: h, GuildStore: E }) === s.EmbeddedActivityJoinability.CAN_JOIN; if (!(0, i.isDesktop)()) return !1; if ((0, a.default)(n, o.ActivityFlags.PARTY_PRIVACY_FRIENDS) && T.isFriend(t.id)) return !0; if ((0, a.default)(n, o.ActivityFlags.PARTY_PRIVACY_VOICE_CHANNEL)) { let e = c.getChannel(f.getVoiceChannelId()); if (null == e || !S.isInChannel(e.id, t.id)) return !1; switch (e.type) { case o.ChannelTypes.DM: case o.ChannelTypes.GROUP_DM: return !0 } let n = E.getGuild(e.getGuildId()); if (null == n || n.hasFeature(o.GuildFeatures.COMMUNITY)) return !1; let i = I.getMemberCount(n.id); return null != i && i < 100 } return !1 } }, 672181: function(e, t, n) { "use strict"; function i(e) {} n.r(t), n.d(t, { default: function() { return i } }) }, 882347: function(e, t, n) { "use strict"; n.r(t), n.d(t, { confirmActivityLaunchChecks: function() { return h } }), n("789020"); var i = n("570140"), r = n("881052"), s = n("728345"), a = n("812206"), o = n("973616"), l = n("630388"), u = n("317381"), d = n("424291"), _ = n("966434"), c = n("649591"), E = n("981631"); async function I(e, t) { try { var n; return null !== (n = a.default.getApplication(e)) && void 0 !== n ? n : o.default.createFromServer(await s.default.fetchApplication(e)) } catch (n) { i.default.dispatch({ type: "EMBEDDED_ACTIVITY_LAUNCH_FAIL", applicationId: e, guildId: t, error: new r.APIError(n) }) } } async function T(e) { let { channel: t, currentEmbeddedApplication: n, embeddedActivitiesManager: i } = e; return !!(null == n || await new Promise(e => { (0, _.default)(n, t, () => { i.leaveActivity({ channelId: t.id, applicationId: n.id }), e(!0) }, () => e(!1)) })) || !1 } async function f(e) { let { application: t, applicationId: n, channel: i, user: r } = e; if (null == r.nsfwAllowed) { var s, a; let e = null != t ? t : await I(n, i.getGuildId()); if (null == e || null !== (a = null === (s = e.embeddedActivityConfig) || void 0 === s ? void 0 : s.requires_age_gate) && void 0 !== a && a && !await new Promise(t => { (0, d.confirmActivityAgeGateAlert)({ application: e, onAgree: () => t(!0), onDisagree: () => t(!1) }) })) return !1 } return !0 } async function S(e) { let { application: t, applicationId: n, channel: i } = e, r = null != t ? t : await I(n, i.getGuildId()); return null != r && (!!((0, l.hasFlag)(r.flags, E.ApplicationFlags.EMBEDDED_RELEASED) || u.default.hasActivityEverBeenLaunched(n)) || new Promise(e => { (0, c.confirmExternalAppLaunchAlert)({ application: r, onConfirm: () => e(!0), onCancel: () => e(!1) }) })) } async function h(e) { return !!(await T(e) && await f(e) && await S(e)) || !1 } }, 839426: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("570140"); function r(e, t, n, r) { i.default.dispatch({ type: "EMBEDDED_ACTIVITY_DEFERRED_OPEN", channelId: e, applicationId: t, intent: r, analyticsLocations: n }) } }, 307091: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("307643"), r = n("973616"), s = n("592125"), a = n("566620"), o = n("969345"); async function l(e, t) { var n; let l = null === (n = s.default.getChannel(t)) || void 0 === n ? void 0 : n.guild_id, { activityConfigs: u, applications: d } = await (0, a.fetchShelf)({ guildId: l }), _ = (0, o.default)({ applicationId: e, activityConfigs: u, applications: d }); if ((null == _ ? void 0 : _.application) != null) return null == _ ? void 0 : _.application; { let t = await (0, i.fetchApplication)(e); return r.default.createFromServer(t) } } }, 452634: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("131704"), r = n("592125"), s = n("979651"); function a(e) { var t; let { channelId: n, userId: a, activity: o } = e, l = r.default.getChannel(n), u = (null == o ? void 0 : o.session_id) == null || null != l && (0, i.isTextChannel)(l.type) ? n : null === (t = s.default.getVoiceStateForSession(a, null == o ? void 0 : o.session_id)) || void 0 === t ? void 0 : t.channelId; return null != u ? u : void 0 } }, 964517: function(e, t, n) { "use strict"; function i(e) { var t; return null !== (t = null == e ? void 0 : e.compositeInstanceId) && void 0 !== t ? t : null == e ? void 0 : e.analyticsActivitySessionId } function r(e) { return null == e ? void 0 : e.activity_id } n.r(t), n.d(t, { default: function() { return i }, getActivitySessionIdFromServerData: function() { return r } }) }, 657305: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("689938"); function r(e) { return null != e && "" !== e ? e : i.default.Messages.EMBEDDED_ACTIVITIES_IN_ACTIVITY } }, 527805: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmbeddedActivityJoinability: function() { return r }, default: function() { return T }, useEmbeddedActivityJoinability: function() { return f } }); var i, r, s = n("442837"), a = n("592125"), o = n("430824"), l = n("496675"), u = n("594174"), d = n("979651"), _ = n("934415"), c = n("782769"), E = n("983695"), I = n("981631"); function T(e) { var t, n, i; let { userId: r, activity: s, application: a, channelId: o, currentUser: l, isActivitiesEnabledForCurrentPlatform: u, ChannelStore: d, VoiceStateStore: c, PermissionStore: T, GuildStore: f } = e; if (null == r) return 8; if ((null == l ? void 0 : l.nsfwAllowed) === !1 && (null == a ? void 0 : null === (t = a.embeddedActivityConfig) || void 0 === t ? void 0 : t.requires_age_gate) === !0) return 7; if (!u) return 5; if (!(0, E.default)(null == a ? void 0 : null === (n = a.embeddedActivityConfig) || void 0 === n ? void 0 : n.supported_platforms)) return 6; let S = null != o ? o : null === (i = c.getVoiceStateForSession(r, null == s ? void 0 : s.session_id)) || void 0 === i ? void 0 : i.channelId; if (null == S) return 4; let h = d.getChannel(o); if (null == h) return 4; let A = h.getGuildId(); if (!h.isPrivate()) { if (null == A) return 10; let e = f.getGuild(A); if ((null == e ? void 0 : e.afkChannelId) === h.id) return 9; let t = c.getCurrentClientVoiceChannelId(h.getGuildId()) === S, n = (0, _.isChannelFull)(h, c, f), i = T.can(I.Permissions.CONNECT, h); if (!T.can(I.Permissions.USE_EMBEDDED_ACTIVITIES, h)) return 1; if (h.isVocal() && !t) { if (n) return 3; if (!i) return 2 } } return 0 } function f(e) { let { userId: t, activity: n, channelId: i, application: r } = e, _ = (0, c.useIsActivitiesEnabledForCurrentPlatform)(null != i ? i : void 0), E = (0, s.useStateFromStores)([u.default], () => u.default.getCurrentUser()); return (0, s.useStateFromStores)([a.default, d.default, l.default, o.default], () => T({ userId: t, activity: n, application: r, channelId: i, currentUser: E, isActivitiesEnabledForCurrentPlatform: _, ChannelStore: a.default, VoiceStateStore: d.default, PermissionStore: l.default, GuildStore: o.default }), [n, r, i, E, _, t]) }(i = r || (r = {}))[i.CAN_JOIN = 0] = "CAN_JOIN", i[i.NO_USE_EMBEDDED_ACTIVITIES_PERMISSION = 1] = "NO_USE_EMBEDDED_ACTIVITIES_PERMISSION", i[i.NO_CHANNEL_CONNECT_PERMISSION = 2] = "NO_CHANNEL_CONNECT_PERMISSION", i[i.CHANNEL_FULL = 3] = "CHANNEL_FULL", i[i.NO_CHANNEL = 4] = "NO_CHANNEL", i[i.ACTIVITIES_FEATURE_NOT_ENABLED_FOR_OS = 5] = "ACTIVITIES_FEATURE_NOT_ENABLED_FOR_OS", i[i.ACTIVITY_NOT_SUPPORTED_ON_OS = 6] = "ACTIVITY_NOT_SUPPORTED_ON_OS", i[i.ACTIVITY_AGE_GATED = 7] = "ACTIVITY_AGE_GATED", i[i.NO_USER = 8] = "NO_USER", i[i.IS_AFK_CHANNEL = 9] = "IS_AFK_CHANNEL", i[i.NO_GUILD = 10] = "NO_GUILD" }, 374065: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmbeddedActivityLaunchability: function() { return r }, getEmbeddedActivityLaunchability: function() { return E }, getEmbeddedActivityLaunchabilityLabel: function() { return T }, useEmbeddedActivityLaunchability: function() { return I } }); var i, r, s = n("442837"), a = n("592125"), o = n("430824"), l = n("496675"), u = n("979651"), d = n("782769"), _ = n("981631"), c = n("689938"); function E(e) { let { channelId: t, ChannelStore: n, GuildStore: i, PermissionStore: r, VoiceStateStore: s } = e, a = n.getChannel(t); if (null == a) return 3; if (!(0, d.getIsActivitiesEnabledForCurrentPlatform)(a)) return 6; if (!a.isPrivate()) { let e = a.getGuildId(); if (null == e) return 4; let n = i.getGuild(e); if ((null == n ? void 0 : n.afkChannelId) === a.id) return 5; let o = r.can(_.Permissions.CONNECT, a); if (!r.can(_.Permissions.USE_EMBEDDED_ACTIVITIES, a)) return 1; let l = s.getCurrentClientVoiceChannelId(a.getGuildId()) === t; if (a.isVocal() && !l && !o) return 2 } return 0 } function I(e) { return (0, s.useStateFromStores)([a.default, o.default, l.default, u.default], () => E({ channelId: e, ChannelStore: a.default, GuildStore: o.default, PermissionStore: l.default, VoiceStateStore: u.default }), [e]) } function T(e) { switch (e) { case 0: return c.default.Messages.EMBEDDED_ACTIVITIES_START_AN_ACTIVITY; case 1: return c.default.Messages.EMBEDDED_ACTIVITIES_INVALID_PERMISSIONS; default: return c.default.Messages.EMBEDDED_ACTIVITIES_INVALID_CHANNEL } }(i = r || (r = {}))[i.CAN_LAUNCH = 0] = "CAN_LAUNCH", i[i.NO_USE_EMBEDDED_ACTIVITIES_PERMISSION = 1] = "NO_USE_EMBEDDED_ACTIVITIES_PERMISSION", i[i.NO_CHANNEL_CONNECT_PERMISSION = 2] = "NO_CHANNEL_CONNECT_PERMISSION", i[i.NO_CHANNEL = 3] = "NO_CHANNEL", i[i.NO_GUILD = 4] = "NO_GUILD", i[i.IS_AFK_CHANNEL = 5] = "IS_AFK_CHANNEL", i[i.ACTIVITIES_FEATURE_NOT_ENABLED_FOR_OS = 6] = "ACTIVITIES_FEATURE_NOT_ENABLED_FOR_OS" }, 603113: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("802856"), r = n("981631"); function s(e) { return null == e || null == e.type || e.type !== r.ActivityTypes.PLAYING ? null : (0, i.default)(e) ? r.ActivityGamePlatforms.XBOX : null != e.platform ? e.platform : r.ActivityGamePlatforms.DESKTOP } }, 953101: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("47120"); let i = ["allow-pointer-lock", "allow-scripts", "allow-same-origin", "allow-forms"]; function r(e) { let { allowPopups: t } = e, n = i; return t && (n = [...i, "allow-popups", "allow-popups-to-escape-sandbox"]), n.join(" ") } }, 761122: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("911969"); function r(e) { switch (e) { case "android": return i.EmbeddedActivitySupportedPlatforms.ANDROID; case "ios": return i.EmbeddedActivitySupportedPlatforms.IOS; default: return i.EmbeddedActivitySupportedPlatforms.WEB } } }, 740265: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("726542"), r = n("603113"), s = n("981631"), a = n("689938"); function o(e) { var t; let n = null !== (t = (0, r.default)(e)) && void 0 !== t ? t : ""; switch (n) { case s.ActivityGamePlatforms.PS4: case s.ActivityGamePlatforms.PS5: return a.default.Messages.USER_ACTIVITY_HEADER_PLAYING_ON_PLATFORM.format({ platform: n.toUpperCase() }); case s.ActivityGamePlatforms.XBOX: case s.ActivityGamePlatforms.SAMSUNG: return a.default.Messages.USER_ACTIVITY_HEADER_PLAYING_ON_PLATFORM.format({ platform: i.default.get(n).name }); default: return a.default.Messages.USER_ACTIVITY_HEADER_PLAYING } } }, 655922: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("701488"); function r(e) { if (null != e && null != e.url && i.validStreamURL.test(e.url)) return e.url } }, 620662: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("789020"); var i = n("981631"); function r(e, t) { return t !== i.ActivityFlags.INSTANCE && null != e && null != e.flags && !!(e.flags & t) } }, 122810: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("981631"); function r(e, t) { return ((null == e ? void 0 : e.type) !== i.ActivityTypes.HANG_STATUS || !!t) && null != e && e.type !== i.ActivityTypes.CUSTOM_STATUS && (null != e.details || null != e.assets && (null != e.assets.large_image || null != e.assets.small_text) || null != e.party || null != e.secrets || null != e.state) } }, 983695: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("911969"), r = n("358085"); function s(e) { var t; let n; return n = (0, r.isIOS)() ? i.EmbeddedActivitySupportedPlatforms.IOS : (0, r.isAndroid)() ? i.EmbeddedActivitySupportedPlatforms.ANDROID : i.EmbeddedActivitySupportedPlatforms.WEB, null !== (t = null == e ? void 0 : e.includes(n)) && void 0 !== t && t } }, 841784: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("620662"), r = n("981631"); function s(e) { return (0, i.default)(e, r.ActivityFlags.EMBEDDED) } }, 833664: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("981631"); function r(e) { return null != e && e.type === i.ActivityTypes.PLAYING } }, 503438: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("726542"), r = n("981631"), s = n("616922"); function a(e) { return null != e && e.type === r.ActivityTypes.LISTENING && e.name === i.default.get(r.PlatformTypes.SPOTIFY).name && null != e.party && null != e.party.id && (0, s.isSpotifyParty)(e.party.id) } }, 802856: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("701488"), r = n("981631"); function s(e) { return null != e && (e.application_id === i.XBOX_ACTIVITY_APPLICATION_ID || e.platform === r.ActivityGamePlatforms.XBOX) } }, 420660: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("701488"), r = n("981631"); function s(e) { return e.type === r.ActivityTypes.STREAMING && null != e.url && i.validStreamURL.test(e.url) } function a(e) { return null != e && (Array.isArray(e) ? e.some(s) : s(e)) } }, 917107: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("106351"), r = n("314897"), s = n("592125"), a = n("944486"), o = n("979651"); function l(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : s.default, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : a.default, l = t.getChannel(e), u = n.getVoiceChannelId(); if (null == l) return !1; if (l.type === i.ChannelTypes.GUILD_VOICE) return !0; if (l.isPrivate()) return l.id === u || null != o.default.getVoiceStatesForChannel(l.id)[r.default.getId()]; return !1 } }, 74433: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"); var i = n("833858"), r = n("657305"), s = n("841784"), a = n("420660"), o = n("981631"), l = n("689938"); function u(e) { return { [o.ActivityTypes.STREAMING]: e ? l.default.Messages.UNFORMATTED_STREAMING : l.default.Messages.STREAMING, [o.ActivityTypes.LISTENING]: e ? l.default.Messages.UNFORMATTED_LISTENING_TO : l.default.Messages.LISTENING_TO, [o.ActivityTypes.WATCHING]: e ? l.default.Messages.UNFORMATTED_WATCHING : l.default.Messages.WATCHING, [o.ActivityTypes.COMPETING]: e ? l.default.Messages.UNFORMATTED_COMPETING : l.default.Messages.COMPETING } } function d(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], d = arguments.length > 3 ? arguments[3] : void 0; if (null != e && e.type === o.ActivityTypes.CUSTOM_STATUS) return null != e.state ? e.state.trim() : null; if (null != t) return null == e || e.type !== o.ActivityTypes.PLAYING ? l.default.Messages.SHARING_SCREEN : u(n)[o.ActivityTypes.STREAMING].format({ name: e.name }); if (d && null != e && e.type === o.ActivityTypes.HANG_STATUS) return (0, i.getHangStatusText)(e); if (null == e || null == e.name) return null; if ((0, a.default)(e)) { let t = null != e.details && "" !== e.details ? e.details : e.name; return u(n)[o.ActivityTypes.STREAMING].format({ name: t }) } return (0, s.default)(e) ? (0, r.default)(e.name) : function(e, t, n) { let i = u(n); switch (e) { case o.ActivityTypes.LISTENING: case o.ActivityTypes.WATCHING: case o.ActivityTypes.COMPETING: return i[e].format({ name: t }); case o.ActivityTypes.CUSTOM_STATUS: case o.ActivityTypes.HANG_STATUS: return null; case o.ActivityTypes.PLAYING: default: return n ? l.default.Messages.UNFORMATTED_PLAYING_GAME.format({ game: t }) : l.default.Messages.PLAYING_GAME.format({ game: t }) } }(e.type, e.name, n) } function _(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 ? arguments[3] : void 0; if (Array.isArray(e)) { let r = e; null != t && (r = [...r, null]); let s = null; for (let e of r) { let r = d(e, t, n, i); if (null != r) return { activity: e, activityText: r }; (null == e ? void 0 : e.type) === o.ActivityTypes.CUSTOM_STATUS && null != e.emoji && (s = e) } return (null == s ? void 0 : s.emoji) != null ? { activity: s, activityText: null } : null } return d(e, t, n, i) } }, 89425: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("411104"); var i = n("430198"), r = n("557135"), s = n("66999"), a = n("592125"), o = n("496675"), l = n("944486"), u = n("979651"); class d extends Error {} async function _(e) { let { channelId: t, timeoutMs: n = 1e4, bypassChangeModal: _ = !1 } = e, c = a.default.getChannel(t); if (null == c || !await r.default.handleVoiceConnect({ bypassGuildIdCheck: !0, bypassChangeModal: _, channel: c, connected: u.default.isInChannel(t), needSubscriptionToAccess: (0, s.getChannelRoleSubscriptionStatus)(t, a.default, i.default, o.default).needSubscriptionToAccess })) return !1; let E = new Promise((e, i) => { let r = setTimeout(() => { i(new d("Joining voice channel has timed out.")) }, n); l.default.addConditionalChangeListener(() => l.default.getVoiceChannelId() !== t || (clearTimeout(r), e(), !1)) }); try { await E } catch (e) { if (e instanceof d) return !1; throw e } return !0 } }, 524331: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("570140"); function r() { i.default.dispatch({ type: "ACTIVITY_SYNC_STOP" }) } }, 275920: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("626135"), r = n("981631"); function s(e) { let { type: t, source: n, userId: s, applicationId: a, partyId: o, messageId: l, locationObject: u, analyticsLocations: d } = e; i.default.track(r.AnalyticEvents.APPLICATION_OPENED, { type: t, source: n, application_id: a, party_id: null != o ? o : void 0, other_user_id: s, message_id: l, location: u, location_stack: d }) } }, 197386: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("475179"), r = n("928518"), s = n("776862"), a = n("703656"), o = n("317381"), l = n("917107"), u = n("981631"); function d(e, t) { r.default.getWindowOpen(u.PopoutWindowKeys.CHANNEL_CALL_POPOUT) ? (0, s.default)(u.PopoutWindowKeys.CHANNEL_CALL_POPOUT) : (0, a.transitionTo)(u.Routes.CHANNEL(e, t)); let n = o.default.getSelfEmbeddedActivityForChannel(t); null != n && (0, l.default)(t) && i.default.selectParticipant(t, n.applicationId) } }, 716600: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("442837"), r = n("317381"); function s() { return (0, i.useStateFromStores)([r.default], () => r.default.getCurrentEmbeddedActivity()) } }, 952561: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("835473"), r = n("716600"); function s() { let e = (0, r.default)(), [t] = (0, i.default)(null == e ? [] : [e.applicationId]); return null != t ? t : void 0 } }, 208156: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmbedIFrameWithLoadingBackground: function() { return m } }), n("47120"), n("610138"), n("216116"), n("78328"), n("815648"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("482033"), l = n("153832"), u = n("442837"), d = n("928518"), _ = n("631467"), c = n("210887"), E = n("585483"), I = n("53289"), T = n("953101"), f = n("701488"), S = n("981631"), h = n("478956"); function A(e) { let { url: t, className: n, style: s, onLoad: a, shouldRefocus: h, queryParams: A, allowPopups: m = !1, referrerPolicy: N = "origin" } = e, p = (0, u.useStateFromStores)([d.default], () => d.default.getWindow(S.PopoutWindowKeys.CHANNEL_CALL_POPOUT)), O = (0, o.useMemoOne)(() => (0, l.v4)(), [t]), C = r.useRef(null), R = (0, I.default)(C, h, null == p ? window : p), g = { ...A, frame_id: O, platform: f.ActivityPlatform.DESKTOP }, [L, v] = r.useState(!1), D = c.default.theme, M = { ...s }; return D === S.ThemeTypes.LIGHT ? M.colorScheme = "light" : M.colorScheme = "dark", r.useEffect(() => (E.ComponentDispatch.dispatch(S.ComponentActions.IFRAME_MOUNT, { id: O }), () => { E.ComponentDispatch.dispatch(S.ComponentActions.IFRAME_UNMOUNT, { id: O }) }), [O]), r.useEffect(() => { let e = e => { let { resizing: t } = e; v(t) }; return E.ComponentDispatch.subscribe(S.ComponentActions.MANUAL_IFRAME_RESIZING, e), () => { E.ComponentDispatch.unsubscribe(S.ComponentActions.MANUAL_IFRAME_RESIZING, e) } }, []), L && (M.pointerEvents = "none"), null != t ? (0, i.jsx)("iframe", { style: M, allow: "autoplay; encrypted-media", referrerPolicy: N, onLoad: function(e) { var n; null == a || a(e.target), C.current = e.target, R(!0), null === (n = e.target.contentWindow) || void 0 === n || n.postMessage([_.default.HELLO, g], null != t ? t : "") }, sandbox: (0, T.default)({ allowPopups: m }), className: n, src: "".concat(t, "?").concat(new URLSearchParams(g)) }) : null } function m(e) { let { onLoad: t } = e, [n, s] = r.useState(!1), o = r.useCallback(e => { s(!0), null == t || t(e) }, [t]); return (0, i.jsxs)("div", { className: h.fillParent, children: [!n && (0, i.jsx)("div", { className: a()(h.fillParent, h.iframePlaceholder) }), (0, i.jsx)("div", { className: a()(h.fillParent, n ? void 0 : h.hiddenIframeContainer), children: (0, i.jsx)(A, { ...e, onLoad: o }) })] }) } }, 513202: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("570140"), a = n("468026"), o = n("566620"), l = n("287545"), u = n("318891"), d = n("719296"), _ = n("689938"); class c extends l.default { showErrorModal(e) { let { code: t, message: n } = e; (0, r.openModalLazy)(async () => e => (0, i.jsx)(a.default, { title: _.default.Messages.EMBEDDED_ACTIVITIES_ERROR_TITLE.format({ code: t }), body: n, ...e })) } showLaunchErrorModal(e) { (0, r.openModalLazy)(async () => t => (0, i.jsx)(a.default, { title: _.default.Messages.EMBEDDED_ACTIVITIES_LAUNCH_FAILURE, body: e, ...t })) } leaveActivity(e) { let { channelId: t, applicationId: n } = e; s.default.wait(() => { (0, o.stopEmbeddedActivity)({ channelId: t, applicationId: n }) }) } hidePIPEmbed(e) { let { channelId: t, applicationId: n } = e, i = (0, d.default)(t, n); (0, u.hidePIPEmbed)(i) } releaseWebView() {} constructor(...e) { var t, n, i; super(...e), t = this, n = "handleRPCDisconnect", i = e => { let { reason: t, application: n } = e; this.superHandleRPCDisconnect({ reason: t, application: n }) }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new c }, 318891: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { hidePIPEmbed: function() { return A }, showPIPEmbed: function() { return m } }); var r = n("570140"), s = n("519938"), a = n("317770"), o = n("928518"), l = n("592125"), u = n("819640"), d = n("366050"), _ = n("19780"), c = n("944486"), E = n("914010"), I = n("979651"), T = n("317381"), f = n("719296"), S = n("958185"), h = n("981631"); function A(e) { let t = null != e ? e : i; null != t && d.default.isOpen(t) && r.default.wait(() => s.hide(t)) } function m(e) { let t = null != e ? e : i; null != t && d.default.isOpen(t) && r.default.wait(() => s.show(t)) } function N() { let e = T.default.getConnectedActivityChannelId(), t = T.default.getSelfEmbeddedActivityForChannel(null != e ? e : h.EMPTY_STRING_SNOWFLAKE_ID), n = l.default.getChannel(e); return null == e || null == n || null == t ? function() { let e = i; null != e && d.default.isOpen(e) && (r.default.wait(() => s.close(e)), i = null) }() : function(e, t) { if (d.default.isOpen(t)) return !1; r.default.wait(() => s.open(t, h.PictureInPictureComponents.EMBED_IFRAME, { channel: e })), i = t }(n, (0, f.default)(e, t.applicationId)) } function p() { return (0, S.default)({ LayerStore: u.default, PopoutWindowStore: o.default }) ? A() : m() } class O extends a.default { _initialize() { c.default.addChangeListener(N), E.default.addChangeListener(N), _.default.addChangeListener(N), I.default.addChangeListener(N), o.default.addChangeListener(N), T.default.addChangeListener(N), u.default.addChangeListener(p) } _terminate() { c.default.removeChangeListener(N), E.default.removeChangeListener(N), _.default.removeChangeListener(N), I.default.removeChangeListener(N), o.default.removeChangeListener(N), T.default.removeChangeListener(N), u.default.removeChangeListener(p) } } t.default = new O }, 385326: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("570140"), d = n("475179"), _ = n("925549"), c = n("37234"), E = n("835473"), I = n("358221"), T = n("928518"), f = n("703656"), S = n("607187"), h = n("937995"), A = n("366050"), m = n("944486"), N = n("594174"), p = n("566620"), O = n("317381"), C = n("963614"), R = n("917107"), g = n("208156"), L = n("748492"), v = n("350064"), D = n("701488"), M = n("918559"), y = n("981631"), P = n("354459"), U = n("323926"), b = n("376838"), G = n("661781"); function w(e) { var t, n; let { channel: s, isLoading: v } = e, [w, k] = r.useState(!1), B = (0, o.useStateFromStores)([O.default], () => O.default.getSelfEmbeddedActivityForChannel(s.id)), V = (0, o.useStateFromStores)([O.default], () => O.default.getActivityPanelMode()), x = (0, E.useGetOrFetchApplication)(null == B ? void 0 : B.applicationId), F = null == B ? void 0 : B.launchId, H = (0, o.useStateFromStores)([m.default], () => m.default.getChannelId() === s.id), { dockedRect: Y, isHidden: j } = (0, o.useStateFromStoresObject)([A.default], () => { let e = A.default.pipWindow; return { dockedRect: null != e ? A.default.getDockedRect(e.id) : null, isHidden: A.default.isEmbeddedActivityHidden() } }), W = (0, o.useStateFromStores)([T.default], () => T.default.getWindow(y.PopoutWindowKeys.CHANNEL_CALL_POPOUT)), { activityParticipant: K, selectedParticipant: z, participantsOpen: Z } = (0, o.useStateFromStoresObject)([I.default], () => ({ activityParticipant: null != B ? I.default.getParticipant(s.id, B.applicationId) : null, selectedParticipant: I.default.getSelectedParticipant(s.id), participantsOpen: I.default.getParticipantsOpen(s.id) })), X = H || null != W, Q = (0, R.default)(s.id), q = Q && (null == z ? void 0 : z.type) !== P.ParticipantTypes.ACTIVITY, J = !Q && V === M.ActivityPanelModes.PIP, $ = (!X || X && (q || J) && null == Y) && !j, ee = $ && null != A.default.pipVideoWindow && null != A.default.pipActivityWindow; function et() { var e; null != B && d.default.selectParticipant(s.id, B.applicationId); let t = null !== (e = s.getGuildId()) && void 0 !== e ? e : y.ME; _.default.channelListScrollTo(t, s.id), (0, f.transitionToGuild)(t, s.id), null == W && (0, c.popAllLayers)() } function en() { k(!w) } r.useEffect(() => { if ((null == B ? void 0 : B.applicationId) != null) { let e = $ ? D.ActivityLayoutMode.PIP : D.ActivityLayoutMode.FOCUSED; u.default.dispatch({ type: "ACTIVITY_LAYOUT_MODE_UPDATE", layoutMode: e, applicationId: B.applicationId }) } }, [null == B ? void 0 : B.applicationId, $]); if (null == B || null == F || null == K && (0, R.default)(s.id) || null == x) return null; let ei = Array.from(B.userIds).map(e => N.default.getUser(e)).filter(e => null != e), er = { instance_id: null !== (n = null !== (t = B.compositeInstanceId) && void 0 !== t ? t : B.launchId) && void 0 !== n ? n : "", channel_id: s.id }; return null != s.guild_id && "" !== s.guild_id && (er.guild_id = s.guild_id), (0, i.jsx)(h.default, { timeout: 2e3, children: e => { var t, n, r, o, u, d, _, c; let { idle: E, onActive: I, onForceIdle: T } = e; return (0, i.jsxs)(S.default, { className: a()(U.root, { [U.pipMode]: $, [G.elevationHigh]: $, [b.idle]: E && !(null === (t = B.config) || void 0 === t ? void 0 : t.useInteractivePIP), [U.pipModeShort]: $ && !w, [U.pipModeTall]: $ && w, [U.hidden]: j, [U.multiPIPMode]: ee }), noBorder: !$, children: [(r = I, o = T, u = E, d = J, _ = ei, $ && null != B && ((null == K ? void 0 : K.type) === P.ParticipantTypes.ACTIVITY || d) ? (null === (c = B.config) || void 0 === c ? void 0 : c.useInteractivePIP) ? (0, i.jsx)(L.InteractivePIPHeader, { onJumpToChannel: et, applicationId: B.applicationId, channel: s, showControls: !u, onMouseDown: r, onMouseMove: r, onMouseLeave: o, onToggleHeight: en, isExpanded: w, hideExpandedButton: d }) : d ? (0, i.jsx)(i.Fragment, { children: (0, i.jsx)(L.TextActivityPIPOverlay, { idle: u, onMouseMove: r, onMouseDown: r, onMouseLeave: o, onJumpToChannel: () => { et(), (0, p.updateActivityPanelMode)(M.ActivityPanelModes.PANEL) }, channel: s, applicationId: B.applicationId, users: _ }) }) : null == K ? null : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { onMouseMove: r, onMouseDown: r, onMouseLeave: o, className: U.clickShield, onDoubleClick: et }), (0, i.jsx)(L.PIPOverlay, { idle: u, onMouseMove: r, onMouseDown: r, onMouseLeave: o, onJumpToChannel: et, channel: s, applicationId: B.applicationId, selectedParticipant: K })] }) : null), v ? (0, i.jsx)(l.Spinner, { className: a()(U.iframe, { [U.pipModeShort]: $ && !w, [U.pipModeTall]: $ && w }) }) : (0, i.jsx)(g.EmbedIFrameWithLoadingBackground, { allowPopups: (0, C.allowPopups)(x), referrerPolicy: D.APPLICATIONS_WITH_NO_REFFERER.has(B.applicationId) ? "no-referrer" : "origin", url: B.url, queryParams: er, className: a()(U.iframe, { [U.pipModeShort]: $ && !w, [U.pipModeTall]: $ && w, [U.pipNonInteractive]: $ && !(null === (n = B.config) || void 0 === n ? void 0 : n.useInteractivePIP) }), shouldRefocus: !$ && H }), !$ && (0, i.jsx)(L.TileOverlay, { participantsOpen: Z, showToggleParticipants: !1, channelId: s.id })] }) } }) } t.default = e => { let { channel: t, ...n } = e, { isLoading: r } = (0, v.useEmbeddedActivityLifecycle)(t); return (0, i.jsx)(w, { channel: t, isLoading: r, ...n }) } }, 748492: function(e, t, n) { "use strict"; n.r(t), n.d(t, { InteractivePIPHeader: function() { return k }, PIPOverlay: function() { return b }, TextActivityPIPOverlay: function() { return G }, TileOverlay: function() { return w } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("846027"), u = n("40851"), d = n("835473"), _ = n("221888"), c = n("788983"), E = n("189771"), I = n("560688"), T = n("618158"), f = n("922745"), S = n("871499"), h = n("402113"), A = n("800965"), m = n("157813"), N = n("25827"), p = n("131951"), O = n("285952"), C = n("605403"), R = n("808268"), g = n("602623"), L = n("349619"), v = n("981631"), D = n("231338"), M = n("689938"), y = n("221343"), P = n("376838"); function U(e) { let { onClick: t, isExpanded: n } = e; return (0, i.jsx)(S.default, { iconClassName: s()(y.arrowIcon, { [y.arrowIconExpanded]: n }), onClick: t, iconComponent: C.default, label: n ? M.default.Messages.PICTURE_IN_PICTURE_COLLAPSE : M.default.Messages.PICTURE_IN_PICTURE_EXPAND }) } function b(e) { var t, n; let { channel: r, applicationId: s, onMouseDown: o, onMouseMove: S, onMouseLeave: m, onJumpToChannel: C, idle: R, selectedParticipant: g } = e, M = (0, u.useAppContext)() === v.AppContext.POPOUT, U = (0, a.useStateFromStores)([p.default], () => p.default.isVideoEnabled()), b = (0, a.useStateFromStores)([p.default], () => Object.values(p.default.getVideoDevices())[0]), G = !1 === (null === (t = null == b ? void 0 : b.disabled) || void 0 === t || t), w = (0, d.default)([s])[0], k = (0, E.default)(r), B = e => { l.default.setVideoEnabled(e) }; return (0, i.jsxs)("div", { className: P.videoControls, onMouseMove: S, onMouseDown: o, onMouseLeave: m, children: [(0, i.jsx)("div", { className: P.topControls, children: (0, i.jsx)(f.PictureInPictureHeader, { idle: R, title: null !== (n = null == w ? void 0 : w.name) && void 0 !== n ? n : r.name, onJumpToChannel: C, preventIdleComponent: T.default }) }), (0, i.jsxs)("div", { className: P.bottomControls, children: [(0, i.jsxs)(O.default, { grow: 0, shrink: 1, basis: "50%", align: O.default.Align.CENTER, children: [(0, i.jsx)(N.default, { className: y.leftPipIcon, enabled: U, cameraUnavailable: !G, hasPermission: k, onChange: B, onCameraUnavailable: () => { G ? B(!0) : (0, I.default)() } }), (0, i.jsx)(T.default, { children: (0, i.jsx)(_.default, { channelId: r.id, guildId: r.getGuildId(), className: P.__invalid_leftTrayIcon, participant: g, compact: !0 }) })] }), (0, i.jsxs)(O.default, { grow: 0, shrink: 1, justify: O.default.Justify.END, basis: "50%", align: O.default.Align.CENTER, children: [M ? null : (0, i.jsx)(A.default, { className: y.rightPipIcon, popoutOpen: !1, onOpenPopout: () => { (0, L.default)(() => c.openChannelCallPopout(r)) }, onClosePopout: D.NOOP_NULL }), (0, i.jsx)(h.default, { applicationId: s, channelId: r.id, className: y.rightPipIcon })] })] })] }) } function G(e) { var t; let { channel: n, applicationId: r, onMouseDown: a, onMouseMove: l, onMouseLeave: u, onJumpToChannel: _, idle: c, users: E } = e, I = (0, d.default)([r])[0]; return (0, i.jsxs)(o.Clickable, { className: s()(P.videoControls, P.videoControlsTextActivity), onMouseMove: l, onMouseDown: a, onMouseLeave: u, onDoubleClick: _, children: [(0, i.jsx)("div", { className: s()(P.topControls), children: (0, i.jsx)(f.PictureInPictureHeader, { idle: c, title: null !== (t = null == I ? void 0 : I.name) && void 0 !== t ? t : n.name, onJumpToChannel: _, preventIdleComponent: T.default }) }), (0, i.jsxs)("div", { className: P.bottomControls, children: [(0, i.jsx)(g.default, { renderIcon: !1, users: E, size: 24, max: 3, className: y.__invalid_userSummaryContainer }), (0, i.jsx)(h.default, { applicationId: r, channelId: n.id, iconClassName: y.leaveActivityIcon, isActive: !0 })] })] }) } function w(e) { let { channelId: t, participantsOpen: n, showToggleParticipants: r } = e; return r ? (0, i.jsx)(m.default, { channelId: t, isParticipantsOpen: n, className: y.participantsButton }) : null } function k(e) { var t; let { onMouseDown: n, onMouseMove: r, onMouseLeave: a, showControls: o, applicationId: l, channel: u, onJumpToChannel: _, onToggleHeight: c, isExpanded: E, hideExpandedButton: I } = e, S = (0, d.default)([l])[0]; return (0, i.jsx)("div", { className: y.pipHeader, onMouseMove: r, onMouseDown: n, onMouseLeave: a, children: (0, i.jsxs)("div", { className: s()(P.topControls, y.pipHeaderContent, { [y.pipHeaderContentOpen]: o }), children: [!o && (0, i.jsx)(R.default, { className: y.menuIcon, width: 12, height: 12 }), o && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(f.PictureInPictureHeader, { idle: !o, title: null !== (t = null == S ? void 0 : S.name) && void 0 !== t ? t : u.name, onJumpToChannel: _, preventIdleComponent: T.default }), (0, i.jsxs)("div", { className: y.pipHeaderButtonsRight, children: [I ? null : (0, i.jsx)(U, { isExpanded: E, onClick: c }), (0, i.jsx)(h.default, { applicationId: l, channelId: u.id, iconClassName: y.leaveActivityIcon })] })] })] }) }) } }, 850827: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("512722"), o = n.n(a), l = n("442837"), u = n("481060"), d = n("730749"), _ = n("726542"), c = n("750154"), E = n("592125"), I = n("594174"), T = n("979651"), f = n("285952"), S = n("543595"), h = n("503438"), A = n("802856"), m = n("952561"), N = n("606925"), p = n("719216"), O = n("429589"), C = n("276149"), R = n("636245"), g = n("697761"), L = n("611459"), v = n("544671"), D = n("757182"), M = n("910424"), y = n("981631"), P = n("620932"); t.default = (0, d.default)(e => { let { activity: t, embeddedActivity: n, user: r, applicationStream: a, className: d, guildId: U, channelId: b, source: G, color: w = u.Button.Colors.WHITE, look: k = u.Button.Looks.OUTLINED, type: B, onAction: V, isEmbedded: x = !1 } = e, F = (0, m.default)(), H = (0, l.useStateFromStores)([I.default], () => { let e = I.default.getCurrentUser(); return o()(null != e, "UserActivityActions: currentUser cannot be undefined"), e }), Y = B === S.Types.PROFILE || B === S.Types.PROFILE_V2 || B === S.Types.SIMPLIFIED_PROFILE, j = B === S.Types.STREAM_PREVIEW || null != a, W = B === S.Types.SIMPLIFIED_PROFILE || B === S.Types.BITE_SIZE_POPOUT, K = (0, h.default)(t), z = Y ? f.default.Align.END : f.default.Align.STRETCH, Z = K || j ? f.default.Direction.HORIZONTAL : f.default.Direction.VERTICAL, X = (null == t ? void 0 : t.type) === y.ActivityTypes.HANG_STATUS, Q = (0, l.useStateFromStores)([T.default, E.default], () => { var e; return X ? E.default.getChannel(null === (e = T.default.getVoiceStateForUser(r.id)) || void 0 === e ? void 0 : e.channelId) : null }), q = Z === f.default.Direction.VERTICAL; return (0, i.jsx)(f.default, { grow: 0, align: z, direction: Z, wrap: q ? f.default.Wrap.WRAP : f.default.Wrap.NO_WRAP, className: s()(d, P.buttonsWrapper, q ? P.vertical : P.horizontal), children: (() => { if ((0, A.default)(t)) return (0, i.jsx)(N.default, { platform: _.default.get(y.PlatformTypes.XBOX), look: k, color: w, onAction: V }, "ConnectPlatformActivityButton"); if ((null == t ? void 0 : t.platform) === y.ActivityGamePlatforms.PS4 || (null == t ? void 0 : t.platform) === y.ActivityGamePlatforms.PS5) return (0, i.jsx)(N.default, { look: k, color: w, platform: _.default.get(y.PlatformTypes.PLAYSTATION), onAction: V }, "ConnectPlatformActivityButton"); if (K) { let e = (0, i.jsx)(v.default, { activity: t, user: r, guildId: U, channelId: b, source: G, look: k, color: w, onAction: V }, "spotify-activity-sync-button"), n = (0, i.jsx)(L.default, { activity: t, user: r, source: G, look: k, color: w, onAction: V }, "spotify-activity-play-button"); return W ? (0, i.jsxs)(i.Fragment, { children: [e, n] }) : (0, i.jsxs)(i.Fragment, { children: [n, e] }) } if ((0, c.isStageActivity)(t)) { let e = (0, c.unpackStageChannelParty)(t); return null == e ? null : (0, i.jsx)(R.default, { guildId: e.guildId, channelId: e.channelId, color: w, look: k, isProfile: Y, onAction: V }, e.channelId) } return j ? (0, i.jsx)(M.default, { isCurrentUser: H.id === r.id, color: w, look: k, applicationStream: a, onAction: V }, "watch-button") : X && null != Q ? (0, i.jsx)(C.default, { color: w, look: k, hangStatusChannel: Q, onAction: V }, "hang-status-button") : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(D.default, { activity: t, color: w, look: k, onAction: V }, "watch-button"), (0, i.jsx)(O.default, { activity: t, embeddedActivity: n, currentEmbeddedApplication: F, user: r, isCurrentUser: H.id === r.id, color: w, look: k, isEmbedded: x, onAction: V }, "join-activity-button"), (0, i.jsx)(g.default, { activity: t, user: r, color: w, look: k, onAction: V }, "notify-button"), (0, i.jsx)(p.default, { user: r, color: w, look: k, activity: t, onAction: V }, "custom-activity-button")] }) })() }) }) }, 915863: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("427782"); function l(e) { let { className: t, size: n, ...r } = e; return (0, i.jsx)(a.Button, { className: s()(o.button, t), size: s()(o.buttonSize, n), ...r }) } }, 606925: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("231757"), a = n("553795"), o = n("915863"), l = n("689938"), u = n("605690"); function d(e) { let { platform: t, color: n, look: d, onAction: _ } = e; return (0, r.useStateFromStores)([a.default], () => a.default.getAccounts().some(e => e.type === t.type)) ? null : (0, i.jsx)(o.default, { onClick: () => { null == _ || _(), (0, s.default)({ platformType: t.type, location: "Activity Action" }) }, color: n, look: d, fullWidth: !0, children: (0, i.jsxs)("div", { className: u.flex, children: [(0, i.jsx)("img", { alt: "", className: u.platformIcon, src: t.icon.whiteSVG }), l.default.Messages.USER_ACTIVITY_CONNECT_PLATFORM.format({ platform: t.name })] }) }, "connect-platform-activity") } }, 719216: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("763472"), s = n("49012"), a = n("591759"), o = n("915863"); function l(e) { let { activity: t, color: n, user: l, look: u, onAction: d } = e; if ((null == t ? void 0 : t.buttons) == null || t.buttons.length < 1) return null; async function _(e, t, n) { try { let i = await (0, r.getMetadata)(e, t); if (i.button_urls.length <= n) return; let o = i.button_urls[n]; if ("string" != typeof o) return; let l = a.default.safeParseWithQuery(o); if (null == l || null == l.protocol || null == l.hostname) return; (0, s.handleClick)({ href: a.default.format(l), trusted: !1 }) } catch (e) {} } return (0, i.jsx)(i.Fragment, { children: t.buttons.map((e, r) => (0, i.jsx)(o.default, { color: n, look: u, onClick: () => { null == d || d(), _(t, l.id, r) }, children: e }, "customButton-".concat(r))) }) } }, 429589: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return F } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("278323"), l = n("224706"), u = n("287734"), d = n("2052"), _ = n("906732"), c = n("835473"), E = n("592745"), I = n("592125"), T = n("757266"), f = n("650774"), S = n("430824"), h = n("283595"), A = n("496675"), m = n("699516"), N = n("944486"), p = n("594174"), O = n("979651"), C = n("181106"), R = n("417363"), g = n("358085"), L = n("804739"), v = n("566620"), D = n("317381"), M = n("638880"), y = n("255621"), P = n("452634"), U = n("527805"), b = n("620662"), G = n("275920"), w = n("513202"), k = n("915863"), B = n("701488"), V = n("981631"), x = n("689938"); function F(e) { var t, n; let { activity: F, embeddedActivity: H, currentEmbeddedApplication: Y, isCurrentUser: j, color: W, look: K, user: z, onAction: Z, isEmbedded: X = !1 } = e, { analyticsLocations: Q } = (0, _.default)(), [q, J] = r.useState(!1), $ = (0, s.useStateFromStores)([p.default], () => p.default.getCurrentUser()), ee = null !== (t = null == H ? void 0 : H.applicationId) && void 0 !== t ? t : null == F ? void 0 : F.application_id, et = (0, P.default)({ channelId: null == H ? void 0 : H.channelId, userId: z.id, activity: F }), en = (0, s.useStateFromStores)([h.default, E.default, R.default, T.default], () => { let e; return (null == H ? void 0 : H.applicationId) != null ? e = H.applicationId : (null == F ? void 0 : F.application_id) != null && (e = F.application_id), X || null != e && (0, L.isLaunchable)({ LibraryApplicationStore: h.default, LaunchableGameStore: E.default, DispatchApplicationStore: R.default, ConnectedAppsStore: T.default, applicationId: e }) }), ei = (0, s.useStateFromStores)([D.default], () => Array.from(D.default.getSelfEmbeddedActivities().values()).some(e => { let { applicationId: t, channelId: n } = e; return (t === (null == F ? void 0 : F.application_id) || t === (null == H ? void 0 : H.applicationId)) && n === et })), er = (0, s.useStateFromStores)([C.default], () => null != F && null != F.application_id && C.default.getState(F.application_id, V.ActivityActionTypes.JOIN) === V.ActivityActionStates.LOADING), [es] = (0, c.default)((null == H ? void 0 : H.applicationId) != null ? [null == H ? void 0 : H.applicationId] : (null == F ? void 0 : F.application_id) != null ? [null == F ? void 0 : F.application_id] : []), ea = (0, U.useEmbeddedActivityJoinability)({ userId: z.id, activity: F, channelId: et, application: es }), eo = (0, s.useStateFromStores)([I.default, S.default, f.default, m.default, N.default, O.default, A.default], () => null != H ? ea === U.EmbeddedActivityJoinability.CAN_JOIN : null != F ? (0, y.default)({ user: z, activity: F, application: es, channelId: et, currentUser: $, isEmbedded: X, ChannelStore: I.default, GuildStore: S.default, GuildMemberCountStore: f.default, RelationshipStore: m.default, SelectedChannelStore: N.default, VoiceStateStore: O.default, PermissionStore: A.default }) : void 0), el = (0, s.useStateFromStores)([D.default], () => Array.from(D.default.getSelfEmbeddedActivities().values()).some(e => e.applicationId === (null == H ? void 0 : H.applicationId) && e.channelId === (null == H ? void 0 : H.channelId))), eu = (0, d.useAnalyticsContext)(), ed = !g.isPlatformEmbedded, e_ = (0, b.default)(F, V.ActivityFlags.JOIN) || X; if (null == H || !e_ || null == H.applicationId) return null; let ec = !j || X && !el, eE = ec && (ed || en) && !q && !ei && (!X || eo), eI = null; ec ? !ed && !en && null != F && (eI = x.default.Messages.USER_ACTIVITY_NOT_DETECTED.format({ name: F.name })) : eI = x.default.Messages.USER_ACTIVITY_CANNOT_JOIN_SELF; let eT = null !== (n = H.launchId) && void 0 !== n ? n : null == F ? void 0 : F.session_id, ef = async (e, t) => { var n; null != eT && null != ee && (await l.default.join({ userId: e.id, sessionId: eT, applicationId: ee, channelId: N.default.getVoiceChannelId(), messageId: null, intent: B.ActivityIntent.PLAY, embedded: (0, b.default)(t, V.ActivityFlags.EMBEDDED) }), (0, G.default)({ type: V.AnalyticsGameOpenTypes.JOIN, userId: e.id, applicationId: ee, partyId: null != t ? null == t ? void 0 : null === (n = t.party) || void 0 === n ? void 0 : n.id : "", locationObject: eu.location, analyticsLocations: Q })) }, eS = async () => { let e = !1; if (X) { var t; if (!eo || null == et || null == ee) return; e = await (0, M.default)({ applicationId: null !== (t = null == F ? void 0 : F.application_id) && void 0 !== t ? t : H.applicationId, currentEmbeddedApplication: Y, activityChannelId: et, locationObject: eu.location, embeddedActivitiesManager: w.default, analyticsLocations: Q }) } if (!e) { let e; eo && (null == Z || Z(), ef(z, F)), J(!0), null != et && null != ee ? e = await v.sendEmbeddedActivityInviteUser({ channelId: et, applicationId: ee, userId: z.id, location: V.AnalyticsLocations.PROFILE_POPOUT }) : null != F && (e = await o.default.sendActivityInviteUser({ type: V.ActivityActionTypes.JOIN_REQUEST, userId: z.id, activity: F, location: V.AnalyticsLocations.PROFILE_POPOUT })), null != e && u.default.selectPrivateChannel(e.id) } }, eh = eo ? x.default.Messages.JOIN : x.default.Messages.USER_ACTIVITY_ACTION_ASK_TO_JOIN; return X && (eh = x.default.Messages.EMBEDDED_ACTIVITIES_JOIN_ACTIVITY), el && (eh = x.default.Messages.EMBEDDED_ACTIVITIES_JOINED), (0, i.jsx)(a.Tooltip, { text: eI, children: e => { let { onMouseEnter: t, onMouseLeave: n } = e; return (0, i.jsx)(k.default, { onClick: eS, onMouseEnter: t, onMouseLeave: n, color: W, look: K, disabled: !eE, submitting: er, fullWidth: !0, children: eh }) } }, "join") } }, 276149: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("287734"), a = n("19780"), o = n("626135"), l = n("915863"), u = n("981631"), d = n("689938"); function _(e) { let { className: t, color: n, look: _, hangStatusChannel: c, onAction: E } = e, I = (0, r.useStateFromStores)([a.default], () => a.default.getChannelId() === c.id); return (0, i.jsx)(l.default, { className: t, disabled: I, onClick: () => { null == E || E(), s.default.selectVoiceChannel(c.id), o.default.track(u.AnalyticEvents.HANG_STATUS_CTA_CLICKED, { source: "UserProfilePopout", guild_id: c.guild_id, channel_id: c.id }) }, color: n, look: _, fullWidth: !0, children: d.default.Messages.PROFILE_JOIN_VOICE_CHANNEL }, "join-hang") } }, 636245: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("922482"), l = n("979651"), u = n("915863"), d = n("689938"), _ = n("262470"); t.default = e => { let { guildId: t, channelId: n, color: r, look: c, isProfile: E, onAction: I } = e, T = (0, a.useStateFromStores)([l.default], () => l.default.isInChannel(n), [n]); return (0, i.jsx)(u.default, { className: s()(_.button, { [_.popout]: !E }), color: r, look: c, disabled: T, onClick: () => { null == I || I(), o.connectOrLurkStage(t, n) }, fullWidth: !0, children: d.default.Messages.STAGE_CHANNEL_JOIN_BUTTON }, "stage") } }, 697761: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("710845"), s = n("620662"), a = n("915863"), o = n("981631"), l = n("689938"); function u(e) { let { activity: t, user: n, look: u, color: d, onAction: _ } = e; return (0, s.default)(t, o.ActivityFlags.INSTANCE) ? (0, i.jsx)(a.default, { look: u, color: d, onClick: () => { null == _ || _(), new r.default("UserActivityActions").log("notify", n.id, t) }, fullWidth: !0, children: l.default.Messages.USER_ACTIVITY_ACTION_NOTIFY_ME }, "notify") : null } }, 611459: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("246841"), s = n("620662"), a = n("503438"), o = n("981631"), l = n("427782"); function u(e) { let { activity: t, user: n, source: u, look: d, color: _, onAction: c } = e; return null != t && (0, s.default)(t, o.ActivityFlags.PLAY) && (0, a.default)(t) ? (0, i.jsx)(r.default, { className: l.button, size: l.buttonSize, look: d, color: _, fullWidth: !0, activity: t, user: n, source: u, onAction: c }, "play") : null } }, 544671: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("557711"), s = n("620662"), a = n("503438"), o = n("981631"), l = n("427782"); function u(e) { let { activity: t, user: n, guildId: u, channelId: d, source: _, look: c, color: E, onAction: I } = e; return null != t && (0, s.default)(t, o.ActivityFlags.SYNC) && (0, a.default)(t) ? (0, i.jsx)(r.default, { className: l.button, size: l.buttonSize, look: c, color: E, user: n, activity: t, guildId: null != u ? u : void 0, channelId: d, source: _, onAction: I }, "sync") : null } }, 757182: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("655922"), s = n("420660"), a = n("915863"), o = n("689938"); function l(e) { let { activity: t, color: n, look: l, onAction: u } = e; return (0, s.default)(t) ? (0, i.jsx)(a.default, { onClick: () => { null == u || u(); let e = (0, r.default)(t); return window.open(null != e ? e : void 0) }, color: n, look: l, fullWidth: !0, children: o.default.Messages.WATCH }, "play-activity") : null } }, 910424: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }), n("47120"); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("572691"), o = n("287734"), l = n("872810"), u = n("40851"), d = n("102172"), _ = n("199902"), c = n("592125"), E = n("167580"), I = n("761374"), T = n("585483"), f = n("915863"), S = n("981631"), h = n("689938"), A = n("663237"); function m(e) { let { isCurrentUser: t, color: n, look: m, applicationStream: N, onAction: p } = e, { activeStream: O, watchingOtherStream: C } = (0, r.useStateFromStoresObject)([_.default], () => ({ activeStream: _.default.getActiveStreamForApplicationStream(N), watchingOtherStream: null != N && _.default.getAllActiveStreamsForChannel(N.channelId).filter(e => { let { ownerId: t } = e; return t !== N.ownerId }).length > 0 })), R = (0, r.useStateFromStores)([c.default], () => c.default.getChannel(null == N ? void 0 : N.channelId)), [g, L] = (0, d.useCanWatchStream)(R), v = (0, u.useWindowDispatch)(), D = null != O && null != N && O.state !== S.ApplicationStreamStates.ENDED && O.ownerId === N.ownerId, M = e => { null != N && (null == p || p(), o.default.selectVoiceChannel(N.channelId), !D && (0, l.watchStreamAndTransitionToStream)(N, { forceMultiple: e }), v.dispatch(S.ComponentActions.POPOUT_CLOSE), T.ComponentDispatch.dispatch(S.ComponentActions.MODAL_CLOSE), a.default.popAll()) }; if (null == N) return null; let y = (0, d.getStreamCTAString)(L); t ? y = h.default.Messages.WATCH_STREAM_STREAMING : D && (y = h.default.Messages.WATCH_STREAM_WATCHING); let P = { color: n, look: m }; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)(f.default, { disabled: t || D || !g, onClick: () => M(!1), ...P, fullWidth: !0, children: [(0, i.jsx)(I.default, { className: A.streamIcon }), y] }, "play"), C && !D ? (0, i.jsx)(s.Tooltip, { text: h.default.Messages.STREAM_WATCH_MULTIPLE_TOOLTIP, children: e => (0, i.jsx)(f.default, { ...e, onClick: () => { var t; null === (t = e.onClick) || void 0 === t || t.call(e), M(!0) }, ...P, className: A.iconButton, size: A.iconButtonSize, children: (0, i.jsx)(E.default, { className: A.iconSize }) }) }) : null] }) } }, 349619: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("153867"), a = n("468026"), o = n("740492"), l = n("689938"); function u(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : () => {}, n = () => { s.default.updatedUnsyncedSettings({ disableEmbeddedActivityPopOutAlert: !0 }), e() }; o.default.disableEmbeddedActivityPopOutAlert ? e() : (0, r.openModal)(r => (0, i.jsx)(a.default, { confirmText: l.default.Messages.EMBEDDED_ACTIVITIES_YEP, secondaryConfirmText: l.default.Messages.DONT_ASK_AGAIN, title: l.default.Messages.EMBEDDED_ACTIVITIES_CAREFUL, cancelText: l.default.Messages.EMBEDDED_ACTIVITIES_NVM, onConfirm: e, onConfirmSecondary: n, onCancel: t, body: l.default.Messages.EMBEDDED_ACTIVITIES_POP_OUT_WARNING, ...r })) } }, 719296: function(e, t, n) { "use strict"; function i(e, t) { return "activityembed:".concat(e, ":").concat(t) } n.r(t), n.d(t, { default: function() { return i } }) }, 958185: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("981631"); function r(e) { let { LayerStore: t, PopoutWindowStore: n } = e, r = t.hasLayers(), s = n.getWindowOpen(i.PopoutWindowKeys.CHANNEL_CALL_POPOUT); return r && !s } }, 350064: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useEmbeddedActivityLifecycle: function() { return l } }); var i = n("470079"), r = n("566620"), s = n("246106"), a = n("797398"), o = n("513202"); let l = e => { let { userActivity: t, inActivity: n } = (0, s.default)(e.id), l = o.default; return (0, a.default)({ channel: e, userActivity: t, inActivity: n, embeddedActivitiesManager: l }), i.useEffect(() => () => { (null == t ? void 0 : t.applicationId) != null && (0, r.disconnectEmbeddedActivity)(e.id, null == t ? void 0 : t.applicationId) }, [e.id, null == t ? void 0 : t.applicationId]), { isLoading: !n } } }, 723359: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { AGE_GATE_REGISTER_TIMEOUT_MS: function() { return o }, AgeGateAnalyticAction: function() { return r }, AgeGateSource: function() { return i }, EXISTING_USER_AGE_GATE_MODAL_KEY: function() { return u }, NEW_USER_AGE_GATE_MODAL_KEY: function() { return l } }); let o = 2 * n("70956").default.Millis.HOUR, l = "new-user-age-gate-modal", u = "existing-user-age-gate-modal"; (s = i || (i = {})).AUTH = "Register Age Gate", s.NEW_USER_FLOW = "NUF", s.CLAIM_ACCOUNT = "Claim Age Gate", s.NSFW_CHANNEL = "NSFW Channel", s.NSFW_SERVER = "NSFW Server", s.NSFW_SERVER_INVITE = "NSFW Server Invite", s.NSFW_VOICE_CHANNEL = "NSFW Voice Channel", s.FAMILY_CENTER = "Family Center", s.REGISTER = "Register", s.DEEP_LINK_PROMPT = "Deep Link Prompt", s.UNSPECIFIED = "Unspecified", (a = r || (r = {})).AGE_GATE_OPEN = "AGE_GATE_OPEN", a.AGE_GATE_CLOSE = "AGE_GATE_CLOSE", a.AGE_GATE_SUBMITTED = "AGE_GATE_SUBMITTED", a.AGE_GATE_SUCCESS = "AGE_GATE_SUCCESS", a.AGE_GATE_FAILURE = "AGE_GATE_FAILURE", a.AGE_GATE_UNDERAGE = "AGE_GATE_UNDERAGE", a.AGE_GATE_PREVENT_UNDERAGE_REGISTRATION = "AGE_GATE_PREVENT_UNDERAGE_REGISTRATION", a.AGE_GATE_LOGOUT_UNDERAGE_NEW_USER = "AGE_GATE_LOGOUT_UNDERAGE_NEW_USER" }, 844889: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getSession: function() { return _ }, setSessionExtendingEnabled: function() { return d }, timestampOrZero: function() { return E } }); var i = n("153832"), r = n("433517"); let s = "LATEST_SESSION_TIMESTAMP", a = "LATEST_SESSION_UUID", o = "LATEST_SESSION_INITIALIZED_TIMESTAMP", l = Promise.resolve(), u = !1; function d(e) { u = e } function _() { return l = l.then(async () => { let e = await c(); if (null == e || function(e) { return 18e5 + e.lastUsed - Date.now() <= 0 }(e)) { if (!u) return null; let t = { uuid: (0, i.v4)(), initialized: Date.now(), lastUsed: Date.now() }; r.Storage.set(a, t.uuid), r.Storage.set(o, t.initialized.toString()), r.Storage.set(s, Date.now().toString()), e = t } else u && r.Storage.set(s, Date.now().toString()); return e }) } async function c() { let e = await r.Storage.getAfterRefresh(a), t = await r.Storage.getAfterRefresh(o).then(E), n = await r.Storage.getAfterRefresh(s).then(E); return null != e && null != t ? { uuid: e, initialized: t, lastUsed: n } : null } function E(e) { return null != e ? Number(e) : 0 } }, 100527: function(e, t, n) { "use strict"; var i, r; n.r(t), (r = i || (i = {})).POPOUT_WINDOW = "popout window", r.OVERLAY = "overlay", r.NOTICE = "notice", r.PREMIUM_UPSELL_TOOLTIP = "premium upsell tooltip", r.BADGE = "badge", r.USER_SETTINGS = "user settings", r.USER_SETTINGS_MENU = "user settings menu", r.USER_SETTINGS_GIFT_INVENTORY = "user settings gift inventory", r.ACCOUNT = "account", r.TEXT_AND_IMAGES = "text and images", r.GUILD_SETTINGS = "guild settings", r.OVERVIEW = "overview", r.STICKERS = "stickers", r.VANITY_URL = "vanity url", r.URI_SCHEME = "uri scheme", r.AKA = "aka", r.MESSAGES = "messages", r.NEW_MESSAGE_COMPOSER = "new message composer", r.NOTIFICATIONS = "notifications", r.NOTIFICATION_CENTER = "notification center", r.PUSH_NOTIFICATION = "push notification", r.FAMILY_CENTER = "family center", r.FRIENDS_LIST = "friends list", r.EXPANDED_FRIENDS_LIST = "expanded friends list", r.CONTACTS_LIST = "contacts list", r.ADD_FRIENDS = "add friends", r.FRIEND_REQUESTS = "friend requests", r.SUGGESTED_FRIENDS = "suggested friends", r.BLOCKED_USERS = "blocked users", r.PREMIUM_MARKETING = "premium marketing", r.PREMIUM_MARKETING_PLAN_COMPARISON = "premium marketing plan comparison", r.PREMIUM_PAYMENT_MODAL = "premium payment modal", r.PREMIUM_UPSELL_ALERT = "premium upsell alert", r.PREMIUM_UPSELL_MODAL = "premium upsell modal", r.PREMIUM_SETTINGS = "premium settings", r.PAYMENT_FLOW_TEST_PAGE = "payment flow test page", r.PREMIUM_PAYMENT_ACTION_SHEET = "premium payment action sheet", r.CHANNEL_CALL = "channel call", r.CHANNEL_CALL_CONNECTING_SCREEN = "channel call connecting screen", r.CHANNEL_DETAILS = "channel details", r.RTC_PANEL = "rtc panel", r.SOUNDBOARD_BUTTON = "soundboard button", r.SOUNDBOARD_POPOUT = "soundboard popout", r.SOUNDBOARD_WHEEL = "soundboard wheel", r.SOUNDBOARD_ACTION_SHEET = "soundboard action sheet", r.GIFT_BUTTON = "gift button", r.EXPRESSION_SUGGESTIONS = "expression suggestions", r.EMOJI_PICKER = "emoji picker", r.STICKER_PICKER = "sticker picker", r.STICKER_POPOUT = "sticker popout", r.PREMIUM_UPSELL = "premium upsell", r.EMPTY_STATE = "empty state", r.SUBSCRIPTION_DETAILS = "subscription details", r.SUBSCRIPTION_HEADER = "subscription header", r.ACCOUNT_CREDIT_BANNER = "account credit banner", r.PREMIUM_UNCANCEL_MODAL = "premium uncancel modal", r.PAST_DUE_ONE_TIME_PAYMENT_METHOD_BANNER = "past due one time payment method banner", r.STREAM_QUALITY_INDICATOR = "stream quality indicator", r.PREMIUM_TIER_0_TRIAL_ENDING_NOTICE = "premium tier 0 trial ending notice", r.PREMIUM_TIER_2_TRIAL_ENDING_NOTICE = "premium tier 2 trial ending notice", r.BOOSTED_GUILD_PERKS_MODAL = "boosted guild perks modal", r.GUILD_BOOSTING_PREMIUM_UPSELL = "guild boosting premium upsell", r.RPC = "rpc", r.BILLING_STANDALONE = "billing standalone", r.GUILD_CHANNEL_LIST = "guild channel list", r.GUILD_CHANNEL_LIST_FOOTER = "guild channel list footer", r.STICKER_MESSAGE = "sticker message", r.CHANNEL_TEXT_AREA = "channel text area", r.HEADER_BAR = "header bar", r.GUILD_ROLE_SUBSCRIPTION_CANCELLATION_MODAL = "guild role subscription cancellation modal", r.GUILD_ROLE_SUBSCRIPTION_PURCHASE_SYSTEM_MESSAGE = "guild role subscription purchase system message", r.GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL = "guild role subscription emoji picker upsell", r.GUILD_ROLE_SUBSCRIPTION_EMOJI_TEXT_POPOVER_UPSELL = "guild role subscription emoji text popover upsell", r.PREMIUM_SUBSCRIPTION_CANCELLATION_MODAL = "premium subscription cancellation modal", r.APPLICATION_SUBSCRIPTION_CANCELLATION_MODAL = "application subscription cancellation modal", r.PENDING_PLAN_CHANGE_NOTICE = "pending plan change notice", r.SUBSCRIPTION_CANCEL_DOWNGRADE_MODAL = "subscription cancel downgrade modal", r.GUILD_HEADER = "guild header", r.GUILD_BANNER = "guild banner", r.GUILD_BANNER_NOTICE = "guild banner notice", r.GUILD_BOOST_PURCHASE_MODAL = "guild boost purchase modal", r.GUILD_BOOST_CANCELLATION_MODAL = "guild boost cancellation modal", r.GUILD_BOOST_UNCANCELLATION_MODAL = "guild boost uncancellation modal", r.GUILD_BOOSTING_PROGRESS_BAR = "guild boosting progress bar", r.GUILD_BOOSTING_TIER_NONE = "guild boosting tier none", r.GUILD_BOOSTING_TIER_1 = "guild boosting tier 1", r.GUILD_BOOSTING_TIER_2 = "guild boosting tier 2", r.GUILD_BOOSTING_TIER_3 = "guild boosting tier 3", r.GUILD_BOOSTING_UPSELL_BANNER = "guild boosting upsell banner", r.GUILD_BOOSTING_SIDEBAR_DISPLAY = "guild boosting sidebar display", r.GUILDS_LIST = "guilds list", r.ACTIVITY_CHANNEL_SELECTOR = "activity channel selector", r.ACTIVITY_DIRECTORY = "activity directory", r.ACTIVITY_TILE = "activity tile", r.ACTIVITY_UPSELL = "activity upsell", r.ACTIVITY_VOICE_CONTROLS_TOGGLE = "activity voice controls toggle", r.INSTANT_INVITE_MODAL = "instant invite modal", r.IMAGE_CROPPING_MODAL = "image cropping modal", r.GIF_PICKER = "gif picker", r.EXTERNAL_INVITE_LINK_MODAL = "external invite link modal", r.INVITE_MODAL = "invite modal", r.INVITE_EMBED = "invite embed", r.NEW_GUILD_BUTTON = "new guild button", r.CHARACTER_COUNT = "character count", r.DM_CHANNEL = "dm channel", r.GUILD_CHANNEL = "guild channel", r.FORUM_CHANNEL = "forum channel", r.FILE_UPLOAD_POPOUT = "file upload popout", r.VOICE_USER = "voice user", r.USER_LIST_ITEM = "user list item", r.EXECUTED_COMMAND = "executed command", r.EMOJI = "emoji", r.AVATAR = "avatar", r.USERNAME = "username", r.MEMBER_LIST = "member list", r.USER_MENTION = "user mention", r.ROLE_MENTION = "role mention", r.CONNECTIONS_ROLE_POPOUT = "connections role popout", r.PROFILE = "profile", r.PROFILE_MODAL = "profile modal", r.SIMPLIFIED_PROFILE_MODAL = "simplified profile modal", r.PROFILE_POPOUT = "profile popout", r.BITE_SIZE_PROFILE_POPOUT = "bite size profile popout", r.PROFILE_PANEL = "profile panel", r.GUILD_PROFILE = "guild profile", r.EDIT_AVATAR = "edit avatar", r.EDIT_BANNER = "edit banner", r.CHAT_INPUT = "chat input", r.CHAT_SIDEBAR = "chat sidebar", r.CREATE_THREAD = "create thread", r.PREMIUM_PREVIEW_UPSELL_HEADER = "premium preview upsell header", r.PREMIUM_UPSELL_OVERLAY = "premium upsell overlay", r.SELECT_IMAGE_MODAL = "select image modal", r.VIDEO_BACKGROUND_OPTIONS = "video background options", r.VIDEO_BACKGROUND_IMAGE_OPTION = "video background image option", r.VIDEO_BACKGROUND_CUSTOM_UPSELL = "video background custom upsell", r.CAMERA_PREVIEW = "camera preview", r.HOME_PAGE_PREMIUM_TAB = "home page premium tab", r.HOME_PAGE_SHOP_TAB = "home page shop tab", r.QUEST_HOME_PAGE = "quest home page", r.PREMIUM_MARKETING_SURFACE = "premium marketing surface", r.PREMIUM_MARKETING_HERO_CTA = "premium marketing hero cta", r.PREMIUM_MARKETING_REFERALL_PROGRAM_PROGRESS_BAR = "premium marketing referral program progress bar", r.PREMIUM_MARKETING_REFERALL_PROGRAM_SHARE_MODAL = "premium marketing referral program share modal", r.PREMIUM_MARKETING_TIER_1_CTA = "premium marketing tier 1 cta", r.PREMIUM_MARKETING_TIER_2_CTA = "premium marketing tier 2 cta", r.PREMIUM_MARKETING_LOCALIZED_PRICING_TIER_2_CTA = "premium marketing localized pricing tier 2 cta", r.PREMIUM_MARKETING_SURFACE_HERO_CTA = "premium marketing surface hero cta", r.PREMIUM_MARKETING_SURFACE_TIER_2_CTA = "premium marketing surface tier 2 cta", r.PREMIUM_MARKETING_SURFACE_TIER_1_CTA = "premium marketing surface tier 1 cta", r.PREMIUM_MARKETING_TIER_CARD = "premium marketing tier card", r.PREMIUM_MARKETING_PERK_CARD = "premium marketing perk card", r.PREMIUM_MARKETING_FEATURE = "premium marketing feature", r.PREMIUM_MARKETING_COMPARISON_TABLE = "premium marketing comparison table", r.PREMIUM_MARKETING_FOOTER = "premium marketing footer", r.PREMIUM_MARKETING_GIFT_SECTION = "premium marketing gift section", r.CHANNEL_CALL_ACTION_BAR = "channel call action bar", r.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_EMOJI = "aggregate premium upsell modal emoji", r.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_PROFILE_CUSTOMIZATION = "aggregate premium upsell modal profile customization", r.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_HD_STREAMING = "aggregate premium upsell modal hd streaming", r.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_LARGER_FILE_UPLOADS = "aggregate premium upsell modal larger file uploads", r.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_BOGO = "aggregate premium upsell modal bogo", r.CHANNEL_EXPANDED_CONTROLS = "channel expanded controls", r.VOICE_CONTROL_TRAY = "voice control tray", r.ACTIVE_NOW_COLUMN = "active now column", r.CONTEXT_MENU = "context menu", r.CHANNEL_ACTIVITY_FEED_VOICE_MENU = "channel activity feed voice menu", r.CHANNEL_AUDIT_LOG_MENU = "channel audit log menu", r.CHANNEL_CATEGORY_MENU = "channel category menu", r.CHANNEL_LIST_DIRECTORY_CHANNEL_MENU = "channel list menu", r.CHANNEL_LIST_STORE_CHANNEL_MENU = "channel list store channel menu", r.CHANNEL_LIST_TEXT_CHANNEL_MENU = "channel list text channel menu", r.CHANNEL_LIST_THREAD_MENU = "channel list thread menu", r.CHANNEL_LIST_VOICE_CHANNEL_MENU = "channel list voice channel menu", r.CHANNEL_TITLE_MENU = "channel title menu", r.GROUP_DM_MENU = "group dm menu", r.AUDIT_LOG_USER_MENU = "audit log user menu", r.BANNED_USER_MENU = "banned user menu", r.DM_USER_MENU = "dm user menu", r.GROUP_DM_USER_MENU = "group dm user menu", r.GUILD_CHANNEL_USER_MENU = "guild channel user menu", r.GUILD_MODERATION_USER_MENU = "guild moderation user menu", r.GUILD_MODERATION_RAID_MENU = "guild moderation raid menu", r.GUILD_SETTINGS_USER_MENU = "guild settings user menu", r.GUILD_USER_MENU = "guild user menu", r.UNKNOWN_USER_MENU = "unknown user menu", r.THREAD_USER_MENU = "thread user menu", r.USER_GENERIC_MENU = "user generic menu", r.USER_PROFILE_ACTIONS_MENU = "user profile actions menu", r.USER_PROFILE_OVERFLOW_MENU = "user profile overflow menu", r.VOICE_ACTION_SHEET = "voice action sheet", r.FOCUSED_VOICE_CONTROLS = "focused voice controls", r.MASKED_LINK = "masked link", r.LAST_NITRO_HOST_ACTION_SHEET = "last nitro host action sheet", r.LAST_NITRO_HOST_LEFT_ACTION_SHEET = "last nitro host left action sheet", r.PREMIUM_TIER_0_ANNOUNCEMENT_ACTION_SHEET = "premium tier 0 announcement action sheet", r.PS_VOICE_CONNECT_UPSELL = "ps voice connect upsell", r.PROFILE_THEME_UPSELL_MODAL = "profile theme upsell modal", r.EDIT_AVATAR_DECORATION_MODAL = "edit avatar decoration modal", r.EDIT_AVATAR_DECORATION_SHEET = "edit avatar decoration sheet", r.EDIT_PROFILE_EFFECT_MODAL = "edit profile effect modal", r.EDIT_PROFILE_EFFECT_ACTION_SHEET = "edit profile effect action sheet", r.COLLECTIBLES_MOBILE_SHOP_MARKETING_SHEET = "collectibles mobile shop marketing sheet", r.ACCOUNT_PROFILE_POPOUT = "account profile popout", r.CHANNEL_CALL_OVERFLOW_ACTION_SHEET = "channel_call_overflow_action_sheet", r.USER_SETTINGS_TRY_OUT_PREMIUM = "user settings try out premium", r.ACTIVITY_COACH_MARK_NITRO = "activity coach mark nitro", r.ACTIVITY_COACH_MARK_BOOSTING = "activity coach mark boosting", r.ACTIVITY_COACH_MARK_HALLOWEEN_2022 = "activity coach mark halloween 2022", r.PREMIUM_TRIAL_TUTORIAL_COACHMARK = "premium trial tutorial coachmark", r.PREMIUM_TRIAL_TUTORIAL_TOOLTIP = "premium trial tutorial tooltip", r.ACTIVITY_COACH_MARK_BASH_OUT = "activity coach mark bash out", r.ACTIVITY_COACH_MARK_POKER = "activity coach mark poker", r.ACTIVITIES_COACH_MARK_GAME_NIGHT = "activities coach mark game night", r.STAGE_CHANNEL_CALL = "stage channel call", r.REQUEST_TO_SPEAK = "request to speak", r.STAGE_VIDEO_LIMIT = "stage video limit", r.ACTIVITIES_MINI_SHELF = "activities mini shelf", r.ACTIVITIES_MINI_SHELF_BANNER = "activities mini shelf banner", r.APP_LAUNCHER = "app launcher", r.APP_DETAIL = "app detail", r.VC_TILE_ACTIVITY_INVITE = "vc tile activity invite", r.VC_TILE_ACTIVITY_SUGGESTION = "vc tile activity suggestion", r.VC_TILE_ACTIVITY_SHELF_BUTTON = "vc tile activity shelf button", r.BURST_REACTION_TUTORIAL_COACHMARK = "super reaction tutorial coachmark", r.MESSAGE_REACTIONS = "message reactions", r.MESSAGE_PREVIEW_REACTIONS = "message preview reactions", r.APP_ICON_EDITOR = "app icon editor", r.APP_ICON_NEW_STYLES_COACHMARK = "app icon new styles coachmark", r.CLIENT_THEMES_EDITOR = "client themes editor", r.CLIENT_THEMES_THEME_SELECTOR = "client themes theme selector", r.AUTOMOD_PROFILE_QUARANTINE_ALERT = "automod profile quarantine alert", r.SHARE_NITRO_EMBED = "share nitro embed", r.EMBEDDED_ACTIVITY_MESSAGE = "embedded activity message", r.REFERRAL_TRIALS_COMPOSER_BUTTON = "referral trials composer button", r.REFERRAL_TRIALS_POPOUT = "referral trials popout", r.PREMIUM_MARKETING_ANNOUNCEMENT_MODAL = "premium marketing announcement modal", r.PREMIUM_MARKETING_PAGE_BANNER = "premium marketing page banner", r.ACTIVITY_BOOKMARK = "activity bookmark", r.ACTIVITY_BOOKMARK_LAUNCHER = "activity bookmark launcher", r.ACTIVITY_INSTANCE_EMBED = "activity instance embed", r.ACTIVITY_DETAIL_PAGE = "activity detail page", r.ACTIVITIES_PAGE = "activities page", r.ACTIVITIES_PAGE_NOTIFICATION_DOT = "activities page cta", r.ACTIVITIES_PAGE_WHATS_NEW_TILE = "activities page whats new tile", r.VOICE_PANEL = "voice panel", r.VOICE_PANEL_PRE_JOIN = "voice panel pre-join content", r.ACTIVITIES_IM_FEELING_LUCKY = "activities im feeling lucky", r.ACTIVITIES_HAPPENING_NOW = "activities happening now", r.MEDIA_VIEWER = "media viewer", r.MESSAGE_LONG_PRESS_MENU = "message long press menu", r.CHANNEL_LONG_PRESS_MENU = "channel long press menu", r.COLLECTIBLES_SHOP = "collectibles shop", r.COLLECTIBLES_SHOP_FULLSCREEN = "collectibles shop fullscreen", r.COLLECTIBLES_SHOP_INDEX_PAGE = "collectibles shop index page", r.COLLECTIBLES_SHOP_CARD = "collectibles shop card", r.COLLECTIBLES_SHOP_CARD_PREVIEW_BUTTON = "collectibles shop card preview button", r.COLLECTIBLES_SHOP_DETAILS_MODAL = "collectibles shop details modal", r.COLLECTIBLES_SHOP_PROFILE_PREVIEW = "collectibles shop long form profile preview", r.COLLECTIBLES_PROFILE_SETTINGS_UPSELL = "collectibles profile settings upsell", r.COLLECTIBLES_PAYMENT_MODAL = "collectibles payment modal", r.COLLECTIBLES_COLLECTED_MODAL = "collectibles collected modal", r.COLLECTIBLES_USER_POPOUT_UPSELL = "collectibles user popout upsell", r.COLLECTIBLES_FEATURE_EDUCATION_TOOLTIP = "collectibles feature education tooltip", r.PREMIUM_SUBSCRIPTION_APRIL_CAMPAIGN_MODAL = "premium subscription april campaign modal", r.PREMIUM_BILLING_INFO = "premium billing info", r.PREMIUM_SUBSCRIPTION_DETAILS = "premium subscription details", r.APP_SUBSCRIPTION_PAYMENT_SOURCE_WITH_INVOICE = "application subscription payment source with invoice", r.GUILD_BOOST_SLOT_CANCELLATION_MODAL_CURRENT_INVOICE_PREVIEW = "guild boost slot cancellation modal current invoice preview", r.GUILD_BOOST_SLOT_CANCELLATION_MODAL_RENEWAL_INVOICE_PREVIEW = "guild boost slot cancellation modal renewal invoice preview", r.GUILD_BOOSTING_REVIEW_PRORATED = "guild boosting review prorated", r.GUILD_BOOSTING_REVIEW_RENEWAL = "guild boosting review renewal", r.GUILD_ROLE_SUBSCRIPTION_PAYMENT_SOURCE_WITH_INVOICE = "guild role subscription payment source with invoice", r.PREMIUM_PLAN_SELECT = "premium_plan_select", r.CANCEL_INVOICE_PREVIEW = "cancel_invoice_preview", r.PREMIUM_SUBSCRIPTION_FINE_PRINT_CONTENT = "premium subscription fine print content", r.SUBSCRIPTION_INVOICE_FOOTER = "subscription invoice footer", r.BILLING_SWITCH_PLAN_IMMEDIATE_PRORATED_INVOICE_PREVIEW = "billing switch plan immediate prorated invoice preview", r.BILLING_SWITCH_PLAN_IMMEDIATE_RENEWAL_INVOICE_PREVIEW = "billing switch plan immediate renewal invoice preview", r.GUILD_BOOSTING_PLAN_SELECT = "GUILD_BOOSTING_PLAN_SELECT", r.MEMBER_SAFETY_PAGE = "member safety page", r.GUILD_SETTINGS_MEMBERS_PAGE = "guild settings members page", r.GUILD_MEMBER_MOD_VIEW = "guild member mod view", r.GUILD_MEMBER_APPLICATION_REVIEW = "guild member application review", r.GUILD_PRODUCT_EMBED_CARD = "guild product embed card", r.GUILD_PRODUCT_INFO_MODAL = "guild product info modal", r.GUILD_PRODUCT_PAYMENT_MODAL = "guild product payment modal", r.GUILD_SHOP_PAGE = "guild shop page", r.ACTIVITY_SHELF_ACTIVITY_DETAILS = "activity shelf activty details", r.MESSAGE_REMIX_TAG = "message remix tag", r.MESSAGE_REMIX_BUTTON = "message remix button", r.HAPPENING_NOW_EMBEDDED_ACTIVITY = "happening now embedded activity", r.CLIPS_SETTINGS = "clips settings", r.CLIPS_GALLERY = "clips gallery", r.CLIPS_GALLERY_ITEM = "clips gallery item", r.CLIPS_EDITOR = "clips editor", r.CLIPS_SHARE_MODAL = "clips share modal", r.CHANNEL_ATTACH_BUTTON = "channel attach button", r.PREMIUM_TRIAL_OFFER_ACTION_SHEET = "premium trial offer action sheet", r.PREMIUM_SUBSCRIBER_NITRO_HOME = "premium subscriber nitro home", r.CLYDE_PROFILE_SHARE_MODAL = "clyde profile share modal", r.GUILD_EVENT_MODAL = "guild event modal", r.GUILD_EVENT_CARD = "guild event card", r.EVENT_SETTINGS = "event settings", r.GUILD_EVENT_RSVP_BUTTON = "guild event rsvp button", r.GIFT_CODE_MODAL = "gift code modal", r.APP_STOREFRONT = "app storefront", r.SHOP_PRODUCT_DETAILS = "shop product details", r.SEARCH_MEMBERS = "search members", r.POLL_VOTES = "poll votes", r.YOU_SCREEN = "you screen", r.BILLING_PAUSED_SUBSCRIPTION_INVOICE_RESUME_PREVIEW = "billing payment modal paused subscription resume invoice preview", r.BILLING_PAUSED_SUBSCRIPTION_INVOICE_RENEWAL_PREVIEW = "billing payment modal paused subscription renewal invoice preview", r.CLAN_GUILD_PROFILE = "clan guild profile", r.CLAN_TAG = "clan tag", r.CLAN_DISCOVERY = "clan discovery", r.CLAN_REAPPLY = "clan reapply", r.COLLECTIBLES_LIGHTNING_CHECKOUT = "collectibles lightning checkout", t.default = i }, 98302: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("846519"), r = n("147913"), s = n("603113"), a = n("594190"), o = n("592125"), l = n("131951"), u = n("19780"), d = n("885110"), _ = n("606304"), c = n("938475"), E = n("70956"), I = n("367907"), T = n("981631"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = 1 * E.default.Millis.MINUTE; class h extends r.default { _initialize() { __OVERLAY__ ? this.stores = new Map : (this.stores = new Map().set(_.default, () => this._handleSpeakingStoreChanged()).set(u.default, () => this._handleRTCConnectionStoreChanged()), this._reset()) } _reset() { this._currentUserSpeaking = !1, this._anyoneElseSpeaking = !1, null != this._reportInterval && (this._reportInterval.stop(), this._reportInterval = null) } _trackStartSpeaking() { if (this._currentUserSpeaking) { let e = u.default.getChannelId(), t = u.default.getGuildId(), n = o.default.getChannel(e), i = null == n ? void 0 : n.isBroadcastChannel(); (0, I.trackWithMetadata)(T.AnalyticEvents.START_SPEAKING, { mode: l.default.getMode(), priority: _.default.isCurrentUserPrioritySpeaking(), channel: e, server: t, channel_id: e, guild_id: t, is_broadcast: i, rtc_connection_id: u.default.getRTCConnectionId(), media_session_id: u.default.getMediaSessionId(), voice_state_count: c.default.countVoiceStatesForChannel(this._voiceChannelId), ...this.getGameMetadata(), ...u.default.getPacketStats() }) } } _trackStartListening() { if (l.default.isDeaf() || !this._anyoneElseSpeaking) return; let e = u.default.getChannelId(), t = u.default.getGuildId(), n = o.default.getChannel(e), i = null == n ? void 0 : n.isBroadcastChannel(); (0, I.trackWithMetadata)(T.AnalyticEvents.START_LISTENING, { mute: l.default.isMute(), anyone_priority: _.default.isAnyonePrioritySpeaking(), channel: e, server: t, channel_id: e, guild_id: t, is_broadcast: i, rtc_connection_id: u.default.getRTCConnectionId(), media_session_id: u.default.getMediaSessionId(), voice_state_count: c.default.countVoiceStatesForChannel(this._voiceChannelId), ...this.getGameMetadata() }) } _terminate() { this._reset(), _.default.removeChangeListener(this._handleSpeakingStoreChanged), u.default.removeChangeListener(this._handleRTCConnectionStoreChanged) } getGameMetadata() { let e = d.default.findActivity(e => e.type === T.ActivityTypes.PLAYING), t = a.default.getCurrentGameForAnalytics(); return { game_platform: (0, s.default)(e), game_name: null != e ? e.name : null, game_exe_name: null != t ? t.exeName : null, game_id: null != e ? e.application_id : null } } constructor(...e) { super(...e), f(this, "_currentUserSpeaking", !1), f(this, "_anyoneElseSpeaking", !1), f(this, "_voiceChannelId", void 0), f(this, "_reportInterval", void 0), f(this, "_handleRTCConnectionStoreChanged", () => { let e = u.default.getChannelId(); if (this._voiceChannelId !== e) { if (this._voiceChannelId = e, null == e) { this._reset(); return } null == this._reportInterval && (this._reportInterval = new i.Interval, this._reportInterval.start(S, () => { this._trackStartSpeaking(), this._trackStartListening() })) } }), f(this, "_handleSpeakingStoreChanged", () => { let e = _.default.isCurrentUserSpeaking(); this._currentUserSpeaking !== e && (this._currentUserSpeaking = e, this._trackStartSpeaking()); let t = _.default.isAnyoneElseSpeaking(); this._anyoneElseSpeaking !== t && (this._anyoneElseSpeaking = t, this._trackStartListening()) }) } } t.default = new h }, 367907: function(e, t, n) { "use strict"; n.r(t), n.d(t, { collectChannelAnalyticsMetadata: function() { return U }, collectChannelAnalyticsMetadataFromId: function() { return P }, collectGuildAnalyticsMetadata: function() { return y }, collectVoiceAnalyticsMetadata: function() { return b }, getChannelOpenedMetadata: function() { return w }, getCustomStatusMetadata: function() { return B }, getVoiceStateMetadata: function() { return k }, trackWithMetadata: function() { return G } }); var i = n("392711"), r = n.n(i), s = n("149765"), a = n("50244"), o = n("686660"), l = n("131704"), u = n("314897"), d = n("592125"), _ = n("984933"), c = n("650774"), E = n("271383"), I = n("430824"), T = n("131951"), f = n("496675"), S = n("158776"), h = n("19780"), A = n("306680"), m = n("944486"), N = n("914010"), p = n("9156"), O = n("979651"), C = n("626135"), R = n("70956"), g = n("700785"), L = n("546416"), v = n("981631"), D = n("176505"); function M(e) { let t = 0; for (let n in e) t += 1; return t } function y(e) { var t; if (null == e) return null; let n = I.default.getGuild(e); if (null == n) return null; let i = I.default.getRoles(n.id), r = u.default.getId(), s = E.default.getMember(e, r), a = _.default.getChannels(e), o = a[_.GUILD_SELECTABLE_CHANNELS_KEY].length, l = a[_.GUILD_VOCAL_CHANNELS_KEY].length, d = O.default.getVoiceStates(e); return { guild_id: n.id, guild_size_total: c.default.getMemberCount(e), guild_num_channels: o + l, guild_num_text_channels: o, guild_num_voice_channels: l, guild_num_roles: M(i), guild_member_num_roles: null != s ? s.roles.length : 0, guild_member_perms: String(null !== (t = f.default.getGuildPermissions(n)) && void 0 !== t ? t : g.NONE), guild_is_vip: n.hasFeature(v.GuildFeatures.VIP_REGIONS), is_member: null != s, num_voice_channels_active: M(d) } } function P(e) { if (null == e) return null; let t = d.default.getChannel(e); return null == t ? null : U(t) } function U(e) { var t; if (null == e) return null; let n = !1, i = e.getGuildId(); if (null != i) { let t = e => { if (null == e) return !1; let t = e.permissionOverwrites[i]; return null != t && s.has(t.deny, v.Permissions.VIEW_CHANNEL) }; n = l.THREAD_CHANNEL_TYPES.has(e.type) && null != e.parent_id ? t(d.default.getChannel(e.parent_id)) : t(e) } return { channel_id: e.id, channel_type: e.type, channel_size_total: e.isPrivate() ? e.recipients.length : 0, channel_member_perms: String(null != i && null !== (t = f.default.getChannelPermissions(e)) && void 0 !== t ? t : g.NONE), channel_hidden: n } } function b(e) { if (null == e) return null; let t = d.default.getChannel(e); if (null == t) return null; let n = T.default.isVideoEnabled(), i = h.default.getMediaSessionId(); return { channel_id: t.id, channel_type: t.type, guild_id: t.getGuildId(), media_session_id: i, ...k(t.getGuildId(), t.id, n), ...(0, L.getVoiceAnalyticsMetadataAdditional)() } } function G(e) { var t, n, i, r, s; let a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, o = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (C.default.isThrottled(e)) return; let l = !("location" in a) || a.location !== v.AnalyticsLocations.GUILD_CREATE_INVITE_SUGGESTION, u = "guild_id" in a ? a.guild_id : l ? N.default.getGuildId() : null, _ = "channel_id" in a ? a.channel_id : l ? m.default.getChannelId(u) : null, c = d.default.getChannel(_); let E = (t = c, n = u, null == t ? null != n ? n : null : t.isPrivate() ? null : null !== (r = null !== (i = t.getGuildId()) && void 0 !== i ? i : n) && void 0 !== r ? r : null); let I = { ...a, ...y(E), ...null != u && null != _ && (0, D.isStaticChannelRoute)(_) ? (s = 0, { channel_static_route: _, channel_hidden: !1 }) : U(c) }; C.default.track(e, I, { flush: o }) } function w(e) { let t = d.default.getChannel(e); if (null == t || null == t.guild_id) return { channel_id: e }; let n = I.default.getGuild(t.guild_id); if (null == n) return { channel_id: e }; let i = A.default.getSnapshot(e, 10 * R.default.Millis.SECOND); return { channel_id: e, channel_was_unread: i.unread, channel_mention_count: i.mentionCount, channel_is_muted: p.default.isChannelMuted(t.guild_id, t.id), channel_is_nsfw: t.isNSFW(), channel_resolved_unread_setting: p.default.resolveUnreadSetting(t), channel_preset: (0, o.presetFromSettings)(p.default.resolveUnreadSetting(t), p.default.resolvedMessageNotifications(t)), guild_id: t.guild_id, guild_was_unread: i.guildUnread, guild_mention_count: i.guildMentionCount, guild_is_muted: p.default.isMuted(t.guild_id), guild_resolved_unread_setting: p.default.resolveGuildUnreadSetting(n), guild_preset: (0, o.presetFromSettings)(p.default.resolveGuildUnreadSetting(n), p.default.getMessageNotifications(t.guild_id)), parent_id: t.parent_id, parent_channel_type: t.parentChannelThreadType, has_pending_member_action: (0, a.hasPendingMemberAction)(t.guild_id, e), can_send_message: f.default.can(v.Permissions.SEND_MESSAGES, t) } } function k(e, t, n) { let i = { voice_state_count: 0, video_stream_count: 0, video_enabled: n }; return r()(O.default.getVoiceStates(e)).filter(e => e.channelId === t).filter(e => e.userId !== u.default.getId()).forEach(e => { i.voice_state_count++, (e.selfVideo || e.selfStream) && i.video_stream_count++ }), i } function B(e, t) { let n = { custom_status_count: 0 }; return r()(O.default.getVoiceStates(e)).forEach(e => { e.channelId === t && null != S.default.findActivity(e.userId, e => e.type === v.ActivityTypes.CUSTOM_STATUS) && n.custom_status_count++ }), n } t.default = { trackWithMetadata: G, getVoiceStateMetadata: k } }, 546416: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getVoiceAnalyticsMetadataAdditional: function() { return r } }); var i = n("594190"); function r() { let e = i.default.getCurrentGameForAnalytics(); return { game_name: null != e ? e.name : null, game_id: null != e ? e.id : null } } }, 565384: function(e, t, n) { "use strict"; n.r(t), n.d(t, { cleanupImpression: function() { return l }, getImpressionStack: function() { return c }, getLocation: function() { return _ }, setCurrentImpression: function() { return o }, setDebugTrackedData: function() { return u }, useImpressionStore: function() { return d } }), n("47120"); var i = n("652874"), r = n("990547"); let s = Object.freeze({ debugTrackedData: null, impressions: [] }), a = (0, i.default)(e => s), o = e => { a.setState(t => ({ impressions: [...t.impressions, e] })) }, l = e => { a.setState(t => ({ impressions: t.impressions.filter(t => t.sequenceId !== e.sequenceId) })) }, u = (e, t) => { a.setState(() => ({ debugTrackedData: { name: e, ...t } })) }, d = a; function _() { let e = {}; return a.getState().impressions.forEach(t => { t.type === r.ImpressionTypes.PAGE ? e.page = t.name : e.section = t.name }), e } function c() { return a.getState().impressions } }, 731429: function(e, t, n) { "use strict"; n.r(t), n.d(t, { collectThreadMetadata: function() { return d } }); var i = n("703656"), r = n("260483"), s = n("144140"), a = n("131704"), o = n("496675"), l = n("709054"), u = n("981631"); function d(e) { var t, n, d, _, c; let E = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return null != e && a.THREAD_CHANNEL_TYPES.has(e.type) ? { location: E ? (0, i.getLastRouteChangeSource)() : void 0, thread_approximate_member_count: r.default.getMemberCount(e.id), thread_approximate_message_count: s.default.getCount(e.id), thread_archived: (null === (t = e.threadMetadata) || void 0 === t ? void 0 : t.archived) === !0, thread_locked: null !== (_ = null === (n = e.threadMetadata) || void 0 === n ? void 0 : n.locked) && void 0 !== _ && _, thread_auto_archive_duration_minutes: null !== (c = null === (d = e.threadMetadata) || void 0 === d ? void 0 : d.autoArchiveDuration) && void 0 !== c ? c : 0, thread_approximate_creation_date: l.default.extractTimestamp(e.id), can_send_message: o.default.can(u.Permissions.SEND_MESSAGES, e), parent_channel_type: e.parentChannelThreadType } : null } }, 188471: function(e, t, n) { "use strict"; n.r(t), n.d(t, { drainClickstream: function() { return o }, trackClickstream: function() { return a } }), n("47120"), n("653041"); var i = n("626135"), r = n("435749"); let s = new Map; function a(e, t) { !s.has(e) && s.set(e, []); let { default: i } = n("15379"), r = i(e, t); if (null != r) { var a; null === (a = s.get(e)) || void 0 === a || a.push(r) } } function o() { if (!(0, r.clickstreamExperimentEnabled)()) { s.clear(); return } let { default: e } = n("672513"); for (let [t, n] of s) i.default.track(t, e(t, n)); s.clear() } }, 435749: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clickstreamExperimentEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_clickstream_analytics", label: "Clickstream Analytics", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Clickstream Analytics", config: { enabled: !0 } }] }); function r() { let { enabled: e } = i.getCurrentConfig({ location: "clickstream" }); return e } }, 672513: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("411104"); var i = n("981631"); function r(e, t) { let n; let r = new Date; switch (e) { case i.AnalyticEvents.CHANNEL_OPENED_CLICKSTREAM: return { time_minus: (n = t).map(e => r.getTime() - e.timestamp.getTime()), channel_ids: n.map(e => e.channelId), channel_types: n.map(e => e.channelType), rtc_states: n.map(e => e.rtc_state) }; case i.AnalyticEvents.GUILD_VIEWED_CLICKSTREAM: return { time_minus: (n = t).map(e => r.getTime() - e.timestamp.getTime()), guild_ids: n.map(e => e.guildId), rtc_states: n.map(e => e.rtc_state) }; case i.AnalyticEvents.FRIENDS_LIST_VIEWED_CLICKSTREAM: return { time_minus: (n = t).map(e => r.getTime() - e.timestamp.getTime()), rtc_states: n.map(e => e.rtc_state), tab_opened: n.map(e => e.tab_opened), num_friends: n.map(e => e.num_friends), now_playing_visible: n.map(e => e.now_playing_visible), now_playing_num_cards: n.map(e => e.now_playing_num_cards) }; default: throw Error("getClicksteamDrainEvent: Unknown event: ".concat(e)) } } }, 15379: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("411104"); var i = n("592125"), r = n("19780"), s = n("981631"), a = n("176505"); function o(e, t) { let n; switch (e) { case s.AnalyticEvents.CHANNEL_OPENED_CLICKSTREAM: var o, l; let u = (n = t).channelId; switch (u) { case a.StaticChannelRoute.CHANNEL_BROWSER: case a.StaticChannelRoute.GUILD_HOME: case a.StaticChannelRoute.GUILD_SHOP: case a.StaticChannelRoute.MEMBER_APPLICATIONS: case a.StaticChannelRoute.ROLE_SUBSCRIPTIONS: case a.StaticChannelRoute.CUSTOMIZE_COMMUNITY: case a.StaticChannelRoute.MEMBER_SAFETY: case a.StaticChannelRoute.GUILD_ONBOARDING: return } let d = null !== (l = null === (o = i.default.getChannel(u)) || void 0 === o ? void 0 : o.type) && void 0 !== l ? l : s.ChannelTypes.UNKNOWN; return { timestamp: new Date, rtc_state: r.default.getState(), channelId: u, channelType: d }; case s.AnalyticEvents.GUILD_VIEWED_CLICKSTREAM: let _ = (n = t).guildId; return { timestamp: new Date, rtc_state: r.default.getState(), guildId: _ }; case s.AnalyticEvents.FRIENDS_LIST_VIEWED_CLICKSTREAM: return n = t, { timestamp: new Date, rtc_state: r.default.getState(), tab_opened: n.tab_opened, num_friends: n.num_friends, now_playing_visible: n.now_playing_visible, now_playing_num_cards: n.now_playing_num_cards }; default: throw Error("getClickstreamTrackEvent: Unknown event: ".concat(e)) } } }, 906732: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnalyticsLocationProvider: function() { return d }, default: function() { return c } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("348327"), a = n.n(s), o = n("392711"), l = n.n(o); let u = r.createContext([]); function d(e) { let { children: t, value: n } = e; return (0, i.jsx)(u.Provider, { value: n, children: t }) } function _(e, t) { return 0 === t.length ? e : [...e, ...l().flatten(t)] } function c() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; let [s, o] = r.useState(n), l = r.useContext(u), d = r.useMemo(() => _(l, s), [s, l]), c = r.useMemo(() => _(l, s.slice(0, s.length - 1)), [s, l]); return r.useEffect(() => { !a()(n, s) && o(n) }, [n]), { analyticsLocations: d, sourceAnalyticsLocations: c, newestAnalyticsLocation: null !== (e = d[d.length - 1]) && void 0 !== e ? e : null } } }, 702493: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("232567"), a = n("110924"), o = n("314897"); function l() { let [e, t] = (0, r.useStateFromStoresArray)([o.default], () => [o.default.isAuthenticated(), null != o.default.getAnalyticsToken()]), n = (0, a.default)(e); i.useEffect(() => { !n && e && !t && s.fetchCurrentUser({ withAnalyticsToken: !0 }) }, [n, e, t]) } }, 213609: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }); var i = n("470079"), r = n("348327"), s = n.n(r), a = n("97613"), o = n.n(a), l = n("990547"), u = n("570140"), d = n("592125"), _ = n("944486"), c = n("914010"), E = n("626135"), I = n("367907"), T = n("565384"); let f = (0, l.trackMaker)({ analyticEventConfigs: E.AnalyticEventConfigs, dispatcher: u.default, TRACK_ACTION_NAME: "TRACK" }); function S(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { disableTrack: !1, trackOnInitialLoad: !1 }, n = arguments.length > 2 ? arguments[2] : void 0, r = i.useRef(), a = i.useRef(); i.useEffect(() => { let i = !s()(r.current, e); i && (r.current = e); let u = !s()(a.current, n); if (u && (a.current = n), !i && !u) return; let S = { ...e, sequenceId: o()("impression_") }; return ! function(e) { var t, n; let i = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], { name: r, type: s, properties: a } = e; if (e.type === l.ImpressionTypes.MODAL && null == e.name && (0, T.getImpressionStack)().some(e => { var t; return null === (t = e._stackContext) || void 0 === t ? void 0 : t.isSlide })) return; (0, T.setCurrentImpression)(e); let o = null !== (t = null == a ? void 0 : a.guild_id) && void 0 !== t ? t : c.default.getGuildId(), u = null !== (n = null == a ? void 0 : a.channel_id) && void 0 !== n ? n : _.default.getChannelId(o), S = (0, E.expandEventProperties)({ impression_type: s, location: (0, T.getLocation)(), ...(0, I.collectGuildAnalyticsMetadata)(o), ...(0, I.collectChannelAnalyticsMetadata)(d.default.getChannel(u)), ...a }); if (i) { (0, T.setDebugTrackedData)(null, null); return } null != r && null != s && ((0, E.debugLogEvent)(r, S), f(r, S)), (0, T.setDebugTrackedData)(r, S) }(S, t.disableTrack), () => { null != S && (0, T.cleanupImpression)(S) } }, t.trackOnInitialLoad ? [] : void 0) } }, 318885: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getDesktopSourceMetadata: function() { return u }, trackWithOverlayMetadata: function() { return d } }); var i = n("594190"), r = n("131951"), s = n("449224"), a = n("626135"), o = n("367907"), l = n("981631"); function u() { let e, t, n, s, a; let o = r.default.getGoLiveSource(); if (null != o && (e = o.quality.resolution, t = o.quality.frameRate, null != o.desktopSource)) { var l, u; n = o.desktopSource.soundshareSession; let e = null != o.desktopSource.sourcePid ? i.default.getGameForPID(o.desktopSource.sourcePid) : null; s = null !== (l = null == e ? void 0 : e.name) && void 0 !== l ? l : null, a = null !== (u = null == e ? void 0 : e.id) && void 0 !== u ? u : null } return { video_input_resolution: e, video_input_frame_rate: t, soundshare_session: n, share_game_name: s, share_game_id: a } } function d(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = s.default.getGame(); switch (t = { ...t, overlay_game_name: null != i ? i.name : "Unknown Game", overlay_app_id: null != i ? i.id : null }, e) { case l.AnalyticEvents.VOICE_CHANNEL_SELECTED: case l.AnalyticEvents.SETTINGS_PANE_VIEWED: case l.AnalyticEvents.GUILD_VIEWED: case l.AnalyticEvents.CHANNEL_OPENED: return (0, o.trackWithMetadata)(e, t, n); default: return a.default.track(e, t, { flush: n }) } } }, 765717: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("613828"), s = n("990547"), a = n("213609"); function o(e) { var t; let { impressionName: n, impressionProperties: o, disableTrack: l, ...u } = e, d = o; return "function" == typeof d && (d = d(u)), (0, a.default)({ type: s.ImpressionTypes.PAGE, name: n, properties: d }, { disableTrack: l }, [null === (t = u.location) || void 0 === t ? void 0 : t.pathname]), (0, i.jsx)(r.Route, { ...u }) } }, 613413: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("906467"), d = n("857192"), _ = n("441674"), c = n("696202"), E = n("835225"), I = n("117795"), T = n("153850"), f = n("565384"), S = n("169703"); function h() { let { debugTrackedData: e, impressions: t } = (0, f.useImpressionStore)(e => ({ debugTrackedData: e.debugTrackedData, impressions: e.impressions })), n = (0, o.useStateFromStores)([d.default], () => d.default.isAnalyticsDebuggerEnabled), s = (0, o.useStateFromStores)([u.default], () => u.default.isDeveloper), [h, A] = r.useState(!1), { name: m, ...N } = null != e ? e : {}, p = null != m; return s && n ? (0, i.jsx)(T.default, { children: (0, i.jsxs)("div", { className: a()(S.container, { [S.containerMinimized]: h, [S.notTracked]: !p }), children: [(0, i.jsx)(l.Clickable, { className: S.minimizeButton, onClick: () => { A(!h) }, children: h ? (0, i.jsx)(E.default, {}) : (0, i.jsx)(I.default, {}) }), (0, i.jsxs)("div", { className: a()(S.content, { [S.contentMinimized]: h }), children: [(0, i.jsxs)(l.Text, { className: a()(S.label, { [S.notTracked]: !p }), variant: "text-xxs/normal", children: [p ? (0, i.jsx)(_.default, { className: S.iconTracked }) : (0, i.jsx)(c.default, { className: S.iconNotTracked }), null != m ? m : "(untracked)"] }), (0, i.jsx)("div", { className: S.current, children: JSON.stringify(N, void 0, 2) }), (0, i.jsx)(l.Text, { className: a()(S.label, { [S.notTracked]: !p }), variant: "text-xxs/normal", children: "impressions stack" }), (0, i.jsx)("div", { className: S.stack, children: JSON.stringify(t, void 0, 2) })] })] }) }) : null } }, 287328: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("442837"), r = n("348326"), s = n("570140"), a = n("314897"), o = n("261875"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } r.TableId.KvCache, r.TableId.KvCache; class u extends i.Store { initialize() { this.waitFor(a.default) } constructor(...e) { super(...e), l(this, "database", e => o.default.database(null != e ? e : a.default.getId())), l(this, "channels", d(e => new r.GuildEntityDao("guild_channels", r.TableId.KvCache, e))), l(this, "channelsTemp", d(e => new r.GuildDao("guild_channels_temp", r.TableId.KvCache, e))), l(this, "basicChannels", d(e => new r.Dao("basic_channels", r.TableId.KvCache, e))), l(this, "syncedBasicChannels", d(e => new r.Dao("basic_channels_synced", r.TableId.KvCache, e))), l(this, "cache", d(e => new r.Dao("cache", r.TableId.KvCache, e))), l(this, "forceResyncVersion", d(e => new r.Dao("force_resync_version", r.TableId.KvCache, e))), l(this, "emojis", d(e => new r.GuildEntityDao("guild_emojis", r.TableId.KvCache, e))), l(this, "guilds", d(e => new r.EntityDao("guilds", r.TableId.KvCache, e))), l(this, "guildsRequiringDeletedIdsSync", d(e => new r.EntityDao("guilds_requiring_deleted_ids_sync", r.TableId.KvCache, e))), l(this, "messages", d(e => new r.MessageDao("messages", r.TableId.Messages, e))), l(this, "stickers", d(e => new r.GuildEntityDao("guild_stickers", r.TableId.KvCache, e))), l(this, "guildVersions", d(e => new r.EntityDao("guild_versions", r.TableId.KvCache, e))), l(this, "nonGuildVersions", d(e => new r.EntityDao("non_guild_versions", r.TableId.KvCache, e))), l(this, "userSettings", d(e => new r.EntityDao("user_settings", r.TableId.KvCache, e))), l(this, "readStates", d(e => new r.Dao("read_states", r.TableId.KvCache, e))), l(this, "userGuildSettings", d(e => new r.Dao("user_guild_settings", r.TableId.KvCache, e))), l(this, "channelsTransaction", e => this.channels(e.database).upgradeTransaction(e)), l(this, "channelsTempTransaction", e => this.channelsTemp(e.database).upgradeTransaction(e)), l(this, "basicChannelsTransaction", e => this.basicChannels(e.database).upgradeTransaction(e)), l(this, "syncedBasicChannelsTransaction", e => this.syncedBasicChannels(e.database).upgradeTransaction(e)), l(this, "cacheTransaction", e => this.cache(e.database).upgradeTransaction(e)), l(this, "forceResyncVersionTransaction", e => this.forceResyncVersion(e.database).upgradeTransaction(e)), l(this, "emojisTransaction", e => this.emojis(e.database).upgradeTransaction(e)), l(this, "guildsTransaction", e => this.guilds(e.database).upgradeTransaction(e)), l(this, "messagesTransaction", e => this.messages(e.database).upgradeTransaction(e)), l(this, "stickersTransaction", e => this.stickers(e.database).upgradeTransaction(e)), l(this, "guildVersionsTransaction", e => this.guildVersions(e.database).upgradeTransaction(e)), l(this, "nonGuildVersionsTransaction", e => this.nonGuildVersions(e.database).upgradeTransaction(e)), l(this, "userSettingsTransaction", e => this.userSettings(e.database).upgradeTransaction(e)), l(this, "readStatesTransaction", e => this.readStates(e.database).upgradeTransaction(e)), l(this, "userGuildSettingsTransaction", e => this.userGuildSettings(e.database).upgradeTransaction(e)), l(this, "guildsRequiringDeletedIdsSyncTransaction", e => this.guildsRequiringDeletedIdsSync(e.database).upgradeTransaction(e)) } } function d(e) { return function(t) { let n = null != t ? t : o.default.database(a.default.getId()); return null == n ? null : e(n) } } t.default = new u(s.default, {}) }, 86670: function(e, t, n) { "use strict"; n.r(t), n.d(t, { tryLoadAsync: function() { return s }, tryLoadOrResetCacheGateway: function() { return a }, tryLoadOrResetCacheGatewayAsync: function() { return o } }); var i = n("570140"); let r = new(n("710845")).default("TryLoad"); async function s(e) { try { return await e() } catch (e) { return r.log("database load failed.", e), null } } function a(e, t, n) { try { return t() } catch (t) { return r.log("".concat(e, ": exception thrown, resetting socket."), t, t.stack), i.default.dispatch({ type: "RESET_SOCKET", args: { error: t, action: "tryLoadOrResetCacheGateway (".concat(e, ")"), metricAction: "tryLoadOrResetCacheGateway (".concat(null != n ? n : e, ")"), clearCache: !0 } }), null } } async function o(e, t, n) { try { return await t() } catch (t) { return r.log("".concat(e, ": exception thrown, resetting socket."), t, t.stack), i.default.dispatch({ type: "RESET_SOCKET", args: { error: t, action: "tryLoadOrResetCacheGatewayAsync (".concat(e, ")"), metricAction: "tryLoadOrResetCacheGatewayAsync (".concat(null != n ? n : e, ")"), clearCache: !0 } }), null } } }, 489033: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("757143"), n("653041"), n("627494"); var i = n("710845"), r = n("287328"); let s = new i.default("GuildEmojis"); t.default = new class e { async getAsync(e) { let t = performance.now(), n = await r.default.emojis(e).getMapEntries(), i = performance.now(); return s.log("asynchronously loaded in ".concat(i - t, "ms (guilds: ").concat(n.length, ")")), n } handleConnectionOpen(e, t) { for (let n of e.guilds) this.handleOneGuildCreate(n, t) } handleGuildCreate(e, t) { this.handleOneGuildCreate(e.guild, t) } handleGuildUpdate(e, t) { this.replace(e.guild.id, e.guild.emojis, t) } handleGuildDelete(e, t) { this.delete(e.guild.id, t) } handleGuildEmojisUpdate(e, t) { this.replace(e.guildId, e.emojis, t) } handleBackgroundSync(e, t) { e.promisesForBackgroundSyncToWaitOn.push(Promise.all(e.emojis.map(e => { if ("unavailable" === e.dataMode) return Promise.resolve(); "full" === e.dataMode ? (s.verbose("Replacing ".concat(e.entities.length, " emojis for ").concat(e.guildId)), this.replace(e.guildId, e.entities, t)) : (e.updatedEntities.length > 0 || e.deletedEntityIds.length > 0) && (s.verbose("Updating ".concat(e.updatedEntities.length, " and deleting ").concat(e.deletedEntityIds.length, " emojis for ").concat(e.guildId)), this.update(e.guildId, e.updatedEntities, e.deletedEntityIds, t)) }))) } handleOneGuildCreate(e, t) { null != e.emojiUpdates ? this.update(e.id, e.emojiUpdates.writes, e.emojiUpdates.deletes, t) : null != e.emojis && this.replace(e.id, e.emojis, t) } resetInMemoryState() {} replace(e, t, n) { r.default.emojisTransaction(n).replaceAll(e, t) } delete(e, t) { r.default.emojisTransaction(t).delete(e) } update(e, t, n, i) { let s = r.default.emojisTransaction(i); for (let i of (s.putAll(e, t), n)) s.delete(e, i) } constructor() { var e, t, n; e = this, t = "actions", n = { BACKGROUND_SYNC: (e, t) => this.handleBackgroundSync(e, t), CONNECTION_OPEN: (e, t) => this.handleConnectionOpen(e, t), GUILD_CREATE: (e, t) => this.handleGuildCreate(e, t), GUILD_DELETE: (e, t) => this.handleGuildDelete(e, t), GUILD_EMOJIS_UPDATE: (e, t) => this.handleGuildEmojisUpdate(e, t), GUILD_UPDATE: (e, t) => this.handleGuildUpdate(e, t) }, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 856472: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("757143"), n("653041"), n("627494"); var i = n("710845"), r = n("287328"); let s = new i.default("GuildStickers"); t.default = new class e { async getAsync(e) { let t = performance.now(), n = await r.default.stickers(e).getMapEntries(), i = performance.now(); return s.log("asynchronously loaded in ".concat(i - t, "ms (guilds: ").concat(n.length, ")")), n } handleConnectionOpen(e, t) { for (let n of e.guilds) this.handleOneGuildCreate(n, t) } handleGuildCreate(e, t) { this.handleOneGuildCreate(e.guild, t) } handleGuildUpdate(e, t) { this.replace(e.guild.id, e.guild.stickers, t) } handleGuildDelete(e, t) { this.delete(e.guild.id, t) } handleGuildStickersUpdate(e, t) { this.replace(e.guildId, e.stickers, t) } handleBackgroundSync(e, t) { e.promisesForBackgroundSyncToWaitOn.push(Promise.all(e.stickers.map(e => { if ("unavailable" === e.dataMode) return Promise.resolve(); "full" === e.dataMode ? (s.verbose("Replacing ".concat(e.entities.length, " stickers for ").concat(e.guildId)), this.replace(e.guildId, e.entities, t)) : (e.updatedEntities.length > 0 || e.deletedEntityIds.length > 0) && (s.verbose("Updating ".concat(e.updatedEntities.length, " and deleting ").concat(e.deletedEntityIds.length, " stickers for ").concat(e.guildId)), this.update(e.guildId, e.updatedEntities, e.deletedEntityIds, t)) }))) } handleOneGuildCreate(e, t) { null != e.stickers && this.replace(e.id, e.stickers, t), null != e.stickerUpdates && this.update(e.id, e.stickerUpdates.writes, e.stickerUpdates.deletes, t) } resetInMemoryState() {} replace(e, t, n) { r.default.stickersTransaction(n).replaceAll(e, t) } delete(e, t) { r.default.stickersTransaction(t).delete(e) } update(e, t, n, i) { let s = r.default.stickersTransaction(i); for (let i of (s.putAll(e, t), n)) s.delete(e, i) } constructor() { var e, t, n; e = this, t = "actions", n = { BACKGROUND_SYNC: (e, t) => this.handleBackgroundSync(e, t), CONNECTION_OPEN: (e, t) => this.handleConnectionOpen(e, t), GUILD_CREATE: (e, t) => this.handleGuildCreate(e, t), GUILD_DELETE: (e, t) => this.handleGuildDelete(e, t), GUILD_STICKERS_UPDATE: (e, t) => this.handleGuildStickersUpdate(e, t), GUILD_UPDATE: (e, t) => this.handleGuildUpdate(e, t) }, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 406966: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("710845"), r = n("430824"), s = n("287328"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = new i.default("GuildVersions"); t.default = new class e { async getCommittedVersions() { try { let e = s.default.guildVersions(); if (null == e) return {}; let t = (await e.getMany()).map(e => [e.id, e.version]); return Object.fromEntries(null != t ? t : []) } catch (e) { return o.warn("couldn't load guild versions", e), {} } } remove(e, t) { this.deleteWith(e), this.commit(t) } handleBackgroundSync(e, t) { for (let n of e.guilds) "unavailable" !== n.data_mode && this.updateWith(n.id, [n]), null == r.default.getGuild(n.id) && this.remove(n.id, t); this.commit(t) } handleConnectionOpen(e, t) { for (let t of (this.reset(), e.guilds)) this.updateWith(t.id, [t]); this.commit(t) } handleGuildCreate(e, t) { var n; let i = e.guild, r = e.guild.id; this.updateWith(r, [i]), this.updateWith(r, i.emojis), this.updateWith(r, i.stickers), this.updateWith(r, i.channels), this.updateWith(r, null === (n = i.channelUpdates) || void 0 === n ? void 0 : n.writes), this.updateWith(r, Array.isArray(i.roles) ? i.roles : Object.values(i.roles)), this.commit(t) } handleGuildUpdate(e, t) { let n = e.guild, i = e.guild.id; this.updateWith(i, [n]), this.updateWith(i, n.emojis), this.updateWith(i, n.stickers), this.updateWith(i, Array.isArray(n.roles) ? n.roles : Object.values(n.roles)), this.commit(t) } handleGuildDelete(e, t) { this.deleteWith(e.guild.id), this.commit(t) } handleGuildRoleChange(e, t) { this.updateWith(e.guildId, [e.role]), this.commit(t) } handleGuildRoleDelete(e, t) { this.updateWith(e.guildId, [{ version: e.version }]), this.commit(t) } handleGuildEmojisUpdate(e, t) { this.updateWith(e.guildId, e.emojis), this.commit(t) } handleGuildStickersUpdate(e, t) { this.updateWith(e.guildId, e.stickers), this.commit(t) } handleChannelCreate(e, t) { null != e.channel.guild_id && this.updateWith(e.channel.guild_id, [e.channel]), this.commit(t) } handleChannelUpdates(e, t) { for (let t of e.channels) null != t.guild_id && this.updateWith(t.guild_id, [t]); this.commit(t) } handleChannelDelete(e, t) { null != e.channel.guild_id && this.updateWith(e.channel.guild_id, [e.channel]), this.commit(t) } resetInMemoryState() { this.reset() } reset() { this.committed = new Map, this.pending = new Map } deleteWith(e) { this.pending.set(e, null) } updateWith(e, t) { if (null != t) { var n, i; let r = Math.max(null !== (n = this.committed.get(e)) && void 0 !== n ? n : 0, null !== (i = this.pending.get(e)) && void 0 !== i ? i : 0), s = this.computeLatestVersion(r, t); s > r && this.pending.set(e, s) } } computeLatestVersion(e, t) { let n = e; for (let e of t) { var i; n = Math.max(n, null !== (i = e.version) && void 0 !== i ? i : 0) } return n } commit(e) { if (this.pending.size > 0) { let t = s.default.guildVersionsTransaction(e); for (let [e, n] of this.pending) null != n ? (t.put({ id: e, version: n }), this.committed.set(e, n)) : (t.delete(e), this.committed.delete(e)); this.pending.clear() } } constructor() { a(this, "pending", new Map), a(this, "committed", new Map), a(this, "actions", { BACKGROUND_SYNC: (e, t) => this.handleBackgroundSync(e, t), CHANNEL_CREATE: (e, t) => this.handleChannelCreate(e, t), CHANNEL_DELETE: (e, t) => this.handleChannelDelete(e, t), CHANNEL_UPDATES: (e, t) => this.handleChannelUpdates(e, t), CONNECTION_OPEN: (e, t) => this.handleConnectionOpen(e, t), GUILD_CREATE: (e, t) => this.handleGuildCreate(e, t), GUILD_DELETE: (e, t) => this.handleGuildDelete(e, t), GUILD_EMOJIS_UPDATE: (e, t) => this.handleGuildEmojisUpdate(e, t), GUILD_ROLE_CREATE: (e, t) => this.handleGuildRoleChange(e, t), GUILD_ROLE_DELETE: (e, t) => this.handleGuildRoleDelete(e, t), GUILD_ROLE_UPDATE: (e, t) => this.handleGuildRoleChange(e, t), GUILD_STICKERS_UPDATE: (e, t) => this.handleGuildStickersUpdate(e, t), GUILD_UPDATE: (e, t) => this.handleGuildUpdate(e, t) }) } } }, 662896: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("287328"); t.default = new class e { async getAll() { let e = i.default.guildsRequiringDeletedIdsSync(); if (null == e) return new Set; let t = await e.getMany(); return new Set(t.map(e => e.id)) } handleConnectionOpen(e, t) { let { guilds: n } = e, r = n.filter(e => e.unableToSyncDeletes).map(e => ({ id: e.id })); r.length > 0 && i.default.guildsRequiringDeletedIdsSyncTransaction(t).putAll(r) } handleBackgroundSync(e, t) { let { guilds: n } = e, r = n.filter(e => "partial" === e.data_mode && e.unableToSyncDeletes).map(e => ({ id: e.id })); r.length > 0 && i.default.guildsRequiringDeletedIdsSyncTransaction(t).putAll(r) } handleGuildCreate(e, t) { let { guild: n } = e; n.unableToSyncDeletes && i.default.guildsRequiringDeletedIdsSyncTransaction(t).put({ id: n.id }) } handleDeletedEntityIds(e, t) { i.default.guildsRequiringDeletedIdsSyncTransaction(t).delete(e.guild_id) } resetInMemoryState() {} constructor() { var e, t, n; e = this, t = "actions", n = { BACKGROUND_SYNC: (e, t) => this.handleBackgroundSync(e, t), CONNECTION_OPEN: (e, t) => this.handleConnectionOpen(e, t), GUILD_CREATE: (e, t) => this.handleGuildCreate(e, t), DELETED_ENTITY_IDS: (e, t) => this.handleDeletedEntityIds(e, t) }, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 795513: function(e, t, n) { "use strict"; n.r(t); var i = n("710845"), r = n("287328"), s = n("870078"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = new i.default("KvCacheVersion"); t.default = new class e { async okAsync(e) { let t = await r.default.cache(e).get(s.VERSION_TO_SKIP_READING_THE_DATABASE_KEY); return null == t ? null : t === s.VERSION_TO_SKIP_READING_THE_DATABASE } canUseGuildVersions() { return this.hasSuccessfullyConnected ? Promise.resolve(!0) : this.doesDatabaseVersionMatchJsConstants() } async doesDatabaseVersionMatchJsConstants() { let e = r.default.forceResyncVersion(); if (null == e) return !1; let t = await e.get(s.VERSION_TO_FORCE_RESYNCING_ALL_DATA_KEY), n = null == t ? void 0 : t.version; return n === s.VERSION_TO_FORCE_RESYNCING_ALL_DATA || (o.info("KVStore version mismatch: ".concat(n, " vs ").concat(s.VERSION_TO_FORCE_RESYNCING_ALL_DATA)), !1) } handleClear() { this.hasSuccessfullyConnected = !1 } handleConnectionOpen() { this.hasSuccessfullyConnected = !0 } handleWrite(e) { this.hasSuccessfullyConnected = !0, r.default.cacheTransaction(e).put(s.HELLO_KEY, "\uD83D\uDC4B"), r.default.cacheTransaction(e).put(s.VERSION_TO_SKIP_READING_THE_DATABASE_KEY, s.VERSION_TO_SKIP_READING_THE_DATABASE), r.default.forceResyncVersionTransaction(e).put(s.VERSION_TO_FORCE_RESYNCING_ALL_DATA_KEY, { version: s.VERSION_TO_FORCE_RESYNCING_ALL_DATA }) } resetInMemoryState() { this.hasSuccessfullyConnected = !1 } constructor() { a(this, "hasSuccessfullyConnected", !1), a(this, "actions", { BACKGROUND_SYNC: (e, t) => this.handleWrite(t), CONNECTION_OPEN: () => this.handleConnectionOpen(), WRITE_CACHES: (e, t) => this.handleWrite(t) }) } } }, 870078: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HELLO_KEY: function() { return i }, VERSION_TO_FORCE_RESYNCING_ALL_DATA: function() { return o }, VERSION_TO_FORCE_RESYNCING_ALL_DATA_KEY: function() { return s }, VERSION_TO_SKIP_READING_THE_DATABASE: function() { return a }, VERSION_TO_SKIP_READING_THE_DATABASE_KEY: function() { return r } }); let i = "hello", r = "version", s = "force-resync-version", a = 3, o = "stable-53" }, 685736: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("348326"), r = n("710845"), s = n("38618"), a = n("592125"), o = n("287328"), l = n("59480"), u = n("40455"), d = n("989263"), _ = n("513418"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = new r.default("Messages"); class I { static computeUsersAndMembers(e) { (0, _.requireSortedDescending)(e); let t = new Map, n = new Map; for (let i of e) this.addIntoMap(t, i.users, e => e.id), this.addIntoMap(n, i.members, e => e.userId); return [Array.from(t.values()), Array.from(n.values())] } static addIntoMap(e, t, n) { for (let i of t) { let t = n(i), r = e.get(t); (null == r || r.incomplete && !i.incomplete) && e.set(t, i) } } constructor(e) { if (c(this, "connectionId", null), c(this, "users", []), c(this, "members", []), c(this, "messages", []), e.length > 0) { var t; let n = null === (t = e[0]) || void 0 === t ? void 0 : t.connectionId, [i, r] = I.computeUsersAndMembers(e); e.length > 0 && e.every(e => e.connectionId === n) && (this.connectionId = n), this.users = i, this.members = r, this.messages = e.map(e => e.message) } } } t.default = new class e { async startupLoad(e, t, n, i) { let r = o.default.messages(e); return new I(await r.getLatest(t, n, i)) } async load(e, t, n) { let i = a.default.getBasicChannel(t); if (null == t || null == i || !(0, d.isReadableChannel)(i)) return new I([]); { let r = o.default.messages(e); return new I(await r.getLatest(i.guild_id, t, n)) } } handleMessageCreate(e, t) { !e.optimistic && !e.isPushNotification && null == e.sendMessageOptions && (0, d.isReadableChannelId)(e.channelId) && this.upsertOne(e.guildId, e.channelId, e.message, t) } handleMessageUpdate(e, t) { if (null != e.message.id && null != e.message.channel_id)(0, d.isReadableChannelId)(e.message.channel_id) && (function(e) { return null != e.author && null != e.content && null != e.mentions && null != e.timestamp }(e.message) ? this.upsertOne(e.guildId, e.message.channel_id, e.message, t) : this.updateOne(e.guildId, e.message.channel_id, e.message, t)) } handleMessagePreviewsLoaded(e, t) { for (let n of e.messages)(0, d.isReadableChannelId)(n.channel_id) && this.insertStale(e.guildId, n.channel_id, n, t) } handleLoadMessagesSuccess(e, t) { let n = a.default.getBasicChannel(e.channelId); null != n && (0, d.isReadableChannelId)(e.channelId) && this.upsertMany(n.guild_id, e.channelId, e.messages, t) } handleMessageDelete(e, t) { null != e.id && this.deleteOne(e.guildId, e.channelId, e.id, t) } handleMessageDeleteBulk(e, t) { for (let n of e.ids) this.deleteOne(e.guildId, e.channelId, n, t) } handleChannelDelete(e, t) { this.deleteChannel(e.channel.guild_id, e.channel.id, t) } handleGuildDelete(e, t) { !e.guild.unavailable && this.deleteGuild(e.guild.id, t) } resetInMemoryState() {} insertStale(e, t, n, r) { let a = o.default.messagesTransaction(r), u = s.default.lastTimeConnectedChanged(); a.put(e, t, l.KvMessage.fromMessage(e, t, n, u), i.ConflictOptions.Skip) } upsertOne(e, t, n, r) { let a = o.default.messagesTransaction(r), d = s.default.lastTimeConnectedChanged(); a.put(e, t, l.KvMessage.fromMessage(e, t, n, d), i.ConflictOptions.Replace), a.trimChannel(e, t, u.default.saveLimit(t)) } upsertMany(e, t, n, i) { let r = o.default.messagesTransaction(i), a = s.default.lastTimeConnectedChanged(); for (let i of n) r.put(e, t, l.KvMessage.fromMessage(e, t, i, a)); r.trimChannel(e, t, u.default.saveLimit(t)) } async updateOne(e, t, n, i) { if (null == n.id) { E.warn("updateOne: message.id is null; cannot update a message if we do not know its id."); return } let r = o.default.messages(i.database), a = await r.get(e, t, n.id), u = s.default.lastTimeConnectedChanged(); null != a && r.put(e, t, l.KvMessage.fromMessage(e, t, { ...a.message, ...n }, u)) } deleteOne(e, t, n, i) { o.default.messagesTransaction(i).deleteMessage(e, t, n) } deleteChannel(e, t, n) { o.default.messagesTransaction(n).deleteChannel(e, t) } deleteGuild(e, t) { o.default.messagesTransaction(t).deleteGuild(e) } constructor() { c(this, "actions", { CHANNEL_DELETE: (e, t) => this.handleChannelDelete(e, t), GUILD_DELETE: (e, t) => this.handleGuildDelete(e, t), LOAD_MESSAGES_SUCCESS: (e, t) => this.handleLoadMessagesSuccess(e, t), MESSAGE_CREATE: (e, t) => this.handleMessageCreate(e, t), MESSAGE_DELETE_BULK: (e, t) => this.handleMessageDeleteBulk(e, t), MESSAGE_DELETE: (e, t) => this.handleMessageDelete(e, t), MESSAGE_PREVIEWS_LOADED: (e, t) => this.handleMessagePreviewsLoaded(e, t), MESSAGE_UPDATE: (e, t) => this.handleMessageUpdate(e, t) }) } } }, 266750: function(e, t, n) { "use strict"; n.r(t); var i = n("392711"), r = n.n(i), s = n("250407"), a = n("710845"), o = n("914010"), l = n("70956"), u = n("287328"); let d = new a.default("NonGuildVersions"); t.default = new class e { async getCommittedVersions() { try { let e = u.default.nonGuildVersions(); if (null == e) return {}; let t = (await e.getMany()).map(e => [e.id, "version" in e ? e.version : e.versionString]); return Object.fromEntries(null != t ? t : []) } catch (e) { return d.warn("couldn't load guild versions", e), {} } } handleConnectionOpen(e, t) { null != e.apiCodeVersion && u.default.nonGuildVersionsTransaction(t).put({ id: "api_code_version", version: e.apiCodeVersion }) } resetInMemoryState() {} constructor() { var e, t, n; if (e = this, t = "actions", n = { CONNECTION_OPEN: (e, t) => this.handleConnectionOpen(e, t), BACKGROUND_SYNC: (e, t) => this.handleConnectionOpen(e, t) }, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, !(0, s.isCacheEnabled)()) return; o.default.addChangeListener(r().throttle(() => { var e; null === (e = u.default.database()) || void 0 === e || e.transaction(e => { let t = o.default.getGuildId(); null == t || isNaN(Number(t)) ? u.default.nonGuildVersionsTransaction(e).delete("initial_guild_id") : u.default.nonGuildVersionsTransaction(e).put({ id: "initial_guild_id", versionString: t }) }) }, 10 * l.default.Millis.SECOND)) } } }, 591526: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("710845"), r = n("287328"); let s = new i.default("ChannelReader"); class a { static getSync(e, t) { let n = performance.now(), i = r.default.channels(e).getManySyncUnsafe(t), a = performance.now() - n; return s.log("synchronously loaded in ".concat(a, "ms (guild: ").concat(t, ", channels: ").concat(i.length, ")")), [i, a] } static async getAsync(e, t) { let n = performance.now(), i = await r.default.channels(e).getMany(t), a = performance.now() - n; return s.verbose("loaded in ".concat(a, "ms (guild: ").concat(t, ", channels: ").concat(i.length, ")")), i } static async getGuildIds() { try { var e; let t = r.default.channels(); if (null == t) return new Set; let n = (null !== (e = await t.getGuildIds()) && void 0 !== e ? e : []).filter(e => null !== e && "string" == typeof e); return new Set(n) } catch (e) { return s.warn("couldn't get guild ids", e), new Set } } } }, 59480: function(e, t, n) { "use strict"; n.r(t), n.d(t, { KvMessage: function() { return a } }), n("47120"), n("653041"); var i = n("271383"), r = n("594174"), s = n("981631"); class a { static fromMessage(e, t, n, i) { let [r, s] = a.deriveMemberUsers(e, n); return { id: n.id, channelId: t, message: n, members: r, users: s, connectionId: i } } static deriveMemberUsers(e, t) { var n, a, o, l; let u = new Set([null === (n = t.author) || void 0 === n ? void 0 : n.id, null === (a = t.interaction) || void 0 === a ? void 0 : a.user.id, ...null !== (l = null === (o = t.mentions) || void 0 === o ? void 0 : o.map(e => e.id)) && void 0 !== l ? l : []]), d = [], _ = []; for (let t of u) { if (null == t) continue; let n = r.default.getUser(t), a = i.default.getTrueMember(null != e ? e : s.EMPTY_STRING_SNOWFLAKE_ID, t); null != n && _.push(n), null != a && d.push(a) } return [d, _] } } }, 40455: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("592125"), r = n("650774"), s = n("944486"), a = n("412788"), o = n("368321"), l = n("553245"), u = n("143806"), d = n("814074"), _ = n("582142"), c = n("989263"), E = n("872261"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let T = null, f = new l.ExtendedMemoryLru(750, 500), S = new u.Lru(15), h = !1; class A extends a.default { initialize() { this.waitFor(i.default), this.waitFor(s.default), this.waitFor(r.default), this.syncWith([o.default], () => !0), this.syncWith([s.default], m) } loadCache() { let e = this.readSnapshot(A.LATEST_SNAPSHOT_VERSION); null != e && (h = !0, A.mergeSnapshot(e)) } canEvictOrphans() { return h } saveLimit(e) { let t = i.default.getBasicChannel(e); return null != t && (0, _.isPrivateChannel)(t) || null != t && f.has(e) ? 25 : 1 } getSaveableChannels() { let e = i.default.getChannelIds(null).map(e => ({ guildId: null, channelId: e })); return o.default.isLowDisk ? null != T ? [...e, T] : e : [...e, ...f.values()] } takeSnapshot() { return { version: A.LATEST_SNAPSHOT_VERSION, data: { channels: [...f.allValues()].filter(e => !e.fallback), penalized: [...S.keys()], lastChannel: T } } } static mergeSnapshot(e) { let t = f, n = S; for (let n of (f = new l.ExtendedMemoryLru(f.primaryCapacity, f.extendedCapacity), S = new u.Lru(S.capacity), T = null != T ? T : e.lastChannel, [e.channels, t.values()])) for (let e of n) !e.fallback && f.put(e.channelId, e); for (let t of [e.penalized, n.keys()]) for (let e of t) S.put(e, null) } static recordChannel(e) { let t = i.default.getBasicChannel(e); if (null != t && (0, c.isReadableChannel)(t)) { var n; let i = { guildId: null !== (n = t.guild_id) && void 0 !== n ? n : null, channelId: e, channelType: t.type }; T = i, f.put(e, i), (0, d.isLimitedChannel)(t) && null != S.put(e, null) && f.delete(e) } } static deleteChannel(e) { f.delete(e) } static deleteGuild(e) { for (let t of f.allValues()) t.guildId === e && f.delete(t.channelId) } static dropUnreachableChannels() { for (let e of f.keys()) { let t = i.default.getBasicChannel(e); !(0, c.isReadableChannel)(t) && A.deleteChannel(e) } } static deleteUnreadableGuildChannels(e) { for (let t of f.values()) e === t.guildId && !(0, c.isReadableChannelId)(t.channelId) && A.deleteChannel(t.channelId) } static replaceLru(e) { f = e } constructor() { super({ CACHE_LOADED_LAZY_NO_CACHE: D, CACHE_LOADED_LAZY: () => this.loadCache(), CHANNEL_DELETE: C, CHANNEL_UPDATES: O, CONNECTION_OPEN_SUPPLEMENTAL: N, GUILD_DELETE: L, LOGIN_SUCCESS: v, THREAD_DELETE: g, THREAD_UPDATE: R }) } } function m() { let e = s.default.getChannelId(); null != e && A.recordChannel(e) } function N() { A.dropUnreachableChannels(), A.replaceLru((0, E.withFallbacks)(f, 1250)) } function p(e) { let t = e.id, n = (0, c.isReadableChannel)(e), i = s.default.getChannelId(); n && t === i && A.recordChannel(t), !n && A.deleteChannel(t) } function O(e) { for (let t of e.channels) p(t) } function C(e) { A.deleteChannel(e.channel.id) } function R(e) { p(e.channel) } function g(e) { A.deleteChannel(e.channel.id) } function L(e) { return !e.guild.unavailable && (A.deleteGuild(e.guild.id), !0) } function v(e) { f.clear(), S.clear(), h = !1 } function D(e) { h = !0 } I(A, "displayName", "SaveableChannelsStore"), I(A, "LATEST_SNAPSHOT_VERSION", 1), t.default = new A }, 814074: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isLimitedChannel: function() { return s } }), n("592125"); var i = n("650774"), r = n("981631"); function s(e) { var t; let n = null !== (t = i.default.getMemberCount(null == e ? void 0 : e.guild_id)) && void 0 !== t ? t : 0; return null != e && e.type !== r.ChannelTypes.DM && e.type !== r.ChannelTypes.GROUP_DM && n >= 1e4 } }, 582142: function(e, t, n) { "use strict"; function i(e) { return null == e.guild_id } n.r(t), n.d(t, { isPrivateChannel: function() { return i } }) }, 989263: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isReadableChannel: function() { return l }, isReadableChannelId: function() { return u } }); var i = n("131704"), r = n("592125"), s = n("496675"), a = n("981631"); let o = a.BasicPermissions.VIEW_CHANNEL | a.BasicPermissions.READ_MESSAGE_HISTORY; function l(e) { return null != e && (e.type === a.ChannelTypes.DM || e.type === a.ChannelTypes.GROUP_DM || (0, i.isTextChannel)(e.type) && s.default.canBasicChannel(o, e)) } function u(e) { return null != e && l(r.default.getBasicChannel(e)) } }, 513418: function(e, t, n) { "use strict"; n.r(t), n.d(t, { requireSortedDescending: function() { return a } }); var i = n("512722"), r = n.n(i), s = n("709054"); function a(e) { r()(e.length <= 2 || s.default.compare(e[0].id, e[e.length - 1].id) >= 0, "messages must be sorted in descending order.") } }, 872261: function(e, t, n) { "use strict"; n.r(t), n.d(t, { withFallbacks: function() { return u } }), n("47120"); var i = n("592125"), r = n("771845"), s = n("553245"), a = n("814074"), o = n("989263"), l = n("981631"); function u(e, t) { if (e.totalLength >= t) return e; let n = new s.ExtendedMemoryLru(e.primaryCapacity, e.extendedCapacity), u = t - e.totalLength; for (let t of r.default.getGuildFolders()) for (let r of t.guildIds) for (let t of Object.values(i.default.getMutableBasicGuildChannelsForGuild(r))) if (function(e) { return e.type === l.ChannelTypes.DM || e.type === l.ChannelTypes.GROUP_DM || e.type === l.ChannelTypes.GUILD_TEXT }(t) && (0, o.isReadableChannel)(t) && !(0, a.isLimitedChannel)(t) && function(e, t, n) { !n.hasExtended(t.id) && n.put(t.id, { guildId: e, channelId: t.id, channelType: t.type, fallback: !0 }) }(r, t, n), n.totalLength >= u) return d(n, e); return d(n, e) } function d(e, t) { for (let [n, i] of t.allEntries()) e.put(n, i); return e } }, 458772: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("445346"), r = n("570140"), s = n("710845"), a = n("93093"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = new s.default("BasicChannelCacheStore"); class u extends i.Store { hasChannel(e) { return this.channels.has(e) } hasGuild(e) { return this.guilds.has(e) } getBasicChannel(e) { var t; return null !== (t = this.channels.get(e)) && void 0 !== t ? t : null } getGuildBasicChannels(e) { var t; return null !== (t = this.guilds.get(e)) && void 0 !== t ? t : null } invalidate(e) { this.delete(e) } restored(e) { this.delete(e) } initialize() { this.waitFor(a.default) } handleCacheLoadedLazy(e) { for (let [t, n] of(this.guilds = new Map, this.channels = new Map, e.basicGuildChannels)) for (let e of (this.guilds.set(t, Object.fromEntries(n.map(e => [e.id, e]))), n)) this.channels.set(e.id, e) } handleCacheLoadedLazyNoCache(e) { this.guilds.clear(), this.channels.clear() } handleConnectionOpen(e) { let t = a.default.allGuildIds(); for (let e of this.guilds.keys()) !t.has(e) && this.delete(e) } handleLogout(e) { this.guilds.clear(), this.channels.clear() } delete(e) { var t; for (let n in null !== (t = this.guilds.get(e)) && void 0 !== t ? t : {}) this.channels.delete(n); this.guilds.delete(e) } constructor() { super(r.default, { CACHE_LOADED_LAZY_NO_CACHE: e => this.handleCacheLoadedLazyNoCache(e), CACHE_LOADED_LAZY: e => this.handleCacheLoadedLazy(e), CONNECTION_OPEN: e => this.handleConnectionOpen(e), LOGOUT: e => this.handleLogout(e) }), o(this, "channels", new Map), o(this, "guilds", new Map) } } t.default = new u }, 368321: function(e, t, n) { "use strict"; n.r(t); var i = n("445346"), r = n("570140"), s = n("710845"), a = n("70956"), o = n("287328"); let l = new s.default("FileSystemStore"), u = 10 * a.default.Millis.MINUTE; class d extends i.Store { handlePostConnectionOpen() { return this.refresh(), !1 } handleAppStateUpdate(e) { return "active" !== e.state && this.refresh(), !1 } async refresh() { var e, t; let n = await (null === (t = o.default.database()) || void 0 === t ? void 0 : null === (e = t.fsInfo()) || void 0 === e ? void 0 : e.catch(e => l.warn("couldn't get fs info", e))); if (null != n) { let e = n.fs.available < 268435456 || n.fs.available < 3 * n.database.used || n.fs.available < 2 * n.database.total, t = n.fs.available > 805306368 && n.fs.available > 4 * n.database.used && n.fs.available > 4 * n.database.total, i = !!e || !t && null; null != i && this.isLowDisk !== i && (this.isLowDisk = i, this.emitChange()) } } constructor() { var e, t, n; super(r.default, { APP_STATE_UPDATE: e => this.handleAppStateUpdate(e), POST_CONNECTION_OPEN: () => this.handlePostConnectionOpen() }), e = this, n = !1, (t = "isLowDisk") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, this.refresh(), this.waitFor(o.default), setInterval(() => this.refresh(), u) } } t.default = new d }, 261875: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("442837"), r = n("348326"), s = n("570140"), a = n("710845"), o = n("314897"), l = n("115522"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = new a.default("DatabaseManager"); class _ extends i.Store { initialize() { this.waitFor(o.default), this.carefullySpeculativelyOpen(l.getUserId()), this.handleAuthenticationStoreChanged(), o.default.addChangeListener(() => this.handleAuthenticationStoreChanged()) } databaseName(e) { return c(e) } database(e) { if (null != e) { var t; return null !== (t = this.databases.get(e)) && void 0 !== t ? t : null } return null } carefullyOpenDatabase(e) { if (this.preventWritingCachesAgainThisSession) return d.verbose("Not opening database because caches have been manually cleared."), null; if (null != e && !this.databases.has(e)) { let t = function(e) { return null }(e); d.verbose("added database (".concat(e, " → ").concat(t, ")")), this.databases.set(e, t), this.emitChange() } return this.database(e) } replaceDisableAllDatabases(e) { for (let t of (d.info("disabling and nulling all databases (reason: ".concat(e, ")")), this.databases.keys())) { let n = this.databases.get(t); null == n || n.disable(e), null == n || n.close(), this.databases.set(t, null) } this.emitChange() } remove(e) { let t = this.databases.get(e); d.log("removing database (user: ".concat(e, ", database: ").concat(t, ")")), null == t || t.close(), this.databases.delete(e), this.emitChange() } handleClearCaches(e) { e.preventWritingCachesAgainThisSession && (this.preventWritingCachesAgainThisSession = !0), this.replaceDisableAllDatabases("DatabaseManager (".concat(e.reason, ")")) } handleConnectionOpen() { let e = o.default.getId(), t = this.databases.get(e), n = null == t ? void 0 : t.state(); null == t && n !== r.DatabaseState.Open && this.remove(e), this.carefullyOpenDatabase(e) } handleAuthenticationStoreChanged() { let e = o.default.getId(), t = this.activeUserId; if (e !== t) { let n = this.databases.get(t); d.verbose("active user changed (now: ".concat(e, ", was: ").concat(t, ", was: ").concat(n, ")")), null == n || n.close(), l.setUserId(e), this.activeUserId = e, this.databases.delete(t) } } async carefullySpeculativelyOpen(e) { if (this.preventWritingCachesAgainThisSession) { d.verbose("Not opening database because caches have been manually cleared."); return } if (null != e) { let t = await E(e); null == t || this.databases.has(e) ? (d.verbose("discarding speculative database (".concat(e, " → ").concat(t, ")")), null == t || t.close()) : (d.verbose("added speculative database (".concat(e, " → ").concat(t, ")")), this.databases.set(e, t), this.emitChange()) } } constructor() { super(s.default, { CLEAR_CACHES: e => this.handleClearCaches(e), CONNECTION_CLOSED: () => this.handleAuthenticationStoreChanged(), CONNECTION_OPEN: () => this.handleConnectionOpen(), LOGOUT: () => this.handleAuthenticationStoreChanged() }, s.DispatchBand.Early), u(this, "databases", new Map), u(this, "activeUserId", null), u(this, "preventWritingCachesAgainThisSession", !1) } } function c(e) { return "@account.".concat(e) } async function E(e) { var t; return null } t.default = new _ }, 115522: function(e, t, n) { "use strict"; function i() { return null } function r(e) {} n.r(t), n.d(t, { getUserId: function() { return i }, setUserId: function() { return r } }) }, 553245: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ExtendedMemoryLru: function() { return a } }), n("47120"); var i = n("689320"), r = n("143806"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { get totalLength() { return this.primary.length + this.extended.length } get primaryCapacity() { return this.primary.capacity } get extendedCapacity() { return this.extended.capacity } clear() { this.primary.clear(), this.extended.clear() } has(e) { return this.primary.has(e) } hasExtended(e) { return this.primary.has(e) || this.extended.has(e) } get(e) { return this.primary.get(e) } put(e, t) { let n = this.primary.put(e, t); void 0 !== n && this.extended.put(n[0], n[1]) } delete(e) { let t = this.primary.delete(e), n = this.extended.delete(e); return this.upstreamItems(), t || n } upstreamItems() { if (this.canUpstreamItems()) { for (let [e, t] of this.extended.entries()) if (this.primary.put(e, t), this.extended.delete(e), !this.canUpstreamItems()) break } } canUpstreamItems() { return this.primary.length < this.primary.capacity && this.extended.length > 0 } entries() { return this.primary.entries() } keys() { return this.primary.keys() } values() { return this.primary.values() } allEntries() { return i.chain(this.extended.entries(), this.primary.entries()) } allKeys() { return i.chain(this.extended.keys(), this.primary.keys()) } allValues() { return i.chain(this.extended.values(), this.primary.values()) } constructor(e, t) { s(this, "primary", void 0), s(this, "extended", void 0), this.primary = new r.Lru(e), this.extended = new r.Lru(t) } } }, 689320: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { chain: function() { return a } }), n("47120"); let r = Symbol.iterator; class s { [r]() { return this } next() { for (; this.index < this.items.length;) { let e = this.items[this.index].next(); if (!e.done) return e; this.index += 1 } return { done: !0, value: void 0 } } constructor(e) { i(this, "index", void 0), i(this, "items", void 0), this.index = 0, this.items = e } } function a() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return new s(t) } }, 143806: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { Lru: function() { return s } }), n("47120"); let r = Symbol.iterator; class s { get length() { return this.items.size } get capacity() { return this.limit } [r]() { return this.items.entries() } entries() { return this.items.entries() } keys() { return this.items.keys() } values() { return this.items.values() } ordered() { return [...this.items.values()].reverse() } clear() { this.items.clear() } has(e) { return this.items.has(e) } get(e) { return this.items.get(e) } put(e, t) { if (this.items.delete(e), this.items.set(e, t), !!(this.items.size > this.limit)) { let e = this.oldestKey(), t = this.items.get(e); return this.items.delete(e), [e, t] } } delete(e) { return this.items.delete(e) } oldestKey() { return this.items.keys().next().value } constructor(e) { i(this, "items", void 0), i(this, "limit", void 0), this.items = new Map, this.limit = e } } }, 327943: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("594174"), o = n("626135"), l = n("74538"), u = n("997945"), d = n("981631"), _ = n("921944"), c = n("474936"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = { client: { desktop: u.FreemiumAppIconIds.DEFAULT, coachmarkImpressions: 0 } }, T = !1, f = !0, S = () => { f = !l.default.canUsePremiumAppIcons(a.default.getCurrentUser()) }, h = e => { if (I.client.desktop = e, !f) { var t; o.default.track(d.AnalyticEvents.APP_ICON_UPDATED, { icon_id: e, user_premium_tier: null === (t = a.default.getCurrentUser()) || void 0 === t ? void 0 : t.premiumType, icon_premium_tier: e !== u.FreemiumAppIconIds.DEFAULT ? c.PremiumTypes.TIER_2 : null }) } }; function A() { f && (I.client = { desktop: u.FreemiumAppIconIds.DEFAULT, coachmarkImpressions: 2 }), T = !1 } class m extends(i = r.default.PersistedStore) { initialize(e) { null != e && (I = e), this.waitFor(a.default), this.syncWith([a.default], S) } get isEditorOpen() { return T } get isUpsellPreview() { return f } getState() { return I } getCurrentDesktopIcon() { var e; return null == I ? void 0 : null === (e = I.client) || void 0 === e ? void 0 : e.desktop } } E(m, "displayName", "AppIconPersistedStoreState"), E(m, "persistKey", "AppIconPersistedStoreState"), t.default = new m(s.default, { APP_ICON_UPDATED: function(e) { let { id: t } = e; null != t && h(t) }, APP_ICON_EDITOR_OPEN: function() { T = !0 }, APP_ICON_EDITOR_CLOSE: A, APP_ICON_TRACK_IMPRESSION: function(e) { let { markAsDismissed: t } = e; I.client.coachmarkImpressions += 1, I.client.coachmarkImpressions >= 2 && (null == t || t(_.ContentDismissActionType.UNKNOWN), A()) } }) }, 997945: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FreemiumAppIconIds: function() { return i }, NewAppIconsDCMap: function() { return u }, PremiumAppIconIds: function() { return r } }), n("47120"); var i, r, s, a, o, l = n("524437"); (i || (i = {})).DEFAULT = "AppIcon", (a = r || (r = {})).BRAND_DARK = "BrandDarkIcon", a.BRAND_INVERTED = "BrandInvertedIcon", a.MATTE_LIGHT = "MatteLightIcon", a.MATTE_DARK = "MatteDarkIcon", a.PASTEL = "PastelIcon", a.PIRATE = "PirateIcon", a.CAMO = "CamoIcon", a.SUNSET = "SunsetIcon", a.GALAXY = "GalaxyIcon", a.Y2K = "Y2KIcon", a.CHERRY_BLOSSOM = "CherryBlossomIcon", a.BEANIE = "BeanieIcon", a.GAMING = "GamingIcon", a.CIRCUIT = "CircuitIcon", a.HOLO_WAVES = "HoloWavesIcon", a.BLUSH = "BlushIcon", a.ANGRY = "AngryIcon", a.MANGA = "MangaIcon", a.CONTROLLER = "ControllerIcon", a.MUSHROOM = "MushroomIcon", a.BLURPLE_TWILIGHT = "BlurpleTwilightIcon", a.IN_RAINBOWS = "InRainbowsIcon", a.COLOR_WAVE = "ColorWaveIcon", a.MIDNIGHT_PRISM = "MidnightPrismIcon", (o = s || (s = {})).DRIP = "DripIcon", o.SLIMY = "SlimyIcon", o.ZOMBIE = "ZombieIcon", o.CLYDE_STEIN = "ClydeSteinIcon", { ...i, ...r, ...s }; let u = new Map([ ["BlurpleTwilightIcon", l.DismissibleContent.BRAND_REFRESH_BLURPLE_TWILIGHT_APP_ICON_BADGE], ["InRainbowsIcon", l.DismissibleContent.PRIDE_ICONS], ["MidnightPrismIcon", l.DismissibleContent.PRIDE_ICONS], ["ColorWaveIcon", l.DismissibleContent.PRIDE_ICONS] ]) }, 630117: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("735250"); n("470079"); var r = n("441319"), s = n("689938"); function a(e) { let { id: t, width: n = r.CUSTOM_BASE_SIZE } = e, a = r.ICONS_BY_ID[t]; return null == a ? null : (0, i.jsx)("img", { src: a.iconSource, width: n, alt: s.default.Messages.SETTINGS_CUSTOM_APP_ICONS, draggable: !1 }) } }, 441319: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CUSTOM_BASE_SIZE: function() { return M }, ICONS: function() { return y }, ICONS_BY_ID: function() { return P } }); var i = n("392711"), r = n.n(i), s = n("105797"), a = n("63725"), o = n("924997"), l = n("861498"), u = n("749834"), d = n("760260"), _ = n("448578"), c = n("946185"), E = n("480423"), I = n("273593"), T = n("665801"), f = n("818143"), S = n("666475"), h = n("591304"), A = n("73375"), m = n("328664"), N = n("328259"), p = n("19009"), O = n("234912"), C = n("405571"), R = n("730886"), g = n("473974"), L = n("563856"), v = n("997945"), D = n("689938"); let M = 60, y = [{ id: v.FreemiumAppIconIds.DEFAULT, iconSource: a, name: D.default.Messages.APP_ICON_DEFAULT, isPremium: !1 }].concat([{ id: v.PremiumAppIconIds.BRAND_DARK, iconSource: d, name: D.default.Messages.APP_ICON_BRAND_DARK, isPremium: !0 }, { id: v.PremiumAppIconIds.MANGA, iconSource: m, isPremium: !0, name: D.default.Messages.APP_ICON_MANGA }, { id: v.PremiumAppIconIds.MATTE_DARK, iconSource: N, isPremium: !0, name: D.default.Messages.APP_ICON_MATTE_DARK }, { id: v.PremiumAppIconIds.MATTE_LIGHT, iconSource: p, name: D.default.Messages.APP_ICON_MATTE_LIGHT, isPremium: !0 }, { id: v.PremiumAppIconIds.PASTEL, iconSource: C, isPremium: !0, name: D.default.Messages.APP_ICON_PASTEL }, { id: v.PremiumAppIconIds.PIRATE, iconSource: R, isPremium: !0, name: D.default.Messages.APP_ICON_PIRATE }, { id: v.PremiumAppIconIds.CAMO, iconSource: _, isPremium: !0, name: D.default.Messages.APP_ICON_CAMO }, { id: v.PremiumAppIconIds.SUNSET, iconSource: g, isPremium: !0, name: D.default.Messages.APP_ICON_SUNSET }, { id: v.PremiumAppIconIds.GALAXY, iconSource: f, isPremium: !0, name: D.default.Messages.APP_ICON_GALAXY }, { id: v.PremiumAppIconIds.Y2K, iconSource: L, isPremium: !0, name: D.default.Messages.APP_ICON_Y2K }, { id: v.PremiumAppIconIds.CHERRY_BLOSSOM, iconSource: c, isPremium: !0, name: D.default.Messages.APP_ICON_CHERRY_BLOSSOM }, { id: v.PremiumAppIconIds.BEANIE, iconSource: o, isPremium: !0, name: D.default.Messages.APP_ICON_BEANIE }, { id: v.PremiumAppIconIds.GAMING, iconSource: S, isPremium: !0, name: D.default.Messages.APP_ICON_GAMING }, { id: v.PremiumAppIconIds.CIRCUIT, iconSource: E, isPremium: !0, name: D.default.Messages.APP_ICON_CIRCUIT }, { id: v.PremiumAppIconIds.HOLO_WAVES, iconSource: h, isPremium: !0, name: D.default.Messages.APP_ICON_HOLO_WAVES }, { id: v.PremiumAppIconIds.BLUSH, iconSource: u, isPremium: !0, name: D.default.Messages.APP_ICON_BLUSH }, { id: v.PremiumAppIconIds.ANGRY, iconSource: s, isPremium: !0, name: D.default.Messages.APP_ICON_ANGRY }, { id: v.PremiumAppIconIds.CONTROLLER, iconSource: T, isPremium: !0, name: D.default.Messages.APP_ICON_CONTROLLER }, { id: v.PremiumAppIconIds.BLURPLE_TWILIGHT, iconSource: l, isPremium: !0, name: D.default.Messages.CLIENT_THEMES_GRADIENT_BLURPLE_TWILIGHT }, { id: v.PremiumAppIconIds.IN_RAINBOWS, iconSource: A, isPremium: !0, name: D.default.Messages.APP_ICON_IN_RAINBOWS }, { id: v.PremiumAppIconIds.MIDNIGHT_PRISM, iconSource: O, isPremium: !0, name: D.default.Messages.APP_ICON_MIDNIGHT_PRISM }, { id: v.PremiumAppIconIds.COLOR_WAVE, iconSource: I, isPremium: !0, name: D.default.Messages.APP_ICON_COLOR_WAVE }]), P = r().keyBy(y, "id") }, 907459: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return U } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("570140"), d = n("230711"), _ = n("351773"), c = n("607070"), E = n("100527"), I = n("906732"), T = n("639119"), f = n("197115"), S = n("587446"), h = n("594174"), A = n("696202"), m = n("626135"), N = n("74538"), p = n("327943"), O = n("539873"), C = n("981631"), R = n("921944"), g = n("474936"), L = n("689938"), v = n("819074"); let D = () => { u.default.dispatch({ type: "APP_ICON_EDITOR_CLOSE" }) }, M = () => { var e, t, n; let r = (0, o.useStateFromStores)([h.default], () => N.default.isPremium(h.default.getCurrentUser())), s = (0, T.usePremiumTrialOffer)(), a = (null == s ? void 0 : null === (e = s.subscription_trial) || void 0 === e ? void 0 : e.sku_id) === g.PremiumSubscriptionSKUs.TIER_2; return (0, i.jsx)(f.default, { size: l.Button.Sizes.MEDIUM, buttonText: r ? L.default.Messages.BILLING_SWITCH_PLAN_UPGRADE : a ? (0, N.formatTrialCtaIntervalDuration)({ intervalType: null == s ? void 0 : null === (t = s.subscription_trial) || void 0 === t ? void 0 : t.interval, intervalCount: null == s ? void 0 : null === (n = s.subscription_trial) || void 0 === n ? void 0 : n.interval_count }) : L.default.Messages.USER_SETTINGS_CUSTOMIZATION_UPSELL, subscriptionTier: g.PremiumSubscriptionSKUs.TIER_2 }) }, y = e => { let { markAsDismissed: t } = e, n = () => { null == t || t(R.ContentDismissActionType.DISMISS), D() }; return (0, i.jsxs)("div", { className: v.editorHeader, children: [(0, i.jsx)(l.Clickable, { className: v.closeCircleButton, onClick: () => n(), children: (0, i.jsx)(A.default, { className: v.closeCircle }) }), (0, i.jsxs)("div", { className: v.title, children: [(0, i.jsx)(l.Heading, { variant: "heading-lg/extrabold", children: L.default.Messages.APP_ICON_PREVIEW_TITLE }), (0, i.jsx)(S.default, { className: v.premiumIcon })] })] }) }, P = e => { let { isCoachmark: t, markAsDismissed: n } = e, r = (0, o.useStateFromStores)([p.default], () => p.default.isUpsellPreview); return (0, i.jsxs)("div", { className: v.editorFooter, children: [r && (0, i.jsx)(M, {}), (0, i.jsx)(l.Button, { className: v.footerButton, onClick: () => { null == n || n(R.ContentDismissActionType.DISMISS), D(), !t && d.default.open() }, color: l.Button.Colors.PRIMARY, size: l.Button.Sizes.MEDIUM, children: r || t ? L.default.Messages.CLIENT_THEMES_EDITOR_EXIT_PREVIEW : L.default.Messages.CLIENT_THEMES_EDITOR_RETURN_TO_SETTINGS })] }) }; function U(e) { let { isCoachmark: t, markAsDismissed: n } = e, { analyticsLocations: s } = (0, I.default)(E.default.APP_ICON_EDITOR), u = (0, o.useStateFromStores)([h.default], () => h.default.getCurrentUser()), { isUpsellPreview: d, isEditorOpen: T, shouldEditorAnimate: f } = (0, o.useStateFromStoresObject)([p.default, c.default], () => ({ isUpsellPreview: p.default.isUpsellPreview, isEditorOpen: p.default.isEditorOpen, shouldEditorAnimate: t && !c.default.useReducedMotion })); r.useEffect(() => { d && m.default.track(C.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: g.PremiumUpsellTypes.APP_ICON_UPSELL, location_stack: s }) }, [d, s]); let S = (0, _.default)(null, d ? D : C.NOOP); return (r.useEffect(() => { if (d && !T) return D }, [d, T]), null == u) ? null : (0, i.jsx)(I.AnalyticsLocationProvider, { value: s, children: (0, i.jsx)("div", { ref: S, className: a()(v.editor, f ? v.editorAnimate : null), children: (0, i.jsxs)(l.HeadingLevel, { children: [(0, i.jsx)(y, { markAsDismissed: n }), (0, i.jsx)(l.Scroller, { className: v.editorBody, children: (0, i.jsx)(O.default, { className: v.selectionGroup }) }), (0, i.jsx)(P, { markAsDismissed: n, isCoachmark: t })] }) }) }) } }, 401460: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("481060"), d = n("110577"), _ = n("997945"), c = n("630117"), E = n("441319"), I = n("981631"), T = n("689938"), f = n("761064"); let S = () => [T.default.Messages.APP_ICON_PIRATE, T.default.Messages.APP_ICON_PIRATE_1, T.default.Messages.APP_ICON_PIRATE_2, T.default.Messages.APP_ICON_PIRATE_3, T.default.Messages.APP_ICON_PIRATE_4], h = () => { var e; return null !== (e = l().sample(S())) && void 0 !== e ? e : T.default.Messages.APP_ICON_PIRATE }; function A(e) { let { id: t, className: n, onSelect: s, isSelected: o = !1, tabIndex: l, children: c, isNew: T = !1 } = e, [S, A] = r.useState(E.ICONS_BY_ID[t].name), m = t === _.PremiumAppIconIds.PIRATE, N = (0, u.useRadioItem)({ label: S, isSelected: o }); return (0, i.jsx)(u.Tooltip, { text: S, onTooltipShow: () => m && A(h()), children: e => (0, i.jsxs)("div", { className: f.appIconSelectionContainer, children: [!o && T && (0, i.jsx)("div", { className: f.newBadgeCircle }), (0, i.jsx)(u.Clickable, { ...e, ...N, tabIndex: null != l ? l : N.tabIndex, className: a()(f.appIconSelection, { [f.selected]: o }, n), onClick: o ? I.NOOP : () => null == s ? void 0 : s(t), children: c }), o && (0, i.jsx)(d.SelectionCircle, {})] }) }) } function m(e) { let { icon: t, isSelected: n, disabled: r, tabIndex: s, onSelect: a, isNew: o } = e; return (0, i.jsx)(A, { onSelect: r ? void 0 : a, isSelected: n, id: t.id, className: r ? f.disabled : void 0, tabIndex: s, isNew: o, children: (0, i.jsx)(c.default, { id: t.id, width: E.CUSTOM_BASE_SIZE }) }) } }, 539873: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return p } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("570140"), l = n("605236"), u = n("837741"), d = n("804545"), _ = n("587446"), c = n("996073"), E = n("153124"), I = n("327943"), T = n("997945"), f = n("401460"), S = n("441319"), h = n("921944"), A = n("526761"), m = n("689938"), N = n("401728"); function p(e) { let { className: t, disabled: n, renderCTAButtons: p } = e, [O, C] = (0, s.useStateFromStoresArray)([I.default], () => [I.default.getCurrentDesktopIcon(), I.default.isEditorOpen]), R = r.useRef(null); (0, c.default)(R, A.AppearanceScrollPositions.CUSTOM_APP_ICONS); let g = (0, E.useUID)(), L = (0, a.useRadioGroup)({ orientation: "horizontal", labelledBy: g }), v = e => { o.default.dispatch({ type: "APP_ICON_UPDATED", id: e }); let t = T.NewAppIconsDCMap.get(e); null != t && (0, l.markDismissibleContentAsDismissed)(t, { dismissAction: h.ContentDismissActionType.TAKE_ACTION }) }, D = "AppIconSelectionGroup", { enabled: M } = (0, u.useBrandRefreshPerksExperiment)({ location: D }), { enabled: y } = (0, d.usePrideMonthPerksExperiment)({ location: D }), P = (e, t) => { let n = !1; switch (t) { case T.PremiumAppIconIds.BLURPLE_TWILIGHT: n = M; break; case T.PremiumAppIconIds.IN_RAINBOWS: case T.PremiumAppIconIds.MIDNIGHT_PRISM: case T.PremiumAppIconIds.COLOR_WAVE: n = y; break; default: n = !0 } return n && !0 !== e }, U = r.useMemo(() => e => { let t = T.NewAppIconsDCMap.get(e), i = null != t && !(0, l.isDismissibleContentDismissed)(t); return n && i && setTimeout(() => (0, l.markDismissibleContentAsDismissed)(t, { dismissAction: h.ContentDismissActionType.AUTO_DISMISS }), 5e3), i }, [n]); return (0, i.jsx)("div", { ref: R, children: (0, i.jsx)("div", { ...L, className: N.__invalid_container, children: (0, i.jsxs)("div", { className: t, children: [(0, i.jsxs)("div", { className: N.header, children: [(0, i.jsxs)("div", { className: N.headings, children: [C ? null : (0, i.jsxs)("div", { className: N.title, children: [(0, i.jsx)(a.Heading, { variant: "text-md/medium", children: m.default.Messages.APP_ICON_SETTINGS_TITLE }), (0, i.jsx)(_.default, { className: N.premiumIcon })] }), (0, i.jsx)(a.Heading, { variant: "text-sm/normal", children: m.default.Messages.APP_ICON_SETTINGS_DESCRIPTION })] }), null == p ? void 0 : p()] }), (0, i.jsx)("div", { className: N.presets, children: S.ICONS.filter(e => { let { isHidden: t, id: n } = e; return P(t, n) }).map((e, t) => (0, i.jsx)(f.default, { icon: e, isSelected: O === e.id, onSelect: e => v(e), disabled: n, tabIndex: 0 !== t || n ? void 0 : 0, isNew: U(e.id) }, e.id)) })] }) }) }) } }, 499254: function(e, t, n) { "use strict"; n.r(t), n.d(t, { dismissAppDetail: function() { return o }, dismissAppLauncherPopup: function() { return s }, showAppDetail: function() { return a }, showAppLauncherPopup: function() { return r } }); var i = n("570140"); function r() { i.default.dispatch({ type: "APP_LAUNCHER_SHOW_POPUP" }) } function s() { i.default.dispatch({ type: "APP_LAUNCHER_DISMISS_POPUP" }) } function a(e) { i.default.dispatch({ type: "APP_LAUNCHER_SHOW_APP_DETAIL", appDetail: e }) } function o() { i.default.dispatch({ type: "APP_LAUNCHER_DISMISS_APP_DETAIL" }) } }, 314734: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { CommandListSortOrder: function() { return i } }), (r = i || (i = {}))[r.POPULAR = 0] = "POPULAR", r[r.ALPHABETICAL = 1] = "ALPHABETICAL" }, 424602: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AppLauncherDesktopExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-11_app_launcher_desktop", label: "App Launcher - Desktop", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable the app launcher feature on desktop", config: { enabled: !0 } }] }) }, 541099: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = { showPopup: !1, appDetail: null }; function d() { return u.showPopup = !1, u.appDetail = null, !0 } class _ extends(a = o.default.Store) { initialize() {} shouldShowPopup() { return u.showPopup } getCurrentAppDetail() { return u.appDetail } } s = "AppLauncherStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { APP_LAUNCHER_SHOW_POPUP: function() { return u.showPopup = !0, !0 }, APP_LAUNCHER_DISMISS_POPUP: d, APP_LAUNCHER_SHOW_APP_DETAIL: function(e) { let { appDetail: t } = e; return u.appDetail = t, !0 }, APP_LAUNCHER_DISMISS_APP_DETAIL: function() { return u.appDetail = null, !0 }, CONNECTION_OPEN: d, LOGOUT: d, CHANNEL_SELECT: d, APPLICATION_COMMAND_SET_ACTIVE_COMMAND: d, APP_LAUNCHER_SET_ACTIVE_COMMAND: d }) }, 496158: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useCommandContext: function() { return s } }); var i = n("470079"), r = n("430824"); function s(e) { return i.useMemo(() => { var t; return { channel: t = e, guild: null != t.guild_id ? r.default.getGuild(t.guild_id) : null } }, [e]) } }, 676161: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("724458"); var i = n("470079"), r = n("700089"), s = n("654455"), a = n("496158"); function o(e) { let { channel: t, commands: n, limit: o = n.length } = e, l = (0, a.useCommandContext)(t), u = (0, r.useTopCommands)(l), d = i.useMemo(() => n.reduce((e, t) => (e[t.id] = t, e), {}), [n]); return i.useMemo(() => u.map(e => d[e]).filter(e => null != e).sort((e, t) => { let n = s.default.getScoreWithoutLoadingLatest(l, e); return s.default.getScoreWithoutLoadingLatest(l, t) - n }).slice(0, o), [u, d, l, o]) } }, 660090: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"); var i = n("470079"), r = n("674588"), s = n("70956"), a = n("314734"); function o(e) { let { sectionId: t, commandsByActiveSection: n } = e, [o, l] = i.useState(a.CommandListSortOrder.ALPHABETICAL), u = i.useMemo(() => { var e, i; return null !== (i = null === (e = n.find(e => e.section.id === t)) || void 0 === e ? void 0 : e.data) && void 0 !== i ? i : [] }, [n, t]), { popularSortedCommands: d, canSort: _ } = function(e) { let { alphabeticalSortedCommands: t } = e; return i.useMemo(() => { if (t.length <= 1) return { popularSortedCommands: t, canSort: !1 }; let e = !1, n = t.map((t, n) => (e = e || null != t.global_popularity_rank, { command: t, alphabeticalSortIndex: n })); return e ? (n.sort((e, t) => { let n = e.command.global_popularity_rank, i = t.command.global_popularity_rank; if (null != n && null != i) { if (n !== i) return n - i } else if (null != n) return -1; else if (null != i) return 1; return e.alphabeticalSortIndex - t.alphabeticalSortIndex }), { popularSortedCommands: n.map(e => { let { command: t } = e; return t }), canSort: !0 }) : { popularSortedCommands: t, canSort: !1 } }, [t]) }({ alphabeticalSortedCommands: u }); i.useEffect(() => { r.getApplication(t, { dontRefetchMs: s.default.Millis.DAY }) }, [t]), i.useEffect(() => { _ && l(a.CommandListSortOrder.POPULAR) }, [_]); let c = u; switch (o) { case a.CommandListSortOrder.POPULAR: c = d; break; case a.CommandListSortOrder.ALPHABETICAL: c = u } return { sortOrder: o, setSortOrder: l, commands: c, canSort: _ } } }, 663924: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("374470"), l = n("442837"), u = n("952265"), d = n("481060"), _ = n("410575"), c = n("40851"), E = n("153850"), I = n("585483"), T = n("5967"), f = n("499254"), S = n("541099"), h = n("481370"), A = n("361917"), m = n("981631"), N = n("957825"), p = n("175323"); t.default = r.memo(function(e) { let { positionTargetRef: t, channel: n, closeOnModalOuterClick: s = !1, parentModalKey: O } = e, C = r.useRef(null), R = r.useRef(null), { renderWindow: g, windowDispatch: L } = r.useContext(c.default), v = null != O, D = (0, u.useIsModalAtTop)(null != O ? O : ""), M = () => { f.dismissAppLauncherPopup() }, y = r.useCallback(e => { var t; if (!v && (0, u.hasAnyModalOpen)() || v && !(D && s)) return; let { target: n } = e; if ((0, o.isElement)(n) && null != n.closest("." + N.CHAT_INPUT_BUTTON_CLASSNAME)) return; for (; (0, o.isElement)(n);) { if (n === R.current || "true" === n.getAttribute("data-menu-item") || "true" === n.getAttribute("data-premium-tutorial-expression-picker-tooltip") || "true" === n.getAttribute("data-premium-tutorial-persistent-coachmark-emoji-step")) return; n = n.parentNode } M(); let i = null === (t = (0, T.eventOwnerDocument)(e)) || void 0 === t ? void 0 : t.activeElement; (null == i || "BODY" === i.tagName) && I.ComponentDispatch.dispatchToLastSubscribed(m.ComponentActions.TEXTAREA_FOCUS) }, [s, D, v]), P = r.useCallback(() => { M() }, []); r.useLayoutEffect(() => (g.addEventListener("mousedown", y), g.addEventListener("contextmenu", y), L.subscribe(m.ComponentActions.POPOUT_CLOSE, P), () => { g.removeEventListener("mousedown", y), g.removeEventListener("contextmenu", y), L.unsubscribe(m.ComponentActions.POPOUT_CLOSE, P) }), [P, y, g, L]), (0, d.useFocusLock)(C), r.useEffect(() => { (!v && (0, u.hasAnyModalOpen)() || v && !D) && M() }, [D, v]); let U = (0, l.useStateFromStores)([S.default], () => S.default.getCurrentAppDetail()); return (0, i.jsx)(_.default, { section: m.AnalyticsSections.EXPRESSION_PICKER, children: (0, i.jsx)(E.AppReferencePositionLayer, { className: p.positionLayer, targetRef: t, position: "top", align: "left", spacing: 8, autoInvert: !0, children: e => { let { isPositioned: t } = e; return (0, i.jsx)("section", { className: a()(p.positionContainer), ref: C, role: "dialog", "aria-label": "Application Launcher", children: t ? (0, i.jsxs)("div", { className: p.drawerSizingWrapper, ref: R, children: [(0, i.jsx)("div", { className: p.resizeHandle }), (0, i.jsxs)("div", { className: p.contentWrapper, children: [(0, i.jsx)(A.default, { channel: n, isAppDetailPresent: null != U }), null != U ? (0, i.jsx)(h.default, { channel: n, appDetail: U }, U.id) : null] })] }) : null }) } }) }) }) }, 481370: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return v } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("911969"), u = n("555573"), d = n("10718"), _ = n("895924"), c = n("826298"), E = n("220082"), I = n("240991"), T = n("465670"), f = n("605403"), S = n("768581"), h = n("585483"), A = n("499254"), m = n("660090"), N = n("14770"), p = n("981631"), O = n("689079"), C = n("689938"), R = n("717784"), g = n("946278"); function L(e) { let { channel: t, command: n, section: s } = e, a = r.useCallback(() => { A.dismissAppLauncherPopup(), u.setActiveCommand({ channelId: t.id, command: n, section: s, location: _.ApplicationCommandTriggerLocations.APP_LAUNCHER_APPLICATION_VIEW }), h.ComponentDispatch.dispatch(p.ComponentActions.FOCUS_CHANNEL_TEXT_AREA, { channelId: t.id }) }, [t, n, s]); return (0, i.jsxs)("li", { className: R.command, onClick: a, children: [(0, i.jsx)(o.Text, { variant: "text-sm/semibold", children: n.displayName }), (0, i.jsx)(o.Text, { variant: "text-xs/medium", lineClamp: 1, children: n.displayDescription })] }) } function v(e) { var t, n; let { channel: s, appDetail: u } = e, { filterSection: _, commandsByActiveSection: h } = d.useDiscovery(s, { commandType: l.ApplicationCommandType.CHAT }, { placeholderCount: 0, limit: O.DISCOVERY_COMMANDS_QUERY_LIMIT, includeFrecency: !0 }), { commands: p } = (0, m.default)({ sectionId: u.id, commandsByActiveSection: h }); r.useEffect(() => { _(u.id) }, [u.id, _]); let v = S.default.getApplicationIconSource({ id: u.id, icon: u.icon, bot: null === (t = u.application) || void 0 === t ? void 0 : t.bot, botIconFirst: !0 }), D = r.useCallback(() => { A.dismissAppDetail() }, []), M = (0, o.useToken)(o.tokens.colors.BG_BASE_PRIMARY).hex(), y = (0, E.default)("number" == typeof v ? "" : null == v ? void 0 : v.uri, null != M ? M : ""), P = (0, c.getIconComponent)(u), U = r.useMemo(() => { var e, t; return (0, I.parseBioReact)(null !== (t = null === (e = u.application) || void 0 === e ? void 0 : e.description) && void 0 !== t ? t : "") }, [null === (n = u.application) || void 0 === n ? void 0 : n.description]); return (0, i.jsxs)(o.ScrollerNone, { className: R.container, fade: !0, children: [(0, i.jsx)("div", { className: R.headerWhenSideCard, style: { backgroundColor: y }, children: (0, i.jsx)(o.Clickable, { "aria-label": C.default.Messages.CLOSE, onClick: D, className: R.headerCloseButton, children: (0, i.jsx)(T.default, {}) }) }), (0, i.jsxs)("div", { className: R.contentContainer, children: [(0, i.jsxs)("div", { className: R.appIcon, children: [(0, i.jsx)(P, { channel: s, section: u, width: 72, height: 72 }), (0, i.jsx)("div", { className: R.appIconBorderThingy })] }), (0, i.jsxs)("section", { children: [(0, i.jsx)(o.Heading, { className: R.appName, variant: "heading-lg/bold", children: u.name }), (0, i.jsx)(o.Text, { className: a()(R.__invalid_appDescription, g.markup), variant: "text-sm/medium", lineClamp: 3, children: U })] }), (0, i.jsx)(N.default, { commands: p, channel: s }), (0, i.jsxs)("div", { className: R.commandListHeader, children: [(0, i.jsx)(o.Heading, { variant: "text-md/medium", children: "All Commands" }), (0, i.jsxs)(o.Text, { className: R.sortSelector, variant: "text-md/medium", children: ["Popular", (0, i.jsx)(f.default, {})] })] }), (0, i.jsx)("ul", { children: p.map(e => (0, i.jsx)(L, { channel: s, command: e, section: u }, e.id)) })] })] }) } }, 14770: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("676161"); function s(e) { let { channel: t, commands: n } = e; return 0 === (0, r.default)({ channel: t, commands: n, limit: 5 }).length ? null : (0, i.jsx)("li", {}) } }, 361917: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("911969"), u = n("10718"), d = n("148958"), _ = n("6048"), c = n("546600"), E = n("105355"), I = n("689079"), T = n("245199"); function f(e) { var t, n; let { channel: s, isAppDetailPresent: f } = e, [S, h] = r.useState(""), A = r.useCallback(() => h(""), [h]), { commandsByActiveSection: m, sectionDescriptors: N, filterSection: p } = u.useDiscovery(s, { commandType: l.ApplicationCommandType.CHAT }, { placeholderCount: 0, limit: I.DISCOVERY_COMMANDS_QUERY_LIMIT, includeFrecency: !0 }); r.useEffect(() => { p(I.BuiltInSectionId.FRECENCY) }, [p]); let O = null !== (n = null === (t = m[0]) || void 0 === t ? void 0 : t.data) && void 0 !== n ? n : [], C = N.filter(e => e.id !== I.BuiltInSectionId.FRECENCY && e.id !== I.BuiltInSectionId.BUILT_IN), R = (0, d.useSortApplicationsViaFrecency)(C); return (0, i.jsxs)("div", { className: a()(T.container, { [T.appDetailVisible]: f }), children: [(0, i.jsx)("div", { className: T.searchBarContainer, children: (0, i.jsx)(_.default, { placeholder: "Search Apps & Commands", onChange: h, query: S, onClear: A, size: _.default.Sizes.MEDIUM }) }), (0, i.jsxs)(o.Scroller, { className: T.scrollableContent, fade: !0, children: [(0, i.jsx)(c.default, { channel: s, commands: O, sectionDescriptors: N }), (0, i.jsx)(E.default, { channel: s, applications: R })] })] }) } }, 546600: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("555573"), o = n("895924"), l = n("826298"), u = n("855693"), d = n("585483"), _ = n("499254"), c = n("981631"), E = n("804704"); function I(e) { let { channel: t, command: n, applicationSection: u } = e, I = (0, l.getIconComponent)(u), T = r.useCallback(() => { _.dismissAppLauncherPopup(), a.setActiveCommand({ channelId: t.id, command: n, section: u, location: o.ApplicationCommandTriggerLocations.APP_LAUNCHER_HOME }), d.ComponentDispatch.dispatch(c.ComponentActions.FOCUS_CHANNEL_TEXT_AREA, { channelId: t.id }) }, [t, n, u]); return (0, i.jsxs)("li", { className: E.command, onClick: T, children: [(0, i.jsx)(I, { className: E.applicationIcon, channel: t, section: u, width: 36, height: 36 }), (0, i.jsxs)("div", { children: [(0, i.jsx)(s.Text, { variant: "text-md/semibold", children: n.name }), (0, i.jsx)(s.Text, { variant: "text-sm/normal", color: "text-muted", children: u.name })] })] }) } function T(e) { let { channel: t, commands: n, sectionDescriptors: a } = e, o = r.useMemo(() => n.map(e => { let n = a.find(t => t.id === e.applicationId); return null == n ? null : (0, i.jsx)(I, { channel: t, command: e, applicationSection: n }, e.id) }), [t, n, a]); return 0 === n.length ? null : (0, i.jsxs)("div", { children: [(0, i.jsxs)(s.Text, { className: E.commandListHeading, variant: "text-sm/bold", color: "text-muted", children: [(0, i.jsx)(u.default, { className: E.commandListHeadingIcon, height: 16, width: 16 }), "Recent slash commands"] }), (0, i.jsx)("ul", { className: E.commandList, children: o })] }) } }, 105355: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("993365"), o = n("481060"), l = n("826298"), u = n("240991"), d = n("499254"), _ = n("541099"), c = n("38658"); function E(e) { var t; let { channel: n, applicationSection: E } = e, I = (0, l.getIconComponent)(E), T = r.useMemo(() => { var e, t; return (0, u.parseBioReactWithoutScrolling)(null !== (t = null === (e = E.application) || void 0 === e ? void 0 : e.description) && void 0 !== t ? t : "") }, [null === (t = E.application) || void 0 === t ? void 0 : t.description]), f = (0, s.useStateFromStores)([_.default], () => _.default.getCurrentAppDetail()), S = r.useCallback(e => { e.stopPropagation(), (null == f ? void 0 : f.id) === E.id ? d.dismissAppDetail() : d.showAppDetail(E) }, [E, f]); return (0, i.jsxs)("li", { className: c.application, onClick: S, children: [(0, i.jsx)(I, { className: c.applicationIcon, channel: n, section: E, width: 32, height: 32 }), (0, i.jsxs)("div", { className: c.applicationDetails, children: [(0, i.jsx)(o.Heading, { variant: "heading-md/medium", children: E.name }), (0, i.jsx)(a.Text, { className: c.applicationDescription, variant: "text-xs/medium", color: "text-muted", lineClamp: 1, children: T })] })] }) } function I(e) { let { channel: t, applications: n } = e, s = n.slice(0, 50), o = r.useMemo(() => s.map(e => (0, i.jsx)(E, { channel: t, applicationSection: e }, e.id)), [t, s]); return 0 === s.length ? null : (0, i.jsxs)("div", { children: [(0, i.jsx)(a.Text, { className: c.listHeading, variant: "text-sm/semibold", children: "Server Apps" }), (0, i.jsx)("ul", { className: c.applicationList, children: o })] }) } }, 308765: function(e, t, n) { "use strict"; n.r(t); var i = n("132454"); let r = { AppAnalyticsManager: { inlineRequire: () => n("98302").default, hasStoreChangeListeners: !0 }, AudioSettingsManager: { actions: ["POST_CONNECTION_OPEN", "AUDIO_SET_LOCAL_VOLUME", "AUDIO_TOGGLE_LOCAL_MUTE", "AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE"], inlineRequire: () => n("345953").default }, BlockedDomainManager: { inlineRequire: () => n("399907").default, loadAfterConnectionOpen: !0 }, CallIdleManager: { actions: ["VOICE_STATE_UPDATES", "EMBEDDED_ACTIVITY_DISCONNECT", "CONNECTION_CLOSED"], inlineRequire: () => n("288444").default }, ChangelogManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("688798").default, neverLoadBeforeConnectionOpen: !0 }, ChannelCallManager: { inlineRequire: () => n("258833").default, hasStoreChangeListeners: !0 }, ChannelSafetyWarningsManager: { actions: ["CHANNEL_SELECT", "CHANNEL_UPDATES"], inlineRequire: () => n("397776").default, neverLoadBeforeConnectionOpen: !0 }, CommonTriggerPointManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("957899").default }, CommunicationDisabledManager: { inlineRequire: () => n("202107").default, loadAfterConnectionOpen: !0 }, ContentProtectionManager: { inlineRequire: () => n("725140").default, loadRightBeforeConnectionOpen: !0, hasStoreChangeListeners: !0 }, CustomStatusManager: { actions: ["USER_SETTINGS_PROTO_UPDATE", "POST_CONNECTION_OPEN"], inlineRequire: () => n("215739").default, loadAfterConnectionOpen: !0 }, DeadchatPromptManager: { actions: ["POST_CONNECTION_OPEN", "IDLE"], inlineRequire: () => n("146661").default, loadAfterConnectionOpen: !0 }, TopEmojisDataManager: { actions: ["EMOJI_INTERACTION_INITIATED"], inlineRequire: () => n("496207").default }, EmojiCaptionsDataManager: { actions: ["EMOJI_INTERACTION_INITIATED"], inlineRequire: () => n("570310").default }, EntityVersionsManager: { actions: ["GUILD_CREATE", "DELETED_ENTITY_IDS"], inlineRequire: () => n("992713").default, loadRightBeforeConnectionOpen: !0 }, ExplicitMediaManager: { actions: ["CHANNEL_SELECT", "LOAD_MESSAGES_SUCCESS", "MESSAGE_CREATE", "MESSAGE_UPDATE", "SEARCH_FINISH", "MOD_VIEW_SEARCH_FINISH", "LOAD_FORUM_POSTS", "LOAD_ARCHIVED_THREADS_SUCCESS", "LOAD_THREADS_SUCCESS", "LOGOUT", "LOAD_PINNED_MESSAGES_SUCCESS", "USER_SETTINGS_PROTO_UPDATE", "CHANNEL_RTC_UPDATE_CHAT_OPEN", "POST_CONNECTION_OPEN"], inlineRequire: () => n("948561").default, neverLoadBeforeConnectionOpen: !0 }, FeedbackManager: { actions: ["VOICE_CHANNEL_SHOW_FEEDBACK", "STREAM_CLOSE", "EMBEDDED_ACTIVITY_CLOSE", "VIDEO_BACKGROUND_SHOW_FEEDBACK", "IN_APP_REPORTS_SHOW_FEEDBACK"], inlineRequire: () => n("169223").default }, ForumGuidelinesManager: { inlineRequire: () => n("945141").default, loadAfterConnectionOpen: !0 }, ForumManager: { actions: ["CHANNEL_PRELOAD"], inlineRequire: () => n("716896").default, neverLoadBeforeConnectionOpen: !0 }, ForumImagePreloadManager: { actions: ["CHANNEL_PRELOAD"], inlineRequire: () => n("222044").default, neverLoadBeforeConnectionOpen: !0 }, ForumPostAnalyticsManager: { actions: ["CHANNEL_SELECT", "THREAD_CREATE"], inlineRequire: () => n("474387").default, neverLoadBeforeConnectionOpen: !0 }, FrecencyUserSettingsManager: { actions: ["POST_CONNECTION_OPEN", "CONNECTION_RESUMED", "CONNECTION_CLOSED"], inlineRequire: () => n("888875").default }, GuildOnboardingHomeManager: { actions: ["POST_CONNECTION_OPEN", "CHANNEL_SELECT", "MESSAGE_CREATE", "THREAD_CREATE", "GUILD_MEMBER_UPDATE", "GUILD_DELETE"], inlineRequire: () => n("218315").default, neverLoadBeforeConnectionOpen: !0 }, SignUpManager: { actions: ["POST_CONNECTION_OPEN", "CHANNEL_SELECT"], inlineRequire: () => n("207269").default, neverLoadBeforeConnectionOpen: !0 }, GuildOnboardingManager: { actions: ["POST_CONNECTION_OPEN", "CHANNEL_SELECT", "GUILD_DELETE"], inlineRequire: () => n("495649").default, neverLoadBeforeConnectionOpen: !0 }, GuildOnboardingUpsellManager: { actions: ["POST_CONNECTION_OPEN", "CHANNEL_SELECT"], inlineRequire: () => n("983529").default, neverLoadBeforeConnectionOpen: !0 }, GameConsoleManager: { actions: ["WAIT_FOR_REMOTE_SESSION", "POST_CONNECTION_OPEN", "SESSIONS_REPLACE", "AUDIO_TOGGLE_SELF_DEAF", "AUDIO_TOGGLE_SELF_MUTE", "VOICE_STATE_UPDATES", "CONSOLE_COMMAND_UPDATE", "PASSIVE_UPDATE_V2", "REMOTE_SESSION_DISCONNECT"], inlineRequire: () => n("902304").default }, GuildHomeManager: { actions: ["CHANNEL_PRELOAD"], inlineRequire: () => n("657513").default, neverLoadBeforeConnectionOpen: !0 }, GuildScheduledEventManager: { actions: ["POST_CONNECTION_OPEN", "GUILD_DELETE", "GUILD_UNAVAILABLE", "INVITE_RESOLVE_SUCCESS", "CHANNEL_SELECT"], inlineRequire: () => n("897285").default, neverLoadBeforeConnectionOpen: !0 }, GuildVerificationManager: { actions: ["INVITE_ACCEPT_SUCCESS"], inlineRequire: () => n("950143").default }, HangStatusManager: { actions: ["VOICE_CHANNEL_SELECT", "LOGOUT", "GUILD_MEMBER_UPDATE"], inlineRequire: () => n("500272").default, hasStoreChangeListeners: !0 }, InteractionModalManager: { actions: ["INTERACTION_MODAL_CREATE", "INTERACTION_IFRAME_MODAL_CREATE", "INTERACTION_IFRAME_MODAL_CLOSE", "RPC_APP_DISCONNECTED"], inlineRequire: () => n("189334").default }, LocalizedPricingPromoManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("519143").default }, LoginRequiredActionManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("858386").default }, MemberSafetySearchManager: { actions: ["INITIALIZE_MEMBER_SAFETY_STORE", "GUILD_DELETE", "MEMBER_SAFETY_SEARCH_STATE_UPDATE", "MEMBER_SAFETY_PAGINATION_UPDATE", "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS", "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_STILL_INDEXING", "MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH"], inlineRequire: () => n("201070").default }, MemberSafetyStoreBatchUpdateManager: { actions: ["INITIALIZE_MEMBER_SAFETY_STORE", "GUILD_MEMBER_ADD", "GUILD_MEMBER_UPDATE", "GUILD_MEMBER_REMOVE", "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS"], inlineRequire: () => n("313298").default }, MessageCodedLinkManager: { actions: ["POST_CONNECTION_OPEN", "MESSAGE_UPDATE", "LOAD_MESSAGES_SUCCESS", "LOAD_MESSAGES_AROUND_SUCCESS", "LOAD_RECENT_MENTIONS_SUCCESS", "LOAD_PINNED_MESSAGES_SUCCESS", "SEARCH_FINISH", "MOD_VIEW_SEARCH_FINISH", "GUILD_FEED_FETCH_SUCCESS"], inlineRequire: () => n("891274").default }, MessageManager: { actions: ["APP_STATE_UPDATE", "OVERLAY_INITIALIZE", "CHANNEL_SELECT", "VOICE_CHANNEL_SELECT", "THREAD_CREATE", "THREAD_LIST_SYNC", "CHANNEL_CREATE", "CHANNEL_PRELOAD", "THREAD_CREATE_LOCAL", "GUILD_CREATE", "MESSAGE_END_EDIT", "LOAD_MESSAGES_SUCCESS", "UPLOAD_FAIL", "CHANNEL_DELETE", "THREAD_DELETE"], inlineRequire: () => n("348245").default, neverLoadBeforeConnectionOpen: !0, hasStoreChangeListeners: !0, loadRightBeforeConnectionOpen: !0 }, MultiAccountManager: { actions: ["LOGOUT"], inlineRequire: () => n("1627").default, loadAfterConnectionOpen: !0 }, OverlayUsageStatsManager: { actions: __OVERLAY__ ? ["MESSAGE_ACKED", "MESSAGE_CREATE"] : ["OVERLAY_FOCUSED", "OVERLAY_NOTIFICATION_EVENT", "OVERLAY_SET_UI_LOCKED", "OVERLAY_WIDGET_CHANGED", "OVERLAY_MESSAGE_EVENT_ACTION", "RUNNING_GAMES_CHANGE", "SOUNDBOARD_SET_OVERLAY_ENABLED", "MESSAGE_ACKED", "MESSAGE_CREATE", "WINDOW_FOCUS", "RTC_CONNECTION_STATE", "AUDIO_TOGGLE_SELF_MUTE", "OVERLAY_SUCCESSFULLY_SHOWN"], inlineRequire: () => n("645644").default, neverLoadBeforeConnectionOpen: !0 }, ParticipantFocusManager: { inlineRequire: () => n("14516").default, hasStoreChangeListeners: !0 }, PomeloManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("736401").default }, PromotionsManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("349540").default }, RelationshipManager: { actions: ["RELATIONSHIP_ADD", "FRIEND_REQUEST_ACCEPTED"], inlineRequire: () => n("859099").default }, RTCLatencyTestManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("70655").default }, MessageRemindersManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("652244").default, neverLoadBeforeConnectionOpen: !0 }, MessageRemindersNotificationManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("211040").default, neverLoadBeforeConnectionOpen: !0 }, SearchManager: { actions: ["USER_SETTINGS_PROTO_UPDATE", "I18N_LOAD_SUCCESS", "POST_CONNECTION_OPEN"], inlineRequire: () => n("941467").default, neverLoadBeforeConnectionOpen: !0 }, SelectedChannelManager: { actions: ["GUILD_CREATE", "CHANNEL_CREATE", "LOGOUT"], inlineRequire: () => n("149770").default }, SelfPresenceStoreManager: { inlineRequire: () => n("613402").default, hasStoreChangeListeners: !0 }, StageChannelRequestToSpeakMessageManager: { actions: ["VOICE_STATE_UPDATES"], inlineRequire: () => n("834332").default }, StageMusicManager: { actions: ["VOICE_CHANNEL_SELECT", "LOGOUT", "STAGE_MUSIC_MUTE", "STAGE_MUSIC_PLAY", "VOICE_STATE_UPDATES", "AUDIO_SET_OUTPUT_VOLUME", "AUDIO_TOGGLE_SELF_DEAF"], inlineRequire: () => n("485287").default }, SubscriptionRemindersManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("177082").default }, ThreadManager: { actions: ["CHANNEL_DELETE", "MESSAGE_CREATE"], inlineRequire: () => n("359915").default, neverLoadBeforeConnectionOpen: !0 }, UrgentSystemDMManagerBase: { actions: ["POST_CONNECTION_OPEN", "MESSAGE_CREATE", "CHANNEL_SELECT"], inlineRequire: () => n("559523").default, neverLoadBeforeConnectionOpen: !0 }, UserGuildSettingsManager: { actions: ["CATEGORY_COLLAPSE", "CATEGORY_EXPAND", "CATEGORY_COLLAPSE_ALL", "CATEGORY_EXPAND_ALL", "POST_CONNECTION_OPEN", "USER_GUILD_SETTINGS_FULL_UPDATE"], inlineRequire: () => n("149071").default }, UserSearchManager: { actions: ["LOGOUT", "POST_CONNECTION_OPEN", "CONNECTION_OPEN_SUPPLEMENTAL", "OVERLAY_INITIALIZE", "CURRENT_USER_UPDATE", "GUILD_CREATE", "GUILD_MEMBERS_CHUNK_BATCH", "GUILD_MEMBER_ADD", "GUILD_MEMBER_UPDATE", "RELATIONSHIP_ADD", "RELATIONSHIP_UPDATE", "RELATIONSHIP_REMOVE", "CHANNEL_CREATE", "CHANNEL_UPDATES", "CHANNEL_RECIPIENT_ADD", "PASSIVE_UPDATE_V2"], inlineRequire: () => n("279779").default }, UserSettingsManager: { actions: ["POST_CONNECTION_OPEN", "OVERLAY_INITIALIZE", "USER_SETTINGS_PROTO_UPDATE"], inlineRequire: () => n("151742").default }, VoiceChannelSettingsManager: { actions: ["CHANNEL_UPDATES", "VOICE_STATE_UPDATES"], inlineRequire: () => n("583523").default }, VoiceChannelNotificationsManager: { actions: ["VOICE_CHANNEL_SELECT"], inlineRequire: () => n("538215").default }, VoicePermissionManager: { actions: ["VOICE_CHANNEL_SELECT", "VOICE_STATE_UPDATES"], inlineRequire: () => n("17300").default }, VoiceProcessingErrorManager: { actions: ["MEDIA_ENGINE_NOISE_CANCELLATION_ERROR"], inlineRequire: () => n("681694").default }, GPUWorkaroundManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("703767").default }, HighFiveManager: { actions: ["VOICE_CHANNEL_EFFECT_SEND", "HIGH_FIVE_COMPLETE"], inlineRequire: () => n("294270").default }, NativeCrashManager: { actions: ["RTC_CONNECTION_STATE", "RTC_CONNECTION_VIDEO", "MEDIA_SESSION_JOINED"], inlineRequire: () => n("902558").default }, GuestManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("978684").default }, ClipsManager: { actions: ["RTC_CONNECTION_FLAGS", "RTC_CONNECTION_USER_CREATE", "RTC_CONNECTION_STATE", "POST_CONNECTION_OPEN", "CLIPS_SETTINGS_UPDATE", "CLIPS_INIT_FAILURE", "STREAM_START", "RUNNING_GAME_TOGGLE_DETECTION", "RUNNING_GAMES_CHANGE", "CLIPS_RESTART", "RTC_CONNECTION_VIDEO", "MEDIA_ENGINE_SET_HARDWARE_H264"], inlineRequire: () => n("220122").default }, BroadcastingManager: { actions: ["RUNNING_GAMES_CHANGE", "STREAM_CREATE", "STREAM_STOP", "START_BROADCAST_STREAM", "CALL_CREATE", "RTC_CONNECTION_STATE", "CHANNEL_DELETE", "MESSAGE_CREATE"], inlineRequire: () => n("85717").default, neverLoadBeforeConnectionOpen: !0 }, CustomCallSoundsManager: { actions: ["RTC_CONNECTION_STATE", "SOUNDBOARD_MUTE_JOIN_SOUND", "VOICE_STATE_UPDATES"], inlineRequire: () => n("783295").default }, NotificationMigrationManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("392888").default }, AnnouncementViewTrackingManager: { actions: ["CHANNEL_SELECT"], inlineRequire: () => n("529726").default, neverLoadBeforeConnectionOpen: !0 }, DetectableGamesManager: { actions: ["POST_CONNECTION_OPEN"], inlineRequire: () => n("114957").default, neverLoadBeforeConnectionOpen: !0 }, MidjourneyOnboardingManager: { actions: ["CHANNEL_CREATE"], inlineRequire: () => n("175255").default, neverLoadBeforeConnectionOpen: !0 }, QuestManager: { actions: ["POST_CONNECTION_OPEN", "QUESTS_SEND_HEARTBEAT_SUCCESS", "QUESTS_SEND_HEARTBEAT_FAILURE", "QUESTS_ENROLL_SUCCESS", "RUNNING_GAMES_CHANGE", "QUESTS_FETCH_CURRENT_QUESTS_BEGIN", "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS", "STREAM_START", "STREAM_CREATE", "STREAM_CLOSE", "LOGOUT", "PASSIVE_UPDATE_V2", "VOICE_STATE_UPDATES", "EMBEDDED_ACTIVITY_UPDATE", "EMBEDDED_ACTIVITY_UPDATE_V2", "USER_SETTINGS_PROTO_UPDATE"], inlineRequire: () => n("901751").default, neverLoadBeforeConnectionOpen: !0 }, VoiceChannelGameActivityManager: { actions: ["RUNNING_GAMES_CHANGE", "VOICE_CHANNEL_SELECT"], inlineRequire: () => n("981668").default, neverLoadBeforeConnectionOpen: !0 }, InappropriateConversationsManager: { actions: ["VIBING_WUMPUS_PLAY_MUSIC", "VIBING_WUMPUS_STOP_MUSIC", "VIBING_WUMPUS_PAUSE_MUSIC"], inlineRequire: () => n("752290").default, neverLoadBeforeConnectionOpen: !0 }, ContentInventoryManager: { actions: ["POST_CONNECTION_OPEN", "CONNECTION_CLOSED", "IDLE", "WINDOW_FOCUS", "CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN", "CONTENT_INVENTORY_MANUAL_REFRESH", "CONTENT_INVENTORY_INBOX_STALE", "SPOTIFY_NEW_TRACK"], inlineRequire: () => n("342879").default, neverLoadBeforeConnectionOpen: !0 }, RunningGameDetectionManager: { actions: ["RUNNING_GAME_DELETE_ENTRY", "RUNNING_GAME_TOGGLE_DETECTION"], inlineRequire: () => n("611184").default, neverLoadBeforeConnectionOpen: !0 }, RunningGameHeartbeatManager: { actions: ["RUNNING_GAMES_CHANGE", "LOGOUT", "CONNECTION_CLOSED", "POST_CONNECTION_OPEN"], inlineRequire: () => n("696287").default, neverLoadBeforeConnectionOpen: !0 }, DmSettingsUpsellManager: { actions: ["DM_SETTINGS_UPSELL_SHOW"], inlineRequire: () => n("401416").default, neverLoadBeforeConnectionOpen: !0 }, TenureRewardManager: { actions: ["POST_CONNECTION_OPEN", "CONNECTION_CLOSED", "ENTITLEMENT_FETCH_APPLICATION_SUCCESS", "ENTITLEMENT_CREATE", "ENTITLEMENT_UPDATE", "ENTITLEMENT_DELETE", "LOGOUT"], inlineRequire: () => n("944880").default, neverLoadBeforeConnectionOpen: !0 } }; (0, i.initialize)(r) }, 132454: function(e, t, n) { "use strict"; n.r(t), n.d(t, { initialize: function() { return a } }), n("47120"), n("411104"), n("653041"); var i = n("570140"); let r = {}, s = !1; function a(e) { for (let t in e) { let n = e[t]; (function(e, t) { var n; t.actions })(t, n), function(e) { var t; let n = null !== (t = e.actions) && void 0 !== t ? t : []; for (let t of ((e.hasStoreChangeListeners || e.loadAfterConnectionOpen) && (!n.includes("POST_CONNECTION_OPEN") && (n = [...n, "POST_CONNECTION_OPEN"]), !n.includes("OVERLAY_INITIALIZE") && (n = [...n, "OVERLAY_INITIALIZE"])), e.loadRightBeforeConnectionOpen && (!n.includes("CONNECTION_OPEN") && (n = [...n, "CONNECTION_OPEN"]), !n.includes("OVERLAY_INITIALIZE") && (n = [...n, "OVERLAY_INITIALIZE"])), n)) !(t in r) && (r[t] = []), r[t].push(e) }(n) } i.default.addInterceptor(o) } function o(e) { if (("CONNECTION_OPEN" === e.type || "OVERLAY_INITIALIZE" === e.type) && (s = !0), e.type in r) { let t = []; for (let n of r[e.type]) !s && n.neverLoadBeforeConnectionOpen ? t.push(n) : n.inlineRequire().initialize(); t.length > 0 ? r[e.type] = t : delete r[e.type] } return !1 } }, 586444: function(e, t, n) { "use strict"; n.r(t), n.d(t, { size: function() { return r } }), n("47120"); let i = new Set; function r() { return i.size } }, 109728: function(e, t, n) { "use strict"; n.r(t), n.d(t, { onExperimentsLoaded: function() { return r } }); let i = new(n("226351")).Future; function r() {} }, 555573: function(e, t, n) { "use strict"; n.r(t), n.d(t, { performAutocomplete: function() { return h }, setActiveCommand: function() { return E }, setPreferredCommandId: function() { return I }, updateApplicationGuildCommandPermissions: function() { return S }, updateOptionStates: function() { return T }, updateOptionValidationStates: function() { return f } }), n("47120"); var i = n("512722"), r = n.n(i), s = n("544891"), a = n("570140"), o = n("911969"), l = n("314897"), u = n("709054"), d = n("174212"), _ = n("895924"), c = n("981631"); function E(e) { let { channelId: t, command: n, section: i, location: s, initialValues: o, triggerSection: l, queryLength: u } = e; null != n && r()(n.inputType !== _.ApplicationCommandInputType.PLACEHOLDER, "command should not be placeholder"), a.default.dispatch({ type: "APPLICATION_COMMAND_SET_ACTIVE_COMMAND", channelId: t, command: n, section: i, initialValues: o, location: s, triggerSection: l, queryLength: u }) } function I(e, t) { a.default.dispatch({ type: "APPLICATION_COMMAND_SET_PREFERRED_COMMAND", channelId: e, commandId: t }) } function T(e, t) { a.default.dispatch({ type: "APPLICATION_COMMAND_UPDATE_OPTIONS", channelId: e, changedOptionStates: t }) } function f(e, t) { T(e, Object.fromEntries(Object.entries(t).map(e => { let [t, n] = e; return [t, { lastValidationResult: n }] }))) } function S(e, t, n, i) { return s.HTTP.put({ body: { permissions: i }, url: c.Endpoints.APPLICATION_BOT_GUILD_COMMAND_PERMISSIONS(e, t, n) }) } function h(e, t, n) { var i; r()(null != t.autocomplete, "Missing autocomplete context"); let { query: _, name: E } = t.autocomplete, I = u.default.fromTimestamp(Date.now()); a.default.dispatch({ type: "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST", nonce: I, channelId: t.channel.id, query: _, name: E }), null == d.default.getAutocompleteChoices(t.channel.id, E, _) && s.HTTP.post({ url: c.Endpoints.INTERACTIONS, body: { type: o.InteractionTypes.APPLICATION_COMMAND_AUTOCOMPLETE, application_id: e.applicationId, guild_id: null === (i = t.guild) || void 0 === i ? void 0 : i.id, channel_id: t.channel.id, session_id: l.default.getSessionId(), data: n, nonce: I }, timeout: 3e3 }).catch(() => { a.default.dispatch({ type: "INTERACTION_FAILURE", nonce: I }) }) } }, 174212: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("367907"), d = n("998698"), _ = n("981631"); let c = new Map, E = new Map, I = new Map; function T(e) { if (!E.has(e)) { var t; E.set(e, { commandId: null === (t = d.default.getActiveCommand(e)) || void 0 === t ? void 0 : t.id, optionName: d.default.getActiveOptionName(e), optionNameToAutocompleteQueries: new Map, optionNameToLastResults: new Map, optionNameToNonce: new Map, optionNameToLastQuery: new Map, lastErrored: !1, lastResponseNonce: void 0 }) } return E.get(e) } function f() { return c.clear(), E.clear(), !0 } function S(e) { let { channelId: t, command: n } = e; h(t, null == n ? void 0 : n.id) } function h(e, t) { let n = d.default.getActiveOptionName(e), i = E.get(e); return null != i && (t !== i.commandId || n !== i.optionName) && (null != t && t !== i.commandId && (i.optionNameToLastResults.clear(), i.optionNameToNonce.clear(), i.optionNameToLastQuery.clear(), i.optionNameToAutocompleteQueries.clear()), i.lastErrored = !1, i.commandId = t, i.optionName = n, !0) } class A extends(i = o.default.Store) { initialize() { this.waitFor(d.default) } getLastErrored(e) { return T(e).lastErrored } getAutocompleteChoices(e, t, n) { var i; return null === (i = T(e).optionNameToAutocompleteQueries.get(t)) || void 0 === i ? void 0 : i.get(n) } getAutocompleteLastChoices(e, t) { return T(e).optionNameToLastResults.get(t) } getLastResponseNonce(e) { return T(e).lastResponseNonce } } a = "ApplicationCommandAutocompleteStore", (s = "displayName") in(r = A) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new A(l.default, { CONNECTION_OPEN: f, LOGOUT: f, CHANNEL_SELECT: f, APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST: function(e) { var t; let { nonce: n, channelId: i, query: r, name: s } = e, a = T(i); if (a.optionNameToLastQuery.get(s) === r) return !1; a.optionNameToLastQuery.set(s, r); let o = null === (t = a.optionNameToAutocompleteQueries.get(s)) || void 0 === t ? void 0 : t.get(r); if (null != o) return a.lastErrored = !1, a.optionNameToLastResults.set(s, o), !0; let l = a.optionNameToNonce.get(s); if (null != l && c.delete(l), c.set(n, { channelId: i, query: r, name: s }), I.set(n, new Date), a.optionNameToNonce.set(s, n), a.lastErrored) return a.lastErrored = !1, !0 }, APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE: function(e) { var t, n; let { choices: i, nonce: r } = e, s = c.get(r); if (null == s) return !1; c.delete(r); let a = null !== (n = null == i ? void 0 : i.map(e => { var t; return { ...e, displayName: null !== (t = e.name_localized) && void 0 !== t ? t : e.name } })) && void 0 !== n ? n : [], o = I.get(r), l = null != o ? new Date().getTime() - o.getTime() : 0; (0, u.trackWithMetadata)(_.AnalyticEvents.APPLICATION_COMMAND_OPTION_STRING_AUTOCOMPLETE_PERFORMANCE, { duration_ms: l, error: !1, num_options: a.length }), I.delete(r); let d = T(s.channelId); return null == d.optionNameToAutocompleteQueries.get(s.name) && d.optionNameToAutocompleteQueries.set(s.name, new Map), null === (t = d.optionNameToAutocompleteQueries.get(s.name)) || void 0 === t || t.set(s.query, a), d.optionNameToLastQuery.get(s.name) === s.query && (d.lastErrored = !1, d.optionNameToLastResults.set(s.name, a)), d.lastResponseNonce = r, !0 }, INTERACTION_FAILURE: function(e) { let { nonce: t } = e; if (null == t) return !1; let n = c.get(t); if (null == n) return !1; c.delete(t); let i = I.get(t), r = null != i ? new Date().getTime() - i.getTime() : 0; return (0, u.trackWithMetadata)(_.AnalyticEvents.APPLICATION_COMMAND_OPTION_STRING_AUTOCOMPLETE_PERFORMANCE, { duration_ms: r, error: !0 }), I.delete(t), T(n.channelId).lastErrored = !0, !0 }, APPLICATION_COMMAND_SET_ACTIVE_COMMAND: S, APP_LAUNCHER_SET_ACTIVE_COMMAND: S, APPLICATION_COMMAND_UPDATE_CHANNEL_STATE: function(e) { let { channelId: t, command: n } = e; h(t, null == n ? void 0 : n.id) } }) }, 254711: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BUILT_IN_SECTIONS: function() { return y }, getBuiltInCommands: function() { return G } }), n("47120"), n("411104"); var i = n("512722"), r = n.n(i), s = n("913527"), a = n.n(s), o = n("106351"), l = n("969812"), u = n("493683"), d = n("749210"), _ = n("904245"), c = n("911969"), E = n("386696"), I = n("957730"), T = n("968437"), f = n("928477"), S = n("665906"), h = n("695346"), A = n("592125"), m = n("496675"), N = n("594174"), p = n("70956"), O = n("51144"), C = n("895924"), R = n("689079"), g = n("981631"), L = n("590433"), v = n("689938"); let D = n("227419").default, M = (e, t) => { var n; return null === (n = e.find(e => e.name === t)) || void 0 === n ? void 0 : n.value }, y = { [R.BuiltInSectionId.BUILT_IN]: { id: R.BuiltInSectionId.BUILT_IN, type: C.ApplicationCommandSectionType.BUILT_IN, get name() { return v.default.Messages.COMMAND_SECTION_BUILT_IN_NAME } }, [R.BuiltInSectionId.FRECENCY]: { id: R.BuiltInSectionId.FRECENCY, type: C.ApplicationCommandSectionType.BUILT_IN, get name() { return v.default.Messages.FREQUENTLY_USED } } }, P = [...D, { id: "-1", name: "shrug", displayName: "shrug", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN_TEXT, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_SHRUG_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_SHRUG_DESCRIPTION }, options: [{ name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_SHRUG_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_SHRUG_MESSAGE_DESCRIPTION } }], execute: e => { var t; let n = null !== (t = M(e, "message")) && void 0 !== t ? t : ""; return { content: "".concat(n, " \xaf\\_(ツ)_/\xaf").trim() } } }, { id: "-2", name: "tableflip", displayName: "tableflip", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN_TEXT, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_TABLEFLIP_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TABLEFLIP_DESCRIPTION }, options: [{ name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_TABLEFLIP_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TABLEFLIP_MESSAGE_DESCRIPTION } }], execute: e => { var t; let n = null !== (t = M(e, "message")) && void 0 !== t ? t : ""; return { content: "".concat(n, " (╯\xb0□\xb0)╯︵ ┻━┻").trim() } } }, { id: "-3", name: "unflip", displayName: "unflip", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN_TEXT, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_TABLEUNFLIP_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TABLEUNFLIP_DESCRIPTION }, options: [{ name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_TABLEUNFLIP_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TABLEUNFLIP_MESSAGE_DESCRIPTION } }], execute: e => { var t; let n = null !== (t = M(e, "message")) && void 0 !== t ? t : ""; return { content: "".concat(n, " ┬─┬ノ( \xba _ \xbaノ)").trim() } } }, { id: "-4", name: "tts", displayName: "tts", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN_TEXT, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_TTS_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TTS_DESCRIPTION }, options: [{ name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_TTS_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TTS_MESSAGE_DESCRIPTION }, required: !0 }], predicate: e => { let { channel: t } = e; return !t.isPrivate() && h.EnableTTSCommand.getSetting() && m.default.can(g.Permissions.SEND_TTS_MESSAGES, t) }, execute: e => { var t; return { content: null !== (t = M(e, "message")) && void 0 !== t ? t : "", tts: !0 } } }, { id: "-5", name: "me", displayName: "me", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN_TEXT, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_ME_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_ME_DESCRIPTION }, options: [{ name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_ME_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_ME_MESSAGE_DESCRIPTION }, required: !0 }], execute: e => { var t; let n = null !== (t = M(e, "message")) && void 0 !== t ? t : ""; return { content: "_".concat(n, "_") } } }, { id: "-6", name: "spoiler", displayName: "spoiler", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN_TEXT, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_SPOILER_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_SPOILER_DESCRIPTION }, options: [{ name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_SPOILER_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_SPOILER_MESSAGE_DESCRIPTION }, required: !0 }], execute: e => { var t; let n = null !== (t = M(e, "message")) && void 0 !== t ? t : ""; return { content: (0, g.MARKDOWN_SPOILER_WRAPPER)(n).trim() } } }, { id: "-7", name: "nick", displayName: "nick", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_NICK_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_NICK_DESCRIPTION }, options: [{ name: "new_nick", displayName: "new_nick", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_NICK_NEWNICK_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_NICK_NEWNICK_DESCRIPTION } }], predicate: e => { let { channel: t } = e; return !t.isPrivate() && (m.default.can(g.Permissions.CHANGE_NICKNAME, t) || m.default.can(g.Permissions.MANAGE_NICKNAMES, t)) }, execute: (e, t) => { var n; let { guild: i, channel: r } = t; if (null == i) return; let s = null !== (n = M(e, "new_nick")) && void 0 !== n ? n : ""; l.default.changeNickname(i.id, r.id, g.ME, s || "") } }, { id: "-10", name: "thread", displayName: "thread", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_THREAD_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_THREAD_DESCRIPTION }, options: [{ name: "name", displayName: "name", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_THREAD_NAME_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_THREAD_NAME_DESCRIPTION }, required: !0 }, { name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_THREAD_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_THREAD_MESSAGE_DESCRIPTION }, required: !0 }], predicate: e => { let { channel: t } = e; return (0, S.computeCanStartPublicThread)(t) }, execute: async (e, t) => { var n, i; let { channel: r } = t, s = null !== (n = M(e, "name")) && void 0 !== n ? n : "", a = null !== (i = M(e, "message")) && void 0 !== i ? i : "", l = await (0, f.createThread)(r, s, o.ChannelTypes.PUBLIC_THREAD, (0, T.getAutoArchiveDuration)(r, null), "Slash Command"); _.default.sendMessage(l.id, I.default.parse(l, a)) } }, { id: "-11", name: "kick", displayName: "kick", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_KICK_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_KICK_DESCRIPTION }, options: [{ name: "user", displayName: "user", type: c.ApplicationCommandOptionType.USER, get description() { return v.default.Messages.COMMAND_KICK_USER_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_KICK_USER_DESCRIPTION }, required: !0 }, { name: "reason", displayName: "reason", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_KICK_REASON_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_KICK_REASON_DESCRIPTION }, required: !1 }], predicate: e => { let { guild: t } = e; return m.default.can(g.Permissions.KICK_MEMBERS, t) }, execute: (e, t) => { var n; let { guild: i, channel: r } = t; if (null == i) return; let s = null !== (n = M(e, "user")) && void 0 !== n ? n : ""; if (!m.default.canManageUser(g.Permissions.KICK_MEMBERS, s, i)) { _.default.sendBotMessage(r.id, v.default.Messages.COMMAND_KICK_UNABLE); return }(async () => { var t; let n = N.default.getUser(s); if (null == n) throw Error(); await d.default.kickUser(i.id, s, null !== (t = M(e, "reason")) && void 0 !== t ? t : ""), _.default.sendBotMessage(r.id, v.default.Messages.COMMAND_KICK_CONFIRMATION.format({ user: O.default.getUserTag(n) })) })().catch(() => { _.default.sendBotMessage(r.id, v.default.Messages.COMMAND_KICK_ERROR) }) } }, { id: "-12", name: "ban", displayName: "ban", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_BAN_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_BAN_DESCRIPTION }, options: [{ name: "user", displayName: "user", type: c.ApplicationCommandOptionType.USER, get description() { return v.default.Messages.COMMAND_BAN_USER_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_BAN_USER_DESCRIPTION }, required: !0 }, { name: "delete_messages", displayName: "delete_messages", type: c.ApplicationCommandOptionType.INTEGER, get description() { return v.default.Messages.COMMAND_BAN_DELETE_MESSAGES_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_BAN_DELETE_MESSAGES_DESCRIPTION }, required: !0, get choices() { return [{ name: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_NONE, displayName: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_NONE, value: 0 }, { name: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_1HR, displayName: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_1HR, value: p.default.Seconds.HOUR }, { name: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_6HR, displayName: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_6HR, value: 6 * p.default.Seconds.HOUR }, { name: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_12HR, displayName: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_12HR, value: 12 * p.default.Seconds.HOUR }, { name: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_24HR, displayName: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_24HR, value: p.default.Seconds.DAY }, { name: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_3D, displayName: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_3D, value: 3 * p.default.Seconds.DAY }, { name: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_7D, displayName: v.default.Messages.DELETE_MESSAGE_HISTORY_OPTION_7D, value: 7 * p.default.Seconds.DAY }] } }, { name: "reason", displayName: "reason", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_BAN_REASON_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_BAN_REASON_DESCRIPTION }, required: !1 }], predicate: e => { let { guild: t } = e; return m.default.can(g.Permissions.BAN_MEMBERS, t) }, execute: (e, t) => { var n; let { guild: i, channel: r } = t; if (null == i) return; let s = null !== (n = M(e, "user")) && void 0 !== n ? n : ""; if (!m.default.canManageUser(g.Permissions.BAN_MEMBERS, s, i)) { _.default.sendBotMessage(r.id, v.default.Messages.COMMAND_BAN_UNABLE); return }(async () => { var t, n; if ("" === s) throw Error(); let a = null !== (t = M(e, "delete_messages")) && void 0 !== t ? t : 0, o = null !== (n = M(e, "reason")) && void 0 !== n ? n : "", l = N.default.getUser(s); await d.default.banUser(i.id, s, a, o), _.default.sendBotMessage(r.id, v.default.Messages.COMMAND_BAN_CONFIRMATION.format({ user: null != l ? O.default.getUserTag(l) : s })) })().catch(() => { _.default.sendBotMessage(r.id, v.default.Messages.COMMAND_BAN_ERROR) }) } }, { id: "-13", name: "timeout", displayName: "timeout", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_TIMEOUT_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TIMEOUT_DESCRIPTION }, options: [{ name: "user", displayName: "user", type: c.ApplicationCommandOptionType.USER, get description() { return v.default.Messages.COMMAND_TIMEOUT_USER_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TIMEOUT_USER_DESCRIPTION }, required: !0 }, { name: "duration", displayName: "duration", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_TIMEOUT_DURATION_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TIMEOUT_DURATION_DESCRIPTION }, required: !0, get choices() { return (0, L.getDisableCommunicationDurationOptions)().map(e => ({ ...e, name: e.label, displayName: e.label })) } }, { name: "reason", displayName: "reason", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_TIMEOUT_REASON_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_TIMEOUT_REASON_DESCRIPTION }, required: !1 }], predicate: e => { let { guild: t } = e; return m.default.can(g.Permissions.MODERATE_MEMBERS, t) }, execute: (e, t) => { let { guild: n, channel: i } = t; if (null == n) return; let r = M(e, "user"); if (!(0, E.canToggleCommunicationDisableOnUser)(n.id, r)) { _.default.sendBotMessage(i.id, v.default.Messages.COMMAND_TIMEOUT_UNABLE); return }(async () => { var t, s; let o = null !== (t = M(e, "duration")) && void 0 !== t ? t : "", l = null !== (s = M(e, "reason")) && void 0 !== s ? s : "", u = N.default.getUser(r); if (null == u) throw Error(); await d.default.setCommunicationDisabledUntil({ guildId: n.id, userId: r, communicationDisabledUntilTimestamp: a()().add(o, "s").toISOString(), duration: o, reason: l }), _.default.sendBotMessage(i.id, v.default.Messages.COMMAND_TIMEOUT_CONFIRMATION.format({ user: O.default.getUserTag(u), duration: o })) })().catch(() => { _.default.sendBotMessage(i.id, v.default.Messages.COMMAND_TIMEOUT_ERROR) }) } }, { id: "-14", name: "msg", displayName: "msg", type: c.ApplicationCommandType.CHAT, inputType: C.ApplicationCommandInputType.BUILT_IN, applicationId: R.BuiltInSectionId.BUILT_IN, get description() { return v.default.Messages.COMMAND_MSG_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_MSG_DESCRIPTION }, options: [{ name: "user", displayName: "user", type: c.ApplicationCommandOptionType.USER, get description() { return v.default.Messages.COMMAND_MSG_USER_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_MSG_USER_DESCRIPTION }, required: !0 }, { name: "message", displayName: "message", type: c.ApplicationCommandOptionType.STRING, get description() { return v.default.Messages.COMMAND_MSG_MESSAGE_DESCRIPTION }, get displayDescription() { return v.default.Messages.COMMAND_MSG_MESSAGE_DESCRIPTION }, required: !0, get maxLength() { var U; return (null === (U = N.default.getCurrentUser()) || void 0 === U ? void 0 : U.premiumType) ? g.MAX_MESSAGE_LENGTH_PREMIUM : g.MAX_MESSAGE_LENGTH } }], execute: (e, t) => { var n; let { channel: i } = t, s = M(e, "user"), a = null !== (n = M(e, "message")) && void 0 !== n ? n : ""; (async () => { await u.default.openPrivateChannel(s).then(e => { let t = A.default.getChannel(e); r()(null != t, "Newly created PrivateChannel is null"), _.default.sendMessage(t.id, I.default.parse(t, a)) }) })().catch(() => { _.default.sendBotMessage(i.id, v.default.Messages.COMMAND_MSG_ERROR) }) } }], b = P.filter(e => ["gif", "tenor", "tts", "me", "tableflip", "unflip", "shrug", "spoiler", "nick"].includes(e.name)), G = (e, t, n) => { let i = t ? P : b; return i = i.filter(t => t.type === e && (!n || t.inputType === C.ApplicationCommandInputType.BUILT_IN_TEXT || t.inputType === C.ApplicationCommandInputType.BUILT_IN_INTEGRATION)) } }, 689079: function(e, t, n) { "use strict"; n.r(t), n.d(t, { APPLICATION_COMMAND_PERMISSIONS_LIMIT: function() { return E }, APPLICATION_USER_INSTALL_BETA_USER_LIMIT: function() { return S }, AUTOCOMPLETE_OPTION_DEBOUNCE_TIME: function() { return f }, BOOLEAN_CHOICES: function() { return u }, BuiltInSectionId: function() { return r }, CONTEXT_MENU_COMMANDS_QUERY_LIMIT: function() { return T }, DISCOVERY_COMMANDS_FRECENCY_LIMIT: function() { return _ }, DISCOVERY_COMMANDS_QUERY_LIMIT: function() { return d }, FALSE_OPTION_NAME: function() { return l }, MAX_SUBCOMMAND_LEVEL: function() { return I }, SUB_COMMAND_KEY_SEPARATOR: function() { return c }, TRUE_OPTION_NAME: function() { return o }, getValidationErrorText: function() { return h } }); var i, r, s = n("911969"), a = n("689938"); let o = "True", l = "False", u = [{ name: o, displayName: o, value: "true" }, { name: l, displayName: l, value: "false" }]; (i = r || (r = {})).BUILT_IN = "-1", i.FRECENCY = "-2"; let d = 10, _ = 5, c = "\0", E = 100, I = 3, T = 10, f = 500; Object.freeze([]), Object.freeze([]); let S = 25; function h(e) { if (null != e.choices) return a.default.Messages.COMMAND_VALIDATION_CHOICE_ERROR; switch (e.type) { case s.ApplicationCommandOptionType.BOOLEAN: return a.default.Messages.COMMAND_VALIDATION_BOOLEAN_ERROR; case s.ApplicationCommandOptionType.CHANNEL: return a.default.Messages.COMMAND_VALIDATION_CHANNEL_ERROR; case s.ApplicationCommandOptionType.INTEGER: return a.default.Messages.COMMAND_VALIDATION_INTEGER_ERROR; case s.ApplicationCommandOptionType.NUMBER: return a.default.Messages.COMMAND_VALIDATION_NUMBER_ERROR; case s.ApplicationCommandOptionType.ROLE: return a.default.Messages.COMMAND_VALIDATION_ROLE_ERROR; case s.ApplicationCommandOptionType.USER: return a.default.Messages.COMMAND_VALIDATION_USER_ERROR; case s.ApplicationCommandOptionType.MENTIONABLE: return a.default.Messages.COMMAND_VALIDATION_MENTIONABLE_ERROR; default: return a.default.Messages.COMMAND_VALIDATION_GENERAL_ERROR } } }, 700089: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useTopCommands: function() { return o } }); var i = n("470079"), r = n("442837"), s = n("675478"), a = n("654455"); function o(e) { i.useEffect(() => { s.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []); let t = (0, r.useStateFromStores)([a.default], () => a.default.getTopCommandsWithoutLoadingLatest()); return i.useMemo(() => (0, a.getFilteredTopCommands)(t, e), [t, e]) } }, 654455: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getFilteredTopCommands: function() { return T } }), n("47120"), n("653041"); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("911969"), u = n("704907"), d = n("581883"); n("689079"); var _ = n("526761"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = { pendingUsages: [] }, I = new u.default({ computeBonus: () => 1, computeWeight: e => e <= 3 ? 100 : e <= 15 ? 70 : e <= 30 ? 50 : e <= 45 ? 30 : e <= 80 ? 10 : 0, lookupKey: e => e, afterCompute: () => {}, numFrequentlyItems: 500 }); function T(e, t) { return e.filter(e => { if (e.includes(":")) return null != t.guild && t.guild.id === e.split(":")[1]; return !0 }).map(e => e.split(":")[0]) } function f(e, t) { return 0 > Number(t.id) ? t.id : null != e.guild && null != t.guildId ? "".concat(t.id, ":").concat(e.guild.id) : t.id } function S() { var e, t; let n = null !== (t = null === (e = d.default.frecencyWithoutFetchingLatest.applicationCommandFrecency) || void 0 === e ? void 0 : e.applicationCommands) && void 0 !== t ? t : {}; I.overwriteHistory(s().mapValues(n, e => ({ ...e, recentUses: e.recentUses.map(Number).filter(e => e > 0) })), E.pendingUsages) } class h extends(i = a.default.PersistedStore) { initialize(e) { null != e && (E = e), this.syncWith([d.default], S) } getState() { return E } hasPendingUsage() { return E.pendingUsages.length > 0 } getCommandFrecencyWithoutLoadingLatest() { return I } getScoreWithoutLoadingLatest(e, t) { var n; return null !== (n = I.getScore(f(e, t))) && void 0 !== n ? n : 0 } getTopCommandsWithoutLoadingLatest() { return I.frequently } } c(h, "displayName", "ApplicationCommandFrecencyStore"), c(h, "persistKey", "ApplicationCommandFrecencyV2"), t.default = new h(o.default, { APPLICATION_COMMAND_USED: function(e) { let { command: t, context: n } = e; if (t.type !== l.ApplicationCommandType.CHAT) return !1; let i = f(n, t); E.pendingUsages.push({ key: i, timestamp: Date.now() }), I.track(i), I.compute() }, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: { type: t }, wasSaved: n } = e; if (t !== _.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS || !n) return !1; E.pendingUsages = [] } }) }, 963456: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchApplicationCommandIndex: function() { return l }, requestApplicationCommandIndex: function() { return u } }); var i = n("544891"), r = n("570140"), s = n("626135"), a = n("70956"), o = n("981631"); async function l(e, t, n) { let l, u = 0; switch (e.type) { case "channel": l = o.Endpoints.APPLICATION_COMMAND_INDEX_CHANNEL(e.channelId); break; case "guild": l = o.Endpoints.APPLICATION_COMMAND_INDEX_GUILD(e.guildId); break; case "user": l = o.Endpoints.APPLICATION_COMMAND_INDEX_USER; break; case "application": l = o.Endpoints.APPLICATION_COMMAND_INDEX_APPLICATION(e.applicationId) } let d = async t => u >= 3 ? (c(!0), r.default.dispatch({ type: "APPLICATION_COMMAND_INDEX_FETCH_FAILURE", target: e })) : (await new Promise(e => setTimeout(e, t)), _()), _ = () => i.HTTP.get({ url: l, retries: 3 - u - 1, signal: n.signal, onRequestCreated: () => u++ }).then(t => 202 === t.status ? d(5e3) : (c(!1), r.default.dispatch({ type: "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS", target: e, index: t.body })), t => { if (n.signal.aborted) { c(!0); return } return 429 === t.status ? d(t.body.retry_after * a.default.Millis.SECOND) : (c(!0), r.default.dispatch({ type: "APPLICATION_COMMAND_INDEX_FETCH_FAILURE", target: e })) }), c = e => { let i = performance.now() - t; s.default.track(o.AnalyticEvents.APPLICATION_COMMAND_PERFORMANCE, { duration_ms: i, error: e, aborted: n.signal.aborted, include_applications: !0, retries: Math.max(u - 1, 0), kind: null, command_type: null }) }; await _() } function u(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; r.default.dispatch({ type: "APPLICATION_COMMAND_INDEX_FETCH_REQUEST", start: performance.now(), target: e, canFetch: t }) } }, 213459: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useContextIndexState: function() { return Q }, useDiscoveryState: function() { return $ }, useGuildIndexState: function() { return q }, useUserIndexState: function() { return J } }), n("47120"), n("653041"), n("390547"); var i, r, s, a = n("470079"), o = n("512722"), l = n.n(o), u = n("259443"), d = n("442837"), _ = n("570140"), c = n("749210"), E = n("911969"), I = n("822245"), T = n("399860"), f = n("706454"), S = n("675478"), h = n("592125"), A = n("430824"), m = n("594174"), N = n("626135"), p = n("254711"), O = n("700089"), C = n("654455"), R = n("963456"), g = n("367790"), L = n("895924"), v = n("581364"), D = n("807169"), M = n("104793"), y = n("689079"), P = n("981631"), U = n("674563"); function b(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let G = new u.Logger("ApplicationCommandIndexStore"), w = Symbol("currentUser"), k = Symbol("stale"), B = Symbol("current"), V = Object.freeze({ descriptors: [], commands: [], sectionedCommands: [], loading: !0 }), x = Object.freeze({ serverVersion: B, fetchState: { fetching: !1 }, result: { sections: {}, sectionIdsByBotId: {}, version: B } }), F = Object.freeze({ serverVersion: k, fetchState: { fetching: !1 } }), H = { sensitivity: "accent", numeric: !0 }; function Y(e) { switch (e.type) { case "guild": return e.guildId; case "channel": return e.channelId; case "user": return w; case "application": return e.applicationId } } function j(e, t) { let n, i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = Y(e), s = X.indices[r]; return null != s ? ("fetchState" in t && s.fetchState.fetching && s.fetchState.abort.abort(), n = { ...s, ...t }) : i && (n = { serverVersion: k, fetchState: { fetching: !1 }, ...t }), void 0 !== n && (X.indices[r] = n, "application" === e.type && (X.applicationIndices.set(r, n), X.applicationIndicesVersion = X.applicationIndicesVersion + 1)), s } function W(e) { let t = Y(e), n = X.indices[t]; (null == n ? void 0 : n.fetchState.fetching) && n.fetchState.abort.abort(), delete X.indices[t] } function K() { for (let e of Object.values(X.indices)) e.fetchState.fetching && e.fetchState.abort.abort(); X.indices = {} } function z() { j({ type: "user" }, { serverVersion: k }) } class Z extends(i = d.default.Store) { initialize() { this.waitFor(f.default), this.syncWith([f.default], () => { ! function() { let e = f.default.locale; e !== X.oldLocale && (K(), X.collator = new Intl.Collator(e, { sensitivity: "accent", numeric: !0 }), X.oldLocale = e) }() }) } getContextState(e) { var t, n; return null != e && ei(e) ? null !== (n = this.indices[null !== (t = e.guild_id) && void 0 !== t ? t : e.id]) && void 0 !== n ? n : F : x } hasContextStateApplication(e, t, n) { var i, r; let s = this.indices[null != n ? n : t]; return e in (null !== (r = null == s ? void 0 : null === (i = s.result) || void 0 === i ? void 0 : i.sections) && void 0 !== r ? r : {}) } getUserState() { var e; return null !== (e = this.indices[w]) && void 0 !== e ? e : F } hasUserStateApplication(e) { var t, n; let i = this.indices[w]; return e in (null !== (n = null == i ? void 0 : null === (t = i.result) || void 0 === t ? void 0 : t.sections) && void 0 !== n ? n : {}) } getApplicationState(e) { var t; return null == e ? x : null !== (t = this.indices[e]) && void 0 !== t ? t : F } getApplicationStates() { return this.applicationIndices } hasApplicationState(e) { return e in this.indices } query(e, t, n) { if (null == m.default.getCurrentUser()) return V; let i = this.getContextState(e), r = this.getUserState(), s = this.getApplicationState(n.applicationId), a = this.getApplicationStates(), o = (0, D.buildPermissionContext)(e, t.commandType), l = !1 !== t.applicationCommands && o.hasBaseAccessPermissions, u = !1; n.allowFetch && (l && ei(e) && (N.default.track(P.AnalyticEvents.APPLICATION_COMMAND_CACHE_FETCH, { miss: null == i.result, size: Object.keys(X.indices).length }), er(i) && (null != e.guild_id ? (0, R.requestApplicationCommandIndex)({ type: "guild", guildId: e.guild_id }) : (0, R.requestApplicationCommandIndex)({ type: "channel", channelId: e.id }), u = !0)), er(r) && ((0, R.requestApplicationCommandIndex)({ type: "user" }), u = !0), er(s) && null != n.applicationId && ((0, R.requestApplicationCommandIndex)({ type: "application", applicationId: n.applicationId }), u = !0)); let d = et({ permissionContext: o, text: t.text, allowApplicationCommands: l, builtIns: t.builtIns, scoreMethod: n.scoreMethod, allowEmptySections: n.allowEmptySections, contextState: i, userState: r, applicationStates: a, singleApplicationId: n.applicationId }); return d.loading = d.loading || u, d } maybeQueryForInstallLessApps(e, t) { let n = h.default.getChannel(t), i = U.INSTALL_LESS_APP_IDS.includes(e) ? e : void 0; null != n && null != i && this.query(n, { commandType: E.ApplicationCommandType.CHAT }, { placeholderCount: 5, scoreMethod: g.ScoreMethod.COMMAND_ONLY, applicationId: i, allowFetch: !0 }) } queryInstallOnDemandApp(e, t) { let n = h.default.getChannel(t); null != n && this.query(n, { commandType: E.ApplicationCommandType.CHAT }, { placeholderCount: 5, scoreMethod: g.ScoreMethod.COMMAND_ONLY, applicationId: e, allowFetch: !0 }) } constructor(...e) { super(...e), b(this, "indices", {}), b(this, "applicationIndices", new Map), b(this, "applicationIndicesVersion", 0), b(this, "oldLocale", f.default.locale), b(this, "collator", new Intl.Collator(f.default.locale, H)) } } b(Z, "displayName", "ApplicationCommandIndexStore"); let X = new Z(_.default, { LOGOUT: K, CONNECTION_OPEN: function() { for (let e of Object.values(X.indices)) e.serverVersion = k }, APPLICATION_COMMAND_INDEX_FETCH_REQUEST: function(e) { var t; let { target: n, start: i, canFetch: r } = e; if (er(null !== (t = X.indices[Y(n)]) && void 0 !== t ? t : F)) { let e = new AbortController; j(n, { fetchState: { fetching: !0, abort: e } }, !0), (null == r || r) && (0, R.fetchApplicationCommandIndex)(n, i, e) } }, APPLICATION_COMMAND_INDEX_FETCH_SUCCESS: function(e) { var t, n; let { target: i, index: r } = e, s = null === (t = m.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; if (null == s) return !1; let a = {}, o = {}, l = new Set; for (let e of r.applications) { if (null == e.bot && null != e.bot_id) { o[e.bot_id] = e.id; let t = m.default.getUser(e.bot_id); null != t ? e.bot = t : l.add(e.bot_id) } else null != e.bot && (o[e.bot.id] = e.id); let t = { descriptor: { ...(0, v.getApplicationCommandSection)(function(e) { return { description: e.description, icon: e.icon, id: e.id, name: e.name, bot: e.bot } }(e)), permissions: null != e.permissions ? (0, T.keyPermissions)(eo(e.permissions, s)) : void 0, botId: e.bot_id }, commands: {} }; a[e.id] = t } for (let e of ("guild" === i.type && l.size > 0 && c.default.requestMembersById(i.guildId, [...l]), (0, v.buildApplicationCommands)(r.application_commands.map(e => (function(e, t) { var n, i, r, s, a; let o = { ...e, description: null !== (r = null !== (i = e.description_default) && void 0 !== i ? i : e.description) && void 0 !== r ? r : "", dm_permission: e.dm_permission, name: null !== (s = e.name_default) && void 0 !== s ? s : e.name, options: null !== (a = null === (n = e.options) || void 0 === n ? void 0 : n.map(es)) && void 0 !== a ? a : [], permissions: null != e.permissions ? eo(e.permissions, t) : void 0 }; return e.description !== e.description_default && (o.description_localized = e.description), e.name !== e.name_default && (o.name_localized = e.name), o })(e, s)), !0))) { let t = a[e.applicationId]; if (null == t) { G.error("Command has no matching application"); continue } t.commands[e.id] = e } let u = null !== (n = r.version) && void 0 !== n ? n : B; j(i, { serverVersion: u, result: { sections: a, sectionIdsByBotId: o, version: u }, fetchState: { fetching: !1 } }) }, APPLICATION_COMMAND_INDEX_FETCH_FAILURE: function(e) { let { target: t } = e; j(t, { fetchState: { fetching: !1, retryAfter: Date.now() + 5e3 } }) }, APPLICATION_COMMAND_EXECUTE_BAD_VERSION: function(e) { let { applicationId: t, channelId: n, guildId: i } = e; X.hasContextStateApplication(t, n, i) && j(null != i ? { type: "guild", guildId: i } : { type: "channel", channelId: n }, { serverVersion: k }), X.hasUserStateApplication(t) && j({ type: "user" }, { serverVersion: k }), X.hasApplicationState(t) && j({ type: "application", applicationId: t }, { serverVersion: k }) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; W({ type: "channel", channelId: t.id }) }, GUILD_DELETE: function(e) { let { guild: t } = e; W({ type: "guild", guildId: t.id }) }, USER_APPLICATION_UPDATE: z, USER_APPLICATION_REMOVE: z, GUILD_APPLICATION_COMMAND_INDEX_UPDATE: function(e) { var t; let { guildId: n, version: i } = e, r = j({ type: "guild", guildId: n }, { serverVersion: null != i ? i : k }), s = null == r ? void 0 : null === (t = r.result) || void 0 === t ? void 0 : t.sectionIdsByBotId; if (null != s) for (let e in s) { let t = h.default.getDMFromUserId(e); null != t && j({ type: "channel", channelId: t }, { serverVersion: k }) } }, GUILD_MEMBERS_CHUNK_BATCH: function(e) { let { chunks: t } = e, n = !1; for (let e of t) n = function(e, t) { var n; let i = Y({ type: "guild", guildId: e }), r = null === (n = X.indices[i]) || void 0 === n ? void 0 : n.result; if (null == r) return !1; let s = !1; return t.forEach(e => { let { user: t } = e; if (!t.bot) return; let n = r.sectionIdsByBotId[t.id]; if (null == n) return; let i = r.sections[n]; l()(null != i, "Bot has no matching index section"), l()(null != i.descriptor.application, "Bot's index section has no application info"); let a = (0, v.getApplicationCommandSection)({ ...i.descriptor.application, bot: t }); i.descriptor = { ...i.descriptor, ...a }, s = !0 }), s }(e.guildId, e.members) || n; return n } }); function Q(e, t, n) { let [i, r] = a.useState(!0), s = (0, d.useStateFromStoresObject)([X], () => X.getContextState(e)); return a.useEffect(() => { i && null != e && (n && t && ei(e) && (N.default.track(P.AnalyticEvents.APPLICATION_COMMAND_CACHE_FETCH, { miss: null == s.result, size: Object.keys(X.indices).length }), er(s) && (null != e.guild_id ? (0, R.requestApplicationCommandIndex)({ type: "guild", guildId: e.guild_id }) : (0, R.requestApplicationCommandIndex)({ type: "channel", channelId: e.id }))), r(!1)) }, [s, n, e, t, i]), s } function q(e, t) { let [n, i] = a.useState(!0), r = (0, d.useStateFromStoresObject)([X], () => { var t; return null !== (t = X.indices[e]) && void 0 !== t ? t : F }); return a.useEffect(() => { n && null != e && (t && (N.default.track(P.AnalyticEvents.APPLICATION_COMMAND_CACHE_FETCH, { miss: null == r.result, size: Object.keys(X.indices).length }), er(r) && (0, R.requestApplicationCommandIndex)({ type: "guild", guildId: e })), i(!1)) }, [r, t, e, n]), r } function J(e, t) { let [n, i] = a.useState(!0), r = (0, d.useStateFromStoresObject)([X], () => X.getUserState()); return a.useEffect(() => { n && (t && er(r) && e && (0, R.requestApplicationCommandIndex)({ type: "user" }), i(!1)) }, [r, t, e, n]), r } t.default = X; function $(e, t, n, i) { let { descriptors: r, commands: s, sectionedCommands: o, loading: l } = function(e, t, n) { let i = (0, D.usePermissionContext)(e, t.commandType), r = !1 !== t.applicationCommands && i.hasBaseAccessPermissions, s = Q(e, r, n.allowFetch), o = J(r, n.allowFetch), l = (0, d.useStateFromStores)([X], () => X.getApplicationStates()), u = (0, d.useStateFromStores)([X], () => X.applicationIndicesVersion); return a.useMemo(() => et({ permissionContext: i, text: t.text, allowApplicationCommands: r, builtIns: t.builtIns, scoreMethod: n.scoreMethod, allowEmptySections: n.allowEmptySections, contextState: s, userState: o, applicationStates: n.allowApplicationState ? l : new Map, sortOptions: n.sortOptions, singleApplicationId: n.applicationId }), [i, t.text, t.builtIns, r, n.scoreMethod, n.allowEmptySections, n.sortOptions, n.allowApplicationState, n.applicationId, s, o, l, u]) }(e, n, i), u = (0, O.useTopCommands)({ channel: e, guild: t }); return a.useMemo(() => { if (!i.includeFrecency || 0 === u.length) return { descriptors: r, commands: s, sectionedCommands: o, loading: l }; let n = { channel: e, guild: t }, a = s.filter(e => u.includes(e.id)).sort((e, t) => { let i = C.default.getScoreWithoutLoadingLatest(n, e); return C.default.getScoreWithoutLoadingLatest(n, t) - i }).splice(0, y.DISCOVERY_COMMANDS_FRECENCY_LIMIT); return 0 === a.length ? { descriptors: r, commands: s, sectionedCommands: o, loading: l } : { descriptors: [p.BUILT_IN_SECTIONS[y.BuiltInSectionId.FRECENCY], ...r], commands: a.concat(s), sectionedCommands: [{ section: p.BUILT_IN_SECTIONS[y.BuiltInSectionId.FRECENCY], data: a }, ...o], loading: l } }, [l, i.includeFrecency, u, e, t, s, r, o]) } let ee = Object.freeze({ applications: { useFrecency: !1, useScore: !1 }, commands: { useFrecency: !0, useScore: !0 } }); function et(e) { var t, n, i, r, s, a; let { permissionContext: o, contextState: u, userState: d, applicationStates: _, text: c, builtIns: E = g.BuiltInCommandFilter.ALLOW, allowApplicationCommands: T = !0, singleApplicationId: f, allowEmptySections: h = !1, scoreMethod: m = g.ScoreMethod.NONE, sortOptions: N = ee } = e, { commandType: O } = o, R = null == c ? void 0 : c.toLowerCase(), L = null == R ? void 0 : R.split(" "), v = E === g.BuiltInCommandFilter.ONLY_TEXT, D = E !== g.BuiltInCommandFilter.DENY ? (0, p.getBuiltInCommands)(O, !0, v) : [], M = [], P = { permissionContext: o, query: R, splitQuery: L, allowEmptySections: h, scoreMethod: m }; if (T) { let e = null !== (r = null === (n = u.result) || void 0 === n ? void 0 : n.sections) && void 0 !== r ? r : {}, t = null !== (s = null === (i = d.result) || void 0 === i ? void 0 : i.sections) && void 0 !== s ? s : {}, o = new Set; for (let t in e) { let n = e[t]; (null == f || n.descriptor.id === f) && o.add(t) } for (let e in t) { let n = t[e]; (null == f || n.descriptor.id === f) && o.add(e) } let c = new Map; for (let [e, t] of _) if (null == f || e === f) { let e = null === (a = t.result) || void 0 === a ? void 0 : a.sections; if (null != e) for (let t of Object.keys(e)) o.add(t), c.set(t, e[t]) } for (let n of Array.from(o)) { let i, r; let s = e[n], a = t[n], o = c.get(n); if (null != s && null != a) { for (let e in i = a.descriptor, r = [], a.commands) { let t = a.commands[e]; r.push(t) } for (let e in s.commands) if (!(e in a.commands)) { let t = s.commands[e]; r.push(t) } } else null != s ? (i = s.descriptor, r = Object.values(s.commands)) : null != a ? (i = a.descriptor, r = Object.values(a.commands)) : null != o && (i = o.descriptor, r = Object.values(o.commands)); l()(null != i, "Failed to select application descriptor"), l()(null != r, "Failed to select list of application commands"); let u = en(i, r, P); null != u && M.push(u) } N.applications.useFrecency && S.FrecencyUserSettingsActionCreators.loadIfNecessary(), M.sort((e, t) => { if (N.applications.useScore && m === g.ScoreMethod.APPLICATION_ONLY) { var n, i, r, s; let a = null !== (r = null === (n = e.data[0]) || void 0 === n ? void 0 : n.score) && void 0 !== r ? r : Number.MAX_VALUE, o = null !== (s = null === (i = t.data[0]) || void 0 === i ? void 0 : i.score) && void 0 !== s ? s : Number.MAX_VALUE; if (a !== o) return a - o } if (N.applications.useFrecency) { let n = I.default.getScoreWithoutLoadingLatest(e.section.id), i = I.default.getScoreWithoutLoadingLatest(t.section.id); if (n !== i) return i - n } return el(e.section.name, t.section.name) }) } if (D.length > 0 || !0 === h) { let e = en(p.BUILT_IN_SECTIONS[y.BuiltInSectionId.BUILT_IN], D, P); null != e && M.push(e) } let U = M.flatMap(e => e.data.map(t => ({ ...t, section: e.section }))); if (m === g.ScoreMethod.COMMAND_ONLY || m === g.ScoreMethod.COMMAND_OR_APPLICATION) { let e = o.context, t = A.default.getGuild(o.context.guild_id); N.commands.useFrecency && S.FrecencyUserSettingsActionCreators.loadIfNecessary(), U.sort((n, i) => { if (N.commands.useScore) { var r, s; let e = null !== (r = n.score) && void 0 !== r ? r : 0, t = null !== (s = i.score) && void 0 !== s ? s : 0; if (e !== t) return e - t } if (N.commands.useFrecency) { let r = C.default.getScoreWithoutLoadingLatest({ channel: e, guild: t }, n), s = C.default.getScoreWithoutLoadingLatest({ channel: e, guild: t }, i); if (r !== s) return s - r } return el(n.displayName, i.displayName) }) } return { commands: U, descriptors: M.map(e => e.section), sectionedCommands: M, loading: (null == u ? void 0 : u.fetchState.fetching) === !0 || (null == d ? void 0 : d.fetchState.fetching) === !0 || null != f && (null === (t = _.get(f)) || void 0 === t ? void 0 : t.fetchState.fetching) === !0 } } function en(e, t, n) { let i, { query: r, splitQuery: s, allowEmptySections: a, scoreMethod: o, permissionContext: l } = n, { context: u, userId: d, roleIds: _, isImpersonating: c } = l, E = null != u.guild_id ? M.computeAllowedForUser(e.permissions, u.guild_id, d, _, c) : null, I = null != u.guild_id ? M.computeAllowedForChannel(e.permissions, u, u.guild_id) : null, T = []; for (let n of t) M.hasAccess(n, l, E, I, e.botId) === M.HasAccessResult.ALLOWED && T.push(n); return 0 !== (i = o !== g.ScoreMethod.NONE && null != r && null != s ? function(e, t, n, i, r) { let s; let a = []; if (r === g.ScoreMethod.APPLICATION_ONLY || r === g.ScoreMethod.COMMAND_OR_APPLICATION) { let t = i.name.toLocaleLowerCase(); if (t.startsWith(e)) s = 5; else if (t.includes(e)) s = 6; else { var o, l; let t = null === (l = i.application) || void 0 === l ? void 0 : null === (o = l.description) || void 0 === o ? void 0 : o.toLocaleLowerCase(); (null == t ? void 0 : t.includes(e)) && (s = 8) } } let u = t[0], d = t.slice(1).join(" "); for (let t of n) { let n; (r === g.ScoreMethod.COMMAND_ONLY || r === g.ScoreMethod.COMMAND_OR_APPLICATION) && (n = function(e, t, n, i) { var r; let s = e.name, a = e.displayName; if (s.startsWith(t) || a.startsWith(t)) return 0; if (s.startsWith(n) && s.split(" ").slice(1).join(" ").startsWith(i) || a.startsWith(n) && a.split(" ").slice(1).join(" ").startsWith(i)) return 1; if (s.includes(t) || (null == a ? void 0 : a.includes(t))) return 2; let o = !1; for (let { name: n, serverLocalizedName: i } of null !== (r = e.options) && void 0 !== r ? r : []) { if (n.startsWith(t) || "".concat(s, " ").concat(n).startsWith(t) || null != a && "".concat(a, " ").concat(n).startsWith(t) || null != i && (i.startsWith(t) || "".concat(s, " ").concat(i).startsWith(t) || null != a && "".concat(a, " ").concat(i).startsWith(t))) return 3; (n.includes(t) || (null == i ? void 0 : i.includes(t))) && (o = !0) } return o ? 4 : e.description.toLocaleLowerCase().includes(t) ? 7 : void 0 }(t, e, u, d)), (void 0 === n || void 0 !== s && s < n) && (n = s), void 0 !== n && a.push({ ...t, score: n }) } return a }(r, s, T, e, o) : T).length || a ? ((o === g.ScoreMethod.NONE || o === g.ScoreMethod.APPLICATION_ONLY) && i.sort((e, t) => el(e.displayName, t.displayName)), { section: e, data: i }) : null } function ei(e) { var t; return null != e.guild_id || e.type === P.ChannelTypes.DM && (null === (t = m.default.getUser(e.getRecipientId())) || void 0 === t ? void 0 : t.bot) === !0 } function er(e) { return !! function(e) { var t; return (null === (t = e.result) || void 0 === t ? void 0 : t.version) !== e.serverVersion }(e) && !e.fetchState.fetching && (null == e.fetchState.retryAfter || Date.now() >= e.fetchState.retryAfter) } function es(e) { var t, n, i, r; let s = { ...e, choices: null === (t = e.choices) || void 0 === t ? void 0 : t.map(ea), description: null !== (i = e.description_default) && void 0 !== i ? i : e.description, name: null !== (r = e.name_default) && void 0 !== r ? r : e.name, options: null === (n = e.options) || void 0 === n ? void 0 : n.map(es) }; return e.description !== e.description_default && (s.description_localized = e.description), e.name !== e.name_default && (s.name_localized = e.name), s } function ea(e) { var t; let n = { ...e, name: null !== (t = e.name_default) && void 0 !== t ? t : e.name }; return e.name !== e.name_default && (n.name_localized = e.name), n } function eo(e, t) { let n = []; if (null != e.user && n.push({ type: L.ApplicationCommandPermissionType.USER, id: t, permission: e.user }), null != e.channels) for (let [t, i] of Object.entries(e.channels)) n.push({ type: L.ApplicationCommandPermissionType.CHANNEL, id: t, permission: i }); if (null != e.roles) for (let [t, i] of Object.entries(e.roles)) n.push({ type: L.ApplicationCommandPermissionType.ROLE, id: t, permission: i }); return n }(s = r || (r = {}))[s.COMMAND_NAME_STARTS_WITH = 0] = "COMMAND_NAME_STARTS_WITH", s[s.STARTS_WITH_COMMAND_NAME = 1] = "STARTS_WITH_COMMAND_NAME", s[s.COMMAND_NAME_CONTAINS = 2] = "COMMAND_NAME_CONTAINS", s[s.STARTS_WITH_COMMAND_OPTION_NAME_OR_OPTION_NAME = 3] = "STARTS_WITH_COMMAND_OPTION_NAME_OR_OPTION_NAME", s[s.OPTION_NAME_CONTAINS = 4] = "OPTION_NAME_CONTAINS", s[s.SECTION_NAME_STARTS_WITH = 5] = "SECTION_NAME_STARTS_WITH", s[s.SECTION_NAME_CONTAINS = 6] = "SECTION_NAME_CONTAINS", s[s.COMMAND_DESCRIPTION_CONTAINS = 7] = "COMMAND_DESCRIPTION_CONTAINS", s[s.SECTION_DESCRIPTION_CONTAINS = 8] = "SECTION_DESCRIPTION_CONTAINS"; function el(e, t) { return X.collator.compare(e, t) } }, 456007: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n.d(t, { filterEmpty: function() { return u }, getInitialValuesFromInteractionOptions: function() { return E }, getOptionalString: function() { return _ }, getString: function() { return d }, normalizeNumericString: function() { return c } }), n("757143"), n("47120"), n("512722"); var a = n("911969"), o = n("93725"), l = n("226951"); function u(e) { return null == e ? [] : e.filter((t, n) => "text" !== t.type || (n > 0 && n < e.length - 1 ? "" !== t.text : "" !== t.text.trim())) } function d(e, t) { let n = e[t], i = ""; for (let e of n) switch (e.type) { case "text": case "textMention": i += e.text; break; case "userMention": i += "<@".concat(e.userId, ">"); break; case "channelMention": i += "<#".concat(e.channelId, ">"); break; case "roleMention": i += "<@&".concat(e.roleId, ">"); break; case "emoji": i += e.surrogate; break; case "customEmoji": i += "<".concat(e.animated ? "a" : "", ":").concat(e.name.replace(/:/g, "").split("~")[0], ":").concat(e.emojiId, ">") } return i } function _(e, t) { return null == e[t] ? null : d(e, t) } function c(e, t) { if (e !== s) { var n; s = e; let { group: t, decimal: a } = null !== (n = o.numberParts[e]) && void 0 !== n ? n : o.numberParts["en-US"]; i = RegExp(l.default.escape(t), "g"), r = RegExp(l.default.escape(a), "g") } return t.replace(i, "").replace(r, ".") } function E(e, t) { let n = {}; for (let r of t) { var i; let t = null === (i = e.options) || void 0 === i ? void 0 : i.find(e => e.name === r.name); if (r.type !== a.ApplicationCommandOptionType.ATTACHMENT)(null == t || !t.autocomplete) && (n[r.name] = r) } return n } n("689079") }, 10718: function(e, t, n) { "use strict"; n.r(t), n.d(t, { executeQuery: function() { return A }, getCachedApplicationSection: function() { return T }, getCachedCommand: function() { return I }, getCachedResults: function() { return f }, getChangeKeys: function() { return S }, useCommand: function() { return m }, useCommandsForApplication: function() { return N }, useDiscovery: function() { return h } }), n("47120"), n("653041"), n("724458"); var i = n("470079"), r = n("442837"), s = n("430824"), a = n("823379"), o = n("254711"), l = n("213459"), u = n("367790"), d = n("895924"), _ = n("581364"), c = n("689079"), E = n("981631"); function I(e, t) { var n, i, r, s; if (null == t) return { application: void 0, command: void 0 }; let a = l.default.getUserState(), o = l.default.getContextState(e); for (let e of Object.values(null !== (r = null === (n = a.result) || void 0 === n ? void 0 : n.sections) && void 0 !== r ? r : {}).concat(Object.values(null !== (s = null === (i = o.result) || void 0 === i ? void 0 : i.sections) && void 0 !== s ? s : {}))) { let n = e.commands[t]; if (null != n) return { application: e.descriptor.application, command: n } } return { application: void 0, command: void 0 } } function T(e, t, n) { var i, r, s, a, o, u, d, _; let c = l.default.getUserState(), E = l.default.getContextState(e), I = l.default.getApplicationState(n), T = null !== (_ = null !== (d = null === (r = c.result) || void 0 === r ? void 0 : null === (i = r.sections) || void 0 === i ? void 0 : i[n]) && void 0 !== d ? d : null === (a = E.result) || void 0 === a ? void 0 : null === (s = a.sections) || void 0 === s ? void 0 : s[n]) && void 0 !== _ ? _ : null === (u = I.result) || void 0 === u ? void 0 : null === (o = u.sections) || void 0 === o ? void 0 : o[n]; return null == T ? void 0 : T.descriptor } function f(e, t, n) { let i = l.default.query(e, { commandType: t, text: n }, { scoreMethod: u.ScoreMethod.COMMAND_OR_APPLICATION, allowFetch: !1 }); return { commands: i.commands, sections: i.descriptors } } function S(e) { let t = l.default.getUserState(), n = l.default.getContextState(e); return [null == t ? void 0 : t.result, null == n ? void 0 : n.result] } function h(e, t, n) { let a = (0, r.useStateFromStores)([s.default], () => s.default.getGuild(null == e ? void 0 : e.guild_id), [e.guild_id]), { descriptors: u, commands: d, sectionedCommands: _, loading: I } = (0, l.useDiscoveryState)(e, a, t, { ...n, allowFetch: !0 }), [T, f] = i.useState(null), S = i.useRef(!1); S.current = I; let h = i.useMemo(() => { let e = []; if (null != n.placeholderCount) for (let i = 0; i < n.placeholderCount; i++) e.push(O(i, t.commandType)); return e }, [t.commandType, n.placeholderCount]); return i.useMemo(() => { let e = { loading: S, commands: d, activeSections: u, commandsByActiveSection: _, filteredSectionId: T, hasMoreAfter: !1, placeholders: I ? h : [], sectionDescriptors: u, filterSection: e => { f(e) }, scrollDown: E.NOOP }; if (null != T) { let t = _.find(e => e.section.id === T); e.activeSections = null != t ? [t.section] : [], e.commandsByActiveSection = null != t ? [t] : [] } if (I) { let t = _[0]; if (null != t) e.commandsByActiveSection = [{ section: t.section, data: [...t.data, ...h] }, ..._.slice(1)]; else { let t = o.BUILT_IN_SECTIONS[c.BuiltInSectionId.BUILT_IN]; e.activeSections = [t], e.commandsByActiveSection = [{ section: t, data: h }] } e.commands = [...d, ...h] } return e }, [d, u, T, _, I, h]) } function A(e, t, n) { let { descriptors: i, commands: r, loading: s } = l.default.query(e, t, n), a = []; if (null != n.placeholderCount && s) for (let e = 0; e < n.placeholderCount; e++) a.push(O(e, t.commandType)); return { commands: s ? [...r, ...a] : r, sections: s && 0 === i.length ? [o.BUILT_IN_SECTIONS[c.BuiltInSectionId.BUILT_IN]] : i } } function m(e, t) { let n = (0, l.useUserIndexState)(!0, !0), r = (0, l.useContextIndexState)(e, !0, !0); return i.useMemo(() => { if (null != t) { var e, i, s, a; for (let o of Object.values(null !== (s = null === (e = n.result) || void 0 === e ? void 0 : e.sections) && void 0 !== s ? s : {}).concat(Object.values(null !== (a = null === (i = r.result) || void 0 === i ? void 0 : i.sections) && void 0 !== a ? a : {}))) { let e = o.commands[t]; if (null != e) return { command: e, application: o.descriptor.application } } } return { command: void 0, application: void 0 } }, [r.result, n.result, t]) } function N(e, t, n) { let r = (0, l.useUserIndexState)(!0, !0), s = (0, l.useContextIndexState)(e, !0, !0); return i.useMemo(() => { var e, i, o, l, u, d; let c = null !== (u = null === (i = r.result) || void 0 === i ? void 0 : null === (e = i.sections) || void 0 === e ? void 0 : e[t]) && void 0 !== u ? u : null === (o = s.result) || void 0 === o ? void 0 : o.sections[t], E = Object.values(null !== (d = null == c ? void 0 : c.commands) && void 0 !== d ? d : {}).map(e => null == e.rootCommand ? e : (0, _.buildCommand)({ rootCommand: e.rootCommand, command: e.rootCommand, applicationId: e.applicationId })).reduce((e, t) => (e[t.id] = t, e), {}); return { application: null == c ? void 0 : null === (l = c.descriptor) || void 0 === l ? void 0 : l.application, commands: n.map(e => E[e]).filter(a.isNotNullish) } }, [null == r ? void 0 : r.result, null == s ? void 0 : s.result, t, n]) } let p = { id: "placeholder-section", type: d.ApplicationCommandSectionType.APPLICATION, name: "" }; function O(e, t) { return { type: t, inputType: d.ApplicationCommandInputType.PLACEHOLDER, id: "placeholder-".concat(e), name: "", displayName: "", description: "", displayDescription: "", applicationId: "", section: p } } }, 367790: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { BuiltInCommandFilter: function() { return r }, ScoreMethod: function() { return i } }), (s = i || (i = {})).NONE = "none", s.APPLICATION_ONLY = "application_only", s.COMMAND_ONLY = "command_only", s.COMMAND_OR_APPLICATION = "command_or_application", (a = r || (r = {})).ALLOW = "allow", a.ONLY_TEXT = "only_text", a.DENY = "deny" }, 998698: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("433355"), d = n("944486"), _ = n("581364"); let c = {}; function E() { return c = {}, !0 } function I(e) { return !(e in c) && (c[e] = { activeCommand: null, activeCommandSection: null, activeOptionName: null, preferredCommandId: null, optionStates: {}, initialValues: {} }), c[e] } function T(e) { var t; let { channelId: n, command: i, section: r, initialValues: s, location: a, triggerSection: o, queryLength: l } = e, u = I(n); if ((null == i ? void 0 : i.id) === (null === (t = u.activeCommand) || void 0 === t ? void 0 : t.id)) return !1; u.activeCommand = i, u.activeCommandSection = r, u.activeOptionName = null, u.preferredCommandId = null, u.initialValues = null != s ? s : {}; let d = {}; return (null == i ? void 0 : i.options) != null && i.options.forEach(e => { d[e.name] = { isActive: !1, hasValue: !1, lastValidationResult: null, optionValue: null } }), u.optionStates = d, null != i && (0, _.trackCommandSelected)({ command: i, location: a, triggerSection: o, queryLength: l }), !0 } function f(e) { var t, n; let { channelId: i, commandId: r } = e, s = I(i); return r !== s.preferredCommandId && (null !== s.preferredCommandId || r !== (null !== (n = null === (t = s.activeCommand) || void 0 === t ? void 0 : t.id) && void 0 !== n ? n : null)) && (s.activeCommand = null, s.activeOptionName = null, s.preferredCommandId = r, s.optionStates = {}, !0) } function S(e) { let { channelId: t, changedOptionStates: n } = e, i = I(t), r = { ...i.optionStates }; for (let [e, t] of Object.entries(n)) { var s, a, o; if (!(e in i.optionStates)) continue; if (!(void 0 !== t.hasValue ? t.hasValue : r[e].hasValue)) { r[e] = { hasValue: !1, isActive: !1, lastValidationResult: null, optionValue: null, location: void 0, length: void 0 }, i.activeOptionName === e && (i.activeOptionName = null); continue } let n = r[e]; r[e] = { hasValue: !0, isActive: void 0 !== t.isActive ? t.isActive : n.isActive, lastValidationResult: void 0 !== t.lastValidationResult ? t.lastValidationResult : n.lastValidationResult, optionValue: null !== (s = t.optionValue) && void 0 !== s ? s : n.optionValue, location: null !== (a = t.location) && void 0 !== a ? a : n.location, length: null !== (o = t.length) && void 0 !== o ? o : n.length }, void 0 !== t.isActive && (t.isActive ? (null != i.activeOptionName && i.activeOptionName !== e && (r[i.activeOptionName] = { ...r[i.activeOptionName] }, r[i.activeOptionName].isActive = !1), i.activeOptionName = e) : e === i.activeOptionName && (i.activeOptionName = null)) } return i.optionStates = r, !0 } class h extends(i = o.default.Store) { initialize() { u.default.addChangeListener(() => { let e = d.default.getChannelId(); if (null == e) return c = {}, !0; let t = u.default.getCurrentSidebarChannelId(e); if (null != t && t in c) return !1; c = e in c ? { [e]: c[e] } : {} }) } getActiveCommand(e) { return I(e).activeCommand } getActiveCommandSection(e) { return I(e).activeCommandSection } getActiveOptionName(e) { return I(e).activeOptionName } getActiveOption(e) { var t, n, i; let r = I(e); return null !== (i = null === (n = r.activeCommand) || void 0 === n ? void 0 : null === (t = n.options) || void 0 === t ? void 0 : t.find(e => e.name === r.activeOptionName)) && void 0 !== i ? i : null } getPreferredCommandId(e) { return I(e).preferredCommandId } getOptionStates(e) { return I(e).optionStates } getOptionState(e, t) { return I(e).optionStates[t] } getOption(e, t) { var n, i; return null === (i = I(e).activeCommand) || void 0 === i ? void 0 : null === (n = i.options) || void 0 === n ? void 0 : n.find(e => e.name === t) } getState(e) { return { ...I(e) } } } a = "ApplicationCommandStore", (s = "displayName") in(r = h) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a; let A = new h(l.default, { CONNECTION_OPEN: E, CHANNEL_SELECT: E, LOGOUT: E, APPLICATION_COMMAND_SET_ACTIVE_COMMAND: T, APPLICATION_COMMAND_SET_PREFERRED_COMMAND: f, APPLICATION_COMMAND_UPDATE_OPTIONS: S, APPLICATION_COMMAND_UPDATE_CHANNEL_STATE: function(e) { let { channelId: t, preferredCommandId: n, command: i, section: r, location: s, changedOptionStates: a } = e, o = T({ type: "APPLICATION_COMMAND_SET_ACTIVE_COMMAND", channelId: t, command: i, section: r, location: s }), l = f({ type: "APPLICATION_COMMAND_SET_PREFERRED_COMMAND", channelId: t, commandId: n }), u = S({ type: "APPLICATION_COMMAND_UPDATE_OPTIONS", channelId: t, changedOptionStates: a }); return o || l || u } }); t.default = A }, 895924: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d, _, c, E, I; n.r(t), n.d(t, { ApplicationCommandInputType: function() { return r }, ApplicationCommandPermissionType: function() { return s }, ApplicationCommandSectionType: function() { return i }, ApplicationCommandTriggerLocations: function() { return a }, ApplicationCommandTriggerSections: function() { return o }, CommandOrigin: function() { return l } }), (u = i || (i = {}))[u.BUILT_IN = 0] = "BUILT_IN", u[u.APPLICATION = 1] = "APPLICATION", (d = r || (r = {}))[d.BUILT_IN = 0] = "BUILT_IN", d[d.BUILT_IN_TEXT = 1] = "BUILT_IN_TEXT", d[d.BUILT_IN_INTEGRATION = 2] = "BUILT_IN_INTEGRATION", d[d.BOT = 3] = "BOT", d[d.PLACEHOLDER = 4] = "PLACEHOLDER", (_ = s || (s = {}))[_.ROLE = 1] = "ROLE", _[_.USER = 2] = "USER", _[_.CHANNEL = 3] = "CHANNEL", (c = a || (a = {})).DISCOVERY = "discovery", c.SUGGESTION = "suggestion", c.MENTION = "mention", c.PASTE = "paste", c.RECALL = "recall", c.POPULAR_COMMANDS = "popular_commands", c.MJ_CHAT_BAR = "mj_chat_bar", c.QUERY = "query", c.SLASH_UI = "slash_ui", c.APP_LAUNCHER = "app_launcher", c.APP_LAUNCHER_HOME = "app_launcher_home", c.APP_LAUNCHER_HOME_SEARCH = "app_launcher_home_search", c.APP_LAUNCHER_APPLICATION_VIEW = "app_launcher_application_view", c.APP_LAUNCHER_APPLICATION_VIEW_FRECENCT = "app_launcher_application_view_frecent", c.APP_LAUNCHER_SLASH_SEARCH = "app_launcher_slash_search", (E = o || (o = {}))[E.BUILT_IN = 1] = "BUILT_IN", E[E.FRECENCY = 2] = "FRECENCY", E[E.APP = 3] = "APP", (I = l || (l = {}))[I.CHAT = 0] = "CHAT", I[I.APPLICATION_LAUNCHER = 1] = "APPLICATION_LAUNCHER" }, 531010: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserAppsTreatment: function() { return r } }); var i, r, s = n("818083"); (i = r || (r = {})).ALLOWED = "allowed", i.DEFAULT = "default", t.default = (0, s.createExperiment)({ kind: "guild", id: "2023-09_user_apps_guild", label: "Allow user app commands", defaultConfig: { userAppsTreatment: "default" }, treatments: [{ id: 1, label: "Allow user app commands", config: { userAppsTreatment: "allowed" } }] }) }, 824203: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getEphemeralReasonMessage: function() { return _ }, useShouldShowUserAppBetaNoticeForCommand: function() { return d } }), n("373793"); var i = n("39621"), r = n("911969"), s = n("213459"), a = n("581364"), o = n("807169"), l = n("104793"), u = n("689938"); function d(e, t, n) { var i, u, d, _; let c = (0, o.usePermissionContext)(t, r.ApplicationCommandType.CHAT), E = (0, s.useUserIndexState)(!0, !1), I = (0, s.useGuildIndexState)(null == t ? void 0 : t.guild_id, !1), T = (0, a.isGuildInUserAppExperiment)(null == t ? void 0 : t.guild_id, n); if (null == e || T) return !1; let { context: f, userId: S, roleIds: h, isImpersonating: A } = c, m = null === (u = I.result) || void 0 === u ? void 0 : null === (i = u.sections[e.applicationId]) || void 0 === i ? void 0 : i.descriptor; if (void 0 !== m) { let n = (0, l.computeAllowedForChannel)(m.permissions, t, null == t ? void 0 : t.guild_id), i = (0, l.computeAllowedForUser)(m.permissions, f.guild_id, S, h, A); if ((0, l.hasAccess)(e, c, i, n, m.botId) === l.HasAccessResult.ALLOWED) return !1 } let N = null === (_ = E.result) || void 0 === _ ? void 0 : null === (d = _.sections[e.applicationId]) || void 0 === d ? void 0 : d.commands; return null != N && e.id in N } function _(e) { switch (e) { case i.EphemeralMessageReason.FEATURE_LIMITED: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_FEATURE_LIMITED; case i.EphemeralMessageReason.GUILD_FEATURE_LIMITED: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_GUILD_FEATURE_LIMITED; case i.EphemeralMessageReason.USER_FEATURE_LIMITED: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_USER_FEATURE_LIMITED; case i.EphemeralMessageReason.SLOWMODE: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_SLOWMODE; case i.EphemeralMessageReason.RATE_LIMIT: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_RATE_LIMIT; case i.EphemeralMessageReason.CANNOT_MESSAGE_USER: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_MESSAGE_USER; case i.EphemeralMessageReason.USER_VERIFICATION_LEVEL: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_USER_VERIFICATION_LEVEL; case i.EphemeralMessageReason.CANNOT_UNARCHIVE_THREAD: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_UNARCHIVE_THREAD; case i.EphemeralMessageReason.CANNOT_JOIN_THREAD: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_JOIN_THREAD; case i.EphemeralMessageReason.MISSING_PERMISSIONS: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_MISSING_PERMISSIONS; case i.EphemeralMessageReason.CANNOT_SEND_ATTACHMENTS: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_SEND_ATTACHMENTS; case i.EphemeralMessageReason.CANNOT_SEND_EMBEDS: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_SEND_EMBEDS; case i.EphemeralMessageReason.CANNOT_SEND_STICKERS: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_SEND_STICKERS; case i.EphemeralMessageReason.AUTOMOD_BLOCKED: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_AUTOMOD_BLOCKED; case i.EphemeralMessageReason.HARMFUL_LINK: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_HARMFUL_LINK; case i.EphemeralMessageReason.CANNOT_USE_COMMAND: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_CANNOT_USE_COMMAND; case i.EphemeralMessageReason.BETA_GUILD_SIZE: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_BETA; default: return u.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EPHEMERAL_REASON_UNKNOWN } } }, 581364: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DISABLED_BY_DEFAULT_PERMISSION_FLAG: function() { return L }, allChannelsSentinel: function() { return R }, buildApplicationCommands: function() { return N }, buildCommand: function() { return m }, canUseApplicationCommands: function() { return g }, extractInteractionDataProps: function() { return U }, getApplicationCommandOptionQueryOptions: function() { return C }, getApplicationCommandSection: function() { return P }, getCommandAttachmentDraftType: function() { return M }, getCommandTriggerSection: function() { return y }, getMatchingGroupCommands: function() { return O }, hasAccess: function() { return v }, isGuildInUserAppExperiment: function() { return b }, isSnowflake: function() { return p }, trackCommandSelected: function() { return G } }), n("47120"), n("653041"), n("390547"), n("724458"); var i = n("654861"), r = n.n(i), s = n("512722"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("149765"), d = n("911969"), _ = n("367907"), c = n("399860"), E = n("131704"), I = n("703558"), T = n("895924"), f = n("531010"), S = n("689079"), h = n("981631"), A = n("231338"); function m(e) { var t, n, i; let r, { rootCommand: s, command: a, applicationId: o, subCommandPath: l, useKeyedPermissions: _ } = e; null != s.permissions && s.permissions.length > 0 && (_ ? r = (0, c.keyPermissions)(s.permissions) : (r = {}, s.permissions.forEach(e => { r[e.id] = e }))); let E = (null != l ? l : []).map(e => e.name), I = (null != l ? l : []).map(e => e.displayName); return { version: s.version, guildId: s.guild_id, id: [s.id, ...E].join(S.SUB_COMMAND_KEY_SEPARATOR), name: [s.name, ...E].join(" "), serverLocalizedName: a.name_localized, applicationId: o, type: null !== (t = s.type) && void 0 !== t ? t : d.ApplicationCommandType.CHAT, inputType: T.ApplicationCommandInputType.BOT, description: a.description, options: function e(t) { return null == t ? void 0 : t.map(t => { var n, i; let r = { ...t, choices: function(e) { return null == e ? void 0 : e.map(e => { var t; return { ...e, displayName: null !== (t = e.name_localized) && void 0 !== t ? t : e.name } }) }(t.choices), options: e(t.options), serverLocalizedName: t.name_localized, displayName: null !== (n = t.name_localized) && void 0 !== n ? n : t.name, displayDescription: null !== (i = t.description_localized) && void 0 !== i ? i : t.description }; if (t.type === d.ApplicationCommandOptionType.CHANNEL && "channel_types" in t) return { ...r, channelTypes: t.channel_types }; if ((t.type === d.ApplicationCommandOptionType.NUMBER || t.type === d.ApplicationCommandOptionType.INTEGER) && ("min_value" in t || "max_value" in t)) return { ...r, minValue: t.min_value, maxValue: t.max_value }; if (t.type === d.ApplicationCommandOptionType.STRING && ("min_length" in t || "max_length" in t)) return { ...r, minLength: t.min_length, maxLength: t.max_length }; return r }) }(a.options), rootCommand: s, subCommandPath: l, defaultMemberPermissions: null == s.default_member_permissions ? void 0 : u.deserialize(s.default_member_permissions), dmPermission: s.dm_permission, permissions: r, displayName: [null !== (n = s.name_localized) && void 0 !== n ? n : s.name, ...I].join(" "), displayDescription: null !== (i = a.description_localized) && void 0 !== i ? i : a.description, nsfw: s.nsfw, contexts: s.contexts, integration_types: s.integration_types, global_popularity_rank: s.global_popularity_rank } } function N(e, t) { return l().flatMap(e, e => (a()(null != e.id, "Missing command id"), function e(t) { var n, i; let { rootCommand: r, command: s, applicationId: a, subCommandPath: o, useKeyedPermissions: l } = t; if (s.hasOwnProperty("id")) { if (null == s.options || 0 === s.options.length) return [m({ rootCommand: r, command: s, applicationId: a, subCommandPath: o, useKeyedPermissions: l })] } else if (s.type !== d.ApplicationCommandOptionType.SUB_COMMAND && s.type !== d.ApplicationCommandOptionType.SUB_COMMAND_GROUP && (null == s.options || 0 === s.options.length)) return [m({ rootCommand: r, command: s, applicationId: a, subCommandPath: o, useKeyedPermissions: l })]; let u = []; if (null == s.options) return u; let _ = s.options.filter(e => e.type === d.ApplicationCommandOptionType.SUB_COMMAND_GROUP); for (let t = 0; t < _.length; t++) u.push(...e({ rootCommand: r, command: _[t], applicationId: a, subCommandPath: (null != o ? o : []).concat([{ name: _[t].name, type: d.ApplicationCommandOptionType.SUB_COMMAND_GROUP, displayName: null !== (n = _[t].name_localized) && void 0 !== n ? n : _[t].name }]), useKeyedPermissions: l })); let c = s.options.filter(e => e.type === d.ApplicationCommandOptionType.SUB_COMMAND); for (let e = 0; e < c.length; e++) u.push(m({ rootCommand: r, command: c[e], applicationId: a, subCommandPath: (null != o ? o : []).concat([{ name: c[e].name, type: d.ApplicationCommandOptionType.SUB_COMMAND, displayName: null !== (i = c[e].name_localized) && void 0 !== i ? i : c[e].name }]), useKeyedPermissions: l })); return 0 === _.length && 0 === c.length && u.push(m({ rootCommand: r, command: s, applicationId: a, subCommandPath: o, useKeyedPermissions: l })), u }({ rootCommand: e, command: e, applicationId: e.application_id, subCommandPath: void 0, useKeyedPermissions: t }))) } function p(e) { return h.ID_REGEX.test(e.trim()) } function O(e, t, n, i) { let r = []; return l()(e).forEach(e => { t.test(e.displayName) && (null == e.predicate || e.predicate(n)) && r.push(e) }), r.slice(0, i) } function C(e) { let t = e.type === d.ApplicationCommandOptionType.STRING, n = e.type === d.ApplicationCommandOptionType.CHANNEL, i = e.type === d.ApplicationCommandOptionType.USER || e.type === d.ApplicationCommandOptionType.MENTIONABLE, r = e.type === d.ApplicationCommandOptionType.ROLE || e.type === d.ApplicationCommandOptionType.MENTIONABLE; return { canMentionEveryone: t || r, canMentionHere: t, canMentionChannels: t || n, canMentionUsers: t || i, canMentionRoles: t || r, canMentionAnyGuildUser: i, canMentionNonMentionableRoles: r } } function R(e) { return r()(e).subtract(1).toString() } function g(e, t, n, i) { return !n && (!!i.isMultiUserDM() || (i.isDM() ? !i.isSystemDM() : i.isArchivedLockedThread() ? e.can(u.combine(A.Permissions.USE_APPLICATION_COMMANDS, A.Permissions.MANAGE_THREADS), i) : !!(0, E.isReadableType)(i.type) && e.can(u.combine(A.Permissions.USE_APPLICATION_COMMANDS, A.Permissions.SEND_MESSAGES), i))) } let L = u.deserialize(0); function v(e) { let { PermissionStore: t, guild: n, selfMember: i, applicationLevelPermissions: r, commandLevelPermissions: s, defaultMemberPermissions: a } = e; if (n.ownerId === i.userId || t.can(A.Permissions.ADMINISTRATOR, n)) return !0; let o = n.id; if (null != s) { let e = D(i, o, s); if ("boolean" == typeof e) return e } let l = D(i, o, r); return ("boolean" != typeof l || !!l) && (null == a || !u.equals(a, L) && t.can(a, n)) } function D(e, t, n) { let i = n[(0, c.toPermissionKey)(e.userId, T.ApplicationCommandPermissionType.USER)]; if (null != i) return i.permission; let r = !1; for (let t of e.roles) { let e = n[(0, c.toPermissionKey)(t, T.ApplicationCommandPermissionType.ROLE)]; if (null != e && (r = !0, e.permission)) return !0 } if (r) return !1; let s = n[(0, c.toPermissionKey)(t, T.ApplicationCommandPermissionType.ROLE)]; return null != s ? s.permission : null } function M(e) { switch (e) { case T.CommandOrigin.CHAT: return I.DraftType.SlashCommand; case T.CommandOrigin.APPLICATION_LAUNCHER: return I.DraftType.ApplicationLauncherCommand } } function y(e) { if (null != e) { if (e.id === S.BuiltInSectionId.BUILT_IN) return T.ApplicationCommandTriggerSections.BUILT_IN; else if (e.id === S.BuiltInSectionId.FRECENCY) return T.ApplicationCommandTriggerSections.FRECENCY; else return T.ApplicationCommandTriggerSections.APP } } function P(e) { var t, n; return { type: T.ApplicationCommandSectionType.APPLICATION, id: e.id, name: null !== (n = null == e ? void 0 : null === (t = e.bot) || void 0 === t ? void 0 : t.username) && void 0 !== n ? n : e.name, icon: e.icon, application: e } } function U(e) { let t = e.id, n = e.options, i = null == n ? void 0 : n.find(e => e.type === d.ApplicationCommandOptionType.SUB_COMMAND_GROUP); null != i && (t += "".concat(S.SUB_COMMAND_KEY_SEPARATOR).concat(i.name), n = i.options); let r = null == n ? void 0 : n.find(e => e.type === d.ApplicationCommandOptionType.SUB_COMMAND); return null != r && (t += "".concat(S.SUB_COMMAND_KEY_SEPARATOR).concat(r.name), n = r.options), { commandKey: t, interactionOptions: n } } function b(e, t, n) { return null == e || f.default.getCurrentConfig({ guildId: e, ...t }, n).userAppsTreatment === f.UserAppsTreatment.ALLOWED } function G(e) { var t, n; let { command: i, location: r, triggerSection: s, queryLength: a, sectionName: o, query: l, searchResultsPosition: u } = e; (0, _.trackWithMetadata)(h.AnalyticEvents.APPLICATION_COMMAND_SELECTED, { command_id: null !== (n = null === (t = i.rootCommand) || void 0 === t ? void 0 : t.id) && void 0 !== n ? n : i.id, application_id: i.applicationId, location: r, section: s, query_length: a, command_text_length: i.displayName.length, section_name: o, query: l, search_results_position: u }) } }, 509716: function(e, t, n) { "use strict"; n.r(t), n.d(t, { validateOptionContent: function() { return l } }), n("47120"); var i = n("456007"), r = n("895924"), s = n("351133"), a = n("689079"), o = n("689938"); function l(e) { let { option: t, content: n, guildId: l, channelId: u, allowEmptyValues: d, commandOrigin: _ = r.CommandOrigin.CHAT } = e, c = null != n ? (0, i.getString)({ content: n }, "content").trim() : "", E = t.required, I = "" === c; if (!(null != n)) return E ? { success: !1, error: o.default.Messages.COMMAND_VALIDATION_REQUIRED_ERROR } : { success: !0 }; if (I) return d ? { success: !0 } : E ? { success: !1, error: o.default.Messages.COMMAND_VALIDATION_REQUIRED_ERROR } : { success: !1, error: (0, a.getValidationErrorText)(t) }; let T = n.length > 1 ? { type: "text", text: c } : n[0], f = (0, s.default)[t.type](T, t, u, l, _); return !f.success && null == f.error && (f.error = (0, a.getValidationErrorText)(t)), f } }, 351133: function(e, t, n) { "use strict"; n.r(t); var i = n("911969"), r = n("465343"), s = n("706454"), a = n("117530"), o = n("174212"), l = n("456007"), u = n("581364"), d = n("689079"), _ = n("689938"); let c = { [i.ApplicationCommandOptionType.SUB_COMMAND]: () => ({ success: !1 }), [i.ApplicationCommandOptionType.SUB_COMMAND_GROUP]: () => ({ success: !1 }), [i.ApplicationCommandOptionType.STRING]: (e, t, n) => { var r, s, a; let l = null === (r = function(e) { switch (e.type) { case "emoji": return e.surrogate; case "text": return e.text } }(e)) || void 0 === r ? void 0 : r.trim(); if (t.autocomplete) { let e = o.default.getAutocompleteLastChoices(n, t.name); null != e && (l = String(null !== (a = null === (s = e.find(e => e.name === l)) || void 0 === s ? void 0 : s.value) && void 0 !== a ? a : l)) } return null == t.choices || null != l && t.choices.map(e => e.displayName).includes(l) ? t.type === i.ApplicationCommandOptionType.STRING && (void 0 !== t.minLength || void 0 !== t.maxLength) ? void 0 !== l ? function(e, t, n) { if (void 0 !== t.minLength && e.length < t.minLength || void 0 !== t.maxLength && e.length > t.maxLength) { if (void 0 !== t.maxLength && void 0 !== t.minLength && t.minLength === t.maxLength) return { success: !1, error: n.exactRangeErrorMessage.format({ value: T(t.minLength) }) }; if (void 0 !== t.maxLength && void 0 !== t.minLength) return { success: !1, error: n.rangeErrorMessage.format({ minimum: T(t.minLength), maximum: T(t.maxLength) }) }; else if (void 0 !== t.minLength) return { success: !1, error: n.minErrorMessage.format({ minimum: T(t.minLength) }) }; else if (void 0 !== t.maxLength) return { success: !1, error: n.maxErrorMessage.format({ maximum: T(t.maxLength) }) } } return { success: !0 } }(l, t, { exactRangeErrorMessage: _.default.Messages.COMMAND_VALIDATION_STRING_EXACT_RANGE_ERROR, rangeErrorMessage: _.default.Messages.COMMAND_VALIDATION_STRING_RANGE_ERROR, minErrorMessage: _.default.Messages.COMMAND_VALIDATION_STRING_MINIMUM_ERROR, maxErrorMessage: _.default.Messages.COMMAND_VALIDATION_STRING_MAXIMUM_ERROR }) : { success: !0 } : { success: !0 } : { success: !1 } }, [i.ApplicationCommandOptionType.BOOLEAN]: e => { if ("text" !== e.type) return { success: !1 }; let t = e.text.trim(); return { success: d.BOOLEAN_CHOICES.map(e => e.displayName.toLowerCase()).includes(t.toLowerCase()) } }, [i.ApplicationCommandOptionType.INTEGER]: (e, t, n) => { if ("text" !== e.type || t.type !== i.ApplicationCommandOptionType.INTEGER) return { success: !1 }; let r = e.text.trim(); if (0 === r.length) return { success: !1 }; if (null != t.choices) return t.choices.map(e => e.displayName).includes(r) ? { success: !0 } : { success: !1 }; let a = o.default.getAutocompleteLastChoices(n, t.name); if (null != a && a.map(e => e.displayName).includes(r)) return { success: !0 }; let u = Number(l.normalizeNumericString(s.default.locale, r)); return !isNaN(u) && Number.isInteger(u) && Number.isSafeInteger(u) ? I(u, t, _.default.Messages.COMMAND_VALIDATION_NUMBER_RANGE_ERROR, _.default.Messages.COMMAND_VALIDATION_NUMBER_MINIMUM_ERROR, _.default.Messages.COMMAND_VALIDATION_NUMBER_MAXIMUM_ERROR) : { success: !1 } }, [i.ApplicationCommandOptionType.NUMBER]: (e, t, n) => { if ("text" !== e.type || t.type !== i.ApplicationCommandOptionType.NUMBER) return { success: !1 }; let r = e.text.trim(); if (0 === r.length) return { success: !1 }; if (null != t.choices) return t.choices.map(e => e.displayName).includes(r) ? { success: !0 } : { success: !1 }; let a = o.default.getAutocompleteLastChoices(n, t.name); if (null != a && a.map(e => e.displayName).includes(r)) return { success: !0 }; let u = Number(l.normalizeNumericString(s.default.locale, r)); return isNaN(u) || u > Number.MAX_SAFE_INTEGER || u < Number.MIN_SAFE_INTEGER ? { success: !1 } : I(u, t, _.default.Messages.COMMAND_VALIDATION_NUMBER_RANGE_ERROR, _.default.Messages.COMMAND_VALIDATION_NUMBER_MINIMUM_ERROR, _.default.Messages.COMMAND_VALIDATION_NUMBER_MAXIMUM_ERROR) }, [i.ApplicationCommandOptionType.USER]: (e, t, n, i) => { if ("text" !== e.type) return { success: "userMention" === e.type }; { if ((0, u.isSnowflake)(e.text)) return { success: !0 }; let t = (0, r.resolveApplicationCommandOption)(e.text, i, n, { allowRoles: !1 }); return { success: (null == t ? void 0 : t.type) === "userMention" } } }, [i.ApplicationCommandOptionType.CHANNEL]: (e, t, n, i) => { if ("text" !== e.type) return { success: "channelMention" === e.type }; { if ((0, u.isSnowflake)(e.text)) return { success: !0 }; let t = (0, r.resolveApplicationCommandOption)(e.text, i, n); return { success: (null == t ? void 0 : t.type) === "channelMention" } } }, [i.ApplicationCommandOptionType.ROLE]: (e, t, n, i) => { if ("text" !== e.type) return { success: E(e) }; { if ((0, u.isSnowflake)(e.text)) return { success: !0 }; let t = (0, r.resolveApplicationCommandOption)(e.text, i, n, { allowUsers: !1 }); return { success: (null == t ? void 0 : t.type) === "roleMention" } } }, [i.ApplicationCommandOptionType.MENTIONABLE]: (e, t, n, i) => { if ("text" !== e.type) return { success: "userMention" === e.type || E(e) }; { if ((0, u.isSnowflake)(e.text)) return { success: !0 }; let t = (0, r.resolveApplicationCommandOption)(e.text, i, n); return { success: null != t && ("userMention" === t.type || E(t)) } } }, [i.ApplicationCommandOptionType.ATTACHMENT]: (e, t, n, i, r) => { if ("text" !== e.type) return { success: !1 }; let s = a.default.getUpload(n, t.name, (0, u.getCommandAttachmentDraftType)(r)); return { success: null != s && s.filename === e.text } } }, E = e => "roleMention" === e.type || "textMention" === e.type && "@everyone" === e.text; function I(e, t, n, i, r) { if (null != t.minValue && e < t.minValue || null != t.maxValue && e > t.maxValue) { if (null != t.maxValue && null != t.minValue) return { success: !1, error: n.format({ minimum: T(t.minValue), maximum: T(t.maxValue) }) }; if (null != t.minValue) return { success: !1, error: i.format({ minimum: T(t.minValue) }) }; else if (null != t.maxValue) return { success: !1, error: r.format({ maximum: T(t.maxValue) }) } } return { success: !0 } } function T(e) { return e.toLocaleString(_.default.getLocale(), { useGrouping: !1 }) } t.default = c }, 807169: function(e, t, n) { "use strict"; n.r(t), n.d(t, { buildPermissionContext: function() { return f }, computeCommandContextType: function() { return m }, getContextGuildId: function() { return N }, usePermissionContext: function() { return S } }); var i = n("470079"), r = n("149765"), s = n("442837"), a = n("911969"), o = n("160404"), l = n("695346"), u = n("131704"), d = n("314897"), _ = n("592125"), c = n("271383"), E = n("496675"), I = n("594174"), T = n("981631"); function f(e, t) { var n, i, r, s, a; let E; let T = N(E = e instanceof u.ChannelRecordBase && e.isThread() ? null !== (r = _.default.getChannel(e.parent_id)) && void 0 !== r ? r : e : e), f = l.ViewNsfwCommands.getSetting(), S = d.default.getId(), m = null !== (s = null === (n = I.default.getCurrentUser()) || void 0 === n ? void 0 : n.nsfwAllowed) && void 0 !== s && s, p = null != T && null !== (a = null === (i = c.default.getMember(T, S)) || void 0 === i ? void 0 : i.roles) && void 0 !== a ? a : [], O = o.default.isViewingRoles(T), { computedPermissions: C, hasBaseAccessPermissions: R } = A(E); return { context: E, userId: S, roleIds: p, isImpersonating: O, commandType: t, computedPermissions: C, hasBaseAccessPermissions: R, allowNsfw: h(E, m, f) } } function S(e, t) { let n = i.useMemo(() => { if (e instanceof u.ChannelRecordBase && e.isThread()) { var t; return null !== (t = _.default.getChannel(e.parent_id)) && void 0 !== t ? t : e } return e }, [e]), r = N(n), a = l.ViewNsfwCommands.useSetting(), E = (0, s.useStateFromStores)([d.default], () => d.default.getId()), T = (0, s.useStateFromStores)([I.default], () => { var e, t; return null !== (t = null === (e = I.default.getCurrentUser()) || void 0 === e ? void 0 : e.nsfwAllowed) && void 0 !== t && t }), f = (0, s.useStateFromStoresArray)([c.default], () => { var e, t; return null != r && null !== (t = null === (e = c.default.getMember(r, E)) || void 0 === e ? void 0 : e.roles) && void 0 !== t ? t : [] }), S = (0, s.useStateFromStores)([o.default], () => o.default.isViewingRoles(r)); return i.useMemo(() => { let { computedPermissions: e, hasBaseAccessPermissions: i } = A(n); return { context: n, userId: E, roleIds: f, commandType: t, isImpersonating: S, computedPermissions: e, hasBaseAccessPermissions: i, allowNsfw: h(n, T, a) } }, [t, n, S, f, E, T, a]) } function h(e, t, n) { return !!t && (!(e instanceof u.ChannelRecordBase) || (null != e.guild_id ? e.nsfw : n)) } function A(e) { let t; if (e instanceof u.ChannelRecordBase && e.isPrivate()) return { computedPermissions: r.deserialize(0), hasBaseAccessPermissions: !0 }; let n = E.default.computePermissions(e); return t = !!r.has(n, T.Permissions.ADMINISTRATOR) || (e instanceof u.ChannelRecordBase ? r.has(n, T.Permissions.VIEW_CHANNEL) && r.has(n, T.Permissions.USE_APPLICATION_COMMANDS) : r.has(n, T.Permissions.VIEW_CHANNEL)), { computedPermissions: n, hasBaseAccessPermissions: t } } function m(e, t) { return e instanceof u.ChannelRecordBase && null == e.guild_id ? e.type === T.ChannelTypes.DM && e.getRecipientId() === t ? a.InteractionContextType.BOT_DM : a.InteractionContextType.PRIVATE_CHANNEL : a.InteractionContextType.GUILD } function N(e) { return e instanceof u.ChannelRecordBase ? e.guild_id : e.id } }, 104793: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HasAccessResult: function() { return i }, computeAllowedForChannel: function() { return m }, computeAllowedForUser: function() { return N }, hasAccess: function() { return S } }), n("47120"); var i, r, s = n("512722"), a = n.n(s), o = n("149765"), l = n("911969"), u = n("399860"), d = n("131704"), _ = n("430824"), c = n("895924"), E = n("581364"), I = n("807169"), T = n("689079"), f = n("981631"); function S(e, t, n, i, r) { let { context: s, commandType: u, allowNsfw: S, computedPermissions: h, userId: A, roleIds: p, isImpersonating: O, hasBaseAccessPermissions: C } = t; if (e.type !== u) return 2; if (e.nsfw && !S) return 1; let R = (0, I.computeCommandContextType)(s, r); if (null != e.contexts) { if (!e.contexts.includes(R)) return 4 } else if (e.inputType === c.ApplicationCommandInputType.BOT && (!1 === e.dmPermission && R === l.InteractionContextType.BOT_DM || R === l.InteractionContextType.PRIVATE_CHANNEL)) return 4; if (null != e.predicate && s instanceof d.ChannelRecordBase) { let t = _.default.getGuild(s.guild_id); if (!e.predicate({ channel: s, guild: t })) return 3 } if (e.applicationId === T.BuiltInSectionId.BUILT_IN) return 0; let g = (0, I.getContextGuildId)(s); if (null == g || o.has(h, f.Permissions.ADMINISTRATOR)) return 0; if (!C) return 5; if (s instanceof d.ChannelRecordBase) { a()(void 0 !== i, "missing applicationAllowedForChannel"); let t = m(e.permissions, s, g); if (function(e) { return !1 === e }(t) || ! function(e) { return !0 === e }(t) && function(e) { return !1 === e }(i)) return 6 } let L = N(e.permissions, g, A, p, O); return function(e) { return !0 === e }(L) ? 0 : function(e) { return !1 === e }(L) ? 7 : function(e) { return !1 === e }(n) || null != e.defaultMemberPermissions && !(!o.equals(e.defaultMemberPermissions, E.DISABLED_BY_DEFAULT_PERMISSION_FLAG) && o.has(h, e.defaultMemberPermissions)) ? 7 : 0 } function h(e) { return !0 === e } function A(e) { return !1 === e } function m(e, t, n) { if (null == e) return null; let i = t.id; if (t.isThread()) { var r; i = null !== (r = t.parent_id) && void 0 !== r ? r : t.id } let s = e[(0, u.toPermissionKey)(i, c.ApplicationCommandPermissionType.CHANNEL)]; if (null != s) return s.permission; let a = e[(0, u.toPermissionKey)((0, E.allChannelsSentinel)(n), c.ApplicationCommandPermissionType.CHANNEL)]; return null != a ? a.permission : null } function N(e, t, n, i, r) { if (null == e) return null; if (!r) { let t = e[(0, u.toPermissionKey)(n, c.ApplicationCommandPermissionType.USER)]; if (null != t) return t.permission } let s = !1; for (let t of i) { let n = e[(0, u.toPermissionKey)(t, c.ApplicationCommandPermissionType.ROLE)]; if (null != n) { if (n.permission) return !0; s = !0 } } if (s) return !1; let a = e[(0, u.toPermissionKey)(t, c.ApplicationCommandPermissionType.ROLE)]; return null != a ? a.permission : null }(r = i || (i = {}))[r.ALLOWED = 0] = "ALLOWED", r[r.NSFW_NOT_ALLOWED = 1] = "NSFW_NOT_ALLOWED", r[r.WRONG_COMMAND_TYPE = 2] = "WRONG_COMMAND_TYPE", r[r.PREDICATE_FAILED = 3] = "PREDICATE_FAILED", r[r.CONTEXT_NOT_ALLOWED = 4] = "CONTEXT_NOT_ALLOWED", r[r.MISSING_BASE_PERMISSIONS = 5] = "MISSING_BASE_PERMISSIONS", r[r.CHANNEL_DENIED = 6] = "CHANNEL_DENIED", r[r.USER_DENIED = 7] = "USER_DENIED" }, 667204: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return F }, retryCommandMessage: function() { return Y } }), n("653041"), n("47120"), n("390547"), n("627494"), n("757143"); var i = n("512722"), r = n.n(i), s = n("570140"), a = n("904245"), o = n("166459"), l = n("232567"), u = n("911969"), d = n("673750"), _ = n("687294"), c = n("367907"), E = n("465343"), I = n("339085"), T = n("906411"), f = n("633302"), S = n("603721"), h = n("188597"), A = n("3148"), m = n("346479"), N = n("706454"), p = n("430824"), O = n("117530"), C = n("594174"), R = n("403182"), g = n("823379"), L = n("861990"), v = n("555573"), D = n("174212"), M = n("456007"), y = n("10718"), P = n("895924"), U = n("581364"), b = n("689079"), G = n("981631"), w = n("959517"), k = n("689938"); let B = (e, t) => { var n; return null == e ? void 0 : null === (n = e.find(e => e.displayName === t)) || void 0 === n ? void 0 : n.value }, V = function(e, t, n) { var i, r; let s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : e => e; if (e.name === (null === (i = n.autocomplete) || void 0 === i ? void 0 : i.name)) return n.autocomplete.query; if ("" === t) return null; let a = D.default.getAutocompleteLastChoices(n.channel.id, e.name); return null != a ? null !== (r = B(a, t)) && void 0 !== r ? r : s(t) : s(t) }, x = e => { let t = e.toLowerCase() === b.TRUE_OPTION_NAME.toLowerCase(), n = e.toLowerCase() === b.FALSE_OPTION_NAME.toLowerCase(); return t || n ? t : null }; async function F(e) { var t, n, i, a, l, d, _, I, T, f, S, h, A, p, C; let { command: R, optionValues: g, context: L, commandTargetId: D, maxSizeCallback: y, commandOrigin: b = P.CommandOrigin.CHAT, sectionName: w } = e; null == L.autocomplete && s.default.dispatch({ type: "APPLICATION_COMMAND_USED", context: L, command: R, commandOrigin: b }), await m.default.unarchiveThreadIfNecessary(L.channel.id); let k = [], F = [], Y = (0, U.getCommandAttachmentDraftType)(b); if (null != R.options) for (let e of R.options) { if (e.type === u.ApplicationCommandOptionType.SUB_COMMAND || e.type === u.ApplicationCommandOptionType.SUB_COMMAND_GROUP || !(e.name in g)) continue; let t = (null === (i = L.autocomplete) || void 0 === i ? void 0 : i.name) === e.name || void 0, n = null; if (e.type === u.ApplicationCommandOptionType.STRING) { let i = null !== (l = null === (a = M.getOptionalString(g, e.name)) || void 0 === a ? void 0 : a.trim()) && void 0 !== l ? l : ""; n = null != e.choices ? B(e.choices, i) : e.autocomplete ? V(e, i, L) : i, r()(null != L.autocomplete || null != n, 'Option "'.concat(e.name, '" expects a value')), null != n && k.push({ type: e.type, name: e.name, value: n, focused: t }); continue } if (e.type === u.ApplicationCommandOptionType.ATTACHMENT) { if (null != L.autocomplete) continue; let n = O.default.getUpload(L.channel.id, e.name, Y); if (null == n) continue; let i = F.length; F.push(n), k.push({ type: e.type, name: e.name, value: i, focused: t }); continue } let s = M.filterEmpty(g[e.name]); if (r()(null != L.autocomplete || 1 === s.length, 'Option "'.concat(e.name, '" expects a single option type')), null == s[0] && !t) continue; let o = null !== (d = s[0]) && void 0 !== d ? d : { type: "text", text: "" }; switch (e.type) { case u.ApplicationCommandOptionType.CHANNEL: if ("channelMention" === o.type) n = o.channelId; else if ("text" === o.type) { if ((0, U.isSnowflake)(o.text)) n = o.text.trim(); else { let e = (0, E.resolveApplicationCommandOption)(o.text, null === (_ = L.guild) || void 0 === _ ? void 0 : _.id, L.channel.id); r()((null == e ? void 0 : e.type) === "channelMention", "Failed to resolve ".concat(o.text)), n = e.channelId } } break; case u.ApplicationCommandOptionType.ROLE: if ("roleMention" === o.type) n = o.roleId; else if ("text" === o.type) { if ((0, U.isSnowflake)(o.text)) n = o.text.trim(); else { let e = (0, E.resolveApplicationCommandOption)(o.text, null === (I = L.guild) || void 0 === I ? void 0 : I.id, L.channel.id, { allowUsers: !1 }); r()((null == e ? void 0 : e.type) === "roleMention", "Failed to resolve ".concat(o.text)), n = e.roleId } } else "textMention" === o.type && "@everyone" === o.text && (n = null === (T = L.guild) || void 0 === T ? void 0 : T.id); break; case u.ApplicationCommandOptionType.USER: if ("userMention" === o.type) n = o.userId; else if ("text" === o.type) { if ((0, U.isSnowflake)(o.text)) n = o.text.trim(); else { let e = (0, E.resolveApplicationCommandOption)(o.text, null === (f = L.guild) || void 0 === f ? void 0 : f.id, L.channel.id, { allowRoles: !1 }); r()((null == e ? void 0 : e.type) === "userMention", "Failed to resolve ".concat(o.text)), n = e.userId } } break; case u.ApplicationCommandOptionType.MENTIONABLE: if ("userMention" === o.type) n = o.userId; else if ("roleMention" === o.type) n = o.roleId; else if ("textMention" === o.type && "@everyone" === o.text) n = null === (S = L.guild) || void 0 === S ? void 0 : S.id; else if ("text" === o.type) { if ((0, U.isSnowflake)(o.text)) n = o.text.trim(); else { let e = (0, E.resolveApplicationCommandOption)(o.text, null === (h = L.guild) || void 0 === h ? void 0 : h.id, L.channel.id); (null == e ? void 0 : e.type) === "userMention" ? n = e.userId: (null == e ? void 0 : e.type) === "roleMention" ? n = e.roleId : (null == e ? void 0 : e.type) === "textMention" && "@everyone" === e.text ? n = null === (A = L.guild) || void 0 === A ? void 0 : A.id : r()(!1, "Failed to resolve ".concat(o.text)) } } break; case u.ApplicationCommandOptionType.BOOLEAN: "text" === o.type && (n = x(o.text.trim())); break; case u.ApplicationCommandOptionType.INTEGER: if ("text" === o.type) { let t = o.text.trim(); n = null != e.choices ? Number(B(e.choices, t)) : e.autocomplete ? V(e, t, L, Number) : Number(M.normalizeNumericString(N.default.locale, t)) } break; case u.ApplicationCommandOptionType.NUMBER: if ("text" === o.type) { let t = o.text.trim(); n = null != e.choices ? Number(B(e.choices, t)) : e.autocomplete ? V(e, t, L, Number) : Number(M.normalizeNumericString(N.default.locale, t)) } break; default: r()(!1, "Unsupported option type: ".concat(e.type)); continue } r()(null != L.autocomplete || null != n, 'Unexpected value for option "'.concat(e.name, '"')), null != n && k.push({ type: e.type, name: e.name, value: n, focused: t }) } if (null != R.subCommandPath) for (let e = R.subCommandPath.length - 1; e >= 0; e -= 1) { let { name: t, type: n } = R.subCommandPath[e]; k = [{ type: n, name: t, options: k }] } if (null != R.execute) return c.default.trackWithMetadata(G.AnalyticEvents.APPLICATION_COMMAND_USED, { command_id: R.id, application_id: R.applicationId, command_type: R.type, location: b === P.CommandOrigin.APPLICATION_LAUNCHER ? P.ApplicationCommandTriggerLocations.APP_LAUNCHER : P.ApplicationCommandTriggerLocations.SLASH_UI }), R.execute(k, L); if (R.inputType === P.ApplicationCommandInputType.BUILT_IN || R.inputType === P.ApplicationCommandInputType.BUILT_IN_TEXT || R.inputType === P.ApplicationCommandInputType.BUILT_IN_INTEGRATION) return; let W = { version: R.version, id: null !== (p = null === (t = R.rootCommand) || void 0 === t ? void 0 : t.id) && void 0 !== p ? p : R.id, guild_id: R.guildId, name: null !== (C = null === (n = R.rootCommand) || void 0 === n ? void 0 : n.name) && void 0 !== C ? C : R.name, type: R.type, options: k, application_command: R.rootCommand }; null != D && (W.target_id = D), null != L.autocomplete ? (0, v.performAutocomplete)(R, L, W) : (o.default.clearAll(L.channel.id, Y), await j({ applicationId: R.applicationId, data: W, context: L, attachments: F, maxSizeCallback: y, onMessageSuccess: () => { H(g) }, commandDisplayName: R.displayName, analytics_location: b === P.CommandOrigin.APPLICATION_LAUNCHER ? P.ApplicationCommandTriggerLocations.APP_LAUNCHER : P.ApplicationCommandTriggerLocations.SLASH_UI, sectionName: w })) } let H = e => { let t = Object.values(e).flatMap(e => e.map(e => "emoji" === e.type ? new f.Emoji({ type: T.EmojiTypes.UNICODE, names: [e.name.replaceAll(":", "")], surrogates: "" }) : "customEmoji" === e.type ? I.default.getCustomEmojiById(e.emojiId) : null).filter(g.isNotNullish)); t.length > 0 && s.default.dispatch({ type: "EMOJI_TRACK_USAGE", emojiUsed: t }) }, Y = (e, t, n) => { if (e.isCommandType()) { let i = t.guild_id; null != e.interactionData && j({ applicationId: n, data: e.interactionData, context: { channel: t, guild: null != i ? p.default.getGuild(i) : null } }) } }, j = async e => { var t; let { applicationId: n, data: i, context: r, attachments: o, maxSizeCallback: d, onMessageSuccess: _, commandDisplayName: c, analytics_location: E, sectionName: I } = e, { channel: T, guild: f } = r, h = T.id, m = null == f ? void 0 : f.id, N = y.getCachedApplicationSection(r.channel, i.type, n); if (null == N) return; let p = null === (t = N.application) || void 0 === t ? void 0 : t.bot; if (null == p && null != N.botId) try { await l.getUser(N.botId) } catch {} let O = { ...(0, A.default)({ channelId: h, content: "", type: i.type === u.ApplicationCommandType.CHAT ? G.MessageTypes.CHAT_INPUT_COMMAND : G.MessageTypes.CONTEXT_MENU_COMMAND, author: null != p ? p : { id: N.id, username: N.name, discriminator: G.NON_USER_BOT_DISCRIMINATOR, avatar: null, bot: !0 } }), application: null == N ? void 0 : N.application, interaction: { id: i.id, name: i.name, name_localized: c, type: u.InteractionTypes.APPLICATION_COMMAND, user: (0, A.userRecordToServer)(C.default.getCurrentUser()) }, interaction_data: i }; a.default.receiveMessage(h, O, !0, { applicationId: n }); let R = (e, t) => { null == t && null != e && a.default.sendClydeError(h, e), s.default.dispatch({ type: "MESSAGE_SEND_FAILED", messageId: O.id, channelId: h, reason: t }) }, g = { applicationId: n, channelId: h, guildId: m, data: i, nonce: O.id, attachments: o, maxSizeCallback: d, analytics_location: E, sectionName: I }; S.addQueued(g.nonce, { messageId: O.id, onCreate: e => { null != O.interaction && (O.interaction.id = e) }, onFailure: (e, t) => R(e, t), data: { interactionType: u.InteractionTypes.APPLICATION_COMMAND, channelId: h } }), null != o ? z(o, g.nonce, m, d).then(e => { e && W(g, _) }) : W(g, _) }; function W(e, t) { d.default.enqueue({ type: d.MessageDataType.COMMAND, message: e }, n => { var i; (0, h.handleInteractionResponse)(e.nonce, n, e.applicationId, e.channelId, null !== (i = e.guildId) && void 0 !== i ? i : null), n.ok && null != t && t() }) } async function K(e, t) { let n = 0, i = 0; for (let s of e) { var r; let e = t ? null !== (r = s.currentSize) && void 0 !== r ? r : 0 : await s.getSize(); e > i && (i = e), n += e } return { totalSize: n, largestUploadedFileSize: i } } async function z(e, t, n, i) { let r = (0, R.maxFileSize)(n), s = e => { null == i || i(r, e), S.setFailed(t, G.AbortCodes.ENTITY_TOO_LARGE, k.default.Messages.UPLOAD_AREA_TOO_LARGE_HELP.format({ maxSize: (0, R.sizeString)(r) })) }, { totalSize: a, largestUploadedFileSize: o } = await K(e, !1); if (o > Math.max(r, w.DEFAULT_MOBILE_PRE_COMPRESSION_MAX_ATTACHMENT_SIZE) || a > L.MAX_TOTAL_ATTACHMENT_SIZE) return s(o), !1; try { await (0, _.stageAttachmentFiles)(e) } catch { S.setFailed(t, void 0, k.default.Messages.UPLOADING_FILES_FAILED.format({ count: e.length })) } return { totalSize: a, largestUploadedFileSize: o } = await K(e, !0), !e.some(e => e.error === G.AbortCodes.ENTITY_TOO_LARGE) && !(a > L.MAX_TOTAL_ATTACHMENT_SIZE) || (s(o), !1) } }, 812236: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NO_PRIMARY_APP_COMMAND_ERROR: function() { return l }, default: function() { return u } }), n("411104"); var i = n("911969"), r = n("592125"), s = n("963456"), a = n("213459"), o = n("367790"); let l = "no primary app command for application"; async function u(e, t) { let n, i = r.default.getChannel(e); if (null != i) { let e = d(i, t); if (null == e.commands[0]) { let e = { type: "application", applicationId: t }, r = new AbortController; (0, s.requestApplicationCommandIndex)(e, !1), await (0, s.fetchApplicationCommandIndex)(e, 0, r), n = d(i, t).commands[0] } else n = e.commands[0] } if (null != n) return n; throw Error(l) } function d(e, t) { return a.default.query(e, { commandType: i.ApplicationCommandType.PRIMARY_ENTRY_POINT }, { placeholderCount: 1, scoreMethod: o.ScoreMethod.COMMAND_ONLY, applicationId: t, allowFetch: !1 }) } }, 713583: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("239091"), l = n("665692"), u = n("689938"), d = n("603649"); function _(e) { var t; let s, _, c, { className: E, activeCommand: I, activeOption: T, optionStates: f } = e, S = r.useCallback(e => { var t; let r = null == I ? void 0 : null === (t = I.rootCommand) || void 0 === t ? void 0 : t.id; if (null == r) { e.preventDefault(); return }(0, o.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("5396").then(n.bind(n, "731646")); return t => (0, i.jsx)(e, { ...t, id: r, label: u.default.Messages.COPY_ID_COMMAND }) }) }, [null == I ? void 0 : null === (t = I.rootCommand) || void 0 === t ? void 0 : t.id]); if (null == I) return null; if (null != T) { let e = f[T.name].lastValidationResult; s = T.displayName, _ = T.displayDescription, c = (null == e ? void 0 : e.success) ? null : null == e ? void 0 : e.error } else s = "".concat(l.COMMAND_SENTINEL).concat(I.displayName), _ = I.displayDescription, c = null; return (0, i.jsxs)("div", { className: a()(E, d.bar), onContextMenu: S, children: [(0, i.jsx)("span", { className: d.name, children: s }), null != c ? (0, i.jsx)("span", { className: d.error, children: c }) : (0, i.jsx)("span", { className: d.description, children: _ })] }) } }, 227419: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("392711"), s = n.n(r), a = n("481060"), o = n("493683"), l = n("904245"), u = n("911969"), d = n("933557"), _ = n("699516"), c = n("594174"), E = n("895924"), I = n("689079"), T = n("981631"), f = n("689938"); function S(e) { switch (e) { case T.ChannelTextAreaIntegrations.GIF.title: case T.ChannelTextAreaIntegrations.TENOR.title: return f.default.Messages.COMMAND_GIPHY_DESCRIPTION; default: return "" } } let h = [...s()(T.ChannelTextAreaIntegrations).values().map(e => ({ id: e.commandId, name: e.command, displayName: e.command, type: u.ApplicationCommandType.CHAT, inputType: E.ApplicationCommandInputType.BUILT_IN_INTEGRATION, applicationId: I.BuiltInSectionId.BUILT_IN, get description() { return S(e.title) }, get displayDescription() { return S(e.title) }, options: e.type === T.ChannelTextAreaIntegrationTypes.GIF ? [{ name: "query", displayName: "query", type: u.ApplicationCommandOptionType.STRING, get description() { return f.default.Messages.COMMAND_GIPHY_QUERY_DESCRIPTION }, get displayDescription() { return f.default.Messages.COMMAND_GIPHY_QUERY_DESCRIPTION }, required: !0 }] : [], integrationType: e.type, integrationTitle: e.title })).value(), { id: "-15", name: "leave", displayName: "leave", type: u.ApplicationCommandType.CHAT, inputType: E.ApplicationCommandInputType.BUILT_IN, applicationId: I.BuiltInSectionId.BUILT_IN, get description() { return f.default.Messages.LEAVE_GROUP_DM }, get displayDescription() { return f.default.Messages.LEAVE_GROUP_DM }, options: [{ name: "silent", displayName: "silent", type: u.ApplicationCommandOptionType.BOOLEAN, get description() { return f.default.Messages.LEAVE_GROUP_DM_SILENTLY_COMMAND_OPTION }, get displayDescription() { return f.default.Messages.LEAVE_GROUP_DM_SILENTLY }, required: !1 }], predicate: e => { let { channel: t } = e; return t.isGroupDM() }, execute: (e, t) => { var n, r; let { channel: s } = t, u = (0, d.computeChannelName)(s, c.default, _.default), E = f.default.Messages.LEAVE_GROUP_DM_TITLE.format({ name: u }), I = f.default.Messages.LEAVE_GROUP_DM_BODY.format({ name: u }), T = null !== (r = null === (n = e.find(e => "silent" === e.name)) || void 0 === n ? void 0 : n.value) && void 0 !== r && r; async function S() { try { await o.default.closePrivateChannel(s.id, void 0, T) } catch (e) { l.default.sendBotMessage(s.id, f.default.Messages.LEAVE_GROUP_DM_ERROR) } } s.isManaged() && (E = f.default.Messages.LEAVE_GROUP_DM_MANAGED_TITLE.format({ name: u }), I = f.default.Messages.LEAVE_GROUP_DM_MANAGED_BODY.format({ name: u })), (0, a.openModal)(e => (0, i.jsx)(a.ConfirmModal, { header: E, confirmText: f.default.Messages.LEAVE_GROUP_DM, cancelText: f.default.Messages.CANCEL, onConfirm: S, ...e, children: (0, i.jsx)(a.Text, { variant: "text-md/normal", children: I }) })) } }]; t.default = h }, 271668: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("788911"), d = n("911969"), _ = n("367907"), c = n("30465"), E = n("806966"), I = n("98528"), T = n("551058"), f = n("156361"), S = n("695464"), h = n("153124"), A = n("555573"), m = n("10718"), N = n("367790"), p = n("895924"), O = n("581364"), C = n("56801"), R = n("342687"), g = n("826298"), L = n("689079"), v = n("981631"), D = n("689938"), M = n("920826"), y = n("239840"); let P = [8, 8, 0, 8], U = l().debounce(() => { (0, _.trackWithMetadata)(v.AnalyticEvents.APPLICATION_COMMAND_BROWSER_SCROLLED) }, 300); function b(e) { e.preventDefault() } t.default = r.forwardRef(function(e, t) { let { channel: n, canOnlyUseTextCommands: s } = e, o = r.useRef(!1), l = r.useRef(0), [G, w] = r.useState(0), k = r.useRef(null), [B, V] = r.useState(!1), x = E.ApplicationCommandDiscoveryPickerStore.useStore(e => e.activeCategoryIndex); r.useEffect(() => { (0, _.trackWithMetadata)(v.AnalyticEvents.APPLICATION_COMMAND_BROWSER_OPENED) }, []); let { sectionDescriptors: F, activeSections: H, commandsByActiveSection: Y, hasMoreAfter: j, commands: W, filteredSectionId: K, scrollDown: z, filterSection: Z } = m.useDiscovery(n, { commandType: d.ApplicationCommandType.CHAT, builtIns: s ? N.BuiltInCommandFilter.ONLY_TEXT : N.BuiltInCommandFilter.ALLOW, applicationCommands: !s }, { placeholderCount: 7, limit: L.DISCOVERY_COMMANDS_QUERY_LIMIT, includeFrecency: !0 }), X = (0, I.useSynchronizedActiveCategoryIndexForScrollPosition)({ activeCategoryIndex: x, isScrolling: o, listRef: k, onActiveCategoryIndexChange: e => { let t = H[e]; if (null != t) { let e = F.findIndex(e => e.id === t.id); E.ApplicationCommandDiscoveryPickerStore.setActiveCategoryIndex(e) } }, scrollOffset: 20, searchQuery: "" }), Q = e => { let t = H.length, n = Y.reduce((e, t) => e + t.data.length, 0) - (j ? 7 : 0); j && e + 420 > 48 * t + 56 * n - 512 && z(), X(e), U(), l.current = e }; r.useEffect(() => { Q(l.current) }, [W]); let q = r.useCallback(e => e !== H.length - 1 || j ? 16 : 0, [H.length, j]), J = Y.map(e => e.data.length); r.useEffect(() => { null != k.current && B && null != G && k.current.scrollRowIntoView(G) }, [B, G]), r.useLayoutEffect(() => { if (null != K) { var e; null === (e = k.current) || void 0 === e || e.scrollToSectionTop(0) } }, [W, K]); let $ = r.useCallback(e => { if (e.id === K || e.id === L.BuiltInSectionId.FRECENCY) { var t; Z(null), null === (t = k.current) || void 0 === t || t.scrollToSectionTop(0) } else Z(e.id) }, [Z, K]), ee = r.useCallback((e, t, i) => { A.setActiveCommand({ channelId: n.id, command: e, section: t, location: p.ApplicationCommandTriggerLocations.DISCOVERY, triggerSection: i }) }, [n.id]); r.useImperativeHandle(t, () => ({ onTabOrEnter: e => { if (null == G) return !e && (w(0), !0); if (null == G) return !1; let t = 0, n = 0; for (let e of Y) if (t = n, G < (n += e.data.length)) { let n = e.data[G - t], i = F.find(e => e.id === n.applicationId); ee(n, i, (0, O.getCommandTriggerSection)(e.section)); break } return !0 }, onMoveSelection: e => { if (0 === W.length) return !0; let t = j ? 7 : 0, n = W.length + t, i = null == G ? 0 : G + e; return i >= n ? i = n - 1 : i < 0 && (i = 0), w(i), V(!0), !0 } }), [W.length, Y, j, F, ee, G]); let et = r.useCallback(e => { let t = H[e]; if (null == t) return null; let r = (0, g.getIconComponent)(t), s = (0, i.jsx)(r, { channel: n, section: t, width: 16, height: 16, padding: 0 }); return (0, i.jsx)(T.default, { className: M.categoryHeader, icon: s, children: t.name }, e) }, [n, H]), en = r.useCallback((e, t) => { let n = e === H.length - 1, r = H[e], { data: s } = Y[e]; return (0, i.jsxs)("ul", { role: "group", "aria-label": r.name, className: a()(M.categorySection, { [M.categorySectionLast]: n }), children: [t, 0 === s.length && (0, i.jsx)(u.default, { message: D.default.Messages.APPLICATION_COMMAND_NO_PERMISSIONS.format({ applicationName: r.name }), noResultsImageURL: y, className: M.noSearchResults })] }, e) }, [H, Y]), ei = r.useCallback((e, t) => { var r; let s = Y[t.sectionIndex], a = s.data[t.sectionRowIndex], o = "".concat(s.section.id, ":").concat(null !== (r = null == a ? void 0 : a.id) && void 0 !== r ? r : e); if (null == a || s.section.id !== a.applicationId && s.section.id !== L.BuiltInSectionId.FRECENCY || a.inputType === p.ApplicationCommandInputType.PLACEHOLDER) return (0, i.jsx)(R.default, {}, o); let l = F.find(e => e.id === a.applicationId); return (0, i.jsx)(f.default.NewCommand, { index: e, command: a, channel: n, className: M.itemWrapper, selected: G === e, showImage: s.section.id !== a.applicationId, section: l, onClick: () => ee(a, l, (0, O.getCommandTriggerSection)(s.section)), onHover: () => { w(null), V(!1) } }, o) }, [n, Y, ee, F, G]), er = (0, h.useUID)(); return (0, c.useChannelEditorPopup)(er, !0, (0, f.getAutocompleteRowId)(G)), r.useEffect(() => () => { (0, c.dismissChannelEditorPopup)() }, []), (0, i.jsxs)(f.default, { id: er, className: M.outerWrapper, innerClassName: M.wrapper, onMouseDown: b, children: [(0, i.jsx)(C.default, { className: M.rail, channel: n, sections: F, filteredSectionId: K, activeCategoryIndex: x, onSectionClick: $, applicationCommandListRef: k }), (0, i.jsx)(S.default, { role: "listbox", className: M.list, listPadding: P, onScroll: Q, renderRow: ei, renderSection: en, renderSectionHeader: et, rowCount: H.length, rowCountBySection: J, rowHeight: 56, sectionHeaderHeight: 32, sectionMarginBottom: q, ref: k, stickyHeaders: !0 })] }) }) }, 809090: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("806519"), l = n("768581"), u = n("895924"), d = n("588970"), _ = n("970952"); function c(e) { let { section: t, isSelected: n, width: s, height: c, className: E, selectable: I = !1, onFocus: T, onBlur: f, onMouseOver: S, onMouseLeave: h, ...A } = e, [m, N] = r.useState(!1), p = r.useCallback(() => { N(!0), null == T || T() }, [T]), O = r.useCallback(() => { N(!1), null == f || f() }, [f]), C = r.useCallback(() => { N(!0), null == S || S() }, [S]), R = r.useCallback(() => { N(!1), null == h || h() }, [h]), g = r.useMemo(() => { if (t.type === u.ApplicationCommandSectionType.APPLICATION) { var e; return l.default.getApplicationIconURL({ id: t.id, icon: t.icon, bot: null === (e = t.application) || void 0 === e ? void 0 : e.bot, botIconFirst: !0, size: s }) } return _ }, [t, s]); return (0, i.jsx)("div", { ...A, className: a()(d.wrapper, E, { [d.selectable]: I, [d.selected]: I && n }), onFocus: p, onBlur: O, onMouseOver: C, onMouseLeave: R, children: (0, i.jsx)(o.default, { className: d.mask, mask: I && (n || m) ? o.MaskIDs.SQUIRCLE : o.MaskIDs.AVATAR_DEFAULT, width: s, height: c, children: (0, i.jsx)("img", { alt: "", className: d.icon, style: { width: s, height: c }, src: g }) }) }) } }, 944877: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("377617"), o = n("855693"), l = n("689079"), u = n("977202"); let d = e => { switch (e.id) { case l.BuiltInSectionId.BUILT_IN: return a.default; case l.BuiltInSectionId.FRECENCY: return o.default; default: return } }; function _(e) { let { section: t, className: n, width: r, height: a, padding: o, isSelected: l, selectable: _ = !1, ...c } = e, E = d(t); return (0, i.jsx)("div", { className: s()(u.wrapper, n, { [u.selectable]: _, [u.selected]: _ && l }), style: { width: r, height: a, padding: null != o ? o : 0 }, children: null != E ? (0, i.jsx)(E, { className: u.icon, width: r, height: a, ...c }) : null }) } }, 56801: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("806966"), u = n("254494"), d = n("895924"), _ = n("826298"), c = n("496030"); let E = [16, 12, 8, 12]; function I(e) { let { className: t, channel: n, sections: s, activeCategoryIndex: I, filteredSectionId: T, onSectionClick: f, applicationCommandListRef: S } = e, h = r.useRef(null), A = r.useCallback((e, t) => { var n; let i = 8; return (null === (n = s[t + 1]) || void 0 === n ? void 0 : n.type) === d.ApplicationCommandSectionType.BUILT_IN && (i += 8), 32 + i }, [s]), m = r.useCallback((e, t) => { var n; if (!t) return 0 === e ? 0 : 8; return (null === (n = s[e + 1]) || void 0 === n ? void 0 : n.type) === d.ApplicationCommandSectionType.BUILT_IN ? 0 : 8 }, [s]), N = r.useCallback((e, t) => { let r = s[t]; if (null == r) return; let a = (0, _.getIconComponent)(r), l = r.type === d.ApplicationCommandSectionType.BUILT_IN ? 4 : 0, u = 32 - 2 * l, E = (0, i.jsx)(a, { channel: n, section: r, isSelected: null != T ? r.id === T : I === t, padding: l, width: u, height: u, selectable: !0 }), S = r.type !== d.ApplicationCommandSectionType.BUILT_IN && t < s.length - 1 && s[t + 1].type === d.ApplicationCommandSectionType.BUILT_IN; return (0, i.jsxs)("div", { className: c.section, children: [(0, i.jsx)(o.Tooltip, { text: r.name, position: "right", children: e => { let { onClick: t, ...n } = e; return (0, i.jsx)(o.Clickable, { "aria-label": r.name, onClick: () => { f(r), null == t || t() }, ...n, children: E }) } }), S ? (0, i.jsx)("hr", { className: c.builtInSeparator }) : null] }, r.id) }, [I, n, f, s, T]); return 0 === s.length ? null : (0, i.jsx)("div", { className: a()(t, c.wrapper), children: (0, i.jsx)(u.default, { categoryListRef: h, expressionsListRef: S, store: l.ApplicationCommandDiscoveryPickerStore, categories: s, className: c.list, renderCategoryListItem: N, rowCount: s.length, categoryHeight: A, listPadding: E, getScrollOffsetForIndex: m }) }) } }, 237375: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("508688"), u = n("154921"), d = n("987826"), _ = n("826298"), c = n("665692"), E = n("689938"), I = n("859381"); function T(e, t, n) { return (0, i.jsx)(d.default, { className: I.option, name: e.displayName, state: t, onClick: n }, e.name) } function f(e) { let { command: t, optionStates: n, onOptionClick: s } = e, { requiredOptions: a, setOptionalOptions: l, unsetOptionalOptions: d } = r.useMemo(() => { var e, i, r, s; let a = null !== (r = null === (e = t.options) || void 0 === e ? void 0 : e.filter(e => e.required)) && void 0 !== r ? r : [], o = null !== (s = null === (i = t.options) || void 0 === i ? void 0 : i.filter(e => !e.required)) && void 0 !== s ? s : [], l = o.filter(e => { var t; return null == n ? void 0 : null === (t = n[e.name]) || void 0 === t ? void 0 : t.hasValue }); return { requiredOptions: a, setOptionalOptions: l, unsetOptionalOptions: o.filter(e => { var t; return !(null == n ? void 0 : null === (t = n[e.name]) || void 0 === t ? void 0 : t.hasValue) }) } }, [t.options, n]), _ = (0, i.jsx)("div", { className: I.optionalNames, children: d.map(e => (0, i.jsx)(o.Text, { variant: "text-sm/normal", children: e.displayName }, e.name)) }), c = a.map(e => T(e, null == n ? void 0 : n[e.name], s)), f = l.length > 0 ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(o.Heading, { className: I.optionalHeader, variant: "heading-deprecated-12/semibold", children: E.default.Messages.COMMANDS_OPTIONAL_HEADER }), l.map(e => T(e, null == n ? void 0 : n[e.name], s))] }) : null, S = d.length > 0 ? (0, i.jsx)(o.Tooltip, { text: _, "aria-label": !1, delay: 200, children: e => (0, i.jsx)(u.default, { className: I.optionalCount, color: u.default.Colors.MUTED, ...e, children: 0 === l.length ? E.default.Messages.COMMANDS_OPTIONAL_COUNT.format({ count: d.length }) : E.default.Messages.COMMANDS_OPTIONAL_COUNT_REMAINING.format({ count: d.length }) }) }) : null; return (0, i.jsxs)(i.Fragment, { children: [c, null != f || null != S ? (0, i.jsxs)("div", { className: I.optionals, children: [f, S] }) : null] }) } function S(e) { var t, n, s; let o, { command: u, activeOptionName: d, channel: E, showOptions: T, showImage: S, optionStates: h, onOptionClick: A, section: m, isSelectable: N = !0 } = e, p = r.useMemo(() => { var e; return null == u ? void 0 : null === (e = u.options) || void 0 === e ? void 0 : e.find(e => e.name === d) }, [d, u]), O = null != d ? null == h ? void 0 : h[d] : null; o = null != O && (null === (t = O.lastValidationResult) || void 0 === t ? void 0 : t.success) === !1 ? null !== (n = O.lastValidationResult.error) && void 0 !== n ? n : "" : null; let C = S && null != m ? (0, _.getIconComponent)(m) : null; return (0, i.jsxs)("div", { className: a()(I.wrapper, N ? null : I.disabled), children: [null != C ? (0, i.jsx)(C, { className: I.image, channel: E, section: m, width: 32, height: 32 }) : null, (0, i.jsxs)("div", { className: I.infoWrapper, children: [(0, i.jsxs)("div", { className: I.usageWrapper, children: [(0, i.jsx)(l.AutocompleteRowHeading, { className: I.title, children: c.COMMAND_SENTINEL + u.displayName }), T ? (0, i.jsx)(f, { command: u, optionStates: h, onOptionClick: A }) : null] }), (0, i.jsx)(l.AutocompleteRowSubheading, { className: a()(I.description, null != o ? I.error : null), children: null !== (s = null != o ? o : null == p ? void 0 : p.displayDescription) && void 0 !== s ? s : u.displayDescription })] }), (0, i.jsx)(l.AutocompleteRowContentSecondary, { className: I.source, children: null == m ? void 0 : m.name })] }) } }, 987826: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("154921"), l = n("483853"); function u(e) { var t; let { name: n, className: r, state: u, isInline: d, onClick: _ } = e, c = null, E = o.default.Colors.HEADER_PRIMARY; (null == u ? void 0 : u.isActive) && !d ? c = l.active : (null == u ? void 0 : null === (t = u.lastValidationResult) || void 0 === t ? void 0 : t.success) === !1 ? c = l.error : (null == u ? void 0 : u.hasValue) && !d && (c = l.set); let I = (0, i.jsx)(o.default, { size: d ? o.default.Sizes.SIZE_16 : o.default.Sizes.SIZE_14, color: E, className: s()(l.option, { [l.inline]: d }, c, r), children: n + (d ? ":" : "") }); return null == _ ? I : (0, i.jsx)(a.Clickable, { className: l.clickable, onClick: () => _(n), children: I }) } }, 342687: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("392711"), a = n.n(s), o = n("826298"), l = n("699973"); t.default = e => { let { showImage: t } = e, { usageWidth: n, descriptionWidth: s, sourceWidth: u } = r.useMemo(() => ({ usageWidth: a().random(60, 120), descriptionWidth: a().random(200, 600), sourceWidth: a().random(45, 90) }), []); return (0, i.jsxs)("div", { className: l.wrapper, children: [t ? (0, i.jsx)("div", { className: l.image }) : null, (0, i.jsxs)("div", { className: l.infoWrapper, children: [(0, i.jsx)("div", { style: { maxWidth: (0, o.pxToRem)(n) }, className: l.usageWrapper }), (0, i.jsx)("div", { style: { maxWidth: (0, o.pxToRem)(s) }, className: l.description })] }), (0, i.jsx)("div", { style: { width: (0, o.pxToRem)(u) }, className: l.source })] }) } }, 920455: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("239091"), u = n("688465"), d = n("63063"), _ = n("689079"), c = n("981631"), E = n("689938"), I = n("418609"); function T(e) { var t; let { className: s, activeCommand: T } = e, f = r.useCallback(e => { var t; let r = null == T ? void 0 : null === (t = T.rootCommand) || void 0 === t ? void 0 : t.id; if (null == r) { e.preventDefault(); return }(0, l.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("5396").then(n.bind(n, "731646")); return t => (0, i.jsx)(e, { ...t, id: r, label: E.default.Messages.COPY_ID_COMMAND }) }) }, [null == T ? void 0 : null === (t = T.rootCommand) || void 0 === t ? void 0 : t.id]); return null == T ? null : (0, i.jsxs)("div", { className: a()(s, I.bar), onContextMenu: f, children: [(0, i.jsx)(u.default, {}), (0, i.jsxs)(o.Text, { variant: "text-sm/normal", color: "text-muted", children: [E.default.Messages.APPLICATION_COMMAND_USER_INSTALL_EDUCATION.format({ betaUserLimit: _.APPLICATION_USER_INSTALL_BETA_USER_LIMIT }), E.default.Messages.APPLICATION_COMMAND_USER_INSTALL_LEARN_MORE.format({ learnMoreUrl: d.default.getArticleURL(c.HelpdeskArticles.USING_APPS_FAQ) })] })] }) } }, 826298: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getCommandQuery: function() { return u }, getIconComponent: function() { return o }, pxToRem: function() { return l } }); var i = n("895924"), r = n("809090"), s = n("944877"), a = n("689079"); let o = e => e.type === i.ApplicationCommandSectionType.BUILT_IN ? s.default : r.default; function l(e) { return "".concat(e / 16, "rem") } function u(e, t) { let n = t, i = !1, r = t.indexOf(":"); if (r >= 0) { let e = t.lastIndexOf(" ", r); e >= 0 ? (t = t.substring(0, e), i = !0) : t = t.substring(0, r) } else t = t.substring(0, t.length); let s = t.split(" ", a.MAX_SUBCOMMAND_LEVEL + 1); return s.length > a.MAX_SUBCOMMAND_LEVEL && (i = !0, s.pop()), t = s.join(" "), (n.length > t.length || t.endsWith(" ")) && (i = !0, t = t.trimEnd()), { text: t, parts: s, hasSpaceTerminator: i } } }, 674588: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchIntegrationApplicationIdsForMyGuilds: function() { return N }, getApplication: function() { return f }, getCategories: function() { return S }, getCollections: function() { return m }, getEmbedApplication: function() { return T }, getSimilarApplications: function() { return h }, search: function() { return A } }), n("47120"); var i = n("261470"), r = n("544891"), s = n("570140"), a = n("706454"), o = n("264043"), l = n("894653"), u = n("368862"), d = n("809547"), _ = n("303383"), c = n("973001"), E = n("981631"); let I = new Map; async function T(e) { var t; let n = Date.now(), a = null !== (t = I.get(e)) && void 0 !== t ? t : 0; if (o.default.getApplicationFetchState(e) === o.FetchState.FETCHING || o.default.isInvalidApplication(e) || n < a + 6e5) return; I.set(e, n), s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_APPLICATION", applicationId: e }); let l = new i.default(1e3, 5e3), u = (e, t) => 429 === e.status && !!(l.fails < 10) && (l.fail(() => { t(void 0, u) }), !0); try { let t = (await r.HTTP.get({ url: E.Endpoints.APPLICATION_DIRECTORY_EMBED_APPLICATION(e), backoff: l, retries: 10, interceptResponse: u })).body; s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS", application: t }) } catch (t) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE", applicationId: e, isInvalidApplication: !0 }) } } async function f(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = Date.now(), i = o.default.getApplicationFetchState(e), l = o.default.getApplicationLastFetchTime(e), { dontRefetchMs: u } = t; if (i !== o.FetchState.FETCHING) { if (!(null != l && l + (null != u ? u : 6e5) > n)) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_APPLICATION", applicationId: e }); try { let t = await r.HTTP.get({ url: E.Endpoints.APPLICATION_DIRECTORY_APPLICATION(e), query: { locale: a.default.locale } }); s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS", application: t.body }) } catch (t) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE", applicationId: e, isInvalidApplication: !0 }) } } } } async function S() { let e = Date.now(), t = l.default.getLastFetchTimeMs(); if (null != t && t + 6e5 > e) return; let n = await r.HTTP.get({ url: E.Endpoints.APPLICATION_DIRECTORY_CATEGORIES, query: { locale: a.default.locale } }); s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS", categories: n.body }) } async function h(e) { var t; let { applicationId: n, guildId: i, options: o } = e, { page: l } = null != o ? o : {}, u = Date.now(), d = _.default.getFetchState({ applicationId: n, guildId: i }), { lastFetchTimeMs: c } = null !== (t = _.default.getSimilarApplications({ applicationId: n, guildId: i })) && void 0 !== t ? t : {}; if (d !== _.FetchState.FETCHING) { if (null == c || !(c + 6e5 > u)) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS", applicationId: n, guildId: i, page: l }); try { let e = await r.HTTP.get({ url: E.Endpoints.APPLICATION_DIRECTORY_SIMILAR(n), query: { guild_id: i, page: l, locale: a.default.locale } }); s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS", applicationId: n, guildId: i, similarApplications: e.body.applications, loadId: e.body.load_id, page: l, totalPages: e.body.num_pages }) } catch (e) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE", applicationId: n, guildId: i, page: l }) } } } } async function A(e) { var t; let { query: n, guildId: i, options: o, onSuccessCallback: l } = e, { page: u, categoryId: _, integrationType: c } = null != o ? o : {}, I = Date.now(), T = d.default.getFetchState({ query: n, guildId: i, page: u, categoryId: _, integrationType: c }), { lastFetchTimeMs: f } = null !== (t = d.default.getSearchResults({ query: n, guildId: i, page: u, categoryId: _, integrationType: c })) && void 0 !== t ? t : {}; if (T !== d.FetchState.FETCHING) { if (null == f || !(f + 6e5 > I)) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_SEARCH", query: n, guildId: i, page: u, categoryId: _, integrationType: c }); try { let e = await r.HTTP.get({ url: E.Endpoints.APPLICATION_DIRECTORY_SEARCH, query: { query: n, guild_id: i, page: u, category_id: _, locale: a.default.locale, integration_type: c } }); s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS", query: n, guildId: i, page: u, categoryId: _, integrationType: c, result: { results: e.body.results, countsByCategory: e.body.counts_by_category, totalCount: e.body.result_count, totalPages: e.body.num_pages, type: e.body.type, loadId: e.body.load_id } }), null == l || l(e.body.result_count) } catch (e) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE", query: n, guildId: i, page: u, categoryId: _, integrationType: c }) } } } } async function m() { let { includesInactive: e = !1 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = Date.now(), n = u.default.getFetchState({ includesInactive: e }), i = u.default.getLastFetchTimeMs({ includesInactive: e }); if (n !== u.FetchState.FETCHING) { if (null == i || !(i + 6e5 > t)) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_COLLECTIONS", includesInactive: e }); try { let t = await r.HTTP.get({ url: E.Endpoints.APPLICATION_DIRECTORY_COLLECTIONS, query: { includes_inactive: e, locale: a.default.locale } }); s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS", collections: t.body, includesInactive: e }) } catch (t) { s.default.dispatch({ type: "APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE", includesInactive: e }) } } } } async function N() { let e = Date.now(), t = c.default.getFetchState(), n = c.default.getLastFetchTimeMs(), i = c.default.getNextFetchRetryTimeMs(); if (t !== c.FetchState.FETCHING && (null == n || !(n + 864e5 > e))) { if (null == i || !(e < i)) { s.default.dispatch({ type: "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS" }); try { let e = await r.HTTP.get({ url: E.Endpoints.INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS }); s.default.dispatch({ type: "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS", guildIdToApplicationIds: e.body }) } catch (t) { var a; let e = (null == t ? void 0 : t.status) === 429; s.default.dispatch({ type: "FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE", retryAfterSeconds: e ? null == t ? void 0 : null === (a = t.body) || void 0 === a ? void 0 : a.retry_after : void 0 }) } } } } }, 264043: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return i } }), n("47120"); var i, r, s, a, o, l, u = n("442837"), d = n("570140"); (s = i || (i = {}))[s.FETCHING = 0] = "FETCHING", s[s.FETCHED = 1] = "FETCHED", s[s.ERROR = 2] = "ERROR"; let _ = {}, c = {}, E = new Set, I = {}; class T extends(r = u.default.Store) { getApplication(e) { if (null != e) return _[e] } getApplications() { return _ } getApplicationFetchState(e) { if (null != e) return c[e] } getApplicationFetchStates() { return c } isInvalidApplication(e) { return null != e && E.has(e) } getInvalidApplicationIds() { return E } isFetching(e) { return 0 === this.getApplicationFetchState(e) } getApplicationLastFetchTime(e) { if (null != e) return I[e] } } l = "ApplicationDirectoryApplicationsStore", (o = "displayName") in(a = T) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new T(d.default, { APPLICATION_DIRECTORY_FETCH_APPLICATION: function(e) { let { applicationId: t } = e; c = { ...c, [t]: 0 } }, APPLICATION_DIRECTORY_FETCH_APPLICATION_SUCCESS: function(e) { let { application: t } = e; _ = { ..._, [t.id]: t }, c = { ...c, [t.id]: 1 }; let n = Date.now(); I = { ...I, [t.id]: n }, E.has(t.id) && (E.delete(t.id), E = new Set(E)) }, APPLICATION_DIRECTORY_FETCH_APPLICATION_FAILURE: function(e) { let { applicationId: t, isInvalidApplication: n } = e; c = { ...c, [t]: 2 }, n && (E.add(t), E = new Set(E)) } }) }, 894653: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = [], d = null; class _ extends(a = o.default.Store) { getLastFetchTimeMs() { return d } getCategories() { return u } } s = "ApplicationDirectoryCategoriesStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { APPLICATION_DIRECTORY_FETCH_CATEGORIES_SUCCESS: function(e) { let { categories: t } = e; u = t, d = Date.now() } }) }, 368862: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return o } }); var i, r, s, a, o, l, u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"); (i = o || (o = {}))[i.FETCHING = 0] = "FETCHING", i[i.FETCHED = 1] = "FETCHED", i[i.ERROR = 2] = "ERROR"; let E = {}, I = {}, T = {}; function f(e) { let { includesInactive: t } = e; return "includes_inactive:".concat(t) } class S extends(l = _.default.Store) { getLastFetchTimeMs(e) { let { includesInactive: t } = e; return T[f({ includesInactive: t })] } getFetchState(e) { let { includesInactive: t } = e; return I[f({ includesInactive: t })] } getCollections(e) { let { includesInactive: t } = e; return E[f({ includesInactive: t })] } } a = void 0, (s = "displayName") in(r = S) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new S(c.default, { APPLICATION_DIRECTORY_FETCH_COLLECTIONS: function(e) { let { includesInactive: t } = e; I = { ...I, [f({ includesInactive: t })]: 0 } }, APPLICATION_DIRECTORY_FETCH_COLLECTIONS_SUCCESS: function(e) { var t; let { collections: n, includesInactive: i } = e, r = f({ includesInactive: i }); let s = (t = n.map(e => { var t; return e.application_directory_collection_items = (t = e.application_directory_collection_items, d().sortBy(t, ["position", "id"])), e }), d().sortBy(t, ["position", "id"])); E = { ...E, [r]: s }, I = { ...I, [r]: 1 }; let a = Date.now(); T = { ...T, [r]: a } }, APPLICATION_DIRECTORY_FETCH_COLLECTIONS_FAILURE: function(e) { let { includesInactive: t } = e; I = { ...I, [f({ includesInactive: t })]: 2 } } }) }, 809547: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return o } }); var i, r, s, a, o, l, u = n("31775"), d = n.n(u), _ = n("442837"), c = n("570140"); function E(e) { let { query: t, guildId: n, page: i, categoryId: r, integrationType: s } = e; return "query:'".concat(t, "' guildId:").concat(n, " page:").concat(i, " categoryId:").concat(r, " integrationType:").concat(s) }(i = o || (o = {}))[i.FETCHING = 0] = "FETCHING", i[i.FETCHED = 1] = "FETCHED", i[i.ERROR = 2] = "ERROR"; let I = new(d())({ max: 20 }), T = {}; class f extends(l = _.default.Store) { getSearchResults(e) { let { query: t, guildId: n, page: i, categoryId: r, integrationType: s } = e, a = E({ query: t, guildId: n, page: i, categoryId: r, integrationType: s }); return I.get(a) } getFetchState(e) { let { query: t, guildId: n, page: i, categoryId: r, integrationType: s } = e; return T[E({ query: t, guildId: n, page: i, categoryId: r, integrationType: s })] } } a = "ApplicationDirectorySearchStore", (s = "displayName") in(r = f) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new f(c.default, { APPLICATION_DIRECTORY_FETCH_SEARCH: function(e) { let { query: t, guildId: n, page: i, categoryId: r, integrationType: s } = e, a = E({ query: t, guildId: n, page: i, categoryId: r, integrationType: s }); T = { ...T, [a]: 0 } }, APPLICATION_DIRECTORY_FETCH_SEARCH_SUCCESS: function(e) { let { query: t, guildId: n, page: i, categoryId: r, result: s, integrationType: a } = e, o = E({ query: t, guildId: n, page: i, categoryId: r, integrationType: a }); I.set(o, { lastFetchTimeMs: Date.now(), ...s }), T = { ...T, [o]: 1 } }, APPLICATION_DIRECTORY_FETCH_SEARCH_FAILURE: function(e) { let { query: t, guildId: n, page: i, categoryId: r, integrationType: s } = e, a = E({ query: t, guildId: n, page: i, categoryId: r, integrationType: s }); T = { ...T, [a]: 2 } } }) }, 303383: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return o } }); var i, r, s, a, o, l, u = n("31775"), d = n.n(u), _ = n("442837"), c = n("570140"); function E(e) { let { applicationId: t, guildId: n, page: i } = e; return "applicationId:".concat(t, " guildId:").concat(n, " page:").concat(i) }(i = o || (o = {}))[i.NOT_FETCHED = 0] = "NOT_FETCHED", i[i.FETCHING = 1] = "FETCHING", i[i.FETCHED = 2] = "FETCHED", i[i.ERROR = 3] = "ERROR"; let I = new(d())({ max: 20 }), T = {}; class f extends(l = _.default.Store) { getSimilarApplications(e) { let { applicationId: t, guildId: n, page: i } = e; if (null == t) return; let r = E({ applicationId: t, guildId: n, page: i }); return I.get(r) } getFetchState(e) { let { applicationId: t, guildId: n, page: i } = e; if (null != t) return T[E({ applicationId: t, guildId: n, page: i })] } } a = "ApplicationDirectorySimilarApplicationsStore", (s = "displayName") in(r = f) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new f(c.default, { APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS: function(e) { let { applicationId: t, guildId: n, page: i } = e, r = E({ applicationId: t, guildId: n, page: i }); T = { ...T, [r]: 1 } }, APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_SUCCESS: function(e) { let { applicationId: t, guildId: n, similarApplications: i, loadId: r, page: s, totalPages: a } = e, o = E({ applicationId: t, guildId: n, page: s }); I.set(o, { lastFetchTimeMs: Date.now(), applications: i, loadId: r, page: s, totalPages: a }), T = { ...T, [o]: 2 } }, APPLICATION_DIRECTORY_FETCH_SIMILAR_APPLICATIONS_FAILURE: function(e) { let { applicationId: t, guildId: n, page: i } = e, r = E({ applicationId: t, guildId: n, page: i }); T = { ...T, [r]: 3 } } }) }, 973001: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return i } }), n("47120"); var i, r, s, a = n("442837"), o = n("570140"), l = n("70956"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {}))[s.NOT_FETCHED = 0] = "NOT_FETCHED", s[s.FETCHING = 1] = "FETCHING", s[s.FETCHED = 2] = "FETCHED", s[s.ERROR = 3] = "ERROR"; let d = { applicationIdToGuildIds: {}, lastFetchTimeMs: null, nextFetchRetryTimeMs: null, fetchState: 0 }; function _(e) { let { applicationId: t, guildId: n } = e; null == d.applicationIdToGuildIds[t] && (d.applicationIdToGuildIds[t] = new Set), d.applicationIdToGuildIds[t].add(n), d.applicationIdToGuildIds[t] = new Set(d.applicationIdToGuildIds[t]) } class c extends(r = a.default.PersistedStore) { initialize(e) { if (null != e) for (let t in d.lastFetchTimeMs = e.lastFetchTimeMs, d.nextFetchRetryTimeMs = e.nextFetchRetryTimeMs, d.fetchState = e.fetchState, e.applicationIdToGuildIds) d.applicationIdToGuildIds[t] = new Set(e.applicationIdToGuildIds[t]) } getState() { return d } getGuildIdsForApplication(e) { if (null != e) return d.applicationIdToGuildIds[e] } getLastFetchTimeMs() { return d.lastFetchTimeMs } getNextFetchRetryTimeMs() { return d.nextFetchRetryTimeMs } getFetchState() { return d.fetchState } } u(c, "displayName", "MyGuildApplicationsStore"), u(c, "persistKey", "MyGuildApplicationsStore"), t.default = new c(o.default, { LOGOUT: function() { d.applicationIdToGuildIds = {}, d.lastFetchTimeMs = null, d.nextFetchRetryTimeMs = null, d.fetchState = 0 }, FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS: function() { d.fetchState = 1 }, FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_SUCCESS: function(e) { let { guildIdToApplicationIds: t } = e; for (let e in d.fetchState = 2, d.lastFetchTimeMs = Date.now(), d.applicationIdToGuildIds = {}, d.nextFetchRetryTimeMs = null, t) for (let n of t[e]) _({ applicationId: n, guildId: e }) }, FETCH_INTEGRATION_APPLICATION_IDS_FOR_MY_GUILDS_FAILURE: function(e) { let { retryAfterSeconds: t } = e; if (d.fetchState = 3, null != t) { let e = t * l.default.Millis.SECOND; d.nextFetchRetryTimeMs = Date.now() + e } }, INTEGRATION_CREATE: function(e) { let { application: t, guildId: n } = e; null != t && _({ applicationId: t.id, guildId: n }) }, INTEGRATION_DELETE: function(e) { let { applicationId: t, guildId: n } = e; null != t && ! function(e) { let { applicationId: t, guildId: n } = e; null != d.applicationIdToGuildIds[t] && (d.applicationIdToGuildIds[t].delete(n), d.applicationIdToGuildIds[t] = new Set(d.applicationIdToGuildIds[t])) }({ applicationId: t, guildId: n }) } }) }, 887706: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("399606"), r = n("314897"); function s() { return (0, i.useStateFromStores)([r.default], () => r.default.isAuthenticated()) } }, 132871: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ApplicationDirectoryEntrypointNames: function() { return a }, ApplicationDirectoryViews: function() { return s }, getCurrentView: function() { return T }, getPreviousView: function() { return I }, resetApplicationDirectoryHistory: function() { return h }, setEntrypoint: function() { return f }, setGuildId: function() { return S }, setTrackedOpenedFromExternalEntrypoint: function() { return A }, useApplicationDirectoryHistory: function() { return E } }); var i, r, s, a, o = n("266067"), l = n("652874"), u = n("703656"), d = n("264043"), _ = n("981631"); (i = s || (s = {})).HOME = "home", i.SEARCH = "search", i.APPLICATION = "application", (r = a || (a = {})).EXTERNAL = "External", r.KEYBOARD_SHORTCUT = "Keyboard Shortcut", r.APPLICATION_DIRECTORY_URL = "Application Directory URL", r.APPLICATION_DIRECTORY_PROFILE_EMBED = "Application Directory Profile Embed", r.APPLICATION_DIRECTORY_UPSELL_MODAL = "Application Directory Upsell Modal", r.GUILD_HEADER_POPOUT = "Guild Header Popout", r.GUILD_SETTINGS = "Guild Settings", r.GUILD_INTEGRATION_SETTINGS = "Guild Integration Settings", r.GUILD_CONTEXT_MENU = "Guild Context Menu"; let c = (0, l.default)(() => ({ guildId: null, entrypoint: null, trackedOpenedFromExternalEntrypoint: !1 })), E = c; function I() { let { location: { state: e } } = (0, u.getHistory)(); return null == e ? void 0 : e.previousView } function T() { var e, t; let { location: { pathname: n } } = (0, u.getHistory)(), i = (0, o.matchPath)(n, { path: _.Routes.APPLICATION_DIRECTORY, exact: !0 }), r = (0, o.matchPath)(n, { path: _.Routes.APPLICATION_DIRECTORY_SEARCH, exact: !0 }), s = (0, o.matchPath)(n, { path: [_.Routes.APPLICATION_DIRECTORY_PROFILE(":applicationId"), _.Routes.APPLICATION_DIRECTORY_PROFILE_SECTION(":applicationId", ":section")], exact: !0 }), { applicationId: a, section: l } = null !== (e = null == s ? void 0 : s.params) && void 0 !== e ? e : {}; if (null != i) return { type: "home" }; if (null != r) return { type: "search" }; if (null != s && null != a) { let e = null === (t = d.default.getApplication(a)) || void 0 === t ? void 0 : t.name; return { type: "application", applicationId: a, applicationName: e, section: l } } } function f(e) { c.setState({ entrypoint: e }) } function S(e) { c.setState({ guildId: e }) } function h() { c.setState({ entrypoint: null, guildId: null }) } function A(e) { c.setState({ trackedOpenedFromExternalEntrypoint: e }) } }, 272242: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ApplicationDirectoryProfileSections: function() { return i } }), (r = i || (i = {})).GENERAL = "general", r.IMAGES = "images", r.PREMIUM = "premium", r.PRIVACY = "privacy" }, 970321: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useAppStorefrontAvailable: function() { return a } }); var i = n("442837"), r = n("812206"), s = n("621853"); function a(e) { return (0, i.useStateFromStores)([r.default, s.default], () => { var t, n, i, a, o; return null !== (o = null !== (a = null === (t = r.default.getApplication(e)) || void 0 === t ? void 0 : t.storefront_available) && void 0 !== a ? a : null === (i = s.default.getUserProfile(e)) || void 0 === i ? void 0 : null === (n = i.application) || void 0 === n ? void 0 : n.storefront_available) && void 0 !== o && o }, [e]) } }, 728345: function(e, t, n) { "use strict"; n.r(t), n("789020"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var i = n("544891"), r = n("570140"), s = n("630388"), a = n("812206"), o = n("981631"); t.default = { async createApplication(e) { let { name: t, guildId: n, type: s, teamId: a } = e, l = (await i.HTTP.post({ url: o.Endpoints.APPLICATIONS, body: { name: t, type: s, guild_id: n, team_id: a } })).body; return null != n && null != s && r.default.dispatch({ type: "APPLICATION_FETCH_SUCCESS", application: l }), l }, async getApplicationsForGuild(e) { let { includeTeam: t, ...n } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, s = (await i.HTTP.get({ url: o.Endpoints.GUILD_APPLICATIONS(e), query: { ...n, include_team: t } })).body; return r.default.dispatch({ type: "APPLICATIONS_FETCH_SUCCESS", applications: s }), s }, async transferApplication(e) { let { applicationId: t, teamId: n } = e, s = (await i.HTTP.post({ url: o.Endpoints.APPLICATION_OWNER_TRANSFER(t), body: { team_id: n } })).body; return r.default.dispatch({ type: "APPLICATION_FETCH_SUCCESS", application: s }), s }, async fetchApplications(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = e; if (!t && (n = e.filter(e => { var t, n; let i = a.default.getApplication(e), r = (0, s.hasFlag)(null !== (n = null == i ? void 0 : i.flags) && void 0 !== n ? n : 0, o.ApplicationFlags.EMBEDDED) && (null == i ? void 0 : null === (t = i.embeddedActivityConfig) || void 0 === t ? void 0 : t.supported_platforms) == null; return !(null != i && !r) && !a.default.isFetchingApplication(e) && !a.default.didFetchingApplicationFail(e) && e.length > 0 })), n.length > 0) { let e; r.default.dispatch({ type: "APPLICATIONS_FETCH", applicationIds: n }); try { e = await i.HTTP.get({ url: o.Endpoints.APPLICATIONS_PUBLIC, query: new URLSearchParams(n.map(e => ["application_ids", e])).toString(), oldFormErrors: !0 }) } catch (e) { throw r.default.dispatch({ type: "APPLICATIONS_FETCH_FAIL", applicationIds: n }), e } r.default.dispatch({ type: "APPLICATIONS_FETCH_SUCCESS", applications: e.body }) } }, fetchApplication(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return r.default.dispatch({ type: "APPLICATION_FETCH", applicationId: e }), i.HTTP.get({ url: o.Endpoints.APPLICATION_PUBLIC(e), query: { with_guild: t }, oldFormErrors: !0 }).then(e => (r.default.dispatch({ type: "APPLICATION_FETCH_SUCCESS", application: e.body }), e.body)).catch(t => (r.default.dispatch({ type: "APPLICATION_FETCH_FAIL", applicationId: e }), Promise.reject(t))) } } }, 430449: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o, l, u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"); (s = i || (i = {}))[s.NOT_FETCHED = 0] = "NOT_FETCHED", s[s.FETCHING = 1] = "FETCHING", s[s.FETCH_SUCCESS = 2] = "FETCH_SUCCESS"; let E = {}, I = {}; function T(e) { let { assets: t } = e, n = { ...E }; for (let e in t) { var i; let r = t[e]; n[e] = 2, I[e] = { assets: null !== (i = d().keyBy(r, "name")) && void 0 !== i ? i : {}, lastUpdated: Date.now() } } E = n } class f extends(r = _.default.Store) { getApplicationAssetFetchState(e) { var t; return null !== (t = E[e]) && void 0 !== t ? t : 0 } getFetchingIds() { return [...Object.entries(E).filter(e => { let [, t] = e; return 1 === t }).map(e => { let [t] = e; return t })] } getApplicationAssets(e) { return I[e] } } l = "ApplicationAssetsStore", (o = "displayName") in(a = f) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new f(c.default, { APPLICATION_ASSETS_FETCH: function(e) { let { applicationId: t } = e; E = { ...E, [t]: 1 } }, APPLICATION_ASSETS_FETCH_SUCCESS: function(e) { let { applicationId: t } = e; E = { ...E, [t]: 2 } }, APPLICATION_ASSETS_UPDATE: function(e) { let { applicationId: t, assets: n } = e; if (null != n) { var i; I[t] = { assets: null !== (i = d().keyBy(n, "name")) && void 0 !== i ? i : {}, lastUpdated: Date.now() } } else delete I[t] }, EMBEDDED_ACTIVITY_FETCH_SHELF_SUCCESS: T, DEVELOPER_ACTIVITY_SHELF_FETCH_SUCCESS: T }) }, 674563: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ApplicationTypes: function() { return i }, BotTagTypes: function() { return r }, INSTALL_LESS_APP_IDS: function() { return o } }), (s = i || (i = {}))[s.GAME = 1] = "GAME", s[s.TICKETED_EVENTS = 3] = "TICKETED_EVENTS", s[s.GUILD_ROLE_SUBSCRIPTIONS = 4] = "GUILD_ROLE_SUBSCRIPTIONS", (a = r || (r = {}))[a.BOT = 0] = "BOT", a[a.SERVER = 1] = "SERVER", a[a.SYSTEM_DM = 2] = "SYSTEM_DM", a[a.OFFICIAL = 3] = "OFFICIAL", a[a.STAFF_ONLY_DM = 4] = "STAFF_ONLY_DM", a[a.ORIGINAL_POSTER = 5] = "ORIGINAL_POSTER", a[a.AI = 6] = "AI", a[a.REMIX = 7] = "REMIX"; let o = ["1102741339122188349", "1211781489931452447", "1211780388607885393", "1166579889915310151"] }, 148958: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useSortApplicationsViaFrecency: function() { return o } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("675478"), a = n("822245"); function o(e) { i.useEffect(() => { s.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []); let t = (0, r.useStateFromStores)([a.default], () => a.default.getApplicationFrecencyWithoutLoadingLatest()); return i.useMemo(() => { let n = [...e]; return n.sort((e, n) => { var i, r; let s = (null !== (i = t.getScore(n.id)) && void 0 !== i ? i : 0) - (null !== (r = t.getScore(e.id)) && void 0 !== r ? r : 0); return 0 !== s ? s : e.name.localeCompare(n.name) }), n }, [e, t]) } }, 822245: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FREQUENCY_ITEM_LIMIT: function() { return E } }), n("653041"); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("911969"), u = n("704907"), d = n("581883"), _ = n("526761"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = 250, I = { pendingUsages: [] }, T = new u.default({ computeBonus: () => 100, computeWeight: e => e <= 3 ? 100 : e <= 15 ? 70 : e <= 30 ? 50 : e <= 45 ? 30 : e <= 80 ? 10 : 0, lookupKey: e => e, afterCompute: () => {}, numFrequentlyItems: E }); function f(e) { I.pendingUsages.push({ key: e, timestamp: Date.now() }), T.track(e), T.compute() } function S() { var e, t; let n = null !== (t = null === (e = d.default.frecencyWithoutFetchingLatest.applicationFrecency) || void 0 === e ? void 0 : e.applications) && void 0 !== t ? t : {}; T.overwriteHistory(s().mapValues(n, e => ({ ...e, recentUses: e.recentUses.map(Number).filter(e => e > 0) })), I.pendingUsages) } class h extends(i = a.default.PersistedStore) { initialize(e) { null != e && (I = e), this.syncWith([d.default], S) } getState() { return I } hasPendingUsage() { return I.pendingUsages.length > 0 } getApplicationFrecencyWithoutLoadingLatest() { return T } getScoreWithoutLoadingLatest(e) { var t; return null !== (t = T.getScore(e)) && void 0 !== t ? t : 0 } getTopApplicationsWithoutLoadingLatest() { return T.frequently } } c(h, "displayName", "ApplicationFrecencyStore"), c(h, "persistKey", "ApplicationFrecency"), t.default = new h(o.default, { APPLICATION_COMMAND_USED: function(e) { let { command: t } = e; if (t.type !== l.ApplicationCommandType.CHAT) return !1; f(t.applicationId) }, EMBEDDED_ACTIVITY_OPEN: function(e) { let { applicationId: t } = e; f(t) }, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: { type: t }, wasSaved: n } = e; if (t !== _.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS || !n) return !1; I.pendingUsages = [] } }) }, 587100: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-03_apps_in_gdms", label: "Apps in GDMs", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Show apps in gdm", config: { enabled: !0 } }] }) }, 512751: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useShowApplicationInGDM: function() { return a } }); var i = n("399606"), r = n("592125"), s = n("587100"); function a(e) { let t = (0, i.useStateFromStores)([r.default], () => r.default.getChannel(e)), { enabled: n } = s.default.useExperiment({ location: "baec9c_1" }); return n && function(e) { return null != e && (!!e.isMultiUserDM() || !!e.isDM() && !e.isSystemDM() && null == e.rawRecipients.find(e => e.bot)) }(t) } }, 812206: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("973616"); let d = [], _ = {}, c = {}, E = {}, I = {}; function T(e) { for (let t of (_[e.id] = e, E[e.name.toLowerCase()] = e, e.aliases)) E[t.toLowerCase()] = e; delete I[e.id] } function f(e) { let { entitlements: t } = e, n = !1; for (let { sku: e } of t)(null == e ? void 0 : e.application) != null && (T(u.default.createFromServer(e.application)), n = !0); return n } class S extends(i = o.default.Store) { _getAllApplications() { return Object.values(_) } getGuildApplication(e, t) { if (null != e) { for (let n of Object.values(_)) if (n.guildId === e && n.type === t) return n } } getGuildApplicationIds(e) { var t; return null == e ? d : null !== (t = c[e]) && void 0 !== t ? t : d } getApplication(e) { return _[e] } getApplicationByName(e) { if (null == e) return; let t = e.toLowerCase(); return Object.prototype.hasOwnProperty.call(E, t) ? E[t] : void 0 } isFetchingApplication(e) { return !0 === I[e] } didFetchingApplicationFail(e) { return !1 === I[e] } getFetchingOrFailedFetchingIds() { return Object.keys(I) } } a = "ApplicationStore", (s = "displayName") in(r = S) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new S(l.default, { LOGOUT: function() { _ = {}, c = {}, E = {}, I = {} }, OVERLAY_INITIALIZE: function(e) { let { applications: t } = e; for (let e of t) T(new u.default(e)) }, APPLICATION_FETCH: function(e) { let { applicationId: t } = e, n = I[t]; return I[t] = !0, !0 !== n }, APPLICATION_FETCH_SUCCESS: function(e) { let { application: t } = e; T(u.default.createFromServer(t)) }, APPLICATION_FETCH_FAIL: function(e) { let { applicationId: t } = e, n = I[t]; return I[t] = !1, !1 !== n }, APPLICATIONS_FETCH: function(e) { let { applicationIds: t } = e, n = !1; for (let e of t) { let t = I[e]; I[e] = !0, n = !0 !== t } return n }, APPLICATIONS_FETCH_SUCCESS: function(e) { let { applications: t } = e; for (let e of t) T(u.default.createFromServer(e)) }, APPLICATIONS_FETCH_FAIL: function(e) { let { applicationIds: t } = e, n = !1; for (let e of t) { let t = I[e]; I[e] = !1, n = !1 !== t } return n }, APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS: f, ENTITLEMENTS_FETCH_FOR_USER_SUCCESS: f, ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS: f, GUILD_SETTINGS_LOADED_INTEGRATIONS: function(e) { let { integrations: t, guildId: n } = e, i = !1, r = []; for (let { application: e } of t) null != e && (T(e), r.push(e.id), i = !0); return i && (c[n] = r), i }, GUILD_APPLICATIONS_FETCH_SUCCESS: function(e) { let { guildId: t, applications: n } = e, i = []; for (let e of n) i.push(e.id), T(u.default.createFromServer(e)); c[t] = i }, BILLING_PAYMENTS_FETCH_SUCCESS: function(e) { let { payments: t } = e, n = new Set; for (let e of t) { var i; let t = null === (i = e.sku) || void 0 === i ? void 0 : i.application; !(null == t || n.has(t.id)) && T(u.default.createFromServer(t)) } return n.size > 0 }, PAYMENT_UPDATE: function(e) { var t; let { payment: n } = e; if ((null === (t = n.sku) || void 0 === t ? void 0 : t.application) == null) return !1; T(u.default.createFromServer(n.sku.application)) }, INVITE_RESOLVE_SUCCESS: function(e) { let { invite: t } = e; if (null == t.target_application) return !1; T(u.default.createFromServer(t.target_application)) }, GIFT_CODE_RESOLVE_SUCCESS: function(e) { var t; let { giftCode: n } = e; if ((null === (t = n.store_listing) || void 0 === t ? void 0 : t.sku.application) == null) return !1; T(u.default.createFromServer(n.store_listing.sku.application)) }, LIBRARY_FETCH_SUCCESS: function(e) { let { libraryApplications: t } = e; for (let e of t) T(u.default.createFromServer(e.application)) }, STORE_LISTING_FETCH_SUCCESS: function(e) { let { storeListing: t } = e; if (null == t.sku.application) return !1; T(u.default.createFromServer(t.sku.application)) }, LOAD_MESSAGES_SUCCESS: function(e) { let { messages: t } = e; t.forEach(e => (function(e) { var t; null === (t = e.attachments) || void 0 === t || t.forEach(e => { null != e.application && T(u.default.createFromServer(e.application)) }) })(e)) }, USER_RECENT_GAMES_FETCH_SUCCESS: function(e) { let { recentGames: t } = e; t.forEach(e => { T(u.default.createFromServer(e.application)) }) } }) }, 979200: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ApplicationDisclosure: function() { return r.ApplicationDisclosureType }, ackDisclosures: function() { return l }, getDisclosures: function() { return o }, getTextForDisclosure: function() { return u } }); var i = n("544891"), r = n("921072"), s = n("981631"), a = n("689938"); async function o(e) { let t = s.Endpoints.APPLICATION_DISCLOSURES(e), n = await i.HTTP.get({ url: t, retries: 3 }), r = n.body.disclosures, a = n.body.acked_disclosures; return { disclosures: r, ackedDisclosures: a, allAcked: n.body.all_acked } } async function l(e, t) { let n = s.Endpoints.APPLICATION_DISCLOSURES(e); await i.HTTP.post({ url: n, body: { disclosures: t } }) } function u(e) { switch (e) { case r.ApplicationDisclosureType.IP_LOCATION: return a.default.Messages.OAUTH2_IP_LOCATION_DISCLOSURE; case r.ApplicationDisclosureType.DISPLAYS_ADVERTISEMENTS: return a.default.Messages.OAUTH2_ADVERTISEMENTS_DISCLOSURE; default: return null } } }, 311819: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getApplicationInstallURL: function() { return r } }), n("47120"); var i = n("981631"); function r(e) { let { id: t, customInstallUrl: n, installParams: r, integrationTypesConfig: s } = e; if (null != n) return n; let a = {}; a.client_id = t; let o = null != s && Object.values(s).some(e => (null == e ? void 0 : e.oauth2_install_params) != null); if (null != r && !o) { let { permissions: e, scopes: t } = r; null != e && (a.permissions = e), null != t && (a.scope = t.join(" ")) } let l = Object.entries(a).map(e => { let [t, n] = e; return "".concat(t, "=").concat(encodeURIComponent(n)) }).join("&"); return "".concat(location.protocol, "//").concat(location.host).concat(i.Routes.OAUTH2_AUTHORIZE, "?").concat(l) } }, 835473: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l }, useGetOrFetchApplication: function() { return u } }); var i = n("470079"), r = n("442837"), s = n("902704"), a = n("728345"), o = n("812206"); function l(e) { let t = i.useRef([]); return i.useEffect(() => { !(0, s.areArraysShallowEqual)(e, t.current) && (a.default.fetchApplications(e, !1), t.current = e) }, [e]), (0, r.useStateFromStoresArray)([o.default], () => e.map(e => o.default.getApplication(e))) } function u(e) { return l(null != e ? [e] : [])[0] } }, 439849: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { cleanExecutablePath: function() { return E }, default: function() { return I } }), n("757143"), n("653041"); var r = n("392711"), s = n.n(r), a = n("579806"), o = n("710845"), l = n("358085"), u = n("998502"); let d = []; function _(e) { return e = e.toLowerCase(), (0, l.isWindows)() && (e = (e = e.replace(/^[a-z]:/, "")).replace(/\\/g, "/")), e } function c(e) { null != e && "" !== e && (!(e = _(e)).endsWith("/") && (e += "/"), d.push(e)) } function E(e) { e = _(e); let t = !1; return (d.forEach(n => { !t && e.startsWith(n) && (e = e.substr(n.length), t = !0) }), t) ? e = e.includes("dosbox.exe") ? e.split("/").slice(-3).join("/") : e.split("/").slice(-2).join("/") : null } async function I() { if (null != i) return i; try { await u.default.ensureModule("discord_game_utils"), i = await u.default.requireModule("discord_game_utils") } catch (e) { new o.default("GamesActionCreators").error("could not load discord_game_utils", e) } if ((0, l.isWindows)()) { let e = a.default.process.env; c(e.LOCALAPPDATA), c(e["PROGRAMFILES(X86)"]), c(e.PROGRAMFILES), c(e.PROGRAMW6432), c(e.PROGRAMDATA), c("/games/"), c("/steamlibrary/steamapps/common/") } let e = a.default.remoteApp.getPath; return c(await e("home")), c(await e("appData")), c(await e("desktop")), c(await e("documents")), c(await e("downloads")), (d = s().uniq(d)).sort((e, t) => t.length - e.length), i } }, 829968: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("470079"), r = n("439849"); function s(e, t) { let [n, s] = i.useState(); return i.useEffect(() => { if (null == e || null != t) { s(void 0); return }(0, r.default)().then(t => { null != t && t.identifyGame(e, (e, t) => { 0 === e && null != t.icon && "" !== t.icon && null != t.name && "" !== t.name && s("data:image/png;base64,".concat(t.icon)) }) }) }, [e, t]), null != t ? t : n } }, 202458: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-02_activity_react_reply", label: "Activity React Reply", defaultConfig: { enableActivityReactReply: !1 }, treatments: [{ id: 1, label: "Enable Activity React / Reply Buttons", config: { enableActivityReactReply: !0 } }] }); t.default = function() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return i.useExperiment({ location: "useIsEligibleForActivityReactReply" }, { autoTrackExposure: e }).enableActivityReactReply } }, 220779: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReactionPickerButton: function() { return C }, ReplyInput: function() { return p } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("685501"), l = n("481060"), u = n("410030"), d = n("541716"), _ = n("752305"), c = n("893718"), E = n("931651"), I = n("131704"), T = n("401227"), f = n("142550"), S = n("981631"), h = n("689938"), A = n("370577"); let m = (0, I.createChannelRecord)({ id: "1", type: S.ChannelTypes.DM }), N = r.forwardRef(function(e, t) { let { placeholder: n, headerText: r, onEnter: s, showPopout: o, children: d, hide: _ } = e, c = (0, u.default)(); return (0, i.jsx)(l.Popout, { align: "right", position: "bottom", shouldShow: o, disablePointerEvents: !1, renderPopout: () => (0, i.jsx)("div", { className: a()([A.reply, "theme-".concat(c)]), ref: t, children: (0, i.jsx)(l.FocusLock, { containerRef: t, children: (0, i.jsxs)("div", { children: [(0, i.jsx)(l.Text, { variant: "text-xs/bold", className: A.replyHeader, children: null != r ? r : h.default.Messages.CHAT }), (0, i.jsx)(p, { onEnter: e => { s(e), _() }, placeholder: null != n ? n : h.default.Messages.CHAT })] }) }) }), children: () => d }) }); function p(e) { let { placeholder: t, onEnter: n, setEditorRef: s, showEmojiButton: o = !1, renderAttachButton: l, onFocus: u, channel: E, className: I } = e, [T, S] = r.useState(""), [h, N] = r.useState((0, _.toRichValue)("")), p = () => { S(""), N((0, _.toRichValue)("")) }, O = d.ChatInputTypes.ATOMIC_REACTOR_REPLY_INPUT, C = r.useRef(null); return o && (O.emojis = { button: !0 }), (0, i.jsx)(c.default, { ref: C, placeholder: t, className: a()(A.replyInput, I), showRemainingCharsAfterCount: -1, allowNewLines: !1, maxCharacterCount: f.MAX_CHAR_COUNT, channel: null != E ? E : m, onChange: (e, t, n) => { S(t), N(n) }, type: O, textValue: T, richValue: h, onSubmit: e => { let { value: t } = e; return t.length > f.MAX_CHAR_COUNT ? Promise.resolve({ shouldClear: !1, shouldRefocus: !0 }) : (n(t), p(), Promise.resolve({ shouldClear: !0, shouldRefocus: !1 })) }, setEditorRef: s, focused: !0, onFocus: u, disableThemedBackground: !0, emojiPickerCloseOnModalOuterClick: !0, disabled: !1, autoCompletePosition: (() => { if (null == C.current) return "top"; let e = C.current.getBoundingClientRect(), t = window.innerHeight; return e.top < t / 2 ? "bottom" : "top" })(), renderAttachButton: l }) } let O = (e, t) => { r.useEffect(() => { let n = t => { "Escape" === t.key && e() }, i = n => { var i; null != n.target && !(null == t ? void 0 : null === (i = t.current) || void 0 === i ? void 0 : i.contains(null == n ? void 0 : n.target)) && e() }; return document.addEventListener("keydown", n), document.addEventListener("mousedown", i), () => { document.removeEventListener("keydown", n), document.removeEventListener("mousedown", i) } }, [e, t]) }, C = e => { let { onSelectEmoji: t, onClick: n } = e, s = (0, u.default)(), [a, o] = r.useState(!1), d = r.useRef(null); return O(() => o(!1), d), (0, i.jsx)(l.Popout, { align: "right", position: "top", shouldShow: a, disablePointerEvents: !1, renderPopout: () => (0, i.jsx)("div", { className: "theme-".concat(s), ref: d, children: (0, i.jsx)(E.ReactionPicker, { messageId: S.EMPTY_STRING_SNOWFLAKE_ID, channel: m, closePopout: () => { o(!1) }, onSelectEmoji: (e, n, i) => { null != e && (t(e, n, i), o(!1)) } }) }), children: () => (0, i.jsx)(l.Tooltip, { text: h.default.Messages.ADD_REACTION, children: e => (0, i.jsx)("div", { ...e, className: A.reaction, children: (0, i.jsx)(T.default, { active: !1, tabIndex: 0, onClick: () => { null == n || n(), o(!0) } }) }) }) }) }; t.default = e => { let { onInteraction: t, replyHeaderText: n, replyPlaceholder: s, showReact: u = !0, showReply: d = !0 } = e, [_, c] = r.useState(!1), E = r.useRef(null); return O(() => c(!1), E), (0, i.jsx)(i.Fragment, { children: (0, i.jsxs)("div", { className: A.reactions, children: [u && (0, i.jsx)(C, { onSelectEmoji: e => { null != e && t({ interactionType: f.AtomicReactorInteractionTypes.ReactSubmit, emoji: e, reply: null }) }, onClick: () => { t({ interactionType: f.AtomicReactorInteractionTypes.ReactBegin, emoji: null, reply: null }), c(!1) } }), d && (0, i.jsx)(N, { hide: () => c(!1), ref: E, headerText: n, placeholder: s, showPopout: _, onEnter: e => { t({ interactionType: f.AtomicReactorInteractionTypes.ReplySubmit, emoji: null, reply: e }) }, children: (0, i.jsx)(l.Tooltip, { text: h.default.Messages.MESSAGE_ACTION_REPLY, children: e => (0, i.jsx)("button", { ...e, className: a()(A.reaction, A.emojiButton), onClick: () => { t({ interactionType: f.AtomicReactorInteractionTypes.ReplyBegin, emoji: null, reply: null }), c(!0) }, children: (0, i.jsx)(o.ArrowAngleLeftUpIcon, {}) }) }) })] }) }) } }, 142550: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { AtomicReactorInteractionTypes: function() { return i }, MAX_CHAR_COUNT: function() { return s } }); let s = 200; (r = i || (i = {})).ReactBegin = "React Begin", r.ReplyBegin = "Reply Begin", r.ReactSubmit = "React Submit", r.ReplySubmit = "Reply Submit", r.ReactSend = "React Send", r.ReplySend = "Reply Send" }, 954017: function(e, t, n) { "use strict"; n.r(t), n.d(t, { sendReactionToActivity: function() { return A }, sendReplyToActivity: function() { return m } }); var i = n("512722"), r = n.n(i), s = n("493683"), a = n("726542"), o = n("122810"), l = n("503438"), u = n("693824"), d = n("690725"), _ = n("592125"), c = n("81063"), E = n("176354"), I = n("201133"), T = n("55000"), f = n("314091"), S = n("981631"), h = n("689938"); let A = async e => { let { reaction: t, altText: n, ...i } = e, r = await p(i); (0, I.sendReaction)({ file: r, altText: n, user: i.user, reaction: t }) }, m = async e => { let { reply: t, altText: n, ...i } = e, a = await p(i), o = await s.default.openPrivateChannel(i.user.id, !1, !1), l = _.default.getChannel(o); r()(null != l, "Channel cannot be null"), (0, I.sendReply)({ file: a, altText: n, channel: l, reply: t }) }, N = e => { var t; let { activity: i, application: r, user: s } = e, { theme: a } = (0, f.getProfileInfo)(s, "black"), o = "dark" === a, l = (0, f.getActivityPlatform)(i), { assets: u, application_id: d } = i, _ = (0, c.getAssetImage)(d, null == u ? void 0 : u.large_image, 64), I = null == r ? void 0 : r.getIconURL(64), T = null != l ? o ? l.icon.darkPNG : l.icon.lightPNG : i.type === S.ActivityTypes.PLAYING ? o ? n("414575") : n("807612") : null, h = i.type === S.ActivityTypes.HANG_STATUS && (null === (t = i.emoji) || void 0 === t ? void 0 : t.id) != null ? (0, E.getEmojiUrl)({ id: i.emoji.id, name: i.emoji.name, animated: !1 }) : null; return { ...null != T && { Platform: T }, ...null != _ && { AssetImage: _.includes("http") ? _ : require(_) }, ...null != I && { ApplicationImage: I }, ...null != h && { HangStatus: h } } }, p = async e => { let { user: t, activity: n, application: i, stream: r } = e, _ = await s.default.openPrivateChannel(t.id, !1, !1), c = N({ activity: n, application: i, user: t }); return await (0, d.generateImageFromCanvas)({ assetsToLoad: c, drawImage: e => { var i; e.setFont({ truncate: u.TextTruncationMethod.Truncate }), null != r ? v(e, n, t) : (0, l.default)(n) ? R(e, n, t) : (0, o.default)(n) && n.name === a.default.get(S.PlatformTypes.LEAGUE_OF_LEGENDS).name ? L(e, n, t) : n.type === S.ActivityTypes.HANG_STATUS ? g(e, n, t) : C(e, n, t), (null === (i = e.assetMap) || void 0 === i ? void 0 : i.has("Platform")) && e.drawImage("Platform", { x: T.canvasWidth - T.padding - T.platformSize, y: T.padding }, { w: T.platformSize, h: T.platformSize }) }, exportConfigs: { format: u.DiscordCanvasExporterOutputFormats.CloudUpload, quality: 1, fileName: "user-reacting-to-".concat(n.name, ".png").toLowerCase(), fileType: "png", channelId: _ } }) }, O = (e, t) => { e.setColor("dark" === t ? "white" : "black"), e.drawPath(T.ACTIVITY_IMAGE_FALLBACK_PATH, { x: T.padding, y: T.padding }, !0, 2 + 2 / 3) }, C = (e, t, n) => { var i, r, s; e.setSize({ w: T.canvasWidth, h: T.canvasHeight }); let { color: a, theme: o } = (0, f.getProfileInfo)(n, "black"); e.setColor(a), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), e.setColor("dark" === o ? "rgba(0, 0, 0, 0.8)" : "rgba(255, 255, 255, 0.7)"), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), (null === (i = e.assetMap) || void 0 === i ? void 0 : i.has("AssetImage")) ? e.drawRoundedImage("AssetImage", { x: T.padding, y: T.padding }, { w: T.activitySize, h: T.activitySize }, 8) : (null === (r = e.assetMap) || void 0 === r ? void 0 : r.has("ApplicationImage")) ? e.drawRoundedImage("ApplicationImage", { x: T.padding, y: T.padding }, { w: T.activitySize, h: T.activitySize }, 8) : O(e, o); let l = T.activitySize + T.padding + T.imagePadding; e.setColor("dark" === o ? "white" : "rgb(6, 6, 7)"), e.setFont({ size: 16, family: ["gg sans", "sans-serif"], weight: 700 }), e.drawText("".concat(t.name), { x: l, y: T.fontPadding + 1 * T.lineHeight, w: (null === (s = e.assetMap) || void 0 === s ? void 0 : s.has(T.AssetTypes.Platform)) ? T.titleMaxWidthPlatform : T.titleMaxWidthNoPlatform }, !0), null != t.timestamps && (e.setFont({ size: 14, weight: 400 }), e.drawText("for ".concat((0, f.howLong)(t.timestamps)), { x: l, y: T.fontPadding + 2 * T.lineHeight }, !0)) }, R = (e, t, n) => { var i, r; e.setSize({ w: T.canvasWidth, h: T.canvasHeight }); let { color: s, theme: a } = (0, f.getProfileInfo)(n, "black"); e.setColor(s), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), e.setColor("dark" === a ? "rgba(0, 0, 0, 0.8)" : "rgba(255, 255, 255, 0.7)"), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), (null === (i = e.assetMap) || void 0 === i ? void 0 : i.has("AssetImage")) && e.drawRoundedImage("AssetImage", { x: T.padding, y: T.padding }, { w: T.activitySize, h: T.activitySize }, 8); let o = T.activitySize + T.padding + T.imagePadding; e.setColor("dark" === a ? "white" : "rgb(6, 6, 7)"), e.setFont({ size: 14, family: ["gg sans", "sans-serif"], weight: 700 }), e.drawText("".concat(t.details), { x: o, y: T.fontPadding + 1 * T.lineHeight, w: (null === (r = e.assetMap) || void 0 === r ? void 0 : r.has(T.AssetTypes.Platform)) ? T.titleMaxWidthPlatform : T.titleMaxWidthNoPlatform }, !0), e.setFont({ size: 14, weight: 400 }), e.drawText("by ".concat(t.state), { x: o, y: T.fontPadding + 2 * T.lineHeight }, !0) }, g = (e, t, i) => { var r, s; e.setSize({ w: T.canvasWidth, h: T.canvasHeight }); let { color: a, theme: o } = (0, f.getProfileInfo)(i, "black"); e.setColor(a), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), e.setColor("dark" === o ? "rgba(0, 0, 0, 0.8)" : "rgba(255, 255, 255, 0.7)"), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), (null === (r = e.assetMap) || void 0 === r ? void 0 : r.has("HangStatus")) ? e.drawRoundedImage("HangStatus", { x: T.padding, y: T.padding }, { w: T.activitySize, h: T.activitySize }, 8) : O(e, o); let l = T.activitySize + T.padding + T.imagePadding; e.setColor("dark" === o ? "white" : "rgb(6, 6, 7)"), e.setFont({ size: 14, family: ["gg sans", "sans-serif"], weight: 700 }), e.drawText(h.default.Messages.STATUS_LEAD_IN_JUST, { x: l, y: T.fontPadding + 1 * T.lineHeight, w: (null === (s = e.assetMap) || void 0 === s ? void 0 : s.has(T.AssetTypes.Platform)) ? T.titleMaxWidthPlatform : T.titleMaxWidthNoPlatform }, !0), e.setFont({ size: 14, weight: 400 }); let u = ""; u = (0, n("833858").getHangStatusText)(t), e.drawText(u, { x: l, y: T.fontPadding + 2 * T.lineHeight }, !0) }, L = (e, t, n) => { var i; e.setSize({ w: T.canvasWidth, h: T.canvasHeight }); let { color: r, theme: s } = (0, f.getProfileInfo)(n, "black"); e.setColor(r), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), e.setColor("dark" === s ? "rgba(0, 0, 0, 0.8)" : "rgba(255, 255, 255, 0.7)"), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), e.setColor("dark" === s ? "white" : "black"), e.drawRoundedImage("AssetImage", { x: T.padding, y: T.padding }, { w: T.activitySize, h: T.activitySize }, 8) === u.DrawResultStatus.Failure && e.drawPath(T.ACTIVITY_IMAGE_FALLBACK_PATH, { x: T.padding, y: T.padding }, !0, 2 + 2 / 3); let a = T.activitySize + T.padding + T.imagePadding; e.setColor("dark" === s ? "white" : "rgb(6, 6, 7)"), e.setFont({ size: 14, family: ["gg sans", "sans-serif"], weight: 700 }), e.drawText("".concat(t.details), { x: a, y: T.fontPadding + 1 * T.lineHeight, w: (null === (i = e.assetMap) || void 0 === i ? void 0 : i.has("Platform")) ? T.titleMaxWidthPlatform : T.titleMaxWidthNoPlatform }, !0), e.setFont({ size: 14, weight: 400 }), e.drawText("".concat(t.state), { x: a, y: T.fontPadding + 2 * T.lineHeight }, !0) }, v = (e, t, n) => { var i, r, s; e.setSize({ w: T.canvasWidth, h: T.canvasHeight }); let { color: a, theme: o } = (0, f.getProfileInfo)(n, "black"); e.setColor(a), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), e.setColor("dark" === o ? "rgba(0, 0, 0, 0.8)" : "rgba(255, 255, 255, 0.7)"), e.drawRoundedRect({ x: 0, y: 0, h: T.canvasHeight, w: T.canvasWidth }, 8, !0), (null === (i = e.assetMap) || void 0 === i ? void 0 : i.has("AssetImage")) ? e.drawRoundedImage("AssetImage", { x: T.padding, y: T.padding }, { w: T.activitySize, h: T.activitySize }, 8) : (null === (r = e.assetMap) || void 0 === r ? void 0 : r.has("ApplicationImage")) ? e.drawRoundedImage("ApplicationImage", { x: T.padding, y: T.padding }, { w: T.activitySize, h: T.activitySize }, 8) : O(e, o); let l = T.activitySize + T.padding + T.imagePadding; e.setColor("dark" === o ? "white" : "rgb(6, 6, 7)"), e.setFont({ size: 16, family: ["gg sans", "sans-serif"], weight: 700 }), e.drawText("Streaming ".concat(t.name), { x: l, y: T.fontPadding + T.lineHeight * (null != t.timestamps ? 1 : 1.5), w: (null === (s = e.assetMap) || void 0 === s ? void 0 : s.has(T.AssetTypes.Platform)) ? T.titleMaxWidthPlatform : T.titleMaxWidthNoPlatform }, !0), null != t.timestamps && (e.setFont({ size: 14, weight: 500 }), e.drawText("for ".concat((0, f.howLong)(t.timestamps)), { x: l, y: T.fontPadding + 2 * T.lineHeight }, !0)) } }, 55e3: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ACTIVITY_IMAGE_FALLBACK_PATH: function() { return T }, AssetTypes: function() { return i }, activitySize: function() { return c }, canvasHeight: function() { return a }, canvasWidth: function() { return s }, fontPadding: function() { return u }, imagePadding: function() { return l }, lineHeight: function() { return d }, padding: function() { return o }, platformSize: function() { return _ }, titleMaxWidthNoPlatform: function() { return E }, titleMaxWidthPlatform: function() { return I } }); let s = 348, a = 88; (r = i || (i = {})).AssetImage = "AssetImage", r.ApplicationImage = "ApplicationImage", r.Platform = "Platform", r.StreamPreview = "StreamPreview", r.HangStatus = "HangStatus"; let o = 12, l = 12, u = 24, d = 16, _ = 24, c = 64, E = 335, I = 310, T = "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm6.81 7c-.54 0-1 .26-1.23.61A1 1 0 0 1 8.92 8.5 3.49 3.49 0 0 1 11.82 7c1.81 0 3.43 1.38 3.43 3.25 0 1.45-.98 2.61-2.27 3.06a1 1 0 0 1-1.96.37l-.19-1a1 1 0 0 1 .98-1.18c.87 0 1.44-.63 1.44-1.25S12.68 9 11.81 9ZM13 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm7-10.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0ZM18.5 20a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM7 18.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0ZM5.5 7a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" }, 314091: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getActivityAltText: function() { return h }, getActivityPlatform: function() { return f }, getProfileInfo: function() { return S }, howLong: function() { return T } }), n("47120"); var i = n("866442"), r = n("726542"), s = n("503438"), a = n("802856"), o = n("420660"), l = n("168631"), u = n("621853"), d = n("981631"), _ = n("689938"); let c = e => "".concat(e).length < 13 ? 1e3 * e : e, E = e => { let t = Date.now() / 1e3; return null != e.end ? I(t, c(e.end) / 1e3) : null != e.start ? I(c(e.start) / 1e3, t) : { hours: 0, minutes: 0, seconds: 0 } }, I = (e, t) => { let n = Math.max(t - e, 0); return { hours: Math.floor(n / 3600) % 24, minutes: Math.floor(n / 60) % 60, seconds: Math.floor(n) % 60 } }, T = e => { let t = E(e); return t.hours > 0 ? "".concat(t.hours, " hours") : t.minutes > 0 ? "".concat(t.minutes, " minutes") : "".concat(t.seconds, " seconds") }, f = e => (0, s.default)(e) ? r.default.get(d.PlatformTypes.SPOTIFY) : (0, a.default)(e) ? r.default.get(d.PlatformTypes.XBOX) : null != e.platform && [d.ActivityGamePlatforms.PS4, d.ActivityGamePlatforms.PS5].includes(e.platform) ? r.default.get(d.PlatformTypes.PLAYSTATION) : e.name === r.default.get(d.PlatformTypes.LEAGUE_OF_LEGENDS).name ? r.default.get(d.PlatformTypes.LEAGUE_OF_LEGENDS) : void(e.type, d.ActivityTypes.PLAYING), S = (e, t) => { var n; let r = u.default.getUserProfile(e.id), [s, a] = null !== (n = null == r ? void 0 : r.themeColors) && void 0 !== n ? n : [], o = (0, l.getProfileTheme)(s), d = null != a ? (0, i.int2hex)(a) : t; return { color: d, theme: d === t ? "dark" : o } }, h = (e, t) => (0, s.default)(t) ? _.default.Messages.ACTIVITY_REACTION_IMAGE_ALT_TEXT_SPOTIFY.format({ username: e.username, song: t.details, artist: t.state }) : t.type === d.ActivityTypes.PLAYING ? _.default.Messages.ACTIVITY_REACTION_IMAGE_ALT_TEXT_PLAYING.format({ username: e.username, activity: t.name }) : t.type === d.ActivityTypes.WATCHING ? _.default.Messages.ACTIVITY_REACTION_IMAGE_ALT_TEXT_WATCHING.format({ username: e.username, activity: t.name }) : t.type === d.ActivityTypes.LISTENING ? _.default.Messages.ACTIVITY_REACTION_IMAGE_ALT_TEXT_LISTENING.format({ username: e.username, activity: t.name }) : (0, o.default)(t) || t.type === d.ActivityTypes.STREAMING ? _.default.Messages.ACTIVITY_REACTION_IMAGE_ALT_TEXT_STREAMING.format({ username: e.username, activity: t.name }) : _.default.Messages.ACTIVITY_REACTION_IMAGE_ALT_TEXT_BASE.format({ username: e.username, activity: t.name }) }, 201133: function(e, t, n) { "use strict"; n.r(t), n.d(t, { sendReaction: function() { return I }, sendReply: function() { return T } }), n("411104"); var i = n("570140"), r = n("493683"), s = n("957730"), a = n("222677"), o = n("995774"), l = n("314897"), u = n("592125"), d = n("703558"), _ = n("62817"); let c = e => { let t = _.default.getFiles(e)[0]; return null == _.default.getMessageForFile(t.id) ? Promise.reject() : new Promise((e, n) => { let r = s => { s.file.id === t.id && (i.default.unsubscribe("UPLOAD_COMPLETE", r), i.default.unsubscribe("UPLOAD_FAIL", r), "UPLOAD_COMPLETE" === s.type ? e(s.messageRecord) : n(Error("Upload failed"))) }; i.default.subscribe("UPLOAD_COMPLETE", r), i.default.subscribe("UPLOAD_FAIL", r) }) }, E = async function(e, t) { var i; let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], a = arguments.length > 3 ? arguments[3] : void 0, o = arguments.length > 4 ? arguments[4] : void 0, _ = u.default.getChannel(t); if (i = l.default.getToken(), s.default.parse(_, ""), r); else { if (null == u.default.getChannel(t)) throw Error("AtomicReactor sendUtils: Couldn't resolve channel with id ".concat(t)); { let i = n("966390").default; e.description = a, await i.uploadFiles({ channelId: t, uploads: [e], draftType: d.DraftType.ChannelMessage, parsedMessage: o }) } } }, I = async e => { let { file: t, reaction: n, user: i, altText: s, requireConfirmation: l = !1 } = e, u = await r.default.openPrivateChannel(i.id, !1, !1); E(t, u, l, s); let d = await c(u); if (null != d) { let e = (0, o.toReactionEmoji)(n); await (0, a.addReaction)(u, d.id, e) } }, T = e => { let { file: t, reply: n, channel: i, altText: r, requireConfirmation: a = !1 } = e, o = s.default.parse(i, n); return E(t, i.id, a, r, o) } }, 159244: function(e, t, n) { "use strict"; n.r(t); var i = n("442837"), r = n("699516"), s = n("594174"), a = n("981631"); t.default = e => { let t = (0, i.useStateFromStores)([s.default], () => s.default.getCurrentUser()), n = (0, i.useStateFromStores)([r.default], () => r.default.getRelationshipType(e.id)), o = e.isNonUserBot(); return e.id !== (null == t ? void 0 : t.id) && n !== a.RelationshipTypes.BLOCKED && !o } }, 943881: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("411198"); let d = {}; class _ extends(a = o.default.Store) { getGuild(e) { return d[e] } } s = "AuthInviteStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { AUTH_INVITE_UPDATE: function(e) { let { invite: t } = e, n = t.guild; if (null == n) return !1; d[n.id] = (0, u.fromInviteGuild)(n) } }) }, 344532: function(e, t, n) { "use strict"; n.r(t), n("724458"); var i, r = n("442837"), s = n("570140"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = {}, l = null, u = null; function d(e, t) { null == t ? e in o && delete o[e] : null != e && (o[e] = t) } function _(e) { let { user: t } = e; u = t.id } class c extends(i = r.default.PersistedStore) { initialize(e) { null != e && (o = e) } requiredActions(e) { var t; return null !== (t = o[e]) && void 0 !== t ? t : null } requiredActionsIncludes(e, t) { let n = this.requiredActions(e); return null != n && t.reduce((e, t) => e || n.includes(t), !1) } wasLoginAttemptedInSession(e) { return l === e } getState() { return o } } a(c, "displayName", "LoginRequiredActionStore"), a(c, "persistKey", "LoginRequiredActionStore"), t.default = new c(s.default, { LOGIN_ATTEMPTED: function(e) { let { required_actions: t, user_id: n } = e; d(l = n, t) }, CONNECTION_OPEN: _, CURRENT_USER_UPDATE: _, LOGOUT: function(e) { let { isSwitchingAccount: t } = e; !t && null != u && d(u, null) }, PASSWORD_UPDATED: function(e) { let { userId: t } = e; d(t, null) }, MULTI_ACCOUNT_REMOVE_ACCOUNT: function(e) { let { userId: t } = e; d(t, null) } }) }, 882037: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setPromoEmailConsentChecked: function() { return s }, setPromoEmailConsentState: function() { return r }, usePromoEmailConsentStore: function() { return a } }); let i = (0, n("652874").default)(() => ({ required: !1, checked: !1, preChecked: !1 })), r = e => { i.setState(e) }, s = e => { i.setState({ checked: e }) }, a = i }, 858386: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LOGIN_REQUIRED_ACTIONS_MODAL_KEY: function() { return E } }), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("893776"), a = n("147913"), o = n("594174"), l = n("626135"), u = n("374023"), d = n("344532"), _ = n("981631"), c = n("231338"); let E = "LOGIN_REQUIRED_ACTIONS_MODAL_KEY"; class I extends a.default { handleConnectionOpen() { let e = o.default.getCurrentUser(); if (null == e || u.ProcessArgs.isDisallowPopupsSet()) return; let t = d.default.requiredActionsIncludes(e.id, [_.LoginRequiredActions.UPDATE_PASSWORD]); d.default.wasLoginAttemptedInSession(e.id) && t ? (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("48707")]).then(n.bind(n, "194530")); return function(t) { return (0, i.jsx)(e, { ...t, onSuccess: () => { l.default.track(_.AnalyticEvents.FORCED_UPDATE_PASSWORD_SUCCEEDED), t.onClose() }, onClose: () => { t.onClose(), s.default.logout(_.Routes.LOGIN) }, requirementsUpdated: !0 }) } }, { modalKey: E, onCloseRequest: c.NOOP_NULL, instant: !0 }) : t && s.default.logout(_.Routes.LOGIN) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: this.handleConnectionOpen }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new I }, 997383: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return g } }), n("724458"), n("47120"), n("757143"), n("773603"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("653041"); var i = n("392711"), r = n.n(i), s = n("302454"), a = n.n(s), o = n("675478"), l = n("131704"), u = n("601964"), d = n("709302"), _ = n("592125"), c = n("580005"), E = n("984933"), I = n("699516"), T = n("594174"), f = n("483360"), S = n("892880"), h = n("591759"), A = n("279779"), m = n("620490"), N = n("727785"), p = n("981631"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = Object.freeze({}); function R(e, t) { var n, i; if (!t.frecencyBoosters) return {}; let r = c.default.getFrequentlyWithoutFetchingLatest(), s = r.reduce((e, t) => { let { id: n } = t, i = c.default.getScoreWithoutFetchingLatest(n); return i > e ? i : e }, 0), a = []; switch (e) { case N.AutocompleterResultTypes.GUILD: a = r.filter(e => e instanceof u.default); break; case N.AutocompleterResultTypes.USER: a = r.filter(e => e instanceof l.ChannelRecordBase && e.type === p.ChannelTypes.DM); break; case N.AutocompleterResultTypes.GROUP_DM: a = r.filter(e => e instanceof l.ChannelRecordBase && e.isMultiUserDM()); break; case N.AutocompleterResultTypes.TEXT_CHANNEL: a = r.filter(e => e instanceof l.ChannelRecordBase && (0, l.isGuildSelectableChannelType)(e.type)); break; case N.AutocompleterResultTypes.VOICE_CHANNEL: a = r.filter(e => e instanceof l.ChannelRecordBase && e.isGuildVocal()) } let o = {}; for (let t of a) { let { id: n } = t, i = c.default.getScoreWithoutFetchingLatest(n); if (e === N.AutocompleterResultTypes.USER && t instanceof l.PrivateChannelRecord) { if (t.type === p.ChannelTypes.DM) o[n = t.getRecipientId()] = 1 + i / s; else if (t.type === p.ChannelTypes.GROUP_DM) { let e = t.recipients.length; for (let n of t.recipients) o[n] = 1 + i / s * (1 / e) } } else o[n] = 1 + i / s } for (let e of I.default.getFriendIDs()) o[e] = (null !== (n = o[e]) && void 0 !== n ? n : 1) + .2; for (let e of _.default.getDMUserIds()) o[e] = (null !== (i = o[e]) && void 0 !== i ? i : 1) + .1; return o } class g { createSearchContext() { null == this.userSearchContext && (this.userSearchContext = A.default.getSearchContext(this.parseUserResults, this._limit)) } setLimit(e) { let { userSearchContext: t } = this; this._limit = e, null != t && t.setLimit(e), this._userResults.length > this._limit && (this._userResults.length = this._limit), this._groupDMResults.length > this._limit && (this._groupDMResults.length = this._limit), this._textChannelResults.length > this._limit && (this._textChannelResults.length = this._limit), this._voiceChannelResults.length > this._limit && (this._voiceChannelResults.length = this._limit), this._guildResults.length > this._limit && (this._guildResults.length = this._limit), this._applicationResults.length > this._limit && (this._applicationResults.length = this._limit), this._linkResults.length > this._limit && (this._linkResults.length = this._limit) } setResultTypes(e) { this.resultTypes = null != e ? new Set(e) : null, this._userResults = this._include(N.AutocompleterResultTypes.USER) ? this._userResults : [], this._groupDMResults = this._include(N.AutocompleterResultTypes.GROUP_DM) ? this._groupDMResults : [], this._textChannelResults = this._include(N.AutocompleterResultTypes.TEXT_CHANNEL) ? this._textChannelResults : [], this._voiceChannelResults = this._include(N.AutocompleterResultTypes.VOICE_CHANNEL) ? this._voiceChannelResults : [], this._guildResults = this._include(N.AutocompleterResultTypes.GUILD) ? this._guildResults : [], this._applicationResults = this._include(N.AutocompleterResultTypes.APPLICATION) ? this._applicationResults : [], this._linkResults = this._include(N.AutocompleterResultTypes.LINK) ? this._linkResults : [] } _include(e) { return null == this.resultTypes || this.resultTypes.has(e) } _isAsyncSearch() { return this._include(N.AutocompleterResultTypes.USER) } setOptions(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; t ? this.options = { ...this.options, ...e } : this.options = e, null != this.options.blacklist ? this._userBlacklist = Array.from(this.options.blacklist).map(e => e.startsWith("user:") ? e.replace("user:", "") : "").filter(e => "" !== e) : this._userBlacklist = null } search(e, t) { if (this.query = e, "" === e.trim()) { this.clear(), this.updateAllResults(); return }(this.options.frecencyBoosters ? o.FrecencyUserSettingsActionCreators.loadIfNecessary() : Promise.resolve()).finally(() => { this.queryUsers(e, t, this._limit), this._groupDMResults = this.queryGroupDMs(e, this._limit), this._textChannelResults = this.queryTextChannels(e, this._limit), this._voiceChannelResults = this.queryVoiceChannels(e, this._limit), this._guildResults = this.queryGuilds(e, this._limit), this._applicationResults = this.queryApplications(e, this._limit), this._linkResults = this.queryLink(e, this._limit), this._isAsyncSearch() ? (clearTimeout(this._asyncTimeout), this._asyncTimeout = setTimeout(this.updateAllResults, 300)) : this.updateAllResults() }) } clear() { let { userSearchContext: e } = this; null != e && e.clearQuery(), this.results = [], this._userResults = [], this._groupDMResults = [], this._textChannelResults = [], this._voiceChannelResults = [], this._guildResults = [], this._applicationResults = [], this._linkResults = [] } clean() { this.clear(), this.destroy(), this.query = "", this.updateAllResults() } pause() { var e, t; null === (t = this.userSearchContext) || void 0 === t || null === (e = t.unsubscribe) || void 0 === e || e.call(t) } resume() { var e, t; null === (t = this.userSearchContext) || void 0 === t || null === (e = t.subscribe) || void 0 === e || e.call(t) } destroy() { let { userSearchContext: e } = this; null != e && (e.destroy(), this.userSearchContext = null) } queryTextChannels(e, t) { if (!this._include(N.AutocompleterResultTypes.TEXT_CHANNEL)) return []; let n = R(N.AutocompleterResultTypes.TEXT_CHANNEL, this.options), { blacklist: i } = this.options; return f.default.queryChannels({ query: e, guildId: null, limit: t, fuzzy: !0, filter: null != i ? e => !i.has("channel:".concat(e.id)) : void 0, boosters: n }) } queryVoiceChannels(e, t) { if (!this._include(N.AutocompleterResultTypes.VOICE_CHANNEL)) return []; let { voiceChannelGuildFilter: n } = this.options, i = R(N.AutocompleterResultTypes.VOICE_CHANNEL, this.options); return f.default.queryChannels({ query: e, guildId: n, limit: t, fuzzy: !0, type: E.GUILD_VOCAL_CHANNELS_KEY, boosters: i }) } queryGuilds(e, t) { if (!this._include(N.AutocompleterResultTypes.GUILD)) return []; let n = R(N.AutocompleterResultTypes.GUILD, this.options), { blacklist: i } = this.options; return f.default.queryGuilds({ query: e, limit: t, fuzzy: !0, filter: null != i ? e => !i.has("guild:".concat(e.id)) : void 0, boosters: n }) } queryUsers(e, t, n) { let { userSearchContext: i } = this; if (null == i || !this._include(N.AutocompleterResultTypes.USER)) return; let { userFilters: r } = this.options; void 0 !== t && S.default.requestMembers(t, e, 100), i.setLimit(n), i.setQuery(e, r, this._userBlacklist, R(N.AutocompleterResultTypes.USER, this.options)) } queryGroupDMs(e, t) { if (!this._include(N.AutocompleterResultTypes.GROUP_DM)) return []; let { blacklist: n } = this.options, i = R(N.AutocompleterResultTypes.GROUP_DM, this.options); return f.default.queryGroupDMs({ query: e, limit: t, fuzzy: !0, filter: null != n ? e => !n.has("channel:".concat(e.id)) : void 0, boosters: i }) } queryApplications(e, t) { return this._include(N.AutocompleterResultTypes.APPLICATION) ? f.default.queryApplications({ query: e, limit: t, fuzzy: !0 }) : [] } queryLink(e, t) { let n; if (!this._include(N.AutocompleterResultTypes.LINK)) return []; let i = a().sanitizeUrl(e); try { n = new URL(i) } catch (e) { return [] } let { pathname: r, hostname: s = "", host: o } = n, l = h.default.isDiscordHostname(s) || window.location.host === o; return null !== r && l && h.default.isAppRoute(r) ? [{ type: N.AutocompleterResultTypes.LINK, record: d.default.fromPath(r), score: 1 }] : [] } constructor(e, t, n = 100, i = C) { O(this, "query", ""), O(this, "options", C), O(this, "results", []), O(this, "_userResults", []), O(this, "_groupDMResults", []), O(this, "_textChannelResults", []), O(this, "_voiceChannelResults", []), O(this, "_guildResults", []), O(this, "_applicationResults", []), O(this, "_linkResults", []), O(this, "_asyncTimeout", void 0), O(this, "userSearchContext", void 0), O(this, "onResultsChange", void 0), O(this, "resultTypes", void 0), O(this, "_userBlacklist", null), O(this, "_limit", void 0), O(this, "parseUserResults", e => { let { results: t } = e; if (this._include(N.AutocompleterResultTypes.USER)) { for (let { id: e, score: n, comparator: i } of(this._userResults = [], t)) { let t = T.default.getUser(e); null != t && this._userResults.push({ type: N.AutocompleterResultTypes.USER, record: t, score: function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, t = arguments.length > 1 ? arguments[1] : void 0; return 1e3 * e * (null != t ? t : 1) }(n), comparator: null != i ? i : void 0 }) } this._userResults.length > this._limit && (this._userResults.length = this._limit), this.updateAllResults() } }), O(this, "updateAllResults", () => { clearTimeout(this._asyncTimeout), this.results = r()([...this._userResults, ...this._groupDMResults, ...this._textChannelResults, ...this._voiceChannelResults, ...this._guildResults, ...this._linkResults]).uniqBy(e => "".concat(e.type, "-").concat(e.record.id)).sort(m.default).value(), this.onResultsChange(this.results, this.query) }), this.onResultsChange = e, this.setOptions(i, !0), this._limit = n, this.createSearchContext(), this.setResultTypes(t) } } }, 727785: function(e, t, n) { "use strict"; var i, r, s, a, o, l; function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { AutocompleterQuerySymbols: function() { return s }, AutocompleterResultTypes: function() { return r }, FindResultDirections: function() { return i }, HeaderRecord: function() { return d } }); class d { constructor(e) { u(this, "id", void 0), u(this, "text", void 0), this.id = e, this.text = e } }(a = i || (i = {})).UP = "UP", a.DOWN = "DOWN", (o = r || (r = {})).GUILD = "GUILD", o.TEXT_CHANNEL = "TEXT_CHANNEL", o.GROUP_DM = "GROUP_DM", o.VOICE_CHANNEL = "VOICE_CHANNEL", o.USER = "USER", o.HEADER = "HEADER", o.APPLICATION = "APPLICATION", o.SKU = "SKU", o.LINK = "LINK", (l = s || (s = {})).USER = "@", l.TEXT_CHANNEL = "#", l.VOICE_CHANNEL = "!", l.GUILD = "*", l.APPLICATION = "$" }, 279779: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SearchContext: function() { return p } }), n("653041"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"), n("411104"), n("312677"), n("390547"); var i, r, s = n("392711"), a = n.n(s), o = n("153832"), l = n("147913"), u = n("131704"), d = n("592125"), _ = n("271383"), c = n("699516"), E = n("594174"), I = n("823379"), T = n("709054"), f = n("51144"); function S(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function h(e) { if (null == e || c.default.isBlocked(e.id)) return null; let t = { id: e.id, username: "0" !== e.discriminator ? "".concat(e.username, "#").concat(e.discriminator) : e.username }; return null != f.default.getGlobalName(e) && (t.globalName = e.globalName), e.bot && (t.isBot = !0), c.default.isFriend(e.id) && (t.isFriend = !0, t.friendNickname = c.default.getNickname(e.id)), t } function A(e, t, n) { null != e && (e[t] = null != n && "" !== n ? n : null) } function m(e) { let t = []; if (null == e || !(0, u.isPrivate)(e.type)) return t; let { recipients: n = [] } = e; return n.forEach(n => { let i = h(E.default.getUser(n)); null != e && A(i, e.id), t.push(i) }), t } function N(e, t) { let n = []; return e.forEach(e => { let i = h(e.user); null != i && (A(i, t, e.nick), n.push(i)) }), n }(r = i || (i = {})).UPDATE_USERS = "UPDATE_USERS", r.USER_RESULTS = "USER_RESULTS", r.QUERY_SET = "QUERY_SET", r.QUERY_CLEAR = "QUERY_CLEAR"; class p { setLimit(e) { this._limit = e, null != this._nextQuery && (this._nextQuery.limit = e) } subscribe() { null != this._worker && !this._subscribed && (this._worker.addEventListener("message", this.handleMessages, !1), this._subscribed = !0, this._setNextQuery()) } unsubscribe() { null != this._worker && this._subscribed && (this._worker.removeEventListener("message", this.handleMessages, !1), this._subscribed = !1) } destroy() { this.clearQuery(), this.unsubscribe() } clearQuery() { this._currentQuery = !1, this._nextQuery = null, null != this._worker && this._subscribed && this._worker.postMessage({ uuid: this._uuid, type: "QUERY_CLEAR" }) } setQuery(e, t, n, i) { null != e && (this._nextQuery = { query: e, filters: t, blacklist: n, boosters: null != i ? i : {}, limit: this._limit }, this._setNextQuery()) } _setNextQuery() { (null == this._currentQuery || !1 === this._currentQuery) && null != this._nextQuery && (null != this._worker && this._subscribed ? (this._currentQuery = this._nextQuery, this._nextQuery = null, this._worker.postMessage({ uuid: this._uuid, type: "QUERY_SET", payload: this._currentQuery })) : !this._subscribed && this.subscribe()) } constructor(e, t, n = 10) { S(this, "_worker", void 0), S(this, "_uuid", void 0), S(this, "_callback", void 0), S(this, "_limit", void 0), S(this, "_currentQuery", void 0), S(this, "_nextQuery", void 0), S(this, "_subscribed", void 0), S(this, "handleMessages", e => { let t = e.data; null != t && "USER_RESULTS" === t.type && t.uuid === this._uuid && (!1 !== this._currentQuery && this._callback(t.payload), null != this._currentQuery && (this._currentQuery = null), this._setNextQuery()) }), this._worker = e, this._uuid = (0, o.v4)(), this._callback = t, this._limit = n, this._currentQuery = null, this._nextQuery = null, this._subscribed = !1, this.subscribe() } } class O extends l.default { _initialize() { this.rebootWebworker() } _terminate() { null != this._worker && (this._worker.terminate(), this._worker = null) } rebootWebworker() { null != this._worker && (this._worker.terminate(), this._worker = null), this._worker = new Worker(new URL(n.p + n.u("561"), n.b)) } updateUsers(e) { let { _worker: t } = this; null != t && (e = e.filter(I.isNotNullish), t.postMessage({ type: "UPDATE_USERS", payload: e })) } getSearchContext(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 10; this.initialize(); let { _worker: n } = this; if (null == n) throw Error("SearchContextManager: No webworker initialized"); return new p(n, e, t) } constructor(...e) { super(...e), S(this, "_worker", void 0), S(this, "actions", { LOGOUT: () => this._handleLogout(), POST_CONNECTION_OPEN: () => this._handleConnectionOpen(), CONNECTION_OPEN_SUPPLEMENTAL: e => this._handleConnectionOpenSupplemental(e), OVERLAY_INITIALIZE: e => this._handleOverlayInitialize(e), CURRENT_USER_UPDATE: e => this._handleCurrentUserUpdate(e), GUILD_CREATE: e => this._handleGuildCreate(e), GUILD_MEMBERS_CHUNK_BATCH: e => this._handleGuildMembersChunkBatch(e), GUILD_MEMBER_ADD: e => this._handleGuildMemberUpdate(e), GUILD_MEMBER_UPDATE: e => this._handleGuildMemberUpdate(e), RELATIONSHIP_ADD: e => this._handleRelationshipAdd(e), RELATIONSHIP_UPDATE: e => this._handleRelationshipUpdate(e), RELATIONSHIP_REMOVE: e => this._handleRelationshipRemove(e), CHANNEL_CREATE: e => this._handleDMCreate(e), CHANNEL_UPDATES: e => this._handleDMUpdates(e), CHANNEL_RECIPIENT_ADD: e => this._handleRecipientChanges(e), PASSIVE_UPDATE_V2: e => this._handlePassiveUpdateV2(e) }), S(this, "_handleLogout", () => { this.rebootWebworker() }), S(this, "_handleConnectionOpen", () => { setTimeout(() => { let e = E.default.getCurrentUser(); if (null == e) return; let t = h(e), n = { [t.id]: t }; Object.values(E.default.getUsers()).forEach(e => { n[e.id] = h(e) }); let i = _.default.getMutableAllGuildsAndMembers(); for (let e in i) for (let t in i[e]) { var r, s; let a = n[t], o = null !== (s = null === (r = i[e][t]) || void 0 === r ? void 0 : r.nick) && void 0 !== s ? s : f.default.getGlobalName(a); null != a && (a[e] = null != o && "" !== o ? o : null) } this.updateUsers(Object.values(n)) }, 3e3) }), S(this, "_handleConnectionOpenSupplemental", e => { let { guilds: t } = e; setTimeout(() => { let e = a().flatMap(t, e => N(e.members, e.id)); this.updateUsers(e) }, 3e3) }), S(this, "_handleOverlayInitialize", e => { let { users: t, guildMembers: n } = e, i = new Map; for (let e of t) i.set(e.id, h(e)); for (let e of T.default.keys(n)) { let t = n[e]; if (null != t) for (let n of T.default.keys(t)) { let r = i.get(n), s = t[n]; null != r && null != s && null != s.nick && (A(r, e, s.nick), i.set(n, r)) } } this.updateUsers(Array.from(i.values())), i.clear() }), S(this, "_handleCurrentUserUpdate", e => { let { user: t } = e, n = h(t); null != n && this.updateUsers([n]) }), S(this, "_handleGuildCreate", e => { let { guild: t } = e, { members: n } = t; this.updateUsers(N(n, t.id)) }), S(this, "_handleGuildMembersChunkBatch", e => { let { chunks: t } = e, n = []; for (let e of t) n.push(...N(e.members, e.guildId)); this.updateUsers(n) }), S(this, "_handleGuildMemberUpdate", e => { let { guildId: t, user: n, nick: i } = e, r = h(n); null != r && (A(r, t, i), this.updateUsers([r])) }), S(this, "_handlePassiveUpdateV2", e => { this.updateUsers(N(e.members, e.guildId)) }), S(this, "_handleRelationshipAdd", e => { let t = h(e.relationship.user); this.updateUsers([t]) }), S(this, "_handleRelationshipUpdate", e => { let t = h(E.default.getUser(e.relationship.id)); this.updateUsers([t]) }), S(this, "_handleRelationshipRemove", e => { let t = h(E.default.getUser(e.relationship.id)); this.updateUsers([t]) }), S(this, "_handleDMCreate", e => { let { channel: { id: t } } = e, n = m(d.default.getChannel(t)); if (0 === n.length) return; let i = h(E.default.getCurrentUser()); A(i, t), n.push(i), this.updateUsers(n) }), S(this, "_handleDMUpdates", e => { let { channels: t } = e; for (let e of t) { let t = m(d.default.getChannel(e.id)); if (0 === t.length) continue; let n = h(E.default.getCurrentUser()); A(n, e.id), t.push(n), this.updateUsers(t) } }), S(this, "_handleRecipientChanges", e => { let { channelId: t, user: n, isMember: i } = e; if (!i) return; let r = h(n); A(r, t), this.updateUsers([r]) }) } } t.default = new O }, 568547: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createHeaderResult: function() { return r } }); var i = n("727785"); function r(e) { return { type: i.AutocompleterResultTypes.HEADER, record: new i.HeaderRecord(e), score: 0 } } }, 938078: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("933557"), r = n("592125"), s = n("699516"), a = n("594174"), o = n("727785"), l = n("981631"); function u(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : r.default, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : a.default, u = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : s.default, d = t.getChannel(e); if (null == d) return null; let _ = (0, i.computeChannelName)(d, n, u); switch (d.type) { case l.ChannelTypes.DM: { let e = n.getUser(d.getRecipientId()); if (null == e) return null; return { type: o.AutocompleterResultTypes.USER, record: e, score: 0, comparator: _ } } case l.ChannelTypes.GROUP_DM: return { type: o.AutocompleterResultTypes.GROUP_DM, record: d, score: 0, comparator: _ }; case l.ChannelTypes.GUILD_VOICE: case l.ChannelTypes.GUILD_STAGE_VOICE: return { type: o.AutocompleterResultTypes.VOICE_CHANNEL, record: d, score: 0, comparator: _ }; default: return { type: o.AutocompleterResultTypes.TEXT_CHANNEL, record: d, score: 0, comparator: _ } } } }, 518454: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return function e(t, n, r, s) { let { length: a } = r, o = s, l = n; if (0 === a) return 0; if (null == o) o = l; else if (o === l) return l; return (l += t === i.FindResultDirections.UP ? -1 : 1) < 0 || l >= a ? e(t, l < 0 ? a : -1, r, o) : r[l].type === i.AutocompleterResultTypes.HEADER ? e(t, l, r, o) : l } } }); var i = n("727785") }, 212819: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createHeaderResult: function() { return s.createHeaderResult }, findNextSelectedResult: function() { return a.default } }); var i = n("997383"), r = n("727785"); n.es(r, t); var s = n("568547"), a = n("518454"); n("620490"), t.default = i.default }, 220082: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I }, maybeFetchColors: function() { return c }, useAvatarColors: function() { return T }, useColorStore: function() { return _ } }), n("47120"); var i = n("470079"), r = n("979590"), s = n.n(r), a = n("652874"), o = n("442837"), l = n("607070"), u = n("302221"), d = n("956664"); let _ = (0, a.default)(() => ({ palette: {}, fetching: {} })); async function c(e) { null == _.getState().palette[e] && await E(e) } async function E(e) { if (!_.getState().fetching[e]) { _.setState(t => ({ fetching: { ...t.fetching, [e]: !0 } })); try { let t = await (0, d.getPaletteForAvatar)(e), n = (0, u.getComplimentaryPaletteForColor)(t[0]); _.setState(i => ({ fetching: { ...i.fetching, [e]: !1 }, palette: { ...i.palette, [e]: [...t.slice(0, 2), ...n] } })) } catch (t) { _.setState(t => ({ fetching: { ...t.fetching, [e]: !1 } })) } } } function I(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], [i] = T(e, t, n); return i } function T(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], r = _(t => null == e ? void 0 : t.palette[e]), a = (0, o.useStateFromStores)([l.default], () => n && l.default.desaturateUserColors ? l.default.saturation : 1); i.useEffect(() => { null != e && null == r && E(e) }, [e, r]); let u = i.useMemo(() => null == r ? void 0 : r.map(e => { let [t, n, i] = e, { h: r, s: o, l } = s()({ r: t, g: n, b: i }).toHsl(); return s()({ h: r, s: o * a, l }).toHexString() }), [r, a]); return null != u ? u : [t, t] } }, 419061: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AvatarDecorationBorderSizes: function() { return s }, DECORATION_TO_AVATAR_RATIO: function() { return r } }); var i = n("182294"); let r = 1.2, s = { [i.AvatarSizes.SIZE_56]: 4, [i.AvatarSizes.SIZE_80]: 6, [i.AvatarSizes.SIZE_120]: 8 } }, 864106: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hasGlobalDefaultAvatarDecoration: function() { return o }, isAnimatedAvatarDecoration: function() { return r }, isEqualAvatarDecoration: function() { return a }, parseAvatarDecorationData: function() { return s } }); var i = n("392711"); let r = e => e.split("_", 2).includes("a"), s = e => "object" == typeof e && null != e && "asset" in e && "string" == typeof e.asset ? "sku_id" in e && "string" == typeof e.sku_id ? { asset: e.asset, skuId: e.sku_id } : "skuId" in e && "string" == typeof e.skuId ? { asset: e.asset, skuId: e.skuId } : { asset: e.asset } : null, a = (e, t) => null == e || null == t ? e === t : (0, i.isEqual)(s(e), s(t)), o = (e, t) => { var n; return null != t && (null == e ? void 0 : null === (n = e.avatarDecoration) || void 0 === n ? void 0 : n.asset) != null } }, 439959: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NONE_ITEM: function() { return E }, SHOP_ITEM: function() { return I }, Section: function() { return i } }), n("47120"), n("724458"), n("653041"); var i, r, s = n("470079"), a = n("399606"), o = n("597688"), l = n("1870"), u = n("884697"), d = n("594174"), _ = n("74538"), c = n("689938"); (r = i || (i = {})).PURCHASE = "purchase", r.PREMIUM_PURCHASE = "premium_purchase", r.PREVIEW = "preview", r.PREMIUM_PREVIEW = "premium_preview"; let E = { id: "None" }, I = { id: "Shop" }; t.default = () => { let e = (0, a.useStateFromStores)([d.default], () => d.default.getCurrentUser()), t = _.default.canUseCollectibles(e), n = (0, a.useStateFromStores)([l.default], () => l.default.purchases), [i, r] = (0, a.useStateFromStoresArray)([o.default], () => [o.default.categories, o.default.products]); return (0, s.useMemo)(() => { let e = (0, u.getAvatarDecorations)(n, i).reduce((e, i) => { let s = n.get(i.skuId), a = (0, u.isPremiumCollectiblesPurchase)(s); return (a && 0 === e.premium_purchase.length && (e.premium_purchase = e.premium_preview, e.premium_preview = []), a) ? (e.premium_purchase.push(i), e) : null != s ? (e.purchase.push(i), e) : !t && (0, u.isPremiumCollectiblesProduct)(r.get(i.skuId)) ? ((e.premium_purchase.length > 0 ? e.premium_purchase : e.premium_preview).push(i), e) : (e.preview.push(i), e) }, { purchase: [], premium_purchase: [], preview: [], premium_preview: [] }); return [{ section: "purchase", items: [E, I, ...e.purchase], height: 12, header: c.default.Messages.CHANGE_DECORATION_MODAL_PURCHASE_HEADER }, { section: e.premium_purchase.length > 0 ? "premium_purchase" : "premium_preview", items: e.premium_purchase.length > 0 ? e.premium_purchase : e.premium_preview, height: 12, header: c.default.Messages.CHANGE_DECORATION_MODAL_PREMIUM_STARTER_HEADER }, { section: "preview", items: e.preview, height: 12, header: c.default.Messages.PROFILE_EFFECT_MODAL_SHOP_PREVIEW_HEADER }].filter(e => { let { items: t } = e; return t.length > 0 }) }, [i, r, n, t]) } }, 235400: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return v } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("979554"), a = n("442837"), o = n("481060"), l = n("100527"), u = n("906732"), d = n("335131"), _ = n("884697"), c = n("449217"), E = n("223143"), I = n("311395"), T = n("197115"), f = n("166625"), S = n("594174"), h = n("626135"), A = n("74538"), m = n("864106"), N = n("240781"), p = n("818611"), O = n("981631"), C = n("474936"), R = n("689938"), g = n("45538"); function L(e) { let { user: t, categories: n, purchases: s, analyticsLocations: a, onClose: u, initialSelectedDecoration: E, initialSelectedDecorationId: S, isTryItOutFlow: h, guild: O } = e, { pendingAvatarDecoration: L, setPendingAvatarDecoration: v, savedAvatarDecoration: D } = (0, f.default)({ analyticsLocations: a, isTryItOut: h, guildId: null == O ? void 0 : O.id }), [M, y] = r.useState(() => { var e, t; if (null != E) return E; let i = (0, _.getAvatarDecorations)(s, n); return null != S ? null !== (e = i.find(e => e.id === S)) && void 0 !== e ? e : null : void 0 !== L ? L : null == D ? null : null !== (t = i.find(e => (0, m.isEqualAvatarDecoration)(e, D))) && void 0 !== t ? t : null }), { product: P, purchase: U } = (0, c.default)(null == M ? void 0 : M.skuId), b = A.default.canUseCollectibles(t), G = r.useRef(null), w = (0, I.default)(a), k = (0, m.isEqualAvatarDecoration)(M, void 0 === L ? D : L), B = () => { v(M), u() }, V = r.useCallback(e => { u(), (0, d.openCollectiblesShop)({ analyticsLocations: a, analyticsSource: l.default.EDIT_AVATAR_DECORATION_MODAL, initialProductSkuId: e }) }, [a, u]); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)(o.ModalHeader, { separator: !1, className: g.modalHeader, children: [(0, i.jsx)(o.Heading, { variant: "heading-lg/semibold", children: R.default.Messages.USER_SETTINGS_CHANGE_AVATAR_DECORATION }), (0, i.jsx)(o.ModalCloseButton, { className: g.modalCloseButton, onClick: u })] }), (0, i.jsxs)(o.ModalContent, { className: g.modalContent, scrollbarType: "none", children: [(0, i.jsx)(p.default, { user: t, guild: O, pendingAvatarDecoration: M, selectedAvatarDecorationRef: G, onSelect: e => { y(e), null != e && w(e) }, onOpenShop: V }), (0, i.jsx)(N.default, { className: g.modalPreview, user: t, guildId: null == O ? void 0 : O.id, avatarDecorationOverride: M })] }), (0, i.jsxs)(o.ModalFooter, { className: g.modalFooter, children: [null != U && (!(0, _.isPremiumCollectiblesPurchase)(U) || b) || null === M ? (0, i.jsx)(o.Button, { onClick: B, disabled: k, children: R.default.Messages.AVATAR_DECORATION_MODAL_APPLY }) : null == U && (b || !(0, _.isPremiumCollectiblesProduct)(P)) ? (0, i.jsx)(o.Button, { className: g.modalFooterShopButton, onClick: () => V(null == P ? void 0 : P.skuId), children: R.default.Messages.COLLECTIBLES_CTA_GO_TO_SHOP }) : (0, i.jsx)(T.default, { subscriptionTier: C.PremiumSubscriptionSKUs.TIER_2, buttonText: A.default.isPremium(t) ? R.default.Messages.USER_SETTINGS_CUSTOMIZATION_UPGRADE_UPSELL : R.default.Messages.USER_SETTINGS_CUSTOMIZATION_UPSELL }), (0, i.jsx)(o.Button, { look: o.Button.Looks.LINK, color: o.Button.Colors.PRIMARY, onClick: u, children: R.default.Messages.CANCEL })] })] }) } function v(e) { let { transitionState: t, analyticsLocations: n, onClose: _, onCloseModal: c, initialSelectedDecoration: I, initialSelectedDecorationId: T, isTryItOutFlow: f, guild: A } = e, m = (0, a.useStateFromStores)([S.default], () => S.default.getCurrentUser()), { analyticsLocations: N } = (0, u.default)(n, l.default.EDIT_AVATAR_DECORATION_MODAL), { categories: p, purchases: C, isFetchingCategories: R, isFetchingPurchases: v } = (0, E.default)(), D = R || v && 0 === C.size; return r.useEffect(() => { h.default.track(O.AnalyticEvents.OPEN_MODAL, { type: "Edit Avatar Decoration Modal", location_stack: N }) }, [N]), r.useEffect(() => () => { (0, d.setCollectiblesCategoryItemsViewed)({ categories: [...p.values()], itemTypes: [s.CollectiblesItemType.AVATAR_DECORATION] }) }, [p]), null == m ? null : (0, i.jsx)(u.AnalyticsLocationProvider, { value: N, children: (0, i.jsx)(o.ModalRoot, { transitionState: t, className: g.modal, size: D ? o.ModalSize.DYNAMIC : o.ModalSize.MEDIUM, children: D ? (0, i.jsx)(o.Spinner, { className: g.spinner, type: o.Spinner.Type.SPINNING_CIRCLE }) : (0, i.jsx)(L, { user: m, guild: A, categories: p, purchases: C, analyticsLocations: N, initialSelectedDecoration: I, initialSelectedDecorationId: T, onClose: () => { c(), null == _ || _() }, isTryItOutFlow: f }) }) }) } }, 240781: function(e, t, n) { "use strict"; n.r(t), n("627341"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("278074"), o = n("442837"), l = n("481060"), u = n("884697"), d = n("449217"), _ = n("706454"), c = n("158776"), E = n("74538"), I = n("204418"), T = n("689938"), f = n("959547"); let S = [{ avatarSize: l.AvatarSizes.SIZE_40, showStatus: !1 }, { avatarSize: l.AvatarSizes.SIZE_32, showStatus: !1 }, { avatarSize: l.AvatarSizes.SIZE_40, showStatus: !0 }, { avatarSize: l.AvatarSizes.SIZE_32, showStatus: !0 }], h = e => { let { purchase: t } = e, n = (0, o.useStateFromStores)([_.default], () => _.default.locale), r = (0, u.isPremiumCollectiblesPurchase)(t); return (0, i.jsxs)("div", { className: f.purchaseInfo, children: [(0, i.jsx)(l.Text, { variant: "text-sm/semibold", color: "header-primary", children: t.name }), (0, i.jsx)(l.Text, { variant: "text-sm/normal", children: t.summary }), (0, i.jsxs)(l.Text, { variant: "text-xxs/normal", color: "text-muted", children: [T.default.Messages.COLLECTIBLES_ACQUIRED_DATE.format({ date: t.purchasedAt.toLocaleDateString(n, { month: "long", year: "numeric" }) }), r && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("br", {}), T.default.Messages.CHANGE_DECORATION_MODAL_STARTER_DESC] })] })] }) }; t.default = e => { let { user: t, guildId: n, avatarDecorationOverride: r, className: _ } = e, A = (0, o.useStateFromStores)([c.default], () => c.default.getStatus(t.id)), { product: m, purchase: N } = (0, d.default)(null == r ? void 0 : r.skuId), p = E.default.canUseCollectibles(t), O = (0, u.isPremiumCollectiblesPurchase)(N), C = (0, u.isPremiumCollectiblesProduct)(m), R = !p && O; return null != m && (null == N || R) ? (0, i.jsxs)("div", { className: s()(f.modalPreview, f.shopPreviewContainer, _), children: [(0, i.jsx)("div", { className: f.shopPreviewBanner, children: (0, i.jsx)(I.default, { user: t, guildId: n, avatarDecorationOverride: r }) }), (0, i.jsxs)("div", { className: f.shopPreviewTextContainer, children: [(0, i.jsx)(l.Text, { variant: "text-sm/semibold", children: m.name }), (0, i.jsx)(l.Text, { variant: "text-sm/normal", children: R ? T.default.Messages.CHANGE_DECORATION_MODAL_PREVIEW_STARTER_CHURNED : (0, a.match)([C, p]).with([!0, !0], () => T.default.Messages.CHANGE_DECORATION_MODAL_PREVIEW_STARTER_PREMIUM).with([!0, !1], () => T.default.Messages.CHANGE_DECORATION_MODAL_PREVIEW_STARTER).otherwise(() => T.default.Messages.CHANGE_DECORATION_MODAL_PREVIEW_PURCHASE_PREMIUM) })] })] }) : (0, i.jsxs)("div", { className: s()(f.modalPreview, _), children: [(0, i.jsxs)("div", { className: f.previewSections, children: [(0, i.jsx)("div", { className: f.decorationPreview, children: (0, i.jsx)(I.default, { user: t, guildId: n, avatarDecorationOverride: r }) }), (0, i.jsx)("div", { className: f.smallDecorationPreviewsContainer, children: S.map(e => { let { avatarSize: s, showStatus: a } = e; return (0, i.jsx)("div", { className: f.smallDecorationPreview, children: (0, i.jsx)(I.default, { user: t, guildId: n, avatarSize: s, avatarDecorationOverride: r, status: a ? A : void 0, "aria-hidden": !0 }) }, "".concat(s).concat(a)) }) })] }), null != N && (0, i.jsx)(h, { purchase: N })] }) } }, 204418: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("204197"), a = n("998502"), o = n("689938"); let l = a.default.getEnableHardwareAcceleration() ? r.AnimatedAvatar : r.Avatar; t.default = e => { let { user: t, guildId: n, avatarDecorationOverride: a, status: u, avatarSize: d = r.AvatarSizes.SIZE_120, "aria-hidden": _ = !1, className: c, animateOnHover: E = !1 } = e, { avatarDecorationSrc: I, avatarSrc: T, eventHandlers: f } = (0, s.default)({ user: t, guildId: n, size: d, showPending: !0, avatarDecorationOverride: a, animateOnHover: E }); return (0, i.jsx)(l, { avatarDecoration: I, src: T, size: d, status: u, "aria-label": _ ? void 0 : o.default.Messages.USER_SETTINGS_AVATAR, "aria-hidden": _, className: c, ...f }) } }, 818611: function(e, t, n) { "use strict"; n.r(t), n("627341"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("278074"), l = n("831209"), u = n("399606"), d = n("481060"), _ = n("727637"), c = n("597688"), E = n("884697"), I = n("126900"), T = n("466111"), f = n("783014"), S = n("242411"), h = n("26290"), A = n("74538"), m = n("864106"), N = n("439959"), p = n("125988"), O = n("689938"), C = n("166253"); let R = () => 80, g = e => { let { children: t, className: n, onSelect: r, isSelected: s = !1, ...o } = e; return (0, i.jsx)(d.Clickable, { className: a()(C.decorationGridItem, s ? C.selected : void 0, n), ...o, onClick: r, children: t }) }, L = e => { let { user: t, avatarDecoration: n, innerRef: s, section: a, isSelected: o = !1, ...d } = e, I = (0, u.useStateFromStores)([c.default], () => { let e = c.default.getProduct(n.skuId); return (0, E.isPremiumCollectiblesProduct)(e) }), f = (0, E.isProductNew)(n.skuId), m = A.default.canUseCollectibles(t), R = a === N.Section.PREMIUM_PURCHASE && !m, L = r.useRef(null), v = (0, _.default)(null != s ? s : L), { avatarDecorationSrc: D } = (0, p.default)({ user: t, avatarDecorationOverride: n, size: 80, animateOnHover: !v }); return (0, i.jsxs)(g, { className: R ? C.decorationGridItemChurned : void 0, innerRef: null != s ? s : L, isSelected: o, ...d, children: [(0, i.jsx)("img", { className: C.presetDecorationImg, src: D, alt: n.label }), a === N.Section.PURCHASE || a === N.Section.PREMIUM_PURCHASE && m ? null : f ? (0, i.jsx)(h.PremiumBadge, { className: C.newBadge, text: (0, i.jsxs)("div", { className: C.newBadgeText, children: [(0, i.jsx)(S.default, { width: 12, height: 12 }), O.default.Messages.NEW] }) }) : (0, i.jsx)(h.IconBadge, { icon: I ? () => (0, i.jsx)(T.default, { width: 14, height: 14 }) : () => (0, i.jsx)(S.default, { width: 12, height: 12 }), color: l.default.BACKGROUND_ACCENT, className: C.iconBadge })] }) }; t.default = e => { let { user: t, guild: n, pendingAvatarDecoration: s, selectedAvatarDecorationRef: a, onSelect: l, onOpenShop: u } = e, _ = (0, N.default)(), c = r.useCallback(() => { u(void 0) }, [u]); return (0, i.jsx)(d.MasonryList, { fade: !0, className: C.list, columns: 3, sections: _.map(e => { let { items: t } = e; return t.length }), sectionGutter: 16, itemGutter: 12, paddingHorizontal: 12, paddingVertical: 0, removeEdgeItemGutters: !0, renderItem: (e, r, u, E) => { let { section: T, items: S } = _[e]; return (0, o.match)(S[r]).with(N.NONE_ITEM, () => (0, i.jsxs)(g, { style: { ...u }, isSelected: null === s, onSelect: () => l(null), children: [(0, i.jsx)(f.default, { className: C.notAllowedIcon }), (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "header-primary", children: (0, m.hasGlobalDefaultAvatarDecoration)(t, n) ? O.default.Messages.USER_SETTINGS_REMOVE_PER_GUILD_AVATAR_DECORATION : O.default.Messages.NONE })] }, E)).with(N.SHOP_ITEM, () => (0, i.jsxs)(g, { style: u, onSelect: c, children: [(0, i.jsx)(I.default, { className: C.shopIcon }), (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "header-primary", children: O.default.Messages.COLLECTIBLES_SHOP })] }, E)).otherwise(e => { let n = (null == s ? void 0 : s.id) === e.id; return (0, i.jsx)(L, { style: { ...u }, user: t, avatarDecoration: e, section: T, innerRef: n ? a : void 0, isSelected: n, onSelect: () => l(e) }, E) }) }, renderSection: e => { let { header: t } = _[e]; return (0, i.jsx)("div", { className: C.headings, children: (0, i.jsx)(d.HeadingLevel, { forceLevel: 5, children: (0, i.jsx)(d.Heading, { variant: "eyebrow", color: "header-secondary", children: t }) }) }) }, getSectionHeight: e => _[e].height, getItemKey: (e, t) => _[e].items[t].id, getItemHeight: R }) } }, 1585: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getDecorationSizeForAvatarSize: function() { return l }, openAvatarDecorationModal: function() { return u } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("703656"); n("956664"); var a = n("419061"), o = n("981631"); function l(e) { return "number" != typeof e ? (0, r.getAvatarSize)(e) * a.DECORATION_TO_AVATAR_RATIO : e * a.DECORATION_TO_AVATAR_RATIO } let u = e => { let { analyticsLocations: t, initialSelectedDecoration: a, initialSelectedDecorationId: l, isTryItOutFlow: u, guild: d, onClose: _ } = e; (0, r.openModalLazy)(async () => { (0, s.getHistory)().location.pathname === o.Routes.COLLECTIBLES_SHOP_FULLSCREEN && (0, s.transitionTo)(o.Routes.APP); let { default: e } = await Promise.resolve().then(n.bind(n, "235400")); return n => (0, i.jsx)(e, { ...n, onCloseModal: n.onClose, onClose: _, analyticsLocations: t, initialSelectedDecoration: a, initialSelectedDecorationId: l, isTryItOutFlow: u, guild: d }) }, {}) } }, 125988: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("470079"), r = n("442837"), s = n("607070"), a = n("166625"), o = n("271383"), l = n("594174"), u = n("451478"), d = n("768581"), _ = n("660097"); t.default = e => { var t; let { user: n, guildId: c, size: E, animateOnHover: I = !1, showPending: T = !1, showTryItOut: f = !1, avatarDecorationOverride: S } = e, [h, A] = i.useState(!1), m = (0, r.useStateFromStores)([s.default], () => s.default.useReducedMotion), N = (0, r.useStateFromStores)([u.default], () => u.default.isFocused()), p = (0, r.useStateFromStores)([o.default], () => null != c && null != n ? o.default.getMember(c, n.id) : null), [O, C] = (0, r.useStateFromStoresArray)([l.default], () => { var e; return [null === (e = l.default.getCurrentUser()) || void 0 === e ? void 0 : e.id, l.default.getUser(null == n ? void 0 : n.id)] }), R = null == p ? null == C ? void 0 : C.avatarDecoration : null === p.avatarDecoration ? null : null !== (t = p.avatarDecoration) && void 0 !== t ? t : null == C ? void 0 : C.avatarDecoration, { pendingAvatarDecoration: g } = (0, a.default)({ isTryItOut: f, guildId: c }), L = N && (h || !m && !I), v = T && void 0 !== g && void 0 !== O && O === (null == n ? void 0 : n.id), D = null != c && null === g, M = v ? D ? null == n ? void 0 : n.avatarDecoration : null != g ? g : R : null != R ? R : null == n ? void 0 : n.avatarDecoration, y = i.useMemo(() => (0, d.getAvatarDecorationURL)({ avatarDecoration: void 0 !== S ? S : M, canAnimate: L, size: E }), [M, L, E, S]), P = i.useCallback(() => A(!0), []); return { avatarPlaceholderSrc: _, avatarDecorationSrc: y, isAvatarDecorationAnimating: L, eventHandlers: { onMouseEnter: P, onMouseLeave: i.useCallback(() => A(!1), []) } } } }, 763596: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { StripeErrorTypes: function() { return s } }); let s = ["api_connection_error", "api_error", "authentication_error", "card_error", "idempotency_error", "invalid_request_error", "rate_limit_error", "validation_error"]; (r = i || (i = {})).CREATE = "create", r.CANCEL = "cancel", r.RESUBSCRIBE = "resubscribe", r.CHARGE = "charge" }, 211242: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useBlockedPaymentsConfig: function() { return o } }); var i = n("818083"), r = n("847903"); let s = (0, i.createExperiment)({ kind: "user", id: "2022-03_block_russian_purchases", label: "Block purchases based on country", defaultConfig: { paymentsBlocked: !1 }, treatments: [{ id: 1, label: "Payments Blocked", config: { paymentsBlocked: !0 } }] }), a = (0, i.createExperiment)({ kind: "user", id: "2022-03_block_russian_purchases_desktop", label: "Block purchases based on country (desktop specific flags)", defaultConfig: { checkPaymentSource: !1 }, treatments: [{ id: 1, label: "Check Payment Source", config: { checkPaymentSource: !0 } }] }); function o() { let { paymentsBlocked: e } = s.useExperiment({ location: "c519a9_1" }, { autoTrackExposure: !1 }), { checkPaymentSource: t } = a.useExperiment({ location: "c519a9_2" }, { autoTrackExposure: !1 }), { defaultBillingCountryCode: n } = (0, r.default)(); return e || t && "RU" === n } t.default = s }, 15640: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getSubscriptionPlansLoaded: function() { return _ }, useSubscriptionPlansLoaded: function() { return d } }), n("47120"); var i = n("442837"), r = n("710845"), s = n("853872"), a = n("509545"), o = n("78839"), l = n("474936"); new r.default("useSubscriptionPlansLoaded"); let u = e => {}; function d() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [...l.ACTIVE_PREMIUM_SKUS]; return (0, i.useStateFromStores)([s.default, a.default, o.default], () => _(e, [s.default, a.default, o.default]), [e]) } function _() { var e; let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [...l.ACTIVE_PREMIUM_SKUS], [n, i, r] = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [s.default, a.default, o.default], d = n.paymentSourceIds, _ = n.defaultPaymentSourceId, c = i.isLoadedForSKUs(t), E = null === (e = r.getPremiumTypeSubscription()) || void 0 === e ? void 0 : e.paymentSourceId; if (null != E && !i.hasPaymentSourceForSKUIds(E, t)) return u("subscription payment source ".concat(E, " not loaded for ").concat(t)), !1; if (null != _ && !i.hasPaymentSourceForSKUIds(_, t)) return u("default payment source ".concat(_, " not loaded for ").concat(t)), !1; for (let e of d) if (!i.hasPaymentSourceForSKUIds(e, t)) return u("payment source ".concat(e, " not loaded for ").concat(t)), !1; return u("isLoadedForSKUs ".concat(c)), c } }, 559407: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CASH_APP_PAY_CONTAINER: function() { return r }, default: function() { return a } }); var i = n("735250"); n("470079"), n("637515"); let r = "cash-app-pay-container"; function s() { return (0, i.jsx)(i.Fragment, { children: (0, i.jsx)("div", { id: r }) }) } function a() { return (0, i.jsx)(i.Fragment, { children: (0, i.jsx)(s, {}) }) } }, 640795: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchBlockedDomainList: function() { return c } }), n("411104"); var i = n("956067"), r = n("544891"), s = n("570140"), a = n("710845"), o = n("873741"), l = n("139674"); let { WEBAPP_ENDPOINT: u } = window.GLOBAL_ENV, d = "https:".concat(u, "/bad-hash-delta"), _ = new a.default("FetchBlockedDomain"); function c() { return i.default.timeAsync("\uD83D\uDCBE", "fetchBlockedDomainList", E) } async function E() { _.verbose("Fetching blocked domain list"); try { let e; let t = parseInt((await r.HTTP.get("https://cdn.discordapp.com/bad-domains/current_revision.txt")).text), n = l.default.getCurrentRevision(); if (_.verbose("Server revision: ".concat(t, ", Client revision: ").concat(n)), null === n || n !== t) { try { if (null === n || n > t) { let e = null === n ? "null" : "greater than server revision number"; throw Error("Client revision number is " + e) } if (t - n > 15) throw Error("Client revision number is more than ".concat(15, " behind the server revision number")); let s = (await r.HTTP.get({ url: d, query: { revision: n } })).body; if (0 === s.ADDED.length && 0 === s.REMOVED.length) { _.verbose("No changes to blocked domains list."); return } _.verbose("Retrieved delta, domains added: ".concat(s.ADDED.length, ", domains removed: ").concat(s.REMOVED.length)); let a = await i.default.timeAsync("\uD83D\uDCBE", "getBlockedDomainList", () => l.default.getBlockedDomainList()); if (null === a) throw Error("Blocked domain list is null"); _.verbose("Blocked domains list length: ".concat(a.size, " before update")), s.ADDED.forEach(e => { if (a.has(e)) throw Error("Unable to add domain which is already in the blockedDomains set: ".concat(e)); a.add(e) }), s.REMOVED.forEach(e => { if (!a.has(e)) throw Error("Unable to removed domain which is not in the blockedDomains set: ".concat(e)); a.delete(e) }), e = Array.from(a), _.verbose("Delta applied successfully") } catch (t) { if (_.verbose("Unable to process domain list delta: ".concat(t.message)), (0, o.isSlowNetwork)()) { _.verbose("Slow network detected, not downloading full list"); return } _.verbose("Downloading the full bad domains file"), e = (await r.HTTP.get({ url: "https://cdn.discordapp.com/bad-domains/updated_hashes.json" })).body } _.verbose("Blocked domains list length: ".concat(e.length, " after update")), i.default.time("\uD83D\uDCBE", "Save Blocked Domain List", () => s.default.dispatch({ type: "BLOCKED_DOMAIN_LIST_FETCHED", list: e, revision: t })) } } catch (e) { _.error(e) } } }, 399907: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("956067"), r = n("147913"), s = n("70956"), a = n("640795"), o = n("139674"); let l = 4 * s.default.Millis.HOUR; class u extends r.default { _initialize() { setTimeout(() => i.default.timeAsync("\uD83D\uDCBE", "getBlockedDomainList", () => o.default.getBlockedDomainList()), 1e3), setTimeout(() => (0, a.fetchBlockedDomainList)(), 10 * s.default.Millis.SECOND), this.intervalID = setInterval(a.fetchBlockedDomainList, l) } _terminate() { clearInterval(this.intervalID) } constructor(...e) { var t, n, i; super(...e), t = this, i = void 0, (n = "intervalID") in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new u }, 704133: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("433517"), s = n("481060"), a = n("358085"); t.default = { show(e) { (0, s.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("2435")]).then(n.bind(n, "821606")); return n => (0, i.jsx)(t, { ...n, url: e }) }) }, getBlockedDomains() { if ((0, a.isDesktop)()) { let e = r.Storage.get("BlockedDomainsV2"); return Promise.resolve(null == e ? [] : e.split("\n")) } return Promise.resolve([]) }, saveBlockedDomains(e) { (0, a.isDesktop)() && r.Storage.set("BlockedDomainsV2", e.join("\n")) } } }, 139674: function(e, t, n) { "use strict"; let i; n.r(t), n("47120"); var r, s, a, o, l = n("442837"), u = n("433517"), d = n("570140"), _ = n("902676"), c = n("626135"), E = n("358085"), I = n("704133"), T = n("981631"); let f = "BlockedDomainStore", S = "BlockedDomainRevision", h = null; class A extends(r = l.default.Store) { initialize() { i = null, u.Storage.get(f) && (u.Storage.remove(S), u.Storage.remove(f)) } getCurrentRevision() { if (!(0, E.isDesktop)()) return null; if (null == i) { var e; i = null !== (e = u.Storage.get(S)) && void 0 !== e ? e : null } return i } async getBlockedDomainList() { return null == h && (h = new Set(await I.default.getBlockedDomains())), h } isBlockedDomain(e) { let t = n("647229"); if (null == h) return this.getBlockedDomainList(), null; let i = (0, _.getHostname)(e), r = new t.hash.sha256, s = t.codec.hex.fromBits(r.update(i).finalize()), a = ""; h.has(s) && (a = i); let o = i.indexOf("."); for (; - 1 !== o && "" === a;) i = i.substring(o + 1), r.reset(), s = t.codec.hex.fromBits(r.update(i).finalize()), h.has(s) && (a = i), o = i.indexOf("."); return "" !== a ? (c.default.track(T.AnalyticEvents.LINK_SECURITY_CHECK_BLOCKED, { blocked_domain: a }), a) : null } } o = "BlockedDomainStore", (a = "displayName") in(s = A) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new A(d.default, { BLOCKED_DOMAIN_LIST_FETCHED: function(e) { let { list: t, revision: n } = e; i = null, h = new Set(t), I.default.saveBlockedDomains(t), u.Storage.set("BlockedDomainRevision", n) } }) }, 67212: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchBroadcasterBuckets: function() { return h }, getGameName: function() { return I }, maybeFetchBroadcastChannels: function() { return A }, startBroadcastForStream: function() { return T }, stopBroadcast: function() { return f } }); var i = n("544891"), r = n("570140"), s = n("594190"), a = n("569545"), o = n("598077"), l = n("314897"), u = n("592125"), d = n("77498"), _ = n("770471"), c = n("292584"), E = n("981631"); function I(e) { var t; let n = null !== (t = null == e ? void 0 : e.gameName) && void 0 !== t ? t : null == e ? void 0 : e.name; return null != n ? n.trim() : null } function T(e, t) { if (null == t) return; let { canBroadcast: n } = _.default.getCurrentConfig({ location: "start_broadcast_for_stream" }, { autoTrackExposure: !1 }); if (!n) return; let { ownerId: i, channelId: o } = (0, a.decodeStreamKey)(e); if (null == i || null == o) return; let c = l.default.getId(); if (i !== c) return; let E = l.default.getSessionId(); if (null == E) return; let T = u.default.getChannel(o), f = null != T && T.isBroadcastChannel(); if (null == T || i !== T.ownerId || !f) return; let S = function(e) { var t; let n = I(s.default.getGameForPID(e)), i = d.default.getGameByName(n); return null !== (t = null == i ? void 0 : i.id) && void 0 !== t ? t : "0" }(t); null != S && ! function(e) { let t = l.default.getId(), n = l.default.getSessionId(); null != t && null != n && r.default.dispatch({ type: "BROADCAST_START", broadcast: e }) }({ sessionId: E, userId: c, applicationId: S, channelId: T.id, streamKey: e }) } function f() { r.default.dispatch({ type: "BROADCAST_STOP" }) } function S(e) { let t = {}; e.forEach(e => { t[e] = -1 }), r.default.dispatch({ type: "BROADCASTER_BUCKETS_RECEIVED", data: t }) } async function h() { let e = c.default.getUserIdsToValidate(); try { let t = await i.HTTP.get({ url: E.Endpoints.USER_BROADCASTS, query: { user_ids: e } }); if (t.ok && null != t.body) { let n = {}; e.forEach(e => { var i; n[e] = null !== (i = t.body[e]) && void 0 !== i ? i : -1 }), r.default.dispatch({ type: "BROADCASTER_BUCKETS_RECEIVED", data: n }) } else S(e) } catch (t) { S(e) } } async function A() { let e = c.default.getBroadcastsToValidateChannels().filter(e => null == e.viewers).map(e => e.channelId); if (0 !== e.length) try { let t = await i.HTTP.get({ url: E.Endpoints.BROADCAST_CHANNELS, query: { channel_ids: e } }); if (t.ok && null != t.body) { let e = t.body, n = {}; e.forEach(e => { var t; let i = c.default.getBroadcastByChannel(e.id).userId, r = null !== (t = e.recipients) && void 0 !== t ? t : []; n[i] = r.map(e => new o.default(e)).filter(e => e.id !== i) }), r.default.dispatch({ type: "BROADCAST_VIEWERS_UPDATE", viewers: n }) } } catch (e) {} } }, 770471: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CAN_VIEW_BROADCASTS_BUCKETS: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-04_broadcasting", label: "Go Live Broadcasting", defaultConfig: { canBroadcast: !1, canViewBroadcasts: !1 }, treatments: [{ id: 1, label: "Allow user to Broadcast to friends & guilds", config: { canBroadcast: !0, canViewBroadcasts: !0 } }, { id: 2, label: "Cannot broadcast, cannot view broadcasts", config: { canBroadcast: !1, canViewBroadcasts: !0 } }] }), r = i.definition.treatments.filter(e => e.config.canViewBroadcasts).map(e => e.id); t.default = i }, 85717: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n("47120"); var a = n("493683"), o = n("45114"), l = n("872810"), u = n("147913"), d = n("594190"), _ = n("569545"), c = n("695346"), E = n("314897"), I = n("592125"), T = n("77498"), f = n("944486"), S = n("885110"), h = n("67212"), A = n("770471"), m = n("757454"), N = n("158631"), p = n("981631"); let O = []; class C extends u.default { handleRunningGamesChange() { let e = d.default.getVisibleGame(); if (null == e) return; let { canBroadcast: t } = A.default.getCurrentConfig({ location: "handle_running_games_change" }, { autoTrackExposure: !1 }), n = S.default.getBroadcast(), i = (0, h.getGameName)(e), r = null != T.default.getGameByName(i), s = (0, N.getIsBroadcastingToAnyone)(); if (!t || null != n || !c.BroadcastAutoBroadcast.getSetting() || !r || !s || null != O.find(t => t.pid === e.pid)) return; if (O = d.default.getRunningGames(), !(0, m.getCanStartBroadcast)()) return; let a = f.default.getVoiceChannelId(); (0, l.createBroadcastChannelOrStartStream)({ pid: e.pid, channelId: a }) } handleStreamCreate(e) { let { streamKey: t } = e; (0, h.startBroadcastForStream)(t, i) } handleStreamStop(e) { let { streamKey: t } = e; if (null == i) return; let { ownerId: n, channelId: a } = (0, _.decodeStreamKey)(t); if (null == n || null == a || n !== E.default.getId()) return; let o = I.default.getChannel(a), l = null != o && o.isBroadcastChannel(); null != o && n === o.ownerId && l && (i = null, r = null, s = null, (0, h.stopBroadcast)()) } handleStartBroadcastStream(e) { let { options: t } = e; i = t.pid, r = t.sourceId, s = t.sourceName } handleCallCreate(e) { let { channelId: t } = e; if (null == t || null == i && null == r && null == s) return; let n = E.default.getId(), a = I.default.getChannel(t); null != a && n === a.ownerId && a.isBroadcastChannel() && (0, l.startStream)(null, t, { pid: i, sourceId: r, sourceName: s }) } handleRTCConnectionState(e) { let { channelId: t, state: n } = e; if (n !== p.RTCConnectionStates.DISCONNECTED) return; let i = f.default.getChannelId(), r = I.default.getChannel(t); if (null == r || !r.isBroadcastChannel()) return; a.default.closePrivateChannel(t, i === t, !0); let s = S.default.getBroadcast(); null != s && r.id === s.channelId && (0, h.stopBroadcast)() } handleChannelDelete(e) { let { channel: t } = e, n = S.default.getBroadcast(); null != n && t.id === n.channelId && (0, h.stopBroadcast)() } handleMessageCreate(e) { let { channelId: t, guildId: n } = e; if (null != n) return; let i = I.default.getChannel(t); if (null != i && !!i.isBroadcastChannel()) f.default.getVoiceChannelId() !== i.id && (0, o.localAck)(t) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { RUNNING_GAMES_CHANGE: this.handleRunningGamesChange, STREAM_CREATE: this.handleStreamCreate, STREAM_STOP: this.handleStreamStop, START_BROADCAST_STREAM: this.handleStartBroadcastStream, CALL_CREATE: this.handleCallCreate, RTC_CONNECTION_STATE: this.handleRTCConnectionState, CHANNEL_DELETE: this.handleChannelDelete, MESSAGE_CREATE: this.handleMessageCreate }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new C }, 292584: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o, l, u = n("392711"), d = n("442837"), _ = n("759174"), c = n("570140"), E = n("598077"), I = n("314897"), T = n("709054"), f = n("770471"), S = n("860852"); (s = i || (i = {}))[s.INVALID = 0] = "INVALID", s[s.VALID_USER_ONLY = 1] = "VALID_USER_ONLY", s[s.VALID = 2] = "VALID"; let h = new Set, A = new Set, m = new Set, N = [], p = { BROADCASTS_BY_USER_ID: e => "user:".concat(e), BROADCASTS_BY_CHANNEL_ID: e => "channel:".concat(e), BROADCASTS_BY_VALIDITY: e => "validity:".concat(e) }, O = new _.SecondaryIndexMap(function(e) { let t = h.has(e.userId) ? 1 : 0; return null != e.viewers && (t = 2), [p.BROADCASTS_BY_USER_ID(e.userId), p.BROADCASTS_BY_CHANNEL_ID(e.channelId), p.BROADCASTS_BY_VALIDITY(t)] }, e => e.channelId); function C(e, t, n) { if (I.default.getId() === e) return !1; if (null == t) { let t = O.get(e); return !!(null != t && (0, u.isEqual)(t.source, n)) && (O.delete(e), void 0) }!h.has(e) && !A.has(e) && (m.add(e), N = [...m]); let i = (0, S.broadcastFromServer)(t, e, n); O.set(e, i) } function R(e) { return null != e ? { type: S.BroadcastSourceType.GUILD, guildId: e } : { type: S.BroadcastSourceType.GLOBAL } } class g extends(r = d.default.Store) { getBroadcasts() { return O.values(p.BROADCASTS_BY_VALIDITY(2)) } getBroadcastsToValidateChannels() { return O.values(p.BROADCASTS_BY_VALIDITY(1)) } getBroadcastByChannel(e) { return O.values(p.BROADCASTS_BY_CHANNEL_ID(e))[0] } getBroadcastByUser(e) { return O.get(e) } getUserIdsToValidate() { return N } } l = "BroadcastingStore", (o = "displayName") in(a = g) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new g(c.default, { PRESENCE_UPDATES: function(e) { let { updates: t } = e; return t.forEach(e => { let { user: t, broadcast: n, guildId: i } = e; C(t.id, n, R(i)) }) }, PRESENCES_REPLACE: function(e) { let { presences: t } = e; return t.forEach(e => { let { user: t, broadcast: n, guildId: i } = e; C(t.id, n, R(i)) }) }, CONNECTION_OPEN_SUPPLEMENTAL: function(e) { let { presences: t, guilds: n } = e; t.forEach(e => { let { user: t, broadcast: n, guildId: i } = e; C(t.id, n, R(i)) }), n.forEach(e => { let { presences: t, id: n } = e; t.forEach(e => { let { user: t, broadcast: i } = e; C(t.id, i, R(n)) }) }) }, BROADCASTER_BUCKETS_RECEIVED: function(e) { let { data: t } = e; T.default.keys(t).forEach(e => { f.CAN_VIEW_BROADCASTS_BUCKETS.includes(t[e]) ? h.add(e) : A.add(e), m.clear(), N = [...m]; let n = O.get(e); null != n && (O.delete(e), O.set(e, n)) }) }, BROADCAST_VIEWERS_UPDATE: function(e) { let { viewers: t } = e; Object.entries(t).forEach(e => { let [t, n] = e, i = O.get(t); null != i && O.set(t, { ...i, viewers: n }) }) }, CHANNEL_RECIPIENT_ADD: function(e) { let { channelId: t, user: n } = e, i = O.values(p.BROADCASTS_BY_CHANNEL_ID(t))[0]; if (null == i || null == i.viewers || i.viewers.some(e => e.id === n.id)) return !1; O.set(i.userId, { ...i, viewers: [...i.viewers, new E.default(n)] }) }, CHANNEL_RECIPIENT_REMOVE: function(e) { let { channelId: t, user: n } = e, i = O.values(p.BROADCASTS_BY_CHANNEL_ID(t))[0]; if (null == i || null == i.viewers) return !1; O.set(i.userId, { ...i, viewers: i.viewers.filter(e => e.id !== n.id) }) }, CHANNEL_CREATE: function(e) { var t; let { channel: n } = e, i = O.values(p.BROADCASTS_BY_CHANNEL_ID(n.id))[0]; if (null == i) return !1; let r = null !== (t = n.rawRecipients) && void 0 !== t ? t : []; O.set(i.userId, { ...i, viewers: r.filter(e => e.id !== i.userId).map(e => new E.default(e)) }) }, LOGOUT: function() { h.clear(), A.clear(), m.clear(), N = [], O.clear() } }) }, 860852: function(e, t, n) { "use strict"; var i, r; function s(e) { let { sessionId: t, userId: n, applicationId: i, channelId: r, streamKey: s } = e; return { session_id: t, user_id: n, application_id: i, channel_id: r, stream_key: s } } function a(e, t, n) { let { session_id: i, application_id: r, channel_id: s, stream_key: a } = e; return { sessionId: i, userId: t, applicationId: r, channelId: s, streamKey: a, source: n } } n.r(t), n.d(t, { BroadcastSourceType: function() { return i }, broadcastFromServer: function() { return a }, broadcastToServer: function() { return s } }), (r = i || (i = {}))[r.GLOBAL = 0] = "GLOBAL", r[r.GUILD = 1] = "GUILD" }, 762914: function(e, t, n) { "use strict"; n.r(t), n.d(t, { filterBroadcastingGDMs: function() { return l }, getIsBroadcastingGDM: function() { return o }, useIsBroadcastingGDM: function() { return a } }); var i = n("442837"), r = n("592125"), s = n("770471"); function a(e) { let { canViewBroadcasts: t } = s.default.useExperiment({ location: "use_is_broadcasting_gdm" }, { autoTrackExposure: !1 }), n = (0, i.useStateFromStores)([r.default], () => r.default.getChannel(e)); return !!t && !!(null == n ? void 0 : n.isBroadcastChannel()) } function o(e) { let { canViewBroadcasts: t } = s.default.getCurrentConfig({ location: "get_is_broadcasting_gdm" }, { autoTrackExposure: !1 }); if (!t) return !1; let n = r.default.getChannel(e); return !!(null == n ? void 0 : n.isBroadcastChannel()) } function l(e) { return e.filter(e => !o(e)) } }, 757454: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l }, getCanStartBroadcast: function() { return u } }); var i = n("442837"), r = n("314897"), s = n("592125"), a = n("944486"), o = n("885110"); function l() { let e = (0, i.useStateFromStores)([r.default], () => r.default.getId()), t = (0, i.useStateFromStores)([a.default], () => a.default.getVoiceChannelId()), n = (0, i.useStateFromStores)([s.default], () => s.default.getChannel(t), [t]), l = (0, i.useStateFromStores)([o.default], () => null != o.default.getBroadcast()), u = (null == n ? void 0 : n.isOwner(e)) && (null == n ? void 0 : n.isBroadcastChannel()) || null == t; return !l && u } function u() { if (null != o.default.getBroadcast()) return !1; let e = a.default.getVoiceChannelId(); if (null == e) return !0; let t = r.default.getId(), n = s.default.getChannel(e); return (null == n ? void 0 : n.isOwner(t)) && (null == n ? void 0 : n.isBroadcastChannel()) } }, 158631: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d }, getIsBroadcastingToAnyone: function() { return E }, isBroadcastingInChannel: function() { return c }, useIsBroadcastingInChannel: function() { return _ }, useSelfBroadcast: function() { return u } }); var i = n("442837"), r = n("695346"); n("199902"); var s = n("314897"), a = n("592125"); n("944486"); var o = n("885110"), l = n("770471"); function u() { let e = (0, i.useStateFromStores)([s.default], () => s.default.getId()), { canBroadcast: t } = l.default.useExperiment({ location: "use_self_broadcast" }, { autoTrackExposure: !1 }), n = (0, i.useStateFromStores)([o.default], () => o.default.getBroadcast()); return t && (null == n ? void 0 : n.userId) === e ? n : null } function d() { return null != u() } function _(e) { let t = u(), n = (0, i.useStateFromStores)([a.default], () => a.default.getChannel(e)); return null != t && null != n && n.ownerId === t.userId && n.isBroadcastChannel() } function c(e) { let t = s.default.getId(), { canBroadcast: n } = l.default.getCurrentConfig({ location: "is_broadcasting_in_channel" }, { autoTrackExposure: !1 }), i = o.default.getBroadcast(); if (!n || null == i || i.userId !== t) return !1; let r = a.default.getChannel(e); return null != r && r.ownerId === i.userId && r.isBroadcastChannel() } function E() { let e = r.BroadcastAllowedGuildIds.getSetting(), t = r.BroadcastAllowedUserIds.getSetting(); return r.BroadcastAllowFriends.getSetting() || e.length > 0 || t.length > 0 } n("292584") }, 493355: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("465670"), o = n("436088"), l = n("806519"), u = n("186443"); function d(e) { let { width: t = 20, height: n = 20, className: r } = e; return (0, i.jsxs)("div", { className: s()(u.icon, r), children: [(0, i.jsx)(l.default, { mask: l.default.Masks.STATUS_SCREENSHARE, width: t, height: n, children: (0, i.jsx)(o.default, { width: t, height: n }) }), (0, i.jsx)(a.default, { className: u.badge })] }) } }, 709369: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("40851"), o = n("776031"), l = n("199902"), u = n("937482"), d = n("358085"), _ = n("134598"), c = n("981631"), E = n("689938"); function I(e) { let { onClose: t } = e, n = (0, a.useAppContext)(), I = (0, r.useStateFromStores)([l.default], () => l.default.getCurrentUserActiveStream()), T = (0, o.default)(I, n); return (0, i.jsxs)(s.Menu, { onSelect: c.NOOP_NULL, navId: "manage-broadcast", onClose: t, "aria-label": E.default.Messages.SETTINGS, children: [d.isPlatformEmbedded && null != I ? (0, i.jsx)(s.MenuItem, { id: "stream-settings", label: E.default.Messages.SCREENSHARE_STREAM_QUALITY, children: T }) : null, (0, i.jsx)(s.MenuItem, { id: "broadcast-settings", label: E.default.Messages.BROADCAST_SETTINGS, icon: u.default, action: () => (0, _.openBroadcastingPrivacySettingsModal)() })] }) } }, 552740: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openStartBroadcastConfirmModal: function() { return l }, openStopBroadcastConfirmModal: function() { return o } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("67212"), a = n("689938"); function o(e) { (0, r.openModal)(t => (0, i.jsx)(r.ConfirmModal, { header: a.default.Messages.STOP_STREAMING, confirmText: a.default.Messages.STOP_STREAMING, cancelText: a.default.Messages.CANCEL, onConfirm: () => { (0, s.stopBroadcast)(), e() }, ...t, children: (0, i.jsx)(r.Text, { variant: "text-md/normal", children: a.default.Messages.BROADCASTING_STOP_STREAM_CONFIRM_BODY }) })) } function l(e) { (0, r.openModal)(t => (0, i.jsx)(r.ConfirmModal, { header: a.default.Messages.START_STREAMING, confirmText: a.default.Messages.START_STREAMING, cancelText: a.default.Messages.CANCEL, onConfirm: e, confirmButtonColor: r.Button.Colors.BRAND, ...t, children: (0, i.jsx)(r.Text, { variant: "text-md/normal", children: a.default.Messages.BROADCASTING_START_STREAM_CONFIRM_BODY }) })) } }, 134598: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openBroadcastingPrivacySettingsModal: function() { return s } }); var i = n("735250"); n("470079"); var r = n("481060"); function s(e, t, s) { (0, r.openModalLazy)(async () => { let { default: r } = await Promise.all([n.e("99387"), n.e("10377")]).then(n.bind(n, "137167")); return n => (0, i.jsx)(r, { headerText: e, buttonCTA: t, onSave: s, ...n }) }) } }, 386506: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { applyPublicBuildOverride: function() { return d }, applyStaffBuildOverride: function() { return u }, clearBuildOverride: function() { return _ }, getPublicBuildOverrideLink: function() { return c } }); var r = n("544891"), s = n("314897"), a = n("12647"), o = n("865427"); let l = "/__development/build_overrides"; async function u(e) { try { var t; let n = await r.HTTP.put({ url: (0, o.getAPIEndpoint)(l), body: { overrides: e, version: o.APP_VERSION }, headers: { Authorization: null !== (t = s.default.getToken()) && void 0 !== t ? t : "" }, oldFormErrors: !0 }); return await i(n), n } catch (e) { return e } } async function d(e) { try { let t = await r.HTTP.put({ url: (0, o.getAPIEndpoint)("/__development/link"), body: { payload: e, token: s.default.getToken(), version: o.APP_VERSION }, oldFormErrors: !0 }); return await i(t), t } catch (e) { return e } } async function _() { let e = await r.HTTP.del({ url: (0, o.getAPIEndpoint)(l), oldFormErrors: !0 }); return await i(e), e } function c(e) { var t; return r.HTTP.post({ url: (0, o.getAPIEndpoint)("/__development/create_build_override_link"), body: e, headers: { Authorization: null !== (t = s.default.getToken()) && void 0 !== t ? t : "" }, oldFormErrors: !0 }).then(e => ({ url: e.body.url, error: !1 }), e => 400 === e.status ? { url: !1, error: e.body } : { url: !1, error: "Error making API request (".concat(e.status, ")") }) } i = async e => { try { await a.default.flushCookies() } catch (e) {} } }, 908442: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BUILD_OVERRIDE_COOKIE_NAME: function() { return a }, BUILD_OVERRIDE_EXPIRATION_OPTIONS: function() { return r }, BUILD_OVERRIDE_RELEASE_CHANNEL_OPTIONS: function() { return s }, BUILD_OVERRIDE_TARGET_NAMES: function() { return i } }); let i = { discord_marketing: "Discord Marketing", discord_web: "Discord Web", discord_ios: "Discord iOS", discord_android: "Discord Android", discord_developers: "Discord Developers" }, r = [{ value: 3600, label: "1 Hour" }, { value: 86400, label: "1 Day" }, { value: 259200, label: "3 Days" }, { value: 604800, label: "1 Week" }, { value: 1209600, label: "2 Weeks" }, { value: 1814400, label: "3 Weeks" }, { value: 2628e3, label: "1 Month" }], s = [{ value: "all", label: "All" }, { value: "canary", label: "Canary" }, { value: "ptb", label: "PTB" }, { value: "stable", label: "Stable" }, { value: "staging", label: "Staging" }], a = "buildOverride" }, 304761: function(e, t, n) { "use strict"; n.r(t), n.d(t, { State: function() { return o } }); var i, r, s, a, o, l, u = n("442837"), d = n("570140"), _ = n("865427"); (i = o || (o = {}))[i.NotResolved = 0] = "NotResolved", i[i.Resolving = 1] = "Resolving", i[i.Resolved = 2] = "Resolved", i[i.Invalid = 3] = "Invalid"; let c = 0, E = null, I = {}; class T extends(l = u.default.Store) { getCurrentBuildOverride() { return 0 === c && (c = 1, (0, _.getBuildOverride)().then(e => { d.default.dispatch({ type: "CURRENT_BUILD_OVERRIDE_RESOLVED", overrides: e }) })), { state: c, overrides: E } } getBuildOverride(e) { return ! function(e) { if (e in I) return; let t = (0, _.validateURL)(e); if (null == t) { I = { ...I, [e]: { url: e, state: 3 } }; return } I = { ...I, [e]: { url: e, validatedURL: t.url, payload: String(t.payload), state: 1 } }; (0, _.getBuildOverrideMeta)(t.url).then(t => { d.default.dispatch({ type: "BUILD_OVERRIDE_RESOLVED", url: e, override: t }) }) }(e), I[e] } getBuildOverrides() { return I } } a = "BuildOverrideStore", (s = "displayName") in(r = T) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new T(d.default, { BUILD_OVERRIDE_RESOLVED: function(e) { let { url: t, override: n } = e; I = { ...I, [t]: { ...I[t], state: null == n ? 3 : 2, override: n } } }, CURRENT_BUILD_OVERRIDE_RESOLVED: function(e) { let { overrides: t } = e; c = 2, E = t } }) }, 865427: function(e, t, n) { "use strict"; n.r(t), n.d(t, { APP_VERSION: function() { return d }, getAPIEndpoint: function() { return _ }, getBuildOverride: function() { return c }, getBuildOverrideExperiments: function() { return T }, getBuildOverrideMeta: function() { return E }, isBuildOverrideLink: function() { return S }, isManualBuildOverrideLink: function() { return A }, probablyHasBuildOverride: function() { return I }, validateURL: function() { return p } }), n("642549"), n("47120"); var i = n("973361"), r = n("729594"), s = n("544891"), a = n("358085"), o = n("591759"), l = n("908442"); n("981631"); let u = void 0, d = (0, a.isAndroid)() ? u.Version.split(" - ")[0] : (0, a.isIOS)() ? u.Version : void 0; function _(e) { return "".concat(location.protocol, "//").concat(location.host).concat(e) } function c() { let e = o.default.safeParseWithQuery(_("/__development/build_overrides")); return null == e ? Promise.resolve(null) : (e.search = null, d && (e.query.version = d), s.HTTP.get({ url: r.format(e), oldFormErrors: !0 }).then(e => e.body || null, () => null)) } function E(e) { if (A(e)) return Promise.resolve(function(e) { let t = e.match(h); if (null == t || 2 !== t.length) return null; let n = (0, a.getNativePlatform)(), i = t[1]; return { targetBuildOverride: { ["discord_".concat(n)]: { type: "branch", id: i } }, validForUserIds: [], expiresAt: "Mon, 1 Jan 2038 00:00:00 GMT" } }(e)); let t = o.default.safeParseWithQuery(e); return null == t ? Promise.resolve(null) : (t.search = null, t.query.meta = "true", d && (t.query.version = d), t.host = window.location.host, s.HTTP.get({ url: r.format(t), oldFormErrors: !0 }).then(e => e.body || null, () => null)) } function I() { return -1 !== window.document.cookie.indexOf("".concat(l.BUILD_OVERRIDE_COOKIE_NAME, "=")) } function T() { try { var e; let t = i.parse(window.document.cookie)[l.BUILD_OVERRIDE_COOKIE_NAME]; if (null == t) return {}; let n = JSON.parse(atob(t.substring(t.indexOf(".") + 1))); return null !== (e = n.$meta.experiments) && void 0 !== e ? e : {} } catch (e) { return {} } } let f = RegExp("^https://(?:ptb\\.|canary\\.)?(discordapp|discord)\\.com/__development/link?[\\S]+$", "i"); function S(e) { return null != e && f.test(e) } let h = RegExp("^dev://branch/([\\w-./]+)$", "i"); function A(e) { return null != e && h.test(e) } let m = new Set(["canary.discord.com", "ptb.discord.com", "discord.com", "canary.discordapp.com", "ptb.discordapp.com", "discordapp.com"]), N = new Set(["/__development/link", "/__development/link/"]); function p(e) { if (A(e)) return { payload: null, url: e }; let t = o.default.safeParseWithQuery(e); if (null == t || !m.has(t.hostname) || !("s" in t.query) || !N.has(t.pathname)) return null; for (let e in t.query) "s" !== e && delete t.query[e]; return { payload: t.query.s, url: r.format(t) } } }, 145022: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("392711"), r = n.n(i), s = n("314897"), a = n("908442"), o = n("981631"), l = n("689938"); function u(e, t, n) { if (null == e || null == t) return { valid: !1, reason: l.default.Messages.BUILD_OVERRIDE_INVALID }; let { releaseChannel: i, expiresAt: u, validForUserIds: d, allowedVersions: _, targetBuildOverride: c } = e, E = Object.keys(c); if (0 === r().intersection(E, t).length) return { valid: !1, reason: l.default.Messages.BUILD_OVERRIDE_INCOMPATIBLE_TARGETS.format({ requestedTargets: E.map(e => { var t; return null !== (t = a.BUILD_OVERRIDE_TARGET_NAMES[e]) && void 0 !== t ? t : "unknown" }).join(", ") }) }; if (null != i && i !== window.GLOBAL_ENV.RELEASE_CHANNEL) { let e = i === o.PublicReleaseChannels.PTB ? i.toUpperCase() : "".concat(i.charAt(0).toUpperCase()).concat(i.slice(1)); return { valid: !1, reason: l.default.Messages.BUILD_OVERRIDE_INCOMPATIBLE_CLIENT.format({ releaseChannel: e }) } } if (null != _ && (null == n || !_.includes(n))) return { valid: !1, reason: l.default.Messages.BUILD_OVERRIDE_INCOMPATIBLE_CLIENT.format({ releaseChannel: _.join(", ") }) }; let I = null != u ? new Date(u).getTime() : null; return null != I && I < Date.now() ? { valid: !1, reason: l.default.Messages.BUILD_OVERRIDE_EXPIRED } : d.length > 0 && !d.includes(s.default.getId()) ? { valid: !1, reason: l.default.Messages.BUILD_OVERRIDE_INVALID_USER } : { valid: !0 } } }, 478543: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("512722"), l = n.n(o), u = n("481060"), d = n("41542"), _ = n("757698"), c = n("942389"), E = n("572004"), I = n("63063"), T = n("358085"), f = n("145022"), S = n("981631"), h = n("689938"), A = n("436391"); function m(e) { let { url: t } = e, [n, s] = r.useState(!1), o = r.useRef(void 0), l = r.useCallback(() => { !n && ((0, E.copy)(t) && s(!0), o.current = setTimeout(() => s(!1), 2e3)) }, [t, n]); return r.useEffect(() => () => clearTimeout(o.current), []), E.SUPPORTS_COPY ? (0, i.jsxs)(u.Clickable, { className: a()(A.copyLink, n ? A.copied : null), onClick: l, children: [(0, i.jsx)(_.default, { className: A.copyLinkIcon }), n ? h.default.Messages.BUILD_OVERRIDE_LINK_COPIED : h.default.Messages.BUILD_OVERRIDE_LINK_COPY] }) : null } function N(e) { let { subHead: t, buildDetails: n, buttonColor: s, buttonClick: o, buttonText: l, disabled: d = !1, submitting: _ = !1 } = e; return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsxs)("div", { className: A.buildInfo, children: [(0, i.jsx)(u.Text, { variant: "text-sm/medium", className: A.subHead, children: t }), (0, i.jsx)("div", { className: A.buildDetails, children: n })] }), (0, i.jsx)(u.Button, { submitting: _, color: s, onClick: o, className: a()(A.button, d ? A.disabledButtonOverride : null), size: A.buttonSize, disabled: d, children: l })] }) } t.default = e => { var t, n, s; let { loading: o = !1, currentOverrides: _, linkMeta: E, url: p, applyBuildOverride: O, clearBuildOverride: C } = e, [R, g] = r.useState(!1), L = r.useCallback(() => { !R && (g(!0), O().catch(() => g(!1))) }, [O, R]), v = r.useCallback(() => { !R && (g(!0), C().catch(() => g(!1))) }, [C, R]); return (0, i.jsxs)("div", { className: A.wrapper, children: [(t = E, n = p, s = o, (0, i.jsxs)(u.Text, { variant: "text-xs/normal", className: A.titleRegion, children: [(0, i.jsx)("strong", { className: A.title, children: null != t && null != t.releaseChannel ? h.default.Messages.BUILD_OVERRIDE_FOR.format({ releaseChannel: t.releaseChannel }) : h.default.Messages.BUILD_OVERRIDE }), (0, i.jsx)(u.Anchor, { className: A.infoLink, href: I.default.getArticleURL(S.HelpdeskArticles.BUILD_OVERRIDE_EMBED), target: "_blank", children: (0, i.jsx)(d.default, { className: A.infoIcon }) }), s ? null : (0, i.jsx)(m, { url: n })] })), (0, i.jsxs)("div", { className: A.content, children: [(0, i.jsx)(c.default, { className: A.icon }), o ? (0, i.jsxs)(r.Fragment, { children: [(0, i.jsxs)("div", { className: A.buildInfo, children: [(0, i.jsx)("div", { className: a()(A.barLoader, A.barTitle) }), (0, i.jsx)("div", { className: A.barLoader })] }), (0, i.jsx)("div", { className: A.buttonLoader })] }) : function(e) { var t, n; let i, r, s, { currentOverrides: a, linkMeta: o, applyBuildOverride: d, clearBuildOverride: _, submitting: c } = e, E = ["discord_web"]; !T.isPlatformEmbedded && E.push("discord_marketing", "discord_developers"); let I = (0, f.default)(o, E); if (!I.valid) return function(e) { return N({ subHead: h.default.Messages.BUILD_OVERRIDE_ISNT_AVAILABLE, buttonColor: u.Button.Colors.TRANSPARENT, buttonText: "Invalid", buildDetails: e, disabled: !0 }) }(I.reason); l()(null != o, "BuildOverrideEmbed.renderResolved: linkMeta should never be null if resolved"); let { discord_web: S, discord_developers: A } = o.targetBuildOverride, m = null != S ? S : A; if (l()(null != m, "BuildOverrideEmbed.renderResolved: linkMeta.targetBuildOverride.discord_web or linkMeta.targetBuildOverride.discord_developers should never be null if resolved"), t = m, null == (n = a) || null == n.discord_web ? 1 : t.id !== n.discord_web.id || t.type !== n.discord_web.type) r = h.default.Messages.BUILD_OVERRIDE_APPLY, i = d, s = u.Button.Colors.GREEN; else r = h.default.Messages.BUILD_OVERRIDE_CLEAR, i = _, s = u.Button.Colors.RED; return N({ subHead: h.default.Messages.BUILD_OVERRIDE_ID, buildDetails: m.id, buttonClick: i, buttonText: r, buttonColor: s, submitting: c }) }({ currentOverrides: _, linkMeta: E, applyBuildOverride: L, clearBuildOverride: v, submitting: R })] })] }) } }, 853425: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("386506"), o = n("304761"), l = n("865427"), u = n("478543"), d = n("366953"); async function _(e) { if (200 !== (await (0, a.applyPublicBuildOverride)(e)).status) throw Error("Build override couldn't apply"); window.location.reload(!0) } async function c(e) { if (200 !== (await (0, a.applyStaffBuildOverride)(e)).status) throw Error("Build override couldn't apply"); window.location.reload(!0) } async function E() { await (0, a.clearBuildOverride)(), window.location.reload(!0) } t.default = r.memo(function(e) { let { url: t } = e, n = (0, s.useStateFromStoresObject)([o.default], () => o.default.getCurrentBuildOverride()), a = (0, s.useStateFromStores)([o.default], () => o.default.getBuildOverride(t)), { payload: I, validatedURL: T } = a, f = n.state === o.State.Resolving || a.state === o.State.Resolving, S = r.useCallback(() => { if ((0, l.isManualBuildOverrideLink)(a.url) && null != a.override) { var e; return c(null === (e = a.override) || void 0 === e ? void 0 : e.targetBuildOverride) } return null == I ? Promise.reject(Error("Invalid override payload")) : ((0, d.addRecentBuildOverride)(a.override, I), _(I)) }, [I, a]); return null != T ? (0, i.jsx)(u.default, { loading: f, linkMeta: a.override, currentOverrides: n.overrides, applyBuildOverride: S, clearBuildOverride: E, url: T }) : null }) }, 366953: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addRecentBuildOverride: function() { return a }, getRecentBuildOverrides: function() { return s } }), n("47120"); var i = n("433517"); let r = "recentBuildOverrides"; function s() { var e; return (null !== (e = i.Storage.get(r)) && void 0 !== e ? e : []).filter(e => null == e.exp || e.exp > Date.now()) } function a(e, t) { if (null == t || null == e || null == e.targetBuildOverride.discord_web) return; let n = { id: e.targetBuildOverride.discord_web.id, payload: t, exp: Date.parse(e.expiresAt) }, a = [n, ...s().filter(e => n.id !== e.id)].slice(0, 5); i.Storage.set(r, a) } }, 670890: function(e, t, n) { "use strict"; function i(e) {} n.r(t), n.d(t, { setClientState: function() { return i } }) }, 38217: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r }, deserializeChannel: function() { return a }, deserializeChannelEntries: function() { return s } }), n("47120"); var i = n("149765"); function r(e) { for (let { permissionOverwrites_: t } of e) if (null != t) for (let e in t) { let n = t[e]; n.allow = i.deserialize(n.allow), n.deny = i.deserialize(n.deny) } } function s(e) { for (let [t, n] of e) r(n) } function a(e) { let { permissionOverwrites_: t } = e; if (null != t) for (let e in t) { let n = t[e]; n.allow = i.deserialize(n.allow), n.deny = i.deserialize(n.deny) } return e } }, 250407: function(e, t, n) { "use strict"; function i() { return !0 } n.r(t), n.d(t, { isCacheEnabled: function() { return i } }) }, 768433: function(e, t, n) { "use strict"; function i() { return !1 } n.r(t), n.d(t, { isCacheEnabled: function() { return i } }) }, 420596: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useCallBannerBackgroundExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-10_call_banner_bg", label: "Call Banner Background Experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function r(e, t) { return i.useExperiment({ location: t }, { autoTrackExposure: e }) } }, 354459: function(e, t, n) { "use strict"; var i, r, s, a, o, l; function u(e) { return !((null == e ? void 0 : e.type) !== 0 && (null == e ? void 0 : e.type) !== 1) } function d(e) { return (null == e ? void 0 : e.type) === 2 } function _(e) { return (null == e ? void 0 : e.type) === 3 } n.r(t), n.d(t, { EMOJI_PICKER_EMOJI_TO_SHOW_COUNT: function() { return E }, PIP_WIDTH: function() { return c }, ParticipantSelectionTypes: function() { return r }, ParticipantTypes: function() { return i }, VoicePlatforms: function() { return s }, isActivityParticipant: function() { return _ }, isStreamParticipant: function() { return u }, isUserParticipant: function() { return d } }), (a = i || (i = {}))[a.STREAM = 0] = "STREAM", a[a.HIDDEN_STREAM = 1] = "HIDDEN_STREAM", a[a.USER = 2] = "USER", a[a.ACTIVITY = 3] = "ACTIVITY", (o = r || (r = {})).NONE = "NONE", o.AUTO = "AUTO", (l = s || (s = {}))[l.DESKTOP = 0] = "DESKTOP", l[l.MOBILE = 1] = "MOBILE", l[l.XBOX = 2] = "XBOX", l[l.PLAYSTATION = 3] = "PLAYSTATION"; let c = 320, E = 8 }, 258833: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("474873"), s = n("523746"), a = n("292959"), o = n("246946"), l = n("979651"), u = n("938475"), d = n("557177"); let _ = (0, d.createSoundForPack)("call_calling", r.default.getSoundpack()); class c extends i.default { handleSoundpackUpdate() { _.stop(), _ = (0, d.createSoundForPack)("call_calling", r.default.getSoundpack()) } handleRingUpdate() { let e = s.default.getCalls().filter(e => e.ringing.length > 0 && l.default.getCurrentClientVoiceChannelId(null) === e.channelId), t = l.default.getCurrentClientVoiceChannelId(null); null != t && u.default.countVoiceStatesForChannel(t) >= 2 || !(e.length > 0) || a.default.isSoundDisabled("call_calling") || o.default.disableSounds ? _.stop() : _.loop() } constructor(...e) { var t, n, i; super(...e), t = this, n = "stores", i = new Map().set(s.default, this.handleRingUpdate).set(a.default, this.handleRingUpdate).set(o.default, this.handleRingUpdate).set(l.default, this.handleRingUpdate).set(r.default, this.handleSoundpackUpdate), n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new c }, 413523: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChannelRTCParticipantsIndexes: function() { return i }, default: function() { return L } }), n("47120"), n("724458"), n("653041"); var i, r, s = n("392711"), a = n("759174"), o = n("586902"), l = n("317381"), u = n("569545"), d = n("199902"), _ = n("314897"), c = n("523746"), E = n("592125"), I = n("131951"), T = n("606304"), f = n("594174"), S = n("33039"), h = n("979651"), A = n("5192"), m = n("933546"), N = n("354459"), p = n("981631"), O = n("65154"); function C(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let R = "__EMBEDDED_ACTIVITIES__"; function g(e) { switch (e.type) { case N.ParticipantTypes.ACTIVITY: return "\0".concat(e.sortKey); case N.ParticipantTypes.HIDDEN_STREAM: case N.ParticipantTypes.STREAM: return "".concat(e.userVideo ? "\x01" : "\x02").concat((0, m.default)(e.userNick, e.user), "\x02"); case N.ParticipantTypes.USER: var t, n; let i = "\x04"; return (null === (t = e.voiceState) || void 0 === t ? void 0 : t.selfVideo) ? i = "\x02" : (null === (n = e.voiceState) || void 0 === n ? void 0 : n.selfStream) && (i = "\x03"), "".concat(i).concat((0, m.default)(e.userNick, e.user)) } }(r = i || (i = {})).VIDEO = "VIDEO", r.STREAM = "STREAM", r.FILTERED = "FILTERED", r.SPEAKING = "SPEAKING", r.ACTIVITY = "ACTIVITY"; class L { get version() { return this.participantByIndex.version } size(e) { return this.participantByIndex.size(e) } toArray(e) { return this.participantByIndex.values(e, !0) } rebuild() { let e = E.default.getChannel(this.channelId); if (null == e || e.type === p.ChannelTypes.GUILD_TEXT) return !1; if (this.call = c.default.getCall(this.channelId), e.isPrivate() && (null == this.call || this.call.unavailable)) return !1; let t = new Set(e.isGuildVocalOrThread() ? Object.keys(h.default.getVoiceStatesForChannel(e.id)) : e.recipients); return t.add(_.default.getId()), d.default.getAllActiveStreamsForChannel(this.channelId).forEach(e => { let { ownerId: n } = e; return t.add(n) }), this.participantByIndex.clear(), this.participants = {}, t.forEach(e => this.updateParticipant(e)), this.updateEmbeddedActivities(), !0 } getParticipant(e) { var t; return null !== (t = this.participantByIndex.get(e)) && void 0 !== t ? t : null } updateEmbeddedActivities() { return this.updateParticipant(R) } hasEmbeddedActivity() { let e = this.participants[R]; return null != e && e.length > 0 } updateParticipant(e) { let t = this.participants[e], n = e === R ? this._getParticipantsForEmbeddedActivities() : this._getParticipantsForUser(e); return (null != t || 0 !== n.length) && (null == t || t.forEach(e => { this.participantByIndex.delete(e.id) }), n.forEach(e => { this.participantByIndex.set(e.id, e) }), this.participants[e] = n, !0) } updateParticipantSpeaking(e) { var t, n; return null !== (n = null === (t = this.participants[e]) || void 0 === t ? void 0 : t.reduce((t, n) => { if (n.type === N.ParticipantTypes.USER) { let t = (0, o.getIsSpeaking)({ userId: e, checkIsMuted: !0 }); return t && (this.lastSpoke[e] = Date.now()), this.participantByIndex.set(n.id, { ...n, speaking: t, lastSpoke: this.lastSpoke[e], soundsharing: T.default.isSoundSharing(e) }), !0 } return t }, !1)) && void 0 !== n && n } updateParticipantQuality(e, t, n) { var i, r; return null !== (r = null === (i = this.participants[e]) || void 0 === i ? void 0 : i.reduce((e, i) => i.type === N.ParticipantTypes.STREAM ? (this.participantByIndex.set(i.id, { ...i, maxResolution: t, maxFrameRate: n }), !0) : e, !1)) && void 0 !== r && r } _getEmbeddedActivities() { let e = l.default.getEmbeddedActivitiesForChannel(this.channelId), t = l.default.getSelfEmbeddedActivityForChannel(this.channelId); return null == t ? e : (0, s.uniqBy)([...e, t], e => e.applicationId) } _getParticipantsForEmbeddedActivities() { return this._getEmbeddedActivities().map((e, t) => { var n, i, r; return { type: N.ParticipantTypes.ACTIVITY, id: e.applicationId, activityType: p.ActivityTypes.PLAYING, activityUrl: e.url, participants: [...null !== (i = e.participants) && void 0 !== i ? i : []], guildId: null !== (r = null === (n = E.default.getChannel(this.channelId)) || void 0 === n ? void 0 : n.getGuildId()) && void 0 !== r ? r : null, sortKey: t.toString() } }) } _getParticipantsForUser(e) { var t, n, i, r, s, a; let l, c; let m = [], p = f.default.getUser(e); if (null == p) return m; let C = h.default.getVoiceStateForChannel(this.channelId, e), R = h.default.getVoicePlatformForChannel(this.channelId, e), g = E.default.getChannel(this.channelId), L = null !== (i = null === (n = this.call) || void 0 === n ? void 0 : null === (t = n.ringing) || void 0 === t ? void 0 : t.includes(e)) && void 0 !== i && i; (null != C || L) && (l = { type: N.ParticipantTypes.USER, ...S.default.getUserStreamData(e, null == g ? void 0 : g.getGuildId()), user: p, id: p.id, voiceState: C, voicePlatform: R, speaking: (0, o.getIsSpeaking)({ userId: e, checkIsMuted: !0 }), lastSpoke: null !== (r = this.lastSpoke[e]) && void 0 !== r ? r : 0, soundsharing: T.default.isSoundSharing(e), ringing: L, userNick: A.default.getName(null == g ? void 0 : g.getGuildId(), this.channelId, p), localVideoDisabled: I.default.isLocalVideoDisabled(p.id) }, m.push(l)); let v = null !== (s = d.default.getStreamForUser(e, null == g ? void 0 : g.getGuildId())) && void 0 !== s ? s : d.default.getActiveStreamForUser(e, null == g ? void 0 : g.getGuildId()); if (null != v && v.channelId === this.channelId) { let t = (0, u.encodeStreamKey)(v), n = this.getParticipant(t), i = v.ownerId === _.default.getId() && d.default.isSelfStreamHidden(this.channelId), r = (null == n ? void 0 : n.type) === N.ParticipantTypes.STREAM ? { maxResolution: null != n.maxResolution ? { ...n.maxResolution } : void 0, maxFrameRate: n.maxFrameRate } : null; c = { ...S.default.getUserStreamData(e, null == g ? void 0 : g.getGuildId(), O.MediaEngineContextTypes.STREAM), ...r, type: i ? N.ParticipantTypes.HIDDEN_STREAM : N.ParticipantTypes.STREAM, id: t, userVideo: null !== (a = null == C ? void 0 : C.selfVideo) && void 0 !== a && a, user: p, userNick: A.default.getName(null == g ? void 0 : g.getGuildId(), this.channelId, p), stream: v }, m.push(c) } return m } constructor(e) { C(this, "channelId", void 0), C(this, "call", void 0), C(this, "participants", {}), C(this, "lastSpoke", {}), C(this, "participantByIndex", new a.SecondaryIndexMap(e => { var t; let n = []; return e.type === N.ParticipantTypes.USER && e.speaking && n.push("SPEAKING"), e.type === N.ParticipantTypes.USER && (null === (t = e.voiceState) || void 0 === t ? void 0 : t.selfVideo) ? (n.push("VIDEO"), !e.localVideoDisabled && n.push("FILTERED")) : (0, N.isStreamParticipant)(e) && (n.push("STREAM"), e.type !== N.ParticipantTypes.HIDDEN_STREAM && null != e.streamId && n.push("FILTERED")), e.type === N.ParticipantTypes.ACTIVITY && n.push("ACTIVITY"), n }, g)), this.channelId = e } } }, 358221: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("724458"), n("47120"); var i, r, s, a, o = n("512722"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"), E = n("317381"), I = n("710845"), T = n("258609"), f = n("569545"), S = n("199902"), h = n("314897"), A = n("523746"), m = n("592125"), N = n("944486"), p = n("606304"), O = n("594174"), C = n("33039"), R = n("979651"), g = n("413523"), L = n("354459"), v = n("981631"); let D = new I.default("ChannelRTCStore"), M = Object.freeze([]), y = [], P = {}, U = {}, b = {}, G = {}, w = {}, k = {}, B = {}, V = {}, x = {}, F = {}; function H(e) { let t = P[e]; return null == t && (t = new g.default(e), P[e] = t), t } function Y(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : y; return t.reduce((t, n) => e(H(n)) ? (function(e) { let t = H(e); if (0 === t.size()) return; let n = er(e) || X(t) ? v.ChannelModes.VIDEO : v.ChannelModes.VOICE; n === v.ChannelModes.VOICE ? (delete G[e], delete w[e]) : G[e] = n }(n), function(e) { let t = h.default.getId(), n = H(e); if (0 === n.size() || N.default.getVoiceChannelId() !== e) { Z(e, null); return } let i = L.ParticipantSelectionTypes.NONE, r = n.toArray(g.ChannelRTCParticipantsIndexes.STREAM).find(e => e.type === L.ParticipantTypes.STREAM && S.default.getActiveStreamForStreamKey(e.id)); if (null != r) l()(r.type === L.ParticipantTypes.STREAM, "Impossible condition"), i = r.id; else if (1 === n.size()) i = t; else if (1 === n.size(g.ChannelRTCParticipantsIndexes.VIDEO)) { let [e] = n.toArray(g.ChannelRTCParticipantsIndexes.VIDEO); i = e.id } else { var s; let e = n.toArray().find(e => e.type === L.ParticipantTypes.USER && e.id !== t && !e.ringing); i = null !== (s = null == e ? void 0 : e.id) && void 0 !== s ? s : t } let [a] = W(e); if (a !== L.ParticipantSelectionTypes.AUTO && a !== L.ParticipantSelectionTypes.NONE) { let e = n.getParticipant(a); (null == e || e.type === L.ParticipantTypes.STREAM && null == S.default.getActiveStreamForStreamKey(e.id)) && (a = L.ParticipantSelectionTypes.NONE) } Z(e, [a, i]) }(n), !0) : t, !1) } function j(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : y; return Y(t => t.updateParticipant(e), t) } function W(e) { var t; let n = m.default.getChannel(e), i = (null == n ? void 0 : n.isDM()) ? L.ParticipantSelectionTypes.AUTO : L.ParticipantSelectionTypes.NONE; return null !== (t = U[e]) && void 0 !== t ? t : [i, L.ParticipantSelectionTypes.NONE] } function K(e) { if (null == U[e]) return !1; let [t] = U[e]; return t !== L.ParticipantSelectionTypes.NONE } function z(e) { null == b[e] && (b[e] = { gridDurationMs: 0, focusDurationMs: 0, toggleCount: 0, lastUpdate: 0 }); let t = b[e], n = performance.now(), i = K(e); if (t.lastUpdate > 0) { let e = n - t.lastUpdate; t[i ? "focusDurationMs" : "gridDurationMs"] += e } t.lastUpdate = n } function Z(e, t) { z(e); let n = K(e); null == t ? delete U[e] : U[e] = t, n !== K(e) && b[e].toggleCount++ } function X(e) { return e.size(g.ChannelRTCParticipantsIndexes.STREAM) > 0 || e.size(g.ChannelRTCParticipantsIndexes.VIDEO) > 0 || e.hasEmbeddedActivity() } function Q(e) { delete P[e], delete U[e], delete G[e], delete w[e] } function q() { return Y(e => e.rebuild(), function() { let e = [], t = N.default.getChannelId(); null != t && e.push(t); let n = N.default.getVoiceChannelId(); null != n && !e.includes(n) && e.push(n); let i = T.default.getRemoteSessionId(), r = R.default.getVoiceStateForSession(h.default.getId(), i); (null == r ? void 0 : r.channelId) != null && e.push(null == r ? void 0 : r.channelId), d().difference(y, e).forEach(Q); let s = d().difference(e, y); return y = e, s }()) } function J() { return Y(e => e.updateEmbeddedActivities()) } function $(e) { let { userId: t } = e; return Y(e => e.updateParticipantSpeaking(t)) } function ee(e) { let { user: t } = e; return j(t.id) } function et(e) { let { channelId: t } = e; return Y(e => e.rebuild(), [t]) } function en(e) { let { channel: { id: t } } = e; return delete V[t], delete x[t], Q(t) } function ei(e) { let { streamKey: t } = e, { channelId: n, ownerId: i } = (0, f.decodeStreamKey)(t); return j(i, [n]) } function er(e) { var t; return !!(null === (t = m.default.getChannel(e)) || void 0 === t ? void 0 : t.isGuildVocal()) } class es extends(i = _.default.Store) { initialize() { this.waitFor(S.default, h.default, A.default, m.default, E.default, N.default, p.default, O.default, C.default, R.default), this.syncWith([E.default], J), this.syncWith([T.default], q) } getParticipantsVersion(e) { return H(e).version } getParticipants(e) { var t; return null !== (t = H(e).toArray()) && void 0 !== t ? t : M } getSpeakingParticipants(e) { var t; return null !== (t = H(e).toArray(g.ChannelRTCParticipantsIndexes.SPEAKING)) && void 0 !== t ? t : M } getFilteredParticipants(e) { return B[e] ? H(e).toArray(g.ChannelRTCParticipantsIndexes.FILTERED) : H(e).toArray() } getVideoParticipants(e) { var t; return null !== (t = H(e).toArray(g.ChannelRTCParticipantsIndexes.VIDEO)) && void 0 !== t ? t : M } getStreamParticipants(e) { var t; return null !== (t = H(e).toArray(g.ChannelRTCParticipantsIndexes.STREAM)) && void 0 !== t ? t : M } getActivityParticipants(e) { var t; return null !== (t = H(e).toArray(g.ChannelRTCParticipantsIndexes.ACTIVITY)) && void 0 !== t ? t : M } getParticipant(e, t) { return H(e).getParticipant(t) } getUserParticipantCount(e) { let t = H(e); return t.size() - t.size(g.ChannelRTCParticipantsIndexes.STREAM) - t.size(g.ChannelRTCParticipantsIndexes.ACTIVITY) } getParticipantsOpen(e) { var t; return null === (t = k[e]) || void 0 === t || t } getVoiceParticipantsHidden(e) { var t; return null !== (t = B[e]) && void 0 !== t && t } getSelectedParticipantId(e) { let [t, n] = W(e); return t === L.ParticipantSelectionTypes.NONE ? null : t !== L.ParticipantSelectionTypes.AUTO ? t : n === L.ParticipantSelectionTypes.NONE || n === L.ParticipantSelectionTypes.AUTO ? null : n } getSelectedParticipant(e) { let t = this.getSelectedParticipantId(e); return null == t ? null : H(e).getParticipant(t) } getSelectedParticipantStats(e) { let t = b[e]; return null == t ? {} : { view_mode_grid_duration_ms: Math.floor(t.gridDurationMs), view_mode_focus_duration_ms: Math.floor(t.focusDurationMs), view_mode_toggle_count: t.toggleCount } } getMode(e) { var t; return null !== (t = G[e]) && void 0 !== t ? t : er(e) ? v.ChannelModes.VIDEO : v.ChannelModes.VOICE } getLayout(e) { var t, n; let i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : v.AppContext.APP; if (__OVERLAY__) return v.ChannelLayouts.NORMAL; let r = m.default.getChannel(e), s = er(e) || (null == r ? void 0 : r.isBroadcastChannel()); return null !== (n = null === (t = w[e]) || void 0 === t ? void 0 : t[i]) && void 0 !== n ? n : s ? v.ChannelLayouts.NO_CHAT : v.ChannelLayouts.NORMAL } getChatOpen(e) { var t; return null !== (t = V[e]) && void 0 !== t && t } isFullscreenInContext() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : v.AppContext.APP; return Object.values(w).some(t => t[e] === v.ChannelLayouts.FULL_SCREEN) } getStageStreamSize(e) { return x[e] } getStageVideoLimitBoostUpsellDismissed(e) { return F[e] } } a = "ChannelRTCStore", (s = "displayName") in(r = es) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new es(c.default, { CONNECTION_OPEN: q, CONNECTION_OPEN_SUPPLEMENTAL: q, THREAD_LIST_SYNC: q, OVERLAY_INITIALIZE: q, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t, currentVoiceChannelId: n } = e; return null != t ? delete b[t] : null != n && (delete V[n], delete x[n], z(n)), q() }, CHANNEL_SELECT: function(e) { let { channelId: t, messageId: n } = e, i = q(), r = m.default.getChannel(t); return null == t || null == n || (null == r ? void 0 : r.type) !== v.ChannelTypes.GUILD_VOICE && (null == r ? void 0 : r.type) !== v.ChannelTypes.GUILD_STAGE_VOICE || V[t] ? i : (V[t] = !0, !0) }, CHANNEL_RTC_ACTIVE_CHANNELS: q, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t, initial: n } = e; return t.reduce((e, t) => { let { userId: i, channelId: r } = t; return n && null != r && !y.includes(r) ? e : j(i) || e }, !1) }, CHANNEL_CREATE: function(e) { let { channel: t } = e; if (t.type === v.ChannelTypes.GROUP_DM) { let e = t.originChannelId; if (null != e) { var n, i; return w[t.id] = { [v.AppContext.APP]: null !== (i = null === (n = w[e]) || void 0 === n ? void 0 : n[v.AppContext.APP]) && void 0 !== i ? i : v.ChannelLayouts.NORMAL }, !0 } t.isBroadcastChannel() && (w[t.id] = { [v.AppContext.APP]: v.ChannelLayouts.NO_CHAT }) } return !1 }, CHANNEL_DELETE: en, THREAD_DELETE: en, CALL_CREATE: et, CALL_UPDATE: et, CALL_DELETE: function(e) { let { channelId: t } = e; return Q(t) }, CHANNEL_RTC_SELECT_PARTICIPANT: function(e) { let { channelId: t, id: n } = e, i = H(t); null == n && i.toArray(g.ChannelRTCParticipantsIndexes.STREAM).forEach(e => { (0, L.isStreamParticipant)(e) && i.updateParticipant(e.user.id) }); let [, r] = W(t); if (Z(t, [null != n ? n : L.ParticipantSelectionTypes.NONE, r]), (0, f.isStreamKey)(n)) { try { let { ownerId: e } = (0, f.decodeStreamKey)(n); e === h.default.getId() && j(e, [t]) } catch (e) { D.warn("INVALID STREAM KEY FORMAT ".concat(n), e) }!X(i) && (k[t] = !1) } }, CHANNEL_RTC_UPDATE_LAYOUT: function(e) { let { channelId: t, layout: n, appContext: i } = e; w[t] = { ...w[t], [i]: n } }, CHANNEL_RTC_UPDATE_PARTICIPANTS_OPEN: function(e) { let { channelId: t, participantsOpen: n } = e; k[t] = n }, CHANNEL_RTC_UPDATE_VOICE_PARTICIPANTS_HIDDEN: function(e) { let { channelId: t, voiceParticipantsHidden: n } = e; B[t] = n }, CHANNEL_RTC_UPDATE_STAGE_STREAM_SIZE: function(e) { let { channelId: t, large: n } = e; x[t] = n }, CHANNEL_RTC_UPDATE_STAGE_VIDEO_LIMIT_BOOST_UPSELL_DISMISSED: function(e) { let { channelId: t, dismissed: n } = e; F[t] = n }, STREAM_UPDATE_SELF_HIDDEN: function(e) { let { channelId: t, selfStreamHidden: n } = e, i = h.default.getId(); if (n) { let [e] = W(t); (0, f.isStreamKey)(e) && e.includes(i) && Z(t, null) } j(i, [t]) }, CHANNEL_RTC_UPDATE_CHAT_OPEN: function(e) { let { channelId: t, chatOpen: n } = e; V[t] = n }, RTC_CONNECTION_VIDEO: function(e) { let { channelId: t, userId: n } = e; return j(n, [t]) }, RTC_CONNECTION_PLATFORM: function(e) { let { channelId: t, userId: n } = e; return j(n, [t]) }, AUDIO_SET_LOCAL_VIDEO_DISABLED: function(e) { let { userId: t } = e; return j(t) }, MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED: function(e) { let { channelId: t, senderUserId: n, maxResolution: i, maxFrameRate: r } = e; return Y(e => e.updateParticipantQuality(n, i, r), [t]) }, STREAM_CLOSE: ei, STREAM_DELETE: ei, STREAM_WATCH: function(e) { let { streamKey: t } = e, { channelId: n, ownerId: i } = (0, f.decodeStreamKey)(t); return j(i, [n]) }, SPEAKING: $, GUILD_SOUNDBOARD_SOUND_PLAY_START: $, GUILD_SOUNDBOARD_SOUND_PLAY_END: $, USER_UPDATE: ee, GUILD_MEMBER_UPDATE: ee, GUILD_DELETE: function(e) { let { guild: t } = e, n = []; if (d().forEach(y, e => { let i = m.default.getChannel(e); (null == i || i.getGuildId() === t.id) && n.push(e) }), 0 === n.length) return !1; d().forEach(n, e => Q(e)) } }) }, 44744: function(e, t, n) { "use strict"; n.r(t); var i = n("992774"), r = n("846027"), s = n("227196"), a = n("236035"), o = n("65154"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } t.default = new class e { nativeMuteChanged(e, t) { let { airpodsMuteSupported: n } = s.default.getCurrentConfig({ location: "NativeMuteManager nativeMuteChanged" }, { autoTrackExposure: !0 }); if (!!n) { if (e !== o.MediaEngineContextTypes.STREAM) { if (a.default.hasActiveCall()) r.default.setSelfMute(o.MediaEngineContextTypes.DEFAULT, t); else { if (this.nativeUnmuteDebounce) { this.nativeUnmuteDebounce = !1; return } this.needToUnmuteNative = !0, r.default.toggleSelfMute({ playSoundEffect: !1 }) } } } } updateNativeMute(e) { var t, n; let { airpodsMuteSupported: r } = s.default.getCurrentConfig({ location: "NativeMuteManager updateNativeMute" }, { autoTrackExposure: !0 }); if (!!r && e !== o.MediaEngineContextTypes.STREAM && !!this.needToUnmuteNative) !a.default.hasActiveCall() && (this.needToUnmuteNative = !1, this.nativeUnmuteDebounce = !0, null === (t = (n = (0, i.getVoiceEngine)()).setNativeMuteState) || void 0 === t || t.call(n, !1)) } constructor() { l(this, "nativeUnmuteDebounce", !1), l(this, "needToUnmuteNative", !1) } } }, 14516: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("19780"), s = n("358221"); class a extends i.default { handleFocusParticipant() { let e = r.default.getChannelId(); if (null != e) { var t, n; let i = s.default.getSelectedParticipantId(e), a = s.default.getVideoParticipants(e); null === (n = r.default.getRTCConnection()) || void 0 === n || n.setSelectedParticipant(null === (t = a.find(e => e.id === i && !e.localVideoDisabled)) || void 0 === t ? void 0 : t.id) } } constructor(...e) { var t, n, i; super(...e), t = this, n = "stores", i = new Map().set(s.default, this.handleFocusParticipant), n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new a }, 933546: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return i } }); function i(e, t) { return "".concat(e.toLowerCase().padEnd(32, "!")).concat(t.id) } }, 414910: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("354459"), r = n("65154"); let s = Object.freeze({ [i.ParticipantTypes.STREAM]: r.MediaEngineContextTypes.STREAM, [i.ParticipantTypes.HIDDEN_STREAM]: r.MediaEngineContextTypes.STREAM, [i.ParticipantTypes.USER]: r.MediaEngineContextTypes.DEFAULT, [i.ParticipantTypes.ACTIVITY]: r.MediaEngineContextTypes.DEFAULT }); function a(e) { return s[e] } }, 153248: function(e, t, n) { "use strict"; n.r(t); var i = n("317770"); class r extends i.default { _initialize() {} _terminate() {} hasActiveCall() { return !1 } } t.default = new r }, 236035: function(e, t, n) { "use strict"; n.r(t); var i = n("153248"); t.default = i.default }, 362721: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canSetVoiceChannelStatus: function() { return d }, default: function() { return _ } }); var i = n("442837"), r = n("496675"), s = n("700785"), a = n("231338"); let o = [a.Permissions.SET_VOICE_CHANNEL_STATUS, a.Permissions.CONNECT, a.Permissions.VIEW_CHANNEL], l = [a.Permissions.SET_VOICE_CHANNEL_STATUS]; function u(e, t, n, i) { return (n ? l : o).every(n => null == i ? t.can(n, e) : s.can({ permission: n, user: i, context: e })) } function d(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 ? arguments[2] : void 0; return u(e, r.default, t, n) } function _(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 ? arguments[2] : void 0; return (0, i.useStateFromStores)([r.default], () => u(e, r.default, t, n), [e, t, n]) } }, 966302: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return j } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("442837"), u = n("481060"), d = n("26151"), _ = n("922555"), c = n("287734"), E = n("249000"), I = n("43267"), T = n("933557"), f = n("703656"), S = n("932724"), h = n("672339"), A = n("898531"), m = n("923973"), N = n("189771"), p = n("560688"), O = n("871499"), C = n("136995"), R = n("25827"), g = n("131951"), L = n("594174"), v = n("451478"), D = n("465670"), M = n("421600"), y = n("792125"), P = n("358221"), U = n("793865"), b = n("981631"), G = n("65154"), w = n("689938"), k = n("152435"), B = n("661781"); let V = { width: 232, height: 315 }, x = { width: 232, height: 267 }, F = { width: 475, height: 267 }; function H(e) { let { header: t } = e, n = g.default.getCameraComponent(), s = (0, l.useStateFromStores)([g.default], () => g.default.getVideoDeviceId()), a = (0, A.default)(); return r.useEffect(() => { let e = L.default.getCurrentUser(); if (a && null != e) { let t = (0, S.getLastUsedVideoBackgroundOption)(e); (0, h.applyBackgroundOptionPreview)(t, s, { track: !1 }).catch(b.NOOP) } }, [a, s]), (0, i.jsxs)("div", { className: k.previewRoot, children: [(0, i.jsx)(u.Spinner, {}), (0, i.jsx)("div", { className: k.preview, children: (0, i.jsx)(n, { disabled: !1, deviceId: s, width: F.width, height: F.height }) }), (0, i.jsx)("div", { className: k.previewChannelHeader, children: t })] }) } function Y(e) { let { canVideo: t, channel: n, numVideoDevices: r } = e, { cameraUnavailable: s, enabled: o } = (0, m.default)(), l = (0, N.default)(n); return (0, i.jsxs)("div", { className: k.actions, children: [(0, i.jsx)(O.CenterControlButton, { iconComponent: D.default, color: "red", className: k.actionButton, label: w.default.Messages.DISMISS, onClick: () => d.default.stopRinging(n.id) }), t && (0, i.jsx)(u.Popout, { renderPopout: e => { let { closePopout: t } = e; return (0, i.jsx)(U.default, { onClose: t }) }, position: "top", align: "center", animation: u.Popout.Animation.FADE, children: (e, t) => { let { onClick: a } = e, { isShown: u } = t; return (0, i.jsx)(R.default, { join: !0, enabled: o, color: "green", centerButton: !0, hasPermission: l, cameraUnavailable: s, channel: n, onPopoutClick: r > 1 ? a : null, className: k.actionButton, popoutOpen: u, onCameraUnavailable: p.default, onChange: () => { c.default.selectVoiceChannel(n.id, !0), (0, f.transitionToGuild)(b.ME, n.id) } }) } }), (0, i.jsx)(C.default, { channel: n, color: "green", centerButton: !0, className: a()(k.actionButton, k.last) })] }) } function j(e) { let { animatedStyle: t, y: n, x: s, channel: c } = e, [f, S] = r.useState(!1), h = (0, I.getChannelIconURL)(c), A = (0, T.default)(c), [m, N] = (0, l.useStateFromStoresArray)([g.default], () => [g.default.supports(G.Features.VIDEO), Object.keys(g.default.getVideoDevices()).length]), p = (0, l.useStateFromStores)([v.default], () => v.default.isFocused()), O = (0, l.useStateFromStores)([P.default], () => P.default.getMode(c.id)), C = r.useCallback(e => { null != e.top && null != e.left && _.default.move(e.left, e.top) }, []), R = (0, o.useSpring)({ value: f ? 1 : 0, config: { ...o.config.stiff, clamp: !0 } }); r.useEffect(() => { let e = e => { e.keyCode === b.KeyboardKeys.ESCAPE && d.default.stopRinging(c.id) }; return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e) }, [c]); let L = O === b.ChannelModes.VIDEO && m && N > 0, D = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(M.default, { className: k.icon, ringing: p, src: null != h ? h : "", ringingType: M.default.RingingType.INCOMING, size: f ? u.AvatarSizes.SIZE_40 : u.AvatarSizes.SIZE_80 }), (0, i.jsxs)("div", { className: k.titleGroup, children: [(0, i.jsx)(u.Text, { className: k.title, color: "header-primary", variant: f ? "text-md/semibold" : "text-lg/semibold", children: A }), (0, i.jsx)(u.Text, { color: "header-secondary", className: k.subtitle, variant: f ? "text-sm/normal" : "text-md/normal", children: O === b.ChannelModes.VOICE ? w.default.Messages.INCOMING_CALL_ELLIPSIS : w.default.Messages.INCOMING_VIDEO_CALL_ELLIPSIS })] })] }), U = L ? V : x; return (0, i.jsx)(E.default, { className: k.wrapper, selector: ".".concat(k.root), initialPosition: { left: s, top: n }, maxX: window.innerWidth, maxY: window.innerHeight, onDragEnd: C, dragAnywhere: !0, children: (0, i.jsx)(i.Fragment, { children: (0, i.jsxs)(o.animated.div, { className: a()(k.root, B.elevationHigh, { [k.previewCamera]: f }, f ? (0, y.getThemeClass)("dark") : null), style: { ...t, width: R.value.interpolate([0, 1], [U.width, F.width]), minHeight: R.value.interpolate([0, 1], [U.height, F.height]), translateX: R.value.interpolate([0, 1], [0, -1 * Math.abs(F.width - U.width) / 2]) }, children: [f ? (0, i.jsx)(H, { header: D }) : (0, i.jsx)("div", { className: k.mainChannelInfo, children: D }), (0, i.jsx)(Y, { canVideo: L, channel: c, numVideoDevices: N }), L && !f ? (0, i.jsx)(u.Button, { size: u.Button.Sizes.SMALL, fullWidth: !0, look: u.Button.Looks.LINK, color: u.Button.Colors.PRIMARY, className: k.previewButton, onClick: () => S(!0), children: w.default.Messages.INCOMING_CALL_PREVIEW_CAMERA }) : null] }) }) }) } }, 221888: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return v } }), n("411104"), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("442837"), d = n("846519"), _ = n("481060"), c = n("239091"), E = n("410575"), I = n("199902"), T = n("594174"), f = n("321148"), S = n("794358"), h = n("823379"), A = n("5192"), m = n("354459"), N = n("981631"), p = n("689938"), O = n("265054"); function C(e, t) { switch (e) { case m.ParticipantTypes.ACTIVITY: return p.default.Messages.EMBEDDED_ACTIVITIES_NUM_PARTICIPANTS.format({ numUsers: t }); case m.ParticipantTypes.STREAM: return p.default.Messages.SPECTATORS.format({ numViewers: t }); default: throw Error("Unknown participant type.") } } function R(e) { let { users: t, disableInteraction: n, guildId: r, participantType: s, channelId: o, handleUserContextMenu: l } = e, u = C(s, t.length); return (0, i.jsx)(_.Dialog, { "aria-label": u, className: O.popoutWrapper, children: (0, i.jsxs)(_.Scroller, { className: O.scroller, children: [(0, i.jsx)(_.Heading, { variant: "heading-deprecated-12/semibold", className: O.memberListHeader, children: u }), (0, i.jsx)("div", { children: t.map(e => (0, i.jsx)(f.default, { guildId: null != r ? r : void 0, className: a()(O.memberListItem, { [O.popoutDisabled]: n }), textClassName: O.memberListItemText, user: e, disablePopout: n, nick: A.default.getNickname(r, o, e), onContextMenu: t => n ? null : l(t, e) }, e.id)) })] }) }) } function g(e) { let { users: t, guildId: n, channelId: r, maxVisibleUsers: s = 3, className: o, participantType: l } = e, u = C(l, t.length), d = t.length < s ? t.map(e => (0, i.jsx)("div", { className: O.viewersTooltipItem, children: A.default.getName(n, r, e) }, e.id)) : u; return (0, i.jsx)(_.TooltipContainer, { text: d, "aria-label": u, children: (0, i.jsxs)("div", { className: a()(O.viewers, o), children: [(0, i.jsx)(S.default, { className: O.viewersIcon }), (0, i.jsx)("span", { "aria-hidden": "true", children: t.length })] }) }) } let L = []; function v(e) { let { channelId: t, guildId: s, participant: o, className: f, compact: S = !1, disableInteraction: A = !1, maxVisibleUsers: p = 3 } = e, [C, v] = r.useState(!1), D = r.useRef(new d.DelayedCall(150, () => v(!1))), M = (0, u.useStateFromStoresArray)([I.default, T.default], () => { if (o.type === m.ParticipantTypes.STREAM) { let e = I.default.getViewerIds(o.id); return e.length > 0 ? e.map(e => T.default.getUser(e)).filter(h.isNotNullish) : L } return o.type === m.ParticipantTypes.ACTIVITY ? o.participants.length > 0 ? Array.from(o.participants).map(e => T.default.getUser(e.userId)).filter(h.isNotNullish) : L : L }, [o]), y = r.useCallback(() => { D.current.cancel(), v(!0) }, []), P = r.useCallback(() => { D.current.delay() }, []), U = r.useCallback((e, t) => { y(), (0, c.openContextMenuLazy)(e, async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("36441"), n.e("15421")]).then(n.bind(n, "881351")); return n => (0, i.jsx)(e, { ...n, user: t }) }, { onClose: P }) }, [P, y]); if (0 === M.length) return null; if (S) return (0, i.jsx)(g, { maxVisibleUsers: p, users: M, guildId: s, channelId: t, className: f, participantType: o.type }); let b = l()(M).take(p).map(e => (0, i.jsx)(_.Avatar, { src: e.getAvatarURL(s, 24), "aria-label": e.username, size: _.AvatarSizes.SIZE_24, className: O.viewer }, e.id)).value(); return M.length > p && (b[b.length - 1] = (0, i.jsxs)("div", { className: O.overflow, children: ["+", M.length - p + 1] }, "overflow")), (0, i.jsx)(E.default, { section: N.AnalyticsSections.STREAM_VIEWER_POPOUT, children: (0, i.jsx)("div", { onMouseEnter: y, onMouseLeave: P, children: (0, i.jsx)(_.Popout, { renderPopout: () => (0, i.jsx)(R, { participantType: o.type, handleUserContextMenu: U, guildId: s, channelId: t, users: M, disableInteraction: A }), shouldShow: C, position: "top", children: () => (0, i.jsx)("div", { className: a()(O.viewers, f), children: b }) }) }) }) } }, 793865: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"); n("470079"); var r = n("512722"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("410575"), u = n("594174"), d = n("907285"), _ = n("737013"), c = n("981631"), E = n("689938"); function I(e) { let { onClose: t, onSelect: n } = e, r = (0, a.useStateFromStores)([u.default], () => { let e = u.default.getCurrentUser(); return s()(null != e, "VideoDeviceMenu: currentUser cannot be undefined"), e }), I = (0, d.default)(), T = (0, _.default)(r.id); return (0, i.jsx)(l.default, { object: c.AnalyticsObjects.CONTEXT_MENU, children: (0, i.jsxs)(o.Menu, { onClose: t, navId: "video-device-context", "aria-label": E.default.Messages.FORM_LABEL_VIDEO_DEVICE, onSelect: n, children: [(0, i.jsx)(o.MenuGroup, { label: E.default.Messages.FORM_LABEL_VIDEO_DEVICE, children: I }), (0, i.jsx)(o.MenuGroup, { children: T })] }) }) } }, 907285: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("846027"), o = n("131951"); function l() { let e = (0, r.useStateFromStores)([o.default], () => Object.values(o.default.getVideoDevices())), t = (0, r.useStateFromStores)([o.default], () => o.default.getVideoDeviceId()); return e.map(e => { let { id: n, disabled: r, name: o } = e; return (0, i.jsx)(s.MenuRadioItem, { group: "video-devices", id: "video-device-".concat(n), disabled: r, label: o, checked: n === t, action: () => a.default.setVideoDevice(n) }, "video-device-".concat(n)) }) } }, 737013: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("898531"), o = n("314897"), l = n("131951"), u = n("689938"), d = n("608667"); function _(e) { let t = (0, s.useModalContext)(), _ = (0, r.useStateFromStores)([l.default], () => l.default.isVideoEnabled()), c = (0, r.useStateFromStores)([o.default], () => o.default.getId() === e), E = (0, a.default)(); return (!_ || E) && c ? (0, i.jsx)(s.MenuItem, { id: "change-video-background", label: (0, i.jsx)("div", { className: d.item, children: _ ? u.default.Messages.CAMERA_CHANGE_VIDEO_BACKGROUND_MENU_ITEM : u.default.Messages.CAMERA_PREVIEW_MENU_ITEM }), action: function() { (0, s.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("5528"), n.e("24267")]).then(n.bind(n, "601572")); return t => (0, i.jsx)(e, { ...t, videoEnabled: _ }) }, { modalKey: "camera-preview", contextKey: t }) } }) : null } }, 418469: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("569545"), o = n("687516"), l = n("314897"), u = n("959457"), d = n("689938"); function _(e, t, _) { var c; let E = (0, o.useGetStreamApplication)(e), I = (0, r.useStateFromStores)([l.default], () => l.default.getId()), T = null != e ? (0, a.encodeStreamKey)(e) : u.default.getActiveStreamKey(), f = null !== (c = u.default.getVideoStats(T)) && void 0 !== c ? c : {}, S = { media_session_id: u.default.getMediaSessionId(T), rtc_connection_id: u.default.getRtcConnectionId(T), stream_region: u.default.getRegion(T), max_viewers: u.default.getMaxViewers(T), ...f }; return null == e ? null : (0, i.jsx)(s.MenuItem, { id: "report-stream-problem", label: d.default.Messages.STREAM_REPORT_PROBLEM_MENU_ITEM, action: () => { null == _ || _(), null != e && (0, s.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("75994")]).then(n.bind(n, "340140")); return n => (0, i.jsx)(t, { stream: e, streamApplication: E, isStreamer: I === (null == e ? void 0 : e.ownerId), analyticsData: S, ...n }) }) } }) } }, 776031: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return p } }); var i = n("735250"), r = n("470079"), s = n("848246"), a = n("442837"), o = n("481060"), l = n("846027"), u = n("2052"), d = n("451467"), _ = n("386542"), c = n("933843"), E = n("485731"), I = n("361291"), T = n("430824"), f = n("131951"), S = n("594174"), h = n("981631"), A = n("37113"), m = n("65154"), N = n("689938"); function p(e, t) { let { preset: p, resolution: O, fps: C } = (0, a.useStateFromStoresObject)([I.default], () => I.default.getState()), R = (0, a.useStateFromStores)([f.default], () => f.default.getGoLiveSource()), g = (0, a.useStateFromStores)([S.default], () => S.default.getCurrentUser()), L = (0, a.useStateFromStores)([T.default], () => { var t; return null === (t = T.default.getGuild(null == e ? void 0 : e.guildId)) || void 0 === t ? void 0 : t.premiumTier }), { location: v } = (0, u.useAnalyticsContext)(), { available: D, activated: M } = (0, _.usePerksDemo)(s.EntitlementFeatureNames.STREAM_HIGH_QUALITY), y = r.useCallback((e, r, s, a) => { if (e) { if (null != R) { let e = { qualityOptions: { preset: A.ApplicationStreamPresets.PRESET_CUSTOM, resolution: r, frameRate: s }, context: m.MediaEngineContextTypes.STREAM }; null != R.desktopSource ? e.desktopSettings = { sourceId: R.desktopSource.id, sound: !0 } : null != R.cameraSource && (e.cameraSettings = { videoDeviceGuid: R.cameraSource.videoDeviceGuid, audioDeviceGuid: R.cameraSource.audioDeviceGuid }), D && (0, E.hqStreamingSetEnabled)(!(0, c.ineligibleQualitySetting)(r, s)), l.default.setGoLiveSource(e) } } else { var u, d; u = t, d = { ...v, object: h.AnalyticsObjects.RADIO_ITEM, objectType: a }, (0, o.openModalLazy)(async () => { let { default: e } = await n.e("41549").then(n.bind(n, "78865")); return t => (0, i.jsx)(e, { ...t, analyticsSource: d }) }, { contextKey: u === h.AppContext.POPOUT ? o.POPOUT_MODAL_CONTEXT : o.DEFAULT_MODAL_CONTEXT }) } }, [t, v, R, D]); if (null == e) return null; let P = p === A.ApplicationStreamPresets.PRESET_DOCUMENTS ? A.ApplicationStreamFPS.FPS_30 : C, U = A.ApplicationStreamFPSButtonsWithSuffixLabel.map(e => { let { value: t, label: n } = e, r = (0, d.default)(A.ApplicationStreamPresets.PRESET_CUSTOM, O, t, g, L); return D && !M && (r = !1), (0, i.jsx)(o.MenuRadioItem, { group: "stream-settings-fps", id: "stream-settings-fps-".concat(t), label: n, checked: t === C, action: () => y(r, O, t, h.AnalyticsObjectTypes.RESOLUTION) }, "stream-settings-fps-".concat(t)) }), b = A.ApplicationStreamResolutionButtonsWithSuffixLabel.map(e => { let { value: t, label: n } = e, r = (0, d.default)(A.ApplicationStreamPresets.PRESET_CUSTOM, t, P, g, L); return D && !M && (r = !1), (0, i.jsx)(o.MenuRadioItem, { group: "stream-settings-resolution", id: "stream-settings-resolution-".concat(t), label: n, checked: t === O, action: () => y(r, t, P, h.AnalyticsObjectTypes.RESOLUTION) }, "stream-settings-resolution-".concat(t)) }); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(o.MenuGroup, { label: N.default.Messages.SCREENSHARE_FRAME_RATE, children: U }), (0, i.jsx)(o.MenuGroup, { label: N.default.Messages.STREAM_RESOLUTION, children: b })] }) } }, 4646: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } async function r(e) { let t = new s, n = []; for (let i of Object.keys(e)) n.push(t.loadRemoteImage(i, e[i])); return await Promise.all(n), t } n.r(t), n.d(t, { loadAssetMap: function() { return r } }), n("653041"), n("47120"); class s { loadFonts() { return Promise.resolve() } async loadRemoteImage(e, t) { let n = new Image; return n.src = t, n.crossOrigin = "anonymous", await n.decode(), this.assets[e] = n, Promise.resolve() } get(e) { return this.assets[e] } has(e) { return null != this.assets[e] } constructor() { i(this, "assets", {}), i(this, "fontManager", void 0) } } }, 129508: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("512722"), r = n.n(i), s = n("921608"), a = n("693824"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } t.default = class e { getCanvas() { return this.canvas } setColor(e) { this.color = e } setFont(e) { var t, n, i, r, s; this.font.style = null !== (t = e.style) && void 0 !== t ? t : this.font.style, this.font.size = null !== (n = e.size) && void 0 !== n ? n : this.font.size, this.font.weight = null !== (i = e.weight) && void 0 !== i ? i : this.font.weight, this.font.family = null !== (r = e.family) && void 0 !== r ? r : this.font.family, this.font.truncate = null !== (s = e.truncate) && void 0 !== s ? s : this.font.truncate } getLoadedImage(e) { r()(null != this.assetMap, "DiscordCanvas: An AssetStore has not been initialized."); let t = this.assetMap.get(e); if (void 0 === t) { console.error("DiscordCanvas: AssetMap hasn't loaded ".concat(e, ". Make sure to load it before trying to render.")); return } return t } drawRoundedImageWithFallbacks(e, t, n, i, r) { for (let s of e) { let e = this.drawRoundedImage(s, t, n, i, r); if (e !== a.DrawResultStatus.Failure) return e } return a.DrawResultStatus.Failure } constructor(e, t) { o(this, "color", "black"), o(this, "font", { style: "normal", weight: 300, size: s.DEFAULT_FONT_SIZE, family: ["serif"], truncate: a.TextTruncationMethod.None }), o(this, "assetMap", void 0), o(this, "canvas", void 0), this.canvas = e, this.assetMap = t } } }, 665672: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("512722"), r = n.n(i); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { setExporter(e) { this.exporter = e } export (e) { r()(null != this.exporter, "DiscordCanvas: Exporting the canvas requires a valid DiscordCanvasExporter to be initialized."); let t = this.canvas.getCanvasForExport(); return r()(null != t, "DiscordCanvas: Couldn't get a canvas for export."), this.exporter.exportCanvas(t, e) } constructor(e, t) { s(this, "canvas", void 0), s(this, "exporter", void 0), this.canvas = e, this.exporter = t } } }, 97008: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("141795"), r = n("476326"), s = n("956664"), a = n("693824"); t.default = class e { toDataUrl(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "png", n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1; return e.toDataURL(t, n) } async exportCanvas(e, t) { let { format: n, fileType: o = "png", quality: l = 1, fileName: u } = t; if (n === a.DiscordCanvasExporterOutputFormats.Base64) return this.toDataUrl(e, o, l); if (n === a.DiscordCanvasExporterOutputFormats.Blob) { let t = this.toDataUrl(e, o, l); return (0, s.dataUrlToBlob)(t) } if (n === a.DiscordCanvasExporterOutputFormats.File) { let t = this.toDataUrl(e, o, l); return await (0, s.dataUrlToFile)(t, u, "image/png") } if (n === a.DiscordCanvasExporterOutputFormats.CloudUpload) { let { channelId: n } = t, a = this.toDataUrl(e, o, l), d = await (0, s.dataUrlToFile)(a, u, "image/png"); return new i.CloudUpload({ file: d, platform: r.UploadPlatform.WEB, isThumbnail: !1 }, n) } throw Error("DiscordCanvas: ".concat(n, " is not a valid export format.")) } } }, 503082: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }), n("47120"); var i = n("512722"), r = n.n(i), s = n("129508"), a = n("921608"), o = n("693824"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class u extends s.default { getCanvasForExport() { return this.canvas } setContextProperties() { null != this.context && (this.context.fillStyle = this.color, this.context.strokeStyle = this.color, this.context.font = "".concat(this.font.style, " ").concat(this.font.weight, " ").concat(this.font.size, "px ").concat(this.font.family.join(", "))) } setSize(e, t) { let { w: n, h: i } = e; null != this.context && null != t ? (this.canvas.width = n * t, this.canvas.height = i * t, this.context.scale(t, t)) : (this.canvas.width = n, this.canvas.height = i) } clearRect(e) { if (null == this.context) return; let { x: t, y: n, w: i, h: r } = e; this.context.clearRect(t, n, i, r) } restoreContext() { null != this.context && this.context.restore() } drawRect(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; if (null == this.context) return; let { x: i, y: r, w: s, h: a } = e; n && this.setContextProperties(), t ? this.context.fillRect(i, r, s, a) : this.context.strokeRect(i, r, s, a) } drawRoundedRect(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = !(arguments.length > 3) || void 0 === arguments[3] || arguments[3]; if (null == this.context) return; let { x: r, y: s, w: a, h: o } = e; i && this.setContextProperties(), this.context.beginPath(), this.context.roundRect(r, s, a, o, t), n ? this.context.fill() : this.context.stroke() } drawText(e, t, n) { var i, s; if (null == this.context) return; this.setContextProperties(); let l = null !== (i = t.w) && void 0 !== i ? i : this.canvas.width - t.x, u = this.context.measureText(e), d = !1, _ = this.font.size, c = (e, t) => { null != this.context && (n ? this.context.fillText(e, t.x, t.y) : this.context.strokeText(e, t.x, t.y)) }, E = e => { if (null == this.context || u.width <= a.TEXT_TRUNCATION_PADDING_PX) return ""; let t = "".concat(e); for (; u.width + a.TEXT_TRUNCATION_PADDING_PX > l;) t = t.slice(0, -4), u = this.context.measureText(t), d = !0; return d && (t += "..."), t }; if (this.font.truncate === o.TextTruncationMethod.None && c(e, t), this.font.truncate === o.TextTruncationMethod.Truncate && c(e = E(e), t), this.font.truncate === o.TextTruncationMethod.Wrap) { let n = e.split(" "), i = 1 / 0, a = "", o = 0; for (null != t.h && (i = t.h / _, r()(i > 0, "DiscordCavas: boundingBox.h of ".concat(t.h, " results in 0 visible lines with font size of ").concat(_))); n.length > 0;) if ((u = this.context.measureText(a + " " + n[0])).width > l) { let e = !1; if (o + 1 >= i && n.length > 0 && (e = !0), "" !== a ? (c(e ? E(a + "...") : a, { x: t.x, y: t.y + _ * o }), a = "") : c(E(null !== (s = n.shift()) && void 0 !== s ? s : ""), { x: t.x, y: t.y + _ * o }), e) break; o += 1 } else a += " ".concat(n.shift()), 0 === n.length && c(a, { x: t.x, y: t.y + _ * o }) } return { x: t.x, y: t.y, w: u.width, h: u.actualBoundingBoxAscent + u.actualBoundingBoxDescent } } drawFormattedMessage(e, t, n) { this.font.truncate === o.TextTruncationMethod.Wrap && console.warn("DiscordCavas: `drawFormattedMessage` doesn't currently support wrapping formatted text. The results of this draw likely won't match your expectations."); let i = this.font.weight, r = (e, t, n) => { let r; if ("strong" === e.type) this.setFont({ weight: 700 }); return Array.isArray(e.content) ? r = s(e.content, t, n) : r = this.drawText(e.content, t, n), this.setFont({ weight: i }), r }, s = (e, t, n) => { let i = 0; return e.forEach(e => { let { x: s, y: a, w: o, h: l } = t, u = null != o ? o - i : void 0, d = r(e, { x: s + i, y: a, w: u, h: l }, n); null != d && (i += d.w) }), { x: t.x + i, y: t.y, w: i, h: this.font.size } }; Array.isArray(e) ? s(e, t, n) : r(e, t, n) } drawImage(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : { fillMode: o.FillMode.Stretch }; r()(null != this.assetMap, "DiscordCavas: `drawImage` requires an AssetMap to be initialized."); let { fillMode: s } = i; if (null == this.context) return o.DrawResultStatus.Failure; let a = this.assetMap.get(e); if (null == a) return o.DrawResultStatus.ImageNotLoaded; if (null != n) { if (s === o.FillMode.Contain) { let i; let r = { w: a.width, h: a.height }, s = +(r.w / r.h).toFixed(1); if (+(n.w / n.h).toFixed(1) > s) { let e = n.h * s; i = { x: t.x + (n.w - e) / 2, y: t.y, w: e, h: n.h } } else { let e = n.w / s; i = { x: t.x, y: t.y + (n.h - e) / 2, w: n.w, h: e } } return this.drawCroppedImage(e, { x: 0, y: 0, w: r.w, h: r.h }, { x: i.x, y: i.y, w: i.w, h: i.h }), o.DrawResultStatus.Success } if (s === o.FillMode.Cover) { var l, u, d, _; let r; let s = { w: a.width, h: a.height }, c = +(s.w / s.h).toFixed(1), E = +(n.w / n.h).toFixed(1); if (E > c) { let e = s.w / E; r = { x: 0, y: (s.h - e) * (null !== (u = null == i ? void 0 : null === (l = i.focus) || void 0 === l ? void 0 : l.y) && void 0 !== u ? u : .5), w: a.width, h: e } } else { let e = s.h * E; r = { x: (a.width - e) * (null !== (_ = null == i ? void 0 : null === (d = i.focus) || void 0 === d ? void 0 : d.x) && void 0 !== _ ? _ : .5), y: 0, w: e, h: a.height } } return this.drawCroppedImage(e, r, { x: t.x, y: t.y, w: n.w, h: n.h }), o.DrawResultStatus.Success } this.context.drawImage(a, t.x, t.y, n.w, n.h) } else this.context.drawImage(a, t.x, t.y); return o.DrawResultStatus.Success } drawRoundedImage(e, t, n, i, r) { if (null == this.context) return o.DrawResultStatus.Failure; let { x: s, y: a } = t, { w: l, h: u } = n; this.context.save(); let d = new Path2D; d.roundRect(s, a, l, u, i), this.context.clip(d); let _ = this.drawImage(e, t, n, r); return this.restoreContext(), _ } drawCroppedImage(e, t, n) { var i; if (null == this.context) return o.DrawResultStatus.Failure; let r = null === (i = this.assetMap) || void 0 === i ? void 0 : i.get(e); if (null == r) return o.DrawResultStatus.ImageNotLoaded; let { x: s, y: a, w: l, h: u } = t, { x: d, y: _, w: c, h: E } = n; return this.context.drawImage(r, s, a, l, u, d, _, c, E), o.DrawResultStatus.Success } drawPath(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1; if (null == this.context) return o.DrawResultStatus.Failure; this.setContextProperties(), this.context.save(); let r = new Path2D(e); return this.context.translate(t.x, t.y), this.context.scale(i, i), n ? this.context.fill(r, "evenodd") : this.context.stroke(r), this.restoreContext(), o.DrawResultStatus.Success } setGradientFillStyle(e, t, n) { if (null == this.context) return; let i = this.context.createLinearGradient(t.x, t.y, n.x, n.y); for (let { color: t, stop: n } of e) i.addColorStop(n, t); this.context.fillStyle = i } drawGradientRect(e, t, n, i) { return null == this.context ? o.DrawResultStatus.Failure : (this.setGradientFillStyle(e, t, n), this.drawRect(i, !0, !1), o.DrawResultStatus.Success) } drawRoundedGradientRect(e, t, n, i, r) { return null == this.context ? o.DrawResultStatus.Failure : (this.setGradientFillStyle(e, t, n), this.drawRoundedRect(i, r, !0, !1), o.DrawResultStatus.Success) } clip(e, t) { if (null == this.context) return; this.context.save(); let { x: n, y: i } = e, r = new Path2D(t); this.context.translate(n, i), this.context.clip(r) } clipRect(e, t) { if (null == this.context) return; this.context.save(); let { x: n, y: i, w: r, h: s } = e; if (t) { let e = new Path2D; e.moveTo(0, 0), e.lineTo(this.canvas.width, 0), e.lineTo(this.canvas.width, this.canvas.height), e.lineTo(0, this.canvas.height), e.lineTo(0, 0), e.closePath(), e.rect(n, i, r, s), this.context.clip(e, "evenodd") } else { let e = new Path2D; e.rect(n, i, r, s), this.context.clip(e) } } clipRoundedRect(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = arguments.length > 2 ? arguments[2] : void 0; if (null == this.context) return; this.context.save(); let { x: i, y: r, w: s, h: a } = e; if (n) { let e = new Path2D; e.moveTo(0, 0), e.lineTo(this.canvas.width, 0), e.lineTo(this.canvas.width, this.canvas.height), e.lineTo(0, this.canvas.height), e.lineTo(0, 0), e.closePath(), e.roundRect(i, r, s, a, t), this.context.clip(e, "evenodd") } else { let e = new Path2D; e.roundRect(i, r, s, a, t), this.context.clip(e) } } constructor(e, t) { super(e, t), l(this, "canvas", void 0), l(this, "context", void 0), this.canvas = e, this.context = this.canvas.getContext("2d"), null != this.context && (this.context.imageSmoothingQuality = "high") } } }, 921608: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_FONT_SIZE: function() { return r }, TEXT_TRUNCATION_PADDING_PX: function() { return i } }); let i = 12, r = 24 }, 693824: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { DiscordCanvasExporterOutputFormats: function() { return s }, DrawResultStatus: function() { return a }, FillMode: function() { return r }, TextTruncationMethod: function() { return i } }), (o = i || (i = {}))[o.None = 0] = "None", o[o.Truncate = 1] = "Truncate", o[o.Wrap = 2] = "Wrap", (l = r || (r = {}))[l.Stretch = 0] = "Stretch", l[l.Contain = 1] = "Contain", l[l.Cover = 2] = "Cover", (u = s || (s = {}))[u.Base64 = 0] = "Base64", u[u.Blob = 1] = "Blob", u[u.File = 2] = "File", u[u.CloudUpload = 3] = "CloudUpload", (d = a || (a = {}))[d.Success = 0] = "Success", d[d.Failure = 1] = "Failure", d[d.ImageNotLoaded = 2] = "ImageNotLoaded" }, 690725: function(e, t, n) { "use strict"; n.r(t), n.d(t, { generateImageFromCanvas: function() { return s } }), n("411104"); var i = n("4646"), r = n("665672"); async function s(e) { let { assetsToLoad: t, drawImage: s, exportConfigs: a } = e, o = await (0, i.loadAssetMap)(t); await o.loadFonts(); { let e = n("503082").default, t = n("97008").default, i = document.createElement("canvas"), l = new e(i, o), u = new t, d = new r.default(l, u); s(d.canvas); let _ = await d.export(a); return i.remove(), _ } } }, 596401: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { AssetType: function() { return r }, CHANGELOG_MODAL_KEY: function() { return _ }, CHANGELOG_URL: function() { return E }, ChangelogLoadState: function() { return s }, ChangelogPlatforms: function() { return i }, SYSTEM_UPDATES_USER_ID: function() { return c } }); let _ = "CHANGELOG_MODAL", c = "1232523165893132288", E = "https://discord.com/category/product"; (o = i || (i = {}))[o.DESKTOP = 0] = "DESKTOP", o[o.MOBILE = 1] = "MOBILE", (l = r || (r = {}))[l.YOUTUBE_VIDEO_ID = 0] = "YOUTUBE_VIDEO_ID", l[l.IMAGE = 1] = "IMAGE", (u = s || (s = {}))[u.NOT_LOADED = 0] = "NOT_LOADED", u[u.LOADED_SUCCESS = 1] = "LOADED_SUCCESS", u[u.LOADED_FAILURE = 2] = "LOADED_FAILURE", (d = a || (a = {})).SPECIAL = "special", d.STANDARD = "standard" }, 839627: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_changelog", label: "New Changelog Messages", defaultConfig: { canReceiveMessage: !1 }, treatments: [{ id: 1, label: "Receive changelog updates as messages", config: { canReceiveMessage: !0 } }, { id: 2, label: "Receive unpublished changelog updates as messages (server)", config: { canReceiveMessage: !0 } }] }); t.default = i }, 688798: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("661111"), s = n("493683"), a = n("904245"), o = n("232567"), l = n("147913"), u = n("3148"), d = n("960412"), _ = n("706454"), c = n("695346"), E = n("375954"), I = n("709054"), T = n("839627"), f = n("802098"), S = n("128014"), h = n("163379"), A = n("596401"), m = n("981631"), N = n("930441"); function p(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } async function O(e) { if (c.LastReceivedChangelogId.getSetting() >= e) return; let t = await s.default.getOrEnsurePrivateChannel(A.SYSTEM_UPDATES_USER_ID); if (null == t) return; await a.default.fetchMessages({ channelId: t, limit: 1 }); let n = E.default.getLastMessage(t); if (null == n) return; let i = (0, u.default)({ ...n, channelId: t, messageReference: void 0, poll: void 0, changelogId: n.changelogId }); a.default.receiveMessage(t, { ...i, state: m.MessageStates.SENT, channel_id: t }, !0, {}) } class C extends l.default { constructor(...e) { super(...e), p(this, "actions", { POST_CONNECTION_OPEN: e => this.handleConnectionOpen(e) }), p(this, "handleConnectionOpen", async e => { let { canReceiveMessage: t } = T.default.getCurrentConfig({ location: "changelog_manager" }, { autoTrackExposure: !1 }), n = await r.default.fetchChangelogConfig(), s = n.body, a = function(e, t) { let n = 0, i = null; for (var [r, { min_version: s }] of Object.entries(e)) s <= t && s > n && (n = s, i = r); return i }(s, (0, S.getClientVersionForChangelog)()); if (i.default.dispatch({ type: "CHANGE_LOG_SET_CONFIG", config: n.body, latestChangelogId: a }), null == a) return; let l = await (0, d.fetchEmailSettings)(); if (t && (null == l ? void 0 : l.categories[N.EmailCategories.UPDATES_AND_ANNOUNCEMENTS])) { (0, o.getUser)(A.SYSTEM_UPDATES_USER_ID), O(a); return } if (!0 !== s[a].show_on_startup) return; let u = f.default.lastSeenChangelogId(), c = f.default.lastSeenChangelogDate(); if (null != u && 0 >= I.default.compare(a, u)) return; let E = await r.default.fetchChangelog(a, _.default.locale); if (null != E) { if (null == c || null == f.default.lastSeenChangelogDate()) { r.default.markChangelogAsSeen(a, E.date); return }!f.default.isLocked() && new Date(E.date) > new Date(c) && (0, h.openChangelog)() } }) } } t.default = new C }, 802098: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("433517"), u = n("570140"), d = n("706454"), _ = n("695346"), c = n("581883"), E = n("596401"); let I = {}, T = {}, f = null, S = null, h = null, A = "lastChangeLogDate", m = null, N = null, p = new Set; function O() { m = _.LastReceivedChangelogId.getSetting() } class C extends(i = o.default.Store) { initialize() { this.waitFor(d.default, c.default), this.syncWith([d.default], () => !0), this.syncWith([c.default], O); let e = l.Storage.get(A); if (null != e) try { N = new Date(e) } catch { l.Storage.remove(A) } } getChangelog(e, t) { var n, i; return null !== (i = null === (n = I[e]) || void 0 === n ? void 0 : n[t]) && void 0 !== i ? i : null } latestChangelogId() { return f } getChangelogLoadStatus(e, t) { var n, i; return null !== (i = null === (n = T[e]) || void 0 === n ? void 0 : n[t]) && void 0 !== i ? i : E.ChangelogLoadState.NOT_LOADED } hasLoadedConfig() { return null != h } getConfig() { return h } overrideId() { return S } lastSeenChangelogId() { return m } lastSeenChangelogDate() { return N } getStateForDebugging() { return { changelogConfig: h, loadedChangelogs: T, lastSeenChangelogId: m, lastSeenChangelogDate: N } } isLocked() { return p.size > 0 } } a = "ChangelogStore", (s = "displayName") in(r = C) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new C(u.default, { CHANGE_LOG_LOCK: function(e) { let { key: t } = e; if (p.has(t)) return !1; (p = new Set(p)).add(t) }, CHANGE_LOG_UNLOCK: function(e) { let { key: t } = e; if (!p.has(t)) return !1; (p = new Set(p)).delete(t) }, CHANGE_LOG_SET_CONFIG: function(e) { let { config: t, latestChangelogId: n } = e; f = n, h = t }, CHANGE_LOG_FETCH_SUCCESS: function(e) { let { id: t, changelog: n } = e; null == I[t] && (I[t] = {}), I[t][n.locale] = { id: t, date: n.date, body: n.content, revision: 1, locale: n.locale, [n.asset_type === E.AssetType.YOUTUBE_VIDEO_ID ? "youtube_video_id" : "image"]: n.asset }, null == T[t] && (T[t] = {}), T[t][n.locale] = E.ChangelogLoadState.LOADED_SUCCESS }, CHANGE_LOG_FETCH_FAILED: function(e) { let { id: t, locale: n } = e; if (null != I[t] && null != I[t][n]) return !1; null == T[t] && (T[t] = {}), T[t][n] = E.ChangelogLoadState.LOADED_FAILURE }, CHANGE_LOG_SET_OVERRIDE: function(e) { let { id: t } = e; S = t }, CHANGE_LOG_MARK_SEEN: function(e) { let { changelogDate: t } = e; N = new Date(t), l.Storage.set(A, t) } }) }, 128014: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getClientVersionForChangelog: function() { return r } }); var i = n("960048"); function r() { var e; let t = parseInt((e = "298246", "298246")); return Number.isNaN(t) && (i.default.captureMessage("Trying to open a changelog for an invalid build number ".concat("298246")), t = 0), t } }, 163379: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openChangelog: function() { return a } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("596401"); function a() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; !(!e && (0, r.hasAnyModalOpen)()) && (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("81539"), n.e("44808")]).then(n.bind(n, "678420")); return t => (0, i.jsx)(e, { ...t }) }, { modalKey: s.CHANGELOG_MODAL_KEY }) } }, 702321: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("592125"), r = n("596401"); function s(e) { return null != e && e === i.default.getDMFromUserId(r.SYSTEM_UPDATES_USER_ID) } }, 580552: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("596401"); function r(e) { return null != e && e === i.SYSTEM_UPDATES_USER_ID } }, 176505: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ChannelFlags: function() { return _ }, FAKE_PLACEHOLDER_PRIVATE_CHANNEL_ID: function() { return T }, MAX_CHANNEL_TOPIC_LENGTH: function() { return c }, MAX_FORUM_CHANNEL_TOPIC_LENGTH: function() { return E }, StaticChannelId: function() { return r }, StaticChannelIds: function() { return I }, StaticChannelRoute: function() { return i }, StaticChannelRoutes: function() { return o }, buildGuildStaticChannelId: function() { return u }, isGuildHomeChannel: function() { return d }, isStaticChannelRoute: function() { return l } }), n("47120"), (s = i || (i = {})).ROLE_SUBSCRIPTIONS = "role-subscriptions", s.GUILD_SHOP = "shop", s.MEMBER_APPLICATIONS = "member-applications", s.GUILD_HOME = "@home", s.CHANNEL_BROWSER = "channel-browser", s.GUILD_ONBOARDING = "onboarding", s.CUSTOMIZE_COMMUNITY = "customize-community", s.MEMBER_SAFETY = "member-safety"; let o = new Set(Object.values(i)); function l(e) { return o.has(e) } function u(e, t) { return "".concat(e, "-").concat(t) } function d(e) { return !!(null == e ? void 0 : e.includes("@home")) } let _ = Object.freeze({ GUILD_FEED_REMOVED: 1, PINNED: 2, ACTIVE_CHANNELS_REMOVED: 4, REQUIRE_TAG: 16, IS_SPAM: 32, IS_GUILD_RESOURCE_CHANNEL: 128, CLYDE_AI: 256, IS_SCHEDULED_FOR_DELETION: 512, IS_MEDIA_CHANNEL: 1024, SUMMARIES_DISABLED: 2048, IS_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL: 8192, IS_BROADCASTING: 16384, HIDE_MEDIA_DOWNLOAD_OPTIONS: 32768, IS_JOIN_REQUEST_INTERVIEW_CHANNEL: 65536 }), c = 1024, E = 4096; (a = r || (r = {})).GUILD_HOME = "home", a.SERVER_GUIDE = "guide", a.CHANNEL_BROWSER = "browse", a.CUSTOMIZE_COMMUNITY = "customize"; let I = new Set(Object.values(r)), T = "131" }, 430198: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("149765"), l = n("442837"), u = n("570140"), d = n("223892"), _ = n("738774"), c = n("644542"), E = n("923726"), I = n("973542"), T = n("790285"), f = n("160404"), S = n("592125"), h = n("271383"), A = n("430824"), m = n("594174"), N = n("981631"); let p = {}, O = new Set; function C(e) { let { guildId: t, role: n, isPreviewingRoles: i } = e; return !!(0, I.isSubscriptionRole)(n) && (!!(i || (0, I.isSubscriptionRoleAvailableForPurchase)(null != n ? n : void 0) || function(e, t) { if (null == e) return !1; let n = m.default.getCurrentUser(); if (null == n) return !1; let i = h.default.getMember(t, n.id); return null != i && i.roles.includes(e.id) }(n, t)) || !1) } function R(e, t) { if (!t.hasFeature(N.GuildFeatures.CREATOR_MONETIZABLE) && !t.hasFeature(N.GuildFeatures.CREATOR_MONETIZABLE_PROVISIONAL)) return !1; let n = f.default.isViewingServerShop(t.id); for (let i of Object.keys(e.permissionOverwrites)) { let r = A.default.getRole(t.id, i); if (!C({ guildId: t.id, role: r, isPreviewingRoles: n })) continue; let s = e.permissionOverwrites[i]; if ((0, T.isChannelAccessGrantedBy)(e, s)) return !0 } let i = A.default.getRole(t.id, t.getEveryoneRoleId()), r = null != i && !o.has(i.permissions, N.Permissions.VIEW_CHANNEL), s = (0, T.isChannelAccessDeniedBy)(e, e.permissionOverwrites[t.id]); if (r && !s) { for (let e of Object.values(A.default.getRoles(t.id))) if (C({ guildId: t.id, role: e, isPreviewingRoles: n }) && (0, T.isAllChannelsRole)(e)) return !0 } return !1 } function g(e, t) { let n = p[e]; if (null == n) return !1; let i = S.default.getChannel(t); if (null == i) return !1; let r = A.default.getGuild(i.getGuildId()); if (null == r) return !1; let s = n.has(t), a = R(i, r); return s !== a && (a ? n.add(t) : n.delete(t), !0) } function L() { p = {}, O.clear() } function v(e) { let { guild: t } = e; delete p[t.id] } function D(e) { let { guildId: t } = e; delete p[t] } function M(e) { let { channel: t } = e; return null != t.guild_id && g(t.guild_id, t.id) } class y extends(i = l.default.Store) { initialize() { this.waitFor(A.default, S.default, f.default), c.GuildRoleSubscriptionUsersExperiment.subscribe({ location: "1" }, () => L()) } isChannelGated(e, t) { if (null == e) return !1; let n = p[e]; return null == n && (! function(e) { let t = A.default.getGuild(e); if (null == t) return; let n = p[e] = new Set; if (!t.hasFeature(N.GuildFeatures.ROLE_SUBSCRIPTIONS_ENABLED) || !(0, E.isGuildEligibleForRoleSubscriptions)(e) && !(0, d.isExpeditedMonetizationOnboardingGuild)(t)) return; let i = S.default.getMutableGuildChannelsForGuild(e); for (let e in i) { let r = i[e]; R(r, t) && n.add(r.id) } }(e), n = p[e]), null != n && n.has(t) } isChannelGatedAndVisible(e, t) { return null != e && this.isChannelGated(e, t) && !O.has(e) } } a = "GatedChannelStore", (s = "displayName") in(r = y) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new y(u.default, { CONNECTION_OPEN: L, OVERLAY_INITIALIZE: L, CACHE_LOADED_LAZY: L, GUILD_CREATE: v, GUILD_UPDATE: v, GUILD_DELETE: v, GUILD_ROLE_CREATE: D, GUILD_ROLE_UPDATE: D, GUILD_ROLE_DELETE: D, IMPERSONATE_UPDATE: D, IMPERSONATE_STOP: D, CHANNEL_CREATE: M, CHANNEL_DELETE: M, CHANNEL_UPDATES: function(e) { let { channels: t } = e, n = !1; for (let e of t) null != e.guild_id && g(e.guild_id, e.id) && (n = !0); return n }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS: function(e) { let { guildId: t, restrictions: n } = e; (0, _.isRestrictedFromShowingGuildPurchaseEntryPoints)(n) ? O.add(t): O.delete(t) }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE: function(e) { let { guildId: t } = e; O.add(t) } }) }, 149770: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("287734"), s = n("147913"), a = n("703656"), o = n("769654"), l = n("131951"), u = n("944486"), d = n("914010"), _ = n("981631"); class c extends s.default { handleGuildCreate(e) { let { guild: t } = e, n = u.default.getChannelId(_.ME), i = u.default.getVoiceChannelId(); t.id === n && (0, o.transitionToGuild)(t.id), t.id === i && !1 !== t.unavailable && null == i && r.default.selectVoiceChannel((0, u.findFirstVoiceChannelId)(t.id)) } handleChannelCreate(e) { let { channel: t } = e; if (t.type !== _.ChannelTypes.GROUP_DM) return; let n = t.originChannelId, i = u.default.getChannelId(_.NULL_STRING_GUILD_ID); null == d.default.getGuildId() && null != n && n === i && (0, a.transitionTo)(_.Routes.CHANNEL(_.ME, t.id)), null != n && n === u.default.getVoiceChannelId() && r.default.selectVoiceChannel(t.id, l.default.isVideoEnabled()) } handleLogout() { i.default.dispatch({ type: "VOICE_CHANNEL_SELECT", channelId: null, guildId: null, video: !1, currentVoiceChannelId: null }) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { GUILD_CREATE: this.handleGuildCreate, CHANNEL_CREATE: this.handleChannelCreate, LOGOUT: this.handleLogout }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new c }, 43267: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getChannelIconURL: function() { return o } }), n("47120"); var i = n("594174"), r = n("768581"), s = n("823379"), a = n("981631"); function o(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 32, n = arguments.length > 2 ? arguments[2] : void 0; switch (e.type) { case a.ChannelTypes.DM: let [o] = e.recipients.map(i.default.getUser).filter(s.isNotNullish); if (null == o) return null; return o.getAvatarURL(void 0, t, n); case a.ChannelTypes.GROUP_DM: return r.default.getChannelIconURL({ id: e.id, icon: e.icon, applicationId: e.getApplicationId(), size: t }) } } }, 277800: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("149765"), r = n("430824"), s = n("981631"); let a = [s.ChannelTypes.GUILD_TEXT, s.ChannelTypes.GUILD_VOICE, s.ChannelTypes.GUILD_ANNOUNCEMENT, s.ChannelTypes.GUILD_FORUM, s.ChannelTypes.PUBLIC_THREAD, s.ChannelTypes.PRIVATE_THREAD], o = i.combine(s.Permissions.VIEW_CHANNEL, s.Permissions.SEND_MESSAGES); function l(e) { if (null == e || !a.includes(e.type)) return []; let t = r.default.getGuild(e.guild_id); return null == t ? [] : Object.values(e.permissionOverwrites).filter(e => { var n, s; return 0 === e.type && (null === (s = r.default.getRoles(t.id)[e.id]) || void 0 === s ? void 0 : null === (n = s.tags) || void 0 === n ? void 0 : n.guild_connections) === null && !i.hasAny(e.deny, o) }).map(e => r.default.getRoles(t.id)[e.id]).filter(e => null != e) } }, 740504: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("392711"), r = n.n(i); function s(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : () => !0; return r()(e).map(e => "null" === e.channel.id ? t[e.channel.id] : [e, t[e.channel.id]]).flattenDeep().filter(n).value() } }, 447003: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("149765"), r = n("131704"), s = n("700785"), a = n("231338"); function o(e) { if (null == e) return !1; let { type: t } = e; if (null == e.guild_id || !r.GUILD_NON_CATEGORY_CHANNEL_TYPES.has(t)) return !1; if (e.isGuildVocal() && !s.canEveryoneRole(a.Permissions.CONNECT, e)) return !0; let n = e.permissionOverwrites[e.guild_id]; return null != n && i.has(n.deny, a.Permissions.VIEW_CHANNEL) } }, 90463: function(e, t, n) { "use strict"; function i(e) { return e.replace(/[\s-~]+/g, "-").replace(/^-+/, "").replace(/[\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, "").toLowerCase() } n.r(t), n.d(t, { default: function() { return i } }), n("757143") }, 366297: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldShowVoiceChannelChangeConfirmation: function() { return l } }); var i = n("258609"), r = n("740492"), s = n("314897"), a = n("430824"), o = n("979651"); function l(e) { if (r.default.disableVoiceChannelChangeAlert) return !1; let t = i.default.getRemoteSessionId(); if (null != o.default.getVoiceStateForSession(s.default.getId(), t) || !o.default.isCurrentClientInVoiceChannel() || o.default.isInChannel(e.id)) return !1; let n = a.default.getGuild(e.getGuildId()); return !((null == n ? void 0 : n.afkChannelId) != null && o.default.isInChannel(n.afkChannelId)) && !0 } }, 933557: function(e, t, n) { "use strict"; n.r(t), n.d(t, { computeChannelName: function() { return c }, default: function() { return T }, escapeChannelName: function() { return E }, unescapeChannelName: function() { return I } }), n("47120"), n("757143"); var i = n("442837"), r = n("762914"), s = n("828695"), a = n("699516"), o = n("594174"), l = n("823379"), u = n("51144"), d = n("981631"), _ = n("689938"); function c(e, t, n) { var i, s; let a = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], o = arguments.length > 4 && void 0 !== arguments[4] && arguments[4]; switch (e.type) { case d.ChannelTypes.DM: let [c] = e.recipients.map(t.getUser).filter(l.isNotNullish); if (null == c) return "???"; let I = n.getNickname(c.id), T = null !== (i = null != I ? I : u.default.getName(c)) && void 0 !== i ? i : "???"; return a ? "@".concat(T) : T; case d.ChannelTypes.GROUP_DM: let f = (0, r.getIsBroadcastingGDM)(e.id); if ("" !== e.name) return e.name; if (f && null != e.ownerId && "" !== e.ownerId) { let i = t.getUser(e.ownerId), r = null !== (s = n.getNickname(e.ownerId)) && void 0 !== s ? s : u.default.getName(i); return _.default.Messages.BROADCASTING_CHANNEL_NAME.format({ name: r }) } let S = e.recipients.map(t.getUser).filter(l.isNotNullish).map(e => { var t; return null !== (t = n.getNickname(e.id)) && void 0 !== t ? t : u.default.getName(e) }); if (S.length > 0) return S.join(", "); return _.default.Messages.GROUP_DM_ALONE.format({ name: u.default.getName(t.getCurrentUser()) }); case d.ChannelTypes.GUILD_ANNOUNCEMENT: case d.ChannelTypes.GUILD_TEXT: case d.ChannelTypes.GUILD_FORUM: case d.ChannelTypes.GUILD_MEDIA: if (a) return "#".concat(e.name); return e.name; case d.ChannelTypes.PUBLIC_THREAD: case d.ChannelTypes.PRIVATE_THREAD: case d.ChannelTypes.ANNOUNCEMENT_THREAD: case d.ChannelTypes.GUILD_VOICE: case d.ChannelTypes.GUILD_STAGE_VOICE: case d.ChannelTypes.GUILD_CATEGORY: if (o) return '#"'.concat(E(e.name), '"'); if (a && e.isThread()) return '"'.concat(e.name, '"'); return e.name; default: return e.name } } function E(e) { return e.replace(/\\/g, "\\\\").replace(/"/g, '\\"') } function I(e) { return e.replace(/\\"/g, '"').replace(/\\\\/g, "\\") } function T(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return (0, i.useStateFromStores)([o.default, s.default, a.default], () => null == e ? null : c(e, o.default, a.default, t)) } }, 557135: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("287734"), a = n("258609"), o = n("703656"), l = n("569471"), u = n("346479"), d = n("314897"), _ = n("944486"), c = n("979651"), E = n("366297"), I = n("981631"); t.default = { async handleVoiceConnect(e) { let { channel: t, connected: T, needSubscriptionToAccess: f, locked: S = !1, routeDirectlyToChannel: h = !1, bypassChangeModal: A, bypassGuildIdCheck: m = !1 } = e; t.isThread() && (await u.default.unarchiveThreadIfNecessary(t.id), !l.default.hasJoined(t.id) && await u.default.joinThread(t, "Join Voice")); let N = a.default.getRemoteSessionId(), p = c.default.getVoiceStateForSession(d.default.getId(), N), O = (null == p ? void 0 : p.channelId) === t.id || _.default.getChannelId() === c.default.getCurrentClientVoiceChannelId(t.guild_id); return !A && !S && (0, E.shouldShowVoiceChannelChangeConfirmation)(t) ? new Promise(e => { (0, r.openModalLazy)(async () => { let { default: r } = await n.e("65045").then(n.bind(n, "143782")); return n => (0, i.jsx)(r, { channel: t, onConfirm: () => e(this.handleVoiceConnect({ channel: t, connected: T, needSubscriptionToAccess: f, routeDirectlyToChannel: h, locked: S, bypassChangeModal: !0 })), ...n }) }) }) : (!S && !T && s.default.selectVoiceChannel(t.id), !__OVERLAY__ && (T || O || f || h) && ! function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = e.getGuildId(); if (null == n && !t) throw Error("VoiceChannel, transitionTo: Channel does not have a guildId"); (0, o.transitionTo)(I.Routes.CHANNEL(n, e.id)) }(t, m), !0) } } }, 931981: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StaffPTOBar: function() { return m }, useShouldShowPTONotice: function() { return A } }), n("47120"); var i, r = n("735250"); n("470079"); var s = n("442837"), a = n("481060"), o = n("570140"), l = n("592125"), u = n("271383"), d = n("944486"), _ = n("594174"), c = n("696202"), E = n("689938"), I = n("579805"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = new Set; class S extends(i = s.default.PersistedStore) { initialize(e) { null != e && (f = new Set(e)) } hasId(e) { return f.has(e) } getState() { return [...f] } } T(S, "displayName", "PTOStore"), T(S, "persistKey", "PTOStore"); let h = new S(o.default, {}), A = e => (0, s.useStateFromStores)([u.default, _.default, h], () => { let t = _.default.getCurrentUser(); if (null == t || !t.isStaff() || !e.isDM()) return !1; let n = _.default.getUser(e.getRecipientId()); if (!(null == n ? void 0 : n.isStaff())) return !1; let i = u.default.getNicknames(n.id).some(e => e.endsWith("[PTO]") || e.endsWith("[OOO]")); return i ? !h.hasId(n.id) && i : (f.delete(n.id) && h.emitChange(), !1) }), m = () => (0, r.jsxs)("div", { className: I.bar, children: [E.default.Messages.STAFF_PTO_NOTICE, (0, r.jsx)(a.Clickable, { className: I.closeButton, onClick: () => { let e = d.default.getChannelId(); if (null == e) return; let t = l.default.getChannel(e); null != t && t.isPrivate() && !f.has(t.getRecipientId()) && (f.add(t.getRecipientId()), h.emitChange()) }, children: (0, r.jsx)(c.default, { className: I.closeIcon }) })] }) }, 471445: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getChannelIconComponent: function() { return q }, getChannelIconTooltipText: function() { return Q }, getSimpleChannelIconComponent: function() { return J } }); var i = n("859802"), r = n("281956"), s = n("271383"), a = n("430824"), o = n("607744"), l = n("594174"), u = n("482500"), d = n("36082"), _ = n("119828"), c = n("747380"), E = n("648414"), I = n("315970"), T = n("308540"), f = n("814550"), S = n("93879"), h = n("535321"), A = n("277942"), m = n("974029"), N = n("481479"), p = n("160696"), O = n("832440"), C = n("634648"), R = n("356842"), g = n("630641"), L = n("908434"), v = n("74846"), D = n("789536"), M = n("316949"), y = n("133429"), P = n("702066"), U = n("763300"), b = n("883877"), G = n("724215"), w = n("761529"), k = n("308570"), B = n("632184"), V = n("414896"), x = n("398856"), F = n("170039"), H = n("178695"), Y = n("548420"), j = n("761374"), W = n("435443"), K = n("447003"), z = n("176505"), Z = n("981631"), X = n("689938"); function Q(e, t, n, i) { if (null == e) return null; if (e.id === (null == t ? void 0 : t.rulesChannelId)) return X.default.Messages.CHANNEL_TOOLTIP_RULES; switch (e.type) { case Z.ChannelTypes.GUILD_TEXT: if (i) return X.default.Messages.CHANNEL_TOOLTIP_TEXT_ACTIVE_THREADS; if (e.isNSFW()) return X.default.Messages.CHANNEL_TOOLTIP_TEXT_NSFW; if ((0, K.default)(e)) return X.default.Messages.CHANNEL_TOOLTIP_TEXT_LIMITED; return X.default.Messages.CHANNEL_TOOLTIP_TEXT; case Z.ChannelTypes.GUILD_FORUM: let r = e.isMediaChannel(); if (e.isNSFW()) return r ? X.default.Messages.CHANNEL_TOOLTIP_MEDIA_NSFW : X.default.Messages.CHANNEL_TOOLTIP_FORUM_NSFW; if ((0, K.default)(e)) return r ? X.default.Messages.CHANNEL_TOOLTIP_MEDIA_LIMITED : X.default.Messages.CHANNEL_TOOLTIP_FORUM_LIMITED; return r ? X.default.Messages.MEDIA_CHANNEL : X.default.Messages.FORUM; case Z.ChannelTypes.GUILD_MEDIA: if (e.isNSFW()) return X.default.Messages.CHANNEL_TOOLTIP_MEDIA_NSFW; if ((0, K.default)(e)) return X.default.Messages.CHANNEL_TOOLTIP_MEDIA_LIMITED; return X.default.Messages.MEDIA_CHANNEL; case Z.ChannelTypes.GUILD_STAGE_VOICE: if (n) return X.default.Messages.CHANNEL_TOOLTIP_STAGE_LOCKED; if ((0, K.default)(e)) return X.default.Messages.CHANNEL_TOOLTIP_STAGE_LIMITED; return X.default.Messages.CHANNEL_TOOLTIP_STAGE; case Z.ChannelTypes.GUILD_VOICE: if (n) return X.default.Messages.CHANNEL_TOOLTIP_VOICE_LOCKED; if ((0, K.default)(e)) return X.default.Messages.CHANNEL_TOOLTIP_VOICE_LIMITED; return X.default.Messages.CHANNEL_TOOLTIP_VOICE; case Z.ChannelTypes.GUILD_ANNOUNCEMENT: if (e.isNSFW()) return X.default.Messages.CHANNEL_TOOLTIP_ANNOUNCEMENTS_NSFW; if ((0, K.default)(e)) return X.default.Messages.CHANNEL_TOOLTIP_ANNOUNCEMENTS_LIMITED; return X.default.Messages.CHANNEL_TOOLTIP_ANNOUNCEMENTS; case Z.ChannelTypes.GUILD_STORE: return X.default.Messages.CHANNEL_TOOLTIP_STORE; case Z.ChannelTypes.DM: return X.default.Messages.DM; case Z.ChannelTypes.GROUP_DM: return X.default.Messages.GROUP_DM; case Z.ChannelTypes.GUILD_DIRECTORY: return X.default.Messages.CHANNEL_TOOLTIP_DIRECTORY; case Z.ChannelTypes.PUBLIC_THREAD: return X.default.Messages.THREAD; case Z.ChannelTypes.PRIVATE_THREAD: return X.default.Messages.PRIVATE_THREAD; default: return null } } function q(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, { locked: X = !1, video: Q = !1, stream: q = !1, hasActiveThreads: J = !1, textFocused: $ = !1 } = n; if (null == e) return null; null == t && (t = a.default.getGuild(e.getGuildId())); let ee = (0, r.shouldShowMembershipVerificationGate)(null == t ? void 0 : t.id, [a.default, o.default, l.default, s.default]), et = null != t && (0, i.canSeeGuildHome)(null == t ? void 0 : t.id); if ((null == e ? void 0 : e.id) === (null == t ? void 0 : t.rulesChannelId)) return f.default; switch (e.type) { case Z.ChannelTypes.GUILD_ANNOUNCEMENT: if (J) { if (e.isNSFW()) return U.default; if ((0, K.default)(e)) return G.default; else return u.default } if (e.isNSFW()) return P.default; if ((0, K.default)(e)) return y.default; return M.default; case Z.ChannelTypes.GUILD_STORE: return Y.default; case Z.ChannelTypes.DM: case Z.ChannelTypes.GROUP_DM: return d.default; case Z.ChannelTypes.PRIVATE_THREAD: return w.default; case Z.ChannelTypes.ANNOUNCEMENT_THREAD: case Z.ChannelTypes.PUBLIC_THREAD: if (e.isNSFW()) return b.default; if (e.isForumPost()) return C.default; else return W.default; case Z.ChannelTypes.GUILD_TEXT: if (J) { if (e.isNSFW()) return b.default; if ((0, K.default)(e)) return w.default; else return W.default } if (e.isNSFW()) return A.default; if ((0, K.default)(e)) return h.default; return S.default; case Z.ChannelTypes.GUILD_FORUM: let en = e.isMediaChannel(); if (e.isNSFW()) return en ? D.default : O.default; if ((0, K.default)(e)) return en ? v.default : p.default; else return en ? L.default : N.default; case Z.ChannelTypes.GUILD_MEDIA: if (e.isNSFW()) return D.default; if ((0, K.default)(e)) return v.default; else return L.default; case Z.ChannelTypes.GUILD_STAGE_VOICE: if (ee) return (0, K.default)(e) ? g.default : H.default; if (X) return g.default; if ((0, K.default)(e)) return H.default; else return F.default; case Z.ChannelTypes.GUILD_VOICE: if ($) return m.default; if (e.isNSFW()) return x.default; if (q) return j.default; if (ee) { if ((0, K.default)(e)) return g.default; return Q ? c.default : V.default } if (X) return g.default; if ((0, K.default)(e)) return Q ? c.default : V.default; else return Q ? _.default : B.default; case Z.ChannelTypes.GUILD_DIRECTORY: return T.default; case Z.ChannelTypes.GUILD_CATEGORY: return I.default; default: if (z.StaticChannelIds.has(e.id)) { if (e.id === z.StaticChannelId.GUILD_HOME || e.id === z.StaticChannelId.SERVER_GUIDE) { if (et) return R.default; return k.default } if (e.id === z.StaticChannelId.CHANNEL_BROWSER || e.id === z.StaticChannelId.CUSTOMIZE_COMMUNITY) return E.default } return null } } function J(e) { switch (e) { case Z.ChannelTypes.GUILD_ANNOUNCEMENT: return M.default; case Z.ChannelTypes.GUILD_STORE: return Y.default; case Z.ChannelTypes.DM: case Z.ChannelTypes.GROUP_DM: return d.default; case Z.ChannelTypes.PRIVATE_THREAD: return w.default; case Z.ChannelTypes.ANNOUNCEMENT_THREAD: case Z.ChannelTypes.PUBLIC_THREAD: return W.default; case Z.ChannelTypes.GUILD_TEXT: case Z.ChannelTypes.GUILD_FORUM: case Z.ChannelTypes.GUILD_MEDIA: return S.default; case Z.ChannelTypes.GUILD_STAGE_VOICE: return F.default; case Z.ChannelTypes.GUILD_VOICE: return B.default; case Z.ChannelTypes.GUILD_CATEGORY: return I.default; default: return null } } }, 665692: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CHANNEL_SENTINEL: function() { return r }, COMMAND_SENTINEL: function() { return l }, EMOJI_SENTINEL: function() { return s }, MENTION_SENTINEL: function() { return i }, REACTION_END_SENTINEL: function() { return o }, REACTION_START_SENTINEL: function() { return a } }); let i = "@", r = "#", s = ":", a = "+:", o = ":", l = "/" }, 417574: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BOT_MENTION_COMMAND_REGEX: function() { return i } }); let i = /^<@!?(\d+)>/u }, 436896: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2021-07_popout_autocomplete", label: "Popout Autocomplete experiment", defaultConfig: { usePopoutAutocomplete: !1 }, treatments: [{ id: 1, label: "New autocomplete style", config: { usePopoutAutocomplete: !0 } }] }) }, 326133: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("924826"), l = n("442837"), u = n("481060"), d = n("30465"), _ = n("430824"), c = n("156361"), E = n("153124"), I = n("153850"), T = n("482207"), f = n("436896"), S = n("590921"), h = n("606992"), A = n("51062"), m = n("583901"); t.default = r.forwardRef(function(e, t) { var n, s, N, p, O; let { channel: C, type: R, editorHeight: g, onVisibilityChange: L } = e, v = (0, E.useUID)(), D = (0, l.useStateFromStores)([_.default], () => { var e; return null !== (e = _.default.getGuild(C.guild_id)) && void 0 !== e ? e : null }, [C.guild_id]), M = r.useRef(), [y, P, U] = (0, A.default)({ ...e, guild: D }, t, M), b = (null === (n = R.autocomplete) || void 0 === n ? void 0 : n.forceChatLayer) ? T.default : I.default, G = (0, c.getAutocompleteRowId)(y.selectedIndex); (0, d.useChannelEditorPopup)(v, y.isVisible, G), f.default.trackExposure({ location: "6e9811_1" }); let { usePopoutAutocomplete: w } = f.default.useExperiment({ location: "6e9811_2" }, { autoTrackExposure: !1 }), k = (0, h.useChannelAutocompleteLayerPosition)({ editorHeight: g, type: R, state: y, isInPopoutExperiment: w }), B = r.useMemo(() => null == k ? "" : String(Date.now()), [null == k ? void 0 : k.top, null == k ? void 0 : k.left, null == k ? void 0 : k.bottom, null == k ? void 0 : k.right]); if (r.useEffect(() => { L(y.isVisible) }, [L, y.isVisible]), !y.isVisible || null == y.query || void 0 === k) return null; let V = null !== (s = y.query.typeInfo.renderResults({ results: y.query.results, selectedIndex: y.selectedIndex, channel: C, guild: D, query: y.query.queryText, options: y.query.options, onHover: e => P.onResultHover(e), onClick: e => P.onResultClick(e) })) && void 0 !== s ? s : null; if (null == V) return null; let x = { [m.autocompleteAttached]: null == k, [m.autocompletePopout]: null != k, [m.bottom]: null == k && "bottom" === e.position }, F = 490; null != k && (F = (null === (N = R.autocomplete) || void 0 === N ? void 0 : N.small) ? 200 : (null === (p = y.query) || void 0 === p ? void 0 : p.type) === S.AutocompleteOptionTypes.EMOJIS_AND_STICKERS ? 490 : 245), F = Math.min(window.innerHeight - 175, F); let H = (0, i.jsx)(c.default, { id: v, className: a()(m.autocomplete, x), innerClassName: m.autocompleteInner, onMouseDown: e => e.preventDefault(), children: (0, i.jsx)(o.ListNavigatorProvider, { navigator: U, children: (0, i.jsx)(o.ListNavigatorContainer, { children: e => { let { ref: t, ...n } = e; return (0, i.jsx)(u.AdvancedScrollerThin, { id: v, ref: e => { var n; t.current = null !== (n = null == e ? void 0 : e.getScrollerNode()) && void 0 !== n ? n : null, M.current = e }, ...n, className: m.scroller, style: { maxHeight: F }, role: "listbox", "aria-labelledby": (0, c.getAutocompleteTitleId)(v), children: V }) } }) }) }); return null != k ? (0, i.jsx)(b, { children: (0, i.jsx)(u.ReferencePositionLayer, { targetRef: e.targetRef, overrideTargetRect: k, positionKey: B, position: null !== (O = e.position) && void 0 !== O ? O : "top", align: "left", spacing: 8, autoInvert: !0, nudgeAlignIntoViewport: !0, children: () => H }) }) : H }) }, 106824: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createInitialState: function() { return d }, default: function() { return _ } }), n("47120"); var i = n("836560"), r = n("555573"), s = n("376918"), a = n("695346"), o = n("590921"), l = n("152089"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function d() { return { query: null, selectedIndex: null, isVisible: !1, didInitialQuery: !1 } } class _ extends i.EventEmitter { updateProps(e) { let t = this.props.focused !== e.focused, n = this.props.channel.id !== e.channel.id || this.props.activeCommandOption !== e.activeCommandOption, i = !this.state.didInitialQuery || this.props.currentWord !== e.currentWord || this.props.currentWordIsAtStart !== e.currentWordIsAtStart || this.props.textValue !== e.textValue || this.props.optionText !== e.optionText; if (this.props = e, n || i) this.updateResults(i, n), !this.state.didInitialQuery && (this.state = { ...this.state, didInitialQuery: !0 }); else if (t) { let e = this.state.query; this.setState({ isVisible: null != e && this.shouldShow(e.resultCount, e.isLoading, e.typeInfo) }) } } setSelectedIndex(e) { this.setState({ selectedIndex: e }) } onTabOrEnter(e) { if (!this.state.isVisible) return !1; if (null == this.state.selectedIndex) { var t; let n = null === (t = this.state.query) || void 0 === t ? void 0 : t.typeInfo.focusMode; return !e && (n === o.FocusMode.MANUAL || n === o.FocusMode.AUTO_WHEN_FILTERED) && (this.setSelectedIndex(0), !0) } return this.selectResult(this.state.selectedIndex, e, !0) } onMoveSelection(e) { var t, n; if (!this.state.isVisible) return !1; if (e < 0 ? this.props.navigator.focusPreviousItem() : e > 0 && this.props.navigator.focusNextItem(), null != this.state.selectedIndex && (null === (t = this.state.query) || void 0 === t ? void 0 : t.type) === o.AutocompleteOptionTypes.COMMANDS) { let e = null === (n = this.state.query.results.commands) || void 0 === n ? void 0 : n[this.state.selectedIndex]; null != e && r.setPreferredCommandId(this.props.channel.id, e.id) } return !0 } onMaybeShowAutocomplete() { this.emit("update") } onHideAutocomplete() { null != this.state.query && this.setState({ isVisible: !1 }) } onResultHover(e) { this.props.navigator.setFocus(null), this.setSelectedIndex(null) } onResultClick(e) { this.selectResult(e, !0) } clearQuery() { this.setState({ query: null, isVisible: !1, selectedIndex: null }) } queryResults() { this.updateResults() } isVisible() { return this.state.isVisible } updateResults() { var e, t; let n = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], i = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (null == this.props.editorRef.current) return; let r = (0, l.getOptions)(this.props), u = (0, l.findMatchingAutocompleteType)({ channel: this.props.channel, guild: this.props.guild, options: r, currentWord: this.props.currentWord, currentWordIsAtStart: this.props.currentWordIsAtStart, textValue: this.props.textValue, optionText: this.props.optionText }), d = r.commands !== o.CommandMode.DISABLED ? (0, l.findCommandOptionAutocompleteType)(this.props.activeCommandOption, this.props.currentWord) : null; if (null == u && null != d) u = d; else if (null == u || null != d && u.type !== d.type) { this.clearQuery(); return } let { type: _, typeInfo: c, query: E } = u, I = i || n && ((null === (e = this.state.query) || void 0 === e ? void 0 : e.queryText) !== E || (null === (t = this.state.query) || void 0 === t ? void 0 : t.typeInfo) !== c), T = a.IncludeStickersInAutocomplete.getSetting(); r.allowStickers = r.allowStickers ? T : r.allowStickers; let { results: f, metadata: S } = c.queryResults(this.props.channel, this.props.guild, E, r, I), h = 0; for (let e of Object.values(f)) Array.isArray(e) && (h += e.length); let A = !0 === f.isLoading, m = this.shouldShow(h, A, c), N = this.state.selectedIndex; !m || A ? N = null : null != N && N >= h && (N = h - 1), m && !this.state.isVisible && (0, s.trackAutocompleteOpen)(_, this.props.channel, S), this.setState({ query: { type: _, typeInfo: c, queryText: E, results: f, resultCount: h, options: r, isLoading: A }, isVisible: m, selectedIndex: N }) } shouldShow(e, t, n) { return this.props.focused && null == this.props.expressionPickerView && (e > 0 || t || n.showEmpty) } selectResult(e, t, n) { var i, r, a; if (!this.state.isVisible) return !1; let { type: l, typeInfo: u, results: d, resultCount: _, options: c } = this.state.query; if (e >= _) return !1; let E = null === (r = u.onSelect) || void 0 === r ? void 0 : r.call(u, { results: d, index: e, type: t ? o.SelectType.SEND : o.SelectType.INSERT, options: c, channel: this.props.channel, tabOrEnter: n, queryText: null === (i = this.state.query) || void 0 === i ? void 0 : i.queryText }); return null != E && (0, s.trackAutocompleteSelect)(l, null !== (a = E.type) && void 0 !== a ? a : null, this.props.channel, E.metadata), !0 } setState(e) { for (let t in e) if (e[t] !== this.state[t]) { this.state = { ...this.state, ...e }, this.emit("change", this.state); return } } constructor(e) { super(), u(this, "props", void 0), u(this, "state", void 0), this.props = e, this.state = d() } } }, 365704: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AUTOCOMPLETE_OPTIONS: function() { return I }, AUTOCOMPLETE_PRIORITY: function() { return E } }); var i = n("590921"), r = n("521090"), s = n("126226"), a = n("116364"), o = n("290401"), l = n("341561"), u = n("277981"), d = n("420001"), _ = n("65090"), c = n("591236"); let E = [i.AutocompleteOptionTypes.CHOICES, i.AutocompleteOptionTypes.GIFS, i.AutocompleteOptionTypes.COMMAND_OPTIONS, i.AutocompleteOptionTypes.EMOJIS_AND_STICKERS, i.AutocompleteOptionTypes.REACTIONS, i.AutocompleteOptionTypes.CHANNELS, i.AutocompleteOptionTypes.MENTIONS, i.AutocompleteOptionTypes.COMMANDS, i.AutocompleteOptionTypes.LEGACY_COMMANDS], I = { [i.AutocompleteOptionTypes.CHANNELS]: r.default, [i.AutocompleteOptionTypes.COMMANDS]: s.default, [i.AutocompleteOptionTypes.COMMAND_OPTIONS]: o.default, [i.AutocompleteOptionTypes.CHOICES]: a.default, [i.AutocompleteOptionTypes.EMOJIS_AND_STICKERS]: l.default, [i.AutocompleteOptionTypes.GIFS]: u.default, [i.AutocompleteOptionTypes.LEGACY_COMMANDS]: d.default, [i.AutocompleteOptionTypes.MENTIONS]: _.default, [i.AutocompleteOptionTypes.REACTIONS]: c.default } }, 877565: function(e, t, n) { "use strict"; n.r(t), n.d(t, { renderAutocompleteGroup: function() { return o }, renderHeader: function() { return a } }); var i = n("735250"), r = n("470079"); n("419922"); var s = n("156361"); function a(e) { let { titleWithQuery: t, titleWithoutQuery: n, query: r, getQuery: a, headerClassName: o, headerTrailingContent: l } = e, u = r.length > 0 ? t.format({ prefix: a(r) }) : n; return (0, i.jsx)(s.default.Title, { className: o, title: u, children: l }, "autocomplete-title-".concat(u)) } function o(e) { let { query: t, selectedIndex: n, autocompletes: s, onHover: o, onClick: l, titleWithQuery: u, titleWithoutQuery: d, Component: _, getProps: c, getQuery: E, key: I, indexOffset: T = 0, headerClassName: f, headerTrailingContent: S, footer: h } = e; if (null == h && (null == s || 0 === s.length)) return null; let A = null == s ? void 0 : s.map((e, t) => { let i = t + T, s = c(e, i); return (0, r.createElement)(_, { onClick: l, onHover: o, selected: n === i, index: i, ...s, key: s.key }) }); return (0, i.jsxs)(r.Fragment, { children: [null != u && null != d ? a({ titleWithQuery: u, titleWithoutQuery: d, query: t, getQuery: E, headerClassName: f, headerTrailingContent: S }) : null, A, h] }, I) } }, 590921: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p; n.r(t), n.d(t, { AutocompleteOptionTypes: function() { return d }, AutocompleteSelectionTypes: function() { return _ }, ChannelMentionMode: function() { return a }, ClydeMentionMode: function() { return o }, CommandMode: function() { return l }, FocusMode: function() { return c }, GlobalMentionMode: function() { return i }, MAX_COMMAND_AUTOCOMPLETE_PLACEHOLDERS: function() { return O }, MAX_COMMAND_AUTOCOMPLETE_RESULTS: function() { return C }, RoleMentionMode: function() { return s }, SelectType: function() { return u }, UserMentionMode: function() { return r } }); let O = 3, C = 20; (E = i || (i = {}))[E.DENY = 0] = "DENY", E[E.ALLOW_EVERYONE = 1] = "ALLOW_EVERYONE", E[E.ALLOW_EVERYONE_OR_HERE = 2] = "ALLOW_EVERYONE_OR_HERE", (I = r || (r = {}))[I.DENY = 0] = "DENY", I[I.ALLOW_CHANNEL = 1] = "ALLOW_CHANNEL", I[I.ALLOW_GUILD = 2] = "ALLOW_GUILD", (T = s || (s = {}))[T.DENY = 0] = "DENY", T[T.ALLOW_MENTIONABLE = 1] = "ALLOW_MENTIONABLE", T[T.ALLOW_ALL = 2] = "ALLOW_ALL", (f = a || (a = {}))[f.DENY = 0] = "DENY", f[f.ALLOW_SELECTABLE = 1] = "ALLOW_SELECTABLE", (S = o || (o = {}))[S.DENY = 0] = "DENY", S[S.ALLOW = 1] = "ALLOW", (h = l || (l = {}))[h.DISABLED = 0] = "DISABLED", h[h.OLD_BUILT_INS = 1] = "OLD_BUILT_INS", h[h.NEW_TEXT_ONLY = 2] = "NEW_TEXT_ONLY", h[h.NEW = 3] = "NEW", (A = u || (u = {}))[A.INSERT = 0] = "INSERT", A[A.SEND = 1] = "SEND", (m = d || (d = {})).MENTIONS = "MENTIONS", m.CHANNELS = "CHANNELS", m.EMOJIS_AND_STICKERS = "EMOJIS_AND_STICKERS", m.REACTIONS = "REACTIONS", m.GIFS = "GIFS", m.LEGACY_COMMANDS = "LEGACY_COMMANDS", m.COMMANDS = "COMMANDS", m.COMMAND_OPTIONS = "COMMAND_OPTIONS", m.CHOICES = "CHOICES", (N = _ || (_ = {})).MENTION = "MENTION", N.CHANNEL = "CHANNEL", N.EMOJI = "EMOJI", N.STICKER = "STICKER", N.REACTION = "REACTION", N.GIF = "GIF", N.COMMAND = "COMMAND", N.COMMAND_OPTION = "COMMAND_OPTION", N.COMMAND_SUGGESTION = "COMMAND_SUGGESTION", N.CHOICE = "CHOICE", N.EMOJI_UPSELL = "EMOJI_UPSELL", (p = c || (c = {}))[p.AUTO = 0] = "AUTO", p[p.AUTO_WHEN_FILTERED = 1] = "AUTO_WHEN_FILTERED", p[p.MANUAL = 2] = "MANUAL" }, 152089: function(e, t, n) { "use strict"; n.r(t), n.d(t, { findCommandOptionAutocompleteType: function() { return E }, findMatchingAutocompleteType: function() { return c }, getOptions: function() { return d } }), n("47120"), n("411104"); var i = n("911969"), r = n("581364"), s = n("752305"), a = n("130402"), o = n("365704"), l = n("590921"), u = n("185923"); function d(e) { var t; let { activeCommandOption: n, canMentionUsers: a = !0, canMentionRoles: o = !0, canMentionChannels: u = !0, canMentionEveryone: d, canMentionClyde: _ = !1, useNewSlashCommands: c, canOnlyUseTextCommands: E, canSendStickers: I, hideMentionDescription: T, hidePersonalInformation: f, type: S, emojiIntention: h, editorRef: A, onSendMessage: m, onSendSticker: N, setValue: p } = e, O = { mentions: { channel: l.ChannelMentionMode.DENY, global: l.GlobalMentionMode.DENY, role: l.RoleMentionMode.DENY, user: l.UserMentionMode.DENY, clyde: l.ClydeMentionMode.DENY }, commands: l.CommandMode.DISABLED, allowStickers: !0 === I, forNonStringCommandOption: null != n && n.type !== i.ApplicationCommandOptionType.STRING, hideMentionDescription: !0 === T, hidePersonalInformation: !0 === f, chatInputType: S, emojiIntention: h, sendMessage: m, sendSticker: N, insertText: (e, t) => { var n; null === (n = A.current) || void 0 === n || n.insertAutocomplete(e, null != t ? t : e) }, replaceText: (e, t) => { p(e, null != t ? t : (0, s.toRichValue)(e)) }, getCommandOptionValues: () => { var e; return null === (e = A.current) || void 0 === e ? void 0 : e.getCommandOptionValues() } }; if (null != n) { let e = (0, r.getApplicationCommandOptionQueryOptions)(n); e.canMentionChannels && (O.mentions.channel = l.ChannelMentionMode.ALLOW_SELECTABLE), e.canMentionEveryone && (O.mentions.global = e.canMentionHere ? l.GlobalMentionMode.ALLOW_EVERYONE_OR_HERE : l.GlobalMentionMode.ALLOW_EVERYONE), e.canMentionRoles && (O.mentions.role = e.canMentionNonMentionableRoles ? l.RoleMentionMode.ALLOW_ALL : l.RoleMentionMode.ALLOW_MENTIONABLE), e.canMentionUsers && (O.mentions.user = e.canMentionAnyGuildUser ? l.UserMentionMode.ALLOW_GUILD : l.UserMentionMode.ALLOW_CHANNEL), O.hideMentionDescription = !0 } else u && (O.mentions.channel = l.ChannelMentionMode.ALLOW_SELECTABLE), o && (O.mentions.role = l.RoleMentionMode.ALLOW_MENTIONABLE), a && (O.mentions.user = l.UserMentionMode.ALLOW_CHANNEL), d && (O.mentions.global = l.GlobalMentionMode.ALLOW_EVERYONE_OR_HERE), _ && (O.mentions.clyde = l.ClydeMentionMode.ALLOW); return (null === (t = S.commands) || void 0 === t ? void 0 : t.enabled) && (c ? O.commands = E ? l.CommandMode.NEW_TEXT_ONLY : l.CommandMode.NEW : O.commands = l.CommandMode.OLD_BUILT_INS), null != n && null != n.channelTypes && (O.allowedChannelTypes = n.channelTypes), O } function _(e) { let { type: t, channel: n, guild: i, query: r, isAtStart: s, options: a } = e, l = o.AUTOCOMPLETE_OPTIONS[t]; if (null != l.sentinel) { if (!r.startsWith(l.sentinel)) return !1; r = r.substring(l.sentinel.length) } return !!(null == l.matches || l.matches(n, i, r, s, a)) || !1 } function c(e) { let { channel: t, guild: n, options: i, currentWord: r, currentWordIsAtStart: s, textValue: d, optionText: c } = e, E = null; for (let e of o.AUTOCOMPLETE_PRIORITY) { var I, T, f, S, h, A; let m = o.AUTOCOMPLETE_OPTIONS[e]; if (e === l.AutocompleteOptionTypes.GIFS || e === l.AutocompleteOptionTypes.CHOICES) { if (i.commands === l.CommandMode.OLD_BUILT_INS) { if (_({ type: e, channel: t, guild: n, query: d, isAtStart: !1, options: i })) { E = { type: e, typeInfo: m, query: d }; break } } else if (_({ type: e, channel: t, guild: n, query: c, isAtStart: !1, options: i })) return { type: e, typeInfo: m, query: c } } else if (e === l.AutocompleteOptionTypes.COMMANDS && i.commands !== l.CommandMode.OLD_BUILT_INS) { if (_({ type: e, channel: t, guild: n, query: d, isAtStart: !0, options: i })) { E = { type: e, typeInfo: m, query: d.substring(null !== (T = null === (I = m.sentinel) || void 0 === I ? void 0 : I.length) && void 0 !== T ? T : 0) }; break } } else if (e === l.AutocompleteOptionTypes.LEGACY_COMMANDS) { if (_({ type: e, channel: t, guild: n, query: d, isAtStart: s, options: i })) { E = { type: e, typeInfo: m, query: d }; break } } else if (e === l.AutocompleteOptionTypes.EMOJIS_AND_STICKERS) { if (null != r && r.length > 0 && (0, a.initiateEmojiInteraction)(u.EmojiInteractionPoint.AutocompleteTyped), null != r && _({ type: e, channel: t, guild: n, query: r, isAtStart: s, options: i })) { E = { type: e, typeInfo: m, query: r.substring(null !== (S = null === (f = m.sentinel) || void 0 === f ? void 0 : f.length) && void 0 !== S ? S : 0) }; break } } else if (null != r && _({ type: e, channel: t, guild: n, query: r, isAtStart: s, options: i })) { E = { type: e, typeInfo: m, query: r.substring(null !== (A = null === (h = m.sentinel) || void 0 === h ? void 0 : h.length) && void 0 !== A ? A : 0) }; break } } return null == E ? null : (E.query = E.query.toLocaleLowerCase(), E) } function E(e, t) { let n; if (null == t || null == e) return null; if (null != e.choices || e.autocomplete) n = l.AutocompleteOptionTypes.CHOICES; else switch (e.type) { case i.ApplicationCommandOptionType.BOOLEAN: n = l.AutocompleteOptionTypes.CHOICES; break; case i.ApplicationCommandOptionType.CHANNEL: n = l.AutocompleteOptionTypes.CHANNELS; break; case i.ApplicationCommandOptionType.ROLE: case i.ApplicationCommandOptionType.USER: case i.ApplicationCommandOptionType.MENTIONABLE: n = l.AutocompleteOptionTypes.MENTIONS; break; default: return null } let r = o.AUTOCOMPLETE_OPTIONS[n]; return { type: n, typeInfo: r, query: t } } }, 511618: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("906732"), a = n("508688"), o = n("806519"), l = n("626135"), u = n("768581"), d = n("981631"), _ = n("185923"), c = n("474936"), E = n("689938"), I = n("702816"); t.default = e => { let { emojis: t } = e, { analyticsLocations: n } = (0, s.default)(); r.useEffect(() => { l.default.track(d.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: c.PremiumUpsellTypes.EMOJI_AUTOCOMPLETE_INLINE, location_stack: n }) }, [n]); let T = (0, i.jsx)("div", { className: I.emojis, children: t.slice(0, 3).map((e, t) => { if (null == e.id) return null; let n = (0, i.jsx)("div", { className: I.emojiBackground, children: (0, i.jsx)("img", { alt: e.name, className: I.emoji, src: u.default.getEmojiURL({ id: e.id, animated: e.animated, size: _.EMOJI_URL_BASE_SIZE }) }) }, e.id); return 2 === t ? n : (0, i.jsx)(o.default, { className: I.emojiMask, mask: o.default.Masks.AUTOCOMPLETE_EMOJI_UPSELL_EMOJI, children: n }, e.id) }) }); return (0, i.jsxs)(a.AutocompleteRowContent, { className: I.upsell, children: [(0, i.jsx)(a.AutocompleteRowContentPrimary, { children: (0, i.jsx)(a.AutocompleteRowHeading, { children: E.default.Messages.AUTOCOMPLETE_EMOJI_UPSELL.format({ count: t.length }) }) }), (0, i.jsx)(a.AutocompleteRowContentSecondary, { children: T })] }) } }, 521090: function(e, t, n) { "use strict"; n.r(t), n("733860"), n("47120"); var i = n("106351"), r = n("212819"), s = n("933557"), a = n("592125"), o = n("984933"), l = n("156361"), u = n("483360"), d = n("877565"), _ = n("590921"), c = n("665692"), E = n("176505"), I = n("689938"); let T = { sentinel: c.CHANNEL_SENTINEL, matches: (e, t, n, i, r) => r.mentions.channel !== _.ChannelMentionMode.DENY && !e.isPrivate(), queryResults(e, t, n, i, s) { let a, l, d = o.GUILD_SELECTABLE_CHANNELS_KEY; return n.charAt(0) === r.AutocompleterQuerySymbols.VOICE_CHANNEL && (d = o.GUILD_VOCAL_CHANNELS_KEY, n = n.substring(1)), i.forNonStringCommandOption ? a = u.default.queryApplicationCommandChannelResults({ query: n, channel: e, channelTypes: i.allowedChannelTypes }) : (a = u.default.queryChannelResults({ query: n, channel: e, type: d }), null != t && (l = u.default.queryStaticRouteChannels({ query: n, guild: t }), a.channels.unshift(...l))), { results: a, staticRouteChannels: l } }, renderResults(e) { let t, n, { results: { channels: i }, selectedIndex: s, query: o, options: u, onHover: _, onClick: E } = e, T = o.charAt(0) === r.AutocompleterQuerySymbols.VOICE_CHANNEL; return T ? (t = I.default.Messages.VOICE_CHANNELS_MATCHING, n = I.default.Messages.VOICE_CHANNELS, o = o.substring(1)) : u.forNonStringCommandOption ? (t = I.default.Messages.CHANNELS_MATCHING, n = I.default.Messages.CHANNELS) : (t = I.default.Messages.TEXT_CHANNELS_MATCHING, n = I.default.Messages.TEXT_CHANNELS), (0, d.renderAutocompleteGroup)({ query: o, selectedIndex: s, autocompletes: i, onHover: _, onClick: E, titleWithQuery: t, titleWithoutQuery: n, Component: l.default.Channel, getProps: e => ({ channel: e, key: e.id, category: a.default.getChannel(e.parent_id) }), getQuery: e => T ? "".concat(c.CHANNEL_SENTINEL).concat(r.AutocompleterQuerySymbols.VOICE_CHANNEL).concat(e) : "".concat(c.CHANNEL_SENTINEL).concat(e), key: "channels" }) }, onSelect(e) { let { results: { channels: t }, index: n, options: r } = e, a = t[n]; return r.insertText(function(e) { switch (e.type) { case i.ChannelTypes.PUBLIC_THREAD: case i.ChannelTypes.PRIVATE_THREAD: case i.ChannelTypes.ANNOUNCEMENT_THREAD: case i.ChannelTypes.GUILD_VOICE: case i.ChannelTypes.GUILD_STAGE_VOICE: case i.ChannelTypes.GUILD_CATEGORY: return '#"'.concat((0, s.escapeChannelName)(e.name), '"'); default: let t = o.default.getTextChannelNameDisambiguations(e.guild_id)[e.id]; return "#".concat(null != t ? t.name : e.name) } }(a), function(e) { return E.StaticChannelIds.has(e.id) ? "") : "<#".concat(e.id, ">") }(a)), { type: _.AutocompleteSelectionTypes.CHANNEL } } }; t.default = T }, 126226: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EMPTY_RESULTS: function() { return R } }); var i = n("735250"); n("470079"); var r = n("693789"), s = n("952265"), a = n("911969"), o = n("555573"), l = n("254711"), u = n("213459"), d = n("10718"), _ = n("367790"), c = n("998698"), E = n("895924"), I = n("581364"), T = n("826298"), f = n("496675"), S = n("156361"), h = n("226951"), A = n("877565"), m = n("590921"), N = n("665692"), p = n("689079"), O = n("689938"), C = n("442630"); let R = { results: { entries: [] } }; function g() { (0, s.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("87549")]).then(n.bind(n, "913962")); return t => (0, i.jsx)(e, { ...t }) }) } let L = { sentinel: N.COMMAND_SENTINEL, stores: [c.default, u.default, f.default], matches: (e, t, n, i, r) => r.commands !== m.CommandMode.DISABLED && null == c.default.getActiveCommand(e.id) && (i || r.commands !== m.CommandMode.OLD_BUILT_INS), queryResults(e, t, n, i, r) { if (0 === n.length && i.commands !== m.CommandMode.OLD_BUILT_INS) return R; if (i.commands === m.CommandMode.OLD_BUILT_INS) { let i = (0, l.getBuiltInCommands)(a.ApplicationCommandType.CHAT, !1, !1), r = RegExp("^".concat(h.default.escape(n)), "i"), s = (0, I.getMatchingGroupCommands)(i, r, { channel: e, guild: t }, m.MAX_COMMAND_AUTOCOMPLETE_RESULTS), o = l.BUILT_IN_SECTIONS[p.BuiltInSectionId.BUILT_IN]; return 0 === s.length ? R : { results: { entries: s.map(e => ({ command: e, section: o })) } } } let s = (0, T.getCommandQuery)(e, n), { commands: o, sections: u } = d.executeQuery(e, { commandType: a.ApplicationCommandType.CHAT, text: s.text }, { limit: m.MAX_COMMAND_AUTOCOMPLETE_RESULTS, placeholderCount: m.MAX_COMMAND_AUTOCOMPLETE_PLACEHOLDERS, scoreMethod: _.ScoreMethod.COMMAND_OR_APPLICATION, allowFetch: r }); if (null == o) return R; let c = o; if (s.hasSpaceTerminator) { let e = s.text.trim(), t = e + " "; c = c.filter(n => n.name === e || n.name.startsWith(t)) } return 0 === c.length ? R : { results: { entries: c.slice(0, m.MAX_COMMAND_AUTOCOMPLETE_RESULTS).map(e => ({ command: e, section: null == u ? void 0 : u.find(t => t.id === e.applicationId) })) } } }, renderResults(e) { let { results: { entries: t }, selectedIndex: n, channel: s, query: a, options: o, onHover: l, onClick: u } = e, d = (0, T.getCommandQuery)(s, a), _ = o.commands === m.CommandMode.OLD_BUILT_INS; return (0, A.renderAutocompleteGroup)({ query: d.text, selectedIndex: n, autocompletes: t, onHover: l, onClick: u, titleWithQuery: O.default.Messages.COMMANDS_MATCHING, titleWithoutQuery: O.default.Messages.COMMANDS, getQuery: e => "".concat(N.COMMAND_SENTINEL).concat(e), Component: _ ? S.default.Command : S.default.NewCommand, getProps: e => { let { command: t, section: n } = e; return { key: t.id, command: t, channel: s, guildId: s.guild_id, showImage: !0, section: n } }, key: "commands", headerClassName: _ ? C.legacyInputCommandHeader : null, headerTrailingContent: _ ? (0, i.jsx)(r.Button, { type: "button", look: r.Button.Looks.LINK, color: r.Button.Colors.BRAND, size: r.Button.Sizes.MIN, onClick: g, children: O.default.Messages.LEGACY_CHAT_INPUT_SLASH_COMMAND_MISSING_HELP_MESSAGE }) : null }) }, onSelect(e) { let { results: { entries: t }, index: n, queryText: i, options: r, channel: s, location: a, tabOrEnter: l } = e, { command: u, section: d } = t[n]; if (u.inputType === E.ApplicationCommandInputType.PLACEHOLDER) return null; if (r.commands === m.CommandMode.OLD_BUILT_INS) r.insertText(function(e) { return "".concat(N.COMMAND_SENTINEL).concat(e.name) }(u)); else { let e = a; null == e && (e = l ? E.ApplicationCommandTriggerLocations.QUERY : E.ApplicationCommandTriggerLocations.DISCOVERY), o.setActiveCommand({ channelId: s.id, command: u, section: null != d ? d : null, location: e, queryLength: null == i ? void 0 : i.length }) } return { type: m.AutocompleteSelectionTypes.COMMAND } } }; t.default = L }, 116364: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("392711"), s = n.n(r), a = n("788911"), o = n("911969"), l = n("174212"), u = n("998698"), d = n("667204"), _ = n("156361"), c = n("483360"), E = n("877565"), I = n("590921"), T = n("689079"), f = n("689938"), S = n("395208"), h = n("239840"); let A = { results: { choices: [] } }, m = { results: { choices: [], isLoading: !0 } }, N = Array.from({ length: 5 }, () => ({ name: "", displayName: "", value: "" })), p = { results: { choices: [], isError: !0 } }, O = s().debounce(d.default, T.AUTOCOMPLETE_OPTION_DEBOUNCE_TIME, { leading: !0, trailing: !0 }), C = { stores: [u.default, l.default], showEmpty: !0, matches(e, t, n, i, r) { let s = u.default.getActiveOption(e.id); return r.commands !== I.CommandMode.DISABLED && null != s && (s.type === o.ApplicationCommandOptionType.BOOLEAN || !!(null == s ? void 0 : s.autocomplete) || (null == s ? void 0 : s.choices) != null && s.choices.length > 0) }, queryResults(e, t, n, i, r) { var s; let a = u.default.getActiveOption(e.id); if (null == a) return A; if (a.autocomplete) { if (r) { let r = u.default.getActiveCommand(e.id); O({ command: r, optionValues: i.getCommandOptionValues(), context: { channel: e, guild: t, autocomplete: { name: a.name, query: n } } }) } if (l.default.getLastErrored(e.id)) return p; let s = l.default.getAutocompleteChoices(e.id, a.name, n); return null == s ? m : { results: { choices: s } } } return { results: c.default.queryChoiceResults({ query: n, choices: a.type === o.ApplicationCommandOptionType.BOOLEAN ? T.BOOLEAN_CHOICES : null !== (s = a.choices) && void 0 !== s ? s : [] }) } }, renderResults(e) { let { results: { choices: t, isLoading: n, isError: r }, selectedIndex: s, query: o, onHover: l, onClick: u } = e; return r ? (0, i.jsx)(a.default, { message: f.default.Messages.APPLICATION_COMMAND_AUTOCOMPLETE_FAILED, noResultsImageURL: h, className: S.noAutocompleteResults }) : 0 !== t.length || n ? (0, E.renderAutocompleteGroup)({ query: o, selectedIndex: s, autocompletes: n ? N : t, onHover: l, onClick: u, titleWithQuery: f.default.Messages.OPTIONS_MATCHING, titleWithoutQuery: f.default.Messages.OPTIONS, Component: n ? _.default.Loading : _.default.Generic, getProps: (e, t) => ({ key: t.toString(), text: e.displayName }), getQuery: e => e, key: "choice" }) : (0, i.jsx)(a.default, { message: f.default.Messages.APPLICATION_COMMAND_AUTOCOMPLETE_NO_OPTIONS, noResultsImageURL: h, className: S.noAutocompleteResults }) }, onSelect(e) { let { results: { choices: t }, index: n, options: i } = e, r = t[n]; return i.insertText(function(e) { return e.displayName }(r)), { type: I.AutocompleteSelectionTypes.CHOICE } } }; t.default = C }, 290401: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("735250"); n("470079"); var r = n("998698"), s = n("156361"), a = n("877565"), o = n("590921"), l = n("689938"); let u = { results: { commandOptions: [] } }, d = { stores: [r.default], focusMode: o.FocusMode.AUTO_WHEN_FILTERED, matches: (e, t, n, i, s) => !(i || null == r.default.getActiveCommand(e.id) || null != r.default.getActiveOption(e.id)), queryResults(e, t, n, i, s) { let a = r.default.getActiveCommand(e.id); if ((null == a ? void 0 : a.options) == null) return u; let o = r.default.getOptionStates(e.id), l = a.options.filter(e => { var t; return e.displayName.startsWith(n) && !(null === (t = o[e.name]) || void 0 === t ? void 0 : t.hasValue) }); return 0 === l.length ? u : { results: { commandOptions: l } } }, renderResults(e) { let { results: { commandOptions: t }, selectedIndex: n, query: r, onHover: o, onClick: u } = e, d = [], _ = []; t.forEach(e => { (e.required ? d : _).push(e) }); let c = d.length > 0 ? (0, a.renderAutocompleteGroup)({ query: r, selectedIndex: n, autocompletes: d, onHover: o, onClick: u, titleWithQuery: l.default.Messages.REQUIRED_OPTIONS_MATCHING, titleWithoutQuery: l.default.Messages.REQUIRED_OPTIONS, Component: s.default.Generic, getProps: (e, t) => ({ key: t.toString(), text: e.displayName, description: e.displayDescription }), getQuery: e => e, key: "required-options" }) : null, E = _.length > 0 ? (0, a.renderAutocompleteGroup)({ query: r, selectedIndex: n, autocompletes: _, onHover: o, onClick: u, titleWithQuery: l.default.Messages.OPTIONS_MATCHING, titleWithoutQuery: d.length > 0 ? l.default.Messages.OTHER_OPTIONS : l.default.Messages.OPTIONS, Component: s.default.Generic, getProps: (e, t) => ({ key: t.toString(), text: e.displayName, description: e.displayDescription }), getQuery: e => e, key: "optional-options", indexOffset: d.length }) : null; return (0, i.jsxs)(i.Fragment, { children: [c, E] }) }, onSelect(e) { let { results: { commandOptions: t }, index: n, options: i } = e, r = t[n]; return i.insertText(function(e) { return "".concat(e.displayName, ":") }(r)), { type: o.AutocompleteSelectionTypes.COMMAND_OPTION } } }; t.default = d }, 341561: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("952265"), s = n("285651"), a = n("268350"), o = n("926491"), l = n("373228"), u = n("419922"), d = n("430824"), _ = n("156361"), c = n("483360"), E = n("877565"), I = n("590921"), T = n("665692"), f = n("981631"), S = n("689938"), h = n("573198"); function A(e, t) { return (0, i.jsx)(u.default, { sticker: e, isInteracting: t, size: 40 }) } let m = { sentinel: T.EMOJI_SENTINEL, stores: [o.default], matches: (e, t, n, i, r) => n.length > 1, queryResults(e, t, n, i, r) { let o = i.allowStickers ? 0 : 40, l = f.MAX_AUTOCOMPLETE_RESULTS + o, { emojis: { unlocked: u } } = c.default.queryEmojiResults({ query: n, channel: e, intention: i.emojiIntention, maxCount: l }); "-" === n[0] && (u = u.filter(e => { var t; return null === (t = e.names) || void 0 === t ? void 0 : t.includes(n) })); let d = []; if (i.allowStickers) { (0, a.fetchStickerPacks)(); let t = c.default.queryStickers([n], !0, [e, (e, t) => t === s.StickerSendability.SENDABLE]), i = Math.max(4, 8 - u.length); d = t.slice(0, i), "-" === n[0] && (d = t.filter(e => e.sticker.name === n)) } let _ = u.slice(0, l - d.length); return { results: { emojis: _, emojisLocked: [], stickers: d }, metadata: { numEmojiResults: _.length, numLockedEmojiResults: 0, numStickerResults: d.length } } }, renderResults(e) { let { results: { emojis: t, stickers: s, emojisLocked: a }, selectedIndex: o, query: l, onHover: u, onClick: c } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, E.renderAutocompleteGroup)({ query: l, selectedIndex: o, autocompletes: t, onHover: u, onClick: c, titleWithQuery: S.default.Messages.EMOJI_MATCHING, titleWithoutQuery: S.default.Messages.EMOJI, Component: _.default.Emoji, getProps: e => ({ emoji: e, key: e.id || e.uniqueName || e.name, sentinel: T.EMOJI_SENTINEL, guild: null != e.guildId ? d.default.getGuild(e.guildId) : null }), getQuery: e => "".concat(T.EMOJI_SENTINEL).concat(e), key: "emoji" }), a.length > 0 ? (0, E.renderAutocompleteGroup)({ query: l, selectedIndex: o, autocompletes: a, onHover: u, onClick: () => { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("9766")]).then(n.bind(n, "889684")); return t => (0, i.jsx)(e, { ...t }) }) }, titleWithQuery: 0 === t.length ? S.default.Messages.EMOJI_MATCHING : null, titleWithoutQuery: 0 === t.length ? S.default.Messages.EMOJI : null, Component: _.default.EmojiUpsell, getProps: e => { let { emojis: t } = e; return { key: "emoji-upsell", emojis: t } }, getQuery: e => "".concat(T.EMOJI_SENTINEL).concat(e), key: "emoji-upsell", indexOffset: t.length }) : null, (t.length > 0 || a.length > 0) && s.length > 0 && (0, i.jsx)(_.default.Divider, { className: h.emojiStickersDivider }), (0, E.renderAutocompleteGroup)({ query: l, selectedIndex: o, autocompletes: s, onHover: u, onClick: c, titleWithQuery: S.default.Messages.STICKERS_MATCHING, titleWithoutQuery: S.default.Messages.STICKER, Component: _.default.Sticker, getProps: e => { let { comparator: t, sticker: n } = e; return { renderSticker: A, queryMatch: t !== n.name.toLocaleLowerCase() ? t : void 0, sticker: n, key: n.id } }, getQuery: e => e, key: "stickers", indexOffset: t.length + a.length, headerClassName: t.length > 0 ? h.stickersHeaderWithEmojiResults : void 0 })] }) }, onSelect(e) { let { results: { emojis: t, emojisLocked: n, stickers: i }, index: r, options: s } = e; if (r < t.length) { let e = t[r]; return s.insertText(function(e) { return "".concat(T.EMOJI_SENTINEL).concat(e.name).concat(T.EMOJI_SENTINEL) }(e), function(e) { var t; let n = e.animated ? "a" : ""; return e.managed || null == e.id ? "".concat(T.EMOJI_SENTINEL).concat(e.name).concat(T.EMOJI_SENTINEL) : "<".concat(n, ":").concat(null !== (t = e.originalName) && void 0 !== t ? t : e.name, ":").concat(e.id, ">") }(e)), { type: I.AutocompleteSelectionTypes.EMOJI, metadata: { emojiId: e.id, numEmojiResults: t.length, numStickerResults: i.length, expressionName: e.name, isCustom: null != e.id, isAnimated: e.animated } } } if ((r -= t.length) < n.length) return { type: null }; if ((r -= n.length) < i.length) { let e = i[r]; return s.insertText(""), s.sendSticker(e.sticker, l.StickerSelectLocation.AUTOCOMPLETE), { type: I.AutocompleteSelectionTypes.STICKER, metadata: { numEmojiResults: t.length, numStickerResults: i.length, stickerId: e.sticker.id } } } return { type: null } } }; t.default = m }, 277981: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("392711"), a = n.n(s), o = n("481060"), l = n("85235"), u = n("367907"), d = n("998698"), _ = n("895924"), c = n("718745"), E = n("156361"), I = n("285952"), T = n("590921"), f = n("665692"), S = n("981631"), h = n("689938"), A = n("867012"); let m = { results: { command: null, integrations: [], isLoading: !1 } }; function N(e, t, n) { var i, r; let s; return n.commands === T.CommandMode.OLD_BUILT_INS ? (s = t.split(" ")[0].substring(f.COMMAND_SENTINEL.length), t = t.substring((null !== (i = s.length) && void 0 !== i ? i : 0) + f.COMMAND_SENTINEL.length)) : s = null === (r = d.default.getActiveCommand(e.id)) || void 0 === r ? void 0 : r.name, { command: s, query: t.trim() } } let p = { stores: [d.default, c.default], matches(e, t, n, i, r) { var s; return r.commands !== T.CommandMode.DISABLED && (r.commands === T.CommandMode.OLD_BUILT_INS ? n.startsWith(f.COMMAND_SENTINEL + "gif") || n.startsWith(f.COMMAND_SENTINEL + "tenor") : (null === (s = d.default.getActiveCommand(e.id)) || void 0 === s ? void 0 : s.integrationType) === S.ChannelTextAreaIntegrationTypes.GIF && d.default.getOptionStates(e.id).query.hasValue) }, queryResults(e, t, n, i, r) { let { command: s, query: o } = N(e, n, i); if (null == s) return m; let u = a().findKey(S.ChannelTextAreaIntegrations, e => e.command === s); r && null != u && o.length > 0 && l.default.search(u, o); let d = c.default.getResults(u, o); return null == d ? m : { results: { command: s, integrations: d.results, isLoading: d.loading } } }, renderResults(e) { let { results: { integrations: t, isLoading: n }, selectedIndex: s, channel: a, query: l, options: u, onHover: _, onClick: c } = e, { command: f, query: m } = N(a, l, u); if (null == f || 0 === m.length) return null; if (n) return (0, i.jsx)(o.Spinner, { className: A.spinner, type: o.Spinner.Type.SPINNING_CIRCLE }); if (null != t) { var p, O; let e = !1, n = t.map((t, n) => { if (t.type === S.ChannelTextAreaIntegrationTypes.GIF) { var r, a, o; return e = !0, (0, i.jsx)(E.default.GIFIntegration, { className: A.horizontalAutocomplete, onClick: c, onHover: _, selected: s === n, index: n, width: null !== (r = t.meta.width) && void 0 !== r ? r : 0, height: null !== (a = t.meta.height) && void 0 !== a ? a : 0, src: null !== (o = t.meta.src) && void 0 !== o ? o : "", url: t.meta.url }, "".concat(t.meta.url).concat(t.meta.src)) } }), o = u.commands === T.CommandMode.OLD_BUILT_INS ? f : null !== (O = null === (p = d.default.getActiveCommand(a.id)) || void 0 === p ? void 0 : p.integrationTitle) && void 0 !== O ? O : f, l = m.length > 0 && null != o ? h.default.Messages.CONTENT_MATCHING.format({ query: m, command: o }) : null != o ? o : f; return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)(E.default.Title, { title: l }), e ? (0, i.jsx)(I.default, { className: A.horizontalAutocompletes, children: n }) : n] }, "gifs") } }, onSelect(e) { let { results: { command: t, integrations: n }, index: i, type: r, options: s, channel: a } = e; if (null == t) return { type: null }; let o = n[i]; if (r === T.SelectType.INSERT ? s.replaceText(function(e) { return e.meta.url }(o)) : s.sendMessage(function(e) { return e.meta.url }(o)), u.default.trackWithMetadata(S.AnalyticEvents.SEARCH_RESULT_SELECTED, { search_type: S.SearchTypes.GIF, index_num: i, source_object: "/".concat(t) }), s.commands !== T.CommandMode.OLD_BUILT_INS) { let e = d.default.getActiveCommand(a.id); (null == e ? void 0 : e.inputType) === _.ApplicationCommandInputType.BUILT_IN_INTEGRATION && u.default.trackWithMetadata(S.AnalyticEvents.APPLICATION_COMMAND_USED, { command_id: e.id, application_id: e.applicationId, command_type: e.type }) } return { type: T.AutocompleteSelectionTypes.GIF } } }; function O(e) { return e.meta.url } t.default = p }, 420001: function(e, t, n) { "use strict"; n.r(t), n("757143"); var i = n("911969"), r = n("10718"), s = n("367790"), a = n("895924"), o = n("826298"), l = n("695346"), u = n("594174"), d = n("156361"), _ = n("5192"), c = n("417574"), E = n("877565"), I = n("590921"), T = n("126226"), f = n("689938"); function S(e) { let t = c.BOT_MENTION_COMMAND_REGEX.exec(e); if (null != t) { let n = t[1], i = u.default.getUser(n); return null == i || !i.bot || i.isClyde() ? null : { type: "mention", cleanedQuery: e.substring(t[0].length).trim(), user: i } } return null } let h = { ...T.default, sentinel: void 0, focusMode: I.FocusMode.MANUAL, matches(e, t, n, i, r) { if (r.commands === I.CommandMode.DISABLED || r.commands === I.CommandMode.OLD_BUILT_INS || n.length < 2 || !l.ShowCommandSuggestions.getSetting()) return !1; let s = S(n); return null != s && s.cleanedQuery.length > 0 }, queryResults(e, t, n, a, u) { if (!l.ShowCommandSuggestions.getSetting()) return T.EMPTY_RESULTS; let d = S(n); if (null == d) return T.EMPTY_RESULTS; let _ = (0, o.getCommandQuery)(e, d.cleanedQuery), { commands: c, sections: E } = r.executeQuery(e, { commandType: i.ApplicationCommandType.CHAT, text: _.text }, { limit: I.MAX_COMMAND_AUTOCOMPLETE_RESULTS, placeholderCount: I.MAX_COMMAND_AUTOCOMPLETE_PLACEHOLDERS, scoreMethod: s.ScoreMethod.COMMAND_OR_APPLICATION, allowFetch: u }); if (null == c) return T.EMPTY_RESULTS; let f = c; if (_.hasSpaceTerminator) { let e = _.text.trim(), t = e + " "; f = f.filter(n => n.name === e || n.name.startsWith(t)) } return 0 === f.length ? T.EMPTY_RESULTS : { results: { entries: f.slice(0, I.MAX_COMMAND_AUTOCOMPLETE_RESULTS).map(e => ({ command: e, section: null == E ? void 0 : E.find(t => t.id === e.applicationId) })) } } }, renderResults(e) { let { results: { entries: t }, selectedIndex: n, guild: i, channel: r, query: s, options: a, onHover: o, onClick: l } = e; return (0, E.renderAutocompleteGroup)({ query: s, selectedIndex: n, autocompletes: t, onHover: o, onClick: l, titleWithQuery: f.default.Messages.COMMANDS_MATCHING, titleWithoutQuery: f.default.Messages.COMMANDS, Component: a.commands === I.CommandMode.OLD_BUILT_INS ? d.default.Command : d.default.NewCommand, getProps: e => { let { command: t, section: n } = e; return { key: t.id, command: t, channel: r, guildId: r.guild_id, showImage: !0, section: n } }, getQuery: e => { let t = S(e); if ("mention" !== t.type) return e; let n = _.default.getName(null == i ? void 0 : i.id, r.id, t.user); return e.replace(c.BOT_MENTION_COMMAND_REGEX, "@".concat(n)) }, key: "commands" }) }, onSelect(e) { let { results: t, index: n, type: i, options: r, channel: s } = e, o = T.default.onSelect({ results: t, index: n, type: i, options: r, channel: s, location: a.ApplicationCommandTriggerLocations.SUGGESTION }); return null == o ? null : { ...o, type: I.AutocompleteSelectionTypes.COMMAND_SUGGESTION } } }; t.default = h }, 65090: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("271383"), a = n("156361"), o = n("483360"), l = n("51144"), u = n("877565"), d = n("590921"), _ = n("665692"), c = n("689938"); let E = { sentinel: _.MENTION_SENTINEL, stores: [s.default], matches: (e, t, n, i, r) => (r.mentions.user !== d.UserMentionMode.DENY || r.mentions.role !== d.RoleMentionMode.DENY || r.mentions.global !== d.GlobalMentionMode.DENY) && !0, queryResults(e, t, n, i, r) { let s = i.mentions.global === d.GlobalMentionMode.ALLOW_EVERYONE || i.mentions.global === d.GlobalMentionMode.ALLOW_EVERYONE_OR_HERE, a = i.mentions.global === d.GlobalMentionMode.ALLOW_EVERYONE_OR_HERE, l = i.mentions.user !== d.UserMentionMode.DENY, u = i.mentions.role !== d.RoleMentionMode.DENY, _ = i.mentions.user === d.UserMentionMode.ALLOW_GUILD, c = i.mentions.role === d.RoleMentionMode.ALLOW_ALL; return { results: o.default.queryMentionResults({ query: n, channel: e, canMentionEveryone: s, canMentionHere: a, canMentionUsers: l, canMentionRoles: u, includeAllGuildUsers: _, includeNonMentionableRoles: c, request: r }) } }, renderResults(e) { let t, n, { results: { users: s, globals: o, roles: l }, selectedIndex: E, channel: I, query: T, options: f, onHover: S, onClick: h } = e, A = s.map((e, t) => (0, i.jsx)(a.default.User, { guildId: I.guild_id, onClick: h, onHover: S, selected: E === t, index: t, user: e.user, nick: e.nick, status: e.status, hidePersonalInformation: f.hidePersonalInformation }, e.user.id)), m = o.map((e, t) => (0, i.jsx)(a.default.Generic, { onClick: h, onHover: S, selected: E === t + s.length, index: s.length + t, text: e.text, description: f.hideMentionDescription ? null : e.description, "aria-label": e.text }, e.text)), N = l.map((e, t) => (0, i.jsx)(a.default.Role, { onClick: h, onHover: S, selected: E === t + s.length + o.length, index: s.length + o.length + t, role: e, hideDescription: f.hideMentionDescription }, e.id)); return f.mentions.user === d.UserMentionMode.DENY ? (t = c.default.Messages.ROLES_MATCHING, n = c.default.Messages.ROLES) : (t = c.default.Messages.MEMBERS_MATCHING, n = c.default.Messages.MEMBERS), (0, i.jsxs)(r.Fragment, { children: [(0, u.renderHeader)({ titleWithQuery: t, titleWithoutQuery: n, query: T, getQuery: e => "".concat(_.MENTION_SENTINEL).concat(e) }), A, s.length > 0 && o.length > 0 ? (0, i.jsx)(a.default.Divider, {}) : null, m, s.length > 0 && l.length > 0 || o.length > 0 && l.length > 0 ? (0, i.jsx)(a.default.Divider, {}) : null, N] }, "mentions") }, onSelect(e) { let { results: { users: t, globals: n, roles: i }, index: r, options: s, channel: a } = e, u = t[r], c = n[r - t.length], E = i[r - t.length - n.length]; return null != u ? s.insertText(function(e, t, n) { return o.default.hasSameRoleAsUsername(t, e) ? "".concat(_.MENTION_SENTINEL).concat(e.tag) : "".concat(_.MENTION_SENTINEL).concat(l.default.getUserTag(e, { identifiable: n ? "never" : "always" })) }(u.user, a, s.hidePersonalInformation), function(e) { return "<@".concat(e.id, ">") }(u.user)) : null != c ? s.insertText(function(e) { return e.text }(c)) : null != E && s.insertText(function(e) { return "".concat(_.MENTION_SENTINEL).concat(e.name) }(E), function(e) { return "<@&".concat(e.id, ">") }(E)), { type: d.AutocompleteSelectionTypes.MENTION } } }; t.default = E }, 591236: function(e, t, n) { "use strict"; n.r(t); var i = n("496675"), r = n("156361"), s = n("483360"), a = n("877565"), o = n("590921"), l = n("665692"), u = n("981631"), d = n("185923"), _ = n("689938"); let c = { sentinel: l.REACTION_START_SENTINEL, matches(e, t, n, r, s) { var a, o; return r && null !== (o = null === (a = s.chatInputType.autocomplete) || void 0 === a ? void 0 : a.addReactionShortcut) && void 0 !== o && o && (i.default.can(u.Permissions.ADD_REACTIONS, e) || e.isPrivate()) }, queryResults(e, t, n, i, r) { let { emojis: a } = s.default.queryEmojiResults({ query: n, channel: e, intention: d.EmojiIntention.REACTION }); return { results: { emojis: a.unlocked } } }, renderResults(e) { let { results: { emojis: t }, selectedIndex: n, query: i, onHover: s, onClick: o } = e; return (0, a.renderAutocompleteGroup)({ query: i, selectedIndex: n, autocompletes: t, onHover: s, onClick: o, titleWithQuery: _.default.Messages.REACTIONS_MATCHING, titleWithoutQuery: _.default.Messages.EMOJI, Component: r.default.Emoji, getProps: e => ({ emoji: e, key: e.id || e.uniqueName || e.name, sentinel: l.EMOJI_SENTINEL }), getQuery: e => "".concat(l.REACTION_START_SENTINEL).concat(e), key: "reactions" }) }, onSelect(e) { let { results: { emojis: t }, index: n, options: i } = e, r = t[n]; return i.sendMessage(function(e) { return "".concat(l.REACTION_START_SENTINEL).concat(e.name).concat(l.REACTION_END_SENTINEL) }(r)), { type: o.AutocompleteSelectionTypes.REACTION } } }; t.default = c }, 606992: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useChannelAutocompleteLayerPosition: function() { return a } }), n("47120"); var i = n("470079"), r = n("40851"), s = n("590921"); function a(e) { let { editorHeight: t, type: n, state: a, isInPopoutExperiment: o = !1 } = e, [l, u] = i.useState(void 0), d = null == a ? void 0 : a.query, _ = null == a ? void 0 : a.isVisible, { renderWindow: c } = i.useContext(r.default), E = i.useCallback(() => { var e, t, i, r; if (null != a && (null == d || !_)) { u(void 0); return } if ((null == d ? void 0 : d.type) === s.AutocompleteOptionTypes.GIFS || null != n && !o && !(null === (e = n.autocomplete) || void 0 === e ? void 0 : e.alwaysUseLayer)) { u(null); return } let l = c.document.getSelection(), E = null != l && l.rangeCount > 0 ? l.getRangeAt(0) : null; if (null == E) return; let I = E.startContainer, T = E.startOffset; for (; null != I;) { if (I.nodeType !== Node.TEXT_NODE || null == I.nodeValue) { u(null); return } if ((null === (t = I.nodeValue) || void 0 === t ? void 0 : t.length) === 0) { T = null !== (r = null == (I = I.previousSibling) ? void 0 : null === (i = I.nodeValue) || void 0 === i ? void 0 : i.length) && void 0 !== r ? r : 0; continue } null != d && (T >= d.queryText.length ? T -= d.queryText.length : T = 0); break } if (null == I) return; let f = c.document.createRange(); f.setStart(I, T), f.setEnd(I, T); let S = f.getBoundingClientRect(); (null == S ? void 0 : S.height) !== 0 && u(null != S ? S : null) }, [o, c.document, a, _, d, n]); return i.useEffect(() => (c.document.addEventListener("selectionchange", E), () => c.document.removeEventListener("selectionchange", E)), [c.document, E]), i.useEffect(() => { E() }, [E, t]), l } }, 691841: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("470079"), r = n("924826"), s = n("536895"), a = n("40851"), o = n("590921"); function l(e) { var t, n, l; let { navId: u, scrollerRef: d, state: _, onFocus: c } = e, { renderWindow: E } = i.useContext(a.default), I = (e, t) => { var n; if (null === (n = d.current) || void 0 === n || n.scrollToTop(), e && null != _.query) { let e = _.query.typeInfo.focusMode, n = !(e === o.FocusMode.MANUAL || e === o.FocusMode.AUTO_WHEN_FILTERED && 0 === _.query.queryText.length); _.isVisible && (!0 !== t || !1 !== n) ? (f.setFocus("0"), null == c || c(0)) : (f.setFocus(null), null == c || c(null)) } }, T = e => { var t; if (null === (t = d.current) || void 0 === t || t.scrollToBottom(), e && null != _.query && _.query.resultCount > 0) { let e = _.query.resultCount - 1; f.setFocus(e.toString()), null == c || c(e) } }, f = (0, r.default)({ id: u, isEnabled: _.isVisible, orientation: s.Orientations.VERTICAL, useVirtualFocus: !0, setFocus: (e, t) => { let n = E.document.querySelector(e); if (null != n) { var i; null === (i = d.current) || void 0 === i || i.scrollIntoViewNode({ node: n }) } null == c || c(+t) }, onNavigateNextAtEnd: () => I(!0), onNavigatePreviousAtStart: () => T(!0), scrollToStart: () => (I(!1, !1), Promise.resolve()), scrollToEnd: () => (T(!1), Promise.resolve()) }); return i.useEffect(() => { I(!0, !0) }, [null === (t = _.query) || void 0 === t ? void 0 : t.type, null === (n = _.query) || void 0 === n ? void 0 : n.queryText, null === (l = _.query) || void 0 === l ? void 0 : l.isLoading, _.isVisible]), f } }, 51062: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return A } }), n("47120"); var i = n("470079"), r = n("207561"), s = n("442837"), a = n("456007"), o = n("998698"), l = n("541716"), u = n("797610"), d = n("271383"), _ = n("496675"), c = n("246946"), E = n("594174"), I = n("106824"), T = n("691841"), f = n("981631"), S = n("377668"), h = n("185923"); function A(e, t, n) { var A, m, N, p, O, C, R; let { channel: g, type: L } = e, [v, D] = i.useState(() => (0, I.createInitialState)()), M = (0, r.useForceUpdate)(), y = (0, s.useStateFromStores)([d.default], () => { if (null != e.guild) { var t; return null != d.default.getMember(null === (t = e.guild) || void 0 === t ? void 0 : t.id, S.CLYDE_AI_USER_ID) } return !1 }), P = (0, u.useClydeEnabled)(e.guild, e.channel) && !y && !(0, u.canUseCustomClydeProfiles)(e.guild), U = (0, s.useStateFromStores)([d.default, E.default], () => { var e, t; let n = E.default.getCurrentUser(); return null !== (t = null != g.guild_id && null != n ? null === (e = d.default.getMember(g.guild_id, n.id)) || void 0 === e ? void 0 : e.isPending : null) && void 0 !== t && t }), { canMentionEveryone: b, hidePersonalInformation: G } = (0, s.useStateFromStoresObject)([_.default, c.default], () => ({ canMentionEveryone: g.isPrivate() || U || L === l.ChatInputTypes.RULES_INPUT || _.default.can(f.Permissions.MENTION_EVERYONE, g), hidePersonalInformation: c.default.hidePersonalInformation }), [g, L, U]), { activeCommand: w, activeCommandOption: k } = (0, s.useStateFromStoresObject)([o.default], () => ({ activeCommand: o.default.getActiveCommand(g.id), activeCommandOption: o.default.getActiveOption(g.id) })), B = (0, T.default)({ navId: "channel-autocomplete", scrollerRef: n, state: v, onFocus: e => F.setSelectedIndex(e) }), V = null === (A = e.editorRef.current) || void 0 === A ? void 0 : A.getCurrentWord(), x = { ...e, navigator: B, activeCommand: w, activeCommandOption: k, canMentionUsers: null !== (O = null === (m = L.users) || void 0 === m ? void 0 : m.allowMentioning) && void 0 !== O && O, canMentionEveryone: b, canMentionClyde: P, hidePersonalInformation: G, hideMentionDescription: L === l.ChatInputTypes.RULES_INPUT, emojiIntention: L === l.ChatInputTypes.RULES_INPUT ? h.EmojiIntention.COMMUNITY_CONTENT : h.EmojiIntention.CHAT, currentWord: null !== (C = null == V ? void 0 : V.word) && void 0 !== C ? C : "", currentWordIsAtStart: (null == V ? void 0 : V.isAtStart) === !0, optionText: null != k ? (0, a.getString)({ [k.name]: null !== (R = null === (N = e.editorRef.current) || void 0 === N ? void 0 : N.getCurrentCommandOptionValue()) && void 0 !== R ? R : [] }, k.name) : "" }, [F] = i.useState(() => new I.default(x)); return i.useEffect(() => { F.updateProps(x) }), i.useImperativeHandle(t, () => F, [F]), i.useEffect(() => { let e = e => D(e); return F.on("change", e), F.on("update", M), () => { F.off("change", e), F.off("update", M) } }, [M, F]), i.useEffect(() => { var e; let t = null === (e = v.query) || void 0 === e ? void 0 : e.typeInfo.stores; if (null != t) { let e = () => F.queryResults(); for (let n of t) n.addChangeListener(e); return () => { for (let n of t) n.removeChangeListener(e) } } }, [F, null === (p = v.query) || void 0 === p ? void 0 : p.typeInfo]), [v, F, B] } }, 71080: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ADVANCED_MODE_ON_KEY: function() { return h }, AudienceSelectorSections: function() { return l }, MEMBER_REQUEST_COUNT: function() { return S }, RowType: function() { return o }, getChannelPermissionSpecMap: function() { return A } }); var i, r, s, a, o, l, u, d, _ = n("230711"), c = n("197062"), E = n("727866"), I = n("63063"), T = n("981631"), f = n("689938"); (i = o || (o = {}))[i.EMPTY_STATE = 0] = "EMPTY_STATE", i[i.ADMINISTRATOR = 1] = "ADMINISTRATOR", i[i.ROLE = 2] = "ROLE", i[i.OWNER = 3] = "OWNER", i[i.MEMBER = 4] = "MEMBER", i[i.USER = 5] = "USER", i[i.GUILD = 6] = "GUILD", (r = l || (l = {}))[r.ROLES = 0] = "ROLES", r[r.MEMBERS = 1] = "MEMBERS", r[r.USERS = 2] = "USERS", r[r.GUILDS = 3] = "GUILDS"; let S = 20, h = "channelPermissionSettingsAdvancedModeOn"; function A(e, t, n, i) { let r = e.type; return { [T.Permissions.VIEW_CHANNEL.toString()]: { title: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_VIEW_CHANNEL : f.default.Messages.VIEW_CHANNEL, description: (() => { if (t) switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_CATEGORY_EVERYONE; case T.ChannelTypes.GUILD_VOICE: case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_VOICE_EVERYONE; default: return f.default.Messages.ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_TEXT_EVERYONE } return r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_VIEW_CHANNEL_DESCRIPTION_CHANNEL })(), flag: T.Permissions.VIEW_CHANNEL }, [T.Permissions.MANAGE_CHANNELS.toString()]: { title: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.MANAGE_CHANNELS : f.default.Messages.MANAGE_CHANNEL, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_VOICE: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_VOICE; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_STAGE; default: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_CHANNEL_DESCRIPTION_TEXT } })(), flag: T.Permissions.MANAGE_CHANNELS }, [T.Permissions.MANAGE_ROLES.toString()]: { title: f.default.Messages.MANAGE_PERMISSIONS, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_ROLES_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_ROLES_DESCRIPTION_STAGE; default: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_ROLES_DESCRIPTION_CHANNEL } })(), flag: T.Permissions.MANAGE_ROLES }, [T.Permissions.MANAGE_WEBHOOKS.toString()]: { title: f.default.Messages.MANAGE_WEBHOOKS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_MANAGE_WEBHOOKS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_MANAGE_WEBHOOKS_DESCRIPTION_CHANNEL, flag: T.Permissions.MANAGE_WEBHOOKS }, [T.Permissions.CREATE_INSTANT_INVITE.toString()]: { title: f.default.Messages.CREATE_INSTANT_INVITE, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_CREATE_INSTANT_INVITE_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_VOICE: case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_CREATE_INSTANT_INVITE_DESCRIPTION_VOICE; default: return f.default.Messages.ROLE_PERMISSIONS_CREATE_INSTANT_INVITE_DESCRIPTION_TEXT } })(), flag: T.Permissions.CREATE_INSTANT_INVITE }, [T.Permissions.SEND_MESSAGES.toString()]: { title: T.ChannelTypesSets.GUILD_THREADS_ONLY.has(r) ? f.default.Messages.CREATE_FORUM_POSTS : n && r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.SEND_MESSAGES_AND_CREATE_FORUM_POSTS : f.default.Messages.SEND_MESSAGES, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return n ? f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_FORUM: return (null == i ? void 0 : i.createPostsDisabled) && !e.isMediaChannel() ? c.default.getForumChannelPermissionText() : f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION_TEXT; case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION_TEXT; case T.ChannelTypes.GUILD_ANNOUNCEMENT: return f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION_ANNOUNCEMENT.format({ articleURL: I.default.getArticleURL(T.HelpdeskArticles.ANNOUNCEMENT_CHANNELS) }); case T.ChannelTypes.GUILD_VOICE: return E.default.getTextInVoiceSendMessageChannelPermissionText(null == i ? void 0 : i.sendMessagesDisabled); default: return f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION_TEXT } })(), flag: T.Permissions.SEND_MESSAGES }, [T.Permissions.EMBED_LINKS.toString()]: { title: f.default.Messages.EMBED_LINKS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_EMBED_LINKS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_EMBED_LINKS_DESCRIPTION_TEXT, flag: T.Permissions.EMBED_LINKS }, [T.Permissions.ATTACH_FILES.toString()]: { title: f.default.Messages.ATTACH_FILES, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_ATTACH_FILES_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_ATTACH_FILES_DESCRIPTION_TEXT, flag: T.Permissions.ATTACH_FILES }, [T.Permissions.ADD_REACTIONS.toString()]: { title: f.default.Messages.ADD_REACTIONS, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_ADD_REACTIONS_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_VOICE: return f.default.Messages.ROLE_PERMISSIONS_ADD_REACTIONS_DESCRIPTION_TEXT_WITH_VOICE_CHANNEL_EFFECTS; default: return f.default.Messages.ROLE_PERMISSIONS_ADD_REACTIONS_DESCRIPTION_TEXT } })(), flag: T.Permissions.ADD_REACTIONS }, [T.Permissions.USE_EXTERNAL_EMOJIS.toString()]: { title: f.default.Messages.ROLE_PERMISSIONS_USE_EXTERNAL_EMOJIS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_USE_EXTERNAL_EMOJIS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_USE_EXTERNAL_EMOJIS_DESCRIPTION_TEXT, flag: T.Permissions.USE_EXTERNAL_EMOJIS }, [T.Permissions.USE_EXTERNAL_STICKERS.toString()]: { title: f.default.Messages.ROLE_PERMISSIONS_USE_EXTERNAL_STICKERS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_USE_EXTERNAL_STICKERS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_USE_EXTERNAL_STICKERS_DESCRIPTION_TEXT, flag: T.Permissions.USE_EXTERNAL_STICKERS }, [T.Permissions.MENTION_EVERYONE.toString()]: { title: r === T.ChannelTypes.GUILD_STAGE_VOICE ? f.default.Messages.MENTION_EVERYONE_STAGE : f.default.Messages.MENTION_EVERYONE, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_MENTION_EVERYONE_DESCRIPTION_CATEGORY : r === T.ChannelTypes.GUILD_STAGE_VOICE ? f.default.Messages.ROLE_PERMISSIONS_MENTION_EVERYONE_DESCRIPTION_STAGE : f.default.Messages.ROLE_PERMISSIONS_MENTION_EVERYONE_DESCRIPTION_TEXT, flag: T.Permissions.MENTION_EVERYONE }, [T.Permissions.MANAGE_MESSAGES.toString()]: { title: f.default.Messages.MANAGE_MESSAGES, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_MESSAGES_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_ANNOUNCEMENT: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_MESSAGES_DESCRIPTION_ANNOUNCEMENT.format({ articleURL: I.default.getArticleURL(T.HelpdeskArticles.ANNOUNCEMENT_CHANNELS) }); default: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_MESSAGES_DESCRIPTION_TEXT } })(), flag: T.Permissions.MANAGE_MESSAGES }, [T.Permissions.READ_MESSAGE_HISTORY.toString()]: { title: T.ChannelTypesSets.GUILD_THREADS_ONLY.has(r) ? f.default.Messages.READ_POST_HISTORY : f.default.Messages.READ_MESSAGE_HISTORY, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_VOICE: return E.default.getTextInVoiceReadMessageHistoryChannelPermissionText(null == i ? void 0 : i.readMessageHistoryDisabled); case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION_FORUM_CHANNEL; default: return f.default.Messages.ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION_TEXT } })(), flag: T.Permissions.READ_MESSAGE_HISTORY }, [T.Permissions.SEND_TTS_MESSAGES.toString()]: { title: f.default.Messages.ROLE_PERMISSIONS_SEND_TTS_MESSAGES, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_SEND_TTS_MESSAGES_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_SEND_TTS_MESSAGES_DESCRIPTION_TEXT, flag: T.Permissions.SEND_TTS_MESSAGES }, [T.Permissions.USE_APPLICATION_COMMANDS.toString()]: { title: f.default.Messages.ROLE_PERMISSIONS_USE_APPLICATION_COMMANDS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_USE_APPLICATION_COMMANDS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_USE_APPLICATION_COMMANDS_DESCRIPTION_TEXT, flag: T.Permissions.USE_APPLICATION_COMMANDS }, [T.Permissions.SEND_VOICE_MESSAGES.toString()]: { title: f.default.Messages.ROLE_PERMISSIONS_SEND_VOICE_MESSAGE, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_SEND_VOICE_MESSAGES_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_SEND_VOICE_MESSAGES_DESCRIPTION_TEXT, flag: T.Permissions.SEND_VOICE_MESSAGES }, [T.Permissions.SEND_POLLS.toString()]: { title: f.default.Messages.ROLE_PERMISSIONS_SEND_POLLS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_SEND_POLLS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_SEND_POLLS_DESCRIPTION_TEXT, flag: T.Permissions.SEND_POLLS }, [T.Permissions.USE_CLYDE_AI.toString()]: { title: f.default.Messages.ROLE_PERMISSIONS_USE_CLYDE_AI, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_USE_CLYDE_AI_GUILD_DESCRIPTION : f.default.Messages.ROLE_PERMISSIONS_USE_CLYDE_AI_CHANNEL_DESCRIPTION, flag: T.Permissions.USE_CLYDE_AI }, [T.Permissions.CONNECT.toString()]: { title: f.default.Messages.CONNECT, description: (() => { if (t) switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_CATEGORY_EVERYONE; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_STAGE_EVERYONE; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_THREADS_EVERYONE; default: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_VOICE_EVERYONE } switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_STAGE; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_THREADS; default: return f.default.Messages.ROLE_PERMISSIONS_CONNECT_DESCRIPTION_VOICE } })(), flag: T.Permissions.CONNECT }, [T.Permissions.SPEAK.toString()]: { title: f.default.Messages.SPEAK, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_SPEAK_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_SPEAK_DESCRIPTION_STAGE; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_SPEAK_DESCRIPTION_THREADS; default: return f.default.Messages.ROLE_PERMISSIONS_SPEAK_DESCRIPTION_VOICE } })(), flag: T.Permissions.SPEAK }, [T.Permissions.STREAM.toString()]: { title: f.default.Messages.VIDEO, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_STREAM_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_STREAM_DESCRIPTION_THREADS; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_STREAM_DESCRIPTION_STAGE; default: return f.default.Messages.ROLE_PERMISSIONS_STREAM_DESCRIPTION_VOICE } })(), flag: T.Permissions.STREAM }, [T.Permissions.USE_EMBEDDED_ACTIVITIES.toString()]: { title: f.default.Messages.USE_EMBEDDED_ACTIVITIES, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_USE_EMBEDDED_ACTIVITIES_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_USE_EMBEDDED_ACTIVITIES_DESCRIPTION_THREADS; default: return f.default.Messages.ROLE_PERMISSIONS_USE_EMBEDDED_ACTIVITIES_DESCRIPTION_CHANNEL } })(), flag: T.Permissions.USE_EMBEDDED_ACTIVITIES }, [T.Permissions.USE_SOUNDBOARD.toString()]: { title: f.default.Messages.USE_SOUNDBOARD, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION_CATEGORY.format({ helpCenterArticle: I.default.getArticleURL(T.HelpdeskArticles.SOUNDBOARD) }); case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION_THREADS.format({ helpCenterArticle: I.default.getArticleURL(T.HelpdeskArticles.SOUNDBOARD) }); default: return f.default.Messages.ROLE_PERMISSIONS_USE_SOUNDBOARD_DESCRIPTION_VOICE.format({ helpCenterArticle: I.default.getArticleURL(T.HelpdeskArticles.SOUNDBOARD) }) } })(), flag: T.Permissions.USE_SOUNDBOARD }, [T.Permissions.USE_EXTERNAL_SOUNDS.toString()]: { title: f.default.Messages.USE_EXTERNAL_SOUNDS, description: f.default.Messages.ROLE_PERMISSIONS_USE_EXTERNAL_SOUNDS_DESCRIPTION, flag: T.Permissions.USE_EXTERNAL_SOUNDS }, [T.Permissions.USE_VAD.toString()]: { title: f.default.Messages.USE_VAD, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_STAGE; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_THREADS; default: return f.default.Messages.ROLE_PERMISSIONS_USE_VAD_DESCRIPTION_VOICE } })(), flag: T.Permissions.USE_VAD }, [T.Permissions.PRIORITY_SPEAKER.toString()]: { title: f.default.Messages.PRIORITY_SPEAKER, description: (() => { let e = { keybind: f.default.Messages.KEYBIND_PUSH_TO_TALK_PRIORITY, onClick: () => { _.default.open(T.UserSettingsSections.KEYBINDS) } }; switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_CATEGORY.format(e); case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_THREADS.format(e); default: return f.default.Messages.ROLE_PERMISSIONS_PRIORITY_SPEAKER_DESCRIPTION_VOICE.format(e) } })(), flag: T.Permissions.PRIORITY_SPEAKER }, [T.Permissions.MUTE_MEMBERS.toString()]: { title: f.default.Messages.MUTE_MEMBERS, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_STAGE; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_THREADS; default: return f.default.Messages.ROLE_PERMISSIONS_MUTE_MEMBERS_DESCRIPTION_VOICE } })(), flag: T.Permissions.MUTE_MEMBERS }, [T.Permissions.DEAFEN_MEMBERS.toString()]: { title: f.default.Messages.DEAFEN_MEMBERS, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_DEAFEN_MEMBERS_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_DEAFEN_MEMBERS_DESCRIPTION_THREADS; default: return f.default.Messages.ROLE_PERMISSIONS_DEAFEN_MEMBERS_DESCRIPTION_VOICE } })(), flag: T.Permissions.DEAFEN_MEMBERS }, [T.Permissions.MOVE_MEMBERS.toString()]: { title: f.default.Messages.MOVE_MEMBERS, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return f.default.Messages.ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_STAGE_VOICE: return f.default.Messages.ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_STAGE; case T.ChannelTypes.GUILD_TEXT: case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_THREADS; default: return f.default.Messages.ROLE_PERMISSIONS_MOVE_MEMBERS_DESCRIPTION_VOICE } })(), flag: T.Permissions.MOVE_MEMBERS }, [T.Permissions.REQUEST_TO_SPEAK.toString()]: { title: f.default.Messages.REQUEST_TO_SPEAK, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_REQUEST_TO_SPEAK_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_REQUEST_TO_SPEAK_DESCRIPTION_STAGE, flag: T.Permissions.REQUEST_TO_SPEAK }, [T.Permissions.MANAGE_THREADS.toString()]: { title: T.ChannelTypesSets.GUILD_THREADS_ONLY.has(r) ? f.default.Messages.MANAGE_FORUM_POSTS : n && r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.MANAGE_THREADS_AND_FORUM_POSTS : f.default.Messages.MANAGE_THREADS, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return n ? f.default.Messages.ROLE_PERMISSIONS_MANAGE_THREADS_AND_FORUMS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_MANAGE_THREADS_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_THREADS_AND_FORUMS_DESCRIPTION_TEXT; default: return f.default.Messages.ROLE_PERMISSIONS_MANAGE_THREADS_DESCRIPTION_TEXT } })(), flag: T.Permissions.MANAGE_THREADS }, [T.Permissions.CREATE_PUBLIC_THREADS.toString()]: { title: f.default.Messages.CREATE_PUBLIC_THREADS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_CREATE_PUBLIC_THREADS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_CREATE_PUBLIC_THREADS_DESCRIPTION_TEXT, flag: T.Permissions.CREATE_PUBLIC_THREADS }, [T.Permissions.CREATE_PRIVATE_THREADS.toString()]: { title: f.default.Messages.CREATE_PRIVATE_THREADS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_CREATE_PRIVATE_THREADS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_CREATE_PRIVATE_THREADS_DESCRIPTION_TEXT, flag: T.Permissions.CREATE_PRIVATE_THREADS }, [T.Permissions.SEND_MESSAGES_IN_THREADS.toString()]: { title: T.ChannelTypesSets.GUILD_THREADS_ONLY.has(r) ? f.default.Messages.SEND_MESSAGES_IN_FORUM_POSTS : n && r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.SEND_MESSAGES_IN_THREADS_AND_FORUM_POSTS : f.default.Messages.SEND_MESSAGES_IN_THREADS, description: (() => { switch (r) { case T.ChannelTypes.GUILD_CATEGORY: return n ? f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_AND_FORUM_POSTS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_DESCRIPTION_CATEGORY; case T.ChannelTypes.GUILD_FORUM: case T.ChannelTypes.GUILD_MEDIA: return f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_AND_FORUM_POSTS_DESCRIPTION_TEXT; default: return f.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_IN_THREADS_DESCRIPTION_TEXT } })(), flag: T.Permissions.SEND_MESSAGES_IN_THREADS }, [T.Permissions.MANAGE_EVENTS.toString()]: { title: f.default.Messages.MANAGE_EVENTS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_MANAGE_EVENTS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_MANAGE_EVENTS_DESCRIPTION_CHANNEL, flag: T.Permissions.MANAGE_EVENTS }, [T.Permissions.CREATE_EVENTS.toString()]: { title: f.default.Messages.CREATE_EVENTS, description: r === T.ChannelTypes.GUILD_CATEGORY ? f.default.Messages.ROLE_PERMISSIONS_CREATE_EVENTS_DESCRIPTION_CATEGORY : f.default.Messages.ROLE_PERMISSIONS_CREATE_EVENTS_DESCRIPTION_CHANNEL, flag: T.Permissions.CREATE_EVENTS }, [T.Permissions.SET_VOICE_CHANNEL_STATUS.toString()]: { title: f.default.Messages.VOICE_CHANNEL_STATUS_PERMISSION_TITLE, description: f.default.Messages.VOICE_CHANNEL_STATUS_PERMISSION_DESCRIPTION, flag: T.Permissions.SET_VOICE_CHANNEL_STATUS } } }(s = u || (u = {})).SETTINGS_PAGE = "settings-page", s.MEMBERS_LIST = "members-list", s.EMPTY_STATE = "empty-state", s.CREATE_CHANNEL = "create-channel", (a = d || (d = {})).BASIC = "basic", a.ADVANCED = "advanced" }, 605436: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canCreatePrivateChannel: function() { return Y }, extractPermissionOverwrites: function() { return W }, flipEveryonePermission: function() { return B }, getExistingMembersRows: function() { return G }, getExistingRolesRowWithPermissionDisabled: function() { return D }, getExistingRolesRows: function() { return v }, getMembersRows: function() { return b }, getNoRolesRow: function() { return N }, getPrivateChannelHintText: function() { return j }, getRemoveTooltipHint: function() { return k }, getRoleRowData: function() { return A }, getRolesRows: function() { return g }, getRolesRowsWithPermissionDisabled: function() { return L }, getRowTypeLabel: function() { return w }, grantUserChannelAccess: function() { return x }, hasCustomRoles: function() { return H }, isAdmin: function() { return h }, isEveryoneRoleId: function() { return O }, isNotEveryoneRoleId: function() { return C }, isPrivateGuildChannel: function() { return F }, sortRoles: function() { return m }, toggleChannelEveryonePermission: function() { return V } }), n("653041"); var i = n("149765"), r = n("866442"), s = n("741361"), a = n("911969"), o = n("131704"), l = n("271383"), u = n("594174"), d = n("934415"), _ = n("823379"), c = n("700785"), E = n("709054"), I = n("51144"), T = n("71080"), f = n("981631"), S = n("689938"); function h(e) { return i.has(e.permissions, f.Permissions.ADMINISTRATOR) } function A(e) { var t, n; let s = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; let a = (n = e, i.has(n.permissions, f.Permissions.ADMINISTRATOR) ? T.RowType.ADMINISTRATOR : T.RowType.ROLE); return { rowType: a, colorString: null !== (t = e.colorString) && void 0 !== t ? t : (0, r.int2hex)(f.DEFAULT_ROLE_COLOR), name: e.name, id: e.id, disabled: h(e) || s, key: "".concat(a, ":").concat(e.id), tags: e.tags } } function m(e, t) { let n = h(e) ? 0 : 1, i = h(t) ? 0 : 1; return n !== i ? n - i : t.position - e.position } function N() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : S.default.Messages.PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_NO_ROLES; return [{ rowType: T.RowType.EMPTY_STATE, colorString: (0, r.int2hex)(f.DEFAULT_ROLE_COLOR), name: e, disabled: !0, id: "EMPTY_STATE" }] } function p(e, t, n, r) { let s = u.default.getCurrentUser(); if (null == s) return !1; if (null == e) return s.id !== t; let a = e.permissionOverwrites[t]; return (null == r ? void 0 : r[t]) != null && (a = r[t]), null == a || !i.has(a.allow, n) } function O(e, t) { return E.default.castGuildIdAsEveryoneGuildRoleId(e) === t } function C(e, t) { return !O(e, t) } function R(e, t) { return !O(e.id, t.id) } function g(e, t, n, i) { let r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : () => !0; return Object.values(t).filter(t => !h(t) && p(n, t.id, i) && R(e, t) && r(t.name)).sort(m).map(e => A(e)) } function L(e, t, n, r) { let s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : () => !0; return Object.values(t).filter(t => !h(t) && p(n, t.id, r) && R(e, t) && s(t.name)).sort(m).map(e => A(e, i.has(e.permissions, r))) } function v(e, t, n, i, r) { var s, a, o, l, u; let d = []; return 0 === (d = (s = e, a = t, o = n, l = i, u = r, Object.values(a).filter(e => h(e) || !p(o, e.id, l, u) && R(s, e))).sort(m).map(e => A(e))).length ? N(S.default.Messages.CHANNEL_PERMISSIONS_NO_ROLES) : d } function D(e, t, n, r, s) { var a, o, l, u, d; let _ = []; return 0 === (_ = (a = e, o = t, l = n, u = r, d = s, Object.values(o).filter(e => { var t; return h(e) || !p(l, e.id, u, d) && R(a, e) || i.has(i.combine(e.permissions, null === (t = l.permissionOverwrites[e.id]) || void 0 === t ? void 0 : t.allow), u) })).sort(m).map(e => A(e, i.has(e.permissions, r)))).length ? N(S.default.Messages.CHANNEL_PERMISSIONS_NO_ROLES) : _ } function M(e, t) { var n; return null !== (n = l.default.getNick(t.id, e.id)) && void 0 !== n ? n : I.default.getName(e) } function y(e, t) { return t.isOwner(e) } function P(e, t) { var n, i, r; let s = (i = e, t.isOwner(i) ? T.RowType.OWNER : T.RowType.MEMBER); return { rowType: s, name: M(e, t), nickname: null !== (n = l.default.getNick(t.id, e.id)) && void 0 !== n ? n : null, username: I.default.getName(e), id: e.id, avatarURL: e.getAvatarURL(t.id, 24), bot: e.bot, verifiedBot: e.isVerifiedBot(), disabled: (r = e, t.isOwner(r)), key: "".concat(s, ":").concat(e.id) } } function U(e, t) { return e.rowType !== t.rowType ? e.rowType - t.rowType : e.name.toLocaleLowerCase().localeCompare(t.name.toLocaleLowerCase()) } function b(e, t, n, i) { let r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : () => !0; return e.map(u.default.getUser).filter(_.isNotNullish).filter(e => !n.isOwner(e) && p(t, e.id, i) && (r(M(e, n)) || r(e.username) || r(e.discriminator))).map(e => P(e, n)).sort(U) } function G(e, t, n, i, r) { var s, a, o, l, d; return (s = e, a = t, o = n, l = i, d = r, s.map(u.default.getUser).filter(_.isNotNullish).filter(e => { var t; return !p(a, e.id, l, d) || (t = e, o.isOwner(t)) })).map(e => P(e, n)).sort(U) } function w(e, t) { switch (e) { case T.RowType.ROLE: return S.default.Messages.PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_ROLE; case T.RowType.OWNER: return S.default.Messages.PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_OWNER; case T.RowType.ADMINISTRATOR: return S.default.Messages.PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_ADMINISTRATOR; case T.RowType.MEMBER: return t ? S.default.Messages.PRIVATE_CHANNEL_ADD_MEMBERS_MODAL_ROW_MEMBER : null; case T.RowType.USER: return S.default.Messages.USER; case T.RowType.GUILD: return S.default.Messages.SERVER; case T.RowType.EMPTY_STATE: return null } } function k(e) { switch (e) { case T.RowType.ROLE: return S.default.Messages.CHANNEL_PERMISSIONS_ADD_MEMBERS_TOOLTIP; case T.RowType.OWNER: return S.default.Messages.CHANNEL_PERMISSIONS_ADD_MEMBERS_TOOLTIP_OWNER; case T.RowType.ADMINISTRATOR: return S.default.Messages.CHANNEL_PERMISSIONS_ADD_MEMBERS_TOOLTIP_ADMINISTRATOR; case T.RowType.MEMBER: return S.default.Messages.CHANNEL_PERMISSIONS_ADD_MEMBERS_TOOLTIP; case T.RowType.EMPTY_STATE: default: return null } } function B(e, t, n) { let r = e.permissionOverwrites[e.guild_id]; null == r && (r = c.makeEveryoneOverwrite(e.guild_id)); let s = { ...r }; return s.deny = i.remove(s.deny, t), s.allow = i.remove(s.allow, t), !n && (s.deny = i.add(s.deny, t)), s } function V(e, t, n) { let i = B(e, t, n); (0, s.updatePermission)(e, i.id, i.allow, i.deny) } function x(e, t) { let n = u.default.getCurrentUser(); if (null == n) return; let r = e.permissionOverwrites[n.id]; if (null == r) { let r = { id: n.id, type: a.PermissionOverwriteType.MEMBER, allow: i.add(c.NONE, t), deny: c.NONE }; return (0, s.savePermissionUpdates)(e.id, [r], !0) } { let { allow: n, deny: a } = r; return n = i.add(n, t), (0, s.updatePermission)(e, r.id, n, a) } } function F(e, t) { if (null == e) return !1; let n = e.permissionOverwrites[e.guild_id]; return (null == t ? void 0 : t[e.guild_id]) != null && (n = t[e.guild_id]), null != n && i.has(n.deny, e.accessPermissions) } function H(e, t) { let n = Object.keys(t); return 0 !== n.length && (1 !== n.length || n[0] !== e.id) } function Y(e, t, n) { return e === f.ChannelTypes.GUILD_TEXT || e === f.ChannelTypes.GUILD_ANNOUNCEMENT ? t : !(0, o.isGuildVocalChannelType)(e) && e !== f.ChannelTypes.GUILD_CATEGORY || t && n } function j(e) { switch (e) { case f.ChannelTypes.GUILD_TEXT: case f.ChannelTypes.GUILD_ANNOUNCEMENT: return S.default.Messages.PRIVATE_TEXT_CHANNEL_CREATION_PERMISSION_MISSING_HINT.format(); case f.ChannelTypes.GUILD_VOICE: return S.default.Messages.PRIVATE_VOICE_CHANNEL_CREATION_PERMISSION_MISSING_HINT.format(); case f.ChannelTypes.GUILD_CATEGORY: return S.default.Messages.PRIVATE_CATEGORY_CREATION_PERMISSION_MISSING_HINT.format(); default: return null } } function W(e, t) { let n = []; return Object.values(e).forEach(e => { let { row: i } = e; null != i.id && "" !== i.id && (i.rowType === T.RowType.ROLE ? n.push((0, d.permissionOverwriteForRole)(i.id, t)) : i.rowType === T.RowType.MEMBER && n.push((0, d.permissionOverwriteForUser)(i.id, t))) }), n } }, 553385: function(e, t, n) { "use strict"; n.r(t), n.d(t, { forcePrompt: function() { return E }, initiateChannelPrompts: function() { return c }, sendGamingStatsMessage: function() { return I }, updateGamingStats: function() { return T } }); var i = n("544891"), r = n("430742"), s = n("904245"), a = n("623292"), o = n("592125"), l = n("703558"), u = n("375954"), d = n("585483"), _ = n("981631"); function c(e) { i.HTTP.post({ url: _.Endpoints.INITIATE_CHANNEL_PROMPTS, body: { guild_ids: e } }) } function E(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : _.MessageTypes.GUILD_DEADCHAT_REVIVE_PROMPT; i.HTTP.post({ url: _.Endpoints.FORCE_SEND_PROMPT(e), body: { prompt_type: t } }) } async function I(e, t, n) { await i.HTTP.post({ url: _.Endpoints.SEND_GAMING_STATS(t), body: { message_reference: { guild_id: e, channel_id: t, message_id: n } } }), f(t) } async function T(e) { let t = await i.HTTP.patch({ url: _.Endpoints.UPDATE_GAMING_STATS(e.channel_id, e.id) }); if (null != t.text && "" !== t.text) { let n = o.default.getChannel(e.channel_id); null != n && ((0, a.createPendingReply)({ channel: n, message: e, shouldMention: !1, showMentionToggle: !1 }), f(n.id)), r.default.saveDraft(e.channel_id, t.text, l.DraftType.ChannelMessage) } } function f(e) { u.default.getMessages(e).hasMoreAfter ? s.default.jumpToPresent(e, _.MAX_MESSAGES_PER_CHANNEL) : d.ComponentDispatch.dispatch(_.ComponentActions.SCROLLTO_PRESENT) } }, 146661: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("430824"), s = n("70956"), a = n("709054"), o = n("553385"), l = n("556178"), u = n("890477"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = 0; class c extends i.default { constructor(...e) { super(...e), d(this, "actions", { POST_CONNECTION_OPEN: e => this.handleConnectionOpen(e), IDLE: () => this.handleIdleChange() }), d(this, "handleConnectionOpen", e => { this._attemptDeadchatPrompt(), this._triggerGamingStatsSetupExperiment() }), d(this, "handleIdleChange", () => { Date.now() - _ > s.default.Millis.HOUR && this._attemptDeadchatPrompt() }), d(this, "_attemptDeadchatPrompt", () => { let e = r.default.getGuilds(), t = a.default.keys(e).filter(e => u.SimpleDeadchatPromptExperiment.getCurrentConfig({ guildId: e, location: "manager" }).triggerDeadchat); t.length > 0 && (_ = Date.now(), (0, o.initiateChannelPrompts)(t)) }), d(this, "_triggerGamingStatsSetupExperiment", () => { let e = r.default.getGuilds(); a.default.keys(e).forEach(e => { l.GamingStatsSetupExperiment.trackExposure({ guildId: e, location: "manager" }) }) }) } } t.default = new c }, 556178: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GamingStatsSetupExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "guild", id: "2023-09_gaming_stats_setup", label: "Gaming stats exposure setup", defaultConfig: { trackGamingStats: !1 }, treatments: [{ id: 1, label: "trigger gaming stats data", config: { trackGamingStats: !0 } }] }) }, 890477: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SimpleDeadchatPromptExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "guild", id: "2023-08_deadchat_simple_prompt_guild", label: "Simple deadchat prompt", defaultConfig: { triggerDeadchat: !1, enableDeadchat: !1 }, treatments: [{ id: 0, label: "Control", config: { triggerDeadchat: !0, enableDeadchat: !1 } }, { id: 1, label: "trigger deadchat upon connection open", config: { triggerDeadchat: !0, enableDeadchat: !0 } }] }) }, 746877: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useHereMentionCallback: function() { return c } }), n("47120"); var i = n("470079"), r = n("392711"), s = n.n(r), a = n("941028"), o = n("509848"), l = n("849522"), u = n("439170"); let d = "@here"; function _(e) { return !!(e.length > 1) || !(1 === e.length && "GROUP" === e[0].type && "unknown" === e[0].id) } function c(e, t, n) { let r = (0, l.default)(), [c, E] = i.useState(!1), I = i.useMemo(() => s().debounce(e => { var i, s, l, c; if (i = e, s = r, l = t, c = n, _(u.default.getProps(l, c).groups) || !(i.length < d.length) && !(i.length > s) && -1 !== i.indexOf(d) && ((0, a.subscribeChannel)(l, c, o.DEFAULT_RANGES), 1)) E(!0) }, 200, { maxWait: 500 }), [r, t, n]); i.useEffect(() => { let i = u.default.getProps(t, n).groups; if (null != t && !_(i) && !c) return e.addListener("text-changed", I), () => { e.removeListener("text-changed", I), I.cancel() } }, [c, I, e, t, n]) } }, 541716: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChatInputTypes: function() { return N }, SlateToolbarTypes: function() { return r } }); var i, r, s = n("873546"), a = n("703558"); (i = r || (r = {}))[i.TOOLTIP = 0] = "TOOLTIP", i[i.STATIC = 1] = "STATIC", i[i.NONE = 2] = "NONE"; let o = { analyticsName: "normal", attachments: !0, autocomplete: { addReactionShortcut: !0, forceChatLayer: !0, reactions: !0 }, commands: { enabled: !0 }, drafts: { type: a.DraftType.ChannelMessage, commandType: a.DraftType.SlashCommand, autoSave: !0 }, emojis: { button: !0 }, gifs: { button: !0, allowSending: !0 }, gifts: { button: !0 }, permissions: { requireSendMessages: !0 }, showThreadPromptOnReply: !0, stickers: { button: !0, allowSending: !0, autoSuggest: !0 }, users: { allowMentioning: !0 }, submit: { button: !0, ignorePreference: s.isMobile, disableEnterToSubmit: s.isMobile, clearOnSubmit: !0, useDisabledStylesOnSubmit: !0 }, uploadLongMessages: !0, upsellLongMessages: { iconOnly: !1 }, showCharacterCount: !0, sedReplace: !0 }, l = { analyticsName: "overlay", autocomplete: { addReactionShortcut: !0, forceChatLayer: !0 }, drafts: { type: a.DraftType.ChannelMessage, autoSave: !0 }, emojis: { button: !0 }, gifs: { button: !0 }, gifts: { button: !0 }, permissions: { requireSendMessages: !0 }, showThreadPromptOnReply: !0, stickers: { button: !0, allowSending: !0 }, users: { allowMentioning: !0 }, submit: { button: !0, ignorePreference: s.isMobile, disableEnterToSubmit: s.isMobile, clearOnSubmit: !0, useDisabledStylesOnSubmit: !0 }, upsellLongMessages: { iconOnly: !1 }, showCharacterCount: !0 }, u = { analyticsName: "sidebar", attachments: !0, autocomplete: { addReactionShortcut: !0 }, commands: { enabled: !0 }, disableAutoFocus: !0, drafts: { type: a.DraftType.ChannelMessage, commandType: a.DraftType.SlashCommand }, emojis: { button: !0 }, gifs: { allowSending: !0 }, permissions: { requireSendMessages: !0 }, stickers: { allowSending: !0, autoSuggest: !0 }, users: { allowMentioning: !0 }, submit: { button: !0, ignorePreference: s.isMobile, disableEnterToSubmit: s.isMobile, clearOnSubmit: !0, useDisabledStylesOnSubmit: !0 }, uploadLongMessages: !0, showCharacterCount: !0, upsellLongMessages: { iconOnly: !0 } }, d = { analyticsName: "edit", drafts: { type: a.DraftType.ChannelMessage }, emojis: { button: !0 }, users: { allowMentioning: !0 }, expressionPicker: { onlyEmojis: !0 }, permissions: { requireSendMessages: !0 }, submit: { useDisabledStylesOnSubmit: !0 }, showCharacterCount: !0 }, _ = { analyticsName: "forum", drafts: { type: a.DraftType.ChannelMessage }, emojis: { button: !0 }, gifs: { allowSending: !0 }, permissions: { requireSendMessages: !0 }, submit: { useDisabledStylesOnSubmit: !0, allowEmptyMessage: !0 }, autocomplete: { alwaysUseLayer: !0, small: !0 }, showCharacterCount: !0 }, c = { analyticsName: "voice_channel_status", drafts: { type: a.DraftType.ChannelMessage }, emojis: { button: !0 }, expressionPicker: { onlyEmojis: !0 }, permissions: { requireSendMessages: !1 }, submit: { useDisabledStylesOnSubmit: !0, allowEmptyMessage: !0 }, autocomplete: { alwaysUseLayer: !0, small: !0 }, markdown: { disableCodeBlocks: !0, disableBlockQuotes: !0 }, showCharacterCount: !0 }, E = { analyticsName: "thread_creation", attachments: !0, drafts: { type: a.DraftType.FirstThreadMessage }, emojis: { button: !0 }, gifs: { allowSending: !0 }, stickers: { allowSending: !0 }, users: { allowMentioning: !0 }, permissions: { requireCreateTherads: !0 }, submit: { useDisabledStylesOnSubmit: !0, button: !0 }, disableAutoFocus: !0, showCharacterCount: !0, hideAttachmentArea: !0, upsellLongMessages: { iconOnly: !0 } }, I = { analyticsName: "create_forum_post", attachments: !0, drafts: { type: a.DraftType.FirstThreadMessage }, gifs: { allowSending: !0 }, stickers: { allowSending: !0 }, users: { allowMentioning: !0 }, permissions: { requireSendMessages: !0 }, submit: { useDisabledStylesOnSubmit: !0, disableEnterToSubmit: !0 }, disableAutoFocus: !0, hideAttachmentArea: !0, uploadLongMessages: !0 }, T = { analyticsName: "create_poll", attachments: !0, drafts: { type: a.DraftType.ChannelMessage }, emojis: { button: !0 }, gifs: { allowSending: !0 }, permissions: { requireSendMessages: !0 }, submit: { useDisabledStylesOnSubmit: !0, disableEnterToSubmit: !0 } }, f = { analyticsName: "user_profile", drafts: { type: a.DraftType.ChannelMessage }, emojis: { button: !0 }, permissions: { requireSendMessages: !1 }, users: { allowMentioning: !0 }, autocomplete: { alwaysUseLayer: !0, small: !0 }, submit: { useDisabledStylesOnSubmit: !0, clearOnSubmit: !0 }, toolbarType: 2 }, S = { analyticsName: "profile_bio_input", drafts: { type: a.DraftType.ChannelMessage }, emojis: { button: !0 }, permissions: { requireSendMessages: !0 }, submit: { useDisabledStylesOnSubmit: !0, disableEnterToSubmit: !0 }, disableAutoFocus: !0, showCharacterCount: !0 }, h = { analyticsName: "custom_gift_type", drafts: { type: a.DraftType.ChannelMessage }, emojis: {}, permissions: { requireSendMessages: !0 }, submit: { useDisabledStylesOnSubmit: !0, disableEnterToSubmit: !0 }, disableAutoFocus: !0, showCharacterCount: !0 }, A = { analyticsName: "rules_input", drafts: { type: a.DraftType.ChannelMessage }, permissions: { requireSendMessages: !0 }, autocomplete: { alwaysUseLayer: !0, small: !0 }, showCharacterCount: !0 }, m = { analyticsName: "forum_channel_guidelines", drafts: { type: a.DraftType.ChannelMessage }, permissions: { requireSendMessages: !1 }, submit: { useDisabledStylesOnSubmit: !0, disableEnterToSubmit: !0 }, autocomplete: { alwaysUseLayer: !0, small: !0 }, showCharacterCount: !0, toolbarType: 1 }, N = { NORMAL: o, OVERLAY: l, SIDEBAR: u, EDIT: d, FORM: _, VOICE_CHANNEL_STATUS: c, THREAD_CREATION: E, USER_PROFILE: f, PROFILE_BIO_INPUT: S, CUSTOM_GIFT: h, RULES_INPUT: A, CREATE_FORUM_POST: I, CREATE_POLL: T, FORUM_CHANNEL_GUIDELINES: m, ATOMIC_REACTOR_REPLY_INPUT: { analyticsName: "atomic_reator_reply_input", drafts: { type: a.DraftType.ChannelMessage }, permissions: { requireSendMessages: !0 }, users: { allowMentioning: !0 }, submit: { useDisabledStylesOnSubmit: !0, disableEnterToSubmit: !0 }, disableAutoFocus: !0, showCharacterCount: !0 } } }, 465343: function(e, t, n) { "use strict"; n.r(t), n.d(t, { resolveApplicationCommandOption: function() { return h }, resolvePlaintextInlineVoid: function() { return S } }), n("47120"); var i = n("933557"), r = n("797610"), s = n("339085"), a = n("633302"), o = n("601070"), l = n("592125"), u = n("984933"), d = n("271383"), _ = n("430824"), c = n("594174"), E = n("483360"), I = n("709054"), T = n("752305"), f = n("377668"); function S(e, t, n, c) { let { allowUsers: T = !0, allowRoles: S = !0 } = null != c ? c : {}; switch (e[0]) { case "@": return function(e, t, n, i, s) { let [a, o] = e.slice(1).split("#", 2), u = null != t ? _.default.getGuild(t) : null, c = (0, r.getClydeExperimentEnabled)(u); if (s && null == o && null != u) { for (let e of Object.values(_.default.getRoles(u.id))) if (a === e.name) return { type: "roleMention", roleId: e.id, children: [{ text: "" }] } } if (i) { let e = null != n ? l.default.getChannel(n) : null; if (null != e) { if (e.isPrivate()) { for (let t of e.recipients) if (A(a, o, t)) return { type: "userMention", userId: t, children: [{ text: "" }] } } else { for (let { userId: e } of d.default.getMembers(t)) if (A(a, o, e)) return { type: "userMention", userId: e, children: [{ text: "" }] }; if (c && A(a, o, f.CLYDE_AI_USER_ID)) return { type: "userMention", userId: f.CLYDE_AI_USER_ID, children: [{ text: "" }] } } } } return null }(e, t, n, T, S); case ":": return function(e, t) { let n = a.default.EMOJI_NAME_RE.exec(e); if (null == n) return null; let i = n[1], r = s.default.getDisambiguatedEmojiContext(t).getCustomEmoji(); if (null != r && i in r) { let e = r[i]; return { type: "customEmoji", emoji: { emojiId: e.id, name: "require_colons" in e && e.require_colons ? ":".concat(e.name, ":") : e.name, animated: !0 === e.animated, jumboable: !1 }, children: [{ text: "" }] } } return null }(e, t); case "#": return function(e, t) { let n; if (null == t) return null; n = e.length > 3 && '"' === e[1] && '"' === e[e.length - 1] ? (0, i.unescapeChannelName)(e.slice(2, e.length - 1)) : e.slice(1); let r = u.default.getTextChannelNameDisambiguations(t); for (let e of I.default.keys(r)) if (r[e].name === n) return { type: "channelMention", channelId: e, children: [{ text: "" }] }; for (let e of E.COMMAND_SUPPORTED_CHANNEL_TYPE_KEYS) { if (e !== u.GUILD_SELECTABLE_CHANNELS_KEY) { for (let { channel: i } of u.default.getChannels(t)[e]) if (i.name === n) return { type: "channelMention", channelId: i.id, children: [{ text: "" }] } } } let s = o.default.getActiveJoinedThreadsForGuild(t); for (let e of I.default.keys(s)) for (let t of I.default.keys(s[e])) { let { channel: i } = s[e][t]; if (i.name === n) return { type: "channelMention", channelId: i.id, children: [{ text: "" }] } } return null }(e, t) } return null } function h(e, t, n, i) { let r = S(e, t, n, i); return null == r ? null : (0, T.voidToOptionValue)(r) } function A(e, t, n) { let i = c.default.getUser(n); return null != i && (n === f.CLYDE_AI_USER_ID && "clyde" === e.toLowerCase() || i.username === e && i.discriminator === (null != t ? t : "0")) } }, 40786: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ id: "2022-12_timestamp_tooltip", label: "Timestamp Tooltip", kind: "user", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }) }, 565924: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("592125"), r = n("981631"); function s(e) { if (null == e.parent_id) return e.type === r.ChannelTypes.GUILD_CATEGORY ? (e.position + 1) * 1e3 : e.position; { var t, n; let r = ((null !== (n = null === (t = i.default.getChannel(e.parent_id)) || void 0 === t ? void 0 : t.position) && void 0 !== n ? n : 0) + 1) * 1e3; return e.isGuildVocal() ? r + e.position + 500 : r + e.position } } function a(e, t) { var n, i, r, a, o, l; if (e.score !== t.score) return t.score - e.score; let u = s(e.record), d = s(t.record); if (u !== d) return u - d; let _ = null !== (a = null !== (r = e.sortable) && void 0 !== r ? r : null === (n = e.comparator) || void 0 === n ? void 0 : n.toLocaleLowerCase()) && void 0 !== a ? a : "", c = null !== (l = null !== (o = e.sortable) && void 0 !== o ? o : null === (i = t.comparator) || void 0 === i ? void 0 : i.toLocaleLowerCase()) && void 0 !== l ? l : ""; return _ < c ? -1 : _ > c ? 1 : 0 } }, 752305: function(e, t, n) { "use strict"; function i() { return { textValue: "", richValue: [{ type: "line", children: [{ text: "" }] }] } } function r(e) { return { textValue: e, richValue: a(e) } } n.r(t), n.d(t, { createEmptyState: function() { return i }, createState: function() { return r }, toRichValue: function() { return a }, voidToOptionValue: function() { return o } }), n("411104"); let s = Object.freeze([Object.freeze({ type: "line", children: Object.freeze([Object.freeze({ text: "" })]) })]); function a(e) { return "" !== e ? e.split("\n").map(e => ({ type: "line", children: [{ text: e }] })) : s } function o(e) { switch (e.type) { case "userMention": return { type: "userMention", userId: e.userId }; case "channelMention": return { type: "channelMention", channelId: e.channelId }; case "staticRouteLink": return { type: "staticRouteLink", channelId: e.channelId }; case "soundboard": return { type: "soundboard", soundId: e.soundId }; case "roleMention": return { type: "roleMention", roleId: e.roleId }; case "textMention": return { type: "textMention", text: e.name }; case "emoji": return { type: "emoji", name: e.emoji.name, surrogate: e.emoji.surrogate }; case "customEmoji": return { type: "customEmoji", emojiId: e.emoji.emojiId, name: e.emoji.name, animated: e.emoji.animated }; case "testInlineVoid": throw Error("Unable to convert test types") } return null } }, 667829: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return b } }), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("218887"), d = n.n(u), _ = n("729594"), c = n("873546"), E = n("430742"), I = n("166459"), T = n("911969"), f = n("476326"), S = n("998698"), h = n("710845"), A = n("117530"), m = n("459273"), N = n("403182"), p = n("541716"), O = n("752305"), C = n("30465"), R = n("140963"), g = n("4484"), L = n("925994"), v = n("981631"), D = n("689938"), M = n("838329"); function y(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } new h.default("ChannelEditor.tsx"); let P = function() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n] }, U = { 12: M.fontSize12Padding, 14: M.fontSize14Padding, 15: M.fontSize15Padding, 16: M.fontSize16Padding, 18: M.fontSize18Padding, 20: M.fontSize20Padding, 24: M.fontSize24Padding }; class b extends r.Component { componentDidMount() { this.props.focused && requestAnimationFrame(() => this.focus()), document.addEventListener("selectionchange", this.handleSelectionChange), window.addEventListener("beforeunload", this.handleBeforeUnload) } componentDidUpdate(e) { if (this.fixFocus(e), this.props.useSlate !== e.useSlate) { var t, n; let e; e = this.props.useSlate ? this.props.textValue : (0, L.toTextValue)(this.props.richValue, { mode: "plain" }), null === (t = (n = this.props).onChange) || void 0 === t || t.call(n, null, e, (0, O.toRichValue)(e)) } else this.props.textValue !== e.textValue && this.saveCurrentTextThrottled() } componentWillUnmount() { var e; this.saveCurrentText(), null === (e = this._unsubscribe) || void 0 === e || e.call(this), window.removeEventListener("beforeunload", this.handleBeforeUnload), document.removeEventListener("selectionchange", this.handleSelectionChange), this._focusBlurQueue = null, this._unsubscribe = null } blur() { let e = this.ref.current; null != e && e.blur() } submit(e) { var t; null === (t = this.ref.current) || void 0 === t || t.submit(e) } insertEmoji(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], { textValue: i } = this.props, r = this.ref.current; null != e && null != r && (n && !i.endsWith(" ") && r.insertText(" ", void 0, !1), r.insertEmoji(e, t), t && this.focus()) } insertGIF(e) { let { textValue: t } = this.props, n = this.ref.current; null != e && null != n && (!t.endsWith(" ") && n.insertText(" ", void 0, !1), n.insertText(e.url)) } insertSound(e) { let { textValue: t } = this.props, n = this.ref.current; null != e && null != n && (!t.endsWith(" ") && n.insertText(" ", void 0, !1), n.insertText("")) } handleOuterClick() { this.focus() } clearValue() { let { channel: e, type: t } = this.props; this.setState({ focused: !0, submitting: !1 }), E.default.saveDraft(e.id, "", t.drafts.type) } getCurrentWord() { var e; let t = this.ref.current; return null !== (e = null == t ? void 0 : t.getCurrentWord()) && void 0 !== e ? e : { word: null, isAtStart: !1 } } insertAutocomplete(e, t, n) { let i = this.ref.current; return null == i ? void 0 : i.insertAutocomplete(e, t, n) } getCurrentCommandOption() { var e, t; let n = this.ref.current; return null !== (t = null == n ? void 0 : null === (e = n.getCurrentCommandOption) || void 0 === e ? void 0 : e.call(n)) && void 0 !== t ? t : null } getCurrentCommandOptionValue() { var e, t; let n = this.ref.current; return null !== (t = null == n ? void 0 : null === (e = n.getCurrentCommandOptionValue) || void 0 === e ? void 0 : e.call(n)) && void 0 !== t ? t : [] } getCommandOptionValues() { var e, t; let n = this.ref.current; return null !== (t = null == n ? void 0 : null === (e = n.getCommandOptionValues) || void 0 === e ? void 0 : e.call(n)) && void 0 !== t ? t : {} } getFirstText() { var e; let t = this.ref.current; return null !== (e = null == t ? void 0 : t.getFirstText()) && void 0 !== e ? e : null } getSlateEditor() { var e, t; let n = this.ref.current; return null !== (t = null == n ? void 0 : null === (e = n.getSlateEditor) || void 0 === e ? void 0 : e.call(n)) && void 0 !== t ? t : null } fixFocus(e) { e.focused && !this.props.focused ? this.blur() : !e.focused && this.props.focused && this.focus() } appendText(e, t) { var n; let i = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; null === (n = this.ref.current) || void 0 === n || n.insertText(e, t, i) } getPlaceholder() { let { disabled: e, placeholder: t, isPreviewing: n } = this.props; return e && !n ? D.default.Messages.NO_SEND_MESSAGES_PERMISSION_PLACEHOLDER : t } render() { var e, t, n, r, s, o; let { textValue: l, richValue: u, disabled: d, onChange: _, onKeyDown: E, onResize: I, onSubmit: T, channel: f, type: S, fontSize: h, useSlate: A, spellcheckEnabled: N, useNewSlashCommands: C, canOnlyUseTextCommands: L, className: D, id: y, required: P, maxCharacterCount: b, allowNewLines: G, "aria-describedby": w, "aria-labelledby": k, accessibilityLabel: B } = this.props, { submitting: V, popup: x } = this.state, F = { channel: f, className: a()(D, M.textArea, { [M.textAreaSlate]: A, [M.textAreaDisabled]: d || V }), id: y, placeholder: this.getPlaceholder(), required: P, accessibilityLabel: B, disabled: d || !1, submitting: V, isEdit: S === p.ChatInputTypes.EDIT, onFocus: this.handleFocus, onBlur: this.handleBlur, onPaste: this.handlePaste, onTab: this.handleTab, onEnter: this.handleEnter, moveSelection: this.handleMoveSelection, maybeShowAutocomplete: this.maybeShowAutocomplete, hideAutocomplete: this.hideAutocomplete, allowNewLines: G, onChange: _, onResize: I, onKeyDown: E, onSubmit: T, textAreaPaddingClassName: a()(U[h], { [M.textAreaWithoutAttachmentButton]: S !== p.ChatInputTypes.NORMAL && S !== p.ChatInputTypes.OVERLAY && S !== p.ChatInputTypes.THREAD_CREATION && S !== p.ChatInputTypes.SIDEBAR, [M.textAreaForPostCreation]: S === p.ChatInputTypes.CREATE_FORUM_POST, [M.textAreaCustomGift]: S === p.ChatInputTypes.CUSTOM_GIFT, [M.textAreaForUserProfile]: S === p.ChatInputTypes.USER_PROFILE }), spellcheckEnabled: N, useNewSlashCommands: C, disableAutoFocus: c.isMobile || null !== (n = S.disableAutoFocus) && void 0 !== n && n, disableEnterToSubmit: null !== (r = null === (e = S.submit) || void 0 === e ? void 0 : e.disableEnterToSubmit) && void 0 !== r && r, "aria-controls": null !== (s = x.id) && void 0 !== s ? s : void 0, "aria-haspopup": "listbox", "aria-expanded": null !== x.id || void 0, "aria-activedescendant": null !== (o = x.activeDescendant) && void 0 !== o ? o : void 0, "aria-invalid": l.length > b, "aria-describedby": w, "aria-labelledby": k, "aria-autocomplete": "list" }, H = A ? (0, i.jsx)(g.default, { ref: this.ref, ...F, type: S, value: d ? (0, O.toRichValue)("") : u, canUseCommands: null === (t = S.commands) || void 0 === t ? void 0 : t.enabled, canOnlyUseTextCommands: L }) : (0, i.jsx)(R.default, { ref: this.ref, ...F, value: d ? "" : l }); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(m.ComponentAction, { event: v.ComponentActions.INSERT_TEXT, handler: this.handleInsertText }), (0, i.jsx)(m.ComponentAction, { event: v.ComponentActions.CLEAR_TEXT, handler: this.handleClearText }), H] }) } constructor(e) { var t; super(e), t = this, y(this, "ref", r.createRef()), y(this, "_focusBlurQueue", Promise.resolve()), y(this, "_unsubscribe", void 0), y(this, "handleSelectionChange", () => { if (this.props.focused) { var e, t, n; this.props.onSelectionChanged(null === (t = (n = document).getSelection) || void 0 === t ? void 0 : null === (e = t.call(n)) || void 0 === e ? void 0 : e.toString()) } }), y(this, "focus", () => { var e; null === (e = this._focusBlurQueue) || void 0 === e || e.then(() => { this.setState({ focused: !0 }, () => { let e = this.ref.current; null != e && e.focus() }) }) }), y(this, "saveCurrentText", function() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0], { type: n, channel: i } = t.props; n.drafts.autoSave && (e && t.saveCurrentTextThrottled.cancel(), t.handleSaveCurrentText(i.id)) }), y(this, "handleBeforeUnload", () => this.saveCurrentText()), y(this, "saveCurrentTextThrottled", l().throttle(this.saveCurrentText.bind(this, !1), 500)), y(this, "handleEnter", e => { var t, n; return null === (t = (n = this.props).onEnter) || void 0 === t ? void 0 : t.call(n, e) }), y(this, "handleTab", () => { var e, t; return null === (e = (t = this.props).onTab) || void 0 === e ? void 0 : e.call(t) }), y(this, "handleMoveSelection", e => { var t, n; return null === (t = (n = this.props).onMoveSelection) || void 0 === t ? void 0 : t.call(n, e) }), y(this, "maybeShowAutocomplete", () => { var e, t; return null === (e = (t = this.props).onMaybeShowAutocomplete) || void 0 === e ? void 0 : e.call(t) }), y(this, "hideAutocomplete", () => { var e, t; return null === (e = (t = this.props).onHideAutocomplete) || void 0 === e ? void 0 : e.call(t) }), y(this, "handleSaveCurrentText", e => { E.default.saveDraft(e, this.props.textValue, this.props.type.drafts.type) }), y(this, "handleClearText", () => { var e, t; null === (e = (t = this.props).onChange) || void 0 === e || e.call(t, null, "", (0, O.toRichValue)("")) }), y(this, "handleInsertText", e => { let { plainText: t, rawText: n, addSpace: i = !1 } = e; !this.props.disabled && (this.appendText(t, n, i), this.focus()) }), y(this, "handleFocus", e => { let { onFocus: t } = this.props, { focused: n } = this.state; null == t || t(e), !n && this.setState({ focused: !0 }) }), y(this, "handleBlur", e => { let { onBlur: t } = this.props, { focused: n } = this.state; null == t || t(e), n && this.setState({ focused: !1 }) }), y(this, "handlePaste", e => { let { channel: t, canPasteFiles: n, uploadPromptCharacterCount: i, promptToUpload: r, maxCharacterCount: s, type: a } = this.props; if (null == r || !t.isPrivate() && !n || t.isPrivate() && t.isManaged()) return !1; let { files: o } = function(e, t) { let n = [], i = [], r = null, s = null; for (let t of e.items) if ("file" === t.kind) { let e = t.getAsFile(); if (null == e) continue; null != e.path && e.path.length > 0 ? n.push(e) : i.push(e) } else "string" === t.kind && ("text/plain" === t.type && null == r ? r = t : "text/html" === t.type && null == s && (s = t)); if (n.length > 0) return { files: n }; if (i.length > 0) { if (1 === i.length && "image/png" === i[0].type && null != s) { var a; let t = i[0], n = null !== (a = function(e) { let t = new DOMParser().parseFromString(e, "text/html").querySelector("img"); if (null != t) { let e; try { let { pathname: n } = _.parse(t.src); null != n && n.length > 0 && (e = d().basename(n).split(".")[0]) } catch (e) {} if (null != e && e.length > 0) return "".concat(e, ".png") } }(e.getData(s.type))) && void 0 !== a ? a : t.name; return { files: [(0, N.makeFile)(t, n, t.type)] } } return { files: i } } if (null != r && null != t) { let n = e.getData(r.type); if (n.length > t) { let e = new Blob([n], { type: "text/plain" }); return { files: [(0, N.makeFile)(e, "message.txt")], convertedStringToFile: !0 } } } return { files: [] } }(e.clipboardData, a.uploadLongMessages ? null != i ? i : s : null); return P("onPaste", [...e.clipboardData.items].map(e => { if ("file" !== e.kind) return { kind: e.kind, type: e.type }; { let t = e.getAsFile(); return { kind: e.kind, type: e.type, name: null == t ? void 0 : t.name, path: null == t ? void 0 : t.path } } })), 0 !== o.length && (e.preventDefault(), e.stopPropagation(), this.saveCurrentText(), ((e, n) => { var i, s; let o = S.default.getActiveCommand(t.id); if (null == o) return r(e, t, a.drafts.type, { requireConfirm: !0, showLargeMessageDialog: void 0 }); let l = null !== (i = a.drafts.commandType) && void 0 !== i ? i : a.drafts.type, u = null, d = S.default.getActiveOption(t.id); null != (u = (null == d ? void 0 : d.type) === T.ApplicationCommandOptionType.ATTACHMENT ? d : null === (s = o.options) || void 0 === s ? void 0 : s.find(e => { if (e.type === T.ApplicationCommandOptionType.ATTACHMENT) return null == A.default.getUpload(t.id, e.name, l) })) && I.default.setFile({ channelId: t.id, id: u.name, draftType: l, file: { id: u.name, platform: f.UploadPlatform.WEB, file: e[0] } }) })(o), this.focus(), !0) }), this._unsubscribe = C.channelEditorPopupStore.subscribe(e => { requestAnimationFrame(() => { this.setState({ popup: e }) }) }), this.state = { focused: !1, submitting: !1, popup: C.channelEditorPopupStore.getState() } } } }, 30465: function(e, t, n) { "use strict"; n.r(t), n.d(t, { channelEditorPopupStore: function() { return a }, dismissChannelEditorPopup: function() { return l }, useChannelEditorPopup: function() { return o } }); var i = n("470079"), r = n("652874"); let s = Object.freeze({ id: null, activeDescendant: null }), a = (0, r.default)(() => s); function o(e, t, n) { (0, i.useEffect)(() => { t ? a.setState({ id: e, activeDescendant: n }) : a.setState({ id: null, activeDescendant: null }) }, [e, t, n]) } function l() { a.setState(() => s) } }, 94161: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("143927"), l = n("28546"), u = n("401227"), d = n("957825"), _ = n("838329"); t.default = r.memo(r.forwardRef(function(e, t) { let { disabled: n, type: s } = e, [c, E, I] = (0, l.useExpressionPickerStore)(e => [e.activeView, e.activeViewType, e.pickerId], o.default), T = r.useCallback(() => { (0, l.toggleExpressionPicker)(d.ExpressionPickerViewType.EMOJI, s) }, [s]); return n ? null : (0, i.jsx)("div", { className: a()(d.CHAT_INPUT_BUTTON_CLASSNAME, _.buttonContainer), ref: t, children: (0, i.jsx)(u.default, { className: _.emojiButton, onClick: T, active: c === d.ExpressionPickerViewType.EMOJI && E === s, "aria-controls": I, tabIndex: 0, focusProps: { offset: { top: 4, bottom: 4, left: -4, right: -4 } } }) }) })) }, 9277: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("143927"), l = n("442837"), u = n("114101"), d = n("481060"), _ = n("28546"), c = n("581883"), E = n("147915"), I = n("459273"), T = n("981631"), f = n("957825"), S = n("689938"), h = n("838329"); t.default = r.memo(r.forwardRef(function(e, t) { let { disabled: n, type: s } = e, [A, m] = r.useState(!1), N = (0, l.useStateFromStores)([c.default], () => { var e, t; return A && Object.values(null !== (t = null === (e = c.default.frecencyWithoutFetchingLatest.favoriteGifs) || void 0 === e ? void 0 : e.gifs) && void 0 !== t ? t : {}).length <= 2 }), [p, O, C] = (0, _.useExpressionPickerStore)(e => [e.activeView, e.activeViewType, e.pickerId], o.default), R = r.useRef(0), g = r.useCallback(() => { m(!0), clearTimeout(R.current), R.current = setTimeout(() => { m(!1), R.current = 0 }, 2e3) }, []); (0, I.useComponentAction)({ event: T.ComponentActions.FAVORITE_GIF, handler: g }); let L = r.useCallback(() => { (0, _.toggleExpressionPicker)(f.ExpressionPickerViewType.GIF, s) }, [s]), { Component: v, events: D, play: M } = (0, u.useGifLottie)(); if (n) return null; let y = p === f.ExpressionPickerViewType.GIF && O === s; return (0, i.jsx)(d.Tooltip, { text: N ? S.default.Messages.GIF_TOOLTIP_FAVORITED_PICKER_BUTTON : null, forceOpen: !0, children: e => (0, i.jsx)("div", { ref: t, className: a()(f.CHAT_INPUT_BUTTON_CLASSNAME, h.buttonContainer), ...e, children: (0, i.jsx)(E.default, { innerClassName: h.button, onMouseEnter: D.onMouseEnter, onMouseLeave: D.onMouseLeave, onClick: () => { L(), M() }, isActive: y, pulse: A, "aria-label": S.default.Messages.GIF_BUTTON_LABEL, "aria-expanded": y, "aria-haspopup": "dialog", "aria-controls": C, children: (0, i.jsx)(v, { color: "currentColor" }) }) }) }) })) }, 897291: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("996146"), a = n("481060"), o = n("100527"), l = n("906732"), u = n("963249"), d = n("147915"), _ = n("51144"), c = n("981631"), E = n("474936"), I = n("689938"), T = n("838329"); t.default = r.memo(function(e) { let { disabled: t, channel: n } = e, { analyticsLocations: r } = (0, l.default)(o.default.GIFT_BUTTON), f = (0, _.useDirectMessageRecipient)(n), { Component: S, events: h, play: A } = (0, s.useGiftLottie)(); if (t) return null; let m = () => (0, u.default)({ isGift: !0, giftRecipient: null === f ? void 0 : f, initialPlanId: null, subscriptionTier: E.PremiumSubscriptionSKUs.TIER_2, analyticsLocations: r, analyticsObject: { page: n.isPrivate() ? c.AnalyticsPages.DM_CHANNEL : c.AnalyticsPages.GUILD_CHANNEL, section: c.AnalyticsSections.CHANNEL_TEXT_AREA, object: c.AnalyticsObjects.BUTTON_ICON, objectType: c.AnalyticsObjectTypes.GIFT } }); return (0, i.jsx)(a.Tooltip, { text: I.default.Messages.PREMIUM_GIFT_BUTTON_TOOLTIP, children: e => (0, i.jsx)(d.default, { ...e, innerClassName: T.button, isActive: !1, "aria-label": I.default.Messages.PREMIUM_GIFT_BUTTON_LABEL, "aria-haspopup": "dialog", onClick: () => { m(), A() }, ...h, children: (0, i.jsx)(S, { color: "currentColor" }) }) }) }) }, 764794: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("981729"), a = n("780384"), o = n("351773"), l = n("410030"), u = n("100527"), d = n("906732"), _ = n("790368"), c = n("704440"), E = n("147915"), I = n("632583"), T = n("626135"), f = n("981631"), S = n("474936"), h = n("689938"), A = n("838329"); t.default = r.memo(function(e) { let { disabled: t, referralsRemaining: n, channel: m, isResending: N } = e, { enabled: p } = _.default.useExperiment({ location: "ec41f5_1" }, { autoTrackExposure: !0 }), O = p ? h.default.Messages.SHARE_NITRO_BIRTHDAY_TOOLTIP.format() : N ? h.default.Messages.SHARE_NITRO_RESEND_TOOLTIP : h.default.Messages.SHARE_NITRO_TOOLTIP, C = p ? h.default.Messages.SHARE_NITRO_BIRTHDAY_TOOLTIP_UNFORMATTED : null, [R, g] = r.useState(!1), [L, v] = r.useState(!1), D = (0, o.default)(null, () => v(!1)), { analyticsLocations: M } = (0, d.default)(u.default.REFERRAL_TRIALS_COMPOSER_BUTTON), y = m.isDM() && void 0 !== m.recipients ? m.recipients[0] : null, P = (0, l.default)(); return t ? null : (0, i.jsxs)("div", { ref: D, className: A.buttonContainer, children: [(0, i.jsx)(c.default, { shouldShowPopout: L, referralsRemaining: n, channel: m, onClose: () => v(!1), isResending: N }), (0, i.jsx)(s.Tooltip, { text: O, shouldShow: !L, "aria-label": null != C ? C : O, children: e => (0, i.jsx)("div", { onMouseEnter: () => { !L && !R && (g(!0), T.default.track(f.AnalyticEvents.SHARE_NITRO_FLOW_STEPS, { location_stack: M, step: S.ReferralTrialsAnalyticSteps.BADGE_TOOLTIP_VIEWED, other_user_id: Number(y) })) }, onMouseLeave: () => { g(!1) }, children: (0, i.jsx)(E.default, { ...e, innerClassName: A.button, isActive: L, "aria-label": null != C ? C : O, "aria-haspopup": "dialog", onClick: () => { v(e => !e), T.default.track(f.AnalyticEvents.SHARE_NITRO_FLOW_STEPS, { location_stack: M, step: S.ReferralTrialsAnalyticSteps.BADGE_CLICKED, other_user_id: Number(y) }) }, children: (0, i.jsx)(I.default, { referralsRemaining: n, hovered: R, isResending: N, shouldShowBirthdayUX: p, isLightTheme: (0, a.isThemeLight)(P) }) }) }) })] }) }) }, 407661: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return p } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("367907"), d = n("739566"), _ = n("623292"), c = n("703656"), E = n("665906"), I = n("488131"), T = n("375954"), f = n("36082"), S = n("696202"), h = n("981631"), A = n("689938"), m = n("98482"); function N(e) { let { channel: t, message: n, replyChainLength: s } = e; return r.useEffect(() => { (0, u.trackWithMetadata)(h.AnalyticEvents.THREAD_NUDGE_SHOWN, { type: "Reply Chain (".concat(3, ")"), reply_chain_length: s + 1, channel_id: t.id, guild_id: t.guild_id }) }, [t]), (0, i.jsxs)(l.Clickable, { onClick: function() { (0, _.deletePendingReply)(t.id), (0, I.openThreadSidebarForCreating)(t, n, "Reply Chain Nudge") }, className: m.threadSuggestionBar, focusProps: { offset: { right: -4, left: -4 } }, children: [(0, i.jsx)(l.Text, { color: "header-secondary", className: m.text, variant: "text-sm/normal", children: A.default.Messages.THREAD_REPLY_SUGGESTION.format({ count: Math.min(10, s + 1) }) }), (0, i.jsx)(l.Text, { color: "text-link", className: m.createThreadButton, variant: "text-sm/semibold", children: A.default.Messages.CREATE_THREAD })] }) } function p(e) { let { reply: t, chatInputType: n } = e, { channel: r, message: s, shouldMention: u, showMentionToggle: I } = t, { nick: p, colorString: O, colorRoleName: C } = (0, d.default)(s), R = function(e, t) { let n = e.id, i = t.id; return (0, o.useStateFromStores)([T.default], () => { let e = i; for (let t = 0; t < 10; t++) { let i = T.default.getMessage(n, e); if ((null == i ? void 0 : i.type) !== h.MessageTypes.REPLY || null == i.messageReference) return t; e = i.messageReference.message_id } return 10 }, [n, i]) }(r, s), g = (0, E.useCanStartPublicThread)(r, s), L = n.showThreadPromptOnReply && R >= 2 && g; function v(e) { e.stopPropagation(), (0, _.setPendingReplyShouldMention)(r.id, !u) } return (0, i.jsx)("div", { className: m.clipContainer, children: (0, i.jsxs)("div", { className: m.container, children: [(0, i.jsxs)("div", { className: m.replyBar, children: [(0, i.jsx)(l.Clickable, { onClick: () => (0, c.transitionTo)(h.Routes.CHANNEL(r.getGuildId(), r.id, s.id)), focusProps: { offset: { top: -8, right: -4, bottom: -8, left: -4 } }, children: (0, i.jsx)(l.Text, { color: "header-secondary", className: a()(m.text, m.replyLabel), variant: "text-sm/normal", children: A.default.Messages.REPLYING_TO.format({ userHook: (e, t) => (0, i.jsx)(l.NameWithRole, { className: m.name, name: p, color: O, roleName: C }, t) }) }) }), (0, i.jsxs)("div", { className: m.actions, children: [I && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.Tooltip, { text: u ? A.default.Messages.REPLY_MENTION_ON_TOOLTIP : A.default.Messages.REPLY_MENTION_OFF_TOOLTIP, children: e => { let { onMouseEnter: t, onMouseLeave: n, onFocus: r, onBlur: s } = e; return (0, i.jsx)(l.Clickable, { role: "switch", "aria-checked": u, onClick: v, onMouseEnter: t, onMouseLeave: n, onFocus: r, onBlur: s, children: (0, i.jsxs)(l.Text, { variant: "text-sm/bold", color: u ? "text-link" : "text-muted", className: m.mentionButton, children: [(0, i.jsx)(f.default, { "aria-label": A.default.Messages.MENTION, className: m.mentionIcon }), u ? A.default.Messages.REPLY_MENTION_ON : A.default.Messages.REPLY_MENTION_OFF] }) }) } }), (0, i.jsx)("div", { className: m.separator, "aria-hidden": !0 })] }), (0, i.jsx)(l.Clickable, { className: m.closeButton, onClick: function(e) { e.stopPropagation(), (0, _.deletePendingReply)(r.id) }, children: (0, i.jsx)(S.default, { className: m.closeIcon }) })] })] }), L && (0, i.jsx)(N, { channel: r, message: s, replyChainLength: R })] }) }) } }, 241553: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SeasonalGiftIcon: function() { return x } }), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("920906"), a = n("442837"), o = n("524437"), l = n("780384"), u = n("481060"), d = n("845538"), _ = n("410030"), c = n("100527"), E = n("906732"), I = n("605236"), T = n("243778"), f = n("963249"), S = n("646476"), h = n("819640"), A = n("594174"), m = n("147915"), N = n("559629"), p = n("965645"), O = n("362061"), C = n("70956"), R = n("709054"), g = n("51144"), L = n("981631"), v = n("921944"), D = n("474936"), M = n("689938"), y = n("252088"), P = n("838329"); let U = [{ box: "#FFD89E", ribbon: "#FF7476" }, { box: "#17B5E2", ribbon: "#FFFFFF" }, { box: "#EED169", ribbon: "#51A1EB" }, { box: "#509C65", ribbon: "#FFC96E" }, { box: "#E4578A", ribbon: "#BEC4FF" }, { box: "#AFE0FC", ribbon: "#FF9356" }, { box: "#DB6D6D", ribbon: "#67DA9C" }], b = [{ box: "#EABB75", ribbon: "#E4595C" }, { box: "#2D7AA5", ribbon: "#64C7C2" }, { box: "#ECBF21", ribbon: "#51A1EB" }, { box: "#439359", ribbon: "#D5A24C" }, { box: "#FC90C4", ribbon: "#777FCE" }, { box: "#549DC6", ribbon: "#FF9356" }, { box: "#DB6F6F", ribbon: "#81C29F" }], G = 1 / 300, w = C.default.Millis.DAYS_30, k = (0, s.animated)(p.default), B = (0, s.animated)(O.default), V = (0, s.animated)(N.default); function x(e) { let { themeOverride: t, hovered: n, isContentDismissed: a, boxColors: o = { dark: U, light: b } } = e, u = (0, _.default)(), [d, c] = function(e) { let [t, n] = r.useState(!1), [i, s] = r.useState(Math.floor(7 * Math.random())); return r.useEffect(() => { if (e) return; let t = Math.random() <= G; if (n(t), !t) { let e; do e = Math.floor(7 * Math.random()); while (e === i); s(e) } }, [e]), [t, i] }(n), E = (0, s.useSpring)({ reverse: !n, reset: !0, from: { scale: 1 }, to: { scale: 1.14 }, config: { tension: 800, friction: 24 } }), I = a ? c : 0, T = (0, l.isThemeDark)(null != t ? t : u) ? o.dark[I] : o.light[I]; return !n && a ? (0, i.jsx)(V, {}) : a && d ? (0, i.jsx)(B, { isDark: (0, l.isThemeDark)(u), style: E }) : (0, i.jsx)(k, { boxColor: T.box, ribbonColor: T.ribbon, style: E }) } t.default = r.memo(function(e) { let { disabled: t, channel: n } = e, { analyticsLocations: s } = (0, E.default)(c.default.GIFT_BUTTON), [l, _] = r.useState(!1), N = (0, a.useStateFromStores)([h.default], () => !(null === h.default || void 0 === h.default ? void 0 : h.default.hasLayers())), p = (0, a.useStateFromStores)([A.default], () => A.default.getCurrentUser()), O = null != p ? R.default.age(p.id) : 0, C = !t && N && O >= w, { enabled: U } = S.SeasonalGiftingMarketingExperiment.useExperiment({ location: "ChannelPremiumGiftButton" }, { autoTrackExposure: C }), b = []; U && C && b.push(o.DismissibleContent.SEASONAL_GIFTING_COACHMARK_2023); let [G, k] = (0, T.useSelectedDismissibleContent)(b), B = null != G, V = (0, g.useDirectMessageRecipient)(n), F = null != V; if (t) return null; let H = () => { (0, f.default)({ isGift: !0, giftRecipient: null == V ? void 0 : V, initialPlanId: null, subscriptionTier: D.PremiumSubscriptionSKUs.TIER_2, analyticsLocations: s, analyticsObject: { page: n.isPrivate() ? L.AnalyticsPages.DM_CHANNEL : L.AnalyticsPages.GUILD_CHANNEL, section: L.AnalyticsSections.CHANNEL_TEXT_AREA, object: L.AnalyticsObjects.SEASONAL_BUTTON_ICON, objectType: L.AnalyticsObjectTypes.GIFT } }) }, Y = (0, i.jsxs)("div", { className: y.container, onMouseEnter: () => { !l && _(!0) }, onMouseLeave: () => { _(!1) }, children: [B && (0, i.jsx)(d.default, { onComplete: () => _(!1), onDMCheckItOutClick: H, markAsDismissed: k, isDM: F }), (0, i.jsx)(m.default, { innerClassName: P.button, "aria-label": M.default.Messages.PREMIUM_GIFT_BUTTON_LABEL, isActive: !1, onClick: () => { _(!1), (0, I.markDismissibleContentAsDismissed)(o.DismissibleContent.SEASONAL_GIFTING_COACHMARK_2023, { dismissAction: v.ContentDismissActionType.TAKE_ACTION }), H() }, children: (0, i.jsx)("div", { className: y.noPointerEvents, children: (0, i.jsx)(x, { hovered: l, isContentDismissed: !B }) }) })] }); return B ? Y : (0, i.jsx)(u.TooltipContainer, { className: y.container, text: (0, d.getSeasonalGiftingBody)(F), children: Y }) }) }, 319417: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("147915"), l = n("620448"), u = n("689938"), d = n("156986"); t.default = r.memo(function(e) { let { onClick: t, disabled: n = !1 } = e; return (0, i.jsx)("div", { className: d.separator, children: (0, i.jsx)("div", { className: d.buttonContainer, children: (0, i.jsx)(o.default, { className: d.button, innerClassName: d.innerButton, childClassName: a()(d.buttonChild, { [d.disabled]: n, [d.activeButtonChild]: !n }), onClick: t, disabled: n, isActive: !1, "aria-label": u.default.Messages.SEND_MESSAGE, children: (0, i.jsx)(l.default, { className: d.sendIcon }) }) }) }) }) }, 728386: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("143927"), l = n("532772"), u = n("570220"), d = n("28546"), _ = n("147915"), c = n("957825"), E = n("689938"), I = n("838329"); t.default = r.memo(r.forwardRef(function(e, t) { let { disabled: n, type: s } = e, [T, f] = (0, d.useExpressionPickerStore)(e => [e.activeView, e.pickerId], o.default), S = r.useContext(u.default), [h, A] = r.useState(!1), m = T === c.ExpressionPickerViewType.STICKER, N = r.useCallback(() => { (0, d.toggleExpressionPicker)(c.ExpressionPickerViewType.STICKER, s) }, [s]); r.useEffect(() => { let e = () => { requestAnimationFrame(() => { A(!0) }) }, t = () => { requestAnimationFrame(() => { A(!1) }) }; return S.addListener("sticker-suggestions-shown", e), S.addListener("sticker-suggestions-hidden", t), () => { S.removeListener("sticker-suggestions-shown", e), S.removeListener("sticker-suggestions-hidden", t) } }, [S]); let { Component: p, events: O, play: C } = (0, l.useStickerLottie)(); return n ? null : (0, i.jsx)("div", { className: a()(c.CHAT_INPUT_BUTTON_CLASSNAME, I.buttonContainer), ref: t, children: (0, i.jsx)(_.default, { innerClassName: a()(I.button, I.stickerButton, { [I.stickerButtonTilted]: h && !m }), ...O, onClick: () => { N(), C() }, isActive: m, "aria-label": E.default.Messages.STICKER_BUTTON_LABEL, "aria-expanded": m, "aria-haspopup": "dialog", "aria-controls": f, sparkle: !1, notification: null, children: (0, i.jsx)(p, { color: "currentColor" }) }) }) })) }, 562267: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("913663"), l = n("268350"), u = n("419922"), d = n("696202"), _ = n("132338"), c = n("689938"), E = n("342743"); t.default = r.memo(function(e) { var t; let { channelId: n, chatInputType: I } = e, [T, f] = r.useState(null), S = (0, s.useStateFromStores)([o.default], () => o.default.getStickerPreview(n, I.drafts.type)); return (null === (t = I.stickers) || void 0 === t ? void 0 : t.allowSending) && null != S && 0 !== S.length ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { className: E.stickerPreviews, children: S.map(e => (0, i.jsxs)("div", { className: E.stickerPreviewContainer, children: [(0, i.jsx)(a.Clickable, { onFocus: () => f(e.id), onBlur: () => f(null), className: E.closeButton, "aria-label": c.default.Messages.GUILD_STICKER_A11Y_REMOVE_STICKER.format({ name: e.name }), onClick: () => (0, l.clearStickerPreview)(n, I.drafts.type), children: (0, i.jsx)("div", { className: E.closeIconContainer, children: (0, i.jsx)(d.default, { className: E.closeIcon }) }) }), (0, i.jsx)(u.default, { isInteracting: T === e.id, className: E.stickerPreview, size: 48, sticker: e })] }, e.id)) }), (0, i.jsx)(_.default, { className: E.stickerPreviewDivider })] }) : null }) }, 376918: function(e, t, n) { "use strict"; n.r(t), n.d(t, { trackAutocompleteOpen: function() { return u }, trackAutocompleteSelect: function() { return d }, trackStickerPreviewSelect: function() { return _ } }); var i, r, s = n("367907"), a = n("373228"), o = n("626135"), l = n("981631"); function u(e, t, n) { var i, r, a; o.default.track(l.AnalyticEvents.CHANNEL_AUTOCOMPLETE_OPEN, { ...(0, s.collectChannelAnalyticsMetadata)(t), ...(0, s.collectGuildAnalyticsMetadata)(t.guild_id), autocomplete_type: e, num_emoji_results: null !== (i = null == n ? void 0 : n.numEmojiResults) && void 0 !== i ? i : 0, num_locked_emoji_results: null !== (r = null == n ? void 0 : n.numLockedEmojiResults) && void 0 !== r ? r : 0, num_sticker_results: null !== (a = null == n ? void 0 : n.numStickerResults) && void 0 !== a ? a : 0 }) } function d(e, t, n, i) { var r, a, u, d, _; o.default.track(l.AnalyticEvents.CHANNEL_AUTOCOMPLETE_SELECTED, { ...(0, s.collectChannelAnalyticsMetadata)(n), ...(0, s.collectGuildAnalyticsMetadata)(n.guild_id), autocomplete_type: e, selection_type: t, emoji_id: null == i ? void 0 : i.emojiId, sticker_id: null == i ? void 0 : i.stickerId, num_emoji_results: null !== (r = null == i ? void 0 : i.numEmojiResults) && void 0 !== r ? r : 0, num_sticker_results: null !== (a = null == i ? void 0 : i.numStickerResults) && void 0 !== a ? a : 0, emoji_name: null !== (u = null == i ? void 0 : i.expressionName) && void 0 !== u ? u : "", is_custom: null !== (d = null == i ? void 0 : i.isCustom) && void 0 !== d && d, is_animated: null !== (_ = null == i ? void 0 : i.isAnimated) && void 0 !== _ && _ }) }(i = r || (r = {})).AUTOCOMPLETE = "autocomplete", i.AUTOSUGGEST = "autosuggest", i.STICKER_PICKER = "picker"; function _(e) { let { sticker: t, stickerSelectLocation: n, isReplacement: i, analyticsLocations: r } = e; o.default.track(l.AnalyticEvents.STICKER_ATTACHED, { replaced: i, source: function(e) { switch (e) { case a.StickerSelectLocation.AUTOCOMPLETE: return "autocomplete"; case a.StickerSelectLocation.EXPRESSION_SUGGESTIONS: return "autosuggest"; case a.StickerSelectLocation.STICKER_PICKER: return "picker"; default: return null } }(n), sticker_id: t.id, location_stack: r }) } }, 760196: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("998698"), u = n("824203"), d = n("713583"), _ = n("920455"), c = n("931981"), E = n("407661"), I = n("838329"); t.default = r.memo(e => { let { channel: t, type: n, activeCommand: r, pendingReply: s } = e, { activeCommandOption: T, activeCommandOptionStates: f } = (0, o.useStateFromStoresObject)([l.default], () => ({ activeCommandOption: l.default.getActiveOption(t.id), activeCommandOptionStates: l.default.getOptionStates(t.id) })), S = (0, c.useShouldShowPTONotice)(t), h = (0, u.useShouldShowUserAppBetaNoticeForCommand)(r, t, { location: "ChannelTextAreaBars" }), A = []; return (null != r && (h && A.push((0, i.jsx)(_.default, { activeCommand: r })), A.push((0, i.jsx)(d.default, { activeCommand: r, activeOption: null != T ? T : null, optionStates: f }))), null != s && A.push((0, i.jsx)(E.default, { reply: s, chatInputType: n })), S && A.push((0, i.jsx)(c.StaffPTOBar, {})), 0 === (A = A.map((e, t) => { let n = t === A.length - 1; return (0, i.jsx)("div", { className: a()({ [I.stackedAttachedBar]: !n }), children: e }, t) })).length) ? null : (0, i.jsx)("div", { className: I.attachedBars, children: A }) }) }, 258696: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("873546"), a = n("442837"), o = n("911969"), l = n("607070"), u = n("998698"), d = n("211242"), _ = n("276444"), c = n("646476"), E = n("963198"), I = n("913663"), T = n("117530"), f = n("594174"), S = n("74538"), h = n("94161"), A = n("9277"), m = n("897291"), N = n("764794"), p = n("241553"), O = n("319417"), C = n("728386"), R = n("474936"), g = n("838329"); function L(e) { let { disabled: t, channel: n } = e, { enabled: s } = c.default.useExperiment({ location: "dc120b_1" }, { autoTrackExposure: !1 }), a = (0, c.useIsSeasonalGiftingActive)(); return r.useEffect(() => { a && c.default.trackExposure({ location: "dc120b_2" }) }, [a]), s && a ? (0, i.jsx)(p.default, { disabled: t, channel: n }) : (0, i.jsx)(m.default, { disabled: t, channel: n }) } t.default = r.memo(function(e) { var t, n, r, c, m, p, v, D; let { type: M, disabled: y, channel: P, handleSubmit: U, isEmpty: b } = e, G = (0, a.useStateFromStores)([l.default], () => l.default.isSubmitButtonEnabled), w = (0, a.useStateFromStores)([I.default], () => I.default.getStickerPreview(P.id, M.drafts.type)), k = null != w && w.length > 0, B = (0, a.useStateFromStores)([T.default], () => T.default.getUploads(P.id, M.drafts.type)), { activeCommand: V, activeCommandOption: x } = (0, a.useStateFromStoresObject)([u.default], () => ({ activeCommand: u.default.getActiveCommand(P.id), activeCommandOption: u.default.getActiveOption(P.id) })), { paymentsBlocked: F } = d.default.useExperiment({ location: "dc120b_3" }, { autoTrackExposure: !1 }), H = [], { enabled: Y } = E.default.getCurrentConfig({ location: "dc120b_4" }, { autoTrackExposure: !1 }), j = f.default.getCurrentUser(), W = null !== (c = (0, a.useStateFromStores)([_.default], () => Y && S.default.isPremiumExactly(j, R.PremiumTypes.TIER_2) ? _.default.getReferralsRemaining() : 0)) && void 0 !== c ? c : 0, K = (0, a.useStateFromStores)([_.default], () => { if (!P.isDM() || void 0 === P.recipients || P.recipients.length > 1 || !Y) return !1; let e = P.recipients[0]; return _.default.getSentUserIds().includes(e) }), [z, Z] = (0, a.useStateFromStoresArray)([_.default, f.default], () => { let e = [!1, !1]; if (!P.isDM() || void 0 === P.recipients || P.recipients.length > 1) return e; let t = P.recipients[0], n = f.default.getUser(t); if (null == n || n.bot) return e; let i = K || W > 0, r = _.default.getRecipientEligibility(t); return [Y && i && r, r] }); return (!s.isMobile && (P.isDM() && (null === (m = M.gifts) || void 0 === m ? void 0 : m.button) != null && null == V && (S.default.isPremiumExactly(j, R.PremiumTypes.TIER_2) && Z && E.default.trackExposure({ location: "dc120b_5" }), z && H.push((0, i.jsx)(N.default, { disabled: y, referralsRemaining: W, channel: P, isResending: K }, "referral"))), (null === (p = M.gifts) || void 0 === p ? void 0 : p.button) != null && null == V && !F && H.push((0, i.jsx)(L, { disabled: y, channel: P }, "gift")), (null === (v = M.gifs) || void 0 === v ? void 0 : v.button) != null && null == V && H.push((0, i.jsx)(A.default, { disabled: y, type: M }, "gif")), (null === (D = M.stickers) || void 0 === D ? void 0 : D.button) != null && null == V && H.push((0, i.jsx)(C.default, { disabled: y, type: M }, "sticker"))), (null === (t = M.emojis) || void 0 === t ? void 0 : t.button) != null && (null == V || null != x && x.type !== o.ApplicationCommandOptionType.ATTACHMENT) && H.push((0, i.jsx)(h.default, { disabled: y, type: M }, "emoji")), (null === (n = M.submit) || void 0 === n ? void 0 : n.button) != null && ((null === (r = M.submit) || void 0 === r ? void 0 : r.ignorePreference) || G) && H.push((0, i.jsx)(O.default, { onClick: U, disabled: y || 0 === B.length && b && !k }, "submit")), 0 === H.length) ? null : (0, i.jsx)("div", { className: g.buttons, children: H }) }) }, 893718: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("836560"), l = n("512722"), u = n.n(l), d = n("143927"), _ = n("873546"), c = n("149765"), E = n("442837"), I = n("481060"), T = n("430742"), f = n("607070"), S = n("100527"), h = n("906732"), A = n("424602"), m = n("541099"), N = n("663924"), p = n("998698"), O = n("271668"), C = n("931981"), R = n("326133"), g = n("570220"), L = n("28546"), v = n("805680"), D = n("151574"), M = n("368844"), y = n("41776"), P = n("849522"), U = n("780291"), b = n("913663"), G = n("268350"), w = n("378233"), k = n("665906"), B = n("695346"), V = n("271383"), x = n("496675"), F = n("944486"), H = n("398327"), Y = n("117530"), j = n("594174"), W = n("459273"), K = n("700785"), z = n("358085"), Z = n("746877"), X = n("541716"), Q = n("667829"), q = n("562267"), J = n("376918"), $ = n("760196"), ee = n("258696"), et = n("303628"), en = n("472243"), ei = n("872635"), er = n("676108"), es = n("981631"), ea = n("665692"), eo = n("957825"), el = n("838329"); t.default = r.memo(r.forwardRef(function(e, t) { var s, l, eu, ed, e_, ec, eE, eI, eT, ef, eS, eh, eA, em; let { textValue: eN, richValue: ep, className: eO, innerClassName: eC, editorClassName: eR, id: eg, required: eL, disabled: ev, placeholder: eD, accessibilityLabel: eM, channel: ey, type: eP, focused: eU, renderAttachButton: eb, renderAppLauncherButton: eG, renderApplicationCommandIcon: ew, pendingReply: ek, onChange: eB, onResize: eV, onBlur: ex, onFocus: eF, onKeyDown: eH, onSubmit: eY, promptToUpload: ej, highlighted: eW, canMentionRoles: eK, canMentionChannels: ez, maxCharacterCount: eZ, showRemainingCharsAfterCount: eX, allowNewLines: eQ = !0, characterCountClassName: eq, "aria-describedby": eJ, "aria-labelledby": e$, setEditorRef: e0, autoCompletePosition: e1, children: e2, disableThemedBackground: e3 = !1, emojiPickerCloseOnModalOuterClick: e4, parentModalKey: e6 } = e; u()(null != eP, "chat input type must be set"); let { analyticsLocations: e7 } = (0, h.default)(S.default.CHANNEL_TEXT_AREA), e5 = function(e) { let t = r.useRef(null); if (null != e && "function" == typeof e) throw Error("Only Ref objects are supported"); return null == e ? t : e }(t), e8 = r.useRef(null), e9 = r.useRef(null), te = r.useRef(null), tt = r.useRef(null); null == e0 || e0(e9.current); let { activeCommand: tn, activeCommandSection: ti } = (0, E.useStateFromStoresObject)([p.default], () => { var e, t; return { activeCommand: (null === (e = eP.commands) || void 0 === e ? void 0 : e.enabled) ? p.default.getActiveCommand(ey.id) : null, activeCommandSection: (null === (t = eP.commands) || void 0 === t ? void 0 : t.enabled) ? p.default.getActiveCommandSection(ey.id) : null } }), { isLurking: tr, isPendingMember: ts, disabled: ta, canAttachFiles: to, canCreateThreads: tl, canEveryoneSendMessages: tu } = function(e, t, n, i) { let r = e.getGuildId(), s = (0, E.useStateFromStores)([y.default], () => null != r && y.default.isLurking(r), [r]), a = (0, E.useStateFromStores)([V.default, j.default], () => { var e, t; let n = j.default.getCurrentUser(); return null !== (t = null != r && null != n ? null === (e = V.default.getMember(r, n.id)) || void 0 === e ? void 0 : e.isPending : null) && void 0 !== t && t }), o = (0, E.useStateFromStoresObject)([x.default], () => { var r, s; let o = e.isPrivate(), l = x.default.computePermissions(e), u = c.has(l, es.Permissions.CREATE_PUBLIC_THREADS) || c.has(l, es.Permissions.CREATE_PRIVATE_THREADS), d = (!(null === (r = t.permissions) || void 0 === r ? void 0 : r.requireCreateTherads) || u) && (!(null === (s = t.permissions) || void 0 === s ? void 0 : s.requireSendMessages) || c.has(l, es.Permissions.SEND_MESSAGES)), _ = d && c.has(l, es.Permissions.ATTACH_FILES), E = null != n, I = (0, k.computeIsReadOnlyThread)(e); return { disabled: i || a || !o && !d || I, canAttachFiles: !0 === t.attachments && (o || a || _ || E), canCreateThreads: u, canEveryoneSendMessages: K.canEveryoneRole(es.Permissions.SEND_MESSAGES, e) } }, [e, t.permissions.requireCreateTherads, t.permissions.requireSendMessages, t.attachments, n, i, a]); return { isLurking: s, isPendingMember: a, ...o } }(ey, eP, tn, ev), td = eP.toolbarType === X.SlateToolbarTypes.STATIC, t_ = !B.UseLegacyChatInput.useSetting() && !(0, z.isAndroidWeb)() && null != window.ResizeObserver, tc = !t_ || !(null === (s = eP.commands) || void 0 === s ? void 0 : s.enabled) || !eU || eN !== ea.COMMAND_SENTINEL, tE = (0, P.default)(), { isSubmitButtonEnabled: tI, fontSize: tT } = (0, E.useStateFromStoresObject)([f.default], () => ({ fontSize: f.default.fontSize, isSubmitButtonEnabled: f.default.isSubmitButtonEnabled })), tf = (0, E.useStateFromStores)([H.default], () => H.default.isEnabled()); ! function(e, t) { let n = r.useCallback(() => { !t && (0, L.toggleExpressionPicker)(eo.ExpressionPickerViewType.EMOJI, e) }, [t, e]), i = r.useCallback(() => { var n; !t && (null === (n = e.gifs) || void 0 === n ? void 0 : n.allowSending) && (0, L.toggleExpressionPicker)(eo.ExpressionPickerViewType.GIF, e) }, [t, e]), s = r.useCallback(() => { var n; !t && (null === (n = e.stickers) || void 0 === n ? void 0 : n.allowSending) && (0, L.toggleExpressionPicker)(eo.ExpressionPickerViewType.STICKER, e) }, [t, e]); (0, W.useComponentAction)({ event: es.ComponentActions.TOGGLE_EMOJI_POPOUT, handler: n }), (0, W.useComponentAction)({ event: es.ComponentActions.TOGGLE_GIF_PICKER, handler: i }), (0, W.useComponentAction)({ event: es.ComponentActions.TOGGLE_STICKER_PICKER, handler: s }) }(eP, ta); let { eventEmitter: tS, handleEditorSelectionChanged: th } = function(e, t, n) { let [i] = r.useState(() => new o.EventEmitter); return r.useEffect(() => { i.emit("text-changed", t, n) }, [t, n, i]), { eventEmitter: i, handleEditorSelectionChanged: t => { null != e.current && i.emit("selection-changed", t) } } }(e9, eN, ep), { submitting: tA, submit: tm, handleSubmit: tN } = function(e, t, s, a) { let [o, l] = r.useState(!1), u = r.useCallback((r, d, _, c, E) => { var f, S, h; if (o) return; l(!0); let A = null !== (S = null === (f = b.default.getStickerPreview(a, t.drafts.type)) || void 0 === f ? void 0 : f.map(e => e.id)) && void 0 !== S ? S : [], m = null !== (h = Y.default.getUploads(a, t.drafts.type)) && void 0 !== h ? h : []; if (null == d && !c && !E && (0, M.shouldShowAddMediaToOriginalPostModal)(m, a)) { l(!1), (0, I.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("23755"), n.e("90508"), n.e("41947"), n.e("95258")]).then(n.bind(n, "273602")); return t => (0, i.jsx)(e, { ...t, threadId: a, attachments: m, sendMessage: () => u(r, void 0, void 0, void 0, !0) }) }); return } e({ value: r, uploads: m, stickers: A, command: d, commandOptionValues: _, isGif: c }).then(e => { var n, i, r, o; let { shouldClear: u, shouldRefocus: d } = e; let _ = (n = u, i = t, null !== (o = n && (null === (r = i.submit) || void 0 === r ? void 0 : r.clearOnSubmit)) && void 0 !== o && o), c = null != s.current; if (_) { if (a !== F.default.getChannelId()) T.default.saveDraft(a, "", t.drafts.type); else c && s.current.clearValue() } c && (l(!1), (0, L.closeExpressionPicker)(), d && s.current.focus()) }) }, [s, e, o, t, a]); return { submitting: o, submit: u, handleSubmit: r.useCallback(e => { var t; null == s || null === (t = s.current) || void 0 === t || t.submit(e) }, []) } }(eY, eP, e9, ey.id), { autocompleteRef: tp, handleMaybeShowAutocomplete: tO, handleHideAutocomplete: tC } = function() { let e = r.useRef(null), t = r.useCallback(() => { var t; null === (t = e.current) || void 0 === t || t.onMaybeShowAutocomplete() }, []), n = r.useCallback(() => { var t; null === (t = e.current) || void 0 === t || t.onHideAutocomplete() }, []); return { autocompleteRef: e, handleMaybeShowAutocomplete: t, handleHideAutocomplete: n } }(); let tR = (ef = tm, eS = eP, eh = e9, r.useCallback(e => { var t, n; eS === X.ChatInputTypes.CREATE_FORUM_POST ? null === (n = eh.current) || void 0 === n || n.insertGIF(e) : ef(e.url, void 0, void 0, !0), (0, L.closeExpressionPicker)(), null === (t = eh.current) || void 0 === t || t.focus() }, [eh, ef, eS])); let tg = (eA = e9, r.useCallback(function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = eA.current; null != e && null != i && i.insertEmoji(e, t, n), t && (0, L.closeExpressionPicker)() }, [eA])), tL = function(e) { let { editorRef: t, disabled: n, textValue: i, channelId: s, chatInputType: a, submit: o } = e, { analyticsLocations: l } = (0, h.default)(); return r.useCallback((e, r) => { var u, d; !n && ((0, w.shouldAttachSticker)(r, i, s, a.drafts.type) ? ((0, J.trackStickerPreviewSelect)({ sticker: e, stickerSelectLocation: r, isReplacement: null != b.default.getStickerPreview(s, a.drafts.type), analyticsLocations: l }), (0, G.addStickerPreview)(s, e, a.drafts.type)) : (o({ value: "", uploads: void 0, stickers: [e.id] }), null === (d = t.current) || void 0 === d || d.clearValue()), (0, L.closeExpressionPicker)(), null === (u = t.current) || void 0 === u || u.focus()) }, [n, i, s, a.drafts.type, t, l, o]) }({ editorRef: e9, disabled: ta, textValue: eN, channelId: ey.id, chatInputType: eP, submit: eY }); let tv = (em = e9, r.useCallback(e => { let t = em.current; null != e && null != t && t.insertSound(e), (0, L.closeExpressionPicker)() }, [em])), tD = r.useCallback(() => { var e; return null == tt ? void 0 : null === (e = tt.current) || void 0 === e ? void 0 : e.hide() }, []), { editorHeight: tM, handleResize: ty } = function(e) { let [t, n] = r.useState(0); return { editorHeight: t, handleResize: r.useCallback(t => { n(null != t ? t : 0), null == e || e(t) }, [e]) } }(eV), { handleTab: tP, handleEnter: tU, handleMoveSelection: tb } = function(e, t, n) { let i = r.useCallback(() => { var i, r; return !!(!n && (null === (i = t.current) || void 0 === i ? void 0 : i.onTabOrEnter(!1))) || (null === (r = e.current) || void 0 === r ? void 0 : r.onTabOrEnter(!1)) || !1 }, [n]), s = r.useCallback(() => { var i, r; return !!(!n && (null === (i = t.current) || void 0 === i ? void 0 : i.onTabOrEnter(!0))) || (null === (r = e.current) || void 0 === r ? void 0 : r.onTabOrEnter(!0)) || !1 }, [n]); return { handleTab: i, handleEnter: s, handleMoveSelection: r.useCallback(i => { var r, s; return !!(!n && (null === (r = t.current) || void 0 === r ? void 0 : r.onMoveSelection(i))) || (null === (s = e.current) || void 0 === s ? void 0 : s.onMoveSelection(i)) || !1 }, [n]) } }(tp, e8, tc), { expressionPickerView: tG, shouldHideExpressionPicker: tw, handleAutocompleteVisibilityChange: tk, handleOuterClick: tB } = function(e, t, n) { let [i, s] = (0, L.useExpressionPickerStore)(e => [e.activeView, e.activeViewType], d.default); r.useEffect(() => () => { (0, L.closeExpressionPicker)(e) }, [e]); let a = r.useCallback(e => { t.emit("autocomplete-visibility-change", e), e && (0, L.closeExpressionPicker)() }, [t]), o = r.useCallback(() => { var e; null == i && (null === (e = n.current) || void 0 === e || e.handleOuterClick()) }, [i]), l = null == i || null == s || s !== e; return { expressionPickerView: i, shouldHideExpressionPicker: l, handleAutocompleteVisibilityChange: a, handleOuterClick: o } }(eP, tS, e9), tV = A.AppLauncherDesktopExperiment.useExperiment({ location: "chat_input" }, { autoTrackExposure: !1 }).enabled, tx = (0, E.useStateFromStores)([m.default], () => m.default.shouldShowPopup(), []); (0, Z.useHereMentionCallback)(tS, ey.guild_id, ey.id); let tF = null != ek, tH = ta && !((tr || ts) && tu) || tA && (null === (l = eP.submit) || void 0 === l ? void 0 : l.useDisabledStylesOnSubmit), tY = null, tj = null; null != tn ? tY = null == ew ? void 0 : ew(tn, ti, el.attachButton) : (!ta || tl) && (tY = null == eb ? void 0 : eb(tF, el.attachButton), tV && (tj = null == eG ? void 0 : eG())); let tW = t_ && null != ep && !ta && eP.showCharacterCount && null == tn, tK = t_ && !__OVERLAY__ && null != ep && null == tn && eP.toolbarType !== X.SlateToolbarTypes.NONE, tz = function(e, t, n, i) { var r, s; let a = B.ExpressionSuggestionsEnabled.useSetting(), o = (0, E.useStateFromStores)([b.default], () => b.default.getStickerPreview(e.id, t.drafts.type)), l = null != o && o.length > 0; return a && (null === (r = t.stickers) || void 0 === r ? void 0 : r.autoSuggest) && !l && (null === (s = i.current) || void 0 === s ? void 0 : s.isVisible()) !== !0 && !__OVERLAY__ && null != n }(ey, eP, ep, tp), tZ = (0, C.useShouldShowPTONotice)(ey), tX = null != tn || null != ek || tZ, tQ = !!(null === (eu = eP.emojis) || void 0 === eu ? void 0 : eu.button) && tM <= 44; return (0, i.jsx)(g.EventEmitterProvider, { value: tS, children: (0, i.jsxs)(h.AnalyticsLocationProvider, { value: e7, children: [tK && td ? (0, i.jsx)(er.default, { editorRef: e9, options: eP.markdown, channel: ey }) : tK ? (0, i.jsx)(ei.default, { ref: tt, editorRef: e9, containerRef: te, options: eP.markdown }) : null, (0, i.jsxs)("div", { ref: e5, className: a()(eO, { [el.channelTextArea]: !0, [el.channelTextAreaDisabled]: tH, [el.highlighted]: eW, [el.textAreaMobileThemed]: _.isMobile }), onMouseDown: tB, children: [(0, i.jsx)($.default, { type: eP, channel: ey, activeCommand: tn, pendingReply: ek }), (0, i.jsxs)("div", { ref: te, onScroll: tD, className: a()(eC, { [el.scrollableContainer]: !0, [el.themedBackground]: !e3, [el.hasConnectedBar]: tX }), children: [(0, i.jsx)(q.default, { channelId: ey.id, chatInputType: eP }), eP.hideAttachmentArea ? null : (0, i.jsx)(et.default, { channelId: ey.id, type: eP, canAttachFiles: to }), (0, i.jsxs)("div", { className: a()(el.inner, { [el.innerDisabled]: tH, [el.sansAttachButton]: eP !== X.ChatInputTypes.EDIT && (null != tY || tH && null == tY || tr), [el.sansAttachButtonCreateThread]: eP === X.ChatInputTypes.THREAD_CREATION, [el.sansAttachButtonCreatePost]: eP === X.ChatInputTypes.CREATE_FORUM_POST }), children: [tY, tj, (0, i.jsx)(I.FocusRing, { ringTarget: e5, ringClassName: el.focusRing, children: (0, i.jsx)(Q.default, { ref: e9, id: eg, focused: eU, useSlate: t_, textValue: eN, richValue: ep, disabled: ta, placeholder: eD, required: eL, accessibilityLabel: eM, isPreviewing: (tr || ts) && tu, channel: ey, type: eP, canPasteFiles: to, uploadPromptCharacterCount: es.MAX_MESSAGE_LENGTH_PREMIUM, maxCharacterCount: null != eZ ? eZ : tE, allowNewLines: eQ, "aria-describedby": eJ, onChange: eB, onResize: ty, onBlur: ex, onFocus: eF, onKeyDown: eH, onSubmit: tm, onTab: tP, onEnter: tU, onMoveSelection: tb, onSelectionChanged: th, onMaybeShowAutocomplete: tO, onHideAutocomplete: tC, promptToUpload: ej, fontSize: tT, spellcheckEnabled: tf, canOnlyUseTextCommands: tF, className: a()({ [el.textAreaThreadCreation]: eP === X.ChatInputTypes.THREAD_CREATION, [el.profileBioInput]: eP === X.ChatInputTypes.PROFILE_BIO_INPUT }, eR), "aria-labelledby": e$ }) }), (0, i.jsx)(ee.default, { type: eP, disabled: ta, channel: ey, handleSubmit: tN, isEmpty: 0 === eN.trim().length })] })] }), tc ? null : (0, i.jsx)(O.default, { ref: e8, channel: ey, canOnlyUseTextCommands: tF }), (0, i.jsx)(R.default, { ref: tp, channel: ey, canMentionRoles: eK, canMentionChannels: ez, useNewSlashCommands: t_, canOnlyUseTextCommands: tF, canSendStickers: null === (ed = eP.stickers) || void 0 === ed ? void 0 : ed.allowSending, textValue: eN, focused: eU, expressionPickerView: tG, type: eP, targetRef: e5, editorRef: e9, onSendMessage: tm, onSendSticker: tL, onVisibilityChange: tk, editorHeight: tM, setValue: (e, t) => null == eB ? void 0 : eB(null, e, t), position: e1 }), (0, i.jsx)(U.default, { textValue: eN, editorHeight: tM }), tW ? (0, i.jsx)(en.default, { type: eP, textValue: eN, className: a()(eq, { [el.indentCharacterCount]: tQ }), maxCharacterCount: eZ, showRemainingCharsAfterCount: eX }) : null, tz ? (0, i.jsx)(D.default, { editorRef: e9, channel: ey, isEditorFocused: eU, onSelectSticker: tL, submitButtonVisible: (null === (e_ = eP.submit) || void 0 === e_ ? void 0 : e_.button) && (null !== (eI = null === (ec = eP.submit) || void 0 === ec ? void 0 : ec.ignorePreference) && void 0 !== eI ? eI : tI), stickerIconVisible: null !== (eT = null === (eE = eP.stickers) || void 0 === eE ? void 0 : eE.button) && void 0 !== eT && eT }) : null, e2] }), tw ? null : (0, i.jsx)(v.default, { positionTargetRef: e5, type: eP, onSelectGIF: tR, onSelectEmoji: tg, onSelectSticker: tL, onSelectSound: tv, channel: ey, closeOnModalOuterClick: e4, parentModalKey: e6, position: "top", align: "right", positionLayerClassName: el.expressionPickerPositionLayer }), tx ? (0, i.jsx)(N.default, { positionTargetRef: e5, channel: ey, closeOnModalOuterClick: e4, parentModalKey: e6 }) : null] }) }) })) }, 845537: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChannelMention: function() { return M }, CommandMention: function() { return U }, CustomEmoji: function() { return g }, Emoji: function() { return R }, RoleMention: function() { return D }, SoundboardMention: function() { return y }, StaticRouteMention: function() { return P }, TextMention: function() { return L }, Timestamp: function() { return b }, UserMention: function() { return v } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("596454"), o = n("99690"), l = n("607070"), u = n("797610"), d = n("754688"), _ = n("699450"), c = n("763296"), E = n("592125"), I = n("430824"), T = n("246946"), f = n("594174"), S = n("797053"), h = n("934415"), A = n("5192"), m = n("51144"), N = n("377668"), p = n("689938"), O = n("640567"), C = n("946278"); function R(e) { let { emoji: t } = e; return (0, i.jsx)(s.Tooltip, { text: t.name, delay: 750, position: "top", children: e => (0, i.jsx)(a.default, { src: t.src, emojiName: t.name, animated: !1, ...e }) }) } function g(e) { let { emoji: t } = e; return (0, i.jsx)(s.Tooltip, { text: t.name, delay: 750, position: "top", children: e => (0, i.jsx)(a.default, { emojiId: t.emojiId, emojiName: t.name, animated: t.animated, ...e }) }) } function L(e) { let { text: t, channelId: n, guildId: r } = e, s = I.default.getGuild(r), a = E.default.getChannel(n), o = (0, u.useClydeEnabled)(s, a) && "@Clyde" === t ? N.CLYDE_AI_MENTION_COLOR : null; return (0, i.jsx)(S.default, { color: o, children: t }) } function v(e) { let { id: t, guildId: n, channelId: a } = e, l = (0, r.useStateFromStores)([f.default], () => f.default.getUser(t)), u = (0, r.useStateFromStores)([T.default], () => T.default.hidePersonalInformation), d = A.default.useName(n, a, l), _ = (0, i.jsx)(S.default, { children: null == d ? "<@".concat(t, ">") : "@".concat(d) }); if (null != l) { let e = u || l.isPomelo() ? null : "#".concat(l.discriminator); return (0, i.jsx)(s.Tooltip, { text: (0, i.jsxs)("div", { className: O.userTooltip, children: [(0, i.jsx)(o.default, { user: l, animate: !0, size: s.AvatarSizes.SIZE_16, className: O.avatar }), m.default.getUserTag(l, { mode: "username", identifiable: u ? "never" : "always" }), (0, i.jsx)("span", { className: O.discriminator, children: e })] }), delay: 750, position: "top", "aria-label": m.default.getUserTag(l, { decoration: "never" }), children: e => (0, i.jsx)(s.Clickable, { tag: "span", ...e, children: _ }) }) } return _ } function D(e) { let { id: t, guildId: n } = e, a = (0, r.useStateFromStores)([I.default], () => null != n ? I.default.getRole(n, t) : void 0), o = (0, r.useStateFromStores)([l.default], () => l.default.roleStyle); if (null == a) return (0, i.jsx)("span", { children: "@deleted-role" }); let u = null != a.color && 0 !== a.color; return (0, i.jsxs)(S.default, { color: "username" === o && u ? a.color : null, children: ["dot" === o && (0, i.jsx)(s.RoleDot, { color: a.colorString, background: !1, tooltip: !1 }), "@", a.name] }) } function M(e) { let { id: t } = e, n = (0, r.useStateFromStores)([E.default], () => E.default.getChannel(t)), s = p.default.Messages.UNKNOWN_CHANNEL.toLowerCase(), a = "text", o = !0; if (null != n) { var l; s = (0, d.canViewChannel)(n) ? n.name : p.default.Messages.NO_ACCESS, a = (0, d.canViewChannel)(n) ? null !== (l = (0, h.getMentionIconType)(n)) && void 0 !== l ? l : "text" : "locked", o = (0, _.isChannelTypeMentionable)(n.type) } return o ? (0, i.jsx)(S.default, { iconType: a, children: s }) : (0, i.jsx)("span", { children: "#" + s }) } function y(e) { var t; let { id: n } = e, s = (0, r.useStateFromStores)([c.default], () => c.default.getSoundById(n)); return (0, i.jsx)(S.default, { children: null !== (t = null == s ? void 0 : s.name) && void 0 !== t ? t : "Sound" }) } function P(e) { let { id: t } = e, n = { home: p.default.Messages.SERVER_GUIDE, guide: p.default.Messages.SERVER_GUIDE, browse: p.default.Messages.CHANNEL_BROWSER_TITLE, customize: p.default.Messages.CHANNELS_AND_ROLES }; return (0, i.jsx)(S.default, { iconType: t, children: n[t] }) } function U(e) { let { text: t, id: n } = e; return (0, i.jsxs)(S.default, { children: [t, "(", n, ")"] }) } function b(e) { let { timestamp: t } = e; return (0, i.jsx)("span", { className: C.timestamp, children: t.formatted }) } }, 694320: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return C } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("100527"), d = n("906732"), _ = n("104494"), c = n("639119"), E = n("165583"), I = n("592125"), T = n("944486"), f = n("672752"), S = n("466111"), h = n("626135"), A = n("981631"), m = n("474936"), N = n("689938"), p = n("133215"); function O() { (0, l.openModalLazy)(async () => { let { default: e } = await n.e("3289").then(n.bind(n, "682609")); return t => (0, i.jsx)(e, { channel: null, ...t }) }) } function C(e) { var t; let { className: n, iconOnly: s, remaining: C } = e, R = (0, o.useStateFromStores)([T.default, I.default], () => { let e = I.default.getChannel(T.default.getChannelId()); return (null == e ? void 0 : e.isPrivate()) ? A.AnalyticsPages.DM_CHANNEL : A.AnalyticsPages.GUILD_CHANNEL }), { analyticsLocations: g } = (0, d.default)(u.default.PREMIUM_UPSELL), L = (0, _.usePremiumDiscountOffer)(), v = (0, c.usePremiumTrialOffer)(), D = (0, _.discountOfferHasTier)(L, m.PremiumSubscriptionSKUs.TIER_2), M = (null == v ? void 0 : null === (t = v.subscription_trial) || void 0 === t ? void 0 : t.sku_id) === m.PremiumSubscriptionSKUs.TIER_2; return (r.useEffect(() => { h.default.track(A.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: "longer messages inline", location: { location_page: R, location_section: A.AnalyticsSections.CHANNEL_TEXT_AREA }, location_stack: g }) }, [R, g]), (M || D) && C < 0) ? (0, i.jsx)(E.default, { type: m.PremiumUpsellTypes.MESSAGE_LENGTH_IN_EDITOR_UPSELL, subscriptionTier: m.PremiumSubscriptionSKUs.TIER_2, context: C, discountOffer: L, trialOffer: v, children: N.default.Messages.PREMIUM_MESSAGE_LENGTH_UPSELL_TOOLTIP.format({ onLearnMore: O }) }) : s ? (0, i.jsx)(l.Clickable, { className: p.iconOnly, onClick: () => O(), children: (0, i.jsx)(l.Tooltip, { text: N.default.Messages.PREMIUM_MESSAGE_LENGTH_UPSELL_TOOLTIP_WITHOUT_LINK, position: "top", children: e => (0, i.jsx)(S.default, { className: p.premium, ...e }) }) }) : (0, i.jsxs)("div", { className: a()(p.root, n), children: [(0, i.jsx)(S.default, { className: p.premium, color: f.GradientCssUrls.PREMIUM_TIER_2 }), (0, i.jsx)(l.Text, { className: p.text, variant: "text-sm/normal", children: N.default.Messages.PREMIUM_MESSAGE_LENGTH_UPSELL_TOOLTIP.format({ onLearnMore: O }) })] }) } }, 140963: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("757143"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("239091"), u = n("555573"), d = n("998698"), _ = n("459273"), c = n("358085"), E = n("62883"), I = n("752305"), T = n("981631"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = /(\t|\s)/; class h extends r.PureComponent { componentDidMount() { !this.props.disableAutoFocus && (Promise.resolve().then(() => { var e; let { value: t } = this.props; null === (e = this._ref) || void 0 === e || e.setSelection(t.length, t.length) }), this.focus()), null != d.default.getActiveCommand(this.props.channel.id) && u.setActiveCommand({ channelId: this.props.channel.id, command: null, section: null }) } componentDidUpdate(e, t) { this.state.nextSelection !== t.nextSelection && null != this._ref && this._ref.setSelection(this.state.nextSelection, this.state.nextSelection) } getCurrentWord() { let e = this._ref; if (null == e) return { word: null, isAtStart: !1 }; let { value: t } = this.props; if (0 === t.trim().length) return { word: null, isAtStart: !1 }; let n = e.selectionStart, i = e.selectionEnd; for (; n > 0 && !S.test(t[n - 1]);) { ; n-- } return { word: t.slice(n, i), isAtStart: 0 === n } } blur() { let { _ref: e } = this; null != e && e.blur() } submit(e) { return e.preventDefault(), this.props.onSubmit(this.props.value) } insertAutocomplete(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], { word: i } = this.getCurrentWord(); if (null == i) this.insertText(e, t, n); else { let t = this._ref; if (null == t) return; let r = t.value.slice(0, t.selectionStart - i.length), s = t.value.slice(t.selectionEnd); this._insertText(e, r, s, n) } } insertText(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = this._ref; if (null == i) return; let r = i.value.slice(0, i.selectionStart), s = i.value.slice(i.selectionEnd); this._insertText(e, r, s, n) } _insertText(e, t, n, i) { if (null == this._ref) return; i && (e += " "); let r = t + e + n, { onChange: s } = this.props; null == s || s(null, r, (0, I.toRichValue)(r)); let a = t.length + e.length; this.setState({ nextSelection: a }, () => { this.props.maybeShowAutocomplete() }) } hasOpenCodeBlock() { let e = this._ref; if (null == e) return !1; let t = this.props.value.slice(0, e.selectionStart).match(/```/g); return null != t && t.length > 0 && t.length % 2 != 0 } render() { let { value: e, disabled: t, placeholder: n, required: r, onResize: s, className: l, id: u, submitting: d, textAreaPaddingClassName: c, spellcheckEnabled: E, "aria-controls": I, "aria-expanded": f, "aria-activedescendant": S } = this.props; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(_.ComponentAction, { event: T.ComponentActions.GLOBAL_CLIPBOARD_PASTE, handler: this.handleGlobalPaste }), (0, i.jsx)(o.TextAreaAutosize, { ref: this.handleSetRef, className: a()(l, c), id: u, rows: 1, fontWidthEstimate: 6, placeholder: n, disabled: t || d, required: r, onChange: this.handleOnChange, onResize: s, onKeyPress: this.handleKeyPress, onKeyDown: this.handleKeyDown, onKeyUp: this.handleKeyUp, onFocus: this.props.onFocus, onBlur: this.props.onBlur, onPaste: this.handlePaste, onClick: this.handleClick, onContextMenu: this.handleContextMenu, value: t ? "" : e, tabIndex: 0, spellCheck: E, "aria-controls": I, "aria-expanded": f, "aria-activedescendant": S, "aria-haspopup": "listbox", "aria-autocomplete": "list", "aria-multiline": !0 })] }) } handleTabOrEnterDown(e) { e.which === T.KeyboardKeys.TAB && this.props.onTab() ? (e.preventDefault(), e.stopPropagation()) : e.which === T.KeyboardKeys.ENTER && this.props.onEnter(e) ? (e.preventDefault(), e.stopPropagation()) : e.which === T.KeyboardKeys.ESCAPE ? (e.preventDefault(), e.stopPropagation(), this.props.hideAutocomplete()) : e.which === T.KeyboardKeys.TAB && this.hasOpenCodeBlock() && (e.preventDefault(), e.stopPropagation(), this.insertText(" ", void 0, !1)) } insertEmoji(e, t) { this.insertText("".concat(":").concat(e.name).concat(":"), void 0, t) } getFirstText() { return this.props.value } constructor(...e) { super(...e), f(this, "_ref", void 0), f(this, "state", { nextSelection: -1 }), f(this, "focus", () => { let { _ref: e } = this; null != e && e.focus() }), f(this, "handleSetRef", e => { this._ref = e }), f(this, "handleKeyPress", e => { if (e.which === T.KeyboardKeys.ENTER) { if (!e.shiftKey && !this.hasOpenCodeBlock() && (!this.props.disableEnterToSubmit || e.ctrlKey)) return e.preventDefault(), this.props.onSubmit(this.props.value) } }), f(this, "handleKeyDown", e => { switch (e.which) { case T.KeyboardKeys.ARROW_DOWN: this.props.moveSelection(1) && e.preventDefault(); break; case T.KeyboardKeys.N: e.ctrlKey && this.props.moveSelection(1) && e.preventDefault(); break; case T.KeyboardKeys.ARROW_UP: this.props.moveSelection(-1) && e.preventDefault(); break; case T.KeyboardKeys.P: e.ctrlKey && this.props.moveSelection(-1) && e.preventDefault(); break; case T.KeyboardKeys.TAB: case T.KeyboardKeys.ENTER: this.handleTabOrEnterDown(e) } let { onKeyDown: t } = this.props; null == t || t(e) }), f(this, "handleKeyUp", e => { switch (e.which) { case T.KeyboardKeys.ARROW_RIGHT: case T.KeyboardKeys.ARROW_LEFT: case T.KeyboardKeys.HOME: case T.KeyboardKeys.END: this.props.maybeShowAutocomplete() } let { onKeyUp: t } = this.props; null == t || t(e) }), f(this, "handleGlobalPaste", e => { let { event: t } = e; !this.handlePaste(t) && this.focus() }), f(this, "handlePaste", e => { let t = this.props.onPaste(e); return t && e.preventDefault(), t }), f(this, "handleClick", () => { this.props.maybeShowAutocomplete() }), f(this, "handleContextMenu", e => { c.isPlatformEmbedded && (0, l.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("99989").then(n.bind(n, "889662")); return t => (0, i.jsx)(e, { ...t, isChannelTextArea: !0, text: (0, E.getSelectionText)() }) }, { align: "bottom", enableSpellCheck: !0 }) }), f(this, "handleOnChange", e => { let { onChange: t, allowNewLines: n } = this.props, i = e.currentTarget.value, r = n ? i : i.replace("\n", ""); null == t || t(e, r, (0, I.toRichValue)(r)) }) } } t.default = h }, 4484: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("911969"), l = n("367907"), u = n("998698"), d = n("117530"), _ = n("459273"), c = n("585483"), E = n("91313"), I = n("53529"), T = n("288897"), f = n("925994"), S = n("436660"), h = n("887490"), A = n("194625"), m = n("77188"), N = n("230554"), p = n("780748"), O = n("464581"), C = n("732659"), R = n("86724"), g = n("847302"), L = n("657198"), v = n("321127"), D = n("981631"), M = n("881789"); t.default = r.forwardRef(function(e, t) { let { value: n, type: s, channel: y, className: P, id: U, disabled: b, submitting: G, placeholder: w, required: k, textAreaPaddingClassName: B, onChange: V, onPaste: x, onResize: F, onFocus: H, onBlur: Y, onKeyDown: j, onKeyUp: W, onTab: K, onEnter: z, onSubmit: Z, maybeShowAutocomplete: X, hideAutocomplete: Q, moveSelection: q, spellcheckEnabled: J, canUseCommands: $, canOnlyUseTextCommands: ee, disableAutoFocus: et, disableEnterToSubmit: en, allowNewLines: ei, "aria-owns": er, "aria-expanded": es, "aria-haspopup": ea, "aria-activedescendant": eo, "aria-controls": el, "aria-invalid": eu, "aria-describedby": ed, "aria-labelledby": e_, "aria-autocomplete": ec } = e, eE = r.useRef(null), eI = r.useRef(null), eT = r.useRef(!0), ef = r.useRef(!0), eS = b || G, eh = r.useCallback((e, t, n) => { var i; let { value: r, selection: s } = n, a = h.EditorUtils.richValue(e), o = e.selection, l = !1; if (void 0 !== r && r !== a) { if (e.children = r, "parent" === t && !e.previewMarkdown) { try { e.previewMarkdown = !0, (0, g.run)(e, y.guild_id, y.id) } finally { e.previewMarkdown = !1 }(0, g.run)(e, y.guild_id, y.id), s = void 0 } "undo" !== t && void 0 !== r && r !== a && I.HistoryUtils.insertEntry(e, "other", !1, a, o), l = !0 } if (null != s && !h.SelectionUtils.isValid(e, s) && (s = void 0), (l || !h.SelectionUtils.isValid(e, o)) && void 0 === s) { let t = h.EditorUtils.end(e, []); s = { anchor: t, focus: t } } if (null != s && !h.SelectionUtils.equals(s, o)) { e.selection = s; let t = I.HistoryUtils.currentEntry(e); null != t && (t.selection = s), l = !0 } let d = E.getCommandBlock(e); if (null != d && d[0].command.id !== (null === (i = u.default.getActiveCommand(y.id)) || void 0 === i ? void 0 : i.id) && I.HistoryUtils.withMergedEntry(e, () => { (0, R.unsetCommand)(e, y.id, null, !0) }), l) { if (!et && h.EditorUtils.focus(e), "parent" === t) try { ef.current = !1, e.onChange() } finally { ef.current = !0 } else e.onChange() } }, [y.id, y.guild_id, et]), eA = r.useCallback(() => { eT.current = !1 }, []), em = r.useCallback(() => { eT.current = !0 }, []), eN = (0, m.default)({ channel: y, chatInputType: s, canUseCommands: $, canOnlyUseTextCommands: ee, onChangeStart: eA, onChangeEnd: em, updateState: eh }), ep = r.useCallback((e, t) => { let n = E.getOptionValues(eN, e), i = E.validateOptionValues(e, y.guild_id, y.id, n, t); return { values: n, results: i } }, [y.guild_id, y.id, eN]), eO = r.useCallback(() => { let e; let t = $ ? u.default.getActiveCommand(y.id) : null; if (null != t && null != t.options) { let r = ep(t, !1); e = r.values; let s = E.getOptionNames(eN).filter(e => !r.results[e].success).map(e => { var n; return (null !== (n = t.options) && void 0 !== n ? n : []).find(t => t.name === e) }); for (let e of t.options) e.required && !(e.name in r.values) && (S.SlateTransforms.insertCommandOption(eN, e), s.push(e)); if (s.length > 0) { var n, i; let e = s[0]; S.SlateTransforms.selectCommandOption(eN, e.name), c.ComponentDispatch.dispatch(D.ComponentActions.SHAKE_APP, { duration: 200, intensity: 2 }), (0, l.trackWithMetadata)(D.AnalyticEvents.APPLICATION_COMMAND_VALIDATION_FAILED, { application_id: null == t ? void 0 : t.applicationId, command_id: null == t ? void 0 : null === (n = t.rootCommand) || void 0 === n ? void 0 : n.id, argument_type: o.ApplicationCommandOptionType[null !== (i = null == e ? void 0 : e.type) && void 0 !== i ? i : 3], is_required: null == e ? void 0 : e.required }); return } } null == Z || Z((0, f.toTextValue)(h.EditorUtils.richValue(eN), { mode: "raw", ignoreTrailingEmptyNodes: !0 }), t, e) }, [y.id, eN, Z, ep, $]); (0, N.default)(t, eN, y, eO), (0, C.default)(eN, eE, F); let { handleKeyDown: eC, handleKeyUp: eR } = (0, p.default)({ editor: eN, channel: y, disableEnterToSubmit: en, onKeyDown: j, onKeyUp: W, onTab: K, onEnter: z, allowNewLines: ei, submit: eO, hideAutocomplete: Q, moveSelection: q }), { handlePaste: eg, handleGlobalPaste: eL } = (0, O.default)(eN, eS, x), ev = r.useCallback(e => { null == X || X() }, [X]), eD = r.useCallback(e => { e !== eI.current ? ef.current && (null == V || V(null, (0, f.toTextValue)(e, { mode: "raw" }), e)) : ef.current && X() }, [X, V]); r.useLayoutEffect(() => { eT.current && (eI.current = n, eh(eN, "parent", { value: n })) }, [eN, n, eh]), r.useEffect(() => { let e = () => { var e; let t = null !== (e = u.default.getActiveCommand(y.id)) && void 0 !== e ? e : null; null !== t && null != t.options && ep(t, !0) }; return d.default.addChangeListener(e), () => d.default.removeChangeListener(e) }, [y, eN, ep]); let eM = r.useCallback((e, t) => (0, A.default)(e, t), []), ey = r.useCallback(e => (0, L.default)(eN, e, y.id), [y.id, eN]), eP = r.useCallback(e => (0, v.default)(e), []); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(_.ComponentAction, { event: D.ComponentActions.GLOBAL_CLIPBOARD_PASTE, handler: eL }), (0, i.jsx)("div", { ref: eE, className: a()(P, M.slateContainer), children: (0, i.jsx)(T.default, { id: U, editor: eN, channelId: y.id, guildId: y.guild_id, className: a()(M.slateTextArea, B), placeholder: w, readOnly: eS, spellCheck: J, autoFocus: !et, canFocus: !b, onChange: eD, onFocus: H, onBlur: Y, onClick: ev, onPaste: eg, onKeyDown: eC, onKeyUp: eR, decorateExtra: eM, renderExtraElement: ey, renderExtraLeaf: eP, "aria-owns": er, "aria-haspopup": ea, "aria-expanded": es, "aria-activedescendant": eo, "aria-controls": el, "aria-labelledby": e_, "aria-describedby": ed, "aria-invalid": eu, "aria-autocomplete": ec, "aria-required": k }) })] }) }) }, 273031: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("404975"), u = n("725446"); function d(e) { let { onClick: t, children: n, tooltip: s, dangerous: d = !1, className: _, "aria-label": c } = e; return (0, i.jsx)(o.Tooltip, { text: s, hideOnClick: !0, children: e => { let { onMouseEnter: o, onMouseLeave: E, onClick: I } = e; return (0, i.jsx)(l.Button, { onMouseEnter: o, onMouseLeave: E, onClick: e => { e.stopPropagation(), null == I || I(), t(e) }, dangerous: d, "aria-label": null != c ? c : s, className: _, children: r.Children.map(n, e => r.isValidElement(e) ? r.cloneElement(e, { className: a()(e.props.className, u.actionBarIcon) }) : e) }) } }) } }, 859235: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AttachmentListItemSizes: function() { return r } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("924826"), d = n("481060"), _ = n("166459"), c = n("404975"), E = n("585483"), I = n("43085"), T = n("981631"), f = n("689938"), S = n("995941"); function h(e) { e.stopPropagation() }(i = r || (r = {}))[i.SMALL = 0] = "SMALL", i[i.MEDIUM = 1] = "MEDIUM", i[i.CLIP = 2] = "CLIP"; t.default = a.forwardRef(function(e, t) { let { id: n, channelId: i, className: r, children: a, actions: o, handleEditModal: A, keyboardModeEnabled: m, onKeyDown: N, draftType: p, size: O = 1 } = e, { onFocus: C, ...R } = (0, u.useListItem)(n), { handleFocus: g, handleBlur: L } = (0, I.useFocusInside)(C), v = 0 === O, D = null != o; return (0, s.jsx)(d.FocusRing, { children: (0, s.jsx)("li", { ...R, onFocus: g, onBlur: L, onKeyDown: e => { if (m) { switch (e.which) { case T.KeyboardKeys.D: e.preventDefault(), _.default.remove(i, n, p); return; case T.KeyboardKeys.E: null != A && (e.preventDefault(), A(e)); return; case T.KeyboardKeys.BACKSPACE: e.ctrlKey ? (e.preventDefault(), _.default.clearAll(i, p)) : (e.preventDefault(), _.default.remove(i, n, p)); return; case T.KeyboardKeys.ARROW_UP: if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) return; e.preventDefault(), E.ComponentDispatch.dispatchToLastSubscribed(T.ComponentActions.FOCUS_MESSAGES, { atEnd: !0 }) } null == N || N(e) } }, className: l()(S.upload, r, { [S.sizeClip]: 2 === O }), ref: t, children: (0, s.jsxs)("div", { className: S.uploadContainer, children: [a, D ? (0, s.jsx)("div", { className: S.actionBarContainer, children: (0, s.jsx)("div", { className: l()(S.actionBar, { [S.smallActionBar]: v }), onContextMenu: h, "aria-label": f.default.Messages.ATTACHMENT_UTILITIES, children: (0, s.jsx)(c.default, { className: l()({ [S.miniPopover]: v }), children: o }) }) }) : null] }) }) }) }) }, 303628: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("924826"), l = n("536895"), u = n("442837"), d = n("570140"), _ = n("166459"), c = n("911969"), E = n("607070"), I = n("209613"), T = n("998698"), f = n("703558"), S = n("117530"), h = n("132338"), A = n("459273"), m = n("444282"), N = n("898463"), p = n("981631"), O = n("62469"), C = n("842648"); let R = []; function g(e) { let { channelId: t, type: n } = e, s = (0, u.useStateFromStores)([E.default], () => E.default.keyboardModeEnabled), g = (0, I.default)("attachments", l.Orientations.HORIZONTAL), L = (0, u.useStateFromStores)([S.default], () => S.default.getUploads(t, n.drafts.type)), { isApplicationCommand: v, commandOptions: D, commandOptionStates: M } = (0, u.useStateFromStoresObject)([T.default], () => { let e = T.default.getActiveCommand(t); if (null == e) return { isApplicationCommand: !1, commandOptions: R, commandOptionStates: null }; let n = T.default.getOptionStates(t); return { isApplicationCommand: !0, commandOptions: e.options, commandOptionStates: n } }), y = r.useMemo(() => { var e; return null !== (e = null == D ? void 0 : D.filter(e => { var t; return e.type === c.ApplicationCommandOptionType.ATTACHMENT && (null == M ? void 0 : null === (t = M[e.name]) || void 0 === t ? void 0 : t.hasValue) })) && void 0 !== e ? e : [] }, [D, M]), [P, U] = r.useState([]); r.useEffect(() => { let e = () => { _.default.clearAll(t, n.drafts.type) }; return d.default.subscribe("APPLICATION_COMMAND_SET_ACTIVE_COMMAND", e), () => d.default.unsubscribe("APPLICATION_COMMAND_SET_ACTIVE_COMMAND", e) }, [t, n]); let b = r.useCallback(() => { g.focusFirstVisibleItem() }, [g]); return ((0, A.useComponentAction)({ event: p.ComponentActions.FOCUS_ATTACHMENT_AREA, handler: b }), r.useEffect(() => { if (v) { let e = []; P.forEach(t => { !y.some(e => t.name === e.name) && e.push(t) }), e.forEach(e => { _.default.remove(t, e.name, n.drafts.type) }), U(y) } }, [t, y.length, n]), !v && 0 === L.length || v && 0 === y.length) ? null : (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)(o.ListNavigatorProvider, { navigator: g, children: (0, i.jsx)(o.ListNavigatorContainer, { children: e => { let { ref: r, ...o } = e; return (0, i.jsx)("ul", { ref: r, ...o, className: a()(O.channelAttachmentArea, C.scrollbarGhost), children: v ? y.map(e => (0, i.jsx)(m.default, { channelId: t, keyboardModeEnabled: s, option: e }, e.name)) : L.map(e => (0, i.jsx)(N.default, { channelId: t, draftType: n.drafts.type, upload: e, keyboardModeEnabled: s, clip: e.clip }, e.id)) }) } }) }), n.drafts.type === f.DraftType.FirstThreadMessage ? null : (0, i.jsx)(h.default, {})] }) } t.default = r.memo(function(e) { let { channelId: t, type: n, canAttachFiles: r } = e; return r ? (0, i.jsx)(g, { channelId: t, type: n }) : null }) }, 43085: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useFocusInside: function() { return r } }), n("47120"); var i = n("470079"); function r(e, t) { let [n, r] = (0, i.useState)(!1), s = (0, i.useCallback)(t => { (t.target === t.currentTarget || t.currentTarget.contains(document.activeElement)) && r(!0), null != e && e(t) }, [e]); return { handleFocus: s, handleBlur: (0, i.useCallback)(e => { (e.target === e.currentTarget || !e.currentTarget.contains(document.activeElement)) && r(!1), null != t && t(e) }, [t]), isFocused: n } } }, 444282: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("166459"), u = n("53281"), d = n("476326"), _ = n("703558"), c = n("117530"), E = n("859235"), I = n("898463"), T = n("981631"), f = n("790544"), S = n("451328"); function h(e) { let { channelId: t, option: n, keyboardModeEnabled: s } = e, h = r.useRef(null), [A, m] = r.useState(!1), N = c.default.getUpload(t, n.name, _.DraftType.SlashCommand), p = r.useRef(null), O = r.useCallback(() => { m(!0) }, []), C = r.useCallback(() => { m(!1) }, []), R = r.useCallback(e => { var i; m(!1); let r = { id: n.name, file: null === (i = e.dataTransfer) || void 0 === i ? void 0 : i.files[0], platform: d.UploadPlatform.WEB }; l.default.setFile({ channelId: t, id: n.name, file: r, draftType: _.DraftType.SlashCommand }) }, [t, n]); return (r.useEffect(() => { let e = p.current; return null == N && (null == e || e.addEventListener("dragover", O, !1), null == e || e.addEventListener("dragleave", C, !1), null == e || e.addEventListener("drop", R, !1)), () => { null == e || e.removeEventListener("dragover", O, !1), null == e || e.removeEventListener("dragleave", C, !1), null == e || e.removeEventListener("drop", R, !1) } }, [N, O, C, R]), null != N) ? (0, i.jsx)(I.default, { channelId: t, upload: N, keyboardModeEnabled: s, draftType: _.DraftType.SlashCommand, label: (0, i.jsxs)(r.Fragment, { children: [(0, i.jsxs)(o.Text, { tag: "span", variant: "text-md/normal", children: [n.name, ": "] }), (0, i.jsx)(o.Text, { tag: "span", variant: "text-md/normal", color: "text-brand", children: N.filename })] }), canEdit: !1 }) : (0, i.jsxs)(E.default, { id: n.name, channelId: t, keyboardModeEnabled: s, onKeyDown: e => { if (e.which === T.KeyboardKeys.ENTER) { var t; e.preventDefault(), null === (t = h.current) || void 0 === t || t.activateUploadDialogue() } }, className: a()(f.emptyOption, { [f.emptyOptionActive]: A }), draftType: _.DraftType.SlashCommand, ref: p, children: [(0, i.jsx)("span", { className: a()(f.optionName, { [f.optionNameActive]: A }), children: n.name }), (0, i.jsx)(o.Clickable, { className: f.clickContainer, onClick: () => { var e; return null === (e = h.current) || void 0 === e ? void 0 : e.activateUploadDialogue() }, children: (0, i.jsxs)("div", { className: f.commandOptionContainer, children: [(0, i.jsx)("img", { src: S, className: f.optionIcon, alt: "" }), (0, i.jsx)(o.Text, { className: f.optionHelp, variant: "text-sm/normal", children: "Drag and drop or click to upload file" }), (0, i.jsx)(u.default, { ref: h, onChange: e => { var i, r; if (null != t && (null === (r = e.currentTarget) || void 0 === r ? void 0 : null === (i = r.files) || void 0 === i ? void 0 : i[0]) != null) { let i = { id: n.name, file: e.currentTarget.files[0], platform: d.UploadPlatform.WEB }; l.default.setFile({ channelId: t, id: n.name, file: i, draftType: _.DraftType.SlashCommand }), e.currentTarget.value = "" } }, multiple: !1, tabIndex: -1, "aria-hidden": !0, className: f.fileInput })] }) })] }) } }, 898463: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UploadIcon: function() { return P }, default: function() { return U } }), n("47120"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("166459"), d = n("95152"), _ = n("476326"), c = n("543651"), E = n("377171"), I = n("592125"), T = n("68588"), f = n("794358"), S = n("880008"), h = n("185403"), A = n("740727"), m = n("26290"), N = n("810090"), p = n("956664"), O = n("709054"), C = n("273031"), R = n("859235"), g = n("689938"), L = n("709982"); let v = ["image/jpeg", "image/png", "image/webp", "image/gif", "video/quicktime", "video/mp4"]; function D(e) { let { alt: t, spoiler: n, renderContent: s, size: a } = e, [o, l] = r.useState(!1); return (0, i.jsx)(T.ObscuredDisplayContext.Provider, { value: !n, children: (0, i.jsx)(T.default, { containerStyles: a === R.AttachmentListItemSizes.CLIP ? { borderBottomLeftRadius: 0, borderBottomRightRadius: 0, boxShadow: "none" } : void 0, type: T.default.Types.ATTACHMENT, onReveal: () => l(!0), className: L.spoilerContainer, children: e => (0, i.jsxs)("div", { className: L.spoilerWrapper, children: [s(e), (0, i.jsxs)("div", { className: L.tags, children: [null != t && "" !== t ? (0, i.jsx)("span", { className: L.altTag, children: g.default.Messages.IMAGE_ALT }) : null, o && n ? (0, i.jsx)("span", { className: L.altTag, children: g.default.Messages.SPOILER }) : null] })] }) }) }) } function M(e) { let { file: t, alt: n, spoiler: s, size: o = R.AttachmentListItemSizes.MEDIUM, onMouseEnter: u } = e, [d, _] = r.useState(), [c, E] = r.useState({ width: 0, height: 0 }), I = o === R.AttachmentListItemSizes.SMALL; r.useEffect(() => { if (null == t || !1 === v.includes(t.type)) return; let e = URL.createObjectURL(t); _(e); let n = new Image; return n.onload = () => { let { width: e, height: t } = (0, p.zoomFit)(n.width, n.height); E({ width: e, height: t }) }, n.src = e, () => { _(void 0), E({ width: 0, height: 0 }), URL.revokeObjectURL(e) } }, [t]); let T = r.useCallback(function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return null == d ? (0, i.jsx)(i.Fragment, {}) : (0, i.jsx)("img", { src: d, className: a()(L.media, { [L.spoiler]: e, [L.imageSmall]: I }), "aria-hidden": !0, alt: null != n ? n : "", style: t ? c : {} }) }, [d, I, n, c]), f = r.useCallback(() => { null != d && (0, l.openModal)(e => (0, i.jsx)(l.ModalRoot, { className: L.__invalid_modal, ...e, size: l.ModalSize.DYNAMIC, "aria-label": g.default.Messages.IMAGE, children: T(!1, !0) })) }, [d, T]); return (0, i.jsx)("div", { onMouseEnter: u, className: a()(L.mediaContainer, { [L.imageSmall]: I }), children: (0, i.jsx)(l.Clickable, { onClick: f, className: L.clickableMedia, children: (0, i.jsx)(D, { size: o, alt: n, spoiler: s, renderContent: T }) }) }) } function y(e) { let { file: t, alt: n, spoiler: s, size: o = R.AttachmentListItemSizes.MEDIUM, onMouseEnter: l, onVideoLoadError: u } = e, [d, _] = r.useState(), c = r.useRef(null); return r.useEffect(() => { if (null == t) return; let e = URL.createObjectURL(t); return _(e), () => { _(void 0), URL.revokeObjectURL(e) } }, [t]), (0, i.jsx)("div", { onMouseEnter: l, className: L.mediaContainer, children: (0, i.jsx)(D, { size: o, alt: n, spoiler: s, renderContent: e => (0, i.jsx)(N.default, { ref: c, src: d, className: a()(L.media, { [L.spoiler]: e, [L.sizeClip]: o === R.AttachmentListItemSizes.CLIP }), onError: u, preload: "none", "aria-hidden": !0 }) }) }) } function P(e) { var t; let { upload: n, size: s = R.AttachmentListItemSizes.MEDIUM, onMouseEnter: o } = e, [l, u] = r.useState(!1), d = s === R.AttachmentListItemSizes.SMALL; return n.isImage && n.item.platform === _.UploadPlatform.WEB ? (0, i.jsx)(M, { file: n.item.file, alt: n.description, spoiler: n.spoiler, size: s, onMouseEnter: o }) : !l && n.isVideo && n.item.platform === _.UploadPlatform.WEB ? (0, i.jsx)(y, { file: n.item.file, size: s, alt: n.description, spoiler: n.spoiler, onMouseEnter: o, onVideoLoadError: () => u(!0) }) : (0, i.jsx)("div", { onMouseEnter: o, className: a()(L.icon, L.__invalid_imageContainer, { [L[null !== (t = n.classification) && void 0 !== t ? t : ""]]: !0, [L.imageSmall]: d }), children: (0, i.jsx)("div", { className: L.tags, children: n.spoiler ? (0, i.jsx)("span", { className: L.altTag, children: g.default.Messages.SPOILER }) : null }) }) } function U(e) { let { channelId: t, draftType: n, upload: s, keyboardModeEnabled: _, label: T, size: N = R.AttachmentListItemSizes.MEDIUM, canEdit: p = !0, hideFileName: v = !1, clip: D } = e, M = null != D, y = (N = M ? R.AttachmentListItemSizes.CLIP : N) === R.AttachmentListItemSizes.SMALL, U = (0, o.useStateFromStores)([I.default], () => { var e; return null === (e = I.default.getChannel(t)) || void 0 === e ? void 0 : e.guild_id }), b = e => { e.stopPropagation(), (0, l.openModal)(e => (0, i.jsx)(d.default, { ...e, draftType: n, upload: s, channelId: t, onSubmit: e => { let { name: i, description: r, spoiler: a } = e; u.default.update(t, s.id, n, { filename: i, description: r, spoiler: a }) } })) }; return (0, i.jsxs)(R.default, { actions: (0, i.jsxs)(r.Fragment, { children: [p ? (0, i.jsx)(C.default, { className: a()({ [L.action]: y }), tooltip: M ? g.default.Messages.CLIPS_ATTACHMENT_UTILITIES_SPOILER : g.default.Messages.ATTACHMENT_UTILITIES_SPOILER, onClick: () => u.default.update(t, s.id, n, { spoiler: !s.spoiler }), children: s.spoiler ? (0, i.jsx)(S.default, { className: a()({ [L.actionBarIcon]: y }) }) : (0, i.jsx)(f.default, { className: a()({ [L.actionBarIcon]: y }) }) }) : null, p && !M ? (0, i.jsx)(C.default, { className: a()({ [L.action]: y }), tooltip: g.default.Messages.ATTACHMENT_UTILITIES_MODIFY, onClick: b, children: (0, i.jsx)(h.default, { className: a()({ [L.actionBarIcon]: y }) }) }) : null, (0, i.jsx)(C.default, { className: a()({ [L.action]: y }), tooltip: M ? g.default.Messages.CLIPS_ATTACHMENT_UTILITIES_REMOVE : g.default.Messages.ATTACHMENT_UTILITIES_REMOVE, onClick: () => u.default.remove(t, s.id, n), dangerous: !0, children: (0, i.jsx)(A.default, { className: a()({ [L.actionBarIcon]: y }) }) })] }), draftType: n, id: s.id, channelId: t, handleEditModal: b, keyboardModeEnabled: _, size: N, className: a()({ [L.attachmentItemSmall]: y }), children: [(0, i.jsx)(P, { upload: s, size: N }), !v && !M && (0, i.jsx)("div", { className: L.filenameContainer, children: (0, i.jsx)(l.Text, { className: L.filename, variant: "text-sm/normal", children: null != T ? T : s.filename }) }), M && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(c.default, { className: L.clipsFooter, createdAt: O.default.extractTimestamp(D.id), participantIds: D.users, applicationId: D.applicationId, title: D.name, guildId: U }), (0, i.jsx)(m.TextBadge, { color: E.default.BG_BRAND, className: L.clipsBadge, text: g.default.Messages.CLIP_TAG })] })] }) } }, 91313: function(e, t, n) { "use strict"; n.r(t), n.d(t, { findTextOptions: function() { return C }, getCommandBlock: function() { return S }, getCurrentCommandOption: function() { return h }, getOptionNames: function() { return A }, getOptionValues: function() { return m }, optionToValues: function() { return N }, validateOption: function() { return O }, validateOptionValues: function() { return p } }), n("653041"), n("47120"); var i = n("911969"), r = n("555573"), s = n("998698"), a = n("509716"), o = n("897473"), l = n("433355"), u = n("703558"), d = n("944486"), _ = n("117530"), c = n("752305"), E = n("925994"), I = n("887490"), T = n("42530"); let f = /([\p{L}\p{N}\p{sc=Deva}\p{sc=Thai}_-]+):/gu; function S(e) { let t = I.EditorUtils.richValue(e)[0]; return null == t || "applicationCommand" !== t.type ? null : [t, T.FIRST_BLOCK_PATH] } function h(e) { var t, n; if (null == e.selection) return null; let i = null !== (t = I.EditorUtils.above(e, { at: e.selection.focus, match: e => I.NodeUtils.isType(e, "applicationCommandOption") })) && void 0 !== t ? t : null; return null != i || I.RangeUtils.isCollapsed(e.selection) ? i : null !== (n = I.EditorUtils.above(e, { at: e.selection.anchor, match: e => I.NodeUtils.isType(e, "applicationCommandOption") })) && void 0 !== n ? n : null } function A(e) { let t = S(e), n = [], i = null == t ? void 0 : t[0].children; if (null != i) for (let e of i) I.NodeUtils.isType(e, "applicationCommandOption") && n.push(e.optionName); return n } function m(e, t) { let n = {}; if (null == t.options) return {}; let i = S(e), r = Object.fromEntries(t.options.map(e => [e.name, e])), s = null == i ? void 0 : i[0].children; if (null != s) { for (let t of s) if (I.NodeUtils.isType(t, "applicationCommandOption")) { let i = r[t.optionName]; null != i && (n[t.optionName] = N(e, i, t)) } } return n } function N(e, t, n) { let r = d.default.getCurrentlySelectedChannelId(), s = l.default.getSidebarState(r), a = (null == s ? void 0 : s.type) === o.SidebarType.VIEW_THREAD ? s.channelId : r, T = n.children.map(n => { if (t.type === i.ApplicationCommandOptionType.ATTACHMENT) { let e = _.default.getUpload(a, t.name, u.DraftType.SlashCommand); if (null != e) { var r; return { type: "text", text: null !== (r = e.filename) && void 0 !== r ? r : "" } } } if (I.TextUtils.isText(n)) return { type: "text", text: n.text }; if (I.EditorUtils.isVoid(e, n)) { let e = (0, c.voidToOptionValue)(n); if (null != e) return e } return { type: "text", text: (0, E.serializeDescendant)(n, { mode: "raw" }) } }); if (t.type !== i.ApplicationCommandOptionType.STRING) { for (; T.length > 0 && "text" === T[0].type && "" === T[0].text.trim();) T.shift(); for (; T.length > 0 && "text" === T[T.length - 1].type && "" === T[T.length - 1].text.trim();) T.pop() } return T } function p(e, t, n, i, s) { if (null == e.options) return {}; let o = Object.fromEntries(e.options.map(e => { var r; return [e.name, a.validateOptionContent({ option: e, content: null !== (r = i[e.name]) && void 0 !== r ? r : null, guildId: t, channelId: n, allowEmptyValues: s })] })); return r.updateOptionValidationStates(n, o), o } function O(e, t, n, i, o) { var l; let [u] = i, d = s.default.getActiveCommand(n), _ = null == d ? void 0 : null === (l = d.options) || void 0 === l ? void 0 : l.find(e => e.name === u.optionName); if (null == _) return; let c = N(e, _, u), E = a.validateOptionContent({ option: _, content: c, guildId: t, channelId: n, allowEmptyValues: o }); return r.updateOptionStates(n, { [u.optionName]: { lastValidationResult: E } }), E } function C(e, t) { if (null == t.options || 0 === t.options.length) return []; let n = I.EditorUtils.richValue(e), i = [], r = new Set(A(e)), s = {}, a = new Set; for (let e of t.options) s[e.displayName] = e, !r.has(e.name) && a.add(e.displayName); let o = null; for (let t = 0; t < n.length; t++) { let r = n[t]; if ("line" === r.type || "applicationCommand" === r.type) for (let u = 0; u < r.children.length; u++) { let d; let _ = r.children[u], c = [t, u]; if (I.NodeUtils.isType(_, "applicationCommandOption")) { if (null != o) { var l; o.valueRange.focus = null !== (l = I.EditorUtils.before(e, c)) && void 0 !== l ? l : I.EditorUtils.start(e, []), o.text = (0, E.toTextValue)(n, { mode: "raw", range: o.valueRange }).trim(), i.push(o), o = null } continue } if (!!I.TextUtils.isText(_)) for (f.lastIndex = 0; null != (d = f.exec(_.text));) { if (0 !== d.index && null == _.text.charAt(d.index - 1).match(/(\t|\s)/)) continue; let e = d[1]; if (!a.has(e)) continue; a.delete(e); let t = s[e]; if (null == t) continue; let r = { path: c, offset: d.index }, l = { path: c, offset: r.offset + d[0].length }, u = { path: c, offset: l.offset }, I = { name: t.name, displayName: t.displayName, type: t.type, keyRange: { anchor: r, focus: l }, valueRange: { anchor: u, focus: u }, text: "" }; null != o && (o.valueRange.focus = I.keyRange.anchor, o.text = (0, E.toTextValue)(n, { mode: "raw", range: o.valueRange }).trim(), i.push(o)), o = I } } } return null != o && (o.valueRange.focus = I.EditorUtils.end(e, []), o.text = (0, E.toTextValue)(n, { mode: "raw", range: o.valueRange }).trim(), i.push(o)), i } }, 53529: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HistoryUtils: function() { return a } }), n("47120"), n("653041"); var i = n("887490"); let r = new WeakMap, s = new WeakMap, a = { isMerging(e) { var t; return null === (t = s.get(e)) || void 0 === t || t }, isSaving(e) { var t; return null === (t = r.get(e)) || void 0 === t || t }, withoutMerging(e, t) { let n = this.isMerging(e); s.set(e, !1); try { t() } finally { s.set(e, n) } }, withoutSaving(e, t) { let n = this.isSaving(e); r.set(e, !1); try { t() } finally { r.set(e, n) } }, withSingleEntry: (e, t) => o(e, "other", !1, t), withMergedEntry: (e, t) => o(e, "other", !0, t), currentEntry: e => e.history.stack.length > 0 ? e.history.stack[e.history.index] : null, insertOrMergeEntry(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = a.currentEntry(e); a.isMerging(e) && (null == i ? void 0 : i.mergeable) ? this.mergeEntry(e, n) : this.insertEntry(e, t, n) }, insertEntry(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], r = arguments.length > 3 ? arguments[3] : void 0, s = arguments.length > 4 ? arguments[4] : void 0; s = null != s ? s : e.selection, r = null != r ? r : i.EditorUtils.richValue(e); let { history: o } = e, l = a.currentEntry(e); for (null != l && (l.mergeable = !1), o.stack.length > 0 && (o.stack.length = o.index + 1); o.stack.length >= 250;) o.stack.shift(); o.stack.push({ type: t, mergeable: n, createdAt: Date.now(), value: r, selection: s }), o.index = o.stack.length - 1 }, mergeEntry(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { selection: n } = e, r = i.EditorUtils.richValue(e), s = a.currentEntry(e); null != s && (s.value = r, s.selection = n, !t && (s.mergeable = !1)) } }; function o(e, t, n, s) { let o = e.children, l = e.selection, u = a.isSaving(e); r.set(e, !1); try { let r = s(); return u && (n ? a.mergeEntry(e) : e.children !== o ? a.insertEntry(e, t, !1) : a.isMerging(e) && null != e.selection && (null == l || !i.RangeUtils.equals(e.selection, l)) && a.mergeEntry(e)), r } finally { r.set(e, u) } } }, 339227: function(e, t, n) { "use strict"; n.r(t), n.d(t, { parse: function() { return M } }), n("47120"), n("411104"), n("757143"), n("653041"); var i = n("512722"), r = n.n(i), s = n("31775"), a = n.n(s), o = n("302454"), l = n("25209"), u = n("710845"), d = n("772096"), _ = n("428595"), c = n("594199"), E = n("364458"), I = n("70956"), T = n("40786"), f = n("362092"); let S = { link: { type: "skip" }, highlight: { type: "skip" }, blockQuote: { type: "skip" }, codeBlock: { type: "skip" }, list: { type: "skip" }, heading: { type: "skip" }, channelOrMessageUrl: { type: "skip" }, mediaPostLink: { type: "skip" }, attachmentLink: { type: "skip" }, newline: { type: "verbatim" }, br: { type: "verbatim" }, paragraph: { type: "verbatim" }, text: { type: "verbatim" }, emoticon: { type: "verbatim" }, mention: { type: "inlineObject" }, roleMention: { type: "inlineObject" }, commandMention: { type: "inlineObject" }, channelMention: { type: "inlineObject" }, emoji: { type: "inlineObject" }, customEmoji: { type: "inlineObject" }, em: { type: "inlineStyle", before: "*", after: "*" }, looseEm: { type: "inlineStyle", before: "*", after: " *" }, autolink: { type: "inlineStyle", before: "<", after: ">" }, strong: { type: "inlineStyle", before: "**", after: "**" }, u: { type: "inlineStyle", before: "__", after: "__" }, s: { type: "inlineStyle", before: "~~", after: "~~" }, escape: { type: "inlineStyle", before: "\\", after: "" }, inlineCode: { type: "inlineStyle", before: "`", after: "`" }, staticRouteLink: { type: "inlineStyle", before: "" }, soundboard: { type: "inlineStyle", before: "" }, spoiler: { type: "inlineStyle", before: "||", after: "||" }, url: { type: "inlineStyle", before: "", after: "" }, codeBlockText: { type: "inlineStyle", before: "", after: "" }, codeBlockSyntax: { type: "inlineStyle", before: "", after: "" }, codeBlockLang: { type: "inlineStyle", before: "", after: "" }, timestamp: { type: "inlineObject" }, subtext: { type: "inlineStyle", before: "-# ", after: "" } }, h = new Set(["*", "_", "\\"]), A = {}, m = {}; for (let e in _.default.RULES) { if (!(e in S)) throw Error("Slate: Unknown markdown rule: ".concat(e, ". If you have just added a new markdown rule ") + "then you probably need to add it to this file so that the rich chat box understands it."); let t = S[e]; "skip" !== t.type && (A[e] = N(_.default.RULES[e])), "skip" !== t.type && "inlineObject" !== t.type && (m[e] = N("text" === e ? c.default : _.default.RULES[e])) } function N(e) { r()(null != e.parse, "Slate: rule must have a parse function"); let t = e.parse; return { ...e, parse(e, n, i) { let r = t.call(this, e, n, i); return !(r instanceof Array) && (r.originalMatch = e), r } } } let p = { url: { parse: e => null == (0, d.punycodeLink)(e[1]) ? { type: "text", content: e[0], originalMatch: e } : { type: "link", content: e[1], originalMatch: e } }, autolink: { parse: e => null == (0, d.punycodeLink)(e[1]) ? { type: "text", content: e[0], originalMatch: e } : { type: "autolink", content: e[1], originalMatch: e } }, codeBlockSyntax: { order: o.defaultRules.inlineCode.order - .1, match: e => /^(```)([a-z0-9_+\-.#]+$)?/.exec(e), parse: e => null != e[2] && "" !== e[2] && f.isKnownLang(e[2]) ? [{ type: "codeBlockSyntax", content: e[1], originalMatch: e }, { type: "codeBlockLang", content: e[2], originalMatch: e }] : { type: "codeBlockSyntax", content: e[0], originalMatch: e } } }, O = (0, E.default)([A, p]), C = (0, E.default)([m, p]), R = l.astParserFor(O), g = l.astParserFor(C), L = { max: 1 / 0, maxAge: 1 * I.default.Millis.MINUTE, updateAgeOnGet: !0 }, v = new(a())(L), D = new(a())(L); function M(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], r = f.findBackticks(e); if (r.push(e.length), 1 === r.length && n) return []; let s = 0, a = n, o = []; for (let n of r) { if (a) o.push({ text: e.substring(s, n), start: s, attributes: ["codeBlockText"], data: void 0 }); else { let a = n === r[r.length - 2] ? e.substring(n + 3) : ""; n += 3 + (null != a.match(f.caseInsensitiveLangRegex) ? a : "").length; let l = e.substring(s, n); "" !== l && (function(e, t, n) { let i = [], r = n ? D : v, s = r.get(e); if (null != s) return s; let a = e.replace(/\r\n/g, " \n").replace(/[\r\f]/g, " ").replace(/\t/g, " ") + "\n\n", o = { originalMatch: { index: 0, 0: "" }, type: "paragraph", content: (n ? g : R)(a, !0, { returnMentionIds: !0, disableAutoBlockNewlines: !0, guildId: t }) }; y(i, a, o, 0, []); let l = function(e) { if (0 === (e = e.filter(e => e.text.length > 0)).length) return e; let t = [e[0]]; for (let n = 1; n < e.length; n++) { let i = t[t.length - 1], r = i.start + i.text.length, s = e[n]; s.start === r && null == i.data && null == s.data && i.attributes.join("-") === s.attributes.join("-") ? i.text += s.text : t.push(s) } return t }(i); return r.set(e, l), l })(l, t, i).forEach(e => { o.push({ ...e, start: e.start + s }) }) } a = !a, s = n } return o } function y(e, t, n, i, s) { let { content: a, type: o, originalMatch: l } = n; switch (r()(null != l, "Slate: originalMatch must be set " + JSON.stringify(n, void 0, 2)), o) { case "newline": case "br": case "paragraph": case "text": case "emoticon": return P(e, t, a || "", i, s); case "emoji": case "customEmoji": { let r = t.substring(i); if (!r.startsWith(l[0]) && (i = w(e, t, i, t.length), r = t.substring(i)), r.startsWith(l[0])) return b({ result: e, sourceText: t, text: l[0], originalStart: i, attributes: [o], data: n }); throw Error("Slate: Unable to find emoji: ".concat(l[0], " in ").concat(t, " at ").concat(i)) } case "mention": case "roleMention": case "channelMention": case "commandMention": case "staticRouteLink": case "soundboard": case "channel": { let { text: s, id: a } = n; if (null != s) return r()(s === l[0], "Slate: text mentions must exactly match the regex match"), b({ result: e, sourceText: t, text: s, originalStart: i, attributes: ["textMention"], data: { text: s } }); return b({ result: e, sourceText: t, text: l[0], originalStart: i, attributes: [o], data: { id: a } }) } case "timestamp": if (T.default.getCurrentConfig({ location: "c70cbb_1" }, { autoTrackExposure: !1 }).enabled) return b({ result: e, sourceText: t, text: l[0], originalStart: i, attributes: [o], data: n }); return P(e, t, l[0], i, s); case "em": case "autolink": case "strong": case "u": case "s": case "escape": case "inlineCode": case "codeBlockSyntax": case "codeBlockLang": case "spoiler": case "url": case "link": case "subtext": { i = G(t, i); let { before: n, after: r } = function(e, t, n, i) { if ("inlineCode" === t) return { before: i[1], after: i[1] }; if ("em" === t && "_" === e.substring(n, n + 1)) return { before: "_", after: "_" }; let r = S["link" === t ? "url" : t]; if ("inlineStyle" === r.type) return r; throw Error("Slate: rule must be an inlineStyle") }(t, o, i, l); return i = U(e, t, n, i, "syntaxBefore"), s.push(o), i = P(e, t, null != a ? a : "", i, s), s.pop(), i = U(e, t, r, i, "syntaxAfter"), G(t, i) } default: throw Error("Slate: Unknown rule type: ".concat(o)) } } function P(e, t, n, i, r) { return "string" == typeof n ? i = b({ result: e, sourceText: t, text: n, originalStart: i, attributes: r, data: null }) : (!(n instanceof Array) && (n = [n]), n.forEach(n => { i = y(e, t, n, i, r) })), G(t, i) } function U(e, t, n, i, s) { if (n.length > 0) { let a = t.indexOf(n, i), o = t.substring(i, a + n.length); r()(a >= 0, "Slate: Unable to find syntax characters"), e.push({ text: o, attributes: [s], start: i, data: null }), i = a + n.length } return i } function b(e) { let { result: t, sourceText: n, text: i, originalStart: r, attributes: s, data: a } = e, o = G(n, r); for (; "\n" === i.charAt(0) || " " === i.charAt(0);) i = i.substring(1); let l = n.indexOf(i, o); if (l !== o ? o = r = w(t, n, o, l) : "\\" === i && "\\" === n.charAt(l + 1) && (l++, r = ++o), l !== o) throw new u.default("MarkdownToSlate").error(JSON.stringify({ sourceText: n, searchText: i, searchStartsAt: n.substring(o), startPos: o })), Error("Slate: Unable to find content in source text!"); let d = o + i.length, _ = n.substring(r, d); return t.push({ text: _, attributes: s.slice(), start: r, data: a }), d } function G(e, t) { for (; "\n" === e.charAt(t) || " " === e.charAt(t);) t++; return t } function w(e, t, n, i) { for (; n < i;) if (h.has(t[n])) n = U(e, t, t[n], n, "syntaxBefore"), n = G(t, n); else break; return n } }, 472243: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("100527"), u = n("906732"), d = n("849522"), _ = n("639119"), c = n("594174"), E = n("466111"), I = n("74538"), T = n("694320"), f = n("981631"), S = n("474936"), h = n("689938"), A = n("251827"); function m(e) { var t, n, r, m; let { type: N, textValue: p, maxCharacterCount: O, showRemainingCharsAfterCount: C, className: R } = e, g = (0, a.useStateFromStores)([c.default], () => I.default.canUseIncreasedMessageLength(c.default.getCurrentUser())), L = (0, d.default)(), v = null != O ? O : L, D = null !== (m = null != C ? C : O) && void 0 !== m ? m : L / 10, M = p.length, y = null != N.upsellLongMessages && (null != M ? M : 0) > f.MAX_MESSAGE_LENGTH && g, P = null != N.upsellLongMessages && !g, U = (null === (n = (0, _.usePremiumTrialOffer)()) || void 0 === n ? void 0 : null === (t = n.subscription_trial) || void 0 === t ? void 0 : t.sku_id) === S.PremiumSubscriptionSKUs.TIER_2, b = v - M, G = b > D, w = b < 0 && U, k = 0 === b ? h.default.Messages.CHARACTER_COUNT_AT_LIMIT : b > 0 ? h.default.Messages.CHARACTER_COUNT_CLOSE_TO_LIMIT.format({ count: b }) : h.default.Messages.CHARACTER_COUNT_OVER_LIMIT, { analyticsLocations: B } = (0, u.default)(l.default.CHARACTER_COUNT); return y && b >= 0 || !G || P && !G ? (0, i.jsx)(u.AnalyticsLocationProvider, { value: B, children: (0, i.jsxs)("div", { className: s()(R, A.characterCount, { [A.error]: b < 0 }), children: [(0, i.jsxs)("div", { className: A.flairContainer, children: [y && b >= 0 ? (0, i.jsx)(o.Tooltip, { text: h.default.Messages.PREMIUM_MESSAGE_LENGTH_CHATBOX_FLAIR.format({ maxLength: v }), position: "top", children: e => (0, i.jsx)(E.default, { className: A.premiumFlair, ...e }) }) : null, G || w ? null : (0, i.jsx)(o.Tooltip, { text: k, position: "top", children: e => (0, i.jsx)("span", { "aria-hidden": !0, ...e, children: b }) })] }), (0, i.jsx)(o.HiddenVisually, { children: h.default.Messages.CHARACTER_COUNT_CLOSE_TO_LIMIT.format({ count: b }) }), P && !G ? (0, i.jsx)(T.default, { className: A.upsell, iconOnly: (null === (r = N.upsellLongMessages) || void 0 === r ? void 0 : r.iconOnly) || !1, remaining: b }) : null] }) }) : null } }, 362092: function(e, t, n) { "use strict"; n.r(t), n.d(t, { caseInsensitiveLangRegex: function() { return o }, findBackticks: function() { return u }, isKnownLang: function() { return l } }), n("47120"), n("411104"), n("653041"); var i = n("920478"); n("364964"); let r = i.default.listLanguages(), s = {}; for (let e of r) { e = e.toLowerCase(); let t = i.default.getLanguage(e); if (null == t) continue; let n = t.aliases; if (s[e] = e, null != n) for (let t of n) s[t.toLowerCase()] = e } let a = /^[a-z0-9_+\-.#]+$/, o = /^[a-z0-9_+\-.#]+$/i; for (let e in s) if (null == e.match(a)) throw Error("Language name does not match regex: ".concat(e)); function l(e) { return e.toLowerCase() in s } function u(e) { let t; let n = [], i = /\\|```/g; for (; null != (t = i.exec(e));) { if ("\\" === t[0]) { i.lastIndex += 1; continue } n.push(t.index) } return n } }, 42530: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FIRST_BLOCK_PATH: function() { return i }, FIRST_TEXT_PATH: function() { return r }, FIRST_TEXT_POINT: function() { return s }, SELECTABLE_VOIDS: function() { return o }, WHITESPACE_RE: function() { return a } }); let i = [0], r = [0, 0], s = { path: [0, 0], offset: 0 }, a = /(\t|\s)/, o = ["applicationCommandOption"] }, 789952: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hasDomParent: function() { return s }, normalizeDOMPoint: function() { return a } }), n("411104"), n("47120"); var i = n("519953"); let r = !1; { i.ReactEditor.toSlateRange = (e, t, n) => { let r, s, a, o, l, { exactMatch: u, suppressThrow: _ } = n; if (function(e) { let t = e && e.anchorNode && d(e.anchorNode); return null != t && e instanceof t.Selection }(t) ? (r = t.anchorNode, s = t.anchorOffset, a = t.focusNode, o = t.focusOffset, l = t.isCollapsed) : (r = t.startContainer, s = t.startOffset, a = t.endContainer, o = t.endOffset, l = t.collapsed), null == r || null == a || null == s || null == o) { if (_) return null; throw Error("Cannot resolve a Slate range from DOM range") } let c = i.ReactEditor.toSlatePoint(e, [r, s], { exactMatch: u, suppressThrow: _ }), E = l ? c : i.ReactEditor.toSlatePoint(e, [a, o], { exactMatch: u, suppressThrow: _ }); return null != c && null != E ? { anchor: c, focus: E } : null }; let e = i.ReactEditor.toSlatePoint; i.ReactEditor.toSlatePoint = (t, n, i) => { let { exactMatch: r, suppressThrow: s, direction: o = "forward" } = i; !r && (n = a(n, o)); try { return e(t, n, { exactMatch: !0, suppressThrow: s }) } catch (e) { if (s) return null; throw e } }, r = !0 } function s(e, t) { if (null == t) return !1; for (; null != e;) { if (e === t) return !0; e = e.parentNode } return !1 } function a(e, t) { let n, [i, r] = e; if (!l(i) || 0 === i.childNodes.length) return e; for ("forward" === t && r === i.childNodes.length && (t = "backward"), "backward" === t && r--, [i, n] = o(i, r, t), "forward" === t && n < r ? t = "backward" : "backward" === t && n > r && (t = "forward"), r = n; l(i) && i.childNodes.length > 0;) { let e = "backward" === t ? i.childNodes.length - 1 : 0; i = o(i, e, t)[0] } let s = "backward" === t && null != i.textContent ? i.textContent.length : 0; return [i, s] } function o(e, t, n) { let { childNodes: i } = e, r = i[t], s = t, a = !1, o = !1; for (; (function(e) { return u(e) && 8 === e.nodeType }(r) || l(r) && 0 === r.childNodes.length || l(r) && "false" === r.getAttribute("contenteditable")) && (!a || !o);) { ; if (s >= i.length) { a = !0, s = t - 1, n = "backward"; continue } if (s < 0) { o = !0, s = t + 1, n = "forward"; continue } r = i[s], t = s, s += "forward" === n ? 1 : -1 } return [r, t] } function l(e) { return u(e) && 1 === e.nodeType } function u(e) { let t = d(e); return null != t && e instanceof t.Node } function d(e) { return e && e.ownerDocument && e.ownerDocument.defaultView || null } }, 288897: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("757143"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("519953"), l = n("239091"), u = n("358085"), d = n("960048"), _ = n("752305"), c = n("53529"), E = n("789952"), I = n("436660"), T = n("887490"), f = n("77224"), S = n("135223"), h = n("704875"), A = n("653309"), m = n("764156"), N = n("946278"); function p(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class O extends r.PureComponent { componentDidMount() { this.props.editor.events.addListener("onChange", this.handleOnChange) } componentDidUpdate(e, t, n) { e.editor !== this.props.editor && (e.editor.events.removeListener("onChange", this.handleOnChange), this.props.editor.events.addListener("onChange", this.handleOnChange)) } componentWillUnmount() { this.props.editor.events.removeListener("onChange", this.handleOnChange) } componentDidCatch(e, t) { d.default.captureException(e, { extra: t }), this.setState({ initialValue: [...this.props.editor.children] }) } decorate(e) { var t; let { editor: n, guildId: i, decorateExtra: r } = this.props; return [...(0, S.default)(n, e, i), ...(0, f.default)(n, e), ...null !== (t = null == r ? void 0 : r(n, e)) && void 0 !== t ? t : []] } renderElement(e) { var t; let { guildId: n, channelId: r, renderExtraElement: s } = this.props, { attributes: a, children: o } = e; "rtl" === a.dir && (a.style = { ...a.style, textAlign: "right" }); let l = null !== (t = null == s ? void 0 : s(e)) && void 0 !== t ? t : (0, h.default)(e, n, r); return null != l ? l : (0, i.jsx)("div", { ...a, children: o }) } renderLeaf(e) { var t; let { editor: n, renderExtraLeaf: r } = this.props, { attributes: s, children: a } = e, o = null !== (t = null == r ? void 0 : r(e)) && void 0 !== t ? t : (0, A.default)(n, e); return null != o ? o : (0, i.jsx)("span", { ...s, children: a }) } handleOnChange() { var e, t; let { editor: n } = this.props, i = T.EditorUtils.isEditorEmpty(n) && null == n.composition; if (i !== this.state.showPlaceholder && this.setState({ showPlaceholder: i }), null === (e = (t = this.props).onChange) || void 0 === e || e.call(t, T.EditorUtils.richValue(n)), !1 === this.props.canFocus) { let e = o.ReactEditor.findDocumentOrShadowRoot(n).getSelection(); null != e && this.isSelectionPartiallyInside(e) && (null == e || e.removeAllRanges()) } } handleKeyDown(e) { var t, n; if (null != this.props.editor.composition) { e.preventDefault(), e.stopPropagation(); return } null === (t = (n = this.props).onKeyDown) || void 0 === t || t.call(n, e) } handleKeyUp(e) { var t, n; if (null != this.props.editor.composition) { e.preventDefault(), e.stopPropagation(); return } null === (t = (n = this.props).onKeyUp) || void 0 === t || t.call(n, e) } handleBeforeInput(e) { var t; let { editor: n } = this.props, i = o.ReactEditor.findDocumentOrShadowRoot(n).getSelection(), r = null != i && i.rangeCount > 0 ? i.getRangeAt(0) : null, s = null !== (t = e.getTargetRanges()[0]) && void 0 !== t ? t : null; if (null == n.composition) { if (("insertText" === e.inputType || "insertReplacementText" === e.inputType) && (null == s && (s = r), null != s)) { let t = T.EditorUtils.toSlateRange(n, s, { exactMatch: !1, suppressThrow: !0 }); null != t && null != e.data && (T.RangeUtils.isExpanded(t) ? c.HistoryUtils.withSingleEntry(n, () => { n.selection = t, n.deleteFragment(), n.insertText(e.data), e.preventDefault() }) : (n.insertText(e.data), e.preventDefault())) } if (e.inputType.startsWith("deleteContent") && null != r && !r.collapsed) { let t = T.EditorUtils.toSlateRange(n, r, { exactMatch: !0, suppressThrow: !0 }); null != t && T.RangeUtils.isExpanded(t) && (n.selection = t, n.deleteFragment(e.inputType.endsWith("Backward") ? "backward" : "forward"), e.preventDefault()) } } } handleCompositionStart() { var e, t; let { editor: n } = this.props, i = { insertedPrefix: !1, startedInsideInline: !1 }; this.state.showPlaceholder && this.setState({ showPlaceholder: !1 }); let r = null != n.selection && T.RangeUtils.isCollapsed(n.selection) ? T.EditorUtils.leaf(n, n.selection.anchor.path) : null; if (null == r) { n.composition = i; return } if (null != (null != n.selection && T.RangeUtils.isCollapsed(n.selection) ? T.EditorUtils.above(n, { at: r[1], match: e => T.EditorUtils.isInline(n, e), mode: "lowest" }) : null) && (i.startedInsideInline = !0), T.EditorUtils.isEditorEmpty(n)) { I.SlateTransforms.insertNodes(n, { text: "\uFEFF" }, { select: !0 }), i.insertedPrefix = !0, n.composition = i; return } let s = o.ReactEditor.findDocumentOrShadowRoot(this.props.editor).getSelection(), a = (null !== (e = null == s ? void 0 : s.rangeCount) && void 0 !== e ? e : 0) > 0 ? null == s ? void 0 : s.getRangeAt(0) : null; if (null == (null != a ? T.EditorUtils.toSlateRange(n, a, { exactMatch: !0, suppressThrow: !0 }) : null) && null != a) { let e = T.EditorUtils.toSlateRange(n, a, { exactMatch: !1, suppressThrow: !0 }); n.selection = null, null != e ? I.SlateTransforms.select(n, e) : I.SlateTransforms.select(n, null !== (t = n.selection) && void 0 !== t ? t : T.EditorUtils.end(n, [])) } n.composition = i } handleCompositionEnd(e) { let { editor: t } = this.props; if (null == t.composition) return; let { insertedPrefix: n } = t.composition; if (n && null != t.selection && T.RangeUtils.isCollapsed(t.selection)) { let e = t.selection.anchor.path, n = T.NodeUtils.leaf(t, e); T.EditorUtils.withoutNormalizing(t, () => { let e = n.text.replace(/^\uFEFF/, ""); I.SlateTransforms.delete(t, { unit: "offset", distance: n.text.length, reverse: !0 }), T.EditorUtils.insertText(t, e) }) } t.composition = null } handleFocusCapture(e) { let { onFocus: t } = this.props; null == t || t(e) } handleBlurCapture(e) { let { editor: t, onBlur: n } = this.props, i = e.relatedTarget, r = o.ReactEditor.findDocumentOrShadowRoot(this.props.editor), s = r.getElementById("textarea-context"), a = r.getElementById("slate-toolbar"); if (null != i && !(0, E.hasDomParent)(i, s) && !(0, E.hasDomParent)(i, a)) { let e = o.ReactEditor.findDocumentOrShadowRoot(t).getSelection(); null != e && this.isSelectionEscaping(e) && e.removeAllRanges() } null == n || n(e) } isSelectionPartiallyInside(e) { let t = this.containerRef.current; if (null != e && null != t) for (let n = e.rangeCount - 1; n >= 0; n--) { let i = e.getRangeAt(n); if ((0, E.hasDomParent)(i.startContainer, t) || !i.collapsed && (0, E.hasDomParent)(i.endContainer, t)) return !0 } return !1 } isSelectionEscaping(e) { let t = this.containerRef.current, n = !1, i = !1; if (null != e && null != t) for (let r = e.rangeCount - 1; r >= 0; r--) { let s = e.getRangeAt(r); if ((0, E.hasDomParent)(s.startContainer, t)) { if (i) return !0; n = !0 } else { if (n) return !0; i = !0 } if (!s.collapsed) { if ((0, E.hasDomParent)(s.startContainer, t)) { if (i) return !0; n = !0 } else { if (n) return !0; i = !0 } } } return !1 } handleContextMenu(e) { let { editor: t } = this.props, r = e.pageY, s = window.innerHeight; u.isPlatformEmbedded ? (0, l.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("41984").then(n.bind(n, "343602")); return n => (0, i.jsx)(e, { ...n, editor: t, text: T.EditorUtils.getSelectedText(t, !0) }) }, { align: null != r && null != s && r < s / 2 ? "top" : "bottom", enableSpellCheck: !0 }) : blur() } handlePasteCapture(e) { let { editor: t, onPaste: n, readOnly: i } = this.props; null == n || n(e), !(e.isDefaultPrevented() || e.isPropagationStopped()) && !i && (t.insertData(e.clipboardData), e.preventDefault(), e.stopPropagation()) } render() { let { editor: e, className: t, containerClassName: n, canFocus: r, autoFocus: s, placeholder: l, channelId: u, guildId: d, onChange: _, onFocus: c, onBlur: E, onKeyDown: I, onKeyUp: T, decorateExtra: f, renderExtraElement: S, renderExtraLeaf: h, ...A } = this.props; return (0, i.jsxs)("div", { ref: this.containerRef, className: n, children: [this.state.showPlaceholder ? (0, i.jsx)("div", { className: a()(m.placeholder, t), "aria-hidden": !0, children: l }) : null, (0, i.jsx)(o.Slate, { editor: e, value: [...this.state.initialValue], children: (0, i.jsx)(o.Editable, { ...A, className: a()(N.markup, m.editor, t), decorate: this.decorate, renderElement: this.renderElement, renderLeaf: this.renderLeaf, onFocusCapture: this.handleFocusCapture, onBlurCapture: this.handleBlurCapture, onContextMenu: this.handleContextMenu, onKeyDown: this.handleKeyDown, onKeyUp: this.handleKeyUp, onDOMBeforeInput: this.handleBeforeInput, onCompositionStart: this.handleCompositionStart, onCompositionEnd: this.handleCompositionEnd, onPasteCapture: this.handlePasteCapture, autoFocus: s && !1 !== r, autoCorrect: "off", "data-can-focus": !1 !== r, "aria-label": l, "aria-multiline": !0 }) })] }) } constructor(e) { super(e), p(this, "containerRef", r.createRef()), p(this, "state", void 0), this.decorate = this.decorate.bind(this), this.renderElement = this.renderElement.bind(this), this.renderLeaf = this.renderLeaf.bind(this), this.handleOnChange = this.handleOnChange.bind(this), this.handleKeyDown = this.handleKeyDown.bind(this), this.handleKeyUp = this.handleKeyUp.bind(this), this.handleBeforeInput = this.handleBeforeInput.bind(this), this.handleCompositionStart = this.handleCompositionStart.bind(this), this.handleCompositionEnd = this.handleCompositionEnd.bind(this), this.handleFocusCapture = this.handleFocusCapture.bind(this), this.handleBlurCapture = this.handleBlurCapture.bind(this), this.handleContextMenu = this.handleContextMenu.bind(this), this.handlePasteCapture = this.handlePasteCapture.bind(this), T.EditorUtils.isEditorEmpty(e.editor) ? this.state = { initialValue: (0, _.createEmptyState)().richValue, showPlaceholder: !0 } : this.state = { initialValue: T.EditorUtils.richValue(e.editor), showPlaceholder: !1 } } } t.default = O }, 341702: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPointFromPosition: function() { return r } }); var i = n("887490"); function r(e, t, n, r) { var s, a; let o = 0; for (let s = 0; s < n.length; s++) { let a = n[s]; if (null == a) continue; let l = o + a.length; if (r <= l) { let n = i.PathUtils.child(t, s), a = i.EditorUtils.node(e, n)[0]; if (i.TextUtils.isText(a)) return { path: n, offset: Math.min(Math.max(r - o, 0), a.text.length) } } o = l } let l = n.length - 1; return { path: i.PathUtils.child(t, l), offset: null !== (a = null === (s = n[l]) || void 0 === s ? void 0 : s.length) && void 0 !== a ? a : 0 } } }, 925994: function(e, t, n) { "use strict"; n.r(t), n.d(t, { serializeDescendant: function() { return S }, toTextValue: function() { return T } }), n("47120"), n("653041"), n("757143"); var i = n("512722"), r = n.n(i), s = n("933557"), a = n("660199"), o = n("763296"), l = n("592125"), u = n("430824"), d = n("699516"), _ = n("914010"), c = n("594174"), E = n("51144"), I = n("887490"); function T(e, t) { let { mode: n, ignoreTrailingEmptyNodes: i, preventEmojiSurrogates: r } = null != t ? t : {}, [s, a] = (null == t ? void 0 : t.range) != null ? I.RangeUtils.edges(t.range) : [void 0, void 0]; return f(e, { mode: n, start: s, end: a, ignoreTrailingEmptyNodes: i, preventEmojiSurrogates: r }) } function f(e, t) { var n, i; let { mode: r, start: s, end: a, separator: o, ignoreEmptyNodes: l, ignoreTrailingEmptyNodes: u, preventEmojiSurrogates: d } = null != t ? t : {}, _ = e.length > 0 && !I.TextUtils.isText(e[0]); null == o && (o = _ ? "\n" : ""); let c = null !== (n = null == s ? void 0 : s.path[0]) && void 0 !== n ? n : 0, E = null !== (i = null == a ? void 0 : a.path[0]) && void 0 !== i ? i : e.length - 1; if (u) for (let t = E; t >= c; t--) { let n = e[t]; if (I.TextUtils.isText(n)) { if (n.text.length > 0) { E = t; break } } else if (!I.ElementUtils.isEmpty(n)) { E = t; break } if (t === c) return "" } let T = c > 0 && I.NodeUtils.isType(e[c - 1], "blockQuote"), f = I.NodeUtils.isType(e[c], "blockQuote"), h = I.NodeUtils.isType(e[E], "blockQuote"), A = []; for (let t = c; t <= E; t++) { let n = e[t]; if (l && I.TextUtils.isText(n) && 0 === n.text.length) continue; let i = null != s && t === c ? { path: s.path.slice(1), offset: s.offset } : void 0, o = null != a && t === E ? { path: a.path.slice(1), offset: a.offset } : void 0, u = S(n, { mode: r, start: i, end: o, allowBlockQuotePrefix: null == s || null == a || !T && (!f || h), preventEmojiSurrogates: d }); (!l || u.length > 0) && A.push(u) } return A.join(o) } function S(e, t) { let { mode: n, start: i, allowBlockQuotePrefix: T = !1, preventEmojiSurrogates: S = !1 } = null != t ? t : {}; if (I.TextUtils.isText(e)) return function(e, t) { var n, i; let { start: s, end: a } = null != t ? t : {}; return r()(null == s || 0 === s.path.length, "Invalid start provided to serializeText"), r()(null == a || 0 === a.path.length, "Invalid end provided to serializeText"), e.substring(null !== (n = null == s ? void 0 : s.offset) && void 0 !== n ? n : 0, null !== (i = null == a ? void 0 : a.offset) && void 0 !== i ? i : e.length) }(e.text, t); switch (e.type) { case "line": case "testInline": return f(e.children, t); case "testInlineVoid": return ""; case "blockQuote": { let n = f(e.children, t), r = null != i && 1 === i.path.length && 0 === i.path[0] && 0 === i.offset; if (T && (null == i || r)) return "> ".concat(n); return n } case "emoji": { let t = e.emoji; if (!S && null != t.surrogate) return t.surrogate; return t.name } case "customEmoji": { let t = e.emoji; if ("raw" === n) { let e = t.animated ? "a" : "", n = t.name.replace(/:/g, "").split("~")[0]; return "<".concat(e, ":").concat(n, ":").concat(t.emojiId, ">") } return t.name } case "textMention": return e.name; case "channelMention": { let t = "<#".concat(e.channelId, ">"); if ("raw" === n) return t; let i = l.default.getChannel(e.channelId); if (null == i) return t; return (0, s.computeChannelName)(i, c.default, d.default, !0, !0) } case "soundboard": { let t = ""); if ("raw" === n) return t; let i = o.default.getSoundById(e.soundId); if (null == i) return t; return i.name } case "staticRouteLink": { let t = ""); if ("raw" === n) return t; let i = l.default.getChannel(e.channelId); if (null == i) return t; return (0, s.computeChannelName)(i, c.default, d.default, !0, !0) } case "roleMention": { let t = "<@&".concat(e.roleId, ">"); if ("raw" === n) return t; let i = _.default.getGuildId(), r = null != i ? u.default.getRole(i, e.roleId) : void 0; if (null == r) return t; return "@".concat(r.name) } case "userMention": { let t = "<@".concat(e.userId, ">"); if ("raw" === n) return t; let i = c.default.getUser(e.userId); if (null == i) return t; return "@".concat(E.default.getUserTag(i, { decoration: "never" })) } case "commandMention": return ""); case "timestamp": return (0, a.unparseTimestamp)(e.parsed.timestamp, e.parsed.format); case "applicationCommand": return f(e.children, { ...t, separator: " ", ignoreEmptyNodes: !0 }); case "applicationCommandOption": { let n = f(e.children, t); if (null == i) return "".concat(e.optionDisplayName, ":").concat(n); return n } } } }, 50659: function(e, t, n) { "use strict"; n.r(t), n.d(t, { parseSelectedSyntax: function() { return d }, toggleBlockStyle: function() { return f }, toggleMarkdownStyle: function() { return T } }), n("47120"); var i = n("512722"), r = n.n(i), s = n("53529"), a = n("436660"), o = n("887490"); let l = new Set(["*", "_", "~", "`", "|"]), u = { bold: "**", italics: "*", underline: "__", strikethrough: "~~", inlineCode: "`", spoiler: "||" }; function d(e, t, n) { if (null == e.selection) return { before: {}, after: {} }; let i = _(e, t), r = _(e, n); for (let e in i) !(e in r) && delete i[e]; for (let e in r) !(e in i) && delete r[e]; return { before: i, after: r } } function _(e, t) { let [n] = o.EditorUtils.node(e, t.path); if (!o.TextUtils.isText(n)) return {}; let i = n.text, r = t.offset; for (let e = r - 1; e >= 0 && l.has(i.charAt(e)); e--) r--; let s = t.offset; for (let e = s; e < i.length && l.has(i.charAt(e)); e++) s++; let a = i.substring(r, s), u = {}; return E({ result: u, text: a, startIndex: r, syntax: "***", type1: "italics", type2: "bold" }), E({ result: u, text: a, startIndex: r, syntax: "___", type1: "italics", type2: "underline" }), c(u, a, r, "**", "bold"), c(u, a, r, "*", "italics"), c(u, a, r, "_", "italics"), c(u, a, r, "__", "underline"), c(u, a, r, "`", "inlineCode"), c(u, a, r, "~~", "strikethrough"), c(u, a, r, "||", "spoiler"), u } function c(e, t, n, i, r) { let s = I(t, i); s >= 0 && (e[r] = { chars: i, location: n + s }) } function E(e) { let { result: t, text: n, startIndex: i, syntax: r, type1: s, type2: a } = e, o = I(n, r); o >= 0 && (t[s] = { chars: r.substring(0, 1), location: o + i }, t[a] = { chars: r.substring(1), location: o + i + 1 }) } function I(e, t) { let n = e.indexOf(t); if (n >= 0) { let i = t.charAt(0); if (n > 0 && e.charAt(n - 1) === i || n < e.length - 1 && e.charAt(n + t.length) === i) return -1 } return n } function T(e, t) { s.HistoryUtils.withSingleEntry(e, () => { o.EditorUtils.withoutNormalizing(e, () => { r()(null != e.selection, "Editor has no selection"); let [n, i] = o.RangeUtils.edges(e.selection), s = d(e, n, i), l = s.before[t], _ = s.after[t], c = o.EditorUtils.node(e, n.path), E = o.EditorUtils.node(e, i.path); if (null == c || null == E || !o.TextUtils.isText(c[0]) || !o.TextUtils.isText(E[0])) return; let I = o.PathUtils.equals(c[1], E[1]); if (null != l && null != _) { let t = { path: n.path, offset: l.location }, r = { path: i.path, offset: _.location }; a.SlateTransforms.delete(e, { at: r, distance: _.chars.length }), a.SlateTransforms.delete(e, { at: t, distance: l.chars.length }); let s = n.offset, u = i.offset; !o.PointUtils.isBefore(n, t) && (s -= l.chars.length), I && !o.PointUtils.isBefore(i, t) && (u -= l.chars.length), o.PointUtils.isAfter(i, r) && (u -= _.chars.length), a.SlateTransforms.select(e, { anchor: { path: n.path, offset: Math.max(0, s) }, focus: { path: i.path, offset: Math.max(0, u) } }) } else { let r = u[t]; a.SlateTransforms.insertText(e, r, { at: i }), a.SlateTransforms.insertText(e, r, { at: n }); let s = c[0].text.length + r.length, o = E[0].text.length + (I ? 2 * r.length : r.length); a.SlateTransforms.select(e, { anchor: { path: n.path, offset: Math.min(s, n.offset + r.length) }, focus: { path: i.path, offset: Math.min(o, i.offset + (I ? r.length : 0)) } }) } }) }), o.EditorUtils.focus(e) } function f(e, t) { let n = e.selection; if (null == n) return; let i = !0; for (let [r, s] of o.EditorUtils.blocks(e))("line" === r.type || r.type === t) && o.RangeUtils.includes(n, s) && (i = i && r.type === t); o.EditorUtils.withoutNormalizing(e, () => { for (let [r, s] of o.EditorUtils.blocks(e)) o.RangeUtils.includes(n, s) && (i || "line" !== r.type ? i && r.type === t && a.SlateTransforms.setNodes(e, { type: "line" }, { at: s }) : a.SlateTransforms.setNodes(e, { type: t }, { at: s })) }), o.EditorUtils.focus(e) } }, 872635: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ToolbarButtons: function() { return O } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("519953"), l = n("40851"), u = n("489465"), d = n("15322"), _ = n("672108"), c = n("979232"), E = n("149111"), I = n("61753"), T = n("153850"), f = n("5967"), S = n("53529"), h = n("50659"), A = n("436660"), m = n("887490"), N = n("447525"), p = n("364610"); function O(e) { var t; let { editorRef: n, options: r, iconClassName: s, dividerClassName: o } = e, l = null === (t = n.current) || void 0 === t ? void 0 : t.getSlateEditor(); return null == l ? null : (0, i.jsxs)("div", { className: p.buttons, children: [(0, i.jsx)(C, { slateEditor: l, markdownSyntax: "bold", children: (0, i.jsx)(d.default, { className: a()(p.icon, s) }) }), (0, i.jsx)(C, { slateEditor: l, markdownSyntax: "italics", children: (0, i.jsx)(c.default, { className: a()(p.icon, s) }) }), (0, i.jsx)(C, { slateEditor: l, markdownSyntax: "strikethrough", children: (0, i.jsx)(I.default, { className: a()(p.icon, s) }) }), (0, i.jsx)("div", { className: a()(p.divider, o) }), !(null == r ? void 0 : r.disableBlockQuotes) && (0, i.jsx)(R, { slateEditor: l, blockType: "blockQuote", children: (0, i.jsx)(u.default, { className: a()(p.icon, s) }) }), (0, i.jsx)(C, { slateEditor: l, markdownSyntax: "inlineCode", children: (0, i.jsx)(_.default, { className: a()(p.icon, s) }) }), (0, i.jsx)(C, { slateEditor: l, markdownSyntax: "spoiler", children: (0, i.jsx)(E.default, { className: a()(p.icon, s) }) })] }) } function C(e) { let { slateEditor: t, markdownSyntax: n, children: r } = e, s = !1; if ((null == t ? void 0 : t.selection) != null) { let [e, i] = m.RangeUtils.edges(t.selection); s = null != (0, h.parseSelectedSyntax)(t, e, i).before[n] } return (0, i.jsx)("button", { "aria-pressed": s, className: p.button, onClick: () => { null != t && S.HistoryUtils.withSingleEntry(t, () => (0, h.toggleMarkdownStyle)(t, n)) }, children: r }) } function R(e) { let { blockType: t, slateEditor: n, children: r } = e, s = null != n ? m.EditorUtils.getCurrentBlock(n) : null, a = null != s && m.NodeUtils.isType(s[0], t); return (0, i.jsx)("button", { "aria-pressed": a, className: p.button, onClick: () => { null != n && S.HistoryUtils.withSingleEntry(n, () => (0, h.toggleBlockStyle)(n, t)) }, children: r }) } function g(e) { var t; let { slateEditor: n } = e, [i, s] = null !== (t = m.EditorUtils.getSelectedVoid(n)) && void 0 !== t ? t : [null, null], a = r.useCallback(e => { if ((null == n ? void 0 : n.selection) == null || null == s) return; let t = n.selection; S.HistoryUtils.withSingleEntry(n, () => { A.SlateTransforms.voidToText(n, e, s), A.SlateTransforms.select(n, t) }) }, [n, s]); return null == i ? null : (0, N.default)(i, { replace: a }) } t.default = r.forwardRef(function(e, t) { var n; let { editorRef: s, containerRef: a, options: u } = e, d = r.useRef(null), [_, c] = r.useState(!1), E = r.useRef(), I = r.useContext(l.default), S = r.useCallback(() => { c(!1), clearTimeout(E.current) }, []), h = r.useCallback(e => { var t; let n = I.renderWindow; !(e.target instanceof n.Node && (null === (t = d.current) || void 0 === t ? void 0 : t.contains(e.target))) && S() }, [I, S]), A = r.useCallback(e => { let t = I.renderWindow; if (e.target instanceof t.Element) { if (0 !== e.button) S(); else { var n; let i = e.target instanceof t.Node && (null === (n = d.current) || void 0 === n ? void 0 : n.contains(e.target)); clearTimeout(E.current), E.current = setTimeout(() => { var t; let n = null === (t = (0, f.eventOwnerDocument)(e)) || void 0 === t ? void 0 : t.activeElement, r = a.current; c(i || null != n && null != r && r.contains(n)) }, 100) } } else S() }, [I, a, S]); r.useImperativeHandle(t, () => ({ hide: S }), [S]), r.useEffect(() => { let e = I.renderWindow; return e.document.addEventListener("keydown", S), e.document.addEventListener("mousedown", h), e.document.addEventListener("mouseup", A), e.addEventListener("focus", S), e.addEventListener("blur", S), () => { e.document.removeEventListener("keydown", S), e.document.removeEventListener("mousedown", h), e.document.removeEventListener("mouseup", A), e.removeEventListener("focus", S), e.removeEventListener("blur", S), clearTimeout(E.current) } }, [I, S, h, A]); let { x: N, y: C } = r.useMemo(() => { var e, t, n, i; let r = null === (e = s.current) || void 0 === e ? void 0 : e.getSlateEditor(); if ((null == r ? void 0 : r.selection) == null || m.RangeUtils.isCollapsed(r.selection) || !_) return { x: null, y: null }; let l = o.ReactEditor.findDocumentOrShadowRoot(r), u = l.getSelection(); if (null == u || null == u.focusNode || null == u.anchorNode || u.isCollapsed) return { x: null, y: null }; let d = l.createRange(); d.setStart(u.focusNode, u.focusOffset), d.setEnd(u.focusNode, u.focusOffset); let c = d.getBoundingClientRect(), E = l.createRange(); E.setStart(u.anchorNode, u.anchorOffset), E.setEnd(u.anchorNode, u.anchorOffset); let I = E.getBoundingClientRect(), T = l.createRange(); T.setStart(u.anchorNode, u.anchorOffset), T.setEnd(u.focusNode, u.focusOffset); let f = T.getBoundingClientRect(), S = c.x === I.x, h = S ? f.x : Math.min(c.x, I.x), A = S ? f.x + f.width : Math.max(c.x, I.x), N = null !== (i = null === (n = a.current) || void 0 === n ? void 0 : null === (t = n.getBoundingClientRect()) || void 0 === t ? void 0 : t.y) && void 0 !== i ? i : 0; return { x: h + (A - h) / 2, y: Math.max(N, Math.min(I.y, c.y)) } }, [a, _, s]), [R, L] = r.useState(0), [v, D] = r.useState(0); if (r.useLayoutEffect(() => { if (null == N || null == C || null == d.current) return; let e = d.current.getBoundingClientRect(); D(e.width / 2), L(e.height + 12) }, [N, C]), null == N || null == C) return null; let M = null === (n = s.current) || void 0 === n ? void 0 : n.getSlateEditor(); return null == M ? null : (0, i.jsx)(T.default, { children: (0, i.jsxs)("div", { id: "slate-toolbar", ref: d, className: p.toolbar, style: { top: C - R, left: N - v }, onMouseDown: e => { e.stopPropagation() }, onMouseUp: e => { e.stopPropagation() }, children: [(0, i.jsx)(g, { slateEditor: M }), (0, i.jsx)(O, { editorRef: s, options: u })] }) }) }) }, 436660: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SlateTransforms: function() { return o } }), n("571269"), n("298267"), n("47120"); var i = n("327432"), r = n("91313"), s = n("887490"), a = n("42530"); let o = { ...i.Transforms, resetSelectionToStart(e) { i.Transforms.select(e, s.EditorUtils.start(e, [])) }, resetSelectionToEnd(e) { i.Transforms.select(e, s.EditorUtils.end(e, [])) }, delete(e, t) { let { at: n, distance: r, unit: a, reverse: o = !1, select: l = !1, bounds: u, voids: d } = t; if (null == n) { if (null == e.selection) return; n = e.selection } let [_, c] = s.RangeUtils.isRange(n) ? s.RangeUtils.edges(n) : s.EditorUtils.edges(e, n); if (null != r || null != a) { var E, I, T; if (o) { let t = null !== (E = s.EditorUtils.before(e, _, { distance: r, unit: a })) && void 0 !== E ? E : s.EditorUtils.start(e, []); if ("character" === a && (null != r ? r : 1) === 1 && s.PathUtils.equals(_.path, c.path)) { let n = s.EditorUtils.leaf(e, _.path), i = null != n ? n[0].text : ""; i.length > 0 && null != i[i.length - 1].match(/[\u0E00-\u0E7F]/) && (t = null !== (I = s.EditorUtils.before(e, _, { distance: r, unit: "offset" })) && void 0 !== I ? I : s.EditorUtils.start(e, [])) } _ = t } else c = null !== (T = s.EditorUtils.after(e, c, { distance: r, unit: a })) && void 0 !== T ? T : s.EditorUtils.end(e, []) } if (null != u) { let [e, t] = s.RangeUtils.edges(u); s.PointUtils.isBefore(_, e) && (_ = e), s.PointUtils.isAfter(c, t) && (c = t) }!s.PointUtils.equals(_, c) && (i.Transforms.delete(e, { at: { anchor: _, focus: c }, hanging: !0, voids: d }), l && s.EditorUtils.hasPath(e, _.path) && i.Transforms.select(e, _)) }, textToText(e, t, n) { var r; let a = s.EditorUtils.getSelectionOverlap(e, n), [o, l] = s.RangeUtils.edges(n), d = null !== (r = s.EditorUtils.before(e, o)) && void 0 !== r ? r : s.EditorUtils.start(e, []), _ = s.EditorUtils.after(e, l); s.RangeUtils.isExpanded(n) && i.Transforms.delete(e, { at: n, voids: !0 }), i.Transforms.insertText(e, t, { at: d }), d = null != d ? d : s.EditorUtils.start(e, []), _ = null != _ ? _ : s.EditorUtils.end(e, []), u(e, a, d, _, _) }, textToVoid(e, t, n) { let r = s.EditorUtils.getSelectionOverlap(e, n), a = s.RangeUtils.start(n), o = s.PathUtils.next(a.path), l = { path: s.PathUtils.next(o), offset: 0 }; i.Transforms.delete(e, { at: n, voids: !0 }), 0 === a.offset && i.Transforms.insertNodes(e, [{ text: "" }], { at: a.path }), i.Transforms.insertNodes(e, [t], { at: a }), (!s.EditorUtils.hasPath(e, l.path) || !s.TextUtils.isText(s.EditorUtils.node(e, l.path)[0])) && i.Transforms.insertNodes(e, [{ text: "" }], { at: l.path }), u(e, r, a, l, l) }, textToInline(e, t, n) { let r = s.EditorUtils.getSelectionOverlap(e, n), a = t.children[t.children.length - 1], o = s.RangeUtils.start(n), l = s.PathUtils.next(o.path), d = { path: s.PathUtils.child(l, t.children.length - 1), offset: s.TextUtils.isText(a) ? a.text.length : 0 }; i.Transforms.delete(e, { at: n, voids: !0 }), 0 === o.offset && i.Transforms.insertNodes(e, [{ text: "" }], { at: o.path }), i.Transforms.insertNodes(e, [t], { at: o }), u(e, r, o, d, d) }, voidToText(e, t, n) { var r; let a = s.EditorUtils.getSelectionOverlap(e, n), o = null !== (r = s.EditorUtils.before(e, n)) && void 0 !== r ? r : s.EditorUtils.start(e, []), l = { path: o.path, offset: o.offset + t.length }; i.Transforms.delete(e, { at: n, voids: !0 }), i.Transforms.insertText(e, t, { at: o }), u(e, a, o, o, l) }, removeInline(e, t) { var n; let r = s.EditorUtils.getSelectionOverlap(e, t), a = null !== (n = s.EditorUtils.before(e, t)) && void 0 !== n ? n : s.EditorUtils.start(e, []); i.Transforms.delete(e, { at: t, voids: !0 }), u(e, r, a, a, a) }, removeInlineChildren(e, t) { let [n, r] = t, a = s.EditorUtils.getSelectionOverlap(e, r), o = { path: s.PathUtils.child(r, 0), offset: 0 }; s.EditorUtils.withoutNormalizing(e, () => { for (let t = n.children.length - 1; t >= 0; t--) i.Transforms.removeNodes(e, { at: s.PathUtils.child(r, t), voids: !0 }) }), u(e, a, null, o, null) }, selectCommandOption(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], a = r.getCommandBlock(e); if (null != a) for (let r = 0; r < a[0].children.length; r++) { let o = a[0].children[r]; if (s.NodeUtils.isType(o, "applicationCommandOption") && o.optionName === t) { n ? i.Transforms.select(e, [0, r]) : i.Transforms.select(e, s.EditorUtils.end(e, [0, r])); return } } }, selectPreviousCommandOption(e) { if (null == r.getCommandBlock(e)) return; let t = null != e.selection ? e.selection.focus.path : s.EditorUtils.end(e, a.FIRST_BLOCK_PATH).path, n = r.getCurrentCommandOption(e), o = s.EditorUtils.previous(e, { at: t, match: e => e !== (null == n ? void 0 : n[0]) && s.NodeUtils.isType(e, "applicationCommandOption") }); null != o ? i.Transforms.select(e, o[1]) : s.PathUtils.isAfter(t, a.FIRST_TEXT_PATH) && i.Transforms.select(e, s.EditorUtils.end(e, a.FIRST_TEXT_PATH)) }, selectNextCommandOption(e) { if (null == r.getCommandBlock(e)) return; let t = null != e.selection ? e.selection.focus.path : s.EditorUtils.start(e, a.FIRST_BLOCK_PATH).path, n = r.getCurrentCommandOption(e), l = s.EditorUtils.next(e, { at: t, match: e => e !== (null == n ? void 0 : n[0]) && s.NodeUtils.isType(e, "applicationCommandOption") }); null != l ? i.Transforms.select(e, l[1]) : o.resetSelectionToEnd(e) }, insertCommandOption(e, t) { o.resetSelectionToEnd(e), o.insertNodes(e, [{ type: "applicationCommandOption", optionName: t.name, optionDisplayName: t.displayName, optionType: t.type, children: [{ text: "" }] }]) }, keyboardMove(e, t) { let { reverse: n = !1, unit: r = "character", edge: a } = null != t ? t : {}, o = e.selection; if (null == o) return; if (void 0 === a && s.RangeUtils.isExpanded(o)) { i.Transforms.collapse(e, { edge: n ? "start" : "end" }); return } let l = s.EditorUtils.leaf(e, o.anchor.path); if (null == l) return; let u = n ? s.EditorUtils.before : s.EditorUtils.after, d = o.focus; for (; null != d;) { let t = r; n || o.focus.offset !== l[0].text.length ? n && 0 === o.focus.offset && (t = "offset") : t = "offset"; let i = u(e, d, { unit: t }); if (null == i || s.PointUtils.equals(d, i)) { d = void 0; break } if (d = i, null == s.EditorUtils.getParentVoid(e, d)) break } null != d && ("focus" === a ? i.Transforms.setSelection(e, { focus: d }) : i.Transforms.setSelection(e, { focus: d, anchor: d })) } }; function l(e, t, n, i, r) { switch (t) { case "start": return n; case "inside": return i; case "end": return r } return e } function u(e, t, n, i, r) { var s, a; if (null == t.anchor && null == t.focus) return; let u = l(null === (s = e.selection) || void 0 === s ? void 0 : s.anchor, t.anchor, n, i, r), d = l(null === (a = e.selection) || void 0 === a ? void 0 : a.focus, t.focus, n, i, r); if (null != u && null != d) o.select(e, { anchor: u, focus: d }) } }, 887490: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DOMUtils: function() { return N }, EditorUtils: function() { return d }, ElementUtils: function() { return c }, NodeUtils: function() { return _ }, PathUtils: function() { return I }, PointUtils: function() { return T }, RangeUtils: function() { return f }, SelectionUtils: function() { return S }, TextUtils: function() { return E } }), n("47120"); var i = n("512722"), r = n.n(i), s = n("327432"), a = n("519953"), o = n("339227"), l = n("42530"); n("789952"); let u = !1; { let e = a.ReactEditor.findDocumentOrShadowRoot; a.ReactEditor.findDocumentOrShadowRoot = t => { var n, i; return null !== (i = null === (n = t.windowContext) || void 0 === n ? void 0 : n.renderWindow.document) && void 0 !== i ? i : e(t) }, u = !0 } let d = { ...s.Editor, ...a.ReactEditor, richValue: e => e.children, blocks: e => d.richValue(e).map((e, t) => [e, [t]]), isBlock: (e, t) => c.isElement(t) && s.Editor.isBlock(e, t), isInline: (e, t) => c.isElement(t) && s.Editor.isInline(e, t), isVoid: (e, t) => c.isElement(t) && s.Editor.isVoid(e, t), isEditorEmpty(e) { let t = d.richValue(e); return !(t.length > 1) && (0 === t.length || "line" === t[0].type && c.isEmpty(t[0])) }, getFirstText(e) { let t = d.node(e, l.FIRST_TEXT_PATH); return E.isText(t[0]) ? t[0] : null }, getCurrentBlock(e) { return null == e.selection ? null : this.getParentBlock(e, e.selection) }, getCurrentElement(e) { return null == e.selection ? null : this.getParentElement(e, e.selection) }, getCurrentInline(e) { return null == e.selection ? null : this.getParentInline(e, e.selection) }, getCurrentVoid(e) { return null == e.selection ? null : this.getParentVoid(e, e.selection) }, getCurrentText(e) { let t = null != e.selection ? f.toPoint(e.selection) : null; return null == t ? null : d.node(e, t.path) }, getParentBlock(e, t) { var n; return null !== (n = d.above(e, { at: t, match: t => c.isElement(t) && d.isBlock(e, t), mode: "lowest" })) && void 0 !== n ? n : null }, getParentElement(e, t) { var n; return null !== (n = d.above(e, { at: t, match: e => c.isElement(e), mode: "lowest" })) && void 0 !== n ? n : null }, getParentInline(e, t) { var n; return null !== (n = d.above(e, { at: t, match: t => d.isInline(e, t), mode: "lowest" })) && void 0 !== n ? n : null }, getParentVoid(e, t) { var n; return null !== (n = d.above(e, { at: t, match: t => d.isVoid(e, t), mode: "lowest" })) && void 0 !== n ? n : null }, getSelectedVoid(e) { let t; if (null == e.selection) return null; if (f.isExpanded(e.selection)) { let [n, i] = f.edges(e.selection), r = d.after(e, n, { unit: "offset" }), s = d.before(e, i, { unit: "offset" }); if (null == r || null == s || !T.equals(r, s)) return null; t = r } else t = e.selection.anchor; return null == t ? null : d.getParentVoid(e, t) }, getSelectedText(e, t) { let n = null; if (t) { let t = a.ReactEditor.findDocumentOrShadowRoot(e).getSelection(); if (null != t && t.rangeCount > 0) { let i = t.getRangeAt(0); null != i && (n = a.ReactEditor.toSlateRange(e, i, { exactMatch: !0, suppressThrow: !0 })) } } else n = e.selection; return null == n ? "" : this.getTextFromRange(e, n) }, getTextFromRange(e, t) { let [n, i] = f.edges(t), r = d.nodes(e, { at: t, mode: "lowest", match: e => E.isText(e) }), s = ""; for (let [e, t] of r) { let r = I.equals(t, n.path) ? n.offset : 0, a = I.equals(t, i.path) ? i.offset : 0; s += e.text.substring(r, a) } return s }, withoutNormalizing(e, t) { let n = d.isNormalizing(e); d.setNormalizing(e, !1); try { t() } finally { d.setNormalizing(e, n) }!1 !== n && d.normalize(e) }, areStylesDisabled(e) { var t; if (!e.previewMarkdown) return !0; let n = d.richValue(e), i = n[0], r = (null == i ? void 0 : i.type) === "line" ? i.children[0] : null; if (null == r || !E.isText(r)) return !1; let s = e.chatInputType, a = r.text; return 1 === n.length && 1 === i.children.length && (!0 === s.sedReplace && a.startsWith("s/") || (null === (t = s.autocomplete) || void 0 === t ? void 0 : t.reactions) === !0 && a.startsWith("+")) }, focus(e) { !a.ReactEditor.isFocused(e) && (a.ReactEditor.focus(e), a.ReactEditor.deselect(e)) }, getSelectionOverlap(e, t) { if (null == e.selection) return { anchor: null, focus: null }; if (I.isPath(t)) { let n = d.range(e, t), [i] = d.node(e, t); if (c.isElement(i)) { let i = d.before(e, t), r = d.after(e, t); t = { anchor: null != i ? i : n.anchor, focus: null != r ? r : n.focus } } else t = n } let [n, i] = f.edges(t), r = null, s = null; return T.equals(e.selection.anchor, n) ? r = "start" : T.equals(e.selection.anchor, i) ? r = "end" : f.includes(t, e.selection.anchor) && (r = "inside"), T.equals(e.selection.focus, n) ? s = "start" : T.equals(e.selection.focus, i) ? s = "end" : f.includes(t, e.selection.focus) && (s = "inside"), { anchor: r, focus: s } } }, _ = { ...s.Node, isType: (e, t) => s.Element.isElement(e) && e.type === t, isInTypes: (e, t) => s.Element.isElement(e) && t.has(e.type) }, c = { ...s.Element, updateElement(e, t) { let n = d.node(e, t[1]); return r()(!d.isEditor(t[0]), "Element is the root node"), r()(null != n, "Failed to find element"), r()(c.isElement(n[0]), "Node at this path is no longer an element"), r()(n[0].type === t[0].type, "Node at this path is a different type"), n }, markdown(e, t, n) { var i; let r = "line" === e.type && (null === (i = e.codeBlockState) || void 0 === i ? void 0 : i.wasInCodeBlock) === !0, s = e.children.map(e => { var t; return E.isText(e) ? e.text : "((element:".concat(null !== (t = e.type) && void 0 !== t ? t : "unknown", "))") }), a = s.join(""); return { entries: o.parse(a, null != t ? t : null, r, n), serializedChildren: s } }, isEmpty(e) { if (e.children.length > 1) return !1; if (0 === e.children.length) return !0; let t = e.children[0]; return E.isText(t) && 0 === t.text.length } }, E = { ...s.Text }, I = { ...s.Path, isFirstEditorBlock: e => I.equals(e, l.FIRST_BLOCK_PATH), isFirstEditorText: e => I.equals(e, l.FIRST_TEXT_PATH), isFirstChild: (e, t) => I.equals(t, I.child(e, 0)), child: (e, t) => [...e, t] }, T = { ...s.Point, start(e) { let [, t] = e; return { path: I.child(t, 0), offset: 0 } }, end(e) { let [t, n] = e, i = t.children[t.children.length - 1]; return { path: I.child(n, t.children.length - 1), offset: E.isText(i) ? i.text.length : 0 } }, isAtStart(e, t) { return T.equals(e, this.start(t)) }, isAtEnd(e, t) { return T.equals(e, this.end(t)) }, clamp(e, t) { let [n, i] = f.edges(t); return T.isBefore(e, n) && (e = n), T.isAfter(e, i) && (e = i), e } }, f = { ...s.Range, toPoint: e => null == e || f.isExpanded(e) ? null : e.anchor, children(e) { let [t, n] = e, i = t.children[t.children.length - 1]; return { anchor: { path: I.child(n, 0), offset: 0 }, focus: { path: I.child(n, t.children.length - 1), offset: E.isText(i) ? i.text.length : 0 } } }, clamp(e, t) { let [n, i] = f.edges(e), [r, s] = f.edges(t); return (T.isBefore(n, r) && (n = r), T.isAfter(i, s) && (i = s), f.isForward(e)) ? { anchor: n, focus: i } : { anchor: i, focus: n } } }, S = { equals: (e, t) => null == e && null == t || null != e && null != t && f.equals(e, t), isValid(e, t) { if (null == t) return !1; let { anchor: n, focus: i } = t; if (!d.hasPath(e, n.path) || !d.hasPath(e, i.path)) return !1; let [r] = d.node(e, n.path), [s] = d.node(e, i.path); return E.isText(r) && E.isText(s) && n.offset <= r.text.length && i.offset <= s.text.length } }, h = (e, t) => { let n = (t.top + t.bottom) / 2; return e.top <= n && e.bottom >= n }, A = (e, t, n) => { let i = d.toDOMRange(e, t).getBoundingClientRect(), r = d.toDOMRange(e, n).getBoundingClientRect(); return h(i, r) && h(r, i) }, m = (e, t, n, i) => { let r = { anchor: t, focus: t }, s = 0, a = n.length, o = Math.floor((s + a) / 2); for (; o !== s;) if (A(e, { anchor: n[o], focus: n[o] }, r) ? i ? a = o : s = o : i ? s = o : a = o, o = Math.floor((s + a) / 2), !i && o === n.length - 2 && a === n.length - 1) { let t = n[n.length - 1]; A(e, { anchor: t, focus: t }, r) && (o = a) } return n[o] }, N = { getLineStart(e, t, n) { let i; let r = d.getParentElement(e, t); if (null == r) return null; let s = d.previous(e, { at: t, match: t => d.isInline(e, t) && !d.isVoid(e, t) && t !== r[0] }); null != s && (i = d.after(e, s[1])), null == i && (i = d.start(e, r[1])); let a = { anchor: i, focus: t }, o = Array.from(d.positions(e, { at: a })), l = m(e, t, o, !0); if (n && T.equals(t, l) && !T.isAtEnd(t, r)) { let n = d.after(e, t); if (null == n) return l; l = m(e, n, o, !0) } return l }, getLineEnd(e, t, n) { let i; let r = d.getParentElement(e, t); if (null == r) return null; let s = d.next(e, { at: t, match: t => d.isInline(e, t) && !d.isVoid(e, t) && t !== r[0] }); null != s && (i = d.before(e, s[1])), null == i && (i = d.end(e, r[1])); let a = { anchor: t, focus: i }, o = Array.from(d.positions(e, { at: a })), l = m(e, t, o, !1); if (n && T.equals(t, l) && !T.isAtEnd(t, r)) { let n = d.after(e, t); if (null == n) return l; l = m(e, n, o, !1) } return l }, getLineActionRange(e, t) { let n = f.toPoint(e.selection); if (null == n) return null; if (t) { let t = N.getLineStart(e, n, !1); return null == t ? null : { anchor: t, focus: n } } { let t = N.getLineEnd(e, n, !0); return null == t ? null : { anchor: n, focus: t } } } } }, 676108: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("907040"), o = n("28546"), l = n("401227"), u = n("872635"), d = n("185923"), _ = n("364610"); function c(e) { var t; let { editorRef: n, options: c, channel: E } = e, I = null === (t = n.current) || void 0 === t ? void 0 : t.getSlateEditor(), T = r.useCallback((e, t) => { let i = n.current; null != e && null != i && i.insertEmoji(e, t, !1), t && (0, o.closeExpressionPicker)() }, [n]); return null == I ? null : (0, i.jsxs)("div", { id: "slate-toolbar", className: _.staticToolbar, children: [(0, i.jsx)("div", { className: _.staticButtons, children: (0, i.jsx)(u.ToolbarButtons, { editorRef: n, options: c, iconClassName: _.staticIcon, dividerClassName: _.staticDivider }) }), (0, i.jsx)(s.Popout, { renderPopout: e => { let { closePopout: t } = e; return (0, i.jsx)(a.default, { persistSearch: !0, channel: E, closePopout: t, onSelectEmoji: (e, n) => { T(e, n), n && t() }, pickerIntention: d.EmojiIntention.COMMUNITY_CONTENT }) }, position: "bottom", animation: s.Popout.Animation.NONE, align: "left", children: (e, t) => { let { isShown: n } = t; return (0, i.jsx)(l.default, { ...e, active: n, className: _.emojiButton, tabIndex: 0 }) } })] }) } }, 77224: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"), n("653041"); var i = n("341702"), r = n("887490"); function s(e, t) { if (r.EditorUtils.areStylesDisabled(e)) return []; let [n, s] = t, a = []; if (!r.NodeUtils.isType(n, "line") || null == n.codeBlockState) return a; let { hljsTypes: o, isStyledCodeBlockLine: l } = n.codeBlockState; if (null == o || 0 === o.length || !l) return []; for (let t of o) { let o = n.children.map(e => r.TextUtils.isText(e) ? e.text : null); a.push({ hljsTypes: t.types, anchor: (0, i.getPointFromPosition)(e, s, o, t.start), focus: (0, i.getPointFromPosition)(e, s, o, t.end) }) } return a } }, 194625: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("47120"), n("653041"); var i = n("887490"); function r(e, t) { if (i.EditorUtils.areStylesDisabled(e)) return []; let [n, r] = t, s = []; if (!i.TextUtils.isText(n)) return s; let [a] = i.EditorUtils.node(e, i.PathUtils.parent(r)); return i.NodeUtils.isType(a, "applicationCommand") ? (n === a.children[0] && s.push({ anchor: { path: r, offset: 0 }, focus: { path: r, offset: 0 + a.command.displayName.length + 1 }, commandName: !0 }), s) : s } }, 135223: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"), n("653041"); var i = n("341702"), r = n("887490"); let s = new Set(["line", "blockQuote"]), a = []; function o(e, t, n) { if (r.EditorUtils.areStylesDisabled(e)) return []; let [o, l] = t; if (1 !== l.length || !r.NodeUtils.isInTypes(o, s)) return a; let { entries: u, serializedChildren: d } = r.ElementUtils.markdown(o, n, !0), _ = []; for (let t = 0; t < u.length; t++) { let n = u[t]; if (n.attributes.length > 0 && n.text.length > 0) { let s = u[t - 1], a = u[t + 1], o = (0, i.getPointFromPosition)(e, l, d, n.start), c = { anchor: o, focus: (0, i.getPointFromPosition)(e, l, d, n.start + n.text.length) }, E = r.EditorUtils.nodes(e, { at: c, mode: "lowest", voids: !1 }), I = {}; for (let e of n.attributes) if (I[e] = !0, "syntaxBefore" === e && null != a) for (let e of a.attributes) I["before_".concat(e)] = !0; else if ("syntaxAfter" === e && null != s) for (let e of s.attributes) I["after_".concat(e)] = !0; for (let [t, n] of E) { let t = { anchor: r.EditorUtils.start(e, n), focus: r.EditorUtils.end(e, n) }; r.PointUtils.isBefore(t.anchor, c.anchor) && (t.anchor = c.anchor), r.PointUtils.isAfter(t.focus, c.focus) && (t.focus = c.focus), _.push({ ...I, ...t }) } } } return _ } }, 77188: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }), n("47120"); var i = n("470079"), r = n("836560"), s = n("327432"), a = n("40851"), o = n("213459"), l = n("998698"), u = n("695346"), d = n("752305"), _ = n("86724"), c = n("886027"), E = n("515270"), I = n("265446"), T = n("196483"), f = n("417662"), S = n("847302"), h = n("374157"); n("209073"); var A = n("814011"), m = n("50607"), N = n("618136"), p = n("247765"), O = n("15559"), C = n("42530"); function R(e) { let t = i.useContext(a.default), n = u.UseRichChatInput.useSetting(), [R] = i.useState(() => { let i = (0, s.createEditor)(); return i.children = (0, d.toRichValue)(""), i.selection = { anchor: C.FIRST_TEXT_POINT, focus: C.FIRST_TEXT_POINT }, function(e) { var t, n, i; let { editor: s, chatInputType: a, channel: o, canUseCommands: l, canOnlyUseTextCommands: u, windowContext: d, previewMarkdown: C, forTests: R, onChangeStart: g, onChangeEnd: L, updateState: v } = e, D = s, { onChange: M } = D; D.chatInputType = a, D.windowContext = d, D.previewMarkdown = C, D.composition = null, D.events = new r.EventEmitter, D.isMac = "MacIntel" === navigator.platform, D.onChange = () => { D.events.emit("onChange"), M() }, D = (0, m.withReact)(D, !0 === R), D = (0, A.default)(D), D = (0, h.default)(D), (null === (t = a.commands) || void 0 === t ? void 0 : t.enabled) && (D = (0, _.default)(D, o, !0 === l, !0 === u)), D = (0, S.default)(D, o.guild_id, o.id), !(null === (n = a.markdown) || void 0 === n ? void 0 : n.disableBlockQuotes) && (D = (0, c.default)(D)), !(null === (i = a.markdown) || void 0 === i ? void 0 : i.disableCodeBlocks) && (D = (0, E.default)(D)), R && (D = (0, p.default)(D)), D = (0, f.default)(D), D = (0, I.default)(D), D = (0, N.default)(D), D = (0, O.default)(D, g, L), D = (0, T.default)(D, e => { let { newValue: t, newSelection: n } = e; return v(D, "undo", { value: t, selection: n }) }) }({ ...e, editor: i, windowContext: t, previewMarkdown: n }), i }); return i.useEffect(() => { let e = () => R.onChange(); return l.default.addChangeListener(e), o.default.addChangeListener(e), () => { l.default.removeChangeListener(e), o.default.removeChangeListener(e) } }, [R]), i.useEffect(() => { R.previewMarkdown !== n && (R.previewMarkdown = n, R.onChange()) }, [R, n]), R } }, 230554: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }), n("47120"), n("757143"); var i = n("470079"), r = n("519953"), s = n("911969"), a = n("998698"), o = n("91313"), l = n("53529"), u = n("436660"), d = n("887490"), _ = n("515270"), c = n("847302"), E = n("42530"); let I = (e, t, n) => ({ getSlateEditor: () => e, submit(e) { e.preventDefault(), n() }, focus() { d.EditorUtils.focus(e) }, blur() { r.ReactEditor.blur(e) }, getCurrentWord() { let t = e.selection; if (null == t || !d.SelectionUtils.isValid(e, t) || d.RangeUtils.isExpanded(t) || (0, _.hasOpenPlainTextCodeBlock)(e)) return { word: null, isAtStart: !1 }; let [n, i] = d.EditorUtils.node(e, d.PathUtils.parent(t.anchor.path)), [r, s] = d.EditorUtils.node(e, t.anchor.path), a = t.anchor.offset; if (!d.PathUtils.hasPrevious(s) && d.TextUtils.isText(r)) { let e = r.text.substring(0, a); if (d.NodeUtils.isType(n, "applicationCommand") && a < n.command.displayName.length + 2) return { word: e, isAtStart: !0 } } let o = "", l = !1; for (;;) { if (--a < 0) { if (!d.PathUtils.hasPrevious(s)) { l = !0; break } [r, s] = d.EditorUtils.node(e, d.PathUtils.previous(s)) } if (!d.TextUtils.isText(r)) break; let t = r.text[a]; if (E.WHITESPACE_RE.test(t)) break; o = t + o } return { word: o, isAtStart: l && d.PathUtils.isFirstEditorBlock(i) } }, getFirstText() { var t, n; return null !== (n = null === (t = d.EditorUtils.getFirstText(e)) || void 0 === t ? void 0 : t.text) && void 0 !== n ? n : "" }, getCurrentCommandOption() { let t = o.getCurrentCommandOption(e); return null == t ? null : t[0].optionName }, getCurrentCommandOptionValue() { var n; let i = o.getCurrentCommandOption(e); if (null == i) return []; let r = a.default.getActiveCommand(t.id), s = null == r ? void 0 : null === (n = r.options) || void 0 === n ? void 0 : n.find(e => e.name === i[0].optionName); return null == s ? [] : o.optionToValues(e, s, i[0]) }, getCommandOptionValues() { let n = a.default.getActiveCommand(t.id); return null == n ? {} : o.getOptionValues(e, n) }, insertText(n) { let i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; l.HistoryUtils.withSingleEntry(e, () => { let s = o.getCurrentCommandOption(e), a = null != s && T(t, s[0]); if (null != i && a && (u.SlateTransforms.removeInlineChildren(e, s), r = !1), f(e, n, i, r), null != i && a) { let n = o.getCommandBlock(e); if (s = d.ElementUtils.updateElement(e, s), null != n) { let i = d.ElementUtils.markdown(n[0], t.guild_id); (0, c.convertRawToInlineVoids)(e, s, t.id, i) && (s = d.ElementUtils.updateElement(e, s)) } o.validateOption(e, t.guild_id, t.id, d.ElementUtils.updateElement(e, s), !1), u.SlateTransforms.selectNextCommandOption(e) } }) }, insertAutocomplete(n) { let i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, r = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; l.HistoryUtils.withSingleEntry(e, () => { let s = o.getCurrentCommandOption(e), a = null != s && T(t, s[0]); if (a) u.SlateTransforms.removeInlineChildren(e, s), r = !1; else { let { word: t } = this.getCurrentWord(); null != t && t.length > 0 && u.SlateTransforms.delete(e, { distance: t.length, unit: "character", reverse: !0 }) } f(e, n, i, r), a && u.SlateTransforms.selectNextCommandOption(e) }) }, insertEmoji(t) { let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; l.HistoryUtils.withSingleEntry(e, () => { var i, r; let s = t.animated ? "a" : "", a = null !== (r = null !== (i = t.originalName) && void 0 !== i ? i : t.name) && void 0 !== r ? r : "", o = ":".concat(t.name, ":"); f(e, o, null != t.id ? "<".concat(s, ":").concat(a.replace(/:/g, ""), ":").concat(t.id, ">") : null, n) }) } }); function T(e, t) { var n; let i = a.default.getActiveCommand(e.id), r = null == i ? void 0 : null === (n = i.options) || void 0 === n ? void 0 : n.find(e => e.name === t.optionName); return null != r && (r.type !== s.ApplicationCommandOptionType.STRING || (null == r ? void 0 : r.choices) != null || (null == r ? void 0 : r.autocomplete)) } function f(e, t, n, i) { let r = d.EditorUtils.areStylesDisabled(e) || null == n ? t : n; l.HistoryUtils.withSingleEntry(e, () => { u.SlateTransforms.insertText(e, i ? r + " " : r) }) } function S(e, t, n, r) { i.useImperativeHandle(e, () => I(t, n, r), [t, n, r]) } }, 780748: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("470079"), r = n("998698"), s = n("436660"), a = n("515270"), o = n("417662"), l = n("981631"); function u(e) { let { editor: t, channel: n, disableEnterToSubmit: u, onKeyDown: d, onKeyUp: _, onTab: c, onEnter: E, allowNewLines: I, submit: T, hideAutocomplete: f, moveSelection: S } = e, h = i.useCallback(e => { var i; switch (e.which) { case l.KeyboardKeys.ARROW_UP: if (S(-1)) { e.preventDefault(); return } break; case l.KeyboardKeys.ARROW_DOWN: if (S(1)) { e.preventDefault(); return } break; case l.KeyboardKeys.P: if ((0, o.checkModifiers)(e, { ctrl: !0 }) && S(-1)) { e.preventDefault(); return } break; case l.KeyboardKeys.N: if ((0, o.checkModifiers)(e, { ctrl: !0 }) && S(1)) { e.preventDefault(); return } break; case l.KeyboardKeys.ESCAPE: null == f || f(); break; case l.KeyboardKeys.TAB: if ((0, o.checkModifiers)(e, {}) && (null == c ? void 0 : c())) { e.preventDefault(), e.stopPropagation(); return } if (null != r.default.getActiveCommand(n.id)) { e.preventDefault(), e.stopPropagation(), e.shiftKey ? s.SlateTransforms.selectPreviousCommandOption(t) : s.SlateTransforms.selectNextCommandOption(t); return } break; case l.KeyboardKeys.ENTER: if ((0, o.checkModifiers)(e, {}) && (null == E ? void 0 : E(e))) { e.preventDefault(), e.stopPropagation(); return } } if ((null === (i = t.onKeyDown) || void 0 === i ? void 0 : i.call(t, e)) === !0) { e.preventDefault(), e.stopPropagation(); return } e.which === l.KeyboardKeys.ENTER && (!e.altKey && !e.shiftKey && (!u || e.ctrlKey) && !(0, a.hasOpenPlainTextCodeBlock)(t) || !I) && (e.preventDefault(), e.stopPropagation(), T()), null == d || d(e) }, [I, n.id, u, t, f, S, E, d, c, T]); return { handleKeyDown: h, handleKeyUp: i.useCallback(e => { null == _ || _(e) }, [_]) } } }, 464581: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("470079"), r = n("887490"); function s(e, t, n) { let s = i.useCallback(e => { if (t) return !0; if (!0 === e.defaultPrevented) return !1; let i = n(e); return i && (e.preventDefault(), e.stopPropagation()), i }, [t, n]), a = i.useCallback(t => { let { event: n } = t; !s(n) && (n.preventDefault(), n.stopPropagation(), null != n.clipboardData && (e.insertData(n.clipboardData), r.EditorUtils.focus(e))) }, [e, s]); return { handlePaste: s, handleGlobalPaste: a } } }, 732659: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("470079"), r = n("519953"), s = n("887490"); function a(e, t, n) { i.useEffect(() => { let i = r.ReactEditor.findDocumentOrShadowRoot(e).defaultView; if ((null == i ? void 0 : i.ResizeObserver) == null) return; let a = s.EditorUtils.toDOMNode(e, e), o = a.offsetHeight, l = new i.ResizeObserver(() => { let i = s.EditorUtils.toDOMNode(e, e).offsetHeight; o !== i && (null != t.current && (t.current.style.height = "".concat(i, "px")), o = i, null == n || n(i)) }); return l.observe(a), () => l.disconnect() }, [t, e, n]) } }, 86724: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return g }, unsetCommand: function() { return L } }), n("47120"), n("653041"), n("757143"), n("733860"); var i = n("911969"), r = n("555573"), s = n("456007"), a = n("10718"), o = n("998698"), l = n("895924"), u = n("581364"), d = n("509716"), _ = n("826298"), c = n("592125"), E = n("430824"), I = n("594174"), T = n("91313"), f = n("53529"), S = n("925994"), h = n("436660"), A = n("887490"), m = n("42530"), N = n("981631"), p = n("665692"); let O = new Set(["applicationCommandOption"]), C = new Set([i.ApplicationCommandOptionType.ATTACHMENT]), R = new Set(["line", "applicationCommand"]); function g(e, t, n, d) { let { insertData: c, isInline: E, isVoid: I, onChange: N, deleteBackward: g, deleteForward: U, deleteFragment: b } = e; e.insertData = n => { if (null != t && A.EditorUtils.isEditorEmpty(e) && n.types.includes("application/x-discord-interaction-data")) { let e = JSON.parse(n.getData("application/x-discord-interaction-data")), { commandKey: d, interactionOptions: _ } = (0, u.extractInteractionDataProps)(e), { application: c, command: E } = a.getCachedCommand(t, d); if (null != E) { var i, o; let e = null != c ? { type: l.ApplicationCommandSectionType.APPLICATION, id: c.id, icon: c.icon, name: null !== (o = null === (i = c.bot) || void 0 === i ? void 0 : i.username) && void 0 !== o ? o : c.name, application: c } : null; return r.setActiveCommand({ channelId: t.id, command: E, section: e, location: l.ApplicationCommandTriggerLocations.PASTE, initialValues: (0, s.getInitialValuesFromInteractionOptions)(E, null != _ ? _ : []) }), null } } return c(n) }, e.isInline = e => !!O.has(e.type) || E(e), e.isVoid = e => !!("applicationCommandOption" === e.type && C.has(e.optionType)) || I(e), e.deleteBackward = t => { y(e, () => g(t)) }, e.deleteForward = t => { y(e, () => U(t)) }, e.deleteFragment = t => { y(e, () => b(t)) }; let G = null, w = null, k = null, B = null, V = null; return e.onChange = () => { if (null != t) { let s = o.default.getState(t.id), u = a.getChangeKeys(t); if (A.EditorUtils.richValue(e) !== G || !A.SelectionUtils.equals(e.selection, w) || s.activeCommand !== k || null == V || u.some((e, t) => V[t] !== e)) { let o = f.HistoryUtils.withMergedEntry(e, () => { var o; return function(e) { let { editor: t, storeCommandState: n, channel: s, canUseCommands: o, canOnlyUseTextCommands: u, commandChanged: d, previousOptionValues: c } = e, { command: E, commandText: I } = M(t), f = n.activeCommand; if (!o || u && (null == f ? void 0 : f.inputType) !== l.ApplicationCommandInputType.BUILT_IN_TEXT && (null == f ? void 0 : f.inputType) !== l.ApplicationCommandInputType.BUILT_IN_INTEGRATION) return null != E && L(t, s.id, f, !0), null; if (null != E) { if (A.EditorUtils.isEditorEmpty(t) || null == f) return L(t, s.id, f, !1), null; let e = "".concat(p.COMMAND_SENTINEL).concat(E.displayName); if (null == I || !I.startsWith(e) || 0 === T.getOptionNames(t).length && (I.length < e.length + 1 || " " !== I[e.length])) return L(t, s.id, f, !0), null } else { if (null != f && d) { let e = function(e, t, n) { var i, r, s, a, o; let l; let { initialValues: u, activeCommand: d } = n; if (null == d) return null; let _ = (null !== (s = null === (i = d.options) || void 0 === i ? void 0 : i.length) && void 0 !== s ? s : 0) > 0 ? T.findTextOptions(e, d) : null, c = (0, S.toTextValue)(A.EditorUtils.richValue(e), { mode: "raw", range: { anchor: A.EditorUtils.start(e, []), focus: null !== (a = null == _ ? void 0 : null === (r = _[0]) || void 0 === r ? void 0 : r.keyRange.anchor) && void 0 !== a ? a : A.EditorUtils.end(e, []) } }), E = "", I = c.toLocaleLowerCase(), f = "".concat(p.COMMAND_SENTINEL).concat(d.displayName).toLocaleLowerCase(), N = "".concat(p.COMMAND_SENTINEL).concat(d.name).toLocaleLowerCase(); I.startsWith(f) && I.length > f.length ? E = c.substring(f.length).trim() : I.startsWith(N) && I.length > N.length && (E = c.substring(N.length).trim()); let O = [], R = null, g = null; if (null != d.options) { let e = new Set; if (null != _) for (let i of _) { e.add(i.name); let r = null !== (o = P(n, t, i.name)) && void 0 !== o ? o : i.text, s = { type: "applicationCommandOption", optionName: i.name, optionDisplayName: i.displayName, optionType: i.type, children: [{ text: r }] }; O.push(s), 0 === i.text.length && null == R && (R = s) } for (let i of d.options) if (!e.has(i.name) && (i.required || null != u[i.name])) { let e, r; E.length > 0 && !C.has(i.type) ? (e = E, E = "") : e = null != (r = P(n, t, i.name)) ? r : ""; let s = { type: "applicationCommandOption", optionName: i.name, optionDisplayName: i.displayName, optionType: i.type, children: [{ text: e }] }; O.push(s), 0 === e.length && null == R && (R = s), null == r && (g = s) } } l = E.length > 0 ? "".concat(p.COMMAND_SENTINEL).concat(d.displayName, " ").concat(E.replace(/\r|\n/g, " ")) : 0 === O.length ? "".concat(p.COMMAND_SENTINEL).concat(d.displayName, " ") : "".concat(p.COMMAND_SENTINEL).concat(d.displayName), O.unshift({ text: l }); let L = { type: "applicationCommand", children: O, command: { id: d.id, name: d.name, displayName: d.displayName } }; A.EditorUtils.withoutNormalizing(e, () => { for (let [, t] of(h.SlateTransforms.insertNodes(e, [L], { at: m.FIRST_BLOCK_PATH }), A.EditorUtils.blocks(e).reverse())) A.PathUtils.isAfter(t, m.FIRST_BLOCK_PATH) && h.SlateTransforms.removeNodes(e, { at: t, voids: !0 }) }); let D = null; return null != R ? (h.SlateTransforms.selectCommandOption(e, R.optionName), D = R.optionName) : null != g ? (h.SlateTransforms.selectCommandOption(e, g.optionName, !1), D = g.optionName) : h.SlateTransforms.resetSelectionToEnd(e), null == g && v(e, d), D }(t, s, n), i = T.getOptionValues(t, f); return D({ guildId: s.guild_id, channelId: s.id, command: f, activeOption: e, currentOptionValues: i, previousOptionValues: null, validateAll: !0, allowEmpty: !0 }), { commandId: f.id, optionValues: i } } if (null != f && !d) return r.setActiveCommand({ channelId: s.id, command: null, section: null }), null; let e = A.EditorUtils.richValue(t)[0], o = e.children[0]; if (R.has(e.type) && A.TextUtils.isText(o)) { let e = function(e, t) { if (!e.startsWith("/")) return null; let n = (0, _.getCommandQuery)(t, e.substring(1)); if (!n.hasSpaceTerminator) return null; let { commands: r, sections: s } = a.getCachedResults(t, i.ApplicationCommandType.CHAT, n.text); if (0 === r.length) return null; let o = n.text.trim(), u = o + " ", d = r.filter(e => e.inputType !== l.ApplicationCommandInputType.PLACEHOLDER && (e.displayName === o || e.displayName.startsWith(u))); if (1 === d.length && d[0].displayName === o) { let e = d[0], t = s.find(t => { var n; return (null === (n = t.application) || void 0 === n ? void 0 : n.id) === e.applicationId }); return { command: e, section: t } } return null }(o.text, s); if (null != e) return r.setActiveCommand({ channelId: s.id, command: e.command, section: e.section }), null } } if (null != f && null != E) { var N; ! function(e, t) { if (null == t.options || 0 === t.options.length) return !1; let n = T.findTextOptions(e, t); return 0 !== n.length && (A.EditorUtils.withoutNormalizing(e, () => { for (let t = n.length - 1; t >= 0; t--) { let i = n[t]; h.SlateTransforms.textToInline(e, { type: "applicationCommandOption", optionName: i.name, optionDisplayName: i.displayName, optionType: i.type, children: [{ text: i.text }] }, { anchor: i.keyRange.anchor, focus: i.valueRange.focus }) } let t = A.EditorUtils.getFirstText(e); if (null == t) return !1; let i = t.text.trim(); t.text !== i && h.SlateTransforms.textToText(e, i, { anchor: { path: m.FIRST_TEXT_PATH, offset: 0 }, focus: { path: m.FIRST_TEXT_PATH, offset: t.text.length } }) }), !0) }(t, f) && v(t, f); let e = T.getOptionValues(t, f), n = A.EditorUtils.above(t, { match: e => A.EditorUtils.isInline(t, e) && "applicationCommandOption" === e.type, mode: "lowest" }), i = null !== (N = null == n ? void 0 : n[0].optionName) && void 0 !== N ? N : null; return D({ guildId: s.guild_id, channelId: s.id, command: f, activeOption: i, currentOptionValues: e, previousOptionValues: c, validateAll: !1, allowEmpty: !1 }), { commandId: E.id, optionValues: e } } return null }({ editor: e, storeCommandState: s, channel: t, canUseCommands: n, canOnlyUseTextCommands: d, commandChanged: (null === (o = s.activeCommand) || void 0 === o ? void 0 : o.id) !== (null == k ? void 0 : k.id), previousOptionValues: B }) }); if (null != o) { let t = f.HistoryUtils.currentEntry(e); null != t && (t.commandId = o.commandId), B = o.optionValues } else B = null; G = A.EditorUtils.richValue(e), w = e.selection, k = s.activeCommand, V = u } } N() }, e } function L(e, t, n, i) { let [s] = A.EditorUtils.blocks(e)[0], a = (i ? (0, S.serializeDescendant)(s, { mode: "plain" }).trimEnd() : "").split("\n").map(e => ({ type: "line", children: [{ text: e }] })), o = [a.length - 1]; for (let [, t] of(h.SlateTransforms.insertNodes(e, a, { at: m.FIRST_BLOCK_PATH }), A.EditorUtils.blocks(e).reverse())) A.PathUtils.isAfter(t, o) && h.SlateTransforms.removeNodes(e, { at: t, voids: !0 }); null != n && r.setActiveCommand({ channelId: t, command: null, section: null }) } function v(e, t) { if (null == t.options || 1 !== t.options.length || !0 === t.options[0].required || C.has(t.options[0].type) || T.getOptionNames(e).length > 0 || null == T.getCommandBlock(e)) return !1; let n = A.EditorUtils.getFirstText(e); if (null == n) return !1; let i = t.options[0], r = { path: m.FIRST_TEXT_PATH, offset: t.displayName.length + 2 }, s = { path: m.FIRST_TEXT_PATH, offset: n.text.length }; return !(!n.text.startsWith("".concat(p.COMMAND_SENTINEL).concat(t.displayName, " ").toLocaleLowerCase()) || A.PointUtils.equals(r, s)) && (h.SlateTransforms.textToInline(e, { type: "applicationCommandOption", optionName: i.name, optionDisplayName: i.displayName, optionType: i.type, children: [{ text: n.text.substring(t.displayName.length + 2) }] }, { anchor: r, focus: s }), !0) } function D(e) { let { guildId: t, channelId: n, command: i, activeOption: s, currentOptionValues: a, previousOptionValues: l, validateAll: u, allowEmpty: _ } = e; if (null == i.options) return !1; let c = u ? null : o.default.getActiveOptionName(n), E = {}, I = o.default.getOptionStates(n), T = !1; for (let e of i.options) { var f, S, h; let i = I[e.name], r = u || e.name === c && c !== s || (null == i ? void 0 : null === (f = i.lastValidationResult) || void 0 === f ? void 0 : f.success) === !1 && (null == a ? void 0 : a[e.name]) !== (null == l ? void 0 : l[e.name]), o = { hasValue: null != a && e.name in a, isActive: e.name === s, lastValidationResult: r ? (0, d.validateOptionContent)({ option: e, content: null !== (h = null == a ? void 0 : a[e.name]) && void 0 !== h ? h : null, guildId: t, channelId: n, allowEmptyValues: _ }) : null == i ? void 0 : i.lastValidationResult }; (null == i || i.hasValue !== o.hasValue || i.isActive !== o.isActive || r && (null === (S = i.lastValidationResult) || void 0 === S ? void 0 : S.success) === !1) && (E[e.name] = o, T = !0) } T && r.updateOptionStates(n, E) } function M(e) { let t = T.getCommandBlock(e); if (null == t) return { command: null, commandText: null }; let [n] = t, i = n.children[0]; return A.TextUtils.isText(i) ? { command: n.command, commandText: i.text } : { command: n.command, commandText: null } } function y(e, t) { let n = T.getOptionNames(e)[0]; t(); let i = A.RangeUtils.toPoint(e.selection); if (null == i || n === T.getOptionNames(e)[0]) return; let { command: r, commandText: s } = M(e); !(null == r || null == s || s.endsWith(" ")) && A.PointUtils.equals(i, { path: m.FIRST_TEXT_PATH, offset: r.displayName.length + 1 }) && h.SlateTransforms.insertText(e, " ") } function P(e, t, n) { var r, s, a, o; let l = null === (s = e.activeCommand) || void 0 === s ? void 0 : null === (r = s.options) || void 0 === r ? void 0 : r.find(e => e.name === n), u = e.initialValues[n]; if (null == l || null == u) return null; if (null != l.choices) return null === (o = l.choices.find(e => e.value === u.value)) || void 0 === o ? void 0 : o.displayName; let d = null === (a = u.value) || void 0 === a ? void 0 : a.toString(); return l.type === i.ApplicationCommandOptionType.CHANNEL || l.type === i.ApplicationCommandOptionType.MENTIONABLE && null != c.default.getChannel(d) ? "<#".concat(d, "> ") : l.type === i.ApplicationCommandOptionType.USER || l.type === i.ApplicationCommandOptionType.MENTIONABLE && null != I.default.getUser(d) ? "<@".concat(d, ">") : l.type === i.ApplicationCommandOptionType.ROLE || l.type === i.ApplicationCommandOptionType.MENTIONABLE && null != E.default.getRole(t.guild_id, null != d ? d : N.EMPTY_STRING_SNOWFLAKE_ID) ? "<@&".concat(d, ">") : d } }, 886027: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i = n("53529"), r = n("436660"), s = n("887490"), a = n("515270"); let o = new Set(["line", "blockQuote"]); function l(e) { let { deleteBackward: t, deleteFragment: n, insertBreak: l, onChange: u } = e; e.deleteBackward = n => { let i = s.EditorUtils.getCurrentBlock(e); if ((null == i ? void 0 : i[0].type) === "blockQuote") { let t = s.RangeUtils.toPoint(e.selection); if (null != t && s.PathUtils.isFirstChild(i[1], t.path) && 0 === t.offset) { r.SlateTransforms.setNodes(e, { type: "line" }, { at: i[1] }); return } } t(n) }, e.deleteFragment = t => { if (null != e.selection) { let [a, o] = s.RangeUtils.edges(e.selection), l = [a.path[0]], u = s.EditorUtils.node(e, l), d = [o.path[0]], _ = s.PathUtils.equals(l, d) ? null : s.EditorUtils.node(e, d); i.HistoryUtils.withSingleEntry(e, () => { (null == u ? void 0 : u[0].type) === "blockQuote" && s.PointUtils.isAtStart(a, u) && r.SlateTransforms.setNodes(e, { type: "line" }, { at: l }), (null == _ ? void 0 : _[0].type) === "blockQuote" && s.PointUtils.isAtEnd(o, _) && r.SlateTransforms.setNodes(e, { type: "line" }, { at: d }), n(t) }); return } n(t) }, e.insertBreak = () => { let t = s.EditorUtils.getCurrentBlock(e); if ((null == t ? void 0 : t[0].type) === "blockQuote") { let n = s.RangeUtils.toPoint(e.selection); if (null == n) return; ! function(e, t, n) { if (!s.EditorUtils.isEmpty(e, t[0])) return !1; let i = s.EditorUtils.previous(e, { at: t[1] }); return !!(null != i && s.NodeUtils.isType(i[0], "blockQuote") && s.EditorUtils.isEmpty(e, i[0]) && s.PointUtils.isAtStart(n, t)) && (r.SlateTransforms.setNodes(e, { type: "line" }, { at: t[1] }), r.SlateTransforms.removeNodes(e, { at: i[1] }), !0) }(e, t, n) && r.SlateTransforms.splitNodes(e, { at: n, always: !0 }); return } l() }; let d = null, _ = !0; return e.onChange = () => { let t = s.EditorUtils.richValue(e); (t !== d || e.previewMarkdown !== _) && (i.HistoryUtils.withMergedEntry(e, () => { s.EditorUtils.withoutNormalizing(e, () => (function(e) { let t = !1; for (let l of s.EditorUtils.blocks(e)) { let [u, d] = l; if (!o.has(u.type)) continue; let _ = { path: s.PathUtils.child(d, 0), offset: 0 }; if ((0, a.isPointInCodeBlock)(e, _)) { "blockQuote" === u.type && (r.SlateTransforms.setNodes(e, { type: "line" }, { at: d }), r.SlateTransforms.insertText(e, "> ", { at: _ })); continue } if ("blockQuote" === u.type || s.EditorUtils.areStylesDisabled(e)) continue; let c = u.children[0]; if (!s.TextUtils.isText(c)) continue; let E = c.text.match(/^\s*>>> /), I = c.text.match(/^\s*> /); if ((null != I || null != E || t) && (r.SlateTransforms.setNodes(e, { type: "blockQuote" }, { at: d }), !t)) { var n, i; let a = null !== (i = null !== (n = null == I ? void 0 : I[0].length) && void 0 !== n ? n : null == E ? void 0 : E[0].length) && void 0 !== i ? i : 0, o = s.PathUtils.child(d, 0); r.SlateTransforms.delete(e, { at: { anchor: { path: o, offset: 0 }, focus: { path: o, offset: a } } }), t = null != E } } })(e)) }), d = t, _ = e.previewMarkdown), u() }, e } }, 515270: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h }, hasOpenPlainTextCodeBlock: function() { return O }, isPointInCodeBlock: function() { return p } }), n("47120"), n("411104"), n("653041"), n("757143"); var i = n("920478"), r = n("31775"), s = n.n(r), a = n("70956"), o = n("364964"), l = n("53529"), u = n("925994"), d = n("436660"), _ = n("887490"), c = n("42530"); let E = new Set(["line"]), I = i.default.listLanguages(), T = {}; for (let e of I) { e = e.toLowerCase(); let t = i.default.getLanguage(e); if (null == t) continue; let n = t.aliases; if (T[e] = e, null != n) for (let t of n) T[t.toLowerCase()] = e } let f = /^[a-z0-9_+\-.#]+$/, S = /^[a-z0-9_+\-.#]+$/i; for (let e in T) if (null == e.match(f)) throw Error("Language name does not match regex: ".concat(e)); function h(e) { let { onChange: t } = e, n = null; return e.onChange = () => { _.EditorUtils.richValue(e) !== n && (l.HistoryUtils.withMergedEntry(e, () => { _.EditorUtils.withoutNormalizing(e, () => (function(e) { let t = function(e) { let t = [], n = null; for (let i of _.EditorUtils.blocks(e)) { let r = null != n && (n.isInCodeBlock || n.opensCodeBlock), s = null != n && (n.isStyledCodeBlockLine || n.opensCodeBlockOnOwnLine); n = function(e, t, n, i, r) { var s; let a = function(e) { let t; let [n, i] = e; if (!E.has(n.type)) return []; let r = [], s = /\\|```/g; for (let e = 0; e < n.children.length; e++) { let a = n.children[e]; if (_.TextUtils.isText(a)) for (s.lastIndex = 0; null != (t = s.exec(a.text));) { if ("\\" === t[0]) { s.lastIndex += 1; continue } r.push({ path: _.PathUtils.child(i, e), offset: t.index }) } } return r }(t), o = a[0], l = a[a.length - 1], u = null; if (null != l) { let [t] = _.EditorUtils.node(e, l.path); u = t.text.substring(l.offset + 3) } let d = n && null != o, c = n && 0 === a.length, I = i && 0 === a.length, f = (d ? a.slice(1) : a).length % 2 == 1, h = f && (null == u || "" === u || null != u.match(S)), A = h && null != u && null !== (s = T[u.toLowerCase()]) && void 0 !== s ? s : null; return { blockEntry: t, wasInCodeBlock: n, isInCodeBlock: c, isStyledCodeBlockLine: I, lang: f || d ? A : r, hljsTypes: null, closesCodeBlock: d, opensCodeBlock: f, opensCodeBlockOnOwnLine: h } }(e, i, r, s, null != n && (n.opensCodeBlock || !n.closesCodeBlock) ? n.lang : null), t.push(n) } return function(e) { let t = [], n = !1; for (let r of e) { let s = r === e[e.length - 1]; if ((r.closesCodeBlock || s) && (n && s && !r.closesCodeBlock && t.push(r), n = !1, t.length > 0)) { let e = t.map(e => (0, u.serializeDescendant)(e.blockEntry[0])).join("\n"), n = t[0].lang; if (null != n && null != i.default.getLanguage(n)) { let i = function(e, t) { let n = "".concat(e, "-").concat(t), i = N.get(n); if (null != i) return i; let r = o.default.highlight(t, e, !1); if (null == r || r.illegal) return null; let s = r.value.split("\n"); return N.set(n, s), s }(e, n); if (null != i && i.length === t.length) { let e = []; for (let n = 0; n < t.length; n++) { let r; let s = i[n].replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"').replace(/'/g, "'"), a = [], o = 0, l = 0; for (; null != (r = A.exec(s));) { let t = r.index + r[0].length, n = r.index - l; r.index > l && (e.length > 0 && a.push({ types: [...e], start: o, end: o + n }), o += n), "" === r[0] ? e.pop() : e.push(r[1]), l = t } if (e.length > 0) { let t = s.length - l; a.push({ types: [...e], start: o, end: o + t }) } t[n].hljsTypes = a } } else for (let e = 0; e < t.length; e++) t[e].hljsTypes = null } t = [] } n && t.push(r), r.opensCodeBlock && (n = !0) } }(t), t }(e); (function(e, t) { for (let n of t) { let [t, i] = n.blockEntry, r = function(e) { return e.isStyledCodeBlockLine || e.wasInCodeBlock ? { lang: e.lang, wasInCodeBlock: e.wasInCodeBlock, isInCodeBlock: e.isInCodeBlock, isStyledCodeBlockLine: e.isStyledCodeBlockLine, hljsTypes: e.hljsTypes } : null }(n); (null == t ? void 0 : t.codeBlockState) != r && d.SlateTransforms.setNodes(e, { codeBlockState: r }, { at: i }) } })(e, t) })(e)) }), n = _.EditorUtils.richValue(e)), t() }, e } let A = /(?:)|(?:<\/span>)/g, m = { max: 1 / 0, maxAge: 1 * a.default.Millis.MINUTE, updateAgeOnGet: !0 }, N = new(s())(m); function p(e, t) { let n = 0; for (let r of _.EditorUtils.nodes(e, { at: { anchor: { path: c.FIRST_TEXT_PATH, offset: 0 }, focus: t }, mode: "lowest", match: e => _.TextUtils.isText(e) })) { var i; let e = r[0].text; _.PathUtils.equals(r[1], t.path) && (e = e.substring(0, t.offset)); let s = e.match(/```/g); n += null !== (i = null == s ? void 0 : s.length) && void 0 !== i ? i : 0 } return n % 2 != 0 } function O(e) { if (null == e.selection) return !1; let t = _.RangeUtils.start(e.selection); return p(e, t) } }, 265446: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"); var i = n("53529"), r = n("436660"), s = n("887490"); let a = ["applicationCommand"]; function o(e) { let { insertBreak: t, insertText: n } = e; return e.insertBreak = () => { l(e) && t() }, e.insertSoftBreak = () => { e.insertBreak() }, e.insertText = t => { if (0 > t.indexOf("\r") && 0 > t.indexOf("\n")) { n(t); return } let s = t.split(/\r\n|\r|\n/); if (!l(e)) { n(s.join(" ")); return } i.HistoryUtils.withSingleEntry(e, () => { let t = !1; for (let i of s) t && r.SlateTransforms.splitNodes(e, { always: !0 }), n(i), t = !0 }) }, e } function l(e) { let t = s.EditorUtils.getCurrentBlock(e); return null != t && !a.includes(t[0].type) } }, 196483: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("53529"), r = n("887490"); function s(e, t) { let { apply: n, deleteBackward: s, deleteForward: o, deleteFragment: l, insertData: u, insertText: d, onChange: _ } = e; function c(n) { let r = i.HistoryUtils.currentEntry(e); if (null != r && (r.mergeable = !1), n >= e.history.stack.length) return; e.history.index = n; let s = i.HistoryUtils.currentEntry(e); t({ newValue: s.value, newSelection: s.selection }) } e.history = { index: 0, stack: [] }, e.onChange = () => { let { history: t } = e; 0 === t.stack.length && (t.stack = [a(e)], t.index = 0), null != e.selection && (i.HistoryUtils.currentEntry(e).selection = e.selection), I = null, _() }, e.undo = () => { e.history.index > 0 && c(e.history.index - 1) }, e.redo = () => { e.history.index < e.history.stack.length - 1 && c(e.history.index + 1) }; let E = null, I = null, T = null; return e.apply = t => { let { history: s } = e; n(t); let o = r.EditorUtils.richValue(e); o !== T && (0 === s.stack.length && (s.stack = [a(e)], s.index = 0), i.HistoryUtils.isSaving(e) && (function(e, t, n) { let r; let { selection: s } = e, a = i.HistoryUtils.currentEntry(e), o = !0, l = !0; if ("insert_text" === t.type && 1 === t.text.length ? (r = "insert", l = !(("" === t.text || t.text.endsWith(" ")) && (null == n ? void 0 : n.type) === "insert_text" && !("" === n.text && n.text.endsWith(" ")))) : "split_node" === t.type ? r = "insert" : "remove_text" === t.type && 1 === t.text.length ? r = "delete" : (r = "other", o = !1, l = !1), "set_selection" === t.type && null != a) { a.selection = s; return } o && function(e, t) { return !((null == e ? void 0 : e.type) !== t || Date.now() - e.createdAt >= 4e3) && !0 }(a, r) ? i.HistoryUtils.insertOrMergeEntry(e, r, l) : i.HistoryUtils.insertEntry(e, r, l) }(e, t, E), E = t), I = t, T = o) }, e.deleteBackward = t => { i.HistoryUtils.withSingleEntry(e, () => s(t)) }, e.deleteForward = t => { i.HistoryUtils.withSingleEntry(e, () => o(t)) }, e.deleteFragment = t => { i.HistoryUtils.withSingleEntry(e, () => l(t)) }, e.insertText = t => { 1 === t.length && (null == I ? void 0 : I.type) === "remove_text" ? i.HistoryUtils.withMergedEntry(e, () => d(t)) : null != e.selection && r.RangeUtils.isExpanded(e.selection) ? i.HistoryUtils.withSingleEntry(e, () => d(t)) : d(t) }, e.insertData = t => { (null == I ? void 0 : I.type) === "remove_text" ? i.HistoryUtils.withMergedEntry(e, () => u(t)): i.HistoryUtils.withSingleEntry(e, () => u(t)) }, e } function a(e) { return { type: "other", mergeable: !1, createdAt: Date.now(), value: r.EditorUtils.richValue(e), selection: e.selection } } }, 417662: function(e, t, n) { "use strict"; n.r(t), n.d(t, { checkModifiers: function() { return c }, default: function() { return E } }), n("47120"); var i = n("653603"), r = n.n(i), s = n("512722"), a = n.n(s), o = n("53529"), l = n("50659"), u = n("436660"), d = n("887490"), _ = n("981631"); function c(e, t) { let { cmd: n = !1, ctrl: i = !1, alt: r = !1, shift: s = !1 } = t; return (null == n || e.metaKey === n) && (null == i || e.ctrlKey === i) && (null == r || e.altKey === r) && (null == s || e.shiftKey === s) } function E(e) { return e.onKeyDown = t => { var n, i, s, E; let I = e.isMac; switch (t.which) { case _.KeyboardKeys.B: if (!d.EditorUtils.isEditorEmpty(e) && c(t, { ctrl: !I, cmd: I })) return (0, l.toggleMarkdownStyle)(e, "bold"), !0; break; case _.KeyboardKeys.I: if (!d.EditorUtils.isEditorEmpty(e) && c(t, { ctrl: !I, cmd: I })) return (0, l.toggleMarkdownStyle)(e, "italics"), !0; break; case _.KeyboardKeys.U: if (!d.EditorUtils.isEditorEmpty(e) && c(t, { ctrl: !I, cmd: I })) return (0, l.toggleMarkdownStyle)(e, "underline"), !0; break; case _.KeyboardKeys.S: if (!d.EditorUtils.isEditorEmpty(e) && c(t, { ctrl: !I, cmd: I, shift: !0 })) return (0, l.toggleMarkdownStyle)(e, "strikethrough"), !0; break; case _.KeyboardKeys.TAB: if (null != e.selection && c(t, { shift: null })) { let [i, r] = d.RangeUtils.edges(e.selection), s = d.EditorUtils.blocks(e).slice(i.path[0], r.path[0] + 1), a = !0; for (let [e] of s) if ("line" !== e.type || !(null === (n = e.codeBlockState) || void 0 === n ? void 0 : n.isInCodeBlock)) { a = !1; break } if (a) { if (!t.shiftKey && d.RangeUtils.isCollapsed(e.selection)) return u.SlateTransforms.insertText(e, " "), !0; let n = !t.shiftKey; return o.HistoryUtils.withSingleEntry(e, () => { var t, i, r, a; let o = null !== (r = null === (t = e.selection) || void 0 === t ? void 0 : t.anchor) && void 0 !== r ? r : d.EditorUtils.start(e, []), l = null !== (a = null === (i = e.selection) || void 0 === i ? void 0 : i.focus) && void 0 !== a ? a : d.EditorUtils.end(e, []); for (let [t, i] of s) { let r = t.children[0]; if (!d.TextUtils.isText(t.children[0])) continue; let s = d.PathUtils.child(i, 0), a = { path: s, offset: 0 }; if (n) u.SlateTransforms.insertText(e, " ", { at: a }), d.PathUtils.equals(o.path, s) && 0 !== o.offset && (o = { path: s, offset: o.offset + 2 }), d.PathUtils.equals(l.path, s) && 0 !== l.offset && (l = { path: s, offset: l.offset + 2 }); else if (r.text.startsWith(" ")) { let t = { path: d.PathUtils.child(i, 0), offset: 2 }; u.SlateTransforms.delete(e, { at: { anchor: a, focus: t } }), d.PathUtils.equals(o.path, s) && (o = { path: s, offset: Math.max(0, o.offset - 2) }), d.PathUtils.equals(l.path, s) && (l = { path: s, offset: Math.max(0, l.offset - 2) }) } } u.SlateTransforms.select(e, { anchor: o, focus: l }) }), !0 } } break; case _.KeyboardKeys.ARROW_LEFT: case _.KeyboardKeys.ARROW_RIGHT: { let n, a; if (c(t, { shift: null })) n = "character"; else if (c(t, { ctrl: !I, alt: I, shift: null })) n = "word"; else if (I && c(t, { cmd: !0, shift: null })) return !1; else return !1; t.shiftKey && (a = "focus"); let o = e.children[null !== (E = null === (s = e.selection) || void 0 === s ? void 0 : null === (i = s.focus) || void 0 === i ? void 0 : i.path[0]) && void 0 !== E ? E : 0], l = "rtl" === r()(d.NodeUtils.string(o)), T = t.which === _.KeyboardKeys.ARROW_LEFT == !l; return u.SlateTransforms.keyboardMove(e, { reverse: T, unit: n, edge: a }), !0 } case _.KeyboardKeys.A: if (I && c(t, { ctrl: !0 })) { let t = d.EditorUtils.getCurrentBlock(e); if (null != t) { let [, n] = t, i = { path: d.PathUtils.child(n, 0), offset: 0 }; return u.SlateTransforms.select(e, { anchor: i, focus: i }), !0 } } break; case _.KeyboardKeys.E: if (I && c(t, { ctrl: !0 })) { let t = d.EditorUtils.getCurrentBlock(e); if (null != t) { let [n, i] = t, r = d.PathUtils.child(i, n.children.length - 1), [s] = d.EditorUtils.node(e, r), a = { path: r, offset: s.text.length }; return u.SlateTransforms.select(e, { anchor: a, focus: a }), !0 } } break; case _.KeyboardKeys.BACKSPACE: case _.KeyboardKeys.DELETE: case _.KeyboardKeys.K: let T = t.which === _.KeyboardKeys.BACKSPACE; if ((!I && t.which !== _.KeyboardKeys.K && c(t, { ctrl: !0, shift: !0 }) || I && t.which !== _.KeyboardKeys.K && c(t, { cmd: !0 }) || I && t.which === _.KeyboardKeys.K && c(t, { ctrl: !0 })) && null != e.selection) { let [t, n] = d.RangeUtils.edges(e.selection), [i, r] = d.EditorUtils.node(e, [T ? t.path[0] : n.path[0]]); if (a()(d.ElementUtils.isElement(i) && d.EditorUtils.isBlock(e, i), "Top-most node of selection is not a block"), T && !d.PointUtils.isAtStart(t, [i, r]) || !T && !d.PointUtils.isAtEnd(n, [i, r])) return T ? e.deleteBackward("line") : e.deleteForward("line"), !0 } } return !1 }, e } }, 847302: function(e, t, n) { "use strict"; n.r(t), n.d(t, { convertRawToInlineVoids: function() { return N }, default: function() { return S }, run: function() { return h } }), n("47120"), n("653041"); var i = n("512722"), r = n.n(i), s = n("911969"), a = n("998698"), o = n("465343"), l = n("53529"), u = n("341702"), d = n("925994"), _ = n("436660"), c = n("887490"); let E = /(@[^@#]+(?:#0|#\d{4}))|(@[^\s\t@#:]+)(?=[\s\t@:])|(:[a-zA-Z0-9_~]+:)|(#"(?:\ |\\\\|\\"|(?!")\w)+")|(#[^\s\t@#:]+(?=[\s\t@#:]))/g, I = new Set(["emoji", "customEmoji", "textMention", "userMention", "roleMention", "channelMention", "staticRouteLink", "soundboard", "timestamp"]), T = new Set(["line", "blockQuote"]), f = new Set(["applicationCommandOption"]); function S(e, t, n) { let { isInline: i, isVoid: r, onChange: s } = e; e.isVoid = e => !!I.has(e.type) || r(e), e.isInline = e => !!I.has(e.type) || i(e); let a = null, o = !0; return e.onChange = () => { let i = c.EditorUtils.richValue(e); (i !== a || e.previewMarkdown !== o) && (l.HistoryUtils.withMergedEntry(e, () => { c.EditorUtils.withoutNormalizing(e, () => h(e, t, n)) }), a = i, o = e.previewMarkdown), s() }, e } function h(e, t, n) { let i = c.EditorUtils.areStylesDisabled(e); for (let r of c.EditorUtils.blocks(e)) if (T.has(r[0].type)) i ? m(e, r, !0, null) : A(e, r, t, n); else { let [s, a] = r; for (let r = s.children.length - 1; r >= 0; r--) { let o = s.children[r]; if (f.has(o.type)) { let s = [o, c.PathUtils.child(a, r)]; i ? m(e, s, !0, null) : A(e, s, t, n) } } } } function A(e, t, n, i) { var s; let a = "line" === t[0].type && (null === (s = t[0].codeBlockState) || void 0 === s ? void 0 : s.isInCodeBlock) === !0, l = c.ElementUtils.markdown(t[0], n); m(e, t, a, l) && (t = c.ElementUtils.updateElement(e, t), l = c.ElementUtils.markdown(t[0], n)), !a && (N(e, t, i, l) && (t = c.ElementUtils.updateElement(e, t), l = c.ElementUtils.markdown(t[0], n)), function(e, t, n, i, s) { let [a, l] = t, u = !1; for (let d = a.children.length - 1; d >= 0; d--) { let I; let T = a.children[d]; if (!c.TextUtils.isText(T)) continue; let f = c.PathUtils.child(l, d), S = []; for (E.lastIndex = 0; null != (I = E.exec(T.text));) { if (0 !== I.index && null == T.text.charAt(I.index - 1).match(/(\t|\s)/)) { E.lastIndex = I.index + 1; continue } if (p(e, l, { path: f, offset: I.index }, s)) continue; let r = (0, o.resolvePlaintextInlineVoid)(I[0], n, i); null != r && O(i, t[0], r) ? S.push({ index: I.index, length: I[0].length, node: r }) : E.lastIndex = I.index + 1 } for (let t of S.reverse())(function(e, t, n, i, s) { let [a, o] = t, l = { path: o, offset: n }, u = { path: o, offset: n + i }; r()(l.offset >= 0 && l.offset <= a.text.length, "Failed to find valid start position for raw mention replace"), r()(u.offset >= 0 && u.offset <= a.text.length, "Failed to find valid end position for raw mention replace"), _.SlateTransforms.textToVoid(e, s, { anchor: l, focus: u }) })(e, [T, c.PathUtils.child(l, d)], t.index, t.length, t.node), u = !0 }; }(e, t, n, i, l)) } function m(e, t, n, i) { let [r, s] = t, a = !1; for (let t = r.children.length - 1; t >= 0; t--) { let o = r.children[t], l = t < r.children.length - 1 ? r.children[t + 1] : null; if (c.TextUtils.isText(o) && !n) { if (null == l || !e.isVoid(l)) continue; let n = !1, i = 0; for (;;) { let e = o.text.indexOf("\\", i); if (-1 === e) break; if (e === o.text.length - 1) { n = !0; break } i = e + 2 } if (n) { let n = c.PathUtils.child(s, t + 1); _.SlateTransforms.voidToText(e, (0, d.serializeDescendant)(l, { mode: "plain", preventEmojiSurrogates: !0 }), n), a = !0 } } else if (e.isVoid(o)) { let r = c.PathUtils.child(s, t), l = { path: c.PathUtils.child(r, 0), offset: 0 }; (n || null != i && p(e, s, l, i)) && (_.SlateTransforms.voidToText(e, (0, d.serializeDescendant)(o, { mode: "plain", preventEmojiSurrogates: !0 }), r), a = !0) } } return a } function N(e, t, n, i) { let r = t[1], s = !1, a = [...i.entries].reverse(); for (let o = 0; o < a.length; o++) { let l; let d = a[o], c = a[o + 1]; if (null != c && c.text.endsWith("\\") && d.start === c.start + c.text.length) continue; switch (d.attributes[0]) { case "emoji": l = { type: "emoji", emoji: { name: d.data.name, src: d.data.src, surrogate: d.data.surrogate, jumboable: !0 === d.data.jumboable }, children: [{ text: "" }] }; break; case "customEmoji": l = { type: "customEmoji", emoji: { emojiId: d.data.emojiId, name: d.data.name, animated: d.data.animated, jumboable: !0 === d.data.jumboable }, children: [{ text: "" }] }; break; case "textMention": l = { type: "textMention", name: d.data.text, children: [{ text: "" }] }; break; case "mention": l = { type: "userMention", userId: d.data.id, children: [{ text: "" }] }; break; case "roleMention": l = { type: "roleMention", roleId: d.data.id, children: [{ text: "" }] }; break; case "channelMention": l = { type: "channelMention", channelId: d.data.id, children: [{ text: "" }] }; break; case "staticRouteLink": l = { type: "staticRouteLink", channelId: d.data.id, children: [{ text: "" }] }; break; case "soundboard": l = { type: "soundboard", soundId: d.data.id, children: [{ text: "" }] }; break; case "timestamp": l = { type: "timestamp", parsed: d.data, children: [{ text: "" }] }; break; default: continue } if (!O(n, t[0], l)) continue; let E = (0, u.getPointFromPosition)(e, r, i.serializedChildren, d.start), I = (0, u.getPointFromPosition)(e, r, i.serializedChildren, d.start + d.text.length); _.SlateTransforms.textToVoid(e, l, { anchor: E, focus: I }), s = !0 } return s } function p(e, t, n, i) { let r = 0; for (let [i, s] of c.EditorUtils.nodes(e, { at: { anchor: c.EditorUtils.start(e, t), focus: n }, mode: "lowest" })) c.TextUtils.isText(i) ? c.PathUtils.equals(s, n.path) ? r += n.offset : r += i.text.length : r += 1; for (let e of i.entries) { if (!e.attributes.includes("codeBlockText") && !e.attributes.includes("inlineCode")) continue; let t = e.start, n = e.start + e.text.length; if (t <= r && n >= r) return !0 } return !1 } function O(e, t, n) { if ("applicationCommandOption" !== t.type) return !0; switch (t.optionType) { case s.ApplicationCommandOptionType.CHANNEL: return "channelMention" === n.type; case s.ApplicationCommandOptionType.ROLE: return "roleMention" === n.type || "textMention" === n.type && "@everyone" === n.name; case s.ApplicationCommandOptionType.USER: return "userMention" === n.type; case s.ApplicationCommandOptionType.MENTIONABLE: return "roleMention" === n.type || "userMention" === n.type || "textMention" === n.type && "@everyone" === n.name; case s.ApplicationCommandOptionType.STRING: { let n = null != e ? a.default.getOption(e, t.optionName) : null; return (null == n ? void 0 : n.choices) == null && (null == n ? void 0 : n.autocomplete) !== !0 } default: return !1 } } }, 374157: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"), n("571269"), n("298267"); var i = n("327432"), r = n("436660"), s = n("887490"); function a(e) { let { apply: t, deleteBackward: n, deleteForward: a, deleteFragment: l, insertText: d } = e; return e.apply = n => { var i; if ("set_selection" === n.type && (null === (i = e.composition) || void 0 === i ? void 0 : i.startedInsideInline) && s.RangeUtils.isRange(n.properties) && s.RangeUtils.isRange(n.newProperties) && s.RangeUtils.isCollapsed(n.newProperties)) { let t = s.EditorUtils.getParentInline(e, n.properties), i = s.EditorUtils.getParentInline(e, n.newProperties); if (null != t && (null == i || !s.PathUtils.equals(t[1], i[1]))) return } t(n) }, e.insertText = t => { if (null != e.selection && null != s.EditorUtils.getCurrentInline(e)) { r.SlateTransforms.insertText(e, t); return } d(t) }, e.deleteBackward = t => { !o(e, t, !0) && n(t) }, e.deleteForward = t => { !o(e, t, !1) && a(t) }, e.deleteFragment = t => { if (null != e.selection && s.RangeUtils.isExpanded(e.selection)) { var n, i, a, o; let u = e.selection.anchor, d = e.selection.focus, _ = s.EditorUtils.getParentInline(e, u), c = s.EditorUtils.getParentInline(e, d); if (null != _ && null != c && s.PathUtils.equals(_[1], c[1])) { l(t); return } let E = s.RangeUtils.isForward(e.selection); if (null != _) { let [, t] = _, [r, a] = s.EditorUtils.edges(e, t); E && s.PointUtils.equals(u, r) ? u = null !== (n = s.EditorUtils.before(e, r)) && void 0 !== n ? n : s.EditorUtils.start(e, []) : !E && s.PointUtils.equals(u, a) && (u = null !== (i = s.EditorUtils.after(e, a)) && void 0 !== i ? i : s.EditorUtils.end(e, [])) } if (null != c) { let [, t] = c, [n, i] = s.EditorUtils.edges(e, t); !E && s.PointUtils.equals(d, n) ? d = null !== (a = s.EditorUtils.before(e, n)) && void 0 !== a ? a : s.EditorUtils.start(e, []) : E && s.PointUtils.equals(d, i) && (d = null !== (o = s.EditorUtils.after(e, i)) && void 0 !== o ? o : s.EditorUtils.end(e, [])) } r.SlateTransforms.delete(e, { at: { anchor: u, focus: d }, reverse: "backward" === t, select: !0 }); return } l(t) }, i.Editor.positions = u, e } function o(e, t, n) { let i = s.EditorUtils.getCurrentInline(e), a = s.EditorUtils.getCurrentBlock(e), o = s.RangeUtils.toPoint(e.selection); if (null == o || null == a || "block" === t) return !0; if ("line" === t && null == i) return !1; let l = i; if (null == l) { let t = (n ? s.EditorUtils.before : s.EditorUtils.after)(e, o); null != t && null != (l = s.EditorUtils.getParentInline(e, t)) && (o = t) } if (null != l) { let [i, a] = l; if (s.EditorUtils.isEmpty(e, i) || s.EditorUtils.isVoid(e, i)) r.SlateTransforms.removeInline(e, a); else { let [i, l] = s.EditorUtils.edges(e, a); r.SlateTransforms.delete(e, { at: o, unit: t, reverse: n, select: !0, bounds: { anchor: i, focus: l } }) } return !0 } let u = !1; if (null != a) { let [, t] = a, [i, r] = s.EditorUtils.edges(e, t); u = n && s.PointUtils.equals(o, i) || !n && s.PointUtils.equals(o, r) } if ("word" === t && !u) { let i = s.EditorUtils.getCurrentText(e); if (null != i) { let [, a] = i, [l, u] = s.EditorUtils.edges(e, a); return r.SlateTransforms.delete(e, { at: o, unit: t, reverse: n, select: !0, bounds: { anchor: l, focus: u } }), !0 } } return r.SlateTransforms.delete(e, { at: o, unit: t, reverse: n, select: !0 }), !0 } let l = i.Editor.positions; function* u(e) { var t, n, i, r, a, o, u, d; let _ = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { at: c = e.selection, unit: E = "offset", reverse: I = !1, voids: T = !1 } = null != _ ? _ : {}; if ("word" !== E) { for (let t of l(e, { ..._, voids: T || "block" === E })) yield t; return } if (null == c) return; let f = s.EditorUtils.range(e, c), [S, h] = s.RangeUtils.edges(f), A = s.EditorUtils.richValue(e), m = I ? -1 : 1, N = null !== (i = null === (t = S.path) || void 0 === t ? void 0 : t[0]) && void 0 !== i ? i : 0, p = null !== (r = null === (n = h.path) || void 0 === n ? void 0 : n[0]) && void 0 !== r ? r : A.length - 1, O = I ? N : p, C = I ? p : N; for (;;) { let t = A[C], n = null !== (u = C === N ? null === (a = S.path) || void 0 === a ? void 0 : a[1] : null) && void 0 !== u ? u : 0, i = null !== (d = C === p ? null === (o = h.path) || void 0 === o ? void 0 : o[1] : null) && void 0 !== d ? d : t.children.length - 1, r = I ? i : n, c = I ? n : i, E = r; for (;;) { let n, i; let r = t.children[E], a = [C, E]; if (n = s.PathUtils.equals(a, S.path) || s.PathUtils.isAncestor(a, S.path) ? !I && s.EditorUtils.isEnd(e, S, a) ? null : S : s.EditorUtils.start(e, a), i = s.PathUtils.equals(a, h.path) || s.PathUtils.isAncestor(a, h.path) ? I && s.EditorUtils.isStart(e, h, a) ? null : h : s.EditorUtils.end(e, a), null != n && null != i) { if (s.TextUtils.isText(r) && 0 === r.text.length) { let e = { path: a, offset: 0 }; yield e, yield e } else if (s.EditorUtils.isInline(e, r) && s.TextUtils.isText(r.children[0]) && 0 === r.children[0].text.length) { let e = { path: s.PathUtils.child(a, 0), offset: 0 }; yield e, yield e } else { let t = { anchor: n, focus: i }; for (let n of l(e, { ..._, at: t })) yield n } } if (E === c) break; E += m } if (C === O) break; C += m } } }, 209073: function(e, t, n) { "use strict"; n.r(t) }, 814011: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("925994"), r = n("436660"), s = n("887490"); function a(e) { return e.setFragmentData = t => { if (null != e.selection) { let n = (0, i.toTextValue)(s.EditorUtils.richValue(e), { mode: "plain", range: e.selection, preventEmojiSurrogates: !0 }); t.setData("text/plain", n) } }, e.insertData = t => { e.insertTextData(t) }, e.insertFragmentData = e => !1, e.insertTextData = t => { let n = t.getData("text/plain"); return 0 !== n.length && (null != e.selection && s.RangeUtils.isExpanded(e.selection) && r.SlateTransforms.delete(e, { at: e.selection }), e.insertText(n), !0) }, e } }, 50607: function(e, t, n) { "use strict"; n.r(t), n.d(t, { withReact: function() { return a } }); var i = n("519953"), r = n("436660"), s = n("887490"); let a = (e, t) => { let { addMark: n, removeMark: a, deleteBackward: o, deleteForward: l, setFragmentData: u, insertData: d, insertFragmentData: _, insertTextData: c } = e; return (e = (0, i.withReact)(e)).addMark = n, e.removeMark = a, e.setFragmentData = u, e.insertData = d, e.insertFragmentData = _, e.insertTextData = c, e.deleteBackward = n => { if ("line" !== n || t) o(n); else { let t = s.DOMUtils.getLineActionRange(e, !0); null != t && r.SlateTransforms.delete(e, { at: t }) } }, e.deleteForward = n => { if ("line" !== n || t) l(n); else { let t = s.DOMUtils.getLineActionRange(e, !1); null != t && r.SlateTransforms.delete(e, { at: t }) } }, e } }, 618136: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("436660"), r = n("887490"), s = n("42530"); function a(e) { let { apply: t, onChange: n } = e; return e.apply = n => { t(n), r.SelectionUtils.isValid(e, e.selection) && (e.lastGoodSelection = e.selection) }, e.onChange = () => { if (!r.SelectionUtils.isValid(e, e.selection) && (e.selection = function(e) { let t; if (r.SelectionUtils.isValid(e, e.lastGoodSelection)) t = e.lastGoodSelection; else { let n = r.EditorUtils.end(e, []); t = { anchor: n, focus: n } } return t }(e)), null != e.selection) { let t, n, [a, o] = r.RangeUtils.edges(e.selection), l = !1; for (; null != a && null != (t = r.EditorUtils.getParentVoid(e, a)) && !s.SELECTABLE_VOIDS.includes(t[0].type);) a = r.EditorUtils.before(e, a, { unit: "offset" }), l = !0; for (; null != o && null != (n = r.EditorUtils.getParentVoid(e, o)) && !s.SELECTABLE_VOIDS.includes(n[0].type);) o = r.EditorUtils.after(e, o, { unit: "offset" }), l = !0; l && null != a && null != o && (r.RangeUtils.isForward(e.selection) ? i.SlateTransforms.select(e, { anchor: a, focus: o }) : i.SlateTransforms.select(e, { anchor: o, focus: a })) } n() }, e } }, 247765: function(e, t, n) { "use strict"; function i(e) { let { isInline: t, isVoid: n } = e; return e.isInline = e => "testInline" === e.type || "testInlineVoid" === e.type || t(e), e.isVoid = e => "testInlineVoid" === e.type || n(e), e } n.r(t), n.d(t, { default: function() { return i } }) }, 15559: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return i } }); function i(e, t, n) { let { onChange: i } = e, r = !1, s = !1; return e.onChange = () => { if (r) { s = !0; return } r = !0; try { let e = 0; do { if (s = !1, e++ >= 5) break; null == t || t(); try { i() } finally { null == n || n() } } while (s) } finally { r = !1 } }, e } }, 657198: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("519953"), l = n("442837"), u = n("911969"), d = n("998698"), _ = n("703558"), c = n("117530"), E = n("91313"), I = n("436660"), T = n("887490"), f = n("689938"), S = n("697692"); function h(e, t, n) { let { attributes: r, children: s, element: a } = t; switch (a.type) { case "applicationCommand": let o = d.default.getActiveCommand(n), l = 0, u = 0; if (null != o && o.id === a.command.id) { var _; let t = E.getOptionNames(e); for (let e of null !== (_ = o.options) && void 0 !== _ ? _ : []) t.includes(e.name) ? u++ : l++ } let c = {}; if (l > 0) { let e; e = u > 0 ? f.default.Messages.COMMANDS_OPTIONAL_COUNT_REMAINING.format({ count: l }) : f.default.Messages.COMMANDS_OPTION_COUNT.format({ count: l }), c["data-trailing-placeholder"] = e } return (0, i.jsx)("div", { className: S.applicationCommand, ...r, ...c, children: s }); case "applicationCommandOption": return (0, i.jsx)(A, { attributes: r, channelId: n, element: a, children: s }); default: return null } } let A = e => { let t, { channelId: n, element: s, attributes: E, children: h } = e, A = (0, o.useSelected)(), m = (0, o.useFocused)(), N = (0, o.useSlateStatic)(), { optionType: p, errored: O } = (0, l.useStateFromStoresObject)([d.default], () => { var e, t, i; return { optionType: null === (e = d.default.getOption(n, s.optionName)) || void 0 === e ? void 0 : e.type, errored: (null === (i = d.default.getOptionState(n, s.optionName)) || void 0 === i ? void 0 : null === (t = i.lastValidationResult) || void 0 === t ? void 0 : t.success) !== !0 } }, [n, s.optionName]), C = (0, l.useStateFromStores)([c.default], () => c.default.getUpload(n, s.optionName, _.DraftType.SlashCommand), [n, s.optionName]), R = s.children[s.children.length - 1], g = null != R && T.TextUtils.isText(R) && R.text.endsWith("\n"), L = a()(S.inlineElement, S.optionPill, { [S.selectedPill]: m && A, [S.erroredPill]: (!m || !A) && O }), v = r.useCallback(() => { !T.EditorUtils.isVoid(N, s) && I.SlateTransforms.selectCommandOption(N, s.optionName, !0) }, [N, s]); return t = p === u.ApplicationCommandOptionType.ATTACHMENT ? (null == C ? void 0 : C.filename) != null ? (0, i.jsxs)("span", { className: a()(S.optionPillValue, S.attachmentFilename), contentEditable: !1, children: [C.filename, h] }) : (0, i.jsxs)("span", { className: a()(S.optionPillValue, S.readonlyPillValue), contentEditable: !1, children: [f.default.Messages.APPLICATION_COMMAND_FILE_ATTACHMENT, h] }) : (0, i.jsxs)("span", { className: S.optionPillValue, children: [h, g ? (0, i.jsx)("span", { className: S.newLine, contentEditable: !1 }) : null] }), (0, i.jsxs)("span", { ...E, className: L, children: [(0, i.jsxs)("span", { className: S.optionPillKey, contentEditable: !1, onClick: v, children: [s.optionDisplayName, "​"] }), t, (0, i.jsx)("span", { contentEditable: !1, children: "​" })] }) } }, 321127: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("697692"); function o(e) { let { attributes: t, children: n, leaf: r, text: o } = e; if (r.commandName) { let e = s()(a.commandName, { [a.emptyText]: "" === o.text }); return (0, i.jsx)("span", { ...t, className: e, spellCheck: !1, children: n }) } return null } }, 704875: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("845537"), o = n("653309"), l = n("453875"), u = n("697692"), d = n("946278"); function _(e, t, n) { var r, u; let { attributes: _, children: E, element: I, decorations: T } = e, f = function(e) { return Object.entries(e).filter(e => { let [t] = e; return "anchor" !== t && "focus" !== t }).map(e => { let [t, n] = e; return !0 === n && t in o.cssClasses ? o.cssClasses[t] : null }).filter(e => null != e).join(" ") }(null !== (r = null == T ? void 0 : T[0]) && void 0 !== r ? r : {}); switch (I.type) { case "line": if (null === (u = I.codeBlockState) || void 0 === u ? void 0 : u.isInCodeBlock) return (0, i.jsx)("div", { className: l.codeLine, spellCheck: null == I.codeBlockState || null == I.codeBlockState.lang, ..._, children: E }); return (0, i.jsx)("div", { ..._, children: E }); case "blockQuote": { let e = s()(d.blockquoteContainer, d.slateBlockquoteContainer); return (0, i.jsxs)("div", { ..._, className: e, children: [(0, i.jsx)("span", { contentEditable: !1, className: d.blockquoteDivider }), (0, i.jsx)("blockquote", { children: E })] }) } case "emoji": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.Emoji, { emoji: I.emoji }), E] }); case "customEmoji": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.CustomEmoji, { emoji: I.emoji }), E] }); case "textMention": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.TextMention, { text: I.name, channelId: n, guildId: t }), E] }); case "userMention": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.UserMention, { id: I.userId, channelId: n, guildId: t }), E] }); case "roleMention": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.RoleMention, { id: I.roleId, guildId: t }), E] }); case "channelMention": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.ChannelMention, { id: I.channelId }), E] }); case "staticRouteLink": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.StaticRouteMention, { id: I.channelId }), E] }); case "soundboard": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.SoundboardMention, { id: I.soundId }), E] }); case "commandMention": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.CommandMention, { text: I.commandName, id: I.commandId }), E] }); case "timestamp": return (0, i.jsxs)(c, { attributes: _, className: f, children: [(0, i.jsx)(a.Timestamp, { timestamp: I.parsed }), E] }); default: return null } } let c = e => { let { className: t, attributes: n, children: r } = e, a = s()(u.inlineElement, u.inlineVoid, t); return (0, i.jsx)("span", { ...n, className: a, contentEditable: !1, children: r }) } }, 653309: function(e, t, n) { "use strict"; n.r(t), n.d(t, { cssClasses: function() { return d }, default: function() { return _ } }), n("47120"), n("390547"), n("411104"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("887490"), o = n("453875"), l = n("697692"), u = n("223697"); let d = { strong: o.bold, em: o.italics, u: o.underline, s: o.strikethrough, inlineCode: o.inlineCode, link: o.fakeLink, url: o.fakeLink, autolink: o.fakeLink, spoiler: s()(u.spoilerContent, u.spoilerMarkdownContent, u.obscuredTextContent, o.spoiler), staticRouteLink: o.fakeLink, syntaxBefore: o.syntaxBefore, syntaxAfter: o.syntaxAfter, codeBlockText: o.codeBlockText, codeBlockSyntax: o.codeBlockSyntax, codeBlockLang: o.codeBlockLang, subtext: o.subtext }; function _(e, t) { let n; let { attributes: r, children: u, leaf: _, text: c } = t, E = !1, [I] = a.EditorUtils.node(e, a.PathUtils.parent(a.EditorUtils.findPath(e, c))); switch (a.EditorUtils.isEditor(I) ? "editor" : I.type) { case "line": case "blockQuote": { E = void 0; let e = Object.entries(_).filter(e => { let [t] = e; return "text" !== t }).flatMap(e => { let [t, n] = e; if ("hljsTypes" === t) return n; if (!0 === n) { if (("codeBlockLang" === t || "codeBlockSyntax" === t) && (E = !1), t.startsWith("before_") || t.startsWith("after_")) return [o[t]]; if (t in d) return [d[t]]; throw Error("Slate: Unknown decoration attribute: ".concat(t)) } }).filter(e => null != e).join(" "); n = s()(e, { [o.syntaxOverride]: "||" === _.text || "\\" === _.text }) } } return n = s()(n, { [l.emptyText]: "" === c.text }), (0, i.jsx)("span", { ...r, className: n, spellCheck: E, children: u }) } }, 447525: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("757143"), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("660199"), a = n("163758"); function o(e, t) { if (!("type" in e)) return null; if ("timestamp" === e.type) return (0, i.jsx)(l, { ...t, timestamp: e.parsed }); return null } function l(e) { var t; let { timestamp: n, replace: o } = e, l = e => { let { timestamp: t, format: i } = e, r = null != t ? Math.floor(t.getTime() / 1e3) : n.timestamp, a = null != i ? i : n.format; o((0, s.unparseTimestamp)(r, a)) }; return (0, i.jsxs)("div", { className: a.container, children: [(0, i.jsx)(r.DateInput, { value: n.parsed, onSelect: e => { l({ timestamp: e.toDate() }) } }), (0, i.jsx)(r.TimeInput, { value: n.parsed, onChange: e => { l({ timestamp: e.toDate() }) } }), (0, i.jsx)(r.RadioGroup, { options: Object.entries(s.TIMESTAMP_FORMATS).map(e => { let [t, i] = e; return { name: i(n.parsed), value: t } }), value: null !== (t = n.format) && void 0 !== t ? t : s.DEFAULT_TIMESTAMP_FORMAT, size: r.RadioGroup.Sizes.SMALL, onChange: e => { let { value: t } = e; l({ format: t }) } })] }) } }, 556766: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("392711"), a = n.n(s), o = n("207561"), l = n("920906"), u = n("442837"), d = n("317381"), _ = n("966302"), c = n("378364"), E = n("197344"), I = n("474873"), T = n("292959"), f = n("944486"), S = n("246946"), h = n("340895"), A = n("557177"), m = n("918559"), N = n("871465"); let p = { transform: "scale(0.7)", opacity: 0 }, O = { transform: "scale(1)", opacity: 1 }; t.default = () => { let { connectedActivityChannelId: e, activityPanelMode: t } = (0, u.useStateFromStoresObject)([d.default], () => ({ connectedActivityChannelId: d.default.getConnectedActivityChannelId(), activityPanelMode: d.default.getActivityPanelMode() })), { currentChannelId: n, selectedVoiceChannelId: s } = (0, u.useStateFromStoresObject)([f.default], () => ({ currentChannelId: f.default.getChannelId(), selectedVoiceChannelId: f.default.getVoiceChannelId() })), C = (0, u.useStateFromStoresArray)([h.default], () => h.default.getIncomingCalls().filter(i => { let { channel: r } = i, a = e === r.id && s !== r.id && t === m.ActivityPanelModes.PANEL; return n !== r.id || a })), R = (0, u.useStateFromStores)([h.default], () => h.default.hasIncomingCalls()), g = (0, u.useStateFromStores)([T.default], () => T.default.isSoundDisabled("call_ringing")), L = E.default.useIsRingtoneEligible(), v = E.default.useIsRingtoneDisabled(), D = (0, u.useStateFromStores)([S.default], () => S.default.disableSounds), M = (0, u.useStateFromStores)([I.default], () => I.default.getSoundpack()), y = r.useRef(!1), P = (0, o.useStableMemo)(() => { let e = "call_ringing"; return L && !v ? (0, A.createSound)(c.default.ringtone, e) : M === N.Soundpacks.CLASSIC ? (0, A.createSound)(500 !== a().random(1, 1e3) ? "call_ringing" : a().sample(["call_ringing_beat", "call_ringing_snow_halation"]), e) : (0, A.createSoundForPack)("call_ringing", M) }, [M, v, L]); return r.useEffect(() => () => { P.stop() }, [P]), r.useEffect(() => { if (D || g) { y.current && (P.stop(), y.current = !1); return } R && !y.current ? (P.loop(), y.current = !0) : !R && y.current && (P.stop(), y.current = !1) }, [g, D, R, P]), (0, l.useTransition)(C, { keys: e => { var t; return null === (t = e.channel) || void 0 === t ? void 0 : t.id }, enter: { from: p, to: O }, leave: p, config: { mass: 1, tension: 500, friction: 18, clamp: !0 } })((e, t) => (0, i.jsx)(_.default, { ...t, animatedStyle: e })) } }, 391650: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openClaimAccountModal: function() { return l }, openNewUserAgeGateModal: function() { return o } }); var i = n("735250"); n("470079"); var r = n("952265"), s = n("723359"), a = n("231338"); function o(e) { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("96427"), n.e("20727")]).then(n.bind(n, "298237")); return t => (0, i.jsx)(e, { ...t }) }, { modalKey: s.NEW_USER_AGE_GATE_MODAL_KEY, onCloseRequest: a.NOOP, onCloseCallback: e }) } function l() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], t = arguments.length > 1 ? arguments[1] : void 0; (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("69495")]).then(n.bind(n, "324239")); return n => (0, i.jsx)(t, { claimRequired: e, ...n }) }, { onCloseRequest: e ? a.NOOP : null, onCloseCallback: t }) } }, 931240: function(e, t, n) { "use strict"; n.r(t), n.d(t, { adoptClanIdentity: function() { return c }, convertGuildToClan: function() { return d }, disableClan: function() { return A }, fetchClanSettings: function() { return S }, getClanInfo: function() { return _ }, joinWumpusFeedbackSquad: function() { return m }, resetClanSetup: function() { return E }, saveClanSettings: function() { return h }, updateClanSettings: function() { return T }, updateClanSetup: function() { return I } }), n("47120"); var i = n("544891"), r = n("570140"), s = n("479531"), a = n("314897"), o = n("970606"), l = n("981631"), u = n("976757"); async function d(e, t) { r.default.dispatch({ type: "CLAN_SETUP_SUBMIT", guildId: e }); try { var n, a, o, u; await i.HTTP.post({ url: l.Endpoints.GUILD_CONVERT_TO_CLAN(e), body: { tag: t.tag, description: t.description, play_style: t.playstyle, search_terms: Array.from(null !== (a = t.interests) && void 0 !== a ? a : new Set), game_application_ids: Array.from(null !== (o = t.gameApplicationIds) && void 0 !== o ? o : new Set), verification_form: { form_fields: null !== (u = null === (n = t.verificationForm) || void 0 === n ? void 0 : n.formFields) && void 0 !== u ? u : [] }, badge: t.badgeKind, badge_color_primary: t.badgePrimaryColor, badge_color_secondary: t.badgeSecondaryColor, banner: t.banner, brand_color_primary: t.brandPrimaryColor, brand_color_secondary: t.brandSecondaryColor, wildcard_descriptors: t.wildcardDescriptors } }), r.default.dispatch({ type: "CLAN_SETUP_SUCCESS", guildId: e }) } catch (t) { throw r.default.dispatch({ type: "CLAN_SETUP_ERROR", guildId: e, error: new s.default(t) }), t } } async function _(e) { let t = await i.HTTP.get({ url: l.Endpoints.GUILD_CLAN_DISCOVERY_INFO(e) }); return (0, u.buildClanFromServer)(t.body) } async function c(e, t, n) { try { null != e && !0 === t && (0, o.trackClanAdoptIdentity)({ guildId: e, userId: a.default.getId(), source: n }); let s = await i.HTTP.put({ url: l.Endpoints.USER_SET_CLAN_IDENTITY, body: { identity_guild_id: e, identity_enabled: t } }); r.default.dispatch({ type: "CURRENT_USER_UPDATE", user: s.body }) } catch (e) { return } } function E() { r.default.dispatch({ type: "CLAN_SETUP_RESET" }) } function I(e, t) { r.default.dispatch({ type: "CLAN_SETUP_UPDATE", guildId: e, updates: t }) } function T(e, t) { r.default.dispatch({ type: "CLAN_SETTINGS_UPDATE", guildId: e, updates: t }) } let f = e => { var t, n, i, r, s, a; return { tag: e.tag, gameApplicationIds: new Set(null !== (i = e.game_application_ids) && void 0 !== i ? i : []), interests: new Set(null !== (r = e.search_terms) && void 0 !== r ? r : []), playstyle: e.play_style, description: e.description, wildcardDescriptors: e.wildcard_descriptors, verificationForm: { description: null !== (s = null === (t = e.verification_form) || void 0 === t ? void 0 : t.description) && void 0 !== s ? s : "", formFields: null !== (a = null === (n = e.verification_form) || void 0 === n ? void 0 : n.form_fields) && void 0 !== a ? a : [], version: "" }, badgeKind: e.badge, badgePrimaryColor: e.badge_color_primary, badgeSecondaryColor: e.badge_color_secondary, banner: e.banner, brandPrimaryColor: e.brand_color_primary, brandSecondaryColor: e.brand_color_secondary } }; async function S(e) { r.default.dispatch({ type: "CLAN_SETTINGS_FETCH_START" }); let t = await i.HTTP.get({ url: l.Endpoints.CLAN_SETTINGS(e) }); r.default.dispatch({ type: "CLAN_SETTINGS_FETCH_SUCCESS", guildId: e, settings: f(t.body) }) } async function h(e, t) { r.default.dispatch({ type: "CLAN_SETTINGS_SUBMIT", guildId: e }); try { var n, a, o, u; let s = await i.HTTP.patch({ url: l.Endpoints.CLAN_SETTINGS(e), body: { tag: t.tag, description: t.description, play_style: t.playstyle, search_terms: Array.from(null !== (a = t.interests) && void 0 !== a ? a : new Set), game_application_ids: Array.from(null !== (o = t.gameApplicationIds) && void 0 !== o ? o : new Set), verification_form: { form_fields: null !== (u = null === (n = t.verificationForm) || void 0 === n ? void 0 : n.formFields) && void 0 !== u ? u : [] }, badge: t.badgeKind, badge_color_primary: t.badgePrimaryColor, badge_color_secondary: t.badgeSecondaryColor, banner: t.banner, brand_color_primary: t.brandPrimaryColor, brand_color_secondary: t.brandSecondaryColor, wildcard_descriptors: t.wildcardDescriptors } }); return r.default.dispatch({ type: "CLAN_SETTINGS_SUBMIT_SUCCESS" }), s.body } catch (e) { throw r.default.dispatch({ type: "CLAN_SETTINGS_SUBMIT_ERROR", error: new s.default(e) }), e } } async function A(e) { try { await i.HTTP.post({ url: l.Endpoints.DISABLE_CLAN(e) }) } catch (e) { throw e } } async function m(e) { try { await i.HTTP.post({ url: l.Endpoints.JOIN_WUMPUS_FEEDBACK_SQUAD(e) }) } catch (e) { throw e } } }, 970606: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getProgressStepAnalyticsName: function() { return m }, trackClanAdminInviteClicked: function() { return C }, trackClanAdminInviteViewed: function() { return O }, trackClanAdoptIdentity: function() { return E }, trackClanApplicationAction: function() { return D }, trackClanApplicationNavigation: function() { return v }, trackClanApplicationViewed: function() { return M }, trackClanApplyToJoinViewed: function() { return c }, trackClanApplyWaitlist: function() { return y }, trackClanDiscoveryCardClicked: function() { return R }, trackClanDiscoveryViewed: function() { return A }, trackClanProfileViewed: function() { return _ }, trackClanSendInterviewMessage: function() { return L }, trackClanUserInviteClicked: function() { return p }, trackClanUserInviteViewed: function() { return N }, trackConvertStepViewed: function() { return I }, trackConvertSuccessModalConfirm: function() { return h }, trackConvertSuccessModalViewed: function() { return S }, trackMemberVerificationApplicationViewed: function() { return g }, trackSettingsSaved: function() { return f }, trackSettingsViewed: function() { return T } }); var i = n("524437"), r = n("605236"), s = n("314897"), a = n("271383"), o = n("626135"), l = n("308083"), u = n("981631"), d = n("921944"); function _(e) { let { guildId: t, hasJoinRequest: n, source: i, messageId: r, tagUserId: l, location: d } = e, _ = s.default.getId(), c = a.default.getMember(t, s.default.getId()), E = (null == c ? void 0 : c.joinedAt) != null; o.default.track(u.AnalyticEvents.CLAN_PROFILE_VIEWED, { guild_id: t, is_member: E, has_join_request: n, source: i, location: d, viewing_user_id: _, tag_owner_user_id: l, message_id: r }) } function c(e) { let { guildId: t, source: n, location: i, messageId: r, tagUserId: a } = e, l = s.default.getId(); o.default.track(u.AnalyticEvents.CLAN_APPLY_TO_JOIN_VIEWED, { guild_id: t, source: n, location: i, viewing_user_id: l, tag_owner_user_id: a, message_id: r }) } function E(e) { let { guildId: t, userId: n, source: i } = e; o.default.track(u.AnalyticEvents.CLAN_ADOPT_IDENTITY, { guild_id: t, user_id: n, source: i }) } function I(e, t) { o.default.track(u.AnalyticEvents.CLAN_CONVERT_STEP_VIEWED, { guild_id: e, step: t }) } function T(e, t) { o.default.track(u.AnalyticEvents.CLAN_SETTINGS_VIEWED, { guild_id: e, page: t }) } function f(e) { o.default.track(u.AnalyticEvents.CLAN_SETTINGS_SAVED, { guild_id: e }) } function S(e) { o.default.track(u.AnalyticEvents.CLAN_CONVERT_SUCCESS_MODAL_VIEWED, { guild_id: e }) } function h(e, t) { o.default.track(u.AnalyticEvents.CLAN_CONVERT_SUCCESS_MODAL_CONFIRM, { guild_id: e, enable_tag: t }) } function A(e, t, n) { o.default.track(u.AnalyticEvents.CLAN_DISCOVERY_VIEWED, { guild_ids: e, section: t, application_ids: n.games, playstyle: n.playstyle, traits: n.traits }) } function m(e) { switch (e) { case l.ClanSetupSteps.GAMES: return "games"; case l.ClanSetupSteps.PLAYSTYLE: return "playstyle"; case l.ClanSetupSteps.UTILITY_TRAITS: return "utility_traits"; case l.ClanSetupSteps.INTERESTS: return "interests"; case l.ClanSetupSteps.DESCRIPTION: return "description"; case l.ClanSetupSteps.CUSTOMIZE_TAG_BADGE: return "tag"; case l.ClanSetupSteps.CUSTOMIZE_BANNER: return "banner"; case l.ClanSetupSteps.MEMBER_APPLICATION: return "member_application"; default: return e } } function N(e) { let { location: t } = e; o.default.track(u.AnalyticEvents.CLAN_USER_INVITE_VIEWED, { location: t }) } function p(e) { let { location: t } = e; o.default.track(u.AnalyticEvents.CLAN_USER_INVITE_CLICKED, { location: t }) } function O(e) { let { guildId: t, location: n } = e; o.default.track(u.AnalyticEvents.CLAN_ADMIN_INVITE_VIEWED, { guild_id: t, location: n }) } function C(e) { let { guildId: t, location: n } = e; o.default.track(u.AnalyticEvents.CLAN_ADMIN_INVITE_CLICKED, { guild_id: t, location: n }) } function R(e) { let { guildId: t, isMember: n, hasJoinRequest: i, affinity: r, index: s } = e; o.default.track(u.AnalyticEvents.CLAN_DISCOVERY_CARD_CLICKED, { guild_id: t, is_member: n, has_join_request: i, affinity: r, index: s }) } function g(e) { o.default.track(u.AnalyticEvents.MEMBER_VERIFICATION_APPLICATION_VIEWED, { guild_id: e }) } function L(e) { var t; let { guildId: n, messageId: i, channelId: r, joinRequestStatus: l, joinRequestUserId: d } = e, _ = s.default.getId(), c = (null === (t = a.default.getMember(n, _)) || void 0 === t ? void 0 : t.joinedAt) != null; o.default.track(u.AnalyticEvents.CLAN_SEND_INTERVIEW_MESSAGE, { guild_id: n, channel_id: r, message_id: i, message_user_id: _, is_member: c, join_request_status: l, join_request_user_id: d }) } function v(e) { let { guildId: t, source: n, tab: i } = e; o.default.track(u.AnalyticEvents.CLAN_APPLICATION_NAVIGATION, { guild_id: t, source: n, tab: i }) } function D(e) { let { guildId: t, actionType: n, applicationUserId: i } = e; o.default.track(u.AnalyticEvents.CLAN_APPLICATION_ACTION, { guild_id: t, action_type: n, application_user_id: i, viewing_user_id: s.default.getId() }) } function M(e) { let { guildId: t, applicationUserId: n, applicationStatus: i } = e; o.default.track(u.AnalyticEvents.CLAN_APPLICATION_VIEWED, { guild_id: t, viewing_user_id: s.default.getId(), application_user_id: n, application_status: i }) } function y(e) { let { originGuildId: t, tagGuildId: n, tagUserId: a, messageId: l, location: _ } = e; !(0, r.isDismissibleContentDismissed)(i.DismissibleContent.CLAN_TAG_WAITLIST) && (o.default.track(u.AnalyticEvents.CLAN_APPLY_WAITLIST, { user_id: s.default.getId(), origin_guild_id: t, tag_guild_id: n, tag_user_id: a, message_id: l, location: _ }), (0, r.markDismissibleContentAsDismissed)(i.DismissibleContent.CLAN_TAG_WAITLIST, { dismissAction: d.ContentDismissActionType.TAKE_ACTION, forceTrack: !0 })) } }, 116175: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { CLAN_BADGE_NUM_CUSTOMIZABLE_COLORS: function() { return u }, CLAN_BADGE_PALETTE_PRESETS: function() { return s }, CLAN_BADGE_PRIMARY_DEFAULT: function() { return a }, CLAN_BADGE_SECONDARY_DEFAULT: function() { return o }, ClanBadgeKind: function() { return i }, getRandomClanBadgeKind: function() { return d }, getRandomClanBadgePreset: function() { return l } }), (r = i || (i = {}))[r.SWORD = 0] = "SWORD", r[r.WATER_DROP = 1] = "WATER_DROP", r[r.SKULL = 2] = "SKULL", r[r.TOADSTOOL = 3] = "TOADSTOOL", r[r.MOON = 4] = "MOON", r[r.LIGHTNING = 5] = "LIGHTNING", r[r.LEAF = 6] = "LEAF", r[r.HEART = 7] = "HEART", r[r.FIRE = 8] = "FIRE", r[r.COMPASS = 9] = "COMPASS", r[r.CROSSHAIRS = 10] = "CROSSHAIRS", r[r.FLOWER = 11] = "FLOWER", r[r.FORCE = 12] = "FORCE", r[r.GEM = 13] = "GEM", r[r.LAVA = 14] = "LAVA", r[r.PSYCHIC = 15] = "PSYCHIC", r[r.SMOKE = 16] = "SMOKE", r[r.SNOW = 17] = "SNOW", r[r.SOUND = 18] = "SOUND", r[r.SUN = 19] = "SUN", r[r.WIND = 20] = "WIND"; let s = [{ primary: "#ff1c90", secondary: "#ff7fc0" }, { primary: "#32839a", secondary: "#71c2d9" }, { primary: "#568d00", secondary: "#94cf38" }, { primary: "#8a43ff", secondary: "#bd95ff" }, { primary: "#9b3fe5", secondary: "#cc8dff" }, { primary: "#c03f7d", secondary: "#ff80bd" }, { primary: "#d14242", secondary: "#ff8989" }, { primary: "#ff8f1c", secondary: "#ffae77" }, { primary: "#eebe1a", secondary: "#fffc7f" }, { primary: "#92ff7f", secondary: "#27e772" }, { primary: "#32a070", secondary: "#57b59e" }, { primary: "#6d6d6d", secondary: "#737373" }, { primary: "#3f3f3f", secondary: "#555555" }], a = s[0].primary, o = s[0].secondary; function l() { return s[Math.floor(Math.random() * s.length)] } let u = { 0: 2, 1: 1, 2: 1, 3: 2, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 2, 10: 2, 11: 2, 12: 2, 13: 2, 14: 2, 15: 2, 16: 2, 17: 2, 18: 2, 19: 2, 20: 2 }; function d() { let e = Object.keys(i).filter(e => isNaN(Number(e))); return i[e[Math.round(Math.random() * e.length - 1)]] } }, 308083: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AGE_TRAITS: function() { return k }, ALL_TRAITS_SET: function() { return V }, CLAN_BRAND_PALETTE_PRESETS: function() { return W }, CLAN_BRAND_PALETTE_PRESETS_BY_NAME: function() { return Z }, CLAN_BRAND_PRIMARY_DEFAULT: function() { return K }, CLAN_BRAND_SECONDARY_DEFAULT: function() { return z }, CLAN_SETTINGS_MODAL_LAYER_KEY: function() { return m }, CLAN_SETUP_MODAL_LAYER_KEY: function() { return A }, CLAN_WILDCARD_PLACEHOLDERS: function() { return D }, ClanBannerKind: function() { return r }, ClanBrandPresets: function() { return s }, ClanPlaystyles: function() { return T.ClanPlaystyles }, ClanSetupSteps: function() { return i }, ClanTagBadgeSize: function() { return a }, EMPTY_WILDCARD: function() { return v }, FAKE_CLAN_APP_IDS: function() { return J }, GENSHIN_ID: function() { return U }, GENSHIN_TRAITS: function() { return G }, HOISTED_SEARCH_APPLICATION_IDS_BY_PRIORITY: function() { return $ }, IDENTITY_TRAITS: function() { return B }, LANGUAGES_SET: function() { return x }, MAX_CLAN_MEMBERS: function() { return S }, MAX_DESCRIPTION_LENGTH: function() { return R }, MAX_GAMES_TO_DISPLAY: function() { return g }, MAX_INTEREST_LENGTH: function() { return O }, MAX_NUM_INTERESTS: function() { return p }, MAX_NUM_SELECTED_GAMES: function() { return N }, MAX_TAG_LENGTH: function() { return h }, MAX_TRAITS_TO_DISPLAY: function() { return L }, MAX_WILDCARD_LENGTH: function() { return C }, SUGGESTED_TRAITS_SET: function() { return Y }, VALORANT_ID: function() { return P }, VALORANT_TRAITS: function() { return b }, ensureUserClanData: function() { return Q }, getPlaystyleOptions: function() { return y }, getPlaystyleTitle: function() { return M }, getRandomClanBannerKind: function() { return j }, getRandomClanBrandPreset: function() { return X }, getSortedTraits: function() { return H }, isCustomInterest: function() { return F }, toServerClanData: function() { return q } }), n("47120"); var i, r, s, a, o, l, u, d, _ = n("392711"), c = n.n(_), E = n("913527"), I = n.n(E), T = n("137920"), f = n("689938"); let S = 200, h = 4, A = "ClanSetupModal", m = "ClanSettingsModal", N = 20, p = 30, O = 24, C = 12, R = 300, g = 3, L = 5; I()("2024-01-01T00:00:00"); let v = "", D = ["cozy", "crunchy", "chaos"]; function M(e) { switch (e) { case T.ClanPlaystyles.SOCIAL: return f.default.Messages.CLAN_SETUP_PLAYSTYLE_SOCIAL_TITLE; case T.ClanPlaystyles.CASUAL: return f.default.Messages.CLAN_SETUP_PLAYSTYLE_CASUAL_TITLE; case T.ClanPlaystyles.COMPETITIVE: return f.default.Messages.CLAN_SETUP_PLAYSTYLE_COMPETITIVE_TITLE; case T.ClanPlaystyles.VERY_HARDCORE: return f.default.Messages.CLAN_SETUP_PLAYSTYLE_VERY_HARDCORE_TITLE; case T.ClanPlaystyles.CREATIVE: case T.ClanPlaystyles.NONE: default: return null } } function y() { return { [T.ClanPlaystyles.SOCIAL]: { type: T.ClanPlaystyles.SOCIAL, emoji: "\uD83D\uDC4B", title: f.default.Messages.CLAN_SETUP_PLAYSTYLE_SOCIAL_TITLE, subtitle: f.default.Messages.CLAN_SETUP_PLAYSTYLE_SOCIAL_SUBTITLE }, [T.ClanPlaystyles.CASUAL]: { type: T.ClanPlaystyles.CASUAL, emoji: "\uD83C\uDFAE", title: f.default.Messages.CLAN_SETUP_PLAYSTYLE_CASUAL_TITLE, subtitle: f.default.Messages.CLAN_SETUP_PLAYSTYLE_CASUAL_SUBTITLE }, [T.ClanPlaystyles.COMPETITIVE]: { type: T.ClanPlaystyles.COMPETITIVE, emoji: "⚔️", title: f.default.Messages.CLAN_SETUP_PLAYSTYLE_COMPETITIVE_TITLE, subtitle: f.default.Messages.CLAN_SETUP_PLAYSTYLE_COMPETITIVE_SUBTITLE }, [T.ClanPlaystyles.VERY_HARDCORE]: { type: T.ClanPlaystyles.VERY_HARDCORE, emoji: "\uD83D\uDC80", title: f.default.Messages.CLAN_SETUP_PLAYSTYLE_VERY_HARDCORE_TITLE, subtitle: f.default.Messages.CLAN_SETUP_PLAYSTYLE_VERY_HARDCORE_SUBTITLE } } }(o = i || (i = {}))[o.GAMES = 0] = "GAMES", o[o.PLAYSTYLE = 1] = "PLAYSTYLE", o[o.UTILITY_TRAITS = 2] = "UTILITY_TRAITS", o[o.INTERESTS = 3] = "INTERESTS", o[o.DESCRIPTION = 4] = "DESCRIPTION", o[o.CUSTOMIZE_TAG_BADGE = 5] = "CUSTOMIZE_TAG_BADGE", o[o.CUSTOMIZE_BANNER = 6] = "CUSTOMIZE_BANNER", o[o.MEMBER_APPLICATION = 7] = "MEMBER_APPLICATION"; let P = "700136079562375258", U = "762434991303950386", b = ["Server: NA", "Server: EU", "Server: LATAM", "Server: KR", "Server: AP", "Voice ON", "Voice OFF", "Unrated", "All Ranks", "Bronze+", "Silver+", "Gold+", "Platinum+", "Diamond+"], G = ["Server: NA", "Server: EU", "Server: Asia", "Server: TW/HK/MO", "Mondstadt", "Liyue", "Inazuma", "Sumeru", "Fontaine", "F2P", "Spenders", "Co-op", "Support"], w = new Set([...b, ...G]), k = ["20+", "30+", "40+", "All Ages"], B = ["Beginner Friendly", "PUGs", "Inclusive", "Parent Friendly", "Work-life Balance", "Streamers"], V = new Set([...b, ...k, ...B]), x = new Set(["Bulgarian", "Chinese (Simplified)", "Chinese (Traditional)", "Croatian", "Czech", "Danish", "Dutch", "English", "Finnish", "French", "German", "Greek", "Hindi", "Hungarian", "Italian", "Japanese", "Korean", "Lithuanian", "Norwegian", "Polish", "Portuguese", "Romanian", "Russian", "Spanish", "Swedish", "Thai", "Turkish", "Ukrainian", "Vietnamese"]); function F(e) { return !V.has(e) && !Y.has(e) && !x.has(e) } function H(e, t) { var n; return c().sortBy(e, (n = t, e => -(((null == n ? void 0 : n.includes(e)) ? 1 : 0) << 4 | (F(e) ? 1 : 0) << 3 | (w.has(e) ? 1 : 0) << 2 | (k.includes(e) ? 1 : 0) << 1 | (B.includes(e) ? 1 : 0) << 0))) } let Y = new Set(["anime", "fanart", "venting", "movie nights", "pirate shows", "skincare", "microwaved food", "board games", "sci-fi books", "sleeping", "brunch pics", "pet pics", "recipes", "speedrunning", "eating on mic", "k-pop", "deafened", "programming", "study buddies", "DnD", "lore dumping", "sleepy cats", "podcasts", "houseplants", "knitting", "tech", "keyboards", "horses", "bad movies", "hiking", "lo-fi chilling", "watch together", "listen alongs", "late night tacos", "drip", "trading", "travel", "cups", "coffee", "F1", "roman history", "ssense doomscrolling", "skibidi toilet", "capcut editing", "tiktok rizz party", "industrial grade glycine", "frutiger aero", "y2k", "sanrio", "nuzlockes", "small form factor pcs", "esports", "game modding", "chiikawa", "underground rap", "pc music", "homestuck", "horse hoof cleaning", "analog horror", "pimple popping", "asmr", "ya fiction", "fanfiction", "cosplay", "fanart", "zines", "vtubers", "jrpgs", "retro gaming", "collecting", "coquette", "true crime", "critical role", "cottagecore", "goblincore", "renfaire", "letterboxd", "tarot readings", "fortune telling", "magic tricks", "ice cold sprite", "slime", "soap cutting", "mukbang", "premier league", "NBA", "hyperpop", "dance covers", "photocard trading", "toploader decorating", "unboxing", "decoden", "jpop", "mandopop", "cantopop", "amapiano", "ghibli", "pokemon vgc", "subway surfers", "family guy funny moments", "cranking 90s", "friday night funkin", "FNAF"]); function j() { let e = Object.keys(r).filter(e => isNaN(Number(e))); return r[e[Math.round(Math.random() * e.length - 1)]] }(l = r || (r = {}))[l.NIGHT_SKY = 0] = "NIGHT_SKY", l[l.CASTLE = 1] = "CASTLE", l[l.WORLD_MAP = 2] = "WORLD_MAP", l[l.SEA_FOAM = 3] = "SEA_FOAM", l[l.WARP_TUNNEL = 4] = "WARP_TUNNEL", l[l.HOUSE = 5] = "HOUSE", l[l.HEIGHTMAP = 6] = "HEIGHTMAP", l[l.MESH = 7] = "MESH", l[l.SPATTER = 8] = "SPATTER", (u = s || (s = {})).BOULDER = "Boulder", u.CASCADE = "Cascade", u.THUNDER = "Thunder", u.SOUL = "Soul", u.MARSH = "Marsh", u.VOLCANO = "Volcano", u.EARTH = "Earth", u.ZEPHYR = "Zephyr"; let W = [{ name: "Boulder", primary: "#8c8d8d", secondary: "#d0d0d1" }, { name: "Cascade", primary: "#43abe9", secondary: "#8ad3e8" }, { name: "Thunder", primary: "#e8c02f", secondary: "#e8d387" }, { name: "Soul", primary: "#e72282", secondary: "#e875ad" }, { name: "Marsh", primary: "#e86e1d", secondary: "#e89055" }, { name: "Volcano", primary: "#e81d1e", secondary: "#e86868" }, { name: "Earth", primary: "#406601", secondary: "#d3e65e" }, { name: "Zephyr", primary: "#4892d5", secondary: "#78b6f0" }], K = W[0].primary, z = W[0].secondary, Z = Object.fromEntries(W.map(e => [e.name, { primary: e.primary, secondary: e.secondary }])); function X() { return W[Math.floor(Math.random() * W.length)] } function Q(e) { return null == e ? null : "identityGuildId" in e ? e : { identityGuildId: e.identity_guild_id, identityEnabled: e.identity_enabled, tag: e.tag, badge: e.badge } } function q(e) { return { tag: e.tag } } let J = { AGE_OF_EMPIRES_2: "720771660768084008", VALORANT: "700136079562375258", HELLDIVERS_2: "1205090671527071784", APEX: "542075586886107149", LETHAL_COMPANY: "1167674267748540516", SIMS_4: "359509007423242240", ROBLOX: "363445589247131668", BALDURS_GATE_3: "1137125502985961543", AIMLAB: "506950362461110273", HONKAI_STAR_RAIL: "1121201675240210523" }, $ = new Map(["432980957394370572", "363445589247131668", "356869127241072640", "700136079562375258", "356875570916753438", "1158877933042143272", "1197827812623650866", "356876176465199104", "1167674267748540516", "542075586886107149", "356875221078245376", "1149118246826561609", "356877880938070016", "356875988589740042", "762434991303950386", "356873622985506820", "356876590342340608", "1205090671527071784", "1182713227491147776", "631914894446297148", "1137125502985961543", "357607478105604096", "359509007423242240", "1121201675240210523", "643897785271189524", "742897755160313986", "356888738724446208", "1199745463918788740", "1116835216464543946", "406637848297472017", "356888961353908224", "905961880789590076", "367827983903490050", "356944273133928458", "356942674672091136", "946609449680908348", "356875762940379136", "615752773690064908", "357607133254254632", "356943499456937984", "477175586805252107", "787443973538971748", "359508713658253318", "356877880938070016", "422772752647323649", "356954277803065354", "359509387670192128", "428055627030331402", "363447565905166336", "372438022647578634", "614380482620293151", "506950362461110273", "356879032584896512", "1161772875901051042", "535371564850479134", "363413743335374859", "385538724592746496", "426526722322726912", "1174041358995042375", "1124351876033425529", "477152881196269569", "1113966530531704943", "425778010222886912", "356875890958925834", "1124358970618953818", "356888577310851072", "398632010442211348", "1124349969906815007", "770314100885422095", "1080277149623271444", "428054228511227914", "358420454764969994", "358421669603311616", "363430548028522496", "1129504162200166401", "1200228630245159032", "356889262362329098", "356887282982191114", "363409643973771264", "1164697075582238730", "940810636273795162", "982316905262120990", "359510095811444736", "363411421553360896", "359509332490059776", "1162076274622222346", "1162085521816813721", "359507724196773888", "359801269008859136", "569253958967885828", "457301824110723113", "1140238527980916757", "1124353632758939688", "542075586886107149", "512699108809637890", "653432003798106122"].map((e, t, n) => [e, n.length - t])); (d = a || (a = {}))[d.SIZE_12 = 12] = "SIZE_12", d[d.SIZE_16 = 16] = "SIZE_16", d[d.SIZE_24 = 24] = "SIZE_24", d[d.SIZE_32 = 32] = "SIZE_32", d[d.SIZE_36 = 36] = "SIZE_36" }, 963202: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useClanGeneralExperiment: function() { return p }, useClanPilotExperiment: function() { return m }, useClanPrePilotApplicationExperiment: function() { return c }, useClanPrepilotExperimentDefaultGameId: function() { return S }, useClanPrepilotExperimentForAllGuilds: function() { return T }, useClanPrepilotExperimentForGuild: function() { return f } }), n("653041"); var i = n("442837"), r = n("818083"), s = n("430824"), a = n("496675"), o = n("308083"), l = n("981631"); let u = (0, r.createExperiment)({ kind: "user", id: "2024-05_clans_valorant_prepilot", label: "Clans Valorant Prepilot", defaultConfig: { enableClanCreation: !1, defaultGameId: null }, treatments: [{ id: 1, label: "Enable creation of clan guilds - Valorant", config: { enableClanCreation: !0, defaultGameId: o.VALORANT_ID } }] }), d = (0, r.createExperiment)({ kind: "user", id: "2024-05_clans_genshin_prepilot", label: "Clans Genshin Prepilot", defaultConfig: { enableClanCreation: !1, defaultGameId: null }, treatments: [{ id: 1, label: "Enable creation of clan guilds - Genshin", config: { enableClanCreation: !0, defaultGameId: o.GENSHIN_ID } }] }), _ = (0, r.createExperiment)({ kind: "user", id: "2024-05_rapidash_prepilot_applications", label: "Rapidash Prepilot Application Gate", defaultConfig: { enableApplication: !1 }, treatments: [{ id: 1, label: "Enable application of guilds", config: { enableApplication: !0 } }] }); function c(e) { return _.useExperiment({ location: e }, { autoTrackExposure: !1 }) } function E(e) { var t, n; let { valorantConfig: i, genshinConfig: r } = e; return null !== (n = null !== (t = null == r ? void 0 : r.defaultGameId) && void 0 !== t ? t : null == i ? void 0 : i.defaultGameId) && void 0 !== n ? n : null } function I(e) { let { guilds: t, valorantConfig: n, genshinConfig: r, includeConverted: s } = e, o = (0, i.useStateFromStoresArray)([a.default], () => t.filter(e => a.default.can(l.Permissions.ADMINISTRATOR, e))), u = o.filter(e => (function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return null != e && e.hasFeature(l.GuildFeatures.CLAN_PILOT_GENSHIN) && (t || !e.hasFeature(l.GuildFeatures.CLAN)) })(e, s)), d = o.filter(e => (function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return null != e && e.hasFeature(l.GuildFeatures.CLAN_PILOT_VALORANT) && (t || !e.hasFeature(l.GuildFeatures.CLAN)) })(e, s)), _ = u.length > 0 && r.enableClanCreation, c = d.length > 0 && n.enableClanCreation, I = []; return _ && u.forEach(e => I.push(e)), c && d.forEach(e => I.push(e)), { guilds: I, enableClanCreation: _ || c, defaultGameId: E({ genshinConfig: _ ? r : void 0, valorantConfig: c ? n : void 0 }) } } function T(e) { let { location: t, includeConverted: n, autoTrackExposure: r = !0 } = e, a = (0, i.useStateFromStoresArray)([s.default], () => Object.values(s.default.getGuilds())), o = u.useExperiment({ location: t }, { autoTrackExposure: r }); return I({ guilds: a, valorantConfig: o, genshinConfig: d.useExperiment({ location: t }, { autoTrackExposure: r }), includeConverted: n }) } function f(e) { let { guild: t, location: n, includeConverted: i, autoTrackExposure: r = !0 } = e, s = u.useExperiment({ location: n }, { autoTrackExposure: r }); return I({ guilds: [t], valorantConfig: s, genshinConfig: d.useExperiment({ location: n }, { autoTrackExposure: r }), includeConverted: i }) } function S(e) { let { location: t, autoTrackExposure: n = !0 } = e, i = u.useExperiment({ location: t }, { autoTrackExposure: n }); return E({ valorantConfig: i, genshinConfig: d.useExperiment({ location: t }, { autoTrackExposure: n }) }) } let h = (0, r.createExperiment)({ kind: "user", id: "2024-05_clans_valorant_pilot", label: "Clans Valorant Pilot", defaultConfig: { clanDiscoveryEnabled: !1, defaultGameId: null }, treatments: [{ id: 1, label: "Show clan discovery (Valorant)", config: { clanDiscoveryEnabled: !0, defaultGameId: o.VALORANT_ID } }] }), A = (0, r.createExperiment)({ kind: "user", id: "2024-05_clans_genshin_pilot", label: "Clans Genshin Pilot", defaultConfig: { clanDiscoveryEnabled: !1, defaultGameId: null }, treatments: [{ id: 1, label: "Show clan discovery (Genshin Impact)", config: { clanDiscoveryEnabled: !0, defaultGameId: o.GENSHIN_ID } }] }); function m(e) { var t, n; let i = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], r = h.useExperiment({ location: e }, { autoTrackExposure: i }), s = A.useExperiment({ location: e }, { autoTrackExposure: i }); return { clanDiscoveryEnabled: r.clanDiscoveryEnabled || s.clanDiscoveryEnabled, defaultGameId: null !== (n = null !== (t = r.defaultGameId) && void 0 !== t ? t : s.defaultGameId) && void 0 !== n ? n : null } } let N = (0, r.createExperiment)({ kind: "user", id: "2024-05_clans_general", label: "Clans General", defaultConfig: { clanTagsVisible: !1 }, treatments: [{ id: 1, label: "Show clan tags", config: { clanTagsVisible: !0 } }] }); function p(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return N.useExperiment({ location: e }, { autoTrackExposure: t }) } }, 645896: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchClanInfo: function() { return c }, useClanInfo: function() { return d }, useFetchClanInfo: function() { return E }, useIsFetchingClanInfo: function() { return _ } }), n("47120"); var i = n("470079"), r = n("652874"), s = n("143927"), a = n("881052"), o = n("931240"); let l = {}, u = (0, r.default)((e, t) => ({ clans: {}, fetching: !1, error: null, fetchClanInfo: async n => { if (function(e) { var t; let n = Date.now(), i = null !== (t = l[e]) && void 0 !== t ? t : 0; return n - i > 6e4 }(n)) { l[n] = Date.now(); try { e({ fetching: !0 }); let i = await (0, o.getClanInfo)(n), r = t().clans; e({ clans: { ...r, [n]: i }, error: null }) } catch (t) { e({ error: new a.APIError(t) }) } finally { e({ fetching: !1 }) } } } })); function d(e) { return u(t => null != e ? t.clans[e] : null) } function _() { return u(e => e.fetching) } async function c(e) { if (null == e) return; let { fetching: t, fetchClanInfo: n } = u.getState(); !t && await n(e) } function E(e) { let [t, n] = i.useState(!1), [r, a] = u(e => [e.fetchClanInfo, e.fetching], s.default); return [t, i.useCallback(async () => { if (!a && null != e) try { n(!0), await r(e) } finally { n(!1) } }, [e, a, r])] } }, 905362: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openAdoptClanIdentityModal: function() { return l }, openClanApplyFlow: function() { return u } }); var i = n("735250"); n("470079"); var r = n("524437"), s = n("481060"), a = n("645041"), o = n("970606"); function l(e) { (0, s.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("95883")]).then(n.bind(n, "83521")); return n => (0, i.jsx)(t, { ...n, onClose: t => { (0, a.markContentAsDismissed)(r.DismissibleGuildContent.ADOPT_CLAN_IDENTITY_NOTICE, e, !0, t), n.onClose() }, guildId: e }) }) } function u(e, t, r, a) { (0, o.trackClanApplyToJoinViewed)({ guildId: e, ...r }), (0, s.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("80026"), n.e("18482")]).then(n.bind(n, "767593")); return n => (0, i.jsx)(e, { ...n, clan: t, prioritizedGameIds: a }) }) } }, 603368: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAccessibleClanColor: function() { return f }, getAccessibleTextColor: function() { return I }, getClanPrimaryButtonStyles: function() { return S }, getClanRadialBackgroundStyle: function() { return A }, useBrandColor: function() { return h } }), n("47120"); var i = n("470079"), r = n("688619"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("780384"), u = n("481060"), d = n("410030"), _ = n("564334"), c = n("302221"), E = n("308083"); function I(e) { let t = s()(e), n = t.get("rgb.r"), i = t.get("rgb.g"), r = t.get("rgb.b"); return (299 * n + 587 * i + 114 * r) / 1e3 < 128 ? u.tokens.colors.HEADER_PRIMARY.resolve({ theme: "dark", saturation: 1 }) : u.tokens.colors.HEADER_PRIMARY.resolve({ theme: "light", saturation: 1 }) } function T(e) { return new _.default(e.get("rgb.r"), e.get("rgb.g"), e.get("rgb.b"), e.alpha()) } function f(e, t) { var n; let i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : l.WCAGContrastRatios.Text; if (null == e) return; let r = null !== (n = function(e) { var t; let n = s()(e); return null === (t = o()(E.CLAN_BRAND_PALETTE_PRESETS).map(e => { let { primary: t } = e; return { primary: t, distance: s().distance(n, s()(t), "hsl") } }).filter(e => { let { distance: t } = e; return t < 15 }).minBy(e => { let { distance: t } = e; return t })) || void 0 === t ? void 0 : t.primary }(e)) && void 0 !== n ? n : e, a = s()(r), u = s()(t), d = (0, c.getAccessibleColor)({ colors: [T(a), T(u)], ratio: i, saturationFactor: 1 }); if (null != d) return s()(d.toHexString()) } function S(e, t) { let n = function(e, t) { if (null == e) return; let n = f(e, t, l.WCAGContrastRatios.NonText); if (null == n) return; let i = .2 > n.luminance() ? n.brighten(.3) : n.darken(.3), r = .2 > n.luminance() ? n.brighten(.35) : n.darken(.35); return { "--custom-clan-bg": n.css(), "--custom-clan-hover-bg": i.css(), "--custom-clan-active-bg": r.css() } }(e, t); if (null == n) return; let i = { "--custom-clan-text": I(n["--custom-clan-bg"]).hex() }; return { ...n, ...i } } function h(e, t) { let [n, r = 1] = t, s = (0, d.default)(); return i.useMemo(() => null != e ? e : n.resolve({ theme: s, saturation: r }).hex(), [e, n, r, s]) } function A(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "top left", i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : .3, r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : "50%"; if (null == e) return; let a = s()(e), o = { background: "\n radial-gradient(\n circle at ".concat(n, ",\n ").concat(a.alpha(i).hex(), " 0%,\n transparent ").concat(r, "\n )\n ") }; if (null != t) { let e = s()(t); o.background += ", ".concat(e.hex()) } return o } }, 353093: function(e, t, n) { "use strict"; n.r(t), n.d(t, { formatSelectionList: function() { return E }, getClanBadgeUrl: function() { return T }, getClanBannerUrl: function() { return f }, getUserClanData: function() { return u }, isGuildAClan: function() { return d }, isGuildAdoptedUserClanIdentity: function() { return c }, isGuildAdoptedUserClanIdentityChanged: function() { return _ }, stableSortSet: function() { return l } }), n("47120"); var i = n("108131"), r = n.n(i), s = n("308083"), a = n("981631"), o = n("689938"); function l(e, t) { let n = Array.from(e); return n.sort((e, n) => { let i = r().v3("".concat(e).concat(t)); return i - r().v3("".concat(n).concat(t)) }), new Set(n) } function u(e) { return null != e && e.identityEnabled ? { guildId: e.identityGuildId, tag: e.tag, badge: e.badge } : {} } function d(e) { return null != e && e.hasFeature(a.GuildFeatures.CLAN) } function _(e, t) { var n, i; return null != t && t.identityGuildId === (null == e ? void 0 : e.id) && ((null == e ? void 0 : null === (n = e.clan) || void 0 === n ? void 0 : n.tag) != null && (null == e ? void 0 : null === (i = e.clan) || void 0 === i ? void 0 : i.tag) !== t.tag || null == t.identityEnabled) } function c(e, t) { return null != e && null != t && null != t.identityGuildId && t.identityGuildId === e && !!t.identityEnabled || !1 } let E = (e, t) => { if (0 === e.length) return null; if (1 === e.length) return e[1]; if (2 === e.length) return o.default.Messages.CLAN_OVERVIEW_LIST_TWO_ITEMS.format({ item1: e[0], item2: e[1] }); if (null != t && e.length > t) { let n = e.slice(0, t).join(", "), i = o.default.Messages.CLAN_OVERVIEW_LIST_OTHERS_COUNT.format({ n: e.length - t }); return o.default.Messages.CLAN_OVERVIEW_LIST_MULTIPLE_ITEMS.format({ items: n, last: i }) } { let t = e.slice(0, -1).join(", "), n = e[e.length - 1]; return o.default.Messages.CLAN_OVERVIEW_LIST_MULTIPLE_ITEMS.format({ items: t, last: n }) } }, I = { [s.ClanTagBadgeSize.SIZE_12]: 16, [s.ClanTagBadgeSize.SIZE_16]: 16, [s.ClanTagBadgeSize.SIZE_24]: 24, [s.ClanTagBadgeSize.SIZE_32]: 32, [s.ClanTagBadgeSize.SIZE_36]: 40 }; function T(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : s.ClanTagBadgeSize.SIZE_12; if (null == t) return; let { CDN_HOST: i } = window.GLOBAL_ENV; if (null != i) return "".concat(location.protocol, "//").concat(i, "/clan-badges/").concat(e, "/").concat(t, ".png?size=").concat(I[n]) } function f(e, t) { if (null == t) return; let { CDN_HOST: n } = window.GLOBAL_ENV; if (null != n) return "".concat(location.protocol, "//").concat(n, "/clan-banners/").concat(e, "/").concat(t, ".png?size=512") } }, 137920: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ClanPlaystyles: function() { return i }, PLAYSTYLE_GROUPS: function() { return s } }), (r = i || (i = {}))[r.NONE = 0] = "NONE", r[r.SOCIAL = 1] = "SOCIAL", r[r.CASUAL = 2] = "CASUAL", r[r.COMPETITIVE = 3] = "COMPETITIVE", r[r.CREATIVE = 4] = "CREATIVE", r[r.VERY_HARDCORE = 5] = "VERY_HARDCORE"; let s = { 0: "NONE", 4: "NONE", 1: "CASUAL", 2: "CASUAL", 3: "COMPETITIVE", 5: "COMPETITIVE" } }, 954138: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("963202"), r = n("169559"); function s(e) { let t = (0, r.default)(e), { clanTagsVisible: n } = (0, i.useClanGeneralExperiment)(e); return t || n } }, 169559: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("963202"); function r(e) { let { enableClanCreation: t } = (0, i.useClanPrepilotExperimentForAllGuilds)({ location: e, includeConverted: !1 }), { clanDiscoveryEnabled: n } = (0, i.useClanPilotExperiment)(e); return t || n } }, 114487: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanGuildIconSimple: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("451478"), u = n("806519"), d = n("768581"), _ = n("624138"), c = n("545866"); function E(e) { let { guildId: t, guildName: n, guildIcon: r, iconSize: s, className: E, animate: I } = e, T = (0, o.useStateFromStores)([l.default], () => l.default.isFocused()), f = d.default.getGuildIconURL({ id: t, icon: r, size: s, canAnimate: I && T }); if (null == f) { let e = (0, _.getAcronym)(n); return (0, i.jsx)(u.default, { mask: u.default.Masks.SQUIRCLE, width: s, height: s, className: E, children: (0, i.jsx)("div", { className: a()(c.guildIconImage, c.acronym), children: e }) }) } return (0, i.jsx)(u.default, { mask: u.default.Masks.SQUIRCLE, width: s, height: s, className: E, children: (0, i.jsx)("img", { src: f, alt: n, className: c.guildIconImage }) }) } t.default = r.memo(function(e) { let { guild: t, iconSize: n, className: r, animate: s } = e; return (0, i.jsx)(E, { guildName: t.name, guildId: t.id, guildIcon: t.icon, iconSize: n, className: r, animate: s }) }) }, 426964: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("524437"), a = n("481060"), o = n("442837"), l = n("100527"), u = n("231467"), d = n("605236"), _ = n("246364"), c = n("937111"), E = n("741606"), I = n("703656"), T = n("314897"), f = n("271383"), S = n("594174"), h = n("87888"), A = n("63063"), m = n("970606"), N = n("645896"), p = n("905362"), O = n("353093"), C = n("954138"), R = n("169559"), g = n("284019"), L = n("308083"), v = n("981631"), D = n("689938"), M = n("534856"); function y(e) { e.stopPropagation() } t.default = r.memo(function(e) { var t; let { clan: n, isLoading: P, onClose: U, profileViewedAnalytics: b } = e, G = null == n ? void 0 : n.identityGuildId, w = (0, N.useClanInfo)(null != G ? G : null), k = null == n ? void 0 : n.tag, B = (0, R.default)("clan_guild_profile"), V = (0, C.default)("base_clan_tag_chiplet"), x = (0, o.useStateFromStores)([T.default], () => T.default.getId()), F = (0, o.useStateFromStores)([f.default], () => null != G ? f.default.getMember(G, x) : null, [G, x]), H = (0, o.useStateFromStores)([c.default], () => { var e; return (null == w ? void 0 : w.id) != null && (null === (e = c.default.getRequest(w.id)) || void 0 === e ? void 0 : e.applicationStatus) === _.GuildJoinRequestApplicationStatuses.SUBMITTED }), Y = null != w && w.memberCount >= L.MAX_CLAN_MEMBERS, j = (0, d.useIsDismissibleContentDismissed)(s.DismissibleContent.CLAN_TAG_WAITLIST), W = (0, o.useStateFromStores)([S.default], () => S.default.getUser(x), [x]), K = (null == F ? void 0 : F.joinedAt) != null, z = (0, O.isGuildAdoptedUserClanIdentity)(G, null == W ? void 0 : W.clan), Z = null != (0, E.default)(G); r.useEffect(() => { null != G && (0, m.trackClanProfileViewed)({ guildId: G, hasJoinRequest: Z, ...b, location: l.default.CLAN_GUILD_PROFILE }) }, [G, Z, b]); let X = r.useCallback(() => { !j && ((0, m.trackClanApplyWaitlist)({ originGuildId: null == b ? void 0 : b.guildId, tagGuildId: G, messageId: null == b ? void 0 : b.messageId, tagUserId: null == b ? void 0 : b.tagUserId, location: l.default.CLAN_GUILD_PROFILE }), (0, a.showToast)((0, a.createToast)(D.default.Messages.CLAN_USER_WAITLIST_TOAST_SUCCESS, a.ToastType.SUCCESS))) }, [G, j, b]), Q = r.useCallback(e => { null != G && (e.stopPropagation(), e.preventDefault(), null == U || U(), (0, p.openAdoptClanIdentityModal)(G)) }, [G, U]), q = r.useCallback(e => { if (null != w && null != G) e.stopPropagation(), e.preventDefault(), null == U || U(), !Z && (0, p.openClanApplyFlow)(G, w, { source: null == b ? void 0 : b.source, messageId: null == b ? void 0 : b.messageId, tagUserId: null == b ? void 0 : b.tagUserId, location: l.default.CLAN_GUILD_PROFILE }) }, [w, G, Z, U, b]), J = r.useCallback(() => { open(A.default.getArticleURL(v.HelpdeskArticles.CLANS_FAQ)) }, []), $ = r.useCallback(() => { null != G && (0, I.transitionTo)(v.Routes.GUILD_MEMBER_VERIFICATION(G)) }, [G]), ee = r.useCallback(() => { null != G && (0, I.transitionToGuild)(G) }, [G]), et = r.useMemo(() => { var e, t; return { color: a.Button.Colors.BRAND, size: a.Button.Sizes.SMALL, fullWidth: !0, className: M.button, themeColor: null !== (t = null == w ? void 0 : null === (e = w.branding) || void 0 === e ? void 0 : e.primaryColor) && void 0 !== t ? t : null } }, [null == w ? void 0 : null === (t = w.branding) || void 0 === t ? void 0 : t.primaryColor]), en = r.useMemo(() => { switch (!0) { case !V: return null; case !K && !B && !j: return (0, i.jsx)(a.Button, { onClick: X, color: a.Button.Colors.PRIMARY, size: a.Button.Sizes.SMALL, fullWidth: !0, children: D.default.Messages.CLAN_USER_WAITLIST_CTA }); case !K && !B && j: return (0, i.jsxs)(a.Button, { innerClassName: M.waitlistedButton, onClick: J, color: a.Button.Colors.PRIMARY, size: a.Button.Sizes.SMALL, fullWidth: !0, children: [D.default.Messages.CLAN_USER_WAITLISTED, (0, i.jsx)(h.default, {})] }); case !K && Z: return (0, i.jsx)(g.default, { onClick: $, ...et, children: D.default.Messages.CLAN_USER_APPLICATION_EXISTS_TAG_GUILD_PROFILE_CTA }); case !K: return (0, i.jsx)(g.default, { onClick: q, ...et, children: D.default.Messages.CLAN_USER_APPLY_TAG_GUILD_PROFILE_CTA }); case K && !z: return (0, i.jsx)(g.default, { onClick: Q, ...et, children: D.default.Messages.CLAN_USER_ADOPT_TAG_GUILD_PROFILE_CTA }); case K && z: return (0, i.jsx)(g.default, { onClick: ee, ...et, children: D.default.Messages.CLAN_USER_GO_TO_CLAN_CTA }); default: return null } }, [et, Q, q, $, ee, Z, z, B, j, X, J, V, K]), ei = r.useMemo(() => ({ className: M.container, onClick: y }), []); return null == k || null == w || null == G || P ? (0, i.jsx)("div", { ...ei, children: (0, i.jsx)(a.Spinner, {}) }) : (0, i.jsxs)("div", { ...ei, children: [(0, i.jsx)(u.ClanDiscoveryCardView, { clan: w, className: M.cardContainer, isMember: K, hasPendingJoinRequest: H, atMaxMemberCapacity: Y }), null != en && (0, i.jsx)("div", { className: M.buttonContainer, children: en })] }) }) }, 979264: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BaseClanTagChiplet: function() { return N }, ClanTagBadge: function() { return m }, useShouldDisplayClanTag: function() { return O } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("607070"), d = n("715903"), _ = n("271383"), c = n("594174"), E = n("645896"), I = n("353093"), T = n("954138"), f = n("426964"), S = n("308083"), h = n("689938"), A = n("53408"); let m = r.memo(function(e) { let { src: t, tag: n, className: r, size: s = S.ClanTagBadgeSize.SIZE_16 } = e; return null == t ? null : (0, i.jsx)("img", { src: t, alt: h.default.Messages.CLAN_BADGE_ALT.format({ tag: n }), className: a()(A.badge, r), width: s, height: s }) }), N = r.memo(function(e) { let { guildId: t, clanTag: n, clanBadge: r, className: s, textClassName: o, badgeClassName: u, onClick: d, onMouseEnter: _, textVariant: c = "text-xs/medium", textColor: E = "text-normal", badgeSize: f = S.ClanTagBadgeSize.SIZE_12, inline: h = !0 } = e; return (0, T.default)("base_clan_tag_chiplet") ? (0, i.jsx)(l.Clickable, { tag: "span", tabIndex: null == d ? -1 : void 0, onClick: d, onMouseEnter: _, className: a()(A.chipletContainerInner, h && A.chipletContainerInline, null != d && A.clickable, s), children: (0, i.jsxs)(l.Text, { variant: c, color: E, tag: "span", className: a()(A.text, o), children: [null != r && "string" == typeof r ? (0, i.jsx)(m, { src: (0, I.getClanBadgeUrl)(t, r, f), tag: null == n ? void 0 : n.toString(), size: f, className: u }) : r, (0, i.jsx)("span", { className: A.unselectable, children: n })] }) }) : null }), p = r.memo(function(e) { var t, n; let { clan: s, userId: a, children: u, profileViewedAnalytics: d } = e, _ = (0, o.useStateFromStores)([c.default], () => c.default.getUser(a), [a]), I = null !== (t = null == _ ? void 0 : _.clan) && void 0 !== t ? t : s, [T, S] = (0, E.useFetchClanInfo)(null !== (n = null == I ? void 0 : I.identityGuildId) && void 0 !== n ? n : null), h = r.useCallback(() => { S() }, [S]); return (0, i.jsx)(l.Popout, { renderPopout: e => { let { closePopout: t } = e; return (0, i.jsx)(f.default, { isLoading: T, clan: I, onClose: t, profileViewedAnalytics: d }) }, position: "top", animationPosition: "top", spacing: 16, children: e => (0, i.jsx)(l.Clickable, { className: A.clickable, tag: "span", ...e, onClick: t => { var n; null === (n = e.onClick) || void 0 === n || n.call(e, t), t.preventDefault(), t.stopPropagation() }, onMouseEnter: () => { var t; h(), null === (t = e.onMouseEnter) || void 0 === t || t.call(e) }, children: u }) }) }); function O(e, t) { let n = (0, o.useStateFromStores)([u.default], () => u.default.hideTags), i = (0, o.useStateFromStores)([c.default], () => c.default.getUser(e), [e]), r = (0, o.useStateFromStores)([_.default], () => { if (null == t || null == e) return null; let n = _.default.getMember(t, e); return (0, d.hasAutomodQuarantinedProfile)(n) }, [t, e]), { tag: s, guildId: a } = (0, I.getUserClanData)(null == i ? void 0 : i.clan), l = (0, T.default)("clan_tag_chiplet"); return !n && !!l && null != a && null != s && !r && !0 } t.default = r.memo(function(e) { var t; let { clan: n, userId: r, contextGuildId: s, className: l, textVariant: u, textColor: d, badgeSize: _, disableGuildProfile: E = !1, inline: T = !0, profileViewedAnalytics: f } = e, S = (0, o.useStateFromStores)([c.default], () => c.default.getUser(r), [r]), h = null !== (t = null == S ? void 0 : S.clan) && void 0 !== t ? t : n, { tag: m, badge: C, guildId: R } = (0, I.getUserClanData)(h); return O(r, s) && null != R ? E ? (0, i.jsx)(N, { guildId: R, clanTag: m, clanBadge: C, className: a()(A.noTooltip, l), textVariant: u, textColor: d, badgeSize: _, inline: T }) : (0, i.jsx)(p, { clan: h, userId: r, profileViewedAnalytics: f, children: (0, i.jsx)(N, { guildId: R, clanTag: m, clanBadge: C, className: l, textVariant: u, textColor: d, badgeSize: _, inline: T }) }) : null }) }, 214715: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("993123"); let u = r.memo(function(e) { let { text: t, variant: n = "text-xs/medium", color: s = "text-normal", icon: u, className: d, selected: _, onMouseEnter: c, onMouseLeave: E, onClick: I } = e, T = r.useMemo(() => { if (null != I) return () => I(t) }, [I, t]); return (0, i.jsxs)(o.Clickable, { className: a()(l.trait, { [l.selected]: _, [l.selectable]: null != T, [l.clickable]: null != T }, d), onMouseEnter: c, onMouseLeave: E, onClick: T, children: [null != u && (0, i.jsx)(u, { height: 16, width: 16 }), (0, i.jsx)(o.Text, { variant: n, color: s, lineClamp: 1, children: t })] }) }); t.default = u }, 550271: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadge: function() { return g } }); var i = n("735250"); n("470079"); var r = n("496532"), s = n("514904"), a = n("72977"), o = n("746479"), l = n("419643"), u = n("561015"), d = n("775259"), _ = n("283107"), c = n("907120"), E = n("533122"), I = n("874706"), T = n("137411"), f = n("775101"), S = n("933632"), h = n("158188"), A = n("66334"), m = n("215635"), N = n("718572"), p = n("496223"), O = n("846262"), C = n("926372"), R = n("116175"); let g = e => { let { badge: t, primaryTintColor: n, secondaryTintColor: g, ...L } = e; switch (t) { case R.ClanBadgeKind.SWORD: return (0, i.jsx)(N.ClanBadgeSword, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.WATER_DROP: return (0, i.jsx)(O.ClanBadgeWaterDrop, { primaryTintColor: n, ...L }); case R.ClanBadgeKind.SKULL: return (0, i.jsx)(f.ClanBadgeSkull, { primaryTintColor: n, ...L }); case R.ClanBadgeKind.TOADSTOOL: return (0, i.jsx)(p.ClanBadgeToadstool, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.MOON: return (0, i.jsx)(I.ClanBadgeMoon, { primaryTintColor: n, ...L }); case R.ClanBadgeKind.LIGHTNING: return (0, i.jsx)(E.ClanBadgeLightning, { primaryTintColor: n, ...L }); case R.ClanBadgeKind.LEAF: return (0, i.jsx)(c.ClanBadgeLeaf, { primaryTintColor: n, ...L }); case R.ClanBadgeKind.HEART: return (0, i.jsx)(d.ClanBadgeHeart, { primaryTintColor: n, ...L }); case R.ClanBadgeKind.FIRE: return (0, i.jsx)(a.ClanBadgeFire, { primaryTintColor: n, ...L }); case R.ClanBadgeKind.COMPASS: return (0, i.jsx)(r.ClanBadgeCompass, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.CROSSHAIRS: return (0, i.jsx)(s.ClanBadgeCrosshairs, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.FLOWER: return (0, i.jsx)(o.ClanBadgeFlower, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.FORCE: return (0, i.jsx)(l.ClanBadgeForce, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.GEM: return (0, i.jsx)(u.ClanBadgeGem, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.LAVA: return (0, i.jsx)(_.ClanBadgeLava, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.PSYCHIC: return (0, i.jsx)(T.ClanBadgePsychic, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.SMOKE: return (0, i.jsx)(S.ClanBadgeSmoke, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.SNOW: return (0, i.jsx)(h.ClanBadgeSnow, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.SOUND: return (0, i.jsx)(A.ClanBadgeSound, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.SUN: return (0, i.jsx)(m.ClanBadgeSun, { primaryTintColor: n, secondaryTintColor: g, ...L }); case R.ClanBadgeKind.WIND: return (0, i.jsx)(C.ClanBadgeWind, { primaryTintColor: n, secondaryTintColor: g, ...L }) } return null } }, 496532: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeCompass: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#be0351", "#ff2c52", "#f0f0f0"], o = ["#4282d8", "#47baff", "#f0f0f0"], l = [.1, .25, 1], u = [{ base: 3, tint: 1 }, { base: 2, tint: 1 }, { base: 2, tint: 1 }], d = [.1, .25, 1], _ = [{ base: 3, tint: 1 }, { base: 2, tint: 1 }, { base: 2, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M10 4V3H9V1H7v2H6v1H5v1h1v1h1v1h2V6h1V5h1V4h-1Z", fill: f[1] }), (0, i.jsx)("path", { d: "M10 12v1H9v2H7v-2H6v-1H5v-1h1v-1h1V9h2v1h1v1h1v1h-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M7 0v1h2V0H7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M7 1v1h2V1H7Z", fill: f[2] }), (0, i.jsx)("path", { d: "M7 6v1h2V6H7Z", fill: f[0] }), (0, i.jsx)("path", { d: "M7 1H6v2h1V1ZM1 7H0v2h1V7ZM3 7V6H1v1h2ZM6 3H5v1h1V3Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 4H5v1h1V4ZM7 3H6v1h1V3Z", fill: f[2] }), (0, i.jsx)("path", { d: "M7 9v1h2V9H7Z", fill: f[2] }), (0, i.jsx)("path", { d: "M7 14v1h2v-1H7ZM7 12H6v1h1v-1ZM6 11H5v1h1v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M7 10H6v1h1v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M9 13h1v-1H9v1ZM10 12h1v-1h-1v1ZM9 11h1v-1H9v1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M8 4H7v1h1V4Z", fill: f[2] }), (0, i.jsx)("path", { d: "M10 5H9v1h1V5ZM11 4h-1v1h1V4Z", fill: f[0] }), (0, i.jsx)("path", { d: "M12 10h1V9h2V7h-2V6h-1V5h-1v1h-1v1H9v2h1v1h1v1h1v-1Z", fill: "#C7C7C7" }), (0, i.jsx)("path", { d: "M15 7h-1v2h1V7Z", fill: "#707070" }), (0, i.jsx)("path", { d: "M12 6V5h-1v1h1ZM11 7V6h-1v1h1Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M11 10V9h-1v1h1ZM10 9V8H9v1h1ZM13 10V9h-1v1h1ZM12 11v-1h-1v1h1Z", fill: "#707070" }), (0, i.jsx)("path", { d: "M4 10H3V9H1V7h2V6h1V5h1v1h1v1h1v2H6v1H5v1H4v-1Z", fill: "#C7C7C7" }), (0, i.jsx)("path", { d: "M1 9h1V7H1v2Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M6 9h1V7H6v2Z", fill: "#707070" }), (0, i.jsx)("path", { d: "M5 6V5H4v1h1ZM4 7V6H3v1h1ZM5 8V7H4v1h1Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M6 10V9H5v1h1ZM5 11v-1H4v1h1Z", fill: "#707070" }), (0, i.jsx)("path", { d: "M5 4H4v1h1V4ZM6 5H5v1h1V5ZM7 6H6v1h1V6ZM9 7H7v2h2V7ZM10 9H9v1h1V9ZM11 10h-1v1h1v-1ZM4 5H3v1h1V5ZM9 16v-1H7v1h2ZM7 13H6v2h1v-2ZM1 9v1h2V9H1ZM6 12H5v1h1v-1ZM5 11H4v1h1v-1ZM4 10H3v1h1v-1ZM9 3h1V1H9v2ZM15 9h1V7h-1v2ZM15 7V6h-2v1h2ZM10 4h1V3h-1v1ZM11 5h1V4h-1v1ZM10 6h1V5h-1v1ZM9 7h1V6H9v1ZM6 10h1V9H6v1ZM5 11h1v-1H5v1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 5h1V4h-1v1ZM12 6h1V5h-1v1ZM9 15h1v-2H9v2ZM13 9v1h2V9h-2ZM10 13h1v-1h-1v1ZM11 12h1v-1h-1v1ZM12 11h1v-1h-1v1Z", fill: "#000" })] }) } }, 514904: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeCrosshairs: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#3f581a", "#7fb134", "#bcef42", "#f0f0f0"], o = ["#008456", "#6be473", "#f0f0f0"], l = [.05, .35, .7, 1], u = [{ base: 8, tint: 1 }, { base: 4, tint: 1 }, { base: 2, tint: 1 }, { base: 4, tint: 1 }], d = [.15, .6, 1], _ = [{ base: 3, tint: 1 }, { base: 2, tint: 1 }, { base: 4, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M9 1H7v4h2V1ZM11 7V6h-1V5H6v1H5v1H1v2h4v1h1v1h1v4h2v-4h1v-1h1V9h4V7h-4Z", fill: T[2] }), (0, i.jsx)("path", { d: "M4 0H3v1h1V0ZM6 5H5v1h1V5ZM11 5h-1v1h1V5ZM13 0h-1v1h1V0ZM14 1h-1v1h1V1ZM15 2h-1v1h1V2ZM16 3h-1v1h1V3ZM9 0H7v1h2V0Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 1H7v1h2V1Z", fill: T[3] }), (0, i.jsx)("path", { d: "M9 3H7v1h2V3ZM9 4H7v1h2V4Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 12H7v1h2v-1Z", fill: T[3] }), (0, i.jsx)("path", { d: "M9 14H7v1h2v-1ZM9 11H7v1h2v-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 6H7v1h2V6ZM9 9H7v1h2V9ZM10 7H9v2h1V7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M12 7h-1v2h1V7Z", fill: T[1] }), (0, i.jsx)("path", { d: "M7 7H6v2h1V7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 6H5v2h1V6Z", fill: T[3] }), (0, i.jsx)("path", { d: "M3 1H2v1h1V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M3 1v1H2v1H1v1h3V1H3Z", fill: f[1] }), (0, i.jsx)("path", { d: "M4 1H3v1h1V1ZM3 2H2v1h1V2Z", fill: f[2] }), (0, i.jsx)("path", { d: "M4 3H1v1h3V3Z", fill: f[0] }), (0, i.jsx)("path", { d: "M12 12v3h1v-1h1v-1h1v-1h-3ZM1 12v1h1v1h1v1h1v-3H1Z", fill: f[1] }), (0, i.jsx)("path", { d: "M4 12H1v1h3v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M3 13v2h1v-2H3Z", fill: f[0] }), (0, i.jsx)("path", { d: "M14 3V2h-1V1h-1v3h3V3h-1Z", fill: f[1] }), (0, i.jsx)("path", { d: "M13 1h-1v1h1V1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M13 7h-1v1h1V7Z", fill: T[3] }), (0, i.jsx)("path", { d: "M15 8h-3v1h3V8Z", fill: T[1] }), (0, i.jsx)("path", { d: "M15 3h-3v1h3V3Z", fill: f[0] }), (0, i.jsx)("path", { d: "M2 2H1v1h1V2ZM7 1H6v4h1V1ZM10 1H9v4h1V1ZM16 7h-1v2h1V7ZM15 6h-4v1h4V6ZM15 9h-4v1h4V9ZM1 7H0v2h1V7ZM5 6H1v1h4V6Z", fill: "#000" }), (0, i.jsx)("path", { d: "M4 7H1v2h1V8h2V7Z", fill: T[3] }), (0, i.jsx)("path", { d: "M5 9H1v1h4V9ZM1 3H0v1h1V3ZM4 15H3v1h1v-1ZM6 10H5v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M4 8H3v1h1V8ZM5 7H4v2h1V7Z", fill: T[1] }), (0, i.jsx)("path", { d: "M5 7H4v2h1V7Z", fill: T[0] }), (0, i.jsx)("path", { d: "M10 10H6v1h4v-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M10 5H6v1h4V5Z", fill: T[3] }), (0, i.jsx)("path", { d: "M11 10h-1v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 9h-1v1h1V9Z", fill: T[1] }), (0, i.jsx)("path", { d: "M13 15h-1v1h1v-1ZM14 14h-1v1h1v-1ZM15 13h-1v1h1v-1ZM16 12h-1v1h1v-1ZM9 15H7v1h2v-1ZM3 14H2v1h1v-1ZM2 13H1v1h1v-1ZM7 11H6v4h1v-4ZM10 11H9v4h1v-4ZM4 4H1v1h4V1H4v3ZM12 4V1h-1v4h4V4h-3Z", fill: "#000" }), (0, i.jsx)("path", { d: "M1 11v1h3v3h1v-4H1ZM11 11v4h1v-3h3v-1h-4ZM1 12H0v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M13 14h-1v1h1v-1ZM14 13h-1v1h1v-1ZM15 12h-1v1h1v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M13 12h-1v1h1v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M9 7H7v2h2V7Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 4H7v1h2V4ZM9 11H7v1h2v-1ZM12 7h-1v2h1V7Z", fill: T[0] })] }) } }, 72977: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeFire: function() { return u } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ba3500", "#fd6214", "#f0f0f0"], o = [.1, .3, 1], l = [{ base: 3, tint: 1 }, { base: 3, tint: 1 }, { base: 10, tint: 1 }], u = e => { let { width: t = 24, height: n = 24, primaryTintColor: u, ...d } = e, { primaryColorsTransformed: _ } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: u, primaryTintLuminances: o, primaryLuminanceWeights: l }); return (0, i.jsxs)("svg", { ...(0, r.default)(d), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M13 6V4h-1V1h-1v1h-1v1H9v1H8v1H3v1H2v2H1v4h1v1h1v1h1v1h8v-1h1v-1h1V6h-1Z", fill: _[1] }), (0, i.jsx)("path", { d: "M0 8v4h1V8H0ZM15 9v3h1V9h-1ZM14 6v3h1V6h-1ZM13 4v2h1V4h-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M14 9v3h1V9h-1ZM13 6v3h1V6h-1ZM12 4v2h1V4h-1Z", fill: _[0] }), (0, i.jsx)("path", { d: "M1 6v2h1V6H1ZM7 3H6v1h1V3ZM9 3H8v1h1V3ZM8 4H7v1h1V4ZM2 5v1h1V5H2ZM1 12v1h1v-1H1ZM2 13v1h1v-1H2ZM3 14v1h1v-1H3ZM14 12v1h1v-1h-1ZM13 13v1h1v-1h-1ZM12 14v1h1v-1h-1ZM4 15v1h8v-1H4ZM3 4v1h1V4H3ZM4 3v1h1V3H4ZM5 2v1h1V2H5ZM9 2v1h1V2H9ZM10 1v1h1V1h-1ZM11 0v1h1V0h-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 1v1h1V1h-1ZM10 2v1h1V2h-1ZM9 3v1h1V3H9ZM8 4v1h1V4H8ZM5 3v1h1V3H5ZM4 4v1h1V4H4ZM6 4v1h1V4H6Z", fill: _[2] }), (0, i.jsx)("path", { d: "M5 4v1h1V4H5Z", fill: _[1] }), (0, i.jsx)("path", { opacity: ".5", d: "M11 4v1h1V4h-1ZM12 9V8h-1V6h-1v1H9v1H6V7H5v2H3v2h1v2h1v1h6v-1h1v-2h1V9h-1Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M3 5v1h1V5H3ZM2 6v2h1V6H2ZM4 8v1h1V8H4Z", fill: _[2] }), (0, i.jsx)("path", { d: "M2 12v1h1v-1H2ZM3 13v1h1v-1H3ZM12 13v1h1v-1h-1ZM13 12v1h1v-1h-1ZM4 14v1h8v-1H4Z", fill: _[0] }), (0, i.jsx)("path", { d: "M1 8v2h1V8H1ZM11 10h-1V9H6v1H5v2h1v1h4v-1h1v-2Z", fill: _[2] }), (0, i.jsx)("path", { d: "M12 1v3h1V1h-1Z", fill: "#000" })] }) } }, 746479: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeFlower: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ff1c90", "#ff7fc0", "#f0f0f0"], o = ["#008456", "#6be473", "#f0f0f0"], l = [.1, .45, 1], u = [{ base: 8, tint: 1 }, { base: 4, tint: 1 }, { base: 6, tint: 1 }], d = [.1, .35, 1], _ = [{ base: 8, tint: 1 }, { base: 4, tint: 1 }, { base: 6, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M15 2h-1V1h-3v3h-1V2H9V1H7v1H6v2H5V1H2v1H1v4h1v1h2v1h1v2h1v1h1v1h2v-1h1v-1h1V8h1V7h2V6h1V2Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 0H7v1h2V0ZM5 0H2v1h3V0ZM14 0h-3v1h3V0ZM15 1h-1v1h1V1ZM16 2h-1v4h1V2ZM10 1H9v1h1v2h1V1h-1ZM5 1v3h1V2h1V1H5ZM2 1H1v1h1V1ZM1 2H0v4h1V2ZM2 6H1v1h1V6ZM4 7H2v1h2V7ZM14 7h-2v1h2V7ZM15 6h-1v1h1V6ZM12 9V8h-1v2h4V9h-3ZM4 8v1H1v1h4V8H4ZM1 10H0v4h1v-4ZM2 14H1v1h1v-1ZM14 15H2v1h12v-1ZM15 14h-1v1h1v-1ZM16 10h-1v4h1v-4ZM6 10H5v1h1v-1ZM7 11H6v1h1v-1ZM10 11H9v1h1v-1ZM11 10h-1v1h1v-1ZM9 12H7v1h2v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 10v1h-1v1H9v1H7v-1H6v-1H5v-1H1v4h1v1h12v-1h1v-4h-4Z", fill: f[1] }), (0, i.jsx)("path", { d: "M4 12H3v1h1v-1ZM3 11H2v1h1v-1ZM12 14v-1h-1v1H9v-1H7v1H5v-1H4v1H2v1h12v-1h-2ZM13 12h-1v1h1v-1ZM14 11h-1v1h1v-1ZM15 13h-1v1h1v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M6 9H5v1h1V9ZM7 10H6v1h1v-1ZM10 10H9v1h1v-1ZM11 9h-1v1h1V9ZM12 7h-1v1h1V7ZM14 6h-1v1h1V6ZM15 4h-1v2h1V4ZM9 11H7v1h2v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M10 12H9v1h1v-1ZM11 11h-1v1h1v-1ZM12 10h-1v1h1v-1ZM1 10v2h1v-1h3v-1H1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M2 2H1v2h1V2ZM5 1H2v1h3V1ZM7 2H6v1h1V2ZM9 1H7v1h2V1ZM12 1h-1v2h1V2h2V1h-2Z", fill: T[2] })] }) } }, 419643: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeForce: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("153832"), a = n("331595"), o = n("249849"); let l = ["#be0351", "#ff2c52", "#f0f0f0"], u = ["#ffb84b", "#ffe361", "#f0f0f0"], d = [.3, .4, 1], _ = [{ base: 8, tint: 1 }, { base: 3, tint: 1 }, { base: 2, tint: 1 }], c = [.3, .5, 1], E = [{ base: 8, tint: 1 }, { base: 3, tint: 1 }, { base: 2, tint: 1 }], I = e => { let { width: t = 24, height: n = 24, primaryTintColor: I, secondaryTintColor: T, ...f } = e, S = r.useMemo(() => "badge-force-gradient-".concat((0, s.v4)()), []), { primaryColorsTransformed: h, secondaryColorsTransformed: A } = (0, o.getTransformedBadgeColors)({ primaryBaseColors: l, primaryTintColor: I, primaryTintLuminances: d, primaryLuminanceWeights: _, secondaryBaseColors: u, secondaryTintColor: T, secondaryTintLuminances: c, secondaryLuminanceWeights: E }); return (0, i.jsxs)("svg", { ...(0, a.default)(f), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M7 0H4v1h3V0ZM11 1H7v1h4V1ZM9 6H8v4h1V6ZM1 5H0v6h1V5ZM15 2h-4v1h4V2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M7 1H4v1h3V1ZM11 2H7v1h4V2Z", fill: A[2] }), (0, i.jsx)("path", { d: "M15 3h-4v1h4V3Z", fill: h[2] }), (0, i.jsx)("path", { d: "M7 15H4v1h3v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 14v-1H5v-2H4V5h1V3h1V2H4v1H2v4H1v4h1v2h1v1h1v1h3v-1H6Z", fill: A[1] }), (0, i.jsx)("path", { d: "M7 14H4v1h3v-1Z", fill: A[0] }), (0, i.jsx)("path", { d: "M11 14H7v1h4v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M10 13v-1H9v-2H8V6h1V4h1V3H7v1H6v3H5v4h1v2h1v1h4v-1h-1Z", fill: A[1] }), (0, i.jsx)("path", { d: "M15 13h-4v1h4v-1ZM4 1H3v1h1V1ZM3 2H2v1h1V2ZM2 3H1v2h1V3ZM16 3h-1v1h1V3ZM15 4h-1v1h1V4ZM14 5h-1v2h1V5ZM16 12h-1v1h1v-1ZM15 11h-1v1h1v-1ZM14 9h-1v2h1V9ZM13 7h-1v2h1V7ZM4 14H3v1h1v-1ZM3 13H2v1h1v-1ZM2 11H1v2h1v-2ZM5 5H4v6h1V5ZM7 2H6v1h1V2ZM6 3H5v2h1V3Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 5H1v2h1V5ZM6 5H5v2h1V5Z", fill: A[2] }), (0, i.jsx)("path", { d: "M5 3H4v2h1V3Z", fill: A[0] }), (0, i.jsx)("path", { d: "M11 3h-1v1h1V3Z", fill: "#000" }), (0, i.jsx)("path", { d: "M4 2H3v1h1V2Z", fill: A[2] }), (0, i.jsx)("path", { d: "M6 2H5v1h1V2ZM9 4H8v2h1V4ZM10 3H9v1h1V3ZM5 11H4v1h1v-1ZM4 13H3v1h1v-1ZM3 11H2v2h1v-2ZM8 13v-1H7v-1H6v2h1v1h4v-1H8ZM9 10H8v1h1v-1Z", fill: A[0] }), (0, i.jsx)("path", { d: "M10 13v-1H9v-2H8V6h1V4h1V3H7v1H6v3H5v4h1v2h1v1h4v-1h-1Z", fill: "url(#".concat(S, ")") }), (0, i.jsx)("path", { d: "M14 12v-1h-1V9h-1V7h1V5h1V4h-3v1h-1v1H9v4h1v2h1v1h4v-1h-1Z", fill: h[1] }), (0, i.jsx)("path", { d: "M13 5h-1v2h1V5ZM14 4h-1v1h1V4ZM13 9h-1v1h1V9ZM12 12v-1h-2v1h1v1h4v-1h-3Z", fill: h[0] }), (0, i.jsx)("path", { d: "M3 3H2v1h1V3ZM3 7H2v1h1V7ZM7 3H6v1h1V3Z", fill: A[2] }), (0, i.jsx)("path", { d: "M11 4h-1v1h1V4ZM10 6H9v1h1V6Z", fill: h[2] }), (0, i.jsx)("path", { d: "M10 4H9v2h1V4ZM7 13H6v1h1v-1ZM6 11H5v2h1v-2ZM11 12h-1v1h1v-1ZM10 10H9v2h1v-2Z", fill: "#000" }), (0, i.jsx)("defs", { children: (0, i.jsxs)("radialGradient", { id: S, cx: "0.75", cy: "0.5", r: "1", fx: "0.75", fy: "0.5", children: [(0, i.jsx)("stop", { stopColor: h[1], offset: "30%" }), (0, i.jsx)("stop", { stopColor: A[1], offset: "70%" })] }) })] }) } }, 561015: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeGem: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ff1c90", "#ff7fc0", "#ffa5d3", "#f0f0f0"], o = ["#816bee", "#b79cf8", "#cdbafa", "#f0f0f0"], l = [.1, .3, .5, .9], u = [{ base: 8, tint: 1 }, { base: 4, tint: 1 }, { base: 3, tint: 1 }, { base: 4, tint: 1 }], d = [.1, .3, .5, .9], _ = [{ base: 8, tint: 1 }, { base: 4, tint: 1 }, { base: 3, tint: 1 }, { base: 4, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M13 8v1h-1v1h-1V3h-1V2H9V1H8v14h6v-1h-2v-1h1v-1h1v-1h1V8h-2Z", fill: f[1] }), (0, i.jsx)("path", { d: "M7 1v1H6v1H5v8H3v-1H1v4h1v1h6V1H7Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 0H7v1h2V0ZM7 1H6v1h1V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 1H7v1h2V1ZM7 2H6v1h1V2ZM7 6H6v1h1V6Z", fill: T[3] }), (0, i.jsx)("path", { d: "M5 12H4v1h1v-1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M6 12H5v1h1v-1ZM2 13H1v1h1v-1ZM8 14H2v1h6v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M4 13H3v1h1v-1ZM3 12H2v1h1v-1ZM6 10V8H5v3h1v3h1v-4H6ZM7 2v3H6v1h1v3h1V2H7Z", fill: T[2] }), (0, i.jsx)("path", { d: "M14 8h-1v1h1V8ZM13 9h-1v1h1V9Z", fill: f[3] }), (0, i.jsx)("path", { d: "M5 11H3v1h2v-1ZM3 10H1v1h2v-1Z", fill: T[3] }), (0, i.jsx)("path", { d: "M2 12v-2H1v2h1Z", fill: T[3] }), (0, i.jsx)("path", { d: "M11 3h-1v1h1V3Z", fill: f[2] }), (0, i.jsx)("path", { d: "M6 3H5v3h1V3Z", fill: T[3] }), (0, i.jsx)("path", { d: "M10 1H9v1h1V1ZM11 2h-1v1h1V2ZM6 11H5v1h1v-1ZM15 11h-1v1h1v-1ZM13 12v1h-1v1h2v-2h-1ZM14 14v1H2v1h13v-2h-1ZM2 14H1v1h1v-1ZM16 7h-3v1h3V7ZM3 9H0v1h3V9Z", fill: "#000" }), (0, i.jsx)("path", { d: "M1 14V9H0v5h1ZM16 11V8h-1v3h1ZM6 2H5v1h1V2ZM4 3v7H3v1h2V3H4ZM12 8V3h-1v7h1V9h1V8h-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 2H8v2h1V2ZM10 6V4H9v4h1v1h1V6h-1ZM12 10h-1v1h1v-1ZM9 10H8v3h1v-3ZM11 13h-1v1h1v-1ZM11 11h-1v1h1v-1ZM12 12h-1v1h1v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M12 14v-1h-1v1H8v1h6v-1h-2ZM13 12h-1v1h1v-1ZM14 11h-1v1h1v-1Z", fill: f[0] })] }) } }, 775259: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeHeart: function() { return u } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ff1b90", "#ff7fc0", "#f0f0f0"], o = [.2, .52, 1], l = [{ base: 3, tint: 1 }, { base: 2, tint: 1 }, { base: 5, tint: 1 }], u = e => { let { width: t = 24, height: n = 24, primaryTintColor: u, ...d } = e, { primaryColorsTransformed: _ } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: u, primaryTintLuminances: o, primaryLuminanceWeights: l }); return (0, i.jsxs)("svg", { ...(0, r.default)(d), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M7 2v1h2V2H7ZM9 1v1h4V1H9ZM13 2v1h1V2h-1ZM14 3v1h1V3h-1ZM15 4v5h1V4h-1ZM14 9v2h1V9h-1ZM13 11v1h1v-1h-1ZM11 12v1h2v-1h-2ZM9 13v1h2v-1H9ZM7 14v1h2v-1H7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M15 4h-1V3h-1V2H9v1H7V2H3v1H2v1H1v5h1v2h1v1h2v1h2v1h2v-1h2v-1h2v-1h1V9h1V4Z", fill: _[1] }), (0, i.jsx)("path", { d: "M15 4h-1v5h1V4ZM14 9h-1v2h1V9ZM3 9H2v2h1V9ZM13 11h-2v1h2v-1ZM11 12H9v1h2v-1ZM9 13H7v1h2v-1ZM7 12H5v1h2v-1ZM5 11H3v1h2v-1Z", fill: _[0] }), (0, i.jsx)("path", { d: "M3 1v1h4V1H3ZM2 2v1h1V2H2ZM1 3v1h1V3H1ZM0 4v5h1V4H0ZM1 9v2h1V9H1ZM2 11v1h1v-1H2ZM3 12v1h2v-1H3ZM5 13v1h2v-1H5Z", fill: "#000" }), (0, i.jsx)("path", { d: "M3 2v1h4V2H3ZM9 2v1h4V2H9ZM7 3v1h2V3H7Z", fill: _[2] }), (0, i.jsx)("path", { opacity: ".6", d: "M11 6V5H9v1H7V5H5v1H4v3h1v1h2.01v1h2v-1H11V9h1V6h-1Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M13 3v1h1V3h-1ZM2 3v1h1V3H2ZM3 4v1h1V4H3ZM1 4v2h1V4H1Z", fill: _[2] })] }) } }, 283107: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeLava: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ba3500", "#fd6214", "#ffb84b", "#f0f0f0"], o = ["#35363a", "#57595f", "#d8d8d8"], l = [.05, .15, .4, .9], u = [{ base: 8, tint: 1 }, { base: 5, tint: 1 }, { base: 3, tint: 1 }, { base: 8, tint: 1 }], d = [.05, .3, .95], _ = [{ base: 2, tint: 1 }, { base: 4, tint: 1 }, { base: 4, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M14 7V6h-1v1h-3V6H9V3h1V2H7v4H6v1H1v2h1v1h1V9h3v1h1v3H6v1h1v1h2v-1h1v-1H9v-3h1V9h3v1h1V9h1V7h-1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M9 0H7v1h2V0ZM6 2H3v1h3V2ZM3 3H2v3h1V3ZM7 3H6v3h1V3ZM10 3H9v3h1V3ZM14 3h-1v3h1V3ZM13 2h-3v1h3V2ZM6 6H3v1h3V6ZM13 6h-3v1h3V6ZM7 1H6v1h1V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 3H5v1h1V3ZM5 4H4v1h1V4ZM13 3h-1v1h1V3ZM12 4h-1v1h1V4ZM13 10h-1v1h1v-1ZM12 11h-1v1h1v-1ZM6 10H5v1h1v-1ZM5 11H4v1h1v-1Z", fill: f[1] }), (0, i.jsx)("path", { d: "M10 1H9v1h1V1ZM1 7H0v2h1V7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 4v1H3v1h3V4H5ZM12 4v1h-2v1h3V4h-1ZM5 11v1H3v1h3v-2H5ZM12 11v1h-2v1h3v-2h-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M2 9H1v1h1V9ZM2 6H1v1h1V6ZM16 7h-1v2h1V7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M15 7h-1v2h1V7Z", fill: T[0] }), (0, i.jsx)("path", { d: "M2 7H1v2h1V7Z", fill: T[3] }), (0, i.jsx)("path", { d: "M15 6h-1v1h1V6ZM15 9h-1v1h1V9Z", fill: "#000" }), (0, i.jsx)("path", { d: "M14 9h-1v1h1V9ZM7 9H6v1h1V9ZM3 9H2v1h1V9ZM10 9H9v1h1V9Z", fill: T[0] }), (0, i.jsx)("path", { d: "M9 15H7v1h2v-1ZM6 13H3v1h3v-1ZM3 10H2v3h1v-3ZM7 10H6v3h1v-3ZM10 10H9v3h1v-3ZM14 10h-1v3h1v-3ZM13 13h-3v1h3v-1ZM6 9H3v1h3V9ZM13 9h-3v1h3V9Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 8H3v1h3V8ZM13 8h-3v1h3V8Z", fill: T[0] }), (0, i.jsx)("path", { d: "M7 14H6v1h1v-1ZM10 14H9v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 14H7v1h2v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M9 1H7v1h2V1ZM7 2H6v1h1V1Z", fill: T[3] }), (0, i.jsx)("path", { d: "M10 13H9v1h1v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M5 3H3v2h1V4h1V3ZM12 3h-2v2h1V4h1V3ZM5 10H3v2h1v-1h1v-1ZM12 10h-2v2h1v-1h1v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M9 5V4H8V2H7v3h2ZM9 6H8v1H7v1H6v1h1v2h1v3h1v-4H8V8h2V7H9V6ZM14 7h-1v1h1V7Z", fill: T[1] }), (0, i.jsx)("path", { d: "M7 6H6v1h1V6ZM3 7H2v1h1V7ZM5 7H4v1h1V7Z", fill: T[1] })] }) } }, 907120: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeLeaf: function() { return u } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#4a8359", "#7fb134", "#bcef42", "#f0f0f0"], o = [.1, .2, .6, .9], l = [{ base: 4, tint: 1 }, { base: 3, tint: 1 }, { base: 3, tint: 1 }, { base: 10, tint: 1 }], u = e => { let { width: t = 24, height: n = 24, primaryTintColor: u, ...d } = e, { primaryColorsTransformed: _ } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: u, primaryTintLuminances: o, primaryLuminanceWeights: l }); return (0, i.jsxs)("svg", { ...(0, r.default)(d), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M15 2V1H9v1H3v5H1v5h12V7h2V2Z", fill: _[2] }), (0, i.jsx)("path", { d: "M11 13v-1H5v1h6Z", fill: _[1] }), (0, i.jsx)("path", { d: "M15 2V1H9v1h6ZM9 3V2H5v1h4Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M3 11v1h2v-1H3ZM13 10h-1v2h1v-2ZM15 5h-1v2h1V5ZM14 7h-1v3h1V7Z", fill: _[1] }), (0, i.jsx)("path", { d: "M16 1h-1v6h1V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M3 9H2v6h1V9Z", fill: _[0] }), (0, i.jsx)("path", { d: "M15 0H9v1h6V0ZM11 13H5v1h6v-1ZM9 1H5v1h4V1ZM5 2H3v1h2V2ZM3 3H2v2h1V3ZM1 7H0v5h1v3h1v-3H1V7h1V5H1v2ZM13 12h-2v1h2v-1ZM14 10h-1v2h1v-2h1V7h-1v3ZM4 13h1v-1H3v3h1v-2ZM3 15H2v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 7h1V5H2v2ZM1 9h1V7H1v2ZM5 3H3v2h1V4h1V3Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M4 8h2V7H4v1ZM6 7h2V6H6v1ZM8 6h2V5H8v1ZM10 5h1V4h-1v1ZM11 4h1V3h-1v1Z", fill: _[0] }), (0, i.jsx)("path", { d: "M5 4v1h1V4H5Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M3 8v1h1V8H3Z", fill: _[0] })] }) } }, 533122: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeLightning: function() { return u } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ffb84b", "#ffe361", "#f0f0f0"], o = [.15, .5, .9], l = [{ base: 5, tint: 1 }, { base: 3, tint: 2 }, { base: 10, tint: 1 }], u = e => { let { width: t = 24, height: n = 24, primaryTintColor: u, ...d } = e, { primaryColorsTransformed: _ } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: u, primaryTintLuminances: o, primaryLuminanceWeights: l }); return (0, i.jsxs)("svg", { ...(0, r.default)(d), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M5 6H4v1H2v2h6v2H7v1H6v1H5v1H4v1h2v-1h1v-1h1v-1h1v-1h2v-1h1V9h2V7H7V6h1V5h1V4h1V3H8v1H7v1H5v1Z", fill: _[1] }), (0, i.jsx)("path", { d: "M1 7H0v2h1V7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 7H1v2h1V7Z", fill: _[2] }), (0, i.jsx)("path", { d: "M16 7h-1v2h1V7ZM3 6H1v1h2V6ZM6 4H4v1h2V4ZM4 5H3v1h1V5Z", fill: "#000" }), (0, i.jsx)("path", { d: "M4 6H3v1h1V6ZM5 5H4v1h1V5ZM6 6H5v1h1V6ZM7 4H6v1h1V4ZM8 3H7v1h1V3ZM8 10H7v1h1v-1ZM7 11H6v1h1v-1ZM6 12H5v1h1v-1ZM5 13H4v1h1v-1ZM4 14H3v1h1v-1Z", fill: _[2] }), (0, i.jsx)("path", { d: "M12 2h-1v1h1V2ZM13 9h-1v1h1V9ZM12 10h-1v1h1v-1ZM10 11H9v1h1v-1ZM9 12H8v1h1v-1ZM15 8h-1v1h1V8Z", fill: _[0] }), (0, i.jsx)("path", { d: "M15 7h-1v1h1V7Z", fill: _[2] }), (0, i.jsx)("path", { d: "M11 3h-1v1h1V3ZM10 4H9v1h1V4ZM9 5H8v1h1V5ZM8 6H7v1h1V6Z", fill: _[0] }), (0, i.jsx)("path", { d: "M10 2H9v1h1V2Z", fill: _[2] }), (0, i.jsx)("path", { d: "M9 2H7v1h2V2ZM7 3H6v1h1V3ZM13 0h-3v1h3V0Z", fill: "#000" }), (0, i.jsx)("path", { d: "M13 1h-3v1h3V1Z", fill: _[2] }), (0, i.jsx)("path", { d: "M15 6H8v1h7V6ZM10 1H9v1h1V1ZM14 1h-1v1h1V1ZM13 2h-1v1h1V2ZM12 3h-1v1h1V3ZM11 4h-1v1h1V4ZM10 5H9v1h1V5ZM15 9h-2v1h2V9ZM12 11h-2v1h2v-1ZM13 10h-1v1h1v-1ZM9 13H7v1h2v-1ZM10 12H9v1h1v-1ZM6 15H3v1h3v-1ZM8 9H1v1h7V9ZM7 14H6v1h1v-1ZM3 14H2v1h1v-1ZM4 13H3v1h1v-1ZM5 12H4v1h1v-1ZM6 11H5v1h1v-1ZM7 10H6v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 2h-1v1h1V2Z", fill: _[1] })] }) } }, 874706: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeMoon: function() { return u } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#816bee", "#b79cf8", "#f0f0f0"], o = [.15, .45, .9], l = [{ base: 5, tint: 1 }, { base: 3, tint: 1 }, { base: 5, tint: 1 }], u = e => { let { width: t = 24, height: n = 24, primaryTintColor: u, ...d } = e, { primaryColorsTransformed: _ } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: u, primaryTintLuminances: o, primaryLuminanceWeights: l }); return (0, i.jsxs)("svg", { ...(0, r.default)(d), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M14 5V3h-1V2h-1V1h-2v1h1v1h1v4h-1v1h-1v1H6V8H5V7H4V3h1V2h1V1H4v1H3v1H2v2H1v6h1v2h1v1h2v1h6v-1h2v-1h1v-2h1V5h-1Z", fill: _[1] }), (0, i.jsx)("path", { d: "M6 0H4v1h2V0ZM2 3H1v2h1V3ZM5 3H4v4h1V3ZM10 8H6v1h4V8Z", fill: "#000" }), (0, i.jsx)("path", { d: "M10 9H6v1h4V9Z", fill: _[2] }), (0, i.jsx)("path", { d: "M1 5H0v6h1V5ZM11 15H5v1h6v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 10H1v1h1v-1ZM13 12h-2v1H5v-1H3v-1H2v2h1v1h2v1h6v-1h2v-1h1v-2h-1v1ZM15 10h-1v1h1v-1Z", fill: _[0] }), (0, i.jsx)("path", { d: "M4 1H3v1h1V1ZM3 2H2v1h1V2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 1H4v1h2V1ZM4 2H3v1h1V2ZM3 3H2v1h1V3ZM2 5H1v1h1V5ZM3 6H2v1h1V6ZM5 7H4v1h1V7ZM6 8H5v1h1V8ZM12 7h-1v1h1V7ZM11 1h-1v1h1V1ZM11 8h-1v1h1V8Z", fill: _[2] }), (0, i.jsx)("path", { d: "M7 1H6v1h1V1ZM6 2H5v1h1V2ZM6 7H5v1h1V7ZM2 11H1v2h1v-2ZM3 13H2v1h1v-1ZM12 0h-2v1h2V0ZM13 14h-2v1h2v-1ZM5 14H3v1h2v-1ZM15 3h-1v2h1V3ZM12 3h-1v4h1V3ZM16 5h-1v6h1V5ZM13 1h-1v1h1V1ZM14 2h-1v1h1V2ZM10 1H9v1h1V1ZM11 2h-1v1h1V2ZM11 7h-1v1h1V7ZM15 11h-1v2h1v-2ZM14 13h-1v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 2H4v1h1V2Z", fill: _[1] })] }) } }, 137411: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgePsychic: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#7fb134", "#bcef42", "#f0f0f0"], o = ["#816bee", "#b79cf8"], l = [.1, .6, .95], u = [{ base: 8, tint: 1 }, { base: 4, tint: 1 }, { base: 8, tint: 1 }], d = [.1, .3], _ = [{ base: 8, tint: 1 }, { base: 6, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M14 4V3h-1V2h-1V1H6v1H4v1H3v1H2v2H1v5h1v1h1v1h1v1h1v1h5v-1h2v-1h1v-1h1v-2h1V4h-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M15 1h-2v1h2V1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M3 13H1v1h2v-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M4 14H1v1h3v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M15 8h-1v2h1V8Z", fill: f[0] }), (0, i.jsx)("path", { d: "M12 1H6v1h6V1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M12 2H6v1h6V2Z", fill: f[1] }), (0, i.jsx)("path", { d: "M10 14H5v1h5v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M15 2h-1v1h1V2Z", fill: T[1] }), (0, i.jsx)("path", { d: "M6 5H5v1h1V5ZM3 4H2v1h1V4ZM4 3H3v1h1V3Z", fill: T[2] }), (0, i.jsx)("path", { d: "M6 3H5v1h1V3ZM13 3h-1v1h1V3Z", fill: f[1] }), (0, i.jsx)("path", { d: "M5 2H4v1h1V2ZM7 6H6v1h1V6ZM2 12H1v1h1v-1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M14 11h-1v1h1v-1ZM13 12h-1v1h1v-1ZM12 13h-1v1h1v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M15 1v2h-1V2h-1v1h1v1h1v6h1V1h-1ZM3 3H2v1h1V3ZM4 2h2V1H4v1H3v1h1V2ZM15 10h-1v2h1v-2ZM2 4H1v2h1V4ZM12 14h-2v1h2v-1ZM14 12h-1v1h1v-1ZM3 12H2v1h1v-1ZM4 13H3v1h1v-1ZM2 11H1v1h1v-1ZM13 13h-1v1h1v-1ZM1 6H0v9h1V6Z", fill: "#000" }), (0, i.jsx)("path", { d: "M12 2h1V1h2V0H6v1h6v1ZM5 15v-1H4v1H1v1h9v-1H5Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 6H1v2h1V6Z", fill: T[2] }), (0, i.jsx)("path", { d: "M10 6H8v1h2V6ZM9 10H7v1h2v-1ZM11 7h-1v2h1V7ZM3 11h2v-1H4V5H3v6ZM11 4H7v1h4V4ZM10 12H6v1h4v-1ZM15 5h-1v3h1V5ZM2 8H1v3h1V8ZM5 4H4v1h1V4ZM8 7H7v1h1V7ZM7 9H6v1h1V9ZM6 11H5v1h1v-1ZM10 9H9v1h1V9ZM11 11h-1v1h1v-1ZM12 10h-1v1h1v-1ZM7 6V5H6v1H5v3h1V6h1ZM14 4h-1v1h1V4ZM12 5h-1v1h1V5ZM13 6h-1v4h1V6ZM3 11H2v1h1v-1ZM4 12H3v1h1v-1ZM5 13H4v1h1v-1Z", fill: f[1] })] }) } }, 775101: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeSkull: function() { return u } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#57595f", "#847d8b", "#d1cdd5"], o = [0, .12, .6], l = [{ base: 10, tint: 1 }, { base: 5, tint: 1 }, { base: 2, tint: 1 }], u = e => { let { width: t = 24, height: n = 24, primaryTintColor: u, ...d } = e, { primaryColorsTransformed: _ } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: u, primaryTintLuminances: o, primaryLuminanceWeights: l }); return (0, i.jsxs)("svg", { ...(0, r.default)(d), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M14 4V3h-1V2h-1V1H4v1H3v1H2v1H1v6h1v1h1v1h1v2h1v1h6v-1h1v-2h1v-1h1v-1h1V4h-1Z", fill: _[2] }), (0, i.jsx)("path", { d: "M4 1H3v1h1V1ZM3 2H2v1h1V2ZM2 3H1v1h1V3ZM4 12H3v2h1v-2ZM3 11H2v1h1v-1ZM5 14H4v1h1v-1ZM2 10H1v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M4 11H3v1h1v-1ZM5 13H4v1h1v-1ZM3 10H2v1h1v-1ZM7 7H4v3h3V7Z", fill: _[1] }), (0, i.jsx)("path", { d: "M7 8H5v2h2V8Z", fill: _[0] }), (0, i.jsx)("path", { d: "M12 7H9v3h3V7Z", fill: _[1] }), (0, i.jsx)("path", { d: "M12 8h-2v2h2V8Z", fill: _[0] }), (0, i.jsx)("path", { d: "M12 12.01h1v-1h-1v1ZM11 14.01h1v-1h-1v1ZM13 11.01h1v-1h-1v1Z", fill: _[1] }), (0, i.jsx)("path", { d: "M1 4H0v6h1V4Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 4H1v6h1V4Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M12 2.01h1v-1h-1v1ZM13 3.01h1v-1h-1v1ZM14 4.01h1v-1h-1v1ZM12 14.01h1v-2h-1v2ZM13 12.01h1v-1h-1v1ZM11 15.01h1v-1h-1v1ZM14 11.01h1v-1h-1v1ZM15 10.01h1v-6h-1v6Z", fill: "#000" }), (0, i.jsx)("path", { d: "M14 10.01h1v-6h-1v6Z", fill: _[1] }), (0, i.jsx)("path", { d: "M4 0v1h8V0H4Z", fill: "#000" }), (0, i.jsx)("path", { d: "M4 2H3v1h1V2ZM3 3H2v1h1V3ZM4 4H3v1h1V4ZM12 3.01h1v-1h-1v1ZM13 4.01h1v-1h-1v1ZM4 1v1h8V1H4Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M5 15v1h6v-1H5Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 14v1h6v-1H5Z", fill: _[1] }), (0, i.jsx)("path", { d: "M7 13H6v2h1v-2ZM10 13H9v2h1v-2Z", fill: _[0] })] }) } }, 933632: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeSmoke: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#35363a", "#57595f", "#d8d8d8"], o = ["#847d8b", "#d1cdd5", "#f0f0f0"], l = [.05, .2, .95], u = [{ base: 4, tint: 1 }, { base: 2, tint: 1 }, { base: 3, tint: 1 }], d = [.2, .5, .95], _ = [{ base: 4, tint: 1 }, { base: 2, tint: 1 }, { base: 3, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M13 3V2h-2v1h-1V2H9V1H7v1H6v1H5V2H3v1H2v4h2v1h1V7h6v1h1V7h2V3h-1Z", fill: f[1] }), (0, i.jsx)("path", { d: "M14 9V8h-4V7H6v1H2v1H1v3h1v1h4v1h1v1h2v-1h1v-1h4v-1h1V9h-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 0H7v1h2V0ZM7 1H6v1h1V1ZM10 1H9v1h1V1ZM13 1h-2v1h2V1ZM14 2h-1v1h1V2ZM11 2h-1v1h1V2ZM6 2H5v1h1V2ZM5 1H3v1h2V1ZM2 3H1v4h1V3ZM3 2H2v1h1V2ZM2 8H1v1h1V8ZM1 9H0v3h1V9ZM2 12H1v1h1v-1ZM6 13H2v1h4v-1ZM7 14H6v1h1v-1ZM9 15H7v1h2v-1ZM10 14H9v1h1v-1ZM14 13h-4v1h4v-1ZM15 12h-1v1h1v-1ZM16 9h-1v3h1V9ZM15 8h-1v1h1V8ZM15 3h-1v4h1V3ZM5 8H4v1h1V8ZM6 7H5v1h1V7ZM10 6H6v1h4V6ZM11 7h-1v1h1V7ZM12 8h-1v1h1V8ZM13 7h-1v1h2V7h-1ZM3 7H2v1h2V7H3Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 11H1v1h1v-1ZM3 12H2v1h1v-1ZM7 13H6v1h1v-1ZM10 13H9v1h1v-1ZM9 14H7v1h2v-1ZM14 12h-1v1h1v-1ZM15 9h-1v3h1V9Z", fill: T[0] }), (0, i.jsx)("path", { d: "M3 6H2v1h1V6ZM5 7H4v1h1V7ZM12 7h-1v1h1V7ZM6 6H5v1h1V6ZM11 6h-1v1h1V6Z", fill: f[0] }), (0, i.jsx)("path", { d: "M12 7h-1v1h1V7ZM10 5H6v1h4V5ZM14 4h-1v3h1V4Z", fill: f[0] }), (0, i.jsx)("path", { d: "M4 4H3v1h1V4ZM3 3H2v1h1V3ZM5 2H3v1h2V2ZM7 2H6v1h1V2ZM9 1H7v1h2V1ZM10 2H9v1h1V2ZM13 2h-2v1h2V2ZM14 3h-1v1h1V3Z", fill: f[2] }), (0, i.jsx)("path", { d: "M2 9H1v1h1V9ZM3 8H2v1h1V8ZM6 8H5v1h1V8ZM10 7H6v1h4V7ZM12 9h-1v1h1V9ZM14 8h-2v1h2V8Z", fill: T[2] })] }) } }, 158188: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeSnow: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#4282D8", "#54cfff", "#f0f0f0"], o = ["#6c9ca6", "#9af4dc", "#f0f0f0"], l = [.1, .35, 1], u = [{ base: 8, tint: 1 }, { base: 6, tint: 1 }, { base: 8, tint: 1 }], d = [.1, .6, 1], _ = [{ base: 4, tint: 1 }, { base: 1, tint: 1 }, { base: 8, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M11 10h1V9h3V8h-3V7h-1V4h2V3h-3v1H7V3H6V2H4v1H3v1H2v1H1v6h1v1h1v1h1v-2h4v1H7v1h1v1h2v-1h3v-1h-2v-2Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 11H8v1h1v-1ZM13 12h-1v1h1v-1ZM15 8h-1v1h1V8ZM12 7h-1v1h1V7ZM3 10H2v1h1v-1ZM4 11H3v2h1v-2ZM10 13H7v1h3v-1ZM10 10H9v1h1v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M9 0H8v1h1V0ZM10 1H9v1h1V1ZM8 1H4v1h4V1ZM4 2H3v1h1V2ZM7 2H6v1h1V2ZM8 3H7v1h1V3ZM10 3H9v1h1V3ZM13 2h-3v1h3V2ZM14 3h-1v1h1V3ZM3 3H2v1h1V3ZM2 4H1v1h1V4ZM1 5H0v6h1V5ZM3 6H2v4h1V6ZM4 5H3v1h1V5ZM9 4H4v1h5V4Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 4H8v2h1V4ZM13 4h-2v1h2V4Z", fill: "#000" }), (0, i.jsx)("path", { d: "M12 4h-1v3h1V4ZM15 7h-3v1h3V7ZM16 8h-1v1h1V8ZM10 6H9v4h1V6ZM15 9h-3v1h3V9ZM12 10h-1v2h1v-2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M13 11h-2v1h2v-1ZM14 12h-1v1h1v-1ZM13 13h-3v1h3v-1ZM10 14H6v1h4v-1ZM8 11H4v1h4v-1ZM6 15H5v1h1v-1ZM5 14H4v1h1v-1ZM4 13H3v1h1v-1ZM5 12H4v1h1v-1ZM7 12H6v1h1v-1ZM3 12H2v1h1v-1ZM2 11H1v1h1v-1ZM4 10H3v1h1v-1ZM9 10H8v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 6H8V5H4v1H3v4h1v1h4v-1h1V6Z", fill: f[1] }), (0, i.jsx)("path", { d: "M8 10H4v1h4v-1ZM4 9H3v1h1V9ZM9 9H8v1h1V9Z", fill: f[0] }), (0, i.jsx)("path", { d: "M4 6H3v1h1V6ZM6 7H5v1h1V7ZM8 5H4v1h4V5Z", fill: f[2] }), (0, i.jsx)("path", { d: "M8 13H7v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 5H1v2h1V5ZM4 3H3v1h1V3ZM6 2H4v1h2V2ZM13 3h-3v1h3V3ZM9 1H8v1H7v1h1v1h1V3h1V2H9V1ZM6 12H5v1H4v1h1v1h1v-1h1v-1H6v-1Z", fill: T[2] })] }) } }, 66334: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeSound: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#4282d8", "#47baff", "#b5e3ff", "#f0f0f0"], o = ["#816bee", "#b79cf8", "#f0f0f0"], l = [.1, .4, .8, 1], u = [{ base: 8, tint: 1 }, { base: 2, tint: 1 }, { base: 8, tint: 1 }, { base: 8, tint: 1 }], d = [.1, .5, 1], _ = [{ base: 4, tint: 1 }, { base: 1, tint: 1 }, { base: 8, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M14 7V6h-2V5h-1V4h-1V2H9V1H7v1H6v2H5v1H4v1H2v1H1v2h1v1h2v1h1v1h1v2h1v1h2v-1h1v-2h1v-1h1v-1h2V9h1V7h-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M11 7H9V6H7v1H5v2h2v1h2V9h2V7Z", fill: T[2] }), (0, i.jsx)("path", { d: "M3 0H1v1h2V0ZM5 1H3v1h2V1ZM4 5H2v1h2V5ZM1 1H0v2h1V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M3 1H1v2h1V2h1V1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M1 7H0v2h1V7ZM16 1h-1v2h1V1ZM15 3h-1v2h1V3ZM2 3H1v2h1V3ZM6 2H5v2h1V2ZM11 2h-1v2h1V2ZM7 1H6v1h1V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M7 2H6v1h1V2ZM8 3H7v1h1V3ZM5 5H4v1h1V5ZM3 6H2v1h1V6ZM2 7H1v1h1V7Z", fill: T[3] }), (0, i.jsx)("path", { d: "M3 15v-1h2v-2H4v-1H2v2H1v2h2Z", fill: f[1] }), (0, i.jsx)("path", { d: "M2 13H1v1h1v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M5 4H4v1h1V4Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 2H2v3h2V4h1V2ZM14 5V2h-3v2h1v1h2Z", fill: f[1] }), (0, i.jsx)("path", { d: "M5 2H4v2h1V2ZM4 4H3v1h1V4ZM14 3h-1v2h1V3ZM15 2h-1v1h1V2Z", fill: f[0] }), (0, i.jsx)("path", { d: "M13 15v-1h-2v-2h1v-1h2v2h1v2h-2Z", fill: f[1] }), (0, i.jsx)("path", { d: "M15 13h-1v1h1v-1ZM14 11h-1v1h1v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M2 6H1v1h1V6ZM16 7h-1v2h1V7ZM15 6h-1v1h1V6ZM10 1H9v1h1V1ZM12 4h-1v1h1V4ZM9 0H7v1h2V0Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 1H7v1h2V1ZM9 7H7v2h2V7Z", fill: T[3] }), (0, i.jsx)("path", { d: "M15 1h-2v1h2V1ZM13 2h-2v1h2V2Z", fill: f[2] }), (0, i.jsx)("path", { d: "M9 5H7v1h2V5ZM9 10H7v1h2v-1ZM15 0h-2v1h2V0ZM13 1h-2v1h2V1ZM14 5h-2v1h2V5ZM3 15H1v1h2v-1ZM5 14H3v1h2v-1ZM4 10H2v1h2v-1ZM1 13H0v2h1v-2ZM16 13h-1v2h1v-2ZM15 11h-1v2h1v-2ZM2 11H1v2h1v-2ZM6 12H5v2h1v-2ZM11 12h-1v2h1v-2ZM7 14H6v1h1v-1ZM5 11H4v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 12H4v2h1v-2ZM4 11H3v1h1v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M2 9H1v1h1V9ZM5 7H4v2h1V7ZM7 6H5v1h2V6ZM7 9H5v1h2V9ZM12 7h-1v2h1V7ZM11 6H9v1h2V6ZM11 9H9v1h2V9ZM15 9h-1v1h1V9Z", fill: "#000" }), (0, i.jsx)("path", { d: "M15 7h-1v2h1V7ZM14 6h-1v1h1V6ZM14 9h-1v1h1V9ZM12 9h-1v1h1V9ZM9 11H7v1h2v-1ZM10 10H9v1h1v-1ZM7 10H6v1h1v-1ZM9 14H7v1h2v-1ZM10 13H9v1h1v-1ZM7 13H6v1h1v-1ZM5 9H4v1h1V9ZM2 8H1v1h1V8ZM3 9H2v1h1V9Z", fill: T[0] }), (0, i.jsx)("path", { d: "M10 14H9v1h1v-1ZM12 11h-1v1h1v-1ZM9 15H7v1h2v-1ZM15 15h-2v1h2v-1ZM13 14h-2v1h2v-1ZM14 10h-2v1h2v-1Z", fill: "#000" })] }) } }, 215635: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeSun: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ffb84b", "#ffe361", "#f0f0f0"], o = ["#ba3500", "#fd6214", "#f0f0f0"], l = [.07, .45, 1], u = [{ base: 4, tint: 1 }, { base: 3, tint: 1 }, { base: 8, tint: 1 }, { base: 8, tint: 1 }], d = [.1, .4, 1], _ = [{ base: 2, tint: 1 }, { base: 1, tint: 2 }, { base: 4, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M14 6v1h-3V6h-1V5H9V2h1V1H1v1h2v1h1v1h2v2H5v1H4v2H3v2H2v2H1v2h3v-1h2v-1h1v-1h1v-1h2v-1h1V9h1v1h1v1h1v1h1V6h-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M14 0h-3v1h3V0ZM4 15H1v1h3v-1ZM6 14H4v1h2v-1ZM3 2H1v1h2V2ZM4 4v1h1v1h1V4H4ZM4 7H3v2h1V7ZM3 9H2v2h1V9ZM2 11H1v2h1v-2ZM1 13H0v2h1v-2ZM10 11H8v1h2v-1ZM10 0H1v1h9V0Z", fill: "#000" }), (0, i.jsx)("path", { d: "M10 1H1v1h9V1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M14 6h-3v1h3V6ZM11 1h-1v1h1V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 2h-1v2h1V2ZM14 1h-3v1h3V1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M14 5h-3v1h3V5Z", fill: f[0] }), (0, i.jsx)("path", { d: "M1 1H0v1h1V1ZM4 3H3v1h1V3ZM5 6H4v1h1V6ZM15 1h-1v1h1V1ZM16 2h-1v3h1V2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M15 2h-1v3h1V2Z", fill: f[0] }), (0, i.jsx)("path", { d: "M16 6h-1v6h1V6Z", fill: "#000" }), (0, i.jsx)("path", { d: "M15 6h-1v6h1V6Z", fill: T[0] }), (0, i.jsx)("path", { d: "M15 5h-1v1h1V5ZM10 2H9v3h1V2ZM11 5h-1v1h1V5Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 4h-1v1h1V4Z", fill: f[0] }), (0, i.jsx)("path", { d: "M7 13H6v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M10 7v1H9v1H8v1H7v1H6v1H5v1H4v1h2v-1h1v-1h1v-1h2v-1h1V7h-1ZM4 14H3v1h1v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M8 12H7v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 7H4v1h1V7ZM6 6H5v1h1V6Z", fill: T[2] }), (0, i.jsx)("path", { d: "M7 5H6v1h1V5ZM8 4H7v1h1V4Z", fill: T[0] }), (0, i.jsx)("path", { d: "M6 8H5v1h1V8ZM4 9H3v1h1V9ZM3 11H2v1h1v-1ZM2 13H1v1h1v-1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M11 10h-1v1h1v-1ZM12 9h-1v1h1V9ZM13 10h-1v1h1v-1ZM14 11h-1v1h1v-1ZM15 12h-1v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M14 2h-3v3h3V2Z", fill: f[1] })] }) } }, 718572: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeSword: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#ffb84b", "#ffe361", "#f0f0f0"], o = ["#847d8b", "#d1cdd5", "#f0f0f0"], l = [.1, .4, .7], u = [{ base: 5, tint: 1 }, { base: 4, tint: 1 }, { base: 3, tint: 1 }], d = [.3, .9, 1], _ = [{ base: 4, tint: 1 }, { base: 3, tint: 1 }, { base: 8, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M11 1v1h-1v1H9v1H8v1H7v2H6v1h2v2h1V9h2V8h1V7h1V6h1V5h1V1h-4Z", fill: f[1] }), (0, i.jsx)("path", { d: "M3 9h1v1h2v2h1v1h2v1h2v-2H9v-1H8v-1H7V9H6V8H5V7H4V5H2v2h1v2Z", fill: T[1] }), (0, i.jsx)("path", { d: "M5 11H3v2h2v-2ZM3 13H1v2h2v-2Z", fill: T[1] }), (0, i.jsx)("path", { d: "M11 1h-1v1h1V1ZM10 2H9v1h1V2ZM9 3H8v1h1V3ZM8 4H7v1h1V4ZM7 5H6v2h1V5ZM5 5H4v2h1V5ZM2 5H1v2h1V5ZM3 7H2v2h1V7ZM11 9H9v1h2V9ZM11 11H9v1h2v-1ZM12 12h-1v2h1v-2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M15 1h-1v4h1V1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M1 13H0v2h1v-2ZM11 14H9v1h2v-1ZM9 13H7v1h2v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 12H3v1h2v-1ZM3 14H1v1h2v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M3 14v1h1v-1h1v-1H3v1ZM6 12v-2H4V9H3v2h2v2h2v-1H6ZM3 12v-1H2v1H1v1h2v-1ZM3 15H1v1h2v-1ZM4 4H2v1h2V4ZM7 9v1h1V8H6v1h1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M13 3h-1v1h1V3ZM12 4h-1v1h1V4ZM11 5h-1v1h1V5ZM10 6H9v1h1V6ZM9 7H8v1h1V7Z", fill: f[0] }), (0, i.jsx)("path", { d: "M7 7H6v1h1V7Z", fill: f[2] }), (0, i.jsx)("path", { d: "M4 8H3v1h1V8ZM3 6H2v1h1V6ZM5 9H4v1h1V9ZM7 11H6v1h1v-1ZM8 12H7v1h1v-1ZM10 13H9v1h1v-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M9 10H8v1h1v-1ZM6 7H5v1h1V7ZM15 5h-1v1h1V5ZM14 6h-1v1h1V6ZM13 7h-1v1h1V7ZM12 8h-1v1h1V8ZM11 0v1h4v4h1V0h-5Z", fill: "#000" }), (0, i.jsx)("path", { d: "M11 12h-1v1h1v-1ZM9 11H8v1h1v-1ZM8 10H7v1h1v-1ZM7 9H6v1h1V9ZM6 8H5v1h1V8ZM5 7H4v1h1V7Z", fill: T[2] }), (0, i.jsx)("path", { d: "M8 5H7v1h3V5H9V4H8v1ZM10 2v1H9v1h3V3h-1V2h-1ZM14 1h-3v1h3V1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M14 5h-1v1h1V5ZM13 6h-1v1h1V6ZM12 7h-1v1h1V7ZM11 8h-1v1h1V8ZM9 9H8v1h1V9Z", fill: f[0] }), (0, i.jsx)("path", { d: "M4 5H3v1h1V5ZM4 11H3v1h1v-1ZM2 13H1v1h1v-1Z", fill: T[2] })] }) } }, 496223: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeToadstool: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#be0351", "#ff2c52"], o = ["#ffb84b", "#ffe361"], l = [.12, .25], u = [{ base: 5, tint: 1 }, { base: 4, tint: 1 }], d = [.4, .8], _ = [{ base: 5, tint: 1 }, { base: 4, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M11 12v-2h-1V9H6v1H5v2H4v3h8v-3h-1Z", fill: f[1] }), (0, i.jsx)("path", { d: "M14 3V2h-2V1H4v1H2v1H1v6h1v1h2V9h8v1h2V9h1V3h-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M12 0H4v1h8V0Z", fill: "#000" }), (0, i.jsx)("path", { d: "M12 1H4v1h8V1ZM4 2H2v1h2V2ZM14 2h-2v1h2V2Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M12 15H4v1h8v-1ZM1 3H0v6h1V3ZM4 1H2v1h2V1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M2 7V3H1v6h2V7H2Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M15 3h-1v6h1V3Z", fill: T[0] }), (0, i.jsx)("path", { d: "M15 6h-2v2h2V6ZM12 2h-2v2h2V2Z", fill: "#fff" }), (0, i.jsx)("path", { opacity: ".5", d: "M15 6h-1v2h1V6Z", fill: T[0] }), (0, i.jsx)("path", { d: "M10 7H6v1h4V7ZM12 8h-2v1h2V8ZM6 8H4v1h2V8Z", fill: T[0] }), (0, i.jsx)("path", { d: "M6 10H5v2h1v-2Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M11 10h-1v2h1v-2ZM11 12v2H4v1h8v-3h-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M5 12H4v2h1v-2Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M4 9H2v1h2V9ZM14 9h-2v1h2V9Z", fill: T[0] }), (0, i.jsx)("path", { d: "M8 6H6v2h2V6Z", fill: "#fff" }), (0, i.jsx)("path", { opacity: ".5", d: "M8 7H6v1h2V7Z", fill: T[0] }), (0, i.jsx)("path", { d: "M10 8H6v1h4V8Z", fill: "#000" }), (0, i.jsx)("path", { d: "M10 9H6v1h4V9Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M2 2H1v1h1V2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M5 3H4v1h1V3Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M4 12H3v3h1v-3ZM5 10h1V9H4v1H2v1h2v1h1v-2ZM2 9H1v1h1V9ZM16 3h-1v6h1V3ZM14 1h-2v1h2V1ZM15 2h-1v1h1V2ZM14 10h-2V9h-2v1h1v2h1v3h1v-3h-1v-1h2v-1h1V9h-1v1Z", fill: "#000" })] }) } }, 249849: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getTransformedBadgeColors: function() { return a } }); var i = n("688619"), r = n.n(i); function s(e, t, n) { if (!r().valid(t)) return e.map(() => "#000000"); let i = r()(t), s = i.luminance(); return e.map((e, t) => i.luminance((e * n[t].base + s * n[t].tint) / (n[t].base + n[t].tint)).hex()) } function a(e) { let { primaryBaseColors: t, primaryTintColor: n, primaryTintLuminances: i, primaryLuminanceWeights: r, secondaryBaseColors: a, secondaryTintColor: o, secondaryTintLuminances: l, secondaryLuminanceWeights: u } = e, d = null != n ? s(i, n, r) : t, _ = []; return null != a && null != l && null != u && (_ = null != o ? s(l, o, u) : a), { primaryColorsTransformed: d, secondaryColorsTransformed: _ } } }, 846262: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeWaterDrop: function() { return u } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#4282d8", "#0abbff", "#ffffff"], o = [.1, .32, 1], l = [{ base: 3, tint: 1 }, { base: 3, tint: 1 }, { base: 10, tint: 1 }], u = e => { let { width: t = 24, height: n = 24, primaryTintColor: u, ...d } = e, { primaryColorsTransformed: _ } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: u, primaryTintLuminances: o, primaryLuminanceWeights: l }); return (0, i.jsxs)("svg", { ...(0, r.default)(d), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M13 6V5h-1V4h-1V3h-1V2H9V1H7v1H6v1H5v1H4v1H3v1H2v2H1v5h1v1h2v1h8v-1h2v-1h1V8h-1V6h-1Z", fill: _[1] }), (0, i.jsx)("path", { d: "M7 0v1h2V0H7ZM6 1v1h1V1H6ZM9 1v1h1V1H9ZM10 2v1h1V2h-1ZM11 3v1h1V3h-1ZM12 4v1h1V4h-1ZM13 5v1h1V5h-1ZM14 6v2h1V6h-1ZM1 6v2h1V6H1ZM0 8v5h1V8H0ZM15 8v5h1V8h-1ZM5 2v1h1V2H5ZM4 3v1h1V3H4ZM3 4v1h1V4H3ZM2 5v1h1V5H2ZM1 13v1h1v-1H1ZM14 13v1h1v-1h-1ZM4 15v1h8v-1H4Z", fill: "#000" }), (0, i.jsx)("path", { d: "M4 14v1h8v-1H4Z", fill: _[0] }), (0, i.jsx)("path", { d: "M2 14v1h2v-1H2ZM14 15v-1h-2v1h2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M7 1v1h2V1H7Z", fill: _[2] }), (0, i.jsx)("path", { opacity: ".5", d: "M11 8V7h-1V6H9V5H7v1H6v1H5v1H4v3h1v1h6v-1h1V8h-1Z", fill: "#fff" }), (0, i.jsx)("path", { d: "M6 2v1h1V2H6ZM5 3v1h1V3H5ZM6 4v1h1V4H6ZM4 4v1h1V4H4ZM3 5v1h1V5H3ZM2 6v2h1V6H2ZM1 8v2h1V8H1Z", fill: _[2] }), (0, i.jsx)("path", { d: "M12 5v1h1V5h-1ZM13 6v2h1V6h-1ZM14 8v4h-1v1h-1v1h2v-1h1V8h-1ZM2 14h2v-1H2v1Z", fill: _[0] })] }) } }, 926372: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanBadgeWind: function() { return c } }); var i = n("735250"); n("470079"); var r = n("331595"), s = n("249849"); let a = ["#816bee", "#b79cf8", "#f0f0f0"], o = ["#6c9ca6", "#9af4dc", "#f0f0f0"], l = [.07, .35, 1], u = [{ base: 4, tint: 1 }, { base: 1, tint: 1 }, { base: 8, tint: 1 }, { base: 6, tint: 1 }], d = [.2, .75, 1], _ = [{ base: 2, tint: 1 }, { base: 1, tint: 1 }, { base: 6, tint: 1 }], c = e => { let { width: t = 24, height: n = 24, primaryTintColor: c, secondaryTintColor: E, ...I } = e, { primaryColorsTransformed: T, secondaryColorsTransformed: f } = (0, s.getTransformedBadgeColors)({ primaryBaseColors: a, primaryTintColor: c, primaryTintLuminances: l, primaryLuminanceWeights: u, secondaryBaseColors: o, secondaryTintColor: E, secondaryTintLuminances: d, secondaryLuminanceWeights: _ }); return (0, i.jsxs)("svg", { ...(0, r.default)(I), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M14 4V3h-2V1H8v1H7v1H6V2H3v1H2v4H1v3h1V9h1V8h5V6h1V5h5v1h1V4h-1Z", fill: T[1] }), (0, i.jsx)("path", { d: "M9 6v1H8v2h1v2h2v1h3v-1h1V6H9Z", fill: f[1] }), (0, i.jsx)("path", { d: "M4 10v4h1v1h3v-1h1v-4H4Z", fill: f[1] }), (0, i.jsx)("path", { d: "M8 14H5v1h3v-1ZM14 11h-3v1h3v-1ZM15 10h-1v1h1v-1ZM9 13H8v1h1v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M9 7H8v1h1V7ZM11 8h-1v1h1V8ZM14 6H9v1h5V6Z", fill: f[2] }), (0, i.jsx)("path", { d: "M8 1H7v1h1V1ZM15 3h-1v1h1V3ZM14 8h-1v2h1V8ZM9 6H8v1h1V6Z", fill: "#000" }), (0, i.jsx)("path", { d: "M9 5H8v1h1V5Z", fill: T[0] }), (0, i.jsx)("path", { d: "M3 9H2v1h1V9ZM7 13H6v1h1v-1ZM6 12H5v1h1v-1Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 12H5v1h1v-1ZM13 10h-1v1h1v-1ZM12 9h-1v1h1V9ZM5 14H4v1h1v-1ZM9 14H8v1h1v-1ZM2 10H1v1h1v-1ZM3 14H2v1h1v-1ZM2 15H1v1h1v-1ZM15 4v2h-1v1h1v4h1V4h-1ZM13 2V1h-1v2h2V2h-1ZM6 1H3v1h3V1ZM13 7h-3v1h3V7ZM7 10H4v1h3v-1ZM8 15H5v1h3v-1ZM7 2H6v1h1V2ZM3 2H2v1h1V2Z", fill: "#000" }), (0, i.jsx)("path", { d: "M6 2H3v1h3V2ZM7 3H6v1h1V3ZM4 5H3v1h1V5ZM2 7H1v1h1V7ZM3 3H2v1h1V3Z", fill: T[2] }), (0, i.jsx)("path", { d: "M14 12h-3v1h3v-1ZM10 11V8H9v1H8v1h1v4h1v-2h1v-1h-1ZM15 11h-1v1h1v-1ZM2 3H1v4h1V3ZM1 7H0v3h1V7ZM4 11H3v3h1v-3ZM8 11H7v2h1v-2ZM1 11H0v4h1v-4ZM12 0H8v1h4V0Z", fill: "#000" }), (0, i.jsx)("path", { d: "M8 2H7v1h1V2ZM12 1H8v1h4V1Z", fill: T[2] }), (0, i.jsx)("path", { d: "M14 5H9v1h5V5Z", fill: "#000" }), (0, i.jsx)("path", { d: "M14 4V3h-1v1H9v1h5v1h1V4h-1Z", fill: T[0] }), (0, i.jsx)("path", { d: "M5 11H4v1h1v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M7 6v1H3v1h5V6H7Z", fill: T[0] }), (0, i.jsx)("path", { d: "M7 7v1H3v1h5V7H7Z", fill: "#000" }), (0, i.jsx)("path", { d: "M3 8H2v1h1V8ZM2 9H1v1h1V9Z", fill: T[0] }), (0, i.jsx)("path", { d: "M3 9v1H2v1H1v4h1v-1h1v-3h1v-1h4V9H3Z", fill: f[1] }), (0, i.jsx)("path", { d: "M3 10H2v1h1v-1ZM2 11H1v1h1v-1Z", fill: f[2] }), (0, i.jsx)("path", { d: "M3 13H2v1h1v-1ZM2 14H1v1h1v-1Z", fill: f[0] }), (0, i.jsx)("path", { d: "M8 9H3v1h5V9Z", fill: f[2] })] }) } }, 284019: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("603368"), u = n("843656"); function d(e) { let { themeColor: t, color: n, className: s, ...d } = e, _ = (0, o.useToken)(o.tokens.colors.BG_SURFACE_OVERLAY), c = r.useMemo(() => (0, l.getClanPrimaryButtonStyles)(t, _.hex()), [t]); return (0, i.jsx)(o.Button, { ...d, style: c, className: a()(s, { [u.customButton]: null != c }), color: null != c ? o.Button.Colors.CUSTOM : n }) } }, 238302: function(e, t, n) { "use strict"; n.r(t), n.d(t, { closeEditor: function() { return o }, openEditor: function() { return a }, resetBackgroundGradientPreset: function() { return s }, resetPreviewClientTheme: function() { return l }, updateBackgroundGradientPreset: function() { return r } }); var i = n("570140"); let r = e => { i.default.dispatch({ type: "UPDATE_BACKGROUND_GRADIENT_PRESET", presetId: e }) }, s = () => { i.default.dispatch({ type: "UPDATE_BACKGROUND_GRADIENT_PRESET", presetId: null }) }, a = () => { i.default.dispatch({ type: "CLIENT_THEMES_EDITOR_OPEN" }) }, o = () => { i.default.dispatch({ type: "CLIENT_THEMES_EDITOR_CLOSE" }) }, l = () => { i.default.dispatch({ type: "RESET_PREVIEW_CLIENT_THEME" }) } }, 514361: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"); var s, a = n("442837"), o = n("524437"), l = n("570140"), u = n("605236"), d = n("238514"), _ = n("781391"), c = n("210887"), E = n("740492"), I = n("695346"), T = n("581883"), f = n("131704"), S = n("592125"), h = n("594174"), A = n("74538"), m = n("51144"), N = n("47760"), p = n("469115"), O = n("874893"); function C(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let R = !1, g = !0, L = !1; function v() { R = !0 } function D() { g && (i = void 0), L = !1, R = !1 } let M = () => { g = !A.default.canUseClientThemes(h.default.getCurrentUser()) }, y = () => { let e = I.ClientThemeSettings.getSetting().backgroundGradientPresetId; if (d.default.shouldSync("appearance")) { if (null == e) { null != i && (i = void 0); return } i = p.BACKGROUND_GRADIENT_PRESETS_MAP[e] } }, P = () => { if (!d.default.shouldSync("appearance")) return; let e = I.ClientThemeSettings.getSetting().backgroundGradientPresetId; if (E.default.useSystemTheme === O.SystemThemeState.ON && null != e && (0, _.setUseSystemTheme)(O.SystemThemeState.OFF), null == e) { null != i && (i = void 0); return } let t = p.BACKGROUND_GRADIENT_PRESETS_MAP[e], n = (null == i ? void 0 : i.id) === (null == t ? void 0 : t.id); null != t && !n && (i = t) }; class U extends(s = a.default.PersistedStore) { initialize(e) { null != e && (i = (null == e ? void 0 : e.gradientPresetId) != null ? p.BACKGROUND_GRADIENT_PRESETS_MAP[e.gradientPresetId] : void 0), this.waitFor(h.default, c.default, S.default, d.default, T.default), this.syncWith([h.default], M), this.syncWith([d.default], y), this.syncWith([T.default], P) } getState() { return g ? {} : { gradientPresetId: null == i ? void 0 : i.id } } get gradientPreset() { return i } getLinearGradient() { return null == this.gradientPreset ? null : (0, N.getLinearGradientForBackgroundGradient)(this.gradientPreset) } get isEditorOpen() { return R } get isPreview() { return g } get isCoachmark() { return L } get mobilePendingThemeIndex() { return r } constructor(...e) { super(...e), C(this, "migrations", [e => { var t; return { gradientPresetId: null == e ? void 0 : null === (t = e.gradientPreset) || void 0 === t ? void 0 : t.id } }]) } } C(U, "displayName", "ClientThemesBackgroundStore"), C(U, "persistKey", "ClientThemesBackgroundStore"), t.default = new U(l.default, { UPDATE_BACKGROUND_GRADIENT_PRESET: e => { let { presetId: t } = e; if (null == t) { i = void 0; return } i = p.BACKGROUND_GRADIENT_PRESETS_MAP[t] }, UPDATE_MOBILE_PENDING_THEME_INDEX: e => { let { mobileThemesIndex: t } = e; if (null == t) { r = void 0; return } r = t }, CLIENT_THEMES_EDITOR_OPEN: e => { (function() { R = !0 })() }, CLIENT_THEMES_EDITOR_CLOSE: e => { D() }, RESET_PREVIEW_CLIENT_THEME: e => { i = void 0 }, CHANNEL_SELECT: e => { let { channelId: t, guildId: n } = e, i = h.default.getCurrentUser(); if (null == t || null == n || (0, u.isDismissibleContentDismissed)(o.DismissibleContent.CLIENT_THEMES_COACHMARK) || !(0, m.ageEligibleForPremiumUpsell)(i)) return; let r = S.default.getChannel(t); null != r && (0, f.isGuildTextChannelType)(r.type) && (L = !0, function() { R = !0 }()) }, LOGOUT: e => { D() } }) }, 469115: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BACKGROUND_GRADIENT_PRESETS: function() { return c }, BACKGROUND_GRADIENT_PRESETS_MAP: function() { return E }, CLIENT_THEME_DC_MAP: function() { return I } }), n("47120"); var i, r, s = n("392711"), a = n("524437"), o = n("231338"), l = n("689938"); let u = [{ id: a.BackgroundGradientPresetId.MINT_APPLE, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_MINT_APPLE_1, stop: 6.15 }, { token: o.Color.BG_GRADIENT_MINT_APPLE_2, stop: 48.7 }, { token: o.Color.BG_GRADIENT_MINT_APPLE_3, stop: 93.07 }], angle: 180, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_MINT_APPLE, midpointPercentage: 27 }, { id: a.BackgroundGradientPresetId.CITRUS_SHERBERT, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_CITRUS_SHERBERT_1, stop: 31.1 }, { token: o.Color.BG_GRADIENT_CITRUS_SHERBERT_2, stop: 67.09 }], angle: 180, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_CITRUS_SHERBERT, midpointPercentage: 27 }, { id: a.BackgroundGradientPresetId.RETRO_RAINCLOUD, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_RETRO_RAINCLOUD_1, stop: 5.64 }, { token: o.Color.BG_GRADIENT_RETRO_RAINCLOUD_2, stop: 26.38 }, { token: o.Color.BG_GRADIENT_RETRO_RAINCLOUD_2, stop: 49.92 }, { token: o.Color.BG_GRADIENT_RETRO_RAINCLOUD_1, stop: 73.12 }], angle: 148.71, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_RETRO_RAINCLOUD, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.HANAMI, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_HANAMI_1, stop: 3.56 }, { token: o.Color.BG_GRADIENT_HANAMI_2, stop: 35.49 }, { token: o.Color.BG_GRADIENT_HANAMI_3, stop: 68.78 }], angle: 38.08, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_HANAMI, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.SUNRISE, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_SUNRISE_1, stop: 8.62 }, { token: o.Color.BG_GRADIENT_SUNRISE_2, stop: 48.07 }, { token: o.Color.BG_GRADIENT_SUNRISE_3, stop: 76.04 }], angle: 154.19, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_SUNRISE, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.COTTON_CANDY, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_COTTON_CANDY_1, stop: 8.5 }, { token: o.Color.BG_GRADIENT_COTTON_CANDY_2, stop: 94.28 }], angle: 180.14, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_COTTON_CANDY, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.LOFI_VIBES, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_LOFI_VIBES_1, stop: 7.08 }, { token: o.Color.BG_GRADIENT_LOFI_VIBES_2, stop: 34.94 }, { token: o.Color.BG_GRADIENT_LOFI_VIBES_3, stop: 65.12 }, { token: o.Color.BG_GRADIENT_LOFI_VIBES_4, stop: 96.23 }], angle: 179.52, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_LOFI_VIBES, midpointPercentage: 27 }, { id: a.BackgroundGradientPresetId.DESERT_KHAKI, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_DESERT_KHAKI_1, stop: 12.92 }, { token: o.Color.BG_GRADIENT_DESERT_KHAKI_2, stop: 32.92 }, { token: o.Color.BG_GRADIENT_DESERT_KHAKI_3, stop: 52.11 }], angle: 38.99, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_DESERT_KHAKI, midpointPercentage: 50 }], d = [{ id: a.BackgroundGradientPresetId.SUNSET, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_SUNSET_1, stop: 27.57 }, { token: o.Color.BG_GRADIENT_SUNSET_2, stop: 71.25 }], angle: 141.68, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_SUNSET, midpointPercentage: 35 }, { id: a.BackgroundGradientPresetId.CHROMA_GLOW, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_CHROMA_GLOW_1, stop: 3.94 }, { token: o.Color.BG_GRADIENT_CHROMA_GLOW_2, stop: 26.1 }, { token: o.Color.BG_GRADIENT_CHROMA_GLOW_3, stop: 39.82 }, { token: o.Color.BG_GRADIENT_CHROMA_GLOW_4, stop: 56.89 }, { token: o.Color.BG_GRADIENT_CHROMA_GLOW_5, stop: 76.45 }], angle: 128.92, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_CHROMA_GLOW, midpointPercentage: 15 }, { id: a.BackgroundGradientPresetId.FOREST, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_FOREST_1, stop: 11.2 }, { token: o.Color.BG_GRADIENT_FOREST_2, stop: 29.93 }, { token: o.Color.BG_GRADIENT_FOREST_3, stop: 48.64 }, { token: o.Color.BG_GRADIENT_FOREST_4, stop: 67.85 }, { token: o.Color.BG_GRADIENT_FOREST_5, stop: 83.54 }], angle: 162.27, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_FOREST, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.CRIMSON_MOON, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_CRIMSON_MOON_1, stop: 16.17 }, { token: o.Color.BG_GRADIENT_CRIMSON_MOON_2, stop: 72 }], angle: 64.92, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_CRIMSON_MOON, midpointPercentage: 30 }, { id: a.BackgroundGradientPresetId.MIDNIGHT_BLURPLE, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_MIDNIGHT_BLURPLE_1, stop: 11.21 }, { token: o.Color.BG_GRADIENT_MIDNIGHT_BLURPLE_2, stop: 61.92 }], angle: 48.17, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_MIDNIGHT_BLURPLE, midpointPercentage: 24 }, { id: a.BackgroundGradientPresetId.MARS, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_MARS_1, stop: 14.61 }, { token: o.Color.BG_GRADIENT_MARS_2, stop: 74.62 }], angle: 170.82, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_MARS, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.DUSK, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_DUSK_1, stop: 12.84 }, { token: o.Color.BG_GRADIENT_DUSK_2, stop: 85.99 }], angle: 180, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_DUSK, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.UNDER_THE_SEA, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_UNDER_THE_SEA_1, stop: 1.91 }, { token: o.Color.BG_GRADIENT_UNDER_THE_SEA_2, stop: 48.99 }, { token: o.Color.BG_GRADIENT_UNDER_THE_SEA_3, stop: 96.35 }], angle: 179.14, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_UNDER_THE_SEA, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.RETRO_STORM, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_RETRO_STORM_1, stop: 5.64 }, { token: o.Color.BG_GRADIENT_RETRO_STORM_2, stop: 26.38 }, { token: o.Color.BG_GRADIENT_RETRO_STORM_2, stop: 49.92 }, { token: o.Color.BG_GRADIENT_RETRO_STORM_1, stop: 73.12 }], angle: 148.71, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_RETRO_STORM, midpointPercentage: 61 }, { id: a.BackgroundGradientPresetId.NEON_NIGHTS, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_NEON_NIGHTS_1, stop: 0 }, { token: o.Color.BG_GRADIENT_NEON_NIGHTS_2, stop: 50 }, { token: o.Color.BG_GRADIENT_NEON_NIGHTS_3, stop: 100 }], angle: 180, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_NEON_NIGHTS, midpointPercentage: 50 }, { id: a.BackgroundGradientPresetId.STRAWBERRY_LEMONADE, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_STRAWBERRY_LEMONADE_1, stop: 18.79 }, { token: o.Color.BG_GRADIENT_STRAWBERRY_LEMONADE_2, stop: 49.76 }, { token: o.Color.BG_GRADIENT_STRAWBERRY_LEMONADE_3, stop: 80.72 }], angle: 161.03, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_STRAWBERRY_LEMONADE, midpointPercentage: 32 }, { id: a.BackgroundGradientPresetId.AURORA, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_AURORA_1, stop: 10.39 }, { token: o.Color.BG_GRADIENT_AURORA_2, stop: 26.87 }, { token: o.Color.BG_GRADIENT_AURORA_3, stop: 48.31 }, { token: o.Color.BG_GRADIENT_AURORA_4, stop: 64.98 }, { token: o.Color.BG_GRADIENT_AURORA_5, stop: 92.5 }], angle: 239.16, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_AURORA, midpointPercentage: 34 }, { id: a.BackgroundGradientPresetId.SEPIA, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_SEPIA_1, stop: 14.14 }, { token: o.Color.BG_GRADIENT_SEPIA_2, stop: 60.35 }], angle: 69.98, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_SEPIA, midpointPercentage: 50 }], _ = { id: a.BackgroundGradientPresetId.BLURPLE_TWILIGHT, theme: o.ThemeTypes.DARK, colors: [{ token: o.Color.BG_GRADIENT_BLURPLE_TWILIGHT_1, stop: 11.18 }, { token: o.Color.BG_GRADIENT_BLURPLE_TWILIGHT_2, stop: 64.54 }], angle: 47.61, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_BLURPLE_TWILIGHT, midpointPercentage: 50 }, c = [...u, ...d, _, { id: a.BackgroundGradientPresetId.EASTER_EGG, theme: o.ThemeTypes.LIGHT, colors: [{ token: o.Color.BG_GRADIENT_EASTER_EGG_1, stop: 4 }, { token: o.Color.BG_GRADIENT_EASTER_EGG_2, stop: 96 }], angle: 180, getName: () => l.default.Messages.CLIENT_THEMES_GRADIENT_EASTER_EGG, midpointPercentage: 50 }]; [...d, ...u], (r = i || (i = {}))[r.DARK = 0] = "DARK", r[r.LIGHT = 1] = "LIGHT", r[r.SYSTEM = 2] = "SYSTEM", o.ThemeTypes.DARK, o.ThemeTypes.LIGHT, o.ThemeTypes.DARKER, o.ThemeTypes.LIGHT, o.ThemeTypes.MIDNIGHT, () => l.default.Messages.THEME_MIDNIGHT; let E = (0, s.keyBy)(c, "id"), I = new Map([ [a.BackgroundGradientPresetId.BLURPLE_TWILIGHT, a.DismissibleContent.BRAND_REFRESH_CLIENT_THEME_BADGE] ]) }, 47760: function(e, t, n) { "use strict"; n.r(t), n.d(t, { areThemesEqualForGradientThemes: function() { return a }, getLinearGradientForBackgroundGradient: function() { return s } }), n("47120"), n("524437"); var i = n("44315"); n("469115"); var r = n("231338"); function s(e) { let { angle: t, colors: n } = e; return "linear-gradient(".concat(t, "deg, ").concat(n.map(e => { let { token: t, stop: n } = e; return "".concat((0, i.getColor)(t), " ").concat(n, "%") }).join(", "), ")") } function a(e, t) { return e === t || e === r.ThemeTypes.DARK && t === r.ThemeTypes.DARKER || e === r.ThemeTypes.DARKER && t === r.ThemeTypes.DARK || !1 } }, 629935: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getThemeColorMixValues: function() { return s } }), n("47120"); var i = n("688619"), r = n.n(i); function s(e) { let { enabled: t, primaryColor: n, secondaryColor: i, isDarkTheme: s, baseMixAmount: a = 30, textMixAmount: o = 40 } = e, l = r()(n), u = r()(i), [d, _] = l.luminance() > u.luminance() ? [l, u] : [u, l], c = s ? d.set("lch.l", 98).set("lch.c", 15) : _.set("lch.l", 10), E = s ? _.set("hsl.s", 1).set("hsl.l", .05) : d.set("hsl.s", 1).set("hsl.l", .94), [I, T, f] = E.hsl(); return { "--custom-theme-mix-base-hsl": "".concat(Number.isNaN(I) ? 0 : I, " ").concat(100 * T, "% ").concat(100 * f, "%"), "--custom-theme-mix-base": E.css(), "--custom-theme-mix-text": c.css(), "--custom-theme-mix-amount-base": "".concat(t ? a : 0, "%"), "--custom-theme-mix-amount-text": "".concat(t ? o : 0, "%") } } }, 798728: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); t.default = e => { let { fill: t, className: n } = e; return (0, i.jsxs)("svg", { className: n, version: "1.1", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", x: "0px", y: "0px", width: "24", height: "24", viewBox: "0 0 24 24", fill: t, children: [(0, i.jsx)("g", { id: "Frame_-_24px", children: (0, i.jsx)("rect", { y: "0", fill: "none", width: "24", height: "24" }) }), (0, i.jsx)("g", { id: "Filled_Icons", children: (0, i.jsxs)("g", { children: [(0, i.jsx)("path", { fill: t, d: "M6.351,6.351C7.824,4.871,9.828,4,12,4c4.411,0,8,3.589,8,8h2c0-5.515-4.486-10-10-10 C9.285,2,6.779,3.089,4.938,4.938L3,3v6h6L6.351,6.351z" }), (0, i.jsx)("path", { fill: t, d: "M17.649,17.649C16.176,19.129,14.173,20,12,20c-4.411,0-8-3.589-8-8H2c0,5.515,4.486,10,10,10 c2.716,0,5.221-1.089,7.062-2.938L21,21v-6h-6L17.649,17.649z" })] }) })] }) } }, 168551: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CLIENT_THEMES_DATA_ATTRIBUTE: function() { return d }, CUSTOM_THEME_BACKGROUND_CLASS_NAME: function() { return _ } }), n("47120"); var i = n("470079"), r = n("691324"), s = n("442837"), a = n("780384"), o = n("813852"), l = n("514361"), u = n("629935"); let d = "data-client-themes", _ = "custom-theme-background", c = () => { let e = (0, s.useStateFromStores)([l.default], () => l.default.gradientPreset), { enabled: t } = o.ColorMixDesktopClientThemesExperiment.useExperiment({ location: "useBackgroundGradientCSS" }); return (0, i.useMemo)(() => { if (null == e) return null; let n = l.default.getLinearGradient(); if (null == n) return null; let [i, s] = [...e.colors].sort((e, t) => t.stop - e.stop).slice(0, 2).map(e => r.ColorDetails[e.token].hex), o = (0, u.getThemeColorMixValues)({ enabled: t, primaryColor: i, secondaryColor: s, isDarkTheme: (0, a.isThemeDark)(e.theme) }), d = t ? "\n ".concat(Object.entries(o).map(e => { let [t, n] = e; return "".concat(t, ": ").concat(n, ";") }).join("\n"), "\n ") : ""; return ".".concat(_, " {\n --custom-theme-background: ").concat(n, ";\n ").concat(d, "\n }") }, [t, e]) }; t.default = () => { let e = c(); return null === e ? { clientThemesCSS: "", clientThemesClassName: "" } : { clientThemesCSS: e, clientThemesClassName: _ } } }, 724145: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return k } }), n("47120"), n("627341"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("278074"), l = n("442837"), u = n("524437"), d = n("481060"), _ = n("153867"), c = n("230711"), E = n("351773"), I = n("607070"), T = n("100527"), f = n("906732"), S = n("639119"), h = n("197115"), A = n("587446"), m = n("594174"), N = n("696202"), p = n("626135"), O = n("74538"), C = n("238302"), R = n("514361"), g = n("572397"), L = n("705262"), v = n("981631"), D = n("921944"), M = n("474936"), y = n("689938"), P = n("43114"); let U = () => (0, i.jsx)("div", { className: P.editorHeader, children: (0, i.jsxs)("div", { className: P.bannerUpsell, children: [(0, i.jsx)(A.default, { className: P.premiumIcon }), (0, i.jsx)(d.Heading, { variant: "heading-md/bold", color: "always-white", children: y.default.Messages.CLIENT_THEMES_EDITOR_UPSELL_HEADER })] }) }), b = e => { let { markAsDismissed: t } = e, n = (0, g.useTrackClientThemePreviewEvent)(); return (0, i.jsxs)("div", { className: P.editorHeader, children: [(0, i.jsx)(d.Clickable, { className: P.closeCircleButton, onClick: () => { null != t && t(D.ContentDismissActionType.DISMISS), n(v.AnalyticEvents.CLIENT_THEME_PREVIEW_CLOSED), (0, C.closeEditor)() }, children: (0, i.jsx)(N.default, { className: P.closeCircle }) }), (0, i.jsx)(d.Heading, { variant: "heading-lg/extrabold", children: y.default.Messages.CLIENT_THEMES_EDITOR_HEADER })] }) }, G = e => { var t, n, r; let { onSubscribeSuccess: s, markAsDismissed: a } = e, { analyticsLocations: o } = (0, f.default)(T.default.CLIENT_THEMES_EDITOR), [c, E] = (0, l.useStateFromStoresArray)([m.default, R.default], () => [R.default.gradientPreset, O.default.isPremium(m.default.getCurrentUser())]), I = (0, S.usePremiumTrialOffer)(), A = (0, O.formatTrialCtaIntervalDuration)({ intervalType: null == I ? void 0 : null === (t = I.subscription_trial) || void 0 === t ? void 0 : t.interval, intervalCount: null == I ? void 0 : null === (n = I.subscription_trial) || void 0 === n ? void 0 : n.interval_count }); return (0, i.jsx)(h.default, { size: d.Button.Sizes.MEDIUM, buttonText: E ? y.default.Messages.BILLING_SWITCH_PLAN_UPGRADE : (null == I ? void 0 : null === (r = I.subscription_trial) || void 0 === r ? void 0 : r.sku_id) === M.PremiumSubscriptionSKUs.TIER_2 ? A : y.default.Messages.USER_SETTINGS_CUSTOMIZATION_UPSELL, subscriptionTier: M.PremiumSubscriptionSKUs.TIER_2, onSubscribeModalClose: e => { if (!!e) null == s || s(), null != a && a(D.ContentDismissActionType.PRIMARY), null != c && ((0, L.trackClientThemeUpdated)({ isPersisted: !0, themeName: u.BackgroundGradientPresetId[c.id], analyticsLocations: o }), (0, _.saveClientTheme)({ backgroundGradientPresetId: c.id, theme: c.theme })) } }) }, w = e => { let { markAsDismissed: t } = e, { isPreview: n, isCoachmark: s } = (0, l.useStateFromStoresObject)([R.default], () => ({ isPreview: R.default.isPreview, isCoachmark: R.default.isCoachmark })), [a, u] = r.useState(!1), _ = (0, g.useTrackClientThemePreviewEvent)(), E = (0, o.match)({ isPreview: n, isCoachmark: s, forceShowCloseButton: a }).with({ isCoachmark: !0 }, { forceShowCloseButton: !0 }, () => y.default.Messages.CLOSE).with({ isPreview: !0 }, () => y.default.Messages.CLIENT_THEMES_EDITOR_EXIT_PREVIEW).otherwise(() => y.default.Messages.CLIENT_THEMES_EDITOR_RETURN_TO_SETTINGS); return (0, i.jsxs)("div", { className: P.editorFooter, children: [n && (0, i.jsx)(G, { onSubscribeSuccess: () => { u(!0) }, markAsDismissed: t }), (0, i.jsx)(d.Button, { className: P.footerButton, onClick: () => { null != t && t(D.ContentDismissActionType.DISMISS), _(v.AnalyticEvents.CLIENT_THEME_PREVIEW_CLOSED), (0, C.closeEditor)(), !s && c.default.open() }, color: d.Button.Colors.PRIMARY, size: d.Button.Sizes.MEDIUM, children: E })] }) }; function k(e) { let { markAsDismissed: t } = e, { analyticsLocations: n } = (0, f.default)(T.default.CLIENT_THEMES_EDITOR), { isPreview: s, isCoachmark: o, isEditorOpen: u, shouldEditorAnimate: _ } = (0, l.useStateFromStoresObject)([R.default, I.default], () => ({ isPreview: R.default.isPreview, isCoachmark: R.default.isCoachmark, isEditorOpen: R.default.isEditorOpen, shouldEditorAnimate: R.default.isCoachmark && !I.default.useReducedMotion })), c = (0, g.useTrackClientThemePreviewEvent)(); r.useEffect(() => c(v.AnalyticEvents.CLIENT_THEME_PREVIEW_VIEWED), [c]), r.useEffect(() => { s && p.default.track(v.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: M.PremiumUpsellTypes.PREMIUM_CLIENT_THEME_TRY_IT_OUT, location_stack: n }) }, [s, n]); let S = (0, g.useResetClientThemePreview)(), h = (0, E.default)(null, s ? S : v.NOOP); return r.useEffect(() => { if (s && !u) return S }, [s, u, S]), (0, i.jsx)(f.AnalyticsLocationProvider, { value: n, children: (0, i.jsx)("div", { ref: h, className: a()(P.themeEditor, _ ? P.editorAnimate : null), children: (0, i.jsxs)(d.HeadingLevel, { children: [o ? (0, i.jsx)(U, {}) : (0, i.jsx)(b, { markAsDismissed: t }), (0, i.jsx)(d.Scroller, { className: P.editorBody, children: (0, i.jsxs)(L.default, { type: L.ThemeSelectionGroupType.EDITOR, children: [!s && (0, i.jsx)(L.default.Basic, { className: P.selectionGroup }), (0, i.jsx)(L.default.Gradient, { className: P.selectionGroup })] }) }), (0, i.jsx)(w, { markAsDismissed: t })] }) }) }) } }, 572397: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useResetClientThemePreview: function() { return T }, useTrackClientThemePreviewEvent: function() { return f } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("524437"), a = n("781391"), o = n("740492"), l = n("581883"), u = n("626135"), d = n("238302"), _ = n("514361"), c = n("981631"), E = n("474936"), I = n("874893"); let T = () => { let e = (0, r.useStateFromStores)([_.default], () => _.default.gradientPreset), t = (0, r.useStateFromStores)([o.default], () => o.default.useSystemTheme === I.SystemThemeState.ON), [n, s] = (0, i.useState)(t); return (0, i.useEffect)(() => { null == e && s(t) }, [e, t]), (0, i.useCallback)(() => { if (null != e)(0, d.resetPreviewClientTheme)(), n && (0, a.setUseSystemTheme)(I.SystemThemeState.ON) }, [e, n]) }, f = () => { let { previewPaneVariant: e } = (0, r.useStateFromStoresObject)([_.default], () => ({ previewPaneVariant: _.default.isPreview ? E.AnalyticsPremiumFeatureTiers.FREE : E.AnalyticsPremiumFeatureTiers.PREMIUM_STANDARD })), t = (0, r.useStateFromStores)([l.default], () => { var e; let t = null === (e = l.default.settings.appearance) || void 0 === e ? void 0 : e.theme; return "default ".concat(t === s.Theme.LIGHT ? c.ThemeTypes.LIGHT : c.ThemeTypes.DARK) }); return (0, i.useCallback)(n => { u.default.track(n, { preview_pane_variant: e, original_theme: t }) }, [e, t]) } }, 110577: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DefaultThemeSelection: function() { return N }, GradientThemeSelection: function() { return p }, SelectionCircle: function() { return A } }), n("627341"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("278074"), o = n("442837"), l = n("692547"), u = n("76162"), d = n("780384"), _ = n("481060"), c = n("210887"), E = n("441674"), I = n("47760"), T = n("798728"), f = n("981631"), S = n("689938"), h = n("973844"); function A() { return (0, i.jsx)("div", { className: h.selectionCircle, children: (0, i.jsx)(E.default, { className: h.checkmarkCircle, foreground: h.checkmark, backgroundColor: l.default.unsafe_rawColors.WHITE_500.css }) }) } function m(e) { let { name: t, className: n, style: r, onSelect: a, isSelected: o = !1, tabIndex: l, children: u, showBadge: d } = e, c = (0, _.useRadioItem)({ label: t, isSelected: o }); return (0, i.jsx)(_.Tooltip, { text: t, children: e => (0, i.jsxs)("div", { className: h.themeSelectionContainer, children: [(0, i.jsx)(_.Clickable, { ...e, ...c, tabIndex: null != l ? l : c.tabIndex, className: s()(h.themeSelection, { [h.selected]: o }, n), style: r, onClick: o ? f.NOOP : a, children: u }), o && (0, i.jsx)(A, {}), !o && d && (0, i.jsx)("div", { className: h.redCircle })] }) }) } function N(e) { let { theme: t, isSelected: n, onSelect: r } = e, E = (0, o.useStateFromStores)([c.default], () => c.default.systemPrefersColorScheme), I = e => (0, d.isThemeLight)(e) ? l.default.unsafe_rawColors.PRIMARY_600.css : l.default.unsafe_rawColors.WHITE_500.css, A = (0, a.match)({ theme: t, systemPrefersColorScheme: E }).with({ theme: "system", systemPrefersColorScheme: f.ThemeTypes.LIGHT }, () => h.lightIcon).with({ theme: f.ThemeTypes.LIGHT }, () => h.lightIcon).with({ theme: f.ThemeTypes.DARK }, () => h.darkIcon).with({ theme: f.ThemeTypes.DARKER }, () => h.darkerIcon).with({ theme: f.ThemeTypes.MIDNIGHT }, () => h.midnightIcon).otherwise(() => h.darkIcon), N = (0, a.match)(t).with(f.ThemeTypes.LIGHT, () => S.default.Messages.THEME_LIGHT).with(f.ThemeTypes.DARK, () => S.default.Messages.THEME_DARK).with(f.ThemeTypes.DARKER, () => "Darker").with(f.ThemeTypes.MIDNIGHT, () => S.default.Messages.THEME_MIDNIGHT).with("system", () => S.default.Messages.THEME_SYSTEM).exhaustive(), p = (0, _.useRedesignIconContext)().enabled; return (0, i.jsx)(m, { onSelect: r, isSelected: n, name: N, className: s()(h.defaultThemeSelection, A), children: "system" === t && (0, i.jsx)("div", { className: h.iconWrapper, children: p ? (0, i.jsx)(u.RefreshIcon, { color: I(E) }) : (0, i.jsx)(T.default, { fill: I(E) }) }) }) } function p(e) { let { preset: t, isSelected: n, disabled: r, tabIndex: a, onSelect: o, showBadge: l } = e, { colors: u, angle: _, theme: c } = t, E = (0, I.getLinearGradientForBackgroundGradient)({ colors: u, angle: _ }); return (0, i.jsx)(m, { onSelect: r ? void 0 : o, isSelected: n, name: t.getName(), className: s()([r ? h.disabled : null, (0, d.isThemeDark)(c) ? h.darkOverlay : h.lightOverlay]), style: { background: "var(--bg-overlay), ".concat(E) }, tabIndex: a, showBadge: l }) } }, 705262: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ThemeSelectionGroupType: function() { return i }, trackClientThemeUpdated: function() { return j } }), n("627341"), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("278074"), d = n("442837"), _ = n("524437"), c = n("481060"), E = n("153867"), I = n("607070"), T = n("100527"), f = n("906732"), S = n("540059"), h = n("605236"), A = n("837741"), m = n("98278"), N = n("639119"), p = n("165583"), O = n("587446"), C = n("781391"), R = n("210887"), g = n("740492"), L = n("301822"), v = n("153124"), D = n("626135"), M = n("238302"), y = n("514361"), P = n("110577"), U = n("469115"), b = n("981631"), G = n("921944"), w = n("474936"), k = n("874893"), B = n("526761"), V = n("231338"), x = n("689938"), F = n("737679"); (r = i || (i = {})).EDITOR = "EDITOR", r.SETTINGS = "SETTINGS"; let H = Object.freeze({ EDITOR: B.UserSettingsDelay.SLOW_USER_ACTION, SETTINGS: B.UserSettingsDelay.INFREQUENT_USER_ACTION }), Y = a.createContext({}), j = e => { let { isPersisted: t, themeName: n, analyticsLocations: i } = e; D.default.track(b.AnalyticEvents.CLIENT_THEME_UPDATED, { feature_name: w.AnalyticsPremiumFeatureNames.CLIENT_THEME, theme_name: n, is_persisted: t, location_stack: i }) }, W = e => { let { type: t, isPreview: n, isCoachmark: i } = e, r = (0, u.match)({ type: t, isPreview: n, isCoachmark: i }).with({ type: "EDITOR", isCoachmark: !0, isPreview: !0 }, () => x.default.Messages.CLIENT_THEMES_EDITOR_PREVIEW_A_THEME_HEADER).with({ type: "EDITOR", isCoachmark: !0 }, () => x.default.Messages.CLIENT_THEMES_EDITOR_PICK_A_THEME_HEADER).otherwise(() => x.default.Messages.USER_SETTINGS_APPEARANCE_GRADIENT_THEME_TITLE); return (0, s.jsxs)("div", { className: F.title, children: [(0, s.jsx)(c.Heading, { "aria-label": r, variant: "text-md/medium", children: r }), (0, s.jsx)(O.default, { className: F.premiumIcon })] }) }, K = e => { var t, n; let { type: i, isPreview: r, isCoachmark: a } = e; if ((null === (n = (0, N.usePremiumTrialOffer)()) || void 0 === n ? void 0 : null === (t = n.subscription_trial) || void 0 === t ? void 0 : t.sku_id) === w.PremiumSubscriptionSKUs.TIER_2 && r) return null; let o = (0, u.match)({ type: i, isPreview: r, isCoachmark: a }).with({ type: "EDITOR", isPreview: !0 }, () => x.default.Messages.CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_PREVIEW_WITH_LINK.format({ onPremiumClick: m.navigateToPremiumMarketingPage })).with({ type: "EDITOR", isCoachmark: !0 }, () => x.default.Messages.CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_COACHMARK).with({ type: "EDITOR", isPreview: !1 }, () => x.default.Messages.CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION).with({ isPreview: !0 }, () => x.default.Messages.CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_WITH_LINK.format({ onPremiumClick: m.navigateToPremiumMarketingPage })).otherwise(() => x.default.Messages.CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_SETTINGS); return (0, s.jsx)(c.Heading, { variant: "text-sm/normal", children: o }) }, z = e => { let { type: t, children: n } = e, i = (0, v.useUID)(), r = (0, c.useRadioGroup)({ orientation: "horizontal", labelledBy: i }), o = a.useMemo(() => ({ type: t, delay: H[t] }), [t]); return (0, s.jsx)(Y.Provider, { value: o, children: (0, s.jsx)("div", { ...r, className: F.__invalid_container, children: n }) }) }; z.Basic = e => { let { className: t } = e, { delay: n } = a.useContext(Y), { analyticsLocations: i } = (0, f.default)(T.default.CLIENT_THEMES_THEME_SELECTOR), [r, o, u] = (0, d.useStateFromStoresArray)([R.default, g.default, y.default], () => [R.default.theme, null == y.default.gradientPreset, g.default.useSystemTheme === k.SystemThemeState.ON]), _ = e => { (0, M.resetBackgroundGradientPreset)(), j({ isPersisted: !0, analyticsLocations: i, themeName: "default ".concat(e) }), (0, E.saveClientTheme)({ theme: e }, n) }, c = (0, S.useIsDesktopVisualRefreshEnabled)("appearance_settings"); return (0, s.jsxs)("section", { className: l()(F.presets, t), children: [(0, s.jsx)(P.DefaultThemeSelection, { theme: V.ThemeTypes.LIGHT, isSelected: o && !u && r === V.ThemeTypes.LIGHT, onSelect: () => _(V.ThemeTypes.LIGHT) }), (0, s.jsx)(P.DefaultThemeSelection, { theme: V.ThemeTypes.DARK, isSelected: o && !u && r === V.ThemeTypes.DARK, onSelect: () => _(V.ThemeTypes.DARK) }), c && (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)(P.DefaultThemeSelection, { theme: V.ThemeTypes.DARKER, isSelected: o && !u && r === V.ThemeTypes.DARKER, onSelect: () => _(V.ThemeTypes.DARKER) }), (0, s.jsx)(P.DefaultThemeSelection, { theme: V.ThemeTypes.MIDNIGHT, isSelected: o && !u && r === V.ThemeTypes.MIDNIGHT, onSelect: () => _(V.ThemeTypes.MIDNIGHT) })] }), (0, s.jsx)(P.DefaultThemeSelection, { theme: "system", isSelected: o && u, onSelect: () => _("system") })] }) }, z.Gradient = e => { var t, i; let { className: r, renderCTAButtons: o, disabled: l = !1 } = e, { type: u, delay: c } = a.useContext(Y), { analyticsLocations: S } = (0, f.default)(T.default.CLIENT_THEMES_THEME_SELECTOR), [O, R, g] = (0, d.useStateFromStoresArray)([y.default], () => { var e; return [y.default.isPreview, y.default.isCoachmark, null === (e = y.default.gradientPreset) || void 0 === e ? void 0 : e.id] }), [v, D] = a.useState(!1), [b, B] = a.useState(-1), V = (0, d.useStateFromStores)([I.default], () => I.default.useReducedMotion), { enabled: H } = (0, A.useBrandRefreshPerksExperiment)({ location: "GradientSelectors" }), z = (null === (i = (0, N.usePremiumTrialOffer)()) || void 0 === i ? void 0 : null === (t = i.subscription_trial) || void 0 === t ? void 0 : t.sku_id) === w.PremiumSubscriptionSKUs.TIER_2, Z = a.useMemo(() => e => { let t = U.CLIENT_THEME_DC_MAP.get(e.id), n = null != t && !(0, h.isDismissibleContentDismissed)(t); return l && n && setTimeout(() => (0, h.markDismissibleContentAsDismissed)(t, { dismissAction: G.ContentDismissActionType.AUTO_DISMISS }), 5e3), n }, [l]); a.useEffect(() => { (b === U.BACKGROUND_GRADIENT_PRESETS.length - (H ? 2 : 3) && "EDITOR" === u || g === _.BackgroundGradientPresetId.EASTER_EGG) && D(!0) }, [b, u, g, H]); let X = (e, t) => { (0, M.updateBackgroundGradientPreset)(e.id), j({ isPersisted: !O, analyticsLocations: S, themeName: _.BackgroundGradientPresetId[e.id] }); let n = U.CLIENT_THEME_DC_MAP.get(e.id); if (null != n && !(0, h.isDismissibleContentDismissed)(n) && (0, h.markDismissibleContentAsDismissed)(n, { dismissAction: G.ContentDismissActionType.TAKE_ACTION }), O) { (0, C.setUseSystemTheme)(k.SystemThemeState.OFF); return } if ((0, E.saveClientTheme)({ backgroundGradientPresetId: e.id, theme: e.theme }, c), null != t) { if (v && D(!1), t <= b || 0 === t) { B(0); return } B(e => e + 1) } }; return (0, s.jsxs)("section", { className: r, children: ["EDITOR" === u && O && z ? (0, s.jsx)(p.default, { type: w.PremiumUpsellTypes.PREMIUM_CLIENT_THEME_TRY_IT_OUT, subscriptionTier: w.PremiumSubscriptionSKUs.TIER_2, children: x.default.Messages.CLIENT_THEMES_EDITOR_GRADIENT_DESCRIPTION_PREVIEW_WITH_LINK.format({ onPremiumClick: m.navigateToPremiumMarketingPage }) }) : (0, s.jsxs)("div", { className: F.header, children: [(0, s.jsxs)("div", { className: F.headings, children: [(0, s.jsx)(W, { type: u, isPreview: O, isCoachmark: R }), (0, s.jsx)(K, { type: u, isPreview: O, isCoachmark: R })] }), null == o ? void 0 : o()] }), (0, s.jsxs)("div", { className: F.presets, children: [U.BACKGROUND_GRADIENT_PRESETS.filter(e => { let { id: t } = e; return t !== _.BackgroundGradientPresetId.EASTER_EGG && (t !== _.BackgroundGradientPresetId.BLURPLE_TWILIGHT || H) }).map((e, t) => (0, s.jsx)(P.GradientThemeSelection, { preset: e, isSelected: g === e.id, onSelect: () => X(e, t), disabled: l, tabIndex: 0 !== t || l ? void 0 : 0, showBadge: Z(e) }, e.id)), (() => { if (!v) return null; let e = U.BACKGROUND_GRADIENT_PRESETS_MAP[_.BackgroundGradientPresetId.EASTER_EGG]; if (null == e) return null; async function t() { let { default: e } = await n.e("5217").then(n.t.bind(n, "801048", 19)); return e } return (0, s.jsxs)("div", { className: F.easterEggSelection, children: [(0, s.jsx)(P.GradientThemeSelection, { preset: e, isSelected: g === _.BackgroundGradientPresetId.EASTER_EGG, onSelect: () => X(e) }), (0, s.jsx)(L.default, { importData: t, shouldAnimate: !V, className: F.sparkles })] }) })()] })] }) }, t.default = z }, 356659: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CLIPS_EDIT_MODAL_KEY: function() { return g }, CLIPS_EDUCATION_COOLDOWN: function() { return w }, CLIPS_EDUCATION_GAME_LAUNCH_THRESHOLD: function() { return k }, CLIPS_EDUCATION_MAX_DISMISSALS_DISABLED: function() { return V }, CLIPS_EDUCATION_MAX_DISMISSALS_ENABLED: function() { return B }, CLIPS_EXPORT_FILENAME: function() { return f }, CLIPS_GALLERY_MODAL_KEY: function() { return L }, CLIPS_HARDWARE_CLASSIFICATION_VERSION: function() { return h }, CLIPS_MAX_PARTICIPANTS: function() { return M }, CLIPS_RUNNING_GAME_CHANGE_CLIPS_INIT_DELAY: function() { return U }, CLIPS_THUMBNAIL_MAX_HEIGHT: function() { return D }, CLIPS_THUMBNAIL_MAX_WIDTH: function() { return v }, CLIPS_TOAST_DURATION: function() { return I }, CLIP_NAME_MAX_CHAR_LENGTH: function() { return R }, CLIP_NAME_MIN_CHAR_LENGTH: function() { return C }, CLIP_NAME_TEMPLATE: function() { return y }, CLIP_PLAYING_DEBOUNCE_MS: function() { return O }, CURRENT_CLIP_METADATA_VERSION: function() { return S }, ClipSaveTypes: function() { return u }, ClipsLengthSettings: function() { return o }, ClipsLogger: function() { return T }, ClipsUserEducationType: function() { return d }, ClipsViewerConnectivitySettings: function() { return l }, DEFAULT_KEYBIND: function() { return E }, MAX_SIMULTANEOUS_SAVE_CLIP_OPERATIONS: function() { return P }, MIN_CLIP_DURATION_SECONDS: function() { return p }, OSX_HARDWARE_AUTO_ENABLE_GPU_REGEX: function() { return N }, SEEK_DENOMINATOR: function() { return b }, SEEK_SHIFT_MODIFIER: function() { return G }, WINDOWS_HARDWARE_AUTO_ENABLE_GPU_REGEX: function() { return m }, WINDOWS_HARDWARE_MINIMUM_GPU_REGEX: function() { return A } }); var i, r, s, a, o, l, u, d, _ = n("710845"), c = n("70956"); (i = o || (o = {}))[i.SECONDS_30 = 30 * c.default.Millis.SECOND] = "SECONDS_30", i[i.MINUTES_1 = c.default.Millis.MINUTE] = "MINUTES_1", i[i.MINUTES_2 = 2 * c.default.Millis.MINUTE] = "MINUTES_2", (r = l || (l = {}))[r.ALL = 0] = "ALL", r[r.FRIENDS = 1] = "FRIENDS", (s = u || (u = {})).DECOUPLED = "decoupled", s.VIEWER = "viewer", s.STREAMER = "streamer", (a = d || (d = {}))[a.Error = 0] = "Error", a[a.Disabled = 1] = "Disabled", a[a.Enabled = 2] = "Enabled"; let E = "alt+c", I = 6 * c.default.Millis.SECOND, T = new _.default("Clips"), f = e => "Discord_Clip_".concat(e, ".mp4"), S = 3, h = 1, A = /(NVIDIA GeForce GTX (98|10|16).*|Radeon RX 5(500|600|).*|Radeon RX5.*)/, m = /(NVIDIA GeForce (RTX (20|30|40).*))|(.*Radeon RX (57|58|59|6|7).*)/, N = /(Apple M[12].*)/, p = .1, O = 25, C = 0, R = 200, g = "clips-edit", L = "clips-gallery", v = 640, D = 360, M = 100, y = e => "Clip - ".concat(new Date(e).toLocaleString()), P = 15, U = 3e4, b = 30, G = 10, w = 14 * c.default.Millis.DAY, k = 5, B = 5, V = 1 }, 924557: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClipsExperiment: function() { return d }, areClipsEnabled: function() { return c }, isUserPremiumTypeForClipsEarlyAccess: function() { return f }, useEnableClips: function() { return E }, useShouldSeeClipsPremiumEarlyAccessAnnouncementCoachmark: function() { return T }, useShouldSeeClipsPremiumEarlyAccessGoLiveRoadblock: function() { return I } }); var i = n("818083"), r = n("836157"), s = n("441167"), a = n("131951"), o = n("74538"), l = n("779618"), u = n("474936"); let d = (0, i.createExperiment)({ kind: "user", id: "2022-11_clips_experiment", label: "Clips Experiment", defaultConfig: { enableClips: !1, ignorePlatformRestriction: !1, showClipsHeaderEntrypoint: !1 }, treatments: [{ id: 1, label: "Clips without upsells", config: { enableClips: !0, ignorePlatformRestriction: !1, showClipsHeaderEntrypoint: !0 } }, { id: 2, label: "Clips with upsells", config: { enableClips: !0, ignorePlatformRestriction: !1, showClipsHeaderEntrypoint: !0 } }, { id: 99, label: "Clips 4 da Developerz", config: { enableClips: !0, ignorePlatformRestriction: !0, showClipsHeaderEntrypoint: !0 } }] }), _ = (0, i.createExperiment)({ kind: "user", id: "2023-09_clips_nitro_early_access", label: "Clips (Nitro EA)", defaultConfig: { enableClips: !1, enablePremiumEarlyAccessAnnouncementCoachmark: !1, enablePremiumEarlyAccessGoLiveRoadblock: !1 }, treatments: [{ id: 1, label: "Clips Nitro EA Upsells Visible", config: { enableClips: !1, enablePremiumEarlyAccessAnnouncementCoachmark: !0, enablePremiumEarlyAccessGoLiveRoadblock: !0 } }, { id: 2, label: "Clips Enabled (Nitro)", config: { enableClips: !0, enablePremiumEarlyAccessAnnouncementCoachmark: !0, enablePremiumEarlyAccessGoLiveRoadblock: !1 } }] }); function c() { if (!(0, l.default)(a.default)) return !1; let { enableClips: e } = _.getCurrentConfig({ location: "areClipsEnabled" }, { autoTrackExposure: !1 }), { enableClips: t } = d.getCurrentConfig({ location: "areClipsEnabled" }, { autoTrackExposure: !1 }), { enableDecoupledGameClipping: n } = r.default.getCurrentConfig({ location: "areClipsEnabled" }, { autoTrackExposure: !1 }), { enableViewerClipping: i } = s.default.getCurrentConfig({ location: "areClipsEnabled" }, { autoTrackExposure: !1 }); return e || t || n || i } function E() { let e = (0, l.default)(a.default), { enableClips: t } = _.useExperiment({ location: "useEnableClips" }, { autoTrackExposure: !1 }), { enableClips: n } = d.useExperiment({ location: "useEnableClips" }, { autoTrackExposure: !1 }), { enableDecoupledGameClipping: i } = r.default.useExperiment({ location: "useEnableClips" }, { autoTrackExposure: !1 }), { enableViewerClipping: o } = s.default.useExperiment({ location: "useEnableClips" }, { autoTrackExposure: !1 }); return (n || t || i || o) && e } let I = e => { let { autoTrackExposure: t } = e, n = (0, l.default)(a.default), { enablePremiumEarlyAccessGoLiveRoadblock: i } = _.useExperiment({ location: "useShouldSeeClipsPremiumEarlyAccessGoLiveRoadblock" }, { autoTrackExposure: t && n }); return !!n && i }, T = e => { let { autoTrackExposure: t } = e, n = (0, l.default)(a.default), { enablePremiumEarlyAccessAnnouncementCoachmark: i } = _.useExperiment({ location: "useShouldSeeClipsPremiumEarlyAccessGoLiveRoadblock" }, { autoTrackExposure: t && n }); return !!n && i }; function f(e) { return o.default.isPremiumAtLeast(e.premiumType, u.PremiumTypes.TIER_2) } }, 474639: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return p } }), n("47120"); var i = n("46973"), r = n("570140"), s = n("147913"), a = n("579806"), o = n("569545"), l = n("441167"), u = n("314897"), d = n("131951"), _ = n("19780"), c = n("959457"), E = n("626135"), I = n("358085"), T = n("924557"), f = n("435064"), S = n("894694"), h = n("779618"), A = n("356659"), m = n("981631"), N = n("70722"); class p extends s.default { handleRTCConnectionState(e) { let { context: t, state: n, streamKey: r } = e; if (!(0, T.areClipsEnabled)() || n !== m.RTCConnectionStates.RTC_CONNECTED) return; let s = u.default.getId(); if (t === i.MediaEngineContextTypes.DEFAULT) return this.applyUserVoiceRecording(s); if (t === i.MediaEngineContextTypes.STREAM && null != r) { let { ownerId: e } = (0, o.decodeStreamKey)(r); if (e !== s) return; let t = c.default.getRTCConnection(r); if (null == t) return; this.applyStreamRecording(s, t) } } handleRTCUserCreate(e) { let { userId: t, context: n } = e; n === i.MediaEngineContextTypes.DEFAULT && this.applyUserVoiceRecording(t) } handleRTCConnectionFlags(e) { let { userId: t, channelId: n, guildId: i } = e; this.maybeShowClipsWarning(t), this.applyUserVoiceRecording(t); let r = c.default.getRTCConnection(o.encodeStreamKey({ streamType: null != i ? N.StreamTypes.GUILD : N.StreamTypes.CALL, ownerId: t, channelId: n, guildId: i })); null != r && this.applyStreamRecording(t, r) } handleClipsInitFailure(e) { let { applicationName: t, errMsg: n } = e; E.default.track(m.AnalyticEvents.CLIPS_INIT_FAILURE, { application_name: t, error_message: n }) } maybeShowClipsWarning(e) { let t = _.default.getChannelId(); if (!(null == t || f.default.getClipsWarningShown(t)) && e !== u.default.getId()) f.default.isClipsEnabledForUser(e) && (r.default.dispatch({ type: "CLIPS_SHOW_CALL_WARNING", channelId: t }), this.showClipsToast()) } handlePostConnectionOpen() { if (!!(0, h.default)(d.default)) { if (this.applyNativeClipsSettings(), !(0, T.areClipsEnabled)()) { f.default.getSettings().clipsEnabled && this.disableClips(); return }(null == f.default.getHardwareClassification() || null == f.default.getHardwareClassificationForDecoupled() || f.default.getHardwareClassificationVersion() !== A.CLIPS_HARDWARE_CLASSIFICATION_VERSION) && this.classifyHardwareAndTrack().then(e => { r.default.dispatch({ type: "CLIPS_CLASSIFY_HARDWARE", classification: e }) }) } } handleRTCConnectionVideo(e) { let { userId: t, context: n, channelId: r, guildId: s } = e; if (n !== i.MediaEngineContextTypes.STREAM || !(0, h.default)(d.default)) return; let a = c.default.getRTCConnection(o.encodeStreamKey({ streamType: null != s ? N.StreamTypes.GUILD : N.StreamTypes.CALL, ownerId: t, channelId: r, guildId: s })); null != a && this.applyStreamRecording(t, a) } async classifyHardwareAndTrack() { try { let e = await a.default.processUtils.getSystemInfo(), t = this.classifyHardware(e); return E.default.track(m.AnalyticEvents.CLIPS_HARDWARE_CLASSIFICATION, { classification: t, version: A.CLIPS_HARDWARE_CLASSIFICATION_VERSION, gpu_models: e.gpus.map(e => { let { model: t } = e; return t }) }), t } catch (e) { return S.ClipsHardwareClassification.UNKNOWN } } classifyHardware(e) { if ((0, I.isWindows)()) { let t = e.gpus.some(e => { let { model: t } = e; return A.WINDOWS_HARDWARE_AUTO_ENABLE_GPU_REGEX.test(t) }), n = e.gpus.some(e => { let { model: t } = e; return A.WINDOWS_HARDWARE_MINIMUM_GPU_REGEX.test(t) }); return t ? S.ClipsHardwareClassification.MEETS_AUTO_ENABLE : n ? S.ClipsHardwareClassification.MEETS_MINIMUM : S.ClipsHardwareClassification.BELOW_MINIMUM } if ((0, I.isMac)()) return e.gpus.some(e => { let { model: t } = e; return A.OSX_HARDWARE_AUTO_ENABLE_GPU_REGEX.test(t) }) ? S.ClipsHardwareClassification.MEETS_AUTO_ENABLE : S.ClipsHardwareClassification.MEETS_MINIMUM; return S.ClipsHardwareClassification.UNKNOWN } applyUserVoiceRecording(e) { if (!(0, h.default)(d.default)) return; let t = _.default.getRTCConnection(); if (null == t) return; if (e === u.default.getId()) { t.setClipRecordUser(e, "audio", f.default.getSettings().clipsEnabled); return } let n = f.default.isVoiceRecordingAllowedForUser(e); t.setClipRecordUser(e, "audio", n) } applyStreamRecording(e, t) { if (!(0, h.default)(d.default)) return; if (u.default.getId() === e) { let { clipsEnabled: n } = f.default.getSettings(), i = (0, T.areClipsEnabled)(); t.setClipRecordUser(e, "audio", i && n), t.setClipRecordUser(e, "video", i && n); return } let { enableViewerClipping: n, ignoreSenderPreference: i } = l.default.getCurrentConfig({ location: "ClipsManager:applyStreamRecording" }); if (!n) return; let r = i || f.default.isViewerClippingAllowedForUser(e); this.applyNativeClipsSettings(), t.setClipRecordUser(e, "audio", r), t.setClipRecordUser(e, "video", r) } disableClips() {} constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: e => this.handlePostConnectionOpen(), RTC_CONNECTION_FLAGS: e => this.handleRTCConnectionFlags(e), RTC_CONNECTION_USER_CREATE: e => this.handleRTCUserCreate(e), CLIPS_INIT_FAILURE: e => this.handleClipsInitFailure(e), CLIPS_SETTINGS_UPDATE: e => this.applyNativeClipsSettings(e), STREAM_START: () => this.applyNativeClipsSettings(), RUNNING_GAME_TOGGLE_DETECTION: e => this.handleClipsInitOnToggleDetection(e), RUNNING_GAMES_CHANGE: e => this.handleClipsInitOnGamesChange(e), CLIPS_RESTART: () => this.fireClipsInitEvent(), RTC_CONNECTION_VIDEO: e => this.handleRTCConnectionVideo(e), RTC_CONNECTION_STATE: e => this.handleRTCConnectionState(e), MEDIA_ENGINE_SET_HARDWARE_H264: e => this.handleMediaEngineSetHardwareH264(e) }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } }, 565885: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-02_clips_quality_decoupling", label: "Clips quality decoupling", defaultConfig: { allowQualityDecoupling: !1 }, treatments: [{ id: 1, label: "Enable Clips quality decoupling", config: { allowQualityDecoupling: !0 } }] }) }, 435064: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"); var i, r = n("442837"), s = n("570140"), a = n("579806"), o = n("594190"), l = n("569545"), u = n("314897"), d = n("630388"), _ = n("894694"), c = n("356659"), E = n("981631"), I = n("37113"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = "default", S = [], h = [], A = [], m = 0, N = null, p = null, O = {}, C = null, R = null, g = {}, L = { clipsEnabled: !1, storageLocation: f, clipsQuality: { resolution: I.ApplicationStreamResolutions.RESOLUTION_1080, frameRate: I.ApplicationStreamFPS.FPS_30 }, clipsLength: c.ClipsLengthSettings.SECONDS_30, remindersEnabled: !0, decoupledClipsEnabled: !1, viewerClipsEnabled: !0, viewerConnectivity: c.ClipsViewerConnectivitySettings.ALL }, v = { clipsSettings: L, hardwareClassification: null, hardwareClassificationForDecoupled: null, hardwareClassificationVersion: 0, newClipIds: [], hasClips: !1, hasTakenDecoupledClip: !1, clipsEducationState: { dismissedAt: null, numberOfGamesLaunchedSinceDismissal: 0, numberOfTimesDismissed: 0 } }; async function D() { if (v.clipsSettings.storageLocation !== f || null == a.default || null == a.default.remoteApp) return; let e = await a.default.remoteApp.getPath("documents"); v.clipsSettings.storageLocation = e, y.emitChange() } class M extends(i = r.default.DeviceSettingsStore) { initialize(e) { null != e && (v = e), D(), this.waitFor(o.default) } getClips() { return h } getPendingClips() { return A } getUserAgnosticState() { return v } getSettings() { return v.clipsSettings } getLastClipsSession() { return p } getClipsWarningShown(e) { return N === e } getActiveAnimation() { return R } getStreamClipAnimations(e) { var t; return null !== (t = g[e]) && void 0 !== t ? t : S } hasAnyClipAnimations() { return Object.values(g).some(e => e.length > 0) } getHardwareClassification() { return v.hardwareClassification } getHardwareClassificationForDecoupled() { return v.hardwareClassificationForDecoupled } getHardwareClassificationVersion() { return v.hardwareClassificationVersion } getIsAtMaxSaveClipOperations() { return m >= c.MAX_SIMULTANEOUS_SAVE_CLIP_OPERATIONS } getLastClipsError() { return C } isClipsEnabledForUser(e) { var t, n; return null !== (n = null === (t = O[e]) || void 0 === t ? void 0 : t.clipsEnabled) && void 0 !== n && n } isVoiceRecordingAllowedForUser(e) { var t, n; return null !== (n = null === (t = O[e]) || void 0 === t ? void 0 : t.allowVoiceRecording) && void 0 !== n && n } isViewerClippingAllowedForUser(e) { var t, n; return null !== (n = null === (t = O[e]) || void 0 === t ? void 0 : t.allowAnyViewerClips) && void 0 !== n && n } hasClips() { return v.hasClips } hasTakenDecoupledClip() { return v.hasTakenDecoupledClip } getNewClipIds() { return v.newClipIds } } T(M, "displayName", "ClipsStore"), T(M, "persistKey", "ClipsStore"), T(M, "migrations", [e => ({ clipsSettings: null != e ? e : L, newClipsCount: 0 }), e => { let t = { ...L, ...e.clipsSettings }; return { ...e, clipsSettings: t } }, e => { var t; return { ...e, newClipIds: null !== (t = e.newClipIds) && void 0 !== t ? t : [] } }, e => { var t, n; return { ...e, hardwareClassification: null !== (t = e.hardwareClassification) && void 0 !== t ? t : null, hardwareClassificationVersion: null !== (n = e.hardwareClassificationVersion) && void 0 !== n ? n : 0 } }, e => { var t; return { ...e, hasClips: null !== (t = e.hasClips) && void 0 !== t && t } }, e => ({ ...e, clipsSettings: { ...e.clipsSettings, decoupledClipsEnabled: L.decoupledClipsEnabled } }), e => { var t; return { ...e, hardwareClassificationForDecoupled: null !== (t = e.hardwareClassificationForDecoupled) && void 0 !== t ? t : null } }, e => { var t; let i = null === (t = n("131951").default) || void 0 === t ? void 0 : t.getHardwareH264(); return { ...e, clipsSettings: { ...e.clipsSettings, clipsEnabled: !!i && e.clipsSettings.clipsEnabled, decoupledClipsEnabled: !!i && e.clipsSettings.decoupledClipsEnabled } } }, e => { var t; return { ...e, newClipIds: null !== (t = e.newClipIds) && void 0 !== t ? t : [], newClipIDs: void 0 } }, e => ({ ...e, clipsSettings: { ...e.clipsSettings, clipsQuality: "number" == typeof e.clipsSettings.clipsQuality || null == e.clipsSettings.clipsQuality ? L.clipsQuality : e.clipsSettings.clipsQuality } }), e => { var t; return { ...e, clipsSettings: { ...e.clipsSettings, remindersEnabled: null !== (t = e.clipsSettings.remindersEnabled) && void 0 !== t ? t : L.remindersEnabled } } }, e => ({ ...e, hasTakenDecoupledClip: !1, clipsEducationState: { dismissedAt: null, numberOfGamesLaunchedSinceDismissal: 0, numberOfTimesDismissed: 0 } })]); let y = new M(s.default, { CLIPS_SETTINGS_UPDATE: function(e) { let { settings: t } = e; v = { ...v, clipsSettings: { ...v.clipsSettings, ...t } } }, CLIPS_SAVE_CLIP: function(e) { var t, n; let { clip: i } = e; m = Math.max(m - 1, 0), p = { applicationName: i.applicationName, ended: !1, ...p, newClipIds: [...null !== (t = null == p ? void 0 : p.newClipIds) && void 0 !== t ? t : [], i.id] }, v = { ...v, newClipIds: [...null !== (n = v.newClipIds) && void 0 !== n ? n : [], i.id] }, A = A.filter(e => { let { id: t } = e; return t !== i.id }), h = [i, ...h], v.hasClips = !0 }, CLIPS_SAVE_CLIP_PLACEHOLDER: function(e) { let { clip: t } = e; A = [t, ...A] }, CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR: function(e) { let { clipId: t } = e; A = A.filter(e => { let { id: n } = e; return n !== t }) }, CLIPS_SAVE_CLIP_START: function(e) { let { clipType: t, streamKey: n, thumbnail: i } = e; if (m += 1, v.hasTakenDecoupledClip = v.hasTakenDecoupledClip || t === c.ClipSaveTypes.DECOUPLED, null != n && null != i) { var r; let e = Date.now(); R = null != R ? R : e, g[n] = [...null !== (r = g[n]) && void 0 !== r ? r : [], { timestamp: e, thumbnail: i }] } }, CLIPS_SAVE_CLIP_ERROR: function() { m = Math.max(m - 1, 0) }, CLIPS_SAVE_ANIMATION_END: function(e) { let { streamKey: t, timestamp: n } = e; R === n && (R = null), null == n ? g[t] = [] : g[t] = g[t].filter(e => e.timestamp !== n) }, STREAM_START: function(e) { let { sourceName: t, pid: n } = e; if (!v.clipsSettings.clipsEnabled) return !1; let i = t; if (null != n) { var r; let e = o.default.getGameForPID(n); i = null !== (r = null == e ? void 0 : e.name) && void 0 !== r ? r : i } if (null == i || "" === i) return !1; p = { applicationName: i, newClipIds: [], ended: !1 } }, STREAM_STOP: function(e) { let { streamKey: t } = e; if (R = null, g[t] = [], null == p || (0, l.decodeStreamKey)(t).ownerId !== u.default.getId()) return !1; p = 0 === p.newClipIds.length ? null : { ...p, ended: !0 } }, CLIPS_CLEAR_CLIPS_SESSION: function() { if (null == p) return !1; p = null }, CLIPS_CLEAR_NEW_CLIP_IDS: function() { v.newClipIds = [] }, CLIPS_LOAD_DIRECTORY_SUCCESS: function(e) { v.hasClips = e.clips.length > 0, h = e.clips }, CLIPS_DELETE_CLIP: function(e) { 0 === (h = h.filter(t => { let { filepath: n } = t; return n !== e.filepath })).length && (v.hasClips = !1) }, CLIPS_UPDATE_METADATA: function(e) { let { clip: t } = e; for (let [e, n] of h.entries()) if (n.id === t.id) { h[e] = t, h = [...h]; return } }, RTC_CONNECTION_FLAGS: function(e) { O[e.userId] = { clipsEnabled: (0, d.hasFlag)(e.flags, E.VoiceFlags.CLIPS_ENABLED), allowVoiceRecording: (0, d.hasFlag)(e.flags, E.VoiceFlags.ALLOW_VOICE_RECORDING), allowAnyViewerClips: (0, d.hasFlag)(e.flags, E.VoiceFlags.ALLOW_ANY_VIEWER_CLIPS) } }, CLIPS_SHOW_CALL_WARNING: function(e) { let { channelId: t } = e; N = t }, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; t !== N && (N = null) }, CLIPS_CLASSIFY_HARDWARE: function(e) { let { classification: t } = e, n = v.hardwareClassification; v.hardwareClassificationVersion = c.CLIPS_HARDWARE_CLASSIFICATION_VERSION, v.hardwareClassification = t, v.hardwareClassification === _.ClipsHardwareClassification.MEETS_AUTO_ENABLE && n !== _.ClipsHardwareClassification.MEETS_AUTO_ENABLE && (v.clipsSettings.clipsEnabled = !0); let i = v.hardwareClassificationForDecoupled; v.hardwareClassificationForDecoupled = t, v.hardwareClassificationForDecoupled === _.ClipsHardwareClassification.MEETS_AUTO_ENABLE && i !== _.ClipsHardwareClassification.MEETS_AUTO_ENABLE && v.clipsSettings.clipsEnabled && (v.clipsSettings.decoupledClipsEnabled = !0) }, CLIPS_INIT: function(e) { let { applicationName: t } = e; if (C = null, !v.clipsSettings.clipsEnabled) return !1; p = { applicationName: t, newClipIds: [], ended: !1 } }, CLIPS_INIT_FAILURE: function(e) { let { errMsg: t } = e; C = t }, CLIPS_DISMISS_EDUCATION: function(e) { let { educationType: t } = e; switch (t) { case c.ClipsUserEducationType.Error: C = null; break; case c.ClipsUserEducationType.Disabled: case c.ClipsUserEducationType.Enabled: v.clipsEducationState.dismissedAt = Date.now(), v.clipsEducationState.numberOfGamesLaunchedSinceDismissal = 0, v.clipsEducationState.numberOfTimesDismissed += 1 } }, RUNNING_GAMES_CHANGE: function(e) { let { added: t } = e; t.length > 0 && (v.clipsEducationState.numberOfGamesLaunchedSinceDismissal += 1) } }); t.default = y }, 894694: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ClipsHardwareClassification: function() { return i } }), (r = i || (i = {})).UNKNOWN = "unknown", r.BELOW_MINIMUM = "below_minimum", r.MEETS_MINIMUM = "meets_minimum", r.MEETS_AUTO_ENABLE = "meets_auto_enable" }, 61994: function(e, t, n) { "use strict"; n.r(t), n("627494"), n("757143"); let i = /[<>:"/\\|?*\.]/g; t.default = function(e) { return e.replaceAll(i, "").trim().replaceAll(" ", "_") } }, 830496: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getClipCreatedAt: function() { return s }, getClipParticipantIds: function() { return a } }); var i = n("709054"), r = n("356659"); function s(e) { return new Date(i.default.extractTimestamp(e)).toISOString() } function a(e) { return e.slice(0, r.CLIPS_MAX_PARTICIPANTS) } }, 550351: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("594190"), r = n("569545"), s = n("199902"), a = n("314897"), o = n("158776"), l = n("19780"), u = n("979651"), d = n("709054"), _ = n("356659"), c = n("981631"), E = n("689938"); function I(e) { let { sourceName: t, sourceApplicationId: n } = function(e) { var t, n; if (null != e) { let { ownerId: t } = r.decodeStreamKey(e); if (t !== a.default.getId()) { let e = o.default.getActivities(t).find(e => e.type === c.ActivityTypes.PLAYING); return { sourceName: null == e ? void 0 : e.name, sourceApplicationId: null == e ? void 0 : e.application_id } } } let l = s.default.getStreamerActiveStreamMetadata(), u = null == l ? void 0 : l.pid, d = null != l ? null != u ? i.default.getGameForPID(u) : null : i.default.getVisibleGame(); return { sourceName: null !== (t = null == l ? void 0 : l.sourceName) && void 0 !== t ? t : null == d ? void 0 : d.name, sourceApplicationId: null !== (n = null == l ? void 0 : l.id) && void 0 !== n ? n : null == d ? void 0 : d.id } }(e), I = l.default.getChannelId(), T = [a.default.getId()]; return null != I && (T = Object.keys(u.default.getVoiceStatesForChannel(I))), { id: d.default.fromTimestamp(Date.now()), version: _.CURRENT_CLIP_METADATA_VERSION, applicationName: null != t ? t : E.default.Messages.CLIPS_UNKNOWN_SOURCE, applicationId: n, users: T, clipMethod: "manual", length: 0, thumbnail: "" } } }, 779618: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("358085"), r = n("924557"), s = n("65154"); function a(e) { let { ignorePlatformRestriction: t } = r.ClipsExperiment.getCurrentConfig({ location: "isClipsClientCapable" }, { autoTrackExposure: !1 }); return t || i.isDesktop() && e.getMediaEngine().supports(s.Features.CLIPS) } }, 659487: function(e, t, n) { "use strict"; n.r(t), n.d(t, { validateClipMetadata: function() { return a } }), n("47120"), n("724458"); var i = n("356659"); let r = [e => { let t = { ...e, version: 1, applicationName: e.gameName, applicationId: void 0 }; return delete t.gameName, t }, e => ({ ...e, version: 2, name: e.name.startsWith("Clip - ") ? void 0 : e.name }), e => ({ ...e, version: 3, name: "" === e.name ? void 0 : e.name })], s = null; async function a(e) { var t; let a = (await n.e("56268").then(n.t.bind(n, "826753", 23))).default; let o = (t = a, null != s ? s : s = t.object({ id: t.string().required(), version: t.number().positive().integer().min(0).max(i.CURRENT_CLIP_METADATA_VERSION).optional(), name: t.string().when("version", { is: t.number().less(3), then: t.string().allow("") }), gameName: t.string().when("version", { is: t.number().greater(0).required(), then: t.forbidden(), otherwise: t.required() }), applicationName: t.string().when("version", { is: t.number().greater(0).required(), then: t.required(), otherwise: t.forbidden() }), applicationId: t.string(), users: t.array().items(t.string()).required(), filepath: t.string().required(), length: t.number().required(), thumbnail: t.string().required().allow(""), editMetadata: t.object().keys({ start: t.number(), end: t.number(), applicationAudio: t.boolean(), voiceAudio: t.boolean() }), clipMethod: t.string().allow("auto", "manual").required() }).required()); try { a.assert(e, o); return null == e.version && (e.version = 0), r.slice(e.version).reduce((e, t) => t(e), e) } catch (e) { return null } } }, 39604: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearClipsSession: function() { return j }, clearNewClipIds: function() { return W }, deleteClip: function() { return z }, dismissClipsUserEducation: function() { return X }, dismissSaveClipAnimation: function() { return H }, exportClip: function() { return Z }, loadClipsDirectory: function() { return K }, saveClip: function() { return F }, updateAllowVoiceRecording: function() { return y }, updateClipMetadata: function() { return Y }, updateClipsEnabled: function() { return P }, updateClipsLength: function() { return k }, updateClipsQuality: function() { return w }, updateClipsStorageLocation: function() { return G }, updateDecoupledClipsEnabled: function() { return U }, updateRemindersEnabled: function() { return b }, updateViewerClipsEnabled: function() { return B } }), n("47120"), n("653041"); var i = n("46973"), r = n("992774"), s = n("381499"), a = n("570140"), o = n("579806"), l = n("255914"), u = n("594190"), d = n("569545"), _ = n("836157"), c = n("441167"), E = n("675478"), I = n("361291"), T = n("199902"), f = n("314897"), S = n("131951"), h = n("959457"), A = n("33039"), m = n("626135"), N = n("358085"), p = n("557177"), O = n("435064"), C = n("61994"), R = n("550351"), g = n("659487"), L = n("711644"), v = n("259612"), D = n("356659"), M = n("981631"); function y(e) { let { allowVoiceRecording: t } = e; E.PreloadedUserSettingsActionCreators.updateAsync("clips", e => { e.allowVoiceRecording = s.BoolValue.create({ value: t }) }, E.UserSettingsDelay.INFREQUENT_USER_ACTION), m.default.track(M.AnalyticEvents.CLIPS_SETTINGS_UPDATED, { allow_voice_recording: t }) } async function P(e) { let { clipsEnabled: t, guildId: n, trackAnalytics: i = !1 } = e; await a.default.dispatch({ type: "CLIPS_SETTINGS_UPDATE", settings: { clipsEnabled: t, ...!t && { decoupledClipsEnabled: !1 } } }), i && m.default.track(M.AnalyticEvents.CLIPS_SETTINGS_UPDATED, { clips_enabled: t, guild_id: n, ...!t && { decoupled_clips_enabled: !1 } }) } function U(e) { let { enabled: t, trackAnalytics: n = !1 } = e; a.default.dispatch({ type: "CLIPS_SETTINGS_UPDATE", settings: { ...t && { clipsEnabled: !0 }, decoupledClipsEnabled: t } }), n && m.default.track(M.AnalyticEvents.CLIPS_SETTINGS_UPDATED, { ...t && { clips_enabled: !0 }, decoupled_clips_enabled: t }) } function b(e) { a.default.dispatch({ type: "CLIPS_SETTINGS_UPDATE", settings: { remindersEnabled: e } }), m.default.track(M.AnalyticEvents.CLIPS_SETTINGS_UPDATED, { reminders_enabled: e }) } function G(e) { a.default.dispatch({ type: "CLIPS_SETTINGS_UPDATE", settings: { storageLocation: e } }) } function w(e) { a.default.dispatch({ type: "CLIPS_SETTINGS_UPDATE", settings: { clipsQuality: e } }) } function k(e) { a.default.dispatch({ type: "CLIPS_SETTINGS_UPDATE", settings: { clipsLength: e } }) } function B(e) { let { enabled: t, trackAnalytics: n = !1 } = e; a.default.dispatch({ type: "CLIPS_SETTINGS_UPDATE", settings: { viewerClipsEnabled: t } }), n && m.default.track(M.AnalyticEvents.CLIPS_SETTINGS_UPDATED, { viewer_clips_enabled: t }) } function V(e, t) { var n, i, r, s, a, o, u, d, _, c; let E = new Map; for (let e in t.framesEncodedByEncoder) { let i = t.framesEncodedByEncoder[e], r = (0, l.parseEncoder)(e), s = null !== (n = E.get(r)) && void 0 !== n ? n : 0; E.set(r, s + i) } return { ...e, frames_encoded_nvidia_cuda: null !== (i = E.get(l.Encoders.NVIDIA_CUDA)) && void 0 !== i ? i : 0, frames_encoded_nvidia_direct3d: null !== (r = E.get(l.Encoders.NVIDIA_DIRECT_3D)) && void 0 !== r ? r : 0, frames_encoded_openh264: null !== (s = E.get(l.Encoders.OPENH264)) && void 0 !== s ? s : 0, frames_encoded_videotoolbox: null !== (a = E.get(l.Encoders.VIDEOTOOLBOX)) && void 0 !== a ? a : 0, frames_encoded_amd_direct3d: null !== (o = E.get(l.Encoders.AMD_DIRECT_3D)) && void 0 !== o ? o : 0, frames_encoded_intel: null !== (u = E.get(l.Encoders.INTEL)) && void 0 !== u ? u : 0, frames_encoded_intel_direct3d: null !== (d = E.get(l.Encoders.INTEL_DIRECT_3D)) && void 0 !== d ? d : 0, frames_encoded_uncategorized: null !== (_ = E.get(l.Encoders.UNCATEGORIZED)) && void 0 !== _ ? _ : 0, frames_encoded_unknown: null !== (c = E.get(l.Encoders.UNKNOWN)) && void 0 !== c ? c : 0, frames_submitted: t.framesSubmitted, frames_submitted_during_clip: t.framesSubmittedDuringClip, frames_encoded: t.framesEncoded, frames_encoded_during_clip: t.framesEncodedDuringClip, frames_dropped: t.framesDropped, frames_dropped_during_clip: t.framesDroppedDuringClip, clip_duration_setting: O.default.getSettings().clipsLength, clip_duration: t.clipDuration, clip_resolution_width: t.clipResolutionWidth, clip_resolution_height: t.clipResolutionHeight, min_fps: t.minFps, max_fps: t.maxFps, submitted_fps: t.submittedFps, target_fps: I.default.getState().fps, audio_track_count: t.audioTrackCount, saved_at: t.savedAt } } async function x(e) { let t = O.default.getSettings().storageLocation, n = (0, R.default)(e), i = "".concat((0, C.default)(n.applicationName.substring(0, 20)), "_").concat(n.id, ".mp4"), r = o.default.fileManager.join(t, i), s = S.default.getMediaEngine(), l = JSON.stringify(n), u = null != e ? (0, d.decodeStreamKey)(e).ownerId : void 0, _ = function(e) { var t; let n, i, r; if (null != e) { n = null != e ? h.default.getRTCConnection(e) : null; let t = (0, d.decodeStreamKey)(e); i = t.guildId, r = t.channelId } else { let e = f.default.getId(), t = T.default.getActiveStreamForUser(e, null); n = null != t ? h.default.getRTCConnection((0, d.encodeStreamKey)(t)) : null, i = null == t ? void 0 : t.guildId, r = null == t ? void 0 : t.channelId } let s = null == n ? void 0 : null === (t = n.analyticsContext) || void 0 === t ? void 0 : t.streamApplication; return { rtc_connection_id: null == n ? void 0 : n.getRTCConnectionId(), media_session_id: null == n ? void 0 : n.getMediaSessionId(), parent_media_session_id: null == n ? void 0 : n.parentMediaSessionId, guild_id: i, channel_id: r, application_id: null == s ? void 0 : s.id, application_name: null == s ? void 0 : s.name } }(e); null != e && a.default.dispatch({ type: "CLIPS_SAVE_CLIP_PLACEHOLDER", clip: { ...n, filepath: r } }); try { var c; let { duration: e, clipStats: t } = await (null != u ? s.saveClipForUser(u, r, l) : s.saveClip(r, l)), i = V(_, t); i.clip_save_time_ms = t.clipSaveTimeMs, i.clip_size_bytes = t.clipSizeBytes, null != t.viewerDecodeFps && (i.decode_fps_during_clip = t.viewerDecodeFps, i.encode_fps_during_clip = t.viewerEncodeFps, i.target_fps = null), m.default.track(M.AnalyticEvents.CLIP_SAVED, i); let a = await (0, v.createThumbnailFromVideo)(o.default.clips.getClipProtocolURLFromPath(r), 0); return n.thumbnail = a, n.length = e, D.ClipsLogger.info("Clip save succeeded with ".concat(e, "ms and thumbnail ").concat(null !== (c = null == a ? void 0 : a.length) && void 0 !== c ? c : 0, " bytes thumbnail.")), await s.updateClipMetadata(r, JSON.stringify(n)), { ...n, filepath: r } } catch (i) { if (null != e && a.default.dispatch({ type: "CLIPS_SAVE_CLIP_PLACEHOLDER_ERROR", clipId: n.id }), !("errorMessage" in i)) throw m.default.track(M.AnalyticEvents.CLIP_SAVE_FAILURE, _), i; let t = V(_, i); throw t.error_at = i.errorAt, t.error_message = i.errorMessage, m.default.track(M.AnalyticEvents.CLIP_SAVE_FAILURE, t), i.errorMessage } } async function F(e) { var t; let { enableDecoupledGameClipping: n } = _.default.getCurrentConfig({ location: "8ac9d1_1" }, { autoTrackExposure: !1 }), { enableViewerClipping: s } = c.default.getCurrentConfig({ location: "SaveClip" }, { autoTrackExposure: !1 }); if (O.default.getIsAtMaxSaveClipOperations()) return; let o = O.default.getSettings().clipsEnabled && null != T.default.getCurrentUserActiveStream(), l = n && O.default.getSettings().decoupledClipsEnabled && (null === (t = u.default.getVisibleGame()) || void 0 === t ? void 0 : t.windowHandle) != null && S.default.hasClipsSource(), E = null != e && null != T.default.getActiveStreamForStreamKey(e) && s; if (!o && !l && !E) return; let I = T.default.getCurrentUserActiveStream(), h = null != I ? (0, d.encodeStreamKey)(I) : void 0, m = null != e ? e : h, N = (() => { let e = null != m ? (0, d.decodeStreamKey)(m).ownerId : void 0; return e === f.default.getId() ? D.ClipSaveTypes.STREAMER : null != e ? D.ClipSaveTypes.VIEWER : D.ClipSaveTypes.DECOUPLED })(), C = await (async () => { if (null == m) return; let { ownerId: e, guildId: t } = (0, d.decodeStreamKey)(m), n = A.default.getStreamId(e, t, i.MediaEngineContextTypes.STREAM); if (null != n) try { let e = (0, r.getVoiceEngine)(), t = await e.getNextVideoOutputFrame(n); return (0, v.createImageFromImageData)(t) } catch (e) { return } })(); a.default.dispatch({ type: "CLIPS_SAVE_CLIP_START", clipType: N, streamKey: m, thumbnail: C }); let R = (0, p.playSound)("clip_save", .5), g = performance.now(); try { let e = await x(m); a.default.dispatch({ type: "CLIPS_SAVE_CLIP", clip: e }) } catch (e) { D.ClipsLogger.error("Clip Failed to Save", e), null == R || R.stop(), (0, p.playSound)("clip_error", .5), a.default.dispatch({ type: "CLIPS_SAVE_CLIP_ERROR" }) } D.ClipsLogger.info("".concat(O.default.getSettings().clipsLength / 1e3, "s clip save took ").concat(Math.round(performance.now() - g), "ms")) } function H(e, t) { a.default.dispatch({ type: "CLIPS_SAVE_ANIMATION_END", streamKey: e, timestamp: t }) } async function Y(e, t) { let n = O.default.getClips().find(t => t.id === e); if (null == n) return; let i = { ...n, ...t }; null != await (0, g.validateClipMetadata)(i) && (await S.default.getMediaEngine().updateClipMetadata(i.filepath, JSON.stringify(i)), m.default.track(M.AnalyticEvents.CLIP_EDITED, { clip_id: i.id }), a.default.dispatch({ type: "CLIPS_UPDATE_METADATA", clip: i })) } function j() { a.default.dispatch({ type: "CLIPS_CLEAR_CLIPS_SESSION" }) } function W() { a.default.dispatch({ type: "CLIPS_CLEAR_NEW_CLIP_IDS" }) } async function K(e) { var t; if (!(0, N.isDesktop)() || (null === (t = o.default.clips) || void 0 === t ? void 0 : t.loadClipsDirectory) == null) return; let n = await o.default.clips.loadClipsDirectory(e), i = []; for (let e of n) { let t = await (0, g.validateClipMetadata)({ ...e.metadata, filepath: e.filepath }); null != t && i.push(t) } a.default.dispatch({ type: "CLIPS_LOAD_DIRECTORY_SUCCESS", clips: i }) } async function z(e) { var t; (0, N.isDesktop)() && (null === (t = o.default.clips) || void 0 === t ? void 0 : t.deleteClip) != null && (await o.default.clips.deleteClip(e), a.default.dispatch({ type: "CLIPS_DELETE_CLIP", filepath: e })) } async function Z(e, t) { let n = S.default.getMediaEngine(), i = await n.exportClip(e.filepath, t); return (0, L.default)(i) } function X(e) { a.default.dispatch({ type: "CLIPS_DISMISS_EDUCATION", educationType: e }) } }, 220122: function(e, t, n) { "use strict"; n.r(t); var i = n("481060"), r = n("570140"), s = n("594190"), a = n("199902"), o = n("131951"), l = n("924557"), u = n("474639"), d = n("435064"), _ = n("779618"), c = n("39604"), E = n("356659"), I = n("689938"); class T extends u.default { showClipsToast() { (0, i.showToast)({ id: "CLIPS_IN_CALL_WARNING", message: I.default.Messages.CLIPS_IN_CALL_WARNING, type: i.ToastType.CLIP, options: { duration: E.CLIPS_TOAST_DURATION } }) } applyNativeClipsSettings(e) { if (!(0, _.default)(o.default)) return; let t = (0, l.areClipsEnabled)(), n = d.default.getSettings(), i = (n.clipsEnabled || n.decoupledClipsEnabled) && t, r = o.default.getMediaEngine(); if (r.setClipBufferLength(i ? n.clipsLength / 1e3 : 0), (null == e ? void 0 : e.settings.decoupledClipsEnabled) === !0 && this.fireClipsInitEvent(), null == e || (null == e ? void 0 : e.settings.clipsQuality) != null) { let { frameRate: t, resolution: i } = n.clipsQuality; !r.setClipsQualitySettings(i <= 480 ? i / 3 * 4 : i / 9 * 16, i, t) && null != e && this.fireClipsInitEvent() } } handleClipsInitOnToggleDetection(e) { let t = s.default.getVisibleGame(); null != t && t.id === e.game.id && this.fireClipsInitEvent() } handleClipsInitOnGamesChange(e) { let t = s.default.getVisibleGame(); if (null != t) e.added.find(e => e.pid === t.pid) ? setTimeout(() => this.fireClipsInitEvent(), E.CLIPS_RUNNING_GAME_CHANGE_CLIPS_INIT_DELAY) : this.fireClipsInitEvent() } fireClipsInitEvent() { if (!(0, _.default)(o.default)) return; let e = (0, l.areClipsEnabled)(), t = d.default.getSettings(); if (!(t.clipsEnabled && e) || null != a.default.getCurrentUserActiveStream()) return; let n = s.default.getVisibleGame(); (null == n ? void 0 : n.pid) != null && (null == n ? void 0 : n.windowHandle) != null && null != n.name && "" !== n.name && r.default.dispatch({ type: "CLIPS_INIT", sourceId: "window:".concat(null == n ? void 0 : n.windowHandle), applicationName: n.name, quality: t.clipsQuality }) } handleMediaEngineSetHardwareH264(e) { let { enabled: t } = e; if (!t) { let { clipsEnabled: e } = d.default.getSettings(); e && c.updateClipsEnabled({ clipsEnabled: !1 }) } } disableClips() { c.updateClipsEnabled({ clipsEnabled: !1, trackAnalytics: !1 }) } } t.default = new T }, 543651: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("913527"), o = n.n(a), l = n("442837"), u = n("481060"), d = n("835473"), _ = n("318374"), c = n("594174"), E = n("366695"), I = n("823379"), T = n("689938"), f = n("471387"); t.default = function(e) { let { createdAt: t, participantIds: n, applicationId: r, title: a, guildId: S, className: h } = e, A = (0, d.useGetOrFetchApplication)(r), m = (0, l.useStateFromStoresArray)([c.default], () => { var e; return null !== (e = n.map(e => c.default.getUser(e)).filter(I.isNotNullish)) && void 0 !== e ? e : [] }), N = null == A ? void 0 : A.name, p = o()(t).fromNow(); return null == t ? null : (0, i.jsxs)("div", { className: s()(h, f.container), children: [(0, i.jsx)(E.default, { game: A }), (0, i.jsxs)("div", { className: f.textSection, children: [null != a && "" !== a ? (0, i.jsx)(u.Text, { variant: "text-md/semibold", color: "interactive-active", children: a }) : (0, i.jsx)(u.Text, { variant: "text-md/semibold", color: "text-muted", children: T.default.Messages.CLIPS_UNTITLED }), (0, i.jsxs)(u.Text, { variant: "text-xs/medium", color: "text-muted", className: f.__invalid_subtitle, children: [null != N ? "".concat(N, " • ") : null, p] }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-muted", className: f.__invalid_subtitle })] }), null != m && m.length > 0 && (0, i.jsx)(_.default, { maxUsers: 4, users: m, className: f.__invalid_facePile, guildId: S })] }) } }, 711644: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); var i = n("512722"), r = n.n(i), s = n("735630"), a = n.n(s); async function o(e) { let t; let n = a().createFile(!1), i = new Promise(e => { n.onReady = e }), s = await e.arrayBuffer(); for (let e of (s.fileStart = 0, n.appendBuffer(s), n.flush(), await i, r()(null != n.boxes, "mp4boxInputFile.boxes should not be null after parsing"), n.boxes)) "uuid" === e.type && (t = e.start); let o = e.slice(0, t, e.type), l = e.slice(t + 4, t + 8 + 16, e.type); return new Blob([o, new Uint8Array([0, 0, 0, 24]), l], { type: e.type }) } }, 259612: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createImageFromImageData: function() { return r }, createThumbnailFromVideo: function() { return s } }), n("411104"); var i = n("356659"); function r(e) { let t = document.createElement("canvas"); t.width = e.width, t.height = e.height; let n = t.getContext("2d"); if (null == n) throw Error("Could not create canvas context"); return n.putImageData(new ImageData(e.data, e.width, e.height), 0, 0), t.toDataURL("image/jpeg", .9) } async function s(e, t) { let n = document.createElement("video"); n.muted = !0, n.src = e, n.currentTime = t, await n.play(), n.pause(); let r = i.CLIPS_THUMBNAIL_MAX_WIDTH / n.videoWidth, s = Math.min(r, i.CLIPS_THUMBNAIL_MAX_HEIGHT / n.videoHeight), a = n.videoWidth * s, o = n.videoHeight * s, l = document.createElement("canvas"); l.width = a, l.height = o; let u = l.getContext("2d"); if (null == u) throw Error("Could not create canvas context"); return u.drawImage(n, 0, 0, n.videoWidth, n.videoHeight, 0, 0, a, o), l.toDataURL("image/jpeg", .9) } }, 377668: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CLYDE_AI_MENTION_COLOR: function() { return r }, CLYDE_AI_USER_ID: function() { return i } }); let i = "1081004946872352958", r = 3000177 }, 266090: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClydeExperimentState: function() { return r } }); var i, r, s = n("818083"); (i = r || (r = {}))[i.None = 0] = "None", i[i.DefaultOn = 1] = "DefaultOn", i[i.DefaultOff = 2] = "DefaultOff", i[i.ComingSoon = 3] = "ComingSoon", i[i.ClydeProfiles = 4] = "ClydeProfiles"; let a = (0, s.createExperiment)({ kind: "guild", id: "2023-03_clyde_ai", label: "ClydeAI", defaultConfig: { experimentState: 0 }, treatments: [{ id: 1, label: "Enabled (Default Off)", config: { experimentState: 2 } }, { id: 3, label: "Enabled (Default On)", config: { experimentState: 1 } }, { id: 4, label: "Coming Soon", config: { experimentState: 3 } }, { id: 5, label: "Clyde Profiles", config: { experimentState: 4 } }] }); t.default = a }, 797610: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canUseCustomClydeProfiles: function() { return I }, getClydeEnabled: function() { return c }, getClydeExperimentEnabled: function() { return E }, useClydeEnabled: function() { return d }, useClydeProfilesEnabled: function() { return u } }), n("470079"), n("442837"); var i = n("430824"), r = n("496675"), s = n("266090"), a = n("981631"), o = n("176505"); function l(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "1e9ccc_1", r = null !== (t = null == e ? void 0 : e.id) && void 0 !== t ? t : a.EMPTY_STRING_SNOWFLAKE_ID; return s.default.useExperiment({ guildId: r, location: i }, { autoTrackExposure: n }).experimentState } function u(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 ? arguments[2] : void 0; return l(e, t, n) === s.ClydeExperimentState.ClydeProfiles } function d(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return _(l(e, n), e, t) } function _(e, t, n) { if (null == t) { if (null != n && n.isPrivate()) return !!n.hasFlag(o.ChannelFlags.CLYDE_AI) || i.default.getGuildIds().some(e => E(i.default.getGuild(e))); return !1 } return null != e && e !== s.ClydeExperimentState.None && r.default.can(a.Permissions.USE_CLYDE_AI, n) } function c(e, t) { var n; let i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = null !== (n = null == e ? void 0 : e.id) && void 0 !== n ? n : a.EMPTY_STRING_SNOWFLAKE_ID; return _(s.default.getCurrentConfig({ guildId: r, location: "1e9ccc_2" }, { autoTrackExposure: i }).experimentState, e, t) } function E(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return T(e, t) !== s.ClydeExperimentState.None } function I(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return T(e, t) === s.ClydeExperimentState.ClydeProfiles } function T(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (null == e) return !1; let n = e.id; return s.default.getCurrentConfig({ guildId: n, location: "1e9ccc_4" }, { autoTrackExposure: t }).experimentState } }, 960904: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { CodedLinkType: function() { return i } }), (r = i || (i = {})).INVITE = "INVITE", r.TEMPLATE = "TEMPLATE", r.BUILD_OVERRIDE = "BUILD_OVERRIDE", r.MANUAL_BUILD_OVERRIDE = "MANUAL_BUILD_OVERRIDE", r.EVENT = "EVENT", r.CHANNEL_LINK = "CHANNEL_LINK", r.APP_DIRECTORY_PROFILE = "APP_DIRECTORY_PROFILE", r.ACTIVITY_BOOKMARK = "ACTIVITY_BOOKMARK", r.EMBEDDED_ACTIVITY_INVITE = "EMBEDDED_ACTIVITY_INVITE", r.GUILD_PRODUCT = "GUILD_PRODUCT", r.SERVER_SHOP = "SERVER_SHOP", r.QUESTS_EMBED = "QUESTS_EMBED" }, 891274: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"), n("570140"); var i = n("147913"); n("674588"); var r = n("900489"), s = n("751189"), a = n("409059"); n("652898"), n("701190"); var o = n("960904"), l = n("830121"); let u = new Set; function d(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (t && !u.has(e.channel_id)) return; let n = (0, l.default)(e.content); null != n && 0 !== n.length && n.forEach(e => { let { type: t, code: n } = e; if (t === o.CodedLinkType.INVITE); else if (t === o.CodedLinkType.TEMPLATE) null == a.default.getGuildTemplate(n) && s.default.resolveGuildTemplate(n); else if (t === o.CodedLinkType.BUILD_OVERRIDE || t === o.CodedLinkType.MANUAL_BUILD_OVERRIDE); else if (t === o.CodedLinkType.EVENT); else if (t === o.CodedLinkType.CHANNEL_LINK); else if (t === o.CodedLinkType.APP_DIRECTORY_PROFILE); else if (t === o.CodedLinkType.ACTIVITY_BOOKMARK); else if (t === o.CodedLinkType.EMBEDDED_ACTIVITY_INVITE); else if (t === o.CodedLinkType.GUILD_PRODUCT); else if (t === o.CodedLinkType.SERVER_SHOP); else if (t === o.CodedLinkType.QUESTS_EMBED); else throw Error("Unknown coded link type: ".concat(t)) }) } class _ extends i.default { handleConnectionOpen() { u.clear() } handleChannelSelect(e) { let { channelId: t } = e; null != t && u.add(t) } handleMessage(e) { let { message: t } = e; return d(t, !0) } handleLoadMessages(e) { let { channelId: t, messages: n } = e; u.add(t), n.forEach(e => d(e, !0)) } handleLoadRecentMentions(e) { let { messages: t } = e; t.forEach(e => d(e)) } handleLoadPinnedMessages(e) { let { messages: t } = e; t.forEach(e => d(e)) } handleSearchFinish(e) { e.messages.forEach(e => { e.forEach(e => d(e)) }) } handleGuildFeedFetchSuccess(e) { let { data: t } = e; (0, r.getMessagesFromGuildFeedFetch)(t).forEach(e => d(e)) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: this.handleConnectionOpen, MESSAGE_CREATE: { callback: this.handleMessage, autoSubscribe: !1 }, MESSAGE_UPDATE: this.handleMessage, LOAD_MESSAGES_SUCCESS: this.handleLoadMessages, LOAD_MESSAGES_AROUND_SUCCESS: this.handleLoadMessages, LOAD_RECENT_MENTIONS_SUCCESS: this.handleLoadRecentMentions, LOAD_PINNED_MESSAGES_SUCCESS: this.handleLoadPinnedMessages, SEARCH_FINISH: this.handleSearchFinish, MOD_VIEW_SEARCH_FINISH: this.handleSearchFinish, GUILD_FEED_FETCH_SUCCESS: this.handleGuildFeedFetchSuccess, CHANNEL_SELECT: { callback: this.handleChannelSelect, autoSubscribe: !1 } }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new _ }, 830121: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEVLINK_REGEX: function() { return R }, default: function() { return V }, findCodedLink: function() { return H }, parseQuestsEmbedCode: function() { return x }, parseURLSafely: function() { return F }, remainingPathFromDiscordHostMatch: function() { return k } }), n("757143"), n("47120"), n("653041"); var i, r, s, a, o, l, u = n("729594"); n("865427"); var d = n("264229"); n("413605"); var _ = n("701190"), c = n("226951"), E = n("591759"), I = n("960904"), T = n("981631"); let f = /^\/([a-zA-Z0-9-]+)$/, S = /^\/channels\/([0-9]+|@me)\/([0-9]+)$/, h = /^\/(invite|template)\/([a-zA-Z0-9-]+)\/?$/, A = RegExp("^/events/(\\d+)(?:/)(\\d+)?((?:/)(\\d+))?"), m = /^\/application-directory\/([0-9-]+)\/?$/, N = /^\/activities\/([0-9-]+)\/?$/, p = /^\/channels\/([0-9]+)\/shop\/([0-9]+)$/, O = /^\/channels\/([0-9]+)\/shop$/, C = /^\/quests\/([0-9-]+)\/?$/, R = /dev:\/\/[\w-.~:\/?#\[\]@!$&'()*+,;=%]+/i, g = G(window.GLOBAL_ENV.INVITE_HOST), L = G(window.GLOBAL_ENV.GUILD_TEMPLATE_HOST), v = G(null !== (i = window.GLOBAL_ENV.WEBAPP_ENDPOINT) && void 0 !== i ? i : "//canary.".concat(T.PRIMARY_DOMAIN)), D = G("//canary.".concat(T.PRIMARY_DOMAIN)), M = G("//ptb.".concat(T.PRIMARY_DOMAIN)), y = G("discordapp.com"), P = G("discord.com"), U = [c.default.escape(null !== (r = g.host) && void 0 !== r ? r : ""), c.default.escape(null !== (s = L.host) && void 0 !== s ? s : ""), c.default.escape(null !== (a = v.host) && void 0 !== a ? a : ""), c.default.escape(null !== (o = y.host) && void 0 !== o ? o : ""), c.default.escape(null !== (l = P.host) && void 0 !== l ? l : "")].filter(Boolean), b = RegExp("((https?://[^ ]*)|^|[^/][^/.])(".concat(U.join("|"), ")"), "g"); function G(e) { if (null == e) return { host: null, pathPrefix: null }; if (e.indexOf("/") >= 0) { let t = (0, u.parse)(e, void 0, !0); return { host: t.host, pathPrefix: t.pathname } } return { host: e, pathPrefix: null } } function w(e, t) { var n, i, r; if ((null === (n = t.host) || void 0 === n ? void 0 : n.replace(/^www[.]/i, "")) !== e.host) return null; let s = null !== (i = t.pathname) && void 0 !== i ? i : "", a = null !== (r = e.pathPrefix) && void 0 !== r ? r : ""; if (!s.startsWith(a)) return null; let o = s.substring(a.length); return "" === o ? null : o } function k(e) { var t, n, i, r; return null !== (r = null !== (i = null !== (n = null !== (t = w(v, e)) && void 0 !== t ? t : w(D, e)) && void 0 !== n ? n : w(M, e)) && void 0 !== i ? i : w(y, e)) && void 0 !== r ? r : w(P, e) } function B(e) { var t, n, i, r; let s = F(e); if (null == s || null == s.pathname) return { url: null, inviteHostRemainingPath: null, templateHostRemainingPath: null, primaryHostRemainingPath: null }; let a = w(g, s), o = w(L, s), l = null !== (r = null !== (i = null !== (n = null !== (t = w(v, s)) && void 0 !== t ? t : w(D, s)) && void 0 !== n ? n : w(M, s)) && void 0 !== i ? i : w(y, s)) && void 0 !== r ? r : w(P, s); return { url: s, inviteHostRemainingPath: a, templateHostRemainingPath: o, primaryHostRemainingPath: l } } function V(e) { if (null == e) return []; let t = new Set, n = [], i = (e = e.replace(b, (e, t, n, i) => null == n ? "".concat(t, "http://").concat(i) : e)).match(E.default.URL_REGEX), r = e.match(R); if (null == (i = (null != i ? i : []).concat(null != r ? r : [])) || 0 === i.length) return []; for (let e of i) { if (n.length >= 10) break; let { url: i, inviteHostRemainingPath: r, templateHostRemainingPath: s, primaryHostRemainingPath: a } = B(e); if (null == i || null == i.pathname) continue; let o = (e, i) => { !t.has(i) && (t.add(i), n.push({ type: e, code: i })) }; if ((null == r ? void 0 : r.match(f)) != null) { let e = (0, d.generateInviteKeyFromUrlParams)(r.substring(1), i.search); _.default.getInvite(e), o(I.CodedLinkType.INVITE, e) }(null == s ? void 0 : s.match(f)) != null && o(I.CodedLinkType.TEMPLATE, s.substring(1)); let l = null == a ? void 0 : a.match(h); if (null != l) { let e = l[1].toUpperCase(); if (e === I.CodedLinkType.INVITE) { let e = (0, d.generateInviteKeyFromUrlParams)(l[2], i.search); o(I.CodedLinkType.INVITE, e) } else o(e, l[2]) }(null == a ? void 0 : a.match(S)) != null && o(I.CodedLinkType.CHANNEL_LINK, a.replace("/channels/", "")); let u = function(e) { if (null == e) return null; let t = e.match(A); return null != t && t.length >= 4 ? { guildId: t[1], guildEventId: t[2], recurrenceId: t[4] } : null }(i.pathname); null != u && o(I.CodedLinkType.EVENT, "".concat(u.guildId, "-").concat(u.guildEventId) + (null != u.recurrenceId ? "-".concat(u.recurrenceId) : "")); let c = null == a ? void 0 : a.match(m); if (null != c) { let e = c[1]; o(I.CodedLinkType.APP_DIRECTORY_PROFILE, e) } let E = null == a ? void 0 : a.match(N); if (null != E) { let e = E[1]; o(I.CodedLinkType.ACTIVITY_BOOKMARK, e) } let T = null == a ? void 0 : a.match(p); null != T && o(I.CodedLinkType.GUILD_PRODUCT, "".concat(T[1], "-").concat(T[2])); let C = null == a ? void 0 : a.match(O); null != C && o(I.CodedLinkType.SERVER_SHOP, C[1]); let R = x(e); null != R && o(I.CodedLinkType.QUESTS_EMBED, R) } return n } function x(e) { var t, n; let i = B(e), r = null == i ? void 0 : null === (t = i.primaryHostRemainingPath) || void 0 === t ? void 0 : t.match(C); return null !== (n = null == r ? void 0 : r[1]) && void 0 !== n ? n : null } function F(e) { try { return (0, u.parse)(e) } catch (e) { return null } } function H(e) { return V(e)[0] } }, 625128: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"), r = n("188785"); t.default = { openNativeAppModal(e, t) { let s = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; !r.CONFERENCE_MODE_ENABLED && (i.default.dispatch({ type: "NATIVE_APP_MODAL_OPENING", code: e }), Promise.resolve().then(n.bind(n, "536285")).then(n => { let { default: i } = n; i.request(t, { code: e, ...s }).then(t => { var n; this.nativeModalOpened(null !== (n = null == t ? void 0 : t.code) && void 0 !== n ? n : e) }).catch(() => this.nativeModalOpenFailed(e)).then(() => i.disconnect()) })) }, nativeModalOpened(e) { i.default.dispatch({ type: "NATIVE_APP_MODAL_OPENED", code: e }) }, nativeModalOpenFailed(e) { i.default.dispatch({ type: "NATIVE_APP_MODAL_OPEN_FAILED", code: e }) } } }, 335131: function(e, t, n) { "use strict"; n.r(t), n.d(t, { claimPremiumCollectiblesProduct: function() { return S }, closeCollectiblesShop: function() { return c }, fetchCollectiblesCategories: function() { return I }, fetchCollectiblesProduct: function() { return f }, fetchCollectiblesPurchases: function() { return T }, openCollectiblesShop: function() { return _ }, productDetailsOpened: function() { return E }, setCollectiblesCategoryItemsViewed: function() { return A }, validateCollectiblesRecipient: function() { return h } }); var i = n("544891"), r = n("570140"), s = n("37234"), a = n("881052"); n("777639"); var o = n("549616"), l = n("778787"), u = n("161226"), d = n("981631"); n("597688"), n("574709"), n("1870"), n("328347"); let _ = e => { let { openInLayer: t = !0, ...n } = e; r.default.dispatch({ type: "COLLECTIBLES_SHOP_OPEN", ...n }), t && (0, s.pushLayer)(d.Layers.COLLECTIBLES_SHOP) }, c = () => { r.default.dispatch({ type: "COLLECTIBLES_SHOP_CLOSE" }), (0, s.popLayer)() }, E = e => { r.default.dispatch({ type: "COLLECTIBLES_PRODUCT_DETAILS_OPEN", item: e }) }, I = async e => { r.default.dispatch({ type: "COLLECTIBLES_CATEGORIES_FETCH" }); let t = {}; null != e && (!0 === e.noCache && (t.no_cache = !0), !0 === e.includeUnpublished && (t.include_unpublished = !0), !0 === e.includeBundles && (t.include_bundles = !0), null != e.countryCode && (t.country_code = e.countryCode), null !== e.paymentGateway && (t.payment_gateway = e.paymentGateway)); try { let e = await i.HTTP.get({ url: d.Endpoints.COLLECTIBLES_CATEGORIES, query: t }); r.default.dispatch({ type: "COLLECTIBLES_CATEGORIES_FETCH_SUCCESS", categories: e.body.map(o.default.fromServer) }) } catch (e) { throw r.default.dispatch({ type: "COLLECTIBLES_CATEGORIES_FETCH_FAILURE", error: e }), new a.APIError(e) } }, T = async () => { r.default.dispatch({ type: "COLLECTIBLES_PURCHASES_FETCH" }); try { let e = await i.HTTP.get(d.Endpoints.COLLECTIBLES_PURCHASES); r.default.dispatch({ type: "COLLECTIBLES_PURCHASES_FETCH_SUCCESS", purchases: e.body.map(u.default.fromServer) }) } catch (e) { throw r.default.dispatch({ type: "COLLECTIBLES_PURCHASES_FETCH_FAILURE", error: e }), new a.APIError(e) } }, f = async (e, t) => { r.default.dispatch({ type: "COLLECTIBLES_PRODUCT_FETCH", skuId: e }); try { let n = {}; (null == t ? void 0 : t.countryCode) !== null && (n.country_code = null == t ? void 0 : t.countryCode), (null == t ? void 0 : t.paymentGateway) !== null && (n.payment_gateway = null == t ? void 0 : t.paymentGateway); let s = await i.HTTP.get({ url: d.Endpoints.COLLECTIBLES_PRODUCTS(e), query: n }); r.default.dispatch({ type: "COLLECTIBLES_PRODUCT_FETCH_SUCCESS", skuId: e, product: l.default.fromServer(s.body) }) } catch (t) { throw r.default.dispatch({ type: "COLLECTIBLES_PRODUCT_FETCH_FAILURE", skuId: e, error: t }), new a.APIError(t) } }, S = async e => { r.default.dispatch({ type: "COLLECTIBLES_CLAIM", skuId: e }); try { var t; let n = await i.HTTP.put({ url: d.Endpoints.COLLECTIBLES_CLAIM, body: { sku_id: e } }); r.default.dispatch({ type: "COLLECTIBLES_CLAIM_SUCCESS", skuId: e, purchases: null === (t = n.body) || void 0 === t ? void 0 : t.map(u.default.fromServer) }) } catch (t) { throw r.default.dispatch({ type: "COLLECTIBLES_CLAIM_FAILURE", skuId: e, error: t }), new a.APIError(t) } }, h = async (e, t) => { try { return (await i.HTTP.get({ url: d.Endpoints.COLLECTIBLES_VALID_GIFT_RECIPIENT, query: { sku_id: t, recipient_id: e } })).body.valid } catch (e) { throw new a.APIError(e) } }, A = e => { r.default.dispatch({ type: "COLLECTIBLES_CATEGORY_ITEMS_VIEWED", ...e }) } }, 597688: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"); var s, a, o, l, u = n("392711"), d = n("442837"), _ = n("570140"), c = n("706454"), E = n("884697"); let I = new Map, T = new Map, f = I, S = T, h = !1, A = new Set; let m = () => { f = I, S = T, r = void 0, h = !1, A = new Set, i = void 0 }; class N extends(s = d.default.Store) { initialize() { this.syncWith([c.default], m) } get isFetchingCategories() { return h } isFetchingProduct(e) { return null != e && A.has(e) } get error() { return i } get lastFetched() { return r } get categories() { return f } get products() { return S } getCategory(e) { return null != e ? f.get(e) : void 0 } getProduct(e) { return null != e ? S.get(e) : void 0 } getCategoryForProduct(e) { let t = this.getProduct(e); return this.getCategory(null == t ? void 0 : t.categorySkuId) } } l = "CollectiblesCategoryStore", (o = "displayName") in(a = N) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new N(_.default, { COLLECTIBLES_CATEGORIES_FETCH: e => { h = !0, i = void 0 }, COLLECTIBLES_CATEGORIES_FETCH_SUCCESS: e => { 0 === e.categories.length ? (f = I, S = T) : !(0, u.isEqual)([...f.values()], e.categories) && (f = new Map(e.categories.map(e => [e.skuId, e])), S = new Map((0, E.getProductsFromCategories)(f).map(e => [e.skuId, e]))), r = Date.now(), h = !1, i = void 0 }, COLLECTIBLES_CATEGORIES_FETCH_FAILURE: e => { let { error: t } = e; f = I, S = T, h = !1, A = new Set, i = t }, COLLECTIBLES_PRODUCT_FETCH: e => { let { skuId: t } = e; (A = new Set(A)).add(t), i = void 0 }, COLLECTIBLES_PRODUCT_FETCH_SUCCESS: e => { let { skuId: t, product: n } = e; S.set(t, n), (A = new Set(A)).delete(t), i = void 0 }, COLLECTIBLES_PRODUCT_FETCH_FAILURE: e => { let { skuId: t, error: n } = e; (A = new Set(A)).delete(t), i = n }, LOGOUT: m }) }, 337679: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); n("358085"); let r = (0, i.createExperiment)({ kind: "user", id: "2024-01_mobile_shop", label: "Mobile Shop Experiment", defaultConfig: { mobileShopEnabled: !1, showPaymentSuccessViewInsteadOfPDP: !1, shouldAnimateAvatarDecorationsInIndexPages: !1, shouldFakePurchaseSuccessFlowLocally: !1 }, treatments: [{ id: 1, label: "Enables mobile shop", config: { mobileShopEnabled: !0, showPaymentSuccessViewInsteadOfPDP: !1, shouldAnimateAvatarDecorationsInIndexPages: !1, shouldFakePurchaseSuccessFlowLocally: !1 } }, { id: 601, label: "Show payment success view instead of PDP", config: { mobileShopEnabled: !0, showPaymentSuccessViewInsteadOfPDP: !0, shouldAnimateAvatarDecorationsInIndexPages: !1, shouldFakePurchaseSuccessFlowLocally: !1 } }, { id: 602, label: "Animate decorations in home/index page", config: { mobileShopEnabled: !0, showPaymentSuccessViewInsteadOfPDP: !1, shouldAnimateAvatarDecorationsInIndexPages: !0, shouldFakePurchaseSuccessFlowLocally: !1 } }, { id: 603, label: "Simulate Success Flow Locally", config: { mobileShopEnabled: !0, showPaymentSuccessViewInsteadOfPDP: !0, shouldAnimateAvatarDecorationsInIndexPages: !1, shouldFakePurchaseSuccessFlowLocally: !0 } }] }); t.default = e => { let { location: t } = e; return r.useExperiment({ location: t }) } }, 574709: function(e, t, n) { "use strict"; n.r(t), n("724458"); var i, r = n("180650"), s = n("979554"), a = n("442837"), o = n("570140"), l = n("597688"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = new Date(2023, 8, 25), _ = new Date(2023, 9, 5), c = () => ({ categoryItemViews: { [r.CollectiblesCategorySkuId.FANTASY]: { [s.CollectiblesItemType.AVATAR_DECORATION]: d, [s.CollectiblesItemType.PROFILE_EFFECT]: _ }, [r.CollectiblesCategorySkuId.ANIME]: { [s.CollectiblesItemType.AVATAR_DECORATION]: d, [s.CollectiblesItemType.PROFILE_EFFECT]: _ }, [r.CollectiblesCategorySkuId.BREAKFAST]: { [s.CollectiblesItemType.AVATAR_DECORATION]: d, [s.CollectiblesItemType.PROFILE_EFFECT]: _ }, [r.CollectiblesCategorySkuId.DISXCORE]: { [s.CollectiblesItemType.AVATAR_DECORATION]: d } } }), E = c(); class I extends(i = a.default.PersistedStore) { initialize(e) { null != e && (E = e) } getState() { return E } isItemViewed(e) { var t, n; let i = null === (t = l.default.getProduct(e.skuId)) || void 0 === t ? void 0 : t.categorySkuId; return null != i && (null === (n = E.categoryItemViews[i]) || void 0 === n ? void 0 : n[e.type]) != null } reset() { E = c() } } u(I, "displayName", "CollectiblesPersistedStore"), u(I, "persistKey", "CollectiblesPersistedStoreV2"), new I(o.default, { COLLECTIBLES_CATEGORY_ITEMS_VIEWED: e => { let { categories: t, itemTypes: n } = e, i = new Date; return t.reduce((e, t) => { let { skuId: r } = t, s = n.reduce((e, t) => { var n; return (null === (n = E.categoryItemViews[r]) || void 0 === n ? void 0 : n[t]) != null ? e : (null == E.categoryItemViews[r] && (E.categoryItemViews[r] = {}), E.categoryItemViews[r][t] = i, !0) }, !1); return e || s }, !1) } }) }, 1870: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n("47120"); var a, o, l, u, d = n("392711"), _ = n("442837"), c = n("570140"); let E = new Map, I = E, T = !1; class f extends(a = _.default.Store) { get isFetching() { return T } get isClaiming() { return i } get purchases() { return I } get fetchError() { return r } get claimError() { return s } getPurchase(e) { return null != e ? I.get(e) : void 0 } } u = "CollectiblesPurchaseStore", (l = "displayName") in(o = f) ? Object.defineProperty(o, l, { value: u, enumerable: !0, configurable: !0, writable: !0 }) : o[l] = u, t.default = new f(c.default, { COLLECTIBLES_PURCHASES_FETCH: e => { T = !0, r = void 0 }, COLLECTIBLES_PURCHASES_FETCH_SUCCESS: e => { 0 === e.purchases.length ? I = E : !(0, d.isEqual)([...I.values()], e.purchases) && (I = new Map(e.purchases.map(e => [e.skuId, e]))), T = !1, r = void 0 }, COLLECTIBLES_PURCHASES_FETCH_FAILURE: e => { let { error: t } = e; I = E, T = !1, r = t }, COLLECTIBLES_CLAIM: e => { i = e.skuId, s = void 0 }, COLLECTIBLES_CLAIM_SUCCESS: e => { null == e.purchases || 0 === e.purchases.length ? I = E : !(0, d.isEqual)([...I.values()], e.purchases) && (I = new Map(e.purchases.map(e => [e.skuId, e]))), i = void 0, s = void 0 }, COLLECTIBLES_CLAIM_FAILURE: e => { let { error: t, skuId: n } = e; i = n, s = t }, LOGOUT: e => { I = E, T = !1, i = void 0, r = void 0, s = void 0 } }) }, 215023: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GYOIKO_SAKURA_DECO_SKU_ID: function() { return _ }, SHOP_CARD_PER_PRODUCT_NEW_BADGE_EXPIRY_SETTINGS: function() { return I }, categoryBannerOverrides: function() { return d } }), n("47120"); var i = n("463570"), r = n.n(i), s = n("961238"), a = n.n(s), o = n("705108"), l = n.n(o), u = n("180650"); let d = { [u.CollectiblesCategorySkuId.SPRINGTOONS]: { logoMaxWidth: "48%", addGradient: !1, showDarkBannerText: !0 }, [u.CollectiblesCategorySkuId.ANIME_V2]: { addGradient: !1, showDarkBannerText: !0 }, [u.CollectiblesCategorySkuId.ELEMENTS]: { addGradient: !0 }, [u.CollectiblesCategorySkuId.LUNAR_NEW_YEAR]: { addGradient: !0 }, [u.CollectiblesCategorySkuId.CYBERPUNK]: { addGradient: !0 }, [u.CollectiblesCategorySkuId.SHY]: { addGradient: !1 } }, _ = "1225876188074082374", c = ["1245481938202918912", "1245087661316898877", "1245087724265013299", "1245087850177888356", "1245087912350187520", "1245087968759382207", "1245088023452975104", "1245088094437507163", "1245088205330710539", "1245088254647205991"], E = ["1243619479645065287", "1245481938202918912", "1243620093431119922", "1243619781362450442", "1243620329331626044", "1243617981435478102", "1243617249974288404", "1243618816639107223", "1243618548673417298", "1243619153688920206"], I = a()([...l()(c, r()(Array(c.length), new Date("2024-06-12").getTime())), ...l()(E, r()(Array(E.length), new Date("2024-06-12").getTime()))]) }, 410154: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CollectiblesShopMarketingVariants: function() { return r } }); var i, r, s = n("818083"); (i = r || (r = {}))[i.DEFAULT = 0] = "DEFAULT", i[i.WINTER_2023_DROP = 1] = "WINTER_2023_DROP", i[i.MONSTER_DROP = 2] = "MONSTER_DROP", i[i.SPRINGTOONS = 4] = "SPRINGTOONS", i[i.SHY = 5] = "SHY", i[i.GALAXY = 6] = "GALAXY"; let a = (0, s.createExperiment)({ kind: "user", id: "2023-12_collectibles_shop_marketing", label: "Collectibles Shop Marketing Variations", defaultConfig: { variant: 0 }, treatments: [{ id: 1, label: "Winter 2023", config: { variant: 1 } }, { id: 2, label: "Jan 2024", config: { variant: 2 } }, { id: 4, label: "Springtoons 2024", config: { variant: 4 } }, { id: 5, label: "Shy 2024", config: { variant: 5 } }, { id: 6, label: "Galaxy 2024", config: { variant: 6 } }] }); t.default = e => a.useExperiment({ location: e }).variant }, 328347: function(e, t, n) { "use strict"; let i; n.r(t); var r, s, a, o, l = n("442837"), u = n("570140"); let d = [], _ = d, c = null, E = e => { _ = d, c = null }; class I extends(o = l.default.Store) { get analyticsLocations() { return _ } get analyticsSource() { return c } get initialProductSkuId() { return i } getAnalytics() { return { analyticsLocations: _, analyticsSource: c } } } a = "CollectiblesShopStore", (s = "displayName") in(r = I) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new I(u.default, { COLLECTIBLES_SHOP_OPEN: e => { var t, n; _ = null !== (t = e.analyticsLocations) && void 0 !== t ? t : d, c = null !== (n = e.analyticsSource) && void 0 !== n ? n : null, i = e.initialProductSkuId }, COLLECTIBLES_SHOP_CLOSE: E, COLLECTIBLES_PRODUCT_DETAILS_OPEN: e => { e.item.skuId === i && (i = void 0) }, LOGOUT: E }) }, 884697: function(e, t, n) { "use strict"; n.r(t), n.d(t, { extractPriceByPurchaseTypes: function() { return T }, getAvatarDecorations: function() { return O }, getCollectiblesAssetURL: function() { return C }, getDaysRemaining: function() { return M }, getFormattedPriceForCollectiblesProduct: function() { return E }, getLogoSize: function() { return D }, getProductDiscount: function() { return f }, getProductsFromCategories: function() { return h }, getProfileEffectsFromCategories: function() { return g }, getProfileEffectsFromPurchases: function() { return R }, groupProfileEffects: function() { return L }, isBundleProduct: function() { return P }, isCollectiblesGiftCode: function() { return v }, isFreeCollectiblesProduct: function() { return S }, isPremiumCollectiblesProduct: function() { return _ }, isPremiumCollectiblesPurchase: function() { return c }, isProductNew: function() { return y } }), n("724458"), n("47120"); var i = n("392711"), r = n("979554"), s = n("134432"), a = n("937615"), o = n("922347"), l = n("212161"), u = n("215023"), d = n("981631"); let _ = e => (null == e ? void 0 : e.premiumType) != null, c = e => (null == e ? void 0 : e.purchaseType) === d.EntitlementTypes.PREMIUM_PURCHASE, E = (e, t, n) => { let i; let r = T(e, i = n ? t ? d.PriceSetAssignmentPurchaseTypes.MOBILE_PREMIUM_TIER_2 : d.PriceSetAssignmentPurchaseTypes.MOBILE : t ? d.PriceSetAssignmentPurchaseTypes.PREMIUM_TIER_2 : d.PriceSetAssignmentPurchaseTypes.DEFAULT); return null == r ? "" : (0, a.formatPrice)(null == r ? void 0 : r.amount, null == r ? void 0 : r.currency) }, I = e => { let t = e.bundledProducts; return null == t ? 0 : t.reduce((e, t) => { var n; let i = T(t, d.PriceSetAssignmentPurchaseTypes.DEFAULT); return e + (null !== (n = null == i ? void 0 : i.amount) && void 0 !== n ? n : 0) }, 0) }, T = (e, t) => { var n, i, r; let s = null !== (r = e.prices[t]) && void 0 !== r ? r : null; return null == s ? null : null === (i = s.countryPrices) || void 0 === i ? void 0 : null === (n = i.prices) || void 0 === n ? void 0 : n[0] }, f = (e, t) => { let n = I(e); if (n <= 0) return; let i = T(e, t ? d.PriceSetAssignmentPurchaseTypes.PREMIUM_TIER_2 : d.PriceSetAssignmentPurchaseTypes.DEFAULT); if (null != i) return Math.floor((n - i.amount) / n * 100) }, S = e => { var t; return (null === (t = T(e, d.PriceSetAssignmentPurchaseTypes.DEFAULT)) || void 0 === t ? void 0 : t.amount) === 0 }, h = e => { let t = (0, i.flatMap)([...e.values()], "products"); return (0, i.uniqBy)(t, "storeListingId") }, A = (e, t) => { if (t === r.CollectiblesItemType.AVATAR_DECORATION) { let t = (0, i.flatMap)([...e.values()], "items").filter(o.isAvatarDecorationRecord); return (0, i.uniqBy)(t, "id") } if (t === r.CollectiblesItemType.PROFILE_EFFECT) { let t = (0, i.flatMap)([...e.values()], "items").filter(l.isProfileEffectRecord); return (0, i.uniqBy)(t, "id") } }, m = (e, t) => { let n = h(e); if (t === r.CollectiblesItemType.AVATAR_DECORATION) { let e = (0, i.flatMap)(n, "items").filter(o.isAvatarDecorationRecord); return (0, i.uniqBy)(e, "id") } if (t === r.CollectiblesItemType.PROFILE_EFFECT) { let e = (0, i.flatMap)(n, "items").filter(l.isProfileEffectRecord); return (0, i.uniqBy)(e, "id") } }, N = e => A(e, r.CollectiblesItemType.AVATAR_DECORATION), p = e => m(e, r.CollectiblesItemType.AVATAR_DECORATION), O = (e, t) => (0, i.uniqBy)([...N(e), ...p(t)], "id"), C = (e, t) => { var n; let { CDN_HOST: i, API_ENDPOINT: r } = window.GLOBAL_ENV, a = (0, s.getBestMediaProxySize)(t.size * (0, s.getDevicePixelRatio)()), o = null !== (n = null == t ? void 0 : t.format) && void 0 !== n ? n : "png"; if (null != i) return "".concat(location.protocol, "//").concat(i, "/app-assets/").concat(d.COLLECTIBLES_APPLICATION_ID, "/").concat(e, ".").concat(o, "?size=").concat(a); let l = d.Endpoints.APPLICATION_ASSET(d.COLLECTIBLES_APPLICATION_ID, e, o); return "".concat(location.protocol).concat(r).concat(l, "?size=").concat(a) }, R = e => A(e, r.CollectiblesItemType.PROFILE_EFFECT), g = e => m(e, r.CollectiblesItemType.PROFILE_EFFECT), L = (e, t) => { let n = R(t), i = g(e).filter(e => { let { id: t } = e; return !n.some(e => e.id === t) }); return { purchased: n, shopPreviews: i } }, v = e => e.applicationId === d.COLLECTIBLES_APPLICATION_ID, D = e => 3.8 * e, M = e => { let t = new Date, n = Date.UTC(t.getFullYear(), t.getMonth(), t.getDate()); return Math.floor((Date.UTC(e.getFullYear(), e.getMonth(), e.getDate()) - n) / 864e5) }, y = e => { let t = u.SHOP_CARD_PER_PRODUCT_NEW_BADGE_EXPIRY_SETTINGS[e]; return null != t && new Date().getTime() < t }, P = e => (null == e ? void 0 : e.type) === r.CollectiblesItemType.BUNDLE }, 617452: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useShopBundleEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-05_collectibles_shop_bundle", label: "Collectibles Shop Bundle", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Shop with bundle", config: { enabled: !0 } }] }), r = e => i.useExperiment({ location: e }).enabled }, 449217: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("399606"), r = n("597688"), s = n("1870"); t.default = e => { let [t, n] = (0, i.useStateFromStoresArray)([r.default], () => [r.default.getCategoryForProduct(e), r.default.getProduct(e)]); return { category: t, product: n, purchase: (0, i.useStateFromStores)([s.default], () => s.default.getPurchase(e)) } } }, 223143: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E }, useFetchPurchases: function() { return c }, useMaybeFetchCollectiblesCategories: function() { return _ } }), n("47120"); var i = n("470079"), r = n("399606"), s = n("634894"), a = n("335131"), o = n("597688"), l = n("337679"), u = n("1870"), d = n("617452"); function _(e) { let t = "useMaybeFetchCollectiblesCategories"; (0, s.useTriggerDebuggingAA)({ location: t + " auto on", autoTrackExposure: !0 }), (0, s.useTriggerDebuggingAA)({ location: t + " auto off", autoTrackExposure: !1 }); let n = (0, d.useShopBundleEnabled)("useMaybeFetchCollectiblesCategories"), [l, u, _, c] = (0, r.useStateFromStoresArray)([o.default], () => { var e; return [o.default.isFetchingCategories, o.default.error, null !== (e = o.default.lastFetched) && void 0 !== e ? e : 0, o.default.categories] }); return (0, i.useEffect)(() => { !(l || u || Date.now() - _ < 6e5) && (0, a.fetchCollectiblesCategories)({ ...e, includeBundles: n }) }, [l, _, u, e, n]), { isFetching: l, categories: c, error: u } } function c() { let e = "useFetchPurchases"; (0, s.useTriggerDebuggingAA)({ location: e + " auto on", autoTrackExposure: !0 }), (0, s.useTriggerDebuggingAA)({ location: e + " auto off", autoTrackExposure: !1 }); let [t, n, o, d, _] = (0, r.useStateFromStoresArray)([u.default], () => [u.default.isFetching, u.default.isClaiming, u.default.fetchError, u.default.claimError, u.default.purchases]), { shouldFakePurchaseSuccessFlowLocally: c } = (0, l.default)({ location: "useFetchPurchases" }); return (0, i.useEffect)(() => { (!c || !(_.size > 0)) && (0, a.fetchCollectiblesPurchases)() }, [c]), { isClaiming: n, fetchError: o, claimError: d, isFetching: t, purchases: _ } } function E(e) { var t; let n = "useFetchCollectiblesCategoriesAndPurchases"; (0, s.useTriggerDebuggingAA)({ location: n + " auto on", autoTrackExposure: !0 }), (0, s.useTriggerDebuggingAA)({ location: n + " auto off", autoTrackExposure: !1 }); let { isFetching: i, categories: r, error: a } = _(e), { isClaiming: o, fetchError: l, claimError: u, isFetching: d, purchases: E } = c(); return { isFetching: i || d, isFetchingCategories: i, isFetchingPurchases: d, isClaiming: o, categories: r, purchases: E, error: null !== (t = null != a ? a : l) && void 0 !== t ? t : u } } }, 583434: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useFetchCollectiblesProduct: function() { return u } }), n("47120"); var i = n("470079"), r = n("399606"), s = n("55563"), a = n("335131"), o = n("597688"), l = n("981631"); function u(e) { let t = (0, r.useStateFromStores)([s.default], () => null != e ? s.default.get(e) : null), n = null != t && t.productLine !== l.SKUProductLines.COLLECTIBLES, [u, d] = (0, r.useStateFromStoresArray)([o.default], () => [o.default.isFetchingProduct(e), o.default.getProduct(e)]); return (0, i.useEffect)(() => { null != e && null == d && !n && !u && (0, a.fetchCollectiblesProduct)(e) }, [e, d, n, u]), { product: d, isFetching: u } } }, 311395: function(e, t, n) { "use strict"; n.r(t), n("627341"); var i = n("470079"), r = n("278074"), s = n("979554"), a = n("399606"), o = n("626135"), l = n("597688"), u = n("884697"), d = n("981631"), _ = n("474936"); t.default = e => { let t = (0, a.useStateFromStores)([l.default], () => l.default.products); return (0, i.useCallback)(n => { let { type: i, skuId: a } = n, l = t.get(a); o.default.track(d.AnalyticEvents.PREMIUM_FEATURE_TRY_OUT, { feature_name: (0, r.match)(i).with(s.CollectiblesItemType.AVATAR_DECORATION, () => _.AnalyticsPremiumFeatureNames.AVATAR_DECORATION).with(s.CollectiblesItemType.PROFILE_EFFECT, () => _.AnalyticsPremiumFeatureNames.PROFILE_EFFECT).otherwise(() => void 0), feature_tier: (0, u.isPremiumCollectiblesProduct)(l) ? _.AnalyticsPremiumFeatureTiers.FREE : _.AnalyticsPremiumFeatureTiers.PREMIUM_STANDARD, feature_selection: null == l ? void 0 : l.name, location_stack: e }) }, [t, e]) } }, 922347: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o }, isAvatarDecorationRecord: function() { return a } }); var i = n("979554"), r = n("656698"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = e => e instanceof o; class o extends r.default { static fromServer(e) { return new o({ ...super.fromServer(e), ...e }) } constructor(e) { super(e), s(this, "asset", void 0), s(this, "label", void 0), this.type = i.CollectiblesItemType.AVATAR_DECORATION, this.asset = e.asset, this.label = e.label } } }, 656698: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { static fromServer(e) { let { sku_id: t, ...n } = e; return new s({ ...n, skuId: t }) } constructor(e) { super(), r(this, "id", void 0), r(this, "skuId", void 0), this.id = e.id, this.skuId = e.skuId } } }, 587177: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("311850"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { static fromServer(e) { let { prices: t, type: n, premium_type: r, name: a, sku_id: o, summary: l } = e; return new s({ prices: (0, i.getPricesFromServer)(t), type: n, premiumType: r, name: a, skuId: o, summary: l }) } constructor(e) { r(this, "prices", void 0), r(this, "type", void 0), r(this, "premiumType", void 0), r(this, "name", void 0), r(this, "skuId", void 0), r(this, "summary", void 0), this.prices = e.prices, this.type = e.type, this.premiumType = e.premiumType, this.name = e.name, this.skuId = e.skuId, this.summary = e.summary } } }, 549616: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("724458"), n("653041"); var i = n("778787"), r = n("803358"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a extends r.default { static fromServer(e) { let { products: t, logo: n, pdp_bg: r, mobile_bg: s, success_modal_bg: o, mobile_banner: l, ...u } = e; return new a({ ...super.fromServer(u), products: t.reduce((e, t) => { let n = i.default.fromServer(t); return 0 === n.items.length ? e : (e.push(n), e) }, []), logo: n, pdpBg: r, mobileBg: s, successModalBg: o, mobileBanner: l }) } constructor(e) { super(e), s(this, "products", void 0), s(this, "logo", void 0), s(this, "pdpBg", void 0), s(this, "mobileBg", void 0), s(this, "successModalBg", void 0), s(this, "mobileBanner", void 0), this.products = e.products, this.logo = e.logo, this.pdpBg = e.pdpBg, this.mobileBg = e.mobileBg, this.successModalBg = e.successModalBg, this.mobileBanner = e.mobileBanner } } }, 311850: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPricesFromServer: function() { return r } }), n("724458"); var i = n("301766"); function r(e) { return null == e ? {} : Object.keys(e).reduce((t, n) => { if (null == e) return t; let r = e[n]; return t[n] = { countryPrices: { countryCode: r.country_prices.country_code, prices: r.country_prices.prices.map(e => (0, i.getPriceFromServer)(e, !0)) }, paymentSourcePrices: {} }, t }, {}) } }, 778787: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("724458"), n("627341"), n("653041"); var i = n("278074"), r = n("979554"), s = n("922347"), a = n("587177"), o = n("311850"), l = n("803358"), u = n("212161"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class c extends l.default { static fromServer(e) { let { type: t, premium_type: n, category_sku_id: l, prices: _, bundled_products: E, ...I } = e; return new c({ ...super.fromServer(I), type: t, premiumType: n === d.PREMIUM_TYPE_NONE ? null : n, categorySkuId: l, prices: (0, o.getPricesFromServer)(_), items: I.items.reduce((e, t) => (0, i.match)(t).with({ type: r.CollectiblesItemType.AVATAR_DECORATION }, t => (e.push(s.default.fromServer(t)), e)).with({ type: r.CollectiblesItemType.PROFILE_EFFECT }, t => (e.push(u.default.fromServer(t)), e)).otherwise(() => e), []), bundledProducts: null == E ? void 0 : E.map(a.default.fromServer) }) } constructor(e) { super(e), _(this, "prices", void 0), _(this, "type", void 0), _(this, "premiumType", void 0), _(this, "items", void 0), _(this, "categorySkuId", void 0), _(this, "bundledProducts", void 0), this.summary = e.summary, this.type = e.type, this.premiumType = e.premiumType, this.items = e.items, this.categorySkuId = e.categorySkuId, this.prices = e.prices, this.bundledProducts = e.bundledProducts } } }, 161226: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("778787"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { static fromServer(e) { let { purchased_at: t, purchase_type: n, ...i } = e; return new s({ ...super.fromServer(i), purchaseType: n, purchasedAt: null != t ? new Date(t) : t }) } constructor(e) { super(e), r(this, "purchaseType", void 0), r(this, "purchasedAt", void 0), this.purchasedAt = e.purchasedAt, this.purchaseType = e.purchaseType } } }, 803358: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("979590"), r = n.n(i), s = n("866442"), a = n("81825"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = e => null == e ? e : { backgroundColors: e.background_colors.map(e => r()((0, s.int2hex)(e))), buttonColors: e.button_colors.map(e => r()((0, s.int2hex)(e))), confettiColors: e.confetti_colors.map(e => r()((0, s.int2hex)(e))) }; class u extends a.default { static fromServer(e) { let { store_listing_id: t, sku_id: n, unpublished_at: i, styles: r, ...s } = e, a = null != i ? new Date(i) : null; return new u({ ...s, storeListingId: t, skuId: n, unpublishedAt: a, styles: l(r) }) } constructor(e) { super(), o(this, "storeListingId", void 0), o(this, "skuId", void 0), o(this, "name", void 0), o(this, "summary", void 0), o(this, "banner", void 0), o(this, "unpublishedAt", void 0), o(this, "styles", void 0), this.storeListingId = e.storeListingId, this.skuId = e.skuId, this.name = e.name, this.summary = e.summary, this.banner = e.banner, this.unpublishedAt = e.unpublishedAt, this.styles = e.styles } } }, 212161: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a }, isProfileEffectRecord: function() { return s } }); var i = n("979554"), r = n("656698"); let s = e => e instanceof a; class a extends r.default { static fromServer(e) { return new a({ ...super.fromServer(e), ...e }) } constructor(e) { super(e), this.type = i.CollectiblesItemType.PROFILE_EFFECT } } }, 530618: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("887024"), a = n("675654"); t.default = function(e) { let { confettiTarget: t, confettiCanvas: n, confettiVelocityMultiplier: o, sprites: l, colors: u } = e, [d, _] = r.useState(null), c = (0, s.useConfettiCannon)(n, d), [E, I] = r.useState(!1); return r.useEffect(() => { let e = Array(10).fill(0); return null != t && c.isReady && !E && (e = e.map((n, i) => setTimeout(() => { var n, r; i === e.length - 1 && I(!0), c.createMultipleConfetti((n = t.getBoundingClientRect(), r = null != (r = o) ? r : 1, { ...a.COMMON_CONFETTI_BASE_CONFIG, position: { type: "static-random", minValue: { x: n.x, y: n.y }, maxValue: { x: n.x + n.width, y: n.y + n.height / 2 } }, velocity: { type: "static-random", minValue: { x: -100 * r, y: -50 * r }, maxValue: { x: 100 * r, y: -300 * r } }, dragCoefficient: { type: "static", value: 1e-4 } }), 50) }, 100 * i))), () => { for (let t of e) clearTimeout(t) } }, [c, t, E, o]), (0, i.jsx)(s.SpriteCanvas, { ref: _, sprites: null != l ? l : a.COMMON_CONFETTI_SPRITES, colors: null != u ? u : a.COMMON_CONFETTI_COLORS, spriteWidth: a.COMMON_CONFETTI_MAX_SPRITE_SIZE, spriteHeight: a.COMMON_CONFETTI_MAX_SPRITE_SIZE }) } }, 44315: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getColor: function() { return c }, useColorValue: function() { return E }, useDesaturatedColorString: function() { return I }, useThemedColorValue: function() { return T } }), n("757143"); var i = n("470079"), r = n("688619"), s = n.n(r), a = n("691324"), o = n("399606"), l = n("692547"), u = n("410030"), d = n("607070"); function _(e) { return e.toUpperCase().replace(/-/g, "_") } function c(e) { return l.default.unsafe_rawColors[_(e)].css } function E(e) { return null != e ? a.ColorDetails[e] : null } function I(e) { let t = (0, o.useStateFromStores)([d.default], () => d.default.saturation); return i.useMemo(() => { if (null == e) return null; if ("currentColor" === e || e.startsWith("var(")) return e; let n = s()(e); return n.set("hsl.s", n.get("hsl.s") * t).hex() }, [e, t]) } function T(e, t) { let n = (0, u.useTheme)(), r = (0, o.useStateFromStores)([d.default], () => d.default.saturation); return i.useMemo(() => null == e ? null : { hex: l.default.colors[_(e)].resolve({ theme: null != t ? t : n, saturation: r }).hex() }, [e, r, n, t]) } n("981631") }, 583405: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"), r = n("979590"), s = n.n(r), a = n("866442"), o = n("442837"), l = n("607070"); t.default = e => { let t = (0, o.useStateFromStores)([l.default], () => l.default.desaturateUserColors ? l.default.saturation : 1); return (0, i.useMemo)(() => { let { h: n, s: i, l: r } = s()((0, a.int2hex)(e)).toHsl(), o = s()({ h: n, s: i * t, l: r }); return { hex: o.toHexString(), hsl: o.toHslString() } }, [e, t]) } }, 377171: function(e, t, n) { "use strict"; n.r(t); var i = n("831209"); t.default = i.default }, 260035: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CommonConfettiCannonContextProvider: function() { return u } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("887024"), a = n("745510"), o = n("675654"), l = n("724734"); function u(e) { let { children: t } = e, [n, u] = r.useState(null), [d, _] = r.useState(null), c = r.useRef(new Set), [E, I] = r.useState(!1), T = r.useCallback(e => { c.current.delete(e), I(c.current.size > 0) }, []), f = r.useCallback(e => (c.current.add(e), I(!0), () => T(e)), [T]), S = r.useCallback((e, t) => { for (let n of c.current) n(e, t) }, []); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(a.ConfettiCannonContextProvider, { confettiCanvas: d, spriteCanvas: n, baseConfig: o.COMMON_CONFETTI_BASE_CONFIG, addClickListener: f, removeClickListener: T, children: t }), (0, i.jsx)(s.ConfettiCanvas, { ref: _, className: l.canvas, environment: o.COMMON_CONFETTI_ENVIRONMENT, onClick: E ? S : void 0 }), (0, i.jsx)(s.SpriteCanvas, { ref: u, colors: o.COMMON_CONFETTI_COLORS, sprites: o.COMMON_CONFETTI_SPRITES, spriteWidth: o.COMMON_CONFETTI_MAX_SPRITE_SIZE, spriteHeight: o.COMMON_CONFETTI_MAX_SPRITE_SIZE })] }) } }, 745510: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ConfettiCannonContext: function() { return d }, ConfettiCannonContextProvider: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("887024"), a = n("399606"), o = n("607070"), l = n("981631"); let u = { confettiCanvas: null, cannon: null, createConfetti: () => void 0, createConfettiAt: () => void 0, createMultipleConfetti: () => [], createMultipleConfettiAt: () => [], addClickListener: () => l.NOOP, removeClickListener: l.NOOP }, d = r.createContext(u); function _(e) { let { children: t, confettiCanvas: n, spriteCanvas: l, baseConfig: _, addClickListener: c, removeClickListener: E } = e, I = (0, s.useConfettiCannon)(n, l), T = (0, a.useStateFromStores)([o.default], () => o.default.useReducedMotion), f = r.useMemo(() => T ? u : { confettiCanvas: n, cannon: I, createConfetti: (e, t) => I.createConfetti({ ..._, ...e }, t), createConfettiAt: (e, t, n, i) => I.createConfetti({ ..._, position: { type: "static", value: { x: e, y: t } }, ...n }, i), createMultipleConfetti: function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 20, n = arguments.length > 2 ? arguments[2] : void 0; return I.createMultipleConfetti({ ..._, ...e }, t, n) }, createMultipleConfettiAt: function(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 20, r = arguments.length > 4 ? arguments[4] : void 0; return I.createMultipleConfetti({ ..._, position: { type: "static", value: { x: e, y: t } }, ...n }, i, r) }, addClickListener: c, removeClickListener: E }, [c, _, I, n, T, E]); return (0, i.jsx)(d.Provider, { value: f, children: t }) } }, 675654: function(e, t, n) { "use strict"; n.r(t), n.d(t, { COMMON_CONFETTI_BASE_CONFIG: function() { return l }, COMMON_CONFETTI_COLORS: function() { return s }, COMMON_CONFETTI_ENVIRONMENT: function() { return u }, COMMON_CONFETTI_MAX_SPRITE_SIZE: function() { return o }, COMMON_CONFETTI_SPRITES: function() { return a }, DUCK_CONFETTI_SPRITE: function() { return r } }); var i = n("887024"); let r = n("177351"), s = ["#FF73FA", "#FFC0FF", "#FFD836", "#FF9A15", "#A5F7DE", "#51BC9D", "#AEC7FF", "#3E70DD"], a = [n("294521"), r, n("817812"), n("602002"), n("673910"), n("337242"), n("678282"), { src: n("688815"), colorize: !1 }], o = 28, l = { velocity: { type: "static-random", minValue: { x: 30, y: -80 }, maxValue: { x: -30, y: -180 } }, rotation: { type: "linear-random", minValue: 0, maxValue: 360, minAddValue: -25, maxAddValue: 25 }, size: { type: "static-random", minValue: 14, maxValue: 28 } }, u = new i.Environment }, 930090: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AmazonMusicConnectionExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_rollout_for_vic", label: "Amazon Music Connection", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }) }, 122021: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useLegacyPlatformType: function() { return m }, usePlatformAllowed: function() { return h }, usePlatforms: function() { return A } }), n("47120"); var i = n("470079"), r = n("392711"), s = n.n(r), a = n("442837"), o = n("726542"), l = n("487576"), u = n("553795"), d = n("594174"), _ = n("70956"), c = n("930090"), E = n("981631"), I = n("420212"); let T = { [E.PlatformTypes.INSTAGRAM]: ["1036753656588017764"] }, f = new Map([ [E.PlatformTypes.INSTAGRAM, new Date(2023, 1, 18).getTime()] ]), S = 30 * _.default.Millis.DAY; function h(e) { let { forUserProfile: t } = e, n = (0, a.useStateFromStores)([d.default], () => d.default.getCurrentUser()), i = l.PlayStationVoiceExperiment.useExperiment({ location: "f2f7ef_1" }, { autoTrackExposure: !1 }).allowPlayStationStaging, { enabled: r } = c.AmazonMusicConnectionExperiment.useExperiment({ location: "ConnectionsHooks" }); return e => { var s; return e.type === E.PlatformTypes.PLAYSTATION_STAGING ? i : e.type === E.PlatformTypes.AMAZON_MUSIC ? r : !!(void 0 !== n && (null === (s = T[e.type]) || void 0 === s ? void 0 : s.includes(n.id))) || !!t || e.enabled } } function A() { let e = (0, a.useStateFromStores)([u.default], () => u.default.getAccounts()), t = h({ forUserProfile: !1 }), n = i.useMemo(() => { let t = new Set; return e.forEach(e => t.add(e.type)), t }, [e]); return s().sortBy(o.default.filter(t), [e => { var t; return !(f.has(e.type) && Date.now() < (null !== (t = f.get(e.type)) && void 0 !== t ? t : 0) + S) }, e => n.has(e.type), e => e.hasMetadata, e => !E.ACTIVITY_PLATFORM_TYPES.has(e.type), e => e.name]) } function m(e) { let [t, n] = i.useState(!1); function r(e) { let { key: t } = e; t === I.KeyboardKeysUpdated.SHIFT && n(!0) } function s(e) { let { key: t } = e; t === I.KeyboardKeysUpdated.SHIFT && n(!1) } return (i.useEffect(() => (window.addEventListener("keydown", r), window.addEventListener("keyup", s), () => { window.removeEventListener("keydown", r), window.removeEventListener("keyup", s) }), []), t && e === E.PlatformTypes.TWITTER) ? E.PlatformTypes.TWITTER_LEGACY : e } }, 275759: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ConnectionConfigurationRuleOperator: function() { return r }, getCallbackParamsFromURL: function() { return S }, getConnectionsCheckText: function() { return h }, getCreatedAtDate: function() { return N }, getVisibleConnectionsRole: function() { return m }, isVerifiedRolesChannelVisible: function() { return A }, officialApplicationIds: function() { return f } }); var i, r, s = n("512722"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("729594"); n("442837"); var d = n("627420"); n("524437"); var _ = n("277800"); n("605236"); var c = n("430824"); n("496675"); var E = n("856651"), I = n("981631"), T = n("689938"); let f = ["426537812993638400", "1042836142560645130", "296023718839451649", "979802510766268446", "1031611223235637258", "512333785338216465"]; function S(e) { let { query: t } = u.parse(e, !0), { code: n, state: i, error: r, error_description: s } = t; return a()(!Array.isArray(n), "Received multiple query param values for code"), a()(!Array.isArray(i), "Received multiple query param values for state"), a()(!Array.isArray(r), "Received multiple query param values for error"), a()(!Array.isArray(s), "Received multiple query param values for error_description"), { code: n, state: i, error: r, errorDescription: s } } function h(e) { let { connectionType: t, connectionMetadataField: n, operator: i, operatorText: r, value: s } = e, a = null, o = Math.round(Number(s)); switch (i) { case E.OperatorTypes.EQUAL: a = T.default.Messages.CONNECTIONS_ROLE_POPOUT_MUST_BE, t === I.PlatformTypes.PAYPAL && n === E.MetadataFields.PAYPAL_VERIFIED && (a = T.default.Messages.CONNECTIONS_ROLE_POPOUT_MUST_HAVE_A); break; case E.OperatorTypes.NOT_EQUAL: a = T.default.Messages.CONNECTIONS_ROLE_POPOUT_MUST_NOT_BE; break; case E.OperatorTypes.LESS_THAN: a = T.default.Messages.CONNECTIONS_ROLE_POPOUT_MUST_HAVE_AT_MOST, o = Math.max(0, o - 1); break; case E.OperatorTypes.GREATER_THAN: a = T.default.Messages.CONNECTIONS_ROLE_POPOUT_MUST_HAVE_AT_LEAST, o = Math.max(0, o + 1); break; case void 0: case null: return null } if (null != r && (a = r), a instanceof d.FormattedMessage && null != i) switch (t) { case I.PlatformTypes.REDDIT: switch (n) { case E.MetadataFields.CREATED_AT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_ACCOUNT_AGE.format({ days: o }) }); break; case E.MetadataFields.REDDIT_TOTAL_KARMA: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_REDDIT_KARMA.format({ karma: o }) }); break; case E.MetadataFields.REDDIT_GOLD: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_REDDIT_GOLD }); break; case E.MetadataFields.REDDIT_MOD: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_REDDIT_MODERATOR }); break; default: return null } break; case I.PlatformTypes.STEAM: switch (n) { case E.MetadataFields.CREATED_AT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_ACCOUNT_AGE.format({ days: o }) }); break; case E.MetadataFields.STEAM_GAME_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_STEAM_GAMES.format({ count: o }) }); break; case E.MetadataFields.STEAM_ITEM_COUNT_TF2: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_STEAM_TF2_ITEMS.format({ count: o }) }); break; case E.MetadataFields.STEAM_ITEM_COUNT_DOTA2: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_STEAM_DOTA2_ITEMS.format({ count: o }) }); break; default: return null } break; case I.PlatformTypes.TWITTER: switch (n) { case E.MetadataFields.CREATED_AT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_ACCOUNT_AGE.format({ days: o }) }); break; case E.MetadataFields.TWITTER_VERIFIED: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_TWITTER_VERIFIED }); break; case E.MetadataFields.TWITTER_FOLLOWERS_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_TWITTER_FOLLOWERS.format({ count: o }) }); break; case E.MetadataFields.TWITTER_STATUSES_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_TWITTER_STATUSES.format({ count: o }) }); break; default: return null } break; case I.PlatformTypes.PAYPAL: switch (n) { case E.MetadataFields.CREATED_AT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_ACCOUNT_AGE.format({ days: o }) }); break; case E.MetadataFields.PAYPAL_VERIFIED: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_PAYPAL_VERIFIED }); break; default: return null } break; case I.PlatformTypes.EBAY: switch (n) { case E.MetadataFields.CREATED_AT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_ACCOUNT_AGE.format({ days: o }) }); break; case E.MetadataFields.EBAY_TOP_RATED_SELLER: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_EBAY_TOP_RATED_SELLER }); break; case E.MetadataFields.EBAY_POSITIVE_FEEDBACK_PERCENTAGE: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_EBAY_POSITIVE_FEEDBACK_PERCENTAGE.format({ value: o }) }); break; case E.MetadataFields.EBAY_UNIQUE_POSITIVE_FEEDBACK_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_EBAY_UNIQUE_POSITIVE_FEEDBACK_COUNT.format({ count: o }) }); break; case E.MetadataFields.EBAY_UNIQUE_NEGATIVE_FEEDBACK_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_EBAY_UNIQUE_NEGATIVE_FEEDBACK_COUNT.format({ count: o }) }); break; default: return null } break; case I.PlatformTypes.TIKTOK: switch (n) { case E.MetadataFields.TIKTOK_VERIFIED: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_TIKTOK_VERIFIED }); break; case E.MetadataFields.TIKTOK_FOLLOWER_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_TIKTOK_FOLLOWER_COUNT.format({ count: o }) }); break; case E.MetadataFields.TIKTOK_FOLLOWING_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_TIKTOK_FOLLOWING_COUNT.format({ count: o }) }); break; case E.MetadataFields.TIKTOK_LIKES_COUNT: a = a.format({ platformQuantityHook: () => T.default.Messages.CONNECTIONS_ROLE_RULE_TIKTOK_LIKES_COUNT.format({ count: o }) }); break; default: return null } break; default: return null } return a } function A(e, t) { return Object.values(t).some(e => { var t; return (null === (t = e.tags) || void 0 === t ? void 0 : t.guild_connections) === null }) } function m(e) { var t, n; let { guildMember: i, guild: r, guildRoles: s, channel: o, onlyChannelConnectionRoles: u = !1 } = e; if (null == i) return null; if (null == r && null != o && (r = c.default.getGuild(o.getGuildId())), null == r) return null; let { id: d } = r; null == s && (s = c.default.getRoles(d)); let E = i.roles.map(e => s[e]).filter(e => { var t; return (null == e ? void 0 : null === (t = e.tags) || void 0 === t ? void 0 : t.guild_connections) === null }).sort((e, t) => (a()(null != e && null != t, "roleA or roleB is null"), t.position - e.position)), I = l().intersection(E, (0, _.default)(o)); return I.length > 0 ? null !== (t = I[0]) && void 0 !== t ? t : null : u ? null : null !== (n = E[0]) && void 0 !== n ? n : null } function N(e, t) { if (null == e || "" === e) return null; let n = new Date(e); return !(n instanceof Date) || isNaN(n.getTime()) ? null : n.toLocaleDateString(t, { month: "short", day: "numeric", year: "numeric" }) }(i = r || (r = {}))[i.AND = 0] = "AND", i[i.OR = 1] = "OR" }, 856651: function(e, t, n) { "use strict"; var i, r, s, a, o, l; n.r(t), n.d(t, { GUILD_ROLE_CONNECTION_APPLICATION_CONNECTION_TYPE: function() { return u }, MetadataFields: function() { return r }, MetadataItemTypes: function() { return s }, OperatorTypes: function() { return i } }), (a = i || (i = {}))[a.EQUAL = 1] = "EQUAL", a[a.NOT_EQUAL = 2] = "NOT_EQUAL", a[a.LESS_THAN = 3] = "LESS_THAN", a[a.GREATER_THAN = 4] = "GREATER_THAN", (o = r || (r = {})).CREATED_AT = "created_at", o.REDDIT_TOTAL_KARMA = "total_karma", o.REDDIT_GOLD = "gold", o.REDDIT_MOD = "mod", o.STEAM_GAME_COUNT = "game_count", o.STEAM_ITEM_COUNT_TF2 = "item_count_tf2", o.STEAM_ITEM_COUNT_DOTA2 = "item_count_dota2", o.TWITTER_VERIFIED = "verified", o.TWITTER_FOLLOWERS_COUNT = "followers_count", o.TWITTER_STATUSES_COUNT = "statuses_count", o.PAYPAL_VERIFIED = "verified", o.EBAY_POSITIVE_FEEDBACK_PERCENTAGE = "positive_feedback_percentage", o.EBAY_TOP_RATED_SELLER = "top_rated_seller", o.EBAY_UNIQUE_NEGATIVE_FEEDBACK_COUNT = "unique_negative_feedback_count", o.EBAY_UNIQUE_POSITIVE_FEEDBACK_COUNT = "unique_positive_feedback_count", o.TIKTOK_VERIFIED = "verified", o.TIKTOK_FOLLOWER_COUNT = "follower_count", o.TIKTOK_FOLLOWING_COUNT = "following_count", o.TIKTOK_LIKES_COUNT = "likes_count"; let u = "application"; (l = s || (s = {}))[l.INTEGER_LESS_THAN_EQUAL = 1] = "INTEGER_LESS_THAN_EQUAL", l[l.INTEGER_GREATER_THAN_EQUAL = 2] = "INTEGER_GREATER_THAN_EQUAL", l[l.INTEGER_EQUAL = 3] = "INTEGER_EQUAL", l[l.INTEGER_NOT_EQUAL = 4] = "INTEGER_NOT_EQUAL", l[l.DATETIME_LESS_THAN_EQUAL = 5] = "DATETIME_LESS_THAN_EQUAL", l[l.DATETIME_GREATER_THAN_EQUAL = 6] = "DATETIME_GREATER_THAN_EQUAL", l[l.BOOLEAN_EQUAL = 7] = "BOOLEAN_EQUAL", l[l.BOOLEAN_NOT_EQUAL = 8] = "BOOLEAN_NOT_EQUAL" }, 107484: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"); let u = new Map; class d extends(i = o.default.Store) { getGuildRoleConnectionEligibility(e) { return null != e ? u.get(e) : void 0 } } a = "GuildRoleConnectionEligibilityStore", (s = "displayName") in(r = d) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new d(l.default, { GUILD_ROLE_CONNECTION_ELIGIBILITY_FETCH_SUCCESS: e => { let { roleId: t, roleConnectionEligibility: n } = e; u.set(t, n) } }) }, 231757: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("842146"), a = n("293177"), o = n("349407"), l = n("49012"), u = n("202120"), d = n("981631"); function _(e) { let { platformType: t, location: _, overrideUrl: c, successRedirect: E } = e; if (t === d.PlatformTypes.LEAGUE_OF_LEGENDS && (t = d.PlatformTypes.RIOT_GAMES), t === d.PlatformTypes.CRUNCHYROLL) { s.showModal([null != _ ? _ : "unknown"]); return } if (t === d.PlatformTypes.XBOX) { o.showModal([null != _ ? _ : "unknown"]); return } if (t === d.PlatformTypes.PLAYSTATION || t === d.PlatformTypes.PLAYSTATION_STAGING) { a.showModal([null != _ ? _ : "unknown"], t); return } if (t === d.PlatformTypes.DOMAIN) { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("64941")]).then(n.bind(n, "414402")); return t => (0, i.jsx)(e, { analyticsLocation: [null != _ ? _ : "unknown"], ...t }) }); return } if (null != c) { (0, l.handleClick)({ shouldConfirm: !0, href: c, onConfirm: () => { (0, u.openProviderAuthorize)(t, { location: _, successRedirect: E }, c) } }); return }(0, u.openProviderAuthorize)(t, { location: _, successRedirect: E }) } }, 977392: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("399606"), r = n("592125"), s = n("271383"), a = n("430824"), o = n("275759"); function l(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, l = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], u = (0, i.useStateFromStores)([s.default], () => null != e ? s.default.getMember(e.id, t) : null, [e, t]), d = (0, i.useStateFromStores)([r.default], () => r.default.getChannel(n), [n]), _ = (0, i.useStateFromStores)([r.default], () => r.default.getChannel(null == d ? void 0 : d.parent_id), [d]), c = (0, i.useStateFromStores)([a.default], () => null != e ? a.default.getRoles(e.id) : void 0); return null == e || null == c || null == u ? null : (0, o.getVisibleConnectionsRole)({ guild: e, guildRoles: c, guildMember: u, channel: null != d && d.isThread() && null != _ ? _ : d, onlyChannelConnectionRoles: l }) } }, 323588: function(e, t, n) { "use strict"; n.r(t), n.d(t, { generateEbayMetadataItems: function() { return h }, generatePaypalMetadataItems: function() { return S }, generateRedditMetadataItems: function() { return I }, generateRoleConnectionMetadataItems: function() { return m }, generateSteamMetadataItems: function() { return f }, generateTikTokMetadataItems: function() { return A }, generateTwitterMetadataItems: function() { return T } }), n("653041"), n("47120"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("481060"), u = n("930153"), d = n("275759"), _ = n("856651"), c = n("689938"), E = n("605409"); function I(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, r = [], s = Number(null !== (t = e[_.MetadataFields.REDDIT_TOTAL_KARMA]) && void 0 !== t ? t : -1), a = "1" === e[_.MetadataFields.REDDIT_GOLD], o = "1" === e[_.MetadataFields.REDDIT_MOD]; return s > -1 && r.push((0, i.jsx)(N, { className: n, count: s, label: c.default.Messages.CONNECTIONS_PROFILE_REDDIT_KARMA }, _.MetadataFields.REDDIT_TOTAL_KARMA)), a && r.push((0, i.jsx)(C, { className: n, label: c.default.Messages.CONNECTIONS_REDDIT_GOLD }, _.MetadataFields.REDDIT_GOLD)), o && r.push((0, i.jsx)(C, { className: n, label: c.default.Messages.CONNECTIONS_REDDIT_MOD }, _.MetadataFields.REDDIT_MOD)), r } function T(e) { var t, n; let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, s = [], a = Number(null !== (t = e[_.MetadataFields.TWITTER_STATUSES_COUNT]) && void 0 !== t ? t : -1), o = Number(null !== (n = e[_.MetadataFields.TWITTER_FOLLOWERS_COUNT]) && void 0 !== n ? n : -1); return a > -1 && s.push((0, i.jsx)(N, { className: r, count: a, label: c.default.Messages.CONNECTIONS_PROFILE_TWITTER_STATUSES }, _.MetadataFields.TWITTER_STATUSES_COUNT)), o > -1 && s.push((0, i.jsx)(N, { className: r, count: o, label: c.default.Messages.CONNECTIONS_PROFILE_TWITTER_FOLLOWERS }, _.MetadataFields.TWITTER_FOLLOWERS_COUNT)), s } function f(e) { var t, r, s; let a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, o = [], l = Number(null !== (t = e[_.MetadataFields.STEAM_GAME_COUNT]) && void 0 !== t ? t : -1), u = Number(null !== (r = e[_.MetadataFields.STEAM_ITEM_COUNT_DOTA2]) && void 0 !== r ? r : -1), d = Number(null !== (s = e[_.MetadataFields.STEAM_ITEM_COUNT_TF2]) && void 0 !== s ? s : -1); return l > -1 && o.push((0, i.jsx)(N, { className: a, count: l, label: c.default.Messages.CONNECTIONS_PROFILE_STEAM_GAMES }, _.MetadataFields.STEAM_GAME_COUNT)), u > -1 && o.push((0, i.jsx)(O, { className: a, label: c.default.Messages.CONNECTIONS_STEAM_ITEMS.format({ count: u }), imageSrc: n("448238"), imageAlt: c.default.Messages.CONNECTIONS_STEAM_DOTA2 }, _.MetadataFields.STEAM_ITEM_COUNT_DOTA2)), d > -1 && o.push((0, i.jsx)(O, { className: a, label: c.default.Messages.CONNECTIONS_STEAM_ITEMS.format({ count: d }), imageSrc: n("80730"), imageAlt: c.default.Messages.CONNECTIONS_STEAM_TF2 }, _.MetadataFields.STEAM_ITEM_COUNT_TF2)), o } function S(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, n = []; return "1" === e[_.MetadataFields.PAYPAL_VERIFIED] && n.push((0, i.jsx)(C, { className: s()(t, E.paypalVerifiedTag), label: c.default.Messages.CONNECTIONS_PAYPAL_VERIFIED }, _.MetadataFields.PAYPAL_VERIFIED)), n } function h(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, r = [], s = Number(null !== (t = e[_.MetadataFields.EBAY_POSITIVE_FEEDBACK_PERCENTAGE]) && void 0 !== t ? t : -1), a = "1" === e[_.MetadataFields.EBAY_TOP_RATED_SELLER]; return s > 0 && r.push((0, i.jsx)(N, { className: n, count: s, label: c.default.Messages.CONNECTIONS_PROFILE_EBAY_POSITIVE_FEEDBACK_PERCENTAGE, percent: !0 }, _.MetadataFields.EBAY_POSITIVE_FEEDBACK_PERCENTAGE)), a && r.push((0, i.jsx)(C, { className: n, label: c.default.Messages.CONNECTIONS_EBAY_TOP_RATED_SELLER }, _.MetadataFields.EBAY_TOP_RATED_SELLER)), r } function A(e) { var t, n, r; let s = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, a = [], o = "1" === e[_.MetadataFields.TIKTOK_VERIFIED], l = Number(null !== (t = e[_.MetadataFields.TIKTOK_FOLLOWER_COUNT]) && void 0 !== t ? t : -1), u = Number(null !== (n = e[_.MetadataFields.TIKTOK_FOLLOWING_COUNT]) && void 0 !== n ? n : -1), d = Number(null !== (r = e[_.MetadataFields.TIKTOK_LIKES_COUNT]) && void 0 !== r ? r : -1); return l > -1 && a.push((0, i.jsx)(N, { className: s, count: l, label: c.default.Messages.CONNECTIONS_PROFILE_TIKTOK_FOLLOWERS }, _.MetadataFields.TIKTOK_FOLLOWER_COUNT)), u > -1 && a.push((0, i.jsx)(N, { className: s, count: u, label: c.default.Messages.CONNECTIONS_PROFILE_TIKTOK_FOLLOWING }, _.MetadataFields.TIKTOK_FOLLOWING_COUNT)), d > -1 && a.push((0, i.jsx)(N, { className: s, count: d, label: c.default.Messages.CONNECTIONS_PROFILE_TIKTOK_LIKES }, _.MetadataFields.TIKTOK_LIKES_COUNT)), o && a.push((0, i.jsx)(C, { className: s, label: c.default.Messages.CONNECTIONS_TIKTOK_VERIFIED }, _.MetadataFields.TIKTOK_VERIFIED)), a } function m(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : void 0, r = [], s = Object.keys(e.metadata); if (null == e.application_metadata || 0 === Object.keys(e.application_metadata).length || 0 === s.length) return r; for (let a of o().sortBy(s, t => { var n, i; return null === (i = e.application_metadata) || void 0 === i ? void 0 : null === (n = i[t]) || void 0 === n ? void 0 : n.name })) { let s = e.application_metadata[a]; if (null == s) continue; let o = e.metadata[a]; try { switch (s.type) { case _.MetadataItemTypes.BOOLEAN_EQUAL: case _.MetadataItemTypes.BOOLEAN_NOT_EQUAL: (s.type === _.MetadataItemTypes.BOOLEAN_EQUAL && "1" === o || s.type === _.MetadataItemTypes.BOOLEAN_NOT_EQUAL && "1" !== o) && r.push((0, i.jsx)(C, { className: t, label: s.name }, s.key)); break; case _.MetadataItemTypes.DATETIME_GREATER_THAN_EQUAL: case _.MetadataItemTypes.DATETIME_LESS_THAN_EQUAL: r.push((0, i.jsx)(p, { className: t, date: o, locale: n, label: s.name }, s.key)); break; case _.MetadataItemTypes.INTEGER_EQUAL: case _.MetadataItemTypes.INTEGER_NOT_EQUAL: case _.MetadataItemTypes.INTEGER_GREATER_THAN_EQUAL: case _.MetadataItemTypes.INTEGER_LESS_THAN_EQUAL: r.push((0, i.jsx)(N, { className: t, count: Number(o), label: s.name }, s.key)) } } catch (e) {} } return r } function N(e) { let t, { count: n, label: r, className: a, percent: o } = e, d = (0, u.shortenAndLocalizeNumber)(n) + (o ? "%" : ""); return t = "string" == typeof r ? c.default.Messages.CONNECTIONS_PROFILE_GENERIC_VANITY_METRIC.format({ name: r, value: d }) : r.format({ value: d }), (0, i.jsx)(l.Text, { className: s()(E.connectedAccountVanityMetadata, a), variant: "text-xs/normal", color: "interactive-active", children: t }) } function p(e) { let { date: t, locale: n, label: r, className: a } = e; return (0, i.jsx)(l.Text, { className: s()(E.connectedAccountVanityMetadata, a), variant: "text-xs/normal", color: "interactive-active", children: c.default.Messages.CONNECTIONS_PROFILE_GENERIC_VANITY_METRIC.format({ value: (0, d.getCreatedAtDate)(t, n), name: r }) }) } function O(e) { let { label: t, imageSrc: n, imageAlt: r, className: a } = e; return (0, i.jsxs)("div", { className: s()(E.connectedAccountVanityMetadata, E.connectedAccountVanityMetadataItem, a), children: [(0, i.jsx)(l.Tooltip, { text: r, children: e => (0, i.jsx)("img", { ...e, src: n, alt: r, className: E.connectedAccountVanityMetadataItemIcon }) }), (0, i.jsx)(l.Text, { variant: "text-xs/normal", color: "interactive-active", children: t })] }) } function C(e) { let { label: t, className: n } = e; return (0, i.jsx)(l.Text, { variant: "text-xs/semibold", color: "interactive-active", className: s()(E.connectedAccountVanityMetadata, E.connectedAccountVanityMetadataTag, n), children: t }) } }, 134433: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }), n("47120"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("866442"), o = n("442837"), l = n("692547"), u = n("481060"), d = n("607070"), _ = n("757698"), c = n("997624"); function E(e) { let t, { color: n, size: r, forcedIconColor: E, className: I, iconClassName: T } = e, [f, S] = (0, o.useStateFromStoresArray)([d.default], () => [d.default.desaturateUserColors, d.default.saturation]), h = (0, u.useToken)(l.default.unsafe_rawColors.PRIMARY_300).hex(), A = (0, a.hex2int)(null != n ? n : h), m = (0, a.int2hsl)(A, !1, f ? S : null); t = null != E ? E : .3 > (0, a.getDarkness)(A) ? l.default.unsafe_rawColors.PRIMARY_630.css : l.default.unsafe_rawColors.WHITE_500.css; let N = r / 8; return (0, i.jsx)("div", { style: { background: m, width: r, height: r, borderRadius: r, lineHeight: "".concat(r, "px") }, className: I, children: (0, i.jsx)(_.default, { color: t, className: s()(c.linkIcon, T), width: r - 2 * N, height: r - 2 * N, style: { margin: N } }) }) } }, 366030: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return V } }), n("536091"), n("47120"); var i = n("735250"), r = n("470079"), s = n("512722"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("442837"), d = n("692547"), _ = n("780384"), c = n("481060"), E = n("749210"), I = n("99690"), T = n("410030"), f = n("726542"), S = n("367907"), h = n("906732"), A = n("171368"), m = n("598077"), N = n("271383"), p = n("467679"), O = n("263704"), C = n("626135"), R = n("275759"), g = n("107484"), L = n("977392"), v = n("134433"), D = n("753194"), M = n("458034"), y = n("856651"), P = n("981631"), U = n("228168"), b = n("689938"), G = n("259383"); function w(e) { let t, { connectionType: n, connectionMetadataField: r, operator: s, value: a, description: o } = e; if (null != o) switch (s) { case y.OperatorTypes.LESS_THAN: t = b.default.Messages.CONNECTIONS_ROLE_RULE_GENERIC.format({ description: o, count: Math.max(0, Number(a) - 1) }); break; case y.OperatorTypes.GREATER_THAN: t = b.default.Messages.CONNECTIONS_ROLE_RULE_GENERIC.format({ description: o, count: Math.max(0, Number(a) + 1) }); break; default: t = o } else t = (0, R.getConnectionsCheckText)({ connectionType: n, connectionMetadataField: r, operator: s, value: a }); return null == t ? null : (0, i.jsxs)("div", { className: G.popoutCheck, children: [(0, i.jsx)(O.default, { className: G.popoutCheckIcon }), (0, i.jsx)(c.Text, { variant: "text-xs/medium", color: "header-primary", children: t })] }) } function k(e) { let { eligibilityStates: t } = e, n = (0, T.default)(), r = (0, c.useToken)(d.default.unsafe_rawColors.GREEN_330).hex(), s = l().groupBy(t, e => "".concat(e.connection_type).concat(null != e.application_id ? ":".concat(e.application_id) : "")); return (0, i.jsx)(i.Fragment, { children: Object.keys(s).map(e => { var t, o; let l; let u = s[e], d = u.filter(e => null != e.operator), E = u.find(e => null != e.application), T = f.default.get(e), S = null == E ? void 0 : E.application, h = (null == S ? void 0 : S.bot) != null ? new m.default(S.bot) : null; return R.officialApplicationIds.includes(null !== (t = null == S ? void 0 : S.id) && void 0 !== t ? t : "") ? l = (0, i.jsx)(D.default, { className: G.botTag, color: r, size: 16 }) : null != h && (l = (0, i.jsx)(p.default, { className: G.botTag, verified: h.isVerifiedBot() })), (0, i.jsxs)("div", { className: G.popoutChecksGroup, children: [(0, i.jsxs)("div", { className: G.popoutCheckGroupName, children: [null != T ? (0, i.jsx)("img", { src: (0, _.isThemeDark)(n) ? T.icon.darkSVG : T.icon.lightSVG, alt: "", className: G.popoutCheckGroupPlatformIcon }) : null, null != h ? (0, i.jsx)(I.default, { user: h, size: c.AvatarSizes.SIZE_20, className: G.popoutCheckGroupPlatformIcon }) : null, (0, i.jsx)(c.Text, { variant: "text-sm/medium", color: "interactive-active", children: null !== (o = null == T ? void 0 : T.name) && void 0 !== o ? o : null == S ? void 0 : S.name }), l] }), d.map(e => { let { connection_type: t, connection_metadata_field: n, operator: r, value: s, description: o } = e; return a()(null != n, "connectionMetadataField is null"), a()(null != r, "operator is null"), a()(null != s, "value is null"), (0, i.jsx)(w, { connectionType: t, connectionMetadataField: n, operator: r, value: s, description: o }, "".concat(t, ":").concat(n, ":").concat(r, ":").concat(s)) })] }, e) }) }) } function B(e) { let t, { onGetRolesClicked: n, onOpenProfile: s, eligibilityStates: a, userId: o, roleId: l, channelId: d, guildId: _ } = e; r.useEffect(() => { C.default.track(P.AnalyticEvents.PASSPORT_ROLE_POPOUT_VIEWED, { other_user_id: o, role_id: l, ...(0, S.collectChannelAnalyticsMetadataFromId)(d), ...(0, S.collectGuildAnalyticsMetadata)(_) }) }, [o, l, d, _]); let E = (0, u.useStateFromStores)([N.default], () => { var e, t; return null !== (t = null === (e = N.default.getSelfMember(_)) || void 0 === e ? void 0 : e.roles.includes(l)) && void 0 !== t && t }, [_, l]); return t = 1 === a.length && 1 === a[0].length ? b.default.Messages.CONNECTIONS_ROLE_POPOUT_HEADER_ONE : 1 === a.length ? b.default.Messages.CONNECTIONS_ROLE_POPOUT_HEADER_ALL.format() : b.default.Messages.CONNECTIONS_ROLE_POPOUT_HEADER_OR.format(), (0, i.jsxs)("div", { className: G.popout, children: [(0, i.jsx)("div", { className: G.popoutHeaderContainer, children: (0, i.jsx)(c.Text, { variant: "text-xs/normal", color: "text-normal", className: G.popoutHeaderText, children: t }) }), (0, i.jsx)("div", { className: G.popoutChecks, children: (0, i.jsx)(k, { eligibilityStates: a.flat() }) }), (0, i.jsxs)("div", { className: G.buttonContainer, children: [E ? null : (0, i.jsx)(c.Button, { className: G.getRolesButton, onClick: n, children: b.default.Messages.CONNECTIONS_ROLE_POPOUT_GET_ROLES }), (0, i.jsx)(c.Button, { className: G.viewConnectionsButton, color: c.Button.Colors.PRIMARY, onClick: s, children: b.default.Messages.CONNECTIONS_ROLE_POPOUT_VIEW_CONNECTIONS })] })] }) } function V(e) { let { userId: t, messageId: n, guild: s, channel: o } = e, { analyticsLocations: l } = (0, h.default)(), d = (0, L.default)(s, t, o.id, !0), _ = (0, u.useStateFromStores)([g.default], () => g.default.getGuildRoleConnectionEligibility(null == d ? void 0 : d.id)), [I, T] = r.useState(null == _); if (null == d) return null; async function f() { a()(null != d, "visibleConnectionsRole is null"), I && null == _ && (await E.default.fetchGuildRoleConnectionsEligibility(s.id, d.id), T(!1)) } return (0, i.jsx)(c.LazyPopout, { onRequestOpen: f, renderPopout: function() { return Promise.resolve(e => { let { closePopout: r } = e; return null == _ ? (0, i.jsx)(i.Fragment, {}) : (a()(null != d, "visibleConnectionsRole is null"), (0, i.jsx)(B, { eligibilityStates: _, userId: t, roleId: d.id, channelId: o.id, guildId: s.id, onGetRolesClicked: () => { (0, M.openGuildRoleConnectionsModal)(s.id) }, onOpenProfile: () => { (0, A.openUserProfileModal)({ userId: t, messageId: n, guildId: s.id, channelId: o.id, roleId: d.id, section: U.UserProfileSections.USER_INFO_CONNECTIONS, sourceAnalyticsLocations: l, analyticsLocation: { section: P.AnalyticsSections.CHANNEL } }), r() } })) }) }, align: "top", nudgeAlignIntoViewport: !0, children: e => (0, i.jsx)(c.Tooltip, { text: b.default.Messages.CONNECTIONS_ROLE_POPOUT_CLICK_TO_VIEW, children: t => (0, i.jsxs)("div", { className: G.badge, ...t, ...e, children: [(0, i.jsx)(v.default, { className: G.badgeVerifiedIcon, size: 16, color: d.colorString }), (0, i.jsx)(c.Text, { variant: "text-xs/bold", color: "header-primary", className: G.roleName, children: d.name })] }) }) }) } }, 753194: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i = n("735250"); n("470079"); var r = n("866442"), s = n("442837"), a = n("692547"), o = n("481060"), l = n("607070"), u = n("797717"), d = n("507957"), _ = n("689938"); function c(e) { let t, { color: n, size: c, forcedIconColor: E, className: I, iconClassName: T, tooltipText: f } = e, [S, h] = (0, s.useStateFromStoresArray)([l.default], () => [l.default.desaturateUserColors, l.default.saturation]), A = (0, o.useToken)(a.default.unsafe_rawColors.PRIMARY_300).hex(), m = (0, r.hex2int)(null != n ? n : A), N = (0, r.int2hsl)(m, !1, S ? h : null); return t = null != E ? E : .3 > (0, r.getDarkness)(m) ? a.default.unsafe_rawColors.PRIMARY_630.css : a.default.unsafe_rawColors.WHITE_500.css, (0, i.jsx)(o.Tooltip, { text: null != f ? f : _.default.Messages.CONNECTIONS_ROLE_OFFICIAL_ICON_TOOLTIP, children: e => (0, i.jsx)(u.default, { ...e, className: I, color: N, size: c, children: (0, i.jsx)(d.default, { color: t, height: c, width: c, className: T }) }) }) } }, 202120: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openProviderAuthorize: function() { return o } }); var i = n("457330"), r = n("358085"), s = n("856651"), a = n("981631"); async function o(e) { let { location: t, twoWayLinkType: n, successRedirect: o } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, l = arguments.length > 2 ? arguments[2] : void 0, u = Math.round(screen.width / 2 - 350), d = screen.height > 640 ? Math.round(screen.height / 2 - 320) : 0, _ = null; !(0, r.isDesktop)() && (_ = window.open("".concat(window.location.protocol, "//").concat(window.location.host).concat(a.Routes.CONNECTIONS(e), "?loading=true"), "authorize", "scrollbars=yes,resizable=yes,toolbar=no,location=yes,top=".concat(d, ",left=").concat(u, ",width=").concat(700, ",height=").concat(640))); let c = l; if (null == c && e !== s.GUILD_ROLE_CONNECTION_APPLICATION_CONNECTION_TYPE) { let { body: r } = await i.default.authorize(e, { location: t, twoWayLinkType: n, successRedirect: o }); c = r.url } if (null != c) return null != _ ? _.location.href = c : window.open(c), c } }, 458034: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MODAL_KEY: function() { return d }, default: function() { return c }, openGuildRoleConnectionsModal: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("430824"), o = n("757698"), l = n("275759"), u = n("689938"); let d = "guild-connection-roles"; function _(e) { (0, s.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("40897")]).then(n.bind(n, "507294")); return n => (0, i.jsx)(t, { ...n, guildId: e }) }, { modalKey: d, contextKey: s.DEFAULT_MODAL_CONTEXT, onCloseRequest: () => { (0, s.closeModal)(d, s.DEFAULT_MODAL_CONTEXT) } }) } function c(e) { return (0, r.useStateFromStores)([a.default], () => (0, l.isVerifiedRolesChannelVisible)(e, a.default.getRoles(e.id)), [e]) ? (0, i.jsx)(s.MenuItem, { id: "guild-connection-roles", label: u.default.Messages.CONNECTIONS_ROLES_CHANNEL_NAME, icon: o.default, action: () => _(e.id) }) : null } }, 206583: function(e, t, n) { "use strict"; var i, r, s, a, o; n.r(t), n.d(t, { ContentInventoryFeedKey: function() { return i }, ContentInventoryInteractionTypes: function() { return s }, ContentInventorySurfaceTypes: function() { return r } }), (i || (i = {})).GLOBAL_FEED = "global feed", (a = r || (r = {}))[a.GUILD_MEMBER_LIST = 1] = "GUILD_MEMBER_LIST", (o = s || (s = {}))[o.CARD_HOVER = 1] = "CARD_HOVER", o[o.CARD_CLICK = 2] = "CARD_CLICK", o[o.REACTION_EMOJI_REACT_SENT = 3] = "REACTION_EMOJI_REACT_SENT", o[o.DM_REACTION_MESSAGE_SENT = 4] = "DM_REACTION_MESSAGE_SENT", o[o.CHANNEL_REACTION_MESSAGE_SENT = 5] = "CHANNEL_REACTION_MESSAGE_SENT", o[o.VOICE_CHANNEL_JOINED = 6] = "VOICE_CHANNEL_JOINED", o[o.VOICE_CHANNEL_PREVIEWED = 7] = "VOICE_CHANNEL_PREVIEWED" }, 162461: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForContentInventoryV1: function() { return a }, isEligibleForImpressionCapping: function() { return o }, isEligibleForListenedMediaInventory: function() { return E }, useIsEligibleForRichPresenceInventory: function() { return T }, useIsEligibleForTopArtistInventory: function() { return _ } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2024-03_content_inventory_memberlist_and_ranker", label: "Enables the memberlist content feed", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Recency", config: { enabled: !0 } }, { id: 2, label: "Heuristic", config: { enabled: !0 } }, { id: 3, label: "Noteworthy", config: { enabled: !0, impressionCappingEnabled: !0 } }, { id: 4, label: "Another Heuristic treatment for comparison ranking", config: { enabled: !0 } }] }), s = (0, i.createExperiment)({ kind: "user", id: "2024-03_content_inventory_ranker_client_dummy", label: "Tracks exposure for which ranker bucket the user is in. This is here to test an exposure bug", defaultConfig: {}, treatments: [{ id: 1, label: "Heuristic", config: {} }] }); function a(e) { u.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }), l.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); let { enabled: t } = r.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); return t && s.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }), t } function o(e) { let { impressionCappingEnabled: t } = r.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); return !0 === t }(0, i.createExperiment)({ kind: "user", id: "2024-03_content_inventory_surface_holdout", label: "Content Inventory Surface Holdout", defaultConfig: {}, treatments: [] }); let l = (0, i.createExperiment)({ kind: "user", id: "2024-03_holdout_bug_main_wrong_way", label: "Holdout Bug Experiment Wrong Way (pls ignore)", defaultConfig: {}, treatments: [{ id: 1, label: "Treament", config: {} }] }), u = (0, i.createExperiment)({ kind: "user", id: "2024-03_holdout_bug_main_right_way", label: "Holdout Bug Experiment Right Way (pls ignore)", defaultConfig: {}, treatments: [{ id: 1, label: "Treament", config: {} }] }), d = (0, i.createExperiment)({ kind: "user", id: "2024-05_content_inventory_top_artist_cards", label: "Content Inventory: TOP_ARTIST cards", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function _(e) { let { enabled: t } = d.useExperiment({ location: e }, { autoTrackExposure: !0 }); return t } let c = (0, i.createExperiment)({ kind: "user", id: "2024-04_content_inventory_listened_media", label: "Content Inventory: LISTENED_MEDIA", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function E(e) { let { enabled: t } = c.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); return t } let I = (0, i.createExperiment)({ kind: "user", id: "2024-05_content_inventory_games_rich_presence", label: "Content Inventory: Rich Presence for Games", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function T(e) { let { enabled: t } = I.useExperiment({ location: e }, { autoTrackExposure: !0 }); return t } }, 564990: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMyContentInventory: function() { return a }, postTrackToContentInventory: function() { return o } }); var i = n("544891"), r = n("881052"), s = n("981631"); let a = async () => { try { let e = (await i.HTTP.get({ url: s.Endpoints.MY_CONTENT_INVENTORY })).body, t = e.wait_ms_until_next_fetch; if (null != t) { let n = new Date(Date.now() + t); e.expired_at = n.toISOString() } return e } catch (e) { throw new r.APIError(e) } }; async function o(e, t) { try { await i.HTTP.post({ url: s.Endpoints.MY_SPOTIFY_CONTENT_INVENTORY, body: { connection_id: e, tracks: [t] } }) } catch (e) { throw new r.APIError(e) } } }, 342879: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("392711"), r = n("570140"), s = n("147913"), a = n("38618"), o = n("517100"), l = n("451478"), u = n("162461"), d = n("564990"), _ = n("146282"), c = n("206583"); let E = c.ContentInventoryFeedKey.GLOBAL_FEED, I = null, T = !1, f = 0, S = null, h = (0, i.debounce)(d.postTrackToContentInventory, 3e3, { trailing: !0 }); function A(e) { r.default.dispatch({ type: "CONTENT_INVENTORY_SET_FEED_STATE", feedId: E, state: e }) } function m() { p() } function N() { if (!(0, u.isEligibleForContentInventoryV1)("ContentInventoryManager") || T || _.default.hidden || !l.default.isFocused() || !a.default.isConnected()) return !1; let e = o.default.getIdleSince(); return !(null != e && Date.now() - e > 9e5) && !0 } function p() { A({ loading: !1 }), clearTimeout(I), I = null } function O() { if (p(), !N()) return; let e = _.default.getFeed(E); if ((null == e ? void 0 : e.refresh_stale_inbox_after_ms) != null && null == S) return; let t = null != S ? S : null == e ? void 0 : e.expired_at, n = null == t ? 0 : new Date(t).getTime() - Date.now(); A({ loading: !1, nextFetchDate: new Date(Date.now() + n) }), I = setTimeout(() => C(), Math.max(0, n)) } async function C() { let { force: e = !1 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; if (N() || e) try { T = !0, A({ loading: !0 }); let e = await (0, d.getMyContentInventory)(); r.default.dispatch({ type: "CONTENT_INVENTORY_SET_FEED", feedId: E, feed: e }), f = 0, T = !1, A({ loading: !1 }), S = null, O() } catch (e) { f < 3 ? (I = setTimeout(() => C(), 1e3 * Math.pow(5, f)), f += 1) : r.default.dispatch({ type: "CONTENT_INVENTORY_CLEAR_FEED", feedId: E }), T = !1 } } function R() { O() } function g() { p(), C({ force: !0 }) } function L(e) { let { refreshAfterMs: t } = e, n = _.default.getFeed(E); if ((null == n ? void 0 : n.refresh_stale_inbox_after_ms) != null) S = new Date(Date.now() + (null != t ? t : n.refresh_stale_inbox_after_ms)).toUTCString(), O() } function v(e) { let { connectionId: t, track: n } = e; if (null != t)(0, u.isEligibleForListenedMediaInventory)("ContentInventoryManager.handleSpotifyNewTrack") && h(t, n) } class D extends s.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: R, CONNECTION_CLOSED: m, WINDOW_FOCUS: R, IDLE: R, CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN: R, CONTENT_INVENTORY_MANUAL_REFRESH: g, CONTENT_INVENTORY_INBOX_STALE: L, SPOTIFY_NEW_TRACK: v }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new D }, 146282: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"); var s, a, o, l, u = n("442837"), d = n("570140"); let _ = new Map, c = new Map, E = !1, I = !1; function T(e) { e(_), _ = new Map(_) } class f extends(s = u.default.Store) { getFeeds() { return _ } getFeed(e) { return _.get(e) } getFeedState(e) { return c.get(e) } getLastFeedFetchDate() { return i } getFilters() { return r } getFeedRequestId(e) { var t; return null === (t = this.getFeed(e)) || void 0 === t ? void 0 : t.request_id } getDebugImpressionCappingDisabled() { return I } get hidden() { return E } } l = "ContentInventoryStore", (o = "displayName") in(a = f) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new f(d.default, { CONNECTION_OPEN: function() { _ = new Map, E = !1 }, CONTENT_INVENTORY_SET_FEED: function(e) { let { feedId: t, feed: n } = e; T(e => e.set(t, n)), i = new Date }, CONTENT_INVENTORY_SET_FEED_STATE: function(e) { let { feedId: t, state: n } = e; c.set(t, n) }, CONTENT_INVENTORY_SET_FILTERS: function(e) { let { filters: t } = e; r = t }, CONTENT_INVENTORY_CLEAR_FEED: function(e) { let { feedId: t } = e; if (!_.has(t)) return !1; T(e => e.delete(t)) }, CONTENT_INVENTORY_TOGGLE_FEED_HIDDEN: function() { E = !E }, CONTENT_INVENTORY_DEBUG_TOGGLE_IMPRESSION_CAPPING: function() { I = !I } }) }, 454293: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setApplicationSharing: function() { return s } }); var i = n("960048"), r = n("536150"); async function s(e, t) { try { await (0, r.patchContentInventoryApplication)(e, { is_sharing: t }) } catch (e) { i.default.captureException(e) } } }, 536150: function(e, t, n) { "use strict"; n.r(t), n.d(t, { patchContentInventoryApplication: function() { return a } }); var i = n("544891"), r = n("881052"), s = n("981631"); async function a(e, t) { try { await i.HTTP.patch({ url: s.Endpoints.MY_CONTENT_INVENTORY_APPLICATION(e), body: t }) } catch (e) { throw new r.APIError(e) } } }, 611184: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("594190"), s = n("77498"), a = n("454293"); function o(e) { var t, n; let { game: i } = e, o = r.default.isDetectionEnabled(i), l = null !== (n = i.id) && void 0 !== n ? n : null === (t = s.default.getGameByName(i.name)) || void 0 === t ? void 0 : t.id; null != l && (0, a.setApplicationSharing)(l, o) } class l extends i.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { RUNNING_GAME_TOGGLE_DETECTION: o, RUNNING_GAME_DELETE_ENTRY: o }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new l }, 663993: function(e, t, n) { "use strict"; n.r(t); var i = n("608787"), r = n("931619"); n.es(i, t), (0, i.setAwaitOnline)(r.default.awaitOnline) }, 570220: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EventEmitterProvider: function() { return o } }), n("411104"); var i = n("470079"), r = n("836560"); class s extends r.EventEmitter { on() { return this } once() { return this } addListener() { return this } removeListener() { return this } emit() { return !1 } } let a = i.createContext(new s), { Provider: o, Consumer: l } = a; t.default = a }, 597952: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("358085"); function r() { let e = ""; return (0, i.isWindows)() ? e = "platform-win" : (0, i.isMac)() ? e = "platform-osx" : (0, i.isLinux)() ? e = "platform-linux" : (0, i.isWeb)() && (e = "platform-web"), __OVERLAY__ ? "".concat(e, " platform-overlay") : e } }, 823453: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("470716"), l = n("613828"), u = n("873546"), d = n("442837"), _ = n("316792"), c = n("481060"), E = n("607070"), I = n("168551"), T = n("19759"), f = n("706454"), S = n("210887"), h = n("451478"), A = n("792125"), m = n("597952"), N = n("252618"), p = n("587061"), O = n("392358"), C = n("981631"); n("799623"); let R = new Set([C.Routes.LOGIN, C.Routes.REGISTER]); t.default = r.memo(function(e) { let { children: t, skipsSettingDefaultPageTitle: s } = e; (0, N.usePageTitleManager)({ skipsSettingDefaultPageTitle: s }); let { clientThemesClassName: C, clientThemesCSS: g } = (0, I.default)(), L = r.createElement("style", { [I.CLIENT_THEMES_DATA_ATTRIBUTE]: !0 }, g); return (0, i.jsxs)(o.Helmet, { children: [function(e) { let { locale: t, theme: n } = (0, d.useStateFromStoresObject)([S.default, f.default], () => ({ locale: f.default.locale, theme: S.default.theme })), s = (0, d.useStateFromStores)([h.default], () => h.default.isFocused(), []), { reducedMotion: o, alwaysShowLinkDecorations: _ } = r.useContext(c.AccessibilityPreferencesContext), { fontScale: I, fontScaleClass: N, keyboardModeEnabled: C, saturation: g, desaturateUserColors: L, useForcedColors: v, systemForcedColors: D } = (0, d.useStateFromStoresObject)([E.default], () => { let { fontScale: e, fontScaleClass: t, keyboardModeEnabled: n, saturation: i, desaturateUserColors: r, useForcedColors: s, systemForcedColors: a } = E.default; return { fontScale: e, fontScaleClass: t, keyboardModeEnabled: n, saturation: i, desaturateUserColors: r, useForcedColors: s, systemForcedColors: a } }), M = (0, l.useLocation)(), y = r.useMemo(() => R.has(M.pathname), [M.pathname]); (0, p.default)(window, y); let P = (0, O.default)(window, __OVERLAY__ || s), U = (0, d.useStateFromStores)([T.default], () => T.default.sidebarWidth), b = (0, c.useRedesignIconContext)().enabled, G = window.CSS.supports("selector(::-webkit-scrollbar)"); return (0, i.jsx)("html", { lang: t, style: "font-size: ".concat(I, "%; --saturation-factor: ").concat(g, "; --devtools-sidebar-width: ").concat(U, "px;"), className: a()(e, { overlay: __OVERLAY__, "mouse-mode": P, "keyboard-mode": C, "reduce-motion": o.enabled, "full-motion": !o.enabled, "is-mobile": u.isMobile, "app-focused": s, "low-saturation": g <= c.LOW_SATURATION_THRESHOLD, "decorate-links": _, "desaturate-user-colors": L, "disable-forced-colors": !v && "active" === D, "enable-forced-colors": v, "show-redesigned-icons": b, "no-webkit-scrollbar": !G, "has-webkit-scrollbar": G }, (0, A.getThemeClass)(n), (0, m.default)(), N) }) }(C), function() { let [e, t] = r.useState([]); return r.useEffect(() => { Promise.all(_.fontsToPreload.map(e => n("867444")("@discordapp/tokens/typography/generated/gg-sans/".concat(e, ".woff2").replace("@discordapp/tokens/typography/generated/gg-sans/", "./")).then(e => { let { default: t } = e; return t }))).then(e => t(e)) }, []), (0, i.jsx)(i.Fragment, { children: e.map((e, t) => (0, i.jsx)("link", { rel: "preload", href: e, as: "font", type: "font/woff2", crossOrigin: "true" }, t)) }) }(), L, t] }) }) }, 329816: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("802498"), l = n("266067"), u = n("613828"), d = n("873546"), _ = n("442837"), c = n("524437"), E = n("335854"), I = n("481060"), T = n("570140"), f = n("721037"), S = n("490173"), h = n("114250"), A = n("315263"), m = n("40851"), N = n("607070"), p = n("545006"), O = n("213609"), C = n("613413"), R = n("327943"), g = n("907459"), L = n("559407"), v = n("556766"), D = n("514361"), M = n("724145"), y = n("260035"), P = n("947519"), U = n("243778"), b = n("813744"), G = n("904085"), w = n("892254"), k = n("210887"), B = n("819640"), V = n("594174"), x = n("451478"), F = n("672752"), H = n("812663"), Y = n("153850"), j = n("725568"), W = n("78415"), K = n("806519"), z = n("358085"), Z = n("74538"), X = n("663993"), Q = n("823453"), q = n("628123"), J = n("962745"), $ = n("151851"), ee = n("981631"), et = n("921944"), en = n("776954"); n("792295"), Promise.resolve().then(n.bind(n, "62883")).then(e => { z.isPlatformEmbedded ? window.addEventListener("contextmenu", e.contextMenuCallbackNative, !1) : window.addEventListener("contextmenu", e.contextMenuCallbackWeb, !1) }), (0, E.setDesignConfig)({ getDefaultLinkInterceptor: A.default }), (0, X.makeLazy)({ createPromise: () => Promise.all([n.e("99387"), n.e("40326"), n.e("80451"), n.e("30634"), n.e("54343")]).then(n.bind(n, "849493")), webpackId: "849493" }), (0, X.makeLazy)({ createPromise: () => Promise.all([n.e("40326"), n.e("80451"), n.e("30634"), n.e("81811")]).then(n.bind(n, "80753")), webpackId: "80753" }); let ei = (0, X.makeLazy)({ createPromise: () => Promise.all([n.e("99387"), n.e("46369")]).then(n.bind(n, "177741")), webpackId: "177741" }), er = r.memo(function(e) { let t = (0, _.useStateFromStores)([x.default], () => x.default.isFocused()); return (0, i.jsx)($.default, { ...e, focused: t }) }); t.default = function(e) { let { children: t, skipsSettingDefaultPageTitle: n } = e, { pathname: s } = (0, u.useLocation)(), E = (0, z.getPlatform)(), A = d.isMobile || d.isTablet, x = (0, _.useStateFromStores)([k.default], () => k.default.darkSidebar ? ee.ThemeTypes.DARK : void 0), X = (0, _.useStateFromStores)([N.default], () => N.default.useForcedColors ? "yes" : "no"), [$, es] = (0, _.useStateFromStoresArray)([D.default], () => [D.default.isEditorOpen, D.default.isCoachmark]), ea = (0, _.useStateFromStores)([R.default], () => R.default.isEditorOpen), { enabled: eo } = G.default.useExperiment({ location: "client_themes_coachmark_reintro" }, { autoTrackExposure: !0 }), el = (0, _.useStateFromStores)([B.default], () => B.default.getLayers().includes(ee.Layers.USER_SETTINGS)), eu = (0, _.useStateFromStores)([V.default], () => Z.default.canUseClientThemes(V.default.getCurrentUser())), ed = $ && !el, e_ = []; ed && es && eo && !eu && e_.push(c.DismissibleContent.CLIENT_THEMES_COACHMARK); let [ec, eE] = (0, U.useSelectedDismissibleContent)(e_, et.DismissibleContentGroupName.SIDEBAR, !0); e_.push(c.DismissibleContent.DEKSTOP_CUSTOM_APP_ICON_COACHMARK); let eI = ec === c.DismissibleContent.DEKSTOP_CUSTOM_APP_ICON_COACHMARK, eT = ec === c.DismissibleContent.CLIENT_THEMES_COACHMARK; r.useEffect(() => { null == (0, l.matchPath)(s, { path: "invite", exact: !1, strict: !1 }) && eI && !eT && (T.default.dispatch({ type: "APP_ICON_EDITOR_OPEN" }), T.default.dispatch({ type: "APP_ICON_TRACK_IMPRESSION", markAsDismissed: eE })) }, [eI, eT, eE, s]); let ef = r.useRef(document.body); return (0, i.jsx)(w.default, { children: (0, i.jsx)(p.default, { children: (0, i.jsxs)(I.RedesignIconContextProvider, { children: [(0, i.jsx)(Q.default, { skipsSettingDefaultPageTitle: n }), (0, i.jsx)(J.default, { children: (0, i.jsx)(q.default, { children: (0, i.jsxs)(I.FocusRingScope, { containerRef: ef, children: [(0, i.jsx)(K.MaskLibrary, {}), (0, i.jsx)(F.default, {}), (0, i.jsx)(o.FocusGuard, {}), null != E ? (0, i.jsx)(er, { type: E, themeOverride: x }) : null, (0, i.jsx)(m.AppWindowContextProvider, { appContext: ee.AppContext.APP, renderWindow: window, children: (0, i.jsxs)(Y.AppLayerProvider, { children: [(0, i.jsxs)("div", { className: a()(en.appAsidePanelWrapper, A && en.mobileAppAsidePanelWrapper, { [en.allowsScrolling]: (() => { let e = (0, l.matchPath)(s, { path: ee.Routes.APPLICATION_DIRECTORY, exact: !1, strict: !1 }); return (!!d.isMobile || !!d.isTablet) && null != e || !1 })() }), children: [(0, i.jsx)("div", { className: en.notAppAsidePanel, "data-app-not-dev-tools": !0, children: (0, i.jsx)(y.CommonConfettiCannonContextProvider, { children: (0, i.jsx)(W.VerificationLayerProvider, { children: (0, i.jsxs)(H.default.Provider, { value: O.default, children: [(0, i.jsx)("div", { className: a()(A ? en.mobileApp : en.app), children: t }), (0, i.jsx)(L.default, {}), (0, i.jsx)(S.default, {}), (0, i.jsx)(I.Modals, {}), (0, i.jsx)(h.default, {}), (0, i.jsx)(j.FullScreenLayers, {}), (0, i.jsx)(Y.AppLayerContainer, {}), (0, i.jsx)(W.VerificationLayerContainer, {}), (0, i.jsx)(I.ToastContainer, {}), (0, i.jsx)(C.default, {}), (0, i.jsx)(b.default, {}), (0, i.jsx)(ei, {})] }) }) }) }), (0, i.jsx)(v.default, {}), (0, i.jsx)(f.default, {}), ed && !es || eT ? (0, i.jsx)(M.default, { markAsDismissed: eE }) : null, !ea || el || eT ? null : (0, i.jsx)(g.default, { isCoachmark: eI, markAsDismissed: eE }), (0, i.jsx)(P.default, { mobile: A })] }), !1] }) }), (0, i.jsx)(o.FocusGuard, {})] }) }) })] }) }) }, X) } }, 628123: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("392711"), a = n.n(s), o = n("818405"), l = n("587158"), u = n("286379"), d = n("442837"), _ = n("481060"), c = n("386506"), E = n("304761"), I = n("865427"), T = n("25779"), f = n("797614"), S = n("703656"), h = n("586576"), A = n("626135"), m = n("960048"), N = n("998502"), p = n("981631"), O = n("689938"), C = n("242414"); function R(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function g() { let [e, t] = r.useState(!1); if (null == (0, d.useStateFromStores)([E.default], () => { var e; return (0, I.probablyHasBuildOverride)() ? null === (e = E.default.getCurrentBuildOverride().overrides) || void 0 === e ? void 0 : e.discord_web : null })) return null; let n = async () => { try { t(!0), await (0, c.clearBuildOverride)(), window.location.reload(!0) } catch (e) { t(!1) } }; return (0, i.jsx)(_.Button, { size: _.ButtonSizes.LARGE, onClick: n, submitting: e, className: C.clearOverrideButton, children: O.default.Messages.CLEAR_BUILD_OVERRIDE }) } let L = a().throttle(e => { f.default.increment({ name: u.MetricEvents.APP_CRASHED, tags: ["reason:".concat(o.AppCrashedReasons.UNHANDLED_JS_ERROR), "level:".concat(l.ErrorLevels.FATAL), "modded_client:".concat(e)] }, !0) }, 100, { trailing: !1 }); class v extends r.PureComponent { componentDidCatch(e, t) { this.triggerSoftCrash(e, t) } triggerSoftCrash(e, t) { let n = (0, S.getHistory)().location; this.setState({ error: e, info: t }); let i = (0, T.usesClientMods)(), r = m.default.captureCrash(e, { extra: t }); A.default.track(p.AnalyticEvents.APP_CRASHED, { path: n.pathname, extra: t, error_message: e.message, error_stack: e.stack, sentry_issue_id: r, uses_client_mods: i }), L(i), N.default.cleanupDisplaySleep() } _handleSubmitReport() { location.reload(!0) } componentDidMount() { null == window.DiscordErrors && (window.DiscordErrors = { softCrash: e => { this.triggerSoftCrash(e) } }, this.discordErrorsSet = !0) } componentWillUnmount() { this.discordErrorsSet && (window.DiscordErrors = null, this.discordErrorsSet = !1) } render() { let { children: e, renderCustomMessage: t } = this.props; if (null !== this.state.error) { let e = (0, i.jsxs)("div", { children: [(0, i.jsx)("p", { children: O.default.Messages.ERRORS_UNEXPECTED_CRASH }), (0, i.jsx)("p", { children: O.default.Messages.ERRORS_ACTION_TO_TAKE })] }), n = (0, i.jsxs)("div", { className: C.buttons, children: [(0, i.jsx)(_.Button, { size: _.ButtonSizes.LARGE, onClick: this._handleSubmitReport, children: O.default.Messages.ERRORS_RELOAD }), (0, i.jsx)(g, {})] }); return (0, i.jsx)(h.default, { title: O.default.Messages.UNSUPPORTED_BROWSER_TITLE, note: null != t ? t() : e, action: n, className: C.errorPage }) } return e } constructor(...e) { super(...e), R(this, "state", { error: null, info: null }), R(this, "discordErrorsSet", !1) } } t.default = v }, 962745: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("209185"), o = n("706454"), l = n("229588"), u = n("586576"), d = n("689938"), _ = n("997042"); function c(e) { let { locale: t, children: n } = e, [r, a] = (0, s.useStateFromStoresArray)([l.default], () => [l.default.isLoading(), l.default.getError()]); return null != a ? (0, i.jsx)(u.default, { title: d.default.Messages.I18N_LOCALE_LOADING_ERROR.format({ locale: t }), note: (0, i.jsx)("span", { children: a.message }) }) : r ? __OVERLAY__ ? null : (0, i.jsx)("div", { className: _.loading }) : n } class E extends r.Component { render() { let { locale: e, children: t } = this.props; return (0, i.jsx)(c, { locale: e, children: t }) } constructor(e) { super(e), a.updateLocaleLoadingStatus(e.locale, !0) } } t.default = s.default.connectStores([o.default], () => ({ locale: o.default.locale }))(E) }, 252618: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AppPageTitle: function() { return E }, flashPageTitle: function() { return d }, setPageTitleNotificationCount: function() { return u }, usePageTitle: function() { return c }, usePageTitleManager: function() { return I } }), n("47120"); var i = n("470079"), r = n("652874"); let s = { base: n("358085").isPlatformEmbedded ? void 0 : "Discord" }, a = 0, o = { count: 3, onlyWhenBlurred: !1, interval: 1e3 }, l = (0, r.default)(() => ({ titles: [s], notificationCount: void 0, flashQueue: [] })); function u(e) { l.setState({ notificationCount: e }) } function d(e) { let t = { ...o, ...e, id: a++ }; return t.count = Math.max(t.count, t.messages.length), l.setState(e => ({ flashQueue: [...e.flashQueue, t] })), () => _(t.id) } function _(e) { l.setState(t => ({ flashQueue: t.flashQueue.filter(t => t.id !== e) })) } function c(e) { i.useEffect(() => { var t; return t = e, l.setState(e => ({ titles: [t, ...e.titles] })), () => { l.setState(e => ({ titles: e.titles.filter(e => e !== t) })) } }, [...Object.values(e)]) } function E(e) { return c(e), null } function I() { let { skipsSettingDefaultPageTitle: e } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; i.useEffect(() => { function e() { l.setState({ flashQueue: [] }) } return document.addEventListener("focusin", e, { capture: !0 }), () => document.removeEventListener("focusin", e, { capture: !0 }) }, []); let t = function() { let [e, t] = l(e => { let { flashQueue: t } = e, n = (function(e) { let t, n, i; for (let r of e.titles) { if (null != t && null != n) break; t = null != t ? t : r.base, n = null != n ? n : r.location, i = null != i ? i : r.subsection } return [t, i, n] })(e).filter(e => null != e).join(" | "), i = function(e) { let { notificationCount: t } = e; return null == t || 0 === t ? "" : t < 0 ? "• " : "(".concat(t, ") ") }(e); return ["".concat(i).concat(n), t[0]] }), [n, r] = i.useState(!1), s = i.useRef(0), a = null == t ? void 0 : t.messages[s.current % t.messages.length]; return i.useEffect(() => { if (null == t) { s.current = 0, r(!1); return } if (document.hasFocus() && t.onlyWhenBlurred) { _(t.id), r(!1); return } let e = setInterval(() => { if (s.current >= t.count) { _(t.id), r(!1); return } r(e => !e || (s.current += 1, !1)) }, t.interval); return () => clearInterval(e) }, [t]), n ? a : e }(); i.useEffect(() => { let n = t === s.base; (!e || !n) && (document.title = t) }, [e, t]) } }, 151851: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return D } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("350810"), u = n("579806"), d = n("40851"), _ = n("358221"), c = n("754347"), E = n("428548"), I = n("718759"), T = n("679219"), f = n("835225"), S = n("939039"), h = n("117795"), A = n("358085"), m = n("792125"), N = n("998502"), p = n("689938"), O = n("577944"); let C = e => N.default.close(e), R = e => N.default.minimize(e), g = (e, t) => { (0, A.isMac)() && !t.altKey ? N.default.fullscreen(e) : N.default.maximize(e) }, L = e => { let { windowKey: t, themeOverride: n, hasOpenLayer: r } = e; return (0, i.jsxs)("div", { className: s()(O.typeWindows, (0, m.getThemeClass)(n), { [O.withBackgroundOverride]: !r }), children: [(0, i.jsx)("div", { className: O.wordmarkWindows, children: (0, i.jsx)(c.default, {}) }), (0, i.jsx)(o.Clickable, { className: O.winButtonClose, onClick: () => C(t), "aria-label": p.default.Messages.TITLE_BAR_CLOSE_WINDOW, tabIndex: -1, children: (0, i.jsx)(E.default, {}) }), (0, i.jsx)(o.Clickable, { className: O.winButtonMinMax, onClick: e => g(t, e), "aria-label": p.default.Messages.TITLE_BAR_MAXIMIZE_WINDOW, tabIndex: -1, children: (0, i.jsx)(T.default, {}) }), (0, i.jsx)(o.Clickable, { className: O.winButtonMinMax, onClick: () => R(t), "aria-label": p.default.Messages.TITLE_BAR_MINIMIZE_WINDOW, tabIndex: -1, children: (0, i.jsx)(S.default, {}) })] }) }, v = e => { let { focused: t, windowKey: n, frame: r, themeOverride: a, hasOpenLayer: l } = e; return (0, i.jsxs)(o.Clickable, { className: s()(r ? O.typeMacOSWithFrame : O.typeMacOS, t ? O.focused : O.unfocused, (0, m.getThemeClass)(a), { [O.withBackgroundOverride]: !l }), onDoubleClick: () => N.default.maximize(n), tabIndex: -1, children: [u.default.window.USE_OSX_NATIVE_TRAFFIC_LIGHTS ? (0, i.jsx)("div", { className: O.macDragRegion }) : (0, i.jsxs)("div", { className: O.macButtons, children: [(0, i.jsx)(o.Clickable, { className: O.macButtonClose, onClick: () => C(n), "aria-label": p.default.Messages.TITLE_BAR_CLOSE_WINDOW, tabIndex: -1, children: (0, i.jsx)(I.default, { color: "#4c0000" }) }), (0, i.jsx)(o.Clickable, { className: O.macButtonMinimize, onClick: () => R(n), "aria-label": p.default.Messages.TITLE_BAR_MINIMIZE_WINDOW, tabIndex: -1, children: (0, i.jsx)(h.default, { color: "#975500" }) }), (0, i.jsx)(o.Clickable, { className: O.macButtonMaximize, onClick: e => g(n, e), "aria-label": p.default.Messages.TITLE_BAR_FULLSCREEN_WINDOW, tabIndex: -1, children: (0, i.jsx)(f.default, { color: "#006500" }) })] }), r ? (0, i.jsx)("div", { className: O.wordmarkMacOS, children: (0, i.jsx)(c.default, { color: "#ffffff" }) }) : null] }) }; function D(e) { let { focused: t, type: n, windowKey: r, macOSFrame: s = !1, themeOverride: o } = e, u = (0, d.useAppContext)(), c = (0, a.useStateFromStores)([_.default], () => _.default.isFullscreenInContext(u)), E = (0, l.default)(); if (c) return null; switch (n) { case A.PlatformTypes.WINDOWS: return (0, i.jsx)(L, { windowKey: r, themeOverride: o, hasOpenLayer: E }); case A.PlatformTypes.OSX: return (0, i.jsx)(v, { focused: t, windowKey: r, frame: s, themeOverride: o, hasOpenLayer: E }); default: return null } } }, 587061: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"), r = n("442837"), s = n("952265"), a = n("481060"), o = n("714338"), l = n("857595"), u = n("607070"), d = n("627845"), _ = n("556296"), c = n("5967"), E = n("13140"), I = n("981631"), T = n("420212"); function f(e) { let t = e.ctrlKey || e.altKey || e.metaKey; e.key === T.KeyboardEventKey.Tab && !t && !__OVERLAY__ && !(0, s.hasAnyModalOpen)() && d.default.maybeShowKeyboardNavigationExplainerModal() } function S() { (0, l.disableKeyboardMode)() } t.default = function(e, t) { let n = (0, r.useStateFromStores)([u.default], () => u.default.keyboardModeEnabled); (0, a.useFocusJumpSectionManager)(n); let s = (0, i.useCallback)(e => { ! function(e, t) { var n, i; let r = (0, c.isInputLikeElement)(null === (n = (0, c.eventOwnerDocument)(e)) || void 0 === n ? void 0 : n.activeElement); if (r && e.key !== T.KeyboardEventKey.Tab || e.ctrlKey || e.altKey || e.metaKey || e.key !== T.KeyboardEventKey.Tab && e.shiftKey) return; let s = function(e) { let t = E.keyToCode("shift"), n = E.keyToCode("tab"); if (e.key === T.KeyboardEventKey.Tab && e.shiftKey && null != t && null != n) return [ [I.KeyboardDeviceTypes.KEYBOARD_KEY, t], [I.KeyboardDeviceTypes.KEYBOARD_KEY, n] ]; let i = T.NavigationKeyShortcutMap.get(e.key); if (null != i) { let e = E.keyToCode(i); if (null != e) return [ [I.KeyboardDeviceTypes.KEYBOARD_KEY, e] ] } return null }(e); null != s && !_.default.hasExactKeybind(s) && !o.default.hasBind(null !== (i = E.codeToKey(s[0])) && void 0 !== i ? i : "") && ((0, l.enableKeyboardMode)(), r && !t && e.preventDefault()) }(e, t) }, [t]); return (0, i.useLayoutEffect)(() => (n ? (e.addEventListener("mousedown", S), e.addEventListener("keydown", f)) : e.addEventListener("keydown", s), () => { n ? (e.removeEventListener("mousedown", S), e.removeEventListener("keydown", f)) : e.removeEventListener("keydown", s) }), [e, s, n]), n } }, 392358: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"); var i = n("470079"), r = n("40851"), s = n("981631"); let a = ["Shift", "Alt", "Meta", "Control"]; function o(e, t) { let [n, o] = i.useState(0), l = (0, r.useWindowDispatch)(); i.useEffect(() => { let e = () => o(e => e + 1), t = () => o(e => Math.max(0, e - 1)); return l.subscribe(s.ComponentActions.POPOUT_SHOW, e), l.subscribe(s.ComponentActions.POPOUT_HIDE, t), () => { l.unsubscribe(s.ComponentActions.POPOUT_SHOW, e), l.unsubscribe(s.ComponentActions.POPOUT_HIDE, t) } }, [l]); let [u, d] = i.useState(!1); return i.useLayoutEffect(() => { let i = e => { if ((!t || n > 0) && u) { d(!1); return }!(!u && n > 0 || e instanceof KeyboardEvent && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey || a.indexOf(e.key) >= 0)) && d(e => !e) }, r = u ? "keyup" : "mousemove"; return t && e.addEventListener(r, i), () => null == e ? void 0 : e.removeEventListener(r, i) }, [e, u, n, t]), t && 0 === n && u } }, 560067: function(e, t, n) { "use strict"; n.r(t), t.default = { openCreateGuildModal: e => { Promise.all([n.e("99387"), n.e("42483"), n.e("24813")]).then(n.bind(n, "635703")).then(t => { let { openCreateGuildModal: n } = t; return n(e) }) }, updateCreateGuildModal: e => { Promise.all([n.e("99387"), n.e("42483"), n.e("24813")]).then(n.bind(n, "635703")).then(t => { let { updateCreateGuildModal: n } = t; return n(e) }) } } }, 732845: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildShopPreviewExperiment: function() { return a }, GuildShopStorefrontExperiment: function() { return r }, ShowGuildRoleSubInGuildShopExperiment: function() { return s } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2023-08_server_shop_storefront", label: "Server Shop Storefront", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables Server shop storefront", config: { enabled: !0 } }] }), s = (0, i.createExperiment)({ kind: "user", id: "2023-09_show_server_sub_in_server_shop", label: "Show server sub in server shop", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables showing server sub in server shop", config: { enabled: !0 } }] }), a = (0, i.createExperiment)({ kind: "user", id: "2023-09_server_shop_phantom_preview", label: "Server Shop Phantom Preview", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables Server shop phantom preview", config: { enabled: !0 } }] }) }, 652515: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForGuildShopStorefront: function() { return a }, isEligibleForSubscriptionsInGuildShop: function() { return l }, useIsEligibleForGuildShopPreview: function() { return u }, useIsEligibleForGuildShopStorefront: function() { return s }, useIsEligibleForSubscriptionsInGuildShop: function() { return o } }); var i = n("352981"), r = n("732845"); function s() { let { enabled: e } = r.GuildShopStorefrontExperiment.useExperiment({ location: "adf3ea_1" }); return e } function a() { let { enabled: e } = r.GuildShopStorefrontExperiment.getCurrentConfig({ location: "adf3ea_2" }); return e } function o(e, t) { let { enabled: n } = r.ShowGuildRoleSubInGuildShopExperiment.useExperiment({ location: t }), s = (0, i.useGuildEligibleForGuildProducts)(e, t); return n && s } function l(e, t) { let { enabled: n } = r.ShowGuildRoleSubInGuildShopExperiment.getCurrentConfig({ location: t }), s = (0, i.isGuildEligibleForGuildProducts)(e, t); return n && s } function u(e) { let { enabled: t } = r.GuildShopPreviewExperiment.useExperiment({ location: e }); return t } }, 550951: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useGuildShopPreviewVisible: function() { return d } }); var i = n("399606"), r = n("524437"), s = n("605236"), a = n("352981"), o = n("496675"), l = n("652515"), u = n("981631"); function d(e, t) { var n; let d = (0, l.useIsEligibleForGuildShopPreview)(t), _ = (0, s.useIsDismissibleContentDismissed)(r.DismissibleContent.SERVER_SHOP_PHANTOM_PREVIEW), c = (0, i.useStateFromStores)([o.default], () => null != e && o.default.can(u.Permissions.ADMINISTRATOR, e)), E = null !== (n = null == e ? void 0 : e.hasFeature(u.GuildFeatures.PRODUCTS_AVAILABLE_FOR_PURCHASE)) && void 0 !== n && n, I = (0, a.useGuildEligibleForGuildProducts)(null == e ? void 0 : e.id, "useGuildShopPreviewVisible"), T = [u.GuildFeatures.CREATOR_MONETIZABLE, u.GuildFeatures.CREATOR_MONETIZABLE_PROVISIONAL, u.GuildFeatures.ROLE_SUBSCRIPTIONS_ENABLED].some(t => (null == e ? void 0 : e.hasFeature(t)) === !0); return null != e && c && !E && T && d && I && !_ } }, 897345: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isGuildShopVisibleInGuild: function() { return u }, useGuildShopVisibleInGuild: function() { return l } }); var i = n("674180"), r = n("994592"), s = n("652515"), a = n("550951"), o = n("981631"); function l(e) { let t = (0, s.useIsEligibleForGuildShopStorefront)(), n = (0, s.useIsEligibleForSubscriptionsInGuildShop)(null == e ? void 0 : e.id, "channel_list"), l = (0, r.useRoleSubscriptionsVisibleInGuild)(null == e ? void 0 : e.id), u = (0, a.useGuildShopPreviewVisible)(e, "channel_list"), { shouldHideGuildPurchaseEntryPoints: d } = (0, i.useShouldHideGuildPurchaseEntryPoints)(null == e ? void 0 : e.id); return !!t && null != e && !d && (e.hasFeature(o.GuildFeatures.PRODUCTS_AVAILABLE_FOR_PURCHASE) || n && l || u) } function u(e, t) { let n = (0, s.isEligibleForGuildShopStorefront)(), i = (0, s.isEligibleForSubscriptionsInGuildShop)(null == e ? void 0 : e.id, "channel_list"), a = (0, r.areRoleSubscriptionsVisibleInGuild)(null == e ? void 0 : e.id, t); return !!n && null != e && (e.hasFeature(o.GuildFeatures.PRODUCTS_AVAILABLE_FOR_PURCHASE) || i && a) } }, 223892: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isCreatorMonetizationNagActivateEnabled: function() { return _ }, isExpeditedMonetizationOnboardingGuild: function() { return l }, isMonetizationWaitlistEnabledForGuild: function() { return d }, isUserInCreatorMonetizationEligibleCountry: function() { return a }, useIsExpeditedOnboardingGuild: function() { return o }, useIsMonetizationWaitlistEnabledForGuild: function() { return u }, useIsUserInCreatorMonetizationEligibleCountry: function() { return s } }); var i = n("586072"), r = n("981631"); function s() { let { isUserEligibleForCreatorMonetization: e } = i.CreatorMonetizationCountryAllowlistExperiment.useExperiment({ location: "e3bb71_1" }, { autoTrackExposure: !1 }); return e } function a() { let { isUserEligibleForCreatorMonetization: e } = i.CreatorMonetizationCountryAllowlistExperiment.getCurrentConfig({ location: "e3bb71_2" }, { autoTrackExposure: !1 }); return e } function o(e) { let t = function(e) { let { enableFastMonetizationOnboardingForGuild: t } = i.CreatorMonetizationRavenOnboardingGuildExperiment.useExperiment({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "e3bb71_3" }, { autoTrackExposure: !0 }), { enableFastMonetizationOnboardingForUser: n } = i.CreatorMonetizationRavenOnboardingUserExperiment.useExperiment({ location: "e3bb71_4" }, { autoTrackExposure: !1 }); return null != e && t && n }(null == e ? void 0 : e.id), n = function(e) { let { enableFastMonetizationOnboardingForUser: t } = i.CreatorMonetizationRavenOnboardingUserExperiment.useExperiment({ location: "e3bb71_7" }, { autoTrackExposure: !1 }); return null != e && e.hasFeature(r.GuildFeatures.CREATOR_MONETIZABLE_WHITEGLOVE) && t }(e); return t || n } function l(e) { return function(e) { let { enableFastMonetizationOnboardingForGuild: t } = i.CreatorMonetizationRavenOnboardingGuildExperiment.getCurrentConfig({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "e3bb71_5" }), { enableFastMonetizationOnboardingForUser: n } = i.CreatorMonetizationRavenOnboardingUserExperiment.getCurrentConfig({ location: "e3bb71_6" }); return null != e && t && n }(null == e ? void 0 : e.id) || function(e) { let { enableFastMonetizationOnboardingForUser: t } = i.CreatorMonetizationRavenOnboardingUserExperiment.getCurrentConfig({ location: "e3bb71_8" }); return null != e && e.hasFeature(r.GuildFeatures.CREATOR_MONETIZABLE_WHITEGLOVE) && t }(e) } function u(e) { let { enableWaitlist: t } = i.CreatorMonetizationOnboardingWaitlistExperiment.useExperiment({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "e3bb71_9" }, { autoTrackExposure: !1 }); return t } function d(e) { let { enableWaitlist: t } = i.CreatorMonetizationOnboardingWaitlistExperiment.getCurrentConfig({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "e3bb71_10" }); return t } function _() { let { enableCreatorMonetizationNagActivateForUser: e } = i.CreatorMonetizationNagActivateExperiment.getCurrentConfig({ location: "e3bb71_11" }, { autoTrackExposure: !0 }); return e } }, 586072: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CreatorMonetizationCountryAllowlistExperiment: function() { return r }, CreatorMonetizationNagActivateExperiment: function() { return l }, CreatorMonetizationOnboardingWaitlistExperiment: function() { return o }, CreatorMonetizationRavenOnboardingGuildExperiment: function() { return s }, CreatorMonetizationRavenOnboardingUserExperiment: function() { return a } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2022-04_creator_monetization_country_allowlist", label: "Creator Monetization Available in Country", defaultConfig: { isUserEligibleForCreatorMonetization: !1 }, treatments: [{ id: 1, label: "Enables users to view Creator Monetization entrypoints", config: { isUserEligibleForCreatorMonetization: !0 } }] }), s = (0, i.createExperiment)({ kind: "guild", id: "2022-09_creator_monetization_raven", label: "Creator Monetization Onboarding v2", defaultConfig: { enableFastMonetizationOnboardingForGuild: !1 }, treatments: [{ id: 1, label: "Enables guild to create Guild Role Subscriptions quickly", config: { enableFastMonetizationOnboardingForGuild: !0 } }] }), a = (0, i.createExperiment)({ kind: "user", id: "2022-09_creator_monetization_raven_users", label: "Creator Monetization Onboarding v2 Users", defaultConfig: { enableFastMonetizationOnboardingForUser: !1 }, treatments: [{ id: 1, label: "Enables users to create Guild Role Subscriptions quickly", config: { enableFastMonetizationOnboardingForUser: !0 } }] }), o = (0, i.createExperiment)({ kind: "guild", id: "2022-11_creator_monetization_onboarding_waitlist", label: "Creator Monetization Onboarding Waitlist", defaultConfig: { enableWaitlist: !1 }, treatments: [{ id: 1, label: "Enables Guilds to (possibly) see the waitlist", config: { enableWaitlist: !0 } }] }), l = (0, i.createExperiment)({ kind: "user", id: "2023-01_creator_monetization_nag_activate_users", label: "Creator Monetization Nag Activate Users", defaultConfig: { enableCreatorMonetizationNagActivateForUser: !1 }, treatments: [{ id: 1, label: "Enables users to see nag bar to activate server subscriptions", config: { enableCreatorMonetizationNagActivateForUser: !0 } }] }) }, 200876: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o }, isCreatorMonetizationEnabledGuild: function() { return a } }); var i = n("442837"), r = n("430824"), s = n("981631"); function a(e) { return !e.hasFeature(s.GuildFeatures.CREATOR_MONETIZABLE_DISABLED) && (e.hasFeature(s.GuildFeatures.CREATOR_MONETIZABLE) || e.hasFeature(s.GuildFeatures.CREATOR_MONETIZABLE_PROVISIONAL)) } function o(e) { return (0, i.useStateFromStores)([r.default], () => { let t = r.default.getGuild(e); return null != t && a(t) }) } }, 674180: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useIsMonetizationReapplicationDisabled: function() { return I }, useShouldHideGuildPurchaseEntryPoints: function() { return c }, useShouldRestrictUpdatingCreatorMonetizationSettings: function() { return E } }); var i = n("470079"), r = n("442837"), s = n("81897"), a = n("423117"), o = n("289393"), l = n("430824"), u = n("738774"), d = n("981631"); let _ = e => { let t = (0, s.default)(); i.useEffect(() => { if (null != e && !!e.hasFeature(d.GuildFeatures.CREATOR_MONETIZABLE_RESTRICTED)) o.default.getMonetizationRestrictionsFetchState(e.id) === o.FetchState.NOT_FETCHED && a.fetchMonetizationRestrictions(e.id, { signal: t }) }, [e, t]); let n = null == e ? void 0 : e.id, l = (0, r.useStateFromStoresArray)([o.default], () => { var e; return null !== (e = o.default.getMonetizationRestrictions(null != n ? n : d.EMPTY_STRING_SNOWFLAKE_ID)) && void 0 !== e ? e : [] }); return { restrictions: l, restrictionsLoading: (0, r.useStateFromStores)([o.default], () => o.default.getMonetizationRestrictionsFetchState(null != n ? n : d.EMPTY_STRING_SNOWFLAKE_ID) === o.FetchState.FETCHING) } }, c = e => { var t; let n = (0, r.useStateFromStores)([l.default], () => l.default.getGuild(e), [e]), { restrictions: i, restrictionsLoading: s } = _(n); return { shouldHideGuildPurchaseEntryPoints: !((null == n ? void 0 : n.hasFeature(d.GuildFeatures.CREATOR_MONETIZABLE)) || (null == n ? void 0 : n.hasFeature(d.GuildFeatures.CREATOR_MONETIZABLE_PROVISIONAL))) || (s ? null === (t = null == n ? void 0 : n.hasFeature(d.GuildFeatures.CREATOR_MONETIZABLE_RESTRICTED)) || void 0 === t || t : (0, u.isRestrictedFromShowingGuildPurchaseEntryPoints)(i)), restrictionsLoading: s } }, E = e => { var t; let n = (0, r.useStateFromStores)([l.default], () => l.default.getGuild(e), [e]), { restrictions: i, restrictionsLoading: s } = _(n), a = s ? null === (t = null == n ? void 0 : n.hasFeature(d.GuildFeatures.CREATOR_MONETIZABLE_RESTRICTED)) || void 0 === t || t : (0, u.isRestrictedFromUpdatingCreatorMonetizationSettings)(i), o = !!(null == n ? void 0 : n.hasFeature(d.GuildFeatures.CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING)); return { shouldRestrictUpdatingCreatorMonetizationSettings: a || o, allowSelfRemoveMonetization: !a, restrictionsLoading: s } }, I = e => { let { restrictions: t, restrictionsLoading: n } = _((0, r.useStateFromStores)([l.default], () => l.default.getGuild(e), [e])); return { isMonetizationReapplicationDisabled: (0, u.isRestrictedFromMonetizationReapplication)(t), restrictionsLoading: n } } }, 738774: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isRestrictedFromMonetizationReapplication: function() { return _ }, isRestrictedFromShowingGuildPurchaseEntryPoints: function() { return o }, isRestrictedFromUpdatingCreatorMonetizationSettings: function() { return u }, shouldHideGuildPurchaseEntryPoints: function() { return l }, shouldRestrictUpdatingCreatorMonetizationSettings: function() { return d } }); var i = n("289393"), r = n("430824"), s = n("308636"), a = n("981631"); function o(e) { return null != e && e.includes(s.CreatorMonetizationRestrictions.NEW_PURCHASES_DISABLED) } function l(e) { var t; if (null == e) return !1; let n = i.default.getMonetizationRestrictionsFetchState(e), s = i.default.getMonetizationRestrictions(e), l = r.default.getGuild(e); return n === i.FetchState.FETCHED ? o(s) : null === (t = null == l ? void 0 : l.hasFeature(a.GuildFeatures.CREATOR_MONETIZABLE_RESTRICTED)) || void 0 === t || t } function u(e) { return null != e && e.includes(s.CreatorMonetizationRestrictions.SETTINGS_READ_ONLY) } function d(e) { var t; if (null == e) return !1; let n = i.default.getMonetizationRestrictionsFetchState(e), s = i.default.getMonetizationRestrictions(e), o = r.default.getGuild(e); return n === i.FetchState.FETCHED ? u(s) : null === (t = null == o ? void 0 : o.hasFeature(a.GuildFeatures.CREATOR_MONETIZABLE_RESTRICTED)) || void 0 === t || t } function _(e) { return null != e && e.includes(s.CreatorMonetizationRestrictions.REAPPLICATION_DISABLED) } }, 308636: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { CreatorMonetizationRestrictions: function() { return i }, DefaultCreatorMonetizationRestrictions: function() { return s } }), (r = i || (i = {})).NEW_PURCHASES_DISABLED = "NEW_PURCHASES_DISABLED", r.REAPPLICATION_DISABLED = "REAPPLICATION_DISABLED", r.SETTINGS_READ_ONLY = "SETTINGS_READ_ONLY", r.SUBSCRIPTIONS_ENDED_FULL_REFUND = "SUBSCRIPTIONS_ENDED_FULL_REFUND", r.SUBSCRIPTIONS_ENDED_PRORATED_REFUND = "SUBSCRIPTIONS_ENDED_PRORATED_REFUND"; let s = ["NEW_PURCHASES_DISABLED", "REAPPLICATION_DISABLED", "SETTINGS_READ_ONLY"] }, 215739: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("846519"), r = n("147913"), s = n("246133"), a = n("734934"), o = n("695346"), l = n("885110"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = new i.Timeout, c = new i.Timeout, E = new i.Timeout; class I extends r.default { constructor(...e) { super(...e), d(this, "actions", { USER_SETTINGS_PROTO_UPDATE: () => this.handleUpdateProto(), POST_CONNECTION_OPEN: () => this.handleUpdateProto() }), d(this, "handleUpdateProto", () => { let e = o.CustomStatusSetting.getSetting(); if (null == e) E.stop(); else if (null != e.expiresAtMs && "0" !== e.expiresAtMs) { let t = new Date(Number(e.expiresAtMs)).getTime() - new Date().getTime(); t > 0 ? E.start(t, () => { o.CustomStatusSetting.updateSetting(void 0) }, !0) : (o.CustomStatusSetting.updateSetting(void 0), E.stop()) } else null != E && E.stop(); let t = o.StatusExpiresAtSetting.getSetting(); if (null != t && "0" !== t && l.default.getStatus() !== u.StatusTypes.ONLINE) { let e = new Date(Number(t)).getTime() - new Date().getTime(); e > 0 ? _.start(e, () => { (0, s.default)(u.StatusTypes.ONLINE, l.default.getStatus(), { location: { object: u.AnalyticsObjects.CUSTOM_STATUS_MANAGER } }, void 0) }, !0) : ((0, s.default)(u.StatusTypes.ONLINE, l.default.getStatus(), { location: { object: u.AnalyticsObjects.CUSTOM_STATUS_MANAGER } }, void 0), _.stop()) } else null != _ && _.stop(); let n = o.FocusModeExpiresAtSetting.getSetting(); if (null != n && "0" !== n) { let e = new Date(Number(n)).getTime() - new Date().getTime(); e > 0 ? c.start(e, () => { (0, a.setFocusMode)(!1) }, !0) : ((0, a.setFocusMode)(!1), c.stop()) } else null != c && c.stop() }) } } t.default = new I }, 33934: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("339085"), r = n("131704"), s = n("176354"), a = n("700785"), o = n("981631"); function l(e, t, n) { if (e.type !== o.ActivityTypes.CUSTOM_STATUS || null == e.emoji) return !1; let l = e.emoji; if (null == l.id || null == n || !(0, r.isGuildTextChannelType)(n.type)) return !0; let u = i.default.getUsableCustomEmojiById(l.id), d = s.default.isInternalEmojiForGuildId(u, n.getGuildId()), _ = a.can({ permission: o.Permissions.USE_EXTERNAL_EMOJIS, user: t, context: n }); return !d || _ } }, 676035: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getActivityFromCustomStatus: function() { return d }, useCustomStatusActivity: function() { return _ } }); var i = n("470079"), r = n("442837"), s = n("339085"), a = n("633302"), o = n("695346"), l = n("981631"); function u(e, t) { let n = null; if (null != t) n = { id: t.id, name: t.name, animated: t.animated }; else if (null != e.emojiName && "" !== e.emojiName) { let t = a.default.getByName(a.default.convertSurrogateToName(e.emojiName, !1)); n = null != t ? { id: null, name: t.surrogates, animated: !1 } : null } let i = Number(e.expiresAtMs); return { name: "Custom Status", type: l.ActivityTypes.CUSTOM_STATUS, state: e.text.length > 0 ? e.text : void 0, timestamps: i > 0 ? { end: i } : void 0, emoji: n } } function d(e) { let { emojiId: t } = e; return u(e, null != t && "0" !== t ? s.default.getUsableCustomEmojiById(t) : null) } function _() { let e = o.CustomStatusSetting.useSetting(), t = null == e ? void 0 : e.emojiId, n = (0, r.useStateFromStores)([s.default], () => null != t && "0" !== t ? s.default.getUsableCustomEmojiById(t) : null, [t]); return (0, i.useMemo)(() => null != e ? u(e, n) : null, [e, n]) } }, 427217: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("788307"), o = n("58957"); function l(e) { let { activity: t, className: n, emojiClassName: r, textClassName: l, placeholderText: u, soloEmojiClassName: d, animate: _ = !0, hideTooltip: c = !1, hideEmoji: E = !1, children: I } = e; if (null == t) return null; let { emoji: T } = t, f = null != t.state && "" !== t.state ? t.state : u; return (0, i.jsxs)("div", { className: s()(o.__invalid_container, n), children: [E || null == T ? null : (0, i.jsx)(a.ActivityEmoji, { emoji: T, className: s()(o.emoji, r, null != d ? { [d]: null == f || "" === f } : null), animate: _, hideTooltip: c }), null != f && f.length > 0 ? (0, i.jsx)("span", { className: l, children: f }) : null, I] }) } }, 109117: function(e, t, n) { "use strict"; n.r(t), n.d(t, { init: function() { return c } }); var i = n("268146"), r = n("433517"), s = n("131951"), a = n("594174"), o = n("626135"), l = n("729345"), u = n("981631"); let d = window.DiscordNative, _ = "".concat(u.AnalyticEvents.APP_NATIVE_CRASH, "Storage"); async function c() { var e; if (__OVERLAY__) return; let t = null == d ? void 0 : null === (e = d.processUtils) || void 0 === e ? void 0 : e.getLastCrash; if (null == t) { console.log("AppCrashedFatalReport: getLastCrash not supported."); return } let n = await t(), { didCrashReporterSeeCrash: s, didCrashOrUncleanExit: a } = function(e, t) { var n; let i = (null == e ? void 0 : e.lastId) !== (null == t ? void 0 : t.id) && (null == t ? void 0 : t.id) != null, r = null !== (n = null == t ? void 0 : t.rendererCrashExitCode) && void 0 !== n ? n : null; return { didCrashReporterSeeCrash: i, didCrashOrUncleanExit: i || null != r && 0 !== r } }(r.Storage.get(_, {}), n), l = function(e, t, n) { var r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p; function O(e) { return (null == n ? void 0 : n.storedInformation) != null && 1 === n.storedInformation[e] } function C(e) { return (null == n ? void 0 : n.storedInformation) == null || null == n.storedInformation[e] ? null : n.storedInformation[e] } let R = { did_crash: t, renderer_crash_reason: null !== (d = null == n ? void 0 : n.rendererCrashReason) && void 0 !== d ? d : null, renderer_crash_exit_code: null !== (_ = null == n ? void 0 : n.rendererCrashExitCode) && void 0 !== _ ? _ : null, had_rtc_connection: O(i.StoredCrashInformation.HasRTCConnection), was_sending_video: O(i.StoredCrashInformation.IsSendingVideo), was_sending_stream: O(i.StoredCrashInformation.IsSendingStream), was_receiving_video: O(i.StoredCrashInformation.IsReceivingVideo), was_receiving_stream: O(i.StoredCrashInformation.IsReceivingStream), video_media_session_id: C(i.StoredCrashInformation.VideoMediaSessionId), stream_media_session_id: C(i.StoredCrashInformation.StreamMediaSessionId), last_memory_usage_kb: null !== (c = null == n ? void 0 : null === (r = n.lastMemoryInformation) || void 0 === r ? void 0 : r.memoryUsageKB) && void 0 !== c ? c : null, last_used_js_heap_size_kb: null !== (E = null == n ? void 0 : null === (s = n.lastMemoryInformation) || void 0 === s ? void 0 : s.usedJSHeapSizeKB) && void 0 !== E ? E : null, last_memory_usage_uptime: null !== (I = null == n ? void 0 : null === (a = n.lastMemoryInformation) || void 0 === a ? void 0 : a.uptimeSeconds) && void 0 !== I ? I : null, highest_memory_usage_kb: null !== (T = null == n ? void 0 : null === (o = n.highestMemoryInformation) || void 0 === o ? void 0 : o.memoryUsageKB) && void 0 !== T ? T : null, highest_used_js_heap_size_kb: null !== (f = null == n ? void 0 : null === (l = n.highestMemoryInformation) || void 0 === l ? void 0 : l.usedJSHeapSizeKB) && void 0 !== f ? f : null, highest_memory_usage_uptime: null !== (S = null == n ? void 0 : null === (u = n.highestMemoryInformation) || void 0 === u ? void 0 : u.uptimeSeconds) && void 0 !== S ? S : null }; if (!e || null == n) return { electron_crash_reporter_did_crash: !1, minidump_exception_type: null, minidump_exception_module_name: null, minidump_relative_crash_address: null, minidump_exception_module_version: null, minidump_exception_module_code_id: null, ...R }; console.log("AppCrashedFatalReport lastCrash:", n, e); let g = null == n ? void 0 : n.minidumpInformation; return { electron_crash_reporter_did_crash: e, minidump_exception_type: null !== (h = null == g ? void 0 : g.exceptionString) && void 0 !== h ? h : null, minidump_exception_module_name: null !== (A = null == g ? void 0 : g.exceptionModuleName) && void 0 !== A ? A : null, minidump_relative_crash_address: null !== (m = null == g ? void 0 : g.relativeCrashAddress) && void 0 !== m ? m : null, minidump_exception_module_version: null !== (N = null == g ? void 0 : g.exceptionModuleVersion) && void 0 !== N ? N : null, minidump_exception_module_code_id: null !== (p = null == g ? void 0 : g.exceptionModuleCodeId) && void 0 !== p ? p : null, ...R } }(s, a, n); o.default.track(u.AnalyticEvents.APP_NATIVE_CRASH, l), r.Storage.set(_, { lastId: null == n ? void 0 : n.id }), a && setTimeout(async () => await E(), 1e4) } async function E() { var e, t; if (null !== (t = null === (e = a.default.getCurrentUser()) || void 0 === e ? void 0 : e.isStaff()) && void 0 !== t && t) try { await s.default.getMediaEngine().writeAudioDebugState(), await (0, l.uploadDebugLogFiles)(u.DebugLogCategory.RTC), console.log("Successfully uploaded debug files") } catch (e) { console.log("Failed to upload debug files") } } }, 729345: function(e, t, n) { "use strict"; n.r(t), n.d(t, { uploadDebugLogFiles: function() { return I } }); var i = n("544891"), r = n("552871"), s = n("283080"), a = n("592125"), o = n("569611"), l = n("710845"), u = n("705646"), d = n("104639"), _ = n("691895"), c = n("981631"); let E = new l.default("DebugUploadManager"); async function I(e, t) { await T(e), await (0, r.uploadRtcLogFiles)(14680064, t) } async function T(e) { try { let t = o.stringify(), n = "", r = await (0, u.getPushNotificationLogs)().then(e => (0, u.serializePushNotificationLogs)(e, !0)), l = t.length + n.length + r.length; if (l > 9437184) { let e = 1 - 9437184 / l; t = t.slice(t.length - Math.floor(t.length * e)), n = n.slice(n.length - Math.floor(n.length * e)), r = r.slice(r.length - Math.floor(r.length * e)) } let E = null, I = "\n ".concat((0, _.default)(E), "\n\n ").concat((0, s.serializeComponentRenderAverages)(), "\n\n Metadata:\n ").concat(JSON.stringify((0, d.default)(), void 0, 2), "\n\n ChannelStore:\n ").concat(JSON.stringify(a.default.getDebugInfo(), void 0, 2), "\n\n Logs:\n ").concat(t, "\n\n System logs:\n ").concat(n, "\n\n Push Notifications:\n ").concat(r, "\n "); o.clear(); let T = c.Endpoints.DEBUG_LOG(e, "discord_app_logs"); await i.HTTP.post({ url: T, body: I, retries: 3, headers: { "Content-Type": "text/plain" }, oldFormErrors: !0 }) } catch (e) { E.error("uploadAppLogFiles: upload app log files error ".concat(e.message)) } } }, 569611: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clear: function() { return o }, report: function() { return a }, stringify: function() { return l } }), n("653041"), n("411104"), n("47120"); var i = n("427786"), r = n.n(i); let s = new(r())(5e3); function a(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i]; let r = function(e) { let t = ""; for (let n of e) { let e = typeof n; "string" === e || "number" === e || "boolean" === e ? t += n + " " : n instanceof Error ? t += n.message + "\n" + n.stack + " " : t += JSON.stringify(n) + " " } return t }(n); for ("string" == typeof e ? s.push({ time: Date.now(), category: e, message: r }) : s.push({ time: Date.now(), category: e.name, timing: e.timing, message: r }); s.length > 5e3;) s.shift() } function o() { s.clear() } function l(e) { return s.toArray().filter(t => null == e || e.includes(t.category)).map(e => { let t = []; return t.push(new Date(e.time).toISOString()), null != e.timing && t.push(e.timing), t.push(e.category, e.message), t.join(" -> ") }).join("\n") } }, 710845: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("259443"), r = n("569611"); let s = Date.now(), a = s; (0, i.setLogFn)(function(e, t, n) { for (var i = arguments.length, o = Array(i > 3 ? i - 3 : 0), l = 3; l < i; l++) o[l - 3] = arguments[l]; let u = Date.now(), d = ((u - s) / 1e3).toFixed(3), _ = ((u - a) / 1e3).toFixed(3), c = "Σ:".concat(d, "s, Δ:").concat(_, "s"); a = u, r.report({ name: e, timing: c }, n, ...o), "file-only" !== t && console[t]("%c[".concat(e, "]"), "\nfont-weight: bold;\ncolor: purple;\n", n, ...o) }), t.default = i.Logger }, 705646: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPushNotificationLogs: function() { return o }, serializePushNotificationLogs: function() { return a } }); var i = n("433517"), r = n("314897"), s = n("981631"); function a(e, t) { if (0 === e.length) return "No logs"; let n = i.Storage.get(s.DEVICE_TOKEN), r = i.Storage.get(s.DEVICE_VOIP_TOKEN), a = e.map(e => { let n = e.silent ? "Silent" : "Displayed", i = t ? "".concat(e.channelId, " - ").concat(e.messageId) : "".concat(e.title, " - ").concat(e.content); return "".concat(new Date(e.receivedTimestamp).toISOString(), " [").concat(e.type, "] ").concat(n, " - ").concat(i) }).join("\n"); return "".concat(null != n ? "Device Token: ".concat(n) : "", "\n").concat(null != r ? "Device Voip Token: ".concat(r) : "", "\n\n").concat(a) } async function o() { let e = r.default.getId(); return [] } }, 104639: function(e, t, n) { "use strict"; function i() { return { logsUploaded: new Date().toISOString(), releaseChannel: window.GLOBAL_ENV.RELEASE_CHANNEL, buildNumber: "298246", versionHash: "8859d86f652369439a29467760910a7cd4d2dade" } } n.r(t), n.d(t, { default: function() { return i } }) }, 691895: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("757143"), n("653041"), n("47120"); var i = n("392711"), r = n.n(i), s = n("956067"), a = n("91159"); function o(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; return s.default.logGroups.map(i => { var s, o; let { index: u, timestamp: d, logs: _, nativeLogs: c, serverTrace: E } = i, I = 0 === u ? null !== (o = null === (s = r().find(_, e => e.log.indexOf("Logger loaded") >= 0)) || void 0 === s ? void 0 : s.timestamp) && void 0 !== o ? o : e : d, T = function(e, t) { var n, i; let s = (function(e) { let t = []; for (let n = 0; n < e.length; n++) { let i = e[n], r = e[n + 1]; null != r && r.log === i.log.replace("Start ", "Finish ") ? (r.log = r.log.replace("Finish ", ""), t.push(r), n++) : t.push(i) } return t })(e).map(e => { let n = null == e.timestamp ? "" : ((e.timestamp - t) / 1e3).toFixed(3); return { totalTime: n, deltaTime: null == e.delta ? "" : String(Math.round(e.delta)), log: "".concat(e.emoji.length > 0 ? "".concat(e.emoji, " ") : "").concat(e.prefix).concat(e.log, "\n") } }), a = null !== (n = r().max(s.map(e => e.totalTime.length))) && void 0 !== n ? n : 0, o = null !== (i = r().max(s.map(e => e.deltaTime.length))) && void 0 !== i ? i : 0; return s.map(e => { let { totalTime: t, deltaTime: n, log: i } = e; return "".concat(r().padStart(t, a), " ").concat(r().padStart(n, o), " ").concat(i) }).join("") }(function(e, t, n, i) { e = e.slice(); let r = new Set(t.map(l)), s = "", a = []; t.forEach(t => { let i = l(t), o = 0, u = n || !t.autoGenerated, d = i.startsWith("Start ") && !i.includes("RUN_JS_BUNDLE") && r.has(i.replace("Start ", "Finish ")); if (i.startsWith("Finish ") && !i.includes("RUN_JS_BUNDLE") && r.has(i.replace("Finish ", "Start "))) { s = s.substring(2); let e = a.pop(); null != e && (o = t.timestamp - e.timestamp, u = u || o > 5 && ! function(e) { return ["GET_CONSTANTS", "CONVERT_CONSTANTS"].some(t => e.includes(t)) }(i), e.shouldKeep = e.shouldKeep || u) } let _ = { emoji: "☕", timestamp: t.timestamp, delta: o > 0 ? o : void 0, prefix: s, log: i, shouldKeep: u }; (function(e, t) { let n = 0; for (; n < e.length; n++) { let { timestamp: i } = e[n]; if (null != i && i > t.timestamp) break } e.splice(n, 0, t) })(e, _), d && (s += "| ", a.push(_)) }); let o = !1; return e.filter(e => !(o && e.log.includes("↪")) && !(o = !i && "\uD83C\uDFA8" === e.emoji || !1 === e.shouldKeep)) }(_, c, t, n), I), f = "Trace #".concat(u + 1, " started ").concat((0, a.getTimestampString)(d), "\n").concat(T); return null != E && (f += "\n Server trace for trace #".concat(u + 1).concat(E)), f }).join("\n\n") } function l(e) { let t = null == e.tag ? e.label : "".concat(e.label, " ").concat(e.tag); return t.includes("_START") && (t = "Start " + t.replace("_START", "")), t.includes("_END") && (t = "Finish " + t.replace("_END", "")), t } }, 902558: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("268146"), r = n("46973"), s = n("147913"), a = n("314897"), o = n("998502"), l = n("981631"); let u = new Set; function d(e) { switch (e) { case r.MediaEngineContextTypes.DEFAULT: return i.StoredCrashInformation.VideoMediaSessionId; case r.MediaEngineContextTypes.STREAM: return i.StoredCrashInformation.StreamMediaSessionId } } function _(e) { var t; o.default.setCrashInformation(d(e.context), null !== (t = e.mediaSessionId) && void 0 !== t ? t : null) } function c(e) { var t; let n = (null !== (t = e.channelId) && void 0 !== t ? t : "unknown") + e.context; switch (e.state) { case l.RTCConnectionStates.RTC_CONNECTED: u.add(n), o.default.setCrashInformation(i.StoredCrashInformation.HasRTCConnection, 1); break; case l.RTCConnectionStates.DISCONNECTED: o.default.setCrashInformation(d(e.context), null), u.delete(n), 0 === u.size && ! function() { for (let e of [i.StoredCrashInformation.HasRTCConnection, i.StoredCrashInformation.IsSendingVideo, i.StoredCrashInformation.IsSendingStream, i.StoredCrashInformation.IsReceivingVideo, i.StoredCrashInformation.IsReceivingStream]) o.default.setCrashInformation(e, 0) }() } } function E(e) { let t = e.userId === a.default.getId(), n = null != e.streamId, s = null; switch (e.context) { case r.MediaEngineContextTypes.DEFAULT: s = t ? i.StoredCrashInformation.IsSendingVideo : i.StoredCrashInformation.IsReceivingVideo; break; case r.MediaEngineContextTypes.STREAM: s = t ? i.StoredCrashInformation.IsSendingStream : i.StoredCrashInformation.IsReceivingStream } o.default.setCrashInformation(s, n ? 1 : 0) } class I extends s.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { RTC_CONNECTION_STATE: c, RTC_CONNECTION_VIDEO: E, MEDIA_SESSION_JOINED: _ }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new I }, 540059: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DesktopVisualRefreshExperiment: function() { return i }, useIsDesktopVisualRefreshEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ id: "2024-05_desktop_visual_refresh", label: "Desktop Visual Refresh", kind: "user", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Refresh Enabled", config: { enabled: !0 } }] }); function r(e) { return i.getCurrentConfig({ location: e }, { autoTrackExposure: !1 }).enabled } }, 299206: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("512722"), s = n.n(r), a = n("481060"), o = n("695346"), l = n("754424"), u = n("572004"); function d(e) { let { id: t, label: n, onSuccess: r, shiftId: d, showIconFirst: _, showWithoutDeveloperMode: c, focusedClassName: E } = e, I = o.DeveloperMode.useSetting(); if (__OVERLAY__ || !(c || I) || !u.SUPPORTS_COPY || null == t) return null; let T = "devmode-copy-id-".concat(t); return (0, i.jsx)(a.MenuItem, { id: T, label: n, action: function(e) { let n = null != d && e.shiftKey ? d : t; s()(null != n, "cannot copy null text"), (0, u.copy)(n), null == r || r() }, icon: l.default, showIconFirst: _, focusedClassName: E }, T) } }, 811660: function(e, t, n) { "use strict"; function i() { let e = r(); return null === e || !!(e >= 31) || !1 } function r() { return null } n.r(t), n.d(t, { getMediaPerformanceClass: function() { return r }, hasPerformanceForKrispFullband: function() { return i } }) }, 991240: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GET_THERMAL_STATE_NOT_IMPLEMENTED_ERROR_MESSAGE: function() { return i } }); let i = "getThermalState not implemented for this client platform" }, 75060: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("991240"); t.default = { getThermalState: () => Promise.reject(Error(i.GET_THERMAL_STATE_NOT_IMPLEMENTED_ERROR_MESSAGE)) } }, 443296: function(e, t, n) { "use strict"; function i() { return {} } n.r(t), n.d(t, { default: function() { return i } }) }, 42352: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("75060"), r = n("991240"); async function s() { let e = null; try { e = await i.default.getThermalState() } catch (e) { if (e.message === r.GET_THERMAL_STATE_NOT_IMPLEMENTED_ERROR_MESSAGE) return Promise.resolve(null); throw e } return Promise.resolve(e) } }, 180893: function(e, t, n) { "use strict"; n.r(t), n.d(t, { STORAGE_KEY_LOG_DISPATCHES: function() { return i } }); let i = "DevToolsLogDispatches" }, 31336: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearAnalyticsLog: function() { return o }, toggleDisplayDevTools: function() { return a }, updateDevToolsSettings: function() { return s } }); var i = n("570140"), r = n("19759"); function s(e) { i.default.dispatch({ type: "DEV_TOOLS_SETTINGS_UPDATE", settings: e }) } function a() { s({ displayTools: !r.default.displayTools }) } function o() { i.default.dispatch({ type: "ANALYTICS_LOG_CLEAR" }) } }, 19759: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEVTOOLS_SIDEBAR_MIN_WIDTH: function() { return l } }); var i, r = n("442837"), s = n("570140"), a = n("906467"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = 360, u = { sidebarWidth: 360, lastOpenTabId: null, displayTools: !1, showDevWidget: !1, devWidgetPosition: { x: 0, y: 0 } }; class d extends(i = r.default.DeviceSettingsStore) { initialize(e) { u = null != e ? e : u, s.default.actionLogger.persist = a.default.isDeveloper } getUserAgnosticState() { return u } get sidebarWidth() { return this.displayTools ? u.sidebarWidth : 0 } get lastOpenTabId() { var e; return null !== (e = u.lastOpenTabId) && void 0 !== e ? e : null } get displayTools() { return a.default.isDeveloper && u.displayTools } get showDevWidget() { return a.default.isDeveloper && u.showDevWidget } get devWidgetPosition() { return u.devWidgetPosition } } o(d, "displayName", "DevToolsSettingsStore"), o(d, "persistKey", "DevToolsSettingsStore"), t.default = new d(s.default, { DEV_TOOLS_SETTINGS_UPDATE: function(e) { a.default.isDeveloper && (u = { ...u, ...e.settings }) } }) }, 432877: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DevSettingsCategory: function() { return i } }), n("47120"); var i, r, s, a = n("442837"), o = n("570140"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {}))[s.MESSAGING = 0] = "MESSAGING", s[s.OVERLAYS = 1] = "OVERLAYS", s[s.PREMIUM = 2] = "PREMIUM"; let u = { visual_effect_view_overrides: { label: "Blur view overrides for designers to test with", category: 1 }, obscure_blur_effect_enabled: { label: "Force obscure blur effect on for message media and embeds", category: 1 }, explicit_media_redaction_ignore_pending_scan: { label: "Ignore pending scan on explicit media", category: 1 }, upload_fail_50: { label: "Uploads: Fail 50% of uploads with 500 status after a 1 second delay", category: 0 }, send_fail_100: { label: "Send: Fail with 500 status", category: 0 }, premium_roadblocks: { label: "Enable all new premium roadblocks", category: 2 } }, d = {}; class _ extends(r = a.default.DeviceSettingsStore) { getUserAgnosticState() { return { toggleStates: d } } initialize(e) { for (var t in u) { var n, i; let r = null !== (i = null == e ? void 0 : null === (n = e.toggleStates) || void 0 === n ? void 0 : n[t]) && void 0 !== i && i; d[t] = r } } get(e) { var t; return null !== (t = d[e]) && void 0 !== t && t } set(e, t) { return d[e] = t, t } all() { return d } allByCategory(e) { return Object.entries(u).filter(t => { let [n, i] = t; return i.category === e }).map(e => { let [t, n] = e; return [t, d[t], n] }) } } l(_, "displayName", "DevToolsDevSettingsStore"), l(_, "persistKey", "DevToolsDevSettingsStore"), t.default = new _(o.default, { DEV_TOOLS_DEV_SETTING_SET: function(e) { d[e.toggle] = e.value } }) }, 947519: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"), r = n("470079"), s = n("608787"), a = n("442837"), o = n("906467"), l = n("358085"), u = n("31336"), d = n("19759"); let _ = (0, s.makeLazy)({ createPromise: () => Promise.all([n.e("49237"), n.e("99387"), n.e("40326"), n.e("30386"), n.e("80451"), n.e("52110"), n.e("90508"), n.e("93521"), n.e("45074"), n.e("36439"), n.e("30634"), n.e("23124")]).then(n.bind(n, "678717")), webpackId: "678717" }); function c(e) { let { mobile: t } = e, n = (0, a.useStateFromStores)([o.default], () => o.default.isDeveloper), s = (0, a.useStateFromStores)([d.default], () => d.default.displayTools), c = r.useCallback(e => { ((0, l.isMac)() ? e.metaKey : e.ctrlKey) && e.altKey && "KeyO" === e.code && (0, u.toggleDisplayDevTools)() }, []); return (r.useLayoutEffect(() => (window.addEventListener("keydown", c), () => { window.removeEventListener("keydown", c) }), [c]), t ? n : s) ? (0, i.jsx)(_, { mobile: t }) : null } }, 91311: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = { use_topic_dividers_in_chat: "Use summary topics as divider content in chat instead of string formatted dates.", highlight_redesigned_icons: "Highlight redesigned icons", alt_clips_1: "Use alt clip icon 1", alt_clips_2: "Use alt clip icon 2", profile_effect_debug_controls: "Shop: Scrolls through profile effects with arrow up / down. Restart with R", shop_disable_cache: "Shop: Disable shop cache", shop_include_unpublished: "Shop: Show unpublished items in the shop", enable_avatar_decoration_uploads: "Shop: Enable avatar decoration uploads", lottie_hover_multiple_loop: "Lotties - continue playing the hover animation after mouse enter", activity_panel_iframe_fills_container: "Activity Panel: Iframe fills container", ss01: "Italic - straight forms (K,R,k)", ss02: "Italic - straight l", ss03: "Italic - full height forms (W,M)", ss04: "Italic - alternate figures (3,4,5,6,7,8,9)" }, l = {}; class u extends(i = r.default.DeviceSettingsStore) { getUserAgnosticState() { return { toggleStates: l } } initialize(e) { for (var t in o) { var n, i; let r = null !== (i = null == e ? void 0 : null === (n = e.toggleStates) || void 0 === n ? void 0 : n[t]) && void 0 !== i && i; l[t] = r } } get(e) { var t; return null !== (t = l[e]) && void 0 !== t && t } set(e, t) { return l[e] = t, t } all() { return l } allWithDescriptions() { return Object.entries(l).map(e => { let [t, n] = e; return [t, n, o[t]] }) } } a(u, "displayName", "DevToolsDesignTogglesStore"), a(u, "persistKey", "DevToolsDesignTogglesStore"), t.default = new u(s.default, { DEV_TOOLS_DESIGN_TOGGLE_WEB_SET: function(e) { l[e.toggle] = e.value } }) }, 580747: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("442837"), r = n("91311"); function s(e) { return (0, i.useStateFromStores)([r.default], () => r.default.get(e), [e]) } }, 976757: function(e, t, n) { "use strict"; n.r(t), n.d(t, { buildClanFromServer: function() { return a }, isLoadedSearchResult: function() { return o } }), n("945124"); var i = n("116175"), r = n("308083"); function s(e, t) { return void 0 === e || "" === e ? t : e } function a(e) { let t = (0, i.getRandomClanBadgePreset)(), n = (0, r.getRandomClanBrandPreset)(); return { id: e.id, name: e.name, icon: e.icon_hash, description: e.description, memberCount: e.member_count, games: e.game_ids, playstyle: e.playstyle, traits: e.search_terms, tag: e.tag, banner: e.banner, bannerHash: e.banner_hash, badge: { badgeKind: e.badge, primaryColor: s(e.badge_color_primary, t.primary), secondaryColor: s(e.badge_color_secondary, t.secondary), imageHash: e.badge_hash }, branding: { primaryColor: s(e.brand_color_primary, n.primary), secondaryColor: s(e.brand_color_secondary, n.secondary) }, wildcardDescriptors: e.wildcard_descriptors } } function o(e) { return "loaded" === e.status } }, 731455: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ALLOWED_SOCIAL_LINKS_DOMAINS: function() { return R }, CategoryIcons: function() { return d }, CategoryId: function() { return o }, DEFAULT_DISCOVERY_CATEGORY_ID: function() { return c }, DEFAULT_EMOJI_DISCOVERABILITY_SETTING: function() { return I }, DISCORD_HUB_ID: function() { return f }, DISCOVERY_ALL_CATEGORIES_ID: function() { return T }, DISCOVERY_COMMUNICATOR_REQUIREMENT: function() { return C }, DISCOVERY_PARTICIPATOR_REQUIREMENT: function() { return O }, DISCOVERY_SIDEBAR_CATEGORIES: function() { return h }, LANGUAGE_OPTIONS: function() { return p }, MAX_ALGOLIA_PAGINATOR_RESULTS: function() { return S }, OTHER_DISCOVERY_CATEGORY_ID: function() { return E }, SUGGESTED_TAGS_FOR_CATEGORIES: function() { return A }, calculateLocaleOptions: function() { return N } }); var i, r, s, a, o, l, u, d, _ = n("689938"); let c = 0, E = 13, I = !0, T = -1, f = -2; (i = o || (o = {}))[i.Quests = -4] = "Quests", i[i.Clans = -3] = "Clans", i[i.Hub = f] = "Hub", i[i.Communities = T] = "Communities", i[i.Activity = 1] = "Activity", i[i.Music = 2] = "Music", i[i.Television = 3] = "Television", i[i.Science = 5] = "Science", i[i.Education = 6] = "Education"; let S = 1e3, h = [1, 2, 3, 5, 6]; (r = l || (l = {}))[r.GENERAL_CHATTING = 14] = "GENERAL_CHATTING", r[r.GAMING = 1] = "GAMING", r[r.MUSIC = 2] = "MUSIC", r[r.ENTERTAINMENT = 3] = "ENTERTAINMENT", r[r.CREATIVE_ARTS = 4] = "CREATIVE_ARTS", r[r.SCIENCE_AND_TECH = 5] = "SCIENCE_AND_TECH", r[r.EDUCATION = 6] = "EDUCATION", r[r.SPORTS = 7] = "SPORTS", r[r.FASHION_AND_BEAUTY = 8] = "FASHION_AND_BEAUTY", r[r.RELATIONSHIPS_AND_IDENTITY = 9] = "RELATIONSHIPS_AND_IDENTITY", r[r.TRAVEL_AND_FOOD = 10] = "TRAVEL_AND_FOOD", r[r.FITNESS_AND_HEALTH = 11] = "FITNESS_AND_HEALTH", r[r.FINANCE = 12] = "FINANCE", r[r.OTHER = 13] = "OTHER", r[r.EMOJI = 43] = "EMOJI", r[r.BOTS = 49] = "BOTS"; let A = { 14: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GAMING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ROBLOX, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_TWITCH, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MINECRAFT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_COMMUNITY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_STREAMER, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FORTNITE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ANIME, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ROLEPLAY], 1: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MINECRAFT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ROBLOX, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_TWITCH, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FORTNITE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ESPORTS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ROLEPLAY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_VALORANT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_LEAGUEOFLEGENDS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FIVEM], 2: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_EDM, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_RAP, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_KPOP, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MUSIC_PRODUCTION, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_HIPHOP, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SINGING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GAMING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_BTS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_METAL], 3: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ANIME, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GAMING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_TWITCH, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MANGA, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MEMES, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_STREAMER, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SOCIAL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_REDDIT], 4: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ART, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ANIME, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_DESIGN, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ANIMATION, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_3D, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_NFT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MANGA, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_DRAWING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_PHOTOGRAPHY], 5: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_PROGRAMMING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_TECH, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_CODING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GITHUB, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_OPENSOURCE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_JAVASCRIPT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_CRYPTOCURRENCY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_HARDWARE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SOFTWARE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_LINUX], 6: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_STUDY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_LANGUAGE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SCHOOL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ENGLISH, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_LEARNING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_HOMEWORK, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_PROGRAMMING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_COLLEGE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_STOCKS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE], 7: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FOOTBALL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_NBA, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_NFL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SOCCER, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_BASKETBALL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FORMULA1, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_PREMIER_LEAGUE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_RACING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_REDDIT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FANTASY_FOOTBALL], 8: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FASHION, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_STREETWEAR, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SNEAKERS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_CLOTHING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_REDDIT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YEEZY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SUPREME, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_HYPEBEAST, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_STYLE], 9: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_LGBTQ, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ANIME, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SOCIAL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FRIENDS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_COMMUNITY], 10: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FOOD, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_DISNEY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_BEVERAGE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SNACKS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_TRAVEL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_DISNEYWORLD], 11: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GYM, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_BODYBUILDING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_EXERCISE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_CALISTHENICS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MENTAL_HEALTH, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SELF_IMPROVEMENT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_EDUCATION, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_CROSSFIT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_NUTRITION, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SPORTS], 12: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_STOCKS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_TRADING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_INVESTING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_BITCOIN, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_CRYPTOCURRENCY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ETHEREUM, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_OPTIONS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_DEFI, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FOREX], 13: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GAMING, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_YOUTUBE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_TWITCH, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_COMMUNITY, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ANIME, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_EVENTS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SOCIAL, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MEMES], 43: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_EMOJI, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_EMOTES, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_NITRO, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ANIME, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_CUTE, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GIVEAWAYS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_AESTHETIC, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_ART, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MEMES], 49: [() => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_APPS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_BOTS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_DISCORD_BOT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_GIVEAWAYS, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_SUPPORT, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_FUN, () => _.default.Messages.SERVER_DISCOVERY_SUGGESTED_TAG_MEMES] }, m = ["en-GB"]; function N() { return _.default.getAvailableLocales().map(e => { let t; let { value: i, name: r } = e; try { t = n("333369")("@discordapp/common/images/flags/".concat(e.value, ".png").replace("@discordapp/common/images/flags/", "./")) } catch (e) { t = n("1474") } return "en-US" === i ? { value: i, label: _.default.Messages.ENGLISH_LANGUAGE, image: t } : { value: i, label: r, image: t } }).filter(e => !m.includes(e.value)) } N(); let p = _.default.getLanguages().filter(e => !m.includes(e.code)).map(e => "en-US" === e.code ? { ...e, name: _.default.Messages.en } : e), O = 40, C = 20; (s = u || (u = {})).GAME_RECOMMENDATIONS = "Game Recommendations", s.SERVER_RECOMMENDATIONS = "Server Recommendations", (a = d || (d = {}))[a.Activity = 0] = "Activity", a[a.Discover = 1] = "Discover", a[a.Education = 2] = "Education", a[a.Music = 3] = "Music", a[a.Science = 4] = "Science", a[a.Stage = 5] = "Stage", a[a.Television = 6] = "Television", a[a.Server = 7] = "Server", a[a.Quest = 8] = "Quest"; let R = { facebook: { presentation: "Facebook", baseUrl: "https://facebook.com" }, instagram: { presentation: "Instagram", baseUrl: "https://instagram.com" }, twitter: { presentation: "Twitter", baseUrl: "https://twitter.com" }, tiktok: { presentation: "TikTok", baseUrl: "https://tiktok.com" }, twitch: { presentation: "Twitch", baseUrl: "https://twitch.tv" }, patreon: { presentation: "Patreon", baseUrl: "https://patreon.com" }, reddit: { presentation: "Reddit", baseUrl: "https://reddit.com/r/" }, youtube: { presentation: "YouTube", baseUrl: "https://youtube.com" }, steamcommunity: { presentation: "Steam", baseUrl: "https://steamcommunity.com" }, soundcloud: { presentation: "SoundCloud", baseUrl: "https://soundcloud.com" }, bandcamp: { presentation: "Bandcamp", baseUrl: "https://bandcamp.com" }, github: { presentation: "GitHub", baseUrl: "https://github.com" }, etsy: { presentation: "Etsy", baseUrl: "https://etsy.com" } } }, 117496: function(e, t, n) { "use strict"; n.r(t), n.d(t, { makeAnalyticsID: function() { return r } }), n("757143"); var i = n("153832"); function r() { return (0, i.v4)().replace(/-/g, "") } }, 945124: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getClanDiscoveryAffinity: function() { return r } }); var i = n("137920"); function r(e, t) { let n = 0; return null != t.games && (n += 2 * t.games.filter(t => e.games.includes(t)).length), null != t.playstyle && (t.playstyle === e.playstyle ? n += 2 : i.PLAYSTYLE_GROUPS[e.playstyle] === i.PLAYSTYLE_GROUPS[t.playstyle] && (n += 1)), null != t.traits && (n += 2 * Array.from(t.traits).filter(t => e.traits.includes(t)).length), n += Math.random() } }, 231467: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClanDiscoveryCardView: function() { return k }, Wildcards: function() { return U } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("903788"), l = n("310665"), u = n("194565"), d = n("481060"), _ = n("442837"), c = n("239091"), E = n("835473"), I = n("970606"), T = n("905362"), f = n("603368"), S = n("353093"), h = n("169559"), A = n("114487"), m = n("214715"), N = n("550271"), p = n("246364"), O = n("937111"), C = n("703656"), R = n("271383"), g = n("594174"), L = n("778045"), v = n("355932"), D = n("981631"), M = n("308083"), y = n("689938"), P = n("449729"); function U(e) { let { wildcardDescriptors: t, primaryColor: n } = e, s = t.filter(e => e !== M.EMPTY_WILDCARD).join(", "), a = (0, d.useToken)(d.tokens.colors.BACKGROUND_FLOATING), o = (0, f.getAccessibleClanColor)(n, a.hex()), l = r.useRef(null), [u, _] = r.useState(!1); if (r.useEffect(() => { let e = l.current; null != e && null != e.offsetWidth && null != e.scrollWidth && _(e.offsetWidth < e.scrollWidth) }, []), 0 === s.length) return null; let c = null != o ? { color: o.css() } : void 0; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "text-secondary", className: P.clanInfoItem, children: "\xb7" }), (0, i.jsx)(d.Tooltip, { text: s, color: d.Tooltip.Colors.PRIMARY, shouldShow: u, children: e => (0, i.jsx)("span", { ...e, style: c, className: P.wildCardText, ref: l, children: s }) })] }) } function b(e) { let { description: t, expanded: n } = e; return null == t ? null : n ? (0, i.jsx)("div", { className: P.cardContentDescriptionSection, children: (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "text-muted", children: t }) }) : (0, i.jsx)("div", { className: P.cardContentDescriptionSection, children: (0, i.jsx)(d.Text, { className: P.cardContentDescriptionCollapsed, variant: "text-xs/normal", color: "text-muted", lineClamp: 4, children: t }) }) } function G(e) { let { traits: t, traitsToHighlight: n } = e, s = r.useMemo(() => null == n ? new Set : new Set(n), [n]), o = r.useCallback(e => (0, i.jsx)(m.default, { className: a()(P.thinTrait, { [P.selectedTrait]: s.has(e) }), text: e, selected: s.has(e) }, e), [s]); return (0, i.jsx)(v.default, { className: P.traitsContainer, items: t, renderItem: o, maxLines: 2, itemGapPx: 4 }) } function w(e) { let { hasPendingJoinRequest: t, atMaxMemberCapacity: n, isGuildMember: r } = e; if (t) return (0, i.jsxs)("div", { className: P.headerBadge, children: [(0, i.jsx)(l.HourglassIcon, { width: 12, height: 12 }), (0, i.jsx)(d.Text, { variant: "text-xs/medium", color: "text-normal", children: y.default.Messages.CLAN_CARD_BADGE_APPLIED })] }); if (r) return (0, i.jsxs)("div", { className: P.headerBadge, children: [(0, i.jsx)(o.CircleCheckIcon, { width: 12, height: 12, color: d.tokens.colors.STATUS_POSITIVE }), (0, i.jsx)(d.Text, { variant: "text-xs/medium", color: "text-normal", children: y.default.Messages.JOINED_GUILD })] }); if (n) return (0, i.jsxs)("div", { className: P.headerBadge, children: [(0, i.jsx)(u.LockIcon, { width: 12, height: 12 }), (0, i.jsx)(d.Text, { variant: "text-xs/medium", color: "text-normal", children: y.default.Messages.FULL })] }); return null } function k(e) { var t; let { clan: n, bannerComponent: s, expanded: o, isMember: l = !1, traitsToHighlight: u, prioritizedGameIds: _, className: c, showBrandingFooter: I = !1, bannerUrl: T, onlyAnimateIconOnHover: f = !1, hasPendingJoinRequest: m = !1, atMaxMemberCapacity: p = !1 } = e, { tag: O, badge: C, branding: { primaryColor: R, secondaryColor: g }, bannerHash: v } = n, D = (0, E.default)(n.games), k = (0, h.default)("clan_discovery_card"), [B, V] = r.useState(!1), x = r.useRef(null), [F, H] = r.useState(!1), Y = r.useCallback(() => { V(!0) }, []), j = r.useCallback(() => { V(!1) }, []), W = y.default.Messages.CLAN_DISCOVERY_MEMBER_COUNT.format({ count: n.memberCount }), K = null != T ? T : (0, S.getClanBannerUrl)(n.id, v), z = null == s && null == K ? { background: "linear-gradient(90deg, ".concat(R, ", ").concat(g, ")") } : void 0, Z = null != s ? s : null != K ? (0, i.jsx)("img", { alt: y.default.Messages.CLAN_LOOK_BANNER, src: K, className: P.bannerImage }) : null, X = r.useMemo(() => (0, M.getSortedTraits)(n.traits, u), [n.traits, u]); return r.useEffect(() => { let e = x.current; null != e && null != e.offsetWidth && null != e.scrollWidth && H(e.offsetWidth < e.scrollWidth) }, []), (0, i.jsxs)("div", { className: a()(P.card, c, { [P.cardStaticHeight]: !o }), onMouseEnter: Y, onMouseLeave: j, children: [(0, i.jsxs)("div", { className: P.cardBrandingHeader, style: z, children: [Z, (0, i.jsx)(w, { hasPendingJoinRequest: m, atMaxMemberCapacity: p, isGuildMember: l })] }), (0, i.jsxs)("div", { className: P.cardContent, children: [(0, i.jsxs)("div", { className: P.cardContentTitleSection, children: [(0, i.jsxs)("div", { className: P.cardNameAndTagWrapper, children: [(0, i.jsx)(A.ClanGuildIconSimple, { guildId: n.id, guildName: n.name, guildIcon: n.icon, iconSize: 64, className: P.clanIcon, animate: !f || B }), (0, i.jsx)("div", { className: P.clanTagChipletWrapper, children: (0, i.jsx)(d.Tooltip, { text: y.default.Messages.CLAN_DISCOVERY_CARD_TAG_TOOLTIP, position: "top", shouldShow: !l && k, children: e => (0, i.jsxs)("div", { ...e, className: P.clanTagChiplet, children: [(0, i.jsx)(N.ClanBadge, { width: 16, height: 16, badge: C.badgeKind, primaryTintColor: C.primaryColor, secondaryTintColor: C.secondaryColor }), (0, i.jsx)(d.Text, { variant: "text-xs/medium", color: "text-primary", children: O })] }) }) })] }), (0, i.jsx)(d.Heading, { variant: "heading-md/medium", color: "header-primary", lineClamp: 1, children: (0, i.jsx)(d.Tooltip, { text: n.name, color: d.Tooltip.Colors.PRIMARY, shouldShow: F, children: e => (0, i.jsx)("span", { ...e, ref: x, className: P.nameText, children: n.name }) }) }), (0, i.jsxs)("div", { className: P.clanInfoRow, children: [(0, i.jsx)(d.Text, { variant: "text-xxs/normal", className: P.clanInfoItem, children: (0, i.jsx)("span", { role: "img", "aria-label": y.default.Messages.CLAN_DISCOVERY_PLAYSTYLE_ARIA_LABEL, children: "\uD83C\uDFAE" }) }), (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "text-secondary", className: P.clanInfoItem, children: null !== (t = (0, M.getPlaystyleTitle)(n.playstyle)) && void 0 !== t ? t : y.default.Messages.CLAN_DISCOVERY_UNKNOWN_PLAYSTYLE }), (0, i.jsx)(U, { wildcardDescriptors: n.wildcardDescriptors, primaryColor: n.branding.primaryColor })] })] }), (0, i.jsx)(b, { description: n.description, expanded: o }), (0, i.jsx)(G, { traits: X, traitsToHighlight: u })] }), (0, i.jsxs)("div", { className: P.cardFooter, children: [(0, i.jsx)("div", { className: P.cardFooterInfo, children: (0, i.jsx)("div", { className: P.cardFooterMembers, children: (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "text-muted", children: W }) }) }), (0, i.jsx)("div", { className: P.cardFooterGames, children: (0, i.jsx)(L.default, { games: D, prioritizedGameIds: _ }) })] }), I && (0, i.jsx)("div", { className: P.cardBrandingFooter, style: { background: "linear-gradient(90deg, ".concat(R, ", ").concat(g, ")") } })] }) } t.default = function(e) { let { style: t, prioritizedGameIds: s, ...a } = e, { clan: o, affinity: l, index: u, source: E } = a, f = (0, _.useStateFromStores)([g.default], () => g.default.getCurrentUser()), S = (0, _.useStateFromStores)([R.default], () => R.default.isMember(o.id, null == f ? void 0 : f.id), [o, f]), h = (0, _.useStateFromStores)([O.default], () => { var e; return (null === (e = O.default.getRequest(o.id)) || void 0 === e ? void 0 : e.applicationStatus) === p.GuildJoinRequestApplicationStatuses.SUBMITTED }), A = o.memberCount >= M.MAX_CLAN_MEMBERS, m = r.useCallback(() => { let e = null != O.default.getRequest(o.id); if ((0, I.trackClanDiscoveryCardClicked)({ guildId: o.id, isMember: S, hasJoinRequest: e, affinity: l, index: u }), S) { (0, C.transitionToGuild)(o.id); return } if (e) { (0, C.transitionTo)(D.Routes.GUILD_MEMBER_VERIFICATION(o.id)); return }(0, T.openClanApplyFlow)(o.id, o, { source: E, location: D.AnalyticsLocations.CLAN_DISCOVERY_CARD }, s) }, [o, S, l, u, E, s]), N = r.useCallback(e => { (0, c.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("5577").then(n.bind(n, "955120")); return t => (0, i.jsx)(e, { ...t, guildId: o.id }) }) }, [o.id]); return (0, i.jsx)(d.Clickable, { onClick: m, className: P.clickableCard, style: t, onContextMenu: N, children: (0, i.jsx)(k, { ...a, isMember: S, prioritizedGameIds: s, showBrandingFooter: !0, hasPendingJoinRequest: h, atMaxMemberCapacity: A }) }) } }, 778045: function(e, t, n) { "use strict"; n.r(t), n("733860"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("353093"), o = n("785008"); function l(e) { let { games: t } = e; return (0, i.jsx)("div", { className: o.tooltipGames, children: t.map(e => { let t = e.getIconURL(24); return null == t ? null : (0, i.jsxs)("div", { className: o.tooltipGame, children: [(0, i.jsx)("div", { className: o.tooltipGameImageContainer, children: (0, i.jsx)("img", { src: t, alt: e.name, className: o.tooltipGameImage }) }), (0, i.jsx)(s.Text, { variant: "text-xs/medium", color: "text-normal", className: o.tooltipGameName, children: e.name })] }, e.id) }) }) } t.default = r.memo(function(e) { let { games: t, prioritizedGameIds: n } = e, u = t.filter(e => null != e && null != e.icon); if (null != n && n.size > 0) { for (let e = 0; e < u.length; e++) if (n.has(u[e].id)) { let t = u.splice(e, 1)[0]; u.unshift(t) } } let d = u.slice(0, 3), _ = r.useMemo(() => { let e = u[3]; if (null == e) return null; let t = e.getIconURL(24); if (null == t) return null; if (u.length > 4) { let n = u.slice(3), r = (0, a.formatSelectionList)(n.map(e => e.name)); return (0, i.jsx)(s.Tooltip, { "aria-label": null != r ? r : "", text: (0, i.jsx)(l, { games: n }), position: "bottom", children: r => (0, i.jsxs)("div", { ...r, className: o.gameImageContainer, children: [(0, i.jsx)("img", { src: t, alt: e.name, className: o.gameImage }), (0, i.jsx)("div", { className: o.extraGameCount, children: (0, i.jsx)(s.Text, { variant: "text-xs/medium", color: "always-white", children: "+".concat(n.length) }) })] }) }) } return (0, i.jsx)(s.Tooltip, { text: e.name, position: "bottom", children: n => (0, i.jsx)("div", { ...n, className: o.gameImageContainer, children: (0, i.jsx)("img", { src: t, alt: e.name, className: o.gameImage }) }) }) }, [u]); return (0, i.jsxs)(i.Fragment, { children: [d.map(e => { let t = e.getIconURL(24); return null == t ? null : (0, i.jsx)(s.Tooltip, { text: e.name, position: "bottom", children: n => (0, i.jsx)("div", { ...n, className: o.gameImageContainer, children: (0, i.jsx)("img", { src: t, alt: e.name, className: o.gameImage }) }) }, e.id) }), _] }) }) }, 355932: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("393903"), u = n("689938"), d = n("691553"); function _(e) { let { items: t, renderItem: n } = e; return (0, i.jsx)(o.Tooltip, { text: (0, i.jsx)("div", { className: d.tooltip, children: t.map(n) }), "aria-label": "overflow", children: e => (0, i.jsx)("div", { ...e, children: n(u.default.Messages.CLAN_DISCOVERY_TRAIT_OVERFLOW.format({ count: t.length })) }) }) } t.default = function(e) { let { className: t, items: n, renderItem: s, itemGapPx: o = 0, maxLines: c } = e, { lastVisibleIndex: E, containerRef: I, itemsRef: T, overflowItemsRef: f } = function(e) { let { itemGapPx: t, items: n, maxLines: i } = e, [s, a] = r.useState(0), [o, u] = r.useState(0), d = r.useRef([]), _ = r.useRef(0), c = r.useRef(0), E = r.useRef(null), I = r.useRef(null), T = (0, l.useResizeObserver)(e => { let t = null == e ? void 0 : e.getBoundingClientRect().width; null != t && u(t) }); return r.useLayoutEffect(() => { var e; if (null == E.current || null == I.current) return; d.current.length = n.length, E.current.childNodes.forEach((e, t) => { let { width: n } = e.getBoundingClientRect(); d.current[t] = n }), _.current = null !== (e = I.current.getBoundingClientRect().width) && void 0 !== e ? e : 0; let r = function(e) { let { items: t, maxLines: n, itemWidths: i, itemGapPx: r, containerWidth: s, overflowWidth: a } = e, o = 0, l = 0, u = 0; for (let e = 0; e < t.length; e++) { let d = i[e]; if (isNaN(d) || d > s) continue; let _ = o === n - 1, c = e === t.length - 1; if (!(l + d + (_ && !c ? a + r : 0) < s)) { if (_) break; o++, l = 0 } u = e, l += d + r } return u }({ items: n, maxLines: i, itemGapPx: t, containerWidth: o, itemWidths: d.current, overflowWidth: _.current }); r !== c.current && (c.current = r, a(e => e + 1)) }, [o, t, n, i]), r.useMemo(() => ({ lastVisibleIndex: c.current, containerRef: T, itemsRef: E, overflowItemsRef: I, version: s }), [T, s]) }({ items: n, itemGapPx: o, maxLines: c }), S = r.useMemo(() => n.slice(0, E + 1), [n, E]), h = r.useMemo(() => n.slice(E + 1), [n, E]); return (0, i.jsxs)("div", { className: a()(t, d.items), ref: I, children: [(0, i.jsxs)("div", { "aria-hidden": !0, className: d.measurements, children: [(0, i.jsx)("div", { className: d.itemMeasurements, ref: T, children: n.map(s) }), (0, i.jsx)("div", { className: d.overflowMeasurement, ref: f, children: s(u.default.Messages.CLAN_DISCOVERY_TRAIT_OVERFLOW.format({ count: Number("1".concat(n.length)) })) })] }), S.map(s), h.length > 0 && (0, i.jsx)(_, { items: h, renderItem: s })] }) } }, 921944: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ContentDismissActionType: function() { return i }, DismissibleContentGroupName: function() { return r } }), (s = i || (i = {})).PRIMARY = "primary", s.SECONDARY = "secondary", s.DISMISS = "dismiss", s.AUTO = "auto", s.AUTO_DISMISS = "auto_dismiss", s.TAKE_ACTION = "take_action", s.USER_DISMISS = "user_dismiss", s.USER_DISMISS_ALL = "user_dismiss_all", s.UNKNOWN = "unknown", (a = r || (r = {})).GUILD_HEADER_TOOLTIPS = "GUILD_HEADER_TOOLTIPS", a.CHANNEL_NOTICES = "CHANNEL_NOTICES", a.CALL_CHAT_BUTTON = "CALL_CHAT_BUTTON", a.GUILD_FEED_TOP = "GUILD_FEED_TOP", a.MAIN_VIEW_TOOLTIPS = "MAIN_VIEW_TOOLTIPS", a.CHANNEL_HEADER_CALL_BUTTON_TOOLTIPS = "CHANNEL_HEADER_CALL_BUTTON_TOOLTIPS", a.YOU_TAB_ONBOARDING = "YOU_TAB_ONBOARDING", a.SUPER_REACTIONS_SPARKLES = "SUPER_REACTIONS_SPARKLES", a.NOTICE_BAR = "NOTICE_BAR", a.PROFILE_DRAWER_HEADER = "PROFILE_DRAWER_HEADER", a.GUILD_TAKEOVER_MODAL = "GUILD_TAKEOVER_MODAL", a.SIDEBAR = "SIDEBAR", a.MEMBER_LIST_HEADER = "MEMBER_LIST_HEADER", a.APP_LAUNCHER_ONBOARDING = "APP_LAUNCHER_ONBOARDING" }, 261376: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CONTENT_TYPES_WITH_BYPASS_FATIGUE: function() { return r } }), n("47120"); var i = n("524437"); let r = new Set([i.DismissibleContent.APPLICATION_COMMAND_TOOLTIP, i.DismissibleContent.NOW_PLAYING_CONSENT_CARD, i.DismissibleContent.GUILD_INSIGHTS_ACCESS_RATE_NEW, i.DismissibleContent.FORUM_CHANNEL_UPSELL_MODAL, i.DismissibleContent.FORUM_CHANNEL_HELPER_CARD, i.DismissibleContent.AUTH_SESSIONS_NEW, i.DismissibleContent.COMMANDS_MIGRATION_UPSELL_MODAL, i.DismissibleContent.HUB_BACK_TO_SCHOOL_UPSELL, i.DismissibleContent.CHANNEL_BROWSER_NUX, i.DismissibleContent.BLACK_FRIDAY_2022_BOGO_ANNOUNCEMENT_MODAL, i.DismissibleContent.GG_ANNOUNCEMENT, i.DismissibleContent.GUILD_ONBOARDING_UPSELL_MODAL, i.DismissibleContent.SEASONAL_GIFTING_COACHMARK_2022, i.DismissibleContent.CLIENT_THEMES_SETTINGS_BADGE, i.DismissibleContent.CLIENT_THEMES_SPARKLE_PREVIEW, i.DismissibleContent.QUEST_1_COMPLETION_TOOLTIP, i.DismissibleContent.SOUNDBOARD_VOLUME_EDUCATION, i.DismissibleContent.REMIXING_ENTRYPOINT_EDUCATION_UPSELLS_MOBILE, i.DismissibleContent.GUEST_VOICE_INVITES_MENU_ITEM_NEW_BADGE, i.DismissibleContent.CUSTOM_CALL_SOUNDS_PICKER_UPSELL, i.DismissibleContent.CLIPS_ONBOARDING_CLIP_BUTTON_COACHMARK, i.DismissibleContent.CUSTOM_APP_ICONS_NEW_BADGE, i.DismissibleContent.DEKSTOP_CUSTOM_APP_ICON_BADGE, i.DismissibleContent.WHATS_NEW_AVATAR_DECOS_FLIP, i.DismissibleContent.WHATS_NEW_PROFILE_EFFECTS_FLIP, i.DismissibleContent.RECURRING_CONTACT_SYNC_PROMPT, i.DismissibleContent.WHATS_NEW_AVATAR_DECOS_NOTIF_BADGE, i.DismissibleContent.WHATS_NEW_PROFILE_EFFECTS_NOTIF_BADGE, i.DismissibleContent.NUX_GUILD_CHANNEL_EXPLAINER, i.DismissibleContent.SUPER_REACTION_TOGGLE_EDUCATION_MOBILE, i.DismissibleContent.SUPER_REACTION_TOGGLE_EDUCATION_DESKTOP, i.DismissibleContent.FRIEND_FINDER_CONTACTS_IN_NOTIFICATIONS, i.DismissibleContent.VOICE_CALL_BG_PICKER_NEW_BADGE, i.DismissibleContent.TENURE_REWARD_PENDING, i.DismissibleContent.TENURE_REWARD_REDEEMABLE, i.DismissibleContent.ACTIVITIES_CHAT_MENU_NEW_BADGE, i.DismissibleContent.ACTIVITIES_CHAT_BUTTON_NUX_V2, i.DismissibleContent.TENURE_REWARD_REDEEMABLE_CONFETTI, i.DismissibleContent.APP_LAUNCHER_ONBOARDING_ACTIVITIES_BANNER, i.DismissibleContent.APP_LAUNCHER_ONBOARDING_APPS_BANNER, i.DismissibleContent.APP_LAUNCHER_ONBOARDING_BOTS_BANNER, i.DismissibleContent.PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_GDM_DM_BADGE, i.DismissibleContent.PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_COACHMARK, i.DismissibleContent.PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_GUILD_BADGE, i.DismissibleContent.PREMIUM_SUBSCRIPTION_APRIL_MARKETING_DECO_TOOLTIP, i.DismissibleContent.CHANNEL_LIST_CLAN_ADMIN_UPSELL, i.DismissibleContent.GUILD_LIST_CLAN_ADMIN_UPSELL, i.DismissibleContent.BRAND_REFRESH_NEW_BADGE, i.DismissibleContent.BRAND_REFRESH_CLIENT_THEME_BADGE, i.DismissibleContent.APP_LAUNCHER_USER_APP_BETA_NOTICE, i.DismissibleContent.PRIDE_ICONS_APPEARANCE_BADGE, i.DismissibleContent.QUEST_HOME_FRIENDS_LIST_NEW_BADGE, i.DismissibleContent.WHATS_NEW_APP_STYLES_JUNE_2024_FLIP, i.DismissibleContent.WHATS_NEW_REFERRAL_PROGRAM_FLIP, i.DismissibleContent.WHATS_NEW_APP_STYLES_JUNE_2024_NITRO_BADGE, i.DismissibleContent.WHATS_NEW_REFERRAL_PROGRAM_NITRO_BADGE, i.DismissibleContent.WHATS_NEW_SERVER_PROFILE_FLIP, i.DismissibleContent.WHATS_NEW_SERVER_PROFILE_BADGE]) }, 883904: function(e, t, n) { "use strict"; n.r(t), n.d(t, { handleDCDismissed: function() { return s }, handleDCShownToUser: function() { return r }, overrideDismissibleContentFramework: function() { return o }, resetDismissibleContentFrameworkStore: function() { return a } }); var i = n("570140"); let r = e => { i.default.dispatch({ type: "DCF_HANDLE_DC_SHOWN", dismissibleContent: e }) }, s = e => { i.default.dispatch({ type: "DCF_HANDLE_DC_DISMISSED", dismissibleContent: e }) }, a = () => { i.default.dispatch({ type: "DCF_RESET" }) }, o = e => { i.default.dispatch({ type: "DCF_DAILY_CAP_OVERRIDE", value: e }) } }, 68985: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("626135"), o = n("261376"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = { numberOfDCsShownToday: 0, dailyCapPeriodStart: null, dismissibleContentSeenDuringSession: new Set, dailyCapOverridden: !1, renderedAtTimestamps: new Map, lastDCDismissed: null }; class _ extends(i = r.default.PersistedStore) { initialize(e) { if (null != e) { var t; d.numberOfDCsShownToday = null !== (t = e.numberOfDCsShownToday) && void 0 !== t ? t : 0, d.dailyCapPeriodStart = e.dailyCapPeriodStart, d.dailyCapOverridden = e.dailyCapOverridden } d.dismissibleContentSeenDuringSession = new Set, d.lastDCDismissed = null } getState() { return d } get dailyCapOverridden() { return d.dailyCapOverridden } get lastDCDismissed() { return d.lastDCDismissed } getRenderedAtTimestamp(e) { return d.renderedAtTimestamps.get(e) } hasUserHitDCCap(e) { if (null != e && (o.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(e) || d.dailyCapOverridden) || null != e && d.dismissibleContentSeenDuringSession.has(e)) return !1; let t = new Date; return t.setHours(0, 0, 0, 0), null != d.dailyCapPeriodStart && d.dailyCapPeriodStart < t.getTime() && (d.numberOfDCsShownToday = 0, d.dailyCapPeriodStart = null), d.numberOfDCsShownToday >= 3 } } u(_, "displayName", "DismissibleContentFrameworkStore"), u(_, "persistKey", "DismissibleContentFrameworkStore"), u(_, "migrations", [e => ({ ...e })]), t.default = new _(s.default, { LOGOUT: function() { d = { ...d, dismissibleContentSeenDuringSession: new Set, renderedAtTimestamps: new Map } }, DCF_DAILY_CAP_OVERRIDE: function(e) { let { value: t } = e; d.dailyCapOverridden = t }, DCF_HANDLE_DC_SHOWN: function(e) { let { dismissibleContent: t } = e, n = new Date; if (d.renderedAtTimestamps.set(t, n.getTime()), !o.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(t) && !d.dailyCapOverridden) { if (!d.dismissibleContentSeenDuringSession.has(t)) { if (d.dismissibleContentSeenDuringSession.add(t), null == d.dailyCapPeriodStart) { let e = new Date; e.setHours(0, 0, 0, 0), d.dailyCapPeriodStart = e.getTime() } d.numberOfDCsShownToday += 1, d.numberOfDCsShownToday > 3 && a.default.track(l.AnalyticEvents.DCF_CAP_EXCEEDED, { cap_type: "daily_cap", dismissible_content: t, shown_dcs: d.numberOfDCsShownToday }) } } }, DCF_HANDLE_DC_DISMISSED: function(e) { let { dismissibleContent: t } = e; d.lastDCDismissed = t, d.renderedAtTimestamps.delete(t) }, DCF_RESET: function() { d.dailyCapPeriodStart = null, d.numberOfDCsShownToday = 0, d.dismissibleContentSeenDuringSession = new Set, d.lastDCDismissed = null } }) }, 952193: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CONTENT_TYPES_WITH_BYPASS_HOLDOUT: function() { return r } }), n("47120"); var i = n("524437"); let r = new Set([i.DismissibleContent.AUTH_SESSIONS_NEW, i.DismissibleContent.CHANNEL_NOTICE_CLYDE_NUX, i.DismissibleContent.CHANNEL_NOTICE_QUICKSWITCHER, i.DismissibleContent.NAGBAR_NOTICE_MFA_SMS_BACKUP, i.DismissibleContent.NAGBAR_NOTICE_POMELO, i.DismissibleContent.VOICE_CHANNEL_EFFECTS_REDUCED_MOTION_TOOLTIP, i.DismissibleContent.SEEN_OLD_DESIGN, i.DismissibleContent.SEEN_LAUNCH_WELCOME]) }, 211644: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addCandidateContent: function() { return h }, default: function() { return R }, getCurrentlyShownCounts: function() { return O }, isContentShown: function() { return m }, removeCandidateContent: function() { return A }, reset: function() { return C }, useIsAnyContentShown: function() { return p }, useIsContentShown: function() { return N } }), n("47120"), n("733860"); var i = n("652874"), r = n("261376"); let s = new(n("499303")).TaskRunner, a = () => ({ candidates: new Map, shownFatigableCandidate: null, prevFatigableCandidate: null, recentlyShown: [], currentlyShown: new Set, currentlyShownGroup: new Set, lastWinnerTime: 0 }), o = (0, i.default)(a), l = e => ({ ...e, candidates: new Map(e.candidates), currentlyShown: new Set(e.currentlyShown), currentlyShownGroup: new Set(e.currentlyShownGroup) }), u = (e, t) => { var n; return null == t ? e : (null != t.content && e.currentlyShown.delete(t.content), null != t.groupName && e.currentlyShownGroup.delete(t.groupName), (null === (n = e.shownFatigableCandidate) || void 0 === n ? void 0 : n.content) === t.content && (e.shownFatigableCandidate = null), e) }, d = (e, t) => { var n, i; if (null == t) return e; e.currentlyShown.add(t.content); let s = e.recentlyShown.filter(e => e !== t.content); return s.unshift(t.content), s.splice(5), e.recentlyShown = s, null != t.groupName && e.currentlyShownGroup.add(t.groupName), !r.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(t.content) && (e.shownFatigableCandidate = t, (null === (i = e.prevFatigableCandidate) || void 0 === i ? void 0 : i.content) !== t.content && (e.prevFatigableCandidate = t, e.lastWinnerTime = new Date().getTime())), null === (n = t.onAdded) || void 0 === n || n.call(t), e }, _ = (e, t) => (e.candidates.set(t.content, t), e), c = (e, t) => (e.candidates.delete(t.content), e), E = (e, t) => d(u(e, e.shownFatigableCandidate), t), I = e => null != e.prevFatigableCandidate ? e.candidates.get(e.prevFatigableCandidate.content) : void 0, T = e => { let t = [...e.candidates.keys()]; return null !== e.prevFatigableCandidate && e.candidates.has(e.prevFatigableCandidate.content) && e.candidates.size > 1 && (t = t.filter(t => { var n; return t !== (null === (n = e.prevFatigableCandidate) || void 0 === n ? void 0 : n.content) })), e.candidates.get(t[Math.floor(Math.random() * t.length)]) }, f = e => null != e.prevFatigableCandidate && e.candidates.has(e.prevFatigableCandidate.content) && null == e.shownFatigableCandidate, S = e => { if (0 === e.candidates.size) return e; let t = new Date().getTime() - e.lastWinnerTime > 3e5; if (f(e) && !t) return s.unschedule(), E(e, I(e)); if (null != e.shownFatigableCandidate && !t || s.scheduled()) return e; let n = new Date().getTime(); return null == e.shownFatigableCandidate && n - e.lastWinnerTime < 36e5 ? e : (s.schedule(() => { o.setState(e => { let t = l(e); return E(t, T(t)) }) }, 250), e) }, h = e => { let t = r.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(e.content); o.setState(n => { let i = l(n); return t ? d(i, e) : S(_(i, e)) }) }, A = (e, t) => { o.setState(n => { let i = l(n); return t ? S(u(c(i, e), e)) : u(c(i, e), e) }) }, m = e => o.getState().currentlyShown.has(e), N = e => o(t => t.currentlyShown.has(e)), p = e => o(t => e.some(e => t.currentlyShown.has(e))), O = () => { let e = [...o.getState().currentlyShown].filter(e => !r.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(e)).length; return [o.getState().currentlyShown.size, e] }, C = () => { o.setState(a), s.unschedule() }; function R(e) { return o(e) } }, 605236: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isDismissibleContentDismissed: function() { return h }, markDismissibleContentAsDismissed: function() { return N }, requestMarkDismissibleContentAsShown: function() { return m }, useIsDismissibleContentDismissed: function() { return A } }), n("47120"); var i = n("442837"), r = n("524437"), s = n("561746"), a = n("675478"), o = n("581883"), l = n("626135"), u = n("915486"), d = n("261376"), _ = n("883904"), c = n("68985"), E = n("952193"), I = n("211644"), T = n("57207"), f = n("921944"), S = n("981631"); function h(e) { var t; if ((0, T.disableNewUserDismissibleContent)(e)) return !0; let n = null === (t = o.default.settings.userContent) || void 0 === t ? void 0 : t.dismissedContents; return null != n && (0, u.hasBit)(n, e) } function A(e) { return (0, i.useStateFromStores)([o.default], () => h(e)) } function m(e, t, n) { if (!((0, I.isContentShown)(e) || c.default.hasUserHitDCCap(e) || function(e) { let t = E.CONTENT_TYPES_WITH_BYPASS_HOLDOUT.has(e), { enabled: n } = s.default.getCurrentConfig({ location: "isUserSubjectToDCFHoldout" }, { autoTrackExposure: !t }); return n && !t }(e))) !n && (0, I.addCandidateContent)({ content: e, groupName: null == t ? void 0 : t.groupName, onAdded: () => { var n; let [i, s] = (0, I.getCurrentlyShownCounts)(); (0, _.handleDCShownToUser)(e), l.default.track(S.AnalyticEvents.DISMISSIBLE_CONTENT_SHOWN, { type: r.DismissibleContent[e], content_count: i, fatigable_content_count: s, group_name: null == t ? void 0 : t.groupName, bypass_fatigue: d.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(e), guild_id: null == t ? void 0 : t.guildId }), null == t || null === (n = t.onShown) || void 0 === n || n.call(t) } }) } async function N(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; ((0, I.isContentShown)(e) || t.forceTrack) && function(e, t) { var n; let [i] = (0, I.getCurrentlyShownCounts)(), s = c.default.getRenderedAtTimestamp(e), a = new Date, o = null == s ? null : a.getTime() - s; l.default.track(S.AnalyticEvents.DISMISSIBLE_CONTENT_DISMISSED, { type: r.DismissibleContent[e], action: null !== (n = null == t ? void 0 : t.dismissAction) && void 0 !== n ? n : f.ContentDismissActionType.UNKNOWN, content_count: i, group_name: null == t ? void 0 : t.groupName, bypass_fatigue: d.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(e), guild_id: null == t ? void 0 : t.guildId, shown_duration: o }) }(e, t), (0, _.handleDCDismissed)(e), await (0, a.addDismissedContent)(e); let n = !c.default.hasUserHitDCCap(); (0, I.removeCandidateContent)({ content: e, groupName: null == t ? void 0 : t.groupName }, n) } }, 57207: function(e, t, n) { "use strict"; n.r(t), n.d(t, { disableNewUserDismissibleContent: function() { return _ }, useNewUserDismissibleContent: function() { return d } }); var i = n("399606"), r = n("524437"), s = n("314897"), a = n("70956"), o = n("709054"); let l = { [r.DismissibleContent.MJ_NEW_USER_CHAT_BAR]: 0, [r.DismissibleContent.NUX_GUILD_CHANNEL_EXPLAINER]: 0, [r.DismissibleContent.SEEN_LAUNCH_WELCOME]: 0, [r.DismissibleContent.SEEN_OLD_DESIGN]: 0, [r.DismissibleContent.REFERRAL_PROGRAM_PROGRESS_BAR_TOGGLE]: 0, [r.DismissibleContent.WHATS_NEW_APP_STYLES_JUNE_2024_FLIP]: 0, [r.DismissibleContent.WHATS_NEW_REFERRAL_PROGRAM_FLIP]: 0, [r.DismissibleContent.WHATS_NEW_APP_STYLES_JUNE_2024_NITRO_BADGE]: 0, [r.DismissibleContent.WHATS_NEW_REFERRAL_PROGRAM_NITRO_BADGE]: 0, [r.DismissibleContent.WHATS_NEW_SERVER_PROFILE_FLIP]: 0, [r.DismissibleContent.WHATS_NEW_SERVER_PROFILE_BADGE]: 0 }, u = a.default.Millis.DAY; function d(e) { let t = (0, i.useStateFromStores)([s.default], () => s.default.getId()), n = null != t ? o.default.age(t) : 0; return e.filter(e => { var t; return n > (null !== (t = l[e]) && void 0 !== t ? t : u) }) } function _(e) { var t; let n = null != s.default.getId() ? o.default.age(s.default.getId()) : 0; return n < (null !== (t = l[e]) && void 0 !== t ? t : u) } }, 499303: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TaskRunner: function() { return i } }); class i { schedule(e, t) { this.unschedule(), this.timeoutId = setTimeout(() => { this.timeoutId = null, e() }, t) } unschedule() { this.scheduled() && (clearTimeout(this.timeoutId), this.timeoutId = null) } scheduled() { return null !== this.timeoutId } constructor() { var e, t, n; e = this, n = null, (t = "timeoutId") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 706140: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useGetDismissibleContent: function() { return E } }); var i = n("470079"), r = n("442837"), s = n("581883"), a = n("914010"), o = n("915486"), l = n("68985"), u = n("211644"), d = n("605236"), _ = n("57207"), c = n("526761"); function E(e, t, n) { let E = (0, r.useStateFromStores)([s.default], () => { var e; return null === (e = s.default.settings.userContent) || void 0 === e ? void 0 : e.dismissedContents }), I = (0, r.useStateFromStores)([a.default], () => a.default.getGuildId()), T = (0, _.useNewUserDismissibleContent)(e), f = null; s.default.hasLoaded(c.UserSettingsTypes.PRELOADED_USER_SETTINGS) ? f = T.find(e => null == E || !(0, o.hasBit)(E, e)) : null != E && (f = T.find(e => !(0, o.hasBit)(E, e))); let S = (0, u.default)(e => null != f && e.currentlyShown.has(f)), h = (0, r.useStateFromStores)([l.default], () => null != f && l.default.hasUserHitDCCap(f)); i.useEffect(() => { if (null != f) return (0, d.requestMarkDismissibleContentAsShown)(f, { groupName: t, guildId: I }, n), () => { if (null == f) return; let e = !l.default.hasUserHitDCCap(); (0, u.removeCandidateContent)({ content: f, groupName: t }, e) } }, [f, t, I, h, n]); let A = i.useCallback((e, n) => { null != f && (0, d.markDismissibleContentAsDismissed)(f, { dismissAction: e, groupName: t, guildId: I, forceTrack: n }) }, [f, t, I]); return [S && null != f ? f : null, A] } }, 243778: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c }, useSelectedDismissibleContent: function() { return _ } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("399606"), a = n("237997"), o = n("261376"), l = n("68985"), u = n("706140"), d = n("921944"); function _(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = (0, s.useStateFromStores)([a.default], () => !!__OVERLAY__ && a.default.isInstanceUILocked()), [_, c] = (0, u.useGetDismissibleContent)(e, t, i), E = !n && null != _ && !o.CONTENT_TYPES_WITH_BYPASS_FATIGUE.has(_); return r.useEffect(() => () => { E && l.default.lastDCDismissed !== _ && c(d.ContentDismissActionType.AUTO_DISMISS, !0) }, [E, c, _]), [_, c] } function c(e) { let { contentTypes: t, children: n, groupName: r, bypassAutoDismiss: s } = e, [a, o] = _(t, r, s); return (0, i.jsx)(i.Fragment, { children: n({ visibleContent: a, markAsDismissed: o }) }) } }, 25733: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("433517"), s = n("481060"), a = n("704587"), o = n("920133"), l = n("338096"); t.default = { openDmSettingsUpsellModal(e) { if (!(0, a.isEligibleForDmSettingsUpsell)({ location: "DmSettingsUpsellManager" })) return; let t = r.Storage.get(l.DM_SETTINGS_UPSELL_LAST_SHOWN_KEY), u = Date.now(); null == t || u - t > l.DM_SETTINGS_UPSELL_LAST_SHOWN_MAX_TIME_MS ? (r.Storage.set(l.DM_SETTINGS_UPSELL_LAST_SHOWN_KEY, u), (0, s.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("35489")]).then(n.bind(n, "582712")); return n => (0, i.jsx)(t, { ...n, guildId: e }) })) : (0, o.trackEvent)(o.DmUpsellActionTypes.SUPPRESSED_BY_COOLDOWN, e) } } }, 338096: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DM_SETTINGS_UPSELL_LAST_SHOWN_KEY: function() { return i }, DM_SETTINGS_UPSELL_LAST_SHOWN_MAX_TIME_MS: function() { return r } }); let i = "dmSettingsUpsellLastShown", r = 6048e5 }, 704587: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DmSettingsUpsellExperiment: function() { return i }, isEligibleForDmSettingsUpsell: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_dm_settings_upsell", label: "DM Settings Upsell", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable DM Settings Upsell (with upsell threshold at 2 rejected MRs)", config: { enabled: !0 } }, { id: 2, label: "Enable DM Settings Upsell (with upsell threshold at 3 rejected MRs)", config: { enabled: !0 } }] }); function r(e) { let { location: t, autoTrackExposure: n = !1 } = e; return i.getCurrentConfig({ location: t }, { autoTrackExposure: n }).enabled } }, 401416: function(e, t, n) { "use strict"; n.r(t), n.d(t, { acknowledgeDmSettingsUpsell: function() { return u } }), n("47120"); var i = n("544891"), r = n("147913"), s = n("25733"), a = n("704587"), o = n("981631"); class l extends r.default { intialize() { a.DmSettingsUpsellExperiment.getCurrentConfig({ location: "initializer" }, { autoTrackExposure: !1 }) } handleDmSettingsUpsellShow(e) { s.default.openDmSettingsUpsellModal(e.guildId) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { DM_SETTINGS_UPSELL_SHOW: this.handleDmSettingsUpsellShow }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } function u(e) { return i.HTTP.post({ url: o.Endpoints.DM_SETTINGS_UPSELL_ACK(e) }) } t.default = new l }, 920133: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DmUpsellActionTypes: function() { return r }, trackEvent: function() { return o } }); var i, r, s = n("626135"), a = n("981631"); function o(e, t) { s.default.track(a.AnalyticEvents.DM_SETTINGS_UPSELL_ACTION, { action: e, guild_id: t }) }(i = r || (r = {})).MODAL_VIEWED = "modal_viewed", i.MODAL_DISMISSED = "modal_dismissed", i.MODAL_GUILD_SETTINGS_CLICKED = "modal_guild_settings_clicked", i.SUPPRESSED_BY_COOLDOWN = "suppressed_by_cooldown", i.MODAL_DISABLED_DMS = "modal_disabled_dms" }, 149203: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { EMOJI_PICKER_TAB_ID: function() { return I }, EMOJI_PICKER_TAB_PANEL_ID: function() { return E }, EMOJI_ROW_SIZE: function() { return m }, EMOJI_SIZE_MAP: function() { return A }, EmojiCategories: function() { return r }, EmojiCategoryTypes: function() { return i }, EmojiSize: function() { return a }, EmojiSubCategory: function() { return s }, GIF_PICKER_TAB_ID: function() { return h }, GIF_PICKER_TAB_PANEL_ID: function() { return S }, GRID_NAVIGATOR_ID: function() { return _ }, INACTIVE_CATEGORY_INDEX: function() { return c }, SOUNDBOARD_PICKER_TAB_ID: function() { return f }, SOUNDBOARD_PICKER_TAB_PANEL_ID: function() { return T } }), (o = i || (i = {})).GUILD = "GUILD", o.UNICODE = "UNICODE", o.RECENT = "RECENT", o.CUSTOM = "CUSTOM", o.SEARCH_RESULTS = "SEARCH_RESULTS", o.FAVORITES = "FAVORITES", o.TOP_GUILD_EMOJI = "TOP_GUILD_EMOJI", o.PREMIUM_UPSELL = "PREMIUM_UPSELL"; let _ = "emoji-picker-grid"; (l = r || (r = {})).RECENT = "recent", l.FAVORITES = "favorites", l.TOP_GUILD_EMOJI = "top guild emoji", l.CUSTOM = "custom", l.PEOPLE = "people", l.NATURE = "nature", l.FOOD = "food", l.ACTIVITY = "activity", l.TRAVEL = "travel", l.OBJECTS = "objects", l.SYMBOLS = "symbols", l.FLAGS = "flags", l.PREMIUM_UPSELL = "premium emoji", (u = s || (s = {})).NONE = "", u.TOP_GUILD_EMOJI = "top_server", u.NEWLY_ADDED_EMOJI = "newly_added"; let c = -1; (d = a || (a = {}))[d.MEDIUM = 40] = "MEDIUM", d[d.LARGE = 48] = "LARGE"; let E = "emoji-picker-tab-panel", I = "emoji-picker-tab", T = "soundboard-picker-tab-panel", f = "soundboard-picker-tab", S = "gif-picker-tab-panel", h = "gif-picker-tab", A = { reaction: 32, default: 44, jumbo: 96 }, m = 9 }, 540780: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-02_nitro_custom_emoji_perk_roadblock", label: "Nitro Custom Emoji Perk Roadblock", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Nitro custom emoji perk roadblock", config: { enabled: !0 } }] }); t.default = i }, 392552: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmojiPickerUploadTreatment: function() { return r } }); var i, r, s = n("818083"); (i = r || (r = {}))[i.NONE = 0] = "NONE", i[i.WITH_TOP_LIST = 1] = "WITH_TOP_LIST", i[i.WITHOUT_TOP_LIST = 2] = "WITHOUT_TOP_LIST"; let a = (0, s.createExperiment)({ kind: "user", id: "2024-02_emoji_picker_upload_desktop", label: "Desktop: Consistently show the Emoji Picker Upload button at the start of emoji lists", defaultConfig: { enabled: !1, treatment: 0 }, treatments: [{ id: 1, label: "With Top Emojis showing the Upload button", config: { enabled: !0, treatment: 1 } }, { id: 2, label: "Without Top Emojis showing the Upload button", config: { enabled: !0, treatment: 2 } }] }); t.default = a }, 543241: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAriaIdForEmojiCategory: function() { return w }, getEmojiSubCategory: function() { return j }, getSearchPlaceholder: function() { return W }, getStringForEmojiCategory: function() { return k }, trackEmojiFavorited: function() { return G }, trackEmojiFocus: function() { return U }, trackEmojiSearchEmpty: function() { return P }, trackEmojiSearchResultsViewed: function() { return M }, trackEmojiSearchSelect: function() { return y }, trackEmojiSearchStart: function() { return D }, trackEmojiSelect: function() { return b }, trackPremiumSettingsPaneOpened: function() { return v }, useEmojiCategories: function() { return L }, useEmojiInPriorityOrder: function() { return H }, useEmojiSearchResults: function() { return B }, useFavoriteEmojis: function() { return x }, useFrequentlyUsedEmojis: function() { return V }, useIsFavoriteEmoji: function() { return F }, useTrackEmojiPickerOpened: function() { return Y } }), n("733860"), n("653041"), n("47120"), n("724458"), n("627341"), n("757143"); var i = n("470079"), r = n("392711"), s = n("278074"), a = n("442837"), o = n("367907"), l = n("339085"); n("353842"); var u = n("558217"), d = n("675478"), _ = n("430824"), c = n("771845"), E = n("594174"), I = n("626135"), T = n("70956"), f = n("176354"), S = n("111361"); n("709054"); var h = n("253696"), A = n("304852"), m = n("199257"), N = n("149203"), p = n("981631"), O = n("185923"), C = n("957825"), R = n("474936"), g = n("689938"); let L = function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null == t ? void 0 : t.getGuildId(); (0, u.maybeFetchTopEmojisByGuild)(n); let r = (0, O.isExternalEmojiAllowedForIntention)(e), s = V(n), o = x(n), { topEmojis: d, newlyAddedEmojis: I } = (0, m.default)(n, e), { allEmojis: T } = (0, A.default)({ topEmojis: d, newlyAddedEmojis: I }), h = (0, a.useStateFromStores)([l.default], () => l.default.getDisambiguatedEmojiContext(n), [n]), p = (0, a.useStateFromStores)([_.default], () => { var e; return null === (e = _.default.getGuild(n)) || void 0 === e ? void 0 : e.name }), C = (0, a.useStateFromStores)([E.default], () => E.default.getCurrentUser()), R = (0, S.isPremium)(C); return i.useMemo(() => { let i = h.getGroupedCustomEmoji(), a = c.default.getFlattenedGuildIds(), u = [], d = (i, r) => f.default.getEmojiUnavailableReasons({ categoryEmojis: i, channel: t, guildId: n, intention: e, computeUnfiltered: r }); return ((e, r) => { for (let s of e) { let e; if (r === N.EmojiCategoryTypes.GUILD && (e = _.default.getGuild(s)), null == e) continue; let a = null == i ? void 0 : i[e.id]; if (null == a || 0 === a.length) continue; let { emojisDisabled: o, emojisFilteredCount: l, emojisPremiumLockedCount: c, emojiNitroLocked: E } = d(a, !1); if (null != t && a.length === l) continue; let I = null; r === N.EmojiCategoryTypes.GUILD && (I = { type: N.EmojiCategoryTypes.GUILD, guild: e, isNitroLocked: !R && E && c === a.length, emojis: a, emojisDisabled: o }), null != I && (e.id === n ? u.unshift(I) : u.push(I)) } })(a, N.EmojiCategoryTypes.GUILD), l.default.categories.reduce((e, t) => { if (t === N.EmojiCategories.TOP_GUILD_EMOJI) { let { emojisDisabled: n, emojisUnfiltered: i } = d(T, !0); if (null == i || 0 === i.length) return e; e.push({ type: N.EmojiCategoryTypes.TOP_GUILD_EMOJI, id: t, name: g.default.Messages.EMOJI_CATEGORY_TOP_GUILD_EMOJI.format({ guildName: p }), isNitroLocked: !1, emojis: i, emojisDisabled: n }) } else if (t === N.EmojiCategories.RECENT) { let { emojisDisabled: n, emojisUnfiltered: i } = d(s, !0); if (null == i || 0 === i.length) return e; e.push({ type: N.EmojiCategoryTypes.RECENT, id: t, name: g.default.Messages.EMOJI_CATEGORY_RECENT, isNitroLocked: !1, emojis: i, emojisDisabled: n }) } else if (t === N.EmojiCategories.FAVORITES) { let { emojisDisabled: n, emojisUnfiltered: i } = d(o, !0); if (null == i || 0 === i.length) return e; e.push({ type: N.EmojiCategoryTypes.FAVORITES, id: t, name: g.default.Messages.CATEGORY_FAVORITE, isNitroLocked: !1, emojis: i, emojisDisabled: n }) } else if (t === N.EmojiCategories.CUSTOM) { let t = u; !r && (t = u.filter(e => e.type === N.EmojiCategoryTypes.GUILD && e.guild.id === n)), e.push(...t) } else e.push({ type: N.EmojiCategoryTypes.UNICODE, id: t, name: t, isNitroLocked: !1 }); return e }, []) }, [h, t, n, e, T, p, s, o, r, R]) }, v = e => { let t = (null == e ? void 0 : e.getGuildId()) != null; I.default.track(p.AnalyticEvents.PREMIUM_PROMOTION_OPENED, { location_page: t ? p.AnalyticsPages.GUILD_CHANNEL : p.AnalyticsPages.DM_CHANNEL, location_section: null != e ? p.AnalyticsSections.EMOJI_PICKER_POPOUT : p.AnalyticsSections.CUSTOM_STATUS_MODAL }) }, D = (e, t) => { o.default.trackWithMetadata(p.AnalyticEvents.SEARCH_STARTED, { search_type: null != t && t === O.EmojiIntention.REACTION ? p.SearchTypes.EMOJI_REACTION : p.SearchTypes.EMOJI, location: e }) }, M = (e, t, n, i, r) => { o.default.trackWithMetadata(p.AnalyticEvents.SEARCH_RESULT_VIEWED, { search_type: null != r && r === O.EmojiIntention.REACTION ? p.SearchTypes.EMOJI_REACTION : p.SearchTypes.EMOJI, total_results: e, num_results_locked: t, query: i, location: n }) }, y = e => { var t, n, i; let { emoji: r, emojiSuggestions: a, searchQuery: l, isLocked: u, location: d, intention: _, index: c } = e, E = null !== (i = r.uniqueName) && void 0 !== i ? i : r.name, I = (0, s.match)(_).with(O.EmojiIntention.REACTION, () => p.SearchTypes.EMOJI_REACTION).with(O.EmojiIntention.AUTO_SUGGESTION, () => p.SearchTypes.EMOJI_AUTO_SUGGESTION).otherwise(() => p.SearchTypes.EMOJI); o.default.trackWithMetadata(p.AnalyticEvents.SEARCH_RESULT_SELECTED, { search_type: I, location: d, expression_guild_id: r.guildId, emoji_id: r.id, emoji_name: E, is_custom: null != r.id, is_animated: r.animated, is_locked: u, query: l, index_num: c, load_id: null == a ? void 0 : a.loadId, total_results: null == a ? void 0 : null === (t = a.results) || void 0 === t ? void 0 : t.length, emoji_suggestion_ids: null == a ? void 0 : null === (n = a.results) || void 0 === n ? void 0 : n.map(e => { let { emoji: t } = e; return t.id }).filter(e => null != e) }) }, P = (e, t) => { o.default.trackWithMetadata(p.AnalyticEvents.SEARCH_RESULT_EMPTY, { search_type: p.SearchTypes.EMOJI, query: t, location: e }) }, U = e => { let { emoji: t, subCategory: n, position: i, newlyAddedHighlight: r } = e; o.default.trackWithMetadata(p.AnalyticEvents.EXPRESSION_PICKER_EXPRESSION_FOCUS, { expression_section: null == n ? void 0 : n.toString(), newly_added_highlight: r, emoji_id: t.id, emoji_name: t.name, emoji_animated: t.animated, emoji_position: i }) }, b = e => { var t; let n, { emoji: i, location: r, pickerIntention: s, category: a, subCategory: l = N.EmojiSubCategory.NONE, position: u, newlyAddedHighlight: d, isBurstReaction: _ } = e; switch (s) { case O.EmojiIntention.REACTION: n = _ ? R.PremiumUpsellTypes.EMOJI_PICKER_SUPER_REACTION_EMOJI_CLICKED : R.PremiumUpsellTypes.EMOJI_PICKER_REACTION_EMOJI_CLICKED; break; case O.EmojiIntention.STATUS: n = R.PremiumUpsellTypes.EMOJI_PICKER_STATUS_EMOJI_CLICKED; break; default: n = R.PremiumUpsellTypes.EMOJI_PICKER_EMOJI_CLICKED } let c = null !== (t = i.uniqueName) && void 0 !== t ? t : i.name; o.default.trackWithMetadata(p.AnalyticEvents.EXPRESSION_PICKER_EXPRESSION_SELECTED, { type: n, location: r, expression_id: i.id, expression_name: c, expression_guild_id: i.guildId, is_custom: null != i.id, is_animated: i.animated, expression_picker_section: a, expression_section: null == l ? void 0 : l.toString(), emoji_position: u, newly_added_highlight: d, is_burst: _ }) }, G = e => { var t; let { emoji: n, location: i } = e, r = null !== (t = n.uniqueName) && void 0 !== t ? t : n.name; o.default.trackWithMetadata(p.AnalyticEvents.EXPRESSION_FAVORITED, { location: i, expression_type: C.ExpressionPickerViewType.EMOJI, expression_id: n.id, expression_name: r, expression_guild_id: n.guildId, is_custom: null != n.id, is_animated: n.animated }) }; (0, r.throttle)(e => { let { emojiSuggestions: t, analyticsLocation: n } = e; o.default.trackWithMetadata(p.AnalyticEvents.AUTO_SUGGEST_DISPLAYED, { suggestion_type: p.AutoCompleteResultTypes.EMOJI, suggestion_quantity: t.results.length, custom_quantity: t.results.filter(e => { let { emoji: t } = e; return null != t.id }).length, load_id: t.loadId, location: n }) }, T.default.Millis.HALF_SECOND, { leading: !1, trailing: !0 }); let w = (e, t) => { if (e.type === N.EmojiCategoryTypes.GUILD) return null != t ? t.toString() : ""; return e.id }, k = (e, t) => { switch (e) { case N.EmojiCategories.TOP_GUILD_EMOJI: return g.default.Messages.EMOJI_CATEGORY_TOP_GUILD_EMOJI.format({ guildName: t }); case N.EmojiCategories.RECENT: return g.default.Messages.EMOJI_CATEGORY_RECENT; case N.EmojiCategories.FAVORITES: return g.default.Messages.CATEGORY_FAVORITE; case N.EmojiCategories.ACTIVITY: return g.default.Messages.EMOJI_CATEGORY_ACTIVITY; case N.EmojiCategories.FLAGS: return g.default.Messages.EMOJI_CATEGORY_FLAGS; case N.EmojiCategories.FOOD: return g.default.Messages.EMOJI_CATEGORY_FOOD; case N.EmojiCategories.NATURE: return g.default.Messages.EMOJI_CATEGORY_NATURE; case N.EmojiCategories.OBJECTS: return g.default.Messages.EMOJI_CATEGORY_OBJECTS; case N.EmojiCategories.PEOPLE: return g.default.Messages.EMOJI_CATEGORY_PEOPLE; case N.EmojiCategories.SYMBOLS: return g.default.Messages.EMOJI_CATEGORY_SYMBOLS; case N.EmojiCategories.TRAVEL: return g.default.Messages.EMOJI_CATEGORY_TRAVEL; case N.EmojiCategories.PREMIUM_UPSELL: return g.default.Messages.EMOJI_CATEGORY_PREMIUM_UPSELL; default: return null != t ? t : e } }; function B(e, t, n) { i.useEffect(() => { d.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []); let r = (0, O.isExternalEmojiAllowedForIntention)(n); return (0, a.useStateFromStores)([l.default], () => { let i = e.replace(/^:/, "").replace(/:$/, ""); return "" === i ? null : l.default.searchWithoutFetchingLatest({ channel: t, query: i, count: 0, intention: n, includeExternalGuilds: r }) }, [t, n, e, r], a.statesWillNeverBeEqual) } function V(e) { return i.useEffect(() => { d.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []), (0, a.useStateFromStoresArray)([l.default], () => l.default.getDisambiguatedEmojiContext(e).getFrequentlyUsedEmojisWithoutFetchingLatest()) } function x(e) { return i.useEffect(() => { d.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []), (0, a.useStateFromStoresArray)([l.default], () => l.default.getDisambiguatedEmojiContext(e).favoriteEmojisWithoutFetchingLatest) } function F(e, t) { return i.useEffect(() => { d.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []), (0, a.useStateFromStores)([l.default], () => null != t && l.default.getDisambiguatedEmojiContext(e).isFavoriteEmojiWithoutFetchingLatest(t)) } function H(e) { return i.useEffect(() => { d.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []), (0, a.useStateFromStoresArray)([l.default], () => l.default.getDisambiguatedEmojiContext(e).getEmojiInPriorityOrderWithoutFetchingLatest()) } function Y(e) { let t = i.useCallback(() => { (0, h.default)(e) }, [e]); return i.useEffect(() => { e.intention === O.EmojiIntention.REACTION && t() }, []), { trackOnPickerOpen: t } } function j(e, t, n) { if (null == n) return N.EmojiSubCategory.NONE; let i = e.map(e => { var t, n; return null !== (n = null !== (t = e.id) && void 0 !== t ? t : e.uniqueName) && void 0 !== n ? n : e.name }), r = t.map(e => e.id); return i.includes(n) ? N.EmojiSubCategory.TOP_GUILD_EMOJI : r.includes(n) ? N.EmojiSubCategory.NEWLY_ADDED_EMOJI : N.EmojiSubCategory.NONE } function W(e, t) { return e === O.EmojiIntention.REACTION ? t ? g.default.Messages.SEARCH_FOR_SUPER_REACTION : g.default.Messages.SEARCH_FOR_REACTION : g.default.Messages.SEARCH_FOR_EMOJI } }, 253696: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }), n("724458"); var i = n("367907"), r = n("339085"), s = n("592125"), a = n("944486"), o = n("176354"), l = n("304852"), u = n("199257"), d = n("981631"), _ = n("185923"), c = n("957825"); function E(e) { var t; let { intention: n, containerWidth: E, rowSize: I, isBurstReaction: T, analyticsObject: f } = e, S = s.default.getChannel(a.default.getChannelId()), h = null == S ? void 0 : S.getGuildId(), A = r.default.emojiFrecencyWithoutFetchingLatest.frequently.slice(), m = null != S ? r.default.getDisambiguatedEmojiContext(S.getGuildId()).favoriteEmojisWithoutFetchingLatest : [], N = A.slice(0, r.default.emojiFrecencyWithoutFetchingLatest.numFrequentlyItems), p = null != h ? r.default.getGuildEmoji(h) : [], O = Object.values(null !== (t = r.default.getDisambiguatedEmojiContext(null == S ? void 0 : S.getGuildId()).groupedCustomEmojis) && void 0 !== t ? t : {}).reduce((e, t) => e += t.length, 0), { topEmojis: C, newlyAddedEmojis: R } = (0, u.getTopAndNewlyAddedEmojis)({ guildId: null == S ? void 0 : S.getGuildId(), pickerIntention: n }), { visibleTopEmojis: g, visibleNewlyAddedEmojis: L } = (0, l.getEmojiHotrail)({ topEmojis: C, newlyAddedEmojis: R, rowSize: I }); i.default.trackWithMetadata(n === _.EmojiIntention.REACTION ? d.AnalyticEvents.REACTION_PICKER_OPENED : d.AnalyticEvents.EXPRESSION_PICKER_OPENED, { width: E, tab: c.ExpressionPickerViewType.EMOJI, badged: !1, num_expressions_favorites: m.length, num_animated_expressions_favorites: m.filter(e => null == e ? void 0 : e.animated).length, num_custom_expressions_favorites: m.filter(o.default.isCustomEmoji).length, num_standard_expressions_favorites: m.filter(e => null == e.id).length, num_expressions_frecent: N.length, num_animated_expressions_frecent: N.filter(e => null == e ? void 0 : e.animated).length, num_custom_expressions_frecent: N.filter(o.default.isCustomEmoji).length, num_standard_expressions_frecent: N.filter(e => null == e.id).length, num_current_guild_expressions: p.length, num_custom_expressions_total: O, num_expressions_top_server: g.length, num_animated_expressions_top_server: g.filter(e => e.animated).length, num_expressions_newly_added: L.length, num_animated_expressions_newly_added: L.filter(e => e.animated).length, ...n === _.EmojiIntention.REACTION && { is_burst: T }, ...null != f && { location_object: f } }) } }, 304852: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a }, getEmojiHotrail: function() { return s } }); var i = n("470079"), r = n("149203"); function s(e) { let { topEmojis: t, newlyAddedEmojis: n, rowSize: i = r.EMOJI_ROW_SIZE } = e, s = t.slice(0, i - n.length); return { visibleTopEmojis: s, visibleNewlyAddedEmojis: n, allEmojis: s.concat(n) } } function a(e) { return i.useMemo(() => s(e), [e]) } }, 199257: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l }, getTopAndNewlyAddedEmojis: function() { return o } }); var i = n("399606"), r = n("339085"), s = n("185923"); let a = []; function o(e) { let { emojiStoreInstance: t = r.default, guildId: n, pickerIntention: i } = e; return { topEmojis: i !== s.EmojiIntention.REACTION ? t.getTopEmoji(n) : a, newlyAddedEmojis: i !== s.EmojiIntention.REACTION ? t.getNewlyAddedEmoji(n) : a } } function l(e, t) { return (0, i.useStateFromStoresObject)([r.default], () => o({ emojiStoreInstance: r.default, guildId: e, pickerIntention: t }), [e, t]) } }, 907040: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("954955"), l = n.n(o), u = n("739940"), d = n("442837"), _ = n("524437"), c = n("477690"), E = n("481060"), I = n("80932"), T = n("410575"), f = n("2052"), S = n("100527"), h = n("906732"), A = n("243778"), m = n("339085"), N = n("438332"), p = n("664437"), O = n("806966"), C = n("28546"), R = n("691251"), g = n("98528"), L = n("770812"), v = n("434404"), D = n("536442"), M = n("695346"), y = n("984933"), P = n("594174"), U = n("626135"), b = n("111361"), G = n("624138"), w = n("543241"), k = n("199257"), B = n("636411"), V = n("380331"), x = n("170762"), F = n("22363"), H = n("784222"), Y = n("141507"), j = n("669040"), W = n("901963"), K = n("212263"), z = n("149203"), Z = n("981631"), X = n("921944"), Q = n("185923"), q = n("773390"); let J = (0, G.cssValueToNumber)(c.default.EMOJI_PICKER_CONSTANTS_EMOJI_CONTAINER_PADDING_HORIZONTAL), $ = (0, G.cssValueToNumber)(c.default.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_LEFT), ee = e => e.stopPropagation(), et = (e, t) => { O.EmojiPickerStore.setInspectedExpressionPosition(e, t, R.InspectedExpressionChangeSource.GRID_NAVIGATOR_EVENT) }, en = e => { let { analyticsLocation: t, pickerIntention: n, columnCounts: i, onSelectEmoji: s, emojiGrid: a, emojiList: o, channelGuildId: l, isBurstReaction: _ } = e, c = (0, d.useStateFromStores)([m.default], () => m.default.getDisambiguatedEmojiContext(l), [l]), E = r.useCallback((e, i) => { switch (e.type) { case H.EmojiGridItemTypes.CREATE_EMOJI: s(void 0, !0), v.default.open(e.guildId, Z.GuildSettingsSections.EMOJI); return; case H.EmojiGridItemTypes.EMOJI: { if (null != e.emoji && i.altKey) { c.isFavoriteEmojiWithoutFetchingLatest(e.emoji) ? (0, I.unfavoriteEmoji)(e.emoji) : ((0, w.trackEmojiFavorited)({ emoji: e.emoji, location: { ...t, object: Z.AnalyticsObjects.EMOJI } }), (0, I.favoriteEmoji)(e.emoji)); return } let r = { page: null != l ? Z.AnalyticsPages.GUILD_CHANNEL : Z.AnalyticsPages.DM_CHANNEL, section: Z.AnalyticsSections.EMOJI_PICKER_POPOUT, object: Z.AnalyticsObjects.EMOJI }; _ && (r = { page: null != l ? Z.AnalyticsPages.GUILD_CHANNEL : Z.AnalyticsPages.DM_CHANNEL, section: Z.AnalyticsSections.EMOJI_PICKER_POPOUT, object: Z.AnalyticsObjects.EMOJI }), (0, w.trackEmojiSelect)({ emoji: e.emoji, location: r, pickerIntention: n, category: e.category, subCategory: e.subCategory, newlyAddedHighlight: e.subCategory === z.EmojiSubCategory.NEWLY_ADDED_EMOJI && N.default.isNewerThanLastSeen(l, e.emoji.id) }), s(e.emoji, !i.shiftKey, _) } } }, [s, l, n, c, t, _]), { gridDispatch: T, getItemProps: f, getRowProps: S, gridContainerProps: h, handleGridContainerKeyDown: A, isUsingKeyboardNavigation: p } = (0, g.useExpressionPickerGridKeyboardNavigation)({ columnCounts: i, gridNavigatorId: z.GRID_NAVIGATOR_ID, itemGrid: a, itemList: o, onGridNavigatorItemSelect: E, onGridNavigatorPositionChange: et }); return r.useEffect(() => O.EmojiPickerStore.useStore.subscribe(e => { if (null == e) return; let { columnIndex: t, rowIndex: n, source: i } = e; i !== R.InspectedExpressionChangeSource.GRID_NAVIGATOR_EVENT && T({ type: u.GridActionType.SET_FOCUSED_POSITION, x: t, y: n }) }, e => e.inspectedExpressionPosition), [T]), { getItemProps: f, getRowProps: S, gridContainerProps: h, handleGridContainerKeyDown: A, isUsingKeyboardNavigation: p } }, ei = (e, t) => { let [n, i] = r.useState(null); r.useEffect(() => { if (null != n) { var e; null === (e = t.current) || void 0 === e || e.scrollToSectionTop(n), i(null) } }, [t, n]), r.useEffect(() => { i(O.EmojiPickerStore.getState().activeCategoryIndex) }, [e]) }, er = (e, t, n, i) => { r.useLayoutEffect(() => { if (i) { var e; null === (e = n.current) || void 0 === e || e.focus() } }, [e, t, n, i]) }, es = l()(w.trackEmojiSearchEmpty, 200), ea = l()(w.trackEmojiSearchResultsViewed, 200), eo = { section: void 0, openPopoutType: void 0 }; t.default = r.memo(r.forwardRef(function(e, t) { var n, s; let o, { pickerIntention: l, channel: u, guildId: c, closePopout: I, emojiSize: R = z.EmojiSize.MEDIUM, hasTabWrapper: v = !1, includeCreateEmojiButton: G, onSelectEmoji: et, containerWidth: el, onNavigateAway: eu, persistSearch: ed, className: e_, headerClassName: ec, analyticsOverride: eE = eo, searchProps: eI = {}, wrapper: eT, shouldHidePickerActions: ef = !1, messageId: eS, renderHeader: eh, listHeaderClassName: eA } = e, { onFocus: em, onKeyDown: eN, autoFocus: ep = !0, accessory: eO } = eI, eC = (0, d.useStateFromStores)([y.default], () => null != c ? y.default.getDefaultChannel(c) : null, [c]), [eR, eg] = r.useState(null), eL = r.useRef(""), ev = (0, C.useExpressionPickerStore)(e => e.searchQuery), eD = r.useRef(null), eM = r.useRef(null), ey = r.useRef(null); null == u && null != eC && (u = eC); let eP = null !== (s = null !== (n = null == u ? void 0 : u.getGuildId()) && void 0 !== n ? n : c) && void 0 !== s ? s : null, [eU, eb] = r.useState(!1), eG = P.default.getCurrentUser(), ew = (0, b.isPremium)(eG); r.useImperativeHandle(t, () => ({ onPickerOpen: e3 })); let { location: ek } = (0, f.useAnalyticsContext)(), { page: eB, section: eV, object: ex, openPopoutType: eF } = eE, eH = r.useMemo(() => ({ ...ek, section: null != eV ? eV : Z.AnalyticsSections.EMOJI_PICKER_POPOUT }), [ek, eV]), { analyticsLocations: eY } = (0, h.default)(S.default.EMOJI_PICKER), { diversitySurrogate: ej } = (0, d.useStateFromStoresObject)([m.default], () => ({ diversitySurrogate: m.default.diversitySurrogate })), eW = (0, w.useEmojiSearchResults)(ev, u, l), eK = null == eW ? 0 : eW.locked.length + eW.unlocked.length, ez = M.EmojiPickerCollapsedSections.useSetting(), eZ = r.useMemo(() => new Set(ez), [ez]), eX = r.useCallback(e => { M.EmojiPickerCollapsedSections.updateSetting(Array.from(e)) }, []), eQ = (0, g.useExpressionPickerGridWidth)({ gridWrapperRef: eD, containerWidth: el, listPaddingLeft: $, listScrollbarWidth: 8 }), { rowCountBySection: eq, sectionDescriptors: eJ, emojiGrid: e$, columnCounts: e0 } = (0, H.useEmojiGrid)({ gridWidth: eQ, channel: u, includeCreateEmojiButton: G, pickerIntention: l, emojiSearchResults: eW, collapsedSections: eZ, emojiPaddingHorizontal: J, emojiSpriteSize: R }), { newlyAddedEmojis: e1 } = (0, k.default)(eP, l), { trackOnPickerOpen: e2 } = (0, w.useTrackEmojiPickerOpened)({ intention: l, isBurstReaction: eU, analyticsObject: ex }), e3 = r.useCallback(() => { let e = e1.length > 0 ? e1[0].id : null; (0, p.updateNewlyAddedLastSeen)(eP, e), e2() }, [e2, e1, eP]), e4 = (0, H.useEmojiSelectHandler)({ pickerIntention: l, selectedChannel: u, closePopout: I, onSelectEmoji: et, setUpsellConfigs: eg, emojiSelectAnalytics: e => { "" !== ev ? (0, w.trackEmojiSearchSelect)({ emoji: e.emoji, location: { ...eH, object: Z.AnalyticsObjects.EMOJI }, searchQuery: ev, intention: l }) : (0, w.trackEmojiSelect)({ emoji: e.emoji, location: { ...eH, object: null != ex ? ex : Z.AnalyticsObjects.EMOJI, ...null != eB && { page: eB } }, pickerIntention: l, category: e.category, subCategory: e.subCategory, position: e.columnIndex + 1, newlyAddedHighlight: e.subCategory === z.EmojiSubCategory.NEWLY_ADDED_EMOJI && N.default.isNewerThanLastSeen(eP, e.emoji.id), isBurstReaction: eU }) }, trackEmojiFavorited: e => { (0, w.trackEmojiFavorited)({ emoji: e.emoji, location: { ...eH, object: Z.AnalyticsObjects.EMOJI } }) } }), e6 = r.useCallback(() => { I(), null == eu || eu() }, [I, eu]), { getItemProps: e7, getRowProps: e5, gridContainerProps: e8, handleGridContainerKeyDown: e9, isUsingKeyboardNavigation: te } = en({ pickerIntention: l, analyticsLocation: eH, columnCounts: e0, onSelectEmoji: et, emojiGrid: e$, emojiList: eM, channelGuildId: eP, isBurstReaction: eU }); ei(el, eM), er(el, ej, ey, ep), r.useEffect(() => { !ed && (0, C.setSearchQuery)("") }, [ed]), r.useEffect(() => (U.default.track(Z.AnalyticEvents.OPEN_POPOUT, { type: null != eF ? eF : "Emoji Picker", guild_id: eP }), O.EmojiPickerStore.resetStoreState), [eF, eP]), r.useEffect(() => () => (0, D.hideHotspot)(D.HotspotLocations.FAVORITE_EMOJI_TOOLTIP), []), r.useLayoutEffect(() => { var e; let { columnIndex: t, rowIndex: n } = O.EmojiPickerStore.getState().inspectedExpressionPosition; (null === (e = e$[n]) || void 0 === e ? void 0 : e[t]) == null && 0 !== t && O.EmojiPickerStore.setInspectedExpressionPosition(0, 0) }, [e$]), r.useEffect(() => { if ("" === eL.current && "" !== ev && (0, w.trackEmojiSearchStart)(eH, l), 0 === eK && "" !== ev) es(eH, ev); else if ("" !== ev && eL.current !== ev) { var e; ea(eK, null !== (e = null == eW ? void 0 : eW.locked.length) && void 0 !== e ? e : 0, eH, ev, l) } eL.current = ev }, [ev, eH, eK, eW, l]); let tt = null != eT ? eT : v ? "div" : E.Dialog, tn = null != eQ; (null == eR ? void 0 : eR.type) === H.EmojiUpsellType.PREMIUM ? o = (0, i.jsx)(K.default, { onLearnMore: e6, emojiDescriptor: eR.emojiDescriptor, pickerIntention: l, analyticsLocation: eH, onClose: () => eg(null), channel: u }) : (null == eR ? void 0 : eR.type) === H.EmojiUpsellType.ROLE_SUBSCRIPTION ? o = (0, i.jsx)(L.default, { onClose: () => eg(null), guildId: eR.guildId, emojiId: eR.emojiId }) : eU && !ew && (o = (0, i.jsx)(B.default, { onDismiss: () => eb(!1) })); let ti = (0, i.jsx)(F.default, { pickerIntention: l, emojiListRef: eM, onKeyDown: e => { null == e9 || e9(e), null == eN || eN(e) }, searchBarRef: ey, onFocus: em, autoFocus: ep, accessory: eO, headerClassName: ec, hasTabWrapper: v, diversitySurrogate: ej, isBurstReaction: eU, onBurstReactionToggle: () => eb(!eU), renderHeader: eh }), tr = []; l === Q.EmojiIntention.REACTION && tr.push(_.DismissibleContent.SUPER_REACTIONS_NITRO_MARKETING), !m.default.hasFavoriteEmojis(eP) && tr.push(_.DismissibleContent.EMOJI_PICKER_FAVORITE_EMOJIS_TIP); let ts = (0, i.jsx)(T.default, { ...eH, children: (0, i.jsxs)(tt, { id: z.EMOJI_PICKER_TAB_PANEL_ID, "aria-labelledby": v ? z.EMOJI_PICKER_TAB_ID : void 0, role: v ? "tabpanel" : void 0, className: a()(q.wrapper, { [q.emojiPickerHasTabWrapper]: v, [q.isBurstReactionPicker]: eU && ew }), children: [v ? null : ti, (0, i.jsxs)("div", { className: a()(q.emojiPicker, e_), onScroll: ee, children: [v ? ti : null, (0, i.jsxs)("div", { className: q.bodyWrapper, ref: eD, children: [(0, i.jsx)(W.default, { channel: u, closePopout: I }), (0, i.jsx)(A.default, { contentTypes: tr, children: e => { let { visibleContent: t, markAsDismissed: n } = e; if (t === _.DismissibleContent.EMOJI_PICKER_FAVORITE_EMOJIS_TIP) return (0, i.jsx)(x.default, { markAsDismissed: () => n(X.ContentDismissActionType.UNKNOWN) }) } }), ef ? null : (0, i.jsx)("div", { className: q.emojiPickerListWrapper, id: z.GRID_NAVIGATOR_ID, ...e8, children: tn ? (0, i.jsx)(j.default, { collapsedSections: eZ, diversitySurrogate: ej, emojiGrid: e$, emojiListRef: eM, emojiSize: R, getEmojiItemProps: e7, getEmojiRowProps: e5, gridWidth: eQ, isUsingKeyboardNavigation: te, onEmojiSelect: (e, t) => { e4(e, { ...t, isBurst: eU }) }, rowCount: e$.length, rowCountBySection: eq, sectionDescriptors: eJ, setCollapsedSections: eX, channelGuildId: eP, messageId: eS, isBurstReaction: eU, listHeaderClassName: eA }) : null })] }), (0, i.jsx)(Y.EmojiPickerInspector, { emojiGrid: e$, className: q.inspector, guildId: eP, pickerIntention: l, channel: u }), o] }), ef ? null : (0, i.jsx)(V.default, { className: q.categoryList, emojiListRef: eM, sectionDescriptors: eJ, intention: l, channel: u })] }) }); return (0, i.jsx)(h.AnalyticsLocationProvider, { value: eY, children: ts }) })) }, 636411: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("607070"), u = n("104494"), d = n("639119"), _ = n("165583"), c = n("197115"), E = n("465670"), I = n("466111"), T = n("810090"), f = n("981631"), S = n("474936"), h = n("689938"), A = n("884050"); function m(e) { var t, n; let { onDismiss: r } = e, m = (0, a.useStateFromStores)([l.default], () => l.default.useReducedMotion), N = h.default.Messages.SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_UNLIMITED_V2, p = (0, d.usePremiumTrialOffer)(), O = (0, u.usePremiumDiscountOffer)(), C = (null == p ? void 0 : p.subscription_trial) != null || null != O, R = { object: f.AnalyticsObjects.BUTTON_CTA, section: f.AnalyticsSections.SUPER_REACTION_PICKER }; return (0, i.jsxs)("div", { className: A.wrapper, children: [(0, i.jsx)(o.Clickable, { onClick: r, className: A.closeButton, "aria-label": h.default.Messages.DISMISS, children: (0, i.jsx)(E.default, { width: 24, height: 24 }) }), (0, i.jsxs)("div", { className: A.content, children: [(0, i.jsx)("div", { className: A.contentFill, children: (0, i.jsx)(T.default, { className: s()(A.banner, { [A.hasTrialOffer]: C }), src: "https://cdn.discordapp.com/attachments/955557117622886410/1085270553759322153/super-reactions-launch.mp4", loop: !0, autoPlay: !m, muted: !0, controls: !0 }) }), C ? (0, i.jsx)(_.default, { type: S.PremiumUpsellTypes.BURST_REACTION_QUICK_ACTION_UPSELL, subscriptionTier: null !== (n = null == p ? void 0 : null === (t = p.subscription_trial) || void 0 === t ? void 0 : t.sku_id) && void 0 !== n ? n : S.PremiumSubscriptionSKUs.TIER_2, headingText: h.default.Messages.SUPER_REACTIONS_UPSELL_TITLE_MOBILE, analyticsLocationObject: R, discountOffer: O, trialOffer: p, children: N }) : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)("div", { className: A.header, children: [(0, i.jsx)(I.default, { className: A.nitroWheel, width: 32, height: 32 }), (0, i.jsx)(o.Heading, { className: A.headerText, variant: "heading-xl/bold", children: h.default.Messages.SUPER_REACTIONS_UPSELL_TITLE_MOBILE })] }), (0, i.jsx)(o.Text, { className: A.subheaderText, variant: "text-md/normal", children: N }), (0, i.jsx)("div", { className: A.ctaActionWrapper, children: (0, i.jsx)(c.default, { subscriptionTier: S.PremiumSubscriptionSKUs.TIER_2, buttonText: h.default.Messages.UNLOCK_WITH_NITRO }) })] })] })] }) } }, 883661: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("932125"), a = n("489785"), o = n("902781"), l = n("497309"), u = n("478803"), d = n("407626"), _ = n("869555"), c = n("219541"), E = n("593552"), I = n("466111"), T = n("898140"), f = n("339487"), S = n("149203"); let h = e => { switch (e) { case S.EmojiCategories.RECENT: return l.default; case S.EmojiCategories.FAVORITES: return T.default; case S.EmojiCategories.TOP_GUILD_EMOJI: return f.default; case S.EmojiCategories.PEOPLE: return _.default; case S.EmojiCategories.NATURE: return u.default; case S.EmojiCategories.FOOD: return o.default; case S.EmojiCategories.ACTIVITY: return s.default; case S.EmojiCategories.TRAVEL: return E.default; case S.EmojiCategories.OBJECTS: return d.default; case S.EmojiCategories.SYMBOLS: return c.default; case S.EmojiCategories.FLAGS: return a.default; case S.EmojiCategories.PREMIUM_UPSELL: return I.default; default: return } }, A = r.memo(function(e) { let { categoryId: t, ...n } = e, r = h(t); return null == r ? null : (0, i.jsx)(r, { ...n }) }); t.default = A }, 380331: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("924826"), d = n("442837"), _ = n("477690"), c = n("481060"), E = n("2052"), I = n("607070"), T = n("806966"), f = n("254494"), S = n("593618"), h = n("451478"), A = n("642113"), m = n("626135"), N = n("624138"), p = n("540780"), O = n("543241"), C = n("883661"), R = n("880949"), g = n("784222"), L = n("149203"), v = n("981631"), D = n("957825"), M = n("689938"), y = n("271171"); let P = (0, N.cssValueToNumber)(_.default.EMOJI_PICKER_CONSTANTS_GUILD_CATEGORY_ICON_SIZE), U = (0, N.cssValueToNumber)(_.default.EMOJI_PICKER_CONSTANTS_GUILD_CATEGORY_ICON_MARGIN_VERICAL), b = (0, N.cssValueToNumber)(_.default.EMOJI_PICKER_CONSTANTS_UNICODE_CATEGORY_ICON_SIZE), G = (0, N.cssValueToNumber)(_.default.EMOJI_PICKER_CONSTANTS_UNICODE_CATEGORY_ICON_MARGIN_VERTICAL), w = (0, N.cssValueToNumber)(_.default.EMOJI_PICKER_CONSTANTS_UNICODE_CATEGORY_ICON_PADDING), k = (0, N.cssValueToNumber)(y.__invalid_unicodeCategoryShortcutHeight), B = (0, N.cssValueToNumber)(_.default.EMOJI_PICKER_CONSTANTS_CATEGORY_SEPARATOR_SIZE), V = (0, N.cssValueToNumber)(_.default.EMOJI_PICKER_CONSTANTS_CATEGORY_SEPARATOR_MARGIN_VERTICAL), x = b + U + 2 * w, F = P + U, H = F + (B + 2 * V), Y = b + G + 2 * w; function j(e) { let { activeIndex: t, categoryIndex: n, analyticsContext: s, categories: o, category: l, handleCategorySelect: d, isWindowFocused: _, useReducedMotion: E } = e, I = (0, u.useListItem)("expression-guild-".concat(n)), T = l.type === L.EmojiCategoryTypes.GUILD ? null : l.id, f = t === n, h = l.type === L.EmojiCategoryTypes.GUILD ? l.guild : null, { enabled: A } = p.default.useExperiment({ location: "Emoji Picker Category List" }, { autoTrackExposure: l.isNitroLocked }), N = A && l.isNitroLocked, g = (0, i.jsxs)(c.Clickable, { ...I, "aria-label": (0, O.getAriaIdForEmojiCategory)(l, h), className: a()({ [y.categoryItemGuildCategory]: null != h, [y.categoryItemDefaultCategory]: null == h, [y.categoryItemDefaultCategorySelected]: null == h && f, [y.categoryItemRecentEmoji]: l.type === L.EmojiCategoryTypes.RECENT }), onClick: () => { null != h && m.default.track(v.AnalyticEvents.EXPRESSION_PICKER_CATEGORY_SELECTED, { location: null == s ? void 0 : s.location, tab: D.ExpressionPickerViewType.EMOJI, guild_id: h.id }), d(n) }, children: [null != h ? (0, i.jsx)(R.default, { guild: h, isSelected: f, shouldAnimate: !E && _, isLocked: N }) : null, null == h && null != T ? (0, i.jsx)(C.default, { categoryId: T, className: y.categoryIcon, height: b, width: b }) : null] }), M = o[n + 1], P = null != M && l.type === L.EmojiCategoryTypes.GUILD && M.type !== L.EmojiCategoryTypes.GUILD; return null != h ? (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)(S.default, { guild: h, includeActivity: !1, children: (0, i.jsx)("div", { children: g }) }), P ? (0, i.jsx)("hr", { className: y.guildCategorySeparator }, "separator") : null] }) : g } t.default = e => { let { className: t, emojiListRef: n, sectionDescriptors: s, intention: o, channel: u } = e, _ = T.EmojiPickerStore.useStore(e => e.activeCategoryIndex), S = (0, g.useCategorySelectHandler)({ sectionDescriptors: s, emojiListRef: n }), m = (0, E.useAnalyticsContext)(), N = (0, O.useEmojiCategories)(o, u), p = r.useRef(null), C = (0, d.useStateFromStores)([h.default], () => h.default.isFocused()), R = (0, d.useStateFromStores)([I.default], () => I.default.useReducedMotion, []), v = r.useMemo(() => l().memoize((e, t) => { let n = N[t]; if (null != n) return (0, i.jsx)(j, { activeIndex: _, analyticsContext: m, categories: N, category: n, categoryIndex: t, handleCategorySelect: S, isWindowFocused: C, useReducedMotion: R }, t) }), [_, m, N, S, C, R]), D = r.useMemo(() => [8, 8, 0, 8], []), P = r.useCallback((e, t) => { let n = N[t]; if (n.type === L.EmojiCategoryTypes.RECENT) return x; if (n.type === L.EmojiCategoryTypes.GUILD) { let e = N[t + 1]; return null != e && e.type !== L.EmojiCategoryTypes.GUILD ? H : F } return Y }, [N]), { nonUnicodeCategoryCount: w, firstUnicodeCategoryIndex: W, firstUnicodeCategoryOffsetTop: K, rowCountBySection: z } = r.useMemo(() => { let e = 0, t = 0, n = 0, i = 0; N.forEach(r => { r.type === L.EmojiCategoryTypes.GUILD ? (t += 1, n += 1) : r.type === L.EmojiCategoryTypes.UNICODE ? i += 1 : (e += 1, t += 1) }); let r = x + t * F + H; return { nonUnicodeCategoryCount: t, firstUnicodeCategoryIndex: t, firstUnicodeCategoryOffsetTop: r, rowCountBySection: [e, n, i] } }, [N]), [Z, X] = r.useState(!0); r.useLayoutEffect(() => { X(w >= 7) }, [w]); let Q = r.useCallback(e => { var t; let n = null === (t = p.current) || void 0 === t ? void 0 : t.getListDimensions(); if (null != n) e + n.height - B >= K ? X(!1) : X(!0) }, [K]), q = r.useCallback(e => { var t; e(W), null === (t = p.current) || void 0 === t || t.scrollTo(K) }, [K, W]), J = r.useCallback((e, t) => { let n = N[e]; if (null == n) return 0; let i = Z ? k : 0; if (n.type === L.EmojiCategoryTypes.RECENT) return t ? 0 : G; if (n.type === L.EmojiCategoryTypes.GUILD) { let n = N[e + 1]; return null != n && n.type !== L.EmojiCategoryTypes.GUILD ? t ? B + -2 * V + U + i : U : t ? i : U } return t ? U + i : 2 * U }, [N, Z]), $ = r.useMemo(() => function(e, t) { return (0, i.jsx)(r.Fragment, { children: t }, e) }, []), ee = Z ? "shortcut" : "hiddenshortcut"; return (0, i.jsx)(f.default, { categoryListRef: p, expressionsListRef: n, className: t, store: T.EmojiPickerStore, categories: N, listPadding: D, onScroll: Q, renderCategoryListItem: v, renderSection: $, rowCount: N.length, categoryHeight: P, getScrollOffsetForIndex: J, rowCountBySection: z, children: e => w >= 7 && (0, i.jsx)(c.Clickable, { "aria-hidden": !Z, "aria-label": M.default.Messages.EMOJI_PICKER_SCROLL_TO_UNICODE_A11Y_LABEL, className: a()(y.unicodeShortcut, { [y.unicodeShortcutInvisible]: !Z }), tabIndex: Z ? 0 : -1, onClick: () => q(e), children: (0, i.jsx)(A.default, { height: b, width: b }) }, ee) }) } }, 747613: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("733860"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("920906"), d = n("924826"), _ = n("946188"), c = n("477690"), E = n("481060"), I = n("80932"), T = n("351773"), f = n("209613"), S = n("633302"), h = n("153124"), A = n("176354"), m = n("624138"), N = n("981631"), p = n("689938"), O = n("809605"); let C = (0, h.uid)(), R = _.default.convert.fromCodePoint("1f44f"), g = (0, m.cssValueToNumber)(c.default.EMOJI_PICKER_CONSTANTS_EMOJI_CONTAINER_PADDING_VERTICAL), L = (0, m.cssValueToNumber)(c.default.EMOJI_PICKER_CONSTANTS_DIVERSITY_EMOJI_SIZE), v = e => { let { fade: t, surrogate: n, onClick: r, delay: s, index: a } = e, o = (0, d.useListItem)("item-".concat(a)), l = A.default.getURL(R + n), c = (0, u.useSpring)({ opacity: 1, from: { opacity: t ? 0 : 1 }, delay: s }); return (0, i.jsx)(E.Clickable, { ...o, role: "option", "aria-selected": 0 === a, onClick: () => r(n), className: O.diversityEmojiItem, children: (0, i.jsx)(u.animated.div, { "aria-label": function(e) { switch (_.default.convert.toCodePoint(e)) { case "1f3fb": return p.default.Messages.EMOJI_MODIFIER_LIGHT_SKIN_TONE; case "1f3fc": return p.default.Messages.EMOJI_MODIFIER_MEDIUM_LIGHT_SKIN_TONE; case "1f3fd": return p.default.Messages.EMOJI_MODIFIER_MEDIUM_SKIN_TONE; case "1f3fe": return p.default.Messages.EMOJI_MODIFIER_MEDIUM_DARK_SKIN_TONE; case "1f3ff": return p.default.Messages.EMOJI_MODIFIER_DARK_SKIN_TONE; default: return p.default.Messages.EMOJI_MODIFIER_NONE } }(n), className: O.diversityEmojiItemImage, style: { backgroundImage: 'url("'.concat(l, '")'), ...c } }) }) }, D = e => { let { id: t, selectedSurrogate: n, onClick: s, hasTabWrapper: o } = e, _ = (0, f.default)("diversity"), c = (0, u.useSpring)({ height: (L + 2 * g) * (S.DIVERSITY_SURROGATES.length + 1), from: { height: L }, config: { duration: 125 } }); r.useEffect(() => { _.focusFirstVisibleItem() }, [_]); let E = ["", ...S.DIVERSITY_SURROGATES]; return l().remove(E, e => e === n), E.unshift(n), (0, i.jsx)(d.ListNavigatorProvider, { navigator: _, children: (0, i.jsx)(d.ListNavigatorContainer, { children: e => { let { ref: n, ...r } = e; return (0, i.jsx)(u.animated.div, { ...r, id: t, ref: n, className: a()(O.diversitySelectorOptions, { [O.diversitySelectorOptionsHasTabWrapper]: o }), style: c, role: "listbox", children: E.map((e, t) => (0, i.jsx)(v, { index: t, fade: 0 !== t, delay: 20 * t, surrogate: e, onClick: s }, t)) }) } }) }) }; t.default = e => { let { searchBarRef: t, selectedSurrogate: n, className: s, hasTabWrapper: a } = e, o = A.default.getURL(R + n), [l, u] = r.useState(!1), d = (0, T.default)(null, () => u(!1)), _ = r.useRef(null); return (0, i.jsxs)("div", { ref: d, className: s, children: [(0, i.jsx)(E.Clickable, { innerRef: _, className: O.diversitySelectorButton, onClick: () => { u(!0) }, "aria-label": p.default.Messages.EMOJI_MODIFIER_MENU_BUTTON, "aria-haspopup": !0, "aria-expanded": l, "aria-controls": C, tabIndex: l ? -1 : 0, children: (0, i.jsx)("div", { className: O.diversityEmojiItemImage, style: { backgroundImage: 'url("'.concat(o, '")') } }) }), l ? (0, i.jsx)("div", { onKeyDown: e => { e.keyCode === N.KeyboardKeys.ESCAPE && (e.stopPropagation(), u(!1), null != _.current && _.current.focus()) }, children: (0, i.jsx)(D, { id: C, hasTabWrapper: a, selectedSurrogate: n, onClick: e => { var n; (0, I.setDiversityColor)(e), u(!1), null === (n = t.current) || void 0 === n || n.focus() } }) }) : null] }) } }, 170762: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("465670"), a = n("666272"), o = n("921944"), l = n("689938"), u = n("978790"); t.default = e => { let { markAsDismissed: t } = e; return (0, i.jsxs)("div", { className: u.wrapper, children: [(0, i.jsx)(a.default, { className: u.icon }), (0, i.jsx)("div", { className: u.content, children: (0, i.jsx)(r.Text, { variant: "text-xs/normal", children: l.default.Messages.EMOJI_PICKER_FAVORITES_TIP }) }), (0, i.jsx)(r.Clickable, { onClick: () => t(o.ContentDismissActionType.UNKNOWN), children: (0, i.jsx)(s.default, { className: u.close }) })] }) } }, 880949: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("242411"), l = n("806519"), u = n("687669"); t.default = e => { let { className: t, guild: n, isSelected: s = !0, width: d = 32, height: _ = 32, shouldAnimate: c = !0, isLocked: E = !1 } = e, [I, T] = r.useState(!1), f = n.getIconURL(32, c && s), S = () => T(!0), h = () => T(!1); return (0, i.jsxs)("div", { onFocus: S, onBlur: h, onMouseOver: S, onMouseLeave: h, children: [(0, i.jsx)(l.default, { className: a()(u.mask, t), mask: s || I ? l.MaskIDs.SQUIRCLE : l.MaskIDs.AVATAR_DEFAULT, width: d, height: _, children: null == f ? (0, i.jsx)("div", { className: a()(u.guildIcon, u.guildIconWithoutImage), children: (0, i.jsx)("div", { className: u.guildAcronym, children: n.acronym }) }) : (0, i.jsx)("img", { alt: n.toString(), src: f, className: u.guildIcon }) }), E ? (0, i.jsx)("div", { className: u.categoryItemLockIconContainer, children: (0, i.jsx)(o.default, { width: 10, height: 10, className: u.categoryItemLockIcon }) }) : null] }) } }, 22363: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("646574"), o = n("543241"), l = n("747613"), u = n("533432"), d = n("149203"), _ = n("185923"), c = n("773390"); t.default = e => { let { accessory: t, pickerIntention: n, headerClassName: r, emojiListRef: E, onKeyDown: I, onFocus: T, autoFocus: f, searchBarRef: S, hasTabWrapper: h, diversitySurrogate: A, isBurstReaction: m, onBurstReactionToggle: N, renderHeader: p } = e, O = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(u.default, { emojiListRef: E, gridNavigatorId: d.GRID_NAVIGATOR_ID, onKeyDown: I, className: c.searchBar, ref: S, isFullRow: !1, onFocus: T, autoFocus: f, defaultSearchPlaceholder: (0, o.getSearchPlaceholder)(n, m) }), n === _.EmojiIntention.REACTION ? (0, i.jsx)("div", { className: c.burstToggle, children: (0, i.jsx)(a.default, { checked: m, onClick: N }) }) : null, null != t ? t : (0, i.jsx)(l.default, { searchBarRef: S, className: c.diversitySelector, hasTabWrapper: h, selectedSurrogate: A })] }); return (0, i.jsx)("div", { className: s()(c.header, r), children: null != p ? p(O) : O }) } }, 784222: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmojiGridItemTypes: function() { return i }, EmojiUpsellType: function() { return s }, useCategorySelectHandler: function() { return k }, useEmojiGrid: function() { return G }, useEmojiSelectHandler: function() { return w } }), n("47120"), n("653041"); var i, r, s, a, o, l, u = n("470079"), d = n("392711"), _ = n.n(d), c = n("153832"), E = n("442837"), I = n("80932"), T = n("339085"), f = n("906411"), S = n("633302"), h = n("806966"), A = n("28546"), m = n("889161"), N = n("984933"), p = n("430824"), O = n("914010"), C = n("771845"), R = n("594174"), g = n("176354"), L = n("111361"), v = n("392552"), D = n("543241"), M = n("304852"), y = n("199257"), P = n("149203"), U = n("185923"), b = n("689938"); (a = i || (i = {}))[a.EMOJI = 0] = "EMOJI", a[a.CREATE_EMOJI = 1] = "CREATE_EMOJI", (o = r || (r = {}))[o.SECTION_HEADING = 0] = "SECTION_HEADING", o[o.SECTION_ROW = 1] = "SECTION_ROW"; let G = e => { let { channel: t, collapsedSections: n, includeCreateEmojiButton: i = !0, pickerIntention: r, emojiSearchResults: s, gridWidth: a, emojiPaddingHorizontal: o, emojiSpriteSize: l } = e, d = (0, E.useStateFromStores)([T.default], () => T.default.categories), I = (0, E.useStateFromStores)([p.default], () => p.default.getGuild(null == t ? void 0 : t.getGuildId()), [t]), h = null == t ? null : t.getGuildId(), A = (0, E.useStateFromStores)([T.default], () => T.default.getDisambiguatedEmojiContext(h), [h]), G = (0, D.useFavoriteEmojis)(h), w = (0, D.useFrequentlyUsedEmojis)(h), { topEmojis: k, newlyAddedEmojis: B } = (0, y.default)(h, r), V = (0, E.useStateFromStoresArray)([C.default], () => C.default.getFlattenedGuildIds(), []), { canCreateExpressions: x } = (0, m.useManageResourcePermissions)(I), F = (0, E.useStateFromStores)([R.default], () => R.default.getCurrentUser()), H = (0, L.isPremium)(F), Y = A.getCustomEmoji(), j = e => { if (e.type === f.EmojiTypes.GUILD) return e.guildId }, W = u.useMemo(() => _().groupBy(Y, j), [Y]), { enabled: K, treatment: z } = v.default.useExperiment({ location: "EmojiPicker" }, { autoTrackExposure: !0, disable: !x }); return u.useMemo(() => { let e = [], u = [], E = [], T = [], f = 0, h = 0; if (null != A && null != a) { let A = Math.floor(a / (l + 2 * o)), m = (s, a) => { let o = new Map, d = n.has(a.sectionId), [c, I] = _().partition(s, e => { let n = g.default.isEmojiDisabled({ emoji: e, channel: t, intention: r }); return o.set(e, n), !n }), S = c.concat(I), m = a.guild, N = O.default.getGuildId(), p = a.sectionId === P.EmojiCategoryTypes.TOP_GUILD_EMOJI, C = !p && null != m && N === m.id && S.length < m.getMaxEmojiSlots(), R = p && S.length < A && !K, L = null != m && p && K && z === v.EmojiPickerUploadTreatment.WITH_TOP_LIST && W[m.id].length < m.getMaxEmojiSlots(), M = i && x && null != m && (C || R || L); M && L && S.length === A && S.shift(); let y = K && M && !d, U = Math.ceil((M ? S.length + 1 : S.length) / A), G = []; for (let e = 0; e < U; e++) { let t = 0 === e, n = e * A - (y && e > 0 ? 1 : 0), i = n + A - (y && t ? 1 : 0), r = S.slice(n, i).map((e, n) => { var i, r; return { type: 0, emoji: e, size: l, isDisabled: o.get(e), rowIndex: h, columnIndex: y && t ? n + 1 : n, visibleRowIndex: f, category: a.type, subCategory: a.sectionId === P.EmojiCategoryTypes.TOP_GUILD_EMOJI ? (0, D.getEmojiSubCategory)(k, B, null !== (r = null !== (i = e.id) && void 0 !== i ? i : e.uniqueName) && void 0 !== r ? r : e.name) : P.EmojiSubCategory.NONE } }); if (y && t && !d && (r = [{ type: 1, guildId: m.id, name: b.default.Messages.EMOJI_PICKER_CREATE_EMOJI_TITLE, size: l, rowIndex: h, columnIndex: 0, visibleRowIndex: f }, ...r]), G.push(r), !d) { if (!K && M && e === U - 1) { let t = G[e]; t.push({ type: 1, guildId: m.id, name: b.default.Messages.EMOJI_PICKER_CREATE_EMOJI_TITLE, size: l, rowIndex: e, columnIndex: t.length, visibleRowIndex: f }) } T.push(r.length), E.push(r), f++ } h++ } let w = { ...a, count: s.length }; u.push(w), e.push(d ? 0 : U) }; if (null != s) 0 !== s.unlocked.length && m(s.unlocked, { type: P.EmojiCategoryTypes.SEARCH_RESULTS, sectionId: P.EmojiCategoryTypes.SEARCH_RESULTS, count: s.unlocked.length, isNitroLocked: !1 }), 0 !== s.locked.length && m(s.locked, { type: P.EmojiCategoryTypes.PREMIUM_UPSELL, categoryId: P.EmojiCategories.PREMIUM_UPSELL, sectionId: P.EmojiCategoryTypes.PREMIUM_UPSELL, count: s.locked.length, isNitroLocked: !H }); else for (let e of d) if (e === P.EmojiCategories.CUSTOM) { let n = n => { let i = W[n]; if (null == i) return; let s = i.filter(e => g.default.getEmojiUnavailableReason({ emoji: e, channel: null != t ? t : N.default.getDefaultChannel(n), intention: r }) !== U.EmojiDisabledReasons.DISALLOW_EXTERNAL); if (0 === s.length) return; let a = p.default.getGuild(n), o = !H && g.default.isEmojiCategoryNitroLocked({ categoryEmojis: s, channel: t, intention: r }); m(s, { categoryId: e, guild: a, type: P.EmojiCategoryTypes.GUILD, sectionId: null != a ? a.id : (0, c.v4)(), count: s.length, isNitroLocked: o }) }; if (null != I && n(I.id), (0, U.isExternalEmojiAllowedForIntention)(r)) for (let e of V)(null == I || I.id !== e) && n(e) } else if (e === P.EmojiCategories.TOP_GUILD_EMOJI) { if (null != I) { let { allEmojis: t } = (0, M.getEmojiHotrail)({ topEmojis: k, newlyAddedEmojis: B }); t.length > 0 && m(t, { categoryId: e, guild: p.default.getGuild(I.id), type: P.EmojiCategoryTypes.TOP_GUILD_EMOJI, sectionId: P.EmojiCategoryTypes.TOP_GUILD_EMOJI, count: t.length, isNitroLocked: !1 }) } } else if (e === P.EmojiCategories.RECENT) { let n = w.filter(e => !g.default.isEmojiFiltered({ emoji: e, channel: t, intention: r })); m(n, { categoryId: e, type: P.EmojiCategoryTypes.RECENT, sectionId: P.EmojiCategoryTypes.RECENT, count: n.length, isNitroLocked: !1 }) } else if (e === P.EmojiCategories.FAVORITES) { let n = G.filter(e => !g.default.isEmojiFiltered({ emoji: e, channel: t, intention: r })); 0 !== n.length && m(n, { categoryId: e, type: P.EmojiCategoryTypes.FAVORITES, sectionId: P.EmojiCategoryTypes.FAVORITES, count: n.length, isNitroLocked: !1 }) } else { let t = S.default.getByCategory(e); null != t && m(t, { categoryId: e, type: P.EmojiCategoryTypes.UNICODE, sectionId: e, count: t.length, isNitroLocked: !1 }) } } return { columnCounts: T, emojiGrid: E, rowCountBySection: e, sectionDescriptors: u } }, [A, a, l, o, s, n, t, r, d, I, W, V, B, k, w, G, x, i, H, K, z]) }; (l = s || (s = {}))[l.PREMIUM = 0] = "PREMIUM", l[l.ROLE_SUBSCRIPTION = 1] = "ROLE_SUBSCRIPTION"; let w = e => { let { pickerIntention: t, selectedChannel: n, onSelectEmoji: i, setUpsellConfigs: r, emojiSelectAnalytics: s, trackEmojiFavorited: a } = e, o = (0, E.useStateFromStores)([T.default], () => T.default.getDisambiguatedEmojiContext(null == n ? void 0 : n.getGuildId()), [n]); return u.useCallback((e, l) => { switch (e.type) { case 1: i(void 0, l.isFinalSelection, l.isBurst); return; case 0: { let { emoji: u } = e; if (null == u) return; let d = g.default.getEmojiUnavailableReason({ emoji: u, channel: n, intention: t }); if (l.toggleFavorite) { o.isFavoriteEmojiWithoutFetchingLatest(u) || null != d ? (0, I.unfavoriteEmoji)(u) : (null == a || a(e), (0, I.favoriteEmoji)(u)); return } if (d === U.EmojiDisabledReasons.GUILD_SUBSCRIPTION_UNAVAILABLE) return; if (d === U.EmojiDisabledReasons.PREMIUM_LOCKED) { r({ type: 0, emojiDescriptor: e }); return } if (d === U.EmojiDisabledReasons.ROLE_SUBSCRIPTION_LOCKED && u.type === f.EmojiTypes.GUILD) { r({ type: 1, guildId: u.guildId, emojiId: u.id }); return } if (d === U.EmojiDisabledReasons.ROLE_SUBSCRIPTION_UNAVAILABLE) return; null == s || s(e), i(u, l.isFinalSelection, l.isBurst) } } }, [n, t, i, r, o, s, a]) }, k = e => { let { emojiListRef: t } = e, n = (0, A.useExpressionPickerStore)(e => e.searchQuery), i = u.useCallback(e => { var n; return null === (n = t.current) || void 0 === n ? void 0 : n.scrollToSectionTop(e) }, [t]); return u.useCallback(e => { "" !== n ? ((0, A.setSearchQuery)(""), h.EmojiPickerStore.setActiveCategoryIndex(e)) : i(e) }, [i, n]) } }, 566083: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("622535"), l = n("481060"), u = n("2052"), d = n("906732"), _ = n("963249"), c = n("348121"), E = n("672752"), I = n("465670"), T = n("466111"), f = n("626135"), S = n("74538"), h = n("981631"), A = n("474936"), m = n("689938"), N = n("356623"); t.default = function(e) { let { bodyCopy: t = m.default.Messages.EMOJI_PICKER_PREMIUM_UPSELL_BODY, className: n, onDismiss: s, onCtaClick: p } = e, { location: O } = (0, u.useAnalyticsContext)(), { analyticsLocations: C } = (0, d.default)(), { isLoading: R, suggestedPremiumType: g } = (0, c.default)(), L = r.useRef(!1), v = r.useCallback(() => { (0, _.default)({ subscriptionTier: S.default.getSkuIdForPremiumType(g), analyticsLocations: C, analyticsObject: { ...O, object: h.AnalyticsObjects.BUTTON_CTA, objectType: h.AnalyticsObjectTypes.TIER_2 } }), null == p || p() }, [C, O, p, g]), D = g === A.PremiumTypes.TIER_0; return (0, i.jsx)("div", { className: a()(N.wrapper, n), children: R ? (0, i.jsx)(l.Spinner, { type: l.SpinnerTypes.PULSING_ELLIPSIS }) : (0, i.jsx)(o.VisibilitySensor, { onChange: e => { e && !L.current && (f.default.track(h.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: A.PremiumUpsellTypes.EMOJI_PICKER_SEARCH, location: O, location_stack: C, sku_id: S.default.getSkuIdForPremiumType(g) }), L.current = !0) }, children: (0, i.jsxs)("div", { className: N.upsell, children: [(0, i.jsx)(T.default, { color: D ? E.GradientCssUrls.PREMIUM_TIER_0 : E.GradientCssUrls.PREMIUM_TIER_2, className: N.premiumIcon }), (0, i.jsx)(l.Text, { color: "interactive-normal", className: N.body, variant: "text-sm/normal", children: D ? m.default.Messages.EMOJI_PICKER_PREMIUM_TIER_0_UPSELL_BODY.format({ planName: (0, S.getTierDisplayName)(A.SubscriptionPlans.PREMIUM_MONTH_TIER_0) }) : t }), (0, i.jsx)(l.Button, { look: l.Button.Looks.LINK, color: l.Button.Colors.LINK, onClick: v, children: D ? m.default.Messages.PREMIUM_SETTINGS_GET_TIER_0 : m.default.Messages.EMOJI_PICKER_PREMIUM_UPSELL_CTA }), null != s && (0, i.jsx)(l.Button, { onClick: s, className: N.dismissButton, look: l.Button.Looks.BLANK, size: l.Button.Sizes.ICON, children: (0, i.jsx)(I.default, { className: N.dismissIcon }) })] }) }) }) } }, 141507: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmojiPickerInspector: function() { return v } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("607070"), l = n("906411"), u = n("438332"), d = n("664437"), _ = n("806966"), c = n("65029"), E = n("695346"), I = n("430824"), T = n("451478"), f = n("151785"), S = n("768581"), h = n("392552"), A = n("543241"), m = n("199257"), N = n("880949"), p = n("784222"), O = n("149203"), C = n("689938"), R = n("13450"); function g(e) { return "animated" in e } let L = e => { let { inspectedEmoji: t, guild: n } = e, i = g(t); return null != n && i ? C.default.Messages.EMOJI_FROM_GUILD.format({ guildName: n.name }) : null }, v = r.memo(function(e) { let t, { className: n, emojiGrid: v, guildId: D, pickerIntention: M, channel: y } = e, { enabled: P } = h.default.useExperiment({ location: "EmojiPicker" }, { autoTrackExposure: !1 }), U = _.EmojiPickerStore.useStore(e => e.inspectedExpressionPosition), b = r.useMemo(() => { var e; let { rowIndex: t, columnIndex: n } = U; return null === (e = v[t]) || void 0 === e ? void 0 : e[n] }, [v, U]), G = (null == b ? void 0 : b.type) === p.EmojiGridItemTypes.EMOJI ? null == b ? void 0 : b.emoji : { type: "CREATE_EMOJI", guildId: null == b ? void 0 : b.guildId, allNamesString: null == b ? void 0 : b.name }, w = (0, s.useStateFromStores)([I.default], () => null !== G && G.type === l.EmojiTypes.GUILD ? I.default.getGuild(G.guildId) : null, [G]), k = (0, s.useStateFromStores)([T.default], () => T.default.isFocused()), B = (0, s.useStateFromStores)([o.default], () => o.default.useReducedMotion, []), V = E.AnimateEmoji.useSetting(), x = (0, A.useIsFavoriteEmoji)(D, g(G) ? G : null), { newlyAddedEmojis: F } = (0, m.default)(D, M), H = G.id, Y = (null == b ? void 0 : b.type) === p.EmojiGridItemTypes.EMOJI ? b.subCategory : O.EmojiSubCategory.NONE; if (r.useEffect(() => { let e = Date.now(); return () => { Date.now() - e >= 250 && g(G) && Y !== O.EmojiSubCategory.NONE && (Y === O.EmojiSubCategory.NEWLY_ADDED_EMOJI && null !== G && G.type === l.EmojiTypes.GUILD && (0, d.updateNewlyAddedEmojiSeenAcknowledged)(G.guildId, F[0].id), null != U.source && (0, A.trackEmojiFocus)({ emoji: G, subCategory: Y, position: b.columnIndex + 1, newlyAddedHighlight: Y === O.EmojiSubCategory.NEWLY_ADDED_EMOJI && u.default.isNewerThanLastSeen(D, H) })) } }), null == G) return null; if (g(G)) { var j; let e = null != G.id ? S.default.getEmojiURL({ id: G.id, animated: V && G.animated, size: 28 }) : G.url; t = "" === e ? (0, i.jsx)(a.Text, { variant: "text-md/normal", className: R.glyphEmoji, children: "surrogates" in G ? G.surrogates : null }) : (0, i.jsx)("img", { alt: null !== (j = G.allNamesString) && void 0 !== j ? j : "", src: e, className: R.emoji }) } else t = (0, i.jsx)(f.default, { className: R.icon, foreground: R.icon, width: 24, height: 24 }); let W = null != w ? (0, i.jsx)(N.default, { className: R.__invalid_guildIcon, guild: w, shouldAnimate: !B && k }) : null, K = P && "CREATE_EMOJI" === G.type ? C.default.Messages.EMOJI_PICKER_CREATE_EMOJI_TITLE_DESCRIPTION : G.allNamesString, z = P && "CREATE_EMOJI" === G.type ? C.default.Messages.EMOJI_PICKER_CREATE_EMOJI_TITLE : L({ inspectedEmoji: G, channel: y, guildId: D, intention: M, guild: w }); return (0, i.jsx)(c.default, { className: n, graphicPrimary: t, graphicSecondary: W, titlePrimary: K, titleSecondary: z, isFavorite: x, emojiSubCategory: Y }) }) }, 669040: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("920906"), d = n("873546"), _ = n("442837"), c = n("946188"), E = n("477690"), I = n("481060"), T = n("788911"), f = n("2052"), S = n("607070"), h = n("906732"), A = n("806966"), m = n("28546"), N = n("691251"), p = n("98528"), O = n("551058"), C = n("536442"), R = n("75145"), g = n("197115"), L = n("695346"), v = n("594174"), D = n("695464"), M = n("242411"), y = n("626135"), P = n("111361"), U = n("624138"), b = n("540780"), G = n("543241"), w = n("883661"), k = n("880949"), B = n("784222"), V = n("566083"), x = n("172800"), F = n("149203"), H = n("981631"), Y = n("957825"), j = n("474936"), W = n("689938"), K = n("995292"); let z = (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_TOP), Z = (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_RIGHT), X = (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_BOTTOM), Q = (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_SEARCH_RESULTS_PADDING_TOP), q = (0, U.cssValueToNumber)(E.default.EXPRESSION_PICKER_CONSTANTS_EXPRESSION_PICKER_LIST_SECTION_HEADING_HEIGHT), J = (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_SECTION_MARGIN_BOTTOM), $ = (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_PREMIUM_UPSELL_HEIGHT) + (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_PREMIUM_UPSELL_MARGIN_TOP), ee = (0, U.cssValueToNumber)(E.default.EMOJI_PICKER_CONSTANTS_EMOJI_CONTAINER_PADDING_VERTICAL), et = e => e + 2 * ee, en = e => { let { collapsedSections: t, diversitySurrogate: n, emojiGrid: s, emojiSize: o, onEmojiSelect: u, searchQuery: d, sectionDescriptors: E, setCollapsedSections: I, getEmojiItemProps: T, getEmojiRowProps: S, isScrolling: h, isUsingKeyboardNavigation: m, allowAnimatedEmoji: p, channelGuildId: g, messageId: L, isBurstReaction: v, listHeaderClassName: D, activeSectionIndex: M, upsellGlowOpacity: P, enableNitroUpsell: U } = e, b = (0, f.useAnalyticsContext)(), j = r.useRef(H.UNREACHABLE_REQUEST_ANIMATION_FRAME_ID), W = r.useMemo(() => "" !== n ? c.default.convert.toCodePoint(n) : "", [n]), ee = r.useCallback(e => { if (!U) return !1; let t = E[e], n = E[e + 1]; return e >= E.length - 1 ? t.isNitroLocked : t.isNitroLocked && !n.isNitroLocked }, [U, E]), et = r.useCallback(e => { if (!U || e >= E.length - 1) return !1; let t = E[e], n = E[e + 1]; return !t.isNitroLocked && n.isNitroLocked }, [U, E]), en = r.useCallback(function(e) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, i = new Set(t), r = t.has(e); r ? i.delete(e) : i.add(e), null != n && y.default.track(H.AnalyticEvents.EXPRESSION_PICKER_CATEGORY_COLLAPSE_TOGGLED, { location: b.location, tab: Y.ExpressionPickerViewType.EMOJI, collapsed: !r, guild_id: n.id }), I(i) }, [b, t, I]), ei = r.useCallback(e => { let { columnIndex: t, visibleRowIndex: n } = e, i = e.type === B.EmojiGridItemTypes.EMOJI ? e.emoji.allNamesString : e.name; j.current !== H.UNREACHABLE_REQUEST_ANIMATION_FRAME_ID && window.cancelAnimationFrame(j.current), j.current = window.requestAnimationFrame(() => { A.EmojiPickerStore.setInspectedExpressionPosition(t, n, N.InspectedExpressionChangeSource.MOUSE_EVENT), A.EmojiPickerStore.setSearchPlaceholder(i), j.current = H.UNREACHABLE_REQUEST_ANIMATION_FRAME_ID }) }, []), er = (0, _.useStateFromStores)([C.HotspotStore], () => C.HotspotStore.hasHotspot(C.HotspotLocations.FAVORITE_EMOJI_TOOLTIP), []), es = r.useMemo(() => l().memoize((e, t) => { let n = s[e], r = E[t.sectionIndex]; return (0, i.jsx)(x.default, { emojiDescriptors: n, emojiSize: o, surrogateCodePoint: W, onInspect: ei, onSelect: u, getEmojiItemProps: T, getEmojiRowProps: S, isScrolling: h, isUsingKeyboardNavigation: m, rowIndex: e, allowAnimatedEmoji: p, showEmojiFavoriteTooltip: er, channelGuildId: g, category: r.sectionId, selectedItemClassName: K.__invalid_selectedItem, messageId: L, isBurstReaction: v, inNitroLockedSection: r.isNitroLocked }, e) }), [s, E, o, W, ei, u, T, S, h, m, p, er, g, L, v]); r.useEffect(() => () => { var e, t; return null === (t = es.cache) || void 0 === t ? void 0 : null === (e = t.clear) || void 0 === e ? void 0 : e.call(t) }, [es]); let ea = r.useMemo(() => l().memoize(e => { let n = E[e]; if (null == n) return; let { guild: r, categoryId: s, type: o, sectionId: l } = n; if (o === F.EmojiCategoryTypes.SEARCH_RESULTS) return; let u = o === F.EmojiCategoryTypes.GUILD ? null != r ? (0, i.jsx)(k.default, { guild: r, height: 16, width: 16 }) : null : null != s ? (0, i.jsx)(w.default, { categoryId: s, height: 16, width: 16 }) : null, d = null == r ? void 0 : r.toString(); null != s && (d = (0, G.getStringForEmojiCategory)(s, null == r ? void 0 : r.toString())); let _ = M === e, c = n.isNitroLocked, I = U && c && !_, T = U && c && _; return (0, i.jsx)(O.default, { className: a()(K.header, D, { [K.inactiveNitroHeader]: I, [K.activeNitroHeader]: T }), icon: u, isCollapsed: t.has(l), onClick: () => en(l, r), children: d }, l) }), [E, t, en, D, M, U]), eo = r.useCallback((e, n) => { let r = E[e], s = et(e), o = ee(e); return (0, i.jsx)("div", { className: a()(K.categorySection, { [K.categorySectionLast]: e === E.length - 1, [K.categorySectionCollapsed]: t.has(r.sectionId), [K.categorySectionNitroLocked]: U && r.isNitroLocked, [K.categorySectionNitroDivider]: s || o }), children: n }, e) }, [t, E, U, et, ee]), el = r.useCallback(e => { let n = E[e]; return n.sectionId !== F.EmojiCategoryTypes.PREMIUM_UPSELL || t.has(n.sectionId) || U ? et(e) ? (0, i.jsx)(R.default, { glowOpacity: P }) : ee(e) ? (0, i.jsx)("div", { className: K.nitroBottomDivider }) : null : (0, i.jsx)(V.default, { className: K.premiumUpsell }, "emoji-picker-inline-upsell") }, [E, t, P, U, et, ee]), eu = r.useCallback(e => { let n = E[e]; return n.sectionId !== F.EmojiCategoryTypes.PREMIUM_UPSELL || t.has(n.sectionId) || U ? et(e) ? 41 : ee(e) ? 33 : 0 : $ }, [E, t, U, et, ee]), ed = r.useCallback(e => { var n; return e === E.length - 1 || t.has(null === (n = E[e]) || void 0 === n ? void 0 : n.sectionId) || et(e) || ee(e) ? 0 : J }, [t, E, et, ee]), e_ = r.useMemo(() => ["" !== d ? Q : z, Z, X, 0], [d]); return { listPadding: e_, renderRow: es, renderSection: eo, renderSectionHeader: ea, renderSectionFooter: el, sectionMarginBottom: ed, sectionHeaderHeight: r.useCallback(e => E[e].type === F.EmojiCategoryTypes.SEARCH_RESULTS ? 0 : q, [E]), sectionFooterHeight: eu } }, ei = r.memo(function(e) { let { diversitySurrogate: t, emojiGrid: n, emojiListRef: s, emojiSize: a, onEmojiSelect: o, sectionDescriptors: l, rowCountBySection: c, collapsedSections: E, setCollapsedSections: N, getEmojiItemProps: O, getEmojiRowProps: C, rowCount: R, isUsingKeyboardNavigation: U, channelGuildId: G, messageId: w, isBurstReaction: k, listHeaderClassName: B } = e, V = r.useRef(!1), x = A.EmojiPickerStore.useStore(e => e.activeCategoryIndex), F = (0, m.useExpressionPickerStore)(e => e.searchQuery), Y = L.AnimateEmoji.useSetting(), z = (0, _.useStateFromStores)([v.default], () => v.default.getCurrentUser()), Z = (0, P.isPremium)(z), { location: X } = (0, f.useAnalyticsContext)(), { analyticsLocations: Q } = (0, h.default)(), [q, J] = r.useState(0), [$, ee] = r.useState(!1), [ei, er] = r.useState(0), es = (0, _.useStateFromStores)([S.default], () => S.default.useReducedMotion), ea = (0, u.useSpring)({ transform: $ ? "translateY(0%)" : "translateY(120%)", opacity: $ ? 1 : 0, config: { tension: 120, friction: 14 }, immediate: es }), eo = l.some(e => e.isNitroLocked), { enabled: el } = b.default.useExperiment({ location: "Emoji Picker List" }, { autoTrackExposure: eo }), { listPadding: eu, renderRow: ed, renderSection: e_, renderSectionHeader: ec, renderSectionFooter: eE, sectionMarginBottom: eI, sectionHeaderHeight: eT, sectionFooterHeight: ef } = en({ collapsedSections: E, diversitySurrogate: t, emojiGrid: n, emojiSize: a, onEmojiSelect: o, searchQuery: F, sectionDescriptors: l, setCollapsedSections: N, getEmojiItemProps: O, getEmojiRowProps: C, isScrolling: V, isUsingKeyboardNavigation: U, allowAnimatedEmoji: Y, channelGuildId: G, messageId: w, isBurstReaction: k, listHeaderClassName: B, activeSectionIndex: q, upsellGlowOpacity: ei, enableNitroUpsell: el }), eS = (0, p.useShowUpsellForScrollPosition)({ listRef: s, searchQuery: F, setShowUpsell: ee, setUpsellGlowOpacity: er, emojiSectionDescriptors: l }), eh = (0, p.useSynchronizedActiveCategoryIndexForScrollPosition)({ activeCategoryIndex: x, isScrolling: V, listRef: s, onActiveCategoryIndexChange: e => { J(e), "" === F && A.EmojiPickerStore.setActiveCategoryIndex(e) }, scrollOffset: 0, searchQuery: F, disableForSearch: !1 }); (0, p.useSynchronizedScrollPositionForActiveCategoryIndex)({ searchQuery: F, activeCategoryIndex: x, listRef: s }); let eA = r.useCallback(e => { el && eS(e), eh(e) }, [eS, eh, el]), em = l.length > 0; return r.useEffect(() => { $ && y.default.track(H.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: j.PremiumUpsellTypes.EMOJI_PICKER_FLOATING_UPSELL, location: X, location_stack: Q }) }, [X, Q, $]), r.useEffect(() => { "" !== F && (er(0), ee(!1)) }, [F]), (0, i.jsxs)("div", { className: K.listWrapper, children: [em ? (0, i.jsx)(D.default, { role: "none presentation", className: K.list, listPadding: eu, onScroll: eA, renderRow: ed, renderSection: e_, renderSectionHeader: ec, renderSectionFooter: eE, rowCount: R, rowCountBySection: c, rowHeight: et(a), sectionHeaderHeight: eT, sectionMarginBottom: eI, sectionFooterHeight: ef, stickyHeaders: !0, ref: s }) : (0, i.jsx)(T.default, { message: W.default.Messages.NO_EMOJI_SEARCH_RESULTS, className: K.noSearchResultsContainer }), !el || Z || d.isMobile ? null : (0, i.jsxs)(u.animated.div, { style: { ...ea, opacity: ea.opacity }, className: K.upsellContainer, children: [(0, i.jsx)(M.default, { width: 16, height: 16, className: K.upsellLock }), (0, i.jsx)(I.Text, { variant: "text-sm/medium", color: "header-primary", className: K.upsellText, children: W.default.Messages.EMOJI_PICKER_PREMIUM_UPSELL_TITLE }), (0, i.jsx)(g.default, { className: K.upsellButton, size: I.ButtonSizes.TINY, shinyButtonClassName: K.upsellButton, subscriptionTier: j.PremiumSubscriptionSKUs.TIER_2, buttonText: W.default.Messages.EMOJI_PICKER_PREMIUM_UPSELL_CTA, premiumModalAnalyticsLocation: { section: H.AnalyticsSections.EMOJI_PICKER_FLOATING_UPSELL }, tabIndex: $ ? 0 : -1 })] })] }) }); t.default = ei }, 172800: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("330726"), u = n("906411"), d = n("438332"), _ = n("806966"), c = n("434404"), E = n("675478"), I = n("151785"), T = n("819758"), f = n("392552"), S = n("784222"), h = n("926243"), A = n("149203"), m = n("981631"), N = n("689938"), p = n("687901"); t.default = e => { let { emojiDescriptors: t, emojiSize: n, onSelect: s, onInspect: O, surrogateCodePoint: C, getEmojiItemProps: R, getEmojiRowProps: g, isScrolling: L, isUsingKeyboardNavigation: v, rowIndex: D, allowAnimatedEmoji: M, showEmojiFavoriteTooltip: y, channelGuildId: P, category: U, selectedItemClassName: b, messageId: G, isBurstReaction: w, inNitroLockedSection: k } = e, { enabled: B } = f.default.useExperiment({ location: "EmojiPicker" }, { autoTrackExposure: !1 }), V = _.EmojiPickerStore.getState(), [x, F] = r.useState(V.inspectedExpressionPosition), [H, Y] = (0, l.default)(null, 300), j = r.useRef(null); r.useEffect(() => _.EmojiPickerStore.useStore.subscribe(e => F(e), e => e.inspectedExpressionPosition), []), r.useEffect(() => { E.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []); let W = n === A.EmojiSize.LARGE, K = n === A.EmojiSize.MEDIUM, z = e => { let t = "".concat(e.rowIndex, "c").concat(e.columnIndex); switch (e.type) { case S.EmojiGridItemTypes.CREATE_EMOJI: { let { visibleRowIndex: n, columnIndex: l } = e, u = x.rowIndex === n && x.columnIndex === l, d = t => { t.stopPropagation(), !L.current && !v.current && (s(e, { isFinalSelection: !0, toggleFavorite: !1 }), c.default.open(e.guildId, m.GuildSettingsSections.EMOJI, m.AnalyticsSections.EMOJI_PICKER_POPOUT)) }, _ = () => { !L.current && !v.current && O(e) }; return function() { var e; let { onMouseEnter: n, onMouseLeave: s } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, { ref: c, tabIndex: E, onFocus: T, ...f } = null !== (e = R(l, D)) && void 0 !== e ? e : {}; return (0, r.createElement)("li", { ...f, key: t }, (0, i.jsx)(o.FocusRing, { children: (0, i.jsx)("button", { "aria-label": N.default.Messages.EMOJI_PICKER_CREATE_EMOJI_TITLE, ref: c, className: a()(p.emojiItem, { [p.emojiItemLarge]: W, [p.emojiItemMedium]: K, [p.emojiItemSelected]: u, [null != b ? b : ""]: u, [p.showPulse]: H === t }), onFocus: null != T ? T : _, onMouseOver: _, onMouseEnter: n, onMouseLeave: s, onClick: d, tabIndex: E, children: (0, i.jsx)(I.default, { className: p.icon, foreground: p.icon, width: 24, height: 24 }) }) })) }() } case S.EmojiGridItemTypes.EMOJI: { var n; let { columnIndex: r, visibleRowIndex: a } = e, o = x.rowIndex === a && x.columnIndex === r; return (0, i.jsx)(h.default, { rowIndex: D, descriptor: e, emojiItemKey: t, isInspected: o, isScrolling: L, isUsingKeyboardNavigation: v, surrogateCodePoint: C, allowAnimatedEmoji: M, selectedItemClassName: b, onSelect: s, onInspect: O, channelGuildId: P, getEmojiItemProps: R, isMediumSize: K, isLargeSize: W, pulseItemKey: H, setPulseItemKey: Y, showEmojiFavoriteTooltip: y, messageId: G, isBurstReaction: w, rowPosition: null == j ? void 0 : null === (n = j.current) || void 0 === n ? void 0 : n.getBoundingClientRect(), inNitroLockedSection: k }, t) } } }, Z = e => (0, i.jsx)("ul", { ...g(D), className: a()(p.emojiListRow, { [p.emojiListRowLargeSize]: W, [p.emojiListRowMediumSize]: K }), ref: j, children: e.map(z) }); if (U !== A.EmojiCategoryTypes.TOP_GUILD_EMOJI) return Z(t); let X = t.filter(e => !!B && e.type === S.EmojiGridItemTypes.CREATE_EMOJI || e.subCategory === A.EmojiSubCategory.TOP_GUILD_EMOJI || e.subCategory === A.EmojiSubCategory.NEWLY_ADDED_EMOJI && e.emoji.type === u.EmojiTypes.GUILD && !d.default.isNewerThanLastSeen(e.emoji.guildId, e.emoji.id)), Q = t.filter(e => e.subCategory === A.EmojiSubCategory.NEWLY_ADDED_EMOJI && e.emoji.type === u.EmojiTypes.GUILD && d.default.isNewerThanLastSeen(e.emoji.guildId, e.emoji.id)); return 0 === Q.length ? Z(t) : (0, i.jsxs)("div", { className: p.topEmojiSectionContainer, children: [(0, i.jsx)("div", { className: a()(p.topEmojiContainer, { [p.noEmojis]: 0 === X.length }), children: Z(X) }), (0, i.jsxs)("div", { className: p.newlyAddedHighlightContainer, children: [(0, i.jsx)("div", { className: a()(p.newlyAddedHighlight, { [p.oneItem]: 1 === Q.length, [p.alignRight]: X.length > 0 }), children: Z(Q) }), (0, i.jsxs)("div", { className: a()(p.newlyAddedBadge, { [p.newlyAddedBadgeLarge]: W, [p.newlyAddedBadgeMedium]: K, [p.alignRight]: X.length > 0 }), children: [(0, i.jsx)(T.default, { foreground: p.newlyAddedBadgeStar }), (0, i.jsx)(o.Text, { variant: "text-xs/semibold", color: "always-white", children: N.default.Messages.NEW })] })] })] }) } }, 926243: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("239091"), d = n("607070"), _ = n("339085"), c = n("906411"), E = n("633302"), I = n("691251"), T = n("536442"), f = n("912893"), S = n("430824"), h = n("358085"), A = n("540780"), m = n("288406"), N = n("689938"), p = n("687901"); let O = (e, t) => "".concat(e, ":").concat(t), C = r.forwardRef(function(e, t) { let n, { emoji: r, isFavorite: s, isLargeSize: u, isMediumSize: d, isInspected: _, isDisabled: E, showPulse: T, columnIndex: f, rowIndex: h, size: O, surrogateCodePoint: C, allowAnimatedEmoji: R, selectedItemClassName: g, inNitroLockedSection: L, ...v } = e, D = (0, o.useStateFromStores)([S.default], () => r.type === c.EmojiTypes.GUILD ? S.default.getGuild(r.guildId) : void 0, [r]), { enabled: M } = A.default.useExperiment({ location: "Emoji Picker List" }, { autoTrackExposure: E }), y = E && M && !L; return (0, i.jsx)(l.FocusRing, { children: (0, i.jsx)("button", { ...v, className: a()(p.emojiItem, { [p.emojiItemLarge]: u, [p.emojiItemMedium]: d, [p.emojiItemSelected]: _, [null != g ? g : ""]: _, [p.emojiItemDisabled]: E && !M, [p.showPulse]: T }), "data-type": I.PickerContextMenuDataTypes.EMOJI, "data-id": r.id, "data-name": r.name, ref: t, children: (0, i.jsx)(m.default, { "aria-label": (n = r.allNamesString, ((null == D ? void 0 : D.name) != null && (n = N.default.Messages.EMOJI_FROM_GUILD_LABEL.format({ names: n, guildName: D.name })), s) ? N.default.Messages.EMOJI_NAMES_WITH_FAVORITED.format({ names: n }) : n), columnIndex: f, rowIndex: h, emoji: r, size: O, surrogateCodePoint: C, allowAnimatedEmoji: R, isLocked: y }) }) }) }); function R(e) { let { descriptor: t, emojiItemKey: s, isInspected: a, rowIndex: c, channelGuildId: I, onInspect: S, onSelect: A, isScrolling: m, isUsingKeyboardNavigation: p, showEmojiFavoriteTooltip: R, surrogateCodePoint: g, selectedItemClassName: L, getEmojiItemProps: v, isMediumSize: D, isLargeSize: M, pulseItemKey: y, allowAnimatedEmoji: P, setPulseItemKey: U, messageId: b, isBurstReaction: G, rowPosition: w, inNitroLockedSection: k } = e, [B, V] = r.useState(""), x = (0, o.useStateFromStores)([d.default], () => d.default.useReducedMotion), F = (0, o.useStateFromStores)([_.default], () => _.default.getDisambiguatedEmojiContext(I), [I]), H = r.useRef(null), { emoji: Y, size: j, isDisabled: W, columnIndex: K } = t, z = e => { if (e.stopPropagation(), m.current || p.current) return; let n = e.altKey; n && !_.default.getDisambiguatedEmojiContext().isFavoriteEmojiWithoutFetchingLatest(Y) && U(s), (0, T.hideHotspot)(T.HotspotLocations.FAVORITE_EMOJI_TOOLTIP), A(t, { isFinalSelection: !e.shiftKey, toggleFavorite: n }) }, Z = () => { !m.current && !p.current && S(t) }, X = e => { (0, u.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("39010").then(n.bind(n, "269254")); return t => (0, i.jsx)(e, { ...t }) }) }, Q = function() { var e; let { onMouseEnter: t, onMouseLeave: n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, { ref: o, tabIndex: l, onFocus: u, ...d } = null !== (e = v(K, c)) && void 0 !== e ? e : {}; return (0, r.createElement)("li", { ...d, key: s, ref: H }, B !== O(K, c) && (0, i.jsx)(C, { ref: o, emoji: Y, isFavorite: F.isFavoriteEmojiWithoutFetchingLatest(Y), isLargeSize: M, isMediumSize: D, isInspected: a, isDisabled: W, showPulse: y === s, allowAnimatedEmoji: P, onFocus: null != u ? u : Z, onMouseMove: Z, onMouseEnter: t, onMouseLeave: n, onClick: e => { if (null != H.current && null != w && null != b && !e.shiftKey && null != Y.name && G && !x && P) { let e = null == Y.id ? E.default.convertNameToSurrogate(Y.name) : Y.name, t = H.current.getBoundingClientRect(); t.x = w.x + (K + 1) * j, V(O(K, c)), (0, f.addReactionPickerAnimation)(b, e, Y.id, t) } z(e) }, onContextMenu: X, tabIndex: l, columnIndex: K, rowIndex: c, size: j, surrogateCodePoint: g, selectedItemClassName: L, inNitroLockedSection: k })) }; return R ? (0, i.jsx)(l.Tooltip, { text: N.default.Messages.EMOJI_FAVORITE_TOOLTIP.format({ key: (0, h.isMac)() ? "Opt" : "Alt" }), position: "top", delay: 200, children: e => Q(e) }, s) : Q() } }, 288406: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("481060"), d = n("633302"), _ = n("334920"), c = n("242411"), E = n("768581"), I = n("185923"), T = n("414073"); let f = l().memoize(e => "".concat(e * I.EmojiSprites.NonDiversityPerRow, "px ").concat(e * Math.ceil(d.default.numNonDiversitySprites / I.EmojiSprites.NonDiversityPerRow), "px")), S = l().memoize(e => "".concat(e * I.EmojiSprites.DiversityPerRow, "px ").concat(e * Math.ceil(d.default.numDiversitySprites / I.EmojiSprites.DiversityPerRow), "px")), h = (e, t, i) => { let r, s, a; if (!e.useSpriteSheet) return; let o = null != e.index ? e.index : 0; e.hasDiversity ? (r = n("36837")("./images/spritesheet-".concat(t, "-").concat(i, ".png").replace("./images/", "./")), s = S(i), a = I.EmojiSprites.DiversityPerRow) : (r = n("12302")("./images/spritesheet-emoji-".concat(i, ".png").replace("./images/", "./")), s = f(i), a = I.EmojiSprites.NonDiversityPerRow); let l = -o % a * i, u = -Math.floor(o / a) * i; return { backgroundImage: "url('".concat(r, "')"), backgroundPosition: "".concat(l, "px ").concat(u, "px"), backgroundSize: s, height: i, width: i } }, A = r.memo(function(e) { let { emoji: t, size: n, surrogateCodePoint: s, allowAnimatedEmoji: o, "aria-label": l, isLocked: d } = e, f = (() => { if (!t.useSpriteSheet) { var e; let r = null == t.id ? t.url : E.default.getEmojiURL({ id: t.id, animated: o && t.animated, size: I.EMOJI_URL_BASE_SIZE }); return null != r ? (0, i.jsx)(_.default, { className: T.lockedEmoji, "aria-label": l, src: r, size: n, alt: null !== (e = t.allNamesString) && void 0 !== e ? e : "" }) : null } return (0, i.jsx)("div", { className: a()(T.emojiSpriteImage, { [T.lockedEmoji]: d }), style: h(t, s, n), children: (0, i.jsx)(u.HiddenVisually, { children: l }) }) })(); return (0, i.jsxs)(r.Fragment, { children: [f, d ? (0, i.jsx)("div", { className: T.emojiLockIconContainer, children: (0, i.jsx)(c.default, { width: 16, height: 16, className: T.emojiLockIcon }) }) : null] }) }); t.default = A }, 901963: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("913527"), a = n.n(s), o = n("442837"), l = n("433517"), u = n("481060"), d = n("355467"), _ = n("230711"), c = n("78839"), E = n("672752"), I = n("465670"), T = n("466111"), f = n("74538"), S = n("543241"), h = n("981631"), A = n("474936"), m = n("689938"), N = n("375660"); let p = "premiumRetentionEmojiPickerNotice", O = l.Storage.get(p); t.default = e => { let { closePopout: t, channel: n } = e, [s, C] = r.useState(!1), { subscription: R, hasFetchedSubscriptions: g } = (0, o.useStateFromStoresObject)([c.default], () => ({ subscription: c.default.getPremiumSubscription(), hasFetchedSubscriptions: c.default.hasFetchedSubscriptions() })); if (r.useEffect(() => { !g && (0, d.fetchSubscriptions)() }, [g]), null == R || !(0, f.isSubscriptionStatusFailedPayment)(R.status) || s) return null; let L = R.status === h.SubscriptionStatusTypes.PAST_DUE ? (0, f.getBillingGracePeriodDaysAndExpiresDate)(R).expiresDate : a()(R.currentPeriodStart).add(A.MAX_ACCOUNT_HOLD_DAYS), v = "".concat(R.id, ":").concat(L.toISOString()); if (O === v) return null; let D = f.default.getPremiumType(R.planId) === A.PremiumTypes.TIER_0 ? E.GradientCssUrls.PREMIUM_TIER_0 : f.default.getPremiumType(R.planId) === A.PremiumTypes.TIER_1 ? E.GradientCssUrls.PREMIUM_TIER_1 : E.GradientCssUrls.PREMIUM_TIER_2; return (0, i.jsxs)("div", { className: N.premiumRetentionNotice, children: [(0, i.jsx)(T.default, { className: N.premiumRetentionNoticeIcon, color: D }), (0, i.jsxs)("div", { className: N.premiumRetentionNoticeContent, children: [(0, i.jsx)(u.Text, { variant: "text-xs/normal", children: m.default.Messages.PREMIUM_RETENTION_EMOJI_PICKER_DESCRIPTION.format({ planName: f.default.getDisplayPremiumType(R.planId), endsAt: L }) }), (0, i.jsx)("div", { children: (0, i.jsx)(u.Anchor, { onClick: () => { (0, S.trackPremiumSettingsPaneOpened)(n), t(), _.default.open(h.UserSettingsSections.PREMIUM) }, children: m.default.Messages.PREMIUM_RETENTION_EMOJI_PICKER_UPDATE_PAYMENT_INFORMATION }) })] }), (0, i.jsx)(u.Clickable, { onClick: () => { l.Storage.set(p, v), O = v, C(!0) }, children: (0, i.jsx)(I.default, { className: N.premiumRetentionNoticeClose }) })] }) } }, 212263: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("780384"), l = n("481060"), u = n("410030"), d = n("100527"), _ = n("906732"), c = n("28546"), E = n("98278"), I = n("348121"), T = n("104494"), f = n("639119"), S = n("165583"), h = n("197115"), A = n("626135"), m = n("176354"), N = n("74538"), p = n("543241"), O = n("149203"), C = n("981631"), R = n("185923"), g = n("474936"), L = n("689938"), v = n("369454"); t.default = e => { var t, s, D; let { onLearnMore: M, onClose: y, channel: P, emojiDescriptor: U, pickerIntention: b, analyticsLocation: G } = e, w = (0, u.default)(), [k, B] = r.useState(!1), V = () => { (0, p.trackPremiumSettingsPaneOpened)(P), (0, E.navigateToPremiumMarketingPage)(), M() }, x = (0, o.isThemeLight)(w) ? n("537381") : n("341048"), F = (0, f.usePremiumTrialOffer)(), H = (0, T.usePremiumDiscountOffer)(), Y = null != F || null != H, { isLoading: j, suggestedPremiumType: W } = (0, I.default)(), K = (0, c.useExpressionPickerStore)(e => e.searchQuery), { analyticsLocations: z } = (0, _.default)(d.default.EMOJI_PICKER), Z = null == F ? void 0 : null === (t = F.subscription_trial) || void 0 === t ? void 0 : t.sku_id, X = null != Z ? Z === g.PremiumSubscriptionSKUs.TIER_0 : W === g.PremiumTypes.TIER_0; return r.useEffect(() => { if (!j) { let e; e = b === R.EmojiIntention.REACTION ? g.PremiumUpsellTypes.EMOJI_PICKER_REACTION_EMOJI_CLICKED : U.subCategory === O.EmojiSubCategory.TOP_GUILD_EMOJI ? g.PremiumUpsellTypes.EMOJI_PICKER_TOP_SERVER_EMOJI_CLICKED : U.subCategory === O.EmojiSubCategory.NEWLY_ADDED_EMOJI ? g.PremiumUpsellTypes.EMOJI_PICKER_NEWLY_ADDED_EMOJI_CLICKED : g.PremiumUpsellTypes.EMOJI_PICKER_EMOJI_CLICKED; let t = U.emoji; A.default.track(C.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: e, is_animated: t.animated, is_external: !m.default.isInternalEmojiForGuildId(t, null == P ? void 0 : P.getGuildId()), has_search_query: null != K && "" !== K, location: { ...G, object: C.AnalyticsObjects.EMOJI }, location_stack: z, sku_id: (0, N.castPremiumSubscriptionAsSkuId)(N.default.getSkuIdForPremiumType(W)) }) } }, [j, W, U, P, G, z, b, K]), (0, i.jsxs)("div", { className: a()(v.premiumPromo, { [v.unifyTrialUpsell]: Y }), children: [(0, i.jsx)(l.Clickable, { className: v.premiumPromoClose, onClick: y, children: L.default.Messages.CLOSE }), j ? (0, i.jsx)(l.Spinner, {}) : (0, i.jsxs)(i.Fragment, { children: [Y ? (0, i.jsx)(S.default, { type: g.PremiumUpsellTypes.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_EMOJI, subscriptionTier: null !== (D = null == F ? void 0 : null === (s = F.subscription_trial) || void 0 === s ? void 0 : s.sku_id) && void 0 !== D ? D : g.PremiumSubscriptionSKUs.TIER_2, onClose: y, trialOffer: F, discountOffer: H, children: X ? L.default.Messages.PREMIUM_PROMO_DESCRIPTION_SEARCH_TIER_UPSELL.format({ planName: (0, N.getTierDisplayName)(g.SubscriptionPlans.PREMIUM_MONTH_TIER_0), onClick: V }) : L.default.Messages.PREMIUM_PROMO_DESCRIPTION_SEARCH_UPSELL.format({ onClick: V }) }) : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("img", { alt: "", className: v.premiumPromoImage, src: x }), (0, i.jsx)("div", { className: v.premiumPromoTitle, children: L.default.Messages.PREMIUM_PROMO_TITLE_SEARCH_UPSELL }), (0, i.jsx)("div", { className: v.premiumPromoDescription, children: X ? L.default.Messages.PREMIUM_PROMO_DESCRIPTION_SEARCH_TIER_UPSELL.format({ planName: (0, N.getTierDisplayName)(g.SubscriptionPlans.PREMIUM_MONTH_TIER_0), onClick: V }) : L.default.Messages.PREMIUM_PROMO_DESCRIPTION_SEARCH_UPSELL.format({ onClick: V }) })] }), !Y && (0, i.jsx)(h.default, { subscriptionTier: X ? g.PremiumSubscriptionSKUs.TIER_0 : g.PremiumSubscriptionSKUs.TIER_2, submitting: k, premiumModalAnalyticsLocation: { section: C.AnalyticsSections.EMOJI_PICKER_POPOUT, object: C.AnalyticsObjects.BUTTON_CTA }, size: l.Button.Sizes.SMALL, color: l.Button.Colors.GREEN, onClick: () => { B(!0) }, onSubscribeModalClose: e => { B(!1), e && y() }, buttonText: (() => { if (Y) return X ? L.default.Messages.PREMIUM_TRIAL_TIER_0_CTA_BUTTON_VARIANT : L.default.Messages.PREMIUM_TRIAL_CTA_BUTTON_VARIANT; return X ? L.default.Messages.PREMIUM_SETTINGS_GET_TIER_0 : L.default.Messages.PREMIUM_REQUIRED_GET_NITRO })() })] })] }) } }, 533432: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("143927"), l = n("260866"), u = n("461745"), d = n("806966"), _ = n("28546"), c = n("149203"), E = n("981631"), I = n("689938"), T = n("773390"); let f = r.forwardRef(function(e, t) { let { emojiListRef: n, gridNavigatorId: s, isFullRow: f, onKeyDown: S, onFocus: h, autoFocus: A, className: m, defaultSearchPlaceholder: N } = e, p = r.useRef(null), O = (0, _.useExpressionPickerStore)(e => e.searchQuery), [C, R] = d.EmojiPickerStore.useStore(e => [e.inspectedExpressionPosition, e.searchPlaceholder], o.default), g = r.useCallback(e => { var t; d.EmojiPickerStore.setActiveCategoryIndex("" === e ? 0 : c.INACTIVE_CATEGORY_INDEX), d.EmojiPickerStore.setInspectedExpressionPosition(0, 0), d.EmojiPickerStore.setSearchPlaceholder(null), (0, _.setSearchQuery)(e), null === (t = n.current) || void 0 === t || t.scrollTo(0) }, [n]), L = r.useCallback(() => { (0, _.setSearchQuery)("") }, []); return r.useImperativeHandle(t, () => ({ focus: () => { var e; return null === (e = p.current) || void 0 === e ? void 0 : e.focus() } })), (0, i.jsx)(u.default, { autoFocus: A, query: O, ref: p, size: u.default.Sizes.MEDIUM, placeholder: null != R ? R : N, onClear: L, onKeyDown: e => { switch (e.keyCode) { case E.KeyboardKeys.ARROW_LEFT: case E.KeyboardKeys.ARROW_RIGHT: case E.KeyboardKeys.ARROW_UP: case E.KeyboardKeys.ARROW_DOWN: document.activeElement !== e.target && e.preventDefault() } S(e) }, onFocus: h, onQueryChange: g, className: a()(m, { [T.searchBarFullRow]: f }), preventEscapePropagation: !1, useKeyboardNavigation: !1, inputProps: { "aria-label": I.default.Messages.SEARCH_EMOJIS, "aria-haspopup": "grid", "aria-controls": s, "aria-expanded": !0, "aria-activedescendant": (0, l.makeGridId)(s, C.columnIndex, C.rowIndex) } }) }); t.default = r.memo(f) }, 188742: function(e, t, n) { "use strict"; n.r(t); let i = new(n("113638")).default(function(e) { { let t = n("160170").emojiTermsImporter[e]; return void 0 !== t ? t().then(e => e.default) : Promise.resolve({}) } }); t.default = { setEmojiLocale: function(e) { i.setParams(e) }, getTermsForEmoji: function(e) { let t = i.get(); return void 0 !== t ? t[e] : [] } } }, 160170: function(e, t, n) { "use strict"; n.r(t), n.d(t, { emojiTermsImporter: function() { return i } }); let i = { bg: () => n.e("74459").then(n.t.bind(n, "731376", 19)), cs: () => n.e("73149").then(n.t.bind(n, "788014", 19)), da: () => n.e("53510").then(n.t.bind(n, "452673", 19)), de: () => n.e("98952").then(n.t.bind(n, "509691", 19)), el: () => n.e("94889").then(n.t.bind(n, "445881", 19)), "en-US": () => n.e("84399").then(n.t.bind(n, "241749", 19)), "es-ES": () => n.e("5877").then(n.t.bind(n, "510998", 19)), "es-419": () => n.e("3985").then(n.t.bind(n, "207236", 19)), fi: () => n.e("71196").then(n.t.bind(n, "114867", 19)), fr: () => n.e("3807").then(n.t.bind(n, "234356", 19)), hr: () => n.e("95136").then(n.t.bind(n, "298012", 19)), hu: () => n.e("85828").then(n.t.bind(n, "847174", 19)), it: () => n.e("34933").then(n.t.bind(n, "933887", 19)), ja: () => n.e("44878").then(n.t.bind(n, "174350", 19)), ko: () => n.e("92401").then(n.t.bind(n, "344546", 19)), lt: () => n.e("47034").then(n.t.bind(n, "916446", 19)), nl: () => n.e("19701").then(n.t.bind(n, "175256", 19)), no: () => n.e("69633").then(n.t.bind(n, "66215", 19)), pl: () => n.e("39648").then(n.t.bind(n, "79527", 19)), "pt-BR": () => n.e("44827").then(n.t.bind(n, "757066", 19)), ro: () => n.e("4984").then(n.t.bind(n, "586569", 19)), ru: () => n.e("41552").then(n.t.bind(n, "561690", 19)), "sv-SE": () => n.e("8790").then(n.t.bind(n, "737608", 19)), th: () => n.e("63629").then(n.t.bind(n, "701286", 19)), tr: () => n.e("4189").then(n.t.bind(n, "711288", 19)), uk: () => n.e("77117").then(n.t.bind(n, "422535", 19)), vi: () => n.e("39009").then(n.t.bind(n, "163969", 19)), "zh-CN": () => n.e("95937").then(n.t.bind(n, "49484", 19)), hi: () => n.e("35869").then(n.t.bind(n, "908431", 19)) } }, 113638: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return r } }); class r { setParams(e) { this.param !== e && (this.param = e, this.loading = !1, this.loaded = !1) } get() { return this.ensureLoaded(), this.val } ensureLoaded() { if (this.loaded || this.loading || void 0 === this.param) return; let e = this.param; this.loading = !0, this.loader(e).then(t => { e === this.param && (this.val = t, this.loading = !1, this.loaded = !0) }) } constructor(e) { i(this, "val", void 0), i(this, "loading", !1), i(this, "loaded", !1), i(this, "param", void 0), i(this, "loader", void 0), this.loader = e } } }, 185923: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { EMOJI_MAX_FILESIZE: function() { return T }, EMOJI_MAX_FILESIZE_KB: function() { return I }, EMOJI_MAX_LENGTH: function() { return c }, EMOJI_MAX_SLOTS: function() { return _ }, EMOJI_RE: function() { return E }, EMOJI_URL_BASE_SIZE: function() { return f }, EmojiDisabledReasons: function() { return r }, EmojiIntention: function() { return s }, EmojiInteractionPoint: function() { return a }, EmojiSprites: function() { return i }, isExternalEmojiAllowedForIntention: function() { return h } }), n("47120"); let _ = 50, c = 32, E = /[^a-zA-Z0-9_]/g, I = 256, T = 262144, f = 48; (o = i || (i = {}))[o.NonDiversityPerRow = 42] = "NonDiversityPerRow", o[o.DiversityPerRow = 10] = "DiversityPerRow", o[o.PickerPerRow = 11] = "PickerPerRow", o[o.PickerCount = 50] = "PickerCount", (l = r || (r = {}))[l.DISALLOW_EXTERNAL = 0] = "DISALLOW_EXTERNAL", l[l.GUILD_SUBSCRIPTION_UNAVAILABLE = 1] = "GUILD_SUBSCRIPTION_UNAVAILABLE", l[l.PREMIUM_LOCKED = 2] = "PREMIUM_LOCKED", l[l.ONLY_GUILD_EMOJIS_ALLOWED = 3] = "ONLY_GUILD_EMOJIS_ALLOWED", l[l.ROLE_SUBSCRIPTION_LOCKED = 4] = "ROLE_SUBSCRIPTION_LOCKED", l[l.ROLE_SUBSCRIPTION_UNAVAILABLE = 5] = "ROLE_SUBSCRIPTION_UNAVAILABLE", (u = s || (s = {}))[u.REACTION = 0] = "REACTION", u[u.STATUS = 1] = "STATUS", u[u.COMMUNITY_CONTENT = 2] = "COMMUNITY_CONTENT", u[u.CHAT = 3] = "CHAT", u[u.GUILD_STICKER_RELATED_EMOJI = 4] = "GUILD_STICKER_RELATED_EMOJI", u[u.GUILD_ROLE_BENEFIT_EMOJI = 5] = "GUILD_ROLE_BENEFIT_EMOJI", u[u.SOUNDBOARD = 6] = "SOUNDBOARD", u[u.VOICE_CHANNEL_TOPIC = 7] = "VOICE_CHANNEL_TOPIC", u[u.GIFT = 8] = "GIFT", u[u.AUTO_SUGGESTION = 9] = "AUTO_SUGGESTION", u[u.POLLS = 10] = "POLLS"; let S = new Set([2, 4, 5, 6, 8]); function h(e) { return !S.has(e) }(d = a || (a = {})).EmojiButtonMouseEntered = "EMOJI_BUTTON_MOUSE_ENTERED", d.EmojiButtonFocused = "EMOJI_BUTTON_FOCUSED", d.ChatInputExpressionPressed = "CHAT_INPUT_EXPRESSION_PRESSED", d.ChatInputSuggestionsShown = "CHAT_INPUT_SUGGESTIONS_SHOWN", d.SearchEmojiKeybindPressed = "SEARCH_EMOJI_KEYBIND_PRESSED", d.AutocompleteTyped = "AUTOCOMPLETE_TYPED", d.AutocompleteWrapperShown = "AUTOCOMPLETE_WRAPPER_SHOWN", d.GuildLeaveModalShown = "GUILD_LEAVE_MODAL_SHOWN", d.AddReactionPopoutMouseEntered = "ADD_REACTION_POPOUT_MOUSE_ENTERED", d.AddReactionPopoutFocused = "ADD_REACTION_POPOUT_FOCUSED", d.MessageContextMenuMouseEntered = "MESSAGE_CONTEXT_MENU_MOUSE_ENTERED", d.EmojiPickerActionSheetOpened = "EMOJI_PICKER_ACTION_SHEET_OPENED", d.TrackOpenPopoutUsed = "TRACK_OPEN_POPOUT_USED", d.CustomEmojiTooltipShown = "CUSTOM_EMOJI_TOOLTIP_SHOWN" }, 339085: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("51350"), n("653041"), n("627494"), n("757143"), n("724458"); var i, r = n("392711"), s = n.n(r), a = n("913527"), o = n.n(a), l = n("956067"), u = n("442837"), d = n("570140"), _ = n("704907"), c = n("287328"), E = n("86670"), I = n("489033"), T = n("188742"), f = n("973542"), S = n("889564"), h = n("687476"), A = n("978519"), m = n("706454"), N = n("581883"), p = n("271383"), O = n("93093"), C = n("430824"), R = n("771845"), g = n("594174"), L = n("70956"), v = n("176354"), D = n("823379"), M = n("226951"), y = n("709054"), P = n("906411"), U = n("633302"), b = n("174065"), G = n("396352"), w = n("347374"), k = n("185923"), B = n("981631"), V = n("149203"), x = n("526761"); function F(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let H = [V.EmojiCategories.TOP_GUILD_EMOJI.toString(), V.EmojiCategories.FAVORITES.toString(), V.EmojiCategories.RECENT.toString(), V.EmojiCategories.CUSTOM.toString()].concat(U.default.getCategories()), Y = { pendingUsages: [] }; class j { getEmoji(e) { return this.build(), this._emojiMap[e] } getUsableEmoji(e) { let t = this.getEmoji(e); return null != t && this.isUsable(t) ? t : null } isUsable(e) { if (0 === e.roles.length) return !0; let t = p.default.getMember(this.id, this._userId); return null != t && (!!(t.roles.some(t => e.roles.includes(t)) || (0, S.isPurchasableRoleSubscriptionEmoji)(e)) || !1) } get rawEmojis() { return this._emojis } get emojis() { return this.build(), this._emojis } get emoticons() { return this.build(), this._emoticons } get usableEmojis() { return this.build(), this._usableEmojis } build() { this._dirty && (this._dirty = !1, this._emojis.forEach(e => { e.allNamesString = ":".concat(e.name, ":"), e.guildId = this.id, e.type = P.EmojiTypes.GUILD, this._emojiMap[e.id] = e }), this._usableEmojis = s().sortBy(this._emojis.filter(e => this.isUsable(e)), e => e.name), this._emoticons = this._usableEmojis.filter(e => !e.require_colons)) } constructor(e, t, n, i = !1) { F(this, "id", void 0), F(this, "_userId", void 0), F(this, "_dirty", !0), F(this, "_emojis", void 0), F(this, "_emojiMap", {}), F(this, "_emoticons", []), F(this, "_usableEmojis", []), F(this, "_canSeeServerSubIAP", !1), F(this, "_totalUsable", 0), this.id = e, this._userId = t, this._emojis = n, this._canSeeServerSubIAP = i } } let W = y.default.fromTimestamp(Date.now() - 60 * L.default.Millis.DAY), K = [], z = 2, Z = H.slice(0), X = {}, Q = {}, q = null, J = new Map; function $(e) { var t, n; let i = ee()[e]; return null != i && null !== (n = null === (t = X[i]) || void 0 === t ? void 0 : t.getUsableEmoji(e)) && void 0 !== n ? n : void 0 } function ee() { if (et(), null == Q) for (let e in Q = {}, X) for (let t of X[e].rawEmojis) Q[t.id] = e; return Q } async function et() { if (0 !== z) return; let e = c.default.database(); if (null == e) return; z = 2; let t = await (0, E.tryLoadOrResetCacheGatewayAsync)("EmojiStore.loadSavedEmojis", () => l.default.timeAsync("\uD83D\uDCBE", "loadSavedEmojis", () => I.default.getAsync(e))); null != t && d.default.dispatch({ type: "CACHED_EMOJIS_LOADED", emojis: t }) } class en { static get(e) { return void 0 === e && (e = null), (null == en._lastInstance || en._lastInstance.guildId !== e) && (en._lastInstance = new en(e)), en._lastInstance } static reset() { en._lastInstance = null } static resetFrequentlyUsed() { null != en._lastInstance && (en._lastInstance.frequentlyUsed = null) } static resetFavorites() { null != en._lastInstance && (en._lastInstance.favorites = null, en._lastInstance.favoriteNamesAndIds = null) } static clear(e) { null != en._lastInstance && en._lastInstance.guildId === e && (en._lastInstance = null) } ensureDisambiguated() { null == this.disambiguatedEmoji && this._buildDisambiguatedCustomEmoji() } getDisambiguatedEmoji() { return null == this.disambiguatedEmoji && this._buildDisambiguatedCustomEmoji(), this.disambiguatedEmoji } getCustomEmoji() { return null == this.customEmojis && this._buildDisambiguatedCustomEmoji(), this.customEmojis } getGroupedCustomEmoji() { return null == this.groupedCustomEmojis && this._buildDisambiguatedCustomEmoji(), this.groupedCustomEmojis } getByName(e) { if ((null == this.emojisByName || null == this.unicodeAliases) && this._buildDisambiguatedCustomEmoji(), Object.prototype.hasOwnProperty.call(this.emojisByName, e)) return this.emojisByName[e]; if (Object.prototype.hasOwnProperty.call(this.unicodeAliases, e)) { let t = this.unicodeAliases[e]; if (Object.prototype.hasOwnProperty.call(this.emojisByName, t)) return this.emojisByName[t] } } getEmoticonByName(e) { if (null == this.emoticonsByName && this._buildDisambiguatedCustomEmoji(), Object.prototype.hasOwnProperty.call(this.emoticonsByName, e)) return this.emoticonsByName[e] } getById(e) { if (null == this.emojisById && this._buildDisambiguatedCustomEmoji(), Object.prototype.hasOwnProperty.call(this.emojisById, e)) return this.emojisById[e] } getCustomEmoticonRegex() { return null == this.escapedEmoticonNames && this._buildDisambiguatedCustomEmoji(), null == this.emoticonRegex && null != this.escapedEmoticonNames && "" !== this.escapedEmoticonNames && (this.emoticonRegex = new RegExp("^\\b(".concat(this.escapedEmoticonNames, ")\\b"))), this.emoticonRegex } getFrequentlyUsedEmojisWithoutFetchingLatest() { if (this.ensureDisambiguated(), null != this.frequentlyUsed) return this.frequentlyUsed; let e = ei.frequently.map(e => null != e.id ? this.getById(e.id) : U.default.getByName(e.name)).filter(D.isNotNullish), t = (0, w.default)(e); return this.frequentlyUsed = [...t.values()], this.frequentlyUsed } rebuildFavoriteEmojisWithoutFetchingLatest() { var e, t; if (this.ensureDisambiguated(), null != this.favorites && null != this.favoriteNamesAndIds) return { favorites: this.favorites, favoriteNamesAndIds: this.favoriteNamesAndIds }; let n = (null !== (t = null === (e = N.default.frecencyWithoutFetchingLatest.favoriteEmojis) || void 0 === e ? void 0 : e.emojis) && void 0 !== t ? t : []).map(e => { var t; return null !== (t = this.getById(e)) && void 0 !== t ? t : U.default.getByName(e) }).filter(D.isNotNullish), i = (0, w.default)(n); return this.favorites = [...i.values()], this.favoriteNamesAndIds = new Set(i.keys()), { favorites: this.favorites, favoriteNamesAndIds: this.favoriteNamesAndIds } } get favoriteEmojisWithoutFetchingLatest() { return this.rebuildFavoriteEmojisWithoutFetchingLatest().favorites } getEmojiInPriorityOrderWithoutFetchingLatest() { let e = new Set; return this.favoriteEmojisWithoutFetchingLatest.concat(this.getFrequentlyUsedEmojisWithoutFetchingLatest()).filter(t => !e.has(t) && (e.add(t), !0)) } getTopEmojiWithoutFetchingLatest(e) { if (this.ensureDisambiguated(), null == this.topEmojis) { var t; let n = J.get(e), i = G.default.getTopEmojiIdsByGuildId(e); if (null == n && null == i) return K; let r = (null !== (t = null == n ? void 0 : n.emojiIds) && void 0 !== t ? t : i).map(e => { var t; return null !== (t = this.getById(e)) && void 0 !== t ? t : U.default.getByName(U.default.convertSurrogateToName(e, !1)) }), s = []; r.forEach(e => { null != e && s.push(e) }); let a = this.getNewlyAddedEmojiForGuild(e).map(e => e.id); this.topEmojis = s.filter(e => !a.includes(e.id)) } return this.topEmojis } getNewlyAddedEmojiForGuild(e) { if (this.ensureDisambiguated(), null == this.newlyAddedEmoji) return K; let t = this.newlyAddedEmoji[e]; return null == t ? K : t } getEscapedCustomEmoticonNames() { return null == this.escapedEmoticonNames && this._buildDisambiguatedCustomEmoji(), this.escapedEmoticonNames } nameMatchesChain(e) { return s()(this.getDisambiguatedEmoji()).filter(t => { let { id: n, names: i, name: r } = t, a = null != i && s().some(i, e), o = null != r && e(r), l = null != r && s().some(T.default.getTermsForEmoji(r), e), u = null != n && s().some(b.default.getCaptionsForEmojiById({ emojiId: n }), e); return a || o || l || u }) } _buildDisambiguatedCustomEmoji() { let e = {}, t = []; this.emoticonRegex = null, this.frequentlyUsed = null, this.disambiguatedEmoji = [], this.unicodeAliases = Object.create(null), this.customEmojis = Object.create(null), this.groupedCustomEmojis = Object.create(null), this.emoticonsByName = Object.create(null), this.emojisByName = Object.create(null), this.emojisById = Object.create(null), this.newlyAddedEmoji = Object.create(null); let n = t => { var n, i; let r = t.name, s = null !== (n = e[r]) && void 0 !== n ? n : 0; if (e[r] = s + 1, s > 0) { let e = "".concat(r, "~").concat(s); t = { ...t, name: e, originalName: r, allNamesString: ":".concat(e, ":") } } if (this.emojisByName[t.name] = t, "names" in t && (null === (i = t.names) || void 0 === i || i.slice(1).forEach(e => this.unicodeAliases[e] = t.name)), null != t.id) { let e, n; if (this.emojisById[t.id] = t, this.customEmojis[t.name] = t, t.type === P.EmojiTypes.GUILD) e = t.guildId, n = !0; null != e && (null != this.groupedCustomEmojis[e] ? this.groupedCustomEmojis[e].push(t) : this.groupedCustomEmojis[e] = [t], n && y.default.compare(t.id, W) >= 0 && (null != this.newlyAddedEmoji[e] ? this.newlyAddedEmoji[e].push(t) : this.newlyAddedEmoji[e] = [t])) } null == this.disambiguatedEmoji && (this.disambiguatedEmoji = []), this.disambiguatedEmoji.push(t) }, i = e => { !Object.prototype.hasOwnProperty.call(this.emoticonsByName, e.name) && (t.push(M.default.escape(e.name)), this.emoticonsByName[e.name] = e) }; U.default.forEach(n); let r = e => { let t = X[null == e ? B.NULL_STRING_GUILD_ID : e]; null != t && (s().each(t.usableEmojis, n), s().each(t.emoticons, i)) }; for (let e in r(this.guildId), this.newlyAddedEmoji) null != this.newlyAddedEmoji[e] ? this.newlyAddedEmoji[e] = this.newlyAddedEmoji[e].sort((e, t) => y.default.compare(t.id, e.id)).slice(0, 3) : this.newlyAddedEmoji[e] = []; R.default.getFlattenedGuildIds().forEach(e => { e !== this.guildId && r(e) }), this.escapedEmoticonNames = t.join("|") } constructor(e) { F(this, "guildId", void 0), F(this, "emoticonRegex", null), F(this, "frequentlyUsed", null), F(this, "favorites", null), F(this, "favoriteNamesAndIds", null), F(this, "topEmojis", null), F(this, "escapedEmoticonNames", null), F(this, "disambiguatedEmoji", null), F(this, "customEmojis", void 0), F(this, "groupedCustomEmojis", void 0), F(this, "emoticonsByName", void 0), F(this, "emojisByName", void 0), F(this, "emojisById", void 0), F(this, "unicodeAliases", void 0), F(this, "newlyAddedEmoji", null), F(this, "isFavoriteEmojiWithoutFetchingLatest", e => { var t; if (null == e) return !1; let { favoriteNamesAndIds: n } = this.rebuildFavoriteEmojisWithoutFetchingLatest(); if (null != e.id) return n.has(e.id); let i = null !== (t = U.default.convertSurrogateToBase(e.surrogates)) && void 0 !== t ? t : e; return n.has(i.name) }), this.guildId = e } } F(en, "_lastInstance", null); let ei = new _.default({ computeBonus: () => 100, computeWeight: e => { let t = 0; return e <= 3 ? t = 100 : e <= 15 ? t = 70 : e <= 30 ? t = 50 : e <= 45 ? t = 30 : e <= 80 && (t = 10), t }, lookupKey: e => { var t; return null !== (t = U.default.getByName(e)) && void 0 !== t ? t : $(e) }, afterCompute: () => { en.resetFrequentlyUsed(), Z = H.slice(0), !s().some(X, e => e.usableEmojis.length > 0) && Z.splice(H.indexOf(V.EmojiCategories.CUSTOM), 1) }, numFrequentlyItems: 42 }); function er() { X = {}, Q = {}, en.reset(), J.clear(), z = 2 } function es(e) { null != X[e] && delete X[e] } function ea() { Q = null, en.reset(), 0 !== z && ei.compute() } function eo(e, t) { if (es(e), en.clear(e), null == t) return; let n = g.default.getCurrentUser(); if (null == n) return; let i = (0, A.canUseRoleSubscriptionIAP)(e); X[e] = new j(e, n.id, t, i) } function el() { var e, t, n, i; let r = null === (t = N.default.settings.textAndImages) || void 0 === t ? void 0 : null === (e = t.diversitySurrogate) || void 0 === e ? void 0 : e.value; null != r && U.default.setDefaultDiversitySurrogate(r), en.reset(); let a = null !== (i = null === (n = N.default.frecencyWithoutFetchingLatest.emojiFrecency) || void 0 === n ? void 0 : n.emojis) && void 0 !== i ? i : {}; ei.overwriteHistory(s().mapValues(a, e => ({ ...e, recentUses: e.recentUses.map(Number).filter(e => e > 0) })), Y.pendingUsages), s().isEmpty(a) && s().isEmpty(Y.pendingUsages) && N.default.hasLoaded(x.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && (ei.track("thumbsup"), ei.track("thumbsup"), ei.track("eyes"), ei.track("eyes"), ei.track("laughing"), ei.track("laughing"), ei.track("watermelon"), ei.track("fork_and_knife"), ei.track("yum"), ei.track("weary"), ei.track("tired_face"), ei.track("poop"), ei.track("100")) } function eu(e) { if (null == e) return !1; for (let i of e) { var t, n; let e = null !== (n = null !== (t = i.id) && void 0 !== t ? t : i.uniqueName) && void 0 !== n ? n : i.name; null != e && (ei.track(e), Y.pendingUsages.push({ key: e, timestamp: Date.now() })) } let i = e.length > 0; return i && 0 !== z && ei.compute(), i } function ed(e) { let { guildId: t, role: n } = e; if (!(0, f.isSubscriptionRole)(n)) return !1; { let e = X[t]; eo(t, null == e ? void 0 : e.emojis), ea() } } class e_ extends(i = u.default.PersistedStore) { initialize(e) { this.waitFor(c.default, O.default, p.default, C.default, m.default, h.default, G.default, g.default), null != e && (Y = e), this.syncWith([N.default], el) } getState() { return Y } get loadState() { return z } hasPendingUsage() { return Y.pendingUsages.length > 0 } get categories() { return Z } get diversitySurrogate() { var e; return null !== (e = U.default.getDefaultDiversitySurrogate()) && void 0 !== e ? e : "" } get emojiFrecencyWithoutFetchingLatest() { return ei } getGuildEmoji(e) { var t; et(); let n = X[e]; return null !== (t = null == n ? void 0 : n.emojis) && void 0 !== t ? t : [] } getUsableGuildEmoji(e) { var t; et(); let n = X[e]; return null !== (t = null == n ? void 0 : n.usableEmojis) && void 0 !== t ? t : [] } getGuilds() { return X } getDisambiguatedEmojiContext(e) { return et(), en.get(e) } getSearchResultsOrder(e, t, n) { let i = t.toLowerCase(), r = M.default.escape(i); if (e.length > 0) { let t = RegExp("^".concat(r), "i"), n = new RegExp("(^|_|[A-Z])".concat(r, "s?([A-Z]|_|$)")), a = n.test.bind(n), o = t.test.bind(t), l = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : e; if (null == e || null == t) return 0; let n = e.toLowerCase(), r = 1 + (n === i ? 4 : 0) + (a(n) || a(e) ? 2 : 0) + (o(e) ? 1 : 0), s = ei.getScore(t); return null != s && (r *= s / 100), r }; e = s().orderBy(e, [e => null != e.names ? l(e.names[0]) : l(e.name, e.id), e => null != e.names ? e.names[0] : e.name], ["desc", "asc"]) } return n > 0 && (e = e.slice(0, n)), e } searchWithoutFetchingLatest(e) { let t, { channel: n, query: i, count: r = 0, intention: s, includeExternalGuilds: a = !0, matchComparator: o } = e; et(); let l = i.toLowerCase().replaceAll(/[ _]/g, ""), u = M.default.escape(l); if (null == o) { let e = RegExp("".concat(u), "i"); t = t => e.test(t.replaceAll("_", "")) } else t = o; let d = null != n ? n.getGuildId() : null, _ = en.get(d).nameMatchesChain(t).reduce((e, t) => { let i = v.default.getEmojiUnavailableReason({ emoji: t, channel: n, intention: s, forceIncludeExternalGuilds: a }); return i === k.EmojiDisabledReasons.PREMIUM_LOCKED ? e.locked.push(t) : null == i && e.unlocked.push(t), e }, { unlocked: [], locked: [] }); return { unlocked: this.getSearchResultsOrder(_.unlocked, i, r), locked: this.getSearchResultsOrder(_.locked, i, 0) } } getUsableCustomEmojiById(e) { return et(), $(e) } getCustomEmojiById(e) { return et(), function(e) { var t, n; let i = ee()[e]; return null != i && null !== (n = null === (t = X[i]) || void 0 === t ? void 0 : t.getEmoji(e)) && void 0 !== n ? n : void 0 }(e) } getTopEmoji(e) { return null == e ? K : (et(), en.get(e).getTopEmojiWithoutFetchingLatest(e)) } getNewlyAddedEmoji(e) { return null == e ? K : (et(), en.get(e).getNewlyAddedEmojiForGuild(e)) } getTopEmojisMetadata(e) { return J.get(e) } getEmojiAutosuggestion(e) { if (null != q && q.length > 0) { let { locked: t, unlocked: n } = this.searchWithoutFetchingLatest({ channel: e, count: 10, query: q, intention: k.EmojiIntention.CHAT }); return [...n.slice(0, 5), ...t.slice(0, 5)].slice(0, 5) } return [] } hasUsableEmojiInAnyGuild() { return et(), y.default.keys(X).some(e => X[e].usableEmojis.length > 0) } hasFavoriteEmojis(e) { let t = en.get(e); return null != t && t.favoriteEmojisWithoutFetchingLatest.length > 0 } } F(e_, "displayName", "EmojiStore"), F(e_, "persistKey", "EmojiStoreV2"), t.default = new e_(d.default, { BACKGROUND_SYNC: function() { er() }, CONNECTION_OPEN: function(e) { for (let t of (er(), e.guilds)) eo(t.id, t.emojis); z = e.guilds.every(e => null != e.emojis) ? 1 : 0, ea() }, CACHED_EMOJIS_LOADED: function(e) { let { emojis: t } = e; for (let [e, n] of t) !Object.hasOwn(X, e) && O.default.isMember(e) && eo(e, n); ea() }, GUILD_MEMBER_UPDATE: function(e) { var t; let { guildId: n, user: i } = e; if (i.id !== (null === (t = g.default.getCurrentUser()) || void 0 === t ? void 0 : t.id)) return; let r = X[n]; eo(n, null == r ? void 0 : r.usableEmojis), ea() }, GUILD_CREATE: function(e) { 0 !== z && null == e.guild.emojis && null != e.guild.emojiUpdates && (z = 0), eo(e.guild.id, e.guild.emojis), ea() }, GUILD_UPDATE: function(e) { eo(e.guild.id, e.guild.emojis), ea() }, GUILD_EMOJIS_UPDATE: function(e) { let { guildId: t, emojis: n } = e; eo(t, n), ea() }, GUILD_DELETE: function(e) { let { guild: t } = e; es(t.id), J.delete(t.id), ea() }, MESSAGE_REACTION_ADD: function(e) { if (!e.optimistic) return !1; let t = null != e.emoji.id && "0" !== e.emoji.id ? e.emoji : U.default.getByName(U.default.convertSurrogateToName(e.emoji.name, !1)); if (null == t) return !1; eu([t]) }, EMOJI_TRACK_USAGE: function(e) { let { emojiUsed: t } = e; eu(t) }, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: { type: t }, wasSaved: n } = e; if (T.default.setEmojiLocale(m.default.locale), t !== x.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS || !n) return !1; Y.pendingUsages = [] }, GUILD_ROLE_CREATE: ed, GUILD_ROLE_UPDATE: ed, TOP_EMOJIS_FETCH_SUCCESS: function(e) { let { guildId: t, topEmojisMetadata: n } = e; J.set(t, { emojiIds: n.map(e => e.emojiId), topEmojisTTL: o()(o()()).add(1, "days").valueOf() }) }, EMOJI_AUTOSUGGESTION_UPDATE: function(e) { let { text: t } = e; q = t } }) }, 906411: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { EmojiTypes: function() { return i } }), (r = i || (i = {}))[r.UNICODE = 0] = "UNICODE", r[r.GUILD = 1] = "GUILD" }, 633302: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DIVERSITY_SURROGATES: function() { return h }, Emoji: function() { return O } }), n("411104"), n("47120"), n("757143"), n("653041"), n("724458"); var i = n("392711"), r = n.n(i), s = n("946188"), a = n("176354"), o = n("906411"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = null, d = {}, _ = {}, c = {}, E = {}, I = [], T = 0, f = 0, S = { "1f3fb": 0, "1f3fc": 1, "1f3fd": 2, "1f3fe": 3, "1f3ff": 4 }, h = ["\uD83C\uDFFB", "\uD83C\uDFFC", "\uD83C\uDFFD", "\uD83C\uDFFE", "\uD83C\uDFFF"], A = /^:([^\s:]+?(?:::skin-tone-\d)?):/, m = n("523558"), N = /[\u200d\ud800-\udfff\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff\ufe0e\ufe0f\u270b\u2b50\u2728\u26a1\u26c5\u26c4\u2614\u2615\u26bd\u26be\u26f3\u26f5\u2693\u26fd\u26f2\u26fa\u26ea\u231a\u23f0\u231b\u23f3\u26ce\u2648\u2649\u264a\u264b\u264c\u264d\u264e\u264f\u2650\u2651\u2652\u2653\u270a\u274c\u2b55\u26d4\u2757\u2755\u2753\u2754\u2705\u274e\u267f\u23e9\u23ea\u23eb\u23ec\u2795\u2796\u2797\u27b0\u27bf\u26aa\u26ab\u25fe\u25fd\u2b1b\u2b1c\u26a7]/, p = /\ud83c[\udffb-\udfff](?=\ud83c[\udffb-\udfff])|(?:[^\ud800-\udfff][\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]?|[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe2f\u20d0-\u20ff]|\ud83c[\udffb-\udfff])?)*/g; for (let e = 0; e < h.length; e++) { let t = h[e]; c["skin-tone-".concat(e + 1)] = t, E[t] = "skin-tone-".concat(e + 1) } class O { get names() { return this.emojiObject.names } get allNamesString() { return this.names.length > 1 ? ":".concat(this.names.join(": :"), ":") : ":".concat(this.uniqueName, ":") } get unicodeVersion() { var e; return null !== (e = this.emojiObject.unicodeVersion) && void 0 !== e ? e : 0 } get hasDiversity() { return this.emojiObject.hasDiversity } get hasMultiDiversity() { return this.emojiObject.hasMultiDiversity } get hasDiversityParent() { return this.emojiObject.hasDiversityParent } get hasMultiDiversityParent() { return this.emojiObject.hasMultiDiversityParent } get managed() { return !0 } get animated() { return !1 } get defaultDiversityChild() { if (this.hasDiversity && null != u) { let e = function(e) { let t = s.default.convert.toCodePoint(e); return null != t ? t : "" }(u); return this.diversityChildren[e] } return null } get url() { let e = this.defaultDiversityChild; return null != e ? a.default.getURL(e.surrogates) : a.default.getURL(this.surrogates) } get name() { return this.hasDiversity && null != u ? "".concat(this.uniqueName, "::").concat(E[u]) : this.uniqueName } get optionallyDiverseSequence() { let e = this.defaultDiversityChild; return null != e ? e.surrogates : this.surrogates } forEachDiversity(e) { null != this.diversityChildren && r().each(this.diversityChildren, e) } forEachName(e) { r().each(this.names, e) } setSpriteSheetIndex(e) { this.index = e, this.useSpriteSheet = !0 } constructor(e) { if (l(this, "emojiObject", void 0), l(this, "type", void 0), l(this, "uniqueName", void 0), l(this, "surrogates", void 0), l(this, "diversityChildren", void 0), l(this, "originalName", void 0), l(this, "id", void 0), l(this, "guildId", void 0), l(this, "index", void 0), l(this, "useSpriteSheet", void 0), this.emojiObject = e, this.type = o.EmojiTypes.UNICODE, this.uniqueName = e.names[0], this.surrogates = e.surrogates, this.diversityChildren = {}, null != e.diversityChildren) { for (let t of e.diversityChildren) if (null != t.diversity) { let e = t.diversity.join("-"); this.diversityChildren[e] = new O(t) } } } } let C = n("5420"); for (let e in C) { let t = C[e].map(e => { let t = new O(e), n = t.surrogates, i = t.uniqueName; if (t.setSpriteSheetIndex(t.hasDiversity ? T++ : f++), E[n] = i, 0 > n.indexOf("‍")) { let e = n.replace("️", ""); e !== n && (E[e] = i) } for (let e of t.names) _[e] = t, c[e] = n; let r = t.diversityChildren; for (let t in r) { let n = r[t], i = n.surrogates; for (let e of n.names) _[e] = n, c[e] = i; if (!e.hasMultiDiversity) { let t = S[n.emojiObject.diversity[0]]; for (let r of e.names) { let e = "".concat(r, "::skin-tone-").concat(t + 1); c[e] = i, _[e] = n } } E[i] = n.uniqueName } return I.push(t), t }); d[e] = a.default.filterUnsupportedEmojis(t) } function R(e) { return Object.prototype.hasOwnProperty.call(_, e) ? _[e] : null } function g(e) { let t = E[e]; return null != t ? { type: "emoji", surrogate: e, emojiName: ":".concat(t, ":") } : { type: "text", text: e } } let L = String.fromCodePoint(917631), v = String.fromCodePoint(127988), D = /^[\u{E0061}-\u{E007A}]$/u; function M(e, t) { var n; if (!0 !== t && !N.test(e)) return [{ type: "text", text: e }]; let i = "", r = [], s = null !== (n = e.match(p)) && void 0 !== n ? n : []; for (let e = 0; e < s.length; e++) { let t = s[e]; if (null != i && "" !== i) { if (t === L) t = i + t, i = ""; else if (D.test(t)) { i += t; continue } else r.push(g(i)), i = "" } else if (t === v) { i = t; continue } let n = g(t); if (r.length > 0) { let e = r[r.length - 1]; if ("text" === n.type && "text" === e.type) { e.text += n.text; continue } } r.push(n) } return null != i && "" !== i && r.push(g(i)), r } function y(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : ""; return Object.prototype.hasOwnProperty.call(c, e) ? c[e] : t } function P(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "", i = n; return Object.prototype.hasOwnProperty.call(E, e) && (i = E[e]), t ? ":".concat(i, ":") : i } t.default = { getDefaultDiversitySurrogate: function() { return u }, setDefaultDiversitySurrogate: function(e) { u = null != e && "" !== e ? e : null }, getCategories: function() { return Object.keys(d) }, getByName: R, getByCategory: function(e) { return d[e] }, translateInlineEmojiToSurrogates: function(e) { return e.replace(A, (e, t) => y(t, e)) }, maybeTranslateSurrogatesToInlineEmoji: function(e) { if (!N.test(e)) return null; let t = M(e, !0).map(e => "text" === e.type ? e.text : e.emojiName).join(""); return t === e ? null : t }, findInlineEmojisFromSurrogates: M, translateSurrogatesToInlineEmoji: function(e) { return M(e).map(e => "text" === e.type ? e.text : e.emojiName).join("") }, convertNameToSurrogate: y, convertSurrogateToName: P, convertShortcutToName: function(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "", i = n; return Object.prototype.hasOwnProperty.call(m, e) && (i = m[e]), t ? ":".concat(i, ":") : i }, convertSurrogateToBase: function(e) { return R(P(h.reduce((e, t) => e.replace(t, ""), e), !1)) }, forEach: e => r().each(I, e), all: () => I, numDiversitySprites: T, numNonDiversitySprites: f, EMOJI_NAME_RE: /^:([^\s:]+?(?:::skin-tone-\d)?):/, EMOJI_NAME_AND_DIVERSITY_RE: A, EMOJI_SHORTCUT_RE: /^(>:\(|>:\-\(|>=\(|>=\-\(|:"\)|:\-"\)|="\)|=\-"\)|<\/3|<\\3|:\-\\|:\-\/|=\-\\|=\-\/|:'\(|:'\-\(|:,\(|:,\-\(|='\(|='\-\(|=,\(|=,\-\(|:\(|:\-\(|=\(|=\-\(|<3|♡|\]:\(|\]:\-\(|\]=\(|\]=\-\(|o:\)|O:\)|o:\-\)|O:\-\)|0:\)|0:\-\)|o=\)|O=\)|o=\-\)|O=\-\)|0=\)|0=\-\)|:'D|:'\-D|:,D|:,\-D|='D|='\-D|=,D|=,\-D|:\*|:\-\*|=\*|=\-\*|x\-\)|X\-\)|:\||:\-\||=\||=\-\||:o|:\-o|:O|:\-O|=o|=\-o|=O|=\-O|:@|:\-@|=@|=\-@|:D|:\-D|=D|=\-D|:'\)|:'\-\)|:,\)|:,\-\)|='\)|='\-\)|=,\)|=,\-\)|:\)|:\-\)|=\)|=\-\)|\]:\)|\]:\-\)|\]=\)|\]=\-\)|:,'\(|:,'\-\(|;\(|;\-\(|=,'\(|=,'\-\(|:P|:\-P|=P|=\-P|8\-\)|B\-\)|,:\(|,:\-\(|,=\(|,=\-\(|,:\)|,:\-\)|,=\)|,=\-\)|:s|:\-S|:z|:\-Z|:\$|:\-\$|=s|=\-S|=z|=\-Z|=\$|=\-\$|;\)|;\-\))/, hasSurrogates: function(e) { return r().toArray(e).some(e => null != E[e]) } } }, 130402: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getEmojiCaptionsForUser: function() { return a }, initiateEmojiInteraction: function() { return o } }), n("47120"); var i = n("544891"), r = n("570140"), s = n("981631"); async function a() { r.default.dispatch({ type: "EMOJI_CAPTIONS_FETCH" }); try { let { body: e } = await i.HTTP.get({ url: s.Endpoints.EMOJI_CAPTIONS_GET }), t = {}; for (let n of e.items) t[n.emoji_id] = n.emoji_captions; r.default.dispatch({ type: "EMOJI_CAPTIONS_FETCH_SUCCESS", emojiCaptions: t }) } catch (t) { var e; r.default.dispatch({ type: "EMOJI_CAPTIONS_FETCH_ERROR", is4XXError: (null == (e = t.body) ? void 0 : e.status) >= 400 && (null == e ? void 0 : e.status) <= 499 }) } } function o(e) { r.default.dispatch({ type: "EMOJI_INTERACTION_INITIATED", interaction: e }) } }, 570310: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("430871"), s = n("185923"); let a = new Set([s.EmojiInteractionPoint.EmojiButtonMouseEntered, s.EmojiInteractionPoint.ChatInputExpressionPressed, s.EmojiInteractionPoint.ChatInputSuggestionsShown, s.EmojiInteractionPoint.SearchEmojiKeybindPressed, s.EmojiInteractionPoint.AutocompleteTyped, s.EmojiInteractionPoint.GuildLeaveModalShown, s.EmojiInteractionPoint.AddReactionPopoutMouseEntered, s.EmojiInteractionPoint.AddReactionPopoutFocused, s.EmojiInteractionPoint.MessageContextMenuMouseEntered, s.EmojiInteractionPoint.AutocompleteWrapperShown]); class o extends i.default { handleInteraction(e) { let { interaction: t } = e; a.has(t) && (0, r.maybeGetEmojiCaptionsForUser)(t) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { EMOJI_INTERACTION_INITIATED: this.handleInteraction }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new o }, 174065: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("70956"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = { captionsById: new Map }, u = l, d = !1, _ = null; class c extends(i = r.default.PersistedStore) { initialize(e) { u = null != e ? { captionsById: new Map(e.captionsById) } : l } getState() { return u } getCaptionsForEmojiById(e) { var t; let { emojiId: n } = e; return null !== (t = u.captionsById.get(n)) && void 0 !== t ? t : [] } getIsFetching() { return d } getEmojiCaptionsTTL() { return _ } hasPersistedState() { return u.captionsById.size > 0 } clear() { u = l, d = !1, _ = null } } o(c, "displayName", "EmojiCaptionsStore"), o(c, "persistKey", "EmojiCaptionsStore"), t.default = new c(s.default, { LOGOUT: function() { u = l, d = !1, _ = null }, EMOJI_CAPTIONS_FETCH: function(e) { let {} = e; !d && (d = !0) }, EMOJI_CAPTIONS_FETCH_SUCCESS: function(e) { let { emojiCaptions: t } = e; u.captionsById = new Map(Object.entries(t)), d = !1, _ = Date.now() + 360 * a.default.Millis.MINUTE }, EMOJI_CAPTIONS_FETCH_ERROR: function(e) { let { is4XXError: t } = e; d = !1; _ = Date.now() + (t ? 10 : 1) * a.default.Millis.MINUTE }, POST_CONNECTION_OPEN: function(e) { let {} = e; d = !1 } }) }, 430871: function(e, t, n) { "use strict"; n.r(t), n.d(t, { maybeGetEmojiCaptionsForUser: function() { return o } }); var i = n("594174"), r = n("130402"), s = n("174065"), a = n("353842"); async function o() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "unknown"; if (null == i.default.getCurrentUser()) return; let { isEmojiTextMatchSuggestionsEnabled: t } = a.default.getCurrentConfig({ location: e }); if (!t) { s.default.hasPersistedState() && s.default.clear(); return } if (s.default.getIsFetching()) return; let n = s.default.getEmojiCaptionsTTL(); !(null != n && Date.now() < n) && await (0, r.getEmojiCaptionsForUser)() } }, 353842: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_emoji_suggestions", label: "Emoji Suggestions Experiment", defaultConfig: { isEmojiSuggestionsEnabled: !1, isEmojiTextMatchSuggestionsEnabled: !1 }, treatments: [{ id: 1, label: "Enables static emoji suggestions", config: { isEmojiSuggestionsEnabled: !0, isEmojiTextMatchSuggestionsEnabled: !1 } }, { id: 2, label: "Enables Emoji Suggestions using text content and emoji captions", config: { isEmojiSuggestionsEnabled: !0, isEmojiTextMatchSuggestionsEnabled: !0 } }] }); t.default = i }, 29598: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useEmojiAndSourceGuild: function() { return _ } }), n("47120"); var i = n("470079"), r = n("399606"), s = n("430824"), a = n("339085"), o = n("906411"), l = n("400106"), u = n("981631"); let d = (e, t, n) => { let i = null != n ? e.getCustomEmojiById(n) : null; if ((null == i ? void 0 : i.type) === o.EmojiTypes.GUILD) return { emoji: i, joinedEmojiSourceGuildRecord: t.getGuild(null == i ? void 0 : i.guildId) }; return { emoji: null, joinedEmojiSourceGuildRecord: null } }, _ = e => { let { emojiId: t, refreshPositionKey: n } = e, { joinedEmojiSourceGuildRecord: o, emoji: _ } = (0, r.useStateFromStoresObject)([a.default, s.default], () => d(a.default, s.default, t)), c = null != o, E = null != o && o.hasFeature(u.GuildFeatures.DISCOVERABLE), I = (!c || E) && null != t, [T, f] = i.useState(I), S = null != o ? l.default.createFromGuildRecord(o) : null, [h, A] = i.useState(S); return i.useEffect(() => { null == n || n(); let e = async () => { A(null != t ? await l.default.getGuildFromEmojiId(t) : null), f(!1), null == n || n() }; if (I) { e(); return } null == n || n() }, [t, I]), { expressionSourceGuild: h, joinedEmojiSourceGuildRecord: o, hasJoinedEmojiSourceGuild: c, emoji: _, isFetching: T } } }, 400106: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i, r = n("544891"), s = n("81825"), a = n("601964"), o = n("768581"), l = n("624138"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(i || (i = {})).GUILD = "GUILD"; let _ = async e => { let t = null; try { var n; let i = await r.HTTP.get({ url: u.Endpoints.EMOJI_SOURCE_DATA(e), oldFormErrors: !0, timeout: 5e3 }); (null == i ? void 0 : null === (n = i.body) || void 0 === n ? void 0 : n.guild) != null && (t = { guild: c.createFromServer(i.body.guild), type: i.body.type }) } catch {} return t }; class c extends s.default { getIconURL(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return o.default.getGuildIconURL({ id: this.id, size: e, icon: this.icon, canAnimate: t }) } getIconSource(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return o.default.getAnimatableSourceWithFallback(t, t => o.default.getGuildIconSource({ id: this.id, size: e, icon: this.icon, canAnimate: t })) } hasFeature(e) { return this.features.has(e) } isDiscoverable() { return this.hasFeature(u.GuildFeatures.DISCOVERABLE) } get acronym() { return (0, l.getAcronym)(this.name) } static async getGuildFromEmojiId(e) { let t = await _(e); return null != t && (null == t ? void 0 : t.type) === "GUILD" ? t.guild : null } static _mapCommon(e) { var t; return { id: e.id, name: e.name, icon: e.icon, description: e.description, features: new Set(null !== (t = e.features) && void 0 !== t ? t : new Set) } } static createFromGuildRecord(e) { return new c({ ...c._mapCommon(e), premiumTier: e.premiumTier, premiumSubscriberCount: e.premiumSubscriberCount, presenceCount: null, memberCount: null, emojis: null }) } static createFromDiscoverableGuild(e) { return new c({ ...c._mapCommon(e), premiumTier: null, premiumSubscriberCount: e.premiumSubscriptionCount, presenceCount: e.presenceCount, memberCount: e.memberCount, emojis: e.emojis }) } static createFromServer(e) { return new c({ ...c._mapCommon(e), premiumTier: e.premium_tier, premiumSubscriberCount: e.premium_subscription_count, presenceCount: e.approximate_presence_count, memberCount: e.approximate_member_count, emojis: e.emojis }) } static createFromGuildType(e) { return e instanceof c ? e : e instanceof a.default ? c.createFromGuildRecord(e) : c.createFromDiscoverableGuild(e) } constructor(e) { super(), d(this, "id", void 0), d(this, "name", void 0), d(this, "icon", void 0), d(this, "description", void 0), d(this, "features", void 0), d(this, "premiumTier", void 0), d(this, "premiumSubscriberCount", void 0), d(this, "presenceCount", void 0), d(this, "memberCount", void 0), d(this, "emojis", void 0), this.id = e.id, this.name = e.name, this.icon = e.icon, this.description = e.description, this.features = e.features, this.premiumTier = e.premiumTier, this.premiumSubscriberCount = e.premiumSubscriberCount, this.presenceCount = e.presenceCount, this.memberCount = e.memberCount, this.emojis = e.emojis } } }, 438332: function(e, t, n) { "use strict"; n.r(t); var i, r = n("913527"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("709054"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = { lastSeenNewlyAddedEmojiIds: {} }, _ = d, c = {}; function E() { for (let e in c) _.lastSeenNewlyAddedEmojiIds[e] = c[e] } class I extends(i = a.default.PersistedStore) { initialize(e) { _ = null != e ? e : d } getState() { return _ } getLastSeenEmojiByGuild(e) { return _.lastSeenNewlyAddedEmojiIds[e] } isNewerThanLastSeen(e, t) { if (null == e || null == t) return !1; let n = this.getLastSeenEmojiByGuild(e); if (null == n) return !0; if (l.default.compare(t, n.id) > 0) return !0; { let e = s()(n.lastSeen); return s()().isBefore(e.add(2, "weeks")) && !n.acknowledged } } } u(I, "displayName", "NewlyAddedEmojiStore"), u(I, "persistKey", "NewlyAddedEmojiStore"), u(I, "migrations", [e => { let t = e.lastSeenNewlyAddedEmojiIds, n = {}; for (let e in t) { let i = t[e]; n[e] = { id: i, lastSeen: Date.now(), acknowledged: !1 } } return { lastSeenNewlyAddedEmojiIds: n } }]), t.default = new I(o.default, { LOGOUT: function() { _ = d, c = {} }, NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED: function(e) { var t; let { guildId: n, emojiId: i } = e, r = null !== (t = c[n]) && void 0 !== t ? t : _.lastSeenNewlyAddedEmojiIds[n]; null == r || 0 > l.default.compare(r.id, i) ? c[n] = { id: i, lastSeen: Date.now(), acknowledged: !0 } : c[n] = { ...r, acknowledged: !0 } }, NEWLY_ADDED_EMOJI_SEEN_PENDING: function(e) { var t; let { guildId: n, emojiId: i } = e, r = null !== (t = c[n]) && void 0 !== t ? t : _.lastSeenNewlyAddedEmojiIds[n]; (null == r || 0 > l.default.compare(r.id, i)) && (c[n] = { id: i, lastSeen: Date.now(), acknowledged: !1 }) }, NEWLY_ADDED_EMOJI_SEEN_UPDATED: E, CLEAR_CACHES: function() { _ = d, E() }, CONNECTION_CLOSED: E }) }, 396352: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = { topEmojisByGuildId: {} }, l = o, u = {}; class d extends(i = r.default.PersistedStore) { initialize(e) { l = null != e ? e : o } getState() { return l } getTopEmojiIdsByGuildId(e) { return l.topEmojisByGuildId[e] } getIsFetching(e) { return u[e] } } a(d, "displayName", "TopEmojiStore"), a(d, "persistKey", "TopEmojiStore"), t.default = new d(s.default, { LOGOUT: function() { l = o, u = {} }, TOP_EMOJIS_FETCH: function(e) { let { guildId: t } = e; u[t] = !0 }, TOP_EMOJIS_FETCH_SUCCESS: function(e) { let { guildId: t, topEmojisMetadata: n } = e; l.topEmojisByGuildId[t] = n.map(e => e.emojiId), u[t] = !1 } }) }, 664437: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchTopEmojis: function() { return a }, updateNewlyAddedEmojiSeenAcknowledged: function() { return l }, updateNewlyAddedLastSeen: function() { return o } }); var i = n("544891"), r = n("570140"), s = n("981631"); function a(e) { r.default.dispatch({ type: "TOP_EMOJIS_FETCH", guildId: e }), i.HTTP.get({ url: s.Endpoints.TOP_EMOJIS_FOR_GUILD(e), oldFormErrors: !0 }).then(t => r.default.dispatch({ type: "TOP_EMOJIS_FETCH_SUCCESS", guildId: e, topEmojisMetadata: t.body.items.map(e => ({ emojiId: e.emoji_id, rank: e.emoji_rank })).sort((e, t) => e.rank - t.rank) }), () => r.default.dispatch({ type: "TOP_EMOJIS_FETCH_FAILURE", guildId: e })) } function o(e, t) { r.default.dispatch({ type: "NEWLY_ADDED_EMOJI_SEEN_UPDATED" }), null != e && null != t && r.default.dispatch({ type: "NEWLY_ADDED_EMOJI_SEEN_PENDING", guildId: e, emojiId: t }) } function l(e, t) { null != e && null != t && r.default.dispatch({ type: "NEWLY_ADDED_EMOJI_SEEN_ACKNOWLEDGED", guildId: e, emojiId: t }) } }, 496207: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("914010"), s = n("558217"), a = n("185923"); class o extends i.default { handleInteraction(e) { let { interaction: t } = e; if ([a.EmojiInteractionPoint.EmojiButtonMouseEntered].includes(t)) { let e = r.default.getGuildId(); (0, s.maybeFetchTopEmojisByGuild)(e) } } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { EMOJI_INTERACTION_INITIATED: this.handleInteraction }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new o }, 558217: function(e, t, n) { "use strict"; n.r(t), n.d(t, { maybeFetchTopEmojisByGuild: function() { return o } }); var i = n("594174"), r = n("339085"), s = n("396352"), a = n("664437"); function o(e) { if (null == e || null == i.default.getCurrentUser()) return; let t = r.default.getTopEmojisMetadata(e); if (null != t) { let { topEmojisTTL: e } = t; if (null == e || Date.now() < e) return }!s.default.getIsFetching(e) && (0, a.fetchTopEmojis)(e) } }, 944386: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useTrackOpenPopout: function() { return _ } }); var i = n("470079"), r = n("367907"), s = n("592125"), a = n("944486"), o = n("626135"), l = n("130402"), u = n("185923"), d = n("981631"); let _ = e => { let { emojiId: t, currentGuildId: n, popoutData: _, nonce: c, demoMode: E } = e, { current: I } = i.useRef({ guild_id: n, emoji_id: t, ...(0, r.collectChannelAnalyticsMetadata)(s.default.getChannel(a.default.getChannelId(n))) }); return i.useEffect(() => { var e; (0, l.initiateEmojiInteraction)(u.EmojiInteractionPoint.TrackOpenPopoutUsed), !E && o.default.track(d.AnalyticEvents.OPEN_POPOUT, { type: null !== (e = null == _ ? void 0 : _.analyticsType) && void 0 !== e ? e : "Standard Emoji Popout", nonce: c, ...I }) }, []), I } }, 712057: function(e, t, n) { "use strict"; n.r(t), n.d(t, { buildEmojiColorPalette: function() { return l }, buildPlatformedThemedEmojiColorPalette: function() { return o } }); var i = n("564334"), r = n("302221"), s = n("563114"); let a = e => { var t, n; let { colors: s, saturationFactor: a = 1 } = e; if (null == s || s.length < 1) return null; let o = (0, r.findColorByHsv)(s), l = i.default.parseString("#ffffff"); if (null == l) return null; let u = i.default.parseString("#36393e"); if (null == u) return null; let d = i.default.parseString(o); if (null == d) return null; let _ = (0, r.rawRgbToHsl)(d.red, d.blue, d.green), c = null !== (t = (0, r.getAccessibleColor)({ colors: [(0, r.getColorLightnessAdjusted)(d, .6, !0), l], ratio: 3, saturationFactor: a })) && void 0 !== t ? t : d, E = null !== (n = (0, r.getAccessibleColor)({ colors: [(0, r.getColorLightnessAdjusted)(d, .6, !1), u], ratio: 5, saturationFactor: a })) && void 0 !== n ? n : d, I = (0, r.getAccessibleColor)({ colors: [d, l], ratio: 7, saturationFactor: a }), T = (0, r.getAccessibleColor)({ colors: [d, u], ratio: 7, saturationFactor: a }); return { LIGHT: { accentColor: null == I ? void 0 : I.toHexString(), backgroundColor: (0, r.getSaturatedColorHex)({ colorRGB: c, saturationFactor: a }), highlightColor: null == d ? void 0 : d.toHexString(), opacity: (null == _ ? void 0 : _.saturation) < .1 ? .35 : .1 }, DARK: { accentColor: null == T ? void 0 : T.toHexString(), backgroundColor: (0, r.getSaturatedColorHex)({ colorRGB: E, saturationFactor: a }), highlightColor: null == d ? void 0 : d.toHexString(), opacity: (null == _ ? void 0 : _.saturation) < .1 ? .5 : .2 } } }, o = e => { let { colors: t, saturationFactor: n = 1, shouldProcessMobileColors: i = !1 } = e, r = a({ colors: t, saturationFactor: n }); return s.default.applyPlatformToThemedEmojiColorPalette({ palette: r, shouldProcessMobileColors: i }) }, l = (e, t, n) => { var i; if (null == e || e.length < 1) return null; let r = o({ colors: e, saturationFactor: t }), s = n ? null == r ? void 0 : r.DARK : null == r ? void 0 : r.LIGHT; return { backgroundColor: null == s ? void 0 : s.backgroundColor, accentColor: null == s ? void 0 : s.accentColor, highlightColor: null == s ? void 0 : s.highlightColor, opacity: null !== (i = null == s ? void 0 : s.opacity) && void 0 !== i ? i : .15 } } }, 347374: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("633302"); t.default = e => { let t = new Map; for (let r of e) { var n; if (null != r.id) { t.set(r.id, r); continue } let e = null !== (n = i.default.convertSurrogateToBase(r.surrogates)) && void 0 !== n ? n : r; t.set(e.name, e) } return t } }, 318374: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("481060"), d = n("239091"), _ = n("321148"), c = n("51144"), E = n("901540"); function I(e) { let { className: t, avatarClassName: s, maxUsers: o, users: I, guildId: T, onFocus: f, size: S = u.AvatarSizes.SIZE_24, hideOverflowCount: h = !1, disableUsernameTooltip: A = !1 } = e, [m, N] = r.useState(!1); function p() { return (0, i.jsx)(u.Dialog, { className: E.popoutWrapper, children: (0, i.jsx)(u.Scroller, { className: E.scroller, children: I.map(e => (0, i.jsx)(_.default, { guildId: T, user: e, nick: c.default.getName(e), onContextMenu: t => (0, d.openContextMenuLazy)(t, async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("36441"), n.e("15421")]).then(n.bind(n, "881351")); return n => (0, i.jsx)(t, { ...n, user: e }) }, { onClose: () => N(!1) }) }, e.id)) }) }) } return I.length <= 0 ? null : (0, i.jsx)("div", { className: a()(t, E.avatars), children: function() { let e = l()(I).take(o).map(e => { let t = c.default.getName(e); return A ? (0, i.jsx)("div", { className: a()(E.avatar, s), children: (0, i.jsx)(u.Avatar, { src: e.getAvatarURL(T, 24), "aria-label": t, size: S }) }) : (0, i.jsx)(u.TooltipContainer, { text: t, className: a()(E.avatar, s), children: (0, i.jsx)(u.Avatar, { src: e.getAvatarURL(T, 24), "aria-label": t, size: S }) }, e.id) }).value(), t = I.length - o; return t > 0 && !h && (e[e.length - 1] = (0, i.jsx)(u.Popout, { renderPopout: p, shouldShow: m, position: "bottom", onRequestClose: () => N(!1), children: () => (0, i.jsxs)(u.Button, { className: a()(E.avatar, E.overflow), onFocus: f, onClick: () => N(!0), look: u.Button.Looks.BLANK, size: u.Button.Sizes.NONE, children: ["+", t + 1] }) }, "overflow")), e }() }) } }, 522289: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("481060"), u = n("346656"), d = n("901540"); function _(e) { let { className: t, maxGuilds: n, guilds: r, onFocus: a, onClick: _, size: c = u.default.Sizes.SMALLER, hideOverflowCount: E = !1, disableGuildNameTooltip: I = !1 } = e; return r.length <= 0 ? null : (0, i.jsx)("div", { className: s()(t, d.avatars), children: function() { let e = o()(r).take(n).map(e => { let t = e.name; return I ? (0, i.jsx)("div", { className: d.avatar, children: (0, i.jsx)(u.default, { guild: e, onClick: _, size: c, showTooltip: !1 }) }) : (0, i.jsx)(l.TooltipContainer, { text: t, className: d.avatar, children: (0, i.jsx)(u.default, { guild: e, onClick: _, size: c }) }, e.id) }).value(), t = r.length - n; return t > 0 && !E && (e[e.length - 1] = (0, i.jsxs)(l.Button, { className: s()(d.avatar, d.overflow), onFocus: a, onClick: e => null == _ ? void 0 : _(e), look: l.Button.Looks.BLANK, size: l.Button.Sizes.NONE, children: ["+", t + 1] })), e }() }) } }, 987338: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { CommonTriggerPoints: function() { return a }, ExperimentBuckets: function() { return i }, ExperimentTypes: function() { return r }, ExposureTypes: function() { return s }, TriggerDebuggingAAExperiments: function() { return E }, guildTriggerExperimentId: function() { return c }, userTriggerExperimentId: function() { return _ } }), (o = i || (i = {}))[o.NOT_ELIGIBLE = -1] = "NOT_ELIGIBLE", o[o.CONTROL = 0] = "CONTROL", o[o.TREATMENT_1 = 1] = "TREATMENT_1", o[o.TREATMENT_2 = 2] = "TREATMENT_2", o[o.TREATMENT_3 = 3] = "TREATMENT_3", o[o.TREATMENT_4 = 4] = "TREATMENT_4", o[o.TREATMENT_5 = 5] = "TREATMENT_5", o[o.TREATMENT_6 = 6] = "TREATMENT_6", o[o.TREATMENT_7 = 7] = "TREATMENT_7", o[o.TREATMENT_8 = 8] = "TREATMENT_8", o[o.TREATMENT_9 = 9] = "TREATMENT_9", o[o.TREATMENT_10 = 10] = "TREATMENT_10", o[o.TREATMENT_11 = 11] = "TREATMENT_11", o[o.TREATMENT_12 = 12] = "TREATMENT_12", o[o.TREATMENT_13 = 13] = "TREATMENT_13", o[o.TREATMENT_14 = 14] = "TREATMENT_14", o[o.TREATMENT_15 = 15] = "TREATMENT_15", o[o.TREATMENT_16 = 16] = "TREATMENT_16", o[o.TREATMENT_17 = 17] = "TREATMENT_17", o[o.TREATMENT_18 = 18] = "TREATMENT_18", o[o.TREATMENT_19 = 19] = "TREATMENT_19", o[o.TREATMENT_20 = 20] = "TREATMENT_20", o[o.TREATMENT_21 = 21] = "TREATMENT_21", o[o.TREATMENT_22 = 22] = "TREATMENT_22", o[o.TREATMENT_23 = 23] = "TREATMENT_23", o[o.TREATMENT_24 = 24] = "TREATMENT_24", o[o.TREATMENT_25 = 25] = "TREATMENT_25", (l = r || (r = {})).NONE_LEGACY = "none", l.GUILD = "guild", l.USER = "user", (u = s || (s = {})).MANUAL = "manual", u.AUTO = "auto", u.AUTO_FALLBACK = "auto_fallback"; let _ = "2023-10_triggerdebuggingaa", c = "2023-10_guildaa", E = [_, c]; (d = a || (a = {}))[d.NONE = 0] = "NONE", d[d.POST_CONNECTION_OPEN = 1] = "POST_CONNECTION_OPEN" }, 492435: function(e, t, n) { "use strict"; n.r(t), n.d(t, { overrideBucket: function() { return u }, registerGuildExperiment: function() { return l }, registerUserExperiment: function() { return o }, trackExposureToExperiment: function() { return a } }); var i = n("570140"), r = n("353926"), s = n("987338"); function a(e, t, n) { var i, s; r.default.trackExposure({ experimentId: e, descriptor: t, location: null == n ? void 0 : n.location, location_stack: null == n ? void 0 : n.analyticsLocations, fingerprint: null == n ? void 0 : n.fingerprint, excluded: null == n ? void 0 : n.excluded, exposureType: null == n ? void 0 : n.exposureType }) } function o(e) { let { id: t, title: n, description: i, buckets: a, commonTriggerPoint: o } = e; return (0, r.registerExperiment)({ experimentId: t, experimentType: s.ExperimentTypes.USER, title: n, description: i, buckets: a, commonTriggerPoint: o }), { id: t } } function l(e) { let { id: t, title: n, description: i, buckets: a, commonTriggerPoint: o } = e; return (0, r.registerExperiment)({ experimentId: t, experimentType: s.ExperimentTypes.GUILD, title: n, description: i, buckets: a, commonTriggerPoint: o }), { id: t } } function u(e, t) { i.default.dispatch({ type: "EXPERIMENT_OVERRIDE_BUCKET", experimentId: e, experimentBucket: t }) } }, 353926: function(e, t, n) { "use strict"; n.r(t), n.d(t, { registerExperiment: function() { return et } }), n("789020"), n("411104"), n("47120"), n("757143"); var i = n("392711"), r = n.n(i), s = n("108131"), a = n.n(s), o = n("433517"), l = n("865427"), u = n("710845"), d = n("314897"), _ = n("412788"), c = n("626135"), E = n("360359"), I = n("987338"), T = n("981631"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = "scientist:triggered", h = "exerimentOverrides", A = "userExperimentOverrides", m = "guildExperimentOverrides", N = new u.default("ExperimentStore"), p = !1, O = {}, C = {}, R = [], g = [], L = {}, v = {}, D = {}, M = {}, y = {}, P = "staging" === window.GLOBAL_ENV.RELEASE_CHANNEL, U = {}; function b(e) { let t = U[e]; if (void 0 !== t) return t; { let t = a().v3(e); return U[e] = t, t } } let G = I.TriggerDebuggingAAExperiments.map(e => b(e)); function w(e, t) { return e || G.includes(t) } function k(e) { var t; return ((null !== (t = e.flags) && void 0 !== t ? t : 0) & T.UserFlags.STAFF) === T.UserFlags.STAFF || null != e.personal_connection_id || !1 } function B(e, t, n, i) { let r = "".concat(t.type, "|").concat(e), s = t.triggerDebuggingEnabled && void 0 !== n && n.length > 0; if (t.type === I.ExperimentTypes.USER) return s && (r += "|".concat(n), i && (r += "|triggerDebugging")), r; if (t.type === I.ExperimentTypes.GUILD) return r += "|".concat(t.guildId), s && (r += "|".concat(n), i && (r += "|triggerDebugging")), r; throw Error() } function V(e) { if (e.type === I.ExperimentTypes.USER) return b("".concat(e.bucket, "|").concat(e.revision)); if (e.type === I.ExperimentTypes.GUILD) return b("".concat(e.bucket, "|").concat(e.revision, "|").concat(e.guildId)); throw Error() } let x = Date.now(); function F(e, t, n, i) { let r = O[B(e, t, n, i)]; return !(null == r || Date.now() - r.time > 6048e5) && r.hash === V(t) } function H(e) { let { experimentId: t, descriptor: n, location: i, location_stack: r, context: s, fingerprint: a, excluded: o, exposureType: l } = e; if (n.override) return !1; let u = l === I.ExposureTypes.AUTO_FALLBACK && !!n.triggerDebuggingEnabled; if (F(t, n, i, u)) return !1; if (n.type === I.ExperimentTypes.USER) { let e = { name: t, revision: n.revision, population: n.population, bucket: n.bucket, location: i, location_stack: r, hash_result: n.hashResult, excluded: o, exposure_type: l }; null != s && (e.context_guild_id = s.guildId); let d = u ? T.AnalyticEvents.EXPERIMENT_USER_TRIGGERED_FALLBACK : T.AnalyticEvents.EXPERIMENT_USER_TRIGGERED; c.default.track(d, e, { flush: !0, fingerprint: a }) } else if (n.type === I.ExperimentTypes.GUILD) { let e = u ? T.AnalyticEvents.EXPERIMENT_GUILD_TRIGGERED_FALLBACK : T.AnalyticEvents.EXPERIMENT_GUILD_TRIGGERED; c.default.track(e, { name: t, revision: n.revision, bucket: n.bucket, guild_id: n.guildId, location: i, location_stack: r, hash_result: n.hashResult, excluded: o, exposure_type: l }, { flush: !0, fingerprint: a }) } O[B(t, n, i, u)] = { time: Date.now(), hash: V(n) }, ee(O) } function Y(e) { let [t, n] = e; return null != E.GUILD_FILTERS[t] ? (0, E.GUILD_FILTERS)[t](n) : null } function j(e) { let [t, n] = e; return { buckets: t.map(e => { let [t, n] = e; return { bucket: t, positions: n.map(e => { let { s: t, e: n } = e; return { start: t, end: n } }) } }), filters: n.map(Y), rawFilterData: n } } function W(e) { !P && "CONNECTION_OPEN" === e.type && k(e.user) && (P = !0), L = {}, v = {}, D = {}; let t = "CONNECTION_OPEN" === e.type || null == e.fingerprint || e.fingerprint === d.default.getFingerprint(), { experiments: n, guildExperiments: i } = e; t && K(n, i), p = !0 } function K(e, t) { R = e, g = null != t ? t : [], e.forEach(e => { let [t, n, i, r, s, a, o, l] = e; L[t] = { type: "user", revision: n, population: s, bucket: i, override: 0 === r, hashResult: null != a ? a : -1, aaMode: 1 === o, triggerDebuggingEnabled: w(1 === l, t) } }), null != t && t.forEach(e => { let [t, n, i, r, s, a, o, l, u, d] = e; v[t] = { hashKey: n, revision: i, populations: r.map(j), overrides: function(e) { let t = {}; if (null == e) return t; for (let { b: n, k: i } of e) for (let e of i) t[e] = n; return t }(s), overridesFormatted: (null != a ? a : []).map(e => e.map(j)), holdoutName: null != o ? o : null, holdoutBucket: null != l ? l : null, aaMode: 1 === u, triggerDebuggingEnabled: w(1 === d, t) } }) } function z(e, t, n) { let i = null; for (let { buckets: s, filters: a } of t) { var r = !0; if (null != a) { for (let t of a) if (null != t && !t(e)) { r = !1; break } } if (!r) continue; let t = s.find(e => { let { positions: t } = e; return t.some(e => { let { start: t, end: i } = e; return n >= t && n < i }) }); if ((i = null != t ? t.bucket : I.ExperimentBuckets.CONTROL) === I.ExperimentBuckets.NOT_ELIGIBLE) break; return i } return null } function Z(e) { let t = {}; for (let i in e) { var n; let r = e[i]; for (let e of (t[i] = { ...r }, t[i].populations)) e.filters = e.rawFilterData.map(Y); for (let e of null !== (n = t[i].overridesFormatted) && void 0 !== n ? n : []) for (let t of e) t.filters = t.rawFilterData.map(Y) } return t } function X(e) { let { serializedExperimentStore: t, user: n } = e; !P && k(n) && (P = !0), p = t.hasLoadedExperiments, O = t.trackedExposureExperiments, L = t.loadedUserExperiments, M = t.userExperimentOverrides, y = t.guildExperimentOverrides, v = Z(t.loadedGuildExperiments), D = {} } function Q() { p = !0 } function q(e) { let { isSwitchingAccount: t } = e; o.Storage.remove(S), !t && (o.Storage.remove(h), o.Storage.remove(A), o.Storage.remove(m), M = {}, y = {}), L = {}, R = [], O = {}, p = !1 } function J() { p = !1, O = {}, o.Storage.remove(S) } function $() { try { o.Storage.set(A, M) } catch (e) { N.error("Error saving user experiment overrides, unsaved data will be lost", e), c.default.track(T.AnalyticEvents.EXPERIMENT_SAVE_EXPOSURE_FAILED, { module: "discord_app", call: "ExperimentStore.saveExperimentOverrides" }) } try { o.Storage.set(m, y) } catch (e) { N.error("Error saving guild experiment overrides, unsaved data will be lost", e), c.default.track(T.AnalyticEvents.EXPERIMENT_SAVE_EXPOSURE_FAILED, { module: "discord_app", call: "ExperimentStore.saveExperimentOverrides" }) } } function ee(e) { try { o.Storage.set(S, { v: 1, e: e }) } catch (e) { N.error("Error saving tracked exposure experiments, unsaved data will be lost", e), c.default.track(T.AnalyticEvents.EXPERIMENT_SAVE_EXPOSURE_FAILED, { module: "discord_app", call: "ExperimentStore.saveTrackedExposureExperiments" }) } } function et(e) { let { experimentId: t, experimentType: n, title: i, description: r, buckets: s, commonTriggerPoint: a } = e; C[t] = { type: n, title: i, description: r, buckets: s, commonTriggerPoint: a } } function en(e) { var t; let { experimentId: n, experimentBucket: i, experimentType: r, skipCleanup: s } = e, a = null != r ? r : null === (t = C[n]) || void 0 === t ? void 0 : t.type; if (null == a) return !1; if (null == i ? (M = { ...M }, delete M[n], y = { ...y }, delete y[n]) : "user" === a ? M = { ...M, [n]: { type: a, revision: 1, population: 0, bucket: i, override: !0 } } : y = { ...y, [n]: { type: a, revision: 1, bucket: i, override: !0 } }, !s) for (let e of [M, y]) for (let t in e) null == C[t] && delete M[t]; $() } function ei(e) { let { guild: t } = e; for (let e in D) { let [n] = e.split(":"); t.id === n && delete D[e] } } class er extends _.default { initialize() { O = function() { let e = o.Storage.get(S); if (null == e || 1 !== e.v) return {}; let t = e.e, n = Date.now(), i = !1; for (let e in t) n - t[e].time > 6048e5 && (delete t[e], i = !0); return i && ee(t), t }(), ! function() { var e, t, n; let i = [null !== (e = o.Storage.get(h)) && void 0 !== e ? e : {}, null !== (t = o.Storage.get(A)) && void 0 !== t ? t : {}, null !== (n = o.Storage.get(m)) && void 0 !== n ? n : {}]; M = {}, y = {}; let s = !r().isEmpty(i[0]); for (let e of i) for (let t in e) { let n = e[t]; null == n || n.type !== I.ExperimentTypes.USER && n.type !== I.ExperimentTypes.GUILD || null == n.bucket || !0 !== n.override || n.fromCookie ? (delete e[t], s = !0) : n.type === I.ExperimentTypes.USER ? M[t] = n : y[t] = n } let a = (0, l.getBuildOverrideExperiments)(); for (let e in a) M[e] = { type: I.ExperimentTypes.USER, revision: 1, population: 0, override: !0, fromCookie: !0, bucket: a[e] }, y[e] = { type: I.ExperimentTypes.GUILD, revision: 1, override: !0, fromCookie: !0, bucket: a[e] }, s = !0; s && $() }() } loadCache() { let e = this.readSnapshot(er.LATEST_SNAPSHOT_VERSION); null != e && ("loadedUserExperiments" in e ? (L = e.loadedUserExperiments, v = Z(e.loadedGuildExperiments)) : K(e.rawUserExperiments, e.rawGuildExperiments)) } takeSnapshot() { return { version: er.LATEST_SNAPSHOT_VERSION, data: { rawUserExperiments: R, rawGuildExperiments: g } } } get hasLoadedExperiments() { return p } hasRegisteredExperiment(e) { return null != C[e] } getUserExperimentDescriptor(e) { if (P) { let t = M[e]; if (null != t) return t } let t = b(e); return L["".concat(t)] } getGuildExperimentDescriptor(e, t) { let n = null != t ? t : T.EMPTY_STRING_SNOWFLAKE_ID, i = y[e]; if (P && null != i) return i; let r = "".concat(n, ":").concat(e); if (r in D) return D[r]; let s = function e(t, n) { var i, r; let s = b(n), a = v["".concat(s)]; if (null == a) return null; let { revision: o, aaMode: l } = a, u = a.overrides[t], d = a.triggerDebuggingEnabled; if (null != u) return u === I.ExperimentBuckets.NOT_ELIGIBLE ? null : { type: I.ExperimentTypes.GUILD, guildId: t, revision: o, bucket: u, override: !0, hashResult: -1, triggerDebuggingEnabled: d }; let _ = b("".concat(null !== (i = a.hashKey) && void 0 !== i ? i : n, ":").concat(t)) % 1e4, c = null; for (let e of null !== (r = a.overridesFormatted) && void 0 !== r ? r : []) if (null !== (c = z(t, e, _))) return { type: I.ExperimentTypes.GUILD, guildId: t, revision: a.revision, bucket: c, override: !0, hashResult: _, triggerDebuggingEnabled: d }; if (null == (c = z(t, a.populations, _))) return null; if (null != a.holdoutName && null != a.holdoutBucket && a.holdoutName !== n) { let n = e(t, a.holdoutName); if ((null == n ? void 0 : n.bucket) != null && (!0 !== n.override && H({ experimentId: a.holdoutName, descriptor: n }), (null == n ? void 0 : n.bucket) === a.holdoutBucket)) return null } return { type: I.ExperimentTypes.GUILD, guildId: t, revision: a.revision, bucket: c, hashResult: _, aaMode: l, triggerDebuggingEnabled: d } }(n, e); return D[r] = s, s } getUserExperimentBucket(e) { let t = this.getUserExperimentDescriptor(e); return null != t ? t.bucket : I.ExperimentBuckets.NOT_ELIGIBLE } getGuildExperimentBucket(e, t) { let n = this.getGuildExperimentDescriptor(e, t); return null != n ? n.bucket : I.ExperimentBuckets.NOT_ELIGIBLE } getAllUserExperimentDescriptors() { return L } getGuildExperiments() { return v } getLoadedUserExperiment(e) { return L[b(e)] } getLoadedGuildExperiment(e) { return v[b(e)] } getRecentExposures(e, t) { let n = "".concat(e, "|").concat(t, "|"); return Object.entries(O).filter(e => { let [t] = e; return t.startsWith(n) }).map(e => { let [t, { time: i }] = e; return [t.replace(n, ""), i] }) } getRegisteredExperiments() { return C } getAllExperimentOverrideDescriptors() { return P ? { ...M, ...y } : {} } getExperimentOverrideDescriptor(e) { var t; return P ? null !== (t = M[e]) && void 0 !== t ? t : y[e] : null } getAllExperimentAssignments() { let e = {}, t = {}; for (let n in Object.keys(C).forEach(e => { t[b("".concat(e))] = e }), L) { let i = t[n]; null != i && (e[i] = L[n].bucket) } for (let t in D) { let n = D[t]; null != n && (e[t] = n.bucket) } return e } getSerializedState() { let e = {}; for (let t in v) for (let n of (e[t] = JSON.parse(JSON.stringify(v[t])), e[t].populations)) n.filters = []; return { hasLoadedExperiments: p, trackedExposureExperiments: O, loadedUserExperiments: L, loadedGuildExperiments: e, userExperimentOverrides: M, guildExperimentOverrides: y } } hasExperimentTrackedExposure(e, t, n, i) { return F(e, t, n, i) } constructor() { super({ LOGOUT: q, LOGIN_SUCCESS: J, CONNECTION_OPEN: W, EXPERIMENTS_FETCH_SUCCESS: W, OVERLAY_INITIALIZE: X, CACHE_LOADED: () => this.loadCache(), EXPERIMENTS_FETCH_FAILURE: Q, EXPERIMENT_OVERRIDE_BUCKET: en, GUILD_CREATE: ei, GUILD_UPDATE: ei }), f(this, "trackExposure", H) } } f(er, "displayName", "ExperimentStore"), f(er, "LATEST_SNAPSHOT_VERSION", 1), t.default = new er }, 360359: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GUILD_FILTERS: function() { return I } }), n("47120"); var i = n("654861"), r = n.n(i), s = n("108131"), a = n.n(s), o = n("943881"), l = n("650774"), u = n("430824"), d = n("70956"), _ = n("709054"); function c(e, t, n) { let i = r()(e), s = null != t ? r()(t) : null, a = null != n ? r()(n) : null; return !(null != s && i.lesser(s) || null != a && i.greater(a)) && !0 } function E(e) { let t, n; for (let [i, r] of e) switch (i) { case a().v3("min_id"): t = r; break; case a().v3("max_id"): n = r } return { min: t, max: n } } let I = { [a().v3("guild_ids")]: e => { let t = []; for (let [n, i] of e) if (n === a().v3("guild_ids")) t = i; return e => t.includes(e) }, [a().v3("guild_id_range")]: e => { let { min: t, max: n } = E(e); return e => c(e, t, n) }, [a().v3("guild_age_range_days")]: e => { let { min: t, max: n } = E(e); return e => c(Math.floor(_.default.age(e) / d.default.Millis.DAY), t, n) }, [a().v3("guild_member_count_range")]: e => { let { min: t, max: n } = E(e); return e => { let i = l.default.getMemberCount(e); return null != i && c(i, t, n) } }, [a().v3("guild_has_feature")]: e => { let [ [, t] ] = e; return e => { var n; let i = null !== (n = u.default.getGuild(e)) && void 0 !== n ? n : o.default.getGuild(e); return null != i && t.some(e => i.hasFeature(e)) } }, [a().v3("guild_hub_types")]: e => { let [ [, t] ] = e; return e => { var n; let i = null !== (n = u.default.getGuild(e)) && void 0 !== n ? n : o.default.getGuild(e); return null != i && "number" == typeof i.hubType && t.some(e => i.hubType === e) } }, [a().v3("guild_has_vanity_url")]: e => { let [ [, t] ] = e; return e => { var n; let i = null !== (n = u.default.getGuild(e)) && void 0 !== n ? n : o.default.getGuild(e); return null != i && t === (null != i.vanityURLCode) } }, [a().v3("guild_in_range_by_hash")]: e => { let t, n; for (let [r, s] of e) switch (r) { case a().v3("hash_key"): t = s; break; case a().v3("target"): var i; n = null !== (i = parseInt(s)) && void 0 !== i ? i : 0 } return e => { let i = a().v3("".concat(t, ":").concat(e)); return (i > 0 ? i + i : i >>> 0) % 1e4 < n } } } }, 630699: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isOOPExperimentEnabled: function() { return r } }); let i = (0, n("987170").default)({ kind: "user", id: "2023-08_overlay3_out_of_process_enablement", label: "Overlay3 - Out of Process Enablement", defaultConfig: { useGlobalOverlay: !1 }, treatments: [{ id: 1, label: "Enabled", config: { useGlobalOverlay: !0 } }] }); function r() { let e = i.getCurrentConfig({ location: "isOOPExperimentEnabled" }, { autoTrackExposure: !0 }); return null != e && e.useGlobalOverlay } }, 987170: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i = n("470079"), r = n("180205"), s = n("314897"), a = n("492435"), o = n("353926"), l = n("980944"), u = n("987338"); function d(e, t, n) { return "guild" === e ? o.default.getGuildExperimentDescriptor(t, n.guildId) : o.default.getUserExperimentDescriptor(t) } function _(e, t, n, i) { var r, s; return (null == i ? void 0 : i.aaMode) ? e.defaultConfig : null !== (s = null === (r = n.get(t)) || void 0 === r ? void 0 : r.config) && void 0 !== s ? s : e.defaultConfig } function c(e) { var t, n; (0, l.validateOneExperiment)(e.id, e.label, e.commonTriggerPoint); let c = new Map; c.set(u.ExperimentBuckets.NOT_ELIGIBLE, { description: "Not Eligible", config: e.defaultConfig }), c.set(u.ExperimentBuckets.CONTROL, { description: "Control Bucket", config: e.defaultConfig }), e.treatments.forEach(e => { c.set(e.id, { description: "Treatment ".concat(e.id, ": ").concat(e.label), config: e.config }) }); let E = (t = e.kind, n = { id: e.id, title: e.label, commonTriggerPoint: e.commonTriggerPoint, description: [...c.values()].map(e => e.description), buckets: [...c.keys()] }, "guild" === t ? (0, a.registerGuildExperiment)(n) : (0, a.registerUserExperiment)(n)); function I(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = arguments.length > 2 ? arguments[2] : void 0, i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; if (t.exposureType = n ? u.ExposureTypes.AUTO_FALLBACK : u.ExposureTypes.AUTO, t.excluded = !1, null == i) { T(e, t); return } f(e, t, i) } function T(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { excluded: !1, exposureType: u.ExposureTypes.MANUAL }, i = d(e.kind, E.id, t); null != i && f(t, n, i) } function f(e, t, n) { if (null != n) { var i, r, o, l, d; let _ = u.ExposureTypes.MANUAL; (0, a.trackExposureToExperiment)(E.id, n, { location: null !== (i = null == e ? void 0 : e.location) && void 0 !== i ? i : "unknown", analyticsLocations: null !== (r = null == t ? void 0 : t.analyticsLocations) && void 0 !== r ? r : [], fingerprint: null !== (l = null !== (o = null == t ? void 0 : t.fingerprint) && void 0 !== o ? o : s.default.getFingerprint()) && void 0 !== l ? l : void 0, excluded: (null == t ? void 0 : t.excluded) || !1, exposureType: null !== (d = null == t ? void 0 : t.exposureType) && void 0 !== d ? d : _ }) } } function S(t, n) { let i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = null != i.disable && i.disable, s = d(e.kind, e.id, t), a = null == s || r ? u.ExperimentBuckets.NOT_ELIGIBLE : s.bucket, l = null == s ? -1 : s.revision; function E() { let i = d(e.kind, e.id, t), s = null == i || r ? u.ExperimentBuckets.NOT_ELIGIBLE : i.bucket, o = null == i ? -1 : i.revision; (s !== a || l !== o) && (n(_(e, s, c, i), s, o), a = s, l = o) } return n(_(e, a, c, s), a, l), o.default.addReactChangeListener(E), () => { o.default.removeReactChangeListener(E) } } return { useExperiment: function(t) { var n, s, a; let o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { autoTrackExposure: !0 }, l = null !== (n = o.disable) && void 0 !== n && n, E = !1 !== o.autoTrackExposure, T = d(e.kind, e.id, t), f = null == o.trackExposureOptions ? void 0 : (0, r.default)(null !== (s = o.trackExposureOptions) && void 0 !== s ? s : {}), h = null !== (a = null == T ? void 0 : T.triggerDebuggingEnabled) && void 0 !== a && a, [ [A, m, N], p ] = (0, i.useState)(() => { let t = null == T || l ? u.ExperimentBuckets.NOT_ELIGIBLE : T.bucket; return [_(e, t, c, T), t, null == T ? -1 : T.revision] }), O = (0, r.default)(t); return (0, i.useEffect)(() => { if (!l && (!!E || !!h)) I(O, f, !1 === E) }, [l, E, O, f, m, N, h]), (0, i.useEffect)(() => S(O, (e, t, n) => { p(i => i[0] === e && i[1] === t && i[2] === n ? i : [e, t, n]) }, { disable: l }), [l, O]), A }, subscribe: S, trackExposure: T, getCurrentConfig: function(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { autoTrackExposure: !0 }, i = d(e.kind, e.id, t); if (null == i || n.disable) return _(e, u.ExperimentBuckets.NOT_ELIGIBLE, c, i); if (!1 !== n.autoTrackExposure || i.triggerDebuggingEnabled) { let e = !1 === n.autoTrackExposure; I(t, n.trackExposureOptions, e, i) } return _(e, i.bucket, c, i) }, definition: e, isAAMode: function(t) { let n = d(e.kind, e.id, t); return !!(null == n ? void 0 : n.aaMode) } } } }, 159626: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("987170"); function r(e) { let t = (0, i.default)({ ...e, id: "".concat(e.id, "_existing_users"), label: "".concat(e.label, " - Existing Users") }); return { existingUsers: t, newUsers: (0, i.default)({ ...e, id: "".concat(e.id, "_new_users"), label: "".concat(e.label, " - New Users") }) } } }, 818083: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createExperiment: function() { return i.default } }); var i = n("987170") }, 893638: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMergedExperimentConfigs: function() { return r } }), n("470079"); var i = n("392711"); function r(e, t, n, r) { var s, a; let o = e.getCurrentConfig(n, r), l = t.getCurrentConfig(n, r); return s = o, a = l, (0, i.mergeWith)({}, s, a, (e, t) => e || t) } }, 957899: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("160462"); class s extends i.default { handleConnectionOpen() { r.ConnectionOpenTriggerPoint.trigger() } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: this.handleConnectionOpen }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new s }, 160462: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ConnectionOpenTriggerPoint: function() { return s } }); var i = n("91641"), r = n("987338"); let s = new i.CommonTriggerPointConfiguration([], r.CommonTriggerPoints.POST_CONNECTION_OPEN, { location: "connection open" }) }, 91641: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { CommonTriggerPointConfiguration: function() { return r } }), n("411104"), n("47120"); class r { registeredExperimentIds() { return this.experiments.map(e => e.definition.id) } trigger() { ! function(e, t, n) { t.forEach(e => { e.trackExposure(n) }) }(this.triggerPoint, this.experiments, this.params) } constructor(e, t, n) { i(this, "experiments", void 0), i(this, "triggerPoint", void 0), i(this, "params", void 0), this.experiments = e, this.triggerPoint = t, this.params = n } } }, 980944: function(e, t, n) { "use strict"; function i(e, t, n) {} n.r(t), n.d(t, { validateOneExperiment: function() { return i } }), n("47120"), n("411104"), n("353926") }, 948561: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { MAX_TIMEOUT_FOR_JITTER: function() { return D }, MESSAGE_SCAN_TIMEOUT: function() { return v } }), n("47120"), n("724458"); var r = n("952639"), s = n.n(r), a = n("605906"), o = n.n(a), l = n("286379"), u = n("570140"), d = n("147913"), _ = n("786761"), c = n("797614"), E = n("869765"), I = n("314897"), T = n("433355"), f = n("592125"), S = n("375954"), h = n("944486"), A = n("914010"), m = n("709054"), N = n("93735"), p = n("522664"), O = n("651530"), C = n("163268"), R = n("735020"), g = n("981631"), L = n("526761"); let v = 3e3, D = 800, M = {}; function y(e) { return "".concat(e.channel_id, ":").concat(e.id) } function P() { Object.values(M).forEach(e => { let { timeout: t } = e; clearTimeout(t) }), M = {} } function U(e, t) { if (null == e.id || null == e.channel_id) return !1; let n = y(e); if (null != M[n]) { let { timeout: i } = M[n]; return clearTimeout(i), function(e, t) { let { setAt: n } = M[y(e)]; if (t === C.TimeoutCancelSource.UPDATE) { var i, r; let t = null !== (i = e.attachments) && void 0 !== i ? i : [], n = null !== (r = e.embeds) && void 0 !== r ? r : [], s = t.filter(e => (0, C.isMediaObscured)({ type: C.ObscuredMediaTypes.Attachment, media: e }, !0)), a = n.filter(e => (0, C.isMediaObscured)({ type: C.ObscuredMediaTypes.Embed, media: e }, !0)); (0, C.trackExplicitMediaScanComplete)({ messageId: e.id, channelId: e.channel_id, numOfAttachments: t.length, numOfEmbeds: n.length, numOfExplicitAttachments: s.length, numOfExplicitEmbeds: a.length }) }(0, C.trackScanTiming)(n, t) }(e, t), delete M[n], !0 } return !1 } let b = (e, t) => { if (0 !== e.length) { if (t) { (0, p.sendMultiChannelMessagesForScanning)(e); return }(0, p.sendMessagesForScanning)(e[0].channel_id, e.map(e => e.id)) } }; function G(e, t) { let { forceBatchScan: n = !1, jitter: i = !1 } = null != t ? t : {}, r = (null == t ? void 0 : t.isMessageUpdate) ? e.filter(N.hasUnscannedAttachmentsOrEmbedsForTimeout) : e; r.forEach(e => { let t = y(e); null == M[t] && (c.default.increment({ name: l.MetricEvents.EXPLICIT_MEDIA_SCAN_CLIENT_TIMEOUT_CREATE }), M[t] = { setAt: Date.now(), timeout: setTimeout(() => { ! function(e) { if (U(e, C.TimeoutCancelSource.TIMEOUT)) { let t = S.default.getMessage(e.channel_id, e.id), { attachmentIds: n, embedIds: i } = (0, N.getUnscannedAttachmentsAndEmbedIdsForTimeout)(t); (0, C.trackScanningTimedOut)({ channelId: e.channel_id, messageId: e.id, attachmentIds: n, embedIds: i }), u.default.dispatch({ type: "MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT", messageId: e.id, channelId: e.channel_id }) } }(e) }, v) }) }); let s = n || new Set(r.map(e => e.channel_id)).size > 1; i ? setTimeout(() => { b(r.filter(e => null != M[y(e)]), s) }, Math.random() * D) : b(r, s) } function w(e) { return e.reduce((e, t) => { var n, r, s, a, o, l, u, d; null == e[t.channel_id] && (e[t.channel_id] = { numOfAttachments: 0, numOfAttachmentsPendingScan: 0, numOfEmbeds: 0, numOfEmbedsPendingScan: 0 }); let _ = e[t.channel_id]; return _.numOfAttachments += null !== (o = null === (n = t.attachments) || void 0 === n ? void 0 : n.length) && void 0 !== o ? o : 0, _.numOfEmbeds += null !== (l = null === (r = t.embeds) || void 0 === r ? void 0 : r.length) && void 0 !== l ? l : 0, _.numOfAttachmentsPendingScan += null !== (u = null === (s = t.attachments) || void 0 === s ? void 0 : s.filter(e => (0, N.shouldScanAttachment)(e, i)).length) && void 0 !== u ? u : 0, _.numOfEmbedsPendingScan += null !== (d = null == t ? void 0 : null === (a = t.embeds) || void 0 === a ? void 0 : a.filter(e => (0, N.shouldScanEmbed)(e, i)).length) && void 0 !== d ? d : 0, { ...e, [t.channel_id]: _ } }, {}) } function k(e, t) { let { messagesPendingScan: n, attributesByChannelId: i } = function(e) { let t = e.filter(e => (0, N.hasAttachmentsOrEmbeds)(e) && (0, C.shouldRedactExplicitContent)(e)), n = e.map(e => { if (null != e && "referenced_message" in e && null != e.referenced_message && (0, N.hasAttachmentsOrEmbeds)(e.referenced_message) && (0, C.shouldRedactExplicitContent)(e.referenced_message)) return e.referenced_message }).filter(function(e) { return null != e }); n.length > 0 && (t = [...t, ...n]); let i = o()(t, (e, t) => e.id === t.id && e.channel_id === t.channel_id); return { messagesPendingScan: i.filter(e => (0, N.hasAttachmentsOrEmbedsRequiringScan)(e)), attributesByChannelId: w(i) } }(e); return m.default.entries(i).forEach(e => { let [t, n] = e; (0, C.trackExplicitMediaRedactableMessagedLoaded)({ channelId: t, numOfAttachments: n.numOfAttachments, numOfAttachmentsPendingScan: n.numOfAttachmentsPendingScan, numOfEmbeds: n.numOfEmbeds, numOfEmbedsPendingScan: n.numOfEmbedsPendingScan }) }), !!(n.length > 0) && (G(n, t), !0) } function B(e) { var t, n, i, r, s, a; let { message: o } = e; if (!(0, O.isEligibleForExplicitMediaRedaction)() || null == o.channel_id || null == o.id || (null === (t = o.author) || void 0 === t ? void 0 : t.id) === I.default.getId() || null == o.embeds && null == o.attachments || (null === (n = o.embeds) || void 0 === n ? void 0 : n.length) === 0 && (null === (i = o.attachments) || void 0 === i ? void 0 : i.length) === 0) return !1; if (!(0, N.hasUnscannedAttachmentsOrEmbedsForTimeout)(o)) { let e = null !== (a = null !== (s = S.default.getMessage(o.channel_id, o.id)) && void 0 !== s ? s : R.default.getMessage(o.id, o.channel_id)) && void 0 !== a ? a : null === (r = E.default.getMessage(o.channel_id, o.id)) || void 0 === r ? void 0 : r.message; null != e && !(0, N.hasUnscannedAttachmentsOrEmbedsForTimeout)((0, _.updateMessageRecord)(e, o)) && U(e, C.TimeoutCancelSource.UPDATE) } let l = h.default.getChannelId(), u = T.default.getCurrentSidebarChannelId(l); if (!(o.channel_id === l || o.channel_id === u)) return !1; let d = S.default.getMessage(o.channel_id, o.id); return null != d && k([d], { isMessageUpdate: !0 }) } function V(e) { var t, n; let { channelId: i, message: r, optimistic: s, isPushNotification: a } = e; if (!(0, O.isEligibleForExplicitMediaRedaction)() || s || a || null == i || (null === (t = r.author) || void 0 === t ? void 0 : t.id) === I.default.getId()) return !1; let o = h.default.getChannelId(), l = T.default.getCurrentSidebarChannelId(o), u = i === o || i === l, d = f.default.getChannel(i); if (!u) return !1; let _ = null === (n = null == d ? void 0 : d.isPrivate()) || void 0 === n || n, c = (null == d ? void 0 : d.memberCount) == null || (null == d ? void 0 : d.memberCount) > 100; return k([r], { jitter: _ && c }) } function x(e) { let { channelId: t, messages: n } = e; if (!(0, O.isEligibleForExplicitMediaRedaction)() || null == t || null == n) return !1; let i = h.default.getChannelId(), r = T.default.getCurrentSidebarChannelId(i); return (t === i || t === r) && k(n) } function F(e) { let { messages: t } = e; if (!(0, O.isEligibleForExplicitMediaRedaction)() || null == t) return !1; let n = s()(t); return k(o()(n, (e, t) => e.id === t.id && e.channel_id === t.channel_id)) } function H(e) { let { guildId: t, threads: n } = e; return !!(null != n && (0, O.isEligibleForExplicitMediaRedaction)()) && A.default.getGuildId() === t && k(m.default.keys(n).map(e => n[e].first_message)) } function Y(e) { let { guildId: t, firstMessages: n } = e; return !!(null != n && (0, O.isEligibleForExplicitMediaRedaction)()) && A.default.getGuildId() === t && k(n, { forceBatchScan: !0 }) } function j(e) { let { channelId: t } = e; return !!(null != t && (0, O.isEligibleForExplicitMediaRedaction)()) && t === h.default.getChannelId() && z(t) } function W(e) { let { settings: t, local: n } = e; if (!(0, O.isEligibleForExplicitMediaRedaction)() || !n || t.type !== L.UserSettingsTypes.PRELOADED_USER_SETTINGS) return !1; let i = h.default.getChannelId(); return null != i && z(i) } function K(e) { let { channelId: t, chatOpen: n } = e; return !!(0, O.isEligibleForExplicitMediaRedaction)() && !!n && z(t) } function z(e) { let t = S.default.getMessages(e); return 0 !== t.length && function(e) { let { messagesPendingScan: t, attributesByChannelId: n } = function(e) { let t = e.filter(e => (0, N.hasAttachmentsOrEmbeds)(e) && (0, C.shouldRedactExplicitContent)(e)), n = e.map(e => { if (g.MessageTypesWithLazyLoadedReferences.has(e.type) && null != e.messageReference) { let t = E.default.getMessageByReference(e.messageReference); if (t.state === E.ReferencedMessageState.LOADED && null != t.message && (0, N.hasAttachmentsOrEmbeds)(t.message) && (0, C.shouldRedactExplicitContent)(t.message)) return t.message } }).filter(function(e) { return null != e }); n.length > 0 && (t = [...t, ...n]); let i = o()(t, (e, t) => e.id === t.id && e.channel_id === t.channel_id); return { messagesPendingScan: i.filter(e => (0, N.hasAttachmentsOrEmbedsRequiringScan)(e)), attributesByChannelId: w(i) } }(e); return m.default.entries(n).forEach(e => { let [t, n] = e; (0, C.trackExplicitMediaRedactableMessagedLoaded)({ channelId: t, numOfAttachments: n.numOfAttachments, numOfAttachmentsPendingScan: n.numOfAttachmentsPendingScan, numOfEmbeds: n.numOfEmbeds, numOfEmbedsPendingScan: n.numOfEmbedsPendingScan }) }), !!(t.length > 0) && (G(t), !0) }(t) } async function Z() { if (!(0, O.isEligibleForExplicitMediaRedaction)()) return; let { body: e } = await (0, p.fetchValidContentScanVersion)(); i = e.version } class X extends d.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { LOAD_MESSAGES_SUCCESS: x, LOAD_FORUM_POSTS: H, LOAD_THREADS_SUCCESS: Y, LOAD_ARCHIVED_THREADS_SUCCESS: Y, MESSAGE_CREATE: V, MESSAGE_UPDATE: B, LOGOUT: P, SEARCH_FINISH: F, MOD_VIEW_SEARCH_FINISH: F, CHANNEL_SELECT: j, LOAD_PINNED_MESSAGES_SUCCESS: F, USER_SETTINGS_PROTO_UPDATE: W, CHANNEL_RTC_UPDATE_CHAT_OPEN: K, POST_CONNECTION_OPEN: Z }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new X }, 93735: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getUnscannedAttachmentsAndEmbedIdsForTimeout: function() { return d }, hasAttachmentsOrEmbeds: function() { return i }, hasAttachmentsOrEmbedsRequiringScan: function() { return o }, hasUnscannedAttachmentsOrEmbedsForTimeout: function() { return _ }, shouldScanAttachment: function() { return s }, shouldScanEmbed: function() { return a } }); function i(e) { return null != e && (null != e.attachments && e.attachments.length > 0 || null != e.embeds && e.embeds.length > 0) } function r(e) { return null != e.content_scan_version ? e.content_scan_version : null != e.contentScanVersion ? e.contentScanVersion : null } function s(e, t) { return null == e.content_scan_version || e.content_scan_version < (null != t ? t : 1) } function a(e, t) { var n, i, s, a, o, l, u; let d = r(e); return !((null === (n = e.video) || void 0 === n ? void 0 : n.width) === 0 && (null === (i = e.video) || void 0 === i ? void 0 : i.height) === 0 || (null === (s = e.thumbnail) || void 0 === s ? void 0 : s.width) === 0 && (null === (a = e.thumbnail) || void 0 === a ? void 0 : a.height) === 0 || (null === (o = e.image) || void 0 === o ? void 0 : o.width) === 0 && (null === (l = e.image) || void 0 === l ? void 0 : l.height) === 0 || "images" in e && (null === (u = e.images) || void 0 === u ? void 0 : u.some(e => 0 === e.width && 0 === e.height))) && (null == d || d < (null != t ? t : 1)) } function o(e) { let { attachmentIds: t, embedIds: n } = function(e) { var t, n, i, r, o, l, u, d; let _ = null !== (o = null == e ? void 0 : null === (t = e.attachments) || void 0 === t ? void 0 : t.length) && void 0 !== o ? o : 0, c = null !== (l = null == e ? void 0 : null === (n = e.embeds) || void 0 === n ? void 0 : n.length) && void 0 !== l ? l : 0; if (0 === _ && 0 === c) return { attachmentIds: [], embedIds: [] }; let E = null !== (u = null == e ? void 0 : null === (i = e.attachments) || void 0 === i ? void 0 : i.filter(s)) && void 0 !== u ? u : [], I = null !== (d = null == e ? void 0 : null === (r = e.embeds) || void 0 === r ? void 0 : r.filter(a)) && void 0 !== d ? d : []; return { attachmentIds: E.map(e => e.id).filter(Boolean), embedIds: I.map((e, t) => "embed_".concat(t)).filter(Boolean) } }(e); return t.length > 0 || n.length > 0 } function l(e) { return null == e.content_scan_version } function u(e) { var t, n, i, s, a, o, l; let u = r(e); return !((null === (t = e.video) || void 0 === t ? void 0 : t.width) === 0 && (null === (n = e.video) || void 0 === n ? void 0 : n.height) === 0 || (null === (i = e.thumbnail) || void 0 === i ? void 0 : i.width) === 0 && (null === (s = e.thumbnail) || void 0 === s ? void 0 : s.height) === 0 || (null === (a = e.image) || void 0 === a ? void 0 : a.width) === 0 && (null === (o = e.image) || void 0 === o ? void 0 : o.height) === 0 || "images" in e && (null === (l = e.images) || void 0 === l ? void 0 : l.some(e => 0 === e.width && 0 === e.height))) && null == u } function d(e) { var t, n, i, r, s, a, o, d; let _ = null !== (s = null == e ? void 0 : null === (t = e.attachments) || void 0 === t ? void 0 : t.length) && void 0 !== s ? s : 0, c = null !== (a = null == e ? void 0 : null === (n = e.embeds) || void 0 === n ? void 0 : n.length) && void 0 !== a ? a : 0; if (0 === _ && 0 === c) return { attachmentIds: [], embedIds: [] }; let E = null !== (o = null == e ? void 0 : null === (i = e.attachments) || void 0 === i ? void 0 : i.filter(l)) && void 0 !== o ? o : [], I = null !== (d = null == e ? void 0 : null === (r = e.embeds) || void 0 === r ? void 0 : r.filter(u)) && void 0 !== d ? d : []; return { attachmentIds: E.map(e => e.id).filter(Boolean), embedIds: I.map((e, t) => "embed_".concat(t)).filter(Boolean) } } function _(e) { let { attachmentIds: t, embedIds: n } = d(e); return t.length > 0 || n.length > 0 } }, 522664: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchValidContentScanVersion: function() { return u }, reportFailedSendFalsePositive: function() { return a }, reportFalsePositive: function() { return s }, sendMessagesForScanning: function() { return o }, sendMultiChannelMessagesForScanning: function() { return l } }); var i = n("544891"), r = n("981631"); function s(e, t, n, s) { return i.HTTP.post({ url: r.Endpoints.EXPLICIT_MEDIA_REPORT_FALSE_POSITIVE, body: { channel_id: e, message_id: t, attachment_ids: n, embed_ids: s } }) } function a(e, t, n, s) { return i.HTTP.post({ url: r.Endpoints.EXPLICIT_MEDIA_SENDER_REPORT_FALSE_POSITIVE, body: { channel_id: e, message_id: t, attachment_ids: n, filenames: s } }) } function o(e, t) { return i.HTTP.patch({ url: r.Endpoints.EXPLICIT_MEDIA_SCAN_MESSAGES(e), body: { message_ids: t } }) } function l(e) { let t = e.map(e => ({ channel_id: e.channel_id, message_id: e.id })); return i.HTTP.patch({ url: r.Endpoints.EXPLICIT_MEDIA_SCAN_MULTI_CHANNEL_MESSAGES, body: { messages: t } }) } function u() { return i.HTTP.get({ url: r.Endpoints.EXPLICIT_MEDIA_GET_VALID_CONTENT_SCAN_VERSION }) } }, 719548: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EXPLICIT_MEDIA_MIN_HEIGHT: function() { return a }, EXPLICIT_MEDIA_MIN_WIDTH: function() { return s }, SUPPORTED_EMBED_TYPES: function() { return r } }), n("47120"); var i = n("470167"); let r = new Set([i.MessageEmbedTypes.IMAGE, i.MessageEmbedTypes.VIDEO, i.MessageEmbedTypes.GIFV]), s = 146, a = 212 }, 651530: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForExplicitMediaRedaction: function() { return a }, useIsEligibleForExplicitMediaRedaction: function() { return o } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2023-08_explicit_media_redaction", label: "Explicit Media Redaction", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable explicit media redaction", config: { enabled: !0 } }] }), s = (0, i.createExperiment)({ kind: "user", id: "2023-08_explicit_media_redaction_teen", label: "Explicit Media Redaction for Teens", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable explicit media redaction for teens", config: { enabled: !0 } }] }); function a() { let { enabled: e } = r.getCurrentConfig({ location: "686da2_1" }, { autoTrackExposure: !0 }), { enabled: t } = s.getCurrentConfig({ location: "686da2_1" }, { autoTrackExposure: !0 }); return e || t } function o() { let { enabled: e } = r.useExperiment({ location: "686da2_2" }, { autoTrackExposure: !0 }), { enabled: t } = s.useExperiment({ location: "686da2_2" }, { autoTrackExposure: !0 }); return e || t } }, 163268: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ObscuredMediaTypes: function() { return i }, TimeoutCancelSource: function() { return a }, TrackMediaRedactionActionType: function() { return r }, TrackMediaRedactionContext: function() { return s }, getExplicitContentSettingOrDefault: function() { return G }, getObscuredMediaForMessage: function() { return x }, getShouldObscureForSetting: function() { return w }, handleExplicitMediaScanTimeoutForMessage: function() { return Z }, isExplicitMediaBelowConstraints: function() { return X }, isMediaObscured: function() { return V }, isPendingScan: function() { return H }, isPendingScanVersion: function() { return F }, resolveSettingWithDefaults: function() { return P }, shouldRedactExplicitContent: function() { return k }, trackExplicitMediaRedactableMessagedLoaded: function() { return K }, trackExplicitMediaScanComplete: function() { return z }, trackMediaRedactionAction: function() { return Y }, trackScanTiming: function() { return j }, trackScanningTimedOut: function() { return W }, updateExplicitContentSetting: function() { return B } }), n("789020"); var i, r, s, a, o, l, u, d, _ = n("286379"), c = n("524437"), E = n("432877"), I = n("768494"), T = n("797614"), f = n("182274"), S = n("695346"), h = n("592125"), A = n("699516"), m = n("594174"), N = n("626135"), p = n("630388"), O = n("948561"), C = n("651530"), R = n("719548"), g = n("981631"), L = n("973005"); n("689938"); let v = { [L.ExplicitContentFilterTypes.DISABLED.valueOf()]: c.ExplicitContentRedaction.SHOW, [L.ExplicitContentFilterTypes.NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.SHOW, [L.ExplicitContentFilterTypes.FRIENDS_AND_NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.BLOCK }, D = { [L.ExplicitContentFilterTypes.DISABLED.valueOf()]: c.ExplicitContentRedaction.SHOW, [L.ExplicitContentFilterTypes.NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.BLOCK, [L.ExplicitContentFilterTypes.FRIENDS_AND_NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.BLOCK }, M = { [L.ExplicitContentFilterTypes.DISABLED.valueOf()]: c.ExplicitContentRedaction.BLUR, [L.ExplicitContentFilterTypes.NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.BLUR, [L.ExplicitContentFilterTypes.FRIENDS_AND_NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.BLOCK }, y = { [L.ExplicitContentFilterTypes.DISABLED.valueOf()]: c.ExplicitContentRedaction.BLUR, [L.ExplicitContentFilterTypes.NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.BLOCK, [L.ExplicitContentFilterTypes.FRIENDS_AND_NON_FRIENDS.valueOf()]: c.ExplicitContentRedaction.BLOCK }, P = e => { let { setting: t, isDm: n = !1, isFriend: i = !1 } = e; if (null != t && t !== c.ExplicitContentRedaction.UNSET_EXPLICIT_CONTENT_REDACTION) return t; let r = m.default.getCurrentUser(); return (null == r ? void 0 : r.nsfwAllowed) === !1 ? b({ isDm: n, isFriend: i }) : U({ isDm: n, isFriend: i }) }, U = e => { let { isDm: t = !1, isFriend: n = !1 } = e; if (!t) return c.ExplicitContentRedaction.SHOW; let i = S.ExplicitContentFilter.getSetting(); return n ? v[i] : D[i] }, b = e => { let { isDm: t = !1, isFriend: n = !1 } = e; if (!t) return c.ExplicitContentRedaction.BLUR; let i = S.ExplicitContentFilter.getSetting(); return n ? M[i] : y[i] }, G = () => { let e = S.ExplicitContentSettings.getSetting(); return { explicitContentGuilds: P({ setting: null == e ? void 0 : e.explicitContentGuilds }), explicitContentNonFriendDm: P({ setting: null == e ? void 0 : e.explicitContentNonFriendDm, isDm: !0 }), explicitContentFriendDm: P({ setting: null == e ? void 0 : e.explicitContentFriendDm, isDm: !0, isFriend: !0 }) } }; function w(e) { return e === c.ExplicitContentRedaction.BLUR || e === c.ExplicitContentRedaction.BLOCK } function k(e) { var t; if (!(0, C.isEligibleForExplicitMediaRedaction)()) return !1; let n = m.default.getCurrentUser(); if (null == n || (null === (t = e.author) || void 0 === t ? void 0 : t.id) === n.id) return !1; let { explicitContentGuilds: i, explicitContentFriendDm: r, explicitContentNonFriendDm: s } = G(), a = h.default.getChannel(e.channel_id); if (null == a) return !1; if (a.isDM() || a.isGroupDM()) return null != e.author && A.default.getFriendIDs().includes(e.author.id) ? w(r) : w(s); return w(i) } let B = e => { let t = G(); S.ExplicitContentSettings.updateSetting({ ...t, ...e }) }; function V(e, t) { var n, i, r, s; if (!t) return !1; if (E.default.get("obscure_blur_effect_enabled")) return !0; switch (e.type) { case 1: return (0, p.hasFlag)(null !== (n = e.media.flags) && void 0 !== n ? n : 0, g.MessageEmbedFlags.CONTAINS_EXPLICIT_MEDIA); case 0: return (0, p.hasFlag)(null !== (i = e.media.flags) && void 0 !== i ? i : 0, g.MessageAttachmentFlags.CONTAINS_EXPLICIT_MEDIA); case 2: return (0, p.hasFlag)(null !== (s = null === (r = e.media.contentScanMetadata) || void 0 === r ? void 0 : r.contentScanFlags) && void 0 !== s ? s : 0, I.ContentScanFlags.EXPLICIT); default: return !1 } } function x(e) { return k(e) ? { obscuredAttachments: e.attachments.filter(e => V({ type: 0, media: e }, !0)), obscuredEmbeds: e.embeds.filter(e => V({ type: 1, media: e }, !0)) } : { obscuredAttachments: [], obscuredEmbeds: [] } } function F(e) { return !E.default.get("explicit_media_redaction_ignore_pending_scan") && null == e } function H(e) { return !E.default.get("explicit_media_redaction_ignore_pending_scan") && null == e } function Y(e) { let { action: t, channelId: n, messageId: i, context: r } = e; if (null == n || null == i) return; let s = h.default.getChannel(n); N.default.track(g.AnalyticEvents.EXPLICIT_MEDIA_ACTION, { action: t, guild_id: null == s ? void 0 : s.guild_id, channel_id: n, message_id: i, user_is_underage: (0, f.isCurrentUserTeen)(), context: r }) } function j(e, t) { let n = Date.now() - e; T.default.increment({ name: _.MetricEvents.EXPLICIT_MEDIA_SCAN_CLIENT_TIMING, tags: ["timingBucket:".concat(Math.min(Math.floor(n / 1e3), 3)), "source:".concat(t), "metricVersion:".concat(1)] }) } function W(e) { var t, n, i, r; let { channelId: s, messageId: a, attachmentIds: o, embedIds: l } = e; if (null == s || null == a || (null !== (t = null == o ? void 0 : o.length) && void 0 !== t ? t : 0) === 0 && (null !== (n = null == l ? void 0 : l.length) && void 0 !== n ? n : 0) === 0) return; let u = h.default.getChannel(s); N.default.track(g.AnalyticEvents.EXPLICIT_MEDIA_SCAN_CLIENT_TIMED_OUT, { channel_id: s, guild_id: null == u ? void 0 : u.guild_id, message_id: a, embed_ids: l, user_is_underage: (0, f.isCurrentUserTeen)(), scan_timeout_duration: O.MESSAGE_SCAN_TIMEOUT, attachment_ids_v2: o }), T.default.increment({ name: _.MetricEvents.EXPLICIT_MEDIA_SCAN_CLIENT_TIMED_OUT, tags: ["metricVersion:".concat(1)] }), T.default.distribution({ name: _.MetricEvents.EXPLICIT_MEDIA_SCAN_CLIENT_TIMED_OUT_DISTRIBUTION }, (null !== (i = null == o ? void 0 : o.length) && void 0 !== i ? i : 0) + (null !== (r = null == l ? void 0 : l.length) && void 0 !== r ? r : 0)) } function K(e) { let { channelId: t, numOfAttachments: n, numOfAttachmentsPendingScan: i, numOfEmbeds: r, numOfEmbedsPendingScan: s } = e; if (null == t) return; let a = h.default.getChannel(t); N.default.track(g.AnalyticEvents.EXPLICIT_MEDIA_REDACTABLE_MESSAGES_LOADED, { channel_id: t, guild_id: null == a ? void 0 : a.guild_id, num_of_attachments: n, num_of_attachments_pending_scan: i, num_of_embeds: r, num_of_embeds_pending_scan: s }); let o = i + s; o > 0 && T.default.distribution({ name: _.MetricEvents.EXPLICIT_MEDIA_PENDING_MESSAGE_LOADED_V2 }, o) } function z(e) { let { messageId: t, channelId: n, numOfAttachments: i, numOfExplicitAttachments: r, numOfEmbeds: s, numOfExplicitEmbeds: a } = e; if (null == n) return; let o = h.default.getChannel(n); N.default.track(g.AnalyticEvents.EXPLICIT_MEDIA_RETROACTIVE_SCAN_COMPLETE, { message_id: t, channel_id: n, channel_type: null == o ? void 0 : o.type, guild_id: null == o ? void 0 : o.guild_id, num_of_attachments: i, num_of_explicit_attachments: r, num_of_embeds: s, num_of_explicit_embeds: a }) } function Z(e) { let t = e.attachments.map(e => (null == e.content_scan_version && (e.content_scan_version = -1), e)), n = (e = e.set("attachments", t)).embeds.map(e => (null == e.contentScanVersion && (e.contentScanVersion = -1), e)); return e = e.set("embeds", n) }(o = i || (i = {}))[o.Attachment = 0] = "Attachment", o[o.Embed = 1] = "Embed", o[o.GenericMedia = 2] = "GenericMedia", (l = r || (r = {})).EXPLICIT_MEDIA_LEARN_MORE_VIEWED = "explicit_media_learn_more_viewed", l.EXPLICIT_MEDIA_LEARN_MORE_CLICK_SETTINGS = "explicit_media_learn_more_click_settings", l.EXPLICIT_MEDIA_LEARN_MORE_CLICK_LEARN_MORE = "explicit_media_learn_more_click_learn_more", l.EXPLICIT_MEDIA_LEARN_MORE_CLICK_DISMISS = "explicit_media_learn_more_click_dismiss", l.EXPLICIT_MEDIA_LEARN_MORE_CLICK_FALSE_POSITIVE = "explicit_media_learn_more_click_false_positive", l.EXPLICIT_MEDIA_FALSE_POSITIVE_VIEWED = "explicit_media_false_positive_viewed", l.EXPLICIT_MEDIA_FALSE_POSITIVE_CLICK_CONFIRM = "explicit_media_false_positive_click_confirm", l.EXPLICIT_MEDIA_FALSE_POSITIVE_CLICK_CANCEL = "explicit_media_false_positive_click_cancel", l.EXPLICIT_MEDIA_SENDER_FALSE_POSITIVE_BUTTON_CLICKED = "explicit_media_sender_false_positive_button_clicked", l.EXPLICIT_MEDIA_FALSE_POSITIVE_CLYDE_MESSAGE_SENT = "explicit_media_false_positive_clyde_message_sent", (u = s || (s = {})).EXPLICIT_MEDIA_OBSCURED_FALSE_POSITIVE_FLOW = "explicit_media_obscured_false_positive_flow", u.EXPLICIT_MEDIA_SENDER_FALSE_POSITIVE_FLOW = "explicit_media_sender_false_positive_flow", u.EXPLICIT_MEDIA_MESSAGE_SEND_BLOCKED = "explicit_media_message_send_blocked", u.EXPLICIT_MEDIA_ADD_MEDIA_TO_FORUM_POST_BLOCKED = "explicit_media_add_media_to_forum_post_blocked", (d = a || (a = {})).UPDATE = "update", d.TIMEOUT = "timeout"; let X = (e, t) => null != e && null != t && (e <= R.EXPLICIT_MEDIA_MIN_WIDTH || t <= R.EXPLICIT_MEDIA_MIN_HEIGHT) }, 735020: function(e, t, n) { "use strict"; n.r(t), n("724458"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("786761"), d = n("651530"), _ = n("163268"); let c = {}; function E(e) { return "".concat(e.channel_id, ":").concat(e.id) } function I(e) { return !!(0, d.isEligibleForExplicitMediaRedaction)() && null != e.messages && (c = e.messages.reduce((e, t) => (t.forEach(t => { e[E(t)] = (0, u.createMessageRecord)(t) }), e), {}), !0) } function T() { c = {} } class f extends(i = o.default.Store) { getMessage(e, t) { return c[E({ id: e, channel_id: t })] } } a = "SearchMessageStore", (s = "displayName") in(r = f) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new f(l.default, { SEARCH_FINISH: I, MOD_VIEW_SEARCH_FINISH: I, MESSAGE_UPDATE: function(e) { let { message: t } = e; if (!(0, d.isEligibleForExplicitMediaRedaction)() || null == t.id || null == t.channel_id) return !1; let n = E(t), i = c[n]; return null != i && (c[n] = (0, u.updateMessageRecord)(i, { attachments: t.attachments, embeds: t.embeds }), !0) }, LOGOUT: function() { (function() { c = {} })() }, CONNECTION_OPEN: function() { (function() { c = {} })() }, MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT: function(e) { let { messageId: t, channelId: n } = e, i = E({ id: t, channel_id: n }), r = c[i]; null != r && (c[i] = (0, _.handleExplicitMediaScanTimeoutForMessage)(r)) } }) }, 294602: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useExplicitContentSettingOrDefault: function() { return a } }); var i = n("399606"), r = n("581883"), s = n("163268"); let a = () => { let e = (0, i.useStateFromStoresObject)([r.default], () => { var e, t; return null !== (t = null === (e = r.default.settings.textAndImages) || void 0 === e ? void 0 : e.explicitContentSettings) && void 0 !== t ? t : (0, s.getExplicitContentSettingOrDefault)() }); return { explicitContentGuilds: (0, s.resolveSettingWithDefaults)({ setting: null == e ? void 0 : e.explicitContentGuilds }), explicitContentNonFriendDm: (0, s.resolveSettingWithDefaults)({ setting: null == e ? void 0 : e.explicitContentNonFriendDm, isDm: !0 }), explicitContentFriendDm: (0, s.resolveSettingWithDefaults)({ setting: null == e ? void 0 : e.explicitContentFriendDm, isDm: !0, isFriend: !0 }) } } }, 25610: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useShouldRedactExplicitContent: function() { return d }, useShouldRedactExplicitContentForForum: function() { return _ } }); var i = n("399606"), r = n("592125"), s = n("699516"), a = n("594174"), o = n("651530"), l = n("163268"), u = n("294602"); let d = (e, t) => { let n = (0, o.useIsEligibleForExplicitMediaRedaction)(), { explicitContentGuilds: d, explicitContentFriendDm: _, explicitContentNonFriendDm: c } = (0, u.useExplicitContentSettingOrDefault)(), E = (0, i.useStateFromStores)([s.default], () => s.default.getFriendIDs().includes(t)), I = (0, i.useStateFromStores)([a.default], () => a.default.getCurrentUser()), T = (0, i.useStateFromStores)([r.default], () => { let t = r.default.getChannel(e); return null != t && t.isPrivate() }); return !!n && null != I && I.id !== t && (T && E ? (0, l.getShouldObscureForSetting)(_) : T ? (0, l.getShouldObscureForSetting)(c) : (0, l.getShouldObscureForSetting)(d)) }, _ = () => { let e = (0, o.useIsEligibleForExplicitMediaRedaction)(), { explicitContentGuilds: t } = (0, u.useExplicitContentSettingOrDefault)(), n = (0, i.useStateFromStores)([a.default], () => a.default.getCurrentUser()); return !!e && null != n && (0, l.getShouldObscureForSetting)(t) } }, 957825: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { CHAT_INPUT_BUTTON_CLASSNAME: function() { return o }, ExpressionPickerViewType: function() { return i }, ExpressionPickerWidths: function() { return r }, MIN_EXPRESSION_PICKER_WIDTH: function() { return l } }), (s = i || (i = {})).EMOJI = "emoji", s.GIF = "gif", s.STICKER = "sticker", s.SOUNDBOARD = "soundboard"; let o = "expression-picker-chat-input-button", l = 498; (a = r || (r = {})).MIN = "min", a.MAX = "max" }, 806966: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ApplicationCommandDiscoveryPickerStore: function() { return d }, EmojiPickerStore: function() { return o }, INACTIVE_CATEGORY_INDEX: function() { return r }, SoundboardPickerStore: function() { return u }, StickerPickerStore: function() { return l } }); var i = n("652874"); let r = -1, s = Object.freeze({ inspectedExpressionPosition: { rowIndex: 0, columnIndex: 0 }, activeCategoryIndex: 0, searchPlaceholder: null }); function a() { let e = (0, i.default)(e => s); return { useStore: e, getState: () => e.getState(), setInspectedExpressionPosition: (t, n, i) => { e.setState({ inspectedExpressionPosition: { rowIndex: n, columnIndex: t, source: i } }) }, setActiveCategoryIndex: t => { e.setState({ activeCategoryIndex: t }) }, setSearchPlaceholder: t => { e.setState({ searchPlaceholder: t }) }, resetStoreState: () => { e.setState(s) } } } let o = a(), l = a(), u = a(), d = a() }, 28546: function(e, t, n) { "use strict"; n.r(t), n.d(t, { closeExpressionPicker: function() { return _ }, openExpressionPicker: function() { return d }, setExpressionPickerView: function() { return I }, setSearchQuery: function() { return T }, toggleExpressionPicker: function() { return E }, toggleMultiExpressionPicker: function() { return c }, useExpressionPickerStore: function() { return f } }); var i = n("97613"), r = n.n(i), s = n("652874"), a = n("868888"), o = n("957825"); let l = Object.freeze({ activeView: null, lastActiveView: null, activeViewType: null, searchQuery: "", isSearchSuggestion: !1, pickerId: function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "uid_"; return r()(e) }() }), u = (0, s.default)((0, a.persist)((e, t) => l, { name: "expression-picker-last-active-view", partialize: e => ({ lastActiveView: e.lastActiveView }) })), d = (e, t) => { u.setState({ activeView: e, activeViewType: t, lastActiveView: u.getState().activeView }) }, _ = e => { let t = u.getState(); if (void 0 === e || e === t.activeViewType) null !== t.activeView && u.setState({ activeView: null, activeViewType: null, lastActiveView: t.activeView }) }, c = e => { let t = u.getState(); if (null == t.activeView) { var n; d(null !== (n = t.lastActiveView) && void 0 !== n ? n : o.ExpressionPickerViewType.EMOJI, e) } else _() }, E = (e, t) => { u.getState().activeView === e ? _() : d(e, t) }, I = e => { u.setState({ activeView: e, lastActiveView: u.getState().activeView }) }, T = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; u.setState({ searchQuery: e, isSearchSuggestion: t }) }, f = u }, 691251: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { InspectedExpressionChangeSource: function() { return i }, PickerContextMenuDataTypes: function() { return r } }), (s = i || (i = {}))[s.GRID_NAVIGATOR_EVENT = 0] = "GRID_NAVIGATOR_EVENT", s[s.MOUSE_EVENT = 1] = "MOUSE_EVENT", (a = r || (r = {})).EMOJI = "emoji", a.STICKER = "sticker", a.PACK_ICON = "pack-icon" }, 805680: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("873546"), d = n("374470"), _ = n("442837"), c = n("952265"), E = n("481060"), I = n("153867"), T = n("410575"), f = n("347469"), S = n("40851"), h = n("367907"), A = n("907040"), m = n("455708"), N = n("315744"), p = n("603074"), O = n("453070"), C = n("926491"), R = n("457040"), g = n("740492"), L = n("153850"), v = n("585483"), D = n("5967"), M = n("28546"), y = n("957825"), P = n("981631"), U = n("149203"), b = n("185923"), G = n("611480"), w = n("689938"), k = n("712337"); let B = y.MIN_EXPRESSION_PICKER_WIDTH + U.EmojiSize.MEDIUM, V = r.memo(function(e) { let { isActive: t, className: n, viewType: r, autoFocus: s = !1, "aria-controls": o, ...l } = e; return (0, i.jsx)(E.Button, { role: "tab", autoFocus: s, "aria-controls": t ? o : void 0, ...l, onClick: () => { h.default.trackWithMetadata(P.AnalyticEvents.EXPRESSION_PICKER_TAB_CLICKED, { tab: r, badged: !1 }), (0, M.setExpressionPickerView)(r) }, "aria-current": t ? "page" : void 0, className: a()(n, k.navButton, k.navItem, { [k.navButtonActive]: t }), look: E.Button.Looks.BLANK, size: E.Button.Sizes.NONE }) }), x = e => { let { positionContainerRef: t, drawerRef: n, orientation: i } = e, s = (0, _.useStateFromStores)([g.default], () => g.default.expressionPickerWidth), [a, o] = r.useState(window.innerWidth), [u, d] = r.useState(null != s ? s : y.ExpressionPickerWidths.MIN), c = r.useMemo(() => { switch (u) { case y.ExpressionPickerWidths.MIN: return y.MIN_EXPRESSION_PICKER_WIDTH; case y.ExpressionPickerWidths.MAX: return null; default: return u } }, [u]), E = r.useCallback(e => { let t = e >= a ? y.ExpressionPickerWidths.MAX : e <= y.MIN_EXPRESSION_PICKER_WIDTH ? y.ExpressionPickerWidths.MIN : e; null == t && null != n.current && (n.current.style.width = ""), I.default.updatedUnsyncedSettings({ expressionPickerWidth: t }), d(t) }, [n, a]), T = (0, f.default)({ initialElementDimension: c, maxDimension: a, minDimension: y.MIN_EXPRESSION_PICKER_WIDTH, resizableDomNodeRef: n, onElementResize: E, orientation: i }); return r.useEffect(() => { let e = l().debounce(() => { null != t.current && o(t.current.offsetWidth) }, 500); return window.addEventListener("resize", e), () => { window.removeEventListener("resize", e) } }, [t]), r.useLayoutEffect(() => { null != t.current && o(t.current.offsetWidth) }, [t]), { drawerWidth: c, handleDrawerResizeHandleMouseDown: r.useCallback(e => { e.stopPropagation(), null != t.current && o(t.current.offsetWidth), T(e) }, [t, T]) } }; t.default = r.memo(function(e) { var t, n, s; let { positionTargetRef: o, hideGifFavorites: l, includeCreateEmojiButton: I, onSelectGIF: g, onSelectEmoji: F, onSelectSticker: H, onSelectSound: Y, channel: j, type: W, position: K, align: z, positionLayerClassName: Z, closeOnModalOuterClick: X = !1, parentModalKey: Q } = e, q = r.useRef(null), J = r.useRef(!1), $ = r.useRef(), ee = r.useRef(null), { drawerWidth: et, handleDrawerResizeHandleMouseDown: en } = x({ positionContainerRef: q, drawerRef: ee, orientation: "left" === z ? f.ResizeOrientation.HORIZONTAL_RIGHT : f.ResizeOrientation.HORIZONTAL_LEFT }), ei = (0, M.useExpressionPickerStore)(e => e.activeView), er = (0, O.useHasSendableSticker)(j), { renderWindow: es, windowDispatch: ea } = r.useContext(S.default), eo = (0, _.useStateFromStores)([C.default], () => !C.default.hasLoadedStickerPacks), el = (0, N.useSoundmojiExperiment)("expression_picker"), eu = null != Q, ed = (0, c.useIsModalAtTop)(null != Q ? Q : ""), e_ = r.useCallback(e => { var t; if (!eu && (0, c.hasAnyModalOpen)() || eu && !(ed && X)) return; let { target: n } = e; if ((0, d.isElement)(n) && null != n.closest("." + y.CHAT_INPUT_BUTTON_CLASSNAME)) return; for (; (0, d.isElement)(n);) { if (n === ee.current || "true" === n.getAttribute("data-menu-item") || "true" === n.getAttribute("data-premium-tutorial-expression-picker-tooltip") || "true" === n.getAttribute("data-premium-tutorial-persistent-coachmark-emoji-step")) return; n = n.parentNode }(0, M.closeExpressionPicker)(); let i = null === (t = (0, D.eventOwnerDocument)(e)) || void 0 === t ? void 0 : t.activeElement; (null == i || "BODY" === i.tagName) && v.ComponentDispatch.dispatchToLastSubscribed(P.ComponentActions.TEXTAREA_FOCUS) }, [X, ed, eu]), ec = r.useCallback(() => { (0, M.closeExpressionPicker)() }, []); r.useLayoutEffect(() => { let e = () => { ei === y.ExpressionPickerViewType.GIF && (0, M.closeExpressionPicker)() }; return es.addEventListener("mousedown", e_), es.addEventListener("contextmenu", e_), ea.subscribe(P.ComponentActions.POPOUT_CLOSE, ec), v.ComponentDispatch.subscribe(P.ComponentActions.CLOSE_GIF_PICKER, e), () => { es.removeEventListener("mousedown", e_), es.removeEventListener("contextmenu", e_), ea.unsubscribe(P.ComponentActions.POPOUT_CLOSE, ec), v.ComponentDispatch.unsubscribe(P.ComponentActions.CLOSE_GIF_PICKER, e) } }, [ei, ec, e_, es, ea]), (0, E.useFocusLock)(q), r.useEffect(() => { (0, M.setSearchQuery)("") }, []), r.useEffect(() => { (!eu && (0, c.hasAnyModalOpen)() || eu && !ed) && (0, M.closeExpressionPicker)() }, [ed, eu]), r.useEffect(() => { if (null != ee.current && !J.current) { var e, t, n, i; ei === y.ExpressionPickerViewType.EMOJI ? (null == $ ? void 0 : null === (e = $.current) || void 0 === e ? void 0 : e.onPickerOpen) != null && (null == $ || null === (t = $.current) || void 0 === t || t.onPickerOpen(), J.current = !0) : ei === y.ExpressionPickerViewType.STICKER ? (null == $ ? void 0 : null === (n = $.current) || void 0 === n ? void 0 : n.onPickerOpen) != null && !eo && (null == $ || null === (i = $.current) || void 0 === i || i.onPickerOpen(), J.current = !0) : (h.default.trackWithMetadata(P.AnalyticEvents.EXPRESSION_PICKER_OPENED, { width: ee.current.offsetWidth, tab: ei, badged: !1 }), J.current = !0) } }); let eE = (null === (t = W.gifs) || void 0 === t ? void 0 : t.allowSending) && !u.isMobile && null != g, eI = (null === (n = W.stickers) || void 0 === n ? void 0 : n.allowSending) && null != H, eT = !(null === (s = W.expressionPicker) || void 0 === s ? void 0 : s.onlyEmojis) && (eE || eI), ef = "left" === z ? "right" : "left", eS = null != Z ? Z : "left" === z ? k.positionLayerDefaultAlignLeft : k.positionLayerDefaultAlignRight; return (0, i.jsx)(T.default, { section: P.AnalyticsSections.EXPRESSION_PICKER, children: (0, i.jsx)(L.AppReferencePositionLayer, { className: a()(k.positionLayer, eS), targetRef: o, position: K, align: z, spacing: 8, autoInvert: !0, children: e => { let { isPositioned: t } = e; return (0, i.jsx)("section", { className: a()(k.positionContainer, { [k.positionContainerOnlyEmoji]: !eT }), ref: q, role: "dialog", "aria-label": w.default.Messages.EXPRESSION_PICKER, children: t ? (0, i.jsxs)("div", { className: k.drawerSizingWrapper, style: { width: null == et ? void 0 : et, [z]: 0 }, ref: ee, children: [(0, i.jsx)("div", { className: k.resizeHandle, onMouseDown: en, style: { [ef]: -2 } }), (0, i.jsxs)("div", { className: k.contentWrapper, children: [eT ? (0, i.jsx)("nav", { className: k.nav, children: (0, i.jsxs)("div", { className: k.navList, role: "tablist", "aria-label": w.default.Messages.EXPRESSION_PICKER_CATEGORIES_A11Y_LABEL, children: [eE ? (0, i.jsx)(V, { id: U.GIF_PICKER_TAB_ID, "aria-controls": U.GIF_PICKER_TAB_PANEL_ID, "aria-selected": ei === y.ExpressionPickerViewType.GIF, isActive: ei === y.ExpressionPickerViewType.GIF, viewType: y.ExpressionPickerViewType.GIF, children: w.default.Messages.EXPRESSION_PICKER_GIF }) : null, eI ? (0, i.jsx)(V, { id: G.STICKER_PICKER_TAB_ID, "aria-controls": G.STICKER_PICKER_TAB_PANEL_ID, "aria-selected": ei === y.ExpressionPickerViewType.STICKER, isActive: ei === y.ExpressionPickerViewType.STICKER, autoFocus: !er, viewType: y.ExpressionPickerViewType.STICKER, children: (0, i.jsx)("div", { className: k.stickersNavItem, children: w.default.Messages.EXPRESSION_PICKER_STICKER }) }) : null, (0, i.jsx)(V, { id: U.EMOJI_PICKER_TAB_ID, "aria-controls": U.EMOJI_PICKER_TAB_PANEL_ID, "aria-selected": ei === y.ExpressionPickerViewType.EMOJI, isActive: ei === y.ExpressionPickerViewType.EMOJI, viewType: y.ExpressionPickerViewType.EMOJI, children: w.default.Messages.EXPRESSION_PICKER_EMOJI }), el && null != Y && (0, i.jsx)(V, { id: U.SOUNDBOARD_PICKER_TAB_ID, "aria-controls": U.SOUNDBOARD_PICKER_TAB_PANEL_ID, "aria-selected": ei === y.ExpressionPickerViewType.SOUNDBOARD, isActive: ei === y.ExpressionPickerViewType.SOUNDBOARD, viewType: y.ExpressionPickerViewType.SOUNDBOARD, children: "Sounds" })] }) }) : null, ei === y.ExpressionPickerViewType.STICKER && eI ? (0, i.jsx)(R.default, { isLoading: eo, channel: j, containerWidth: et, onSelectSticker: H, closePopout: ec, ref: e => { $.current = e } }) : null, ei === y.ExpressionPickerViewType.GIF && eE ? (0, i.jsx)(m.default, { onSelectGIF: g, hideFavorites: l, persistSearch: !0 }) : null, ei === y.ExpressionPickerViewType.EMOJI ? (0, i.jsx)(A.default, { hasTabWrapper: !0, persistSearch: !0, channel: j, containerWidth: et, includeCreateEmojiButton: I, emojiSize: null != et && et < B ? U.EmojiSize.MEDIUM : U.EmojiSize.LARGE, pickerIntention: b.EmojiIntention.CHAT, closePopout: ec, onSelectEmoji: F, ref: e => { $.current = e } }) : null, ei === y.ExpressionPickerViewType.SOUNDBOARD ? (0, i.jsx)("div", { className: k.soundboardContainer, children: (0, i.jsx)(p.default, { guildId: j.guild_id, channel: j, containerWidth: et, onClose: ec, onSelect: Y, analyticsSource: "expression-picker", autoWidth: !0 }) }) : null] })] }) : null }) } }) }) }) }, 254494: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("695464"), l = n("28546"), u = n("981631"), d = n("425565"); let _ = e => { let { activeIndex: t, categoryListRef: n, getScrollOffsetForIndex: i } = e, s = r.useRef(u.UNREACHABLE_REQUEST_ANIMATION_FRAME_ID), a = r.useRef(t); return r.useEffect(() => { null != t && t !== a.current && (s.current !== u.UNREACHABLE_REQUEST_ANIMATION_FRAME_ID && window.cancelAnimationFrame(s.current), s.current = window.requestAnimationFrame(() => { var e; if (null == n.current) return; let r = t > (null !== (e = a.current) && void 0 !== e ? e : -1), o = null != i ? i(t, r) : 0; n.current.scrollRowIntoView(t, { animate: !0, offset: o }), s.current = u.UNREACHABLE_REQUEST_ANIMATION_FRAME_ID, a.current = t })) }, [t, n, i]), { categoryListRef: n } }; t.default = function(e) { let { categoryListRef: t, expressionsListRef: n, categories: s, store: u, children: c, className: E, listPadding: I, rowCount: T, getScrollOffsetForIndex: f, categoryHeight: S, onScroll: h, renderCategoryListItem: A, rowCountBySection: m, renderSection: N } = e, p = u.useStore(e => e.activeCategoryIndex); _({ activeIndex: p, categoryListRef: t, getScrollOffsetForIndex: f }); let O = r.useCallback(e => { let { searchQuery: t } = l.useExpressionPickerStore.getState(); if (u.setActiveCategoryIndex(e), "" !== t)(0, l.setSearchQuery)(""); else { var i; null === (i = n.current) || void 0 === i || i.scrollToSectionTop(e) } }, [n, u]), C = r.useCallback(e => A(s[e], e, () => O(e), p === e), [p, s, O, A]), R = r.useMemo(() => "function" == typeof S ? e => S(s[e], e) : S, [s, S]); return (0, i.jsxs)("div", { className: a()(d.wrapper, E), children: [(0, i.jsx)(o.default, { listPadding: I, onScroll: h, ref: t, renderRow: C, rowCount: T, rowHeight: R, hideScrollbar: !0, rowCountBySection: m, renderSection: N }), null == c ? void 0 : c(O)] }) } }, 468954: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("28546"), a = n("98528"), o = n("429155"), l = n("810462"), u = n("380800"); function d(e) { let { categories: t, collapsedCategories: n, containerWidth: d, store: _, onSelectItem: c, onSearchExpressions: E, hasSearchResults: I, defaultSearchPlaceholder: T, emptySearchPlaceholder: f, renderEmptyState: S, renderRow: h, renderSection: A, renderSectionHeader: m, renderSectionFooter: N, renderInspector: p, renderEmptySearchState: O, renderCategoryList: C, renderHeaderAccessories: R, rowHeight: g, sectionHeaderHeight: L, sectionFooterHeight: v, itemNodeWidth: D, listPaddingRight: M, itemNodeMargin: y, listPadding: P, gridNavigatorId: U, gridNotice: b, renderHeader: G } = e, w = r.useRef(null), k = r.useRef(null), B = r.useRef(null), V = 0 === t.length, x = (0, s.useExpressionPickerStore)(e => e.searchQuery), F = _.useStore(e => e.inspectedExpressionPosition), H = (0, a.useExpressionPickerGridWidth)({ gridWrapperRef: w, containerWidth: d, showingEmptyState: V }), { expressionsGrid: Y, rowCount: j, rowCountBySection: W, columnCounts: K, gutterWidth: z } = (0, a.useExpressionGrid)({ categories: t, collapsedCategories: n, gridWidth: H, listPaddingRight: M, itemNodeWidth: D, itemNodeMargin: y }), { getItemProps: Z, getRowProps: X, gridContainerProps: Q, handleGridContainerKeyDown: q, isUsingKeyboardNavigation: J } = (0, a.useKeyboardNavigation)({ columnCounts: K, expressionsListRef: k, expressionsGrid: Y, onSelectItem: c, store: _, gridNavigatorId: U }), $ = r.useCallback(e => h(Y[e], X(e), { isUsingKeyboardNavigation: J.current, gutterWidth: z, rowIndex: e }, t => Z(e, t), t => _.setInspectedExpressionPosition(t, e)), [Y, Z, X, z, J, h, _]), ee = r.useCallback(e => null == A ? void 0 : A(t[e]), [t, A]), et = r.useCallback(e => null == m ? void 0 : m(t[e], e), [t, m]), en = r.useCallback(e => null == N ? void 0 : N(t[e]), [t, N]), ei = r.useCallback(() => { var e; return null == p ? void 0 : p(null == Y ? void 0 : null === (e = Y[F.rowIndex]) || void 0 === e ? void 0 : e[F.columnIndex]) }, [Y, F.columnIndex, F.rowIndex, p]); r.useEffect(() => { E(x) }, [E, x]), r.useEffect(() => _.resetStoreState, [_.resetStoreState]), r.useLayoutEffect(() => { var e; null === (e = B.current) || void 0 === e || e.focus() }, []); let er = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.default, { ref: B, store: _, hasSendableExpressions: !0, onKeyDown: q, expressionsListRef: k, gridNavigatorId: U, defaultSearchPlaceholder: T, emptySearchPlaceholder: f }), null == R ? void 0 : R()] }); return (0, i.jsxs)(i.Fragment, { children: [null != G ? G(er) : (0, i.jsxs)("div", { className: u.header, children: [" ", er, " "] }), V && null != S ? S(u.emptyState) : (0, i.jsxs)(i.Fragment, { children: [C(k), null != b && (0, i.jsx)("div", { className: u.gridNoticeWrapper, children: b }), (0, i.jsx)("div", { ref: w, className: u.listWrapper, id: U, ...Q, children: null != H ? (0, i.jsx)(o.default, { ref: k, store: _, hasSearchResults: I, listPadding: P, renderRow: $, renderSection: null != A ? ee : void 0, renderSectionHeader: null != m ? et : void 0, renderSectionFooter: null != N ? en : void 0, renderInspector: null != p ? ei : void 0, renderEmptySearchState: O, rowCount: j, rowCountBySection: W, rowHeight: g, sectionHeaderHeight: L, sectionFooterHeight: v }) : null })] })] }) } }, 98528: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useExpressionGrid: function() { return h }, useExpressionPickerGridKeyboardNavigation: function() { return S }, useExpressionPickerGridWidth: function() { return E }, useKeyboardNavigation: function() { return A }, useShowUpsellForScrollPosition: function() { return T }, useSynchronizedActiveCategoryIndexForScrollPosition: function() { return f }, useSynchronizedScrollPositionForActiveCategoryIndex: function() { return I } }), n("47120"), n("653041"); var i = n("470079"), r = n("392711"), s = n.n(r), a = n("739940"), o = n("611144"), l = n("468194"), u = n("477690"), d = n("691251"), _ = n("981631"); let c = (0, l.cssValueToNumber)(u.default.EMOJI_PICKER_CONSTANTS_EMOJI_LIST_PADDING_LEFT), E = e => { let { gridWrapperRef: t, containerWidth: n, showingEmptyState: r, listPaddingLeft: a = c, listScrollbarWidth: o = 8 } = e, [l, u] = i.useState(void 0), d = i.useCallback(() => { if (null == t.current) return null; u(t.current.offsetWidth - a - o) }, [t, a, o]); return i.useLayoutEffect(() => { d() }, [n, d, r]), i.useEffect(() => { let e = s().debounce(d, 250); return window.addEventListener("resize", e), () => window.removeEventListener("resize", e) }, [d]), l }, I = e => { let { activeCategoryIndex: t, listRef: n, searchQuery: r } = e, s = i.useRef(r), a = i.useRef(!0); i.useLayoutEffect(() => { if ("" === r && "" !== s.current) { var e; null === (e = n.current) || void 0 === e || e.scrollToSectionTop(t) } s.current = r }, [r, t, n]), i.useLayoutEffect(() => { if (a.current) { var e; null === (e = n.current) || void 0 === e || e.scrollToSectionTop(t), a.current = !1 } }, [t, n]), i.useEffect(() => { s.current = r }, [r]) }, T = e => { let { listRef: t, searchQuery: n, setShowUpsell: r, setUpsellGlowOpacity: s, emojiSectionDescriptors: a } = e, o = i.useCallback(e => { if ("" !== n) { s(0); return } if (null == t.current) return; let i = a.findIndex(e => e.isNitroLocked); if (-1 === i) { s(0); return } let r = t.current.getSectionDescriptors(); if (null == r || 0 === r.length || r.length !== a.length) return; let o = r[i], l = e + t.current.getListDimensions().height; s(Math.min(Math.max((o.offset.top - (l - 250)) / 250, 0), 1)) }, [n, t, a, s]), l = i.useCallback(e => { if ("" !== n) { r(!1); return } if (null == t.current) return; let i = t.current.getSectionDescriptors(); if (null == i || 0 === i.length || i.length !== a.length) return; let s = t.current.getListDimensions().height, o = e + .7 * s, l = e + .85 * s, u = !1, d = !1; a.forEach((e, t) => { if (!e.isNitroLocked) return; let n = i[t]; n.offset.top <= l && n.offset.bottom >= l && (d = !0), n.offset.top <= o && n.offset.bottom >= o && (u = !0) }), r(d && u) }, [n, t, a, r]); return i.useCallback(e => { l(e), o(e) }, [l, o]) }, f = e => { let { activeCategoryIndex: t, listRef: n, isScrolling: r, searchQuery: a, scrollOffset: o = 0, onActiveCategoryIndexChange: l, disableForSearch: u = !0 } = e, d = i.useRef(_.UNREACHABLE_REQUEST_ANIMATION_FRAME_ID), c = i.useMemo(() => s().debounce(() => { r.current = !1 }, 250), [r]), E = i.useMemo(() => s().debounce(e => { ("" === a || !u) && (window.cancelAnimationFrame(d.current), d.current = window.requestAnimationFrame(() => { var i; let r = null === (i = n.current) || void 0 === i ? void 0 : i.getSectionDescriptors(); if (null == r) return; let s = r.findIndex((t, n) => { let i = r[n + 1], s = e + o >= t.offset.top, a = null != i && e + o < i.offset.top; return null != i && !s && !a || s && a || s && null == i }), a = -1 === s ? 0 : s; t !== a && l(a) })) }, 0), [a, n, t, o, l, u]); return i.useCallback(e => { r.current = !0, c(), E(e) }, [r, c, E]) }, S = e => { let { columnCounts: t, gridNavigatorId: n, itemGrid: r, itemList: s, onGridNavigatorItemSelect: o, onGridNavigatorPositionChange: l } = e, u = i.useRef(!1), d = i.useCallback((e, t) => { let n = r[t]; if (null != n) return n[e] }, [r]), _ = i.useCallback(e => { let { focusedX: t, focusedY: n } = e; u.current = !0; let i = d(t, n); if (null == i) return; let { visibleRowIndex: r, columnIndex: a } = i; l(a, r), null != s.current && s.current.scrollRowIntoView(n) }, [d, s, l]), c = i.useCallback((e, t, n) => { switch (n.type) { case a.ActionType.NAVIGATE_UP: case a.ActionType.NAVIGATE_DOWN: case a.ActionType.NAVIGATE_RIGHT: case a.ActionType.NAVIGATE_LEFT: case a.ActionType.NAVIGATE_INLINE_START: case a.ActionType.NAVIGATE_INLINE_END: case a.ActionType.NAVIGATE_START: case a.ActionType.NAVIGATE_END: case a.ActionType.NAVIGATE_CROSSLINE_START: case a.ActionType.NAVIGATE_CROSSLINE_END: _(t) } }, [_]), E = i.useCallback((e, t, n) => { let i = d(e, t); null != i && o(i, n) }, [d, o]), { dispatch: I, getItemProps: T, getRowProps: f, getContainerProps: S } = (0, a.useGridNavigator)({ navId: n, columnCounts: t, onDispatch: c, onSelect: E, autoFocusElement: !1, useVirtualFocus: !0 }), { gridContainerProps: h, handleGridContainerKeyDown: A } = i.useMemo(() => { let e = S(); return { gridContainerProps: e, handleGridContainerKeyDown: e.onKeyDown } }, [S]); return i.useEffect(() => { let e = () => { u.current = !1 }; return window.addEventListener("mousemove", e), () => window.removeEventListener("mousemove", e) }, []), { gridDispatch: I, getItemProps: T, getRowProps: f, gridContainerProps: h, handleGridContainerKeyDown: A, isUsingKeyboardNavigation: u } }; function h(e) { let { categories: t, collapsedCategories: n, gridWidth: r = 0, listPaddingRight: s = 0, itemNodeWidth: a, itemNodeMargin: o = 0 } = e; return i.useMemo(() => { let e = Math.max(1, Math.floor((r - s + o) / (a + o))), i = Math.floor(Math.max(o, (r - s - a * e) / (e - 1))), l = [], u = [], d = [], _ = 0, c = 0, E = 0; if (0 !== r) { let i = function(t, n) { let i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = Math.ceil(t.length / e); u[c] = i ? 0 : r; for (let s = 0; s < r; s++) { let r = s * e, a = r + e, o = t.slice(r, a).map((e, t) => ({ item: e, gridSectionIndex: c, rowIndex: _, columnIndex: t, visibleRowIndex: E, category: n })); !i && (E++, d.push(o), l.push(o.length)), _++ } c++ }; for (let e of t) if (e.items.length > 0) { var I; i(e.items, e.categoryInfo.type, null !== (I = null == n ? void 0 : n.has("".concat(e.key))) && void 0 !== I && I) } } return { expressionsGrid: d, rowCount: _, rowCountBySection: u, columnCounts: l, gutterWidth: i } }, [t, n, r, o, a, s]) } function A(e) { let { columnCounts: t, expressionsGrid: n, expressionsListRef: r, store: s, gridNavigatorId: a, onSelectItem: l } = e, { gridDispatch: u, getItemProps: _, getRowProps: c, gridContainerProps: E, handleGridContainerKeyDown: I, isUsingKeyboardNavigation: T } = S({ columnCounts: t, gridNavigatorId: a, itemGrid: n, itemList: r, onGridNavigatorItemSelect: l, onGridNavigatorPositionChange: s.setInspectedExpressionPosition }); return i.useEffect(() => s.useStore.subscribe(e => { if (null == e) return; let { columnIndex: t, rowIndex: n, source: i } = e; i !== d.InspectedExpressionChangeSource.GRID_NAVIGATOR_EVENT && u({ type: o.GridActionType.SET_FOCUSED_POSITION, x: t, y: n }) }, e => e.inspectedExpressionPosition), [u, s]), { getItemProps: _, getRowProps: c, gridContainerProps: E, handleGridContainerKeyDown: I, isUsingKeyboardNavigation: T } } }, 65029: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("28531"), l = n("819758"), u = n("898140"), d = n("149203"), _ = n("689938"), c = n("181710"); let E = e => { let { emojiSubCategory: t } = e; return (0, i.jsxs)("div", { className: s()(c.badgeLabel, t === d.EmojiSubCategory.TOP_GUILD_EMOJI ? c.topGuildEmojiBadge : c.newlyAddedBadge), children: [t === d.EmojiSubCategory.TOP_GUILD_EMOJI ? (0, i.jsx)(o.default, { foreground: c.newlyAddedBadgeIcon }) : (0, i.jsx)(l.default, { foreground: c.newlyAddedBadgeIcon }), (0, i.jsx)(a.Text, { variant: "text-sm/semibold", color: "always-white", children: t === d.EmojiSubCategory.TOP_GUILD_EMOJI ? _.default.Messages.TOP_GUILD_EMOJI_BADGE : _.default.Messages.NEWLY_ADDED_GUILD_EMOJI_BADGE })] }) }; t.default = e => { let { className: t, graphicPrimary: n, graphicSecondary: r, titlePrimary: o, titleSecondary: l, isFavorite: I = !1, emojiSubCategory: T = d.EmojiSubCategory.NONE } = e; return (0, i.jsxs)("div", { className: s()(c.inspector, t), children: [(0, i.jsx)("div", { className: c.graphicPrimary, "aria-hidden": !0, children: n }), (0, i.jsxs)("div", { className: c.textWrapper, children: [(0, i.jsxs)(a.Text, { className: c.titlePrimary, variant: "text-md/semibold", children: [I ? (0, i.jsx)(u.default, { "aria-label": I ? _.default.Messages.EMOJI_IS_FAVORITE_ARIA_LABEL.format({ names: o }) : void 0, width: 15, height: 15, className: c.favorite }) : null, o] }), null != l && (0, i.jsx)(a.Text, { className: c.titleSecondary, variant: "text-xs/normal", children: l })] }), T === d.EmojiSubCategory.NONE ? null != r && (0, i.jsx)("div", { className: c.graphicSecondary, "aria-hidden": !0, children: r }) : (0, i.jsx)(E, { emojiSubCategory: T })] }) } }, 429155: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("695464"), a = n("28546"), o = n("98528"), l = n("889"); let u = r.forwardRef(function(e, t) { let { store: n, hasSearchResults: u, listPadding: d, renderRow: _, renderSection: c, renderSectionHeader: E, renderSectionFooter: I, renderInspector: T, renderEmptySearchState: f, rowCount: S, rowCountBySection: h, rowHeight: A, sectionHeaderHeight: m, sectionFooterHeight: N } = e, p = r.useRef(!1), O = r.useRef(null), C = (0, a.useExpressionPickerStore)(e => e.searchQuery), R = n.useStore(e => e.activeCategoryIndex), g = (0, o.useSynchronizedActiveCategoryIndexForScrollPosition)({ activeCategoryIndex: R, isScrolling: p, listRef: O, onActiveCategoryIndexChange: n.setActiveCategoryIndex, scrollOffset: 20, searchQuery: C }); return (0, o.useSynchronizedScrollPositionForActiveCategoryIndex)({ searchQuery: C, activeCategoryIndex: R, listRef: O }), r.useImperativeHandle(t, () => ({ scrollTo: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = O.current) || void 0 === e ? void 0 : e.scrollTo(...n) }, getRowDescriptors: () => { var e, t; return null !== (t = null === (e = O.current) || void 0 === e ? void 0 : e.getRowDescriptors()) && void 0 !== t ? t : [] }, getSectionDescriptors: () => { var e, t; return null !== (t = null === (e = O.current) || void 0 === e ? void 0 : e.getSectionDescriptors()) && void 0 !== t ? t : [] }, scrollToSectionTop: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = O.current) || void 0 === e ? void 0 : e.scrollToSectionTop(...n) }, scrollRowIntoView: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = O.current) || void 0 === e ? void 0 : e.scrollRowIntoView(...n) }, getScrollerNode: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = O.current) || void 0 === e ? void 0 : e.getScrollerNode(...n) }, scrollIntoViewNode: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = O.current) || void 0 === e ? void 0 : e.scrollIntoViewNode(...n) }, getListDimensions: function() { for (var e, t, n = arguments.length, i = Array(n), r = 0; r < n; r++) i[r] = arguments[r]; return null !== (t = null === (e = O.current) || void 0 === e ? void 0 : e.getListDimensions(...i)) && void 0 !== t ? t : { height: -1, totalHeight: -1 } } }), []), (0, i.jsxs)("div", { className: l.wrapper, children: [C.length > 0 && !u && null != f ? f() : (0, i.jsx)(s.default, { role: "none presentation", listPadding: d, onScroll: g, renderRow: _, renderSection: c, renderSectionHeader: E, renderSectionFooter: I, rowCount: S, rowCountBySection: h, rowHeight: A, sectionHeaderHeight: m, sectionFooterHeight: N, stickyHeaders: !0, ref: O }), null == T ? void 0 : T()] }) }); t.default = u }, 334920: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("986341"); t.default = e => { let { src: t, alt: n, size: s, "aria-label": l, className: u } = e, d = r.useRef(null), _ = r.useRef(!1), c = _.current ? o.image : o.imageLoading; return (0, i.jsx)("img", { className: a()(c, u), alt: n, src: t, ref: d, "aria-label": l, style: { backgroundSize: s, height: s, width: s }, onLoad: _.current ? void 0 : () => { window.requestAnimationFrame(() => { null != d.current && (_.current = !0, d.current.classList.remove(o.imageLoading), d.current.classList.add(o.image)) }) } }) } }, 551058: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("605403"), u = n("316186"); let d = r.memo(function(e) { let { children: t, className: n, icon: r, isCollapsed: s, onClick: d, "aria-label": _ } = e; return (0, i.jsx)("div", { className: a()(u.wrapper, n), children: (0, i.jsxs)(o.Clickable, { onClick: d, onKeyDown: e => e.stopPropagation(), className: a()(u.header, { [u.interactive]: null != s }), "aria-expanded": null != s ? !s : void 0, "aria-label": _, children: [null != r && (0, i.jsx)("div", { "aria-hidden": !0, className: u.headerIcon, children: r }), (0, i.jsx)("span", { className: u.headerLabel, children: t }), null != s ? (0, i.jsx)(l.default, { className: a()(u.headerCollapseIcon, { [u.headerCollapseIconCollapsed]: s }), height: 16, width: 16 }) : null] }) }) }); t.default = d }, 810462: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("143927"), a = n("260866"), o = n("461745"), l = n("806966"), u = n("28546"), d = n("494064"); let _ = r.forwardRef(function(e, t) { let { store: n, hasSendableExpressions: _, onKeyDown: c, gridNavigatorId: E, expressionsListRef: I, defaultSearchPlaceholder: T, emptySearchPlaceholder: f } = e, S = r.useRef(null), [h, A] = (0, u.useExpressionPickerStore)(e => [e.searchQuery, e.isSearchSuggestion], s.default), m = n.useStore(e => e.searchPlaceholder), N = n.useStore(e => e.inspectedExpressionPosition, s.default), p = r.useCallback(e => { var t; n.setActiveCategoryIndex("" === e ? 0 : l.INACTIVE_CATEGORY_INDEX), n.setInspectedExpressionPosition(0, 0), n.setSearchPlaceholder(null), (0, u.setSearchQuery)(e), null === (t = I.current) || void 0 === t || t.scrollTo(0) }, [I, n]), O = r.useCallback(() => { (0, u.setSearchQuery)("") }, []); return r.useImperativeHandle(t, () => ({ focus: () => { var e; return null === (e = S.current) || void 0 === e ? void 0 : e.focus() } })), r.useLayoutEffect(() => { if (A) { var e; null === (e = S.current) || void 0 === e || e.focus() } }, [A]), (0, i.jsx)("div", { className: d.wrapper, children: (0, i.jsx)(o.default, { autoFocus: _, disabled: !_, query: h, ref: S, size: o.default.Sizes.MEDIUM, placeholder: null != m ? m : _ || null == f ? T : f, onClear: O, onKeyDown: c, onQueryChange: p, className: d.__invalid_searchBar, preventEscapePropagation: !1, useKeyboardNavigation: !1, inputProps: { "aria-haspopup": "grid", "aria-controls": E, "aria-expanded": !0, "aria-activedescendant": (0, a.makeGridId)(E, N.columnIndex, N.rowIndex) } }) }) }); t.default = _ }, 549058: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DELAY_BEFORE_SUGGESTIONS_MS: function() { return l }, MAX_NUM_SUGGESTED_STICKERS: function() { return a }, MAX_NUM_USER_INPUT_WORDS: function() { return o }, REQUEST_THROTTLE_DURATION_MS: function() { return d }, SUGGESTIONS_SHOWED_INSTRUMENTATION_RATE_LIMIT_MS: function() { return u } }); var i, r, s = n("70956"); let a = 4, o = 5, l = 350, u = s.default.Millis.MINUTE, d = 2 * s.default.Millis.MINUTE; (i = r || (r = {}))[i.STICKER = 0] = "STICKER" }, 280930: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useStickerSuggestionResults: function() { return S }, useTextChangeHandler: function() { return h } }), n("47120"), n("653041"); var i = n("470079"), r = n("954955"), s = n.n(r), a = n("442837"), o = n("285651"), l = n("268350"), u = n("453070"), d = n("926491"), _ = n("594174"), c = n("483360"), E = n("251625"), I = n("606301"), T = n("549058"); let f = (0, E.promiseThrottle)(l.fetchStickerPacks, T.REQUEST_THROTTLE_DURATION_MS), S = (e, t, n) => { let r = (0, u.useHasSendableSticker)(n), s = (0, a.useStateFromStores)([_.default], () => _.default.getCurrentUser()); return i.useMemo(() => { let i = (0, I.getQueriesFromUserInput)(e); if (t || null == e || "" === e || i.length > T.MAX_NUM_USER_INPUT_WORDS || !r) return []; let a = [], l = [], u = (0, I.removePunctuation)(e), d = u === i[0] ? i : [u, ...i]; c.default.queryStickers(d, !1).forEach(e => { let { sticker: t } = e, i = (0, o.getStickerSendability)(t, s, n), r = { sticker: t, sendability: i }; i === o.StickerSendability.SENDABLE ? a.push(r) : i === o.StickerSendability.SENDABLE_WITH_PREMIUM && l.push(r) }); let _ = []; return a.length > 0 && (_ = a.slice(0, T.MAX_NUM_SUGGESTED_STICKERS), 0 !== l.length && (_.length === T.MAX_NUM_SUGGESTED_STICKERS && _.pop(), _.push(l[0]))), _ }, [e, n, r, t, s]) }, h = e => { let { setTextInputValue: t, setHasDismissed: n, setHasSelection: r, setFocusedSuggestionType: a, delayBeforeSuggestions: o } = e, l = i.useRef(null), u = i.useRef(!1), _ = i.useRef(!1), c = i.useMemo(() => s()(t, null != o ? o : T.DELAY_BEFORE_SUGGESTIONS_MS), [t, o]); return { handleTextChange: async e => { var i; if (null == e || "" === e) c.cancel(), null == t || t(""), null == n || n(!1), null == r || r(!1), null == a || a(null), l.current = null, u.current = !1; else if (!u.current && e.trim() !== (null === (i = l.current) || void 0 === i ? void 0 : i.trim())) { if (l.current = e, (0, I.getQueriesFromUserInput)(e).length > T.MAX_NUM_USER_INPUT_WORDS) { u.current = !0, c.cancel(), t(""); return } if (!0 === _.current) return; !d.default.hasLoadedStickerPacks && (_.current = !0, await f(), _.current = !1), c(l.current) } }, debouncedSetTextInputValue: c } } }, 606301: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getQueriesFromUserInput: function() { return _ }, removePunctuation: function() { return d }, throttledTrackExpressionSuggestionDisplayed: function() { return c } }), n("757143"); var i = n("299608"), r = n.n(i), s = n("626135"), a = n("549058"), o = n("981631"); let l = /(!|\.|;|,|-|—|–|\?|"|')/g, u = /(\n|\t|\s)/g, d = e => e.replace(l, "").replace(u, " "), _ = e => null == e ? [] : d(e).trim().split(" "), c = r()(e => { s.default.track(o.AnalyticEvents.AUTO_SUGGEST_DISPLAYED, { suggestion_trigger: e }) }, a.SUGGESTIONS_SHOWED_INSTRUMENTATION_RATE_LIMIT_MS, { leading: !0, trailing: !1 }) }, 151574: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("924826"), d = n("536895"), _ = n("468194"), c = n("477690"), E = n("481060"), I = n("100527"), T = n("906732"), f = n("570220"), S = n("28546"), h = n("285651"), A = n("926491"), m = n("373228"), N = n("378233"), p = n("419922"), O = n("490095"), C = n("652136"), R = n("695346"), g = n("465670"), L = n("806519"), v = n("626135"), D = n("280930"), M = n("606301"), y = n("981631"), P = n("689938"), U = n("586197"); let b = (0, _.cssValueToNumber)(c.default.EXPRESSION_SUGGESTIONS_CONTAINER_PADDING), G = (0, _.cssValueToNumber)(c.default.EXPRESSION_SUGGESTIONS_STICKER_SUGGESTION_SIZE), w = 2 * G + (0, _.cssValueToNumber)(c.default.EXPRESSION_SUGGESTIONS_STICKER_SUGGESTION_MARGIN) + 2 * b, k = () => Promise.resolve(); function B(e) { let { isFocused: t, isHidden: n, sendability: i, listIndex: r, sticker: a, onMouseOver: o, onSelectSticker: d } = e, { tabIndex: _, ...c } = (0, u.useListItem)("".concat(r)); return (0, s.jsxs)(E.Clickable, { ...c, tabIndex: n ? -1 : _, className: l()(U.suggestedExpression, { [U.suggestedExpressionFocused]: t }), focusProps: { enabled: !1 }, onClick: () => d(a, i), onMouseOver: o, children: [(0, s.jsx)(L.default, { mask: L.default.Masks.STICKER_ROUNDED_RECT, width: G + 4, height: G + 4, className: U.mask, children: (0, s.jsx)("div", { className: U.maskBackground }) }), (0, s.jsx)(p.default, { maskAsset: !0, size: G, sticker: a, className: U.__invalid_sticker }), i !== h.StickerSendability.SENDABLE && (0, s.jsx)(O.default, { size: 14 })] }) }(r = i || (i = {}))[r.STICKER = 0] = "STICKER"; t.default = a.memo(function(e) { var t; let { editorRef: n, channel: i, isEditorFocused: r, onSelectSticker: o, stickerIconVisible: _ = !1, submitButtonVisible: c = !1 } = e, p = a.useContext(f.default), [O, L] = a.useState(null), [b, G] = a.useState(!1), [V, x] = a.useState(null), F = (0, S.useExpressionPickerStore)(e => null != e.activeView), H = a.useRef(null), [Y, j] = a.useState(""), [W, K] = a.useState(""), [z, Z] = a.useState(!1), [X, Q] = a.useState(!1), q = (0, D.useStickerSuggestionResults)(Y, b, i), { analyticsLocations: J } = (0, T.default)(I.default.EXPRESSION_SUGGESTIONS), { handleTextChange: $, debouncedSetTextInputValue: ee } = (0, D.useTextChangeHandler)({ setTextInputValue: j, setHasDismissed: G, setHasSelection: Q, setFocusedSuggestionType: L }); a.useEffect(() => { let e = e => { Z(e) }, t = e => { let t = "" !== e && null != e; if (Q(t), t) { var i; L(null), null === (i = n.current) || void 0 === i || i.focus() } }; return p.addListener("text-changed", $), p.addListener("autocomplete-visibility-change", e), p.addListener("selection-changed", t), () => { p.removeListener("text-changed", $), p.removeListener("autocomplete-visibility-change", e), p.removeListener("selection-changed", t) } }, [$, n, p]), a.useLayoutEffect(() => { null == O && x(null) }, [O]); let [et, en] = a.useState(!1); a.useLayoutEffect(() => { requestAnimationFrame(() => { let e = H.current; en(r || (null == e ? void 0 : e.contains(null == e ? void 0 : e.ownerDocument.activeElement)) === !0) }) }, [r]); let ei = q.length > 0, er = et && !F && !z && !b && !X && ei, { stickersNavigator: es } = function(e) { let { editorRef: t, hasStickerResults: n, shouldRenderSuggestions: i, focusedSuggestionType: r, setFocusedStickerListItem: s, setFocusedSuggestionType: o, setHasDismissed: l, setTextInputValue: _ } = e, c = a.useCallback((e, t) => { s(t) }, [s]), E = (0, u.default)({ id: "expression-suggestions-stickers", isEnabled: !0, scrollToStart: k, scrollToEnd: k, orientation: d.Orientations.HORIZONTAL, setFocus: c, useVirtualFocus: !0 }); return a.useEffect(() => { let e = e => { var s, a; if (i && !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey) { switch (e.key) { case "ArrowUp": e.preventDefault(), null == r && n && (E.focusFirstVisibleItem(), o(0)); break; case "ArrowDown": o(null), null === (s = t.current) || void 0 === s || s.focus(); break; case "Escape": o(null), l(!0), _(""), null === (a = t.current) || void 0 === a || a.focus() } 0 === r && E.containerProps.onKeyDown(e) } }; return window.addEventListener("keydown", e, { capture: !0 }), () => window.removeEventListener("keydown", e, { capture: !0 }) }, [E, i, r, o, n, t, l, s, _]), { stickersNavigator: E } }({ editorRef: n, hasStickerResults: ei, shouldRenderSuggestions: er, focusedSuggestionType: O, setFocusedSuggestionType: L, setHasDismissed: G, setFocusedStickerListItem: x, setTextInputValue: j }), ea = (e, t) => { if (er) { if (v.default.track(y.AnalyticEvents.AUTO_SUGGEST_EXPRESSION_SELECTED, { sticker_id: e.id, suggestion_trigger: W }), t === h.StickerSendability.SENDABLE) G(!0), o(e, m.StickerSelectLocation.EXPRESSION_SUGGESTIONS), ee.cancel(), j(""); else if ((0, N.isStandardSticker)(e)) { let t = A.default.getStickerPack(e.pack_id); null != t && (0, C.default)({ stickerPack: t, analyticsLocations: J }) } p.emit("sticker-suggestions-hidden") } }, eo = a.useRef([]), el = a.useRef(!1); a.useEffect(() => { er && (eo.current = q), er !== el.current && (p.emit(er ? "sticker-suggestions-shown" : "sticker-suggestions-hidden"), er && ((0, M.throttledTrackExpressionSuggestionDisplayed)(Y), K(Y))), el.current = er }, [p, er, q, Y]); let eu = !er, ed = er ? q : eo.current; return (0, s.jsx)(T.AnalyticsLocationProvider, { value: J, children: (0, s.jsxs)(E.Clickable, { tabIndex: eu ? -1 : 0, "aria-hidden": eu, className: l()(U.container, { [U.hidden]: eu, [U.submitButtonOffset]: c, [U.stickerIconOffset]: _ }), innerRef: H, style: { minWidth: w }, onClick: () => { var e; return null === (e = n.current) || void 0 === e ? void 0 : e.focus() }, children: [(0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)(u.ListNavigatorProvider, { navigator: es, children: (0, s.jsx)(u.ListNavigatorContainer, { children: e => { let { ref: t, tabIndex: n, ...i } = e; return (0, s.jsx)("div", { className: U.stickerResults, ref: e => { t.current = e }, onMouseLeave: () => { null == O && x(null) }, tabIndex: eu ? -1 : n, ...i, children: ed.map((e, t) => { let { sticker: n, sendability: i } = e; return (0, s.jsx)(B, { isFocused: V === "".concat(t), isHidden: eu, sendability: i, listIndex: t, onMouseOver: () => { es.setFocus("".concat(t)), x("".concat(t)) }, onSelectSticker: ea, sticker: n }, n.id) }) }) } }) }), (0, s.jsxs)("div", { className: U.bottomInformationTextContainer, children: [(0, s.jsx)("div", { className: U.textDivider }), (0, s.jsxs)("div", { className: U.bottomInformationLayout, children: [(0, s.jsx)(E.Text, { className: U.descriptionText, style: { maxWidth: w }, variant: "text-sm/normal", children: null != V ? P.default.Messages.EXPRESSION_SUGGESTIONS_STICKER_NAME.format({ stickerName: null === (t = q[+V]) || void 0 === t ? void 0 : t.sticker.name }) : P.default.Messages.EXPRESSION_SUGGESTIONS_STICKER_SHORT_NAV_PROMPT.format({ upHook: (e, t) => (0, s.jsx)(E.KeyCombo, { shortcut: "up", className: U.keybind }, t) }) }), (0, s.jsx)(E.Clickable, { onClick: () => { v.default.track(y.AnalyticEvents.STICKER_SUGGESTIONS_ENABLED_TOGGLED, { enabled: !1, location: { section: y.AnalyticsSections.EXPRESSION_PICKER } }), R.ExpressionSuggestionsEnabled.updateSetting(!1) }, children: (0, s.jsx)(E.Tooltip, { text: P.default.Messages.EXPRESSION_SUGGESTIONS_STICKER_DISABLE, children: e => (0, s.jsx)(g.default, { ...e, className: U.closeIcon }) }) })] })] })] }), (0, s.jsx)("div", { className: U.containerBackground })] }) }) }) }, 646047: function(e, t, n) { "use strict"; n.r(t); let i = new class e { setActive(e) { return Promise.resolve() } setEnabled(e) {} setSelectedStream(e) {} setFocusedStream(e) {} setMirrored(e) {} setPipAspectRatio(e, t) {} updateSourceTrackingView() {} addOnPipModeChangedListener(e) {} addOnPipModeWillChangeListener(e) {} isEnabled() { return !1 } isSupported() { return !1 } }; t.default = i }, 853856: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("524437"), u = n("570140"), d = n("581883"), _ = n("131704"), c = n("981631"); let E = {}, I = !1; function T() { var e, t, n; I = null !== (n = null === (e = d.default.settings.favorites) || void 0 === e ? void 0 : e.muted) && void 0 !== n && n, E = {}; let i = null === (t = d.default.settings.favorites) || void 0 === t ? void 0 : t.favoriteChannels; if (null == i) return !1; for (let e in i) { let t = i[e]; E[e] = { id: e, nickname: "" !== t.nickname ? t.nickname : null, type: t.type, order: t.position, parentId: "0" !== t.parentId ? t.parentId : null } } } class f extends(a = o.default.Store) { initialize() { this.waitFor(d.default), T(), this.syncWith([d.default], T) } getFavoriteChannels() { return E } get favoriteServerMuted() { return I } isFavorite(e) { return null != e && null != E[e] } getFavorite(e) { if (null != e) return E[e] } getCategoryRecord(e) { if (e in E && E[e].type === l.FavoriteChannelType.CATEGORY) { var t, n; return t = E[e], (0, _.createChannelRecord)({ id: t.id, name: null !== (n = t.nickname) && void 0 !== n ? n : "", type: c.ChannelTypes.GUILD_CATEGORY, position: t.order, guild_id: c.FAVORITES }) } return null } getNickname(e) { var t; let n = this.getFavorite(e); return null !== (t = null == n ? void 0 : n.nickname) && void 0 !== t ? t : void 0 } } s = "FavoriteStore", (r = "displayName") in(i = f) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new f(u.default, {}) }, 647086: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FAVORITES_GUILD_RECORD: function() { return a }, FAVORITES_RAW_GUILD_ID: function() { return s } }); var i = n("601964"), r = n("981631"); let s = "373", a = new i.default({ id: s, name: "Favorites", description: "The place for all your favorite channels!", ownerId: "234", verificationLevel: r.VerificationLevels.NONE, region: "", joinedAt: new Date, defaultMessageNotifications: 0, mfaLevel: r.MFALevels.NONE, explicitContentFilter: 0, maxMembers: 5e5, nsfwLevel: r.GuildNSFWContentLevel.DEFAULT }) }, 362658: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useFavoritesServerExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2021-09_favorites_server", label: "Favorites Server", defaultConfig: { favoritesEnabled: !1, canShow: !0, isFavoritesPerk: !1, hasStaffPrivileges: !1 }, treatments: [{ id: 1, label: "Favorites v1 - On", config: { favoritesEnabled: !0, canShow: !0, isFavoritesPerk: !1, hasStaffPrivileges: !0 } }, { id: 2, label: "Favorites v1 - Forced Off", config: { favoritesEnabled: !1, canShow: !1, isFavoritesPerk: !1, hasStaffPrivileges: !0 } }, { id: 3, label: "Favorites v2", config: { favoritesEnabled: !0, canShow: !0, isFavoritesPerk: !0, hasStaffPrivileges: !0 } }, { id: 4, label: "Favorites v2 w/o Staff Privileges", config: { favoritesEnabled: !0, canShow: !0, isFavoritesPerk: !0, hasStaffPrivileges: !1 } }] }), r = e => i.useExperiment({ location: e }, { autoTrackExposure: !0 }); t.default = i }, 846787: function(e, t, n) { "use strict"; function i(e, t, n) { let i = new n.constructor(n.toJS()); return i.position_ = t.order, null != t.nickname && (i.name = t.nickname), null != t.parentId && t.parentId in e && (i.parent_id = t.parentId), i } n.r(t), n.d(t, { createFavoritesChannelRecord: function() { return i } }) }, 727429: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o }, getGuildIdForGenericRedirect: function() { return l } }); var i = n("442837"), r = n("914010"), s = n("853856"), a = n("981631"); function o(e) { let t = (0, i.useStateFromStores)([r.default], () => r.default.getGuildId()); return null != t ? t : e.getGuildId() } function l(e) { return r.default.getGuildId() !== a.FAVORITES ? e.getGuildId() : s.default.isFavorite(e.id) || e.isThread() && s.default.isFavorite(e.parent_id) ? a.FAVORITES : e.getGuildId() } }, 706590: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E }, isFavoritesGuildVisible: function() { return c } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("442837"), a = n("592125"), o = n("496675"), l = n("709054"), u = n("853856"), d = n("362658"), _ = n("231338"); function c(e, t, n) { let { canShow: i, isFavoritesPerk: s } = d.default.getCurrentConfig({ location: "7993a7_1" }, { autoTrackExposure: !1 }); if (s) return !0; if (!i) return !1; let a = e.getFavoriteChannels(); if (r().isEmpty(a)) return !1; let o = l.default.keys(a).filter(e => { let i = t.getChannel(e); return null != i && (!!i.isPrivate() || n.can(_.Permissions.VIEW_CHANNEL, i)) }); return !r().isEmpty(o) && !0 } function E() { let { canShow: e, isFavoritesPerk: t } = (0, d.useFavoritesServerExperiment)("7993a7_2"), n = (0, s.useStateFromStores)([u.default, a.default, o.default], () => e && c(u.default, a.default, o.default)); return !!t || n } }, 688465: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("26290"), a = n("689938"); function o(e) { let { className: t, color: n = r.default.unsafe_rawColors.BRAND_500.css, ...o } = e; return (0, i.jsx)(s.TextBadge, { ...o, text: a.default.Messages.BETA, color: n, className: t }) } }, 535322: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StretchedSparkleStar: function() { return _ }, default: function() { return c } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("325767"), o = n("26290"), l = n("645652"), u = n("689938"), d = n("907849"); function _(e) { return (0, i.jsx)("svg", { ...(0, a.default)({ ...e }), width: "25", height: "48", viewBox: "0 0 25 48", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { d: "M22.6014 22.1003C20.4432 20.6855 18.6067 18.8326 17.2112 16.6618C15.8157 14.4911 14.8925 12.0511 14.5014 9.50028L13.2014 0.700277C13.1553 0.497624 13.0404 0.317179 12.8764 0.189581C12.7123 0.0619821 12.5092 -0.00490199 12.3014 0.000279992C12.1055 -0.00125605 11.9158 0.0691675 11.7683 0.198194C11.6209 0.327221 11.5259 0.505874 11.5014 0.700277L10.1014 9.50028C9.74796 12.0629 8.8402 14.5177 7.44131 16.6938C6.04242 18.8698 4.18605 20.7148 2.00143 22.1003L0.901394 22.8003C0.770775 22.8872 0.665162 23.0067 0.594998 23.1471C0.524833 23.2874 0.49259 23.4436 0.501431 23.6003C0.49259 23.7569 0.524833 23.9132 0.594998 24.0535C0.665162 24.1938 0.770775 24.3134 0.901394 24.4003L2.00143 25.1003C4.18605 26.4857 6.04242 28.3307 7.44131 30.5068C8.8402 32.6828 9.74796 35.1376 10.1014 37.7003L11.5014 46.4003C11.5014 46.6125 11.5857 46.8159 11.7357 46.966C11.8858 47.116 12.0892 47.2003 12.3014 47.2003C12.5238 47.2017 12.7388 47.1207 12.9049 46.973C13.0711 46.8252 13.1767 46.6212 13.2014 46.4003L14.5014 37.7003C14.8925 35.1495 15.8157 32.7095 17.2112 30.5387C18.6067 28.368 20.4432 26.5151 22.6014 25.1003L23.8014 24.4003C24.0329 24.1951 24.1761 23.9085 24.2014 23.6003C24.1761 23.292 24.0329 23.0054 23.8014 22.8003L22.6014 22.1003Z", fill: "currentColor" }) }) } function c(e) { let { className: t, forceUseColorForSparkles: n = !1, shouldInheritTextColor: r = !1, shouldInheritBackgroundColor: a = !1 } = e; return (0, i.jsx)(l.default, { className: t, forceUseColor: n, children: (0, i.jsx)(o.TextBadge, { disableColor: !0, className: s()(d.tag, { [d.inheritTextColor]: r, [d.inheritBackgroundColor]: a }), text: u.default.Messages.NEW }) }) } }, 645652: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("819758"), o = n("108671"); function l(e) { let { className: t, children: n, forceUseColor: r = !1, hideStars: l } = e; return (0, i.jsxs)("span", { className: s()(o.container, t, { [o.containerColored]: r }), children: [n, l ? null : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(a.default, { foreground: o.sparkleStarTopRight }), (0, i.jsx)(a.default, { foreground: o.sparkleStarRight }), (0, i.jsx)(a.default, { foreground: o.sparkleStarBottomLeft })] })] }) } }, 531578: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { FEEDBACK_FREEFORM_LENGTH: function() { return o }, FeedbackRating: function() { return i }, FeedbackType: function() { return r }, FeedbackTypePrecedence: function() { return l } }), n("724458"), (s = i || (i = {})).BAD = "bad", s.NEUTRAL = "neutral", s.GOOD = "good"; let o = 1024; (a = r || (r = {}))[a.VOICE = 0] = "VOICE", a[a.STREAM = 1] = "STREAM", a[a.VIDEO_BACKGROUND = 2] = "VIDEO_BACKGROUND", a[a.ACTIVITY = 3] = "ACTIVITY", a[a.IN_APP_REPORTS = 4] = "IN_APP_REPORTS"; let l = [2, 1, 3, 0, 4].reduce((e, t, n) => ({ ...e, [t]: n }), {}) }, 178635: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("433517"), a = n("147913"), o = n("536442"), l = n("810788"), u = n("19780"), d = n("531578"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = { chance: .2, cooldown: 864e5 }, E = { [d.FeedbackType.VOICE]: { ...c, hotspot: o.HotspotLocations.VOICE_CALL_FEEDBACK, storageKey: "lastVoiceFeedback", eligibilityChecks: [function(e) { return !u.default.getWasEverRtcConnected() || u.default.getWasEverMultiParticipant() }] }, [d.FeedbackType.STREAM]: { ...c, hotspot: o.HotspotLocations.REPORT_PROBLEM_POST_STREAM, storageKey: "lastStreamFeedback" }, [d.FeedbackType.VIDEO_BACKGROUND]: { ...c, hotspot: o.HotspotLocations.VIDEO_BACKGROUND_FEEDBACK, storageKey: "lastVideoBackgroundFeedback" }, [d.FeedbackType.ACTIVITY]: { cooldown: 0, chance: .5, hotspot: o.HotspotLocations.POST_ACTIVITY_FEEDBACK, storageKey: "lastActivityFeedback" }, [d.FeedbackType.IN_APP_REPORTS]: { cooldown: 1728e5, chance: .5, hotspot: o.HotspotLocations.IN_APP_REPORTS_FEEDBACK, storageKey: "inAppReportsFeedback" } }; function I(e) { return l.default.hasHotspot(e.hotspot) } function T(e) { return Math.random() < e.chance } function f(e) { if (null != e.storageKey) { let t = s.Storage.get(e.storageKey); if (null != t && Date.now() - t < e.cooldown) return !1 } return !0 } class S extends a.default { possiblyShowFeedbackModal(e, t) { (function(e) { var t; if (__OVERLAY__) return !1; let n = E[e], i = null !== (t = n.eligibilityChecks) && void 0 !== t ? t : []; return [f, T, I].every(e => e(n)) && i.every(e => e(n)) })(e) && (null == this.feedbackTypeToShow || !(d.FeedbackTypePrecedence[this.feedbackTypeToShow] < d.FeedbackTypePrecedence[e])) && (this.feedbackTypeToShow = e, this.showFeedbackModalDebounced(t)) } constructor(...e) { super(...e), _(this, "feedbackTypeToShow", null), _(this, "showFeedbackModalDebounced", r().debounce(e => { null != this.feedbackTypeToShow && (! function(e) { let t = E[e]; null != t.storageKey && s.Storage.set(t.storageKey, Date.now()) }(this.feedbackTypeToShow), this.feedbackTypeToShow = null, e()) }, 200)) } } }, 169223: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("812206"), a = n("569545"), o = n("687516"), l = n("981283"), u = n("928518"), d = n("314897"), _ = n("592125"), c = n("158776"), E = n("19780"), I = n("959457"), T = n("178635"), f = n("531578"), S = n("981631"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class A extends T.default { _initialize() { l.default.init() } constructor(...e) { super(...e), h(this, "actions", { VOICE_CHANNEL_SHOW_FEEDBACK: e => this.handleVoiceChannelFeedback(e), STREAM_CLOSE: e => this.handleStreamClose(e), VIDEO_BACKGROUND_SHOW_FEEDBACK: e => this.handleVideoBackgroundShowFeedback(e), EMBEDDED_ACTIVITY_CLOSE: e => this.handleActivityClose(e), IN_APP_REPORTS_SHOW_FEEDBACK: e => this.handleInAppReportsFeedback(e) }), h(this, "handleVoiceChannelFeedback", e => { let { analyticsData: t } = e; this.possiblyShowFeedbackModal(f.FeedbackType.VOICE, () => { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("821")]).then(n.bind(n, "988645")); return n => (0, i.jsx)(e, { ...n, analyticsData: t }) }) }) }), h(this, "handleStreamClose", e => { var t; let { streamKey: s, canShowFeedback: l } = e, u = (0, a.decodeStreamKey)(s), _ = (0, o.getStreamerApplication)(u, c.default), E = null !== (t = I.default.getVideoStats(s)) && void 0 !== t ? t : {}, T = { media_session_id: I.default.getMediaSessionId(s), rtc_connection_id: I.default.getRtcConnectionId(s), stream_region: I.default.getRegion(s), max_viewers: I.default.getMaxViewers(s), ...E }; l && this.possiblyShowFeedbackModal(f.FeedbackType.STREAM, () => { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("96307")]).then(n.bind(n, "142402")); return t => (0, i.jsx)(e, { stream: u, streamApplication: _, isStreamer: u.ownerId === d.default.getId(), ...t, analyticsData: T }) }) }) }), h(this, "handleVideoBackgroundShowFeedback", e => { let { analyticsData: t } = e; this.possiblyShowFeedbackModal(f.FeedbackType.VIDEO_BACKGROUND, () => { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("67920")]).then(n.bind(n, "801320")); return n => (0, i.jsx)(e, { ...n, analyticsData: t }) }) }) }), h(this, "handleActivityClose", e => { let { applicationId: t, channelId: a, showFeedback: o } = e, l = s.default.getApplication(t), d = _.default.getChannel(a), c = { rtc_connection_id: E.default.getRTCConnectionId(), media_session_id: E.default.getMediaSessionId() }, I = u.default.getWindowOpen(S.PopoutWindowKeys.CHANNEL_CALL_POPOUT) ? r.POPOUT_MODAL_CONTEXT : r.DEFAULT_MODAL_CONTEXT; null != l && null != d && o && this.possiblyShowFeedbackModal(f.FeedbackType.ACTIVITY, () => { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("32627")]).then(n.bind(n, "450634")); return t => (0, i.jsx)(e, { ...t, activityApplication: l, channel: d, analyticsData: c }) }, { contextKey: I }) }) }), h(this, "handleInAppReportsFeedback", e => { let { reportId: t, reportType: s } = e; this.possiblyShowFeedbackModal(f.FeedbackType.IN_APP_REPORTS, () => { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("77927")]).then(n.bind(n, "442173")); return n => (0, i.jsx)(e, { ...n, reportId: t, reportType: s }) }) }) }) } } t.default = new A }, 883429: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("668781"), a = n("346479"), o = n("929991"), l = n("480739"), u = n("985518"), d = n("228392"), _ = n("981631"), c = n("689938"); async function E(e, t, n) { try { return await e() } catch (e) { var i; (null === (i = e.body) || void 0 === i ? void 0 : i.code) === _.AbortCodes.NON_MODERATED_TAG_REQUIRED && s.default.show({ title: t, body: n }) } } t.default = { resort(e) { r.default.dispatch({ type: "RESORT_THREADS", channelId: e }) }, createForumTag: (e, t) => i.HTTP.post({ url: _.Endpoints.FORUM_TAGS(t), body: { name: e.name, emoji_id: e.emojiId, emoji_name: null != e.emojiId ? void 0 : e.emojiName, moderated: e.moderated } }), updateForumTag(e, t) { let n = i.HTTP.put({ url: _.Endpoints.FORUM_TAG(t, e.id), body: { name: e.name, emoji_id: e.emojiId, emoji_name: null == e.emojiId ? e.emojiName : void 0, moderated: e.moderated } }); E(() => n, c.default.Messages.FORUM_TAG_EDIT_ERROR, c.default.Messages.FORUM_POST_NON_MODERATED_TAG_REQUIRED) }, deleteForumTag(e, t) { let n = i.HTTP.del({ url: _.Endpoints.FORUM_TAG(e, t) }); E(() => n, c.default.Messages.FORUM_TAG_REMOVE_ERROR, c.default.Messages.FORUM_POST_NON_MODERATED_TAG_REQUIRED) }, updateForumPostTags: async (e, t) => (await a.default.unarchiveThreadIfNecessary(e), i.HTTP.patch({ url: _.Endpoints.CHANNEL(e), body: { applied_tags: t } })), hideAdminOnboarding(e, t) { r.default.dispatch({ type: "ADMIN_ONBOARDING_GUIDE_HIDE", channelId: e, hide: t }) }, markPostAsSeen(e, t, n) { (0, o.markAnalyticsFeedItemSeen)((0, u.getForumPostSeenManagerId)(e), t, n) }, markPostAsUnseen(e, t, n) { (0, o.markAnalyticsFeedItemUnseen)((0, u.getForumPostSeenManagerId)(e), t, n) }, flushSeenItems(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : l.ForceFlushType.IMMEDIATE_WITH_COOLDOWN; (0, o.flushAnalyticsFeedItems)((0, u.getForumPostSeenManagerId)(e), t) }, async searchForumPosts(e, t, n, i) { r.default.dispatch({ type: "FORUM_SEARCH_START", channelId: t }); try { let s = await a.default.searchThreads(e, t, n, i); (0, d.trackForumSearched)({ guildId: e, channelId: t, numSearchResults: s.length }), r.default.dispatch({ type: "FORUM_SEARCH_SUCCESS", channelId: t, threadIds: s }) } catch { r.default.dispatch({ type: "FORUM_SEARCH_FAILURE", channelId: t }) } }, updateForumSearchQuery(e, t) { r.default.dispatch({ type: "FORUM_SEARCH_QUERY_UPDATED", channelId: e, query: t }) }, clearForumSearch(e) { r.default.dispatch({ type: "FORUM_SEARCH_CLEAR", channelId: e }) } } }, 238349: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { computeThreadIdsSnapshot: function() { return V } }), n("47120"); var r, s, a, o, l = n("392711"), u = n.n(l), d = n("683860"), _ = n("442837"), c = n("570140"), E = n("344185"), I = n("144140"), T = n("314897"), f = n("592125"), S = n("306680"), h = n("944486"), A = n("823379"), m = n("709054"), N = n("882252"); let p = [], O = null, C = null, R = new Set, g = d.ThreadSortOrder.LATEST_ACTIVITY, L = 0, v = [], D = !1, M = [], y = u().chain(p), P = u().chain(p), U = new Set, b = new Set; function G(e) { var t; return null !== (t = S.default.lastMessageId(e)) && void 0 !== t ? t : e } function w(e) { return function(t, n) { if ((0, N.isForumPostPinned)(t)) return -1; if ((0, N.isForumPostPinned)(n)) return 1; if (e === d.ThreadSortOrder.LATEST_ACTIVITY) return m.default.compare(G(n), G(t)); else return m.default.compare(n, t) } } function k() { v = [], i = null, C = null, R = new Set, g = d.ThreadSortOrder.LATEST_ACTIVITY, L = 0, M = [], y = u().chain(p), P = u().chain(p), b.clear(), U.clear() } function B() { var e; let t = h.default.getChannelId(); if (null == t || !(null === (e = f.default.getChannel(t)) || void 0 === e ? void 0 : e.isForumLikeChannel())) return k(), !1; x({ refreshThreadIds: !0 }) } function V(e) { let t = f.default.getChannel(e); return null == t ? [] : Object.values(E.default.getThreadsForParent(t.guild_id, t.id)).map(e => { let { id: t } = e; return t }).sort(w(g)) } function x(e) { var t; let n = f.default.getChannel(C); if (null == n) return; (null == e ? void 0 : e.refreshThreadIds) && (M = Object.values(E.default.getThreadsForParent(n.guild_id, n.id)).map(e => { let { id: t } = e; return t }), L = 0, D = !0), 0 !== U.size && (M = M.filter(e => !U.has(e)), U.clear()), 0 !== b.size && (M = Array.from(new Set([...M, ...b])), b.clear()), ((null == e ? void 0 : e.refreshThreadIds) || (null == e ? void 0 : e.sortThreadIds)) && (P = u().chain(M).sort(w(d.ThreadSortOrder.LATEST_ACTIVITY)), y = u().chain(M).sort(w(d.ThreadSortOrder.CREATION_DATE))); let r = (g === d.ThreadSortOrder.LATEST_ACTIVITY ? P : y).value(); let s = (v = 0 === R.size ? r : r.filter((t = R, function(e) { var n; let i = null === (n = f.default.getChannel(e)) || void 0 === n ? void 0 : n.appliedTags; return null != i && 0 !== i.length && i.some(e => t.has(e)) }))).find(e => (function(e) { let t = I.default.getCount(e); return null === t || 0 === t })(e)); i = null == s ? null : s } class F extends(r = _.default.Store) { initialize() { this.waitFor(f.default, E.default, h.default, S.default) } getNewThreadCount() { return L } getCanAckThreads() { return D } getThreadIds(e, t, n) { let i = e !== C, r = !(0, A.areSetsEqual)(n, R), s = t !== g; return C = e, R = n, g = t, i ? x({ refreshThreadIds: !0 }) : s ? x({ sortThreadIds: !0 }) : r && x(), v } getCurrentThreadIds() { return v } getAndDeleteMostRecentUserCreatedThreadId() { let e = O; return O = null, e } getFirstNoReplyThreadId() { return i } } o = "ForumActivePostStore", (a = "displayName") in(s = F) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new F(c.default, { CONNECTION_OPEN: B, OVERLAY_INITIALIZE: B, GUILD_CREATE: B, CHANNEL_SELECT: B, CHANNEL_DELETE: function(e) { let { channel: t } = e; if (null == t.parent_id || t.parent_id !== C) return !1; k() }, THREAD_LIST_SYNC: function(e) { var t; let { guildId: n } = e; if (null == C || n !== (null === (t = f.default.getChannel(C)) || void 0 === t ? void 0 : t.guild_id)) return !1; x({ refreshThreadIds: !0 }) }, THREAD_CREATE: function(e) { let { channel: t, isNewlyCreated: n } = e; if (null == t.parent_id || t.parent_id !== C || !n) return !1; t.ownerId !== T.default.getId() ? L++ : O = t.id }, THREAD_UPDATE: function(e) { let { channel: t } = e; if (null == t.parent_id || t.parent_id !== C) return !1; let n = (0, N.isForumPostPinned)(t.id), i = b.has(t.id); if (n && !i) b.add(t.id), x({ sortThreadIds: !0 }); else { if (n || !i) return !1; b.delete(t.id), x({ sortThreadIds: !0 }) } }, THREAD_DELETE: function(e) { let { channel: t } = e; if (null == t.parent_id || t.parent_id !== C) return !1; U.add(t.id), x({ sortThreadIds: !0 }) }, RESORT_THREADS: function(e) { let { channelId: t } = e; if (null == t || t !== C) return !1; x({ refreshThreadIds: !0 }) }, CHANNEL_ACK: function(e) { let { channelId: t } = e; if (null == t || t !== C) return !1; D = !1 } }) }, 710352: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { COMMUNITY_PORTAL_FORUM_PAGE: function() { return d }, ForumOnboardingCTAs: function() { return i }, ForumTimestampFormats: function() { return r }, MAX_FORUM_POST_TAGS: function() { return l }, MAX_FORUM_TAGS: function() { return o }, MAX_FORUM_TEMPLATE_LENGTH: function() { return u } }); let o = 20, l = 5, u = 256; (s = i || (i = {})).PERMISSIONS = "Permissions", s.GUIDELINES = "Guidelines", s.TAGS = "Tags", s.DEFAULT_REACTION = "Default Reaction", s.CREATE_POST = "Create Post"; let d = "https://discord.com/community/creating-value-with-conversation"; (a = r || (r = {}))[a.DURATION_AGO = 0] = "DURATION_AGO", a[a.POSTED_DURATION_AGO = 1] = "POSTED_DURATION_AGO" }, 945141: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("433517"), r = n("147913"); let s = "formGuidelinesStorageKey"; class a extends r.default { _initialize() { let e = i.Storage.get(s); null != e && (this.seenForumGuidelines = new Set(e)) } _terminate() { i.Storage.set(s, this.seenForumGuidelines) } markAsSeen(e) { this.seenForumGuidelines.add(e), i.Storage.set(s, this.seenForumGuidelines) } hasSeen(e) { return this.seenForumGuidelines.has(e) } constructor(...e) { var t, n, i; super(...e), t = this, n = "seenForumGuidelines", i = new Set, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new a }, 716896: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("592125"), s = n("109590"), a = n("176505"); class o extends i.default { handleChannelPreload(e) { let { channelId: t } = e; if ((0, a.isStaticChannelRoute)(t)) return; let n = r.default.getChannel(t); null != n && n.isForumLikeChannel() && (0, s.preloadForumThreads)(n) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_PRELOAD: this.handleChannelPreload }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new o }, 197062: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("759231"), a = n("689938"); let o = (e, t) => (0, i.jsxs)(r.Text, { color: "text-danger", style: { display: "flex", gap: "4px", margin: "8px 0 4px 0", alignItems: "center" }, variant: "text-sm/normal", children: [(0, i.jsx)(s.default, { width: 14, height: 14 }), e] }, t); t.default = { getForumChannelPermissionText: function() { return a.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_WITH_FORUMS_DESCRIPTION_TEXT_DISABLED.format({ warningHook: o }) } } }, 109590: function(e, t, n) { "use strict"; n.r(t), n.d(t, { preloadForumThreads: function() { return m }, useFirstForumPostMessage: function() { return h } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("442837"), a = n("544891"), o = n("570140"), l = n("592125"), u = n("709054"), d = n("238349"), _ = n("660189"); n("682474"); var c = n("981631"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class I { get(e) { return !this._set.hasOwnProperty(e) && (this._set[e] = this._defaultValueFunc()), this._set[e] } delete(e) { delete this._set[e] } hasNext() { return !r().isEmpty(this._set) } next() { return u.default.keys(this._set)[0] } constructor(e) { E(this, "_set", void 0), E(this, "_defaultValueFunc", void 0), this._set = {}, this._defaultValueFunc = e } } let T = new class e { request(e, t) { this.requested.get(e).add(t) } hasRequested(e, t) { return this.requested.get(e).has(t) } finishRequesting(e, t) { let n = this.requested.get(e); t.forEach(e => n.delete(e)), T.compact(e) } getRequested(e) { return this.requested.get(e) } getNextBatch(e, t) { return Array.from(this.requested.get(e)).slice(0, t) } hasNext() { return this.requested.hasNext() } next() { return this.requested.next() } compact(e) { 0 === this.requested.get(e).size && this.requested.delete(e) } constructor() { E(this, "requested", void 0), this.requested = new I(() => new Set) } }, f = null; function S(e, t) { return !e && null == t } function h(e) { var t, n; let { loaded: i, firstMessage: r } = (0, s.useStateFromStoresObject)([_.default], () => _.default.getMessage(e.id)), a = (0, s.useStateFromStores)([l.default], () => l.default.getChannel(e.parent_id)); if (null != a && (t = i, n = r, !t && null == n))(function(e, t) { if (T.hasRequested(e.id, t)) return; let n = (0, d.computeThreadIdsSnapshot)(e.id), i = n.findIndex(e => e === t), r = n.slice(i, i + 5).filter(t => !T.hasRequested(e.id, t)); A(e, r) })(a, e.id); return { loaded: i, firstMessage: r } } function A(e, t) { let n = !1; t.forEach(t => { var i, r; let { loaded: s, firstMessage: a } = _.default.getMessage(t); if (i = s, r = a, !i && null == r) T.request(e.id, t), n = !0 }), n && null == f && (f = setTimeout(N, 0)) } function m(e) { A(e, (0, d.computeThreadIdsSnapshot)(e.id).slice(0, 10)) } async function N() { try { for (; T.hasNext();) await p(T.next()) } finally { f = null } } async function p(e) { let t = T.getNextBatch(e, 10); try { var n; if (0 === t.length) return; let i = null === (n = l.default.getChannel(e)) || void 0 === n ? void 0 : n.guild_id; if (null == i) return; let { body: { threads: r } } = await a.HTTP.post({ url: c.Endpoints.FORUM_POSTS(e), body: { thread_ids: t } }); o.default.dispatch({ type: "LOAD_FORUM_POSTS", guildId: i, threads: r }) } catch (e) {} finally { T.finishRequesting(e, t) } } }, 368844: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ForumPostMediaTypes: function() { return i }, messageContainsGifOrVideo: function() { return L }, shouldShowAddMediaToOriginalPostModal: function() { return g }, useFindFirstMediaProperties: function() { return C }, useFirstMediaIsEmbed: function() { return R }, useForumPostMediaProperties: function() { return O }, useForumPostMediaThumbnail: function() { return p } }), n("789020"), n("47120"), n("724458"); var i, r, s = n("470079"), a = n("118139"), o = n("144140"), l = n("695346"), u = n("592125"), d = n("375954"), _ = n("594174"), c = n("630388"), E = n("823379"), I = n("709054"), T = n("591759"), f = n("981631"); function S(e) { if (null == e) return !1; let { filename: t, height: n, width: i } = e; return (0, a.isImageFile)(t) && null != n && n > 0 && null != i && i > 0 } function h(e) { return null != e && null != e && (0, a.isVideoFile)(e.filename) && null != e.proxy_url } function A(e) { return S(e) || h(e) }(r = i || (i = {})).EMBED = "embed", r.ATTACHMENT = "attachment"; function m(e) { return function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : l.InlineAttachmentMedia.getSetting(); if (!t) return []; let n = null == e ? void 0 : e.attachments; return null == e || null == n ? [] : n.filter(A).map(e => { let { proxy_url: t, url: n, description: i, spoiler: r, flags: s, width: o, height: l, filename: u, content_scan_version: d } = e; if (null == o || null == l) return null; let _ = (0, a.isVideoFile)(u), E = null != e.flags && (0, c.hasFlag)(e.flags, f.MessageAttachmentFlags.IS_THUMBNAIL), I = null != t ? t : n; if (_) { let e = T.default.toURLSafe(t); if (null == e) return null; e.searchParams.append("format", "jpeg"), I = e.toString() } return { src: I, width: o, height: l, spoiler: null != r && r, flags: s, contentScanVersion: d, alt: i, isVideo: _, isThumbnail: E, type: "attachment" } }).filter(E.isNotNullish) }(e, l.InlineAttachmentMedia.useSetting()) } function N(e, t) { let n = l.InlineEmbedMedia.useSetting(), i = l.RenderEmbeds.useSetting(); if (null == e) return []; let r = e.embeds; return n && i && null != r ? r.map(e => { var n; let i = null !== (n = e.image) && void 0 !== n ? n : e.thumbnail; if (null == i && null != e.images && (i = e.images[0]), null != i && null != i.url) { let { height: n, proxyURL: r, url: s, width: o } = i, l = null != r && (0, a.isVideoUrl)(r); return { src: null != r && "" !== r ? r : s, height: n, width: o, spoiler: t, flags: e.flags, contentScanVersion: e.contentScanVersion, isVideo: l, type: "embed" } } }).filter(E.isNotNullish) : [] } function p(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = O(e, n); return s.useMemo(() => { if (null == t) return []; if (!t.isMediaChannel()) return i; { let e = i.find(e => e.isThumbnail); return null != e ? [e] : i } }, [t, i]) } function O(e, t) { let n = m(e); return [...n, ...N(e, t)] } function C(e, t) { var n, i; let r = m(e), s = N(e, t); return null !== (i = null !== (n = r[0]) && void 0 !== n ? n : s[0]) && void 0 !== i ? i : null } function R(e, t) { let n = m(e), i = N(e, t); return null == n[0] && null != i[0] } function g(e, t) { var n; let i = u.default.getChannel(t); if (null == i) return !1; let r = d.default.getMessage(i.id, I.default.castChannelIdAsMessageId(i.id)); return null != r && e.length > 0 && null != e.find(e => e.isImage || e.isVideo) && i.isForumPost() && i.ownerId === (null === (n = _.default.getCurrentUser()) || void 0 === n ? void 0 : n.id) && 0 === o.default.getCount(i.id) && (0 === r.attachments.length || null == r.attachments.find(e => S(e) || h(e))) } function L(e) { return e.reduce((e, t) => ({ containsVideo: e.containsVideo || t.isVideo, containsGif: e.containsGif || (0, a.isAnimatedImageUrl)(t.src) }), { containsVideo: !1, containsGif: !1 }) } }, 660189: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("786761"), d = n("797316"), _ = n("594174"), c = n("709054"); let E = {}; function I(e) { let { threads: t, firstMessages: n } = e; if (null == n) return !1; for (let e of t) E[e.id] = { loaded: !0, firstMessage: null }; for (let e of n) T(e.channel_id, e) } function T(e, t) { let n = null == t ? null : (0, u.createMessageRecord)(t); E[e] = { loaded: !0, firstMessage: n } } function f(e) { let { type: t, channelId: n, messageId: i, userId: r, emoji: s, optimistic: a, reactionType: o } = e, l = E[n]; if (null == l || null == l.firstMessage || i !== l.firstMessage.id) return !1; let u = _.default.getCurrentUser(), d = null != u && u.id === r; if (a && !d) return !1; E[n] = { ...l }, "MESSAGE_REACTION_ADD" === t ? E[n].firstMessage = l.firstMessage.addReaction(s, d, e.colors, o) : E[n].firstMessage = l.firstMessage.removeReaction(s, d, o) } class S extends(i = o.default.Store) { initialize() { this.waitFor(d.default, _.default) } isLoading(e) { var t; return (null === (t = E[e]) || void 0 === t ? void 0 : t.loaded) !== !0 } getMessage(e) { return !(e in E) && (E[e] = { loaded: !1, firstMessage: null }), E[e] } } a = "ForumPostMessagesStore", (s = "displayName") in(r = S) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new S(l.default, { CONNECTION_OPEN: function() { E = {} }, MESSAGE_CREATE: function(e) { if (e.isPushNotification || e.message.id !== c.default.castChannelIdAsMessageId(e.message.channel_id)) return !1; T(e.message.channel_id, e.message) }, MESSAGE_UPDATE: function(e) { if (e.message.id !== e.message.channel_id) return !1; let t = E[c.default.castMessageIdAsChannelId(e.message.id)]; if (null == t || null == t.firstMessage) return !1; E[c.default.castMessageIdAsChannelId(e.message.id)] = { ...t, firstMessage: (0, u.updateMessageRecord)(t.firstMessage, e.message) } }, MESSAGE_DELETE: function(e) { if (e.id !== c.default.castChannelIdAsMessageId(e.channelId)) return !1; E[e.channelId] = { loaded: !0, firstMessage: null } }, THREAD_CREATE: function(e) { if (null != E[e.channel.id] || !d.default.isSubscribedToThreads(e.channel.guild_id)) return !1; E[e.channel.id] = { loaded: !0, firstMessage: null } }, MESSAGE_REACTION_ADD: f, MESSAGE_REACTION_REMOVE: f, MESSAGE_REACTION_REMOVE_ALL: function(e) { let { channelId: t, messageId: n } = e, i = E[t]; if (null == i || null == i.firstMessage || n !== i.firstMessage.id) return !1; E[t] = { ...i, firstMessage: i.firstMessage.set("reactions", []) } }, MESSAGE_REACTION_REMOVE_EMOJI: function(e) { let { channelId: t, messageId: n, emoji: i } = e, r = E[t]; if (null == r || null == r.firstMessage || n !== r.firstMessage.id) return !1; E[t] = { ...r, firstMessage: r.firstMessage.removeReactionsForEmoji(i) } }, MESSAGE_REACTION_ADD_MANY: function(e) { let { channelId: t, messageId: n, reactions: i } = e, r = E[t]; if (null == r || null == r.firstMessage || n !== r.firstMessage.id) return !1; let s = _.default.getCurrentUser(), a = r.firstMessage.addReactionBatch(i, null == s ? void 0 : s.id); E[t] = { ...r, firstMessage: a } }, LOAD_FORUM_POSTS: function(e) { let { threads: t } = e; for (let e in t) T(e, t[e].first_message) }, LOAD_THREADS_SUCCESS: I, LOAD_ARCHIVED_THREADS_SUCCESS: I, LOAD_MESSAGES_SUCCESS: function(e) { let { channelId: t, messages: n } = e, i = n[n.length - 1]; null != i && i.id === c.default.castChannelIdAsMessageId(t) && (E[t] = { loaded: !0, firstMessage: (0, u.createMessageRecord)(i) }) } }) }, 682474: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("786761"), d = n("592125"), _ = n("594174"), c = n("823379"), E = n("709054"); let I = {}; function T(e) { var t; let n = d.default.getChannel(null == e ? void 0 : e.channel_id); if (null == n || !n.isForumPost()) return !1; let i = I[n.id]; return E.default.compare(null == e ? void 0 : e.id, null == i ? void 0 : null === (t = i.message) || void 0 === t ? void 0 : t.id) > -1 } function f(e, t) { let n = null == t ? null : (0, u.createMessageRecord)(t); return I[e] = { loaded: !0, message: n }, !0 } function S(e) { return I[e] } function h(e) { var t; return null === (t = I[e]) || void 0 === t ? void 0 : t.message } function A(e) { let { threads: t, mostRecentMessages: n } = e; t.forEach(e => f(e.id, null)), null == n || n.filter(c.isNotNullish).forEach(e => { f(e.channel_id, e) }) } class m extends(a = o.default.Store) { initialize() { this.waitFor(d.default, _.default) } getMessageState(e) { return !(e in I) && (I[e] = { loaded: !1, message: null }), I[e] } } s = "ForumPostRecentMessageStore", (r = "displayName") in(i = m) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, new m(l.default, { CONNECTION_OPEN: function() { I = {} }, MESSAGE_CREATE: function(e) { if (e.isPushNotification || !T(e.message)) return !1; e.message.channel_id === E.default.castMessageIdAsChannelId(e.message.id) ? f(e.message.channel_id, null) : f(e.message.channel_id, e.message) }, MESSAGE_UPDATE: function(e) { if (!T(e.message) || e.message.channel_id === e.message.id) return !1; ! function(e, t) { let n = function(e) { return I[e] }(e), i = h(e); null != n && null != i && (I[e] = { ...n, message: (0, u.updateMessageRecord)(i, t) }) }(e.message.channel_id, e.message) }, MESSAGE_DELETE: function(e) { return function(e, t) { let n = h(e); return (null == n ? void 0 : n.id) === t && (delete I[e], !0) }(e.channelId, e.id) }, LOAD_FORUM_POSTS: function(e) { let { threads: t } = e; for (let e in t) f(e, t[e].most_recent_message) }, LOAD_ARCHIVED_THREADS_SUCCESS: A, LOAD_THREADS_SUCCESS: A }) }, 208970: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("592125"); let d = {}; function _(e) { let t = u.default.getChannel(e); return !!(null != t && t.isForumLikeChannel()) || !1 } function c(e) { var t; let n = null !== (t = d[e]) && void 0 !== t ? t : { query: null, loading: !1, results: null }; return d[e] = n, n } class E extends(a = o.default.Store) { getSearchQuery(e) { let t = d[e]; return null == t ? void 0 : t.query } getSearchLoading(e) { var t; let n = d[e]; return null !== (t = null == n ? void 0 : n.loading) && void 0 !== t && t } getSearchResults(e) { let t = d[e]; return null == t ? void 0 : t.results } getHasSearchResults(e) { let t = d[e]; return (null == t ? void 0 : t.results) != null && t.results.length > 0 } } s = "ForumSearchStore", (r = "displayName") in(i = E) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new E(l.default, { CONNECTION_OPEN: function() { d = {} }, THREAD_DELETE: function(e) { var t; let { channel: n } = e, i = n.parent_id; if (null == i) return !1; let r = d[i]; if (null == r) return !1; d[i] = { ...r, results: null === (t = r.results) || void 0 === t ? void 0 : t.filter(e => n.id !== e) } }, CHANNEL_DELETE: function(e) { let { channel: t } = e; return delete d[t.id] }, FORUM_SEARCH_QUERY_UPDATED: function(e) { let { channelId: t, query: n } = e; if (!_(t)) return !1; let i = c(t); d[t] = { ...i, query: n, results: null } }, FORUM_SEARCH_START: function(e) { let { channelId: t } = e; if (!_(t)) return !1; let n = c(t); d[t] = { ...n, loading: !0 } }, FORUM_SEARCH_SUCCESS: function(e) { let { channelId: t, threadIds: n } = e; if (!_(t)) return !1; let i = c(t); d[t] = { ...i, loading: !1, results: n } }, FORUM_SEARCH_FAILURE: function(e) { let { channelId: t } = e; if (!_(t)) return !1; let n = c(t); d[t] = { ...n, loading: !1, results: [] } }, FORUM_SEARCH_CLEAR: function(e) { let { channelId: t } = e; return !!_(t) && delete d[t] } }) }, 882252: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canDisplayPostUnreadMessageCount: function() { return I }, getForumPostReadStates: function() { return d }, getForumPostReadStatesById: function() { return _ }, getForumTimestampFormatter: function() { return E }, isForumPostPinned: function() { return T } }), n("47120"); var i = n("683860"), r = n("592125"), s = n("430824"), a = n("306680"), o = n("710352"), l = n("176505"), u = n("689938"); function d(e, t) { let [n] = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [a.default]; return { isNew: !e.isArchivedThread() && n.isNewForumThread(e.id, e.parent_id, t), hasUnreads: !e.isArchivedThread() && n.isForumPostUnread(e.id) } } function _(e) { let [t, n, i] = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [r.default, s.default, a.default], o = t.getChannel(e); if (null == o) return null; let l = n.getGuild(o.guild_id); return null == l ? null : d(o, l, [i]) } let c = () => ({ minutes: u.default.Messages.FORM_POST_CREATED_AGO_TIMESTAMP_MINUTES, hours: u.default.Messages.FORM_POST_CREATED_AGO_TIMESTAMP_HOURS, days: u.default.Messages.FORM_POST_CREATED_AGO_TIMESTAMP_DAYS, month: u.default.Messages.FORM_POST_CREATED_AGO_TIMESTAMP_MORE_THAN_MONTH }); function E(e, t) { if (t === o.ForumTimestampFormats.POSTED_DURATION_AGO && e === i.ThreadSortOrder.CREATION_DATE) return c } function I(e, t) { let [n] = t, i = n.hasTrackedUnread(e), r = n.hasOpenedThread(e), s = null != n.getTrackedAckMessageId(e); return i && r && s } function T(e) { var t; return (null === (t = r.default.getChannel(e)) || void 0 === t ? void 0 : t.hasFlag(l.ChannelFlags.PINNED)) === !0 } }, 559241: function(e, t, n) { "use strict"; n.r(t); var i = n("592125"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } t.default = new class e { constructor() { r(this, "filterTagIds", null), r(this, "sortOrder", null), r(this, "layout", null), r(this, "setFilterTagIds", e => { this.filterTagIds = e }), r(this, "setSortOrder", e => { this.sortOrder = e }), r(this, "setLayout", e => { this.layout = e }), r(this, "getFilterTagIdsAnalytics", () => null != this.filterTagIds ? Array.from(this.filterTagIds) : []), r(this, "getSortOrderAnalytics", e => { var t, n; return null !== (n = this.sortOrder) && void 0 !== n ? n : null === (t = i.default.getChannel(e)) || void 0 === t ? void 0 : t.getDefaultSortOrder() }), r(this, "getLayoutAnalytics", e => { var t; let n = i.default.getChannel(e); return null !== (t = this.layout) && void 0 !== t ? t : null == n ? void 0 : n.getDefaultLayout() }) } } }, 985518: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ }, getForumPostSeenManagerId: function() { return l }, markForumPostItemAsSeen: function() { return u }, markForumPostItemAsUnseen: function() { return d } }), n("653041"), n("47120"); var i = n("929991"), r = n("480739"), s = n("228392"), a = n("6496"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function l(e) { return "".concat(r.AnalyticsFeedTypes.FORUM_CHANNEL, "_").concat(e) } function u(e, t, n) { (0, i.markAnalyticsFeedItemSeen)(l(e), t, n) } function d(e, t, n) { (0, i.markAnalyticsFeedItemUnseen)(l(e), t, n) } class _ extends r.AnalyticsFeedItemSeenManager { constructor({ guildId: e, channelId: t, windowId: n, isPaused: i }) { super({ windowId: n, isPaused: i, id: l(t) }), o(this, "guildId", void 0), o(this, "channelId", void 0), o(this, "sessionId", void 0), o(this, "createFlushSeenItemsFunction", e => { let t = this.trackedFeedItems, n = this.channelId, i = this.guildId, r = { guildId: i, channelId: n, sessionId: this.sessionId, trackedFeedItems: t, isForcedFlush: null != e }; return () => (function(e) { let { guildId: t, channelId: n, sessionId: i, trackedFeedItems: r, isForcedFlush: a } = e, o = [], l = []; for (let e of Object.keys(r)) { let t = r[e].computeSeenTimeDestructive(a); t > 0 && (o.push(e), l.push(t)) } 0 !== o.length && (0, s.trackForumChannelSeenBatch)({ guildId: t, channelId: n, sessionId: i, postIds: o, additionalTimes: l }) })(r) }), this.guildId = e, this.channelId = t, this.sessionId = (0, a.getForumChannelSessionId)(t) } } }, 474387: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("344185"), s = n("314897"), a = n("592125"), o = n("709054"), l = n("882252"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class d extends i.default { handleThreadCreate(e) { let { channel: t } = e; if (t.isForumPost()) { let e = t.ownerId === s.default.getId(); this.readStateSnapshots[t.id] = { isNew: !e, hasUnreads: !e } } } constructor(...e) { super(...e), u(this, "readStateSnapshots", {}), u(this, "actions", { CHANNEL_SELECT: e => this.handleChannelSelect(e), THREAD_CREATE: e => this.handleThreadCreate(e) }), u(this, "handleChannelSelect", e => { let { channelId: t } = e; if (null == t) return; let n = a.default.getChannel(t); null != n && n.isForumLikeChannel() && (this.readStateSnapshots = {}, this.processForumChannel(n.guild_id, t)) }), u(this, "processForumChannel", (e, t) => { let n = r.default.getThreadsForParent(e, t); o.default.keys(n).forEach(e => { let t = (0, l.getForumPostReadStatesById)(e); null != t && (this.readStateSnapshots[e] = t) }) }), u(this, "getReadStateSnapshotAnalytics", e => this.readStateSnapshots[e]) } } t.default = new d }, 702225: function(e, t, n) { "use strict"; n.r(t); var i = n("153832"); function r(e) { return { channelId: e, sessionId: (0, i.v4)() } } t.default = new class e { getForumChannelSessionId(e) { return null == this.session && (this.session = r(e)), this.session.channelId !== e && (this.session = r(e)), this.session.sessionId } constructor() { var e, t, n; e = this, n = void 0, (t = "session") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 228392: function(e, t, n) { "use strict"; n.r(t), n.d(t, { maybeTrackForumNewPostDraftCreated: function() { return m }, trackForumAddMediaToOriginalPostClicked: function() { return y }, trackForumChannelMediaUploaderClicked: function() { return U }, trackForumChannelSeenBatch: function() { return I }, trackForumCreateNewPostClick: function() { return h }, trackForumCreateNewPostKeybindUsed: function() { return A }, trackForumCreateNewPostStarted: function() { return B }, trackForumEnableAutomodClicked: function() { return b }, trackForumHelperCardClicked: function() { return P }, trackForumLayoutUpdated: function() { return L }, trackForumMorePostsLoaded: function() { return C }, trackForumNewPostCleared: function() { return N }, trackForumOnboardingClicked: function() { return D }, trackForumPostClicked: function() { return R }, trackForumPostCreated: function() { return p }, trackForumPostLinkCopied: function() { return v }, trackForumPostSidebarViewed: function() { return w }, trackForumPreviewPostClicked: function() { return G }, trackForumScrolled: function() { return O }, trackForumSearchCleared: function() { return f }, trackForumSearched: function() { return T }, trackForumSortOrderUpdated: function() { return g }, trackForumTagFilterClicked: function() { return S }, trackForumUpsellModalClicked: function() { return M }, trackForumUpsellModalViewed: function() { return k } }); var i = n("367907"), r = n("731429"), s = n("188471"), a = n("592125"), o = n("703558"), l = n("626135"), u = n("358085"), d = n("660189"), _ = n("208970"), c = n("6496"), E = n("981631"); function I(e) { let { guildId: t, channelId: n, sessionId: r, postIds: s, additionalTimes: a } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_SEEN_BATCH, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n, sessionId: r }), guild_id: t, channel_id: n, post_ids: s, additional_seen_time_millis: a }) } function T(e) { let { guildId: t, channelId: n, numSearchResults: r } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_SEARCHED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n, num_search_results: r }) } function f(e) { let { guildId: t, channelId: n } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_SEARCH_CLEARED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n }) } function S(e) { let { guildId: t, channelId: n, tagId: r, filterTagIds: s, added: a, location: o } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_TAG_FILTER_CLICKED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n, tag_id: r, filter_tag_ids: s, added: a, location: o }) } function h(e) { let { guildId: t, channelId: n } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_CREATE_NEW_POST_CLICKED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n }) } function A(e) { let { guildId: t, channelId: n } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_CREATE_NEW_POST_KEYBIND_USED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n }) } function m(e) { var t, n, r, s; let { guildId: l, channelId: u } = e, d = a.default.getChannel(u); if (null == d) return; let _ = o.default.getThreadSettings(u), I = null === (t = d.template) || void 0 === t ? void 0 : t.trim(), T = o.default.getDraft(u, o.DraftType.FirstThreadMessage), f = null == T || 0 === T.length || (null == T ? void 0 : T.trim()) === I, S = (null == _ ? void 0 : _.appliedTags) == null || (null == _ ? void 0 : null === (n = _.appliedTags) || void 0 === n ? void 0 : n.size) === 0, h = (null == _ ? void 0 : _.name) == null || (null == _ ? void 0 : null === (s = _.name) || void 0 === s ? void 0 : null === (r = s.trim()) || void 0 === r ? void 0 : r.length) === 0; (!f || !S || !h) && i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_NEW_POST_DRAFT_CREATED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: u }), guild_id: l, channel_id: u, applied_tag_ids: (0, c.getForumPostDraftAppliedTagIds)(u), num_attachments: (0, c.getForumPostDraftNumAttachments)(u) }) } function N(e) { let { guildId: t, channelId: n } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_NEW_POST_DRAFT_CLEARED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n }) } function p(e) { let { guildId: t, channelId: n, postId: r } = e; function s() { i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_POST_CREATED, { ...(0, c.collectForumPostAnalyticsMetadata)({ channelId: r }), guild_id: t, channel_id: n }) } d.default.isLoading(r) ? d.default.addConditionalChangeListener(() => !!d.default.isLoading(r) || (s(), !1)) : s() } function O(e) { let { guildId: t, channelId: n } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_SCROLLED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n }) } function C(e) { let { guildId: t, channelId: n, numArchivedThreads: r, hasMoreThreads: s, filterTagIds: o, sortOrder: u } = e; l.default.track(E.AnalyticEvents.FORUM_CHANNEL_MORE_POSTS_LOADED, { ...(0, i.collectGuildAnalyticsMetadata)(t), ...(0, i.collectChannelAnalyticsMetadata)(a.default.getChannel(n)), ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n, num_archived_threads: r, num_active_threads: (0, c.getNumActiveThreads)(t, n), has_more_threads: s, filter_tag_ids: o, sort_order: u }) } function R(e) { let { guildId: t, channelId: n, postId: r, location: s } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_POST_CLICKED, { ...(0, c.collectForumPostAnalyticsMetadata)({ channelId: r }), guild_id: t, channel_id: n, is_search_result: null != _.default.getSearchResults(n), location: s }) } function g(e) { let { guildId: t, channelId: n, sortOrder: r } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_POSTS_SORTED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n, sort_type: (0, c.convertSortOrderToReadableString)(r), sort_order: r, forum_channel_sort_order: r }) } function L(e) { let { guildId: t, channelId: n, forumLayout: r } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_LAYOUT_UPDATED, { ...(0, c.collectForumAnalyticsMetadata)({ channelId: n }), guild_id: t, channel_id: n, forum_channel_layout: r }) } function v(e) { let { postId: t, location: n } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_POST_LINK_COPIED, { forum_post_id: t, location: n }) } function D(e) { let { onboardingCTA: t } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_ONBOARDING_CLICKED, { onboarding_cta_type: t }) } function M(e) { let { forumDemoId: t } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_UPSELL_MODAL_CLICKED, { forum_demo_id: t }) } function y(e) { let { added: t } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_ADD_MEDIA_TO_ORIGINAL_POST_CLICKED, { added: t }) } function P(e) { let { readGuideCta: t } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_HELPER_CARD_CLICKED, { read_guide_cta: t }) } function U(e) { let { isMobile: t } = e; i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_MEDIA_UPLOADER_CLICKED, { is_mobile: t }) } function b() { i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_ENABLE_AUTOMOD_CLICKED) } function G() { i.default.trackWithMetadata(E.AnalyticEvents.FORUM_CHANNEL_ENABLE_PREVIEW_CLICKED) } function w(e) { i.default.trackWithMetadata(E.AnalyticEvents.CHANNEL_OPENED, { ...(0, i.collectGuildAnalyticsMetadata)(e.guild_id), ...(0, i.collectChannelAnalyticsMetadata)(e), ...(0, r.collectThreadMetadata)(e, !0), ...(0, i.getChannelOpenedMetadata)(e.id), channel_view: "Split View", platform: (0, u.getPlatform)() }), (0, s.trackClickstream)(E.AnalyticEvents.CHANNEL_OPENED_CLICKSTREAM, { channelId: e.id }) } function k() { i.default.trackWithMetadata(E.AnalyticEvents.OPEN_MODAL, { type: "Forum Channel Upsell Modal", location: { section: E.AnalyticsSections.CHANNEL_WELCOME_CTA } }) } function B(e) { let { guildId: t, channelId: n } = e; i.default.trackWithMetadata(E.AnalyticEvents.THREAD_CREATION_STARTED, { ...(0, r.collectThreadMetadata)(a.default.getChannel(n)), channel_id: n, guild_id: t }) } }, 6496: function(e, t, n) { "use strict"; n.r(t), n.d(t, { collectForumAnalyticsMetadata: function() { return g }, collectForumPostAnalyticsMetadata: function() { return L }, convertSortOrderToReadableString: function() { return N }, getForumChannelSessionId: function() { return m }, getForumPostDraftAppliedTagIds: function() { return O }, getForumPostDraftNumAttachments: function() { return p }, getNumActiveThreads: function() { return C } }), n("411104"), n("47120"), n("724458"); var i = n("683860"), r = n("344185"), s = n("569471"), a = n("260483"), o = n("144140"), l = n("592125"), u = n("703558"), d = n("496675"), _ = n("117530"), c = n("709054"), E = n("660189"), I = n("559241"), T = n("474387"), f = n("702225"), S = n("981631"), h = n("176505"), A = n("124368"); function m(e) { return f.default.getForumChannelSessionId(e) } function N(e) { switch (e) { case i.ThreadSortOrder.CREATION_DATE: return A.ThreadSortOrderReadableForAnalytics.CREATION_DATE; case i.ThreadSortOrder.LATEST_ACTIVITY: return A.ThreadSortOrderReadableForAnalytics.LATEST_ACTIVITY; default: throw Error("Unexpected sort order ".concat(e)) } } function p(e) { return _.default.getUploads(e, u.DraftType.FirstThreadMessage).length } function O(e) { var t, n; let i = l.default.getChannel(e); if (null == i) return []; let r = l.default.getChannel(i.parent_id), s = null == r ? void 0 : r.availableTags; if (null == r || null == s) return []; let a = null !== (n = null === (t = u.default.getThreadSettings(e)) || void 0 === t ? void 0 : t.appliedTags) && void 0 !== n ? n : new Set, o = new Set(s.map(e => e.id)); return Array.from(a).filter(e => o.has(e)) } function C(e, t) { return Object.keys(r.default.getThreadsForParent(e, t)).length } function R(e) { let { loaded: t, firstMessage: n } = E.default.getMessage(e); return t ? n : null } function g(e) { var t, n, i, r; let { channelId: s, sessionId: a } = e, o = l.default.getChannel(s); return null != o && o.isForumLikeChannel() ? { forum_channel_has_guidelines: null != o.topic && o.topic.trim().length > 0, forum_channel_default_emoji_reaction_id: null === (t = o.defaultReactionEmoji) || void 0 === t ? void 0 : t.emojiId, forum_channel_default_emoji_reaction_name: null === (n = o.defaultReactionEmoji) || void 0 === n ? void 0 : n.emojiName, forum_channel_available_tag_ids: null !== (r = null === (i = o.availableTags) || void 0 === i ? void 0 : i.map(e => e.id)) && void 0 !== r ? r : [], forum_channel_tag_required: o.hasFlag(h.ChannelFlags.REQUIRE_TAG), forum_channel_can_create_post: d.default.can(S.Permissions.SEND_MESSAGES, o), forum_channel_filter_tag_ids: I.default.getFilterTagIdsAnalytics(), forum_channel_sort_order: I.default.getSortOrderAnalytics(o.id), forum_channel_session_id: null != a ? a : m(o.id), forum_channel_layout: I.default.getLayoutAnalytics(o.id), forum_channel_default_sort_order: o.defaultSortOrder, forum_channel_default_layout: o.defaultForumLayout } : null } function L(e) { var t, n, i, r, u, d, _; let { channelId: E, sessionId: I } = e, f = l.default.getChannel(E); if (null == f || !f.isForumPost()) return null; let S = l.default.getChannel(f.parent_id); return null != S && S.isForumLikeChannel() ? { ...g({ channelId: S.id, sessionId: I }), thread_approximate_member_count: a.default.getMemberCount(E), thread_approximate_message_count: o.default.getCount(E), thread_archived: (null === (t = f.threadMetadata) || void 0 === t ? void 0 : t.archived) === !0, thread_locked: null !== (d = null === (n = f.threadMetadata) || void 0 === n ? void 0 : n.locked) && void 0 !== d && d, thread_auto_archive_duration_minutes: null !== (_ = null === (i = f.threadMetadata) || void 0 === i ? void 0 : i.autoArchiveDuration) && void 0 !== _ ? _ : 0, thread_approximate_creation_date: c.default.extractTimestamp(E), forum_post_id: f.id, forum_post_first_message_id: c.default.castChannelIdAsMessageId(f.id), forum_post_num_reactions: function(e) { let t = R(e); return null == t ? 0 : t.reactions.reduce((e, t) => e + t.count, 0) }(f.id), forum_post_num_unique_reactions: function(e) { let t = R(e); return null == t ? 0 : t.reactions.length }(f.id), forum_post_applied_tag_ids: function(e) { var t, n; let i = l.default.getChannel(e); if (null == i) return []; let r = l.default.getChannel(i.parent_id), s = null == r ? void 0 : r.availableTags; if (null == r || null == s) return []; let a = new Set(s.map(e => e.id)); return null !== (n = null === (t = i.appliedTags) || void 0 === t ? void 0 : t.filter(e => a.has(e))) && void 0 !== n ? n : [] }(f.id), forum_post_is_pinned: f.hasFlag(h.ChannelFlags.PINNED), forum_post_is_new: null === (r = T.default.getReadStateSnapshotAnalytics(f.id)) || void 0 === r ? void 0 : r.isNew, forum_post_is_unread: null === (u = T.default.getReadStateSnapshotAnalytics(f.id)) || void 0 === u ? void 0 : u.hasUnreads, forum_post_is_following: s.default.hasJoined(f.id), forum_post_attachment_mimetypes: function(e) { let t = R(e); return null == t ? [] : t.attachments.map(e => { var t; return null !== (t = e.content_type) && void 0 !== t ? t : "unknown" }) }(f.id) } : null } }, 222044: function(e, t, n) { "use strict"; n.r(t), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"), n("653041"); var i = n("147913"), r = n("339085"), s = n("592125"), a = n("768581"), o = n("176354"), l = n("176505"), u = n("149203"); let d = new Worker(new URL(n.p + n.u("80493"), n.b)); class _ extends i.default { handleChannelPreload(e) { let { channelId: t } = e; if ((0, l.isStaticChannelRoute)(t)) return; let n = s.default.getChannel(t); null != n && n.isForumLikeChannel() && (function(e) { let t = [], n = e.defaultReactionEmoji; if ((null == n ? void 0 : n.emojiId) != null) { var i, s; t.push(a.default.getEmojiURL({ id: n.emojiId, animated: null !== (s = null === (i = r.default.getUsableCustomEmojiById(n.emojiId)) || void 0 === i ? void 0 : i.animated) && void 0 !== s && s, size: u.EMOJI_SIZE_MAP.reaction })) } else(null == n ? void 0 : n.emojiName) != null && t.push(o.default.getURL(n.emojiName)); return e.availableTags.forEach(e => { null != e.emojiId ? t.push(a.default.getEmojiURL({ id: e.emojiId, animated: !1, size: u.EMOJI_SIZE_MAP.reaction })) : null != e.emojiName && t.push(o.default.getURL(e.emojiName)) }), t })(n).forEach(e => { if (null != e && 0 !== e.length) { var t; t = e, new Promise(e => { let n = i => { let { data: { url: r } } = i; null == d || d.removeEventListener("message", n), t === r && e() }; null == d || d.addEventListener("message", n), null == d || d.postMessage({ url: t }) }) } }) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_PRELOAD: this.handleChannelPreload }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new _ }, 346610: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MessageForwardingExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-05_message_forwarding", label: "Message forwarding", defaultConfig: { canForwardMessages: !1, hasInlineForwardButton: !1 }, treatments: [{ id: 1, label: "Enabled", config: { canForwardMessages: !0, hasInlineForwardButton: !1 } }, { id: 2, label: "Enabled + inline forward button", config: { canForwardMessages: !0, hasInlineForwardButton: !0 } }] }) }, 978003: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("981631"); function r(e) { var t; return (null === (t = e.messageReference) || void 0 === t ? void 0 : t.type) === i.MessageReferenceTypes.FORWARD } }, 39154: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("789020"); var i = n("978003"); function r(e, t) { return null == (t = null != t ? t : (0, i.default)(e) ? e.messageSnapshots[0] : void 0) ? e : e.merge({ content: t.message.content, channel_id: t.message.channel_id, attachments: t.message.attachments, embeds: t.message.embeds, flags: t.message.flags, components: t.message.components, editedTimestamp: null, timestamp: t.message.timestamp, reactions: [], messageSnapshots: [], customRenderedContent: null }) } }, 254238: function(e, t, n) { "use strict"; n.r(t), n.d(t, { connectToRemote: function() { return m }, disconnectRemote: function() { return A }, fetchDevices: function() { return R }, persistSelectedDeviceId: function() { return g }, remoteAudioSettingsUpdate: function() { return O }, remoteDisconnect: function() { return p }, remoteVoiceStateUpdate: function() { return N }, transferToPlayStation: function() { return D } }), n("653041"), n("47120"); var i = n("434179"), r = n("771649"), s = n("544891"), a = n("570140"), o = n("668781"), l = n("340332"), u = n("19780"), d = n("797258"), _ = n("626135"), c = n("960048"), E = n("607214"), I = n("258609"), T = n("893387"), f = n("981631"), S = n("689938"); function h(e, t) { var n, i; _.default.track(f.AnalyticEvents.REMOTE_COMMAND_SENT, { command_type: e, remote_platform: null === (i = d.default.getSessionById(t)) || void 0 === i ? void 0 : null === (n = i.clientInfo) || void 0 === n ? void 0 : n.os }) } async function A() { let e = I.default.getAwaitingRemoteSessionInfo(), t = null == e ? void 0 : e.nonce; a.default.dispatch({ type: "REMOTE_SESSION_DISCONNECT" }); let n = []; ((null == e ? void 0 : e.type) === f.PlatformTypes.PLAYSTATION || (null == e ? void 0 : e.type) === f.PlatformTypes.PLAYSTATION_STAGING) && (null == e ? void 0 : e.commandId) != null && (null == e ? void 0 : e.deviceId) != null && n.push(v(e.type, e.deviceId, e.commandId)), null != t && n.push(function(e) { return s.HTTP.del({ url: f.Endpoints.CONNECT_REQUEST(e) }) }(t)); try { await Promise.all(n) } catch (e) { o.default.show({ title: S.default.Messages.CANCEL_TRANSFER_VOICE_FAILED_TITLE, body: S.default.Messages.CANCEL_TRANSFER_VOICE_FAILED_BODY }) } } function m(e) { a.default.dispatch({ type: "REMOTE_SESSION_CONNECT", sessionId: e }) } function N(e, t) { let { selfMute: n, selfDeaf: i } = t; a.default.dispatch({ type: "REMOTE_COMMAND", sessionId: e, payload: { type: "VOICE_STATE_UPDATE", self_mute: n, self_deaf: i } }), h("VOICE_STATE_UPDATE", e) } function p(e) { a.default.dispatch({ type: "REMOTE_COMMAND", sessionId: e, payload: { type: "DISCONNECT" } }), h("DISCONNECT", e), A() } function O(e, t, n, i) { let r = (0, l.coerceAudioContextForProto)(n); null != r && (a.default.dispatch({ type: "REMOTE_COMMAND", sessionId: e, payload: { type: "AUDIO_SETTINGS_UPDATE", context: r, id: t, ...i } }), h("AUDIO_SETTINGS_UPDATE", e)) } async function C() { let e; try { let t = null != u.default.getRTCConnectionId() ? r.ConsoleHandoffType.TRANSFER_EXISTING_CALL : r.ConsoleHandoffType.CREATE_NEW_CALL; e = (await s.HTTP.post({ url: f.Endpoints.CONNECT_REQUEST_CREATE, body: { analytics_properties: { handoff_type: t } } })).body.nonce } catch (e) { c.default.captureException(e) } return e } async function R(e) { let t; a.default.dispatch({ type: "GAME_CONSOLE_FETCH_DEVICES_START", platform: e }); try { t = await s.HTTP.get({ url: f.Endpoints.CONSOLES_DEVICES(e) }) } catch (t) { throw a.default.dispatch({ type: "GAME_CONSOLE_FETCH_DEVICES_FAIL", platform: e, error: t }), t } let n = t.body.devices; return a.default.dispatch({ type: "GAME_CONSOLE_FETCH_DEVICES_SUCCESS", platform: e, devices: n }), n } function g(e, t) { a.default.dispatch({ type: "GAME_CONSOLE_SELECT_DEVICE", platform: e, deviceId: t }) } async function L(e, t, n, r) { let o; a.default.dispatch({ type: "GAME_CONSOLE_DEVICE_SEND_COMMAND_START", platform: e }); try { o = await s.HTTP.post({ url: f.Endpoints.CONSOLES_DEVICES_COMMANDS(e, t), body: { command: i.ConsoleCommands.CONNECT_VOICE, channel_id: n.id, guild_id: n.guild_id, nonce: r } }) } catch (t) { throw a.default.dispatch({ type: "GAME_CONSOLE_DEVICE_SEND_COMMAND_FAIL", platform: e, error: t }), t } let l = o.body.id; return a.default.dispatch({ type: "WAIT_FOR_REMOTE_SESSION", sessionType: e, nonce: r, channelId: n.id, deviceId: t, commandId: l }), l } async function v(e, t, n) { a.default.dispatch({ type: "GAME_CONSOLE_DEVICE_CANCEL_COMMAND_START", platform: e, deviceId: t, commandId: n }); try { await s.HTTP.del({ url: f.Endpoints.CONSOLES_DEVICES_COMMAND(e, t, n) }) } catch (i) { throw a.default.dispatch({ type: "GAME_CONSOLE_DEVICE_CANCEL_COMMAND_FAIL", platform: e, deviceId: t, commandId: n, error: i }), i } a.default.dispatch({ type: "GAME_CONSOLE_DEVICE_CANCEL_COMMAND_SUCCESS", platform: e, deviceId: t, commandId: n }) } async function D(e, t, n) { await E.default.maybeShowPTTAlert(e), await A(); let i = await C(); await L(e, t, n, i), (0, T.default)(n.id, e) } }, 607214: function(e, t, n) { "use strict"; let i; n.r(t), i = n("563119").default, t.default = i }, 927923: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GAME_CONSOLE_ALERT_MODAL_LOCATION: function() { return h }, GAME_CONSOLE_SESSIONS: function() { return f }, GameConsoleCommandResultErrorCodes: function() { return r }, GameConsoleTypes: function() { return i }, PLAYSTATION_CLIENT_SCOPES: function() { return I }, PLAYSTATION_LINK_DEST_ORIGIN: function() { return E }, USER_ACTION_REQUIRED_ERROR_CODES: function() { return S }, XBOX_APP_WEB_LINK: function() { return d }, XBOX_CLIENT_SCOPES: function() { return c }, XBOX_HANDOFF_SEARCH_PARAMS: function() { return T }, XBOX_LINK_DEST_ORIGIN: function() { return _ }, XBOX_URL_BASE: function() { return u } }), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var i, r, s, a, o = n("243814"), l = n("981631"); let u = "xbox://communitylinking/donut/audio", d = "https://www.xbox.com/en-US/apps/xbox-app-for-mobile", _ = "https://login.live.com", c = [o.OAuth2Scopes.VOICE, o.OAuth2Scopes.DM_CHANNELS_READ, o.OAuth2Scopes.GUILDS, o.OAuth2Scopes.GUILDS_MEMBERS_READ, o.OAuth2Scopes.IDENTIFY, o.OAuth2Scopes.CONNECTIONS], E = "https://my.account.sony.com", I = c, T = e => { let { guildId: t, channelName: n, guildName: i, channelId: r, muted: s, deafened: a, nonce: o } = e, l = { channelid: r, guildid: t, channelname: n, guildname: i, muted: String(s), deafened: String(a) }; return null != o && (l.nonce = o), new URLSearchParams(l) }; (s = i || (i = {})).PLAYSTATION = "playstation", s.XBOX = "xbox"; let f = new Set(["xbox", "playstation"]); l.ActivityGamePlatforms.XBOX, l.ActivityGamePlatforms.PS5, (a = r || (r = {}))[a.CONSOLE_DEVICE_PASSCODE_UNLOCK_REQUIRED = 27e4] = "CONSOLE_DEVICE_PASSCODE_UNLOCK_REQUIRED", a[a.CONSOLE_DEVICE_UNAVAILABLE = 270001] = "CONSOLE_DEVICE_UNAVAILABLE", a[a.CONSOLE_DEVICE_UNVAILABLE_FROM_OTHER_USERS = 270002] = "CONSOLE_DEVICE_UNVAILABLE_FROM_OTHER_USERS", a[a.CONSOLE_DEVICE_COMMUNICATION_RESTRICTED = 270003] = "CONSOLE_DEVICE_COMMUNICATION_RESTRICTED", a[a.CONSOLE_DEVICE_INVALID_POWER_MODE = 270004] = "CONSOLE_DEVICE_INVALID_POWER_MODE", a[a.CONSOLE_DEVICE_ACCOUNT_LINK_ERROR = 270005] = "CONSOLE_DEVICE_ACCOUNT_LINK_ERROR", a[a.CONSOLE_DEVICE_MAX_MEMBERS_REACHED = 270006] = "CONSOLE_DEVICE_MAX_MEMBERS_REACHED", a[a.CONSOLE_DEVICE_BAD_COMMAND = 270007] = "CONSOLE_DEVICE_BAD_COMMAND"; let S = new Set([27e4]), h = "console error alert" }, 902304: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("512722"), r = n.n(i), s = n("846519"), a = n("668781"), o = n("846027"), l = n("147913"), u = n("710845"), d = n("314897"), _ = n("131951"), c = n("19780"), E = n("797258"), I = n("979651"), T = n("823379"), f = n("254238"), S = n("607214"), h = n("258609"), A = n("565473"), m = n("444092"), N = n("927923"), p = n("65154"), O = n("689938"); function C(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let R = new u.default("GameConsoleManager"); async function g(e) { let t = c.default.getChannelId(); r()(null == t, "Syncing to remote while in voice!"), e.selfMute !== _.default.isSelfMute() && await o.default.toggleSelfMute({ syncRemote: !1 }), e.selfDeaf !== _.default.isSelfDeaf() && o.default.toggleSelfDeaf({ syncRemote: !1 }) } class L extends l.default { constructor(...e) { super(...e), C(this, "rollbackCommandTimeout", new s.Timeout), C(this, "awaitRemoteTimeout", new s.Timeout), C(this, "actions", { WAIT_FOR_REMOTE_SESSION: () => this.handleWaitForRemoteSession(), POST_CONNECTION_OPEN: () => this.handleSessionsChanged(), SESSIONS_REPLACE: () => this.handleSessionsChanged(), AUDIO_TOGGLE_SELF_DEAF: e => this.handleAudioStateToggle(e), AUDIO_TOGGLE_SELF_MUTE: e => this.handleAudioStateToggle(e), VOICE_STATE_UPDATES: e => this.handleVoiceStateUpdates(e), CONSOLE_COMMAND_UPDATE: e => this.handleConsoleCommandUpdate(e), PASSIVE_UPDATE_V2: e => this.handleVoiceStateUpdates(e), REMOTE_SESSION_DISCONNECT: () => this.handleRemoteSessionDisconnect() }), C(this, "maybeConnect", e => { let t = function(e) { let t = h.default.getAwaitingRemoteSessionInfo(); return e.find(e => { let n = N.GAME_CONSOLE_SESSIONS.has(e.clientInfo.os), i = null != I.default.getVoiceStateForSession(d.default.getId(), e.sessionId), r = null == t || (0, A.coercePlatformTypeToConsoleType)(t.type) === e.clientInfo.os; return n && r && i }) }(e); if (null == t) return null; this.awaitRemoteTimeout.stop(), (0, f.connectToRemote)(t.sessionId); let n = I.default.getVoiceStateForSession(d.default.getId(), t.sessionId); null != n && g(n) }), C(this, "handleAudioStateToggle", e => { let { syncRemote: t, context: n } = e; if (!t || n !== p.MediaEngineContextTypes.DEFAULT) return; let i = _.default.isSelfDeaf(), r = _.default.isSelfMute(), s = d.default.getId(), a = h.default.getRemoteSessionId(); if (null == a) return; let o = I.default.getVoiceStateForSession(s, a); if (null != o)(o.selfDeaf !== i || o.selfMute !== r) && ((0, f.remoteVoiceStateUpdate)(a, { selfDeaf: i, selfMute: r }), this.rollbackCommandTimeout.start(3e3, () => { g(o) })) }), C(this, "handleVoiceStateUpdates", e => { let t = e.voiceStates, n = h.default.getRemoteSessionId(); if (null == n) { let e = t.map(e => { let { sessionId: t } = e; return null != t ? E.default.getSessionById(t) : null }).filter(T.isNotNullish); return this.maybeConnect(e) } let i = t.find(e => { let { sessionId: t } = e; return t === n }); null != i && (this.rollbackCommandTimeout.stop(), g(i)) }), C(this, "handleSessionsChanged", () => { let e = h.default.getRemoteSessionId(); null != e && null == E.default.getSessionById(e) && (0, f.disconnectRemote)(), null == e && this.maybeConnect(Object.values(E.default.getSessions())) }), C(this, "handleWaitForRemoteSession", () => { this.awaitRemoteTimeout.start(6e4, () => { (0, f.disconnectRemote)(), a.default.show({ title: O.default.Messages.GAME_CONSOLE_TRANSFER_TIMEOUT_TITLE, body: O.default.Messages.GAME_CONSOLE_TRANSFER_TIMEOUT_BODY }) }) }), C(this, "handleConsoleCommandUpdate", e => { var t; let { id: n, result: i, error: r } = e; if ("failed" !== i && "n/a" !== i || null == r) return; R.info("Console command Error result:", i, r); let s = h.default.getAwaitingRemoteSessionInfo(); if ((null == s ? void 0 : s.commandId) !== n) return; let a = h.default.getDevice(s.type, null !== (t = s.deviceId) && void 0 !== t ? t : ""), o = (0, m.default)(null != a ? a : { id: "id", platform: O.default.Messages.STATUS_UNKNOWN, name: O.default.Messages.STATUS_UNKNOWN }, i, r); null != o && S.default.showSelfDismissableAlert({ title: o.title, body: o.body, errorCodeMessage: o.errorCodeMessage, reconnectPlatformType: o.isAccountLinkError ? s.type : void 0 }), N.USER_ACTION_REQUIRED_ERROR_CODES.has(r.code) && this.awaitRemoteTimeout.isStarted() ? this.awaitRemoteTimeout.start(18e4, () => (0, f.disconnectRemote)(), !0) : "failed" === i && (0, f.disconnectRemote)() }), C(this, "handleRemoteSessionDisconnect", () => { this.awaitRemoteTimeout.stop() }) } } t.default = new L }, 258609: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("797258"), o = n("979651"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = null, d = null, _ = new Set, c = {}, E = {}, I = new Set, T = Object.freeze({}); class f extends(i = r.default.DeviceSettingsStore) { initialize(e) { null != e && (E = e.lastSelectedDeviceByPlatform), this.waitFor(a.default, o.default) } getUserAgnosticState() { return { lastSelectedDeviceByPlatform: E } } getDevicesForPlatform(e) { var t; return null !== (t = c[e]) && void 0 !== t ? t : T } getLastSelectedDeviceByPlatform(e) { return E[e] } getDevice(e, t) { var n; return null === (n = c[e]) || void 0 === n ? void 0 : n[t] } getFetchingDevices(e) { return I.has(e) } getPendingDeviceCommands() { return _ } getRemoteSessionId() { return u } getAwaitingRemoteSessionInfo() { return d } } l(f, "displayName", "GameConsoleStore"), l(f, "persistKey", "GameConsoleStore"), t.default = new f(s.default, { REMOTE_SESSION_CONNECT: function(e) { let { sessionId: t } = e; u = t, d = null }, REMOTE_SESSION_DISCONNECT: function() { u = null, d = null }, WAIT_FOR_REMOTE_SESSION: function(e) { let { sessionType: t, nonce: n, channelId: i, deviceId: r, commandId: s } = e; d = { type: t, nonce: n, channelId: i, startedAt: Date.now(), deviceId: r, commandId: s } }, GAME_CONSOLE_FETCH_DEVICES_START: function(e) { let { platform: t } = e; I.add(t) }, GAME_CONSOLE_FETCH_DEVICES_SUCCESS: function(e) { let { platform: t, devices: n } = e; I.delete(t); let i = c[t] = {}, r = {}; for (let e of n) i[e.id] = e, E[t] === e.id && (r[t] = e.id); E = r }, GAME_CONSOLE_FETCH_DEVICES_FAIL: function(e) { let { platform: t } = e; I.delete(t) }, GAME_CONSOLE_SELECT_DEVICE: function(e) { let { platform: t, deviceId: n } = e; E[t] = n } }) }, 487576: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PlayStationVoiceExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2022-08_churro_experiment", label: "PS5 Voice Experiment", defaultConfig: { allowPlayStationStaging: !1 }, treatments: [{ id: 3, label: "PS Experiment + upsells + Staging", config: { allowPlayStationStaging: !0 } }] }) }, 565473: function(e, t, n) { "use strict"; n.r(t), n.d(t, { coercePlatformTypeToConsoleType: function() { return s } }); var i = n("927923"), r = n("981631"); function s(e) { switch (e) { case r.PlatformTypes.XBOX: return i.GameConsoleTypes.XBOX; case r.PlatformTypes.PLAYSTATION: case r.PlatformTypes.PLAYSTATION_STAGING: return i.GameConsoleTypes.PLAYSTATION; default: return null } } }, 444092: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("63063"), r = n("927923"), s = n("689938"); function a(e, t, n) { let a = null; return "failed" === t ? a = function(e, t) { let { platform: n, name: i } = e; switch (t) { case r.GameConsoleCommandResultErrorCodes.CONSOLE_DEVICE_COMMUNICATION_RESTRICTED: return { title: s.default.Messages.CONSOLE_DEVICE_COMMUNICATION_RESTRICTED, body: s.default.Messages.CONSOLE_DEVICE_COMMUNICATION_RESTRICTED_BODY.format({ deviceType: n }) }; case r.GameConsoleCommandResultErrorCodes.CONSOLE_DEVICE_INVALID_POWER_MODE: return { title: s.default.Messages.CONSOLE_DEVICE_NOT_RESPONDING.format({ deviceType: n }), body: s.default.Messages.CONSOLE_DEVICE_NOT_RESPONDING_BODY.format({ deviceName: i }) }; case r.GameConsoleCommandResultErrorCodes.CONSOLE_DEVICE_UNVAILABLE_FROM_OTHER_USERS: return { title: s.default.Messages.CONSOLE_DEVICE_IN_USE.format({ deviceType: n }), body: s.default.Messages.CONSOLE_DEVICE_IN_USE_BODY.format({ deviceName: i }) }; case r.GameConsoleCommandResultErrorCodes.CONSOLE_DEVICE_ACCOUNT_LINK_ERROR: return { title: s.default.Messages.CONSOLE_DEVICE_UNKNOWN_ERROR, body: s.default.Messages.CONSOLE_DEVICE_RECONNECT_ACCOUNT.format({ deviceType: n }), isAccountLinkError: !0 }; default: return { title: s.default.Messages.CONSOLE_DEVICE_UNKNOWN_ERROR, body: s.default.Messages.CONSOLE_DEVICE_UNKNOWN_ERROR_BODY.format({ deviceName: i }) } } }(e, n.code) : "n/a" === t && (a = function(e, t) { let { platform: n, name: i } = e; if (t === r.GameConsoleCommandResultErrorCodes.CONSOLE_DEVICE_PASSCODE_UNLOCK_REQUIRED) return { title: s.default.Messages.CONSOLE_DEVICE_REQUIRES_PASSCODE.format({ deviceType: n }), body: s.default.Messages.CONSOLE_DEVICE_REQUIRES_PASSCODE_BODY.format({ deviceName: i }) }; return null }(e, n.code)), null != a && (a.errorCodeMessage = s.default.Messages.CONSOLE_ERROR_CODE_SUPPORT.format({ supportURL: i.default.getSubmitRequestURL(), errorCode: n.code })), a } }, 590293: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("442837"), r = n("258609"); function s() { return (0, i.useStateFromStores)([r.default], () => null != r.default.getRemoteSessionId() || null != r.default.getAwaitingRemoteSessionInfo()) } }, 893387: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("592125"), r = n("19780"), s = n("797258"), a = n("626135"), o = n("981631"); function l(e, t, n) { var l, u; a.default.track(o.AnalyticEvents.VOICE_CALL_TRANSFER, { source_platform: null != n ? null === (l = s.default.getSessionById(n)) || void 0 === l ? void 0 : l.clientInfo.os : "discord_client", guild_id: null === (u = i.default.getChannel(e)) || void 0 === u ? void 0 : u.guild_id, channel_id: e, rtc_connection_id: r.default.getRTCConnectionId(), target_platform: t }) } }, 542238: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SelfDismissibleAlertBody: function() { return l } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("258609"), o = n("911809"); function l(e) { let { body: t, dismissCallback: n, errorCodeMessage: l } = e, u = (0, s.useStateFromStores)([a.default], () => a.default.getRemoteSessionId()); return (r.useEffect(() => { null != u && n() }, [u, n]), null == l) ? (0, i.jsx)(i.Fragment, { children: t }) : (0, i.jsxs)(i.Fragment, { children: [t, (0, i.jsx)("div", { className: o.errorCodeMessage, children: l })] }) } }, 563119: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("524437"), s = n("952265"), a = n("468026"), o = n("231757"), l = n("605236"), u = n("131951"), d = n("626135"), _ = n("542238"), c = n("927923"), E = n("981631"), I = n("689938"), T = n("112995"); let f = "game_console_alert_modal", S = "game_console_ptt_alert_modal"; t.default = { maybeShowPTTAlert(e) { if (u.default.getMode() !== E.InputModes.PUSH_TO_TALK || (0, l.isDismissibleContentDismissed)(r.DismissibleContent.CONSOLE_PTT_DISABLE_ALERT)) return Promise.resolve(); let t = { [E.PlatformTypes.XBOX]: I.default.Messages.PTT_NOT_SUPPORTED_XBOX, [E.PlatformTypes.PLAYSTATION]: I.default.Messages.PTT_NOT_SUPPORTED_PLAYSTATION, [E.PlatformTypes.PLAYSTATION_STAGING]: I.default.Messages.PTT_NOT_SUPPORTED_PLAYSTATION } [e]; return null == t ? Promise.resolve() : new Promise(e => { let n = () => { (0, l.markDismissibleContentAsDismissed)(r.DismissibleContent.CONSOLE_PTT_DISABLE_ALERT), e() }, o = e => (0, i.jsx)(a.default, { ...e, title: t, body: I.default.Messages.PTT_NOT_SUPPORTED_ALERT_BODY, onConfirm: n, titleClassName: T.title }); (0, s.hasModalOpen)(S) ? (0, s.updateModal)(S, o) : (0, s.openModal)(o, { modalKey: S }) }) }, showSelfDismissableAlert(e) { let { title: t, body: n, errorCodeMessage: r, reconnectPlatformType: l } = e, u = (0, i.jsx)(_.SelfDismissibleAlertBody, { body: n, errorCodeMessage: r, dismissCallback: () => (0, s.closeModal)(f) }); function I() { null != l && ((0, o.default)({ platformType: l }), d.default.track(E.AnalyticEvents.ACCOUNT_LINK_STEP, { previous_step: c.GAME_CONSOLE_ALERT_MODAL_LOCATION, current_step: "desktop oauth", platform_type: l })) } let T = e => (0, i.jsx)(a.default, { ...e, title: t, body: u, onConfirm: I }); (0, s.hasModalOpen)(f) ? (0, s.updateModal)(f, T) : (0, s.openModal)(T, { modalKey: f }) } } }, 669764: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"); let u = new Map, d = new Set, _ = new Set; class c extends(i = o.default.Store) { canFetch(e) { return !d.has(e) && !_.has(e) && !u.has(e) } isFetching(e) { return d.has(e) } getLocalizedName(e) { var t; return null === (t = u.get(e)) || void 0 === t ? void 0 : t.name } getThemes(e) { var t; return null === (t = u.get(e)) || void 0 === t ? void 0 : t.themes } getCoverImageUrl(e, t) { var n; let i = null === (n = u.get(e)) || void 0 === n ? void 0 : n.coverImageUrl; return null == i ? null : null == t ? i : "".concat(i, "?width=").concat(t.width, "&height=").concat(t.height) } } a = "DetectableGameSupplementalStore", (s = "displayName") in(r = c) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new c(l.default, { CONNECTION_OPEN: function() { u = new Map, d = new Set, _ = new Set }, DETECTABLE_GAME_SUPPLEMENTAL_FETCH: function(e) { let { applicationIds: t } = e; t.forEach(e => { d.add(e), _.delete(e) }) }, DETECTABLE_GAME_SUPPLEMENTAL_FETCH_SUCCESS: function(e) { let { applicationIds: t, supplementalGameData: n } = e; t.forEach(e => { d.delete(e), _.delete(e) }), n.forEach(e => { let { application_id: t, cover_image_url: n, name: i, themes: r } = e; u.set(t, { themes: r, coverImageUrl: n, name: i }) }) }, DETECTABLE_GAME_SUPPLEMENTAL_FETCH_FAILURE: function(e) { let { applicationIds: t } = e; t.forEach(e => { d.delete(e), _.add(e) }) } }) }, 581567: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getRunningGameAnalytics: function() { return a }, isVerifiedGameExecutable: function() { return o }, removeExecutablePathPrefix: function() { return s } }); var i = n("77498"), r = n("358085"); function s(e) { var t; return ((t = (t = e).toLowerCase()).endsWith("/") && (t = t.slice(0, -1)), t).split("/").slice(-2).join("/") } function a(e) { var t, n; if (null == e) return { gameName: void 0, gameId: void 0, exe: void 0, distributor: void 0 }; let r = i.default.getGameByName(e.name), a = "exePath" in e ? e.exePath : e.exe; return { gameName: null !== (t = e.name) && void 0 !== t ? t : void 0, gameId: null == r ? void 0 : r.id, exe: null != a ? s(a) : void 0, distributor: null !== (n = e.distributor) && void 0 !== n ? n : void 0 } } function o(e, t) { if (null == e || null == t) return !1; let n = (0, r.getPlatformName)(); return t.some(t => t.os === n && t.name === s(e)) } }, 696287: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("846519"), r = n("147913"), s = n("77498"), a = n("19780"), o = n("626135"), l = n("70956"), u = n("581567"), d = n("594190"), _ = n("981631"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = 5 * l.default.Millis.MINUTE; class I extends r.default { _terminate() { this.stopHeartbeat() } maybeStartHeartbeat() { !this.heartbeatInterval.isStarted() && (this.logRunningGameHeartbeats(), this.heartbeatInterval.start(E, this.logRunningGameHeartbeats)) } stopHeartbeat() { this.heartbeatInterval.stop(), this.runningGameKeys.clear() } handlePostConnectionOpen() { d.default.getRunningGames().length > 0 && this.maybeStartHeartbeat() } constructor(...e) { super(...e), c(this, "heartbeatInterval", new i.Interval), c(this, "runningGameKeys", new Set), c(this, "actions", { RUNNING_GAMES_CHANGE: e => this.handleRunningGamesChanged(e), LOGOUT: () => this.stopHeartbeat(), CONNECTION_CLOSED: () => this.stopHeartbeat(), POST_CONNECTION_OPEN: () => this.handlePostConnectionOpen() }), c(this, "handleRunningGamesChanged", e => { let { games: t } = e; if (0 === t.length) { this.stopHeartbeat(); return } this.maybeStartHeartbeat() }), c(this, "logRunningGameHeartbeats", () => { let e = d.default.getRunningGames(), t = { rtc_connection_id: a.default.getRTCConnectionId(), media_session_id: a.default.getMediaSessionId() }, n = new Set; e.forEach(e => { var i, r; let a = (0, d.gameKey)(e), l = !this.runningGameKeys.has(a), c = null !== (r = e.id) && void 0 !== r ? r : null === (i = s.default.getGameByName(e.name)) || void 0 === i ? void 0 : i.id; o.default.track(_.AnalyticEvents.RUNNING_GAME_HEARTBEAT, { game_id: c, game_name: e.name, game_distributor: e.distributor, game_executable: (0, u.removeExecutablePathPrefix)(e.exePath), game_detection_enabled: (0, d.isDetectionEnabled)(e), initial_heartbeat: l, ...t }), n.add((0, d.gameKey)(e)) }), this.runningGameKeys = n }) } } t.default = new I }, 594190: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { gameKey: function() { return ei }, getOverlayGameStatus: function() { return er }, isDetectionEnabled: function() { return es }, transformForGameSettings: function() { return el } }), n("47120"), n("653041"), n("724458"), n("757143"), n("733860"); var r, s, a, o, l = n("392711"), u = n.n(l), d = n("913527"), _ = n.n(d), c = n("442837"), E = n("433517"), I = n("570140"), T = n("593472"), f = n("726542"), S = n("710845"), h = n("630699"), A = n("855403"), m = n("454991"), N = n("77498"), p = n("283595"), O = n("417363"), C = n("626135"), R = n("70956"), g = n("877481"), L = n("823379"), v = n("358085"), D = n("998502"), M = n("145597"), y = n("370862"), P = n("981631"), U = n("987650"); let b = new S.default("RunningGameStore"), G = "RunningGameStore", w = [{ executables: [{ os: "win32", name: "obs/obs.exe" }, { os: "win32", name: "obs32.exe" }, { os: "win32", name: "obs64.exe" }, { os: "darwin", name: "OBS.app" }, { os: "linux", name: "obs" }], name: "OBS", streamerTool: !0 }, { executables: [{ os: "win32", name: "XSplit.Gamecaster.exe" }, { os: "win32", name: "XSplit.Core.exe" }, { os: "win32", name: "Gamecaster.exe" }], name: "XSplit", streamerTool: !0 }, { executables: [{ os: "win32", name: "bebo.exe" }], name: "Bebo", streamerTool: !0 }, { executables: [{ os: "win32", name: "Streamlabs OBS.exe" }, { os: "win32", name: "Streamlabs Desktop.exe" }, { os: "darwin", name: "Streamlabs Desktop.app" }], name: "Streamlabs Desktop", streamerTool: !0 }, { executables: [{ os: "win32", name: "TwitchStudio.exe" }, { os: "darwin", name: "Twitch Studio.app" }], name: "Twitch Studio", streamerTool: !0 }, { executables: [{ os: "win32", name: "Spotify.exe" }, { os: "darwin", name: "Spotify.app" }, { os: "linux", name: "spotify" }], name: f.default.get(P.PlatformTypes.SPOTIFY).name }], k = !0, B = new Set, V = [], x = [], F = [], H = null, Y = [], j = {}, W = {}, K = { gamesSeen: [], gameOverrides: {}, enableOverlay: {}, enableDetection: {} }, z = function() {}, Z = {}, X = 0, Q = null, q = null, J = {}; function $(e, t, n) { let i = e[t]; void 0 !== i && (delete e[t], e[n] = i) } function ee(e, t) { null != t.lastLaunched ? e.lastLaunched = t.lastLaunched : null != t.start && (e.lastLaunched = t.start) } function et(e) { return w.some(t => t.name === e.name && !0 === t.streamerTool) } function en() { if (F.length > 0) { let e = H; H = F[0], null != e && H.pid === e.pid ? H.start = e.start : H.start = Date.now() } else H = null; let e = []; for (let t of F) !(t.pid in J) && (J[t.pid] = t, e.push(t)); let t = []; for (let e of Object.values(J)) !F.some(t => t.pid === e.pid) && (t.push(e), delete J[e.pid]); b.info("games", { runningGames: F, added: e, removed: t, previousGames: J }), I.default.dispatch({ type: "RUNNING_GAMES_CHANGE", games: F, added: e, removed: t }) } function ei(e) { let t = null != e.name ? e.name : ""; return "".concat(e.exePath, ":").concat(t) } function er(e) { if (e.isLauncher) return { source: y.OverlayGameStatusSource.LAUNCHER, enabled: !1, overlayMethod: U.OverlayMethod.Disabled }; let t = N.default.getGameByName(e.name); if (null != t) { let e = p.default.getActiveLibraryApplication(t.id); if (null != e) return { source: y.OverlayGameStatusSource.LIBRARY_APPLICATION, enabled: e.isOverlayEnabled(), overlayMethod: U.OverlayMethod.Disabled } } let n = h.isOOPExperimentEnabled() && (0, M.supportsOutOfProcess)() && !m.OverlayStoredSettings.legacyEnabled, i = n ? U.OverlayMethod.OutOfProcess : U.OverlayMethod.Hook, r = K.enableOverlay[ei(e)]; if (null != r) return { source: y.OverlayGameStatusSource.USER_OVERRIDE, enabled: r, overlayMethod: i }; let s = null == e.id ? null : Z[e.id]; return null != s ? { source: y.OverlayGameStatusSource.DATABASE, enabled: s.enabled || n, overlayMethod: i } : { source: y.OverlayGameStatusSource.DEFAULT, enabled: !1, overlayMethod: U.OverlayMethod.Hook } } function es(e) { let t = K.enableDetection[ei(e)]; return null == t || t } function ea(e) { return !e.hidden && es(e) } function eo() { E.Storage.set(G, K) } function el(e) { var t, n; let i = { ...e, played: null != e.lastFocused && 0 !== e.lastFocused ? _()(new Date(e.lastFocused * R.default.Millis.SECOND)).fromNow() : " ", overlay: (t = e, null !== (n = K.enableOverlay[ei(t)]) && void 0 !== n ? n : er(t).enabled), verified: N.default.isGameInDatabase(e), detectable: es(e) }; if (null != e.id && null != Z[e.id]) { let t = Z[e.id]; i.overlayWarn = t.warn } return i } function eu() { let e = !1; return V = u().values(p.default.libraryApplications).reduce((t, n) => { let i = N.default.getDetectableGame(n.id); if (null == i) return t; for (let r of O.default.getLaunchOptions(n.id, n.branchId)) { let s = "".concat(n.id, ":").concat(n.branchId); !B.has(s) && (e = !0, B.add(s)); let { fullExecutablePath: a } = r, o = a.replace(/\\/g, "/").toLowerCase(); j[o] = i.id, t.push({ id: i.id, name: i.name, exePath: o, cmdLine: "", lastFocused: 0, add: !0 }) } return t }, []), e && ed(), e } function ed() { if (!__OVERLAY__ && v.isPlatformEmbedded) { let e = [...V, ...u().values(K.gameOverrides)]; D.default.setGameCandidateOverrides(e) } } function e_(e) { null != e && 0 !== e.length && (e.forEach(e => { if (K.gamesSeen.some(t => { if (t.name === e.name) { if (e.lastFocused) { t.lastFocused = e.lastFocused; let n = K.gameOverrides[ei(e)]; null != n && (n.lastFocused = e.lastFocused) } return ee(t, e), !0 } return !1 })); else { if (e.hidden) return; K.gamesSeen.unshift(function(e) { let t = { exePath: e.exePath, cmdLine: e.cmdLine, lastFocused: e.lastFocused }; return null != e.id && (t.id = e.id), null != e.nativeProcessObserverId && (t.nativeProcessObserverId = e.nativeProcessObserverId), null != e.name && (t.name = e.name), e.add && (t.add = !0), e.block && (t.block = !0), ee(t, e), t }(e)) } }), K.gamesSeen.sort((e, t) => t.lastFocused - e.lastFocused), eo(), g.default.setRecentGames(ec().map(e => el(e)))) } function ec() { let e = u().values(K.gameOverrides); return K.gamesSeen.filter(e => void 0 === K.gameOverrides[ei(e)]).concat(e) }!__OVERLAY__ && (0, v.isDesktop)() && (z = function() { let e = [], t = new Set; i = {}; let n = N.default.games; for (let e of n) { var r, s, a, o; Z[e.id] = { compatibilityHook: null !== (r = e.overlayCompatibilityHook) && void 0 !== r ? r : T.DEFAULT_OVERLAY_OPTIONS.compatibilityHook, warn: null !== (s = e.overlayWarn) && void 0 !== s ? s : T.DEFAULT_OVERLAY_OPTIONS.warn, enabled: null !== (a = e.overlay) && void 0 !== a ? a : T.DEFAULT_OVERLAY_OPTIONS.enabled, allowHook: null !== (o = e.hook) && void 0 !== o ? o : T.DEFAULT_OVERLAY_OPTIONS.allowHook, supportsOutOfProcessOverlay: e.supportsOutOfProcessOverlay } } [...n, ...w].forEach(n => { var i; let r = null != n.executables ? null === (i = n.executables) || void 0 === i ? void 0 : i.filter(e => { let { os: t } = e; return t === (0, v.getPlatformName)() }) : [], s = {}; r.forEach(e => { let n = null != e.arguments && e.arguments.length > 0 ? e.arguments : "null"; null == s[n] && (s[n] = []), s[n].push(e.name), e.isLauncher && t.add(e.name) }), Object.keys(s).forEach(t => e.push({ name: n.name, id: n.id, executables: s[t], cmdLine: "null" !== t ? t : null })) }), e = e.filter(e => null != e.executables && e.executables.length > 0), D.default.setObservedGamesCallback(e, e => { let n = [], r = {}; e = e.filter(e => (e.distributor = function(e) { if (null != j[e.exePath]) return P.Distributors.DISCORD; if (/steamapps/.test(e.cmdLine)) return P.Distributors.STEAM; if (/-epicapp/.test(e.cmdLine)) return P.Distributors.EPIC; return e.distributor }(e), e.isLauncher = t.has(e.exeName), e.isLauncher && null != e.id && (r[e.id] = e), e.windowHandle = function(e, t) { if (void 0 === t) { let t = D.default.getDiscordUtils(); if (null != t && null != t.getWindowHandleFromPid) { let n = t.getWindowHandleFromPid(e); return null != n && "0" !== n ? n : null } return null } return "0" === t ? null : t }(e.pid, e.windowHandle), null == w.find(t => { let { name: n } = t; return n === e.name }) || (n.push(e), !1))); let s = n.filter(et).length; s !== X && (X = s, I.default.dispatch({ type: "RUNNING_STREAMER_TOOLS_CHANGE", count: X })), F = e, Y = n, i = r, en() }), ed() }); class eE extends(r = c.default.Store) { initialize() { var e, t, n, i; let r = null !== (e = E.Storage.get(G)) && void 0 !== e ? e : { gamesSeen: [], gameOverrides: {}, enableOverlay: {}, enableDetection: {} }; K.gameOverrides = {}; let s = !1; if (u().values(null !== (t = r.gameOverrides) && void 0 !== t ? t : {}).forEach(e => { let t = ei(e); K.gameOverrides[t] = e }), K.enableOverlay = null !== (n = r.enableOverlay) && void 0 !== n ? n : {}, K.enableDetection = null !== (i = r.enableDetection) && void 0 !== i ? i : {}, ed(), Array.isArray(r.gamesSeen)) for (let e of r.gamesSeen) "number" == typeof e.id && (e.nativeProcessObserverId = e.id, delete e.id, s = !0); e_(r.gamesSeen), this.waitFor(N.default), this.syncWith([p.default, N.default, O.default], u().throttle(eu, 1e3)), s && eo() } getVisibleGame() { return null == H || ea(H) ? H : null } getCurrentGameForAnalytics() { return H } getVisibleRunningGames() { return F.filter(ea) } getRunningGames() { return F } getRunningDiscordApplicationIds() { let e = []; for (let t of F) null != j[t.exePath] && e.push(j[t.exePath]); return e } getRunningVerifiedApplicationIds() { return this.getRunningGames().map(e => N.default.getGameByName(e.name)).filter(L.isNotNullish).map(e => e.id) } getGameForPID(e) { var t; return null !== (t = F.find(t => t.pid === e)) && void 0 !== t ? t : null } getLauncherForPID(e) { let t = this.getGameForPID(e); return null != t ? null != t.id ? i[t.id] : null : null } getOverlayOptionsForPID(e) { let t = this.getGameForPID(e); return null == t || t.isLauncher || null == t.id ? null : { ...Z[t.id] } } shouldElevateProcessForPID(e) { return null != Q && Q === e } shouldContinueWithoutElevatedProcessForPID(e) { return null != q && q === e } getCandidateGames() { return x.filter(e => e.hidden || null == e.id).filter(e => void 0 === K.gameOverrides[ei(e)]) } getGamesSeen(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = ec(); if (e) { let e = this.getVisibleGame(); if (null != e) { let t = ei(e); n = n.filter(e => ei(e) !== t) } } return t && n.sort((e, t) => t.lastFocused - e.lastFocused), n } getSeenGameByName(e) { return K.gamesSeen.find(t => null != t.name && t.name.toLowerCase() === e.toLowerCase()) } isObservedAppRunning(e) { return Y.some(t => t.name === e) } getOverrides() { return Object.values(K.gameOverrides) } getOverrideForGame(e) { return K.gameOverrides[ei(e)] } getGameOverlayStatus(e) { if (e.hidden || e.isLauncher || e.elevated || e.sandboxed) return b.verbose("getGameOverlayStatus: Overlay not supported.", e), null; let t = er(e); return t.enabled ? t : null } getObservedAppNameForWindow(e) { var t, n; return null !== (n = null === (t = Y.find(t => (0, A.default)(e, t.windowHandle))) || void 0 === t ? void 0 : t.name) && void 0 !== n ? n : null } get canShowAdminWarning() { return k } isDetectionEnabled(e) { return es(e) } } o = "RunningGameStore", (a = "displayName") in(s = eE) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new eE(I.default, { RUNNING_GAMES_CHANGE: function(e) { e_(F) }, CANDIDATE_GAMES_CHANGE: function(e) { x = e.games }, PERMISSION_CLEAR_PTT_ADMIN_WARNING: function() { k = !1 }, PERMISSION_REQUEST_ELEVATED_PROCESS: function(e) { let { pid: t } = e; Q = t, q = null }, PERMISSION_CLEAR_ELEVATED_PROCESS: function() { Q = null }, PERMISSION_CONTINUE_NONELEVATED_PROCESS: function(e) { let { pid: t } = e; q = t, Q = null }, RUNNING_GAME_ADD_OVERRIDE: function(e) { let t; let n = e.pid, i = F.find(e => e.pid === n); if (null == i) { let e = x.find(e => e.pid === n); if (null == e) return; (i = { ...e }).hidden = !1, F.push(i), t = ei(i) } else t = ei(i), i.hidden && (W[t] = !0), i.hidden = !1; (null == i.lastFocused || 0 === i.lastFocused) && (i.lastFocused = Math.floor(Date.now() / 1e3)), K.gameOverrides[t] = { ...i, add: !0 }, e_(F), ed(), eo(), en() }, RUNNING_GAME_TOGGLE_OVERLAY: function(e) { if (K.enableOverlay[ei(e.game)] = e.newEnabledValue, eo(), !__OVERLAY__) { let t = null != e.game.id ? N.default.getDetectableGame(e.game.id) : null; null != t && C.default.track(P.AnalyticEvents.OVERLAY_TOGGLED, { enabled: e.newEnabledValue, setting_type: "overlay toggled - game", application_id: t.id, application_name: t.name }) } }, RUNNING_GAME_TOGGLE_DETECTION: function(e) { let { game: t } = e, n = es(t); K.enableDetection[ei(t)] = !n, eo(), C.default.track(P.AnalyticEvents.USER_SETTINGS_GAME_DETECTION_TOGGLE, { enabled: !n }) }, RUNNING_GAME_EDIT_NAME: function(e) { let t = ei(e.game), n = K.gameOverrides[t]; if (null == n) { var i; (n = { name: (i = e.game).name, exePath: i.exePath, cmdLine: i.cmdLine, lastFocused: i.lastFocused }).add = !0 } n.name = e.newName; let r = ei(n); delete K.gameOverrides[t], K.gameOverrides[r] = n, $(K.enableOverlay, t, r), $(K.enableDetection, t, r), $(W, t, r), K.gamesSeen.forEach(n => { ei(n) === t && (n.name = e.newName) }); let s = !1; F.forEach(n => { ei(n) === t && (n.name = e.newName, s = !0) }), ed(), eo(), s && en() }, RUNNING_GAME_DELETE_ENTRY: function(e) { let t = ei(e.game); delete K.gameOverrides[t], delete K.enableOverlay[t], delete K.enableDetection[t], K.gamesSeen = K.gamesSeen.filter(e => ei(e) !== t), W[t] && (F.forEach(e => { t === ei(e) && (e.hidden = !0) }), delete W[t], en()), ed(), eo() }, GAMES_DATABASE_UPDATE: z, GAME_LAUNCH_SUCCESS: function(e) { var t; if (__OVERLAY__ || !v.isPlatformEmbedded) return; let n = D.default.getDiscordUtils().notifyGameLaunched; if (null == n) return; let i = N.default.getDetectableGame(e.applicationId); null != i && n(i.id, i.name, null !== (t = e.pids) && void 0 !== t ? t : []) }, GAME_DETECTION_WATCH_CANDIDATE_GAMES_START: function() { ed() } }) }, 370862: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { OverlayGameStatusSource: function() { return i } }), (r = i || (i = {})).LAUNCHER = "LAUNCHER", r.LIBRARY_APPLICATION = "LIBRARY_APPLICATION", r.USER_OVERRIDE = "USER_OVERRIDE", r.DATABASE = "DATABASE", r.DEFAULT = "DEFAULT" }, 114957: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("224706"), r = n("978085"), s = n("147913"), a = n("283595"), o = n("358085"); class l extends s.default { handlePostConnectionOpen() { (0, o.isDesktop)() && (!a.default.fetched && (0, r.fetchLibrary)(), i.default.getDetectableGames()) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: this.handlePostConnectionOpen }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new l }, 938038: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GameDisplayModeStorage: function() { return a } }); var i = n("433517"), r = n("593472"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { save() { let e = { games: this.games }; i.Storage.set(a.storageKey, e) } static load() { return null == a._loaded && (a._loaded = a.loadInternal()), a._loaded } static loadInternal() { let e = i.Storage.get(a.storageKey); if (null != e) { var t; return new a(null !== (t = e.games) && void 0 !== t ? t : {}) } let n = new a({}); return n.save(), n } static getGameSettings(e) { var t; return null == e ? null : null !== (t = a.load().games[e]) && void 0 !== t ? t : null } static updateGameSettings(e, t) { if (null == e) return; let n = a.load(), i = n.games[e]; if (null == i) { n.games[e] = { screen: r.RunningProcessFullscreenType.UNKNOWN, date: Date.now(), ...t }, n.save(); return } "boolean" == typeof t.disabled && (i.disabled = t.disabled), "number" == typeof t.screen && (i.screen = t.screen), i.date = Date.now(), n.save() } static isPromptingForGameDisable(e) { var t, n; return null !== (n = null === (t = a.getGameSettings(e)) || void 0 === t ? void 0 : t.disabled) && void 0 !== n && n } static setPromptingForGameDisable(e, t) { a.updateGameSettings(e, { disabled: t }) } static getGameDisplayMode(e) { var t, n; return null == e ? null : null !== (n = null === (t = a.getGameSettings(e)) || void 0 === t ? void 0 : t.screen) && void 0 !== n ? n : null } static setGameDisplayMode(e, t) { a.updateGameSettings(e, { screen: t }) } static clearOldGameSettings() { let e = a.load(); if (null == e.games) return; let t = Date.now() - 31536e6; for (let n in e.games) e.games[n].date < t && delete e.games[n]; e.save() } static reset() { let e = a.load(); e.games = {}, e.save() } static isTestMode() { var e; return e = !!window.__GAME_DISPLAY_MODE_TEST_MODE__, e } static isVerbose() { var e; return e = !!window.__GAME_DISPLAY_MODE_DEBUG__, e } constructor(e) { s(this, "games", void 0), this.games = e } } s(a, "_loaded", null), s(a, "storageKey", "GameDisplayModeStorage"), setTimeout(() => a.clearOldGameSettings(), 6e4) }, 645644: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"); var i, r, s = n("259443"), a = n("379649"), o = n("570140"), l = n("593472"), u = n("147913"), d = n("579806"), _ = n("581567"), c = n("594190"), E = n("449224"), I = n("808506"), T = n("237997"), f = n("626135"), S = n("998502"), h = n("830917"), A = n("554174"), m = n("938038"), N = n("981631"), p = n("987650"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = new s.Logger("OverlayUsageStatsManager"); C.verbose = () => {}; class R { increment(e) { ++this.actions[e] } getAnalytics(e, t) { let n = this.actions[p.OverlayNotificationAction.Viewed], i = this.actions[p.OverlayNotificationAction.Clicked]; return 0 === n && 0 === i ? null : { event_uuid: t, notification_type: e, viewed_count: n, clicked_count: i } } constructor() { O(this, "actions", { [p.OverlayNotificationAction.Viewed]: 0, [p.OverlayNotificationAction.Clicked]: 0 }) } } class g { static makeEmptyGroupAnalytics() { return { [p.OverlayNotificationGroup.Nudge]: 0, [p.OverlayNotificationGroup.TextChat]: 0, [p.OverlayNotificationGroup.VoiceCall]: 0, [p.OverlayNotificationGroup.Activity]: 0, [p.OverlayNotificationGroup.Clips]: 0, [p.OverlayNotificationGroup.Other]: 0 } } increment(e, t) { let n = this.groupCounters[t]; if (null == n) { C.error("NotificationCounter: Unknown notification action: ".concat(t)); return } let i = (0, p.getOverlayNotificationGroup)(e); if (!(i in n)) { C.error("NotificationCounter: Unknown notification action: ".concat(e)); return }++n[i], ++this.actionCounters[t]; let r = this.counters[e]; if (null == r) { C.error("NotificationCounter: Unknown notification type: ".concat(e)); return } r.increment(t) } getAnalytics() { let e = this.groupCounters[p.OverlayNotificationAction.Viewed], t = this.groupCounters[p.OverlayNotificationAction.Clicked]; return { notices_viewed: this.actionCounters[p.OverlayNotificationAction.Viewed], notices_clicked: this.actionCounters[p.OverlayNotificationAction.Clicked], notice_nudge_viewed: e[p.OverlayNotificationGroup.Nudge], notice_text_chat_viewed: e[p.OverlayNotificationGroup.TextChat], notice_voice_call_viewed: e[p.OverlayNotificationGroup.VoiceCall], notice_activity_viewed: e[p.OverlayNotificationGroup.Activity], notice_clips_viewed: e[p.OverlayNotificationGroup.Clips], notice_other_viewed: e[p.OverlayNotificationGroup.Other], notice_nudge_clicked: t[p.OverlayNotificationGroup.Nudge], notice_text_chat_clicked: t[p.OverlayNotificationGroup.TextChat], notice_voice_call_clicked: t[p.OverlayNotificationGroup.VoiceCall], notice_activity_clicked: t[p.OverlayNotificationGroup.Activity], notice_clips_clicked: t[p.OverlayNotificationGroup.Clips], notice_other_clicked: t[p.OverlayNotificationGroup.Other] } } getCounterAnalytics(e) { return Object.entries(this.counters).map(t => { let [n, i] = t; return i.getAnalytics(n, e) }).filter(e => null != e) } constructor() { O(this, "actionCounters", { [p.OverlayNotificationAction.Viewed]: 0, [p.OverlayNotificationAction.Clicked]: 0 }), O(this, "groupCounters", { [p.OverlayNotificationAction.Viewed]: g.makeEmptyGroupAnalytics(), [p.OverlayNotificationAction.Clicked]: g.makeEmptyGroupAnalytics() }), O(this, "counters", { [p.OverlayNotificationType.NewsNudge]: new R, [p.OverlayNotificationType.WelcomeNudge]: new R, [p.OverlayNotificationType.TextChat]: new R, [p.OverlayNotificationType.ActivityUserJoin]: new R, [p.OverlayNotificationType.ActivityInvite]: new R, [p.OverlayNotificationType.IncomingCall]: new R, [p.OverlayNotificationType.GoLiveNudge]: new R, [p.OverlayNotificationType.GoLiveNonVoiceNudge]: new R, [p.OverlayNotificationType.OverlayCrashed]: new R, [p.OverlayNotificationType.StartBroadcastNotification]: new R, [p.OverlayNotificationType.ClipsReminderNotification]: new R, [p.OverlayNotificationType.ClipsNotification]: new R, [p.OverlayNotificationType.KeybindIndicatorsNotification]: new R }) } }(r = i || (i = {}))[r.Voice = 0] = "Voice", r[r.Text = 1] = "Text"; class L { static makeEmptyAnalytics() { return { initialized: !1, pinnedToggledCount: 0, visibleDuration: new a.StopWatch, pinned: !1 } } getByType(e) { return this.types[e] } getByWidget(e) { switch (e) { case N.OverlayWidgets.VOICE: return this.getByType(0); case N.OverlayWidgets.TEXT: return this.getByType(1); default: return null } } getAnalytics() { let e = this.types[0], t = this.types[1]; return { widget_voice_pin_toggle_count: e.pinnedToggledCount, widget_voice_visible_duration: e.visibleDuration.elapsed().asMilliseconds(), widget_voice_pinned: e.pinned, widget_text_pin_toggle_count: t.pinnedToggledCount, widget_text_visible_duration: t.visibleDuration.elapsed().asMilliseconds(), widget_text_pinned: t.pinned } } constructor() { O(this, "types", { 0: L.makeEmptyAnalytics(), 1: L.makeEmptyAnalytics() }) } } class v { update() { let e = this.game, t = S.default.GetWindowFullscreenTypeByPid(e.pid, e.name, e.fullscreenType); if (t !== this.lastscreenType) { if (!(t in this.counters)) { C.error("ScreenTypeAnalytics: Unknown screen type: ".concat(t), t); return } this.counters[t].start(), null != this.lastscreenType && this.counters[this.lastscreenType].stop(), this.lastscreenType = t } } getAnalytics() { var e, t; let n = e => this.counters[e].elapsed().asMilliseconds(), i = { [l.RunningProcessFullscreenType.UNKNOWN]: n(l.RunningProcessFullscreenType.UNKNOWN), [l.RunningProcessFullscreenType.WINDOWED]: n(l.RunningProcessFullscreenType.WINDOWED), [l.RunningProcessFullscreenType.MAXIMIZED]: n(l.RunningProcessFullscreenType.MAXIMIZED), [l.RunningProcessFullscreenType.BORDERLESS_FULLSCREEN]: n(l.RunningProcessFullscreenType.BORDERLESS_FULLSCREEN), [l.RunningProcessFullscreenType.FULLSCREEN]: n(l.RunningProcessFullscreenType.FULLSCREEN), [l.RunningProcessFullscreenType.MINIMIZED]: n(l.RunningProcessFullscreenType.MINIMIZED) }, r = Object.entries(i).sort((e, t) => { let [n, i] = e, [r, s] = t; return s - i })[0], s = parseInt(r[0], 10), a = isNaN(s) ? l.RunningProcessFullscreenType.UNKNOWN : s; isNaN(s) && C.error("ScreenTypeAnalytics: Unknown most used screen type: ".concat(r), i); let o = m.GameDisplayModeStorage.getGameDisplayMode(null !== (e = this.game.name) && void 0 !== e ? e : this.game.id); m.GameDisplayModeStorage.setGameDisplayMode(null !== (t = this.game.name) && void 0 !== t ? t : this.game.id, a); let u = { screentype_unknown_duration: i[l.RunningProcessFullscreenType.UNKNOWN], screentype_windowed_duration: i[l.RunningProcessFullscreenType.WINDOWED], screentype_maximized_duration: i[l.RunningProcessFullscreenType.MAXIMIZED], screentype_borderless_fullscreen_duration: i[l.RunningProcessFullscreenType.BORDERLESS_FULLSCREEN], screentype_fullscreen_duration: i[l.RunningProcessFullscreenType.FULLSCREEN], screentype_minimized_duration: i[l.RunningProcessFullscreenType.MINIMIZED] }; return { ...u, screentype_global_supported_duration: u.screentype_windowed_duration + u.screentype_maximized_duration + u.screentype_borderless_fullscreen_duration, screentype_global_unsupported_duration: u.screentype_fullscreen_duration, screentype_initial: l.RunningProcessFullscreenType[this.game.fullscreenType], screentype_most_used: l.RunningProcessFullscreenType[a], screentype_most_used_previous: null == o ? null : l.RunningProcessFullscreenType[o], game_display_mode_is_adjustment_supported: S.default.GameDisplayModeIsGameSupported(this.game.name) } } destroy() { clearInterval(this.updateScreenInterval) } constructor(e) { O(this, "game", void 0), O(this, "counters", void 0), O(this, "lastscreenType", void 0), O(this, "updateScreenInterval", void 0), this.game = e, this.counters = { [l.RunningProcessFullscreenType.UNKNOWN]: new a.StopWatch, [l.RunningProcessFullscreenType.WINDOWED]: new a.StopWatch, [l.RunningProcessFullscreenType.MAXIMIZED]: new a.StopWatch, [l.RunningProcessFullscreenType.BORDERLESS_FULLSCREEN]: new a.StopWatch, [l.RunningProcessFullscreenType.FULLSCREEN]: new a.StopWatch, [l.RunningProcessFullscreenType.MINIMIZED]: new a.StopWatch }, this.lastscreenType = void 0, this.update(), this.updateScreenInterval = setInterval(() => this.update(), 1e4) } } class D { static get debug() { return { gamesByPid: D.gamesByPid, gamesByName: D.gamesByName } } set successfullyShown(e) { this._successfullyShown = e } static getGameName(e) { var t, n; return null !== (n = null !== (t = e.name) && void 0 !== t ? t : e.id) && void 0 !== n ? n : null } static ignoreGame(e) { var t; return null !== (t = e.isLauncher) && void 0 !== t && t } static create(e) { let t = D.getGameName(e); if (D.ignoreGame(e) || null == t) return null; let n = new D({ ...e }); return n.gameConcurrentGameCount = Object.values(D.gamesByPid).length, D.gamesByPid[e.pid] = n, D.gamesByName[t] = n, n } static getByName(e) { return null == e ? null : D.gamesByName[e] } static getByPid(e) { return D.gamesByPid[e] } static async destroy(e) { let t = D.getGameName(e); if (D.ignoreGame(e) || null == t) return; let n = D.gamesByPid[e.pid]; if (null != n) { n.screenAnalytics.destroy(); let t = await n.getAnalytics(); for (let e of (f.default.track(N.AnalyticEvents.OVERLAY_USAGE_STATS, t.usage), t.notifications)) f.default.track(N.AnalyticEvents.OVERLAY_USAGE_NOTIFICATION_STATS, e); C.verbose("OVERLAY_USAGE_STATS: ".concat(e.name), t), delete D.gamesByPid[e.pid] } delete D.gamesByName[t] } async getAnalytics() { var e, t, n, i, r, s, a; let o = { setting_is_enabled: I.default.enabled, setting_method: null == this.overlayStatus ? null : p.OverlayMethod[this.overlayStatus.overlayMethod], setting_display_user: T.default.getDisplayUserMode(), setting_display_name: T.default.getDisplayNameMode(), setting_avatar_size: T.default.getAvatarSizeMode(), setting_notification_position: T.default.getNotificationPositionMode(), setting_chat_notification: T.default.getTextChatNotificationMode() }, l = (0, c.getOverlayGameStatus)(this.game), u = (0, _.getRunningGameAnalytics)(this.game); return { usage: { event_uuid: this.uuid, overlay_usage_stats_version: 3, ...this.notificationAnalytics.getAnalytics(), ...this.widgetAnalytics.getAnalytics(), ...this.screenAnalytics.getAnalytics(), ...o, overlay_status_game_enabled: l.enabled, overlay_status_game_source: l.source, game_name: null !== (n = u.gameName) && void 0 !== n ? n : null, game_id: null !== (i = u.gameId) && void 0 !== i ? i : null, game_exe: null !== (r = u.exe) && void 0 !== r ? r : null, game_elevated: this.game.elevated, game_is_launcher: null !== (s = this.game.isLauncher) && void 0 !== s && s, game_duration: this.gameTimer.elapsed().asMilliseconds(), game_focused_duration: this.gameFocusedTimer.elapsed().asMilliseconds(), game_focused_change_count: this.gameFocusChangedCount, game_concurrent_game_count: this.gameConcurrentGameCount, ui_unlocked_duration: this.unlockedTimer.elapsed().asMilliseconds(), ui_unlocked_count: this.uiUnlockedCount, ui_locked_count: this.uiLockedCount, soundboard_shown_duration: this.soundboardShownTimer.elapsed().asMilliseconds(), soundboard_shown_count: this.soundboardShownCount, soundboard_keep_open_count: this.soundboardKeepOpenCount, hardware_display_count: null !== (a = await (null === d.default || void 0 === d.default ? void 0 : null === (t = d.default.hardware) || void 0 === t ? void 0 : null === (e = t.getDisplayCount) || void 0 === e ? void 0 : e.call(t))) && void 0 !== a ? a : null, message_ack_count: this.overlayMessageAckCount, message_created_count: this.overlayMessageCreateCount, desktop_message_ack_count: this.desktopMessageAckCount, desktop_message_created_count: this.desktopMessageCreateCount, desktop_focused_duration: this.desktopFocusedTimer.elapsed().asMilliseconds(), desktop_focused_change_count: this.desktopFocusChangedCount, rtc_connection_duration: this.rtcConnectionTimer.elapsed().asMilliseconds(), mute_toggled_count: this.muteToggledCount, overlay_successfully_shown: this._successfullyShown }, notifications: this.notificationAnalytics.getCounterAnalytics(this.uuid) } } setLocked(e) { e ? (this.unlockedTimer.stop(), ++this.uiLockedCount) : (this.unlockedTimer.start(), ++this.uiUnlockedCount) } static gameSetAllUnfocused() { for (let e of Object.values(D.gamesByPid)) e.gameFocusedTimer.stop() } static incrementConcurrentGameCount() { for (let e of Object.values(D.gamesByPid)) ++e.gameConcurrentGameCount } gameSetFocused(e) { this.gameFocusedTimer.toggle(e), e && ++this.gameFocusChangedCount } setSoundboardShown(e, t) { this.soundboardShownTimer.toggle(e), e && (++this.soundboardShownCount, t && ++this.soundboardKeepOpenCount) } static handleMuteToggled() { for (let e of Object.values(D.gamesByPid)) ++e.muteToggledCount } static desktopSetFocused(e) { if (e !== D.desktopMainWindowHasFocus) { for (let t of Object.values(D.gamesByPid)) ++t.desktopFocusChangedCount, e && t.desktopFocusedTimer.toggle(e); D.desktopMainWindowHasFocus = e } } static desktopMessageEvent(e) { for (let t of Object.values(D.gamesByPid)) switch (e) { case "ack": ++t.desktopMessageAckCount; break; case "created": ++t.desktopMessageCreateCount } } static toggleRtcConnection(e) { for (let t of Object.values(D.gamesByPid)) t.rtcConnectionTimer.toggle(e) } constructor(e) { O(this, "game", void 0), O(this, "uuid", void 0), O(this, "overlayStatus", void 0), O(this, "notificationAnalytics", void 0), O(this, "widgetAnalytics", void 0), O(this, "screenAnalytics", void 0), O(this, "uiUnlockedCount", void 0), O(this, "uiLockedCount", void 0), O(this, "gameFocusChangedCount", void 0), O(this, "gameConcurrentGameCount", void 0), O(this, "overlayMessageAckCount", void 0), O(this, "overlayMessageCreateCount", void 0), O(this, "gameTimer", void 0), O(this, "gameFocusedTimer", void 0), O(this, "unlockedTimer", void 0), O(this, "rtcConnectionTimer", void 0), O(this, "desktopFocusedTimer", void 0), O(this, "desktopFocusChangedCount", void 0), O(this, "desktopMessageAckCount", void 0), O(this, "desktopMessageCreateCount", void 0), O(this, "soundboardShownTimer", void 0), O(this, "soundboardShownCount", void 0), O(this, "soundboardKeepOpenCount", void 0), O(this, "muteToggledCount", void 0), O(this, "_successfullyShown", void 0), this.game = e, this.uuid = crypto.randomUUID(), this.notificationAnalytics = new g, this.widgetAnalytics = new L, this.uiUnlockedCount = 0, this.uiLockedCount = 0, this.gameFocusChangedCount = 0, this.gameConcurrentGameCount = 0, this.overlayMessageAckCount = 0, this.overlayMessageCreateCount = 0, this.gameTimer = a.StopWatch.startNew(), this.gameFocusedTimer = new a.StopWatch, this.unlockedTimer = new a.StopWatch, this.rtcConnectionTimer = new a.StopWatch, this.desktopFocusedTimer = new a.StopWatch, this.desktopFocusChangedCount = 0, this.desktopMessageAckCount = 0, this.desktopMessageCreateCount = 0, this.soundboardShownTimer = new a.StopWatch, this.soundboardShownCount = 0, this.soundboardKeepOpenCount = 0, this.muteToggledCount = 0, this._successfullyShown = !1, this.screenAnalytics = new v(e), this.overlayStatus = c.default.getGameOverlayStatus(e), D.desktopMainWindowHasFocus && this.desktopFocusedTimer.start(), H.hasConnection() && this.rtcConnectionTimer.start() } } function M(e) { for (let t of (C.verbose("handleRunningGamesChange", e), e.added)) { D.incrementConcurrentGameCount(); let e = D.create(t); C.verbose("handleRunningGamesChange added", t, e) } for (let t of e.removed) D.destroy(t), C.verbose("handleRunningGamesChange removed", t) } function y(e) { let t = D.getByPid(e.pid); if (C.verbose("OVERLAY_SET_UI_LOCKED", t), null == t) { C.error("OVERLAY_SET_UI_LOCKED: Unable to find game", e, D.debug); return } t.setLocked(e.locked) } function P(e) { var t; C.verbose("OVERLAY_NOTIFICATION_EVENT", e); let n = D.getByName(null !== (t = e.gameName) && void 0 !== t ? t : e.gameId); if (null == n) { C.error("OVERLAY_NOTIFICATION_EVENT: Game not found.", e, D.debug); return } n.notificationAnalytics.increment(e.notificationType, e.action) } function U(e) { var t; C.verbose("OVERLAY_WIDGET_CHANGED", e); let n = D.getByName(null !== (t = e.gameName) && void 0 !== t ? t : e.gameId); if (null == n) { C.error("OVERLAY_WIDGET_CHANGED: Game not found", e, D.debug); return } let i = n.widgetAnalytics.getByWidget(e.widgetType); null != i && (!i.initialized && (i.initialized = !0, i.pinned = e.pinned), i.pinned !== e.pinned && ++i.pinnedToggledCount, i.pinned = e.pinned, i.visibleDuration.toggle(e.visible)) } function b(e) { if (C.verbose("OVERLAY_FOCUSED", e), D.gameSetAllUnfocused(), null == e.pid) return; let t = D.getByPid(e.pid); if (null == t) { C.error("OVERLAY_FOCUSED: Game not found", e, D.debug); return } t.gameSetFocused(!0) } function G(e) { var t; C.verbose("SOUNDBOARD_SET_OVERLAY_ENABLED", e); let n = D.getByPid(e.pid); if (null == n) { C.error("SOUNDBOARD_SET_OVERLAY_ENABLED: Game not found", e, D.debug); return } n.setSoundboardShown(e.enabled, !!e.enabled && null !== (t = e.keepOpen) && void 0 !== t && t) } function w(e) { var t; C.verbose("OVERLAY_MESSAGE_EVENT_ACTION", e); let n = D.getByName(null !== (t = e.gameName) && void 0 !== t ? t : e.gameId); if (null == n) { C.error("OVERLAY_MESSAGE_EVENT_ACTION: Game not found", e, D.debug); return } switch (e.eventType) { case "ack": ++n.overlayMessageAckCount; break; case "create": ++n.overlayMessageCreateCount } } function k(e) { C.verbose("MESSAGE_ACKED", e), D.desktopMessageEvent("ack") } function B(e) { e.message.state === N.MessageStates.SENDING && D.desktopMessageEvent("created") } function V(e) { null != (0, A.default)() && (C.verbose("AUDIO_TOGGLE_SELF_MUTE", e), D.handleMuteToggled()) } function x(e) { C.verbose("WINDOW_FOCUS", e); let t = (0, h.getMainWindowId)(); if (e.windowId !== t) { C.verbose("WINDOW_FOCUS: Not main window", { action: e, mainWindowId: t }); return } D.desktopSetFocused(e.focused) } function F(e) { let t = D.getByPid(e.pid); if (null == t) { C.error("OVERLAY_SUCCESSFULLY_SHOWN: Game not found", e, D.debug); return } t.successfullyShown = !0 } O(D, "gamesByPid", {}), O(D, "gamesByName", {}), O(D, "desktopMainWindowHasFocus", document.hasFocus()); class H { static hasConnection() { return H.connections.size > 0 } static handleRTCConnectionState(e) { var t; let n = (null !== (t = e.channelId) && void 0 !== t ? t : "unknown") + e.context; switch (e.state) { case N.RTCConnectionStates.RTC_CONNECTED: H.connections.add(n); break; case N.RTCConnectionStates.DISCONNECTED: H.connections.delete(n) } let i = H.hasConnection(); H.previousHasConnection !== i && (D.toggleRtcConnection(i), H.previousHasConnection = i) } } O(H, "connections", new Set), O(H, "previousHasConnection", !1); class Y { static handleMessageAcked(e) { C.verbose("MESSAGE_ACKED", e); let t = E.default.getGame(); if (null == t) { C.error("Game not found."); return } o.default.dispatch({ type: "OVERLAY_MESSAGE_EVENT_ACTION", eventType: "ack", gameName: t.name, gameId: t.id }) } static handleMessageCreate(e) { if (e.message.state !== N.MessageStates.SENDING) return; C.verbose("MESSAGE_CREATE", e, Error().stack); let t = E.default.getGame(); if (null == t) { C.error("Game not found."); return } o.default.dispatch({ type: "OVERLAY_MESSAGE_EVENT_ACTION", eventType: "create", gameName: t.name, gameId: t.id }) } } class j extends u.default { constructor(...e) { super(...e), O(this, "actions", __OVERLAY__ ? { MESSAGE_ACKED: Y.handleMessageAcked, MESSAGE_CREATE: Y.handleMessageCreate } : { OVERLAY_FOCUSED: b, OVERLAY_NOTIFICATION_EVENT: P, OVERLAY_SET_UI_LOCKED: y, OVERLAY_WIDGET_CHANGED: U, OVERLAY_MESSAGE_EVENT_ACTION: w, RUNNING_GAMES_CHANGE: M, SOUNDBOARD_SET_OVERLAY_ENABLED: G, MESSAGE_ACKED: k, MESSAGE_CREATE: B, WINDOW_FOCUS: x, RTC_CONNECTION_STATE: H.handleRTCConnectionState, AUDIO_TOGGLE_SELF_MUTE: V, OVERLAY_SUCCESSFULLY_SHOWN: F }) } } t.default = new j }, 592745: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"); let u = new Set, d = {}; function _(e) { let { applicationId: t } = e; u.add(t) } function c(e) { let { applicationId: t } = e; u.delete(t) } class E extends(i = o.default.Store) { get launchingGames() { return u } get launchableGames() { return d } isLaunchable(e) { return null != d[e] ? d[e] : (d[e] = !1, l.default.dispatch({ type: "CHECK_LAUNCHABLE_GAME", gameId: e }), !1) } } a = "LaunchableGameStore", (s = "displayName") in(r = E) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new E(l.default, { GAME_LAUNCHABLE_UPDATE: function(e) { let { gameId: t, isLaunchable: n } = e; d[t] = n }, GAME_CLOUD_SYNC_START: _, GAME_LAUNCH_START: _, GAME_LAUNCH_SUCCESS: c, GAME_LAUNCH_FAIL: c, GAME_CLOUD_SYNC_CONFLICT: c, GAME_CLOUD_SYNC_ERROR: c, GAME_CLOUD_SYNC_COMPLETE: c }) }, 100159: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("812206"), r = n("981631"); function s(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], s = i.default.getApplication(e.applicationId), a = e.getPrice(), o = e.getPrice(null, !1), l = { sku_id: e.id, sku_type: e.type, application_id: e.applicationId, application_name: null != s ? s.name : null, store_title: e.name, distribution_type: e.premium ? "premium" : "distribution" }, u = null; n && (u = { price: null != a ? a.amount : null, regular_price: null != o ? o.amount : null, currency: null != a ? a.currency : null }); let d = null; return t && (d = { has_single_player: e.hasFeature(r.SKUFeatureTypes.SINGLE_PLAYER), has_online_multiplayer: e.hasFeature(r.SKUFeatureTypes.ONLINE_MULTIPLAYER), has_local_multiplayer: e.hasFeature(r.SKUFeatureTypes.LOCAL_MULTIPLAYER), has_pvp_features: e.hasFeature(r.SKUFeatureTypes.PVP), has_local_coop: e.hasFeature(r.SKUFeatureTypes.LOCAL_COOP), has_online_coop: e.hasFeature(r.SKUFeatureTypes.ONLINE_COOP), has_cross_platform: e.hasFeature(r.SKUFeatureTypes.CROSS_PLATFORM), has_rich_presence: e.hasFeature(r.SKUFeatureTypes.RICH_PRESENCE), has_game_invites: e.hasFeature(r.SKUFeatureTypes.DISCORD_GAME_INVITES), has_spectator_mode: e.hasFeature(r.SKUFeatureTypes.SPECTATOR_MODE), has_controller_support: e.hasFeature(r.SKUFeatureTypes.CONTROLLER_SUPPORT), has_cloud_saves: e.hasFeature(r.SKUFeatureTypes.CLOUD_SAVES), has_secure_networking: e.hasFeature(r.SKUFeatureTypes.SECURE_NETWORKING) }), { ...l, ...u, ...d } } }, 893988: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("757143"); let i = /\\/g; function r(e) { return e.replace(i, "/") } }, 483012: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"), n("653041"); var i = n("570140"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { static flush(e, t) { for (let n of s.batchers) null != n.action && (null == e || n.shouldFlush(e, t)) && n.flush() } flush() { let { action: e } = this; this.action = null, null != e && i.default.dispatch(e).catch(t => this.socket.resetSocketOnError({ error: t, action: e.type })) } constructor(e, t, n) { r(this, "socket", void 0), r(this, "action", void 0), r(this, "add", void 0), r(this, "shouldFlush", void 0), this.socket = e, this.action = null, this.shouldFlush = n, this.add = e => { this.action = t(this.action, e) }, s.batchers.push(this) } } r(s, "batchers", []) }, 138859: function(e, t, n) { "use strict"; var i, r; n.r(t), (r = i || (i = {})).CLOSED = "CLOSED", r.WILL_RECONNECT = "WILL_RECONNECT", r.CONNECTING = "CONNECTING", r.IDENTIFYING = "IDENTIFYING", r.RESUMING = "RESUMING", r.SESSION_ESTABLISHED = "SESSION_ESTABLISHED", t.default = i }, 992713: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("108131"), r = n.n(i), s = n("442837"), a = n("570140"), o = n("147913"), l = n("662896"), u = n("710845"), d = n("339085"), _ = n("926491"), c = n("592125"), E = n("430824"), I = n("709054"), T = n("38618"); let f = new u.default("EntityVersionsManager"); class S extends o.default { _initialize() { a.default.subscribe("CONNECTION_OPEN", A) } _terminate() { a.default.unsubscribe("CONNECTION_OPEN", A) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { GUILD_CREATE: m, DELETED_ENTITY_IDS: h }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } function h(e) { var t; let n = null === (t = E.default.getGuild(e.guild_id)) || void 0 === t ? void 0 : t.name; f.fileOnly("received deleted guild entities (id: ".concat(e.guild_id, ", name: ").concat(n, ")")), s.default.Emitter.batched(() => { null != e.channels && function(e, t) { let n = I.default.keys(c.default.getMutableBasicGuildChannelsForGuild(e)); f.fileOnly("syncChannels", { channelIdsInMemory: n, channelIdsFromServer: t }), n.forEach(n => { !t.has(n) && a.default.dispatch({ type: "CHANNEL_DELETE", channel: { guild_id: e, id: n, parent_id: void 0 } }) }) }(e.guild_id, new Set(e.channels)), null != e.roles && function(e, t) { I.default.keys(E.default.getRoles(e)).forEach(n => { !t.has(n) && a.default.dispatch({ type: "GUILD_ROLE_DELETE", guildId: e, roleId: n }) }) }(e.guild_id, new Set(e.roles)), null != e.emojis && function(e, t) { let n = d.default.getGuildEmoji(e), i = n.filter(e => t.has(e.id)); n.length !== i.length && a.default.dispatch({ type: "GUILD_EMOJIS_UPDATE", guildId: e, emojis: i }) }(e.guild_id, new Set(e.emojis)), null != e.stickers && function(e, t) { var n; let i = null !== (n = _.default.getStickersByGuildId(e)) && void 0 !== n ? n : [], r = i.filter(e => t.has(e.id)); i.length !== r.length && a.default.dispatch({ type: "GUILD_STICKERS_UPDATE", guildId: e, stickers: r }) }(e.guild_id, new Set(e.stickers)) }) } function A() { l.default.getAll().then(e => { e.forEach(e => N(e)) }) } function m(e) { let { guild: t } = e; t.unableToSyncDeletes && N(t.id) } function N(e) { setTimeout(() => (function(e) { var t, n, i; let r = null === (t = E.default.getGuild(e)) || void 0 === t ? void 0 : t.name; f.fileOnly("requesting deleted guild entities (id: ".concat(e, ", name: ").concat(r, ")")); let s = p(Object.keys(c.default.getMutableBasicGuildChannelsForGuild(e))), a = p(Object.keys(E.default.getRoles(e))), o = p(d.default.getGuildEmoji(e).map(e => e.id)), l = p(null !== (i = null === (n = _.default.getStickersByGuildId(e)) || void 0 === n ? void 0 : n.map(e => e.id)) && void 0 !== i ? i : []); T.default.getSocket().getDeletedEntityIdsNotMatchingHash(e, s, a, o, l) })(e), Math.ceil(2e3 * Math.random())) } function p(e) { return r().v3(e.sort().join(",")).toString() } t.default = new S }, 14639: function(e, t, n) { "use strict"; n.r(t); t.default = 30717 }, 639655: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getCompressionHandler: function() { return c } }), n("653041"), n("411104"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"), n("47120"); var i = n("710845"), r = n("374023"), s = n("420491"), a = n("988348"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let { NativeModules: l } = {}, u = []; class d { static canUse() { return !1 } bindWebSocket(e) {} feed(e) {} dataReady(e) { this._onDataReady = e } constructor(e) { o(this, "_onDataReady", void 0), o(this, "_gatewayEncoding", void 0), this._onDataReady = null, this._gatewayEncoding = e } } u.push(class extends d { static canUse() { return s.default.shouldUseZstd() } getAlgorithm() { return "zstd-stream" } usesLegacyCompression() { return !1 } feed(e) { let t; if (null == this._stream) throw Error("Trying to decompress with zstd but did not initialize with it"); if (!(e instanceof ArrayBuffer)) throw Error("Expected array buffer, but got " + typeof e); t = this._stream.decompress(e), null != this._decoder && (t = this._decoder.decode(t)), null != this._onDataReady && this._onDataReady(t) } close() {} constructor(e) { super(e), o(this, "_decoder", null), o(this, "_stream", void 0), this._gatewayEncoding.wantsString() ? this._decoder = new TextDecoder("utf-8") : this._decoder = null, this._stream = (0, a.createZstdContextWeb)() } }), u.push(class extends d { static canUse() { return void 0 !== window.Uint8Array } getAlgorithm() { return "zlib-stream" } usesLegacyCompression() { return !1 } feed(e) { if (null == this._inflate) throw Error("Trying to feed to closed compression adapter"); if (null === this._onDataReady) throw Error("Cannot feed unless a data ready callback is registered."); if (!(e instanceof ArrayBuffer)) throw Error("Expected array buffer, but got " + typeof e); let t = new DataView(e), n = t.byteLength >= 4 && 65535 === t.getUint32(t.byteLength - 4, !1); this._inflate.push(e, !!n && this._pako.Z_SYNC_FLUSH) } close() { null != this._inflate && (this._inflate.onEnd = null, this._inflate.chunks = []), this._inflate = null } handleFlushEnd(e) { let t; let n = this._pako, r = this._inflate; if (null == r) { new i.default("GatewayCompressionHandler").error("flush end happened on closed compression adapter"); return } if (e !== n.Z_OK) throw Error("zlib error, ".concat(e, ", ").concat(r.strm.msg)); let { chunks: s } = r, a = s.length; if (this._gatewayEncoding.wantsString()) t = a > 1 ? s.join("") : s[0]; else if (a > 1) { let e = 0; for (let t = 0; t < a; t++) e += s[t].length; let n = new Uint8Array(e), i = 0; for (let e = 0; e < a; e++) { let t = s[e]; n.set(t, i), i += t.length } t = n } else t = s[0]; s.length = 0, null != this._onDataReady && this._onDataReady(t) } constructor(e) { super(e), o(this, "_inflate", void 0), o(this, "_pako", n("457854")), o(this, "_usesZstd", !1), o(this, "_zstdDecoder", null), o(this, "_zstdStream", null), this._inflate = new this._pako.Inflate({ chunkSize: 65536, to: this._gatewayEncoding.wantsString() ? "string" : "" }), this._inflate.onEnd = this.handleFlushEnd.bind(this) } }), u.push(class extends d { static canUse() { return !0 } getAlgorithm() { return null } usesLegacyCompression() { return !0 } feed(e) { let t = this._pako; if (e instanceof ArrayBuffer && this._gatewayEncoding.wantsString() && (e = t.inflate(e, { to: "string" })), null == this._onDataReady) throw Error("Cannot feed unless a data ready callback is registered."); this._onDataReady(e) } close() {} constructor(...e) { super(...e), o(this, "_pako", n("457854")) } }), u.push(class extends d { static canUse() { return !1 } bindWebSocket(e) { this.close(), this._socketId = e._socketId, this._usesZstd ? l.DCDCompressionManager.enableZstdStreamSupport(this._socketId, 0) : l.DCDCompressionManager.enableZlibStreamSupport(this._socketId) } getAlgorithm() { return this._usesZstd ? "zstd-stream" : "zlib-stream" } usesLegacyCompression() { return !1 } feed(e) { if (null == this._onDataReady) throw Error("Cannot feed unless a data ready callback is registered."); null !== e && this._onDataReady(e) } close() { let e = this._socketId; this._socketId = null, null !== e && l.DCDCompressionManager.disableZlibStreamSupport(e) } constructor(e) { super(e), o(this, "_socketId", void 0), o(this, "_usesZstd", void 0), this._usesZstd = s.default.shouldUseZstd(), this._socketId = null } }); class _ extends d { static canUse() { return !0 } getAlgorithm() { return null } usesLegacyCompression() { return !1 } feed(e) { if (null == this._onDataReady) throw Error("Cannot feed unless a data ready callback is registered."); this._onDataReady(e) } close() {} } function c(e) { if (r.ProcessArgs.isDiscordGatewayPlaintextSet()) return new _(e); for (var t of u) if (t.canUse()) return new t(e); return new _(e) } u.push(_) }, 38618: function(e, t, n) { "use strict"; n.r(t), n("724458"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("287734"), c = n("710845"), E = n("569545"), I = n("581883"), T = n("314897"), f = n("523746"), S = n("592125"), h = n("131951"), A = n("19780"), m = n("936349"), N = n("944486"), p = n("885110"), O = n("959457"), C = n("358085"), R = n("138859"), g = n("955132"), L = n("645436"), v = n("344651"), D = n("981631"), M = n("526761"); let y = window.DiscordNative; g.socket.dispatcher.getDispatchHandler = v.default; let P = new c.default("ConnectionStore"), U = 0, b = null, G = !0, w = null; async function k(e) { U = Date.now(), b = e.sessionId, g.localPresenceState.handleConnectionOpen(); let t = {}, n = N.default.getVoiceChannelId(); if (null != n) { var i, r, s, a, o, l, u, d; if ((null === (o = window) || void 0 === o ? void 0 : null === (a = o.performance) || void 0 === a ? void 0 : null === (s = a.getEntriesByType) || void 0 === s ? void 0 : null === (r = s.call(a, "navigation")) || void 0 === r ? void 0 : null === (i = r[0]) || void 0 === i ? void 0 : i.type) === "reload" || (null === (l = await (null == y ? void 0 : null === (d = y.processUtils) || void 0 === d ? void 0 : null === (u = d.getLastCrash) || void 0 === u ? void 0 : u.call(d))) || void 0 === l ? void 0 : l.rendererCrashReason) != null || !G) { let e = S.default.getChannel(n); null != e && (t = { guildId: e.getGuildId(), channelId: n }) } else A.default.setLastSessionVoiceChannelId(null != n ? n : null), _.default.selectVoiceChannel(null) } g.localVoiceState.update(t, !0), G = !1 } function B() { g.localVoiceState.update() } function V() { return g.localVoiceState.update(), !1 } function x() { return g.localPresenceState.update(), !1 } function F(e) { g.socket.isSessionEstablished() && g.socket.streamDelete(e) } class H extends(i = u.default.Store) { initialize() { this.waitFor(T.default, N.default, S.default, f.default, I.default), this.syncWith([h.default], V), this.syncWith([p.default], x) } getSocket() { return g.socket } isTryingToConnect() { return !g.socket.isClosed() } isConnected() { return g.socket.isSessionEstablished() } isConnectedOrOverlay() { return g.socket.isSessionEstablished() || __OVERLAY__ } lastTimeConnectedChanged() { return U } } a = "GatewayConnectionStore", (s = "displayName") in(r = H) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new H(d.default, { START_SESSION: function() { return g.socket.isClosed() ? (P.verbose("Socket is reconnecting because of starting new session"), g.socket.connect()) : (P.verbose("Socket is not reconnecting during a new session because it is not closed"), !1) }, LOGIN_SUCCESS: function() { return P.verbose("session refresh dispatched", { isEstablished: g.socket.isSessionEstablished() }), !!g.socket.isSessionEstablished() && (g.socket.close(), g.socket.connect()) }, LOGOUT: function(e) { e.isSwitchingAccount && g.localPresenceState.handleAccountSwitch(), P.verbose("Closing socket because of logout"), g.socket.close() }, CLEAR_CACHES: function(e) { return e.resetSocket && (g.socket.close(), g.socket.dispatcher.clear(), g.socket.connect()), !1 }, CONNECTION_OPEN: e => { k(e) }, CONNECTION_CLOSED: function() { P.verbose("connection closed dispatched"), U = Date.now() }, RTC_CONNECTION_STATE: function(e) { if (e.state !== D.RTCConnectionStates.DISCONNECTED) return !1; e.willReconnect && (null != e.streamKey ? g.socket.streamPing(e.streamKey) : g.socket.voiceServerPing()) }, VOICE_CHANNEL_SELECT: function(e) { return g.localVoiceState.update({ guildId: e.guildId, channelId: e.channelId }), (0, C.isIOS)() && null == e.channelId && w === D.AppStates.BACKGROUND && g.socket.close(!0), !1 }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { if (T.default.getId() !== t.userId) return e; if (t.sessionId === b) g.localVoiceState.setState({ guildId: t.guildId, channelId: t.channelId }); else { if (t.guildId !== g.localVoiceState.guildId) return e; g.localVoiceState.setState({ guildId: null, channelId: null }) } return !0 }, !1) }, GUILD_DELETE: function(e) { e.guild.id === g.localVoiceState.guildId && g.localVoiceState.setState({ guildId: null, channelId: null }) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; t.id === g.localVoiceState.channelId && g.localVoiceState.setState({ guildId: null, channelId: null }) }, CALL_DELETE: function(e) { let { channelId: t } = e; t === g.localVoiceState.channelId && g.localVoiceState.setState({ guildId: null, channelId: null }) }, APP_STATE_UPDATE: function(e) { return (0, C.isIOS)() ? (T.default.isAuthenticated() && (w === D.AppStates.INACTIVE && e.state === D.AppStates.BACKGROUND && null == g.localVoiceState.channelId ? g.socket.close(!0) : w === D.AppStates.BACKGROUND && e.state === D.AppStates.ACTIVE && (L.setIsPaused(!1), g.socket.connect())), w = e.state) : e.state === D.AppStates.ACTIVE && (L.setIsPaused(!1), T.default.isAuthenticated() && g.socket.resetBackoff("App state is active")), !1 }, GUILD_MEMBERS_REQUEST: function(e) { return g.socket.isSessionEstablished() && ("userIds" in e ? l()(e.userIds).chunk(100).forEach(t => { g.socket.requestGuildMembers(e.guildIds, { userIds: t, presences: !!e.presences }) }) : g.socket.requestGuildMembers(e.guildIds, { query: e.query, limit: e.limit, presences: !!e.presences })), !1 }, GUILD_SEARCH_RECENT_MEMBERS: function(e) { let { guildId: t, query: n, continuationToken: i } = e; g.socket.isSessionEstablished() && g.socket.searchRecentMembers(t, { query: n, continuationToken: i }) }, GUILD_SUBSCRIPTIONS_FLUSH: function(e) { let { subscriptions: t } = e; return g.socket.isSessionEstablished() && g.socket.updateGuildSubscriptions(t), !1 }, CALL_CONNECT: function(e) { let { channelId: t } = e; return g.socket.isSessionEstablished() && g.socket.callConnect(t), !1 }, CALL_CONNECT_MULTIPLE: function(e) { let { channelIds: t } = e; return g.socket.isSessionEstablished() && t.forEach(e => { g.socket.callConnect(e) }), !1 }, STREAM_CREATE: B, STREAM_START: function(e) { let { streamType: t, guildId: n, channelId: i } = e; if (g.socket.isSessionEstablished()) { var r, s; let e = null != n ? null === (r = S.default.getChannel(i)) || void 0 === r ? void 0 : r.rtcRegion : null === (s = f.default.getCall(i)) || void 0 === s ? void 0 : s.region; g.socket.streamCreate(t, n, i, null != e ? e : m.default.getPreferredRegion()) } return !1 }, STREAM_WATCH: function(e) { let { streamKey: t, allowMultiple: n } = e; return g.socket.isSessionEstablished() && (n || ! function() { let e = function() { return O.default.getAllActiveStreamKeys().find(e => (0, E.decodeStreamKey)(e).ownerId === T.default.getId()) }(); O.default.getAllActiveStreamKeys().filter(t => t !== e).forEach(e => F(e)) }(), g.socket.streamWatch(t)), !1 }, STREAM_STOP: function(e) { let { streamKey: t } = e; return F(t), B(), !1 }, STREAM_SET_PAUSED: function(e) { let { streamKey: t, paused: n } = e; g.socket.isSessionEstablished() && g.socket.streamSetPaused(t, n) }, PUSH_NOTIFICATION_CLICK: function() { return g.socket.expeditedHeartbeat(5e3, "user clicked on notification", !0), !1 }, EMBEDDED_ACTIVITY_DISCONNECT: function(e) { var t, n; let { channelId: i, applicationId: r } = e, s = null !== (n = null === (t = S.default.getChannel(i)) || void 0 === t ? void 0 : t.getGuildId()) && void 0 !== n ? n : null; g.socket.embeddedActivityClose(s, i, r) }, REQUEST_FORUM_UNREADS: function(e) { let { guildId: t, channelId: n, threads: i } = e; g.socket.requestForumUnreads(t, n, i) }, REQUEST_SOUNDBOARD_SOUNDS: function(e) { let { guildIds: t } = e; g.socket.requestSoundboardSounds(t) }, REMOTE_COMMAND: function(e) { let { sessionId: t, payload: n } = e; return g.socket.isSessionEstablished() && g.socket.remoteCommand(t, n), !1 }, RESET_SOCKET: function(e) { g.socket.connectionState !== R.default.WILL_RECONNECT && g.socket.resetSocketOnError(e.args) }, RTC_SPEED_TEST_START_TEST: function() { return g.socket.isSessionEstablished() && g.socket.speedTestCreate(m.default.getPreferredRegion()), !1 }, RTC_SPEED_TEST_STOP_TEST: function() { return g.socket.isSessionEstablished() && g.socket.speedTestDelete(), !1 }, CLIPS_SETTINGS_UPDATE: B, RUNNING_GAMES_CHANGE: B, USER_SETTINGS_PROTO_UPDATE: function(e) { var t; e.settings.type === M.UserSettingsTypes.PRELOADED_USER_SETTINGS && (null === (t = e.settings.proto.clips) || void 0 === t ? void 0 : t.allowVoiceRecording) != null && B() } }) }, 610308: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i = n("374023"); let r = (0, n("733393").getErlpackEncoding)(); class s { pack(e) { return JSON.stringify(e) } unpack(e) { if ("string" != typeof e) throw Error("Expected a string to be passed to JSONEncoding.unpack, got ".concat(null == e ? null : typeof e)); return JSON.parse(e) } getName() { return "json" } wantsString() { return !0 } } let a = void 0 !== r ? r : s; i.ProcessArgs.isDiscordGatewayPlaintextSet() && (a = s), t.default = a }, 733393: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getErlpackEncoding: function() { return a } }), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); var i = n("710845"), r = n("358085"), s = n("998502"); function a() { if (r.isPlatformEmbedded) { let e; try { e = s.default.requireModule("discord_erlpack") } catch (t) { try { e = s.default.requireModule("erlpack") } catch (e) {} } if (null != e) return class { static canUse() { return null != e } pack(t) { return e.pack(t).buffer } unpack(t) { t instanceof ArrayBuffer && (t = new Uint8Array(t)); try { return e.unpack(t) } catch (e) { throw new i.default("GatewayEncodingErlpackEncoding").error("Error unpacking", { erlpackUnpackError: e, erlpackDataPreview: null != t ? Array.from(t.slice(0, 32)) : null, erlpackDataLength: null != t ? t.length : null }), e } } getName() { return "etf" } wantsString() { return !1 } } } } }, 548570: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return W } }), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"), n("177593"); var i = n("512722"), r = n.n(i), s = n("457854"), a = n("261470"), o = n("956067"), l = n("286379"), u = n("442837"), d = n("544891"), _ = n("570140"), c = n("406966"), E = n("795513"), I = n("266750"), T = n("250407"), f = n("710845"), S = n("797614"), h = n("218543"), A = n("857192"), m = n("626135"), N = n("12647"), p = n("70956"), O = n("358085"), C = n("960048"), R = n("138859"), g = n("14639"), L = n("639655"), v = n("610308"), D = n("91247"), M = n("508569"), y = n("183139"), P = n("420491"), U = n("645436"), b = n("833508"), G = n("981631"); function w(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let k = new f.default("GatewaySocket"), B = new v.default; function V() {} let x = 30 * p.default.Millis.SECOND, F = 3 * p.default.Millis.MINUTE, H = 1 * p.default.Millis.MINUTE; function Y(e) { return null == e ? 0 : "string" == typeof e ? e.length : e.byteLength } let j = window.GLOBAL_ENV.GATEWAY_ENDPOINT; class W extends y.default { get connectionState() { return this.connectionState_ } set connectionState(e) { k.verbose("Setting connection state to ".concat(e)), this.connectionState_ = e } addAnalytics(e) { this.analytics = { ...this.analytics, ...e } } setResumeUrl(e) { null != e && e.endsWith("/") && (e = e.substring(0, e.length - 1)), null !== e && k.verbose("Updating resume url to ".concat(e)), this.resumeUrl = e } _connect() { if (!this.willReconnect()) { k.verbose("Skipping _connect because willReconnect is false"); return } if (U.getIsPaused()) { k.info("Skipping _connect because socket is paused"); return } this.connectionState = R.default.CONNECTING, this.nextReconnectIsImmediate = !1, P.default.disableFailureTracking(); let e = this.compressionHandler.getAlgorithm(), t = B.getName(), n = this._getGatewayUrl(), i = window.GLOBAL_ENV.API_VERSION; o.default.mark("\uD83C\uDF10", "Socket._connect"), k.info("[CONNECT] ".concat(n, ", ") + "encoding: ".concat(t, ", ") + "version: ".concat(i, ", ") + "compression: ".concat(null != e ? e : "none")), null !== this.webSocket && (k.error("_connect called with already existing websocket"), this._cleanup(e => e.close(4e3))), this.connectionStartTime = Date.now(), this.helloTimeout = setTimeout(() => { let e = Date.now() - this.connectionStartTime; this._handleClose(!1, 0, "The connection timed out after ".concat(e, " ms - did not receive OP_HELLO in time.")), this.setResumeUrl(null) }, x); let r = new URL(n); r.searchParams.append("encoding", t), r.searchParams.append("v", i.toString()), null != e && r.searchParams.append("compress", e), ! function(e) { let t, { gatewayURL: n, newCallback: i, onOpen: r, onMessage: s, onError: a, onClose: o } = e, l = window._ws, u = !1, d = !1, _ = null, c = null; if (window._ws = null, null != l) { if (t = l.ws, l.state.gateway !== n) k.verbose("[FAST CONNECT] gatewayURL mismatch: ".concat(l.state.gateway, " !== ").concat(n)), t.close(1e3), t = null; else { var E; let e = { ...l.state }; null != e.messages && (e.messages = e.messages.map(e => null != e.data && "string" == typeof e.data ? { ...e, data: e.data.substring(0, 100) } : e)), k.log("[FAST CONNECT] successfully took over websocket, state:", { ...e, messages: null === (E = e.messages) || void 0 === E ? void 0 : E.length }), u = l.state.open, d = l.state.identify, _ = l.state.messages, c = l.state.clientState } } null == t && ((t = (0, b.default)(n)).binaryType = "arraybuffer"), i(t), u && r(d, c), null != _ && _.forEach(s), t.onopen = () => r(d, c), t.onmessage = s, t.onclose = o, t.onerror = a }({ gatewayURL: r.toString(), newCallback: e => { this.webSocket = e, this.compressionHandler.bindWebSocket(e) }, onOpen: e => { o.default.mark("\uD83C\uDF10", "GatewaySocket.onOpen ".concat(e)), P.default.enableFailureTracking(); let t = Date.now() - this.connectionStartTime; k.info("[CONNECTED] ".concat(r.toString(), " in ").concat(t, " ms")), this.isFastConnect = e, e ? this._doFastConnectIdentify() : this._doResumeOrIdentify() }, onMessage: function(e, t, n) { let i = 0; e.dataReady(e => { try { return n(e, i) } finally { i = 0 } }); let r = !1; return n => { let s = n.data; null != n.raw_length ? i += n.raw_length : i += Y(s); try { e.feed(s) } catch (e) { throw !r && (r = !0, t(!1, 0, "A decompression error occurred")), e } } }(this.compressionHandler, this._handleClose.bind(this), (e, t) => { let n = Date.now(), { op: i, s: r, t: s, d: a } = B.unpack(e); i !== y.Opcode.DISPATCH && o.default.mark("\uD83C\uDF10", "GatewaySocket.onMessage ".concat(i, " ").concat(y.Opcode[i])); let l = Date.now() - n; switch ("READY" === s ? h.default.parseReady.set(n, l) : "READY_SUPPLEMENTAL" === s ? h.default.parseReadySupplemental.set(n, l) : l > 10 && o.default.mark("\uD83C\uDF10", "Parse " + s, l), null != r && (this.seq = r), i) { case y.Opcode.HELLO: this._clearHelloTimeout(), this._handleHello(a); break; case y.Opcode.RECONNECT: this._handleReconnect(); break; case y.Opcode.INVALID_SESSION: this._handleInvalidSession(a); break; case y.Opcode.HEARTBEAT: this._sendHeartbeat(); break; case y.Opcode.HEARTBEAT_ACK: this._handleHeartbeatAck(a); break; case y.Opcode.DISPATCH: this._handleDispatch(a, s, "READY" === s ? { compressed_byte_size: t, uncompressed_byte_size: Y(e), compression_algorithm: this.compressionHandler.getAlgorithm(), packing_algorithm: B.getName(), unpack_duration_ms: l } : null); break; default: k.info("Unhandled op ".concat(i)) } this._sendHeartbeatIfDue() }), onError: () => { this.setResumeUrl(null), N.default.flushDNSCache(), this._handleClose(!1, 0, "An error with the websocket occurred") }, onClose: e => { let { wasClean: t, code: n, reason: i } = e; return this._handleClose(t, n, i) } }) } _handleHello(e) { let t = this.heartbeatInterval = e.heartbeat_interval, n = Date.now() - this.connectionStartTime; k.verbose("[HELLO] via ".concat((0, D.getConnectionPath)(e), ", ") + "heartbeat interval: ".concat(t, ", ") + "took ".concat(n, " ms")), this._startHeartbeater() } _handleReconnect() { k.verbose("[RECONNECT] gateway requested I reconnect."), P.default.disableFailureTracking(), this._cleanup(e => e.close(4e3)), this.connectionState = R.default.WILL_RECONNECT, this._connect() } _handleInvalidSession(e) { k.info("[INVALID_SESSION]".concat(e ? " can resume)" : "")), e ? this._doResumeOrIdentify() : this._doIdentify() } _handleDispatch(e, t, n) { let i = Date.now() - this.connectionStartTime; if ("READY" === t) { let t = e.session_id; this.sessionId = t; let n = (0, D.getConnectionPath)(e); o.default.setServerTrace(n), k.info("[READY] took ".concat(i, "ms, as ").concat(t)), k.verbose("".concat(n)), this.connectionState = R.default.SESSION_ESTABLISHED, this.gatewayBackoff.succeed(), this.iosGoingAwayEventCount = 0, this.setResumeUrl(e.resume_gateway_url) } else "READY_SUPPLEMENTAL" === t ? (k.info("[READY_SUPPLEMENTAL] took ".concat(i, "ms")), this.connectionState = R.default.SESSION_ESTABLISHED, this.gatewayBackoff.succeed(), this.iosGoingAwayEventCount = 0) : "RESUMED" === t && (k.verbose((0, D.getConnectionPath)(e)), this.connectionState = R.default.SESSION_ESTABLISHED, this.gatewayBackoff.succeed(), this.iosGoingAwayEventCount = 0); this.dispatcher.receiveDispatch(e, t, n) } handleResumeDispatched() { let e = Date.now() - this.connectionStartTime; k.info("[RESUMED] took ".concat(e, "ms, replayed ").concat(this.dispatcher.resumeAnalytics.numEvents, " events, new seq: ").concat(this.seq)) } handleReadyDispatched() { this.didForceClearGuildHashes = !1, this.hasConnectedOnce = !0 } _getGatewayUrl() { return null != this.resumeUrl ? this.resumeUrl : j } _handleHeartbeatAck(e) { this.lastHeartbeatAckTime = Date.now(), this.heartbeatAck = !0, null !== this.expeditedHeartbeatTimeout && (clearTimeout(this.expeditedHeartbeatTimeout), this.expeditedHeartbeatTimeout = null, k.verbose("Expedited heartbeat succeeded")) } _handleHeartbeatTimeout() { this._cleanup(e => e.close(4e3)), this.connectionState = R.default.WILL_RECONNECT; let e = this.gatewayBackoff.fail(() => this._connect()); k.warn("[ACK TIMEOUT] reconnecting in ".concat((e / 1e3).toFixed(2), " seconds.")) } _handleClose(e, t, n) { if (e = e || !1, this._cleanup(), this.emit("close", { code: t, reason: n }), 4004 === t) return this.connectionState = R.default.CLOSED, k.warn("[WS CLOSED] because of authentication failure, marking as closed."), this._reset(e, t, n); if (this._tryDetectInvalidIOSToken(t, n, e), this.connectionState = R.default.WILL_RECONNECT, this.nextReconnectIsImmediate) k.info("[WS CLOSED] (".concat(e.toString(), ", ").concat(t, ", ").concat(n, ") retrying immediately.")), this._connect(); else { let i = this.gatewayBackoff.fail(() => this._connect()); k.info("[WS CLOSED] (".concat(e.toString(), ", ").concat(t, ", ").concat(n, ") retrying in ").concat((i / 1e3).toFixed(2), " seconds.")), this.gatewayBackoff.fails > 4 && this._reset(e, t, n) } } _tryDetectInvalidIOSToken(e, t, n) { (0, O.isIOS)() && null != this.token && 1001 === e && "Stream end encountered" === t && (this.iosGoingAwayEventCount += 1, 3 === this.iosGoingAwayEventCount && d.HTTP.get({ url: G.Endpoints.ME, headers: { authorization: this.token } }).then(e => { let { status: t } = e; m.default.track(G.AnalyticEvents.IOS_INVALID_TOKEN_WORKAROUND_TRIGGERED, { api_status_code: t }) }, e => { let { status: t } = e; 401 === t && (this.connectionState = R.default.CLOSED, k.warn("[WS CLOSED] because of manual authentication failure, marking as closed."), this._reset(n, 4004, "invalid token manually detected")), m.default.track(G.AnalyticEvents.IOS_INVALID_TOKEN_WORKAROUND_TRIGGERED, { api_status_code: t }) })) } _reset(e, t, n) { this.sessionId = null, this.seq = 0, k.warn("[RESET] (".concat(e.toString(), ", ").concat(t, ", ").concat(n, ")")), this.emit("disconnect", { wasClean: e, code: t, reason: n }) } _sendHeartbeatIfDue() { if (null == this.heartbeatInterval || null == this.heartbeater) return; let e = this.lastHeartbeatTime; null != e && Date.now() - e > this.heartbeatInterval + 5e3 && this._sendHeartbeat() } _startHeartbeater() { let { heartbeatInterval: e } = this; r()(null != e, "GatewaySocket: Heartbeat interval should never null here."), null !== this.initialHeartbeatTimeout && clearTimeout(this.initialHeartbeatTimeout), null !== this.heartbeater && (clearInterval(this.heartbeater), this.heartbeater = null); let t = () => { this.heartbeatAck ? (this.heartbeatAck = !1, this._sendHeartbeat()) : null === this.expeditedHeartbeatTimeout && this._handleHeartbeatTimeout() }; this.initialHeartbeatTimeout = setTimeout(() => { this.initialHeartbeatTimeout = null, this.heartbeatAck = !0, this.heartbeater = setInterval(t, e), t() }, Math.floor(Math.random() * e)) } _stopHeartbeater() { null !== this.heartbeater && (clearInterval(this.heartbeater), this.heartbeater = null), null !== this.initialHeartbeatTimeout && (clearTimeout(this.initialHeartbeatTimeout), this.initialHeartbeatTimeout = null), null !== this.expeditedHeartbeatTimeout && (clearTimeout(this.expeditedHeartbeatTimeout), this.expeditedHeartbeatTimeout = null) } _clearHelloTimeout() { null != this.helloTimeout && (clearTimeout(this.helloTimeout), this.helloTimeout = null) } _cleanup(e) { u.default.Emitter.resume(), this._stopHeartbeater(), this._clearHelloTimeout(); let t = this.webSocket; this.webSocket = null, null != t && (t.onopen = V, t.onmessage = V, t.onerror = V, t.onclose = V, null == e || e(t)), this.gatewayBackoff.cancel(), this.compressionHandler.close(), this.compressionHandler = (0, L.getCompressionHandler)(B) } _doResume() { var e; this.connectionState = R.default.RESUMING, this.dispatcher.resumeAnalytics = (0, D.createResumeAnalytics)(Date.now() - this.connectionStartTime), k.info("[RESUME] resuming session ".concat(null !== (e = this.sessionId) && void 0 !== e ? e : "", ", seq: ").concat(this.seq)), this.send(y.Opcode.RESUME, { token: this.token, session_id: this.sessionId, seq: this.seq }, !1) } async _doIdentify() { this.seq = 0, this.sessionId = null; let e = this.handleIdentify(); if (null === e) { this._handleClose(!0, 4004, "No connection info provided"); return } this.connectionState = R.default.IDENTIFYING; let t = Date.now(); this.identifyStartTime = t; let [n, i, r] = await Promise.all([(0, T.isCacheEnabled)() ? c.default.getCommittedVersions() : {}, (0, T.isCacheEnabled)() ? I.default.getCommittedVersions() : {}, !!(0, T.isCacheEnabled)() && E.default.canUseGuildVersions()]), a = r ? { guild_versions: n, highest_last_message_id: i.highest_last_message_id, read_state_version: i.read_state_version, user_guild_settings_version: i.user_guild_settings_version, user_settings_version: i.user_settings_version, private_channels_version: i.private_channels_version, api_code_version: i.api_code_version, initial_guild_id: i.initial_guild_id } : { guild_versions: {} }; if (this.connectionState !== R.default.IDENTIFYING || this.identifyStartTime !== t) { k.warn("Skipping identify because connectionState or identifyStartTime has changed"); return } let { token: o, properties: l = {}, presence: u } = e; this.token = o, k.verbose("[IDENTIFY]"); let d = { token: o, capabilities: g.default, properties: l, presence: u, compress: this.compressionHandler.usesLegacyCompression(), client_state: a }, _ = JSON.stringify(d); this.identifyUncompressedByteSize = _.length, this.identifyCompressedByteSize = s.deflate(_).length, this.identifyCount += 1, this.send(y.Opcode.IDENTIFY, d, !1) } _doFastConnectIdentify() { this.seq = 0, this.sessionId = null; let e = this.handleIdentify(); if (null === e) { this._handleClose(!0, 4004, "No connection info provided"); return } let { token: t } = e; this.token = t, this.connectionState = R.default.IDENTIFYING, this.identifyStartTime = Date.now(), this.identifyCount += 1, k.verbose("[IDENTIFY, fast-connect]"), this._updateLastHeartbeatAckTime() } _doResumeOrIdentify() { let e = Date.now(); null !== this.sessionId && (null == this.lastHeartbeatAckTime || e - this.lastHeartbeatAckTime <= F) ? this._doResume() : this._doIdentify(), this._updateLastHeartbeatAckTime() } _updateLastHeartbeatAckTime() { this.lastHeartbeatAckTime = Date.now() } _sendHeartbeat() { this.send(y.Opcode.HEARTBEAT, this.seq, !1), this.lastHeartbeatTime = Date.now() } getLogger() { return k } willReconnect() { return this.connectionState === R.default.WILL_RECONNECT } isClosed() { return this.connectionState === R.default.CLOSED } isSessionEstablished() { return this.connectionState === R.default.SESSION_ESTABLISHED || this.connectionState === R.default.RESUMING } isConnected() { return this.connectionState === R.default.IDENTIFYING || this.connectionState === R.default.RESUMING || this.connectionState === R.default.SESSION_ESTABLISHED } connect() { return this.isClosed() ? (k.verbose(".connect() called, new state is WILL_RECONNECT"), this.connectionState = R.default.WILL_RECONNECT, this._connect(), !0) : (k.error("Cannot start a new connection, connection state is not closed"), !1) } resetSocketOnError(e) { let { action: t, error: n, metricAction: i } = e; k.error("resetSocketOnError during ".concat(t, ": ").concat(n.message), n.stack), S.default.increment({ name: l.MetricEvents.SOCKET_CRASHED, tags: ["action:".concat(null != i ? i : t)] }, !0), !1 !== e.sentry && C.default.captureException(n, { tags: { socketCrashedAction: t } }), m.default.track(G.AnalyticEvents.GATEWAY_SOCKET_RESET, { error_message: n.message, error_stack: n.stack, action: t }), this._cleanup(e => e.close()), this._reset(!0, 1e3, "Resetting socket due to error."), this.dispatcher.clear(), this.connectionState = R.default.WILL_RECONNECT, this.dispatchExceptionBackoff.cancel(); let r = e.clearCache || this.dispatchExceptionBackoff._fails > 0; 0 === this.dispatchExceptionBackoff._fails ? (k.verbose("Triggering fast reconnect"), this.dispatchExceptionBackoff.fail(() => {}), setTimeout(() => this._connect(), 0)) : this.dispatchExceptionBackoff.fail(() => this._connect()), r && (this.didForceClearGuildHashes = !0, _.default.dispatch({ type: "CLEAR_CACHES", reason: "Socket reset during ".concat(t) })), clearTimeout(this.dispatchSuccessTimer), this.dispatchSuccessTimer = setTimeout(() => this.dispatchExceptionBackoff.succeed(), 2 * H) } resetSocketOnDispatchError(e) { let t = null != e.error.message && e.error.message.indexOf("Guild data was missing from store") >= 0; this.resetSocketOnError({ ...e, sentry: !t, clearCache: t }) } close() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (this.isClosed()) { k.verbose("close() called, but socket is already closed."); return } k.info("Closing connection, current state is ".concat(this.connectionState)); let t = e ? 4e3 : void 0; this._cleanup(e => e.close(t)), this.connectionState = R.default.CLOSED, !e && setImmediate(() => { this._reset(!0, 1e3, "Disconnect requested by user") }) } networkStateChange(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; this.expeditedHeartbeat(e, t, n, !1) } expeditedHeartbeat(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "", n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = !(arguments.length > 3) || void 0 === arguments[3] || arguments[3]; if (!this.isClosed()) { if (this.isConnected()) { k.verbose("Performing an expedited heartbeat ".concat(null != t && "" !== t ? "reason: " + t : "")), this.heartbeatAck = !1, this._sendHeartbeat(), null !== this.expeditedHeartbeatTimeout && clearTimeout(this.expeditedHeartbeatTimeout), this.expeditedHeartbeatTimeout = setTimeout(() => { this.expeditedHeartbeatTimeout = null, !1 === this.heartbeatAck && this._handleHeartbeatTimeout() }, e); return } n ? this.resetBackoff(t, i) : k.verbose("Expedited heartbeat requested, but, connection state is ".concat(this.connectionState, " and reconnectImmediately was not requested ").concat(null != t && "" !== t ? "reason: " + t : "")) } } resetBackoff() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; k.verbose("Connection has reset backoff".concat(null != e && "" !== e ? " for reason: " + e : "")), this.gatewayBackoff.succeed(), this.iosGoingAwayEventCount = 0, this.nextReconnectIsImmediate = !0, this.willReconnect() ? this._connect() : t && this.connectionState !== R.default.SESSION_ESTABLISHED && this._handleClose(!0, 0, e) } constructor() { super(), w(this, "gatewayBackoff", void 0), w(this, "handleIdentify", void 0), w(this, "dispatchExceptionBackoff", new a.default(1e3, H)), w(this, "dispatchSuccessTimer", 0), w(this, "connectionState_", void 0), w(this, "webSocket", void 0), w(this, "seq", void 0), w(this, "sessionId", void 0), w(this, "token", void 0), w(this, "initialHeartbeatTimeout", void 0), w(this, "expeditedHeartbeatTimeout", void 0), w(this, "heartbeatInterval", void 0), w(this, "helloTimeout", void 0), w(this, "heartbeater", void 0), w(this, "lastHeartbeatTime", void 0), w(this, "lastHeartbeatAckTime", void 0), w(this, "heartbeatAck", void 0), w(this, "connectionStartTime", void 0), w(this, "identifyStartTime", void 0), w(this, "nextReconnectIsImmediate", void 0), w(this, "compressionHandler", void 0), w(this, "hasConnectedOnce", void 0), w(this, "isFastConnect", void 0), w(this, "didForceClearGuildHashes", !1), w(this, "identifyUncompressedByteSize", 0), w(this, "identifyCompressedByteSize", 0), w(this, "analytics", {}), w(this, "identifyCount", 0), w(this, "resumeUrl", null), w(this, "iosGoingAwayEventCount", 0), w(this, "dispatcher", void 0), w(this, "send", (e, t, n) => { A.default.isLoggingGatewayEvents && k.verboseDangerously("~>", e, t); let i = B.pack({ op: e, d: t }); if (!n || this.isSessionEstablished()) try { null != this.webSocket ? this.webSocket.send(i) : k.warn("Attempted to send without a websocket that exists. Opcode: ".concat(e)) } catch (e) {} else k.warn("Attempted to send while not being in a connected state opcode: ".concat(e)) }), this.dispatcher = new M.default(this), this.gatewayBackoff = new a.default(1e3, 6e4), this.connectionState_ = R.default.CLOSED, this.webSocket = null, this.seq = 0, this.sessionId = null, this.token = null, this.initialHeartbeatTimeout = null, this.expeditedHeartbeatTimeout = null, this.lastHeartbeatTime = null, this.lastHeartbeatAckTime = null, this.helloTimeout = null, this.heartbeatInterval = null, this.heartbeater = null, this.heartbeatAck = !0, this.connectionStartTime = 0, this.identifyStartTime = 0, this.nextReconnectIsImmediate = !1, this.compressionHandler = (0, L.getCompressionHandler)(B), this.hasConnectedOnce = !1, this.isFastConnect = !1, this.identifyCount = 0, this.iosGoingAwayEventCount = 0 } } }, 91247: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createResumeAnalytics: function() { return _ }, getConnectionPath: function() { return u }, getReadyPayloadByteSizeAnalytics: function() { return d }, logReadyPayloadReceived: function() { return l }, logResumeAnalytics: function() { return c } }), n("653041"); var i = n("956067"); n("17089"); var r = n("218543"), s = n("594174"), a = n("626135"), o = n("981631"); function l(e, t, n, s, l) { var u, d, _; let c = function(e) { let { _trace: t } = e, n = {}; try { let e = JSON.parse(t); null != e[0] && "" !== e[0] && e[0].startsWith("gateway-") && (n.identify_total_server_duration_ms = Math.floor(e[1].micros / 1e3)), function e(t, n) { if (null != t && t.length > 0) for (let i = 0; i < t.length; i += 2) { let r = t[i], s = t[i + 1]; n(r, s.micros), e(s.calls, n) } }(e, (e, t) => { "start_session" === e ? n.identify_api_duration_ms = Math.floor(t / 1e3) : "guilds_connect" === e && (n.identify_guilds_duration_ms = Math.floor(t / 1e3)) }) } catch (e) {} return n }(t); null != s && i.default.addDetail("payload_size(kb)", Math.round(s.uncompressed_byte_size / 1024)), i.default.addDetail("server_time(ms)", null !== (u = c.identify_total_server_duration_ms) && void 0 !== u ? u : 0); let E = { ...s, ...c, ... function(e) { let { guilds: t } = e, n = 0, i = 0; return t.forEach(e => { if (e.unavailable) return; let t = "partial" === e.data_mode ? e.partial_updates.channels : e.channels; null != t && null != t.forEach && t.forEach(e => { i++, e.type === o.ChannelTypes.GUILD_CATEGORY && n++ }) }), { num_guilds: t.length, num_guild_channels: i, num_guild_category_channels: n } }(t), ...l, duration_ms_since_identify_start: n - e.identifyStartTime, duration_ms_since_connection_start: n - e.connectionStartTime, duration_ms_since_emit_start: Date.now() - n, is_reconnect: e.hasConnectedOnce, is_fast_connect: e.isFastConnect, did_force_clear_guild_hashes: e.didForceClearGuildHashes, identify_uncompressed_byte_size: e.identifyUncompressedByteSize, identify_compressed_byte_size: e.identifyCompressedByteSize, had_cache_at_startup: null !== (d = e.analytics.hadCacheAtStartup) && void 0 !== d && d, used_cache_at_startup: null !== (_ = e.analytics.usedCacheAtStartup) && void 0 !== _ && _ }; r.default.attachReadyPayloadProperties(E), a.default.track(o.AnalyticEvents.READY_PAYLOAD_RECEIVED, E, { logEventProperties: !0 }) } function u(e) { try { var t; let n = function(e) { return null == e ? null : function e(t, n) { if (null == t) return ""; let i = ""; for (let r = 0; r < t.length; r += 2) i += "\n".concat(n).concat(t[r], ": ").concat(t[r + 1].micros / 1e3) + e(t[r + 1].calls, n + "| "); return i }(JSON.parse(e), "") }(null === (t = e._trace) || void 0 === t ? void 0 : t[0]); if (null != n) return n } catch (e) {} return null != e._trace ? e._trace.join(" -> ") : "???" } function d(e) { var t, n; let i = Date.now(), { guilds: r, merged_presences: s, merged_members: a, read_state: o, private_channels: l, user_guild_settings: u, user_settings: d, user_settings_proto: _, experiments: c, guild_experiments: E, relationships: I, users: T, ...f } = e, S = [], h = [], A = [], m = [], N = [], p = [], O = [], C = []; return r.forEach(e => { var t; if (e.unavailable) return; let { features: n, ...i } = null !== (t = e.properties) && void 0 !== t ? t : {}, { threads: r, guild_scheduled_events: s, ...a } = e; S.push("partial" === e.data_mode ? e.partial_updates.channels : e.channels), h.push("partial" === e.data_mode ? e.partial_updates.roles : e.roles), A.push("partial" === e.data_mode ? e.partial_updates.emojis : e.emojis), m.push(r), N.push("partial" === e.data_mode ? e.partial_updates.stickers : e.stickers), p.push(n), O.push(s), C.push(a, i) }), { presences_size: JSON.stringify(null !== (t = null == s ? void 0 : s.friends) && void 0 !== t ? t : []).length, users_size: JSON.stringify(T).length, read_states_size: JSON.stringify(o).length, private_channels_size: JSON.stringify(l).length, user_settings_size: JSON.stringify(null != d ? d : "").length + (null != _ ? _ : "").length, experiments_size: JSON.stringify(null != c ? c : []).length + JSON.stringify(null != E ? E : []).length, user_guild_settings_size: JSON.stringify(u).length, relationships_size: JSON.stringify(I).length, remaining_data_size: JSON.stringify(null != f ? f : {}).length, guild_channels_size: JSON.stringify(S).length, guild_members_size: JSON.stringify(null != a ? a : []).length, guild_presences_size: JSON.stringify(null !== (n = null == s ? void 0 : s.guilds) && void 0 !== n ? n : []).length, guild_roles_size: JSON.stringify(h).length, guild_emojis_size: JSON.stringify(A).length, guild_threads_size: JSON.stringify(m).length, guild_stickers_size: JSON.stringify(N).length, guild_events_size: JSON.stringify(O).length, guild_features_size: JSON.stringify(p).length, guild_remaining_data_size: JSON.stringify(C).length, size_metrics_duration_ms: Date.now() - i } } function _(e) { return { connectTime: null != e ? e : 0, numEvents: 0, largestWaitTime: 0, dispatchTime: 0, totalWaitTime: 0, initialWaitTime: 0, startTime: performance.now(), lastUpdateTime: performance.now() } } function c(e) { var t; !(!(null === (t = s.default.getCurrentUser()) || void 0 === t ? void 0 : t.isStaff()) && .5 > Math.random()) && a.default.track(o.AnalyticEvents.CONNECTION_RESUMED, { connect_time_ms: e.connectTime, resume_time_ms: Math.floor(performance.now() - e.startTime), num_events: e.numEvents, largest_wait_time_ms: Math.floor(e.largestWaitTime), initial_wait_time_ms: Math.floor(e.initialWaitTime), total_wait_time_ms: Math.floor(e.totalWaitTime), total_dispatch_time_ms: Math.floor(e.dispatchTime) }, { logEventProperties: !0 }) } }, 508569: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }), n("47120"), n("653041"), n("411104"); var i, r, s = n("442837"), a = n("710845"), o = n("857192"), l = n("483012"), u = n("138859"), d = n("91247"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = new a.default("GatewaySocket"), E = new Set(["INITIAL_GUILD", "READY"]), I = new Set(["READY", "INITIAL_GUILD"]), T = new Set(["READY", "READY_SUPPLEMENTAL", "RESUMED"]); (r = i || (i = {}))[r.NotStarted = 0] = "NotStarted", r[r.Loading = 1] = "Loading", r[r.Loaded = 2] = "Loaded"; class f { hasStuffToDispatchNow() { return this.queue.length > 0 && 2 === this.queue[0].status } processFirstQueuedDispatch(e) { let t = []; for (; this.queue.length > 0 && e.has(this.queue[0].type) && 2 === this.queue[0].status;) t.push(this.queue.shift()); this.dispatchMultiple(t) } unpauseDispatchQueue() { for (let e of (this.paused = !1, this.queue)) this.maybePreload(e); this.flush() } receiveDispatch(e, t, n) { if (null == this.getDispatchHandler) throw Error("getDispatchHandler needs to be passed in first!"); let i = { data: e, type: t, compressionAnalytics: n, status: 0, preloadPromise: null, preloadedData: null }; this.queue.push(i), !this.maybePreload(i) && this.scheduleFlush(t) } maybePreload(e) { if (this.paused && !E.has(e.type)) return !1; if (0 === e.status) { var t; let n = null === (t = this.getDispatchHandler(e.type)) || void 0 === t ? void 0 : t.preload(e.data); if (e.status = null == n ? 2 : 1, e.preloadPromise = n, null != n) return n.then(t => { e.preloadedData = t, e.status = 2, this.scheduleFlush(e.type) }).catch(t => this.socket.resetSocketOnDispatchError({ error: t, action: e.type })), !0 } return !1 } scheduleFlush(e) { !this.paused && (I.has(e) ? (null != this.dispatchTimeout && clearTimeout(this.dispatchTimeout), this.flush()) : null == this.dispatchTimeout && (this.dispatchTimeout = setTimeout(this.flush, this.nextDispatchTimeout))) } dispatchMultiple(e) { if (0 === e.length) return; let t = "none", n = !1; try { this.socket.connectionState === u.default.RESUMING && s.default.Emitter.pause(150), s.default.Emitter.batched(() => { e.forEach(e => { t = e.type, n = n || T.has(e.type), this.dispatchOne(e) }), l.default.flush() }), n && s.default.Emitter.resume() } catch (e) { this.socket.resetSocketOnDispatchError({ error: e, action: t }) } } dispatchOne(e) { var t, n, i; let { data: r, type: s, compressionAnalytics: a, preloadedData: _ } = e, E = performance.now(); if (this.socket.connectionState === u.default.RESUMING) { let e = E - this.resumeAnalytics.lastUpdateTime; 0 === this.resumeAnalytics.numEvents ? this.resumeAnalytics.initialWaitTime = e : e > this.resumeAnalytics.largestWaitTime && (this.resumeAnalytics.largestWaitTime = e), this.resumeAnalytics.totalWaitTime += e, this.resumeAnalytics.lastUpdateTime = E, this.resumeAnalytics.numEvents += 1 } if (o.default.isLoggingGatewayEvents && c.verboseDangerously("<~", s, r), l.default.flush(s, r), "READY" === s) { let e = (0, d.getReadyPayloadByteSizeAnalytics)(r); null === (t = this.getDispatchHandler(s)) || void 0 === t || t.dispatch(r, s, _), (0, d.logReadyPayloadReceived)(this.socket, r, E, a, e) } else "RESUMED" === s ? (null === (n = this.getDispatchHandler(s)) || void 0 === n || n.dispatch(r, s, _), (0, d.logResumeAnalytics)(this.resumeAnalytics), this.resumeAnalytics = (0, d.createResumeAnalytics)(), this.socket.handleResumeDispatched()) : null === (i = this.getDispatchHandler(s)) || void 0 === i || i.dispatch(r, s, _); this.socket.connectionState === u.default.RESUMING && (this.resumeAnalytics.dispatchTime += performance.now() - E) } clear() { this.paused = !1, this.queue.length = 0 } constructor(e) { _(this, "socket", void 0), _(this, "queue", void 0), _(this, "dispatchTimeout", void 0), _(this, "nextDispatchTimeout", void 0), _(this, "paused", void 0), _(this, "resumeAnalytics", void 0), _(this, "getDispatchHandler", void 0), _(this, "flush", void 0), this.socket = e, this.queue = [], this.dispatchTimeout = null, this.nextDispatchTimeout = 33, this.paused = !0, this.resumeAnalytics = (0, d.createResumeAnalytics)(), this.getDispatchHandler = null, this.flush = () => { if (this.paused) return; clearTimeout(this.dispatchTimeout), this.dispatchTimeout = null; let e = Date.now(), t = 0; for (; t < this.queue.length && 2 === this.queue[t].status; t++); if (0 === t) return; let n = this.queue.splice(0, t); this.dispatchMultiple(n); let i = Date.now() - e; i > 100 ? (c.log("Dispatched ".concat(n.length, " messages in ").concat(i, "ms")), this.nextDispatchTimeout = 250) : this.nextDispatchTimeout = 33 } } } }, 183139: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Opcode: function() { return i }, default: function() { return u } }), n("789020"), n("47120"); var i, r, s = n("836560"), a = n("936349"), o = n("709054"), l = n("981631"); (r = i || (i = {}))[r.DISPATCH = 0] = "DISPATCH", r[r.HEARTBEAT = 1] = "HEARTBEAT", r[r.IDENTIFY = 2] = "IDENTIFY", r[r.PRESENCE_UPDATE = 3] = "PRESENCE_UPDATE", r[r.VOICE_STATE_UPDATE = 4] = "VOICE_STATE_UPDATE", r[r.VOICE_SERVER_PING = 5] = "VOICE_SERVER_PING", r[r.RESUME = 6] = "RESUME", r[r.RECONNECT = 7] = "RECONNECT", r[r.REQUEST_GUILD_MEMBERS = 8] = "REQUEST_GUILD_MEMBERS", r[r.INVALID_SESSION = 9] = "INVALID_SESSION", r[r.HELLO = 10] = "HELLO", r[r.HEARTBEAT_ACK = 11] = "HEARTBEAT_ACK", r[r.CALL_CONNECT = 13] = "CALL_CONNECT", r[r.GUILD_SUBSCRIPTIONS = 14] = "GUILD_SUBSCRIPTIONS", r[r.STREAM_CREATE = 18] = "STREAM_CREATE", r[r.STREAM_DELETE = 19] = "STREAM_DELETE", r[r.STREAM_WATCH = 20] = "STREAM_WATCH", r[r.STREAM_PING = 21] = "STREAM_PING", r[r.STREAM_SET_PAUSED = 22] = "STREAM_SET_PAUSED", r[r.REQUEST_GUILD_APPLICATION_COMMANDS = 24] = "REQUEST_GUILD_APPLICATION_COMMANDS", r[r.EMBEDDED_ACTIVITY_LAUNCH = 25] = "EMBEDDED_ACTIVITY_LAUNCH", r[r.EMBEDDED_ACTIVITY_CLOSE = 26] = "EMBEDDED_ACTIVITY_CLOSE", r[r.EMBEDDED_ACTIVITY_UPDATE = 27] = "EMBEDDED_ACTIVITY_UPDATE", r[r.REQUEST_FORUM_UNREADS = 28] = "REQUEST_FORUM_UNREADS", r[r.REMOTE_COMMAND = 29] = "REMOTE_COMMAND", r[r.GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH = 30] = "GET_DELETED_ENTITY_IDS_NOT_MATCHING_HASH", r[r.REQUEST_SOUNDBOARD_SOUNDS = 31] = "REQUEST_SOUNDBOARD_SOUNDS", r[r.SPEED_TEST_CREATE = 32] = "SPEED_TEST_CREATE", r[r.SPEED_TEST_DELETE = 33] = "SPEED_TEST_DELETE", r[r.REQUEST_LAST_MESSAGES = 34] = "REQUEST_LAST_MESSAGES", r[r.SEARCH_RECENT_MEMBERS = 35] = "SEARCH_RECENT_MEMBERS", r[r.REQUEST_CHANNEL_STATUSES = 36] = "REQUEST_CHANNEL_STATUSES", r[r.GUILD_SUBSCRIPTIONS_BULK = 37] = "GUILD_SUBSCRIPTIONS_BULK"; class u extends s.EventEmitter { presenceUpdate(e, t, n, i, r) { this.send(3, { status: e, since: t, activities: n, afk: i, broadcast: r }) } voiceStateUpdate(e) { let { guildId: t = null, channelId: n = null, selfMute: i = !1, selfDeaf: r = !1, selfVideo: s = !1, preferredRegion: o = null, preferredRegions: l = null, videoStreamParameters: u = null, flags: d = 0 } = e, _ = { guild_id: t, channel_id: n, self_mute: i, self_deaf: r, self_video: s, flags: d }; null != n && a.default.shouldIncludePreferredRegion() && (_.preferred_region = o, _.preferred_regions = l), null != u && (_.tracks = null == u ? void 0 : u.map(e => ({ type: e.type, rid: e.rid, quality: e.quality }))), this.send(4, _) } voiceServerPing() { this.send(5, null) } embeddedActivityClose(e, t, n) { this.send(26, { guild_id: null != e ? e : l.ZERO_STRING_GUILD_ID, channel_id: t, application_id: n }) } requestGuildMembers(e, t) { let { query: n, limit: i, userIds: r, presences: s } = t; this.send(8, { guild_id: e, query: n, limit: i, user_ids: r, presences: s }) } searchRecentMembers(e, t) { let { query: n, continuationToken: i } = t; this.send(35, { guild_id: e, query: null != n ? n : "", continuation_token: null != i ? i : null }) } updateGuildSubscriptions(e) { let t = {}, n = 0; o.default.keys(e).forEach(i => { let r = e[i], s = JSON.stringify([i, r]).length; n + s > 15360 && (this.send(37, { subscriptions: t }), t = {}, n = 0), t[i] = r, n += s }), n > 0 && this.send(37, { subscriptions: t }) } callConnect(e) { this.send(13, { channel_id: e }) } streamCreate(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; this.send(18, { type: e, guild_id: t, channel_id: n, preferred_region: i }) } streamWatch(e) { this.send(20, { stream_key: e }) } streamPing(e) { this.send(21, { stream_key: e }) } streamDelete(e) { this.send(19, { stream_key: e }) } streamSetPaused(e, t) { this.send(22, { stream_key: e, paused: t }) } speedTestCreate() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null; this.send(32, { preferred_region: e }) } speedTestDelete() { this.send(33, null) } requestForumUnreads(e, t, n) { this.send(28, { guild_id: e, channel_id: t, threads: n.map(e => ({ thread_id: e.threadId, ack_message_id: e.ackMessageId })) }) } requestSoundboardSounds(e) { this.send(31, { guild_ids: e }) } requestLastMessages(e, t) { this.send(34, { guild_id: e, channel_ids: t }) } getDeletedEntityIdsNotMatchingHash(e, t, n, i, r) { this.send(30, { guild_id: e, channel_ids_hash: t, role_ids_hash: n, emoji_ids_hash: i, sticker_ids_hash: r }) } requestChannelStatuses(e) { this.send(36, { guild_id: e }) } remoteCommand(e, t) { this.send(29, { target_session_id: e, payload: t }) } } }, 955132: function(e, t, n) { "use strict"; n.r(t), n.d(t, { localPresenceState: function() { return T }, localVoiceState: function() { return f }, socket: function() { return I } }); var i = n("570140"), r = n("579806"), s = n("710845"), a = n("314897"), o = n("626135"), l = n("931619"), u = n("358085"), d = n("548570"), _ = n("616810"), c = n("755278"); let E = new s.default("ConnectionStore"), I = new d.default, T = new _.default(I), f = new c.default(I); I.handleIdentify = () => { let e = a.default.getToken(); return (E.verbose("handleIdentify called", { hasToken: null != e }), null == e) ? null : { token: e, properties: o.default.getSuperProperties(), presence: T.getInitialState() } }, (0, u.isDesktop)() && r.default.remotePowerMonitor.on("resume", () => { I.expeditedHeartbeat(5e3, "power monitor resumed") }), l.default.addOfflineCallback(() => { I.networkStateChange(15e3, "network detected offline.", !1) }), l.default.addOnlineCallback(() => { I.networkStateChange(5e3, "network detected online.") }), I.on("disconnect", e => { let { code: t, reason: n } = e; i.default.dispatch({ type: "CONNECTION_CLOSED", code: t, reason: n }) }), I.on("close", e => { let { code: t, reason: n } = e; i.default.dispatch({ type: "CONNECTION_INTERRUPTED", code: t, reason: n }) }) }, 420491: function(e, t, n) { "use strict"; let i; n.r(t); var r, s, a, o, l = n("259443"), u = n("442837"), d = n("570140"), _ = n("818083"), c = n("353926"), E = n("988348"), I = n("987338"); let T = (0, _.createExperiment)({ id: "2024-03_gateway_zstd", label: "Gateway Zstd compression", kind: "user", defaultConfig: { useZstd: !1, doVerification: !1 }, treatments: [{ id: I.ExperimentBuckets.CONTROL, label: "Control (verification)", config: { useZstd: !1, doVerification: !0 } }, { id: 1, label: "Use Zstd", config: { useZstd: !0, doVerification: !1 } }, { id: 2, label: "No Zstd, no verification", config: { useZstd: !1, doVerification: !1 } }, { id: 3, label: "Use Zstd (2)", config: { useZstd: !0, doVerification: !1 } }] }), f = (0, _.createExperiment)({ id: "2024-04_gateway_zstd_verification", label: "Gateway Zstd Verification", kind: "user", defaultConfig: { useZstd: !1 }, treatments: [{ id: 1, label: "Use Zstd", config: { useZstd: !0 } }] }), S = new l.Logger("GatewayZstdStore"); let h = !1, A = 0, m = !0; function N() { return null == i && (i = (0, E.supportsZstd)() && (0, E.getFastConnectZstd)()), i } function p() { if (h) { S.info("Ignoring zstd experiment config because we fell back to zlib"); return } let e = T.getCurrentConfig({ location: "GatewayZstdStore" }), t = e.useZstd; e.doVerification && (t = f.getCurrentConfig({ location: "GatewayZstdStore" }).useZstd), O(t), A = 0 } function O(e) { if (e && !(0, E.supportsZstd)()) { S.warn("Attempting to enable zstd but it is not supported"); return }(0, E.setFastConnectZstd)(e), e !== i && S.info("Setting Zstd to ".concat(e)), i = e } class C extends(o = u.default.Store) { initialize() { this.waitFor(c.default) } shouldUseZstd() { return N() } enableFailureTracking() { m = !0 } disableFailureTracking() { m = !1 } } a = "GatewayZstdStore", (s = "displayName") in(r = C) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new C(d.default, { CONNECTION_OPEN: p, CONNECTION_INTERRUPTED: function(e) { let { code: t } = e; N() && m && 1e3 !== t && (A += 1) > 3 && (S.error("Disabling zstd due to consecutive errors"), O(!1), h = !0) }, CONNECTION_RESUMED: p }) }, 988348: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createZstdContextWeb: function() { return u }, getFastConnectZstd: function() { return o }, setFastConnectZstd: function() { return l }, supportsZstd: function() { return a } }), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); var i = n("433517"), r = n("998502"); let s = null; function a() { return null == s && (s = function() { if (null == window.DiscordNative || void 0 === window.Uint8Array || void 0 === window.TextDecoder) return !1; try { return r.default.requireModule("discord_zstd"), !0 } catch (e) { if (e.message.includes("Cannot find")) return r.default.ensureModule("discord_zstd").catch(e => {}), !1; throw e } }()), s } function o() { return "true" === i.Storage.get("zstd_fast_connect") } function l(e) { e ? i.Storage.set("zstd_fast_connect", "true") : i.Storage.set("zstd_fast_connect", "false") } function u() { let { createContext: e } = r.default.requireModule("discord_zstd"); return e() } }, 616810: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("928801"), r = n("549895"), s = n("885110"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o extends i.default { getInitialState() { return s.default.getLocalPresence() } getNextState() { return s.default.getLocalPresence() } shouldCommit() { return this.socket.isSessionEstablished() } emitPresenceUpdate(e) { let { status: t, since: n, activities: i, afk: r, broadcast: s } = e; this.socket.presenceUpdate(t, n, i, r, s) } handleConnectionOpen() { let e = !this.switchingAccounts; this.update({}, e), this.switchingAccounts = !1 } handleAccountSwitch() { this.switchingAccounts = !0, this.reset(), this.emitPresenceUpdate(this.getState()) } constructor(e) { super(!1), a(this, "socket", void 0), a(this, "switchingAccounts", void 0), a(this, "didCommit", void 0), this.socket = e, this.switchingAccounts = !1, this.didCommit = (0, r.default)(5, 2e4, this.emitPresenceUpdate.bind(this)) } } }, 755278: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }), n("789020"); var i = n("928801"), r = n("924557"), s = n("435064"), a = n("779618"), o = n("594190"), l = n("836157"), u = n("441167"), d = n("695346"), _ = n("199902"), c = n("592125"), E = n("131951"), I = n("936349"), T = n("630388"), f = n("981631"); class S extends i.default { get guildId() { return this.getState().guildId } get channelId() { return this.getState().channelId } computeVoiceFlags() { var e, t, n; let i = 0, c = d.ClipsAllowVoiceRecording.getSetting(); i = (0, T.setFlag)(i, f.VoiceFlags.ALLOW_VOICE_RECORDING, c); let I = (0, a.default)(E.default), S = (0, r.areClipsEnabled)() && s.default.getSettings().clipsEnabled && ((null === (e = _.default.getCurrentUserActiveStream()) || void 0 === e ? void 0 : e.state) === f.ApplicationStreamStates.ACTIVE || (null === (t = _.default.getCurrentUserActiveStream()) || void 0 === t ? void 0 : t.state) === f.ApplicationStreamStates.PAUSED), { enableDecoupledGameClipping: h } = l.default.getCurrentConfig({ location: "computeVoiceFlags" }), A = I && s.default.getSettings().decoupledClipsEnabled && (null === (n = o.default.getVisibleGame()) || void 0 === n ? void 0 : n.windowHandle) != null && h; i = (0, T.setFlag)(i, f.VoiceFlags.CLIPS_ENABLED, S || A); let { enableViewerClipping: m } = u.default.getCurrentConfig({ location: "computeVoiceFlags" }, { autoTrackExposure: !1 }), N = m && I && s.default.getSettings().viewerClipsEnabled; return i = (0, T.setFlag)(i, f.VoiceFlags.ALLOW_ANY_VIEWER_CLIPS, N) } getInitialState() { return { guildId: null, channelId: null, selfMute: E.default.isSelfMute(), selfDeaf: E.default.isSelfDeaf(), selfVideo: E.default.isVideoEnabled(), preferredRegion: null, preferredRegions: null, videoStreamParameters: null, flags: 0 } } getNextState(e) { let { guildId: t, channelId: n } = e; return { guildId: t, channelId: n, selfMute: E.default.isSelfMute(), selfDeaf: E.default.isSelfDeaf(), selfVideo: E.default.isVideoEnabled(), preferredRegion: I.default.getPreferredRegion(), preferredRegions: I.default.getPreferredRegions(), videoStreamParameters: E.default.getVideoStreamParameters(), flags: this.computeVoiceFlags() } } shouldCommit() { return this.socket.isSessionEstablished() } didCommit(e) { var t; let { guildId: n, channelId: i, selfMute: r, selfDeaf: s, selfVideo: a, preferredRegion: o, preferredRegions: l, videoStreamParameters: u, flags: d = 0 } = e; a && (null === (t = c.default.getChannel(i)) || void 0 === t ? void 0 : t.type) === f.ChannelTypes.GUILD_STAGE_VOICE ? this.socket.voiceStateUpdate({ guildId: n, channelId: i, selfMute: r, selfDeaf: s, selfVideo: a, preferredRegion: o, preferredRegions: l, videoStreamParameters: u, flags: d }) : this.socket.voiceStateUpdate({ guildId: n, channelId: i, selfMute: r, selfDeaf: s, selfVideo: a, preferredRegion: o, preferredRegions: l, flags: d }) } constructor(e) { var t, n, i; super(), t = this, i = void 0, (n = "socket") in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i, this.socket = e } } }, 645436: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getIsPaused: function() { return r }, setIsPaused: function() { return s } }); let i = !1; function r() { return i } function s(e) { i = e } }, 972830: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addPostConnectionCallback: function() { return o } }), n("177593"), n("653041"); var i = n("570140"), r = n("38618"); let s = []; function a(e) { setImmediate(() => e()) } function o(e) { r.default.isConnectedOrOverlay() ? a(e) : s.push(e) } i.default.subscribe("CONNECTION_OPEN", () => { s.forEach(e => a(e)), s = [] }), i.default.subscribe("CONNECTION_RESUMED", () => { s.forEach(e => a(e)), s = [] }) }, 833508: function(e, t, n) { "use strict"; function i(e, t) { return new WebSocket(e, t) } n.r(t), n.d(t, { default: function() { return i } }) }, 344651: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return V } }), n("653041"), n("47120"), n("789020"), n("411104"); var i = n("392711"), r = n.n(i); n("724522"); var s = n("442837"), a = n("570140"), o = n("749210"), l = n("821849"), u = n("232567"), d = n("864106"), _ = n("710845"), c = n("292419"), E = n("566006"), I = n("952537"), T = n("218543"), f = n("48481"), S = n("131704"), h = n("209747"), A = n("598077"), m = n("592125"), N = n("271383"), p = n("819640"), O = n("594174"), C = n("979651"), R = n("509545"), g = n("78839"), L = n("936101"), v = n("868158"), D = n("483012"), M = n("955132"); let y = new _.default("ConnectionStore"), P = new D.default(M.socket, (e, t) => { var n; e = null != e ? e : { type: "CHANNEL_UPDATES", channels: [] }; let i = (0, S.createChannelRecordFromServer)(t), r = m.default.getChannel(t.id), s = null == r ? void 0 : r.merge({ ...i, recipients: r.recipients, bitrate: null !== (n = i.bitrate) && void 0 !== n ? n : r.bitrate }); return e.channels.push(null != s ? s : i), e }, e => "CHANNEL_UPDATE" !== e), U = new D.default(M.socket, (e, t) => ((e = null == e ? { type: "SOUNDBOARD_SOUNDS_RECEIVED", updates: [] } : e).updates.push({ guildId: t.guild_id, sounds: t.soundboard_sounds.map(e => ({ name: e.name, soundId: e.sound_id, emojiName: e.emoji_name, emojiId: e.emoji_id, userId: e.user_id, volume: e.volume, available: e.available, guildId: t.guild_id })) }), e), e => "SOUNDBOARD_SOUNDS" !== e), b = new D.default(M.socket, (e, t) => ((e = null != e ? e : { type: "GUILD_MEMBERS_CHUNK_BATCH", chunks: [] }).chunks.push(t), e), e => "GUILD_MEMBERS_CHUNK" !== e), G = new D.default(M.socket, (e, t) => ((e = null == e ? { type: "PRESENCE_UPDATES", updates: [] } : e).updates.push(t), e), e => "PRESENCE_UPDATE" !== e && "GUILD_MEMBERS_CHUNK" !== e), w = {}; function k(e, t) { for (let n of e) w[n] = { preload: () => null, dispatch: t } } function B(e, t, n) { for (let i of e) w[i] = { preload: t, dispatch: n } } function V(e) { return w[e] } function x(e) { a.default.dispatch(e).catch(t => M.socket.resetSocketOnDispatchError({ error: t, action: e.type })) } function F(e, t, n) { var i; let { roles: s, nick: a, avatar: o, avatar_decoration_data: l, flags: u, premium_since: _, pending: c, joined_at: E, communication_disabled_until: I, unusual_dm_activity_until: T } = n, f = N.default.getMember(e, t.id); (!(null != f && f.nick === a && f.avatar === o && r().isEqual(f.roles, s) && (0, d.isEqualAvatarDecoration)(f.avatarDecoration, l)) || f.premiumSince !== _ || f.isPending !== c || f.joinedAt !== E || f.communicationDisabledUntil !== I || f.flags !== u || (null !== (i = f.unusualDMActivityUntil) && void 0 !== i ? i : null) !== (null != T ? T : null)) && x({ type: "GUILD_MEMBER_ADD", guildId: e, user: t, roles: s, nick: a, avatar: o, avatarDecoration: l, premiumSince: _, isPending: c, joinedAt: E, communicationDisabledUntil: I, unusualDMActivityUntil: T, flags: u }) } function H(e) { let { member: t, mentions: n, author: i, guild_id: r } = e; null != t && null != r && F(r, i, t), null != n && n.forEach(e => { if (null != e.member && null != r) { let { member: t } = e; delete e.member, F(r, e, t) } }) } function Y(e) { return e.map(e => ({ sessionId: e.session_id, lastModified: e.last_modified, status: e.status, activities: e.activities, active: !!e.active, clientInfo: e.client_info, broadcast: e.broadcast })) } function j(e) { let { guildId: t, user: n, status: i, activities: r, clientStatus: s, broadcast: a } = e; G.add({ guildId: t, user: n, status: i, clientStatus: s, activities: r, broadcast: a }) } B(["INITIAL_GUILD"], e => "full" === e.data_mode ? null : m.ChannelLoader.loadGuildIds([e.id]), e => { T.default.initialGuild.measure(() => { s.default.Emitter.batched(() => { let t = v.hydrateInitialGuild(e, M.socket.identifyStartTime); null != O.default.getCurrentUser() && (x({ type: "GUILD_CREATE", guild: t }), x({ type: "VOICE_STATE_UPDATES", voiceStates: t.voice_states.map(e => { var n; return { userId: e.user_id, guildId: t.id, sessionId: e.session_id, channelId: e.channel_id, mute: e.mute, deaf: e.deaf, selfMute: e.self_mute, selfDeaf: e.self_deaf, selfVideo: e.self_video || !1, suppress: e.suppress, selfStream: e.self_stream || !1, requestToSpeakTimestamp: null !== (n = e.request_to_speak_timestamp) && void 0 !== n ? n : null } }) }), y.log("Dispatched INITIAL_GUILD ".concat(e.id))) }) }) }), k(["READY_SUPPLEMENTAL"], e => { T.default.readySupplemental.measure(() => { s.default.Emitter.batched(() => { var t, n; e = T.default.hydrateReadySupplemental.measure(() => v.hydrateReadySupplementalPayload(e, M.socket.identifyStartTime)); let i = e => e.map(e => ({ user: e.user, status: e.status, clientStatus: e.client_status, activities: e.activities, broadcast: e.broadcast })), r = e.guilds.filter(e => !0 !== e.unavailable); r.forEach(e => { e.presences = i(e.presences || []) }); let s = e.presences ? i(e.presences) : [], a = (null !== (t = e.lazy_private_channels) && void 0 !== t ? t : []).map(e => (0, S.createChannelRecordFromServer)(e)), o = null !== (n = e.game_invites) && void 0 !== n ? n : []; T.default.dispatchReadySupplemental.measure(() => { x({ type: "CONNECTION_OPEN_SUPPLEMENTAL", guilds: r, presences: s, lazyPrivateChannels: a, gameInvites: o }) }); let l = []; r.forEach(e => { e.voice_states.forEach(t => { var n; l.push({ userId: t.user_id, guildId: e.id, sessionId: t.session_id, channelId: t.channel_id, mute: t.mute, deaf: t.deaf, selfMute: t.self_mute, selfDeaf: t.self_deaf, selfVideo: t.self_video || !1, suppress: t.suppress, selfStream: t.self_stream || !1, requestToSpeakTimestamp: null !== (n = t.request_to_speak_timestamp) && void 0 !== n ? n : null }) }) }), x({ type: "VOICE_STATE_UPDATES", voiceStates: l, initial: !0 }), M.localVoiceState.update() }) }), setTimeout(() => x({ type: "POST_CONNECTION_OPEN" }), 2e3) }), B(["READY"], e => { var t; let n = v.preloadReadyPayloadData(), i = e.guilds.filter(e => { var t, n; return !e.unavailable && "partial" === e.data_mode && (!!((null !== (t = e.partial_updates.channels) && void 0 !== t ? t : []).length > 0) || !!((null !== (n = e.partial_updates.deleted_channel_ids) && void 0 !== n ? n : []).length > 0) || void 0) }).map(e => e.id); return Promise.all([n, null !== (t = m.ChannelLoader.loadGuildIds(i)) && void 0 !== t ? t : Promise.resolve()]).then(e => { let [t] = e; return t }) }, (e, t, n) => { if (e.user.bot) { x({ type: "LOGOUT" }); return } T.default.ready.measure(() => { s.default.Emitter.batched(() => { let t = (e = T.default.hydrateReady.measure(() => v.hydrateReadyPayloadPrioritized(e, M.socket.identifyStartTime, n))).private_channels.map(e => (0, S.createChannelRecordFromServer)(e)), i = e.guilds.filter(e => !0 === e.unavailable && !0 !== e.geo_restricted).map(e => e.id), r = e.guilds.filter(e => !0 !== e.unavailable), s = e.guilds.filter(e => !0 === e.geo_restricted); r.forEach(e => { e.presences = [] }); let a = null == e.user_settings_proto ? void 0 : (0, f.b64ToPreloadedUserSettingsProto)(e.user_settings_proto); T.default.dispatchReady.measure(() => { var n; x({ type: "CONNECTION_OPEN", sessionId: e.session_id, authSessionIdHash: e.auth_session_id_hash, user: e.user, users: e.users, guilds: r, initialPrivateChannels: t, unavailableGuilds: i, readState: e.read_state, userGuildSettings: e.user_guild_settings, tutorial: e.tutorial, relationships: e.relationships, friendSuggestionCount: e.friend_suggestion_count, presences: e.presences, analyticsToken: e.analytics_token, experiments: e.experiments, connectedAccounts: e.connected_accounts, guildExperiments: e.guild_experiments, requiredAction: e.required_action, consents: e.consents, sessions: Y(e.sessions || []), pendingPayments: e.pending_payments, countryCode: null !== (n = e.country_code) && void 0 !== n ? n : void 0, guildJoinRequests: e.guild_join_requests || [], userSettingsProto: a, apiCodeVersion: e.api_code_version, auth: e.auth, notificationSettings: { flags: e.notification_settings.flags }, geoRestrictedGuilds: s }) }), null != e.auth_token && x({ type: "UPDATE_TOKEN", token: e.auth_token, userId: e.user.id }), M.localPresenceState.update(), M.localVoiceState.update() }) }) }), k(["RESUMED"], () => { M.localPresenceState.forceUpdate(), M.localVoiceState.forceUpdate(), x({ type: "CONNECTION_RESUMED" }) }), k(["TYPING_START"], e => { null != e.member && F(e.guild_id, e.member.user, e.member), x({ type: "TYPING_START", channelId: e.channel_id, userId: e.user_id }) }), k(["ACTIVITY_START"], e => { x({ type: "ACTIVITY_START", userId: e.user_id, activity: e.activity }) }), k(["ACTIVITY_USER_ACTION"], e => { x({ type: "ACTIVITY_USER_ACTION", actionType: e.action_type, user: e.user, applicationId: e.application_id, channelId: e.channel_id, messageId: e.message_id }) }), B(["MESSAGE_CREATE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { H(e), null != e.author && x({ type: "MESSAGE_CREATE", guildId: e.guild_id, channelId: e.channel_id, message: e, optimistic: !1, isPushNotification: !1 }) }), B(["MESSAGE_UPDATE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { H(e), x({ type: "MESSAGE_UPDATE", guildId: e.guild_id, message: e }) }), B(["MESSAGE_DELETE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "MESSAGE_DELETE", guildId: e.guild_id, id: e.id, channelId: e.channel_id }) }), B(["MESSAGE_DELETE_BULK"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "MESSAGE_DELETE_BULK", guildId: e.guild_id, ids: e.ids, channelId: e.channel_id }) }), B(["MESSAGE_ACK"], e => m.ChannelLoader.loadGuildFromChannelId(e.channel_id), e => { x({ type: "MESSAGE_ACK", channelId: e.channel_id, messageId: e.message_id, manual: e.manual, newMentionCount: e.mention_count, version: e.version }) }), k(["GUILD_FEATURE_ACK"], e => { x({ type: "GUILD_FEATURE_ACK", id: e.resource_id, ackType: e.ack_type, ackedId: e.entity_id }) }), k(["USER_NON_CHANNEL_ACK"], e => { x({ type: "USER_NON_CHANNEL_ACK", ackType: e.ack_type, ackedId: e.entity_id }) }), B(["CHANNEL_PINS_ACK"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "CHANNEL_PINS_ACK", channelId: e.channel_id, timestamp: e.timestamp, version: e.version }) }), B(["CHANNEL_PINS_UPDATE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "CHANNEL_PINS_UPDATE", channelId: e.channel_id, lastPinTimestamp: e.last_pin_timestamp }) }), B(["CHANNEL_CREATE", "CHANNEL_DELETE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), (e, t) => { x({ type: t, channel: (0, S.createChannelRecordFromServer)(e) }) }), k(["VOICE_CHANNEL_STATUS_UPDATE"], (e, t) => { x({ type: t, id: e.id, guildId: e.guild_id, status: e.status }) }), k(["CHANNEL_STATUSES"], (e, t) => { x({ type: t, guildId: e.guild_id, channels: e.channels }) }), B(["CHANNEL_UPDATE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { P.add(e) }), B(["THREAD_CREATE", "THREAD_UPDATE", "THREAD_DELETE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), (e, t) => { let { newly_created: n, ...i } = e; x({ type: t, isNewlyCreated: n, channel: (0, S.createChannelRecordFromServer)(i) }) }), B(["THREAD_LIST_SYNC"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "THREAD_LIST_SYNC", guildId: e.guild_id, threads: e.threads.map(e => { let t = m.default.getChannel(e.parent_id); return null != t && (e.nsfw = t.nsfw, e.parentChannelThreadType = t.type), (0, S.createChannelRecordFromServer)(e) }), mostRecentMessages: e.most_recent_messages, members: e.members ? r().map(e.members, I.default) : void 0, channelIds: e.channel_ids }) }), k(["THREAD_MEMBER_UPDATE"], e => { x({ type: "THREAD_MEMBER_UPDATE", id: e.id, guildId: e.guild_id, userId: e.user_id, flags: e.flags, muted: e.muted, muteConfig: e.mute_config, joinTimestamp: e.join_timestamp }) }), k(["THREAD_MEMBERS_UPDATE"], e => { var t; x({ type: "THREAD_MEMBERS_UPDATE", id: e.id, guildId: e.guild_id, memberCount: e.member_count, addedMembers: null === (t = e.added_members) || void 0 === t ? void 0 : t.map(t => ({ id: t.id, guildId: e.guild_id, userId: t.user_id, flags: t.flags, joinTimestamp: t.join_timestamp })), removedMemberIds: e.removed_member_ids, memberIdsPreview: e.member_ids_preview }) }), k(["FORUM_UNREADS"], e => { !e.permission_denied && x({ type: "FORUM_UNREADS", channelId: e.channel_id, threads: e.threads.map(e => ({ threadId: e.thread_id, missing: e.missing, count: e.count })) }) }), k(["SOUNDBOARD_SOUNDS"], e => { U.add(e) }), k(["CHANNEL_RECIPIENT_ADD", "CHANNEL_RECIPIENT_REMOVE"], (e, t) => { let n = m.default.getBasicChannel(e.channel_id); x({ type: t, channelId: e.channel_id, user: e.user, nick: e.nick, isMember: null != n }) }), B(["GUILD_CREATE"], e => "full" === e.data_mode ? null : m.ChannelLoader.loadGuildIds([e.id]), e => { if (e.unavailable) x({ type: "GUILD_UNAVAILABLE", guildId: e.id }); else { let t = v.hydratePreviouslyUnavailableGuild(e); o.default.createGuild(t), x({ type: "VOICE_STATE_UPDATES", voiceStates: t.voice_states.map(e => { var n; return { userId: e.user_id, guildId: t.id, sessionId: e.session_id, channelId: e.channel_id, mute: e.mute, deaf: e.deaf, selfMute: e.self_mute, selfDeaf: e.self_deaf, selfVideo: e.self_video || !1, suppress: e.suppress, selfStream: e.self_stream || !1, requestToSpeakTimestamp: null !== (n = e.request_to_speak_timestamp) && void 0 !== n ? n : null } }) }) } }), k(["GUILD_UPDATE"], e => { x({ type: "GUILD_UPDATE", guild: e }), e.unavailable && x({ type: "GUILD_UNAVAILABLE", guildId: e.id }) }), k(["GUILD_DELETE"], e => { x({ type: "GUILD_DELETE", guild: e }), e.geo_restricted ? x({ type: "GUILD_GEO_RESTRICTED", guildId: e.id, icon: e.icon, name: e.name }) : e.unavailable && x({ type: "GUILD_UNAVAILABLE", guildId: e.id }) }), k(["GUILD_MEMBERS_CHUNK"], e => { s.default.Emitter.batched(() => { b.add({ guildId: e.guild_id, members: e.members, notFound: e.not_found }), null != e.presences && e.presences.forEach(t => { let { user: n, status: i, client_status: r, activities: s, broadcast: a } = t; return j({ guildId: e.guild_id, user: n, status: i, activities: s, clientStatus: r, broadcast: a }) }), D.default.flush("GUILD_MEMBERS_CHUNK") }) }), k(["THREAD_MEMBER_LIST_UPDATE"], e => { s.default.Emitter.batched(() => { x({ type: "THREAD_MEMBER_LIST_UPDATE", guildId: e.guild_id, threadId: e.thread_id, members: e.members }), null != e.presences && e.presences.forEach(t => { let { user: n, status: i, client_status: r, activities: s, broadcast: a } = t; return j({ guildId: e.guild_id, user: n, status: i, activities: s, clientStatus: r, broadcast: a }) }), D.default.flush() }) }), k(["GUILD_BAN_ADD", "GUILD_BAN_REMOVE", "GUILD_MEMBER_ADD", "GUILD_MEMBER_UPDATE", "GUILD_MEMBER_REMOVE"], (e, t) => { x({ type: t, guildId: e.guild_id, user: e.user, avatar: e.avatar, avatarDecoration: e.avatar_decoration_data, roles: e.roles, nick: e.nick, premiumSince: e.premium_since, isPending: e.pending, joinedAt: e.joined_at, communicationDisabledUntil: e.communication_disabled_until, unusualDMActivityUntil: e.unusual_dm_activity_until, flags: e.flags }) }), B(["GUILD_ROLE_CREATE", "GUILD_ROLE_UPDATE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), (e, t) => { x({ type: t, guildId: e.guild_id, role: e.role }) }), B(["GUILD_ROLE_DELETE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "GUILD_ROLE_DELETE", guildId: e.guild_id, roleId: e.role_id, version: e.version }) }), k(["GUILD_EMOJIS_UPDATE"], e => { x({ type: "GUILD_EMOJIS_UPDATE", guildId: e.guild_id, emojis: e.emojis }) }), k(["GUILD_STICKERS_UPDATE"], e => { x({ type: "GUILD_STICKERS_UPDATE", guildId: e.guild_id, stickers: e.stickers }) }), k(["GUILD_INTEGRATIONS_UPDATE"], e => { x({ type: "GUILD_INTEGRATIONS_UPDATE", guildId: e.guild_id }) }), k(["INTEGRATION_CREATE"], e => { x({ type: "INTEGRATION_CREATE", application: e.application, guildId: e.guild_id }) }), k(["INTEGRATION_DELETE"], e => { x({ type: "INTEGRATION_DELETE", applicationId: e.application_id, guildId: e.guild_id }) }), k(["USER_UPDATE"], e => { x({ type: "CURRENT_USER_UPDATE", user: e }) }), k(["USER_SETTINGS_PROTO_UPDATE"], e => { let t = (0, f.b64ToProtoWithType)(e.settings.type, e.settings.proto); if (null != t) { if ("string" == typeof t) throw console.error("Invalid proto: |".concat(t, "| |").concat(e.settings.proto, "|")), console.error({ parsed: t, wire: e.settings.proto, type: e.settings.type }), Error("UserSettingsProto must not be a string"); x({ type: "USER_SETTINGS_PROTO_UPDATE", settings: { proto: t, type: e.settings.type }, partial: e.partial }) } }), k(["USER_GUILD_SETTINGS_UPDATE"], e => { x({ type: "USER_GUILD_SETTINGS_FULL_UPDATE", userGuildSettings: [e] }) }), k(["USER_CONNECTIONS_UPDATE"], () => { x({ type: "USER_CONNECTIONS_UPDATE" }) }), k(["USER_REQUIRED_ACTION_UPDATE"], e => { x({ type: "USER_REQUIRED_ACTION_UPDATE", requiredAction: e.required_action }) }), k(["USER_NOTE_UPDATE"], e => { x({ type: "USER_NOTE_UPDATE", ...e }) }), k(["RELATIONSHIP_ADD"], e => { x({ type: "RELATIONSHIP_ADD", relationship: { id: e.id, type: e.type, user: e.user, since: e.since, nickname: e.nickname }, shouldNotify: !0 === e.should_notify }) }), k(["RELATIONSHIP_REMOVE"], e => { x({ type: "RELATIONSHIP_REMOVE", relationship: e }) }), k(["RELATIONSHIP_UPDATE"], e => { x({ type: "RELATIONSHIP_UPDATE", relationship: e }) }), k(["PRESENCE_UPDATE"], e => { j({ guildId: e.guild_id, user: e.user, status: e.status, activities: e.activities, clientStatus: e.client_status, broadcast: e.broadcast }) }), k(["PRESENCES_REPLACE"], e => { x({ type: "PRESENCES_REPLACE", presences: e }) }), k(["SESSIONS_REPLACE"], e => { x({ type: "SESSIONS_REPLACE", sessions: Y(e) }) }), k(["VOICE_STATE_UPDATE"], e => { var t; null != e.member && F(e.guild_id, e.member.user, e.member), x({ type: "VOICE_STATE_UPDATES", voiceStates: [{ userId: e.user_id, guildId: e.guild_id, sessionId: e.session_id, channelId: e.channel_id, mute: e.mute, deaf: e.deaf, selfMute: e.self_mute, selfDeaf: e.self_deaf, selfVideo: e.self_video || !1, suppress: e.suppress, selfStream: e.self_stream || !1, requestToSpeakTimestamp: null !== (t = e.request_to_speak_timestamp) && void 0 !== t ? t : null, oldChannelId: C.default.getUserVoiceChannelId(e.guild_id, e.user_id) }] }) }), k(["VOICE_SERVER_UPDATE"], e => { x({ type: "VOICE_SERVER_UPDATE", guildId: e.guild_id, channelId: e.channel_id, endpoint: e.endpoint, token: e.token }) }), k(["CALL_CREATE"], e => { x({ type: "CALL_CREATE", channelId: e.channel_id, messageId: e.message_id, embeddedActivities: e.embedded_activities, region: e.region, ringing: e.ringing }); let t = e.voice_states; null != t && x({ type: "VOICE_STATE_UPDATES", voiceStates: t.map(e => { var t; return { userId: e.user_id, guildId: null, sessionId: e.session_id, channelId: e.channel_id, mute: e.mute, deaf: e.deaf, selfMute: e.self_mute, selfDeaf: e.self_deaf, selfVideo: e.self_video || !1, suppress: e.suppress, selfStream: e.self_stream || !1, requestToSpeakTimestamp: null !== (t = e.request_to_speak_timestamp) && void 0 !== t ? t : null } }) }) }), k(["CALL_UPDATE"], e => { x({ type: "CALL_UPDATE", channelId: e.channel_id, messageId: e.message_id, region: e.region, ringing: e.ringing }) }), k(["CALL_DELETE"], e => { x({ type: "CALL_DELETE", channelId: e.channel_id, unavailable: e.unavailable }) }), k(["OAUTH2_TOKEN_REVOKE"], e => { x({ type: "OAUTH2_TOKEN_REVOKE", accessToken: e.access_token }) }), k(["RECENT_MENTION_DELETE"], e => { x({ type: "RECENT_MENTION_DELETE", id: e.message_id }) }), k(["FRIEND_SUGGESTION_CREATE"], e => { x({ type: "FRIEND_SUGGESTION_CREATE", suggestion: e }) }), k(["FRIEND_SUGGESTION_DELETE"], e => { x({ type: "FRIEND_SUGGESTION_DELETE", suggestedUserId: e.suggested_user_id }) }), k(["WEBHOOKS_UPDATE"], e => { x({ type: "WEBHOOKS_UPDATE", guildId: e.guild_id, channelId: e.channel_id }) }), k(["MESSAGE_REACTION_ADD", "MESSAGE_REACTION_REMOVE"], (e, t) => { x({ type: t, channelId: e.channel_id, messageId: e.message_id, userId: e.user_id, emoji: e.emoji, colors: e.burst_colors, reactionType: e.type }) }), k(["MESSAGE_POLL_VOTE_ADD", "MESSAGE_POLL_VOTE_REMOVE"], (e, t) => { x({ type: "MESSAGE_POLL_VOTE_ADD" === t ? "MESSAGE_REACTION_ADD" : "MESSAGE_REACTION_REMOVE", channelId: e.channel_id, messageId: e.message_id, userId: e.user_id, emoji: { id: e.answer_id, name: "" }, reactionType: E.ReactionTypes.VOTE }) }), k(["MESSAGE_REACTION_REMOVE_ALL"], e => { x({ type: "MESSAGE_REACTION_REMOVE_ALL", channelId: e.channel_id, messageId: e.message_id }) }), k(["MESSAGE_REACTION_REMOVE_EMOJI"], e => { x({ type: "MESSAGE_REACTION_REMOVE_EMOJI", channelId: e.channel_id, messageId: e.message_id, emoji: e.emoji }) }), k(["MESSAGE_REACTION_ADD_MANY"], e => { x({ type: "MESSAGE_REACTION_ADD_MANY", channelId: e.channel_id, messageId: e.message_id, reactions: e.reactions }) }), k(["PAYMENT_UPDATE"], e => { x({ type: "PAYMENT_UPDATE", payment: e }) }), k(["ENTITLEMENT_CREATE", "ENTITLEMENT_UPDATE", "ENTITLEMENT_DELETE"], (e, t) => { x({ type: t, entitlement: e }) }), k(["USER_PAYMENT_SOURCES_UPDATE"], () => { p.default.hasLayers() && (n("355467").fetchPaymentSources(), l.fetchSubscriptionPlansBySKUs(R.default.getFetchedSKUIDs())) }), k(["USER_SUBSCRIPTIONS_UPDATE"], () => { u.fetchCurrentUser(), p.default.hasLayers() && n("355467").fetchSubscriptions() }), k(["USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_CREATE"], e => { x({ type: "GUILD_BOOST_SLOT_CREATE", guildBoostSlot: h.default.createFromServer(e, g.default.getSubscriptionById(e.subscription_id)) }) }), k(["USER_PREMIUM_GUILD_SUBSCRIPTION_SLOT_UPDATE"], e => { x({ type: "GUILD_BOOST_SLOT_UPDATE", guildBoostSlot: h.default.createFromServer(e, g.default.getSubscriptionById(e.subscription_id)) }) }), k(["BILLING_POPUP_BRIDGE_CALLBACK"], e => { x({ type: "BILLING_POPUP_BRIDGE_CALLBACK", paymentSourceType: e.payment_source_type, state: e.state, path: e.path, query: e.query }) }), k(["USER_PAYMENT_BROWSER_CHECKOUT_DONE"], e => { x({ type: "USER_PAYMENT_BROWSER_CHECKOUT_DONE", loadId: e.load_id }) }), k(["USER_PAYMENT_CLIENT_ADD"], e => { (0, L.getPurchaseTokenHash)().then(t => { let n = e.purchase_token_hash; n === t && x({ type: "USER_PAYMENT_CLIENT_ADD", purchaseTokenHash: n, expiresAt: e.expires_at }) }) }), k(["GUILD_MEMBER_LIST_UPDATE"], e => { s.default.Emitter.batched(() => { let t = t => { if (null == t.member) return; let { member: n } = t; if (F(e.guild_id, n.user, n), null == n.presence) return; let { presence: i } = n; j({ guildId: e.guild_id, user: i.user, status: i.status, activities: i.activities, clientStatus: i.client_status, broadcast: i.broadcast }) }; e.ops.forEach(e => { let { op: n, items: i, item: r } = e; switch (n) { case "SYNC": i.forEach(t); break; case "UPDATE": case "INSERT": t(r) } }), D.default.flush(), x({ type: "GUILD_MEMBER_LIST_UPDATE", guildId: e.guild_id, id: e.id, ops: e.ops, groups: e.groups, memberCount: e.member_count, onlineCount: e.online_count }) }) }), k(["GIFT_CODE_UPDATE"], e => { x({ type: "GIFT_CODE_UPDATE", uses: e.uses, code: e.code }) }), k(["GIFT_CODE_CREATE"], e => { x({ type: "GIFT_CODE_CREATE", giftCode: e }) }), k(["USER_ACHIEVEMENT_UPDATE"], e => { x({ type: "USER_ACHIEVEMENT_UPDATE", userAchievement: e }) }), k(["LIBRARY_APPLICATION_UPDATE"], e => { x({ type: "LIBRARY_APPLICATION_UPDATE", libraryApplication: e }) }), k(["STREAM_CREATE"], e => { x({ type: "STREAM_CREATE", streamKey: e.stream_key, region: e.region, viewerIds: e.viewer_ids, rtcServerId: e.rtc_server_id, paused: e.paused }) }), k(["STREAM_SERVER_UPDATE"], e => { x({ type: "STREAM_SERVER_UPDATE", streamKey: e.stream_key, endpoint: e.endpoint, token: e.token }) }), k(["STREAM_UPDATE"], e => { x({ type: "STREAM_UPDATE", streamKey: e.stream_key, region: e.region, viewerIds: e.viewer_ids, paused: e.paused }) }), k(["STREAM_DELETE"], e => { x({ type: "STREAM_DELETE", streamKey: e.stream_key, unavailable: e.unavailable, reason: e.reason }) }), k(["GENERIC_PUSH_NOTIFICATION_SENT"], e => { x({ type: "GENERIC_PUSH_NOTIFICATION_SENT", title: e.title, body: e.body, trackingType: e.tracking_type, icon: e.icon, route: e.route, tag: e.tag }) }), k(["NOTIFICATION_CENTER_ITEM_CREATE"], e => { x({ type: "NOTIFICATION_CENTER_ITEM_CREATE", item: e }) }), k(["NOTIFICATION_CENTER_ITEM_DELETE"], e => { x({ type: "NOTIFICATION_CENTER_ITEM_DELETE", id: e.id }) }), k(["NOTIFICATION_CENTER_ITEMS_ACK"], e => { x({ type: "NOTIFICATION_CENTER_ITEMS_ACK", ids: [e.id], optimistic: !1 }) }), k(["NOTIFICATION_CENTER_ITEM_COMPLETED"], e => { x({ type: "NOTIFICATION_CENTER_ITEM_COMPLETED", item_enum: e.item_enum }) }), k(["APPLICATION_COMMAND_PERMISSIONS_UPDATE"], (e, t) => { x({ type: t, guildId: e.guild_id }) }), k(["GUILD_APPLICATION_COMMAND_INDEX_UPDATE"], e => { x({ type: "GUILD_APPLICATION_COMMAND_INDEX_UPDATE", guildId: e.guild_id, version: e.version }) }), k(["GUILD_JOIN_REQUEST_CREATE"], e => { x({ type: "GUILD_JOIN_REQUEST_CREATE", request: e.request, status: e.status, guildId: e.guild_id }) }), k(["GUILD_JOIN_REQUEST_UPDATE"], e => { x({ type: "GUILD_JOIN_REQUEST_UPDATE", request: e.request, status: e.status, guildId: e.guild_id }) }), k(["GUILD_JOIN_REQUEST_DELETE"], e => { x({ type: "GUILD_JOIN_REQUEST_DELETE", id: e.id, userId: e.user_id, guildId: e.guild_id }) }), k(["INTERACTION_CREATE"], e => { x({ type: "INTERACTION_CREATE", interactionId: e.id, nonce: e.nonce }) }), k(["INTERACTION_SUCCESS"], e => { x({ type: "INTERACTION_SUCCESS", interactionId: e.id, nonce: e.nonce }) }), k(["INTERACTION_FAILURE"], e => { x({ type: "INTERACTION_FAILURE", nonce: e.nonce }) }), k(["APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE"], e => { x({ type: "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE", choices: e.choices, nonce: e.nonce }) }), k(["INTERACTION_MODAL_CREATE"], e => { x({ type: "INTERACTION_MODAL_CREATE", id: e.id, channelId: e.channel_id, customId: e.custom_id, application: e.application, title: e.title, components: (0, c.transformComponents)(e.components), nonce: e.nonce }) }), k(["INTERACTION_IFRAME_MODAL_CREATE"], e => { x({ type: "INTERACTION_IFRAME_MODAL_CREATE", id: e.id, channelId: e.channel_id, customId: e.custom_id, application: e.application, title: e.title, iframePath: e.iframe_path, modalSize: e.modal_size, nonce: e.nonce }) }), k(["STAGE_INSTANCE_CREATE"], e => { x({ type: "STAGE_INSTANCE_CREATE", instance: e }) }), k(["STAGE_INSTANCE_UPDATE"], e => { x({ type: "STAGE_INSTANCE_UPDATE", instance: e }) }), k(["STAGE_INSTANCE_DELETE"], e => { x({ type: "STAGE_INSTANCE_DELETE", instance: e }) }), k(["GUILD_SCHEDULED_EVENT_CREATE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_CREATE", guildScheduledEvent: e }) }), k(["GUILD_SCHEDULED_EVENT_UPDATE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_UPDATE", guildScheduledEvent: e }) }), k(["GUILD_SCHEDULED_EVENT_DELETE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_DELETE", guildScheduledEvent: e }) }), k(["GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE", eventException: e }) }), k(["GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE", eventException: e }) }), k(["GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE", eventException: e }) }), k(["GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE", eventId: e.event_id }) }), k(["GUILD_SCHEDULED_EVENT_USER_ADD"], e => { x({ type: "GUILD_SCHEDULED_EVENT_USER_ADD", userId: e.user_id, guildId: e.guild_id, guildEventId: e.guild_scheduled_event_id, guildEventExceptionId: e.guild_scheduled_event_exception_id, response: e.response }) }), k(["GUILD_SCHEDULED_EVENT_USER_REMOVE"], e => { x({ type: "GUILD_SCHEDULED_EVENT_USER_REMOVE", userId: e.user_id, guildId: e.guild_id, guildEventId: e.guild_scheduled_event_id, guildEventExceptionId: e.guild_scheduled_event_exception_id, response: e.response }) }), k(["GUILD_DIRECTORY_ENTRY_CREATE"], e => { x({ type: "GUILD_DIRECTORY_ENTRY_CREATE", channelId: e.directory_channel_id, entry: e }) }), k(["GUILD_DIRECTORY_ENTRY_UPDATE"], e => { x({ type: "GUILD_DIRECTORY_ENTRY_UPDATE", channelId: e.directory_channel_id, entry: e }) }), k(["GUILD_DIRECTORY_ENTRY_DELETE"], e => { x({ type: "GUILD_DIRECTORY_ENTRY_DELETE", channelId: e.directory_channel_id, guildId: e.entity_id }) }), k(["AUTO_MODERATION_MENTION_RAID_DETECTION"], e => { x({ type: "AUTO_MODERATION_MENTION_RAID_DETECTION", guildId: e.guild_id, decisionId: e.decision_id, suspiciousMentionActivityUntil: e.suspicious_mention_activity_until }) }), k(["VOICE_CHANNEL_EFFECT_SEND"], e => { x({ type: "VOICE_CHANNEL_EFFECT_SEND", emoji: e.emoji, channelId: e.channel_id, userId: e.user_id, animationType: e.animation_type, animationId: e.animation_id, soundId: e.sound_id, soundVolume: e.sound_volume, points: e.points, streamerId: e.streamer_id, lineId: e.line_id, emojiHose: e.emoji_hose }) }), k(["GUILD_SOUNDBOARD_SOUND_CREATE"], e => { x({ type: "GUILD_SOUNDBOARD_SOUND_CREATE", sound: { guildId: e.guild_id, name: e.name, soundId: e.sound_id, user: new A.default(e.user), userId: e.user_id, volume: e.volume, emojiId: e.emoji_id, emojiName: e.emoji_name, available: e.available } }) }), k(["GUILD_SOUNDBOARD_SOUND_UPDATE"], e => { x({ type: "GUILD_SOUNDBOARD_SOUND_UPDATE", sound: { guildId: e.guild_id, name: e.name, soundId: e.sound_id, user: new A.default(e.user), userId: e.user_id, volume: e.volume, emojiId: e.emoji_id, emojiName: e.emoji_name, available: e.available } }) }), k(["GUILD_SOUNDBOARD_SOUND_DELETE"], e => { x({ type: "GUILD_SOUNDBOARD_SOUND_DELETE", guildId: e.guild_id, soundId: e.sound_id }) }), k(["GUILD_SOUNDBOARD_SOUNDS_UPDATE"], e => { x({ type: "GUILD_SOUNDBOARD_SOUNDS_UPDATE", guildId: e.guild_id, soundboardSounds: e.soundboard_sounds.map(t => ({ name: t.name, soundId: t.sound_id, emojiName: t.emoji_name, emojiId: t.emoji_id, userId: t.user_id, volume: t.volume, available: t.available, guildId: e.guild_id })) }) }), B(["EMBEDDED_ACTIVITY_UPDATE"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "EMBEDDED_ACTIVITY_UPDATE", guildId: e.guild_id, channelId: e.channel_id, embeddedActivity: e.embedded_activity, connections: e.connections, updateCode: e.update_code }) }), B(["EMBEDDED_ACTIVITY_UPDATE_V2"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "EMBEDDED_ACTIVITY_UPDATE_V2", applicationId: e.application_id, launchId: e.launch_id, compositeInstanceId: e.composite_instance_id, location: e.location, participants: e.participants }) }), k(["AUTH_SESSION_CHANGE"], e => { x({ type: "AUTH_SESSION_CHANGE", authSessionIdHash: e.auth_session_id_hash }) }), k(["USER_CONNECTIONS_LINK_CALLBACK"], e => { x({ type: "USER_CONNECTIONS_LINK_CALLBACK", provider: e.provider, callbackCode: e.callback_code, callbackState: e.callback_state }) }), k(["DELETED_ENTITY_IDS"], e => { x({ type: "DELETED_ENTITY_IDS", ...e }) }), k(["CONSOLE_COMMAND_UPDATE"], e => { x({ type: "CONSOLE_COMMAND_UPDATE", id: e.id, result: e.result, error: e.error }) }), B(["PASSIVE_UPDATE_V2"], e => m.ChannelLoader.loadGuildIds([e.guild_id]), e => { x({ type: "PASSIVE_UPDATE_V2", guildId: e.guild_id, members: e.updated_members, channels: e.updated_channels.map(e => ({ id: e.id, lastMessageId: e.last_message_id, lastPinTimestamp: e.last_pin_timestamp })), voiceStates: e.updated_voice_states.map(e => { var t; return { channelId: e.channel_id, deaf: e.deaf || !1, mute: e.mute || !1, requestToSpeakTimestamp: null !== (t = e.request_to_speak_timestamp) && void 0 !== t ? t : null, selfDeaf: e.self_deaf || !1, selfMute: e.self_mute || !1, selfStream: e.self_stream || !1, selfVideo: e.self_video || !1, sessionId: e.session_id, suppress: e.suppress, userId: e.user_id } }), removedVoiceStateUsers: e.removed_voice_states }) }), k(["PRIVATE_CHANNEL_INTEGRATION_CREATE"], e => { x({ type: "PRIVATE_CHANNEL_INTEGRATION_CREATE", integration: e }) }), k(["PRIVATE_CHANNEL_INTEGRATION_UPDATE"], e => { x({ type: "PRIVATE_CHANNEL_INTEGRATION_UPDATE", integration: e }) }), k(["PRIVATE_CHANNEL_INTEGRATION_DELETE"], e => { x({ type: "PRIVATE_CHANNEL_INTEGRATION_DELETE", channelId: e.channel_id, applicationId: e.application_id }) }), k(["CREATOR_MONETIZATION_RESTRICTIONS_UPDATE"], e => { x({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS", guildId: e.guild_id, restrictions: e.restrictions }) }), k(["BILLING_REFERRAL_TRIAL_OFFER_UPDATE"], e => { x({ type: "BILLING_REFERRAL_TRIAL_OFFER_UPDATE", userTrialOfferId: e.user_trial_offer_id, recipientId: e.recipient_id }) }), k(["SPEED_TEST_CREATE"], e => { x({ type: "SPEED_TEST_CREATE", streamKey: e.stream_key, region: e.region, viewerIds: e.viewer_ids, rtcServerId: e.rtc_server_id, paused: e.paused }) }), k(["SPEED_TEST_SERVER_UPDATE"], e => { x({ type: "SPEED_TEST_SERVER_UPDATE", streamKey: e.stream_key, endpoint: e.endpoint, token: e.token }) }), k(["SPEED_TEST_UPDATE"], e => { x({ type: "SPEED_TEST_UPDATE", streamKey: e.stream_key, region: e.region, viewerIds: e.viewer_ids, paused: e.paused }) }), k(["SPEED_TEST_DELETE"], e => { x({ type: "SPEED_TEST_DELETE", streamKey: e.stream_key, unavailable: e.unavailable, reason: e.reason }) }), k(["LAST_MESSAGES"], e => { x({ type: "MESSAGE_PREVIEWS_LOADED", guildId: e.guild_id, messages: e.messages }) }), k(["AUTHENTICATOR_UPDATE"], e => { x({ type: "AUTHENTICATOR_UPDATE", credential: e }) }), k(["AUTHENTICATOR_CREATE"], e => { x({ type: "AUTHENTICATOR_CREATE", credential: e }) }), k(["AUTHENTICATOR_DELETE"], e => { x({ type: "AUTHENTICATOR_DELETE", credential: e }) }), k(["NOTIFICATION_SETTINGS_UPDATE"], e => { x({ type: "NOTIFICATION_SETTINGS_UPDATE", settings: { flags: e.flags } }) }), k(["GAME_INVITE_CREATE"], e => { x({ type: "GAME_INVITE_CREATE", gameInvite: e }) }), k(["GAME_INVITE_DELETE"], e => { x({ type: "GAME_INVITE_DELETE", inviteId: e.invite_id }) }), k(["GAME_INVITE_DELETE_MANY"], e => { x({ type: "GAME_INVITE_DELETE_MANY", inviteIds: e.invite_ids }) }), k(["CONVERSATION_SUMMARY_UPDATE"], e => { x({ type: "CONVERSATION_SUMMARY_UPDATE", ...e }) }), k(["PREMIUM_MARKETING_PREVIEW"], e => { x({ type: "PREMIUM_MARKETING_PREVIEW", properties: e.properties }) }), k(["USER_APPLICATION_UPDATE"], e => { x({ type: "USER_APPLICATION_UPDATE", applicationId: e.application_id }) }), k(["USER_APPLICATION_REMOVE"], e => { x({ type: "USER_APPLICATION_REMOVE", applicationId: e.application_id }) }), k(["DM_SETTINGS_UPSELL_SHOW"], e => { x({ type: "DM_SETTINGS_UPSELL_SHOW", guildId: e.guild_id }) }), k(["CONTENT_INVENTORY_INBOX_STALE"], e => { x({ type: "CONTENT_INVENTORY_INBOX_STALE", refreshAfterMs: e.refresh_after_ms }) }) }, 985375: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useFavoriteGIFs: function() { return l }, useIsFavoriteGIF: function() { return d }, useSortedFavoriteGIFs: function() { return u } }); var i = n("470079"), r = n("392711"), s = n.n(r), a = n("516373"); let o = {}; function l() { var e, t; return null !== (t = null === (e = (0, a.useFrecencySettings)().favoriteGifs) || void 0 === e ? void 0 : e.gifs) && void 0 !== t ? t : o } function u() { let e = l(); return i.useMemo(() => s()(e).map((e, t) => ({ ...e, url: t })).sortBy("order").reverse().value(), [e]) } function d(e) { return null != l()[e] } }, 132748: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s = n("470079"), a = n("112724"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function l(e, t, n) { return Math.min(Math.max(Math.floor(e / t), 1), n) } t.default = (0, a.default)((r = class extends(i = s.Component) { static getDerivedStateFromProps(e, t) { let { width: n, desiredItemWidth: i, maxColumns: r } = e, s = l(n, i, r); return s !== t.columns ? { columns: s } : null } render() { let { width: e, height: t, children: n } = this.props, { columns: i } = this.state; return n(i, e, t) } constructor(...e) { super(...e), o(this, "state", { columns: l(this.props.width, this.props.desiredItemWidth, this.props.maxColumns) }) } }, o(r, "defaultProps", { desiredItemWidth: 200 }), r)) }, 455708: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("570140"), d = n("68405"), _ = n("28546"), c = n("656733"), E = n("285952"), I = n("6048"), T = n("824717"), f = n("985375"), S = n("653235"), h = n("215016"), A = n("981631"), m = n("149203"), N = n("689938"), p = n("771077"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = e => e.stopPropagation(); class R extends r.PureComponent { componentDidMount() { d.initializeSearch(), document.addEventListener("keydown", this.backToFrontPage), "" !== this.props.query && this.search(this.props.query, A.GIFPickerResultTypes.SEARCH) } componentWillUnmount() { u.default.wait(() => d.resetSearch()), document.removeEventListener("keydown", this.backToFrontPage) } search(e, t, n) { d.search(e, t, n), "" === e ? this.setState({ resultType: null }) : this.state.resultType !== A.GIFPickerResultTypes.SEARCH && this.setState({ resultType: A.GIFPickerResultTypes.SEARCH }) } renderHeaderContent() { let { query: e } = this.props, { resultType: t } = this.state; switch (t) { case A.GIFPickerResultTypes.FAVORITES: return (0, i.jsx)(l.FormTitle, { tag: "h5", className: p.searchHeader, children: N.default.Messages.CATEGORY_FAVORITE }); case A.GIFPickerResultTypes.TRENDING_GIFS: return (0, i.jsx)(l.FormTitle, { tag: "h5", className: p.searchHeader, children: N.default.Messages.GIF_PICKER_RESULT_TYPE_TRENDING_GIFS }); default: return (0, i.jsx)(I.default, { className: p.searchBar, size: I.default.Sizes.MEDIUM, query: e, onChange: this.handleChangeQuery, onClear: this.handleClearQuery, placeholder: N.default.Messages.SEARCH_TENOR, "aria-label": N.default.Messages.SEARCH_TENOR, ref: this.searchBarRef, autoFocus: !0 }) } } renderHeader() { let { resultType: e } = this.state, t = null; return null != e && (t = (0, i.jsx)(l.Clickable, { onClick: this.handleClearQuery, className: p.backButton, "aria-label": N.default.Messages.BACK, children: (0, i.jsx)(T.default, { title: N.default.Messages.BACK }) })), (0, i.jsxs)(E.default, { align: E.default.Align.CENTER, children: [t, this.renderHeaderContent()] }) } renderContent() { let { resultItems: e, resultQuery: t, query: n, favorites: r, searchOffset: s, searchLimit: a, searchTotalResults: o, suggestions: l, hideFavorites: u } = this.props, { resultType: d } = this.state; return null == d ? (0, i.jsx)(S.default, { hideFavoritesTile: u, onSelectItem: this.handleSelectItem }) : (0, i.jsx)(h.default, { data: d === A.GIFPickerResultTypes.FAVORITES ? r : e, onSelectGIF: this.handleSelectGIF, resultType: d, resultQuery: t, query: n, searchOffset: s, searchLimit: a, searchTotalResults: o, suggestions: l, onSelectSuggestion: this.handleSelectSuggestion }) } render() { let { className: e, forwardedRef: t } = this.props; return (0, i.jsxs)("div", { id: m.GIF_PICKER_TAB_PANEL_ID, role: "tabpanel", "aria-labelledby": m.GIF_PICKER_TAB_ID, className: a()(p.container, e), onClick: C, ref: t, children: [(0, i.jsx)("div", { className: p.header, children: this.renderHeader() }), (0, i.jsx)("div", { className: p.content, children: this.renderContent() })] }) } constructor(...e) { super(...e), O(this, "state", { resultType: null }), O(this, "searchBarRef", r.createRef()), O(this, "backToFrontPage", e => { let { resultType: t } = this.state; e.keyCode === A.KeyboardKeys.ESCAPE && null != t && (e.stopPropagation(), e.preventDefault(), this.handleClearQuery()) }), O(this, "handleChangeQuery", e => { (0, _.setSearchQuery)(e), this.search(e, A.GIFPickerResultTypes.SEARCH) }), O(this, "handleSelectSuggestion", e => { (0, _.setSearchQuery)(""), d.resetSearch(), this.search(e, A.GIFPickerResultTypes.SEARCH_SUGGESTION, !0) }), O(this, "handleClearQuery", () => { let { current: e } = this.searchBarRef; (0, _.setSearchQuery)(""), d.resetSearch(), this.setState({ resultType: null }), null != e && e.focus() }), O(this, "handleSelectGIF", e => { let { onSelectGIF: t } = this.props; null != t && t(e) }), O(this, "handleSelectItem", (e, t) => { let { current: n } = this.searchBarRef; switch (e) { case A.GIFPickerResultTypes.TRENDING_CATEGORY: d.search(t, A.GIFPickerResultTypes.TRENDING_CATEGORY, !0), null != n && n.focus(); break; case A.GIFPickerResultTypes.TRENDING_GIFS: d.fetchTrendingGIFs() } this.setState({ resultType: e }) }) } } t.default = r.forwardRef((e, t) => { !e.persistSearch && (0, _.setSearchQuery)(""); let { query: n, resultQuery: r, resultItems: s, suggestions: a } = (0, o.useStateFromStoresObject)([c.default], () => ({ query: c.default.getQuery(), resultQuery: c.default.getResultQuery(), resultItems: c.default.getResultItems(), suggestions: c.default.getSuggestions() })), l = (0, _.useExpressionPickerStore)(e => e.searchQuery), u = (0, f.useSortedFavoriteGIFs)(); return (0, i.jsx)(R, { ...e, forwardedRef: t, query: null != l && "" !== l ? l : n, resultQuery: r, resultItems: s, suggestions: a, favorites: u, searchOffset: 0, searchTotalResults: c.default.getResultItems().length, searchLimit: null }) }) }, 653235: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return g } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("392711"), a = n.n(s), o = n("442837"), l = n("377108"), u = n("692547"), d = n("481060"), _ = n("68405"), c = n("527429"), E = n("656733"), I = n("887208"), T = n("251625"), f = n("985375"), S = n("132748"), h = n("353903"), A = n("215016"), m = n("981631"), N = n("689938"), p = n("452166"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = (e, t) => (0, i.jsx)(h.CategoryColumn, { columns: e }, t); class R extends r.PureComponent { componentDidMount() { 0 === this.props.trendingCategories.length && (0, _.fetchTrending)() } getData() { return this.memoizedData(this.state.favoritesTile, this.props.trendingCategories, this.props.hideFavoritesTile) } renderCategoryExtras(e) { let { name: t, icon: n, type: s } = e; return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)("div", { className: s === m.GIFPickerResultTypes.FAVORITES ? p.categoryFadeBlurple : p.categoryFade }), (0, i.jsxs)("div", { className: p.categoryText, children: [null != n ? (0, i.jsx)(n, { className: p.categoryIcon }) : null, (0, i.jsx)("span", { className: p.categoryName, children: t })] })] }) } render() { return (0, i.jsx)(c.default, { getItemGrid: this.getItemGrid, getCoordsMap: this.getCoordsMap, onFocus: this.handleFocus, onSelect: this.handleSelect, children: (0, i.jsx)(S.default, { desiredItemWidth: 200, maxColumns: 6, children: this.renderContent }) }) } constructor(...e) { super(...e), O(this, "_masonryRef", r.createRef()), O(this, "state", { favoritesTile: function(e) { var t; let n = a().sample(a().values(e)); return { type: m.GIFPickerResultTypes.FAVORITES, name: N.default.Messages.CATEGORY_FAVORITE, icon: I.default, src: null != n ? n.src : "https://media.giphy.com/media/1TOSaJsWtnhe0/giphy.gif", format: null !== (t = null == n ? void 0 : n.format) && void 0 !== t ? t : l.GIFType.IMAGE } }(this.props.favorites), selectedIndex: { column: 0, row: 0 }, focusedId: null }), O(this, "handleFocus", e => { let { current: t } = this._masonryRef; if (null == t) return; let n = t.getCoordsMap()[e]; null != n && (t.scrollIntoViewRect({ start: n.top - 10, end: n.top + n.height + 10 }), this.setState({ focusedId: e })) }), O(this, "handleSelect", e => { let { onSelectItem: t } = this.props, n = this.getData().find(t => t.name === e); null != n && null != t && t(n.type, n.name) }), O(this, "getItemKey", (e, t) => { if (e > 0) return null; let n = this.getData()[t]; return null != n ? n.name : null }), O(this, "memoizedData", (0, T.cachedFunction)(function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return n ? [...t] : [e, ...t] })), O(this, "renderItem", (e, t, n, r) => { if (e > 0) return null; let s = this.getData()[t]; if (null == s) return; let { onSelectItem: a, imagePool: o, videoPool: l } = this.props, { focusedId: d } = this.state; return (0, i.jsx)(A.GIFPickerSearchItem, { format: s.format, color: u.default.unsafe_rawColors.PRIMARY_800.css, src: s.src, item: s, index: t, coords: n, onClick: () => a(s.type, s.name), renderExtras: this.renderCategoryExtras, focused: s.name === d, imagePool: o, videoPool: l }, r) }), O(this, "renderContent", (e, t, n) => { let { trendingCategories: r } = this.props; return 0 === r.length ? (0, i.jsx)(h.ResultsLoader, { columns: e, width: t, renderColumn: C }) : (0, i.jsx)(d.MasonryList, { ref: this._masonryRef, fade: !0, className: p.container, itemGutter: 12, getItemKey: this.getItemKey, columns: e, getItemHeight: () => 110, renderItem: this.renderItem, sections: [this.getData().length], chunkSize: 50 }) }), O(this, "getItemGrid", () => { let { current: e } = this._masonryRef; return null != e ? e.getItemGrid() : [] }), O(this, "getCoordsMap", () => { let { current: e } = this._masonryRef; return null != e ? e.getCoordsMap() : {} }) } } function g(e) { let t = (0, o.useStateFromStores)([E.default], () => E.default.getTrendingCategories()), n = (0, f.useFavoriteGIFs)(), r = (0, A.useElementPools)(); return (0, i.jsx)(R, { ...e, ...r, trendingCategories: t, favorites: n }) } }, 353903: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CategoryColumn: function() { return T }, ResultsLoader: function() { return f } }), n("47120"), n("724458"); var i, r = n("735250"), s = n("470079"), a = n("392711"), o = n.n(a), l = n("748780"), u = n("692547"), d = n("648983"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = [u.default.unsafe_rawColors.PREMIUM_TIER_1_PURPLE.css, u.default.unsafe_rawColors.PREMIUM_TIER_1_BLUE.css, "#929AFA"]; class E extends s.PureComponent { render() { let { props: { height: e }, state: { backgroundColor: t } } = this; return (0, r.jsx)("div", { style: { height: e, backgroundColor: t }, className: d.gif }) } constructor(...e) { super(...e), _(this, "state", { backgroundColor: o().sample(c) }) } } class I extends(i = s.Component) { componentDidMount() { this.animateSlide() } getAnimatedStyle() { let { props: { columns: e }, state: { translateY: t } } = this; return { width: "".concat(100 / e, "%"), transform: [{ translateY: t.interpolate({ inputRange: [0, 1], outputRange: ["0px", "1px"] }) }] } } render() { let { blocks: e } = this.state; return (0, r.jsxs)(l.default.div, { className: d.column, style: this.getAnimatedStyle(), children: [e.map((e, t) => (0, r.jsx)(E, { height: e }, t)), e.map((e, t) => (0, r.jsx)(E, { height: e }, "alt".concat(t)))] }) } constructor(e) { super(e), _(this, "animateSlide", () => { let { props: { direction: e }, state: { translateY: t, height: n } } = this; t.setValue(e > 0 ? 0 : -n / 2 + 12), l.default.timing(t, { toValue: e > 0 ? -n / 2 + 12 : 0, duration: 800, easing: l.default.Easing.linear }).start(this.animateSlide) }); let t = Array(10).fill(null).map(() => o().random(40, 150)); this.state = { blocks: t, height: 2 * t.reduce((e, t) => e + t + 12, 12), translateY: new l.default.Value(0) } } } _(I, "defaultProps", { direction: -1 }); let T = e => { let { columns: t } = e; return (0, r.jsx)("div", { className: d.column, style: { width: "".concat(100 / t, "%") }, children: [, , , , ].fill(null).map((e, t) => (0, r.jsx)("div", { className: d.categoryLoader }, t)) }) }; class f extends s.PureComponent { render() { let { columns: e, renderColumn: t } = this.props; return (0, r.jsx)("div", { className: d.container, children: Array(e).fill(null).map((n, i) => t(e, i)) }) } } }, 215016: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GIFPickerSearchItem: function() { return P }, useElementPools: function() { return b } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("944611"), d = n("377108"), _ = n("692547"), c = n("481060"), E = n("68405"), I = n("527429"), T = n("788911"), f = n("40851"), S = n("29909"), h = n("887208"), A = n("132748"), m = n("981631"), N = n("689938"), p = n("943970"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = [_.default.unsafe_rawColors.PREMIUM_TIER_1_PURPLE.css, _.default.unsafe_rawColors.PREMIUM_TIER_1_BLUE.css, "#929AFA"], R = 1220, g = Array.from({ length: 16 }).map((e, t) => ({ id: "".concat(t), height: Math.floor(100 * Math.random()) + 120 })); function L(e) { var t; return null !== (t = e.id) && void 0 !== t ? t : e.src } function v(e, t) { let n = g[t]; return null == n ? 0 : n.height } function D(e, t, n, r) { if (!(e > 0)) return null == g[t] ? null : (0, i.jsx)("div", { className: p.placeholder, style: { animationDelay: "".concat(75 * t, "ms"), ...n } }, r) } function M(e, t) { var n, i; return e > 0 ? "" : null !== (i = null === (n = g[t]) || void 0 === n ? void 0 : n.id) && void 0 !== i ? i : "" } function y(e) { return e === d.GIFType.VIDEO } class P extends r.PureComponent { componentDidMount() { let { props: { format: e, src: t, coords: { width: n, height: i }, videoPool: r }, ref: s } = this; if (e !== d.GIFType.VIDEO || null == s) return; let a = r.getElement(); a.oncanplay = this.handleCanPlay, a.src = t, a.width = n, a.height = i, s.appendChild(a), this._video = a } componentDidUpdate(e) { let { width: t, height: n } = this.props.coords; null != this._video && (e.coords.width !== t || e.coords.height !== n) && (this._video.width = t, this._video.height = n) } componentWillUnmount() { this._mounted = !1; let { _image: e, _video: t } = this, { imagePool: n, videoPool: i } = this.props; null != e && (this._image = null, n.poolElement(e)), null != t && (this._video = null, i.poolElement(t)) } renderGIF() { let { src: e, coords: { width: t, height: n } } = this.props, { loaded: r } = this.state; return r ? (0, i.jsx)("img", { src: e, width: t, height: n, className: p.gif, alt: "" }) : null } render() { let { item: e, renderExtras: t, format: n, coords: r, focused: s } = this.props, { color: o, loaded: l } = this.state; return (0, i.jsxs)(c.Clickable, { tabIndex: -1, innerRef: e => { this.ref = e }, className: a()(p.result, { [p.focused]: s }), onClick: this.handleClick, style: { backgroundColor: l ? void 0 : o, ...r }, children: [y(n) ? null : this.renderGIF(), null != t ? t(e) : null] }) } constructor(e) { super(e), O(this, "ref", null), O(this, "_video", null), O(this, "_image", null), O(this, "_mounted", !0), O(this, "handleCanPlay", () => { this._mounted && this.setState({ loaded: !0 }) }), O(this, "handleClick", () => { let { onClick: e, item: t, index: n } = this.props; null != e && e(t, n) }); let { format: t, color: n, imagePool: i } = this.props; this.state = { color: null == n ? l().sample(C) : n, loaded: !1 }, !y(t) && (this._image = i.getElement(), this._image.onload = () => this.setState({ loaded: !0 }), this._image.src = e.src) } } class U extends r.PureComponent { componentDidMount() { let { resultType: e, data: t } = this.props; e === m.GIFPickerResultTypes.FAVORITES && ((0, E.trackSearchStart)(m.GIFPickerResultTypes.FAVORITES), (0, E.trackSearchResultViewed)(t, m.GIFPickerResultTypes.FAVORITES, { limit: null })) } selectItem(e, t) { let { onSelectGIF: n, resultType: i, data: r, resultQuery: s } = this.props; null != n && n(e), (0, E.trackSelectGIF)({ type: i, index: t, offset: this.props.searchOffset, limit: this.props.searchLimit, results: r, totalResults: this.props.searchTotalResults, query: s, gifId: e.id }) } getSectionHeight(e) { return 1 === e ? 220 : 0 } renderEmptyFavorite(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return (0, i.jsx)("div", { className: p.emptyHint, children: null != e ? (0, i.jsxs)("div", { className: p.emptyHintCard, children: [t ? (0, i.jsx)(h.default, { className: p.emptyHintFavorite }) : null, (0, i.jsx)("div", { className: p.emptyHintText, children: e })] }) : (0, i.jsx)("div", { className: p.emptyHintSpacer }) }) } renderEmptyFavorites() { return (0, i.jsx)(c.Scroller, { className: p.results, fade: !0, children: (0, i.jsxs)("div", { className: p.emptyHints, children: [this.renderEmptyFavorite(N.default.Messages.NO_GIF_FAVORITES_HOW_TO_FAVORITE, !0), this.renderEmptyFavorite(N.default.Messages.NO_GIF_FAVORITES_WHERE_TO_FAVORITE), this.renderEmptyFavorite(N.default.Messages.NO_GIF_FAVORITES_GO_FAVORITE), Array.from({ length: 15 }).map((e, t) => (0, i.jsx)(r.Fragment, { children: this.renderEmptyFavorite() }, t)), this.renderEmptyFavorite(N.default.Messages.NO_GIF_FAVORITES_FLAVOR_FAVORITE_PLEASE), Array.from({ length: 16 }).map((e, t) => (0, i.jsx)(r.Fragment, { children: this.renderEmptyFavorite() }, t)), this.renderEmptyFavorite(N.default.Messages.NO_GIF_FAVORITES_FLAVOR_STILL_HERE)] }) }) } render() { let { data: e, resultQuery: t, query: n, resultType: r } = this.props; return 0 === e.length && t === n && r !== m.GIFPickerResultTypes.TRENDING_GIFS ? r === m.GIFPickerResultTypes.FAVORITES ? this.renderEmptyFavorites() : (0, i.jsx)(T.default, { message: N.default.Messages.NO_GIF_SEARCH_RESULTS, className: p.noResults }) : (0, i.jsx)(I.default, { getItemGrid: this.getItemGrid, getCoordsMap: this.getCoordsMap, onFocus: this.handleFocus, onSelect: this.handleSelect, children: (0, i.jsx)(A.default, { desiredItemWidth: 200, maxColumns: 8, children: this.renderContent }) }, t) } constructor(...e) { super(...e), O(this, "_masonryRef", r.createRef()), O(this, "prevResultQuery", null), O(this, "state", { focusedId: null }), O(this, "handleFocus", e => { let { current: t } = this._masonryRef; if (null == t) return; let n = t.getCoordsMap()[e]; null != n && (t.scrollIntoViewRect({ start: n.top - 10, end: n.top + n.height + 10 }), this.setState({ focusedId: e })) }), O(this, "handleSelect", e => { let t; let { data: n } = this.props, i = n.findIndex(t => L(t) === e); - 1 !== i && (t = n[i]), null != t && this.selectItem(t, i) }), O(this, "handleClickItem", (e, t) => { this.selectItem(e, t) }), O(this, "handleScroll", () => { let { resultQuery: e } = this.props, { current: t } = this._masonryRef; if (null == t) return; let { scrollTop: n, scrollHeight: i } = t.getScrollerState(); i - n <= R && (e !== this.prevResultQuery && (0, E.fetchSuggestions)(e), this.prevResultQuery = e) }), O(this, "renderItem", (e, t, n, r) => { if (e > 0) return null; let { focusedId: s } = this.state, a = this.props.data[t]; return null == a ? null : (0, i.jsx)(P, { item: a, index: t, format: a.format, src: a.src, coords: n, onClick: this.handleClickItem, renderExtras: () => (0, i.jsx)(S.default, { className: p.favButton, ...a }), focused: L(a) === s, imagePool: this.props.imagePool, videoPool: this.props.videoPool }, r) }), O(this, "getItemHeight", (e, t, n) => { if (e > 0) return 0; let i = this.props.data[t]; return null == i ? 0 : i.height / i.width * n }), O(this, "getItemKey", (e, t) => { var n; if (e > 0) return null; let i = this.props.data[t]; return null != i ? null !== (n = i.id) && void 0 !== n ? n : i.src : null }), O(this, "renderSection", (e, t, n) => { let { onSelectSuggestion: s, suggestions: a } = this.props; return 1 === e ? (0, i.jsx)("div", { className: p.endContainer, style: t, children: a.length > 0 ? (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)("div", { className: p.endText, children: N.default.Messages.GIF_PICKER_RELATED_SEARCH }), (0, i.jsx)("div", { className: p.searchSuggestions, children: a.map(e => (0, i.jsx)(c.Button, { look: c.Button.Looks.OUTLINED, color: c.Button.Colors.PRIMARY, size: c.Button.Sizes.SMALL, className: p.searchSuggestion, onClick: () => { s(e) }, children: e }, e)) })] }) : null }, n) : null }), O(this, "renderContent", (e, t, n) => { let { data: r, resultQuery: s, query: a, resultType: o } = this.props; return 0 === r.length && (s !== a || o === m.GIFPickerResultTypes.TRENDING_GIFS) ? (0, i.jsx)(c.MasonryList, { fade: !0, className: p.results, sections: [g.length], columns: e, itemGutter: 12, getItemKey: M, getItemHeight: v, renderItem: D, chunkSize: 128 }, s) : (0, i.jsx)(c.MasonryList, { ref: this._masonryRef, fade: !0, itemGutter: 12, className: p.results, columns: e, sections: [r.length, 0], getItemKey: this.getItemKey, getItemHeight: this.getItemHeight, renderItem: this.renderItem, getSectionHeight: this.getSectionHeight, renderSection: this.renderSection, onScroll: this.handleScroll, chunkSize: 128 }, "".concat(s, "-").concat(null != o ? o : "")) }), O(this, "getItemGrid", () => { let { current: e } = this._masonryRef; return null != e ? e.getItemGrid() : [] }), O(this, "getCoordsMap", () => { let { current: e } = this._masonryRef; return null != e ? e.getCoordsMap() : {} }) } } function b() { let { renderWindow: e } = r.useContext(f.default), t = e.document, [n] = r.useState(() => new u.ElementPool(() => t.createElement("img"), e => { e.onload = null, e.src = "" })), [i] = r.useState(() => new u.ElementPool(() => { let e = t.createElement("video"); return e.className = p.gif, e.autoplay = !0, e.loop = !0, e.muted = !0, e.preload = "auto", e.controls = !1, e }, e => { e.src = "", e.oncanplay = null; let { parentNode: t } = e; null != t && t.removeChild(e) })); return { imagePool: n, videoPool: i } } t.default = function(e) { let t = b(); return (0, i.jsx)(U, { ...e, ...t }) } }, 70722: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DARWIN_SCKIT_AUDIO_VERSION: function() { return d }, DARWIN_SCKIT_VERSION: function() { return u }, DARWIN_SOUNDSHARE_VERSION: function() { return l }, STREAM_NOTIFY_GUILD_MAX_SIZE: function() { return E }, StreamIssueReportReasons: function() { return s }, StreamTypes: function() { return a }, WINDOWS_GRAPHICS_CAPTURE_VERSION: function() { return c }, WINDOWS_SOUNDSHARE_VERSION: function() { return _ } }); var i, r, s, a, o = n("214627"); (i = s || (s = {})).BLACK_SCREEN = "BLACK_SCREEN", i.BLURRY = "BLURRY", i.LAGGING = "LAGGING", i.OUT_OF_SYNC = "OUT_OF_SYNC", i.AUDIO_MISSING = "AUDIO_MISSING", i.AUDIO_POOR = "AUDIO_POOR", i.GAME_ISSUE = "GAME_ISSUE", i.STREAM_STOPPED = "STREAM_STOPPED", i.NO_ISSUE = "NO_ISSUE", i.OTHER = "OTHER"; let l = ">=19.0.0", u = ">=22.0.0", d = ">=22.0.0", _ = ">=10.0.17763", c = ">=10.0.22000"; (r = a || (a = {})).GUILD = "guild", r.CALL = "call"; let E = o.Notifications.StreamNotificationsGuildMaxSize }, 148959: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GoLiveQualityManagerEvent: function() { return i }, default: function() { return _ } }), n("653041"), n("47120"); var i, r, s = n("392711"), a = n.n(s), o = n("47770"), l = n("562319"), u = n("65154"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(r = i || (i = {})).RequestedSSRCsUpdate = "requested-ssrcs-update", r.RequestedStreamsUpdate = "requested-streams-update"; class _ extends o.default { setUserID(e) { this.userId = e } updateAudioAndVideoStreamInfo(e, t) { this.audioSSRC = e, this.videoStreams = t, this.update() } setGoLiveStreamDowngraded(e) { e !== this.downgraded && (this.downgraded = e, this.update()) } setSimulcastDebugOverride(e, t) { e === this.userId && (this.debugQualityOverride = t, this.update()) } setFirstFrameReceived(e) { this.framesReceived.set(e, !0), this.update() } hasEverReceivedFrame() { return this.framesReceived.size > 0 } update() { if (void 0 === this.userId || null === this.userId) return; let e = this.videoStreams.length > 1, t = a().minBy(this.videoStreams, e => e.quality), n = a().maxBy(this.videoStreams, e => e.quality); if (void 0 === t || void 0 === n) return; let i = [], r = { any: 100 }; for (let s of (this.downgraded && e ? (i.push(t.ssrc), this.supportsSeamless && !this.framesReceived.get(t.ssrc) && this.hasEverReceivedFrame() && i.push(n.ssrc)) : (i.push(n.ssrc), this.supportsSeamless && !this.framesReceived.get(n.ssrc) && this.hasEverReceivedFrame() && i.push(t.ssrc)), this.debugQualityOverride === u.SimulcastOverrideQuality.LOW ? i = [t.ssrc] : this.debugQualityOverride === u.SimulcastOverrideQuality.HIGH && (i = [n.ssrc]), i)) s === t.ssrc ? r[s] = 60 : s === n.ssrc && (r[s] = 100); if (!l.default.isIncomingVideoEnabled()) for (let e in i = [], r) "any" !== e && (r[e] = 0); if (this.hasEverReceivedFrame()) for (let e of this.videoStreams) !i.includes(e.ssrc) && this.framesReceived.delete(e.ssrc); this.emit("requested-ssrcs-update", this.userId, this.audioSSRC, i), this.emit("requested-streams-update", r) } constructor(e) { super(), d(this, "supportsSeamless", void 0), d(this, "userId", void 0), d(this, "videoStreams", void 0), d(this, "audioSSRC", void 0), d(this, "downgraded", void 0), d(this, "framesReceived", void 0), d(this, "debugQualityOverride", void 0), this.supportsSeamless = e, this.videoStreams = [], this.audioSSRC = 0, this.downgraded = !1, this.framesReceived = new Map, this.debugQualityOverride = u.SimulcastOverrideQuality.NO_OVERRIDE, l.default.subscribe(() => { this.update() }) } } }, 449753: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("846519"), r = n("570140"), s = n("872810"), a = n("199902"), o = n("314897"), l = n("592125"), u = n("936349"), d = n("944486"), _ = n("959457"), c = n("70956"), E = n("569545"), I = n("981631"); let T = new i.Timeout, f = new i.Timeout, S = 5 * c.default.Millis.SECOND, h = 12 * c.default.Millis.SECOND, A = null; function m(e, t) { if (d.default.getVoiceChannelId() !== e) return !1; let n = l.default.getChannel(e); if (null == n || !n.isDM() && !n.isGuildStageVoice() || null != a.default.getActiveStreamForUser(t, n.getGuildId())) return !1; let i = a.default.getStreamForUser(t, n.getGuildId()); if (null == i) return !1; let r = (0, E.encodeStreamKey)(i); return r !== A && (A = r, (0, s.watchStream)(i, { noFocus: !0 }), !0) } function N(e, t) { let n = null != t ? t : u.default.getPreferredRegion(); null != n && n !== u.default.getRegion(_.default.getHostname(_.default.getActiveStreamKey())) && (0, s.changeStreamRegion)(e, n) } t.default = { init() { let e = (e, t) => { !_.default.getAllActiveStreamKeys().includes(e) && f.start(t ? h : S, () => { r.default.dispatch({ type: "STREAM_TIMED_OUT", streamKey: e }) }) }; r.default.subscribe("STREAM_WATCH", t => { let { streamKey: n } = t, { channelId: i } = (0, E.decodeStreamKey)(n), r = l.default.getChannel(i); e(n, null == r ? void 0 : r.isGuildStageVoice()) }), r.default.subscribe("STREAM_START", t => { let { streamType: n, guildId: i, channelId: r } = t, s = l.default.getChannel(r); e((0, E.encodeStreamKey)({ streamType: n, guildId: i, channelId: r, ownerId: o.default.getId() }), null == s ? void 0 : s.isGuildStageVoice()) }), r.default.subscribe("STREAM_CREATE", () => { f.stop() }), r.default.subscribe("STREAM_UPDATE", () => { f.stop() }), r.default.subscribe("STREAM_DELETE", () => { f.stop() }), r.default.subscribe("STREAM_CLOSE", () => { T.stop(), f.stop() }), r.default.subscribe("VOICE_CHANNEL_SELECT", e => { let { channelId: t } = e; if (null == t) return; A = null; let n = a.default.getAllApplicationStreamsForChannel(t).filter(e => { let { ownerId: t } = e; return t !== o.default.getId() })[0]; null != n && m(t, n.ownerId) }), r.default.subscribe("VOICE_STATE_UPDATES", e => { let { voiceStates: t } = e; t.forEach(e => { let { userId: t, channelId: n, guildId: i, selfStream: r } = e; if (t !== o.default.getId() && null != n) { if (r && m(n, t)) return; let e = a.default.getActiveStreamForUser(t, i); if (null != e && e.channelId === n && (!r && e.state !== I.ApplicationStreamStates.ENDED && T.start(18e4, () => (0, s.closeStream)((0, E.encodeStreamKey)(e), !1)), r && e.state === I.ApplicationStreamStates.ENDED)) { T.stop(); let e = a.default.getStreamForUser(t, i); if (null == e) return; (0, s.watchStream)(e) } } }) }), r.default.subscribe("CALL_UPDATE", e => { let { channelId: t, region: n } = e, i = a.default.getCurrentUserActiveStream(); (null == i ? void 0 : i.channelId) === t && N((0, E.encodeStreamKey)(i), n) }), r.default.subscribe("CHANNEL_UPDATES", e => { let { channels: t } = e, n = a.default.getCurrentUserActiveStream(); if (null != n) for (let e of t) n.channelId === e.id && N((0, E.encodeStreamKey)(n), e.rtcRegion) }) } } }, 444852: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StreamRTCAnalyticsContext: function() { return M }, default: function() { return y } }), n("653041"), n("47120"); var i = n("392711"), r = n.n(i), s = n("46973"), a = n("570140"), o = n("861687"), l = n("437263"), u = n("924557"), d = n("435064"), _ = n("811660"), c = n("581567"), E = n("594190"), I = n("166884"), T = n("695346"), f = n("314897"), S = n("592125"), h = n("131951"), A = n("866960"), m = n("19780"), N = n("936349"), p = n("704806"), O = n("626135"), C = n("756315"), R = n("569545"), g = n("297733"), L = n("981631"), v = n("65154"); function D(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class M { setActionContext(e) { this.actionContext = e } trackViewerCount(e) { this.maxViewers = Math.max(e, this.maxViewers) } constructor({ streamRegion: e, streamApplication: t, streamSourceType: n, actionContext: i, numViewers: r, isBroadcast: s = !1 }) { D(this, "streamRegion", void 0), D(this, "streamApplication", void 0), D(this, "streamSourceType", void 0), D(this, "actionContext", void 0), D(this, "maxViewers", void 0), D(this, "isBroadcast", void 0), this.streamRegion = e, this.streamApplication = t, this.streamSourceType = n, this.actionContext = i, this.maxViewers = r, this.isBroadcast = s } } class y extends o.default { get isOwner() { let { ownerId: e } = this._streamContext; return f.default.getId() === e } destroy(e) { this._videoStreamStats.stop(), this._trackVideoEndStats(e), this._updateVideoStreamId.cancel(), this._updateVideoStreamId(null, null), this._updateVideoStreamId.flush(), super.destroy() } streamUpdate(e) { let t = this._videoQuality; null != t && (e ? t.pause() : t.resume()) } layoutChange(e) { this._videoStreamStats.layoutChange(e) } getVideoStats() { let { ownerId: e } = this._streamContext, t = this._videoQuality; if (null != t) { var n; let { duration: i, avg_bitrate: r, avg_fps: s, avg_resolution: a } = this.isOwner ? t.getOutboundStats()[0] : null !== (n = t.getInboundStats(e)) && void 0 !== n ? n : {}; return { duration: i, avg_bitrate: r, avg_fps: s, avg_resolution: a } } return null } getRegion() { return this.analyticsContext.streamRegion } getMaxViewers() { return this.analyticsContext.maxViewers } updateStats(e) { if (I.default.getCurrentConfig({ location: "RTCConnection" }, { autoTrackExposure: !1 }).enableGoLiveSimulcast) { for (let { connection: n, stats: i } of e) if (n === this._connection) { let e = i.transport.inboundBitrateEstimate; if (null != e) { if (e > 1e8) break; if (this._bandwidthSamples.push(e), this._bandwidthSamples.length > 15 && this._bandwidthSamples.shift(), 15 === this._bandwidthSamples.length) { var t; let e = r().mean(this._bandwidthSamples); null === (t = this._goLiveQualityManager) || void 0 === t || t.setGoLiveStreamDowngraded(e < 15e5) } break } } } } _initializeEvents() { let e = !1; this.on(l.RTCConnectionEvent.State, (e, t, n) => { if (a.default.wait(() => a.default.dispatch({ type: "RTC_CONNECTION_STATE", state: e, ...t, ...n, streamKey: this._streamKey })), e === L.RTCConnectionStates.RTC_CONNECTED) { var i; null === (i = this._connection) || void 0 === i || i.on(s.BaseConnectionEvent.ScreenshareFinish, (e, t, n, i, r, s, a, o, l, u, d, _, I, T) => { let f = this.getMediaSessionId(), S = this.getRTCConnectionId(), h = this.getGoLiveSource(); (0, p.getSystemAnalyticsInfo)().then(A => { var m, N, p; let C = null; if (null != A) { let { cpu_brand: e, cpu_vendor: t, cpu_memory: n, gpu_brand: i, gpu_memory: r } = A; C = { cpu_brand: e, cpu_vendor: t, cpu_memory: n, gpu_brand: i, gpu_memory: r } } let R = (null != e ? e : 0) + (null != t ? t : 0) + (null != n ? n : 0) + (null != i ? i : 0) + (null != r ? r : 0) + (null != s ? s : 0) + (null != o ? o : 0) + (null != T ? T : 0) + (null != I ? I : 0), g = (null == h ? void 0 : null === (m = h.desktopSource) || void 0 === m ? void 0 : m.sourcePid) != null ? E.default.getGameForPID(h.desktopSource.sourcePid) : null, { gameName: D, gameId: M, exe: y, distributor: P } = (0, c.getRunningGameAnalytics)(g); O.default.track(L.AnalyticEvents.SCREENSHARE_FINISHED, { screenshare_frames: e, videohook_frames: t, hybrid_dxgi_frames: n, hybrid_gdi_frames: i, hybrid_videohook_frames: r, hybrid_graphics_capture_frames: s, hybrid_capture_method_switches: a, quartz_frames: o, screencapturekit_frames: T, go_live_camera_frames: I, total_frames: R, desktop_capturer_type: l, media_session_id: f, rtc_connection_id: S, context: v.MediaEngineContextTypes.STREAM, screens: u, windows: d, activity: _, soundshare_session: null !== (p = null == h ? void 0 : null === (N = h.desktopSource) || void 0 === N ? void 0 : N.soundshareSession) && void 0 !== p ? p : void 0, share_game_name: D, share_game_id: M, share_game_exe: y, share_game_distributor: P, ...C }) }) }) } }), this.on(l.RTCConnectionEvent.Video, (t, n, i, r, s) => { let a = (0, R.decodeStreamKey)(this._streamKey); a.guildId === t && a.channelId === n && a.ownerId === i && (null != this.getMediaSessionId() && !e && (this._trackVideoStartStats(), e = !0), this._updateVideoStreamId(r, s)) }), this.on(l.RTCConnectionEvent.VideoSourceQualityChanged, (e, t, n, i, r, s) => { a.default.wait(() => a.default.dispatch({ type: "MEDIA_ENGINE_VIDEO_SOURCE_QUALITY_CHANGED", guildId: e, channelId: t, senderUserId: n, maxResolution: i, maxFrameRate: r, context: s })) }) } _getStreamAnalyticsProperties() { let { streamRegion: e, streamApplication: t, streamSourceType: n, actionContext: i, isBroadcast: r } = this.analyticsContext, { ownerId: s, guildId: a } = this._streamContext, o = N.default.getRegion(m.default.getHostname()), l = T.BroadcastAutoBroadcast.getSetting(), { gameName: u, gameId: d, exe: _, distributor: E } = (0, c.getRunningGameAnalytics)(t); return { channel_id: this.channelId, rtc_connection_id: this.getRTCConnectionId(), media_session_id: this.getMediaSessionId(), parent_media_session_id: this.parentMediaSessionId, sender_user_id: s, context: v.MediaEngineContextTypes.STREAM, guild_id: a, stream_region: e, stream_source_type: n, guild_region: o, participant_type: this.isOwner ? "streamer" : "receiver", share_application_name: u, share_application_id: d, share_application_executable: _, share_application_distributor: E, video_layout: this._videoStreamStats.getLayout(), client_event_source: i, is_broadcast: r, auto_broadcast_enabled: this.isOwner ? l : null, voice_backend_version: this.voiceVersion, rtc_worker_backend_version: this.rtcWorkerVersion } } _trackVideoStartStats() { let e = this.isOwner ? (0, g.default)() : null; O.default.track(L.AnalyticEvents.VIDEO_STREAM_STARTED, { ...this._getStreamAnalyticsProperties(), ...e, connection_type: A.default.getType(), effective_connection_speed: A.default.getEffectiveConnectionSpeed(), service_provider: A.default.getServiceProvider() }) } _trackVideoEndStats(e) { let t = S.default.getChannel(this.channelId), n = null != t ? t.type : null, { ownerId: i } = this._streamContext, r = null, s = null, a = null, o = this._videoQuality; null != o && (r = this.isOwner ? o.getOutboundStats()[0] : o.getInboundStats(i), s = o.getNetworkStats(), a = this.isOwner ? o.getCodecUsageStats("streamer", this.userId) : o.getCodecUsageStats("receiver", i)); let l = (0, u.areClipsEnabled)(), c = d.default.getSettings(), E = this.isOwner ? { clips_enabled: c.clipsEnabled && l, clips_buffer_length: c.clipsLength } : {}, I = this.isOwner ? { bandwidth_estimation_experiment: this.getBandwidthEstimationExperiment() } : {}; O.default.track(L.AnalyticEvents.VIDEO_STREAM_ENDED, { ...r, ...a, ...s, ...this._videoStreamStats.getStats(), ...this._soundshareStats.getStats(), ...this._getStreamAnalyticsProperties(), ...E, ...I, channel_type: n, reason: e, max_viewers: this.analyticsContext.maxViewers, hostname: this.hostname, hardware_enabled: h.default.getHardwareH264(), device_performance_class: this.isOwner ? (0, _.getMediaPerformanceClass)() : null }) } _getExtraConnectionOptions() { return { streamUserId: (0, R.decodeStreamKey)(this._streamKey).ownerId } } constructor({ sessionId: e, streamKey: t, serverId: n, initialLayout: i, analyticsContext: s, isStreamer: o, parentMediaSessionId: l }) { let u = (0, R.decodeStreamKey)(t), { guildId: d, channelId: _ } = u; super({ userId: f.default.getId(), sessionId: e, guildId: d, channelId: _, context: v.MediaEngineContextTypes.STREAM, rtcServerId: n, parentMediaSessionId: l }), D(this, "analyticsContext", void 0), D(this, "_videoStreamStats", void 0), D(this, "_streamContext", void 0), D(this, "_streamKey", void 0), D(this, "_isStreamer", void 0), D(this, "_updateVideoStreamId", void 0), D(this, "_bandwidthSamples", []), this._streamContext = u, this._streamKey = t, this._isStreamer = o, this._videoStreamStats = new C.default(i, this.isOwner), this.analyticsContext = s, this._updateVideoStreamId = r().debounce((e, t) => { let { guildId: n, channelId: i, ownerId: r } = (0, R.decodeStreamKey)(this._streamKey); a.default.wait(() => a.default.dispatch({ type: "RTC_CONNECTION_VIDEO", guildId: n, channelId: i, userId: r, streamId: e, rtcServerId: t, context: v.MediaEngineContextTypes.STREAM })) }, 200), this._videoStreamStats.start(), this._initializeEvents() } } }, 37113: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ApplicationStreamFPS: function() { return r }, ApplicationStreamFPSButtons: function() { return N }, ApplicationStreamFPSButtonsWithSuffixLabel: function() { return p }, ApplicationStreamPresetValues: function() { return I }, ApplicationStreamPresets: function() { return s }, ApplicationStreamResolutionButtons: function() { return S }, ApplicationStreamResolutionButtonsWithSuffixLabel: function() { return m }, ApplicationStreamResolutions: function() { return i }, ApplicationStreamSettingRequirements: function() { return T }, GoLiveDeviceResolutionButtons: function() { return h }, getApplicationFramerate: function() { return E }, getApplicationResolution: function() { return c } }), n("411104"); var i, r, s, a, o, l, u = n("981631"), d = n("474936"), _ = n("689938"); function c(e) { switch (e) { case 480: return 480; case 720: return 720; case 1080: return 1080; case 0: return 0; default: throw Error("Unknown resolution: ".concat(e)) } } function E(e) { switch (e) { case 5: return 5; case 15: return 15; case 30: return 30; case 60: return 60; default: throw Error("Unknown frame rate: ".concat(e)) } }(a = i || (i = {}))[a.RESOLUTION_480 = 480] = "RESOLUTION_480", a[a.RESOLUTION_720 = 720] = "RESOLUTION_720", a[a.RESOLUTION_1080 = 1080] = "RESOLUTION_1080", a[a.RESOLUTION_1440 = 1440] = "RESOLUTION_1440", a[a.RESOLUTION_SOURCE = 0] = "RESOLUTION_SOURCE", (o = r || (r = {}))[o.FPS_5 = 5] = "FPS_5", o[o.FPS_15 = 15] = "FPS_15", o[o.FPS_30 = 30] = "FPS_30", o[o.FPS_60 = 60] = "FPS_60", (l = s || (s = {}))[l.PRESET_VIDEO = 1] = "PRESET_VIDEO", l[l.PRESET_DOCUMENTS = 2] = "PRESET_DOCUMENTS", l[l.PRESET_CUSTOM = 3] = "PRESET_CUSTOM"; let I = { 2: [{ resolution: 0, fps: 15 }, { resolution: 0, fps: 5 }], 1: [{ resolution: 1440, fps: 60 }, { resolution: 1080, fps: 60 }, { resolution: 720, fps: 60 }, { resolution: 720, fps: 30 }], 3: [] }, T = [{ resolution: 0, fps: 60, quality: d.StreamQualities.HIGH_STREAMING_QUALITY }, { resolution: 0, fps: 30, quality: d.StreamQualities.HIGH_STREAMING_QUALITY }, { resolution: 0, fps: 15, quality: d.StreamQualities.HIGH_STREAMING_QUALITY }, { resolution: 0, fps: 5, preset: 2 }, { resolution: 1440, fps: 60, guildPremiumTier: u.BoostedGuildTiers.TIER_2, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 1440, fps: 30, guildPremiumTier: u.BoostedGuildTiers.TIER_2, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 1440, fps: 15, guildPremiumTier: u.BoostedGuildTiers.TIER_2, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 1080, fps: 60, guildPremiumTier: u.BoostedGuildTiers.TIER_2, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 1080, fps: 30, guildPremiumTier: u.BoostedGuildTiers.TIER_2, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 1080, fps: 15, guildPremiumTier: u.BoostedGuildTiers.TIER_2, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 720, fps: 60, guildPremiumTier: u.BoostedGuildTiers.TIER_1, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 720, fps: 30 }, { resolution: 720, fps: 15 }, { resolution: 720, fps: 5 }, { resolution: 480, fps: 60, guildPremiumTier: u.BoostedGuildTiers.TIER_1, quality: d.StreamQualities.MID_STREAMING_QUALITY }, { resolution: 480, fps: 30 }, { resolution: 480, fps: 15 }, { resolution: 480, fps: 5 }]; function f(e, t) { return { value: e, get label() { return null != t ? t() : e } } } let S = [f(720), f(1080), f(1440), f(0, () => _.default.Messages.SCREENSHARE_SOURCE)], h = [f(720), f(1080), f(1440)], A = e => "".concat(e, "p"), m = [f(480, () => A(480)), f(720, () => A(720)), f(1080, () => A(1080)), f(1440, () => A(1440)), f(0, () => _.default.Messages.SCREENSHARE_SOURCE)], N = [f(15), f(30), f(60)], p = [f(15, () => _.default.Messages.STREAM_FPS_OPTION.format({ value: 15 })), f(30, () => _.default.Messages.STREAM_FPS_OPTION.format({ value: 30 })), f(60, () => _.default.Messages.STREAM_FPS_OPTION.format({ value: 60 }))] }, 756315: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("379649"), r = n("846519"), s = n("361291"), a = n("981631"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function l(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0; return null != e ? Math.round(e) : t } class u { start() { let { resolution: e, fps: t } = s.default.getState(); this._targetResolution = e, this._targetFPS = t, this._statInterval.start(1e3, this._sampleStats), this._lastLayoutChanged = (0, i.now)() } stop() { this._statInterval.stop(), this._streamEnd = (0, i.now)(), this._incrementLayout(this._lastLayout, (this._streamEnd - this._lastLayoutChanged) / 1e3) } layoutChange(e) { if (e === this._lastLayout || null != this._streamEnd) return; let t = (0, i.now)(); this._incrementLayout(this._lastLayout, (t - this._lastLayoutChanged) / 1e3), this._layoutChanges++, this._lastLayout = e, this._lastLayoutChanged = t } getLayout() { return this._lastLayout } getStats() { let e = { num_layout_changes: this._layoutChanges, duration_layout_fullscreen: l(this._layoutBuckets[a.StreamLayouts.FULL_SCREEN]), duration_layout_theatre: l(this._layoutBuckets[a.StreamLayouts.THEATRE]), duration_layout_pip: l(this._layoutBuckets[a.StreamLayouts.PIP]), duration_layout_popout: l(this._layoutBuckets[a.StreamLayouts.POPOUT]), duration_layout_portrait: l(this._layoutBuckets[a.StreamLayouts.PORTRAIT]), duration_layout_landscape: l(this._layoutBuckets[a.StreamLayouts.LANDSCAPE]), duration_layout_minimized: l(this._layoutBuckets[a.StreamLayouts.MINIMIZED]) }; return this._isSender ? { ...e, target_fps: this._targetFPS, target_resolution_height: this._targetResolution, stream_settings_changed: this._streamSettingsChanged } : e } constructor(e, t) { o(this, "_statInterval", void 0), o(this, "_isSender", void 0), o(this, "_streamEnd", void 0), o(this, "_targetResolution", 0), o(this, "_targetFPS", 0), o(this, "_streamSettingsChanged", !1), o(this, "_lastLayout", void 0), o(this, "_lastLayoutChanged", 0), o(this, "_layoutChanges", 0), o(this, "_layoutBuckets", void 0), o(this, "_incrementLayout", (e, t) => { null == this._layoutBuckets[e] && (this._layoutBuckets[e] = 0), this._layoutBuckets[e] += t }), o(this, "_sampleStats", () => { let { resolution: e, fps: t } = s.default.getState(); this._streamSettingsChanged = e !== this._targetResolution || t !== this._targetFPS }), this._isSender = t, this._statInterval = new r.Interval, this._lastLayout = e, this._layoutBuckets = {} } } }, 569545: function(e, t, n) { "use strict"; n.r(t), n.d(t, { decodeStreamKey: function() { return s }, encodeStreamKey: function() { return a }, isStreamKey: function() { return r } }), n("47120"), n("411104"); var i = n("70722"); function r(e) { return null != e && (e.startsWith(i.StreamTypes.GUILD) || e.startsWith(i.StreamTypes.CALL)) } function s(e) { let t = e.split(":"), n = t[0]; switch (n) { case i.StreamTypes.GUILD: { let [e, n, i, r] = t; return { streamType: e, guildId: n, channelId: i, ownerId: r } } case i.StreamTypes.CALL: { let [e, n, i] = t; return { streamType: e, channelId: n, ownerId: i } } default: throw Error("Unknown stream type ".concat(n)) } } function a(e) { let { streamType: t, guildId: n, channelId: r, ownerId: s } = e; switch (t) { case i.StreamTypes.GUILD: return [t, n, r, s].join(":"); case i.StreamTypes.CALL: return [t, r, s].join(":"); default: throw Error("Unknown stream type ".concat(t)) } } }, 102172: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canStreamInChannel: function() { return f }, canWatchStream: function() { return h }, getStreamCTAString: function() { return S }, getStreamEligibleChannels: function() { return m }, useCanWatchStream: function() { return A } }), n("653041"), n("47120"); var i, r, s = n("442837"), a = n("258609"), o = n("131704"), l = n("984933"), u = n("430824"), d = n("496675"), _ = n("979651"), c = n("934415"), E = n("981631"), I = n("689938"); let T = (e, t) => (0, o.isPrivate)(e.type) || t.canBasicChannel(E.BasicPermissions.CONNECT | E.BasicPermissions.VIEW_CHANNEL, e); function f(e, t, n) { var i; let r = !(arguments.length > 3) || void 0 === arguments[3] || arguments[3]; if (e.isPrivate()) return !0; let s = t.getGuild(e.getGuildId()), a = null !== (i = null == s ? void 0 : s.maxStageVideoChannelUsers) && void 0 !== i ? i : 0; return (!e.isGuildStageVoice() || !(a <= 0)) && (!r || !!T(e, n)) && !!n.can(E.Permissions.STREAM, e) && null != s && s.afkChannelId !== e.id && !0 } function S(e) { switch (e) { case 0: return I.default.Messages.CONSOLE_STREAM_UNAVAILABLE; case 1: return I.default.Messages.UNABLE_TO_JOIN_CHANNEL_FULL_MODAL_HEADER; case 2: return I.default.Messages.STREAM_NO_PERMISSION_CTA; default: return I.default.Messages.WATCH_STREAM } } function h(e, t, n, i, r) { let s; if (null == e) return [!1, 2]; let a = t.isInChannel(e.id), l = e instanceof o.ChannelRecordBase && (0, c.isChannelFull)(e, t, n), u = T(e, i), d = null != r.getAwaitingRemoteSessionInfo() || null != r.getRemoteSessionId(); return d ? s = 0 : u || a ? l && !a && (s = 1) : s = 2, [!__OVERLAY__ && !d && (a || u && !l), s] } function A(e) { return (0, s.useStateFromStoresArray)([_.default, u.default, d.default, a.default], () => h(e, _.default, u.default, d.default, a.default)) } function m(e, t, n) { let i = []; for (let { channel: r } of e[l.GUILD_VOCAL_CHANNELS_KEY]) f(r, t, n) && i.push(r); return i }(r = i || (i = {}))[r.REMOTE_MODE = 0] = "REMOTE_MODE", r[r.CHANNEL_FULL = 1] = "CHANNEL_FULL", r[r.NO_PERMISSION = 2] = "NO_PERMISSION" }, 687516: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getStreamerActivity: function() { return l }, getStreamerApplication: function() { return u }, useGetStreamApplication: function() { return _ } }); var i = n("442837"), r = n("902704"), s = n("158776"), a = n("981631"); function o(e) { return e.type === a.ActivityTypes.PLAYING } function l(e, t) { var n; return null != e ? (n = e.ownerId, t.findActivity(n, o)) : null } function u(e, t) { if (null == e) return null; let n = l(e, t); return null == n ? null : { id: n.application_id, name: n.name } } function d(e, t) { return e === t || null != e && null != t && (0, r.default)(e, t) } function _(e) { return (0, i.useStateFromStores)([s.default], () => u(e, s.default), [e], d) } }, 74299: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("65154"); function r(e) { return e.supportsInApp(i.Features.VIDEO) && e.supportsInApp(i.Features.DESKTOP_CAPTURE) } }, 139656: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("65154"); function r(e) { return e.supportsInApp(i.Features.VIDEO) } }, 451467: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("280098"), r = n("37113"); function s(e, t, n, s, a) { for (let o of r.ApplicationStreamSettingRequirements) if ((null == o.preset || e === o.preset) && t === o.resolution && n === o.fps && (0, i.default)(o, s, a)) return !0; return !1 } }, 280098: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("267642"), r = n("74538"), s = n("474936"); function a(e, t, n) { if (null == e || null == e.quality && null == e.guildPremiumTier) return !0; let a = !1; return null != e.quality && (e.quality === s.StreamQualities.HIGH_STREAMING_QUALITY ? a = a || r.default.canStreamQuality(r.default.StreamQuality.HIGH, t) : e.quality === s.StreamQualities.MID_STREAMING_QUALITY && (a = a || r.default.canStreamQuality(r.default.StreamQuality.MID, t))), null != e.guildPremiumTier && (a = a || (0, i.isGuildBoostedAtLeast)(n, e.guildPremiumTier)), a } }, 863908: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("5192"), r = n("981631"), s = n("689938"); function a(e, t, n, a) { if (e.state === r.ApplicationStreamStates.RECONNECTING) return { mainText: s.default.Messages.STREAM_RECONNECTING_ERROR, supportingText: s.default.Messages.STREAM_RECONNECTING_ERROR_SUBTEXT }; if (e.state === r.ApplicationStreamStates.PAUSED) return n ? { mainText: s.default.Messages.STREAM_CAPTURE_PAUSED, supportingText: s.default.Messages.STREAM_CAPTURE_PAUSED_DETAILS } : { mainText: s.default.Messages.STREAM_CAPTURE_PAUSED, supportingText: s.default.Messages.STREAM_CAPTURE_PAUSED_DETAILS_VIEWER.format({ username: i.default.getName(e.guildId, e.channelId, t) }) }; return a ? { mainText: s.default.Messages.STREAM_PREVIEW_PAUSED, supportingText: s.default.Messages.STREAM_PREVIEW_PAUSED_SUBTEXT } : null } }, 502286: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("594190"); function r(e) { let t, n; if (null == e) return {}; let r = e.sourcePid; if (null != r) { let e = i.default.getGameForPID(r); t = null == e ? void 0 : e.name, n = null == e ? void 0 : e.id } return { soundshare_session: e.soundshareSession, share_game_name: t, share_game_id: n } } }, 297733: function(e, t, n) { "use strict"; n.r(t); var i = n("318885"); t.default = i.getDesktopSourceMetadata }, 525925: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("359110"); function r(e) { (0, i.transitionToChannel)(e.channelId) } }, 855403: function(e, t, n) { "use strict"; function i(e, t) { return null != t && e.startsWith("window:".concat(t)) } n.r(t), n.d(t, { default: function() { return i } }) }, 981283: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("392711"), s = n("481060"), a = n("570140"), o = n("846027"), l = n("872810"), u = n("695346"), d = n("199902"), _ = n("314897"), c = n("650774"), E = n("19780"), I = n("594174"), T = n("449753"), f = n("569545"), S = n("803647"), h = n("70722"), A = n("981631"); let m = (0, r.debounce)(l.notifyStreamStart, 1e3); t.default = { init() { T.default.init(), a.default.subscribe("MEDIA_ENGINE_VIDEO_STATE_CHANGED", e => { let { videoState: t } = e, n = d.default.getCurrentUserActiveStream(); if (null != n) { let e = t === A.MediaEngineVideoStates.PAUSED; (0, l.setStreamPaused)(n, e) } }), a.default.subscribe("STREAM_DELETE", e => { e.reason === A.ApplicationStreamDeleteReasons.STREAM_FULL && ((0, l.closeStream)(e.streamKey, !1), (0, s.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("12222")]).then(n.bind(n, "309690")); return t => (0, i.jsx)(e, { ...t }) })) }), a.default.subscribe("STREAM_WATCH", e => { let { streamKey: t, allowMultiple: n } = e; if (n) return; let i = (0, f.decodeStreamKey)(t); d.default.getAllActiveStreams().forEach(e => { if (e.ownerId !== i.ownerId) e.ownerId !== _.default.getId() && (e.ownerId === _.default.getId() && o.default.setGoLiveSource(null), (0, l.closeStream)((0, f.encodeStreamKey)(e), !1)) }) }), a.default.subscribe("VOICE_STATE_UPDATES", e => { let { voiceStates: t } = e; t.forEach(e => { let { userId: t } = e; if (t !== _.default.getId()) return; let n = d.default.getAllActiveStreams(), i = E.default.getChannelId(); n.forEach(e => { e.channelId !== i && (0, S.default)(e, !1) }) }) }), a.default.subscribe("STREAM_CREATE", e => { var t; let { streamKey: n } = e, { ownerId: i, guildId: r } = (0, f.decodeStreamKey)(n); if (null == r || null == i || i !== (null === (t = I.default.getCurrentUser()) || void 0 === t ? void 0 : t.id)) return; let s = c.default.getMemberCount(r); null != s && !(s < 2) && !(s > h.STREAM_NOTIFY_GUILD_MAX_SIZE) && u.NotifyFriendsOnGoLive.getSetting() && m(n) }) } } }, 174609: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("358085"), r = n("998502"); function s(e) { i.isPlatformEmbedded ? r.default.focus(e) : window.focus() } }, 803647: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("846027"), r = n("872810"), s = n("314897"), a = n("569545"); function o(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; if (null == e) return; let { streamType: n, guildId: o, channelId: l, ownerId: u } = e, d = (0, a.encodeStreamKey)({ streamType: n, guildId: o, channelId: l, ownerId: u }); u === s.default.getId() && i.default.setGoLiveSource(null), r.stopStream(d, t) } }, 978684: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GUEST_INVITE_KEY: function() { return _ } }), n("47120"); var i = n("298444"), r = n("570140"), s = n("447543"), a = n("147913"), o = n("314897"), l = n("358085"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = "guestInviteToAccept"; class c extends a.default { constructor(...e) { super(...e), d(this, "actions", { POST_CONNECTION_OPEN: () => this.handleConnectionOpen() }), d(this, "handleConnectionOpen", async () => { if ((0, l.isWeb)()) { let e = i.SessionStorage.get(_); if (null != e && "string" == typeof e && o.default.isAuthenticated()) { let { invite: t } = await s.default.resolveInvite(e, "Desktop Modal"); null != t && (r.default.dispatch({ type: "INVITE_MODAL_OPEN", invite: t, code: e, context: u.AppContext.APP }), i.SessionStorage.remove(_)) } } }) } } t.default = new c }, 372900: function(e, t, n) { "use strict"; n.r(t); let i = n("470079").createContext(void 0); t.default = i }, 181945: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }), n("390547"), n("47120"), n("653041"); var i = n("392711"), r = n.n(i), s = n("45114"), a = n("45966"), o = n("601070"), l = n("984933"), u = n("306680"), d = n("626135"), _ = n("709054"), c = n("981631"), E = n("490897"); function I(e, t, n) { let i = r().flatMap(e, e => { let t = l.default.getSelectableChannelIds(e), n = [...t, ...l.default.getVocalChannelIds(e)], i = o.default.getActiveJoinedThreadsForGuild(e); for (let e of t) { var r; let t = null !== (r = i[e]) && void 0 !== r ? r : {}; for (let e in t) n.push(e) } return n }).map(e => ({ channelId: e, readStateType: E.ReadStateTypes.CHANNEL, messageId: u.default.lastMessageId(e) })); return e.forEach(e => { i.push({ channelId: _.default.cast(e), readStateType: E.ReadStateTypes.GUILD_EVENT, messageId: u.default.lastMessageId(e, E.ReadStateTypes.GUILD_EVENT) }), i.push({ channelId: _.default.cast(e), readStateType: E.ReadStateTypes.GUILD_ONBOARDING_QUESTION, messageId: a.default.ackIdForGuild(e) }) }), d.default.track(c.AnalyticEvents.MARK_AS_READ, { source: t, type: "guild" }), (0, s.bulkAck)(i, n) } }, 154285: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getGuildAlertModeEnabled: function() { return c }, useGuildAlertModeEnabled: function() { return _ } }); var i = n("149765"), r = n("442837"), s = n("818083"), a = n("430824"), o = n("496675"), l = n("676770"); let u = (0, s.createExperiment)({ kind: "guild", id: "2023-04_guild_alert_mode", label: "Guild Alert Mode", defaultConfig: { showAlertMode: !1, alsoShowMemberSafety: !1 }, treatments: [{ id: 1, label: "Show alert mode experience", config: { showAlertMode: !0, alsoShowMemberSafety: !1 } }, { id: 2, label: "Show alert mode experience with member safety", config: { showAlertMode: !0, alsoShowMemberSafety: !0 } }] }), d = (0, s.createExperiment)({ kind: "guild", id: "2023-08_guild_alert_mode_friend_server", label: "Guild Alert Mode (friend servers only)", defaultConfig: { showAlertMode: !1, alsoShowMemberSafety: !1 }, treatments: [{ id: 1, label: "Show alert mode experience", config: { showAlertMode: !0, alsoShowMemberSafety: !1 } }, { id: 2, label: "Show alert mode experience with member safety", config: { showAlertMode: !0, alsoShowMemberSafety: !1 } }] }); function _(e) { let t = (0, r.useStateFromStores)([a.default], () => a.default.getGuild(e)), n = (0, r.useStateFromStores)([o.default], () => null != t && i.hasAny(o.default.computePermissions(t), l.IncidentAlertModeratorPermissions)), s = u.useExperiment({ guildId: e, location: "c3fae3_1" }, { disable: !n, autoTrackExposure: !0 }), _ = d.useExperiment({ guildId: e, location: "c3fae3_2" }, { disable: !n, autoTrackExposure: !0 }); return { showAlertMode: s.showAlertMode || _.showAlertMode, alsoShowMemberSafety: s.alsoShowMemberSafety || _.alsoShowMemberSafety } } function c(e) { let t = a.default.getGuild(e), n = null != t && i.hasAny(o.default.computePermissions(t), l.IncidentAlertModeratorPermissions), r = u.getCurrentConfig({ guildId: e, location: "c3fae3_3" }, { disable: !n, autoTrackExposure: !0 }), s = d.getCurrentConfig({ guildId: e, location: "c3fae3_4" }, { disable: !n, autoTrackExposure: !0 }); return { showAlertMode: r.showAlertMode || s.showAlertMode, alsoShowMemberSafety: r.alsoShowMemberSafety || s.alsoShowMemberSafety } } }, 676770: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_LOCKDOWN_DURATION: function() { return o }, IncidentAlertModeratorPermissions: function() { return u }, NAGBAR_DISPLAY_MAX_HOURS: function() { return a }, getTimeframes: function() { return l } }); var i = n("149765"), r = n("231338"), s = n("689938"); let a = 2, o = 2, l = () => [{ value: 1, label: s.default.Messages.GUILD_SERVER_LOCKDOWN_DURATION_1_HOUR }, { value: 2, label: s.default.Messages.GUILD_SERVER_LOCKDOWN_DURATION_2_HOURS }, { value: 4, label: s.default.Messages.GUILD_SERVER_LOCKDOWN_DURATION_4_HOURS }, { value: 6, label: s.default.Messages.GUILD_SERVER_LOCKDOWN_DURATION_6_HOURS }, { value: 12, label: s.default.Messages.GUILD_SERVER_LOCKDOWN_DURATION_12_HOURS }, { value: 24, label: s.default.Messages.GUILD_SERVER_LOCKDOWN_DURATION_24_HOURS }], u = i.combine(r.Permissions.ADMINISTRATOR, r.Permissions.MANAGE_GUILD, r.Permissions.BAN_MEMBERS, r.Permissions.KICK_MEMBERS, r.Permissions.MODERATE_MEMBERS) }, 655006: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RaidAlertExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "guild", id: "2022-10_guild_raid_messaging", label: "Raid Alerts", defaultConfig: { enableRaidAlerts: !1 }, treatments: [{ id: 1, label: "Enable Reporting Of Raids", config: { enableRaidAlerts: !0 } }] }) }, 666657: function(e, t, n) { "use strict"; var i, r, s, a, o, l; n.r(t), n.d(t, { GuildIncidentActionSources: function() { return i }, GuildIncidentActionTypes: function() { return s }, GuildIncidentAlertTypes: function() { return r } }), (a = i || (i = {})).MESSAGE = "message", a.NAGBAR = "nagbar", a.GUILD_SETTINGS = "guild_settings", a.CONTEXT_MENU = "context_menu", a.GUILD_PROFILE = "guild_profile", a.MEMBER_SAFETY_PAGE = "member_safety_page", (o = r || (r = {})).JOIN_RAID = "join_raid", o.DM_RAID = "dm_raid", (l = s || (s = {})).INVITES_DISABLED = "invites_disabled", l.DMS_DISABLED = "dms_disabled" }, 533244: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DATE_CONFIG: function() { return l }, getDisabledInterventions: function() { return I }, getEnabledInterventions: function() { return E }, getIncidentAlertType: function() { return c }, getSecurityActionDetailsString: function() { return h }, hasDMsDisabled: function() { return f }, hasDetectedActivity: function() { return u }, hasDetectedDMRaid: function() { return _ }, hasDetectedRaid: function() { return d }, hasInvitesDisabled: function() { return S }, isUnderLockdown: function() { return T } }), n("653041"); var i = n("913527"), r = n.n(i), s = n("666657"), a = n("676770"), o = n("689938"); let l = { month: "numeric", day: "numeric", hour: "numeric", minute: "2-digit" }; function u(e) { return null != e.dmSpamDetectedAt && r()(e.dmSpamDetectedAt).add(a.NAGBAR_DISPLAY_MAX_HOURS, "hours") > r()() || null != e.raidDetectedAt && r()(e.raidDetectedAt).add(a.NAGBAR_DISPLAY_MAX_HOURS, "hours") > r()() } function d(e) { return null != e.raidDetectedAt && r()(e.raidDetectedAt).add(a.NAGBAR_DISPLAY_MAX_HOURS, "hours") > r()() } function _(e) { return null != e.dmSpamDetectedAt && r()(e.dmSpamDetectedAt).add(a.NAGBAR_DISPLAY_MAX_HOURS, "hours") > r()() } function c(e) { return null == e ? void 0 : d(e) ? s.GuildIncidentAlertTypes.JOIN_RAID : s.GuildIncidentAlertTypes.DM_RAID } function E(e, t) { let n = []; return e && n.push(s.GuildIncidentActionTypes.INVITES_DISABLED), t && n.push(s.GuildIncidentActionTypes.DMS_DISABLED), n } function I(e, t) { let n = []; return !e && n.push(s.GuildIncidentActionTypes.INVITES_DISABLED), !t && n.push(s.GuildIncidentActionTypes.DMS_DISABLED), n } function T(e) { return null != e.dmsDisabledUntil && new Date(e.dmsDisabledUntil) > new Date || null != e.invitesDisabledUntil && new Date(e.invitesDisabledUntil) > new Date } function f(e) { return (null == e ? void 0 : e.dmsDisabledUntil) != null && new Date(e.dmsDisabledUntil) > new Date } function S(e) { return (null == e ? void 0 : e.invitesDisabledUntil) != null && new Date(e.invitesDisabledUntil) > new Date } function h(e, t) { var n; let i = null !== (n = e.dmsDisabledUntil) && void 0 !== n ? n : e.invitesDisabledUntil; if (null == i) return ""; let r = null != e.dmsDisabledUntil, s = null != e.invitesDisabledUntil; switch (!0) { case r && s: return o.default.Messages.GUILD_ANTIRAID_PAUSE_DMS_AND_JOINS_NAGBAR_MESSAGE_NEW.format({ guildName: t, time: new Date(i).toLocaleString(o.default.getLocale(), l) }); case r: return o.default.Messages.GUILD_ANTIRAID_PAUSE_DMS_NAGBAR_MESSAGE_NEW.format({ guildName: t, time: new Date(i).toLocaleString(o.default.getLocale(), l) }); case s: return o.default.Messages.GUILD_ANTIRAID_PAUSE_JOINS_NAGBAR_MESSAGE_NEW.format({ guildName: t, time: new Date(i).toLocaleString(o.default.getLocale(), l) }); default: return "" } } }, 487419: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("581883"), d = n("430824"), _ = n("496675"), c = n("983620"), E = n("709054"), I = n("154285"), T = n("533244"); let f = {}, S = {}; function h() { var e; let t = null !== (e = u.default.getGuildsProto()) && void 0 !== e ? e : {}, n = d.default.getGuilds(), i = E.default.keys(n); for (let e of (S = {}, i))(0, I.getGuildAlertModeEnabled)(e).showAlertMode && (S[e] = { guildId: e, guildName: n[e].name, ...t[e] }) } function A(e) { return null != e && Object.keys(e).length > 0 ? { raidDetectedAt: e.raid_detected_at, dmSpamDetectedAt: e.dm_spam_detected_at, dmsDisabledUntil: e.dms_disabled_until, invitesDisabledUntil: e.invites_disabled_until } : null } class m extends(i = o.default.Store) { initialize() { this.waitFor(u.default, d.default, _.default, c.default), this.syncWith([u.default, d.default, _.default, c.default], h) } getGuildIncident(e) { return f[e] } getIncidentsByGuild() { return f } getGuildAlertSettings() { return S } } a = "GuildIncidentsStore", (s = "displayName") in(r = m) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new m(l.default, { CONNECTION_OPEN: function(e) { for (let n of (f = {}, e.guilds)) { var t; let e = A(null === (t = n.properties) || void 0 === t ? void 0 : t.incidents_data); null != e && ((0, T.hasDetectedActivity)(e) || (0, T.isUnderLockdown)(e)) && (f[n.id] = e) } }, GUILD_CREATE: function(e) { var t; let { guild: n } = e, i = A(null === (t = n.properties) || void 0 === t ? void 0 : t.incidents_data); null != i && ((0, T.hasDetectedActivity)(i) || (0, T.isUnderLockdown)(i)) && (f[n.id] = i) }, GUILD_UPDATE: function(e) { let { guild: t } = e, n = A(t.incidents_data); null != n && ((0, T.hasDetectedActivity)(n) || (0, T.isUnderLockdown)(n)) ? f[t.id] = n : delete f[t.id] }, GUILD_DELETE: function(e) { let { guild: t } = e; delete f[t.id] }, LOGOUT: function(e) { f = {} } }) }, 539573: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AUTOMOD_ERROR_CODES: function() { return u }, InvalidKeywordError: function() { return o }, InvalidRegexPatternError: function() { return l }, getAutomodErrorMessage: function() { return _ }, getAutomodErrorMessageFromErrorResponse: function() { return d } }), n("411104"), n("47120"); var i = n("673750"), r = n("592125"), s = n("981631"), a = n("689938"); class o extends Error {} class l extends Error {} let u = new Set([s.AbortCodes.AUTOMOD_MESSAGE_BLOCKED, s.AbortCodes.AUTOMOD_TITLE_BLOCKED, s.AbortCodes.AUTOMOD_INVALID_RUST_SERVICE_RESPONSE]); function d(e, t) { if (null == e) return null; let { code: n, message: i } = e; if (!u.has(n)) return null; if (null != i) return i; if (null == t) return null; let o = r.default.getChannel(t); return (null == o ? void 0 : o.isThread()) ? a.default.Messages.THREAD_AUTOMOD_ERROR : ((null == o ? void 0 : o.isForumPost()) || (null == o ? void 0 : o.isForumLikeChannel())) && (n === s.AbortCodes.AUTOMOD_TITLE_BLOCKED || n === s.AbortCodes.AUTOMOD_MESSAGE_BLOCKED) ? a.default.Messages.FORUM_POST_AUTOMOD_ERROR : null } function _(e, t) { let n = d(t); return null != n ? n : null == e ? a.default.Messages.GUILD_AUTOMOD_BLOCKED_MESSAGE_SEND_NOTICE : function(e) { let t = r.default.getChannel(e.message.channelId); return (0, i.isMessageDataEdit)(e) ? a.default.Messages.GUILD_AUTOMOD_BLOCKED_MESSAGE_EDIT_NOTICE : (null == t ? void 0 : t.isThread()) ? a.default.Messages.THREAD_AUTOMOD_ERROR : (null == t ? void 0 : t.isForumPost()) || (null == t ? void 0 : t.isForumLikeChannel()) ? a.default.Messages.FORUM_POST_AUTOMOD_ERROR : a.default.Messages.GUILD_AUTOMOD_BLOCKED_MESSAGE_SEND_NOTICE }(e) } }, 715903: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAutomodQuarantinedGuildMemberFlags: function() { return u }, getAutomodQuarantinedProfileFlags: function() { return l }, hasAutomodQuarantinedProfile: function() { return d }, useCurrentUserAutomodQuaratinedProfile: function() { return _ } }), n("47120"), n("724458"), n("653041"), n("789020"); var i = n("442837"), r = n("271383"), s = n("630388"), a = n("372897"); let o = [a.GuildMemberFlags.AUTOMOD_QUARANTINED_BIO, a.GuildMemberFlags.AUTOMOD_QUARANTINED_USERNAME_OR_GUILD_NICKNAME, a.GuildMemberFlags.AUTOMOD_QUARANTINED_CLAN_TAG]; function l(e) { return null == e ? new Set : new Set(o.reduce((t, n) => ((0, s.hasFlag)(null != e ? e : 0, n) && t.push(n), t), [])) } function u(e) { return null == e ? new Set : l(e.flags) } function d(e) { return null != e && null != e.flags && o.some(t => { var n; return (0, s.hasFlag)(null !== (n = e.flags) && void 0 !== n ? n : 0, t) }) } function _(e) { return (0, i.useStateFromStores)([r.default], () => null != e && d(r.default.getSelfMember(e)), [e]) } }, 723352: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isNotAutomodEmbed: function() { return r } }); var i = n("470167"); let r = e => { let { type: t } = e; return t !== i.MessageEmbedTypes.AUTO_MODERATION_MESSAGE && t !== i.MessageEmbedTypes.AUTO_MODERATION_NOTIFICATION } }, 284363: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BadgeCategory: function() { return r }, getBadgeCategory: function() { return a } }); var i, r, s = n("854218"); function a(e) { return e.staff ? 5 : e.verified && e.partnered ? 2 : e.verified ? 1 : e.partnered ? 0 : e.community && e.visibility === s.GuildVisibility.PUBLIC ? 4 : e.clan ? 6 : e.community ? 3 : 7 }(i = r || (r = {}))[i.PARTNERED = 0] = "PARTNERED", i[i.VERIFIED = 1] = "VERIFIED", i[i.VERIFIED_AND_PARTNERED = 2] = "VERIFIED_AND_PARTNERED", i[i.COMMUNITY = 3] = "COMMUNITY", i[i.DISCOVERABLE = 4] = "DISCOVERABLE", i[i.STAFF = 5] = "STAFF", i[i.CLAN = 6] = "CLAN", i[i.NONE = 7] = "NONE" }, 854218: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildVisibility: function() { return i }, getGuildTraits: function() { return o } }), n("47120"); var i, r, s = n("601964"), a = n("981631"); function o(e) { let t = new Set(e.features), n = t.has(a.GuildFeatures.COMMUNITY) && t.has(a.GuildFeatures.DISCOVERABLE) ? "PUBLIC" : "INVITE_ONLY", i = function(e) { return null != e && (e instanceof s.default ? e.premiumSubscriberCount > 0 || e.premiumTier > a.BoostedGuildTiers.NONE : null != e.premiumSubscriptionCount && e.premiumSubscriptionCount > 0) }(e), r = 0; if (i) { var o; r = null !== (o = e instanceof s.default ? e.premiumSubscriberCount : e.premiumSubscriptionCount) && void 0 !== o ? o : 0 } let l = e instanceof s.default ? e.premiumTier : a.BoostedGuildTiers.NONE; return { verified: t.has(a.GuildFeatures.VERIFIED), partnered: t.has(a.GuildFeatures.PARTNERED), community: t.has(a.GuildFeatures.COMMUNITY), staff: t.has(a.GuildFeatures.INTERNAL_EMPLOYEE_ONLY), clan: t.has(a.GuildFeatures.CLAN), visibility: n, premium: i, premiumSubscriberCount: r, premiumTier: l } }(r = i || (i = {})).PUBLIC = "PUBLIC", r.INVITE_ONLY = "INVITE_ONLY" }, 666188: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("284363"), r = n("854218"); let s = new Set([i.BadgeCategory.PARTNERED, i.BadgeCategory.VERIFIED, i.BadgeCategory.VERIFIED_AND_PARTNERED, i.BadgeCategory.COMMUNITY, i.BadgeCategory.DISCOVERABLE, i.BadgeCategory.CLAN]); function a(e) { if (null == e) return !1; let t = (0, r.getGuildTraits)(e), n = (0, i.getBadgeCategory)(t); return s.has(n) } }, 829883: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canGuildUseRoleIcons: function() { return T }, getRoleIconData: function() { return _ }, isRoleIconAssetUrl: function() { return I }, replaceRoleIconSourceSize: function() { return c } }), n("757143"); var i = n("633302"), r = n("134432"), s = n("768581"), a = n("358085"), o = n("981631"); let l = "".concat(location.protocol, "//").concat(window.GLOBAL_ENV.CDN_HOST, "/role-icons"), u = "".concat(location.protocol).concat(window.GLOBAL_ENV.API_ENDPOINT), d = (0, a.isAndroid)(), _ = (e, t) => { if (null == e) return null; let n = null != e.unicodeEmoji ? i.default.getByName(i.default.convertSurrogateToName(e.unicodeEmoji, !1)) : void 0; return { customIconSrc: E(e, t), unicodeEmoji: null != n ? n : void 0 } }, c = (e, t) => e.replace(/size=[0-9]+/g, "size=".concat((0, r.getBestMediaProxySize)(t * (0, r.getDevicePixelRatio)()))), E = (e, t) => { let { id: n, icon: i } = e; if (null == i) return; if (i.startsWith("data:")) return i; let a = s.SUPPORTS_WEBP ? "webp" : "png", _ = "", c = "quality=lossless"; return (null != t && (_ = "size=" + (0, r.getBestMediaProxySize)(t * (0, r.getDevicePixelRatio)()), c = d ? "" : "&" + c), null != window.GLOBAL_ENV.CDN_HOST) ? "".concat(l, "/").concat(n, "/").concat(i, ".").concat(a, "?").concat(_).concat(c) : "".concat(u).concat(o.Endpoints.ROLE_ICON(n, i), "?").concat(_) }, I = e => e.startsWith(l) || e.startsWith("".concat(u, "/roles")) && e.includes("/icons/"), T = (e, t) => { var n; return (null == t ? void 0 : null === (n = t.tags) || void 0 === n ? void 0 : n.subscription_listing_id) != null || e.features.has(o.GuildFeatures.ROLE_ICONS) } }, 623624: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openGuildBoostingMarketingModal: function() { return I } }); var i = n("735250"); n("470079"); var r = n("512722"), s = n.n(r), a = n("442837"), o = n("100527"), l = n("906732"), u = n("430824"), d = n("594174"), _ = n("725568"), c = n("443002"); let E = e => { let { guildId: t, close: n, location: r } = e, _ = (0, a.useStateFromStores)([d.default], () => d.default.getCurrentUser()); s()(null != _, "PremiumGuildPerksModalConnected: currentUser cannot be undefined"); let E = (0, a.useStateFromStores)([u.default], () => u.default.getGuild(t), [t]), { analyticsLocations: I } = (0, l.default)(o.default.BOOSTED_GUILD_PERKS_MODAL); return null == E ? null : (0, i.jsx)(l.AnalyticsLocationProvider, { value: I, children: (0, i.jsx)(c.default, { analyticsLocation: r, onClose: n, guild: E }) }) }; function I(e) { let { guildId: t, location: n } = e; (0, _.openFullScreenLayer)(e => { let { closeLayer: r } = e; return (0, i.jsx)(E, { close: r, guildId: t, location: n }) }, { layerKey: "BoostedGuildPerksModalConnected" }) } }, 30513: function(e, t, n) { "use strict"; n.r(t), n.d(t, { animatedGuildBannerUpsellPerks: function() { return U }, customRoleIconUpsellPerks: function() { return y }, guildBannerUpsellPerks: function() { return P }, guildBoostingPerks: function() { return w }, guildInviteUpsellPerks: function() { return G }, premiumProgressBarUpsellPerks: function() { return k }, vanityUrlUpsellPerks: function() { return b } }); var i = n("692547"), r = n("15385"), s = n("193277"), a = n("709586"), o = n("115102"), l = n("241820"), u = n("536952"), d = n("645284"), _ = n("898140"), c = n("68736"), E = n("123245"), I = n("981631"); n("474936"); var T = n("689938"); let f = () => ({ color: i.default.unsafe_rawColors.PREMIUM_PERK_GREEN.css, icon: u.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_CUSTOM_INVITE }), S = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : i.default.unsafe_rawColors.PREMIUM_PERK_ORANGE.css; return { color: e, icon: o.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_ANIMATED_ICON } }, h = () => ({ color: i.default.unsafe_rawColors.PREMIUM_PERK_GREEN.css, icon: u.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_GUILD_BANNER }), A = () => ({ color: i.default.unsafe_rawColors.PREMIUM_PERK_GREEN.css, icon: o.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_ANIMATED_GUILD_BANNER }), m = () => ({ color: i.default.unsafe_rawColors.PREMIUM_PERK_ORANGE.css, icon: l.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_ROLE_ICON }), N = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : i.default.unsafe_rawColors.PREMIUM_PERK_PURPLE.css; return { color: e, icon: c.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_STICKERS } }, p = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.default.unsafe_rawColors.PREMIUM_PERK_PURPLE.css, n = 0, r = 0; switch (e) { case I.BoostedGuildTiers.TIER_1: n = 15, r = 100; break; case I.BoostedGuildTiers.TIER_2: n = 30, r = 150; break; case I.BoostedGuildTiers.TIER_3: n = 60, r = 250 } return { color: t, icon: c.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_STICKERS_AND_EMOJIS.format({ numStickers: n, numEmojis: r }) } }, O = () => ({ color: i.default.unsafe_rawColors.PREMIUM_PERK_GOLD.css, icon: _.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_VANITY_URL }), C = () => ({ icon: r.default, description: T.default.Messages.PREMIUM_GUILD_USER_FEATURE_PROFILE_BADGE }), R = () => ({ icon: a.default, color: i.default.unsafe_rawColors.PREMIUM_PERK_PINK.css, description: T.default.Messages.PREMIUM_GUILD_USER_FEATURE_BOOST_CRYSTAL }), g = () => ({ icon: l.default, color: i.default.unsafe_rawColors.PREMIUM_PERK_YELLOW.css, description: T.default.Messages.PREMIUM_GUILD_USER_FEATURE_SPECIAL_ROLE }), L = () => ({ color: i.default.unsafe_rawColors.PREMIUM_PERK_BLUE.css, icon: s.default, description: T.default.Messages.PREMIUM_GUILD_USER_FEATURE_OTHERS }), v = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_OTHER; return { color: i.default.unsafe_rawColors.PREMIUM_PERK_BLUE.css, icon: s.default, description: e } }, D = () => ({ color: i.default.unsafe_rawColors.PREMIUM_PERK_PURPLE.css, icon: E.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_FILE_UPLOAD_TIER_3 }), M = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : i.default.unsafe_rawColors.PREMIUM_PERK_GREEN.css; return { color: e, icon: d.default, description: T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_UPSELL_PERKS_SCREEN_SHARE_1080P } }; function y() { return [m(), h(), N(), v()] } function P() { return [m(), p(I.BoostedGuildTiers.TIER_2), M(), v()] } function U() { return [p(I.BoostedGuildTiers.TIER_3, i.default.unsafe_rawColors.PREMIUM_PERK_GREEN.css), D(), O(), v()] } function b() { return [O(), A(), p(I.BoostedGuildTiers.TIER_3), v()] } function G() { return [f(), N(), S(), v()] } function w() { return [N(), v()] } function k() { return [R(), g(), C(), L()] } }, 678558: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("824385"), l = n("481060"), u = n("40851"), d = n("906732"), _ = n("78839"), c = n("976644"), E = n("267642"), I = n("879892"), T = n("981631"), f = n("689938"), S = n("658088"); t.default = e => { let { analyticsLocation: t, analyticsSourceLocation: n, guild: s, buttonText: h, targetBoostedGuildTier: A, onClose: m = () => {}, closeLayer: N = () => {}, pauseAnimation: p = !1, applicationId: O, handleSubscribeModalClose: C, withHighlight: R = !1, ...g } = e, { analyticsLocations: L } = (0, d.default)(), v = (0, u.useAppContext)() === T.AppContext.POPOUT, [D, M] = r.useState(!1), y = null != A ? Math.max((0, E.getNumberOfAppliedBoostsNeededForTier)(s, A), 1) : 1, P = (0, E.generateBlockGuildSubscriptionPurchasesNode)(), U = async () => { M(!0), await (0, I.addAppliedGuildBoosts)({ analyticsLocations: L, analyticsLocation: t, analyticsSourceLocation: n, guild: s, numberOfBoostsToAdd: y, onClose: m, closeLayer: N, inPopout: v, applicationId: O, handleSubscribeModalClose: C }), M(!1) }, b = _.default.getPremiumTypeSubscription(), G = (0, i.jsx)("span", { children: null != h ? h : f.default.Messages.PREMIUM_GUILD_PERKS_MODAL_BUTTON_SUBSCRIBE_THIS_SERVER }); return ((null == b ? void 0 : b.isPausedOrPausePending) && (G = (0, i.jsxs)("div", { className: S.pausedButton, children: [(0, i.jsx)(o.LockIcon, { className: S.lockIcon, width: 16, height: 16 }), " ", G] }), g.disabled = !0), null != P) ? (0, i.jsx)(l.Tooltip, { text: P, "aria-label": !1, children: e => (0, i.jsx)(c.default, { ...e, disabled: !0, size: l.Button.Sizes.SMALL, pauseAnimation: p, ...g, children: G }) }) : (0, i.jsx)(c.default, { size: l.Button.Sizes.SMALL, ...g, className: a()(g.className, { [S.buttonHighlighted]: R }), submitting: D, onClick: U, pauseAnimation: p, children: G }) } }, 518738: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getRoleIconProps: function() { return o }, useRoleIcon: function() { return l }, useRoleIconForPreview: function() { return u } }); var i = n("470079"), r = n("442837"), s = n("430824"), a = n("829883"); function o(e, t) { var n; let { customIconSrc: i, unicodeEmoji: r } = null !== (n = (0, a.getRoleIconData)(e, t)) && void 0 !== n ? n : {}; if (null != i || null != r) return { src: i, name: e.name, roleId: e.id, size: t, unicodeEmoji: r } } function l(e) { let { guildId: t, roleId: n, size: l = 20 } = e, { guild: u, roles: d } = (0, r.useStateFromStoresObject)([s.default], () => ({ guild: s.default.getGuild(t), roles: s.default.getRoles(t) }), [t]); return i.useMemo(() => { if (null == u || null == n) return; let e = d[n]; if ((0, a.canGuildUseRoleIcons)(u, e)) return o(e, l) }, [u, d, n, l]) } function u(e, t) { let n = (0, r.useStateFromStores)([s.default], () => s.default.getGuild(e)); if (null != n && (0, a.canGuildUseRoleIcons)(n, t)) return o(t) } }, 879892: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addAppliedGuildBoosts: function() { return f } }), n("653041"), n("998459"), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("355467"), a = n("179360"), o = n("821849"), l = n("594174"), u = n("314884"), d = n("509545"), _ = n("626135"), c = n("267642"), E = n("852679"), I = n("981631"); let T = "apply-guild-boost-modal"; async function f(e) { let { analyticsLocations: t, analyticsLocation: f, analyticsSourceLocation: S, numberOfBoostsToAdd: h, onClose: A, closeLayer: m, onSubscriptionConfirmation: N, guild: p, handleSubscribeModalClose: O, disablePremiumUpsell: C, inPopout: R, applicationId: g } = e, L = R ? r.POPOUT_MODAL_CONTEXT : r.DEFAULT_MODAL_CONTEXT, v = l.default.getCurrentUser(); if (null == v) return; if (!v.verified) { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("35822")]).then(n.bind(n, "444688")); return t => { let { onClose: n, ...r } = t; return (0, i.jsx)(e, { ...r, onClose: n }) } }, { contextKey: L }); return } let D = []; !d.default.isLoadedForPremiumSKUs() && D.push((0, o.fetchPremiumSubscriptionPlans)()), !u.default.hasFetched && (D.push(s.fetchSubscriptions()), D.push((0, a.fetchGuildBoostSlots)())), D.length > 0 && await Promise.allSettled(D); let M = (0, c.getAvailableGuildBoostSlots)(u.default.boostSlots), y = M.length, P = e => { null == A || A(), null == O || O(e) }; if (y > 0 && (null == h || y >= h)) { let e; 1 === y ? e = M.slice(0, 1) : null != h && (e = M.slice(0, h)), await (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("29549"), n.e("15972"), n.e("38674"), n.e("54167"), n.e("8016"), n.e("22646"), n.e("30419"), n.e("53889")]).then(n.bind(n, "760558")); return n => { let { onClose: r, ...s } = n; return (0, i.jsx)(t, { ...s, onClose: e => { r(), P(e) }, selectedGuild: p, locationSection: I.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, guildBoostSlots: e }) } }, { modalKey: T, onCloseRequest: () => { (0, r.closeModal)(T), P(!1) }, contextKey: L }) } else(0, E.default)({ analyticsLocations: t, analyticsLocation: f, analyticsSourceLocation: S, guildId: p.id, closeLayer: () => { null == A || A(), null == m || m(), _.default.track(I.AnalyticEvents.MODAL_DISMISSED, { type: I.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, location_section: f.section }) }, totalNumberOfSlotsToAssign: null != h ? h : 1, onCloseModal: P, disablePremiumUpsell: C, onSubscriptionConfirmation: N, inPopout: R, applicationId: g }) } }, 443002: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("207561"), a = n("622535"), o = n("481060"), l = n("425493"), u = n("906732"), d = n("626135"), _ = n("724884"), c = n("355045"), E = n("290799"), I = n("394769"), T = n("555932"), f = n("808189"), S = n("362948"), h = n("245004"), A = n("383881"), m = n("981631"), N = n("689938"), p = n("923048"); t.default = function(e) { let { analyticsLocation: t, guild: n, onClose: O } = e, [C, R] = r.useState(!0), g = r.useRef(!1), L = (0, s.useLazyValue)(() => Date.now()), { analyticsLocations: v } = (0, u.default)(), D = r.useCallback(() => { O(), d.default.track(m.AnalyticEvents.MODAL_DISMISSED, { type: m.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, location_stack: v, location_section: t.section, location_object: t.object, guild_id: n.id, duration_open_ms: Date.now() - L }) }, [O, t, v, L, n.id]), M = r.useCallback(e => { e && !g.current && (d.default.track(m.AnalyticEvents.PREMIUM_MARKETING_SURFACE_REACHED_BOTTOM, { type: m.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, location_stack: v, location_section: t.section, location_object: t.object, guild_id: n.id }), g.current = !0) }, [t, v, n.id]); return r.useEffect(() => { d.default.track(m.AnalyticEvents.OPEN_MODAL, { type: m.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, location_stack: v, location_section: t.section, location_object: t.object, guild_id: n.id }) }, [n.id, t, v]), r.useEffect(() => { function e(e) { "Escape" === e.key && D() } return window.addEventListener("keydown", e), () => { window.removeEventListener("keydown", e) } }, [D]), (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { className: p.closeIconWrapper, children: (0, i.jsx)(l.default, { className: p.closeIcon, closeAction: D, keybind: "ESC", variant: l.default.Variants.SOLID }) }), (0, i.jsxs)(o.AdvancedScrollerAuto, { className: p.scroller, children: [(0, i.jsxs)("div", { className: p.header, children: [(0, i.jsxs)("div", { className: p.headerContentWrapper, children: [(0, i.jsx)(o.Heading, { className: p.heading, color: "always-white", variant: "display-lg", children: N.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_HEADING }), (0, i.jsx)(c.default, { guild: n, closeLayer: D, onCtaVisibilityChange: R }), (0, i.jsx)(T.default, { guild: n }), (0, i.jsx)(f.default, { guild: n })] }), (0, i.jsx)(A.HeaderWave, {})] }), (0, i.jsx)("div", { className: p.middleBodyContentWrapper, children: (0, i.jsx)(h.default, {}) }), (0, i.jsxs)("div", { className: p.lowerBody, children: [(0, i.jsxs)("div", { className: p.lowerBodyContentWrapper, children: [(0, i.jsx)(S.default, { className: p.tierComparisonTable, guild: n }), (0, i.jsx)(_.default, {}), (0, i.jsx)(E.default, {})] }), (0, i.jsx)(A.BodyWave, {}), (0, i.jsx)("div", { className: p.lowerBodyBackgroundImage })] }), (0, i.jsx)(a.VisibilitySensor, { onChange: M, children: (0, i.jsx)("div", { className: p.persistentCtaSpacer }) })] }), (0, i.jsx)(I.default, { guild: n, isVisible: !C, closeLayer: D })] }) } }, 724884: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("973675"), l = n("666272"), u = n("348258"), d = n("689938"), _ = n("443587"), c = n("247844"); function E(e) { let { className: t, icon: n, children: r } = e; return (0, i.jsxs)("li", { className: s()(_.card, t), children: [(0, i.jsx)(n, { className: _.icon }), (0, i.jsx)(a.Text, { className: _.__invalid_description, variant: "text-sm/medium", children: r })] }) } t.default = function(e) { let { cardClassName: t } = e; return (0, i.jsxs)("div", { className: _.wrapper, children: [(0, i.jsxs)("div", { className: _.content, children: [(0, i.jsx)(a.Heading, { className: _.heading, color: "always-white", variant: "heading-xxl/bold", children: d.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_HEADING }), (0, i.jsxs)("ul", { className: _.cards, children: [(0, i.jsx)(E, { className: t, icon: o.default, children: d.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_MEMBER_LIST_ICON }), (0, i.jsx)(E, { className: t, icon: e => (0, i.jsx)("img", { className: s()(e.className, _.iconImage), src: c, alt: "" }), children: d.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_PROFILE_BADGE }), (0, i.jsx)(E, { className: t, icon: u.default, children: d.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_BOOSTER_ROLE }), (0, i.jsx)(E, { className: t, icon: l.default, children: d.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTER_RECOGNITION_COMMUNITY_SUPPORT })] })] }), (0, i.jsx)("div", { className: _.backgroundImages })] }) } }, 355045: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("622535"), u = n("481060"), d = n("906732"), _ = n("963249"), c = n("594174"), E = n("314884"), I = n("346656"), T = n("559629"), f = n("709586"), S = n("74538"), h = n("678558"), A = n("981631"), m = n("474936"), N = n("689938"), p = n("598618"); t.default = function(e) { let { closeLayer: t, guild: n, onCtaVisibilityChange: s } = e, O = (0, o.useStateFromStores)([c.default], () => c.default.getCurrentUser()), C = (0, o.useStateFromStores)([E.default], () => E.default.boostSlots), { analyticsLocations: R } = (0, d.default)(), g = r.useMemo(() => Object.keys(C).filter(e => { let t = C[e]; return null != t.premiumGuildSubscription && t.premiumGuildSubscription.guildId === n.id }), [C, n.id]); return (0, i.jsxs)("div", { className: p.guildStatus, children: [(0, i.jsx)(I.default, { className: p.guildIcon, guild: n, size: I.default.Sizes.LARGER }), (0, i.jsx)(u.Heading, { className: p.guildName, color: "always-white", variant: "text-lg/bold", children: n.name }), (0, i.jsxs)("div", { className: p.guildBoostCountWrapper, children: [(0, i.jsxs)("div", { className: p.guildBoostCount, children: [(0, i.jsx)(f.default, { className: a()(p.guildBoostBadge, { [p.guildBoostBadgeWithBoosts]: n.premiumSubscriberCount > 0 }) }), (0, i.jsx)(u.Text, { className: p.guildStatusCopy, variant: "text-md/bold", children: N.default.Messages.PREMIUM_GUILD_PERKS_MODAL_HEADER_SUBSCRIPTION_COUNT.format({ subscriptions: n.premiumSubscriberCount }) })] }), g.length > 0 ? (0, i.jsx)(u.Text, { className: p.guildBoostCountCurrentUser, variant: "text-sm/normal", children: N.default.Messages.PREMIUM_GUILD_PERKS_MODAL_HEADER_USER_SUBSCRIPTION_COUNT.format({ numSubscriptions: g.length }) }) : null] }), (0, i.jsxs)("div", { className: p.guildBoostCtas, children: [(0, i.jsx)(l.VisibilitySensor, { onChange: s, threshold: .9, children: (0, i.jsx)("div", { className: a()(p.guildBoostCta, p.guildBoostCtaBoostWrapper), children: (0, i.jsx)(h.default, { className: p.guildBoostCtaBoost, innerClassName: a()(p.__invalid_guildBoostCtaContent, p.guildBoostCtaBoostContent), buttonShineClassName: p.guildBoostCtaBoostShine, guild: n, analyticsLocation: { page: A.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, section: A.AnalyticsSections.PREMIUM_GUILD_USER_MODAL_CTA_BAR, object: A.AnalyticsObjects.BUTTON_CTA, objectType: A.AnalyticsObjectTypes.BUY }, closeLayer: t, color: u.Button.Colors.WHITE, size: u.Button.Sizes.LARGE, fullWidth: !0 }) }) }), S.default.hasFreeBoosts(O) || S.default.isPremium(O, m.PremiumTypes.TIER_2) ? (0, i.jsxs)(u.Button, { className: a()(p.guildBoostCta, p.guildBoostCtaSecondary), innerClassName: a()(p.__invalid_guildBoostCtaContent, p.guildBoostCtaGiftContent), look: u.Button.Looks.OUTLINED, color: u.Button.Colors.WHITE, onClick: function() { (0, _.default)({ initialPlanId: null, subscriptionTier: m.PremiumSubscriptionSKUs.TIER_2, isGift: !0, analyticsLocations: R, analyticsObject: { page: A.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, section: A.AnalyticsSections.PREMIUM_GUILD_USER_MODAL_CTA_BAR, object: A.AnalyticsObjects.BUTTON_ICON, objectType: A.AnalyticsObjectTypes.GIFT }, onClose: e => e && t() }) }, size: u.Button.Sizes.LARGE, children: [(0, i.jsx)(T.default, { className: p.guildBoostCtaGiftIcon }), N.default.Messages.PREMIUM_GUILD_PERKS_MODAL_GIFT_NITRO] }) : (0, i.jsx)(u.Button, { className: a()(p.guildBoostCta, p.guildBoostCtaSecondary), innerClassName: a()(p.__invalid_guildBoostCtaContent, p.__invalid_guildBoostCtaSubscribeContent), look: u.Button.Looks.OUTLINED, color: u.Button.Colors.WHITE, onClick: function() { (0, _.default)({ initialPlanId: null, subscriptionTier: m.PremiumSubscriptionSKUs.TIER_2, analyticsLocations: R, analyticsObject: { page: A.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, section: A.AnalyticsSections.PREMIUM_GUILD_USER_MODAL_CTA_BAR, object: A.AnalyticsObjects.BUTTON_ICON, objectType: A.AnalyticsObjectTypes.BUY }, onClose: e => e && t() }) }, size: u.Button.Sizes.LARGE, children: N.default.Messages.PREMIUM_GUILD_PERKS_MODAL_SUBSCRIBE_WITH_FREE_BOOSTS })] })] }) } }, 290799: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("729285"), u = n("150954"), d = n("63063"), _ = n("981631"), c = n("689938"), E = n("333110"); let I = [{ getQuestion: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_1, getAnswer: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_1 }, { getQuestion: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_2, getAnswer: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_2.format({ helpCenterUrl: d.default.getArticleURL(_.HelpdeskArticles.GUILD_BOOSTING_FAQ) }) }, { getQuestion: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_3, getAnswer: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_3 }, { getQuestion: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_QUESTION_4, getAnswer: () => c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_ANSWER_4 }]; t.default = function(e) { let { className: t } = e, [n, s] = r.useState(null); return (0, i.jsxs)("div", { className: a()(E.wrapper, t), children: [(0, i.jsx)(o.Heading, { className: E.heading, variant: "heading-xxl/bold", children: c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_FAQ_HEADING }), (0, i.jsx)("ul", { className: E.list, children: I.map((e, t) => { let r = n === t; return (0, i.jsxs)("div", { className: E.listItem, children: [(0, i.jsxs)(o.Clickable, { className: a()(E.questionWrapper, { [E.questionWrapperExpanded]: r }), onClick: () => s(e => e === t ? null : t), tag: "li", children: [(0, i.jsx)(o.Text, { className: E.question, variant: "text-lg/normal", children: e.getQuestion() }), r ? (0, i.jsx)(u.default, { className: E.questionIcon }) : (0, i.jsx)(l.default, { className: E.questionIcon })] }), r && (0, i.jsx)(o.Text, { className: E.answer, color: "text-normal", variant: "text-md/normal", children: e.getAnswer() })] }, t) }) })] }) } }, 394769: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("920906"), s = n("399606"), a = n("481060"), o = n("607070"), l = n("346656"), u = n("678558"), d = n("981631"), _ = n("530978"); t.default = function(e) { let { closeLayer: t, guild: n, isVisible: c } = e, E = (0, s.useStateFromStores)([o.default], () => o.default.useReducedMotion), I = (0, r.useSpring)({ transform: c ? "translateY(-100%)" : "translateY(0%)", opacity: c ? 1 : 0, config: { tension: 120, friction: 12 }, immediate: E }); return (0, i.jsx)(r.animated.div, { className: _.wrapper, style: I, children: (0, i.jsxs)("div", { className: _.innerWrapper, children: [(0, i.jsxs)("div", { className: _.guildInfo, children: [(0, i.jsx)(l.default, { className: _.guildIcon, guild: n, size: l.default.Sizes.LARGER }), (0, i.jsx)(a.Heading, { className: _.guildName, variant: "text-lg/bold", children: n.name })] }), (0, i.jsx)(u.default, { className: _.ctaButton, guild: n, analyticsLocation: { page: d.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, section: d.AnalyticsSections.PREMIUM_GUILD_USER_MODAL_FLOATING_CTA_BAR, object: d.AnalyticsObjects.BUTTON_CTA, objectType: d.AnalyticsObjectTypes.BUY }, closeLayer: t, pauseAnimation: !c, size: a.Button.Sizes.LARGE })] }) }) } }, 555932: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("920906"), a = n("442837"), o = n("607070"), l = n("267642"), u = n("198466"), d = n("436444"), _ = n("981631"), c = n("689938"), E = n("291112"); let I = [_.BoostedGuildTiers.NONE, _.BoostedGuildTiers.TIER_1, _.BoostedGuildTiers.TIER_2, _.BoostedGuildTiers.TIER_3]; function T(e) { let { guild: t } = e, n = (0, a.useStateFromStores)([o.default], () => o.default.useReducedMotion), [T, f] = r.useState(!1), [S, h] = r.useState(0), A = r.useRef(null), m = Math.min(_.BoostedGuildTiers.TIER_3, t.premiumTier + 1), N = _.AppliedGuildBoostsRequiredForBoostedGuildTier[t.premiumTier], p = _.AppliedGuildBoostsRequiredForBoostedGuildTier[m], O = (t.premiumSubscriberCount - N) / (p - N), C = d.TierMarkerPositions[t.premiumTier], R = d.TierMarkerPositions[m], g = t.premiumTier === _.BoostedGuildTiers.TIER_3, { progressBarFillWidthFactor: L, isProgressBarAnimationComplete: v, setShouldFireConfetti: D, shouldFireConfetti: M, tierMarkerAnimationPosition: y } = function(e) { let { fillFactor: t, guildBoostCount: n, premiumTier: i, isRevealed: a, useReducedMotion: o } = e, [l, u] = r.useState(o ? i : -1), [c, E] = r.useState(0 === n), [I, T] = r.useState(!1), f = r.useRef(!0), { widthFactor: S } = (0, s.useSpring)({ from: { widthFactor: 0 }, to: { widthFactor: a ? t : 0 }, config: { tension: 15, friction: 7, clamp: !0 }, immediate: o, onChange: function(e) { let { widthFactor: t } = e; for (let [e, n] of Object.entries(d.TierMarkerPositions).reverse()) if (t >= n - .02727272727272727) { u(Number(e)); break } }, onStart: () => { E(!1) }, onRest: () => { E(!0), i === _.BoostedGuildTiers.TIER_3 && (T(!0), window.setTimeout(() => { f.current && T(!1) }, 200)) } }); return r.useEffect(() => () => { f.current = !1 }, []), { isProgressBarAnimationComplete: c, progressBarFillWidthFactor: S, setShouldFireConfetti: T, shouldFireConfetti: I, tierMarkerAnimationPosition: l } }({ fillFactor: g ? 1 : O * (R - C) + C, isRevealed: T || n, useReducedMotion: n, premiumTier: t.premiumTier, guildBoostCount: t.premiumSubscriberCount }); return r.useEffect(() => { let e = window.setTimeout(() => { f(!0) }, 250); return () => { window.clearTimeout(e) } }, []), (0, i.jsxs)("div", { className: E.progressBar, role: "progressbar", "aria-valuenow": t.premiumSubscriberCount, "aria-valuetext": t.premiumTier === _.BoostedGuildTiers.NONE ? c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_SCREEN_READER_VALUE.format({ numSubscriptionsApplied: t.premiumSubscriberCount }) : c.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_SCREEN_READER_VALUE_TIER_UNLOCKED.format({ numSubscriptionsApplied: t.premiumSubscriberCount, tierName: (0, l.getTierName)(t.premiumTier, { useLevels: !1 }) }), children: [(0, i.jsxs)("div", { className: E.progressBarScrubber, children: [(0, i.jsx)(s.animated.div, { className: E.progressBarFill, style: { width: L.to({ range: [0, 1], output: [0, 100] }).to(e => "".concat(e, "%")) } }), (0, i.jsx)("div", { className: E.progressBarTrack })] }), I.map(e => (0, i.jsx)(d.default, { confettiTriggerRef: A, guild: t, isProgressBarAnimationComplete: v, setConfettiCount: h, setShouldFireConfetti: D, tier: e, tierMarkerAnimationPosition: y, children: (0, l.getTierName)(e) }, e)), (0, i.jsx)(u.default, { confettiCount: S, confettiTriggerRef: A, isFiring: M })] }) } }, 198466: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ProgressBarConfettiTrigger: function() { return E } }), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("920906"), l = n("442837"), u = n("481060"), d = n("607070"), _ = n("745510"), c = n("737774"); function E(e) { let { children: t, confettiTriggerRef: n, setConfettiCount: i, setShouldFireConfetti: r, tooltipProps: _ } = e, [E, I] = a.useState(0), T = a.useRef(-1), f = a.useRef(!0), S = (0, l.useStateFromStores)([d.default], () => d.default.useReducedMotion), { scaleFactor: h } = (0, o.useSpring)({ from: { scaleFactor: 1 }, to: { scaleFactor: 1 === E ? .9 : 2 === E ? 1.2 : 1 }, config: { tension: 380, friction: 7 } }); return (a.useEffect(() => () => { f.current = !1 }, []), S) ? (0, s.jsx)(s.Fragment, { children: t }) : (0, s.jsx)(o.animated.div, { className: c.confettiTriggerWrapper, style: { transform: h.to(e => "scale(".concat(e, ")")) }, children: (0, s.jsx)(u.Clickable, { className: c.confettiTrigger, onMouseDown: () => { I(1), r(!0), i(e => Math.min(e + 2, 200)), window.clearTimeout(T.current), T.current = window.setTimeout(() => { f.current && i(0) }, 200) }, onMouseUp: () => { I(0), r(!1) }, onMouseEnter: () => { var e; I(2), null == _ || null === (e = _.onMouseEnter) || void 0 === e || e.call(_) }, onMouseLeave: () => { var e; I(0), null == _ || null === (e = _.onMouseLeave) || void 0 === e || e.call(_) }, innerRef: n, children: t }) }) }(r = i || (i = {}))[r.INACTIVE = 0] = "INACTIVE", r[r.PRESSED = 1] = "PRESSED", r[r.HOVERED = 2] = "HOVERED"; t.default = function(e) { let { confettiCount: t, confettiTriggerRef: n, isFiring: i } = e, { cannon: r, createMultipleConfettiAt: s } = a.useContext(_.ConfettiCannonContext), o = (0, l.useStateFromStores)([d.default], () => d.default.useReducedMotion); return a.useEffect(() => () => { null == r || r.clearConfetti() }, [r]), a.useEffect(() => { if (!i || o || null == n.current) return; let e = n.current.getBoundingClientRect(), r = e.left + e.width / 2; s(r, e.top + e.height / 2, { velocity: { type: "static-random", minValue: { x: -180, y: -180 }, maxValue: { x: 180, y: 180 } } }, Math.max(t, 20)) }, [t, n, s, i, o]), null } }, 436444: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TierMarkerPositions: function() { return A } }), n("411104"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("920906"), o = n("399606"), l = n("481060"), u = n("607070"), d = n("906732"), _ = n("471885"), c = n("263704"), E = n("267642"), I = n("879892"), T = n("198466"), f = n("981631"), S = n("689938"), h = n("598693"); let A = { [f.BoostedGuildTiers.NONE]: 0, [f.BoostedGuildTiers.TIER_1]: 1 / 3, [f.BoostedGuildTiers.TIER_2]: 2 / 3, [f.BoostedGuildTiers.TIER_3]: 1 }; t.default = function(e) { let { children: t, confettiTriggerRef: n, guild: r, isProgressBarAnimationComplete: m, setConfettiCount: N, setShouldFireConfetti: p, tier: O, tierMarkerAnimationPosition: C } = e, R = (0, o.useStateFromStores)([u.default], () => u.default.useReducedMotion), { analyticsLocations: g } = (0, d.default)(), L = f.AppliedGuildBoostsRequiredForBoostedGuildTier[O] - r.premiumSubscriberCount, v = O <= C || m, D = v && O <= r.premiumTier, M = v && O < r.premiumTier, y = v && O === r.premiumTier, { scaleFactor: P } = (0, a.useSpring)({ from: { scaleFactor: 0 }, to: { scaleFactor: C >= O || m && C + 1 === O || m && -1 === C && O === f.BoostedGuildTiers.NONE ? 1 : 0 }, config: { tension: 360, friction: 12 }, immediate: R }), U = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(a.animated.div, { className: h.progressBarMarkerIndicator, style: { transform: P.to(e => "translate(-50%, -50%) scale(".concat(e, ")")) } }), O !== f.BoostedGuildTiers.NONE && (0, i.jsx)(_.default, { tier: O, className: h.boostedTierIcon })] }), b = D ? "div" : l.Clickable, G = D ? {} : { onClick: function() { v && (0, I.addAppliedGuildBoosts)({ analyticsLocations: g, analyticsLocation: { page: f.AnalyticsPages.PREMIUM_GUILD_USER_MODAL, section: f.AnalyticsSections.PREMIUM_GUILD_USER_MODAL_PROGRESS_BAR, object: f.AnalyticsObjects.SUBSCRIBE_TO_TIER_BUTTON, objectType: function(e) { switch (e) { case f.BoostedGuildTiers.TIER_3: return f.AnalyticsObjectTypes.TIER_3; case f.BoostedGuildTiers.TIER_2: return f.AnalyticsObjectTypes.TIER_2; case f.BoostedGuildTiers.TIER_1: return f.AnalyticsObjectTypes.TIER_1; default: throw Error("Unsupported Boosting tier: ".concat(e)) } }(O) }, numberOfBoostsToAdd: L, guild: r }) } }; return (0, i.jsx)(l.Tooltip, { text: D ? S.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_TOOLTIP_TIER_UNLOCKED.format({ tierName: (0, E.getTierName)(O, { useLevels: !1 }) }) : S.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PROGRESS_BAR_TOOLTIP_REMAINING_FOR_TIER.format({ numBoostsRequired: L, tierName: (0, E.getTierName)(O, { useLevels: !1 }) }), shouldShow: O !== f.BoostedGuildTiers.NONE, children: e => (0, i.jsxs)(b, { className: s()(h.progressBarMarker, { [h.progressBarMarkerUnlocked]: D, [h.progressBarMarkerLocked]: !D, [h.progressBarMarkerLower]: M, [h.progressBarMarkerCurrent]: y }), style: { left: "".concat(100 * A[O], "%") }, ...e, ...G, children: [!D && (0, i.jsx)("div", { className: h.boostedTierIconBackground }), D && O === f.BoostedGuildTiers.TIER_3 ? (0, i.jsx)(T.ProgressBarConfettiTrigger, { confettiTriggerRef: n, setConfettiCount: N, setShouldFireConfetti: p, children: U }) : U, (0, i.jsxs)(l.Text, { className: h.progressBarMarkerLabel, variant: "text-md/normal", children: [D && O !== f.BoostedGuildTiers.NONE && (0, i.jsx)(c.default, { className: h.progressBarMarkerUnlockedIcon }), t] })] }) }) } }, 808189: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("535322"), l = n("642113"), u = n("57128"), d = n("705077"), _ = n("115102"), c = n("757698"), E = n("645284"), I = n("503705"), T = n("31698"), f = n("528771"), S = n("632184"), h = n("170039"), A = n("617506"), m = n("267642"), N = n("981631"), p = n("474936"), O = n("689938"), C = n("845138"); let R = [{ tier: N.BoostedGuildTiers.TIER_1, perks: [{ icon: l.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_CUSTOM_EMOJI.format({ numEmojiSlots: p.BoostedGuildFeatures[N.BoostedGuildTiers.TIER_1].limits.emoji }) }, { icon: I.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_CUSTOM_SOUNDS.format({ numSoundboardSlots: p.BoostedGuildFeatures[N.BoostedGuildTiers.TIER_1].limits.soundboardSounds }), isNew: !0 }, { icon: _.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_ANIMATED_GUILD_ICON }, { icon: S.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_AUDIO_QUALITY }] }, { tier: N.BoostedGuildTiers.TIER_2, perks: [{ icon: E.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_STREAM_QUALITY }, { icon: A.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_LARGER_FILE_UPLOADS.format({ uploadSizeLimit: O.default.Messages.FILE_UPLOAD_LIMIT_BOOSTED_GUILD_TIER_2 }) }, { icon: u.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_ROLE_ICONS }, { icon: d.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_GUILD_BANNER }] }, { tier: N.BoostedGuildTiers.TIER_3, perks: [{ icon: c.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_VANITY_URL }, { icon: A.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_LARGER_FILE_UPLOADS.format({ uploadSizeLimit: O.default.Messages.FILE_UPLOAD_LIMIT_BOOSTED_GUILD_TIER_3 }) }, { icon: S.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_HIGHEST_AUDIO_QUALITY }, { icon: _.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_ANIMATED_GUILD_BANNER }, { icon: h.default, getCopy: () => O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_PERK_STAGE_SEATS_AND_MORE.format({ numStageSeats: N.MAX_STAGE_VIDEO_USER_LIMIT_TIER3 }) }] }]; t.default = function(e) { let { guild: t } = e; return (0, i.jsx)("div", { className: C.tierCards, children: R.map(e => (0, i.jsxs)("div", { className: C.tierCard, children: [e.tier === N.BoostedGuildTiers.TIER_3 && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { className: s()(C.tierCardBorderHighlight, C.tierCardBorderHighlightTopRight) }), (0, i.jsx)("div", { className: s()(C.tierCardBorderHighlight, C.tierCardBorderHighlightBottomLeft) }), (0, i.jsxs)("div", { className: s()(C.tierCardSparkleHighlight, C.tierCardSparkleHighlightTopRight), children: [(0, i.jsx)(f.default, { className: C.tierCardSparkle1 }), (0, i.jsx)(f.default, { className: C.tierCardSparkle2 }), (0, i.jsx)(T.default, { className: C.tierCardSparkle3 })] }), (0, i.jsx)("div", { className: s()(C.tierCardSparkleHighlight, C.tierCardSparkleHighlightBottomLeft), children: (0, i.jsx)(f.default, { className: C.tierCardSparkle1 }) })] }), e.tier === t.premiumTier && (0, i.jsx)(a.Text, { className: C.tierCardCurrentTier, tag: "div", variant: "text-xs/semibold", color: "always-white", children: O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_CURRENT_TIER_LABEL }), (0, i.jsxs)("div", { className: C.tierCardHeader, children: [(0, i.jsx)(a.Heading, { className: C.tierCardHeading, variant: "heading-xxl/semibold", color: "always-white", children: (0, m.getTierName)(e.tier, { useLevels: !1 }) }), (0, i.jsx)(a.Text, { className: C.tierCardBoostRequirement, variant: "text-md/normal", color: "always-white", children: O.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_BOOSTS_REQUIRED.format({ numBoostsRequired: N.AppliedGuildBoostsRequiredForBoostedGuildTier[e.tier] }) })] }), (0, i.jsx)("ul", { className: C.tierCardList, children: e.perks.map((e, t) => null == e.predicate || e.predicate() ? (0, i.jsxs)("li", { className: C.tierCardPerkRow, children: [(0, i.jsxs)(a.Text, { className: C.tierCardListItem, variant: "text-md/normal", color: "always-white", children: [(0, i.jsx)(e.icon, { className: C.tierCardListIcon }), e.getCopy()] }), e.isNew ? (0, i.jsx)(o.default, { className: C.tierCardNewFeatureBadge, forceUseColorForSparkles: !0, shouldInheritBackgroundColor: !0, shouldInheritTextColor: !0 }) : null] }, t) : null) })] }, e.tier)) }) } }, 362948: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("780384"), l = n("481060"), u = n("410030"), d = n("263704"), _ = n("465670"), c = n("981631"), E = n("474936"), I = n("689938"), T = n("169709"); let f = [{ getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_EMOJI_SLOTS, getPerkPreviewLightTheme: () => n("414102"), getPerkPreviewDarkTheme: () => n("614600"), getTier0Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.emoji, getTier1Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.emoji, getTier2Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.emoji, getTier3Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.emoji }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_STICKER_SLOTS, getPerkPreviewLightTheme: () => n("73541"), getPerkPreviewDarkTheme: () => n("43735"), getTier0Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.stickers, getTier1Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.stickers, getTier2Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.stickers, getTier3Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.stickers }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_SOUNDBOARD_SLOTS, getPerkPreviewLightTheme: () => n("69098"), getPerkPreviewDarkTheme: () => n("881755"), getTier0Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.soundboardSounds, getTier1Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.soundboardSounds, getTier2Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.soundboardSounds, getTier3Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.soundboardSounds }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_STREAM_QUALITY, getPerkPreviewLightTheme: () => n("989015"), getPerkPreviewDarkTheme: () => n("815152"), getTier0Value: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_STREAM_QUALITY.format({ resolution: E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.screenShareQualityResolution, framerate: E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.screenShareQualityFramerate }), getTier1Value: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_STREAM_QUALITY.format({ resolution: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.screenShareQualityResolution, framerate: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.screenShareQualityFramerate }), getTier2Value: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_STREAM_QUALITY.format({ resolution: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.screenShareQualityResolution, framerate: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.screenShareQualityFramerate }), getTier3Value: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_STREAM_QUALITY.format({ resolution: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.screenShareQualityResolution, framerate: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.screenShareQualityFramerate }) }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_VOICE_QUALITY, getPerkPreviewLightTheme: () => n("222185"), getPerkPreviewDarkTheme: () => n("415480"), getTier0Value: () => I.default.Messages.BITRATE_KBPS_NO_SPACE.format({ bitrate: E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.bitrate / 1e3 }), getTier1Value: () => I.default.Messages.BITRATE_KBPS_NO_SPACE.format({ bitrate: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.bitrate / 1e3 }), getTier2Value: () => I.default.Messages.BITRATE_KBPS_NO_SPACE.format({ bitrate: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.bitrate / 1e3 }), getTier3Value: () => I.default.Messages.BITRATE_KBPS_NO_SPACE.format({ bitrate: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.bitrate / 1e3 }) }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_UPLOAD_SIZE_LIMIT, getPerkPreviewLightTheme: () => n("825588"), getPerkPreviewDarkTheme: () => n("954499"), getTier0Value: () => I.default.Messages.FILE_SIZE_MB_NO_SPACE.format({ size: E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.fileSize / 1024 / 1024 }), getTier1Value: () => I.default.Messages.FILE_SIZE_MB_NO_SPACE.format({ size: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.fileSize / 1024 / 1024 }), getTier2Value: () => I.default.Messages.FILE_SIZE_MB_NO_SPACE.format({ size: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.fileSize / 1024 / 1024 }), getTier3Value: () => I.default.Messages.FILE_SIZE_MB_NO_SPACE.format({ size: E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.fileSize / 1024 / 1024 }) }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_VIDEO_STAGE_SEATS, getPerkPreviewLightTheme: () => n("241190"), getPerkPreviewDarkTheme: () => n("879846"), getTier0Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.NONE].limits.stageVideoUsers, getTier1Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_1].limits.stageVideoUsers, getTier2Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_2].limits.stageVideoUsers, getTier3Value: () => E.BoostedGuildFeatures[c.BoostedGuildTiers.TIER_3].limits.stageVideoUsers }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_ANIMATED_GUILD_ICON, getPerkPreviewLightTheme: () => n("499059"), getPerkPreviewDarkTheme: () => n("488349"), getTier0Value: () => !1, getTier1Value: () => !0, getTier2Value: () => !0, getTier3Value: () => !0 }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_GUILD_INVITE_BACKGROUND, getPerkPreviewLightTheme: () => n("136631"), getPerkPreviewDarkTheme: () => n("692079"), getTier0Value: () => !1, getTier1Value: () => !0, getTier2Value: () => !0, getTier3Value: () => !0 }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_GUILD_BANNER, getPerkPreviewLightTheme: () => n("277822"), getPerkPreviewDarkTheme: () => n("866919"), getTier0Value: () => !1, getTier1Value: () => !1, getTier2Value: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_GUILD_BANNER_STATIC, getTier3Value: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CELL_GUILD_BANNER_ANIMATED }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_CUSTOM_ROLE_ICONS, getPerkPreviewLightTheme: () => n("872259"), getPerkPreviewDarkTheme: () => n("876049"), getTier0Value: () => !1, getTier1Value: () => !1, getTier2Value: () => !0, getTier3Value: () => !0 }, { getPerkHeading: () => I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_PERK_HEADING_VANITY_URL, getPerkPreviewLightTheme: () => n("710717"), getPerkPreviewDarkTheme: () => n("945198"), getTier0Value: () => !1, getTier1Value: () => !1, getTier2Value: () => !1, getTier3Value: () => !0 }]; function S(e) { let { children: t, className: n, tier: r } = e, s = r === c.BoostedGuildTiers.NONE ? "text-muted" : "header-primary", o = r === c.BoostedGuildTiers.NONE || null == r ? "heading-xl/normal" : "heading-xl/bold"; return (0, i.jsxs)("th", { className: a()(T.columnHeading, n), scope: "col", children: [(0, i.jsx)(l.Heading, { color: s, variant: o, children: t }), null != r && (0, i.jsx)(l.Text, { color: s, variant: "text-md/normal", children: I.default.Messages.PREMIUM_GUILD_PERKS_MODAL_HEADER_SUBSCRIPTION_COUNT.format({ subscriptions: c.AppliedGuildBoostsRequiredForBoostedGuildTier[r] }) })] }) } function h(e) { let t; let { className: n, textVariant: r = "text-md/bold", value: s } = e; if ("boolean" == typeof s) { let e = a()(T.booleanValueIcon, { [T.booleanValueTrue]: s }); t = s ? (0, i.jsx)(d.default, { className: e }) : (0, i.jsx)(_.default, { className: e }) } else t = (0, i.jsx)(l.Text, { color: "interactive-active", variant: r, children: s }); return (0, i.jsx)("td", { className: a()(T.tableCell, n), children: t }) } function A(e) { let { currentTier: t } = e, n = function(e) { switch (e) { case c.BoostedGuildTiers.NONE: case c.BoostedGuildTiers.TIER_1: return c.BoostedGuildTiers.TIER_2; case c.BoostedGuildTiers.TIER_2: case c.BoostedGuildTiers.TIER_3: return c.BoostedGuildTiers.TIER_3; default: return null } }(t); return null == n ? null : (0, i.jsx)("div", { className: a()(T.recommendedTierHighlight, { [T.recommendedTierHighlightTier2]: n === c.BoostedGuildTiers.TIER_2, [T.recommendedTierHighlightTier3]: n === c.BoostedGuildTiers.TIER_3 }), children: (0, i.jsx)(l.Text, { className: T.recommendedTierHighlightTag, color: "always-white", variant: "text-xs/bold", children: t === c.BoostedGuildTiers.TIER_3 ? I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_CURRENT_TAG : I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_RECOMMENDED_TAG }) }) } t.default = function(e) { let t = (0, u.default)(), [n, s] = r.useState(null), { className: d, guild: _, hideHeading: E, hideTier0: m } = e; function N() { s(null) } return (0, i.jsxs)("div", { className: d, children: [!E && (0, i.jsx)(l.Heading, { className: T.heading, variant: "heading-xxl/extrabold", children: I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_HEADING }), (0, i.jsxs)("div", { className: T.tableWrapper, children: [null != _ && (0, i.jsx)(A, { currentTier: _.premiumTier }), (0, i.jsxs)("table", { className: T.table, cellPadding: 0, cellSpacing: 0, children: [(0, i.jsx)("thead", { children: (0, i.jsxs)("tr", { className: T.__invalid_tableRow, children: [(0, i.jsx)(S, { className: T.tableRowHeading, children: I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_COMPARISON_TABLE_COLUMN_HEADING_PERKS }), !m && (0, i.jsx)(S, { tier: c.BoostedGuildTiers.NONE, children: I.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_NONE_NAME }), (0, i.jsx)(S, { tier: c.BoostedGuildTiers.TIER_1, children: I.default.Messages.PREMIUM_GUILD_TIER_1 }), (0, i.jsx)(S, { tier: c.BoostedGuildTiers.TIER_2, children: I.default.Messages.PREMIUM_GUILD_TIER_2 }), (0, i.jsx)(S, { tier: c.BoostedGuildTiers.TIER_3, children: I.default.Messages.PREMIUM_GUILD_TIER_3 })] }) }), (0, i.jsx)("tbody", { className: T.__invalid_tableBody, children: f.map((e, r) => { let u = n === r; function d() { s(r) } return void 0 === e.predicate ? (0, i.jsxs)("tr", { className: T.__invalid_tableRow, children: [(0, i.jsx)("th", { className: a()(T.tableCell, T.tableCellWrapper), scope: "row", children: (0, i.jsx)(l.Clickable, { className: a()(T.tableRowHeading, T.tableCell, T.tableCellInner), onFocus: d, onBlur: N, onMouseEnter: d, onMouseLeave: N, children: (0, i.jsx)(l.Popout, { align: "center", disablePointerEvents: !0, nudgeAlignIntoViewport: !0, position: "bottom", renderPopout: () => (0, i.jsx)("img", { className: T.perkPreviewImage, src: (0, o.isThemeDark)(t) ? e.getPerkPreviewDarkTheme() : e.getPerkPreviewLightTheme(), alt: "" }), shouldShow: u, spacing: 16, children: () => (0, i.jsx)(l.Text, { variant: "text-md/normal", children: e.getPerkHeading() }) }) }) }), !m && (0, i.jsx)(h, { textVariant: "text-md/normal", value: e.getTier0Value() }), (0, i.jsx)(h, { value: e.getTier1Value() }), (0, i.jsx)(h, { value: e.getTier2Value() }), (0, i.jsx)(h, { value: e.getTier3Value() })] }, r) : null }) })] })] })] }) } }, 245004: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("399606"), s = n("481060"), a = n("607070"), o = n("689938"), l = n("440476"), u = n("567949"), d = n("552781"), _ = n("952567"), c = n("807159"); function E(e) { let { description: t, heading: n, imgSrc: r } = e; return (0, i.jsxs)("div", { className: l.topPerksCard, children: [(0, i.jsx)("img", { className: l.topPerksCardImage, src: r, alt: "" }), (0, i.jsx)(s.Heading, { className: l.topPerksCardHeading, variant: "heading-lg/extrabold", children: n }), (0, i.jsx)(s.Text, { className: l.topPerksCardDescription, variant: "text-sm/normal", children: t })] }) } t.default = function() { let e = (0, r.useStateFromStores)([a.default], () => a.default.useReducedMotion); return (0, i.jsxs)("div", { className: l.wrapper, children: [(0, i.jsx)(s.Heading, { className: l.heading, variant: "heading-xxl/extrabold", children: o.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_HEADING }), (0, i.jsxs)("div", { className: l.topPerksCards, children: [(0, i.jsx)(E, { description: o.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_HD_STREAMING_DESCRIPTION, heading: o.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_HD_STREAMING_HEADING, imgSrc: _ }), (0, i.jsx)(E, { description: o.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_ANIMATED_GUILD_ICON_DESCRIPTION, heading: o.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_CARDS_ANIMATED_GUILD_ICON_HEADING, imgSrc: e ? d : u }), (0, i.jsx)(E, { description: o.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_VANITY_URL_DESCRIPTION, heading: o.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TOP_PERKS_VANITY_URL_HEADING, imgSrc: c })] })] }) } }, 383881: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BodyWave: function() { return l }, HeaderWave: function() { return a } }); var i = n("735250"); n("470079"); var r = n("153832"), s = n("948583"); function a() { return (0, i.jsx)("svg", { className: s.headerWave, version: "1.1", preserveAspectRatio: "none", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", x: "0px", y: "0px", viewBox: "0 0 1512 510", xmlSpace: "preserve", children: (0, i.jsx)("path", { style: { fill: "currentColor" }, d: "M1512,25.1c-294.3-135.3-565.2,319.2-855,322.2c-232,2.4-279-101.8-415.5-100.5C149.9,247.7,49.8,311.3,0,355.4 v154.4h1512V25.1z" }) }) } let o = (0, r.v4)(); function l() { return (0, i.jsxs)("svg", { className: s.bodyWave, version: "1.1", preserveAspectRatio: "none", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", x: "0px", y: "0px", viewBox: "0 0 1512 1619", xmlSpace: "preserve", children: [(0, i.jsxs)("linearGradient", { id: o, gradientUnits: "userSpaceOnUse", x1: "-13.3959", y1: "82.1225", x2: "1221.1846", y2: "1689.3361", children: [(0, i.jsx)("stop", { offset: "0", className: s.bodyWaveGradientStop1 }), (0, i.jsx)("stop", { offset: "0.5", className: s.bodyWaveGradientStop2 }), (0, i.jsx)("stop", { offset: "1", className: s.bodyWaveGradientStop3 })] }), (0, i.jsx)("path", { style: { fill: "url(#".concat(o, ")") }, d: "M0,1619c507-247.2,1154.7-241,1512-194.7V548.5c-150.9,56.4-400.3,51.2-691-222.6C506.6,29.9,186.8-16.5,0,4.3 V1619z" })] }) } }, 26323: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("928518"), a = n("776862"), o = n("626135"), l = n("981631"); function u(e, t) { let u = null != t ? t : "".concat(l.AnalyticsSections.PREMIUM_GUILD_UPSELL_MODAL); null != e.targetBoostedGuildTier && (u += " - Tier ".concat(e.targetBoostedGuildTier)); o.default.track(l.AnalyticEvents.OPEN_MODAL, { type: u, location: e.analyticsSourceLocation }); let { openInPopoutEnabled: d, ..._ } = e, c = s.default.getWindowOpen(l.PopoutWindowKeys.CHANNEL_CALL_POPOUT) && null != d && d; c && (0, a.default)(l.PopoutWindowKeys.CHANNEL_CALL_POPOUT); let E = c ? r.POPOUT_MODAL_CONTEXT : r.DEFAULT_MODAL_CONTEXT; (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("29549"), n.e("89675")]).then(n.bind(n, "146747")); return t => (0, i.jsx)(e, { ..._, ...t }) }, { onCloseCallback: () => { o.default.track(l.AnalyticEvents.MODAL_DISMISSED, { type: u, location: e.analyticsSourceLocation }) }, contextKey: E }) } }, 852679: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("668781"), a = n("355467"), o = n("821849"), l = n("78839"), u = n("626135"), d = n("74538"), _ = n("981631"), c = n("689938"); let E = "guild-boost-purchase-modal"; async function I(e) { let { analyticsLocations: t, analyticsLocation: I, analyticsSourceLocation: T, guildId: f, closeLayer: S, onCloseModal: h, totalNumberOfSlotsToAssign: A = 1, disablePremiumUpsell: m, onSubscriptionConfirmation: N, inPopout: p, applicationId: O } = e, C = p ? r.POPOUT_MODAL_CONTEXT : r.DEFAULT_MODAL_CONTEXT, R = l.default.getPremiumTypeSubscription(); if (null != R && R.isPurchasedExternally && null != R.paymentGateway) { null != S && S(), s.default.show({ title: c.default.Messages.BILLING_MANAGED_BY_PAYMENT_GATEWAY.format({ paymentGatewayName: _.PaymentGatewayToFriendlyName[R.paymentGateway] }), body: c.default.Messages.PREMIUM_GUILD_PERKS_MODAL_BUTTON_UPGRADE_TO_PREMIUM_EXTERNAL_ERROR.format({ paymentGatewayName: _.PaymentGatewayToFriendlyName[R.paymentGateway], subscriptionManagementLink: (0, d.getExternalSubscriptionMethodUrl)(R.paymentGateway, "SUBSCRIPTION_MANAGEMENT") }) }); return } Promise.all([(0, a.fetchPaymentSources)(), (0, o.fetchPremiumSubscriptionPlans)()]); await (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("96427"), n.e("40326"), n.e("23357"), n.e("29549"), n.e("15972"), n.e("38674"), n.e("43906"), n.e("54167"), n.e("8016"), n.e("22646"), n.e("20533"), n.e("32186")]).then(n.bind(n, "343649")); return n => { let { transitionState: r, onClose: s } = n; return (0, i.jsx)(e, { transitionState: r, onClose: e => { s(), null == h || h(e) }, analyticsLocations: t, analyticsLocation: I, analyticsSourceLocation: null != T ? T : I, guildId: f, totalNumberOfSlotsToAssign: A, closeGuildPerksModal: S, disablePremiumUpsell: m, onSubscriptionConfirmation: N, applicationId: O }) } }, { modalKey: E, onCloseCallback: () => { u.default.track(_.AnalyticEvents.MODAL_DISMISSED, { type: _.AnalyticsSections.PREMIUM_GUILD_PURCHASE_MODAL, location: I }) }, onCloseRequest: () => { (0, r.closeModal)(E), null == h || h(!1) }, contextKey: C }) } }, 202107: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("147913"), s = n("271383"), a = n("594174"), o = n("69882"); let l = null, u = () => { let e = s.default.getCommunicationDisabledUserMap(); Object.keys(e).forEach(t => { let n = (0, s.getGuildIdFromCommunicationDisabledUserKey)(t), i = (0, s.getUserIdFromCommunicationDisabledUserKey)(t), r = e[t]; !(0, o.isCommunicationDisabled)(r) && d(n, i) }) }, d = (e, t) => { var n, r, l, u, d, _; let c = s.default.getMember(e, t), E = a.default.getUser(t); if (null == c || null == E || (0, o.isMemberCommunicationDisabled)(c)) return; let I = { ...c, guildId: e, nick: null !== (n = c.nick) && void 0 !== n ? n : E.username, avatar: null !== (r = c.avatar) && void 0 !== r ? r : void 0, avatarDecoration: null != c.avatarDecoration ? { ...c.avatarDecoration } : void 0, premiumSince: null !== (l = c.premiumSince) && void 0 !== l ? l : void 0, isPending: null !== (u = c.isPending) && void 0 !== u && u, user: { ...E, email: null !== (d = E.email) && void 0 !== d ? d : void 0, phone: null !== (_ = E.phone) && void 0 !== _ ? _ : void 0 }, communicationDisabledUntil: null }; i.default.dispatch({ type: "GUILD_MEMBER_UPDATE", ...I }) }; class _ extends r.default { _initialize() { l = setInterval(() => u(), 1e4) } _terminate() { clearInterval(l) } constructor(...e) { var t, n, i; super(...e), t = this, n = "clearGuildMemberTimeout", i = d, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new _ }, 69882: function(e, t, n) { "use strict"; function i(e) { return null != e && new Date(e) > new Date } function r(e) { return i(null == e ? void 0 : e.communicationDisabledUntil) } n.r(t), n.d(t, { isCommunicationDisabled: function() { return i }, isMemberCommunicationDisabled: function() { return r } }) }, 590433: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CLEAR_COMMUNICATION_DISABLED_MODAL_NAME: function() { return E }, DISMISSED_COMMUNICATION_DISABLED_NOTIFICATION_GUILDS_KEY: function() { return _ }, DisableCommunicationDuration: function() { return r }, GUILD_COMMUNICATION_DISABLED_RESOURCE_LINK: function() { return d }, MAX_REASON_LENGTH: function() { return I }, SET_COMMUNICATION_DISABLED_MODAL_NAME: function() { return c }, getDisableCommunicationDurationOptions: function() { return u }, getFriendlyDurationString: function() { return l } }); var i, r, s = n("63063"), a = n("981631"), o = n("689938"); function l(e) { switch (e) { case 60: return o.default.Messages.DURATION_SECS.format({ secs: 60 }); case 300: return o.default.Messages.DURATION_MINS.format({ mins: 5 }); case 600: return o.default.Messages.DURATION_MINS.format({ mins: 10 }); case 3600: return o.default.Messages.DURATION_HOURS.format({ hours: 1 }); case 86400: return o.default.Messages.DURATION_DAYS.format({ days: 1 }); case 604800: return o.default.Messages.DURATION_WEEKS.format({ weeks: 1 }); default: return } }(i = r || (r = {}))[i.DURATION_60_SEC = 60] = "DURATION_60_SEC", i[i.DURATION_5_MIN = 300] = "DURATION_5_MIN", i[i.DURATION_10_MIN = 600] = "DURATION_10_MIN", i[i.DURATION_1_HOUR = 3600] = "DURATION_1_HOUR", i[i.DURATION_1_DAY = 86400] = "DURATION_1_DAY", i[i.DURATION_1_WEEK = 604800] = "DURATION_1_WEEK"; let u = () => Object.keys(r).filter(e => isNaN(Number(e))).map(e => { var t; return { label: null !== (t = l(r[e])) && void 0 !== t ? t : "", value: r[e] } }), d = s.default.getArticleURL(a.HelpdeskArticles.DISABLE_GUILD_COMMUNICATION), _ = "GuildCommunicationDisabledDismissedGuilds", c = "Set Communication Disabled Modal", E = "Clear Communication Disabled Modal", I = 512 }, 386696: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canToggleCommunicationDisableOnUser: function() { return u }, default: function() { return d } }), n("47120"); var i = n("442837"), r = n("430824"), s = n("496675"), a = n("594174"), o = n("700785"), l = n("981631"); function u(e, t) { let [n, i, u] = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [a.default, r.default, s.default], d = i.getGuild(e), _ = n.getUser(t); return !(null == d || null == _ || _.isNonUserBot() || d.isOwner(_) || o.can({ permission: l.Permissions.ADMINISTRATOR, user: _, context: d })) && u.canManageUser(l.Permissions.MODERATE_MEMBERS, _, d) } function d(e, t) { return (0, i.useStateFromStores)([a.default, r.default, s.default], () => u(e, t, [a.default, r.default, s.default]), [e, t]) } }, 134049: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearCommunicationDisabledNotice: function() { return _ }, useCommunicationDisabledNoticeStore: function() { return d } }), n("47120"); var i = n("652874"), r = n("143927"), s = n("12336"), a = n("433517"), o = n("590433"); let l = (0, s.default)((e, t) => ({ notificationDismissedInGuilds: function() { var e; let t = null !== (e = a.Storage.get(o.DISMISSED_COMMUNICATION_DISABLED_NOTIFICATION_GUILDS_KEY)) && void 0 !== e ? e : []; return new Set(t) }(), dismissNotification: n => { let i = t().notificationDismissedInGuilds; i.add(n), a.Storage.set(o.DISMISSED_COMMUNICATION_DISABLED_NOTIFICATION_GUILDS_KEY, i), e({ notificationDismissedInGuilds: i }) }, resetNotification: n => { let i = t().notificationDismissedInGuilds; i.has(n) && (i.delete(n), a.Storage.set(o.DISMISSED_COMMUNICATION_DISABLED_NOTIFICATION_GUILDS_KEY, i), e({ notificationDismissedInGuilds: i })) } })), u = (0, i.default)(l); function d(e) { let [t, n] = u(e => [e.notificationDismissedInGuilds, e.dismissNotification], r.default); return [!t.has(e), n] } function _(e) { return l.getState().resetNotification(e) } }, 71619: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d }, useCurrentUserCommunicationDisabled: function() { return o }, userCommunicationDisabled: function() { return _ } }); var i = n("442837"), r = n("271383"), s = n("594174"), a = n("69882"); function o(e) { let t = (0, i.useStateFromStores)([s.default], () => s.default.getCurrentUser()); return d(null == t ? void 0 : t.id, e) } function l(e, t, n) { return null != t && null != e ? n.getMember(t, e) : null } function u(e) { var t; return [null !== (t = null == e ? void 0 : e.communicationDisabledUntil) && void 0 !== t ? t : null, (0, a.isMemberCommunicationDisabled)(e)] } function d(e, t) { return u((0, i.useStateFromStores)([r.default], () => l(e, t, r.default), [t, e])) } function _(e, t) { return u(l(e, t, r.default)) } }, 645041: function(e, t, n) { "use strict"; n.r(t), n.d(t, { markContentAsDismissed: function() { return I }, useIsContentDismissed: function() { return E } }); var i = n("442837"), r = n("524437"), s = n("675478"), a = n("581883"), o = n("626135"), l = n("915486"), u = n("981631"), d = n("921944"), _ = n("526761"); function c(e, t) { let n = a.default.getDismissedGuildContent(t); return null != n && (0, l.hasBit)(n, e) } function E(e, t) { return (0, i.useStateFromStores)([a.default], () => c(e, t)) } function I(e, t, n, i) { (0, s.updateUserGuildSettings)(t, n => { if (c(e, t)) return !1; n.dismissedGuildContent = (0, l.addBit)(n.dismissedGuildContent, e) }, _.UserSettingsDelay.INFREQUENT_USER_ACTION), n && o.default.track(u.AnalyticEvents.DISMISSIBLE_CONTENT_DISMISSED, { type: r.DismissibleGuildContent[e], guild_id: t, action: null != i ? i : d.ContentDismissActionType.UNKNOWN }) } }, 276438: function(e, t, n) { "use strict"; n.r(t), n.d(t, { featureGuildFeedItem: function() { return P }, fetchGuildFeed: function() { return g }, fetchGuildFeedFeaturedItems: function() { return y }, hideItemFromGuildFeed: function() { return M }, markGuildFeedItemAsSeen: function() { return L }, markGuildFeedItemAsUnseen: function() { return v }, removeItemFromGuildFeed: function() { return D }, sendFeedShownAnalytics: function() { return R }, setFeedItemPreference: function() { return G }, trackFeedItemInteracted: function() { return w }, unfeatureGuildFeedItem: function() { return U }, unhideItemFromGuildFeed: function() { return b } }); var i = n("392711"), r = n.n(i), s = n("536402"), a = n("974900"), o = n("106831"), l = n("544891"), u = n("570140"), d = n("479531"), _ = n("601410"), c = n("699516"), E = n("929991"), I = n("480739"), T = n("626135"), f = n("823379"), S = n("757235"), h = n("642101"), A = n("330249"), m = n("853147"), N = n("313531"), p = n("369701"), O = n("981631"); function C(e, t) { return t.map(t => h.default.getItem(e, t)).filter(e => { let t = null == e ? null : (0, A.default)(e); return null != t && !c.default.isBlocked(t.author.id) }).filter(f.isNotNullish).map(e => (0, N.default)(e)) } function R(e) { T.default.track(O.AnalyticEvents.FEED_SHOWN, { guild_id: e, load_id: h.default.getLoadId(e), home_session_id: _.default.getHomeSessionId(e) }) } async function g(e) { let { guildId: t, refresh: n, flushSeenItems: i, highlightedItemData: a, limit: o } = e, c = Date.now(), E = n ? 0 : h.default.getPaginationStatus(t).offset, I = null == E || 0 === E; u.default.dispatch({ type: I ? "GUILD_FEED_FETCH_FRESH_START" : "GUILD_FEED_FETCH_PAGE_START", guildId: t }); let f = _.default.getHomeSessionId(t); try { await (null == i ? void 0 : i()); let e = { limit: null != o ? o : h.GUILD_FEED_FETCH_LIMIT, offset: I ? 0 : E, load_id: I ? null : h.default.getLoadId(t), ...null != a && I && { highlight_channel_id: a.channelId, highlight_message_id: a.messageId } }, n = (await l.HTTP.get({ url: O.Endpoints.GUILD_FEED(t), query: e })).body, d = h.default.getFeedItemSection(t, p.GuildFeedSectionTypes.READ).map(e => e.id), S = h.default.getFeedItemSection(t, p.GuildFeedSectionTypes.UNREAD).map(e => e.id), A = h.default.getFeedItemsForGuild(t).filter(e => e.featured).map(e => e.id); await u.default.dispatch({ type: "GUILD_FEED_FETCH_SUCCESS", guildId: t, data: n, fresh: I }); let m = h.default.getFeedItemSection(t, p.GuildFeedSectionTypes.READ).map(e => e.id), N = h.default.getFeedItemSection(t, p.GuildFeedSectionTypes.UNREAD).map(e => e.id), R = h.default.getFeedItemsForGuild(t).filter(e => e.featured).map(e => e.id), g = Date.now() - c, L = (null != E ? E : 0) / h.GUILD_FEED_FETCH_LIMIT; ! function(e) { let { guildId: t, loadTime: n, startHomeSessionId: i, page: r, newUnreadFeedItemIds: s, newReadFeedItemIds: a, newFeaturedItemIds: o } = e; T.default.track(O.AnalyticEvents.FEED_LOADED, { guild_id: t, load_id: h.default.getLoadId(t), unread_feed_item_ids: C(t, s), read_feed_item_ids: C(t, a), load_time_millis: n, home_session_id: _.default.getHomeSessionId(t), start_home_session_id: i, featured_item_ids: C(t, o), page: r }) }({ guildId: t, loadTime: g, startHomeSessionId: f, page: L, newReadFeedItemIds: r().difference(m, d), newUnreadFeedItemIds: r().difference(N, S), newFeaturedItemIds: r().difference(R, A) }), ! function(e, t) { let n = t.results.items.filter(e => e.type === s.GuildFeedItemTypes.FORUM_POST); n.length > 0 && u.default.dispatch({ type: "LOAD_THREADS_SUCCESS", threads: n.map(e => e.thread), firstMessages: n.map(e => e.message), guildId: e }) }(t, n) } catch (e) { throw u.default.dispatch({ type: "GUILD_FEED_FETCH_FAILURE", guildId: t, error: new d.default(e) }), e } } function L(e, t, n) { (0, E.markAnalyticsFeedItemSeen)((0, S.getGuildFeedSeenManagerId)(e), t, n) } function v(e, t, n) { (0, E.markAnalyticsFeedItemUnseen)((0, S.getGuildFeedSeenManagerId)(e), t, n) } async function D(e) { let t = (0, A.default)(e), n = await l.HTTP.post({ url: O.Endpoints.GUILD_FEED_MESSAGE_REMOVE(t.channel_id, t.id) }); return u.default.dispatch({ type: "GUILD_FEED_ITEM_REMOVE", item: e }), n } async function M(e, t) { let n = (0, A.default)(e), i = await l.HTTP.put({ url: O.Endpoints.GUILD_FEED_MESSAGE_SET_PREFERENCE(t), body: { channel_id: n.channel_id, message_id: n.id, load_id: h.default.getLoadId(t), preference: o.GuildFeedPreferenceOptions.HIDDEN, entity_type: a.GuildFeedPreferenceEntityTypes.MESSAGE } }); return u.default.dispatch({ type: "GUILD_FEED_ITEM_HIDE", item: e }), i } async function y(e) { try { let t = (await l.HTTP.get({ url: O.Endpoints.GUILD_FEED_FEATURE_ITEM(e) })).body; u.default.dispatch({ type: "GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS", guildId: e, data: t }) } catch (t) { throw u.default.dispatch({ type: "GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE", guildId: e, error: new d.default(t) }), t } } async function P(e, t, n) { let { entityId: i, details: r, guildId: s, entityType: a } = (0, m.default)(e); try { let o = await l.HTTP.put({ url: O.Endpoints.GUILD_FEED_FEATURE_ITEM(s), body: { entity_id: i, entity_type: a, expires_at: t, details: r } }); return u.default.dispatch({ type: "GUILD_FEED_FEATURE_ITEM", featureableItem: e, options: n }), o } catch (e) { throw e } } async function U(e) { let { entityId: t, guildId: n, entityType: i } = (0, m.default)(e); try { let r = await l.HTTP.del({ url: O.Endpoints.GUILD_FEED_FEATURE_ITEM(n), body: { entity_id: t, entity_type: i } }); return u.default.dispatch({ type: "GUILD_FEED_UNFEATURE_ITEM", featureableItem: e }), r } catch (e) { throw e } } async function b(e, t) { let n = (0, A.default)(e), i = await l.HTTP.del({ url: O.Endpoints.GUILD_FEED_MESSAGE_SET_PREFERENCE(t), body: { channel_id: n.channel_id, message_id: n.id, load_id: h.default.getLoadId(t), entity_type: a.GuildFeedPreferenceEntityTypes.MESSAGE } }); return u.default.dispatch({ type: "GUILD_FEED_ITEM_UNHIDE", item: e }), i } async function G(e, t) { return await l.HTTP.put({ url: O.Endpoints.GUILD_FEED_MESSAGE_SET_PREFERENCE(e), body: { ...t, load_id: h.default.getLoadId(e), preference: o.GuildFeedPreferenceOptions.DEMOTED } }) } function w(e) { let t = e.guild_id; null != t && ! function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : I.ForceFlushType.IMMEDIATE_WITH_COOLDOWN; (0, E.flushAnalyticsFeedItems)((0, S.getGuildFeedSeenManagerId)(e), t) }(t), T.default.track(O.AnalyticEvents.FEED_ITEM_INTERACTED, e) } }, 369701: function(e, t, n) { "use strict"; n.r(t), n.d(t, { COLLAPSED_SIZE_MEDIA_QUERY: function() { return c }, FeedItemInteractionType: function() { return i }, GUILD_FEED_CHANNEL_TYPES: function() { return E }, GuildFeedRenderMode: function() { return s }, GuildFeedSectionTypes: function() { return r }, GuildHomeLandingSource: function() { return a } }), n("47120"); var i, r, s, a, o, l, u, d, _ = n("106351"); (o = i || (i = {})).MESSAGE_CLICKED = "message_clicked", o.MESSAGE_CHANNEL_CLICKED = "message_channel_clicked", o.REACTION_ADDED = "reaction_added", o.REACTION_REMOVED = "reaction_removed", o.THREAD_EMBED_CLICKED = "thread_embed_clicked", o.LINK_CLICKED = "link_clicked", o.IMAGE_CLICKED = "image_clicked", o.BUTTON_CLICKED = "button_clicked", o.REFERENCED_MESSAGE_CLICKED = "referenced_message_clicked", o.MESSAGED_IN_SIDEBAR = "messaged_in_sidebar", o.REPLIED_IN_SIDEBAR = "replied_in_sidebar", o.REPLIED_TO_MESSAGE = "replied_to_message", o.EXPANDED_ITEM = "expanded_item", o.VIEW_MORE_REPLIES = "view_more_replies", (l = r || (r = {})).UNREAD = "UNREAD", l.READ = "READ", l.HIGHLIGHTED = "HIGHLIGHTED", l.ALL = "ALL", (u = s || (s = {}))[u.SEGMENTED_READ = 0] = "SEGMENTED_READ", u[u.TOP = 1] = "TOP", u[u.NEW = 2] = "NEW"; let c = "(max-width: 1300px)", E = new Set([_.ChannelTypes.GUILD_TEXT, _.ChannelTypes.GUILD_ANNOUNCEMENT, _.ChannelTypes.GUILD_FORUM]); (d = a || (a = {})).ORGANIC = "ORGANIC", d.TIMER = "TIMER", d.HIGHLIGHTS = "HIGHLIGHTS" }, 900489: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMessagesFromGuildFeedFetch: function() { return a }, getThreadsFromGuildFeedFetch: function() { return o } }), n("47120"), n("536091"), n("390547"), n("653041"); var i = n("536402"), r = n("823379"); function s(e) { let t = e.children.map(e => s(e)); return [e.messages.map(e => e.message), ...t].flat() } function a(e) { return e.results.items.flatMap(e => { switch (e.type) { case i.GuildFeedItemTypes.MESSAGE: case i.GuildFeedItemTypes.FORUM_POST: return [e.message]; case i.GuildFeedItemTypes.MESSAGE_BUNDLE: return e.messages.map(e => e.message); case i.GuildFeedItemTypes.CONVERSATION: return s(e.root); default: (0, r.assertNever)(e) } }).filter(r.isNotNullish) } function o(e) { return e.results.items.flatMap(e => { let t = []; switch (e.type) { case i.GuildFeedItemTypes.MESSAGE: t.push(e.message.thread); break; case i.GuildFeedItemTypes.FORUM_POST: t.push(e.message.thread, e.thread); break; case i.GuildFeedItemTypes.MESSAGE_BUNDLE: t.push(...e.messages.map(e => e.message.thread)); break; case i.GuildFeedItemTypes.CONVERSATION: t.push(...s(e.root).map(e => e.thread)); break; default: (0, r.assertNever)(e) } return t }).filter(r.isNotNullish) } }, 757235: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S }, getGuildFeedSeenManagerId: function() { return f } }), n("47120"), n("653041"); var i = n("544891"), r = n("570140"), s = n("346479"), a = n("306680"), o = n("480739"), l = n("626135"), u = n("823379"), d = n("709054"), _ = n("414360"), c = n("642101"), E = n("330249"), I = n("981631"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function f(e) { return "".concat(o.AnalyticsFeedTypes.GUILD_HOME, "_").concat(e) } class S extends o.AnalyticsFeedItemSeenManager { constructor({ loadId: e, homeSessionId: t, guildId: n, windowId: o, isPaused: S }) { super({ windowId: o, isPaused: S, id: f(n) }), T(this, "guildId", void 0), T(this, "loadId", void 0), T(this, "homeSessionId", void 0), T(this, "lastFlushTimeMillis", void 0), T(this, "pendingReadAcks", void 0), T(this, "feedItemSnapshots", void 0), T(this, "onInitialize", () => { r.default.subscribe("GUILD_FEED_ITEM_READ_ACK", this.handleReadAck) }), T(this, "onTerminate", () => { r.default.unsubscribe("GUILD_FEED_ITEM_READ_ACK", this.handleReadAck) }), T(this, "onFeedItemSeen", (e, t) => { t && (this.pendingReadAcks[e] = setTimeout(() => { this.ackItemAsRead(e) }, 3e3), this.feedItemSnapshots[e] = c.default.getItem(this.guildId, e)) }), T(this, "onFeedItemUnseen", (e, t) => { e in this.pendingReadAcks && (clearTimeout(this.pendingReadAcks[e]), delete this.pendingReadAcks[e]) }), T(this, "createFlushSeenItemsFunction", e => { let t = this.guildId, n = this.loadId, r = this.trackedFeedItems, s = this.homeSessionId, a = this.feedItemSnapshots; if (null == n || null == s) return; let o = { guildId: t, loadId: n, trackedFeedItems: r, feedItemSnapshots: a, isForcedFlush: null != e, homeSessionId: s }; return () => (function(e) { let { guildId: t, loadId: n, homeSessionId: r, trackedFeedItems: s, feedItemSnapshots: a, isForcedFlush: o } = e, d = {}; for (let e of Object.keys(s)) { let t = s[e].computeSeenTimeDestructive(o); t > 0 && (d[e] = { additionalSeenTimeMillis: t }) } if (0 === Object.keys(d).length) return Promise.resolve(); let _ = [], c = [], T = []; for (let e of Object.keys(d)) _.push(e), c.push(d[e].additionalSeenTimeMillis), d[e].additionalSeenTimeMillis >= 1e3 && T.push(e); l.default.track(I.AnalyticEvents.FEED_ITEM_SEEN_BATCH, { guild_id: t, load_id: n, feed_item_ids: _, additional_seen_time_millis: c, home_session_id: r }); let f = T.map(e => a[e]).filter(u.isNotNullish).map(E.default).map(e => e.id); return 0 === f.length ? Promise.resolve() : i.HTTP.post({ url: I.Endpoints.GUILD_FEED_MARK_SEEN(t), body: { item_ids: f } }) })(o) }), T(this, "ackItemAsRead", e => { delete this.pendingReadAcks[e], !_.default.isItemSeen(this.guildId, e) && r.default.dispatch({ type: "GUILD_FEED_ITEM_READ_ACK", guildId: this.guildId, itemId: e }) }), T(this, "handleReadAck", async e => { let { guildId: t, itemId: n } = e; if (this.guildId !== t) return; let r = c.default.getItem(t, n); if (null == r || !r.unreadMention || r.seen) return; let o = (0, E.default)(r).channel_id; await s.default.unarchiveThreadIfNecessary(o); let l = a.default.getMentionCount(o), u = a.default.ackMessageId(o); if (null == u) return; let _ = 0; for (let e of (0, E.getAllMessagesFromFeedItem)(r)) e.mentioned && d.default.compare(e.id, u) > 0 && (_ += 1); 0 !== _ && i.HTTP.post({ url: I.Endpoints.MESSAGE_ACK(o, u), body: { manual: !0, mention_count: l - _ } }) }), this.guildId = n, this.loadId = e, this.homeSessionId = t, this.pendingReadAcks = {}, this.feedItemSnapshots = {}, this.lastFlushTimeMillis = Date.now() } } }, 414360: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"); let u = {}; class d extends(i = o.default.Store) { isItemSeen(e, t) { let n = u[e]; return null != n && n.has(t) } } a = "GuildFeedSeenStore", (s = "displayName") in(r = d) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new d(l.default, { GUILD_FEED_ITEM_READ_ACK: function(e) { let { guildId: t, itemId: n } = e; null == u[t] && (u[t] = new Set), u[t].add(n) } }) }, 642101: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GUILD_FEED_FETCH_LIMIT: function() { return p }, LoadingStatus: function() { return i } }), n("653041"), n("47120"); var i, r, s, a, o, l, u = n("442837"), d = n("759174"), _ = n("570140"), c = n("786761"), E = n("995774"), I = n("314897"), T = n("709054"), f = n("971930"), S = n("330249"), h = n("853147"), A = n("313531"), m = n("369701"), N = n("176505"); let p = 10; (s = i || (i = {}))[s.LOADING_FRESH_FEED = 0] = "LOADING_FRESH_FEED", s[s.LOADING_PAGE = 1] = "LOADING_PAGE", s[s.NONE = 2] = "NONE"; let O = { loading: 2, error: null }, C = { offset: null, hasMoreItems: null }, R = {}, g = {}, L = {}, v = {}, D = {}, M = {}, y = {}, P = {}; function U(e) { let t = P[e]; return null == t && (t = new d.SecondaryIndexMap(G, b), P[e] = t), t } function b(e) { let { featured: t, sortIndex: n } = e; return "".concat(t ? "\0" : "\x01").concat(n.toString().padStart(5, "0")) } function G(e) { let { seen: t, highlighted: n } = e, i = [m.GuildFeedSectionTypes.ALL]; return n ? i.push(m.GuildFeedSectionTypes.HIGHLIGHTED) : t ? i.push(m.GuildFeedSectionTypes.READ) : i.push(m.GuildFeedSectionTypes.UNREAD), i } let w = {}, k = {}, B = {}, V = {}; function x(e, t, n) { var i, r; return null === (r = y[e]) || void 0 === r ? void 0 : null === (i = r[t]) || void 0 === i ? void 0 : i[n] } function F(e, t) { var n; return null === (n = M[e]) || void 0 === n ? void 0 : n[t] } function H(e) { let t = (0, S.default)(e); return F(t.channel_id, t.id) } function Y(e, t, n) { if (null == e || null == t) return !1; let i = F(e, t); if (null == i) return !1; let r = x(i, e, t); if (null == r) return !1; let s = n(r); return y[i][e][t] = s, !0 } function j(e, t) { (0, S.getAllMessagesFromFeedItem)(t).forEach(t => W(e, t)) } function W(e, t) { var n, i; (null === (n = y[e]) || void 0 === n ? void 0 : n[t.channel_id]) == null && (y[e] = null !== (i = y[e]) && void 0 !== i ? i : {}, y[e][t.channel_id] = {}), y[e][t.channel_id][t.id] = t, null == M[t.channel_id] && (M[t.channel_id] = {}), M[t.channel_id][t.id] = e } function K(e, t) { for (let n of U(e).values(m.GuildFeedSectionTypes.ALL)) if ((0, S.getAllMessageIdsFromFeedItem)(n).has(t)) return n } function z(e, t) { var n, i, r; let s = F(e, t); return null != s && (null === (i = y[s]) || void 0 === i || null === (n = i[e]) || void 0 === n || delete n[t], null === (r = M[e]) || void 0 === r || delete r[t], ! function(e, t) { let n = K(e, t); if (null == n) return; let i = (0, A.default)(n), r = U(e); !(Array.from((0, S.getAllMessagesFromFeedItem)(n)).filter(t => x(e, t.channel_id, t.id)).length > 0) && r.delete(i) }(s, t), !0) } function Z(e) { let { type: t, channelId: n, messageId: i, userId: r, emoji: s } = e; if (!(0, E.shouldApplyReaction)(e)) return !1; let a = I.default.getId() === r; return Y(n, i, n => { let { reactionType: i } = e; return "MESSAGE_REACTION_ADD" === t ? n.addReaction(s, a, e.colors, i) : n.removeReaction(s, a, i) }) } function X(e) { let { channel: t } = e; return Q(t) } function Q(e) { var t; let n = e.guild_id; if (null == n) return !1; delete M[e.id], null === (t = y[n]) || void 0 === t || delete t[e.id] } class q extends(r = u.default.Store) { getLastFetchedMillis(e) { return R[e] } getFeedItemsForGuild(e) { return U(e).values() } getFeedItemSection(e, t) { return U(e).values(t) } getItem(e, t) { return U(e).get(t) } getItemForMessageId(e, t) { return K(e, t) } getMessageItem(e, t) { return this.getItem(e, (0, A.GUILD_FEED_MESSAGE_ITEM_ID_TEMPLATE)(t)) } getLoadId(e) { var t; return null === (t = D[e]) || void 0 === t ? void 0 : t.load_id } getCachedMessage(e, t, n) { return x(e, t, n) } getFetchStatus(e) { var t; return null !== (t = g[e]) && void 0 !== t ? t : O } getFeaturedItemsFetchStatus(e) { var t; return null !== (t = v[e]) && void 0 !== t ? t : O } getPaginationStatus(e) { var t; return null !== (t = L[e]) && void 0 !== t ? t : C } getIsItemHiding(e, t) { var n; return !!(null === (n = w[e]) || void 0 === n ? void 0 : n.has(t)) } getIsItemHidden(e, t) { var n; return !!(null === (n = k[e]) || void 0 === n ? void 0 : n.has(t)) } getIsItemFeatured(e) { var t; let n = (0, A.getGuildFeedItemIdFromFeatureableItem)(e), { guildId: i } = e; return !!(null === (t = B[i]) || void 0 === t ? void 0 : t.has(n)) } getFeaturedItems(e) { var t; return Object.values(null !== (t = V[e]) && void 0 !== t ? t : []) } getFeaturedItemByMessageId(e, t) { var n; return Object.values(null !== (n = V[e]) && void 0 !== n ? n : []).find(e => "message" in e && e.message.id === t) } } l = "GuildFeedStore", (o = "displayName") in(a = q) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new q(_.default, { GUILD_FEED_FETCH_FRESH_START: function(e) { let { guildId: t } = e; g[t] = { loading: 0, error: null }, delete P[t], delete D[t], delete L[t], w[t] = new Set, k[t] = new Set, B[t] = new Set, y[t] = {} }, GUILD_FEED_FETCH_PAGE_START: function(e) { let { guildId: t } = e; g[t] = { loading: 1, error: null } }, GUILD_FEED_FETCH_SUCCESS: function(e) { var t, n, i, r, s; let { guildId: a, data: o } = e; if (R[a] = Date.now(), g[a] = { loading: 2, error: null }, a in D && D[a].load_id !== o.load_id) return; let l = null !== (r = null === (n = D[a]) || void 0 === n ? void 0 : null === (t = n.results) || void 0 === t ? void 0 : t.items) && void 0 !== r ? r : []; D[a] = { load_id: o.load_id, results: { items: l.concat(o.results.items) } }; let u = U(a), d = u.values().length, _ = d; for (let e of o.results.items) { let t = (0, f.createGuildFeedItemFromServer)(e, _); if (null != t) _ += 1, null == u.get(t.id) && (t.featured && B[a].add(t.id), j(a, t), u.set(t.id, t)) } let c = null !== (s = null === (i = L[a]) || void 0 === i ? void 0 : i.offset) && void 0 !== s ? s : 0; L[a] = { offset: c + p, hasMoreItems: d !== u.values().length } }, GUILD_FEED_FETCH_FAILURE: function(e) { let { guildId: t, error: n } = e; g[t] = { loading: 2, error: n } }, GUILD_FEED_FEATURED_ITEMS_FETCH_SUCCESS: function(e) { let { guildId: t, data: n } = e; v[t] = { loading: 2, error: null }; let i = {}; for (let [e, r] of n.results.entries()) { let n = (0, f.createGuildFeedItemFromServer)(r, e); null != n && (0, f.isGuildFeedFeaturedItem)(n) && (n.featured && B[t].add(n.id), j(t, n), i[n.id] = n) } V[t] = i }, GUILD_FEED_FEATURED_ITEMS_FETCH_FAILURE: function(e) { let { guildId: t, error: n } = e; v[t] = { loading: 2, error: n } }, GUILD_FEED_ITEM_REMOVE: function(e) { let { item: t } = e; (0, S.getAllMessagesFromFeedItem)(t).forEach(e => z(e.channel_id, e.id)) }, GUILD_FEED_ITEM_HIDE: function(e) { let { item: t } = e, n = (0, A.default)(t), i = H(t); null != i && (!(i in w) && (w[i] = new Set), w[i].add(n)) }, GUILD_FEED_ITEM_UNHIDE: function(e) { let { item: t } = e, n = (0, A.default)(t), i = H(t); null != i && w[i].delete(n) }, GUILD_FEED_FEATURE_ITEM: function(e) { var t, n, i; let { featureableItem: r, options: s } = e, { guildId: a } = r, o = (0, A.getGuildFeedItemIdFromFeatureableItem)(r); if (!(a in B) && (B[a] = new Set), B[a].add(o), !s.hoist) return; let l = U(a), u = null !== (i = l.get(o)) && void 0 !== i ? i : (0, h.createFakeGuildFeedItem)(r); null != u && (null != u.message && (null === (n = y[a]) || void 0 === n ? void 0 : null === (t = n[u.message.channel_id]) || void 0 === t ? void 0 : t[u.message.id]) == null && W(a, u.message), l.delete(u.id), u.featured = !0, u.seen = !1, l.set(u.id, u)) }, GUILD_FEED_UNFEATURE_ITEM: function(e) { var t, n, i, r; let { featureableItem: s } = e, { guildId: a } = s, o = (0, A.getGuildFeedItemIdFromFeatureableItem)(s); t = a, n = o, null === (i = B[t]) || void 0 === i || i.delete(n), null === (r = V[t]) || void 0 === r || delete r[n] }, CHANNEL_SELECT: function() { for (let e of T.default.keys(w)) null == k[e] && (k[e] = new Set), k[e] = new Set([...Array.from(k[e]), ...Array.from(w[e])]), delete w[e] }, CHANNEL_DELETE: X, THREAD_DELETE: X, GUILD_DELETE: function(e) { var t; let { guild: n } = e; if (null == R[n.id]) return !1; for (let e in delete R[n.id], delete D[n.id], null !== (t = y[n.id]) && void 0 !== t ? t : {}) delete M[e]; delete y[n.id], delete P[n.id] }, CHANNEL_UPDATES: function(e) { let { channels: t } = e; for (let e of t) if (null == e ? void 0 : e.hasFlag(N.ChannelFlags.GUILD_FEED_REMOVED)) return Q(e) }, LOGOUT: function() { R = {}, D = {}, M = {}, y = {}, P = {}, w = {}, k = {}, B = {}, V = {} }, MESSAGE_UPDATE: function(e) { let { message: t } = e; return Y(t.channel_id, t.id, e => (0, c.updateMessageRecord)(e, t)) }, MESSAGE_DELETE: function(e) { let { id: t, channelId: n } = e; return z(n, t) }, MESSAGE_DELETE_BULK: function(e) { let { ids: t, channelId: n } = e, i = !1; for (let e of t) i = z(n, e) || i; return i }, MESSAGE_REACTION_ADD: Z, MESSAGE_REACTION_ADD_MANY: function(e) { let { channelId: t, messageId: n, reactions: i } = e, r = I.default.getId(); return Y(t, n, e => e.addReactionBatch(i, r)) }, MESSAGE_REACTION_REMOVE: Z, MESSAGE_REACTION_REMOVE_ALL: function(e) { let { channelId: t, messageId: n } = e; return Y(t, n, e => e.set("reactions", [])) }, MESSAGE_REACTION_REMOVE_EMOJI: function(e) { let { channelId: t, messageId: n, emoji: i } = e; return Y(t, n, e => e.removeReactionsForEmoji(i)) } }) }, 971930: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FEATURE_EXPIRES_SECONDS: function() { return I }, createFeatureItemsTimeLabel: function() { return N }, createGuildFeedItemFromServer: function() { return h }, getChannelIdForItem: function() { return C }, getFeatureItemsTimes: function() { return p }, getSidebarMessageId: function() { return O }, isChannelAvailableInGuildFeed: function() { return A }, isGuildFeedFeaturedItem: function() { return S }, isMessageAvailableInGuildFeed: function() { return m } }); var i = n("392711"), r = n.n(i), s = n("536402"), a = n("275726"), o = n("786761"), l = n("131704"), u = n("823379"), d = n("709054"), _ = n("313531"), c = n("176505"), E = n("689938"); let I = { ONE_DAY: 86400, THREE_DAYS: 259200, SEVEN_DAYS: 604800 }; function T(e) { return { entityId: e.entity_id, entityType: e.entity_type, guildId: e.guild_id, details: { actorUserId: e.details.actor_user_id, expiresAt: new Date(e.details.expires_at) } } } function f(e) { return null != e.featured_item || !1 } function S(e) { return null != e.featuredItem || !1 } function h(e, t) { var n, i, a, u, d, c, E; switch (e.type) { case s.GuildFeedItemTypes.FORUM_POST: { let r = (0, o.createMessageRecord)(e.message), a = (0, l.createChannelRecordFromServer)(e.thread), u = { type: s.GuildFeedItemTypes.FORUM_POST, id: (0, _.default)(e), sortIndex: t, message: r, thread: a, featured: null !== (n = e.featured) && void 0 !== n && n, highlighted: null !== (i = e.highlighted) && void 0 !== i && i, seen: e.seen, unreadMention: !1 }; return f(e) && (u = { ...u, featuredItem: T(e.featured_item) }), u } case s.GuildFeedItemTypes.MESSAGE: let I = (0, o.createMessageRecord)(e.message), S = r().map(e.reference_messages, e => (0, o.createMessageRecord)(e)), h = { type: s.GuildFeedItemTypes.MESSAGE, id: (0, _.default)(e), sortIndex: t, message: I, referenceMessages: S, featured: null !== (a = e.featured) && void 0 !== a && a, highlighted: null !== (u = e.highlighted) && void 0 !== u && u, unreadMention: null !== (d = e.unread_mention) && void 0 !== d && d, seen: e.seen }; return f(e) && (h = { ...h, featuredItem: T(e.featured_item) }), h; case s.GuildFeedItemTypes.MESSAGE_BUNDLE: let A = e.messages.map(e => ({ message: (0, o.createMessageRecord)(e.message), referenceMessages: e.reference_messages.map(e => (0, o.createMessageRecord)(e)) })); return { type: s.GuildFeedItemTypes.MESSAGE_BUNDLE, id: e.id, sortIndex: t, messages: A, featured: !1, highlighted: !1, unreadMention: null !== (c = e.unread_mention) && void 0 !== c && c, seen: e.seen }; case s.GuildFeedItemTypes.CONVERSATION: let m = function e(t) { let n = t.messages.map(e => (0, o.createMessageRecord)(e.message)); return { id: t.id, type: t.type, messages: n, children: t.children.map(t => e(t)) } }(e.root); return { type: s.GuildFeedItemTypes.CONVERSATION, id: e.id, sortIndex: t, root: m, featured: !1, highlighted: !1, unreadMention: null !== (E = e.unread_mention) && void 0 !== E && E, seen: e.seen }; default: return null } } function A(e) { return !(e.hasFlag(c.ChannelFlags.GUILD_FEED_REMOVED) || e.isNSFW()) && !0 } function m(e) { return !!a.MessageTypesSets.AVAILABLE_IN_GUILD_FEED.has(e.type) || !1 } let N = e => E.default.Messages.GUILD_FEED_FEATURE_ITEM_MENU_ITEM_TEXT.format({ timePeriod: e }), p = () => [{ value: I.ONE_DAY, timePeriod: E.default.Messages.GUILD_FEED_FEATURE_ITEM_24_HOURS }, { value: I.THREE_DAYS, timePeriod: E.default.Messages.GUILD_FEED_FEATURE_ITEM_THREE_DAYS }, { value: I.SEVEN_DAYS, timePeriod: E.default.Messages.GUILD_FEED_FEATURE_ITEM_SEVEN_DAYS }], O = (e, t) => null != t && t.isThread() ? d.default.castChannelIdAsMessageId(t.id) : null != e && "details" in e && null != e.details && "initialMessageId" in e.details ? e.details.initialMessageId : null; function C(e) { switch (e.type) { case s.GuildFeedItemTypes.MESSAGE: case s.GuildFeedItemTypes.FORUM_POST: return e.message.channel_id; case s.GuildFeedItemTypes.MESSAGE_BUNDLE: return e.messages[0].message.channel_id; case s.GuildFeedItemTypes.CONVERSATION: return e.root.messages[0].channel_id; default: (0, u.assertNever)(e) } } }, 330249: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s }, getAllMessageIdsFromFeedItem: function() { return o }, getAllMessagesFromFeedItem: function() { return a } }), n("47120"), n("536091"); var i = n("536402"), r = n("823379"); function s(e) { switch (e.type) { case i.GuildFeedItemTypes.MESSAGE: case i.GuildFeedItemTypes.FORUM_POST: return e.message; case i.GuildFeedItemTypes.MESSAGE_BUNDLE: return e.messages[e.messages.length - 1].message; case i.GuildFeedItemTypes.CONVERSATION: return e.root.messages[e.root.messages.length - 1]; default: (0, r.assertNever)(e) } } function a(e) { switch (e.type) { case i.GuildFeedItemTypes.MESSAGE: case i.GuildFeedItemTypes.FORUM_POST: return new Set([e.message]); case i.GuildFeedItemTypes.MESSAGE_BUNDLE: return new Set(e.messages.map(e => e.message)); case i.GuildFeedItemTypes.CONVERSATION: return new Set(function e(t) { let n = t.children.map(t => e(t)); return [t.messages, ...n].flat() }(e.root)); default: (0, r.assertNever)(e) } } function o(e) { return new Set(Array.from(a(e)).map(e => e.id)) } }, 853147: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createFakeGuildFeedItem: function() { return l }, default: function() { return o } }); var i = n("536402"), r = n("660189"), s = n("823379"), a = n("313531"); function o(e) { switch (e.entityType) { case i.GuildFeedItemTypes.FORUM_POST: return { entityId: e.entity.id, details: { parent_channel_id: e.entity.parent_id }, entityType: e.entityType, guildId: e.guildId }; case i.GuildFeedItemTypes.MESSAGE: return { entityId: e.entity.id, details: { channel_id: e.entity.channel_id }, entityType: e.entityType, guildId: e.guildId }; default: (0, s.assertNever)(e) } } function l(e) { switch (e.entityType) { case i.GuildFeedItemTypes.FORUM_POST: let t = e.entity.id, { firstMessage: n } = r.default.getMessage(t); if (null == n) return null; return { type: i.GuildFeedItemTypes.FORUM_POST, id: (0, a.getGuildFeedItemIdFromFeatureableItem)(e), sortIndex: 0, message: n, thread: e.entity, featured: !0, seen: !1, highlighted: !1, unreadMention: !1 }; case i.GuildFeedItemTypes.MESSAGE: return { type: i.GuildFeedItemTypes.MESSAGE, id: (0, a.getGuildFeedItemIdFromFeatureableItem)(e), sortIndex: 0, message: e.entity, referenceMessages: [], featured: !0, seen: !1, highlighted: !1, unreadMention: !1 } } } }, 313531: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GUILD_FEED_MESSAGE_ITEM_ID_TEMPLATE: function() { return o }, default: function() { return l }, getFeedItemTypeFromId: function() { return d }, getGuildFeedItemIdFromFeatureableItem: function() { return u } }); var i = n("536402"), r = n("823379"), s = n("709054"); let a = e => "".concat(i.GuildFeedItemTypes.FORUM_POST, "/").concat(e), o = e => "".concat(i.GuildFeedItemTypes.MESSAGE, "/").concat(e); function l(e) { switch (e.type) { case i.GuildFeedItemTypes.FORUM_POST: return a(s.default.castMessageIdAsChannelId(e.message.id)); case i.GuildFeedItemTypes.MESSAGE: return o(e.message.id); case i.GuildFeedItemTypes.MESSAGE_BUNDLE: case i.GuildFeedItemTypes.CONVERSATION: return e.id; default: (0, r.assertNever)(e) } } function u(e) { switch (e.entityType) { case i.GuildFeedItemTypes.FORUM_POST: return a(e.entity.id); case i.GuildFeedItemTypes.MESSAGE: return o(e.entity.id); default: (0, r.assertNever)(e) } } function d(e) { return e.split("/")[0] } }, 190159: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l }, shouldFetchGuildFeed: function() { return o } }); var i = n("470079"), r = n("442837"), s = n("276438"), a = n("642101"); function o(e, t) { let n = a.default.getLastFetchedMillis(e); if (!t && null != n && Date.now() - n < 72e5) return !1; let { loading: i } = a.default.getFetchStatus(e); return i === a.LoadingStatus.NONE && !0 } function l(e) { let { guildId: t, highlightedItemData: n } = e, { loading: l, error: u } = (0, r.useStateFromStores)([a.default], () => a.default.getFetchStatus(t), [t]), d = i.useCallback(e => { let { force: i, flushSeenItems: r } = e; async function a() { try { await (0, s.fetchGuildFeed)({ guildId: t, flushSeenItems: r, refresh: !0, highlightedItemData: n }) } catch (e) { console.error(e) } } o(t, null != i && i) && a() }, [t, n]), _ = i.useCallback(() => { o(t, !0) && e(); async function e() { try { await (0, s.fetchGuildFeed)({ guildId: t, refresh: !1 }) } catch (e) { console.error(e) } } }, [t]); return i.useEffect(() => { d({ force: null != n }) }, [d, n]), { fetchFresh: d, fetchPage: _, loading: l, error: u } } }, 79712: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", ...a } = e; return (0, i.jsx)("svg", { ...(0, r.default)(a), width: t, height: n, viewBox: "0 0 4 4", children: (0, i.jsx)("circle", { cx: "2", cy: "2", r: "2", fill: s }) }) } }, 580079: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_STORED_MESSAGES: function() { return I } }), n("653041"), n("47120"), n("724458"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("592125"); n("914010"); var c = n("709054"), E = n("176505"); let I = 26, T = {}, f = {}, S = {}, h = {}; function A(e) { let t = f[e]; if (null == t) return; let n = c.default.fromTimestamp(Date.now() - 9e5), i = l().findIndex(t, e => c.default.compare(e.id, n) > 0); if (-1 === i) f[e] = []; else { let n = Math.max(i, t.length - I); f[e] = l().slice(t, n) } S[e] = Date.now() } function m(e, t, n, i) { T[e].add(t); let r = S[t]; (null == r || r + 3e5 > Date.now()) && A(t), null == f[t] && (f[t] = []), f[t].push({ id: n, userId: i }) } function N(e) { let { channel: t } = e; delete f[t.id], delete S[t.id] } class p extends(i = u.default.Store) { getActiveChannelsFetchStatus(e) { return h[e] } getActiveChannelIds(e) { return T[e] } getChannelMessageData(e) { return f[e] } shouldFetch(e) { var t; return null == T[e] && !(null === (t = h[e]) || void 0 === t ? void 0 : t.loading) } } a = "ActiveChannelsStore", (s = "displayName") in(r = p) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new p(d.default, { CHANNEL_SELECT: function(e) { let { channelId: t, guildId: n } = e; if (!(0, E.isGuildHomeChannel)(t) || null == n) return !1; let i = T[n]; if (null == i) return !1; i.forEach(e => { var t; A(e), (null === (t = f[e]) || void 0 === t ? void 0 : t.length) === 0 && delete f[e] }); let r = l().chain(Array.from(i)).filter(e => e in f).sortBy(e => { var t, n; return -(null !== (n = null === (t = f[e]) || void 0 === t ? void 0 : t.length) && void 0 !== n ? n : 0) }).value(); T[n] = new Set(r) }, MESSAGE_CREATE: function(e) { var t; let { channelId: n, message: i, optimistic: r, isPushNotification: s } = e; if (r || s) return !1; let a = _.default.getChannel(n); if (null == a) return !1; let o = a.guild_id; if (null == o || null == T[o]) return !1; m(o, n, i.id, null === (t = i.author) || void 0 === t ? void 0 : t.id) }, GUILD_DELETE: function(e) { let { guild: t } = e; delete T[t.id] }, CHANNEL_DELETE: N, THREAD_DELETE: N, ACTIVE_CHANNELS_FETCH_START: function(e) { let { guildId: t } = e; h[t] = { loading: !0, error: null, fetchedAt: Date.now() } }, ACTIVE_CHANNELS_FETCH_SUCCESS: function(e) { let { guildId: t, channels: n } = e; h[t] = { loading: !1, error: null, fetchedAt: Date.now() }, T[t] = new Set, n.forEach(e => { let { channel_id: n, messages: i } = e; i.forEach(e => { m(t, n, e.message_id, e.user_id) }) }) }, ACTIVE_CHANNELS_FETCH_FAILURE: function(e) { let { guildId: t, error: n } = e; h[t] = { loading: !1, error: n, fetchedAt: null } }, CONNECTION_OPEN: function() {} }) }, 859802: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildFeedRenderSelectorExperiment: function() { return I }, GuildHomeBadgeExperiment: function() { return T }, GuildHomeDeprecationExperiment: function() { return S }, GuildHomeFeedbackExperiment: function() { return f }, canSeeGuildHome: function() { return E }, useGuildHomeExperiment: function() { return c } }); var i = n("442837"), r = n("430198"), s = n("818083"), a = n("57132"), o = n("781157"), l = n("984933"), u = n("430824"), d = n("981631"); function _(e, t, n) { return t.getChannels(e)[l.GUILD_SELECTABLE_CHANNELS_KEY].filter(t => { let { channel: i } = t; return !n.isChannelGated(e, i.id) }).length > 5 } function c(e) { arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; let t = null == e ? void 0 : e.hasFeature(d.GuildFeatures.GUILD_HOME_DEPRECATION_OVERRIDE), n = (0, i.useStateFromStores)([l.default, r.default], () => null != e && t && _(e.id, l.default, r.default)); return !__OVERLAY__ && !!n && null != e && !0 === t } function E(e) { if (__OVERLAY__ || e === d.ME || e === d.FAVORITES || (0, a.isInMainTabsExperiment)() && !(0, o.isOnNewPanels)()) return !1; let t = u.default.getGuild(e); return !!(null != t && _(e, l.default, r.default)) && t.hasFeature(d.GuildFeatures.GUILD_HOME_DEPRECATION_OVERRIDE) } let I = (0, s.createExperiment)({ kind: "user", id: "2022-01_home_feed_toggle", label: "Show Guild Feed Sorting Selector", defaultConfig: { showSelector: !1 }, treatments: [{ id: 1, label: "Yes Selector", config: { showSelector: !0 } }] }), T = (0, s.createExperiment)({ kind: "user", id: "2022-08_home_badge", label: "Show badge on home channel", defaultConfig: { showBadge: !1 }, treatments: [{ id: 1, label: "show badge", config: { showBadge: !0 } }] }); (0, s.createExperiment)({ kind: "user", id: "2022-08_home_drawer_autoclose", label: "Auto close home drawer", defaultConfig: { autoCloseDrawer: !1, animation: !1, delay: null }, treatments: [{ id: 1, label: "normal animation", config: { autoCloseDrawer: !0, animation: !0, delay: null } }, { id: 2, label: "no animate", config: { autoCloseDrawer: !0, animation: !1, delay: null } }, { id: 3, label: "150 delayed animation", config: { autoCloseDrawer: !0, animation: !0, delay: 150 } }, { id: 4, label: "250 delayed animation", config: { autoCloseDrawer: !0, animation: !0, delay: 250 } }, { id: 5, label: "500 delayed animation", config: { autoCloseDrawer: !0, animation: !0, delay: 500 } }] }), (0, s.createExperiment)({ kind: "user", id: "2022-09_welcome_header", label: "Show welcome header for home", defaultConfig: { showWelcomeHeader: !1 }, treatments: [{ id: 1, label: "show welcome header", config: { showWelcomeHeader: !0 } }] }); let f = (0, s.createExperiment)({ kind: "user", id: "2022-12_home_feedback_ux", label: "Show post feedback for home", defaultConfig: { showFeedback: !1 }, treatments: [{ id: 100, label: "show feedback", config: { showFeedback: !0 } }] }), S = (0, s.createExperiment)({ kind: "guild", id: "2023-03_home_deprecation", label: "Home Deprecation", defaultConfig: { showDeprecationNotice: !1 }, treatments: [{ id: 1, label: "Show notice", config: { showDeprecationNotice: !0 } }] }) }, 657513: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("465029"), s = n("276438"), a = n("190159"), o = n("580079"), l = n("859802"), u = n("176505"); class d extends i.default { handleChannelPreload(e) { let { guildId: t, channelId: n } = e; if (null == t || n !== u.StaticChannelRoute.GUILD_HOME || !(0, l.canSeeGuildHome)(t)) return !1; (0, a.shouldFetchGuildFeed)(t, !1) && (0, s.fetchGuildFeed)({ guildId: t, refresh: !0 }), o.default.shouldFetch(t) && (0, r.fetchActiveChannels)(t) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_PRELOAD: this.handleChannelPreload }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new d }, 601410: function(e, t, n) { "use strict"; let i, r, s, a; n.r(t); var o, l, u, d, _ = n("153832"), c = n("442837"), E = n("570140"), I = n("176505"), T = n("369701"); let f = {}; function S(e) { return { guildId: e, sessionId: (0, _.v4)() } } function h(e) { null != s && s.guildId === e ? (r = s, s = void 0) : r = S(e) } class A extends(d = c.default.Store) { getSavedScrollPosition(e) { return f[e] } getHomeSessionId(e) { return null != r && r.guildId === e ? r.sessionId : null != s && s.guildId === e ? s.sessionId : void 0 } getHomeSessionSource(e) { return null != a && a.guildId === e ? a.source : T.GuildHomeLandingSource.ORGANIC } } u = "GuildHomeStore", (l = "displayName") in(o = A) ? Object.defineProperty(o, l, { value: u, enumerable: !0, configurable: !0, writable: !0 }) : o[l] = u, t.default = new A(E.default, { CONNECTION_OPEN: function() { f = {} }, GUILD_FEED_FETCH_FRESH_START: function(e) { let { guildId: t } = e; delete f[t] }, GUILD_HOME_SET_SCROLL_POSITION: function(e) { let { guildId: t, scrollPosition: n } = e; f[t] = n }, CHANNEL_SELECT: function(e) { let { guildId: t, channelId: n } = e; if (null == t || null == n || !(0, I.isStaticChannelRoute)(n) || !(0, I.isGuildHomeChannel)(n)) { i = void 0, r = void 0, s = void 0, a = void 0; return } let o = (0, I.buildGuildStaticChannelId)(n, t); if (i === o || null != r && r.guildId === t) return !1; h(t), i = o, null != a && a.guildId !== t && (a = void 0) }, CHANNEL_PRELOAD: function(e) { let { guildId: t, channelId: n } = e; if (null == t || null == n || !(0, I.isStaticChannelRoute)(n) || !(0, I.isGuildHomeChannel)(n)) { s = void 0; return } if (null != s && s.guildId === t) return !1; s = S(t) }, GUILD_HOME_SET_SOURCE: function(e) { let { source: t, guildId: n } = e; a = { guildId: n, source: t } }, GUILD_HOME_ENSURE_HOME_SESSION: function(e) { let { guildId: t } = e; if (null != r && r.guildId === t) return !1; h(t) }, LOGOUT: function() { r = void 0, s = void 0, a = void 0 } }) }, 18438: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearErrors: function() { return O }, closeGuildIdentitySettings: function() { return d }, initGuildIdentitySettings: function() { return u }, resetAllPending: function() { return p }, resetAndCloseGuildIdentityForm: function() { return _ }, resetPendingMemberChanges: function() { return m }, resetPendingProfileChanges: function() { return N }, saveGuildIdentityChanges: function() { return o }, setCurrentGuild: function() { return l }, setPendingAvatar: function() { return c }, setPendingAvatarDecoration: function() { return E }, setPendingBanner: function() { return T }, setPendingBio: function() { return f }, setPendingNickname: function() { return h }, setPendingProfileEffectId: function() { return I }, setPendingPronouns: function() { return S }, setPendingThemeColors: function() { return A } }), n("411104"); var i = n("544891"), r = n("570140"), s = n("37234"), a = n("981631"); async function o(e, t) { let { nick: n, avatar: s, avatarDecoration: o } = t; if (null == e) throw Error("Need guildId"); r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SUBMIT" }); let l = { nick: n, avatar: s, avatar_decoration_id: null === o ? null : null == o ? void 0 : o.id, avatar_decoration_sku_id: null === o ? null : null == o ? void 0 : o.skuId }; try { let t = await i.HTTP.patch({ url: a.Endpoints.SET_GUILD_MEMBER(e), body: l, oldFormErrors: !0 }); return r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS" }), r.default.dispatch({ type: "GUILD_MEMBER_PROFILE_UPDATE", guildMember: t.body, guildId: e }), t } catch (t) { let e = t.body; (null == e ? void 0 : e.username) != null && (e.nick = e.username, delete e.username), r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE", errors: t.body }) } } function l(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_GUILD", guild: e }) } function u(e, t) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_INIT", guild: e, analyticsLocations: t }) } function d() { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_CLOSE" }), (0, s.popLayer)() } function _() { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM" }) } function c(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR", avatar: e }) } function E(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION", avatarDecoration: e }) } function I(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID", profileEffectId: e }) } function T(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER", banner: e }) } function f(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO", bio: e }) } function S(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS", pronouns: e }) } function h(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME", nickname: e }) } function A(e) { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS", themeColors: e }) } function m() { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES" }) } function N() { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES" }) } function p() { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING" }) } function O() { r.default.dispatch({ type: "GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS" }) } }, 778825: function(e, t, n) { "use strict"; let i, r, s, a, o, l, u, d, _, c, E; n.r(t); var I, T, f, S, h = n("442837"), A = n("570140"), m = n("981631"); let N = m.FormStates.CLOSED, p = {}; function O() { N = m.FormStates.CLOSED, p = {}, _ = null, c = void 0, E = [] } function C() { R(), g(), p = {}, N = m.FormStates.OPEN } function R() { i = void 0, u = void 0, r = void 0 } function g() { a = void 0, o = void 0, l = void 0, d = void 0, s = void 0 } class L extends(S = h.default.Store) { getFormState() { return N } getErrors() { return p } showNotice() { return void 0 !== i || void 0 !== r || void 0 !== s || void 0 !== a || void 0 !== o || void 0 !== l || void 0 !== u || void 0 !== d } getIsSubmitDisabled() { return void 0 !== o && o.length > m.BIO_MAX_LENGTH } getPendingAvatar() { return i } getPendingAvatarDecoration() { return r } getPendingProfileEffectId() { return s } getPendingBanner() { return a } getPendingBio() { return o } getPendingNickname() { return u } getPendingPronouns() { return l } getPendingAccentColor() { return u } getPendingThemeColors() { return d } getAllPending() { return { pendingAvatar: i, pendingAvatarDecoration: r, pendingProfileEffectId: s, pendingBanner: a, pendingBio: o, pendingPronouns: l, pendingNickname: u, pendingThemeColors: d } } getGuild() { return _ } getSource() { return c } getAnalyticsLocations() { return E } } f = "GuildIdentitySettingsStore", (T = "displayName") in(I = L) ? Object.defineProperty(I, T, { value: f, enumerable: !0, configurable: !0, writable: !0 }) : I[T] = f, t.default = new L(A.default, { GUILD_IDENTITY_SETTINGS_INIT: function(e) { _ = e.guild, N = m.FormStates.OPEN, p = {}, c = e.source, E = e.analyticsLocations }, GUILD_IDENTITY_SETTINGS_CLOSE: O, GUILD_IDENTITY_SETTINGS_RESET_AND_CLOSE_FORM: function() { C(), O() }, GUILD_IDENTITY_SETTINGS_SET_GUILD: function(e) { _ = e.guild, p = {} }, GUILD_IDENTITY_SETTINGS_SUBMIT: function() { N = m.FormStates.SUBMITTING, p = {} }, GUILD_IDENTITY_SETTINGS_SUBMIT_FAILURE: function(e) { var t; if (N !== m.FormStates.SUBMITTING) return !1; N = m.FormStates.OPEN, p = null !== (t = e.errors) && void 0 !== t ? t : {} }, USER_PROFILE_UPDATE_FAILURE: function(e) { N = m.FormStates.OPEN, p = e.errors }, GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR: function(e) { let { avatar: t } = e; i = t }, GUILD_IDENTITY_SETTINGS_SET_PENDING_AVATAR_DECORATION: function(e) { let { avatarDecoration: t } = e; r = t }, GUILD_IDENTITY_SETTINGS_SET_PENDING_PROFILE_EFFECT_ID: function(e) { let { profileEffectId: t } = e; s = t }, GUILD_IDENTITY_SETTINGS_SET_PENDING_BANNER: function(e) { let { banner: t } = e; a = t }, GUILD_IDENTITY_SETTINGS_SET_PENDING_BIO: function(e) { let { bio: t } = e; o = t }, GUILD_IDENTITY_SETTINGS_SET_PENDING_PRONOUNS: function(e) { let { pronouns: t } = e; l = t }, GUILD_IDENTITY_SETTINGS_SET_PENDING_NICKNAME: function(e) { let { nickname: t } = e; u = t }, GUILD_IDENTITY_SETTINGS_SET_PENDING_THEME_COLORS: function(e) { let { themeColors: t } = e; d = t }, GUILD_IDENTITY_SETTINGS_RESET_PENDING_MEMBER_CHANGES: R, GUILD_IDENTITY_SETTINGS_RESET_PENDING_PROFILE_CHANGES: g, GUILD_IDENTITY_SETTINGS_RESET_ALL_PENDING: C, GUILD_IDENTITY_SETTINGS_SUBMIT_SUCCESS: C, GUILD_IDENTITY_SETTINGS_CLEAR_ERRORS: function() { p = {} } }) }, 547010: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isLimitedAccessErrorCode: function() { return r } }); var i = n("981631"); function r(e, t) { return 403 === e && null != t && t >= i.AbortCodes.GUILD_LIMITED_ACCESS_DEFAULT && t <= i.AbortCodes.GUILD_LIMITED_ACCESS_MAX } }, 781792: function(e, t, n) { "use strict"; n.r(t), n.d(t, { updateGuildSelfMember: function() { return l } }), n("789020"); var i = n("544891"), r = n("570140"), s = n("962086"), a = n("160404"), o = n("981631"); function l(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (a.default.isFullServerPreview(e)) { (0, s.updateImpersonatedData)(e, { memberOptions: t }); return } return r.default.dispatch({ type: "GUILD_MEMBER_UPDATE_LOCAL", guildId: e, roles: t.roles, flags: t.flags }), i.HTTP.patch({ url: o.Endpoints.SET_GUILD_MEMBER(e), body: t, oldFormErrors: !!n || void 0 }) } }, 372897: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { GuildMemberFlags: function() { return i } }), (r = i || (i = {}))[r.DID_REJOIN = 1] = "DID_REJOIN", r[r.COMPLETED_ONBOARDING = 2] = "COMPLETED_ONBOARDING", r[r.BYPASSES_VERIFICATION = 4] = "BYPASSES_VERIFICATION", r[r.STARTED_ONBOARDING = 8] = "STARTED_ONBOARDING", r[r.IS_GUEST = 16] = "IS_GUEST", r[r.STARTED_HOME_ACTIONS = 32] = "STARTED_HOME_ACTIONS", r[r.COMPLETED_HOME_ACTIONS = 64] = "COMPLETED_HOME_ACTIONS", r[r.AUTOMOD_QUARANTINED_USERNAME_OR_GUILD_NICKNAME = 128] = "AUTOMOD_QUARANTINED_USERNAME_OR_GUILD_NICKNAME", r[r.AUTOMOD_QUARANTINED_BIO = 256] = "AUTOMOD_QUARANTINED_BIO", r[r.DM_SETTINGS_UPSELL_ACKNOWLEDGED = 512] = "DM_SETTINGS_UPSELL_ACKNOWLEDGED", r[r.AUTOMOD_QUARANTINED_CLAN_TAG = 1024] = "AUTOMOD_QUARANTINED_CLAN_TAG" }, 946273: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useNewMemberBadge: function() { return u } }), n("789020"); var i = n("442837"), r = n("271383"), s = n("430824"), a = n("594174"), o = n("630388"), l = n("372897"); let u = (e, t) => { var n, u, d; let _ = (0, i.useStateFromStores)([r.default], () => { var n, i; return (0, o.hasFlag)(null !== (i = null === (n = r.default.getMember(e, t)) || void 0 === n ? void 0 : n.flags) && void 0 !== i ? i : 0, l.GuildMemberFlags.DID_REJOIN) }), c = (0, i.useStateFromStores)([s.default], () => { var t; return null === (t = s.default.getGuild(e)) || void 0 === t ? void 0 : t.isNew() }), E = (0, i.useStateFromStores)([a.default], () => { var e; return null === (e = a.default.getUser(t)) || void 0 === e ? void 0 : e.bot }); return n = e, u = { maxDaysOld: 7 }, d = t, (0, i.useStateFromStores)([], () => (function(e, t, n) { let { maxDaysOld: i, minDaysOld: a = 0 } = t, o = s.default.getGuild(e), l = null == o ? void 0 : o.joinedAt; if (null != n) { let t = r.default.getMember(e, n); l = (null == t ? void 0 : t.joinedAt) == null ? null : new Date(t.joinedAt) } if (null == l) return !1; let u = Date.now() - l.getTime(); return (null == i || u <= 864e5 * i) && u >= 864e5 * a })(n, u, d), [u, n, d]) && !c && !E && !_ } }, 340797: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("490504"), a = n("946273"), o = n("441110"), l = n("689938"), u = n("37433"); function d(e) { let { guild: t, message: n } = e; return (0, a.useNewMemberBadge)(t.id, n.author.id) ? (0, i.jsx)(r.Popout, { animation: r.Popout.Animation.TRANSLATE, align: "center", autoInvert: !0, nudgeAlignIntoViewport: !0, position: "right", renderPopout: e => { let { closePopout: r } = e; return (0, i.jsx)(o.default, { guild: t, message: n, onClose: r }) }, children: e => { let { onClick: t } = e; return (0, i.jsx)(r.Clickable, { onClick: t, tag: "span", children: (0, i.jsx)(r.Tooltip, { text: l.default.Messages.NEW_MEMBER_BADGE_TOOLTIP_TEXT, children: e => (0, i.jsx)("div", { className: u.newMemberBadge, ...e, children: (0, i.jsx)(s.default, { width: 20, height: 20 }) }) }) }) } }) : null } }, 441110: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("367907"), o = n("524444"), l = n("297047"), u = n("592125"), d = n("944486"), _ = n("490504"), c = n("626135"), E = n("981631"), I = n("689938"), T = n("510902"); t.default = function(e) { let { guild: t, message: n, onClose: f } = e, S = u.default.getChannel(d.default.getChannelId(t.id)); return (r.useEffect(() => { c.default.track(E.AnalyticEvents.OPEN_POPOUT, { type: "New Member Badge Popout", guild_id: t.id, channel_id: null == S ? void 0 : S.id }) }, []), null == S) ? null : (0, i.jsx)(o.MessagePopoutContent, { children: (0, i.jsxs)("div", { className: T.popoutContainer, children: [(0, i.jsxs)("div", { className: T.mainContent, children: [(0, i.jsx)("div", { className: T.iconContainer, children: (0, i.jsx)(_.default, { width: 40, height: 40 }) }), (0, i.jsxs)("div", { children: [(0, i.jsx)(s.Heading, { variant: "heading-md/semibold", className: T.header, children: I.default.Messages.NEW_MEMBER_BADGE_TOOLTIP_TEXT }), (0, i.jsx)(s.Text, { variant: "text-sm/normal", children: I.default.Messages.NEW_MEMBER_BADGE_POPOUT_TEXT })] })] }), (0, i.jsx)(s.Button, { size: s.Button.Sizes.SMALL, color: s.Button.Colors.BRAND, className: T.ctaButton, innerClassName: T.ctaButtonContent, fullWidth: !0, onClick: () => { a.default.trackWithMetadata(E.AnalyticEvents.NEW_MEMBER_MENTION_CTA_CLICKED, { target_user_id: n.author.id }), f(), (0, l.mentionUser)(n.author, S.id) }, children: I.default.Messages.MENTION_USER.format({ username: n.author.username }) })] }) }) } }, 189432: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openGuildMemberModViewSidebar: function() { return u } }); var i = n("100527"), r = n("6025"), s = n("897473"), a = n("545408"), o = n("189357"), l = n("50493"); function u(e, t, n) { var u, d, _; let c = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : { modViewPanel: l.ModViewPanel.INFO }; if (!(0, o.canAccessGuildMemberModViewWithExperiment)(e)) return Promise.resolve(); let E = null !== (u = c.modViewPanel) && void 0 !== u ? u : l.ModViewPanel.INFO, I = null !== (d = c.sourceLocation) && void 0 !== d ? d : i.default.MEMBER_SAFETY_PAGE; return (0, a.trackModViewOpened)(e, t, E, I), r.default.openGuildSidebar({ guildId: e, baseChannelId: n, sidebarType: s.GuildSidebarType.GUILD_MEMBER_MOD_VIEW, details: { type: s.SidebarOpenDetailsType.GUILD_MEMBER_MOD_VIEW, userId: t, guildId: e, ...c, modViewPanel: null !== (_ = c.modViewPanel) && void 0 !== _ ? _ : l.ModViewPanel.INFO } }) } }, 545408: function(e, t, n) { "use strict"; n.r(t), n.d(t, { trackModViewOpened: function() { return l } }), n("470079"); var i = n("100527"), r = n("367907"), s = n("626135"), a = n("50493"), o = n("981631"); function l(e, t, n) { let l = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.default.MEMBER_SAFETY_PAGE, u = { guild_id: e, target_user_id: t, subpanel_name: a.ModViewPanelNameMap[n], location: l, ...(0, r.collectGuildAnalyticsMetadata)(e) }; return s.default.track(o.AnalyticEvents.GUILD_MOD_VIEW_OPENED, u) } }, 50493: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ModViewPanel: function() { return i }, ModViewPanelNameMap: function() { return s } }), (r = i || (i = {}))[r.UNKNOWN = 0] = "UNKNOWN", r[r.INFO = 1] = "INFO", r[r.MESSAGE_HISTORY = 2] = "MESSAGE_HISTORY", r[r.PERMISSIONS = 3] = "PERMISSIONS"; let s = { 0: "UNKNOWN", 1: "INFO", 2: "MESSAGE_HISTORY", 3: "PERMISSIONS" } }, 686692: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isInGuildMemberModViewExperiment: function() { return s }, useGuildMemberModViewExperiment: function() { return a } }); var i = n("100527"); let r = (0, n("818083").createExperiment)({ kind: "guild", id: "2023-08_guild_member_mod_view", label: "Guild Member Mod View", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Guild Member Mod View", config: { enabled: !0 } }] }), s = function(e) { let { autoTrackExposure: t = !1, disable: n = !1, location: s = i.default.GUILD_MEMBER_MOD_VIEW } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { enabled: a } = r.getCurrentConfig({ guildId: e, location: s }, { autoTrackExposure: t, disable: n }); return a }, a = function(e) { let { autoTrackExposure: t = !1, disable: n = !1, location: s = i.default.GUILD_MEMBER_MOD_VIEW } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { enabled: a } = r.useExperiment({ guildId: null != e ? e : void 0, location: s }, { autoTrackExposure: t, disable: n }); return a } }, 189357: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canAccessGuildMemberModViewWithExperiment: function() { return _ }, useCanAccessGuildMemberModView: function() { return c } }), n("47120"); var i = n("149765"), r = n("442837"), s = n("430824"), a = n("594174"), o = n("700785"), l = n("686692"), u = n("478743"); let d = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [s.default, a.default]; if (null == e) return !1; let [n, r] = t, l = n.getGuild(e); if (null == l) return !1; let d = r.getCurrentUser(); return i.hasAny(o.computePermissions({ user: d, context: l, checkElevated: !1 }), u.MemberSafetyPagePermissions) }, _ = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 ? arguments[2] : void 0; if (null == e) return !1; let i = d(e), r = (0, l.isInGuildMemberModViewExperiment)(e, { autoTrackExposure: t, disable: !i, location: n }); return i && r }; function c(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 ? arguments[2] : void 0, i = (0, r.useStateFromStores)([s.default, a.default], () => d(e, [s.default, a.default]), [e]), o = (0, l.useGuildMemberModViewExperiment)(e, { autoTrackExposure: t, disable: !i, location: n }); return i && o } }, 693546: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("287734"), a = n("970606"), o = n("131704"), l = n("826581"), u = n("246364"), d = n("937111"), _ = n("981631"); let c = async e => { let t = await i.HTTP.get({ url: _.Endpoints.GUILD_JOIN_REQUEST_BY_ID(e) }), n = (0, d.joinRequestFromServer)(t.body); return r.default.dispatch({ type: "GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS", joinRequest: n }), t }, E = async e => { let { guildId: t, status: n = u.GuildJoinRequestApplicationStatuses.SUBMITTED, before: s, after: a, limit: o = u.MAX_RESULTS_PER_PAGE, force: c = !1 } = e, E = c || !l.default.hasFetched(t); if (!l.default.isFetching() && E) { r.default.dispatch({ type: "GUILD_JOIN_REQUESTS_FETCH_START" }); try { var I; let e = await i.HTTP.get({ url: _.Endpoints.GUILD_JOIN_REQUESTS(t), query: { status: n, limit: o, before: s, after: a } }), l = e.body.total, u = (null !== (I = e.body.guild_join_requests) && void 0 !== I ? I : []).map(d.joinRequestFromServer); return r.default.dispatch({ type: "GUILD_JOIN_REQUESTS_FETCH_SUCCESS", status: n, requests: u, total: l, limit: o, guildId: t }), e } catch (e) { throw r.default.dispatch({ type: "GUILD_JOIN_REQUESTS_FETCH_FAILURE" }), e } } }, I = async e => { try { let t = await i.HTTP.del({ url: _.Endpoints.GUILD_MEMBER_REQUEST_TO_JOIN(e) }); return r.default.dispatch({ type: "USER_GUILD_JOIN_REQUEST_UPDATE", guildId: e, request: null }), t } catch (e) { throw e } }, T = async (e, t) => { try { return await i.HTTP.post({ url: _.Endpoints.GUILD_JOIN_REQUEST_ACK(e, t) }) } catch (e) {} finally { r.default.dispatch({ type: "ACK_APPROVED_GUILD_JOIN_REQUEST", id: t, guildId: e }) } }, f = async function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : u.GuildJoinRequestApplicationStatuses.APPROVED, s = arguments.length > 3 ? arguments[3] : void 0; (0, a.trackClanApplicationAction)({ guildId: e, actionType: n, applicationUserId: t }); let o = await i.HTTP.patch({ url: _.Endpoints.GUILD_JOIN_REQUEST(e, t), body: { action: n, rejection_reason: s } }); r.default.dispatch({ type: "GUILD_JOIN_REQUEST_UPDATE", guildId: e, status: o.body.application_status, request: o.body }) }, S = async (e, t) => { let n = await i.HTTP.patch({ url: _.Endpoints.GUILD_JOIN_REQUESTS(e), body: { action: t } }); return r.default.dispatch({ type: "GUILD_JOIN_REQUESTS_BULK_ACTION", guildId: e, action: t }), n.body }, h = async e => { try { let { body: t } = await i.HTTP.post({ url: _.Endpoints.GUILD_MEMBER_REQUEST_TO_JOIN(e) }); return r.default.dispatch({ type: "USER_GUILD_JOIN_REQUEST_UPDATE", guildId: e, request: t }), t } catch (e) { throw e } }, A = async () => { let e = await i.HTTP.get({ url: _.Endpoints.USER_JOIN_REQUEST_GUILDS }); r.default.dispatch({ type: "USER_JOIN_REQUEST_GUILDS_FETCH", guilds: e.body }) }, m = async function(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = await i.HTTP.post({ url: _.Endpoints.GUILD_JOIN_REQUEST_INTERVIEW(e) }), a = (0, o.createChannelRecordFromServer)(n.body); return r.default.dispatch({ type: "CHANNEL_CREATE", channel: a }), t && s.default.selectPrivateChannel(a.id), a.id }; t.default = { fetchGuildJoinRequest: c, fetchGuildJoinRequests: E, ackUserGuildJoinRequest: T, removeGuildJoinRequest: I, updateGuildJoinRequest: f, actionAllPendingJoinRequests: S, resetGuildJoinRequest: h, fetchRequestToJoinGuilds: A, setSelectedApplicationTab: (e, t) => { r.default.dispatch({ type: "GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB", guildId: e, applicationTab: t }) }, setSelectedSortOrder: (e, t) => { r.default.dispatch({ type: "GUILD_JOIN_REQUESTS_SET_SORT_ORDER", guildId: e, sortOrder: t }) }, setSelectedGuildJoinRequest: (e, t) => { null != t && (0, a.trackClanApplicationViewed)({ guildId: e, applicationStatus: t.applicationStatus, applicationUserId: t.userId }), r.default.dispatch({ type: "GUILD_JOIN_REQUESTS_SET_SELECTED", guildId: e, request: t }) }, createOrEnterJoinRequestInterview: m } }, 826581: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("913527"), l = n.n(o), u = n("442837"), d = n("759174"), _ = n("570140"), c = n("430824"), E = n("594174"), I = n("70956"), T = n("881952"), f = n("246364"), S = n("937111"), h = n("981631"); let A = new Map, m = {}; function N(e) { return m[e] } function p(e, t) { m[e] = t, A.set(e, l()()) } function O(e, t, n) { if (t !== n && null != t) { if (t === f.GuildJoinRequestApplicationStatuses.SUBMITTED) { let t = m[e]; p(e, t + 1) } if (n === f.GuildJoinRequestApplicationStatuses.SUBMITTED) { let t = m[e]; p(e, Math.max(0, t - 1)) } } } let C = !1, R = { GUILD_JOIN_REQUESTS_BY_ID: e => "guild-join-request=".concat(e), GUILD_JOIN_REQUESTS_BY_STATUS: (e, t) => "guild-".concat(e, "-").concat(t) }; function g(e) { let t = []; return t.push(R.GUILD_JOIN_REQUESTS_BY_ID(e.joinRequestId)), t.push(R.GUILD_JOIN_REQUESTS_BY_STATUS(e.guildId, e.applicationStatus)), t } let L = new d.SecondaryIndexMap(g, e => "".concat(e.joinRequestId)), v = new d.SecondaryIndexMap(g, e => "".concat(e.joinRequestId)), D = new d.SecondaryIndexMap(g, e => "".concat(e.actionedAt)); function M(e) { return L.get(e) } function y(e) { w[e.joinRequestId] = e, L.set(e.joinRequestId, e), (0, T.isSubmittedApplicationStatus)(e.applicationStatus) && (D.delete(e.joinRequestId), v.set(e.joinRequestId, e)), (0, T.isActionedApplicationStatus)(e.applicationStatus) && (v.delete(e.joinRequestId), D.set(e.joinRequestId, e)) } function P(e) { var t, n; let { guildId: i, request: r } = e, s = (0, S.joinRequestFromServer)(r), a = E.default.getCurrentUser(); if (null == a || s.userId === a.id) return !1; let o = null === (n = s.joinRequestId, t = L.get(n)) || void 0 === t ? void 0 : t.applicationStatus; return O(i, s.applicationStatus, o), y(s), !0 } let U = {}, b = {}, G = {}, w = {}, k = 10 * I.default.Seconds.MINUTE; class B extends(i = u.default.Store) { getRequest(e) { return w[e] } getRequests(e, t) { let n = R.GUILD_JOIN_REQUESTS_BY_STATUS(e, t); return (0, T.isActionedApplicationStatus)(t) ? D.values(n) : (0, T.isSubmittedApplicationStatus)(t) ? v.values(n) : L.values(n) } getSubmittedGuildJoinRequestTotal(e) { return m[e] } isFetching() { return C } hasFetched(e) { if (!A.has(e)) return !1; let t = A.get(e); return null != t && l()().diff(t, "seconds") < k } getSelectedApplicationTab(e) { var t; let n = c.default.getGuild(e), i = (null == n ? void 0 : n.hasFeature(h.GuildFeatures.CLAN)) ? "REVIEW_APPLICATION" : f.GuildJoinRequestApplicationStatuses.SUBMITTED; return null !== (t = U[e]) && void 0 !== t ? t : i } getSelectedSortOrder(e) { var t; return null !== (t = b[e]) && void 0 !== t ? t : f.GuildJoinRequestSortOrders.TIMESTAMP_DESC } getSelectedGuildJoinRequest(e) { var t; let n = G[e]; return null != n ? (t = n.joinRequestId, L.get(t)) : null } } a = "GuildJoinRequestStoreV2", (s = "displayName") in(r = B) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new B(_.default, { GUILD_JOIN_REQUEST_BY_ID_FETCH_SUCCESS: function(e) { let { joinRequest: t } = e; y(t) }, GUILD_JOIN_REQUESTS_FETCH_SUCCESS: function(e) { let { status: t, requests: n, total: i, guildId: r } = e; C = !1, t === f.GuildJoinRequestApplicationStatuses.SUBMITTED && p(r, i), n.forEach(e => { y(e) }) }, GUILD_JOIN_REQUESTS_FETCH_START: function() { C = !0 }, GUILD_JOIN_REQUESTS_FETCH_FAILURE: function() { C = !1 }, GUILD_JOIN_REQUESTS_BULK_ACTION: function(e) { let { guildId: t, action: n } = e; L.values(R.GUILD_JOIN_REQUESTS_BY_STATUS(t, f.GuildJoinRequestApplicationStatuses.SUBMITTED)).forEach(e => { y({ ...e, applicationStatus: n }) }), p(t, 0) }, GUILD_JOIN_REQUEST_CREATE: P, GUILD_JOIN_REQUEST_UPDATE: P, GUILD_JOIN_REQUEST_DELETE: function(e) { var t, n; let { id: i, guildId: r } = e; let s = (t = i, L.get(t)); if (null != s) { ; O(r, null, s.applicationStatus), n = i, delete w[n], L.delete(n), v.delete(n), D.delete(n) } }, GUILD_JOIN_REQUESTS_SET_APPLICATION_TAB: function(e) { let { guildId: t, applicationTab: n } = e; n !== U[t] && (U[t] = n) }, GUILD_JOIN_REQUESTS_SET_SORT_ORDER: function(e) { var t; let { guildId: n, sortOrder: i } = e; if (i === b[n]) return; b[n] = i; let r = null !== (t = U[n]) && void 0 !== t ? t : f.GuildJoinRequestApplicationStatuses.SUBMITTED; "REVIEW_APPLICATION" !== r && ((0, T.isActionedApplicationStatus)(r) && D.clear(), (0, T.isSubmittedApplicationStatus)(r) && v.clear()) }, GUILD_JOIN_REQUESTS_SET_SELECTED: function(e) { let { guildId: t, request: n } = e; G[t] = n } }) }, 881952: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isActionedAndNotAcked: function() { return o }, isActionedApplicationStatus: function() { return r }, isApprovedAndAcked: function() { return a }, isSubmittedApplicationStatus: function() { return s } }); var i = n("246364"); function r(e) { return e === i.GuildJoinRequestApplicationStatuses.APPROVED || e === i.GuildJoinRequestApplicationStatuses.REJECTED } function s(e) { return e === i.GuildJoinRequestApplicationStatuses.SUBMITTED } function a(e) { return e.applicationStatus === i.GuildJoinRequestApplicationStatuses.APPROVED && null != e.lastSeen } function o(e) { return r(e.applicationStatus) && null == e.lastSeen } }, 863249: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("668781"), a = n("239091"), o = n("881052"), l = n("962086"), u = n("160404"), d = n("264229"), _ = n("271383"), c = n("701190"), E = n("594174"), I = n("626135"), T = n("981631"), f = n("689938"); let S = async (e, t) => { let n = null != t ? t : c.default.getInviteKeyForGuildId(e), s = E.default.getCurrentUser(), a = !_.default.isMember(e, null == s ? void 0 : s.id); try { let t = await i.HTTP.get({ url: T.Endpoints.GUILD_MEMBER_VERIFICATION(e), query: { with_guild: a, invite_code: null != n ? (0, d.parseInviteCodeFromInviteKey)(n) : void 0 }, oldFormErrors: !0 }); if (null == t.body) throw t; let { body: s } = t; return r.default.dispatch({ type: "MEMBER_VERIFICATION_FORM_UPDATE", guildId: e, form: { version: s.version, description: s.description, formFields: s.form_fields, guild: s.guild } }), s } catch (t) { r.default.dispatch({ type: "MEMBER_VERIFICATION_FORM_FETCH_FAIL", guildId: e }) } }, h = async (e, t) => { let { body: n } = await i.HTTP.patch({ url: T.Endpoints.GUILD_MEMBER_VERIFICATION(e), body: { form_fields: t }, oldFormErrors: !0 }); r.default.dispatch({ type: "MEMBER_VERIFICATION_FORM_UPDATE", guildId: e, form: { version: n.version, description: n.description, formFields: n.form_fields } }) }, A = async (e, t) => { let { body: n } = await i.HTTP.patch({ url: T.Endpoints.GUILD_MEMBER_VERIFICATION(e), body: { description: t }, oldFormErrors: !0 }); r.default.dispatch({ type: "MEMBER_VERIFICATION_FORM_UPDATE", guildId: e, form: { version: n.version, description: n.description, formFields: n.form_fields } }) }, m = async (e, t) => { await i.HTTP.patch({ url: T.Endpoints.GUILD_MEMBER_VERIFICATION(e), body: { enabled: t }, oldFormErrors: !0 }) }, N = async (e, t) => { if (u.default.isFullServerPreview(e)) { (0, l.updateImpersonatedData)(e, { memberOptions: { isPending: !1 } }); return } try { let { body: n } = await i.HTTP.put({ url: T.Endpoints.GUILD_MEMBER_REQUEST_TO_JOIN(e), body: { version: t.version, form_fields: t.formFields } }); return r.default.dispatch({ type: "USER_GUILD_JOIN_REQUEST_UPDATE", guildId: e, request: n }), setTimeout(p, 200), n } catch (t) { let { status: e } = t; switch (e) { case 429: throw (0, a.closeContextMenu)(), s.default.show({ title: f.default.Messages.CLAN_APPLICATION_RATE_LIMITED_HEADER, body: f.default.Messages.CLAN_APPLICATION_RATE_LIMITED_BODY, confirmText: f.default.Messages.CLAN_APPLICATION_RATE_LIMITED_BUTTON }), { ...t, message: f.default.Messages.CLAN_APPLICATION_RATE_LIMITED_BODY }; case 403: throw { ...t, message: f.default.Messages.CLAN_APPLICATION_MISSING_PERMISSION }; default: var n, d; throw { ...t, message: null !== (d = (n = new o.APIError(t), n.getAnyErrorMessage())) && void 0 !== d ? d : f.default.Messages.ERROR_GENERIC_TITLE } } } }; function p() { r.default.dispatch({ type: "USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW" }) } t.default = { fetchVerificationForm: S, updateVerificationForm: h, updateVerificationFormFieldsLocal: (e, t) => { r.default.dispatch({ type: "MEMBER_VERIFICATION_FORM_UPDATE", guildId: e, form: { formFields: t }, isLocalUpdate: !0 }) }, updateVerificationFormDescription: A, updateVerificationFormDescriptionLocal: (e, t) => { r.default.dispatch({ type: "MEMBER_VERIFICATION_FORM_UPDATE", guildId: e, form: { description: t }, isLocalUpdate: !0 }) }, enableVerificationForm: m, submitVerificationForm: N, clearCoachmark: function() { r.default.dispatch({ type: "USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR" }) }, reportApplication: function(e) { let { guild: t, guildJoinRequest: n, guildJoinRequestUser: i, reason: r, reasonOther: s, responses: a } = e; I.default.track(T.AnalyticEvents.GUILD_MEMBER_APPLICATION_REPORTED, { application_id: n.joinRequestId, applicant_id: i.id, guild_id: t.id, reason: r, reason_other: s, responses: a }) } } }, 592286: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AUTOMATIC_APPROVAL_FORM_FIELDS: function() { return s }, IN_APP_MEMBER_VERIFICATION_MODAL_KEY: function() { return S }, MANUAL_APPROVAL_FORM_FIELDS: function() { return a }, MAX_CHOICE_LENGTH: function() { return c }, MAX_DESCRIPTION_LENGTH: function() { return T }, MAX_FORM_ELEMENTS: function() { return o }, MAX_NUM_CHOICES: function() { return _ }, MAX_NUM_RULES: function() { return l }, MAX_PARAGRAPH_RESPONSE_LENGTH: function() { return I }, MAX_QUESTION_LENGTH: function() { return d }, MAX_RULE_LENGTH: function() { return u }, MAX_TEXT_RESPONSE_LENGTH: function() { return E }, MEMBER_VERIFICATION_TYPE: function() { return f } }), n("47120"); var i, r = n("246364"); r.VerificationFormFieldTypes.VERIFICATION; let s = new Set([r.VerificationFormFieldTypes.TERMS]), a = new Set([r.VerificationFormFieldTypes.MULTIPLE_CHOICE, r.VerificationFormFieldTypes.TEXT_INPUT, r.VerificationFormFieldTypes.PARAGRAPH]), o = 5, l = 16, u = 300, d = 300, _ = 8, c = 150, E = 150, I = 1e3, T = 300, f = "Membership Gating", S = "in-app-member-verification"; (i || (i = {})).VERIFICATION_INFO = "VERIFICATION_INFO" }, 944163: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NO_MEMBER_VERIFICATION_FORM: function() { return c } }); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("246364"); let c = { version: "", description: "", formFields: [] }, E = {}; class I extends(a = u.default.Store) { get(e) { if (null != e) return E[e] } getRulesPrompt(e) { var t; return l().find(null === (t = E[e]) || void 0 === t ? void 0 : t.formFields, _.isTermsFormField) } } s = "MemberVerificationFormStore", (r = "displayName") in(i = I) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new I(d.default, { INVITE_ACCEPT_SUCCESS: function(e) { let { invite: t } = e, { member_verification_form: n } = t, { guild: i } = t; if (null != i && null != n) { var r; return E[i.id] = { version: n.version, description: null !== (r = n.description) && void 0 !== r ? r : "", formFields: n.form_fields, guild: i }, !0 } return !1 }, MEMBER_VERIFICATION_FORM_UPDATE: function(e) { let { form: t, guildId: n } = e; if (null == t) E[n] = c; else { var i; let e = null !== (i = E[n]) && void 0 !== i ? i : c; E[n] = { ...e, ...t } } }, MEMBER_VERIFICATION_FORM_FETCH_FAIL: function(e) { var t; let { guildId: n } = e; E[n] = null !== (t = E[n]) && void 0 !== t ? t : c }, GUILD_DELETE: function(e) { let { guild: t } = e; delete E[null == t ? void 0 : t.id] } }) }, 467138: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isMemberVerificationManualApproval: function() { return s }, useIsMemberVerificationManualApproval: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "guild", id: "2021-11_member_verification_manual_approval", label: "Member Verification Manual Approval", defaultConfig: { manualApprovalEnabled: !1 }, treatments: [{ id: 1, label: "Enable manual approval for membership verification", config: { manualApprovalEnabled: !0 } }] }); function r(e) { return i.trackExposure({ guildId: e, location: "bda51f_1" }), i.useExperiment({ guildId: e, location: "bda51f_2" }, { autoTrackExposure: !1 }).manualApprovalEnabled } function s(e) { return i.getCurrentConfig({ guildId: e, location: "bda51f_3" }, { autoTrackExposure: !1 }).manualApprovalEnabled } }, 305325: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { openMemberVerificationModal: function() { return r } }); let r = (i = n("66511").default).openMemberVerificationModal; i.closeMemberVerificationModal }, 246364: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { GuildJoinRequestApplicationStatuses: function() { return a }, GuildJoinRequestSortOrders: function() { return s }, MAX_RESULTS_PER_PAGE: function() { return _ }, MAX_VISIBLE_PAGES: function() { return c }, VerificationFormFieldTypes: function() { return i }, isTermsFormField: function() { return E } }); let _ = 25, c = 4; function E(e) { return null != e && "TERMS" === e.field_type }(o = i || (i = {})).TERMS = "TERMS", o.TEXT_INPUT = "TEXT_INPUT", o.PARAGRAPH = "PARAGRAPH", o.MULTIPLE_CHOICE = "MULTIPLE_CHOICE", o.VERIFICATION = "VERIFICATION", (l = r || (r = {})).EMAIL = "email", l.PHONE = "phone", (u = s || (s = {})).TIMESTAMP_DESC = "NEWEST", u.TIMESTAMP_ASC = "OLDEST", (d = a || (a = {})).STARTED = "STARTED", d.SUBMITTED = "SUBMITTED", d.REJECTED = "REJECTED", d.APPROVED = "APPROVED" }, 937111: function(e, t, n) { "use strict"; n.r(t), n.d(t, { joinRequestFromServer: function() { return f } }); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("601964"), d = n("594174"), _ = n("881952"); let c = !1, E = {}, I = !1, T = {}; function f(e) { return { joinRequestId: e.join_request_id, guildId: e.guild_id, userId: e.user_id, user: e.user, createdAt: e.created_at, formResponses: e.form_responses, rejectionReason: e.rejection_reason, applicationStatus: e.application_status, actionedAt: e.actioned_at, actionedByUser: e.actioned_by_user, lastSeen: e.last_seen, interviewChannelId: e.interview_channel_id } } function S(e) { let { guildId: t, request: n } = e; if (null == n) return; let i = f(n), r = d.default.getCurrentUser(); if (null != r && i.userId !== r.id) return !1; (0, _.isApprovedAndAcked)(i) ? delete E[t]: E[t] = i } class h extends(a = o.default.Store) { getRequest(e) { return E[e] } computeGuildIds() { return Object.values(E).map(e => null == e ? void 0 : e.guildId).filter(e => null != e) } getJoinRequestGuild(e) { return null != T[e] ? new u.default(T[e]) : null } get hasFetchedRequestToJoinGuilds() { return I } hasJoinRequestCoackmark() { return c } } s = "UserGuildJoinRequestStore", (r = "displayName") in(i = h) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new h(l.default, { CONNECTION_OPEN: function(e) { let { guildJoinRequests: t } = e; I = !1, T = {}, E = {}, t.forEach(e => { let { guild_id: t } = e; null != t && (E[t] = f(e)) }) }, GUILD_JOIN_REQUEST_UPDATE: S, GUILD_JOIN_REQUEST_CREATE: S, USER_GUILD_JOIN_REQUEST_UPDATE: function(e) { let { request: t, guildId: n } = e; if (null == t) { delete E[n]; return } let i = f(t); (0, _.isApprovedAndAcked)(i) ? delete E[n]: E[n] = i }, GUILD_DELETE: function(e) { let { guild: t } = e; delete E[t.id] }, USER_JOIN_REQUEST_GUILDS_FETCH: function(e) { let { guilds: t } = e; I = !0, t.forEach(e => { let { id: t, name: n, features: i, icon: r } = e; T[t] = { id: t, name: n, features: i, icon: r } }) }, MEMBER_VERIFICATION_FORM_UPDATE: function(e) { let { form: t, guildId: n } = e; if ((null == t ? void 0 : t.guild) != null) { let { id: e, name: i, icon: r, features: s } = t.guild; T[n] = { id: e, name: i, icon: r, features: null != s ? s : [] } } }, INVITE_ACCEPT_SUCCESS: function(e) { let { invite: t } = e, { guild: n, join_request: i } = t; if (null != n && null != i) { let { guild_id: e } = i; E[e] = f(i); let { id: t, name: r, icon: s, features: a } = n; T[t] = { id: t, name: r, icon: s, features: null != a ? a : [] } } }, ACK_APPROVED_GUILD_JOIN_REQUEST: function(e) { let { guildId: t } = e; delete E[t] }, USER_GUILD_JOIN_REQUEST_COACHMARK_SHOW: function() { c = !0 }, USER_GUILD_JOIN_REQUEST_COACHMARK_CLEAR: function() { c = !1 } }) }, 697379: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canReviewGuildMemberApplications: function() { return c }, useCanReviewGuildMemberApplications: function() { return E } }); var i = n("470079"), r = n("442837"), s = n("430824"), a = n("496675"), o = n("863249"), l = n("944163"), u = n("467138"), d = n("246364"), _ = n("981631"); function c(e) { let t = s.default.getGuild(e); return null != t && (0, u.isMemberVerificationManualApproval)(e) && a.default.can(_.Permissions.KICK_MEMBERS, t) } function E(e) { let t = (0, u.useIsMemberVerificationManualApproval)(e), n = (0, r.useStateFromStores)([s.default], () => s.default.getGuild(e)), c = null != n && t && a.default.can(_.Permissions.KICK_MEMBERS, n) && n.hasVerificationGate(), E = (0, r.useStateFromStores)([l.default], () => l.default.get(e), [e]); i.useEffect(() => { c && o.default.fetchVerificationForm(e) }, [c, e]); let I = i.useMemo(() => { var e; return (null !== (e = null == E ? void 0 : E.formFields) && void 0 !== e ? e : []).some(e => !(0, d.isTermsFormField)(e)) }, [null == E ? void 0 : E.formFields]); return c && I } }, 746916: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useCurrentUserGuildBadgeStatus: function() { return d } }); var i = n("442837"), r = n("271383"), s = n("594174"), a = n("881952"), o = n("467138"), l = n("937111"), u = n("981631"); function d(e) { let t = (0, o.useIsMemberVerificationManualApproval)(null != e ? e : u.EMPTY_STRING_SNOWFLAKE_ID), n = (0, i.useStateFromStores)([l.default, s.default, r.default], () => { let t = l.default.getRequest(e), n = s.default.getCurrentUser(); if (null == n || null == t || t.userId !== n.id) return; let i = r.default.getMember(e, t.userId); if (!(null != i && !i.isPending) || (0, a.isActionedAndNotAcked)(t)) return t.applicationStatus }, [e]); return t ? n : void 0 } }, 741606: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("470079"), r = n("442837"), s = n("693546"), a = n("937111"); function o(e) { let t = (0, r.useStateFromStores)([a.default], () => null == e ? null : a.default.getRequest(e)), n = (0, r.useStateFromStores)([a.default], () => a.default.hasFetchedRequestToJoinGuilds); return i.useEffect(() => { !n && s.default.fetchRequestToJoinGuilds() }, [n]), t } }, 281956: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldShowMembershipVerificationGate: function() { return l }, useShowMemberVerificationGate: function() { return u } }), n("47120"); var i = n("442837"), r = n("271383"), s = n("430824"), a = n("607744"), o = n("594174"); function l(e) { let [t, n, i, l] = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [s.default, a.default, o.default, r.default]; if (null == e) return !1; let u = t.getGuild(e), { notClaimed: d } = n.getCheck(e), _ = i.getCurrentUser(), c = !1; if (null != _) { var E, I; c = null !== (I = null === (E = l.getMember(e, _.id)) || void 0 === E ? void 0 : E.isPending) && void 0 !== I && I } return (c || d) && !!(null == u ? void 0 : u.hasVerificationGate()) } function u(e) { return (0, i.useStateFromStores)([s.default, a.default, o.default, r.default], () => null != e && l(e, [s.default, a.default, o.default, r.default]), [e]) } }, 266395: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setHasUnsubmittedChanges: function() { return l }, setShowWarning: function() { return u }, useMemberVerificationFormNoticeStore: function() { return o } }); var i = n("652874"), r = n("585483"), s = n("981631"); let a = Object.freeze({ hasUnsubmittedChanges: !1, shouldShowWarning: !1 }), o = (0, i.default)(e => a), l = e => { o.setState({ hasUnsubmittedChanges: e }) }, u = e => { o.setState({ shouldShowWarning: e }), e && r.ComponentDispatch.dispatch(s.ComponentActions.EMPHASIZE_NOTICE) } }, 66511: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("952265"), s = n("626135"), a = n("863249"), o = n("266395"), l = n("592286"), u = n("981631"); let d = () => { s.default.track(u.AnalyticEvents.MODAL_DISMISSED, { type: l.MEMBER_VERIFICATION_TYPE }) }, _ = e => { s.default.track(u.AnalyticEvents.OPEN_MODAL, { type: l.MEMBER_VERIFICATION_TYPE, guild_id: e }) }; t.default = { openMemberVerificationModal(e, t) { _(e); let s = async t => { await a.default.submitVerificationForm(e, t) }; (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("80026"), n.e("70935")]).then(n.bind(n, "645264")); return n => (0, i.jsx)(t, { ...n, guildId: e, onComplete: s, onClose: function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (!e) { if (o.useMemberVerificationFormNoticeStore.getState().hasUnsubmittedChanges) { (0, o.setShowWarning)(!0); return } d() } n.onClose() } }) }, { modalKey: l.IN_APP_MEMBER_VERIFICATION_MODAL_KEY, onCloseRequest: () => { d(), o.useMemberVerificationFormNoticeStore.getState().hasUnsubmittedChanges ? (0, o.setShowWarning)(!0) : (0, r.closeModal)(l.IN_APP_MEMBER_VERIFICATION_MODAL_KEY) }, onCloseCallback: t }) }, closeMemberVerificationModal() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; !e && d(), (0, r.closeModal)(l.IN_APP_MEMBER_VERIFICATION_MODAL_KEY) } } }, 815790: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ACCOUNT_AGE_DATE_TOOLTIP_CONFIG: function() { return o }, MEMBER_JOIN_DATE_TOOLTIP_CONFIG: function() { return l }, MembersTableDateFormats: function() { return r }, formatDateRelativeTime: function() { return _ }, getJoinedAtTimestamp: function() { return c } }); var i, r, s = n("814391"), a = n("689938"); let o = { month: "short", day: "numeric", year: "numeric", hour: "numeric", minute: "2-digit" }, l = { month: "short", day: "numeric", year: "numeric", hour: "numeric", minute: "2-digit" }; (i = r || (r = {}))[i.JOINED_AT = 0] = "JOINED_AT", i[i.ACCOUNT_AGE = 1] = "ACCOUNT_AGE"; let u = () => ({ seconds: a.default.Messages.MEMBERS_TABLE_JOINED_AT_TIMESTAMP_SECONDS, minutes: a.default.Messages.MEMBERS_TABLE_JOINED_AT_TIMESTAMP_MINUTES, hours: a.default.Messages.MEMBERS_TABLE_JOINED_AT_TIMESTAMP_HOURS, days: a.default.Messages.MEMBERS_TABLE_JOINED_AT_TIMESTAMP_DAYS, months: a.default.Messages.MEMBERS_TABLE_JOINED_AT_TIMESTAMP_MORE_THAN_MONTH, years: a.default.Messages.MEMBERS_TABLE_JOINED_AT_TIMESTAMP_MORE_THAN_YEAR }), d = () => ({ hours: a.default.Messages.MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_HOURS, days: a.default.Messages.MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_DAYS, months: a.default.Messages.MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_MORE_THAN_MONTH, years: a.default.Messages.MEMBERS_TABLE_ACCOUNT_AGE_TIMESTAMP_MORE_THAN_YEAR }), _ = (e, t) => { var n; let i = 0 === (n = t) ? u : 1 === n ? d : void 0; return (0, s.default)(e, i, !1) }, c = e => (null != e ? new Date(e) : new Date).getTime() }, 740900: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildMemberSafetyMembers: function() { return A }, MemberSafetySecondaryIndex: function() { return i } }), n("653041"), n("47120"); var i, r, s = n("498607"), a = n.n(s), o = n("759174"), l = n("493892"), u = n("594174"), d = n("815790"), _ = n("588215"), c = n("44715"), E = n("331551"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let T = Date.now(); function f(e) { let t = [e.isCurrentGuildMemberByTimestamp ? "CURRENT_GUILD_MEMBER" : "NEW_GUILD_MEMBER"]; return e.isIncludedInSearchResults && t.push("INCLUDED_IN_SEARCH_RESULTS"), t } function S(e) { return e.sort } function h() { return new o.SecondaryIndexMap(f, S) }(r = i || (i = {})).NEW_GUILD_MEMBER = "NEW_GUILD_MEMBER", r.CURRENT_GUILD_MEMBER = "CURRENT_GUILD_MEMBER", r.INCLUDED_IN_SEARCH_RESULTS = "INCLUDED_IN_SEARCH_RESULTS"; class A { reset() { this._membersMap.clear(), this._membersMap = h(), this.resetNewMemberTimestamp() } resetNewMemberTimestamp() { this.newMemberTimestamp = Date.now() } enhanceNewMember(e, t) { var n; let i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = (0, d.getJoinedAtTimestamp)(e.joinedAt), { hasUnusualDmActivity: s, hasUnusualAccountActivity: a, sourceInviteCode: o, joinSourceType: l, inviterId: c, integrationType: I } = this._computeMemberSupplementals(e.userId, e.unusualDMActivityUntil), T = u.default.getUser(e.userId); return { hasUnusualDmActivity: s, hasUnusualAccountActivity: a, sourceInviteCode: o, joinSourceType: l, inviterId: c, integrationType: I, ...e, isCurrentGuildMemberByTimestamp: r <= this.newMemberTimestamp, isIncludedInSearchResults: !1, user: T, sort: (0, E.getSortValueForMember)(e, null !== (n = t.selectedSort) && void 0 !== n ? n : _.OrderBy.ORDER_BY_UNSPECIFIED), joinedAtTimestamp: r, ...i } } _computeMemberSupplementals(e, t) { var n, i; let { sourceInviteCode: r, joinSourceType: s, inviterId: a, integrationType: o } = null !== (n = (0, c.getMemberSupplementalByGuildId)(this.guildId)[e]) && void 0 !== n ? n : {}; return { sourceInviteCode: null != r ? r : null, joinSourceType: null != s ? s : null, inviterId: null != a ? a : null, integrationType: null != o ? o : null, hasUnusualDmActivity: null != (i = t) && new Date(i).getTime() >= T - _.UNUSUAL_DM_COMPARISON_DELTA, hasUnusualAccountActivity: (0, l.isSpammer)(e) } } createMember(e) { return this._membersMap.set(e.userId, e) } updateMember(e, t) { var n; if (null == t) return this._membersMap.set(e.userId, e); let i = { ...e }, r = { ...t }, s = !1, { sourceInviteCode: o, hasUnusualDmActivity: l, hasUnusualAccountActivity: u, joinSourceType: d, inviterId: _, integrationType: c } = this._computeMemberSupplementals(i.userId, null !== (n = r.unusualDMActivityUntil) && void 0 !== n ? n : i.unusualDMActivityUntil); for (let e in i.sourceInviteCode !== o && (r.sourceInviteCode = o), i.hasUnusualDmActivity !== l && (r.hasUnusualDmActivity = l), i.hasUnusualAccountActivity !== u && (r.hasUnusualAccountActivity = u), i.joinSourceType !== d && (r.joinSourceType = d), i.inviterId !== _ && (r.inviterId = _), i.integrationType !== c && (r.integrationType = c), r) { let t = r[e], n = i[e]; !a()(t, n) && (i[e] = t, s = !0) } return this._membersMap.set(i.userId, i) || s } removeMember(e) { return this._membersMap.delete(e) } getMemberByUserId(e) { return this._membersMap.get(e) } values(e) { return this._membersMap.values(e, !0) } count(e) { return this._membersMap.size(e) } get version() { return this._membersMap.version } constructor(e) { I(this, "guildId", void 0), I(this, "_membersMap", void 0), I(this, "newMemberTimestamp", Date.now()), this.guildId = e, this._membersMap = h() } } }, 752560: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildMemberSafetyPageStore: function() { return I } }), n("47120"), n("724458"), n("653041"); var i = n("392711"), r = n("271383"), s = n("594174"), a = n("70956"), o = n("815790"), l = n("740900"), u = n("823596"), d = n("993374"), _ = n("331551"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = 3 * a.default.Millis.SECOND; class I { getSearchIndex() { return null == this._search || this._search.hasDefaultQuery ? l.MemberSafetySecondaryIndex.CURRENT_GUILD_MEMBER : l.MemberSafetySecondaryIndex.INCLUDED_IN_SEARCH_RESULTS } initialize() { if (this._initialized) { this.lastCursorTimestamp = Date.now(); return } this._initialized = !0, this._search = new d.GuildMemberSafetySearch(this.guildId), this._members = new l.GuildMemberSafetyMembers(this.guildId), this._pagination = new u.GuildMemberSafetyPagination(this.guildId, this._members.values(this.getSearchIndex())) } get isInitialized() { return this._initialized } reset() { var e, t, n; let i = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; this._initialized && (null === (e = this._members) || void 0 === e || e.reset(), null === (t = this._pagination) || void 0 === t || t.reset(), null === (n = this._search) || void 0 === n || n.reset(), i && this.initialize()) } get searchChunkSize() { return null != this._pagination && this._initialized ? (0, u.getSearchChunkLimit)(this._pagination.getPaginationState()) : 0 } getMember(e) { var t; return null != this._members && this._initialized ? null !== (t = this._members.getMemberByUserId(e)) && void 0 !== t ? t : null : null } getMembersByIndex(e) { return null != this._members && this._initialized ? [this._members.values(e), this._members.version] : [ [], 0 ] } countMembersByIndex(e) { return null != this._members && this._initialized ? this._members.count(e) : 0 } _checkUpdatesForPaginationUpdate(e, t) { return null != t.isIncludedInSearchResults && t.isIncludedInSearchResults !== e.isIncludedInSearchResults || null != t.isCurrentGuildMemberByTimestamp && t.isCurrentGuildMemberByTimestamp !== e.isCurrentGuildMemberByTimestamp || !1 } _getIsIncludedInSearch(e, t) { if (null == this._search || this._search.hasDefaultQuery) return [!1, !1]; let n = { ...e, ...t }, i = this._search.isMemberIncludedInSearchResults(n), r = i !== e.isIncludedInSearchResults; return [i, r] } updatePaginationChunks() { if (null == this._pagination || null == this._members || !this._initialized) return !1; let e = this._members.values(this.getSearchIndex()); return this._pagination.updateSortedMembers(e) } removeMember(e) { if (null == this._members || !this._initialized || null == this._members.getMemberByUserId(e)) return !1; let t = this._members.removeMember(e); return t ? this.updatePaginationChunks() : t } _rawUpdateMember(e, t) { if (null == this._members) return [!1, !1]; let n = !1, i = this._members.getMemberByUserId(e); if (null == i) { n = !0; let s = r.default.getTrueMember(this.guildId, e); if (null == s) return [!1, !1]; i = this._members.enhanceNewMember(s, this.getSearchState(), t) } if (null == t.isIncludedInSearchResults) { let [e, r] = this._getIsIncludedInSearch(i, t); r && (n = !0, t.isIncludedInSearchResults = e) } else t.isIncludedInSearchResults !== i.isIncludedInSearchResults && (n = !0); let s = this._members.updateMember(i, t); return !n && (n = this._checkUpdatesForPaginationUpdate(i, t)), [n, s] } isMemberInIndex(e) { return null != this._members && !!this._initialized && this._members._membersMap.has(e) } isMemberIncludedInSearchResults(e) { if (null == this._members || null == this._search || null == this._pagination || !this._initialized) return !1; if (this._search.hasDefaultQuery) return this._pagination.isMemberInAnyChunk(e); let t = this._members.getMemberByUserId(e); if (null == t) { let n = r.default.getTrueMember(this.guildId, e); if (null == n) return !1; t = this._members.enhanceNewMember(n, this.getSearchState()) } else if (t.isIncludedInSearchResults) return !0; return this._search.isMemberIncludedInSearchResults(t) } updateMember(e, t) { if (null == this._members || !this._initialized) return !1; let [n, i] = this._rawUpdateMember(e, t); return n ? this.updatePaginationChunks() : i } updateClientMembers(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (null == this._members || !this._initialized) return !1; let i = !1, r = !1; for (let s of e) { if (null == s.joinedAt) continue; let e = s; if (t && (e = { ...e, isIncludedInSearchResults: !0 }), n) { let t = (0, o.getJoinedAtTimestamp)(s.joinedAt); e = { ...e, isCurrentGuildMemberByTimestamp: t <= this._members.newMemberTimestamp, refreshTimestamp: this.lastRefreshTimestamp } } let [a, l] = this._rawUpdateMember(s.userId, e); i = a || i, r = l || r } return i ? this.updatePaginationChunks() : r } updateServerMembers(e) { if (null == this._members || !this._initialized) return !1; let t = !1, n = !1; for (let i of e) { let e = r.default.getTrueMember(this.guildId, i.user.id); if (null == e) continue; let [s, a] = this._rawUpdateMember(i.user.id, e); t = s || t, n = a || n } return t ? this.updatePaginationChunks() : n } updateMembersByMemberIds(e) { if (null == this._members || !this._initialized) return !1; let t = e.reduce((e, t) => { let n = r.default.getTrueMember(this.guildId, t); return null != n && e.push(n), e }, []); return this.updateClientMembers(t) } updateMembersSort(e) { return new Promise(t => { let n = (0, i.cloneDeep)(this.getMembersByIndex(l.MemberSafetySecondaryIndex.CURRENT_GUILD_MEMBER)[0]); [...n, ...(0, i.cloneDeep)(this.getMembersByIndex(l.MemberSafetySecondaryIndex.NEW_GUILD_MEMBER)[0])].forEach(t => { var n, i, r; let s = (0, _.getSortValueForMember)(t, e), a = null !== (r = null === (n = this._search) || void 0 === n ? void 0 : n.isMemberIncludedInSearchResults(t)) && void 0 !== r && r; null === (i = this._members) || void 0 === i || i.updateMember(t, { sort: s, isIncludedInSearchResults: a }) }), t() }) } sortMembersBySelectedSort(e) { null != this._search && null != this._members && this._initialized && null != e && (this.updatePaginationState({ sort: e }, !0), this.updateMembersSort(e).then(() => { this.updatePaginationChunks() })) } updateSearchedMembersByMemberIds(e) { if (null == this._search || null == this._members || !this._initialized) return !1; let t = e.reduce((e, t) => { let n = r.default.getTrueMember(this.guildId, t); return null != n && e.push(n), e }, []); return this.updateClientMembers(t, this._search.requiresUsernameMatch, 0 !== this.lastRefreshTimestamp) } rebuildAllMembers() { if (null == this._members || !this._initialized) return !1; let e = r.default.getMembers(this.guildId); return this.updateClientMembers(e) } _scheduleRefresh(e) { this.lastRefreshTimestamp = e, this.lastCursorTimestamp = Date.now(), null != this._lastRefreshTimer && clearTimeout(this._lastRefreshTimer), this._lastRefreshTimer = setTimeout(() => { this._lastRefreshTimer = null, this.lastRefreshTimestamp = 0 }, E) } refreshNewMembersAndSearchResults() { if (null == this._search || null == this._members || !this._initialized) return !1; let e = Number(Date.now()); this._scheduleRefresh(e); let t = (0, i.cloneDeep)(this._members.values(l.MemberSafetySecondaryIndex.NEW_GUILD_MEMBER)), n = !1; for (let i of t) n = this._members.updateMember(i, { isCurrentGuildMemberByTimestamp: !0, refreshTimestamp: e, user: s.default.getUser(i.userId) }) || n; this._members.resetNewMemberTimestamp(), this.resetSearchState() && (n = !1); let [r, a] = this.updatePaginationState({ currentPage: 1 }, !1); return a && (n = !1), n && this.updatePaginationChunks(), !0 } getNewMemberTimestamp() { return null != this._members && this._initialized ? this._members.newMemberTimestamp : 0 } updateSearchState(e) { if (null == this._members || null == this._search || !this._initialized) return !1; let t = !!this._search.hasDefaultQuery; null != e.selectedSort && e.selectedSort !== this._search.getSearchState().selectedSort && this.sortMembersBySelectedSort(e.selectedSort); let n = this._search.updateSearchState(e); if (this._search.hasDefaultQuery && t) return this.updatePaginationChunks(); let r = (0, i.cloneDeep)(this._members.values(l.MemberSafetySecondaryIndex.CURRENT_GUILD_MEMBER)), s = t !== this._search.hasDefaultQuery; for (let e of r) { if (!e.isCurrentGuildMemberByTimestamp) continue; let t = this._search.isMemberIncludedInSearchResults(e); t !== e.isIncludedInSearchResults && (s = !0, n = !0, this._members.updateMember(e, { isIncludedInSearchResults: t })) } return s ? (this.updatePaginationChunks(), this.updatePaginationState({ currentPage: 1 }), !0) : n } getSearchState() { return null != this._search && this._initialized ? this._search.getSearchState() : (0, d.getDefaultSearchState)() } hasDefaultSearchState() { return null == this._search || !this._initialized || this._search.hasDefaultQuery } resetSearchState() { return !!(null != this._search && this._initialized && this._search.resetSearchState()) && this.updatePaginationChunks() } getTotalResultsCount() { return null != this._search && null != this._pagination && this._initialized ? this._search.hasDefaultQuery && null != this._defaultSearchTotalResultsCount ? this._defaultSearchTotalResultsCount : this._pagination.getPaginationState().totalResultsCount : 0 } updatePaginationState(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return null != this._search && null != this._pagination && this._initialized ? (t && (this.lastRefreshTimestamp = 0), this._search.hasDefaultQuery && null != e.totalResultsCount && (this._defaultSearchTotalResultsCount = e.totalResultsCount), this._pagination.updatePaginationState(e)) : [!1, !1] } clearPaginationState() { var e; null === (e = this._pagination) || void 0 === e || e.reset() } getPaginationState() { return null != this._pagination && this._initialized ? this._pagination.getPaginationState() : (0, u.createDefaultMemberSafetyPaginationState)() } getPaginatedMembers() { return null != this._pagination && this._initialized ? [this._pagination.paginatedMembers, this._pagination.version] : [{}, 0] } updatePaginationToken(e) { return null != this._pagination && !!this._initialized && this._pagination.updatePaginationToken(e) } getElasticSearchPagination() { return null != this._pagination && this._initialized ? this._pagination.getElasticSearchPagination() : null } removeRoleFromSearchState(e) { let t = new Set(this.getSearchState().selectedRoleIds); return t.delete(e), this.updateSearchState({ selectedRoleIds: t }) } constructor(e) { c(this, "guildId", void 0), c(this, "lastRefreshTimestamp", 0), c(this, "lastCursorTimestamp", Date.now()), c(this, "_initialized", void 0), c(this, "_pagination", void 0), c(this, "_search", void 0), c(this, "_members", void 0), c(this, "_lastRefreshTimer", null), c(this, "_defaultSearchTotalResultsCount", void 0), this.guildId = e, this._initialized = !1, this._members = null, this._pagination = null, this._search = null } } }, 823596: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildMemberSafetyPagination: function() { return c }, MAX_VISIBLE_PAGES: function() { return u }, PAGINATION_PAGE_SIZE_OPTIONS: function() { return l }, createDefaultMemberSafetyPaginationState: function() { return d }, getSearchChunkLimit: function() { return _ } }), n("724458"), n("653041"), n("47120"); var i, r, s = n("271383"), a = n("588215"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = [12, 25, 50, 100], u = 7; function d() { return { pageSize: l[0], currentPage: 1, continuationToken: null, sort: a.OrderBy.ORDER_BY_UNSPECIFIED, elasticSearchCursor: null } } function _(e) { return Math.max(5 * e.pageSize, 250) }(r = i || (i = {}))[r.FORWARD = 1] = "FORWARD", r[r.BACKWARD = -1] = "BACKWARD"; class c { reset() { this._paginationState = d(), this._sortedMemberIds = [], this._cachedPaginationChunks = {}, this._version += 1 } isMemberOnCurrentPage(e) { var t; return (null !== (t = this._cachedPaginationChunks[this._paginationState.currentPage]) && void 0 !== t ? t : []).includes(e) } isMemberInAnyChunk(e) { return this._sortedMemberIds.includes(e) } _initPaginationFromRawMembers(e) { let t = [], n = e.reduce((e, n, i) => (e = this._reduceMemberIdsToPaginationChunks(e, n.userId, i), t.push(n.userId), e), {}); return [t, n] } _buildPaginationFromMemberIds(e) { return e.reduce(this._reduceMemberIdsToPaginationChunks, {}) } _rebuildPaginationChunksFromStoredMembers() { return this._cachedPaginationChunks = this._buildPaginationFromMemberIds(this._sortedMemberIds), this._version += 1, !0 } getPaginationState() { return this._paginationState } updatePaginationToken(e) { return e !== this._paginationState.continuationToken && (this._paginationState = { ...this._paginationState, continuationToken: e }, !0) } _calculateNewPageFromPageSizeChange(e, t) { let { currentPage: n, pageSize: i } = this._paginationState; return e * i <= this._sortedMemberIds.length ? Math.max(Math.ceil(i / e * (null != t ? t : n)), 1) : 1 } updatePaginationState(e) { let t = !1; if (null != e.pageSize && e.pageSize !== this._paginationState.pageSize) { var n; t = !0, e.currentPage = this._calculateNewPageFromPageSizeChange(null !== (n = e.pageSize) && void 0 !== n ? n : this._paginationState.pageSize, e.currentPage) } return this._paginationState = { ...this._paginationState, ...e }, t && this._rebuildPaginationChunksFromStoredMembers(), [!0, t] } updateSortedMembers(e) { let [t, n] = this._initPaginationFromRawMembers(e); return this._sortedMemberIds = t, this._cachedPaginationChunks = n, this._version += 1, !0 } updateSortedMembersByUserIds(e) { return this._sortedMemberIds = e, this._rebuildPaginationChunksFromStoredMembers(), !0 } _findMember(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : -1, n = e; n < this._sortedMemberIds.length && (n = this._sortedMemberIds.length - 1), n < 0 && (n = 0); let i = this._sortedMemberIds[e], r = s.default.getMember(this.guildId, i); for (; null == r && !((e += t) < 0) && !(e >= this._sortedMemberIds.length);) { ; i = this._sortedMemberIds[e], (null == (r = s.default.getMember(this.guildId, i)) ? void 0 : r.joinedAt) == null && (r = null) } return r } getElasticSearchPagination() { return this.getPaginationState().elasticSearchCursor } get paginatedMembers() { return this._cachedPaginationChunks } get version() { return this._version } constructor(e, t) { o(this, "guildId", void 0), o(this, "_sortedMemberIds", void 0), o(this, "_paginationState", void 0), o(this, "_version", void 0), o(this, "_cachedPaginationChunks", void 0), o(this, "_reduceMemberIdsToPaginationChunks", (e, t, n) => { let i = Math.floor(n / this._paginationState.pageSize) + 1; return null == e[i] && (e[i] = []), e[i].push(t), e }), this.guildId = e, this._paginationState = d(), this._version = 0; let [n, i] = this._initPaginationFromRawMembers(t); this._sortedMemberIds = n, this._cachedPaginationChunks = i, this._version += 1 } } }, 993374: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildMemberSafetySearch: function() { return E }, getDefaultSearchState: function() { return d } }), n("47120"); var i = n("498607"), r = n.n(i), s = n("715903"), a = n("69882"), o = n("709054"), l = n("733026"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function d() { return { query: "", requireUnusualDmActivity: !1, requireCommunicationDisabled: !1, requireUnusualAccountActivity: !1, requireUsernameQuarantined: !1, selectedRoleIds: new Set, selectedJoinDateOption: { optionId: 0, afterDate: null, beforeDate: null }, selectedAccountAgeOption: { optionId: 0, afterDate: null, beforeDate: null }, selectedJoinSourceType: void 0, selectedSourceInviteCode: void 0, selectedSort: void 0 } } let _ = Object.freeze(d()); function c(e, t) { return null != e && (!!e.toLowerCase().includes(t.toLowerCase()) || !1) } class E { get requiresUsernameMatch() { return this._searchState.query.trim().length > 0 } reset() { this._searchState = d(), this.hasDefaultQuery = !0 } updateSearchState(e) { return this._searchState = { ...this._searchState, ...e }, this.hasDefaultQuery = r()(this._searchState, _), !0 } resetSearchState() { return !this.hasDefaultQuery && (this._searchState = d(), this.hasDefaultQuery = !0, !0) } getSearchState() { return this._searchState } isMemberIncludedInSearchResults(e) { let { query: t, requireUnusualDmActivity: n, requireCommunicationDisabled: i, requireUnusualAccountActivity: r, requireUsernameQuarantined: u, selectedRoleIds: d, selectedJoinDateOption: _, selectedAccountAgeOption: E, selectedSourceInviteCode: I, selectedJoinSourceType: T } = this._searchState; if (t.length > 0 && ! function(e, t) { if ("" === t.trim()) return !1; let [n, i] = (0, l.splitQuery)(t); for (let t of i) if (e.userId === t) return !0; for (let t of n) if (c(e.nick, t)) return !0; if (null == e.user) return !1; let { globalName: r, username: s } = e.user; for (let e of n) if (c(s, e)) return !0; for (let e of n) if (c(r, e)) return !0; return !1 }(e, t)) return !1; if (d.size > 0) { var f, S; if (f = e, !(0 !== (S = d).size && Array.from(S).every(e => f.roles.includes(e)))) return !1 } if (null != _.afterDate && e.joinedAtTimestamp < _.afterDate || null != _.beforeDate && e.joinedAtTimestamp > _.beforeDate || null != E.afterDate && o.default.extractTimestamp(e.userId) < E.afterDate || null != E.beforeDate && o.default.extractTimestamp(e.userId) > E.beforeDate || null != I && e.sourceInviteCode !== I || null != T && e.joinSourceType !== T) return !1; if (n || i || r || u) return !!(n && e.hasUnusualDmActivity || i && (0, a.isMemberCommunicationDisabled)(e) || r && e.hasUnusualAccountActivity || u && (0, s.hasAutomodQuarantinedProfile)(e)) || !1; return !0 } constructor(e) { u(this, "guildId", void 0), u(this, "_searchState", void 0), u(this, "hasDefaultQuery", void 0), this.guildId = e, this._searchState = d(), this.hasDefaultQuery = !0 } } }, 733026: function(e, t, n) { "use strict"; n.r(t), n.d(t, { splitQuery: function() { return r } }), n("653041"); var i = n("581364"); function r(e) { let t = e.split(",").map(e => e.trim()), n = [], r = []; return t.forEach(e => { (0, i.isSnowflake)(e) ? n.push(e): r.push(e) }), [r, n] } }, 478743: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MemberSafetyPagePermissions: function() { return s } }); var i = n("149765"), r = n("981631"); let s = i.combine(r.Permissions.ADMINISTRATOR, r.Permissions.MANAGE_GUILD, r.Permissions.BAN_MEMBERS, r.Permissions.KICK_MEMBERS, r.Permissions.MODERATE_MEMBERS, r.Permissions.MANAGE_ROLES, r.Permissions.MANAGE_NICKNAMES) }, 576007: function(e, t, n) { "use strict"; n.r(t), n.d(t, { searchAllGuildMembers: function() { return u } }), n("411104"); var i = n("544891"), r = n("570140"), s = n("881052"), a = n("70956"), o = n("672458"), l = n("981631"); async function u(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, d = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0; if (d > 3) throw Error("Unable to search guild members after max retries"); let { autoRetry: _ = !0, signal: c } = n; try { var E; let s = await i.HTTP.post({ url: l.Endpoints.GUILD_MEMBER_SEARCH(e), body: t, signal: c }); if (s.status === o.INDEXING_RESPONSE_CODE) { if (null == s.body.retry_after) throw Error("Indexing response did not include retry_after"); if (!_) throw Error("Indexing response received but autoRetry is disabled"); return await r.default.dispatch({ type: "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_STILL_INDEXING", guildId: e }), await new Promise(e => setTimeout(e, s.body.retry_after * a.default.Millis.SECOND)), u(e, t, n, d + 1) } return { type: o.GuildMemberSearchResponseType.SUCCESSFUL_QUERY, body: { guild_id: (E = s.body).guild_id, members: E.members, page_result_count: E.page_result_count, total_result_count: E.total_result_count } } } catch (t) { let e = new s.APIError(t); return { type: o.GuildMemberSearchResponseType.ERROR, body: e } } } }, 588215: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { OrderBy: function() { return i }, UNUSUAL_DM_COMPARISON_DELTA: function() { return s }, createMemberSearchCursor: function() { return a } }); let s = 2 * n("70956").default.Millis.DAY; function a(e) { let { joinedAt: t, userId: n } = e; return null == t ? null : { guild_joined_at: new Date(t).getTime(), user_id: n } }(r = i || (i = {}))[r.ORDER_BY_UNSPECIFIED = 0] = "ORDER_BY_UNSPECIFIED", r[r.ORDER_BY_GUILD_JOINED_AT_DESC = 1] = "ORDER_BY_GUILD_JOINED_AT_DESC", r[r.ORDER_BY_GUILD_JOINED_AT_ASC = 2] = "ORDER_BY_GUILD_JOINED_AT_ASC", r[r.ORDER_BY_USER_ID_DESC = 3] = "ORDER_BY_USER_ID_DESC", r[r.ORDER_BY_USER_ID_ASC = 4] = "ORDER_BY_USER_ID_ASC" }, 672458: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { GuildMemberSearchResponseType: function() { return i }, INDEXING_RESPONSE_CODE: function() { return s } }); let s = 202; (r = i || (i = {}))[r.SUCCESSFUL_QUERY = 1] = "SUCCESSFUL_QUERY", r[r.ERROR = 2] = "ERROR" }, 496135: function(e, t, n) { "use strict"; n.r(t), n.d(t, { searchGuildMembers: function() { return a } }); var i = n("570140"), r = n("576007"), s = n("672458"); async function a(e, t, n) { let a = await (0, r.searchAllGuildMembers)(e, t, n); if (a.type === s.GuildMemberSearchResponseType.ERROR) throw a.body; let { body: o } = a; i.default.dispatch({ type: "MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS", guildId: e, members: o.members, page_result_count: o.page_result_count, total_result_count: o.total_result_count }) } }, 241559: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canAccessMemberSafetyPage: function() { return c }, canBulkBanUser: function() { return h }, useCanAccessBulkBanningFeature: function() { return T }, useCanAccessInviteCodeFeature: function() { return f }, useCanAccessMemberSafetyPage: function() { return I }, useCanBulkBanUser: function() { return S } }), n("47120"); var i = n("149765"), r = n("442837"), s = n("430824"), a = n("496675"), o = n("594174"), l = n("700785"), u = n("478743"), d = n("981631"); let _ = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [s.default, o.default], [n, i] = t, r = n.getGuild(e); return { user: i.getCurrentUser(), guild: r } }, c = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [s.default, o.default], n = _(e, t); return null != n && i.hasAny(l.computePermissions({ user: n.user, context: n.guild, checkElevated: !1 }), u.MemberSafetyPagePermissions) }, E = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [s.default, o.default], n = _(e, t); return null != n && a.default.can(d.Permissions.MANAGE_GUILD, n.guild) && a.default.can(d.Permissions.BAN_MEMBERS, n.guild) }; function I(e) { return (0, r.useStateFromStores)([s.default, o.default], () => c(e, [s.default, o.default]), [e]) } function T(e) { let t = I(e), n = (0, r.useStateFromStores)([s.default, o.default], () => E(e, [s.default, o.default]), [e]); return t && n } function f(e) { return (0, r.useStateFromStores)([s.default, a.default], () => { let t = s.default.getGuild(e); return null != t && a.default.can(d.Permissions.MANAGE_GUILD, t) }, [e]) } function S(e, t, n) { return (0, r.useStateFromStores)([a.default, s.default], () => { let i = s.default.getGuild(e); return null != i && t && a.default.canManageUser(d.Permissions.BAN_MEMBERS, n, i) }, [t, e, n]) } function h(e, t, n) { let i = s.default.getGuild(e); return null != i && t && a.default.canManageUser(d.Permissions.BAN_MEMBERS, n, i) } }, 201070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getChunkIndex: function() { return M }, getChunkNumbers: function() { return y }, useIsMakingRequest: function() { return U }, useIsStillIndexing: function() { return b }, useMembersSearchRecordStore: function() { return C } }), n("47120"), n("411104"); var i, r, s, a, o = n("348327"), l = n.n(o), u = n("392711"), d = n("652874"), _ = n("259443"), c = n("379649"), E = n("147913"), I = n("823379"), T = n("709054"), f = n("823596"), S = n("733026"), h = n("588215"), A = n("496135"), m = n("893966"); let N = new _.Logger("MemberSafetySearchManager"); function p(e) { return "guild_".concat(e) } function O(e) { return { requestState: e, abortController: null, lastUpdated: Date.now(), query: null, cursor: null, previousPagination: null, sort: null, elasticSearchCursor: null } }(s = i || (i = {}))[s.FAILED = 0] = "FAILED", s[s.UNFETCHED = 1] = "UNFETCHED", s[s.PENDING = 2] = "PENDING", s[s.SUCCEEDED = 3] = "SUCCEEDED", s[s.STILL_INDEXING = 4] = "STILL_INDEXING"; let C = (0, d.default)(e => ({})); function R(e, t) { let n = C.getState()[e]; return null == n && (n = O(1)), n = { ...n, ...t }, C.setState(t => ({ ...t, [e]: n })), n } function g(e) { return C.getState()[e] } function L(e) { let t = g(e); return null == t && R(e, t = O(1)), t } async function v(e) { await (0, c.sleep)(200), null != g(e) && R(e, { requestState: 3, abortController: null, lastUpdated: Date.now() }) } function D(e) { var t; t = p(e), C.setState(e => { let n = { ...e }; return delete n[t], n }) } function M(e, t) { return Math.floor(Math.max(e - 1, 0) / t) } function y(e) { let t = (0, f.getSearchChunkLimit)(e), n = e.pageSize * (e.currentPage - 1), i = e.pageSize * e.currentPage, r = e.pageSize * (e.currentPage + 1); return { previousPageChunkNumber: M(n, t), currentPageChunkNumber: M(i, t), nextPageChunkNumber: M(r, t) } }(a = r || (r = {}))[a.FIRST_PAGE_CHUNK = 0] = "FIRST_PAGE_CHUNK", a[a.CURRENT_SEARCH_CHUNK = 1] = "CURRENT_SEARCH_CHUNK", a[a.NEXT_SEARCH_CHUNK = 2] = "NEXT_SEARCH_CHUNK", a[a.PREVIOUS_SEARCH_CHUNK = 3] = "PREVIOUS_SEARCH_CHUNK"; async function P(e) { var t, n, i, r, s, a; let o = m.default.getSearchStateByGuildId(e), d = m.default.getPaginationStateByGuildId(e), _ = p(e), c = L(_), [E, O] = function(e, t, n) { var i, r, s, a, o, l; let u = function(e, t) { var n; let { currentPageChunkNumber: i, previousPageChunkNumber: r, nextPageChunkNumber: s } = y(t), { previousPagination: a } = L(p(e)), o = t.currentPage, l = null !== (n = null == a ? void 0 : a.currentPage) && void 0 !== n ? n : 0, u = m.default.getElasticSearchPaginationByGuildId(e); switch (!0) { case null == u: case i === s && 0 === i: return 0; case i === s && i === r: return 1; case l < o && i < s: return 2; case l > o && i >= r: if (0 < i) return 3; return 0; default: return 1 } }(e, n), d = m.default.getElasticSearchPaginationByGuildId(e), _ = (0, f.getSearchChunkLimit)(n); switch (u) { case 0: return [null, { limit: _ }]; case 1: return [null !== (i = t.cursor) && void 0 !== i ? i : null, { limit: _, after: null !== (r = t.cursor) && void 0 !== r ? r : void 0 }]; case 2: return [null !== (s = null == d ? void 0 : d.after) && void 0 !== s ? s : null, { limit: _, after: null !== (a = null == d ? void 0 : d.after) && void 0 !== a ? a : void 0 }]; case 3: return [null !== (o = null == d ? void 0 : d.before) && void 0 !== o ? o : null, { limit: _, before: null !== (l = null == d ? void 0 : d.before) && void 0 !== l ? l : void 0 }]; default: (0, I.assertNever)(u) } }(e, c, d); let C = (r = function(e) { var t, n; let i = {}, r = {}, { query: s } = e; if (null != (t = s) && t.length > 1) { let [e, t] = (0, S.splitQuery)(s); e.length > 0 && (i.usernames = { or_query: e }), t.length > 0 && (i.user_id = { or_query: t }) } let { requireUnusualDmActivity: a, requireCommunicationDisabled: o, requireUnusualAccountActivity: l, requireUsernameQuarantined: u } = e, d = {}; a && (d.unusual_dm_activity_until = { range: { gte: Date.now() - h.UNUSUAL_DM_COMPARISON_DELTA } }), o && (d.communication_disabled_until = { range: { gte: Date.now() } }), l && (d.unusual_account_activity = l), u && (d.automod_quarantined_username = u), Object.keys(d).length > 0 && (r.safety_signals = d); let { selectedRoleIds: _ } = e; _.size > 0 && (i.role_ids = { and_query: Array.from(_) }); let { selectedJoinDateOption: c } = e; if (null != c.afterDate) { ; i.guild_joined_at = { range: { gte: c.afterDate, lte: null !== (n = c.beforeDate) && void 0 !== n ? n : void 0 } } } let { selectedAccountAgeOption: E } = e; if (null != E.afterDate) { let e = i.user_id; i.user_id = { ...e, range: { gte: T.default.fromTimestamp(E.afterDate), lte: null != E.beforeDate ? T.default.fromTimestamp(E.beforeDate) : void 0 } } } let { selectedSourceInviteCode: I } = e; null != I && (i.source_invite_code = { or_query: [I] }); let { selectedJoinSourceType: f } = e; null != f && (i.join_source_type = { or_query: [f] }); let A = { or_query: r, and_query: i }, { selectedSort: m } = e; return null != m && (A.sort = m), A }(o), null == (s = O) ? r : { ...r, ...s }), D = null !== (t = o.selectedSort) && void 0 !== t ? t : h.OrderBy.ORDER_BY_GUILD_JOINED_AT_DESC; if (function(e, t) { let n = L(e); return l()(n.query, t) }(_, C) && (0, u.isEqual)(E, c.cursor)) return; let M = function(e, t, n, i, r) { let s = g(e); if ((null == s ? void 0 : s.requestState) === 2) { var a; null === (a = s.abortController) || void 0 === a || a.abort() } return R(e, { requestState: 2, abortController: new AbortController, lastUpdated: Date.now(), query: t, cursor: n, previousPagination: i, sort: r }) }(_, C, E, d, D); try { if (N.info("Making member search request", { query: M.query, guildId: e }), null == M.query) throw Error("Query is null"); await (0, A.searchGuildMembers)(e, M.query, { signal: null !== (i = null === (n = M.abortController) || void 0 === n ? void 0 : n.signal) && void 0 !== i ? i : void 0 }) } catch (e) { ; if (-1 === e.code) return; null != g(a = _) && R(a, { requestState: 0, abortController: null, lastUpdated: Date.now() }); return } await v(_) } function U(e) { return C(t => { var n; return (null === (n = t[p(e)]) || void 0 === n ? void 0 : n.requestState) === 2 }) } function b(e) { return C(t => { var n; return (null === (n = t[p(e)]) || void 0 === n ? void 0 : n.requestState) === 4 }) } class G extends E.default { handleInitialize(e) { let { guildId: t } = e; return D(t), P(t) } handleGuildDelete(e) { let { guild: t } = e; return D(t.id) } handleSearchStateUpdate(e) { let { guildId: t } = e; return P(t) } handlePaginationUpdate(e) { let { guildId: t } = e; return P(t) } handleGuildMemberSearchSuccess(e) { let { guildId: t } = e; return v(p(t)) } handleGuildMemberSearchStillIndexing(e) { let { guildId: t } = e; R(p(t), { requestState: 4, abortController: null, lastUpdated: Date.now() }) } handleNewMemberTimestampRefresh(e) { let { guildId: t } = e; return P(t) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { INITIALIZE_MEMBER_SAFETY_STORE: e => this.handleInitialize(e), GUILD_DELETE: e => this.handleGuildDelete(e), MEMBER_SAFETY_SEARCH_STATE_UPDATE: e => this.handleSearchStateUpdate(e), MEMBER_SAFETY_PAGINATION_UPDATE: e => this.handlePaginationUpdate(e), MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS: e => this.handleGuildMemberSearchSuccess(e), MEMBER_SAFETY_GUILD_MEMBER_SEARCH_STILL_INDEXING: e => this.handleGuildMemberSearchStillIndexing(e), MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH: e => this.handleNewMemberTimestampRefresh(e) }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new G }, 893966: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"), n("653041"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("314897"), d = n("271383"), _ = n("430824"), c = n("594174"), E = n("709054"), I = n("752560"), T = n("588215"), f = n("44715"), S = n("327999"), h = n("981631"); let A = !1, m = {}; function N(e) { return null == m[e] && (m[e] = new I.GuildMemberSafetyPageStore(e)), m[e] } function p(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; N(e).reset(t) } function O() { return !1 } function C(e) { let t = !1, n = N(e.guildId); return "GUILD_ROLE_DELETE" === e.type && (t = n.removeRoleFromSearchState(e.roleId)), n.rebuildAllMembers() || t } function R(e) { let { guildId: t, userId: n } = e; return N(t).updateMembersByMemberIds([n]) } function g(e) { let t = !1; return e.guilds.forEach(e => { let { id: n, members: i } = e; t = N(n).updateServerMembers(i) || t }), t } class L extends(i = o.default.Store) { initialize() { this.waitFor(u.default, d.default, c.default) } isInitialized(e) { return N(e).isInitialized } getMembersByGuildId(e, t) { return N(e).getMembersByIndex(t) } getMembersCountByGuildId(e, t) { return N(e).countMembersByIndex(t) } getEstimatedMemberSearchCountByGuildId(e) { let t = N(e), n = t.searchChunkSize, i = t.countMembersByIndex(t.getSearchIndex()), r = t.getTotalResultsCount(); return null == r || r < n ? i : r } getKnownMemberSearchCountByGuildId(e) { let t = N(e); return t.countMembersByIndex(t.getSearchIndex()) } getCurrentMemberSearchResultsByGuildId(e) { let t = N(e); return t.getMembersByIndex(t.getSearchIndex()) } getSearchStateByGuildId(e) { return N(e).getSearchState() } hasDefaultSearchStateByGuildId(e) { return N(e).hasDefaultSearchState() } getPagedMembersByGuildId(e) { return N(e).getPaginatedMembers() } getPaginationStateByGuildId(e) { return N(e).getPaginationState() } getElasticSearchPaginationByGuildId(e) { return N(e).getElasticSearchPagination() } getEnhancedMember(e, t) { return N(e).getMember(t) } getNewMemberTimestamp(e) { return N(e).getNewMemberTimestamp() } getLastRefreshTimestamp(e) { return N(e).lastRefreshTimestamp } getLastCursorTimestamp(e) { return N(e).lastCursorTimestamp } } a = "MemberSafetyStore", (s = "displayName") in(r = L) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a; let v = new L(l.default, { CONNECTION_OPEN: function(e) { return A ? A = !1 : ! function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; for (let t in m) p(t, e) }(!0), g(e) }, CONNECTION_OPEN_SUPPLEMENTAL: function(e) { return g(e) }, LOCAL_MESSAGES_LOADED: function(e) { let { guildId: t, members: n } = e; if (null == t || null == _.default.getGuild(t)) return !1; A = !0; let i = N(t), r = []; for (let e of n) null == i.getMember(e.userId) && r.push(e); return r.length > 0 && i.updateClientMembers(r) }, CACHE_LOADED: function(e) { let { guildMembers: t } = e, n = !1; return A = !0, E.default.entries(t).forEach(e => { let [t, i] = e; n = N(t).updateClientMembers(Object.values(i)) || n }), n }, PASSIVE_UPDATE_V2: function(e) { let { members: t, guildId: n } = e; return !!(t.length > 0) && N(n).updateServerMembers(t) }, GUILD_CREATE: function(e) { let { guild: t } = e, n = N(t.id); p(t.id, n.isInitialized) }, GUILD_DELETE: function(e) { let { guild: { id: t } } = e; p(t) }, GUILD_MEMBERS_CHUNK_BATCH: function(e) { let { chunks: t } = e, n = !1; for (let e of t) n = N(e.guildId).updateServerMembers(e.members) || n; return n }, GUILD_MEMBER_ADD: O, GUILD_MEMBER_UPDATE: O, GUILD_MEMBER_UPDATE_LOCAL: function(e) { let { guildId: t } = e, n = u.default.getId(); return N(t).updateMembersByMemberIds([n]) }, GUILD_MEMBER_REMOVE: function(e) { let { guildId: t, user: n } = e; return N(t).removeMember(n.id) }, GUILD_ROLE_UPDATE: C, GUILD_ROLE_DELETE: C, GUILD_MEMBER_PROFILE_UPDATE: function(e) { let { guildId: t, guildMember: n } = e; return N(t).updateMembersByMemberIds([n.user.id]) }, GUILD_ROLE_MEMBER_REMOVE: R, GUILD_ROLE_MEMBER_ADD: R, THREAD_MEMBER_LIST_UPDATE: function(e) { let { guildId: t, members: n } = e; if (null == n || 0 === n.length) return !1; let i = N(t), r = n.reduce((e, t) => { if (null != t.member) { let n = t.member.user.id; e.push(n) } return e }, []); return i.updateMembersByMemberIds(r) }, THREAD_MEMBERS_UPDATE: function(e) { let { guildId: t, addedMembers: n } = e; if (null == n || 0 === n.length) return !1; let i = N(t), r = n.reduce((e, t) => { let n = t.userId; return e.push(n), e }, []); return i.updateMembersByMemberIds(r) }, LOAD_ARCHIVED_THREADS_SUCCESS: function(e) { let { guildId: t, members: n } = e; if (null == n || 0 === n.length) return !1; let i = N(t), r = n.reduce((e, t) => { let n = t.userId; return e.push(n), e }, []); return i.updateMembersByMemberIds(r) }, LOAD_FORUM_POSTS: function(e) { let { guildId: t, threads: n } = e, i = Object.values(n); if (0 === i.length) return !1; let r = N(t), s = i.reduce((e, t) => { if (null != t.owner) { let n = t.owner.user.id; e.push(n) } return e }, []); return r.updateMembersByMemberIds(s) }, INITIALIZE_MEMBER_SAFETY_STORE: function(e) { let { guildId: t } = e; return N(t).initialize() }, MEMBER_SAFETY_NEW_MEMBER_TIMESTAMP_REFRESH: function(e) { let { guildId: t } = e; return N(t).refreshNewMembersAndSearchResults() }, MEMBER_SAFETY_PAGINATION_UPDATE: function(e) { let { guildId: t, pagination: n } = e, [i] = N(t).updatePaginationState(n); return i }, MEMBER_SAFETY_PAGINATION_TOKEN_UPDATE: function(e) { let { guildId: t, continuationToken: n } = e; return N(t).updatePaginationToken(n) }, MEMBER_SAFETY_SEARCH_STATE_UPDATE: function(e) { let { guildId: t, searchState: n } = e; return N(t).updateSearchState(n) }, FETCH_GUILD_MEMBER_SUPPLEMENTAL_SUCCESS: function(e) { let { guildId: t, memberSupplementals: n } = e, i = (0, f.syncMemberSupplemental)(t, n); return i && N(t).updateMembersByMemberIds(n.map(e => e.userId)), i }, MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS: function(e) { var t, n, i, r, s, a; let o, l; let { guildId: u, members: d, total_result_count: _ } = e, c = N(u), { memberIds: E, memberSupplementals: I } = d.reduce((e, t) => { let { member: n, source_invite_code: i, join_source_type: r, inviter_id: s } = t, a = n.user; return e.memberIds.push(a.id), e.memberSupplementals.push({ userId: a.id, sourceInviteCode: i, joinSourceType: r, inviterId: s }), e }, { memberIds: [], memberSupplementals: [] }), A = (0, f.syncMemberSupplemental)(u, I); (0, S.registerFetchedSupplementals)(u, E); let m = c.updateSearchedMembersByMemberIds(E); d.length > 0 && (o = d[0], l = d[d.length - 1]); let [p] = c.updatePaginationState({ totalResultsCount: _, elasticSearchCursor: { before: (0, T.createMemberSearchCursor)({ joinedAt: null == o ? void 0 : null === (t = o.member) || void 0 === t ? void 0 : t.joined_at, userId: null !== (s = null == o ? void 0 : null === (n = o.member) || void 0 === n ? void 0 : n.user.id) && void 0 !== s ? s : h.EMPTY_STRING_SNOWFLAKE_ID }), after: (0, T.createMemberSearchCursor)({ joinedAt: null == l ? void 0 : null === (i = l.member) || void 0 === i ? void 0 : i.joined_at, userId: null !== (a = null == l ? void 0 : null === (r = l.member) || void 0 === r ? void 0 : r.user.id) && void 0 !== a ? a : h.EMPTY_STRING_SNOWFLAKE_ID }) } }, !1); return A || m || p }, MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH: function(e) { let { guildId: t, userIds: n } = e; return N(t).updateMembersByMemberIds(n) } }); t.default = v }, 313298: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("147913"), s = n("650774"), a = n("709054"), o = n("893966"); let l = {}, u = {}, d = null; async function _(e, t) { null == l[e] && (l[e] = new Set), l[e].add(t), null == u[e] && (u[e] = Date.now()), E(e) && await c(e) } function c(e) { if (null == l[e]) return; let t = Array.from(l[e]); l[e] = new Set, u[e] = Date.now(), requestAnimationFrame(async () => { await i.default.dispatch({ type: "MEMBER_SAFETY_GUILD_MEMBER_UPDATE_BATCH", guildId: e, userIds: t }) }) } function E(e) { let t = l[e]; if (null == t) return !1; let n = t.size >= function(e) { var t; let n = null !== (t = s.default.getMemberCount(e)) && void 0 !== t ? t : 0; return n >= 75e3 ? 10 : 2 }(e), i = u[e]; if (n) return !0; if (null == i) return !1; let r = Date.now() - i; return null != i && r >= function(e) { var t; let n = null !== (t = s.default.getMemberCount(e)) && void 0 !== t ? t : 0; return n >= 75e3 ? 5e3 : 2e3 }(e) } function I(e) { l[e] = new Set, u[e] = null } class T extends r.default { handleInitialize() { null == d && null == d && (d = setInterval(() => { a.default.forEachKey(l, e => { E(e) && c(e) }) }, 1e4)) } handleGuildMemberUpdate(e, t) { if (o.default.isInitialized(e)) return _(e, t) } handleGuildMemberRemove(e, t) { if (o.default.isInitialized(e)) return _(e, t) } handleGuildDelete(e) { let t = e.guild.id; o.default.isInitialized(t) && I(t) } handleGuildMemberSearchSuccess(e) { let { guildId: t } = e; o.default.isInitialized(t) && I(t) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { INITIALIZE_MEMBER_SAFETY_STORE: () => this.handleInitialize(), GUILD_MEMBER_ADD: e => this.handleGuildMemberUpdate(e.guildId, e.user.id), GUILD_MEMBER_UPDATE: e => this.handleGuildMemberUpdate(e.guildId, e.user.id), GUILD_MEMBER_REMOVE: e => this.handleGuildMemberRemove(e.guildId, e.user.id), MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS: e => this.handleGuildMemberSearchSuccess(e) }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new T }, 44715: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMemberSupplementalByGuildId: function() { return s }, syncMemberSupplemental: function() { return a } }); var i = n("327999"); let r = {}; function s(e) { return null == r[e] && (r[e] = {}), r[e] } function a(e, t) { if (0 === t.length) return !1; let n = s(e); return t.forEach(e => { var t, r, s, a, o, l, u, d; let _ = n[e.userId], c = null !== (r = null !== (t = e.joinSourceType) && void 0 !== t ? t : null == _ ? void 0 : _.joinSourceType) && void 0 !== r ? r : null; (null == c || c === i.JoinSourceType.UNSPECIFIED) && null != e.sourceInviteCode && (c = i.JoinSourceType.INVITE), n[e.userId] = { userId: e.userId, sourceInviteCode: null !== (a = null !== (s = e.sourceInviteCode) && void 0 !== s ? s : null == _ ? void 0 : _.sourceInviteCode) && void 0 !== a ? a : null, joinSourceType: c, inviterId: null !== (l = null !== (o = e.inviterId) && void 0 !== o ? o : null == _ ? void 0 : _.inviterId) && void 0 !== l ? l : null, integrationType: null !== (d = null !== (u = e.integrationType) && void 0 !== u ? u : null == _ ? void 0 : _.integrationType) && void 0 !== d ? d : null } }), !0 } }, 327999: function(e, t, n) { "use strict"; n.r(t), n.d(t, { JoinSourceType: function() { return r }, fetchMemberSupplemental: function() { return g }, getIntegrationLabel: function() { return O }, getJoinSourceTypeLabel: function() { return p }, registerFetchedSupplementals: function() { return N }, useGetIntegrationIconString: function() { return C } }), n("653041"); var i, r, s, a, o, l, u = n("544891"), d = n("780384"), _ = n("410030"), c = n("726542"), E = n("122021"), I = n("981631"), T = n("689938"); let f = {}; function S(e, t) { return e + t } function h(e, t) { return t.map(t => e + t) } function A(e) { return e.split("-")[1] }(a = i || (i = {}))[a.FAILED = 0] = "FAILED", a[a.UNFETCHED = 1] = "UNFETCHED", a[a.PENDING = 2] = "PENDING", a[a.SUCCEEDED = 3] = "SUCCEEDED", a[a.FAILED_NO_RETRY = 4] = "FAILED_NO_RETRY"; function m(e, t) { e.forEach(e => { f[e] = t }) } function N(e, t) { t.forEach(t => (function(e, t, n) { f[e + t] = 3 })(e, t, 3)) }(o = r || (r = {}))[o.UNSPECIFIED = 0] = "UNSPECIFIED", o[o.BOT = 1] = "BOT", o[o.INTEGRATION = 2] = "INTEGRATION", o[o.DISCOVERY = 3] = "DISCOVERY", o[o.HUB = 4] = "HUB", o[o.INVITE = 5] = "INVITE", o[o.VANITY_URL = 6] = "VANITY_URL", o[o.MANUAL_MEMBER_VERIFICATION = 7] = "MANUAL_MEMBER_VERIFICATION"; let p = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0, n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; switch (e) { case 1: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_BOT; case 2: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_INTEGRATION; case 3: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_DISCOVERY; case 4: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_HUB; case 5: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_INVITE; case 6: if (null != t && !n) return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_VANITY_URL_LABEL_NAME.format({ vanityUrl: t }); return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_VANITY_URL; case 7: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_MANUAL_VERIFICATION; default: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_UNKNOWN } }; (l = s || (s = {})).DISCORD = "discord", l.TWITCH = "twitch", l.YOUTUBE = "youtube", l.GUILD_SUBSCRIPTION = "guild_subscription"; let O = e => { switch (e) { case "twitch": return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_INTEGRATION_TWITCH; case "youtube": return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_INTEGRATION_YOUTUBE; default: return T.default.Messages.MEMBER_SAFETY_JOIN_TYPE_INTEGRATION } }, C = e => { let t = c.default.get((0, E.useLegacyPlatformType)(e)), n = (0, _.default)(); return null != t && ["twitch", "youtube"].includes(e) ? "url('".concat((0, d.isThemeDark)(n) ? t.icon.darkSVG : t.icon.lightSVG, "')") : null }; function R(e) { return { userId: e.user_id, sourceInviteCode: e.source_invite_code, joinSourceType: e.join_source_type, inviterId: e.inviter_id, integrationType: e.integration_type } } async function g(e, t) { let n = h(e, t), i = n.filter(e => f[e] <= 1).map(A); if (0 === i.length) return []; m(n, 2); try { let t = await u.HTTP.post({ url: I.Endpoints.MEMBER_SAFETY_SUPPLEMENTAL(e), body: { user_ids: i } }); if (!Array.isArray(t.body)) return m(n, 0), []; let r = t.body.map(R), s = []; r.forEach(e => { let { userId: t } = e; return s.push(t) }); let a = h(e, s), o = i.filter(e => !s.includes(e)), l = h(e, o); return m(a, 3), m(l, 0), r } catch (e) { m(n, 0) } return [] } }, 331551: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getSortValueForMember: function() { return s } }); var i = n("815790"), r = n("588215"); function s(e, t) { let n = (0, i.getJoinedAtTimestamp)(e.joinedAt); switch (t) { case r.OrderBy.ORDER_BY_GUILD_JOINED_AT_ASC: return n; case r.OrderBy.ORDER_BY_GUILD_JOINED_AT_DESC: return -n; case r.OrderBy.ORDER_BY_USER_ID_ASC: return parseInt(e.userId); case r.OrderBy.ORDER_BY_USER_ID_DESC: return -parseInt(e.userId); default: return -n } } }, 156699: function(e, t, n) { "use strict"; n.r(t), n.d(t, { checkDefaultChannelThresholdMetAfterChannelPermissionDeny: function() { return T }, isDefaultChannelThresholdMetAfterDelete: function() { return E } }), n("47120"); var i = n("149765"), r = n("668781"), s = n("434404"), a = n("430824"), o = n("745752"), l = n("45966"), u = n("637853"), d = n("290511"), _ = n("981631"), c = n("689938"); async function E(e, t) { return null == e || await I(e, t, { removingView: !0, removingChat: !0 }) } async function I(e, t, n) { var i; let r = a.default.getGuild(e); if (null == r) return !0; let s = null != r && (null === (i = r.features) || void 0 === i ? void 0 : i.has(_.GuildFeatures.GUILD_ONBOARDING)); if (!s) return !0; s && l.default.shouldFetchPrompts(e) && await (0, o.fetchOnboardingPrompts)(e); let c = l.default.getDefaultChannelIds(e), [E, I] = (0, u.getChattableDefaultChannels)(e, c); if (!c.includes(t)) return !0; let T = n.removingView && I.length - 1 < d.MIN_NUMBER_OF_DEFAULT_CHANNELS_FOR_ONBOARDING, f = (n.removingChat || n.removingView) && E.length - 1 < d.NUM_DEFAULT_CHATTABLE_CHANNELS_MIN; return !T && !f } async function T(e, t, n) { let a = e.getGuildId(); if (null == a) return !0; null != n && (t = i.filter(t, i.invert(n))); let o = e.permissionOverwrites[a], l = null != o ? i.filter(o.deny, i.invert(o.allow)) : i.deserialize(0), u = { removingView: i.has(t, _.Permissions.VIEW_CHANNEL) && !i.has(l, _.Permissions.VIEW_CHANNEL), removingChat: !1 }; return e.isForumLikeChannel() ? u.removingChat = i.has(t, _.Permissions.SEND_MESSAGES_IN_THREADS) && !i.has(l, _.Permissions.SEND_MESSAGES_IN_THREADS) : u.removingChat = i.has(t, _.Permissions.SEND_MESSAGES) && !i.has(l, _.Permissions.SEND_MESSAGES), !u.removingChat && !u.removingView || !!await I(a, e.id, u) || (r.default.show({ title: c.default.Messages.CANNOT_CHANGE_CHANNEL_PERMS, body: c.default.Messages.ONBOARDING_CHANNEL_THRESHOLD_WARNING.format({ onClick: () => { r.default.close(), s.default.open(a, _.GuildSettingsSections.ONBOARDING) } }) }), !1) } }, 977258: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canChannelBeDefault: function() { return o } }), n("442837"); var i = n("430198"), r = n("592125"), s = n("700785"), a = n("981631"); function o(e, t) { return i.default.isChannelGated(e, t) || s.canEveryoneRole(a.Permissions.VIEW_CHANNEL, r.default.getChannel(t)) } }, 549817: function(e, t, n) { "use strict"; n.r(t), n("536091"), n("47120"), n("789020"); var i = n("392711"), r = n.n(i), s = n("544891"), a = n("570140"), o = n("45114"), l = n("367907"), u = n("781792"), d = n("962086"), _ = n("160404"), c = n("152376"), E = n("592125"), I = n("271383"), T = n("594174"), f = n("626135"), S = n("630388"), h = n("823379"), A = n("960048"), m = n("709054"), N = n("45966"), p = n("637853"), O = n("816436"), C = n("981631"), R = n("372897"), g = n("490897"); function L(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (_.default.isFullServerPreview(e)) return; let n = t ? N.default.getOnboardingPromptsForOnboarding(e) : N.default.getOnboardingPrompts(e), i = N.default.getOnboardingResponses(e), r = n.map(e => e.options.filter(e => i.includes(e.id))).flat(), o = {}, l = {}; return (n.forEach(e => { o[e.id] = Date.now(), e.options.forEach(e => l[e.id] = Date.now()) }), t) ? s.HTTP.post({ url: C.Endpoints.GUILD_ONBOARDING_RESPONSES(e), body: { onboarding_responses: r.map(e => e.id), onboarding_prompts_seen: o, onboarding_responses_seen: l } }).then(t => { null != t.body && a.default.dispatch({ type: "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS", guildId: e, options: t.body.onboarding_responses, prompts_seen: t.body.onboarding_prompts_seen, options_seen: t.body.onboarding_responses_seen }) }).catch(e => A.default.captureException(e)) : s.HTTP.put({ url: C.Endpoints.GUILD_ONBOARDING_RESPONSES(e), body: { onboarding_responses: r.map(e => e.id), onboarding_prompts_seen: o, onboarding_responses_seen: l } }).then(t => { null != t.body && a.default.dispatch({ type: "GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS", guildId: e, options: t.body.onboarding_responses, prompts_seen: t.body.onboarding_prompts_seen, options_seen: t.body.onboarding_responses_seen }) }).catch(e => A.default.captureException(e)) } t.default = { selectOption(e, t, n, i) { let s = N.default.getOnboardingPrompt(t); if (null == s) return; let o = s.singleSelect ? r().without(r().map(s.options, "id"), n) : []; a.default.dispatch({ type: "GUILD_ONBOARDING_SELECT_OPTION", guildId: e, promptId: t, optionId: n, selected: i, removedOptionIds: o }) }, updateOnboardingResponses: r().debounce(L, 1e3), updateRolesLocal: function(e, t, n) { var i, s; let o = null !== (s = null === (i = I.default.getSelfMember(e)) || void 0 === i ? void 0 : i.roles) && void 0 !== s ? s : []; if (_.default.isViewingRoles(e)) { (0, d.updateImpersonatedRoles)(e, r().difference(r().union(o, t), n)); return }(t.length > 0 || n.length > 0) && a.default.dispatch({ type: "GUILD_MEMBER_UPDATE_LOCAL", guildId: e, roles: r().difference(r().union(o, t), n), addedRoleIds: t, removedRoleIds: n }) }, completeOnboarding(e, t) { let n = t.length > 0 ? t[t.length - 1] : null, i = N.default.getSelectedOptions(e), r = (0, p.getSelectedRoleIds)(i), s = (0, p.getSelectedChannelIds)(i), a = N.default.getEnabled(e) ? N.default.getDefaultChannelIds(e) : [], [u, c] = (0, p.getChannelCoverageForOnboarding)(e, t, a), A = [...s, ...a], v = A.map(e => E.default.getChannel(e)).filter(h.isNotNullish), D = (0, O.getFlattenedChannels)(e, new Set(A), v, !0).length, M = null == n ? [] : n.options.map(e => e.id); if (f.default.track(C.AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, { ...(0, l.collectGuildAnalyticsMetadata)(e), step: t.length - 1, options_selected: null == n ? 0 : i.filter(e => M.includes(e.id)).length, skipped: M.length > 0, back: !1, in_onboarding: !0, is_final_step: !0, roles_granted: r.size, channels_granted: D, guild_onboarding_covered_channel_ids: u.map(e => e.id), guild_onboarding_uncovered_channel_ids: c.map(e => e.id) }), (0, o.ackGuildFeature)(e, g.ReadStateTypes.GUILD_ONBOARDING_QUESTION, m.default.fromTimestamp(Date.now())), L(e, !0), _.default.isFullServerPreview(e)) { (0, d.updateImpersonatedChannels)(e, A, []), (0, d.updateImpersonatedData)(e, { optInEnabled: !0 }), (0, d.updateImpersonatedRoles)(e, Array.from(r)); let t = T.default.getCurrentUser(); if (null != t) { var y, P; let n = null !== (P = null === (y = I.default.getMember(e, t.id)) || void 0 === y ? void 0 : y.flags) && void 0 !== P ? P : 0; (0, d.updateImpersonatedData)(e, { memberOptions: { flags: (0, S.setFlag)(n, R.GuildMemberFlags.COMPLETED_ONBOARDING, !0) } }) } } }, onboardExistingMember(e, t) { let n = new Set(t); (N.default.getEnabled(e) ? N.default.getDefaultChannelIds(e) : []).forEach(e => n.add(e)), n.size > 0 && (0, c.bulkOptInChannels)(e, Array.from(n), !0, { page: C.AnalyticsPages.GUILD_ONBOARDING }) }, finishOnboarding(e) { a.default.dispatch({ type: "GUILD_ONBOARDING_COMPLETE", guildId: e }) }, setUserOnboardingStep(e, t) { a.default.dispatch({ type: "GUILD_ONBOARDING_SET_STEP", guildId: e, step: t }) }, async resetOnboarding(e) { let t = T.default.getCurrentUser(); if (null != t) { var n, i; let r = null !== (i = null === (n = I.default.getMember(e, t.id)) || void 0 === n ? void 0 : n.flags) && void 0 !== i ? i : 0; await (0, u.updateGuildSelfMember)(e, { flags: (0, S.setFlag)(r, R.GuildMemberFlags.COMPLETED_ONBOARDING, !1) }) } } } }, 745752: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchOnboardingPrompts: function() { return f }, loadOnboardingPrompts: function() { return T }, maybeFetchOnboardingPrompts: function() { return S }, startOnboarding: function() { return h } }), n("789020"); var i = n("544891"), r = n("570140"), s = n("367907"), a = n("314897"), o = n("271383"), l = n("430824"), u = n("626135"), d = n("630388"), _ = n("45966"), c = n("290511"), E = n("981631"), I = n("372897"); function T(e) { u.default.track(E.AnalyticEvents.GUILD_ONBOARDING_LOADED, { ...(0, s.collectGuildAnalyticsMetadata)(e), has_new_prompts: !1, number_of_prompts: 0 }) } function f(e) { return r.default.dispatch({ type: "GUILD_ONBOARDING_PROMPTS_FETCH_START", guildId: e }), i.HTTP.get({ url: E.Endpoints.GUILD_ONBOARDING(e) }).then(t => { let { body: n } = t, i = (0, c.serverApiResponseToClientState)(n); return r.default.dispatch({ type: "GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS", guildId: e, ...i }).then(() => i.prompts) }, t => (r.default.dispatch({ type: "GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE", guildId: e }), t)) } async function S(e) { var t, n; let i = a.default.getId(), r = (0, d.hasFlag)(null !== (n = null === (t = o.default.getMember(e, i)) || void 0 === t ? void 0 : t.flags) && void 0 !== n ? n : 0, I.GuildMemberFlags.COMPLETED_ONBOARDING), s = l.default.getGuild(e); if (null == s || !s.hasFeature(E.GuildFeatures.GUILD_ONBOARDING)) return Promise.resolve(); let u = _.default.shouldFetchPrompts(e), c = _.default.getOnboardingPrompts(e); if (!u && c.length > 0) return c.every(e => !e.inOnboarding) ? (A(e), Promise.resolve()) : (!r && h(e), Promise.resolve()); let T = await f(e); return Array.isArray(T) && T.every(e => !e.inOnboarding) ? (A(e), Promise.resolve()) : (!r && h(e), T) } function h(e) { r.default.dispatch({ type: "GUILD_ONBOARDING_START", guildId: e }) } function A(e) { u.default.track(E.AnalyticEvents.GUILD_ONBOARDING_STEP_VIEWED, { ...(0, s.collectGuildAnalyticsMetadata)(e), step: -2, required: !0 }), u.default.track(E.AnalyticEvents.GUILD_ONBOARDING_STEP_COMPLETED, { ...(0, s.collectGuildAnalyticsMetadata)(e), step: -2, skipped: !1, is_final_step: !0, in_onboarding: !0 }) } }, 290511: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DROPDOWN_MAX_NUM_OPTIONS: function() { return S }, GuildOnboardingMode: function() { return l }, GuildOnboardingTab: function() { return a }, MAX_NUMBER_OF_ONBOARDING_PROMPTS_IN_ONBOARDING: function() { return h }, MAX_NUM_PROMPTS: function() { return T }, MAX_PROMPT_OPTION_DESCRIPTION_LENGTH: function() { return I }, MAX_PROMPT_OPTION_TITLE_LENGTH: function() { return E }, MAX_PROMPT_TITLE_LENGTH: function() { return c }, MIN_NUMBER_OF_DEFAULT_CHANNELS_FOR_ONBOARDING: function() { return A }, MULTIPLE_CHOICE_MAX_NUM_OPTIONS: function() { return f }, NUM_DEFAULT_CHATTABLE_CHANNELS_MIN: function() { return m }, ONBOARDING_PROMPT_TYPE_SWITCH_THRESHOLD: function() { return N }, OnboardingPromptType: function() { return o }, clientPromptToServerPrompt: function() { return R }, getDefaultPrompt: function() { return O }, getEmptyPrompt: function() { return C }, isDefaultPrompt: function() { return p }, isEmojiEmpty: function() { return v }, serverApiResponseToClientState: function() { return L } }); var i, r, s, a, o, l, u = n("348327"), d = n.n(u), _ = n("689938"); let c = 100, E = 50, I = 100, T = 15, f = 12, S = 50, h = 4, A = 7, m = 5, N = 13; function p(e) { if (e.options.length > 0) return !1; let { id: t, ...n } = O(), { id: i, ...r } = e; return d()(n, r) } function O() { return { id: String(Date.now()), title: _.default.Messages.ONBOARDING_PROMPT_DEFAULT_TITLE, options: [], singleSelect: !1, required: !1, inOnboarding: !0, type: 0 } } function C(e) { return { id: String(Date.now()), title: "", options: [], singleSelect: !1, required: !1, inOnboarding: e, type: 0 } } function R(e) { return { id: e.id, options: e.options.map(e => { var t, n, i; return { id: e.id, channel_ids: e.channelIds, role_ids: e.roleIds, emoji: e.emoji, emoji_id: null === (t = e.emoji) || void 0 === t ? void 0 : t.id, emoji_name: null === (n = e.emoji) || void 0 === n ? void 0 : n.name, emoji_animated: null === (i = e.emoji) || void 0 === i ? void 0 : i.animated, title: e.title, description: e.description } }), title: e.title, single_select: e.singleSelect, disabled: e.disabled, required: e.required, in_onboarding: e.inOnboarding, type: e.type } } function g(e) { return { id: e.id, options: e.options.map(e => { var t; return { id: e.id, channelIds: e.channel_ids, roleIds: e.role_ids, emoji: e.emoji, title: e.title, description: null !== (t = e.description) && void 0 !== t ? t : "" } }), title: e.title, singleSelect: e.single_select, disabled: e.disabled, required: e.required, inOnboarding: e.in_onboarding, type: e.type } } function L(e) { var t, n, i; return { prompts: e.prompts.map(g), defaultChannelIds: e.default_channel_ids, responses: null !== (t = e.responses) && void 0 !== t ? t : [], mode: e.mode, enabled: e.enabled, onboardingPromptsSeen: null !== (n = e.onboarding_prompts_seen) && void 0 !== n ? n : {}, onboardingResponsesSeen: null !== (i = e.onboarding_responses_seen) && void 0 !== i ? i : {}, belowRequirements: e.below_requirements } } function v(e) { return null == e || null == e.id && null == e.name }(i = a || (a = {}))[i.CUSTOMIZE = 0] = "CUSTOMIZE", i[i.BROWSE = 1] = "BROWSE", (r = o || (o = {}))[r.MULTIPLE_CHOICE = 0] = "MULTIPLE_CHOICE", r[r.DROPDOWN = 1] = "DROPDOWN", (s = l || (l = {}))[s.ONBOARDING_DEFAULT = 0] = "ONBOARDING_DEFAULT", s[s.ONBOARDING_ADVANCED = 1] = "ONBOARDING_ADVANCED" }, 45966: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("536091"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("160404"), c = n("592125"), E = n("70956"), I = n("709054"), T = n("977258"), f = n("819553"), S = n("290511"); let h = {}, A = {}, m = {}, N = !1; function p(e, t, n) { return e.map(e => (function(e, t, n) { let i = !1, r = []; for (let t = 0; t < e.options.length; t++) { let s = e.options[t], a = null == n[s.id]; a && (i = !0), r.push({ ...s, isUnseen: a }) } return { ...e, options: r, hasNewAnswers: i, isNew: null == t[e.id] } })(e, t, n)) } function O(e) { var t, n, i, r, s, a, o, l, u; let { guildId: d, updates: _ } = e, c = null !== (s = null !== (r = _.onboardingPromptsSeen) && void 0 !== r ? r : null === (t = h[d]) || void 0 === t ? void 0 : t.onboardingPromptsSeen) && void 0 !== s ? s : {}, E = null !== (o = null !== (a = _.onboardingResponsesSeen) && void 0 !== a ? a : null === (n = h[d]) || void 0 === n ? void 0 : n.onboardingResponsesSeen) && void 0 !== o ? o : {}, I = p(null !== (u = null !== (l = _.prompts) && void 0 !== l ? l : null === (i = h[d]) || void 0 === i ? void 0 : i.prompts) && void 0 !== u ? u : [], c, E); h[d] = { ...h[d], ..._, prompts: I } } function C(e, t) { if (null == A[e]) return; let n = {}; Object.keys(A[e]).forEach(i => { !t.includes(i) && A[e][i] ? n[i] = !0 : t.includes(i) && !1 === A[e][i] && (n[i] = !1) }), A[e] = n; let i = t.filter(e => null == n[e] || !0 === n[e]); Object.keys(n).forEach(e => { !0 === n[e] && !t.includes(e) && i.push(e) }), h[e] = { ...h[e], responses: i } } let R = [], g = [], L = []; class v extends(i = u.default.Store) { initialize() { this.waitFor(c.default, f.default, _.default) } getOnboardingPromptsForOnboarding(e) { var t, n; return null !== (n = null === (t = h[e]) || void 0 === t ? void 0 : t.onboardingPrompts) && void 0 !== n ? n : R } getOnboardingPrompts(e) { var t, n; return null !== (n = null === (t = h[e]) || void 0 === t ? void 0 : t.prompts) && void 0 !== n ? n : R } getOnboardingResponses(e) { var t, n, i; return _.default.isFullServerPreview(e) ? Array.from(null !== (n = _.default.getOnboardingResponses(e)) && void 0 !== n ? n : g) : null !== (i = null === (t = h[e]) || void 0 === t ? void 0 : t.responses) && void 0 !== i ? i : g } getSelectedOptions(e) { let t = this.getOnboardingResponses(e); return this.getOnboardingPrompts(e).map(e => e.options).flat().filter(e => t.includes(e.id)) } getOnboardingResponsesForPrompt(e, t) { let n = h[e]; if (null == n) return g; let i = n.prompts.find(e => e.id === t); return null == i ? g : l().intersection(i.options.map(e => e.id), this.getOnboardingResponses(e)) } getEnabledOnboardingPrompts(e) { var t, n; let i = h[e]; return _.default.isFullServerPreview(e) ? null !== (t = null == i ? void 0 : i.prompts) && void 0 !== t ? t : R : null != i && i.enabled ? null !== (n = i.prompts) && void 0 !== n ? n : R : R } getDefaultChannelIds(e) { var t, n; return null !== (n = null === (t = h[e]) || void 0 === t ? void 0 : t.defaultChannelIds) && void 0 !== n ? n : L } getEnabled(e) { var t, n; return _.default.isFullServerPreview(e) ? null != h[e] : null !== (n = null === (t = h[e]) || void 0 === t ? void 0 : t.enabled) && void 0 !== n && n } getOnboardingPrompt(e) { return Object.values(h).map(e => e.prompts).flat().find(t => t.id === e) } isLoading() { return N } shouldFetchPrompts(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : E.default.Millis.HOUR; if (N) return !1; let n = m[e]; return null == n || Date.now() - n > t } getPendingResponseOptions(e) { return A[e] } ackIdForGuild(e) { let t = this.getEnabledOnboardingPrompts(e), n = "0"; return t.forEach(e => { e.options.forEach(e => { I.default.compare(e.id, n) > 0 && (n = e.id) }), I.default.compare(e.id, n) > 0 && (n = e.id) }), n } lastFetchedAt(e) { return m[e] } isAdvancedMode(e) { var t; return null != e && (null === (t = h[e]) || void 0 === t ? void 0 : t.mode) === S.GuildOnboardingMode.ONBOARDING_ADVANCED } } a = "GuildOnboardingPromptsStore", (s = "displayName") in(r = v) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new v(d.default, { CONNECTION_OPEN: function() { N = !1, h = {} }, GUILD_ONBOARDING_PROMPTS_FETCH_START: function() { N = !0 }, GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS: function(e) { let { guildId: t, prompts: n, defaultChannelIds: i, enabled: r, responses: s, onboardingPromptsSeen: a, onboardingResponsesSeen: o, mode: l, belowRequirements: u } = e; N = !1; let d = f.default.getOnboardingStatus(t) === f.GuildOnboardingStatus.READY, _ = p(n, a, o); h[t] = { enabled: r, mode: l, belowRequirements: u, prompts: _, onboardingPrompts: _.filter(e => e.inOnboarding), defaultChannelIds: i.filter(e => (0, T.canChannelBeDefault)(t, e)), responses: d ? [] : s, onboardingPromptsSeen: a, onboardingResponsesSeen: o }, !d && C(t, s), m[t] = Date.now() }, GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE: function() { N = !1 }, GUILD_ONBOARDING_SELECT_OPTION: function(e) { let { guildId: t, optionId: n, selected: i, removedOptionIds: r } = e; return !!_.default.isFullServerPreview(t) || null != h[t] && (null != r && r.length > 0 && l().pullAll(h[t].responses, r), i ? h[t].responses.push(n) : l().pull(h[t].responses, n), null == A[t] && (A[t] = {}), A[t][n] = i, null != r && r.forEach(e => A[t][e] = !1), A[t] = { ...A[t] }, !0) }, GUILD_ONBOARDING_UPDATE_RESPONSES_SUCCESS: function(e) { let { guildId: t, options: n, prompts_seen: i, options_seen: r } = e; C(t, n); let s = h[t]; if (null == s) return !1; let a = p(s.prompts, i, r); h[t] = { ...s, prompts: a, onboardingPrompts: a.filter(e => e.inOnboarding), onboardingPromptsSeen: i, onboardingResponsesSeen: r } }, GUILD_ONBOARDING_PROMPTS_LOCAL_UPDATE: O, GUILD_SETTINGS_ONBOARDING_PROMPTS_SAVE_SUCCESS: O, GUILD_SETTINGS_DEFAULT_CHANNELS_SAVE_SUCCESS: function(e) { let { guildId: t, channelIds: n } = e; h[t] = { ...h[t], defaultChannelIds: n } }, GUILD_SETTINGS_ONBOARDING_SET_MODE: function(e) { let { guildId: t, mode: n } = e, i = h[t]; null != i && (i.mode = n) } }) }, 819553: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildOnboardingStatus: function() { return o }, isOnboarding: function() { return c } }); var i, r, s, a, o, l, u = n("442837"), d = n("570140"), _ = n("981631"); function c(e) { return null != e && ["started", "ready"].includes(e) }(i = o || (o = {})).STARTED = "started", i.READY = "ready", i.COMPLETED = "completed", i.NOT_APPLICABLE = "not_applicable"; let E = {}, I = {}; class T extends(l = u.default.Store) { shouldShowOnboarding(e) { return !!(e !== _.ME && e !== _.FAVORITES && c(E[e])) || !1 } getOnboardingStatus(e) { return E[e] } resetOnboardingStatus(e) { E[e] = "started", I[e] = "cover" } getCurrentOnboardingStep(e) { var t; return null !== (t = I[e]) && void 0 !== t ? t : "cover" } } a = "GuildOnboardingStore", (s = "displayName") in(r = T) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new T(d.default, { LOGOUT: function() { E = {}, I = {} }, GUILD_DELETE: function(e) { let { guild: t } = e; delete E[t.id], delete I[t.id] }, GUILD_ONBOARDING_START: function(e) { let { guildId: t } = e; E[t] = "started" }, GUILD_ONBOARDING_PROMPTS_FETCH_SUCCESS: function(e) { let { guildId: t, enabled: n } = e; if ("started" !== E[t]) return !1; n ? E[t] = "ready" : E[t] = "not_applicable" }, GUILD_ONBOARDING_PROMPTS_FETCH_FAILURE: function(e) { let { guildId: t } = e; E[t] = "not_applicable" }, GUILD_ONBOARDING_COMPLETE: function(e) { let { guildId: t } = e; E[t] = "completed" }, GUILD_ONBOARDING_SET_STEP: function(e) { let { guildId: t, step: n } = e; I[t] = n }, CONNECTION_OPEN: function() { I = {} } }) }, 866817: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "guild", id: "2023-03_onboarding_upsell_lifecycle", label: "Onboarding Upsell Lifecycle", defaultConfig: { showLifecycleUpsells: !1 }, treatments: [{ id: 1, label: "Show new lifecycle upsells", config: { showLifecycleUpsells: !0 } }] }); t.default = i }, 150340: function(e, t, n) { "use strict"; n.r(t), n.d(t, { dismissedGuildOnboardingUpsell: function() { return A }, shouldShowGuildOnboardingUpsell: function() { return h } }), n("47120"); var i = n("913527"), r = n.n(i), s = n("524437"), a = n("835913"), o = n("605236"), l = n("675478"), u = n("581883"), d = n("430824"), _ = n("709054"), c = n("866817"), E = n("637853"), I = n("981631"), T = n("921944"); let f = [s.DismissibleContent.GUILD_ONBOARDING_UPSELL_MODAL_V2, s.DismissibleContent.GUILD_ONBOARDING_UPSELL_CHANNEL_NOTICE, s.DismissibleContent.GUILD_ONBOARDING_UPSELL_NAGBAR], S = [0, 1, 7]; function h(e, t) { var n; let i = d.default.getGuilds(), s = _.default.entries(i).some(e => { let [t, n] = e, i = (0, E.isGuildOnboardingSettingsAvailable)(t), r = n.hasFeature(I.GuildFeatures.GUILD_ONBOARDING_EVER_ENABLED); return i && r }); if (s || !(0, E.isGuildOnboardingSettingsAvailable)(e)) return !1; let l = null === (n = u.default.settings.userContent) || void 0 === n ? void 0 : n.guildOnboardingUpsellDismissedAt, T = null != l ? a.Timestamp.toDate(l) : void 0, h = null != T ? r()().diff(T, "days") : null, A = f.indexOf(t); if (-1 === A || !(null == h || h > S[A]) || f.find(e => !(0, o.isDismissibleContentDismissed)(e)) !== t) return !1; let { showLifecycleUpsells: m } = c.default.getCurrentConfig({ guildId: e, location: "7f5b67_1" }, { disable: s || !(0, E.isGuildOnboardingSettingsAvailable)(e), autoTrackExposure: !0 }); return m } function A(e, t) { let n = a.Timestamp.now(); l.PreloadedUserSettingsActionCreators.updateAsync("userContent", e => { e.guildOnboardingUpsellDismissedAt = n }, l.UserSettingsDelay.INFREQUENT_USER_ACTION), null != t && (0, o.markDismissibleContentAsDismissed)(t, { forceTrack: !0, dismissAction: T.ContentDismissActionType.AUTO, guildId: e }) } }, 637853: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getChannelCoverageForOnboarding: function() { return N }, getChattableDefaultChannels: function() { return v }, getMinimumSetOfDefaultChannelIds: function() { return g }, getSelectedChannelIds: function() { return P }, getSelectedRoleIds: function() { return y }, isBlockedByOnboarding: function() { return A }, isChattableChannel: function() { return C }, isChattableChannelId: function() { return O }, isGuildOnboardingSettingsAvailable: function() { return h }, useChannelCoverageForOnboarding: function() { return p }, useChattableDefaultChannels: function() { return M }, useGuildOnboardingSettingsAvailable: function() { return S }, useIsChattableChannel: function() { return R } }), n("789020"), n("47120"), n("724458"), n("653041"), n("536091"); var i = n("442837"), r = n("902704"), s = n("447003"), a = n("592125"), o = n("984933"), l = n("430824"), u = n("496675"), d = n("630388"), _ = n("823379"), c = n("700785"), E = n("977258"), I = n("981631"), T = n("372897"); let f = new Date(16824888e5); function S(e) { return (0, i.useStateFromStores)([l.default, u.default], () => { let t = l.default.getGuild(e), n = !!(null == t ? void 0 : t.hasFeature(I.GuildFeatures.COMMUNITY)), i = u.default.can(I.Permissions.MANAGE_GUILD, t), r = u.default.can(I.Permissions.MANAGE_ROLES, t); return n && i && r }) } function h(e) { let t = l.default.getGuild(e), n = !!(null == t ? void 0 : t.hasFeature(I.GuildFeatures.COMMUNITY)), i = u.default.can(I.Permissions.MANAGE_GUILD, t), r = u.default.can(I.Permissions.MANAGE_ROLES, t); return n && i && r } function A(e, t) { var n; if (null == e || !e.hasFeature(I.GuildFeatures.GUILD_ONBOARDING) || null == t || null == t.joinedAt || new Date(t.joinedAt) < f) return !1; let i = null !== (n = t.flags) && void 0 !== n ? n : 0; return d.hasFlag(i, T.GuildMemberFlags.STARTED_ONBOARDING) && !d.hasFlag(i, T.GuildMemberFlags.COMPLETED_ONBOARDING) } function m(e, t, n) { let i = new Set; e.forEach(e => { e.options.forEach(e => { var t; null == e || null === (t = e.channelIds) || void 0 === t || t.forEach(e => { i.add(e) }) }) }), t.forEach(e => i.add(e)); let r = n.filter(e => !e.isCategory() && !e.isThread() && !(0, s.default)(e)), a = r.filter(e => i.has(e.id) || null != e.parent_id && i.has(e.parent_id)); return [a, r.filter(e => !i.has(e.id) && !(null != e.parent_id && i.has(e.parent_id)))] } function N(e, t, n) { return m(t, n, o.default.getChannels(e)[0, o.GUILD_SELECTABLE_CHANNELS_KEY].map(e => { let { channel: t } = e; return t })) } function p(e, t, n) { return m(t, n, (0, i.useStateFromStores)([o.default], () => o.default.getChannels(e))[0, o.GUILD_SELECTABLE_CHANNELS_KEY].map(e => { let { channel: t } = e; return t })) } function O(e) { return C(a.default.getChannel(e)) } function C(e) { return !!(null != e && (0, E.canChannelBeDefault)(e.guild_id, e.id)) && (e.isForumChannel() ? c.canEveryoneRole(I.Permissions.SEND_MESSAGES_IN_THREADS, e) : c.canEveryoneRole(I.Permissions.SEND_MESSAGES, e)) } function R(e) { return (0, i.useStateFromStores)([a.default], () => { let t = a.default.getChannel(e); return (0, _.isNotNullish)(t) && C(t) }) } function g(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : () => !0, r = L(e, t, e => e.id, i); return n.forEach(t => { var n, s; if (!t.required) return; let a = L(e, null !== (s = null === (n = t.options[0]) || void 0 === n ? void 0 : n.channelIds) && void 0 !== s ? s : [], e => e.id), o = t.options.reduce((t, n) => { if (null == n.channelIds) return []; let s = L(e, n.channelIds, e => e.id, e => i(e) && !r.includes(e)); return s.length < t.length ? s : t }, a); r.push(...o) }), r } function L(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : e => e, i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : () => !0, r = o.default.getChannels(e)[o.GUILD_SELECTABLE_CHANNELS_KEY], s = []; for (let { channel: e } of r) if ((0, E.canChannelBeDefault)(e.guild_id, e.id) && (t.includes(e.id) && !e.isCategory() || !e.isThread() && null != e.parent_id && t.includes(e.parent_id))) { let t = n(e); i(t) && s.push(t) } return s } function v(e, t) { var n, i; let r = L(e, t), s = o.default.getChannels(e)[o.GUILD_SELECTABLE_CHANNELS_KEY], a = {}; for (let e of s) a[e.channel.id] = e; return [(n = r.map(e => { let { id: t } = e; return t }), i = a, n.filter(e => { var t; return C(null === (t = i[e]) || void 0 === t ? void 0 : t.channel) })), r] } function D(e, t) { return e[0].length === t[0].length && e[1].length === t[1].length && (0, r.default)(e[0], t[0]) && (0, r.default)(e[1], t[1]) } function M(e, t) { return (0, i.useStateFromStores)([o.default], () => { let n = o.default.getChannels(e), i = [], r = [], s = {}; for (let e of n[o.GUILD_SELECTABLE_CHANNELS_KEY])(0, E.canChannelBeDefault)(e.channel.guild_id, e.channel.id) && (t.has(e.channel.id) && !e.channel.isCategory() || !e.channel.isThread() && null != e.channel.parent_id && t.has(e.channel.parent_id)) && (s[e.channel.id] = e, i.push(e.channel), C(e.channel) && r.push(e.channel.id)); return [r, i] }, [e, t], D) } function y(e) { return new Set(e.map(e => e.roleIds).flat().filter(_.isNotNullish)) } function P(e) { return new Set(e.map(e => e.channelIds).flat().filter(_.isNotNullish)) } }, 17181: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f }, discardOnboardingPromise: function() { return T }, isOnboardingActiveForGuild: function() { return h }, openAndWaitForOnboarding: function() { return S } }); var i = n("512722"), r = n.n(i), s = n("481060"), a = n("749210"), o = n("703656"), l = n("549817"), u = n("745752"), d = n("819553"), _ = n("679240"), c = n("981631"), E = n("176505"); let I = {}; function T(e) { I[e] = null } async function f(e) { let { guildId: t, returnChannelId: n, isPreview: i = !1 } = e; (0, s.closeAllModals)(), r()(null == I[t], "should not double-join guilds"); let l = await (0, a.waitForGuild)(t); if (l.hasFeature(c.GuildFeatures.COMMUNITY)) { if (i)(0, u.startOnboarding)(t); else { if (!l.hasFeature(c.GuildFeatures.GUILD_ONBOARDING)) return; await (0, u.maybeFetchOnboardingPrompts)(t) } d.default.shouldShowOnboarding(t) && (await S(t), null != n && (0, o.transitionTo)(c.Routes.CHANNEL(t, n))) } } function S(e) { return new Promise(t => { I[e] = t, (0, _.waitForOnboardingCompletion)(e).then(() => { var t, n; null === (n = I[t = e]) || void 0 === n || n.call(I), I[t] = null, l.default.finishOnboarding(e) }), (0, o.transitionTo)(c.Routes.CHANNEL(e, E.StaticChannelRoute.GUILD_ONBOARDING)) }) } function h(e) { return null != I[e] } }, 679240: function(e, t, n) { "use strict"; n.r(t), n.d(t, { waitForOnboardingCompletion: function() { return o } }), n("789020"); var i = n("271383"), r = n("630388"), s = n("549817"), a = n("372897"); function o(e) { return new Promise(t => { i.default.addConditionalChangeListener(() => { var n; let o = i.default.getSelfMember(e); return !(0, r.hasFlag)(null !== (n = null == o ? void 0 : o.flags) && void 0 !== n ? n : 0, a.GuildMemberFlags.COMPLETED_ONBOARDING) || (s.default.finishOnboarding(e), t(), !1) }) }) } }, 816436: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getFlattenedChannels: function() { return l }, useFlattenedChannels: function() { return u } }), n("47120"), n("653041"); var i = n("392711"), r = n.n(i), s = n("442837"), a = n("592125"), o = n("823379"); function l(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], s = r()(a.default.getMutableGuildChannelsForGuild(e)).values().groupBy("parent_id").value(), l = r()(n).map(e => e.isCategory() ? e.id : e.parent_id).filter(o.isNotNullish).uniq().map(e => a.default.getChannel(e)).filter(o.isNotNullish).sortBy("position").value(), u = new Set(l.map(e => e.id)), d = n.filter(e => !e.isCategory() && (null == e.parent_id || !u.has(e.parent_id))); for (let e of (d = r().sortBy(d, e => e.isGuildVocal() ? e.position + 1e4 : e.position), l)) { !i && d.push(e); let a = t.has(e.id) ? s[e.id] : n.filter(t => t.parent_id === e.id); a = r().sortBy(null != a ? a : [], e => e.isGuildVocal() ? e.position + 1e4 : e.position), d.push(...a) } return d } function u(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return (0, s.useStateFromStoresArray)([a.default], () => { let i = Array.from(t).map(e => a.default.getChannel(e)).filter(o.isNotNullish); return l(e, t, i, n) }) } }, 31445: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a }, isGuildOnboardingAvailable: function() { return o } }); var i = n("442837"), r = n("160404"), s = n("981631"); function a(e) { return (0, i.useStateFromStores)([r.default], () => { if ((null == e ? void 0 : e.id) == null) return !1; let t = r.default.isFullServerPreview(e.id), n = r.default.isOnboardingEnabled(e.id); return t && n }) || (null == e ? void 0 : e.hasFeature(s.GuildFeatures.GUILD_ONBOARDING_HAS_PROMPTS)) } function o(e) { if (null == e) return !1; let t = r.default.isFullServerPreview(e.id), n = r.default.isOnboardingEnabled(e.id); return t && n || e.hasFeature(s.GuildFeatures.GUILD_ONBOARDING_HAS_PROMPTS) } }, 495649: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"); var i = n("147913"), r = n("703656"), s = n("271383"), a = n("430824"), o = n("914010"), l = n("70956"), u = n("630388"), d = n("745752"), _ = n("45966"), c = n("17181"), E = n("981631"), I = n("176505"), T = n("372897"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = null, h = null; class A extends i.default { constructor(...e) { super(...e), f(this, "actions", { GUILD_DELETE: e => this.handleGuildDelete(e), CHANNEL_SELECT: e => this.handleChannelSelect(e), POST_CONNECTION_OPEN: e => this.handleConnectionOpen(e) }), f(this, "handleConnectionOpen", e => { var t; null != (S = null !== (t = null != S ? S : o.default.getGuildId()) && void 0 !== t ? t : null) && this._openOnboardingIfIncomplete(S) }), f(this, "handleChannelSelect", e => { let { guildId: t, channelId: n } = e; if (S === t && h === n) return; if (S = null != t ? t : null, h = null != n ? n : null, null == S || null == h) return; let i = a.default.getGuild(t); null != i && i.hasFeature(E.GuildFeatures.COMMUNITY) && _.default.shouldFetchPrompts(S, 8 * l.default.Millis.HOUR) && (0, d.loadOnboardingPrompts)(S), this._openOnboardingIfIncomplete(S, n) }), f(this, "handleGuildDelete", e => { let { guild: t } = e; (0, c.discardOnboardingPromise)(t.id) }), f(this, "_openOnboardingIfIncomplete", async (e, t) => { var n, i; if ((0, c.isOnboardingActiveForGuild)(e)) { (0, r.transitionTo)(E.Routes.CHANNEL(e, I.StaticChannelRoute.GUILD_ONBOARDING)); return } let o = a.default.getGuild(e); if (null == o || !o.hasFeature(E.GuildFeatures.GUILD_ONBOARDING)) return; let l = s.default.getSelfMember(e); !(null == l || (0, u.hasFlag)(null !== (n = l.flags) && void 0 !== n ? n : 0, T.GuildMemberFlags.COMPLETED_ONBOARDING)) && (0, u.hasFlag)(null !== (i = l.flags) && void 0 !== i ? i : 0, T.GuildMemberFlags.STARTED_ONBOARDING) && (await (0, c.default)({ guildId: e }), (0, r.transitionTo)(E.Routes.CHANNEL(e, t))) }) } } t.default = new A }, 983529: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("524437"), s = n("481060"), a = n("147913"), o = n("605236"), l = n("944486"), u = n("914010"), d = n("626135"), _ = n("150340"), c = n("981631"), E = n("921944"); let I = "GUILD_ONBOARDING_UPSELL_MODAL", T = (e, t) => { if (__OVERLAY__ || null == e || null == t || !(0, _.shouldShowGuildOnboardingUpsell)(e, r.DismissibleContent.GUILD_ONBOARDING_UPSELL_MODAL_V2)) return; (0, o.requestMarkDismissibleContentAsShown)(r.DismissibleContent.GUILD_ONBOARDING_UPSELL_MODAL_V2); let a = function() { let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : E.ContentDismissActionType.DISMISS; d.default.track(c.AnalyticEvents.UPSELL_CLICKED, { type: r.DismissibleContent[r.DismissibleContent.GUILD_ONBOARDING_UPSELL_MODAL_V2], action: "dismiss" }), (0, _.dismissedGuildOnboardingUpsell)(e, r.DismissibleContent.GUILD_ONBOARDING_UPSELL_MODAL_V2), (0, o.markDismissibleContentAsDismissed)(r.DismissibleContent.GUILD_ONBOARDING_UPSELL_MODAL_V2, { dismissAction: t }) }; (0, s.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("93776")]).then(n.bind(n, "563288")); return n => (0, i.jsx)(t, { ...n, guildId: e, onClose: e => { a(e), n.onClose() } }) }, { modalKey: I, onCloseRequest: () => { a(), (0, s.closeModal)(I) } }) }; class f extends a.default { handleChannelSelect(e) { let { guildId: t, channelId: n } = e; T(t, n) } handlePostConnectionOpen() { let e = l.default.getCurrentlySelectedChannelId(); T(u.default.getGuildId(), e) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_SELECT: this.handleChannelSelect, POST_CONNECTION_OPEN: this.handlePostConnectionOpen }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new f }, 526120: function(e, t, n) { "use strict"; n.r(t), n.d(t, { completeNewMemberAction: function() { return m }, fetchGuildHomeSettings: function() { return f }, fetchNewMemberActions: function() { return S }, selectHomeResourceChannel: function() { return h }, selectNewMemberActionChannel: function() { return A } }), n("47120"), n("724458"); var i = n("544891"), r = n("570140"), s = n("904245"), a = n("593472"), o = n("160404"), l = n("359110"), u = n("592125"), d = n("626135"), _ = n("709054"), c = n("563534"), E = n("734893"), I = n("846121"), T = n("981631"); let f = async e => { r.default.dispatch({ type: "GUILD_HOME_SETTINGS_FETCH_START", guildId: e }); try { let t = await i.HTTP.get({ url: T.Endpoints.GUILD_HOME_SETTINGS(e), oldFormErrors: !0 }), n = (0, E.settingsFromServer)(t.body); return r.default.dispatch({ type: "GUILD_HOME_SETTINGS_FETCH_SUCCESS", guildId: e, homeSettings: n }), n } catch (t) { r.default.dispatch({ type: "GUILD_HOME_SETTINGS_FETCH_FAIL", guildId: e }) } }, S = async e => { if (!o.default.isFullServerPreview(e)) { r.default.dispatch({ type: "GUILD_NEW_MEMBER_ACTIONS_FETCH_START", guildId: e }); try { let t = await i.HTTP.get({ url: T.Endpoints.GUILD_MEMBER_ACTIONS(e), oldFormErrors: !0 }), n = (0, E.actionsFromServer)(t.body); return r.default.dispatch({ type: "GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS", guildId: e, memberActions: n }), n } catch (t) { r.default.dispatch({ type: "GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL", guildId: e }) } } }, h = function(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; if (r.default.dispatch({ type: "SELECT_HOME_RESOURCE_CHANNEL", guildId: e, channelId: t }), null == t) return; let i = u.default.getChannel(t), E = c.default.getResourceForChannel(e, t); null != e && !o.default.isFullServerPreview(e) && null != i && null != E && d.default.track(T.AnalyticEvents.SERVER_GUIDE_CHANNEL_SELECTED, { guild_id: e, channel_id: i.id, server_guide_channel_type: "resource", channel_action_type: -1 }), n && (0, l.transitionToChannel)(t), s.default.jumpToMessage({ channelId: t, messageId: _.default.castChannelIdAsMessageId(t), flash: !1, jumpType: a.JumpTypes.INSTANT }) }, A = (e, t) => { r.default.dispatch({ type: "SELECT_NEW_MEMBER_ACTION_CHANNEL", guildId: e, channelId: t }); let n = u.default.getChannel(t), i = c.default.getActionForChannel(e, t); null != e && !o.default.isFullServerPreview(e) && null != n && null != i && d.default.track(T.AnalyticEvents.SERVER_GUIDE_CHANNEL_SELECTED, { guild_id: e, channel_id: n.id, server_guide_channel_type: "member action", channel_action_type: i.actionType }), (0, l.transitionToChannel)(t) }, m = (e, t) => { if (r.default.dispatch({ type: "COMPLETE_NEW_MEMBER_ACTION", guildId: e, channelId: t }), o.default.isFullServerPreview(e)) return; let n = u.default.getChannel(t), s = c.default.getActionForChannel(e, t); if (null != n && null != s) { var a, l; let t = _.default.keys(null !== (a = I.default.getCompletedActions(e)) && void 0 !== a ? a : {}), i = null !== (l = c.default.getNewMemberActions(e)) && void 0 !== l ? l : []; d.default.track(T.AnalyticEvents.SERVER_GUIDE_ACTION_COMPLETED, { guild_id: n.guild_id, channel_id: n.id, channel_action_type: s.actionType, has_completed_all: i.reduce((e, n) => e && t.includes(n.channelId), !0) }) } i.HTTP.post({ url: T.Endpoints.GUILD_MEMBER_ACTION_UPDATE(e, t) }) } }, 563534: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NO_SETTINGS: function() { return u } }), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"); let u = { enabled: !1 }, d = [], _ = {}, c = new Set, E = {}; function I(e) { var t; let n = null === (t = _[e]) || void 0 === t ? void 0 : t.newMemberActions; return null == n ? null : (E[e] = n, E[e]) } function T(e) { let { homeSettings: t, guildId: n } = e; null != n && (null == t && (_[n] = u), _[n] = t, I(n), c.delete(n)) } class f extends(i = o.default.Store) { getSettings(e) { var t; return null == e ? null : null !== (t = _[e]) && void 0 !== t ? t : u } getNewMemberActions(e) { var t; return null == e || (null === (t = this.getSettings(e)) || void 0 === t ? void 0 : t.newMemberActions) == null ? null : null == E[e] ? I(e) : E[e] } getActionForChannel(e, t) { var n; let i = this.getSettings(e); return null == i ? null : (null !== (n = i.newMemberActions) && void 0 !== n ? n : []).find(e => e.channelId === t) } hasMemberAction(e, t) { return null != this.getActionForChannel(e, t) } getResourceChannels(e) { var t, n; return null !== (n = null === (t = _[e]) || void 0 === t ? void 0 : t.resourceChannels) && void 0 !== n ? n : d } getResourceForChannel(e, t) { if (null == e) return null; let n = this.getResourceChannels(e); return n === d ? null : n.find(e => e.channelId === t) } getIsLoading(e) { return null != e && c.has(e) } getWelcomeMessage(e) { var t; if (null != e) return null === (t = _[e]) || void 0 === t ? void 0 : t.welcomeMessage } hasSettings(e) { return null != e && null != _[e] } getEnabled(e) { var t, n; return null != e && null !== (n = null === (t = _[e]) || void 0 === t ? void 0 : t.enabled) && void 0 !== n && n } getNewMemberAction(e, t) { var n, i, r; return null == e || null == t ? null : null !== (r = null === (i = _[e]) || void 0 === i ? void 0 : null === (n = i.newMemberActions) || void 0 === n ? void 0 : n.find(e => e.channelId === t)) && void 0 !== r ? r : null } } a = "GuildOnboardingHomeSettingsStore", (s = "displayName") in(r = f) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new f(l.default, { GUILD_HOME_SETTINGS_FETCH_START: function(e) { let { guildId: t } = e; c.add(t) }, GUILD_HOME_SETTINGS_FETCH_SUCCESS: T, GUILD_HOME_SETTINGS_FETCH_FAIL: function(e) { let { guildId: t } = e; c.delete(t) }, GUILD_HOME_SETTINGS_UPDATE_SUCCESS: T, GUILD_HOME_SETTINGS_TOGGLE_ENABLED: function(e) { let { guildId: t, enabled: n } = e, i = _[t]; if (null == i) return !1; i.enabled = n }, GUILD_RESOURCE_CHANNEL_UPDATE_SUCCESS: function(e) { var t; let { guildId: n, resourceChannel: i } = e, r = _[n]; if (null == r) return !1; r.resourceChannels = null !== (t = r.resourceChannels) && void 0 !== t ? t : []; let s = r.resourceChannels.findIndex(e => e.channelId === i.channelId); return -1 !== s && (r.resourceChannels[s] = { ...i }, !0) }, GUILD_NEW_MEMBER_ACTION_UPDATE_SUCCESS: function(e) { var t; let { guildId: n, action: i } = e, r = _[n]; if (null == r) return !1; r.newMemberActions = null !== (t = r.newMemberActions) && void 0 !== t ? t : []; let s = r.newMemberActions.findIndex(e => e.channelId === i.channelId); return -1 !== s && (r.newMemberActions[s] = { ...i }, !0) }, GUILD_DELETE: function(e) { let { guild: t } = e; if (null == _[t.id]) return !1; delete _[t.id], delete E[t.id] } }) }, 734893: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChannelEditBlockTypes: function() { return a }, NEW_MEMBER_ACTION_MAX: function() { return T }, NEW_MEMBER_ACTION_TITLE_MAX_LENGTH: function() { return I }, NEW_MEMBER_ACTION_TITLE_MIN_LENGTH: function() { return E }, NewMemberActionTypes: function() { return s }, RESOURCE_CHANNEL_DESCRIPTION_MAX_LENGTH: function() { return h }, RESOURCE_CHANNEL_MAX: function() { return A }, RESOURCE_CHANNEL_TITLE_MAX_LENGTH: function() { return S }, RESOURCE_CHANNEL_TITLE_MIN_LENGTH: function() { return f }, WELCOME_MESSAGE_MAX_LENGTH: function() { return c }, WELCOME_MESSAGE_MIN_LENGTH: function() { return _ }, actionsFromServer: function() { return C }, isChannelValidForNewMemberAction: function() { return D }, isChannelValidForResourceChannel: function() { return v }, isSettingsEmpty: function() { return g }, isSettingsValid: function() { return L }, isWelcomeMessageEmpty: function() { return R }, newMemberActionFromServer: function() { return m }, resourceChannelFromServer: function() { return N }, settingsFromServer: function() { return p }, settingsToServer: function() { return O } }); var i, r, s, a, o = n("592125"), l = n("823379"), u = n("700785"), d = n("981631"); let _ = 7, c = 300, E = 7, I = 60, T = 5, f = 1, S = 30, h = 200, A = 7; function m(e) { var t; return { channelId: e.channel_id, actionType: e.action_type, title: e.title, description: e.description, emoji: null == e.emoji ? null : { id: e.emoji.id, name: e.emoji.name, animated: e.emoji.animated }, icon: null !== (t = e.icon) && void 0 !== t ? t : null } } function N(e) { var t, n; return { channelId: e.channel_id, title: e.title, description: null !== (t = e.description) && void 0 !== t ? t : "", emoji: null == e.emoji ? null : { id: e.emoji.id, name: e.emoji.name, animated: e.emoji.animated }, icon: null !== (n = e.icon) && void 0 !== n ? n : null } } function p(e) { if (null == e) return null; let { welcome_message: t, new_member_actions: n, resource_channels: i, enabled: r } = e, s = { authorIds: t.author_ids, message: t.message }, a = n.filter(e => (0, l.isNotNullish)(o.default.getChannel(e.channel_id))).map(m); return { welcomeMessage: s, newMemberActions: a, resourceChannels: i.filter(e => (0, l.isNotNullish)(o.default.getChannel(e.channel_id))).map(N), enabled: r } } function O(e, t) { var n, i; if (null == t) return null; let { welcomeMessage: r, newMemberActions: s, resourceChannels: a, enabled: u } = t, d = { author_ids: null !== (n = null == r ? void 0 : r.authorIds) && void 0 !== n ? n : [], message: null !== (i = null == r ? void 0 : r.message) && void 0 !== i ? i : "" }, _ = (null != s ? s : []).filter(e => (0, l.isNotNullish)(o.default.getChannel(e.channelId))).map(e => { var t, n, i, r, s, a, o; return { channel_id: e.channelId, action_type: e.actionType, title: e.title, description: e.description, emoji: { id: null !== (r = null === (t = e.emoji) || void 0 === t ? void 0 : t.id) && void 0 !== r ? r : void 0, name: null !== (s = null === (n = e.emoji) || void 0 === n ? void 0 : n.name) && void 0 !== s ? s : void 0, animated: null !== (a = null === (i = e.emoji) || void 0 === i ? void 0 : i.animated) && void 0 !== a ? a : void 0 }, icon: null !== (o = e.icon) && void 0 !== o ? o : void 0 } }); return { guild_id: e, welcome_message: d, new_member_actions: _, resource_channels: (null != a ? a : []).filter(e => (0, l.isNotNullish)(o.default.getChannel(e.channelId))).map(e => { var t, n, i, r, s, a, o; return { channel_id: e.channelId, title: e.title, description: e.description, emoji: { id: null !== (r = null === (t = e.emoji) || void 0 === t ? void 0 : t.id) && void 0 !== r ? r : void 0, name: null !== (s = null === (n = e.emoji) || void 0 === n ? void 0 : n.name) && void 0 !== s ? s : void 0, animated: null !== (a = null === (i = e.emoji) || void 0 === i ? void 0 : i.animated) && void 0 !== a ? a : void 0 }, icon: null !== (o = e.icon) && void 0 !== o ? o : void 0 } }), enabled: u } }(i = s || (s = {}))[i.VIEW = 0] = "VIEW", i[i.CHAT = 1] = "CHAT"; let C = e => { if (null == e) return null; let t = {}; for (let n in e.channel_actions) t[n] = e.channel_actions[n].completed; return t }; function R(e) { return null == e || (null == e.message || !(e.message.length > 0)) && (null == e.authorIds || !(e.authorIds.length > 0)) && !0 } function g(e) { return null == e || !!R(e.welcomeMessage) && (null == e.newMemberActions || !(e.newMemberActions.length > 0)) && (null == e.resourceChannels || !(e.resourceChannels.length > 0)) && !0 } function L(e) { var t, n; return null != e && (!!g(e) || (null === (t = e.welcomeMessage) || void 0 === t ? void 0 : t.message) != null && !(e.welcomeMessage.message.length < _) && (null === (n = e.welcomeMessage) || void 0 === n ? void 0 : n.authorIds) != null && 0 !== e.welcomeMessage.authorIds.length && null != e.newMemberActions && !(e.newMemberActions.length < 3) && !0) } function v(e) { return e.type === d.ChannelTypes.GUILD_TEXT && !u.canEveryoneRole(d.Permissions.SEND_MESSAGES, e) && u.canEveryoneRole(d.Permissions.VIEW_CHANNEL, e) } function D(e) { switch (e.type) { case d.ChannelTypes.GUILD_TEXT: case d.ChannelTypes.GUILD_ANNOUNCEMENT: case d.ChannelTypes.GUILD_FORUM: case d.ChannelTypes.GUILD_MEDIA: return u.canEveryoneRole(d.Permissions.VIEW_CHANNEL, e); default: return !1 } }(r = a || (a = {}))[r.DEFAULT = 0] = "DEFAULT", r[r.TODO = 1] = "TODO", r[r.RESOURCE = 2] = "RESOURCE" }, 846121: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"); let u = {}, d = {}, _ = new Set; class c extends(i = o.default.Store) { getCompletedActions(e) { return null == e ? null : d[e] } hasCompletedActionForChannel(e, t) { let n = this.getCompletedActions(e); return null != n && null != n[t] } getState(e) { return null == e ? {} : { completedActions: d[e], loading: _.has(e) } } } a = "GuildOnboardingMemberActionStore", (s = "displayName") in(r = c) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new c(l.default, { GUILD_NEW_MEMBER_ACTIONS_FETCH_START: function(e) { let { guildId: t } = e; _.add(t) }, GUILD_NEW_MEMBER_ACTIONS_FETCH_SUCCESS: function(e) { let { memberActions: t, guildId: n } = e; if (null == t) { d[n] = u; return } d[n] = t, _.delete(n) }, GUILD_NEW_MEMBER_ACTIONS_FETCH_FAIL: function(e) { let { guildId: t } = e; _.delete(t) }, GUILD_NEW_MEMBER_ACTIONS_DELETE_SUCCESS: function(e) { let { guildId: t } = e; if (null == d[t]) return !1; delete d[t] }, COMPLETE_NEW_MEMBER_ACTION: function(e) { let { guildId: t, channelId: n } = e; d = { ...d, [t]: { ...d[t], [n]: !0 } } }, GUILD_DELETE: function(e) { let { guild: t } = e; if (null == d[t.id]) return !1; delete d[t.id] } }) }, 621923: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getOnboardingHomeAdminExperiment: function() { return o }, getOptionalOnboardingHomeAdminExperiment: function() { return u }, useOnboardingHomeAdminExperiment: function() { return a }, useOptionalOnboardingHomeAdminExperiment: function() { return l } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "guild", id: "2023-02_onboarding_home_admin", label: "[ADMIN] Home as a community onboarding surface", defaultConfig: { homeSettingsEnabled: !1 }, treatments: [{ id: 1, label: "Show the Onboarding Version of Home in Admin Settings", config: { homeSettingsEnabled: !0 } }] }), s = (0, i.createExperiment)({ kind: "guild", id: "2023-05_optional_onboarding_home_admin", label: "[ADMIN] Make server guide optional", defaultConfig: { serverGuideOptional: !1 }, treatments: [{ id: 1, label: "Optional", config: { serverGuideOptional: !0 } }] }); function a(e) { return r.useExperiment({ guildId: e, location: "259c05_1" }, { autoTrackExposure: !0 }) } function o(e) { return r.getCurrentConfig({ guildId: e, location: "259c05_2" }) } function l(e) { return s.useExperiment({ guildId: e, location: "259c05_3" }, { autoTrackExposure: !0 }) } function u(e) { return s.getCurrentConfig({ guildId: e, location: "259c05_4" }) } t.default = r }, 931261: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canSeeOnboardingHome: function() { return h }, useCanSeeOnboardingHome: function() { return S } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("399606"), a = n("637853"), o = n("160404"), l = n("592125"), u = n("430824"), d = n("563534"), _ = n("621923"), c = n("199689"), E = n("460347"), I = n("981631"), T = n("176505"); function f(e) { var t; let n = e.id, { homeSettingsEnabled: i } = _.default.getCurrentConfig({ guildId: n, location: "61eef9_1" }, { autoTrackExposure: !1 }), r = (null !== (t = d.default.getNewMemberActions(n)) && void 0 !== t ? t : []).length > 0, s = d.default.getEnabled(n); return i && r && e.hasFeature(I.GuildFeatures.COMMUNITY) && !(e.hasFeature(I.GuildFeatures.GUILD_ONBOARDING) && !s) } function S(e) { let { homeSettingsEnabled: t } = _.default.useExperiment({ guildId: e, location: "61eef9_2" }, { autoTrackExposure: !1 }), n = (0, E.default)(e), i = l.default.getMutableGuildChannelsForGuild(e); return (0, s.useStateFromStores)([u.default, o.default], () => { let s = u.default.getGuild(e); if (__OVERLAY__ || e === I.ME || e === I.FAVORITES || null == s) return !1; if (o.default.isFullServerPreview(e)) return f(s); let l = (0, c.default)(s), d = t && (0, a.isGuildOnboardingSettingsAvailable)(e) && s.hasFeature(I.GuildFeatures.GUILD_ONBOARDING) && s.hasFeature(I.GuildFeatures.GUILD_SERVER_GUIDE), _ = r().some(r().values(i), e => e.hasFlag(T.ChannelFlags.IS_GUILD_RESOURCE_CHANNEL)); return !(!n && !_) && (l && s.hasFeature(I.GuildFeatures.GUILD_ONBOARDING) && s.hasFeature(I.GuildFeatures.GUILD_SERVER_GUIDE) || d) && s.hasFeature(I.GuildFeatures.COMMUNITY) }, [e, t, n, i]) } function h(e) { let t = u.default.getGuild(e), { homeSettingsEnabled: n } = _.default.getCurrentConfig({ guildId: e, location: "61eef9_4" }), i = o.default.isFullServerPreview(e); if (null == t || __OVERLAY__ || e === I.ME || e === I.FAVORITES) return !1; if (i) return f(t); let r = n && (0, a.isGuildOnboardingSettingsAvailable)(e) && t.hasFeature(I.GuildFeatures.GUILD_ONBOARDING) && t.hasFeature(I.GuildFeatures.GUILD_SERVER_GUIDE); return (t.hasFeature(I.GuildFeatures.GUILD_ONBOARDING) && t.hasFeature(I.GuildFeatures.GUILD_SERVER_GUIDE) || r) && t.hasFeature(I.GuildFeatures.COMMUNITY) } }, 199689: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("981631"); function r(e) { return !(__OVERLAY__ || null == e || e.id === i.ME || e.id === i.FAVORITES || !e.hasFeature(i.GuildFeatures.COMMUNITY) || !e.hasFeature(i.GuildFeatures.GUILD_SERVER_GUIDE) || !e.hasFeature(i.GuildFeatures.GUILD_ONBOARDING)) } }, 50244: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hasPendingMemberAction: function() { return c } }), n("789020"); var i = n("592125"), r = n("271383"), s = n("430824"), a = n("630388"), o = n("563534"), l = n("846121"), u = n("199689"), d = n("981631"), _ = n("372897"); function c(e, t) { var n, c; let E = s.default.getGuild(e), I = i.default.getChannel(t); return null != E && null != I && (0, u.default)(E) && E.hasFeature(d.GuildFeatures.GUILD_SERVER_GUIDE) && !a.hasFlag(null !== (c = null === (n = r.default.getSelfMember(E.id)) || void 0 === n ? void 0 : n.flags) && void 0 !== c ? c : 0, _.GuildMemberFlags.COMPLETED_HOME_ACTIONS) && o.default.hasMemberAction(E.id, I.id) && !l.default.hasCompletedActionForChannel(E.id, I.id) } }, 460347: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d }, getIsNewMember: function() { return u } }), n("789020"); var i = n("442837"), r = n("160404"), s = n("271383"), a = n("70956"), o = n("630388"), l = n("372897"); function u(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (n) return !0; let i = null != e ? new Date(e) : void 0; return null != i && new Date().getTime() - i.getTime() < a.default.Millis.WEEK && !(0, o.hasFlag)(null != t ? t : 0, l.GuildMemberFlags.COMPLETED_HOME_ACTIONS) } function d(e) { return (0, i.useStateFromStores)([s.default, r.default], () => { var t, n; if (r.default.isFullServerPreview(e)) return !0; let i = s.default.getSelfMember(e); return u(null !== (t = null == i ? void 0 : i.joinedAt) && void 0 !== t ? t : void 0, null !== (n = null == i ? void 0 : i.flags) && void 0 !== n ? n : void 0) }) } }, 218315: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("147913"), a = n("160404"), o = n("314897"), l = n("592125"), u = n("271383"), d = n("914010"), _ = n("630388"), c = n("526120"), E = n("563534"), I = n("734893"), T = n("846121"), f = n("931261"), S = n("460347"), h = n("372897"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class m extends s.default { constructor(...e) { super(...e), A(this, "onboardingCompleteGuilds", new Set), A(this, "actions", { POST_CONNECTION_OPEN: () => this.handlePostConnectionOpen(), GUILD_MEMBER_UPDATE: e => this.handleGuildMemberUpdate(e), GUILD_DELETE: e => this.handleGuildDelete(e), CHANNEL_SELECT: e => this.handleChannelSelect(e), MESSAGE_CREATE: e => this.handleMessageSend(e), THREAD_CREATE: e => this.handleThreadCreate(e) }), A(this, "handlePostConnectionOpen", () => { let e = d.default.getGuildId(); null != e && this._getOrLoadOnboardingMemberActions(e) }), A(this, "handleGuildMemberUpdate", e => { let { flags: t, user: s, guildId: a } = e; if (s.id === o.default.getId()) { if (!this.onboardingCompleteGuilds.has(a) && (0, _.hasFlag)(null != t ? t : 0, h.GuildMemberFlags.COMPLETED_HOME_ACTIONS)) { var l, u; this.onboardingCompleteGuilds.add(a); let e = null !== (u = null === (l = E.default.getNewMemberActions(a)) || void 0 === l ? void 0 : l.length) && void 0 !== u ? u : 0; if (0 === e) return; (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("92339")]).then(n.bind(n, "184100")); return n => (0, i.jsx)(t, { ...n, initialPercent: (e - 1) / e, numActions: e }) }) } } }), A(this, "handleGuildDelete", e => { let { guild: t } = e; this.onboardingCompleteGuilds.delete(t.id) }), A(this, "handleChannelSelect", async e => { let { guildId: t, channelId: n } = e; if (null == t || null == n) return; let { memberActions: i, completedActions: r } = await this._getOrLoadOnboardingMemberActions(t), s = null == i ? void 0 : i.find(e => e.channelId === n); (null == r ? void 0 : r[n]) !== !0 && null != s && s.actionType === I.NewMemberActionTypes.VIEW && (0, c.completeNewMemberAction)(t, n) }), A(this, "handleMessageSend", e => { var t; let { guildId: n, channelId: i, message: r } = e; if (null == n || null == i || (null === (t = r.author) || void 0 === t ? void 0 : t.id) !== o.default.getId()) return; let s = l.default.getChannel(i); (null == s ? void 0 : s.isForumPost()) && (null == s ? void 0 : s.parent_id) != null && this._completeChatAction(n, s.parent_id), this._completeChatAction(n, i) }), A(this, "handleThreadCreate", e => { var t; let { channel: n, isNewlyCreated: i } = e; if (!!i && null != n.parent_id && !!(null === (t = l.default.getChannel(n.parent_id)) || void 0 === t ? void 0 : t.isForumLikeChannel())) n.ownerId === o.default.getId() && this._completeChatAction(n.guild_id, n.parent_id) }), A(this, "_completeChatAction", async (e, t) => { let { memberActions: n, completedActions: i } = await this._getOrLoadOnboardingMemberActions(e), r = null == n ? void 0 : n.find(e => e.channelId === t); (null == i ? void 0 : i[t]) !== !0 && null != r && r.actionType === I.NewMemberActionTypes.CHAT && (0, c.completeNewMemberAction)(e, t) }), A(this, "_getOrLoadOnboardingMemberActions", async e => { var t, n; let i = (0, f.canSeeOnboardingHome)(e), r = a.default.isFullServerPreview(e); if (!i && !r) return {}; let s = u.default.getSelfMember(e); if (null == s || !(0, S.getIsNewMember)(null !== (t = s.joinedAt) && void 0 !== t ? t : void 0, null !== (n = s.flags) && void 0 !== n ? n : void 0)) return {}; let [o, l] = await Promise.all([this._getOrLoadOnboardingHomeSettings(e, s), this._getOrLoadMemberActions(e, s)]); return { memberActions: o, completedActions: l } }), A(this, "_getOrLoadOnboardingHomeSettings", async (e, t) => { var n, i; let r = E.default.getNewMemberActions(e), s = E.default.getIsLoading(e); if (!(null == r && !s && (0, S.getIsNewMember)(null !== (n = t.joinedAt) && void 0 !== n ? n : void 0, null !== (i = t.flags) && void 0 !== i ? i : void 0))) return r; { let t = await (0, c.fetchGuildHomeSettings)(e); return null == t ? void 0 : t.newMemberActions } }), A(this, "_getOrLoadMemberActions", async (e, t) => { var n; let { completedActions: i, loading: r } = T.default.getState(e); return null == i && !r && (0, _.hasFlag)(null !== (n = t.flags) && void 0 !== n ? n : 0, h.GuildMemberFlags.STARTED_HOME_ACTIONS) ? await (0, c.fetchNewMemberActions)(e) : i }) } } t.default = new m }, 277985: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("302463"), r = n("981631"); class s { getCreateAttachmentURL(e) { return r.Endpoints.GUILD_PRODUCT_CREATE_ATTACHMENT_UPLOAD(e) } getDeleteUploadURL(e) { return r.Endpoints.MESSAGE_DELETE_UPLOAD(e) } getMaxFileSize(e) { return i.MAX_ATTACHMENT_UPLOAD_FILESIZE_BYTES } getMaxAttachmentsCount() { return i.MAX_ATTACHMENT_UPLOAD_COUNT } getMaxTotalAttachmentSize() { return i.MAX_ATTACHMENT_UPLOAD_TOTAL_FILESIZE_BYTES } get shouldReactNativeCompressUploads() { return !1 } } }, 302463: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GUILD_PRODUCT_EDIT_MODAL_KEY: function() { return i }, MAX_ATTACHMENT_UPLOAD_COUNT: function() { return a }, MAX_ATTACHMENT_UPLOAD_FILESIZE_BYTES: function() { return r }, MAX_ATTACHMENT_UPLOAD_TOTAL_FILESIZE_BYTES: function() { return s }, MAX_PUBLISHED_GUILD_PRODUCT_LISTINGS: function() { return o } }); let i = "guild-product-edit-modal", r = 1073741824, s = 1073741824, a = 10, o = 30 }, 352981: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isGuildEligibleForGuildProducts: function() { return a }, useGuildEligibleForGuildProducts: function() { return s } }); var i = n("482833"), r = n("981631"); function s(e, t) { let { enabled: n } = i.GuildProductsExperiment.useExperiment({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: t }); return n } function a(e, t) { let { enabled: n } = i.GuildProductsExperiment.getCurrentConfig({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: t }); return n } }, 482833: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildProductsExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "guild", id: "2023-04_server_products", label: "Server Products", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables Server Products (AKA one time purchases for creator guilds)", config: { enabled: !0 } }] }) }, 644542: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildRoleSubscriptionMaxTiersExperiment: function() { return o }, GuildRoleSubscriptionUsersExperiment: function() { return a }, GuildRoleSubscriptionsExperiment: function() { return s }, GuildRoleSubscriptionsTierTemplatesExperiment: function() { return l }, GuildRoleSubscriptionsTierTemplatesUserExperiment: function() { return u } }); var i = n("818083"), r = n("293810"); let s = (0, i.createExperiment)({ kind: "guild", id: "2021-06_guild_role_subscriptions", label: "Guild Role Subscriptions", defaultConfig: { enableRoleSubscriptionsForGuild: !1 }, treatments: [{ id: 1, label: "Enables guild to create Guild Role Subscriptions", config: { enableRoleSubscriptionsForGuild: !0 } }] }), a = (0, i.createExperiment)({ kind: "user", id: "2021-08_guild_role_subscription_users", label: "Guild Role Subscription Users", defaultConfig: { enableRoleSubscriptionsForUser: !1 }, treatments: [{ id: 1, label: "Enables users to create Guild Role Subscriptions", config: { enableRoleSubscriptionsForUser: !0 } }] }); (0, i.createExperiment)({ kind: "guild", id: "2022-01_guild_role_subscription_trials", label: "Guild Role Subscription Trials", defaultConfig: { enableRoleSubscriptionTrialsForGuild: !1 }, treatments: [{ id: 1, label: "Enables guild to create Guild Role Subscription Trials", config: { enableRoleSubscriptionTrialsForGuild: !0 } }] }); let o = (0, i.createExperiment)({ kind: "guild", id: "2022-07_guild_role_subscriptions_variable_max_tiers", label: "Guild Role Subscription Max Tiers", defaultConfig: { enabled: !1, maxTiers: r.MAX_SUBSCRIPTION_TIERS }, treatments: [4, 5, 6].map(e => ({ id: e, label: "Enables {n} maximum published tiers", config: { enabled: !0, maxTiers: e } })) }); (0, i.createExperiment)({ kind: "guild", id: "2022-12_mobile_guild_role_subscription_team_setup", label: "Mobile Guild Role Subscription Team Setup", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables guild to allow payout team setup on mobile", config: { enabled: !0 } }] }); let l = (0, i.createExperiment)({ kind: "guild", id: "2023-03_server_subscriptions_tier_templates", label: "Server Subscriptions Tier Templates", defaultConfig: { enabled: !1, showCreatorPortalLink: !1 }, treatments: [{ id: 1, label: "299 basic tier + no link", config: { enabled: !0, showCreatorPortalLink: !1 } }, { id: 2, label: "399 basic tier + no link", config: { enabled: !0, showCreatorPortalLink: !1 } }, { id: 3, label: "399 basic tier + link", config: { enabled: !0, showCreatorPortalLink: !0 } }] }), u = (0, i.createExperiment)({ kind: "user", id: "2023-04_server_subscriptions_tier_templates_user", label: "Server Subscriptions Tier Templates", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable tier templates for user", config: { enabled: !0 } }] }) }, 423117: function(e, t, n) { "use strict"; n.r(t), n.d(t, { archiveSubscriptionListing: function() { return h }, createSubscriptionGroupListing: function() { return T }, createSubscriptionListing: function() { return N }, deleteSubscriptionListing: function() { return S }, fetchAllSubscriptionListingsDataForGuild: function() { return I }, fetchMonetizationRestrictions: function() { return O }, fetchSubscriptionListingForPlan: function() { return f }, fetchSubscriptionsSettings: function() { return c }, updateSubscriptionListing: function() { return p }, updateSubscriptionTrial: function() { return A }, updateSubscriptionsSettings: function() { return E } }), n("47120"); var i = n("379649"), r = n("570140"), s = n("355467"), a = n("821849"), o = n("367907"), l = n("626135"), u = n("70956"), d = n("295141"), _ = n("981631"); async function c(e) { let t = await d.getGuildRoleSubscriptionsSettings(e); r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS", settings: t }) } async function E(e, t) { let n = await d.updateGuildRoleSubscriptionsSettings(e, t); r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS", settings: n }) } async function I(e) { let { includeSoftDeleted: t = !0, countryCode: n } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS", guildId: e }); try { let [i, a, o] = await Promise.all([d.getGuildRoleSubscriptionGroupListingsForGuild(e, { includeSoftDeleted: t, countryCode: n }), d.getGuildRoleSubscriptionsSettings(e), d.getGuildRoleSubscriptionTrials(e), (0, s.fetchSubscriptions)()]); r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS", guildId: e, groupListings: i, settings: a, subscriptionTrials: o }) } catch (t) { r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE", guildId: e }) } } async function T(e, t) { let n = await d.createGuildRoleSubscriptionGroupListing(e, t); return r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING", listing: n }), n } async function f(e) { var t; r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN", planId: e }); let n = await d.getGuildRoleSubscriptionGroupForSubscriptionPlan(e); for (let i of (r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS", groupListing: n }), null !== (t = n.subscription_listings) && void 0 !== t ? t : [])) i.subscription_plans[0].id === e && await a.fetchSubscriptionPlansForSKU(i.id, void 0, void 0, !0) } async function S(e, t, n) { await d.deleteGuildRoleSubscriptionListing(e, t, n), r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING", listingId: n }) } async function h(e, t, n) { let i = await d.archiveGuildRoleSubscriptionListing(e, t, n); r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING", listing: i }) } async function A(e, t, n) { let i = await d.updateGuildRoleSubscriptionsTrial(e, t, n); r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL", subscriptionTrial: i }) } async function m(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, i = await d.getGuildRoleSubscriptionGroupListing(e, t, n); return r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING", listing: i }), i } async function N(e) { let { guildId: t, groupListingId: n, data: i, analyticsContext: s, onBeforeDispatchNewListing: a } = e, u = await d.createGuildRoleSubscriptionListing(t, n, i); return l.default.track(_.AnalyticEvents.ROLE_SUBSCRIPTION_LISTING_CREATED, { role_subscription_listing_id: u.id, role_subscription_group_listing_id: n, template_name: s.templateCategory, has_change_from_template: s.hasChangeFromTemplate, ...(0, o.collectGuildAnalyticsMetadata)(t) }), await m(t, n, { includeArchivedListings: !0 }), null == a || a(u), r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING", listing: u }), u } async function p(e) { let { guildId: t, listingId: n, groupListingId: i, data: s } = e, a = await d.updateGuildRoleSubscriptionListing(t, i, n, s); return r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING", listing: a }), await m(t, i, { includeArchivedListings: !0 }), a } async function O(e) { let { signal: t } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = !1; for (let s = 0; s < 3; s++) try { if (null == t ? void 0 : t.aborted) { r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED", guildId: e }); return } r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS", guildId: e }); let { restrictions: i } = await d.getGuildMonetizationRestrictions(e, { signal: t }); r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS", guildId: e, restrictions: null != i ? i : [] }), n = !0; break } catch (e) { await (0, i.sleep)((s + 1) * u.default.Millis.SECOND) }!n && r.default.dispatch({ type: "GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE", guildId: e }) } }, 293810: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CREATOR_REVENUE_PORTAL_URL: function() { return S }, CREATOR_REVENUE_SHARE_PERCENTAGE: function() { return h }, GuildRoleSubscriptionBenefitTypes: function() { return l }, GuildRoleSubscriptionFormat: function() { return u }, MAX_SUBSCRIPTION_TIERS: function() { return E }, RESPONSIVE_MOBILE_HEIGHT_SMALL_QUERY: function() { return T }, RESPONSIVE_MOBILE_WIDTH_SIZE_QUERY: function() { return I }, SERVER_SUBSCRIPTIONS_PREMIUM_CHECKLIST_EDUCATIONAL_URLS: function() { return A }, TIER_TRIAL_INTERVALS: function() { return f }, UserGuildRoleSubscriptionRelationship: function() { return d } }); var i, r, s, a, o, l, u, d, _ = n("474936"), c = n("231338"); let E = 3, I = "(max-width: 485px)", T = "(max-height: 450px)"; (i = o || (o = {})).GATING = "GATING", i.GROUP = "GROUP", i.DETAILS = "DETAILS", i.BENEFITS = "BENEFITS", i.CHANNEL_BENEFITS = "CHANNEL_BENEFITS", i.INTANGIBLE_BENEFITS = "INTANGIBLE_BENEFITS ", i.DESIGN = "DESIGN", i.CONFIRMATION = "CONFIRMATION", i.MEMBERS = "MEMBERS", (r = l || (l = {}))[r.CHANNEL = 1] = "CHANNEL", r[r.INTANGIBLE = 2] = "INTANGIBLE", (s = u || (u = {}))[s.SOME_CHANNELS = 0] = "SOME_CHANNELS", s[s.ALL_CHANNELS = 1] = "ALL_CHANNELS"; let f = [{ interval: _.SubscriptionIntervalTypes.DAY, interval_count: 1 }, { interval: _.SubscriptionIntervalTypes.DAY, interval_count: 7 }]; (a = d || (d = {}))[a.NONE = 0] = "NONE", a[a.IN_SUBSCRIPTION_SERVER = 1] = "IN_SUBSCRIPTION_SERVER", a[a.SUBSCRIBED = 2] = "SUBSCRIBED"; let S = "https://".concat(c.PRIMARY_DOMAIN, "/creators"), h = 90, A = Object.freeze({ PROMO_PAGE_GUIDE: "https://discord.com/creators/say-hello-to-promo-pages-our-new-server-subscriptions-feature", CASE_STUDIES: "https://discord.com/creator-portal/learn-from-creators?tab=creator-case-studies", SUBSCRIPTION_OFFERING_GUIDE: "https://discord.com/creators/offering-inspiration-", TIER_STRUCTURE_GUIDE: "https://discord.com/creators/server-subs-102-to-tier-or-not-to-tier" }) }, 923726: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hasEnabledMonetization: function() { return u }, isGuildEligibleForRoleSubscriptions: function() { return a }, isGuildEligibleForTierTemplates: function() { return d }, isUserEligibleForTierTemplates: function() { return E }, useGuildEligibleForRoleSubscriptions: function() { return s }, useGuildEligibleForTierTemplates: function() { return _ }, useRoleSubscriptionMaxTiersExperiment: function() { return o }, useShowCreatorPortalLinkForTierTemplates: function() { return c }, useUserEligibleForTierTemplates: function() { return I } }), n("223892"); var i = n("644542"), r = n("981631"); function s(e) { let { enableRoleSubscriptionsForGuild: t } = i.GuildRoleSubscriptionsExperiment.useExperiment({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "504714_1" }, { autoTrackExposure: !0 }), { enableRoleSubscriptionsForUser: n } = i.GuildRoleSubscriptionUsersExperiment.useExperiment({ location: "504714_2" }, { autoTrackExposure: !1 }); return null != e && t && n } function a(e) { let { enableRoleSubscriptionsForGuild: t } = i.GuildRoleSubscriptionsExperiment.getCurrentConfig({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "504714_3" }), { enableRoleSubscriptionsForUser: n } = i.GuildRoleSubscriptionUsersExperiment.getCurrentConfig({ location: "504714_4" }, { autoTrackExposure: !1 }); return null != e && t && n } function o(e) { return i.GuildRoleSubscriptionMaxTiersExperiment.useExperiment({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "504714_7" }) } let l = [r.GuildFeatures.ROLE_SUBSCRIPTIONS_ENABLED, r.GuildFeatures.CREATOR_MONETIZABLE, r.GuildFeatures.CREATOR_MONETIZABLE_PROVISIONAL], u = e => null != e && l.some(t => e.hasFeature(t)); function d(e) { let { enabled: t } = i.GuildRoleSubscriptionsTierTemplatesExperiment.getCurrentConfig({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "504714_9" }, { autoTrackExposure: !1 }); return t } function _(e) { let { enabled: t } = i.GuildRoleSubscriptionsTierTemplatesExperiment.useExperiment({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "504714_10" }, { autoTrackExposure: !1 }); return t } function c(e) { let { showCreatorPortalLink: t } = i.GuildRoleSubscriptionsTierTemplatesExperiment.useExperiment({ guildId: null != e ? e : r.EMPTY_STRING_SNOWFLAKE_ID, location: "504714_11" }, { autoTrackExposure: !1 }); return t } function E() { let { enabled: e } = i.GuildRoleSubscriptionsTierTemplatesUserExperiment.getCurrentConfig({ location: "504714_12" }, { autoTrackExposure: !1 }); return e } function I() { let { enabled: e } = i.GuildRoleSubscriptionsTierTemplatesUserExperiment.useExperiment({ location: "504714_13" }, { autoTrackExposure: !1 }); return e } }, 295141: function(e, t, n) { "use strict"; n.r(t), n.d(t, { archiveGuildRoleSubscriptionListing: function() { return S }, createGuildRoleSubscriptionGroupListing: function() { return o }, createGuildRoleSubscriptionListing: function() { return l }, deleteGuildRoleSubscriptionListing: function() { return f }, fetchHighlightedCreatorGuildDetails: function() { return p }, getGuildMonetizationRestrictions: function() { return N }, getGuildRoleSubscriptionGroupForSubscriptionPlan: function() { return T }, getGuildRoleSubscriptionGroupListing: function() { return I }, getGuildRoleSubscriptionGroupListingsForGuild: function() { return d }, getGuildRoleSubscriptionTrialEligibility: function() { return m }, getGuildRoleSubscriptionTrials: function() { return h }, getGuildRoleSubscriptionsSettings: function() { return _ }, getPriceTiers: function() { return E }, updateGuildRoleSubscriptionListing: function() { return u }, updateGuildRoleSubscriptionsSettings: function() { return c }, updateGuildRoleSubscriptionsTrial: function() { return A } }); var i = n("544891"), r = n("881052"), s = n("981631"), a = n("231338"); let o = async (e, t) => { try { return (await i.HTTP.post({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_GROUP_LISTINGS(e), body: t })).body } catch (e) { throw new r.APIError(e) } }, l = async (e, t, n) => { let { priceTier: a, ...o } = n; try { return (await i.HTTP.post({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_LISTINGS(e, t), body: { ...o, price_tier: a } })).body } catch (e) { throw new r.APIError(e) } }, u = async (e, t, n, a) => { let { priceTier: o, ...l } = a; try { return (await i.HTTP.patch({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_LISTINGS(e, t, n), body: { ...l, price_tier: o } })).body } catch (e) { throw new r.APIError(e) } }, d = async function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { includeSoftDeleted: !1 }, n = { include_soft_deleted: t.includeSoftDeleted, country_code: t.countryCode }; try { return (await i.HTTP.get({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_GROUP_LISTINGS(e), query: n })).body } catch (e) { throw new r.APIError(e) } }, _ = async e => (await i.HTTP.get({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTIONS_SETTINGS(e) })).body, c = async (e, t) => { try { return (await i.HTTP.patch({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTIONS_SETTINGS(e), body: t })).body } catch (e) { throw new r.APIError(e) } }, E = async e => { try { return (await i.HTTP.get({ url: s.Endpoints.PRICE_TIERS, query: { price_tier_type: a.PriceTierTypes.GUILD_ROLE_SUBSCRIPTIONS, guild_id: e } })).body } catch (e) { throw new r.APIError(e) } }, I = async function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; try { return (await i.HTTP.get({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_GROUP_LISTINGS(e, t), query: { include_draft_listings: n.includeDraftListings, include_archived_listings: n.includeArchivedListings } })).body } catch (e) { throw new r.APIError(e) } }, T = async e => { try { return (await i.HTTP.get({ url: s.Endpoints.SUBSCRIPTION_PLAN_GUILD_ROLE_GROUP_LISTING(e) })).body } catch (e) { throw new r.APIError(e) } }, f = async (e, t, n) => { try { await i.HTTP.del({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_LISTINGS(e, t, n) }) } catch (e) { throw new r.APIError(e) } }, S = async (e, t, n) => { try { return (await i.HTTP.post({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_GROUP_LISTING_ARCHIVE(e, t, n) })).body } catch (e) { throw new r.APIError(e) } }, h = async e => { try { return (await i.HTTP.get({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_TRIALS(e) })).body } catch (e) { throw new r.APIError(e) } }, A = async (e, t, n) => { try { return (await i.HTTP.patch({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_LISTING_TRIAL(e, t), body: n })).body } catch (e) { throw new r.APIError(e) } }, m = async (e, t, n) => { try { return (await i.HTTP.get({ url: s.Endpoints.GUILD_ROLE_SUBSCRIPTION_TRIAL_ELIGIBILITY(e, t, n) })).body } catch (e) { throw new r.APIError(e) } }, N = async function(e) { let { signal: t } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; try { return (await i.HTTP.get({ url: s.Endpoints.CREATOR_MONETIZATION_RESTRICTIONS(e), signal: t })).body } catch (e) { throw new r.APIError(e) } }, p = async e => { try { var t; let n = await i.HTTP.get({ url: s.Endpoints.GUILD_DISCOVERY_SLUG(e) }); return null !== (t = n.body) && void 0 !== t ? t : JSON.parse(n.text) } catch (e) { throw new r.APIError(e) } } }, 289393: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return i } }), n("47120"); var i, r, s, a, o, l, u = n("512722"), d = n.n(u), _ = n("442837"), c = n("759174"), E = n("570140"), I = n("308636"); function T(e) { return "guild:".concat(e) } function f(e) { return "subscription_listing:".concat(e) } function S(e) { return "application:".concat(e) } function h(e) { return "plan:".concat(e) }(s = i || (i = {}))[s.NOT_FETCHED = 0] = "NOT_FETCHED", s[s.FETCHING = 1] = "FETCHING", s[s.FETCHED = 2] = "FETCHED"; let A = new c.SecondaryIndexMap(e => [T(e.guild_id), ...e.subscription_listings_ids.map(f)], e => e.id), m = new c.SecondaryIndexMap(e => [S(e.application_id), h(e.subscription_plans[0].id)], e => e.id), N = {}, p = new Set, O = {}, C = {}, R = {}, g = {}, L = new Map; function v(e) { return A.values(T(e)) } function D(e) { var t; for (let n of (A.set(e.id, e), L.set(e.guild_id, e.application_id), null !== (t = e.subscription_listings) && void 0 !== t ? t : [])) M(n) } function M(e) { m.set(e.id, e) } let y = []; class P extends(r = _.default.Store) { getSubscriptionGroupListingsForGuildFetchState(e) { var t; return null !== (t = N[e]) && void 0 !== t ? t : 0 } getDidFetchListingForSubscriptionPlanId(e) { return p.has(e) } getSubscriptionGroupListing(e) { return A.get(e) } getSubscriptionGroupListingsForGuild(e) { return v(e) } getSubscriptionGroupListingForSubscriptionListing(e) { let t = A.values(f(e)); return d()(t.length <= 1, "Found multiple group listings for listing"), t[0] } getSubscriptionListing(e) { return m.get(e) } getSubscriptionListingsForGuild(e) { var t; let n = null === (t = this.getSubscriptionGroupListingsForGuild(e)[0]) || void 0 === t ? void 0 : t.application_id; return null != n ? m.values(S(n)) : y } getSubscriptionListingForPlan(e) { let t = m.values(h(e)); return d()(t.length <= 1, "Found multiple listings for plan"), t[0] } getSubscriptionSettings(e) { return O[e] } getSubscriptionTrial(e) { return C[e] } getMonetizationRestrictions(e) { return R[e] } getMonetizationRestrictionsFetchState(e) { var t; return null !== (t = g[e]) && void 0 !== t ? t : 0 } getApplicationIdForGuild(e) { return L.get(e) } } l = "GuildRoleSubscriptionsStore", (o = "displayName") in(a = P) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new P(E.default, { CONNECTION_OPEN: function() { A.clear(), m.clear(), N = {}, p.clear(), O = {}, C = {}, R = {}, g = {}, L.clear() }, GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTIONS_SETTINGS: function(e) { let { settings: t } = e; O[t.guild_id] = t }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS: function(e) { let { guildId: t } = e; for (let e of (N[t] = 1, v(t))) for (let t of (A.delete(e.id), e.subscription_listings_ids)) m.delete(t) }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS: function(e) { let { guildId: t, groupListings: n, settings: i, subscriptionTrials: r } = e; for (let e of (N[t] = 2, n)) D(e); for (let e of (O[t] = i, r)) C[e.id] = e }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE: function(e) { let { guildId: t } = e; N[t] = 2 }, GUILD_ROLE_SUBSCRIPTIONS_UPDATE_GROUP_LISTING: function(e) { let { listing: t } = e; D(t) }, GUILD_ROLE_SUBSCRIPTIONS_DELETE_GROUP_LISTING: function(e) { let { groupListingId: t } = e; A.delete(t) }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN: function(e) { let { planId: t } = e; p.add(t) }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS: function(e) { let { groupListing: t } = e; D(t) }, GUILD_ROLE_SUBSCRIPTIONS_CREATE_LISTING: function(e) { let { listing: t, groupListing: n } = e; M(t), D(n) }, GUILD_ROLE_SUBSCRIPTIONS_UPDATE_LISTING: function(e) { let { listing: t } = e; M(t) }, GUILD_ROLE_SUBSCRIPTIONS_DELETE_LISTING: function(e) { let { listingId: t } = e; return m.delete(t) }, GUILD_ROLE_SUBSCRIPTIONS_UPDATE_SUBSCRIPTION_TRIAL: function(e) { let { subscriptionTrial: t } = e; C[t.id] = t }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS: function(e) { let { guildId: t } = e; g[t] = 1 }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_SUCCESS: function(e) { let { guildId: t, restrictions: n } = e; R[t] = n, g[t] = 2 }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_FAILURE: function(e) { let { guildId: t } = e; g[t] = 2, R[t] = I.DefaultCreatorMonetizationRestrictions }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_RESTRICTIONS_ABORTED: function(e) { let { guildId: t } = e; g[t] = 0 } }) }, 973542: function(e, t, n) { "use strict"; function i(e) { var t; return (null == e ? void 0 : null === (t = e.tags) || void 0 === t ? void 0 : t.subscription_listing_id) != null } function r(e) { var t; return (null == e ? void 0 : null === (t = e.tags) || void 0 === t ? void 0 : t.available_for_purchase) !== void 0 } n.r(t), n.d(t, { isSubscriptionRole: function() { return i }, isSubscriptionRoleAvailableForPurchase: function() { return r } }) }, 790285: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isAllChannelsRole: function() { return s }, isChannelAccessDeniedBy: function() { return a }, isChannelAccessGrantedBy: function() { return o } }); var i = n("149765"), r = n("981631"); function s(e) { return i.has(e.permissions, r.Permissions.VIEW_CHANNEL) } function a(e, t) { return null != t && (!!i.has(t.deny, r.Permissions.VIEW_CHANNEL) || e.isGuildVocal() && i.has(t.deny, r.Permissions.CONNECT)) } function o(e, t) { return !(null == t || a(e, t)) && !!i.has(t.allow, r.Permissions.VIEW_CHANNEL) && (!e.isGuildVocal() || i.has(t.allow, r.Permissions.CONNECT)) } }, 889564: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isPurchasableRoleSubscriptionEmoji: function() { return s }, isRoleSubscriptionEmoji: function() { return r }, isUnusableRoleSubscriptionEmoji: function() { return a } }); var i = n("687476"); function r(e, t) { if ((null == e ? void 0 : e.roles) == null || 0 === e.roles.length || null == t) return !1; let n = i.default.getSubscriptionRoles(t); return e.roles.some(e => n.has(e)) } function s(e) { if ((null == e ? void 0 : e.roles) == null || 0 === e.roles.length || null == e.guildId) return !1; let t = i.default.getPurchasableSubscriptionRoles(e.guildId); return e.roles.some(e => t.has(e)) } function a(e, t) { if ((null == e ? void 0 : e.roles) == null || 0 === e.roles.length || null == e.guildId) return !1; if (s(e)) { let n = i.default.getUserSubscriptionRoles(e.guildId), r = e.roles.some(e => n.has(e)), s = t === e.guildId && i.default.getUserIsAdmin(e.guildId); if (!(r || s)) return !0 } return !1 } }, 687476: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("149765"), l = n("442837"), u = n("570140"), d = n("271383"), _ = n("430824"), c = n("594174"), E = n("973542"), I = n("981631"); let T = new Set, f = new Map, S = new Map, h = new Map, A = new Map, m = null; function N(e) { let t = c.default.getCurrentUser(), n = _.default.getGuild(e); if (null == n || null == t) return !1; let i = new Set, r = new Set, s = new Set; if (A.set(e, n.isOwner(t)), n.hasFeature(I.GuildFeatures.ROLE_SUBSCRIPTIONS_ENABLED)) { var a, l; let u = d.default.getMember(e, t.id), c = new Set(null !== (a = null == u ? void 0 : u.roles) && void 0 !== a ? a : []), T = _.default.getRoles(n.id); for (let t in T) { ; let n = T[t]; if ((0, E.isSubscriptionRole)(n) && (i.add(t), (0, E.isSubscriptionRoleAvailableForPurchase)(n) && (r.add(t), c.has(t) && s.add(t))), c.has(t) && (l = n, o.has(l.permissions, I.Permissions.ADMINISTRATOR))) A.set(e, !0) } } return f.set(e, i), h.set(e, s), S.set(e, r), !0 } function p() { f.clear(), h.clear(), S.clear(), A.clear(), m = null } function O(e) { let { guild: { id: t } } = e; if (null == m) return !1; let n = _.default.getGuild(t); if (null == n) return !1; let i = n.hasFeature(I.GuildFeatures.ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE); if (i && !m.has(t)) { let e = new Set(m); return e.add(t), m = e, !0 } if (!i && m.has(t)) { let e = new Set(m); return e.delete(t), m = e, !0 } return !1 } function C(e) { let { guildId: t } = e; return !!f.has(t) && N(t) } class R extends(i = l.default.Store) { initialize() { this.waitFor(_.default) } getGuildIdsWithPurchasableRoles() { return null == m ? function() { let e = _.default.getGuilds(), t = new Set; for (let n in e) e[n].hasFeature(I.GuildFeatures.ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE) && t.add(n); return m = t, t }() : m } buildRoles(e) { !f.has(e) && N(e) } getSubscriptionRoles(e) { var t; return this.buildRoles(e), null !== (t = f.get(e)) && void 0 !== t ? t : T } getPurchasableSubscriptionRoles(e) { var t; return this.buildRoles(e), null !== (t = S.get(e)) && void 0 !== t ? t : T } getUserSubscriptionRoles(e) { var t; return this.buildRoles(e), null !== (t = h.get(e)) && void 0 !== t ? t : T } getUserIsAdmin(e) { var t; return this.buildRoles(e), null !== (t = A.get(e)) && void 0 !== t && t } } a = "SubscriptionRoleStore", (s = "displayName") in(r = R) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new R(u.default, { CONNECTION_OPEN: p, LOGOUT: p, GUILD_CREATE: O, GUILD_DELETE: function(e) { let { guild: { id: t } } = e; if ((null == m ? void 0 : m.has(t)) !== !0) return !1; let n = new Set(m); n.delete(t), m = n }, GUILD_UPDATE: O, GUILD_ROLE_CREATE: C, GUILD_ROLE_UPDATE: C, GUILD_ROLE_DELETE: C, GUILD_MEMBER_UPDATE: function(e) { let { guildId: t, user: n } = e, i = c.default.getCurrentUser(); return !!(n.id === (null == i ? void 0 : i.id) && f.has(t)) && N(t) } }) }, 944537: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AllChannelAccessOptions: function() { return r }, useEditStateStore: function() { return a } }); var i, r, s = n("652874"); (i = r || (r = {}))[i.ALL_CHANNELS_ACCESS = 0] = "ALL_CHANNELS_ACCESS", i[i.SOME_CHANNELS_ACCESS = 1] = "SOME_CHANNELS_ACCESS"; let a = (0, s.default)(e => ({ listings: {}, setListing: (t, n) => e(e => ({ listings: { ...e.listings, [t]: n(e.listings[t]) } })), editStateIdsForGroup: {}, setEditStateIdsForGroup: (t, n) => e(e => ({ editStateIdsForGroup: { ...e.editStateIdsForGroup, [t]: n(e.editStateIdsForGroup[t]) } })) })) }, 144507: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildRoleSubscriptionSettingsVisibility: function() { return r }, canManageGuildRoleSubscriptions: function() { return f }, canSeeGuildRoleSubscriptionSettings: function() { return E }, useCanManageGuildRoleSubscriptions: function() { return T }, useGuildRoleSubscriptionSettingsVisibility: function() { return I } }); var i, r, s = n("442837"), a = n("223892"), o = n("674180"), l = n("496675"), u = n("594174"), d = n("923726"), _ = n("981631"); (i = r || (r = {}))[i.NONE = 0] = "NONE", i[i.WAITLIST_ONLY = 1] = "WAITLIST_ONLY", i[i.NEEDS_COMMUNITY = 2] = "NEEDS_COMMUNITY", i[i.VISIBLE = 3] = "VISIBLE"; function c(e) { if (e.guild.hasFeature(_.GuildFeatures.CREATOR_MONETIZABLE_DISABLED)) return 0; if (function(e) { let { guild: t, isOwner: n, canManageGuildRoleSubscriptions: i, isGuildEligibleForRoleSubscriptions: r, isExpeditedMonetizationOnboardingGuild: s, isUserInCreatorMonetizationEligibleCountry: a, shouldRestrictUpdatingRoleSubscriptionSettings: o } = e; return !!t.hasFeature(_.GuildFeatures.COMMUNITY) && !!i && (!o || !!n) && (!!(t.hasFeature(_.GuildFeatures.CREATOR_MONETIZABLE) || t.hasFeature(_.GuildFeatures.CREATOR_MONETIZABLE_PROVISIONAL)) || (!!r || !!s) && n && a) }(e)) return 3; let { guild: t, isOwner: n, isUserInCreatorMonetizationEligibleCountry: i, isMonetizationWaitlistEnabledForGuild: r, isGuildEligibleForRoleSubscriptions: s, isExpeditedMonetizationOnboardingGuild: a } = e; return n && !i && r ? 1 : n && r && (s || a) && !t.hasFeature(_.GuildFeatures.COMMUNITY) ? 2 : 0 } function E(e) { return 0 !== c(e) } function I(e) { let t = (0, d.useGuildEligibleForRoleSubscriptions)(null == e ? void 0 : e.id), n = (0, a.useIsExpeditedOnboardingGuild)(e), i = (0, a.useIsMonetizationWaitlistEnabledForGuild)(null == e ? void 0 : e.id), r = T(e), l = (0, s.useStateFromStores)([u.default], () => { let t = u.default.getCurrentUser(); return null != t && (null == e ? void 0 : e.isOwner(t)) === !0 }), _ = (0, a.useIsUserInCreatorMonetizationEligibleCountry)(), { shouldRestrictUpdatingCreatorMonetizationSettings: E } = (0, o.useShouldRestrictUpdatingCreatorMonetizationSettings)(null == e ? void 0 : e.id); return null == e ? 0 : c({ guild: e, isOwner: l, canManageGuildRoleSubscriptions: r, isGuildEligibleForRoleSubscriptions: t, isMonetizationWaitlistEnabledForGuild: i, isExpeditedMonetizationOnboardingGuild: n, isUserInCreatorMonetizationEligibleCountry: _, shouldRestrictUpdatingRoleSubscriptionSettings: E }) } function T(e) { return (0, s.useStateFromStores)([l.default], () => f(e), [e]) } function f(e) { return null != e && l.default.can(_.Permissions.ADMINISTRATOR, e) } }, 978519: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canUseRoleSubscriptionIAP: function() { return l } }), n("470079"), n("399606"); var i = n("430824"), r = n("358085"), s = n("341653"), a = n("981631"); let o = [a.GuildFeatures.ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE]; function l(e) { if (!(0, r.isIOS)()) return !1; let t = (0, s.getSystemVersion)(); if (null == t || -1 === function(e, t) { let n = e.split(".").map(Number), i = t.split(".").map(Number), r = Math.max(n.length, i.length); for (let e = 0; e < r; e++) { var s, a; let t = null !== (s = n[e]) && void 0 !== s ? s : 0, r = null !== (a = i[e]) && void 0 !== a ? a : 0; if (t < r) return -1; if (t > r) return 1 } return 0 }(t, "13.2")) return !1; let n = i.default.getGuild(e); return !!(null != n && o.every(e => n.hasFeature(e))) || !1 } }, 341653: function(e, t, n) { "use strict"; function i() { return null } n.r(t), n.d(t, { getSystemVersion: function() { return i } }) }, 853439: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("131704"), d = n("592125"); let _ = {}, c = {}; class E extends(a = o.default.Store) { getTemplates(e) { return _[e] } getTemplateWithCategory(e, t) { var n; return null === (n = _[e]) || void 0 === n ? void 0 : n.find(e => e.category === t) } getChannel(e) { return c[e] } } s = "GuildRoleSubscriptionTierTemplatesStore", (r = "displayName") in(i = E) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new E(l.default, { GUILD_ROLE_SUBSCRIPTIONS_STASH_TEMPLATE_CHANNELS: function(e) { let { selectedTemplate: t, guildId: n } = e, i = Object.values(d.default.getMutableGuildChannelsForGuild(n)); t.listings.forEach(e => { e.channels.forEach(e => { let t = i.find(t => t.name === e.name); if (void 0 !== t) e.id = t.id; else if (!(e.id in c)) { let t = (0, u.createChannelRecord)(e); c[e.id] = t } }) }) }, GUILD_ROLE_SUBSCRIPTIONS_FETCH_TEMPLATES: function(e) { let { templates: t, guildId: n } = e; _[n] = t } }) }, 303737: function(e, t, n) { "use strict"; n.r(t), n.d(t, { announceCreateTemplateChannels: function() { return m }, announceDeleteTemplateChannels: function() { return N }, createChannelsFromTemplateTierBenefits: function() { return p }, getTemplateTierCreationAnalyticsContext: function() { return O }, isEligibleForNewBadge: function() { return C }, useChannelWithTemplateFallback: function() { return S }, useSuggestedUnusedPrices: function() { return h } }), n("653041"), n("47120"), n("998459"); var i = n("991637"), r = n.n(i), s = n("399606"), a = n("570140"), o = n("333848"), l = n("592125"), u = n("923726"), d = n("289393"), _ = n("944537"), c = n("144507"), E = n("853439"), I = n("981631"), T = n("176505"); r().shim(); let f = {}; function S(e) { let t = (0, s.useStateFromStores)([l.default], () => l.default.getChannel(e)), n = (0, s.useStateFromStores)([E.default], () => E.default.getChannel(e)); return null != t ? t : n } function h(e, t, n) { let i = (0, s.useStateFromStores)([d.default], () => d.default.getSubscriptionListingsForGuild(e)), r = (0, _.useEditStateStore)(t => t.editStateIdsForGroup[e]), a = (0, _.useEditStateStore)(e => e.listings); if (void 0 === n || void 0 === t) return null; let o = i.filter(e => !e.soft_deleted && !e.archived).map(e => e.subscription_plans[0].price), l = []; void 0 !== r && r.forEach(e => { let t = a[e], n = null == t ? void 0 : t.priceTier; null != n && l.push(n) }); let u = new Set(l.concat(o)); if (!u.has(n)) return null; let c = t.indexOf(n); if (-1 === c) return null; let E = []; for (let e = c + 1; e < t.length && (!u.has(t[e]) && E.push(t[e]), 3 !== E.length); e++); return E } function A(e) { let t = _.useEditStateStore.getState().editStateIdsForGroup[e], n = _.useEditStateStore.getState().listings, i = new Set; null != t && t.forEach(e => { var t; let r = null === (t = n[e]) || void 0 === t ? void 0 : t.channelBenefits; null == r || r.forEach(e => { null != E.default.getChannel(e.ref_id) && i.add(e.ref_id) }) }); let r = []; for (let t of i) { let n = E.default.getChannel(t); if (null != n) { let t = n.set("guild_id", e); r.push(t) } } return r } function m(e) { let t = A(e); f[e] = t, t.forEach(e => { let t = e.set("flags", T.ChannelFlags.IS_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL); a.default.dispatch({ type: "CHANNEL_CREATE", channel: t }) }) } function N(e) { var t; (null !== (t = f[e]) && void 0 !== t ? t : A(e)).forEach(e => { a.default.dispatch({ type: "CHANNEL_DELETE", channel: e }) }) } async function p(e, t) { let n = [], i = []; if (t.forEach(t => { let r = E.default.getChannel(t.ref_id); null != r && (n.push(o.default.createRoleSubscriptionTemplateChannel(e, r.name, r.type, r.topic)), i.push(r)) }), 0 !== n.length)(await Promise.allSettled(n)).forEach((n, r) => { let s = i[r].id; if ("fulfilled" === n.status) { let t = n.value.body, i = _.useEditStateStore.getState().editStateIdsForGroup[e], r = _.useEditStateStore.getState().listings; null != i && i.forEach(e => { var n; let i = null === (n = r[e]) || void 0 === n ? void 0 : n.channelBenefits; null == i || i.forEach(e => { e.ref_id === s && (e.ref_id = t.id) }) }) } else if (null != t) { let e = t.findIndex(e => e.ref_id === s); - 1 !== e && (null == t || t.splice(e, 1)) } }) } function O(e, t) { var n, i; let r = _.useEditStateStore.getState().listings[e], s = null == r ? void 0 : r.usedTemplate; if (null == s) return { templateCategory: null, hasChangeFromTemplate: null }; let a = E.default.getTemplateWithCategory(t, s); if (null == a) return { templateCategory: null, hasChangeFromTemplate: null }; let o = a.listings[0]; if ((null == r ? void 0 : r.name) !== o.name || (null == r ? void 0 : r.description) !== o.description || (null == r ? void 0 : r.priceTier) !== o.price_tier || (null == r ? void 0 : r.image) !== o.image || (null == r ? void 0 : r.roleColor) !== o.role_color || (null == r ? void 0 : null === (n = r.channelBenefits) || void 0 === n ? void 0 : n.length) !== o.channels.length || (null == r ? void 0 : null === (i = r.intangibleBenefits) || void 0 === i ? void 0 : i.length) !== o.additional_perks.length) return { templateCategory: a.category, hasChangeFromTemplate: !0 }; for (let e = 0; e < o.channels.length; e++) { let t = r.channelBenefits[e], n = o.channels[e]; if (t.name !== n.name || t.description !== n.description || t.emoji_name !== n.emoji_name) return { templateCategory: a.category, hasChangeFromTemplate: !0 } } for (let e = 0; e < o.additional_perks.length; e++) { let t = r.intangibleBenefits[e], n = o.additional_perks[e]; if (t.name !== n.name || t.description !== n.description || t.emoji_name !== n.emoji_name) return { templateCategory: a.category, hasChangeFromTemplate: !0 } } return { templateCategory: a.category, hasChangeFromTemplate: !1 } } function C(e) { return (0, c.canManageGuildRoleSubscriptions)(e) && e.hasFeature(I.GuildFeatures.ROLE_SUBSCRIPTIONS_ENABLED) && (0, u.isUserEligibleForTierTemplates)() && (0, u.isGuildEligibleForTierTemplates)(e.id) } }, 66999: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u }, getChannelRoleSubscriptionStatus: function() { return d } }); var i = n("442837"), r = n("430198"), s = n("592125"), a = n("496675"), o = n("981631"); let l = { needSubscriptionToAccess: !1, isSubscriptionGated: !1 }; function u(e) { return (0, i.useStateFromStoresObject)([s.default, r.default, a.default], () => d(e, s.default, r.default, a.default), [e]) } function d(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : s.default, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : r.default, i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : a.default, u = t.getChannel(e); return (null == u ? void 0 : u.isRoleSubscriptionTemplatePreviewChannel()) ? { isSubscriptionGated: !0, needSubscriptionToAccess: !0 } : null != u && n.isChannelGated(u.guild_id, u.id) ? { isSubscriptionGated: !0, needSubscriptionToAccess: u.isGuildVocal() ? !i.can(o.Permissions.CONNECT, u) : !i.can(o.Permissions.VIEW_CHANNEL, u) } : l } }, 772021: function(e, t, n) { "use strict"; n.r(t), n.d(t, { computeHasRoleSubscriptionsInGuild: function() { return l }, default: function() { return u } }), n("47120"); var i = n("442837"), r = n("314897"), s = n("271383"), a = n("430824"), o = n("981631"); function l(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null == e ? null : s.default.getMember(e, r.default.getId()), [i] = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : [a.default], l = i.getGuild(e); if (null == l || null == n || !l.hasFeature(o.GuildFeatures.ROLE_SUBSCRIPTIONS_ENABLED)) return !1; for (let e of n.roles) { var u; let n = null == t ? void 0 : t[e]; if ((null == n ? void 0 : null === (u = n.tags) || void 0 === u ? void 0 : u.subscription_listing_id) != null) return !0 } return !1 } function u(e) { let t = (0, i.useStateFromStores)([r.default, s.default], () => null == e ? null : s.default.getMember(e, r.default.getId())); return (0, i.useStateFromStores)([a.default], () => l(e, null != e ? a.default.getRoles(e) : void 0, t, [a.default]), [e, t]) } }, 994592: function(e, t, n) { "use strict"; n.r(t), n.d(t, { areRoleSubscriptionsVisibleInGuild: function() { return c }, useRoleSubscriptionsVisibleInGuild: function() { return E }, useShowRoleSubscriptionsInChannelList: function() { return I } }), n("47120"); var i = n("442837"), r = n("652515"), s = n("200876"), a = n("674180"), o = n("160404"), l = n("430824"), u = n("772021"), d = n("981631"); function _(e) { let [t, n] = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [l.default, o.default], i = t.getGuild(e); if (null == i) return !1; let r = (0, s.isCreatorMonetizationEnabledGuild)(i), a = i.hasFeature(d.GuildFeatures.ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE); return !!(r && a || n.isViewingServerShop(e)) || !1 } function c(e, t) { return !!_(e) || (0, u.computeHasRoleSubscriptionsInGuild)(e, t) } function E(e) { let t = (0, u.default)(e), n = (0, i.useStateFromStores)([l.default, o.default], () => _(e, [l.default, o.default]), [e]), { shouldHideGuildPurchaseEntryPoints: r } = (0, a.useShouldHideGuildPurchaseEntryPoints)(e); return !r && (n || t) } function I(e) { let t = E(e), n = (0, r.useIsEligibleForSubscriptionsInGuildShop)(e, "useShowRoleSubscriptionsInChannelList"); return t && !n } }, 761966: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("976644"), l = n("549631"), u = n("517039"); function d(e) { let { children: t, className: n, size: r = a.Button.Sizes.MEDIUM, onlyShineOnHover: d = !1, ..._ } = e; return (0, i.jsx)(o.default, { ..._, color: a.Button.Colors.CUSTOM, size: r, className: s()(u.button, n), onlyShineOnHover: d, children: (0, i.jsxs)("div", { className: u.buttonContents, children: [(0, i.jsx)(l.default, { className: u.icon }), t] }) }) } }, 549631: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 16, height: n = t, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsx)("path", { d: "M14.3385 7.6721L10.4015 6.85189L11.891 4.56187C11.9309 4.49891 11.9482 4.42423 11.94 4.35013C11.9318 4.27603 11.8986 4.20692 11.8459 4.15421C11.7932 4.10149 11.7241 4.06829 11.65 4.06009C11.5759 4.05189 11.5012 4.0692 11.4382 4.10911L9.14822 5.59859L8.328 1.66158C8.328 1.57457 8.29345 1.49114 8.23193 1.42961C8.1704 1.36809 8.08693 1.3335 7.99992 1.3335C7.91291 1.3335 7.82944 1.36809 7.76791 1.42961C7.70639 1.49114 7.67183 1.57457 7.67183 1.66158L6.85162 5.59859L4.5616 4.10911C4.49863 4.0692 4.42395 4.05189 4.34985 4.06009C4.27576 4.06829 4.20665 4.10149 4.15393 4.15421C4.10122 4.20692 4.06802 4.27603 4.05982 4.35013C4.05162 4.42423 4.06892 4.49891 4.10884 4.56187L5.59836 6.85189L1.66134 7.6721C1.57432 7.6721 1.49086 7.70665 1.42933 7.76818C1.3678 7.8297 1.33325 7.91317 1.33325 8.00018C1.33325 8.0872 1.3678 8.17062 1.42933 8.23215C1.49086 8.29368 1.57432 8.32827 1.66134 8.32827L5.59836 9.14848L4.10884 11.4385C4.06803 11.5011 4.05031 11.5759 4.0587 11.6502C4.06708 11.7244 4.10104 11.7934 4.15477 11.8453C4.18407 11.8768 4.21963 11.9019 4.25918 11.9188C4.29874 11.9358 4.34139 11.9443 4.38442 11.9438C4.44713 11.9426 4.50835 11.9244 4.5616 11.8913L6.85162 10.4017L7.67183 14.3387C7.67183 14.4258 7.70639 14.5092 7.76791 14.5708C7.82944 14.6323 7.91291 14.6668 7.99992 14.6668C8.08693 14.6668 8.1704 14.6323 8.23193 14.5708C8.29345 14.5092 8.328 14.4258 8.328 14.3387L9.14822 10.4017L11.4382 11.8913C11.4915 11.9244 11.5527 11.9426 11.6154 11.9438C11.6585 11.9443 11.7011 11.9358 11.7407 11.9188C11.7802 11.9019 11.8158 11.8768 11.8451 11.8453C11.8988 11.7934 11.9328 11.7244 11.9411 11.6502C11.9495 11.5759 11.9318 11.5011 11.891 11.4385L10.4015 9.14848L14.3385 8.32827C14.4255 8.32827 14.509 8.29368 14.5705 8.23215C14.632 8.17062 14.6666 8.0872 14.6666 8.00018C14.6666 7.91317 14.632 7.8297 14.5705 7.76818C14.509 7.70665 14.4255 7.6721 14.3385 7.6721Z", fill: s, className: a }) }) } }, 770812: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }); var i = n("735250"); n("470079"); var r = n("990547"), s = n("442837"), a = n("780384"), o = n("481060"), l = n("410030"), u = n("100527"), d = n("906732"), _ = n("213609"), c = n("703656"), E = n("430824"), I = n("682864"), T = n("465670"), f = n("687476"), S = n("761966"), h = n("981631"), A = n("176505"), m = n("689938"), N = n("763959"); let p = () => { let e = (0, l.default)(); return (0, a.isThemeLight)(e) ? n("537381") : n("341048") }; function O(e) { let { onClose: t, guildId: n, emojiId: a } = e, l = p(), { analyticsLocations: O } = (0, d.default)(u.default.GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL); (0, _.default)({ type: r.ImpressionTypes.MODAL, name: r.ImpressionNames.ROLE_SUBSCRIPTION_EMOJI_UPSELL, properties: { location_stack: O, emoji_guild_id: n, emoji_id: null != a ? a : null } }); let C = (0, s.useStateFromStores)([E.default], () => E.default.getGuild(n)), R = (0, s.useStateFromStores)([f.default], () => null != n && f.default.getUserSubscriptionRoles(n).size > 0), g = R ? m.default.Messages.GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPGRADE_UPSELL_DESCRIPTION : m.default.Messages.GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_PURCHASE_UPSELL_DESCRIPTION.format({ serverName: null == C ? void 0 : C.name }), L = R ? m.default.Messages.GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL_UPGRADE_CTA : m.default.Messages.GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL_PURCHASE_CTA; return (0, i.jsxs)("div", { className: N.container, children: [(0, i.jsx)("div", { className: N.background }), (0, i.jsxs)("div", { className: N.content, children: [(0, i.jsx)(o.Button, { look: o.Button.Looks.BLANK, size: o.Button.Sizes.ICON, className: N.closeButton, onClick: t, children: (0, i.jsx)(T.default, { "aria-label": m.default.Messages.CLOSE, width: 16, height: 16, className: N.closeButtonIcon }) }), (0, i.jsx)("img", { alt: "", src: l, className: N.upsellImage }), (0, i.jsx)(I.default, { size: 22 }), (0, i.jsx)(o.Heading, { color: "header-primary", variant: "heading-lg/extrabold", className: N.header, children: m.default.Messages.GUILD_ROLE_SUBSCRIPTION_EMOJI_PICKER_UPSELL_TITLE }), (0, i.jsx)(I.default, { size: 4 }), (0, i.jsx)(o.Text, { color: "header-secondary", variant: "text-md/normal", className: N.description, children: g }), (0, i.jsx)(I.default, { size: 24 }), (0, i.jsx)(S.default, { onClick: () => { (0, c.transitionTo)(h.Routes.CHANNEL(n, A.StaticChannelRoute.ROLE_SUBSCRIPTIONS), void 0, void 0, O) }, children: L })] })] }) } }, 849464: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { RecurrenceOptions: function() { return i } }), (r = i || (i = {}))[r.NONE = 0] = "NONE", r[r.WEEKLY = 1] = "WEEKLY", r[r.MONTHLY = 2] = "MONTHLY", r[r.YEARLY = 3] = "YEARLY", r[r.WEEKDAY_ONLY = 4] = "WEEKDAY_ONLY", r[r.BIWEEKLY = 5] = "BIWEEKLY", r[r.WEEKEND_ONLY = 6] = "WEEKEND_ONLY" }, 897285: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("57132"), s = n("914010"), a = n("924301"), o = n("482241"); let l = {}, u = new Set, d = async e => { if (0 !== a.default.getGuildScheduledEventsForGuild(e).length) { if (!u.has(e)) try { await o.default.getGuildEventsForCurrentUser(e), u.add(e) } catch (e) {} } }; class _ extends i.default { async getGuildEventUserCounts(e, t, n) { let i = n.filter(n => null == l["".concat(e, "-").concat(t, "-").concat(n)] || Date.now() - l["".concat(e, "-").concat(t, "-").concat(n)] > 18e5); if (!(Date.now() - l["".concat(e, "-").concat(t)] < 18e5) || 0 !== i.length) { l["".concat(e, "-").concat(t)] = Date.now(), i.forEach(n => l["".concat(e, "-").concat(t, "-").concat(n)] = Date.now()); try { await o.default.fetchGuildEventUserCounts(e, t, i) } catch (e) {} } } getGuildEventUsers(e, t, n) { return o.default.fetchUsersForGuildEvent(e, t, n) } getGuildEventsForCurrentUser(e) { return d(e) } handleConnectionOpen() { u.clear(), l = {}; let e = (0, r.isInMainTabsExperiment)(), t = s.default.getLastSelectedGuildId(); e && null != t && a.default.getGuildScheduledEventsForGuild(t).forEach(e => this.getGuildEventUserCounts(t, e.id, [])) } handleGuildUnavailable(e) { let { guildId: t } = e; u.delete(t), delete l[t] } handleGuildDelete(e) { let { guild: t } = e, n = t.id; u.delete(n), delete l[n] } handleInviteResolveSuccess(e) { var t; let { invite: n } = e, i = n.guild_scheduled_event, r = null === (t = n.guild) || void 0 === t ? void 0 : t.id; null != i && null != r && d(r) } handleChannelSelect(e) { let { guildId: t } = e; if (null != t) a.default.getGuildScheduledEventsForGuild(t).forEach(e => this.getGuildEventUserCounts(t, e.id, [])) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: () => this.handleConnectionOpen(), GUILD_DELETE: e => this.handleGuildDelete(e), GUILD_UNAVAILABLE: e => this.handleGuildUnavailable(e), INVITE_RESOLVE_SUCCESS: e => this.handleInviteResolveSuccess(e), CHANNEL_SELECT: e => this.handleChannelSelect(e) }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new _ }, 15274: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openEndEventModal: function() { return d }, openGuildEventDetails: function() { return l }, transitionToEventDetailsFromInvite: function() { return u } }); var i = n("735250"); n("470079"); var r = n("952265"), s = n("749210"), a = n("981631"), o = n("602091"); function l(e) { let { eventId: t, parentGuildId: s, recurrenceId: a } = e; (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("11250"), n.e("95393"), n.e("14262"), n.e("22347"), n.e("92816")]).then(n.bind(n, "697849")); return n => (0, i.jsx)(e, { guildScheduledEventId: t, parentGuildId: s, initialRecurrenceId: a, ...n }) }) } async function u(e, t) { let { guild_id: n } = e; await s.default.transitionToGuildSync(n, t), l({ eventId: e.id, event: e }) } function d(e, t) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("14262"), n.e("21395")]).then(n.bind(n, "312757")); return n => (0, i.jsx)(t, { ...n, channel: e }) }, { contextKey: t === a.AppContext.POPOUT ? o.POPOUT_MODAL_CONTEXT : o.DEFAULT_MODAL_CONTEXT }) } }, 924301: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StaticGuildEventIndexes: function() { return f }, isEventUpcoming: function() { return b }, isGuildEventEnded: function() { return G }, isGuildScheduledEventActive: function() { return U }, scheduledEventSort: function() { return S } }), n("653041"), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("759174"), _ = n("570140"), c = n("314897"), E = n("271383"), I = n("709054"), T = n("765305"); let f = { EVENT: "event", EVENT_ACTIVE: "active", EVENT_UPCOMING: "event-upcoming", GUILD_EVENT: e => "".concat(e, "-").concat(f.EVENT), GUILD_EVENT_ACTIVE: e => "".concat(e, "-").concat(f.EVENT_ACTIVE), GUILD_EVENT_UPCOMING: e => "".concat(e, "-").concat(f.EVENT_UPCOMING), CHANNEL_EVENT: e => "".concat(e, "-").concat(f.EVENT), CHANNEL_EVENT_ACTIVE: e => "".concat(e, "-").concat(f.EVENT_ACTIVE), CHANNEL_EVENT_UPCOMING: e => "".concat(e, "-").concat(f.EVENT_UPCOMING) }; function S(e) { let { id: t, scheduled_start_time: n } = e, i = U(e) ? "\0" : "\x01"; return "".concat(i, "-").concat(new Date(n).getTime(), "-").concat(t) } let h = new d.SecondaryIndexMap(e => { let { guild_id: t, entity_id: n, channel_id: i } = e, r = [t]; return null != n && r.push(n), r.push(f.GUILD_EVENT(t)), null != i && r.push(f.CHANNEL_EVENT(i)), U(e) && (r.push(f.EVENT_ACTIVE), r.push(f.GUILD_EVENT_ACTIVE(t)), null != i && r.push(f.CHANNEL_EVENT_ACTIVE(i))), b(e) && (r.push(f.EVENT_UPCOMING), r.push(f.GUILD_EVENT_UPCOMING(t)), null != i && r.push(f.CHANNEL_EVENT_UPCOMING(i))), r }, S), A = 0, m = [], N = "SERIES", p = {}, O = {}; function C(e) { h.set(e.id, e), A += 1 } function R(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; h.delete(e), delete p[e], t && delete O[e], A += 1 } function g(e) { return null != e ? e : N } function L(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = e.guild_scheduled_event_id; null == p[i] && (p[i] = {}); let r = g(e.guild_scheduled_event_exception_id); null == p[i][r] && (p[i][r] = {}), p[i][r][e.user_id] = e, t && function(e) { var t, n; let i = g(e.guild_scheduled_event_exception_id), r = null !== (n = null === (t = O[e.guild_scheduled_event_id]) || void 0 === t ? void 0 : t[i]) && void 0 !== n ? n : 0, s = null != e.guild_scheduled_event_exception_id && e.response === T.GuildScheduledEventUserResponses.UNINTERESTED || null == e.guild_scheduled_event_exception_id && e.response === T.GuildScheduledEventUserResponses.INTERESTED ? 1 : -1; D(e.guild_scheduled_event_id, e.guild_scheduled_event_exception_id, r + s) }(e), n && (A += 1) } function v(e) { var t, n, i, r; let s = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], a = g(e.guild_scheduled_event_exception_id), o = (null === (n = p[e.guild_scheduled_event_id]) || void 0 === n ? void 0 : null === (t = n[a]) || void 0 === t ? void 0 : t[e.user_id]) != null, l = e.user_id === c.default.getId(); (o || !l) && (null === (r = p[e.guild_scheduled_event_id]) || void 0 === r || null === (i = r[a]) || void 0 === i || delete i[e.user_id], function(e) { var t, n; let i = g(e.guild_scheduled_event_exception_id), r = null !== (n = null === (t = O[e.guild_scheduled_event_id]) || void 0 === t ? void 0 : t[i]) && void 0 !== n ? n : 0, s = null != e.guild_scheduled_event_exception_id && e.response === T.GuildScheduledEventUserResponses.UNINTERESTED || null == e.guild_scheduled_event_exception_id && e.response === T.GuildScheduledEventUserResponses.INTERESTED ? -1 : 1; D(e.guild_scheduled_event_id, e.guild_scheduled_event_exception_id, r + s) }(e), s && (A += 1)) } function D(e, t, n) { let i = g(t); null == O[e] && (O[e] = {}), O[e][i] = n } function M(e, t) { h.values(f.GUILD_EVENT(e)).forEach(e => R(e.id, t)) } function y(e) { let { guildScheduledEvent: t } = e; return C(t), !0 } function P(e) { let { eventException: t } = e, n = h.get(t.event_id); if (null == n) return !1; let i = n.guild_scheduled_event_exceptions.findIndex(e => e.event_exception_id === t.event_exception_id), r = [...n.guild_scheduled_event_exceptions]; return i < 0 ? r.push(t) : r[i] = t, C({ ...n, guild_scheduled_event_exceptions: r }), !0 } function U(e) { var t; return null != e && (t = (null == e ? void 0 : e.status) === T.GuildScheduledEventStatus.ACTIVE, t) } function b(e) { return !T.GuildScheduledEventStatusDone.has(e.status) } function G(e) { return null != e && T.GuildScheduledEventStatusDone.has(e.status) } class w extends(i = u.default.Store) { getGuildScheduledEvent(e) { var t; return null == e ? null : null !== (t = h.get(e)) && void 0 !== t ? t : null } getGuildEventCountByIndex(e) { return h.size(e) } getGuildScheduledEventsForGuild(e) { return null == e ? [] : h.values(e) } getGuildScheduledEventsByIndex(e) { return h.values(e) } getRsvpVersion() { return A } getRsvp(e, t, n) { var i, r; if (null == e) return null; let s = g(t); return null === (r = p[e]) || void 0 === r ? void 0 : null === (i = r[s]) || void 0 === i ? void 0 : i[n] } isInterestedInEventRecurrence(e, t) { let n = c.default.getId(), i = this.getRsvp(e, null, n), r = this.getRsvp(e, t, n), s = (null == i ? void 0 : i.response) === T.GuildScheduledEventUserResponses.INTERESTED, a = (null == r ? void 0 : r.response) === T.GuildScheduledEventUserResponses.INTERESTED, o = (null == r ? void 0 : r.response) === T.GuildScheduledEventUserResponses.UNINTERESTED; return s && !o || a } getUserCount(e, t) { var n, i, r, s; if (null == e) return 0; let a = null !== (r = null === (n = O[e]) || void 0 === n ? void 0 : n[N]) && void 0 !== r ? r : 0; return null == t ? a : a - (null !== (s = null === (i = O[e]) || void 0 === i ? void 0 : i[t]) && void 0 !== s ? s : 0) } hasUserCount(e, t) { var n; let i = g(t); return (null === (n = O[e]) || void 0 === n ? void 0 : n[i]) != null } isActive(e) { return null != e && U(h.get(e)) } getActiveEventByChannel(e) { if (null != e) return this.getGuildScheduledEventsByIndex(f.CHANNEL_EVENT_ACTIVE(e))[0] } getUsersForGuildEvent(e, t) { var n, i; if (null == e) return {}; let r = g(t); return null !== (i = null === (n = p[e]) || void 0 === n ? void 0 : n[r]) && void 0 !== i ? i : {} } } a = "GuildScheduledEventStore", (s = "displayName") in(r = w) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new w(_.default, { CONNECTION_OPEN: function(e) { let { guilds: t } = e; return h.clear(), A = 0, p = {}, O = {}, m.forEach(C), t.forEach(e => e.guild_scheduled_events.forEach(e => C(e))), !0 }, GUILD_CREATE: function(e) { let { guild: t } = e; return M(t.id, !1), t.guild_scheduled_events.forEach(e => C(e)), !0 }, GUILD_DELETE: function(e) { let { guild: t } = e; return M(t.id, !0), !0 }, FETCH_GUILD_EVENT: function(e) { let { guildScheduledEvent: t } = e; C(t) }, FETCH_GUILD_EVENTS_FOR_GUILD: function(e) { let { guildId: t, guildScheduledEvents: n } = e, i = h.values(f.GUILD_EVENT(t), !0).map(e => e.id), r = n.map(e => e.id); for (let e of (l().difference(i, r).forEach(e => { R(e) }), n)) C(e); return !0 }, GUILD_SCHEDULED_EVENT_CREATE: y, GUILD_SCHEDULED_EVENT_UPDATE: y, GUILD_SCHEDULED_EVENT_DELETE: function(e) { let { guildScheduledEvent: t } = e; return R(t.id), !0 }, GUILD_SCHEDULED_EVENT_USER_ADD: function(e) { var t, n; let { userId: i, guildEventId: r, guildId: s, guildEventExceptionId: a, response: o } = e, l = g(a), u = null === (n = p[r]) || void 0 === n ? void 0 : null === (t = n[l]) || void 0 === t ? void 0 : t[i]; null != u && v(u, !1); let d = E.default.getMember(s, i); return L({ user_id: i, guild_scheduled_event_id: r, member: null != d ? d : void 0, guild_scheduled_event_exception_id: a, response: o }), !0 }, GUILD_SCHEDULED_EVENT_USER_REMOVE: function(e) { let { userId: t, guildEventId: n, guildEventExceptionId: i, response: r } = e; v({ user_id: t, guild_scheduled_event_id: n, guild_scheduled_event_exception_id: i, response: r }) }, GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS: function(e) { let { guildScheduledEventUsers: t } = e; return t.forEach(e => L(e, !1, !1)), A += 1, !0 }, GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS: function(e) { let { guildScheduledEventUsers: t } = e; return t.forEach(e => L(e, !1, !1)), A += 1, !0 }, GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS: function(e) { let { eventId: t, counts: n } = e; D(t, null, n.eventCount), I.default.forEachKey(n.recurrenceCounts, e => { D(t, e, n.eventCount - n.recurrenceCounts[e]) }) }, INVITE_RESOLVE_SUCCESS: function(e) { let { invite: t } = e, n = t.guild_scheduled_event; return null != n && (C(n), !0) }, GUILD_SCHEDULED_EVENT_EXCEPTION_CREATE: P, GUILD_SCHEDULED_EVENT_EXCEPTION_UPDATE: P, GUILD_SCHEDULED_EVENT_EXCEPTION_DELETE: function(e) { let { eventException: t } = e, n = h.get(t.event_id); if (null == n) return !1; let i = n.guild_scheduled_event_exceptions.filter(e => e.event_exception_id !== t.event_exception_id); return C({ ...n, guild_scheduled_event_exceptions: i }), !0 }, GUILD_SCHEDULED_EVENT_EXCEPTIONS_DELETE: function(e) { let { eventId: t } = e, n = h.get(t); return null != n && (C({ ...n, guild_scheduled_event_exceptions: [] }), !0) }, LOGOUT: function() { return h.clear(), !0 } }) }, 482241: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("287734"), a = n("703656"), o = n("314897"), l = n("709054"), u = n("73346"), d = n("924301"), _ = n("236373"), c = n("124165"), E = n("765305"), I = n("981631"); t.default = { startEvent: (e, t) => i.HTTP.patch({ url: I.Endpoints.GUILD_EVENT(t, e), body: { status: E.GuildScheduledEventStatus.ACTIVE } }), endEvent: (e, t) => i.HTTP.patch({ url: I.Endpoints.GUILD_EVENT(t, e), body: { status: E.GuildScheduledEventStatus.COMPLETED } }), joinVoiceEvent(e, t) { s.default.selectVoiceChannel(t), (0, a.transitionTo)(I.Routes.CHANNEL(e, t)) }, saveEvent(e, t, n, r) { let s = E.ENTITY_TYPES_REQUIRED_CHANNEL_ID.has(t.entityType) ? t.channelId : null, a = E.ENTITY_TYPES_REQUIRED_ENTITY_METADATA.has(t.entityType) ? t.entityMetadata : null, o = null != t.image && !1 === /^data:/.test(t.image) ? void 0 : t.image, l = { name: t.name, description: t.description, image: o, privacy_level: t.privacyLevel, scheduled_start_time: t.scheduledStartTime, scheduled_end_time: t.scheduledEndTime, entity_type: t.entityType, channel_id: s, entity_metadata: a, broadcast_to_directory_channels: r.broadcastToDirectoryChannels, recurrence_rule: (0, _.recurrenceRuleToServer)(t.recurrenceRule) }; return i.HTTP.patch({ url: I.Endpoints.GUILD_EVENT(n, e), body: l }) }, createGuildEvent(e, t, n) { let r = { name: e.name, description: e.description, image: e.image, privacy_level: e.privacyLevel, scheduled_start_time: e.scheduledStartTime, scheduled_end_time: e.scheduledEndTime, entity_type: e.entityType, channel_id: e.channelId, entity_metadata: e.entityMetadata, broadcast_to_directory_channels: n.broadcastToDirectoryChannels, recurrence_rule: (0, _.recurrenceRuleToServer)(e.recurrenceRule) }; return i.HTTP.post({ url: I.Endpoints.GUILD_EVENTS_FOR_GUILD(t), body: r }) }, async fetchGuildEvent(e, t) { let { body: n } = await (0, u.httpGetWithCountryCodeQuery)(I.Endpoints.GUILD_EVENT(e, t)); return r.default.dispatch({ type: "FETCH_GUILD_EVENT", guildScheduledEvent: n }), n }, async fetchGuildEventsForGuild(e) { let t = { url: I.Endpoints.GUILD_EVENTS_FOR_GUILD(e) }, { body: n } = await (0, u.httpGetWithCountryCodeQuery)(t); return r.default.dispatch({ type: "FETCH_GUILD_EVENTS_FOR_GUILD", guildId: e, guildScheduledEvents: n }), n }, async fetchGuildEventUserCounts(e, t, n) { let s = { url: I.Endpoints.GUILD_EVENT_USER_COUNTS(e, t), query: { guild_scheduled_event_exception_ids: n } }, { body: { guild_scheduled_event_count: a, guild_scheduled_event_exception_counts: o } } = await i.HTTP.get(s), l = { eventCount: a, recurrenceCounts: o }; return r.default.dispatch({ type: "GUILD_SCHEDULED_EVENT_USER_COUNTS_FETCH_SUCCESS", guildId: e, eventId: t, counts: l }), l }, cancelGuildEvent: (e, t) => i.HTTP.patch({ url: I.Endpoints.GUILD_EVENT(t, e), body: { status: E.GuildScheduledEventStatus.CANCELED } }), deleteGuildEvent: (e, t) => i.HTTP.del({ url: I.Endpoints.GUILD_EVENT(t, e) }), async getGuildEventsForCurrentUser(e) { let { body: t } = await i.HTTP.get({ url: I.Endpoints.USER_GUILD_EVENTS, query: { guild_ids: [e] } }); r.default.dispatch({ type: "GUILD_SCHEDULED_EVENT_RSVPS_FETCH_SUCESS", guildScheduledEventUsers: t, guildId: e }) }, async createRsvpForGuildEvent(e, t, n, s) { let a = o.default.getId(); try { return r.default.dispatch({ type: "GUILD_SCHEDULED_EVENT_USER_ADD", userId: a, guildId: n, guildEventId: e, guildEventExceptionId: t, response: s }), await i.HTTP.put({ url: I.Endpoints.USER_GUILD_EVENT(n, e, t), body: { response: s } }) } catch (i) { throw r.default.dispatch({ type: "GUILD_SCHEDULED_EVENT_USER_REMOVE", userId: a, guildId: n, guildEventId: e, guildEventExceptionId: t, response: s }), i } }, async deleteRsvpForGuildEvent(e, t, n) { let s = o.default.getId(), a = d.default.getRsvp(e, t, s); if (null != a) try { return r.default.dispatch({ type: "GUILD_SCHEDULED_EVENT_USER_REMOVE", userId: s, guildId: n, guildEventId: e, guildEventExceptionId: t, response: a.response }), await i.HTTP.del({ url: I.Endpoints.USER_GUILD_EVENT(n, e, t) }) } catch (i) { throw r.default.dispatch({ type: "GUILD_SCHEDULED_EVENT_USER_ADD", userId: s, guildId: n, guildEventId: e, guildEventExceptionId: t, response: a.response }), i } }, async updateRsvp(e, t, n, i, r) { if (null != (0, c.getExistingRsvp)(e, t)) try { await this.deleteRsvpForGuildEvent(e, t, n), null == r || r() } catch (e) { null == r || r(e) } else try { await this.createRsvpForGuildEvent(e, t, n, i), null == r || r() } catch (e) { null == r || r(e) } }, async fetchUsersForGuildEvent(e, t, n) { let s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : E.MAX_RSVP_USER_DISPLAY_COUNT; if (null == e || null == n) return []; let a = await i.HTTP.get({ url: I.Endpoints.GUILD_EVENT_USERS(n, e, t), query: { limit: s, with_member: !0, upgrade_response_type: !0 } }); return r.default.dispatch({ type: "GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS", guildEventId: e, guildScheduledEventUsers: a.body, guildId: n, guildEventExceptionId: t }), a.body.users }, createGuildEventException(e, t, n) { let { original_scheduled_start_time: r, scheduled_start_time: s, scheduled_end_time: a, is_canceled: o } = e; return i.HTTP.post({ url: I.Endpoints.GUILD_EVENT_EXCEPTIONS(t, n), body: { original_scheduled_start_time: r, scheduled_start_time: s, scheduled_end_time: a, is_canceled: o } }) }, updateGuildEventException(e, t, n, r) { let { scheduled_start_time: s, scheduled_end_time: a, is_canceled: o } = e; return i.HTTP.patch({ url: I.Endpoints.GUILD_EVENT_EXCEPTION(t, n, r), body: { scheduled_start_time: s, scheduled_end_time: a, is_canceled: o } }) }, deleteGuildEventException: (e, t, n) => i.HTTP.del({ url: I.Endpoints.GUILD_EVENT_EXCEPTION(e, t, n) }), deleteRecurrence(e, t, n, i) { if (null != i) this.updateGuildEventException({ scheduled_start_time: i.scheduled_start_time, scheduled_end_time: i.scheduled_end_time, is_canceled: !0 }, e, t, n); else { let i = l.default.extractTimestamp(n); this.createGuildEventException({ original_scheduled_start_time: new Date(i).toISOString(), is_canceled: !0 }, e, t) } } } }, 765305: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ACKED_RECENTLY_WINDOW_DAYS: function() { return y }, ANALYTICS_GUILD_EVENTS_MODAL_NAME: function() { return p }, ENTITY_TYPES_REQUIRED_CHANNEL_ID: function() { return L }, ENTITY_TYPES_REQUIRED_ENTITY_METADATA: function() { return g }, EVENT_STARTING_SOON_WINDOW_MILLISECONDS: function() { return M }, EntityChannelTypes: function() { return R }, EventDetailSections: function() { return o }, FAKE_EVENT_ID: function() { return O }, GUILD_EVENT_MAX_DESCRIPTION_LENGTH: function() { return m }, GUILD_EVENT_MAX_NAME_LENGTH: function() { return A }, GuildScheduledEventEntityTypes: function() { return r }, GuildScheduledEventNotificationTypes: function() { return s }, GuildScheduledEventPrivacyLevel: function() { return a }, GuildScheduledEventStatus: function() { return i }, GuildScheduledEventStatusDone: function() { return C }, GuildScheduledEventUserResponses: function() { return u }, MAX_EVENT_LOCATION_LENGTH: function() { return N }, MAX_RSVP_USER_DISPLAY_COUNT: function() { return v }, NEW_EVENT_WINDOW_MILLISECONDS: function() { return D }, UpcomingGuildEventNoticeTypes: function() { return l } }), n("47120"); var i, r, s, a, o, l, u, d, _, c, E, I, T, f, S = n("70956"), h = n("981631"); let A = 100, m = 1e3, N = 100, p = "Guild Events Modal", O = "-1"; (d = i || (i = {}))[d.SCHEDULED = 1] = "SCHEDULED", d[d.ACTIVE = 2] = "ACTIVE", d[d.COMPLETED = 3] = "COMPLETED", d[d.CANCELED = 4] = "CANCELED"; let C = new Set([3, 4]); (_ = r || (r = {}))[_.NONE = 0] = "NONE", _[_.STAGE_INSTANCE = 1] = "STAGE_INSTANCE", _[_.VOICE = 2] = "VOICE", _[_.EXTERNAL = 3] = "EXTERNAL", _[_.PRIME_TIME = 4] = "PRIME_TIME", (c = s || (s = {}))[c.EVENT_START = 1] = "EVENT_START", (E = a || (a = {}))[E.PUBLIC = 1] = "PUBLIC", E[E.GUILD_ONLY = 2] = "GUILD_ONLY"; let R = { 1: h.ChannelTypes.GUILD_STAGE_VOICE, 2: h.ChannelTypes.GUILD_VOICE }, g = new Set([3]), L = new Set([1, 2]); (I = o || (o = {}))[I.EVENT_INFO = 0] = "EVENT_INFO", I[I.RSVP_LIST = 1] = "RSVP_LIST"; let v = 100, D = 2 * S.default.Millis.DAY, M = 12 * S.default.Millis.HOUR, y = 4; (T = l || (l = {})).NEW_EVENT = "Upcoming Event Notice", T.EVENT_STARTING_SOON = "Event Starting Soon Notice", (f = u || (u = {}))[f.UNINTERESTED = 0] = "UNINTERESTED", f[f.INTERESTED = 1] = "INTERESTED" }, 85243: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CREATE_GUILD_EVENT_CORE_PERMISSIONS: function() { return a }, CREATE_GUILD_EVENT_STAGE_CHANNEL_PERMISSIONS: function() { return l }, CREATE_GUILD_EVENT_VOICE_CHANNEL_PERMISSIONS: function() { return o } }); var i = n("149765"), r = n("146085"), s = n("981631"); let a = s.Permissions.VIEW_CHANNEL, o = i.combine(a, s.Permissions.CONNECT), l = i.combine(a, r.MODERATE_STAGE_CHANNEL_PERMISSIONS) }, 894017: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s }, getEventException: function() { return a } }); var i = n("442837"), r = n("924301"); function s(e, t) { return o((0, i.useStateFromStoresArray)([r.default], () => { var e, n; return null !== (n = null === (e = r.default.getGuildScheduledEvent(t)) || void 0 === e ? void 0 : e.guild_scheduled_event_exceptions) && void 0 !== n ? n : [] }), e) } function a(e, t) { var n, i; return o(null !== (i = null === (n = r.default.getGuildScheduledEvent(t)) || void 0 === n ? void 0 : n.guild_scheduled_event_exceptions) && void 0 !== i ? i : [], e) } function o(e, t) { return null == e ? void 0 : e.find(e => e.event_exception_id === t) } }, 79874: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u }, getEventSchedule: function() { return d } }); var i = n("512722"), r = n.n(i), s = n("442837"), a = n("924301"), o = n("894017"), l = n("854698"); function u(e, t, n) { var i; let u = null !== (i = (0, s.useStateFromStores)([a.default], () => a.default.getGuildScheduledEvent(e))) && void 0 !== i ? i : n; return r()(null != u, "Event must be defined"), t = null != t ? t : (0, l.getNextRecurrenceIdInEvent)(u), _(u, (0, o.default)(t, e), t) } function d(e, t) { let n = (0, o.getEventException)(t, e.id); return _(e, n, t) } function _(e, t, n) { if (null == e.recurrence_rule || null == n) return { startTime: new Date(e.scheduled_start_time), endTime: null != e.scheduled_end_time ? new Date(e.scheduled_end_time) : null }; let i = (0, l.getBaseScheduleForRecurrence)(n, e), { startDate: r, endDate: s } = (0, l.getScheduleForRecurrenceWithException)(i, t); return { startTime: r.toDate(), endTime: null == s ? void 0 : s.toDate() } } }, 236373: function(e, t, n) { "use strict"; n.r(t), n.d(t, { convertToFakeGuildEvent: function() { return c }, getInitialGuildEventData: function() { return E }, isEditingEvent: function() { return u }, recurrenceRuleFromServer: function() { return _ }, recurrenceRuleToServer: function() { return d } }); var i, r, s = n("314897"), a = n("230900"), o = n("854698"), l = n("765305"); function u(e) { return !!(null == e ? void 0 : e.id) } function d(e) { var t, n; return null == e ? null : { start: e.start, end: e.end, frequency: e.frequency, interval: e.interval, by_weekday: e.byWeekday, by_n_weekday: e.byNWeekday, by_month: e.byMonth, by_month_day: (null !== (n = null === (t = e.byMonthDay) || void 0 === t ? void 0 : t.length) && void 0 !== n ? n : 0) > 0 ? e.byMonthDay : null, by_year_day: e.byYearDay, count: e.count } } function _(e) { return null == e ? null : { start: new Date(e.start).toISOString(), end: null != e.end ? new Date(e.end).toISOString() : null, frequency: e.frequency, interval: e.interval, byWeekday: e.by_weekday, byNWeekday: e.by_n_weekday, byMonth: e.by_month, byMonthDay: e.by_month_day, byYearDay: e.by_year_day, count: e.count } }(i = r || (r = {})).CHANNEL_SELECTOR = "ChannelSelector", i.DETAILS = "Details", i.PREVIEW = "Preview"; function c(e, t, n) { let { name: i, description: r, privacyLevel: a, channelId: o, scheduledStartTime: u, scheduledEndTime: _, entityType: c, entityMetadata: E, image: I, recurrenceRule: T, eventExceptions: f } = e; return { id: null != n ? n : l.FAKE_EVENT_ID, name: i, description: null != r ? r : null, privacy_level: a, scheduled_start_time: u, scheduled_end_time: _, entity_type: c, entity_metadata: null != E ? E : null, image: null != I ? I : void 0, channel_id: o, guild_id: t, creator_id: s.default.getId(), status: l.GuildScheduledEventStatus.SCHEDULED, recurrence_rule: d(T), guild_scheduled_event_exceptions: f.map(e => ({ event_exception_id: e.eventExceptionId, event_id: e.eventId, guild_id: e.guildId, scheduled_start_time: e.scheduledStartTime, scheduled_end_time: e.scheduledEndTime, is_canceled: e.isCanceled })) } } function E(e, t) { var n, i, r, s, u, d, c, E; let I = { name: null !== (n = null == e ? void 0 : e.name) && void 0 !== n ? n : "", privacyLevel: null !== (i = null == e ? void 0 : e.privacy_level) && void 0 !== i ? i : l.GuildScheduledEventPrivacyLevel.GUILD_ONLY, description: null !== (r = null == e ? void 0 : e.description) && void 0 !== r ? r : "", scheduledStartTime: null !== (s = null == e ? void 0 : e.scheduled_start_time) && void 0 !== s ? s : (0, o.getInitialEventStartDate)().toISOString(), entityType: null !== (u = null == e ? void 0 : e.entity_type) && void 0 !== u ? u : l.GuildScheduledEventEntityTypes.NONE, entityMetadata: null !== (d = null == e ? void 0 : e.entity_metadata) && void 0 !== d ? d : void 0, channelId: null == e ? void 0 : e.channel_id, creatorId: null == e ? void 0 : e.creator_id, image: null == e ? void 0 : e.image, scheduledEndTime: null == e ? void 0 : e.scheduled_end_time, recurrenceRule: _(null == e ? void 0 : e.recurrence_rule), eventExceptions: (null !== (c = null == e ? void 0 : e.guild_scheduled_event_exceptions) && void 0 !== c ? c : []).map(e => ({ eventExceptionId: e.event_exception_id, eventId: e.event_id, guildId: e.guild_id, scheduledStartTime: e.scheduled_start_time, scheduledEndTime: e.scheduled_end_time, isCanceled: e.is_canceled })) }; if (null != (E = e) && "id" in E && (null == e ? void 0 : e.entity_type) === l.GuildScheduledEventEntityTypes.EXTERNAL) { let t = (0, a.getLocationFromEvent)(e); null != t && (I.entityMetadata = { location: t }) } else null == I.channelId && null != t && (I.channelId = t.id, t.isGuildStageVoice() ? I.entityType = l.GuildScheduledEventEntityTypes.STAGE_INSTANCE : t.isGuildVoice() && (I.entityType = l.GuildScheduledEventEntityTypes.VOICE)); return I } }, 230900: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getChannelFromEvent: function() { return s }, getChannelTypeFromEntity: function() { return u }, getLocationFromEvent: function() { return o }, getLocationFromEventData: function() { return l } }); var i = n("592125"), r = n("765305"); function s(e) { let t; let { entity_type: n, channel_id: s } = e; if (n in r.EntityChannelTypes && null != s) { var a; t = null !== (a = i.default.getChannel(e.channel_id)) && void 0 !== a ? a : void 0 } return t } function a(e, t) { let n = null; return e === r.GuildScheduledEventEntityTypes.EXTERNAL && null != t && "location" in t && (n = t.location), n } function o(e) { let { entity_type: t, entity_metadata: n } = e; return a(t, n) } function l(e) { let { entityType: t, entityMetadata: n } = e; return a(t, n) } function u(e) { return e === r.GuildScheduledEventEntityTypes.VOICE || e === r.GuildScheduledEventEntityTypes.STAGE_INSTANCE ? r.EntityChannelTypes[e] : void 0 } }, 124165: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ResponseOptions: function() { return r }, getExistingRsvp: function() { return c }, getResponseOptions: function() { return E }, handleRsvp: function() { return I } }); var i, r, s = n("314897"), a = n("924301"), o = n("894017"), l = n("79874"), u = n("854698"), d = n("765305"), _ = n("689938"); function c(e, t) { let n = s.default.getId(); return a.default.getRsvp(e, t, n) } function E() { return [{ name: _.default.Messages.GUILD_SCHEDULED_EVENT_RSVP_PICKER_OPTION_SERIES, value: 0 }, { name: _.default.Messages.GUILD_SCHEDULED_EVENT_RSVP_PICKER_OPTION_RECURRENCE, value: 1 }] } function I(e) { let { eventId: t, recurrenceId: n, guildId: i, updateRsvp: r, openRsvpPicker: s, onRsvp: _ } = e, E = a.default.getGuildScheduledEvent(t); if (null == E) return; let I = (0, o.getEventException)(n, t), { startTime: T } = (0, l.getEventSchedule)(E, n), f = (null == E ? void 0 : E.scheduled_start_time) != null ? (0, u.getRecurrenceStatus)(I, T, new Date(null == E ? void 0 : E.scheduled_start_time)) : null, S = null != f && d.GuildScheduledEventStatusDone.has(f) ? null : null != n ? n : (0, u.getNextRecurrenceIdInEvent)(E), h = c(E.id), A = c(E.id, S); null == S ? (r(t, null, i, null != h ? d.GuildScheduledEventUserResponses.UNINTERESTED : d.GuildScheduledEventUserResponses.INTERESTED), null == _ || _()) : null != A ? (r(t, S, i, null != h ? d.GuildScheduledEventUserResponses.INTERESTED : d.GuildScheduledEventUserResponses.UNINTERESTED), null == _ || _()) : s(E, S) }(i = r || (r = {}))[i.SERIES = 0] = "SERIES", i[i.RECURRENCE = 1] = "RECURRENCE" }, 854698: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_DAYS_AHEAD_AN_EVENT_CAN_END: function() { return I }, MAX_DAYS_AHEAD_AN_EVENT_CAN_START: function() { return E }, MAX_YEARS_AHEAD_RECURRING_EVENT: function() { return T }, areDatesIdentical: function() { return b }, areSchedulesIdentical: function() { return G }, generateNextRecurrences: function() { return k }, getBaseScheduleForRecurrence: function() { return y }, getEventTimeData: function() { return v }, getInitialEventStartDate: function() { return R }, getNextRecurrenceIdInEvent: function() { return B }, getRRule: function() { return w }, getRecurrenceOptions: function() { return C }, getRecurrenceStatus: function() { return W }, getScheduleForRecurrenceWithException: function() { return P }, getScheduleFromEventData: function() { return U }, hasScheduleChanges: function() { return j }, isValidRecurrence: function() { return V }, recurrenceOptionToRecurrenceRule: function() { return H }, recurrenceRuleToOption: function() { return Y } }), n("47120"), n("653041"); var i = n("392711"), r = n("913527"), s = n.n(r), a = n("859334"), o = n("594174"), l = n("70956"), u = n("709054"), d = n("849464"), _ = n("765305"), c = n("689938"); let E = 365, I = 366, T = 4, f = [a.RRule.MO.weekday, a.RRule.TU.weekday, a.RRule.WE.weekday, a.RRule.TH.weekday, a.RRule.FR.weekday], S = [a.RRule.SU.weekday, a.RRule.MO.weekday, a.RRule.TU.weekday, a.RRule.WE.weekday, a.RRule.TH.weekday], h = [a.RRule.TU.weekday, a.RRule.WE.weekday, a.RRule.TH.weekday, a.RRule.FR.weekday, a.RRule.SA.weekday], A = [a.RRule.SA.weekday, a.RRule.SU.weekday], m = [a.RRule.FR.weekday, a.RRule.SA.weekday], N = [a.RRule.SU.weekday, a.RRule.MO.weekday], p = [a.RRule.SU.weekday, a.RRule.MO.weekday, a.RRule.TU.weekday, a.RRule.WE.weekday, a.RRule.TH.weekday, a.RRule.FR.weekday, a.RRule.SA.weekday], O = new Set([0, 6]); function C(e) { var t; let n = e.toDate(), i = Math.ceil(n.getDate() / 7), r = e.format("dddd"), s = [{ value: d.RecurrenceOptions.NONE, label: c.default.Messages.CREATE_EVENT_RECUR_NONE }, { value: d.RecurrenceOptions.WEEKLY, label: c.default.Messages.CREATE_EVENT_RECUR_WEEKLY.format({ weekday: r }) }, { value: d.RecurrenceOptions.BIWEEKLY, label: c.default.Messages.CREATE_EVENT_RECUR_BIWEEKLY.format({ weekday: r }) }, { value: d.RecurrenceOptions.MONTHLY, label: c.default.Messages.CREATE_EVENT_RECUR_MONTHLY.format({ nth: i, weekday: r }) }, { value: d.RecurrenceOptions.YEARLY, label: c.default.Messages.CREATE_EVENT_RECUR_YEARLY.format({ date: n.toLocaleString(c.default.getLocale(), { month: "short", day: "2-digit" }) }) }]; return O.has(n.getDay()) ? (null === (t = o.default.getCurrentUser()) || void 0 === t ? void 0 : t.isStaff()) && s.push({ value: d.RecurrenceOptions.WEEKEND_ONLY, label: c.default.Messages.CREATE_EVENT_RECUR_WEEKENDS }) : s.push({ value: d.RecurrenceOptions.WEEKDAY_ONLY, label: c.default.Messages.CREATE_EVENT_RECUR_WEEKDAYS }), s } let R = () => { let e = s()().add(1, "hour"), t = e.hour(); return e.minutes() >= 30 && (t += 1), e.hour(t).minutes(0).seconds(0) }, g = (e, t) => e.format(e.get("years") === t.get("years") ? "ddd MMM Do \xb7 LT" : "ddd MMM Do, YYYY \xb7 LT"), L = (e, t) => e.diff(t, "days") > 1 ? g(e, t) : e.calendar(t); function v(e, t, n) { null == n && (n = s()()); let i = s()(e), r = null != t && "" !== t ? s()(t) : void 0, a = null != t && i.isSame(r, "day"); return { startDateTimeString: L(i, n), endDateTimeString: null != r ? a ? r.format("LT") : g(r, n) : void 0, currentOrPastEvent: i <= n, upcomingEvent: i <= s()().add(1, "hour"), withinStartWindow: i <= s()().add(15, "minute"), diffMinutes: i.diff(n, "minutes") } } function D(e) { return new a.Weekday(p[e]) } function M(e, t) { let n; return null != e && (n = { startDate: s()(e), endDate: void 0 }, null != t && (n.endDate = s()(t))), n } function y(e, t) { let n = function(e) { return M(e.scheduled_start_time, e.scheduled_end_time) }(t), i = s()(u.default.extractTimestamp(e)), r = (null == n ? void 0 : n.endDate) != null ? i.clone().add(n.endDate.diff(n.startDate)) : void 0; return { startDate: i, endDate: r } } function P(e, t) { var n; if (null == t) return e; let i = null !== (n = t.scheduled_end_time) && void 0 !== n ? n : e.endDate; return { startDate: null != t.scheduled_start_time ? s()(t.scheduled_start_time) : e.startDate, endDate: null != i ? s()(i) : void 0 } } function U(e) { return M(e.scheduledStartTime, e.scheduledEndTime) } function b(e, t) { return null == e || null == t ? null == e && null == t : e.isSame(t) } function G(e, t) { return null == e || null == t ? null == e && null == t : b(e.startDate, t.startDate) && b(e.endDate, t.endDate) } function w(e) { var t; let n = null != e.byWeekday ? [...e.byWeekday] : null, i = null === (t = e.byNWeekday) || void 0 === t ? void 0 : t.map(e => new a.Weekday(e.day, e.n)), r = new Date(e.start); return r.setMilliseconds(0), new a.RRule({ dtstart: r, until: null != e.end ? new Date(e.end) : null, freq: e.frequency, interval: e.interval, byweekday: null != n ? n : i, bymonth: null != e.byMonth ? [...e.byMonth] : null, bymonthday: null != e.byMonthDay ? [...e.byMonthDay] : null, byyearday: null != e.byYearDay ? [...e.byYearDay] : null, count: e.count }) } function k(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], r = [], s = n; s.setMilliseconds(0); let a = new Date; a.setFullYear(a.getFullYear() + T); for (let n = 0; n < e && s < a; n++) { let e = t.after(s, 0 === n && !i); if (null == e) break; s = e, r.push(e) } return r } function B(e) { var t; if (null == e) return null; let n = null == (t = e).recurrence_rule ? null : new Date(t.scheduled_start_time); return null != n ? u.default.fromTimestamp(Math.floor(n.getTime() / l.default.Millis.SECOND) * l.default.Millis.SECOND) : null } function V(e, t) { if (null == t || null == e) return !1; let n = new Date(e.start), i = new Date(u.default.extractTimestamp(t)); if (n.getUTCHours() !== i.getUTCHours() || n.getUTCMinutes() !== i.getUTCMinutes() || n.getUTCSeconds() !== i.getUTCSeconds()) return !1; switch (e.frequency) { case a.RRule.WEEKLY: return n.getUTCDay() === i.getUTCDay(); case a.RRule.YEARLY: return n.getUTCDate() === i.getUTCDate(); default: return !0 } } function x(e) { let t = D(e.toDate().getDay()), n = D(e.toDate().getUTCDay()); return n.weekday - t.weekday > 0 ? h : n.weekday - t.weekday < 0 ? S : f } function F(e) { let t = D(e.toDate().getDay()), n = D(e.toDate().getUTCDay()); return n.weekday - t.weekday > 0 ? N : n.weekday - t.weekday < 0 ? m : A } function H(e, t) { let n = function(e, t) { let n = x(t), i = F(t), r = D(t.toDate().getUTCDay()), s = Math.ceil(t.toDate().getUTCDate() / 7), o = t.toDate(); switch (o.setMilliseconds(0), e) { case d.RecurrenceOptions.NONE: return null; case d.RecurrenceOptions.WEEKLY: return new a.RRule({ dtstart: o, freq: a.RRule.WEEKLY }); case d.RecurrenceOptions.BIWEEKLY: return new a.RRule({ dtstart: o, freq: a.RRule.WEEKLY, interval: 2 }); case d.RecurrenceOptions.MONTHLY: return new a.RRule({ dtstart: o, freq: a.RRule.MONTHLY, byweekday: [r.nth(s)] }); case d.RecurrenceOptions.YEARLY: return new a.RRule({ dtstart: o, freq: a.RRule.YEARLY }); case d.RecurrenceOptions.WEEKDAY_ONLY: return new a.RRule({ dtstart: o, freq: a.RRule.DAILY, byweekday: n }); case d.RecurrenceOptions.WEEKEND_ONLY: return new a.RRule({ dtstart: o, freq: a.RRule.DAILY, byweekday: i }) } }(e, t); if (null == n) return null; let { dtstart: i, until: r, freq: s, interval: o, byweekday: l, bynweekday: u, bymonth: _, bymonthday: c, byyearday: E, count: I } = n.options, T = null == u ? void 0 : u.map(e => ({ n: e[1], day: e[0] })); return { start: i.toISOString(), end: null == r ? void 0 : r.toISOString(), frequency: s, interval: o, byWeekday: l, byNWeekday: T, byMonth: _, byMonthDay: c, byYearDay: E, count: I } } function Y(e, t) { if (null == t) return d.RecurrenceOptions.NONE; let n = w(t); switch (n.options.freq) { case a.RRule.WEEKLY: if (n.options.interval < 1 || n.options.interval > 2) return d.RecurrenceOptions.NONE; return 1 === n.options.interval ? d.RecurrenceOptions.WEEKLY : d.RecurrenceOptions.BIWEEKLY; case a.RRule.YEARLY: return d.RecurrenceOptions.YEARLY; case a.RRule.MONTHLY: return d.RecurrenceOptions.MONTHLY; case a.RRule.DAILY: if ((0, i.isEqual)(n.options.byweekday, x(e))) return d.RecurrenceOptions.WEEKDAY_ONLY; if ((0, i.isEqual)(n.options.byweekday, F(e))) return d.RecurrenceOptions.WEEKEND_ONLY; return d.RecurrenceOptions.NONE; default: return d.RecurrenceOptions.NONE } } function j(e, t) { return (null == e ? void 0 : e.scheduled_start_time) !== t.scheduledStartTime || e.scheduled_end_time !== t.scheduledEndTime || !(0, i.isEqual)(e.recurrence_rule, t.recurrenceRule) } function W(e, t, n) { return (null == e ? void 0 : e.is_canceled) ? _.GuildScheduledEventStatus.CANCELED : t < n ? _.GuildScheduledEventStatus.COMPLETED : null != e ? _.GuildScheduledEventStatus.SCHEDULED : null } }, 563040: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TimeOptions: function() { return h }, convertToTimeOfADay: function() { return I }, timeAtSpecificDay: function() { return f } }), n("757143"), n("653041"), n("47120"), n("411104"); var i = n("913527"), r = n.n(i), s = n("55935"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = /^[0]+/, l = /:00/, u = /(AM|ΠΜ|सुबह)/i, d = /(PM|ΜΜ|शाम)/i, _ = /\s+/, c = e => e.replace(o, "").replace(l, "").replace(u, "").replace(_, ""), E = e => e.replace(o, "").replace(d, "").replace(_, ""), I = (e, t) => { let n = t.toUpperCase().trim(); if (n.length > 0) { let t = r()("".concat(null == e ? void 0 : e.format("YYYY-MM-DD"), " ").concat(n), "YYYY-MM-DD LT"); if (c(t.format("LT")) === c(n)) return t } }, T = r()("2021-04-12T00:00:00"), f = (e, t) => e.clone().hours(t.hour()).minutes(t.minutes()).seconds(0), S = (e, t) => e.value.unix() - t.value.unix(); class h { lookupByValue(e) { if (null == e) return; let t = f(T, e); return this._index[t.unix()] } _createLabel(e) { return (0, s.dateFormat)(e.locale(r().locale()), this.labelFormat) } _generateTimeOptions() { this.options = [], this._index = {}; let e = r()(T), t = r()(e).add(1, "day"), n = r()(e); for (; n < t;) { let e = this._createNewOption(n.clone()); this.options.push(e), this._index[e.value.unix()] = e.value, n.add(this.intervalInMinutes, "minutes") } } _createNewOption(e) { let t = f(T, e); return { label: this._createLabel(t), value: t } } _addNewOption(e) { let t = f(T, e), n = this._createLabel(t); return this._index[t.unix()] = t, this.options.push({ label: n, value: t }), this.options.sort(S), e } _guessOptions(e) { let t = []; if (/[:\\.]/.test(e)) { let n = I(T, e); if (null != n) { t.push(n.clone()); let i = n.add({ hours: 12 }); i.isBefore(T.clone().add({ hours: 24 })) && E(i.format("LT")) === E(e) && t.push(i) } } return t } getOptions(e) { let t = this._guessOptions(e); if (!(t.length > 0)) return this.options; { let e = [...this.options]; return t.forEach(t => { null == this.lookupByValue(t) && e.push(this._createNewOption(t)) }), e.sort(S), e } } selectValue(e) { let t = this.lookupByValue(e); return null == t ? this._addNewOption(e) : t } constructor({ intervalInMinutes: e = 15, labelFormat: t = "LT" } = {}) { if (a(this, "intervalInMinutes", void 0), a(this, "labelFormat", void 0), a(this, "options", []), a(this, "_index", {}), e <= 0) throw Error("intervalInMinutes should be positive number, got ".concat(e)); this.intervalInMinutes = e, this.labelFormat = t, this._generateTimeOptions() } } }, 965638: function(e, t, n) { "use strict"; n.r(t), n.d(t, { InvitesDisabledExperiment: function() { return u }, setInvitesDisabled: function() { return c }, useInvitesDisabledExperiment: function() { return _ }, useInvitesDisabledPermission: function() { return d }, useShouldShowInvitesDisabledNotif: function() { return E } }), n("47120"); var i = n("442837"), r = n("818083"), s = n("487419"), a = n("496675"), o = n("434404"), l = n("981631"); let u = (0, r.createExperiment)({ kind: "guild", id: "2022-07_invites_disabled", label: "Report Raids", defaultConfig: { enableInvitesDisabled: !1 }, treatments: [{ id: 1, label: "Enable Reporting Of Raids", config: { enableInvitesDisabled: !0 } }] }); function d(e) { return (0, i.useStateFromStores)([a.default], () => null != e && a.default.can(l.Permissions.MANAGE_GUILD, e), [e]) } function _(e) { return u.useExperiment({ guildId: e.id, location: "108f83_1" }, { autoTrackExposure: !1 }) } async function c(e, t) { if (e.hasFeature(l.GuildFeatures.INVITES_DISABLED) === t) return; let n = new Set(e.features); t ? n.add(l.GuildFeatures.INVITES_DISABLED) : n.delete(l.GuildFeatures.INVITES_DISABLED), await o.default.saveGuild(e.id, { features: n }, { throwErr: !0 }) } function E(e) { var t; let n = d(e), r = (0, i.useStateFromStores)([s.default], () => null != e ? s.default.getGuildIncident(e.id) : null), a = (null == e ? void 0 : null === (t = e.hasFeature) || void 0 === t ? void 0 : t.call(e, l.GuildFeatures.INVITES_DISABLED)) || (null == r ? void 0 : r.invitesDisabledUntil) != null && new Date(r.invitesDisabledUntil) > new Date; return n && a } }, 480608: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchMemberCounts: function() { return _ }, requestMembersForRole: function() { return E } }); var i = n("31775"), r = n.n(i), s = n("544891"), a = n("570140"), o = n("749210"), l = n("243730"), u = n("981631"); async function d(e) { try { a.default.dispatch({ type: "GUILD_ROLE_MEMBER_COUNT_FETCH_START", guildId: e }); let t = (await s.HTTP.get({ url: u.Endpoints.GUILD_ROLE_MEMBER_COUNTS(e) })).body; a.default.dispatch({ type: "GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS", guildId: e, roleMemberCount: t }) } catch (t) { a.default.dispatch({ type: "GUILD_ROLE_MEMBER_COUNT_FETCH_FAILURE", guildId: e }) } } async function _(e) { l.default.shouldFetch(e) && await d(e) } let c = new(r())({ maxAge: 1e4 }); function E(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = "".concat(e, "-").concat(t); if (!n || null == c.get(i)) { var r, a; return c.set(i, !0), r = e, a = t, s.HTTP.get({ url: u.Endpoints.GUILD_ROLE_MEMBER_IDS(r, a) }).then(e => (o.default.requestMembersById(r, e.body, !1), e.body.length)) } return Promise.resolve(null) } }, 243730: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = {}, d = {}; class _ extends(a = o.default.Store) { getRoleMemberCount(e) { return null != e ? u[e] : null } shouldFetch(e) { if (null == e) return !1; let t = d[e]; return null == t || Date.now() - t > 12e4 } } s = "GuildRoleMemberCountStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { GUILD_ROLE_MEMBER_COUNT_FETCH_SUCCESS: function(e) { let { guildId: t, roleMemberCount: n } = e; u[t] = n, d[t] = Date.now() }, GUILD_ROLE_MEMBER_COUNT_UPDATE: function(e) { let { guildId: t, roleId: n, count: i } = e, r = u[t]; if (null == r) return !1; r[n] = i }, GUILD_ROLE_MEMBER_BULK_ADD: function(e) { let { guildId: t, roleId: n, added: i } = e, r = u[t]; if (null == r || null == r[n]) return !1; let s = Object.keys(i).length; r[n] += s }, GUILD_ROLE_MEMBER_ADD: function(e) { let { guildId: t, roleId: n } = e, i = u[t]; if (null == i || null == i[n]) return !1; i[n] = i[n] + 1 }, GUILD_ROLE_MEMBER_REMOVE: function(e) { let { guildId: t, roleId: n } = e, i = u[t]; if (null == i || null == i[n]) return !1; i[n] = Math.max(i[n] - 1, 0) }, GUILD_ROLE_CREATE: function(e) { let { guildId: t, role: n } = e; null == u[t] && (u[t] = {}), u[t][n.id] = 0 }, GUILD_DELETE: function(e) { let { guild: t } = e; delete u[t.id], delete d[t.id] } }) }, 434404: function(e, t, n) { "use strict"; n.r(t); var i = n("990547"), r = n("544891"), s = n("570140"), a = n("37234"), o = n("710845"), l = n("655006"), u = n("408987"), d = n("962086"), _ = n("160404"), c = n("41776"), E = n("314897"), I = n("271383"), T = n("430824"), f = n("546796"), S = n("573261"), h = n("999382"), A = n("981631"), m = n("308083"), N = n("689938"); let p = new o.default("GuildSettingsActionCreators"), O = { init(e, t, n, i) { s.default.dispatch({ type: "GUILD_SETTINGS_INIT", guildId: e, section: t, subsection: i, location: n }) }, async open(e, t, i, r) { var s; await Promise.all([n.e("49237"), n.e("99387"), n.e("96427"), n.e("70716"), n.e("23755"), n.e("80301"), n.e("29549"), n.e("31605"), n.e("56630"), n.e("33053"), n.e("49146"), n.e("4970"), n.e("75475"), n.e("85093"), n.e("3084"), n.e("75837"), n.e("90508"), n.e("85552"), n.e("58227"), n.e("43502"), n.e("69563"), n.e("43643"), n.e("92714"), n.e("92557"), n.e("36789"), n.e("36439"), n.e("66696"), n.e("85107")]).then(n.bind(n, "994763")), (null === (s = T.default.getGuild(e)) || void 0 === s ? void 0 : s.hasFeature(A.GuildFeatures.COMMUNITY)) && (t === A.GuildSettingsSections.GUILD_AUTOMOD && (t = A.GuildSettingsSections.SAFETY, r = A.GuildSettingsSubsections.SAFETY_AUTOMOD), t === A.GuildSettingsSections.MEMBER_VERIFICATION && (t = A.GuildSettingsSections.SAFETY, r = A.GuildSettingsSubsections.SAFETY_DM_AND_SPAM_PROTECTION)), O.init(e, t, i, r), (0, a.pushLayer)(A.Layers.GUILD_SETTINGS) }, close() { s.default.dispatch({ type: "GUILD_SETTINGS_CLOSE" }) }, saveRouteStack(e) { s.default.dispatch({ type: "GUILD_SETTINGS_SAVE_ROUTE_STACK", state: e }) }, setSection(e, t) { var n; let i = h.default.getGuildId(); null != i && ((null === (n = T.default.getGuild(i)) || void 0 === n ? void 0 : n.hasFeature(A.GuildFeatures.COMMUNITY)) && (e === A.GuildSettingsSections.GUILD_AUTOMOD && (e = A.GuildSettingsSections.SAFETY, t = A.GuildSettingsSubsections.SAFETY_AUTOMOD), e === A.GuildSettingsSections.MEMBER_VERIFICATION && (e = A.GuildSettingsSections.SAFETY, t = A.GuildSettingsSubsections.SAFETY_DM_AND_SPAM_PROTECTION)), s.default.dispatch({ type: "GUILD_SETTINGS_SET_SECTION", section: e, subsection: t })) }, setSearchQuery(e) { s.default.dispatch({ type: "GUILD_SETTINGS_SET_SEARCH_QUERY", searchQuery: e }) }, selectRole: (e, t) => s.default.dispatch({ type: "GUILD_SETTINGS_ROLE_SELECT", roleId: e, searchQuery: t }), updateEmbed(e, t, n) { r.HTTP.patch({ url: A.Endpoints.GUILD_WIDGET(e), body: { enabled: t, channel_id: n }, oldFormErrors: !0 }).then(t => { s.default.dispatch({ type: "GUILD_SETTINGS_SET_WIDGET", guildId: e, enabled: t.body.enabled, channelId: t.body.channel_id }) }) }, updateMFALevel(e) { let { guildId: t, level: n, isEnabled: i } = e; return (0, f.default)(e => r.HTTP.post({ url: A.Endpoints.GUILD_MFA(t), body: { level: n, ...e }, oldFormErrors: !0 }), { modalProps: { title: N.default.Messages.GUILD_SECURITY_REQ_MFA_LABEL, actionText: i ? N.default.Messages.GUILD_SECURITY_REQ_MFA_TURN_OFF : N.default.Messages.GUILD_SECURITY_REQ_MFA_TURN_ON }, checkEnabled: !1 }).then(e => s.default.dispatch({ type: "GUILD_SETTINGS_SET_MFA_SUCCESS", level: e.body.level })) }, updateIcon(e, t) { r.HTTP.patch({ url: A.Endpoints.GUILD(e), body: { icon: t }, oldFormErrors: !0 }).then(() => { s.default.dispatch({ type: "GUILD_SETTINGS_UPDATE", icon: t }), u.default.checkGuildTemplateDirty(e) }, e => s.default.dispatch({ type: "GUILD_SETTINGS_SUBMIT_FAILURE", errors: e.body })) }, cancelChanges(e) { s.default.dispatch({ type: "GUILD_SETTINGS_CANCEL_CHANGES", guildId: e }) }, updateGuild(e) { var t, n; let { safetyAlertsChannelId: i, clan: r, ...a } = e, o = { ...a }; null != r && (o.clan = { ...null !== (t = o.clan) && void 0 !== t ? t : {}, ...r }); let u = h.default.getGuildId(); null != u && (null === (n = l.RaidAlertExperiment.getCurrentConfig({ guildId: u, location: "be0372_1" })) || void 0 === n ? void 0 : n.enableRaidAlerts) && null != i && (o.safetyAlertsChannelId = i), s.default.dispatch({ type: "GUILD_SETTINGS_UPDATE", ...o }) }, saveGuild(e, t) { let { name: n, description: i, icon: a, splash: o, banner: l, homeHeader: d, afkChannelId: _, afkTimeout: c, systemChannelId: E, verificationLevel: I, defaultMessageNotifications: T, explicitContentFilter: f, features: S, systemChannelFlags: h, preferredLocale: N, rulesChannelId: O, safetyAlertsChannelId: C, discoverySplash: R, publicUpdatesChannelId: g, premiumProgressBarEnabled: L, clan: v } = t, D = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, M = { name: n, description: i, icon: a, splash: o, banner: l, home_header: d, features: S, preferred_locale: N, afk_channel_id: _, afk_timeout: c, system_channel_id: E, verification_level: I, default_message_notifications: T, explicit_content_filter: f, system_channel_flags: h, rules_channel_id: O, discovery_splash: R, public_updates_channel_id: g, safety_alerts_channel_id: C, ...null != L ? { premium_progress_bar_enabled: L } : null, clan: null != v ? (0, m.toServerClanData)(v) : v }; return s.default.dispatch({ type: "GUILD_SETTINGS_SUBMIT" }), r.HTTP.patch({ url: A.Endpoints.GUILD(e), query: { for_discovery: D.isForDiscovery }, body: M, oldFormErrors: !0 }).then(t => { s.default.dispatch({ type: "GUILD_SETTINGS_SUBMIT_SUCCESS", guild: t.body }), u.default.checkGuildTemplateDirty(e) }, e => { if (s.default.dispatch({ type: "GUILD_SETTINGS_SUBMIT_FAILURE", errors: e.body }), p.error("Failed to save guild settings", { errors: e.body }), D.throwErr) throw e.body }) }, updateGuildModeration: (e, t) => r.HTTP.patch({ url: A.Endpoints.GUILD(e), body: { verification_level: t.verificationLevel, explicit_content_filter: t.explicitContentFilter }, oldFormErrors: !0 }).then(t => (u.default.checkGuildTemplateDirty(e), t)), transferOwnership(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; return (0, f.default)(s => S.default.patch({ url: A.Endpoints.GUILD(e), body: { owner_id: t, code: r, ...s }, oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.GUILD_TRANSFER_OWNERSHIP, properties: { guild_id: e, verification_type: n } } }), { modalProps: { title: N.default.Messages.TRANSFER_OWNERSHIP, actionText: N.default.Messages.TRANSFER_OWNERSHIP }, checkEnabled: !1 }) }, sendTransferOwnershipPincode(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return S.default.put({ url: A.Endpoints.GUILD_PINCODE(e), oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.GUILD_TRANSFER_OWNERSHIP_SEND_CODE, properties: { guild_id: e, is_resend: t } } }) }, deleteGuild: (e, t) => (0, f.default)(t => r.HTTP.post({ url: A.Endpoints.GUILD_DELETE(e), body: t, oldFormErrors: !0 }), { modalProps: { title: N.default.Messages.DELETE_SERVER_TITLE.format({ name: t }), actionText: N.default.Messages.DELETE_SERVER, disallowBackupCodes: !0 }, checkEnabled: !1 }).then(() => { O.close() }), async leaveGuild(e) { await r.HTTP.del({ url: A.Endpoints.GUILD_LEAVE(e), body: { lurking: c.default.isLurking(e) || I.default.isCurrentUserGuest(e) }, oldFormErrors: !0 }), O.close() }, async updateMemberRoles(e, t, n, i, a) { if (_.default.isFullServerPreview(e) && t === E.default.getId()) { (0, d.updateImpersonatedRoles)(e, n); return } await r.HTTP.patch({ url: A.Endpoints.GUILD_MEMBER(e, t), body: { roles: n }, oldFormErrors: !0 }), i.forEach(n => s.default.dispatch({ type: "GUILD_ROLE_MEMBER_ADD", guildId: e, roleId: n, userId: t })), a.forEach(n => s.default.dispatch({ type: "GUILD_ROLE_MEMBER_REMOVE", guildId: e, roleId: n, userId: t })) }, bulkAddMemberRoles: (e, t, n) => r.HTTP.patch({ url: A.Endpoints.GUILD_ROLE_MEMBERS(e, t), body: { member_ids: n } }).then(n => { s.default.dispatch({ type: "GUILD_ROLE_MEMBER_BULK_ADD", guildId: e, roleId: t, added: n.body }) }), updateRolesEditSection(e) { s.default.dispatch({ type: "GUILD_SETTINGS_ROLES_EDIT_SECTION_UPDATE", section: e }) }, enableIntegration: (e, t, n) => r.HTTP.post({ url: A.Endpoints.GUILD_INTEGRATIONS(e), body: { type: t, id: n }, oldFormErrors: !0 }), disableIntegration: (e, t) => r.HTTP.del({ url: A.Endpoints.GUILD_INTEGRATION(e, t), oldFormErrors: !0 }), updateIntegration: (e, t, n, i, s) => r.HTTP.patch({ url: A.Endpoints.GUILD_INTEGRATION(e, t), body: { expire_behavior: n, expire_grace_period: i, enable_emoticons: s }, oldFormErrors: !0 }), syncIntegration(e, t) { r.HTTP.post({ url: A.Endpoints.GUILD_INTEGRATION_SYNC(e, t), oldFormErrors: !0 }) } }; t.default = O }, 372454: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildSettingsBansNewExperiment: function() { return i } }); let i = (0, n("987170").default)({ kind: "guild", id: "2023-08_improved_bans_page", label: "Guild Settings Improved Bans Page", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Guild Settings Improved Bans Page", config: { enabled: !0 } }] }) }, 330010: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchGuildIntegrationsApplications: function() { return l } }); var i = n("544891"), r = n("570140"), s = n("973616"), a = n("598077"), o = n("981631"); function l(e) { i.HTTP.get({ url: o.Endpoints.GUILD_INTEGRATIONS(e), query: { include_applications: !0, include_role_connections_metadata: !0 }, oldFormErrors: !0 }).then(t => { let n = t.body.map(e => (null != e.user && (e.user = new a.default(e.user)), null != e.application && (e.application = s.default.createFromServer(e.application)), e)); r.default.dispatch({ type: "GUILD_SETTINGS_LOADED_INTEGRATIONS", guildId: e, integrations: n }) }).catch(() => {}) } }, 999382: function(e, t, n) { "use strict"; let i, r, s, a, o, l, u, d; n.r(t), n("47120"), n("724458"); var _, c, E, I, T = n("392711"), f = n.n(T), S = n("913527"), h = n.n(S), A = n("442837"), m = n("544891"), N = n("433517"), p = n("570140"), O = n("749210"), C = n("131704"), R = n("601964"), g = n("758449"), L = n("598077"), v = n("430824"), D = n("594174"), M = n("709054"), y = n("372454"), P = n("330010"), U = n("981631"), b = n("731455"), G = n("135899"); let w = ["name", "description", "icon", "splash", "banner", "homeHeader", "afkChannelId", "afkTimeout", "systemChannelId", "verificationLevel", "defaultMessageNotifications", "explicitContentFilter", "features", "systemChannelFlags", "preferredLocale", "rulesChannelId", "safetyAlertsChannelId", "discoverySplash", "publicUpdatesChannelId", "premiumProgressBarEnabled", "clan"], k = new Set(["icon", "splash", "banner", "discoverySplash", "homeHeader"]), B = !1, V = U.FormStates.CLOSED, x = {}, F = !1, H = null, Y = null, j = 0, W = U.MFALevels.NONE, K = null, z = { primaryCategoryId: b.DEFAULT_DISCOVERY_CATEGORY_ID, secondaryCategoryIds: [], keywords: [], emojiDiscoverabilityEnabled: b.DEFAULT_EMOJI_DISCOVERABILITY_SETTING, partnerActionedTimestamp: null, partnerApplicationTimestamp: null, isPublished: !1, reasonsToJoin: [], socialLinks: [], about: "" }, Z = !1, X = z, Q = z, q = null, J = 0, $ = null, ee = null, et = null; function en(e) { if (null == o || null == a || a.id !== e) return !1; let t = v.default.getGuild(e); return null != t && (a === o ? o = a = t : a = t, !0) } function ei(e) { var t; let { guildId: n, section: r, subsection: s, location: u } = e, _ = v.default.getGuild(n); if (null == _) return er(); a = o = _, V = U.FormStates.OPEN, x = {}, l = M.default.castGuildIdAsEveryoneGuildRoleId(n), W = o.mfaLevel, Q = X, d = null, K = u, es({ section: null !== (t = null != r ? r : i) && void 0 !== t ? t : U.GuildSettingsSections.OVERVIEW, subsection: null != s ? s : null }) } function er() { B = !1, V = U.FormStates.CLOSED, a = o = null, F = !1, H = null, Y = null, j = 0, q = null, ee = null, et = null, i = null, r = null, s = null, W = U.MFALevels.NONE, u = void 0 } function es(e) { if (null == o) return !1; let t = i; if (i = e.section, r = e.subsection, i === U.GuildSettingsSections.BANS) { let { enabled: e } = y.GuildSettingsBansNewExperiment.getCurrentConfig({ guildId: o.id, location: "7f0c91_1" }); !e && O.default.fetchGuildBans(o.id) } else if (i === U.GuildSettingsSections.INSTANT_INVITES) m.HTTP.get({ url: U.Endpoints.GUILD_INSTANT_INVITES(o.id), oldFormErrors: !0 }).then(e => { p.default.dispatch({ type: "GUILD_SETTINGS_LOADED_INVITES", invites: e.body }) }); else if (i === U.GuildSettingsSections.WIDGET) m.HTTP.get({ url: U.Endpoints.GUILD_WIDGET(o.id), oldFormErrors: !0 }).then(e => { p.default.dispatch({ type: "GUILD_SETTINGS_SET_WIDGET", enabled: e.body.enabled, channelId: e.body.channel_id }) }); else if (i === U.GuildSettingsSections.INTEGRATIONS || i === U.GuildSettingsSections.ROLES) { if (l = null, t !== e.section) return eo(e) } else i === U.GuildSettingsSections.MEMBERS ? l = o.getEveryoneRoleId() : i === U.GuildSettingsSections.VANITY_URL ? m.HTTP.get({ url: U.Endpoints.GUILD_VANITY_URL(o.id), oldFormErrors: !0 }).then(e => { let { body: { code: t, uses: n, error: i } } = e; p.default.dispatch({ type: "GUILD_SETTINGS_SET_VANITY_URL", code: t, uses: n, error: i }) }) : i === U.GuildSettingsSections.SAFETY && p.default.dispatch({ type: "GUILD_SETTINGS_SAFETY_SET_SUBSECTION", subsection: null == r ? U.GuildSettingsSubsections.SAFETY_OVERVIEW : r }) } function ea(e) { var t; return new g.default({ code: e.code, temporary: e.temporary, revoked: e.revoked, inviter: null != e.inviter ? new L.default(e.inviter) : null, channel: (0, C.createChannelRecordFromInvite)(e.channel), guild: null != e.guild ? new R.default(e.guild) : null, uses: e.uses, maxUses: e.max_uses, maxAge: e.max_age, createdAt: h()(null !== (t = e.created_at) && void 0 !== t ? t : void 0) }) } function eo(e) { if (null == o || V !== U.FormStates.OPEN || "GUILD_INTEGRATIONS_UPDATE" === e.type && e.guildId !== o.id) return !1; (0, P.fetchGuildIntegrationsApplications)(o.id) } class el extends(_ = A.default.Store) { initialize() { this.waitFor(v.default, D.default) } getMetadata() { return Q } hasChanges() { return !f().isEqual(o, a) || !f().isEqual(Q, X) } isOpen() { return B } getSavedRouteState() { return u } getSection() { return i } showNotice() { return this.hasChanges() } getGuildId() { return null != o ? o.id : null } showPublicSuccessModal() { return !N.Storage.get(G.PUBLIC_SUCCESS_MODAL_SEEN_KEY) } getGuild() { return o } isSubmitting() { return V === U.FormStates.SUBMITTING } isGuildMetadataLoaded() { return Z } getErrors() { return x } getSelectedRoleId() { return l } getSlug() { return d } getBans() { return [q, J] } getProps() { return { submitting: this.isSubmitting(), integrations: et, section: i, subsection: r, errors: x, guild: o, bans: q, bansVersion: J, invites: ee, selectedRoleId: l, embedEnabled: F, embedChannelId: H, mfaLevel: W, searchQuery: s, vanityURLCode: Y, vanityURLUses: j, originalGuild: a, hasChanges: this.hasChanges(), guildMetadata: Q, analyticsLocation: K, isGuildMetadataLoaded: Z } } } I = "GuildSettingsStore", (E = "displayName") in(c = el) ? Object.defineProperty(c, E, { value: I, enumerable: !0, configurable: !0, writable: !0 }) : c[E] = I, t.default = new el(p.default, __OVERLAY__ ? {} : { GUILD_SETTINGS_INIT: ei, GUILD_SETTINGS_OPEN: function(e) { B = !0, ei(e) }, GUILD_SETTINGS_CLOSE: er, GUILD_SETTINGS_UPDATE: function(e) { if (null == o) return !1; w.forEach(t => { null != o && e.hasOwnProperty(t) && (o = o.set(t, e[t])) }), ! function() { if (null == o) return; let e = o.toJS(), t = a.toJS(); !w.some(n => e[n] !== t[n]) && (o = a) }() }, GUILD_SETTINGS_CANCEL_CHANGES: function(e) { let { guildId: t } = e; x = {}; let n = v.default.getGuild(t); null != n && (a = o = n) }, GUILD_SETTINGS_SAVE_ROUTE_STACK: function(e) { let { state: t } = e; return u = t, !1 }, GUILD_SETTINGS_SUBMIT: function() { V = U.FormStates.SUBMITTING, x = {} }, GUILD_SETTINGS_SUBMIT_SUCCESS: function() { V = U.FormStates.OPEN }, GUILD_SETTINGS_SUBMIT_FAILURE: function(e) { var t; V = U.FormStates.OPEN, i = null != i ? i : U.GuildSettingsSections.OVERVIEW, r = null, x = null !== (t = e.errors) && void 0 !== t ? t : {} }, GUILD_SETTINGS_SET_SECTION: es, GUILD_SETTINGS_SET_SEARCH_QUERY: function(e) { s = e.searchQuery }, GUILD_SETTINGS_LOADED_BANS: function(e) { q = e.bans.reduce((e, t) => (null != t.user && null != t.user.id && e.set(t.user.id, t), e), new Map), J++ }, GUILD_SETTINGS_LOADED_BANS_BATCH: function(e) { let { bans: t, guildId: n } = e; ($ !== n || null == q) && ($ = n, q = new Map), q = t.reduce((e, t) => (null != t.user && null != t.user.id && e.set(t.user.id, t), e), q), J++ }, GUILD_SETTINGS_LOADED_INVITES: function(e) { ee = e.invites.reduce((e, t) => (e[t.code] = ea(t), e), {}) }, GUILD_SETTINGS_SET_WIDGET: function(e) { F = e.enabled, H = e.channelId }, GUILD_SETTINGS_SET_VANITY_URL: function(e) { var t; Y = null !== (t = e.code) && void 0 !== t ? t : null, j = e.uses }, GUILD_SETTINGS_SET_MFA_SUCCESS: function(e) { let { level: t } = e; W = t }, GUILD_SETTINGS_ROLE_SELECT: function(e) { let { roleId: t } = e; l = null != t ? t : null }, GUILD_SETTINGS_LOADED_INTEGRATIONS: function(e) { et = e.integrations }, GUILD_BAN_ADD: function(e) { let { user: t, guildId: n } = e; if (null == q || null == o || o.id !== n) return !1; q.set(t.id, { user: t, reason: null }), J++ }, GUILD_BAN_REMOVE: function(e) { let { user: t, guildId: n } = e; if (null == q || null == o || o.id !== n) return !1; q.delete(t.id), J++ }, GUILD_ROLE_CREATE: function(e) { let { guildId: t } = e; if (!en(t)) return !1 }, GUILD_ROLE_UPDATE: function(e) { let { guildId: t } = e; if (!en(t)) return !1 }, GUILD_ROLE_DELETE: function(e) { let { guildId: t, roleId: n } = e; if (!en(t)) return !1; l === n && (l = null) }, GUILD_UPDATE: function(e) { if (null == o || o.id !== e.guild.id) return !1; { let e = v.default.getGuild(o.id); if (null == e) return !1; let t = a = e, n = o.toJS(); w.forEach(e => { if (!k.has(e)) { if ("rulesChannelId" !== e && "publicUpdatesChannelId" !== e || n[e] !== G.CREATE_NEW_CHANNEL_VALUE) { if ("features" === e) { t.set(e, new Set(n[e])); return } t = t.set(e, n[e]) } } }), o = t } }, GUILD_DELETE: function(e) { if (null == o || o.id !== e.guild.id) return !1; er() }, USER_CONNECTIONS_UPDATE: eo, GUILD_INTEGRATIONS_UPDATE: eo, INSTANT_INVITE_REVOKE_SUCCESS: function(e) { ee = { ...ee }, delete ee[e.code] }, INSTANT_INVITE_CREATE_SUCCESS: function(e) { ee = { ...ee, [e.invite.code]: ea(e.invite) } }, GUILD_UPDATE_DISCOVERY_METADATA_FROM_SERVER: function(e) { var t, n, i, r, s, a, l, u, d, _; let { guildId: c, metadata: E } = e; null != o && c === o.id && (!1 === Z && (Z = !0), Q = X = { primaryCategoryId: null !== (t = E.primaryCategoryId) && void 0 !== t ? t : b.DEFAULT_DISCOVERY_CATEGORY_ID, secondaryCategoryIds: null !== (n = E.secondaryCategoryIds) && void 0 !== n ? n : [], keywords: null !== (i = E.keywords) && void 0 !== i ? i : [], emojiDiscoverabilityEnabled: null !== (r = E.emojiDiscoverabilityEnabled) && void 0 !== r ? r : b.DEFAULT_EMOJI_DISCOVERABILITY_SETTING, partnerActionedTimestamp: null !== (s = E.partnerActionedTimestamp) && void 0 !== s ? s : null, partnerApplicationTimestamp: null !== (a = E.partnerApplicationTimestamp) && void 0 !== a ? a : null, isPublished: null !== (l = E.isPublished) && void 0 !== l && l, reasonsToJoin: null !== (u = E.reasonsToJoin) && void 0 !== u ? u : [], socialLinks: null !== (d = E.socialLinks) && void 0 !== d ? d : [], about: null !== (_ = E.about) && void 0 !== _ ? _ : "" }, x = {}) }, GUILD_DISCOVERY_METADATA_FETCH_FAIL: function() { X = Q = z }, GUILD_DISCOVERY_CATEGORY_ADD: function(e) { let { guildId: t, categoryId: n } = e; null != o && t === o.id && (Q = { ...Q, secondaryCategoryIds: [...Q.secondaryCategoryIds, n] }, X = { ...X, secondaryCategoryIds: [...X.secondaryCategoryIds, n] }) }, GUILD_DISCOVERY_CATEGORY_DELETE: function(e) { let t, { guildId: n, categoryId: i } = e; if (null == o || n !== o.id) return; let r = Q.secondaryCategoryIds.indexOf(i); - 1 !== r && ((t = [...Q.secondaryCategoryIds]).splice(r, 1), Q = { ...Q, secondaryCategoryIds: t }), -1 !== (r = X.secondaryCategoryIds.indexOf(i)) && ((t = [...X.secondaryCategoryIds]).splice(r, 1), X = { ...X, secondaryCategoryIds: t }) }, GUILD_DISCOVERY_CATEGORY_UPDATE_FAIL: function(e) { let { guildId: t, errors: n } = e; null != o && t === o.id && (x = null != n ? n : {}) }, GUILD_UPDATE_DISCOVERY_METADATA: function(e) { let { guildId: t, primaryCategoryId: n, keywords: i, emojiDiscoverabilityEnabled: r, isPublished: s, reasonsToJoin: a, socialLinks: l, about: u } = e; null != o && t === o.id && (Q = { ...Q, primaryCategoryId: null != n ? n : Q.primaryCategoryId, keywords: null != i ? i : Q.keywords, emojiDiscoverabilityEnabled: null != r ? r : Q.emojiDiscoverabilityEnabled, isPublished: null != s ? s : Q.isPublished, reasonsToJoin: null != a ? a : Q.reasonsToJoin, socialLinks: null != l ? l : Q.socialLinks, about: null != u ? u : Q.about }) }, GUILD_UPDATE_DISCOVERY_METADATA_FAIL: function(e) { let { guildId: t, errors: n } = e; null != o && t === o.id && (x = null != n ? n : {}) }, GUILD_DISCOVERY_SLUG_FETCH_SUCCESS: function(e) { let { slug: t } = e; d = t }, GUILD_DISCOVERY_SLUG_FETCH_FAIL: function(e) { let {} = e; d = null } }) }, 399860: function(e, t, n) { "use strict"; n.r(t), n.d(t, { commandName: function() { return r }, keyPermissions: function() { return a }, toPermissionKey: function() { return s } }), n("47120"); var i = n("911969"); function r(e, t) { return e === i.ApplicationCommandType.CHAT ? "/" + t : t } function s(e, t) { return "".concat(e, ":").concat(t) } function a(e) { return Object.fromEntries(e.map(e => [s(e.id, e.type), e])) } n("895924") }, 543842: function(e, t, n) { "use strict"; function i(e, t) { var n; let i = null == t ? void 0 : null === (n = t.replace(/-/g, "_")) || void 0 === n ? void 0 : n.toUpperCase(); if (null != i && i in e) return e[i] } n.r(t), n.d(t, { default: function() { return i } }), n("757143") }, 968358: function(e, t, n) { "use strict"; function i(e) { if (null == e) return !1; for (var t = 0; t < e.length; t++) if (e[t].voiceState.selfStream) return !0; return !1 } n.r(t), n.d(t, { hasStream: function() { return i } }) }, 981668: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("367907"), s = n("728345"), a = n("812206"), o = n("574176"), l = n("314897"), u = n("592125"), d = n("944486"), _ = n("885110"), c = n("649739"), E = n("981631"); async function I(e) { await s.default.fetchApplications(e, !1) } async function T(e) { if (null == e) return; let t = u.default.getChannel(e), { enableHangStatus: n } = o.HangStatusExperiment.getCurrentConfig({ location: "GameActivityManager" }, { autoTrackExposure: !1 }); if (null == t || !((0, c.isVoiceUserGameActivityEnabled)("running_games_change", !1) || n)) return; let i = _.default.getActivities(); if (0 === i.length) return; let s = [...i].filter(e => e.type === E.ActivityTypes.PLAYING && e.application_id).map(e => e.application_id); await I([...s]); let d = a.default.getApplication(s[0]); null != d && r.default.trackWithMetadata(E.AnalyticEvents.VOICE_CHANNEL_GAME_ACTIVITY_INDICATOR_SET, { channel_id: e, guild_id: t.guild_id, game_name: d.name, user_id: l.default.getId() }) } class f extends i.default { handleRunningGamesChange() { T(d.default.getVoiceChannelId()) } handleVoiceChannelSelect(e) { let { channelId: t } = e; T(t) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { RUNNING_GAMES_CHANGE: this.handleRunningGamesChange, VOICE_CHANNEL_SELECT: this.handleVoiceChannelSelect }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new f }, 649739: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isVoiceUserGameActivityEnabled: function() { return s }, useIsVoiceUserGameActivityEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-01_voice_user_game_activity", label: "Voice User Game Activity", defaultConfig: { showGameIcon: !1 }, treatments: [{ id: 1, label: "Show game icon next to the Voice User in VC", config: { showGameIcon: !0 } }] }); function r(e, t) { let { showGameIcon: n } = i.useExperiment({ location: e }, { autoTrackExposure: t }); return n } function s(e, t) { let { showGameIcon: n } = i.getCurrentConfig({ location: e }, { autoTrackExposure: t }); return n } t.default = i }, 751189: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("626135"), a = n("741847"), o = n("981631"); t.default = { resolveGuildTemplate: function e(t) { return r.default.isDispatching() ? Promise.resolve().then(() => e(t)) : (r.default.dispatch({ type: "GUILD_TEMPLATE_RESOLVE", code: t }), i.HTTP.get({ url: o.Endpoints.UNRESOLVED_GUILD_TEMPLATE(t), oldFormErrors: !0 }).then(e => { let n = e.body; return s.default.track(o.AnalyticEvents.GUILD_TEMPLATE_RESOLVED, { resolved: !0, guild_template_code: t, guild_template_name: n.name, guild_template_description: n.description, guild_template_guild_id: n.source_guild_id }), r.default.dispatch({ type: "GUILD_TEMPLATE_RESOLVE_SUCCESS", guildTemplate: n, code: t }), { guildTemplate: (0, a.default)(n), code: t } }, () => (s.default.track(o.AnalyticEvents.GUILD_TEMPLATE_RESOLVED, { resolved: !1, guild_template_code: t }), r.default.dispatch({ type: "GUILD_TEMPLATE_RESOLVE_FAILURE", code: t }), { guildTemplate: null, code: t }))) }, loadTemplatesForGuild: e => i.HTTP.get({ url: o.Endpoints.GUILD_TEMPLATES(e), oldFormErrors: !0 }).then(e => (r.default.dispatch({ type: "GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS", guildTemplates: e.body }), e)), createGuildTemplate: (e, t, n) => i.HTTP.post({ url: o.Endpoints.GUILD_TEMPLATES(e), body: { name: t, description: n }, oldFormErrors: !0 }).then(e => { r.default.dispatch({ type: "GUILD_TEMPLATE_CREATE_SUCCESS", guildTemplate: e.body, code: e.body.code }) }), syncGuildTemplate: (e, t) => i.HTTP.put({ url: o.Endpoints.GUILD_TEMPLATE(e, t), oldFormErrors: !0 }).then(e => { r.default.dispatch({ type: "GUILD_TEMPLATE_SYNC_SUCCESS", guildTemplate: e.body, code: t }) }), updateGuildTemplate: (e, t, n, s) => i.HTTP.patch({ url: o.Endpoints.GUILD_TEMPLATE(e, t), body: { name: n, description: s }, oldFormErrors: !0 }).then(e => { r.default.dispatch({ type: "GUILD_TEMPLATE_SYNC_SUCCESS", guildTemplate: e.body, code: t }) }), deleteGuildTemplate: (e, t) => i.HTTP.del({ url: o.Endpoints.GUILD_TEMPLATE(e, t), oldFormErrors: !0 }).then(() => { r.default.dispatch({ type: "GUILD_TEMPLATE_DELETE_SUCCESS", guildId: e, code: t }) }) } }, 409059: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("741847"), d = n("58346"); let _ = {}, c = null; function E(e, t) { var n; let i = null !== (n = _[e]) && void 0 !== n ? n : { code: e, state: d.GuildTemplateStates.RESOLVING }; t(i = { ...i }), _ = { ..._, [e]: i } } function I(e) { T(e.guildTemplate) } function T(e) { return E(e.code, t => { let n = (0, u.default)(e); for (let e in n) t[e] = n[e] }) } function f(e) { return E(e.code, e => { e.state = d.GuildTemplateStates.EXPIRED }) } class S extends(a = o.default.Store) { getGuildTemplate(e) { return null != e ? _[e] : null } getGuildTemplates() { return _ } getForGuild(e) { for (let t in _) { let n = _[t]; if ("sourceGuildId" in n && n.sourceGuildId === e && n.state !== d.GuildTemplateStates.EXPIRED) return n } } getDisplayedGuildTemplateCode() { return c } } s = "GuildTemplateStore", (r = "displayName") in(i = S) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new S(l.default, { GUILD_TEMPLATE_RESOLVE: function(e) { let { code: t } = e; _ = { ..._, [t]: { code: t, state: d.GuildTemplateStates.RESOLVING } } }, GUILD_TEMPLATE_CREATE_SUCCESS: I, GUILD_TEMPLATE_SYNC_SUCCESS: I, GUILD_TEMPLATE_RESOLVE_SUCCESS: I, GUILD_TEMPLATE_LOAD_FOR_GUILD_SUCCESS: function(e) { let { guildTemplates: t } = e; t.forEach(e => T(e)) }, GUILD_TEMPLATE_RESOLVE_FAILURE: f, GUILD_TEMPLATE_DELETE_SUCCESS: f, GUILD_TEMPLATE_ACCEPT: function(e) { return E(e.code, e => { e.state = d.GuildTemplateStates.ACCEPTING }) }, GUILD_TEMPLATE_ACCEPT_SUCCESS: function(e) { return E(e.code, e => { var t; e.state = d.GuildTemplateStates.ACCEPTED, e.usageCount = (null !== (t = e.usageCount) && void 0 !== t ? t : 0) + 1 }) }, GUILD_TEMPLATE_ACCEPT_FAILURE: function(e) { return E(e.code, e => { e.state = d.GuildTemplateStates.RESOLVED }) }, GUILD_TEMPLATE_MODAL_SHOW: function(e) { c = e.code }, GUILD_TEMPLATE_MODAL_HIDE: function(e) { c = null } }) }, 408987: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"), r = n("496675"), s = n("751189"), a = n("981631"); t.default = { async checkGuildTemplateDirty(e) { if (!r.default.canWithPartialContext(a.Permissions.MANAGE_GUILD, { guildId: e })) return; let t = await s.default.loadTemplatesForGuild(e); t.body.length > 0 && i.default.dispatch({ type: "GUILD_TEMPLATE_DIRTY_TOOLTIP_REFRESH", guildTemplate: t.body[0] }) }, hideGuildTemplateDirtyTooltip(e) { i.default.dispatch({ type: "GUILD_TEMPLATE_DIRTY_TOOLTIP_HIDE", guildId: e }) }, hideGuildTemplatePromotionTooltip() { i.default.dispatch({ type: "GUILD_TEMPLATE_PROMOTION_TOOLTIP_HIDE" }) } } }, 58346: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { GuildTemplateStates: function() { return i }, InternalTemplateCodes: function() { return r } }), (s = i || (i = {})).RESOLVING = "RESOLVING", s.RESOLVED = "RESOLVED", s.EXPIRED = "EXPIRED", s.ACCEPTED = "ACCEPTED", s.ACCEPTING = "ACCEPTING", (a = r || (r = {})).CLASSROOM = "fVfBazbqjhXg", a.LOCAL_COMMUNITIES = "64UDvRNCC52Y", a.CREATORS_HOBBIES = "6exdzMgjZgah", a.GLOBAL_COMMUNITIES = "4sgbPdCjzAYU", a.FRIENDS_FAMILY = "hgM48av5Q69A", a.STUDY_GROUPS = "FbwUwRp4j8Es", a.CREATE_FROM_SCRATCH = "WYAQmEzjw3Pj", a.CAMPUS_CLUBS = "Ctg7PUHcQmZu", a.LEAGUE_CLUBS = "PJ6VvgEJYg45", a.GITHUB_HACKATHON = "UqzZCTj2zfwy" }, 741847: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("58346"); function r(e) { var t; return { code: e.code, state: i.GuildTemplateStates.RESOLVED, name: e.name, description: null !== (t = e.description) && void 0 !== t ? t : "", creatorId: e.creator_id, creator: e.creator, createdAt: e.created_at, updatedAt: e.updated_at, sourceGuildId: e.source_guild_id, serializedSourceGuild: e.serialized_source_guild, usageCount: e.usage_count, isDirty: e.is_dirty } } }, 950143: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("82085"), s = n("703656"), a = n("981631"); function o(e) { var t, n, i; let { guild: o } = e.invite; if (null != o && (null == o ? void 0 : null === (t = o.features) || void 0 === t ? void 0 : t.includes(a.GuildFeatures.HUB))) { r.default.onOpenHubInvite(e.invite); return } null != o && (null == o ? void 0 : null === (n = o.features) || void 0 === n ? void 0 : n.includes(a.GuildFeatures.MEMBER_VERIFICATION_GATE_ENABLED)) && !(null == o ? void 0 : null === (i = o.features) || void 0 === i ? void 0 : i.includes(a.GuildFeatures.PREVIEW_ENABLED)) && (0, s.transitionTo)(a.Routes.GUILD_MEMBER_VERIFICATION(o.id, e.invite.code)) } class l extends i.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { INVITE_ACCEPT_SUCCESS: o }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new l }, 510601: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isGamingVoiceActivityEnabled: function() { return s }, useIsGamingVoiceActivityEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-01_guild_gaming_voice_activity", label: "Guild Gaming Voice Activity", defaultConfig: { shouldSubscribeToGuildMemberUpdates: !1, showGamingVoiceActivity: !1 }, treatments: [{ id: 0, label: "Control", config: { shouldSubscribeToGuildMemberUpdates: !0, showGamingVoiceActivity: !1 } }, { id: 1, label: "Badge the server icon & show gamers in the tooltip if gamers are in VC", config: { shouldSubscribeToGuildMemberUpdates: !0, showGamingVoiceActivity: !0 } }] }); function r(e, t) { let { showGamingVoiceActivity: n } = i.useExperiment({ location: e }, { autoTrackExposure: t }); return n } function s(e, t) { let { showGamingVoiceActivity: n } = i.getCurrentConfig({ location: e }, { autoTrackExposure: t }); return n } t.default = i }, 126134: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { CardCategory: function() { return r } }), (s = i || (i = {}))[s.WHO = 0] = "WHO", s[s.WHAT = 1] = "WHAT", (a = r || (r = {})).HANGOUT = "hangout", a.EMBEDDED_ACTIVITY = "embedded-activity", a.EVENT = "event", a.GAMING = "gaming" }, 727258: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildsNodeType: function() { return i }, GuildsTree: function() { return d }, createFolderNode: function() { return c }, createGuildNode: function() { return _ } }), n("47120"), n("536091"); var i, r, s = n("512722"), a = n.n(s), o = n("392711"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function u() { return Math.floor(4294967296 * Math.random()) }(r = i || (i = {})).ROOT = "root", r.FOLDER = "folder", r.GUILD = "guild"; class d { getSnapshot() { return { root: this.root, nodes: this.nodes } } loadSnapshot(e) { this.root = e.root, this.nodes = e.nodes, this.version++ } moveNextTo(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; this._pluckNode(e); let i = null != t.parentId ? this.nodes[t.parentId] : this.root, r = i.children.indexOf(t); return a()(!("folder" === e.type && "folder" === i.type), "[GUILDS TREE] Tried moving a folder (".concat(e.id, ") inside of another folder (").concat(i.id, ")")), a()(r >= 0, "[GUILDS TREE] target node (".concat(t.id, ") did not exist within its specified parent (").concat(t.parentId, ")")), i.children = [...i.children], i.children.splice(r + (n ? 1 : 0), 0, e), e.parentId = i.id, this.version++, this } moveInto(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; this._pluckNode(e); let i = n ? t.children.length : 0; return t.children = [...t.children], t.children.splice(i, 0, e), e.parentId = t.id, this.version++, this } addNode(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.root, n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; return a()("root" !== e.type, "[GUILDS TREE] Tried adding another root node into the tree"), a()(null != e.id, "[GUILDS TREE] Tried adding a node without an id"), a()(null == this.nodes[e.id], "[GUILDS TREE] Tried adding a node that already exists (".concat(e.id, ")")), this.nodes[e.id] = e, this.version++, this.moveInto(e, t, n) } removeNode(e) { return a()(e !== this.root, "[GUILDS TREE] Tried removing the root node from the tree"), a()(null != e.id, "[GUILDS TREE] Tried removing a node without an id"), this._pluckNode(e), e.parentId = void 0, delete this.nodes[e.id], this.version++, this } replaceNode(e, t) { a()(e !== this.root, "[GUILDS TREE] Tried replacing the root node of the tree"), a()(null != e.id, "[GUILDS TREE] Tried replacing a node without an id"), a()(null != t.id, "[GUILDS TREE] Tried replacing a node with one that does not have an id"), a()("root" !== t.type, "[GUILDS TREE] Tried adding another root node into the tree"); let n = null != e.parentId ? this.nodes[e.parentId] : this.root, i = n.children.indexOf(e); return a()(i >= 0, "[GUILDS TREE] existing node (".concat(e.id, ") did not exist within its specified parent (").concat(e.parentId, ")")), n.children = [...n.children], n.children.splice(i, 1, t), t.parentId = n.id, e.parentId = void 0, delete this.nodes[e.id], this.nodes[t.id] = t, this.version++, this } cloneNode(e) { return (0, o.clone)(e) } convertToFolder(e) { let t = u(); for (; null != this.getNode(t);) t = u(); let n = { type: "folder", id: t, expanded: !1, children: [] }; return this.replaceNode(e, n), this.removeNode(e), this.addNode(e, n, !1), this.version++, n } allNodes() { return Object.values(this.nodes) } getNode(e) { return this.nodes[e] } getRoots() { return this.root.children } get size() { return this.allNodes().length } sortedGuildNodes() { return function e(t) { return "guild" === t.type ? [t] : null == t.children ? [] : t.children.map(t => e(t)).flat() }(this.root) } _pluckNode(e) { let t = null != e.parentId ? this.nodes[e.parentId] : this.root; a()(null != t, "[GUILDS TREE] source node (".concat(e.id, ") had a parent id (").concat(e.parentId, ") which doesn't exist in the tree")); let n = t.children; a()(null != n, "[GUILDS TREE] source node (".concat(e.id, ") had a parent id (").concat(e.parentId, ") which contains no children")), t.children = n.filter(t => t !== e), e.parentId = void 0, this.version++ } constructor() { l(this, "root", void 0), l(this, "nodes", void 0), l(this, "version", void 0), this.root = { type: "root", children: [] }, this.nodes = {}, this.version = 0 } } function _(e, t) { return { type: "guild", id: e, parentId: t, children: [], unavailable: !1 } } function c(e, t) { var n, i, r; return { type: "folder", id: e.folderId, parentId: t, name: null !== (n = e.folderName) && void 0 !== n ? n : void 0, color: null !== (i = e.folderColor) && void 0 !== i ? i : void 0, expanded: null !== (r = e.expanded) && void 0 !== r && r, children: [] } } }, 59688: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useCanShowNewGuildTooltip: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_server_peek", label: "Change the guild tooltip", defaultConfig: { showNewGuildTooltip: !1 }, treatments: [{ id: 1, label: "Show new tooltip", config: { showNewGuildTooltip: !0 } }] }); function r(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], { showNewGuildTooltip: n } = i.useExperiment({ location: e }, { autoTrackExposure: t }); return n } t.default = i }, 912787: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a }, getChannelIdFromCardData: function() { return o } }); var i = n("442837"), r = n("592125"), s = n("126134"); function a(e) { let t = o(e); return (0, i.useStateFromStores)([r.default], () => r.default.getChannel(t)) } function o(e) { let { category: t } = e; return t === s.CardCategory.HANGOUT || t === s.CardCategory.GAMING ? e.channelId : t === s.CardCategory.EVENT ? e.event.channel_id : t === s.CardCategory.EMBEDDED_ACTIVITY ? e.embeddedActivities[0].channelId : null } }, 623552: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("410030"), u = n("718582"), d = n("981631"), _ = n("411511"); let c = [ [{ translateY: 0, translateX: 0, scale: 1.2 }, { translateY: 0, translateX: 0, scale: 0 }, { translateY: 0, translateX: 0, scale: 0 }, { translateY: 0, translateX: 0, scale: 0 }], [{ translateY: -14, translateX: -14, scale: .7058823529411765 }, { translateY: 12, translateX: 12, scale: .8235294117647058 }, { translateY: 0, translateX: 0, scale: 0 }, { translateY: 0, translateX: 0, scale: 0 }], [{ translateY: -4, translateX: 16, scale: .7058823529411765 }, { translateY: 14, translateX: -14, scale: .8235294117647058 }, { translateY: -18, translateX: -12, scale: .5882352941176471 }, { translateY: 0, translateX: 0, scale: 0 }], [{ translateY: -13, translateX: -13, scale: .8235294117647058 }, { translateY: 13, translateX: 13, scale: .8235294117647058 }, { translateY: -18, translateX: 18, scale: .5882352941176471 }, { translateY: 18, translateX: -18, scale: .5882352941176471 }] ]; function E(e) { let { users: t, guildId: n } = e, s = (0, u.useSortUsersByAffinity)(t), o = (0, l.default)(), E = r.useRef(!1); r.useEffect(() => { E.current = !0 }, []); let f = Math.min(c.length - 1, s.length - 1), S = c[Math.max(0, f)], h = s.length > 4, A = s.length - 3, m = A >= 10 ? 1 : 2, N = S.map((e, t) => { let r = s[t]; if (null == r) return null; let o = h && t === m; return (0, i.jsx)("div", { className: a()(_.avatarContainer), style: { opacity: 1, transform: "translateX(".concat(e.translateX, "px) translateY(").concat(e.translateY, "px) scale(").concat(e.scale, ")") }, children: o ? (0, i.jsx)(I, { count: A }) : (0, i.jsx)(T, { guildId: n, user: r }) }, r.id) }); return (0, i.jsx)("div", { className: o === d.ThemeTypes.DARK ? _.gradientContainerDark : _.gradientContainer, children: (0, i.jsx)("div", { className: _.groupContainer, children: N }) }) } function I(e) { let { count: t } = e; return (0, i.jsx)("div", { className: _.avatarWrapper, children: (0, i.jsx)("div", { className: _.overflowCount, children: (0, i.jsxs)(o.Text, { variant: "text-sm/semibold", children: ["+", t] }) }) }) } function T(e) { let { guildId: t, user: n } = e; return null == r.useMemo(() => null == n ? void 0 : n.getAvatarSource(t, !1, 30), [t, n]) ? null : (0, i.jsx)("div", { className: _.avatarWrapper, children: (0, i.jsx)("img", { className: _.avatar, src: null == n ? void 0 : n.getAvatarURL(t, 80), alt: "" }) }) } }, 456774: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return y } }), n("653041"), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("666188"), l = n("549817"), u = n("819553"), d = n("17181"), _ = n("303737"), c = n("965638"), E = n("434404"), I = n("962086"), T = n("160404"), f = n("703656"), S = n("800599"), h = n("940627"), A = n("705600"), m = n("507893"), N = n("626135"), p = n("59688"), O = n("912787"), C = n("272709"), R = n("718582"), g = n("126134"), L = n("981631"), v = n("689938"), D = n("303820"); function M(e) { let { guild: t } = e, n = -1, s = (0, R.useGuildPopoutCards)(t), a = r.useMemo(() => s.map(e => { { let r = null; return e.category === g.CardCategory.EMBEDDED_ACTIVITY ? r = e.embeddedActivities[0].channelId : e.category === g.CardCategory.HANGOUT || e.category === g.CardCategory.GAMING ? r = e.channelId : e.category === g.CardCategory.EVENT && (r = e.event.channel_id), n++, (0, i.jsx)(C.default, { cardData: e, guildId: t.id, cardIndex: n }, "".concat(e.category, "-").concat(r)) } }), [s, t.id, n, !0]); return (r.useEffect(() => { let e = [], n = [], i = [], r = [], a = {}; for (let l of s) { var o; if (3 === e.length) break; let s = null !== (o = (0, O.getChannelIdFromCardData)(l)) && void 0 !== o ? o : "", u = (0, R.getVoiceChannelUsers)(s, t.id), d = e.length; e.push(l.category), i.push(u.length), r.push(u.length > 0 ? u[0].id : "0"), n.push(Math.min(u.length, 6)), a["position_".concat(d + 1, "_affinity_user_ids")] = u.slice(0, 6).map(e => e.id), a["position_".concat(d + 1, "_user_affinity_scores")] = u.slice(0, 6).map(e => { var t, n; return null !== (n = null === (t = S.default.getUserAffinity(e.id)) || void 0 === t ? void 0 : t.affinity) && void 0 !== n ? n : 0 }) } 0 !== e.length && (a.card_types = e, a.affinity_users_counts = n, a.total_users_counts = i, a.max_affinity_user_ids = r, N.default.track(L.AnalyticEvents.GUILD_TOOLTIP_SHOWN, { ...a, guild_id: t.id })) }, []), 0 === s.length) ? null : (p.default.trackExposure({ location: "guild_tooltip" }), (0, i.jsx)("div", { className: D.cards, children: a })) } function y(e) { var t; let { guild: n, closePopout: S, nudge: N } = e, p = r.useRef(null), O = (0, o.default)(n), C = (0, c.useShouldShowInvitesDisabledNotif)(n), { isViewingRoles: R, backNavigationSection: g } = (0, s.useStateFromStoresObject)([T.default], () => ({ isViewingRoles: T.default.isViewingRoles(n.id), backNavigationSection: T.default.getBackNavigationSection(n.id) })), y = () => { T.default.isFullServerPreview(n.id) && (0, f.transitionTo)(L.Routes.CHANNEL(n.id)), u.default.shouldShowOnboarding(n.id) && (l.default.finishOnboarding(n.id), (0, d.discardOnboardingPromise)(n.id)), (0, I.stopImpersonating)(n.id), E.default.open(n.id, g), g === L.GuildSettingsSections.ROLE_SUBSCRIPTIONS && (0, _.announceDeleteTemplateChannels)(n.id) }, P = null === (t = p.current) || void 0 === t ? void 0 : t.clientHeight, U = N + 14; return (0, i.jsxs)("div", { className: D.container, ref: p, children: [(0, i.jsx)("div", { className: D.tooltipPointer, style: { top: Math.min(U, null != P ? P - 22 : U) } }), (0, i.jsxs)("div", { className: D.header, children: [O ? (0, i.jsx)(A.default, { guild: n, size: 16, className: D.rowIconV2, tooltipColor: a.Tooltip.Colors.PRIMARY }) : (0, i.jsx)(h.default, { guild: n, size: 20, className: D.rowIcon }), (0, i.jsx)(a.Text, { variant: "text-md/semibold", color: "header-primary", children: n.name })] }), (0, i.jsx)(M, { guild: n }), C ? (0, i.jsxs)("div", { className: D.footer, children: [(0, i.jsx)(m.default, { width: 12, height: 12, className: D.infoIcon }), (0, i.jsx)(a.Text, { color: "text-muted", variant: "text-xs/medium", children: v.default.Messages.GUILD_POPOUT_INVITES_PAUSED.format({ onClick: () => { S(), E.default.open(n.id, L.GuildSettingsSections.INSTANT_INVITES) } }) })] }) : null, R ? (0, i.jsxs)("div", { className: D.footer, children: [(0, i.jsx)(m.default, { width: 12, height: 12, className: D.infoIcon }), (0, i.jsx)(a.Text, { color: "text-muted", variant: "text-xs/medium", children: v.default.Messages.GUILD_POPOUT_VIEWING_AS_ROLES.format({ onClick: () => { S(), y() } }) })] }) : null] }) } }, 272709: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return z } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("831209"), l = n("442837"), u = n("481060"), d = n("700582"), _ = n("812206"), c = n("924301"), E = n("565799"), I = n("501655"), T = n("427679"), f = n("543882"), S = n("592125"), h = n("496675"), A = n("594174"), m = n("979651"), N = n("366695"), p = n("119828"), O = n("737688"), C = n("242315"), R = n("630641"), g = n("158010"), L = n("944581"), v = n("645284"), D = n("632184"), M = n("170039"), y = n("26290"), P = n("806519"), U = n("912787"), b = n("623552"), G = n("718582"), w = n("177963"), k = n("835248"), B = n("437431"), V = n("874070"), x = n("185885"), F = n("126134"), H = n("981631"), Y = n("765305"), j = n("689938"), W = n("181096"); function K(e) { let { users: t, othersCount: n, extraPill: r } = e; return (0, i.jsxs)("div", { className: W.facepile, children: [t.map((e, r) => { let s = (0, i.jsx)(d.default, { user: e, size: u.AvatarSizes.SIZE_20, "aria-label": "" }); return r === t.length - 1 && 0 === n ? (0, i.jsx)("div", { className: W.facePileItem, children: s }, e.id) : (0, i.jsx)(P.default, { width: 20, height: 20, mask: P.default.Masks.GUILD_POPOUT_FACE_PILE_AVATAR, className: W.facePileItem, children: s }, e.id) }), n > 0 && (0, i.jsxs)(u.Text, { color: "interactive-normal", variant: "text-xs/medium", className: W.othersCount, children: ["+", n] }), r] }) } function z(e) { var t; let { cardData: n, guildId: s, cardIndex: d } = e, { category: P } = n, [k, V] = r.useState(!1), x = P === F.CardCategory.HANGOUT && n.streamUserIds.length > 0, z = (0, l.useStateFromStores)([f.default], () => x ? f.default.getPreviewURL(s, n.channelId, n.streamUserIds[0]) : null), Z = (0, l.useStateFromStores)([f.default], () => P === F.CardCategory.HANGOUT ? f.default.getIsPreviewLoading(s, n.channelId, n.streamUserIds[0]) : null), X = P === F.CardCategory.HANGOUT && n.streamUserIds.length > 0 && null == z && !Z, Q = (0, l.useStateFromStores)([S.default], () => { let e = P === F.CardCategory.HANGOUT || P === F.CardCategory.GAMING ? n.channelId : P === F.CardCategory.EVENT ? n.event.channel_id : P === F.CardCategory.EMBEDDED_ACTIVITY ? n.embeddedActivities[0].channelId : null; return S.default.getChannel(e) }), q = (0, l.useStateFromStores)([c.default], () => c.default.getActiveEventByChannel(null == Q ? void 0 : Q.id)), { usersToShow: J, othersCount: $ } = (0, G.useVoiceChannelUsers)(null !== (t = null == Q ? void 0 : Q.id) && void 0 !== t ? t : "", s), { usersToShow: ee } = (0, G.useGetEventCardUsers)(Q), et = (0, G.useGetOrFetchEmbeddedActivityApplication)(n), en = function(e, t, n, r) { let { category: s } = e, a = (0, U.default)(e), { usersToShow: d } = (0, G.useGetEventCardUsers)(a), c = (0, l.useStateFromStores)([f.default], () => s === F.CardCategory.HANGOUT ? f.default.getIsPreviewLoading(t, e.channelId, e.streamUserIds[0]) : null); switch (s) { case F.CardCategory.GAMING: let { games: E } = e; if (null == E[0].application_id) return (0, i.jsx)(O.default, {}); return (0, i.jsx)(N.default, { game: _.default.getApplication(E[0].application_id), size: "xl", className: W.gameIcon }); case F.CardCategory.EVENT: if (d.length > 0) return (0, i.jsx)(b.default, { guildId: t, users: d }); return e.isStage ? (0, i.jsx)(B.default, { className: W.imageIcon }) : (0, i.jsx)(w.default, { className: W.imageIcon }); case F.CardCategory.EMBEDDED_ACTIVITY: let { embeddedActivities: I } = e; if (null == I[0].applicationId) return (0, i.jsx)(L.default, {}); return (0, i.jsx)(N.default, { game: r, size: "xl", className: W.gameIcon }); case F.CardCategory.HANGOUT: { let { streamUserIds: r, userIds: s, channelHasVideo: a, isStage: l } = e, _ = l ? d : []; if (l) { if (0 === _.length) return (0, i.jsx)(B.default, { className: W.imageIcon }); return (0, i.jsx)(b.default, { guildId: t, users: _ }) } if (r.length > 0) { let e = e => (0, i.jsx)(y.TextBadge, { text: j.default.Messages.LIVE, color: o.default.STATUS_DANGER, className: e }); if (c) return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(u.Spinner, { className: W.streamPreview }), e(W.liveBadge)] }); if (null != n) return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("img", { src: n, alt: "", className: W.streamPreview }), e(W.liveBadge)] }); let s = r.map(e => A.default.getUser(e)).filter(e => null != e); return (0, i.jsx)(b.default, { guildId: t, users: s }) } let E = s.map(e => A.default.getUser(e)).filter(e => null != e); return (0, i.jsx)(b.default, { guildId: t, users: E }) } } }(n, s, z, et), ei = function(e, t) { let { category: n } = e, i = (0, G.useSortUserIdsByAffinity)(n === F.CardCategory.HANGOUT ? null == e ? void 0 : e.userIds : []), r = (0, G.useSortUserIdsByAffinity)(n === F.CardCategory.HANGOUT ? null == e ? void 0 : e.streamUserIds : []), s = (0, G.useSortUserIdsByAffinity)(n === F.CardCategory.GAMING ? null == e ? void 0 : e.gameUserIds : []), a = (0, U.default)(e), { usersToShow: o } = (0, G.useGetEventCardUsers)(a), l = (0, G.useSortUserIdsByAffinity)(n === F.CardCategory.HANGOUT && e.isStage ? o.map(e => e.id) : []), u = new Set; n === F.CardCategory.EMBEDDED_ACTIVITY && e.embeddedActivities.forEach(e => { u = new Set([...u, ...e.userIds]) }); let d = (0, G.useSortUserIdsByAffinity)(n === F.CardCategory.EMBEDDED_ACTIVITY ? [...u] : []); switch (n) { case F.CardCategory.HANGOUT: { let n = (0, G.getUserNameString)(l.length > 0 ? l : r.length > 0 ? r : i, t); if (e.isStage) { var _, c; return null !== (c = null === (_ = T.default.getStageInstanceByChannel(e.channelId)) || void 0 === _ ? void 0 : _.topic) && void 0 !== c ? c : n } return n } case F.CardCategory.EVENT: return e.event.name; case F.CardCategory.EMBEDDED_ACTIVITY: return (0, G.getUserNameString)(d, t); case F.CardCategory.GAMING: return (0, G.getUserNameString)(s, t); default: return null } }(n, s), er = function(e, t) { var n, r, s; let { category: a } = e, o = (0, U.default)(e), l = function(e) { let t = (0, U.default)(e), { category: n } = e; return (null == t ? void 0 : t.isGuildStageVoice()) ? M.default : (n === F.CardCategory.GAMING || n === F.CardCategory.EMBEDDED_ACTIVITY) && e.streamersCount > 0 || n === F.CardCategory.HANGOUT && e.streamUserIds.length > 0 ? v.default : n === F.CardCategory.EVENT && (null == t ? void 0 : t.isGuildVoice()) ? D.default : null != t && m.default.hasVideo(t.id) ? p.default : D.default }(e), { audienceCount: d } = (0, G.useGetEventCardUsers)(o); switch (a) { case F.CardCategory.GAMING: let { games: _, channelId: c } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(O.default, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", className: W.ellipsis, children: 1 === _.length ? _[0].name : j.default.Messages.MULTIPLE_GAMES_IN_CHANNEL.format({ numGames: _.length }) }), "•", null != l && (0, i.jsx)(l, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", className: W.ellipsis, children: null === (n = S.default.getChannel(c)) || void 0 === n ? void 0 : n.name })] }); case F.CardCategory.EVENT: let { event: E } = e, I = (0, G.getEventLocationData)(E), T = null == I ? void 0 : I.IconComponent, f = null == I ? void 0 : I.locationName; if (null != T && null != f) return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(T, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", className: W.ellipsis, children: f }), null != d && d > 0 && (0, i.jsxs)(i.Fragment, { children: ["•", (0, i.jsx)(g.default, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", children: d })] })] }); return null; case F.CardCategory.EMBEDDED_ACTIVITY: let { embeddedActivities: h } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(L.default, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", className: W.ellipsis, children: 1 === h.length ? null == t ? void 0 : t.name : j.default.Messages.MULTIPLE_ACTIVITIES_IN_CHANNEL.format({ numActivities: h.length }) }), "•", null != l && (0, i.jsx)(l, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", className: W.ellipsis, children: null === (r = S.default.getChannel(h[0].channelId)) || void 0 === r ? void 0 : r.name })] }); case F.CardCategory.HANGOUT: { let { channelId: t } = e; return (0, i.jsxs)(i.Fragment, { children: [null != l && (0, i.jsx)(l, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", className: W.ellipsis, children: null === (s = S.default.getChannel(t)) || void 0 === s ? void 0 : s.name }), null != d && d > 0 && (0, i.jsxs)(i.Fragment, { children: ["•", (0, i.jsx)(g.default, { className: W.categoryIcon }), (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", children: d })] })] }) } default: return null } }(n, et), es = function(e) { let { category: t } = e, n = (0, U.default)(e), { audienceCount: i } = (0, G.useGetEventCardUsers)(n); switch (t) { case F.CardCategory.EVENT: if (null != i) return [{ icon: C.default, count: i }]; return []; case F.CardCategory.HANGOUT: let { streamUserIds: r, userIds: s, channelId: a, isStage: o } = e; if (o) { var l; return [{ icon: C.default, count: null !== (l = E.default.getParticipantCount(a, I.StageChannelParticipantNamedIndex.AUDIENCE)) && void 0 !== l ? l : 0 }] } if (r.length > 0) return [{ icon: g.default, count: s.length > 0 ? s.length : null }]; return []; case F.CardCategory.EMBEDDED_ACTIVITY: return [{ icon: g.default, count: e.voiceUsersCount > 0 ? e.voiceUsersCount : null }, { icon: v.default, count: e.streamersCount > 0 ? e.streamersCount : null }]; case F.CardCategory.GAMING: return [{ icon: g.default, count: e.voiceStates.length > 0 ? e.voiceStates.length : null }, { icon: v.default, count: e.streamersCount > 0 ? e.streamersCount : null }]; default: return [] } }(n), ea = (0, G.getClickHandler)(n, s, d), eo = function(e, t, n) { var r; let { category: s } = e, a = null, o = s === F.CardCategory.EVENT; if (null == (a = o ? e.event.channel_id : s === F.CardCategory.EMBEDDED_ACTIVITY ? e.embeddedActivities[0].channelId : e.channelId) && !o) return; let l = null != a && m.default.isInChannel(a), d = o && (e.event.entity_type === Y.GuildScheduledEventEntityTypes.EXTERNAL || e.event.entity_type === Y.GuildScheduledEventEntityTypes.NONE) ? j.default.Messages.VIEW : l ? j.default.Messages.GUILD_POPOUT_JOINED : j.default.Messages.JOIN, _ = (null === (r = S.default.getChannel(a)) || void 0 === r ? void 0 : r.isGuildVocal()) && !h.default.can(H.Permissions.CONNECT, S.default.getChannel(a)), c = (0, G.getJoinHandler)(e, t), E = (0, i.jsxs)(u.Button, { size: u.Button.Sizes.MIN, innerClassName: W.joinButtonInner, color: u.Button.Colors.GREEN, disabled: l || _, onClick: i => { i.stopPropagation(), (0, G.trackClick)(e, t, n, G.CardClickSources.JOIN_BUTTON), null == c || c() }, className: W.joinButton, children: [d, _ && (0, i.jsx)(R.default, { width: 14, height: 14 })] }); return (0, i.jsx)("div", { className: W.joinButtonWhatWrapper, children: E }) }(n, s, d), el = (null != q || !!(null == Q ? void 0 : Q.isGuildStageVoice())) && ee.length > 0, eu = P === F.CardCategory.HANGOUT && (0 === n.streamUserIds.length || X) && !(null == Q ? void 0 : Q.isGuildStageVoice()), ed = P === F.CardCategory.EMBEDDED_ACTIVITY && n.streamersCount > 0 ? (0, i.jsxs)("div", { className: W.pill, children: [(0, i.jsx)(v.default, { className: W.pillIcon }), (0, i.jsx)(u.Text, { color: "text-normal", variant: "text-xs/medium", children: n.streamersCount })] }) : null; return (0, i.jsxs)(u.Clickable, { onClick: () => null == ea ? void 0 : ea(), tag: "div", className: W.container, onMouseEnter: () => V(!0), onMouseLeave: () => V(!1), children: [(0, i.jsx)("div", { className: a()(W.image, { [W.streamContainer]: x && !X && !(null == Q ? void 0 : Q.isGuildStageVoice()) }), children: en }), (0, i.jsxs)("div", { className: W.content, children: [null != ei && (0, i.jsx)(u.Heading, { color: "header-primary", variant: "heading-sm/semibold", className: 0 === es.length ? W.multiLineTitle : W.singleLineTitle, children: ei }), null != er && (0, i.jsx)(u.Text, { variant: "text-xs/medium", color: "text-secondary", className: W.subtitle, children: er }), !(el || eu) && !(null == Q ? void 0 : Q.isGuildStageVoice()) && J.length > 0 && (0, i.jsx)(K, { users: J, othersCount: $, extraPill: ed })] }), k && eo] }) } }, 718582: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CardClickSources: function() { return i }, getClickHandler: function() { return ei }, getEventLocationData: function() { return es }, getJoinHandler: function() { return er }, getUserNameString: function() { return et }, getVoiceChannelUsers: function() { return Z }, trackClick: function() { return en }, useGetEventCardUsers: function() { return ee }, useGetOrFetchEmbeddedActivityApplication: function() { return ea }, useGuildPopoutCards: function() { return Q }, useSortUserIdsByAffinity: function() { return J }, useSortUsersByAffinity: function() { return $ }, useVoiceChannelUsers: function() { return X } }), n("47120"), n("390547"), n("653041"), n("627341"), n("757143"); var i, r, s = n("470079"), a = n("392711"), o = n("278074"), l = n("442837"), u = n("925549"), d = n("317381"), _ = n("841784"), c = n("835473"), E = n("557135"), I = n("471445"), T = n("66999"), f = n("15274"), S = n("924301"), h = n("230900"), A = n("703656"), m = n("881824"), N = n("922482"), p = n("565799"), O = n("501655"), C = n("344185"), R = n("199902"), g = n("592125"), L = n("480294"), v = n("984933"), D = n("271383"), M = n("496675"), y = n("158776"), P = n("699516"), U = n("800599"), b = n("594174"), G = n("979651"), w = n("938475"), k = n("393112"), B = n("626135"), V = n("823379"), x = n("5192"), F = n("51144"), H = n("912787"), Y = n("126134"), j = n("981631"), W = n("765305"), K = n("689938"); let z = { Event: 7, Game: 6, EmbeddedActivity: 5, Stream: 4, Video: 3, Voice: 2, Base: 1 }; function Z(e, t) { let n = w.default.getVoiceStatesForChannelAlt(e, t).map(e => { let { user: t } = e; return t.id }), i = L.default.hasConsented(j.Consents.PERSONALIZATION), r = U.default.getUserAffinities(); return (i && r.length > 0 ? (0, a.orderBy)(n, [e => { var t, n; return null !== (n = null === (t = U.default.getUserAffinity(e)) || void 0 === t ? void 0 : t.affinity) && void 0 !== n ? n : 0 }], ["desc"]) : n).map(e => b.default.getUser(e)).filter(V.isNotNullish) } function X(e, t) { return function(e, t, n, i) { let r; let a = J(e), o = s.useMemo(() => a.map(e => b.default.getUser(e)).filter(V.isNotNullish), [a]), l = o.slice(0, 6), u = Math.max(0, o.length - l.length); if (null != i && i.length > 0) { let e = x.default.getName(t, n, b.default.getUser(i[0])); r = 1 === i.length ? K.default.Messages.GUILD_POPOUT_ACTIVITY_STREAMER.format({ username: e }) : K.default.Messages.GUILD_POPOUT_USERS_STREAMING.format({ username: e, count: i.length - 1 }) } else if (l.length > 0) { let e = x.default.getName(t, n, b.default.getUser(l[0].id)); r = 1 === l.length ? K.default.Messages.GUILD_POPOUT_USER_IN_VOICE.format({ username: e }) : K.default.Messages.GUILD_POPOUT_USERS_IN_VOICE.format({ username: e, count: l.length - 1 }) } return { totalUsers: o.length, usersToShow: l, othersCount: u, usersText: r } }((0, l.useStateFromStores)([w.default], () => w.default.getVoiceStatesForChannelAlt(e, t), [e, t]).map(e => { let { user: t } = e; return t.id }), t, e) } function Q(e) { let t = e.id, [n, i] = s.useState([]), [r, u] = s.useState(0), c = (0, l.useStateFromStoresArray)([v.default, C.default], () => { let e = v.default.getChannels(t)[v.GUILD_VOCAL_CHANNELS_KEY].map(e => { let { channel: t } = e; return t.id }); return [...e, ...Object.values(C.default.getThreadsForGuild(t)).flatMap(e => Object.keys(e))] }, [t]), E = (0, l.useStateFromStores)([S.default, g.default], () => S.default.getGuildScheduledEventsForGuild(t).filter(e => (0, S.isGuildScheduledEventActive)(e)).map(e => { var t; return { category: Y.CardCategory.EVENT, event: e, isStage: !!(null === (t = g.default.getChannel(e.channel_id)) || void 0 === t ? void 0 : t.isGuildStageVoice()) } }), [t], a.isEqual), I = E.map(e => { let { event: t } = e; return t.channel_id }), T = (0, l.useStateFromStores)([P.default], () => P.default.getRelationships()), f = s.useMemo(() => Object.keys(T).filter(e => T[e] === j.RelationshipTypes.BLOCKED), [T]), h = (0, l.useStateFromStores)([w.default], () => w.default.getVoiceStates(t), [t]), A = s.useMemo(() => { let t = Object.keys(h); return 0 === t.length ? [] : t.filter(t => { let n = h[t].filter(V.isNotNullish); return !(0 === n.length || I.includes(t)) && null == n.find(e => { let { user: t } = e; return f.includes(t.id) }) && t !== e.afkChannelId && c.includes(t) }) }, [h, I, c, f, e.afkChannelId]), m = (0, l.useStateFromStores)([d.default, G.default, R.default, y.default, g.default], () => A.map(e => { var t; let n = R.default.getAllApplicationStreamsForChannel(e).map(e => e.ownerId), i = h[e].filter(V.isNotNullish), r = d.default.getEmbeddedActivitiesForChannel(e), s = Y.CardCategory.HANGOUT, a = [], o = i.map(e => { let { user: t } = e; return t.id }), l = G.default.hasVideo(e), u = [], c = []; for (let e of (r.length > 0 && (s = Y.CardCategory.EMBEDDED_ACTIVITY), i)) { let t = y.default.findActivity(e.user.id, q(e)); null != t && !(0, _.default)(t) && (s = Y.CardCategory.GAMING, a.push(t), u.push(e.user.id)), e.voiceState.selfVideo && c.push(e.user.id) } if (s === Y.CardCategory.EMBEDDED_ACTIVITY) return { category: s, embeddedActivities: r, streamersCount: n.length, voiceUsersCount: i.length }; if (s === Y.CardCategory.GAMING) return { category: s, channelId: e, games: a, voiceStates: i, streamersCount: n.length, gameUserIds: u }; return { category: s, channelId: e, userIds: o, streamUserIds: n, channelHasVideo: l, videoUserIds: c, isStage: !!(null === (t = g.default.getChannel(e)) || void 0 === t ? void 0 : t.isGuildStageVoice()) } }), [h, A], a.isEqual), N = (0, l.useStateFromStores)([L.default], () => L.default.hasConsented(j.Consents.PERSONALIZATION)), p = (0, l.useStateFromStores)([U.default], () => U.default.getUserAffinities()), O = N && p.length > 0, D = [...m, ...E]; return r !== D.length && (i((function(e, t) { return (0, a.orderBy)(e, [e => (function(e, t) { let n = e => e > 0 ? Math.log(e + 1) : 0, i = e => e.map(e => { var t, n; return null !== (n = null === (t = U.default.getUserAffinity(e)) || void 0 === t ? void 0 : t.affinity) && void 0 !== n ? n : 0 }).map(n), r = (0, o.match)(e).with({ category: Y.CardCategory.EVENT }, () => 7).with({ category: Y.CardCategory.GAMING }, () => 6).with({ category: Y.CardCategory.EMBEDDED_ACTIVITY }, () => 5).with({ streamUserIds: o.P.when(e => e.length > 0) }, () => 4).with({ channelHasVideo: !0 }, () => 3).with({ category: Y.CardCategory.HANGOUT }, () => 2).otherwise(() => 1), s = 0; if (t) { if ("userIds" in e && (s += Math.max(...i(e.userIds))), "embeddedActivities" in e) { let t = new Set; e.embeddedActivities.forEach(e => { t = new Set([...t, ...e.userIds]) }), s += Math.max(...i([...t])) } "voiceStates" in e && (s += Math.max(...i(e.voiceStates.filter(V.isNotNullish).map(e => { let { user: t } = e; return t.id })))) } else { if ("userIds" in e && (s += e.userIds.length), "embeddedActivities" in e) { let t = new Set; e.embeddedActivities.forEach(e => { t = new Set([t, ...e.userIds]) }), s += t.size } "voiceStates" in e && (s += e.voiceStates.filter(V.isNotNullish).map(e => { let { user: t } = e; return t.id }).length) } return s = s > 0 ? s * r : 1e-5 * r })(e, t)], ["desc"]) })(D, O).slice(0, 3)), u(D.length)), n }(r = i || (i = {})).CARD = "card", r.JOIN_BUTTON = "join_button"; let q = e => e => [j.ActivityTypes.PLAYING, j.ActivityTypes.WATCHING].includes(e.type) && (null != e.assets || null != e.state || null != e.details || null != e.party) && !1; function J(e) { return (0, l.useStateFromStoresArray)([L.default, U.default], () => { let t = L.default.hasConsented(j.Consents.PERSONALIZATION), n = U.default.getUserAffinities(); return t && n.length > 0 ? (0, a.orderBy)(e, [e => { var t, n; return null !== (n = null === (t = U.default.getUserAffinity(e)) || void 0 === t ? void 0 : t.affinity) && void 0 !== n ? n : 0 }], ["desc"]) : e }, [e]) } function $(e) { return (0, l.useStateFromStoresArray)([L.default, U.default], () => { let t = L.default.hasConsented(j.Consents.PERSONALIZATION), n = U.default.getUserAffinities(); return t && n.length > 0 ? (0, a.orderBy)(e, [e => { var t, n; return null !== (n = null === (t = U.default.getUserAffinity(e.id)) || void 0 === t ? void 0 : t.affinity) && void 0 !== n ? n : 0 }], ["desc"]) : e }, [e]) } function ee(e) { let t = (0, l.useStateFromStores)([p.default], () => null == e ? null : p.default.getParticipantCount(e.id, O.StageChannelParticipantNamedIndex.AUDIENCE)), n = (0, l.useStateFromStoresArray)([p.default], () => null == e ? [] : p.default.getMutableParticipants(e.id, O.StageChannelParticipantNamedIndex.SPEAKER).filter(e => e.type === O.StageChannelParticipantTypes.VOICE).map(e => { let { user: t } = e; return t })), i = (0, l.useStateFromStoresArray)([w.default], () => null == e ? [] : w.default.getVoiceStatesForChannel(e).filter(V.isNotNullish).map(e => { let { user: t } = e; return t })); if ((null == e ? void 0 : e.type) === j.ChannelTypes.GUILD_STAGE_VOICE) { let e = n.slice(0, 3), i = Math.max(0, n.length - e.length); return { usersToShow: n, othersCount: i, audienceCount: null != t ? t : 0 } } if ((null == e ? void 0 : e.type) === j.ChannelTypes.GUILD_VOICE) { let e = i.slice(0, 7), t = Math.max(0, i.length - e.length); return { usersToShow: e, othersCount: t, audienceCount: null } } return { usersToShow: [], othersCount: 0, audienceCount: null } } function et(e, t) { var n, i; let r = (n = e, i = t, n.map(e => { var t; let n = b.default.getUser(e); if (null == n) return null; let r = D.default.getNick(i, n.id); return null !== (t = null != r ? r : F.default.getGlobalName(n)) && void 0 !== t ? t : F.default.getUserTag(n) }).filter(e => null != e)), s = r.length; if (s > 0) return 1 === s ? r[0] : (2 === s ? K.default.Messages.USER_SUMMARY_TWO : 3 === s ? K.default.Messages.USER_SUMMARY_THREE : K.default.Messages.USER_SUMMARY_THREE_AND_OTHERS).format({ first: r[0], second: null == r ? void 0 : r[1], third: null == r ? void 0 : r[2], count: s - 3 }) } function en(e, t, n, i) { var r, s; let a = {}, o = null !== (s = (0, H.getChannelIdFromCardData)(e)) && void 0 !== s ? s : ""; a.source = i, a.card_type = e.category, a.card_position = n, a.channel_id = o, a.channel_type = null === (r = g.default.getChannel(o)) || void 0 === r ? void 0 : r.type; let l = Z(o, t); a.card_affinity_users_count = Math.min(l.length, 6), a.card_total_users_count = l.length, a.card_affinity_user_ids = l.slice(0, 6).map(e => e.id), a.card_max_affinity_user_id = l.length > 0 ? l[0].id : "0", a.card_user_affinity_scores = l.slice(0, 6).map(e => { var t, n; return null !== (n = null === (t = U.default.getUserAffinity(e.id)) || void 0 === t ? void 0 : t.affinity) && void 0 !== n ? n : 0 }), B.default.track(j.AnalyticEvents.GUILD_TOOLTIP_CARD_CLICKED, { ...a, guild_id: t }) } function ei(e, t, n) { let { category: i } = e; switch (i) { case Y.CardCategory.HANGOUT: case Y.CardCategory.GAMING: return () => { let { channelId: i } = e, r = g.default.getChannel(i), s = M.default.can(j.Permissions.CONNECT, r); en(e, t, n, "card"), s ? (0, A.transitionToGuild)(t, i) : ((0, A.transitionToGuild)(t), u.default.channelListScrollTo(t, i)) }; case Y.CardCategory.EMBEDDED_ACTIVITY: return () => { let { channelId: i } = e.embeddedActivities[0], r = g.default.getChannel(i), s = M.default.can(j.Permissions.CONNECT, r); en(e, t, n, "card"), s ? (0, A.transitionToGuild)(t, i) : ((0, A.transitionToGuild)(t), u.default.channelListScrollTo(t, i)) }; case Y.CardCategory.EVENT: return () => { en(e, t, n, "card"), (0, f.openGuildEventDetails)({ eventId: e.event.id }) }; default: return null } } function er(e, t) { let { category: n } = e; switch (n) { case Y.CardCategory.HANGOUT: case Y.CardCategory.GAMING: return () => { let { channelId: n } = e, i = g.default.getChannel(n); null != i && i.type === j.ChannelTypes.GUILD_VOICE && M.default.can(j.Permissions.CONNECT, i) && (E.default.handleVoiceConnect({ channel: i, connected: G.default.isInChannel(n), needSubscriptionToAccess: (0, T.getChannelRoleSubscriptionStatus)(n).needSubscriptionToAccess, locked: !1 }), (0, A.transitionToGuild)(t, n)) }; case Y.CardCategory.EMBEDDED_ACTIVITY: return () => { let { channelId: n } = e.embeddedActivities[0], i = g.default.getChannel(n); null != i && i.type === j.ChannelTypes.GUILD_VOICE && M.default.can(j.Permissions.CONNECT, i) && (E.default.handleVoiceConnect({ channel: i, connected: G.default.isInChannel(n), needSubscriptionToAccess: (0, T.getChannelRoleSubscriptionStatus)(n).needSubscriptionToAccess, locked: !1 }), (0, A.transitionToGuild)(t, n)) }; case Y.CardCategory.EVENT: return () => { let { event: t } = e, { channel_id: n, guild_id: i, entity_type: r } = t, s = g.default.getChannel(n); if (null == n || null == s || !M.default.can(j.Permissions.CONNECT, s)) { (0, f.openGuildEventDetails)({ eventId: t.id }); return } let a = async () => { let e = await (0, N.connectOrLurkStage)(i, n); (0, m.navigateToStage)(e, null, !1) }; r === W.GuildScheduledEventEntityTypes.STAGE_INSTANCE ? a() : r === W.GuildScheduledEventEntityTypes.VOICE && (E.default.handleVoiceConnect({ channel: s, connected: G.default.isInChannel(n), needSubscriptionToAccess: (0, T.getChannelRoleSubscriptionStatus)(n).needSubscriptionToAccess, locked: !1 }), (0, A.transitionToGuild)(i, n)) }; default: return null } } function es(e) { let t, n; let i = (0, h.getLocationFromEvent)(e), r = null == i ? void 0 : i.replace(/[<#>]/g, ""), s = null != r ? g.default.getChannel(r) : g.default.getChannel(e.channel_id), a = M.default.can(j.Permissions.VIEW_CHANNEL, s); if (null != s && a) t = (0, I.getSimpleChannelIconComponent)(s.type), n = s.name; else { if (null == i) return null; t = k.default, n = i } return { IconComponent: t, locationName: n } } function ea(e) { let t = e.category === Y.CardCategory.EMBEDDED_ACTIVITY ? e.embeddedActivities[0].applicationId : null; return (0, c.useGetOrFetchApplication)(t) } }, 593618: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildTooltipText: function() { return en }, default: function() { return ei } }), n("390547"), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("442837"), d = n("477690"), _ = n("481060"), c = n("317381"), E = n("666188"), I = n("246364"), T = n("746916"), f = n("965638"), S = n("160404"), h = n("41776"), A = n("777861"), m = n("565799"), N = n("501655"), p = n("517334"), O = n("344185"), C = n("199902"), R = n("77498"), g = n("984933"), L = n("607744"), v = n("158776"), D = n("9156"), M = n("594174"), y = n("938475"), P = n("940627"), U = n("705600"), b = n("737688"), G = n("242315"), w = n("944581"), k = n("632184"), B = n("170039"), V = n("761374"), x = n("602623"), F = n("624138"), H = n("510601"), Y = n("59688"), j = n("456774"), W = n("718582"), K = n("981631"), z = n("689938"), Z = n("952972"), X = n("81311"); let Q = (0, F.cssValueToNumber)(d.default.GUILD_TOOLTIP_ICON_SIZE), q = (0, F.cssValueToNumber)(d.default.GUILD_TOOLTIP_ICON_SIZE_V_2); function J(e, t, n) { return 0 === t.length ? null : (0, i.jsxs)("div", { className: Z.row, children: [(0, i.jsx)(e, { className: Z.activityIcon }), (0, i.jsx)(x.default, { guildId: n, users: t, max: 6 })] }) } function $(e) { let { muteConfig: t, className: n } = e; return (null == t ? void 0 : t.end_time) == null ? (0, i.jsx)(_.Text, { variant: "text-xs/normal", color: "text-muted", className: n, children: z.default.Messages.FORM_LABEL_MUTED }) : (0, i.jsx)(A.default, { muteConfig: t, className: n }) } function ee(e) { var t, n, s; let { guild: o } = e, d = o.id, E = (0, u.useStateFromStoresArray)([g.default, O.default], () => { let e = g.default.getChannels(d)[g.GUILD_VOCAL_CHANNELS_KEY].filter(e => { let { channel: t } = e; return t.type === K.ChannelTypes.GUILD_VOICE }).map(e => { let { channel: t } = e; return t.id }); return [...e, ...Object.values(O.default.getThreadsForGuild(d)).flatMap(e => Object.keys(e))] }, [d]), I = (0, p.default)(d), T = r.useMemo(() => I.map(e => e.id), [I]), f = (0, u.useStateFromStores)([y.default], () => y.default.getVoiceStates(d), [d]), S = l().flatMap(E, e => { var t; return e === o.afkChannelId ? [] : (null !== (t = f[e]) && void 0 !== t ? t : []).map(e => { let { user: t } = e; return t }) }), h = (0, u.useStateFromStoresArray)([m.default], () => l().flatMap(T, e => e === o.afkChannelId ? [] : m.default.getMutableParticipants(e, N.StageChannelParticipantNamedIndex.SPEAKER).filter(e => e.type === N.StageChannelParticipantTypes.VOICE).map(e => { let { user: t } = e; return t }))), A = (0, u.useStateFromStores)([m.default], () => { let e = 0; for (let t of T) e += m.default.getParticipantCount(t, N.StageChannelParticipantNamedIndex.AUDIENCE); return e }), L = (0, u.useStateFromStoresArray)([C.default], () => C.default.getAllApplicationStreams().filter(e => e.guildId === d).map(e => e.ownerId), [d]), P = (0, H.useIsGamingVoiceActivityEnabled)("Guild Tooltip", !1), U = (0, u.useStateFromStoresArray)([v.default, R.default], () => S.filter(e => v.default.getActivities(e.id, d).some(e => (null == e ? void 0 : e.application_id) != null && null != R.default.getDetectableGame(null == e ? void 0 : e.application_id)))), F = J(b.default, U, d), j = P ? U.map(e => e.id) : [], W = (0, u.useStateFromStoresArray)([c.default], () => c.default.getEmbeddedActivitiesForGuild(d).flatMap(e => Array.from(e.userIds)), [d]), z = (0, u.useStateFromStoresArray)([M.default], () => W.map(e => M.default.getUser(e)), [W]), X = (0, u.useStateFromStoresArray)([M.default], () => L.map(e => M.default.getUser(e)), [L]), Q = J(k.default, S.filter(e => !L.includes(e.id) && !W.includes(e.id) && !j.includes(e.id)), d); let q = (t = d, n = h, s = A, 0 === n.length ? null : (0, i.jsxs)("div", { className: Z.row, children: [(0, i.jsx)(B.default, { className: Z.activityIcon }), (0, i.jsx)(x.default, { guildId: t, users: n, max: 3 }), (0, i.jsxs)("div", { className: Z.stageListenerPill, children: [(0, i.jsx)(G.default, { width: 16, height: 16 }), (0, i.jsx)(_.Text, { className: Z.stageListenerCount, color: "text-normal", variant: "text-xs/normal", children: s })] })] })), ee = J(V.default, X.filter(e => null != e && !W.includes(e.id)), d), et = J(w.default, z, d), { isMuted: en, muteConfig: ei } = (0, u.useStateFromStoresObject)([D.default], () => ({ isMuted: D.default.isMuted(d), muteConfig: D.default.getMuteConfig(d) }), [d]); return null != F && H.default.trackExposure({ location: "Guild Tooltip" }), (null != q || null != Q || null != ee || null != et) && Y.default.trackExposure({ location: "guild_tooltip_original" }), (0, i.jsxs)(i.Fragment, { children: [q, Q, ee, P && F, et, en ? (0, i.jsx)($, { muteConfig: ei, className: a()(Z.muteText, { [Z.muteTextWithActivity]: null != Q || null != ee }) }) : null] }) } function et(e) { let { guildJoinRequestStatus: t } = e; return (0, i.jsx)(_.Text, { className: Z.viewAsRolesWarning, color: "text-normal", variant: "text-xs/normal", children: function(e) { switch (e) { case I.GuildJoinRequestApplicationStatuses.SUBMITTED: return z.default.Messages.GUILD_JOIN_REQUEST_STATUS_TOOLTIP_PENDING; case I.GuildJoinRequestApplicationStatuses.REJECTED: return z.default.Messages.GUILD_JOIN_REQUEST_STATUS_TOOLTIP_REJECTED; case I.GuildJoinRequestApplicationStatuses.APPROVED: return z.default.Messages.GUILD_JOIN_REQUEST_STATUS_TOOLTIP_APPROVED; default: return z.default.Messages.GUILD_JOIN_REQUEST_STATUS_TOOLTIP_STARTED } }(t) }) } function en(e) { let { guild: t, includeActivity: n = !0 } = e, r = (0, E.default)(t), s = (0, T.useCurrentUserGuildBadgeStatus)(t.id), o = null != s ? (0, i.jsx)(et, { guildJoinRequestStatus: s }) : null, l = n ? (0, i.jsx)(ee, { guild: t }) : null, d = (0, u.useStateFromStores)([S.default], () => S.default.isViewingRoles(t.id)), c = (0, f.useShouldShowInvitesDisabledNotif)(t); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)("div", { className: a()(Z.row, Z.rowGuildName), children: [r ? (0, i.jsx)(U.default, { guild: t, size: q, className: Z.rowIconV2 }) : (0, i.jsx)(P.default, { guild: t, size: Q, className: Z.rowIcon }), (0, i.jsx)("span", { className: a()(Z.guildNameText, { [Z.guildNameTextLimitedSize]: null != l }), children: t.toString() })] }), c ? (0, i.jsx)(_.Text, { className: Z.invitesDisabledTooltip, color: "header-secondary", variant: "text-sm/medium", children: z.default.Messages.INVITES_DISABLED_TOOLTIP }) : null, d ? (0, i.jsx)(_.Text, { className: Z.viewAsRolesWarning, color: "text-normal", variant: "text-xs/normal", children: z.default.Messages.VIEW_AS_ROLES_MENTIONS_WARNING }) : null != o ? o : l] }) } function ei(e) { let { guild: t, disabled: n = !1, "aria-label": s = !1, children: a, includeActivity: o = !0, isDragging: l } = e, d = (0, Y.useCanShowNewGuildTooltip)("guilds_bar", !1), [c, E] = r.useState(!1), I = (0, W.useGuildPopoutCards)(t), { isUserLurking: T, isUnverifiedAccount: f } = (0, u.useStateFromStoresObject)([h.default, L.default], () => { let e = h.default.isLurking(t.id); return { isUserLurking: e, isUnverifiedAccount: !L.default.getCheck(t.id).canChat } }); return r.useMemo(() => !T && !f && d && o && I.length > 0, [T, f, d, o, I.length]) ? (0, i.jsx)("div", { onMouseEnter: () => E(!0), onMouseLeave: () => E(!1), onFocus: () => E(!0), onBlur: () => E(!1), children: (0, i.jsx)(_.Popout, { position: "right", renderPopout: e => { var n; return (0, i.jsx)(j.default, { guild: t, closePopout: () => E(!1), nudge: null !== (n = e.nudge) && void 0 !== n ? n : 0 }) }, spacing: 0, onRequestClose: () => E(!1), shouldShow: !l && c, children: e => (0, i.jsx)("div", { ...e, children: a }) }) }) : (0, i.jsx)(_.Tooltip, { hideOnClick: !0, spacing: 20, position: "right", text: n ? null : (0, i.jsx)(en, { guild: t, includeActivity: o && !d }), "aria-label": s, tooltipClassName: X.listItemTooltip, children: e => { let { onFocus: t, onBlur: n, ...s } = e; return (0, i.jsx)("div", { onFocus: t, onBlur: n, children: r.cloneElement(r.Children.only(a), { ...s }) }) } }) } }, 177963: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { color: t = "currentColor", ...n } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(n), viewBox: "0 0 24 26", fill: "none", children: [(0, i.jsx)("path", { d: "M6.14287 0.428589C6.44598 0.428589 6.73667 0.549013 6.951 0.763341C7.16533 0.977668 7.28573 1.26834 7.28573 1.57145V2.42859C7.28573 2.50436 7.31584 2.57705 7.36942 2.63063C7.423 2.68421 7.49567 2.7143 7.57145 2.7143H16.1429C16.2187 2.7143 16.2913 2.68421 16.3449 2.63063C16.3985 2.57705 16.4286 2.50436 16.4286 2.42859V1.57145C16.4286 1.26834 16.549 0.977668 16.7633 0.763341C16.9777 0.549013 17.2683 0.428589 17.5714 0.428589C17.8746 0.428589 18.1652 0.549013 18.3796 0.763341C18.5939 0.977668 18.7143 1.26834 18.7143 1.57145V2.42859C18.7143 2.50436 18.7444 2.57705 18.798 2.63063C18.8516 2.68421 18.9242 2.7143 19 2.7143H19.8572C20.7665 2.7143 21.6385 3.07554 22.2815 3.71852C22.9245 4.36151 23.2857 5.23356 23.2857 6.14287C23.2857 6.44598 23.1653 6.73669 22.951 6.95101C22.7367 7.16534 22.446 7.28573 22.1429 7.28573H1.57145C1.26834 7.28573 0.97765 7.16534 0.763323 6.95101C0.548996 6.73669 0.428589 6.44598 0.428589 6.14287C0.428589 5.23356 0.78981 4.36151 1.43279 3.71852C2.07577 3.07554 2.94785 2.7143 3.85716 2.7143H4.7143C4.79008 2.7143 4.86276 2.68421 4.91634 2.63063C4.96992 2.57705 5.00002 2.50436 5.00002 2.42859V1.57145C5.00002 1.26834 5.12042 0.977668 5.33475 0.763341C5.54908 0.549013 5.83977 0.428589 6.14287 0.428589Z", fill: "url(#paint0_linear_2245_132278)" }), (0, i.jsx)("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M0.428589 10.7143C0.428589 10.4112 0.548996 10.1205 0.763323 9.90616C0.97765 9.69184 1.26834 9.57141 1.57145 9.57141H22.1429C22.446 9.57141 22.7367 9.69184 22.951 9.90616C23.1653 10.1205 23.2857 10.4112 23.2857 10.7143V21C23.2857 21.9093 22.9245 22.7814 22.2815 23.4244C21.6385 24.0674 20.7665 24.4286 19.8572 24.4286H3.85716C2.94785 24.4286 2.07577 24.0674 1.43279 23.4244C0.78981 22.7814 0.428589 21.9093 0.428589 21V10.7143ZM4.42859 13C4.27704 13 4.13169 13.0602 4.02453 13.1674C3.91736 13.2745 3.85716 13.4199 3.85716 13.5714V17C3.86009 17.1506 3.92123 17.2943 4.02776 17.4008C4.1343 17.5074 4.27795 17.5685 4.42859 17.5714H7.85716C8.00871 17.5714 8.15406 17.5112 8.26122 17.404C8.36839 17.2969 8.42859 17.1515 8.42859 17V13.5714C8.42859 13.4199 8.36839 13.2745 8.26122 13.1674C8.15406 13.0602 8.00871 13 7.85716 13H4.42859Z", fill: t }), (0, i.jsx)("defs", { children: (0, i.jsxs)("linearGradient", { id: "paint0_linear_2245_132278", x1: "11.8572", y1: "7.28573", x2: "11.8572", y2: "0.428589", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#EB80B4" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#F8E573" })] }) })] }) } }, 835248: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { color: t = "currentColor", ...n } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(n), viewBox: "0 0 31 27", fill: "none", children: [(0, i.jsx)("path", { d: "M3.21429 4.75714C2.3618 4.75714 1.54424 5.0958 0.94144 5.6986C0.338645 6.30139 0 7.11895 0 7.97143V16.5429C0 17.3953 0.338645 18.2129 0.94144 18.8157C1.54424 19.4185 2.3618 19.7571 3.21429 19.7571H18.2143C19.0668 19.7571 19.8843 19.4185 20.4871 18.8157C21.0899 18.2129 21.4286 17.3953 21.4286 16.5429V7.97143C21.4286 7.11895 21.0899 6.30139 20.4871 5.6986C19.8843 5.0958 19.0668 4.75714 18.2143 4.75714H3.21429Z", fill: t }), (0, i.jsx)("path", { d: "M12.3214 24.0428C12.1794 24.0428 12.0431 23.9864 11.9426 23.8859C11.8422 23.7855 11.7857 23.6492 11.7857 23.5071V21.3643C11.783 21.223 11.7257 21.0884 11.6258 20.9885C11.5259 20.8886 11.3912 20.8313 11.25 20.8286H10.1786C10.0365 20.8286 9.90025 20.885 9.79978 20.9855C9.69932 21.0859 9.64287 21.2222 9.64287 21.3643V23.5071C9.64287 23.6492 9.58643 23.7855 9.48597 23.8859C9.3855 23.9864 9.24924 24.0428 9.10716 24.0428H7.50002C7.21586 24.0428 6.94333 24.1557 6.7424 24.3567C6.54147 24.5576 6.42859 24.8301 6.42859 25.1143C6.42859 25.3984 6.54147 25.671 6.7424 25.8719C6.94333 26.0728 7.21586 26.1857 7.50002 26.1857H13.9286C14.2127 26.1857 14.4853 26.0728 14.6862 25.8719C14.8871 25.671 15 25.3984 15 25.1143C15 24.8301 14.8871 24.5576 14.6862 24.3567C14.4853 24.1557 14.2127 24.0428 13.9286 24.0428H12.3214Z", fill: t }), (0, i.jsx)("path", { d: "M30.9693 6.68689L24.1 0.100865C24.0458 0.0556697 23.9795 0.0261025 23.9088 0.0155205C23.8418 -0.0051735 23.7698 -0.0051735 23.7028 0.0155205C23.6394 0.045501 23.584 0.0893215 23.541 0.143537C23.5196 0.208306 23.5196 0.277935 23.541 0.342704V2.81778H20.0108C18.3266 2.81093 16.691 3.36328 15.3773 4.3825C14.0554 5.39146 13.1397 6.81537 12.7884 8.40807L11.6999 13.2587C11.686 13.3196 11.686 13.3827 11.6999 13.4436C11.7145 13.5024 11.745 13.5564 11.7882 13.6001C11.8316 13.6503 11.8872 13.6894 11.95 13.7139C12.1013 13.771 12.2694 13.771 12.4207 13.7139H12.509L13.8769 12.7609C15.3439 11.7045 17.1227 11.1311 18.9517 11.125H23.5116V13.5859C23.4902 13.6506 23.4902 13.7203 23.5116 13.785C23.5546 13.8392 23.61 13.8831 23.6734 13.9131C23.7404 13.9337 23.8124 13.9337 23.8794 13.9131C23.9535 13.9033 24.0214 13.8679 24.0706 13.8135L30.9399 7.18477C30.9611 7.10546 30.9611 7.02223 30.9399 6.94293C30.9728 6.86155 30.9829 6.77326 30.9693 6.68689Z", fill: "url(#paint0_linear_2245_133739)" }), (0, i.jsx)("defs", { children: (0, i.jsxs)("linearGradient", { id: "paint0_linear_2245_133739", x1: "21.3493", y1: "13.9273", x2: "21.3493", y2: "0.00129654", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#5A65E7" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#7BB7F6" })] }) })] }) } }, 437431: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { color: t = "currentColor", ...n } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(n), viewBox: "0 0 26 26", fill: "none", children: [(0, i.jsx)("path", { d: "M21.8106 20.2536C21.6261 20.0429 21.5173 19.7766 21.5018 19.4969C21.4863 19.2173 21.5648 18.9405 21.7249 18.7107C22.8337 17.0128 23.4221 15.0279 23.4178 13C23.4192 11.6278 23.15 10.2687 22.6255 9.00064C22.101 7.73259 21.3316 6.58044 20.3612 5.61012C19.3909 4.6398 18.2388 3.87037 16.9707 3.34589C15.7027 2.82141 14.3436 2.55216 12.9714 2.55356C10.2008 2.55356 7.54371 3.65417 5.58462 5.61326C3.62553 7.57234 2.52494 10.2294 2.52494 13C2.52377 15.029 3.11593 17.014 4.2285 18.7107C4.38718 18.9417 4.4639 19.2191 4.44642 19.4988C4.42894 19.7784 4.31827 20.0442 4.13208 20.2536C4.02624 20.3764 3.89391 20.4735 3.74507 20.5378C3.59623 20.602 3.43475 20.6316 3.2728 20.6244C3.11085 20.6172 2.95265 20.5733 2.81011 20.4961C2.66758 20.4188 2.54443 20.3103 2.44994 20.1786C1.00044 18.0577 0.227222 15.5475 0.232078 12.9786C0.243319 9.61177 1.58356 6.38558 3.96126 4.00186C6.33895 1.61815 9.56174 0.269753 12.9285 0.25C16.312 0.249995 19.5572 1.59262 21.9517 3.9831C24.3462 6.37357 25.6943 9.61651 25.6999 13C25.7048 15.5689 24.9316 18.0791 23.4821 20.2C23.3878 20.3337 23.2641 20.444 23.1206 20.5224C22.9771 20.6009 22.8175 20.6454 22.654 20.6527C22.4906 20.6599 22.3277 20.6296 22.1778 20.5642C22.0279 20.4987 21.895 20.3998 21.7892 20.275L21.8106 20.2536Z", fill: "url(#paint0_linear_2245_132278)" }), (0, i.jsx)("path", { d: "M18.5967 16.7501C18.7094 16.8679 18.8475 16.9585 19.0005 17.0149C19.1535 17.0713 19.3174 17.092 19.4797 17.0755C19.6419 17.0589 19.7982 17.0056 19.9367 16.9195C20.0752 16.8334 20.1922 16.7168 20.2788 16.5786C20.8304 15.4665 21.1165 14.2415 21.1145 13.0001C21.1145 10.8433 20.2578 8.77483 18.7327 7.24976C17.2076 5.72469 15.1392 4.86792 12.9824 4.86792C10.8275 4.87076 8.76179 5.72879 7.23903 7.25356C5.71627 8.77832 4.86097 10.8451 4.86097 13.0001C4.859 14.2415 5.14507 15.4665 5.69669 16.5786C5.7833 16.7168 5.90032 16.8334 6.03881 16.9195C6.17731 17.0056 6.33362 17.0589 6.49586 17.0755C6.65809 17.092 6.82197 17.0713 6.97498 17.0149C7.128 16.9585 7.26612 16.8679 7.37883 16.7501L7.44311 16.6858C7.60954 16.4902 7.71622 16.2508 7.75041 15.9963C7.7846 15.7417 7.74487 15.4827 7.63597 15.2501C7.33809 14.5374 7.18512 13.7725 7.18597 13.0001C7.18597 11.4618 7.79632 9.98632 8.88306 8.89758C9.96979 7.80884 11.4441 7.19577 12.9824 7.19293C13.745 7.19293 14.5001 7.34313 15.2047 7.63497C15.9093 7.92681 16.5494 8.35454 17.0887 8.89379C17.6279 9.43303 18.0557 10.0732 18.3475 10.7778C18.6393 11.4823 18.7895 12.2375 18.7895 13.0001C18.7904 13.7725 18.6374 14.5374 18.3395 15.2501C18.2306 15.4827 18.1909 15.7417 18.2251 15.9963C18.2593 16.2508 18.366 16.4902 18.5324 16.6858L18.5967 16.7501Z", fill: "url(#paint1_linear_2245_132278)" }), (0, i.jsx)("path", { d: "M16.4537 13C16.4537 13.9235 16.0868 14.8092 15.4338 15.4622C14.7807 16.1153 13.895 16.4821 12.9715 16.4821C12.0489 16.4793 11.1648 16.1115 10.5124 15.4591C9.85998 14.8067 9.49221 13.9226 9.48938 13C9.48938 12.0765 9.85625 11.1908 10.5093 10.5377C11.1623 9.88471 12.048 9.51784 12.9715 9.51784C13.4292 9.51642 13.8826 9.60555 14.3058 9.78004C14.7289 9.95453 15.1133 10.211 15.4369 10.5346C15.7606 10.8582 16.017 11.2427 16.1915 11.6658C16.366 12.0889 16.4551 12.5423 16.4537 13Z", fill: t }), (0, i.jsx)("path", { d: "M6.34977 22.3214C6.21616 22.732 6.23845 23.1775 6.41236 23.5727C6.58626 23.968 6.89962 24.2854 7.29262 24.4643C9.04622 25.3261 10.9744 25.7733 12.9283 25.7714C14.8938 25.7734 16.8332 25.3224 18.5962 24.4536C18.9888 24.2746 19.3013 23.9567 19.4735 23.561C19.6456 23.1653 19.6651 22.7199 19.5283 22.3107C19.0569 20.9418 18.1693 19.7545 16.9897 18.9149C15.8101 18.0754 14.3976 17.6256 12.9498 17.6286C11.4977 17.6251 10.0809 18.0756 8.89753 18.917C7.71414 19.7585 6.82335 20.9488 6.34977 22.3214Z", fill: t }), (0, i.jsxs)("defs", { children: [(0, i.jsxs)("linearGradient", { id: "paint0_linear_2245_132278", x1: "15.481", y1: "21.827", x2: "12.2345", y2: "-1.16702", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#FD78B7" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#FDE55C" })] }), (0, i.jsxs)("linearGradient", { id: "paint1_linear_2245_132278", x1: "14.5928", y1: "17.7832", x2: "12.7659", y2: "3.98729", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#FD78B7" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#FDE55C" })] })] })] }) } }, 874070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { color: t = "currentColor", ...n } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(n), viewBox: "0 0 26 19", fill: "none", children: [(0, i.jsx)("path", { d: "M3.48216 6.25115e-10C2.55864 6.25115e-10 1.67294 0.366869 1.01991 1.0199C0.366882 1.67293 1.65873e-05 2.55862 1.65873e-05 3.48214V15.0857C-0.00139819 15.5434 0.0877037 15.9969 0.262197 16.42C0.43669 16.8431 0.693126 17.2275 1.01675 17.5511C1.34038 17.8747 1.72482 18.1312 2.14793 18.3057C2.57104 18.4802 3.02449 18.5693 3.48216 18.5679H16.2857C16.7434 18.5693 17.1969 18.4802 17.62 18.3057C18.0431 18.1312 18.4275 17.8747 18.7511 17.5511C19.0748 17.2275 19.3312 16.8431 19.5057 16.42C19.6802 15.9969 19.7693 15.5434 19.7679 15.0857V12.6107C19.7638 12.8316 19.822 13.0492 19.9356 13.2387C20.0493 13.4281 20.2139 13.5818 20.4107 13.6822L23.8929 15.4179C24.0723 15.5094 24.2726 15.5525 24.4738 15.5428C24.6751 15.5332 24.8703 15.4712 25.0402 15.363C25.2102 15.2548 25.3489 15.1041 25.4427 14.9258C25.5365 14.7475 25.5821 14.5478 25.575 14.3464V4.1786C25.579 3.97835 25.5313 3.78044 25.4367 3.60391C25.3421 3.42738 25.2037 3.27813 25.0348 3.17054C24.8659 3.06294 24.6721 3.00063 24.4721 2.98952C24.2721 2.97842 24.0727 3.01893 23.8929 3.10717L20.4107 4.8536C20.2139 4.95399 20.0493 5.10767 19.9356 5.29711C19.822 5.48656 19.7638 5.70414 19.7679 5.92503V3.46076C19.7622 2.54096 19.3928 1.66071 18.7404 1.01231C18.088 0.363911 17.2056 -1.74163e-05 16.2857 6.25115e-10H3.48216Z", fill: t }), (0, i.jsx)("path", { d: "M23.85 3.16075L20.3679 4.90718C20.1711 5.00757 20.0065 5.16125 19.8928 5.35069C19.7791 5.54014 19.721 5.75772 19.7251 5.97861V12.6108C19.721 12.8316 19.7791 13.0492 19.8928 13.2387C20.0065 13.4281 20.1711 13.5818 20.3679 13.6822L23.85 15.4179C24.0295 15.5094 24.2298 15.5525 24.431 15.5429C24.6323 15.5332 24.8275 15.4713 24.9974 15.363C25.1673 15.2548 25.3061 15.1041 25.3998 14.9258C25.4936 14.7475 25.5393 14.5478 25.5322 14.3465V4.17862C25.5271 3.98292 25.4729 3.79164 25.3745 3.62237C25.2762 3.4531 25.1368 3.31128 24.9693 3.20993C24.8018 3.10858 24.6115 3.05097 24.416 3.04239C24.2204 3.0338 24.0258 3.07447 23.85 3.16075Z", fill: "url(#paint0_linear_2245_133669)" }), (0, i.jsx)("defs", { children: (0, i.jsxs)("linearGradient", { id: "paint0_linear_2245_133669", x1: "22.6286", y1: "15.5357", x2: "22.6286", y2: "3.04293", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#5865F0" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#E9459D" })] }) })] }) } }, 185885: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { color: t = "currentColor", ...n } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(n), viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { d: "M16.411 2.73127C16.2521 2.71268 16.0914 2.72983 15.9392 2.78162C15.7871 2.8334 15.6471 2.91867 15.5283 3.03175C15.4096 3.14483 15.3148 3.28319 15.2503 3.43775C15.1857 3.59231 15.1529 3.75957 15.1538 3.92851C15.1676 4.28687 15.3017 4.62834 15.5321 4.89163C15.7625 5.15492 16.0741 5.32282 16.411 5.36522C17.8829 5.58524 19.222 6.38444 20.1606 7.60304C21.0992 8.82164 21.5682 10.3698 21.4736 11.9381C21.5682 13.5063 21.0992 15.0545 20.1606 16.2731C19.222 17.4917 17.8829 18.2909 16.411 18.5109C16.0732 18.551 15.7603 18.7182 15.5295 18.982C15.2986 19.2458 15.1653 19.5885 15.1538 19.9476C15.1529 20.1166 15.1857 20.2838 15.2503 20.4384C15.3148 20.593 15.4096 20.7313 15.5283 20.8444C15.6471 20.9575 15.7871 21.0428 15.9392 21.0945C16.0914 21.1463 16.2521 21.1635 16.411 21.1449C18.5283 20.8519 20.4704 19.7479 21.869 18.0421C23.2677 16.3363 24.0257 14.1473 23.9993 11.8901C24.0035 9.6494 23.2355 7.48376 21.8389 5.79811C20.4423 4.11246 18.5128 3.02227 16.411 2.73127Z", fill: "url(#paint0_linear_2246_138556)" }), (0, i.jsx)("path", { d: "M18.9481 11.9859C18.9454 11.1542 18.6989 10.3438 18.2426 9.66624C17.7862 8.98871 17.1424 8.47741 16.3998 8.20265C16.2448 8.1567 16.0815 8.15157 15.9243 8.18774C15.767 8.22391 15.6205 8.30025 15.4976 8.4101C15.3746 8.51996 15.2791 8.66 15.2192 8.81793C15.1593 8.97586 15.1369 9.14689 15.1539 9.31607C15.1539 10.0584 15.8448 10.645 16.2186 11.2676C16.3504 11.4814 16.4211 11.7307 16.4224 11.9859C16.4211 12.2411 16.3504 12.4905 16.2186 12.7043C15.8448 13.3269 15.1539 13.9015 15.1539 14.6557C15.1396 14.8242 15.1638 14.9939 15.2246 15.1504C15.2854 15.3068 15.3809 15.4456 15.5031 15.5548C15.6253 15.664 15.7706 15.7405 15.9267 15.7778C16.0827 15.8151 16.245 15.8122 16.3998 15.7692C17.1424 15.4945 17.7862 14.9831 18.2426 14.3056C18.6989 13.628 18.9454 12.8176 18.9481 11.9859Z", fill: "url(#paint1_linear_2246_138556)" }), (0, i.jsx)("path", { d: "M11.8468 0.0973136C11.6166 -0.000323793 11.3645 -0.0251653 11.1212 0.0258473C10.8779 0.0768599 10.6539 0.201516 10.4763 0.38464L5.0513 6.67017H1.26849C0.932067 6.67017 0.60942 6.81147 0.371532 7.06294C0.133645 7.31441 0 7.65545 0 8.01108V16.0087C0 16.3643 0.133645 16.7054 0.371532 16.9569C0.60942 17.2083 0.932067 17.3496 1.26849 17.3496H5.0513L10.5216 23.6112C10.6976 23.797 10.9217 23.9235 11.1656 23.9746C11.4096 24.0257 11.6624 23.9993 11.8921 23.8985C12.1183 23.8009 12.3127 23.6356 12.4515 23.423C12.5903 23.2103 12.6675 22.9595 12.6735 22.7013V1.29456C12.6638 1.03076 12.58 0.776026 12.4327 0.562795C12.2855 0.349563 12.0815 0.187493 11.8468 0.0973136Z", fill: t }), (0, i.jsxs)("defs", { children: [(0, i.jsxs)("linearGradient", { id: "paint0_linear_2246_138556", x1: "20.4504", y1: "22.2118", x2: "13.5979", y2: "3.54591", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#4197F0" }), (0, i.jsx)("stop", { offset: "0.17", "stop-color": "#46AFD2" }), (0, i.jsx)("stop", { offset: "0.4", "stop-color": "#4CCBB0" }), (0, i.jsx)("stop", { offset: "0.63", "stop-color": "#51DF98" }), (0, i.jsx)("stop", { offset: "0.83", "stop-color": "#54EB8A" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#55F085" })] }), (0, i.jsxs)("linearGradient", { id: "paint1_linear_2246_138556", x1: "17.4234", y1: "16.2431", x2: "14.659", y2: "8.44127", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#4197F0" }), (0, i.jsx)("stop", { offset: "0.17", "stop-color": "#46AFD2" }), (0, i.jsx)("stop", { offset: "0.4", "stop-color": "#4CCBB0" }), (0, i.jsx)("stop", { offset: "0.63", "stop-color": "#51DF98" }), (0, i.jsx)("stop", { offset: "0.83", "stop-color": "#54EB8A" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#55F085" })] })] })] }) } }, 906605: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearHangStatus: function() { return _ }, updateCustomHangStatus: function() { return d }, updateHangStatus: function() { return u } }); var i = n("570140"), r = n("592125"), s = n("19780"), a = n("944486"), o = n("626135"), l = n("981631"); function u(e, t) { var n; if (null == e) { _(t); return } i.default.dispatch({ type: "UPDATE_HANG_STATUS", status: e, saveAsDefault: t }), o.default.track(l.AnalyticEvents.SET_HANG_STATUS, { status_type: e, channel_id: a.default.getVoiceChannelId(), guild_id: null === (n = r.default.getChannel(a.default.getVoiceChannelId())) || void 0 === n ? void 0 : n.guild_id, media_session_id: s.default.getMediaSessionId() }) } function d(e, t, n) { var u; if ("" === e || null == t) { _(n); return } i.default.dispatch({ type: "UPDATE_HANG_STATUS_CUSTOM", emoji: t, status: e, saveAsDefault: n }), o.default.track(l.AnalyticEvents.SET_HANG_STATUS, { status_type: e, channel_id: a.default.getVoiceChannelId(), guild_id: null === (u = r.default.getChannel(a.default.getVoiceChannelId())) || void 0 === u ? void 0 : u.guild_id, media_session_id: s.default.getMediaSessionId() }) } function _(e) { var t; i.default.dispatch({ type: "CLEAR_HANG_STATUS", saveAsDefault: e }), o.default.track(l.AnalyticEvents.CLEAR_HANG_STATUS, { channel_id: a.default.getVoiceChannelId(), guild_id: null === (t = r.default.getChannel(a.default.getVoiceChannelId())) || void 0 === t ? void 0 : t.guild_id, media_session_id: s.default.getMediaSessionId() }) } }, 574176: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HangStatusExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "guild", id: "2024-04_hang_status_v2", label: "Hang Statuses - V2 experiment", defaultConfig: { enableHangStatus: !1, setDefaultStatus: !1, allowChannelTopic: !1 }, treatments: [{ id: 1, label: "enable hang statuses with no default", config: { enableHangStatus: !0, setDefaultStatus: !1, allowChannelTopic: !1 } }, { id: 2, label: "enable hang statuses with default", config: { enableHangStatus: !0, setDefaultStatus: !0, allowChannelTopic: !1 } }, { id: 3, label: "enable hang statuses with channel topic", config: { enableHangStatus: !0, setDefaultStatus: !1, allowChannelTopic: !0 } }] }) }, 500272: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("362721"), s = n("314897"), a = n("592125"), o = n("979651"), l = n("906605"), u = n("574176"), d = n("106301"), _ = n("981631"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class E extends i.default { constructor(...e) { super(...e), c(this, "previousVoiceChannelId", void 0), c(this, "actions", { VOICE_CHANNEL_SELECT: e => this.handleVoiceChannelSelect(e), GUILD_MEMBER_UPDATE: e => this.handleGuildMemberUpdate(e), LOGOUT: () => this.handleLogout() }), c(this, "handleVoiceChannelSelect", e => { let { channelId: t, guildId: n } = e, { enableHangStatus: i, setDefaultStatus: s } = u.HangStatusExperiment.getCurrentConfig({ guildId: null != n ? n : _.EMPTY_STRING_SNOWFLAKE_ID, location: "HangStatusManager" }, { autoTrackExposure: !0 }); if (null == n && null == t) { this.handleDisconnectFromVoiceChannel(), this.previousVoiceChannelId = t; return } if (!i || t === this.previousVoiceChannelId) return; if (this.previousVoiceChannelId = t, null == n || null == t) return; let o = a.default.getChannel(t); if (null == o || o.type !== _.ChannelTypes.GUILD_VOICE || !(0, r.canSetVoiceChannelStatus)(o, !0) || null != d.default.getCurrentHangStatus()) return; let c = d.default.getCurrentDefaultStatus(); if ((null == c ? void 0 : c.expiresAt) != null && (null == c ? void 0 : c.expiresAt) >= Date.now()) { if (c.status === _.HangStatusTypes.CUSTOM && null != c.customHangStatus) { let { status: e, emoji: t } = c.customHangStatus; (0, l.updateCustomHangStatus)(e, t); return } if (null == c.status) return; else { (0, l.updateHangStatus)(c.status); return } } s && (0, l.updateHangStatus)(_.HangStatusTypes.CHILLING) }), c(this, "handleGuildMemberUpdate", e => { let { user: t, guildId: n } = e; if (t.id !== s.default.getId()) return; let i = o.default.getCurrentClientVoiceChannelId(n); if (null == i || null == d.default.getCurrentHangStatus()) return; let u = a.default.getChannel(i); !(0, r.canSetVoiceChannelStatus)(u, !0) && (0, l.clearHangStatus)() }), c(this, "handleDisconnectFromVoiceChannel", () => { (0, l.clearHangStatus)() }), c(this, "handleLogout", () => { this.handleDisconnectFromVoiceChannel() }) } } t.default = new E }, 106301: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n("47120"); var a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("981631"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = I(); function I() { return { recentCustomStatuses: [], currentDefaultStatus: null } } class T extends(a = u.default.PersistedStore) { initialize(e) { E = { ...I(), ...null != e ? e : {} } } getState() { return E } getCurrentHangStatus() { return i } getCustomHangStatus() { return r } getRecentCustomStatuses() { return E.recentCustomStatuses } getCurrentDefaultStatus() { return E.currentDefaultStatus } getHangStatusActivity() { return null == i ? null : s } } c(T, "displayName", "HangStatusStore"), c(T, "persistKey", "HangStatusStore"), t.default = new T(d.default, { LOGOUT: function() { E = I() }, UPDATE_HANG_STATUS: function(e) { let { status: t, saveAsDefault: n } = e; i = t, r = null, n && (E.currentDefaultStatus = { status: t, customHangStatus: r, expiresAt: Date.now() + 288e5 }), s = { type: _.ActivityTypes.HANG_STATUS, name: "Hang Status", state: i } }, UPDATE_HANG_STATUS_CUSTOM: function(e) { let { status: t, emoji: n, saveAsDefault: a } = e; i = _.HangStatusTypes.CUSTOM, r = { status: t, emoji: n }; let o = [...E.recentCustomStatuses], u = o.findIndex(e => e.status === t && l().isEqual(e.emoji, n)); - 1 !== u ? o.splice(u, 1) : 7 === o.length && o.splice(6, 1), E.recentCustomStatuses = [r, ...o], a && (E.currentDefaultStatus = { status: i, customHangStatus: r, expiresAt: Date.now() + 288e5 }), s = { type: _.ActivityTypes.HANG_STATUS, name: "Hang Status", state: i, details: t, emoji: n } }, CLEAR_HANG_STATUS: function(e) { let { saveAsDefault: t } = e; i = null, r = null, t && (E.currentDefaultStatus = { status: null, customHangStatus: null, expiresAt: Date.now() + 288e5 }), s = null } }) }, 833858: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getHangStatusDetails: function() { return E }, getHangStatusOptions: function() { return c }, getHangStatusText: function() { return I } }); var i = n("981631"), r = n("689938"), s = n("337258"), a = n("705196"), o = n("190878"), l = n("991254"), u = n("485686"), d = n("400976"), _ = n("443909"); let c = () => ({ [i.HangStatusTypes.CHILLING]: { title: r.default.Messages.STATUS_CHILLING, icon: a, color: "#567C7E" }, [i.HangStatusTypes.GAMING]: { title: r.default.Messages.STATUS_GAMING, icon: o, color: "#685F8C" }, [i.HangStatusTypes.FOCUSING]: { title: r.default.Messages.STATUS_FOCUSING, icon: u, color: "#7F6956" }, [i.HangStatusTypes.BRB]: { title: r.default.Messages.STATUS_BRB, icon: s, color: "#76567E" }, [i.HangStatusTypes.EATING]: { title: r.default.Messages.STATUS_EATING, icon: l, color: "#717B54" }, [i.HangStatusTypes.IN_TRANSIT]: { title: r.default.Messages.STATUS_IN_TRANSIT, icon: d, color: "#56697F" }, [i.HangStatusTypes.WATCHING]: { title: r.default.Messages.STATUS_WATCHING, icon: _, color: "#7C5571" } }), E = e => { if ((null == e ? void 0 : e.type) !== i.ActivityTypes.HANG_STATUS || (null == e ? void 0 : e.state) == null) return null; let t = e.state; return t === i.HangStatusTypes.CUSTOM ? null : c()[t] }, I = e => { var t; return ((null == e ? void 0 : e.state) != null ? e.state : null) === i.HangStatusTypes.CUSTOM ? null == e ? void 0 : e.details : null === (t = E(e)) || void 0 === t ? void 0 : t.title } }, 223135: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("788307"), s = n("833858"), a = n("981631"); t.default = e => { var t; let { className: n, hangStatusActivity: o, animate: l = !0 } = e; if ((null == o ? void 0 : o.state) === a.HangStatusTypes.CUSTOM) return null != o.emoji ? (0, i.jsx)(r.ActivityEmoji, { emoji: o.emoji, className: n, hideTooltip: !0, animate: l }) : null; let u = null === (t = (0, s.getHangStatusDetails)(o)) || void 0 === t ? void 0 : t.icon; return null != u ? (0, i.jsx)("img", { src: u, alt: "", className: null != n ? n : void 0 }) : null } }, 473241: function(e, t, n) { "use strict"; n.r(t), n("570140") }, 697492: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearCompletedHighFive: function() { return l }, completeHighFive: function() { return o }, queueHighFive: function() { return r }, removeHighFive: function() { return s }, setHighFiveEnabled: function() { return a } }); var i = n("570140"); function r(e, t, n) { i.default.dispatch({ type: "HIGH_FIVE_QUEUE", userId: t, channelId: n, emoji: e }) } function s(e, t) { i.default.dispatch({ type: "HIGH_FIVE_REMOVE", channelId: t, userId: e }) } function a(e) { i.default.dispatch({ type: "HIGH_FIVE_SET_ENABLED", enabled: e }) } function o(e, t, n, r) { i.default.dispatch({ type: "HIGH_FIVE_COMPLETE", waitingUserId: e, completingUserId: t, channelId: n, completingEmoji: r }) } function l(e, t, n) { i.default.dispatch({ type: "HIGH_FIVE_COMPLETE_CLEAR", firstUserId: e, secondUserId: t, channelId: n }) } }, 379082: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HIGH_FIVE_EMOJIS: function() { return i } }), n("47120"); let i = new Set(["\uD83D\uDD90", "✋"]) }, 37091: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = { enabled: !1 }, d = {}, _ = {}, c = !1; class E extends(a = o.default.DeviceSettingsStore) { initialize() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : u; c = e.enabled } getWaitingHighFive(e, t) { var n; return null === (n = d[e]) || void 0 === n ? void 0 : n[t] } getCompletedHighFive(e, t) { var n; return null === (n = _[e]) || void 0 === n ? void 0 : n[t] } getEnabled() { return c } getUserAgnosticState() { return { enabled: c } } } s = "HighFiveStore", (r = "persistKey") in(i = E) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new E(l.default, { HIGH_FIVE_QUEUE: function(e) { let { userId: t, channelId: n, emoji: i } = e; d[n] = { ...d[n], [t]: i } }, HIGH_FIVE_REMOVE: function(e) { let { userId: t, channelId: n } = e, i = d[n]; if (null == i) return !1; delete i[t] }, HIGH_FIVE_SET_ENABLED: function(e) { let { enabled: t } = e; c = t }, HIGH_FIVE_COMPLETE: function(e) { var t; let { completingEmoji: n, completingUserId: i, waitingUserId: r, channelId: s } = e, a = null !== (t = d[s]) && void 0 !== t ? t : {}, o = a[r]; if (delete a[r], null == o) return !1; _[s] = { ..._[s], [r]: [o, n], [i]: [n, o] } }, HIGH_FIVE_COMPLETE_CLEAR: function(e) { var t; let { firstUserId: n, secondUserId: i, channelId: r } = e, s = null !== (t = _[r]) && void 0 !== t ? t : {}; delete s[n], delete s[i] } }) }, 721264: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("757143"); var i = n("379082"); let r = /🏻|🏼|🏽|🏾|🏿|\uFE0F/g; function s(e) { return i.HIGH_FIVE_EMOJIS.has(e.replace(r, "")) } }, 294270: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("392711"), r = n.n(i), s = n("846519"), a = n("147913"), o = n("314897"), l = n("70956"), u = n("557177"), d = n("697492"), _ = n("37091"), c = n("721264"); let E = 15 * l.default.Millis.SECOND, I = 15 * l.default.Millis.SECOND, T = ["\uD83C\uDDE9", "\uD83C\uDDF4", "\uD83C\uDDF9", "\uD83C\uDDE6"], f = T.length, S = function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return "".concat(e, ":").concat(t, ":").concat(n) }, h = new s.Timeout, A = [], m = {}, N = (0, u.createSound)("highfive_whistle", "highfive_whistle", .6), p = (0, u.createSound)("highfive_clap", "highfive_clap", .6); function O(e) { let { emoji: t, channelId: n, userId: i } = e, a = o.default.getId(), l = _.default.getEnabled(); if (null != t) { if (l && (0, c.default)(t.name)) return function(e, t, n) { var i; let r = S(t, n); if (null != _.default.getWaitingHighFive(n, t)) return; let [a, o] = null !== (i = Object.entries(m).find(e => { let [t] = e; return t !== r })) && void 0 !== i ? i : []; if (null != a && null != o) o.cancel(), p.play(), delete m[a], (0, d.completeHighFive)(a.split(":")[0], t, n, e); else { (0, d.queueHighFive)(e, t, n), N.play(); let i = new s.DelayedCall(I, () => { delete m[t], (0, d.removeHighFive)(t, n) }); m[t] = i, i.delay() } }(t.name, i, n); i === a && (A = [...A, t.name].slice(-1 * f), r().isEqual(A, T) ? (N.play(), h.stop(), A = [], (0, d.setHighFiveEnabled)(!l)) : h.start(E, () => A = [])) } } function C(e) { let { completingUserId: t, waitingUserId: n, channelId: i } = e, r = S("".concat(t).concat(n), i, !0); m[r] = new s.DelayedCall(550, () => { delete m[r], (0, d.clearCompletedHighFive)(t, n, i) }), m[r].delay() } class R extends a.default { _terminate() { Object.values(m).forEach(e => e.cancel()), m = {} } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { VOICE_CHANNEL_EFFECT_SEND: O, HIGH_FIVE_COMPLETE: C }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new R }, 318217: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-12_2023_eoy_ringtone", label: "EOY Ringtone 2023", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); t.default = i }, 378364: function(e, t, n) { "use strict"; n.r(t); var i = n("318217"), r = n("689938"), s = n("586393"), a = n("464912"); let o = { experiment: i.default, startTimeMs: 17025768e5, endTimeMs: 17042184e5, isDesktopOnly: !0, ringtone: "call_ringing_snowsgiving", getRingtoneSettingsLabel: () => r.default.Messages.SOUND_INCOMING_RING_EOY_2023 + " ❄️", appSpinnerSources: { webmDark: s, webmLight: a }, getLoadingTips: () => [] }; t.default = o }, 197344: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("442837"), r = n("292556"), s = n("695346"), a = n("292959"), o = n("626135"), l = n("378364"), u = n("981631"), d = n("689938"); function _() { return I() && l.default.experiment.getCurrentConfig({ location: "holiday_events_is_eligible" }, { autoTrackExposure: !1 }).enabled } function c() { let { enabled: e } = l.default.experiment.useExperiment({ location: "holiday_events_use_eligible" }, { autoTrackExposure: !1 }); return I() && e } function E() { return null != l.default.ringtone && null != l.default.getRingtoneSettingsLabel } function I() { let e = Date.now(); return e >= l.default.startTimeMs && e <= l.default.endTimeMs } t.default = { subscribe: function(e) { return l.default.experiment.subscribe({ location: "holiday_events_subscribe" }, e) }, isEligible: _, isRingtoneDisabled: function() { return null == l.default.ringtone || a.default.isSoundDisabled(l.default.ringtone) }, isRingtoneEligible: function() { return _() && E() }, onRingtoneSettingValueChange: function(e) { let t = a.default.getDisabledSounds(); if (null == l.default.ringtone) return; let n = t.filter(e => e !== l.default.ringtone); !e && n.push(l.default.ringtone), r.default.setDisabledSounds(n), o.default.track(u.AnalyticEvents.EVENT_RINGTONE_TOGGLED, { toggled_on: e, sound_name: l.default.ringtone }) }, useIsEligible: c, useIsRingtoneDisabled: function() { return (0, i.useStateFromStores)([a.default], () => null == l.default.ringtone || a.default.isSoundDisabled(l.default.ringtone)) }, useIsRingtoneEligible: function() { return c() && E() }, useRingtoneSettingDescription: function() { return s.NativePhoneIntegrationEnabled.useSetting() ? void 0 : d.default.Messages.ENABLE_PHONE_INTEGRATION }, useRingtoneSettingValue: function() { let e = (0, i.useStateFromStores)([a.default], () => a.default.getDisabledSounds()), t = s.NativePhoneIntegrationEnabled.useSetting(); return null != l.default.ringtone && t && !e.includes(l.default.ringtone) }, getAppSpinnerSources: function() { return I() ? l.default.appSpinnerSources : null }, getLoadingTips: function() { var e; return I() ? null === (e = l.default.getLoadingTips) || void 0 === e ? void 0 : e.call(l.default) : null } } }, 190378: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { HotspotLocations: function() { return i } }), (r = i || (i = {})).REPORT_PROBLEM_POST_STREAM = "REPORT_PROBLEM_POST_STREAM", r.VIDEO_BACKGROUND_FEEDBACK = "VIDEO_BACKGROUND_FEEDBACK", r.VOICE_CALL_FEEDBACK = "VOICE_CALL_FEEDBACK", r.GUILD_ANALYTICS_GUILD_SETTINGS_MENU = "GUILD_ANALYTICS_GUILD_SETTINGS_MENU", r.NOW_PLAYING_CONSENT_CARD = "NOW_PLAYING_CONSENT_CARD", r.IOS_GUILD_NAV_EDUCATION = "IOS_GUILD_NAV_EDUCATION", r.VOICE_PANEL_INTRODUCTION = "VOICE_PANEL_INTRODUCTION", r.GUILD_SETTINGS_COMMUNITY_GUILD_UPSELL = "GUILD_SETTINGS_COMMUNITY_GUILD_UPSELL", r.FAVORITE_EMOJI_TOOLTIP = "FAVORITE_EMOJI_TOOLTIP", r.POST_ACTIVITY_FEEDBACK = "POST_ACTIVITY_FEEDBACK", r.GUILD_DELETE_FEEDBACK = "GUILD_DELETE_FEEDBACK", r.GUILD_LEAVE_FEEDBACK = "GUILD_LEAVE_FEEDBACK", r.APPLICATION_COMMAND_TOOLTIP = "APPLICATION_COMMAND_TOOLTIP", r.GUILD_CAP_INLINE_UPSELL = "GUILD_CAP_INLINE_UPSELL", r.STAGE_CHANNEL_UPSELL = "STAGE_CHANNEL_UPSELL", r.HUB_WAITLIST_UPSELL = "HUB_WAITLIST_UPSELL", r.HUB_NEW = "HUB_NEW", r.HUB_SECOND_EMAIL_CONNECTION_UPSELL = "HUB_SECOND_EMAIL_CONNECTION_UPSELL", r.LIVE_STAGE_NOTIFICATION_BADGE = "LIVE_STAGE_NOTIFICATION_BADGE", r.GUILD_EVENT_UPSELL = "GUILD_EVENT_UPSELL", r.HUB_LINK_CHANNEL_NOTICE = "HUB_LINK_CHANNEL_NOTICE", r.PREMIUM_PROGRESS_BAR_GUILD_HEADER_TOOLTIP = "PREMIUM_PROGRESS_BAR_GUILD_HEADER_TOOLTIP", r.ANIMATED_GUILD_BANNER_GUILD_HEADER_TOOLTIP = "ANIMATED_GUILD_BANNER_GUILD_HEADER_TOOLTIP", r.ANIMATED_GUILD_BANNER_SETTINGS_NEW_PILL = "ANIMATED_GUILD_BANNER_SETTINGS_NEW_PILL", r.MULTI_ACCOUNT_TOOLTIP = "MULTI_ACCOUNT_TOOLTIP", r.HUB_STUDY_ROOM_NOTICE = "HUB_STUDY_ROOM_NOTICE", r.CHANNEL_BANNER_MEMBER_LIST_NOTICE = "CHANNEL_BANNER_MEMBER_LIST_NOTICE", r.CHANGE_LANGUAGE_MODAL = "CHANGE_LANGUAGE_MODAL", r.ACTIVITY_BEB_TUTORIAL = "ACTIVITY_BEB_TUTORIAL", r.APP_DIRECTORY_SETTINGS_NEW_PILL = "APP_DIRECTORY_SETTINGS_NEW_PILL", r.INVITE_SPLASH_GUILD_HEADER_TOOLTIP = "INVITE_SPLASH_GUILD_HEADER_TOOLTIP", r.ANIMATED_VIDEO_BG_CAPERNITE_DAY_NEW = "ANIMATED_VIDEO_BG_CAPERNITE_DAY_NEW", r.ANIMATED_VIDEO_BG_CAPERNITE_NIGHT_NEW = "ANIMATED_VIDEO_BG_CAPERNITE_NIGHT_NEW", r.ANIMATED_VIDEO_BG_HACKER_DEN_NEW = "ANIMATED_VIDEO_BG_HACKER_DEN_NEW", r.ANIMATED_VIDEO_BG_WUMPICE_NEW = "ANIMATED_VIDEO_BG_WUMPICE_NEW", r.ANIMATED_VIDEO_BG_CUSTOM_TOOLTIP_NEW = "ANIMATED_VIDEO_BG_CUSTOM_TOOLTIP_NEW", r.ANIMATED_VIDEO_BG_BIRTHDAY_1_NEW = "ANIMATED_VIDEO_BG_BIRTHDAY_1_NEW", r.SOUNDBOARD_WHEEL_EDUCATION_MODAL = "SOUNDBOARD_WHEEL_EDUCATION_MODAL", r.IN_APP_REPORTS_FEEDBACK = "IN_APP_REPORTS_FEEDBACK", r.CLIPS_CHANNEL_ATTACH_REMINDER = "CLIPS_CHANNEL_ATTACH_REMINDER" }, 142497: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearHotspotOverride: function() { return l }, hideHotspot: function() { return a }, setHotspotOverride: function() { return o } }); var i = n("570140"), r = n("626135"), s = n("981631"); function a(e) { r.default.track(s.AnalyticEvents.HOTSPOT_HIDDEN, { hotspot_location: e }), i.default.wait(() => { i.default.dispatch({ type: "HOTSPOT_HIDE", location: e }) }) } function o(e, t) { i.default.dispatch({ type: "HOTSPOT_OVERRIDE_SET", location: e, enabled: t }) } function l(e) { i.default.dispatch({ type: "HOTSPOT_OVERRIDE_CLEAR", location: e }) } }, 810788: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("374023"), o = n("188785"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = new Set, d = {}; class _ extends(i = r.default.PersistedStore) { initialize(e) { null != e && (Array.isArray(e.hiddenHotspots) && (u = new Set(e.hiddenHotspots)), null != e.hotspotOverrides && (d = e.hotspotOverrides)) } hasHotspot(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = !t && d[e]; return !(o.CONFERENCE_MODE_ENABLED || a.ProcessArgs.isDisallowPopupsSet()) && (n || !u.has(e)) } hasHiddenHotspot(e) { return u.has(e) } getHotspotOverride(e) { return d[e] } getState() { return { hiddenHotspots: u, hotspotOverrides: d } } } l(_, "displayName", "HotspotStore"), l(_, "persistKey", "hotspots"), l(_, "migrations", [e => ({ hiddenHotspots: null != e ? e : [], hotspotOverrides: {} })]), t.default = new _(s.default, { OVERLAY_INITIALIZE: function(e) { let { hiddenHotspots: t } = e; u = new Set(t) }, HOTSPOT_HIDE: function(e) { let { location: t } = e; if (u.has(t)) return !1; u.add(t) }, HOTSPOT_OVERRIDE_SET: function(e) { let { location: t, enabled: n } = e; d[t] = n }, HOTSPOT_OVERRIDE_CLEAR: function(e) { let { location: t } = e; if (null == d[t]) return !1; delete d[t] } }) }, 536442: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HotspotStore: function() { return s.default } }); var i = n("190378"); n.es(i, t); var r = n("142497"); n.es(r, t); var s = n("810788") }, 82085: function(e, t, n) { "use strict"; n.r(t); var i = n("703656"), r = n("981631"); t.default = { onOpenHubInvite(e) { let { guild: t } = e; null != t && (0, i.transitionTo)(r.Routes.GUILD_MEMBER_VERIFICATION_FOR_HUB(t.id, e.code)) } } }, 503856: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isRTCConnectedInHub: function() { return l }, useConnectedInCurrentHub: function() { return u } }); var i = n("442837"), r = n("592125"), s = n("430824"), a = n("944486"), o = n("981631"); let l = () => { let e = a.default.getVoiceChannelId(); if (null == e) return !1; let t = r.default.getChannel(e); if (null == t) return !1; let n = s.default.getGuild(t.getGuildId()); return null != n && n.hasFeature(o.GuildFeatures.HUB) }, u = e => (0, i.useStateFromStores)([a.default, r.default, s.default], () => { let t = a.default.getVoiceChannelId(); if (null == t) return !1; let n = r.default.getChannel(t); if (null == n) return !1; let i = s.default.getGuild(n.getGuildId()); return null != i && i.id === e }) }, 133080: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getCountryCodeByAlpha2: function() { return o }, getDefaultCountryCode: function() { return l }, getI18NCountryName: function() { return d } }); var i = n("512722"), r = n.n(i), s = n("217986"), a = n("689938"); function o(e) { let t = s.default.find(t => t.alpha2 === e); if (null != t) return { name: t.name, code: t.phoneCountryCode, alpha2: t.alpha2 } } function l() { let e = function(e) { let t = s.default.find(t => t.name === e); if (null != t) return { name: t.name, code: t.phoneCountryCode, alpha2: t.alpha2 } }("United States"); return r()(e, "Default country code cannot be missing."), e } let u = { AF: () => a.default.Messages.COUNTRY_NAME_AF, AX: () => a.default.Messages.COUNTRY_NAME_AX, AL: () => a.default.Messages.COUNTRY_NAME_AL, DZ: () => a.default.Messages.COUNTRY_NAME_DZ, AS: () => a.default.Messages.COUNTRY_NAME_AS, AD: () => a.default.Messages.COUNTRY_NAME_AD, AO: () => a.default.Messages.COUNTRY_NAME_AO, AI: () => a.default.Messages.COUNTRY_NAME_AI, AQ: () => a.default.Messages.COUNTRY_NAME_AQ, AG: () => a.default.Messages.COUNTRY_NAME_AG, AR: () => a.default.Messages.COUNTRY_NAME_AR, AM: () => a.default.Messages.COUNTRY_NAME_AM, AW: () => a.default.Messages.COUNTRY_NAME_AW, AC: () => a.default.Messages.COUNTRY_NAME_AC, AU: () => a.default.Messages.COUNTRY_NAME_AU, AT: () => a.default.Messages.COUNTRY_NAME_AT, AZ: () => a.default.Messages.COUNTRY_NAME_AZ, BS: () => a.default.Messages.COUNTRY_NAME_BS, BH: () => a.default.Messages.COUNTRY_NAME_BH, BD: () => a.default.Messages.COUNTRY_NAME_BD, BB: () => a.default.Messages.COUNTRY_NAME_BB, BY: () => a.default.Messages.COUNTRY_NAME_BY, BE: () => a.default.Messages.COUNTRY_NAME_BE, BZ: () => a.default.Messages.COUNTRY_NAME_BZ, BJ: () => a.default.Messages.COUNTRY_NAME_BJ, BM: () => a.default.Messages.COUNTRY_NAME_BM, BT: () => a.default.Messages.COUNTRY_NAME_BT, BO: () => a.default.Messages.COUNTRY_NAME_BO, BQ: () => a.default.Messages.COUNTRY_NAME_BQ, BA: () => a.default.Messages.COUNTRY_NAME_BA, BW: () => a.default.Messages.COUNTRY_NAME_BW, BV: () => a.default.Messages.COUNTRY_NAME_BV, BR: () => a.default.Messages.COUNTRY_NAME_BR, IO: () => a.default.Messages.COUNTRY_NAME_IO, BN: () => a.default.Messages.COUNTRY_NAME_BN, BG: () => a.default.Messages.COUNTRY_NAME_BG, BF: () => a.default.Messages.COUNTRY_NAME_BF, BI: () => a.default.Messages.COUNTRY_NAME_BI, KH: () => a.default.Messages.COUNTRY_NAME_KH, CM: () => a.default.Messages.COUNTRY_NAME_CM, CA: () => a.default.Messages.COUNTRY_NAME_CA, CV: () => a.default.Messages.COUNTRY_NAME_CV, KY: () => a.default.Messages.COUNTRY_NAME_KY, CF: () => a.default.Messages.COUNTRY_NAME_CF, TD: () => a.default.Messages.COUNTRY_NAME_TD, CL: () => a.default.Messages.COUNTRY_NAME_CL, CN: () => a.default.Messages.COUNTRY_NAME_CN, CX: () => a.default.Messages.COUNTRY_NAME_CX, CC: () => a.default.Messages.COUNTRY_NAME_CC, CO: () => a.default.Messages.COUNTRY_NAME_CO, KM: () => a.default.Messages.COUNTRY_NAME_KM, CG: () => a.default.Messages.COUNTRY_NAME_CG, CD: () => a.default.Messages.COUNTRY_NAME_CD, CK: () => a.default.Messages.COUNTRY_NAME_CK, CR: () => a.default.Messages.COUNTRY_NAME_CR, CI: () => a.default.Messages.COUNTRY_NAME_CI, HR: () => a.default.Messages.COUNTRY_NAME_HR, CU: () => a.default.Messages.COUNTRY_NAME_CU, CW: () => a.default.Messages.COUNTRY_NAME_CW, CY: () => a.default.Messages.COUNTRY_NAME_CY, CZ: () => a.default.Messages.COUNTRY_NAME_CZ, DK: () => a.default.Messages.COUNTRY_NAME_DK, DG: () => a.default.Messages.COUNTRY_NAME_DG, DJ: () => a.default.Messages.COUNTRY_NAME_DJ, DM: () => a.default.Messages.COUNTRY_NAME_DM, DO: () => a.default.Messages.COUNTRY_NAME_DO, TP: () => a.default.Messages.COUNTRY_NAME_TP, EC: () => a.default.Messages.COUNTRY_NAME_EC, EG: () => a.default.Messages.COUNTRY_NAME_EG, SV: () => a.default.Messages.COUNTRY_NAME_SV, GQ: () => a.default.Messages.COUNTRY_NAME_GQ, ER: () => a.default.Messages.COUNTRY_NAME_ER, EE: () => a.default.Messages.COUNTRY_NAME_EE, ET: () => a.default.Messages.COUNTRY_NAME_ET, FK: () => a.default.Messages.COUNTRY_NAME_FK, FO: () => a.default.Messages.COUNTRY_NAME_FO, FJ: () => a.default.Messages.COUNTRY_NAME_FJ, FI: () => a.default.Messages.COUNTRY_NAME_FI, FR: () => a.default.Messages.COUNTRY_NAME_FR, GF: () => a.default.Messages.COUNTRY_NAME_GF, PF: () => a.default.Messages.COUNTRY_NAME_PF, TF: () => a.default.Messages.COUNTRY_NAME_TF, GA: () => a.default.Messages.COUNTRY_NAME_GA, GM: () => a.default.Messages.COUNTRY_NAME_GM, GE: () => a.default.Messages.COUNTRY_NAME_GE, DE: () => a.default.Messages.COUNTRY_NAME_DE, GH: () => a.default.Messages.COUNTRY_NAME_GH, GI: () => a.default.Messages.COUNTRY_NAME_GI, GR: () => a.default.Messages.COUNTRY_NAME_GR, GL: () => a.default.Messages.COUNTRY_NAME_GL, GD: () => a.default.Messages.COUNTRY_NAME_GD, GP: () => a.default.Messages.COUNTRY_NAME_GP, GU: () => a.default.Messages.COUNTRY_NAME_GU, GT: () => a.default.Messages.COUNTRY_NAME_GT, GG: () => a.default.Messages.COUNTRY_NAME_GG, GN: () => a.default.Messages.COUNTRY_NAME_GN, GW: () => a.default.Messages.COUNTRY_NAME_GW, GY: () => a.default.Messages.COUNTRY_NAME_GY, HT: () => a.default.Messages.COUNTRY_NAME_HT, HM: () => a.default.Messages.COUNTRY_NAME_HM, VA: () => a.default.Messages.COUNTRY_NAME_VA, HN: () => a.default.Messages.COUNTRY_NAME_HN, HK: () => a.default.Messages.COUNTRY_NAME_HK, HU: () => a.default.Messages.COUNTRY_NAME_HU, IS: () => a.default.Messages.COUNTRY_NAME_IS, IN: () => a.default.Messages.COUNTRY_NAME_IN, ID: () => a.default.Messages.COUNTRY_NAME_ID, IR: () => a.default.Messages.COUNTRY_NAME_IR, IQ: () => a.default.Messages.COUNTRY_NAME_IQ, IE: () => a.default.Messages.COUNTRY_NAME_IE, IM: () => a.default.Messages.COUNTRY_NAME_IM, IL: () => a.default.Messages.COUNTRY_NAME_IL, IT: () => a.default.Messages.COUNTRY_NAME_IT, JM: () => a.default.Messages.COUNTRY_NAME_JM, JP: () => a.default.Messages.COUNTRY_NAME_JP, JE: () => a.default.Messages.COUNTRY_NAME_JE, JO: () => a.default.Messages.COUNTRY_NAME_JO, KZ: () => a.default.Messages.COUNTRY_NAME_KZ, KE: () => a.default.Messages.COUNTRY_NAME_KE, KI: () => a.default.Messages.COUNTRY_NAME_KI, XK: () => a.default.Messages.COUNTRY_NAME_XK, KP: () => a.default.Messages.COUNTRY_NAME_KP, KR: () => a.default.Messages.COUNTRY_NAME_KR, KW: () => a.default.Messages.COUNTRY_NAME_KW, KG: () => a.default.Messages.COUNTRY_NAME_KG, LA: () => a.default.Messages.COUNTRY_NAME_LA, LV: () => a.default.Messages.COUNTRY_NAME_LV, LB: () => a.default.Messages.COUNTRY_NAME_LB, LS: () => a.default.Messages.COUNTRY_NAME_LS, LR: () => a.default.Messages.COUNTRY_NAME_LR, LY: () => a.default.Messages.COUNTRY_NAME_LY, LI: () => a.default.Messages.COUNTRY_NAME_LI, LT: () => a.default.Messages.COUNTRY_NAME_LT, LU: () => a.default.Messages.COUNTRY_NAME_LU, MO: () => a.default.Messages.COUNTRY_NAME_MO, MK: () => a.default.Messages.COUNTRY_NAME_MK, MG: () => a.default.Messages.COUNTRY_NAME_MG, MW: () => a.default.Messages.COUNTRY_NAME_MW, MY: () => a.default.Messages.COUNTRY_NAME_MY, MV: () => a.default.Messages.COUNTRY_NAME_MV, ML: () => a.default.Messages.COUNTRY_NAME_ML, MT: () => a.default.Messages.COUNTRY_NAME_MT, MH: () => a.default.Messages.COUNTRY_NAME_MH, MQ: () => a.default.Messages.COUNTRY_NAME_MQ, MR: () => a.default.Messages.COUNTRY_NAME_MR, MU: () => a.default.Messages.COUNTRY_NAME_MU, YT: () => a.default.Messages.COUNTRY_NAME_YT, MX: () => a.default.Messages.COUNTRY_NAME_MX, FM: () => a.default.Messages.COUNTRY_NAME_FM, MI: () => a.default.Messages.COUNTRY_NAME_MI, MD: () => a.default.Messages.COUNTRY_NAME_MD, MC: () => a.default.Messages.COUNTRY_NAME_MC, MN: () => a.default.Messages.COUNTRY_NAME_MN, ME: () => a.default.Messages.COUNTRY_NAME_ME, MS: () => a.default.Messages.COUNTRY_NAME_MS, MA: () => a.default.Messages.COUNTRY_NAME_MA, MZ: () => a.default.Messages.COUNTRY_NAME_MZ, MM: () => a.default.Messages.COUNTRY_NAME_MM, NA: () => a.default.Messages.COUNTRY_NAME_NA, NR: () => a.default.Messages.COUNTRY_NAME_NR, NP: () => a.default.Messages.COUNTRY_NAME_NP, NL: () => a.default.Messages.COUNTRY_NAME_NL, AN: () => a.default.Messages.COUNTRY_NAME_AN, NC: () => a.default.Messages.COUNTRY_NAME_NC, NZ: () => a.default.Messages.COUNTRY_NAME_NZ, NI: () => a.default.Messages.COUNTRY_NAME_NI, NE: () => a.default.Messages.COUNTRY_NAME_NE, NG: () => a.default.Messages.COUNTRY_NAME_NG, NU: () => a.default.Messages.COUNTRY_NAME_NU, NF: () => a.default.Messages.COUNTRY_NAME_NF, MP: () => a.default.Messages.COUNTRY_NAME_MP, NO: () => a.default.Messages.COUNTRY_NAME_NO, OM: () => a.default.Messages.COUNTRY_NAME_OM, PK: () => a.default.Messages.COUNTRY_NAME_PK, PW: () => a.default.Messages.COUNTRY_NAME_PW, PS: () => a.default.Messages.COUNTRY_NAME_PS, PA: () => a.default.Messages.COUNTRY_NAME_PA, PG: () => a.default.Messages.COUNTRY_NAME_PG, PY: () => a.default.Messages.COUNTRY_NAME_PY, PE: () => a.default.Messages.COUNTRY_NAME_PE, PH: () => a.default.Messages.COUNTRY_NAME_PH, PN: () => a.default.Messages.COUNTRY_NAME_PN, PL: () => a.default.Messages.COUNTRY_NAME_PL, PT: () => a.default.Messages.COUNTRY_NAME_PT, PR: () => a.default.Messages.COUNTRY_NAME_PR, QA: () => a.default.Messages.COUNTRY_NAME_QA, RE: () => a.default.Messages.COUNTRY_NAME_RE, RO: () => a.default.Messages.COUNTRY_NAME_RO, RU: () => a.default.Messages.COUNTRY_NAME_RU, RW: () => a.default.Messages.COUNTRY_NAME_RW, BL: () => a.default.Messages.COUNTRY_NAME_BL, SH: () => a.default.Messages.COUNTRY_NAME_SH, KN: () => a.default.Messages.COUNTRY_NAME_KN, LC: () => a.default.Messages.COUNTRY_NAME_LC, MF: () => a.default.Messages.COUNTRY_NAME_MF, PM: () => a.default.Messages.COUNTRY_NAME_PM, VC: () => a.default.Messages.COUNTRY_NAME_VC, WS: () => a.default.Messages.COUNTRY_NAME_WS, SM: () => a.default.Messages.COUNTRY_NAME_SM, ST: () => a.default.Messages.COUNTRY_NAME_ST, SA: () => a.default.Messages.COUNTRY_NAME_SA, SN: () => a.default.Messages.COUNTRY_NAME_SN, RS: () => a.default.Messages.COUNTRY_NAME_RS, SC: () => a.default.Messages.COUNTRY_NAME_SC, SL: () => a.default.Messages.COUNTRY_NAME_SL, SG: () => a.default.Messages.COUNTRY_NAME_SG, SX: () => a.default.Messages.COUNTRY_NAME_SX, SK: () => a.default.Messages.COUNTRY_NAME_SK, SI: () => a.default.Messages.COUNTRY_NAME_SI, SB: () => a.default.Messages.COUNTRY_NAME_SB, SO: () => a.default.Messages.COUNTRY_NAME_SO, ZA: () => a.default.Messages.COUNTRY_NAME_ZA, GS: () => a.default.Messages.COUNTRY_NAME_GS, SS: () => a.default.Messages.COUNTRY_NAME_SS, ES: () => a.default.Messages.COUNTRY_NAME_ES, LK: () => a.default.Messages.COUNTRY_NAME_LK, SD: () => a.default.Messages.COUNTRY_NAME_SD, SR: () => a.default.Messages.COUNTRY_NAME_SR, SJ: () => a.default.Messages.COUNTRY_NAME_SJ, SZ: () => a.default.Messages.COUNTRY_NAME_SZ, SE: () => a.default.Messages.COUNTRY_NAME_SE, CH: () => a.default.Messages.COUNTRY_NAME_CH, SY: () => a.default.Messages.COUNTRY_NAME_SY, TW: () => a.default.Messages.COUNTRY_NAME_TW, TJ: () => a.default.Messages.COUNTRY_NAME_TJ, TZ: () => a.default.Messages.COUNTRY_NAME_TZ, TH: () => a.default.Messages.COUNTRY_NAME_TH, TL: () => a.default.Messages.COUNTRY_NAME_TL, TG: () => a.default.Messages.COUNTRY_NAME_TG, TK: () => a.default.Messages.COUNTRY_NAME_TK, TO: () => a.default.Messages.COUNTRY_NAME_TO, TT: () => a.default.Messages.COUNTRY_NAME_TT, TN: () => a.default.Messages.COUNTRY_NAME_TN, TR: () => a.default.Messages.COUNTRY_NAME_TR, TM: () => a.default.Messages.COUNTRY_NAME_TM, TC: () => a.default.Messages.COUNTRY_NAME_TC, TV: () => a.default.Messages.COUNTRY_NAME_TV, UG: () => a.default.Messages.COUNTRY_NAME_UG, UA: () => a.default.Messages.COUNTRY_NAME_UA, AE: () => a.default.Messages.COUNTRY_NAME_AE, GB: () => a.default.Messages.COUNTRY_NAME_GB, US: () => a.default.Messages.COUNTRY_NAME_US, UM: () => a.default.Messages.COUNTRY_NAME_UM, UY: () => a.default.Messages.COUNTRY_NAME_UY, UZ: () => a.default.Messages.COUNTRY_NAME_UZ, VU: () => a.default.Messages.COUNTRY_NAME_VU, VE: () => a.default.Messages.COUNTRY_NAME_VE, VN: () => a.default.Messages.COUNTRY_NAME_VN, VG: () => a.default.Messages.COUNTRY_NAME_VG, VI: () => a.default.Messages.COUNTRY_NAME_VI, WF: () => a.default.Messages.COUNTRY_NAME_WF, EH: () => a.default.Messages.COUNTRY_NAME_EH, YE: () => a.default.Messages.COUNTRY_NAME_YE, ZM: () => a.default.Messages.COUNTRY_NAME_ZM, ZW: () => a.default.Messages.COUNTRY_NAME_ZW }; function d(e) { return u[e]() } }, 486324: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BANNER_ASPECT_RATIO: function() { return S }, EDITING_CONTAINER_WIDTH: function() { return l }, GUILD_BANNER_ASPECT_RATIO: function() { return h }, GUILD_BANNER_MAX_HEIGHT: function() { return c }, GUILD_BANNER_MAX_WIDTH: function() { return _ }, HOME_HEADER_ASPECT_RATIO: function() { return m }, HOME_HEADER_MAX_HEIGHT: function() { return f }, HOME_HEADER_MAX_WIDTH: function() { return T }, MAX_BANNER_OVERLAY_HEIGHT: function() { return N }, MAX_GUILD_BANNER_OVERLAY_HEIGHT: function() { return p }, MAX_HOME_HEADER_OVERLAY_HEIGHT: function() { return C }, MAX_SCHEDULED_EVENT_IMAGE_OVERLAY_HEIGHT: function() { return O }, MAX_VIDEO_OVERLAY_HEIGHT: function() { return g }, MessageTypes: function() { return a }, SCHEDULED_EVENT_IMAGE_ASPECT_RATIO: function() { return A }, SCHEDULED_EVENT_IMAGE_MAX_HEIGHT: function() { return I }, SCHEDULED_EVENT_IMAGE_MAX_WIDTH: function() { return E }, USER_BANNER_MAX_HEIGHT: function() { return d }, USER_BANNER_MAX_WIDTH: function() { return u }, UploadTypes: function() { return s }, VIDEO_BACKGROUND_ASPECT_RATIO: function() { return R } }); var i, r, s, a, o = n("678916"); (i = s || (s = {}))[i.AVATAR = 0] = "AVATAR", i[i.BANNER = 1] = "BANNER", i[i.GUILD_BANNER = 2] = "GUILD_BANNER", i[i.VIDEO_BACKGROUND = 3] = "VIDEO_BACKGROUND", i[i.SCHEDULED_EVENT_IMAGE = 4] = "SCHEDULED_EVENT_IMAGE", i[i.HOME_HEADER = 5] = "HOME_HEADER", i[i.AVATAR_DECORATION = 6] = "AVATAR_DECORATION"; let l = 568, u = 2400, d = 848, _ = 2400, c = 1350, E = 2400, I = 960, T = 2400, f = 600, S = 17 / 6, h = 16 / 9, A = 2.5, m = 4, N = 568 / (17 / 6), p = 568 / (16 / 9), O = 227.2, C = 142, R = o.BACKGROUND_REPLACEMENT_SIZE.width / o.BACKGROUND_REPLACEMENT_SIZE.height, g = l / R; (r = a || (a = {}))[r.CROP_GIF_START = 0] = "CROP_GIF_START", r[r.CROP_GIF_COMPLETE = 1] = "CROP_GIF_COMPLETE", r[r.CROP_GIF_ERROR = 2] = "CROP_GIF_ERROR" }, 869783: function(e, t, n) { "use strict"; var i; n.r(t), n.d(t, { FileTypes: function() { return i } }), (i || (i = {})).MP4 = "video/mp4" }, 134432: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getBestMediaProxySize: function() { return h }, getDevicePixelRatio: function() { return d.default }, getImageSrc: function() { return A }, isImageLoaded: function() { return f }, loadImage: function() { return S } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("31775"), a = n.n(s), o = n("664751"), l = n("261470"), u = n("931619"), d = n("921948"), _ = n("981631"); let c = [16, 20, 22, 24, 28, 32, 40, 44, 48, 56, 60, 64, 80, 96, 100, 128, 160, 240, 256, 300, 320, 480, 512, 600, 640, 1024, 1280, 1536, 2048, 3072, 4096], E = new(a())({ max: 1e3 }); function I(e) { let t = new Image; t.onerror = function(e, t) { null == e.backoff && (e.backoff = new l.default); let { backoff: n } = e; return async () => { await u.default.isOnline(), n.fails < 5 ? n.fail(() => { I(e) }) : T(!0, e, t) } }(e, t), t.onload = () => { let { backoff: n } = e; null != n && n.succeed(), T(!1, e, t) }, t.src = e.url } function T(e, t, n) { let { callbacks: i, url: r } = t; if (e) E.del(r); else { let { width: e, height: i } = n; t = { url: r, loaded: !0, width: e, height: i }, E.set(r, t) } null != i && i.forEach(n => n(e, t)) } function f(e) { let t = E.get(e); return null != t && t.loaded } function S(e, t) { let n = E.get(e); if (null != n && n.loaded) return null != t && u.default.awaitOnline().then(() => { null != n && null != n.callbacks && n.callbacks.forEach(t => { null != n ? t(!1, n) : t(!0, { url: e, loaded: !0 }) }) }), _.NOOP; { let i; return null == n && (n = { url: e, loaded: !1 }, E.set(e, n), I(n)), null != t && (i = t.bind(null), null == n.callbacks && (n.callbacks = new Set), n.callbacks.add(i)), () => { null != i && null != n && (null != n.callbacks && n.callbacks.delete(i), null != n.backoff && n.backoff.cancel()) } } } function h(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (n) { let t = c.filter(t => t <= e).pop(); if (null != t && e / t <= 1.25) return t } return null !== (t = c.find(t => e <= t)) && void 0 !== t ? t : c[c.length - 1] } function A(e) { let { src: t, width: n, height: i, maxWidth: s, maxHeight: a, ratio: l = 1, format: u = null, quality: _ = null } = e, c = n, E = i; l < 1 && (c = Math.round(n * l), E = Math.round(i * l)), null != s && (c = Math.min(c, s)), null != a && (E = Math.min(E, a)); let I = (0, d.default)(); return c *= I, function(e) { let { src: t, sourceWidth: n, sourceHeight: i, targetWidth: s, targetHeight: a, format: l = null, quality: u = null } = e, [d, _] = function(e) { let [t, n] = e.split("?"); return [t, o.parse(n)] }(t); return null != l && (_.format = l), null != u && (_.quality = u), (s !== n || a !== i) && (_.width = 0 | s, _.height = 0 | a), !r().isEmpty(_) && (d += "?" + o.stringify(_)), d }({ src: t, sourceWidth: n, sourceHeight: i, targetWidth: c, targetHeight: E *= I, format: u, quality: _ }) } }, 813197: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getFilters: function() { return d }, processImage: function() { return _ } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("53281"), o = n("869783"), l = n("689938"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function d() { return [{ name: l.default.Messages.IMAGES, extensions: ["jpg", "jpeg", "png", "gif"] }] } function _(e, t, n) { ! function(e, t) { if (null != e) { let n = new FileReader; n.onload = n => { var i; "string" == typeof(null === (i = n.target) || void 0 === i ? void 0 : i.result) && t(n.target.result, e) }, n.readAsDataURL(e) } }(e, i => { if (e.type === o.FileTypes.MP4) return t(i, e); let r = new Image; r.src = i, r.onload = () => { t(i, e) }, r.onerror = () => { n() } }) } class c extends(i = s.PureComponent) { componentDidMount() { this._isMounted = !0 } activateUploadDialogue() { var e; null === (e = this._ref.current) || void 0 === e || e.activateUploadDialogue() } render() { let { multiple: e, disabled: t, className: n, tabIndex: i, "aria-label": s, filters: o } = this.props; return (0, r.jsx)(a.default, { ref: this._ref, onChange: this.handleFileChange, filters: null != o ? o : d(), multiple: e, disabled: t, className: n, tabIndex: i, "aria-label": s }) } constructor(...e) { super(...e), u(this, "_ref", s.createRef()), u(this, "_isMounted", !1), u(this, "handleFileChange", e => { let { onFileSizeError: t, maxFileSizeBytes: n } = this.props; if (e.stopPropagation(), e.preventDefault(), null != e.currentTarget.files) for (let i = 0; i < e.currentTarget.files.length; i++) { let r = e.currentTarget.files[i]; if (r.size > n) { null == t || t(n, r.size); continue } _(r, this.handleFileRead, this.handleFileError) } }), u(this, "handleFileRead", (e, t) => { let { onChange: n } = this.props; this._isMounted && n(e, t) }), u(this, "handleFileError", async () => { let { openUploadError: e } = await Promise.resolve().then(n.bind(n, "531643")); e({ title: l.default.Messages.PREMIUM_ALERT_ERROR_TITLE, help: l.default.Messages.UNABLE_TO_PROCESS_IMAGE }) }) } } u(c, "defaultProps", { multiple: !0, tabIndex: -1, maxFileSizeBytes: 1 / 0 }), t.default = c }, 962086: function(e, t, n) { "use strict"; n.r(t), n.d(t, { startImpersonating: function() { return h }, stopImpersonating: function() { return m }, updateImpersonatedChannels: function() { return p }, updateImpersonatedData: function() { return C }, updateImpersonatedRoles: function() { return O }, updateImpersonating: function() { return A } }), n("47120"); var i = n("570140"), r = n("367907"), s = n("703656"), a = n("592125"), o = n("984933"), l = n("271383"), u = n("430824"), d = n("496675"), _ = n("944486"), c = n("9156"), E = n("626135"), I = n("160404"), T = n("225675"), f = n("981631"), S = n("176505"); function h(e, t) { E.default.track(f.AnalyticEvents.VIEW_AS_ROLES_SELECTED, { num_roles: Object.keys(t.roles).length, ...(0, r.collectGuildAnalyticsMetadata)(e), is_viewing_as_member: t.type === T.ImpersonateType.NEW_MEMBER }), i.default.dispatch({ type: "IMPERSONATE_UPDATE", guildId: e, data: t }), N(e) } function A(e, t) { let n = I.default.getData(e); null != n && n.type === t.type && (E.default.track(f.AnalyticEvents.VIEW_AS_ROLES_SELECTED, { num_roles: Object.keys(n.roles).length, ...(0, r.collectGuildAnalyticsMetadata)(e), is_viewing_as_member: n.type === T.ImpersonateType.NEW_MEMBER }), i.default.dispatch({ type: "IMPERSONATE_UPDATE", guildId: e, data: { ...n, ...t } }), N(e)) } function m(e) { i.default.dispatch({ type: "IMPERSONATE_STOP", guildId: e }) } function N(e) { let t = _.default.getChannelId(e), n = a.default.getChannel(t); if (!(null != t && (0, S.isStaticChannelRoute)(t)) && !d.default.can(f.Permissions.VIEW_CHANNEL, n)) { let t = o.default.getDefaultChannel(e); null != t && (0, s.transitionTo)(f.Routes.CHANNEL(e, t.id)) } } function p(e, t, n) { let i = new Set(c.default.getOptedInChannels(e)); t.forEach(e => i.add(e)), n.forEach(e => i.delete(e)), A(e, { type: T.ImpersonateType.NEW_MEMBER, optInChannels: i }) } function O(e, t) { let n = u.default.getRoles(e); ! function(e, t) { let n = [...o.default.getSelectableChannelIds(e), ...o.default.getVocalChannelIds(e)], i = Array.from(t); o.default.addConditionalChangeListener(() => { let t = l.default.getSelfMember(e); if (null == t) return !1; if (i.some(e => !t.roles.includes(e))) return !0; let r = [...o.default.getSelectableChannelIds(e), ...o.default.getVocalChannelIds(e)].filter(e => !n.includes(e)); return r.length > 0 && p(e, r, []), !1 }) }(e, t); let i = {}; t.forEach(e => i[e] = n[e]), A(e, { type: T.ImpersonateType.NEW_MEMBER, roles: i }) } function C(e, t) { A(e, { type: T.ImpersonateType.NEW_MEMBER, ...t }) } }, 160404: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"), n("724458"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("430824"), d = n("630388"), _ = n("709054"), c = n("225675"), E = n("981631"), I = n("526761"); let T = {}; class f extends(i = o.default.Store) { hasViewingRoles() { return Object.keys(T).length > 0 } isViewingRoles(e) { return null != e && null != T[e] } getViewingRoles(e) { var t; return null === (t = T[e]) || void 0 === t ? void 0 : t.roles } getViewingRolesTimestamp(e) { var t; return null != e ? null === (t = T[e]) || void 0 === t ? void 0 : t.timestamp : null } getData(e) { return T[e] } isFullServerPreview(e) { var t; return (null === (t = T[e]) || void 0 === t ? void 0 : t.type) === c.ImpersonateType.NEW_MEMBER } isOptInEnabled(e) { let t = T[e]; return null != t && t.type === c.ImpersonateType.NEW_MEMBER && t.optInEnabled } isOnboardingEnabled(e) { let t = T[e]; return null != t && t.type === c.ImpersonateType.NEW_MEMBER && t.onboardingEnabled } getViewingChannels(e) { let t = T[e]; return null == t || t.type !== c.ImpersonateType.NEW_MEMBER ? null : t.optInChannels } getOnboardingResponses(e) { let t = T[e]; return null == t || t.type !== c.ImpersonateType.NEW_MEMBER ? null : t.onboardingResponses } getMemberOptions(e) { let t = T[e]; return null == t || t.type !== c.ImpersonateType.NEW_MEMBER ? null : t.memberOptions } isChannelOptedIn(e, t) { let n = this.getViewingChannels(e); return null != n && n.has(t) } isViewingServerShop(e) { var t; return null != e && (null === (t = T[e]) || void 0 === t ? void 0 : t.type) === c.ImpersonateType.SERVER_SHOP } getImpersonateType(e) { if (null == e) return null; let t = T[e]; return null == t ? null : t.type } getBackNavigationSection(e) { if (null == e) return E.GuildSettingsSections.ROLES; let t = T[e]; if (null == t) return E.GuildSettingsSections.ROLES; switch (t.type) { case c.ImpersonateType.ROLES: case c.ImpersonateType.SERVER_SHOP: return t.returnToSection; case c.ImpersonateType.NEW_MEMBER: return E.GuildSettingsSections.ONBOARDING; default: return E.GuildSettingsSections.ROLES } } } a = "ImpersonateStore", (s = "displayName") in(r = f) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new f(l.default, { IMPERSONATE_UPDATE: function(e) { let { guildId: t, data: n } = e; delete n.roles[_.default.castGuildIdAsEveryoneGuildRoleId(t)], T[t] = { ...n, timestamp: Date.now() } }, IMPERSONATE_STOP: function(e) { let { guildId: t } = e; if (null == T[t]) return !1; delete T[t] }, GUILD_ROLE_DELETE: function(e) { let { guildId: t, roleId: n } = e; if (null == T[t]) return !1; delete T[t].roles[n] }, USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK: function(e) { var t; let { guildId: n, overrides: i } = e; if (null == n || null == T[n]) return !1; let r = T[n]; if (null == r || r.type !== c.ImpersonateType.NEW_MEMBER) return !1; let s = null !== (t = r.optInChannels) && void 0 !== t ? t : new Set; return _.default.keys(i).forEach(e => { var t; let n = i[e]; d.hasFlag(null !== (t = n.flags) && void 0 !== t ? t : 0, I.ChannelNotificationSettingsFlags.OPT_IN_ENABLED) ? s.add(e) : s.delete(e) }), r.optInChannels = s, !0 }, GUILD_ONBOARDING_SELECT_OPTION: function(e) { var t; let { guildId: n, optionId: i, selected: r, removedOptionIds: s } = e; if (null == n || null == T[n]) return !1; let a = T[n]; if (null == a || a.type !== c.ImpersonateType.NEW_MEMBER) return !1; let o = null !== (t = a.onboardingResponses) && void 0 !== t ? t : new Set; return null != s && s.length > 0 && s.forEach(e => o.delete(e)), r ? o.add(i) : o.delete(i), a.onboardingResponses = o, !0 }, GUILD_MEMBER_UPDATE_LOCAL: function(e) { let { guildId: t, roles: n, flags: i } = e; if (null == t) return !1; let r = T[t]; return null != r && (null != n && (r.roles = n.reduce((e, n) => { let i = u.default.getRole(t, n); return null != i && (e[n] = i), e }, {})), null != i && r.type === c.ImpersonateType.NEW_MEMBER && (r.memberOptions.flags = i), !0) } }) }, 225675: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ImpersonateType: function() { return i } }), (r = i || (i = {})).ROLES = "ROLES", r.NEW_MEMBER = "NEW_MEMBER", r.SERVER_SHOP = "SERVER_SHOP" }, 91156: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isIarMessageDislikeEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_iar_message_dislike", label: "IAR Message Dislike", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function r(e) { let { enabled: t } = i.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); return t } }, 545197: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isIarSpamReorderExperimentEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-05_iar_spam_reorder", label: "IAR Spam Reorder", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function r(e) { let { enabled: t } = i.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); return t } }, 375790: function(e, t, n) { "use strict"; n.r(t), n.d(t, { REMEDIATION_ELEMENT_TYPES: function() { return i } }); let i = ["block_users", "leave_guild", "delete_message"] }, 82554: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ReportNames: function() { return i }, UnauthenticatedReportNames: function() { return r } }), (s = i || (i = {})).GUILD = "guild", s.GUILD_DISCOVERY = "guild_discovery", s.GUILD_DIRECTORY_ENTRY = "guild_directory_entry", s.MESSAGE = "message", s.STAGE_CHANNEL = "stage_channel", s.GUILD_SCHEDULED_EVENT = "guild_scheduled_event", s.FIRST_DM = "first_dm", s.USER = "user", (a = r || (r = {})).MESSAGE = "message_urf", a.USER = "user_urf" }, 726521: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showReportModalForDiscoverableGuild: function() { return E }, showReportModalForFirstDM: function() { return h }, showReportModalForGuildDirectoryEntry: function() { return I }, showReportModalForGuildScheduledEvent: function() { return S }, showReportModalForInappropriateConversationSafetyAlert: function() { return C }, showReportModalForMessage: function() { return T }, showReportModalForStageChannel: function() { return f }, showReportModalForUser: function() { return m }, showUnauthenticatedReportModalForMessage: function() { return p }, showUnauthenticatedReportModalForUser: function() { return N }, submitHamReportForFirstDM: function() { return A }, submitReportForInappropriateConversationSafetyAlert: function() { return O } }); var i = n("367907"), r = n("427679"), s = n("23750"), a = n("598077"), o = n("91156"), l = n("545197"), u = n("82554"), d = n("185625"), _ = n("443599"), c = n("981631"); function E(e, t) { R(u.ReportNames.GUILD_DISCOVERY, { guild_id: e.id }), (0, _.showReportModal)({ name: u.ReportNames.GUILD_DISCOVERY, record: e }, {}, t) } function I(e, t) { R(u.ReportNames.GUILD_DIRECTORY_ENTRY, { channel_id: e.channelId, guild_id: e.guildId }), (0, _.showReportModal)({ name: u.ReportNames.GUILD_DIRECTORY_ENTRY, record: e }, {}, t) } function T(e, t, n) { let i; R(u.ReportNames.MESSAGE, { message_id: e.id, channel_id: e.channel_id }); let r = (0, o.isIarMessageDislikeEnabled)(t), s = (0, l.isIarSpamReorderExperimentEnabled)(t); s && r ? i = "6a_spam_reorder_with_dislikes_experiment" : s ? i = "6b_spam_reorder_experiment" : r && (i = "5_dislike_experiment"), (0, _.showReportModal)({ name: u.ReportNames.MESSAGE, record: e }, { variant: i }, n) } function f(e, t) { let n = r.default.getStageInstanceByChannel(e.id); null != n && (R(u.ReportNames.STAGE_CHANNEL, { stage_instance_id: n.id, channel_id: n.channel_id, guild_id: n.guild_id }), (0, _.showReportModal)({ name: u.ReportNames.STAGE_CHANNEL, record: n }, {}, t)) } function S(e, t) { var n; R(u.ReportNames.GUILD_SCHEDULED_EVENT, { guild_scheduled_event_id: e.id, guild_id: e.guild_id, channel_id: null !== (n = e.channel_id) && void 0 !== n ? n : void 0 }), (0, _.showReportModal)({ name: u.ReportNames.GUILD_SCHEDULED_EVENT, record: e }, {}, t) } function h(e, t) { R(u.ReportNames.FIRST_DM, { message_id: e.id, channel_id: e.channel_id }), (0, _.showReportModal)({ name: u.ReportNames.FIRST_DM, record: e }, {}, t, void 0, !1) } async function A(e, t) { try { await (0, d.submitHeadlessReport)({ name: u.ReportNames.FIRST_DM, record: e }, { variant: "_first_dm_ham_v1" }), null == t || t() } catch {} } function m(e, t, n) { R(u.ReportNames.USER, { reported_user_id: e.id }), (0, _.showReportModal)({ name: u.ReportNames.USER, record: e, contextualGuildId: t }, {}, n, void 0, !1) } function N(e, t) { let n = new a.default({}); R(u.UnauthenticatedReportNames.USER, { reported_user_id: n.id }), (0, _.showReportModal)({ name: u.UnauthenticatedReportNames.USER, record: n }, {}, t, void 0, !1, !1, e) } function p(e, t) { let n = new s.default({}); R(u.UnauthenticatedReportNames.MESSAGE, { message_id: void 0, channel_id: void 0 }), (0, _.showReportModal)({ name: u.UnauthenticatedReportNames.MESSAGE, record: n }, {}, t, void 0, !1, !1, e) } async function O(e, t, n) { try { await (0, d.submitHeadlessReport)({ name: u.ReportNames.MESSAGE, record: e }, { variant: "safety_alerts_headless_v1" }), null == t || t() } catch { null == n || n() } } function C(e, t) { R(u.ReportNames.MESSAGE, { message_id: e.id, channel_id: e.channel_id }), (0, _.showReportModal)({ name: u.ReportNames.MESSAGE, record: e }, { variant: "safety_alerts_v1" }, t) } function R(e, t) { i.default.trackWithMetadata(c.AnalyticEvents.IAR_MODAL_OPEN, { report_type: e, ...t }) } }, 185625: function(e, t, n) { "use strict"; n.r(t), n.d(t, { areRequiredElementsUnfilled: function() { return p }, getDsaExperiment: function() { return T }, getReportMenu: function() { return l }, getUnauthenticatedReportMenu: function() { return u }, sendUnauthenticatedReportPincode: function() { return E }, showInAppReportsFeedbackModal: function() { return N }, submitHeadlessReport: function() { return d }, submitReport: function() { return _ }, submitReportSecondLook: function() { return f }, submitUnauthenticatedReport: function() { return c }, trackCloseReportModalAnalytics: function() { return m }, verifyUnauthenticatedReport: function() { return I } }), n("411104"), n("724458"), n("47120"); var i = n("544891"), r = n("570140"), s = n("367907"), a = n("82554"), o = n("981631"); async function l(e, t) { var n; let r = h(e), s = await i.HTTP.get({ url: o.Endpoints.GET_REPORT_MENU(r), query: (null == t ? void 0 : t.variant) != null ? { variant: t.variant } : void 0 }); return null !== (n = s.body) && void 0 !== n ? n : JSON.parse(s.text) } async function u(e, t) { var n; let r = S(e), s = await i.HTTP.get({ url: o.Endpoints.GET_UNAUTHENTICATED_REPORT_MENU(r), query: (null == t ? void 0 : t.variant) != null ? { variant: t.variant } : void 0 }); return null !== (n = s.body) && void 0 !== n ? n : JSON.parse(s.text) } async function d(e, t) { let n = h(e), r = await l(e, t); await i.HTTP.post({ url: o.Endpoints.SUBMIT_REPORT_MENU(n), body: A(r, e, [{ nodeRef: r.root_node_id, destination: ["", r.success_node_id] }]) }) } function _(e, t, n) { return i.HTTP.post({ url: o.Endpoints.SUBMIT_REPORT_MENU(h(t)), body: A(e, t, n) }) } function c(e, t, n, r) { let s = S(t); return i.HTTP.post({ url: o.Endpoints.SUBMIT_UNAUTHENTICATED_REPORT_MENU(s), body: A(e, t, n, r) }) } function E(e, t) { return i.HTTP.post({ url: o.Endpoints.SEND_UNAUTHENTICATED_REPORT_PINCODE(e), body: { name: e, email: t } }) } async function I(e, t, n) { return (await i.HTTP.post({ url: o.Endpoints.VERIFY_UNAUTHENTICATED_REPORT(e), body: { name: e, email: t, code: n } })).body } async function T() { return await i.HTTP.get({ url: o.Endpoints.DSA_EXPERIMENT_UNAUTHENTICATED }) } async function f(e) { return (await i.HTTP.post({ url: o.Endpoints.SUBMIT_REPORT_SECOND_LOOK, body: { token: e } })).body } function S(e) { let t = e.name; if (!Object.values(a.UnauthenticatedReportNames).includes(t)) throw Error("Invalid report type ".concat(e.name)); return t } function h(e) { let t = e.name; if (!Object.values(a.ReportNames).includes(t)) throw Error("Invalid report type ".concat(e.name)); return t } let A = (e, t, n, i) => { let { version: r, variant: s, language: o } = e, l = { channel_id: void 0, message_id: void 0, stage_instance_id: void 0, guild_id: void 0, guild_scheduled_event_id: void 0, user_id: void 0, email_token: void 0 }, u = { version: r, variant: s, language: null != o ? o : "en", breadcrumbs: n.map(e => e.nodeRef), elements: n.reduce((e, t) => { let { multiSelect: n, textInput: i } = t; return { ...e, ...null != n && { [n.name]: Object.keys(n.state) }, ...Object.fromEntries(Object.entries(null != i ? i : {}).map(e => { let [t, { value: n }] = e; return [t, n] })) } }, {}) }; if (t.name === a.ReportNames.MESSAGE || t.name === a.ReportNames.FIRST_DM) { let { channel_id: e, id: n } = t.record; return { ...u, ...l, name: t.name, channel_id: e, message_id: n } } if (t.name === a.ReportNames.GUILD || t.name === a.ReportNames.GUILD_DISCOVERY) { let { id: e } = t.record; return { ...u, ...l, name: t.name, guild_id: e } } if (t.name === a.ReportNames.GUILD_DIRECTORY_ENTRY) { let { guildId: e, channelId: n } = t.record; return { ...u, ...l, name: t.name, channel_id: n, guild_id: e } } else if (t.name === a.ReportNames.STAGE_CHANNEL) { let { id: e, guild_id: n, channel_id: i } = t.record; return { ...u, ...l, name: t.name, channel_id: i, guild_id: n, stage_instance_id: e } } else if (t.name === a.ReportNames.GUILD_SCHEDULED_EVENT) { let { id: e, guild_id: n } = t.record; return { ...u, ...l, name: t.name, guild_id: n, guild_scheduled_event_id: e } } else if (t.name === a.ReportNames.USER) return { ...u, ...l, name: t.name, user_id: t.record.id, guild_id: t.contextualGuildId }; else if (t.name === a.UnauthenticatedReportNames.USER) return { ...u, ...l, name: t.name, user_id: t.record.id, guild_id: t.contextualGuildId, email_token: i }; else if (t.name === a.UnauthenticatedReportNames.MESSAGE) return { ...u, ...l, name: t.name, message_id: t.record.id, email_token: i }; return null }; function m(e, t, n) { s.default.trackWithMetadata(o.AnalyticEvents.IAR_MODAL_CLOSE, { report_type: e.name, report_id: n, navigation_history: t, message_id: e.name === a.ReportNames.MESSAGE || e.name === a.ReportNames.FIRST_DM ? e.record.id : void 0, stage_instance_id: e.name === a.ReportNames.STAGE_CHANNEL ? e.record.id : void 0, guild_scheduled_event_id: e.name === a.ReportNames.GUILD_SCHEDULED_EVENT ? e.record.id : void 0, guild_id: e.name === a.ReportNames.GUILD || e.name === a.ReportNames.GUILD_DISCOVERY ? e.record.id : e.name === a.ReportNames.GUILD_DIRECTORY_ENTRY ? e.record.guildId : e.name === a.ReportNames.GUILD_SCHEDULED_EVENT ? e.record.guild_id : void 0, channel_id: e.name === a.ReportNames.GUILD_SCHEDULED_EVENT ? e.record.channel_id : e.name === a.ReportNames.GUILD_DIRECTORY_ENTRY ? e.record.channelId : void 0 }) } function N(e, t) { r.default.dispatch({ type: "IN_APP_REPORTS_SHOW_FEEDBACK", reportId: t, reportType: e.name }) } function p(e, t, n, i, r) { return e.some(e => { var t; return !0 === e.should_submit_data && ((null == i ? void 0 : i[e.name]) == null || (null == i ? void 0 : i[e.name].value) === "" || !(null == i ? void 0 : null === (t = i[e.name]) || void 0 === t ? void 0 : t.isValid)) }) || t.some(e => !0 === e.should_submit_data && ((null == i ? void 0 : i[e.name]) == null || (null == i ? void 0 : i[e.name].value) === "")) || (null == n ? void 0 : n.should_submit_data) === !0 && (null == r || 0 === Object.keys(r).length) } }, 87620: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useIsIarUserReportingEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-09_iar_user_reporting", label: "Safety Experience IAR User Reporting", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function r(e) { return i.useExperiment({ location: e }, { autoTrackExposure: !0 }).enabled } }, 443599: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showReportModal: function() { return o } }), n("653041"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("185625"), a = n("186023"); async function o(e, t, n, o) { let l = !(arguments.length > 4) || void 0 === arguments[4] || arguments[4], u = !(arguments.length > 5) || void 0 === arguments[5] || arguments[5], d = arguments.length > 6 ? arguments[6] : void 0, _ = (0, r.getInteractingModalContext)(); try { let c, E = u ? await (0, s.getReportMenu)(e, t) : await (0, s.getUnauthenticatedReportMenu)(e, t), I = []; let T = e => { I.push(e) }, f = e => { c = e, null == n || n() }; (0, r.openModal)(t => (0, i.jsx)(a.default, { menu: E, reportType: e, modalProps: t, onNavigate: T, onSubmit: f, isAuthenticated: u, emailToken: d }), { onCloseCallback: () => { (0, s.trackCloseReportModalAnalytics)(e, I, c), null == o || o(), l && (0, s.showInAppReportsFeedbackModal)(e, null != c ? c : null) } }, _) } catch {} } }, 186023: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("367907"), o = n("153124"), l = n("82554"), u = n("185625"), d = n("255514"), _ = n("981631"), c = n("191466"); t.default = e => { let { reportType: t, menu: n, modalProps: E, onSubmit: I, onNavigate: T, emailToken: f, isAuthenticated: S = !0 } = e, h = (0, o.useUID)(), { nodes: A, root_node_id: m, success_node_id: N, fail_node_id: p } = n, [O, C] = r.useState(m), [R, g] = r.useState(void 0), [L, v] = r.useState(void 0), [D, M] = r.useState([]), [y, P] = r.useState(void 0), U = e => { var n; let { destination: i } = e, [, r] = i, s = A[r]; if (s.elements.some(e => "skip" === e.type) && (null === (n = s.button) || void 0 === n ? void 0 : n.type) === "next") return U({ ...e, destination: ["", s.button.target] }); if (M([...D, e]), null != s.key && (null == T || T(s.key)), g(void 0), v(void 0), t.name === l.ReportNames.MESSAGE || t.name === l.ReportNames.FIRST_DM) { let e = t.record.id; a.default.trackWithMetadata(_.AnalyticEvents.IAR_NAVIGATE, { message_id: e, content_type: t.name, report_sub_type: s.report_type, current_node: A[O].id, next_node: s.id }) } C(r) }, b = async e => { var i; let r = S ? await (0, u.submitReport)(n, t, [...D, e]) : await (0, u.submitUnauthenticatedReport)(n, t, [...D, e], f), s = null == r ? void 0 : null === (i = r.body) || void 0 === i ? void 0 : i.report_id; null != s && P(s), null == I || I(s) }, G = () => { var e, n; if (D.length < 1) return; let i = [...D], r = i.pop(), s = null !== (n = null == r ? void 0 : r.nodeRef) && void 0 !== n ? n : m; if (t.name === l.ReportNames.MESSAGE || t.name === l.ReportNames.FIRST_DM) { let e = t.record.id; a.default.trackWithMetadata(_.AnalyticEvents.IAR_NAVIGATE, { message_id: e, content_type: t.name, report_sub_type: A[s].report_type, current_node: A[O].id, next_node: A[s].id }) } g(null == r ? void 0 : null === (e = r.multiSelect) || void 0 === e ? void 0 : e.state), v(null == r ? void 0 : r.textInput), C(s), M(i), null == T || T("..") }, w = [], k = []; for (let e in A) { var B, V; let t = A[e]; if (t.id !== N && t.id !== p && t.id !== m) { if (t.key.endsWith("_SUBMIT")) { k.push(t); continue } if (w.push(t), (null === (B = t.button) || void 0 === B ? void 0 : B.type) === "next") { let e = null === (V = t.button) || void 0 === V ? void 0 : V.target, n = w.indexOf(A[e]); - 1 !== n && (w.splice(n, 1), w.push(A[e])) } } } let x = [A[m], ...w, ...k, A[N], A[p]]; return (0, i.jsx)(s.ModalRoot, { transitionState: E.transitionState, "aria-labelledby": h, children: (0, i.jsx)(s.Slides, { width: 440, activeSlide: O, centered: !1, children: x.map(e => (0, i.jsx)(s.Slide, { id: e.id, children: (0, i.jsx)("div", { className: c.slideContainer, children: (0, i.jsx)(d.default, { node: e, reportType: t, history: D, onModalClose: E.onClose, onSelectChild: U, onNavigateBack: G, multiSelect: R, textInput: L, successNodeId: N, failNodeId: p, onSubmit: b, reportId: y }) }) }, e.id)) }) }) } }, 273389: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("285952"), o = n("689938"), l = n("88493"); t.default = e => { let t, { button: n, submitting: u, disableNext: d, onClick: _, canNavigateBack: c, onBackClicked: E } = e, I = r.useRef(null), T = null != n && "cancel" !== n.type, f = c && (null == n ? void 0 : n.type) !== "done", S = T || f; if (r.useEffect(() => { if ((null == n ? void 0 : n.type) === "submit" || (null == n ? void 0 : n.type) === "done") { var e; null === (e = I.current) || void 0 === e || e.focus() } }, [null == n ? void 0 : n.type]), !S) return null; let h = o.default.Messages.DONE; return (null == n ? void 0 : n.type) === "submit" ? (h = o.default.Messages.MOBILE_REPORTS_SUBMIT_REPORT, t = s.Button.Colors.RED) : (null == n ? void 0 : n.type) === "next" ? h = o.default.Messages.NEXT : (null == n ? void 0 : n.type) === "cancel" && (h = o.default.Messages.CANCEL, t = s.Button.Colors.TRANSPARENT), (0, i.jsxs)(s.ModalFooter, { direction: a.default.Direction.HORIZONTAL, children: [f && (0, i.jsx)(s.Button, { onClick: E, color: s.Button.Colors.TRANSPARENT, disabled: u, children: o.default.Messages.BACK }), T && (0, i.jsx)(s.Button, { onClick: () => { null != n && _(n) }, color: t, className: l.actionButton, disabled: u || d, buttonRef: I, children: h })] }) } }, 255514: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("773603"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("285952"), o = n("185625"), l = n("273389"), u = n("596891"), d = n("15667"), _ = n("76264"), c = n("822686"), E = n("356110"), I = n("730719"), T = n("996701"), f = n("320596"), S = n("273514"), h = n("995712"), A = n("234937"), m = n("473121"), N = n("449413"), p = n("266080"), O = n("316617"), C = n("15682"), R = n("905434"), g = n("196627"), L = n("739319"), v = n("842401"), D = n("375790"), M = n("981631"), y = n("689938"), P = n("284447"); function U(e, t) { let { elements: n } = e; return n.find(e => { let { type: n } = e; return n === t }) } function b(e, t) { let { elements: n } = e; return n.filter(e => { let { type: n } = e; return n === t }) } t.default = e => { let { node: t, reportType: n, history: G, onSelectChild: w, onModalClose: k, onSubmit: B, multiSelect: V, reportId: x, textInput: F } = e, H = U(t, "checkbox"), Y = U(t, "text_line_resource"), j = b(t, "external_link"), W = b(t, "free_text"), K = b(t, "dropdown"), [z, Z] = r.useState(!1), [X, Q] = r.useState(!1), [q, J] = r.useState(""), [$, ee] = r.useState(() => ({})), [et, en] = r.useState(() => ({})), [ei, er] = r.useState((0, o.areRequiredElementsUnfilled)(W, K, H, F, V)), es = function(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = { ...et }; i[e] = { value: t, isValid: n }, en(i), er((0, o.areRequiredElementsUnfilled)(W, K, H, i, $)) }, ea = r.useMemo(() => e => { w({ nodeRef: t.id, destination: e, textInput: null != W || null != K ? et : void 0, multiSelect: null != H ? { name: H.name, state: $ } : void 0 }) }, [t, w, H, $, et, W, K]); r.useEffect(() => { null != V && ee(V), null != F && en(F) }, [V, F]); let eo = e => { if (e === M.AbortCodes.INVALID_FORM_BODY) J(y.default.Messages.IN_APP_REPORTING_SUBMIT_VALIDATION_ERROR); else J(y.default.Messages.MOBILE_REPORTS_SUBMIT_FAILED) }, el = () => B({ nodeRef: t.id, destination: ["", e.successNodeId] }).then(() => { J(""), ea(["", e.successNodeId]) }).catch(e => { var t; eo(null === (t = e.body) || void 0 === t ? void 0 : t.code) }).finally(() => { Z(!1) }); return r.useEffect(() => { t.is_auto_submit && !X && (Q(!0), B({ nodeRef: t.id, destination: ["", t.id] })) }, [t.is_auto_submit, X, B, t.id]), (0, i.jsxs)("div", { className: P.container, children: [(0, i.jsxs)(s.ModalHeader, { separator: !1, direction: a.default.Direction.VERTICAL, className: P.header, children: [(0, i.jsx)(g.default, { element: U(t, "success") }), (0, i.jsx)(m.default, { node: t }), (0, i.jsx)(N.default, { node: t })] }), (0, i.jsxs)(s.ModalContent, { className: P.body, children: [null != Y ? (0, i.jsx)(L.default, { element: Y }) : null, null != U(t, "breadcrumbs") && (0, i.jsx)(d.default, { history: G }), null != U(t, "message_preview") && ("message" === n.name || "first_dm" === n.name) && (0, i.jsx)(O.default, { message: n.record }), null != U(t, "user_preview") && "user" === n.name ? (0, i.jsx)(v.default, { user: n.record }) : null, function(e) { let { elements: t } = e; return t.some(e => { let { type: t } = e; return D.REMEDIATION_ELEMENT_TYPES.includes(t) }) }(t) && (0, i.jsx)(s.Heading, { className: P.remediationElementsHeader, variant: "heading-sm/semibold", children: y.default.Messages.MOBILE_REPORTS_BLOCK_ELEMENT_HEADER }), (null != U(t, "block_users") || null != U(t, "mute_users")) && ("message" === n.name || "first_dm" === n.name || "user" === n.name) && (0, i.jsx)(u.default, { userId: "user" === n.name ? n.record.id : n.record.author.id, reportId: x, reportName: n.name, showBlock: null != U(t, "block_users"), showMute: null != U(t, "mute_users") }), null != U(t, "delete_message") && "message" === n.name && (0, i.jsx)(c.default, { message: n.record, reportId: x }), null != U(t, "leave_guild") && "guild" === n.name && (0, i.jsx)(p.default, { guildId: n.record.id, reportId: x }), null != U(t, "channel_preview") && "stage_channel" === n.name && (0, i.jsx)(R.default, { stageInstance: n.record }), null != U(t, "guild_scheduled_event_preview") && "guild_scheduled_event" === n.name && (0, i.jsx)(A.default, { event: n.record }), null != U(t, "guild_directory_entry_preview") && "guild_directory_entry" === n.name && (0, i.jsx)(S.default, { entry: n.record }), null != U(t, "guild_discovery_preview") && "guild_discovery" === n.name && (0, i.jsx)(h.default, { entry: n.record }), null != H && (0, i.jsx)(C.default, { element: H, onChange: (e, t) => { let n = { ...$ }; e in $ ? delete n[e] : n[e] = t, ee(n), er((0, o.areRequiredElementsUnfilled)(W, K, H, et, n)) }, state: $ }), ("user_urf" === n.name || "message_urf" === n.name) && null != K && K.length > 0 && (0, i.jsx)(E.default, { elements: K, onChange: es, state: et }), ("user_urf" === n.name || "message_urf" === n.name) && null != W && W.length > 0 && (0, i.jsx)(f.default, { elements: W, onChange: es, state: et }), (0, i.jsx)(_.default, { node: t, onSelectChild: ea }), null != j && j.length > 0 ? (0, i.jsx)(T.default, { elements: j }) : null, (0, i.jsx)(I.default, { errorMessage: q, onClose: () => { J("") } })] }), (0, i.jsx)(l.default, { button: t.button, submitting: z, disableNext: ei, onClick: e => { switch (e.type) { case "done": case "cancel": k(); break; case "next": ea(["", e.target]); break; case "submit": Z(!0), el() } }, onBackClicked: e.onNavigateBack, canNavigateBack: G.length > 0 }), (0, i.jsx)(s.ModalCloseButton, { className: P.closeButton, onClick: k })] }) } }, 596891: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("92114"), l = n("194359"), u = n("367907"), d = n("592125"), _ = n("699516"), c = n("9156"), E = n("594174"), I = n("621600"), T = n("82554"), f = n("981631"), S = n("689938"), h = n("40834"); t.default = e => { let { userId: t, reportId: n, reportName: A, showBlock: m, showMute: N } = e, p = d.default.getDMFromUserId(t), O = (0, s.useStateFromStores)([c.default], () => null == p ? null : c.default.isChannelMuted(null, p)), [C, R] = r.useState(null != O && O), [g, L] = r.useState(!1), v = (0, s.useStateFromStores)([E.default], () => E.default.getUser(t), [t]), D = (0, s.useStateFromStores)([_.default], () => _.default.getRelationshipType(t), [t]) === f.RelationshipTypes.BLOCKED; r.useEffect(() => { L(D) }, [D]); let M = r.useCallback(() => { L(!0), u.default.trackWithMetadata(f.AnalyticEvents.IAR_BLOCK_USER_BUTTON_CLICKED, { other_user_id: t, report_id: n }), l.default.addRelationship({ userId: t, context: { location: "ReportMenuBlockUser-iOS" }, type: f.RelationshipTypes.BLOCKED }) }, [t, n]), y = r.useCallback(() => { null != p && (R(!0), u.default.trackWithMetadata(f.AnalyticEvents.IAR_MUTE_USER_BUTTON_CLICKED, { other_user_id: t, report_id: n }), o.default.updateChannelOverrideSettings(null, p, { muted: !0 }, I.NotificationLabels.Muted)) }, [p, t, n]), P = A === T.ReportNames.USER, U = P ? S.default.Messages.REPORTS_MUTE_USER_ELEMENT_DESCRIPTION : S.default.Messages.MOBILE_REPORTS_MUTE_ELEMENT_DESCRIPTION, b = P ? S.default.Messages.REPORTS_BLOCK_USER_ELEMENT_DESCRIPTION : S.default.Messages.MOBILE_REPORTS_BLOCK_ELEMENT_DESCRIPTION, G = P ? S.default.Messages.REPORTS_BLOCK_AND_MUTE_USER_ELEMENT_DESCRIPTION : S.default.Messages.MOBILE_REPORTS_BLOCK_AND_MUTE_ELEMENT_DESCRIPTION, w = N || m; return null != v && w ? (0, i.jsxs)("div", { className: h.container, children: [(0, i.jsx)(a.Text, { className: h.description, variant: "text-sm/normal", children: m && N ? G : m ? b : U }), (0, i.jsxs)("div", { className: h.userContainer, children: [(0, i.jsxs)("div", { className: h.userInfo, children: [(0, i.jsx)(a.Avatar, { size: a.AvatarSizes.SIZE_32, src: v.getAvatarURL(void 0, 32), className: h.avatar, "aria-label": v.username }), (0, i.jsx)(a.Text, { className: h.userName, variant: "text-sm/semibold", children: v.username }), !v.isPomelo() && (0, i.jsxs)(a.Text, { variant: "text-sm/normal", children: ["#", v.discriminator] })] }), (0, i.jsxs)("div", { className: h.actionButtonsContainer, children: [N && (0, i.jsx)(a.Button, { onClick: y, disabled: C, size: a.Button.Sizes.SMALL, color: a.Button.Colors.PRIMARY, children: C ? S.default.Messages.MUTED : S.default.Messages.MUTE }), m && (0, i.jsx)(a.Button, { onClick: M, disabled: g, size: a.Button.Sizes.SMALL, color: a.Button.Colors.RED, children: g ? S.default.Messages.BLOCKED : S.default.Messages.BLOCK })] })] })] }) : null } }, 15667: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("392711"), s = n("481060"), a = n("689938"), o = n("160503"); t.default = e => { let t = (0, r.flatMap)(e.history, e => { var t; let { destination: [n], multiSelect: i } = e, r = [null, null], s = Object.values(null !== (t = null == i ? void 0 : i.state) && void 0 !== t ? t : {}); return s.length > 0 && (r[0] = s.join(", ")), "" !== n && (r[1] = n), r }).filter(e => null != e); return 0 === t.length ? null : (0, i.jsxs)("div", { className: o.container, children: [(0, i.jsx)(s.Heading, { className: o.breadcrumbsHeader, color: "header-secondary", variant: "heading-sm/semibold", children: a.default.Messages.MOBILE_REPORTS_BREADCRUMBS_TITLE }), t.map((e, t) => (0, i.jsxs)("div", { className: o.breadcrumbContainer, children: [(0, i.jsx)("div", { className: o.breadcrumbDot }), (0, i.jsx)(s.Text, { variant: "text-md/normal", className: o.breadcrumbText, children: e })] }, "".concat(e, "+").concat(t)))] }) } }, 76264: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("259580"), a = n("182019"); let o = e => { let { child: t, onClick: n } = e, [o] = t; return (0, i.jsxs)(r.Clickable, { className: a.childButton, onClick: () => n(t), children: [(0, i.jsx)(r.Text, { className: a.childText, variant: "text-md/semibold", children: o }), (0, i.jsx)(s.default, { className: a.childIcon, direction: s.default.Directions.RIGHT })] }) }; t.default = e => { let { node: { children: t }, onSelectChild: n } = e; if (null == t || 0 === t.length) return null; let r = t.map(e => { let [t, r] = e; return (0, i.jsx)(o, { child: e, onClick: n }, "".concat(t, "+").concat(r)) }); return (0, i.jsx)("div", { className: a.__invalid_childrenContainer, children: r }) } }, 822686: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("904245"), o = n("367907"), l = n("592125"), u = n("496675"), d = n("981631"), _ = n("689938"), c = n("566580"); t.default = e => { let { message: t, reportId: n } = e, [E, I] = r.useState(!1), T = r.useCallback(() => { I(!0), o.default.trackWithMetadata(d.AnalyticEvents.IAR_DELETE_MESSAGE_BUTTON_CLICKED, { report_id: n }), a.default.deleteMessage(t.getChannelId(), t.id) }, [t, n]), f = r.useMemo(() => { let e = l.default.getChannel(t.getChannelId()); return null != e && e.type !== d.ChannelTypes.DM && e.type !== d.ChannelTypes.GROUP_DM && u.default.canWithPartialContext(d.Permissions.MANAGE_MESSAGES, { channelId: e.id }) }, [t]); return null != t && f ? (0, i.jsx)("div", { className: c.container, children: (0, i.jsxs)("div", { className: c.messageContainer, children: [(0, i.jsx)("div", { className: c.description, children: (0, i.jsx)(s.Text, { variant: "text-sm/normal", children: _.default.Messages.MOBILE_REPORTS_DELETE_MESSAGE_ELEMENT_DESCRIPTION }) }), (0, i.jsx)(s.Button, { onClick: () => T(), disabled: E, size: s.Button.Sizes.SMALL, color: s.Button.Colors.RED, children: E ? _.default.Messages.DELETED : _.default.Messages.DELETE })] }) }) : null } }, 356110: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("291021"), o = n("611273"); let l = e => { let { element: t, onChange: n, initialOption: l } = e, [u, d] = r.useState(""); r.useEffect(() => { d(null != l ? l : "") }, [l]); let _ = t.name, { title: c, options: E } = t.data, I = r.useCallback(e => { null != e && (d(e), n(e)) }, [n]); return (0, i.jsxs)("div", { className: o.marginBottom8, children: [null != c && (0, i.jsx)("div", { className: o.marginBottom8, children: (0, i.jsxs)(s.Text, { variant: "text-sm/bold", children: [c, t.should_submit_data && (0, i.jsx)("span", { className: a.required, children: "*" })] }) }), (0, i.jsx)(s.SingleSelect, { value: u, onChange: I, options: E })] }, _) }; t.default = e => { let { elements: t, onChange: n, state: r } = e, s = t.map(e => { var t, s; let a = e.name; return (0, i.jsx)(l, { element: e, initialOption: null !== (s = null == r ? void 0 : null === (t = r[a]) || void 0 === t ? void 0 : t.value) && void 0 !== s ? s : void 0, onChange: e => n(a, e) }, a) }); return (0, i.jsx)("div", { children: s }) } }, 730719: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("759231"), a = n("689938"), o = n("166400"); t.default = e => { let { errorMessage: t, onClose: n } = e; return null == t || "" === t ? null : (0, i.jsxs)("div", { className: o.errorContainer, children: [(0, i.jsx)(s.default, { width: 20, height: 20, className: o.errorIcon }), (0, i.jsx)(r.Text, { className: o.errorText, variant: "text-sm/normal", children: t }), (0, i.jsx)(r.Clickable, { onClick: () => { n() }, "aria-label": a.default.Messages.DISMISS, className: o.closeIcon })] }) } }, 996701: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("782568"), a = n("441957"), o = n("689938"), l = n("831124"); let u = e => { let { data: { url: t, link_text: n, link_description: o, is_localized: u } } = e; return u ? (0, i.jsxs)(r.Clickable, { role: "link", className: l.linkButton, onClick: () => { (0, s.default)(t) }, children: [(0, i.jsxs)("div", { className: l.linkTextContainer, children: [(0, i.jsx)(r.Text, { className: l.__invalid_linkText, variant: "text-md/semibold", children: n }), null != o && "" !== o && (0, i.jsx)(r.Text, { variant: "text-md/normal", color: "text-muted", children: o })] }), (0, i.jsx)(a.default, { className: l.linkIcon })] }) : null }; function d(e) { let { elements: t } = e; if (null == t || 0 === t.length || null == t.find(e => { let { data: t } = e; return t.is_localized })) return null; let n = t.map((e, t) => { let { data: n } = e; return (0, i.jsx)(u, { data: n }, "external-link+".concat(t)) }), s = t.some(e => { let { data: t } = e; return t.is_header_hidden }); return (0, i.jsxs)("div", { className: l.linksContainer, children: [!s && (0, i.jsx)(r.Heading, { variant: "heading-sm/semibold", color: "header-secondary", className: l.header, children: o.default.Messages.LEARN_MORE }), n] }) } }, 320596: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("454585"), o = n("273744"), l = n("689938"), u = n("419076"), d = n("611273"); let _ = e => { let { data: { title: t, subtitle: n, placeholder: _, rows: c, character_limit: E, pattern: I }, onChange: T, initialText: f, isRequired: S } = e, h = r.useRef(a.default.reactParserFor({ ...a.default.defaultRules, link: o.LinkMarkupRule })), [A, m] = r.useState(""), [N, p] = r.useState(""); r.useEffect(() => { var e; m(null !== (e = null == f ? void 0 : f.value) && void 0 !== e ? e : "") }, [f]); let O = r.useCallback(e => { let t = null != I ? new RegExp(I) : null; null != t && null == t.exec(e) ? (p(l.default.Messages.IN_APP_REPORTING_FREE_TEXT_INPUT_ERROR), T({ value: e, isValid: !1 })) : null != e && (p(""), m(e), T({ value: e, isValid: !0 })) }, [T, I]); return (0, i.jsxs)("div", { className: d.marginBottom8, children: [null != t && (0, i.jsx)("div", { className: d.marginBottom8, children: (0, i.jsxs)(s.Text, { variant: "text-sm/bold", children: [t, S && (0, i.jsx)("span", { className: u.required, children: "*" })] }) }), (0, i.jsx)(s.TextArea, { maxLength: E, onChange: O, value: A, error: N, rows: c, placeholder: _, autoFocus: !0 }), null != n && (0, i.jsx)("div", { children: (0, i.jsx)(s.Text, { variant: "text-sm/normal", children: h.current(n) }) })] }) }; t.default = e => { let { elements: t, onChange: n, state: r } = e, s = t.map(e => { var t; let s = e.name; return (0, i.jsx)(_, { data: e.data, onChange: e => n(s, e.value, e.isValid), initialText: null !== (t = null == r ? void 0 : r[s]) && void 0 !== t ? t : void 0, isRequired: e.should_submit_data }, s) }); return (0, i.jsx)("div", { children: s }) } }, 273514: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("592125"), a = n("430824"), o = n("346656"), l = n("689938"), u = n("645944"); t.default = e => { let { entry: t } = e, n = s.default.getChannel(t.channelId); if (null == n) return null; let d = a.default.getGuild(n.guild_id); return null == d ? null : (0, i.jsxs)("div", { className: u.container, children: [(0, i.jsx)(r.Heading, { className: u.header, variant: "heading-sm/semibold", children: l.default.Messages.REPORT_MODAL_SERVER_PREVIEW_HEADER }), (0, i.jsxs)("div", { className: u.guildContainer, children: [(0, i.jsxs)("div", { className: u.hubInfo, children: [(0, i.jsx)(o.default, { guild: d, size: o.default.Sizes.MINI, className: u.hubIcon }), (0, i.jsx)(r.Text, { color: "header-secondary", variant: "text-sm/normal", children: d.name })] }), (0, i.jsx)(r.Text, { variant: "text-md/semibold", color: "header-primary", children: t.name })] })] }) } }, 995712: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("806519"), a = n("768581"), o = n("689938"), l = n("359959"); t.default = e => { var t; let { entry: n } = e, { id: u, icon: d, name: _ } = n, c = null !== (t = a.default.getGuildIconURL({ id: u, icon: d, size: 32 })) && void 0 !== t ? t : void 0; return (0, i.jsxs)("div", { className: l.container, children: [(0, i.jsx)(r.Heading, { className: l.header, variant: "heading-sm/semibold", children: o.default.Messages.REPORT_MODAL_SERVER_PREVIEW_HEADER }), (0, i.jsx)("div", { className: l.guildContainer, children: (0, i.jsxs)("div", { className: l.guildInfo, children: [(0, i.jsx)(s.default, { mask: s.default.Masks.SQUIRCLE, width: 32, height: 32, className: l.guildIconMask, children: (0, i.jsx)("img", { src: c, alt: "", className: l.guildIcon }) }), (0, i.jsx)(r.Text, { color: "header-secondary", variant: "text-sm/normal", children: _ })] }) })] }) } }, 234937: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("430824"), o = n("346656"), l = n("689938"), u = n("294485"); t.default = e => { let { event: t } = e, n = (0, r.useStateFromStores)([a.default], () => a.default.getGuild(t.guild_id)); return null == n ? null : (0, i.jsxs)("div", { className: u.container, children: [(0, i.jsx)(s.Heading, { className: u.header, variant: "heading-sm/semibold", children: l.default.Messages.MOBILE_REPORTS_EVENT_PREVIEW_TITLE }), (0, i.jsxs)("div", { className: u.guildContainer, children: [(0, i.jsxs)("div", { className: u.guildInfo, children: [(0, i.jsx)(o.default, { guild: n, size: o.default.Sizes.MINI, className: u.guildIcon }), (0, i.jsx)(s.Text, { color: "header-secondary", variant: "text-sm/normal", children: n.name })] }), (0, i.jsx)(s.Text, { variant: "text-md/semibold", color: "header-primary", children: t.name })] })] }) } }, 473121: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("454585"), o = n("273744"), l = n("689938"), u = n("991917"); t.default = e => { let { node: { header: t, subheader: n, button: d } } = e, _ = (null == d ? void 0 : d.type) === "submit", c = r.useRef(a.default.reactParserFor({ ...a.default.defaultRules, link: o.LinkMarkupRule })); return (0, i.jsxs)("div", { className: u.headerContainer, children: [null != t && "" !== t ? (0, i.jsx)(s.Heading, { variant: "heading-xl/semibold", color: "header-primary", children: t }) : null, null != n && "" !== t ? (0, i.jsx)(s.Text, { variant: "text-md/normal", color: "header-secondary", children: c.current(n) }) : null, _ && (0, i.jsx)(s.Text, { variant: "text-sm/normal", children: l.default.Messages.MOBILE_REPORTS_SUBMIT_INFO_TEXT.format() })] }) } }, 449413: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("454585"), a = n("474333"), o = n("273744"), l = n("336967"); t.default = e => { let { node: { info: t } } = e, n = r.useRef(s.default.reactParserFor({ ...s.default.defaultRules, link: o.LinkMarkupRule })); return null == t ? null : (0, i.jsx)(a.default, { className: l.infoBox, messageType: a.HelpMessageTypes.INFO, children: n.current(t) }) } }, 266080: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("367907"), o = n("434404"), l = n("430824"), u = n("346656"), d = n("981631"), _ = n("689938"), c = n("93138"); t.default = e => { let { guildId: t, reportId: n } = e, [E, I] = r.useState(!1), T = l.default.getGuild(t), f = null != T; r.useEffect(() => { I(!f) }, [f]); let S = r.useCallback(() => { I(!0), a.default.trackWithMetadata(d.AnalyticEvents.IAR_LEAVE_GUILD_BUTTON_CLICKED, { guild_id: t, report_id: n }), o.default.leaveGuild(t) }, [t, n]); if (null == T) return null; let h = () => { (0, s.openModal)(e => (0, i.jsx)(s.ConfirmModal, { header: _.default.Messages.LEAVE_SERVER_TITLE.format({ name: T.name }), confirmText: _.default.Messages.LEAVE_SERVER, cancelText: _.default.Messages.CANCEL, onConfirm: S, ...e, children: (0, i.jsx)(s.Text, { variant: "text-md/normal", children: _.default.Messages.LEAVE_SERVER_BODY.format({ name: T.name }) }) })) }; return (0, i.jsxs)("div", { className: c.container, children: [(0, i.jsx)(s.Text, { className: c.description, variant: "text-sm/normal", children: _.default.Messages.MOBILE_REPORTS_LEAVE_ELEMENT_DESCRIPTION }), (0, i.jsxs)("div", { className: c.guildContainer, children: [(0, i.jsxs)("div", { className: c.guildInfo, children: [(0, i.jsx)(u.default, { guild: T, showBadge: !1, animate: !1, size: u.default.Sizes.SMALL, "aria-label": T.name, className: c.icon, active: !0 }), (0, i.jsx)(s.Text, { className: c.guildName, variant: "text-sm/semibold", children: T.name })] }), (0, i.jsx)(s.Button, { onClick: () => h(), disabled: E, size: s.Button.Sizes.SMALL, color: s.Button.Colors.RED, children: E ? _.default.Messages.MOBILE_REPORTS_LEFT_SERVER : _.default.Messages.LEAVE_SERVER })] })] }) } }, 273744: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LinkMarkupRule: function() { return o } }); var i = n("735250"); n("470079"); var r = n("302454"), s = n.n(r), a = n("481060"); let o = { ...s().defaultRules.link, react: function(e, t, n) { return (0, i.jsx)(a.Anchor, { href: e.target, target: "_blank", children: t(e.content, n) }) } } }, 316617: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("739566"), o = n("25015"), l = n("592125"), u = n("998951"), d = n("113039"), _ = n("778947"), c = n("512665"), E = n("768760"), I = n("689938"), T = n("287889"); t.default = e => { let { message: t } = e, n = (0, a.default)(t), f = (0, r.useStateFromStores)([l.default], () => l.default.getChannel(t.channel_id)), { content: S } = (0, o.default)(t, { hideSimpleEmbedContent: !1 }); return null == f ? null : (0, i.jsxs)("div", { className: T.container, children: [(0, i.jsx)(s.Heading, { className: T.header, variant: "heading-sm/semibold", children: I.default.Messages.MOBILE_REPORTS_MESSAGE_PREVIEW_TITLE }), (0, i.jsx)(s.Scroller, { className: T.messagePreviewContainer, children: (0, i.jsx)(u.default, { childrenMessageContent: (() => { if (null == S || "" === S || Array.isArray(S) && 0 === S.length) { let { trailingIcon: e } = (0, c.renderSingleLineMessage)(t, S, !1, "", { leadingIconClass: T.attachmentIcon, trailingIconClass: T.attachmentIcon, iconSize: E.SINGLE_LINE_MESSAGE_DEFAULT_ICON_SIZE }); return e } return (0, i.jsx)(d.default, { message: t, content: S }) })(), childrenHeader: (0, i.jsx)(_.default, { message: t, channel: f, author: n, guildId: f.guild_id }), disableInteraction: !0 }) })] }) } }, 15682: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("586724"); let a = e => { let { onChange: t, label: n, subtitle: a, selected: o } = e; return (0, i.jsx)("div", { className: s.checkboxRow, children: (0, i.jsxs)(r.Checkbox, { type: r.Checkbox.Types.INVERTED, onChange: () => t(), value: o, children: [(0, i.jsx)(r.Text, { color: "interactive-active", variant: "text-md/semibold", children: n }), null != a ? (0, i.jsx)(r.Text, { color: "interactive-active", variant: "text-sm/normal", children: a }) : null] }) }) }; t.default = e => { let { element: t, state: n, onChange: r } = e; if ((null == t ? void 0 : t.type) !== "checkbox") return null; let { data: s } = t; return (0, i.jsx)("div", { children: s.map((e, t) => { let [s, o, l] = e; return (0, i.jsx)(a, { onChange: () => r(s, o), selected: s in n, label: o, subtitle: l }, "".concat(t, "+button")) }) }) } }, 905434: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("430824"), a = n("346656"), o = n("689938"), l = n("937402"); t.default = e => { let { stageInstance: t } = e, n = s.default.getGuild(t.guild_id); return null == n ? null : (0, i.jsxs)("div", { className: l.container, children: [(0, i.jsx)(r.Heading, { className: l.header, variant: "heading-sm/semibold", children: o.default.Messages.MOBILE_REPORTS_STAGE_CHANNEL_PREVIEW_TITLE }), (0, i.jsxs)("div", { className: l.guildContainer, children: [(0, i.jsxs)("div", { className: l.guildInfo, children: [(0, i.jsx)(a.default, { guild: n, size: a.default.Sizes.MINI, className: l.guildIcon }), (0, i.jsx)(r.Text, { color: "header-secondary", variant: "text-sm/normal", children: n.name })] }), (0, i.jsx)(r.Text, { variant: "text-md/semibold", color: "header-primary", children: t.topic })] })] }) } }, 196627: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("417995"); let s = n("848304"); t.default = e => { let { element: t } = e; return (null == t ? void 0 : t.type) !== "success" ? null : (0, i.jsx)("img", { alt: "", src: s, className: r.successImg }) } }, 739319: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("454585"), u = n("572004"), d = n("689938"), _ = n("501496"); function c(e) { let { element: { data: { title: t, body: n, sms: s, is_localized: c } } } = e, [E, I] = r.useState(!1), T = r.useRef(l.default.reactParserFor(l.default.defaultRules)); return c ? (0, i.jsxs)("div", { className: _.container, children: [(0, i.jsx)(o.Heading, { variant: "heading-sm/semibold", color: "header-secondary", className: _.header, children: t }), (0, i.jsx)(o.Text, { variant: "text-sm/normal", className: _.bodyText, children: T.current(n) }), (0, i.jsx)("div", { className: _.__invalid_smsInfoContainer, children: (0, i.jsxs)("div", { className: a()(_.smsNumberContainer, { [_.copied]: E }), children: [(0, i.jsx)(o.Text, { variant: "text-md/normal", selectable: !0, className: _.smsNumberText, children: s }), (0, i.jsx)(o.Button, { size: o.Button.Sizes.SMALL, className: _.__invalid_trailingButton, onClick: () => { (0, u.copy)(s) && I(!0) }, color: o.Button.Colors.PRIMARY, children: E ? d.default.Messages.COPIED : d.default.Messages.COPY })] }) })] }) : null } }, 842401: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("99690"), a = n("689938"), o = n("412356"); t.default = e => { let { user: t } = e; return (0, i.jsxs)("div", { className: o.container, children: [(0, i.jsx)(r.Heading, { className: o.header, variant: "heading-sm/semibold", children: a.default.Messages.REPORTS_USER_PREVIEW_TITLE }), (0, i.jsx)("div", { className: o.userContainer, children: (0, i.jsxs)("div", { className: o.userInfo, children: [(0, i.jsx)(s.default, { className: o.userIcon, user: t, size: r.AvatarSizes.SIZE_40 }), (0, i.jsxs)("div", { children: [null != t.globalName && (0, i.jsx)(r.Text, { variant: "text-md/semibold", color: "header-primary", children: t.globalName }), (0, i.jsx)(r.Text, { color: "header-secondary", variant: "text-sm/normal", children: t.username })] })] }) })] }) } }, 245335: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { InstantInviteModalPages: function() { return a }, InviteTargetTypes: function() { return s }, InviteTypes: function() { return r } }), (o = i || (i = {})).SENDING = "sending", o.SENT = "sent", o.ERROR = "error", (l = r || (r = {}))[l.GUILD = 0] = "GUILD", l[l.GROUP_DM = 1] = "GROUP_DM", l[l.FRIEND = 2] = "FRIEND", (u = s || (s = {}))[u.STREAM = 1] = "STREAM", u[u.EMBEDDED_APPLICATION = 2] = "EMBEDDED_APPLICATION", u[u.ROLE_SUBSCRIPTIONS_PURCHASE = 3] = "ROLE_SUBSCRIPTIONS_PURCHASE", (d = a || (a = {})).MAIN = "main", d.SETTINGS = "settings", d.GUEST = "guest" }, 264229: function(e, t, n) { "use strict"; n.r(t), n.d(t, { generateInviteKeyFromExtraData: function() { return o }, generateInviteKeyFromUrlParams: function() { return a }, parseExtraDataFromInviteKey: function() { return l }, parseInviteCodeFromInviteKey: function() { return u } }), n("47120"); var i = n("664751"), r = n("898450"); let s = "event"; function a(e, t) { return null == t ? e : o({ baseCode: e, guildScheduledEventId: function(e) { let t = "?" === e.charAt(0) ? e.substring(1) : e; try { let e = i.parse(t); return (0, r.getFirstQueryStringValue)(e[s]) } catch (e) { return } }(t) }) } function o(e) { let { baseCode: t, guildScheduledEventId: n } = e; return null == n ? t : "".concat(t, "?").concat(s, "=").concat(n) } function l(e) { let [t, n] = e.split("?"); if (null == n) return { baseCode: t }; let a = i.parse(n); return { baseCode: t, guildScheduledEventId: (0, r.getFirstQueryStringValue)(a[s]) } } function u(e) { let [t] = e.split("?"); return t } }, 413605: function(e, t, n) { "use strict"; n.r(t), n.d(t, { InviteTypes: function() { return s.InviteTypes }, getInviteType: function() { return _ }, isEmbeddedApplicationInvite: function() { return d }, isGuildScheduledEventInviteEmbed: function() { return a }, isRoleSubscriptionInvite: function() { return o }, isStageInviteEmbed: function() { return l }, isStreamInvite: function() { return u } }); var i = n("924301"), r = n("131704"), s = n("245335"); function a(e) { let t = e.guild_scheduled_event; return null != t && (0, i.isEventUpcoming)(t) } function o(e) { return e.target_type === s.InviteTargetTypes.ROLE_SUBSCRIPTIONS_PURCHASE } function l(e) { return null != e.channel && null != e.stage_instance } function u(e) { return e.target_type === s.InviteTargetTypes.STREAM && null != e.target_user } function d(e) { return e.target_type === s.InviteTargetTypes.EMBEDDED_APPLICATION } function _(e) { var t, n; if ("number" == typeof e.type) return e.type; if ((t = e).type === s.InviteTypes.GROUP_DM || null != t.channel && (0, r.isMultiUserDM)(t.channel.type)) return s.InviteTypes.GROUP_DM; return (n = e).type === s.InviteTypes.FRIEND || null == n.guild && null != n.inviter ? s.InviteTypes.FRIEND : s.InviteTypes.GUILD } }, 366980: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("358085"); function r() { let e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], r = window.GLOBAL_ENV.INVITE_HOST; return (0, i.isAndroid)() ? (r = location.host, e = "/invite/".concat(t)) : e = "/".concat(t), "".concat(n ? "".concat(location.protocol, "//") : "").concat(r).concat(e) } }, 652898: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("990547"), r = n("283693"), s = n("131704"), a = n("314897"), o = n("626135"), l = n("573261"), u = n("264229"), d = n("245335"), _ = n("981631"); function c(e) { let t = null; if (null != e && null != e.channel) { let n = e.channel; t = e.target_type === d.InviteTargetTypes.STREAM ? _.LoggingInviteTypes.STREAM : e.target_type === d.InviteTargetTypes.EMBEDDED_APPLICATION ? _.LoggingInviteTypes.APPLICATION : (0, s.isMultiUserDM)(n.type) ? _.LoggingInviteTypes.GDM_INVITE : null == n || (0, s.isPrivate)(n.type) ? _.LoggingInviteTypes.FRIEND_INVITE : _.LoggingInviteTypes.SERVER_INVITE } return t } function E(e, t, n) { o.default.track(_.AnalyticEvents.INVITE_OPENED, { invite_code: e }); let s = (0, u.parseExtraDataFromInviteKey)(e), d = { ...n, with_counts: !0, with_expiration: !0, guild_scheduled_event_id: s.guildScheduledEventId }; return l.default.get({ url: _.Endpoints.INVITE(s.baseCode), query: d, oldFormErrors: !0, trackedActionData: { event: i.NetworkActionNames.INVITE_RESOLVE, properties: e => { var i, o, l, u, d, E; let I = e.body, T = (null === (i = e.body) || void 0 === i ? void 0 : i.code) === _.AbortCodes.USER_BANNED; return (0, r.exact)({ resolved: e.ok, guild_id: null == I ? void 0 : null === (o = I.guild) || void 0 === o ? void 0 : o.id, channel_id: null == I ? void 0 : null === (l = I.channel) || void 0 === l ? void 0 : l.id, channel_type: null == I ? void 0 : null === (u = I.channel) || void 0 === u ? void 0 : u.type, inviter_id: null == I ? void 0 : null === (d = I.inviter) || void 0 === d ? void 0 : d.id, code: s.baseCode, input_value: null == n ? void 0 : n.inputValue, location: t, authenticated: a.default.isAuthenticated(), size_total: null == I ? void 0 : I.approximate_member_count, size_online: null == I ? void 0 : I.approximate_presence_count, destination_user_id: null == I ? void 0 : null === (E = I.target_user) || void 0 === E ? void 0 : E.id, invite_type: c(I), user_banned: T }) } } }).then(i => { let r = i.body; return null != t && o.default.track(_.AnalyticEvents.INVITE_RESOLVED, { resolved: !0, guild_id: null != r.guild ? r.guild.id : null, channel_id: null != r.channel ? r.channel.id : null, channel_type: null != r.channel ? r.channel.type : null, inviter_id: r.inviter ? r.inviter.id : null, code: s.baseCode, input_value: null == n ? void 0 : n.inputValue, location: t, authenticated: a.default.isAuthenticated(), size_total: r.approximate_member_count, size_online: r.approximate_presence_count, destination_user_id: null != r.target_user ? r.target_user.id : null, invite_type: c(r) }, { flush: !0 }), { invite: r, code: e } }, i => { let r = null != i.body && i.body.code === _.AbortCodes.USER_BANNED; if (null != t) { var l, u; o.default.track(_.AnalyticEvents.INVITE_RESOLVED, { resolved: !1, code: s.baseCode, input_value: null == n ? void 0 : n.inputValue, location: t, authenticated: a.default.isAuthenticated(), user_banned: r, error_code: null === (l = i.body) || void 0 === l ? void 0 : l.code, error_message: null === (u = i.body) || void 0 === u ? void 0 : u.message }, { flush: !0 }) } return { invite: null, code: e, banned: r } }) } }, 280501: function(e, t, n) { "use strict"; var i, r, s, a; function o(e) { return e } n.r(t), n.d(t, { ActionComponentState: function() { return i }, SelectOptionType: function() { return r }, asComponentId: function() { return o } }), (s = i || (i = {}))[s.NORMAL = 0] = "NORMAL", s[s.LOADING = 1] = "LOADING", s[s.DISABLED = 2] = "DISABLED", (a = r || (r = {}))[a.STRING = 1] = "STRING", a[a.USER = 2] = "USER", a[a.ROLE = 3] = "ROLE", a[a.CHANNEL = 4] = "CHANNEL", a[a.GUILD = 5] = "GUILD" }, 292419: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getLayoutComponentErrorText: function() { return c }, transformComponents: function() { return I } }), n("47120"); var i = n("911969"), r = n("622449"), s = n("768494"), a = n("768581"), o = n("823379"), l = n("280501"), u = n("689938"); let d = (e, t) => ({ id: e.id, name: e.name, animated: e.animated, src: t && null != e.id ? a.default.getEmojiURL({ id: e.id, animated: e.animated || !1, size: 48 }) : void 0 }), _ = e => (null == e ? void 0 : e.errorCode) === 429 ? u.default.Messages.INTERACTION_RATE_LIMITED : u.default.Messages.APPLICATION_COMMAND_FAILED, c = (e, t, n) => { let s = (null == e ? void 0 : e.data.interactionType) === i.InteractionTypes.MESSAGE_COMPONENT && (null == e ? void 0 : e.state) === r.InteractionState.FAILED ? e.data.componentId : null; if (null != (null != s ? function(e, t) { if (e.type === i.ComponentType.ACTION_ROW) { var n; return null !== (n = e.components.find(e => e.id === t)) && void 0 !== n ? n : null } }(n, s) : null)) { var a; return null !== (a = null == t ? void 0 : t.interactionError) && void 0 !== a ? a : _(e) } }, E = e => { switch (e) { case i.ComponentType.ACTION_ROW: case i.ComponentType.BUTTON: case i.ComponentType.STRING_SELECT: case i.ComponentType.INPUT_TEXT: case i.ComponentType.USER_SELECT: case i.ComponentType.ROLE_SELECT: case i.ComponentType.MENTIONABLE_SELECT: case i.ComponentType.CHANNEL_SELECT: case i.ComponentType.TEXT: case i.ComponentType.MEDIA_GALLERY: case i.ComponentType.SEPARATOR: return !0 } }; function I(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return e.map((e, n) => (function e(t, n, r) { var a, _, c, I, f, S, h, A; if (!E(t.type)) return null; let { includeEmojiSrc: m } = n; switch (t.type) { case i.ComponentType.ACTION_ROW: { let s = t.components.map((t, i) => (function(t, i) { let s = e(t, n, [...r, i]); return null == s ? null : s })(t, i)).filter(o.isNotNullish); return { type: i.ComponentType.ACTION_ROW, id: T(r), components: s } } case i.ComponentType.BUTTON: { let e = null != t.emoji ? d(t.emoji, m) : void 0; return { type: i.ComponentType.BUTTON, id: T(r), customId: t.custom_id, style: t.style, disabled: t.disabled, url: t.url, label: t.label, emoji: e } } case i.ComponentType.STRING_SELECT: return { type: i.ComponentType.STRING_SELECT, id: T(r), customId: t.custom_id, disabled: t.disabled, options: t.options.map(e => ({ type: l.SelectOptionType.STRING, label: e.label, value: e.value, default: e.default, description: e.description, emoji: null != e.emoji ? d(e.emoji, m) : void 0 })), placeholder: null !== (a = t.placeholder) && void 0 !== a ? a : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER, minValues: t.min_values, maxValues: t.max_values }; case i.ComponentType.INPUT_TEXT: return { type: t.type, id: T(r), style: t.style, customId: t.custom_id, label: t.label, value: t.value, placeholder: t.placeholder, disabled: t.disabled, required: null !== (_ = t.required) && void 0 !== _ && _, minLength: t.min_length, maxLength: t.max_length }; case i.ComponentType.USER_SELECT: return { type: i.ComponentType.USER_SELECT, id: T(r), customId: t.custom_id, disabled: t.disabled, placeholder: null !== (c = t.placeholder) && void 0 !== c ? c : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER, minValues: t.min_values, maxValues: t.max_values, defaultValues: t.default_values }; case i.ComponentType.ROLE_SELECT: return { type: i.ComponentType.ROLE_SELECT, id: T(r), customId: t.custom_id, disabled: t.disabled, placeholder: null !== (I = t.placeholder) && void 0 !== I ? I : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER, minValues: t.min_values, maxValues: t.max_values, defaultValues: t.default_values }; case i.ComponentType.MENTIONABLE_SELECT: return { type: i.ComponentType.MENTIONABLE_SELECT, id: T(r), customId: t.custom_id, disabled: t.disabled, placeholder: null !== (f = t.placeholder) && void 0 !== f ? f : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER, minValues: t.min_values, maxValues: t.max_values, defaultValues: t.default_values }; case i.ComponentType.CHANNEL_SELECT: return { type: i.ComponentType.CHANNEL_SELECT, id: T(r), customId: t.custom_id, disabled: t.disabled, placeholder: null !== (S = t.placeholder) && void 0 !== S ? S : u.default.Messages.MESSAGE_SELECT_COMPONENT_DEFAULT_PLACEHOLDER, minValues: t.min_values, maxValues: t.max_values, channelTypes: t.channel_types, defaultValues: t.default_values }; case i.ComponentType.TEXT: return { type: i.ComponentType.TEXT, id: T(r), content: t.content }; case i.ComponentType.MEDIA_GALLERY: return { type: i.ComponentType.MEDIA_GALLERY, id: T(r), items: t.items.map(e => ({ media: (0, s.toUnfurledMediaItem)(e.media), description: e.description, spoiler: e.spoiler })) }; case i.ComponentType.SEPARATOR: return { type: i.ComponentType.SEPARATOR, id: T(r), divider: null === (h = t.divider) || void 0 === h || h, spacing: null !== (A = t.spacing) && void 0 !== A ? A : i.SeparatorSpacingSize.SMALL }; default: return null } })(e, t, [n])).filter(e => null != e) } function T(e) { return (0, l.asComponentId)(e.join(",")) } }, 189334: function(e, t, n) { "use strict"; n.r(t), n.d(t, { INTERACTION_IFRAME_MODAL_ANALYTICS_TYPE: function() { return d } }), n("47120"); var i = n("147913"), r = n("282397"), s = n("626135"), a = n("131595"), o = n("475774"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = "interaction_iframe_modal"; async function _(e) { let { openInteractionModal: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("29549"), n.e("31605"), n.e("77172"), n.e("8739"), n.e("58286"), n.e("30243"), n.e("69969")]).then(n.bind(n, "440934")); t(e), s.default.track(l.AnalyticEvents.OPEN_MODAL, { type: "interaction_modal", application_id: e.application.id }) } class c extends i.default { constructor(...e) { super(...e), u(this, "iframeModalOpenTimeMs", void 0), u(this, "actions", { INTERACTION_MODAL_CREATE: e => { _(e) }, INTERACTION_IFRAME_MODAL_CREATE: e => { var t; this.iframeModalOpenTimeMs = Date.now(), t = e, (0, o.default)(t), s.default.track(l.AnalyticEvents.OPEN_MODAL, { type: d, application_id: t.application.id }) }, INTERACTION_IFRAME_MODAL_CLOSE: e => { ! function(e, t) { let n = null != t ? Date.now() - t : void 0; s.default.track(l.AnalyticEvents.MODAL_DISMISSED, { type: d, application_id: e.applicationId, duration_open_ms: n }) }(e, this.iframeModalOpenTimeMs), this.iframeModalOpenTimeMs = void 0 }, RPC_APP_DISCONNECTED: e => { ! function(e) { let { application: t } = e, n = r.default.getIFrameModalApplicationId(), i = r.default.getIFrameModalKey(); t.id === n && null != n && (0, a.default)(n, i) }(e) } }) } } t.default = new c }, 131595: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("481060"), r = n("570140"); function s(e, t) { null != t && (0, i.closeModal)(t), r.default.dispatch({ type: "INTERACTION_IFRAME_MODAL_CLOSE", applicationId: e }) } }, 475774: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("570140"); async function a(e) { let t = await (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("8739"), n.e("57650")]).then(n.bind(n, "677012")); return n => (0, i.jsx)(t, { ...n, ...e }) }, { onCloseCallback: () => { s.default.dispatch({ type: "INTERACTION_IFRAME_MODAL_CLOSE", applicationId: e.application.id }) } }); s.default.dispatch({ type: "INTERACTION_IFRAME_MODAL_KEY_CREATE", modalKey: t }) } }, 603721: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addQueued: function() { return o }, fetchMessageInteractionData: function() { return u }, queueInteractionComponentState: function() { return a }, setFailed: function() { return l } }); var i = n("544891"), r = n("570140"), s = n("981631"); function a(e, t, n, i) { r.default.dispatch({ type: "QUEUE_INTERACTION_COMPONENT_STATE", messageId: e, nonce: t, state: n, componentId: i }) } function o(e, t) { let { data: n, messageId: i, onCreate: s, onSuccess: a, onFailure: o } = t; r.default.dispatch({ type: "INTERACTION_QUEUE", data: n, nonce: e, messageId: i, onCreate: s, onSuccess: a, onFailure: o }) } function l(e, t, n) { r.default.dispatch({ type: "INTERACTION_FAILURE", nonce: e, errorMessage: n, errorCode: t }) } async function u(e, t) { let n = await i.HTTP.get({ url: s.Endpoints.MESSAGE_INTERACTION_DATA(e, t), oldFormErrors: !0 }); if (n.ok) { let i = n.body; r.default.dispatch({ type: "LOAD_MESSAGE_INTERACTION_DATA_SUCCESS", channelId: e, messageId: t, interactionData: i }) } } }, 282397: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"); var s, a, o, l, u = n("442837"), d = n("570140"), _ = n("911969"), c = n("314897"), E = n("592125"), I = n("622449"); let T = {}, f = {}, S = {}; function h(e) { var t; if (null == e) return !1; let n = T[e]; if (null == n) return !1; null === (t = n.onSuccess) || void 0 === t || t.call(n), A(e) } function A(e) { delete T[e]; let t = S[e]; null != t && delete f[t], delete S[e] } class m extends(s = u.default.Store) { getInteraction(e) { let t = f[e.id]; return null != t ? T[t] : null } getMessageInteractionStates() { let e = {}; for (let [t, n] of Object.entries(T)) { let i = S[t]; null != i && (e[i] = n.state) } return e } canQueueInteraction(e, t) { let n = f[e]; return (null == n || null == T[n] || T[n].state === I.InteractionState.FAILED) && (null == T[t] || T[t].state === I.InteractionState.FAILED) && !0 } getIFrameModalApplicationId() { return r } getIFrameModalKey() { return i } } l = "InteractionStore", (o = "displayName") in(a = m) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new m(d.default, { LOGOUT: function() { T = {}, f = {}, S = {} }, INTERACTION_QUEUE: function(e) { let { nonce: t, messageId: n, data: i, onCreate: r, onCancel: s, onSuccess: a, onFailure: o } = e; null != n && (f[n] = t, S[t] = n), T[t] = { state: I.InteractionState.QUEUED, data: i, onCreate: r, onCancel: s, onSuccess: a, onFailure: o } }, INTERACTION_CREATE: function(e) { var t; let { nonce: n, interactionId: i } = e; if (null == n) return !1; let r = T[n]; if (null == r || r.state !== I.InteractionState.QUEUED) return !1; r.state = I.InteractionState.CREATED, null === (t = r.onCreate) || void 0 === t || t.call(r, i) }, INTERACTION_SUCCESS: function(e) { let { nonce: t } = e; h(t) }, INTERACTION_FAILURE: function(e) { var t; let { nonce: n, errorCode: i, errorMessage: r } = e; if (null == n) return !1; let s = T[n]; if (null == s) return !1; null === (t = s.onFailure) || void 0 === t || t.call(s, i, r), s.data.interactionType === _.InteractionTypes.APPLICATION_COMMAND ? A(n) : T[n] = { ...s, state: I.InteractionState.FAILED, errorCode: i, errorMessage: r } }, MESSAGE_CREATE: function(e) { let { message: t } = e; if (null == t.nonce) return !1; { var n; let e = T[t.nonce]; if (null == e) return !1; null === (n = e.onSuccess) || void 0 === n || n.call(e), A(t.nonce) } }, CHANNEL_SELECT: function(e) { let { channelId: t } = e; if (null == E.default.getChannel(t)) return !1; for (let [e, t] of Object.entries(T)) t.state === I.InteractionState.FAILED && A(e) }, INTERACTION_IFRAME_MODAL_CREATE: function(e) { let { application: t } = e; r = t.id }, INTERACTION_IFRAME_MODAL_CLOSE: function() { i = void 0, r = void 0 }, INTERACTION_IFRAME_MODAL_KEY_CREATE: function(e) { let { modalKey: t } = e; i = t }, EMBEDDED_ACTIVITY_UPDATE_V2: function(e) { let { participants: t } = e, n = c.default.getSessionId(), i = c.default.getId(), r = t.find(e => e.user_id === i && e.session_id === n); null != r && null != r.nonce && h(r.nonce) } }) }, 622449: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { InteractionState: function() { return i } }), (r = i || (i = {}))[r.QUEUED = 0] = "QUEUED", r[r.CREATED = 1] = "CREATED", r[r.FAILED = 2] = "FAILED" }, 188597: function(e, t, n) { "use strict"; n.r(t), n.d(t, { InteractionStatusViewState: function() { return i }, canRetryInteractionData: function() { return O }, executeMessageComponentInteraction: function() { return h }, executePrimaryEntryPointInteraction: function() { return A }, getInteractionStatusViewState: function() { return p }, getInteractionTimeoutTimestamp: function() { return S }, handleInteractionResponse: function() { return N } }), n("47120"); var i, r, s = n("544891"), a = n("570140"), o = n("904245"), l = n("911969"), u = n("346479"), d = n("314897"), _ = n("709054"), c = n("603721"), E = n("282397"), I = n("622449"), T = n("96989"), f = n("981631"); function S(e) { return null == e || "" === e || Number.isNaN(e) ? Date.now() : _.default.extractTimestamp(e) + 9e5 } let h = async e => { let { componentType: t, messageId: n, messageFlags: i, customId: r, componentId: a, applicationId: o, channelId: I, guildId: T, localState: S } = e, h = _.default.fromTimestamp(Date.now()); if (!E.default.canQueueInteraction(n, h)) return; await u.default.unarchiveThreadIfNecessary(I), (0, c.addQueued)(h, { messageId: n, data: { interactionType: l.InteractionTypes.MESSAGE_COMPONENT, customId: r, componentId: a }, onFailure: (e, t) => m(I, e, t) }), null != S && (0, c.queueInteractionComponentState)(n, h, S, a); let A = { type: l.InteractionTypes.MESSAGE_COMPONENT, nonce: h, guild_id: T, channel_id: I, message_flags: i, message_id: n, application_id: o, session_id: d.default.getSessionId(), data: { component_type: t, custom_id: r, ... function(e) { if (null == e) return null; if (e.type === l.ComponentType.STRING_SELECT || e.type === l.ComponentType.INPUT_TEXT) return e; let t = e.selectedOptions.map(e => e.value); return { type: e.type, values: t } }(S) } }; await s.HTTP.post({ url: f.Endpoints.INTERACTIONS, body: A, timeout: 3e3 }, e => { N(h, e, o, I, T) }) }, A = async e => { let { applicationId: t, channelId: n, guildId: i, command: r } = e, a = _.default.fromTimestamp(Date.now()), o = null == r ? { type: l.ApplicationCommandType.PRIMARY_ENTRY_POINT } : { application_id: t, name: r.name, type: r.type, version: r.version, id: r.id }, u = { type: l.InteractionTypes.APPLICATION_COMMAND, nonce: a, guild_id: i, channel_id: n, application_id: t, session_id: d.default.getSessionId(), data: o }; await s.HTTP.post({ url: f.Endpoints.INTERACTIONS, body: u, timeout: 3e3 }, e => { N(a, e, t, n, i) }) }, m = (e, t, n) => { null == n && null != t && o.default.sendClydeError(e, t) }, N = (e, t, n, i, r) => { if (!t.ok) { if (!t.hasErr) { var s; if (t.status >= 400 && t.status < 500 && t.body) { if (t.body.code === f.AbortCodes.INVALID_FORM_BODY && t.body.errors) { let s = (0, T.getFirstSkemaError)(t.body.errors); null != s && ("INTERACTION_APPLICATION_COMMAND_INVALID_VERSION" === s.code || "INTERACTION_APPLICATION_COMMAND_INVALID" === s.code) && a.default.dispatch({ type: "APPLICATION_COMMAND_EXECUTE_BAD_VERSION", applicationId: n, channelId: i, guildId: null != r ? r : null }), (0, c.setFailed)(e, void 0, null == s ? void 0 : s.message); return }(0, c.setFailed)(e, void 0, t.body.message); return }(0, c.setFailed)(e, null === (s = t.body) || void 0 === s ? void 0 : s.code); return }(0, c.setFailed)(e) } }; (r = i || (i = {}))[r.SENDING = 0] = "SENDING", r[r.CREATED = 1] = "CREATED", r[r.FAILED = 2] = "FAILED", r[r.TIMED_OUT = 3] = "TIMED_OUT", r[r.EPHEMERAL_SUCCESS = 4] = "EPHEMERAL_SUCCESS"; let p = (e, t) => { var n; let i = null == t ? void 0 : t.state, r = e.state === f.MessageStates.SENT && S(e.id) < Date.now(); let s = e.state === f.MessageStates.SEND_FAILED && (null == (n = e.id) || "" === n || Number.isNaN(n) ? Date.now() : _.default.extractTimestamp(n) + 3e3) < Date.now(), a = (null == t ? void 0 : t.data.interactionType) === l.InteractionTypes.APPLICATION_COMMAND, o = e.isCommandType(); if (a && i === I.InteractionState.QUEUED || o && e.state === f.MessageStates.SENDING && null != t) return 0; if (a && i === I.InteractionState.CREATED || e.hasFlag(f.MessageFlags.LOADING) && !r) return 1; if (null != e.interaction && e.hasFlag(f.MessageFlags.LOADING) && r) return 3; else if (null != e.interaction && !e.hasFlag(f.MessageFlags.LOADING) && s) return 3; else if (o && e.state === f.MessageStates.SEND_FAILED) return 2; else if (null != e.interaction && e.hasFlag(f.MessageFlags.EPHEMERAL)) return 4 }; function O(e) { let t = e.options; for (; (null == t ? void 0 : t.length) === 1 && (t[0].type === l.ApplicationCommandOptionType.SUB_COMMAND_GROUP || t[0].type === l.ApplicationCommandOptionType.SUB_COMMAND);) t = t[0].options; for (let e of null != t ? t : []) if (e.type === l.ApplicationCommandOptionType.ATTACHMENT) return !1; return !0 } }, 96989: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getFirstSkemaError: function() { return r } }), n("47120"); let i = "_errors"; function r(e) { return function e(t, n) { let r = t[i]; if (null != r && Array.isArray(r)) return r[0]; for (let [r, s] of Object.entries(t)) if (r !== i && null != s && "object" == typeof s) return e(s, null != n ? n : r); return null }(e, void 0) } }, 420212: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FOCUS_SECTION_JUMP_KEY: function() { return a }, KeyboardEventKey: function() { return s.Key }, KeyboardKeysUpdated: function() { return i }, NavigationKeyShortcutMap: function() { return o }, NavigationShortcuts: function() { return l } }), n("47120"); var i, r, s = n("15858"); let a = s.Key.F6, o = new Map([ [s.Key.F6, "f6"], [s.Key.Tab, "tab"], [s.Key.ArrowDown, "down"], [s.Key.ArrowUp, "up"], [s.Key.ArrowLeft, "left"], [s.Key.ArrowRight, "right"], [s.Key.Home, "home"], [s.Key.End, "end"] ]), l = new Set(["tab", "shift+tab", "down", "up", "left", "right", "home", "end"]); (r = i || (i = {})).ENTER = "Enter", r.TAB = "Tab", r.SPACE = " ", r.ESCAPE = "Escape", r.SHIFT = "Shift" }, 592204: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForKeywordFiltering: function() { return s }, useIsEligibleForKeywordFiltering: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_keyword_filter_experiment", label: "Replace registered keywords with asterisks", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Keyword Filter", config: { enabled: !0 } }] }); function r(e) { let { location: t } = e; return i.useExperiment({ location: t }, { autoTrackExposure: !0 }).enabled } function s(e) { let { location: t } = e; return i.getCurrentConfig({ location: t }).enabled } }, 803141: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("695346"), r = n("412788"), s = n("932941"), a = n("363072"), o = n("526761"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = null; function d() { let { profanity: e = !1, slurs: t = !1, sexualContent: n = !1 } = i.KeywordFilterSettings.getSetting(), r = [...e ? s.PROFANITY_KEYWORD_LIST : [], ...t ? s.SLURS_KEYWORD_LIST : [], ...n ? s.SEXUAL_CONTENT_KEYWORD_LIST : []]; (u = new a.Trie).addWords(r) } function _() { d() } function c() { d() } function E(e) { let { local: t, settings: n } = e; if (!t || n.type !== o.UserSettingsTypes.PRELOADED_USER_SETTINGS) return !1; null != u && u.clear(), d() } class I extends r.default { loadCache() { let e = this.readSnapshot(I.LATEST_SNAPSHOT_VERSION); null != e && (u = null != e.keywordTrie ? a.Trie.fromSnapshot(e.keywordTrie) : null) } takeSnapshot() { return { version: I.LATEST_SNAPSHOT_VERSION, data: { keywordTrie: u } } } getKeywordTrie() { return u } initializeForKeywordTests() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; ! function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; null == u && (u = new a.Trie), u.addWords(e) }(e) } constructor() { super({ CONNECTION_OPEN: _, CONNECTION_OPEN_SUPPLEMENTAL: _, CACHE_LOADED: () => this.loadCache(), OVERLAY_INITIALIZE: c, USER_SETTINGS_PROTO_UPDATE: E }) } } l(I, "displayName", "KeywordFilterStore"), l(I, "LATEST_SNAPSHOT_VERSION", 2), t.default = new I }, 932941: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PROFANITY_KEYWORD_LIST: function() { return i }, SEXUAL_CONTENT_KEYWORD_LIST: function() { return r }, SLURS_KEYWORD_LIST: function() { return s } }); let i = ["asscock", "assfuck", "assfucker", "assnigger", "assrape", "b!tch", "b1tch", "batshit", "bitch", "bitchass", "bitchtits", "boyfucking", "boypussy", "bullshit", "buttfuck", "buttfucka", "buttfucker", "buttplay", "buttsex", "c|_|nt", "camel fucker", "camslut", "camwhore", "camwhores", "choad", "chode", "clitfuck", "clusterfuck", "cnut", "cockmongler", "cockmongruel", "cockmuncher", "cocknugget", "cocksucka", "cocksucker", "cocksuckers", "cocksuckin", "coon ass", "cousin-fucker", "cowfuck", "cucklord", "cuckold", "cuckshit", "cucktard", "cumslut", "cunt", "cuntrag", "dickface", "dickfucker", "dipshit", "dogfucking", "dumbfuck", "f4gg0t*", "f4ggot*", "facefuck", "facefucked", "faggot*", "faggotcock", "fagit", "fagtard", "fat bitch", "fcknig", "feggit", "feggot", "finger-fuck", "fingerfuck", "fistfuck", "fking", "fucc", "fuck", "f\xfack", "f\xfbck", "f\xfcck", "fuckable", "fuckass", "fuckbag", "fuckboy", "fuckbuddies", "fuckbuddy", "fucked", "fucker", "fuckery", "fuckface", "fuckhead", "fuckhole", "fucking", "fucknig", "fucknut", "fucknutt", "fuckoff", "fuckpigs", "fucktard", "fucktart", "fuckup", "fuckwad", "fuckwitt", "fuicking", "fuk", "gayfuck", "homodumbshit", "k|_|nt", "kyke", "manslut", "manwhore", "mongtard", "mothafucka", "mothafuckin", "motherfucker", "motherfucking", "n!bb3r*", "n!bber*", "n!gg3r*", "n!gger*", "n!kk3r*", "n!kker*", "n!qq3r*", "n!qqer*", "n|bb3r*", "n|bber*", "n|gg3r*", "n|gger*", "n|kk3r*", "n|kker*", "n|qq3r*", "n|qqer*", "n1bb3r*", "n1bber*", "n1gg", "n1gg3r*", "n1gger*", "n1igger*", "n1kk3r*", "n1kker*", "n1qq3r*", "n1qqer*", "nibb3r", "nibber", "niccer", "nick gur", "nigaboo", "nigg", "nigg3r", "niggar", "niggeer", "nigger*", "niggir", "niggor", "niggur", "niggurs", "nikk3r", "nikker", "niqq3r", "niqqer", "pu$$y", "pussy licking", "pussyjob", "pussylicking", "q|_|nt", "queerhole", "qunt", "r3t4rd", "r3tar", "retard", "rētard", "retarde", "retarded", "retardi", "retards", "retart", "retrad", "ritard", "ritarded", "rtard", "s-h-i-t", "s-hit", "scumfuck", "sh-it", "sheepfucker", "shit", "shitass", "shitbag", "shitbrains", "shitcunt", "shitdick", "shiteaters", "shitface", "shithead", "shithole", "shitshow", "shitskin", "shitspitter", "shitstain", "shitty", "shlt", "skullfuck", "slut", "slutwife", "spergtard", "spicshit", "spictard", "suck my dick", "throatfuck", "throatfucked", "throatfucking", "titfuck", "titfucking", "titfucks", "tittfuck", "tittyfuck", "tittyfucking", "tittyfucks", "to fuck", "uglyfuck", "whore"], r = ["69ing", "amateur porn", "anal sex", "analsex", "anilingus", "anillingus", "assbanger", "asscock", "assfuck", "assfucker", "asslicker", "asslicking", "assnigger", "assrape", "auto erotic", "autoerotic", "autofellatio", "ball sucking", "balls deep", "bangbros", "barely legal", "bdsm", "bean flicker", "beat my meat", "beaver lips", "beef curtain", "big black cock", "big black dick", "big breasted women", "big cock", "big dick", "big knockers", "big milkers", "big tits", "bislut", "black cock", "blacked raw", "blow job", "blowbang", "blowie", "blowj", "blowjob", "blowjobs", "blumpkin", "boipussy", "bondage", "boner", "boyfucking", "boypussy", "brazzers", "bukake", "bukakke", "bukkake", "bukkakese", "bunnygirl", "butt plug", "buttfuck", "buttfucka", "buttfucker", "buttplay", "buttsex", "c|_|nt", "c0ck", "camel fucker", "camel toe", "cameltoe", "camgirl", "camslut", "camwhore", "camwhores", "chaturbate", "chicks with dicks", "choad", "chode", "clitfuck", "clitless", "cnut", "cock", "cockface", "cockgobbler", "cockhead", "cockhole", "cockmeat", "cocksucka", "cocksucker", "cocksuckers", "cocksuckin", "coochie", "creampie", "creampied", "creampieing", "creampies", "cuckholding", "cuckholdry", "cucking", "cuckish", "cucklord", "cuckold", "cuckolding", "cuckolds", "cuckshed", "cucky", "cum", "cumed", "cumguzzler", "cumhole", "cuming", "cummed", "cummers", "cummies", "cumming", "cumshot", "cumshots", "cumskin", "cumslut", "cumsucking", "cumswallow", "cumtart", "cunnilingus", "cunnillingus", "cunt", "cuntrag", "deep throat", "deep throating", "deep-throat", "deep-throated", "deep-throating", "deepthroat", "deepthroated", "deepthroating", "deepthroats", "dick-sneeze", "dickcheese", "dickface", "dickfucker", "dickgirls", "dickhole", "dickjuice", "dicklicker", "dickmilk", "dickride", "dickriding", "dickslap", "dicksucker", "dildo", "dildoing", "dilfs", "dog style", "dogfucking", "doggie style", "doggiestyle", "doggy stile", "doggy style", "doggystyle", "donkey punch", "double dong", "double penetration", "eat you out", "eat your ass", "eating ass", "ecchi", "ejaculate", "ejaculating", "ero guro", "erotic asphyxiation", "extremetube", "facefuck", "facefucked", "felatio", "felch", "felching", "fellate", "fellatio", "feltch", "feltching", "female squirting", "femdom", "finger-bang", "finger-banging", "finger-fuck", "fingerbang", "fingerbanged", "fingerbanging", "fingerblast", "fingerblasting", "fingered", "fingerfuck", "fingering", "fistfuck", "fisting", "fking", "foot fetish", "foreskin", "fucc", "f\xfack", "f\xfbck", "f\xfcck", "fuck her", "fuck him", "fuckable", "fuckass", "fuckbag", "fuckbuddies", "fuckbuddy", "fuckface", "fuckhole", "fuckpigs", "fuk", "gang bang", "gang rape", "gangbang", "gangrape", "giant cock", "gloryhole", "golden shower", "goopchute", "goregasm", "group sex", "hand job", "handjob", "hardcore porn", "hentai", "Hi! I love sex", "homoerotic", "hornpub", "horny", "hot bi babe", "hotwife", "hubporn", "jack off", "jacking off", "jerk off instructions", "jerking off", "jerkoff", "jizz", "jizzle", "k|_|nt", "kinkiest", "kinkster", "kinky", "limpdick", "livesex", "lolicon", "mangina", "manslut", "manwhore", "masochism", "menage a trois", "micropenis", "milf", "milfs", "missionary position", "mommy milkers", "my dick", "My naked photos", "My sexy photos", "naughtyamerica", "nubiles", "nudes", "nuvid", "oralsex", "orgasm", "orgies", "orgy", "paypig", "piss play", "pissflaps", "pissing porn", "pompoir", "ponyplay", "poon", "poop chute", "poopchute", "pornhub", "pornmd", "porno", "pornography", "pornstar", "pornstars", "porntube", "pov porn", "precum", "precumming", "precums", "pregnancy fetish", "prone bone", "pu$$y", "pussy licking", "pussyjob", "pussylicking", "q|_|nt", "queef", "qunt", "rapeplay", "rawdog", "reality kings", "redtube", "reverse cowgirl", "rimjob", "rimjobworld", "rule 34", "scatplay", "sex toy", "sexbot", "sextape", "shaved beaver", "shaved pussy", "shemale", "shitcunt", "shitdick", "shotacon", "sit on my face", "skeet", "skullfuck", "slampig", "slut", "slutwife", "sodomise", "sodomite", "sodomize", "spankbang", "spankbank", "suck clit", "suck my clit", "suck my dick", "suck my pubes", "teamskeet", "tentacle porn", "throatfuck", "throatfucked", "throatfucking", "throatpie", "thumbzilla", "tiddays", "tiddayz", "tiddes", "tiddie", "tiddied", "tiddies", "tiddy", "tiddys", "titfuck", "titfucking", "titfucks", "tities", "titjob", "tits", "tittay", "titted", "tittes", "tittfuck", "titti", "tittie", "tittied", "titties", "tittiez", "tittle", "titts", "titty", "tittyfuck", "tittyfucking", "tittyfucks", "tittys", "tity", "tnaflix", "to fuck", "tribadism", "tribbing", "upskirt", "urethra play", "vibrator", "voyeurism", "vrporn", "wank", "wankjob", "whore", "xhamster", "xnxx", "xtube", "xvideos", "youporn"], s = ["africoon", "americoon", "arabshits", "assfucker", "asshat", "asshole", "assnigger", "assrape", "asswipe", "autist", "b!tch", "bamboo coon", "betacuck", "blmtard", "brown towel heads", "buttfucka", "buttfucker", "c|_|nt", "camslut", "camwhore", "camwhores", "china-man", "chinaman", "chinamen", "chinc", "chinese wetback", "chink", "cockknocker", "cockknoker", "cockmongler", "cockmongruel", "cockmuncher", "cocknocker", "cocknugget", "cocksucka", "cocksucker", "cocksuckers", "cocksuckin", "coon ass", "cotton picker", "cousin-fucker", "crab rangook", "crabrangook", "cuck", "cuckold", "cucktard", "cumslut", "cunt", "cuntrag", "dipshit", "dogfucking", "dot head", "dumbfuck", "dune coon", "dunecoon", "f4gg0t*", "f4ggot*", "f4gs", "fag", "fagbag", "fagg", "faggot*", "faggotcock", "fagit", "fags", "fagtard", "fat bitch", "feggit", "feggot", "femenazis", "feminazi", "femtards", "fuckboy", "fucker", "fuckface", "fuckhead", "fucknig", "fuckoff", "fuckpigs", "fucktard", "fucktart", "fuckwad", "fuckwitt", "gas the kikes", "gayfuck", "gaylord", "gaytard", "gaywad", "goatfucker", "gook", "gookanese", "hindoo", "homodumbshit", "jackass", "jappos", "japs", "jerkoff", "jewbag", "jewtard", "jigaboo", "jigarooni", "jiggabo", "jiggaboo", "jiggers", "jijjiboo", "joo shill", "k|_|nt", "kill yourself", "kneegrow", "kyke", "kys", "ladyboy", "librtard", "libtard", "libturd", "lolspergs", "manslut", "manwhore", "mentally retarded", "mongaloid", "monglet", "mongloid", "mongoloid", "mongreloids", "mongtard", "mothafucka", "mothafuckin", "motherfucker", "motherfucking", "musloid chimps", "musloids", "n i g g", "n!bb3r*", "n!bber*", "n!gg3r*", "n!gger*", "n!kk3r*", "n!kker*", "n!qq3r*", "n!qqer*", "n|bb3r*", "n|bber*", "n|gg3r*", "n|gger*", "n|kk3r*", "n|kker*", "n|qq3r*", "n|qqer*", "n1bb3r*", "n1bber*", "n1g", "n1gg", "n1gg3r*", "n1gger*", "n1igger*", "n1kk3r*", "n1kker*", "n1qq3r*", "n1qqer*", "negroid", "negros", "neomongloids", "nibb3r", "nibber", "niccer", "nick gur", "nig nog", "nigaboo", "nigar", "nigette", "nigg", "nigg", "nigg3r", "niggar", "nigge", "niggeer", "nigger*", "niggies", "niggin", "niggir", "nigglet", "nigglets", "niggor", "niggr", "niggress", "niggs", "niggur", "niggurs", "niglet", "nignog", "nigor", "nigr", "nigre", "nigress", "nigro", "nigs", "nikk3r", "nikker", "niponese", "niqq3r", "niqqer", "paki", "phag", "phaggot", "pickaninny", "pinkaloid", "poofter", "pooinloo", "poojeet", "porch monkey", "porch monkies", "pu$$y", "q|_|nt", "queerbag", "queerhole", "qunt", "r3t4rd", "r3tar", "rapefugee", "reatard", "reatarded", "retard", "rētard", "retardation", "retarde", "retarded", "retardi", "retards", "retart", "retrad", "ritard", "ritarded", "rotten joo", "rtard", "sand monkey", "sand nigger", "sandnegroes", "sandnigers", "sandniggs", "sandnogs", "schizoid", "scumfuck", "she-man", "sheepfucker", "shekelnose", "shemale", "shitbag", "shitbrains", "shitcunt", "shiteaters", "shitface", "shithead", "shitskin", "shitspitter", "shitstain", "skank", "skanky", "slampig", "slant eye", "slantey-eye'd", "slut", "slutwife", "socket face", "sperg", "sperglord", "spergouts", "spergs", "spergtard", "spic", "spick", "spickaboo", "spicks", "spicshit", "spictard", "spigger", "spik", "squinties", "suck my dick", "that ho over there", "that hoe over there", "the orientals", "towelhead", "towel head", "towel-head", "trannie", "tranny", "turkoids", "turkroach", "uglyfuck", "wanker", "wankjob", "wetback", "wetblack", "whigger", "whore", "wigger", "zipperhead"] }, 141106: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { MatchStrategy: function() { return i }, getMatchedPositions: function() { return u }, isMatch: function() { return l } }), (r = i || (i = {}))[r.ExactMatch = 0] = "ExactMatch", r[r.PrefixMatch = 1] = "PrefixMatch"; let s = e => /\p{P}/gu.test(null != e ? e : "") || " " === e || "" === e, a = (e, t, n) => { if (n - t > e.length) return !1; let i = e.charAt(t - 1), r = e.charAt(n + 1); return s(i) && s(r) }, o = (e, t) => s(e.charAt(t - 1)), l = (e, t, n, i) => { if (1 === i) return o(e, t); return a(e, t, n) }, u = (e, t, n, i) => { if (0 === i) return { start: t, end: n, keyword: e.substring(t, n + 1) }; let r = n; for (; r < e.length - 1 && !s(e.charAt(r + 1));) r++; return { start: t, end: r, keyword: e.substring(t, r + 1) } } }, 603158: function(e, t, n) { "use strict"; n.r(t), n.d(t, { normalize: function() { return l } }); let i = { "|": " " }, r = { "[": " ", "]": " ", "(": " ", ")": " ", "|": " ", "~": " " }, s = { "-": "-", " ": " " }, a = { "​": "", "‌": "", "‍": "", "‎": "", "\uFEFF": "" }, o = { ...s, ...r, ...a, ...i }; function l(e) { let t = ""; for (let n = 0; n < e.length; n++) { let i = e[n]; null != o[i] ? t += o[i] : /[\p{Pd}\p{Pc}\p{Po}]/gu.test(i) ? t += " " : t += i } return t.toLowerCase() } }, 363072: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Trie: function() { return o } }); var i = n("141106"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let s = e => "*" === e.charAt(e.length - 1) ? i.MatchStrategy.PrefixMatch : i.MatchStrategy.ExactMatch; class a { _internalAdd(e, t, n) { let i = e.charAt(0), r = this.suffix[i]; null == r && (r = new a, this.suffix[i] = r, null != n ? r.value = n.slice(0, n.length - e.length + 1) : r.value = i), e.length > 1 && "*" !== e.charAt(1) ? r._internalAdd(e.substring(1), t, null != n ? n : e) : (r.strategy = s(t), r.isWord = !0) } add(e) { this._internalAdd(e, e) } constructor() { r(this, "isWord", void 0), r(this, "value", void 0), r(this, "suffix", {}), r(this, "strategy", void 0), this.isWord = null, this.value = null, this.suffix = {}, this.strategy = i.MatchStrategy.ExactMatch } } class o { static fromSnapshot(e) { let t = new o; return t.trie = e.trie, t } search(e) { let t = this.trie, n = null, r = null, s = {}; for (let l = 0; l <= e.length; l++) if (n = e.charAt(l), (t = null != (r = t.suffix[n]) ? r : null != this.trie.suffix[n] ? this.trie.suffix[n] : this.trie).isWord) { var a, o; let n = t.strategy, r = l + 1 - (null !== (o = null === (a = t.value) || void 0 === a ? void 0 : a.length) && void 0 !== o ? o : 0), u = l; if ((0, i.isMatch)(e, r, u, n)) { let t = (0, i.getMatchedPositions)(e, r, u, n); (null == s[t.start] || s[t.start].end < t.end) && (s[t.start] = t) } } return s } addWord(e) { null == this.trie && (this.trie = new a), this.trie.add(e) } addWords(e) { e.forEach(e => this.addWord(e)) } clear() { this.trie = new a } constructor() { r(this, "trie", void 0), this.trie = new a } } }, 202131: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getKeywordSubstitutedContent: function() { return u } }), n("47120"), n("724458"); var i = n("626135"), r = n("960048"), s = n("592204"), a = n("803141"), o = n("603158"), l = n("981631"); function u(e, t) { (0, s.isEligibleForKeywordFiltering)({ location: "keyword_substituted_content" }); try { let n = function(e) { var t; let n = a.default.getKeywordTrie(); if ("" === e) return []; let i = (0, o.normalize)(e).toLowerCase(); return Object.values(null !== (t = null == n ? void 0 : n.search(i)) && void 0 !== t ? t : {}) }(e); if (0 === n.length) return e; return n.forEach(e => { i.default.track(l.AnalyticEvents.KEYWORD_FILTER_MATCH, { message_id: null == t ? void 0 : t.messageId, channel_id: null == t ? void 0 : t.channelId, author_id: null == t ? void 0 : t.authorId, keyword: e.keyword }) }), n.sort((e, t) => t.start - e.start).reduce((e, n) => (function(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], r = Math.max(t, 0), s = Math.min(n, e.length - 1), a = i ? "\\*" : "*", o = [...e.substring(r, s + 1)].map(e => " " === e ? " " : a).join(""); return "".concat(e.substring(0, r)).concat(o).concat(e.substring(s + 1)) })(e, n.start, n.end, null == t ? void 0 : t.escapeReplacement), e) } catch (t) { return r.default.captureException(t, { tags: { app_context: "keyword_filtering" } }), e } } }, 712950: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useKeywordFilterSettings: function() { return s } }); var i = n("399606"), r = n("581883"); let s = () => { var e, t, n; let s = (0, i.useStateFromStoresObject)([r.default], () => { var e, t; return null !== (t = null === (e = r.default.settings.textAndImages) || void 0 === e ? void 0 : e.keywordFilterSettings) && void 0 !== t ? t : {} }); return { profanity: null === (e = s.profanity) || void 0 === e ? void 0 : e.value, sexualContent: null === (t = s.sexualContent) || void 0 === t ? void 0 : t.value, slurs: null === (n = s.slurs) || void 0 === n ? void 0 : n.value } } }, 200120: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useActiveKeywordFiltersCacheKey: function() { return a } }), n("653041"); var i = n("470079"), r = n("592204"), s = n("712950"); let a = () => { let { profanity: e, sexualContent: t, slurs: n } = (0, s.useKeywordFilterSettings)(), a = (0, r.useIsEligibleForKeywordFiltering)({ location: "use-should-filter-keywords" }); return i.useMemo(() => { let i = []; return a ? (e && i.push("profanity"), t && i.push("sexualContent"), n && i.push("slurs"), i.join(":")) : null }, [e, t, n, a]) } }, 900460: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"); t.default = { show(e) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("74194")]).then(n.bind(n, "269817")); return n => (0, i.jsx)(t, { ...n, url: e }) }) } } }, 627714: function(e, t, n) { "use strict"; function i(e) { return !1 } n.r(t), n.d(t, { shouldShowLinkNotDiscordWarning: function() { return i } }) }, 364640: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s = n("626135"), a = n("591759"), o = n("777754"), l = n("754688"), u = n("981631"); (r = i || (i = {})).MESSAGE = "Discord Message Link", r.CHANNEL = "Discord Channel Link", r.SERVER_INVITE = "Discord Server Invite", r.GIFT = "Discord Gift Link", r.UNKNOWN = "Unknown"; let d = [e => o.default.isInvite(e) ? "Discord Server Invite" : null, e => { let t = a.default.safeParseWithQuery(e); if (null == t) return null; let n = (0, l.tryParseChannelPath)(t.path); return null == n ? null : _({ guildId: n.guildId, channelId: n.channelId, messageId: n.messageId }) }]; function _(e) { return null != e.guildId && null != e.channelId && null != e.messageId ? "Discord Message Link" : null != e.guildId && null != e.channelId ? "Discord Channel Link" : "Unknown" } t.default = { trackDiscordLinkClicked: function(e) { s.default.track(u.AnalyticEvents.LINK_CLICKED, { is_discord_link: !0, discord_link_type: _(e) }) }, trackLinkClicked: function(e, t) { var n, i; if (null == e && null == t) return; let r = a.default.isDiscordUrl(e, !0) || null != t; s.default.track(u.AnalyticEvents.LINK_CLICKED, { is_discord_link: r, discord_link_type: r ? (n = e, null == (i = t) && null == n ? "Unknown" : null == i ? function(e) { for (let t of d) { let n = t(e); if (null != n) return n } return "Unknown" }(n) : _(i)) : null }) }, trackAnnouncementMessageLinkClicked: function(e) { let { messageId: t, channelId: n, guildId: i, sourceChannelId: r, sourceGuildId: a } = e; s.default.track(u.AnalyticEvents.ANNOUNCEMENT_MESSAGE_LINK_CLICKED, { message_id: t, channel_id: n, guild_id: i, source_channel_id: r, source_guild_id: a }) } } }, 754688: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CHANNEL_OR_MESSAGES_URL_RE: function() { return I }, MEDIA_POST_URL_RE: function() { return T }, canViewChannel: function() { return h }, isAccessibleChannelPath: function() { return A }, tryParseChannelPath: function() { return f }, tryParseEventDetailsPath: function() { return S } }); var i = n("592125"), r = n("430824"), s = n("496675"), a = n("226951"), o = n("981631"); let l = Array.from(n("176505").StaticChannelRoutes).map(e => a.default.escape(e)).join("|"), u = new RegExp("^/channels/(\\d+|".concat(o.ME, ")(?:/)?(\\d+|").concat(l, ")?")), d = new RegExp("^/channels/(\\d+|".concat(o.ME, ")(?:/)(\\d+|").concat(l, ")(?:/)(\\d+)")), _ = RegExp("^/channels/(\\d+)(?:/)(\\d+)(?:/threads/)(\\d+)(?:/)(\\d+)"), c = RegExp("^/guild-stages/(\\d+)(?:/)?(\\d+)?"), E = RegExp("^/events/(\\d+)(?:/)(\\d+)?((?:/)(\\d+))?"), I = new RegExp("^https://(?:canary\\.|ptb\\.)?discord.com/channels/(\\d+|".concat(o.ME, ")(?:/(\\d+|[a-zA-Z-]+))?(?:/(\\d+|[a-zA-Z-]+))?")), T = RegExp("^https://(?:canary\\.|ptb\\.)?discord.com/channels/(\\d+)(?:/)(\\d+)(?:/threads/)(\\d+)(?:/)(\\d+)"); function f(e) { if (null == e) return null; let t = e.match(d); if (null != t && t.length > 3) return { guildId: t[1], channelId: t[2], messageId: t[3] }; let n = e.match(_); if (null != n && n.length > 4) return { guildId: n[1], channelId: n[2], threadId: n[3], messageId: n[4] }; let i = e.match(u); if (null != i && i.length > 1) { var r; return { guildId: i[1], channelId: null !== (r = i[2]) && void 0 !== r ? r : void 0 } } let s = e.match(c); return null != s && s.length > 1 ? { guildId: s[1] } : null } function S(e) { if (null == e) return null; let t = e.match(E); return null != t && t.length > 1 ? { guildId: t[1], guildEventId: t[2], recurrenceId: t[3] } : null } function h(e) { return !!e.isPrivate() || s.default.can(o.Permissions.VIEW_CHANNEL, e) } function A(e) { let { guildId: t, channelId: n } = e; if (null == r.default.getGuild(t) && t !== o.ME) return !1; if (null == n) return !0; let s = i.default.getChannel(n); return null != s && h(s) } }, 299379: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("689938"); function r(e) { let t = i.default.getLocale().toLowerCase(); return t in e ? e[t] : e.default } }, 849027: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }); var i = n("430198"), r = n("897345"), s = n("859802"), a = n("697379"), o = n("241559"), l = n("819553"), u = n("931261"), d = n("994592"), _ = n("911560"), c = n("592125"), E = n("430824"), I = n("823379"), T = n("754688"), f = n("981631"), S = n("176505"); async function h(e) { let { guildId: t, channelId: n } = e, h = E.default.getGuild(t), A = E.default.getRoles(t); if (null == h && t !== f.ME) return !1; if (null == n) return !0; if ((0, S.isStaticChannelRoute)(n)) switch (n) { case S.StaticChannelRoute.ROLE_SUBSCRIPTIONS: return (0, d.areRoleSubscriptionsVisibleInGuild)(t, A); case S.StaticChannelRoute.GUILD_SHOP: return (0, r.isGuildShopVisibleInGuild)(h, A); case S.StaticChannelRoute.MEMBER_APPLICATIONS: return (0, a.canReviewGuildMemberApplications)(t); case S.StaticChannelRoute.GUILD_HOME: return (0, s.canSeeGuildHome)(t) || (0, u.canSeeOnboardingHome)(t); case S.StaticChannelRoute.CHANNEL_BROWSER: return null != h && h.hasFeature(f.GuildFeatures.COMMUNITY); case S.StaticChannelRoute.GUILD_ONBOARDING: return l.default.shouldShowOnboarding(t); case S.StaticChannelRoute.CUSTOMIZE_COMMUNITY: return null != h && h.hasFeature(f.GuildFeatures.COMMUNITY); case S.StaticChannelRoute.MEMBER_SAFETY: return (0, o.canAccessMemberSafetyPage)(t); default: (0, I.assertNever)(n) } let m = c.default.getChannel(n); return (null != m || (await _.default.loadThread(n), null != (m = c.default.getChannel(n)))) && ((0, T.canViewChannel)(m) || i.default.isChannelGatedAndVisible(t, n)) } }, 336197: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("727429"), r = n("703656"), s = n("769654"), a = n("592125"), o = n("754688"), l = n("849027"), u = n("927723"), d = n("981631"); async function _(e, t, n) { let _ = (0, o.tryParseChannelPath)(e); if (null != _ && !await (0, l.default)(_)) { (0, u.showInaccessibleLinkModal)({ kind: "channel" }); return } if (null == _) { (0, r.transitionTo)(e, t, n); return } let c = function(e) { if (null == e.channelId) return e; let t = a.default.getChannel(e.channelId); if (null == t) return e; let n = (0, i.getGuildIdForGenericRedirect)(t); return { ...e, guildId: null != n ? n : d.ME } }(_); if (null == c.channelId) { (0, s.transitionToGuild)(c.guildId); return } null != c.threadId ? (0, r.transitionTo)(d.Routes.CHANNEL_THREAD_VIEW(c.guildId, c.channelId, c.threadId, c.messageId), t, n) : (0, r.transitionTo)(d.Routes.CHANNEL(c.guildId, c.channelId, c.messageId), t, n) } }, 927723: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showInaccessibleLinkModal: function() { return s } }); var i = n("735250"); n("470079"); var r = n("481060"); function s(e) { let { kind: t } = e; (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("7285")]).then(n.bind(n, "951269")); return n => (0, i.jsx)(e, { ...n, kind: t }) }) } }, 280837: function(e, t, n) { "use strict"; n.r(t), n.d(t, { stopLurking: function() { return d }, stopLurkingAll: function() { return u } }), n("47120"); var i = n("544891"), r = n("570140"), s = n("19780"), a = n("823379"), o = n("41776"), l = n("981631"); async function u(e) { let t = o.default.lurkingGuildIds().filter(t => !e.includes(t)); 0 !== t.length && (r.default.dispatch({ type: "GUILD_STOP_LURKING", ignoredGuildIds: e }), await Promise.all(t.map(async e => { let t = o.default.getLurkingSource(); try { await i.HTTP.del({ url: l.Endpoints.GUILD_LEAVE(e), body: { lurking: !0 }, oldFormErrors: !0 }) } catch (n) { r.default.dispatch({ type: "GUILD_STOP_LURKING_FAILURE", lurkingGuildId: e, lurkingSource: t }) } }))) } async function d() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, t = o.default.lurkingGuildIds(); if (0 === t.length || !(null == e || !t.includes(e))) return; let n = [e, s.default.getGuildId()].filter(a.isNotNullish); await u(n) } }, 41776: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("271383"), d = n("430824"), _ = n("594174"), c = n("981631"); let E = [], I = {}, T = null, f = null; function S(e) { let t = E.indexOf(e); if (t > -1) { let n = [...E]; return n.splice(t, 1), E = n, delete I[e], !0 } return !1 } function h(e) { return !(e === c.ME || E.includes(e)) && (E = [...E, e], !0) } class A extends(i = o.default.Store) { initialize() { this.waitFor(d.default, _.default) } setHistorySnapshot(e) { T = e } getHistorySnapshot() { return T } lurkingGuildIds() { return E } mostRecentLurkedGuildId() { return 0 === E.length ? null : E[E.length - 1] } isLurking(e) { var t; let n = u.default.isCurrentUserGuest(e), i = null === (t = d.default.getGuild(e)) || void 0 === t ? void 0 : t.isLurker(); return !!(!n && i) } getLurkingSource() { return f } getLoadId(e) { return null != e ? I[e] : null } } a = "LurkingStore", (s = "displayName") in(r = A) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new A(l.default, { CONNECTION_OPEN: function() { E = Object.values(d.default.getGuilds()).reduce((e, t) => t.isLurker() ? [...e, t.id] : e, []) }, GUILD_JOIN: function(e) { let { guildId: t, lurker: n, source: i, directoryChannelId: r, loadId: s } = e; if (n) { var a, o; switch (h(t), a = t, null != (o = s) && (I[a] = o), i) { case c.JoinGuildSources.MOBILE_GUILD_DISCOVERY: f = { type: c.JoinGuildSources.MOBILE_GUILD_DISCOVERY }; break; case c.JoinGuildSources.DIRECTORY_ENTRY: f = { type: c.JoinGuildSources.DIRECTORY_ENTRY, directoryChannelId: r }; break; default: f = null } return !0 } return !1 }, GUILD_STOP_LURKING: function(e) { let { ignoredGuildIds: t } = e, n = function(e) { let t = new Set([...null != e ? e : []]); return [...E].reduce((e, n) => t.has(n) ? e : S(n) || e, !1) }(t); return n && (T = null, f = null), n }, GUILD_STOP_LURKING_FAILURE: function(e) { let { lurkingGuildId: t, lurkingSource: n } = e; return h(t), f = n, !0 }, GUILD_CREATE: function(e) { let { guild: t } = e; return !!(null != t.joined_at && E.includes(t.id)) && (S(t.id), T = null, f = null, !0) }, GUILD_DELETE: function(e) { let { guild: t } = e; return !!E.includes(t.id) && (S(t.id), T = null, f = null, !0) }, GUILD_MEMBER_ADD: function(e) { var t; let { guildId: n, joinedAt: i, user: r } = e, s = r.id === (null === (t = _.default.getCurrentUser()) || void 0 === t ? void 0 : t.id); return !!(s && null != i && E.includes(n)) && (S(n), T = null, f = null, !0) } }) }, 85746: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ChannelListLayoutTypes: function() { return i }, MessagePreviewTypes: function() { return r } }), (s = i || (i = {})).COZY = "cozy", s.COZY_DRAWER = "cozy-drawer", s.COZY_DRAWER_SMOL = "cozy-drawer-smol", s.COMPACT = "compact", s.MINIMAL = "minimal", (a = r || (r = {})).ALL = "all", a.UNREADS = "unreads", a.NONE = "none" }, 57132: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getRootNavigationRefIfInExperiment: function() { return c }, isInMainTabsExperiment: function() { return E }, useInMainTabsExperiment: function() { return I } }), n("411104"), n("470079"); var i, r, s = n("652874"), a = n("433517"); n("353926"), n("311089"); var o = n("777639"), l = n("721877"), u = n("488832"); (r = i || (i = {}))[r.EXISTING_USERS = 0] = "EXISTING_USERS", r[r.NEW_USERS = 1] = "NEW_USERS"; let d = "tabs-v2-experiment-key", _ = (0, s.default)((e, t) => ({ _experimentCacheInitialized: !1, _experimentEnabled: !1, getExperimentEnabled() { if (!(0, l.isMainTabsExperimentPlatformSupported)()) return !1; let { _experimentCacheInitialized: e, _experimentEnabled: n } = t(); if (!e) throw Error("MainTabsV2ExperimentStore: Experiment cache not initialized"); return n }, setExperimentEnabled: t => { e({ _experimentEnabled: t }), a.Storage.set(d, t) }, setInitialized: () => { e(e => e._experimentCacheInitialized ? e : { _experimentCacheInitialized: !0, _experimentEnabled: !0 === a.Storage.get(d) }) } })); function c() { return E() ? (0, o.getRootNavigationRef)() : void 0 } function E() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : _.getState().getExperimentEnabled(); return (0, u.updateIsInTabsUI)(e), e } function I() { return E(_(e => e.getExperimentEnabled())) } }, 311089: function(e, t, n) { "use strict"; n.r(t) }, 215355: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMergedTabsExperiment: function() { return c } }), n("470079"), n("902704"); var i = n("433517"), r = n("159626"), s = n("893638"), a = n("828695"), o = n("57132"); let l = { mergeTabs: !1, hideLabels: !1, roundedCorners: !1, blurTabBar: !1 }, u = !1, d = l, _ = (0, r.default)({ kind: "user", id: "2024-04_merged_tabs", label: "Mobile Redesign - Merge Tabs Last Stand Experiment", defaultConfig: l, treatments: [{ id: 0, label: "Control", config: { mergeTabs: !1, hideLabels: !1, roundedCorners: !1, blurTabBar: !1 } }, { id: 1, label: "Merged Tabs, Labels", config: { mergeTabs: !0, hideLabels: !1, roundedCorners: !1, blurTabBar: !1 } }, { id: 2, label: "Merged Tabs, No Labels", config: { mergeTabs: !0, hideLabels: !0, roundedCorners: !1, blurTabBar: !1 } }, { id: 3, label: "Merged Tabs, Labels, Rounded Corners", config: { mergeTabs: !0, hideLabels: !1, roundedCorners: !0, blurTabBar: !1 } }, { id: 4, label: "Merged Tabs, No Labels, Rounded Corners", config: { mergeTabs: !0, hideLabels: !0, roundedCorners: !0, blurTabBar: !1 } }, { id: 5, label: "Merged Tabs, Labels, Blurred Tab Bar", config: { mergeTabs: !0, hideLabels: !1, roundedCorners: !1, blurTabBar: !0 } }, { id: 6, label: "Merged Tabs, No Labels, Blurred Tab Bar", config: { mergeTabs: !0, hideLabels: !0, roundedCorners: !1, blurTabBar: !0 } }, { id: 7, label: "Merged Tabs, Labels, Rounded Corners, Blurred Tab Bar", config: { mergeTabs: !0, hideLabels: !1, roundedCorners: !0, blurTabBar: !0 } }, { id: 8, label: "Merged Tabs, No Labels, Rounded Corners, Blurred Tab Bar", config: { mergeTabs: !0, hideLabels: !0, roundedCorners: !0, blurTabBar: !0 } }] }); function c(e, t) { var n, r; let c = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : !(0, o.isInMainTabsExperiment)(), E = !!c || (null == t ? void 0 : t.disable); return a.default.hasLoadedExperiments || E ? (0, s.getMergedExperimentConfigs)(_.existingUsers, _.newUsers, e, { ...t, disable: E, autoTrackExposure: !c && (null === (r = null == t ? void 0 : t.autoTrackExposure) || void 0 === r || r) }) : (!u && (d = null !== (n = i.Storage.get("--merged-tabs-experiment-cached-config")) && void 0 !== n ? n : l, u = !0), d) } }, 777639: function(e, t, n) { "use strict"; function i() {} n.r(t), n.d(t, { getRootNavigationRef: function() { return i } }) }, 721877: function(e, t, n) { "use strict"; function i() { return !1 } n.r(t), n.d(t, { isMainTabsExperimentPlatformSupported: function() { return i } }) }, 488832: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { updateIsInTabsUI: function() { return u } }); var s = n("804098"), a = n("20186"), o = n("626135"), l = n("960048"); function u(e) { i !== e && (i = e, r = e, ! function() { let e = i ? r ? s.DesignIds.DESIGN_TABS_IA : s.DesignIds.DESIGN_IA : s.DesignIds.CLASSIC_IA; o.default.extendSuperProperties({ design_id: e }), a.addGlobalTag("design_id", e), l.default.setTags({ design_id: "".concat(e) }) }()) } }, 272423: function(e, t, n) { "use strict"; function i(e) { let {} = e; return !1 } function r(e, t) { return !1 } function s(e) { return !1 } function a() { return !1 } function o() { return !1 } function l(e) { let {} = e; return !1 } function u(e, t) { return !1 } function d() { return !1 } function _(e) {} function c(e) {} function E(e) {} function I(e) { return !1 } n.r(t), n.d(t, { coerceChannelRoute: function() { return _ }, coerceGuildsRoute: function() { return c }, coerceModalRoute: function() { return E }, navigateToChannel: function() { return i }, navigateToMemberVerification: function() { return r }, navigateToRootTab: function() { return s }, popAllModals: function() { return d }, popModal: function() { return u }, pushModal: function() { return l }, resetToAuthRoute: function() { return a }, resetToPanelsUI: function() { return o }, useIsModalOpen: function() { return I } }) }, 781157: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isOnNewPanels: function() { return o }, isSplitMessagesTab: function() { return l }, isSplitMessagesTabAndOnMessagesTab: function() { return u }, shouldHandleNewPanelsRoute: function() { return d } }); var i = n("57132"), r = n("215355"), s = n("289551"), a = n("981631"); function o() { return (0, i.isInMainTabsExperiment)() } function l() { return (0, i.isInMainTabsExperiment)() && !(0, r.getMergedTabsExperiment)({ location: "isSplitMessagesTab" }).mergeTabs } function u() { if (!l()) return !1; let e = (0, s.default)(); return (null == e ? void 0 : e.name) === "messages" } function d(e) { return !!o() && (!l() || null != e && e !== a.ME) } }, 808663: function(e, t, n) { "use strict"; n.r(t), n("653041"); t.default = new class e { enqueue(e) { this.queue.push(e) } flush() { for (; this.queue.length > 0;) { var e; null === (e = this.queue.shift()) || void 0 === e || e() } } constructor() { var e, t, n; e = this, n = [], (t = "queue") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 289551: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("777639"); function r() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : (0, i.getRootNavigationRef)(); return (null == e ? void 0 : e.isReady()) === !0 ? null == e ? void 0 : e.getCurrentRoute() : void 0 } }, 240991: function(e, t, n) { "use strict"; n.r(t), n.d(t, { parseBioReact: function() { return c }, parseBioReactWithoutScrolling: function() { return E } }); var i = n("392711"), r = n.n(i), s = n("31775"), a = n.n(s); n("302454"); var o = n("25209"), l = n("691424"), u = n("428595"); n("454585"); var d = n("364458"); let _ = (0, d.default)([u.default.PROFILE_BIO_RULES, (0, l.default)({ enableBuildOverrides: !1 })]); new(a())({ max: 2e3 }); let c = o.reactParserFor(_), E = o.reactParserFor((0, d.default)([r().omit(_, ["link", "url", "autolink", "customEmoji", "emoji", "commandMention"]), { emoji: { react: () => null } }])) }, 699450: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isChannelTypeMentionable: function() { return r } }); var i = n("131704"); function r(e) { return (0, i.isGuildSelectableChannelType)(e) || (0, i.isGuildVocalChannelType)(e) } }, 777547: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SubtextMarkdownUserExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_markdown_subtext", label: "Subtext Markdown", defaultConfig: { showSubtextMarkdown: !1 }, treatments: [{ id: 1, label: "Show subtext markdown", config: { showSubtextMarkdown: !0 } }] }) }, 298552: function(e, t, n) { "use strict"; n.r(t); var i = n("302454"), r = n.n(i), s = n("818083"); let a = /^https:\/\/(?:(?:media|images)\.discordapp\.net|(?:cdn\.discordapp\.com))\/(?:attachments|ephemeral-attachments)\/\d+\/\d+\/([A-Za-z0-9._-]*[A-Za-z0-9_-])(?:[?][a-zA-Z0-9?&=_-]*)?/, o = (0, s.createExperiment)({ kind: "user", id: "2023-11_attachment_link_markup", label: "Attachment Link Config User Experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Shows links to attachments as regular links", config: { enabled: !1 } }, { id: 2, label: 'Shows links to attachments as "mentions" of the filename', config: { enabled: !0 } }] }), l = { order: r().defaultRules.url.order - .5, requiredFirstCharacters: ["h"], match(e) { let t = a.exec(e); if (null !== t) { let { enabled: e } = o.getCurrentConfig({ location: "markup" }); if (!e) return null } return t }, parse(e, t, n) { var i; let r = e[0]; return { type: "attachmentLink", content: [{ type: "text", content: i = e[1] }], attachmentUrl: r, attachmentName: i } } }; t.default = { attachmentLink: l } }, 444758: function(e, t, n) { "use strict"; n.r(t); var i = n("302454"), r = n.n(i), s = n("430198"), a = n("933557"), o = n("66999"), l = n("754688"), u = n("592125"), d = n("430824"), _ = n("496675"), c = n("699516"), E = n("594174"), I = n("768581"), T = n("934415"), f = n("624138"), S = n("699450"), h = n("594199"), A = n("981631"), m = n("689938"); let N = e => { let t = u.default.getChannel(e); return null == t ? void 0 : t.getGuildId() }; function p(e) { return { type: "guild", guildId: e.id, content: (0, f.truncateText)(e.name, 32), icon: I.default.getGuildIconURL({ id: e.id, icon: e.icon, size: 40 }) } } function O(e, t) { let n; let i = L((0, f.truncateText)(e.name, 32)); return { type: "channel", content: [n = "italics" === t ? { type: "em", content: [i] } : i], channelType: e.type, iconType: e.iconType } } function C(e) { return { type: "channel", content: [L("")], iconType: e ? "post" : "message" } } function R(e, t) { var n; let i = u.default.getChannel(e), r = (0, o.getChannelRoleSubscriptionStatus)(e, u.default, s.default, _.default).isSubscriptionGated, d = null !== (n = (0, T.getMentionIconType)(i)) && void 0 !== n ? n : "text"; if (null != t) { let n = t.find(t => t.id === e); if (null != n) return { type: n.type, id: n.id, guildId: n.guild_id, name: n.name, isDm: null != i && i.isPrivate(), isForumPost: null != i && i.isForumPost(), isMentionable: !0, canViewChannel: !0, roleSubscriptionGated: r, iconType: d, parentId: null == i ? void 0 : i.parent_id } } return null != i ? { type: i.type, id: i.id, guildId: i.guild_id, name: (0, a.computeChannelName)(i, E.default, c.default), isDm: i.isPrivate(), isForumPost: i.isForumPost(), isMentionable: (0, S.isChannelTypeMentionable)(i.type), canViewChannel: (0, l.canViewChannel)(i), roleSubscriptionGated: r, iconType: d, parentId: i.parent_id } : null } function g(e) { return { type: "link", content: [{ type: "text", content: e }], target: e, title: void 0 } } function L(e) { return { type: "text", content: e } } function v(e, t, n, i, r) { let s = d.default.getGuild(e), a = (null == s ? void 0 : s.id) === i; return { type: "channelMention", guildId: e, channelId: t, messageId: n, originalLink: r, inContent: null == s || a ? null : [p(s)], content: [O({ name: m.default.Messages.UNKNOWN_CHANNEL.toLowerCase(), type: A.ChannelTypes.UNKNOWN, iconType: "text" }, "italics")] } } function D(e, t, n, i) { if (!e.canViewChannel) return function(e, t) { let n = { type: "channel", content: [L(e.roleSubscriptionGated ? e.name : m.default.Messages.NO_ACCESS)], channelType: e.roleSubscriptionGated ? e.type : A.ChannelTypes.UNKNOWN, iconType: "locked" }; return { type: "channelMention", guildId: e.guildId, channelId: e.id, messageId: t, inContent: null, content: [n] } }(e, t); if (!e.isMentionable) return L("#".concat(e.name)); let r = { type: "channelMention", channelId: e.id, guildId: e.guildId, messageId: t, originalLink: i }, s = d.default.getGuild(e.guildId); if (null == s) { var a; if (e.isDm) return { ...r, guildId: A.ME, inContent: [O(e)], content: [C(!1)] }; return null != (a = i) ? g(a) : L("#".concat(m.default.Messages.UNKNOWN_CHANNEL_PLACEHOLDER)) } let o = e.guildId === n; return { ...r, ... function(e, t, n, i) { let r = p(e), s = O(t), a = C(t.isForumPost); if (n && i) { if (t.isForumPost) { let e = u.default.getChannel(t.parentId); if (null != e) { var o; return { inContent: [O({ name: e.name, type: e.type, iconType: null !== (o = (0, T.getMentionIconType)(e)) && void 0 !== o ? o : "forum" })], content: [s] } } } return { inContent: [s], content: [a] } } if (n && !i) return { inContent: null, content: [s] }; if (!n && i) return { inContent: [r], content: [t.isForumPost ? s : a] }; else if (!n && !i) return { inContent: [r], content: [s] } }(s, e, o, null != t) } } let M = { order: h.default.order, requiredFirstCharacters: ["<"], match: e => /^<#(\d+)>/.exec(e), parse(e, t, n) { let i = e[1]; if (n.returnMentionIds) return { type: "channelMention", id: i }; let r = R(i, n.mentionChannels); return null == r ? v(null, i, null, N(n.channelId)) : D(r, null, N(n.channelId)) } }, y = { order: r().defaultRules.url.order - .5, requiredFirstCharacters: ["h"], match(e) { let t = l.CHANNEL_OR_MESSAGES_URL_RE.exec(e); return null != t && (null != t[2] && /\D/.test(t[2]) || null != t[3] && /\D/.test(t[3])) ? null : t }, parse(e, t, n) { let i = e[0], r = e[1], s = e[2], a = e[3]; if (null == s) return g(i); let o = R(s, null); return null == o ? v(r, s, a, N(n.channelId), i) : D(o, a, N(n.channelId), i) } }, P = { order: r().defaultRules.url.order - .5, requiredFirstCharacters: ["h"], match: e => l.MEDIA_POST_URL_RE.exec(e), parse(e, t, n) { let i = e[0], r = e[1], s = e[2], a = e[3], o = e[4]; if (null == s || null == a) return g(i); let l = R(a, null); if (null != l) return D(l, o, N(n.channelId), i); let u = R(s, null); return null != u ? D(u, o, N(n.channelId), i) : v(r, s, o, N(n.channelId), i) } }; t.default = { channelMention: M, channelOrMessageUrl: y, mediaPostLink: P } }, 723454: function(e, t, n) { "use strict"; n.r(t); var i = n("302454"), r = n.n(i); let s = /\n$/, a = { ...r().defaultRules.heading, requiredFirstCharacters: [" ", "#"], match: (e, t, n) => t.allowHeading ? null == n || "" === n || null != n.match(s) ? (0, i.anyScopeRegex)(/^ *(#{1,3})(?:\s+)((?![#]+)[^\n]+?)#*\s*(?:\n|$)/)(e, t, n) : null : null }; t.default = a }, 772096: function(e, t, n) { "use strict"; n.r(t), n.d(t, { punycodeLink: function() { return p } }), n("47120"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("411104"); var i = n("392711"), r = n.n(i), s = n("31775"), a = n.n(s); n("711739"); var o = n("302454"), l = n.n(o), u = n("830121"), d = n("823379"), _ = n("172244"), c = n("571989"); let E = new(a())({ max: 50 }); function I(e) { let t = E.get(e); if (null != t) return t; let n = (0, c.sanitizeWhitespace)(e), i = (0, c.sanitizeUnicodeConfusables)(n), r = { whitespaceSanitized: n, fullySanitized: i }; return E.set(e, r), r } let T = ["http:", "https:", "discord:"], f = [_.AST_KEY.TEXT, _.AST_KEY.UNDERLINE, _.AST_KEY.STRONG, _.AST_KEY.ITALICS, _.AST_KEY.STRIKETHROUGH, _.AST_KEY.INLINE_CODE, _.AST_KEY.SPOILER, _.AST_KEY.LINE_BREAK, _.AST_KEY.TIMESTAMP], S = [...f, _.AST_KEY.EMOJI, _.AST_KEY.CUSTOM_EMOJI], h = [_.AST_KEY.LIST, _.AST_KEY.HEADING, _.AST_KEY.BLOCK_QUOTE, _.AST_KEY.SUBTEXT], A = [_.AST_KEY.TEXT], m = [_.AST_KEY.UNDERLINE, _.AST_KEY.STRONG, _.AST_KEY.ITALICS, _.AST_KEY.STRIKETHROUGH, _.AST_KEY.INLINE_CODE, _.AST_KEY.SPOILER, _.AST_KEY.LINE_BREAK, _.AST_KEY.TIMESTAMP, _.AST_KEY.EMOJI, _.AST_KEY.CUSTOM_EMOJI, _.AST_KEY.LIST, _.AST_KEY.HEADING, _.AST_KEY.BLOCK_QUOTE, _.AST_KEY.SUBTEXT]; function N(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; for (let i of (!Array.isArray(e) && (e = [e]), e)) { if (void 0 === i || !t.includes(i.type)) return null; if (i.type === _.AST_KEY.INLINE_CODE) { let e = [...t, ...n]; if (null == N(i.validationChildContent, e)) return null } if (Array.isArray(i.content) && null == N(i.content, t)) return null } return e } function p(e) { try { var t; let n = new URL(e), i = null !== (t = n.protocol) && void 0 !== t ? t : ""; if (!T.includes(i.toLowerCase())) throw Error("Provided protocol is not allowed: " + i); if (("http:" === i || "https:" === i) && (null == n.hostname || 0 === n.hostname.length)) throw Error("no hostname"); let r = (0, c.safelyMakeUrlHumanReadable)(n); n.username = "", n.password = ""; let s = (0, c.safelyMakeUrlHumanReadable)(n); return { target: r, displayTarget: s } } catch (e) { return null } } t.default = { ...l().defaultRules.link, match: (e, t, n) => t.allowLinks ? l().defaultRules.link.match(e, t, n) : null, parse(e, t, n) { let [i, s, a, o] = e, c = () => ({ type: _.AST_KEY.TEXT, content: i }), E = I(a), T = I(s), O = I(null != o ? o : ""), C = E.whitespaceSanitized, R = T.fullySanitized, g = O.fullySanitized, L = R.trim(); if (0 === C.trim().length || 0 === L.length) return c(); let v = p(l().unescapeUrl(a)), D = (0, u.default)(s).length > 0 || (0, u.default)(o).length > 0; if (null == v || D) return c(); let M = { ...n, allowEscape: !1, parseInlineCodeChildContent: !0 }, y = n.allowEmojiLinks ? S : f, P = [...y, ...h], U = [...A, ...m], b = N(t(R, M), P, [_.AST_KEY.EMOJI]), G = N(t(g, M), U); if (null == b || null == G || 0 === (function e(t) { let n = ""; for (let i of t) switch (i.type) { case _.AST_KEY.TEXT: case _.AST_KEY.INLINE_CODE: n += i.content; break; case _.AST_KEY.CUSTOM_EMOJI: n += i.name; break; case _.AST_KEY.EMOJI: n += i.surrogate; break; case _.AST_KEY.LINE_BREAK: n += "\n"; break; case _.AST_KEY.STRONG: case _.AST_KEY.ITALICS: case _.AST_KEY.UNDERLINE: case _.AST_KEY.STRIKETHROUGH: case _.AST_KEY.SPOILER: n += e(i.content); break; case _.AST_KEY.TIMESTAMP: n += ""; break; case _.AST_KEY.BLOCK_QUOTE: case _.AST_KEY.LIST: case _.AST_KEY.HEADING: case _.AST_KEY.SUBTEXT: n += "<".concat(i.type, "Content>"); break; default: (0, d.assertNever)(i.type) } return n })(b).trim().length) return c(); let w = r().pick(t.rules, y), k = l().parserFor(w)(T.whitespaceSanitized, M), B = O.whitespaceSanitized, { target: V } = v; return { content: k, target: V, title: B } } } }, 800927: function(e, t, n) { "use strict"; n.r(t), n("757143"); var i = n("512722"), r = n.n(i), s = n("302454"), a = n.n(s); let o = /\n{2,}$/, l = /(?:^|\n)( *)$/, u = "(?:[*-]|\\d+\\.)", d = "( *)(" + u + ") +", _ = RegExp("^" + d), c = RegExp(d + "[^\\n]*(?:\\n(?!\\1" + u + " )[^\\n]*)*(\n|$)", "gm"), E = / *\n$/, I = RegExp("^( *)(" + u + ") [\\s\\S]+?(?:\\n(?! )(?!\\1" + u + " )|$)"), T = /^[ \t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+$/, f = e => e.map(e => ("text" === e.type && null != e.content && (e.content = e.content.replace(/\n+\s*$/, "")), e)), S = { ...a().defaultRules.list, requiredFirstCharacters: " *-0123456789".split(""), match: (e, t) => { if (!t.allowList || t._listLevel >= 11) return null; let n = null == t.prevCapture ? "" : t.prevCapture[0], i = l.exec(n); return null == i || T.test(i[0]) ? null : I.exec(e) }, parse: (e, t, n) => { let i = e[2], s = i.length > 1, a = e[0].replace(o, "\n").match(c); r()(null != a, "markup list items can not be parsed."); let l = !1; return { ordered: s, start: s ? Math.min(1e9, Math.max(1, +i)) : void 0, items: a.map((e, i) => { let r; let s = _.exec(e), o = RegExp("^ {1," + (null != s ? s[0].length : 0) + "}", "gm"), u = e.replace(o, "").replace(_, ""), d = i === a.length - 1, c = -1 !== u.indexOf("\n\n") || d && l; l = c; let I = n.inline, T = n._list, S = n._listLevel; n._list = !0, n._listLevel = (null != S ? S : 0) + 1, c ? (n.inline = !1, r = u.replace(E, "\n\n")) : (n.inline = !0, r = u.replace(E, "")); let h = f(t(r, { ...n, allowHeading: !1 })); return n.inline = I, n._list = T, n._listLevel = S, h }) } } }; t.default = S }, 773352: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isLinkTrusted: function() { return s } }); var i = n("25209"), r = n("49012"); function s(e) { return null != e.target && (0, r.isLinkTrusted)(e.target, null != e.title && "" !== e.title ? e.title : (0, i.astToString)(e.content)) } }, 691424: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return V } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("302454"), l = n("481060"), u = n("794295"), d = n("663993"), _ = n("339085"), c = n("590956"), E = n("703656"), I = n("430824"), T = n("797053"), f = n("68588"), S = n("263704"), h = n("757206"), A = n("332870"), m = n("750156"), N = n("979516"), p = n("671612"), O = n("572004"), C = n("900849"), R = n("746878"), g = n("285063"), L = n("943362"), v = n("551452"), D = n("69626"), M = n("142990"), y = n("532901"), P = n("981631"), U = n("176505"), b = n("689938"), G = n("842648"); n("987744"); var w = n("946278"); function k(e) { let { text: t } = e, [n, s] = r.useState(!1); return (0, i.jsx)(l.Clickable, { onClick: () => { try { (0, O.copy)(t), s(!0) } catch (e) { s(!1) } }, children: n ? (0, i.jsx)(S.default, { width: 16, height: 16 }) : (0, i.jsx)(h.default, { width: 16, height: 16 }) }) } let B = { blockQuote: { react: (e, t, n) => (0, i.jsxs)("div", { className: w.blockquoteContainer, children: [(0, i.jsx)("div", { className: w.blockquoteDivider }), (0, i.jsx)("blockquote", { children: t(e.content, n) })] }, n.key) }, s: { react: (e, t, n) => (0, i.jsx)("s", { children: t(e.content, n) }, n.key) }, highlight: { react: (e, t, n) => (0, i.jsx)("span", { className: "highlight", children: e.content }, n.key) }, paragraph: { react: (e, t, n) => (0, i.jsx)("p", { children: t(e.content, n) }, n.key) }, inlineCode: { react: (e, t, n) => (0, i.jsx)("code", { className: "inline", children: (0, R.smartOutput)(e, t, n) }, n.key) }, codeBlock: { react(e, t, r) { let s = () => (0, i.jsx)("code", { className: a()(G.scrollbarGhostHairline, "hljs"), children: (0, R.smartOutput)(e, t, r) }); return (0, i.jsx)("pre", { children: (0, i.jsxs)("div", { className: w.codeContainer, children: [O.SUPPORTS_COPY ? (0, i.jsx)("div", { className: w.codeActions, children: (0, i.jsx)(k, { text: e.content }) }) : null, (0, i.jsx)(d.LazyLibrary, { createPromise: () => Promise.resolve().then(n.bind(n, "364964")), webpackId: "364964", renderFallback: s, render: t => { if (!(e.lang && t.hasLanguage(e.lang))) return s(); { let n = t.highlight(e.lang, e.content, !0); return null == n ? s() : (0, i.jsx)("code", { className: a()(G.scrollbarGhostHairline, "hljs", n.language), dangerouslySetInnerHTML: { __html: n.value } }) } } })] }) }, r.key) } }, text: { react: (e, t, n) => "string" == typeof e.content ? (0, i.jsx)("span", { children: e.content }, n.key) : (0, i.jsx)("span", { children: t(e.content, n) }, n.key) }, spoiler: { react: (e, t, n) => (0, i.jsx)(f.default, { type: f.default.Types.TEXT, inline: n.formatInline, renderTextElement: (e, t) => null == e || e.type !== u.default || t ? e : r.cloneElement(e, { tabIndex: -1 }), children: () => t(e.content, n) }, n.key) }, soundboard: { react: e => (0, i.jsx)(p.default, { channelId: e.channelId, soundId: e.soundId, jumbo: e.jumboable }) }, staticRouteLink: { react(e, t, n) { let r = () => { ! function(e, t) { let n = I.default.getGuild(e); if (null == e || null == n || !n.hasFeature(P.GuildFeatures.COMMUNITY)) return; let i = { home: U.StaticChannelRoute.GUILD_HOME, browse: U.StaticChannelRoute.CHANNEL_BROWSER, customize: U.StaticChannelRoute.CUSTOMIZE_COMMUNITY, guide: U.StaticChannelRoute.GUILD_HOME } [t], r = I.default.getGuild(e); if ((null == r ? void 0 : r.joinedAt) == null) { C.startLurking(e, {}, { channelId: i }); return }(0, E.transitionTo)(P.Routes.CHANNEL(e, i)) }(e.guildId, e.channelId) }; if (!(0, R.isStaticRouteIconType)(e.channelId)) return null; let s = "".concat(e.channelId); switch (e.channelId) { case U.StaticChannelId.GUILD_HOME: case U.StaticChannelId.SERVER_GUIDE: s = b.default.Messages.SERVER_GUIDE; break; case U.StaticChannelId.CHANNEL_BROWSER: s = b.default.Messages.GUILD_SIDEBAR_CHANNEL_BROWSER; break; case U.StaticChannelId.CUSTOMIZE_COMMUNITY: s = b.default.Messages.CHANNELS_AND_ROLES } return (0, i.jsx)(l.Tooltip, { text: s, position: "top", children: s => { let { onMouseEnter: a, onMouseLeave: o } = s; return (0, i.jsx)(T.default, { role: "link", onClick: r, onMouseEnter: a, onMouseLeave: o, className: "channelMention", iconType: e.channelId, children: t(e.content, n) }, n.key) } }, n.key) } }, timestamp: { react: (e, t, n) => (0, i.jsx)(g.default, { node: e }, n.key) }, list: { react: (e, t, n) => { let i = e.ordered ? "ol" : "ul", r = null == e.start ? void 0 : (e.start + (e.items.length - 1)).toString().length; return (0, o.reactElement)(i, "".concat(n.key), { start: e.start, className: n.formatInline ? w.inlineFormat : null, style: { "--totalCharacters": r }, children: e.items.map((e, i) => { let r = (0, o.reactElement)("span", "".concat(n.key, "-").concat(i, "-innerSpan"), { children: t(e, n) }); return (0, o.reactElement)("li", "".concat(n.key, "-").concat(i) + i, { children: r }) }) }) } }, heading: { react: (e, t, n) => { let i = (0, o.reactElement)("span", "".concat(n.key, "-innerSpan"), { children: t(e.content, n) }); return (0, o.reactElement)("h" + e.level, (null == n ? void 0 : n.key) != null ? "".concat(n.key) : null, { children: i, className: n.formatInline ? w.inlineFormat : null }) } }, guild: { react: (e, t, n) => { let r = I.default.getGuild(e.guildId); return (0, i.jsx)(m.default, { guild: r, children: (0, R.smartOutput)(e, t, n) }, n.key) } }, channel: { react: (e, t, n) => (0, i.jsx)(A.default, { iconType: e.iconType, children: (0, R.smartOutput)(e, t, n) }, n.key) }, message: { react: (e, t, n) => (0, i.jsx)(N.default, {}, n.key) }, subtext: { react: (e, t, n) => (0, o.reactElement)("small", (null == n ? void 0 : n.key) != null ? "".concat(n.key) : null, { children: t(e.content, n), className: n.formatInline ? w.inlineFormat : null }) } }; function V(e) { return { ...B, link: (0, y.default)(e), devLink: (0, M.default)(e), emoji: function(e) { let { emojiTooltipPosition: t = "top", enableEmojiClick: n = !0 } = e; return { react(e, r, s) { let { key: a } = s; return e.src ? (0, i.jsx)(c.MessageStandardEmoji, { node: e, tooltipPosition: t, enableClick: n }, a) : (0, i.jsx)("span", { children: e.surrogate }, a) } } }(e), customEmoji: function(e) { let { emojiTooltipPosition: t = "top", enableEmojiClick: n = !0 } = e; return { react(e, r, s) { let { key: a, guildId: o, isInteracting: l } = s, u = _.default.getDisambiguatedEmojiContext(o).getById(e.emojiId); if (null != u) { let t = u.require_colons; e = { ...e, name: t ? ":".concat(u.name, ":") : u.name } } return (0, i.jsx)(c.MessageCustomEmoji, { isInteracting: l, node: e, tooltipPosition: t, enableClick: n }, a) } } }(e), channelMention: (0, v.default)(e), commandMention: (0, D.default)(e), attachmentLink: (0, L.default)(e) } } }, 428595: function(e, t, n) { "use strict"; n.r(t), n("757143"), n("653041"), n("47120"); var i = n("392711"), r = n.n(i), s = n("302454"), a = n.n(s), o = n("797610"), l = n("633302"), u = n("763296"), d = n("592125"), _ = n("430824"), c = n("594174"), E = n("5192"), I = n("51144"), T = n("298552"), f = n("444758"), S = n("723454"), h = n("772096"), A = n("800927"), m = n("945884"), N = n("594199"), p = n("97734"), O = n("660199"), C = n("364458"), R = n("981631"), g = n("689079"), L = n("377668"), v = n("689938"); let D = /^( *>>> +([\s\S]*))|^( *>(?!>>) +[^\n]*(\n *>(?!>>) +[^\n]*)*\n?)/, M = /^$|\n *$/, y = /^ *>>> ?/, P = /^ *> ?/gm; function U(e) { let t = (0, h.punycodeLink)(e[1]); if (null == t) return { type: "text", content: e[1] }; let { displayTarget: n, target: i } = t; return { type: "link", content: [{ type: "text", content: n }], target: i, title: void 0 } } let b = e => { let t = d.default.getChannel(e); return null == t ? void 0 : t.getGuildId() }, G = e => null != e.guildId ? _.default.getGuild(e.guildId) : null != e.channelId ? _.default.getGuild(b(e.channelId)) : null, w = { newline: a().defaultRules.newline, paragraph: a().defaultRules.paragraph, escape: { ...a().defaultRules.escape, match: (e, t, n) => !1 === t.allowEscape ? null : a().defaultRules.escape.match(e, t, n) }, blockQuote: { ...a().defaultRules.blockQuote, requiredFirstCharacters: [" ", ">"], match(e, t) { let { prevCapture: n, inQuote: i, nested: r } = t; if (i || r) return null; if (null == n) return D.exec(e); let s = n[0]; return M.test(s) ? D.exec(e) : null }, parse(e, t, n) { let i = e[0], r = !!y.exec(i), s = i.replace(r ? y : P, ""), a = n.inQuote || !1, o = n.inline || !1; n.inQuote = !0, !r && (n.inline = !0); let l = t(s, n); return n.inQuote = a, n.inline = o, 0 === l.length && l.push({ type: "text", content: " " }), { content: l, type: "blockQuote" } } }, link: h.default, autolink: { ...a().defaultRules.autolink, parse: U }, url: { ...a().defaultRules.url, requiredFirstCharacters: ["h", "s"], match(e, t) { if (!t.inline) return null; let n = /^((?:https?|steam):\/\/[^\s<]+[^<.,:;"'\]\s])/.exec(e); if (null != n) { let e = 0, t = n[0]; for (let n = t.length - 1; n >= 0 && ")" === t[n]; n--) { let n = t.indexOf("(", e); if (-1 === n) { t = t.slice(0, t.length - 1); break } e = n + 1 } n[0] = n[1] = t } return n }, parse: U }, strong: a().defaultRules.strong, em: a().defaultRules.em, u: a().defaultRules.u, br: a().defaultRules.br, text: N.default, inlineCode: { ...a().defaultRules.inlineCode, parse(e, t, n) { let i = a().defaultRules.inlineCode.parse(e, t, n); return !0 === n.parseInlineCodeChildContent ? { ...i, validationChildContent: t(i.content, n) } : i } }, emoticon: { order: N.default.order, requiredFirstCharacters: ["\xaf"], match: e => /^(¯\\_\(ツ\)_\/¯)/.exec(e), parse: e => ({ type: "text", content: e[1] }) }, codeBlock: { order: a().defaultRules.codeBlock.order, requiredFirstCharacters: ["`"], match: e => /^```(?:([a-z0-9_+\-.#]+?)\n)?\n*([^\n][^]*?)\n*```/i.exec(e), parse(e, t, n) { var i, r; return { lang: null !== (i = e[1]) && void 0 !== i ? i : "", content: null !== (r = e[2]) && void 0 !== r ? r : "", inQuote: n.inQuote || !1 } } }, roleMention: { order: N.default.order, requiredFirstCharacters: ["<"], match: e => /^<@&(\d+)>/.exec(e), parse(e, t, n) { let [i, r] = e; if (n.returnMentionIds) return { type: "roleMention", id: r }; let s = G(n), a = null != s ? _.default.getRole(s.id, r) : null; return null == a ? { type: "text", content: "@".concat(v.default.Messages.DELETED_ROLE_PLACEHOLDER) } : { type: "mention", channelId: n.channelId, guildId: null != s ? s.id : null, roleId: r, roleColor: a.color, color: a.color, colorString: a.colorString, content: [{ type: "text", content: "@".concat(a.name) }] } } }, mention: { order: N.default.order, requiredFirstCharacters: ["<", "@"], match(e, t) { let n = /^<@!?(\d+)>|^(@(?:everyone|here|Clyde))/.exec(e); return null != n && ("@Clyde" !== n[0] || (0, o.getClydeEnabled)(G(t), d.default.getChannel(t.channelId))) ? n : null }, parse(e, t, n) { let i, r; if (n.returnMentionIds) return null == e[1] ? { type: "mention", text: e[0] } : { type: "mention", id: e[1] }; let s = c.default.getUser(e[1]), a = d.default.getChannel(n.channelId); if (null != s && (r = s.id, i = s.toString(), null != a)) { var l; i = null !== (l = E.default.getNickname(a.getGuildId(), n.channelId, s)) && void 0 !== l ? l : I.default.getName(s) } null == s && "@Clyde" === e[0] && (0, o.getClydeEnabled)(G(n), a) && (r = L.CLYDE_AI_USER_ID); let u = e[1], _ = null != u && R.ID_REGEX.test(u.trim()), T = _ && n.unknownUserMentionPlaceholder ? "@".concat(v.default.Messages.UNKNOWN_USER_MENTION_PLACEHOLDER) : e[0]; return { userId: r, channelId: n.channelId, guildId: null == a ? void 0 : a.getGuildId(), parsedUserId: _ ? u : null, roleName: e[2], content: [{ type: "text", content: null != i ? "@".concat(i) : T }] } } }, channelMention: f.default.channelMention, channelOrMessageUrl: f.default.channelOrMessageUrl, mediaPostLink: f.default.mediaPostLink, attachmentLink: T.default.attachmentLink, commandMention: { order: a().defaultRules.text.order, requiredFirstCharacters: ["<"], match: e => /^<\/((?:[-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32})(?: [-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32})?(?: [-_\p{Letter}\p{Number}\p{sc=Deva}\p{sc=Thai}]{1,32})?):(\d+)>/u.exec(e), parse(e, t, n) { if (n.returnMentionIds) return { type: "commandMention", id: e[2] }; let [, ...i] = e[1].split(" "), r = "".concat(e[2]).concat([...i].map(e => "".concat(g.SUB_COMMAND_KEY_SEPARATOR).concat(e)).join("")); return { channelId: n.channelId, commandId: e[2], commandName: e[1], commandKey: r, content: [{ type: "text", content: "".concat(e[1]) }] } } }, emoji: { order: N.default.order, requiredFirstCharacters: [":"], match(e) { let t = l.default.EMOJI_NAME_RE.exec(e); return null != t && "" !== l.default.convertNameToSurrogate(t[1]) ? t : null }, parse(e) { let t = l.default.convertNameToSurrogate(e[1]); return { type: "text", content: null == t || "" === t ? ":".concat(e[1], ":") : t } } }, soundboard: { order: N.default.order, requiredFirstCharacters: ["<"], match: e => /^/.exec(e), parse(e, t, n) { var i; let r = e[1], s = u.default.getSoundById(r), a = null !== (i = null == s ? void 0 : s.name) && void 0 !== i ? i : r; return { type: "soundboard", id: r, soundId: r, channelId: n.channelId, content: a } } }, customEmoji: { order: N.default.order, requiredFirstCharacters: ["<"], match: e => /^/.exec(e), parse: e => ({ type: "text", content: ":".concat(e[1], ":") }) }, timestamp: { order: N.default.order - 1, requiredFirstCharacters: ["<"], match: e => O.TIMESTAMP_REGEX.exec(e), parse(e) { let [t, n, i] = e, r = (0, O.parseTimestamp)(n, i); return null == r ? { type: "text", content: t } : r } }, s: { order: a().defaultRules.u.order, requiredFirstCharacters: ["~"], match: a().inlineRegex(/^~~([\s\S]+?)~~(?!_)/), parse: a().defaultRules.u.parse }, spoiler: { order: N.default.order, requiredFirstCharacters: ["|"], match: e => R.MARKDOWN_SPOILER_REGEXP.exec(e), parse: (e, t, n) => ({ content: t(e[1], n), channelId: n.channelId }) }, staticRouteLink: { order: N.default.order, requiredFirstCharacters: ["<"], match: e => R.MARKDOWN_STATIC_ROUTE_NAME_REGEXP.exec(e), parse: (e, t, n) => ({ content: [{ type: "text", content: { home: v.default.Messages.SERVER_GUIDE, guide: v.default.Messages.SERVER_GUIDE, browse: v.default.Messages.CHANNEL_BROWSER_TITLE, customize: v.default.Messages.CHANNELS_AND_ROLES } [e[1]] }], channelId: e[1], guildId: b(n.channelId), id: e[1] }) }, heading: S.default, list: A.default, subtext: m.default }, k = (0, C.default)([w, p.default]), B = r().omit(k, ["inlineCode", "codeBlock", "br", "blockQuote", "subtext"]), V = r().omit(k, ["inlineCode", "codeBlock", "br", "blockQuote", "url", "attachmentLink", "mention", "roleMention", "channelMention", "channelOrMessageUrl", "mediaPostLink", "subtext"]), x = r().omit(k, ["codeBlock", "br", "mention", "channel", "roleMention", "attachmentLink", "subtext"]), F = r().omit((0, C.default)([k, { inlineCode: { match(e, t, n) { let i = k.codeBlock.match(e, t, n); if (null != i) return i; let r = k.inlineCode.match(e, t, n); if (null != r) return r } } }]), ["blockQuote", "codeBlock", "br"]), H = r().omit(k, ["codeBlock", "br", "blockQuote"]), Y = r().omit(k, ["codeBlock", "br", "attachmentLink", "mention", "roleMention", "channel", "paragraph", "newline", "subtext"]), j = r().omit(k, ["codeBlock", "blockQuote", "br"]), W = r().omit(k, ["codeBlock", "br", "inlineCode"]); function K(e, t) { return 0 === e.length || 0 === t || "" === e.charAt(t - 1).trim() } let z = (0, C.default)([{ highlightWord: { order: -1, match(e, t) { if (null != t.parseDepth && t.parseDepth > 10 || null == t.highlightWord || 0 === t.highlightWord.length) return null; let n = e.indexOf(t.highlightWord); if (-1 === n) return null; let i = !K(e, n); if (i) do n = e.indexOf(t.highlightWord, n + 1), i = !K(e, n); while (i && -1 !== n); if (-1 === n) return null; let r = e.substring(0, n), s = e.substring(n + t.highlightWord.length); return [e, t.highlightWord, r, s] }, parse(e, t, n) { var i; let r = null !== (i = n.parseDepth) && void 0 !== i ? i : 0, s = { ...n, parseDepth: r + 1 }, a = t(e[2], s), o = t(e[3], s); return [...a, { type: "highlight", content: e[1] }, ...o] } } }, r().omit(k, ["url"])]); t.default = { RULES: k, CHANNEL_TOPIC_RULES: B, VOICE_CHANNEL_STATUS_RULES: V, EMBED_TITLE_RULES: x, INLINE_REPLY_RULES: F, GUILD_VERIFICATION_FORM_RULES: H, GUILD_EVENT_RULES: j, PROFILE_BIO_RULES: Y, AUTO_MODERATION_SYSTEM_MESSAGE_RULES: z, NATIVE_SEARCH_RESULT_LINK_RULES: W } }, 746878: function(e, t, n) { "use strict"; function i(e, t, n) { return "string" == typeof e.content || void 0 === e.content ? e.content : t(e.content, n) } function r(e) { return "home" === e || "browse" === e || "customize" === e || "guide" === e } n.r(t), n.d(t, { isStaticRouteIconType: function() { return r }, smartOutput: function() { return i } }) }, 945884: function(e, t, n) { "use strict"; n.r(t); var i = n("302454"), r = n.n(i), s = n("777547"); let a = /\n$/, o = /^ *-# +((?!(-#)+)[^\n]+?) *(?:\n|$)/, l = { order: r().defaultRules.heading.order, requiredFirstCharacters: ["-"], match: (e, t, n) => { let { showSubtextMarkdown: r } = s.SubtextMarkdownUserExperiment.getCurrentConfig({ location: "MarkupSubtextRule" }); return r ? null == n || "" === n || null != n.match(a) ? (0, i.anyScopeRegex)(o)(e, t, n) : null : null }, parse: function(e, t, n) { return { content: (0, i.parseInline)(t, e[1].trim(), n) } } }; t.default = l }, 594199: function(e, t, n) { "use strict"; n.r(t), n.d(t, { textMarkupPatternWithExclusions: function() { return s } }); var i = n("302454"), r = n.n(i); let s = e => new RegExp("^[\\s\\S]+?(?=".concat(e, "|[^0-9A-Za-z\\s\\u00ff-\\uffff]|\\n\\n| {2,}\\n|\\w+:\\S|[0-9]+\\.|$)")), a = { ...r().defaultRules.text, match: (0, i.anyScopeRegex)(/^[\s\S]+?(?=[^0-9A-Za-z\s\u00c0-\uffff]|\n\n| {2,}\n|\w+:\S|[0-9]+\.|$)/) }; t.default = a }, 172244: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { AST_KEY: function() { return i } }), (r = i || (i = {})).TEXT = "text", r.STRIKETHROUGH = "s", r.UNDERLINE = "u", r.STRONG = "strong", r.ITALICS = "em", r.IMAGE = "image", r.EMOJI = "emoji", r.CUSTOM_EMOJI = "customEmoji", r.LINK = "link", r.URL = "url", r.AUTOLINK = "autolink", r.HIGHLIGHT = "highlight", r.PARAGRAPH = "paragraph", r.LINE_BREAK = "br", r.NEWLINE = "newline", r.ESCAPE = "escape", r.SPOILER = "spoiler", r.BLOCK_QUOTE = "blockQuote", r.INLINE_CODE = "inlineCode", r.CODE_BLOCK = "codeBlock", r.MENTION = "mention", r.CHANNEL_MENTION = "channelMention", r.CHANNEL = "channel", r.GUILD = "guild", r.ATTACHMENT_LINK = "attachmentLink", r.SOUNDBOARD = "soundboard", r.STATIC_ROUTE_LINK = "staticRouteLink", r.ROLE_MENTION = "roleMention", r.COMMAND_MENTION = "commandMention", r.TIMESTAMP = "timestamp", r.LIST = "list", r.HEADING = "heading", r.SUBTEXT = "subtext" }, 454585: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("392711"), r = n.n(i), s = n("25209"), a = n("691424"), o = n("428595"), l = n("364458"); let u = null; function d(e, t) { let n = {}; return null != e.mention && null != u && (n = { mention: u }), (0, l.default)([e, ...t, n]) } u = n("878611").default; let _ = { enableBuildOverrides: !1, enableEmojiClick: !0 }, c = d(o.default.RULES, [(0, a.default)({ enableBuildOverrides: !0 })]), E = r().omit(d(o.default.RULES, [(0, a.default)(_)]), "paragraph", "newline"), I = d(o.default.CHANNEL_TOPIC_RULES, [(0, a.default)({ ..._, emojiTooltipPosition: "bottom" }), { codeBlock: { react: o.default.RULES.text.react } }]), T = d(o.default.VOICE_CHANNEL_STATUS_RULES, [(0, a.default)({ ..._, enableEmojiClick: !1 })]), f = d(o.default.EMBED_TITLE_RULES, [(0, a.default)(_)]), S = d(o.default.INLINE_REPLY_RULES, [(0, a.default)(_)]), h = d(o.default.GUILD_VERIFICATION_FORM_RULES, [(0, a.default)(_)]), A = d(o.default.GUILD_EVENT_RULES, [(0, a.default)(_)]), m = d(o.default.INLINE_REPLY_RULES, [(0, a.default)({ ..._, emoji: { height: 14, width: 14, lineHeight: 18 } })]), N = d(o.default.AUTO_MODERATION_SYSTEM_MESSAGE_RULES, [(0, a.default)(_)]), p = r().omit(d(o.default.RULES, [(0, a.default)({ ..._, emoji: { height: 14, width: 14 } })]), "paragraph", "newline", "strong", "codeBlock", "inlineCode", "u", "link", "url", "autolink", "list", "heading", "subtext"), O = { text: o.default.RULES.text }; t.default = { combineAndInjectMentionRule: d, createReactRules: a.default, defaultReactRuleOptions: _, defaultRules: c, guildEventRules: A, notifCenterV2MessagePreviewRules: p, lockscreenWidgetMessageRules: O, astParserFor: s.astParserFor, reactParserFor: s.reactParserFor, parse: s.reactParserFor(c), parseTopic: s.reactParserFor(I), parseVoiceChannelStatus: s.reactParserFor(T), parseEmbedTitle: s.reactParserFor(f), parseInlineReply: s.reactParserFor(S), parseGuildVerificationFormRule: s.reactParserFor(h), parseGuildEventDescription: s.reactParserFor(A), parseAutoModerationSystemMessage: s.reactParserFor(N), parseForumPostGuidelines: s.reactParserFor(E), parseForumPostMostRecentMessage: s.reactParserFor(m), parseNotifCenterMessagePreview: s.reactParserFor(p), parseToAST: s.astParserFor(c), parseTopicToAST: s.astParserFor(I), parseEmbedTitleToAST: s.astParserFor(f), parseInlineReplyToAST: s.astParserFor(S), parseAutoModerationSystemMessageToAST: s.astParserFor(N) } }, 97734: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("302454"), r = n.n(i), s = n("339085"), a = n("633302"), o = n("176354"), l = n("594199"); let u = { s: { requiredFirstCharacters: ["~"], match: r().inlineRegex(/^~~([\s\S]+?)~~(?!_)/) }, highlight: { order: l.default.order, match: () => null }, emoji: { order: l.default.order, requiredFirstCharacters: [":"], match(e) { let t = a.default.EMOJI_NAME_AND_DIVERSITY_RE.exec(e); return null != t && "" !== a.default.convertNameToSurrogate(t[1]) ? t : null }, parse(e) { let [t, n] = e, i = a.default.convertNameToSurrogate(n); return null == i || "" === i ? { type: "text", content: t } : { name: ":".concat(n, ":"), surrogate: i, src: o.default.getURL(i) } } }, customEmoji: { order: r().defaultRules.codeBlock.order, requiredFirstCharacters: ["<"], match: e => /^<(a)?:(\w+):(\d+)>/.exec(e), parse(e, t, n) { let [i, r, a, o] = e, { guildId: l } = n, u = s.default.getDisambiguatedEmojiContext(l).getById(o), d = null == u || u.require_colons; return null != u && (a = u.name), { emojiId: o, name: d ? ":".concat(a, ":") : a, animated: "a" === r } } }, text: { parse(e) { let t = a.default.findInlineEmojisFromSurrogates(e[0]), n = 0; return t.map(e => { if ("text" === e.type) { let t = { index: n, 0: e.text }; return n += e.text.length, { type: "text", content: e.text, originalMatch: t } } { let t = { index: n, 0: e.surrogate }; return n += e.surrogate.length, { type: "emoji", name: e.emojiName, surrogate: e.surrogate, src: o.default.getURL(e.surrogate), originalMatch: t } } }) } }, looseEm: { ...r().defaultRules.em, match: r().inlineRegex(RegExp("^\\*(?=\\S)((?:\\*\\*|\\\\[\\s\\S]|\\s+(?:\\\\[\\s\\S]|[^\\s\\*\\\\]|\\*\\*)|[^\\s\\*\\\\])+?) {1,2}\\*(?!\\*)")), parse: (e, t, n) => ({ type: "em", content: t(e[1], n), originalMatch: e }) } }; t.default = u }, 285063: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("916752"), a = n("946278"); function o(e) { let { node: t } = e, n = (0, s.default)(t); return (0, i.jsx)(r.Tooltip, { text: t.full, tooltipClassName: a.timestampTooltip, children: e => (0, i.jsx)("span", { ...e, className: a.timestamp, children: n }) }) } }, 660199: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_TIMESTAMP_FORMAT: function() { return l }, TIMESTAMP_FORMATS: function() { return o }, TIMESTAMP_REGEX: function() { return d }, parseTimestamp: function() { return _ }, unparseTimestamp: function() { return c } }); var i = n("913527"), r = n.n(i), s = n("55935"), a = n("70956"); let o = { t: e => (0, s.dateFormat)(e, "LT"), T: e => (0, s.dateFormat)(e, "LTS"), d: e => (0, s.dateFormat)(e, "L"), D: e => (0, s.dateFormat)(e, "LL"), f: e => (0, s.dateFormat)(e, "LLL"), F: e => (0, s.dateFormat)(e, "LLLL"), R: e => { let t = r().relativeTimeThreshold("s"); r().relativeTimeThreshold("s", 60); let n = r().relativeTimeThreshold("ss"); r().relativeTimeThreshold("ss", -1); let i = r().relativeTimeThreshold("m"); r().relativeTimeThreshold("m", 60); let s = null; try { s = r()(e.toDate()).fromNow() } catch (e) {} return r().relativeTimeThreshold("s", t), r().relativeTimeThreshold("ss", n), r().relativeTimeThreshold("m", i), null != s ? s : r()(e.toDate()).fromNow() } }, l = "f"; Object.setPrototypeOf(o, null); let u = Object.keys(o).join("|"), d = new RegExp("^")); function _(e, t) { let n = r()(Number(e) * a.default.Millis.SECOND); if (!n.isValid()) return null; let i = null != t ? o[t] : void 0; return null == i && (i = o[l]), { timestamp: e, format: t, parsed: n, full: o.F(n), formatted: i(n) } } function c(e, t) { return null != t ? "") : "") } }, 571989: function(e, t, n) { "use strict"; n.r(t), n.d(t, { safelyMakeUrlHumanReadable: function() { return u }, sanitizeUnicodeConfusables: function() { return o }, sanitizeWhitespace: function() { return r } }), n("757143"); let i = RegExp("".concat(/\p{Cf}|\p{Zl}|\p{Zp}|[^\P{Cc}\n]|[^\P{Zs} ]/gu.source, "|").concat("͏|឴|឵|ᅠ|ㅤ|ᅠ"), "gu"); function r(e) { return e.replace(i, "") } let s = [{ character: "h", matcher: a(["H", "һ", "հ", "Ꮒ", "ℎ", "\uD835\uDC21", "\uD835\uDC89", "\uD835\uDCBD", "\uD835\uDCF1", "\uD835\uDD25", "\uD835\uDD59", "\uD835\uDD8D", "\uD835\uDDC1", "\uD835\uDDF5", "\uD835\uDE29", "\uD835\uDE5D", "\uD835\uDE91", "h"]) }, { character: "t", matcher: a(["T", "\uD835\uDC2D", "\uD835\uDC61", "\uD835\uDC95", "\uD835\uDCC9", "\uD835\uDCFD", "\uD835\uDD31", "\uD835\uDD65", "\uD835\uDD99", "\uD835\uDDCD", "\uD835\uDE01", "\uD835\uDE35", "\uD835\uDE69", "\uD835\uDE9D"]) }, { character: "p", matcher: a(["P", "ρ", "ϱ", "р", "⍴", "ⲣ", "\uD835\uDC29", "\uD835\uDC5D", "\uD835\uDC91", "\uD835\uDCC5", "\uD835\uDCF9", "\uD835\uDD2D", "\uD835\uDD61", "\uD835\uDD95", "\uD835\uDDC9", "\uD835\uDDFD", "\uD835\uDE31", "\uD835\uDE65", "\uD835\uDE99", "\uD835\uDED2", "\uD835\uDEE0", "\uD835\uDF0C", "\uD835\uDF1A", "\uD835\uDF46", "\uD835\uDF54", "\uD835\uDF80", "\uD835\uDF8E", "\uD835\uDFBA", "\uD835\uDFC8", "p", "ҏ"]) }, { character: "s", matcher: a(["S", "ƽ", "ѕ", "ꜱ", "ꮪ", "\uD801\uDC48", "\uD806\uDCC1", "\uD835\uDC2C", "\uD835\uDC60", "\uD835\uDC94", "\uD835\uDCC8", "\uD835\uDCFC", "\uD835\uDD30", "\uD835\uDD64", "\uD835\uDD98", "\uD835\uDDCC", "\uD835\uDE00", "\uD835\uDE34", "\uD835\uDE68", "\uD835\uDE9C", "s"]) }, { character: ":", matcher: a(["ː", "˸", "։", "׃", "܃", "܄", "ः", "ઃ", "᛬", "᠃", "᠉", "⁚", "∶", "ꓽ", "꞉", "︰", ":", ";", ";"]) }, { character: "/", matcher: a(["᜵", "⁁", "⁄", "∕", "╱", "⟋", "⧸", "Ⳇ", "⼃", "〳", "ノ", "㇓", "丿", "\uD834\uDE3A"]) }]; function a(e) { return RegExp(e.join("|"), "gu") } function o(e) { let t = e; return s.forEach(e => { t = t.replace(e.matcher, e.character) }), t } let l = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0]; function u(e) { let t = function(e) { if ("null" === e.origin && e.pathname.startsWith("//")) return e.protocol; let t = ""; return "" !== e.username && (t += e.username), "" !== e.password && (t += ":" + e.password), "" !== t && (t += "@"), "".concat(e.protocol, "//").concat(t).concat(e.host) }(e); return t += d(e.pathname) + d(e.search) + d(e.hash) } function d(e) { let t; try { t = decodeURIComponent(e) } catch { return e } let n = "", i = e, r = t; for (; i.length > 0;) { var s; let e = i.codePointAt(0), t = r.codePointAt(0); if (e === t) { let t = String.fromCodePoint(e); n += t, i = i.substring(t.length), r = r.substring(t.length); continue } let a = String.fromCodePoint(t), o = encodeURIComponent(a), u = o === a ? 3 : o.length; n += ((s = t) >= 0 && s < 128 ? 1 !== l[s] : 8206 === s || 8207 === s || 8234 === s || 8235 === s || 8236 === s || 8237 === s || 8238 === s || 1564 === s || 8294 === s || 8295 === s || 8296 === s || 8297 === s || 128271 === s || 128272 === s || 128274 === s || 128275 === s || 133 === s || 160 === s || 5760 === s || 8192 === s || 8193 === s || 8194 === s || 8195 === s || 8196 === s || 8197 === s || 8198 === s || 8199 === s || 8200 === s || 8201 === s || 8202 === s || 8232 === s || 8233 === s || 8239 === s || 8287 === s || 12288 === s || 10240 === s || 173 === s || 847 === s || s >= 1536 && s <= 1541 || 1757 === s || 1807 === s || 2274 === s || 4447 === s || 4448 === s || 6068 === s || 6069 === s || 6155 === s || 6156 === s || 6157 === s || 6158 === s || 8203 === s || 8204 === s || 8205 === s || 8288 === s || 8289 === s || 8290 === s || 8291 === s || 8292 === s || 8293 === s || s >= 8298 && s <= 8303 || 12644 === s || s >= 65520 && s <= 65528 || s >= 65024 && s <= 65039 || 65279 === s || 65440 === s || 65529 === s || 65530 === s || 65531 === s || 69821 === s || 69837 === s || s >= 78896 && s <= 78904 || s >= 113824 && s <= 113827 || s >= 119155 && s <= 119162 || s >= 917504 && s <= 921599) ? o : a, i = i.substring(u), r = r.substring(a.length) } return n } }, 364458: function(e, t, n) { "use strict"; function i(e) { let t = {}; for (let n of e) for (let e in n) e in t ? t[e] = { ...t[e], ...n[e] } : t[e] = { ...n[e] }; return t } n.r(t), n.d(t, { default: function() { return i } }), n("47120") }, 916752: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"); var i = n("470079"), r = n("913527"), s = n.n(r), a = n("207561"), o = n("70956"), l = n("660199"); let u = [ [2 * o.default.Seconds.MINUTE, o.default.Seconds.SECOND], [5 * o.default.Seconds.MINUTE, o.default.Seconds.MINUTE], [45 * o.default.Seconds.MINUTE, 2 * o.default.Seconds.MINUTE], [21 * o.default.Seconds.HOUR, 5 * o.default.Seconds.MINUTE] ], d = 2 * o.default.Seconds.HOUR; function _(e) { let t = (0, a.useForceUpdate)(); return (i.useEffect(() => { if ("R" !== e.format) return; let n = 1e3 * d, i = Math.abs(e.parsed.diff(s()())); for (let [e, t] of u) if (i < 1e3 * e) { n = 1e3 * t; break } let r = setInterval(() => { t() }, n); return () => clearInterval(r) }, [t, e.format, e.parsed]), "R" === e.format) ? l.TIMESTAMP_FORMATS.R(e.parsed) : e.formatted } }, 943362: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("700111"), o = n("481060"), l = n("239091"), u = n("782568"), d = n("364640"), _ = n("198620"), c = n("797053"), E = n("746878"), I = n("981631"), T = n("261805"), f = n("504649"); function S(e) { return { react(t, r, S) { let h = S.noStyleAndInteraction ? void 0 : async n => { let i = await (0, _.maybeRefreshAttachmentUrl)(t.attachmentUrl); e.shouldStopPropagation && (null == n || n.stopPropagation()), d.default.trackLinkClicked(i), e.shouldCloseDefaultModals && (0, o.closeAllModals)(), (0, u.default)(i) }, A = S.noStyleAndInteraction ? I.NOOP : e => { (0, l.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("98466").then(n.bind(n, "151578")); return n => (0, i.jsx)(e, { ...n, attachmentUrl: t.attachmentUrl, attachmentName: t.attachmentName }) }) }; return (0, i.jsxs)(c.default, { role: "link", href: t.attachmentUrl, onClick: h, onContextMenu: A, className: "attachmentLink", children: [(0, i.jsx)(a.AttachmentIcon, { className: s()(f.icon, T.icon), color: o.tokens.colors.MENTION_FOREGROUND, width: 16, height: 16 }), (0, E.smartOutput)(t, r, S)] }, S.key) } } } }, 551452: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return A } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("239091"), a = n("287734"), o = n("364640"), l = n("754688"), u = n("336197"), d = n("131704"), _ = n("592125"), c = n("430824"), E = n("797053"), I = n("442514"), T = n("900849"), f = n("746878"), S = n("981631"); async function h(e, t, n) { if (null == t) return; if (o.default.trackDiscordLinkClicked({ guildId: e, channelId: t, messageId: n }), null != e) { let n = c.default.getGuild(e); if ((null == n ? void 0 : n.joinedAt) == null) try { await T.startLurking(e, {}, { channelId: t }); return } catch {} } let i = _.default.getChannel(t); if (null != i && null == n && (0, d.isGuildVocalChannelType)(i.type) && (0, l.canViewChannel)(i)) { a.default.selectVoiceChannel(i.id); return }(0, u.default)(S.Routes.CHANNEL(e, t, n)) } function A(e) { return { react(t, a, o) { let l = _.default.getChannel(t.channelId), u = o.noStyleAndInteraction ? void 0 : n => { e.shouldStopPropagation && (null == n || n.stopPropagation()), h(t.guildId, t.channelId, t.messageId), e.shouldCloseDefaultModals && (0, r.closeAllModals)() }, d = o.noStyleAndInteraction || null == t.channelId || null == l && null == t.originalLink ? S.NOOP : e => { (0, s.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("9573").then(n.bind(n, "546649")); return n => { var r; return (0, i.jsx)(e, { ...n, channel: l, channelId: null !== (r = null == l ? void 0 : l.id) && void 0 !== r ? r : t.channelId, originalLink: t.originalLink, messageId: t.messageId }) } }) }; return (0, i.jsxs)(E.default, { role: "link", onClick: u, onContextMenu: d, className: "channelMention", children: [null != t.inContent ? a(t.inContent, o) : null, null != t.inContent ? (0, i.jsx)(I.default, {}) : null, (0, f.smartOutput)(t, a, o)] }, o.key) } } } }, 69626: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CommandClickable: function() { return R }, default: function() { return g } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("555573"), l = n("10718"), u = n("895924"), d = n("665906"), _ = n("695346"), c = n("592125"), E = n("703558"), I = n("496675"), T = n("944486"), f = n("797053"), S = n("585483"), h = n("981631"), A = n("689079"), m = n("665692"), N = n("689938"), p = n("471898"); function O(e, t, n, r) { if (null == e) return; let s = () => { let i = c.default.getChannel(e); if (null == i) return; let { command: s, application: a } = l.getCachedCommand(i, n); if (null != s && s.name === t) { var d, _; S.ComponentDispatch.dispatch(h.ComponentActions.FOCUS_CHANNEL_TEXT_AREA, { channelId: e }); let t = null != a ? { type: u.ApplicationCommandSectionType.APPLICATION, id: a.id, icon: null !== (_ = null == a ? void 0 : null === (d = a.bot) || void 0 === d ? void 0 : d.username) && void 0 !== _ ? _ : a.icon, name: a.name, application: a } : null; o.setActiveCommand({ channelId: e, command: null, section: null }), o.setActiveCommand({ channelId: e, command: s, section: t, location: r }) } }; "" !== E.default.getDraft(e, E.DraftType.ChannelMessage) ? (0, a.openModal)(t => (0, i.jsx)(a.ConfirmModal, { header: N.default.Messages.APPLICATION_COMMAND_MENTION_CONFIRM_HEADER, confirmText: N.default.Messages.CLEAR, cancelText: N.default.Messages.CANCEL, onConfirm: () => s(), confirmButtonColor: a.Button.Colors.BRAND, onCloseCallback: () => { S.ComponentDispatch.dispatch(h.ComponentActions.FOCUS_CHANNEL_TEXT_AREA, { channelId: e }) }, ...t, children: (0, i.jsx)(a.Text, { variant: "text-md/normal", children: N.default.Messages.APPLICATION_COMMAND_MENTION_CONFIRM_BODY }) })) : s() } function C(e) { var t; let { node: n, output: o, state: E } = e, S = (0, s.useStateFromStores)([c.default, T.default], () => { var e; return c.default.getChannel(null !== (e = n.channelId) && void 0 !== e ? e : T.default.getChannelId()) }, [n.channelId]), { hasSendMessagePerm: N, hasUseAppCommandsPerm: p } = (0, s.useStateFromStoresObject)([I.default], () => { let e = I.default.can(h.Permissions.SEND_MESSAGES, S); return { hasSendMessagePerm: e, hasUseAppCommandsPerm: I.default.can(h.Permissions.USE_APPLICATION_COMMANDS, S) } }), { command: C } = l.useCommand(S, null !== (t = n.commandKey) && void 0 !== t ? t : ""), R = _.UseLegacyChatInput.useSetting(), g = r.useMemo(() => { if (null == C || null == S || C.name !== n.commandName || R) return !1; let e = S.isPrivate(); if ((0, d.computeIsReadOnlyThread)(S) || !e && !N) return !1; let t = (null == C ? void 0 : C.applicationId) === A.BuiltInSectionId.BUILT_IN; return !!e || !!t || !!p || !1 }, [S, C, N, p, n.commandName, R]), L = r.useCallback(e => { null == e || e.stopPropagation(), null != S && null != n.commandName && null != n.commandKey && O(S.id, n.commandName, n.commandKey, u.ApplicationCommandTriggerLocations.MENTION) }, [S, n.commandKey, n.commandName]); return g ? (0, i.jsx)(a.Tooltip, { text: n.output, position: "top", children: e => { let { onMouseEnter: t, onMouseLeave: r } = e; return (0, i.jsxs)(f.default, { role: "link", onClick: L, onMouseEnter: t, onMouseLeave: r, children: [m.COMMAND_SENTINEL, o(n.content, E)] }, E.key) } }, E.key) : (0, i.jsxs)("span", { children: [m.COMMAND_SENTINEL, o(n.content, E)] }) } function R(e) { let { commandId: t, commandName: n, commandDescription: r, onClick: o } = e, l = (0, s.useStateFromStores)([T.default], () => T.default.getChannelId()), d = e => { null == e || e.stopPropagation(), O(l, n, t, u.ApplicationCommandTriggerLocations.POPULAR_COMMANDS), null == o || o(t) }; return (0, i.jsx)(a.Tooltip, { text: r, position: "top", tooltipContentClassName: p.tooltip, children: e => { let { onMouseEnter: t, onMouseLeave: r } = e; return (0, i.jsxs)(a.Button, { color: a.ButtonColors.PRIMARY, size: a.ButtonSizes.ICON, onClick: d, onMouseEnter: t, onMouseLeave: r, children: ["/", n] }) } }) } function g(e) { return { react: (e, t, n) => (0, i.jsx)(C, { node: e, output: t, state: n }) } } }, 142990: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }), n("789020"); var i = n("735250"), r = n("470079"), s = n("865427"), a = n("853425"), o = n("830121"); let l = RegExp("^" + o.DEVLINK_REGEX.source, o.DEVLINK_REGEX.flags); function u(e) { return { match: (e, t) => t.allowLinks && t.allowDevLinks ? l.exec(e) : null, parse: (e, t) => ({ target: e, type: "devLink" }), react: (e, t, n) => { let o = e.target[0]; return (0, s.isManualBuildOverrideLink)(o) ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("span", { children: o }), (0, i.jsx)(r.Fragment, { children: (0, i.jsx)(a.default, { url: o }, o) }, n.key)] }) : (0, i.jsx)("span", { children: o }) }, order: 6 } } }, 532901: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("25209"), a = n("794295"), o = n("865427"), l = n("853425"), u = n("49012"), d = n("773352"); function _(e) { return { react(t, n, _) { if (e.enableBuildOverrides && (0, o.isBuildOverrideLink)(t.target)) return (0, i.jsx)(r.Fragment, { children: (0, i.jsx)(l.default, { url: t.target }, t.target) }, _.key); let c = n(t.content, _), E = "string" == typeof t.title && 0 !== t.title.length ? t.title : (0, s.astToString)(t.content), I = (null == e ? void 0 : e.mustConfirmExternalLink) ? e => (null == e || e.stopPropagation(), null == e || e.preventDefault(), (0, u.handleClick)({ href: t.target, shouldConfirm: !0, messageId: _.messageId, channelId: _.channelId }), null) : void 0; if (_.previewLinkTarget && !(0, d.isLinkTrusted)(t)) { let e = "\n\n(".concat(t.target, ")"); E.length + e.length > 1024 && (e = "..." + e, E = (E = E.substr(0, 1024 - e.length)).trimEnd()), E += e } return _.noStyleAndInteraction ? (0, i.jsx)("span", { title: E, children: c }, _.key) : (0, i.jsx)(a.default, { title: E, href: t.target, trusted: () => (0, d.isLinkTrusted)(t), onClick: I, messageId: _.messageId, channelId: _.channelId, children: c }, _.key) } } } }, 878611: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("239091"), s = n("644956"), a = n("819366"), o = n("592125"); t.default = { handleUserContextMenu(e, t, s, a) { let l = o.default.getChannel(t); null != l && (0, r.openContextMenuLazy)(a, async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("36441"), n.e("82882"), n.e("12435"), n.e("7717"), n.e("80869")]).then(n.bind(n, "757387")); return n => (0, i.jsx)(t, { ...n, user: e, channel: l, guildId: s }) }) }, react(e, t, n) { let { userId: r, channelId: o, parsedUserId: l, roleId: u, roleName: d } = e; return null == r && (null != u || "@everyone" === d || "@here" === d) ? (0, i.jsx)(s.default, { inlinePreview: n.formatInline, ...e, children: t(e.content, n) }, n.key) : (0, i.jsx)(a.default, { className: "mention", userId: r, channelId: o, parsedUserId: l, content: t(e.content, n), inlinePreview: n.noStyleAndInteraction }, n.key) } } }, 982806: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"); t.default = { show(e) { let { url: t, trustUrl: s, onConfirm: a, isProtocol: o } = e; (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("85668")]).then(n.bind(n, "720553")); return n => (0, i.jsx)(e, { ...n, url: t, isProtocol: o, trustUrl: s, onConfirm: a }) }) } } }, 292619: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForWebAudioAPI: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_web_audio_api_rollout", label: "Web Audio API Rollout", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Web Audio API usage", config: { enabled: !0 } }] }); function r(e) { let { location: t } = e, { enabled: n } = i.getCurrentConfig({ location: t }, { autoTrackExposure: !1 }); return n } }, 768494: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ContentScanFlags: function() { return i }, messageAttachmentToUnfurledMediaItem: function() { return l }, toUnfurledMediaItem: function() { return o } }), n("789020"); var i, r, s = n("630388"), a = n("981631"); (r = i || (i = {}))[r.EXPLICIT = 1] = "EXPLICIT"; function o(e) { var t; return { url: e.url, proxyUrl: e.proxy_url, height: e.height, width: e.width, placeholder: e.placeholder, placeholderVersion: e.placeholder_version, contentType: e.content_type, contentScanMetadata: null != e.content_scan_metadata ? { version: (t = e.content_scan_metadata).version, contentScanFlags: t.content_scan_flags } : void 0 } } function l(e) { var t, n, i, r; let o = 0; return (0, s.hasFlag)(null !== (t = e.flags) && void 0 !== t ? t : 0, a.MessageAttachmentFlags.CONTAINS_EXPLICIT_MEDIA) && (o += 1), { url: e.url, proxyUrl: e.proxy_url, height: null !== (n = e.height) && void 0 !== n ? n : 0, width: null !== (i = e.width) && void 0 !== i ? i : 0, contentType: null !== (r = e.content_type) && void 0 !== r ? r : "unknown/unknown", placeholder: e.placeholder, placeholderVersion: e.placeholder_version, contentScanMetadata: null == e.content_scan_version ? void 0 : { version: e.content_scan_version, contentScanFlags: o } } } }, 304809: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getOrCreateAudioContext: function() { return r } }); let i = null; function r() { return null == i && (i = new AudioContext), i } }, 62170: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("623113"); t.default = r.forwardRef(function(e, t) { let { muted: n, volume: a, playing: o, ...l } = e, [u, d] = (0, s.default)(t); return r.useEffect(() => { let e = u.current; if (null != e) void 0 !== n && (e.muted = n) }, [u, n]), r.useEffect(() => { let e = u.current; if (null != e) void 0 !== a && (e.volume = a) }, [u, a]), r.useEffect(() => { let e = u.current; if (null != e) void 0 !== o && (o ? e.play() : e.pause()) }, [u, o]), (0, i.jsx)("audio", { ref: d, ...l }) }) }, 874748: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canUseMediaPostEmbed: function() { return I }, getMediaPostEmbedChannelPath: function() { return E }, getMediaPostEmbedCommonData: function() { return c } }), n("789020"); var i = n("830121"), r = n("754688"), s = n("430824"), a = n("768581"), o = n("5192"), l = n("154135"), u = n("981631"), d = n("959517"), _ = n("689938"); function c(e) { var t, n, i, r, s; let { mediaPostEmbedData: u, guild: c, parentChannel: E, postThread: I, user: T, selectedGuildId: f, canAccess: S = !1 } = e; if (null == u) return null; let h = (0, l.getThumbnailImage)(u.thumbnail), A = !S && u.has_media_attachment, m = S ? _.default.Messages.MEDIA_POST_EMBED_SUBSCRIBED_CTA : _.default.Messages.MEDIA_POST_EMBED_SUBSCRIBE_CTA, N = null != T ? o.default.getName(u.guild_id, u.channel_id, T) : void 0, p = null == T ? void 0 : T.getAvatarURL(null == c ? void 0 : c.id, 40); (null == p || f !== u.guild_id) && (p = a.default.getGuildIconURL({ id: u.guild_id, icon: u.guild_icon, size: 40, canAnimate: !1 })); let O = function(e) { if (null == e) return !1; let { height: t, width: n } = e; return null != t && null != n && t >= n }(u.thumbnail) && !A, C = (null === (t = u.thumbnail) || void 0 === t ? void 0 : t.filename) != null && (null === (i = u.thumbnail) || void 0 === i ? void 0 : null === (n = i.filename) || void 0 === n ? void 0 : n.startsWith(d.SPOILER_ATTACHMENT_PREFIX)); return { title: null !== (r = u.title) && void 0 !== r ? r : "", subtitle: u.description, ctaText: m, coverImage: h, coverImageOverlayText: A ? _.default.Messages.MEDIA_POST_EMBED_BLURRED_THUMBNAIL_TEXT : void 0, parentChannelId: u.parent_channel_id, threadId: u.channel_id, postThread: I, messageId: u.message_id, canAccess: S, guildId: u.guild_id, guildName: null !== (s = null == c ? void 0 : c.name) && void 0 !== s ? s : u.guild_name, authorId: null == u ? void 0 : u.author_id, authorName: N, channelName: null == E ? void 0 : E.name, avatarUrl: p, shouldShowBlurredThumbnailImage: A, shouldContainMediaWithBackground: O, shouldSpoiler: C, obscureAwaitingScan: !1, flags: u.flags, contentScanVersion: u.content_scan_version } } function E(e) { if (null == e) return; let t = (0, i.parseURLSafely)(e); if (null == t) return; let n = (0, i.remainingPathFromDiscordHostMatch)(t); if (null != n) return (0, r.tryParseChannelPath)(n) } function I(e, t) { let n = s.default.getGuild(e); if (null == n || null == t) return !1; let i = n.hasFeature(u.GuildFeatures.CREATOR_MONETIZABLE) || n.hasFeature(u.GuildFeatures.CREATOR_MONETIZABLE_PROVISIONAL); return !0 === t.isMediaChannel() && i } }, 154135: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_THUMBNAIL_COUNT: function() { return r }, getEmbedPreviewImageUrl: function() { return s }, getThumbnailImage: function() { return a } }); var i = n("118139"); let r = 4; function s(e) { var t, n; if (null == e) return; let { thumbnail: i, image: r } = e; return null != i ? null !== (t = i.proxy_url) && void 0 !== t ? t : i.url : null != r ? null !== (n = r.proxy_url) && void 0 !== n ? n : r.url : void 0 } function a(e) { if (null == e) return; let { url: t, proxy_url: n } = e; return null != t && null != n ? (0, i.isVideoUrl)(t) ? "".concat(n, "?format=jpeg") : n : t } }, 869185: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-05_av1_hardware_decode_electron", label: "AV1 hardware decode", defaultConfig: { hardwareDecodeAV1: !1 }, treatments: [{ id: 1, label: "enabled", config: { hardwareDecodeAV1: !0 } }] }) }, 248062: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2022-11_rtx40xx_gpu_screenshare_with_av1", label: "Test how AV1 works on windows with RTX40xx GPUs for screenshare", defaultConfig: { signalAV1Support: !1 }, treatments: [{ id: 1, label: "Screenshare with AV1", config: { signalAV1Support: !0 } }] }) }, 227196: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-03_airpods_mute_support", label: "Support for muting/unmuting via AirPods", defaultConfig: { airpodsMuteSupported: !1 }, treatments: [{ id: 1, label: "AirPods mute enabled", config: { airpodsMuteSupported: !0 } }] }) }, 294473: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-02_audio_short_circuit", label: "Audio processing short circuiting", defaultConfig: { muteBeforeProcessing: !1, pttBeforeProcessing: !1, skipEncode: !1 }, treatments: [{ id: 1, label: "Mute before processing", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !1, skipEncode: !1 } }, { id: 2, label: "PTT before processing", config: { muteBeforeProcessing: !1, pttBeforeProcessing: !0, skipEncode: !1 } }, { id: 3, label: "Mute + PTT before processing", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !0, skipEncode: !1 } }, { id: 4, label: "Skip encode", config: { muteBeforeProcessing: !1, pttBeforeProcessing: !1, skipEncode: !0 } }, { id: 5, label: "Mute before processing, skip encode", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !1, skipEncode: !0 } }, { id: 6, label: "PTT before processing, skip encode", config: { muteBeforeProcessing: !1, pttBeforeProcessing: !0, skipEncode: !0 } }, { id: 7, label: "Mute + PTT before processing, skip encode", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !0, skipEncode: !0 } }] }) }, 706629: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "guild", id: "2024-04_audio_short_circuit_guild", label: "Audio processing short circuiting (guild)", defaultConfig: { muteBeforeProcessing: !1, pttBeforeProcessing: !1, skipEncode: !1 }, treatments: [{ id: 1, label: "Mute before processing", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !1, skipEncode: !1 } }, { id: 2, label: "PTT before processing", config: { muteBeforeProcessing: !1, pttBeforeProcessing: !0, skipEncode: !1 } }, { id: 3, label: "Mute + PTT before processing", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !0, skipEncode: !1 } }, { id: 4, label: "Skip encode", config: { muteBeforeProcessing: !1, pttBeforeProcessing: !1, skipEncode: !0 } }, { id: 5, label: "Mute before processing, skip encode", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !1, skipEncode: !0 } }, { id: 6, label: "PTT before processing, skip encode", config: { muteBeforeProcessing: !1, pttBeforeProcessing: !0, skipEncode: !0 } }, { id: 7, label: "Mute + PTT before processing, skip encode", config: { muteBeforeProcessing: !0, pttBeforeProcessing: !0, skipEncode: !0 } }] }) }, 926951: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2024-03_remb_experiment", label: "Bandwidth Estimation - REMB", defaultConfig: { enabled: !0, fullname: "bandwidth_estimation/trendline-window-duration-3750,robust-estimator/trendline-window-duration-3750,robust-estimator" }, treatments: [{ id: 1, label: "Sender + Worker: Trendline Window Duration 7500ms + Robust Estimator, worker REMB PLI only", config: { enabled: !0, fullname: "bandwidth_estimation/trendline-window-duration-3750,robust-estimator/trendline-window-duration-3750,robust-estimator,worker-bitrate-remb-pli" } }, { id: 2, label: "Sender + Worker: Trendline Window Duration 7500ms + Robust Estimator, worker continuous REMB only", config: { enabled: !0, fullname: "bandwidth_estimation/trendline-window-duration-3750,robust-estimator/trendline-window-duration-3750,robust-estimator,worker-bitrate-remb-preemption-v1" } }, { id: 3, label: "Sender + Worker: Trendline Window Duration 7500ms + Robust Estimator, worker REMB PLI with continuous", config: { enabled: !0, fullname: "bandwidth_estimation/trendline-window-duration-3750,robust-estimator/trendline-window-duration-3750,robust-estimator,worker-bitrate-remb-preemption-v1,worker-bitrate-remb-pli" } }] }); t.default = { getConfig(e, t) { let n = r.getCurrentConfig({ location: "e1c55b_1" }, { autoTrackExposure: e }); return !this.supportsBandwidthEstimationExperimentFullname(n.fullname, t) && (n.enabled = !1), n }, supportsBandwidthEstimationExperimentFullname(e, t) { let n = this.getMediaEngineExperiments(e); if (null === n) return !1; for (let e of n) if (!t.includes(e)) return !1; return !0 }, getMediaEngineExperiments(e) { let t = e.split("/"); return 3 !== t.length || "bandwidth_estimation" !== t[0] ? null : t[1].split(",").filter(e => 0 !== e.length) } } }, 859132: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-04_call_experience_enhanced", label: "call experience enhanced", defaultConfig: { bucket: 0 }, treatments: [{ id: 1, label: "bucket 5", config: { bucket: 5 } }, { id: 2, label: "bucket 6", config: { bucket: 6 } }, { id: 3, label: "bucket 7", config: { bucket: 7 } }, { id: 4, label: "bucket 8", config: { bucket: 8 } }] }) }, 384406: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-04_call_experience", label: "call experience", defaultConfig: { bucket: 0 }, treatments: [{ id: 1, label: "bucket 1", config: { bucket: 1 } }, { id: 2, label: "bucket 2", config: { bucket: 2 } }, { id: 3, label: "bucket 3", config: { bucket: 3 } }, { id: 4, label: "bucket 4", config: { bucket: 4 } }] }) }, 836157: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-09_decoupled_game_clipping", label: "Test decoupled game clipping", defaultConfig: { enableDecoupledGameClipping: !1 }, treatments: [{ id: 1, label: "Decoupled Game Clipping", config: { enableDecoupledGameClipping: !0 } }] }) }, 166884: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-04_go_live_simulcast", label: "Go Live Simulcast", defaultConfig: { enableGoLiveSimulcast: !1 }, treatments: [{ id: 1, label: "enabled", config: { enableGoLiveSimulcast: !0 } }] }) }, 924371: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-06_h265_macos", label: "Test how h265 works on macos", defaultConfig: { signalH265SupportMacOS: !1 }, treatments: [{ id: 1, label: "Calling with H.265", config: { signalH265SupportMacOS: !0 } }] }) }, 894180: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-02_h265_for_windows_with_amd", label: "Test H.265 on Windows with the AMD hardware encoder", defaultConfig: { signalH265SupportAMD: !1 }, treatments: [{ id: 1, label: "Use H.265 for AMD on Windows", config: { signalH265SupportAMD: !0 } }] }) }, 86614: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-07_h265_for_windows_with_nvidia", label: "Test how h265 works on Windows with Nvidia nvenc codec", defaultConfig: { signalH265SupportNvenc: !1 }, treatments: [{ id: 1, label: "Calling with H.265", config: { signalH265SupportNvenc: !0 } }] }) }, 498600: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2021-06_hdr_screen_capture", label: "HDR Screen Capture", defaultConfig: { hdrCaptureMode: "never" }, treatments: [{ id: 1, label: "Always", config: { hdrCaptureMode: "always" } }, { id: 2, label: "Permitted Devices Only", config: { hdrCaptureMode: "permittedDevicesOnly" } }] }) }, 671335: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-05_hiding_window_disables_video", label: "Hiding Window Disables Incoming Video", defaultConfig: { stopVideoForHiddenWindow: !1 }, treatments: [{ id: 1, label: "test", config: { stopVideoForHiddenWindow: !0 } }] }) }, 631610: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-08_full_band_krisp_android_", label: "Let us control if full band is enabled on Android", defaultConfig: { allowSettingFullbandAndroid: !1 }, treatments: [{ id: 1, label: "Load full band krisp model", config: { allowSettingFullbandAndroid: !0 } }] }) }, 868616: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "guild", id: "2024-03_krisp_sentiment", label: "override krisp setting", defaultConfig: { shouldOverrideKrisp: !1, overrideKrispSetting: !1 }, treatments: [{ id: 1, label: "Force enable krisp", config: { shouldOverrideKrisp: !0, overrideKrispSetting: !0 } }, { id: 2, label: "Force disable krisp", config: { shouldOverrideKrisp: !0, overrideKrispSetting: !1 } }] }) }, 951958: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2021-08_max_sync_delay", label: "Overrides the default max sync delay for AV streams in WebRTC", defaultConfig: { maxSyncDelayOverride: 0 }, treatments: [{ id: 1, label: "Use 3 seconds as max sync delay", config: { maxSyncDelayOverride: 3e3 } }] }) }, 848886: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "guild", id: "2024-01_nvencadaptivekeyframe", label: "nvenc adaptive key frame interval", defaultConfig: { enableAdaptiveKeyFrame: !1 }, treatments: [{ id: 1, label: "enable adaptive key frame for nvenc", config: { enableAdaptiveKeyFrame: !0 } }] }) }, 583215: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-02_nvenc_new_presets", label: "nvenc new presets", defaultConfig: { nvEnableNewPresets: !1 }, treatments: [{ id: 1, label: "enable adaptive key frame for nvenc", config: { nvEnableNewPresets: !0 } }] }) }, 576574: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-12_nv_relaxed_rate_control", label: "Alternative rate control proposal for Nvidia encoder", defaultConfig: { nvMediumVbvSizeMs: 0 }, treatments: [{ id: 1, label: "250 ms", config: { nvMediumVbvSizeMs: 250 } }, { id: 2, label: "500 ms", config: { nvMediumVbvSizeMs: 500 } }, { id: 3, label: "1000 ms", config: { nvMediumVbvSizeMs: 1e3 } }] }) }, 529558: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SecureFramesGuildExperiment: function() { return s }, SecureFramesUserExperiment: function() { return r } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2023-08_secure_frames_encryption", label: "Allowing testing secure frames for voice/video", defaultConfig: { protocolVersionFloor: 0, canSupportSecureFrames: !1, canSupportMls: !1 }, treatments: [{ id: 6, label: "Can support secure frames above protocol version 10", config: { protocolVersionFloor: 10, canSupportSecureFrames: !0, canSupportMls: !1 } }, { id: 7, label: "Can support secure frames above protocol version 110 (MLS)", config: { protocolVersionFloor: 10, canSupportSecureFrames: !0, canSupportMls: !0 } }, { id: 8, label: "Can support secure frames above protocol version 11", config: { protocolVersionFloor: 11, canSupportSecureFrames: !0, canSupportMls: !1 } }, { id: 9, label: "Can support secure frames above protocol version 111 (MLS)", config: { protocolVersionFloor: 11, canSupportSecureFrames: !0, canSupportMls: !0 } }] }), s = (0, i.createExperiment)({ kind: "guild", id: "2023-11_secure_frames_encryption_guilds", label: "Allowing testing secure frames for voice/video (Guilds)", defaultConfig: { protocolVersionFloor: 0, canSupportSecureFrames: !1, canSupportMls: !1 }, treatments: [{ id: 6, label: "Can support secure frames above protocol version 10", config: { protocolVersionFloor: 10, canSupportSecureFrames: !0, canSupportMls: !1 } }, { id: 7, label: "Can support secure frames above protocol version 110 (MLS)", config: { protocolVersionFloor: 10, canSupportSecureFrames: !0, canSupportMls: !0 } }, { id: 8, label: "Can support secure frames above protocol version 11", config: { protocolVersionFloor: 11, canSupportSecureFrames: !0, canSupportMls: !1 } }, { id: 9, label: "Can support secure frames above protocol version 111 (MLS)", config: { protocolVersionFloor: 11, canSupportSecureFrames: !0, canSupportMls: !0 } }] }) }, 874785: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2024-04_video_decoder_reset_fallback", label: "Video decoder reset/fallback on errors", defaultConfig: { resetOnErrors: !1, fallbackOnErrors: !1, fallbackOnConsecutiveErrors: !1 }, treatments: [{ id: 1, label: "Reset only", config: { resetOnErrors: !0, fallbackOnErrors: !1, fallbackOnConsecutiveErrors: !1 } }, { id: 2, label: "Fallback only", config: { resetOnErrors: !1, fallbackOnErrors: !0, fallbackOnConsecutiveErrors: !1 } }, { id: 3, label: "Reset and fallback", config: { resetOnErrors: !0, fallbackOnErrors: !0, fallbackOnConsecutiveErrors: !1 } }, { id: 4, label: "Reset and fallback, consecutive", config: { resetOnErrors: !0, fallbackOnErrors: !1, fallbackOnConsecutiveErrors: !0 } }] }) }, 307320: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-01_auto_disable_video_mobile_v2", label: "Mobile performance: VideoHealthManager (v2)", defaultConfig: { featureEnabled: !1, windowLength: 5, allowedPoorFpsRatio: 1, fpsThreshold: 5, backoffTimeSec: 15 }, treatments: [{ id: 1, label: "5 second window, 100% allowed poor fps ratio, 5 fps threshold, 15 second backoff", config: { featureEnabled: !0, windowLength: 5, allowedPoorFpsRatio: 1, fpsThreshold: 5, backoffTimeSec: 15 } }, { id: 2, label: "5 second window, 100% allowed poor fps ratio, 5 fps threshold, 10 second backoff", config: { featureEnabled: !0, windowLength: 5, allowedPoorFpsRatio: 1, fpsThreshold: 5, backoffTimeSec: 10 } }, { id: 3, label: "10 second window, 70% allowed poor fps ratio, 5 fps threshold, 15 second backoff", config: { featureEnabled: !0, windowLength: 10, allowedPoorFpsRatio: .7, fpsThreshold: 5, backoffTimeSec: 15 } }, { id: 4, label: "10 second window, 90% allowed poor fps ratio, 5 fps threshold, 15 second backoff", config: { featureEnabled: !0, windowLength: 10, allowedPoorFpsRatio: .9, fpsThreshold: 5, backoffTimeSec: 15 } }] }); t.default = { isFeatureSupportedOnPlatform: () => !1, getConfig(e) { let t = i.getCurrentConfig({ location: "508d6c_1" }, { autoTrackExposure: e }); return !this.isFeatureSupportedOnPlatform() && (t.featureEnabled = !1), t } } }, 420363: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-08_video_quality_measurement_v1", label: "Video Quality Measurement", defaultConfig: { enabled: !1, measurement: "" }, treatments: [{ id: 1, label: "Measure PSNR [DEPRECATED DO NOT USE]", config: { enabled: !0, measurement: "psnr" } }, { id: 2, label: "Measure PSNR Only", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb" } }, { id: 3, label: "Measure VMAF Only", config: { enabled: !0, measurement: "imageQualityVmaf_v061" } }, { id: 4, label: "Measure PSNR and VMAF", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb,imageQualityVmaf_v061" } }, { id: 5, label: "Measure PSNR Only, 5000ms", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb:5000" } }, { id: 6, label: "Measure VMAF Only, 5000ms", config: { enabled: !0, measurement: "imageQualityVmaf_v061:5000" } }, { id: 7, label: "Measure PSNR and VMAF, 5000ms", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb:5000,imageQualityVmaf_v061:5000" } }, { id: 8, label: "Measure PSNR Only, 10000ms", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb:10000" } }, { id: 9, label: "Measure VMAF Only, 10000ms", config: { enabled: !0, measurement: "imageQualityVmaf_v061:10000" } }, { id: 10, label: "Measure PSNR and VMAF, 10000ms", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb:10000,imageQualityVmaf_v061:10000" } }, { id: 11, label: "Measure PSNR Only, 30000ms", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb:30000" } }, { id: 12, label: "Measure VMAF Only, 30000ms", config: { enabled: !0, measurement: "imageQualityVmaf_v061:30000" } }, { id: 13, label: "Measure PSNR and VMAF, 30000ms", config: { enabled: !0, measurement: "imageQualityWebrtcPsnrDb:30000,imageQualityVmaf_v061:30000" } }] }); t.default = { isFeatureSupportedOnPlatform: () => !0, getConfig(e) { let t = i.getCurrentConfig({ location: "e1c55b_1" }, { autoTrackExposure: e }); return !this.isFeatureSupportedOnPlatform() && (t.enabled = !1), t } } }, 636458: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2021-03_videotoolbox_rate_optimization", label: "VideoToolbox Rate Control Optimizations", defaultConfig: { useExperimentalRateControl: !1 }, treatments: [{ id: 1, label: "On", config: { useExperimentalRateControl: !0 } }] }) }, 441167: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-10_viewer_clipping", label: "Test viewer side clipping", defaultConfig: { enableViewerClipping: !1, ignoreSenderPreference: !1 }, treatments: [{ id: 1, label: "Viewer Clipping enabled", config: { enableViewerClipping: !0, ignoreSenderPreference: !1 } }, { id: 2, label: "Viewer Clipping enabled; For developer testing", config: { enableViewerClipping: !0, ignoreSenderPreference: !0 } }] }) }, 147063: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("570140"), r = n("65154"); function s(e, t) { i.default.wait(() => { i.default.dispatch({ type: "AUDIO_SET_LOCAL_VIDEO_DISABLED", context: r.MediaEngineContextTypes.DEFAULT, userId: e, videoToggleState: t, persist: !1, isAutomatic: !0 }) }) } }, 527702: function(e, t, n) { "use strict"; n.r(t), (0, n("818083").createExperiment)({ kind: "user", id: "2021-09_ios_screenshare_resolution_profiles", label: "iOS: Screenshare resolution profiles", defaultConfig: { profile: 0 }, treatments: [{ id: 1, label: "Permanent old resolution", config: { profile: 1 } }, { id: 2, label: "Old resolution for 10s", config: { profile: 2 } }, { id: 3, label: "Wait 3s after 1st frame capture", config: { profile: 3 } }, { id: 4, label: "Wait 3s to capture 1st frame", config: { profile: 4 } }] }) }, 338336: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { default: function() { return l }, setVideoToggleAnalyticsParams: function() { return u } }); var s = n("626135"), a = n("307320"), o = n("981631"); function l(e, t, n) { let { featureEnabled: l, windowLength: u, allowedPoorFpsRatio: d, fpsThreshold: _, backoffTimeSec: c } = a.default.getConfig(!1); s.default.track(o.AnalyticEvents.VIDEO_TOGGLED, { video_toggle_reason: t, toggled_user_id: e, rtc_connection_id: null == i ? void 0 : i(), media_session_id: null == r ? void 0 : r(), video_health_manager_window_length: l ? u : null, video_health_manager_poor_fps_ratio: l ? d : null, video_health_manager_fps_threshold: l ? _ : null, is_video_shown: n, video_health_manager_backoff_time_seconds: l ? c : null }) } function u(e, t) { i = e, r = t } }, 703767: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"); var i = n("147913"), r = n("579806"), s = n("818083"), a = n("998502"); let o = [0, 0]; function l(e) { let t = e.toString(16); for (; t.length < 4;) t = "0" + t; return t } function u(e) { return [4098, e] } let d = [function(e, t, n, i) { let r = [], a = n.map(e => e.map(l).join(":")).join(", "); for (let e = 0; e < i.length; e++) { let t = {}; t[i[e]] = "1", r.push({ id: e + 1, label: i[e], config: t }) } return { gpus: n, experiment: (0, s.createExperiment)({ kind: "user", id: e, label: "GPU Workarounds: ".concat(t, " (").concat(a, ")"), defaultConfig: {}, treatments: r }) } }("2024-03_amd_vdec_tests_1", "AMD video decode tests 1", [u(5592), u(5597), u(5686), u(5688), u(5708), u(5761), u(26607), u(26591), u(29471), u(29504), u(29631), u(29679), u(29663), u(29695), u(29759), u(29772), u(29822), u(29824)], ["disable_media_foundation_clear_playback", "disable_d3d11_video_decoder"])]; function _(e) { for (let t of e) if (t[0] === o[0] && t[1] === o[1]) return !0; return !1 } let c = !1; function E() { let e = {}; for (let t of d) if (_(t.gpus)) { let n = t.experiment.getCurrentConfig({ location: "updateFlags" }); e = { ...e, ...n } } a.default.setChromiumSwitches(e) } class I extends i.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: async () => { try { var e, t, n, i; if (c || (null === (t = window.DiscordNative) || void 0 === t ? void 0 : null === (e = t.gpuSettings) || void 0 === e ? void 0 : e.setChromiumSwitches) == null) return; let s = await r.default.processUtils.getSystemInfo(); for (let e of null !== (i = null === (n = s.electronGPUInfo) || void 0 === n ? void 0 : n.gpuDevice) && void 0 !== i ? i : []) !0 === e.active && (o = [e.vendorId, e.deviceId]); for (let e of (c = !0, d)) _(e.gpus) && e.experiment.subscribe({ location: "GPU experiment subscription" }, E); E() } catch (e) {} } }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new I }, 681694: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("846519"), r = n("570140"), s = n("147913"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o extends s.default { _terminate() { this.clearErrorTimeout.stop() } constructor(...e) { super(...e), a(this, "clearErrorTimeout", new i.Timeout), a(this, "actions", { MEDIA_ENGINE_NOISE_CANCELLATION_ERROR: () => this.handleNoiseCancellationError() }), a(this, "handleNoiseCancellationError", () => { this.clearErrorTimeout.start(3e3, () => r.default.dispatch({ type: "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET" })) }) } } t.default = new o }, 355298: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("133080"), r = n("592125"), s = n("412788"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = new Set, l = new Set, u = !1, d = null; function _(e) { return e.isMessageRequest && !e.isSpam } function c(e) { let t = !1; return _(e) && !o.has(e.id) && (o.add(e.id), t = !0), !_(e) && o.has(e.id) && (o.delete(e.id), t = !0), !_(e) && l.has(e.id) && (l.delete(e.id), t = !0), t } function E(e) { var t; null != e && (d = null !== (t = (0, i.getCountryCodeByAlpha2)(e)) && void 0 !== t ? t : (0, i.getDefaultCountryCode)()) } function I(e) { "CONNECTION_OPEN" === e.type && E(e.countryCode), o.clear(), l.clear(), Object.values(r.default.getMutablePrivateChannels()).forEach(e => { c(e) }), u = !0 } function T(e) { let { channelId: t } = e; l.add(t) } function f(e) { let { channel: t } = e; return c(t) } function S(e) { let { channels: t } = e; for (let e of t) c(e) } function h(e) { let { channel: t } = e; return !!o.has(t.id) && (o.delete(t.id), !0) } function A(e) { let { messageRequestChannelIds: t } = e; t.forEach(e => o.add(e)) } function m(e) { let { countryCode: t } = e; E(t) } class N extends s.default { initialize() { this.waitFor(r.default) } loadCache() { let e = this.readSnapshot(N.LATEST_SNAPSHOT_VERSION); null != e && (o = new Set(e)) } takeSnapshot() { return { version: N.LATEST_SNAPSHOT_VERSION, data: Array.from(o) } } getMessageRequestChannelIds() { return o } getMessageRequestsCount() { return o.size } isMessageRequest(e) { return o.has(e) } isAcceptedOptimistic(e) { return l.has(e) } getUserCountryCode() { return d } isReady() { return u } constructor() { super({ CONNECTION_OPEN: I, CONNECTION_OPEN_SUPPLEMENTAL: I, CACHE_LOADED_LAZY: () => this.loadCache(), OVERLAY_INITIALIZE: A, CHANNEL_CREATE: f, CHANNEL_UPDATES: S, CHANNEL_DELETE: h, SET_LOCATION_METADATA: m, MESSAGE_REQUEST_ACCEPT_OPTIMISTIC: T }) } } a(N, "displayName", "MessageRequestStore"), a(N, "LATEST_SNAPSHOT_VERSION", 1), t.default = new N }, 869404: function(e, t, n) { "use strict"; n.r(t), n.d(t, { filterOutMessageRequestsAndSpam: function() { return a }, filterOutMessageRequestsAndSpamById: function() { return o }, isMessageRequestOrSpamRequest: function() { return l }, shouldShowMessageRequests: function() { return u } }), n("47120"), n("724458"); var i = n("709054"), r = n("355298"), s = n("333984"); function a(e) { let [t, n] = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [r.default, s.default]; return function(e) { return Array.from(e).reduce((e, t) => { let [n, i] = t; return Object.assign(e, { [n]: i }) }, {}) }((function(e) { return i.default.keys(e).map(t => [t, e[t]]) })(e).filter(e => { let [, i] = e; return !t.isMessageRequest(i.id) && !n.isSpam(i.id) })) } function o(e) { let [t, n] = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [r.default, s.default]; return e.filter(e => !t.isMessageRequest(e) && !n.isSpam(e)) } function l(e) { let [t, n] = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [r.default, s.default]; return t.isMessageRequest(e) || n.isSpam(e) } function u() { let [e, t] = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [r.default, s.default], n = t.getSpamChannelsCount(), i = e.getMessageRequestsCount(); return i > 0 || n > 0 } }, 333984: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("592125"), r = n("412788"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = new Set, o = new Set, l = !1; function u(e) { return e.isSpam } function d(e) { let t = !1; if (e.isSpam && !a.has(e.id)) a.add(e.id), t = !0; if (!e.isSpam && a.has(e.id)) a.delete(e.id), t = !0; if (!e.isSpam && o.has(e.id)) o.delete(e.id), t = !0; return t } function _() { a.clear(), o.clear(), Object.values(i.default.getMutablePrivateChannels()).forEach(e => { d(e) }), l = !0 } function c(e) { let { channelId: t } = e; o.add(t) } function E(e) { let { channel: t } = e; return d(t) } function I(e) { let { channels: t } = e; for (let e of t) d(e) } function T(e) { let { channel: t } = e, n = !1; return a.has(t.id) && (a.delete(t.id), n = !0), n } class f extends r.default { initialize() { this.waitFor(i.default) } loadCache() { let e = this.readSnapshot(f.LATEST_SNAPSHOT_VERSION); null != e && (a = new Set(e)) } takeSnapshot() { return { version: f.LATEST_SNAPSHOT_VERSION, data: Array.from(a) } } getSpamChannelIds() { return a } getSpamChannelsCount() { return a.size } isSpam(e) { return a.has(e) } isAcceptedOptimistic(e) { return o.has(e) } isReady() { return l } constructor() { super({ CONNECTION_OPEN: _, CONNECTION_OPEN_SUPPLEMENTAL: _, CACHE_LOADED_LAZY: () => this.loadCache(), CHANNEL_CREATE: E, CHANNEL_UPDATES: I, CHANNEL_DELETE: T, MESSAGE_REQUEST_ACCEPT_OPTIMISTIC: c }) } } s(f, "displayName", "SpamMessageRequestStore"), s(f, "LATEST_SNAPSHOT_VERSION", 1), t.default = new f }, 822893: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addMessageReminders: function() { return I }, cleanupMessageReminders: function() { return h }, completeMessageReminders: function() { return S }, fetchAndUpdateSavedMessages: function() { return N }, toggleMessageReminders: function() { return f }, updateReminderDueAt: function() { return T } }); var i = n("544891"), r = n("570140"), s = n("933557"), a = n("592125"), o = n("430824"), l = n("699516"), u = n("594174"), d = n("626135"), _ = n("329461"), c = n("831267"), E = n("981631"); function I(e, t) { d.default.track(E.AnalyticEvents.GUILD_JOIN_FEEDBACK, { skipped: !1, reason: "adding", rating: "".concat(_.default.getMessageReminders().length) }), m([{ messageId: e.id, channelId: e.channel_id, savedAt: new Date, dueAt: t, ... function(e) { let t = a.default.getChannel(e.channel_id); if (null == t) return null; let n = o.default.getGuild(t.guild_id), i = "", r = (0, s.computeChannelName)(t, u.default, l.default, !0); if (t.isPrivate()) i = r; else if (t.isThread()) { let e = a.default.getChannel(t.parent_id); if (null == e) return null; let n = (0, s.computeChannelName)(e, u.default, l.default, !0); i = "".concat(n, " > ").concat(r) } else i = r; let d = "".concat(e.content.length > 0 ? e.content : "".concat(e.attachments.length, " attachments")); return { authorSummary: e.author.username, authorId: e.author.id, channelSummary: i, messageSummary: d.length > 200 ? "".concat(d.slice(0, 197), "...") : d, guildId: null == n ? void 0 : n.id } }(e) }], []) } function T(e, t) { d.default.track(E.AnalyticEvents.GUILD_JOIN_FEEDBACK, { skipped: !1, reason: "updating_due_at", rating: "".concat(_.default.getMessageReminders().length) }); let n = _.default.getMessageReminders().find(t => t.messageId === e); null != n && m([{ ...n, savedAt: new Date, dueAt: t }], [n]) } function f(e, t) { d.default.track(E.AnalyticEvents.GUILD_JOIN_FEEDBACK, { skipped: t, reason: "updating within the list", rating: "".concat(_.default.getMessageReminders().length) }), r.default.dispatch({ type: "MESSAGE_REMINDER_TOGGLE", messageId: e, complete: t }) } function S(e) { d.default.track(E.AnalyticEvents.GUILD_JOIN_FEEDBACK, { skipped: !1, reason: "complete and clear immediately", rating: "".concat(_.default.getMessageReminders().length) }), m([], _.default.getMessageReminders().filter(t => t.messageId === e)) } function h() { d.default.track(E.AnalyticEvents.GUILD_JOIN_FEEDBACK, { skipped: !1, reason: "clearing", rating: "".concat(_.default.getMessageReminders().length) }); let e = _.default.getMessageReminders(); e.some(e => e.complete) && m([], e.filter(e => e.complete)) } function A(e) { d.default.track(E.AnalyticEvents.GUILD_JOIN_FEEDBACK, { skipped: !1, reason: "updated_from_server", rating: "".concat(_.default.getMessageReminders().length) }), r.default.dispatch({ type: "SAVED_MESSAGES_UPDATE", messages: e }) } function m(e, t) { (0 !== e.length || 0 !== t.length) && i.HTTP.post({ url: E.Endpoints.SAVED_MESSAGES, body: { added: e.map(c.savedMessageToServer), removed: t.map(c.savedMessageToServer) } }).then(e => { A(e.body.saved_messages.map(c.savedMessageToClient)) }) } function N() { return _.default.recentlyFetched() ? Promise.resolve() : i.HTTP.get({ url: E.Endpoints.SAVED_MESSAGES }).then(e => { A(e.body.saved_messages.map(c.savedMessageToClient)) }) } }, 641051: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2022-08_message_todos_staff_only", label: "Message TODO list", defaultConfig: { showReminders: !1 }, treatments: [{ id: 1, label: "Show message TODOs CTA", config: { showReminders: !0 } }] }); t.default = i }, 652244: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("70956"), s = n("822893"), a = n("641051"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class l extends i.default { constructor(...e) { super(...e), o(this, "actions", { POST_CONNECTION_OPEN: () => this.handlePostConnectionOpen() }), o(this, "handlePostConnectionOpen", () => { ! function e() { a.default.getCurrentConfig({ location: "e391b1_1" }, { autoTrackExposure: !1 }).showReminders && (0, s.fetchAndUpdateSavedMessages)().then(() => setTimeout(e, 15 * r.default.Millis.MINUTE)) }() }) } } t.default = new l }, 329461: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("70956"); let d = [], _ = new Set, c = 0; class E extends(i = o.default.Store) { initialize() { setInterval(() => { this.emitChange() }, 1 * u.default.Millis.MINUTE) } getMessageReminders() { return d } isMessageReminder(e) { let t = d.find(t => t.messageId === e); return null != t && !t.complete } getOverdueMessageReminderCount() { return d.filter(e => null == e.dueAt || new Date > e.dueAt).length } recentlyFetched() { return new Date().getTime() - c < 1 * u.default.Millis.MINUTE } hasSentNotification(e) { return _.has(e) } getState() { return { messages: d } } } a = "MessageRemindersStore", (s = "displayName") in(r = E) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new E(l.default, { SAVED_MESSAGES_UPDATE: function(e) { let { messages: t } = e; c = new Date().getTime(), d = t.map(e => ({ ...e, complete: !1 })), t.forEach(e => { null != e.dueAt && e.dueAt > new Date && _.delete(e.messageId), null != e.dueAt && e.dueAt < new Date && _.add(e.messageId) }) }, MESSAGE_REMINDER_TOGGLE: function(e) { let { messageId: t, complete: n } = e, i = d.findIndex(e => e.messageId === t); if (-1 === i) return !1; d[i] = { ...d[i], complete: n } }, MESSAGE_REMINDER_NOTIFIED: function(e) { let { messageId: t } = e; _.add(t) } }) }, 831267: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MESSAGE_REMINDER_DURATION_ITEMS: function() { return l }, savedMessageHasMetadata: function() { return o }, savedMessageToClient: function() { return a }, savedMessageToServer: function() { return s } }); var i = n("70956"), r = n("689938"); function s(e) { var t; return { channel_id: e.channelId, message_id: e.messageId, saved_at: e.savedAt.toISOString(), author_summary: e.authorSummary, channel_summary: e.channelSummary, message_summary: e.messageSummary, guild_id: e.guildId, author_id: e.authorId, notes: e.notes, due_at: null === (t = e.dueAt) || void 0 === t ? void 0 : t.toISOString() } } function a(e) { return { channelId: e.channel_id, messageId: e.message_id, savedAt: new Date(e.saved_at), authorSummary: e.author_summary, channelSummary: e.channel_summary, messageSummary: e.message_summary, guildId: 0 === e.guild_id ? void 0 : e.guild_id, authorId: 0 === e.author_id ? void 0 : e.author_id, notes: e.notes, dueAt: null != e.due_at ? new Date(e.due_at) : void 0 } } function o(e) { return null != e.authorSummary && e.authorSummary.length > 0 && null != e.channelSummary && e.channelSummary.length > 0 && null != e.messageSummary && e.messageSummary.length > 0 && null != e.authorId && e.authorId.length > 0 } let l = [{ duration: i.default.Millis.HOUR, getLabel: () => r.default.Messages.MESSAGE_REMINDERS_IN_ONE_HOUR }, { duration: 2 * i.default.Millis.HOUR, getLabel: () => r.default.Messages.MESSAGE_REMINDERS_IN_TWO_HOURS }, { duration: 4 * i.default.Millis.HOUR, getLabel: () => r.default.Messages.MESSAGE_REMINDERS_IN_FOUR_HOURS }, { duration: i.default.Millis.DAY, getLabel: () => r.default.Messages.MESSAGE_REMINDERS_IN_ONE_DAY }, { duration: i.default.Millis.WEEK, getLabel: () => r.default.Messages.MESSAGE_REMINDERS_IN_ONE_WEEK }] }, 211040: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("147913"), s = n("703656"), a = n("70956"), o = n("654769"), l = n("641051"), u = n("329461"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class c extends r.default { constructor(...e) { super(...e), _(this, "actions", { POST_CONNECTION_OPEN: () => this.handlePostConnectionOpen() }), _(this, "handlePostConnectionOpen", () => { ! function e() { l.default.getCurrentConfig({ location: "8fe27d_1" }, { autoTrackExposure: !1 }).showReminders && (u.default.getMessageReminders().filter(e => null != e.dueAt && new Date > e.dueAt).filter(e => !u.default.hasSentNotification(e.messageId)).forEach(e => { var t, n; o.default.showNotification(null, "Overdue reminder in ".concat(e.channelSummary), null !== (n = null !== (t = e.notes) && void 0 !== t ? t : e.messageSummary) && void 0 !== n ? n : "", { notif_type: "OVERDUE_MESSAGE_REMINDER", notif_user_id: e.authorId, message_id: e.messageId, channel_id: e.channelId, guild_id: e.guildId }, { omitViewTracking: !0, tag: e.messageId, onClick() { (0, s.transitionTo)(d.Routes.CHANNEL(e.guildId, e.channelId, e.messageId)) } }), i.default.dispatch({ type: "MESSAGE_REMINDER_NOTIFIED", messageId: e.messageId }) }), setTimeout(() => { e() }, 5 * a.default.Millis.MINUTE)) }() }) } } t.default = new c }, 529726: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("31775"), r = n.n(i), s = n("147913"), a = n("626135"), o = n("709054"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class d extends s.default { handleMessageBecameVisible(e) { let { messageId: t } = e; if (null != this.currentlyVisibleMessageTimers[t] || this.viewsInCurrentChannel.has(t)) return; let n = this.recentViewTimes.get(t); if (null != n && Date.now() - n < 6e4) return; let i = setTimeout(() => { delete this.currentlyVisibleMessageTimers[t], this.viewsInCurrentChannel.add(t), this.recentViewTimes.set(t, Date.now()), this.bufferViewTrack(e) }, 1e3); this.currentlyVisibleMessageTimers[t] = i } handleMessageLostVisibility(e) { let t = this.currentlyVisibleMessageTimers[e]; null != t && (clearTimeout(t), delete this.currentlyVisibleMessageTimers[e]) } handleMessageListVisibilityChange(e) { for (let t of e) this.handleMessageBecameVisible(t); let t = new Set(e.map(e => e.messageId)); for (let e of o.default.keys(this.currentlyVisibleMessageTimers)) !t.has(e) && this.handleMessageLostVisibility(e) } handleChannelSelect() { for (let e of Object.values(this.currentlyVisibleMessageTimers)) clearTimeout(e); this.currentlyVisibleMessageTimers = {}, this.viewsInCurrentChannel.clear(), this.drainBuffer() } drainBuffer() { for (let e of this.batchBuffer) a.default.track(l.AnalyticEvents.ANNOUNCEMENT_MESSAGE_VIEWED, { message_id: e.messageId, channel_id: e.channelId, guild_id: e.guildId, source_channel_id: e.sourceChannelId, source_guild_id: e.sourceGuildId }); this.batchBuffer = [], null != this.batchTimerId && (clearTimeout(this.batchTimerId), this.batchTimerId = null) } bufferViewTrack(e) { this.batchBuffer.length >= 10 && this.drainBuffer(), this.batchBuffer.push(e), null == this.batchTimerId && (this.batchTimerId = setTimeout(() => this.drainBuffer(), 2e3)) } constructor(...e) { super(...e), u(this, "currentlyVisibleMessageTimers", {}), u(this, "viewsInCurrentChannel", new Set), u(this, "recentViewTimes", new(r())({ max: 500, maxAge: 6e4 })), u(this, "batchBuffer", []), u(this, "batchTimerId", null), u(this, "actions", { CHANNEL_SELECT: () => this.handleChannelSelect() }) } } t.default = new d }, 796798: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AttachmentLinkRefreshExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-12_attachment_link_refresh", label: "Attachment Link Refresh User Experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Refresh expired attachment links", config: { enabled: !0 } }] }) }, 779832: function(e, t, n) { "use strict"; n.r(t); t.default = { backgroundTaskIdentifierInvalid: -1, backgroundify: function(e, t) { return e }, startBackgroundTask: e => new Promise(e => e(-1)), endBackgroundTask: e => {} } }, 549464: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-01_chunked_message_attachment_uploads", label: "Use chunked uploads for message attachments", defaultConfig: { enabled: !1, chunkSize: 0 }, treatments: [{ id: 1, label: "Chunked message attachment uploads", config: { enabled: !0, chunkSize: 8388608 } }] }); t.default = i }, 817384: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EMBED_TYPES_WITH_PARSEABLE_FIELDS: function() { return r }, EMBED_TYPES_WITH_SPECIAL_RENDERER: function() { return s } }), n("47120"); var i = n("981631"); let r = new Set([i.MessageEmbedTypes.AUTO_MODERATION_MESSAGE, i.MessageEmbedTypes.AUTO_MODERATION_NOTIFICATION, i.MessageEmbedTypes.RICH, i.MessageEmbedTypes.SAFETY_POLICY_NOTICE, i.MessageEmbedTypes.SAFETY_SYSTEM_NOTIFICATION, i.MessageEmbedTypes.VOICE_CHANNEL, i.MessageEmbedTypes.POLL_RESULT]), s = new Set([i.MessageEmbedTypes.AUTO_MODERATION_MESSAGE, i.MessageEmbedTypes.AUTO_MODERATION_NOTIFICATION, i.MessageEmbedTypes.APPLICATION_NEWS, i.MessageEmbedTypes.POST_PREVIEW, i.MessageEmbedTypes.SAFETY_POLICY_NOTICE, i.MessageEmbedTypes.SAFETY_SYSTEM_NOTIFICATION, i.MessageEmbedTypes.VOICE_CHANNEL, i.MessageEmbedTypes.POLL_RESULT]) }, 118139: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isAnimatedImageUrl: function() { return d }, isImageContentType: function() { return l }, isImageFile: function() { return o }, isVideoContentType: function() { return I }, isVideoFile: function() { return E }, isVideoUrl: function() { return c } }), n("47120"); var i = n("358085"); let r = (e, t) => { if (null == e) return !1; let [n, i] = e.split(/\?/, 1); return t.test(n) }, s = (e, t) => { if (null == e) return !1; let [n, i] = e.split("/"); return n === t }, a = /\.(png|jpe?g|webp|gif|heic|heif|dng)$/i, o = e => null != e && a.test(e), l = e => s(e, "image"), u = /\.(webp|gif)$/i, d = e => r(e, u), _ = (0, i.isIOS)() ? /\.(mp4|mov)$/i : ((0, i.isAndroid)(), /\.(mp4|webm|mov)$/i), c = e => r(e, _), E = e => null != e && _.test(e), I = e => s(e, "video") }, 169525: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ObscureReason: function() { return i }, getForumPostShouldObscure: function() { return p }, getObscureReasonForAttachment: function() { return A }, getObscureReasonForEmbed: function() { return m }, getObscureReasonForUnfurledMediaItem: function() { return N }, getObscuredAlt: function() { return C }, useShouldObscure: function() { return O } }), n("789020"), n("627341"); var i, r, s = n("278074"), a = n("399606"), o = n("432877"), l = n("163268"), u = n("25610"), d = n("368844"), _ = n("768494"), c = n("695346"), E = n("375954"), I = n("496675"), T = n("630388"), f = n("255269"), S = n("981631"), h = n("689938"); (r = i || (i = {})).SPOILER = "spoiler", r.EXPLICIT_CONTENT = "explicit_content", r.POTENTIAL_EXPLICIT_CONTENT = "potential_explicit_content"; let A = (e, t) => { let { spoiler: n, flags: i = 0, content_scan_version: r } = e; if (t) { if ((0, l.isPendingScanVersion)(r)) return "potential_explicit_content"; if ((0, T.hasFlag)(i, S.MessageAttachmentFlags.CONTAINS_EXPLICIT_MEDIA) || o.default.get("obscure_blur_effect_enabled")) return "explicit_content" } return n || (0, T.hasFlag)(i, S.MessageAttachmentFlags.IS_SPOILER) ? "spoiler" : null }, m = (e, t, n, i, r) => { let { flags: s = 0, contentScanVersion: a } = e, u = E.default.getMessage(t, n); if (null == u) return null; if (r) { if (!u.author.bot && (0, l.isPendingScanVersion)(a)) return "potential_explicit_content"; if ((0, T.hasFlag)(s, S.MessageEmbedFlags.CONTAINS_EXPLICIT_MEDIA) || o.default.get("obscure_blur_effect_enabled")) return "explicit_content" } return i ? "spoiler" : null }, N = function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], { contentScanMetadata: i } = e; if (t) { if ((0, l.isPendingScan)(i)) return "potential_explicit_content"; let { contentScanFlags: e } = i; if ((0, T.hasFlag)(e, _.ContentScanFlags.EXPLICIT) || o.default.get("obscure_blur_effect_enabled")) return "explicit_content" } return n ? "spoiler" : null }; function p(e, t, n) { if (null == e) return [!1, void 0]; if (n && (0, l.isPendingScanVersion)(e.contentScanVersion)) return [!0, "potential_explicit_content"]; let i = function(e) { switch (e) { case d.ForumPostMediaTypes.EMBED: return l.ObscuredMediaTypes.Embed; case d.ForumPostMediaTypes.ATTACHMENT: return l.ObscuredMediaTypes.Attachment; default: return } }(e.type); return null != i && (0, l.isMediaObscured)({ type: i, media: e }, n) ? [!0, "explicit_content"] : e.spoiler ? [t, "spoiler"] : [!1, void 0] } function O(e) { let { channel: t, media: n } = e, i = (0, a.useStateFromStores)([I.default], () => null != t && I.default.can(S.Permissions.MANAGE_MESSAGES, t)), r = c.RenderSpoilers.useSetting(), s = (0, u.useShouldRedactExplicitContentForForum)(); return p(n, !(0, f.default)(r, i), s) } let C = e => (0, s.match)(e).with("explicit_content", () => h.default.Messages.EXPLICIT_CONTENT_ALT).with("spoiler", () => h.default.Messages.SPOILER_HIDDEN_A11Y_LABEL).otherwise(() => void 0) }, 959517: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { DEFAULT_COMPACT_SPACING: function() { return u }, DEFAULT_COZY_SPACING: function() { return l }, DEFAULT_MOBILE_PRE_COMPRESSION_MAX_ATTACHMENT_SIZE: function() { return S }, DEFAULT_POPOUTS: function() { return d }, FileUploadErrorTypes: function() { return i }, MESSAGE_GROUP_SPACING: function() { return o }, MESSAGE_PADDING: function() { return _ }, NEW_MESSAGE_BAR_BUFFER: function() { return E }, NEW_MESSAGE_BAR_BUFFER_LARGE: function() { return I }, NEW_MESSAGE_BAR_ID: function() { return T }, PLACEHOLDER_BUFFER: function() { return c }, SPOILER_ATTACHMENT_PREFIX: function() { return f } }), n("981631"); let o = [0, 4, 8, 16, 24], l = 16, u = 0, d = Object.freeze({ referencedAvatarProfile: !1, referencedUsernameProfile: !1, interactionAvatarProfile: !1, interactionUsernameProfile: !1, interactionData: !1, avatarProfile: !1, usernameProfile: !1, emojiPicker: !1, emojiBurstPicker: !1, moreUtilities: !1, contextMenu: !1 }), _ = 16, c = 16, E = 32, I = 64, T = "---new-messages-bar", f = "SPOILER_"; (s = i || (i = {})).ERROR_SOURCE_UNKNOWN = "ERROR_SOURCE_UNKNOWN", s.PRECOMPRESSION_SUM_TOO_LARGE = "PRECOMPRESSION_SUM_TOO_LARGE", s.PRECOMPRESSION_INDIVIDUAL_FILE_TOO_LARGE = "PRECOMPRESSION_INDIVIDUAL_FILE_TOO_LARGE", s.POSTCOMPRESSION_SUM_TOO_LARGE = "POSTCOMPRESSION_SUM_TOO_LARGE", s.POSTCOMPRESSION_INDIVIDUAL_FILE_TOO_LARGE = "POSTCOMPRESSION_INDIVIDUAL_FILE_TOO_LARGE", s.UPLOAD_ATTACHMENT_MAX_SIZE_ERROR = "UPLOAD_MESSAGE_ATTACHMENT_MAX_SIZE_ERROR", s.EXPLICIT_CONTENT = "EXPLICIT_CONTENT", (a = r || (r = {})).SYSTEM_DM_TAG_SYSTEM_TYPE = "a", a.BOT_TAG_SERVER_TYPE = "b", a.AI_TAG_TYPE = "c", a.BOT_TAG_BOT_TYPE = "d", a.REMIXING_TYPE = "e", a.POLL_TYPE = "g"; let S = 209715200 }, 348245: function(e, t, n) { "use strict"; let i; n.r(t), n("47120"); var r = n("266067"), s = n("259443"), a = n("433517"), o = n("570140"), l = n("668781"), u = n("904245"), d = n("593472"), _ = n("147913"), c = n("89892"), E = n("702321"), I = n("38618"), T = n("897473"), f = n("131704"), S = n("433355"), h = n("592125"), A = n("430824"), m = n("306680"), N = n("944486"), p = n("914010"), O = n("70956"), C = n("796798"), R = n("198620"), g = n("981631"), L = n("176505"), v = n("689938"); function D(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let M = new s.Logger("MessageManager"); function y(e) { let { guildId: t, channelId: n, messageId: r, forceFetch: s, isPreload: o, jumpType: l, skipLocalFetch: _, logFailures: T } = e; if (null == n) { T && M.log("Skipping fetch because channelId is null"); return } if ((0, L.isStaticChannelRoute)(n)) { T && M.log("Skipping fetch because channelId is a static route"); return } let f = h.default.getChannel(n); if ((null == f ? void 0 : f.type) === g.ChannelTypes.GUILD_STORE || (null == f ? void 0 : f.type) != null && g.ChannelTypesSets.GUILD_THREADS_ONLY.has(f.type)) { T && M.log("Skipping fetch because channel is a forum/store"); return } let S = c.default.getOrCreate(n); C.AttachmentLinkRefreshExperiment.getCurrentConfig({ location: "fetch_messages" }).enabled && S.some(R.messageHasExpiredAttachmentUrl) && (M.log("Found expired attachment link, clearing messages"), c.default.clear(n), S = c.default.getOrCreate(n)), null != S.jumpTargetId && null == r && (S = S.mutate({ jumpTargetId: null, jumped: !1, jumpType: d.JumpTypes.ANIMATED }), c.default.commit(S)), null != S.focusTargetId && null == r && (S = S.mutate({ focusTargetId: null }), c.default.commit(S)); let N = s; if (!o || I.default.isConnected() || S.loadingMore ? S.loadingMore || S.ready && !S.cached ? null != r ? N = !0 : T && M.log("Skipping fetch because no other conditions matched") : null == t || null != A.default.getGuild(t) ? N = !0 : T && M.log("Skipping fetch we are connected and have loaded messages") : N = !0, (0, E.default)(n) && m.default.hasUnread(n) && (N = !0), N) { if (c.default.commit(S.mutate({ loadingMore: !0 })), null != r) u.default.jumpToMessage({ channelId: n, messageId: r, flash: !0, isPreload: o, skipLocalFetch: _, jumpType: l }); else if ((null == f ? void 0 : f.isThread()) && function(e) { if (m.default.hasOpenedThread(e)) return !1; if (null == i) { var t; i = null !== (t = a.Storage.get(U, {})) && void 0 !== t ? t : {} } if (e in i) return !1; i[e] = Date.now(); let n = Date.now() - P; for (let e in i) i[e] < n && delete i[e]; return a.Storage.set(U, i), !0 }(n)) M.log("Jumping to start of thread ".concat(f.id)), u.default.fetchMessages({ channelId: n, limit: g.MAX_MESSAGES_PER_CHANNEL, jump: { messageId: n, flash: !1 }, isPreload: o, skipLocalFetch: _ }); else if ((null == f ? void 0 : f.isThread()) && m.default.hasTrackedUnread(f.id) && !S.ready) { let e = m.default.getTrackedAckMessageId(f.id); M.log("Jumping to most recent message in thread ".concat(f.id, " - ").concat(e)), u.default.fetchMessages({ channelId: n, limit: g.MAX_MESSAGES_PER_CHANNEL, jump: { messageId: e, flash: !1, offset: 1 }, isPreload: o, skipLocalFetch: _ }) } else u.default.fetchMessages({ channelId: n, limit: g.MAX_MESSAGES_PER_CHANNEL, isPreload: o, skipLocalFetch: _, jump: { jumpType: d.JumpTypes.ANIMATED } }) } } let P = 90 * O.default.Millis.DAY, U = "viewedThreadIds"; function b() { let e = N.default.getChannelId(); if (null != e) { let n = h.default.getChannel(e); if (null != n) { var t; let e = (0, r.matchPath)(location.pathname, { path: g.Routes.CHANNEL(":guild", ":channel", ":message"), exact: !0 }); y({ guildId: n.getGuildId(), channelId: n.id, messageId: null == e ? void 0 : null === (t = e.params) || void 0 === t ? void 0 : t.message }), B(n.getGuildId(), n.id) } } } function G() { let { isPreload: e, skipLocalFetch: t, logFailures: n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, i = N.default.getChannelId(); if (null != i) { let r = h.default.getChannel(i); null != r ? ((0, f.isTextChannel)(r.type) ? y({ guildId: r.getGuildId(), channelId: r.id, isPreload: e, skipLocalFetch: t, logFailures: n }) : n && M.log("Skipping fetch because the selected channel is not a text channel"), B(r.getGuildId(), r.id)) : n && M.log("Skipping fetch because channel is null") } else n && M.log("Skipping fetch because there is no selected channel") } function w(e) { let { guildId: t, channelId: n, messageId: i, jumpType: r } = e; y({ guildId: t, channelId: n, messageId: i, jumpType: r }), B(t, n) } function k(e) { let { guildId: t, channelId: n } = e; y({ guildId: t, channelId: n }) } function B(e, t) { let n = S.default.getCurrentSidebarChannelId(t); if (null != n) y({ guildId: e, channelId: n, messageId: S.default.getCurrentSidebarMessageId(t) }) } function V() { let e = N.default.getChannelId(), t = p.default.getGuildId(); if (null == t || null == e) return; let n = S.default.getSidebarState(e); (null == n ? void 0 : n.type) !== T.SidebarType.VIEW_CHANNEL && B(t, e) } function x(e) { let { guildId: t, channelId: n, context: i } = e; i === g.CURRENT_APP_CONTEXT && (y({ guildId: t, channelId: n }), B(t, n)) } function F(e) { let { channel: t, messageId: n } = e, i = t.guild_id; null != i && N.default.getChannelId(i) === t.id && y({ guildId: i, channelId: t.id, messageId: n }) } function H(e) { let { channelId: t } = e; u.default.fetchMessages({ channelId: t, limit: g.MAX_MESSAGES_PER_CHANNEL }) } function Y(e) { let { response: t } = e; if (null == t || null == t.body) return null; if (t.body.code === g.AbortCodes.CHANNEL_FOLLOWING_EDIT_RATE_LIMITED) { let e = t.body.retry_after; null != e && l.default.show({ title: v.default.Messages.RATE_LIMITED, body: v.default.Messages.ANNOUNCEMENT_EDIT_RATE_LIMIT.format({ retryAfterMinutes: Math.ceil(e / 60) }) }) } } let j = {}; function W(e) { var t; let { channelId: n, jump: i, isStale: r, isPreview: s = !1 } = e; if (s) return; let a = null !== (t = j[n]) && void 0 !== t ? t : 0; if (Date.now() - a < 10 * O.default.Millis.SECOND) return; j[n] = Date.now(); let o = N.default.getChannelId(), l = S.default.getCurrentSidebarChannelId(o), d = n === o || n === l; r && I.default.isConnected() && d && u.default.fetchMessages({ channelId: n, limit: g.MAX_MESSAGES_PER_CHANNEL, jump: i }) } function K(e) { let { channelId: t, messageRecord: n, reason: i } = e; null != n && o.default.dispatch({ type: "MESSAGE_SEND_FAILED", channelId: t, messageId: n.id, reason: null != i ? i : null }) } function z(e) { let { state: t } = e; if ("active" !== t) return !1; let n = N.default.getChannelId(); if (null == n) return !1; u.default.fetchNewLocalMessages(n, g.MAX_MESSAGES_PER_CHANNEL) } class Z extends _.default { _initialize() { o.default.subscribe("CONNECTION_OPEN", b) } _terminate() { o.default.unsubscribe("CONNECTION_OPEN", b) } constructor(...e) { super(...e), D(this, "fetchMessages", y), D(this, "loadSelectedChannelIfNecessary", G), D(this, "stores", new Map().set(S.default, V)), D(this, "actions", { APP_STATE_UPDATE: z, OVERLAY_INITIALIZE: b, CHANNEL_SELECT: w, VOICE_CHANNEL_SELECT: k, THREAD_CREATE: F, THREAD_LIST_SYNC: () => G(), CHANNEL_CREATE: F, CHANNEL_PRELOAD: x, THREAD_CREATE_LOCAL: H, GUILD_CREATE: () => G(), MESSAGE_END_EDIT: Y, LOAD_MESSAGES_SUCCESS: W, UPLOAD_FAIL: K, CHANNEL_DELETE: () => G(), THREAD_DELETE: () => G() }) } } t.default = new Z }, 957730: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"), n("653041"), n("390547"); var i = n("392711"), r = n.n(i), s = n("302454"), a = n.n(s), o = n("933557"), l = n("339085"), u = n("633302"), d = n("428595"), _ = n("594199"), c = n("467798"), E = n("601070"), I = n("695346"), T = n("592125"), f = n("984933"), S = n("271383"), h = n("430824"), A = n("496675"), m = n("699516"), N = n("246946"), p = n("594174"), O = n("483360"), C = n("176354"), R = n("51144"), g = n("981631"), L = n("185923"), v = n("689938"); function D(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; if (t[0] !== e) return null; let r = t.substr(e.length); return n.sortBy(e => { let { text: t } = e; return -t.length }).filter(e => { let { text: n } = e; return 1 === t.toLowerCase().indexOf(n.toLowerCase()) }).sortBy(e => { let { text: t } = e; return t === r ? 0 : 1 }).map(t => { let { id: n, text: r } = t; return [e + r, n, i] }).first() } function M(e) { return { order: e.order, match: e.match, parse: t => ({ type: e.type, content: t[0] }) } } function y(e) { return { match: a().anyScopeRegex(e), parse: e => ({ type: "text", content: e[0] }) } } let P = d.default.RULES, U = _.default, b = /^<@!?(\d+)>/, G = /^<@&(\d+)>/, w = /^<#(\d+)>/, k = /^/, B = /(@everyone|@here|@Clyde)\b/, V = { link: M(a().defaultRules.link), autolink: M(a().defaultRules.autolink), url: M(a().defaultRules.url), inlineCode: M(P.inlineCode), codeBlock: M(P.codeBlock), rawUserMention: y(b), rawRoleMention: y(G), rawChannelMention: y(w), rawEmoji: y(k), mention: { match(e, t, n) { let i = n.split(" ").pop() + e; if (/^[^ ]+@[^ ]+\.[^ .]+/.test(i)) return null; let r = D("@", e, t.users, "mention"); if (r || (r = D("@", e, t.mentionableRoles, "roleMention"))) return r; if (!(r = D("@", e, t.users.map(e => ({ ...e, text: e.text.split("#")[0] })), "mention"))) return null; let s = B.exec(e); if (null != s && r[0].length <= s[0].length) return null; if ("" === n && (0, c.canSuppressNotifications)()) { let t = c.SILENT_RE.exec(e); if (null != t && r[0].length <= t[0].length) return null } return r }, parse(e) { let [, t, n] = e, i = "@"; return "roleMention" === n && (i += "&"), { type: n, content: "<".concat(i).concat(t, ">") } } }, channel: { match: (e, t) => (function(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; if (t[0] !== e) return null; if ('"' !== t[1]) return D(e, t, n, i); let r = 2; for (; r < t.length; r++) { if ("\\" === t[r]) { r++; continue } if ('"' === t[r]) break } let s = t.substring(0, r + 1), a = (0, o.unescapeChannelName)(t.substring(2, r)); return n.sortBy(e => { let { text: t } = e; return -t.length }).filter(e => { let { text: t } = e; return a === t }).map(e => { let { id: t } = e; return [s, t, i] }).first() })("#", e, t.channels), parse: e => ({ type: "text", content: "<#".concat(e[1], ">") }) }, emoticon: { match(e, t, n) { if (!I.ConvertEmoticons.getSetting() || 0 !== n.length && !/\s$/.test(n)) return null; let i = u.default.EMOJI_SHORTCUT_RE.exec(e); return null == i || i[0].length !== e.length && " " !== e[i[0].length] && "\n" !== e[i[0].length] ? null : i }, parse: e => ({ type: "emoticon", content: u.default.convertShortcutToName(e[1]), isShortcut: !0 }) }, emoji: { order: P.emoji.order, match: e => u.default.EMOJI_NAME_RE.exec(e), parse(e, t, n) { let [i, r] = e, { customEmoji: s } = n, a = Object.prototype.hasOwnProperty.call(s, r) ? s[r] : null; if (null != a) { var o; return { type: "customEmoticon", content: "<".concat(!0 === a.animated ? "a" : "", ":").concat(null !== (o = a.originalName) && void 0 !== o ? o : a.name, ":").concat(a.id, ">"), emoji: a } } return { type: "text", content: i } } }, customEmoticons: { match(e, t) { var n, i; return null !== (i = null === (n = t.customEmoticonsRegex) || void 0 === n ? void 0 : n.exec(e)) && void 0 !== i ? i : null }, parse(e, t, n) { let [i, r] = e, { emojiContext: s } = n, a = s.getEmoticonByName(r); return null != a ? { type: "customEmoticon", content: "<".concat(!0 === a.animated ? "a" : "", ":").concat(a.name, ":").concat(a.id, ">"), emoji: a } : { type: "text", content: i } } }, text: { ...U, match: (e, t) => "string" == typeof t.textExclusions && "" !== t.textExclusions ? (0, _.textMarkupPatternWithExclusions)(t.textExclusions).exec(e) : null != U.match ? U.match(e, t, "") : null } }, x = { inlineCode: M(P.inlineCode), codeBlock: M(P.codeBlock), mention: { match: a().anyScopeRegex(b), parse(e, t, n) { let { isNotification: i } = n, r = p.default.getUser(e[1]); if (null == r) return { content: e[0] }; let s = R.default.getUserTag(r, { identifiable: i && N.default.enabled ? "never" : "always" }); if (!i) return { content: "@".concat(s) }; { let e = R.default.getGlobalName(r); return { content: null != e ? "@".concat(e) : "@".concat(s) } } } }, roleMention: { match: a().anyScopeRegex(G), parse(e, t, n) { let { guild: i } = n; if (null != i) { let t = h.default.getRoles(i.id)[e[1]]; if (null != t) return { content: "@".concat(t.name) } } return { content: e[0] } } }, channel: { match: a().anyScopeRegex(w), parse(e) { let t = T.default.getChannel(e[1]); return { content: null == t ? e[0] : (0, o.computeChannelName)(t, p.default, m.default, !0, !0) } } }, emoji: { match: a().anyScopeRegex(k), parse(e, t, n) { let [i, r, s] = e, { guild: a } = n, o = l.default.getDisambiguatedEmojiContext(a ? a.id : null).getById(s), u = null != o ? o.name : r; return { content: ":".concat(u, ":") } } }, soundboard: { match: a().anyScopeRegex(/^/), parse(e) { let [t, n] = e; return { content: "") } } }, spoiler: { match: a().anyScopeRegex(g.MARKDOWN_SPOILER_REGEXP), parse: () => ({ content: "<".concat(v.default.Messages.SPOILER.toLowerCase(), ">") }) }, staticRouteLink: { match: a().anyScopeRegex(g.MARKDOWN_STATIC_ROUTE_NAME_REGEXP), parse: e => ({ content: "") }) }, timestamp: { ...P.timestamp, parse() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return { content: P.timestamp.parse(...t).formatted } } }, text: { ...U } }; [V, x].forEach(e => { Object.keys(e).forEach((t, n) => { e[t].order = n }) }); let F = a().parserFor(V), H = /(?:)|:(?:([^\s:]+?)(?:::skin-tone-\d)?:)/g; function Y(e, t, n, i) { let r = ""; return e.forEach(e => { if (! function(e, t, n) { if (null != n && ("customEmoticon" === t.type && n(t.emoji, !1), "emoticon" === t.type || "text" === t.type)) { let i; let r = u.default.translateSurrogatesToInlineEmoji(t.content); for (; null !== (i = H.exec(r));) { let r; null != i[1] && "" !== i[1] ? e.emojiContext && (r = e.emojiContext.getById(i[1])) : r = u.default.getByName(i[2]), r && n(r, t.isShortcut || !1) } } }(t, e, i), "string" == typeof e.content) switch (e.type) { case "codeBlock": case "inlineCode": case "mention": case "roleMention": case "channel": case "emoji": r += e.content; break; default: r += n(e.content) } else e.content.constructor === Array ? r += Y(e.content, t, n, i) : console.warn("Unknown message item type: ", e) }), r } function j(e) { let t; let n = null == e ? void 0 : e.getGuildId(), i = null != n ? h.default.getGuild(n) : null, s = A.default.can(g.Permissions.MENTION_EVERYONE, e); t = (null == e ? void 0 : e.isPrivate()) ? e.recipients.map(e => ({ userId: e, nick: null })) : null != n ? S.default.getMembers(n).map(e => { let { userId: t, nick: n } = e; return { userId: t, nick: n } }) : []; let a = r()(t.reduce((e, t) => { let { userId: n } = t, i = p.default.getUser(n); return null == i ? e : (e.push({ id: n, text: i.tag }), e) }, [])), o = r()(null != i ? h.default.getRoles(i.id) : {}).values().filter(e => { let { mentionable: t } = e; return s || t }).map(e => { let { id: t, name: n } = e; return { id: t, text: n } }), u = r()(f.default.getTextChannelNameDisambiguations(n)).map(e => { let { id: t, name: n } = e; return { id: t, text: n } }), d = null != n ? r()(O.COMMAND_SUPPORTED_CHANNEL_TYPE_KEYS).filter(e => e !== f.GUILD_SELECTABLE_CHANNELS_KEY).flatMap(e => f.default.getChannels(n)[e].map(e => ({ id: e.channel.id, text: e.channel.name }))).value() : [], _ = E.default.computeAllActiveJoinedThreads(n).map(e => ({ id: e.id, text: e.name })), c = l.default.getDisambiguatedEmojiContext(n), I = c.getEscapedCustomEmoticonNames(), T = c.getCustomEmoji(), m = c.getCustomEmoticonRegex(); return { inline: !0, mentionableRoles: o, guild: i, users: a, channels: u.concat(d).concat(_), emojiContext: c, customEmoticonsRegex: m, customEmoji: T, textExclusions: I, disableErrorGuards: !0 } } function W(e) { return e } t.default = { parse(e, t) { var n, i, r; let s = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : void 0, a = null != s ? s : j(e), o = { content: t, tts: !1, invalidEmojis: [], validNonShortcutEmojis: [] }; return o.content = (n = o.content, i = a, r = (t, n) => { C.default.isEmojiPremiumLocked({ emoji: t, channel: e, intention: L.EmojiIntention.CHAT }) ? o.invalidEmojis.push(t) : !n && o.validNonShortcutEmojis.push(t) }, Y(F(n, i), i, u.default.translateInlineEmojiToSurrogates, r)), o }, parsePreprocessor: (e, t) => F(t, j(e)), unparse(e, t, n) { let i = T.default.getChannel(t), s = null != i ? i.getGuildId() : null, o = null != s ? h.default.getGuild(s) : null, l = n ? x : r().omit(x, ["spoiler", "timestamp"]), d = n ? W : u.default.translateSurrogatesToInlineEmoji, _ = a().parserFor(l), c = { inline: !0, guild: o, isNotification: n }; return Y(_(e, c), c, d) } } }, 566006: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ReactionTypes: function() { return i } }), (r = i || (i = {}))[r.NORMAL = 0] = "NORMAL", r[r.BURST = 1] = "BURST", r[r.VOTE = 2] = "VOTE" }, 786761: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canEditMessageWithStickers: function() { return D }, createMessageRecord: function() { return p }, updateMessageRecord: function() { return C }, updateServerMessage: function() { return O } }), n("789020"), n("47120"); var i = n("913527"), r = n.n(i), s = n("830121"); n("712057"); var a = n("292419"), o = n("330044"), l = n("378233"), u = n("360742"), d = n("23750"), _ = n("598077"), c = n("314897"), E = n("699516"), I = n("594174"), T = n("408433"), f = n("669079"); n("358085"), n("51144"); var S = n("572804"); n("739566"); var h = n("959517"), A = n("981631"); n("689938"); let m = new _.default({ id: "???", username: "???" }); function N(e) { var t; return new d.MinimalMessageRecord({ ...e, timestamp: new Date(e.timestamp), editedTimestamp: null != e.edited_timestamp ? new Date(e.edited_timestamp) : null, attachments: R(e), embeds: L(e), components: (0, a.transformComponents)(null !== (t = e.components) && void 0 !== t ? t : [], { includeEmojiSrc: !1 }) }) } function p(e) { var t, n, i, r, a, l, T, h, p, O; let { reactions: C, interactionData: R } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, L = N(e), D = null !== (r = null === (t = e.mentions) || void 0 === t ? void 0 : t.map(e => e.id)) && void 0 !== r ? r : [], M = null !== (a = e.mention_roles) && void 0 !== a ? a : [], y = null !== (l = e.mention_channels) && void 0 !== l ? l : [], P = e.message_reference, U = e.type === A.MessageTypes.THREAD_CREATED ? [] : (0, s.default)(e.content); let b = null == (h = e).author ? m : null != h.webhook_id ? new _.default(h.author) : null !== (p = I.default.getUser(h.author.id)) && void 0 !== p ? p : new _.default(h.author), G = null == e ? void 0 : e.gift_info, w = null != e.interaction ? u.default.createFromServer(e.interaction) : null, k = e.type === A.MessageTypes.THREAD_STARTER_MESSAGE ? null === (i = e.referenced_message) || void 0 === i ? void 0 : null === (n = i.author) || void 0 === n ? void 0 : n.id : void 0, B = e.type === A.MessageTypes.PREMIUM_REFERRAL ? e.content : void 0, V = e.content; return e.type === A.MessageTypes.PREMIUM_REFERRAL && (V = ""), O = 0, new d.default({ ...e, ...L.toJS(), author: b, webhookId: e.webhook_id, blocked: E.default.isBlocked(b.id) || null != k && E.default.isBlocked(k), mentionEveryone: e.mention_everyone, mentions: D, mentionRoles: M, mentionChannels: y, messageReference: P, mentioned: (0, S.isMentioned)({ userId: c.default.getId(), channelId: e.channel_id, mentionEveryone: null !== (T = e.mention_everyone) && void 0 !== T && T, mentionUsers: D, mentionRoles: M }), codedLinks: U, giftCodes: (0, f.isGiftCodeEmbed)(e) ? (0, f.findGiftCodes)(null == e ? void 0 : e.embeds[0].url) : (0, f.findGiftCodes)(e.content), content: V, referralTrialOfferId: B, call: g(e.call, L.timestamp), messageSnapshots: function(e) { return null == e.message_snapshots ? [] : e.message_snapshots.map(e => { let { message: t, guild: n } = e; return new d.MessageSnapshotRecord({ message: N(t), guild: n }) }) }(e), reactions: v(null != C ? C : e.reactions, e.poll), interaction: w, interactionData: null != R ? R : e.interaction_data, interactionMetadata: e.interaction_metadata, roleSubscriptionData: e.role_subscription_data, purchaseNotification: e.purchase_notification, poll: null == e.poll ? void 0 : (0, o.default)(e.poll), giftInfo: null == G ? void 0 : G }) } function O(e, t) { return null != t.edited_timestamp ? { ...t, reactions: e.reactions, interaction_data: e.interaction_data } : { ...e, ...t } } function C(e, t) { if (null != t.edited_timestamp) return p(t, { reactions: e.reactions, interactionData: e.interactionData }); let n = e; if (null != t.call && (n = n.set("call", g(t.call, e.timestamp))), null != t.attachments && (n = n.set("attachments", R(t))), null != t.content && "" !== t.content && (n = n.set("content", t.content)), null != t.embeds && (n = n.set("embeds", L(t))), t.pinned !== n.pinned && (n = n.set("pinned", t.pinned)), null != n.webhookId && null != t.author && (n = n.set("author", new _.default(t.author))), null != t.flags && t.flags !== n.flags && (n = n.set("flags", t.flags)), null != t.components && (n = n.set("components", (0, a.transformComponents)(t.components, { includeEmojiSrc: !1 }))), null != t.role_subscription_data && (n = n.set("roleSubscriptionData", t.role_subscription_data)), null != t.reactions) { var i; n = n.set("reactions", v(null !== (i = e.reactions) && void 0 !== i ? i : t.reactions)) } return null != t.poll && (n = n.set("poll", (0, o.default)(t.poll))), n } function R(e) { return null == e.attachments ? [] : e.attachments.map(e => ({ ...e, spoiler: e.filename.startsWith(h.SPOILER_ATTACHMENT_PREFIX) })) } function g(e, t) { if (null != e) { let n = null != e.ended_timestamp ? r()(new Date(e.ended_timestamp)) : null, i = null != n ? r().duration(n.diff(t)) : null; return { participants: e.participants, endedTimestamp: n, duration: i } } return null } function L(e) { if (null == e.embeds) return []; let t = e.embeds.map(t => (0, T.sanitizeEmbed)(e.channel_id, e.id, t)); return (0, T.mergeEmbedsOnURL)(t) } function v(e, t) { var n; if (null == e && (null == t ? void 0 : t.results) == null) return []; let i = null == t ? void 0 : null === (n = t.results) || void 0 === n ? void 0 : n.answer_counts.map(e => ({ count_details: { vote: e.count }, me_vote: e.me_voted, emoji: { id: e.id.toString(), name: "", animated: !1 }, me: !1, me_burst: !1, count: e.count, burst_count: 0 })); return [...null != e ? e : [], ...null != i ? i : []].map(e => { let t = { ...e }; if ((null == t ? void 0 : t.count_details) != null) { var n, i; t.burst_count = null !== (n = t.count_details.burst) && void 0 !== n ? n : 0, t.count = null !== (i = t.count_details.normal) && void 0 !== i ? i : 0 } return t.count < 0 && (t.count = 0), t.burst_count < 0 && (t.burst_count = 0), t }) } let D = e => 0 === (0, l.getMessageStickers)(e).length || "" !== e.content }, 459618: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("259443"), r = n("442837"), s = n("570140"), a = n("443296"), o = n("873741"), l = n("592125"), u = n("650774"), d = n("866960"), _ = n("626135"), c = n("981631"); let E = new i.Logger("MessageRoundtripTrackerStore"); function I(e) { return null != e.apiResponseTimestamp && null != e.gatewaySeenTimestamp } function T(e) { let t = l.default.getBasicChannel(e.channelId); if (null == t) { E.warn("Ignoring a messageData for channel ".concat(e.channelId, " because we can't find that channel.")); return } if (Math.random() > .1) return; let n = null == e.apiResponseTimestamp ? null : e.apiResponseTimestamp - e.initialSendTimestamp, i = null == e.gatewaySeenTimestamp ? null : e.gatewaySeenTimestamp - e.initialSendTimestamp, r = (0, o.getSignalStrength)(); _.default.track(c.AnalyticEvents.SEND_MESSAGE_ROUNDTRIP, { ...(0, a.default)(), api_latency_ms: n, gateway_latency_ms: i, channel_id: t.id, channel_type: t.type, guild_id: t.guild_id, guild_size: u.default.getMemberCount(t.guild_id), mobile_network_type: d.default.getType(), ...null != r && { mobile_signal_strength_level: r } }) } class f extends r.default.Store { recordMessageSendAttempt(e, t) { let n = { initialSendTimestamp: Date.now(), apiResponseTimestamp: null, gatewaySeenTimestamp: null, channelId: e }; this.pendingMessages.set(t, n), setTimeout(() => { let e = this.pendingMessages.get(t); null != e && (T(e), this.pendingMessages.delete(t)) }, 3e4) } recordMessageSendApiResponse(e) { let t = this.pendingMessages.get(e); if (null != t) { let n = { ...t, apiResponseTimestamp: Date.now() }; I(n) ? (T(n), this.pendingMessages.delete(e)) : this.pendingMessages.set(e, n) } } recordGatewayResponse(e) { let t = this.pendingMessages.get(e); if (null != t) { let n = { ...t, gatewaySeenTimestamp: Date.now() }; I(n) ? (T(n), this.pendingMessages.delete(e)) : this.pendingMessages.set(e, n) } } constructor(...e) { var t, n, i; super(...e), t = this, n = "pendingMessages", i = new Map, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } let S = new f(s.default, { MESSAGE_CREATE: function(e) { let { optimistic: t, message: n } = e, i = n.nonce; !t && null != i && S.recordGatewayResponse(i) } }); t.default = S }, 541288: function(e, t, n) { "use strict"; n.r(t), t.default = { init() {}, donateSentMessage(e, t) {}, deleteAllInteractions() {} } }, 198620: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isAttachmentUrl: function() { return c }, maybeRefreshAttachmentUrl: function() { return m }, messageHasExpiredAttachmentUrl: function() { return h }, removeSignedUrlParameters: function() { return E } }), n("47120"); var i, r = n("544891"), s = n("70956"), a = n("591759"), o = n("796798"), l = n("981631"); let u = new Set([window.GLOBAL_ENV.CDN_HOST, null === (i = window.GLOBAL_ENV.MEDIA_PROXY_ENDPOINT) || void 0 === i ? void 0 : i.substring(2)]), d = new Set(["/attachments/", "/ephemeral-attachments/"]), _ = 1 * s.default.Millis.HOUR; function c(e) { return u.has(e.hostname) && Array.from(d).some(t => e.pathname.startsWith(t)) } function E(e) { let t = a.default.toURLSafe(e); if (null == t) return e; for (let e of ["ex", "is", "hm"]) t.searchParams.delete(e); return t } function I(e) { let t = function(e) { let t = e.searchParams.get("ex"), n = parseInt(null != t ? t : "", 16); return isNaN(n) ? void 0 : n * s.default.Millis.SECOND }(e); return null == t || t <= Date.now() + _ } function T(e) { let t = a.default.toURLSafe(e.url); return null != t && I(t) } function f(e) { if (null == e) return !1; let t = a.default.toURLSafe(e.url); return !!(null != t && c(t)) && I(t) } function S(e) { var t; return f(e.image) || (null === (t = e.images) || void 0 === t ? void 0 : t.some(f)) || f(e.video) } function h(e) { return e.attachments.some(T) || e.embeds.some(S) } async function A(e) { let t = await r.HTTP.post({ url: l.Endpoints.ATTACHMENTS_REFRESH_URLS, body: { attachment_urls: [e] } }); return t.ok ? t.body.refreshed_urls[0].refreshed : void 0 } async function m(e) { if (!o.AttachmentLinkRefreshExperiment.getCurrentConfig({ location: "link_clicked" }).enabled) return e; let t = a.default.toURLSafe(e); if (null == t || !I(t)) return e; let n = await A(e); return null != n ? n : e } }, 276554: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldShowNitroBadge: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-10_social_proofing_message_nitro_badge", label: "Social Proofing Message Nitro Badge", defaultConfig: { enabled: !1, hideNitroBadgeWhenRoleBadgePresent: !1 }, treatments: [{ id: 1, label: "Prefer BOTH nitro badge AND role icon(s)", config: { enabled: !0, hideNitroBadgeWhenRoleBadgePresent: !1 } }, { id: 2, label: "Prefer role icon(s) over nitro badge if both are present", config: { enabled: !0, hideNitroBadgeWhenRoleBadgePresent: !0 } }] }); function r(e, t) { let n = i.getCurrentConfig({ location: t }, { autoTrackExposure: !0 }); return n.enabled && (!n.hideNitroBadgeWhenRoleBadgePresent || n.hideNitroBadgeWhenRoleBadgePresent && !e) } }, 315744: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useSoundmojiExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-09_soundmoji", label: "Soundmoji", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function r(e) { let { enabled: t } = i.useExperiment({ location: e }, { autoTrackExposure: !0 }); return t } }, 418476: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("786761"), r = n("901461"), s = n("981631"); function a(e, t) { return !(null == t || e.author.id !== t || e.state !== s.MessageStates.SENT || (0, r.default)(e) || !(0, i.canEditMessageWithStickers)(e) || e.hasFlag(s.MessageFlags.IS_VOICE_MESSAGE) || null != e.referralTrialOfferId || e.isPoll()) && !0 } }, 255269: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("399606"), n("695346"), n("496675"); var i = n("981631"); function r(e, t) { switch (e) { case i.SpoilerRenderSetting.ALWAYS: return !0; case i.SpoilerRenderSetting.IF_MODERATOR: return t; case i.SpoilerRenderSetting.ON_CLICK: default: return !1 } } }, 3148: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createBotMessage: function() { return c }, default: function() { return _ }, userRecordToServer: function() { return d } }), n("789020"), n("653041"); var i = n("512722"), r = n.n(i), s = n("869765"), a = n("598077"), o = n("594174"), l = n("48854"), u = n("981631"); function d(e) { let { id: t, username: n, avatar: i, discriminator: r, bot: s, globalName: a } = e; return { id: t, username: n, avatar: i, discriminator: r, bot: s, global_name: a } } function _(e) { let { channelId: t, content: n, tts: i = !1, type: _ = u.MessageTypes.DEFAULT, messageReference: c, allowedMentions: E, author: I, flags: T, nonce: f, poll: S, changelogId: h } = e, A = []; if (_ === u.MessageTypes.REPLY && (r()(null != c, "Replies must have a message reference"), null == E || E.replied_user)) { let e = s.default.getMessageByReference(c); (null == e ? void 0 : e.state) === s.ReferencedMessageState.LOADED && A.push(d(e.message.author)) } return null == I && (I = o.default.getCurrentUser()), I instanceof a.default && (I = d(I)), r()(null != I, "createMessage: author cannot be undefined"), { id: null != f ? f : (0, l.createNonce)(), type: _, content: n, channel_id: t, author: I, attachments: [], embeds: [], pinned: !1, mentions: A, mention_channels: [], mention_roles: [], mention_everyone: !1, timestamp: new Date().toISOString(), state: u.MessageStates.SENDING, tts: i, message_reference: c, message_snapshots: [], flags: T, nonce: f, poll: S, changelog_id: h } } function c(e) { let { messageId: t, channelId: n, content: i, embeds: r, loggingName: s } = e; return { id: null != t ? t : (0, l.createNonce)(), type: u.MessageTypes.DEFAULT, flags: u.MessageFlags.EPHEMERAL, content: i, channel_id: n, author: { id: u.LOCAL_BOT_ID, username: "Clyde", discriminator: u.NON_USER_BOT_DISCRIMINATOR, avatar: "clyde", bot: !0 }, attachments: [], embeds: null != r ? r : [], pinned: !1, mentions: [], mention_channels: [], mention_roles: [], mention_everyone: !1, timestamp: new Date().toISOString(), state: u.MessageStates.SENT, tts: !1, loggingName: s } } }, 48854: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createNonce: function() { return a } }); var i = n("709054"); let r = 0, s = new i.SnowflakeSequence; function a() { let e = Date.now(); return r !== e && (s.reset(), r = e), i.default.fromTimestampWithSequence(e, s) } }, 886132: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmojiPopoutType: function() { return a }, getEmojiPopoutData: function() { return _ } }); var i, r, s, a, o = n("689938"); (i = s || (s = {})).DEFAULT = "Custom Emoji Popout", i.CROSS_SERVER = "Custom Emoji Popout (Cross-Server)", i.UPSELL_CURRENT_SERVER_JOINED = "Custom Emoji Popout (Upsell Joined Current-Server)", i.UPSELL_CROSS_SERVER_JOINED = "Custom Emoji Popout (Upsell Joined Cross-Server)", i.UPSELL_CROSS_SERVER_JOINABLE = "Custom Emoji Popout (Upsell Not-Joined Cross-Server)", i.UPSELL_CROSS_SERVER_UNJOINABLE = "Custom Emoji Popout (Soft Upsell)", (r = a || (a = {})).GET_PREMIUM = "GET_PREMIUM", r.JOIN_GUILD = "JOIN_GUILD", r.UNAVAILABLE = "UNAVAILABLE"; let l = e => { let { isPremium: t, hasJoinedEmojiSourceGuild: n, isUnusableRoleSubscriptionEmoji: i, emojiComesFromCurrentGuild: r, isDiscoverable: s } = e, a = "Custom Emoji Popout"; return t && !n && s ? a = "Custom Emoji Popout (Cross-Server)" : t || !n || i ? !t && !n && (a = s ? "Custom Emoji Popout (Upsell Not-Joined Cross-Server)" : "Custom Emoji Popout (Soft Upsell)") : a = r ? "Custom Emoji Popout (Upsell Joined Current-Server)" : "Custom Emoji Popout (Upsell Joined Cross-Server)", a }, u = e => { let { isPremium: t, hasJoinedEmojiSourceGuild: n, isUnusableRoleSubscriptionEmoji: i, isDiscoverable: r, emojiComesFromCurrentGuild: s, userIsRoleSubscriber: a, isRoleSubscriptionEmoji: l, shouldHideRoleSubscriptionCTA: u, onOpenPremiumSettings: d } = e, _ = null; return _ = t ? n ? l ? u && i ? o.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UNAVAILABLE_DESCRIPTION : i ? a ? o.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_UPGRADE_UPSELL_DESCRIPTION : o.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UPSELL_DESCRIPTION : o.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_SUBSCRIBED_DESCRIPTION : s ? o.default.Messages.EMOJI_POPOUT_PREMIUM_CURRENT_GUILD_DESCRIPTION : o.default.Messages.EMOJI_POPOUT_PREMIUM_JOINED_GUILD_DESCRIPTION : r ? o.default.Messages.EMOJI_POPOUT_PREMIUM_UNJOINED_DISCOVERABLE_GUILD_DESCRIPTION : o.default.Messages.EMOJI_POPOUT_PREMIUM_UNJOINED_PRIVATE_GUILD_DESCRIPTION : n ? u && i ? o.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UNAVAILABLE_DESCRIPTION : i ? a ? o.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_UPGRADE_UPSELL_DESCRIPTION : o.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UPSELL_DESCRIPTION : s ? o.default.Messages.EMOJI_POPOUT_CURRENT_GUILD_DESCRIPTION : o.default.Messages.EMOJI_POPOUT_JOINED_GUILD_DESCRIPTION : r ? o.default.Messages.EMOJI_POPOUT_UNJOINED_DISCOVERABLE_GUILD_DESCRIPTION : o.default.Messages.EMOJI_POPOUT_UNJOINED_PRIVATE_GUILD_DESCRIPTION.format({ openPremiumSettings: d }) }, d = e => { let { isPremium: t, hasJoinedEmojiSourceGuild: n, isUnusableRoleSubscriptionEmoji: i, isDiscoverable: r } = e, s = !n && r; return t && s ? { type: "JOIN_GUILD", text: o.default.Messages.GUILD_PROFILE_JOIN_SERVER_BUTTON, description: null } : !t && (n && !i || s) ? { type: "GET_PREMIUM", text: o.default.Messages.EMOJI_POPOUT_PREMIUM_CTA, description: null } : { type: "UNAVAILABLE", text: null, description: null } }, _ = e => { let t = u(e), n = l(e); return { ...d(e), emojiDescription: t, analyticsType: n } } }, 368859: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("981631"); function r(e) { return e.type === i.MessageTypes.DEFAULT && null != e.messageReference && e.messageReference.type !== i.MessageReferenceTypes.FORWARD } }, 572804: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a }, isMentioned: function() { return l }, isRawMessageMentioned: function() { return o } }); var i = n("592125"), r = n("271383"), s = n("430824"); function a(e) { let { message: t, userId: n, suppressEveryone: i = !1, suppressRoles: r = !1 } = e; return l({ userId: n, channelId: t.channel_id, mentionEveryone: t.mentionEveryone, mentionUsers: t.mentions, mentionRoles: t.mentionRoles, suppressEveryone: i, suppressRoles: r }) } function o(e) { var t, n, i, r; let { rawMessage: s, userId: a, suppressEveryone: o = !1, suppressRoles: u = !1 } = e; return l({ userId: a, channelId: s.channel_id, mentionEveryone: null !== (n = s.mention_everyone) && void 0 !== n && n, mentionUsers: null !== (i = null === (t = s.mentions) || void 0 === t ? void 0 : t.map(e => e.id)) && void 0 !== i ? i : [], mentionRoles: null !== (r = s.mention_roles) && void 0 !== r ? r : [], suppressEveryone: o, suppressRoles: u }) } function l(e) { let { userId: t, channelId: n, mentionEveryone: a, mentionUsers: o, mentionRoles: l, suppressEveryone: u = !1, suppressRoles: d = !1 } = e; if (a && !u || o.includes(t)) return !0; if (d || null == l || 0 === l.length) return !1; let _ = i.default.getChannel(n); if (null == _) return !1; let c = _.getGuildId(); if (null == c || null == s.default.getGuild(c)) return !1; let E = r.default.getMember(c, t); return null != E && l.some(e => E.roles.includes(e)) } }, 463396: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isRemix: function() { return s } }), n("789020"); var i = n("630388"), r = n("981631"); let s = e => null != e && null != e.attachments && !(e.attachments.length < 1) && e.attachments.some(e => null != e.flags && (0, i.hasFlag)(e.flags, r.MessageAttachmentFlags.IS_REMIX)) }, 493892: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isSpam: function() { return o }, isSpamSupported: function() { return s }, isSpammer: function() { return a } }); var i = n("594174"), r = n("981631"); function s(e) { return void 0 !== e && e.type !== r.ChannelTypes.DM } function a(e) { var t, n; return null !== (n = null === (t = i.default.getUser(e)) || void 0 === t ? void 0 : t.hasFlag(r.UserFlags.SPAMMER)) && void 0 !== n && n } function o(e) { return a(e.author.id) } }, 901461: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("275726"); function r(e) { return !i.MessageTypesSets.USER_MESSAGE.has(e.type) } }, 785359: function(e, t, n) { "use strict"; n.r(t), n.d(t, { logMessageSendFailure: function() { return s } }); var i = n("367907"), r = n("981631"); function s(e) { var t, n; let s = null != e.fileItems ? function(e) { return e.map(e => { var t; return null !== (t = e.mimeType) && void 0 !== t ? t : "unknown" }) }(e.fileItems) : [], a = null !== (t = e.errorMessage) && void 0 !== t ? t : void 0, o = null !== (n = e.failureCode) && void 0 !== n ? n : void 0; (0, i.trackWithMetadata)(r.AnalyticEvents.SEND_MESSAGE_FAILURE, { failure_code: o, error_message: a, attachment_mimetypes: s }) } }, 937889: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I }, getInitialParserState: function() { return c }, getInitialParserStateFromMessage: function() { return _ }, renderAutomodMessageMarkup: function() { return T }, renderChangelogMessageMarkup: function() { return E } }), n("47120"), n("757143"), n("865427"); var i = n("830121"), r = n("202131"), s = n("454585"), a = n("55406"), o = n("408433"), l = n("981631"); let u = new Set([l.MessageEmbedTypes.IMAGE, l.MessageEmbedTypes.GIFV]), d = new Set(["strong", "em", "u", "text", "inlineCode", "s", "spoiler"]); function _(e, t) { let n = c({ channelId: e.channel_id, messageId: e.id, renderOptions: t }), i = null != e.webhookId; return { ...n, allowLinks: i || n.allowLinks, allowEmojiLinks: i, mentionChannels: e.mentionChannels } } function c(e) { let { channelId: t, messageId: n, renderOptions: i } = e; return { channelId: t, messageId: n, allowLinks: !!i.allowLinks, allowDevLinks: !!i.allowDevLinks, formatInline: !!i.formatInline, noStyleAndInteraction: !!i.noStyleAndInteraction, allowHeading: !!i.allowHeading, allowList: !!i.allowList, previewLinkTarget: !!i.previewLinkTarget, disableAnimatedEmoji: !!i.disableAnimatedEmoji, isInteracting: !!i.isInteracting, allowEmojiLinks: !1, disableAutoBlockNewlines: !0, mentionChannels: [], muted: !1, unknownUserMentionPlaceholder: !0 } } function E(e, t, n) { return { hasSpoilerEmbeds: !1, content: s.default.reactParserFor(a.default.getDefaultRules(t))(e.content, !1, null != n ? { changeLog: n } : {}) } } function I(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return function(e, t, n) { let { toAST: s = !1, hideSimpleEmbedContent: a = !0, formatInline: l = !1, postProcessor: c, shouldFilterKeywords: E, contentMessage: I } = n, T = !1, h = (null != I ? I : t).content, A = e(E ? (0, r.getKeywordSubstitutedContent)(h, { escapeReplacement: !0, messageId: t.id, channelId: t.channel_id, authorId: t.author.id }) : h, !0, _(t, n), (e, n) => (!Array.isArray(e) && (e = [e]), a && (e = function(e, t) { if (1 !== e.length || 1 !== t.length) return e; let n = e[0], i = t[0]; return ("link" === n.type || "attachmentLink" === n.type) && u.has(i.type) && (0, o.isEmbedInline)(i) ? [] : e }(e, (null != I ? I : t).embeds)), !l && (e = function(e, t) { return t ? f(e) : ("paragraph" === e[0].type && e[0].content instanceof Array && (e[0].content = f(e[0].content)), e) }(e, n)), T = function(e, t) { return t ? S(e) : "paragraph" === e[0].type && e[0].content instanceof Array && S(e[0].content) }(e = function(e) { let t = e.some(e => "link" !== e.type || !1); return e.filter(e => { let n = "link" === e.type, r = (0, i.parseQuestsEmbedCode)(e.target); return !(n && null != r && !t) }) }(e), n), l && (e = function e(t) { return t.forEach(t => { d.has(t.type) && null != t.content && (Array.isArray(t.content) ? e(t.content) : t.content = t.content.replace(/\n/g, " ")) }), t }(e)), null != c && (e = c(e, n)), e)); return { hasSpoilerEmbeds: T, content: A } }(t.formatInline ? s.default.parseInlineReply : s.default.parse, e, t) } function T(e, t, n) { var i; return i = s.default.parseAutoModerationSystemMessage, i(e, !0, { allowLinks: !1, allowDevLinks: !1, allowEmojiLinks: !1, mentionChannels: [], isInteracting: !1, formatInline: !1, noStyleAndInteraction: !1, allowHeading: !1, allowList: !1, disableAutoBlockNewlines: !0, highlightWord: t, disableAnimatedEmoji: !1, channelId: n, muted: !1 }, e => (!Array.isArray(e) && (e = [e]), e)) } function f(e) { if (e.some(e => "emoji" !== e.type && "customEmoji" !== e.type && "soundboard" !== e.type && ("string" != typeof e.content || "" !== e.content.trim()) && !0)) return e; let t = 0; return (e.forEach(e => { if (("emoji" === e.type || "customEmoji" === e.type || "soundboard" === e.type) && (t += 1), t > 30) return !1 }), t > 30) ? e : (e.forEach(e => { e.jumboable = !0 }), e) } function S(e) { return e.some(e => "spoiler" === e.type && Array.isArray(e.content) && e.content.some(e => "link" === e.type || "attachmentLink" === e.type)) } }, 646504: function(e, t, n) { "use strict"; n.r(t), n.d(t, { trackGuildInviteNotificationAction: function() { return o }, trackGuildInviteNotificationDismissed: function() { return l } }); var i, r, s = n("367907"), a = n("981631"); function o() { s.default.trackWithMetadata(a.AnalyticEvents.NOTIFICATION_CTA_CLICKED, { notification_type: "Reminder Notification", action: "Guild Invite", dismissed: !1 }) } function l() { s.default.trackWithMetadata(a.AnalyticEvents.NOTIFICATION_CTA_CLICKED, { notification_type: "Reminder Notification", action: "Guild Invite", dismissed: !0 }) }(i || (i = {})).REMINDER_NOTIFICATION = "Reminder Notification", (r || (r = {})).GUILD_INVITE = "Guild Invite" }, 739566: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c }, getMessageAuthor: function() { return I }, getUserAuthor: function() { return f }, useNullableMessageAuthor: function() { return E }, useNullableUserAuthor: function() { return T } }); var i = n("512722"), r = n.n(i), s = n("442837"), a = n("592125"), o = n("271383"), l = n("430824"), u = n("699516"), d = n("594174"), _ = n("51144"); function c(e) { let t = E(e); return r()(null != t, "Result cannot be null because the message is not null"), t } function E(e) { var t; let n = (0, s.useStateFromStores)([a.default], () => null == e ? null : a.default.getChannel(e.channel_id)), i = null == e ? void 0 : null === (t = e.author) || void 0 === t ? void 0 : t.id, r = null == n ? void 0 : n.guild_id, c = (0, s.useStateFromStores)([o.default], () => null == r || null == i ? null : o.default.getMember(r, i)), E = (0, s.useStateFromStores)([d.default], () => d.default.getUser(i), [i]), I = _.default.useName((null == e ? void 0 : e.author.bot) ? null == e ? void 0 : e.author : E), { guild: T, guildRoles: f } = (0, s.useStateFromStoresObject)([l.default], () => { let e = l.default.getGuild(r), t = null != e ? l.default.getRoles(e.id) : void 0; return { guild: e, guildRoles: t } }, [r]), h = (0, s.useStateFromStores)([u.default], () => null != i && (null == n ? void 0 : n.isPrivate()) ? u.default.getNickname(i) : null); return null == e ? null : S({ user: e.author, channel: n, guild: T, guildRoles: f, userName: I, member: c, friendNickname: h }) } function I(e) { let t = a.default.getChannel(e.channel_id); return f(e.author, t) } function T(e, t) { let n = null == e ? void 0 : e.id, i = null == t ? void 0 : t.guild_id, r = (0, s.useStateFromStores)([o.default], () => null == i || null == n ? null : o.default.getMember(i, n)), { guild: a, guildRoles: d } = (0, s.useStateFromStoresObject)([l.default], () => { let e = l.default.getGuild(i), t = null != e ? l.default.getRoles(e.id) : void 0; return { guild: e, guildRoles: t } }, [i]), c = (0, s.useStateFromStores)([u.default], () => null != n && (null == t ? void 0 : t.isPrivate()) ? u.default.getNickname(n) : null), E = _.default.useName(e); return S({ user: e, channel: t, guild: a, guildRoles: d, member: r, userName: E, friendNickname: c }) } function f(e, t) { let n = null == e ? void 0 : e.id, i = null == t ? void 0 : t.guild_id, r = l.default.getGuild(i), s = null != i ? l.default.getRoles(i) : void 0, a = null == i || null == n ? null : o.default.getMember(i, n), d = null != n && null != t && t.isPrivate() ? u.default.getNickname(n) : null; return S({ user: e, channel: t, guild: r, guildRoles: s, member: a, friendNickname: d }) } function S(e) { var t, n, i, r; let { user: s, channel: a, guild: o, guildRoles: l, member: u, userName: d, friendNickname: c } = e, E = null == s ? "???" : null != d ? d : _.default.getName(s); return (null == s ? void 0 : s.id) == null || null == a ? { nick: E, colorString: void 0 } : (null == o ? void 0 : o.id) == null ? { nick: null != c ? c : E, colorString: void 0 } : null == u ? { nick: E, colorString: void 0 } : { nick: null !== (n = u.nick) && void 0 !== n ? n : E, colorString: null !== (i = u.colorString) && void 0 !== i ? i : void 0, colorRoleName: null != u.colorRoleId && null != o ? null == l ? void 0 : null === (t = l[u.colorRoleId]) || void 0 === t ? void 0 : t.name : void 0, colorRoleId: u.colorRoleId, iconRoleId: u.iconRoleId, guildMemberAvatar: u.avatar, guildMemberAvatarDecoration: u.avatarDecoration, clan: null !== (r = s.clan) && void 0 !== r ? r : void 0 } } }, 849522: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("442837"), r = n("594174"), s = n("74538"), a = n("981631"); function o() { return (0, i.useStateFromStores)([r.default], () => s.default.canUseIncreasedMessageLength(r.default.getCurrentUser())) ? a.MAX_MESSAGE_LENGTH_PREMIUM : a.MAX_MESSAGE_LENGTH } }, 29909: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("68405"), u = n("985375"), d = n("225196"), _ = n("887208"), c = n("585483"), E = n("981631"), I = n("689938"), T = n("480710"); t.default = r.memo(function(e) { let { width: t, height: n, src: s, url: f, format: S, className: h } = e, [A, m] = r.useState(!1), N = (0, u.useIsFavoriteGIF)((0, l.gifUrlKey)(f)), p = N ? I.default.Messages.GIF_TOOLTIP_REMOVE_FROM_FAVORITES : I.default.Messages.GIF_TOOLTIP_ADD_TO_FAVORITES, O = N ? _.default : d.default; r.useEffect(() => { if (!A) return; let e = setTimeout(() => { m(!1) }, 500); return () => clearTimeout(e) }, [A]); let C = e => { e.preventDefault(), e.stopPropagation(), m(!0), N ? (0, l.removeFavoriteGIF)(f) : ((0, l.addFavoriteGIF)({ url: f, src: s, width: t, height: n, format: S }), c.ComponentDispatch.dispatch(E.ComponentActions.FAVORITE_GIF)) }; return (0, i.jsx)(o.Tooltip, { text: p, children: e => (0, i.jsx)(o.Clickable, { ...e, className: a()(h, T.size, T.gifFavoriteButton, { [T.selected]: N, [T.showPulse]: A }), onMouseDown: e => e.preventDefault(), onClick: C, onDoubleClick: e => e.preventDefault(), children: (0, i.jsx)(O, { className: T.icon }) }) }) }) }, 453687: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMessageAccessoriesId: function() { return _ }, getMessageAriaDescribedBy: function() { return E }, getMessageAriaLabelledBy: function() { return c }, getMessageContentId: function() { return a }, getMessageReactionsId: function() { return d }, getMessageReplyId: function() { return o }, getMessageTimestampId: function() { return u }, getMessageUsernameId: function() { return l } }); var i = n("446108"), r = n("901461"), s = n("981631"); function a(e) { return "message-content-".concat(e.id) } function o(e) { return "message-reply-context-".concat(e.id) } function l(e, t) { let n = null != t ? t : e.id; return "message-username-".concat(n) } function u(e) { return "message-timestamp-".concat(e.id) } function d(e) { return "message-reactions-".concat(e.id) } function _(e) { return "message-accessories-".concat(e.id) } function c(e, t, n) { let d = e.type === s.MessageTypes.REPLY && null != e.messageReference, c = e.embeds.length > 0, E = e.attachments.length > 0, I = e.stickerItems.length > 0, T = e.codedLinks.length > 0, f = e.hasFlag(s.MessageFlags.HAS_THREAD), S = c || E || I || T || f || e.type === s.MessageTypes.THREAD_CREATED, h = c && e.content === e.embeds[0].url && e.embeds[0].type === s.MessageEmbedTypes.GIFV, A = e.type !== s.MessageTypes.DEFAULT || !h && "" !== e.content, m = (0, r.default)(e), N = !m && (null == n ? void 0 : n.hasTimestamp) !== !1, p = l(e, t), O = o(e), C = m ? "" : "".concat(d ? O : p, " ").concat(i.MESSAGE_NICKNAME_PAUSE_LABEL_SEGMENT_ID); if (A) { let t = a(e); C += " ".concat(t) } if (S) { let t = _(e); C += " ".concat(t) } if (N) { let t = u(e); C += " ".concat(i.MESSAGE_PRE_TIMESTAMP_PAUSE_LABEL_SEGMENT_ID, " ").concat(t) } return C.trim() } function E(e) { if (0 === e.reactions.length) return; let t = d(e); return "".concat(i.MESSAGE_REACTIONS_LABEL_SEGMENT_ID, " ").concat(t) } }, 590956: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MessageCustomEmoji: function() { return m }, MessageStandardEmoji: function() { return A } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("153832"), l = n("481060"), u = n("596454"), d = n("367907"), _ = n("130402"), c = n("626135"), E = n("183023"), I = n("524444"), T = n("981631"), f = n("185923"), S = n("474936"), h = n("140989"); let A = e => { var t; let { node: n, tooltipPosition: s = I.EXPRESSION_TOOLTIP_PROPS.position, enableClick: o = !0 } = e, d = null === (t = n.originalMatch) || void 0 === t ? void 0 : t[0], _ = null != d ? d : n.name, [c, T] = r.useState(!1), f = e => (0, i.jsx)(u.default, { ...e, emojiName: n.name, size: n.jumboable ? "jumbo" : "default", src: n.src, alt: d, animated: !1 }), S = e => (0, i.jsx)(l.Tooltip, { text: (0, I.renderClickableTooltipNode)(n.name, o), "aria-label": _, ...I.EXPRESSION_TOOLTIP_PROPS, position: s, shouldShow: !c, onTooltipShow: () => { o && N({ emojiNode: n, isCustomEmoji: !1 }) }, children: t => (0, i.jsx)(l.Clickable, { ...e, tag: "span", onClick: t => { var n; T(!0), null == e || null === (n = e.onClick) || void 0 === n || n.call(e, t) }, className: a()(h.emojiContainer, { [h.emojiContainerClickable]: o }), children: f(t) }) }); return o ? (0, i.jsx)(l.Popout, { animation: l.Popout.Animation.TRANSLATE, align: "center", autoInvert: !0, nudgeAlignIntoViewport: !0, position: "right", onRequestClose: () => { T(!1) }, renderPopout: e => (0, i.jsx)(E.MessageStandardEmojiPopout, { ...e, node: n }), children: S }) : S() }, m = e => { let { node: t, isInteracting: n, tooltipPosition: s = I.EXPRESSION_TOOLTIP_PROPS.position, enableClick: d = !0 } = e, [S, A] = r.useState(String(Date.now())), [m, p] = r.useState(!1), [O, C] = r.useState(!1), R = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return (0, i.jsx)(u.default, { ...e, emojiName: t.name, size: t.jumboable ? "jumbo" : "default", emojiId: t.emojiId, animated: t.animated, isInteracting: n }) }, g = (0, o.v4)(), L = e => (0, i.jsx)(l.Tooltip, { text: (0, I.renderClickableTooltipNode)(t.name, d), "aria-label": t.name, ...I.EXPRESSION_TOOLTIP_PROPS, position: s, shouldShow: !O, onTooltipShow: () => { p(!0), d && (N({ emojiNode: t, isCustomEmoji: !0, nonce: g }), (0, _.initiateEmojiInteraction)(f.EmojiInteractionPoint.CustomEmojiTooltipShown)) }, children: t => (0, i.jsx)(l.Clickable, { ...e, onMouseEnter: () => { var t; null == e || null === (t = e.onMouseEnter) || void 0 === t || t.call(e) }, onClick: t => { var n; p(!1), C(!0), null == e || null === (n = e.onClick) || void 0 === n || n.call(e, t) }, onMouseLeave: () => { m && (c.default.track(T.AnalyticEvents.CLOSE_POPOUT, { nonce: g }), p(!1)) }, tag: "span", className: a()(h.emojiContainer, { [h.emojiContainerClickable]: d }), children: R(t) }) }); return d ? (0, i.jsx)(l.Popout, { animation: l.Popout.Animation.FADE, align: "center", onRequestClose: () => { c.default.track(T.AnalyticEvents.CLOSE_POPOUT, { nonce: g }), p(!1), C(!1) }, autoInvert: !0, nudgeAlignIntoViewport: !0, position: "right", renderPopout: e => (0, i.jsx)(E.MessageCustomEmojiPopout, { ...e, node: t, refreshPositionKey: () => A(String(Date.now())), nonce: g }), positionKey: S, children: L }) : L() }, N = e => { let { emojiNode: t, isCustomEmoji: n, nonce: i } = e; d.default.trackWithMetadata(T.AnalyticEvents.EXPRESSION_TOOLTIP_VIEWED, { type: S.PremiumUpsellTypes.EMOJI_IN_MESSAGE_HOVER, expression_id: t.emojiId, expression_name: t.name, is_animated: t.animated, is_custom: n, nonce: i }) } }, 183023: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CustomGuildEmojiPopout: function() { return q }, EmojiPopoutList: function() { return J }, GuildDetails: function() { return X }, MessageCustomEmojiPopout: function() { return Q }, MessageStandardEmojiPopout: function() { return Z } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("990547"), l = n("442837"), u = n("507274"), d = n("481060"), _ = n("749210"), c = n("596454"), E = n("100527"), I = n("906732"), T = n("213609"), f = n("738774"), S = n("29598"), h = n("400106"), A = n("944386"), m = n("889564"), N = n("687476"), p = n("761966"), O = n("563927"), C = n("98278"), R = n("197115"), g = n("703656"), L = n("944486"), v = n("914010"), D = n("594174"), M = n("285952"), y = n("940627"), P = n("346656"), U = n("514342"), b = n("605403"), G = n("806519"), w = n("626135"), k = n("768581"), B = n("900849"), V = n("74538"), x = n("886132"), F = n("524444"), H = n("981631"), Y = n("176505"), j = n("474936"), W = n("689938"), K = n("630714"); let z = () => ({ page: null != (0, l.useStateFromStores)([v.default], () => v.default.getGuildId()) ? H.AnalyticsPages.GUILD_CHANNEL : H.AnalyticsPages.DM_CHANNEL, section: H.AnalyticsSections.EMOJI_UPSELL_POPOUT }), Z = e => { let { node: t } = e; (0, A.useTrackOpenPopout)({ emojiId: t.emojiId, currentGuildId: v.default.getGuildId() }); let n = (0, O.default)(t.name); return (0, i.jsx)(u.Dialog, { children: (0, i.jsx)(F.MessagePopoutContent, { children: (0, i.jsxs)(M.default, { className: K.emojiSection, children: [(0, i.jsx)(c.default, { emojiName: t.name, className: K.primaryEmoji, src: t.src, animated: !1, size: "jumbo" }), (0, i.jsxs)(M.default, { direction: M.default.Direction.VERTICAL, justify: M.default.Justify.CENTER, className: K.truncatingText, children: [(0, i.jsx)(d.Text, { className: K.__invalid_emojiName, variant: "text-md/semibold", children: (0, i.jsx)(U.default, { children: n }) }), (0, i.jsx)(d.Text, { variant: "text-sm/normal", children: W.default.Messages.EMOJI_POPOUT_STANDARD_EMOJI_DESCRIPTION })] })] }) }) }) }, X = e => { let { expressionSourceGuild: t, hasJoinedExpressionSourceGuild: n, isDisplayingJoinGuildButtonInPopout: r } = e, { id: s, icon: o, name: l } = t, u = k.default.getGuildIconURL({ id: s, icon: o, size: 32, canAnimate: !0 }), _ = (n = null == n || n) || t.isDiscoverable(), c = () => { t.isDiscoverable() ? (0, B.startLurking)(s, {}) : n && (0, g.transitionTo)(H.Routes.CHANNEL(s, L.default.getChannelId(s))) }, E = t.isDiscoverable() && null != t.presenceCount, I = () => { let e = !r && !n; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "header-secondary", children: W.default.Messages.INSTANT_INVITE_GUILD_MEMBERS_ONLINE.format({ membersOnline: t.presenceCount }) }), (0, i.jsx)("div", { className: K.dotSeparator }), e ? (0, i.jsx)(d.Clickable, { className: K.joinGuildLink, onClick: c, children: (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "text-link", children: W.default.Messages.GUILD_PROFILE_JOIN_SERVER_BUTTON }) }) : (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "header-secondary", children: W.default.Messages.EMOJI_POPOUT_PUBLIC_SERVER })] }) }; return (0, i.jsxs)(M.default, { align: M.default.Align.CENTER, children: [(0, i.jsx)(G.default, { mask: G.default.Masks.SQUIRCLE, width: 32, height: 32, className: K.__invalid_guildIconContainer, children: null != u && _ ? (0, i.jsxs)(d.Clickable, { "aria-label": l, onClick: c, children: [(0, i.jsx)("img", { src: u, alt: "", className: K.guildIcon }), " :"] }) : (0, i.jsx)(P.default, { size: P.default.Sizes.SMALL, className: K.guildIconNotClickable, guild: t }) }), (0, i.jsxs)(M.default, { direction: M.default.Direction.VERTICAL, className: a()(K.__invalid_guildInformation, K.truncatingText), children: [(0, i.jsxs)(M.default, { align: M.default.Align.CENTER, children: [(0, i.jsx)(y.default, { guild: t, className: K.guildBadge }), _ ? (0, i.jsx)(d.Clickable, { onClick: c, className: K.truncatingText, children: (0, i.jsx)(d.Heading, { className: K.guildName, variant: "heading-md/semibold", children: (0, i.jsx)(U.default, { children: l }) }) }) : (0, i.jsx)(d.Heading, { variant: "heading-md/semibold", children: (0, i.jsx)(U.default, { children: l }) })] }), (0, i.jsx)(M.default, { align: M.default.Align.CENTER, children: E ? I() : (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "header-secondary", children: W.default.Messages.EMOJI_POPOUT_PRIVATE_SERVER }) })] })] }) }, Q = e => { let { node: t, closePopout: n, refreshPositionKey: r, nonce: s } = e, { expressionSourceGuild: a, joinedEmojiSourceGuildRecord: o, emoji: l, isFetching: d } = (0, S.useEmojiAndSourceGuild)({ emojiId: t.emojiId, refreshPositionKey: r }); return d ? (0, i.jsx)(F.PopoutLoadingAnimation, {}) : (0, i.jsx)(u.Dialog, { "aria-label": t.name, children: (0, i.jsx)(q, { node: t, guildEmoji: null != l ? l : void 0, expressionSourceGuild: a, joinedEmojiSourceGuildRecord: o, closePopout: n, onToggleShowMoreEmojis: r, demoMode: !1, nonce: s }) }) }, q = e => { var t, n, s; let { node: u, expressionSourceGuild: S, joinedEmojiSourceGuildRecord: O, closePopout: g, onToggleShowMoreEmojis: L, guildEmoji: y, demoMode: P = !1, nonce: G } = e, k = (0, l.useStateFromStores)([D.default], () => D.default.getCurrentUser()), B = (0, l.useStateFromStores)([v.default], () => v.default.getGuildId()), Z = V.default.isPremium(k), Q = null != B && (B === (null == S ? void 0 : S.id) || B === (null == O ? void 0 : O.id)), q = null != O, $ = null !== (t = null == S ? void 0 : S.isDiscoverable()) && void 0 !== t && t; P && (Z = !0, $ = !0, q = !1, Q = !1); let ee = z(), { isRoleSubscriptionEmoji: et, isUnusableRoleSubscriptionEmoji: en, userIsRoleSubscriber: ei } = r.useMemo(() => null == y ? { isRoleSubscriptionEmoji: !1, isUnusableRoleSubscriptionEmoji: !1, userIsRoleSubscriber: !1 } : { isRoleSubscriptionEmoji: m.isPurchasableRoleSubscriptionEmoji(y), isUnusableRoleSubscriptionEmoji: m.isUnusableRoleSubscriptionEmoji(y, null != B ? B : void 0), userIsRoleSubscriber: N.default.getUserSubscriptionRoles(y.guildId).size > 0 }, [y, B]), er = !!en && (0, f.shouldHideGuildPurchaseEntryPoints)(null == y ? void 0 : y.guildId), { analyticsLocations: es } = (0, I.default)(E.default.GUILD_ROLE_SUBSCRIPTION_EMOJI_TEXT_POPOVER_UPSELL); (0, T.default)({ type: o.ImpressionTypes.MODAL, name: o.ImpressionNames.ROLE_SUBSCRIPTION_EMOJI_UPSELL, properties: { location_stack: es, emoji_guild_id: null !== (n = null == y ? void 0 : y.guildId) && void 0 !== n ? n : null, emoji_id: null !== (s = null == y ? void 0 : y.id) && void 0 !== s ? s : null } }, { disableTrack: !et }); let ea = v.default.getGuildId(), eo = (0, x.getEmojiPopoutData)({ isPremium: Z, hasJoinedEmojiSourceGuild: q, isRoleSubscriptionEmoji: et, isUnusableRoleSubscriptionEmoji: en, userIsRoleSubscriber: ei, emojiComesFromCurrentGuild: Q, isDiscoverable: $, shouldHideRoleSubscriptionCTA: er, onOpenPremiumSettings: () => { g(), w.default.track(H.AnalyticEvents.PREMIUM_PROMOTION_OPENED, { location_page: ee.page, location_section: ee.section }), (0, C.navigateToPremiumMarketingPage)() } }), el = q && en && !er && (Z && et || !Z), eu = eo.emojiDescription, ed = (0, A.useTrackOpenPopout)({ emojiId: u.emojiId, currentGuildId: ea, popoutData: eo, emojiSourceGuildId: null == S ? void 0 : S.id, nonce: G, demoMode: P }), e_ = eo.type === x.EmojiPopoutType.JOIN_GUILD, ec = eo.type === x.EmojiPopoutType.GET_PREMIUM, [eE, eI] = r.useState(!1), eT = $ || q && !Q || null != S; return (0, i.jsxs)(F.MessagePopoutContent, { className: K.popoutContent, children: [(() => { let e = async () => { if (P || null == S || q) return; g(); let e = S.id; try { await _.default.joinGuild(e), _.default.transitionToGuildSync(e) } catch {} }, t = !q && $; return (0, i.jsxs)("div", { className: K.emojiSection, children: [(0, i.jsxs)(M.default, { children: [(0, i.jsx)(c.default, { className: K.primaryEmoji, emojiId: u.emojiId, emojiName: u.name, animated: u.animated, size: "jumbo" }), (0, i.jsxs)(M.default, { direction: M.default.Direction.VERTICAL, justify: M.default.Justify.CENTER, className: K.truncatingText, children: [(0, i.jsx)(d.Text, { variant: "text-md/semibold", children: (0, i.jsx)(U.default, { children: u.name }) }), null != eu && (0, i.jsx)(d.Text, { variant: "text-sm/normal", children: eu })] })] }), ec ? (0, i.jsx)(R.default, { className: K.ctaButton, subscriptionTier: j.PremiumSubscriptionSKUs.TIER_2, size: d.Button.Sizes.SMALL, fullWidth: !0, buttonText: eo.text, onSubscribeModalClose: t => t ? e() : g(), postSuccessGuild: t && null != S ? S : void 0, premiumModalAnalyticsLocation: ee }) : e_ ? (0, i.jsx)(d.Button, { size: d.Button.Sizes.SMALL, className: K.ctaButton, color: d.ButtonColors.BRAND, fullWidth: !0, onClick: e, children: eo.text }) : void 0, el && (0, i.jsx)(p.default, { className: K.ctaButton, size: d.Button.Sizes.SMALL, fullWidth: !0, onClick: () => { g(), (null == O ? void 0 : O.id) != null && _.default.transitionToGuildSync(O.id, void 0, Y.StaticChannelRoute.ROLE_SUBSCRIPTIONS, [E.default.GUILD_ROLE_SUBSCRIPTION_EMOJI_TEXT_POPOVER_UPSELL]) }, children: ei ? W.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_UPGRADE_UPSELL_BUTTON : W.default.Messages.ROLE_SUBSCRIPTION_EMOJI_POPOUT_PURCHASE_UPSELL_BUTTON })] }) })(), eT && (() => { let e = null != S && !q && $, t = () => { e && (null == L || L(), !eE && !P && w.default.track(H.AnalyticEvents.EMOJI_UPSELL_POPOUT_MORE_EMOJIS_OPENED, ed), eI(!eE)) }; return (0, i.jsxs)("div", { className: K.guildSection, children: [(0, i.jsx)(d.FormTitle, { className: K.guildTitle, children: q ? W.default.Messages.EMOJI_POPOUT_JOINED_GUILD_EMOJI_DESCRIPTION : W.default.Messages.EMOJI_POPOUT_UNJOINED_GUILD_EMOJI_DESCRIPTION }), (0, i.jsx)(X, { expressionSourceGuild: null != S ? S : h.default.createFromGuildRecord(O), hasJoinedExpressionSourceGuild: q, isDisplayingJoinGuildButtonInPopout: e_ }), e && (0, i.jsxs)(i.Fragment, { children: [(() => { let e = W.default.Messages.EMOJI_POPOUT_SHOW_MORE_EMOJIS; return (0, i.jsx)(d.Clickable, { onClick: t, className: K.showMoreEmojis, children: (0, i.jsxs)(M.default, { children: [(0, i.jsx)(d.Text, { className: K.__invalid_showMoreEmojisLabel, "aria-label": e, variant: "text-xs/normal", color: "none", children: e }), (0, i.jsx)(b.default, { className: a()(K.showMoreEmojisArrow, { [K.showMoreEmojisArrowCollapsed]: !eE }) })] }) }) })(), null != u.emojiId && eE && (0, i.jsx)(J, { emojiId: u.emojiId, expressionSourceGuild: S, popoutData: eo, onClose: g, hasJoinedEmojiSourceGuild: q, isDisplayingButtonInTopSection: e_ || ec })] })] }) })()] }) }, J = e => { var t; let { emojiId: n, expressionSourceGuild: r, hasJoinedEmojiSourceGuild: s, popoutData: a, onClose: o, isDisplayingButtonInTopSection: l } = e, u = (null !== (t = null == r ? void 0 : r.emojis) && void 0 !== t ? t : []).slice(0, 13).filter(e => e.id !== n).slice(0, 12), { type: _, description: E } = a; return (0, i.jsxs)(M.default, { wrap: M.default.Wrap.WRAP, align: M.default.Align.CENTER, justify: M.default.Justify.CENTER, className: K.otherEmojisContainer, children: [s ? null : u.map(e => (0, i.jsx)(d.Tooltip, { text: e.require_colons ? ":".concat(e.name, ":") : e.name, ...F.EXPRESSION_TOOLTIP_PROPS, children: t => (0, i.jsx)(c.default, { className: K.otherEmoji, emojiId: e.id, animated: e.animated, ...t }) }, e.id)), !l && (_ === x.EmojiPopoutType.GET_PREMIUM ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(R.default, { subscriptionTier: j.PremiumSubscriptionSKUs.TIER_2, buttonText: a.text, className: K.ctaButton, fullWidth: !0, onClick: () => o() }), null != E && (0, i.jsx)("div", { className: K.ctaDescription, children: (0, i.jsx)(d.Text, { variant: "text-sm/medium", "aria-label": E, children: E }) })] }) : _ === x.EmojiPopoutType.JOIN_GUILD ? (0, i.jsx)(d.Button, { size: d.Button.Sizes.SMALL, className: K.ctaButton, color: d.ButtonColors.BRAND, fullWidth: !0, onClick: () => { (0, B.startLurking)(r.id, {}) }, children: a.text }) : null)] }) } }, 524444: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EXPRESSION_TOOLTIP_PROPS: function() { return Z }, ErrorLoadingBar: function() { return es }, JumpBarType: function() { return i }, JumpToPresentBar: function() { return er }, MessagePopoutContent: function() { return e_ }, NewMessagesBar: function() { return ea }, NewTopicsBar: function() { return eo }, PopoutLoadingAnimation: function() { return ec }, TopicsPill: function() { return eu }, renderAudioComponent: function() { return J }, renderClickableTooltipNode: function() { return ed }, renderGenericFileComponent: function() { return ei }, renderImageComponent: function() { return ee }, renderMaskedLinkComponent: function() { return et }, renderPlaintextFilePreview: function() { return en }, renderVideoComponent: function() { return q }, renderVoiceMessageAudioComponent: function() { return $ } }), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("374470"), c = n("442837"), E = n("481060"), I = n("904245"), T = n("45114"), f = n("431279"), S = n("794295"), h = n("593472"), A = n("110924"), m = n("688465"), N = n("479313"), p = n("765104"), O = n("505953"), C = n("695346"), R = n("201542"), g = n("306680"), L = n("594174"), v = n("130208"), D = n("992665"), M = n("133910"), y = n("145196"), P = n("153124"), U = n("278297"), b = n("259580"), G = n("386103"), w = n("465670"), k = n("839523"), B = n("626135"), V = n("823379"), x = n("589530"), F = n("709054"), H = n("981631"), Y = n("420212"), j = n("814249"), W = n("768760"), K = n("689938"), z = n("59369"); let Z = { delay: 300, position: "top" }, X = e => t => { null == e || e(t), (0, x.setVolume)(t) }, Q = e => t => { null == e || e(t), (0, x.setMuted)(t) }; function q(e) { let { onVolumeChange: t, onMute: n, volume: i, autoMute: r, alt: o, renderAdjacentContent: l, renderOverlayContent: u, ...d } = e, _ = X(t), c = Q(n); return i = null == i ? x.getVolume : i, r = null == r ? x.getMuted : r, (0, s.jsxs)(a.Fragment, { children: [(0, s.jsx)(M.default, { ...d, alt: o, volume: i, autoMute: r, onVolumeChange: _, onMute: c, renderLinkComponent: et, renderOverlayContent: u }), null != l && l()] }) } function J(e) { let { onVolumeChange: t, volume: n, onMute: i, onVolumeShow: r, onVolumeHide: o, renderAdjacentContent: l, ...u } = e, d = X(t), _ = Q(i); return n = null == n ? x.getVolume : n, (0, s.jsxs)(a.Fragment, { children: [(0, s.jsx)(D.default, { ...u, onVolumeChange: d, onMute: _, onVolumeShow: r, onVolumeHide: o, volume: n, autoMute: () => !1, renderLinkComponent: et }), null != l && l()] }) } function $(e) { let { onVolumeChange: t, volume: n, onMute: i, ...r } = e, a = X(t), o = Q(i); return n = null == n ? x.getVolume : n, (0, s.jsx)(R.default, { ...r, onVolumeChange: a, onMute: o, volume: n }) } function ee(e) { let { alt: t, hiddenSpoilers: n, renderAdjacentContent: i, containerClassName: r, imageContainerClassName: o, disableAltTextDisplay: u = !1, mediaLayoutType: d, imageContainerStyle: _ } = e, c = d === W.MediaLayoutType.MOSAIC, I = !u && C.ViewImageDescriptions.getSetting() && null != t && "" !== t && !0 !== n, T = e => { let { altText: t } = e; return (0, s.jsxs)(E.Dialog, { "aria-label": K.default.Messages.MEDIA_MOSAIC_ALT_TEXT_POPOUT_TITLE, className: z.mediaMosaicAltTextPopout, onKeyDown: e => { e.key === Y.KeyboardEventKey.Escape && setTimeout(() => { var e; return null === (e = S.current) || void 0 === e ? void 0 : e.focus() }, 0) }, children: [(0, s.jsx)("span", { className: z.mediaMosaicAltTextPopoutTitle, children: K.default.Messages.MEDIA_MOSAIC_ALT_TEXT_POPOUT_TITLE }), (0, s.jsx)("span", { className: z.mediaMosaicAltTextPopoutDescription, children: t })] }) }, S = a.createRef(); return (0, s.jsxs)("div", { className: l()(z.imageContent, r), children: [(0, s.jsxs)("div", { className: l()(z.imageContainer, o), style: _, children: [(0, s.jsx)(f.default, { ...e, renderLinkComponent: et }), null != i && i()] }), c && I && (0, s.jsx)("div", { className: z.mediaMosaicAltTextContainer, children: (0, s.jsx)(E.Popout, { animation: E.Popout.Animation.FADE, renderPopout: () => (0, s.jsx)(T, { altText: t }), children: e => (0, s.jsx)(E.FocusRing, { offset: 4, children: (0, s.jsx)("button", { ...e, type: "button", ref: S, "aria-label": K.default.Messages.MEDIA_MOSAIC_ALT_TEXT_POPOUT_TITLE, className: z.mediaMosaicAltText, children: K.default.Messages.MEDIA_MOSAIC_ALT_TEXT_CTA }) }) }) }), !c && I && (0, s.jsx)("span", { className: z.altText, children: t })] }) } function et(e) { return (0, s.jsx)(S.default, { ...e }) } function en(e) { let { renderAdjacentContent: t, ...n } = e; return (0, s.jsxs)(a.Fragment, { children: [(0, s.jsx)(y.default, { ...n }), null != t && t()] }) } function ei(e) { return (0, s.jsx)(v.default, { ...e }) }(r = i || (i = {}))[r.OLD_MESSAGES = 0] = "OLD_MESSAGES", r[r.REPLY = 1] = "REPLY"; let er = e => { let { type: t = 0, onClick: n } = e; return (0, s.jsx)(U.MessagesInteractionContext.Consumer, { children: e => e.disableInteractions ? null : (0, s.jsxs)("div", { className: z.jumpToPresentBar, children: [(0, s.jsx)(E.FocusRing, { offset: 4, children: (0, s.jsx)("button", { type: "button", onClick: n, className: z.barButtonMain, children: function(e) { switch (e) { case 0: return K.default.Messages.YOURE_VIEWING_OLDER_MESSAGES; case 1: return K.default.Messages.JUMP_BAR_VIEWING_REPLY; default: return (0, V.assertNever)(e) } }(t) }) }), null != n ? (0, s.jsx)(E.FocusRing, { offset: 4, children: (0, s.jsxs)("button", { type: "button", onClick: n, className: z.barButtonAlt, children: [function(e) { switch (e) { case 0: return K.default.Messages.JUMP_TO_PRESENT; case 1: return K.default.Messages.JUMP_TO_ORIGINAL_MESSAGE; default: return (0, V.assertNever)(e) } }(t), (0, s.jsx)(b.default, { className: z.barButtonIcon })] }) }) : (0, s.jsx)(E.Spinner, { type: E.Spinner.Type.PULSING_ELLIPSIS, className: z.spinner, itemClassName: z.spinnerItem })] }) }) }, es = e => { let { onClick: t, loading: n } = e; return (0, s.jsx)(U.MessagesInteractionContext.Consumer, { children: e => e.disableInteractions ? null : (0, s.jsxs)(E.Clickable, { className: z.messagesErrorBar, onClick: t, focusProps: { offset: { top: 4, right: 4, bottom: 12, left: 4 } }, children: [(0, s.jsx)("div", { className: z.barButtonMain, children: K.default.Messages.MESSAGES_FAILED_TO_LOAD }), n ? (0, s.jsx)(E.Spinner, { type: E.Spinner.Type.PULSING_ELLIPSIS, className: z.spinner, itemClassName: z.spinnerItem }) : (0, s.jsx)("div", { className: z.barButtonAlt, children: K.default.Messages.MESSAGES_FAILED_TO_LOAD_TRY_AGAIN })] }) }) }; function ea(e) { let { content: t, channelId: n } = e, [i] = a.useState(() => (0, P.uid)("NewMessagesBarJumpToNewMessages_")), r = a.useCallback(() => { let e = g.default.ackMessageId(n); null != e ? I.default.jumpToMessage({ channelId: n, messageId: e, offset: 1, context: "Mark As Read" }) : I.default.jumpToMessage({ channelId: n, messageId: F.default.castChannelIdAsMessageId(n), offset: 1, context: "Mark As Read" }) }, [n]), o = a.useCallback(() => { (0, T.ack)(n) }, [n]), { disableInteractions: u } = a.useContext(U.MessagesInteractionContext); return u ? null : (0, s.jsxs)("div", { className: l()(z.newMessagesBar, { [z.disableInteractions]: u }), children: [(0, s.jsx)(E.FocusRing, { offset: 4, children: (0, s.jsx)("button", { type: "button", className: z.barButtonMain, onClick: r, "aria-label": K.default.Messages.JUMP_TO_LAST_UNREAD_MESSAGE, "aria-describedby": i, children: (0, s.jsx)("span", { id: i, className: z.span, children: t }) }) }), (0, s.jsx)(E.FocusRing, { offset: 4, children: (0, s.jsxs)("button", { type: "button", onClick: o, className: z.barButtonAlt, children: [K.default.Messages.MARK_AS_READ, (0, s.jsx)(G.default, { className: z.barButtonIcon })] }) })] }) } function eo(e) { var t, n, i; let { channel: r, content: o, scrollManager: u } = e, { disableInteractions: f } = a.useContext(U.MessagesInteractionContext), [S, C] = a.useState(null), R = a.useRef(null), [v, D] = a.useState(null), M = a.useRef(null), y = (0, c.useStateFromStoresArray)([p.default], () => { var e; return null !== (e = p.default.summaries(r.id)) && void 0 !== e ? e : [] }, [r]), P = (0, A.default)(y); a.useEffect(() => { !d().isEqual(P, y) && B.default.track(H.AnalyticEvents.SUMMARIES_TOPICS_PILL_VIEWED, { num_summaries: y.length, message_counts: y.map(e => e.count), start_message_ids: y.map(e => e.startId), end_message_ids: y.map(e => e.endId), num_participants: y.map(e => e.people.length), guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }) }, [y, P, r.guild_id, r.id, r.type]); let x = (0, c.useStateFromStores)([L.default], () => { var e; return null !== (e = null == y ? void 0 : y.map(e => { var t; return null === (t = e.people) || void 0 === t ? void 0 : t.map(e => { var t; return null !== (t = L.default.getUser(e)) && void 0 !== t ? t : null }).filter(V.isNotNullish) })) && void 0 !== e ? e : [] }, [y], el), Y = null !== (n = (0, c.useStateFromStores)([p.default], () => p.default.visibleSummaryIndex())) && void 0 !== n ? n : -1, W = null == y ? void 0 : null === (t = y[Y]) || void 0 === t ? void 0 : t.topic; null == W && null == S && (null == y ? void 0 : y.length) >= 1 && (W = null === (i = y[0]) || void 0 === i ? void 0 : i.topic); let Z = a.useMemo(() => d().debounce(e => { var t; C(null !== (t = null == e ? void 0 : e.id) && void 0 !== t ? t : null) }, 64), [C]), X = a.useMemo(() => d().throttle(() => { (0, N.setHighlightedSummary)(null) }, 1200, { trailing: !1 }), []), Q = a.useCallback(e => { X(), Z(e) }, [Z, X]), [q, J] = a.useState(!1), $ = a.useCallback(() => { B.default.track(H.AnalyticEvents.SUMMARIES_TOPICS_PILL_TOGGLED, { topics_dropdown_open: !q, num_summaries: y.length, message_counts: y.map(e => e.count), start_message_ids: y.map(e => e.startId), end_message_ids: y.map(e => e.endId), num_participants: y.map(e => e.people.length), guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }), J(!q) }, [q, y, J, r]), ee = a.useCallback(function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : j.SummariesTopicClickedSource.PILL_DROPDOWN, n = y[e]; if (null == n) return; (0, N.setSelectedSummary)(r.id, n.id), (0, N.setHighlightedSummary)(r.id, n.id); let i = () => { u.removeScrollCompleteCallback(i), setTimeout(() => { u.addAutomaticAnchorCallback(Q, !1) }, 100) }; u.removeAutomaticAnchorCallback(Q), u.addScrollCompleteCallback(i), B.default.track(H.AnalyticEvents.SUMMARIES_TOPIC_CLICKED, { source: t, message_id: n.startId, guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }), I.default.jumpToMessage({ channelId: r.id, messageId: n.startId, flash: !0, offset: 0, jumpType: h.JumpTypes.ANIMATED, context: "Summary Jump" }) }, [y, r, Q, u]), et = a.useCallback(e => { var t; J(e); let n = null === (t = M.current) || void 0 === t ? void 0 : t.scrollTop; null != n && D(n) }, []); a.useEffect(() => { if (null != v && q) { var e; null === (e = M.current) || void 0 === e || e.scrollTo({ top: v }) } }, [v, q]); let en = a.useCallback(e => { var t; !((0, _.isElement)(e.target) && (null === (t = R.current) || void 0 === t ? void 0 : t.contains(e.target))) && (q && B.default.track(H.AnalyticEvents.SUMMARIES_TOPICS_PILL_TOGGLED, { topics_dropdown_open: !1, num_summaries: y.length, message_counts: y.map(e => e.count), start_message_ids: y.map(e => e.startId), end_message_ids: y.map(e => e.endId), num_participants: y.map(e => e.people.length), guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }), et(!1)) }, [q, y, r, et]); a.useEffect(() => (u.addAutomaticAnchorCallback(Q), () => { u.removeAutomaticAnchorCallback(Q) }), [u, Q]), a.useEffect(() => { (0, N.fetchSummaries)(r.id) }, [r.id]), a.useEffect(() => (document.addEventListener("mousedown", en), () => { document.removeEventListener("mousedown", en) }), [en]); let ei = a.useMemo(() => (0, s.jsx)(O.default, { channel: r, summaries: y, summariesMembers: x, selectTopic: ee, setOpen: et }), [y, x, ee, et, r]), er = a.useCallback(() => { let e = g.default.ackMessageId(r.id); null != e ? I.default.jumpToMessage({ channelId: r.id, messageId: e, offset: 1, context: "Mark As Read" }) : I.default.jumpToMessage({ channelId: r.id, messageId: F.default.castChannelIdAsMessageId(r.id), offset: 1, context: "Mark As Read" }) }, [r.id]), es = a.useCallback(() => { (0, T.ack)(r.id) }, [r.id]), ea = K.default.Messages.SUMMARIES_NO_SUMMARIES; return y.length > 0 && (ea = "" === W || null == W ? K.default.Messages.SUMMARIES_VIEW_ALL : W), f ? null : (0, s.jsxs)("div", { ref: R, className: l()(z.newTopicsBarContainer, z.containerMarginTop), children: [(0, s.jsx)("div", { className: l()(z.newTopicsBarTopicSection), children: (0, s.jsx)(E.Clickable, { className: z.newTopicsBarTextClickable, "aria-label": K.default.Messages.SUMMARY_PILL, onClick: $, children: (0, s.jsxs)("div", { className: l()({ [z.newTopicsBarTextUnselected]: !q, [z.newTopicsBarTextSelected]: q }), children: [(0, s.jsx)(k.default, { className: z.newTopicsBarIcon, width: 16, height: 16 }), (0, s.jsx)(E.Text, { variant: "text-sm/medium", className: l()(z.newTopicsBarCompact, z.newTopicsBarText), children: ea }), (0, s.jsx)(b.default, { width: 16, height: 16, direction: b.default.Directions.DOWN, className: z.newTopicsBarCaret })] }) }) }), (0, s.jsx)(E.Clickable, { onClick: er, className: l()(z.barButtonMain, z.newTopicsBarInitial), children: o }), (0, s.jsxs)(E.Clickable, { onClick: es, className: l()(z.barButtonAlt, z.flexEnd), children: [(0, s.jsx)("div", { className: z.newTopicsBarCompact, children: K.default.Messages.MARK_AS_READ }), (0, s.jsx)(G.default, { className: z.barButtonIcon })] }), q && (0, s.jsxs)("div", { className: z.topicsDropdown, children: [(0, s.jsxs)("div", { className: z.topicsDropdownHeading, children: [(0, s.jsxs)("div", { className: z.topicsDropdownHeadingText, children: [(0, s.jsx)(k.default, { className: z.topicsPillHeadingIcon, width: 18, height: 20 }), (0, s.jsx)(E.Heading, { variant: "heading-md/bold", color: "header-primary", lineClamp: 1, children: K.default.Messages.SUMMARIES }), (0, s.jsx)(m.default, { className: z.summariesBetaTag })] }), (0, s.jsx)(E.Clickable, { "aria-label": K.default.Messages.CLOSE, onClick: $, className: z.topicsDropdownClose, children: (0, s.jsx)(w.default, {}) })] }), (0, s.jsx)(E.Scroller, { ref: M, className: z.topicsScroller, fade: !0, children: ei })] })] }) } function el(e, t) { return null != t && e.length === t.length && !e.some((e, n) => { var i, r; return i = e, null == (r = t[n]) || i.length !== r.length || !!i.some((e, t) => r[t] !== e) }) } function eu(e) { var t, n, i; let { channel: r, scrollManager: o } = e, { disableInteractions: u } = a.useContext(U.MessagesInteractionContext), [T, f] = a.useState(null), S = a.useRef(null), [C, R] = a.useState(null), g = a.useRef(null), v = (0, c.useStateFromStoresArray)([p.default], () => { var e; return null !== (e = p.default.summaries(r.id)) && void 0 !== e ? e : [] }, [r]), D = (0, A.default)(v); a.useEffect(() => { !d().isEqual(D, v) && B.default.track(H.AnalyticEvents.SUMMARIES_TOPICS_PILL_VIEWED, { num_summaries: v.length, message_counts: v.map(e => e.count), start_message_ids: v.map(e => e.startId), end_message_ids: v.map(e => e.endId), num_participants: v.map(e => e.people.length), guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }) }, [v, D, r.guild_id, r.id, r.type]); let M = (0, c.useStateFromStores)([L.default], () => { var e; return null !== (e = null == v ? void 0 : v.map(e => { var t; return null === (t = e.people) || void 0 === t ? void 0 : t.map(e => { var t; return null !== (t = L.default.getUser(e)) && void 0 !== t ? t : null }).filter(V.isNotNullish) })) && void 0 !== e ? e : [] }, [v], el), y = null !== (n = (0, c.useStateFromStores)([p.default], () => p.default.visibleSummaryIndex())) && void 0 !== n ? n : -1, P = null == v ? void 0 : null === (t = v[y]) || void 0 === t ? void 0 : t.topic; null == P && null == T && (null == v ? void 0 : v.length) >= 1 && (P = null === (i = v[0]) || void 0 === i ? void 0 : i.topic); let G = a.useMemo(() => d().get(v, y - 1), [y, v]), x = a.useMemo(() => d().get(v, y + 1), [y, v]), F = a.useMemo(() => d().debounce(e => { var t; f(null !== (t = null == e ? void 0 : e.id) && void 0 !== t ? t : null) }, 64), [f]), Y = a.useMemo(() => d().throttle(() => { (0, N.setHighlightedSummary)(null) }, 1200, { trailing: !1 }), []), W = a.useCallback(e => { Y(), F(e) }, [F, Y]), [Z, X] = a.useState(!1), Q = a.useCallback(() => { B.default.track(H.AnalyticEvents.SUMMARIES_TOPICS_PILL_TOGGLED, { topics_dropdown_open: !Z, num_summaries: v.length, message_counts: v.map(e => e.count), start_message_ids: v.map(e => e.startId), end_message_ids: v.map(e => e.endId), num_participants: v.map(e => e.people.length), guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }), X(!Z) }, [Z, v, X, r]), q = a.useCallback(function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : j.SummariesTopicClickedSource.PILL_DROPDOWN, n = v[e]; if (null == n) return; (0, N.setSelectedSummary)(r.id, n.id), (0, N.setHighlightedSummary)(r.id, n.id); let i = () => { o.removeScrollCompleteCallback(i), setTimeout(() => { o.addAutomaticAnchorCallback(W, !1) }, 100) }; o.removeAutomaticAnchorCallback(W), o.addScrollCompleteCallback(i), B.default.track(H.AnalyticEvents.SUMMARIES_TOPIC_CLICKED, { source: t, message_id: n.startId, guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }), I.default.jumpToMessage({ channelId: r.id, messageId: n.startId, flash: !0, offset: 0, jumpType: h.JumpTypes.ANIMATED, context: "Summary Jump" }) }, [v, r, W, o]), J = a.useCallback(() => { q(y - 1, j.SummariesTopicClickedSource.PILL_NEXT_ARROW) }, [q, y]), $ = a.useCallback(() => { q(y + 1, j.SummariesTopicClickedSource.PILL_PREVIOUS_ARROW) }, [y, q]), ee = a.useCallback(e => { var t; X(e); let n = null === (t = g.current) || void 0 === t ? void 0 : t.scrollTop; null != n && R(n) }, []); a.useEffect(() => { if (null != C && Z) { var e; null === (e = g.current) || void 0 === e || e.scrollTo({ top: C }) } }, [C, Z]); let et = a.useCallback(e => { var t; !((0, _.isElement)(e.target) && (null === (t = S.current) || void 0 === t ? void 0 : t.contains(e.target))) && (Z && B.default.track(H.AnalyticEvents.SUMMARIES_TOPICS_PILL_TOGGLED, { topics_dropdown_open: !1, num_summaries: v.length, message_counts: v.map(e => e.count), start_message_ids: v.map(e => e.startId), end_message_ids: v.map(e => e.endId), num_participants: v.map(e => e.people.length), guild_id: r.guild_id, channel_id: r.id, channel_type: r.type }), ee(!1)) }, [Z, v, r, ee]); a.useEffect(() => (o.addAutomaticAnchorCallback(W), () => { o.removeAutomaticAnchorCallback(W) }), [o, W]), a.useEffect(() => { (0, N.fetchSummaries)(r.id) }, [r.id]), a.useEffect(() => (document.addEventListener("mousedown", et), () => { document.removeEventListener("mousedown", et) }), [et]); let en = a.useMemo(() => (0, s.jsx)(O.default, { channel: r, summaries: v, summariesMembers: M, selectTopic: q, setOpen: ee }), [v, M, q, ee, r]); if (!(0, c.useStateFromStores)([p.default], () => p.default.shouldShowTopicsBar())) return null; let ei = K.default.Messages.SUMMARIES_NO_SUMMARIES; return v.length > 0 && (ei = "" === P || null == P ? K.default.Messages.SUMMARIES_VIEW_ALL : P), u ? null : (0, s.jsxs)("div", { ref: S, className: l()(z.topicsPillContainer, z.containerMarginTop), children: [(0, s.jsxs)("div", { className: z.topicsPill, children: [(0, s.jsx)(E.Clickable, { className: z.topicsPillText, "aria-label": K.default.Messages.SUMMARY_PILL, onClick: Q, children: (0, s.jsxs)("div", { className: l()({ [z.topicsPillTextUnselected]: !Z, [z.topicsPillTextSelected]: Z }), children: [(0, s.jsx)(k.default, { className: z.topicsPillSummaryIcon, width: 16, height: 16 }), (0, s.jsx)(E.Text, { className: z.topicsPillTextTitle, variant: "text-sm/medium", children: ei }), (0, s.jsx)(b.default, { width: 16, height: 16, direction: b.default.Directions.DOWN, className: z.topicsPillDropdownCaret })] }) }), (0, s.jsxs)("div", { className: z.topicsPillCarets, children: [(0, s.jsx)(E.Clickable, { "aria-label": K.default.Messages.SUMMARY_PILL_NEXT, onClick: $, className: l()(z.topicsPillCaret, z.topicsCaretLeft, { [z.topicsPillCaretDisabled]: null == x }), children: (0, s.jsx)(b.default, { width: 16, height: 16, direction: b.default.Directions.UP }) }), (0, s.jsx)(E.Clickable, { "aria-label": K.default.Messages.SUMMARY_PILL_PREVIOUS, onClick: J, className: l()(z.topicsPillCaret, z.topicsCaretRight, { [z.topicsPillCaretDisabled]: null == G }), children: (0, s.jsx)(b.default, { width: 16, height: 16, direction: b.default.Directions.DOWN }) })] })] }), Z && (0, s.jsxs)("div", { className: z.topicsDropdown, children: [(0, s.jsxs)("div", { className: z.topicsDropdownHeading, children: [(0, s.jsxs)("div", { className: z.topicsDropdownHeadingText, children: [(0, s.jsx)(k.default, { className: z.topicsPillHeadingIcon, width: 18, height: 20 }), (0, s.jsx)(E.Heading, { variant: "heading-md/bold", color: "header-primary", lineClamp: 1, children: K.default.Messages.SUMMARIES }), (0, s.jsx)(m.default, { className: z.summariesBetaTag })] }), (0, s.jsx)(E.Clickable, { "aria-label": K.default.Messages.CLOSE, onClick: Q, className: z.topicsDropdownClose, children: (0, s.jsx)(w.default, {}) })] }), (0, s.jsx)(E.Scroller, { ref: g, className: z.topicsScroller, fade: !0, children: en })] })] }) } let ed = function(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return (0, s.jsxs)("div", { className: z.tooltip, children: [(0, s.jsx)(E.Text, { color: "none", variant: "text-sm/semibold", lineClamp: 1, className: z.tooltipEmojiName, children: e }), t && (0, s.jsx)(E.Text, { className: z.clickCTA, color: "text-muted", variant: "text-sm/normal", children: K.default.Messages.EMOJI_TOOLTIP_CLICK_CTA })] }) }, e_ = e => { let { children: t, className: n } = e; return (0, s.jsx)("div", { className: l()(z.popoutContainer, n), children: t }) }, ec = e => { let { className: t } = e; return (0, s.jsx)(e_, { className: t, children: (0, s.jsx)("div", { className: z.popoutLoadingBackground, children: (0, s.jsx)("div", { className: z.popoutLoadingForeground }) }) }) } }, 65838: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PLAINTEXT_FILE_EXTENSIONS: function() { return i }, isPlaintextPreviewableFile: function() { return r } }), n("47120"); let i = new Set(["1c", "4d", "abnf", "accesslog", "ada", "arduino", "ino", "armasm", "arm", "avrasm", "actionscript", "as", "alan", "ansi", "i", "log", "ln", "angelscript", "asc", "apache", "apacheconf", "applescript", "osascript", "arcade", "asciidoc", "adoc", "aspectj", "autohotkey", "autoit", "awk", "mawk", "nawk", "gawk", "bash", "sh", "zsh", "basic", "bbcode", "blade", "bnf", "brainfuck", "bf", "csharp", "cs", "c", "h", "cpp", "hpp", "cc", "hh", "c++", "h++", "cxx", "hxx", "cal", "cos", "cls", "cmake", "cmake.in", "coq", "csp", "css", "csv", "capnproto", "capnp", "chaos", "kaos", "chapel", "chpl", "cisco", "clojure", "clj", "coffeescript", "coffee", "cson", "iced", "cpc", "crmsh", "crm", "pcmk", "crystal", "cr", "cypher", "d", "dns", "zone", "bind", "dos", "bat", "cmd", "dart", "delphi", "dpr", "dfm", "pas", "pascal", "freepascal", "lazarus", "lpr", "lfm", "diff", "patch", "django", "jinja", "dockerfile", "docker", "dsconfig", "dts", "dust", "dst", "dylan", "ebnf", "elixir", "ex", "elm", "erlang", "erl", "extempore", "xtlang", "xtm", "fsharp", "fs", "fix", "fortran", "f90", "f95", "gcode", "nc", "gams", "gms", "gauss", "gss", "godot", "gdscript", "gherkin", "gn", "gni", "go", "golang", "gf", "golo", "gololang", "gradle", "groovy", "xml", "html", "xhtml", "rss", "atom", "xjb", "xsd", "xsl", "plist", "svg", "http", "https", "haml", "handlebars", "hbs", "html.hbs", "html.handlebars", "haskell", "hs", "haxe", "hx", "hy", "hylang", "ini", "toml", "inform7", "i7", "irpf90", "json", "java", "jsp", "javascript", "js", "jsx", "jolie", "iol", "ol", "julia", "julia-repl", "kotlin", "kt", "tex", "leaf", "lean", "lasso", "ls", "lassoscript", "less", "ldif", "lisp", "livecodeserver", "livescript", "lock", "ls", "lua", "makefile", "mk", "mak", "make", "markdown", "md", "mkdown", "mkd", "mathematica", "mma", "wl", "matlab", "maxima", "mel", "mercury", "mirc", "mrc", "mizar", "mojolicious", "monkey", "moonscript", "moon", "n1ql", "nsis", "never", "nginx", "nginxconf", "nim", "nimrod", "nix", "ocl", "ocaml", "ml", "objectivec", "mm", "objc", "obj-c", "obj-c++", "objective-c++", "glsl", "openscad", "scad", "ruleslanguage", "oxygene", "pf", "pf.conf", "php", "php3", "php4", "php5", "php6", "php7", "parser3", "perl", "pl", "pm", "plaintext", "txt", "text", "pony", "pgsql", "postgres", "postgresql", "powershell", "ps", "ps1", "processing", "prolog", "properties", "protobuf", "puppet", "pp", "python", "py", "gyp", "profile", "python-repl", "pycon", "k", "kdb", "qml", "r", "cshtml", "razor", "razor-cshtml", "reasonml", "re", "redbol", "rebol", "red", "red-system", "rib", "rsl", "graph", "instances", "robot", "rf", "rpm-specfile", "rpm", "spec", "rpm-spec", "specfile", "ruby", "rb", "gemspec", "podspec", "thor", "irb", "rust", "rs", "SAS", "sas", "scss", "sql", "p21", "step", "stp", "scala", "scheme", "scilab", "sci", "shexc", "shell", "console", "smali", "smalltalk", "st", "sml", "ml", "solidity", "sol", "stan", "stanfuncs", "stata", "iecst", "scl", "structured-text", "stylus", "styl", "subunit", "supercollider", "sc", "svelte", "swift", "tcl", "tk", "terraform", "tf", "hcl", "tap", "thrift", "tp", "tsql", "twig", "craftcms", "typescript", "ts", "tsx", "unicorn-rails-log", "vbnet", "vb", "vba", "vbscript", "vbs", "vhdl", "vala", "verilog", "v", "vim", "axapta", "x++", "x86asm", "xl", "tao", "xquery", "xpath", "xq", "yml", "yaml", "zephir", "zep"]); function r(e) { return i.has(e.split(".").slice(-1)[0]) } }, 304176: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("367907"), l = n("829883"), u = n("623624"), d = n("973542"), _ = n("703656"), c = n("592125"), E = n("430824"), I = n("944486"), T = n("514342"), f = n("709586"), S = n("176278"), h = n("626135"), A = n("524444"), m = n("981631"), N = n("176505"), p = n("689938"), O = n("846745"); t.default = e => { let { roleIcon: t, guild: n } = e, { name: C } = t; r.useEffect(() => { h.default.track(m.AnalyticEvents.OPEN_POPOUT, { type: "Role Icon Popout", guild_id: n.id, ...(0, o.collectChannelAnalyticsMetadata)(c.default.getChannel(I.default.getChannelId(n.id))) }) }, []); let R = (0, s.useStateFromStores)([E.default], () => null != t.roleId ? E.default.getRole(n.id, t.roleId) : void 0), g = (0, d.isSubscriptionRole)(R), L = g ? p.default.Messages.ROLE_ICON_POPOUT_DESCRIPTION_ROLE_SUBSCRIPTIONS.format({ name: C }) : p.default.Messages.ROLE_ICON_POPOUT_DESCRIPTION.format({ name: C }), v = { ...t, src: null == t.src ? t.src : (0, l.replaceRoleIconSourceSize)(t.src, 40), size: 40 }; return (0, i.jsx)(a.Dialog, { children: (0, i.jsx)(A.MessagePopoutContent, { children: (0, i.jsxs)("div", { className: O.popoutContainer, children: [(0, i.jsxs)("div", { className: O.mainContent, children: [(0, i.jsx)("div", { className: O.roleIconContainer, children: (0, i.jsx)(S.default, { ...v, enableTooltip: !1, className: O.__invalid_roleIcon, enableHeight: !1 }) }), (0, i.jsxs)("div", { className: O.truncatingText, children: [(0, i.jsx)(a.Heading, { variant: "heading-md/semibold", className: O.roleName, children: (0, i.jsx)(T.default, { children: C }) }), (0, i.jsx)(a.Text, { variant: "text-sm/normal", children: L })] })] }), (0, i.jsxs)(a.Button, { size: a.Button.Sizes.SMALL, color: a.Button.Colors.PRIMARY, className: O.ctaButton, innerClassName: O.ctaButtonContent, fullWidth: !0, onClick: g ? () => { (0, _.transitionTo)(m.Routes.CHANNEL(n.id, N.StaticChannelRoute.ROLE_SUBSCRIPTIONS)) } : () => { (0, u.openGuildBoostingMarketingModal)({ guildId: n.id, location: { section: m.AnalyticsSections.ROLE_ICON_POPOUT } }) }, autoFocus: !0, children: [(0, i.jsx)(f.default, { width: 14, height: 14, className: O.boosterBadge }), p.default.Messages.ROLE_ICON_POPOUT_CTA] })] }) }) }) } }, 644956: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return y } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("866442"), u = n("442837"), d = n("481060"), _ = n("239091"), c = n("276264"), E = n("607070"), I = n("100527"), T = n("906732"), f = n("818083"), S = n("480608"), h = n("484459"), A = n("103575"), m = n("592125"), N = n("271383"), p = n("430824"), O = n("594174"), C = n("285952"), R = n("797053"), g = n("151827"), L = n("689938"), v = n("743090"), D = n("946278"); let M = (0, f.createExperiment)({ kind: "user", id: "2021-07_role_popout", label: "Role Popout", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Popout", config: { enabled: !0 } }] }); function y(e) { let { roleColor: t, roleId: r, channelId: a, roleName: f, guildId: y, children: P, inlinePreview: U = !1 } = e, { analyticsLocations: b } = (0, T.default)(I.default.ROLE_MENTION), G = (0, u.useStateFromStores)([E.default], () => E.default.roleStyle), w = null != t && 0 !== t && !U, k = w && "dot" === G, B = e => (0, i.jsxs)(R.default, { className: s()(D.roleMention), color: "username" === G && w ? t : null, ...e, children: [k && (0, i.jsx)(d.RoleDot, { color: (0, l.int2hex)(t), className: v.roleDot, background: !1, tooltip: !1 }), P] }), { enabled: V } = M.getCurrentConfig({ location: "2ec235_1" }, { autoTrackExposure: !1 }); return !V || U || null == a || null == y || null == r && "@everyone" !== f ? (0, i.jsx)(T.AnalyticsLocationProvider, { value: b, children: B() }) : (0, i.jsx)(T.AnalyticsLocationProvider, { value: b, children: (0, i.jsx)(d.Popout, { preload: async () => { null != r && await (0, S.requestMembersForRole)(y, r) }, renderPopout: e => { let t = m.default.getChannel(a), s = p.default.getGuild(y), l = N.default.getMembers(s.id), u = p.default.getRole(y, null != r ? r : s.getEveryoneRoleId()), E = o()(l).filter(e => !!("@everyone" === f || e.roles.includes(r)) && null != O.default.getUser(e.userId)).sortBy(e => { var t; let n = O.default.getUser(e.userId); return (null != n ? null !== (t = e.nick) && void 0 !== t ? t : n.username : "").toLocaleLowerCase() }).map(e => { let r = O.default.getUser(e.userId); return (0, i.jsx)(d.Popout, { preload: () => (0, h.maybeFetchUserProfileForPopout)(r.id, r.getAvatarURL(t.guild_id, 80), { guildId: t.guild_id, channelId: t.id }), renderPopout: n => (0, i.jsx)(A.default, { ...n, location: "RoleMention", userId: e.userId, guildId: s.id, channelId: t.id, roleId: u.id }), spacing: 14, children: (a, o) => { let { isShown: l } = o; return (0, i.jsx)(c.default, { selected: l, colorString: e.colorString, colorRoleName: u.name, user: r, isOwner: e.userId === s.ownerId, nick: e.nick, premiumSince: null == e.premiumSince ? null : new Date(e.premiumSince), channel: t, guildId: s.id, onContextMenu: e => { (0, _.openContextMenuLazy)(e, async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("36441"), n.e("82882"), n.e("12435"), n.e("7717"), n.e("80869")]).then(n.bind(n, "757387")); return n => (0, i.jsx)(e, { ...n, user: r, guildId: s.id, channel: t, showMediaItems: !0 }) }) }, ...a }, e.userId) } }, r.id) }).value(); return (0, i.jsx)(C.default, { className: D.rolePopout, ...e, children: (0, i.jsxs)(d.Scroller, { className: D.roleScroller, children: [(0, i.jsx)(g.default, { className: D.roleHeader, "aria-label": L.default.Messages.CHANNEL_MEMBERS_A11Y_LABEL.format({ title: u.name, count: E.length }), children: (0, i.jsxs)("span", { "aria-hidden": !0, children: [u.name, " — ", E.length] }) }), E] }) }) }, position: "right", children: B }) }) } }, 819366: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return L } }); var i = n("735250"), r = n("470079"), s = n("512722"), a = n.n(s), o = n("873546"), l = n("442837"), u = n("481060"), d = n("239091"), _ = n("100527"), c = n("906732"), E = n("797610"), I = n("927723"), T = n("484459"), f = n("103575"), S = n("592125"), h = n("271383"), A = n("430824"), m = n("699516"), N = n("594174"), p = n("797053"), O = n("5192"), C = n("51144"), R = n("377668"); function g(e) { let { userId: t, className: s, children: a } = e, o = r.useCallback(() => { (0, I.showInaccessibleLinkModal)({ kind: "user" }) }, []), l = r.useCallback(e => { null != t && (0, d.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("25073").then(n.bind(n, "80742")); return n => (0, i.jsx)(e, { ...n, userId: t }) }) }, [t]); return (0, i.jsx)(p.default, { className: s, onClick: o, onContextMenu: l, children: a }) } function L(e) { let { className: t, userId: r, channelId: s, parsedUserId: I, content: L, inlinePreview: v = !1 } = e, { analyticsLocations: D } = (0, c.default)(_.default.USER_MENTION), M = (0, l.useStateFromStores)([N.default], () => N.default.getUser(r)), y = (0, l.useStateFromStores)([S.default], () => S.default.getChannel(s)), P = null != y ? y.getGuildId() : null, U = v || null == M || null == P || null == s ? void 0 : e => { null != y && (0, d.openContextMenuLazy)(e, async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("36441"), n.e("82882"), n.e("12435"), n.e("7717"), n.e("80869")]).then(n.bind(n, "757387")); return t => (0, i.jsx)(e, { ...t, user: M, channel: y, guildId: P }) }) }, b = C.default.useName(M), G = (0, l.useStateFromStores)([S.default, h.default, m.default], () => O.default.getNickname(P, s, M)), w = A.default.getGuild(P), k = (0, E.useClydeEnabled)(w, y) && r === R.CLYDE_AI_USER_ID ? R.CLYDE_AI_MENTION_COLOR : null; if (null == M) return (0, i.jsx)(g, { userId: I, className: t, children: L }); let B = e => (0, i.jsx)(p.default, { className: t, onContextMenu: U, color: k, ...e, children: "@".concat(null != G ? G : b) }); return v ? (0, i.jsx)(c.AnalyticsLocationProvider, { value: D, children: B() }) : (0, i.jsx)(c.AnalyticsLocationProvider, { value: D, children: (0, i.jsx)(u.Popout, { preload: null == M ? void 0 : () => (0, T.maybeFetchUserProfileForPopout)(M.id, M.getAvatarURL(P, 80), { guildId: null != P ? P : void 0, channelId: null != s ? s : void 0 }), renderPopout: e => (a()(null != M, "Unexpected missing user"), (0, i.jsx)(f.default, { location: "UserMention", userId: M.id, guildId: null != P ? P : void 0, channelId: s, ...e })), position: o.isMobile ? "top" : "right", children: e => B(e) }) }) } }, 123145: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("307187"), s = n("750858"), a = n("739566"); function o(e) { var t, n; let o = (0, a.default)(e.message), l = (0, r.renderSystemTag)({ message: e.message, channel: e.channel, user: null !== (n = null === (t = e.message) || void 0 === t ? void 0 : t.author) && void 0 !== n ? n : e.userOverride, compact: !!e.compact, isRepliedMessage: !!e.isRepliedMessage }), u = {}; return null != l && (u[s.UsernameDecorationTypes.SYSTEM_TAG] = l), (0, i.jsx)(s.default, { ...e, author: o, decorations: u }) } }, 646574: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("442837"), u = n("524437"), d = n("389710"), _ = n("481060"), c = n("607070"), E = n("243778"), I = n("594174"), T = n("976644"), f = n("466111"), S = n("74538"), h = n("921944"), A = n("689938"), m = n("170799"); let N = { tension: 750, mass: 2.5, friction: 70 }; function p(e) { let { tooltipText: t, headingText: n, textColor: r } = e, s = null != n; return (0, i.jsxs)("span", { className: s ? void 0 : m.tooltipContainer, children: [(0, i.jsxs)("span", { className: m.tooltipContainer, children: [(0, i.jsx)(f.default, { className: m.nitroWheel }), s ? (0, i.jsx)(_.Heading, { color: null != r ? r : "text-normal", variant: "heading-sm/semibold", children: n }) : null] }), (0, i.jsx)(_.Text, { variant: s ? "text-xs/normal" : "text-sm/medium", color: null != r ? r : "text-normal", children: t })] }) } function O(e) { let { checked: t, onClick: n, id: s = "burst-reaction-toggle-button" } = e, f = (0, l.useStateFromStores)([c.default], () => c.default.useReducedMotion), O = I.default.getCurrentUser(), C = null == O || (0, S.isPremium)(O) ? [u.DismissibleContent.SUPER_REACTION_TOGGLE_EDUCATION_DESKTOP] : [], [R, g] = (0, E.useSelectedDismissibleContent)(C), [L, v] = r.useState(!1), [D, M] = (0, o.useSpring)(() => ({})), y = (0, o.animated)(d.SuperReactionIcon); r.useEffect(() => { let e = R === u.DismissibleContent.SUPER_REACTION_TOGGLE_EDUCATION_DESKTOP; e && (g(h.ContentDismissActionType.DISMISS), setTimeout(() => v(e), 200)) }, [R, g]); let P = L ? A.default.Messages.SUPER_REACTIONS_UNLIMITED_NOTICE_DESCRIPTION_DESKTOP_V2 : t ? A.default.Messages.SUPER_REACTION_TOGGLE_ENABLED : A.default.Messages.SUPER_REACTION_TOGGLE_DISABLED, U = L ? A.default.Messages.SUPER_REACTIONS_UNLIMITED_NOTICE_TITLE : void 0; return (0, i.jsxs)(_.TooltipContainer, { position: "top", text: (0, i.jsx)(p, { textColor: "always-white", tooltipText: P, headingText: U }), color: _.Tooltip.Colors.BRAND, forceOpen: L, "aria-label": P, tooltipClassName: m.tooltip, children: [(0, i.jsx)("input", { className: m.visuallyHidden, checked: t, onChange: function() { M({ from: { rotate: t ? "360deg" : "0deg" }, to: { rotate: t ? "0deg" : "360deg" }, config: N }), null == n || n(), v(!1) }, id: s, type: "checkbox" }), (0, i.jsxs)("label", { htmlFor: s, className: a()(m.label, { [m.labelChecked]: t }), children: [t ? (0, i.jsx)(T.Shine, { className: m.shine, shinePaused: f }) : null, (0, i.jsx)(y, { style: f ? void 0 : D, width: 20, height: 20, color: t ? "white" : void 0, className: m.icon }), (0, i.jsx)("span", { children: (0, i.jsx)(_.Text, { className: m.visuallyHidden, variant: "text-sm/semibold", children: A.default.Messages.SUPER_REACTION_TOGGLE_DISABLED }) })] })] }) } }, 223021: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("822545"); let r = { LATIN12: i.latin12CompactTimeStamp, LATIN24: i.latin24CompactTimeStamp, ASIAN: i.asianCompactTimeStamp }, s = /(AM|PM)$/; function a(e) { return null != e.match(s) ? r.LATIN24 : e.length <= 5 ? r.LATIN12 : r.ASIAN } }, 25015: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("470079"), r = n("200120"), s = n("626135"), a = n("937889"), o = n("761910"), l = n("981631"), u = n("689938"), d = n("354088"); function _(e, t) { let { hideSimpleEmbedContent: n, formatInline: _ = !1, noStyleAndInteraction: c = !1, isInteracting: E = !1, allowHeading: I = !1, allowList: T = !1, allowLinks: f = !1, allowDevLinks: S = !1, allowSubtext: h = !1, previewLinkTarget: A = !1 } = t, m = (0, r.useActiveKeywordFiltersCacheKey)(); return i.useMemo(() => null != e.customRenderedContent ? e.customRenderedContent : e.isUnsupported ? { content: u.default.Messages.MESSAGE_UNSUPPORTED, hasSpoilerEmbeds: !1 } : e.isCommandType() && 0 === e.content.length || e.hasFlag(l.MessageFlags.LOADING) ? (0, o.default)(e) : e.type === l.MessageTypes.CHANGELOG ? (0, a.renderChangelogMessageMarkup)(e, d, { track: (e, t) => { s.default.track(e, t) } }) : (0, a.default)(e, { hideSimpleEmbedContent: n, formatInline: _, noStyleAndInteraction: c, isInteracting: E, allowHeading: I, allowList: T, allowLinks: f, allowSubtext: h, allowDevLinks: S, previewLinkTarget: A, shouldFilterKeywords: null != m }), [e.content, e.customRenderedContent, e.embeds, e.interaction, e.state, e.type, n, _, c, E, I, T, f, A, h, m]) } }, 761910: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("114484"); function s(e) { return { content: (0, i.jsx)(r.default, { message: e }), hasSpoilerEmbeds: !1 } } }, 558921: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MIDJOURNEY_BOT_ID: function() { return r }, MIDJOURNEY_GUILD_ID: function() { return i } }); let i = "662267976984297473", r = "936929561302675456" }, 369274: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForMidjourneyOnboarding: function() { return r } }); var i = n("395322"); function r(e) { let { enabled: t } = i.MidjourneyOnboardingExperiment.getCurrentConfig({ location: e }); return t } }, 395322: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MidjourneyOnboardingExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-11_midjourney_onboarding", label: "Midjourney Onboarding", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables the accelerated Midjourney Onboarding & Discord experience for the user.", config: { enabled: !0 } }] }) }, 175255: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("336197"), s = n("341298"), a = n("558921"), o = n("981631"); class l extends i.default { async handleChannelCreate(e) { let { channel: t } = e; (0, s.isEligibleForMidjourneyRedirect)(t) && (await (0, s.hasRedirectedToGuild)(a.MIDJOURNEY_GUILD_ID), (0, r.default)(o.Routes.CHANNEL(null, t.id))) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_CREATE: this.handleChannelCreate }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new l }, 341298: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hasRedirectedToGuild: function() { return u }, isEligibleForMidjourneyRedirect: function() { return l }, isMidjourneyOnboardingFlow: function() { return o } }), n("442837"); var i = n("430824"), r = n("914010"), s = n("369274"), a = n("558921"); function o(e) { let { guildStore: t } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = null != t ? t : i.default, r = n.getGuild(a.MIDJOURNEY_GUILD_ID), o = (null == r ? void 0 : r.joinedAt) instanceof Date && Date.now() - r.joinedAt.getTime() <= 36e5; return 1 === n.getGuildCount() && o && (0, s.isEligibleForMidjourneyOnboarding)(e) } function l(e) { return e.isDM() && 1 === e.rawRecipients.length && e.rawRecipients[0].id === a.MIDJOURNEY_BOT_ID && o("app") } function u(e) { return new Promise((t, n) => { if (r.default.getGuildId() === e) { t(); return } let i = setTimeout(() => { a(), n() }, 3e3), s = () => { r.default.getGuildId() === e && (a(), t()) }, a = () => { r.default.removeChangeListener(s), clearTimeout(i) }; r.default.addChangeListener(s) }) } }, 250471: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isMetricsEndpointV2Enabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_metrics_endpoint_v2", label: "Metrics V2 Endpoint Rollout", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables sending metrics to the v2 endpoint which accepts a new data format", config: { enabled: !0 } }] }); function r(e) { let { enabled: t } = i.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); return t } }, 797614: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s = n("404097"), a = n("544891"), o = n("358085"), l = n("747268"), u = n("250471"), d = n("20186"), _ = n("981631"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = new Set(["darwin", "linux", "win32", "ios", "android"]); (r = i || (i = {})).COUNT = "count", r.DISTRIBUTION = "distribution"; t.default = new class e { _getMetricWithDefaults(e, t) { let { name: n, tags: i } = e, r = { name: n, type: t, tags: (0, d.getGlobalTagsArray)() }; null != i && i.forEach(e => { r.tags.push(e) }); let a = function() { if ((0, o.isWeb)()) return "web"; { let e = (0, o.getPlatformName)(); return E.has(e) ? e : null } }(); null != a && r.tags.push("platform:".concat(a)); let u = function() { let e = l.CurrentReleaseChannel; return null != e && s.ReleaseChannelsSets.ALL.has(e) ? e : null }(); return null != u && r.tags.push("release_channel:".concat(u)), r } increment(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = this._getMetricWithDefaults(e, "count"); this._metrics.push(n), (t || this._metrics.length >= 100) && this._flush() } distribution(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (!(0, u.isMetricsEndpointV2Enabled)("distribution-metric")) return; let i = { ...this._getMetricWithDefaults(e, "distribution"), value: t }; this._metrics.push(i), (n || this._metrics.length >= 100) && this._flush() } _flush() { if (this._metrics.length > 0) { let e = [...this._metrics]; a.HTTP.post({ url: (0, u.isMetricsEndpointV2Enabled)("monitoring-agent") ? _.Endpoints.METRICS_V2 : _.Endpoints.METRICS, body: { metrics: e, client_info: { built_at: "1717270897100", build_number: "298246" } }, retries: 1 }).catch(t => { this._metrics.length + e.length < 100 && (this._metrics = [...this._metrics, ...e]) }) } this._metrics = [] } constructor() { c(this, "_metrics", void 0), c(this, "_intervalId", void 0), this._metrics = [], this._intervalId = setInterval(() => { this._flush() }, 12e4) } } }, 20186: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addGlobalTag: function() { return r }, getGlobalTagsArray: function() { return s } }); let i = {}; function r(e, t) { i[e] = t } function s() { return Object.keys(i).map(e => "".concat(e, ":").concat(i[e])) } }, 798077: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_ACCOUNTS: function() { return i }, MULTIACCOUNT_TOOLTIP_SEEN_KEY: function() { return s }, SWITCH_ACCOUNTS_MODAL_KEY: function() { return r } }); let i = 5, r = "switch-accounts-modal", s = "multiaccount_cta_tooltip_seen" }, 302155: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { default: function() { return E } }); var s = n("213919"), a = n("570140"), o = n("147913"), l = n("594174"), u = n("626135"), d = n("726745"), _ = n("981631"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class E extends o.default { _initialize() { a.default.subscribe("CONNECTION_OPEN", () => this.handleConnectionOpen()), this.handleConnectionOpen() } _terminate() { a.default.unsubscribe("CONNECTION_OPEN", () => this.handleConnectionOpen()) } constructor({ onSwitchStart: e, onSwitchSuccess: t, onSwitchError: n, onTokenSet: a }) { super(), c(this, "onSwitchStart", void 0), c(this, "onSwitchSuccess", void 0), c(this, "onSwitchError", void 0), c(this, "onTokenSet", void 0), c(this, "actions", { LOGOUT: e => this.handleLogout(e) }), c(this, "handleConnectionOpen", () => { var e, t, n; let a = l.default.getCurrentUser(); if (null == a) return; if (null != r) { if (r !== i) { let e = d.default.getUsers().map(e => { let { id: t } = e; return t }); u.default.track(_.AnalyticEvents.MULTI_ACCOUNT_SWITCH_SUCCESS, { from_user_id: r, linked_user_ids: e }), null === (t = this.onSwitchSuccess) || void 0 === t || t.call(this, a) } else u.default.track(_.AnalyticEvents.MULTI_ACCOUNT_SWITCH_FAILURE), null === (n = this.onSwitchError) || void 0 === n || n.call(this, a); r = null } i = a.id; let o = s.getToken(); null != o && "" !== o && s.setToken(o, a.id), null === (e = this.onTokenSet) || void 0 === e || e.call(this, a) }), c(this, "handleLogout", e => { if (e.isSwitchingAccount) { var t; r = i, null === (t = this.onSwitchStart) || void 0 === t || t.call(this) } else s.removeToken(i); i = null }), this.onSwitchStart = e, this.onSwitchSuccess = t, this.onSwitchError = n, this.onTokenSet = a } } }, 988965: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MultiAccountMobileNotificationsExperiment: function() { return r } }); var i = n("818083"); (0, i.createExperiment)({ kind: "user", id: "2022-09_mobile_account_switcher", label: "Mobile Account Switcher", defaultConfig: { isMultiAccountMobileEnabled: !1, clearCanUseMultiAccountMobile: !1 }, treatments: [{ id: 1, label: "Enable Account Switcher on Mobile", config: { isMultiAccountMobileEnabled: !0, clearCanUseMultiAccountMobile: !1 } }, { id: 2, label: "Unenroll Account Switcher on Mobile and Clear Local Flag", config: { isMultiAccountMobileEnabled: !1, clearCanUseMultiAccountMobile: !0 } }] }); let r = (0, i.createExperiment)({ kind: "user", id: "2022-11_mobile_account_switcher_notifications", label: "Mobile Account Switcher: Notifications", defaultConfig: { isMultiAccountMobileNotificationsEnabled: !1 }, treatments: [{ id: 1, label: "Enable notifications for multiple accounts", config: { isMultiAccountMobileNotificationsEnabled: !0 } }] }) }, 726745: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { MultiAccountTokenStatus: function() { return s } }), n("653041"); var s, a, o, l = n("213919"), u = n("442837"), d = n("570140"), _ = n("990492"), c = n("988965"), E = n("798077"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(o = s || (s = {}))[o.INVALID = 0] = "INVALID", o[o.VALIDATING = 1] = "VALIDATING", o[o.VALID = 2] = "VALID"; let T = [], f = !1; function S(e) { T = T.filter(t => { let { id: n } = t; return n !== e }), l.removeToken(e) } function h(e, t) { let n = T.slice(), i = n.find(t => { let { id: n } = t; return n === e }); null != i && (i.tokenStatus = t, T = n) } class A extends(a = u.default.PersistedStore) { initialize(e) { if (null != e) { var t; T = null !== (t = e.users) && void 0 !== t ? t : [], r = e.canUseMultiAccountMobile } } getCanUseMultiAccountMobile() { return r } getState() { return { users: T, canUseMultiAccountMobile: r } } getUsers() { return T } getValidUsers() { return T.filter(e => { let { tokenStatus: t } = e; return 0 !== t }) } getHasLoggedInAccounts() { return T.length > 0 } getIsValidatingUsers() { return T.some(e => { let { tokenStatus: t } = e; return 1 === t }) } get canUseMultiAccountNotifications() { return this.getCanUseMultiAccountMobile() && c.MultiAccountMobileNotificationsExperiment.getCurrentConfig({ location: "09e468_1" }, { autoTrackExposure: !1 }).isMultiAccountMobileNotificationsEnabled } get isSwitchingAccount() { return f } } I(A, "displayName", "MultiAccountStore"), I(A, "persistKey", "MultiAccountStore"), I(A, "migrations", [e => { if (null != e) { var t; return { users: null !== (t = e.users) && void 0 !== t ? t : [], canUseMultiAccountMobile: !1 } } return { users: [], canUseMultiAccountMobile: !1 } }]), t.default = new A(d.default, { CONNECTION_OPEN: function(e) { let { user: t } = e; i = t.id, f = !1; let n = T.slice(), r = n.findIndex(e => { let { id: n } = e; return n === t.id }); r > -1 ? (T[r].avatar = t.avatar, T[r].username = t.username, T[r].discriminator = t.discriminator, T[r].tokenStatus = 2) : n.push({ id: t.id, avatar: t.avatar, username: t.username, discriminator: t.discriminator, tokenStatus: 2, pushSyncToken: null }), (T = n).length > E.MAX_ACCOUNTS && T.splice(E.MAX_ACCOUNTS).forEach(e => { let { id: t } = e; S(t) }) }, LOGOUT: function(e) { f = !!e.isSwitchingAccount, !e.isSwitchingAccount && (T = T.filter(e => { let { id: t } = e; return t !== i })), i = null }, MULTI_ACCOUNT_VALIDATE_TOKEN_REQUEST: e => h(e.userId, 1), MULTI_ACCOUNT_VALIDATE_TOKEN_SUCCESS: e => h(e.userId, 2), MULTI_ACCOUNT_VALIDATE_TOKEN_FAILURE: e => h(e.userId, 0), MULTI_ACCOUNT_REMOVE_ACCOUNT: e => S(e.userId), MULTI_ACCOUNT_MOVE_ACCOUNT: function(e) { let { from: t, to: n } = e; T = (0, _.moveItemFromTo)(T, t, n) }, CURRENT_USER_UPDATE: function(e) { let { user: t } = e, n = T.slice(), i = n.find(e => { let { id: n } = e; return n === t.id }); null != i && (i.avatar = t.avatar, i.username = t.username, i.discriminator = t.discriminator, T = n) }, MULTI_ACCOUNT_MOBILE_EXPERIMENT_UPDATE: function(e) { let { multiAccountMobileExperimentEnabled: t } = e; r = t }, MULTI_ACCOUNT_UPDATE_PUSH_SYNC_TOKEN: function(e) { let { userId: t, pushSyncToken: n } = e; T = T.map(e => e.id === t ? { ...e, pushSyncToken: n } : e) }, MULTI_ACCOUNT_INVALIDATE_PUSH_SYNC_TOKENS: function(e) { let { invalidPushSyncTokens: t } = e; T = T.map(e => null != e.pushSyncToken && t.includes(e.pushSyncToken) ? { ...e, pushSyncToken: null } : e) } }) }, 246133: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("381499"), r = n("601992"), s = n("675478"), a = n("885110"), o = n("626135"), l = n("981631"); async function u(e, t, n, u) { null == t && (t = a.default.getStatus()), await s.PreloadedUserSettingsActionCreators.updateAsync("status", t => { t.status = i.StringValue.create({ value: e }), t.statusExpiresAtMs = null != u ? "".concat(Date.now() + u) : "0" }, s.UserSettingsDelay.INFREQUENT_USER_ACTION); let d = { next_status: e, prev_status: t, ...r.default.getGlobalStats() }; null != n && (d = { ...d, ...n, expire_duration_minutes: null != u ? u / 1e3 : null }), o.default.track(l.AnalyticEvents.USER_STATUS_UPDATED, d) } }, 1627: function(e, t, n) { "use strict"; n.r(t); var i = n("481060"), r = n("375964"), s = n("302155"), a = n("798077"), o = n("689938"); t.default = new s.default({ onSwitchSuccess(e) { setTimeout(() => { (0, i.showToast)((0, i.createToast)(o.default.Messages.SWITCH_ACCOUNTS_TOAST_LOGIN_SUCCESS.format({ username: e.username }), i.ToastType.SUCCESS)) }, 100) }, onSwitchError() { (0, i.showToast)((0, i.createToast)(r.SWITCH_ACCOUNTS_TOAST_LOGIN_ERROR, i.ToastType.FAILURE)) }, onTokenSet() { (0, i.closeModal)(a.SWITCH_ACCOUNTS_MODAL_KEY) } }) }, 725140: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("579806"), s = n("246946"); let a = !1; function o() { var e; let t = null === r.default || void 0 === r.default ? void 0 : null === (e = r.default.window) || void 0 === e ? void 0 : e.setContentProtection; if (null == t) return; let n = s.default.enableContentProtection; n !== a && (t(n), a = n) } class l extends i.default { constructor() { var e, t, n; o(), super(), e = this, t = "stores", n = new Map().set(s.default, o), t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } t.default = new l }, 823967: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"); t.default = class e { static setPermission(e, t) { i.default.dispatch({ type: "SET_NATIVE_PERMISSION", permissionType: e, state: t }) } } }, 58406: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NativePermissionBaseUtils: function() { return u } }), n("411104"); var i = n("626135"), r = n("823967"), s = n("281058"), a = n("761274"), o = n("981631"), l = n("689938"); class u { async requestAuthorization(e, t, n) { if ("function" != typeof t) throw Error("requestAuthorization: Was provided with not a function for ".concat(e, ".")); i.default.track(o.AnalyticEvents.PERMISSIONS_REQUESTED, { type: e }); let s = await t() === a.NativePermissionStatus.AUTHORIZED, l = s ? a.NativePermissionStates.ACCEPTED : a.NativePermissionStates.DENIED; return r.default.setPermission(e, l), !s && n.showAuthorizationError && this.showAlert(e), s } requestPermission(e, t) { let n = u.defaultNativePermissionsRequestOptions(t); return this.requestPermissionCore(e, n) } hasPermission(e, t) { let n = u.defaultNativePermissionsRequestOptions(t); return this.hasPermissionCore(e, n) } showAlert(e) { let t = { [a.NativePermissionTypes.CAMERA]: "".concat(l.default.Messages.NO_CAMERA_ACCESS, ". ").concat(l.default.Messages.ENABLE_PRIVACY_ACCESS), [a.NativePermissionTypes.AUDIO]: "".concat(l.default.Messages.NO_MICRPHONE_ACCESS, ". ").concat(l.default.Messages.ENABLE_PRIVACY_ACCESS), [a.NativePermissionTypes.PHOTOS]: "".concat(l.default.Messages.NO_PHOTOS_ACCESS, ". ").concat(l.default.Messages.ENABLE_PRIVACY_ACCESS), [a.NativePermissionTypes.INPUT_MONITORING]: "".concat(l.default.Messages.NO_INPUT_MONITORING_ACCESS, ". ").concat(l.default.Messages.ENABLE_PRIVACY_ACCESS), [a.NativePermissionTypes.CONTACTS]: "".concat(l.default.Messages.NO_CONTACTS_ACCESS, ". ").concat(l.default.Messages.ENABLE_PRIVACY_ACCESS) } [e]; null != t && this.openAlertModal({ title: l.default.Messages.SYSTEM_PERMISSION_GRANT, body: t, onConfirm: () => this.openSettings(e), cancelText: l.default.Messages.CANCEL, confirmText: l.default.Messages.DEVICE_SETTINGS }) } static defaultNativePermissionsRequestOptions(e) { let t = { showAuthorizationError: !0 }; return null == e ? t : { ...t, ...e } } constructor() { var e, t, n; e = this, t = "storage", n = new s.default, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 761274: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { NativePermissionStates: function() { return r }, NativePermissionStatus: function() { return i }, NativePermissionTypes: function() { return s } }), (o = i || (i = {})).AUTHORIZED = "authorized", o.DENIED = "denied", o.RESTRICTED = "restricted", o.UNDETERMINED = "undetermined", (l = r || (r = {})).DISMISSED = "dismissed", l.DENIED = "denied", l.ACCEPTED = "accepted", l.NO_DEVICES = "no_devices", l.ERROR = "error", l.NONE = "none", (u = s || (s = {})).AUDIO = "audio", u.CAMERA = "camera", u.STORAGE = "storage", u.NOTIFICATIONS = "notifications", u.PHOTOS = "photos", u.CONTACTS = "contacts", u.INPUT_MONITORING = "input_monitoring", u.SCREEN_RECORDING = "screen_recording", (d = a || (a = {}))[d.UNDETERMINED = 0] = "UNDETERMINED", d[d.DENIED = 1] = "DENIED", d[d.AUTHORIZED = 2] = "AUTHORIZED", d[d.PROVISIONAL = 3] = "PROVISIONAL", d[d.EPHEMERAL = 4] = "EPHEMERAL" }, 865033: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"), r = n("317770"), s = n("358085"), a = n("374023"), o = n("761274"), l = n("981631"); class u extends r.default { isEnabled() { return (0, s.isDesktop)() && (0, s.isMac)() && !a.ProcessArgs.isDiscordTestSet() } _initialize() { this.isEnabled() && i.default.subscribe("AUDIO_SET_MODE", this.handleAudioSetMode) } _terminate() { this.isEnabled() && i.default.unsubscribe("AUDIO_SET_MODE", this.handleAudioSetMode) } handleAudioSetMode(e) { let { mode: t } = e; t === l.InputModes.PUSH_TO_TALK && n("751571").default.requestPermission(o.NativePermissionTypes.INPUT_MONITORING) } } t.default = new u }, 281058: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("626135"), o = n("761274"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = { permissionStates: {} }; class _ extends(i = r.default.DeviceSettingsStore) { initialize(e) { d = null != e ? e : d } getUserAgnosticState() { return d } hasPermission(e) { let t = d.permissionStates[e]; return null != t && t === o.NativePermissionStates.ACCEPTED } handleSetNativePermission(e) { let { state: t, permissionType: n } = e, i = d.permissionStates, r = i[n]; i[n] = t, r !== t && a.default.track(l.AnalyticEvents.PERMISSIONS_ACKED, { type: n, action: t, previous_action: null != r ? r : o.NativePermissionStates.NONE }) } constructor() { super(s.default, { SET_NATIVE_PERMISSION: e => this.handleSetNativePermission(e) }) } } u(_, "displayName", "NativePermissionStore"), u(_, "persistKey", "NativePermissionsStore"), t.default = _ }, 903387: function(e, t, n) { "use strict"; n.r(t); var i = n("58406"); class r extends i.NativePermissionBaseUtils { requestPermissionCore(e, t) { return Promise.resolve(!0) } hasPermissionCore(e, t) { return Promise.resolve(!0) } openSettings(e) {} didHavePermission(e) { return !0 } openAlertModal(e) {} } t.default = new r }, 751571: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { NativePermissionsRequestOptions: function() { return o.NativePermissionsRequestOptions } }); var r = n("358085"), s = n("374023"), a = n("865033"), o = n("58406"); a.default.initialize(), i = s.ProcessArgs.isDiscordTestSet() ? n("903387").default : (0, r.isDesktop)() ? n("716546").default : n("903387").default, t.default = i }, 716546: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("668781"), r = n("998502"), s = n("58406"), a = n("761274"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class l extends s.NativePermissionBaseUtils { requestPermissionCore(e, t) { var n; return this.asyncify(null === (n = this.nativeUtils) || void 0 === n ? void 0 : n.nativePermssionRequestAuthorization, e, t) } hasPermissionCore(e, t) { var n; return this.asyncify(null === (n = this.nativeUtils) || void 0 === n ? void 0 : n.nativePermssionHasAuthorization, e, t) } asyncify(e, t, n) { let i = l.requestTypeLookup[t]; return void 0 === i ? Promise.resolve(!0) : this.requestAuthorization(t, () => null == e ? Promise.resolve(a.NativePermissionStatus.AUTHORIZED) : new Promise((t, n) => e(t, i)), n) } openSettings(e) { var t; if ((null === (t = this.nativeUtils) || void 0 === t ? void 0 : t.nativePermissionOpenSettings) == null) return; let n = l.requestTypeLookup[e]; void 0 !== n && this.nativeUtils.nativePermissionOpenSettings(n) } didHavePermission(e) { return this.storage.hasPermission(e) } openAlertModal(e) { let { title: t, body: n, onConfirm: r, cancelText: s, confirmText: a } = e; i.default.show({ title: t, body: n, onConfirm: r, cancelText: s, confirmText: a }) } constructor(...e) { super(...e), o(this, "nativeUtils", r.default.getDiscordUtils()) } } o(l, "requestTypeLookup", { [a.NativePermissionTypes.CAMERA]: r.NativePermissionRequestType.Camera, [a.NativePermissionTypes.AUDIO]: r.NativePermissionRequestType.Microphone, [a.NativePermissionTypes.PHOTOS]: r.NativePermissionRequestType.Photo, [a.NativePermissionTypes.INPUT_MONITORING]: r.NativePermissionRequestType.InputMonitoring, [a.NativePermissionTypes.SCREEN_RECORDING]: r.NativePermissionRequestType.ScreenRecording }), t.default = new l }, 873741: function(e, t, n) { "use strict"; function i() { return !1 } function r() { return null } n.r(t), n.d(t, { getSignalStrength: function() { return r }, isSlowNetwork: function() { return i } }) }, 360629: function(e, t, n) { "use strict"; n.r(t), n.d(t, { inDesktopNotificationCenterExperiment: function() { return a }, useInDesktopNotificationCenterExperiment: function() { return s } }); var i = n("470079"); let r = (0, n("818083").createExperiment)({ kind: "user", id: "2022-11_desktop_notification_center", label: "Desktop notification center", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Notification center desktop enabled", config: { enabled: !0 } }] }), s = () => { let { enabled: e } = r.useExperiment({ location: "b8976e_1" }, { autoTrackExposure: !1 }); return i.useEffect(() => { r.trackExposure({ location: "b8976e_2" }) }, []), e }, a = () => { let { enabled: e } = r.getCurrentConfig({ location: "b8976e_3" }, { autoTrackExposure: !1 }); return e } }, 140155: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r = n("442837"), s = n("570140"), a = n("924301"); n("57132"); var o = n("786761"), l = n("23750"), u = n("594174"), d = n("709054"), _ = n("497089"), c = n("178480"), E = n("981631"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let T = { loading: !1, initialized: !1, errored: !1, isDataStale: !1, notifCenterItems: [], staleNotifCenterItems: [], notifCenterIds: new Set, notifCenterLocalItems: [], paginationHasMore: !0, paginationCursor: void 0, notifCenterActive: !1, notifCenterTabFocused: !1 }; function f(e) { return null != e.id && null != e.type } function S() { T = { loading: !1, initialized: !1, errored: !1, isDataStale: !1, notifCenterItems: [], staleNotifCenterItems: [], notifCenterIds: new Set, notifCenterLocalItems: [], paginationHasMore: !0, paginationCursor: void 0, notifCenterActive: !1, notifCenterTabFocused: !1 } } function h(e) { return { ...e, kind: "notification-center-item", message: null != e.message ? (0, o.createMessageRecord)(e.message) : void 0 } } function A(e) { let t = "NOTIFICATION_CENTER_ITEM_CREATE" === e.type ? h(e.item) : e.item; if (!T.initialized || !f(t) || T.notifCenterIds.has(t.id)) return !1; T.notifCenterIds.add(t.id), T.notifCenterItems = [t, ...T.notifCenterItems], T.notifCenterItems.sort((e, t) => d.default.compare(t.id, e.id)) } function m(e, t) { T.notifCenterItems = T.notifCenterItems.map(n => e.includes(n.id) ? { ...n, acked: t } : n).filter(f) } function N(e, t, n) { var i; return e.type === t && (null === (i = e.other_user) || void 0 === i ? void 0 : i.id) === n } function p(e) { (0, a.isGuildEventEnded)(e) && (T.notifCenterItems = T.notifCenterItems.map(t => t.type === _.NotificationCenterItems.GUILD_SCHEDULED_EVENT_STARTED && t.guild_scheduled_event_id === e.id ? { ...t, disable_action: !0 } : t)) } class O extends(i = r.default.PersistedStore) { initialize(e) { if (this.waitFor(u.default), null != e) { let t = e.notifCenterItems.map(e => ({ ...e, message: null != e.message ? new l.default(e.message) : void 0 })); t.length > 0 && (T = { ...T, initialized: !0, isDataStale: !0, notifCenterItems: [], staleNotifCenterItems: t }) } } getState() { let e = e => ({ ...e, message: null != e.message ? e.message.toJS() : void 0 }); return { ...T, notifCenterItems: T.notifCenterItems.map(e), staleNotifCenterItems: T.staleNotifCenterItems.map(e) } } get loading() { return T.loading } get initialized() { return T.initialized } get items() { return T.isDataStale ? T.staleNotifCenterItems : T.notifCenterItems } get hasMore() { return T.paginationHasMore } get cursor() { return T.paginationCursor } get errored() { return T.errored } get active() { return T.notifCenterActive } get localItems() { return T.notifCenterLocalItems } get tabFocused() { return T.notifCenterTabFocused } } I(O, "displayName", "NotificationCenterItemsStore"), I(O, "persistKey", "NotificationCenterItemsStore_v2"); let C = new O(s.default, { CONNECTION_OPEN: function(e) { S(); let t = []; e.relationships.forEach(e => { let { type: n, user: i, since: r } = e; if (n !== E.RelationshipTypes.PENDING_INCOMING || null == i || null == r) return null; let s = u.default.getUser(i.id); if (null == s) return null; t.push((0, c.incomingFriendRequestLocalItem)(s, r)) }), e.guilds.forEach(e => { e.guild_scheduled_events.forEach(e => { p(e) }) }), T.notifCenterLocalItems = t }, LOGOUT: S, NOTIFICATION_CENTER_ITEMS_ACK: function(e) { let { ids: t } = e; m(t, !0) }, NOTIFICATION_CENTER_ITEMS_ACK_FAILURE: function(e) { let { ids: t } = e; m(t, !1) }, GUILD_SCHEDULED_EVENT_UPDATE: function(e) { let { guildScheduledEvent: t } = e; p(t) }, NOTIFICATION_CENTER_ITEM_CREATE: A, NOTIFICATION_CENTER_ITEM_DELETE: function(e) { let { id: t } = e; if (!T.notifCenterIds.has(t)) return !1; T.notifCenterIds.delete(t), T.notifCenterItems = T.notifCenterItems.filter(e => e.id !== t) }, NOTIFICATION_CENTER_ITEM_DELETE_FAILURE: A, LOAD_NOTIFICATION_CENTER_ITEMS: function() { T.loading = !0 }, LOAD_NOTIFICATION_CENTER_ITEMS_FAILURE: function() { T.loading = !1, T.initialized = !0, T.errored = !0 }, LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS: function(e) { let { items: t, hasMore: n, cursor: i } = e; T.loading && (T.loading = !1, T.initialized = !0, T.errored = !1, T.isDataStale = !1, (null == i || !T.notifCenterIds.has(i)) && (T.paginationHasMore = t.length > 0 && n, T.paginationCursor = t.length > 0 ? i : void 0), T.notifCenterItems = [...T.notifCenterItems, ...t.map(h).filter(e => !T.notifCenterIds.has(e.id))], T.notifCenterItems.sort((e, t) => d.default.compare(t.id, e.id)), t.forEach(e => T.notifCenterIds.add(e.id))) }, RESET_NOTIFICATION_CENTER: S, NOTIFICATION_CENTER_SET_ACTIVE: function(e) { let { active: t } = e; T.notifCenterActive = t }, NOTIFICATION_CENTER_TAB_FOCUSED: function(e) { let { focused: t } = e; T.notifCenterTabFocused = t }, RELATIONSHIP_ADD: function(e) { if (e.relationship.type === E.RelationshipTypes.PENDING_INCOMING) { let { user: t, since: n } = e.relationship; if (null == n) return null; let i = u.default.getUser(t.id); if (null == i) return null; T.notifCenterLocalItems = [...T.notifCenterLocalItems, (0, c.incomingFriendRequestLocalItem)(i, n)] } e.relationship.type === E.RelationshipTypes.FRIEND && (T.notifCenterLocalItems = T.notifCenterLocalItems.map(t => N(t, _.NotificationCenterLocalItems.INCOMING_FRIEND_REQUESTS, e.relationship.user.id) ? { ...t, acked: !0, forceUnacked: !1, local_id: "incoming_friend_requests_accepted_".concat(e.relationship.user.id, "_").concat(t.id), type: _.NotificationCenterLocalItems.INCOMING_FRIEND_REQUESTS_ACCEPTED } : t)), e.relationship.type === E.RelationshipTypes.BLOCKED && (T.notifCenterLocalItems = T.notifCenterLocalItems.filter(t => !N(t, _.NotificationCenterLocalItems.INCOMING_FRIEND_REQUESTS, e.relationship.id) && !N(t, _.NotificationCenterLocalItems.INCOMING_FRIEND_REQUESTS_ACCEPTED, e.relationship.id))) }, RELATIONSHIP_REMOVE: function(e) { T.notifCenterLocalItems = T.notifCenterLocalItems.filter(t => !N(t, _.NotificationCenterLocalItems.INCOMING_FRIEND_REQUESTS, e.relationship.id) && !N(t, _.NotificationCenterLocalItems.INCOMING_FRIEND_REQUESTS_ACCEPTED, e.relationship.id)) }, NOTIFICATION_CENTER_ITEM_COMPLETED: function(e) { let { item_enum: t } = e; T.notifCenterItems = T.notifCenterItems.map(e => e.item_enum === t ? { ...e, completed: !0, acked: !0 } : e).filter(f) }, SET_RECENT_MENTIONS_FILTER: S, MOBILE_NATIVE_UPDATE_CHECK_FINISHED: function(e) { let { newBuild: t } = e; if (null !== t) { let e = (0, c.mobileNativeUpdateAvailableLocalItem)(t); void 0 === T.notifCenterLocalItems.find(t => t.local_id === e.local_id) && (T.notifCenterLocalItems = [...T.notifCenterLocalItems.filter(t => t.kind !== e.kind), e]) } } }); t.default = C }, 497089: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d, _, c, E; n.r(t), n.d(t, { ItemEnum: function() { return r }, NotificationCenterActionTypes: function() { return s }, NotificationCenterItems: function() { return o }, NotificationCenterLocalItems: function() { return l }, NotificationCenterTabs: function() { return a } }), (i || (i = {})).LANDING = "notification_center_landing", (u = r || (r = {}))[u.UPDATE_PROFILE = 0] = "UPDATE_PROFILE", u[u.FIND_FRIENDS = 1] = "FIND_FRIENDS", u[u.ADD_FRIEND = 2] = "ADD_FRIEND", u[u.FIRST_MESSAGE = 3] = "FIRST_MESSAGE", (d = s || (s = {})).MARK_ALL_READ = "mark_all_read", d.CLICKED = "clicked", d.FRIEND_REQUESTS_BUTTON_CLICK = "friend_requests_button_click", d.ACTION_BUTTON = "action_button", (_ = a || (a = {})).ForYou = "ForYou", _.Mentions = "Mentions", _.MessageReminders = "MessageReminders", (c = o || (o = {})).GO_LIVE_PUSH = "go_live_push", c.FRIEND_REQUEST_ACCEPTED = "friend_request_accepted", c.FRIEND_REQUEST_PENDING = "friend_request_pending", c.FRIEND_SUGGESTION_CREATED = "friend_suggestion_created", c.FRIEND_REQUEST_REMINDER = "friend_request_reminder", c.DM_FRIEND_NUDGE = "dm_friend_nudge", c.RECENT_MENTION = "recent_mention", c.REPLY_MENTION = "reply_mention", c.GUILD_SCHEDULED_EVENT_STARTED = "scheduled_guild_event_started", c.SYSTEM_DEMO = "system_demo", c.MISSED_MESSAGES = "missed_messages", c.TOP_MESSAGES = "top_messages", c.LIFECYCLE_ITEM = "lifecycle_item", c.TRENDING_CONTENT = "trending_content", (E = l || (l = {})).INCOMING_FRIEND_REQUESTS = "INCOMING_FRIEND_REQUESTS", E.INCOMING_FRIEND_REQUESTS_ACCEPTED = "INCOMING_FRIEND_REQUESTS_ACCEPTED", E.FRIEND_REQUESTS_GROUPED = "FRIEND_REQUESTS_GROUPED", E.MOBILE_NATIVE_UPDATE_AVAILABLE = "MOBILE_NATIVE_UPDATE_AVAILABLE" }, 178480: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getRelativeTimestamp: function() { return l }, inNotificationCenterEnabled: function() { return E }, incomingFriendRequestLocalItem: function() { return d }, isMentionItem: function() { return c }, isRemoteAcked: function() { return u }, mobileNativeUpdateAvailableLocalItem: function() { return _ } }); var i = n("695346"), r = n("709054"), s = n("360629"), a = n("497089"), o = n("925928"); let l = function(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return (0, o.default)({ since: e, getFormatter: t ? o.getAbbreviatedFormatter : o.getFullFormatter }) }, u = (e, t) => e.acked || t !== i.NOTIFICATION_CENTER_ACKED_BEFORE_ID_UNSET && r.default.compare(t, e.id) >= 0; function d(e, t) { let n = r.default.fromTimestamp(new Date(t).getTime()); return { acked: !1, forceUnacked: !0, other_user: e, kind: "notification-center-item", local_id: "incoming_friend_requests_".concat(e.id, "_").concat(n), deeplink: "https://discord.com/users/".concat(e.id), type: a.NotificationCenterLocalItems.INCOMING_FRIEND_REQUESTS, id: n } } function _(e) { return { acked: !1, enableBadge: !0, id: r.default.fromTimestamp(new Date().getTime()), kind: "notification-center-item", local_id: "mobile_update_available_".concat(e.build), type: a.NotificationCenterLocalItems.MOBILE_NATIVE_UPDATE_AVAILABLE, deeplink: e.urls.install.toString() } } let c = e => e.type === a.NotificationCenterItems.RECENT_MENTION || e.type === a.NotificationCenterItems.REPLY_MENTION; function E() { return (0, s.inDesktopNotificationCenterExperiment)() } }, 925928: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c }, getAbbreviatedFormatter: function() { return d }, getFullFormatter: function() { return _ } }); var i = n("913527"), r = n.n(i), s = n("689938"); let a = 3600, o = 86400, l = 2592e3, u = 31104e3, d = () => ({ minutes: s.default.Messages.DURATION_MINUTES_SHORT, hours: s.default.Messages.DURATION_HOURS_SHORT, days: s.default.Messages.DURATION_DAYS_SHORT, months: s.default.Messages.DURATION_MONTHS_SHORT, years: s.default.Messages.DURATION_YEARS_SHORT }), _ = () => ({ minutes: s.default.Messages.DURATION_MINUTES_AGO, hours: s.default.Messages.DURATION_HOURS_AGO, days: s.default.Messages.DURATION_DAYS_AGO, months: s.default.Messages.DURATION_MONTHS_AGO, years: s.default.Messages.DURATION_YEARS_AGO }); function c(e) { let { since: t, getFormatter: n } = e; return function(e) { let { seconds: t, getFormatter: n } = e, i = n(), r = ""; return r = t < 60 ? i.minutes.format({ minutes: 1 }) : t < a ? i.minutes.format({ minutes: Math.floor(t / 60) }) : t < o ? i.hours.format({ hours: Math.floor(t / a) }) : t < l ? i.days.format({ days: Math.floor(t / o) }) : t < u ? i.months.format({ months: Math.floor(t / l) }) : i.years.format({ years: Math.floor(t / u) }) }({ seconds: r()().diff(r()(t), "s"), getFormatter: n }) } }, 734934: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setFocusMode: function() { return I }, useFocusModeEnabled: function() { return E } }); var i = n("381499"), r = n("668781"), s = n("246133"), a = n("695346"), o = n("675478"), l = n("885110"), u = n("626135"), d = n("621600"), _ = n("981631"), c = n("689938"); function E() { let e = a.FocusMode.useSetting(), t = a.FocusModeExpiresAtSetting.useSetting(); return e && ("0" === t || new Date(Number(t)).getTime() - new Date().getTime() > 0) } function I(e, t) { let n = a.FocusMode.getSetting(); o.PreloadedUserSettingsActionCreators.updateAsync("notifications", n => { n.quietMode = i.BoolValue.create({ value: e }), n.focusModeExpiresAtMs = e && null != t ? "".concat(Date.now() + t) : "0" }, o.UserSettingsDelay.INFREQUENT_USER_ACTION), u.default.track(_.AnalyticEvents.NOTIFICATION_SETTINGS_UPDATED, { update_type: d.NotificationSettingsUpdateType.ACCOUNT, quiet_mode_enabled: e, quiet_mode_enabled_old: n }), l.default.getStatus() === _.StatusTypes.DND && e && null == t && r.default.show({ title: c.default.Messages.QUIET_MODE_WHILE_DND_UPSELL_TITLE, body: c.default.Messages.QUIET_MODE_WHILE_DND_UPSELL_BODY, cancelText: c.default.Messages.NO_THANKS, confirmText: c.default.Messages.OKAY, onConfirm: () => { (0, s.default)(_.StatusTypes.ONLINE) } }) } }, 601992: function(e, t, n) { "use strict"; n.r(t), n.d(t, { trackMessageNotificationTimestamps: function() { return l } }); var i = n("442837"), r = n("570140"), s = n("271383"), a = n("9156"), o = n("594174"); function l(e, t) { var n; let i = null === (n = o.default.getCurrentUser()) || void 0 === n ? void 0 : n.id, l = a.default.isSuppressEveryoneEnabled(t), u = a.default.isSuppressRolesEnabled(t), d = null != e.mentions && e.mentions.some(e => e.id === i), _ = null == t || null == i ? null : s.default.getMember(t, i), c = null != e.mention_roles && null != _ && null != _.roles && e.mention_roles.some(e => _.roles.includes(e)); r.default.dispatch({ type: "MESSAGE_NOTIFICATION_SHOWN", guildId: t, mentioned: d, roleMentioned: c && !u, everyoneMentioned: !0 === e.mention_everyone && !l }) } let u = null, d = null, _ = null, c = null, E = {}, I = {}, T = {}, f = {}; class S extends i.default.Store { getGlobalStats() { let e = e => null == e ? null : Math.floor((Date.now() - e) / 1e3); return { approx_seconds_since_last_notification: e(u), approx_seconds_since_last_mention: e(d), approx_seconds_since_last_role_mention: e(_), approx_seconds_since_last_everyone_mention: e(c) } } getStats(e) { let t = e => null == e ? null : Math.floor((Date.now() - e) / 1e3); return { approx_seconds_since_last_notification: t(u), approx_seconds_since_last_mention: t(d), approx_seconds_since_last_role_mention: t(_), approx_seconds_since_last_everyone_mention: t(c), approx_seconds_since_last_guild_notification: null == e ? null : t(E[e]), approx_seconds_since_last_guild_mention: null == e ? null : t(I[e]), approx_seconds_since_last_guild_role_mention: null == e ? null : t(f[e]), approx_seconds_since_last_guild_everyone_mention: null == e ? null : t(T[e]) } } } t.default = new S(r.default, { CONNECTION_OPEN: function() { let e = e => null != e && Date.now() - e < 6e4; for (let t in !e(u) && (u = null), !e(d) && (d = null), !e(_) && (_ = null), !e(c) && (c = null), E) !e(E[t]) && delete E[t]; for (let t in I) !e(I[t]) && delete I[t]; for (let t in f) !e(f[t]) && delete f[t]; for (let t in T) !e(T[t]) && delete T[t] }, MESSAGE_NOTIFICATION_SHOWN: function(e) { let { guildId: t, mentioned: n, roleMentioned: i, everyoneMentioned: r } = e, s = Date.now(); u = s, null != t && (E[t] = s), n && (d = s, null != t && (I[t] = s)), i && (_ = s, null != t && (f[t] = s)), r && (c = s, null != t && (T[t] = s)) } }) }, 468788: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { AccountNotificationFlags: function() { return i } }), (r = i || (i = {}))[r.USE_NEW_NOTIFICATIONS = 16] = "USE_NEW_NOTIFICATIONS", r[r.MENTION_ON_ALL_MESSAGES = 32] = "MENTION_ON_ALL_MESSAGES" }, 223683: function(e, t, n) { "use strict"; n.r(t), n.d(t, { backupSettings: function() { return _ }, listSnapshots: function() { return o }, restoreSnapshot: function() { return u }, takeSnapshot: function() { return l } }); var i = n("392711"), r = n.n(i), s = n("544891"), a = n("981631"); async function o() { return (await s.HTTP.get(a.Endpoints.NOTIFICATION_SNAPSHOTS)).body } async function l(e) { return (await s.HTTP.post({ url: a.Endpoints.NOTIFICATION_SNAPSHOTS, body: { label: e } })).body } async function u(e) { return (await s.HTTP.post(a.Endpoints.RESTORE_NOTIFICATION_SNAPSHOT(e))).body } async function d(e) { return (await s.HTTP.del(a.Endpoints.NOTIFICATION_SNAPSHOT(e))).body } async function _(e) { if (e.length > 0) { var t; let n = r().sum(e.map(e => e.length)), i = null !== (t = r().max(e.map(e => e.length))) && void 0 !== t ? t : 0; if (e.length >= 5 || n + i > 1e6) { let t = r().sortBy(e, e => new Date(e.recorded_at).getTime()); await d(t[0].id) } } return l("Backup from ".concat(new Date().toLocaleDateString())) } }, 312400: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NewUserUnreadsEntryPointExperiment: function() { return a }, NotificationsExperiment: function() { return r }, UnreadsEntryPointExperiment: function() { return s } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2023-11_totally_benign_and_non_controversial_notification_tweaks", label: "Notification Changes", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Use the unfinished, not ready, and totally benign notification tweaks", config: { enabled: !0 } }] }), s = (0, i.createExperiment)({ kind: "user", id: "2024-01_unreads", label: "Unreads Experiment (grey-dot mode)", defaultConfig: { logExposure: !1, autoOpen: !1, manuallyOpen: !1 }, treatments: [{ id: 0, label: "Control", config: { logExposure: !0, autoOpen: !1, manuallyOpen: !1 } }, { id: 1, label: "Auto open migration", config: { logExposure: !0, autoOpen: !0, manuallyOpen: !1 } }, { id: 2, label: "Manually open migration", config: { logExposure: !1, autoOpen: !1, manuallyOpen: !0 } }] }), a = (0, i.createExperiment)({ kind: "user", id: "2024-03_unreads_new_users", label: "Unreads Experiment (grey-dot mode) (new users)", defaultConfig: { enabled: !1, logExposure: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1, logExposure: !0 } }, { id: 1, label: "Auto open migration", config: { enabled: !0, logExposure: !0 } }] }) }, 729052: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hasVoiceChannelActivityNotifsEnabled: function() { return l }, useVoiceActivityNotificationSettingsExperiment: function() { return o } }); var i = n("818083"), r = n("981631"); let s = (0, i.createExperiment)({ kind: "user", id: "2023-11_voice_activity_notification_user", label: "Voice Activity Notifications for User", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Voice Activity Notifications are enabled for user", config: { enabled: !0 } }, { id: 2, label: "Control for AA test. Voice Activity Notifications are NOT enabled for user.", config: { enabled: !1 } }] }), a = (0, i.createExperiment)({ kind: "guild", id: "2023-11_voice_activity_notification_guild", label: "General Voice Channel Notifications for Guild", defaultConfig: { voiceChannelActivityNotifsEnabled: !1 }, treatments: [{ id: 2, label: "Deadchat notifs disabled, voice channel activity notifs enabled", config: { voiceChannelActivityNotifsEnabled: !0 } }] }); function o(e) { var t; let { voiceChannelActivityNotifsEnabled: n } = a.useExperiment({ location: "useVoiceActivityNotificationSettingsExperiment", guildId: null !== (t = null == e ? void 0 : e.getGuildId()) && void 0 !== t ? t : r.EMPTY_STRING_SNOWFLAKE_ID }, { disable: (null == e ? void 0 : e.type) !== r.ChannelTypes.GUILD_VOICE, autoTrackExposure: !1 }), { enabled: i } = s.useExperiment({ location: "useVoiceActivityNotificationSettingsExperiment" }, { disable: (null == e ? void 0 : e.type) !== r.ChannelTypes.GUILD_VOICE || !n, autoTrackExposure: !0 }); return (null == e ? void 0 : e.type) === r.ChannelTypes.GUILD_VOICE && n && i } function l(e) { var t; let { voiceChannelActivityNotifsEnabled: n } = a.getCurrentConfig({ guildId: null !== (t = null == e ? void 0 : e.getGuildId()) && void 0 !== t ? t : r.EMPTY_STRING_SNOWFLAKE_ID, location: "hasVoiceChannelActivityNotifsEnabled" }); return n } }, 789662: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { Mode: function() { return i }, PainLevel: function() { return r }, defaultThresholds: function() { return o } }), (s = i || (i = {}))[s.KeepAsIs = 0] = "KeepAsIs", s[s.UseGreyDot = 1] = "UseGreyDot", (a = r || (r = {}))[a.Low = 0] = "Low", a[a.Medium = 1] = "Medium", a[a.High = 2] = "High"; let o = { careALot: { monthOpenPerc: .01, yearOpenPerc: .01, sentMessages: 1e3 }, careALittle: { monthOpenPerc: .001, yearOpenPerc: .001, sentMessages: 5, minOpens: 2 }, smallServerSize: 50, mediumServerSize: 200, frecency: { yearMinOpensSmallServer: 10, yearMinOpensLargeServer: 50, monthMinOpens: 2, totalOpensPercent: .1 } } }, 115345: function(e, t, n) { "use strict"; n.r(t), n.d(t, { autoMigrateToNewSystem: function() { return w }, hasGoodCandidateServers: function() { return G }, revertToOldSystem: function() { return H }, transformUsageData: function() { return Y }, useGuildMigrationSteps: function() { return b }, useSaveSettings: function() { return k } }), n("47120"), n("789020"), n("724458"), n("411104"); var i = n("470079"), r = n("392711"), s = n.n(r), a = n("442837"), o = n("433517"), l = n("570140"), u = n("668781"), d = n("92114"), _ = n("181945"), c = n("149071"), E = n("516373"), I = n("480294"), T = n("650774"), f = n("888369"), S = n("430824"), h = n("771845"), A = n("9156"), m = n("626135"), N = n("630388"), p = n("823379"), O = n("960048"), C = n("709054"), R = n("223683"), g = n("630114"), L = n("506712"), v = n("468788"), D = n("789662"), M = n("981631"), y = n("490897"), P = n("526761"), U = n("689938"); function b(e, t) { let [n, r] = i.useState(D.defaultThresholds), [o, l] = i.useState({}); (0, E.useFrecencySettings)(); let u = (0, a.useStateFromStoresArray)([S.default], () => Object.values(S.default.getGuilds())), d = i.useCallback(() => { let i = {}; for (let r of u) i[r.id] = function(e, t, n, i, r) { var s; let [a, o, l] = I.default.hasConsented(M.Consents.PERSONALIZATION) ? (0, L.guessGuildModeWithRemoteData)(e, t, n, i, !0) : (0, L.guessGuildModeWithLocalData)(e, n), u = null !== (s = n.filter(t => t.guild_id === e.id)[0]) && void 0 !== s ? s : {}, d = (0, g.default)(e, null != r ? r : a, u, i, t); return { guildId: e.id, mode: a, debugReason: l, actions: d, overrideMode: r, messagePain: u.messages === D.PainLevel.High, visitsALot: o, muted: A.default.isMuted(e.id) && !A.default.isTemporarilyMuted(e.id) } }(r, n, e, t, o[r.id]); return i }, [u, n, e, t, o]), [_, c] = i.useState(() => d()); return i.useEffect(() => c(d()), [d]), { guildPlans: _, overrideGuild: i.useCallback((e, t) => { l(n => ({ ...n, [e]: t })) }, []), setThresholds: r, getDebug: () => (function(e, t) { let n = t.reduce((e, t) => { var n; return e + Number(null !== (n = t.num_year_opens) && void 0 !== n ? n : 0) }, 0), i = t.reduce((e, t) => { var n; return e + Number(null !== (n = t.num_month_opens) && void 0 !== n ? n : 0) }, 0), r = h.default.getFlattenedGuildIds(), a = s().sortBy(Object.values(e), e => { let t = r.indexOf(e.guildId); return -1 === t ? r.length : t }), o = [ ["Use Grey Dot", new Set([D.Mode.UseGreyDot])], ["Keep As Is", new Set([D.Mode.KeepAsIs])] ].map(e => { let [t, n] = e, i = a.filter(e => { var t; return n.has(null !== (t = e.overrideMode) && void 0 !== t ? t : e.mode) }).map(e => { let t = S.default.getGuild(e.guildId), n = e.actions.map(e => { var t; return "- ".concat(e.label).concat(null !== (t = e.debug) && void 0 !== t ? t : "") }).join("\n"); return "### ".concat(t.name, "\n**Reasoning**: ").concat(e.debugReason, "**ActionPlan**:\n").concat(n) }); return "# ".concat(t, "\n\n").concat(i.join("\n\n")) }); return "\n# Basic Stats\n- Total channel visits (yr): ".concat(n, "\n- Total channel visits (month): ").concat(i, "\n\n").concat(o.join("\n\n")) })(Object.values(_), t) } } function G(e, t) { return Object.values(S.default.getGuilds()).some(n => { let [i] = I.default.hasConsented(M.Consents.PERSONALIZATION) ? (0, L.guessGuildModeWithRemoteData)(n, D.defaultThresholds, e, t, !1) : (0, L.guessGuildModeWithLocalData)(n, e); return i === D.Mode.UseGreyDot }) } function w() { let e = Object.values(S.default.getGuilds()), t = {}; for (let r of e) { var n, i; let e = null !== (i = (null !== (n = A.default.getAllSettings().userGuildSettings[r.id]) && void 0 !== n ? n : {}).flags) && void 0 !== i ? i : 0; e = (0, N.setFlag)(e, P.GuildNotificationSettingsFlags.UNREADS_ALL_MESSAGES, !0), e = (0, N.setFlag)(e, P.GuildNotificationSettingsFlags.UNREADS_ONLY_MENTIONS, !1), t[r.id] = { flags: e } } V(t), m.default.track(M.AnalyticEvents.NOTIFICATION_MIGRATION_COMPLETED, { auto_migrated: !0, num_unread_guids_after: e.filter(e => f.default.hasUnread(e.id)).length }) } function k(e) { let [t, n] = i.useState(!1), [r, s] = i.useState(!1), a = i.useCallback(async t => { if (r) throw Error("Already submitted notifications migration"); n(!0); try { await B(t, e), s(!0) } finally { n(!1) } }, [r, e]); return { submitting: t, submitted: r, saveSettings: a } } async function B(e, t) { if (A.default.useNewNotifications) { u.default.show({ title: "Info", body: "It looks like you are already using the new notifications system so skipping saving any changes this time because that will almost certainly mess up your account!" }); return } let n = function(e) { let t = Object.values(e).filter(e => { var t; return (null !== (t = e.overrideMode) && void 0 !== t ? t : e.mode) === D.Mode.UseGreyDot }).map(e => { var t; return { plan: e, memberCount: null !== (t = T.default.getMemberCount(e.guildId)) && void 0 !== t ? t : 0 } }), n = { num_unread_guilds_before: C.default.keys(e).filter(e => f.default.hasUnread(e)).length, unmuted_server_ids: t.filter(e => A.default.isMuted(e.plan.guildId)).map(e => e.plan.guildId) }; return () => { m.default.track(M.AnalyticEvents.NOTIFICATION_MIGRATION_COMPLETED, { ...n, auto_migrated: !0, pre_selected_server_ids: Object.values(e).filter(e => e.mode === D.Mode.UseGreyDot).map(e => e.guildId), final_selected_server_ids: t.map(e => e.plan.guildId), num_unread_guids_after: C.default.keys(e).filter(e => f.default.hasUnread(e)).length, num_tiny_servers_selected: t.filter(e => e.memberCount <= 20).length, num_small_servers_selected: t.filter(e => e.memberCount > 20 && e.memberCount <= 200).length, num_medium_servers_selected: t.filter(e => e.memberCount > 200 && e.memberCount <= 1e3).length, num_large_servers_selected: t.filter(e => e.memberCount > 1e3).length, num_quiet_servers_selected: t.filter(e => !e.plan.messagePain).length, num_busy_servers_selected: t.filter(e => e.plan.messagePain).length, num_frequent_visited_servers_selected: t.filter(e => e.plan.visitsALot).length, num_infrequent_visited_servers_selected: t.filter(e => !e.plan.visitsALot).length }) } }(e); try { let t = {}; for (let n of Object.values(e)) { var i, r; let e = null !== (i = A.default.getAllSettings().userGuildSettings[n.guildId]) && void 0 !== i ? i : {}, s = {}; for (let t of n.actions) null === (r = t.apply) || void 0 === r || r.call(t, s, e); t[n.guildId] = s } await V(t); let s = Object.values(e).filter(e => e.actions.some(e => e.needsMarkedAsRead)).map(e => e.guildId); if (s.length > 0) { let e = setTimeout(n, 5e3); (0, _.default)(s, void 0, () => { l.default.dispatch({ type: "RECOMPUTE_READ_STATES" }), clearTimeout(e), n() }) } else n() } catch (e) { O.default.captureException(e), u.default.show({ title: U.default.Messages.ERROR, body: U.default.Messages.NOTIF_MIGRATION_ERROR, onConfirm: t }) } } async function V(e) { await x(() => F()), await x(() => d.default.setAccountFlag(v.AccountNotificationFlags.USE_NEW_NOTIFICATIONS, !0)); let t = await x(() => c.default.saveUserGuildSettingsBulk(e)); l.default.dispatch({ type: "USER_GUILD_SETTINGS_FULL_UPDATE", userGuildSettings: t }), l.default.dispatch({ type: "RECOMPUTE_READ_STATES" }) } async function x(e) { for (let t = 0; t < 3; t++) try { return await e() } catch (e) { await new Promise(e => setTimeout(e, 1e3 * (t + 1))) } return await e() } async function F() { let e = await (0, R.listSnapshots)(); e.length > 0 ? await function() { return new Promise(e => { u.default.show({ title: "Create new Backup?", body: "It looks like you already have one notification settings backup. Would you like us to delete the old backup and take a new one, or skip taking a new backup and keep the old one?", confirmText: "Take New Backup", cancelText: "Skip Backup", onConfirm: () => e(!0), onCancel: () => e(!1) }) }) }() && (0, R.backupSettings)(e): (0, R.takeSnapshot)("Backup from ".concat(new Date().toLocaleDateString())) } async function H() { o.Storage.set("turnedOffNewNotifications", !0), m.default.track(M.AnalyticEvents.NOTIFICATION_MIGRATION_OPTOUT, { num_guilds_with_new_setting: Object.values(S.default.getGuilds()).filter(e => A.default.resolveGuildUnreadSetting(e) === y.UnreadSetting.ONLY_MENTIONS).length }); let e = await (0, R.listSnapshots)(), t = s().sortBy(e, e => new Date(e.recorded_at).getTime()); if (t.length > 0) { let e = t[t.length - 1]; await new Promise(t => u.default.show({ title: "Please Confirm", body: "This will turn off the new notification system and restore your " + "notification settings to a backup created on ".concat(new Date(e.recorded_at).toLocaleDateString()), onConfirm: t, cancelText: "Cancel", onCancel: () => {} })), await (0, R.restoreSnapshot)(e.id), await d.default.setAccountFlag(v.AccountNotificationFlags.USE_NEW_NOTIFICATIONS, !1) } else await d.default.setAccountFlag(v.AccountNotificationFlags.USE_NEW_NOTIFICATIONS, !1) } function Y(e) { var t, n, i; if (null == e) return []; let r = s().keyBy(null !== (t = e.voice_joins) && void 0 !== t ? t : [], "channel_id"), a = s().keyBy(null !== (n = e.message_sends) && void 0 !== n ? n : [], "channel_id"); return (null !== (i = e.channel_opens) && void 0 !== i ? i : []).map(e => { var t, n, i, s, o, l, u, d, _, c, E; let I = null !== (t = r[e.channel_id]) && void 0 !== t ? t : {}, T = null !== (n = a[e.channel_id]) && void 0 !== n ? n : {}; return { channel_id: e.channel_id, num_year_opens: Number(null !== (i = e.year_opens) && void 0 !== i ? i : 0), num_month_opens: Number(null !== (s = e.one_month_opens) && void 0 !== s ? s : 0), num_three_month_opens: Number(null !== (o = e.three_month_opens) && void 0 !== o ? o : 0), num_six_month_opens: Number(null !== (l = e.six_month_opens) && void 0 !== l ? l : 0), num_messages: Number(null !== (u = null == T ? void 0 : T.num_messages) && void 0 !== u ? u : 0), num_year_voice_joins: Number(null !== (d = null == I ? void 0 : I.year_opens) && void 0 !== d ? d : 0), num_month_voice_joins: Number(null !== (_ = null == I ? void 0 : I.one_month_opens) && void 0 !== _ ? _ : 0), num_three_month_voice_joins: Number(null !== (c = null == I ? void 0 : I.three_month_opens) && void 0 !== c ? c : 0), num_six_month_voice_joins: Number(null !== (E = null == I ? void 0 : I.six_month_opens) && void 0 !== E ? E : 0) } }).filter(p.isNotNullish) } }, 630114: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("653041"), n("47120"), n("789020"), n("724458"); var i = n("392711"), r = n.n(i), s = n("131704"), a = n("680089"), o = n("592125"), l = n("480294"), u = n("580005"), d = n("496675"), _ = n("9156"), c = n("70956"), E = n("630388"), I = n("823379"), T = n("789662"), f = n("981631"), S = n("526761"); function h(e, t, n, i, E) { if (t !== T.Mode.UseGreyDot) return [{ label: "Setting the guild to a white dot unread", apply: (e, t) => { A(e, t, !0) } }]; let S = [], h = Object.values(o.default.getMutableGuildChannelsForGuild(e.id)).filter(e => d.default.can(f.Permissions.VIEW_CHANNEL, e)); return S.push(... function(e, t) { if (!(_.default.isMuted(e.id) && !_.default.isTemporarilyMuted(e.id))) return []; let n = [{ label: "Unmuting the guild and marking it as read", apply: e => { e.muted = !1, e.mute_config = null }, needsMarkedAsRead: !0 }], i = t.filter(t => _.default.getChannelMessageNotifications(e.id, t.id) === f.UserNotificationSettings.ALL_MESSAGES); return i.length > 0 && n.push({ label: "Setting ".concat(i.length, " to mentions-only since they were all-messages and we are unmuting the guild"), debug: i.map(e => "\n - #".concat(e.name)).join(""), apply: (e, t) => { for (let n of i) m(e, t, n.id, e => { e.message_notifications = f.UserNotificationSettings.ONLY_MENTIONS }) } }), n }(e, h)), S.push(function(e) { if (_.default.getMessageNotifications(e.id) === f.UserNotificationSettings.ALL_MESSAGES) return { label: "Setting the guild to only mentions since it is in care-a-little but was previously all-messages", apply: e => { e.message_notifications = f.UserNotificationSettings.ONLY_MENTIONS } } }(e)), S.push(function() { return { label: "Setting the guild to a grey dot unread", apply: (e, t) => { A(e, t, !1) } } }()), S.push(... function(e) { let t = [], [n, i] = r()(e).filter(e => e.type === f.ChannelTypes.GUILD_ANNOUNCEMENT).partition(e => _.default.isChannelMuted(e.guild_id, e.id) || null != e.parent_id && _.default.isChannelMuted(e.guild_id, e.parent_id)).value(); return n.length > 0 && t.push({ label: "Not touching ".concat(n.length, " announcement channels since they are muted"), debug: n.map(e => "\n - #".concat(e.name)).join("") }), i.length > 0 && t.push({ label: "Setting ".concat(i.length, " announcement channels to white-dot"), debug: i.map(e => "\n - #".concat(e.name)).join(""), apply: (e, t) => { for (let n of i) N(e, t, n.id, !0) } }), t }(h)), S.push(... function(e) { let t = [], n = []; for (let t of e) _.default.isChannelMuted(t.guild_id, t.id) && t.isCategory() && !a.default.isCollapsed(t.id) && n.push(t); return n.length > 0 && t.push({ label: "Unmuting ".concat(n.length, " categories and setting to grey-dot"), debug: n.map(e => "\n - #".concat(e.name)).join(""), apply: (e, t) => { for (let i of n) N(e, t, i.id, !1), m(e, t, i.id, e => { e.muted = !1, e.mute_config = null }) } }), t }(h)), S.push(... function(e) { let t = [], n = [], i = []; return e.forEach(e => { if (_.default.isChannelMuted(e.guild_id, e.id)) return; let t = _.default.getChannelMessageNotifications(e.guild_id, e.id); t === f.UserNotificationSettings.ALL_MESSAGES ? n.push(e) : t === f.UserNotificationSettings.ONLY_MENTIONS && i.push(e) }), n.length > 0 && t.push({ label: "Setting ".concat(n.length, " channels to white-dot since they were explicitly All Messages"), debug: n.map(e => "\n - #".concat(e.name)).join(""), apply: (e, t) => { for (let i of n) N(e, t, i.id, !0) } }), i.length > 0 && t.push({ label: "Setting ".concat(i.length, " channels to grey-dot since they were explicitly Mentions Only"), debug: i.map(e => "\n - #".concat(e.name)).join(""), apply: (e, t) => { for (let n of i) N(e, t, n.id, !1) } }), t }(h)), l.default.hasConsented(f.Consents.PERSONALIZATION) ? S.push(... function(e, t, n, i, s) { if (_.default.isMuted(e.id) && !_.default.isTemporarilyMuted(e.id)) return []; let a = new Set(t.map(e => e.id)), o = i.filter(e => a.has(e.channel_id)), l = r().keyBy(o, "channel_id"), u = Math.max(n.messages === T.PainLevel.High ? s.frecency.yearMinOpensLargeServer : s.frecency.yearMinOpensSmallServer, o.reduce((e, t) => { var n; return e + Number(null !== (n = t.num_year_opens) && void 0 !== n ? n : 0) }, 0) * s.frecency.totalOpensPercent), d = Math.max(s.frecency.monthMinOpens, o.reduce((e, t) => { var n; return e + Number(null !== (n = t.num_three_month_opens) && void 0 !== n ? n : 0) }, 0) * s.frecency.totalOpensPercent), c = [], E = []; t.forEach(e => { var t, n, i, r; let s = null !== (t = l[e.id]) && void 0 !== t ? t : {}; Number(null !== (n = s.num_year_opens) && void 0 !== n ? n : 0) > u || Number(null !== (i = s.num_month_opens) && void 0 !== i ? i : 0) > d ? c.push(e) : Number(null !== (r = s.num_three_month_opens) && void 0 !== r ? r : 0) > 2 && E.push(e) }); let I = []; return c.length > 0 && I.push({ label: "Setting ".concat(c.length, " channels to white-dot since they are recent and frequently viewed"), debug: c.map(e => "\n - #".concat(e.name, " (").concat(JSON.stringify(l[e.id]), ")")).join(""), apply: (e, t) => { for (let n of c) N(e, t, n.id, !0) } }), E.length > 0 && I.push({ label: "NOT setting ".concat(E.length, " channels to white-dot because they were only viewed a little."), debug: E.map(e => "\n - #".concat(e.name, " (").concat(JSON.stringify(l[e.id]), ")")).join("") }), I }(e, h, n, i, E)) : S.push(... function(e, t) { if (_.default.isMuted(e.id) && !_.default.isTemporarilyMuted(e.id)) return []; let n = [], i = new Set(t.map(e => e.id)), r = Date.now() - c.default.Millis.DAYS_30, a = u.default.getFrequentlyWithoutFetchingLatest().filter(e => e instanceof s.ChannelRecordBase && i.has(e.id)).filter(e => { var t, n; let i = null !== (n = null === (t = u.default.frecencyWithoutFetchingLatest.usageHistory[e.id]) || void 0 === t ? void 0 : t.recentUses) && void 0 !== n ? n : []; return 0 !== i.length && i[i.length - 1] >= r }); return a.length > 0 && n.push({ label: "Setting ".concat(a.length, " channels to white-dot since they are recent and frequently viewed"), debug: a.map(e => "\n - #".concat(e.name)).join(""), apply: (e, t) => { for (let n of a) N(e, t, n.id, !0) } }), n }(e, h)), S.filter(I.isNotNullish) } function A(e, t, n) { var i, r; e.flags = (0, E.setFlag)(null !== (r = null !== (i = e.flags) && void 0 !== i ? i : t.flags) && void 0 !== r ? r : 0, S.GuildNotificationSettingsFlags.UNREADS_ALL_MESSAGES, n), e.flags = (0, E.setFlag)(e.flags, S.GuildNotificationSettingsFlags.UNREADS_ONLY_MENTIONS, !n) } function m(e, t, n, i) { var s, a, o, l; let u = null !== (o = null === (s = e.channel_overrides) || void 0 === s ? void 0 : s[n]) && void 0 !== o ? o : {}; i(u, null !== (l = null === (a = t.channel_overrides) || void 0 === a ? void 0 : a[n]) && void 0 !== l ? l : {}), !r().isEmpty(u) && (null == e.channel_overrides && (e.channel_overrides = {}), e.channel_overrides[n] = u) } function N(e, t, n, i) { m(e, t, n, (e, t) => { var n, r; e.flags = (0, E.setFlag)(null !== (r = null !== (n = e.flags) && void 0 !== n ? n : t.flags) && void 0 !== r ? r : 0, S.ChannelNotificationSettingsFlags.UNREADS_ALL_MESSAGES, i), e.flags = (0, E.setFlag)(e.flags, S.ChannelNotificationSettingsFlags.UNREADS_ONLY_MENTIONS, !i) }) } }, 506712: function(e, t, n) { "use strict"; n.r(t), n.d(t, { guessGuildModeWithLocalData: function() { return E }, guessGuildModeWithRemoteData: function() { return _ } }), n("724458"); var i = n("392711"), r = n.n(i), s = n("131704"), a = n("592125"), o = n("580005"), l = n("650774"), u = n("70956"), d = n("789662"); function _(e, t, n, i, r) { var s, o, u, _; let E = a.default.getMutableGuildChannelsForGuild(e.id), I = i.filter(e => e.channel_id in E), T = null !== (s = n.filter(t => t.guild_id === e.id)[0]) && void 0 !== s ? s : {}, f = l.default.getMemberCount(e.id), S = c("year", i, I, e => { var t; return Number(null !== (t = e.num_year_opens) && void 0 !== t ? t : 0) }), h = c("one month", i, I, e => { var t; return Number(null !== (t = e.num_month_opens) && void 0 !== t ? t : 0) }), A = c("three month", i, I, e => { var t; return Number(null !== (t = e.num_three_month_opens) && void 0 !== t ? t : 0) }), m = [h, A, c("six month", i, I, e => { var t; return Number(null !== (t = e.num_six_month_opens) && void 0 !== t ? t : 0) }), S], N = 0, p = 0; I.forEach(e => { var t; N++, p += null !== (t = Number(e.num_messages)) && void 0 !== t ? t : 0 }); let O = "\n**Pain**:\n- Everyones: ".concat(d.PainLevel[null !== (o = T.everyones) && void 0 !== o ? o : 0], "\n- Messages: ").concat(d.PainLevel[null !== (u = T.messages) && void 0 !== u ? u : 0], "\n- Size: ").concat(f, "\n**Remote**:\n- Channels: ").concat(N, "\n- AllVisits: ").concat(m.map(e => e.totalOpensAcrossAllServers).join(" / "), "\n- GuildVisits: ").concat(m.map(e => e.guildOpens).join(" / "), "\n- Biggest Channel (abs): ").concat(m.map(e => e.biggestChannel).join(" / "), "\n- Biggest Channel (%): ").concat(m.map(e => e.biggestChannelFormatted).join(" / "), "\n- Sent Msgs: ").concat(p, "\n"), C = A.guildOpens >= .02 * A.totalOpensAcrossAllServers, R = (null !== (_ = S.guildOpens) && void 0 !== _ ? _ : 0) > 0; if (T.messages === d.PainLevel.High) { if (!r) return [d.Mode.UseGreyDot, C, "UseGreyDot" + O]; if (!C && R) return [d.Mode.UseGreyDot, C, "UseGreyDot" + O] } return [d.Mode.KeepAsIs, C, "KeepAsIs" + O] } function c(e, t, n, i) { let s = t.reduce((e, t) => e + i(t), 0), a = n.reduce((e, t) => e + i(t), 0), o = r().sortBy(n, i).reverse()[0], l = null == o ? 0 : i(o), u = (l / a * 100).toFixed(1); return { label: e, totalOpensAcrossAllServers: s, guildOpens: a, biggestChannel: l, biggestChannelFormatted: u } } function E(e, t) { var n, i; let r = null !== (n = t.filter(t => t.guild_id === e.id)[0]) && void 0 !== n ? n : {}, a = null !== (i = l.default.getMemberCount(e.id)) && void 0 !== i ? i : 0, _ = Date.now() - u.default.Millis.DAYS_30, c = o.default.getFrequentlyWithoutFetchingLatest().filter(t => t instanceof s.ChannelRecordBase && t.guild_id === e.id), E = c.filter(e => { var t, n; let i = null !== (n = null === (t = o.default.frecencyWithoutFetchingLatest.usageHistory[e.id]) || void 0 === t ? void 0 : t.recentUses) && void 0 !== n ? n : []; return 0 !== i.length && i[i.length - 1] >= _ }), I = E.length >= 5, T = c.reduce((e, t) => { var n, i; return e + (null !== (i = null === (n = o.default.frecencyWithoutFetchingLatest.usageHistory[t.id]) || void 0 === n ? void 0 : n.totalUses) && void 0 !== i ? i : 0) }, 0), f = "\n- **Local**:\n - Guild Visits: ".concat(T, "\n - Channels: ").concat(c.length, "\n - Recent Channels: ").concat(E.length, "\n"); return r.messages === d.PainLevel.High || a > 1e3 ? [d.Mode.UseGreyDot, I, "SuggestGreyDot" + f] : [d.Mode.KeepAsIs, I, "KeepAsIs" + f] } }, 392888: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openMigrationModal: function() { return I } }), n("47120"); var i = n("735250"); n("470079"); var r = n("544891"), s = n("433517"), a = n("481060"), o = n("147913"), l = n("480294"), u = n("9156"), d = n("312400"), _ = n("115345"), c = n("981631"); class E extends o.default { handlePostConnectionOpen() { if (!s.Storage.get("turnedOffNewNotifications") && !!l.default.hasConsented(c.Consents.PERSONALIZATION) && !!d.NotificationsExperiment.getCurrentConfig({ location: "NotificationMigrationManager" }, { autoTrackExposure: !1 }).enabled) !u.default.useNewNotifications && (this.checkOldUserExperiment(), this.checkNewUserExperiment()) } async checkOldUserExperiment() { let { logExposure: e, autoOpen: t } = d.UnreadsEntryPointExperiment.getCurrentConfig({ location: "NotificationMigrationManager" }, { autoTrackExposure: !1 }); if (!e) return; let { body: { guild_noise: s, usage: o } } = await r.HTTP.get("/users/@me/notification-migration-data2"), l = (0, _.transformUsageData)(o), { default: u } = await Promise.all([n.e("99387"), n.e("53512")]).then(n.bind(n, "753521")); if (!(0, a.hasAnyModalOpen)()) d.UnreadsEntryPointExperiment.trackExposure({ location: "NotificationMigrationManager" }), t && ((0, _.hasGoodCandidateServers)(s, l) ? (0, a.openModal)(e => (0, i.jsx)(u, { ...e, dismissable: !1, guildPain: s, myUsage: l }), { onCloseRequest: () => {} }) : (0, _.autoMigrateToNewSystem)()) } checkNewUserExperiment() { let { logExposure: e, enabled: t } = d.NewUserUnreadsEntryPointExperiment.getCurrentConfig({ location: "NotificationMigrationManager" }, { autoTrackExposure: !1 }); e && (d.NewUserUnreadsEntryPointExperiment.trackExposure({ location: "NotificationMigrationManager" }), t && (0, _.autoMigrateToNewSystem)()) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: () => this.handlePostConnectionOpen() }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } async function I(e) { let { body: { guild_noise: t, usage: s } } = await r.HTTP.get("/users/@me/notification-migration-data2"), o = (0, _.transformUsageData)(s); (0, a.openModalLazy)(async () => { let { default: r } = await Promise.all([n.e("99387"), n.e("53512")]).then(n.bind(n, "753521")); return n => (0, i.jsx)(r, { ...n, dismissable: e, guildPain: t, myUsage: o }) }) } t.default = new E }, 686660: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Presets: function() { return i }, presetFromSettings: function() { return u }, presetName: function() { return d } }), n("627341"); var i, r, s = n("278074"), a = n("981631"), o = n("490897"), l = n("689938"); function u(e, t) { return (0, s.match)([t, e]).with([a.UserNotificationSettings.ALL_MESSAGES, o.UnreadSetting.ALL_MESSAGES], () => "all_messages").with([a.UserNotificationSettings.ONLY_MENTIONS, o.UnreadSetting.UNSET], () => "mentions").with([a.UserNotificationSettings.ONLY_MENTIONS, o.UnreadSetting.ONLY_MENTIONS], () => "mentions").with([a.UserNotificationSettings.NO_MESSAGES, o.UnreadSetting.UNSET], () => "nothing").with([a.UserNotificationSettings.NO_MESSAGES, o.UnreadSetting.ONLY_MENTIONS], () => "nothing").otherwise(() => "custom") } function d(e) { return (0, s.match)(e).with("all_messages", () => l.default.Messages.NOTIFICATION_PRESET_1).with("mentions", () => l.default.Messages.NOTIFICATION_PRESET_2).with("nothing", () => l.default.Messages.NOTIFICATION_PRESET_3).with("custom", () => l.default.Messages.NOTIFICATION_PRESET_CUSTOM).exhaustive() }(r = i || (i = {})).ALL_MESSAGES = "all_messages", r.MENTIONS = "mentions", r.NOTHING = "nothing", r.CUSTOM = "custom" }, 813744: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"), n("653041"); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("857192"), o = n("517100"), l = n("594174"), u = n("153850"), d = n("231338"), _ = n("75798"); function c() { var e; let t = (0, r.useStateFromStores)([a.default], () => a.default.isIdleStatusIndicatorEnabled), n = (0, r.useStateFromStores)([l.default], () => { var e, t; return null !== (t = null === (e = l.default.getCurrentUser()) || void 0 === e ? void 0 : e.isStaff()) && void 0 !== t && t }), [c, E] = (0, r.useStateFromStoresArray)([o.default], () => [o.default.isIdle(), o.default.isAFK()]), I = []; return !c && !E && I.push("ACTIVE"), c && I.push("IDLE"), E && I.push("AFK"), n && t ? (0, i.jsx)(u.default, { children: (0, i.jsxs)("div", { className: _.container, children: [(0, i.jsxs)("div", { className: _.status, children: [(0, i.jsx)(s.Status, { status: I.includes("ACTIVE") ? d.StatusTypes.ONLINE : d.StatusTypes.IDLE, className: _.statusIndicator }), (0, i.jsx)(s.Text, { variant: "text-md/normal", children: "IDLE STATUS:" }), (0, i.jsx)("div", { className: _.statusText, children: (0, i.jsx)(s.Text, { variant: "text-md/bold", children: I.join(" + ") }) })] }), c && (0, i.jsxs)(s.Text, { variant: "text-md/normal", children: ["Idle since:", " ", new Date(null !== (e = o.default.getIdleSince()) && void 0 !== e ? e : 0).toLocaleDateString(void 0, { year: "numeric", day: "numeric", month: "numeric", hour: "numeric", minute: "numeric", second: "numeric" })] })] }) }) : null } }, 807675: function(e, t, n) { "use strict"; n.r(t), n.d(t, { filterScopes: function() { return d }, parseOAuth2AuthorizeProps: function() { return _ } }), n("653041"); var i = n("593473"), r = n("243814"), s = n("149765"), a = n("592125"), o = n("914010"), l = n("700785"), u = n("713938"); function d(e) { let t = e.filter(e => !u.RemovedScopes.includes(e)); return t.includes(r.OAuth2Scopes.BOT) && !t.includes(r.OAuth2Scopes.APPLICATIONS_COMMANDS) && t.push(r.OAuth2Scopes.APPLICATIONS_COMMANDS), t } function _(e) { var t, n, r, u, d, _; let c = (0, i.parse)(e, { arrayFormat: "bracket" }), E = l.NONE; try { E = s.deserialize(null != c.permissions && "" !== c.permissions ? c.permissions : "0") } catch (e) {} let I = c.channel_id, T = null !== (u = null !== (r = null !== (n = c.guild_id) && void 0 !== n ? n : null === (t = a.default.getChannel(I)) || void 0 === t ? void 0 : t.guild_id) && void 0 !== r ? r : o.default.getGuildId()) && void 0 !== u ? u : void 0; return { clientId: null !== (d = c.client_id) && void 0 !== d ? d : "", scopes: (null !== (_ = c.scope) && void 0 !== _ ? _ : "").split(" ").filter(e => e.length > 0), responseType: c.response_type, redirectUri: c.redirect_uri, codeChallenge: c.code_challenge, codeChallengeMethod: c.code_challenge_method, state: c.state, permissions: E, channelId: I, guildId: T, prompt: c.prompt, disableGuildSelect: "true" === c.disable_guild_select, integrationType: null == c.integration_type ? void 0 : Number(c.integration_type), nonce: c.nonce } } }, 941532: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getApplicationDetailsText: function() { return r } }); var i = n("689938"); function r(e) { if (null != e.privacy_policy_url && null != e.terms_of_service_url) return i.default.Messages.OAUTH2_DETAILS_PRIVACY_POLICY_WITH_LINKS.format({ application: e.name, privacyPolicyURL: e.privacy_policy_url, termsOfServiceURL: e.terms_of_service_url }); if (null != e.privacy_policy_url) return i.default.Messages.OAUTH2_DETAILS_PRIVACY_POLICY_WITH_PRIVACY_POLICY_LINK.format({ application: e.name, privacyPolicyURL: e.privacy_policy_url }); if (null != e.terms_of_service_url) return i.default.Messages.OAUTH2_DETAILS_PRIVACY_POLICY_WITH_TERMS_OF_SERVICE_LINK.format({ application: e.name, termsOfServiceURL: e.terms_of_service_url }); return i.default.Messages.OAUTH2_DETAILS_PRIVACY_POLICY.format({ application: e.name }) } }, 489863: function(e, t, n) { "use strict"; n.r(t), n.d(t, { acceptWhitelist: function() { return o }, authorize: function() { return l }, fetchAuthorization: function() { return u }, fetchChannels: function() { return d }, finishUserCode: function() { return E }, finishUserCodeTwoWayLinkError: function() { return I }, logoutWithRedirect: function() { return _ }, verifyUserCode: function() { return c } }); var i = n("860911"), r = n("544891"), s = n("893776"), a = n("981631"); function o(e) { return r.HTTP.post({ url: a.Endpoints.OAUTH2_WHITELIST_ACCEPT, query: { token: e }, oldFormErrors: !0 }) } async function l(e) { let { authorize: t, clientId: n, scopes: i, responseType: s, redirectUri: o, codeChallenge: l, codeChallengeMethod: u, state: d, permissions: _, guildId: c, channelId: E, integrationType: I, nonce: T } = e; return (await r.HTTP.post({ url: a.Endpoints.OAUTH2_AUTHORIZE, query: { client_id: n, response_type: s, redirect_uri: o, code_challenge: l, code_challenge_method: u, scope: i.join(" "), state: d, nonce: T }, body: { guild_id: c, webhook_channel_id: null != c && null != E ? E : void 0, channel_id: null == c && null != E ? E : void 0, permissions: _, authorize: t, integration_type: I }, oldFormErrors: !0 })).body } async function u(e) { let { clientId: t, scopes: n, responseType: i, redirectUri: s, codeChallenge: o, codeChallengeMethod: l, state: u, integrationType: d, nonce: _ } = e; return (await r.HTTP.get({ url: a.Endpoints.OAUTH2_AUTHORIZE, query: { client_id: t, response_type: i, redirect_uri: s, code_challenge: o, code_challenge_method: l, scope: n.join(" "), state: u, integration_type: d, nonce: _ }, retries: 3, oldFormErrors: !0 })).body } async function d(e) { let { body: t } = await r.HTTP.get({ url: a.Endpoints.OAUTH2_AUTHORIZE_WEBHOOK_CHANNELS, query: { guild_id: e }, oldFormErrors: !0 }); return t } function _(e) { s.default.logout((0, i.getLoginPath)(e.pathname + e.search, !1)) } async function c(e) { return await r.HTTP.post({ url: a.Endpoints.OAUTH2_DEVICE_VERIFY, body: { user_code: e } }) } async function E(e, t) { return await r.HTTP.post({ url: a.Endpoints.OAUTH2_DEVICE_FINISH, body: { user_code: e, result: t } }) } async function I(e, t, n) { return await r.HTTP.post({ url: a.Endpoints.OAUTH2_DEVICE_FINISH, body: { user_code: e, result: "two_way_link_error", error_code: t, error_source: n } }) } }, 228763: function(e, t, n) { "use strict"; n.r(t), n.d(t, { convertOAuth2Authorization: function() { return r } }); var i = n("149765"); function r(e) { if (null == e.guilds) return e; return { ...e, guilds: e.guilds.map(e => ({ ...e, permissions: i.deserialize(e.permissions) })) } } }, 422559: function(e, t, n) { "use strict"; n.r(t), n.d(t, { OrderedPermissions: function() { return a }, containsDisallowedPermission: function() { return o }, getPermissionName: function() { return u } }), n("411104"); var i = n("149765"), r = n("981631"), s = n("689938"); let a = [r.Permissions.ADMINISTRATOR, r.Permissions.MANAGE_GUILD, r.Permissions.MANAGE_ROLES, r.Permissions.MANAGE_CHANNELS, r.Permissions.KICK_MEMBERS, r.Permissions.BAN_MEMBERS, r.Permissions.CREATE_INSTANT_INVITE, r.Permissions.MANAGE_NICKNAMES, r.Permissions.CHANGE_NICKNAME, r.Permissions.MANAGE_GUILD_EXPRESSIONS, r.Permissions.CREATE_GUILD_EXPRESSIONS, r.Permissions.MANAGE_WEBHOOKS, r.Permissions.VIEW_AUDIT_LOG, r.Permissions.VIEW_CHANNEL, r.Permissions.MANAGE_EVENTS, r.Permissions.CREATE_EVENTS, r.Permissions.MODERATE_MEMBERS, r.Permissions.VIEW_GUILD_ANALYTICS, r.Permissions.VIEW_CREATOR_MONETIZATION_ANALYTICS, r.Permissions.SEND_MESSAGES, r.Permissions.SEND_MESSAGES_IN_THREADS, r.Permissions.CREATE_PUBLIC_THREADS, r.Permissions.CREATE_PRIVATE_THREADS, r.Permissions.SEND_TTS_MESSAGES, r.Permissions.MANAGE_MESSAGES, r.Permissions.MANAGE_THREADS, r.Permissions.EMBED_LINKS, r.Permissions.ATTACH_FILES, r.Permissions.READ_MESSAGE_HISTORY, r.Permissions.MENTION_EVERYONE, r.Permissions.ADD_REACTIONS, r.Permissions.USE_EXTERNAL_EMOJIS, r.Permissions.USE_EXTERNAL_STICKERS, r.Permissions.USE_APPLICATION_COMMANDS, r.Permissions.SEND_VOICE_MESSAGES, r.Permissions.USE_CLYDE_AI, r.Permissions.SEND_POLLS, r.Permissions.CONNECT, r.Permissions.SPEAK, r.Permissions.MUTE_MEMBERS, r.Permissions.DEAFEN_MEMBERS, r.Permissions.MOVE_MEMBERS, r.Permissions.USE_VAD, r.Permissions.PRIORITY_SPEAKER, r.Permissions.REQUEST_TO_SPEAK, r.Permissions.STREAM, r.Permissions.USE_EMBEDDED_ACTIVITIES, r.Permissions.USE_SOUNDBOARD, r.Permissions.USE_EXTERNAL_SOUNDS, r.Permissions.SET_VOICE_CHANNEL_STATUS]; function o(e) { return Object.values(r.Permissions).some(t => i.has(e, t) && !a.includes(t)) } let l = { [r.Permissions.ADMINISTRATOR.toString()]: () => s.default.Messages.ADMINISTRATOR, [r.Permissions.MANAGE_GUILD.toString()]: () => s.default.Messages.MANAGE_SERVER, [r.Permissions.MANAGE_ROLES.toString()]: () => s.default.Messages.MANAGE_ROLES, [r.Permissions.MANAGE_CHANNELS.toString()]: () => s.default.Messages.MANAGE_CHANNELS, [r.Permissions.KICK_MEMBERS.toString()]: () => s.default.Messages.KICK_MEMBERS, [r.Permissions.BAN_MEMBERS.toString()]: () => s.default.Messages.BAN_MEMBERS, [r.Permissions.CREATE_INSTANT_INVITE.toString()]: () => s.default.Messages.CREATE_INSTANT_INVITE, [r.Permissions.MANAGE_NICKNAMES.toString()]: () => s.default.Messages.MANAGE_NICKNAMES, [r.Permissions.CHANGE_NICKNAME.toString()]: () => s.default.Messages.CHANGE_NICKNAME, [r.Permissions.MANAGE_GUILD_EXPRESSIONS.toString()]: () => s.default.Messages.MANAGE_EXPRESSIONS, [r.Permissions.CREATE_GUILD_EXPRESSIONS.toString()]: () => s.default.Messages.CREATE_EXPRESSIONS, [r.Permissions.MANAGE_WEBHOOKS.toString()]: () => s.default.Messages.MANAGE_WEBHOOKS, [r.Permissions.VIEW_AUDIT_LOG.toString()]: () => s.default.Messages.VIEW_AUDIT_LOG, [r.Permissions.VIEW_CHANNEL.toString()]: () => s.default.Messages.READ_MESSAGES, [r.Permissions.SEND_MESSAGES.toString()]: () => s.default.Messages.SEND_MESSAGES, [r.Permissions.SEND_TTS_MESSAGES.toString()]: () => s.default.Messages.SEND_TTS_MESSAGES, [r.Permissions.MANAGE_MESSAGES.toString()]: () => s.default.Messages.MANAGE_MESSAGES, [r.Permissions.EMBED_LINKS.toString()]: () => s.default.Messages.EMBED_LINKS, [r.Permissions.ATTACH_FILES.toString()]: () => s.default.Messages.ATTACH_FILES, [r.Permissions.READ_MESSAGE_HISTORY.toString()]: () => s.default.Messages.READ_MESSAGE_HISTORY, [r.Permissions.MENTION_EVERYONE.toString()]: () => s.default.Messages.MENTION_EVERYONE, [r.Permissions.ADD_REACTIONS.toString()]: () => s.default.Messages.ADD_REACTIONS, [r.Permissions.USE_EXTERNAL_EMOJIS.toString()]: () => s.default.Messages.USE_EXTERNAL_EMOJIS, [r.Permissions.USE_EXTERNAL_STICKERS.toString()]: () => s.default.Messages.USE_EXTERNAL_STICKERS, [r.Permissions.USE_APPLICATION_COMMANDS.toString()]: () => s.default.Messages.USE_APPLICATION_COMMANDS, [r.Permissions.SEND_VOICE_MESSAGES.toString()]: () => s.default.Messages.SEND_VOICE_MESSAGE, [r.Permissions.CONNECT.toString()]: () => s.default.Messages.CONNECT, [r.Permissions.SPEAK.toString()]: () => s.default.Messages.SPEAK, [r.Permissions.MUTE_MEMBERS.toString()]: () => s.default.Messages.MUTE_MEMBERS, [r.Permissions.DEAFEN_MEMBERS.toString()]: () => s.default.Messages.DEAFEN_MEMBERS, [r.Permissions.MOVE_MEMBERS.toString()]: () => s.default.Messages.MOVE_MEMBERS, [r.Permissions.USE_VAD.toString()]: () => s.default.Messages.USE_VAD, [r.Permissions.PRIORITY_SPEAKER.toString()]: () => s.default.Messages.PRIORITY_SPEAKER, [r.Permissions.CREATE_PUBLIC_THREADS.toString()]: () => s.default.Messages.CREATE_PUBLIC_THREADS, [r.Permissions.CREATE_PRIVATE_THREADS.toString()]: () => s.default.Messages.CREATE_PRIVATE_THREADS, [r.Permissions.SEND_MESSAGES_IN_THREADS.toString()]: () => s.default.Messages.SEND_MESSAGES_IN_THREADS, [r.Permissions.MANAGE_THREADS.toString()]: () => s.default.Messages.MANAGE_THREADS, [r.Permissions.MANAGE_EVENTS.toString()]: () => s.default.Messages.MANAGE_EVENTS, [r.Permissions.CREATE_EVENTS.toString()]: () => s.default.Messages.CREATE_EVENTS, [r.Permissions.MODERATE_MEMBERS.toString()]: () => s.default.Messages.MODERATE_MEMBERS_PERMISSION_INTERNAL, [r.Permissions.REQUEST_TO_SPEAK.toString()]: () => s.default.Messages.REQUEST_TO_SPEAK, [r.Permissions.VIEW_GUILD_ANALYTICS.toString()]: () => s.default.Messages.VIEW_GUILD_ANALYTICS, [r.Permissions.VIEW_CREATOR_MONETIZATION_ANALYTICS.toString()]: () => s.default.Messages.VIEW_CREATOR_MONETIZATION_ANALYTICS, [r.Permissions.STREAM.toString()]: () => s.default.Messages.VIDEO, [r.Permissions.USE_EMBEDDED_ACTIVITIES.toString()]: () => s.default.Messages.USE_EMBEDDED_ACTIVITIES, [r.Permissions.USE_SOUNDBOARD.toString()]: () => s.default.Messages.USE_SOUNDBOARD, [r.Permissions.USE_EXTERNAL_SOUNDS.toString()]: () => s.default.Messages.USE_EXTERNAL_SOUNDS, [r.Permissions.USE_CLYDE_AI.toString()]: () => s.default.Messages.ROLE_PERMISSIONS_USE_CLYDE_AI, [r.Permissions.SET_VOICE_CHANNEL_STATUS.toString()]: () => s.default.Messages.VOICE_CHANNEL_STATUS_PERMISSION_TITLE, [r.Permissions.SEND_POLLS.toString()]: () => s.default.Messages.ROLE_PERMISSIONS_SEND_POLLS }; function u(e) { let t = l[e.toString()]; if (null == t) throw Error("Unknown permission. Did you provide a _single_ bit flag? Perm: ".concat(e)); return t() } }, 713938: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FAKE_SCOPES: function() { return s }, OrderedAccountScopes: function() { return a }, RemovedScopes: function() { return l }, ValidScopes: function() { return o }, getScopeName: function() { return u }, getSecurityMessage: function() { return d } }); var i = n("243814"), r = n("689938"); let s = [() => r.default.Messages.OAUTH2_FAKE_SCOPE_1, () => r.default.Messages.OAUTH2_FAKE_SCOPE_2, () => r.default.Messages.OAUTH2_FAKE_SCOPE_3, () => r.default.Messages.OAUTH2_FAKE_SCOPE_4, () => r.default.Messages.OAUTH2_FAKE_SCOPE_5, () => r.default.Messages.OAUTH2_FAKE_SCOPE_6, () => r.default.Messages.OAUTH2_FAKE_SCOPE_7, () => r.default.Messages.OAUTH2_FAKE_SCOPE_8], a = [i.OAuth2Scopes.BOT, i.OAuth2Scopes.OPENID, i.OAuth2Scopes.IDENTIFY, i.OAuth2Scopes.EMAIL, i.OAuth2Scopes.CONNECTIONS, i.OAuth2Scopes.MESSAGES_READ, i.OAuth2Scopes.GUILDS, i.OAuth2Scopes.GUILDS_JOIN, i.OAuth2Scopes.GUILDS_MEMBERS_READ, i.OAuth2Scopes.GDM_JOIN, i.OAuth2Scopes.RPC, i.OAuth2Scopes.RPC_NOTIFICATIONS_READ, i.OAuth2Scopes.RPC_VOICE_READ, i.OAuth2Scopes.RPC_VOICE_WRITE, i.OAuth2Scopes.RPC_VIDEO_READ, i.OAuth2Scopes.RPC_VIDEO_WRITE, i.OAuth2Scopes.RPC_SCREENSHARE_READ, i.OAuth2Scopes.RPC_SCREENSHARE_WRITE, i.OAuth2Scopes.RPC_ACTIVITIES_WRITE, i.OAuth2Scopes.APPLICATIONS_BUILDS_UPLOAD, i.OAuth2Scopes.APPLICATIONS_BUILDS_READ, i.OAuth2Scopes.APPLICATIONS_COMMANDS, i.OAuth2Scopes.APPLICATIONS_COMMANDS_UPDATE, i.OAuth2Scopes.APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE, i.OAuth2Scopes.APPLICATIONS_STORE_UPDATE, i.OAuth2Scopes.APPLICATIONS_ENTITLEMENTS, i.OAuth2Scopes.ACTIVITIES_READ, i.OAuth2Scopes.ACTIVITIES_WRITE, i.OAuth2Scopes.RELATIONSHIPS_READ, i.OAuth2Scopes.RELATIONSHIPS_WRITE, i.OAuth2Scopes.VOICE, i.OAuth2Scopes.DM_CHANNELS_READ, i.OAuth2Scopes.DM_CHANNELS_MESSAGES_READ, i.OAuth2Scopes.DM_CHANNELS_MESSAGES_WRITE, i.OAuth2Scopes.ROLE_CONNECTIONS_WRITE, i.OAuth2Scopes.PRESENCES_READ, i.OAuth2Scopes.PRESENCES_WRITE, i.OAuth2Scopes.GATEWAY_CONNECT], o = a.concat([i.OAuth2Scopes.WEBHOOK_INCOMING, i.OAuth2Scopes.BOT]), l = ["rpc.api"]; function u(e, t) { switch (e) { case i.OAuth2Scopes.IDENTIFY: return r.default.Messages.SCOPE_IDENTIFY; case i.OAuth2Scopes.OPENID: return r.default.Messages.SCOPE_OPENID; case i.OAuth2Scopes.EMAIL: return r.default.Messages.SCOPE_EMAIL; case i.OAuth2Scopes.BOT: return r.default.Messages.SCOPE_BOT; case i.OAuth2Scopes.CONNECTIONS: return r.default.Messages.SCOPE_CONNECTIONS; case i.OAuth2Scopes.MESSAGES_READ: return r.default.Messages.SCOPE_MESSAGES_READ; case i.OAuth2Scopes.GUILDS: return r.default.Messages.SCOPE_GUILDS; case i.OAuth2Scopes.GUILDS_JOIN: return r.default.Messages.SCOPE_GUILDS_JOIN; case i.OAuth2Scopes.GUILDS_MEMBERS_READ: if (t.includes(i.OAuth2Scopes.VOICE)) return r.default.Messages.SCOPE_GUILDS_MEMBERS_READ_VOICE; return r.default.Messages.SCOPE_GUILDS_MEMBERS_READ; case i.OAuth2Scopes.GDM_JOIN: return r.default.Messages.SCOPE_GDM_JOIN; case i.OAuth2Scopes.RPC: return r.default.Messages.SCOPE_RPC; case i.OAuth2Scopes.RPC_NOTIFICATIONS_READ: return r.default.Messages.SCOPE_RPC_NOTIFICATIONS_READ; case i.OAuth2Scopes.RPC_VOICE_WRITE: return r.default.Messages.SCOPE_RPC_VOICE_WRITE; case i.OAuth2Scopes.RPC_VIDEO_READ: return r.default.Messages.SCOPE_RPC_VIDEO_READ; case i.OAuth2Scopes.RPC_VIDEO_WRITE: return r.default.Messages.SCOPE_RPC_VIDEO_WRITE; case i.OAuth2Scopes.RPC_SCREENSHARE_READ: return r.default.Messages.SCOPE_RPC_SCREENSHARE_READ; case i.OAuth2Scopes.RPC_SCREENSHARE_WRITE: return r.default.Messages.SCOPE_RPC_SCREENSHARE_WRITE; case i.OAuth2Scopes.RPC_VOICE_READ: return r.default.Messages.SCOPE_RPC_VOICE_READ; case i.OAuth2Scopes.RPC_ACTIVITIES_WRITE: return r.default.Messages.SCOPE_RPC_ACTIVITIES_WRITE; case i.OAuth2Scopes.APPLICATIONS_BUILDS_UPLOAD: return r.default.Messages.SCOPE_APPLICATIONS_BUILDS_UPLOAD; case i.OAuth2Scopes.APPLICATIONS_BUILDS_READ: return r.default.Messages.SCOPE_APPLICATIONS_BUILDS_READ; case i.OAuth2Scopes.APPLICATIONS_COMMANDS: return r.default.Messages.SCOPE_APPLICATIONS_COMMANDS; case i.OAuth2Scopes.APPLICATIONS_COMMANDS_UPDATE: return r.default.Messages.SCOPE_APPLICATIONS_COMMANDS_UPDATE; case i.OAuth2Scopes.APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE: return r.default.Messages.SCOPE_APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE; case i.OAuth2Scopes.APPLICATIONS_STORE_UPDATE: return r.default.Messages.SCOPE_APPLICATIONS_STORE_UPDATE; case i.OAuth2Scopes.APPLICATIONS_ENTITLEMENTS: return r.default.Messages.SCOPE_APPLICATIONS_ENTITLEMENTS; case i.OAuth2Scopes.ACTIVITIES_READ: return r.default.Messages.SCOPE_ACTIVITIES_READ; case i.OAuth2Scopes.ACTIVITIES_WRITE: return r.default.Messages.SCOPE_ACTIVITIES_WRITE; case i.OAuth2Scopes.RELATIONSHIPS_READ: return r.default.Messages.SCOPE_RELATIONSHIPS_READ; case i.OAuth2Scopes.RELATIONSHIPS_WRITE: return r.default.Messages.SCOPE_RELATIONSHIPS_WRITE; case i.OAuth2Scopes.VOICE: return r.default.Messages.SCOPE_VOICE; case i.OAuth2Scopes.DM_CHANNELS_READ: return r.default.Messages.SCOPE_DM_CHANNELS_READ; case i.OAuth2Scopes.ROLE_CONNECTIONS_WRITE: return r.default.Messages.SCOPE_ROLE_CONNECTIONS_WRITE; case i.OAuth2Scopes.PRESENCES_READ: return r.default.Messages.SCOPE_PRESENCES_READ; case i.OAuth2Scopes.PRESENCES_WRITE: return r.default.Messages.SCOPE_PRESENCES_WRITE; case i.OAuth2Scopes.DM_CHANNELS_MESSAGES_READ: return r.default.Messages.SCOPE_DM_CHANNELS_MESSAGES_READ; case i.OAuth2Scopes.DM_CHANNELS_MESSAGES_WRITE: return r.default.Messages.SCOPE_DM_CHANNELS_MESSAGES_WRITE; case i.OAuth2Scopes.GATEWAY_CONNECT: return r.default.Messages.SCOPE_GATEWAY_CONNECT; default: return e } } function d(e) { return e.includes(i.OAuth2Scopes.MESSAGES_READ) ? r.default.Messages.OAUTH2_CAN_READ_NOTICE.format() : r.default.Messages.OAUTH2_CANNOT_READ_SEND_NOTICE.format() } }, 166148: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { OAuth2Prompts: function() { return i } }), (r = i || (i = {})).NONE = "none", r.CONSENT = "consent" }, 807989: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return C } }), n("789020"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("243814"), o = n("389507"), l = n("993365"), u = n("979200"), d = n("497309"), _ = n("950463"), c = n("757698"), E = n("630641"), I = n("912527"), T = n("833571"), f = n("630388"), S = n("709054"), h = n("941532"), A = n("713938"), m = n("981631"), N = n("689938"), p = n("236099"); let O = e => { switch (e) { case u.ApplicationDisclosure.IP_LOCATION: return _.default; case u.ApplicationDisclosure.DISPLAYS_ADVERTISEMENTS: return o.EmbedIcon; default: return null } }; function C(e) { var t; let n, { application: r, scopes: s, redirectUri: o, approximateGuildCount: l, isEmbeddedFlow: _, disclosures: C } = e, g = new Date(S.default.extractTimestamp(r.id)), L = (0, A.getSecurityMessage)(s), v = (0, f.hasFlag)(null !== (t = r.flags) && void 0 !== t ? t : 0, m.ApplicationFlags.EMBEDDED); if (null != o && !v && !_) { let e = new URL(o); n = null != e.host && e.host.length > 0 ? e.origin : e.href } return (0, i.jsxs)("div", { className: p.applicationDetails, children: [null != n ? (0, i.jsx)(R, { className: p.redirectWarning, icon: c.default, text: N.default.Messages.OAUTH2_DETAILS_REDIRECT.format({ origin: n }) }) : null, (0, i.jsx)(R, { icon: E.default, text: (0, h.getApplicationDetailsText)(r) }), (0, i.jsx)(R, { icon: d.default, text: N.default.Messages.OAUTH2_DETAILS_CREATION_DATE.format({ date: g }) }), s.includes(a.OAuth2Scopes.BOT) && null != l ? (0, i.jsx)(R, { icon: I.default, text: N.default.Messages.OAUTH2_DETAILS_GUILDS.format({ guildCount: l }) }) : null, (0, i.jsx)(R, { icon: T.default, text: L }), null != C ? C.map(e => { let t = (0, u.getTextForDisclosure)(e), n = O(e); return null != n && null != t ? (0, i.jsx)(R, { icon: n, text: t }) : null }) : null] }) } function R(e) { let { icon: t, text: n, className: r } = e; return (0, i.jsxs)("div", { className: s()(p.entry, r), children: [(0, i.jsx)(t, { className: p.entryIcon }), (0, i.jsx)(l.Text, { variant: "text-xs/medium", color: "text-muted", className: p.entryInner, children: n })] }) } }, 69580: function(e, t, n) { "use strict"; n.r(t), n.d(t, { OAuth2Authorize: function() { return ee }, OAuth2AuthorizeModal: function() { return $ }, OAuth2AuthorizePage: function() { return J }, getOAuth2AuthorizeProps: function() { return es }, openOAuth2Modal: function() { return er }, openOAuth2ModalWithCreateGuildModal: function() { return ei }, useOAuth2AuthorizeForm: function() { return et } }), n("47120"), n("411104"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("613828"), d = n("729594"), _ = n("373793"), c = n("243814"), E = n("149765"), I = n("442837"), T = n("693789"), f = n("952265"), S = n("21340"), h = n("922770"), A = n("893776"), m = n("367907"), N = n("702493"), p = n("728345"), O = n("979200"), C = n("560067"), R = n("341298"), g = n("703656"), L = n("973616"), v = n("598077"), D = n("314897"), M = n("828695"), y = n("700785"), P = n("591759"), U = n("807675"), b = n("489863"), G = n("228763"), w = n("422559"), k = n("713938"), B = n("166148"), V = n("807989"), x = n("260430"), F = n("668185"), H = n("407546"), Y = n("41259"), j = n("28752"), W = n("787025"), K = n("397394"), z = n("574384"), Z = n("981631"), X = n("689938"), Q = n("884103"); let q = "oauth2-authorize-header-id"; function J() { let e = (0, u.useLocation)(), t = a.useMemo(() => (0, U.parseOAuth2AuthorizeProps)(e.search), [e.search]); return (0, N.default)(), (0, s.jsx)(W.OAuth2Page, { children: (0, s.jsx)(ee, { ...t, showLogout: !0 }) }) } function $(e) { let { transitionState: t, ...n } = e; return (0, s.jsx)(W.OAuth2Modal, { transitionState: t, "aria-labelledby": q, children: (0, s.jsx)(ee, { ...n, inApp: !0, scrollable: !0 }) }) } function ee(e) { let { scrollable: t, ...n } = e, { header: i, body: r, footer: a, nextStep: o, appDetails: u } = et(n), d = (0, s.jsxs)(s.Fragment, { children: [(0, s.jsxs)("div", { className: Q.content, children: [i, r, null == o ? u : null] }), a] }); return t ? (0, s.jsx)("div", { className: l()(Q.authorize, { [Q.inApp]: n.inApp }), children: (0, s.jsx)(S.ScrollerThin, { orientation: "auto", children: d }) }) : (0, s.jsx)("div", { className: l()(Q.authorize, { [Q.inApp]: n.inApp }), children: (0, s.jsx)("div", { children: d }) }) } function et(e) { var t, n, i, r, o; let l, f, S, N, C, R, { clientId: W, responseType: J, redirectUri: $, codeChallenge: ee, codeChallengeMethod: et, state: en, nonce: ei, prompt: er, authorizations: es, scopes: ea, permissions: eo, guildId: el, channelId: eu, integrationType: ed, disableGuildSelect: e_ = !1, showLogout: ec = !1, cancelCompletesFlow: eE = !0, isTrustedName: eI = !1, isEmbeddedFlow: eT = !1, inApp: ef = !1, callback: eS, callbackWithoutPost: eh, onClose: eA, disclosures: em } = e, eN = null != ed ? null == es ? void 0 : es.get(ed) : void 0, ep = (0, u.useLocation)(), eO = (0, I.useStateFromStores)([M.default], () => M.default.hasLoadedExperiments); a.useEffect(() => { D.default.isAuthenticated() && !eO && A.default.getExperiments() }, [eO]); let [eC, eR] = a.useState(null), [eg, eL] = a.useState(null), [ev, eD] = a.useState(null), [eM, ey] = a.useState(!1), eP = null == eC ? void 0 : eC.guilds, [eU, eb] = a.useState(null != el ? el : null), [eG, ew] = a.useState(null != eu ? eu : null), [ek, eB] = a.useState(y.NONE), eV = a.useMemo(() => (null == eC ? void 0 : eC.user) != null ? new v.default(eC.user) : null, [null == eC ? void 0 : eC.user]), ex = a.useMemo(() => null == eP ? void 0 : eP.find(e => e.id === eU), [eP, eU]), [eF, eH] = a.useState(null), eY = a.useMemo(() => { var e; return null == eN && null == ed && (null !== (e = null == ea ? void 0 : ea.length) && void 0 !== e ? e : 0) === 0 && null == $ }, [eN, null == ea ? void 0 : ea.length, $, ed]), [ej, eW] = a.useState(null); a.useEffect(() => { eY && p.default.fetchApplication(W).then(e => eW(L.default.createFromServer(e))) }, [W, eY]); let eK = a.useMemo(() => { var e, t; return null == eF ? null : null == ej ? void 0 : null === (t = ej.integrationTypesConfig) || void 0 === t ? void 0 : null === (e = t[eF]) || void 0 === e ? void 0 : e.oauth2InstallParams }, [null == ej ? void 0 : ej.integrationTypesConfig, eF]), { requestedScopes: ez, accountScopes: eZ } = a.useMemo(() => { let e = eY ? null == eK ? void 0 : eK.scopes : ea, t = (0, U.filterScopes)(null != e ? e : []), n = k.OrderedAccountScopes.filter(e => t.includes(e)); return { requestedScopes: t, accountScopes: n } }, [null == eK ? void 0 : eK.scopes, ea, eY]), eX = a.useMemo(() => { var e; let t = eY ? E.deserialize(null !== (e = null == eK ? void 0 : eK.permissions) && void 0 !== e ? e : 0) : eo; return null != t ? t : y.NONE }, [null == eK ? void 0 : eK.permissions, eo, eY]), eQ = a.useRef(!1), [eq, eJ] = a.useState(null != em ? em : []), [e$, e0] = a.useState(null != em && em.length > 0); a.useEffect(() => { if (eQ.current) return; let e = async () => { eQ.current = !0; try { let { disclosures: e, allAcked: t } = await (0, O.getDisclosures)(W); e0(!t), eJ(e) } catch (n) { let { status: e, body: t } = n; if (401 === e) { (0, b.logoutWithRedirect)(ep); return } eD(Error(null != t.message ? t.message : "".concat(Object.keys(t)[0], ": ").concat(Object.values(t)[0]))) } finally { eQ.current = !1 } }; if (null == em) { if (!D.default.isAuthenticated()) { (0, b.logoutWithRedirect)(ep); return } e() } }, [W, ep, em, eJ, eD, e0, eL]); let e1 = a.useCallback(async e => { if (null != eh) { eh(e); return } if (!e && !eE) { null != eS && (eS({ application: null == eC ? void 0 : eC.application, guild: ex }), null == eA || eA()); return } if (null == eF) { eD(Error("No integration type was selected.")); return } try { ey(!0); let t = await (0, b.authorize)({ authorize: e, clientId: W, scopes: ez, responseType: J, redirectUri: $, codeChallenge: ee, codeChallengeMethod: et, state: en, nonce: ei, integrationType: eF, permissions: E.remove(eX, ek), guildId: eF === _.ApplicationIntegrationType.GUILD_INSTALL && null != eU ? eU : void 0, channelId: eF === _.ApplicationIntegrationType.GUILD_INSTALL && null != eG ? eG : void 0 }); if (e && await (0, O.ackDisclosures)(W, eq), null != eS) eS({ application: null == eC ? void 0 : eC.application, location: t.location, guild: ex }), null == eA || eA(); else if (null != t.location) { let { host: e, path: n } = d.parse(t.location); P.default.isDiscordHostname(e) && n === Z.Routes.OAUTH2_AUTHORIZED ? (0, g.transitionTo)(Z.Routes.OAUTH2_AUTHORIZED, { state: { application: null == eC ? void 0 : eC.application, guild: ex } }) : window.location = t.location } else ey(!1) } catch (t) { let e = t.body; (null == e ? void 0 : e.message) != null && "" !== e.message ? eD(Error(e.message)) : eD(e), eL(1), ey(!1) } }, [eh, eE, eS, null == eC ? void 0 : eC.application, ex, eA, W, ez, J, $, ee, et, en, ei, eX, ek, eU, eF, eG, eq]), e2 = a.useRef(!1), e3 = a.useCallback(async () => { if (!D.default.isAuthenticated()) { (0, b.logoutWithRedirect)(ep); return } if (!eQ.current) { if (!e2.current) { e2.current = !0; try { let e = null != eN ? eN : await (0, b.fetchAuthorization)({ clientId: W, scopes: ez, responseType: J, redirectUri: $, codeChallenge: ee, codeChallengeMethod: et, state: en, nonce: ei, integrationType: null != eF ? eF : void 0 }); eR((0, G.convertOAuth2Authorization)(e)), er === B.OAuth2Prompts.NONE && e.authorized && !e$ && e1(!0), (0, m.trackWithMetadata)(Z.AnalyticEvents.OAUTH2_AUTHORIZE_VIEWED, { application_id: e.application.id }) } catch (n) { let { status: e, body: t } = n; if (401 === e) { (0, b.logoutWithRedirect)(ep); return } eD(Error(null != t.message ? t.message : "".concat(Object.keys(t)[0], ": ").concat(Object.values(t)[0]))) } finally { e2.current = !1 } } } }, [ep, eN, W, ez, J, $, ee, et, en, ei, eF, er, e1, e$]), e4 = a.useMemo(() => { var e; return null != ej && eY ? Object.entries(null !== (e = ej.integrationTypesConfig) && void 0 !== e ? e : {}).filter(e => { let [t, n] = e; return null != n.oauth2InstallParams }).map(e => { let [t, n] = e; return Number(t) }) : [] }, [ej, eY]); if (a.useEffect(() => { if (null == eg && (!eY || null != ej) && eO) { if (null != eN) { var e; eH(null !== (e = eN.integration_type) && void 0 !== e ? e : _.ApplicationIntegrationType.GUILD_INSTALL), eL(1) } else e4.length > 1 ? eL(0) : (1 === e4.length ? eH(e4[0]) : null != ed ? eH(ed) : eH(_.ApplicationIntegrationType.GUILD_INSTALL), eL(1)) } }, [eN, e4, ej, eY, ed, eg, eO]), a.useEffect(() => { if (null == eF || null != eC || null != ev) return; eF === _.ApplicationIntegrationType.USER_INSTALL && (eb(null), ew(null)); let e = ez.filter(e => !k.ValidScopes.includes(e)); 0 === ez.length ? eD(Error("No scopes were provided.")) : e.length > 0 ? eD(Error("Invalid scope: ".concat(e[0]))) : (0, w.containsDisallowedPermission)(eX) ? eD(Error("Invalid permission(s) provided.")) : e3() }, [e$, e3, ez, eX, eF, eC, ev]), ev instanceof Error) return { body: (0, s.jsx)(K.OAuth2Error, { message: ev.message }) }; let e6 = !1, e7 = !0, e5 = !0, e8 = !0; switch (eg) { case null: return { body: (0, s.jsx)(h.Spinner, {}) }; case 0: if (null == ej) return { body: (0, s.jsx)(h.Spinner, {}) }; l = (0, s.jsx)(j.default, { inApp: ef, application: ej, onSelect: e => { eH(e), eR(null), eL(1) } }), e7 = !1, e5 = !1, e8 = ef; break; case 1: if (null == eC || null == eV || null == eF) return { body: (0, s.jsx)(h.Spinner, {}) }; let e9 = null == ev || ev instanceof Error ? {} : ev, te = null == eP ? void 0 : eP.sort((e, t) => e.name.toLowerCase().localeCompare(t.name.toLowerCase())), tt = eF === _.ApplicationIntegrationType.GUILD_INSTALL && ez.includes(c.OAuth2Scopes.WEBHOOK_INCOMING), tn = tt || eF === _.ApplicationIntegrationType.GUILD_INSTALL && (ez.includes(c.OAuth2Scopes.BOT) || ez.includes(c.OAuth2Scopes.APPLICATIONS_COMMANDS)); l = (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)(x.default, { application: eC.application, accountScopes: eZ, requestedScopes: ez, integrationType: eF, errors: e9, isTrustedName: eI }), tn ? (0, s.jsx)(H.default, { error: (null !== (n = null !== (t = e9[c.OAuth2Scopes.BOT]) && void 0 !== t ? t : e9[c.OAuth2Scopes.APPLICATIONS_COMMANDS]) && void 0 !== n ? n : [])[0], selectedGuildId: eU, onGuildChange: eb, guilds: null != te ? te : [], disabled: "" !== eU && null != eU && !0 === e_ }) : null, tt ? (0, s.jsx)(z.default, { error: (null !== (i = e9[c.OAuth2Scopes.WEBHOOK_INCOMING]) && void 0 !== i ? i : [])[0], selectedChannelId: eG, selectedGuildId: eU, onChannelChange: ew }) : null] }), ez.includes(c.OAuth2Scopes.BOT) && !E.equals(eX, y.NONE) && (S = 2), e4.length > 1 && (f = 0), e6 = tn && null == ex || tt && null == eG; break; case 2: if (null == eC) return { body: (0, s.jsx)(h.Spinner, {}) }; l = (0, s.jsx)(F.default, { application: eC.application, permissions: eX, deniedPermissions: ek, onPermissionsChange: (e, t) => { eB(n => e ? E.remove(n, t) : E.add(n, t)) }, guild: ex }), f = 1 } if (e7 && null != eC) { let e = null === (r = eC.bot) || void 0 === r ? void 0 : r.approximate_guild_count; N = (0, s.jsx)(V.default, { application: eC.application, scopes: ez, disclosures: eq, redirectUri: null !== (o = eC.redirect_uri) && void 0 !== o ? o : null, approximateGuildCount: void 0 !== e ? e : null, isEmbeddedFlow: eT }) } return e5 && null != eC && null != eV && (C = (0, s.jsx)(Y.default, { id: q, user: eV, application: eC.application, bot: eC.bot, accountScopes: eZ, showLogout: ec || !1, location: ep, isTrustedName: eI })), e8 && (R = (0, s.jsxs)("div", { className: Q.footer, children: [null != f ? (0, s.jsx)(T.Button, { look: T.Button.Looks.LINK, color: T.Button.Colors.PRIMARY, onClick: () => eL(f), children: X.default.Messages.BACK }) : (0, s.jsx)(T.Button, { look: T.Button.Looks.LINK, color: T.Button.Colors.PRIMARY, onClick: () => e1(!1), children: X.default.Messages.CANCEL }), 0 !== eg ? null != S ? (0, s.jsx)(T.Button, { onClick: () => eL(S), disabled: e6, children: X.default.Messages.CONTINUE }) : (0, s.jsx)(T.Button, { onClick: () => e1(!0), disabled: e6, submitting: eM, children: X.default.Messages.AUTHORIZE }) : null] })), { header: C, body: l, footer: R, nextStep: S, appDetails: N, sendAuthorize: e1 } } function en(e, t) { if (null == t.location || null != e && e(t)) return; let { host: n, path: i, query: r } = d.parse(t.location, !0), a = P.default.isDiscordHostname(n) || window.location.host === n; if (a && i === Z.Routes.OAUTH2_AUTHORIZED)(0, f.openModal)(e => (0, s.jsx)(W.OAuth2Modal, { ...e, "aria-labelledby": q, children: (0, s.jsx)(K.OAuth2AuthorizedSuccess, { guild: t.guild, application: t.application, onClose: e.onClose }) })); else if (a && (null == i ? void 0 : i.startsWith(Z.Routes.OAUTH2_ERROR)))(0, f.openModal)(e => { let t = r.error_description || r.error || X.default.Messages.OAUTH2_UNKNOWN_ERROR; return Array.isArray(t) && (t = t[0]), (0, s.jsx)(W.OAuth2Modal, { ...e, "aria-labelledby": q, children: (0, s.jsx)(K.OAuth2Error, { message: t, onClose: e.onClose }) }) }); else { var o; null === (o = window.open(t.location, "_blank")) || void 0 === o || o.focus() } } function ei(e, t) { if ((0, R.isMidjourneyOnboardingFlow)("create-guild-and-oauth2-modal")) { C.default.openCreateGuildModal({ onSuccess: n => er({ ...e, guildId: n }, t) }); return } er(e, t) } function er(e, t) { (0, f.openModal)(t => (0, s.jsx)($, { ...t, ...e, cancelCompletesFlow: !1, callback: en.bind(null, e.callback) }), { onCloseCallback: t }) } function es(e) { let { hostname: t = "", host: n, path: i, query: r } = d.parse(e); return null != i && null != r && (P.default.isDiscordHostname(t) || n === window.location.host) && (i.startsWith("/api".concat(Z.Endpoints.OAUTH2_AUTHORIZE)) || i.startsWith(Z.Routes.OAUTH2_AUTHORIZE)) ? (0, U.parseOAuth2AuthorizeProps)(r) : null }(r = i || (i = {}))[r.SELECT_INSTALL_TYPE = 0] = "SELECT_INSTALL_TYPE", r[r.AUTHORIZE_SCOPES = 1] = "AUTHORIZE_SCOPES", r[r.AUTHORIZE_BOT_PERMISSIONS = 2] = "AUTHORIZE_BOT_PERMISSIONS" }, 260430: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("207561"), o = n("373793"), l = n("243814"), u = n("260034"), d = n("993365"), _ = n("263704"), c = n("465670"), E = n("713938"), I = n("689938"), T = n("361375"); function f(e) { let { text: t, error: n, isFake: r } = e; return (0, i.jsxs)("div", { className: T.scope, children: [(0, i.jsx)("div", { className: s()(T.iconWrapper, r ? T.fakeScopeIcon : T.scopeIcon), children: r ? (0, i.jsx)(c.default, { className: T.icon }) : (0, i.jsx)(_.default, { className: T.icon }) }), (0, i.jsxs)("div", { className: T.scopeInner, children: [(0, i.jsx)(d.Text, { variant: "text-md/medium", children: t }), null != n ? (0, i.jsx)(d.Text, { variant: "text-xs/normal", color: "text-danger", children: n }) : null] })] }) } function S(e) { var t; let { application: n, accountScopes: r, requestedScopes: s, integrationType: d, errors: _, isTrustedName: c = !1 } = e, S = (0, a.useLazyValue)(() => E.FAKE_SCOPES[Math.floor(Math.random() * E.FAKE_SCOPES.length)]); if (0 === r.length) return null; let h = S(), A = c ? I.default.Messages.OAUTH2_SCOPES_LABEL_TRUSTED_NAME : I.default.Messages.OAUTH2_SCOPES_LABEL, m = d === o.ApplicationIntegrationType.USER_INSTALL && s.includes(l.OAuth2Scopes.APPLICATIONS_COMMANDS); return (0, i.jsxs)("div", { className: T.scopes, children: [(0, i.jsx)(u.Heading, { variant: "heading-deprecated-12/semibold", className: T.sectionLabel, children: A.format({ application: null !== (t = null == n ? void 0 : n.name) && void 0 !== t ? t : "" }) }), r.map(e => { var t; return (0, i.jsx)(f, { text: (0, E.getScopeName)(e, r), error: null == _ ? void 0 : null === (t = _[e]) || void 0 === t ? void 0 : t[0] }, e) }), m && (0, i.jsx)(f, { text: I.default.Messages.SCOPE_DM_YOU }), (0, i.jsx)(f, { text: h, isFake: !0 })] }) } }, 668185: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"), r = n("470079"), s = n("149765"), a = n("178940"), o = n("993365"), l = n("465670"), u = n("422559"), d = n("689938"), _ = n("466397"); function c(e) { let { application: t, permissions: n, deniedPermissions: c, onPermissionsChange: E, guild: I } = e, T = r.useMemo(() => s.invert(I.permissions), [I.permissions]); r.useEffect(() => { E(!1, s.filter(n, T)) }, [T, E, n]); let f = u.OrderedPermissions.filter(e => s.has(n, e)), S = f.filter(e => !s.has(T, e)).map(e => { let t = (0, u.getPermissionName)(e), n = !s.has(c, e); return (0, i.jsx)("li", { className: _.permission, children: (0, i.jsx)(a.Checkbox, { value: n, onChange: (t, n) => E(n, e), type: a.Checkbox.Types.INVERTED, children: (0, i.jsx)(o.Text, { variant: "text-md/normal", children: t }) }) }, String(e)) }), h = f.filter(e => s.has(T, e)).map(e => { let t = (0, u.getPermissionName)(e); return (0, i.jsxs)("li", { className: _.permission, children: [(0, i.jsx)("div", { className: _.disabledPermissionIcon, children: (0, i.jsx)(l.default, { className: _.icon }) }), (0, i.jsx)(o.Text, { variant: "text-md/normal", children: t })] }, String(e)) }); return (0, i.jsxs)("div", { className: _.botPermissions, children: [S.length > 0 ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(o.Text, { variant: "text-sm/medium", color: "header-secondary", className: _.permissionsLabel, children: d.default.Messages.OAUTH2_CONFIRM_BOT_PERMISSIONS.format({ applicationName: t.name, guildName: I.name }) }), (0, i.jsx)("ul", { className: _.permissionsList, children: S })] }) : null, h.length > 0 ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(o.Text, { variant: "text-sm/medium", color: "header-secondary", className: _.disabledPermissionsLabel, children: d.default.Messages.OAUTH2_DISABLED_PERMISSIONS.format({ applicationName: t.name }) }), (0, i.jsx)("ul", { className: _.permissionsList, children: h })] }) : null] }) } }, 407546: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("149765"), s = n("260034"), a = n("993365"), o = n("481060"), l = n("981631"), u = n("689938"), d = n("302191"); function _(e) { let { error: t, selectedGuildId: n, onGuildChange: _, guilds: c, disabled: E = !1 } = e, I = c.filter(e => r.has(e.permissions, l.Permissions.MANAGE_GUILD)).map(e => ({ value: e.id, label: e.name })); return (0, i.jsxs)("div", { className: d.selectorGroup, children: [(0, i.jsx)(s.Heading, { variant: "heading-deprecated-12/semibold", className: d.sectionLabel, children: u.default.Messages.OAUTH2_ADD_TO_GUILD }), null != t && "" !== t ? (0, i.jsx)(a.Text, { variant: "text-xs/normal", color: "text-danger", children: t }) : null, (0, i.jsx)(o.Select, { className: d.select, maxVisibleItems: 5, placeholder: u.default.Messages.OAUTH2_ADD_TO_GUILD_PLACEHOLDER, options: I, select: _, isDisabled: E, isSelected: e => e === n, serialize: e => e }), (0, i.jsx)(a.Text, { variant: "text-xs/medium", color: "header-secondary", className: d.label, children: u.default.Messages.OAUTH2_ADD_TO_GUILD_DESCRIPTION.format() })] }) } }, 41259: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }); var i = n("735250"); n("470079"); var r = n("974674"), s = n("1561"), a = n("993365"), o = n("467679"), l = n("768581"), u = n("630388"), d = n("489863"), _ = n("981631"), c = n("182294"), E = n("689938"), I = n("846288"); function T(e) { let { id: t, user: n, application: T, bot: f, accountScopes: S, showLogout: h, location: A, isTrustedName: m } = e, N = l.default.getApplicationIconURL({ id: T.id, icon: T.icon }), p = l.default.getUserAvatarURL(n); return (0, i.jsxs)("header", { id: t, className: I.header, children: [(0, i.jsxs)("div", { className: I.headerIcons, children: [(0, i.jsx)(r.Avatar, { src: N, size: c.AvatarSizes.SIZE_80, "aria-label": T.name }), (0, i.jsxs)("div", { className: I.ellipseGroup, children: [(0, i.jsx)("div", { className: I.ellipse }), (0, i.jsx)("div", { className: I.ellipse }), (0, i.jsx)("div", { className: I.ellipse })] }), (0, i.jsx)(r.Avatar, { src: p, size: c.AvatarSizes.SIZE_80, "aria-label": n.username })] }), !m && (0, i.jsx)(a.Text, { variant: "text-md/medium", color: "header-secondary", className: I.label, children: E.default.Messages.OAUTH2_THIRD_PARTY_APPLICATION }), (0, i.jsxs)(a.Text, { variant: "text-lg/bold", color: "header-primary", children: [T.name, null != f ? (0, i.jsx)(o.default, { className: I.botTag, verified: null != f.public_flags && (0, u.hasFlag)(f.public_flags, _.UserFlags.VERIFIED_BOT) }) : null] }), S.length > 0 ? (0, i.jsx)(a.Text, { variant: "text-md/normal", color: "header-secondary", className: I.label, children: E.default.Messages.OAUTH2_REQUESTS_ACCOUNT_ACCESS }) : (0, i.jsx)(a.Text, { variant: "text-md/normal", color: "header-secondary", className: I.label, children: E.default.Messages.OAUTH2_CONNECT_TO_DISCORD }), h ? (0, i.jsx)("div", { className: I.currentUser, children: (0, i.jsxs)(a.Text, { variant: "text-sm/normal", color: "text-muted", children: [E.default.Messages.OAUTH2_SIGNED_IN_AS.format({ userHook: () => (0, i.jsxs)(a.Text, { className: I.currentUserTag, variant: "text-sm/normal", children: [n.username, !n.isPomelo() && (0, i.jsx)(a.Text, { className: I.currentUserDiscriminator, variant: "text-sm/normal", children: "#".concat(n.discriminator) })] }, n.id) }), (0, i.jsx)(s.Clickable, { tag: "a", className: I.logoutLink, onClick: () => (0, d.logoutWithRedirect)(A), children: E.default.Messages.OAUTH2_LOGOUT })] }) }) : null] }) } }, 28752: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return N } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("373793"), l = n("974674"), u = n("40146"), d = n("780014"), _ = n("481060"), c = n("688465"), E = n("692437"), I = n("768581"), T = n("63063"), f = n("981631"), S = n("182294"), h = n("689079"), A = n("689938"), m = n("844703"); function N(e) { let { inApp: t, application: n, onSelect: s } = e, N = r.useMemo(() => I.default.getApplicationIconURL({ id: n.id, icon: n.icon }), [n.icon, n.id]), p = r.useMemo(() => [{ type: o.ApplicationIntegrationType.USER_INSTALL, icon: (0, d.UserPlusIcon), title: A.default.Messages.OAUTH2_INTEGRATION_SELECT_USER, subtitle: A.default.Messages.OAUTH2_INTEGRATION_SELECT_USER_SUBTITLE, beta: !0 }, { type: o.ApplicationIntegrationType.GUILD_INSTALL, icon: (0, u.ServerIcon), title: A.default.Messages.OAUTH2_INTEGRATION_SELECT_GUILD, subtitle: A.default.Messages.OAUTH2_INTEGRATION_SELECT_GUILD_SUBTITLE, beta: !1 }].filter(e => { var t, i; return (null === (i = n.integrationTypesConfig) || void 0 === i ? void 0 : null === (t = i[e.type]) || void 0 === t ? void 0 : t.oauth2InstallParams) != null }), [n.integrationTypesConfig]); return (0, i.jsxs)("div", { className: m.container, children: [(0, i.jsxs)("div", { className: m.header, children: [(0, i.jsx)(l.Avatar, { src: N, size: S.AvatarSizes.SIZE_80, "aria-label": n.name }), (0, i.jsx)(_.Heading, { variant: "heading-xl/bold", color: "header-primary", children: n.name })] }), (0, i.jsx)("ul", { className: m.rows, children: p.map(e => (0, i.jsxs)(_.Clickable, { tag: "li", className: a()(m.row, { [m.inApp]: t }), onClick: () => s(e.type), children: [(0, i.jsx)(e.icon, { width: 24, height: 24, className: m.leftIcon }), (0, i.jsxs)("div", { className: m.rowInner, children: [(0, i.jsxs)("div", { className: m.rowDetails, children: [(0, i.jsx)(_.Text, { variant: "text-md/medium", color: "interactive-active", children: e.title }), (0, i.jsx)(_.Text, { variant: "text-xs/medium", color: "text-muted", children: e.subtitle })] }), e.beta && (0, i.jsx)(c.default, {}), (0, i.jsx)(E.default, { className: m.rightIcon })] })] }, e.type)) }), (0, i.jsx)(_.Text, { variant: "text-xs/normal", color: "text-muted", className: m.learnMore, children: A.default.Messages.OAUTH2_INTEGRATION_SELECT_DETAILS.format({ betaUserLimit: h.APPLICATION_USER_INSTALL_BETA_USER_LIMIT, learnMoreUrl: T.default.getArticleURL(f.HelpdeskArticles.USING_APPS_FAQ) }) })] }) } }, 787025: function(e, t, n) { "use strict"; n.r(t), n.d(t, { OAuth2Modal: function() { return h }, OAuth2Page: function() { return S } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("466377"), l = n("481060"), u = n("252618"), d = n("612744"), _ = n("449934"), c = n("792125"), E = n("981631"), I = n("756286"), T = n("689938"), f = n("897456"); function S(e) { let { children: t, wrapperClassName: n, embedded: s } = e, [o, S] = r.useState(I.WaveStates.INITIAL), h = r.useCallback(e => { S(t => Math.max(t, e)) }, []); return (0, u.usePageTitle)({ location: T.default.Messages.OAUTH2_TITLE }), (0, i.jsx)(l.ThemeContextProvider, { theme: E.ThemeTypes.DARK, children: (0, i.jsx)(d.default, { embedded: s, className: a()((0, c.getThemeClass)(E.ThemeTypes.DARK), f.wave), splash: (0, _.getArtForPath)(), waveState: o, showLogo: !0, updateWaveState: h, children: (0, i.jsx)("div", { className: a()(f.oauth2Wrapper, n), children: t }) }) }) } function h(e) { let { children: t, transitionState: n, ...r } = e; return (0, i.jsx)(o.ModalRoot, { size: o.ModalSize.DYNAMIC, transitionState: n, className: f.oauth2Wrapper, ...r, children: t }) } }, 397394: function(e, t, n) { "use strict"; n.r(t), n.d(t, { OAuth2AuthorizedPage: function() { return g }, OAuth2AuthorizedSuccess: function() { return C }, OAuth2Error: function() { return R }, OAuth2ErrorPage: function() { return L }, OAuth2Success: function() { return O }, default: function() { return p } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("593473"), l = n("613828"), u = n("729594"), d = n("466377"), _ = n("922770"), c = n("993365"), E = n("481060"), I = n("252618"), T = n("703656"), f = n("769654"), S = n("626135"), h = n("787025"), A = n("981631"), m = n("689938"), N = n("111947"); function p(e) { let { message: t, footer: n, headerClassName: r, showsCloseWindowText: s, spinner: o, onClose: l } = e; return (0, I.usePageTitle)({ location: m.default.Messages.OAUTH2_TITLE }), (0, i.jsxs)(i.Fragment, { children: [null != l ? (0, i.jsx)(d.ModalCloseButton, { onClick: l, className: N.closeButton }) : null, (0, i.jsxs)("div", { className: N.wrapper, children: [o ? (0, i.jsx)(_.Spinner, {}) : null, (0, i.jsx)("div", { className: a()(N.header, r) }), (0, i.jsx)(c.Text, { variant: "text-md/normal", className: N.text, children: t }), null != n ? n : null, s ? (0, i.jsx)(c.Text, { variant: "text-xs/normal", color: "text-muted", className: N.cta, children: m.default.Messages.OAUTH2_MESSAGE_CTA }) : null] })] }) } function O(e) { return (0, i.jsx)(p, { ...e, headerClassName: N.headerSuccess }) } function C(e) { let { guild: t, application: n, ...s } = e, { onClose: a } = s, o = m.default.Messages.AUTHORIZED_SUCCESS, l = r.useCallback(() => { (null == t ? void 0 : t.id) != null && ((0, f.transitionToGuild)(null == t ? void 0 : t.id), null == a || a(), S.default.track(A.AnalyticEvents.OAUTH2_AUTHORIZE_SUCCESS_GO_TO_GUILD_CLICKED, { application_id: null == n ? void 0 : n.id, guild_id: null == t ? void 0 : t.id })) }, [a, null == n ? void 0 : n.id, null == t ? void 0 : t.id]), u = r.useCallback(() => { null == a || a(), S.default.track(A.AnalyticEvents.OAUTH2_AUTHORIZE_SUCCESS_CLOSE_CLICKED, { application_id: null == n ? void 0 : n.id }) }, [a, null == n ? void 0 : n.id]), d = r.useMemo(() => { if (null != n) return null != t ? m.default.Messages.AUTHORIZED_APP_TO_SERVER.format({ installedApplicationName: null == n ? void 0 : n.name, guildName: null == t ? void 0 : t.name }) : m.default.Messages.AUTHORIZED_APP.format({ installedApplicationName: null == n ? void 0 : n.name }); return m.default.Messages.AUTHORIZED_GENERIC }, [n, t]), _ = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(c.Text, { variant: "text-sm/normal", className: N.authorizedSuccessSubtext, children: d }), (null != t || null != a) && (0, i.jsxs)("div", { className: N.buttonsContainer, children: [null != t && (0, i.jsx)(E.Button, { fullWidth: !0, color: E.Button.Colors.BRAND, onClick: l, className: N.button, children: (null == t ? void 0 : t.name.length) > 30 ? m.default.Messages.OAUTH2_GO_TO_SERVER_DEFAULT_CTA : m.default.Messages.OAUTH2_GO_TO_SERVER_NAME_CTA.format({ guildName: null == t ? void 0 : t.name }) }), null != a && (0, i.jsx)(E.Button, { fullWidth: !0, color: E.Button.Colors.PRIMARY, onClick: u, className: N.button, children: m.default.Messages.CLOSE })] })] }); return r.useEffect(() => { S.default.track(A.AnalyticEvents.OAUTH2_AUTHORIZE_SUCCESS_VIEWED, { application_id: null == n ? void 0 : n.id }) }, [null == n ? void 0 : n.id]), (0, i.jsx)("div", { className: N.authorizedSuccessWrapper, children: (0, i.jsx)(O, { message: o, footer: _, ...s }) }) } function R(e) { return (0, i.jsx)(p, { ...e, headerClassName: N.headerFailure }) } function g() { var e, t; let n = (0, l.useLocation)(); return (0, i.jsx)(h.OAuth2Page, { children: (0, i.jsx)(C, { guild: null === (e = n.state) || void 0 === e ? void 0 : e.guild, application: null === (t = n.state) || void 0 === t ? void 0 : t.application, showsCloseWindowText: !0 }) }) } function L(e) { var t, n; let { location: s } = e; r.useEffect(() => { if (null == s) return; let e = null != document.referrer && "" !== document.referrer ? u.parse(document.referrer) : null; (null == e || e.host !== window.location.host || e.pathname !== A.Routes.OAUTH2_AUTHORIZE) && (0, T.transitionTo)(A.Routes.INDEX) }, [s]); let a = null != s ? (0, o.parse)(s.search) : {}, l = null !== (n = null !== (t = a.error_description) && void 0 !== t ? t : a.error) && void 0 !== n ? n : m.default.Messages.OAUTH2_UNKNOWN_ERROR; return (0, i.jsx)(h.OAuth2Page, { children: (0, i.jsx)(R, { message: l, showsCloseWindowText: !0 }) }) } }, 574384: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("260034"), a = n("993365"), o = n("481060"), l = n("489863"), u = n("689938"), d = n("302191"); function _(e) { var t; let { selectedGuildId: n, selectedChannelId: _, onChannelChange: c, error: E } = e, [I, T] = r.useState(null), f = r.useRef(!1); if (r.useEffect(() => { async function e(e) { let t = await (0, l.fetchChannels)(e); n === e && (t.sort((e, t) => e.name.localeCompare(t.name)), T({ guildId: e, channels: t }), f.current = !0) } T(null), null == n ? c(null) : e(n) }, [c, n]), r.useEffect(() => { if (!!f.current) null == I ? null != _ && c(null) : !I.channels.some(e => e.id === _) && c(null) }, [I, c, _, n]), null == n) return null; let S = null == I || I.guildId !== n ? [] : (null !== (t = null == I ? void 0 : I.channels) && void 0 !== t ? t : []).map(e => ({ value: e.id, label: e.name })); return (0, i.jsxs)("div", { className: d.selectorGroup, children: [(0, i.jsx)(s.Heading, { variant: "heading-deprecated-12/semibold", className: d.sectionLabel, children: u.default.Messages.OAUTH2_ADD_WEBHOOK_INCOMING }), null != E && "" !== E ? (0, i.jsx)(a.Text, { variant: "text-xs/normal", color: "text-danger", children: E }) : null, (0, i.jsx)(o.Select, { className: d.select, maxVisibleItems: 5, select: c, placeholder: u.default.Messages.SCOPE_WEBHOOK_INCOMING_CHANNEL_PLACEHOLDER, options: S, isSelected: e => e === _, serialize: e => e, renderOptionLabel: e => (0, i.jsx)(a.Text, { variant: "text-md/normal", children: e.label }), renderOptionValue: e => (0, i.jsx)(a.Text, { variant: "text-md/normal", children: e[0].label }) }), (0, i.jsx)(a.Text, { variant: "text-xs/normal", color: "header-secondary", className: d.label, children: u.default.Messages.SCOPE_WEBHOOK_INCOMING_DESCRIPTION })] }) } }, 152376: function(e, t, n) { "use strict"; n.r(t), n.d(t, { bulkOptInChannels: function() { return O }, dimissFavoriteSuggestion: function() { return L }, setGuildOptIn: function() { return C }, setIsFavorite: function() { return R }, setOptInChannel: function() { return A }, updateOptInChannelsBatched: function() { return p }, updateOptInChannelsImmediate: function() { return m } }), n("47120"); var i = n("392711"), r = n("524437"), s = n("570140"), a = n("92114"), o = n("367907"), l = n("962086"), u = n("160404"), d = n("149071"), _ = n("675478"), c = n("592125"), E = n("9156"), I = n("626135"), T = n("630388"), f = n("621600"), S = n("981631"), h = n("526761"); function A(e, t, n, i) { if (null == e) return; if (u.default.isFullServerPreview(e)) { (0, l.updateImpersonatedChannels)(e, n ? [t] : [], n ? [] : [t]); return } let r = E.default.getChannelIdFlags(e, t); !n && (r = (0, T.setFlag)(r, h.ChannelNotificationSettingsFlags.FAVORITED, !1)); let a = (0, f.getCurrentChannelSettings)(e, t), _ = { flags: (0, T.setFlag)(r, h.ChannelNotificationSettingsFlags.OPT_IN_ENABLED, n) }; d.default.saveUserGuildSettingsBulk({ [e]: { channel_overrides: { [t]: _ } } }), s.default.dispatch({ type: "USER_GUILD_SETTINGS_CHANNEL_UPDATE", guildId: e, channelId: t, settings: _ }), (0, f.trackChannelNotificationSettingsUpdate)(e, t, _, a, f.NotificationLabel.optedIn(n), i), g(e), I.default.track(S.AnalyticEvents.CHANNEL_LIST_UPDATED, { ...(0, o.collectGuildAnalyticsMetadata)(e), ...(0, o.collectChannelAnalyticsMetadata)(c.default.getChannel(t)), action_type: n ? "add" : "remove", location: i }) } function m(e, t, n, i) { if (null == e) return; if (u.default.isFullServerPreview(e)) { (0, l.updateImpersonatedChannels)(e, n ? [t] : [], n ? [] : [t]), (0, l.updateImpersonatedData)(e, { optInEnabled: !0 }); return } let r = E.default.getChannelIdFlags(e, t); !n && (r = (0, T.setFlag)(r, h.ChannelNotificationSettingsFlags.FAVORITED, !1)); let a = (0, f.getCurrentChannelSettings)(e, t), _ = { flags: (0, T.setFlag)(r, h.ChannelNotificationSettingsFlags.OPT_IN_ENABLED, n) }; if (!E.default.isOptInEnabled(e)) { let n = (0, T.setFlag)(E.default.getGuildFlags(e), h.GuildNotificationSettingsFlags.OPT_IN_CHANNELS_ON, !0); d.default.saveUserGuildSettingsBulk({ [e]: { channel_overrides: { [t]: _ }, flags: n } }) } s.default.dispatch({ type: "USER_GUILD_SETTINGS_CHANNEL_UPDATE", guildId: e, channelId: t, settings: _ }), (0, f.trackChannelNotificationSettingsUpdate)(e, t, _, a, f.NotificationLabel.optedIn(n), i), g(e), I.default.track(S.AnalyticEvents.CHANNEL_LIST_UPDATED, { ...(0, o.collectGuildAnalyticsMetadata)(e), ...(0, o.collectChannelAnalyticsMetadata)(c.default.getChannel(t)), action_type: n ? "add" : "remove", location: i }) } async function N(e, t) { if (!(null == e || u.default.isFullServerPreview(e))) await d.default.saveUserGuildSettingsBulk({ [e]: { channel_overrides: t } }), s.default.dispatch({ type: "USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES", guildId: e, updates: t }) } let p = (0, i.debounce)((e, t) => N(e, t), 1e3); function O(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 ? arguments[3] : void 0; if (null == e) return; if (u.default.isFullServerPreview(e)) { (0, l.updateImpersonatedChannels)(e, t, []), n && (0, l.updateImpersonatedData)(e, { optInEnabled: !0 }); return } let r = {}; if (t.forEach(t => { let n = E.default.getChannelIdFlags(e, t); r[t] = { flags: (0, T.setFlag)(n, h.ChannelNotificationSettingsFlags.OPT_IN_ENABLED, !0) } }), n) { let t = (0, T.setFlag)(E.default.getGuildFlags(e), h.GuildNotificationSettingsFlags.OPT_IN_CHANNELS_ON, !0); a.default.updateGuildAndChannelNotificationSettings(e, { flags: t, channel_overrides: r }, f.NotificationLabels.OptedIn), I.default.track(S.AnalyticEvents.CHANNEL_LIST_UPDATED, { ...(0, o.collectGuildAnalyticsMetadata)(e), action_type: "add_many_and_enable_guild", location: i }) } else a.default.updateChannelOverrideSettingsBulk(e, r, f.NotificationLabels.OptedIn), I.default.track(S.AnalyticEvents.CHANNEL_LIST_UPDATED, { ...(0, o.collectGuildAnalyticsMetadata)(e), action_type: "add_many", location: i }) } function C(e, t, n) { if (u.default.isFullServerPreview(e)) { (0, l.updateImpersonatedData)(e, { optInEnabled: t }); return } let i = E.default.getGuildFlags(e); a.default.updateGuildNotificationSettings(e, { flags: (0, T.setFlag)(i, h.GuildNotificationSettingsFlags.OPT_IN_CHANNELS_ON, t) }, f.NotificationLabel.optedIn(t)), I.default.track(S.AnalyticEvents.CHANNEL_LIST_UPDATED, { ...(0, o.collectGuildAnalyticsMetadata)(e), action_type: t ? "guild_enabled" : "guild_disabled", location: n }) } function R(e, t, n, i) { if (null == e || u.default.isFullServerPreview(e)) return; let r = E.default.getChannelIdFlags(e, t); !(0, T.hasFlag)(r, h.ChannelNotificationSettingsFlags.OPT_IN_ENABLED) && n && (r = (0, T.setFlag)(r, h.ChannelNotificationSettingsFlags.OPT_IN_ENABLED, !0)), a.default.updateChannelOverrideSettings(e, t, { flags: (0, T.setFlag)(r, h.ChannelNotificationSettingsFlags.FAVORITED, n) }, f.NotificationLabel.favorited(n)), I.default.track(S.AnalyticEvents.CHANNEL_LIST_UPDATED, { ...(0, o.collectGuildAnalyticsMetadata)(e), action_type: n ? "favorited" : "unfavorited", location: i }) } function g(e) { (0, _.updateUserGuildSettings)(e, e => (!(0, T.hasFlag)(e.guildOnboardingProgress, r.GuildOnboardingProgress.GUILD_NOTICE_CLEARED) || !!(0, T.hasFlag)(e.guildOnboardingProgress, r.GuildOnboardingProgress.GUILD_NOTICE_SHOWN)) && (e.guildOnboardingProgress = (0, T.addFlag)(e.guildOnboardingProgress, r.GuildOnboardingProgress.GUILD_NOTICE_CLEARED), e.guildOnboardingProgress = (0, T.setFlag)(e.guildOnboardingProgress, r.GuildOnboardingProgress.GUILD_NOTICE_SHOWN, !1), !0), _.UserSettingsDelay.INFREQUENT_USER_ACTION) } function L(e, t) { s.default.dispatch({ type: "DISMISS_FAVORITE_SUGGESTION", guildId: e, channelId: t }) } }, 398758: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isOptInEnabledForGuild: function() { return d }, useOptInEnabledForGuild: function() { return u }, useShouldShowOnboardingAdminUpsellForGuild: function() { return _ } }); var i = n("442837"), r = n("430824"), s = n("496675"), a = n("9156"), o = n("594174"), l = n("981631"); function u(e) { return (0, i.useStateFromStores)([a.default, r.default, o.default], () => { var t, n, i, s; let u = a.default.isOptInEnabled(e), d = null !== (i = null === (t = r.default.getGuild(e)) || void 0 === t ? void 0 : t.hasFeature(l.GuildFeatures.COMMUNITY)) && void 0 !== i && i, _ = null !== (s = null === (n = o.default.getCurrentUser()) || void 0 === n ? void 0 : n.isStaff()) && void 0 !== s && s; return u && (d || _) }) } function d(e) { let t = r.default.getGuild(e), n = o.default.getCurrentUser(); return null != e && null != t && null != n && (t.hasFeature(l.GuildFeatures.COMMUNITY) || n.isStaff()) && a.default.isOptInEnabled(e) } function _(e) { return (0, i.useStateFromStores)([r.default, s.default], () => { var t; let n = r.default.getGuild(e), i = s.default.can(l.Permissions.MANAGE_GUILD, n), a = s.default.can(l.Permissions.MANAGE_ROLES, n), o = null !== (t = null == n ? void 0 : n.hasFeature(l.GuildFeatures.GUILD_ONBOARDING_EVER_ENABLED)) && void 0 !== t && t; return null != n && i && a && !o }) } }, 658785: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-11_keybind_indicators", label: "Overlay Keybind Indicators", defaultConfig: { showKeybindIndicators: !1 }, treatments: [{ id: 1, label: "Show Keybind Indicators - Overlay", config: { showKeybindIndicators: !0 } }] }); t.default = i }, 987650: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BackgroundOpacityClasses: function() { return h }, OVERLAY_SUPPORTED: function() { return f }, OpacityBounds: function() { return A }, OverlayMethod: function() { return I }, OverlayNotificationAction: function() { return E }, OverlayNotificationGroup: function() { return _ }, OverlayNotificationType: function() { return c }, OverlayNudgeTypes: function() { return u }, getOverlayNotificationGroup: function() { return S } }); var i, r, s, a, o, l, u, d, _, c, E, I, T = n("358085"); let f = T.isPlatformEmbedded && ((0, T.isWindows)() || !1); function S(e) { switch (e) { case "News Nudge": case "Welcome Nudge": case "Go Live Nudge": case "Go Live Non Voice Nudge": case "Start Broadcast Notification": return 0; case "Text Chat": return 1; case "Activity User Join": case "Activity Invite": return 3; case "Incoming Call": return 2; case "Clips Reminder Notification": case "Clips Notification": return 4; default: return 5 } }(i = u || (u = {}))[i.WELCOME = 0] = "WELCOME", i[i.NEWS = 1] = "NEWS", i[i.GO_LIVE_VOICE = 2] = "GO_LIVE_VOICE", i[i.GO_LIVE_NON_VOICE = 3] = "GO_LIVE_NON_VOICE", i[i.BROADCAST = 4] = "BROADCAST", i[i.KEYBIND_INDICATORS = 5] = "KEYBIND_INDICATORS", (r = d || (d = {})).PRIMARY = "PRIMARY", r.BRAND = "BRAND", r.DANGER = "DANGER", (s = _ || (_ = {}))[s.Nudge = 0] = "Nudge", s[s.TextChat = 1] = "TextChat", s[s.VoiceCall = 2] = "VoiceCall", s[s.Activity = 3] = "Activity", s[s.Clips = 4] = "Clips", s[s.Other = 5] = "Other", (a = c || (c = {})).NewsNudge = "News Nudge", a.WelcomeNudge = "Welcome Nudge", a.TextChat = "Text Chat", a.ActivityUserJoin = "Activity User Join", a.ActivityInvite = "Activity Invite", a.IncomingCall = "Incoming Call", a.GoLiveNudge = "Go Live Nudge", a.GoLiveNonVoiceNudge = "Go Live Non Voice Nudge", a.OverlayCrashed = "Overlay Crashed", a.StartBroadcastNotification = "Start Broadcast Notification", a.ClipsReminderNotification = "Clips Reminder Notification", a.ClipsNotification = "Clips Notification", a.KeybindIndicatorsNotification = "Keybind Indicators Notification", (o = E || (E = {}))[o.Viewed = 0] = "Viewed", o[o.Clicked = 1] = "Clicked"; let h = Object.freeze({ LOW: "background-opacity-low", MEDIUM: "background-opacity-medium", HIGH: "background-opacity-high", FULL: "background-opacity-full", DISABLED: null }); (l = I || (I = {}))[l.Disabled = 0] = "Disabled", l[l.Hook = 1] = "Hook", l[l.OutOfProcess = 2] = "OutOfProcess"; let A = Object.freeze({ BOTTOM: 0, LOWER: .25, UPPER: .75, TOP: 1 }) }, 454991: function(e, t, n) { "use strict"; n.r(t), n.d(t, { OverlayStoredSettings: function() { return l } }); var i, r, s = n("433517"), a = n("987650"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(i = r || (r = {})).Version1 = "OverlayStore", i.Version2 = "overlayEnabled", i.Version3 = "OverlayStore3"; class l { static get enabled() { return l.load().enabled } static get legacyEnabled() { return l.load().legacyEnabled } static update(e) { let t = l.load(); "boolean" == typeof e.enabled && (t.enabled = e.enabled), "boolean" == typeof e.legacyEnabled && (t.legacyEnabled = e.legacyEnabled), t.save() } save() { let e = { enabled: this.enabled, legacyEnabled: this.legacyEnabled }; s.Storage.set("OverlayStore3", e) } static load() { return null == l._loaded && (l._loaded = l.loadInternal()), l._loaded } static loadInternal() { let e = s.Storage.get("OverlayStore"); if (null != e) { let t = new l("boolean" == typeof e.enabled ? e.enabled : a.OVERLAY_SUPPORTED, !1); return t.save(), s.Storage.remove("OverlayStore"), t } let t = s.Storage.get("overlayEnabled"); if (null != t) { let e = new l("boolean" == typeof t ? t : a.OVERLAY_SUPPORTED, !1); return e.save(), s.Storage.remove("overlayEnabled"), e } let n = s.Storage.get("OverlayStore3"); if (null != n) { var i, r; return new l(null !== (i = n.enabled) && void 0 !== i ? i : a.OVERLAY_SUPPORTED, null !== (r = n.legacyEnabled) && void 0 !== r && r) } let o = new l(a.OVERLAY_SUPPORTED, !1); return o.save(), o } constructor(e, t) { o(this, "enabled", void 0), o(this, "legacyEnabled", void 0), this.enabled = e, this.legacyEnabled = t } } o(l, "_loaded", null) }, 633565: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("261470"); function r(e, t) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : new i.default; return n.e("27601").then(n.bind(n, "746532")).then(n => { let { default: i } = n; return i(e, t, r) }) } }, 725319: function(e, t, n) { "use strict"; function i() { return !0 } n.r(t), n.d(t, { default: function() { return i } }) }, 770555: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ id: "2023-11_adyen_auth_without_capture", label: "Adyen auth without capture rollout", kind: "user", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); t.default = i }, 812169: function(e, t, n) { "use strict"; n.r(t), n.d(t, { reducedPaymentInfoExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ id: "2023-06_reduced_payment_method_address_info", label: "Reduced Payment Method Address Info", kind: "user", defaultConfig: { bucket: 0, enabled: !1 }, treatments: [{ id: 1, label: "Simplify address form", config: { bucket: 1, enabled: !0 } }, { id: 2, label: "Partial address in card form", config: { bucket: 2, enabled: !0 } }] }); function r() { let { autoTrackExposure: e } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : { autoTrackExposure: !0 }; return i.getCurrentConfig({ location: "2b69fe_1" }, { autoTrackExposure: e }) } }, 583046: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("442837"), r = n("509545"), s = n("212895"), a = n("474936"), o = n("231338"); function l(e) { var t, n; let { activeSubscription: l, skuIDs: u, paymentSourceId: d, isGift: _ } = e; u = u.filter(e => e !== a.PremiumSubscriptionSKUs.NONE); let c = (0, i.useStateFromStores)([r.default], () => { let e = r.default.getPlanIdsForSkus(u).filter(e => !_ || a.PREMIUM_PLANS.has(e)); return e.length > 0 ? r.default.get(e[0]) : null }), E = null == c ? [] : (0, s.getCurrencies)(c.id, d, _), I = null !== (n = null !== (t = E.find(e => e === (null == l ? void 0 : l.currency))) && void 0 !== t ? t : E[0]) && void 0 !== n ? n : o.CurrencyCodes.USD; return { ...(0, s.useCurrencyWithPaymentSourceChange)(I, null == c ? void 0 : c.id, d, _, u), currencies: E } } }, 74179: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("355467"), a = n("853872"); function o(e) { let { isGift: t, activeSubscription: n } = e, { defaultPaymentSourceId: o, paymentSources: l, hasFetchedPaymentSources: u } = (0, r.useStateFromStoresObject)([a.default], () => ({ defaultPaymentSourceId: a.default.defaultPaymentSourceId, paymentSources: a.default.paymentSources, hasFetchedPaymentSources: a.default.hasFetchedPaymentSources })), d = (e, t, n) => e || (null == t ? void 0 : t.paymentSourceId) == null ? n : t.paymentSourceId, [_, c] = i.useState(() => d(t, n, o)); return i.useEffect(() => { u ? c(d(t, n, o)) : (0, s.fetchPaymentSources)() }, [u, t, n, o]), { paymentSources: l, hasPaymentSources: Object.keys(l).length > 0, paymentSourceId: _, setPaymentSourceId: c, hasFetchedPaymentSources: u, defaultPaymentSource: null != o ? l[o] : null } } }, 963249: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }); var i = n("735250"); n("470079"); var r = n("153832"), s = n("481060"), a = n("976255"), o = n("667"), l = n("138464"), u = n("594174"), d = n("626135"), _ = n("585483"), c = n("74538"), E = n("981631"), I = n("474936"); function T(e) { let { initialPlanId: t, followupSKUInfo: T, onClose: f, onComplete: S, onSubscriptionConfirmation: h, analyticsLocations: A, analyticsObject: m, analyticsLocation: N, analyticsSourceLocation: p, isGift: O = !1, giftMessage: C, subscriptionTier: R, trialId: g, postSuccessGuild: L, openInvoiceId: v, applicationId: D, referralTrialOfferId: M, giftRecipient: y, returnRef: P, subscription: U, skipConfirm: b } = null != e ? e : {}, G = !1, w = (0, r.v4)(), k = u.default.getCurrentUser(), B = (0, c.isPremiumExactly)(k, I.PremiumTypes.TIER_2); (0, s.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("96427"), n.e("40326"), n.e("23357"), n.e("29549"), n.e("15972"), n.e("6416"), n.e("38674"), n.e("43906"), n.e("31605"), n.e("54167"), n.e("57878"), n.e("32776"), n.e("8016"), n.e("95900"), n.e("17938"), n.e("84992"), n.e("19959"), n.e("40146")]).then(n.bind(n, "7305")); return n => { let { onClose: r, ...s } = n; return (0, i.jsx)(e, { ...s, loadId: w, subscriptionTier: R, skuId: (0, c.castPremiumSubscriptionAsSkuId)(R), isGift: O, giftMessage: C, giftRecipient: y, initialPlanId: t, followupSKUInfo: T, onClose: (e, t) => { r(), null == f || f(e), e && (null == h || h(), !O && null != t && t === I.PremiumSubscriptionSKUs.TIER_2 && !B && _.ComponentDispatch.dispatch(E.ComponentActions.PREMIUM_SUBSCRIPTION_CREATED)) }, onComplete: () => { G = !0, null == S || S(), !O && (0, l.setCanPlayWowMoment)(!0) }, onSubscriptionConfirmation: h, analyticsLocations: A, analyticsObject: m, analyticsLocation: N, analyticsSourceLocation: p, trialId: g, postSuccessGuild: L, planGroup: I.ORDERED_PREMIUM_SUBSCRIPTION_PLANS, openInvoiceId: v, applicationId: D, referralTrialOfferId: M, returnRef: P, subscription: U, skipConfirm: !!b }) } }, { modalKey: "payment-modal", onCloseCallback: () => { !G && d.default.track(E.AnalyticEvents.PAYMENT_FLOW_CANCELED, { load_id: w, payment_type: E.PurchaseTypeToAnalyticsPaymentType[E.PurchaseTypes.SUBSCRIPTION], location: null != N ? N : m, source: p, subscription_type: E.SubscriptionTypes.PREMIUM, is_gift: O, eligible_for_trial: null != g, application_id: D, location_stack: A }), (0, a.clearError)(), (0, o.clearPurchaseTokenAuthState)(), null == f || f(G), G && (null == h || h()) } }) } }, 877215: function(e, t, n) { "use strict"; function i(e) { (0, n("226106").default)(e) } n.r(t), n.d(t, { default: function() { return i } }) }, 226106: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("952265"); function s(e) { (0, r.openModalLazy)(async () => { let { default: t } = await n.e("60082").then(n.bind(n, "874406")); return n => (0, i.jsx)(t, { ...n, incomingRequestCount: e }) }) } }, 889161: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getManageResourcePermissions: function() { return T }, useManageResourcePermissions: function() { return I } }), n("47120"); var i = n("470079"), r = n("149765"), s = n("442837"), a = n("601964"); n("984933"); var o = n("496675"), l = n("594174"); n("700785"); var u = n("85243"), d = n("231338"); let _ = { canCreateExpressions: !1, canCreateGuildEvent: !1, canManageAllExpressions: !1, canManageAllEvents: !1, canManageGuildExpression: () => !1, canManageGuildEvent: () => !1 }, c = (e, t, n, i) => { if (null == e) return !1; if (n) return !0; if ("creator_id" in e) return i && null != t && e.creator_id === t.id; if ("userId" in e) return i && null != t && e.userId === t.id; if ("user" in e) { var r; return i && null != t && (null === (r = e.user) || void 0 === r ? void 0 : r.id) === t.id } return !1 }, E = e => { if (null == e) return [d.Permissions.CREATE_EVENTS, d.Permissions.MANAGE_EVENTS]; let t = u.CREATE_GUILD_EVENT_CORE_PERMISSIONS; return e.isGuildStageVoice() ? t = u.CREATE_GUILD_EVENT_STAGE_CHANNEL_PERMISSIONS : e.isGuildVoice() && (t = u.CREATE_GUILD_EVENT_VOICE_CHANNEL_PERMISSIONS), [r.combine(t, d.Permissions.CREATE_EVENTS), r.combine(t, d.Permissions.MANAGE_EVENTS)] }, I = e => { let [t, n] = e instanceof a.default ? [d.Permissions.CREATE_EVENTS, d.Permissions.MANAGE_EVENTS] : E(e), [r, u, I, T] = (0, s.useStateFromStoresArray)([o.default], () => [o.default.can(d.Permissions.CREATE_GUILD_EXPRESSIONS, e), o.default.can(d.Permissions.MANAGE_GUILD_EXPRESSIONS, e), o.default.can(t, e), o.default.can(n, e)]), f = (0, s.useStateFromStores)([l.default], () => l.default.getCurrentUser()), S = i.useCallback(e => c(e, f, u, r), [r, u, f]), h = i.useCallback(e => c(e, f, T, I), [T, I, f]); return null == e ? _ : { canCreateExpressions: r, canCreateGuildEvent: I, canManageAllExpressions: u, canManageAllEvents: T, canManageGuildExpression: S, canManageGuildEvent: h } }, T = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : o.default, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : l.default, [i, r] = e instanceof a.default ? [d.Permissions.CREATE_EVENTS, d.Permissions.MANAGE_EVENTS] : E(e), s = t.can(d.Permissions.CREATE_GUILD_EXPRESSIONS, e), u = t.can(d.Permissions.MANAGE_GUILD_EXPRESSIONS, e), I = t.can(i, e), T = t.can(r, e), f = n.getCurrentUser(); return null == e ? _ : { canCreateExpressions: s, canCreateGuildEvent: I, canManageAllExpressions: u, canManageAllEvents: T, canManageGuildExpression: e => c(e, f, u, s), canManageGuildEvent: e => c(e, f, T, I) } } }, 64078: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearMessageCombo: function() { return d }, updateCombo: function() { return u }, updateComboOnMessageSend: function() { return _ }, updatePoggermodeSettings: function() { return l } }); var i = n("570140"), r = n("314897"), s = n("351780"), a = n("843693"), o = n("112606"); function l(e) { i.default.dispatch({ type: "POGGERMODE_SETTINGS_UPDATE", settings: e }); let t = { ...s.default.getState(), ...e }; (0, o.default)(t) } function u(e) { i.default.dispatch({ type: "POGGERMODE_UPDATE_COMBO", ...e }) } function d(e) { i.default.dispatch({ type: "POGGERMODE_UPDATE_MESSAGE_COMBO", comboMessage: { ...e, displayed: !0 } }) } function _(e, t) { var n; let s = r.default.getId(), o = a.default.getUserCombo(s, e); null != o && i.default.dispatch({ type: "POGGERMODE_UPDATE_MESSAGE_COMBO", comboMessage: { combo: o, channelId: e, messageId: t, displayed: !1 } }); let l = null != o && (null == o ? void 0 : o.value) > 0 ? (null !== (n = null == o ? void 0 : o.multiplier) && void 0 !== n ? n : 0) + 1 : 1; i.default.dispatch({ type: "POGGERMODE_UPDATE_COMBO", channelId: e, userId: s, multiplier: l, value: 0 }) } }, 524484: function(e, t, n) { "use strict"; var i, r, s, a, o, l; n.r(t), n.d(t, { ConfettiLocation: function() { return i }, SHAKE_STEPS: function() { return d }, SHAKE_STEP_DIVIDER: function() { return _ }, ShakeLevel: function() { return s }, ShakeLocation: function() { return r } }), n("724458"), n("47120"), (a = i || (i = {}))[a.CHAT_INPUT = 0] = "CHAT_INPUT", a[a.REACTION = 1] = "REACTION", a[a.MEMBER_USER = 2] = "MEMBER_USER", a[a.CALL_TILE = 3] = "CALL_TILE", (o = r || (r = {}))[o.CHAT_INPUT = 0] = "CHAT_INPUT", o[o.VOICE_USER = 1] = "VOICE_USER", o[o.MENTION = 2] = "MENTION", (l = s || (s = {}))[l.LEVEL_1 = 0] = "LEVEL_1", l[l.LEVEL_2 = 1] = "LEVEL_2", l[l.LEVEL_3 = 2] = "LEVEL_3", l[l.LEVEL_4 = 3] = "LEVEL_4", l[l.LEVEL_5 = 4] = "LEVEL_5"; let u = { 0: [ [1, 1e-4], [25, .05], [50, .1], [100, .5], [250, 1], [500, 2], [1e3, 3], [9001, 4] ], 1: [ [1, 1e-4], [25, .25], [50, .5], [100, 1], [250, 2.5], [500, 5], [1e3, 7.5], [9001, 10] ], 2: [ [1, .001], [25, .5], [50, 1], [100, 2], [250, 4], [500, 8], [1e3, 12], [9001, 16] ], 3: [ [1, .25], [25, .75], [50, 1], [100, 2], [250, 4], [500, 8], [1e3, 20], [9001, 50] ], 4: [ [1, .001], [25, .5], [50, 1], [100, 2], [250, 5], [500, 10], [1e3, 100], [9001, 1e4] ] }, d = Object.keys(u).reduce((e, t) => ({ ...e, [t]: u[t].map(e => { let [t] = e; return t }) }), { 0: [], 1: [], 2: [], 3: [], 4: [] }), _ = Object.keys(u).reduce((e, t) => ({ ...e, [t]: u[t].map(e => { let [t, n] = e; return n }) }), { 0: [], 1: [], 2: [], 3: [], 4: [] }) }, 351780: function(e, t, n) { "use strict"; n.r(t); var i, r = n("392711"), s = n("442837"), a = n("570140"), o = n("524484"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = !1, d = { settingsVisible: !1, enabled: !1, combosEnabled: !0, combosRequiredCount: 5, comboSoundsEnabled: !0, screenshakeEnabled: !0, screenshakeEnabledLocations: { [o.ShakeLocation.CHAT_INPUT]: !0, [o.ShakeLocation.VOICE_USER]: !1, [o.ShakeLocation.MENTION]: !1 }, shakeIntensity: 1, confettiEnabled: !0, confettiEnabledLocations: { [o.ConfettiLocation.CHAT_INPUT]: !0, [o.ConfettiLocation.REACTION]: !0, [o.ConfettiLocation.MEMBER_USER]: !0, [o.ConfettiLocation.CALL_TILE]: !0 }, confettiSize: 16, confettiCount: 5, warningSeen: !1 }, _ = (0, r.cloneDeep)(d); class c extends(i = s.default.DeviceSettingsStore) { initialize(e) { _ = { ..._, ...e } } getUserAgnosticState() { return _ } get settingsVisible() { return _.settingsVisible } isEnabled() { let { confettiLocation: e, shakeLocation: t } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = null == e || _.confettiEnabled && _.confettiEnabledLocations[e], i = null == t || _.screenshakeEnabled && _.screenshakeEnabledLocations[t]; return this.settingsVisible && !u && _.enabled && n && i } get shakeIntensity() { return this.isEnabled() ? _.shakeIntensity : 0 } get combosRequiredCount() { return this.isEnabled() ? _.combosRequiredCount : 0 } get screenshakeEnabled() { return _.screenshakeEnabled } get screenshakeEnabledLocations() { return _.screenshakeEnabledLocations } get combosEnabled() { return _.combosEnabled } get comboSoundsEnabled() { return _.comboSoundsEnabled } } l(c, "displayName", "PoggermodeSettingsStore"), l(c, "persistKey", "PoggermodeSettingsStore"), t.default = new c(a.default, { POGGERMODE_SETTINGS_UPDATE: function(e) { let { settings: t } = e; _ = { ..._, ...t } }, POGGERMODE_TEMPORARILY_DISABLED: function() { u = !0 } }) }, 843693: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldTrackMessage: function() { return p } }), n("47120"); var i, r, s, a, o = n("442837"), l = n("759174"), u = n("846519"), d = n("570140"), _ = n("314897"), c = n("944486"), E = n("585483"), I = n("351780"), T = n("641033"), f = n("524484"), S = n("981631"); let h = new Set, A = new l.SecondaryIndexMap(function(e) { let { userId: t, channelId: n } = e; return [t, n] }, function(e) { let { userId: t, channelId: n } = e; return "".concat(n, "-").concat(t) }), m = new l.SecondaryIndexMap(function(e) { let { messageId: t, channelId: n, combo: { userId: i } } = e; return [t, n, i] }, function(e) { let { messageId: t, channelId: n, combo: { userId: i } } = e; return "".concat(n, "-").concat(i, "-").concat(t) }), N = e => { let { userId: t, channelId: n } = e; return "".concat(t, "-").concat(n) }; function p(e, t, n, i) { return !(e !== t || null == n || i.has(n)) && (i.add(n), !0) } class O extends(i = o.default.Store) { initialize() { this.waitFor(_.default, c.default) } getComboScore(e, t) { let n = A.get(N({ userId: e, channelId: t })); return null == n ? 0 : (0, T.getComboScore)(n) } getUserCombo(e, t) { return A.get(N({ userId: e, channelId: t })) } isComboing(e, t) { var n; let i = this.getUserCombo(e, t); return null != i && i.value >= I.default.combosRequiredCount && null != (n = i) && (n.value > 0 || (null == n ? void 0 : n.multiplier) > 1) } getMessageCombo(e) { var t; let n = m.get(e); return null !== (t = null == n ? void 0 : n.combo) && void 0 !== t ? t : void 0 } getMostRecentMessageCombo(e) { let t = m.values(e); return t[t.length - 1] } getUserComboShakeIntensity(e, t, n, i) { let r = this.getUserCombo(e, t); return null != r ? (0, T.getComboShakeIntensity)(r, i) * n : 0 } } a = "PoggermodeStore", (s = "displayName") in(r = O) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a; let C = new O(d.default, { POGGERMODE_UPDATE_COMBO: function(e) { let { type: t, ...n } = e; if (!I.default.isEnabled()) return !1; ! function e(t) { var n, i, r, s, a, o; let l = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], d = A.get(N(t)), _ = { ...d, ...t, value: null !== (i = null !== (n = t.value) && void 0 !== n ? n : null == d ? void 0 : d.value) && void 0 !== i ? i : 0, multiplier: Math.min(null !== (s = null !== (r = t.multiplier) && void 0 !== r ? r : null == d ? void 0 : d.multiplier) && void 0 !== s ? s : 1, 7), decayInterval: null !== (a = null == d ? void 0 : d.decayInterval) && void 0 !== a ? a : new u.Interval }; A.set(N(t), _), l && (null === (o = _.decayInterval) || void 0 === o || o.start(1e3, () => { let t = A.get(N(_)); if (null != t) { let i = _.multiplier !== t.multiplier && _.value !== t.value; if (t.value <= 0 || i) { var n; null === (n = t.decayInterval) || void 0 === n || n.stop(), t.value <= 0 && (e({ ...t, value: 0, multiplier: 1 }), C.emitChange()) } else e({ ...t, value: t.value - 1 }), C.emitChange() } })) }(n) }, POGGERMODE_UPDATE_MESSAGE_COMBO: function(e) { var t; let { comboMessage: n } = e; if (!I.default.isEnabled()) return !1; t = n, m.set(t.messageId, t) }, MESSAGE_CREATE: function(e) { var t, n; let { channelId: i, message: { mentions: r, author: s, nonce: a } } = e; if (!I.default.isEnabled()) return !1; let o = _.default.getId(); if (!p(null == s ? void 0 : s.id, o, a, h)) return !1; let l = A.get(N({ userId: null !== (t = null == s ? void 0 : s.id) && void 0 !== t ? t : "???", channelId: i })); if (I.default.screenshakeEnabled && I.default.screenshakeEnabledLocations[f.ShakeLocation.MENTION] && null != r && null != r.find(e => e.id === o)) { let e = null != l ? null !== (n = (0, T.getComboShakeIntensity)(l, f.ShakeLevel.LEVEL_4)) && void 0 !== n ? n : .001 : 4 * Math.random(); return E.ComponentDispatch.dispatch(S.ComponentActions.SHAKE_APP, { duration: 1e3, intensity: e }), !0 } return !1 } }); t.default = C }, 641033: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getComboPercentage: function() { return d }, getComboScore: function() { return c }, getComboShakeIntensity: function() { return a }, getComboStyles: function() { return _ } }), n("47120"), n("724458"); var i = n("524484"), r = n("981631"); let s = function(e, t) { let { multiplier: n, value: i } = e, [r, s] = t, a = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1, o = i * n; return o <= 0 ? 0 : Math.min(a, r.reduce((e, t, n) => { if (o > t) { let e = s[n]; if (n + 1 === r.length) return s[n]; let i = r[n + 1], a = s[n + 1]; return (o - t) / (i - t) * (a - e) + e } return o === t ? s[n] : e }, 0)) }, a = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ShakeLevel.LEVEL_3; return s(e, [i.SHAKE_STEPS[t], i.SHAKE_STEP_DIVIDER[t]], 1e5) }, o = [ [1, .001], [25, .3], [100, .5], [250, .8], [500, .9], [2500, .95], [9001, 1] ], l = o.map(e => { let [t] = e; return t }), u = o.map(e => { let [t, n] = e; return n }), d = e => s(e, [l, u], 1), _ = e => 1 === e ? { color: r.Color.BRAND_500 } : 2 === e || 3 === e ? { color: r.Color.GREEN_360 } : 4 === e || 5 === e ? { color: r.Color.YELLOW_300, square: !0 } : 6 === e ? { color: r.Color.RED_400, square: !0 } : { color: r.Color.ORANGE_345, flair: !0 }; function c(e) { var t; return e.value * (null !== (t = e.multiplier) && void 0 !== t ? t : 1) } }, 112606: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("392711"), r = n.n(i), s = n("626135"), a = n("524484"), o = n("981631"); function l(e) { switch (e) { case a.ShakeLocation.CHAT_INPUT: return "chat_input"; case a.ShakeLocation.MENTION: return "mention"; case a.ShakeLocation.VOICE_USER: return "voice_user" } } function u(e) { switch (e) { case a.ConfettiLocation.CHAT_INPUT: return "chat_input"; case a.ConfettiLocation.MEMBER_USER: return "member_user"; case a.ConfettiLocation.REACTION: return "reaction"; case a.ConfettiLocation.CALL_TILE: return "call_tile" } } function d(e, t) { return Object.entries(e).filter(e => { let [t, n] = e; return n }).map(e => { let [n] = e; return t(Number.parseInt(n)) }) } let _ = r().throttle(e => { let { enabled: t, combosEnabled: n, combosRequiredCount: i, screenshakeEnabled: r, shakeIntensity: a, screenshakeEnabledLocations: _, confettiEnabled: c, confettiSize: E, confettiCount: I, confettiEnabledLocations: T } = e; s.default.track(o.AnalyticEvents.POGGERMODE_SETTINGS_UPDATED, { enabled: t, combos_enabled: n, combos_required_count: i, screenshake_enabled: r, shake_intensity: a, screenshake_enabled_locations: d(_, l), confetti_enabled: c, confetti_size: E, confetti_count: I, confetti_enabled_locations: d(T, u) }) }, 5e3); t.default = _ }, 780291: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("606992"), o = n("314897"), l = n("944486"), u = n("843693"), d = n("576125"), _ = n("112843"), c = n("524484"), E = n("981631"), I = n("675654"); function T(e) { var t, n; let { editorHeight: i, textValue: d } = e, c = r.useRef(d), T = (0, a.useChannelAutocompleteLayerPosition)({ editorHeight: i }), f = (0, _.default)(), S = (0, s.useStateFromStores)([u.default, o.default, l.default], () => { var e; return u.default.isComboing(o.default.getId(), null !== (e = l.default.getChannelId()) && void 0 !== e ? e : E.EMPTY_STRING_SNOWFLAKE_ID) }), h = null !== (t = null == T ? void 0 : T.left) && void 0 !== t ? t : 0, A = (null !== (n = null == T ? void 0 : T.top) && void 0 !== n ? n : 0) - 16, m = r.useMemo(() => .05 > Math.random(), [0 === d.length]); return r.useEffect(() => { 0 !== d.length && d !== c.current && S && (f.fire(h, A, m ? { sprite: I.DUCK_CONFETTI_SPRITE } : null), c.current = d) }, [d, S, h, A, m, f]), null } function f(e) { return (0, i.jsx)(d.default, { confettiLocation: c.ConfettiLocation.CHAT_INPUT, children: (0, i.jsx)(T, { ...e }) }) } }, 576125: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("735250"); n("470079"); var r = n("399606"), s = n("351780"); function a(e) { let { children: t, confettiLocation: n } = e; return (0, r.useStateFromStores)([s.default], () => s.default.isEnabled({ confettiLocation: n })) ? (0, i.jsx)(i.Fragment, { children: t }) : null } }, 736144: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("451478"), o = n("576125"), l = n("465858"), u = n("112843"); function d(e) { let { confettiSpawnRef: t, shouldFire: n } = e, i = (0, s.useStateFromStores)([a.default], () => a.default.isFocused()), o = (0, u.default)(), d = (0, l.default)(t); return r.useEffect(() => { i && n && null != d && o.fire(d.x, d.y) }, [o, i, d, n]), null } function _(e) { return (0, i.jsx)(o.default, { confettiLocation: e.confettiLocation, children: (0, i.jsx)(d, { ...e }) }) } }, 465858: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("470079"); function r(e) { let t = null == e ? void 0 : e.getBoundingClientRect(), n = null == t ? void 0 : t.left, r = null == t ? void 0 : t.top; return (0, i.useMemo)(() => null != n && null != r ? { x: n, y: r } : null, [n, r]) } }, 112843: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("470079"), r = n("399606"), s = n("745510"), a = n("351780"); function o() { let { createMultipleConfettiAt: e } = i.useContext(s.ConfettiCannonContext), t = (0, r.useStateFromStores)([a.default], () => a.default.getState()), n = i.useCallback(e => ({ size: { type: "static-random", minValue: e.confettiSize - 7, maxValue: e.confettiSize + 7 } }), []); return i.useMemo(() => ({ fire: (i, r, s) => { var a, o; let l = (null == s ? void 0 : s.settings) != null ? { ...t, ...s.settings } : t; e(i, r, n(l), (null !== (a = null == s ? void 0 : s.count) && void 0 !== a ? a : l.confettiCount) * (null !== (o = null == s ? void 0 : s.countMultiplier) && void 0 !== o ? o : 1), { sprite: null == s ? void 0 : s.sprite }) } }), [e, n, t]) } }, 489887: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_NUMBER_OF_ANSWERS_PER_POLL: function() { return l }, MAX_POLL_ANSWER_LENGTH: function() { return d }, MAX_POLL_QUESTION_LENGTH: function() { return u }, MIN_NUMBER_OF_ANSWERS_PER_POLL: function() { return o }, POLL_CREATION_MODAL_KEY: function() { return a }, POLL_RESULT_MESSAGE_POLL_TITLE_MAX_VISIBLE_CHARS: function() { return c }, PollDurations: function() { return i }, VOTES_TOOLTIP_MAX_USERS: function() { return _ } }), n("47120"); var i, r, s = n("957825"); let a = "POLL_CREATION_MODAL_KEY", o = 1, l = 10, u = 300, d = 55, _ = 3, c = 50; (r = i || (i = {}))[r.ONE_HOUR = 1] = "ONE_HOUR", r[r.FOUR_HOURS = 4] = "FOUR_HOURS", r[r.EIGHT_HOURS = 8] = "EIGHT_HOURS", r[r.ONE_DAY = 24] = "ONE_DAY", r[r.THREE_DAYS = 72] = "THREE_DAYS", r[r.SEVEN_DAYS = 168] = "SEVEN_DAYS", s.ExpressionPickerViewType.GIF, s.ExpressionPickerViewType.EMOJI }, 79390: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createPollServerDataFromCreateRequest: function() { return v }, filterOutUUID: function() { return N }, generateEmptyPollAnswer: function() { return m }, getPollAnswerVotesTooltipText: function() { return y }, getPollResultsReplyPreview: function() { return D }, getTotalVotes: function() { return M }, hasNonVoteReactions: function() { return p }, isAnswerFilled: function() { return g }, isIncompleteAnswer: function() { return L }, isPollCreationEmpty: function() { return R }, useCanPostImagePolls: function() { return C }, useCanPostPollsInChannel: function() { return O } }), n("757143"), n("47120"), n("724458"); var i = n("392711"), r = n.n(i), s = n("153832"), a = n("263568"), o = n("468194"), l = n("442837"), u = n("566006"), d = n("592125"), _ = n("542578"), c = n("375954"), E = n("496675"), I = n("699516"), T = n("70956"), f = n("5192"), S = n("489887"), h = n("981631"), A = n("689938"); function m() { return { text: void 0, image: void 0, localCreationAnswerId: function() { return (0, s.v4)() }() } } function N(e) { return e.replace(/\b[a-f\d]{8}-(?:[a-f\d]{4}-){3}[a-f\d]{12}-\b/i, "") } function p(e) { for (let t of e.reactions) if (null == t.me_vote) return !0; return !1 } function O(e) { return (0, l.useStateFromStores)([E.default], () => !!(null != e && h.ChannelTypesSets.POLLS.has(e.type)) && (!!e.isPrivate() || E.default.can(h.Permissions.SEND_MESSAGES, e) && E.default.can(h.Permissions.SEND_POLLS, e))) } function C() { return !1 } function R(e, t, n) { return 0 === e.length && null == t.find(e => g(e, n)) } function g(e, t) { if (t === a.PollLayoutTypes.IMAGE_ONLY_ANSWERS) return null != e.image; { var n; let t = null === (n = e.text) || void 0 === n ? void 0 : n.trim(); return null != t && t.length > 0 } } function L(e, t) { var n; let i = null === (n = e.text) || void 0 === n ? void 0 : n.trim(); return t === a.PollLayoutTypes.DEFAULT && null != e.image && (null == i || 0 === i.length) } function v(e) { var t, n; if (null == e) return; let i = null == e ? void 0 : null === (t = e.answers) || void 0 === t ? void 0 : t.map((e, t) => { var n, i; let r = null === (n = e.poll_media) || void 0 === n ? void 0 : n.emoji, s = { ...e.poll_media, emoji: null != r ? { id: r.id, name: null !== (i = r.name) && void 0 !== i ? i : "" } : void 0 }; return { ...e, answer_id: t + 1, poll_media: s } }); let r = (null == e ? void 0 : e.duration) != null ? (n = e.duration, new Date(Date.now() + n * T.default.Millis.HOUR).toISOString()) : "0"; return { ...e, expiry: r, answers: i } } function D(e) { let t = function(e, t) { var n, i, r, s; let a = null !== (s = null === (r = e.embeds[0]) || void 0 === r ? void 0 : null === (i = r.fields) || void 0 === i ? void 0 : null === (n = i.find(e => "poll_question_text" === e.rawName)) || void 0 === n ? void 0 : n.rawValue) && void 0 !== s ? s : ""; return null != t ? (0, o.truncateText)(a, t) : a }(e, S.POLL_RESULT_MESSAGE_POLL_TITLE_MAX_VISIBLE_CHARS); return A.default.Messages.POLL_RESULT_REPLY_TEXT.format({ title: t }) } function M(e) { return e.reduce((e, t) => { var n, i; return e + (null !== (i = null === (n = t.count_details) || void 0 === n ? void 0 : n.vote) && void 0 !== i ? i : 0) }, 0) } function y(e, t, n) { var i, s; let a = c.default.getMessage(t, e); if (null == a) return ""; let o = a.getReaction({ id: n, name: "", animated: !1 }), l = null !== (s = null == o ? void 0 : null === (i = o.count_details) || void 0 === i ? void 0 : i.vote) && void 0 !== s ? s : 0, E = function(e, t) { let n = e.getChannelId(), i = _.default.getReactions(n, e.id, { id: t, name: "", animated: !1 }, S.VOTES_TOOLTIP_MAX_USERS, u.ReactionTypes.VOTE), s = d.default.getChannel(n), a = null == s || s.isPrivate() ? null : s.getGuildId(); return r()(i).reject(e => I.default.isBlocked(e.id)).take(S.VOTES_TOOLTIP_MAX_USERS).map(e => f.default.getName(a, null == s ? void 0 : s.id, e)).value() }(a, n); return 0 === E.length ? "" : function(e, t) { let n = Math.max(0, t - e.length); if (1 === e.length) return n > 0 ? A.default.Messages.POLL_VOTES_TOOLTIP_1_N.format({ a: e[0], n: n.toLocaleString() }) : e[0]; if (2 === e.length) return n > 0 ? A.default.Messages.POLL_VOTES_TOOLTIP_2_N.format({ a: e[0], b: e[1], n: n.toLocaleString() }) : A.default.Messages.POLL_VOTES_TOOLTIP_2.format({ a: e[0], b: e[1] }); if (3 !== e.length) return A.default.Messages.POLL_VOTES_TOOLTIP_N.format({ n: n.toLocaleString() }); else return n > 0 ? A.default.Messages.POLL_VOTES_TOOLTIP_3_N.format({ a: e[0], b: e[1], c: e[2], n: n.toLocaleString() }) : A.default.Messages.POLL_VOTES_TOOLTIP_3.format({ a: e[0], b: e[1], c: e[2] }) }(E, l) } }, 330044: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("913527"), r = n.n(i); function s(e) { return { ...e, expiry: r()(e.expiry) } } }, 563927: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("442837"), r = n("706454"), s = n("689938"); function a(e) { let t = (0, i.useStateFromStores)([r.default], () => r.default.locale.startsWith("en-")); return ":pizza:" === e && t ? s.default.Messages.POLLS_MARKETING_EASTER_EGG_PIZZA_EMOJI_DESCRIPTION.format({ emojiName: e }) : e } }, 801461: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { CONTROL_CHARACTERS_CODE: function() { return _ }, EditState: function() { return i }, MAX_DISPLAY_NAME_LENGTH: function() { return u }, POMELO_KEYWORD: function() { return d }, PomeloEntrypoints: function() { return r }, TIMEOUT_TIME: function() { return c }, coalescePeriods: function() { return l }, dirtyChars: function() { return o } }); let o = /([^A-Za-z0-9_.]+)/g, l = /\.+/g; (s = i || (i = {})).NONE = "none", s.EDIT_DISPLAY_NAME = "display-name", s.EDIT_USERNAME = "username", s.PREVIEW = "preview", s.SUGGESTION = "suggestion", (a = r || (r = {})).APP_START = "app start", a.NOTICE = "notice", a.USER_SETTINGS = "user settings", a.USER_SETTINGS_EDIT = "user settings edit", a.YOU_TAB = "you tab"; let u = 32, d = "pomelo", _ = [1564, 917505, 12644, 65279, 173, 6068, 10240, 4447, 847, 4448, 65440], c = 2e3 }, 918505: function(e, t, n) { "use strict"; n.r(t), n.d(t, { experiment: function() { return i }, getPomeloEligibility: function() { return s }, usePomeloEligibility: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", label: "Pomelo", id: "2023-03_pomelo", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "enabled", config: { enabled: !0 } }] }), r = () => { let { enabled: e } = i.useExperiment({ location: "faf26d_1" }, { autoTrackExposure: !1 }); return e }, s = () => { let { enabled: e } = i.getCurrentConfig({ location: "faf26d_2" }, { autoTrackExposure: !1 }); return e } }, 736401: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("433517"), r = n("147913"), s = n("594174"), a = n("918505"), o = n("548161"), l = n("347649"), u = n("776319"), d = n("801461"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = "lastSawPomelo"; class E extends r.default { constructor(...e) { super(...e), _(this, "actions", { POST_CONNECTION_OPEN: () => this.onPostConnectionOpen() }), _(this, "onPostConnectionOpen", () => { if (function() { if (!a.experiment.getCurrentConfig({ location: "b9eb97_1" }, { autoTrackExposure: !1 }).enabled) return !1; let e = s.default.getCurrentUser(); if (null == e || e.isPomelo() || !e.hasVerifiedEmailOrPhone()) return !1; let t = (0, l.getForceMigration)(), n = i.Storage.get(t ? "lastSawPomeloMigration" : c); return !(null != n && Date.now() - n < 6048e5) && !0 }()) { let e = u.UUOneClickExperiment.getCurrentConfig({ location: "uu_one_click" }, { autoTrackExposure: !1 }).enabled; (0, o.openPomeloModal)(d.PomeloEntrypoints.APP_START, e, !1) && i.Storage.set(c, Date.now()) } }) } } t.default = new E }, 548161: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openPomeloModal: function() { return s } }); var i = n("481060"), r = n("303172"); function s(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; return !(!n && (0, i.hasAnyModalOpen)()) && ((0, r.default)(e, t), !0) } }, 347649: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getForceMigration: function() { return s }, useForceMigration: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-01_uu_forced_migration", label: "Unique Username Forced Migration UI", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Forced Migration UI", config: { enabled: !0 } }] }), r = () => { let { enabled: e } = i.useExperiment({ location: "force_migration" }, { autoTrackExposure: !1 }); return e }, s = () => { let { enabled: e } = i.getCurrentConfig({ location: "force_migration" }, { autoTrackExposure: !1 }); return e } }, 776319: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UUOneClickExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-11_uu_one_click", label: "Unique Username one click", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable one click", config: { enabled: !0 } }] }) }, 303172: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("481060"); async function s(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; await (0, r.openModalLazy)(async () => { let { default: r } = await Promise.all([n.e("99387"), n.e("85342"), n.e("83774")]).then(n.bind(n, "193049")); return n => (0, i.jsx)(r, { source: e, oneClickFlow: t, ...n }) }) } }, 522474: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"); var i, r = n("512722"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("202226"), u = n("442837"), d = n("570140"), _ = n("710845"), c = n("358085"), E = n("998502"), I = n("228488"), T = n("981631"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = {}, h = {}, A = {}, m = {}, N = {}, p = new Set, O = () => M.emitChange(), C = o().debounce(O, 150); function R(e) { let t = A[e]; null != t && !t.closed && (S[e] = { x: t.screenX, y: t.screenY, width: t.innerWidth, height: t.innerHeight, alwaysOnTop: !!c.isPlatformEmbedded && h[e] }) } function g(e) { let t = A[e]; null != t && (!t.closed && R(e), t.close(), ! function(e) { let t = A[e]; s()(null != t, "Popout window was null during unmount"), t.removeEventListener("focus", O), t.removeEventListener("blur", O), t.removeEventListener("resize", C); let n = m[e]; s()(null != n, "Window root was null while unmounting"), n.unmount(), delete A[e], delete h[e], delete N[e], delete m[e] }(e), M.emitChange()) } function L(e) { let { data: t } = e; if (!(t instanceof Object && t.discordPopoutEvent instanceof Object)) return; let n = t.discordPopoutEvent; if (null != n.key) switch (n.type) { case T.PopoutEventTypes.LOADED: var i; return i = n.key, void(p.has(i) && (! function(e) { let t = A[e], n = N[e]; if (null == t) { new _.default("PopoutWindowStore").warn("Failed to open window", e); return } let i = t.document; (0, I.subscribeDocumentToFullScreenChange)(i, O), t.addEventListener("focus", O), t.addEventListener("blur", O), t.addEventListener("resize", C), ! function(e, t) { let n = t.document, i = document.querySelectorAll('link[rel="stylesheet"]'), r = "".concat(window.location.protocol, "//").concat(window.location.host); for (let e of i) { if (!e.href.startsWith(r)) continue; let t = n.createElement("link"); t.href = e.href, t.rel = e.rel, t.integrity = e.integrity, s()(null != n.head, "Document head was null"), n.head.appendChild(t) } }(0, t); let r = (0, l.createRoot)(i.getElementById("app-mount")); s()(null != r, "No render target for popout!"), m[e] = r, r.render(n(e)) }(i), p.delete(i), M.emitChange())); case T.PopoutEventTypes.UNLOADED: return g(n.key) } } function v() { for (let e of Object.keys(A)) { let t = A[e]; null != t && t.close() } } class D extends(i = u.default.PersistedStore) { initialize(e) { window.addEventListener("message", L), window.addEventListener("beforeunload", v), S = null != e ? e : {} } getWindow(e) { return A[e] } getWindowState(e) { return S[e] } getWindowKeys() { return Object.keys(A) } getWindowOpen(e) { let t = A[e]; return null != t && !t.closed } getIsAlwaysOnTop(e) { return !!h[e] } getWindowFocused(e) { var t, n; let i = A[e]; return null !== (n = null == i ? void 0 : null === (t = i.document) || void 0 === t ? void 0 : t.hasFocus()) && void 0 !== n && n } getWindowVisible(e) { var t; let n = A[e]; return (null == n ? void 0 : null === (t = n.document) || void 0 === t ? void 0 : t.visibilityState) === "visible" } getState() { return S } unmountWindow(e) { return g(e) } } f(D, "displayName", "PopoutWindowStore"), f(D, "persistKey", "PopoutWindowStore"); let M = new D(d.default, { POPOUT_WINDOW_OPEN: function(e) { let { key: t, features: n, render: i } = e; if (c.isPlatformEmbedded && !E.default.supportsFeature(T.NativeFeatures.POPOUT_WINDOWS)) throw Error("Popout windows not supported on this native module version!"); let r = A[t]; if (null != r && !r.closed) return c.isPlatformEmbedded ? E.default.focus(t) : r.focus(), !1; let { defaultWidth: s, defaultHeight: a, defaultAlwaysOnTop: o = !1, ...l } = n, u = l, d = o, _ = S[t]; if (null != _) { let { width: e, height: t, x: n, y: i, alwaysOnTop: r } = _; d = null != r ? r : o, u = { width: null != e && 0 !== e ? e : s, height: null != t && 0 !== t ? t : a, left: n, top: i, ...u } } let I = window.open(T.Routes.POPOUT_WINDOW, t, function(e) { let t = ""; for (let n of Object.keys(e)) { let i = e[n]; void 0 !== i && ("boolean" == typeof i && (i = i ? "yes" : "no"), t += "".concat(n, "=").concat(i, ",")) } return t }(u)); I.windowKey = t, null == I || I.focus(), A[t] = I, N[t] = i, c.isPlatformEmbedded && (E.default.setAlwaysOnTop(t, d), h[t] = d, E.default.isAlwaysOnTop(t).then(e => h[t] = e)), p.add(t) }, POPOUT_WINDOW_CLOSE: function(e) { let { key: t } = e, n = A[t]; null != n && !n.closed && (R(t), n.close()) }, POPOUT_WINDOW_SET_ALWAYS_ON_TOP: function(e) { let { key: t, alwaysOnTop: n } = e; c.isPlatformEmbedded && (E.default.setAlwaysOnTop(t, n), h[t] = n, E.default.isAlwaysOnTop(t).then(e => h[t] = e)) }, LOGOUT: v }); t.default = M }, 788983: function(e, t, n) { "use strict"; n.r(t), n.d(t, { close: function() { return o }, open: function() { return s }, openChannelCallPopout: function() { return a }, setAlwaysOnTop: function() { return l } }); var i = n("570140"); let r = { menubar: !1, toolbar: !1, location: !1, directories: !1 }; function s(e, t, n) { return i.default.dispatch({ type: "POPOUT_WINDOW_OPEN", key: e, features: { ...r, ...n }, render: t }) } function a(e) { return i.default.dispatch({ type: "CHANNEL_CALL_POPOUT_WINDOW_OPEN", channel: e }) } function o(e) { return i.default.dispatch({ type: "POPOUT_WINDOW_CLOSE", key: e }) } function l(e, t) { return i.default.dispatch({ type: "POPOUT_WINDOW_SET_ALWAYS_ON_TOP", alwaysOnTop: t, key: e }) } }, 928518: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return i.default } }); var i = n("522474") }, 776862: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("358085"), r = n("998502"), s = n("522474"); function a(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = s.default.getWindow(e); null != n && !n.closed && (i.isPlatformEmbedded ? r.default.focus(e, t) : n.focus()) } }, 837741: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BrandRefreshPerksExperiment: function() { return i }, useBrandRefreshPerksExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-05_brand_refresh_perks_experiment", label: "Brand Refresh Perks Experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables new nitro perks related to brand refresh", config: { enabled: !0 } }] }), r = e => { let { location: t } = e; return i.useExperiment({ location: t }) } }, 736871: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_hd_streaming_parent", label: "HD Streaming Parent", defaultConfig: { inPerksDemosExperiment: !1, inCallExperienceExperiment: !1 }, treatments: [{ id: 1, label: "In Experiment 1", config: { inPerksDemosExperiment: !0, inCallExperienceExperiment: !1 } }, { id: 2, label: "In Experiment 2", config: { inPerksDemosExperiment: !1, inCallExperienceExperiment: !0 } }] }); t.default = i }, 519143: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("355467"), r = n("147913"), s = n("400407"); class a extends r.default { constructor(...e) { var t, n, r; super(...e), t = this, n = "actions", r = { POST_CONNECTION_OPEN: () => { let { enabled: e } = s.LocalizedPricingPromoManagerExperiment.getCurrentConfig({ location: "cd74f0_1" }, { autoTrackExposure: !1 }); e && (0, i.fetchLocalizedPromo)() } }, n in t ? Object.defineProperty(t, n, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = r } } t.default = new a }, 357355: function(e, t, n) { "use strict"; n.r(t); var i = n("442837"), r = n("570140"); let s = { fetched: !1, affinities: [] }; class a extends i.default.Store { get hasFetched() { return s.fetched } get affinities() { return s.affinities } } t.default = new a(r.default, { BILLING_NITRO_AFFINITY_FETCHED: function(e) { let {} = e; s.fetched = !0 }, BILLING_NITRO_AFFINITY_FETCH_SUCCEEDED: function(e) { let { res: t } = e; s.affinities = t } }) }, 502087: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("168232"), o = n("474936"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = "OverridePremiumTypeStore", d = { premiumTypeOverride: o.UNSELECTED_PREMIUM_TYPE_OVERRIDE, premiumTypeActual: o.UNSELECTED_PREMIUM_TYPE_OVERRIDE, createdAtOverride: o.UNSELECTED_CREATED_AT_DATE }; function _(e) { let { user: t } = e; d.premiumTypeActual = (0, a.getPremiumTypeFromRawValue)(t.premium_type) } class c extends(i = r.default.PersistedStore) { initialize(e) { if (null != e) { d.premiumTypeActual = null == e ? void 0 : e.premiumTypeActual, d.premiumTypeOverride = null == e ? void 0 : e.premiumTypeOverride, null != e.createdAtOverride ? d.createdAtOverride = new Date(e.createdAtOverride) : d.createdAtOverride = o.UNSELECTED_CREATED_AT_DATE; return } d.premiumTypeOverride = o.UNSELECTED_PREMIUM_TYPE_OVERRIDE, d.createdAtOverride = o.UNSELECTED_CREATED_AT_DATE } getPremiumTypeOverride() { return d.premiumTypeOverride } getPremiumTypeActual() { return d.premiumTypeActual } getCreatedAtOverride() { return d.createdAtOverride } getState() { return d } get premiumType() { return d.premiumTypeOverride } } l(c, "displayName", u), l(c, "persistKey", u), l(c, "migrations", [e => { if ((null == e ? void 0 : e.createdAtOverride) == null) return { ...e, createdAtOverride: o.UNSELECTED_CREATED_AT_DATE } }]), t.default = new c(s.default, { SET_PREMIUM_TYPE_OVERRIDE: function(e) { let { premiumType: t } = e; d.premiumTypeOverride = t }, SET_CREATED_AT_OVERRIDE: function(e) { let { createdAt: t } = e; d.createdAtOverride = t }, CURRENT_USER_UPDATE: _, CONNECTION_OPEN: _ }) }, 351742: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_perks_demo_hd_streaming", label: "Perks Demo: HD Streaming", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "With HD Streaming Perk Demo enabled - ML predicted", config: { enabled: !0 } }, { id: 2, label: "With HD Streaming Perk Demo enabled - no ML prediction", config: { enabled: !0 } }] }); t.default = i }, 120522: function(e, t, n) { "use strict"; n.r(t), n.d(t, { activatePerkDemo: function() { return d }, fetchPerksDemos: function() { return u } }); var i = n("544891"), r = n("570140"), s = n("168232"), a = n("594174"), o = n("114064"), l = n("981631"); async function u() { let e = a.default.getCurrentUser(); try { let { body: t } = await i.HTTP.get({ url: l.Endpoints.USER_PERKS_DEMOS }); (0, s.isStaffEnv)(e) && (t = { ...t, ... function() { let e = o.default.overrides(), t = {}; for (let r in e) { var n, i; t[r] = null !== (i = null === (n = e[r]) || void 0 === n ? void 0 : n.available) && void 0 !== i ? i : void 0 } return t }() }), r.default.dispatch({ type: "PREMIUM_PERKS_DEMOS_FETCH_SUCCESS", demos: t }) } catch (e) { r.default.dispatch({ type: "PREMIUM_PERKS_DEMOS_FETCH_FAILURE" }) } } async function d(e) { if (o.default.getActivated()[e]) return !0; let t = a.default.getCurrentUser(); try { return await i.HTTP.post({ url: l.Endpoints.USER_PERKS_DEMOS_ACTIVATE(e) }), _(e), !0 } catch { if ((0, s.isStaffEnv)(t) && function(e) { var t; return (null === (t = o.default.overrides()[e]) || void 0 === t ? void 0 : t.activateSuccess) === !0 }(e)) return _(e), !0; return r.default.dispatch({ type: "PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE", perkType: e }), !1 } } function _(e) { r.default.dispatch({ type: "PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS", perkType: e }) } }, 386542: function(e, t, n) { "use strict"; n.r(t), n.d(t, { usePerksDemo: function() { return a } }); var i = n("442837"), r = n("114064"), s = n("485731"); function a(e) { var t, n; let { demos: a, activated: o } = (0, i.useStateFromStoresObject)([r.default], () => ({ demos: r.default.getPerksDemos(), activated: r.default.getActivated() })), l = (0, s.usePerksDemosUIStore)(); return { available: null !== (t = null == a ? void 0 : a[e]) && void 0 !== t && t, activated: null !== (n = o[e]) && void 0 !== n && n, hqStreamingState: l } } }, 114064: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("168232"); let d = { perksDemos: null, activated: {}, lastFetched: null, overrides: {} }, _ = d; class c extends(a = o.default.Store) { getPerksDemos() { return _.perksDemos } getActivated() { return _.activated } shouldFetch() { return null == _.lastFetched || Date.now() > _.lastFetched + 864e5 } shouldActivate(e) { var t; return (null === (t = _.perksDemos) || void 0 === t ? void 0 : t[e]) === !0 } overrides() { return _.overrides } } s = "PerksDemosStore", (r = "displayName") in(i = c) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new c(l.default, { PREMIUM_PERKS_DEMOS_FETCH_SUCCESS: function(e) { let { demos: t } = e; _.perksDemos = t, _.lastFetched = Date.now() }, PREMIUM_PERKS_DEMOS_FETCH_FAILURE: function() { _.perksDemos = d.perksDemos, _.lastFetched = null }, PREMIUM_PERKS_DEMO_ACTIVATE_SUCCESS: function(e) { let { perkType: t } = e; _.activated[t] = !0 }, PREMIUM_PERKS_DEMO_ACTIVATE_FAILURE: function(e) { let { perkType: t } = e; _.activated[t] = !1 }, PREMIUM_PERKS_DEMO_COMPLETE: function(e) { let { perkType: t } = e; null != _.perksDemos && !0 === _.activated[t] && (_.perksDemos[t] = !1) }, LOGOUT: function() { _ = d }, PREMIUM_PERKS_DEMO_OVERRIDE: function(e) { let { user: t, perkType: n, available: i, activateSuccess: r } = e; void 0 !== t && (0, u.isStaffEnv)(t) && (_.overrides[n] = { available: i, activateSuccess: r }, null == _.perksDemos && (_.perksDemos = {}), _.perksDemos[n] = i || !1, _.activated[n] = !1, _.lastFetched = null) } }) }, 933843: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ineligibleQualitySetting: function() { return E }, shouldActivatePerkDemo: function() { return c }, shouldFetchPerksDemos: function() { return _ } }); var i = n("594174"), r = n("74538"), s = n("736871"), a = n("351742"), o = n("114064"), l = n("474936"), u = n("37113"); function d() { let e = i.default.getCurrentUser(); return null != e && !(0, r.isPremium)(e, l.PremiumTypes.TIER_1) } let _ = () => { let { inPerksDemosExperiment: e } = s.default.getCurrentConfig({ location: "shouldFetchPerksDemos" }, { autoTrackExposure: !1 }), { enabled: t } = a.default.getCurrentConfig({ location: "shouldFetchPerksDemos" }, { autoTrackExposure: !1 }); return d() && o.default.shouldFetch() && e && t }, c = e => d() && o.default.shouldActivate(e), E = (e, t) => e === u.ApplicationStreamResolutions.RESOLUTION_720 && t !== u.ApplicationStreamFPS.FPS_60 }, 474936: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ACTIVE_PREMIUM_SKUS: function() { return K }, ANNUAL_DISCOUNT_IDS: function() { return eP }, ANNUAL_DISCOUNT_IDS_TO_PERCENTAGES: function() { return eU }, AllSeasonalGiftStyles: function() { return eQ }, AnalyticsPremiumFeatureNames: function() { return d }, AnalyticsPremiumFeatureTiers: function() { return _ }, BLACK_FRIDAY_2020_GIFT_CODE_BATCH_ID: function() { return e_ }, BoostedGuildFeatures: function() { return ex }, BoostingUpsellAction: function() { return A }, CUSTOM_GIFT_MESSAGE_MAX_LENGTH: function() { return eq }, DEFAULT_APPLE_GRACE_PERIOD_DAYS: function() { return ea }, DEFAULT_GOOGLE_GRACE_PERIOD_DAYS: function() { return eo }, DEFAULT_MAX_GRACE_PERIOD_DAYS: function() { return es }, DISCOUNTS: function() { return eH }, DISCOUNT_DURATION_FALLBACK: function() { return eJ }, DISCOUNT_PERCENTAGE_FALLBACK: function() { return e$ }, DiscountUserUsageLimitIntervalTypes: function() { return o }, GUILD_BOOST_COST_FOR_PREMIUM_USER_DISCOUNT_PERCENT: function() { return ei }, InboundPromotionErrorCodes: function() { return f }, IncrementalStickerCountsByTier: function() { return ek }, LegacyPricingCountries: function() { return eK }, LegacySeasonalGiftStyles: function() { return ez }, MAX_ACCOUNT_HOLD_DAYS: function() { return ed }, MAX_PAYMENT_PROCESSING_TIME_DAYS: function() { return eI }, MAX_PREMIUM_TIER_0_ATTACHMENT_SIZE: function() { return ew }, MULTI_MONTH_PLANS: function() { return q }, NUM_FREE_GUILD_BOOSTS_WITH_PREMIUM: function() { return er }, ORDERED_PREMIUM_SUBSCRIPTION_PLANS: function() { return eF }, PAID_SUBSCRIPTION_MAX_BILLING_RETRY_DAYS: function() { return eu }, PAID_SUBSCRIPTION_MAX_GRACE_PERIOD_DAYS: function() { return el }, PAUSE_ELIGIBLE_PLANS: function() { return en }, PREMIUM_GUILD_SUBSCRIPTION_PLANS: function() { return Q }, PREMIUM_MONTHLY_PLANS: function() { return J }, PREMIUM_PLANS: function() { return Z }, PREMIUM_SKU_TO_MONTHLY_PLAN: function() { return $ }, PREMIUM_SKU_TO_YEARLY_PLAN: function() { return ee }, PREMIUM_SUBSCRIPTION_APPLICATION: function() { return W }, PREMIUM_TIER_0_LIKELIHOOD_TRIAL_ID: function() { return eO }, PREMIUM_TIER_2_ANNUAL_20_PERCENT_DISCOUNT_ID: function() { return ey }, PREMIUM_TIER_2_ANNUAL_25_PERCENT_DISCOUNT_ID: function() { return eM }, PREMIUM_TIER_2_AUTH3_TRIAL_ID: function() { return eN }, PREMIUM_TIER_2_CHURN_1_MONTH_DISCOUNT_ID: function() { return eg }, PREMIUM_TIER_2_CHURN_3_MONTH_DISCOUNT_ID: function() { return eL }, PREMIUM_TIER_2_HFU_ONE_MONTH_TRIAL_ID: function() { return eA }, PREMIUM_TIER_2_HFU_ONE_WEEK_TRIAL_ID: function() { return eS }, PREMIUM_TIER_2_HFU_TWO_WEEK_TRIAL_ID: function() { return eh }, PREMIUM_TIER_2_LIKELIHOOD_1_MONTH_30_PERCENT_DISCOUNT_ID: function() { return ev }, PREMIUM_TIER_2_LIKELIHOOD_1_MONTH_40_PERCENT_DISCOUNT_ID: function() { return eD }, PREMIUM_TIER_2_LIKELIHOOD_DISCOUNT_ID: function() { return eC }, PREMIUM_TIER_2_LIKELIHOOD_TRIAL_ID: function() { return eT }, PREMIUM_TIER_2_NEW_USER_CPV_TRIAL_ID: function() { return em }, PREMIUM_TIER_2_PLANS: function() { return X }, PREMIUM_TIER_2_REACTIVATION_DISCOUNT_ID: function() { return eR }, PREMIUM_TIER_2_REACTIVATION_TRIAL_ID: function() { return ef }, PREMIUM_TIER_2_REFERRAL_TRIAL_ID: function() { return ep }, PREMIUM_TYPE_OVERRIDE_OPTIONS: function() { return Y }, PremiumGiftStyles: function() { return T }, PremiumHeaderThemes: function() { return I }, PremiumMarketingEntrypoints: function() { return E }, PremiumSubscriptionSKUToPremiumType: function() { return z }, PremiumSubscriptionSKUs: function() { return r }, PremiumTypeOrder: function() { return j }, PremiumTypes: function() { return i }, PremiumUpsellTypes: function() { return l }, PremiumUserLimits: function() { return eW }, PromotionFlags: function() { return ej }, PurchasedFlags: function() { return u }, ReferralTrialsAnalyticSteps: function() { return m }, SKU_ID_PURCHASED_FLAGS: function() { return eG }, STANDARD_GIFT_OPTIONS: function() { return eZ }, STICKERS_GIFT_CODE_BATCH_ID: function() { return ec }, SeasonalGiftStyles2023: function() { return eX }, StreamQualities: function() { return c }, StreamQualitiesToPremiumType: function() { return eY }, SubscriptionIntervalTypes: function() { return a }, SubscriptionPlanInfo: function() { return et }, SubscriptionPlans: function() { return s }, SubscriptionTrials: function() { return eb }, TotalSoundboardSoundCountsByTier: function() { return eV }, TotalStickerCountsByTier: function() { return eB }, UNSELECTED_CREATED_AT_DATE: function() { return H }, UNSELECTED_PREMIUM_TYPE_OVERRIDE: function() { return F }, USER_PREMIUM_SUBSCRIPTION_TRIAL_EXPIRES_APPROACHING_5_DAY_THRESHOLD: function() { return eE } }), n("47120"); var i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p, O, C, R, g, L, v, D, M, y, P, U, b, G, w, k, B, V = n("981631"), x = n("185923"); (N = i || (i = {}))[N.TIER_1 = 1] = "TIER_1", N[N.TIER_2 = 2] = "TIER_2", N[N.TIER_0 = 3] = "TIER_0"; let F = void 0, H = void 0, Y = [{ value: null, label: "Non-Nitro" }, { value: 3, label: "Basic" }, { value: 1, label: "Classic" }, { value: 2, label: "Standard" }], j = Object.freeze({ 3: 0, 1: 1, 2: 2 }), W = "521842831262875670"; (p = r || (r = {})).NONE = "628379670982688768", p.TIER_0 = "978380684370378762", p.TIER_1 = "521846918637420545", p.TIER_2 = "521847234246082599", p.GUILD = "590663762298667008", p.LEGACY = "521842865731534868"; let K = ["628379670982688768", "978380684370378762", "521846918637420545", "521847234246082599", "590663762298667008"], z = Object.freeze({ "978380684370378762": 3, "521846918637420545": 1, "521847234246082599": 2, "628379670982688768": 2, "521842865731534868": 2 }); (O = s || (s = {})).NONE_MONTH = "628379151761408000", O.NONE_YEAR = "628381571568631808", O.PREMIUM_MONTH_TIER_0 = "978380692553465866", O.PREMIUM_YEAR_TIER_0 = "1024422698568122368", O.PREMIUM_MONTH_TIER_1 = "511651871736201216", O.PREMIUM_YEAR_TIER_1 = "511651876987469824", O.PREMIUM_MONTH_TIER_2 = "511651880837840896", O.PREMIUM_YEAR_TIER_2 = "511651885459963904", O.PREMIUM_MONTH_GUILD = "590665532894740483", O.PREMIUM_YEAR_GUILD = "590665538238152709", O.NONE_3_MONTH = "944265614527037440", O.NONE_6_MONTH = "944265636643602432", O.PREMIUM_3_MONTH_TIER_2 = "642251038925127690", O.PREMIUM_6_MONTH_TIER_2 = "944037208325619722", O.PREMIUM_3_MONTH_GUILD = "944037355453415424", O.PREMIUM_6_MONTH_GUILD = "944037391444738048", O.PREMIUM_MONTH_LEGACY = "511651856145973248", O.PREMIUM_YEAR_LEGACY = "511651860671627264"; let Z = new Set(["978380692553465866", "1024422698568122368", "511651871736201216", "511651876987469824", "511651880837840896", "642251038925127690", "944037208325619722", "511651885459963904", "511651856145973248", "511651860671627264"]), X = new Set(["511651880837840896", "642251038925127690", "944037208325619722", "511651885459963904"]), Q = new Set(["590665532894740483", "944037355453415424", "944037391444738048", "590665538238152709"]), q = new Set(["642251038925127690", "944037208325619722", "944037355453415424", "944037391444738048"]), J = new Set(["978380692553465866", "511651871736201216", "511651880837840896"]), $ = Object.freeze({ "978380684370378762": "978380692553465866", "521846918637420545": "511651871736201216", "521847234246082599": "511651880837840896", "628379670982688768": void 0, "590663762298667008": void 0, "521842865731534868": void 0 }), ee = Object.freeze({ "978380684370378762": "1024422698568122368", "521846918637420545": "511651876987469824", "521847234246082599": "511651885459963904", "628379670982688768": void 0, "590663762298667008": void 0, "521842865731534868": void 0 }); (C = a || (a = {}))[C.MONTH = 1] = "MONTH", C[C.YEAR = 2] = "YEAR", C[C.DAY = 3] = "DAY", (R = o || (o = {}))[R.DAY = 1] = "DAY", R[R.WEEK = 2] = "WEEK", R[R.MONTH = 3] = "MONTH", R[R.YEAR = 4] = "YEAR"; let et = Object.freeze({ "628379151761408000": { id: "628379151761408000", name: "None Monthly", skuId: "628379670982688768", interval: 1, intervalCount: 1 }, "628381571568631808": { id: "628381571568631808", name: "None Yearly", skuId: "628379670982688768", interval: 2, intervalCount: 1 }, "978380692553465866": { id: "978380692553465866", name: "Nitro Basic Monthly", premiumType: 3, skuId: "978380684370378762", interval: 1, intervalCount: 1 }, "1024422698568122368": { id: "1024422698568122368", name: "Nitro Basic Yearly", premiumType: 3, skuId: "978380684370378762", interval: 2, intervalCount: 1 }, "511651871736201216": { id: "511651871736201216", name: "Nitro Classic Monthly", premiumType: 1, skuId: "521846918637420545", interval: 1, intervalCount: 1 }, "511651876987469824": { id: "511651876987469824", name: "Nitro Classic Yearly", premiumType: 1, skuId: "521846918637420545", interval: 2, intervalCount: 1 }, "511651880837840896": { id: "511651880837840896", name: "Nitro Monthly", premiumType: 2, skuId: "521847234246082599", interval: 1, intervalCount: 1 }, "511651885459963904": { id: "511651885459963904", name: "Nitro Yearly", premiumType: 2, skuId: "521847234246082599", interval: 2, intervalCount: 1 }, "590665532894740483": { id: "590665532894740483", name: "Nitro Server Boost Monthly", skuId: "590663762298667008", interval: 1, intervalCount: 1 }, "590665538238152709": { id: "590665538238152709", name: "Nitro Server Boost Yearly", skuId: "590663762298667008", interval: 2, intervalCount: 1 }, "642251038925127690": { id: "642251038925127690", name: "Nitro Three Month", premiumType: 2, skuId: "521847234246082599", interval: 1, intervalCount: 3 }, "944037208325619722": { id: "944037208325619722", name: "Nitro Six Month", premiumType: 2, skuId: "521847234246082599", interval: 1, intervalCount: 6 }, "944037355453415424": { id: "944037355453415424", name: "Nitro Server Boost Three Month", skuId: "590663762298667008", interval: 1, intervalCount: 3 }, "944037391444738048": { id: "944037391444738048", name: "Nitro Server Boost Six Month", skuId: "590663762298667008", interval: 1, intervalCount: 6 }, "944265614527037440": { id: "944265614527037440", name: "None Three Month", skuId: "628379670982688768", interval: 1, intervalCount: 3 }, "944265636643602432": { id: "944265636643602432", name: "None Six Month", skuId: "628379670982688768", interval: 1, intervalCount: 6 }, "511651856145973248": { id: "511651856145973248", name: "Nitro Monthly (Legacy)", premiumType: 2, skuId: "521842865731534868", interval: 1, intervalCount: 1 }, "511651860671627264": { id: "511651860671627264", name: "Nitro Classic Yearly (Legacy)", premiumType: 2, skuId: "521842865731534868", interval: 2, intervalCount: 1 } }), en = new Set(["511651880837840896"]), ei = 30, er = 2, es = 3, ea = 28, eo = 30, el = 7, eu = 7, ed = 30, e_ = "775514091874680832", ec = "845031178288889946", eE = 432e6, eI = 14, eT = "520373071933079552", ef = "902329034132684800", eS = "983601860436819968", eh = "983601860436819969", eA = "984244797441048577", em = "1215818925846036480", eN = "1004850445463584768", ep = "1073698058383917056", eO = "1070132870233980928", eC = "1150904354090532864", eR = "1199128659810582528", eg = "1204865493622587392", eL = "1204867673024888832", ev = "1215346678383509504", eD = "1215366184820539392", eM = "1223319122125783040", ey = "1223380890109870080", eP = [eM, ey], eU = Object.freeze({ [ey]: .2, [eM]: .25, DEFAULT: .16 }), eb = Object.freeze({ [eT]: { id: eT, skus: ["521847234246082599"] }, [ef]: { id: ef, skus: ["521847234246082599"] }, [eS]: { id: eS, skus: ["521847234246082599"] }, [eh]: { id: eh, skus: ["521847234246082599"] }, [eA]: { id: eA, skus: ["521847234246082599"] }, [eN]: { id: eN, skus: ["521847234246082599"] }, [eO]: { id: eO, skus: ["978380684370378762"] }, [ep]: { id: ep, skus: ["521847234246082599"] }, [em]: { id: em, skus: ["521847234246082599"] } }); (g = l || (l = {})).ANIMATED_GUILD_BANNER_TOOLTIP = "animated_guild_banner_tooltip", g.EMOJI_PICKER_SEARCH = "emoji_picker_search", g.EMOJI_PICKER_EMOJI_CLICKED = "emoji_picker_emoji_clicked", g.EMOJI_PICKER_STICKER_CLICKED = "emoji_picker_sticker_clicked", g.EMOJI_PICKER_REACTION_EMOJI_CLICKED = "emoji_picker_reaction_emoji_clicked", g.EMOJI_PICKER_SUPER_REACTION_EMOJI_CLICKED = "emoji_picker_super_reaction_emoji_clicked", g.EMOJI_PICKER_STATUS_EMOJI_CLICKED = "emoji_picker_status_emoji_clicked", g.EMOJI_PICKER_TOP_SERVER_EMOJI_CLICKED = "emoji_picker_top_server_emoji_clicked", g.EMOJI_PICKER_NEWLY_ADDED_EMOJI_CLICKED = "emoji_picker_newly_added_emoji_clicked", g.EMOJI_AUTOSUGGEST_CLICKED = "emoji_autosuggest_clicked", g.EMOJI_AUTOCOMPLETE_INLINE = "emoji_autocomplete_inline", g.EMOJI_AUTOCOMPLETE_MODAL = "emoji_autocomplete_modal", g.EMOJI_IN_MESSAGE_HOVER = "emoji_in_message_hover", g.EMOJI_IN_REACTION_HOVER = "emoji_in_reaction_hover", g.EMOJI_IN_BURST_REACTION_HOVER = "emoji_in_burst_reaction_hover", g.EMOJI_IN_BURST_REACTION_HOVER_UPSELL = "emoji_in_burst_reaction_hover_upsell", g.EMOJI_PICKER_FLOATING_UPSELL = "emoji_picker_floating_upsell", g.STICKER_IN_MESSAGE_HOVER = "sticker_in_message_hover", g.EMPTY_STICKER_PICKER_UPSELL = "empty_sticker_picker_upsell", g.STREAM_QUALITY_INDICATOR = "stream_quality_indicator", g.GIFT_STREAM_QUALITY_INDICATOR = "gift_stream_quality_indicator", g.STREAM_QUALITY_UPSELL = "stream_quality_upsell", g.MESSAGE_LENGTH_UPSELL = "message_length_upsell", g.MESSAGE_LENGTH_IN_EDITOR_UPSELL = "message_length_in_editor_upsell", g.CUSTOM_PROFILE_UPSELL = "custom profiles upsell modal", g.CUSTOM_PROFILE_TRY_OUT_UPSELL = "try out custom profile in settings upsell", g.VIDEO_BACKGROUNDS_MODAL = "video backgrounds modal", g.VIDEO_BACKGROUNDS_INLINE = "video backgrounds inline", g.GUILD_CAP_INLINE_SERVER_LIST = "guild_cap_inline_server_list", g.GUILD_PREMIUM_UPSELL_MODAL = "premium guild premium upsell modal", g.GUILD_CAP_INLINE_INVITE_MODAL = "guild_cap_inline_invite_modal", g.GUILD_CAP_MODAL_UPSELL = "guild_cap_modal_upsell", g.PREMIUM_GUILD_IDENTITY_MODAL = "premium guild identity upsell alert", g.CUSTOM_PROFILE_SETTINGS_BANNER_BUTTON = "custom profiles settings banner upsell", g.CUSTOM_PROFILES_PROFILE_BANNER_SOCIAL_UPSELL = "custom profiles profile banner social upsell", g.STICKER_PICKER_UPSELL = "sticker_picker_upsell", g.ANIMATED_AVATAR_PREVIEW_GIF_MODAL = "animated avatar preview gif modal", g.PREMIUM_PROGRESS_BAR = "premium_progress_bar_tooltip", g.INVITE_SPLASH_UPSELL = "premium_invite_splash_upsell", g.ANIMATED_USER_AVATAR_MODAL = "animated user avatar upsell modal", g.UPLOAD_ERROR_UPSELL = "upload error upsell", g.PREMIUM_GUILD_MEMBER_PROFILE_UPSELL_INLINE = "premium guild member profile upsell inline", g.CONCURRENT_ACTIVITIES = "Concurrent Activities", g.PREMIUM_UNCANCEL_WINBACK_MODAL_VIEWED = "premium_uncancel_winback_modal_viewed", g.ANIMATED_VIDEO_BACKGROUND_NEW_PRESET = "animated_video_background_new_preset", g.LOW_PRICE_EXPERIMENT_TOOLTIP = "low_price_experiment_tooltip", g.PREMIUM_PROFILE_BADGE_UPSELL = "premium_profile_badge_upsell", g.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_EMOJI = "emoji", g.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_PROFILE_CUSTOMIZATION = "profile customization", g.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_HD_STREAMING = "hd streaming", g.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_LARGER_FILE_UPLOADS = "larger file uploads", g.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_BOGO = "bogo", g.VOICE_CHANNEL_EFFECTS_UPSELL = "voice_channel_effects_upsell", g.VOICE_CHANNEL_EFFECTS_BAR_EMOJI_UPSELL = "Voice Channel Effect Bar Emoji Upsell", g.VOICE_CHANNEL_EFFECTS_TOGGLE_CLICKED = "voice_channel_effects_toggle_clicked", g.VOICE_CHANNEL_EFFECTS_TOGGLE_CLICKED_EXPANDED = "voice_channel_effects_toggle_clicked_expanded", g.PROFILE_THEME_UPSELL_MODAL = "profile_theme_upsell_modal", g.PROFILE_EFFECTS_INLINE_SETTINGS = "profile_effects_inline_settings", g.PROFILE_EFFECTS_INLINE_SETTINGS_MOBILE = "profile_effects_inline_settings_mobile", g.HIGH_VIDEO_QUALITY_UPSELL = "high_video_quality_upsell", g.PREMIUM_PROFILE_TRY_IT_OUT = "premium_profile_try_it_out", g.BURST_REACTION_RAIL_UPSELL = "burst_reaction_rail_upsell", g.BURST_REACTION_UPSELL = "burst_reaction_upsell", g.BURST_REACTION_QUICK_ACTION_UPSELL = "burst_reaction_quick_action_upsell", g.BURST_REACTION_CONTEXT_MENU_UPSELL = "burst_reaction_context_menu_upsell", g.PREMIUM_CLIENT_THEME_TRY_IT_OUT = "premium_client_theme_try_it_out", g.PREMIUM_CLIENT_THEME_SETTINGS_UPSELL = "premium_client_theme_settings_upsell", g.VIDEO_STAGE_LIMIT = "video_stage_limit", g.SOUND_PICKER_SOUND_CLICKED = "sound_picker_sound_clicked", g.APP_ICON_UPSELL = "app_icon_upsell", g.COLLECTIBLES_SHOP = "collectibles_shop", g.COLLECTIBLES_PROFILE_SETTINGS_UPSELL = "collectibles_profile_settings_upsell", g.COLLECTIBLES_PREMIUM_MARKETING_PAGE_UPSELL = "collectibles_premium_marketing_page_upsell", g.CLIPS_GUILD_SIDEBAR_COACHMARK_PREMIUM_EARLY_ACCESS_UPSELL = "clips_guild_sidebar_coachmark_premium_early_access_upsell", g.CLIPS_GO_LIVE_PREMIUM_EARLY_ACCESS_ROADBLOCK_UPSELL = "clips_go_live_premium_early_access_roadblock_upsell", g.CUSTOM_NOTIFICATION_SOUNDS_UPSELL = "custom_notification_sounds_upsell", g.CUSTOM_NOTIFICATION_SOUNDS_SETTINGS_UPSELL = "custom_notification_sounds_settings_inline_upsell", g.EMOJI_EVERYWHERE_INLINE_UPSELL = "emoji_everywhere_inline_upsell", g.EMOJI_EVERYWHERE_UPSELL = "emoji_everywhere_upsell", g.SOUNDBOARD_EVERYWHERE_INLINE_UPSELL = "soundboard_everywhere_inline_upsell", g.SOUNDBOARD_EVERYWHERE_UPSELL = "soundboard_everywhere_upsell", g.LARGER_FILE_UPLOAD_INLINE_UPSELL = "larger_file_upload_inline_upsell", g.LARGER_FILE_UPLOAD_UPSELL = "larger_file_upload_upsell", g.ANIMATED_EMOJI_UPSELL = "animated_emoji_upsell", (L = u || (u = {}))[L.PREMIUM_TIER_1 = 1] = "PREMIUM_TIER_1", L[L.PREMIUM_TIER_2 = 2] = "PREMIUM_TIER_2", L[L.GUILD_BOOST = 4] = "GUILD_BOOST", L[L.PREMIUM_TIER_0 = 8] = "PREMIUM_TIER_0"; let eG = Object.freeze({ "978380684370378762": 8, "521846918637420545": 1, "521847234246082599": 2, "590663762298667008": 4 }), ew = 52428800, ek = { [V.BoostedGuildTiers.NONE]: 5, [V.BoostedGuildTiers.TIER_1]: 10, [V.BoostedGuildTiers.TIER_2]: 15, [V.BoostedGuildTiers.TIER_3]: 30 }, eB = { [V.BoostedGuildTiers.NONE]: ek[V.BoostedGuildTiers.NONE], [V.BoostedGuildTiers.TIER_1]: ek[V.BoostedGuildTiers.NONE] + ek[V.BoostedGuildTiers.TIER_1], [V.BoostedGuildTiers.TIER_2]: ek[V.BoostedGuildTiers.NONE] + ek[V.BoostedGuildTiers.TIER_1] + ek[V.BoostedGuildTiers.TIER_2], [V.BoostedGuildTiers.TIER_3]: ek[V.BoostedGuildTiers.NONE] + ek[V.BoostedGuildTiers.TIER_1] + ek[V.BoostedGuildTiers.TIER_2] + ek[V.BoostedGuildTiers.TIER_3] }, eV = { [V.BoostedGuildTiers.NONE]: 8, [V.BoostedGuildTiers.TIER_1]: 24, [V.BoostedGuildTiers.TIER_2]: 36, [V.BoostedGuildTiers.TIER_3]: 48 }, ex = Object.freeze({ [V.BoostedGuildTiers.NONE]: { features: [], limits: { emoji: x.EMOJI_MAX_SLOTS, bitrate: V.BITRATE_MAX, fileSize: V.MAX_ATTACHMENT_SIZE, screenShareQualityFramerate: 30, screenShareQualityResolution: "720p", soundboardSounds: eV[V.BoostedGuildTiers.NONE], maxConcurrentActivities: 2, stickers: eB[V.BoostedGuildTiers.NONE], stageVideoUsers: V.MAX_STAGE_VIDEO_USER_LIMIT_TIER01 } }, [V.BoostedGuildTiers.TIER_1]: { features: [V.GuildFeatures.INVITE_SPLASH, V.GuildFeatures.ANIMATED_ICON], limits: { emoji: 100, bitrate: 128e3, fileSize: V.MAX_ATTACHMENT_SIZE, screenShareQualityFramerate: 60, screenShareQualityResolution: "720p", soundboardSounds: eV[V.BoostedGuildTiers.TIER_1], maxConcurrentActivities: 3, stickers: eB[V.BoostedGuildTiers.TIER_1], stageVideoUsers: V.MAX_STAGE_VIDEO_USER_LIMIT_TIER01 } }, [V.BoostedGuildTiers.TIER_2]: { features: [V.GuildFeatures.INVITE_SPLASH, V.GuildFeatures.ANIMATED_ICON, V.GuildFeatures.BANNER, V.GuildFeatures.ROLE_ICONS], limits: { emoji: 150, bitrate: 256e3, fileSize: 52428800, screenShareQualityFramerate: 60, screenShareQualityResolution: "1080p", soundboardSounds: eV[V.BoostedGuildTiers.TIER_2], maxConcurrentActivities: 5, stickers: eB[V.BoostedGuildTiers.TIER_2], stageVideoUsers: V.MAX_STAGE_VIDEO_USER_LIMIT_TIER2 } }, [V.BoostedGuildTiers.TIER_3]: { features: [V.GuildFeatures.INVITE_SPLASH, V.GuildFeatures.ANIMATED_ICON, V.GuildFeatures.BANNER, V.GuildFeatures.ANIMATED_BANNER, V.GuildFeatures.VANITY_URL, V.GuildFeatures.ROLE_ICONS], limits: { emoji: 250, bitrate: 384e3, fileSize: 104857600, screenShareQualityFramerate: 60, screenShareQualityResolution: "1080p", soundboardSounds: eV[V.BoostedGuildTiers.TIER_3], maxConcurrentActivities: Number.MAX_SAFE_INTEGER, stickers: eB[V.BoostedGuildTiers.TIER_3], stageVideoUsers: V.MAX_STAGE_VIDEO_USER_LIMIT_TIER3 } } }), eF = ["978380692553465866", "1024422698568122368", "511651871736201216", "511651876987469824", "511651880837840896", "642251038925127690", "944037208325619722", "511651885459963904"]; (v = d || (d = {})).SOUNDBOARD_PLAY = "soundboard play", v.PROFILE_THEME_COLOR = "profile_theme_color", v.PROFILE_BANNER = "profile_banner", v.ANIMATED_AVATAR = "animated_avatar", v.AVATAR_DECORATION = "avatar_decoration", v.CLIENT_THEME = "client_theme", v.SHARED_CANVAS = "shared_canvas", v.PROFILE_EFFECT = "profile_effect", (D = _ || (_ = {})).FREE = "free", D.PREMIUM_STANDARD = "premium-standard"; let eH = { "1024422698568122368": 16, "511651876987469824": 16, "511651885459963904": 16, "944037208325619722": 8, "642251038925127690": 5 }; (M = c || (c = {})).HIGH_STREAMING_QUALITY = "high_streaming_quality", M.MID_STREAMING_QUALITY = "mid_streaming_quality"; let eY = Object.freeze({ high_streaming_quality: 2, mid_streaming_quality: 1 }); (y = E || (E = {}))[y.UserSettings = 0] = "UserSettings", y[y.ApplicationStoreHome = 1] = "ApplicationStoreHome", (P = I || (I = {}))[P.DEFAULT = 0] = "DEFAULT", P[P.WINTER = 1] = "WINTER", (U = T || (T = {}))[U.SNOWGLOBE = 1] = "SNOWGLOBE", U[U.BOX = 2] = "BOX", U[U.CUP = 3] = "CUP", U[U.STANDARD_BOX = 4] = "STANDARD_BOX", U[U.CAKE = 5] = "CAKE", U[U.CHEST = 6] = "CHEST", U[U.COFFEE = 7] = "COFFEE", U[U.SEASONAL_STANDARD_BOX = 8] = "SEASONAL_STANDARD_BOX", U[U.SEASONAL_CAKE = 9] = "SEASONAL_CAKE", U[U.SEASONAL_CHEST = 10] = "SEASONAL_CHEST", U[U.SEASONAL_COFFEE = 11] = "SEASONAL_COFFEE", (b = f || (f = {})).USER_NOT_VERIFIED = "user_not_verified", b.NO_CODE_BODY = "no_code_body", b.NO_PROMOTION = "no_promotion", b.CODE_CLAIMED = "code_claimed", b.EXISTING_SUBSCRIBER = "existing_subscriber", b.PREVIOUS_SUBSCRIBER = "previous_subscriber", b.BLOCKED_PAYMENT = "blocked_payment"; let ej = Object.freeze({ IS_BLOCKED_IOS: 32, IS_OUTBOUND_REDEEMABLE_BY_TRIAL_USERS: 64, SUPPRESS_NOTIFICATION: 128 }), eW = Object.freeze({ 3: { fileSize: ew }, 1: { fileSize: 52428800 }, 2: { fileSize: 524288e3 } }); (G = S || (S = {})).EXPLORE_ALL_PERKS_CLICKED = "explore_all_perks_clicked", G.HELPER_COLLAPSED = "helper_collapsed", G.HELPER_UNCOLLAPSED = "helper_uncollapsed", G.UNLOCK_EMOJI_CLICKED = "unlock_emoji_clicked", G.CUSTOM_PROFILES_CLICKED = "custom_profiles_clicked", G.SERVER_BOOSTS_CLICKED = "server_boosts_clicked", G.HELPER_DISMISSED = "premium_feature_helper_dismissed", G.HELPER_RENDERED = "premium_feature_helper_rendered", (w = h || (h = {})).EMOJI_TUTORIAL_STARTED = "emoji_tutorial_started", w.EMOJI_INTRO_VIEWED = "emoji_intro_viewed", w.EMOJI_PROMPT_VIEWED = "emoji_prompt_viewed", w.CUSTOM_PROFILE_TUTORIAL_STARTED = "custom_profile_tutorial_started", w.CUSTOM_PROFILE_AVATAR_INTRO_VIEWED = "custom_profile_avatar_intro_viewed", w.CUSTOM_PROFILE_AVATAR_DECORATIONS_VIEWED = "custom_profile_avatar_decorations_viewed", w.CUSTOM_PROFILE_BANNER_INTRO_VIEWED = "custom_profile_banner_intro_viewed", w.CUSTOM_PROFILE_THEME_INTRO_VIEWED = "custom_profile_theme_intro_viewed", w.SERVER_PROFILE_INTRO_VIEWED = "server_profile_intro_viewed", w.SERVER_BOOST_TUTORIAL_STARTED = "server_boost_tutorial_started", w.BOOST_INTRO_VIEWED = "boost_intro_viewed", w.BOOST_PROMPT_VIEWED = "boost_prompt_viewed", (k = A || (A = {})).BOOST = "boost", k.DISMISS = "dismiss", (B = m || (m = {})).BADGE_TOOLTIP_VIEWED = "share_nitro_bagde_tooltip_viewed", B.BADGE_CLICKED = "share_nitro_badge_clicked", B.FLOW_STARTED = "share_nitro_flow_started", B.FLOW_COMPLETED = "share_nitro_flow_completed"; let eK = new Set(["PL", "TR"]), ez = [1, 2, 3], eZ = [4, 5, 7, 6], eX = [8, 9, 11, 10], eQ = eX.concat(ez), eq = 190, eJ = 3, e$ = 30 }, 98278: function(e, t, n) { "use strict"; n.r(t), n.d(t, { navigateToPremiumMarketingPage: function() { return s } }); var i = n("230711"), r = n("981631"); let s = function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; i.default.open(r.UserSettingsSections.PREMIUM, null, { openWithoutBackstack: e }) } }, 533293: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return r } }); class r { constructor(e, t, n) { i(this, "name", void 0), i(this, "description", void 0), i(this, "getFeatureValue", void 0), this.name = e, this.description = n, this.getFeatureValue = t, Object.defineProperty(this, "getFeatureValue", { value: t, configurable: !1, writable: !1 }) } } }, 491819: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getBasePlanIdForSubscriptionItems: function() { return r } }); var i = n("474936"); function r(e, t, n) { let r = e.find(e => { let t = i.SubscriptionPlanInfo[e.planId]; return null != t && null != t.premiumType }); if (null == r) { if (e.length > 0) { let r = i.SubscriptionPlanInfo[e[0].planId]; t = r.interval, n = r.intervalCount } return function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, n = Object.keys(i.SubscriptionPlanInfo).find(n => { let r = i.SubscriptionPlanInfo[n]; return null != r && r.skuId === i.PremiumSubscriptionSKUs.NONE && r.interval === e && r.intervalCount === t }); return null != n ? n : i.SubscriptionPlans.NONE_MONTH }(t, n) } return r.planId } }, 374649: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getItemUnitPriceWithDiscount: function() { return p }, updateSubscriptionInvoicePreview: function() { return T }, useGetSubscriptionInvoice: function() { return N }, useOneTimePurchaseInvoicePreview: function() { return A }, useSubscriptionInvoicePreview: function() { return m } }), n("47120"); var i = n("470079"), r = n("512722"), s = n.n(r), a = n("442837"), o = n("544891"), l = n("881052"), u = n("146528"), d = n("78839"), _ = n("74538"), c = n("73346"), E = n("981631"); async function I(e) { let { items: t, paymentSourceId: n, trialId: i, code: r, applyEntitlements: s = !1, currency: a, renewal: d, metadata: c } = e, I = { items: (t = (0, _.coerceExistingItemsToNewItemInterval)(t)).map(e => { let { planId: t, ...n } = e; return { ...n, plan_id: t } }), payment_source_id: n, trial_id: i, code: r, apply_entitlements: s, currency: a, renewal: d, metadata: c }; try { let e = await o.HTTP.post({ url: E.Endpoints.BILLING_SUBSCRIPTIONS_PREVIEW, body: I, oldFormErrors: !0 }); return u.default.createInvoiceFromServer(e.body) } catch (e) { throw new l.BillingError(e) } } async function T(e) { let { subscriptionId: t, items: n, paymentSourceId: i, renewal: r, currency: s, applyEntitlements: a = !1, analyticsLocations: d, analyticsLocation: c, userDiscountOfferId: I } = e; null != n && (n = (0, _.coerceExistingItemsToNewItemInterval)(n)); let T = { items: null == n ? void 0 : n.map(e => { let { planId: t, ...n } = e; return { ...n, plan_id: t } }), payment_source_id: i, renewal: r, apply_entitlements: a, currency: s, user_discount_offer_id: I }; try { let e = await o.HTTP.patch({ url: E.Endpoints.BILLING_SUBSCRIPTION_PREVIEW(t), query: { location: c, location_stack: d }, body: T, oldFormErrors: !0 }); return u.default.createInvoiceFromServer(e.body) } catch (e) { throw new l.BillingError(e) } } async function f(e) { let { paymentSourceId: t, skuId: n, subscriptionPlanId: i, currency: r, loadId: a } = e; s()(n, "SKU ID is missing for one time purchase gift invoice preview"); try { let e = await (0, c.httpGetWithCountryCodeQuery)({ url: E.Endpoints.STORE_SKU_PURCHASE(n), query: { gift: !0, payment_source_id: t, sku_subscription_plan_id: i, currency: r, load_id: a }, oldFormErrors: !0 }); return u.default.createInvoiceFromServer(e.body) } catch (e) { throw new l.BillingError(e) } } async function S(e) { let { subscriptionId: t, preventFetch: n } = e; if (n) return null; let i = await o.HTTP.get({ url: E.Endpoints.BILLING_SUBSCRIPTION_INVOICE(t), oldFormErrors: !0 }); return u.default.createInvoiceFromServer(i.body) } function h(e, t) { let { preventFetch: n = !1 } = e, [r, s] = (0, i.useState)(null), [o, l] = (0, i.useState)(null), u = (0, a.useStateFromStores)([d.default], () => d.default.getSubscriptions()); return (0, i.useEffect)(() => { let e = !1; async function i() { try { l(null), s(null); let n = await t(); !e && s(n) } catch (t) { !e && l(t) } } return !n && i(), () => { e = !0 } }, [n, t, u]), [r, o] } function A(e) { let t = (0, i.useCallback)(() => f(e), [JSON.stringify(e)]); return h(e, t) } function m(e) { if ("subscriptionId" in e && null == e.subscriptionId) { let { subscriptionId: t, ...n } = e; e = n } let t = (0, i.useCallback)(() => "subscriptionId" in e ? T(e) : "items" in e ? I(e) : null, [JSON.stringify(e)]); return h(e, t) } function N(e) { let t = (0, i.useCallback)(() => S(e), [JSON.stringify(e)]); return h(e, t) } function p(e) { let t = e.subscriptionPlanPrice; return e.discounts.forEach(n => { let i = n.amount / e.quantity; t -= i }), t } }, 591548: function(e, t, n) { "use strict"; n.r(t), n.d(t, { coalesceInvoiceItems: function() { return s }, createInvoiceItemFromServer: function() { return a } }), n("47120"), n("653041"); var i = n("392711"), r = n.n(i); function s(e) { let t = (e, t) => e.subscriptionPlanId === t.subscriptionPlanId && e.subscriptionPlanPrice === t.subscriptionPlanPrice && e.amount === t.amount && r().isEqual(e.discounts, t.discounts), n = [], i = new Set; return e.map(e => { for (let r of n) if (t(r, e)) { i.add(r.subscriptionPlanId), r.quantity += e.quantity; return } n.push({ ...e }) }), n.map(e => { let t = { ...e }; return i.has(e.subscriptionPlanId) && (t.amount = t.amount * t.quantity, t.discounts = t.discounts.map(e => ({ ...e, amount: e.amount * t.quantity }))), t }) } function a(e) { return { id: e.id, subscriptionPlanId: e.subscription_plan_id, subscriptionPlanPrice: e.subscription_plan_price, amount: e.amount, quantity: e.quantity, discounts: e.discounts } } }, 140465: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useActiveDiscountInfo: function() { return S }, useFetchChurnUserDiscountOffer: function() { return A }, useHasDiscountApplied: function() { return f }, useIsInPremiumOfferExperience: function() { return T }, useShouldFetchChurnOffer: function() { return m } }), n("47120"); var i = n("470079"), r = n("913527"), s = n.n(r), a = n("442837"), o = n("544891"), l = n("78839"), u = n("775412"), d = n("529537"), _ = n("104494"), c = n("639119"), E = n("474936"), I = n("981631"); function T() { let e = (0, c.usePremiumTrialOffer)(), t = (0, u.useHasActiveTrial)(), n = (0, _.usePremiumDiscountOffer)(), i = f(); return null != e || t || null != n || i } let f = () => { var e; let t = (0, a.useStateFromStores)([l.default], () => l.default.getPremiumTypeSubscription()), n = null == t ? void 0 : null === (e = t.metadata) || void 0 === e ? void 0 : e.active_discount_expires_at; return null != n && s()(Date.now()) <= s()(n) }, S = () => { var e; let t = (0, a.useStateFromStores)([l.default], () => l.default.getPremiumTypeSubscription()); switch (null == t ? void 0 : null === (e = t.metadata) || void 0 === e ? void 0 : e.active_discount_id) { case E.PREMIUM_TIER_2_CHURN_1_MONTH_DISCOUNT_ID: case E.PREMIUM_TIER_2_LIKELIHOOD_1_MONTH_30_PERCENT_DISCOUNT_ID: return { duration: 1, percentage: 30 }; case E.PREMIUM_TIER_2_CHURN_3_MONTH_DISCOUNT_ID: case E.PREMIUM_TIER_2_LIKELIHOOD_DISCOUNT_ID: case E.PREMIUM_TIER_2_REACTIVATION_DISCOUNT_ID: return { duration: 3, percentage: 30 }; case E.PREMIUM_TIER_2_LIKELIHOOD_1_MONTH_40_PERCENT_DISCOUNT_ID: return { duration: 1, percentage: 40 }; default: return } }, h = async () => { let e = null; try { var t; let n = await o.HTTP.post({ url: I.Endpoints.CHURN_USER_OFFER }); e = null !== (t = n.body.offer) && void 0 !== t ? t : null } catch (e) {} return e }, A = e => { let [t, n] = i.useState(!1), [r, s] = i.useState(!1), [a, o] = i.useState(null); if (e) return { churnUserDiscountOffer: a, isFetchingChurnDiscountOffer: r }; let l = () => { n(!0), s(!1) }; return !r && !t && (s(!0), h().then(e => { o(e), l() }).catch(e => { l() })), { churnUserDiscountOffer: a, isFetchingChurnDiscountOffer: r } }, m = () => { let { enabled: e } = d.default.useExperiment({ location: "useShouldFetchChurnOffer" }, { autoTrackExposure: !1 }), t = (0, a.useStateFromStores)([l.default], () => l.default.getPremiumTypeSubscription()), n = f(), i = null !== t && t.hasPremiumNitroMonthly, r = null != t && null != t.trialId; return e && i && !r && !n } }, 775412: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useCurrentPremiumTrialTier: function() { return o }, useHasActiveTrial: function() { return a } }); var i = n("442837"), r = n("594174"), s = n("78839"); n("474936"); let a = () => { let e = (0, i.useStateFromStores)([s.default], () => s.default.getPremiumTypeSubscription()); return (null == e ? void 0 : e.trialId) != null }; function o() { let e = (0, i.useStateFromStores)([s.default], () => s.default.getPremiumTypeSubscription()), t = (0, i.useStateFromStores)([r.default], () => r.default.getCurrentUser()); return (null == e ? void 0 : e.trialId) != null ? null == t ? void 0 : t.premiumType : null } }, 804545: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PrideMonthPerksExperiment: function() { return i }, usePrideMonthPerksExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-05_pride_month_perks_experiment", label: "Pride Month Perks Experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enables new nitro perks related to Pride month", config: { enabled: !0 } }] }), r = e => { let { location: t } = e; return i.useExperiment({ location: t }) } }, 803905: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ANIMATED_AVATAR: function() { return S }, ANIMATED_EMOJIS: function() { return c }, APP_ICONS: function() { return O }, BOOST_DISCOUNT: function() { return R }, CLIENT_THEMES: function() { return C }, COLLECTIBLES: function() { return p }, CUSTOM_CALL_SOUNDS: function() { return f }, CUSTOM_DISCRIMINATOR: function() { return h }, CUSTOM_NOTIFICATION_SOUNDS: function() { return D }, EMOJIS_EVERYWHERE: function() { return E }, FANCY_VOICE_CHANNEL_REACTIONS: function() { return M }, FREE_BOOSTS: function() { return g }, INCREASED_GUILD_LIMIT: function() { return b }, INCREASED_MESSAGE_LENGTH: function() { return G }, INCREASED_VIDEO_UPLOAD_QUALITY: function() { return w }, INSTALL_PREMIUM_APPLICATIONS: function() { return y }, PREMIUM_GUILD_MEMBER_PROFILE: function() { return A }, PROFILE_BADGES: function() { return m }, PROFILE_PREMIUM_FEATURES: function() { return N }, REDEEM_PREMIUM_PERKS: function() { return P }, SOUNDBOARD_EVERYWHERE: function() { return T }, STICKERS_EVERYWHERE: function() { return I }, STREAM_HIGH_QUALITY: function() { return v }, STREAM_MID_QUALITY: function() { return L }, UPLOAD_LARGE_FILES: function() { return k }, VIDEO_FILTER_ASSETS: function() { return U }, canUserUse: function() { return V } }); var i = n("848246"), r = n("710845"), s = n("380684"), a = n("533293"), o = n("575691"), l = n("474936"); let u = new r.default("ProductCatalog.tsx"), d = Object.freeze({ [l.PremiumTypes.TIER_0]: l.PremiumSubscriptionSKUs.TIER_0, [l.PremiumTypes.TIER_1]: l.PremiumSubscriptionSKUs.TIER_1, [l.PremiumTypes.TIER_2]: l.PremiumSubscriptionSKUs.TIER_2 }); class _ extends a.default { constructor(e, t) { super(e, e => (function(e, t) { if (null == t || null == t.premiumType) return !1; try { let n = d[t.premiumType]; if (null == n) return u.warn("Cannot find the corresponding SKU to the user's premium type ".concat(t.premiumType)), !1; let i = B[n]; if (null == i) return u.warn("Cannot find the corresponding product catalog entry to the user's SKU ".concat(n, " and premium type ").concat(t.premiumType)), !1; return i.skuFeatures.includes(e) } catch (e) { var n; u.error("Error while retrieving user's feature access: ".concat(null !== (n = e.message) && void 0 !== n ? n : JSON.stringify(e))) } return !1 })(this, e), t) } } let c = new _(i.EntitlementFeatureNames.ANIMATED_EMOJIS), E = new _(i.EntitlementFeatureNames.EMOJIS_EVERYWHERE), I = new _(i.EntitlementFeatureNames.STICKERS_EVERYWHERE), T = new _(i.EntitlementFeatureNames.SOUNDBOARD_EVERYWHERE), f = new _(i.EntitlementFeatureNames.CUSTOM_CALL_SOUNDS), S = new _(i.EntitlementFeatureNames.ANIMATED_AVATAR), h = new _(i.EntitlementFeatureNames.CUSTOM_DISCRIMINATOR), A = new _(i.EntitlementFeatureNames.PREMIUM_GUILD_MEMBER_PROFILE), m = new _("profileBadges"), N = new _(i.EntitlementFeatureNames.PROFILE_PREMIUM_FEATURES, "custom banner and avatar decoration"), p = new _("collectibles"), O = new _("appIcons"), C = new _(i.EntitlementFeatureNames.CLIENT_THEMES), R = new _("boostDiscount"), g = new _("freeBoosts"), L = new _(i.EntitlementFeatureNames.STREAM_MID_QUALITY), v = new _(i.EntitlementFeatureNames.STREAM_HIGH_QUALITY), D = new _(i.EntitlementFeatureNames.CUSTOM_NOTIFICATION_SOUNDS), M = new _("fancyVoiceChannelReactions"), y = new _("installPremiumApplications"), P = new _("redeemPremiumPerks"), U = new _(i.EntitlementFeatureNames.VIDEO_FILTER_ASSETS); new a.default(i.EntitlementFeatureNames.INCREASED_FILE_UPLOAD_SIZE, s.getUserMaxFileSize); let b = new _(i.EntitlementFeatureNames.INCREASED_GUILD_LIMIT), G = new _(i.EntitlementFeatureNames.INCREASED_MESSAGE_LENGTH), w = new _("increasedVideoUploadQuality"), k = new _("uploadLargeFiles"), B = Object.freeze({ [l.PremiumSubscriptionSKUs.TIER_0]: new o.default(l.PremiumSubscriptionSKUs.TIER_0, [c, E, I, m, U, w, k, O]), [l.PremiumSubscriptionSKUs.TIER_1]: new o.default(l.PremiumSubscriptionSKUs.TIER_1, [c, E, S, h, m, R, L, M, w, k, O]), [l.PremiumSubscriptionSKUs.TIER_2]: new o.default(l.PremiumSubscriptionSKUs.TIER_2, [c, E, I, T, f, S, h, A, m, N, C, R, g, L, v, M, y, P, U, b, G, w, k, O, p, D]) }); function V(e, t) { return e.getFeatureValue(t) } }, 138464: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setCanPlayWowMoment: function() { return r } }); var i = n("570140"); let r = e => { i.default.dispatch({ type: "PURCHASED_ITEMS_FESTIVITY_SET_CAN_PLAY_WOW_MOMENT", value: e }) } }, 281494: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReferralOfferStatus: function() { return i }, checkRecipientEligibility: function() { return T }, createReferralTrial: function() { return S }, createReferralTrials: function() { return f }, fetchReferralEligibleUsers: function() { return E }, fetchReferralsRemaining: function() { return I }, resolveReferralTrialOffer: function() { return h } }), n("47120"), n("653041"); var i, r, s = n("544891"), a = n("570140"), o = n("904245"), l = n("598077"), u = n("944486"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(r = i || (i = {}))[r.REDEEMED = 1] = "REDEEMED", r[r.PENDING = 2] = "PENDING"; let c = new class e { set(e, t) { this.cache.set(e, t) } get(e) { return this._checkExpiration(), this.cache.get(e) } has(e) { return this._checkExpiration(), this.cache.has(e) } _checkExpiration() { this.expiration < Date.now() && this.cache.clear() } constructor() { _(this, "cache", void 0), _(this, "expiration", void 0), this.cache = new Map, this.expiration = Date.now() + 6e5 } }; async function E(e, t) { let n = JSON.stringify({ index: e, searchQuery: t }); if (c.has(n)) return c.get(n); let { users: i, next_index: r } = (await s.HTTP.post({ url: d.Endpoints.GET_REFERRAL_ELIGIBLE_USERS, body: { index: e, limit: 10, search_query: t }, oldFormErrors: !0 })).body, a = { users: i.map(e => new l.default(e)), nextIndex: r }; return c.set(n, a), a } let I = () => (a.default.dispatch({ type: "BILLING_REFERRALS_REMAINING_FETCH_START" }), s.HTTP.get({ url: d.Endpoints.GET_REFERRALS_REMAINING, oldFormErrors: !0 }).then(e => { var t, n; let i = new Map; if (null != e.body && null != e.body.recipient_status) for (let t in e.body.recipient_status) { let n = e.body.recipient_status[t]; i.set(t, n) } a.default.dispatch({ type: "BILLING_REFERRALS_REMAINING_FETCH_SUCCESS", referrals_remaining: null != e.body && null != e.body.referrals_remaining ? e.body.referrals_remaining : 0, sent_user_ids: null != e.body && null != e.body.sent_user_ids ? e.body.sent_user_ids : [], refresh_at: null !== (n = null === (t = e.body) || void 0 === t ? void 0 : t.refresh_at) && void 0 !== n ? n : null, recipient_status: i, has_eligible_friends: e.body.has_eligible_friends }) }, () => { a.default.dispatch({ type: "BILLING_REFERRALS_REMAINING_FETCH_FAIL" }) })), T = e => (a.default.dispatch({ type: "BILLING_CREATE_REFERRAL_PREVIEW_START", recipientId: e }), s.HTTP.post({ url: d.Endpoints.CREATE_REFERRAL_PREVIEW(e), oldFormErrors: !0 }).then(t => { a.default.dispatch({ type: "BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS", recipientId: e, is_eligible: null != t.body && t.body.is_eligible }) }, () => { a.default.dispatch({ type: "BILLING_CREATE_REFERRAL_PREVIEW_FAIL", recipientId: e }) })); async function f(e) { let t = []; for (let i of e) { var n; let e = null !== (n = (await s.HTTP.post({ url: d.Endpoints.CREATE_REFERRAL(i), oldFormErrors: !0 })).body) && void 0 !== n ? n : null; null != e && t.push(e) } return a.default.dispatch({ type: "CREATE_REFERRALS_SUCCESS", userTrialOffers: t }), t } async function S(e) { try { var t; let n = await s.HTTP.post({ url: d.Endpoints.CREATE_REFERRAL(e), oldFormErrors: !0 }), i = null !== (t = n.body) && void 0 !== t ? t : null; return a.default.dispatch({ type: "BILLING_CREATE_REFERRAL_SUCCESS", userTrialOffer: i }), { userTrialOffer: i } } catch (e) { if (a.default.dispatch({ type: "BILLING_CREATE_REFERRAL_FAIL" }), e.body.code === d.AbortCodes.INVALID_MESSAGE_SEND_USER) { let t = u.default.getCurrentlySelectedChannelId(); null != t && o.default.sendClydeError(t, e.body.code) } } } async function h(e) { try { var t; let n = await s.HTTP.get({ url: d.Endpoints.REFERRAL_OFFER_ID_RESOLVE(e), oldFormErrors: !0 }), i = null !== (t = n.body) && void 0 !== t ? t : null; return a.default.dispatch({ type: "BILLING_REFERRAL_RESOLVE_SUCCESS", userTrialOffer: i }), { userTrialOffer: i } } catch (t) { a.default.dispatch({ type: "BILLING_REFERRAL_RESOLVE_FAIL", userTrialOfferId: e }) } } }, 276444: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("275726"), l = n("442837"), u = n("570140"), d = n("594174"), _ = n("281494"), c = n("981631"); let E = null, I = {}, T = [], f = new Map, S = new Set, h = !1, A = new Set, m = new Set, N = {}, p = 0, O = null, C = [], R = !1, g = 0, L = !1, v = null, D = () => !0; function M(e) { A.add(e) } function y(e) { let { messages: t } = e; t.forEach(e => P(e)) } function P(e) { let t = e.type === o.MessageTypes.PREMIUM_REFERRAL ? e.content : null; if (null == t) return !1; if (!m.has(t) && !A.has(t)) { var n; n = t, A.add(n), u.default.wait(() => (0, _.resolveReferralTrialOffer)(t).catch(c.NOOP_NULL)) } } class U extends(i = l.default.Store) { initialize() { this.waitFor(d.default), this.syncWith([d.default], D) } checkAndFetchReferralsRemaining() { null == E && !h && p < 5 && (null == O || O < Date.now()) && (0, _.fetchReferralsRemaining)() } getReferralsRemaining() { return this.checkAndFetchReferralsRemaining(), E } getSentUserIds() { return this.checkAndFetchReferralsRemaining(), null == T ? [] : T } isFetchingReferralsRemaining() { return h } isFetchingRecipientEligibility(e) { return S.has(e) } getRecipientEligibility(e) { return void 0 === I[e] && !S.has(e) && (0, _.checkRecipientEligibility)(e), I[e] } getRelevantUserTrialOffer(e) { return N[e] } isResolving(e) { return A.has(e) } getEligibleUsers() { return C } getFetchingEligibleUsers() { return R } getNextIndexOfEligibleUsers() { return g } getIsEligibleToSendReferrals() { return L } getRefreshAt() { return v } getRelevantReferralTrialOffers() { return N } getRecipientStatus() { return f } } a = "ReferralTrialStore", (s = "displayName") in(r = U) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new U(u.default, { BILLING_REFERRAL_TRIAL_OFFER_UPDATE: function(e) { let { userTrialOfferId: t, recipientId: n } = e; if (!h && (0, _.fetchReferralsRemaining)(), !S.has(n) && (0, _.checkRecipientEligibility)(n), !A.has(t)) { var i; i = t, A.add(i), u.default.wait(() => (0, _.resolveReferralTrialOffer)(t).catch(c.NOOP_NULL)) } }, BILLING_REFERRALS_REMAINING_FETCH_START: function(e) { let {} = e; L = !1, v = null, h = !0 }, BILLING_REFERRALS_REMAINING_FETCH_SUCCESS: function(e) { let { referrals_remaining: t, sent_user_ids: n, refresh_at: i, recipient_status: r, has_eligible_friends: s } = e; L = null == i && s, h = !1, E = t, T = n, v = i, f = r }, BILLING_REFERRALS_REMAINING_FETCH_FAIL: function(e) { let {} = e; L = !1, v = null, h = !1, p += 1, O = Date.now() + 1e3 * Math.pow(2, p) }, BILLING_CREATE_REFERRAL_PREVIEW_START: function(e) { let { recipientId: t } = e; S.add(t) }, BILLING_CREATE_REFERRAL_PREVIEW_SUCCESS: function(e) { let { recipientId: t, is_eligible: n } = e; I[t] = n, S.delete(t) }, BILLING_CREATE_REFERRAL_PREVIEW_FAIL: function(e) { let { recipientId: t } = e; I[t] = !1, S.delete(t) }, BILLING_CREATE_REFERRAL_SUCCESS: function(e) { let { userTrialOffer: t } = e; (0, _.fetchReferralsRemaining)(), N[t.id] = t, T = [...T, t.user_id] }, CREATE_REFERRALS_SUCCESS: function(e) { let { userTrialOffers: t } = e; for (let e of ((0, _.fetchReferralsRemaining)(), t)) N[e.id] = e, T = [...T, e.user_id] }, BILLING_REFERRAL_RESOLVE_SUCCESS: function(e) { let { userTrialOffer: t } = e; null != t && (A.delete(t.id), m.add(t.id), N[t.id] = t) }, BILLING_REFERRAL_RESOLVE_FAIL: function(e) { let { userTrialOfferId: t } = e; A.delete(t), m.add(t) }, REFERRALS_FETCH_ELIGIBLE_USER_START: function() { R = !0 }, REFERRALS_FETCH_ELIGIBLE_USER_SUCCESS: function(e) { let { users: t, nextIndex: n } = e; R = !1, C = t, g = n }, REFERRALS_FETCH_ELIGIBLE_USER_FAIL: function() { R = !1 }, LOAD_MESSAGES_SUCCESS: y, MESSAGE_CREATE: function(e) { let { message: t } = e; P(t) }, LOAD_MESSAGES_AROUND_SUCCESS: y, LOGOUT: function() { E = null, I = {}, T = [], S = new Set, h = !1, A = new Set, m = new Set, N = {}, p = 0, O = null, C = [], R = !1, g = 0, L = !1, v = null, f = new Map } }) }, 575691: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return r } }); class r { constructor(e, t) { i(this, "skuId", void 0), i(this, "skuFeatures", void 0), this.skuId = e, this.skuFeatures = t } } }, 646476: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SeasonalGiftingMarketingExperiment: function() { return _ }, useIsSeasonalGiftingActive: function() { return c } }), n("47120"); var i = n("470079"), r = n("913527"), s = n.n(r), a = n("846519"), o = n("987170"); let l = new Date("2024-01-04T07:59:59.000Z"), u = s()(l), d = (0, o.default)({ id: "2023-11_seasonal_gifting", label: "Seasonal Gifting 2023", kind: "user", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }), _ = (0, o.default)({ id: "2023-11_seasonal_gifting_marketing_2023", label: "Seasonal Gifting Marketing 2023", kind: "user", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }); function c() { let [e, t] = i.useState(() => u.isAfter(Date.now())); return i.useEffect(() => { let n = new a.Timeout, i = () => { let e = Math.min(u.diff(Date.now(), "millisecond"), 864e5); null == n || n.start(e, () => { u.isBefore(Date.now()) ? t(!1) : i() }) }; return e && i(), () => n.stop() }), e } t.default = d }, 177082: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("355467"), r = n("496929"), s = n("147913"), a = n("594174"), o = n("351402"), l = n("78839"), u = n("580130"), d = n("630388"), _ = n("74538"), c = n("474936"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class I extends s.default { constructor(...e) { super(...e), E(this, "actions", { POST_CONNECTION_OPEN: () => { this.maybeFetchSubscriptions(), this.maybeFetchCountryCode(), this.maybeFetchMostRecentSubscription() } }), E(this, "maybeFetchSubscriptions", async () => { let e = a.default.getCurrentUser(); if (_.default.isPremium(e)) { !l.default.hasFetchedSubscriptions() && await (0, i.fetchSubscriptions)(); let e = l.default.getPremiumSubscription(); (null == e ? void 0 : e.paymentSourceId) == null && !u.default.applicationIdsFetched.has(c.PREMIUM_SUBSCRIPTION_APPLICATION) && await (0, r.fetchUserEntitlementsForApplication)(c.PREMIUM_SUBSCRIPTION_APPLICATION) } }), E(this, "maybeFetchMostRecentSubscription", () => { let e = a.default.getCurrentUser(); null != e && !_.default.isPremium(e) && null != e.purchasedFlags && ((0, d.hasFlag)(e.purchasedFlags, c.PurchasedFlags.PREMIUM_TIER_1) || (0, d.hasFlag)(e.purchasedFlags, c.PurchasedFlags.PREMIUM_TIER_2)) && (0, i.fetchMostRecentSubscription)() }), E(this, "maybeFetchCountryCode", async () => { let e = a.default.getCurrentUser(); _.default.isPremium(e) && !o.default.ipCountryCodeLoaded && await this.fetchCountryCode() }), E(this, "fetchCountryCode", async () => { await (0, i.fetchIpCountryCode)(), null != o.default.ipCountryCode && await (0, i.fetchPaymentSources)() }) } } t.default = new I }, 316941: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("524437"), s = n("570140"), a = n("605236"), o = n("675478"), l = n("981631"); t.default = { async fetchUserTrialOffer() { try { let { body: e } = await i.HTTP.get({ url: l.Endpoints.USER_TRIAL_OFFER, oldFormErrors: !0 }); null == e && (0, a.isDismissibleContentDismissed)(r.DismissibleContent.NAGBAR_NOTICE_PREMIUM_TIER_TWO_TRIAL_ENDING) && (0, o.removeDismissedContent)(r.DismissibleContent.NAGBAR_NOTICE_PREMIUM_TIER_TWO_TRIAL_ENDING), s.default.dispatch({ type: "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS", userTrialOffer: e }) } catch (e) { s.default.dispatch({ type: "BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS" }) } }, async acknowledgeUserTrialOffer(e) { if (null == e.expires_at) try { let { body: t } = await i.HTTP.post({ url: l.Endpoints.USER_TRIAL_OFFER_ACKNOWLEDGED(e.id) }); s.default.dispatch({ type: "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS", userTrialOffer: t }) } catch (e) { 404 === e.status && s.default.dispatch({ type: "BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS", userTrialOffer: null }) } } } }, 485731: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hqStreamingFrameAnimationPlayed: function() { return s }, hqStreamingPopoutDismissed: function() { return o }, hqStreamingSetEnabled: function() { return r }, hqStreamingUnlockAnimationPlayed: function() { return a }, usePerksDemosUIStore: function() { return i } }); let i = (0, n("652874").default)(() => ({ hqStreamingFrameAnimationPlayed: !1, hqStreamingUnlockAnimationPlayed: !1, hqStreamingPopoutDismissed: !1, hqStreamingIsEnabled: !1, hqStreamingDidEnable: !1 })); function r(e) { let { hqStreamingDidEnable: t } = i.getState(); i.setState({ hqStreamingIsEnabled: e, hqStreamingDidEnable: e || t }) } function s(e) { i.setState({ hqStreamingFrameAnimationPlayed: e }) } function a(e) { i.setState({ hqStreamingUnlockAnimationPlayed: e }) } function o(e) { i.setState({ hqStreamingPopoutDismissed: e }) } }, 614011: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PremiumStreamingEffectOverlay: function() { return u }, preloadPremiumStreamingEffectImage: function() { return l } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("134432"), a = n("931761"), o = n("242493"); function l() { (0, s.loadImage)("".concat(o, "?query=true")) } function u(e) { let { onPlayed: t, played: n } = e, [s, l] = r.useState(n), u = r.useRef(0); if (r.useEffect(() => (clearTimeout(u.current), u.current = setTimeout(() => { t() }, 3e3), () => { clearTimeout(u.current), t() }), [t]), r.useEffect(() => { l(e => !e) }, [n]), n) return null; let d = "".concat(o, "?query=").concat(s); return (0, i.jsx)("div", { className: a.demoEffectOverlay, children: (0, i.jsx)("img", { alt: "", className: a.demoEffectImg, src: d }) }) } }, 424082: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAnnualDiscountsExperimentConfig: function() { return s }, useAnnualDiscountExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_annual_discounts_experiment", label: "Test price for standard annual plan utilizing discount framework", defaultConfig: { enabled: !1, discount_percentage: null }, treatments: [{ id: 0, label: "users receive regular standard annual price (16% discount)", config: { enabled: !1, discount_percentage: 16 } }, { id: 1, label: "users receive 20% discount (4% off regular standard annual price)", config: { enabled: !0, discount_percentage: 20 } }, { id: 2, label: "users receive 25% discount (10% off regular standard annual price)", config: { enabled: !0, discount_percentage: 25 } }] }); function r(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], { enabled: n } = i.useExperiment({ location: e }, { autoTrackExposure: t }); return n } function s(e) { let { enabled: t, discount_percentage: n } = i.getCurrentConfig({ location: e }, { autoTrackExposure: !1 }); return { annualDiscountsEnabled: t, annualDiscountPercentage: n } } }, 59561: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BOGOAnnouncementModalExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-06_bogo_announcement_modal", label: "BOGO Announcement Modal", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Users will see the BOGO announcement modal", config: { enabled: !0 } }] }) }, 388622: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-07_bogo_marketing_materials_experiment", label: "BOGO Marketing Materials", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable BOGO marketing materials", config: { enabled: !0 } }] }); t.default = i }, 61196: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BogoPromotionExperiment: function() { return i }, isBogoPromotionExperimentEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-06_bogo_promotion_gate", label: "BOGO Promotion Manager", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable BOGO Promotion Manager", config: { enabled: !0 } }] }), r = function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; return i.getCurrentConfig({ location: "489551_2" }, { autoTrackExposure: e }) }; t.default = function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; return i.useExperiment({ location: "489551_1" }, { autoTrackExposure: e }) } }, 529537: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-02_churn_user_discount_offer_experiment", label: "Churn User Discount Offer", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "users receive no discount offer when churning", config: { enabled: !0 } }, { id: 1, label: "users receive a 1 month discout offer when churning", config: { enabled: !0 } }, { id: 2, label: "users receive a 3 month discount offer when churning", config: { enabled: !0 } }] }); t.default = i }, 904085: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-09_client_theme_coachmark_reintro", label: "Experiment to reintroduce the client themes experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "enable the coachmark", config: { enabled: !0 } }] }); t.default = i }, 561746: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-10_dcf_holdout", label: "DCF Holdout", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Users will only see DCs that bypass the holdout", config: { enabled: !0 } }] }); t.default = i }, 400407: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LocalizedPricingPromoManagerExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2022-12_localized_pricing_promo_manager", label: "Localized Pricing Promo Manager", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Localized Pricing Promo Manager", config: { enabled: !0 } }] }) }, 650032: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReferralProgramRecipient: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_referral_program_recipient", label: "Referral Program Recipient Experience", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enabled", config: { enabled: !0 } }] }) }, 790368: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-05_referral_trials_birthday_moment", label: "Referral Trials Birthday Moment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Users will see the birthday moment referral trial UX", config: { enabled: !0 } }] }); t.default = i }, 963198: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-02_referral_trials", label: "Referral Trials", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Nitro users can send a Nitro trial offer to another user.", config: { enabled: !0 } }] }); t.default = i }, 923876: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_social_proof_hd_streaming", label: "Social proof in HD streaming upsell", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Show social proof in HD streaming upsell", config: { enabled: !0 } }] }); t.default = i }, 439017: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TrialRedemptionDefaultPlanExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-03_trial_redemption_default_to_monthly_plan", label: "Trial Redemption Default To Monthly Plan", defaultConfig: { defaultToMonthlyPlan: !1 }, treatments: [{ id: 1, label: "Set default plan to monthly plan", config: { defaultToMonthlyPlan: !0 } }] }) }, 348121: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("639119"), r = n("474936"); function s() { let e = (0, i.usePremiumTrialOffer)(), t = r.PremiumTypes.TIER_2; if (null != e) { let n = e.subscription_trial; (null == n ? void 0 : n.sku_id) === r.PremiumSubscriptionSKUs.TIER_0 ? t = r.PremiumTypes.TIER_0 : (null == n ? void 0 : n.sku_id) === r.PremiumSubscriptionSKUs.TIER_2 && (t = r.PremiumTypes.TIER_2) } return { isLoading: !1, suggestedPremiumType: t } } }, 847903: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("470079"), r = n("442837"), s = n("570140"), a = n("355467"), o = n("314897"), l = n("351402"), u = n("853872"); function d() { let e = (0, r.useStateFromStores)([u.default], () => u.default.getDefaultBillingCountryCode()), t = (0, r.useStateFromStores)([l.default], () => l.default.ipCountryCode), n = (0, r.useStateFromStores)([o.default], () => o.default.isAuthenticated()); return i.useEffect(() => { s.default.wait(() => { n && !l.default.isPaymentSourceFetching && !u.default.hasFetchedPaymentSources && a.fetchPaymentSources() }) }, [n]), i.useEffect(() => { n && !l.default.ipCountryCodeLoaded && a.fetchIpCountryCode() }, [t, n]), { defaultBillingCountryCode: e, ipCountryCode: t } } }, 104494: function(e, t, n) { "use strict"; n.r(t), n.d(t, { discountOfferHasTier: function() { return _ }, hasUserDiscountExpired: function() { return d }, usePremiumAnnualDiscountOffer: function() { return I }, usePremiumDiscountOffer: function() { return E } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("846519"), a = n("594174"), o = n("295226"), l = n("74538"), u = n("474936"); function d(e) { return null != e && null != e.expires_at && Date.now() > Date.parse(e.expires_at) } function _(e, t) { var n; return null != e && new Set(null === (n = e.discount) || void 0 === n ? void 0 : n.plan_ids.map(e => u.SubscriptionPlanInfo[e].skuId)).has(t) } function c(e, t) { let n = (0, r.useStateFromStores)([o.default], () => o.default.getUserDiscountOffer(e)), [u, _] = i.useState(d(n)), c = (0, r.useStateFromStores)([a.default], () => (0, l.isPremium)(a.default.getCurrentUser())); return i.useEffect(() => { if (null == n || null == n.expires_at) return; let e = new s.Timeout, t = () => { let i = null != n.expires_at ? Date.parse(n.expires_at) - Date.now() : 0; null == e || e.start(i, () => { !u && d(n) ? _(!0) : t() }) }; return t(), () => e.stop() }, [u, n]), u || c && !t ? null : n } function E() { var e, t; let n = c(u.PREMIUM_TIER_2_LIKELIHOOD_DISCOUNT_ID), i = c(u.PREMIUM_TIER_2_REACTIVATION_DISCOUNT_ID), r = c(u.PREMIUM_TIER_2_LIKELIHOOD_1_MONTH_30_PERCENT_DISCOUNT_ID), s = c(u.PREMIUM_TIER_2_LIKELIHOOD_1_MONTH_40_PERCENT_DISCOUNT_ID); return null !== (t = null !== (e = null != n ? n : i) && void 0 !== e ? e : r) && void 0 !== t ? t : s } function I() { let e = c(u.PREMIUM_TIER_2_ANNUAL_25_PERCENT_DISCOUNT_ID, !0), t = c(u.PREMIUM_TIER_2_ANNUAL_20_PERCENT_DISCOUNT_ID, !0); return null != e ? e : t } }, 639119: function(e, t, n) { "use strict"; n.r(t), n.d(t, { usePremiumTrialOffer: function() { return l } }); var i = n("399606"), r = n("295226"), s = n("276444"), a = n("786397"), o = n("474936"); function l(e) { var t, n, l, u, d; let _ = (0, a.useTrialOffer)(o.PREMIUM_TIER_2_LIKELIHOOD_TRIAL_ID), c = (0, a.useTrialOffer)(o.PREMIUM_TIER_2_REACTIVATION_TRIAL_ID), E = (0, a.useTrialOffer)(r.default.getAnyOfUserTrialOfferId([o.PREMIUM_TIER_2_HFU_ONE_WEEK_TRIAL_ID, o.PREMIUM_TIER_2_HFU_TWO_WEEK_TRIAL_ID, o.PREMIUM_TIER_2_HFU_ONE_MONTH_TRIAL_ID, o.PREMIUM_TIER_0_LIKELIHOOD_TRIAL_ID])), I = (0, a.useTrialOffer)(o.PREMIUM_TIER_2_AUTH3_TRIAL_ID), T = (0, a.useTrialOffer)(o.PREMIUM_TIER_2_NEW_USER_CPV_TRIAL_ID), f = (0, a.useTrialOffer)(o.PREMIUM_TIER_2_REFERRAL_TRIAL_ID), S = (0, i.useStateFromStores)([s.default], () => void 0 === e ? null : s.default.getRelevantUserTrialOffer(e)); return null !== (d = null !== (u = null !== (l = null !== (n = null !== (t = null != f ? f : S) && void 0 !== t ? t : _) && void 0 !== n ? n : c) && void 0 !== l ? l : E) && void 0 !== u ? u : I) && void 0 !== d ? d : T } }, 164207: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PromotionPreviewExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2021-06_preview_promotions", label: "Promotions Preview", defaultConfig: { previewEnabled: !1 }, treatments: [{ id: 1, label: "Preview Enabled", config: { previewEnabled: !0 } }] }) }, 518638: function(e, t, n) { "use strict"; n.r(t), n.d(t, { bogoPromotionFromServer: function() { return I }, claimOutboundPromotion: function() { return S }, fetchClaimedOutboundPromotionCodes: function() { return f }, getOutboundPromotionRedemptionUrl: function() { return h }, getPromotionImageURL: function() { return c }, isOutboundPromotionRedeemableByTrialUsers: function() { return N }, isTrialUserEligibleToSeeOutboundPromotion: function() { return p }, outboundPromotionFromServer: function() { return E }, shouldShowOutboundPromotionNotice: function() { return A }, shouldShowOutboundPromotionOnPlatform: function() { return m } }), n("789020"), n("757143"); var i = n("544891"), r = n("780384"), s = n("706454"), a = n("78839"), o = n("630388"), l = n("358085"), u = n("1844"), d = n("474936"), _ = n("981631"); function c(e, t) { let n = (0, r.isThemeDark)(t) ? "logo-dark" : "logo-light", i = window.GLOBAL_ENV.CDN_HOST, s = "?size=256"; return null != i ? "".concat(location.protocol, "//").concat(i, "/promotions/").concat(e, "/").concat(n).concat(s) : "".concat(location.protocol).concat(window.GLOBAL_ENV.API_ENDPOINT, "/promotions/").concat(e, "/").concat(n).concat(s) } function E(e) { return { id: e.id, startDate: e.start_date, endDate: e.end_date, outboundRedemptionEndDate: e.outbound_redemption_end_date, outboundTitle: e.outbound_title, outboundRedemptionModalBody: e.outbound_redemption_modal_body, outboundRedemptionPageLink: e.outbound_redemption_page_link, outboundRedemptionUrlFormat: e.outbound_redemption_url_format, outboundTermsAndConditions: e.outbound_terms_and_conditions, flags: e.flags } } function I(e) { return { id: e.id, startDate: e.start_date, endDate: e.end_date } } function T(e) { return { code: e.code, userId: e.user_id, claimedAt: e.claimed_at, promotion: E(e.promotion) } } async function f() { return (await i.HTTP.get({ url: _.Endpoints.CLAIMED_OUTBOUND_PROMOTION_CODES, query: { locale: s.default.locale }, oldFormErrors: !0 })).body.map(T) } async function S(e) { return T((await i.HTTP.post({ url: _.Endpoints.CLAIM_OUTBOUND_PROMOTION_CODE(e) })).body) } function h(e, t) { return null != t.outboundRedemptionUrlFormat ? t.outboundRedemptionUrlFormat.replace("{code}", encodeURIComponent(e)) : t.outboundRedemptionPageLink } function A() { let e = u.default.lastSeenOutboundPromotionStartDate, t = u.default.outboundPromotions, n = u.default.consumedInboundPromotionId, i = t.filter(e => { let { id: t, flags: i } = e; return t !== n && !(0, o.hasFlag)(i, d.PromotionFlags.SUPPRESS_NOTIFICATION) }), r = null == e ? i : i.filter(t => { let { startDate: n } = t; return new Date(n) > new Date(e) }), s = u.default.lastDismissedOutboundPromotionStartDate, l = a.default.getPremiumTypeSubscription(), _ = (null == l ? void 0 : l.trialId) != null ? r.filter(e => N(e)) : r; return 0 !== _.length && (null == s || _.some(e => { let { startDate: t } = e; return new Date(t) > new Date(s) })) } function m(e) { return !(0, l.isIOS)() || !(0, o.hasFlag)(e.flags, d.PromotionFlags.IS_BLOCKED_IOS) } function N(e) { return (0, o.hasFlag)(e.flags, d.PromotionFlags.IS_OUTBOUND_REDEEMABLE_BY_TRIAL_USERS) } function p(e, t) { return null != t[e.id] || N(e) } }, 748770: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchActiveBogoPromotion: function() { return T }, fetchActiveOutboundPromotions: function() { return I } }); var i = n("544891"), r = n("381499"), s = n("570140"), a = n("496929"), o = n("706454"), l = n("675478"), u = n("164207"), d = n("518638"), _ = n("1844"), c = n("474936"), E = n("981631"); async function I() { if (!_.default.isFetchingActiveOutboundPromotions) try { s.default.dispatch({ type: "ACTIVE_OUTBOUND_PROMOTIONS_FETCH" }); let t = u.PromotionPreviewExperiment.getCurrentConfig({ location: "5731cc_1" }, { autoTrackExposure: !1 }).previewEnabled ? E.Endpoints.OUTBOUND_PROMOTIONS_PREVIEW : E.Endpoints.OUTBOUND_PROMOTIONS, n = (await i.HTTP.get({ url: t, query: { locale: o.default.locale }, oldFormErrors: !0 })).body, r = _.default.consumedInboundPromotionId; if (!_.default.hasFetchedConsumedInboundPromotionId) { var e; let t = (await (0, a.fetchUserEntitlementsForApplication)(c.PREMIUM_SUBSCRIPTION_APPLICATION, !1)).find(e => null != e.promotion_id && !0 === e.consumed); r = null !== (e = null == t ? void 0 : t.promotion_id) && void 0 !== e ? e : null } s.default.dispatch({ type: "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS", activeOutboundPromotions: n.map(e => (0, d.outboundPromotionFromServer)(e)), consumedInboundPromotionId: r }) } catch (e) { s.default.dispatch({ type: "ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL" }) } } async function T() { if (!_.default.isFetchingActiveBogoPromotion) try { s.default.dispatch({ type: "ACTIVE_BOGO_PROMOTION_FETCH" }); let e = (await i.HTTP.get({ url: E.Endpoints.BOGO_PROMOTIONS, query: { locale: o.default.locale } })).body; s.default.dispatch({ type: "ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS", activePromotion: (0, d.bogoPromotionFromServer)(e) }) } catch (e) { s.default.dispatch({ type: "ACTIVE_BOGO_PROMOTION_FETCH_FAIL" }) } } t.default = { fetchActiveOutboundPromotions: I, dismissOutboundPromotionNotice: function() { s.default.dispatch({ type: "OUTBOUND_PROMOTION_NOTICE_DISMISS" }); let e = _.default.lastDismissedOutboundPromotionStartDate; null != e && l.PreloadedUserSettingsActionCreators.updateAsync("userContent", t => { t.lastDismissedOutboundPromotionStartDate = r.StringValue.create({ value: e }) }, l.UserSettingsDelay.INFREQUENT_USER_ACTION) }, markOutboundPromotionsSeen() { s.default.dispatch({ type: "OUTBOUND_PROMOTIONS_SEEN" }) }, fetchActiveBogoPromotion: T } }, 725727: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useBogoPromotion: function() { return f }, useOutboundPromotions: function() { return I }, useUnseenOutboundPromotions: function() { return T } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("570140"), a = n("594174"), o = n("74538"), l = n("775412"), u = n("518638"), d = n("748770"), _ = n("1844"), c = n("474936"); function E() { let e = (0, r.useStateFromStoresArray)([_.default], () => _.default.outboundPromotions), t = (0, r.useStateFromStores)([_.default], () => _.default.consumedInboundPromotionId); return i.useMemo(() => e.filter(e => { let { id: n } = e; return n !== t }), [e, t]) } function I() { let e = (0, r.useStateFromStores)([_.default], () => _.default.lastFetchedActivePromotions), t = E(), n = (0, r.useStateFromStores)([a.default], () => a.default.getCurrentUser()), I = (0, l.useHasActiveTrial)(), [T, f] = i.useState(!1), [S, h] = i.useState([]); i.useEffect(() => { null != e && s.default.wait(() => d.default.markOutboundPromotionsSeen()) }, [e]); let A = i.useCallback(e => { h(t => t.some(t => { let { promotion: n } = t; return n.id === e.promotion.id }) ? t : [...t, e]) }, []), m = (0, o.isPremiumExactly)(n, c.PremiumTypes.TIER_2); i.useEffect(() => { s.default.wait(() => { m && null == e && d.default.fetchActiveOutboundPromotions() }) }, [e, m]), i.useEffect(() => { s.default.wait(() => { (0, u.fetchClaimedOutboundPromotionCodes)().then(e => { h(e), f(!0) }).catch(() => { h([]), f(!0) }) }) }, []); let N = {}; for (let { code: e, promotion: t } of S) N[t.id] = e; let p = new Set(t.map(e => { let { id: t } = e; return t })), O = S.filter(e => { let { promotion: t } = e; return !p.has(t.id) }); return { promotionsLoaded: T && (!m || null != e), activeOutboundPromotions: t.filter(e => (0, u.shouldShowOutboundPromotionOnPlatform)(e) && (!I || (0, u.isTrialUserEligibleToSeeOutboundPromotion)(e, N))), claimedEndedOutboundPromotions: O.filter(e => (0, u.shouldShowOutboundPromotionOnPlatform)(e.promotion)), claimedOutboundPromotionCodeMap: N, addClaimedOutboundPromotionCode: A } } function T() { let e = (0, r.useStateFromStores)([_.default], () => _.default.lastSeenOutboundPromotionStartDate), t = (0, l.useHasActiveTrial)(), n = E(); return i.useMemo(() => { if (null == e) return t ? n.filter(e => (0, u.isOutboundPromotionRedeemableByTrialUsers)(e)) : n; let i = n.filter(t => { let { startDate: n } = t; return new Date(n) > new Date(e) }); return t ? i.filter(e => (0, u.isOutboundPromotionRedeemableByTrialUsers)(e)) : i }, [n, e, t]).filter(e => (0, u.shouldShowOutboundPromotionOnPlatform)(e)) } function f() { return { promotion: (0, r.useStateFromStores)([_.default], () => _.default.bogoPromotion) } } }, 349540: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("594174"), s = n("74538"), a = n("748770"), o = n("474936"); class l extends i.default { onPostConnectionOpen() { this.maybeFetchActiveOutboundPromotions() } maybeFetchActiveOutboundPromotions() { let e = r.default.getCurrentUser(); null != e && s.default.isPremiumExactly(e, o.PremiumTypes.TIER_2) && (0, a.fetchActiveOutboundPromotions)() } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: this.onPostConnectionOpen.bind(this) }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new l }, 1844: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("581883"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function l() { return { hasFetchedConsumedInboundPromotionId: !1, consumedInboundPromotionId: null, lastSeenOutboundPromotionStartDate: null, bogoPromotion: null } } let u = l(), d = !1, _ = null, c = !1, E = null, I = [], T = null; function f() { let e = null; for (let t of I)(null == e || new Date(t.startDate) > new Date(e)) && (e = t.startDate); return e } function S() { var e, t, n; T = null !== (n = null === (t = a.default.settings.userContent) || void 0 === t ? void 0 : null === (e = t.lastDismissedOutboundPromotionStartDate) || void 0 === e ? void 0 : e.value) && void 0 !== n ? n : null } class h extends(i = r.default.PersistedStore) { initialize(e) { null != e && (u = e), this.waitFor(a.default), this.syncWith([a.default], S) } get outboundPromotions() { return I } get lastSeenOutboundPromotionStartDate() { return u.lastSeenOutboundPromotionStartDate } get lastDismissedOutboundPromotionStartDate() { return T } get lastFetchedActivePromotions() { return E } get isFetchingActiveOutboundPromotions() { return c } get hasFetchedConsumedInboundPromotionId() { return u.hasFetchedConsumedInboundPromotionId } get consumedInboundPromotionId() { return u.consumedInboundPromotionId } get bogoPromotion() { return u.bogoPromotion } get isFetchingActiveBogoPromotion() { return d } get lastFetchedActiveBogoPromotion() { return _ } getState() { return u } } o(h, "displayName", "PromotionsStore"), o(h, "persistKey", "PromotionsPersistedStore"), t.default = new h(s.default, { ACTIVE_OUTBOUND_PROMOTIONS_FETCH_SUCCESS: function(e) { let { activeOutboundPromotions: t, consumedInboundPromotionId: n } = e; I = t, E = Date.now(), c = !1, !u.hasFetchedConsumedInboundPromotionId && (u.hasFetchedConsumedInboundPromotionId = !0, u.consumedInboundPromotionId = n) }, ACTIVE_OUTBOUND_PROMOTIONS_FETCH: function() { c = !0 }, ACTIVE_OUTBOUND_PROMOTIONS_FETCH_FAIL: function() { I = [], c = !1 }, ACTIVE_BOGO_PROMOTION_FETCH_SUCCESS: function(e) { let { activePromotion: t } = e; u.bogoPromotion = t, _ = Date.now(), d = !1 }, ACTIVE_BOGO_PROMOTION_FETCH: function() { d = !0 }, ACTIVE_BOGO_PROMOTION_FETCH_FAIL: function() { u.bogoPromotion = null, d = !1 }, OUTBOUND_PROMOTION_NOTICE_DISMISS: function() { if (0 === I.length) return !1; let e = f(); null != e && (T = e) }, OUTBOUND_PROMOTIONS_SEEN: function() { if (0 === I.length) return !1; let e = f(); null != e && (T = e, u.lastSeenOutboundPromotionStartDate = e) }, LOGOUT: function() { u = l(), c = !1, E = null, d = !1, _ = null, I = [] } }) }, 470918: function(e, t, n) { "use strict"; n.r(t), n.d(t, { syncUserTenureRewardStatus: function() { return a } }); var i = n("544891"), r = n("570140"), s = n("981631"); async function a() { r.default.dispatch({ type: "USER_TENURE_REWARD_SYNC_START" }); try { let e = await i.HTTP.post({ url: s.Endpoints.TENURE_REWARD_SYNC }); r.default.dispatch({ type: "USER_TENURE_REWARD_SYNC_SUCCESS", userTenureRewardStatus: e.body.tenure_reward_status }) } catch (e) { r.default.dispatch({ type: "USER_TENURE_REWARD_SYNC_SUCCESS" }) } } }, 735825: function(e, t, n) { "use strict"; var i, r, s, a, o; n.r(t), n.d(t, { ALL_TENURE_REWARD_SKUS: function() { return l }, MAX_DAYS_LEFT_TO_SHOW_CARD_1_MONTH_VARIANT: function() { return u }, MAX_DAYS_LEFT_TO_SHOW_CARD_3_MONTH_VARIANT: function() { return _ }, MAX_DAYS_LEFT_TO_SHOW_NOTIFICATION_1_MONTH_VARIANT: function() { return d }, MAX_DAYS_LEFT_TO_SHOW_NOTIFICATION_3_MONTH_VARIANT: function() { return c }, NUM_DAYS_3_REQUIRED_MONTH_VARIANT: function() { return I }, NUM_DAYS_REQUIRED_1_MONTH_VARIANT: function() { return E }, NitroRewardStatus: function() { return r }, NitroRewardType: function() { return s }, TenureRewardSKUs: function() { return i } }), n("47120"), (a = i || (i = {})).FREE_GUILD_BOOST_1_MONTH = "1215584796672000000", a.FREE_GUILD_BOOST_3_MONTHS = "1215585048330240000"; let l = new Set(["1215584796672000000", "1215585048330240000"]); (o = r || (r = {}))[o.PENDING = 0] = "PENDING", o[o.REDEEMABLE = 1] = "REDEEMABLE", o[o.REDEEMED = 2] = "REDEEMED", (s || (s = {})).SERVER_BOOST = "server_boost"; let u = 10, d = 10, _ = 70, c = 45, E = 30, I = 90 }, 595878: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isUserEligibleForNitroTenureRewardCard: function() { return s }, useUserEligibleForNitroTenureRewardCard: function() { return r } }); var i = n("290031"); function r(e) { let { location: t } = e, { enableNitroTenureRewardCard: n } = i.NitroTenureRewardCardExperiment.useExperiment({ location: t }, { autoTrackExposure: !1 }); return n } function s(e) { let { location: t } = e, { enableNitroTenureRewardCard: n } = i.NitroTenureRewardCardExperiment.getCurrentConfig({ location: t }, { autoTrackExposure: !1 }); return n } }, 290031: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NitroTenureRewardCardExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_nitro_tenure_reward_card", label: "Nitro Tenure Reward Card", defaultConfig: { enableNitroTenureRewardCard: !1 }, treatments: [{ id: 1, label: "Enables the nitro tenure reward card for users", config: { enableNitroTenureRewardCard: !0 } }] }) }, 944880: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("913527"), r = n.n(i), s = n("570140"), a = n("147913"), o = n("959546"), l = n("594174"), u = n("580130"), d = n("111361"), _ = n("470918"), c = n("595878"), E = n("513785"), I = n("106255"), T = n("474936"), f = n("735825"); let S = null, h = !1; function A(e) { let t = o.default.createFromServer(e.entitlement); (0, I.isPremiumTier2Entitlement)(t) ? m({ forceRefresh: !0 }): (0, I.isValidTenureRewardEntitlement)(t) && null != E.default.getTenureRewardStatusForRewardId(t.skuId) && s.default.dispatch({ type: "USER_TENURE_REWARD_STATUS_DELETE", tenureRewardIds: [t.skuId] }) } function m() { let { forceRefresh: e = !1 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; p(); let t = u.default.getForApplication(T.PREMIUM_SUBSCRIPTION_APPLICATION), n = (0, I.getPremiumTier2Entitlement)(t), i = (0, I.getTenureRewardEntitlement)([f.TenureRewardSKUs.FREE_GUILD_BOOST_1_MONTH, f.TenureRewardSKUs.FREE_GUILD_BOOST_3_MONTHS], t), a = l.default.getCurrentUser(); if (!(0, d.isPremiumExactly)(a, T.PremiumTypes.TIER_2) && null == n) { s.default.dispatch({ type: "USER_TENURE_REWARD_STATUS_RESET" }); return } if (!!(0, c.isUserEligibleForNitroTenureRewardCard)({ location: "tenure_reward_manager" })) if ((E.default.getFetchState() !== E.FetchState.FETCHED || !0 === e || function() { var e; let t = null !== (e = E.default.getTenureRewardStatusForRewardId(f.TenureRewardSKUs.FREE_GUILD_BOOST_1_MONTH)) && void 0 !== e ? e : E.default.getTenureRewardStatusForRewardId(f.TenureRewardSKUs.FREE_GUILD_BOOST_3_MONTHS); return null != t && null != t.redeemable_at && 0 >= r()(t.redeemable_at).diff(r().utc(), "seconds") }() || function() { let e = E.default.getState(); return null != e.lastFetchTimeMs && Date.now() - e.lastFetchTimeMs > 12096e5 }()) && null == i) N(); else { let e = u.default.getForApplication(T.PREMIUM_SUBSCRIPTION_APPLICATION); if (null == e) return; let t = Array.from(e).filter(e => null != E.default.getTenureRewardStatusForRewardId(e.skuId)).map(e => e.skuId); t.length > 0 && s.default.dispatch({ type: "USER_TENURE_REWARD_STATUS_DELETE", tenureRewardIds: t }) } } async function N() { !h && (h = !0, await _.syncUserTenureRewardStatus(), h = !1, s.default.wait(() => (function() { var e; if (p(), E.default.getFetchState() !== E.FetchState.FETCHED || h) return; let t = null !== (e = E.default.getTenureRewardStatusForRewardId(f.TenureRewardSKUs.FREE_GUILD_BOOST_1_MONTH)) && void 0 !== e ? e : E.default.getTenureRewardStatusForRewardId(f.TenureRewardSKUs.FREE_GUILD_BOOST_3_MONTHS); if ((null == t ? void 0 : t.redeemable_at) == null) return; let n = (null == t ? void 0 : t.redeemable_at) != null ? new Date(t.redeemable_at).getTime() - Date.now() : null; null != n && n > 0 && (S = setTimeout(m, n)) })())) } function p() { clearTimeout(S), S = null } function O() { p() } function C() { m() } class R extends a.default { forceRefreshIfOutdated() { let e = E.default.getState(); null != e.lastFetchTimeMs && Date.now() - e.lastFetchTimeMs > 864e5 && m({ forceRefresh: !0 }) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: C, CONNECTION_CLOSED: O, ENTITLEMENT_FETCH_APPLICATION_SUCCESS: () => m(), ENTITLEMENT_CREATE: A, ENTITLEMENT_UPDATE: () => m(), ENTITLEMENT_DELETE: () => m(), LOGOUT: p }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new R }, 513785: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return r } }); var i, r, s, a = n("442837"), o = n("570140"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(i = r || (r = {}))[i.NOT_FETCHED = 0] = "NOT_FETCHED", i[i.FETCHING = 1] = "FETCHING", i[i.FETCHED = 2] = "FETCHED"; let u = { userTenureRewardStatusByRewardId: {}, lastFetchTimeMs: null, fetchState: 0 }, d = u; class _ extends(s = a.default.PersistedStore) { initialize(e) { d = { ...d, ...null != e ? e : {} } } getState() { return d } getFetchState() { return d.fetchState } getTenureRewardStatusForRewardId(e) { return d.userTenureRewardStatusByRewardId[e] } } l(_, "displayName", "TenureRewardStore"), l(_, "persistKey", "TenureRewardStore"), t.default = new _(o.default, { USER_TENURE_REWARD_SYNC_START: function() { d.fetchState = 1 }, USER_TENURE_REWARD_SYNC_SUCCESS: function(e) { let { userTenureRewardStatus: t } = e; if (null != t) { let e = {}; t.forEach(t => { null != t.next_tenure_reward_id && (e[t.next_tenure_reward_id] = t) }), d.userTenureRewardStatusByRewardId = e } else d.userTenureRewardStatusByRewardId = u.userTenureRewardStatusByRewardId; d.lastFetchTimeMs = Date.now(), d.fetchState = 2 }, USER_TENURE_REWARD_STATUS_RESET: function() { d.userTenureRewardStatusByRewardId = u.userTenureRewardStatusByRewardId }, USER_TENURE_REWARD_STATUS_DELETE: function(e) { let { tenureRewardIds: t } = e; t.forEach(e => { delete d.userTenureRewardStatusByRewardId[e] }) }, LOGOUT: function() { d = u } }) }, 106255: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPremiumTier2Entitlement: function() { return d }, getTenureRewardBadgeDescription: function() { return E }, getTenureRewardEntitlement: function() { return _ }, isPremiumTier2Entitlement: function() { return l }, isUserTenureRewardStatusActive: function() { return c }, isValidTenureRewardEntitlement: function() { return u } }), n("580130"); var i = n("55563"), r = n("474936"), s = n("735825"), a = n("981631"), o = n("689938"); function l(e) { return e.type === a.EntitlementTypes.PURCHASE && e.skuId === r.PremiumSubscriptionSKUs.TIER_2 && e.applicationId === r.PREMIUM_SUBSCRIPTION_APPLICATION && e.isValid(null, i.default) } function u(e) { return e.type === a.EntitlementTypes.PREMIUM_PURCHASE && s.ALL_TENURE_REWARD_SKUS.has(e.skuId) && e.applicationId === r.PREMIUM_SUBSCRIPTION_APPLICATION && e.isValid(null, i.default) } function d(e) { if (null != e) return Array.from(e).find(e => l(e)) } function _(e, t) { if (null != t) return Array.from(t).find(t => t.type === a.EntitlementTypes.PREMIUM_PURCHASE && e.includes(t.skuId) && t.applicationId === r.PREMIUM_SUBSCRIPTION_APPLICATION && t.isValid(null, i.default)) } function c(e) { return null != e.redeemable_at && null != e.next_tenure_reward_id } function E(e) { switch (e) { case s.NitroRewardStatus.PENDING: return o.default.Messages.REWARD; case s.NitroRewardStatus.REDEEMABLE: return o.default.Messages.REDEEM; case s.NitroRewardStatus.REDEEMED: default: return null } } }, 786397: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hasUserTrialOfferExpired: function() { return u }, useTrialOffer: function() { return d } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("846519"), a = n("594174"), o = n("295226"), l = n("74538"); function u(e) { return null != e && null != e.expires_at && Date.now() > Date.parse(e.expires_at) } function d(e) { let t = (0, r.useStateFromStores)([o.default], () => o.default.getUserTrialOffer(e)), [n, d] = i.useState(u(t)), _ = (0, r.useStateFromStores)([a.default], () => (0, l.isPremium)(a.default.getCurrentUser())); return i.useEffect(() => { if (null != t && null != t.expires_at) { let e = new s.Timeout, i = () => { let r = null != t.expires_at ? Date.parse(t.expires_at) - Date.now() : 0; null == e || e.start(r, () => { !n && u(t) ? d(!0) : i() }) }; return i(), () => e.stop() } }, [n, t]), n || _ ? null : t } }, 230916: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useChurnDiscountedPrice: function() { return c }, useDiscountedPrice: function() { return _ } }), n("47120"); var i = n("911969"), r = n("583046"), s = n("74179"), a = n("74538"), o = n("937615"), l = n("374649"), u = n("104494"), d = n("474936"); let _ = e => { var t, n, _, c; let { paymentSourceId: E } = (0, s.default)({ isGift: !1, activeSubscription: null }), I = (0, a.castPremiumSubscriptionAsSkuId)(d.SubscriptionPlanInfo[e].skuId), { priceOptions: T } = (0, r.default)({ activeSubscription: null, skuIDs: [I], paymentSourceId: E, isGift: !1 }), f = (0, u.usePremiumDiscountOffer)(), [S, h] = (0, l.useSubscriptionInvoicePreview)({ items: [{ planId: e, quantity: 1 }], renewal: !0, preventFetch: !(null != f), paymentSourceId: E, currency: T.currency }), A = null == S ? void 0 : null === (c = S.invoiceItems) || void 0 === c ? void 0 : null === (_ = c.find(t => t.subscriptionPlanId === e)) || void 0 === _ ? void 0 : null === (n = _.discounts) || void 0 === n ? void 0 : null === (t = n.find(e => e.type === i.InvoiceDiscountTypes.SUBSCRIPTION_PLAN)) || void 0 === t ? void 0 : t.amount, m = (0, a.getPrice)(e, !1, !1, T); return (0, o.formatPrice)(m.amount - (null != A ? A : 0), m.currency) }, c = (e, t, n) => { var u, _, c, E; let { paymentSourceId: I } = (0, s.default)({ isGift: !1, activeSubscription: null }), T = (0, a.castPremiumSubscriptionAsSkuId)(d.SubscriptionPlanInfo[t].skuId), { priceOptions: f } = (0, r.default)({ activeSubscription: null, skuIDs: [T], paymentSourceId: I, isGift: !1 }), [S, h] = (0, l.useSubscriptionInvoicePreview)({ subscriptionId: e.id, items: [{ planId: t, quantity: 1 }], renewal: !0, preventFetch: !(null != n), paymentSourceId: I, currency: f.currency, userDiscountOfferId: null == n ? void 0 : n.id }), A = null == S ? void 0 : null === (E = S.invoiceItems) || void 0 === E ? void 0 : null === (c = E.find(e => e.subscriptionPlanId === t)) || void 0 === c ? void 0 : null === (_ = c.discounts) || void 0 === _ ? void 0 : null === (u = _.find(e => e.type === i.InvoiceDiscountTypes.SUBSCRIPTION_PLAN)) || void 0 === u ? void 0 : u.amount, m = (0, a.getPrice)(t, !1, !1, f); return (0, o.formatPrice)(m.amount - (null != A ? A : 0), m.currency) } }, 248042: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getBOGOPillCopy: function() { return P }, isEligibleForBOGOAnnouncementModal: function() { return y }, maybeFetchActiveBogoPromotion: function() { return M }, useIsEligibleForBogoPromotion: function() { return v } }); var i = n("913527"), r = n.n(i), s = n("399606"), a = n("524437"), o = n("355467"), l = n("774078"), u = n("211242"), d = n("605236"), _ = n("706454"), c = n("594174"), E = n("78839"), I = n("295226"), T = n("74538"), f = n("316941"), S = n("59561"), h = n("388622"), A = n("61196"), m = n("639119"), N = n("748770"), p = n("725727"), O = n("1844"), C = n("474936"), R = n("981631"), g = n("689938"); function L(e) { var t, n, i; let { experimentEnabled: s, premiumSubscription: a, mostRecentSubscription: o } = e, l = !1, u = !1; if (null != o && o.status === R.SubscriptionStatusTypes.ENDED) { let e = (null === (t = o.metadata) || void 0 === t ? void 0 : t.ended_at) != null ? r()(o.metadata.ended_at) : null, i = null === (n = (0, T.getPremiumPlanItem)(o)) || void 0 === n ? void 0 : n.planId, s = null != i && T.default.getPremiumType(i) === C.PremiumTypes.TIER_2; u = null != e && s && e.add(10, "days").isAfter(r()()) } if (null != a) { let e = null === (i = (0, T.getPremiumPlanItem)(a)) || void 0 === i ? void 0 : i.planId, t = null != e && T.default.getPremiumType(e) === C.PremiumTypes.TIER_2, n = c.default.getCurrentUser(), r = (null == a ? void 0 : a.trialId) != null && T.default.isPremiumExactly(n, C.PremiumTypes.TIER_0); l = t || r } return !s || l || u } function v() { var e; let { paymentsBlocked: t } = u.default.useExperiment({ location: "153d31_1" }, { autoTrackExposure: !1 }), { promotion: n } = (0, p.useBogoPromotion)(), { enabled: i } = (0, A.default)(), { mostRecentSubscription: r, premiumSubscription: a } = (0, s.useStateFromStoresObject)([E.default], () => ({ mostRecentSubscription: E.default.getMostRecentPremiumTypeSubscription(), premiumSubscription: E.default.getPremiumTypeSubscription() })), o = (0, m.usePremiumTrialOffer)(), d = new Date(null !== (e = null == n ? void 0 : n.endDate) && void 0 !== e ? e : 0).valueOf(); (0, l.default)(d, 1e3, void 0, d + 2e3 < Date.now()); let _ = !L({ experimentEnabled: i, premiumSubscription: a, mostRecentSubscription: r }) && null == o && null != n && !t, c = Date.now(), { enabled: I } = h.default.useExperiment({ location: "153d31_2" }, { autoTrackExposure: _, disable: !_ }); return !(c > d) && I } async function D() { var e; let t = c.default.getCurrentUser(), n = !(null == t ? void 0 : t.isClaimed()), { paymentsBlocked: i } = u.default.getCurrentConfig({ location: "153d31_3" }, { autoTrackExposure: !1 }), { enabled: r } = (0, A.isBogoPromotionExperimentEnabled)(), { enabled: s } = h.default.getCurrentConfig({ location: "153d31_4" }, { autoTrackExposure: !1 }), { enabled: a } = S.BOGOAnnouncementModalExperiment.getCurrentConfig({ location: "153d31_5" }, { autoTrackExposure: !1 }); if (n || i || !r || !a && !s) return !1; if (I.default.shouldFetchOffer() && await f.default.fetchUserTrialOffer(), I.default.hasFetchedOffer() && I.default.hasAnyUnexpiredOffer()) return !1; !E.default.hasFetchedMostRecentPremiumTypeSubscription() && (null === (e = c.default.getCurrentUser()) || void 0 === e ? void 0 : e.hasHadSKU(C.PremiumSubscriptionSKUs.TIER_2)) && await (0, o.fetchMostRecentSubscription)(), !E.default.hasFetchedSubscriptions() && await (0, o.fetchSubscriptions)(); let l = E.default.getMostRecentPremiumTypeSubscription(); return !L({ experimentEnabled: r, premiumSubscription: E.default.getPremiumTypeSubscription(), mostRecentSubscription: l }) } async function M() { if (!await D()) return; let e = O.default.bogoPromotion; if (!(null != e && new Date(e.endDate).valueOf() >= Date.now())) await (0, N.fetchActiveBogoPromotion)() } async function y() { let e = O.default.bogoPromotion, t = null != e && new Date(e.endDate).valueOf() >= Date.now() && new Date(e.startDate).valueOf() <= Date.now(), n = (0, d.isDismissibleContentDismissed)(a.DismissibleContent.SUMMER_2023_BOGO_ANNOUNCEMENT_MODAL), i = await D(), { enabled: r } = A.BogoPromotionExperiment.getCurrentConfig({ location: "153d31_6" }, { autoTrackExposure: !1 }), { enabled: s } = S.BOGOAnnouncementModalExperiment.getCurrentConfig({ location: "153d31_7" }, { autoTrackExposure: t && r && !n && i }); return t && s && r && !n && i } function P() { switch (_.default.locale) { case "de": case "es-ES": case "fr": case "hr": case "it": case "lt": case "nl": case "pl": case "pt-BR": case "ro": case "fi": case "sv-SE": case "tr": case "cs": case "el": case "bg": case "ru": case "uk": case "ja": case "ko": return g.default.Messages.NITRO_BADGE_TEXT; default: return g.default.Messages.BOGO_PILL } } }, 165583: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PremiumTrialGradientBadge: function() { return k }, default: function() { return F } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("512722"), l = n.n(o), u = n("913527"), d = n.n(u), _ = n("442837"), c = n("952265"), E = n("780384"), I = n("481060"), T = n("410030"), f = n("607070"), S = n("238302"), h = n("703656"), A = n("465670"), m = n("483444"), N = n("599250"), p = n("466111"), O = n("74538"), C = n("960048"), R = n("98278"), g = n("639119"), L = n("197115"), v = n("823188"), D = n("474936"), M = n("981631"), y = n("689938"), P = n("59494"), U = n("867250"); function b(e) { if (null == e) return null; let t = d()(e), n = t.diff(d()(), "h"); if (n > 24) { let e = t.diff(d()(), "d"); return y.default.Messages.PREMIUM_TRIAL_OFFER_ENDS_DAYS.format({ numDays: e }) } if (n > 1) return y.default.Messages.PREMIUM_TRIAL_OFFER_ENDS_HOURS.format({ numHours: n }); let i = t.diff(d()(), "minutes"); return y.default.Messages.PREMIUM_TRIAL_OFFER_ENDS_MINUTES.format({ numMinutes: i }) } function G(e) { var t, n, r; let { className: s, children: o, withBottomMargin: l, discountOffer: u, trialOffer: d } = e, _ = null !== (t = null == d ? void 0 : d.expires_at) && void 0 !== t ? t : null == u ? void 0 : u.expires_at, c = null == d ? void 0 : d.subscription_trial, E = null !== (r = null !== (n = e.subscriptionTier) && void 0 !== n ? n : null == c ? void 0 : c.sku_id) && void 0 !== r ? r : D.PremiumSubscriptionSKUs.TIER_2; return (0, i.jsxs)("div", { className: a()(s, P.gradientUpsellWrapper, { [P.gradientUpsellWrapperTier0]: E === D.PremiumSubscriptionSKUs.TIER_0, [P.gradientUpsellWrapperTier2]: E === D.PremiumSubscriptionSKUs.TIER_2, [P.gradientUpsellWrapperWithBottomMargin]: l }), children: [(0, i.jsxs)("div", { className: P.logo, children: [(0, i.jsx)(p.default, { className: P.logoIcon }), E === D.PremiumSubscriptionSKUs.TIER_0 && (0, i.jsx)(N.default, { className: P.logoWordmark }), E === D.PremiumSubscriptionSKUs.TIER_2 && (0, i.jsx)(m.default, { className: P.logoWordmark })] }), (0, i.jsx)(I.Text, { variant: "text-md/medium", className: P.copy, color: "none", children: o }), (0, i.jsx)(v.PremiumPillWithSparkles, { text: null != u ? y.default.Messages.PREMIUM_DISCOUNT_AMOUNT_OFF_BADGE.format({ percent: u.discount.amount }) : y.default.Messages.BILLING_TRIAL_FREE_TRIAL_TEXT, colorOptions: E === D.PremiumSubscriptionSKUs.TIER_0 ? v.PremiumPillAndSparklesColorOptions.PREMIUM_TIER_0_WHITE_FILL : v.PremiumPillAndSparklesColorOptions.PREMIUM_TIER_2_WHITE_FILL }), (0, i.jsx)(I.Text, { variant: "eyebrow", className: P.countdownText, children: b(_) })] }) } function w(e) { var t, n; let { className: s, onClose: a, subscriptionTier: o, analyticsLocationObject: l, trialOffer: u, discountOffer: d } = e, [_, c] = r.useState(!1), E = null != d ? y.default.Messages.PREMIUM_DISCOUNT_CTA.format({ percent: d.discount.amount }) : (0, O.formatTrialCtaIntervalDuration)({ intervalType: null == u ? void 0 : null === (t = u.subscription_trial) || void 0 === t ? void 0 : t.interval, intervalCount: null == u ? void 0 : null === (n = u.subscription_trial) || void 0 === n ? void 0 : n.interval_count }); return (0, i.jsx)(L.default, { className: s, subscriptionTier: o, trialId: null == u ? void 0 : u.trial_id, submitting: _, premiumModalAnalyticsLocation: l, size: I.Button.Sizes.MEDIUM, color: I.Button.Colors.GREEN, onClick: () => { c(!0) }, onSubscribeModalClose: e => { c(!1), e && (null == a || a()) }, buttonText: E }) } function k(e) { var t, n; let r = null === (t = (0, g.usePremiumTrialOffer)()) || void 0 === t ? void 0 : t.subscription_trial, s = null !== (n = null == r ? void 0 : r.sku_id) && void 0 !== n ? n : D.PremiumSubscriptionSKUs.TIER_2; return (0, i.jsx)(I.Text, { variant: "text-xs/bold", className: a()(P.trialBadge, e.className, { [P.trialBadgeGradientTier0]: s === D.PremiumSubscriptionSKUs.TIER_0, [P.trialBadgeGradientTier2]: s === D.PremiumSubscriptionSKUs.TIER_2 }), color: "none", children: (0, O.formatTrialOfferIntervalDuration)({ intervalType: null == r ? void 0 : r.interval, intervalCount: null == r ? void 0 : r.interval_count }) }) } function B(e) { let { subscriptionTier: t, onClose: n, analyticsLocationObject: r, trialOffer: s, discountOffer: a } = e; return (0, i.jsxs)("div", { className: P.footer, children: [(0, i.jsx)(I.Button, { onClick: n, size: I.Button.Sizes.SMALL, look: I.ButtonLooks.BLANK, className: P.cancelButton, children: y.default.Messages.CLOSE }), (0, i.jsx)(w, { className: P.subscribeButton, subscriptionTier: t, analyticsLocationObject: r, onClose: n, discountOffer: a, trialOffer: s })] }) } function V(e) { let { onClose: t, analyticsLocationObject: n } = e, r = (0, g.usePremiumTrialOffer)(); return (0, i.jsxs)("div", { className: P.tryOutUpsellContainer, children: [(0, i.jsx)(v.PremiumPillWithSparkles, { className: P.topRimPill, text: y.default.Messages.PREMIUM_FREE_NITRO_TRIAL_TEXT, colorOptions: v.PremiumPillAndSparklesColorOptions.PREMIUM_TIER_2_NEW_GRADIENT_FILL }), (0, i.jsx)(I.Heading, { variant: "heading-md/semibold", color: "text-normal", children: y.default.Messages.USER_SETTINGS_TRY_OUT_PREMIUM_TRIAL_DESCRIPTION.format({ onClick: R.navigateToPremiumMarketingPage }) }), (0, i.jsx)(w, { trialOffer: r, className: P.subscribeButtonWide, subscriptionTier: D.PremiumSubscriptionSKUs.TIER_2, analyticsLocationObject: n, onClose: t }), (0, i.jsx)(I.Text, { variant: "eyebrow", className: P.countdownTextInSetting, children: b(null == r ? void 0 : r.expires_at) })] }) } function x(e) { let { headingText: t, context: n, children: r, trialOffer: s, discountOffer: a } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(I.Heading, { className: P.__invalid_header, variant: "heading-xl/semibold", children: t }), null != n && (0, i.jsx)(I.Text, { className: P.context, variant: "text-md/normal", children: n }), (0, i.jsx)(G, { trialOffer: s, discountOffer: a, children: r })] }) } function F(e) { let { headingText: t, context: r, children: s, onClose: o, type: u, subscriptionTier: d, analyticsLocationObject: m, trialOffer: N, discountOffer: p } = e, R = (0, _.useStateFromStores)([f.default], () => f.default.useReducedMotion), g = (0, T.default)(); switch (u) { case D.PremiumUpsellTypes.EMPTY_STICKER_PICKER_UPSELL: return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(I.Clickable, { className: P.upsellClose, onClick: o, children: (0, i.jsx)(A.default, {}) }), (0, i.jsxs)("div", { className: P.contentContainer, children: [(0, i.jsx)("img", { className: P.upsellImage, src: U, alt: y.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_ALT }), (0, i.jsx)(I.Heading, { variant: "heading-xl/bold", color: "header-primary", children: y.default.Messages.STICKER_PICKER_PREMIUM_EMPTY_STATE_TITLE }), (0, i.jsx)(G, { trialOffer: N, discountOffer: p, children: y.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_DESCRIPTION_NO_BOLD_V2.format({ planName: (0, O.getDisplayNameFromSku)(d), onClick: () => (0, h.transitionTo)(M.Routes.APPLICATION_STORE) }) })] }), (0, i.jsx)(B, { subscriptionTier: d, onClose: o, analyticsLocationObject: { section: M.AnalyticsSections.EXPRESSION_PICKER, object: M.AnalyticsObjects.BUTTON_CTA }, trialOffer: N, discountOffer: p })] }); case D.PremiumUpsellTypes.STICKER_PICKER_UPSELL: return l()(null != s, "You must specify children for this upsell type"), (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)("div", { className: P.contentContainer, children: [(0, i.jsx)("img", { className: P.upsellImage, src: U, alt: y.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_ALT }), (0, i.jsx)(I.Heading, { variant: "heading-xl/bold", color: "header-primary", children: y.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_TITLE }), (0, i.jsx)(G, { trialOffer: N, discountOffer: p, children: y.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_DESCRIPTION_NO_BOLD_V2.format({ planName: (0, O.getDisplayNameFromSku)(d), onClick: () => (0, h.transitionTo)(M.Routes.APPLICATION_STORE) }) })] }), (0, i.jsx)(B, { subscriptionTier: d, onClose: o, analyticsLocationObject: { section: M.AnalyticsSections.EXPRESSION_PICKER, object: M.AnalyticsObjects.BUTTON_CTA }, trialOffer: N, discountOffer: p })] }); case D.PremiumUpsellTypes.AGGREGATE_PREMIUM_UPSELL_MODAL_FEATURE_EMOJI: l()(null != s, "You must specify children for this upsell type"); let L = (0, E.isThemeLight)(g) ? n("537381") : n("341048"); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)("div", { className: P.contentContainer, children: [(0, i.jsx)("img", { alt: "", className: P.upsellImage, src: L }), (0, i.jsx)(I.Heading, { variant: "heading-xl/bold", color: "header-primary", children: y.default.Messages.PREMIUM_PROMO_TITLE_SEARCH_UPSELL }), (0, i.jsx)(G, { trialOffer: N, discountOffer: p, children: y.default.Messages.PREMIUM_PROMO_DESCRIPTION_SEARCH_UPSELL_NO_BOLD_V2.format({ planName: (0, O.getDisplayNameFromSku)(d), onClick: () => (0, h.transitionTo)(M.Routes.APPLICATION_STORE) }) })] }), (0, i.jsx)(B, { subscriptionTier: d, onClose: o, analyticsLocationObject: { section: M.AnalyticsSections.EMOJI_PICKER_POPOUT, object: M.AnalyticsObjects.BUTTON_CTA }, trialOffer: N, discountOffer: p })] }); case D.PremiumUpsellTypes.UPLOAD_ERROR_UPSELL: case D.PremiumUpsellTypes.BURST_REACTION_UPSELL: case D.PremiumUpsellTypes.STREAM_QUALITY_UPSELL: case D.PremiumUpsellTypes.MESSAGE_LENGTH_UPSELL: let v; switch (u) { case D.PremiumUpsellTypes.UPLOAD_ERROR_UPSELL: v = y.default.Messages.UPLOAD_AREA_PREMIUM_UPSELL_WITH_SIZE_AND_ACTION_V2.format({ planName: (0, O.getDisplayNameFromSku)(d), premiumMaxSize: d === D.PremiumSubscriptionSKUs.TIER_0 ? y.default.Messages.FILE_UPLOAD_LIMIT_PREMIUM_TIER_0_CORRECTED : y.default.Messages.FILE_UPLOAD_LIMIT_PREMIUM_TIER_2_INCREASE, onClick: () => { (0, h.transitionTo)(M.Routes.APPLICATION_STORE), null == o || o() } }); break; case D.PremiumUpsellTypes.BURST_REACTION_UPSELL: v = y.default.Messages.SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_CLICK_V2.format({ planName: (0, O.getDisplayNameFromSku)(d), onClick: () => { (0, h.transitionTo)(M.Routes.APPLICATION_STORE), null == o || o() } }); break; case D.PremiumUpsellTypes.STREAM_QUALITY_UPSELL: v = y.default.Messages.STREAM_PREMIUM_UPSELL_WITH_ACTION.format({ onClick: () => { (0, h.transitionTo)(M.Routes.APPLICATION_STORE), null == o || o(), (0, c.closeAllModals)() } }); break; case D.PremiumUpsellTypes.MESSAGE_LENGTH_UPSELL: v = y.default.Messages.PREMIUM_CHAT_PERKS_MAX_MESSAGE_LENGTH_UPSELL.format({ premiumMaxMessageLength: M.MAX_MESSAGE_LENGTH_PREMIUM, onClick: () => { (0, h.transitionTo)(M.Routes.APPLICATION_STORE), null == o || o() } }) } return l()(null != v, "There must be some upsell context"), (0, i.jsx)(i.Fragment, { children: (0, i.jsxs)("div", { className: P.contentContainer, children: [(0, i.jsx)(I.Heading, { variant: "heading-xl/bold", color: "header-primary", children: t }), (0, i.jsx)(I.Text, { variant: "text-md/normal", children: r }), (0, i.jsx)(G, { trialOffer: N, discountOffer: p, children: v })] }) }); case D.PremiumUpsellTypes.BURST_REACTION_QUICK_ACTION_UPSELL: return (0, i.jsxs)("div", { className: P.contentContainer, children: [(0, i.jsx)(I.Heading, { variant: "heading-xl/bold", color: "header-primary", children: t }), (0, i.jsx)(I.Text, { variant: "text-md/normal", children: r }), (0, i.jsx)(G, { trialOffer: N, discountOffer: p, children: y.default.Messages.SUPER_REACTIONS_LAUNCH_COACHMARK_DESCRIPTION_CLICK_V2.format({ planName: (0, O.getDisplayNameFromSku)(d), onClick: () => (0, h.transitionTo)(M.Routes.APPLICATION_STORE) }) }), (0, i.jsx)(w, { className: P.upsellButton, subscriptionTier: d, analyticsLocationObject: m, onClose: o, trialOffer: N, discountOffer: p })] }); case D.PremiumUpsellTypes.PREMIUM_CLIENT_THEME_TRY_IT_OUT: return l()(null != s, "You must specify children for this upsell type"), (0, i.jsx)(G, { trialOffer: N, discountOffer: p, children: y.default.Messages.CLIENT_THEMES_EDITOR_UPSELL.format({ onClick: () => { (0, h.transitionTo)(M.Routes.APPLICATION_STORE), (0, S.closeEditor)() } }) }); case D.PremiumUpsellTypes.MESSAGE_LENGTH_IN_EDITOR_UPSELL: return (0, i.jsxs)("div", { className: a()(P.messageLengthUpsellContainer, { [P.messageLengthUpsellAppearAnimation]: !R }), children: [(0, i.jsx)(I.Text, { variant: "text-lg/bold", color: "status-danger", children: r }), (0, i.jsx)(I.Heading, { variant: "heading-lg/extrabold", color: "header-primary", className: P.messageLengthUpsellHeader, children: y.default.Messages.PREMIUM_MESSAGE_LENGTH_ROADBLOCK_MODAL_CONTEXT_NO_COUNT }), (0, i.jsx)("div", { className: P.divider }), (0, i.jsx)(G, { trialOffer: N, discountOffer: p, className: P.messageLengthBrandedContainer, subscriptionTier: d, children: y.default.Messages.PREMIUM_CHAT_PERKS_MAX_MESSAGE_LENGTH_UPSELL.format({ premiumMaxMessageLength: M.MAX_MESSAGE_LENGTH_PREMIUM, onClick: () => { (0, h.transitionTo)(M.Routes.APPLICATION_STORE), null == o || o() } }) }), (0, i.jsx)(w, { subscriptionTier: d, analyticsLocationObject: m, onClose: o, trialOffer: N, discountOffer: p })] }); case D.PremiumUpsellTypes.CUSTOM_PROFILE_TRY_OUT_UPSELL: case D.PremiumUpsellTypes.PREMIUM_CLIENT_THEME_SETTINGS_UPSELL: return (0, i.jsx)(V, {}); case D.PremiumUpsellTypes.GUILD_CAP_MODAL_UPSELL: case D.PremiumUpsellTypes.PREMIUM_GUILD_IDENTITY_MODAL: case D.PremiumUpsellTypes.CUSTOM_PROFILE_UPSELL: case D.PremiumUpsellTypes.VIDEO_BACKGROUNDS_MODAL: case D.PremiumUpsellTypes.VOICE_CHANNEL_EFFECTS_TOGGLE_CLICKED_EXPANDED: case D.PremiumUpsellTypes.VOICE_CHANNEL_EFFECTS_TOGGLE_CLICKED: case D.PremiumUpsellTypes.EMOJI_PICKER_EMOJI_CLICKED: case D.PremiumUpsellTypes.CUSTOM_NOTIFICATION_SOUNDS_UPSELL: return (0, i.jsx)(x, { trialOffer: N, discountOffer: p, headingText: t, context: r, children: s }); default: return C.default.captureMessage("Possible mishandling of a PremiumUpsellType: ".concat(u)), (0, i.jsx)(x, { headingText: t, context: r, children: s, trialOffer: N, discountOffer: p }) } } }, 704440: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return M } }), n("773603"), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("913527"), l = n.n(o), u = n("235874"), d = n("481060"), _ = n("37234"), c = n("100527"), E = n("906732"), I = n("626135"), T = n("55935"), f = n("63063"), S = n("281494"), h = n("790368"), A = n("474936"), m = n("981631"), N = n("689938"), p = n("305800"), O = n("751599"), C = n("397293"), R = n("352175"), g = n("90351"); let L = async (e, t, n) => { n(!0), await (0, S.createReferralTrial)(e).then(() => { t(), (0, _.popAllLayers)() }).finally(() => { n(!1) }) }, v = e => { let { onClose: t, referralsRemaining: n, recipient: s, analyticsLocations: o, shouldShowBirthdayUX: l } = e, [u, _] = r.useState(!1), c = n - 1; return (0, i.jsxs)("div", { className: p.confirmationContainer, children: [(0, i.jsxs)("div", { className: a()({ [p.confirmationBody]: !l, [p.confirmationBirthdayBody]: l }), children: [(0, i.jsx)(d.ModalCloseButton, { onClick: t, className: p.closeButton }), (0, i.jsx)("img", { alt: "", src: l ? C : R, className: p.confirmationImage }), (0, i.jsx)(d.Heading, { variant: "heading-xl/bold", color: "interactive-active", className: p.confirmationHeading, children: N.default.Messages.SAHRE_NITRO_MODAL_CONFIRMATION_HEADER }), (0, i.jsx)(d.Text, { className: p.confirmationBodyCopy, variant: "text-md/medium", color: "header-primary", children: c > 0 ? N.default.Messages.SHARE_NITRO_MODAL_CONFIRMATION_GENERAL.format({ count: c }) : N.default.Messages.SHARE_NITRO_MODAL_CONFIRMATION_GENERAL_LAST_REFERRAL }), (0, i.jsx)("hr", { className: p.confirmationBodySeparator })] }), (0, i.jsxs)("div", { className: p.confirmationButtonContainer, children: [(0, i.jsx)(d.Button, { className: p.confirmationShareButton, submitting: u, onClick: () => { L(s, t, _), I.default.track(m.AnalyticEvents.SHARE_NITRO_FLOW_STEPS, { location_stack: o, step: A.ReferralTrialsAnalyticSteps.FLOW_COMPLETED, other_user_id: Number(s) }) }, children: N.default.Messages.SHAER_NITRO_CONFIRMATION_BUTTON_TEXT }), (0, i.jsx)("div", { className: p.confirmationCancelButtonContainer, children: (0, i.jsx)(d.Clickable, { onClick: t, children: (0, i.jsx)(d.Text, { variant: "text-sm/medium", className: p.confirmationCancelCopy, children: N.default.Messages.CANCEL }) }) })] })] }) }; function D(e) { let { referralsRemaining: t, channel: n, onClose: s, isResending: o } = e, [u, _] = r.useState(!1), [S, R] = r.useState(!1), D = n.isDM() && void 0 !== n.recipients ? n.recipients[0] : null, { analyticsLocations: M } = (0, E.default)(c.default.REFERRAL_TRIALS_POPOUT), { enabled: y } = h.default.useExperiment({ location: "200c24_1" }, { autoTrackExposure: !0 }), P = new Date("2023-06-15T08:00:00-08:00"); return null == D ? null : u ? (0, i.jsx)(v, { onClose: s, referralsRemaining: t, recipient: D, analyticsLocations: M, shouldShowBirthdayUX: y }) : (0, i.jsxs)("div", { className: p.generalContainer, children: [(0, i.jsxs)("div", { className: p.generalBodyContainer, children: [(0, i.jsx)("img", { alt: "", src: y ? C : g, className: p.generalBodyImage }), (0, i.jsxs)("div", { className: p.innerContent, children: [(0, i.jsx)(d.ModalCloseButton, { onClick: s, className: p.closeButton }), (0, i.jsx)(d.Heading, { className: p.generalHeading, variant: "heading-xl/bold", children: o ? N.default.Messages.SHARE_NITRO_RESEND_TRIAL_HEADER : N.default.Messages.SHARE_NITRO_MODAL_HEADER }), (0, i.jsxs)(d.Text, { className: p.generalBodyCopy, variant: "text-md/normal", children: [(0, i.jsx)(d.Anchor, { className: a()(p.learnMore, { [p.learnMoreResendUnderlinedText]: o }), href: f.default.getArticleURL(m.HelpdeskArticles.SHARE_NITRO_FAQ), children: o ? N.default.Messages.SHARE_NITRO_RESEND_TRIAL_BODY : N.default.Messages.SHARE_NITRO_MODAL_BODY_GENERAL.format({ count: t }) }), o ? (0, i.jsx)("div", { className: p.shareNitroResendCopySuffix, children: N.default.Messages.SHARE_NITRO_RESEND_TRIAL_BODY_2 }) : (0, i.jsx)("div", { children: N.default.Messages.SHARE_NITRO_MODAL_BODY_SHARE_THEM_BY.format({ date: (0, T.dateFormat)(l()(P), "LL") }) })] })] }), y && (0, i.jsx)("img", { alt: "", src: O, className: p.birthdayBackgroundImage })] }), (0, i.jsx)("div", { className: p.generalButtonContainer, children: (0, i.jsx)(d.Button, { className: p.generalShareButton, submitting: S, onClick: () => { o ? L(D, s, R) : (_(!0), I.default.track(m.AnalyticEvents.SHARE_NITRO_FLOW_STEPS, { location_stack: M, step: A.ReferralTrialsAnalyticSteps.FLOW_STARTED, other_user_id: Number(D) })) }, children: o ? N.default.Messages.SHARE_NITRO_RESEND_BUTTON_TEXT : N.default.Messages.SHARE_NITRO_BUTTON_TEXT }) })] }) } function M(e) { let { shouldShowPopout: t, referralsRemaining: n, channel: r, onClose: s, isResending: a } = e; return t ? (0, i.jsx)("div", { onMouseDown: e => e.stopPropagation(), children: (0, i.jsx)(u.Popout, { shouldShow: !0, position: "top", align: "center", renderPopout: e => (0, i.jsx)(D, { ...e, referralsRemaining: n, channel: r, onClose: s, isResending: a }), onRequestClose: () => void 0, closeOnScroll: !1, ignoreModalClicks: !0, children: () => (0, i.jsx)("div", { className: p.__invalid_popoutTarget }) }) }) : null } }, 75145: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("242411"), o = n("12517"); t.default = function(e) { let { glowOpacity: t, className: n } = e; return (0, i.jsxs)("div", { className: s()(o.nitroTopDividerContainer, n), children: [(0, i.jsx)("div", { className: o.nitroTopDividerUpper }), (0, i.jsx)("div", { style: { opacity: t }, className: o.nitroTopDividerShadow }), (0, i.jsxs)("div", { className: s()(o.nitroTopDividerLockContainer), children: [(0, i.jsx)("div", { className: o.nitroTopDividerLockBorder }), (0, i.jsx)("div", { className: o.nitroTopDividerLockCircle, children: (0, i.jsx)(a.default, { width: 16, height: 16, color: "white" }) }), (0, i.jsx)("div", { className: o.nitroTopDividerLockBorderReversed })] }), (0, i.jsx)("div", { className: o.nitroTopDividerLower })] }) } }, 197115: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("230711"), u = n("906732"), d = n("543241"), _ = n("963249"), c = n("703656"), E = n("301766"), I = n("594174"), T = n("78839"), f = n("451478"), S = n("976644"), h = n("559629"), A = n("466111"), m = n("74538"), N = n("474936"), p = n("981631"), O = n("689938"), C = n("928069"); t.default = function(e) { let { isGift: t, subscriptionTier: r, onClick: R, size: g, className: L, trialId: v, isTrialCTA: D, buttonText: M, buttonTextClassName: y, iconClassName: P, postSuccessGuild: U, onSubscribeModalClose: b, premiumModalAnalyticsLocation: G, showIcon: w = !0, disableShine: k, applicationId: B, giftMessage: V, overrideDisabledButtonText: x, shinyButtonClassName: F, ...H } = e, Y = (0, a.useStateFromStores)([I.default], () => I.default.getCurrentUser()), j = (0, a.useStateFromStores)([f.default], () => f.default.isFocused()), W = (0, a.useStateFromStores)([T.default], () => T.default.getPremiumTypeSubscription()), { analyticsLocations: K } = (0, u.default)(), z = e => { if (e.preventDefault(), null == Y) { (0, c.transitionTo)(p.Routes.LOGIN); return } if (null == R || R(e), (null == W ? void 0 : W.status) === p.SubscriptionStatusTypes.ACCOUNT_HOLD) { (0, d.trackPremiumSettingsPaneOpened)(), l.default.open(p.UserSettingsSections.PREMIUM), null == b || b(!1); return }! function(e) { let { isClaimed: t, isVerified: r, isGift: s, subscriptionTier: a, trialId: l, postSuccessGuild: u, onSubscribeModalClose: d, analyticsLocations: c, premiumModalAnalyticsLocation: E, applicationId: I, giftMessage: T } = e; if (!t) { (0, o.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("96645")]).then(n.bind(n, "918995")); return t => { let { onClose: n, ...r } = t; return (0, i.jsx)(e, { ...r, onClose: n }) } }); return } if (!r) { (0, o.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("35822")]).then(n.bind(n, "444688")); return t => { let { onClose: n, ...r } = t; return (0, i.jsx)(e, { ...r, onClose: n }) } }); return } let f = p.AnalyticsObjectTypes.BUY; null != l ? f = p.AnalyticsObjectTypes.TRIAL : s && (f = p.AnalyticsObjectTypes.GIFT), (0, _.default)({ isGift: s, initialPlanId: null, subscriptionTier: a, analyticsLocations: c, analyticsObject: { object: p.AnalyticsObjects.BUTTON_CTA, objectType: f, ...E }, trialId: l, postSuccessGuild: u, onClose: d, applicationId: I, giftMessage: T }) }({ isClaimed: Y.isClaimed(), isVerified: Y.verified, isGift: t, subscriptionTier: r, trialId: v, postSuccessGuild: U, onSubscribeModalClose: b, analyticsLocations: K, premiumModalAnalyticsLocation: G, applicationId: B, giftMessage: V }) }; if (D) return (0, i.jsxs)(o.Button, { size: g, className: L, innerClassName: C.premiumSubscribeButton, color: o.Button.Colors.BRAND_INVERTED, onClick: z, ...H, children: [w && (0, i.jsx)(A.default, { className: C.premiumIcon }), (0, i.jsx)("span", { className: s()(C.buttonText, y), children: null != M ? M : O.default.Messages.PREMIUM_TRIAL_CTA_BUTTON_VARIANT })] }); if (t) return (0, i.jsxs)(o.Button, { size: g, className: L, innerClassName: C.giftButton, color: o.Button.Colors.PRIMARY, onClick: z, ...H, children: [(0, i.jsx)(h.default, { className: C.giftIcon }), (0, i.jsx)("span", { className: s()(C.buttonText, y), children: null != M ? M : O.default.Messages.PREMIUM_GIFTING_BUTTON })] }); let Z = O.default.Messages.APPLICATION_STORE_GET_PREMIUM, X = null != W ? (0, m.getPremiumPlanItem)(W) : null, Q = null != X ? m.default.getPremiumType(X.planId) : null == Y ? void 0 : Y.premiumType, q = r === N.PremiumSubscriptionSKUs.TIER_2 && null != Q && [N.PremiumTypes.TIER_0, N.PremiumTypes.TIER_1].includes(Q); q && (Z = O.default.Messages.BILLING_SWITCH_PLAN_UPGRADE); let J = null != W && W.status !== p.SubscriptionStatusTypes.ACCOUNT_HOLD && !(0, E.isNoneSubscription)(W.planId) && !q, $ = J ? null != x ? x : function(e) { let { ctaSubscriptionSkuId: t, currentPremiumType: n } = e, i = null, r = null; if (null != t && t !== N.PremiumSubscriptionSKUs.LEGACY && t !== N.PremiumSubscriptionSKUs.TIER_0 && t !== N.PremiumSubscriptionSKUs.TIER_1 && t !== N.PremiumSubscriptionSKUs.TIER_2) return { disabledButtonText: i, disabledButtonTooltipText: r }; let s = null != t ? N.PremiumSubscriptionSKUToPremiumType[(0, m.castPremiumSubscriptionAsSkuId)(t)] : null, a = null != s ? N.PremiumTypeOrder[s] : null, o = null != n ? N.PremiumTypeOrder[n] : null; return null != o && null != a && a < o ? (i = O.default.Messages.APPLICATION_STORE_GET_PREMIUM, r = O.default.Messages.PREMIUM_SUBSCRIPTION_BUTTON_DISABLED_MANAGE_PLAN_TOOLTIP) : null != s && null != n && s === n ? (i = O.default.Messages.BILLING_SWITCH_PLAN_CURRENT_PLAN, r = O.default.Messages.PREMIUM_SUBSCRIPTION_BUTTON_DISABLED_MANAGE_PLAN_TOOLTIP) : null == s && null != n && n === N.PremiumTypes.TIER_2 && (r = O.default.Messages.PREMIUM_SUBSCRIPTION_BUTTON_DISABLED_MANAGE_PLAN_TOOLTIP), { disabledButtonText: i, disabledButtonTooltipText: r } }({ ctaSubscriptionSkuId: r, currentPremiumType: Q }) : null; function ee(e) { var t, n; return (0, i.jsxs)(S.default, { disabled: J, onClick: z, innerClassName: C.premiumSubscribeButton, color: r === N.PremiumSubscriptionSKUs.TIER_1 ? o.Button.Colors.PRIMARY : o.Button.Colors.GREEN, size: g, className: F, wrapperClassName: L, pauseAnimation: !j || k, ...H, ...e, children: [w && (0, i.jsx)(A.default, { className: s()(C.premiumIcon, P) }), (0, i.jsx)("span", { className: s()(C.buttonText, y), children: null !== (n = null !== (t = null == $ ? void 0 : $.disabledButtonText) && void 0 !== t ? t : M) && void 0 !== n ? n : Z })] }) } return (null == $ ? void 0 : $.disabledButtonTooltipText) != null ? (0, i.jsx)(o.Tooltip, { text: $.disabledButtonTooltipText, children: ee }) : ee() } }, 823188: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PremiumPillAndSparklesColorOptions: function() { return o }, PremiumPillWithSparkles: function() { return ei }, Tier0Card: function() { return el }, Tier2Card: function() { return ed }, Tier2FeatureItems: function() { return eu }, Tier2FeatureSet: function() { return u }, default: function() { return e_ } }); var i, r, s, a, o, l, u, d, _ = n("735250"); n("470079"); var c = n("120356"), E = n.n(c), I = n("913527"), T = n.n(I), f = n("442837"), S = n("692547"), h = n("780384"), A = n("481060"), m = n("410030"), N = n("100527"), p = n("906732"), O = n("535322"), C = n("706454"), R = n("594174"), g = n("78839"), L = n("332475"), v = n("533496"), D = n("771357"), M = n("642113"), y = n("709586"), P = n("483444"), U = n("599250"), b = n("466111"), G = n("761374"), w = n("363138"), k = n("930153"), B = n("74538"), V = n("357355"), x = n("140465"), F = n("424082"), H = n("650032"), Y = n("104494"), j = n("639119"), W = n("230916"), K = n("248042"), z = n("504865"), Z = n("63802"), X = n("318990"), Q = n("474936"), q = n("768760"), J = n("689938"), $ = n("988332"), ee = n("476945"), et = n("945182"); function en(e) { let { text: t, className: n, colorOptions: i = 2 } = e; return (0, _.jsx)("div", { className: E()(n, $.freeTrialPill, { [$.freeTrialPillTier0GradientFill]: 1 === i, [$.freeTrialPillTier2GradientFill]: 3 === i, [$.freeTrialPillTier2OldGradientFill]: 4 === i, [$.lightBackgroundPill]: 5 === i }), children: (0, _.jsx)(A.Text, { variant: "text-xs/bold", className: E()($.freeTrialPillText, { [$.freeTrialPillTextInverted]: 0 !== i && 2 !== i, [$.freeTrialPillTextTier0]: 0 === i, [$.freeTrialPillTextTier2]: 2 === i }), children: t }) }) } function ei(e) { let t, { text: n, className: i, colorOptions: r = 2, isPillOnBorder: s = !0 } = e; switch (r) { case 1: t = S.default.unsafe_rawColors.PREMIUM_TIER_0_PURPLE_FOR_GRADIENTS.css; break; case 3: t = "url(#".concat(Z.PREMIUM_NEW_TIER_2_SVG_GRADIENT_ID, ")"); break; case 4: case 5: t = "url(#".concat(Z.PREMIUM_OLD_TIER_2_SVG_GRADIENT_ID, ")"); break; default: t = "white" } return s ? (0, _.jsxs)("div", { className: E()(i, $.freeTrialPillWithSparkles), children: [(0, _.jsx)(Z.SparkleStar, { foreground: $.sparkleStar1, color: t }), (0, _.jsx)(Z.SparkleStar, { foreground: $.sparkleStar2, color: t }), (0, _.jsx)(Z.SparkleStar, { foreground: $.sparkleStar3, color: t }), (0, _.jsx)(en, { text: n, colorOptions: r }), (0, _.jsx)(Z.SparkleStar, { foreground: $.sparkleStar4, color: t }), (0, _.jsx)(Z.SparkleStar, { foreground: $.sparkleStar5, color: t })] }) : (0, _.jsxs)("div", { className: E()(i, $.freeTrialPillWithSparkles), children: [(0, _.jsx)(en, { text: n, colorOptions: r }), (0, _.jsx)(Z.SparkleStar, { foreground: $.sparkleStar1, style: { marginLeft: 4, marginBottom: -6 }, color: t }), (0, _.jsx)(Z.SparkleStar, { foreground: $.sparkleStar2, color: t })] }) } function er(e) { let { Icon: t, text: n, isNew: i = !1 } = e; return (0, _.jsxs)("div", { className: $.item, children: [(0, _.jsx)(t, { className: $.icon }), (0, _.jsx)(A.Text, { variant: "text-md/normal", color: "always-white", children: n }), i ? (0, _.jsx)(O.default, { className: $.newTagItem, forceUseColorForSparkles: !0, shouldInheritBackgroundColor: !0, shouldInheritTextColor: !0 }) : null] }) } function es(e) { var t; let { defaultPriceString: n, subscriptionPlan: i, discountOffer: r } = e, s = (0, W.useDiscountedPrice)(i); return (0, _.jsx)(_.Fragment, { children: J.default.Messages.PREMIUM_TIER_CARD_DISCOUNT_HEADER_BEFORE_REDEMPTION_GENERIC.format({ numMonths: null !== (t = r.discount.user_usage_limit) && void 0 !== t ? t : Q.DISCOUNT_DURATION_FALLBACK, discountedPrice: s, regularPrice: n }) }) } function ea(e) { let { isGift: t, premiumTier: n, offerTierMatchesCard: i, offerType: r, showYearlyPrice: s, priceOptions: a } = e, o = (0, f.useStateFromStores)([g.default], () => g.default.getPremiumTypeSubscription()), l = (0, f.useStateFromStores)([R.default], () => R.default.getCurrentUser()), u = (0, x.useHasDiscountApplied)(), { annualDiscountPercentage: d } = (0, F.getAnnualDiscountsExperimentConfig)("PremiumTierCards"), c = (0, x.useActiveDiscountInfo)(), E = n === Q.PremiumTypes.TIER_0 ? Q.PremiumSubscriptionSKUs.TIER_0 : Q.PremiumSubscriptionSKUs.TIER_2, I = (null == o ? void 0 : o.trialId) != null ? null == l ? void 0 : l.premiumType : u ? Q.PremiumTypes.TIER_2 : null, S = (0, j.usePremiumTrialOffer)(), h = (0, Y.usePremiumDiscountOffer)(), m = null == S ? void 0 : S.subscription_trial; if (!t && null != I && n === I && null != o && null != o.planIdFromItems) { let e = null != o.trialEndsAt ? T()(null == o ? void 0 : o.trialEndsAt).diff(T()(), "d") : 0, t = Q.SubscriptionPlanInfo[o.planIdFromItems], n = B.default.formatPriceString(B.default.getDefaultPrice(t.id), t.interval); return (0, _.jsx)(_.Fragment, { children: (0, _.jsx)(A.Heading, { variant: "heading-md/normal", color: "always-white", className: $.trialHeader, children: (() => { var t, i, s; if (0 === r) J.default.Messages.PREMIUM_TIER_CARD_TRIAL_HEADER_AFTER_REDEMPTION.format({ remainingTime: e, price: n }); else if (o.planIdFromItems === Q.SubscriptionPlans.PREMIUM_YEAR_TIER_2) return J.default.Messages.PREMIUM_TIER_CARD_ANNUAL_DISCOUNT_HEADER.format({ percent: null !== (t = null == c ? void 0 : c.percentage) && void 0 !== t ? t : d, regularPrice: n }); else return J.default.Messages.PREMIUM_TIER_CARD_DISCOUNT_HEADER_AFTER_REDEMPTION_GENERIC.format({ percent: null !== (i = null == c ? void 0 : c.percentage) && void 0 !== i ? i : Q.DISCOUNT_PERCENTAGE_FALLBACK, regularPrice: n, numMonths: null !== (s = null == c ? void 0 : c.duration) && void 0 !== s ? s : Q.DISCOUNT_DURATION_FALLBACK }) })() }) }) } if (!t && i) { let e = B.default.formatPriceString(B.default.getDefaultPrice(n === Q.PremiumTypes.TIER_0 ? Q.SubscriptionPlans.PREMIUM_MONTH_TIER_0 : Q.SubscriptionPlans.PREMIUM_MONTH_TIER_2), Q.SubscriptionIntervalTypes.MONTH); if (0 === r) { var N, p, O, C; return (0, _.jsx)(A.Heading, { variant: "heading-md/normal", color: "always-white", className: $.trialHeader, children: J.default.Messages.PREMIUM_TIER_CARD_TRIAL_HEADER_BEFORE_REDEMPTION_NEW.format({ planName: (0, B.getTierDisplayName)(null !== (p = Q.PREMIUM_SKU_TO_MONTHLY_PLAN[null !== (N = null == m ? void 0 : m.sku_id) && void 0 !== N ? N : Q.PremiumSubscriptionSKUs.NONE]) && void 0 !== p ? p : Q.SubscriptionPlans.PREMIUM_MONTH_TIER_2), duration: (0, B.formatIntervalDuration)({ intervalType: null !== (O = null == m ? void 0 : m.interval) && void 0 !== O ? O : Q.SubscriptionIntervalTypes.DAY, intervalCount: null !== (C = null == m ? void 0 : m.interval_count) && void 0 !== C ? C : 30, capitalize: !1 }), price: e }) }) } if (null != h) return (0, _.jsx)(A.Heading, { variant: "heading-md/normal", color: "always-white", className: $.trialHeader, children: (0, _.jsx)(es, { defaultPriceString: e, subscriptionPlan: Q.SubscriptionPlans.PREMIUM_MONTH_TIER_2, discountOffer: h }) }) } return (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(z.default, { subscriptionTier: E, isGift: t, className: $.price, priceOptions: a }), s && (0, _.jsx)(z.default, { subscriptionTier: E, interval: Q.SubscriptionIntervalTypes.YEAR, isGift: t, className: $.price, priceOptions: a })] }) } function eo() { return (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(er, { Icon: w.default, text: J.default.Messages.PREMIUM_TIER_UPLOAD_ITEM.format({ maxUploadPremium: (0, B.getMaxFileSizeForPremiumType)(Q.PremiumTypes.TIER_0, { useSpace: !1 }) }) }), (0, _.jsx)(er, { Icon: M.default, text: J.default.Messages.PREMIUM_TIER_CUSTOM_EMOJI_ITEM }), (0, _.jsx)(er, { Icon: v.default, text: J.default.Messages.PREMIUM_MARKETING_SUPER_REACTIONS_PERK_TITLE_UNLIMITED }), (0, _.jsx)(er, { Icon: b.default, text: J.default.Messages.PREMIUM_TIER_NITRO_BADGE_ITEM })] }) } function el(e) { var t; let { showWumpus: n, ctaButton: i, showYearlyPrice: r, className: s, isGift: a = !1, priceOptions: o } = e, l = (0, f.useStateFromStores)([g.default], () => g.default.getPremiumTypeSubscription()), u = (0, f.useStateFromStores)([R.default], () => R.default.getCurrentUser()), d = (0, j.usePremiumTrialOffer)(), c = null == d ? void 0 : null === (t = d.subscription_trial) || void 0 === t ? void 0 : t.sku_id, I = (null == l ? void 0 : l.trialId) != null, T = (null == l ? void 0 : l.trialId) != null ? null == u ? void 0 : u.premiumType : null, S = null != c || I; return (0, _.jsxs)("div", { className: E()($.tier0, $.card, s, { [$.withTier0Rim]: !a && S, [$.withCardHover]: !a && S }), children: [c === Q.PremiumSubscriptionSKUs.TIER_0 ? (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(ei, { text: J.default.Messages.BILLING_TRIAL_FREE_TRIAL_TEXT, className: $.topRimPill, colorOptions: 0 }), (0, _.jsx)("div", { className: $.rimGlowTier0 })] }) : null, n ? (0, _.jsx)("div", { className: $.wumpusImageContainer, children: (0, _.jsx)(L.default, { src: ee, mediaLayoutType: q.MediaLayoutType.RESPONSIVE, width: 270, height: 242, zoomable: !1 }) }) : null, a || c !== Q.PremiumSubscriptionSKUs.TIER_0 ? null : (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(ei, { text: J.default.Messages.BILLING_TRIAL_FREE_TRIAL_TEXT, className: $.topRimPill, colorOptions: 0 }), (0, _.jsx)("div", { className: $.rimGlowTier0 })] }), a || T !== Q.PremiumTypes.TIER_0 ? null : (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(ei, { text: J.default.Messages.PREMIUM_TIER_CARD_TRIAL_ACTIVATED, className: $.topRimPill, colorOptions: 0 }), (0, _.jsx)("div", { className: $.rimGlowTier0 })] }), (0, _.jsxs)("div", { children: [(0, _.jsxs)("div", { children: [(0, _.jsx)("div", { children: (0, _.jsx)(U.default, { className: E()($.title, $.tier0Title) }) }), (0, _.jsx)(ea, { isGift: a, premiumTier: Q.PremiumTypes.TIER_0, offerType: 0, offerTierMatchesCard: c === Q.PremiumSubscriptionSKUs.TIER_0, showYearlyPrice: r, priceOptions: o })] }), (0, _.jsx)("div", { children: (0, _.jsx)(eo, {}) })] }), i, a || c !== Q.PremiumSubscriptionSKUs.TIER_0 ? null : (0, _.jsx)(Z.ButtonSparkleGroup, { tier: Q.PremiumTypes.TIER_0 })] }) } function eu(e) { let { featureSet: t = 0, isModal: n = !1, isGift: i = !1 } = e, r = (0, f.useStateFromStores)([C.default], () => C.default.locale), s = (0, f.useStateFromStores)([V.default], () => V.default.affinities), a = n && !i && s.length > 0; if (1 === t) return (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(er, { Icon: y.default, text: J.default.Messages.PREMIUM_TIER_SERVER_BOOST_WITH_PERCENTAGE_ITEM.format({ numBoosts: Q.NUM_FREE_GUILD_BOOSTS_WITH_PREMIUM, percentageOff: (0, k.formatPercent)(r, Q.GUILD_BOOST_COST_FOR_PREMIUM_USER_DISCOUNT_PERCENT / 100) }) }), (0, _.jsx)(er, { Icon: w.default, text: J.default.Messages.PREMIUM_TIER_UPLOAD_ITEM.format({ maxUploadPremium: (0, B.getMaxFileSizeForPremiumType)(Q.PremiumTypes.TIER_2, { useSpace: !1 }) }) }), (0, _.jsx)(er, { Icon: M.default, text: J.default.Messages.PREMIUM_TIER_CUSTOM_EMOJI_ITEM }), (0, _.jsx)(er, { Icon: G.default, text: J.default.Messages.PREMIUM_TIER_HD_STREAMING_ITEM }), (0, _.jsx)(er, { Icon: D.default, text: J.default.Messages.PREMIUM_TIER_CUSTOM_PROFILE_ITEM })] }); return (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(er, { Icon: w.default, text: J.default.Messages.PREMIUM_TIER_UPLOAD_ITEM.format({ maxUploadPremium: (0, B.getMaxFileSizeForPremiumType)(Q.PremiumTypes.TIER_2, { useSpace: !1 }) }) }), (0, _.jsx)(er, { Icon: M.default, text: J.default.Messages.PREMIUM_TIER_CUSTOM_EMOJI_ITEM }), (0, _.jsx)(er, { Icon: v.default, text: J.default.Messages.PREMIUM_MARKETING_SUPER_REACTIONS_PERK_TITLE_UNLIMITED }), (0, _.jsx)(er, { Icon: G.default, text: J.default.Messages.PREMIUM_TIER_HD_STREAMING_ITEM }), (0, _.jsx)(er, { Icon: y.default, text: J.default.Messages.PREMIUM_TIER_SERVER_BOOST_ITEM }), (0, _.jsx)(er, { Icon: D.default, text: J.default.Messages.PREMIUM_TIER_CUSTOM_PROFILE_ITEM }), a && (0, _.jsx)(X.default, {})] }) } function ed(e) { var t; let { showWumpus: n, ctaButton: i, showYearlyPrice: r, featureSet: s = 0, className: a, isGift: o = !1, isModal: l = !1, priceOptions: u } = e, d = (0, f.useStateFromStores)([g.default], () => g.default.getPremiumTypeSubscription()), c = (0, f.useStateFromStores)([R.default], () => R.default.getCurrentUser()), I = (0, j.usePremiumTrialOffer)(), T = null == I ? void 0 : null === (t = I.subscription_trial) || void 0 === t ? void 0 : t.sku_id, S = (null == d ? void 0 : d.trialId) != null ? null == c ? void 0 : c.premiumType : null, N = (0, x.useIsInPremiumOfferExperience)(), p = (0, Y.usePremiumDiscountOffer)(), O = (0, x.useHasDiscountApplied)(), C = null != T || null != S ? 0 : null != p || O ? 1 : null, v = (0, K.useIsEligibleForBogoPromotion)(), D = !o && N, M = (0, K.getBOGOPillCopy)(), y = (0, h.isThemeLight)((0, m.default)()), U = y ? 5 : 2, { enabled: b } = H.ReferralProgramRecipient.useExperiment({ location: "Tier2Card" }, { autoTrackExposure: !1 }), G = J.default.Messages.BILLING_TRIAL_FREE_TRIAL_TEXT; b && (null == I ? void 0 : I.trial_id) === Q.PREMIUM_TIER_2_REFERRAL_TRIAL_ID && (G = J.default.Messages.REFERRAL_PROGRAM_TWO_WEEK_TRIAL); let w = D && !y ? $.rimGlowTier2 : void 0; return (0, _.jsxs)("div", { className: E()($.card, $.tier2, a, { [$.withTier2Rim]: D, [$.withCardHover]: D }), children: [!o && null != p && (0, Y.discountOfferHasTier)(p, Q.PremiumSubscriptionSKUs.TIER_2) && void 0 !== p.discount.amount ? (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(ei, { text: O ? J.default.Messages.PREMIUM_TIER_CARD_DISCOUNT_APPLIED : J.default.Messages.PREMIUM_DISCOUNT_AMOUNT_OFF_BADGE.format({ percent: p.discount.amount }), className: $.topRimPill, colorOptions: U }), (0, _.jsx)("div", { className: w })] }) : null, o || T !== Q.PremiumSubscriptionSKUs.TIER_2 ? null : (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(ei, { text: G, className: $.topRimPill, colorOptions: U }), (0, _.jsx)("div", { className: w })] }), o || S !== Q.PremiumTypes.TIER_2 ? null : (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(ei, { text: J.default.Messages.PREMIUM_TIER_CARD_TRIAL_ACTIVATED, className: $.topRimPill, colorOptions: U }), (0, _.jsx)("div", { className: w })] }), !o && O && (0, _.jsxs)(_.Fragment, { children: [(0, _.jsx)(ei, { text: J.default.Messages.PREMIUM_TIER_CARD_DISCOUNT_APPLIED, className: $.topRimPill, colorOptions: U }), (0, _.jsx)("div", { className: w })] }), n ? (0, _.jsx)("div", { className: $.wumpusImageContainer, children: (0, _.jsx)(L.default, { src: et, mediaLayoutType: q.MediaLayoutType.RESPONSIVE, width: 270, height: 242, zoomable: !1 }) }) : null, (0, _.jsxs)("div", { children: [(0, _.jsxs)("div", { children: [(0, _.jsx)(P.default, { className: E()($.title, $.tier2Title) }), !o && T !== Q.PremiumSubscriptionSKUs.TIER_2 && v && (0, _.jsx)(A.Text, { variant: "text-xs/bold", className: $.freeTrialPillInline, children: M }), (0, _.jsx)(ea, { isGift: o, premiumTier: Q.PremiumTypes.TIER_2, offerType: C, offerTierMatchesCard: T === Q.PremiumSubscriptionSKUs.TIER_2 || (0, Y.discountOfferHasTier)(p, Q.PremiumSubscriptionSKUs.TIER_2), showYearlyPrice: r, priceOptions: u })] }), (0, _.jsx)("div", { children: (0, _.jsx)(eu, { featureSet: s, isModal: l, isGift: o }) })] }), i, o || T !== Q.PremiumSubscriptionSKUs.TIER_2 && null == p ? null : (0, _.jsx)(Z.ButtonSparkleGroup, { tier: Q.PremiumTypes.TIER_2 })] }) } function e_(e) { let { showWumpus: t, tier0CTAButton: n, tier2CTAButton: i, className: r } = e, { analyticsLocations: s } = (0, p.default)(N.default.PREMIUM_MARKETING_TIER_CARD); return (0, _.jsx)(p.AnalyticsLocationProvider, { value: s, children: (0, _.jsxs)("div", { className: E()($.premiumCards, r), children: [(0, _.jsx)(el, { showWumpus: t, ctaButton: n }), (0, _.jsx)(ed, { showWumpus: t, ctaButton: i })] }) }) }(i = o || (o = {}))[i.PREMIUM_TIER_0_WHITE_FILL = 0] = "PREMIUM_TIER_0_WHITE_FILL", i[i.PREMIUM_TIER_0_GRADIENT_FILL = 1] = "PREMIUM_TIER_0_GRADIENT_FILL", i[i.PREMIUM_TIER_2_WHITE_FILL = 2] = "PREMIUM_TIER_2_WHITE_FILL", i[i.PREMIUM_TIER_2_NEW_GRADIENT_FILL = 3] = "PREMIUM_TIER_2_NEW_GRADIENT_FILL", i[i.PREMIUM_TIER_2_OLD_GRADIENT_FILL = 4] = "PREMIUM_TIER_2_OLD_GRADIENT_FILL", i[i.PREMIUM_TIER_2_OLD_GRADIENT_FILL_LIGHT_MODE = 5] = "PREMIUM_TIER_2_OLD_GRADIENT_FILL_LIGHT_MODE", (r = l || (l = {}))[r.PREMIUM_TRIAL = 0] = "PREMIUM_TRIAL", r[r.PREMIUM_DISCOUNT = 1] = "PREMIUM_DISCOUNT", (s = u || (u = {}))[s.DEFAULT = 0] = "DEFAULT", s[s.BOOSTING = 1] = "BOOSTING", (a = d || (d = {}))[a.DEFAULT = 0] = "DEFAULT" }, 504865: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("911969"), u = n("509545"), d = n("78839"), _ = n("74538"), c = n("937615"), E = n("104494"), I = n("639119"), T = n("230927"), f = n("474936"), S = n("689938"), h = n("778959"); t.default = function(e) { var t, n, r, A; let { subscriptionTier: m, interval: N = f.SubscriptionIntervalTypes.MONTH, className: p, isGift: O = !1, variant: C, priceOptions: R } = e, g = (0, E.usePremiumAnnualDiscountOffer)(), L = (0, I.usePremiumTrialOffer)(), v = (0, a.useStateFromStores)([u.default], () => u.default.isLoadedForPremiumSKUs()), D = (0, a.useStateFromStores)([d.default], () => d.default.getPremiumTypeSubscription()), { annualInvoicePreview: M } = (0, T.useGetAnnualDiscountInvoicePreview)({ priceOptions: null != R ? R : { currency: "null" }, preventFetch: null == g || null == R || null != L || m !== f.PremiumSubscriptionSKUs.TIER_2 || N !== f.SubscriptionIntervalTypes.YEAR, selectedSkuId: f.PremiumSubscriptionSKUs.TIER_2, planGroup: f.ORDERED_PREMIUM_SUBSCRIPTION_PLANS, activeSubscription: D }), y = null == M ? void 0 : null === (A = M.invoiceItems) || void 0 === A ? void 0 : null === (r = A.find(e => e.subscriptionPlanId === f.SubscriptionPlans.PREMIUM_YEAR_TIER_2)) || void 0 === r ? void 0 : null === (n = r.discounts) || void 0 === n ? void 0 : null === (t = n.find(e => e.type === l.InvoiceDiscountTypes.SUBSCRIPTION_PLAN)) || void 0 === t ? void 0 : t.amount; if (!v) return (0, i.jsx)(o.Spinner, { type: o.Spinner.Type.PULSING_ELLIPSIS, className: h.priceSpinner }); let P = u.default.getForSkuAndInterval((0, _.castPremiumSubscriptionAsSkuId)(m), N), U = null != y ? (0, _.getPrice)(f.SubscriptionPlans.PREMIUM_YEAR_TIER_2, !1, O, R) : null, b = null != P ? (0, _.getFormattedPriceForPlan)(P, R, !1, O) : null; return (0, i.jsx)(o.Heading, { color: "always-white", variant: null != C ? C : "heading-md/medium", className: s()(h.pricePerInterval, p), children: null != U && null != y ? (0, i.jsxs)("div", { className: h.annualDiscountString, children: [S.default.Messages.BILLING_ANNUAL_DISCOUNT_TIER_CARD_YEARLY_PRICE.format({ discountedPrice: (0, c.formatPrice)(U.amount - y, U.currency) }), S.default.Messages.BILLING_ANNUAL_DISCOUNT_TIER_CARD_YEARLY_PRICE_SUBTEXT.format({ regularPrice: b })] }) : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("span", { className: h.price, children: b }), " / ", (0, _.getIntervalStringAsNoun)(N)] }) }) } }, 63802: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ButtonSparkleGroup: function() { return E }, PREMIUM_NEW_TIER_2_SVG_GRADIENT_ID: function() { return _ }, PREMIUM_OLD_TIER_2_SVG_GRADIENT_ID: function() { return c }, SparkleStar: function() { return I } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("780384"), o = n("410030"), l = n("325767"), u = n("474936"), d = n("646541"); let _ = "premium_new_tier_2_gradient", c = "premium_old_tier_2_gradient"; function E(e) { let { tier: t = u.PremiumTypes.TIER_2 } = e, n = (0, o.default)(), r = (0, a.isThemeLight)(n); return (0, i.jsxs)(i.Fragment, { children: [!r && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { className: s()(d.rimGlowVertical, { [d.rimGlowVerticalTier0]: t === u.PremiumTypes.TIER_0, [d.rimGlowVerticalTier2]: t === u.PremiumTypes.TIER_2 }) }), (0, i.jsx)(I, { foreground: d.buttonSparkleStar1 })] }), (0, i.jsx)(I, { foreground: d.buttonSparkleStar2 }), (0, i.jsx)(I, { foreground: d.buttonSparkleStar3 }), (0, i.jsx)(I, { foreground: d.buttonSparkleStar4 }), (0, i.jsx)(I, { foreground: d.buttonSparkleStar5 })] }) } function I(e) { let { width: t = 14, height: n = 13, color: r = "white", foreground: s, ...a } = e; return (0, i.jsxs)("svg", { ...(0, l.default)({ ...a }), preserveAspectRatio: "none", width: t, height: n, viewBox: "0 0 14 13", className: s, xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsxs)("defs", { children: [(0, i.jsxs)("linearGradient", { id: _, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [(0, i.jsx)("stop", { offset: "0%", stopColor: "#8547C6" }), (0, i.jsx)("stop", { offset: "50%", stopColor: "#B845C1" }), (0, i.jsx)("stop", { offset: "100%", stopColor: "#AB5D8A" })] }), (0, i.jsxs)("linearGradient", { id: c, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [(0, i.jsx)("stop", { offset: "0%", stopColor: "#B473F5" }), (0, i.jsx)("stop", { offset: "100%", stopColor: "#E292AA" })] })] }), (0, i.jsx)("path", { d: "M9.30705 8.36284L13.5731 6.46363C13.5889 6.45487 13.6022 6.44203 13.6114 6.42644C13.6206 6.41086 13.6255 6.39309 13.6255 6.375C13.6255 6.35691 13.6206 6.33914 13.6114 6.32356C13.6022 6.30797 13.5889 6.29513 13.5731 6.28637L9.30705 4.38716C9.29358 4.38716 9.28066 4.38183 9.27114 4.37233C9.26162 4.36283 9.25627 4.34995 9.25627 4.33652L7.3518 0.0569762C7.30102 -0.0189921 7.19944 -0.0189921 7.17405 0.0569762L5.26958 4.33652C5.24419 4.36184 5.24419 4.38716 5.2188 4.38716L0.927401 6.28637C0.911525 6.29513 0.898291 6.30797 0.889077 6.32356C0.879862 6.33914 0.875 6.35691 0.875 6.375C0.875 6.39309 0.879862 6.41086 0.889077 6.42644C0.898291 6.44203 0.911525 6.45487 0.927401 6.46363L5.2188 8.36284C5.24419 8.36284 5.24419 8.38816 5.26958 8.41348L7.17405 12.693C7.19944 12.769 7.30102 12.769 7.3518 12.693L9.25627 8.41348C9.25627 8.40005 9.26162 8.38717 9.27114 8.37767C9.28066 8.36817 9.29358 8.36284 9.30705 8.36284Z", fill: r })] }) } }, 422034: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AvatarWrapper: function() { return T }, default: function() { return I } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("204197"), d = n("357355"), _ = n("182294"), c = n("689938"), E = n("349768"); function I(e) { let { smallerText: t, className: n, textColor: s } = e, u = (0, o.useStateFromStores)([d.default], () => d.default.affinities.slice(0, 3).reverse()), I = u.map((e, t) => (0, i.jsx)(T, { affinity: e, applyMask: t !== u.length - 1, size: _.AvatarSizes.SIZE_32 }, e.id)), f = e => null != e.globalName ? e.globalName : e.username, S = r.useMemo(() => 3 === u.length ? c.default.Messages.AFFINITIES_MARKETING_HEADER_V2_3.format({ username: f(u[2]) }) : 2 === u.length ? c.default.Messages.AFFINITIES_MARKETING_HEADER_V2_2.format({ username: f(u[1]), otherUsername: f(u[0]) }) : 1 === u.length ? c.default.Messages.AFFINITIES_MARKETING_HEADER_V2_1.format({ username: f(u[0]) }) : "", [u]); return 0 === u.length ? null : (0, i.jsxs)("div", { className: a()(E.container, n), children: [(0, i.jsx)("div", { className: E.iconContainer, children: I }), (0, i.jsx)("div", { className: E.textContainer, children: (0, i.jsx)(function() { return t ? (0, i.jsx)(l.Text, { variant: "text-lg/medium", color: s, children: S }) : (0, i.jsx)(l.Heading, { variant: "heading-xl/medium", color: s, children: S }) }, {}) })] }) } function T(e) { let { affinity: t, applyMask: n, size: r } = e, { avatarSrc: s, eventHandlers: o } = (0, u.default)({ user: t, size: r, animateOnHover: !0 }); return (0, i.jsx)(l.Avatar, { className: a()(E.icon, { [E.mask]: n }), src: s, "aria-label": t.username, size: r, ...o }) } }, 318990: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("204197"), d = n("357355"), _ = n("689938"), c = n("244351"); function E() { let e = (0, o.useStateFromStores)([d.default], () => d.default.affinities.slice(0, 3)), t = e[0], { avatarSrc: n, eventHandlers: s } = (0, u.default)({ user: t, size: l.AvatarSizes.SIZE_24, animateOnHover: !0 }), E = e => null != e.globalName ? e.globalName : e.username, I = r.useMemo(() => e.length >= 2 ? _.default.Messages.AFFINITIES_MARKETING_HEADER_V2_3.format({ username: E(e[0]) }) : 1 === e.length ? _.default.Messages.AFFINITIES_MARKETING_HEADER_V2_1.format({ username: E(e[0]) }) : "", [e]); return 0 === e.length ? null : (0, i.jsxs)("div", { className: c.container, children: [(0, i.jsx)(l.Avatar, { className: c.__invalid_icon, src: n, "aria-label": t.username, size: l.AvatarSizes.SIZE_24, ...s }), (0, i.jsx)(l.Text, { className: a()(c.text), variant: "text-sm/normal", color: "always-white", children: I })] }) } }, 302945: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("793030"), l = n("442837"), u = n("355467"), d = n("357355"), _ = n("923876"), c = n("422034"), E = n("474936"), I = n("182294"), T = n("689938"), f = n("600541"); let S = [E.PremiumUpsellTypes.STREAM_QUALITY_UPSELL]; function h(e) { let { premiumUpsellType: t, className: n, forceShow: s = !1 } = e, h = (0, l.useStateFromStores)([d.default], () => d.default.affinities), A = h.length > 0 && S.includes(t), m = _.default.useExperiment({ location: "HD Streaming Upsell" }, { autoTrackExposure: A, disable: !A || s }).enabled || s && A, N = (0, l.useStateFromStores)([d.default], () => d.default.hasFetched); r.useEffect(() => { !N && u.getNitroAffinity() }, [N]); let p = h.map((e, t) => (0, i.jsx)(c.AvatarWrapper, { affinity: e, applyMask: t !== h.length - 1, size: I.AvatarSizes.SIZE_20 }, e.id)); return m ? (0, i.jsxs)("div", { className: a()(f.container, n), children: [(0, i.jsx)("div", { className: f.iconContainer, children: p }), (0, i.jsx)("div", { className: f.textContainer, children: (0, i.jsx)(o.Text, { variant: "text-sm/medium", children: (() => { if (t === E.PremiumUpsellTypes.STREAM_QUALITY_UPSELL) return T.default.Messages.STREAM_PREMIUM_AFFINITY_UPSELL.format({ numFriends: h.length }); return null })() }) })] }) : null } }, 355314: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("310752"), d = n("594174"), _ = n("424218"), c = n("74538"), E = n("348121"), I = n("790527"), T = n("474936"), f = n("981631"), S = n("731994"), h = n("689938"), A = n("241614"); function m(e) { let t, { onClose: n, fileSize: s, ...m } = e, N = null != s && T.MAX_PREMIUM_TIER_0_ATTACHMENT_SIZE < s, { isLoading: p, suggestedPremiumType: O } = (0, E.default)(), C = !N && O === T.PremiumTypes.TIER_0, R = (0, o.useStateFromStores)([d.default], () => d.default.getCurrentUser()), g = (0, i.jsx)(u.default, { icons: S.DEFAULT_FILE_UPLOAD_ICONS }); t = C ? h.default.Messages.UPLOAD_AREA_PREMIUM_TIER_UPSELL_BODY_LINE_2.format({ premiumPlan: (0, c.getPremiumTypeDisplayName)(T.PremiumTypes.TIER_0), premiumMaxSize: h.default.Messages.FILE_UPLOAD_LIMIT_PREMIUM_TIER_0_CORRECTED }) : h.default.Messages.UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_2_INCREASE; let L = r.useMemo(() => { let e = c.default.getUserMaxFileSize(R), t = (0, _.formatSize)(e / 1024, { useKibibytes: !0 }), n = h.default.Messages.UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_1.format({ maxSize: t }); switch (null == R ? void 0 : R.premiumType) { case T.PremiumTypes.TIER_0: n = h.default.Messages.UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_1_PREMIUM_TIER_0.format({ maxSize: t }); break; case T.PremiumTypes.TIER_1: n = h.default.Messages.UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_1_PREMIUM_TIER_1.format({ maxSize: t }) } return n }, [R]), v = (0, i.jsxs)("div", { className: A.body, children: [(0, i.jsx)("span", { children: L }), (0, i.jsx)(l.Text, { variant: "text-md/medium", children: t })] }); return (0, i.jsx)(I.default, { artElement: g, artContainerClassName: a()(A.artContainer), enableArtBoxShadow: !1, type: T.PremiumUpsellTypes.UPLOAD_ERROR_UPSELL, title: h.default.Messages.UPLOAD_AREA_TOO_LARGE_TITLE, body: v, context: h.default.Messages.UPLOAD_AREA_PREMIUM_UPSELL_BODY_LINE_1.format({ maxSize: h.default.Messages.FILE_UPLOAD_LIMIT_NEW_STANDARD }), glowUp: t, analyticsLocation: { section: f.AnalyticsSections.FILE_UPLOAD_POPOUT }, onClose: n, subscriptionTier: C ? T.PremiumSubscriptionSKUs.TIER_0 : T.PremiumSubscriptionSKUs.TIER_2, isLoading: p, ...m }) } }, 790527: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("100527"), u = n("906732"), d = n("678558"), _ = n("626135"), c = n("74538"), E = n("104494"), I = n("639119"), T = n("165583"), f = n("197115"), S = n("302945"), h = n("474936"), A = n("981631"), m = n("689938"), N = n("991566"), p = n("769860"); function O(e) { var t, n, s; let { title: O, type: C, guildBoostProps: R, analyticsSource: g, analyticsLocation: L, body: v, context: D, glowUp: M, modalClassName: y, artContainerClassName: P, bodyClassName: U, transitionState: b, onClose: G, onSubscribeClick: w, onSecondaryClick: k, secondaryCTA: B, subscribeButtonText: V, showNewBadge: x = !1, enableArtBoxShadow: F = !0, subscriptionTier: H = h.PremiumSubscriptionSKUs.TIER_2, isLoading: Y = !1, hideBackButton: j, backButtonText: W, showEnhancedUpsell: K, children: z, ...Z } = e, X = null != R, Q = (0, I.usePremiumTrialOffer)(), q = (0, E.usePremiumDiscountOffer)(), J = ((null == Q ? void 0 : null === (t = Q.subscription_trial) || void 0 === t ? void 0 : t.sku_id) === H || (0, E.discountOfferHasTier)(q, H)) && !X, { analyticsLocations: $ } = (0, u.default)(l.default.PREMIUM_UPSELL_MODAL); r.useEffect(() => { !Y && (X ? _.default.track(A.AnalyticEvents.PREMIUM_GUILD_UPSELL_VIEWED, { type: "".concat(C, " - Tier ").concat(R.boostedGuildTier), guild_id: R.guild.id, channel_id: R.channelId, location: L, location_stack: $ }) : _.default.track(A.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: C, source: g, location: L, location_stack: $, sku_id: (0, c.castPremiumSubscriptionAsSkuId)(H) })) }, [X, H, Y]); let ee = F ? a()(N.artContainer, N.artContainerBoxShadow, P) : a()(N.artContainer, P), et = null; return et = "artURL" in Z ? (0, i.jsx)("img", { className: N.art, alt: "", src: Z.artURL }) : Z.artElement, (0, i.jsxs)(o.ModalRoot, { className: a()(N.root, y), "aria-label": O, transitionState: b, children: [(0, i.jsxs)("div", { className: ee, children: [et, x ? (0, i.jsx)("img", { className: N.sparkleBadge, alt: "", src: p }) : null] }), K ? (0, i.jsx)(o.ModalCloseButton, { onClick: G, className: N.closeButton }) : null, (0, i.jsx)(o.ModalContent, { scrollbarType: "none", className: N.content, children: Y ? (0, i.jsx)(o.Spinner, {}) : (0, i.jsx)(i.Fragment, { children: J ? (0, i.jsx)(i.Fragment, { children: (0, i.jsx)(T.default, { onClose: G, type: C, subscriptionTier: null !== (s = null == Q ? void 0 : null === (n = Q.subscription_trial) || void 0 === n ? void 0 : n.sku_id) && void 0 !== s ? s : h.PremiumSubscriptionSKUs.TIER_2, headingText: O, context: D, analyticsLocationObject: L, discountOffer: q, trialOffer: Q, children: M }) }) : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(o.Heading, { className: a()(N.header, { [N.enhancedHeader]: K }), variant: "heading-xl/semibold", children: O }), (0, i.jsx)(S.default, { premiumUpsellType: C }), z, (0, i.jsx)(o.Text, { variant: "text-md/normal", className: a()(U, N.subHeader), children: v })] }) }) }), (0, i.jsxs)(o.ModalFooter, { className: a()(N.footer, { [N.enhancedFooter]: K }), children: [(0, i.jsxs)("div", { className: a()(N.primaryActions, { [N.enhancedPrimaryActions]: K }), children: [null != B ? (0, i.jsx)(o.Button, { className: a()(N.secondaryAction, { [N.enhancedSecondaryAction]: K }), onClick: k, size: o.Button.Sizes.SMALL, color: K ? o.Button.Colors.CUSTOM : o.Button.Colors.PRIMARY, look: o.Button.Looks.LINK, children: B }) : null, (() => { let e; if (X) return (0, i.jsx)(d.default, { analyticsLocation: L, guild: R.guild, onClose: G }); let t = K ? m.default.Messages.PREMIUM_UPSELL_GET_NITRO : void 0; if (J) { if (null != Q) { var n, r; t = (0, c.formatTrialCtaIntervalDuration)({ intervalType: null == Q ? void 0 : null === (n = Q.subscription_trial) || void 0 === n ? void 0 : n.interval, intervalCount: null == Q ? void 0 : null === (r = Q.subscription_trial) || void 0 === r ? void 0 : r.interval_count }), e = null == Q ? void 0 : Q.trial_id } else null != q && (t = m.default.Messages.PREMIUM_DISCOUNT_CTA.format({ percent: q.discount.amount })) } return (0, i.jsx)(f.default, { className: a()({ [N.getNitroCTA]: K }), premiumModalAnalyticsLocation: L, subscriptionTier: H, trialId: e, size: o.Button.Sizes.SMALL, color: K ? o.Button.Colors.CUSTOM : o.Button.Colors.GREEN, onClick: () => { null == w || w(), G() }, buttonText: null != V ? V : t }) })()] }), !j && !K && (0, i.jsx)(o.Button, { onClick: G, size: o.Button.Sizes.SMALL, color: o.Button.Colors.PRIMARY, look: o.Button.Looks.LINK, children: null != W ? W : m.default.Messages.BACK })] })] }) } }, 230927: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useGetAnnualDiscountInvoicePreview: function() { return u } }), n("47120"); var i = n("442837"), r = n("509545"), s = n("74538"), a = n("374649"), o = n("104494"), l = n("474936"); function u(e) { var t, n; let { priceOptions: u, preventFetch: d, selectedSkuId: _, isGift: c = !1, planGroup: E, activeSubscription: I } = e, T = (0, o.usePremiumAnnualDiscountOffer)(), f = (0, i.useStateFromStores)([r.default], () => r.default.get(l.SubscriptionPlans.PREMIUM_YEAR_TIER_2)), S = null == T ? void 0 : null === (t = T.discount) || void 0 === t ? void 0 : t.plan_ids.some(e => l.SubscriptionPlanInfo[e].skuId === _), h = null != I && null != f ? (0, s.getItemsWithUpsertedPlanIdForGroup)(I, f.id, 1, new Set(E)) : null, A = !c && null != T && null != _ && S, [m, N] = (0, a.useSubscriptionInvoicePreview)({ subscriptionId: null !== (n = null == I ? void 0 : I.id) && void 0 !== n ? n : "null", items: h, renewal: !1, applyEntitlements: !0, paymentSourceId: u.paymentSourceId, currency: u.currency, preventFetch: !A || null == I || d }), [p, O] = (0, a.useSubscriptionInvoicePreview)({ items: [{ planId: l.SubscriptionPlans.PREMIUM_YEAR_TIER_2, quantity: 1 }], renewal: !1, applyEntitlements: !0, paymentSourceId: u.paymentSourceId, currency: u.currency, preventFetch: !A || null != I || d }); return null != m ? { annualInvoicePreview: m, annualInvoicePreviewError: N, isEligibleForAnnualDiscount: A } : null != p ? { annualInvoicePreview: p, annualInvoicePreviewError: O, isEligibleForAnnualDiscount: A } : { annualInvoicePreview: null, annualInvoicePreviewError: null, isEligibleForAnnualDiscount: A } } }, 801249: function(e, t, n) { "use strict"; let i; n.r(t); var r, s = n("442837"), a = n("570140"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = { lastGuildDismissedTime: {} }; class u extends(r = s.default.DeviceSettingsStore) { initialize() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : l; i = e } getUserAgnosticState() { return i } getLastGuildDismissedTime(e) { return i.lastGuildDismissedTime[e] } } o(u, "displayName", "ApplicationSubscriptionChannelNoticeStore"), o(u, "persistKey", "ApplicationSubscriptionChannelNoticeStore"), t.default = new u(a.default, { APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED: function(e) { let { guildId: t } = e; i.lastGuildDismissedTime[t] = Date.now() } }) }, 106976: function(e, t, n) { "use strict"; n.r(t), n.d(t, { dismissApplicationSubscriptionExpirationNotice: function() { return c }, fetchAllSubscriptionListingsDataForApplication: function() { return d }, fetchEntitlementsForGuild: function() { return _ }, fetchSubscriptionListingForPlan: function() { return E } }), n("47120"); var i = n("570140"), r = n("821849"), s = n("307643"), a = n("981631"); function o(e) { return { id: e.id, type: a.SKUTypes.SUBSCRIPTION, application_id: e.application_id, product_line: a.SKUProductLines.APPLICATION, name: e.name, summary: "", description: e.description, flags: e.sku_flags, manifests: [], available_regions: [], legal_notice: "", deleted: e.soft_deleted, price_tier: 0, show_age_gate: !1, restricted: !1 } } function l(e) { var t; return { id: e.id, sku: o(e), summary: e.description, description: e.description, benefits: null !== (t = e.store_listing_benefits) && void 0 !== t ? t : [], thumbnail: e.image_asset, published: e.published } } function u(e) { for (let t of (i.default.dispatch({ type: "SKUS_FETCH_SUCCESS", skus: e.map(o) }), i.default.dispatch({ type: "STORE_LISTINGS_FETCH_SUCCESS", storeListings: e.map(l) }), e)) i.default.dispatch({ type: "SUBSCRIPTION_PLANS_FETCH_SUCCESS", skuId: t.id, subscriptionPlans: t.subscription_plans }) } async function d(e, t) { i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS", applicationId: e }); try { var n; let r = await s.getApplicationSubscriptionGroupListingsForApplication(e, t); return i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS", applicationId: e, groupListing: r }), u(null !== (n = r.subscription_listings) && void 0 !== n ? n : []), r } catch (t) { i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE", applicationId: e }) } } async function _(e) { i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS", guildId: e }); try { let t = await s.getEntitlementsForGuild(e); i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS", guildId: e, entitlements: t }) } catch (t) { i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE", guildId: e }) } } function c(e) { i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_CHANNEL_NOTICE_DISMISSED", guildId: e }) } async function E(e) { i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN", planId: e }); try { var t; let n = await s.getSubscriptionGroupForSubscriptionPlan(e); i.default.dispatch({ type: "APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS", groupListing: n }); let a = null !== (t = n.subscription_listings) && void 0 !== t ? t : []; for (let t of a) t.subscription_plans[0].id === e && await r.fetchSubscriptionPlansForSKU(t.id, void 0, void 0, !0); u(a) } catch (e) {} } }, 270144: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LoadState: function() { return i }, default: function() { return U }, useActiveSubscriptionListingForApplication: function() { return v }, useApplication: function() { return P }, useEligibleApplicationSubscriptionGuilds: function() { return b }, useFetchEntitlementsForGuild: function() { return O }, useFetchListingsForApplication: function() { return p }, useFetchListingsForSubscriptions: function() { return M }, useFetchUserApplicationSubscriptionEntitlements: function() { return y }, useSubscriptionListingsForGroup: function() { return R }, useUnseenEndedApplicationSubscriptionEntitlements: function() { return D } }), n("653041"), n("47120"); var i, r, s = n("470079"), a = n("442837"), o = n("496929"), l = n("887706"), u = n("812206"), d = n("430824"), _ = n("496675"), c = n("509545"), E = n("78839"), I = n("580130"), T = n("55563"), f = n("801249"), S = n("106976"), h = n("307643"), A = n("488915"), m = n("171246"), N = n("981631"); (r = i || (i = {}))[r.NOT_LOADED = 0] = "NOT_LOADED", r[r.LOADING = 1] = "LOADING", r[r.LOADED = 2] = "LOADED", r[r.ERROR = 3] = "ERROR"; let p = function(e, t) { let { refetchOnMount: n = !1 } = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, i = (0, a.useStateFromStores)([A.default], () => null != e ? A.default.getSubscriptionGroupListingsForApplicationFetchState(e) : A.FetchState.FETCHED, [e]); return s.useEffect(() => { if (null == e || null == t) return; let i = A.default.getSubscriptionGroupListingsForApplicationFetchState(e); (n || i === A.FetchState.NOT_FETCHED) && (0, S.fetchAllSubscriptionListingsDataForApplication)(e, t) }, [e, t, n]), { listingsLoaded: i === A.FetchState.FETCHED } }, O = e => { let { guildId: t, canFetch: n = !0, forceRefetch: i = !1 } = e, r = (0, a.useStateFromStores)([A.default], () => null != t ? A.default.getEntitlementsForGuildFetchState(t) : null, [t]); return s.useEffect(() => { if (null == t || t === N.ME) return; let e = A.default.getEntitlementsForGuildFetchState(t); n && (e === A.FetchState.NOT_FETCHED || i) && (0, S.fetchEntitlementsForGuild)(t) }, [t, n, i]), { entitlementsLoaded: r === A.FetchState.FETCHED } }, C = e => { let { applicationId: t, canFetch: n = !0, forceRefetch: i = !1, loggedIn: r } = e, l = (0, a.useStateFromStores)([I.default], () => I.default.isFetchedForApplication(t), [t]); return s.useEffect(() => { if (r) { let e = I.default.isFetchingForApplication(t); (n && !e && !l || i) && (0, o.fetchUserEntitlements)({ entitlementType: N.EntitlementTypes.APPLICATION_SUBSCRIPTION }) } }, [t, n, l, i, r]), { entitlementsLoaded: l } }, R = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { includeSoftDeleted: !1 }; return (0, a.useStateFromStoresArray)([A.default], () => { if (null == e) return []; let n = A.default.getSubscriptionGroupListing(e); if (null == n) return []; let i = []; for (let e of n.subscription_listings_ids) { let n = A.default.getSubscriptionListing(e); if (null != n)(!n.soft_deleted || t.includeSoftDeleted) && i.push(n) } return i }, [e, t.includeSoftDeleted]) }, g = [], L = []; function v(e, t) { let n = (0, a.useStateFromStores)([E.default], () => E.default.getSubscriptions()), { subscriptionGroupListing: i, guildEntitlements: r, userEntitlements: o } = (0, a.useStateFromStoresObject)([A.default, I.default], () => { var n, i; return { subscriptionGroupListing: null != e ? A.default.getSubscriptionGroupListingForApplication(e) : null, guildEntitlements: null != e && null != t ? A.default.getApplicationEntitlementsForGuild(e, t) : g, userEntitlements: null != e && null !== (i = null === (n = I.default.getForApplication(e)) || void 0 === n ? void 0 : n.values()) && void 0 !== i ? i : L } }, [e, t]), l = s.useMemo(() => [...r, ...o], [r, o]), u = null == i ? void 0 : i.subscription_listings, { activeSubscriptionListing: d, activeEntitlement: _ } = s.useMemo(() => { if (null != u) { for (let e of l) for (let n of u) if ((0, m.isListingActiveInGuild)(n, e, t)) return { activeSubscriptionListing: n, activeEntitlement: e } } return { activeSubscriptionListing: null, activeEntitlement: null } }, [l, u, t]); return { activeSubscription: s.useMemo(() => { if (null == n) return null; let e = null == d ? void 0 : d.subscription_plans[0].id; for (let t of Object.values(n)) if (t.type === N.SubscriptionTypes.APPLICATION && t.items[0].planId === e) return t; return null }, [d, n]), activeSubscriptionListing: d, activeEntitlement: _, subscriptionGroupListing: i } } function D(e) { var t; let n = null !== (t = null == e ? void 0 : e.id) && void 0 !== t ? t : N.EMPTY_STRING_SNOWFLAKE_ID, { entitlementsLoaded: i } = O({ guildId: n, canFetch: (0, a.useStateFromStores)([_.default], () => _.default.can(N.Permissions.ADMINISTRATOR, e)) }), r = (0, a.useStateFromStores)([f.default], () => f.default.getLastGuildDismissedTime(n)), o = (0, a.useStateFromStoresArray)([A.default], () => { let e = A.default.getEntitlementsForGuild(n), t = A.default.getEntitlementsForGuild(n, !1), i = e.map(e => e.applicationId); return t.filter(e => !i.includes(e.applicationId)) }), l = (0, a.useStateFromStoresObject)([T.default], () => T.default.getSKUs()), u = s.useMemo(() => o.filter(e => { let t = l[e.skuId]; return null != t && t.available }), [o, l]); return i ? u.filter(e => null != e.endsAt && e.endsAt.getTime() > Math.max(null != r ? r : 0, Date.now() - 2592e6)) : [] } let M = e => { let [t, n] = s.useState(!1), i = s.useMemo(() => e.map(m.getApplicationSubscriptionPlanId), [e]), r = (0, a.useStateFromStoresArray)([c.default], () => i.filter(e => null == c.default.get(e)), [i]); return s.useEffect(() => { r.length > 0 && (n(!0), Promise.all(r.map(e => (0, S.fetchSubscriptionListingForPlan)(e))).catch(() => {}).then(() => { n(!1) })) }, [r]), { loading: t } }, y = () => { let [e, t] = s.useState(0); return s.useEffect(() => { t(1), (0, o.fetchUserEntitlements)({ withSku: !0, withApplication: !0, entitlementType: N.EntitlementTypes.APPLICATION_SUBSCRIPTION }).catch(() => { t(3) }).then(() => { t(2) }) }, []), { loadState: e } }, P = e => { let t = (0, l.default)(), n = (0, a.useStateFromStores)([u.default], () => null != e ? u.default.getApplication(e) : null, [e]), i = null != n; return s.useEffect(() => { !i && null != e && t && (0, h.fetchApplication)(e) }, [i, e, t]), n }; function U(e) { let { applicationId: t, groupListingId: n, guildId: i } = e, r = (0, l.default)(), { listingsLoaded: s } = p(t, n), { entitlementsLoaded: a } = O({ guildId: i }), { entitlementsLoaded: o } = C({ applicationId: t, loggedIn: r }), u = P(t), d = (null == u ? void 0 : u.isMonetized) === !0; return { applicationSubscriptionListingsShown: null != t && null != n && (null == i || a) && (!r || o) && s && d } } function b(e, t) { let n = (0, a.useStateFromStores)([d.default], () => d.default.isLoaded()), [i, r] = s.useState([]); return s.useEffect(() => { null == t && null != e && n && (0, h.fetchEligibleApplicationSubscriptionGuilds)(e).then(e => { r(e.map(e => d.default.getGuild(e)).filter(e => null != e)) }) }, [e, t, n]), i } }, 307643: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchApplication: function() { return d }, fetchEligibleApplicationSubscriptionGuilds: function() { return _ }, getApplicationSubscriptionGroupListingsForApplication: function() { return o }, getEntitlementsForGuild: function() { return l }, getSubscriptionGroupForSubscriptionPlan: function() { return u } }); var i = n("544891"), r = n("570140"), s = n("479531"), a = n("981631"); let o = async (e, t) => (await i.HTTP.get({ url: a.Endpoints.APPLICATION_SUBSCRIPTION_GROUP_LISTING(e, t) })).body, l = async function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return (await i.HTTP.get({ url: a.Endpoints.GUILD_ENTITLEMENTS(e), query: { with_sku: !0, with_application: !0, exclude_deleted: t } })).body }, u = async e => (await i.HTTP.get({ url: a.Endpoints.SUBSCRIPTION_PLAN_GROUP_LISTING(e) })).body; function d(e) { return r.default.dispatch({ type: "APPLICATION_FETCH", applicationId: e }), i.HTTP.get({ url: a.Endpoints.APPLICATION_PUBLIC(e) }).then(e => (r.default.dispatch({ type: "APPLICATION_FETCH_SUCCESS", application: e.body }), e.body)).catch(t => (r.default.dispatch({ type: "APPLICATION_FETCH_FAIL", applicationId: e }), Promise.reject(new s.default(t)))) } async function _(e) { return (await i.HTTP.get({ url: a.Endpoints.ELIGIBLE_APPLICATION_SUBSCRIPTION_GUILDS, query: { application_id: e } })).body } }, 488915: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return i } }), n("47120"); var i, r, s, a, o, l, u = n("512722"), d = n.n(u), _ = n("442837"), c = n("759174"), E = n("570140"), I = n("959546"), T = n("55563"); function f(e) { return "subscription_listing:".concat(e) } function S(e) { return "application:".concat(e) } function h(e) { return "plan:".concat(e) } function A(e, t, n) { return "entitlement:".concat(e, ":").concat(n, ":").concat(t) } function m(e, t) { return "entitlement:".concat(t, ":").concat(e) }(s = i || (i = {}))[s.NOT_FETCHED = 0] = "NOT_FETCHED", s[s.FETCHING = 1] = "FETCHING", s[s.FETCHED = 2] = "FETCHED"; let N = new c.SecondaryIndexMap(e => [S(e.application_id), ...e.subscription_listings_ids.map(f)], e => e.id), p = new c.SecondaryIndexMap(e => [S(e.application_id), h(e.subscription_plans[0].id)], e => e.id), O = new c.SecondaryIndexMap(e => [A(e.applicationId, e.isValid(null, T.default), e.guildId), m(e.isValid(null, T.default), e.guildId)], e => e.id), C = {}, R = {}; function g(e) { let t = N.values(S(e)); return d()(t.length <= 1, "Found multiple group listings for application"), t[0] } function L(e) { var t; for (let n of (N.set(e.id, e), null !== (t = e.subscription_listings) && void 0 !== t ? t : []))(function(e) { p.set(e.id, e) })(n) } class v extends(r = _.Store) { getSubscriptionGroupListingsForApplicationFetchState(e) { var t; return null !== (t = C[e]) && void 0 !== t ? t : 0 } getSubscriptionGroupListing(e) { return N.get(e) } getSubscriptionGroupListingForApplication(e) { return g(e) } getSubscriptionGroupListingForSubscriptionListing(e) { let t = N.values(f(e)); return d()(t.length <= 1, "Found multiple group listings for listing"), t[0] } getSubscriptionListing(e) { return p.get(e) } getSubscriptionListingsForApplication(e) { return p.values(S(e)) } getEntitlementsForGuildFetchState(e) { var t; return null !== (t = R[e]) && void 0 !== t ? t : 0 } getSubscriptionListingForPlan(e) { let t = p.values(h(e)); return d()(t.length <= 1, "Found multiple listings for plan"), t[0] } getApplicationEntitlementsForGuild(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; return O.values(A(e, n, t)) } getEntitlementsForGuild(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return O.values(m(t, e)) } } l = "ApplicationSubscriptionStore", (o = "displayName") in(a = v) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new v(E.default, { LOGOUT: function() { N.clear(), p.clear(), O.clear(), C = {}, R = {} }, APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS: function(e) { let { applicationId: t } = e; C[t] = 1; let n = g(t); if (null != n) for (let e of n.subscription_listings_ids) p.delete(e) }, APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_SUCCESS: function(e) { let { applicationId: t, groupListing: n } = e; C[t] = 2, L(n) }, APPLICATION_SUBSCRIPTIONS_FETCH_LISTINGS_FAILURE: function(e) { let { applicationId: t } = e; C[t] = 2 }, APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS(e) { let { guildId: t } = e; R[t] = 1 }, APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS(e) { let { guildId: t, entitlements: n } = e; R[t] = 2, n.forEach(e => { let t = I.default.createFromServer(e); O.set(t.id, t) }) }, APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_FAILURE(e) { let { guildId: t } = e; R[t] = 0 }, APPLICATION_SUBSCRIPTIONS_FETCH_LISTING_FOR_PLAN_SUCCESS: function(e) { let { groupListing: t } = e; L(t) } }) }, 171246: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getApplicationSubscriptionPlanId: function() { return o }, getPayableSubscriptionListing: function() { return l }, isApplicationGuildSubscription: function() { return u }, isApplicationUserSubscription: function() { return d }, isListingActiveInGuild: function() { return _ } }); var i = n("512722"), r = n.n(i), s = n("630388"), a = n("981631"); function o(e) { let t = e.items; return r()(1 === t.length, "more than 1 subscription item for application subscription"), t[0].planId } function l(e) { var t; return null === (t = e.subscription_listings) || void 0 === t ? void 0 : t.find(e => e.published && (u(e.sku_flags) || d(e.sku_flags)) && e.subscription_plans[0].price > 0) } function u(e) { return (0, s.hasFlag)(e, a.SKUFlags.APPLICATION_GUILD_SUBSCRIPTION) } function d(e) { return (0, s.hasFlag)(e, a.SKUFlags.APPLICATION_USER_SUBSCRIPTION) } function _(e, t, n) { return e.subscription_plans[0].sku_id === t.skuId && (u(e.sku_flags) ? null != n && t.guildId === n && n !== a.ME : !!d(e.sku_flags) && null == t.guildId) } }, 359610: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("393586"), s = n("481060"), a = n("795548"); function o(e) { let { children: t, className: n, size: o = s.Button.Sizes.SMALL, ...l } = e; return (0, i.jsx)(s.Button, { ...l, color: s.Button.Colors.BRAND, size: o, className: n, children: (0, i.jsxs)("div", { className: a.button, children: [(0, i.jsx)(r.ShopIcon, { color: "white", height: 16, width: 16 }), t] }) }) } }, 245561: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SubscriptionListingBenefits: function() { return d }, default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("596454"), l = n("889989"), u = n("464656"); function d(e) { let t, { applicationId: n, storeListingBenefits: r, skuBenefits: a, className: o } = e; return null != r ? t = r.map(e => (0, i.jsx)(c, { applicationId: n, benefit: e, className: s()(u.__invalid_benefit, o) }, e.id)) : null != a && (t = a.map((e, t) => (0, i.jsx)(_, { benefit: e, className: s()(u.__invalid_benefit, o) }, t))), (0, i.jsx)(i.Fragment, { children: t }) } function _(e) { let { benefit: t, className: n, emojiContainerClassName: r, showsDescription: l = !0, nameTextVariant: d = "text-md/medium", nameTextColor: _ = "header-primary" } = e; return (0, i.jsxs)("div", { className: s()(u.container, n), children: [null != t.emoji && (0, i.jsx)("div", { className: s()(u.emojiContainer, r), children: (0, i.jsx)(o.default, { emojiId: t.emoji.id, emojiName: t.emoji.name, animated: t.emoji.animated }) }), (0, i.jsxs)("div", { className: u.infoContainer, children: [(0, i.jsx)(a.Text, { variant: d, color: _, className: u.name, children: t.name }), l && (0, i.jsx)(a.Text, { color: "interactive-normal", variant: "text-sm/normal", children: t.description })] })] }) } function c(e) { let { applicationId: t, benefit: n, className: r, emojiContainerClassName: o, showsDescription: d = !0, nameTextVariant: _ = "text-md/medium", nameTextColor: c = "header-primary" } = e; return (0, i.jsxs)("div", { className: s()(u.container, r), children: [(0, i.jsx)("div", { className: s()(u.emojiContainer, o), children: (0, l.getBenefitIcon)(t, n.icon) }), (0, i.jsxs)("div", { className: u.infoContainer, children: [(0, i.jsx)(a.Text, { variant: _, color: c, className: u.name, children: n.name }), d && (0, i.jsx)(a.Text, { color: "interactive-normal", variant: "text-sm/normal", children: n.description })] })] }) } }, 886491: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StorefrontButton: function() { return d } }); var i = n("735250"); n("470079"); var r = n("555730"), s = n("481060"), a = n("682864"), o = n("359610"), l = n("689938"), u = n("502249"); function d(e) { return (0, i.jsx)(o.default, { size: s.ButtonSizes.MEDIUM, ...e, children: (0, i.jsxs)("div", { className: u.storeBtn, children: [(0, i.jsx)(r.ShopSparkleIcon, { width: 16, height: 16, color: "#fff" }), (0, i.jsx)(a.default, { size: 4, horizontal: !0 }), l.default.Messages.STOREFRONT] }) }) } }, 889989: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getBenefitIcon: function() { return o } }); var i = n("735250"); n("470079"); var r = n("187753"), s = n("596454"), a = n("73346"); function o(e, t) { if (null != t) switch (t.type) { case r.IconType.STORE_ASSET: let n = (0, a.getAssetURL)(e, t.store_asset_id); return (0, i.jsx)("img", { src: n, alt: "", className: "emoji" }); case r.IconType.EMOJI: return (0, i.jsx)(s.default, { emojiName: t.emoji }) } } }, 643266: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("493683"), r = n("592125"), s = n("176505"); function a(e) { if (e !== s.FAKE_PLACEHOLDER_PRIVATE_CHANNEL_ID) return null; let t = r.default.getChannel(e); return null == t ? null : i.default.ensurePrivateChannel(t.recipients) } }, 943209: function(e, t, n) { "use strict"; n.r(t), n.d(t, { deletePrivateChannelIntegration: function() { return d }, fetchApplicationsShelf: function() { return l }, fetchPrivateChannelIntegrations: function() { return u } }), n("411104"), n("729594"); var i = n("261470"); n("243814"); var r = n("544891"), s = n("570140"); n("591759"); var a = n("628566"), o = n("981631"); n("689938"); function l() { a.default.getApplicationsShelfFetchState() === a.FetchState.NOT_FETCHED && (s.default.dispatch({ type: "APPLICATIONS_SHELF_FETCH_START" }), r.HTTP.get(o.Endpoints.APPLICATIONS_SHELF).then(e => s.default.dispatch({ type: "APPLICATIONS_SHELF_FETCH_SUCCESS", applications: e.body.applications })).catch(e => s.default.dispatch({ type: "APPLICATIONS_SHELF_FETCH_FAIL" }))) } function u(e) { let t = new i.default(1e3, 5e3); s.default.dispatch({ type: "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START", channelId: e }), r.HTTP.get({ url: o.Endpoints.CHANNEL_INTEGRATIONS(e), backoff: t, retries: 10 }).then(t => { s.default.dispatch({ type: "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS", channelId: e, integrations: t.body }) }).catch(() => { s.default.dispatch({ type: "FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL", channelId: e }) }) } function d(e, t) { return r.HTTP.del(o.Endpoints.CHANNEL_INTEGRATION(e, t)).then(e => { var t; if (null === (t = e.body) || void 0 === t ? void 0 : t.message) throw Error(e.body.message) }) } }, 556084: function(e, t, n) { "use strict"; n.r(t), n.d(t, { usePrivateChannelIntegrationState: function() { return u } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("512751"), a = n("57132"), o = n("943209"), l = n("628566"); function u(e) { let { channelId: t } = e; (0, a.useInMainTabsExperiment)(); let n = (0, s.useShowApplicationInGDM)(t), { installedIntegrations: u, applicationsShelf: d, integrationsFetchState: _, applicationsShelfFetchState: c } = (0, r.useStateFromStoresObject)([l.default], () => ({ installedIntegrations: l.default.getIntegrations(t), applicationsShelf: l.default.getApplicationsShelf(), integrationsFetchState: l.default.getIntegrationsFetchState(t), applicationsShelfFetchState: l.default.getApplicationsShelfFetchState() })); i.useEffect(() => { n && ((_ === l.FetchState.NOT_FETCHED || _ === l.FetchState.FETCH_FAILED) && (0, o.fetchPrivateChannelIntegrations)(t), (c === l.FetchState.NOT_FETCHED || c === l.FetchState.FETCH_FAILED) && (0, o.fetchApplicationsShelf)()) }, [n, t, _, c]); let E = new Set(u.map(e => e.application.id)); return { installedIntegrations: u, availableApplications: d.filter(e => !E.has(e.id)), applicationsShelf: d, fetched: _ !== l.FetchState.NOT_FETCHED && _ !== l.FetchState.FETCHING && c !== l.FetchState.NOT_FETCHED && c !== l.FetchState.FETCHING, appsInGDMEnabled: n } } }, 628566: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FetchState: function() { return i } }), n("47120"), n("653041"); var i, r, s, a, o, l, u = n("442837"), d = n("570140"), _ = n("973616"), c = n("911955"); (s = i || (i = {}))[s.NOT_FETCHED = 0] = "NOT_FETCHED", s[s.FETCHING = 1] = "FETCHING", s[s.FETCHED = 2] = "FETCHED", s[s.FETCH_FAILED = 3] = "FETCH_FAILED"; let E = new Map, I = new Map, T = [], f = 0, S = []; class h extends(r = u.default.Store) { getIntegrations(e) { var t; return null !== (t = E.get(e)) && void 0 !== t ? t : S } getIntegration(e, t) { var n; return null === (n = E.get(e)) || void 0 === n ? void 0 : n.find(e => e.application.id === t) } getAllIntegrations() { return E } getIntegrationsFetchState(e) { var t; return null !== (t = I.get(e)) && void 0 !== t ? t : 0 } getApplicationsShelfFetchState() { return f } getApplicationsShelf() { return T } } function A(e) { return e.sort((e, t) => e.application.name.localeCompare(t.application.name)) } l = "PrivateChannelIntegrationStore", (o = "displayName") in(a = h) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l; let m = new h(d.default, { LOGOUT() { E.clear() }, CONNECTION_OPEN() { E.clear(), I.clear() }, CHANNEL_SELECT(e) { let { channelId: t } = e; if (null == t || 3 !== I.get(t)) return !1; I.set(t, 0) }, APPLICATIONS_SHELF_FETCH_START() { f = 1 }, APPLICATIONS_SHELF_FETCH_SUCCESS(e) { let { applications: t } = e; T = t.map(_.default.createFromServer).sort((e, t) => e.name.localeCompare(t.name)), f = 2 }, APPLICATIONS_SHELF_FETCH_FAIL() { f = 3 }, FETCH_PRIVATE_CHANNEL_INTEGRATIONS_START(e) { let { channelId: t } = e; E.set(t, null), I.set(t, 1) }, FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS(e) { let { channelId: t, integrations: n } = e; E.set(t, A(n.map(c.createPrivateChannelIntegration))), I.set(t, 2) }, FETCH_PRIVATE_CHANNEL_INTEGRATIONS_FAIL(e) { let { channelId: t } = e; I.set(t, 3) }, PRIVATE_CHANNEL_INTEGRATION_CREATE(e) { let { integration: t } = e, n = E.get(t.channel_id); if (null == n) return !1; E.set(t.channel_id, A([...n, (0, c.createPrivateChannelIntegration)(t)])) }, PRIVATE_CHANNEL_INTEGRATION_UPDATE(e) { let { integration: t } = e, n = E.get(t.channel_id); if (null == n) return !1; let i = (0, c.createPrivateChannelIntegration)(t), r = n.findIndex(e => e.application.id === i.application.id), s = [...n]; - 1 === r ? s.push(i) : s[r] = i, E.set(i.channel_id, A(s)) }, PRIVATE_CHANNEL_INTEGRATION_DELETE(e) { let { channelId: t, applicationId: n } = e, i = E.get(t); if (null == i) return !1; E.set(t, i.filter(e => e.application.id !== n)) }, CHANNEL_DELETE(e) { let { channel: t } = e; return E.delete(t.id) } }); t.default = m }, 911955: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createPrivateChannelIntegration: function() { return r } }); var i = n("973616"); function r(e) { return { ...e, application: i.default.createFromServer(e.application) } } }, 233440: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldDisableUserPresenceInChannel: function() { return r } }); var i = n("592125"); function r(e, t) { let n = i.default.getChannel(t); return null != n && e.bot && n.isPrivate() && null == n.rawRecipients.find(t => t.id === e.id) } }, 150039: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getProfilePreviewField: function() { return m }, setNewPendingAvatar: function() { return S }, setNewPendingAvatarDecoration: function() { return h }, setNewPendingProfileEffectId: function() { return A }, setNewPendingUserBio: function() { return f }, showRemoveAvatar: function() { return N }, showRemoveBanner: function() { return p }, useAvatarsWithGuilds: function() { return c }, useGlobalOrGuildIdentityPendingProfileEffect: function() { return T }, useGlobalOrGuildIdentityProfileEffect: function() { return I }, useGuildMemberAndUserPendingAvatarDecoration: function() { return E } }), n("653041"); var i = n("470079"), r = n("442837"), s = n("809206"), a = n("18438"), o = n("778825"), l = n("350327"), u = n("621853"), d = n("271383"), _ = n("25990"); function c(e) { return i.useMemo(() => { let t = d.default.getMutableAllGuildsAndMembers(), n = {}; for (let r in t) { var i; let s = null === (i = t[r][e]) || void 0 === i ? void 0 : i.avatar; null != s && (null == n[s] && (n[s] = []), n[s].push(r)) } return null != n ? Object.entries(n).map(e => e[1][0]) : [] }, [e]) } function E(e, t) { let n = (0, r.useStateFromStores)([d.default], () => void 0 === t ? null : d.default.getMember(t.id, e.id)), { pendingUserAvatarDecoration: i, userErrors: s } = (0, r.useStateFromStoresObject)([_.default], () => ({ pendingUserAvatarDecoration: _.default.getPendingAvatarDecoration(), userErrors: _.default.getErrors().avatarDecoration })), { pendingGuildAvatarDecoration: a, guildErrors: l } = (0, r.useStateFromStoresObject)([o.default], () => ({ pendingGuildAvatarDecoration: o.default.getPendingAvatarDecoration(), guildErrors: o.default.getErrors().avatarDecoration })); return { userAvatarDecoration: e.avatarDecoration, guildAvatarDecoration: null == n ? void 0 : n.avatarDecoration, pendingAvatarDecoration: null != t ? a : i, pendingErrors: null != t ? l : s } } function I(e, t) { return (0, r.useStateFromStores)([u.default], () => { var n, i; return null == t ? null === (n = u.default.getUserProfile(e.id)) || void 0 === n ? void 0 : n.profileEffectId : null === (i = u.default.getGuildMemberProfile(e.id, t.id)) || void 0 === i ? void 0 : i.profileEffectId }, [e, t]) } function T(e) { return (0, r.useStateFromStoresObject)([_.default, o.default], () => null == e ? { pendingProfileEffectId: _.default.getPendingProfileEffectId(), errors: _.default.getErrors().profileEffect } : { pendingProfileEffectId: o.default.getPendingProfileEffectId(), errors: o.default.getErrors().profileEffect }, [e]) } function f(e, t) { (0, l.setPendingBio)(e === t ? void 0 : e) } function S(e, t) { (0, s.setPendingAvatar)(e === t ? void 0 : e) } function h(e, t) { (null != e ? a.setPendingAvatarDecoration : s.setPendingAvatarDecoration)(t) } function A(e, t, n) { if (e === t) { null == n ? (0, s.setPendingProfileEffectId)(void 0) : (0, a.setPendingProfileEffectId)(void 0); return } null == n ? (0, s.setPendingProfileEffectId)(e) : (0, a.setPendingProfileEffectId)(e) } function m(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; if (null != e) return "" === e ? { value: i ? n : null, isUsingGuildValue: !1 } : { value: e, isUsingGuildValue: i }; return null != t && "" !== t ? { value: t, isUsingGuildValue: !0 } : { value: n, isUsingGuildValue: !1 } } function N(e, t) { return void 0 === e ? null != t : null != e } function p(e, t) { return void 0 === e ? null != t : null != e } }, 300284: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("470079"), r = n("230711"), s = n("906732"), a = n("18438"); n("778825"); var o = n("981631"), l = n("526761"); function u() { let { guild: e, scrollPosition: t, analyticsLocation: n, analyticsLocations: u, openWithoutBackstack: d } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, { analyticsLocations: _ } = (0, s.default)(); return (0, i.useCallback)(() => { null != e && (0, a.initGuildIdentitySettings)(e, null != u ? u : _), r.default.open(o.UserSettingsSections.PROFILE_CUSTOMIZATION, null != e ? l.ProfileCustomizationSubsection.GUILD : l.ProfileCustomizationSubsection.USER_PROFILE, { scrollPosition: t, analyticsLocation: n, analyticsLocations: u, openWithoutBackstack: d }) }, [e, t, n, u, d, _]) } }, 587446: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("466111"), l = n("689938"), u = n("243172"); function d(e) { let { text: t = l.default.Messages.PROFILE_CUSTOMIZATION_NITRO_ICON_TOOLTIP, className: n } = e; return (0, i.jsx)(a.Tooltip, { text: t, children: e => (0, i.jsx)(a.Clickable, { ...e, children: (0, i.jsx)(o.default, { className: s()(u.nitroWheel, n) }) }) }) } }, 661543: function(e, t, n) { "use strict"; n.r(t), n.d(t, { maybeOpenProfilePreviewModal: function() { return r } }); var i = n("570140"); function r(e) { let { imageSrc: t, file: n, uploadType: r, guildId: s, isTryItOutFlow: a = !1 } = e; i.default.dispatch({ type: "PROFILE_CUSTOMIZATION_OPEN_PREVIEW_MODAL", imageSrc: t, file: n, uploadType: r, guildId: s, isTryItOutFlow: a }) } }, 200299: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_IMAGE_UPLOAD_FILESIZE_BYTES: function() { return i } }); let i = 10485760 }, 654904: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPreviewAvatar: function() { return T }, getPreviewDisplayName: function() { return S }, getPreviewNickname: function() { return f }, handleOpenSelectImageModal: function() { return E }, isColorDark: function() { return h }, showFileSizeErrorModal: function() { return I } }); var i = n("735250"); n("470079"); var r = n("866442"), s = n("481060"), a = n("531643"), o = n("768581"), l = n("403182"), u = n("661543"), d = n("200299"), _ = n("486324"), c = n("689938"); function E(e, t, r, a) { (0, s.openModalLazy)(async () => { let { default: s } = await Promise.all([n.e("99387"), n.e("89289")]).then(n.bind(n, "28130")); return n => (0, i.jsx)(s, { filters: a, maxFileSizeBytes: d.MAX_IMAGE_UPLOAD_FILESIZE_BYTES, imageSpecifications: e === _.UploadTypes.BANNER && c.default.Messages.USER_SETTINGS_PROFILE_THEMES_BANNER_MODAL_SPECS, onComplete: (n, i) => (0, u.maybeOpenProfilePreviewModal)({ imageSrc: n, file: i, uploadType: e, guildId: t, isTryItOutFlow: r }), uploadType: e, showUpsellHeader: !0, ...n }) }) } function I() { (0, a.openUploadError)({ title: c.default.Messages.UPLOAD_AREA_TOO_LARGE_TITLE, help: c.default.Messages.UPLOAD_AREA_TOO_LARGE_HELP.format({ maxSize: (0, l.sizeString)(d.MAX_IMAGE_UPLOAD_FILESIZE_BYTES) }) }) } function T(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}; if (null != e) return e; let { size: r = 80, canAnimate: s = !0 } = i, a = null === e; return a && null == t ? o.default.getDefaultAvatarURL(n.id, n.discriminator) : a || (null == t ? void 0 : t.avatar) == null ? n.getAvatarURL(void 0, r, s) : n.getAvatarURL(null == t ? void 0 : t.guildId, r, s) } function f(e, t) { return "" === e ? null : null != e ? e : t } function S(e, t) { return "" === e ? null : null != e ? e : t } function h(e) { return (null != e ? (0, r.getDarkness)(e) : 1) > .25 } }, 365943: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchUserProfileEffects: function() { return u } }); var i = n("544891"), r = n("570140"), s = n("881052"), a = n("25251"), o = n("981631"); let l = e => { let { sku_id: t, ...n } = e; return { id: n.id, skuId: t, config: { ...n, skuId: t } } }, u = async function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (!(!e && (a.default.hasFetched() || a.default.isFetching))) { if (a.default.canFetch()) { r.default.dispatch({ type: "USER_PROFILE_EFFECTS_FETCH" }); try { let { body: e } = await i.HTTP.get(o.Endpoints.USER_PROFILE_EFFECTS), t = (null == e ? void 0 : e.profile_effect_configs).map(l); r.default.dispatch({ type: "USER_PROFILE_EFFECTS_FETCH_SUCCESS", profileEffects: t }) } catch (e) { throw r.default.dispatch({ type: "USER_PROFILE_EFFECTS_FETCH_FAILURE", error: e }), new s.APIError(e) } } } } }, 25251: function(e, t, n) { "use strict"; let i, r; n.r(t); var s, a, o, l, u = n("392711"), d = n("442837"), _ = n("570140"), c = n("358085"), E = n("729436"); let I = [], T = !1; let f = I, S = {}, h = null; let A = 0, m = e => { f = (0, u.cloneDeep)(e); let t = {}; f.forEach(e => { t[e.id] = (0, c.isAndroid)() ? (0, E.applyPatches)(e) : e }), S = t }; class N extends(l = d.default.Store) { get isFetching() { return T } get fetchError() { return i } get profileEffects() { return f } get tryItOutId() { return h } canFetch() { return null == r || Date.now() >= r } hasFetched() { return null != r && null == i } getProfileEffectById(e) { return null != e ? S[e] : void 0 } } o = "ProfileEffectStore", (a = "displayName") in(s = N) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new N(_.default, { USER_PROFILE_EFFECTS_FETCH: () => { T = !0 }, USER_PROFILE_EFFECTS_FETCH_SUCCESS: e => { let { profileEffects: t } = e; T = !1, i = void 0, r = Date.now() + 3e5, A = 0, m(0 === t.length ? I : t) }, USER_PROFILE_EFFECTS_FETCH_FAILURE: e => { let { error: t } = e; T = !1, i = t, r = Date.now() + Math.min(6e4 * 2 ** A, 36e5), ++A, m(I) }, PROFILE_EFFECTS_SET_TRY_IT_OUT: e => { let { id: t } = e; h = t }, LOGOUT: e => { T = !1, m(I), h = null } }) }, 119837: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ENTRY_DELAY: function() { return i }, RESET: function() { return r } }); let i = 500, r = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" }, 802433: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { AnimationTypes: function() { return r }, RestartMethod: function() { return i } }), (s = i || (i = {})).FromLoop = "fromLoop", s.FromStart = "fromStart", (a = r || (r = {}))[a.UNSPECIFIED = 0] = "UNSPECIFIED", a[a.PERSISTENT = 1] = "PERSISTENT", a[a.INTERMITTENT = 2] = "INTERMITTENT" }, 658312: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"); let r = 1e3 / 24; t.default = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : r, n = i.useRef(0), s = i.useRef(), a = i.useRef(!0), o = i.useCallback(() => { a.current = !1, cancelAnimationFrame(n.current) }, []), l = i.useCallback(i => { null == s.current && (s.current = i); let r = i - s.current; r >= t && (s.current = i, e(r)), a.current && (n.current = requestAnimationFrame(l)) }, [e, t]), u = i.useCallback(() => { a.current = !0, s.current = void 0, n.current = requestAnimationFrame(l) }, [l]); return i.useEffect(() => (n.current = requestAnimationFrame(l), () => cancelAnimationFrame(n.current)), []), { stop: o, reset: u, ticking: a } } }, 293335: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"), n("653041"); var i = n("470079"); t.default = (e, t) => { let [n, r] = i.useState(-1), s = i.useRef(-1); return i.useEffect(() => { let t = e.reduce((e, t) => (!e.includes(t.src) && e.push(t.src), e), []); r(t.length), s.current = t.length }, [e, s, r]), i.useEffect(() => { 0 === n && t() }, [n, t]), { pending: n, pendingRef: s, setPending: r } } }, 731896: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useProfileEffectPreset: function() { return o } }); var i = n("470079"), r = n("442837"), s = n("365943"), a = n("25251"); let o = e => { let t = (0, r.useStateFromStores)([a.default], () => a.default.getProfileEffectById(e)), n = null != t; return i.useEffect(() => { null != e && !n && (0, s.fetchUserProfileEffects)(!0) }, [e, n]), t } }, 607789: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"); var i = n("470079"), r = n("442837"), s = n("25251"), a = n("731896"); t.default = e => { let [t, n] = i.useState(e), [o, l] = i.useState(s.default.getProfileEffectById(e)); (0, a.useProfileEffectPreset)(e); let u = (0, r.useStateFromStores)([s.default], () => s.default.profileEffects), d = u.reduce((t, n, i) => (n.id === e && (t = i), t), 0), [, _] = i.useState(d), c = i.useRef(d); return i.useEffect(() => { n(e), l(s.default.getProfileEffectById(e)) }, [e, u]), { increment: () => { let e = (c.current + 1) % u.length; c.current = e, _(e), n(u[e].id), l(u[e]) }, decrement: () => { let e = 0 === c.current ? u.length - 1 : c.current - 1; c.current = e, _(e), n(u[e].id), l(u[e]) }, id: t, preset: o } } }, 729436: function(e, t, n) { "use strict"; n.r(t), n.d(t, { applyPatches: function() { return r }, sortEffectLayers: function() { return i } }); let i = e => e.sort((e, t) => { var n, i; return (null !== (n = e.zIndex) && void 0 !== n ? n : 0) - (null !== (i = t.zIndex) && void 0 !== i ? i : 0) }), r = e => { if ("1228233381897179137" === e.id || "1228234629429985300" === e.id) { var t; (null === (t = e.config.effects) || void 0 === t ? void 0 : t.length) >= 2 && (e.config.effects[1].start = 2832) } return e } }, 680295: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ProfileEffect: function() { return h } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("607070"), u = n("451478"), d = n("119837"), _ = n("802433"), c = n("658312"), E = n("729436"), I = n("710867"), T = n("312904"), f = n("186917"), S = n("935689"); let h = e => { let { bannerAdjustment: t = 0, maxLoops: n, resetOnHover: s = !1, isHovering: o = !1, useOpacityOnHover: l = !0, autoPlay: u = !0, restartMethod: I, urlQueryString: f, profileEffectConfig: h, noBorderRadius: A = !1, introDelay: m = d.ENTRY_DELAY } = e, N = r.useRef(null), [p, O] = r.useState([]); (0, T.default)(h); let [C, R] = r.useState(0), [g, L] = r.useState(0), { accessibilityLabel: v } = h, [D, M] = r.useState(-m), { stop: y, reset: P, ticking: U } = (0, c.default)(e => { M(t => t + e) }); r.useEffect(() => { M(-m), O((0, E.sortEffectLayers)(h.effects)) }, [h]), r.useEffect(() => { let e = 0, t = 1 / 0; p.forEach(n => { let i = n.start + n.duration; i > e && (e = i), n.loop && n.start < t && (t = n.start) }), R(t), L(e) }, [L, p]); let [b, G] = r.useState(!1); return r.useEffect(() => { !0 !== u && !o && (y(), M(0)), !o && b && U.current && (y(), M(0)), s && o && !U.current && (P(), h.animationType === _.AnimationTypes.PERSISTENT ? M(I === _.RestartMethod.FromStart ? 0 : C) : M(0)) }, [o, b, C, s, y, P, U, h.animationType, u, I]), (0, i.jsx)("div", { ref: N, className: a()(S.profileEffects, { [S.hovered]: o && l }), children: (0, i.jsx)("div", { className: A ? S.innerNoRadius : S.inner, children: p.map((e, r) => { var s, a, o, l, c, E, I, T; if (!U.current) { if (h.animationType === _.AnimationTypes.PERSISTENT && null != h.staticFrameSrc && 0 === r && !0 === u) { let { staticFrameSrc: n } = h; return (0, i.jsx)("img", { className: S.effect, style: { top: null !== (c = null === (o = e.position) || void 0 === o ? void 0 : o.y) && void 0 !== c ? c : 0 - t, left: null !== (E = null === (l = e.position) || void 0 === l ? void 0 : l.x) && void 0 !== E ? E : 0 }, src: n, alt: v }, e.src + r) } return (0, i.jsx)("img", { src: d.RESET, alt: v }, e.src + r) } if (D < e.start || !e.loop && D > e.duration + e.start) return (0, i.jsx)("img", { src: d.RESET, alt: v }, e.src + r); if (h.animationType === _.AnimationTypes.PERSISTENT && !b && null != n && D >= g && G(!0), e.loop && void 0 !== e.loopDelay && e.loopDelay > 0) { let t = e.duration + e.loopDelay, s = Math.floor((D - e.start) / t); if (D - e.start - s * t > e.duration) return h.animationType === _.AnimationTypes.INTERMITTENT && !b && null != n && s >= n && G(!0), (0, i.jsx)("img", { src: d.RESET, alt: v }, e.src + r) } return (0, i.jsx)("img", { src: null != f ? "".concat(e.src, "?query=").concat(f) : e.src, className: S.effect, style: { top: (null !== (I = null === (s = e.position) || void 0 === s ? void 0 : s.y) && void 0 !== I ? I : 0) - t, left: null !== (T = null === (a = e.position) || void 0 === a ? void 0 : a.x) && void 0 !== T ? T : 0 }, alt: v }, e.src + r) }) }) }) }, A = e => { let { config: t, useThumbnail: n, bannerAdjustment: r = 0, noBorderRadius: s, isHovering: o = !1, useOpacityOnHover: l = !0 } = e, { reducedMotionSrc: u, thumbnailPreviewSrc: d, accessibilityLabel: _ } = t; return (0, i.jsx)("div", { className: a()(S.profileEffects, { [S.hovered]: o && l }), children: (0, i.jsx)("div", { className: s ? S.innerNoRadius : S.inner, children: (0, i.jsx)("img", { src: n && !o ? d : u, className: S.effect, style: { top: 0 - r }, alt: _ }) }) }) }; t.default = e => { let t = (0, o.useStateFromStores)([u.default], () => u.default.isFocused()), n = (0, o.useStateFromStores)([l.default], () => l.default.useReducedMotion), [s, a] = r.useState(!1), { preset: d } = (0, f.default)(e.profileEffectId, () => a(!1)); return null != d && (t || e.shopPreview || d.config.animationType !== _.AnimationTypes.INTERMITTENT) ? !t && e.shopPreview || !t && d.config.animationType === _.AnimationTypes.PERSISTENT || n || !1 === e.autoPlay && !1 === e.isHovering ? (0, i.jsx)(A, { useThumbnail: e.useThumbnail, config: d.config, bannerAdjustment: e.bannerAdjustment, noBorderRadius: e.noBorderRadius, isHovering: e.isHovering, useOpacityOnHover: e.useOpacityOnHover }) : s ? (0, i.jsx)(h, { profileEffectConfig: d.config, ...e }) : (0, i.jsx)(I.default, { profileEffectConfig: d.config, onReady: () => { a(!0) } }) : null } }, 710867: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("293335"), s = n("935689"); t.default = e => { let { profileEffectConfig: t, onReady: n } = e, { pendingRef: a, setPending: o } = (0, r.default)(t.effects, n); return (0, i.jsx)("div", { className: s.profileEffects, children: (0, i.jsx)("div", { className: s.inner, children: t.effects.map(e => (0, i.jsx)("img", { src: e.src, alt: "Preload Profile Effect Asset", "aria-hidden": !0, style: { opacity: 0, position: "absolute" }, onLoad: () => { o(a.current - 1), a.current = a.current - 1 } }, e.src)) }) }) } }, 312904: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"); let r = e => { e.effects.forEach(e => { let { src: t } = e, n = document.createElement("link"); n.rel = "prefetch", n.href = t, document.body.appendChild(n) }) }; t.default = e => { i.useEffect(() => { r(e) }, [e]) } }, 186917: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"), r = n("580747"), s = n("607789"); t.default = (e, t) => { let n = (0, r.default)("profile_effect_debug_controls"), { id: a, preset: o, increment: l, decrement: u } = (0, s.default)(e); return i.useEffect(() => { if (!n) return; let e = e => { "ArrowUp" === e.key && (l(), e.preventDefault()), "ArrowDown" === e.key && (u(), e.preventDefault()), "r" === e.key && (null == t || t(), e.preventDefault()) }; return window.addEventListener("keydown", e), () => { window.removeEventListener("keydown", e) } }, []), { id: null != a ? a : null, preset: o } } }, 283080: function(e, t, n) { "use strict"; n.r(t), n.d(t, { serializeComponentRenderAverages: function() { return s } }), n("47120"), n("735250"), n("470079"); let i = {}; function r(e, t) { let n = e.length > t ? t : e.length; return e.substring(0, n).padEnd(t, " ") } function s() { if (0 === Object.keys(i).length) return ""; let e = "|".concat(r("id", 20), "|").concat(r("Mounts", 8), "|").concat(r("Mount Mean", 20), "|").concat(r("Updates", 8), "|").concat(r("Update Mean", 20), "|").concat(r("Nested", 8), "|").concat(r("Nested Mean", 20), "|\n"); return "Component Render Stats (microseconds):\n" + e + Object.entries(i).map(e => { let [t, n] = e; return "|".concat(r(t, 20), "|").concat(r(n.mount.count.toString(), 8), "|").concat(r(n.mount.mean.toString(), 20), "|").concat(r(n.update.count.toString(), 8), "|").concat(r(n.update.mean.toString(), 20), "|").concat(r(n.nestedUpdate.count.toString(), 8), "|").concat(r(n.nestedUpdate.mean.toString(), 20), "|\n") }) } }, 580189: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isBlockedByProxyErrorCode: function() { return r } }); var i = n("981631"); function r(e) { var t; return !e.ok && (null === (t = e.body) || void 0 === t ? void 0 : t.code) === i.AbortCodes.BLOCKED_BY_PROXY } }, 135899: function(e, t, n) { "use strict"; n.r(t), n.d(t, { COMMUNITY_UPSELL_MINIMUM_GUILD_SIZE: function() { return E }, CREATE_NEW_CHANNEL_VALUE: function() { return d }, ENABLE_COMMUNITY_FLOW_MODAL_KEY: function() { return I }, EnableCommunityModalSteps: function() { return i }, MODERATOR_PERMISSIONS: function() { return _ }, MODERATOR_PERMISSIONS_FLAG: function() { return c }, PUBLIC_GUILD_ANNOUNCEMENTS_GUILD_ID: function() { return l }, PUBLIC_GUILD_UPDATES_WEBHOOK_USER_ID: function() { return u }, PUBLIC_SUCCESS_MODAL_SEEN_KEY: function() { return o } }), n("47120"); var i, r, s = n("149765"), a = n("981631"); let o = "publicSuccessModalSeen", l = "667560445975986187", u = "669627189624307712", d = "1", _ = [a.Permissions.ADMINISTRATOR, a.Permissions.KICK_MEMBERS, a.Permissions.BAN_MEMBERS, a.Permissions.MANAGE_GUILD, a.Permissions.MANAGE_CHANNELS, a.Permissions.MANAGE_ROLES, a.Permissions.MANAGE_MESSAGES, a.Permissions.MANAGE_GUILD_EXPRESSIONS, a.Permissions.CREATE_GUILD_EXPRESSIONS, a.Permissions.MANAGE_EVENTS, a.Permissions.CREATE_EVENTS, a.Permissions.MODERATE_MEMBERS, a.Permissions.MENTION_EVERYONE], c = s.combine(..._), E = 1e3, I = "Enable Community Modal"; (r = i || (i = {})).SAFETY_CHECK = "safety_check", r.BASICS = "basics", r.FINISH = "finish" }, 245315: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPublicSystemMessageAvatar: function() { return d }, isPublicSystemMessage: function() { return u }, trackEnableCommunityFlow: function() { return _ } }); var i = n("367907"), r = n("368859"), s = n("626135"), a = n("135899"), o = n("981631"), l = n("943702"); function u(e) { return (0, r.default)(e) && e.messageReference.guild_id === a.PUBLIC_GUILD_ANNOUNCEMENTS_GUILD_ID || null != e.author && e.author.id === a.PUBLIC_GUILD_UPDATES_WEBHOOK_USER_ID } function d() { return l } let _ = e => { s.default.track(o.AnalyticEvents.USER_FLOW_TRANSITION, { flow_type: a.ENABLE_COMMUNITY_FLOW_MODAL_KEY, from_step: e.fromStep, to_step: e.toStep, ...(0, i.collectGuildAnalyticsMetadata)(e.guildId) }) } }, 792101: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEVICE_PUSH_VOIP_PROVIDER: function() { return a }, getDevicePushProvider: function() { return o } }); var i, r, s = n("358085"); let a = null; function o() { return (0, s.isAndroid)(), null }(i = r || (r = {})).REMINDER = "reminder", i.TOP_MESSAGE_PUSH = "top_messages_push", i.TRENDING_CONTENT_PUSH = "trending_content_push" }, 895886: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("952265"); function s() { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("98137")]).then(n.bind(n, "397013")); return t => (0, i.jsx)(e, { ...t }) }) } }, 617136: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QuestContentCTA: function() { return r }, getContentProperties: function() { return f }, getQuestContentName: function() { return E }, getQuestStatus: function() { return I }, trackQuestContentClicked: function() { return h }, trackQuestEvent: function() { return S } }); var i, r, s = n("367907"), a = n("857192"), o = n("626135"), l = n("569984"), u = n("497505"), d = n("566078"), _ = n("981631"); let c = Object.keys(u.QuestContent); function E(e) { var t; return null !== (t = c.find(t => u.QuestContent[t] === e)) && void 0 !== t ? t : "" } function I(e) { var t, n, i; return (null === (t = e.userStatus) || void 0 === t ? void 0 : t.claimedAt) != null ? "COMPLETED_CLAIMED" : (null === (n = e.userStatus) || void 0 === n ? void 0 : n.completedAt) != null ? "COMPLETED" : (null === (i = e.userStatus) || void 0 === i ? void 0 : i.enrolledAt) != null ? "ENROLLED" : "NONE" } function T(e) { let t = d.SharedQuestFields.build(e.config); return { quest_id: e.id, game_id: t.application.id, game_name: t.application.name } } function f(e, t) { return { content_id: e, content_name: E(e), content_position: t } } function S(e) { let { questId: t, event: n, properties: i, trackGuildAndChannelMetadata: r = !1 } = e, u = l.default.quests.get(t); if (null != u) { if (a.default.isLoggingAnalyticsEvents && console.info("[Quest] AnalyticsUtils.track", n, { ...T(u), ...i }), !u.preview) { if (r) return s.default.trackWithMetadata(n, { ...T(u), ...i }); o.default.track(n, { ...T(u), ...i }) } } } function h(e) { let { questId: t, questContent: n, questContentCTA: i, questContentPosition: r, trackGuildAndChannelMetadata: s = !1 } = e; S({ questId: t, event: _.AnalyticEvents.QUEST_CONTENT_CLICKED, properties: { ...f(n, r), cta_name: i }, trackGuildAndChannelMetadata: s }) }(i = r || (r = {})).LEARN_MORE = "LEARN_MORE", i.SHOW_REWARD = "SHOW_REWARD", i.CLAIM_REWARD = "CLAIM_REWARD", i.GET_REWARD_CODE = "GET_REWARD_CODE", i.COPY_REWARD_CODE = "COPY_REWARD_CODE", i.ACCEPT_QUEST = "ACCEPT_QUEST", i.COPY_QUEST_URL = "COPY_QUEST_URL", i.TRACK_PROGRESS = "TRACK_PROGRESS", i.OPEN_DISCLOSURE = "OPEN_DISCLOSURE", i.WATCH_STREAM = "WATCH_STREAM", i.REWARD_LEARN_MORE = "REWARD_LEARN_MORE", i.OPEN_GAME_LINK = "OPEN_GAME_LINK", i.OPEN_CONTEXT_MENU = "OPEN_CONTEXT_MENU", i.QUEST_BAR_COPY_LINK = "QUEST_BAR.COPY_LINK", i.CONTEXT_MENU_COPY_LINK = "CONTEXT_MENU.COPY_LINK", i.CONTEXT_MENU_HIDE_CONTENT = "CONTEXT_MENU.HIDE_CONTENT", i.CONTEXT_MENU_OPEN_GAME_LINK = "CONTEXT_MENU.OPEN_GAME_LINK", i.CONTEXT_MENU_OPEN_DISCLOSURE = "CONTEXT_MENU.OPEN_DISCLOSURE", i.CONTEXT_MENU_LEARN_MORE = "CONTEXT_MENU.LEARN_MORE", i.EXPAND = "EXPAND", i.COLLAPSE = "COLLAPSE" }, 272008: function(e, t, n) { "use strict"; n.r(t), n.d(t, { claimQuestReward: function() { return A }, claimQuestRewardCode: function() { return h }, completeQuestPreview: function() { return O }, dismissProgressTrackingFailureNotice: function() { return p }, dismissQuestContent: function() { return N }, enrollInQuest: function() { return S }, fetchCurrentQuests: function() { return T }, fetchQuestRewardCode: function() { return m }, optimisticallyUpdateQuestProgress: function() { return g }, overrideQuestDelivery: function() { return L }, resetQuestDismissibilityStatus: function() { return R }, resetQuestPreviewStatus: function() { return C }, sendHeartbeat: function() { return f } }), n("411104"); var i = n("990547"), r = n("544891"), s = n("570140"), a = n("479531"), o = n("573261"), l = n("617136"), u = n("569984"), d = n("918701"), _ = n("242755"), c = n("566078"), E = n("46140"), I = n("981631"); async function T() { if (!u.default.isFetchingCurrentQuests) { s.default.dispatch({ type: "QUESTS_FETCH_CURRENT_QUESTS_BEGIN" }); try { let e = (await r.HTTP.get({ url: I.Endpoints.QUESTS_CURRENT_QUESTS })).body.quests.filter(e => (0, d.isQuestWithKnownConfigVersion)(e)).map(e => (0, d.questWithUserStatusFromServer)(e)).filter(e => { var t; return (null === (t = e.userStatus) || void 0 === t ? void 0 : t.claimedAt) != null || c.SharedQuestFields.build(e.config).rewardPlatforms.length > 0 }); s.default.dispatch({ type: "QUESTS_FETCH_CURRENT_QUESTS_SUCCESS", quests: e }) } catch (e) { s.default.dispatch({ type: "QUESTS_FETCH_CURRENT_QUESTS_FAILURE", error: new a.default(e) }) } } } async function f(e) { let { questId: t, streamKey: n, terminal: r = !1 } = e; try { var l; let e = await o.default.post({ url: I.Endpoints.QUESTS_HEARTBEAT(t), body: { stream_key: n, terminal: r }, trackedActionData: { event: i.NetworkActionNames.QUEST_HEARTBEAT, properties: { quest_id: t, terminal: r, is_overlay: __OVERLAY__, stack_trace: null !== (l = Error().stack) && void 0 !== l ? l : "", is_playtime_eligible: (0, _.isEligibleForQuestPlaytime)({ location: E.QuestsExperimentLocations.QUESTS_MANAGER }) } } }); s.default.dispatch({ type: "QUESTS_SEND_HEARTBEAT_SUCCESS", userStatus: (0, d.questUserStatusFromServer)(e.body), questId: t, streamKey: n }) } catch (e) { s.default.dispatch({ type: "QUESTS_SEND_HEARTBEAT_FAILURE", error: new a.default(e), questId: t, streamKey: n }) } } async function S(e, t) { if (null != t.questContentCTA && (0, l.trackQuestContentClicked)({ questId: e, questContent: t.questContent, questContentCTA: t.questContentCTA, questContentPosition: t.questContentPosition }), !u.default.isEnrolling(e)) { s.default.dispatch({ type: "QUESTS_ENROLL_BEGIN", questId: e }); try { let n = await r.HTTP.post({ url: I.Endpoints.QUESTS_ENROLL(e), body: { location: t.questContent } }); s.default.dispatch({ type: "QUESTS_ENROLL_SUCCESS", enrolledQuestUserStatus: (0, d.questUserStatusFromServer)(n.body) }) } catch (t) { s.default.dispatch({ type: "QUESTS_ENROLL_FAILURE", questId: e }) } } } async function h(e, t, n) { if (!u.default.isClaimingRewardCode(e)) { s.default.dispatch({ type: "QUESTS_CLAIM_REWARD_CODE_BEGIN", questId: e }); try { let i = await r.HTTP.post({ url: I.Endpoints.QUESTS_REWARD_CODE(e), body: { platform: t, location: n } }); s.default.dispatch({ type: "QUESTS_CLAIM_REWARD_CODE_SUCCESS", questId: e, rewardCode: (0, d.questsRewardCodeFromServer)(i.body) }) } catch (t) { throw s.default.dispatch({ type: "QUESTS_CLAIM_REWARD_CODE_FAILURE", error: new a.default(t), questId: e }), t } } } async function A(e, t, n) { if (!u.default.isClaimingReward(e)) { s.default.dispatch({ type: "QUESTS_CLAIM_REWARD_BEGIN", questId: e }); try { let i = await r.HTTP.post({ url: I.Endpoints.QUESTS_CLAIM_REWARD(e), body: { platform: t, location: n } }), a = (0, d.questsEntitlementsFromServer)(i.body); 0 === a.errors.length ? s.default.dispatch({ type: "QUESTS_CLAIM_REWARD_SUCCESS", questId: e, entitlements: a }) : s.default.dispatch({ type: "QUESTS_CLAIM_REWARD_FAILURE", error: a.errors, questId: e }) } catch (t) { throw s.default.dispatch({ type: "QUESTS_CLAIM_REWARD_FAILURE", error: new a.default(t), questId: e }), t } } } async function m(e) { if (!u.default.isFetchingRewardCode(e)) { s.default.dispatch({ type: "QUESTS_FETCH_REWARD_CODE_BEGIN", questId: e }); try { let t = await r.HTTP.get({ url: I.Endpoints.QUESTS_REWARD_CODE(e) }); s.default.dispatch({ type: "QUESTS_FETCH_REWARD_CODE_SUCCESS", questId: e, rewardCode: (0, d.questsRewardCodeFromServer)(t.body) }) } catch (t) { throw s.default.dispatch({ type: "QUESTS_FETCH_REWARD_CODE_FAILURE", error: new a.default(t), questId: e }), t } } } async function N(e, t) { let n = u.default.isDismissingContent(e), i = (0, d.isDismissible)(t); if (!n && i) { s.default.dispatch({ type: "QUESTS_DISMISS_CONTENT_BEGIN", questId: e, content: t }); try { let n = await r.HTTP.post({ url: I.Endpoints.QUESTS_DISMISS_CONTENT(e, t), body: {} }); s.default.dispatch({ type: "QUESTS_DISMISS_CONTENT_SUCCESS", dismissedQuestUserStatus: (0, d.questUserStatusFromServer)(n.body) }) } catch (t) { s.default.dispatch({ type: "QUESTS_DISMISS_CONTENT_FAILURE", error: new a.default(t), questId: e }) } } } function p(e) { s.default.dispatch({ type: "QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE", streamKey: e }) } async function O(e) { try { let t = await r.HTTP.post({ url: I.Endpoints.QUESTS_PREVIEW_COMPLETE(e), body: {} }); s.default.dispatch({ type: "QUESTS_PREVIEW_UPDATE_SUCCESS", previewQuestUserStatus: (0, d.questUserStatusFromServer)(t.body) }) } catch (t) { s.default.dispatch({ type: "QUESTS_PREVIEW_UPDATE_FAILURE", error: new a.default(t), questId: e }) } } async function C(e) { try { let t = await r.HTTP.del({ url: I.Endpoints.QUESTS_PREVIEW_STATUS(e), body: {} }); s.default.dispatch({ type: "QUESTS_PREVIEW_UPDATE_SUCCESS", previewQuestUserStatus: (0, d.questUserStatusFromServer)(t.body) }) } catch (t) { s.default.dispatch({ type: "QUESTS_PREVIEW_UPDATE_FAILURE", error: new a.default(t), questId: e }) } } async function R(e) { try { let t = await r.HTTP.del({ url: I.Endpoints.QUESTS_PREVIEW_DISMISSIBILITY(e), body: {} }); s.default.dispatch({ type: "QUESTS_PREVIEW_UPDATE_SUCCESS", previewQuestUserStatus: (0, d.questUserStatusFromServer)(t.body) }) } catch (t) { s.default.dispatch({ type: "QUESTS_PREVIEW_UPDATE_FAILURE", error: new a.default(t), questId: e }) } } function g(e) { s.default.dispatch({ type: "QUESTS_OPTIMISTIC_PROGRESS_UPDATE", userStatus: e }) } function L(e) { s.default.dispatch({ type: "QUESTS_DELIVERY_OVERRIDE", questId: e }) } }, 46140: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CONSECUTIVE_HEARTBEAT_PERIOD_MS: function() { return u }, DismissibleQuestContentFlags: function() { return o.DismissibleQuestContentFlags }, QuestVariants: function() { return l.QuestVariants }, QuestsExperimentLocations: function() { return r } }); var i, r, s = n("758846"), a = n("70956"), o = n("438954"), l = n("670081"); (i = r || (r = {})).ACTIVITY_PANEL = "quests_bar_activity_panel", i.QUESTS_MANAGER = "quests_manager", i.USER_SETTINGS_GIFT_INVENTORY = "user_settings_gift_inventory", i.USE_QUESTS = "use_quests", i.STREAM_SOURCE_SELECT = "stream_source_select", i.MEMBERS_LIST = "members_list", i.QUESTS_BAR = "quests_bar", i.REWARD_CODE_MODAL = "reward_code_modal", i.QUEST_PREVIEW_TOOL = "quest_preview_tool", i.QUESTS_CARD = "quests_card", i.QUESTS_STORE = "quests_store", i.QUEST_CHANNEL_CALL_HEADER = "quests_channel_call_header", i.QUEST_HOME_DESKTOP = "quest_home_desktop", i.QUEST_HOME_MOBILE = "quest_home_mobile", i.QUEST_PROGRESS_BAR = "quest_progress_bar", i.EMBED_MOBILE = "embed_mobile"; let u = a.default.Millis.MINUTE * s.Quests.ConsecutiveHeartbeatPeriodMinutes }, 113434: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QuestFilters: function() { return r }, useDismissNewQuestBadge: function() { return M }, useExpiredQuestsMap: function() { return R }, useFilteredQuests: function() { return C }, useIsQuestExpired: function() { return g }, useQuestCollectibles: function() { return P }, useQuestFormattedDate: function() { return L }, useQuestFromActivities: function() { return y }, useQuestInstructionTitle: function() { return v }, useQuestPreviewActions: function() { return U }, useQuests: function() { return p }, useQuestsForSettingsBadge: function() { return D } }), n("47120"), n("653041"); var i, r, s, a, o = n("470079"), l = n("846519"), u = n("442837"), d = n("583434"), _ = n("706454"), c = n("272008"), E = n("569984"), I = n("497505"), T = n("918701"), f = n("242755"), S = n("977156"), h = n("31055"), A = n("566078"), m = n("46140"), N = n("689938"); function p() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : { fetchPolicy: "cache-only" }, [t, n] = o.useState(!1), i = (0, u.useStateFromStoresArray)([E.default], () => [...E.default.quests.values()]), { isFetchingCurrentQuests: r, lastFetchedCurrentQuests: s } = (0, u.useStateFromStoresObject)([E.default], () => ({ isFetchingCurrentQuests: E.default.isFetchingCurrentQuests, lastFetchedCurrentQuests: E.default.lastFetchedCurrentQuests })), a = (0, S.getIsEligibleForQuests)({ location: m.QuestsExperimentLocations.USE_QUESTS }); return o.useEffect(() => { if ("cache-only" !== e.fetchPolicy)("cache-and-network" === e.fetchPolicy || "cache-or-network" === e.fetchPolicy && 0 === s) && a && !t && !r && (n(!0), (0, c.fetchCurrentQuests)()) }, [e.fetchPolicy, a, t, r, s]), { quests: i, isFetchingCurrentQuests: r } } function O(e, t, n) { return e.localeCompare(t) * (0 === n ? -1 : 1) }(s = i || (i = {}))[s.DESC = 0] = "DESC", s[s.ASC = 1] = "ASC"; function C(e) { let { quests: t, isFetchingCurrentQuests: n } = p({ fetchPolicy: "cache-and-network" }), i = new Map(t.map(e => [e.id, e])), r = function(e) { let t = o.useMemo(() => e.filter(e => { var t; return !((null === (t = e.userStatus) || void 0 === t ? void 0 : t.claimedAt) != null) }), [e]), n = o.useRef([]); return o.useMemo(() => { if (0 === t.length) return []; if (n.current.length > 0) return n.current; let e = t.sort((e, t) => { var n, i, r, s, a, o; let l = !(0, T.isQuestExpired)(e), u = !(0, T.isQuestExpired)(t), d = (0, T.isTargetedForContent)(e, I.QuestContent.QUEST_BAR) || (0, T.isTargetedForContent)(e, I.QuestContent.QUEST_BAR_V2), _ = (0, T.isTargetedForContent)(t, I.QuestContent.QUEST_BAR) || (0, T.isTargetedForContent)(t, I.QuestContent.QUEST_BAR_V2), c = (0, T.isTargetedForContent)(e, I.QuestContent.GIFT_INVENTORY_FOR_YOU), E = (0, T.isTargetedForContent)(t, I.QuestContent.GIFT_INVENTORY_FOR_YOU), f = (null === (n = e.userStatus) || void 0 === n ? void 0 : n.enrolledAt) != null, S = (null === (i = t.userStatus) || void 0 === i ? void 0 : i.enrolledAt) != null; return l !== u ? l ? -1 : 1 : d !== _ && l && u ? d ? -1 : 1 : c !== E ? c ? -1 : 1 : f !== S ? f ? -1 : 1 : l && u ? O(null === (a = e.config) || void 0 === a ? void 0 : a.expiresAt, null === (o = t.config) || void 0 === o ? void 0 : o.expiresAt, 1) : O(null === (r = e.config) || void 0 === r ? void 0 : r.expiresAt, null === (s = t.config) || void 0 === s ? void 0 : s.expiresAt, 0) }).map(e => e.id); return n.current = e, e }, [t]) }(t), s = function(e) { let t = o.useMemo(() => e.filter(e => { var t, n; let i = (null === (t = e.userStatus) || void 0 === t ? void 0 : t.completedAt) != null, r = (null === (n = e.userStatus) || void 0 === n ? void 0 : n.claimedAt) != null; return i && r }), [e]), n = o.useRef([]); return o.useMemo(() => { if (0 === t.length) return []; if (n.current.length > 0) return n.current; let e = t.sort((e, t) => { var n, i; let r = (null === (n = e.userStatus) || void 0 === n ? void 0 : n.claimedAt) == null; if (r !== ((null === (i = t.userStatus) || void 0 === i ? void 0 : i.claimedAt) == null)) return r ? -1 : 1; let s = A.SharedQuestFields.build(e.config).rewardsExpireAt; return O(s, A.SharedQuestFields.build(t.config).rewardsExpireAt, 0) }).map(e => e.id); return n.current = e, e }, [t]) }(t), a = [], l = []; for (let t of a = "unclaimed" === e ? r : s) { let e = i.get(t); null != e && l.push(e) } return { quests: l, isFetchingCurrentQuests: n } } function R() { let { quests: e, isFetchingCurrentQuests: t } = p({ fetchPolicy: "cache-only" }), [n, i] = o.useState(() => new Map(e.map(e => [e.id, (0, T.isQuestExpired)(e)]))); return o.useEffect(() => { if (t) return; let n = []; for (let t of e) if (null == t || (0, T.isQuestExpired)(t)) null != t && (0, T.isQuestExpired)(t) && i(e => e.has(t.id) ? e : new Map(e).set(t.id, !0)); else { let e = new l.Timeout, r = () => { let s = Date.parse(t.config.expiresAt) - Date.now(); e.start(s, () => { (0, T.isQuestExpired)(t) ? i(e => new Map(e).set(t.id, !0)): r() }), n.push(e) }; r() } return () => { for (let e of n) e.stop() } }, [e, t]), n } function g(e) { let t = R(); return o.useMemo(() => { var n; return null != e && null !== (n = t.get(e.id)) && void 0 !== n && n }, [e, t]) } function L(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { dateStyle: "short" }, n = (0, u.useStateFromStores)([_.default], () => _.default.locale); return o.useMemo(() => null == e ? "" : new Date(e).toLocaleDateString(n, t), [e, t, n]) } function v(e, t) { let n = (0, f.useIsEligibleForQuestPlaytime)({ location: t }) && (0, T.hasPlayOnDesktopTask)({ quest: e }) ? N.default.Messages.QUESTS_PLAY_TASK : N.default.Messages.QUESTS_STREAM_TASK, i = (0, T.getQuestTaskDetails)({ quest: e, location: t }).targetMinutes; return n.format({ minutes: i, gameTitle: e.config.messages.gameTitle }) } function D() { let { quests: e, isFetchingCurrentQuests: t } = p({ fetchPolicy: "cache-or-network" }), n = R(); return o.useMemo(() => { let i = []; if (t || 0 === e.length) return i; for (let t of e) { var r; if (!(0, T.includesTarget)(t, I.QuestContent.GIFT_INVENTORY_SETTINGS_BADGE) || null !== (r = n.get(t.id)) && void 0 !== r && r) continue; if ((null == t ? void 0 : t.userStatus) == null) { i.push(t); continue } let e = null != t.userStatus.claimedAt, s = (0, T.isDismissed)(t.userStatus, I.QuestContent.GIFT_INVENTORY_SETTINGS_BADGE); if (!e && !s) { i.push(t); continue } } return i }, [e, n, t]) } function M() { let e = D(); o.useEffect(() => { for (let t of e)(0, c.dismissQuestContent)(t.id, I.QuestContent.GIFT_INVENTORY_SETTINGS_BADGE) }, [e]) } function y(e) { let t = (0, h.useIsEligibleForMembersListQuestEntrypoint)({ location: m.QuestsExperimentLocations.MEMBERS_LIST }), n = (0, u.useStateFromStores)([E.default], () => t ? E.default.quests : null), i = o.useMemo(() => (0, T.getQuestsFromActivities)(n, e), [e, n]); return g(i) ? null : i } function P(e) { var t; let n = (0, T.hasCollectiblesQuestReward)(e), { product: i, isFetching: r } = (0, d.useFetchCollectiblesProduct)(A.SharedQuestFields.build(e).defaultReward.skuId); return { hasQuestCollectibles: n, avatarDecoration: null == i ? void 0 : null === (t = i.items) || void 0 === t ? void 0 : t[0], isFetching: r } } function U(e) { return { handleComplete: () => (0, c.completeQuestPreview)(e), handleResetStatusClick: () => (0, c.resetQuestPreviewStatus)(e), handleResetDismissibilityClick: () => (0, c.resetQuestDismissibilityStatus)(e), handleOverrideDeliveryClick: () => (0, c.overrideQuestDelivery)(e) } }(a = r || (r = {})).UNCLAIMED = "unclaimed", a.CLAIMED = "claimed" }, 687744: function(e, t, n) { "use strict"; n.r(t), n.d(t, { questRewardsConfigFromServer: function() { return s } }); var i = n("887003"); function r(e) { switch (e.tag) { case i.QuestRewardTypes.COLLECTIBLE: return { tag: e.tag, skuId: e.sku_id, messages: { name: e.messages.name, nameWithArticle: e.messages.name_with_article } }; case i.QuestRewardTypes.IN_GAME: return { tag: e.tag, skuId: e.sku_id, messages: { name: e.messages.name, nameWithArticle: e.messages.name_with_article, redemptionInstructions: e.messages.redemption_instructions } }; case i.QuestRewardTypes.REWARD_CODE: return { tag: e.tag, skuId: e.sku_id, messages: { name: e.messages.name, nameWithArticle: e.messages.name_with_article, redemptionInstructionsByPlatform: e.messages.redemption_instructions_by_platform }, asset: e.asset, approximateCount: e.approximate_count } } } function s(e) { return { assignmentMethod: e.assignment_method, rewards: e.rewards.map(r) } } }, 569984: function(e, t, n) { "use strict"; let i, r, s, a, o, l, u, d, _, c, E, I; n.r(t), n("47120"); var T, f, S, h, A = n("887003"), m = n("442837"), N = n("570140"), p = n("497505"), O = n("5881"), C = n("46140"); function R() { i = !1, r = new Map, s = 0, a = new Set, o = new Set, l = new Set, u = new Set, d = new Set, _ = new Map, c = new Map, E = new Map, I = null } function g(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : { updateProgress: !1 }, i = (r = new Map(r)).get(e); if (null != i) { var s, a; let o = null === (s = i.userStatus) || void 0 === s ? void 0 : s.streamProgressSeconds, l = null === (a = i.userStatus) || void 0 === a ? void 0 : a.progress, u = null == o && null == l, d = { ...i, ...t }; !(n.updateProgress || null == d.userStatus || u || null != d.userStatus.completedAt || null == d.userStatus.enrolledAt) && null != d.userStatus && (d.userStatus = { ...d.userStatus, streamProgressSeconds: null != o ? o : 0, progress: null != l ? l : {} }), r.set(e, d) } } function L(e, t) { let n = new Map(_); n.set(e, t), _ = n } function v(e, t) { L(e, t); let n = r.get(e), i = null == n ? void 0 : n.userStatus; null != i && null == i.claimedAt && g(e, { userStatus: { ...i, claimedAt: t.claimedAt } }) } R(); function D(e) { null != E.get(e) && (E = new Map(E)).delete(e) } function M(e) { let t = new Set(a); t.delete(e), a = t } function y(e) { let t = new Set(d); t.delete(e), d = t } class P extends(T = m.default.Store) { get quests() { return r } get isFetchingCurrentQuests() { return i } get lastFetchedCurrentQuests() { return s } get questDeliveryOverride() { return r.get(null != I ? I : "") } isEnrolling(e) { return a.has(e) } isClaimingRewardCode(e) { return o.has(e) } isClaimingReward(e) { return l.has(e) } isFetchingRewardCode(e) { return u.has(e) } isDismissingContent(e) { return d.has(e) } getRewardCode(e) { return _.get(e) } getRewards(e) { return c.get(e) } getStreamHeartbeatFailure(e) { return E.get(e) } getQuest(e) { return r.get(e) } } h = "QuestsStore", (S = "displayName") in(f = P) ? Object.defineProperty(f, S, { value: h, enumerable: !0, configurable: !0, writable: !0 }) : f[S] = h, t.default = new P(N.default, { LOGOUT: function() { R() }, QUESTS_FETCH_CURRENT_QUESTS_BEGIN: function() { s = Date.now(), i = !0 }, QUESTS_FETCH_CURRENT_QUESTS_SUCCESS: function(e) { let { quests: t } = e; for (let e of (i = !1, r = new Map, t)) r.set(e.id, e), e.targetedContent.includes(p.QuestContent.QUEST_BAR) && (0, O.getQuestLogger)({ location: C.QuestsExperimentLocations.QUESTS_STORE }).log("Delivered ".concat(e.config.messages.questName, " (").concat(e.id, ")")) }, QUESTS_FETCH_CURRENT_QUESTS_FAILURE: function() { s = 0, i = !1 }, QUESTS_SEND_HEARTBEAT_SUCCESS: function(e) { let { questId: t, streamKey: n, userStatus: i } = e; g(t, { userStatus: i }, { updateProgress: !0 }), D(n) }, QUESTS_SEND_HEARTBEAT_FAILURE: function(e) { let { questId: t, streamKey: n } = e; null == E.get(n) && (E = new Map(E)).set(n, { questId: t, streamKey: n, firstFailedAt: Date.now() }) }, QUESTS_ENROLL_BEGIN: function(e) { let { questId: t } = e, n = new Set(a); n.add(t), a = n }, QUESTS_ENROLL_SUCCESS: function(e) { let { enrolledQuestUserStatus: t } = e; g(t.questId, { userStatus: t }), M(t.questId) }, QUESTS_ENROLL_FAILURE: function(e) { let { questId: t } = e; M(t) }, QUESTS_FETCH_REWARD_CODE_BEGIN: function(e) { let { questId: t } = e, n = new Set(u); n.add(t), u = n }, QUESTS_FETCH_REWARD_CODE_SUCCESS: function(e) { let { questId: t, rewardCode: n } = e, i = new Set(u); i.delete(t), u = i, v(t, n) }, QUESTS_FETCH_REWARD_CODE_FAILURE: function(e) { let { questId: t } = e, n = new Set(u); n.delete(t), u = n }, QUESTS_CLAIM_REWARD_CODE_BEGIN: function(e) { let { questId: t } = e, n = new Set(o); n.add(t), o = n }, QUESTS_CLAIM_REWARD_CODE_SUCCESS: function(e) { let { questId: t, rewardCode: n } = e, i = new Set(o); i.delete(t), o = i, v(t, n) }, QUESTS_CLAIM_REWARD_CODE_FAILURE: function(e) { let { questId: t } = e, n = new Set(o); n.delete(t), o = n }, QUESTS_CLAIM_REWARD_BEGIN: function(e) { let { questId: t } = e, n = new Set(l); n.add(t), l = n }, QUESTS_CLAIM_REWARD_SUCCESS: function(e) { let { questId: t, entitlements: n } = e, i = new Set(l); i.delete(t), l = i, ! function(e, t) { let n = new Map(c); n.set(e, t.items), c = n; let i = r.get(e), s = null == i ? void 0 : i.userStatus; if (null != s && null == s.claimedAt) { var a; let n = function(e) { var t; let { entitlements: n } = e, i = null === (t = n.items[0].tenantMetadata) || void 0 === t ? void 0 : t.questRewards.reward; return (null == i ? void 0 : i.tag) !== A.QuestRewardTypes.REWARD_CODE ? null : i.rewardCode }({ entitlements: t }); null != n && L(e, n), g(e, { userStatus: { ...s, claimedAt: t.claimedAt, claimedTier: null !== (a = null == n ? void 0 : n.tier) && void 0 !== a ? a : null } }) } }(t, n) }, QUESTS_CLAIM_REWARD_FAILURE: function(e) { let { questId: t } = e, n = new Set(l); n.delete(t), l = n }, QUESTS_DISMISS_CONTENT_BEGIN: function(e) { let { questId: t } = e, n = new Set(d); n.add(t), d = n }, QUESTS_DISMISS_CONTENT_SUCCESS: function(e) { let { dismissedQuestUserStatus: t } = e; g(t.questId, { userStatus: t }), y(t.questId) }, QUESTS_DISMISS_CONTENT_FAILURE: function(e) { let { questId: t } = e; y(t) }, STREAM_CLOSE: function(e) { let { streamKey: t } = e; D(t) }, QUESTS_DISMISS_PROGRESS_TRACKING_FAILURE_NOTICE: function(e) { let { streamKey: t } = e; D(t) }, QUESTS_PREVIEW_UPDATE_SUCCESS: function(e) { let { previewQuestUserStatus: t } = e; g(t.questId, { userStatus: t }), null == t.claimedAt && (_ = new Map(_)).delete(t.questId) }, QUESTS_OPTIMISTIC_PROGRESS_UPDATE: function(e) { let { userStatus: t } = e; g(t.questId, { userStatus: t }, { updateProgress: !0 }) }, QUESTS_DELIVERY_OVERRIDE: function(e) { let { questId: t } = e; I = I === t ? null : t } }) }, 497505: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QUEST_REWARD_CODE_PLATFORMS_SET: function() { return s }, QuestContent: function() { return r.QuestContent }, QuestRewardCodePlatforms: function() { return i.QuestRewardCodePlatforms } }), n("47120"); var i = n("687522"), r = n("636977"); let s = new Set(Object.values(i.QuestRewardCodePlatforms).filter(e => "number" == typeof e)) }, 918701: function(e, t, n) { "use strict"; n.r(t), n.d(t, { calculatePercentComplete: function() { return Y }, captureQuestsException: function() { return Q }, copyShareLink: function() { return e_ }, getCollectiblesQuestReward: function() { return z }, getContextualEntrypointHeading: function() { return j }, getGameLogotypeAssetUrl: function() { return B }, getGameTileAssetUrl: function() { return k }, getHeroAssetUrl: function() { return G }, getPlatformString: function() { return H }, getPlayOnDesktopQuestByApplicationId: function() { return g }, getQuestBarHeroAssetUrl: function() { return w }, getQuestByApplicationId: function() { return R }, getQuestForTargetedContent: function() { return x }, getQuestTaskDetails: function() { return eE }, getQuestUrl: function() { return V }, getQuestsFromActivities: function() { return q }, getQuestsInstructionsToWinReward: function() { return eu }, getRewardAsset: function() { return b }, getRewardCodeQuestReward: function() { return el }, getVideoAssetMimeType: function() { return et }, hasCollectiblesQuestReward: function() { return Z }, hasPlayOnDesktopTask: function() { return er }, includesTarget: function() { return X }, isAssetAnimated: function() { return J }, isDismissed: function() { return K }, isDismissible: function() { return W }, isQuestExpired: function() { return L }, isQuestWithKnownConfigVersion: function() { return O }, isTargetedForContent: function() { return F }, isTieredRewardCodeQuest: function() { return en }, openGameLink: function() { return ed }, questUserStatusFromServer: function() { return v }, questWithUserStatusFromServer: function() { return D }, questsEntitlementsFromServer: function() { return P }, questsRewardCodeFromServer: function() { return M }, shouldShowSocialEntrypoints: function() { return ea }, shouldUsePlayOnDesktopTask: function() { return es } }), n("627341"), n("47120"), n("411104"); var i = n("278074"), r = n("754700"), s = n("551910"), a = n("887003"), o = n("742635"), l = n("782568"); n("597688"); var u = n("572004"), d = n("70956"), _ = n("630388"), c = n("49012"), E = n("960048"), I = n("617136"), T = n("687744"), f = n("497505"), S = n("242755"), h = n("566078"), A = n("312046"), m = n("46140"), N = n("689938"); let p = "https://cdn.discordapp.com/assets/quests/"; function O(e) { try { return (0, i.match)(e.config).with({ config_version: 1 }, () => !0).with({ config_version: 2 }, () => !0).exhaustive() } catch (n) { var t; return console.error("Unknown config version '".concat(null == e ? void 0 : null === (t = e.config) || void 0 === t ? void 0 : t.config_version, "'"), n), !1 } } function C(e, t) { return null != h.SharedQuestFields.build(t.config).application.ids.find(t => t === e) } function R(e, t) { let n; for (let [i, r] of e) if (C(t, r) && !L(r)) { n = r; break } return n } function g(e, t) { return Array.from(e.values()).find(e => C(t, e) && !L(e) && er({ quest: e })) } function L(e) { return new Date(e.config.expiresAt).valueOf() <= Date.now() } function v(e) { var t; return { userId: e.user_id, questId: e.quest_id, enrolledAt: e.enrolled_at, completedAt: e.completed_at, claimedAt: e.claimed_at, claimedTier: null !== (t = e.claimed_tier) && void 0 !== t ? t : null, lastStreamHeartbeatAt: e.last_stream_heartbeat_at, streamProgressSeconds: e.stream_progress_seconds, dismissedQuestContent: e.dismissed_quest_content, progress: function(e) { let t = {}; for (let [n, i] of Object.entries(e)) t[n] = { eventName: i.event_name, value: i.value, updatedAt: i.updated_at, completedAt: i.completed_at }; return t }(e.progress) } } function D(e) { var t; return { id: e.id, preview: e.preview, config: (t = e.config, (0, i.match)(t).with({ config_version: 1 }, e => { var t, n, i; return { configVersion: 1, expiresAt: e.expires_at, streamDurationRequirementMinutes: e.stream_duration_requirement_minutes, gameTitle: e.game_title, getGameLink: e.get_game_link, applicationId: e.application_id, applicationName: e.application_name, messages: { questName: (t = e.messages).quest_name, rewardName: t.reward_name, rewardNameWithArticle: t.reward_name_with_article, rewardRedemptionInstructionsByPlatform: function(e) { let t = {}; for (let n in e) { let i = parseInt(n); f.QUEST_REWARD_CODE_PLATFORMS_SET.has(i) && (t[i] = e[n]) } return t }(t.reward_redemption_instructions_by_platform), gameTitle: t.game_title, gamePublisher: t.game_publisher }, colors: { primary: (n = e.colors).primary, secondary: n.secondary }, rewardsConfig: (0, T.questRewardsConfigFromServer)(e.rewards_config), rewardCodeExpiresAt: e.reward_code_expires_at, rewardCodePlatforms: e.reward_code_platforms.filter(e => f.QUEST_REWARD_CODE_PLATFORMS_SET.has(e)), assets: { rewardTile: (i = e.assets).reward_tile, hero: i.hero, questBarHero: i.quest_bar_hero, gameTile: i.game_tile, logotype: i.logotype }, inGameQuestConfig: null, variants: e.variants, supplementaryApplicationIds: e.supplementary_application_ids } }).with({ config_version: 2 }, e => (0, A.questFromServerV2)(e)).exhaustive()), userStatus: null == e.user_status ? null : v(e.user_status), targetedContent: e.targeted_content } } function M(e) { var t; return { userId: e.user_id, questId: e.quest_id, code: e.code, platform: e.platform, claimedAt: e.claimed_at, tier: null !== (t = e.tier) && void 0 !== t ? t : null } } function y(e) { return { skuId: e.sku_id, tenantMetadata: function(e) { if ((null == e ? void 0 : e.quest_rewards) == null) return null; let t = e.quest_rewards; switch (t.reward.tag) { case a.QuestRewardTypes.IN_GAME: return { questRewards: { reward: { tag: t.reward.tag } } }; case a.QuestRewardTypes.REWARD_CODE: return { questRewards: { reward: { tag: t.reward.tag, rewardCode: M(t.reward.reward_code) } } } } }(e.tenant_metadata) } } function P(e) { return { claimedAt: e.claimed_at, items: e.entitlements.map(y), errors: e.errors } } function U(e, t) { return e.startsWith("data") ? e : t } let b = e => { var t, n; let i = el({ quest: e, idx: null === (t = e.userStatus) || void 0 === t ? void 0 : t.claimedTier }), r = h.SharedQuestFields.build(e.config).defaultRewardAsset, s = null !== (n = null == i ? void 0 : i.asset) && void 0 !== n ? n : r; return { name: s, url: U(s, "".concat(p).concat(e.id, "/").concat(s)) } }, G = e => U(e.config.assets.hero, "".concat(p).concat(e.id, "/").concat(e.config.assets.hero)), w = e => e.config.assets.questBarHero.startsWith("data") ? e.config.assets.questBarHero : U(e.config.assets.questBarHero, "".concat(p).concat(e.id, "/").concat(e.config.assets.questBarHero)), k = (e, t) => U(e.config.assets.gameTile, "".concat(p).concat(e.id, "/").concat(t, "/").concat(e.config.assets.gameTile)), B = (e, t) => U(e.config.assets.logotype, "".concat(p).concat(e.id, "/").concat(t, "/").concat(e.config.assets.logotype)), V = e => "".concat(location.protocol, "//").concat(location.host, "/quests/").concat(e); function x(e, t) { for (let [n, i] of e) if (!L(i) && i.targetedContent.includes(t)) return i; return null } function F(e, t) { return e.targetedContent.includes(t) } let H = e => { switch (e) { case f.QuestRewardCodePlatforms.XBOX: return N.default.Messages.QUESTS_REWARD_CODE_PLATFORM_XBOX; case f.QuestRewardCodePlatforms.PLAYSTATION: return N.default.Messages.QUESTS_REWARD_CODE_PLATFORM_PLAYSTATION; case f.QuestRewardCodePlatforms.SWITCH: return N.default.Messages.QUESTS_REWARD_CODE_PLATFORM_SWITCH; case f.QuestRewardCodePlatforms.PC: return N.default.Messages.QUESTS_REWARD_CODE_PLATFORM_PC; case f.QuestRewardCodePlatforms.CROSS_PLATFORM: return N.default.Messages.QUESTS_REWARD_CODE_PLATFORM_CROSS_PLATFORM } }; function Y(e) { let { quest: t, location: n } = e; if (null == t.userStatus) return 0; if (null != t.userStatus.completedAt) return 1; let { progressSeconds: i, targetSeconds: r } = eE({ quest: t, location: n }); return r <= 0 ? 0 : Math.min(i / r, 1) } function j(e) { var t, n; let { quest: i, location: r } = e; if ((null === (t = i.userStatus) || void 0 === t ? void 0 : t.completedAt) != null) return N.default.Messages.QUESTS_COMPLETION_PROGRESS_COMPLETE; if ((null === (n = i.userStatus) || void 0 === n ? void 0 : n.enrolledAt) != null) { let e = Y({ quest: i, location: r }); return e >= .75 ? N.default.Messages.QUESTS_COMPLETION_PROGRESS_ALMOST_COMPLETE : e >= .45 && e <= .55 ? N.default.Messages.QUESTS_COMPLETION_PROGRESS_HALFWAY : e > 0 ? N.default.Messages.QUESTS_COMPLETION_PROGRESS_STARTED : N.default.Messages.QUESTS_COMPLETION_PROGRESS_NOT_STARTED } return N.default.Messages.QUESTS_TITLE.format({ questName: i.config.messages.questName }) } function W(e) { return Object.keys(m.DismissibleQuestContentFlags).includes(f.QuestContent[e]) } function K(e, t) { if (!W(t)) return !1; let n = f.QuestContent[t]; return (0, _.hasFlag)(e.dismissedQuestContent, m.DismissibleQuestContentFlags[n]) } function z(e) { return (0, i.match)(e).with({ configVersion: 1 }, e => { let t = e.rewardsConfig.rewards.find(e => e.tag === a.QuestRewardTypes.COLLECTIBLE); return (null == t ? void 0 : t.tag) === a.QuestRewardTypes.COLLECTIBLE ? t : null }).with({ configVersion: 2 }, e => { let t = e.rewardsConfig.rewards.find(e => e.type === a.QuestRewardTypes.COLLECTIBLE); return (null == t ? void 0 : t.type) === a.QuestRewardTypes.COLLECTIBLE ? t : null }).exhaustive() } function Z(e) { return null != z(e) } function X(e, t) { return e.targetedContent.includes(t) } function Q(e, t) { E.default.captureException(e, { ...t, tags: { ...null == t ? void 0 : t.tags, app_context: "quests" } }) } function q(e, t) { if (null == t || null == e) return null; for (let n of t) { if (null == n.application_id) continue; let t = R(e, n.application_id); if (null != t) return t } return null } function J(e) { return e.endsWith(".webm") || e.endsWith(".mp4") || e.startsWith("data:video") } let $ = /\.([a-zA-Z0-9]+)$/, ee = /^data:video\/([a-zA-Z0-9]+)\;/; function et(e) { var t, n, i, r, s; switch (null !== (s = null === (n = $.exec(e)) || void 0 === n ? void 0 : null === (t = n[1]) || void 0 === t ? void 0 : t.toLowerCase()) && void 0 !== s ? s : null === (r = ee.exec(e)) || void 0 === r ? void 0 : null === (i = r[1]) || void 0 === i ? void 0 : i.toLowerCase()) { case "webm": return "video/webm"; case "mp4": return "video/mp4"; default: throw Error("Unexpected file extension: ".concat(e.substring(0, 15))) } } function en(e) { let { quest: { config: t } } = e; return (0, i.match)(t).with({ configVersion: 1 }, e => { let t = e.rewardsConfig; return t.assignmentMethod === s.QuestRewardAssignmentMethods.TIERED && t.rewards.length > 0 && t.rewards.every(e => e.tag === a.QuestRewardTypes.REWARD_CODE) }).with({ configVersion: 2 }, e => { let t = e.rewardsConfig; return t.assignmentMethod === s.QuestRewardAssignmentMethods.TIERED && t.rewards.length > 0 && t.rewards.every(e => e.type === a.QuestRewardTypes.REWARD_CODE) }).exhaustive() } let ei = e => (0, i.match)(e.taskConfig).with({ type: o.QuestTaskConfigTypes.FIRST_PARTY }, e => null != e.tasks[r.FirstPartyQuestTaskTypes.PLAY_ON_DESKTOP]).otherwise(() => !1); function er(e) { let { quest: t } = e; return (0, i.match)(t.config).with({ configVersion: 1 }, e => eo(t, m.QuestVariants.PLAYTIME_TASK)).with({ configVersion: 2 }, e => eo(t, m.QuestVariants.PLAYTIME_TASK) || ei(e)).exhaustive() } function es(e) { let { quest: t, location: n } = e; return null != t && er({ quest: t }) && (0, S.isEligibleForQuestPlaytime)({ location: n }) } function ea(e) { return !eo(e, m.QuestVariants.IN_HOUSE_CONSOLE_QUEST) } function eo(e, t) { return h.SharedQuestFields.build(e.config).features.has(t) } function el(e) { let { quest: t, idx: n } = e; if (null == n) return null; let r = t.config.rewardsConfig.rewards[n]; return (0, i.match)(r).with({ tag: a.QuestRewardTypes.REWARD_CODE }, e => e).with({ type: a.QuestRewardTypes.REWARD_CODE }, e => e).otherwise(() => null) } function eu(e) { let { quest: t, location: n, useV2Variants: i = !1 } = e, r = t.config.messages.gameTitle, s = h.SharedQuestFields.build(t.config).defaultReward, a = eE({ quest: t, location: n }).targetMinutes; return es({ quest: t, location: n }) ? N.default.Messages.QUESTS_PLAY_INSTRUCTIONS_TO_WIN_REWARD.format({ gameTitle: r, questReward: s.messages.nameWithArticle, streamingDurationRequirement: a }) : en({ quest: t }) ? (i ? N.default.Messages.QUESTS_INSTRUCTIONS_TO_WIN_REWARD_TIERED_V2 : N.default.Messages.QUESTS_INSTRUCTIONS_TO_WIN_REWARD_TIERED).format({ gameTitle: r, streamingDurationRequirement: a }) : (i ? N.default.Messages.QUESTS_INSTRUCTIONS_TO_WIN_REWARD_V2 : N.default.Messages.QUESTS_INSTRUCTIONS_TO_WIN_REWARD).format({ gameTitle: r, questReward: s.messages.nameWithArticle, streamingDurationRequirement: a }) } function ed(e, t) { let n = h.SharedQuestFields.build(e.config).application.link; (0, c.handleClick)({ href: n, onConfirm: () => { (0, I.trackQuestContentClicked)({ questId: e.id, questContent: t.content, questContentCTA: t.ctaContent, questContentPosition: t.position }), (0, l.default)(n) } }) } let e_ = (e, t) => { (0, I.trackQuestContentClicked)({ questId: e, questContent: t.content, questContentCTA: t.ctaContent, questContentPosition: t.position }), (0, u.copy)(V(e)) }, ec = e => { var t, n, i, s, a, l, u; let { quest: _, taskType: c } = e, E = _.config.taskConfig; if (E.type !== o.QuestTaskConfigTypes.FIRST_PARTY) throw Error("Cannot retrieve task details for task config with type ".concat(E.type, "!")); let I = null !== (a = E.tasks[c]) && void 0 !== a ? a : E.tasks[r.FirstPartyQuestTaskTypes.STREAM_ON_DESKTOP]; if (null == I) throw Error("No task with type ".concat(c, " found for quest ").concat(_.id, " - Quest is malformed!")); let T = I.target; return { progressSeconds: null !== (u = null !== (l = null === (i = _.userStatus) || void 0 === i ? void 0 : null === (n = i.progress) || void 0 === n ? void 0 : null === (t = n[c]) || void 0 === t ? void 0 : t.value) && void 0 !== l ? l : null === (s = _.userStatus) || void 0 === s ? void 0 : s.streamProgressSeconds) && void 0 !== u ? u : 0, targetSeconds: T, targetMinutes: Math.round(T / d.default.Seconds.MINUTE), taskType: c } }, eE = e => { let { quest: t, location: n } = e; return (0, i.match)(t).with({ config: { configVersion: 1 } }, e => { var t, n; return { progressSeconds: null !== (n = null === (t = e.userStatus) || void 0 === t ? void 0 : t.streamProgressSeconds) && void 0 !== n ? n : 0, targetSeconds: Math.round(e.config.streamDurationRequirementMinutes * d.default.Seconds.MINUTE), targetMinutes: e.config.streamDurationRequirementMinutes } }).with({ config: { configVersion: 2 } }, e => es({ quest: e, location: n }) ? ec({ quest: e, taskType: r.FirstPartyQuestTaskTypes.PLAY_ON_DESKTOP }) : ec({ quest: e, taskType: r.FirstPartyQuestTaskTypes.STREAM_ON_DESKTOP })).exhaustive() } }, 242755: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForQuestPlaytime: function() { return a }, useIsEligibleForQuestPlaytime: function() { return o } }); var i = n("818083"), r = n("977156"); let s = (0, i.createExperiment)({ id: "2024-04_quest_playtime_task", kind: "user", label: "Quest Playtime Task", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Playtime enabled", config: { enabled: !0 } }] }), a = e => { let { location: t, autoTrackExposure: n = !1 } = e; return s.getCurrentConfig({ location: t }, { autoTrackExposure: n }).enabled }, o = e => { let { location: t, autoTrackExposure: n = !1 } = e, i = (0, r.useIsEligibleForQuests)({ location: t }), { enabled: a } = s.useExperiment({ location: t }, { autoTrackExposure: n }); return i && a } }, 432945: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getIsEligibleForActivityQuest: function() { return r } }); let i = (0, n("818083").createExperiment)({ id: "2024-03_quests_activity_quest", kind: "user", label: "Activity Quest", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Activity Quest enabled", config: { enabled: !0 } }] }), r = e => { let { location: t, autoTrackExposure: n } = e; return i.getCurrentConfig({ location: t }, { autoTrackExposure: n }).enabled } }, 184309: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForQuestsClientMonitoring: function() { return r } }); let i = (0, n("818083").createExperiment)({ id: "2024-03_quests_client_monitoring", kind: "user", label: "Quests client monitoring experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "disabled", config: { enabled: !1 } }, { id: 1, label: "enabled", config: { enabled: !0 } }] }), r = e => i.getCurrentConfig({ location: e }, { autoTrackExposure: !1 }).enabled }, 977156: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getIsEligibleForQuests: function() { return s }, isQuestPreviewToolEnabled: function() { return l }, useIsEligibleForQuests: function() { return a } }); var i = n("818083"); let r = (0, i.createExperiment)({ id: "2023-12_quests", kind: "user", label: "Quests", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Quests enabled", config: { enabled: !0 } }] }), s = e => { let { location: t } = e; return r.getCurrentConfig({ location: t }, { autoTrackExposure: !1 }).enabled }, a = e => { let { location: t } = e; return r.useExperiment({ location: t }, { autoTrackExposure: !1 }).enabled }, o = (0, i.createExperiment)({ id: "2024-04_quest_preview_tool", kind: "user", label: "Quest Preview Tool", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Preview tool enabled", config: { enabled: !0 } }] }); function l(e) { let { location: t } = e; return o.getCurrentConfig({ location: t }, { autoTrackExposure: !1 }).enabled } }, 5881: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getQuestLogger: function() { return l } }); var i = n("259443"), r = n("818083"), s = n("231338"); let a = (0, r.createExperiment)({ id: "2024-04_quests_logging", kind: "user", label: "Quests Logging", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Quest logging enabled", config: { enabled: !0 } }] }), o = e => { let { location: t, autoTrackExposure: n = !1 } = e; return a.getCurrentConfig({ location: t }, { autoTrackExposure: n }).enabled }; function l(e) { let { quest: t, location: n } = e, r = o({ location: n }), a = null == t ? void 0 : t.config.messages.questName, l = "QuestLogger ".concat(n).concat(null != a ? " (".concat(a, ")") : ""), u = new i.Logger(l); return { log: r ? u.log : s.NOOP, warn: r ? u.warn : s.NOOP, error: r ? u.error : s.NOOP, info: r ? u.info : s.NOOP, verbose: r ? u.verbose : s.NOOP, trace: r ? u.trace : s.NOOP } } }, 31055: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useIsEligibleForMembersListQuestEntrypoint: function() { return a } }); var i = n("818083"), r = n("977156"); let s = (0, i.createExperiment)({ id: "2024-03_quests_members_list_entrypoint", kind: "user", label: "Quests Members List Entrypoint", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Quests Members List Entrypoint enabled", config: { enabled: !0 } }] }), a = e => { let { location: t, autoTrackExposure: n = !1 } = e, i = (0, r.useIsEligibleForQuests)({ location: t }), { enabled: a } = s.useExperiment({ location: t }, { autoTrackExposure: n }); return i && a } }, 901751: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HeartbeatDecision: function() { return i }, generatePsuedoStreamKey: function() { return b }, getPlayOnDesktopQuestForActiveGames: function() { return w } }), n("47120"); var i, r, s = n("147913"), a = n("317381"), o = n("594190"), l = n("569545"), u = n("199902"), d = n("314897"), _ = n("77498"), c = n("938475"), E = n("70956"), I = n("272008"), T = n("569984"), f = n("918701"), S = n("242755"), h = n("432945"), A = n("977156"), m = n("5881"), N = n("566078"), p = n("46140"), O = n("70722"); function C(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let R = 12 * E.default.Millis.HOUR, g = 1 * E.default.Millis.MINUTE, L = 1 * E.default.Millis.SECOND, v = 5 * E.default.Millis.SECOND, D = 1 * E.default.Millis.SECOND, M = E.default.Millis.DAY, y = 30 * E.default.Millis.MINUTE, P = 5 * E.default.Millis.MINUTE, U = (0, m.getQuestLogger)({ location: p.QuestsExperimentLocations.QUESTS_MANAGER }), b = e => (0, l.encodeStreamKey)({ streamType: O.StreamTypes.CALL, channelId: e, ownerId: "1" }); function G() { let e = u.default.getStreamerActiveStreamMetadata(); if ((null == e ? void 0 : e.id) == null) return null; let t = _.default.getGameById(e.id); if ((null == t ? void 0 : t.id) == null) return null; let n = (0, f.getQuestByApplicationId)(T.default.quests, t.id); return null != n && B(n) ? n : null } let w = () => { for (let e of o.default.getRunningGames().map(e => e.id)) { if (null == e) continue; let t = (0, f.getPlayOnDesktopQuestByApplicationId)(T.default.quests, e); if (null != t && B(t)) return t } }; function k(e) { return c.default.countVoiceStatesForChannel(e) >= 2 } function B(e) { return !(0, f.isQuestExpired)(e) && null != e.userStatus && null != e.userStatus.enrolledAt && null == e.userStatus.completedAt } function V(e) { var t; let { questId: n, streamKey: i, applicationId: r } = e, { channelId: s } = (0, l.decodeStreamKey)(i), a = k(s), d = T.default.quests.get(n); if (null == d || !B(d)) return "STOP"; let _ = null === (t = G()) || void 0 === t ? void 0 : t.config, c = null != u.default.getRTCStream(i) && null != _ && N.SharedQuestFields.build(_).application.id === r && a, { quest: E, activity: I } = x(), S = null == E ? void 0 : E.config, h = null != S && (null == E ? void 0 : E.id) === n && N.SharedQuestFields.build(S).application.id === r && a && (null == I ? void 0 : I.channelId) === s, A = o.default.getRunningGames().map(e => e.id), m = (0, f.shouldUsePlayOnDesktopTask)({ quest: d, location: p.QuestsExperimentLocations.QUESTS_MANAGER }) && A.includes(r); return c || h || m ? "BEAT" : "BEAT_TERMINAL" } function x(e) { let t = { quest: null, activity: null }; if (!(0, h.getIsEligibleForActivityQuest)({ location: p.QuestsExperimentLocations.QUESTS_MANAGER, autoTrackExposure: !1 })) return t; for (let i of a.default.getSelfEmbeddedActivities().values()) { var n; if (null != e && i.channelId !== e) continue; let r = null !== (n = (0, f.getQuestByApplicationId)(T.default.quests, i.applicationId)) && void 0 !== n ? n : null; if (null != r && B(r)) return { quest: r, activity: i }; t = { quest: null, activity: i } } return t }(r = i || (i = {})).BEAT = "BEAT", r.STOP = "STOP", r.BEAT_TERMINAL = "BEAT_TERMINAL"; class F extends s.default { maybeFetchCurrentQuests() { (0, A.getIsEligibleForQuests)({ location: p.QuestsExperimentLocations.QUESTS_MANAGER }) && !T.default.isFetchingCurrentQuests && (0, I.fetchCurrentQuests)() } constructor(...e) { super(...e), C(this, "instantiatedAt", Date.now()), C(this, "streamKeyToHeartbeatState", new Map), C(this, "optimisticProgressUpdateIntervalIds", new Map), C(this, "lastOptimisticallyUpdatedProgressMap", new Map), C(this, "questsInitialFetchTimerId", null), C(this, "questsRecurringFetchTimerId", null), C(this, "questsLastFetchAttemptedAt", 0), C(this, "lastFetchedQuestForLocaleChangeAt", 0), C(this, "initiateHeartbeat", e => { let { questId: t, streamKey: n, applicationId: i } = e; if (this.streamKeyToHeartbeatState.has(n)) { U.log("~ initiateHeartbeat -> Heartbeat already initiated:", n); return } let r = () => { let e = V({ questId: t, streamKey: n, applicationId: i }); if (U.log("~ initiateHeartbeat -> heartbeat decision: ", e), "BEAT" === e) { (0, I.sendHeartbeat)({ questId: t, streamKey: n }); let e = this.calculateHeartbeatDurationMs(t), i = window.setTimeout(r, e); this.streamKeyToHeartbeatState.set(n, { heartbeatTimeoutId: i, questId: t }) } else this.terminateHeartbeat({ streamKey: n, sendTerminalHeartbeat: "BEAT_TERMINAL" === e }) }; r() }), C(this, "calculateHeartbeatDurationMs", e => { let t = T.default.quests.get(e); if (null == t || null == t.config || null == t.userStatus) return g; let { progressSeconds: n, targetSeconds: i } = (0, f.getQuestTaskDetails)({ quest: t, location: p.QuestsExperimentLocations.QUESTS_MANAGER }), r = Math.max(0, (i - n) * E.default.Millis.SECOND); return r <= g ? r + L : g }), C(this, "terminateHeartbeat", e => { let { streamKey: t, sendTerminalHeartbeat: n } = e; this.terminateOptimisticProgressUpdateInterval(t); let i = this.streamKeyToHeartbeatState.get(t); if (null != i) { U.log("~ terminateHeartbeat -> Terminating heartbeat:", { streamKey: t, sendTerminalHeartbeat: n }); let { questId: e, heartbeatTimeoutId: r } = i; window.clearTimeout(r), this.streamKeyToHeartbeatState.delete(t), n && (0, I.sendHeartbeat)({ questId: e, streamKey: t, terminal: !0 }) } }), C(this, "initiateOptimisticProgressUpdateInterval", e => { this.terminateOptimisticProgressUpdateInterval(e), this.optimisticProgressUpdateIntervalIds.set(e, window.setInterval(() => { var t, n; let i = G(), r = w(), { quest: s } = x(), a = null !== (n = null !== (t = null != i ? i : s) && void 0 !== t ? t : r) && void 0 !== n ? n : null; if (null == a) { this.terminateOptimisticProgressUpdateInterval(e); return } let o = N.SharedQuestFields.build(a.config), l = a.userStatus, u = this.lastOptimisticallyUpdatedProgressMap.get(e); if ("BEAT" !== V({ questId: a.id, streamKey: e, applicationId: o.application.id })) { this.terminateOptimisticProgressUpdateInterval(e); return } if (null == u) this.lastOptimisticallyUpdatedProgressMap.set(e, Date.now()); else if (null != l) { let { progressSeconds: t, targetSeconds: n, taskType: i } = (0, f.getQuestTaskDetails)({ quest: a, location: p.QuestsExperimentLocations.QUESTS_MANAGER }), r = (Date.now() - u) / E.default.Millis.SECOND, s = t + r; if (U.log("~ initiateOptimisticProgressUpdateInterval -> Updating optimistic progress:", { streamKey: e, progressToAdd: r, existingProgress: t, newProgress: s }), s <= n) { let t = { ...l, streamProgressSeconds: s }; i && (t.progress[i] = { ...t.progress[i], eventName: i, value: s }), (0, I.optimisticallyUpdateQuestProgress)(t), this.lastOptimisticallyUpdatedProgressMap.set(e, Date.now()) } } }, D)) }), C(this, "terminateOptimisticProgressUpdateInterval", e => { U.log("~ terminateOptimisticProgressUpdateInterval -> Terminating/Resetting Interval", e), window.clearInterval(this.optimisticProgressUpdateIntervalIds.get(e)), this.optimisticProgressUpdateIntervalIds.delete(e), this.lastOptimisticallyUpdatedProgressMap.delete(e) }), C(this, "handleEnrollmentSuccess", e => { let { enrolledQuestUserStatus: { questId: t } } = e, n = u.default.getCurrentUserActiveStream(), i = G(); if (null != n && null != i && i.id === t && B(i)) { U.log("handleEnrollmentSuccess - initiating heartbeat for stream"), this.initiateHeartbeat({ streamKey: (0, l.encodeStreamKey)(n), applicationId: N.SharedQuestFields.build(i.config).application.id, questId: i.id }); return } let { quest: r, activity: s } = x(); if (null != s && null != r && B(r) && r.id === t) { U.log("handleEnrollmentSuccess - initiating heartbeat for activity"), this.initiateHeartbeat({ streamKey: b(s.channelId), applicationId: N.SharedQuestFields.build(r.config).application.id, questId: r.id }); return } o.default.getRunningGames().forEach(e => { if (null == e.id) return; let t = (0, f.getPlayOnDesktopQuestByApplicationId)(T.default.quests, e.id); if (null != t && B(t) && (0, f.shouldUsePlayOnDesktopTask)({ quest: t, location: p.QuestsExperimentLocations.QUESTS_MANAGER })) { U.log("handleEnrollmentSuccess - initiating heartbeat for playtime task"); let e = b(t.id); this.initiateHeartbeat({ streamKey: e, applicationId: N.SharedQuestFields.build(t.config).application.id, questId: t.id }) } }) }), C(this, "handleLogout", () => { window.clearTimeout(this.questsInitialFetchTimerId), window.clearTimeout(this.questsRecurringFetchTimerId), this.questsLastFetchAttemptedAt = 0, this.lastFetchedQuestForLocaleChangeAt = 0 }), C(this, "handleQuestsFetchCurrentQuestsBegin", () => { this.questsLastFetchAttemptedAt = Date.now() }), C(this, "handlePostConnectionOpen", () => { window.clearTimeout(this.questsInitialFetchTimerId), window.clearTimeout(this.questsRecurringFetchTimerId), this.questsRecurringFetchTimerId = window.setInterval(() => { Date.now() - this.questsLastFetchAttemptedAt > M && (this.questsLastFetchAttemptedAt = Date.now(), this.maybeFetchCurrentQuests()) }, y), this.questsInitialFetchTimerId = window.setTimeout(() => { 0 === T.default.lastFetchedCurrentQuests && this.maybeFetchCurrentQuests() }, Math.floor(Math.random() * v)) }), C(this, "handleSendHeartbeatSuccess", e => { let { streamKey: t, userStatus: n } = e; U.log("~ handleSendHeartbeatSuccess -> Heartbeat succeeded:", t), this.terminateOptimisticProgressUpdateInterval(t), null != n.completedAt ? (this.terminateHeartbeat({ streamKey: t, sendTerminalHeartbeat: !1 }), this.terminateOptimisticProgressUpdateInterval(t)) : this.initiateOptimisticProgressUpdateInterval(t) }), C(this, "handleSendHeartbeatFailure", e => { let { streamKey: t } = e; U.log("~ handleSendHeartbeatFailure -> Heartbeat failed:", t), this.terminateOptimisticProgressUpdateInterval(t) }), C(this, "handleQuestsFetchCurrentQuestsSuccess", e => { let { quests: t } = e; U.log("~ handleQuestsFetchCurrentQuestsSuccess -> Quests fetched:", t); let n = o.default.getRunningGames().map(e => e.id); t.forEach(e => { if (B(e) && (0, f.shouldUsePlayOnDesktopTask)({ quest: e, location: p.QuestsExperimentLocations.QUESTS_MANAGER })) { let t = b(e.id), i = n.includes(N.SharedQuestFields.build(e.config).application.id), r = !this.streamKeyToHeartbeatState.has(t) && i; this.streamKeyToHeartbeatState.has(t) && !i ? this.terminateHeartbeat({ streamKey: t, sendTerminalHeartbeat: !0 }) : r && (U.log("handleQuestsFetchCurrentQuestsSuccess - initiating heartbeat for playtime task"), this.initiateHeartbeat({ streamKey: t, applicationId: N.SharedQuestFields.build(e.config).application.id, questId: e.id })) } }) }), C(this, "handleRunningGamesChange", e => { (0, S.isEligibleForQuestPlaytime)({ location: p.QuestsExperimentLocations.QUESTS_MANAGER }) && this._handlePlayOnDesktopQuestsUpdate(e), !(this.instantiatedAt + R > Date.now() || T.default.lastFetchedCurrentQuests + R > Date.now()) && this.maybeFetchCurrentQuests() }), C(this, "_handlePlayOnDesktopQuestsUpdate", e => { let { removed: t, games: n } = e; U.log("~ handleRunningGamesChange -> Games detected:", { runningGames: n, removedGames: t }), n.forEach(e => { if (null == e.id) return; let t = (0, f.getPlayOnDesktopQuestByApplicationId)(T.default.quests, e.id); if (null == t || !B(t)) return; let n = b(t.id); (0, f.shouldUsePlayOnDesktopTask)({ quest: t, location: p.QuestsExperimentLocations.QUESTS_MANAGER }) && !this.streamKeyToHeartbeatState.has(n) && (U.log("handleRunningGamesChange - initiating heartbeat for playtime task"), this.initiateHeartbeat({ streamKey: n, applicationId: N.SharedQuestFields.build(t.config).application.id, questId: t.id })) }), t.forEach(e => { if (null == e.id) return; let t = (0, f.getPlayOnDesktopQuestByApplicationId)(T.default.quests, e.id); if (null == t || !B(t)) return; let n = b(t.id); (0, f.shouldUsePlayOnDesktopTask)({ quest: t, location: p.QuestsExperimentLocations.QUESTS_MANAGER }) && this.streamKeyToHeartbeatState.has(n) && this.terminateHeartbeat({ streamKey: n, sendTerminalHeartbeat: !0 }) }) }), C(this, "handleVoiceStateChange", () => { let e = u.default.getCurrentUserActiveStream(), t = G(); null != e && this._handleVoiceStateChange({ streamKey: (0, l.encodeStreamKey)(e), channelId: e.channelId, quest: t }); let { quest: n, activity: i } = x(); null != i && this._handleVoiceStateChange({ streamKey: b(i.channelId), channelId: i.channelId, quest: n }) }), C(this, "_handleVoiceStateChange", e => { let { streamKey: t, channelId: n, quest: i } = e, r = null == i || !k(n), s = k(n) && !this.streamKeyToHeartbeatState.has(t) && null != i && B(i) && !(0, f.shouldUsePlayOnDesktopTask)({ quest: i, location: p.QuestsExperimentLocations.QUESTS_MANAGER }); r ? this.terminateHeartbeat({ streamKey: t, sendTerminalHeartbeat: !0 }) : s && (U.log("handleVoiceStateChange - initiating heartbeat for stream task"), this.initiateHeartbeat({ streamKey: t, applicationId: N.SharedQuestFields.build(i.config).application.id, questId: i.id })) }), C(this, "handleEmbeddedActivityUpdate", e => { let { quest: t, activity: n } = x(e), i = b(e), r = (null == n || null == t) && this.streamKeyToHeartbeatState.has(i), s = null != n && null != t && B(t) && k(e) && !this.streamKeyToHeartbeatState.has(i); r ? this.terminateHeartbeat({ streamKey: i, sendTerminalHeartbeat: !0 }) : s && (U.log("handleRunningGamesChange - initiating heartbeat for activity task"), this.initiateHeartbeat({ streamKey: i, applicationId: N.SharedQuestFields.build(t.config).application.id, questId: t.id })) }), C(this, "handleStreamCreate", e => { let { streamKey: t } = e, { channelId: n, ownerId: i } = (0, l.decodeStreamKey)(t); if (i !== d.default.getId()) return; let r = G(); if (null == r) { this.terminateHeartbeat({ streamKey: t, sendTerminalHeartbeat: !1 }); return } k(n) && B(r) && !(0, f.shouldUsePlayOnDesktopTask)({ quest: r, location: p.QuestsExperimentLocations.QUESTS_MANAGER }) && !this.streamKeyToHeartbeatState.has(t) && (U.log("handleStreamCreate - initiating heartbeat for stream task"), this.initiateHeartbeat({ streamKey: t, applicationId: N.SharedQuestFields.build(r.config).application.id, questId: r.id })) }), C(this, "handleStreamStart", e => { let { streamType: t, guildId: n, channelId: i } = e, r = G(), s = (0, l.encodeStreamKey)({ streamType: t, guildId: n, channelId: i, ownerId: d.default.getId() }); null == r ? this.terminateHeartbeat({ streamKey: s, sendTerminalHeartbeat: !0 }) : k(i) && B(r) && !(0, f.shouldUsePlayOnDesktopTask)({ quest: r, location: p.QuestsExperimentLocations.QUESTS_MANAGER }) && !this.streamKeyToHeartbeatState.has(s) && (U.log("handleStreamStart - initiating heartbeat for stream task"), this.initiateHeartbeat({ streamKey: s, applicationId: N.SharedQuestFields.build(r.config).application.id, questId: r.id })) }), C(this, "handleStreamClose", e => { let { streamKey: t } = e; this.terminateHeartbeat({ streamKey: t, sendTerminalHeartbeat: !0 }) }), C(this, "handleUserSettingsProtoUpdate", e => { let { partial: t, settings: n, wasSaved: i } = e; if ("localization" in n.proto && !!t && !i) !(Date.now() - this.lastFetchedQuestForLocaleChangeAt <= P) && (this.lastFetchedQuestForLocaleChangeAt = Date.now(), this.maybeFetchCurrentQuests()) }), C(this, "actions", { QUESTS_FETCH_CURRENT_QUESTS_BEGIN: this.handleQuestsFetchCurrentQuestsBegin, QUESTS_FETCH_CURRENT_QUESTS_SUCCESS: this.handleQuestsFetchCurrentQuestsSuccess, QUESTS_ENROLL_SUCCESS: this.handleEnrollmentSuccess, QUESTS_SEND_HEARTBEAT_SUCCESS: this.handleSendHeartbeatSuccess, QUESTS_SEND_HEARTBEAT_FAILURE: this.handleSendHeartbeatFailure, POST_CONNECTION_OPEN: this.handlePostConnectionOpen, RUNNING_GAMES_CHANGE: this.handleRunningGamesChange, STREAM_START: this.handleStreamStart, STREAM_CREATE: this.handleStreamCreate, STREAM_CLOSE: this.handleStreamClose, PASSIVE_UPDATE_V2: this.handleVoiceStateChange, VOICE_STATE_UPDATES: this.handleVoiceStateChange, EMBEDDED_ACTIVITY_UPDATE: e => { let { channelId: t } = e; return this.handleEmbeddedActivityUpdate(t) }, EMBEDDED_ACTIVITY_UPDATE_V2: e => { let { location: t } = e; return this.handleEmbeddedActivityUpdate(t.channel_id) }, USER_SETTINGS_PROTO_UPDATE: this.handleUserSettingsProtoUpdate, LOGOUT: this.handleLogout }) } } t.default = new F }, 566078: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SharedQuestFields: function() { return s } }), n("627341"), n("47120"); var i = n("278074"), r = n("887003"); class s { static build(e) { return new s(e) } get features() { return (0, i.match)(this.quest).with({ configVersion: 1 }, e => new Set(e.variants)).with({ configVersion: 2 }, e => new Set(e.features)).exhaustive() } _defaultRewardV2(e) { return e.rewardsConfig.rewards[0] } _defaultRewardV1(e) { var t; return null !== (t = e.rewardsConfig.rewards[0]) && void 0 !== t ? t : { messages: { name: e.messages.rewardName, nameWithArticle: e.messages.rewardNameWithArticle, redemptionInstructionsByPlatform: e.messages.rewardRedemptionInstructionsByPlatform }, tag: r.QuestRewardTypes.REWARD_CODE, asset: e.assets.rewardTile, approximateCount: null } } get defaultReward() { return (0, i.match)(this.quest).with({ configVersion: 1 }, e => this._defaultRewardV1(e)).with({ configVersion: 2 }, e => this._defaultRewardV2(e)).exhaustive() } get defaultRewardAsset() { return (0, i.match)(this.quest).with({ configVersion: 1 }, e => e.assets.rewardTile).with({ configVersion: 2 }, e => this._defaultRewardV2(e).asset).exhaustive() } get defaultRewardRedemptionInstructionsByPlatform() { return (0, i.match)(this.quest).with({ configVersion: 1 }, e => e.messages.rewardRedemptionInstructionsByPlatform).with({ configVersion: 2 }, e => this._defaultRewardV2(e).messages.redemptionInstructionsByPlatform).exhaustive() } get rewardsExpireAt() { return (0, i.match)(this.quest).with({ configVersion: 1 }, e => e.rewardCodeExpiresAt).with({ configVersion: 2 }, e => e.rewardsConfig.rewardsExpireAt).exhaustive() } get application() { return (0, i.match)(this.quest).with({ configVersion: 1 }, e => ({ id: e.applicationId, name: e.applicationName, link: e.getGameLink, ids: [e.applicationId, ...e.supplementaryApplicationIds] })).with({ configVersion: 2 }, e => ({ ...e.application, ids: [e.application.id] })).exhaustive() } get rewardPlatforms() { return (0, i.match)(this.quest).with({ configVersion: 1 }, e => e.rewardCodePlatforms).with({ configVersion: 2 }, e => e.rewardsConfig.platforms).exhaustive() } constructor(e) { var t, n, i; t = this, i = void 0, (n = "quest") in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i, this.quest = e } } }, 312046: function(e, t, n) { "use strict"; n.r(t), n.d(t, { questFromServerV2: function() { return s } }); var i = n("418793"), r = n("460597"); let s = e => ({ id: e.id, configVersion: 2, startsAt: e.starts_at, expiresAt: e.expires_at, features: e.features, experiments: { rollout: e.experiments.rollout, targeting: e.experiments.targeting, preview: e.experiments.preview }, application: { id: e.application.id, name: e.application.name, link: e.application.link }, assets: { hero: e.assets.hero, questBarHero: e.assets.quest_bar_hero, gameTile: e.assets.game_tile, logotype: e.assets.logotype }, colors: { primary: e.colors.primary, secondary: e.colors.secondary }, messages: { questName: e.messages.quest_name, gameTitle: e.messages.game_title, gamePublisher: e.messages.game_publisher }, taskConfig: (0, r.questTaskConfigFromServer)(e.task_config), rewardsConfig: (0, i.questRewardsConfigV2FromServer)(e.rewards_config) }) }, 418793: function(e, t, n) { "use strict"; n.r(t), n.d(t, { questRewardsConfigV2FromServer: function() { return o } }), n("47120"); var i = n("887003"), r = n("497505"); function s(e) { let t = {}; for (let n of Object.keys(e)) { let i = parseInt(n); r.QUEST_REWARD_CODE_PLATFORMS_SET.has(i) && (t[i] = e[n]) } return t } let a = e => { let t = { skuId: e.sku_id, asset: e.asset }; switch (e.type) { case i.QuestRewardTypes.REWARD_CODE: return { type: i.QuestRewardTypes.REWARD_CODE, messages: { redemptionInstructionsByPlatform: s(e.messages.redemption_instructions_by_platform), name: e.messages.name, nameWithArticle: e.messages.name_with_article }, approximateCount: e.approximate_count, ...t }; case i.QuestRewardTypes.COLLECTIBLE: return { type: i.QuestRewardTypes.COLLECTIBLE, messages: { redemptionInstructionsByPlatform: s(e.messages.redemption_instructions_by_platform), name: e.messages.name, nameWithArticle: e.messages.name_with_article }, ...t }; case i.QuestRewardTypes.IN_GAME: return { type: i.QuestRewardTypes.IN_GAME, messages: { redemptionInstructionsByPlatform: s(e.messages.redemption_instructions_by_platform), name: e.messages.name, nameWithArticle: e.messages.name_with_article }, ...t } } }, o = e => ({ assignmentMethod: e.assignment_method, rewards: e.rewards.map(a), rewardsExpireAt: e.rewards_expire_at, platforms: e.platforms }) }, 460597: function(e, t, n) { "use strict"; n.r(t), n.d(t, { questTaskConfigFromServer: function() { return a } }), n("47120"); var i = n("742635"); let r = e => { let t = {}; for (let n of Object.keys(e)) { let i = e[n]; null != i && (t[n] = { eventName: i.event_name, target: i.target, externalIds: i.external_ids }) } return t }, s = e => { let t = {}; for (let n of Object.keys(e)) { let i = e[n]; null != i && (t[n] = { eventName: i.event_name, title: i.title, target: i.target, description: i.description }) } return t }, a = e => { switch (e.type) { case i.QuestTaskConfigTypes.FIRST_PARTY: return { type: i.QuestTaskConfigTypes.FIRST_PARTY, tasks: r(e.tasks), joinOperator: e.join_operator }; case i.QuestTaskConfigTypes.THIRD_PARTY: return { type: i.QuestTaskConfigTypes.THIRD_PARTY, tasks: s(e.tasks), enrollmentUrl: e.enrollment_url, developerApplicationId: e.developer_application_id, joinOperator: e.join_operator } } } }, 874137: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QuestContentImpressionTracker: function() { return S } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("153832"), a = n("286379"), o = n("442837"), l = n("434650"), u = n("110924"), d = n("797614"), _ = n("451478"), c = n("617136"), E = n("184309"), I = n("981631"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class f { constructor(e, t, n, i, r) { var o = this; T(this, "id", void 0), T(this, "quests", void 0), T(this, "questContent", void 0), T(this, "questContentPosition", void 0), T(this, "trackGuildAndChannelMetadata", void 0), T(this, "triggeredByStatusChange", void 0), T(this, "beatTimeout", void 0), T(this, "lastBeatTime", void 0), T(this, "minViewTimeReachedTimeout", void 0), T(this, "minViewTimeSecond", void 0), T(this, "minViewportPercentage", void 0), T(this, "onMinViewTimeReached", () => { this.quests.forEach(e => { (0, c.trackQuestEvent)({ questId: e.id, event: I.AnalyticEvents.QUEST_CONTENT_VIEWED, properties: { min_view_time_seconds: this.minViewTimeSecond, min_viewport_percentage: this.minViewportPercentage, triggered_by_status_change: this.triggeredByStatusChange, ...this.commonProperties(e) }, trackGuildAndChannelMetadata: this.trackGuildAndChannelMetadata }) }) }), T(this, "heartbeat", function() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; o.quests.forEach(t => { null != o.lastBeatTime && (0, c.trackQuestEvent)({ questId: t.id, event: I.AnalyticEvents.QUEST_CONTENT_VIEW_TIME, properties: { is_termination_beat: e, viewed_time_ms: Date.now() - o.lastBeatTime, triggered_by_status_change: o.triggeredByStatusChange, ...o.commonProperties(t) }, trackGuildAndChannelMetadata: o.trackGuildAndChannelMetadata }) }), o.lastBeatTime = Date.now() }), T(this, "commonProperties", e => ({ impression_id: this.id, quest_status: (0, c.getQuestStatus)(e), ...(0, c.getContentProperties)(this.questContent, this.questContentPosition) })), T(this, "start", () => { this.stop(!1), this.lastBeatTime = Date.now(), this.beatTimeout = window.setInterval(() => this.heartbeat(), 6e4), this.minViewTimeReachedTimeout = window.setTimeout(this.onMinViewTimeReached, 1e3 * this.minViewTimeSecond), this.quests.forEach(e => { (0, c.trackQuestEvent)({ questId: e.id, event: I.AnalyticEvents.QUEST_CONTENT_LOADED, properties: { triggered_by_status_change: this.triggeredByStatusChange, ...this.commonProperties(e) }, trackGuildAndChannelMetadata: this.trackGuildAndChannelMetadata }) }), (0, E.isEligibleForQuestsClientMonitoring)("QuestImpressionTracker") && d.default.increment({ name: a.MetricEvents.QUEST_CONTENT_IMPRESSION, tags: ["quest_content:".concat((0, c.getQuestContentName)(this.questContent))] }) }), T(this, "stop", function() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; e && o.heartbeat(!0), o.lastBeatTime = void 0, clearInterval(o.beatTimeout), clearTimeout(o.minViewTimeReachedTimeout) }), this.id = (0, s.v4)(), this.questContent = t, this.questContentPosition = n, this.minViewTimeSecond = 1, this.minViewportPercentage = .5, this.quests = Array.isArray(e) ? e : [e], this.trackGuildAndChannelMetadata = r, this.triggeredByStatusChange = i } } function S(e) { let t = Array.isArray(e.questOrQuests) ? e.questOrQuests.sort().map(e => e.id).join("_") : e.questOrQuests.id; return (0, i.jsx)(h, { ...e }, "".concat(t, "_").concat(e.questContent)) } function h(e) { var t; let n = (0, o.useStateFromStores)([_.default], () => _.default.isFocused()), s = n !== (0, u.default)(n), [a, d] = r.useState(!1), E = null !== (t = e.overrideVisibility) && void 0 !== t ? t : a, I = E !== (0, u.default)(E), T = Array.isArray(e.questOrQuests) ? null : (0, c.getQuestStatus)(e.questOrQuests), S = (0, u.default)(T), h = T !== S, A = r.useRef(null), m = (0, l.useIsVisible)(e => d(e), .5); return r.useEffect(() => () => { null != A.current && A.current.stop() }, []), r.useEffect(() => { let t = n && E, i = (I || s || h) && t, r = (I || s) && !t || h; (i || r) && null != A.current && A.current.stop(), i && (A.current = new f(e.questOrQuests, e.questContent, e.questContentPosition, h, e.trackGuildAndChannelMetadata), A.current.start()) }, [n, E, A, s, I, e.questOrQuests, e.questContent, e.questContentPosition, e.trackGuildAndChannelMetadata, h]), (0, i.jsx)(i.Fragment, { children: e.children(m) }) } }, 644646: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("230711"), d = n("607070"), _ = n("507893"), c = n("810090"), E = n("617136"), I = n("918701"), T = n("566078"), f = n("78826"), S = n("981631"), h = n("689938"), A = n("680273"); t.default = function(e) { let { className: t, quest: n, autoplay: s = !0, learnMoreStyle: m = null } = e, N = (0, o.useStateFromStores)([d.default], () => d.default.useReducedMotion), p = (0, I.getRewardAsset)(n), O = r.useMemo(() => (0, I.isAssetAnimated)(p.name), [p.name]), C = r.useCallback(t => { var i; (0, E.trackQuestContentClicked)({ questId: n.id, questContent: e.questContent, questContentPosition: e.questContentPosition, questContentCTA: E.QuestContentCTA.REWARD_LEARN_MORE }), u.default.open(S.UserSettingsSections.INVENTORY), null === (i = e.onClick) || void 0 === i || i.call(e, t) }, [n.id, e]), R = r.useRef(null), g = r.useRef(s); r.useEffect(() => { var e, t; O && !N && null != R.current && (s && !g.current ? null === (e = R.current) || void 0 === e || e.play() : !s && g.current && (null === (t = R.current) || void 0 === t || t.pause()), g.current = s) }, [s, O, N]); let L = O ? (0, i.jsx)(f.QuestsAsset, { id: "QuestRewardTile_rewardTileAnimated", children: e => (0, i.jsx)(c.default, { ref: t => { e.current = t, R.current = t }, autoPlay: !N && s, loop: !0, muted: !0, playsInline: !0, className: A.questRewardTileAsset, controls: !1, children: (0, i.jsx)("source", { src: p.url, type: (0, I.getVideoAssetMimeType)(p.url) }) }) }) : (0, i.jsx)(f.QuestsAsset, { id: "QuestRewardTile_rewardTileStatic", children: e => (0, i.jsx)("img", { ref: e, alt: T.SharedQuestFields.build(n.config).defaultReward.messages.name, className: a()(A.questRewardTileAsset, A.questRewardTileAssetStatic), src: p.url }) }); return null == m ? (0, i.jsx)("div", { className: a()(t, A.questRewardTile), children: L }) : (0, i.jsxs)(l.Clickable, { className: a()(A.questRewardTile, A.questRewardTileInteractive, t), onClick: C, children: ["text" === m && (0, i.jsx)(l.Text, { color: "always-white", variant: "text-xs/normal", className: A.questRewardTileDetailsLearnMore, children: h.default.Messages.QUESTS_LEARN_MORE_STACKED.format() }), "icon" === m && (0, i.jsx)("div", { className: A.questRewardTileDetailsLearnMore, children: (0, i.jsx)(_.default, { color: l.tokens.colors.WHITE.css, width: 12, height: 12 }) }), L] }) } }, 78826: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QuestsAsset: function() { return d }, QuestsAssetContextProvider: function() { return u }, useQuestsAssetsLoadState: function() { return _ } }), n("411104"), n("47120"); var i = n("735250"), r = n("470079"), s = n("374470"), a = n("960048"); let o = r.createContext({ registerAsset: () => {}, unregisterAsset: () => {}, hasError: !1, isLoading: !0 }); function l(e) { return (0, s.isElement)(e, HTMLImageElement) ? e.complete : !(0, s.isElement)(e, HTMLVideoElement) || e.readyState >= 2 } function u(e) { let { children: t, isPreview: n = !1, sentrySource: u } = e, [d, _] = r.useState(!1), [c, E] = r.useState(new Set), [I, T] = r.useState(!1), f = r.useRef(!1); r.useEffect(() => { let e = new Set; for (let t of c) !l(t) && e.add(t); e.size !== c.size && E(e) }, [c]); let S = r.useCallback(e => { let { assetNode: t, nodeId: i, errorPrefix: r, errorMessage: o } = e; if (!n && null != u) { var l, d, c; a.default.captureException(Error("".concat(r, ": ").concat(null != o ? "".concat(o, ", ") : "").concat((l = t, (0, s.isElement)(l, HTMLImageElement) ? l.getAttribute("src") : (0, s.isElement)(l, HTMLVideoElement) ? null !== (c = null === (d = l.querySelectorAll("source")[0]) || void 0 === d ? void 0 : d.getAttribute("src")) && void 0 !== c ? c : "video" : l.tagName), ", ").concat(i)), { tags: { source: u } }), _(!0) } }, [n, u]), h = r.useCallback(e => { E(t => { let n = new Set(t); return n.delete(e), n }) }, []), A = r.useCallback((e, t) => { var n; if (T(!0), l(e)) return; E(t => { let n = new Set(t); return n.add(e), n }); let i = (n = e, (0, s.isElement)(n, HTMLImageElement) ? "load" : (0, s.isElement)(n, HTMLVideoElement) ? "canplaythrough" : "load"); e.addEventListener(i, function t() { h(e), e.removeEventListener(i, t) }); e.addEventListener("error", function n(i) { h(e), S({ assetNode: e, nodeId: t, errorPrefix: "Error loading asset", errorMessage: "message" in i ? i.message : null }), e.removeEventListener("error", n) }) }, [S, h]), m = r.useMemo(() => c.size > 0 || !I, [I, c]); r.useEffect(() => { !m && (f.current = !0) }, [m]); let N = r.useMemo(() => ({ registerAsset: A, unregisterAsset: h, hasError: d, isLoading: m && !f.current }), [A, h, d, m]); return (0, i.jsx)(o.Provider, { value: N, children: t }) } function d(e) { let { id: t, children: n } = e, { registerAsset: i, unregisterAsset: s } = r.useContext(o), a = r.useRef(null); return r.useEffect(() => { let e = a.current; return null != e && i(e, t), () => { null != e && s(e) } }, [i, s, t]), n(a) } function _() { let { hasError: e, isLoading: t } = r.useContext(o); return { hasError: e, isLoading: t } } }, 667105: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useHandleClaimQuestsReward: function() { return c }, useHasLaunchedGame: function() { return E } }); var i = n("470079"), r = n("442837"), s = n("594190"), a = n("594174"), o = n("617136"), l = n("918701"), u = n("920916"), d = n("669041"), _ = n("341907"); function c(e) { let { quest: t, location: n, questContentPosition: s } = e, c = (0, r.useStateFromStores)([a.default], () => { var e; return null === (e = a.default.getCurrentUser()) || void 0 === e ? void 0 : e.verified }); return i.useCallback(() => { null != t && ((0, o.trackQuestContentClicked)({ questId: t.id, questContent: n, questContentCTA: o.QuestContentCTA.CLAIM_REWARD, questContentPosition: s }), c ? (0, l.hasCollectiblesQuestReward)(t.config) ? (0, u.openCollectibleRewardModal)(t, n) : (0, _.openQuestsRewardCodeModal)({ questId: t.id, location: n, questContentPosition: s }) : (0, d.openRewardModalUnverified)()) }, [t, n, s, c]) } function E(e) { var t; let n = (0, r.useStateFromStoresArray)([s.default], () => s.default.getGamesSeen(!1)).find(t => (null == t ? void 0 : t.id) === e); if (null == n) return !1; let i = Date.now() - 2592e7; return i <= (null !== (t = n.lastLaunched) && void 0 !== t ? t : 0) } }, 553393: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("920906"), a = n("91192"), o = n("946835"), l = n("442837"), u = n("780384"), d = n("481060"), _ = n("287734"), c = n("872810"), E = n("230711"), I = n("393238"), T = n("40851"), f = n("607070"), S = n("258609"), h = n("102172"), A = n("210887"), m = n("592125"), N = n("430824"), p = n("496675"), O = n("979651"), C = n("617136"), R = n("113434"), g = n("497505"), L = n("918701"), v = n("874137"), D = n("644646"), M = n("667105"), y = n("981631"), P = n("231338"), U = n("689938"), b = n("500766"); let G = "11px"; function w(e, t) { return null != e && null != t && (0, h.canWatchStream)(t, O.default, N.default, p.default, S.default)[0] } t.default = function(e) { var t, S, h; let { quest: N, memberListItemRef: p, applicationStream: O, position: k, closePopout: B, updatePosition: V } = e, x = (0, l.useStateFromStores)([m.default], () => { var e; return null !== (e = m.default.getChannel(null == O ? void 0 : O.channelId)) && void 0 !== e ? e : null }), F = (0, M.useHandleClaimQuestsReward)({ quest: N, location: g.QuestContent.MEMBERS_LIST }), H = (0, R.useIsQuestExpired)(N), Y = (null == N ? void 0 : null === (t = N.userStatus) || void 0 === t ? void 0 : t.claimedAt) != null, j = (null == N ? void 0 : null === (S = N.userStatus) || void 0 === S ? void 0 : S.enrolledAt) != null, W = (null == N ? void 0 : null === (h = N.userStatus) || void 0 === h ? void 0 : h.completedAt) != null, K = (0, l.useStateFromStores)([A.default], () => A.default.getState().theme), z = (0, u.isThemeDark)(K) ? P.ThemeTypes.DARK : P.ThemeTypes.LIGHT, Z = (0, l.useStateFromStores)([f.default], () => f.default.useReducedMotion), { ref: X, height: Q } = (0, I.default)(), [q, J] = r.useState(Z), $ = (0, T.useWindowDispatch)(), ee = (0, a.useListContainerScrollerRef)(); r.useEffect(() => { let e = ee.current; return null == e || e.addEventListener("scroll", B), () => { null == e || e.removeEventListener("scroll", B) } }, [B, ee]), r.useEffect(() => { let e = ee.current, t = p.current; if (null == e || null == t) return; let n = new MutationObserver(() => V()); return n.observe(e, { childList: !0, subtree: !0 }), () => { n.disconnect() } }, [p, ee, V]); let et = (0, s.useSpring)({ from: { height: 0 }, height: null != Q ? Q : 0, config: { tension: 450, friction: 45 }, immediate: Z, onRest: () => J(!0) }), en = (0, s.useTransition)(q, { from: { opacity: 0, scale: 0 }, enter: { opacity: 1, scale: 1 } }), ei = () => { $.dispatch(y.ComponentActions.POPOUT_CLOSE) }, er = "top" === k ? "".concat("4px", " ").concat("4px", " 0 0") : "0 0 ".concat("4px", " ").concat("4px"); if (null == N || H || Y && !w(O, x)) return null; let es = () => { (0, C.trackQuestContentClicked)({ questId: N.id, questContent: g.QuestContent.MEMBERS_LIST, questContentCTA: C.QuestContentCTA.OPEN_DISCLOSURE, trackGuildAndChannelMetadata: !0 }), (0, d.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("4266")]).then(n.bind(n, "316210")); return t => (0, i.jsx)(e, { ...t, questContent: g.QuestContent.MEMBERS_LIST, questConfig: N.config }) }) }, ea = () => { (0, C.trackQuestContentClicked)({ questId: N.id, questContent: g.QuestContent.MEMBERS_LIST, questContentCTA: C.QuestContentCTA.LEARN_MORE, trackGuildAndChannelMetadata: !0 }), E.default.open(y.UserSettingsSections.INVENTORY) }, eo = e => { e.stopPropagation(), es() }, el = () => { if (w(O, x) && null != x) return (0, C.trackQuestContentClicked)({ questId: N.id, questContent: g.QuestContent.MEMBERS_LIST, questContentCTA: C.QuestContentCTA.WATCH_STREAM, trackGuildAndChannelMetadata: !0 }), _.default.selectVoiceChannel(x.id), (0, c.watchStreamAndTransitionToStream)(O); ea() }, eu = W && !Y ? { headerText: U.default.Messages.QUESTS_MEMBERS_LIST_CLAIM_REWARD, ctaText: U.default.Messages.QUESTS_CLAIM_REWARD, handleClickCta: F, tileAssetType: "reward" } : j && !Y ? { headerText: U.default.Messages.QUESTS_MEMBERS_LIST_FINISH, ctaText: U.default.Messages.QUESTS_CHECK_PROGRESS, handleClickCta: ea, tileAssetType: "reward" } : w(O, x) ? { headerText: U.default.Messages.QUESTS_MEMBERS_LIST_AVAILBLE, ctaText: U.default.Messages.QUESTS_JOIN_ME, handleClickCta: el, tileAssetType: "game" } : { headerText: U.default.Messages.QUESTS_MEMBERS_LIST_AVAILBLE, ctaText: U.default.Messages.QUESTS_UNLOCK_REWARDS, handleClickCta: ea, tileAssetType: "game" }; return (0, i.jsx)(v.QuestContentImpressionTracker, { questOrQuests: N, questContent: g.QuestContent.MEMBERS_LIST, trackGuildAndChannelMetadata: !0, children: e => { var t, n; return (0, i.jsx)(s.animated.div, { ref: t => { e.current = t }, "aria-expanded": q, className: b.wrapper, style: { width: null !== (n = null === (t = p.current) || void 0 === t ? void 0 : t.clientWidth) && void 0 !== n ? n : 222, height: et.height, overflow: q ? "visible" : "hidden", borderRadius: er }, children: (0, i.jsxs)("div", { ref: e => { X.current = e }, className: b.container, style: { borderRadius: er }, children: [(0, i.jsxs)("div", { className: b.top, children: [(0, i.jsxs)("div", { className: b.left, children: [(0, i.jsx)(d.Heading, { variant: "heading-sm/semibold", children: eu.headerText }), (0, i.jsxs)(d.Clickable, { className: b.help, onClick: e => { ei(), eo(e) }, children: [(0, i.jsx)(d.Text, { variant: "text-xs/medium", color: "text-muted", className: b.helpText, children: U.default.Messages.QUESTS_MEMBERS_LIST_PROMOTED_BY.format({ gamePublisher: N.config.messages.gamePublisher }) }), (0, i.jsx)(o.CircleQuestionIcon, { className: b.helpIcon, width: G, height: G, color: d.tokens.colors.INTERACTIVE_NORMAL })] })] }), (0, i.jsx)("div", { className: b.right, children: (0, i.jsxs)("div", { className: b.imgWrapper, children: [en((e, t) => t && (0, i.jsx)(s.animated.div, { style: e, className: b.imgUnderlay })), "game" === eu.tileAssetType && (0, i.jsx)("img", { alt: U.default.Messages.QUESTS_MEMBERS_LIST_GAME_TILE_ALT.format({ gameTitle: N.config.messages.gameTitle, gamePublisher: N.config.messages.gamePublisher }), className: b.assetTile, src: (0, L.getGameTileAssetUrl)(N, z) }), "reward" === eu.tileAssetType && (0, i.jsx)(D.default, { className: b.assetTile, quest: N, questContent: g.QuestContent.MEMBERS_LIST, learnMoreStyle: "icon", onClick: ei })] }) })] }), (0, i.jsx)(d.Button, { onClick: () => { ei(), eu.handleClickCta() }, color: d.Button.Colors.CUSTOM, className: b.ctaButton, children: eu.ctaText })] }) }) } }) } }, 114732: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("780384"), s = n("481060"), a = n("410030"), o = n("689938"), l = n("55386"), u = n("167969"), d = n("557256"); t.default = function(e) { let { onClose: t } = e, n = (0, a.default)(), _ = (0, r.isThemeDark)(n); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)(s.ModalHeader, { separator: !1, className: l.header, children: [(0, i.jsx)("img", { alt: "", className: l.headerImage, src: _ ? u : d }), (0, i.jsx)(s.Heading, { className: l.title, variant: "heading-xl/medium", children: o.default.Messages.STICKER_ASSET_LOAD_ERROR }), (0, i.jsx)(s.ModalCloseButton, { onClick: t, className: l.modalCloseButton })] }), (0, i.jsx)(s.ModalContent, { className: l.content, children: (0, i.jsx)(s.Text, { variant: "text-md/normal", children: o.default.Messages.ACTIVATE_DEVICE_ERROR_UNKNOWN }) }), (0, i.jsx)(s.ModalFooter, { className: l.modalFooter, children: (0, i.jsx)(s.Button, { color: s.Button.Colors.BRAND, size: s.Button.Sizes.MEDIUM, onClick: t, children: o.default.Messages.CLOSE }) })] }) } }, 920916: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return M }, openCollectibleRewardModal: function() { return y } }), n("773603"), n("47120"); var i = n("735250"), r = n("470079"), s = n("887024"), a = n("979554"), o = n("442837"), l = n("481060"), u = n("809206"), d = n("607070"), _ = n("235400"), c = n("204418"), E = n("583434"), I = n("530618"), T = n("164946"), f = n("166625"), S = n("25990"), h = n("594174"), A = n("810090"), m = n("272008"), N = n("497505"), p = n("918701"), O = n("114732"), C = n("675654"), R = n("689938"), g = n("130035"); function L() { let e = S.default.getAllPending(), t = (0, T.getAccountUpdateForUpdateRequest)(e); return (0, u.saveAccountChanges)(t).finally(u.resetPendingAccountChanges) } function v(e) { let { transitionState: t, onClose: n, quest: a, location: u, reward: _, decoration: c, onUseNow: E } = e, T = r.useRef(null), [f, S] = r.useState(null), A = r.useRef(new s.Environment), R = (0, o.useStateFromStores)([d.default], () => d.default.useReducedMotion), L = (0, o.useStateFromStores)([h.default], () => h.default.getCurrentUser()), v = (0, p.getHeroAssetUrl)(a), [M, y] = r.useState("loading"); r.useEffect(() => { var e; (null === (e = a.userStatus) || void 0 === e ? void 0 : e.claimedAt) == null && (0, m.claimQuestReward)(a.id, N.QuestRewardCodePlatforms.CROSS_PLATFORM, u).then(() => y("claimed")).catch(() => y("error")) }, [a, u]); let P = null == L || null == c || "loading" === M; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(s.ConfettiCanvas, { ref: S, className: g.confettiCanvas, environment: A.current }), (0, i.jsx)("div", { ref: T, children: (0, i.jsx)(l.ModalRoot, { transitionState: t, size: l.ModalSize.DYNAMIC, className: g.rootContainer, hideShadow: !0, children: P ? (0, i.jsx)("div", { className: g.spinnerContainer, children: (0, i.jsx)(l.Spinner, { className: g.spinner, type: l.Spinner.Type.SPINNING_CIRCLE }) }) : "error" === M ? (0, i.jsx)(O.default, { onClose: n }) : (0, i.jsx)(D, { user: L, primaryColor: a.config.colors.primary, secondaryColor: a.config.colors.secondary, decoration: c, decorationName: _.messages.name, backgroundUrl: v, isSaving: "applying" === M, onClose: n, onConfirm: () => { y("applying"), E().finally(n) } }) }) }), !R && "claimed" === M && (0, i.jsx)(I.default, { confettiTarget: T.current, confettiCanvas: f, sprites: C.COMMON_CONFETTI_SPRITES, colors: C.COMMON_CONFETTI_COLORS })] }) } function D(e) { let { user: t, decoration: n, decorationName: r, primaryColor: s, secondaryColor: a, backgroundUrl: o, isSaving: u, onClose: d, onConfirm: _ } = e; return (0, i.jsxs)("div", { className: g.claimedRootContainer, children: [(0, i.jsxs)("div", { className: g.headerContainer, children: [(0, i.jsx)(A.default, { className: g.headerBackground, autoPlay: !1, loop: !1, muted: !0, playsInline: !0, controls: !1, poster: o }), (0, i.jsxs)("div", { className: g.headerForeground, children: [(0, i.jsx)("div", { className: g.previewContainer, children: (0, i.jsx)(c.default, { user: t, guildId: null, avatarDecorationOverride: n }) }), (0, i.jsx)(l.ModalCloseButton, { className: g.close, withCircleBackground: !0, onClick: d })] })] }), (0, i.jsx)(l.ModalFooter, { className: g.footerContainer, separator: !1, children: (0, i.jsxs)("div", { className: g.gradient, style: { backgroundImage: "linear-gradient(180deg, ".concat(s, ", ").concat(a, ")") }, children: [(0, i.jsx)(l.Heading, { variant: "heading-lg/bold", color: "always-white", className: g.heading, children: R.default.Messages.QUESTS_REWARD_AVATAR_DECORATION_HEADER }), (0, i.jsx)(l.Text, { variant: "text-sm/normal", color: "always-white", className: g.text, children: R.default.Messages.QUESTS_REWARD_AVATAR_DECORATION_BODY.format({ decorationName: r }) }), (0, i.jsx)(l.Button, { submitting: u, onClick: _, children: R.default.Messages.COLLECTIBLES_USE_NOW })] }) })] }) } function M(e) { var t, n; let { quest: s, location: o, onClose: l, transitionState: d } = e, c = r.useMemo(() => (0, p.getCollectiblesQuestReward)(s.config), [s]), [I, T] = function(e) { let { product: t, isFetching: n } = (0, E.useFetchCollectiblesProduct)(e), {} = (0, f.default)({}), i = r.useMemo(() => { if (null == t || n) return null; let e = t.items.find(e => e.type === a.CollectiblesItemType.AVATAR_DECORATION); return null == e ? null : e }, [t, n]); return [i, () => null == i ? Promise.reject() : ((0, u.setPendingAvatarDecoration)(i), L())] }(null !== (n = null == c ? void 0 : c.skuId) && void 0 !== n ? n : null); return null == c ? null : (null === (t = s.userStatus) || void 0 === t ? void 0 : t.claimedAt) != null ? (0, i.jsx)(_.default, { transitionState: d, onCloseModal: L, onClose: l, analyticsLocations: [], initialSelectedDecoration: I }) : (0, i.jsx)(v, { onClose: l, transitionState: d, quest: s, location: o, reward: c, decoration: I, onUseNow: T }) } function y(e, t) { (0, l.openModalLazy)(async () => { let { default: r } = await Promise.resolve().then(n.bind(n, "920916")); return n => (0, i.jsx)(r, { ...n, quest: e, location: t }) }) } }, 669041: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QuestsRewardModalUnverified: function() { return I }, openRewardModalUnverified: function() { return T } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("893776"), l = n("594174"), u = n("41542"), d = n("918701"), _ = n("689938"), c = n("583346"), E = n("800010"); function I(e) { let { transitionState: t, onClose: n } = e, I = (0, s.useStateFromStores)([l.default], () => { var e; return null === (e = l.default.getCurrentUser()) || void 0 === e ? void 0 : e.email }), [T, f] = r.useState({ status: "unknown" }); r.useEffect(() => { f({ status: "loading" }), o.default.verifyResend().then(() => f({ status: "success" }), e => { f({ status: "error" }), (0, d.captureQuestsException)(e, { tags: { location: "QuestsRewardModalUnverified" } }) }) }, []); let S = () => (0, i.jsx)(a.ModalFooter, { className: c.modalFooter, children: (0, i.jsx)(a.Button, { color: a.Button.Colors.BRAND, size: a.Button.Sizes.MEDIUM, onClick: n, children: _.default.Messages.CLOSE }) }); return (0, i.jsxs)(a.ModalRoot, { transitionState: t, disableTrack: !0, children: [(0, i.jsx)("img", { alt: "", className: c.headerImage, src: E }), (0, i.jsxs)(a.ModalHeader, { separator: !1, className: c.header, children: [(0, i.jsx)(a.Heading, { className: c.title, variant: "heading-xl/bold", children: _.default.Messages.QUESTS_REWARD_VERIFICATION_TITLE }), (0, i.jsx)(a.ModalCloseButton, { onClick: n, className: c.modalCloseButton })] }), "loading" === T.status && (0, i.jsx)(a.ModalContent, { className: c.content, children: (0, i.jsx)(a.Spinner, {}) }), "error" === T.status && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(a.ModalContent, { className: c.content, children: (0, i.jsx)(a.Text, { variant: "text-md/normal", children: _.default.Messages.QUESTS_REWARD_VERIFICATION_ERROR }) }), S()] }), "success" === T.status && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(a.ModalContent, { className: c.content, children: (0, i.jsx)(a.Text, { variant: "text-md/normal", children: _.default.Messages.QUESTS_REWARD_VERIFICATION_BODY.format({ emailAddress: I, emailAddressLink: "mailto:".concat(I) }) }) }), (0, i.jsx)(a.ModalContent, { className: c.content, children: (0, i.jsxs)("div", { className: c.tooltip, children: [(0, i.jsx)(u.default, { className: c.infoFilledIcon }), (0, i.jsx)(a.Text, { className: c.tooltipText, variant: "text-sm/normal", children: _.default.Messages.USER_SETTINGS_ACCOUNT_CHANGE_EMAIL_CHECK_SPAM })] }) }), S()] })] }) } function T() { (0, a.openModalLazy)(async () => { let { QuestsRewardModalUnverified: e } = await Promise.resolve().then(n.bind(n, "669041")); return t => (0, i.jsx)(e, { ...t }) }) } }, 341907: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openDisclosureModal: function() { return o }, openQuestsRewardCodeModal: function() { return a } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("617136"); function a(e) { let { questId: t, location: s, questContentPosition: a } = e; (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("61624")]).then(n.bind(n, "985866")); return n => (0, i.jsx)(e, { ...n, questId: t, questContentPosition: a, location: s }) }) } function o(e, t) { (0, s.trackQuestContentClicked)({ questId: e.id, questContent: t.content, questContentPosition: t.position, questContentCTA: t.ctaContent }), (0, r.openModalLazy)(async () => { let { default: r } = await Promise.all([n.e("99387"), n.e("4266")]).then(n.bind(n, "316210")); return n => (0, i.jsx)(r, { ...n, questContent: t.content, questConfig: e.config }) }) } }, 823385: function(e, t, n) { "use strict"; let i; n.r(t), n("653041"), n("47120"), n("733860"), n("724458"); var r, s = n("392711"), a = n.n(s), o = n("442837"), l = n("433517"), u = n("570140"), d = n("212819"), _ = n("938078"), c = n("781157"), E = n("220444"), I = n("601070"), T = n("210887"), f = n("314897"), S = n("592125"), h = n("703558"), A = n("984933"), m = n("271383"), N = n("430824"), p = n("496675"), O = n("306680"), C = n("944486"), R = n("914010"), g = n("9156"), L = n("483360"), v = n("823379"), D = n("981631"), M = n("689938"); function y(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let P = "seenQSTutorial", U = [d.AutocompleterResultTypes.USER, d.AutocompleterResultTypes.GROUP_DM, d.AutocompleterResultTypes.TEXT_CHANNEL, d.AutocompleterResultTypes.GUILD, d.AutocompleterResultTypes.APPLICATION, d.AutocompleterResultTypes.LINK], b = 0, G = !1, w = !1, k = null, B = [], V = null, x = 0, F = [], H = []; function Y() { w = N.default.getGuildCount() >= 3 || a().size(S.default.getMutablePrivateChannels()) >= 20, F = [] } function j(e) { let t = (0, _.default)(e); return null == t || null != k && k !== t.type ? null : t } function W(e) { var t; let { query: n, queryMode: r } = e, s = (0, c.isSplitMessagesTabAndOnMessagesTab)() ? void 0 : null !== (t = R.default.getGuildId()) && void 0 !== t ? t : void 0, a = new Set(["user:".concat(f.default.getId())]); null != s && a.add("guild:".concat(s)), i = null != i ? i : new d.default(K, U, null != r ? 100 : 5, { frecencyBoosters: !0, blacklist: a }), V = null, x = n.length, k = r, i.search(n) } function K(e, t) { ! function(e, t) { if (e.length !== t.length) return !1; for (let n = 0; n < e.length; n++) { let i = e[n], r = t[n]; if (i.record.id !== r.record.id) return !1 } return !0 }(e = "" === (t = t.trim()).trim() ? function() { var e, t; let n = null !== (e = R.default.getGuildId()) && void 0 !== e ? e : void 0, i = null !== (t = C.default.getChannelId()) && void 0 !== t ? t : void 0; switch (k) { case d.AutocompleterResultTypes.USER: { let e = f.default.getId(); return L.default.getRecentlyTalked(i, 100).filter(t => { let { record: n } = t; return n.id !== e }) } case d.AutocompleterResultTypes.APPLICATION: return L.default.queryApplications({ query: "", limit: 100, fuzzy: !0 }); case d.AutocompleterResultTypes.GUILD: return L.default.queryGuilds({ query: "", limit: 100, fuzzy: !0 }); case d.AutocompleterResultTypes.TEXT_CHANNEL: return L.default.queryChannels({ query: "", guildId: R.default.getGuildId(), limit: 100, fuzzy: !0 }); case d.AutocompleterResultTypes.VOICE_CHANNEL: return L.default.queryChannels({ query: "", guildId: R.default.getGuildId(), limit: 100, fuzzy: !0, filter: () => !0, type: A.GUILD_VOCAL_CHANNELS_KEY }) } let r = [], s = []; for (let e = 1; e < H.length; e += 1) { let t = j(H[e]); if (null != t)(t.type !== d.AutocompleterResultTypes.TEXT_CHANNEL && t.type !== d.AutocompleterResultTypes.VOICE_CHANNEL || p.default.can(D.Permissions.VIEW_CHANNEL, t.record)) && s.push(t) } s.length > 0 && r.push((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_LAST_CHANNEL), ...s); let o = function(e) { let t = []; return h.default.getRecentlyEditedDrafts(h.DraftType.ChannelMessage).forEach(n => { let { channelId: i } = n; if (e(i)) return; let r = j(i); null != r && t.push(r) }), t }(e => e === i || H.includes(e)); o.length > 0 && r.push((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_DRAFTS), ...o); let l = O.default.getMentionChannelIds().filter(e => e !== i && !H.includes(e)).map(e => j(e)).filter(v.isNotNullish).reverse(); if (l.length > 0 && (r.push((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_MENTIONS)), r = r.concat(l)), null != n) { let e = A.default.getSelectableChannelIds(n).filter(e => { let t = S.default.getChannel(e); return !(null == t || e === i || H.includes(e) || g.default.isChannelMuted(t.guild_id, e) || null != t.parent_id && g.default.isChannelMuted(t.guild_id, t.parent_id)) && (0, E.getHasImportantUnread)(t) }).map(e => j(e)).filter(e => e); Object.values(I.default.getActiveJoinedUnreadThreadsForGuild(n)).forEach(t => { for (let n in t) { let t = j(n); null != t && e.push(t) } }), e.length > 0 && (r.push((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_UNREAD_CHANNELS)), r = r.concat(e)) } return a()(r).uniqBy(e => e.record.id).value() }() : e, F) && (F = e, ! function(e, t) { switch (k) { case d.AutocompleterResultTypes.USER: { let t = N.default.getGuild(R.default.getGuildId()); e.unshift((0, d.createHeaderResult)(null != t ? M.default.Messages.QUICKSWITCHER_QUERYMODE_USERS_IN_GUILD.format({ name: t.name }) : M.default.Messages.QUICKSWITCHER_QUERYMODE_USERS)), B = e; break } case d.AutocompleterResultTypes.TEXT_CHANNEL: e.unshift((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_QUERYMODE_TEXT_CHANNELS)), B = e; break; case d.AutocompleterResultTypes.VOICE_CHANNEL: e.unshift((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_QUERYMODE_VOICE_CHANNELS)), B = e; break; case d.AutocompleterResultTypes.GUILD: e.unshift((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_QUERYMODE_GUILDS)), B = e; break; case d.AutocompleterResultTypes.APPLICATION: e.unshift((0, d.createHeaderResult)(M.default.Messages.QUICKSWITCHER_QUERYMODE_APPLICATIONS)), B = e; break; default: B = e } if (t !== V) V = t, x = Math.max(t.length, x), b = (0, d.findNextSelectedResult)(d.FindResultDirections.DOWN, -1, B); else { let e = B[b]; null != e && e.type === d.AutocompleterResultTypes.HEADER && (b = (0, d.findNextSelectedResult)(d.FindResultDirections.DOWN, b, B)) } X.emitChange() }(e, t)) } function z() { V = null, x = 0, F = [], null != i && (i.destroy(), i = null) } class Z extends(r = o.default.PersistedStore) { initialize(e) { var t; this.waitFor(m.default, N.default, S.default), this.syncWith([T.default], () => !0), G = l.Storage.get(P) || !1, H = null !== (t = null == e ? void 0 : e.channelHistory) && void 0 !== t ? t : [] } getState() { return { channelHistory: H } } isOpen() { return null != i } getResultTotals(e) { return null == i ? 0 : null == e ? i.results.reduce((e, t) => t.type !== d.AutocompleterResultTypes.HEADER ? e + 1 : e, 0) : i.results.reduce((t, n) => n.type === e ? t + 1 : t, 0) } channelNoticePredicate(e, t) { let n = Date.now() - t >= D.CHANNEL_NOTICE_SHOW_DELAY; return w && n } getFrequentGuilds() { return null != i ? i.queryGuilds("", 100) : null } getFrequentGuildsLength() { return null != i ? i.queryGuilds("", 100).length : 0 } getChannelHistory() { return H } getProps() { return { theme: T.default.theme, query: null != i ? i.query : "", queryMode: k, results: B, selectedIndex: b, seenTutorial: G, maxQueryLength: x } } } y(Z, "displayName", "QuickSwitcherStore"), y(Z, "persistKey", "QuickSwitcherStore"); let X = new Z(u.default, { CONNECTION_OPEN: Y, CONNECTION_OPEN_SUPPLEMENTAL: Y, QUICKSWITCHER_SHOW: W, SHOW_ACTION_SHEET_QUICK_SWITCHER: W, QUICKSWITCHER_HIDE: z, OVERLAY_SET_INPUT_LOCKED: z, HIDE_ACTION_SHEET_QUICK_SWITCHER: z, QUICKSWITCHER_SEARCH: function(e) { var t, n; let { query: r, queryMode: s } = e; if (null == i) return !1; let a = null !== (t = R.default.getGuildId()) && void 0 !== t ? t : null; if (k !== s) { i.setResultTypes(null != s ? [s] : U), i.setLimit(null != s ? 100 : 5); let e = null !== (n = R.default.getGuildId()) && void 0 !== n ? n : void 0; s === d.AutocompleterResultTypes.USER && null != e ? i.setOptions({ userFilters: { guild: e, friends: !0 } }, !0) : s === d.AutocompleterResultTypes.VOICE_CHANNEL ? i.setOptions({ voiceChannelGuildFilter: null }, !0) : i.setOptions({ userFilters: null, voiceChannelGuildFilter: void 0 }, !0) } k = s, i.search(r, k === d.AutocompleterResultTypes.USER ? a : void 0) }, QUICKSWITCHER_SELECT: function(e) { b = e.selectedIndex }, QUICKSWITCHER_SWITCH_TO: function() { if (G) return !1; G = !0, l.Storage.set(P, !0) }, CHANNEL_SELECT: function(e) { let { channelId: t } = e; if (null == t) return !1; (H = H.filter(e => e !== t)).unshift(t), H.length > 4 && (H.length = 4) } }); t.default = X }, 912893: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addReactionPickerAnimation: function() { return r }, clearReactionPickerAnimation: function() { return s } }); var i = n("570140"); function r(e, t, n, r) { i.default.dispatch({ type: "BURST_REACTION_PICKER_ANIMATION_ADD", messageId: e, emojiName: t, emojiId: n, startPosition: r }) } function s(e, t, n) { i.default.dispatch({ type: "BURST_REACTION_PICKER_ANIMATION_CLEAR", messageId: e, emojiName: t, emojiId: n }) } }, 222677: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReactionLocations: function() { return r }, addReaction: function() { return O }, getReactors: function() { return p }, playBurstReaction: function() { return C }, removeAllReactions: function() { return R }, removeEmojiReactions: function() { return g }, removeReaction: function() { return L }, removeReactionWithConfirmation: function() { return D } }); var i, r, s = n("544891"), a = n("780384"), o = n("570140"), l = n("668781"), u = n("566006"), d = n("346479"), _ = n("314897"), c = n("375954"), E = n("585483"), I = n("70956"), T = n("176354"), f = n("563114"), S = n("981631"), h = n("689938"); function A(e, t, n) { let { status: i, body: r } = e; if (429 === i) return setTimeout(t, e.body.retry_after * I.default.Millis.SECOND), !1; if (403 === i) switch (r && r.code) { case S.AbortCodes.TOO_MANY_REACTIONS: l.default.show({ title: h.default.Messages.TOO_MANY_REACTIONS_ALERT_HEADER, body: h.default.Messages.TOO_MANY_REACTIONS_ALERT_BODY, confirmText: h.default.Messages.OKAY }); break; case S.AbortCodes.REACTION_BLOCKED: E.ComponentDispatch.dispatch(S.ComponentActions.SHAKE_APP, { duration: 200, intensity: 2 }) } else if (!n.isRetry) return t(), !1; return !0 } function m(e, t, n, i, r) { var s, a; o.default.dispatch({ type: e, channelId: t, messageId: n, userId: null !== (s = null == r ? void 0 : r.userId) && void 0 !== s ? s : _.default.getId(), emoji: i, optimistic: !0, colors: null !== (a = null == r ? void 0 : r.colors) && void 0 !== a ? a : [], reactionType: (null == r ? void 0 : r.burst) ? u.ReactionTypes.BURST : u.ReactionTypes.NORMAL }) } function N(e) { let { channelId: t, messageId: n, emoji: i, userId: r, useTypeEndpoint: s = !1, type: a = u.ReactionTypes.NORMAL } = e, o = null != i.id ? "".concat(i.name, ":").concat(i.id) : i.name; return null == r ? S.Endpoints.REACTIONS(t, n, o) : s ? S.Endpoints.REACTION_WITH_TYPE(t, n, o, r, a) : S.Endpoints.REACTION(t, n, o, r) }(i = r || (r = {})).MESSAGE = "Message", i.FORUM_TOOLBAR = "Forum Toolbar", i.MOBILE_MEDIA_VIEWER = "Mobile Media Viewer"; async function p(e) { let { channelId: t, messageId: n, emoji: i, limit: r, after: a, type: l } = e, d = l === u.ReactionTypes.VOTE ? function(e, t, n) { var i; let r = null !== (i = n.id) && void 0 !== i ? i : n.name; return S.Endpoints.POLL_ANSWER_VOTERS(e, t, r) }(t, n, i) : N({ channelId: t, messageId: n, emoji: i }), _ = await s.HTTP.get({ url: d, query: { limit: r, after: a, type: l }, oldFormErrors: !0 }), c = l === u.ReactionTypes.VOTE ? _.body.users : _.body; return o.default.dispatch({ type: "MESSAGE_REACTION_ADD_USERS", channelId: t, messageId: n, users: c, emoji: i, reactionType: l }), c } async function O(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "Message", r = arguments.length > 4 ? arguments[4] : void 0, o = null != r && !!r.burst, _ = null != r && !!r.isRetry; if (!_ && function(e, t, n, i) { let r = c.default.getMessage(e, t); return null != r && r.userHasReactedWithEmoji(n, i) }(e, t, n, o)) { l.default.show({ title: h.default.Messages.EMOJI_PICKER_DOUBLE_REACTION_SUPER_ERROR_TITLE, body: h.default.Messages.EMOJI_PICKER_DOUBLE_REACTION_SUPER_ERROR_BODY, confirmText: h.default.Messages.GOT_IT }); return } let E = await v(n, o); return m("MESSAGE_REACTION_ADD", e, t, n, { burst: o, colors: E }), await d.default.unarchiveThreadIfNecessary(e), s.HTTP.put({ url: N({ channelId: e, messageId: t, emoji: n, userId: "@me" }), query: { location: i, type: o ? u.ReactionTypes.BURST : u.ReactionTypes.NORMAL }, oldFormErrors: !0 }).then(() => { o ? (a.AccessibilityAnnouncer.announce(h.default.Messages.BURST_REACTION_ADD_UNLIMITED_SUCCESS_A11Y.format({ name: n.name })), f.default.triggerFullscreenAnimation({ channelId: e, messageId: t, emoji: { ...n, animated: !1 } })) : a.AccessibilityAnnouncer.announce(h.default.Messages.REACTION_ADD_SUCCESS_A11Y.format({ name: n.name })) }).catch(r => { A(r, () => O(e, t, n, i, { burst: o, isRetry: !0 }), { isRetry: _ }) && (m("MESSAGE_REACTION_REMOVE", e, t, n, { burst: o }), o ? a.AccessibilityAnnouncer.announce(h.default.Messages.BURST_REACTION_ADD_UNLIMITED_ERROR_A11Y.format({ name: n.name })) : a.AccessibilityAnnouncer.announce(h.default.Messages.REACTION_ADD_ERROR_A11Y.format({ name: n.name }))) }) } function C(e) { let { channelId: t, messageId: n, emoji: i, key: r } = e; o.default.dispatch({ type: "BURST_REACTION_EFFECT_PLAY", channelId: t, messageId: n, emoji: i, key: r }) } async function R(e, t, n) { let i = null != n && !!n.isRetry; await d.default.unarchiveThreadIfNecessary(e), s.HTTP.del({ url: S.Endpoints.REMOVE_REACTIONS(e, t), oldFormErrors: !0 }).catch(n => { A(n, () => R(e, t, { isRetry: !0 }), { isRetry: i }) }) } async function g(e, t, n, i) { let r = null != i && !!i.isRetry; await d.default.unarchiveThreadIfNecessary(e); let a = null === n.id ? n.name : "".concat(n.name, ":").concat(n.id); s.HTTP.del({ url: S.Endpoints.REMOVE_EMOJI_REACTIONS(e, t, a), oldFormErrors: !0 }).catch(i => { A(i, () => g(e, t, n, { isRetry: !0 }), { isRetry: r }) }) } async function L(e, t, n, i) { let r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : "Message", o = arguments.length > 5 ? arguments[5] : void 0, l = null != o && !!o.burst, _ = null != o && !!o.isRetry; m("MESSAGE_REACTION_REMOVE", e, t, n, { userId: i, burst: l }), await d.default.unarchiveThreadIfNecessary(e), s.HTTP.del({ url: N({ channelId: e, messageId: t, emoji: n, userId: null != i ? i : "@me", type: l ? u.ReactionTypes.BURST : u.ReactionTypes.NORMAL, useTypeEndpoint: !0 }), query: { location: r, burst: l }, oldFormErrors: !0 }).then(() => { (null == o ? void 0 : o.burst) ? a.AccessibilityAnnouncer.announce(h.default.Messages.BURST_REACTION_REMOVE_SUCCESS_A11Y.format({ name: n.name })): a.AccessibilityAnnouncer.announce(h.default.Messages.REACTION_REMOVE_SUCCESS_A11Y.format({ name: n.name })) }).catch(async s => { if (A(s, () => L(e, t, n, i, r, { burst: l, isRetry: !0 }), { isRetry: _ })) { let r = await v(n, l); m("MESSAGE_REACTION_ADD", e, t, n, { userId: i, burst: l, colors: r }), (null == o ? void 0 : o.burst) ? a.AccessibilityAnnouncer.announce(h.default.Messages.BURST_REACTION_REMOVE_ERROR_A11Y.format({ name: n.name })) : a.AccessibilityAnnouncer.announce(h.default.Messages.REACTION_REMOVE_ERROR_A11Y.format({ name: n.name })) } }) } async function v(e, t) { let n = []; if (t) try { n = await (0, T.getEmojiColors)(e) } catch {} return n } function D(e) { let { channelId: t, messageId: n, emoji: i, reactionType: r, userId: s, location: a } = e; L(t, n, i, s, a, { burst: r === u.ReactionTypes.BURST }) } }, 995774: function(e, t, n) { "use strict"; n.r(t), n.d(t, { emojiEquals: function() { return d }, getAccessibleEmojiDisplayName: function() { return l }, getBurstAnalyticsSection: function() { return _ }, getReactionEmojiName: function() { return o }, shouldApplyReaction: function() { return c }, toReactionEmoji: function() { return u } }), n("757143"); var i = n("633302"), r = n("314897"), s = n("981631"), a = n("689938"); function o(e) { return null == e.id ? i.default.convertSurrogateToName(e.name) : ":".concat(e.name, ":") } function l(e, t, n, i) { var r, s, l; let u; return (u = i ? e ? a.default.Messages.SUPER_REACT_REMOVE_WITH_COUNT_A11Y_LABEL : a.default.Messages.SUPER_REACT_WITH_COUNT_A11Y_LABEL : e ? a.default.Messages.REACT_REMOVE_WITH_COUNT_A11Y_LABEL : a.default.Messages.REACT_WITH_COUNT_A11Y_LABEL).format({ reactions: t, emojiName: null !== (l = null === (s = o(n)) || void 0 === s ? void 0 : null === (r = s.replace(/[:_]/g, " ")) || void 0 === r ? void 0 : r.trim()) && void 0 !== l ? l : "" }) } function u(e) { var t, n, i; return { id: null !== (t = e.id) && void 0 !== t ? t : null, name: null !== (i = null !== (n = null != e.id ? e.name : e.optionallyDiverseSequence) && void 0 !== n ? n : e.name) && void 0 !== i ? i : "", animated: !!e.animated } } function d(e, t) { if (null != t.id) { let n = null != e.id ? "".concat(e.id) : e.id; return "".concat(t.id) === n } return null == e.id && t.name === e.name } function _(e) { if (e.isThread()) return s.AnalyticsSections.THREAD_TEXT_AREA; if (e.isForumPost()) return s.AnalyticsSections.FORUM_CHANNEL_TEXT_AREA; if (e.isGuildVocal()) return s.AnalyticsSections.TEXT_IN_VOICE; return s.AnalyticsSections.CHANNEL_TEXT_AREA } function c(e) { let { userId: t, optimistic: n } = e, i = r.default.getId() === t; return (!n || !!i) && !0 } }, 931651: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReactionPicker: function() { return a } }); var i = n("735250"); n("470079"); var r = n("907040"), s = n("185923"); function a(e) { let { channel: t, closePopout: n, analyticsOverride: a, onSelectEmoji: o, messageId: l } = e; return (0, i.jsx)(r.default, { closePopout: n, channel: t, onSelectEmoji: o, pickerIntention: s.EmojiIntention.REACTION, analyticsOverride: a, messageId: l }) } }, 490897: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ReadStateTypes: function() { return i }, UnreadSetting: function() { return r } }), (s = i || (i = {}))[s.CHANNEL = 0] = "CHANNEL", s[s.GUILD_EVENT = 1] = "GUILD_EVENT", s[s.NOTIFICATION_CENTER = 2] = "NOTIFICATION_CENTER", s[s.GUILD_HOME = 3] = "GUILD_HOME", s[s.GUILD_ONBOARDING_QUESTION = 4] = "GUILD_ONBOARDING_QUESTION", s[s.MESSAGE_REQUESTS = 5] = "MESSAGE_REQUESTS", (a = r || (r = {}))[a.UNSET = 0] = "UNSET", a[a.ALL_MESSAGES = 1] = "ALL_MESSAGES", a[a.ONLY_MENTIONS = 2] = "ONLY_MENTIONS" }, 220444: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getHasImportantUnread: function() { return a } }), n("442837"); var i = n("306680"), r = n("9156"), s = n("490897"); function a(e) { return i.default.hasUnread(e.id) && r.default.resolveUnreadSetting(e) === s.UnreadSetting.ALL_MESSAGES } }, 280234: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getRecentlyOnlineStrategy: function() { return r } }); var i = n("818083"); function r(e) { let { isRecentlyOnlineEnabled: t, maxRecentMs: n } = s.getCurrentConfig({ location: "n/a" }, { autoTrackExposure: !1 }), i = Date.now() - (null != e ? e : 0); return { isRecentlyOnlineShowable: t && i <= n, isRecentlyOnlineTrackable: i <= 1728e5 } } let s = (0, i.createExperiment)({ kind: "user", id: "2024-05_clientside_recently_online_desktop", label: "Recently Online Clientside Desktop", defaultConfig: { isRecentlyOnlineEnabled: !1, maxRecentMs: -1 }, treatments: [{ id: 1, label: "Enabled: 1h", config: { isRecentlyOnlineEnabled: !0, maxRecentMs: 36e5 } }, { id: 2, label: "Enabled: 4h", config: { isRecentlyOnlineEnabled: !0, maxRecentMs: 144e5 } }, { id: 3, label: "Enabled: 48h", config: { isRecentlyOnlineEnabled: !0, maxRecentMs: 1728e5 } }] }); t.default = s }, 480384: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("353926"), d = n("650774"), _ = n("771845"); let c = []; function E() { c = []; let e = _.default.getFlattenedGuildIds(); for (let t = 0; t < e.length; t++) { let n = e[t], i = d.default.getMemberCount(n); if (null != i && i >= 2 && i <= 95 && (c.push(n), c.length >= 5)) return } } class I extends(i = o.default.Store) { initialize() { this.syncWith([d.default, _.default, u.default], E), E() } getPriorityGuilds() { return c } } a = "RecentlyOnlineExperimentPriorityGuildsStore", (s = "displayName") in(r = I) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new I(l.default, {}) }, 653733: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isGuildEligibleForRecentlyOnlineExperiment: function() { return a } }); var i = n("358085"), r = n("280234"), s = n("480384"); function a(e) { if (!(0, i.isDesktop)()) return !1; let { isRecentlyOnlineEnabled: t } = r.default.getCurrentConfig({ location: "guild-subscriptions-store" }, { autoTrackExposure: !1 }); return !!t && s.default.getPriorityGuilds().includes(e) } }, 509275: function(e, t, n) { "use strict"; n.r(t), n.d(t, { formatRecentlyOnlineStatus: function() { return a } }); var i = n("913527"), r = n.n(i), s = n("689938"); function a(e) { let t = function(e) { let t = r().duration(r()().diff(e)), n = Math.floor(t.asDays()), i = Math.floor(t.asHours()), s = Math.floor(t.asMinutes()); if (n > 0) return "".concat(n, "d"); if (i > 0) return "".concat(i, "h"); if (s > 0) return "".concat(s, "m"); else return "1m" }(new Date(e)); return s.default.Messages.RECENTLY_ONLINE_STATUS.format({ time: t }) } }, 859099: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("780384"), r = n("147913"), s = n("844070"), a = n("981631"), o = n("689938"); function l(e) { e.relationship.type === a.RelationshipTypes.PENDING_INCOMING && (i.AccessibilityAnnouncer.announce(o.default.Messages.FRIEND_REQUEST_PENDING_A11Y_ANNOUNCEMENT.format({ username: e.relationship.user.username })), s.showPendingNotification(e.relationship.user)) } function u(e) { let { user: t } = e; i.AccessibilityAnnouncer.announce(o.default.Messages.FRIEND_REQUEST_ACCEPTED_A11Y_ANNOUNCEMENT.format({ username: t.username })), s.showAcceptedNotification(t) } class d extends r.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { RELATIONSHIP_ADD: l, FRIEND_REQUEST_ACCEPTED: u }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new d }, 477734: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useCanSeeRemixBadge: function() { return r }, useIsRemixANitroPerk: function() { return s } }), n("906732"); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-08_remix_ga", label: "Remix General Available", defaultConfig: { canSeeRemixBadge: !1, canRemix: !1, isNitroPerk: !1 }, treatments: [{ id: 1, label: "Remix for Nitro Subscribers", config: { canSeeRemixBadge: !0, canRemix: !0, isNitroPerk: !0 } }, { id: 3, label: "Upsell Remix for Non-Nitro Users", config: { canSeeRemixBadge: !0, canRemix: !1, isNitroPerk: !0 } }, { id: 5, label: "Remix GA for everyone", config: { canSeeRemixBadge: !0, canRemix: !0, isNitroPerk: !1 } }] }); function r() { return i.useExperiment({ location: "canSeeRemixBadge" }, { autoTrackExposure: !0 }).canSeeRemixBadge } function s() { return !!i.useExperiment({ location: "isRemixANitroPerkHook" }, { autoTrackExposure: !0 }).isNitroPerk } }, 623292: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createPendingReply: function() { return r }, deletePendingReply: function() { return a }, setPendingReplyShouldMention: function() { return s } }); var i = n("570140"); function r(e) { let { message: t, channel: n, shouldMention: r, showMentionToggle: s, source: a } = e; i.default.dispatch({ type: "CREATE_PENDING_REPLY", message: t, channel: n, shouldMention: r, showMentionToggle: s, source: a }) } function s(e, t) { i.default.dispatch({ type: "SET_PENDING_REPLY_SHOULD_MENTION", channelId: e, shouldMention: t }) } function a(e) { i.default.dispatch({ type: "DELETE_PENDING_REPLY", channelId: e }) } }, 807092: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("375954"); let d = {}, _ = {}, c = {}; function E(e) { if (null == e) return !1; let t = _[e]; if (null == t) return !1; let n = u.default.getMessage(e, t.messageId); if (null == n) return !1; d[e] = { channel: t.channel, message: n, shouldMention: t.shouldMention, showMentionToggle: t.showMentionToggle }, delete _[e] } function I() { d = {}, _ = {}, c = {} } class T extends(a = o.default.Store) { initialize() { this.waitFor(u.default) } getPendingReply(e) { return d[e] } getPendingReplyActionSource(e) { return c[e] } } s = "PendingReplyStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new T(l.default, { CREATE_PENDING_REPLY: function(e) { let { channel: t, message: n, shouldMention: i = !0, showMentionToggle: r = !0, source: s } = e; d[t.id] = { channel: t, message: n, shouldMention: i, showMentionToggle: r }, c[t.id] = s }, CREATE_SHALLOW_PENDING_REPLY: function(e) { let { channel: t, messageId: n, shouldMention: i = !0, showMentionToggle: r = !0 } = e; _[t.id] = { channel: t, messageId: n, shouldMention: i, showMentionToggle: r } }, SET_PENDING_REPLY_SHOULD_MENTION: function(e) { let { channelId: t, shouldMention: n } = e; t in d && (d[t] = { ...d[t], shouldMention: n }), t in _ && (_[t] = { ..._[t], shouldMention: n }) }, DELETE_PENDING_REPLY: function(e) { let { channelId: t } = e; delete d[t], delete _[t] }, CONNECTION_OPEN: I, LOGOUT: I, MESSAGE_DELETE: function(e) { var t, n, i; let { id: r, channelId: s } = e; if ((null === (n = d[s]) || void 0 === n ? void 0 : null === (t = n.message) || void 0 === t ? void 0 : t.id) === r) delete d[s], delete c[s]; else { if ((null === (i = _[s]) || void 0 === i ? void 0 : i.messageId) !== r) return !1; delete _[s], delete c[s] } }, CHANNEL_SELECT: function(e) { let { channelId: t } = e; E(t) }, LOAD_MESSAGES_SUCCESS: function(e) { let { channelId: t } = e; E(t) } }) }, 869765: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReferencedMessageState: function() { return i } }), n("47120"), n("653041"); var i, r, s, a = n("31775"), o = n.n(a), l = n("442837"), u = n("570140"), d = n("163268"), _ = n("900489"), c = n("786761"), E = n("592125"), I = n("375954"), T = n("981631"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {}))[s.LOADED = 0] = "LOADED", s[s.NOT_LOADED = 1] = "NOT_LOADED", s[s.DELETED = 2] = "DELETED"; let S = Object.freeze({ state: 1 }), h = new Set; class A { handleCacheDisposed(e, t) { this._cachedMessageIds.has(e) && (this._cachedMessageIds = new Set(this._cachedMessageIds), this._cachedMessageIds.delete(e)) } set(e, t) { this._cachedMessages.set(e, t), !this._cachedMessageIds.has(e) && (this._cachedMessageIds = new Set(this._cachedMessageIds), this._cachedMessageIds.add(e)) } has(e) { return this._cachedMessageIds.has(e) } get(e) { return this._cachedMessages.get(e) } getCachedMessageIds() { return this._cachedMessageIds } constructor() { f(this, "_cachedMessages", new(o())({ max: 100, dispose: (e, t) => this.handleCacheDisposed(e, t) })), f(this, "_cachedMessageIds", new Set) } } let m = new class e { has(e, t) { var n, i; return null !== (i = null === (n = this._channelCaches.get(e)) || void 0 === n ? void 0 : n.has(t)) && void 0 !== i && i } get(e, t) { var n; return null === (n = this._channelCaches.get(e)) || void 0 === n ? void 0 : n.get(t) } set(e, t, n) { let i = this._channelCaches.get(e); null == i && (i = new A, this._channelCaches.set(e, i)), i.set(t, n) } updateExistingMessageIfCached(e) { let t = this._channelCaches.get(e.channel_id); return !!(null != t && t.has(e.id)) && (t.set(e.id, { state: 0, message: (0, c.createMessageRecord)(e) }), !0) } deleteChannelCache(e) { return this._channelCaches.delete(e) } retainWhere(e) { let t = []; for (let [n] of this._channelCaches) !e(n) && t.push(n); for (let e of t) this.deleteChannelCache(e); return t.length } getCachedMessageIdsForChannel(e) { let t = this._channelCaches.get(e); return null == t ? null : t.getCachedMessageIds() } clear() { this._channelCaches.clear() } constructor() { f(this, "_channelCaches", new Map) } }; function N(e) { let t = !1; if (m.updateExistingMessageIfCached(e) && (t = !0), T.MessageTypesWithLazyLoadedReferences.has(e.type)) { let n = e.message_reference; if (null == n) return t; let i = n.message_id; if (null == i) return t; if ("referenced_message" in e) { let t = e.referenced_message; null != t ? (m.set(t.channel_id, t.id, { state: 0, message: (0, c.createMessageRecord)(t) }), e.type === T.MessageTypes.THREAD_STARTER_MESSAGE && N(t)) : m.set(e.channel_id, i, { state: 2 }) } else { let e = I.default.getMessage(n.channel_id, i); null != e ? m.set(n.channel_id, i, { state: 0, message: e }) : m.set(n.channel_id, i, S) } t = !0 } return t } function p(e, t) { let n = !1; for (let i of e) n = !1 !== t(i) || n; return n } function O(e) { let { messages: t } = e; return p(t, e => N(e)) } function C(e) { let { messages: t } = e; return p(t, e => p(e, e => N(e))) } function R(e) { return m.deleteChannelCache(e.channel.id) } function g(e, t) { if (!m.has(e, t)) return !1; m.set(e, t, { state: 2 }) } function L() { m.clear() } function v(e) { let { firstMessages: t } = e; return null != t && p(t, e => N(e)) } class D extends(r = l.default.Store) { initialize() { this.waitFor(I.default, E.default) } getMessageByReference(e) { let t; return null != e && (t = m.get(e.channel_id, e.message_id)), null != t ? t : S } getMessage(e, t) { var n; return null !== (n = m.get(e, t)) && void 0 !== n ? n : S } getReplyIdsForChannel(e) { let t; return null != e && (t = m.getCachedMessageIdsForChannel(e)), null != t ? t : h } } f(D, "displayName", "ReferencedMessageStore"), t.default = new D(u.default, { CACHE_LOADED: function(e) { let { messages: t } = e; return p(Object.values(t), e => p(Object.values(e), e => N(e))) }, LOCAL_MESSAGES_LOADED: O, LOAD_MESSAGES_SUCCESS: O, LOAD_MESSAGES_AROUND_SUCCESS: O, SEARCH_FINISH: C, MOD_VIEW_SEARCH_FINISH: C, GUILD_FEED_FETCH_SUCCESS: function(e) { let { data: t } = e; return p((0, _.getMessagesFromGuildFeedFetch)(t), e => N(e)) }, LOAD_THREADS_SUCCESS: v, LOAD_ARCHIVED_THREADS_SUCCESS: v, MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT: function(e) { let { messageId: t, channelId: n } = e; if (!m.has(n, t)) return !1; let i = m.get(n, t); if (null == i || 0 !== i.state) return !1; m.set(n, t, { state: 0, message: (0, d.handleExplicitMediaScanTimeoutForMessage)(i.message) }) }, LOAD_FORUM_POSTS: function(e) { let { threads: t } = e; return p(Object.values(t), e => { let { first_message: t } = e; return null != t && N(t) }) }, MESSAGE_CREATE: function(e) { let { message: t } = e; return !!I.default.getMessages(t.channel_id).ready && N(t) }, MESSAGE_UPDATE: function(e) { let { message: t } = e, n = t.id, i = t.channel_id; if (!m.has(i, n)) return !1; let r = m.get(i, n); if (null == r || 0 !== r.state) return !1; m.set(i, n, { state: 0, message: (0, c.updateMessageRecord)(r.message, t) }) }, MESSAGE_DELETE: function(e) { let { id: t, channelId: n } = e; return g(n, t) }, MESSAGE_DELETE_BULK: function(e) { let { ids: t, channelId: n } = e; return p(t, e => g(n, e)) }, CREATE_PENDING_REPLY: function(e) { let { message: t } = e; m.set(t.channel_id, t.id, { state: 0, message: t }) }, CHANNEL_DELETE: R, THREAD_DELETE: R, GUILD_DELETE: function() { if (0 === m.retainWhere(e => null != E.default.getChannel(e))) return !1 }, CONNECTION_OPEN: L, LOGOUT: L }) }, 403132: function(e, t, n) { "use strict"; function i(e, t) { return !!(null != t && e.mentions.includes(t.author.id)) || !1 } n.r(t), n.d(t, { default: function() { return i } }) }, 406066: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"); var i, r, s, a, o = n("348327"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("742738"); let c = [_.default], E = []; function I() { let e = []; for (let t of c) { let n = t.getActivity(); null != n && e.push(n) } return !l()(e, E) && (E = e, !0) } class T extends(i = u.default.Store) { initialize() { this.syncWith(c, I) } getActivities() { return E } } a = "FirstPartyRichPresenceStore", (s = "displayName") in(r = T) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new T(d.default) }, 143816: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChannelBackNavigationSources: function() { return s } }), n("47120"); var i, r = n("124368"); (i || (i = {})).INVITE_ACCEPT = "invite_accept", t.default = i; let s = new Set([r.OpenThreadAnalyticsLocations.EMBED, r.OpenThreadAnalyticsLocations.FORUM]) }, 35225: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getChannelIdForGuildTransition: function() { return u } }); var i = n("819553"), r = n("931261"), s = n("592125"), a = n("984933"), o = n("944486"), l = n("176505"); function u(e) { var t; let n = o.default.getChannelId(e), u = null === (t = a.default.getDefaultChannel(e)) || void 0 === t ? void 0 : t.id; return (n !== l.StaticChannelRoute.GUILD_ONBOARDING || i.default.shouldShowOnboarding(e)) && (n !== l.StaticChannelRoute.GUILD_HOME || (0, r.canSeeOnboardingHome)(e)) && null != s.default.getChannel(n) ? n : u } }, 703656: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n.d(t, { back: function() { return L }, currentRouteHasBackNavigation: function() { return A }, forward: function() { return v }, getFingerprintLocation: function() { return R }, getHistory: function() { return N }, getLastRouteChangeSource: function() { return p }, getLastRouteChangeSourceLocationStack: function() { return O }, hasNavigated: function() { return g }, isValidFingerprintRoute: function() { return C }, replaceWith: function() { return m }, transitionTo: function() { return S }, transitionToGuild: function() { return h } }), n("653041"), n("757143"); var a = n("539528"), o = n("710845"), l = n("585483"), u = n("143816"), d = n("981631"); let _ = new o.default("Routing/Utils"), c = [d.RelativeMarketingURLs.DEVELOPER_PORTAL]; i = __OVERLAY__ ? (0, a.createMemoryHistory)() : (0, a.createBrowserHistory)(); let E = !1, I = i.listen((e, t) => { "REPLACE" !== t && (E = !0, I()) }); function T() { return !l.ComponentDispatch.hasSubscribers(d.ComponentActions.MODAL_CLOSE) && (n("574254").default.close(), !0) } function f(e, t) { return !!("string" == typeof e && c.some(t => e.startsWith(t))) && (_.log("".concat(t, " - route to external path ").concat(e)), window.dispatchEvent(new Event("beforeunload")), window.location[t](e), !0) } function S(e, t, n, a) { !f(e, "assign") && (_.log("transitionTo - Transitioning to ".concat(e)), null != n && (null == t ? t = { source: n } : t.source = n), null == t ? i.push(e) : i.push({ pathname: e, ...t }), r = n, s = a) } function h(e, t, n, i, r) { _.log("transitionToGuild - Transitioning to ".concat(JSON.stringify({ guildId: e, channelId: t, messageId: n }))), S(d.Routes.CHANNEL(e, t, n), null != r ? r : null, i) } function A() { return null != r && u.ChannelBackNavigationSources.has(r) } function m(e, t, n) { !f(e, "replace") && (_.log("Replacing route with ".concat(e)), "string" == typeof e ? i.replace(e, t) : i.replace(e), r = n) } function N() { return i } function p() { return r } function O() { return s } function C(e) { if (null == e) { var t; e = null !== (t = i.location.pathname) && void 0 !== t ? t : "" } return !e.startsWith(d.Routes.HANDOFF) && !0 } function R(e) { if (null == e) { var t; e = null !== (t = i.location.pathname) && void 0 !== t ? t : "" } if (e.startsWith(d.Routes.LOGIN)) return d.PageAnalyticsLocations.LOGIN; if (e.startsWith(d.Routes.REGISTER)) return d.PageAnalyticsLocations.REGISTER; if (e.startsWith(d.Routes.INVITE(""))) return d.PageAnalyticsLocations.INVITE; else if (e.startsWith(d.Routes.VERIFY)) return d.PageAnalyticsLocations.VERIFY; else if (e.startsWith(d.Routes.DISABLE_EMAIL_NOTIFICATIONS)) return d.PageAnalyticsLocations.DISABLE_EMAIL_NOTIFICATIONS; else if (e.startsWith(d.Routes.DISABLE_SERVER_HIGHLIGHT_NOTIFICATIONS)) return d.PageAnalyticsLocations.DISABLE_SERVER_HIGHLIGHT_NOTIFICATIONS; else if (e.startsWith(d.Routes.REJECT_IP)) return d.PageAnalyticsLocations.REJECT_IP; else if (e.startsWith(d.Routes.REJECT_MFA)) return d.PageAnalyticsLocations.REJECT_MFA; else if (e.startsWith(d.Routes.AUTHORIZE_IP)) return d.PageAnalyticsLocations.AUTHORIZE_IP; else if (e.startsWith(d.Routes.AUTHORIZE_PAYMENT)) return d.PageAnalyticsLocations.AUTHORIZE_PAYMENT; else if (e.startsWith(d.Routes.RESET)) return d.PageAnalyticsLocations.RESET; else if (e.startsWith(d.Routes.REPORT)) return d.PageAnalyticsLocations.REPORT; else if (e.startsWith(d.Routes.REPORT_SECOND_LOOK)) return d.PageAnalyticsLocations.REPORT_SECOND_LOOK; return e } function g() { return E } function L() { T() && (r = null, i.goBack()) } function v() { T() && (r = null, i.goForward()) } }, 359110: function(e, t, n) { "use strict"; n.r(t), n.d(t, { transitionToChannel: function() { return d }, transitionToMessage: function() { return c }, transitionToThread: function() { return _ } }); var i = n("512722"), r = n.n(i), s = n("493683"), a = n("727429"), o = n("592125"), l = n("703656"), u = n("981631"); function d(e, t, n) { let i = o.default.getChannel(e); if (null == i) return; let r = (0, a.getGuildIdForGenericRedirect)(i); s.default.preload(i.guild_id, i.id), (0, l.transitionTo)(u.Routes.CHANNEL(r, i.id), t, n) } function _(e, t, n) { r()(null != e.parent_id, "Thread must have a parent ID."); let i = (0, a.getGuildIdForGenericRedirect)(e); (0, l.transitionTo)(u.Routes.CHANNEL(i, e.id), n, t) } function c(e, t, n, i) { let r = o.default.getChannel(e); if (null == r) return; let s = (0, a.getGuildIdForGenericRedirect)(r); (0, l.transitionTo)(u.Routes.CHANNEL(s, r.id, t), n, i) } }, 769654: function(e, t, n) { "use strict"; n.r(t), n.d(t, { transitionToGuild: function() { return a } }); var i = n("35225"), r = n("703656"), s = n("981631"); function a(e, t) { (0, r.transitionTo)(s.Routes.CHANNEL(e, (0, i.getChannelIdForGuildTransition)(e)), t) } }, 186901: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { DispatchErrorCodes: function() { return s }, RPCDeepLinks: function() { return r }, RPC_AUTHENTICATED_SCOPE: function() { return I }, RPC_LOCAL_SCOPE: function() { return E }, RPC_PRIVATE_LIMITED_SCOPE: function() { return c }, RPC_PRIVATE_SCOPE: function() { return _ }, RPC_SCOPE_CONFIG: function() { return i }, TransportTypes: function() { return a } }), (o = i || (i = {})).ANY = "$any", o.ALL = "$all"; let _ = "RPC_PRIVATE_SCOPE", c = "RPC_PRIVATE_LIMITED_SCOPE", E = "RPC_LOCAL_SCOPE", I = "RPC_AUTHENTICATED_SCOPE"; (l = r || (r = {})).USER_SETTINGS = "USER_SETTINGS", l.CHANGELOG = "CHANGELOG", l.LIBRARY = "LIBRARY", l.STORE_HOME = "STORE_HOME", l.STORE_LISTING = "STORE_LISTING", l.CHANNEL = "CHANNEL", l.PICK_GUILD_SETTINGS = "PICK_GUILD_SETTINGS", (u = s || (s = {}))[u.APPLICATION_NOT_FOUND = 101] = "APPLICATION_NOT_FOUND", u[u.DISK_LOW = 2022] = "DISK_LOW", u[u.DISK_PERMISSION_DENIED = 2025] = "DISK_PERMISSION_DENIED", u[u.POST_INSTALL_FAILED = 2025] = "POST_INSTALL_FAILED", u[u.REDISTRIBUTABLE_INSTALL_FAILED = 2026] = "REDISTRIBUTABLE_INSTALL_FAILED", u[u.APPLICATION_LOAD_FAILED = 2034] = "APPLICATION_LOAD_FAILED", u[u.DESERIALIZATION_FAILED = 2047] = "DESERIALIZATION_FAILED", u[u.INTERRUPTED = 2055] = "INTERRUPTED", u[u.MAX_REQUEST_RETRIES_EXCEEDED = 2058] = "MAX_REQUEST_RETRIES_EXCEEDED", u[u.AUTHENTICATION_FAILED = 2063] = "AUTHENTICATION_FAILED", u[u.IO_PERMISSION_DENIED = 2064] = "IO_PERMISSION_DENIED", u[u.NO_MANIFESTS = 2065] = "NO_MANIFESTS", u[u.POST_INSTALL_CANCELLED = 2066] = "POST_INSTALL_CANCELLED", u[u.API_ERROR = 2069] = "API_ERROR", u[u.FILE_NAME_TOO_LONG = 2072] = "FILE_NAME_TOO_LONG", u[u.NOT_ENTITLED = 2073] = "NOT_ENTITLED", u[u.APPLICATION_LOCK_FAILED = 2076] = "APPLICATION_LOCK_FAILED", u[u.NOT_DIRECTORY = 2077] = "NOT_DIRECTORY", u[u.INVALID_DRIVE = 2078] = "INVALID_DRIVE", u[u.DISK_FULL = 2080] = "DISK_FULL", (d = a || (a = {})).IPC = "ipc", d.WEBSOCKET = "ws", d.HTTP = "http", d.POST_MESSAGE = "post_message" }, 189800: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ExperimentRPCServerAnalyticsKillswitch: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-01_rpc_analytics_killswitch", label: "RPC Server Analytics Killswitch", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable RPC Server Analytics", config: { enabled: !0 } }] }) }, 996106: function(e, t, n) { "use strict"; n.r(t); var i = n("24917"); t.default = i.RPCError }, 631467: function(e, t, n) { "use strict"; n.r(t); t.default = { HANDSHAKE: 0, FRAME: 1, CLOSE: 2, HELLO: 3 } }, 65856: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("733860"), n("653041"), n("411104"), n("47120"); var i = n("512722"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("626135"), l = n("70956"), u = n("189800"), d = n("996106"), _ = n("863141"), c = n("34954"), E = n("186901"), I = n("981631"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = "RPC_STORE_WAIT", S = []; class h { registerTransport(e) { e.on("connect", e => this.handleConnect(e)), e.on("request", (e, t) => this.handleRequest(e, t)), e.on("disconnect", (e, t) => this.handleDisconnect(e, t)) } handleConnect(e) { this.sockets.add(e), this.onConnect(e); let t = { v: e.version, config: { cdn_host: window.GLOBAL_ENV.CDN_HOST, api_endpoint: window.GLOBAL_ENV.API_ENDPOINT, environment: "production" } }; if (e.transport === E.TransportTypes.IPC) { let n = this.getCurrentUser(); if (null == n) { e.close(I.RPCCloseCodes.CLOSE_NORMAL, "User logged out"); return } t.user = (0, _.default)(n) } this.dispatch(e, null, I.RPCCommands.DISPATCH, I.RPCEvents.READY, t) } handleDisconnect(e, t) { this.removeSubscriptions(e), this.sockets.delete(e), this.onDisconnect(e, t) } handleRequest(e, t) { new Promise(n => { if (null == t.nonce || "" === t.nonce) throw new d.default({ errorCode: I.RPCErrors.INVALID_PAYLOAD }, "Payload requires a nonce"); let i = t.cmd, r = this.commands[i]; if (null == r) throw new d.default({ errorCode: I.RPCErrors.INVALID_COMMAND }, "Invalid command: ".concat(t.cmd)); if (!(0, c.default)(e.authorization.scopes, r.scope)) throw new d.default({ errorCode: I.RPCErrors.INVALID_PERMISSIONS }, "Not authenticated or invalid scope"); u.ExperimentRPCServerAnalyticsKillswitch.getCurrentConfig({ location: "RPCServer" }).enabled && o.default.track(I.AnalyticEvents.RPC_COMMAND_SENT, { command: i, scope: "object" == typeof r.scope ? JSON.stringify(r.scope) : r.scope, application_id: e.application.id, socket_scope: e.authorization.scopes.toString() }), n(r) }).then(e => new Promise(async (n, i) => { if (null != e.validation) { let s = await this.getJoi(); r()(null != e.validation, "command.validation must not be null"), s.validate(t.args, e.validation(s), { convert: !1 }, t => { if (null != t) { i(new d.default({ errorCode: I.RPCErrors.INVALID_PAYLOAD }, t.message)); return } n(e) }) } else n(e) })).then(n => { var i; return n.handler({ socket: e, server: this, cmd: t.cmd, evt: t.evt, nonce: t.nonce, args: null !== (i = t.args) && void 0 !== i ? i : {}, isSocketConnected: () => this.sockets.has(e) }) }).then(n => this.dispatch(e, t.nonce, t.cmd, null, n)).catch(n => { let { code: i, message: r } = n; return this.error(e, t.nonce, t.cmd, i, r) }) } setCommandHandler(e, t) { this.commands[e] = t } setEventHandler(e, t) { this.events[e] = t } dispatch(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : I.RPCCommands.DISPATCH, i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null, r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : null; e.send({ cmd: n, data: r, evt: i, nonce: t }) } error(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : I.RPCCommands.DISPATCH, i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : I.RPCErrors.UNKNOWN_ERROR, r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : "Unknown Error"; o.default.track(I.AnalyticEvents.RPC_SERVER_ERROR_CAUGHT, { command: n, code: i, message: r }), this.dispatch(e, t, n, I.RPCEvents.ERROR, { code: i, message: r }) } isSubscribed(e, t) { return void 0 !== this.subscriptions.find(n => n.socket.application.id === e && n.evt === t) } getSubscription(e, t, n) { return this.subscriptions.find(i => i.socket === e && i.evt === t && a().isEqual(i.args, n)) } addSubscription(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null, r = this.dispatch.bind(this, e, null, I.RPCCommands.DISPATCH, t); null == this.getSubscription(e, t, n) && this.subscriptions.push({ update: i, dispatch: r, prevState: i ? i({ prevState: null, dispatch: r }) : null, socket: e, evt: t, args: n }) } removeSubscription(e, t, n) { a().remove(this.subscriptions, i => i.socket === e && i.evt === t && a().isEqual(i.args, n)) } removeSubscriptions(e) { a().remove(this.subscriptions, t => t.socket === e) } dispatchToSubscriptions(e, t, n, i) { var r; if (!(null != i && "" !== i && (r = i, S.includes(r) || (S.unshift(r), S.splice(50), 0)))) this.subscriptions.forEach(i => { var r, s, o; if (i.evt === e) { if (("function" != typeof t || t(i)) && ("object" != typeof t || (s = t, o = null !== (r = i.args) && void 0 !== r ? r : {}, a().isEqual(s, a().pick(o, Object.keys(s)))))) this.dispatch(i.socket, null, I.RPCCommands.DISPATCH, i.evt, n) } }) } updateSubscriptions() { this.subscriptions.forEach(e => { e.update && (e.prevState = e.update(e)) }) } storeWait(e, t, n) { let i = t(); if (i || 0 === n) return Promise.resolve(i); let r = a().uniqueId(), s = () => this.removeSubscription(e, f, { uniqueId: r }); return new Promise((i, a) => { let o = setTimeout(() => { s(), a(Error("timeout")) }, n * l.default.Millis.SECOND); this.addSubscription(e, f, { uniqueId: r }, () => { let e = t(); e && (clearTimeout(o), i(e)) }) }).then(e => (s(), e)) } constructor(e) { T(this, "getCurrentUser", () => null), T(this, "onConnect", () => {}), T(this, "onDisconnect", () => {}), T(this, "getJoi", void 0), T(this, "events", {}), T(this, "commands", {}), T(this, "sockets", new Set), T(this, "subscriptions", []), this.getJoi = e } } }, 736045: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("314897"), r = n("592125"), s = n("979651"); function a() { let e = s.default.getVoiceStateForSession(i.default.getId(), i.default.getSessionId()), t = null == e ? void 0 : e.channelId; return r.default.getChannel(t) } }, 863141: function(e, t, n) { "use strict"; function i(e) { let { id: t, username: n, discriminator: i, globalName: r, avatar: s, avatarDecoration: a, bot: o, flags: l, premiumType: u } = e; return { id: t, username: n, discriminator: i, global_name: r, avatar: s, avatar_decoration_data: null != a ? { asset: a.asset, sku_id: a.skuId } : null, bot: o, flags: l, premium_type: null != u ? u : 0 } } n.r(t), n.d(t, { default: function() { return i } }), n("789020") }, 34954: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("186901"); function r(e, t) { if (null == t) return !0; if ("string" == typeof t) return e.includes(t); if ("object" != typeof t) return !1; let n = t[i.RPC_SCOPE_CONFIG.ANY], r = t[i.RPC_SCOPE_CONFIG.ALL]; return !!(Array.isArray(n) && n.some(t => e.includes(t)) || Array.isArray(r) && r.every(t => e.includes(t))) || !1 } }, 812967: function(e, t, n) { "use strict"; n.r(t); var i = n("663993"), r = n("65856"); let s = async () => { let { default: e } = await (0, i.importWithRetry)({ createPromise: () => n.e("56268").then(n.t.bind(n, "826753", 23)), webpackId: "826753" }); return e }; t.default = new r.default(s) }, 214890: function(e, t, n) { "use strict"; n.r(t); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-08_periodic_voice_stats", label: "Periodic Voice Stats", defaultConfig: { enableSendingVoiceStats: !1, percentageOfCalls: 0 }, treatments: [{ id: 1, label: "Enable sending periodic voice stats for 100% of calls", config: { enableSendingVoiceStats: !0, percentageOfCalls: 100 } }, { id: 2, label: "Enable sending periodic voice stats for 50% of calls", config: { enableSendingVoiceStats: !0, percentageOfCalls: 50 } }, { id: 3, label: "Enable sending periodic voice stats for 20% of calls", config: { enableSendingVoiceStats: !0, percentageOfCalls: 20 } }, { id: 4, label: "Enable sending periodic voice stats for 10% of calls", config: { enableSendingVoiceStats: !0, percentageOfCalls: 10 } }, { id: 5, label: "Enable sending periodic voice stats for 5% of calls", config: { enableSendingVoiceStats: !0, percentageOfCalls: 5 } }] }); t.default = i }, 70655: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("70780"), r = n("147913"), s = n("710845"), a = n("131951"), o = n("936349"), l = n("70956"), u = n("358085"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = 1 * l.default.Millis.SECOND, c = 30 * l.default.Millis.SECOND, E = new s.default("RTCLatencyTestManager"); class I extends r.default { _terminate() { null != this.refetchTimeout && clearTimeout(this.refetchTimeout) } constructor(...e) { super(...e), d(this, "refetchTimeout", void 0), d(this, "actions", { POST_CONNECTION_OPEN: () => this._handleConnectionOpen() }), d(this, "_handleTestRegionsResponse", e => { let t = e.map(e => e.region); o.default.shouldPerformLatencyTest(t) ? a.default.getMediaEngine().rankRtcRegions(e).then(e => { E.verbose("RTC region latency test completed, ranked regions are: ", e), (0, i.completeRTCLatencyTest)(e, t) }).catch(e => E.warn(e)) : E.verbose("RTC cached ranked preferred regions are ".concat(o.default.getPreferredRegions())) }), d(this, "_fetchAndScheduleRefetch", () => { (0, i.fetchRTCLatencyTestRegions)().then(e => this._handleTestRegionsResponse(e.body)).catch(e => E.warn(e)), this.refetchTimeout = setTimeout(this._fetchAndScheduleRefetch, 360 * l.default.Millis.MINUTE) }), d(this, "_handleConnectionOpen", () => { u.isPlatformEmbedded && !__OVERLAY__ && (null != this.refetchTimeout && clearTimeout(this.refetchTimeout), this.refetchTimeout = setTimeout(this._fetchAndScheduleRefetch, Math.floor(_ + Math.random() * c))) }) } } t.default = new I }, 941467: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("405656"); class s extends i.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { USER_SETTINGS_PROTO_UPDATE: r.refreshSearchTokens, I18N_LOAD_SUCCESS: r.refreshSearchTokens, POST_CONNECTION_OPEN: r.refreshSearchTokens }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new s }, 378298: function(e, t, n) { "use strict"; n.r(t), n.d(t, { acknowledgeChannelSafetyWarningTooltip: function() { return u }, clearChannelSafetyWarnings: function() { return l }, dismissChannelSafetyWarnings: function() { return a }, reportFalsePositive: function() { return d }, setChannelSafetyWarningFeedback: function() { return o } }); var i = n("544891"), r = n("570140"), s = n("981631"); function a(e, t) { return r.default.dispatch({ type: "DISMISS_CHANNEL_SAFETY_WARNINGS", channelId: e, warningIds: t }), i.HTTP.post({ url: s.Endpoints.CHANNEL_SAFETY_WARNINGS_ACK(e), body: { warning_ids: t }, oldFormErrors: !0 }) } function o(e, t, n) { r.default.dispatch({ type: "CHANNEL_SAFETY_WARNING_FEEDBACK", channelId: e, warningId: t, feedbackType: n }) } function l(e) { r.default.dispatch({ type: "CLEAR_CHANNEL_SAFETY_WARNINGS", channelId: e }) } function u(e) { r.default.dispatch({ type: "ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP", channelId: e }) } function d(e) { return i.HTTP.post({ url: s.Endpoints.SAFETY_WARNING_FALSE_POSITIVE(e) }) } }, 397776: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("592125"), s = n("944486"), a = n("116347"), o = n("237292"), l = n("118910"); function u(e) { let { channelId: t } = e; if (null == t || !(0, o.isEligibleForInappropriateConversationWarning)({ location: "channel_select" }) || !(0, a.getSafetyAlertsSettingOrDefault)()) return !1; let n = r.default.getChannel(t); if (null == n || !n.isDM()) return !1; let i = (0, a.getInappropriateConversationTakeoverForChannel)(t); return null != i && ((0, l.showTakeoverModal)({ warningId: i.id, warningType: i.type, senderId: n.getRecipientId(), channelId: t }), !0) } function d(e) { let { channels: t } = e; if (!(0, o.isEligibleForInappropriateConversationWarning)({ location: "channel_updates" }) || !(0, a.getSafetyAlertsSettingOrDefault)()) return !1; let n = s.default.getCurrentlySelectedChannelId(); if (null == n) return !1; let i = t.find(e => e.id === n); if (null == i) return !1; let r = (0, a.getInappropriateConversationTakeoverForChannel)(i.id); return !!(null != r && i.isDM()) && ((0, l.showTakeoverModal)({ warningId: r.id, warningType: r.type, senderId: i.getRecipientId(), channelId: i.id }), !0) } class _ extends i.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_SELECT: u, CHANNEL_UPDATES: d }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new _ }, 359119: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SafetyWarningFeedbackTypes: function() { return r }, SafetyWarningTypes: function() { return i } }), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("592125"); let d = 5 * n("70956").default.Millis.SECOND; (s = i || (i = {}))[s.STRANGER_DANGER = 1] = "STRANGER_DANGER", s[s.INAPPROPRIATE_CONVERSATION_TIER_1 = 2] = "INAPPROPRIATE_CONVERSATION_TIER_1", s[s.INAPPROPRIATE_CONVERSATION_TIER_2 = 3] = "INAPPROPRIATE_CONVERSATION_TIER_2", (a = r || (r = {}))[a.UPVOTE = 0] = "UPVOTE", a[a.DOWNVOTE = 1] = "DOWNVOTE"; let _ = [], c = {}, E = new Set; function I(e) { let { safetyWarnings: t } = e; null != t && (c[e.id] = t, t.some(e => { var t; return (2 === (t = e).type || 3 === t.type) && null != e.dismiss_timestamp && ! function(e) { return new Date(e).getTime() > Date.now() - d }(e.dismiss_timestamp) }) ? E.add(e.id) : E.delete(e.id)), null == t && (null != c[e.id] && delete c[e.id], E.delete(e.id)) } function T() { c = {}, Object.values(u.default.getMutablePrivateChannels()).forEach(e => { I(e) }) } class f extends o.default.Store { initialize() { this.waitFor(u.default) } getChannelSafetyWarning(e, t) { var n; return null === (n = c[e]) || void 0 === n ? void 0 : n.find(e => e.id === t) } getChannelSafetyWarnings(e) { var t; return null !== (t = c[e]) && void 0 !== t ? t : _ } hasShownInitialTooltipForChannel(e) { return E.has(e) } } t.default = new f(l.default, { CHANNEL_CREATE: function(e) { I(e.channel) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; null != c[t.id] && delete c[t.id], E.delete(t.id) }, CHANNEL_UPDATES: function(e) { e.channels.forEach(e => { I(e) }) }, CONNECTION_OPEN: T, CONNECTION_OPEN_SUPPLEMENTAL: T, CHANNEL_SAFETY_WARNING_FEEDBACK: function(e) { let { channelId: t, warningId: n, feedbackType: i } = e, r = c[t]; null != r && (c[t] = r.map(e => e.id === n ? { ...e, feedback_type: i } : e)) }, CLEAR_CHANNEL_SAFETY_WARNINGS: function(e) { let { channelId: t } = e, n = c[t]; E.delete(t), null != n && (c[t] = n.map(e => ({ ...e, dismiss_timestamp: void 0 }))) }, DISMISS_CHANNEL_SAFETY_WARNINGS: function(e) { let { channelId: t, warningIds: n } = e, i = c[t]; if (null == i) return; let r = new Date().toISOString(); c[t] = i.map(e => n.includes(e.id) ? { ...e, dismiss_timestamp: r } : e) }, ACKNOWLEDGE_CHANNEL_SAFETY_WARNING_TOOLTIP: function(e) { let { channelId: t } = e; E.add(t) } }) }, 182274: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isCurrentUserTeen: function() { return r } }); var i = n("594174"); let r = () => { var e; return (null === (e = i.default.getCurrentUser()) || void 0 === e ? void 0 : e.nsfwAllowed) === !1 } }, 699816: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isStaffTeenSafetyAssistAgeBypass: function() { return r }, useStaffTeenSafetyAssistAgeBypass: function() { return s } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-10_staff_teen_safety_assist_age_bypass", label: "Staff Teen Safety Assist Age Bypass", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable staff teen safety assist age bypass (your account will behave as a teen user)", config: { enabled: !0 } }] }); function r(e) { let { enabled: t } = i.getCurrentConfig({ location: e }, { autoTrackExposure: !0 }); return t } function s(e) { return i.useExperiment({ location: e }, { autoTrackExposure: !0 }).enabled } }, 116347: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getInappropriateConversationTakeoverForChannel: function() { return o }, getSafetyAlertsSettingOrDefault: function() { return a }, shouldShowTakeoverForWarnings: function() { return l } }); var i = n("581883"), r = n("359119"), s = n("473092"); function a() { var e, t, n; let r = null === (n = null === (t = i.default.settings.privacy) || void 0 === t ? void 0 : null === (e = t.inappropriateConversationWarnings) || void 0 === e ? void 0 : e.value) || void 0 === n || n; return (0, s.getUserIsTeen)("safety_warnings_setting") && r } function o(e) { var t; let n = (t = e, r.default.getChannelSafetyWarnings(t).filter(e => e.type === r.SafetyWarningTypes.INAPPROPRIATE_CONVERSATION_TIER_1)); if (n.filter(e => null != e.dismiss_timestamp).length > 0) return null; let i = n.filter(e => null == e.dismiss_timestamp); return 1 === i.length ? i[0] : null } function l(e) { let t = e.filter(e => e.type === r.SafetyWarningTypes.INAPPROPRIATE_CONVERSATION_TIER_1); return t.length > 0 && t.every(e => null == e.dismiss_timestamp) } }, 752290: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("729357"), r = n.n(i), s = n("147913"), a = n("557177"); let o = (0, a.createSound)("vibing_wumpus", "vibing_wumpus", 0), l = 0, u = 0, d = null; function _(e, t) { let n = Math.round(100 * e), i = Math.round(100 * u), s = Math.round(100 * l); n > 0 && s >= i || n < 0 && s <= i ? (clearInterval(d), 0 === i && null != t && t()) : (s += n, l = s / 100, o.volume = r()(l, 0, .5)) } function c(e) { null != d && clearInterval(d), u = 0; let t = f(); d = setInterval(() => { _(t, e) }, 100) } function E() { null != d && clearInterval(d), o.loop(), u = .5; let e = f(); d = setInterval(() => _(e), 100) } function I() { c(o.pause.bind(o)) } function T() { c(o.stop.bind(o)) } function f() { return .2 * (u - l) } class S extends s.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { VIBING_WUMPUS_PLAY_MUSIC: E, VIBING_WUMPUS_STOP_MUSIC: T, VIBING_WUMPUS_PAUSE_MUSIC: I }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new S }, 237292: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isEligibleForInappropriateConversationWarning: function() { return a }, useIsEligibleForInappropriateConversationWarning: function() { return o } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2024-01_inappropriate_conversation_warning", label: "Inappropriate Conversation Warning", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Inappropriate Conversation Warning", config: { enabled: !0 } }] }), s = (0, i.createExperiment)({ kind: "user", id: "2024-01_inappropriate_conversation_warning_staff_bypass", label: "Inappropriate Conversation Warning Staff Bypass", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable Inappropriate Conversation Warning Staff Bypass", config: { enabled: !0 } }] }); function a(e) { let { location: t, autoTrackExposure: n = !1 } = e, { enabled: i } = r.getCurrentConfig({ location: t }, { autoTrackExposure: n }), { enabled: a } = s.getCurrentConfig({ location: t }, { autoTrackExposure: n }); return i || a } function o(e) { let { location: t, autoTrackExposure: n = !1 } = e, { enabled: i } = r.useExperiment({ location: t }, { autoTrackExposure: n }), { enabled: a } = s.useExperiment({ location: t }, { autoTrackExposure: n }); return i || a } }, 118910: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showTakeoverModal: function() { return u } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("468436"), a = n("378298"), o = n("473092"), l = n("237292"); function u(e) { let { channelId: t, warningId: u, senderId: d, warningType: _ } = e; if (!!(0, l.isEligibleForInappropriateConversationWarning)({ location: "takeover-modal" }))(0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("49508"), n.e("51934")]).then(n.bind(n, "955708")); return n => (0, i.jsx)(e, { channelId: t, warningId: u, senderId: d, warningType: _, modalProps: n }) }, { backdropStyle: s.BackdropStyles.BLUR, onCloseCallback: () => { (0, a.dismissChannelSafetyWarnings)(t, [u]), (0, o.trackCtaEvent)({ channelId: t, senderId: d, warningId: u, warningType: _, cta: o.CtaEventTypes.USER_TAKEOVER_MODAL_DISMISS, isNudgeWarning: !1 }) } }) } }, 473092: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CtaEventTypes: function() { return a }, ViewNameTypes: function() { return s }, getUserIsTeen: function() { return I }, trackCtaEvent: function() { return E }, trackNamedViewEvent: function() { return c }, trackViewedEvent: function() { return _ } }); var i, r, s, a, o = n("594174"), l = n("626135"), u = n("699816"), d = n("981631"); function _(e, t) { let { channelId: n, warningId: i, senderId: r, warningType: s } = t; l.default.track(e, { channel_id: n, warning_id: null != i ? parseInt(i) : void 0, warning_type: s, other_user_id: r }) } function c(e) { let { channelId: t, warningId: n, senderId: i, warningType: r, viewName: s, isNudgeWarning: a } = e; l.default.track(d.AnalyticEvents.SAFETY_WARNING_VIEWED, { channel_id: t, warning_id: null != n ? parseInt(n) : void 0, warning_type: r, other_user_id: i, view_name: s, is_nudge_warning: a }) } function E(e) { let { channelId: t, warningId: n, senderId: i, warningType: r, cta: s, isNudgeWarning: a } = e; l.default.track(d.AnalyticEvents.SAFETY_WARNING_CTA_CLICKED, { channel_id: t, warning_id: null != n ? parseInt(n) : void 0, warning_type: r, other_user_id: i, cta: s, is_nudge_warning: a }) } function I(e) { var t; let n = null === (t = o.default.getCurrentUser()) || void 0 === t ? void 0 : t.nsfwAllowed, i = (0, u.isStaffTeenSafetyAssistAgeBypass)(e); return !1 === n || i }(i = s || (s = {})).SAFETY_WARNING_BANNER = "safety_warning_banner", i.SAFETY_TAKEOVER_MODAL = "safety_takeover_modal", i.SAFETY_TOOLS_NUDGE_TOOLTIP = "safety_tools_nudge_tooltip", i.SAFETY_TOOLS_BUTTON = "safety_tools_button", (r = a || (a = {})).OPEN_MORE_TIPS = "open_more_tips", r.USER_BANNER_DISMISS = "user_banner_dismiss", r.USER_BANNER_BLOCK_CONFIRM = "user_banner_block_confirm", r.USER_BANNER_BLOCK_AND_REPORT_CONFIRM = "user_banner_block_and_report_confirm", r.USER_BANNER_BLOCK_CANCEL = "user_banner_block_cancel", r.USER_BANNER_OPEN_SAFETY_TOOLS = "user_banner_open_safety_tools", r.USER_MODAL_BLOCK_CONFIRM = "user_modal_block_confirm", r.USER_MODAL_BLOCK_CANCEL = "user_modal_block_cancel", r.USER_TAKEOVER_MODAL_DISMISS = "user_takeover_modal_dismiss", r.USER_TAKEOVER_MODAL_TAKE_ACTION = "user_takeover_modal_take_action", r.USER_TAKEOVER_MODAL_SAFETY_TIPS = "user_takeover_modal_safety_tips", r.USER_TAKEOVER_MODAL_BLOCK = "user_takeover_modal_block", r.USER_TAKEOVER_MODAL_UNBLOCK = "user_takeover_modal_unblock", r.USER_TAKEOVER_MODAL_REPORT = "user_takeover_modal_report", r.USER_TAKEOVER_MODAL_NO_FILTR = "user_takeover_modal_no_filtr", r.USER_TAKEOVER_MODAL_CTL = "user_takeover_modal_ctl", r.USER_TAKEOVER_MODAL_CTL_SMS = "user_takeover_modal_ctl_sms", r.USER_TAKEOVER_MODAL_CTL_WEB = "user_takeover_modal_ctl_web", r.USER_SAFETY_TOOLS_BUTTON_CLICK = "user_safety_tools_button_click", r.USER_SAFETY_TOOLS_BLOCK_CONFIRM = "user_safety_tools_block_confirm", r.USER_SAFETY_TOOLS_BLOCK_AND_REPORT_CONFIRM = "user_safety_tools_block_and_report_confirm", r.USER_SAFETY_TOOLS_BLOCK_CANCEL = "user_safety_tools_block_cancel", r.USER_SAFETY_TOOLS_UNBLOCK = "user_safety_tools_unblock", r.USER_SAFETY_TOOLS_REPORT = "user_safety_tools_report", r.USER_SAFETY_TOOLS_NO_FILTR = "user_safety_tools_no_filtr", r.USER_SAFETY_TOOLS_CTL = "user_safety_tools_ctl", r.USER_SAFETY_TOOLS_CTL_SMS = "user_safety_tools_ctl_sms", r.USER_SAFETY_TOOLS_CTL_WEB = "user_safety_tools_ctl_web", r.USER_SAFETY_TOOLS_VIBING_WUMPUS = "user_safety_tools_vibing_wumpus", r.USER_SAFETY_TOOLS_SAFETY_TIPS = "user_safety_tools_safety_tips", r.USER_SAFETY_TOOLS_ABOUT_SAFETY_ALERTS = "user_safety_tools_about_safety_alerts", r.USER_SAFETY_TOOLS_ABOUT_SAFETY_ALERTS_DISMISS = "user_safety_tools_about_safety_alerts_dismiss", r.USER_SAFETY_TOOLS_DISMISS = "user_safety_tools_dismiss", r.USER_MODAL_MUTE = "user_modal_mute", r.USER_MODAL_UNMUTE = "user_modal_unmute", r.FEEDBACK_UPVOTE = "feedback_upvote", r.FEEDBACK_DOWNVOTE = "feedback_downvote" }, 464847: function(e, t, n) { "use strict"; function i(e) { null != window.DiscordSentry && window.DiscordSentry.addBreadcrumb({ type: "default", level: "info", category: e.category, message: e.message, data: e.data, timestamp: Date.now() }) } n.r(t), n.d(t, { default: function() { return i } }) }, 969943: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { MuteUntilSeconds: function() { return i }, SettingsOverrideReasonKeys: function() { return r } }), (s = i || (i = {}))[s.MINUTES_15 = 900] = "MINUTES_15", s[s.HOURS_1 = 3600] = "HOURS_1", s[s.HOURS_3 = 10800] = "HOURS_3", s[s.HOURS_8 = 28800] = "HOURS_8", s[s.HOURS_24 = 86400] = "HOURS_24", s[s.ALWAYS = -1] = "ALWAYS", (a = r || (r = {})).REDUCED_MOTION = "REDUCED_MOTION", a.REDUCED_MOTION_STICKERS = "REDUCED_MOTION_STICKERS" }, 151742: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserSettingsManager: function() { return a } }), n("177593"), n("47120"); var i = n("147913"), r = n("695346"); let s = !1; class a extends i.default { maybeShowChangeLanguageToast() {} setVerifyTimezone() { s = !0 } ensureTimezoneUpdated() { if (!s) return; s = !1; let e = new Date().getTimezoneOffset(); r.TimezoneOffset.getSetting() !== e && setImmediate(() => r.TimezoneOffset.updateSetting(e)) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: () => { this.setVerifyTimezone(), this.maybeShowChangeLanguageToast() }, OVERLAY_INITIALIZE: this.setVerifyTimezone, USER_SETTINGS_PROTO_UPDATE: this.ensureTimezoneUpdated }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new a }, 777861: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o }, useMutedUntilText: function() { return a } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("689938"); function a(e) { return null == e || null == e.end_time ? null : s.default.Messages.MUTED_UNTIL_TIME.format({ endTime: new Date(e.end_time).toLocaleString(s.default.getLocale(), { month: "numeric", day: "numeric", hour: "numeric", minute: "2-digit" }) }) } function o(e) { let { muteConfig: t, className: n } = e, s = a(t); return null != s ? (0, i.jsx)(r.Text, { variant: "text-xs/normal", color: "text-muted", className: n, children: s }) : null } }, 6025: function(e, t, n) { "use strict"; n.r(t); var i = n("570140"), r = n("904245"), s = n("593472"), a = n("526120"), o = n("348245"), l = n("897473"), u = n("176505"); t.default = { openPrivateChannelAsSidebar(e) { let { channelId: t, messageId: n, baseChannelId: s, hasSingleMessageRequest: a } = e; i.default.dispatch({ type: "SIDEBAR_VIEW_CHANNEL", sidebarType: l.SidebarType.VIEW_MESSAGE_REQUEST, baseChannelId: s, channelId: t, details: { type: l.SidebarOpenDetailsType.MESSAGE_REQUEST, hasSingleMessageRequest: a } }), null != n ? r.default.jumpToMessage({ channelId: t, messageId: n, flash: !0 }) : o.default.fetchMessages({ channelId: t }) }, openChannelAsSidebar(e) { let { guildId: t, channelId: n, baseChannelId: a, flash: u = !0, details: d } = e; i.default.dispatch({ type: "SIDEBAR_VIEW_CHANNEL", sidebarType: l.SidebarType.VIEW_CHANNEL, guildId: t, baseChannelId: a, channelId: n, details: d }); let _ = null == d ? void 0 : d.initialMessageId; null != _ ? r.default.jumpToMessage({ channelId: n, messageId: _, flash: u, jumpType: s.JumpTypes.INSTANT }) : o.default.fetchMessages({ guildId: t, channelId: n }) }, openResourceChannelAsSidebar(e) { let { guildId: t, channelId: n } = e; null != t && ((0, a.selectHomeResourceChannel)(t, n, !1), i.default.dispatch({ type: "SIDEBAR_VIEW_CHANNEL", sidebarType: l.SidebarType.VIEW_CHANNEL, guildId: t, baseChannelId: u.StaticChannelRoute.GUILD_HOME, channelId: n })) }, openThreadAsSidebar(e) { let { guildId: t, baseChannelId: n, channelId: a, flash: u = !0, details: d } = e; i.default.dispatch({ type: "SIDEBAR_VIEW_CHANNEL", sidebarType: l.SidebarType.VIEW_THREAD, baseChannelId: n, channelId: a, details: d }), (null == d ? void 0 : d.initialMessageId) != null ? r.default.jumpToMessage({ channelId: a, messageId: d.initialMessageId, flash: u, jumpType: s.JumpTypes.INSTANT }) : o.default.fetchMessages({ guildId: t, channelId: a }) }, closeChannelSidebar(e) { i.default.dispatch({ type: "SIDEBAR_CLOSE", baseChannelId: e }) }, openGuildSidebar(e) { let { guildId: t, baseChannelId: n, sidebarType: r, details: s } = e; return i.default.dispatch({ type: "SIDEBAR_VIEW_GUILD", sidebarType: r, baseChannelId: n, guildId: t, details: s }) }, closeGuildSidebar(e) { i.default.dispatch({ type: "SIDEBAR_CLOSE_GUILD", guildId: e }) } } }, 897473: function(e, t, n) { "use strict"; var i, r, s, a, o, l; n.r(t), n.d(t, { GuildSidebarType: function() { return r }, SidebarOpenDetailsType: function() { return s }, SidebarType: function() { return i } }), (a = i || (i = {}))[a.CREATE_THREAD = 0] = "CREATE_THREAD", a[a.VIEW_THREAD = 1] = "VIEW_THREAD", a[a.VIEW_CHANNEL = 2] = "VIEW_CHANNEL", a[a.VIEW_MESSAGE_REQUEST = 3] = "VIEW_MESSAGE_REQUEST", (o = r || (r = {}))[o.GUILD_MEMBER_MOD_VIEW = 4] = "GUILD_MEMBER_MOD_VIEW", (l = s || (s = {})).THREAD = "thread", l.MESSAGE_REQUEST = "message-request", l.HOME = "home", l.GUILD_MEMBER_MOD_VIEW = "guild-member-mod-view" }, 619574: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getGenshinAdminSignupExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_genshin_admin_signup", label: "Genshin Admin Signup", defaultConfig: { showAdminSignup: !1 }, treatments: [{ id: 1, label: "Show admin signup", config: { showAdminSignup: !0 } }] }); function r(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { showAdminSignup: n } = i.getCurrentConfig({ location: e }, { autoTrackExposure: t }); return n } }, 317816: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getGenshinUserSignupExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-04_genshin_user_signup", label: "Genshin User Signup", defaultConfig: { showUserSignup: !1 }, treatments: [{ id: 1, label: "Show user signup", config: { showUserSignup: !0 } }] }); function r(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { showUserSignup: n } = i.getCurrentConfig({ location: e }, { autoTrackExposure: t }); return n } }, 207269: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("524437"), r = n("570140"), s = n("147913"), a = n("605236"), o = n("430824"), l = n("496675"), u = n("619574"), d = n("317816"), _ = n("828312"), c = n("994840"), E = n("981631"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class T extends s.default { constructor(...e) { super(...e), I(this, "actions", { POST_CONNECTION_OPEN: e => this.handleConnectionOpen(e), CHANNEL_SELECT: e => this.handleChannelSelect(e) }), I(this, "handleConnectionOpen", e => { let t = (0, c.getValorantUserSignupExperiment)("SignUpManager"), n = (0, _.getValorantAdminSignupExperiment)("SignUpManager", !1), s = (0, a.isDismissibleContentDismissed)(i.DismissibleContent.GAME_ONE_USER_SIGNUPS), o = (0, d.getGenshinUserSignupExperiment)("SignUpManager"), l = (0, u.getGenshinAdminSignupExperiment)("SignUpManager", !1), E = (0, a.isDismissibleContentDismissed)(i.DismissibleContent.GENSHIN_USER_SIGNUPS); if (t && !n && !s) { r.default.dispatch({ type: "ENABLE_USER_SIGN_UP", key: "valorant-user" }); return } if (o && !l && !E) { r.default.dispatch({ type: "ENABLE_USER_SIGN_UP", key: "genshin-user" }); return } }), I(this, "handleChannelSelect", e => { let { guildId: t } = e; if (null == t) return; let n = (0, a.isDismissibleContentDismissed)(i.DismissibleContent.GAME_ONE_USER_SIGNUPS), s = (0, a.isDismissibleContentDismissed)(i.DismissibleContent.GENSHIN_USER_SIGNUPS); if (n && s) return; let d = (0, _.getValorantAdminSignupExperiment)("SignUpManager"), c = (0, u.getGenshinAdminSignupExperiment)("SignUpManager"); if (!d && !c) return; let I = o.default.getGuild(t); if (null != I) { if (I.hasFeature(E.GuildFeatures.VALORANT_L30) && l.default.can(E.Permissions.MANAGE_GUILD, I) && !n) { r.default.dispatch({ type: "ENABLE_GUILD_SIGN_UP", key: "valorant-admin", guildId: t }); return } if (I.hasFeature(E.GuildFeatures.GENSHIN_L30) && l.default.can(E.Permissions.MANAGE_GUILD, I) && !s) { r.default.dispatch({ type: "ENABLE_GUILD_SIGN_UP", key: "genshin-admin", guildId: t }); return } } }) } } t.default = new T }, 828312: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getValorantAdminSignupExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_valorant_admin_signup", label: "Valorant Admin Signup", defaultConfig: { showAdminSignup: !1 }, treatments: [{ id: 1, label: "Show admin signup", config: { showAdminSignup: !0 } }] }); function r(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { showAdminSignup: n } = i.getCurrentConfig({ location: e }, { autoTrackExposure: t }); return n } }, 994840: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getValorantUserSignupExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_valorant_user_signup", label: "Valorant User Signup", defaultConfig: { showUserSignup: !1 }, treatments: [{ id: 1, label: "Show user signup", config: { showUserSignup: !0 } }] }); function r(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { showUserSignup: n } = i.getCurrentConfig({ location: e }, { autoTrackExposure: t }); return n } }, 783295: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("314897"), s = n("592125"), a = n("242291"), o = n("981631"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class u extends i.default { constructor(...e) { super(...e), l(this, "prevConnected", !1), l(this, "tempMutedChannel", null), l(this, "handleRTCConnectionState", e => { let { state: t, channelId: n } = e, i = t === o.RTCConnectionStates.RTC_CONNECTED, r = i && !this.prevConnected, l = s.default.getChannel(n), u = null == l ? void 0 : l.getGuildId(), d = this.tempMutedChannel === n; r && null != u && (d ? this.tempMutedChannel = null : (0, a.maybePlayCustomJoinSound)(u)), this.prevConnected = i }), l(this, "handleMute", e => { let { channelId: t } = e; this.tempMutedChannel = t }), l(this, "handleVoiceStateUpdates", e => { let { voiceStates: t } = e, n = r.default.getId(), i = r.default.getSessionId(); t.forEach(e => { let { userId: t, channelId: r, sessionId: s } = e; t === n && s !== i && null != r && (this.tempMutedChannel = r) }) }), l(this, "actions", { RTC_CONNECTION_STATE: this.handleRTCConnectionState, SOUNDBOARD_MUTE_JOIN_SOUND: this.handleMute, VOICE_STATE_UPDATES: this.handleVoiceStateUpdates }) } } t.default = new u }, 164878: function(e, t, n) { "use strict"; n.r(t), n.d(t, { recentlyHeardExperiment: function() { return r }, useRecentlyHeardExperiment: function() { return s } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-11_soundboard_recently_heard_frequently_played", label: "Soundboard Recently Heard & Frequently Played", defaultConfig: { canSeeRecentlyHeard: !1, canSeeFrequentlyPlayed: !1 }, treatments: [{ id: 1, label: "User can see Recently Heard soundboard section", config: { canSeeRecentlyHeard: !0, canSeeFrequentlyPlayed: !1 } }, { id: 2, label: "User can see Frequently Played soundboard section", config: { canSeeRecentlyHeard: !1, canSeeFrequentlyPlayed: !0 } }, { id: 3, label: "User can see Frequently Played & Recently Heard soundboard sections", config: { canSeeRecentlyHeard: !0, canSeeFrequentlyPlayed: !0 } }] }); function r(e) { let { location: t, autoTrackExposure: n } = e; return i.getCurrentConfig({ location: t }, { autoTrackExposure: n }) } function s(e) { let { autoTrackExposure: t, location: n } = e; return i.useExperiment({ location: n }, { autoTrackExposure: t }) } }, 208049: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addFavoriteSound: function() { return R }, deleteSound: function() { return C }, maybeFetchSoundboardSounds: function() { return N }, muteCustomJoinSound: function() { return y }, playSoundLocally: function() { return L }, removeFavoriteSound: function() { return g }, reportSoundFinishedPlaying: function() { return D }, reportSoundStartedPlaying: function() { return v }, updateSound: function() { return O }, updateUserSoundboardVolume: function() { return M }, uploadSound: function() { return p } }), n("47120"), n("653041"); var i = n("392711"), r = n.n(i), s = n("544891"), a = n("570140"), o = n("668781"), l = n("479531"), u = n("675478"), d = n("763296"), _ = n("697426"), c = n("174470"), E = n("710111"), I = n("981631"), T = n("526761"), f = n("689938"); let S = async e => { try { let t = (await s.HTTP.get({ url: I.Endpoints.SOUNDBOARD_DEFAULT_SOUNDS, query: { guild_ids: e } })).body.map(e => (0, _.soundboardSoundFromAPI)(e, E.DEFAULT_SOUND_GUILD_ID)); a.default.dispatch({ type: "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS", soundboardSounds: t }) } catch (e) { throw a.default.dispatch({ type: "SOUNDBOARD_FETCH_DEFAULT_SOUNDS_FAILURE" }), new l.default(e) } }, h = e => new Promise(t => { let n = () => { a.default.unsubscribe(e, n), setTimeout(t, 0) }; a.default.subscribe(e, n) }), A = e => { if (!d.default.shouldFetchDefaultSounds()) return Promise.resolve(); a.default.dispatch({ type: "SOUNDBOARD_FETCH_DEFAULT_SOUNDS" }); let t = h("SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS"); return S(e), t }, m = () => { let e = (0, c.getGuildIdsToFetchSoundsFor)(); if (0 === e.length) return Promise.resolve(); let t = h("SOUNDBOARD_SOUNDS_RECEIVED"); return a.default.dispatch({ type: "GUILD_SOUNDBOARD_FETCH" }), a.default.dispatch({ type: "REQUEST_SOUNDBOARD_SOUNDS", guildIds: e }), t }, N = () => __OVERLAY__ ? (a.default.dispatch({ type: "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST" }), Promise.all([])) : Promise.all([A(), m()]); async function p(e) { let { guildId: t, name: n, sound: i, volume: r, emojiId: a, emojiName: o } = e, l = await s.HTTP.post({ url: I.Endpoints.GUILD_SOUNDBOARD_SOUNDS(t), body: { name: n, sound: i, volume: r, emoji_id: a, emoji_name: o } }); return (0, _.soundboardSoundFromAPI)(l.body, t) } async function O(e) { let { guildId: t, soundId: n, name: i, volume: r, emojiId: a, emojiName: o } = e, l = await s.HTTP.patch({ url: I.Endpoints.GUILD_SOUNDBOARD_SOUND(t, n), body: { name: i, volume: r, emoji_id: a, emoji_name: o } }); return (0, _.soundboardSoundFromAPI)(l.body, t) } async function C(e, t) { await s.HTTP.del({ url: I.Endpoints.GUILD_SOUNDBOARD_SOUND(e, t), oldFormErrors: !0 }) } function R(e) { u.FrecencyUserSettingsActionCreators.updateAsync("favoriteSoundboardSounds", t => r().size(t.soundIds) >= T.MAX_FAVORITES ? (o.default.show({ title: f.default.Messages.FAVORITES_LIMIT_REACHED_TITLE, body: f.default.Messages.FAVORITES_LIMIT_REACHED_BODY.format({ count: T.MAX_FAVORITES }) }), !1) : !t.soundIds.includes(e) && void t.soundIds.push(e), T.UserSettingsDelay.INFREQUENT_USER_ACTION) } function g(e) { u.FrecencyUserSettingsActionCreators.updateAsync("favoriteSoundboardSounds", t => { t.soundIds = t.soundIds.filter(t => t !== e) }, T.UserSettingsDelay.INFREQUENT_USER_ACTION) } function L(e, t, n) { a.default.dispatch({ type: "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY", sound: t, channelId: e, trigger: n }) } function v(e, t) { a.default.dispatch({ type: "GUILD_SOUNDBOARD_SOUND_PLAY_START", soundId: e, userId: t }) } function D(e, t) { a.default.dispatch({ type: "GUILD_SOUNDBOARD_SOUND_PLAY_END", soundId: e, userId: t }) } function M(e) { a.default.dispatch({ type: "USER_SOUNDBOARD_SET_VOLUME", volume: e }) } function y(e) { a.default.dispatch({ type: "SOUNDBOARD_MUTE_JOIN_SOUND", channelId: e }) } }, 710111: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { CUSTOM_CALL_SOUND_GLOBAL_GUILD_ID: function() { return _ }, DEFAULT_KEYBIND: function() { return u }, DEFAULT_SOUND_GUILD_ID: function() { return o }, EMPTY_SOUND_LIST: function() { return d }, MAX_LENGTH_SOUND_NAME: function() { return s }, MAX_SOUND_LENGTH_SECONDS: function() { return a }, NUM_FREQUENTLY_USED_SOUNDS: function() { return E }, NUM_RECENTLY_HEARD_SOUNDS: function() { return c }, SoundboardWheelSize: function() { return l } }), n("47120"); let s = 32, a = 5, o = "DEFAULT"; (r = i || (i = {}))[r.SUCCESS = 0] = "SUCCESS", r[r.INTERRUPTED = 1] = "INTERRUPTED"; let l = { width: 424, height: 424, padding: 100 }, u = "ctrl+`", d = [], _ = "0", c = 6, E = 6 }, 135869: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"); let r = { currentPreviewRef: i.createRef() }, s = i.createContext(r); t.default = s }, 178106: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"); var i, r = n("392711"), s = n.n(r), a = n("31775"), o = n.n(a), l = n("442837"), u = n("570140"), d = n("704907"), _ = n("581883"), c = n("594174"), E = n("164878"), I = n("763296"), T = n("697426"), f = n("710111"), S = n("526761"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = [], m = new(o())({ max: f.NUM_RECENTLY_HEARD_SOUNDS }), N = new d.default({ computeBonus: () => 100, computeWeight: e => { let t = 0; return e <= 3 ? t = 100 : e <= 15 ? t = 70 : e <= 30 ? t = 50 : e <= 45 ? t = 30 : e <= 80 && (t = 10), t }, lookupKey: e => I.default.getSoundById(e), afterCompute: () => {}, numFrequentlyItems: f.NUM_FREQUENTLY_USED_SOUNDS }); function p() { var e, t; if (!O()) return; let n = null === (e = _.default.frecencyWithoutFetchingLatest.playedSoundFrecency) || void 0 === e ? void 0 : e.playedSounds; N.overwriteHistory((t = null != n ? n : {}, s().mapValues(t, e => ({ ...e, recentUses: e.recentUses.map(Number).filter(e => e > 0) }))), A) } function O() { return (0, E.recentlyHeardExperiment)({ location: "soundboard_event_store", autoTrackExposure: !1 }).canSeeFrequentlyPlayed } class C extends(i = l.default.PersistedStore) { initialize(e) { this.waitFor(c.default, I.default), (null == e ? void 0 : e.recentlyHeardCache) != null && m.load(e.recentlyHeardCache), (null == e ? void 0 : e.playedEventsPendingFlush) != null && (A = e.playedEventsPendingFlush), this.syncWith([_.default], p) } getState() { return { recentlyHeardCache: m.dump(), playedEventsPendingFlush: A } } hasPendingUsage() { return A.length > 0 } get playedSoundHistory() { return N.usageHistory } get recentlyHeardSoundIds() { return m.values() } get frecentlyPlayedSounds() { return N.frequently } } h(C, "displayName", "SoundboardEventStore"), h(C, "persistKey", "SoundboardEventStore"), t.default = new C(u.default, { GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY: function(e) { let { sound: t, trigger: n } = e; if (!O()) return; let i = t.soundId.toString(); n === T.LocalSoundTrigger.SOUNDBOARD && function(e) { N.track(e), A.push({ key: e, timestamp: Date.now() }), N.compute() }(i) }, GUILD_SOUNDBOARD_SOUND_PLAY_START: function(e) { var t; let { soundId: n, userId: i } = e; if (! function() { return (0, E.recentlyHeardExperiment)({ location: "soundboard_event_store", autoTrackExposure: !1 }).canSeeRecentlyHeard }()) return; let r = n.toString(); i !== (null === (t = c.default.getCurrentUser()) || void 0 === t ? void 0 : t.id) && function(e) { for (let t of I.default.getSounds().values()) if (null != t.find(t => t.soundId.toString() === e)) return !0; return !1 }(r) && function(e) { m.set(e, e) }(r) }, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: { type: t }, wasSaved: n } = e; O() && t === S.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS && n && (A = []) } }) }, 763296: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"), n("536091"); var i, r, s, a, o, l, u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"), E = n("695346"), I = n("581883"), T = n("594174"), f = n("626135"), S = n("36703"), h = n("709054"), A = n("710111"), m = n("981631"), N = n("526761"); (s = i || (i = {}))[s.NOT_FETCHED = 0] = "NOT_FETCHED", s[s.FETCHING = 1] = "FETCHING", s[s.FETCHED = 2] = "FETCHED"; let p = new Map, O = new Map, C = new Set, R = 0, g = 0, L = new Set, v = new Map, D = !1; function M(e) { let { sound: t } = e, n = p.get(t.guildId), i = null == n ? void 0 : n.findIndex(e => e.soundId === t.soundId); null != n && null != i && -1 !== i ? (n[i] = t, p.set(t.guildId, [...n])) : null != n && (null == n || n.push(t), p.set(t.guildId, [...n])) } let y = d().debounce(e => { f.default.track(m.AnalyticEvents.UPDATE_SOUNDBOARD_SETTINGS, { volume: Math.round((0, S.amplitudeToPerceptual)(e)) }), E.SoundboardSettings.updateSetting({ volume: e }) }, 1e3); function P(e) { var t, n; let i = null !== (n = null == e ? void 0 : null === (t = e.audioContextSettings) || void 0 === t ? void 0 : t.user) && void 0 !== n ? n : {}; for (let [e, t] of Object.entries(i)) t.soundboardMuted ? C.add(e) : C.delete(e); for (let e of C.keys()) null == i[e] && C.delete(e) } class U extends(r = _.default.Store) { initialize() { this.waitFor(I.default), P(I.default.settings) } getOverlaySerializedState() { return { soundboardSounds: Object.fromEntries(p), favoritedSoundIds: Array.from(L), localSoundboardMutes: Array.from(C) } } getSounds() { return p } getSoundsForGuild(e) { return p.get(e) } getSound(e, t) { var n; return (null !== (n = p.get(e)) && void 0 !== n ? n : []).find(e => e.soundId === t) } getSoundById(e) { return Array.from(p.values()).flat().find(t => t.soundId === e) } isFetchingSounds() { return 1 === g } isFetchingDefaultSounds() { return 1 === R } isFetching() { return this.isFetchingSounds() || this.isFetchingDefaultSounds() } shouldFetchDefaultSounds() { return 0 === R } hasFetchedDefaultSounds() { return 2 === R } isUserPlayingSounds(e) { let t = v.get(e); return null != t && t > 0 } isPlayingSound(e) { return null != O.get(e) } isFavoriteSound(e) { return L.has(e) } getFavorites() { return L } isLocalSoundboardMuted(e) { return C.has(e) } hasHadOtherUserPlaySoundInSession() { return D } hasFetchedAllSounds() { return 2 === g && 2 === R } } l = "SoundboardStore", (o = "displayName") in(a = U) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new U(c.default, { LOGOUT: function() { p.clear(), O.clear(), v.clear(), D = !1, g = 0, R = 0 }, GUILD_SOUNDBOARD_FETCH: function() { g = 1 }, GUILD_SOUNDBOARD_SOUND_CREATE: M, GUILD_SOUNDBOARD_SOUND_UPDATE: M, GUILD_SOUNDBOARD_SOUND_DELETE: function(e) { let { soundId: t, guildId: n } = e, i = p.get(n), r = null == i ? void 0 : i.findIndex(e => e.soundId === t); null != i && null != r && !(r < 0) && (i.splice(r, 1), p.set(n, [...i])) }, GUILD_SOUNDBOARD_SOUND_PLAY_START: function(e) { var t, n, i; let { soundId: r, userId: s } = e, a = (null !== (n = O.get(r)) && void 0 !== n ? n : 0) + 1, o = (null !== (i = v.get(s)) && void 0 !== i ? i : 0) + 1; O.set(r, a), v.set(s, o), s !== (null === (t = T.default.getCurrentUser()) || void 0 === t ? void 0 : t.id) && (D = !0) }, GUILD_SOUNDBOARD_SOUND_PLAY_END: function(e) { var t, n; let { soundId: i, userId: r } = e, s = (null !== (t = O.get(i)) && void 0 !== t ? t : 0) - 1, a = (null !== (n = v.get(r)) && void 0 !== n ? n : 0) - 1; s <= 0 ? O.delete(i) : O.set(i, s), a <= 0 ? v.delete(r) : v.set(r, a) }, USER_SOUNDBOARD_SET_VOLUME: function(e) { let { volume: t } = e; y(t) }, VOICE_CHANNEL_SELECT: function() { O.clear(), v.clear() }, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: t } = e, { type: n, proto: i } = t; if (n === N.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) { var r, s; L = new Set(null !== (s = null == i ? void 0 : null === (r = i.favoriteSoundboardSounds) || void 0 === r ? void 0 : r.soundIds) && void 0 !== s ? s : []) } else n === N.UserSettingsTypes.PRELOADED_USER_SETTINGS && P(i) }, SOUNDBOARD_FETCH_DEFAULT_SOUNDS: function() { R = 1 }, SOUNDBOARD_FETCH_DEFAULT_SOUNDS_SUCCESS: function(e) { let { soundboardSounds: t } = e; p.set(A.DEFAULT_SOUND_GUILD_ID, t), R = 2 }, SOUNDBOARD_SOUNDS_RECEIVED: function(e) { let { updates: t } = e; t.forEach(e => { let { guildId: t, sounds: n } = e; p.set(t, n) }), g = 2 }, GUILD_DELETE: function(e) { let { guild: t } = e; p.delete(t.id) }, AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE: function(e) { let { userId: t } = e; C.has(t) ? C.delete(t) : C.add(t) }, OVERLAY_INITIALIZE: function(e) { let { soundboardStoreState: t } = e; p = new Map(h.default.entries(t.soundboardSounds)), L = new Set(t.favoritedSoundIds), C = new Set(t.localSoundboardMutes) }, GUILD_SOUNDBOARD_SOUNDS_UPDATE: function(e) { let { guildId: t, soundboardSounds: n } = e; p.set(t, n) } }) }, 697426: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d, _, c, E, I, T, f; function S(e, t) { let { sound_id: n, emoji_id: i, emoji_name: r, user_id: s, available: a, ...o } = e; return { ...o, soundId: n, guildId: t, emojiId: i, emojiName: r, userId: s, available: null == a || a } } function h(e) { let { soundId: t, guildId: n, emojiId: i, emojiName: r, userId: s, ...a } = e; return { ...a, sound_id: t, guild_id: n, emoji_id: i, emoji_name: r, user_id: s } } n.r(t), n.d(t, { AnalyticsChangeType: function() { return s }, AnalyticsSoundSource: function() { return a }, AnalyticsSoundType: function() { return r }, LocalSoundTrigger: function() { return u }, SoundButtonOverlay: function() { return i }, SoundboardSoundGridSectionType: function() { return o }, SoundboardSoundItemType: function() { return l }, soundboardSoundFromAPI: function() { return S }, soundboardSoundToAPI: function() { return h } }), (d = i || (i = {}))[d.PLAY = 0] = "PLAY", d[d.ADD = 1] = "ADD", (_ = r || (r = {})).ENTRY = "entry_sound", _.EXIT = "exit_sound", _.DEFAULT = "default", (c = s || (s = {})).ADDED = "added", c.UPDATED = "updated", c.REMOVED = "removed", (E = a || (a = {})).DEFAULT = "default", E.CUSTOM = "custom", (I = o || (o = {}))[I.FAVORITES = 0] = "FAVORITES", I[I.RECENTLY_HEARD = 1] = "RECENTLY_HEARD", I[I.FREQUENTLY_USED = 2] = "FREQUENTLY_USED", I[I.GUILD = 3] = "GUILD", I[I.DEFAULTS = 4] = "DEFAULTS", I[I.SEARCH = 5] = "SEARCH", (T = l || (l = {}))[T.SOUND = 0] = "SOUND", T[T.ADD_SOUND = 1] = "ADD_SOUND", (f = u || (u = {}))[f.GIFT_CODE = 0] = "GIFT_CODE", f[f.SOUNDBOARD = 1] = "SOUNDBOARD", f[f.JOINED_VOICE_CHANNEL = 2] = "JOINED_VOICE_CHANNEL" }, 242291: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canUseSoundboardSound: function() { return R }, getAmplitudinalSoundboardVolume: function() { return O }, maybePlayCustomJoinSound: function() { return L }, playSound: function() { return g }, removeCustomJoinSound: function() { return D }, trackCustomCallSoundExternallyDeleted: function() { return P }, updateCustomJoinSound: function() { return M }, useSoundBoardDismissContentTypes: function() { return v } }), n("653041"); var i = n("399606"), r = n("524437"), s = n("736045"), a = n("695346"), o = n("675478"), l = n("581883"), u = n("401062"), d = n("131704"), _ = n("496675"), c = n("594174"), E = n("626135"), I = n("74538"), T = n("51144"), f = n("208049"), S = n("763296"), h = n("697426"), A = n("641015"), m = n("893663"), N = n("710111"), p = n("981631"); function O() { var e; let t = a.SoundboardSettings.getSetting(); return null !== (e = null == t ? void 0 : t.volume) && void 0 !== e ? e : 100 } function C(e, t) { return (null == t ? void 0 : t.guild_id) == null || _.default.can(p.Permissions.USE_EXTERNAL_SOUNDS, t) || e.guildId === N.DEFAULT_SOUND_GUILD_ID || e.guildId === (null == t ? void 0 : t.guild_id) } function R(e, t, n) { let i = !(arguments.length > 3) || void 0 === arguments[3] || arguments[3]; return (I.default.canUseSoundboardEverywhere(e) || t.guildId === (null == n ? void 0 : n.guild_id) || t.guildId === N.DEFAULT_SOUND_GUILD_ID) && C(t, n) && (!i || t.available) } function g(e, t, n) { (0, f.playSoundLocally)(t, e, h.LocalSoundTrigger.SOUNDBOARD), (0, u.sendVoiceChannelSoundboardEffect)(t, e, __OVERLAY__, n) } async function L(e) { let t = c.default.getCurrentUser(), n = (0, s.default)(), i = (0, m.getCustomJoinSound)(e); if (null == n || d.SILENT_JOIN_LEAVE_CHANNEL_TYPES.has(n.type) || null == i || !I.default.canUseCustomCallSounds(t) || !(0, A.canSelectedVoiceChannelUseSoundboard)()) return; await (0, f.maybeFetchSoundboardSounds)(); let r = i.guildId === N.CUSTOM_CALL_SOUND_GLOBAL_GUILD_ID ? N.DEFAULT_SOUND_GUILD_ID : i.guildId, a = S.default.getSound(r, i.soundId); if (null != a) { var o, l; if (!C(a, n) || !R(t, a, n, !0)) return null; o = a, l = n.id, (0, f.playSoundLocally)(l, o, h.LocalSoundTrigger.JOINED_VOICE_CHANNEL), (0, u.sendVoiceChannelCustomCallSoundEffect)(l, o, __OVERLAY__) } } function v(e) { var t, n; let { isSoundboardButtonDisabled: s = !1 } = e, a = (0, i.useStateFromStores)([c.default], () => c.default.getCurrentUser()), o = [r.DismissibleContent.SOUNDBOARD_EDUCATION]; if (!s && !Object.values(null !== (n = null === (t = l.default.settings.guilds) || void 0 === t ? void 0 : t.guilds) && void 0 !== n ? n : {}).some(e => null != e.joinSound)) { o.push(r.DismissibleContent.CUSTOM_CALL_SOUNDS_SPARKLES); let e = (0, T.ageEligibleForPremiumUpsell)(a); (I.default.canUseCustomCallSounds(a) || e) && o.push(r.DismissibleContent.CUSTOM_CALL_SOUNDS_PICKER_UPSELL) } return o } function D(e, t) { (0, o.updateUserGuildSettings)(e, n => { n.joinSound = void 0, y({ guildId: e, changeType: h.AnalyticsChangeType.REMOVED, soundType: h.AnalyticsSoundType.ENTRY, location: t }) }, o.UserSettingsDelay.INFREQUENT_USER_ACTION) } function M(e, t, n) { (0, o.updateUserGuildSettings)(e, i => { let r = t.guildId === N.DEFAULT_SOUND_GUILD_ID, s = r ? h.AnalyticsSoundSource.DEFAULT : h.AnalyticsSoundSource.CUSTOM, a = null != i.joinSound ? h.AnalyticsChangeType.UPDATED : h.AnalyticsChangeType.ADDED; i.joinSound = { soundId: t.soundId, guildId: r ? N.CUSTOM_CALL_SOUND_GLOBAL_GUILD_ID : t.guildId }, y({ guildId: e, changeType: a, soundSource: s, soundType: h.AnalyticsSoundType.ENTRY, location: n }) }, o.UserSettingsDelay.INFREQUENT_USER_ACTION) } function y(e) { let { guildId: t, changeType: n, soundType: i, soundSource: r, location: s } = e; E.default.track(p.AnalyticEvents.USER_CUSTOM_CALL_SOUND_SETTING_UPDATED, { location_stack: s, guild_id: "" === t ? 0 : Number(t), change_type: n, sound_type: i, sound_source: r }) } function P(e) { let { location: t } = e; E.default.track(p.AnalyticEvents.USER_CUSTOM_CALL_SOUND_SETTING_GUILD_REMOVED, { location_stack: t }) } }, 641015: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canSelectedVoiceChannelUseSoundboard: function() { return o }, default: function() { return l } }); var i = n("592125"), r = n("496675"), s = n("944486"), a = n("981631"); function o() { let e = s.default.getVoiceChannelId(); return l(i.default.getChannel(e)) } function l(e) { if (null == e) return !1; if (a.ChannelTypesSets.CALLABLE.has(e.type)) return !0; let t = r.default.can(a.Permissions.USE_SOUNDBOARD, e), n = r.default.can(a.Permissions.SPEAK, e); return e.type === a.ChannelTypes.GUILD_VOICE && t && n } }, 22382: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("981631"); function r(e) { let { CDN_HOST: t, PROJECT_ENV: n } = window.GLOBAL_ENV; return "development" !== n ? "".concat(location.protocol, "//").concat(t).concat(i.Endpoints.SOUNDBOARD_SOUND(e)) : "".concat(location.protocol).concat(window.GLOBAL_ENV.API_ENDPOINT).concat(i.Endpoints.SOUNDBOARD_SOUND(e)) } }, 747071: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("695346"), r = n("131951"), s = n("36703"); function a(e) { let t = function() { var e; let t = i.SoundboardSettings.getSetting(); return (0, s.amplitudeToPerceptual)(null !== (e = null == t ? void 0 : t.volume) && void 0 !== e ? e : 100) / 100 }(); return Math.min(e * t * Math.min(r.default.getOutputVolume() / 100, 1), 1) } }, 421673: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }), n("724458"), n("653041"), n("47120"); var i = n("658722"), r = n.n(i), s = n("339085"), a = n("633302"), o = n("697426"), l = n("242291"); let u = []; function d(e, t, n, i) { if (0 === e.length) return u; let d = t.reduce((e, t) => { for (let n of t.items) t.categoryInfo.type !== o.SoundboardSoundGridSectionType.FAVORITES && n.type === o.SoundboardSoundItemType.SOUND && e.push(n.sound); return e }, []), _ = d.reduce((t, o) => (t[o.soundId] = function(e, t, n, i) { var o; let u = 0, d = t.name.toLocaleLowerCase(), _ = null != t.emojiId ? s.default.getCustomEmojiById(t.emojiId) : null, c = null != t.emojiName ? a.default.convertSurrogateToName(t.emojiName, !1) : null, E = null != c ? a.default.getByName(c) : null, I = null != _ ? [_.name] : null !== (o = null == E ? void 0 : E.names) && void 0 !== o ? o : []; return e === d && (u += 8), I.includes(e) && (u += 7), d.startsWith(e) && (u += 6), I.some(t => t.startsWith(e)) && (u += 5), d.endsWith(e) && (u += 4), I.some(t => t.endsWith(e)) && (u += 3), r()(e, t.name.toLocaleLowerCase()) && (u += 2), I.some(t => r()(e, t)) && (u += 1), u > 0 && (0, l.canUseSoundboardSound)(n, t, i) && (u += 100), u }(e.toLocaleLowerCase(), o, n, i), t), {}); return d.filter(e => _[e.soundId] > 0).sort((e, t) => _[t.soundId] - _[e.soundId]) } }, 100986: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("594190"), r = n("592125"), s = n("19780"), a = n("944486"), o = n("626135"), l = n("710111"), u = n("981631"), d = n("474936"); function _(e, t, n, _) { var c, E, I; let T = r.default.getChannel(a.default.getVoiceChannelId()), f = null == T ? void 0 : T.getGuildId(), S = s.default.getMediaSessionId(), h = s.default.getRTCConnectionId(), A = null === (c = i.default.getCurrentGameForAnalytics()) || void 0 === c ? void 0 : c.name, m = f !== n.guildId && n.guildId !== l.DEFAULT_SOUND_GUILD_ID; let N = (E = n, I = m, E.guildId === l.DEFAULT_SOUND_GUILD_ID ? "default" : I ? "custom-external" : "custom"); o.default.track(u.AnalyticEvents.PREMIUM_FEATURE_USAGE, { feature_name: d.AnalyticsPremiumFeatureNames.SOUNDBOARD_PLAY, feature_tier: m ? d.AnalyticsPremiumFeatureTiers.PREMIUM_STANDARD : d.AnalyticsPremiumFeatureTiers.FREE, guild_id: f, location_stack: e, rtc_connection_id: h, media_session_id: S, in_overlay: t, application_name: A, emoji_count: null != n.emojiId || null != n.emojiName ? 1 : 0, feature_selection: N, feature_selection_id: n.soundId, sound_type: _, is_broadcast: null != T && T.isBroadcastChannel() }) } }, 893663: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CustomSoundType: function() { return r }, getCustomJoinSound: function() { return u }, useCustomJoinSound: function() { return l } }); var i, r, s = n("442837"), a = n("581883"), o = n("710111"); function l(e) { return (0, s.useStateFromStores)([a.default], () => { var t, n; return d(e, null !== (n = null === (t = a.default.settings.guilds) || void 0 === t ? void 0 : t.guilds) && void 0 !== n ? n : {}) }) } function u(e) { var t, n; return d(e, null !== (n = null === (t = a.default.settings.guilds) || void 0 === t ? void 0 : t.guilds) && void 0 !== n ? n : {}) } function d(e, t) { var n, i; let r = null === (n = t[e]) || void 0 === n ? void 0 : n.joinSound, s = null === (i = t[o.CUSTOM_CALL_SOUND_GLOBAL_GUILD_ID]) || void 0 === i ? void 0 : i.joinSound, a = null != r ? r : s; return null != a ? { ...a, type: null != r ? 1 : 0 } : void 0 }(i = r || (r = {}))[i.GLOBAL = 0] = "GLOBAL", i[i.GUILD = 1] = "GUILD" }, 174470: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getGuildIdsToFetchSoundsFor: function() { return d }, useGuildIdsToFetchSoundsFor: function() { return u } }), n("47120"); var i = n("470079"), r = n("399606"), s = n("430824"), a = n("709054"), o = n("763296"); function l(e, t) { return a.default.keys(e).filter(e => null == t.get(e)) } function u() { let e = (0, r.useStateFromStores)([s.default], () => s.default.getGuilds()), t = (0, r.useStateFromStores)([o.default], () => o.default.getSounds()); return (0, i.useMemo)(() => l(e, t), [e, t]) } function d() { let e = s.default.getGuilds(); return l(e, o.default.getSounds()) } }, 549771: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useSortedGuildIdsForSoundboard: function() { return _ } }), n("733860"); var i = n("470079"), r = n("399606"), s = n("496675"), a = n("771845"), o = n("594174"), l = n("74538"), u = n("981631"), d = n("231338"); function _(e, t) { var n; let _ = (0, r.useStateFromStores)([o.default], () => o.default.getCurrentUser()), c = null !== (n = null == e ? void 0 : e.guild_id) && void 0 !== n ? n : u.EMPTY_STRING_SNOWFLAKE_ID, E = (0, r.useStateFromStores)([a.default], () => a.default.getFlattenedGuildIds()), I = (0, r.useStateFromStores)([s.default], () => null == e || null == e.guild_id || s.default.can(d.Permissions.USE_EXTERNAL_SOUNDS, e)); return i.useMemo(() => { if ((l.default.canUseSoundboardEverywhere(_) || !t) && I) { let e = "" !== c, t = e ? E.filter(e => e !== c) : E; return e && t.unshift(c), t } return [c] }, [_, t, c, E, I]) } }, 663215: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return N }, useSearchCategories: function() { return p } }), n("47120"), n("653041"); var i = n("470079"), r = n("442837"), s = n("889161"), a = n("675478"), o = n("430824"), l = n("496675"), u = n("594174"), d = n("74538"), _ = n("709054"), c = n("164878"), E = n("178106"), I = n("763296"), T = n("697426"), f = n("549771"), S = n("710111"); function h(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = e.map(e => ({ type: T.SoundboardSoundItemType.SOUND, sound: e })); return t ? n.sort((e, t) => _.default.compare(e.sound.soundId, t.sound.soundId)) : n } function A(e) { let { sections: t, guildIds: n, allSounds: i, potentialSoundIdsForSection: r, sectionType: s, sortById: a } = e, o = {}; for (let e of [...n, S.DEFAULT_SOUND_GUILD_ID]) { var l; for (let t of null !== (l = i.get(e)) && void 0 !== l ? l : []) null != r.find(e => e === t.soundId) && (o[t.soundId] = t) } let u = []; for (let e of r) { let t = o[e]; null != t && u.push(t) } let d = h(u, a); d.length > 0 && t.push({ key: s, categoryInfo: { type: s }, items: d }) } function m(e, t) { var n; let i = null !== (n = t.get(S.DEFAULT_SOUND_GUILD_ID)) && void 0 !== n ? n : S.EMPTY_SOUND_LIST; e.push({ key: T.SoundboardSoundGridSectionType.DEFAULTS, categoryInfo: { type: T.SoundboardSoundGridSectionType.DEFAULTS }, items: h(i) }) } function N(e) { let { filterOutEmptyCurrentGuild: t = !1 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], _ = (0, r.useStateFromStores)([u.default], () => u.default.getCurrentUser()), [S, N, p] = (0, r.useStateFromStoresArray)([I.default], () => [I.default.getSounds(), I.default.getFavorites(), I.default.isFetching()]), O = (0, f.useSortedGuildIdsForSoundboard)(e, !1), C = (0, r.useStateFromStoresArray)([o.default], () => { let e = []; return O.forEach(t => { let n = o.default.getGuild(t); null != n && e.push(n) }), e }), R = d.default.canUseSoundboardEverywhere(_), g = (0, r.useStateFromStores)([o.default], () => o.default.getGuild(null == e ? void 0 : e.guild_id)), L = (0, r.useStateFromStores)([l.default], () => { let { canCreateExpressions: e } = (0, s.getManageResourcePermissions)(g); return e }, [g]), { canSeeRecentlyHeard: v, canSeeFrequentlyPlayed: D } = (0, c.useRecentlyHeardExperiment)({ location: "soundboard-useSoundGrid", autoTrackExposure: !0 }), M = function() { return i.useEffect(() => { a.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []), (0, r.useStateFromStores)([E.default], () => E.default.frecentlyPlayedSounds) }(), y = (0, r.useStateFromStoresArray)([E.default], () => E.default.recentlyHeardSoundIds); return i.useMemo(() => { let e = []; return n ? (m(e, S), { categories: e, isFetching: p }) : (A({ sections: e, guildIds: O, allSounds: S, potentialSoundIdsForSection: Array.from(N), sectionType: T.SoundboardSoundGridSectionType.FAVORITES, sortById: !0 }), v && A({ sections: e, guildIds: O, allSounds: S, potentialSoundIdsForSection: y, sectionType: T.SoundboardSoundGridSectionType.RECENTLY_HEARD, sortById: !1 }), D && A({ sections: e, guildIds: O, allSounds: S, potentialSoundIdsForSection: M.map(e => e.soundId), sectionType: T.SoundboardSoundGridSectionType.FREQUENTLY_USED, sortById: !1 }), ! function(e, t, n, i, r) { var s; if (null == t) return; let a = null !== (s = i.get(t.id)) && void 0 !== s ? s : [], o = h(a), l = a.length < t.getMaxSoundboardSlots() && n, u = 0 === o.length; (l || u) && !r && o.push({ type: T.SoundboardSoundItemType.ADD_SOUND, guild: t }); !(r && u) && e.push({ categoryInfo: { type: T.SoundboardSoundGridSectionType.GUILD, guild: t }, key: t.id, items: o }) }(e, g, L, S, t), !R && m(e, S), ! function(e, t, n, i) { for (let s of t) { var r; if (s.id === n) continue; let t = h(null !== (r = i.get(s.id)) && void 0 !== r ? r : []); t.length > 0 && e.push({ categoryInfo: { type: T.SoundboardSoundGridSectionType.GUILD, guild: s }, key: s.id, items: t }) } }(e, C, null == g ? void 0 : g.id, S), R && m(e, S), { categories: e, isFetching: p }) }, [O, S, N, y, M, D, v, g, L, t, R, C, n, p]) } function p(e, t, n) { return i.useMemo(() => n.length > 0 ? [{ key: T.SoundboardSoundGridSectionType.SEARCH, categoryInfo: { type: T.SoundboardSoundGridSectionType.SEARCH }, items: h(t, !1) }] : e, [e, n.length, t]) } }, 706667: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("470079"), r = n("442837"), s = n("135869"), a = n("763296"), o = n("242291"), l = n("22382"), u = n("747071"); function d(e, t) { let { currentPreviewRef: n } = i.useContext(s.default), d = (0, r.useStateFromStores)([a.default], () => a.default.isPlayingSound(e.soundId), [e]), _ = i.useCallback(i => { null != n.current && n.current.pause(), null != t && (0, o.playSound)(e, t, i) }, [e, n, t]), c = i.useCallback(() => { let t = new Audio((0, l.default)(e.soundId)); null != n.current && n.current.pause(), n.current = t, t.currentTime = 0, t.volume = (0, u.default)(e.volume), t.play() }, [e, n]); return i.useCallback(() => () => { var e; return null === (e = n.current) || void 0 === e ? void 0 : e.pause() }, [n]), { playSoundboardSound: _, isPlayingSound: d, previewSound: c } } }, 409673: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PreviewButton: function() { return y }, SecondaryActionButton: function() { return M } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("924826"), l = n("442837"), u = n("846519"), d = n("692547"), _ = n("481060"), c = n("596454"), E = n("607070"), I = n("745510"), T = n("594174"), f = n("225196"), S = n("887208"), h = n("897353"), A = n("729285"), m = n("632184"), N = n("208049"), p = n("763296"), O = n("697426"), C = n("242291"), R = n("706667"), g = n("286654"), L = n("675654"), v = n("689938"), D = n("375513"); function M(e) { let { disabled: t = !1, onClick: n, text: r, children: s, tooltipPosition: o = "top" } = e; return (0, i.jsx)(_.Tooltip, { text: r, position: o, children: e => (0, i.jsx)(_.Clickable, { ...e, "aria-label": r, className: a()(D.secondaryButton, { [D.buttonDisabled]: t }), onClick: n, children: s }) }) } function y(e) { let { sound: t, previewSound: n, disabled: r = !1, tooltipPosition: s = "top" } = e; return (0, i.jsx)(M, { tooltipPosition: s, disabled: r, onClick: function(e) { e.stopPropagation(), e.currentTarget.blur(), n() }, text: v.default.Messages.SOUNDBOARD_SOUND_PREVIEW_SOUND.format({ emojiName: t.emojiName, soundName: t.name }), children: (0, i.jsx)(m.default, { className: D.secondaryIcon }) }) } t.default = r.forwardRef(function(e, t) { var n, s, m; let { sound: P, channel: U, className: b, focused: G, forceSecondaryActions: w = !1, interactive: k = !0, enableSecondaryActions: B = !1, suppressPlaySound: V, onMouseEnter: x, onSelectItem: F, analyticsLocations: H, buttonOverlay: Y = O.SoundButtonOverlay.PLAY, ...j } = e, { soundId: W, name: K, emojiId: z, emojiName: Z } = P, X = (0, l.useStateFromStores)([T.default], () => T.default.getCurrentUser()), Q = (0, g.useSoundButtonContextMenu)(P, null == U ? void 0 : U.guild_id), { playSoundboardSound: q, previewSound: J, isPlayingSound: $ } = (0, R.default)(P, null !== (n = null == U ? void 0 : U.id) && void 0 !== n ? n : null), { createMultipleConfettiAt: ee } = r.useContext(I.ConfettiCannonContext), et = r.useRef(null); let en = (s = P.soundId, m = et.current, r.useMemo(() => { if (null == m || "1" !== s) return { x: 0, y: 0 }; let e = m.getBoundingClientRect(); return { x: e.left + e.width / 2, y: e.top + e.height / 2 } }, [m, s])), ei = (0, l.useStateFromStores)([E.default], () => E.default.useReducedMotion), er = r.useRef(.01), es = r.useRef(new u.Interval), ea = "1" === P.soundId, eo = (0, l.useStateFromStores)([p.default], () => p.default.isFavoriteSound(W), [W]), el = "sound-".concat(P.soundId), eu = (0, o.useListItem)(el), ed = null != z || null != Z, e_ = !(0, C.canUseSoundboardSound)(X, P, U), ec = w || B && !e_; function eE(e) { e.stopPropagation(), e.currentTarget.blur(), eo ? (0, N.removeFavoriteSound)(W) : (0, N.addFavoriteSound)(W) } function eI() { return (0, i.jsx)(M, { disabled: !k && !w, onClick: eE, text: v.default.Messages.SOUNDBOARD_SOUND_FAVORITE_SOUND.format({ emojiName: P.emojiName, soundName: P.name }), children: eo ? (0, i.jsx)(S.default, { className: a()(D.secondaryIcon, D.favoriteIconFavorite), color: d.default.unsafe_rawColors.GOLD.css }) : (0, i.jsx)(f.default, { className: D.secondaryIcon }) }) } let eT = y({ sound: P, previewSound: J, disabled: e_ }), ef = () => (0, i.jsxs)("div", { className: D.buttonOverlay, children: [(0, i.jsx)("div", { className: a()({ [D.buttonOverlayBackground]: !V }) }), (0, i.jsxs)("div", { className: D.buttonOverlayActions, children: [ec && eT, !V && !e_ && (0, i.jsx)(h.default, { className: D.playIcon }), ec && eI()] })] }); return r.useEffect(() => { let e = es.current; return ea && e.start(1e3, () => { er.current = Math.max(er.current - .01, .01) }), () => e.stop() }, [ea]), (0, i.jsxs)("li", { ref: t, className: D.soundButtonWrapper, onMouseEnter: x, children: [(0, i.jsxs)(_.ClickableContainer, { ...j, buttonProps: { ...eu, id: el, role: "button" }, "aria-label": v.default.Messages.SOUNDBOARD_PLAY_SOUND.format({ emojiName: P.emojiName, soundName: P.name }), className: a()(b, D.soundButton, { [D.playing]: $, [D.hoverActiveBackground]: V, [D.soundButtonInteractive]: k, [D.buttonDisabled]: !k && !w, [D.premiumDisabled]: e_ && !w, [D.buttonDisabledSecondaryActionsEnabled]: !k && w, [D.focused]: k && G }), onClick: function() { if (ea && !ei && (er.current = Math.min(er.current + .01, .1), Math.random() < er.current && ee(en.x, en.y, void 0, void 0, { sprite: L.DUCK_CONFETTI_SPRITE })), null != F) { F(); return } V || q(H) }, onContextMenu: B && !e_ ? Q : void 0, children: [(0, i.jsxs)("div", { className: D.soundInfo, "aria-hidden": !0, ref: et, children: [ed && (0, i.jsx)(c.default, { emojiId: z, emojiName: Z, className: D.emoji }), (0, i.jsx)(_.Text, { variant: "text-xs/medium", color: k ? "header-primary" : "text-muted", className: a()(D.soundName, { [D.hasEmoji]: ed }), children: K })] }), function() { switch (Y) { case O.SoundButtonOverlay.ADD: return (0, i.jsxs)("div", { className: D.addButtonOverlay, children: [(0, i.jsx)("div", { className: D.buttonOverlayBackground }), (0, i.jsxs)("div", { className: D.buttonOverlayActions, children: [eT, (0, i.jsxs)("div", { className: D.addButton, children: [(0, i.jsx)(A.default, { className: D.plusSign }), (0, i.jsx)(_.Text, { variant: "text-xs/medium", color: "header-primary", children: v.default.Messages.GIFT_SELECT_SOUNDBOARD_ADD })] }), ec && eI()] })] }); case O.SoundButtonOverlay.PLAY: default: return ef() } }()] }), !P.available && (0, i.jsx)(_.Tooltip, { text: v.default.Messages.SOUNDBOARD_SOUND_DISABLED_PREMIUM_TIER_LOST, children: e => (0, i.jsx)("div", { className: D.unavailableTooltip, ...e }) })] }) }) }, 347072: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("889161"), l = n("729285"), u = n("343747"), d = n("689938"), _ = n("630916"); function c(e) { let { guild: t, focused: n, ...r } = e, { canCreateExpressions: c } = (0, o.useManageResourcePermissions)(t); return (0, i.jsx)(a.Tooltip, { text: d.default.Messages.SOUNDBOARD_SOUND_UPLOAD_BUTTON_DISABLED, shouldShow: !c, children: e => (0, i.jsx)("li", { className: _.soundButtonWrapper, ...e, children: (0, i.jsxs)(a.ClickableContainer, { ...r, "aria-label": d.default.Messages.SOUNDBOARD_UPLOAD_SOUND_FOR_GUILD.format({ guildName: t.name }), className: s()(_.soundAddButton, { [_.focused]: n, [_.disabled]: !c }), onClick: () => (0, u.default)(t.id), children: [(0, i.jsx)(l.default, { className: _.soundAddIcon }), (0, i.jsx)(a.Text, { variant: "text-xs/normal", color: c ? "header-primary" : "text-muted", children: d.default.Messages.SOUNDBOARD_SOUND_ADD_SOUND })] }) }) }) } }, 835648: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("91192"), l = n("552075"), u = n("481060"), d = n("880949"), _ = n("806966"), c = n("254494"), E = n("593618"), I = n("855693"), T = n("68972"), f = n("887208"), S = n("697426"), h = n("689938"), A = n("363563"); let m = [8, 8, 8, 8]; function N(e) { let { icon: t, isSelected: n, onClick: r, listItemProps: s, ...o } = e; return (0, i.jsx)(u.Clickable, { ...s, ...o, onClick: r, className: a()(A.categoryIcon, { [A.selected]: n }), children: (0, i.jsx)(t, { className: A.categoryIconIcon }) }) } function p(e) { let { category: t, categoryIndex: n, onClick: r, isSelected: s } = e, a = (0, o.useListItem)("soundboard_guild_".concat(n)); return (0, i.jsx)(u.Tooltip, { text: function(e) { switch (e.categoryInfo.type) { case S.SoundboardSoundGridSectionType.FAVORITES: return h.default.Messages.FAVORITES; case S.SoundboardSoundGridSectionType.RECENTLY_HEARD: return h.default.Messages.RECENTLY_HEARD; case S.SoundboardSoundGridSectionType.FREQUENTLY_USED: return h.default.Messages.FREQUENTLY_USED; case S.SoundboardSoundGridSectionType.GUILD: return (0, i.jsx)(E.GuildTooltipText, { guild: e.categoryInfo.guild, includeActivity: !1 }); case S.SoundboardSoundGridSectionType.DEFAULTS: return h.default.Messages.SOUNDBOARD_SOUND_SECTION_DEFAULTS } }(t), "aria-label": function(e) { switch (e.categoryInfo.type) { case S.SoundboardSoundGridSectionType.FAVORITES: return h.default.Messages.FAVORITES; case S.SoundboardSoundGridSectionType.RECENTLY_HEARD: return h.default.Messages.RECENTLY_HEARD; case S.SoundboardSoundGridSectionType.FREQUENTLY_USED: return h.default.Messages.FREQUENTLY_USED; case S.SoundboardSoundGridSectionType.GUILD: return e.categoryInfo.guild.name; case S.SoundboardSoundGridSectionType.DEFAULTS: return h.default.Messages.SOUNDBOARD_SOUND_SECTION_DEFAULTS } }(t), position: "right", children: e => (function(e, t, n, r, s) { switch (e.categoryInfo.type) { case S.SoundboardSoundGridSectionType.FAVORITES: return (0, i.jsx)(N, { ...r, icon: f.default, onClick: t, isSelected: n, listItemProps: s }, e.key); case S.SoundboardSoundGridSectionType.RECENTLY_HEARD: return (0, i.jsx)(N, { ...r, icon: I.default, onClick: t, isSelected: n, listItemProps: s }, e.key); case S.SoundboardSoundGridSectionType.FREQUENTLY_USED: return (0, i.jsx)(N, { ...r, icon: l.AnalyticsIcon, onClick: t, isSelected: n, listItemProps: s }, e.key); case S.SoundboardSoundGridSectionType.GUILD: return (0, i.jsx)(u.Clickable, { ...s, ...r, className: A.category, onClick: t, children: (0, i.jsx)(d.default, { guild: e.categoryInfo.guild, isSelected: n }) }, e.key); case S.SoundboardSoundGridSectionType.DEFAULTS: return (0, i.jsx)(N, { ...r, icon: T.default, onClick: t, isSelected: n, listItemProps: s }, e.key); default: return null } })(t, r, s, e, a) }) } function O(e) { let { soundboardListRef: t, categories: n, listPadding: s = m } = e, a = r.useRef(null), o = r.useCallback((e, t, n, r) => (0, i.jsx)(p, { category: e, categoryIndex: t, onClick: n, isSelected: r }), []); return (0, i.jsx)(c.default, { className: A.categoryList, categoryListRef: a, expressionsListRef: t, store: _.SoundboardPickerStore, categories: n, listPadding: s, renderCategoryListItem: o, rowCount: n.length, categoryHeight: 40 }) } }, 650743: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }); var i = n("735250"); n("470079"); var r = n("399606"), s = n("524437"), a = n("481060"), o = n("596454"), l = n("607070"), u = n("605236"), d = n("880949"), _ = n("28546"), c = n("65029"), E = n("430824"), I = n("556296"), T = n("451478"), f = n("465670"), S = n("84017"), h = n("759231"), A = n("358085"), m = n("13140"), N = n("763296"), p = n("981631"), O = n("689938"), C = n("144270"); function R(e) { let { soundboardSound: t, closePicker: R } = e, g = (0, _.useExpressionPickerStore)(e => e.searchQuery), L = (0, r.useStateFromStores)([N.default], () => null != t && N.default.isFavoriteSound(t.soundId)), v = (0, r.useStateFromStores)([E.default], () => E.default.getGuild(null == t ? void 0 : t.guildId)), D = (0, r.useStateFromStores)([l.default], () => l.default.useReducedMotion, []), M = (0, r.useStateFromStores)([T.default], () => T.default.isFocused()), y = (0, r.useStateFromStores)([I.default], () => I.default.getKeybindForAction(p.GlobalKeybindActions.SOUNDBOARD_HOLD)); if (null != t && g.length > 0) return (0, i.jsx)(c.default, { graphicPrimary: null != t.emojiId || null != t.emojiName ? (0, i.jsx)(o.default, { emojiId: t.emojiId, emojiName: t.emojiName, className: C.emoji }) : (0, i.jsx)(S.default, { className: C.emoji }), graphicSecondary: null != v ? (0, i.jsx)(d.default, { guild: v, shouldAnimate: !D && M }) : null, titlePrimary: t.name, titleSecondary: null == v ? void 0 : v.name, isFavorite: L }); let P = () => { R(), (0, a.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("54626")]).then(n.bind(n, "355453")); return t => (0, i.jsx)(e, { ...t }) }) }, U = (0, u.isDismissibleContentDismissed)(s.DismissibleContent.SOUNDBOARD_KEYBIND_TIP), b = null != y && (0, A.isWindows)() && !U ? O.default.Messages.SOUNDBOARD_KEYBIND_HINT_NO_POPOUT_WHEEL_SUPPORT.format({ keybind: (0, m.toString)(y.shortcut, !0), openSettingsHook: (e, t) => (0, i.jsx)(a.Anchor, { onClick: P, children: e }, t) }) : null; return null == b ? null : (0, i.jsxs)("div", { className: C.keybindHint, children: [(0, i.jsx)(h.default, { className: C.warningIcon }), (0, i.jsx)(a.Text, { variant: "text-sm/medium", color: "text-normal", className: C.keybindHintText, children: b }), (0, i.jsx)(a.Clickable, { className: C.closeButton, onClick: () => (0, u.markDismissibleContentAsDismissed)(s.DismissibleContent.SOUNDBOARD_KEYBIND_TIP), children: (0, i.jsx)(f.default, { width: 16, height: 16 }) })] }) } }, 394740: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return C } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("780384"), l = n("481060"), u = n("2052"), d = n("410030"), _ = n("100527"), c = n("906732"), E = n("98278"), I = n("197115"), T = n("626135"), f = n("74538"), S = n("706667"), h = n("409673"), A = n("981631"), m = n("474936"), N = n("689938"), p = n("864295"), O = n("369454"); function C(e) { var t; let { onClose: s, closePopout: C, sound: R, channel: g } = e, L = (0, d.default)(), [v, D] = r.useState(!1), { location: M } = (0, u.useAnalyticsContext)(), y = r.useMemo(() => ({ ...M, section: A.AnalyticsSections.SOUNDBOARD_SOUND_PICKER }), [M]), { analyticsLocations: P } = (0, c.default)(_.default.PREMIUM_UPSELL), { previewSound: U } = (0, S.default)(R, null !== (t = null == g ? void 0 : g.id) && void 0 !== t ? t : null), b = (0, h.PreviewButton)({ sound: R, previewSound: U, tooltipPosition: "left" }), G = (0, o.isThemeLight)(L) ? n("537381") : n("341048"); r.useEffect(() => { T.default.track(A.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: m.PremiumUpsellTypes.SOUND_PICKER_SOUND_CLICKED, is_external: !0, location: { ...y, object: A.AnalyticsObjects.SOUNDBOARD_SOUND }, location_stack: P, sku_id: f.default.getSkuIdForPremiumType(m.PremiumTypes.TIER_2) }) }, [P, y]); let w = r.useCallback(() => { T.default.track(A.AnalyticEvents.PREMIUM_PROMOTION_OPENED, { location_section: A.AnalyticsSections.SOUNDBOARD_SOUND_PICKER_UPSELL }), (0, E.navigateToPremiumMarketingPage)(), C() }, [C]); return (0, i.jsxs)("div", { className: a()(O.premiumPromo, p.container), children: [(0, i.jsx)(l.Clickable, { className: O.premiumPromoClose, onClick: s, children: N.default.Messages.CLOSE }), (0, i.jsx)("img", { "aria-hidden": !0, alt: "", className: a()(O.premiumPromoImage, O.premiumPromoImageSmaller, p.image), src: G }), (0, i.jsx)(l.Heading, { variant: "heading-lg/normal", color: "header-primary", className: O.premiumPromoTitle, children: N.default.Messages.SOUNDBOARD_NITRO_UPSELL_TITLE }), (0, i.jsx)(l.Text, { variant: "text-md/normal", color: "header-secondary", className: O.premiumPromoDescription, children: N.default.Messages.SOUNDBOARD_NITRO_UPSELL_BODY.format({ onClick: w }) }), (0, i.jsxs)("div", { className: p.buttonContainer, children: [(0, i.jsx)("div", { className: p.previewButtonContainer, children: b }), (0, i.jsx)(I.default, { subscriptionTier: m.PremiumSubscriptionSKUs.TIER_2, submitting: v, premiumModalAnalyticsLocation: { section: A.AnalyticsSections.SOUNDBOARD_SOUND_PICKER, object: A.AnalyticsObjects.BUTTON_CTA }, size: l.Button.Sizes.SMALL, color: l.Button.Colors.GREEN, onClick: () => { D(!0) }, onSubscribeModalClose: e => { D(!1), e && s() } })] })] }) } }, 526617: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return K } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("552075"), u = n("481060"), d = n("239091"), _ = n("788911"), c = n("906732"), E = n("880949"), I = n("806966"), T = n("28546"), f = n("468954"), S = n("695346"), h = n("594174"), A = n("979651"), m = n("153124"), N = n("259580"), p = n("855693"), O = n("68972"), C = n("887208"), R = n("664800"), g = n("632184"), L = n("74538"), v = n("697426"), D = n("242291"), M = n("421673"), y = n("663215"), P = n("409673"), U = n("347072"), b = n("835648"), G = n("650743"), w = n("394740"), k = n("343747"), B = n("981631"), V = n("689938"), x = n("819245"); let F = [8, 0, 8, 8]; function H(e) { return 0 === e ? 16 : 32 } function Y(e) { let { categoryInfo: t, collapsed: n, toggleCollapsed: r, index: s } = e; return (0, i.jsx)("div", { className: x.sectionContainer, children: (0, i.jsx)(u.Clickable, { className: a()(x.sectionHeader, { [x.notFirstSectionHeader]: 0 !== s }), onClick: r, "aria-expanded": !n, children: (0, i.jsxs)("div", { className: x.sectionHeaderContent, children: [function() { switch (t.type) { case v.SoundboardSoundGridSectionType.FAVORITES: return (0, i.jsx)(C.default, { className: x.headerIcon }); case v.SoundboardSoundGridSectionType.RECENTLY_HEARD: return (0, i.jsx)(p.default, { className: x.headerIcon }); case v.SoundboardSoundGridSectionType.FREQUENTLY_USED: return (0, i.jsx)(l.AnalyticsIcon, { className: x.headerIcon }); case v.SoundboardSoundGridSectionType.GUILD: return (0, i.jsx)(E.default, { guild: t.guild, height: 16, width: 16 }); case v.SoundboardSoundGridSectionType.DEFAULTS: return (0, i.jsx)(O.default, { className: x.headerIcon }); case v.SoundboardSoundGridSectionType.SEARCH: return (0, i.jsx)(R.default, { className: x.headerIcon }) } }(), (0, i.jsx)(u.Heading, { variant: "eyebrow", color: "none", className: x.sectionTitle, children: function() { switch (t.type) { case v.SoundboardSoundGridSectionType.FAVORITES: return V.default.Messages.FAVORITES; case v.SoundboardSoundGridSectionType.RECENTLY_HEARD: return V.default.Messages.RECENTLY_HEARD; case v.SoundboardSoundGridSectionType.FREQUENTLY_USED: return V.default.Messages.FREQUENTLY_USED; case v.SoundboardSoundGridSectionType.GUILD: return t.guild.name; case v.SoundboardSoundGridSectionType.DEFAULTS: return V.default.Messages.SOUNDBOARD_SOUND_SECTION_DEFAULTS; case v.SoundboardSoundGridSectionType.SEARCH: return V.default.Messages.SEARCH_RESULTS_SECTION_LABEL } }() }), (0, i.jsx)(N.default, { className: x.headerIcon, direction: n ? N.default.Directions.RIGHT : N.default.Directions.DOWN })] }) }) }) } function j() { return (0, i.jsx)(_.default, { message: V.default.Messages.SOUNDBOARD_SEARCH_EMPTY_STATE_BODY }) } function W(e) { let { descriptors: t, soundButtonProps: n, rowIndex: s, isUsingKeyboardNavigation: a, suppressPlaySound: o, gridRowProps: l, getItemProps: u, onSelectItem: d, onItemMouseEnter: _, buttonOverlay: c } = e, E = I.SoundboardPickerStore.useStore(e => e.inspectedExpressionPosition); return (0, i.jsx)("ul", { ...l, className: x.soundRow, children: t.map((e, t) => { let i = "item-".concat(t), l = a && E.rowIndex === s && E.columnIndex === t; switch (e.item.type) { case v.SoundboardSoundItemType.SOUND: return (0, r.createElement)(P.default, { ...u(t), ...n, key: "".concat(i, "-").concat(e.item.sound.soundId), sound: e.item.sound, suppressPlaySound: o, focused: l, onMouseEnter: () => _(t), onSelectItem: () => d(e), enableSecondaryActions: !0, buttonOverlay: c }); case v.SoundboardSoundItemType.ADD_SOUND: return (0, r.createElement)(U.default, { ...u(t), key: i, guild: e.item.guild, focused: l }) } }) }) } function K(e) { let { guildId: t, channel: s, containerWidth: a, onClose: l, onSelect: _, suppressPlaySound: E = !1, shouldShowUpsell: N = !0, gridNotice: p, soundButtonOverlay: O, listPadding: C, renderHeader: R, defaultSoundsOnly: P = !1 } = e, { analyticsLocations: U } = (0, c.default)(), [K, z] = r.useState(null), Z = (0, o.useStateFromStores)([h.default], () => h.default.getCurrentUser()), X = (0, o.useStateFromStores)([A.default], () => { var e; return A.default.getVoiceState(t, null !== (e = null == Z ? void 0 : Z.id) && void 0 !== e ? e : B.EMPTY_STRING_SNOWFLAKE_ID) }), Q = (null == X ? void 0 : X.selfDeaf) || (null == X ? void 0 : X.mute) || (null == X ? void 0 : X.suppress), q = (0, T.useExpressionPickerStore)(e => e.searchQuery), J = (0, m.useUID)(), { categories: $ } = (0, y.default)(s, void 0, P), [ee, et] = r.useState([]), en = (0, y.useSearchCategories)($, ee, q), ei = S.SoundboardPickerCollapsedSections.useSetting(), er = r.useMemo(() => new Set(ei), [ei]), es = null == s, ea = L.default.canUseCustomCallSounds(Z), eo = r.useCallback(e => { er.has(e) ? er.delete(e) : er.add(e), S.SoundboardPickerCollapsedSections.updateSetting(Array.from(er)) }, [er]), el = r.useCallback((e, t) => { if (!E && (0, D.canUseSoundboardSound)(Z, e, s, !1)) { var n; (0, D.playSound)(e, null !== (n = null == s ? void 0 : s.id) && void 0 !== n ? n : B.EMPTY_STRING_SNOWFLAKE_ID, t) } else { if ((0, D.canUseSoundboardSound)(Z, e, s)) return; N && z(e) } }, [E, Z, s, N]), eu = r.useCallback(e => { switch (e.item.type) { case v.SoundboardSoundItemType.SOUND: return null == _ || _(e.item.sound), el(e.item.sound, U); case v.SoundboardSoundItemType.ADD_SOUND: return (0, k.default)(e.item.guild.id) } }, [U, el, _]), ed = r.useCallback((e, t, n, r, a) => (0, i.jsx)(W, { descriptors: e, rowIndex: n.rowIndex, isUsingKeyboardNavigation: n.isUsingKeyboardNavigation, gridRowProps: t, getItemProps: r, onItemMouseEnter: a, suppressPlaySound: E, onSelectItem: eu, soundButtonProps: { channel: s, interactive: es ? ea : !Q, forceSecondaryActions: es, analyticsLocations: U }, buttonOverlay: O }, "row-".concat(t["aria-rowindex"])), [eu, s, Q, E, U, es, ea, O]), e_ = r.useCallback((e, t) => { let n = "".concat(e.key); return (0, i.jsx)(Y, { categoryInfo: e.categoryInfo, toggleCollapsed: () => eo(n), collapsed: er.has(n), index: t }, "header-".concat(n)) }, [er, eo]), ec = r.useCallback(e => et((0, M.default)(e, $, Z, s)), [s, Z, $]), eE = r.useCallback(e => { (0, d.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("56049").then(n.bind(n, "338991")); return t => (0, i.jsx)(e, { ...t }) }) }, []), eI = r.useCallback(() => (0, i.jsx)(u.Clickable, { tabIndex: 0, className: x.settingsClickArea, onClick: eE, "aria-label": V.default.Messages.USER_SETTINGS_SOUNDBOARD_VOLUME, children: (0, i.jsx)(g.default, { className: x.settingsIcon }) }), [eE]), eT = r.useCallback(e => (0, i.jsx)(b.default, { soundboardListRef: e, categories: $, listPadding: C }), [$, C]), ef = r.useCallback(e => { if ((null == e ? void 0 : e.item.type) === v.SoundboardSoundItemType.SOUND) { var t; return (0, i.jsx)(G.default, { closePicker: l, soundboardSound: null !== (t = null == e ? void 0 : e.item.sound) && void 0 !== t ? t : null }) } return null }, [l]); return (0, i.jsxs)(i.Fragment, { children: [null != K && (0, i.jsx)(w.default, { onClose: () => z(null), closePopout: l, sound: K, channel: s }), (0, i.jsx)(f.default, { categories: en, collapsedCategories: er, containerWidth: a, store: I.SoundboardPickerStore, onSelectItem: eu, onSearchExpressions: ec, hasSearchResults: ee.length > 0, defaultSearchPlaceholder: V.default.Messages.SOUNDBOARD_SEARCH_PLACEHOLDER, renderRow: ed, renderSectionHeader: e_, renderCategoryList: eT, renderHeaderAccessories: eI, rowHeight: 48, sectionHeaderHeight: H, listPadding: F, itemNodeWidth: 150, gridNavigatorId: J, renderEmptySearchState: j, renderInspector: ef, gridNotice: p, renderHeader: R })] }) } }, 603074: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("990547"), l = n("442837"), u = n("481060"), d = n("100527"), _ = n("906732"), c = n("213609"), E = n("28546"), I = n("675478"), T = n("19780"), f = n("208049"), S = n("763296"), h = n("526617"), A = n("949412"); function m(e) { let { guildId: t, channel: n, containerWidth: s, onClose: m, onSelect: N, analyticsSource: p, suppressPlaySound: O, shouldShowUpsell: C = !0, gridNotice: R, autoWidth: g = !1, soundButtonOverlay: L, listPadding: v, renderHeader: D, defaultSoundsOnly: M } = e, y = (0, l.useStateFromStores)([S.default], () => S.default.isFetchingSounds() || S.default.isFetchingDefaultSounds()), P = (0, l.useStateFromStores)([T.default], () => T.default.getMediaSessionId()), { analyticsLocations: U } = (0, _.default)(d.default.SOUNDBOARD_POPOUT); return (0, c.default)({ type: o.ImpressionTypes.POPOUT, name: o.ImpressionNames.SOUNDBOARD_POPOUT, properties: { source: p, guild_id: t, media_session_id: P } }), r.useEffect(() => { f.maybeFetchSoundboardSounds(), I.FrecencyUserSettingsActionCreators.loadIfNecessary(), (0, E.setSearchQuery)("") }, []), (0, i.jsx)(_.AnalyticsLocationProvider, { value: U, children: (0, i.jsx)(u.Dialog, { className: a()(A.picker, { [A.fetching]: y, [A.autoWidth]: g }), children: y ? (0, i.jsx)(u.Spinner, {}) : (0, i.jsx)(h.default, { guildId: t, channel: n, onClose: m, onSelect: N, containerWidth: s, suppressPlaySound: O, shouldShowUpsell: C, gridNotice: R, soundButtonOverlay: L, listPadding: v, renderHeader: D, defaultSoundsOnly: M }) }) }) } }, 286654: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useSoundButtonContextMenu: function() { return u } }); var i = n("735250"), r = n("470079"), s = n("239091"), a = n("430824"), o = n("594174"), l = n("74538"); function u(e, t) { return r.useCallback(r => { r.stopPropagation(); let u = a.default.getGuild(e.guildId), d = o.default.getCurrentUser(); (null != u || l.default.canUseCustomCallSounds(d)) && ! function(e, t, r, a) { let u = o.default.getCurrentUser(); (null != t || l.default.canUseCustomCallSounds(u)) && (0, s.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("2356").then(n.bind(n, "876308")); return n => (0, i.jsx)(e, { ...n, soundGuild: t, activeCallGuildId: a, sound: r }) }) }(r, u, e, t) }, [e, t]) } }, 343747: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("434404"), a = n("981631"); function o(e) { s.default.open(e, a.GuildSettingsSections.SOUNDBOARD), (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("56035"), n.e("358")]).then(n.bind(n, "758961")); return n => (0, i.jsx)(t, { ...n, guildId: e }) }) } }, 657254: function(e, t, n) { "use strict"; n.r(t); var i = n("818083"); t.default = (0, i.createExperiment)({ kind: "user", id: "2023-03_april_fools", label: "April Fools 2023", defaultConfig: { allowAprilFoolsSoundpack: !1 }, treatments: [{ id: 1, label: "April Fools 2023", config: { allowAprilFoolsSoundpack: !0 } }] }) }, 871465: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CUSTOM_NOTIFICATION_SOUNDS_ASMR_STORAGE_KEY: function() { return o }, CUSTOM_NOTIFICATION_SOUNDS_DISCODO_STORAGE_KEY: function() { return l }, Soundpacks: function() { return i }, getCustomNotificationSoundpackOptions: function() { return u }, getSoundpackOptionsAprilFools2023: function() { return d } }), n("47120"), n("653041"); var i, r, s = n("433517"), a = n("689938"); (r = i || (i = {})).CLASSIC = "classic", r.DETUNE = "detune", r.RETRO = "retro", r.BUBBLE = "bop", r.DUCKY = "ducky", r.LOFI = "lofi", r.ASMR = "asmr", r.DISCODO = "discodo"; let o = "custom_notification_sounds_asmr", l = "custom_notification_sounds_discodo"; function u() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0], t = function(e) { if (!e) return []; let t = []; return s.Storage.get(l, !1) && t.push({ value: "discodo", label: "DISCODO", description: "๑(◕‿◕)๑", requirePremium: !0 }), s.Storage.get(o, !1) && t.push({ value: "asmr", label: a.default.Messages.SOUNDPACK_ASMR_LABEL, description: a.default.Messages.SOUNDPACK_ASMR_DESCRIPTION, requirePremium: !0 }), t }(e); return [{ value: "classic", label: a.default.Messages.SOUNDPACK_DEFAULT_LABEL, description: a.default.Messages.SOUNDPACK_DEFAULT_DESCRIPTION, requirePremium: !1 }, { value: "retro", label: a.default.Messages.SOUNDPACK_RETRO_LABEL, description: a.default.Messages.SOUNDPACK_RETRO_DESCRIPTION, requirePremium: !0 }, { value: "lofi", label: a.default.Messages.SOUNDPACK_LOFI_LABEL, description: a.default.Messages.SOUNDPACK_LOFI_DESCRIPTION, requirePremium: !0 }, { value: "ducky", label: a.default.Messages.SOUNDPACK_DUCKY_LABEL, description: a.default.Messages.SOUNDPACK_DUCKY_DESCRIPTION, requirePremium: !0 }, { value: "bop", label: a.default.Messages.SOUNDPACK_BUBBLE_LABEL, description: a.default.Messages.SOUNDPACK_BUBBLE_DESCRIPTION, requirePremium: !0 }, ...t] } function d() { return [{ value: "classic", label: a.default.Messages.SOUNDPACK_CLASSIC_LABEL }, { value: "detune", label: a.default.Messages.SOUNDPACK_DETUNE_LABEL }] } }, 474873: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("657254"), o = n("871465"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = { soundpack: o.Soundpacks.CLASSIC }; class d extends(i = r.default.PersistedStore) { initialize(e) { a.default.subscribe({ location: "1" }, () => this.emitChange()), null != e && (u = e) } getState() { return u } getSoundpack() { var e; let { allowAprilFoolsSoundpack: t } = a.default.getCurrentConfig({ location: "37bac2_1" }, { autoTrackExposure: !1 }); return t && (e = u.soundpack, Object.values(o.Soundpacks).includes(e)) ? u.soundpack : o.Soundpacks.CLASSIC } } l(d, "displayName", "SoundpackStore"), l(d, "persistKey", "SoundpackStore"), t.default = new d(s.default, { SET_SOUNDPACK: function(e) { let { soundpack: t } = e; u = { soundpack: t } } }) }, 135906: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("871465"); let r = { [i.Soundpacks.CLASSIC]: { discodo: "discodo", message1: "message1", deafen: "deafen", undeafen: "undeafen", mute: "mute", unmute: "unmute", disconnect: "disconnect", ptt_start: "ptt_start", ptt_stop: "ptt_stop", user_join: "user_join", user_leave: "user_leave", user_moved: "user_moved", call_calling: "call_calling", call_ringing: "call_ringing", stream_started: "stream_started", stream_ended: "stream_ended", stream_user_joined: "stream_user_joined", stream_user_left: "stream_user_left", poggermode_enabled: "poggermode_enabled", poggermode_applause: "poggermode_applause", poggermode_achievement_unlock: "poggermode_achievement_unlock", stage_waiting: "stage_waiting" }, [i.Soundpacks.DETUNE]: { discodo: "detune_discodo", message1: "detune_message1", deafen: "detune_deafen", undeafen: "detune_undeafen", mute: "detune_mute", unmute: "detune_unmute", disconnect: "detune_disconnect", ptt_start: "detune_ptt_start", ptt_stop: "detune_ptt_stop", user_join: "detune_user_join", user_leave: "detune_user_leave", user_moved: "detune_user_moved", call_calling: "detune_call_calling", call_ringing: "detune_call_ringing", stream_started: "detune_stream_started", stream_ended: "detune_stream_ended", stream_user_joined: "detune_stream_user_joined", stream_user_left: "detune_stream_user_left" }, [i.Soundpacks.RETRO]: { message1: "bit_message1" }, [i.Soundpacks.BUBBLE]: { message1: "bop_message1" }, [i.Soundpacks.DUCKY]: { message1: "ducky_message1" }, [i.Soundpacks.LOFI]: { message1: "lofi_message1" }, [i.Soundpacks.ASMR]: { message1: "asmr_message1" }, [i.Soundpacks.DISCODO]: { message1: "discodo" } }; function s(e) { return r[e] } }, 781518: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SpotifyAPI: function() { return E }, fetchIsSpotifyProtocolRegistered: function() { return A }, getAccessToken: function() { return I }, getDevices: function() { return f }, getProfile: function() { return T }, pause: function() { return h }, play: function() { return S }, setActiveDevice: function() { return m }, subscribePlayerStateNotifications: function() { return function e(t, n, i) { let s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 2; return E.put(t, n, { url: d.SpotifyEndpoints.NOTIFICATIONS_PLAYER, query: { connection_id: i } }).catch(a => s <= 0 ? Promise.reject(a) : (0, r.timeoutPromise)(5e3).then(() => e(t, n, i, s - 1))) } } }), n("177593"); var i = n("544891"), r = n("846519"), s = n("570140"), a = n("70956"), o = n("877481"), l = n("358085"), u = n("18323"), d = n("616922"), _ = n("981631"); function c(e, t, n, i) { let s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 1; return e(i = { ...i, headers: { authorization: "Bearer ".concat(n) } }).then(e => 202 === e.status ? Promise.reject(e) : e).catch(n => { let a = !0 !== i.onlyRetryOnAuthorizationErrors && 202 === n.status; return (401 === n.status || a) && s > 0 ? (202 === n.status ? (0, r.timeoutPromise)(5e3) : Promise.resolve()).then(() => I(t)).then(n => { let { body: { access_token: r } } = n; return c(e, t, r, i, s - 1) }).then(e => new Promise(t => setImmediate(() => t(e)))) : Promise.reject(n) }) } let E = { get: c.bind(null, i.HTTP.get), put: c.bind(null, i.HTTP.put) }; function I(e) { return i.HTTP.get({ url: _.Endpoints.CONNECTION_ACCESS_TOKEN(_.PlatformTypes.SPOTIFY, e), oldFormErrors: !0 }).catch(t => { var n; if ((null === (n = t.body) || void 0 === n ? void 0 : n.code) === _.AbortCodes.CONNECTION_REVOKED) s.default.dispatch({ type: "SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE", accountId: e }); else if (429 === t.status) { let n = t.headers["retry-after"] * a.default.Millis.SECOND, i = isNaN(n) || 0 === n ? 5e3 : n; return (0, r.timeoutPromise)(i).then(() => I(e)) } return Promise.reject(t) }).then(t => { let { access_token: n } = t.body; return s.default.dispatch({ type: "SPOTIFY_ACCOUNT_ACCESS_TOKEN", accountId: e, accessToken: n }), t }) } function T(e, t) { return E.get(e, t, { url: d.SpotifyEndpoints.PROFILE }).then(t => (s.default.dispatch({ type: "SPOTIFY_PROFILE_UPDATE", accountId: e, isPremium: "premium" === t.body.product }), t)) } function f(e, t) { return E.get(e, t, { url: d.SpotifyEndpoints.PLAYER_DEVICES }).then(t => (t.body && s.default.dispatch({ type: "SPOTIFY_SET_DEVICES", accountId: e, devices: t.body.devices }), t)) } function S(e, t, n, i) { let r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : {}, a = d.SpotifyEndpoints.PLAYER_OPEN(i, n, !1), { deviceId: o, position: l, contextUri: u, repeat: _ } = r; return E.put(e, t, { url: d.SpotifyEndpoints.PLAYER_PLAY, query: { device_id: o }, body: { context_uri: null != u ? u : void 0, uris: null == u ? [a] : void 0, offset: null != u ? { uri: a } : void 0, position_ms: null != l ? l : 0 } }).then(n => null == _ ? n : E.put(e, t, { url: d.SpotifyEndpoints.PLAYER_REPEAT, query: { device_id: o, state: _ ? "context" : "off" } })).then(e => (s.default.dispatch({ type: "SPOTIFY_PLAYER_PLAY", id: n, position: null != l ? l : 0 }), e)) } function h(e, t) { return E.put(e, t, { url: d.SpotifyEndpoints.PLAYER_PAUSE }).then(e => (s.default.dispatch({ type: "SPOTIFY_PLAYER_PAUSE" }), e)) } function A() { !u.default.isProtocolRegistered() && (0, l.isDesktop)() && o.default.isProtocolRegistered(d.SPOTIFY_APP_PROTOCOL).then(e => { s.default.dispatch({ type: "SPOTIFY_SET_PROTOCOL_REGISTERED", isRegistered: e }) }) } function m(e, t) { s.default.dispatch({ type: "SPOTIFY_SET_ACTIVE_DEVICE", accountId: e, deviceId: t }) } }, 616922: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SPOTIFY_APP_PROTOCOL: function() { return d }, SPOTIFY_HOSTNAMES: function() { return I }, SPOTIFY_PARTY_PREFIX: function() { return _ }, SPOTIFY_PLATFORM_NAME: function() { return c }, SpotifyActionTypes: function() { return a }, SpotifyEndpoints: function() { return S }, SpotifyResourceTypes: function() { return s }, getSpotifyResourceType: function() { return h }, isSpotifyParty: function() { return E } }); var i, r, s, a, o = n("726542"), l = n("358085"), u = n("981631"); let d = "spotify", _ = "spotify:", c = o.default.get(u.PlatformTypes.SPOTIFY).name; function E(e) { return null != e && e.startsWith(_) }(i = s || (s = {})).TRACK = "track", i.ARTIST = "artist", i.ALBUM = "album", i.PLAYLIST = "playlist", i.EPISODE = "episode", i.SHOW = "show", (r = a || (a = {})).USER_ACTIVITY_PLAY = "user_activity_play", r.USER_ACTIVITY_SYNC = "user_activity_sync", r.EMBED_SYNC = "embed_sync"; let I = ["open.spotify.com", "www.spotify.com"], T = "https://api.spotify.com/v1", f = e => "?utm_source=discord&utm_medium=".concat(e), S = Object.freeze({ PROFILE: "".concat(T, "/me"), NOTIFICATIONS_PLAYER: "".concat(T, "/me/notifications/player"), PLAYER: "".concat(T, "/me/player"), PLAYER_DEVICES: "".concat(T, "/me/player/devices"), PLAYER_PLAY: "".concat(T, "/me/player/play"), PLAYER_PAUSE: "".concat(T, "/me/player/pause"), PLAYER_REPEAT: "".concat(T, "/me/player/repeat"), WEB_OPEN: function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "desktop"; return "https://open.spotify.com/".concat(encodeURIComponent(e), "/").concat(encodeURIComponent(t)).concat(f(n)) }, EMBED: function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "desktop"; return "https://open.spotify.com/embed".concat(e).concat(f(t)) }, PLAYER_OPEN: function(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "desktop"; return "".concat(d, ":").concat(encodeURIComponent(e), ":").concat(encodeURIComponent(t)).concat(n ? f(i) : "") }, PREMIUM_SITE: "https://www.spotify.com/premium/".concat(f("desktop")), INSTALL_ATTRIBUTION: e => "https://app.adjust.com/bdyga9?campaign=".concat(e), APP_STORE: (0, l.isAndroid)() ? "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en_US&gl=US" : "https://itunes.apple.com/us/app/spotify-music/id324684580?mt=8", IOS_APP_STORE: "https://itunes.apple.com/us/app/spotify-music/id324684580?mt=8" }); function h(e) { if ("string" != typeof e) return null; switch (e) { case "track": return "track"; case "artist": return "artist"; case "album": return "album"; case "playlist": return "playlist"; case "episode": return "episode"; case "show": return "show"; default: return null } } }, 952164: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openAlbum: function() { return d }, openArtist: function() { return _ }, openPremiumSite: function() { return l }, openTrack: function() { return u } }), n("411104"); var i = n("358085"), r = n("18323"), s = n("647162"), a = n("616922"); function o(e, t, n) { let o; !(0, i.isDesktop)() && (o = window.open("", "_blank")), (0, s.getSpotifyMetadataFromActivity)(e, t).then(e => n(e)).then(e => { let { resourceType: t, resourceId: n } = e, i = r.default.isProtocolRegistered() ? a.SpotifyEndpoints.PLAYER_OPEN(t, n) : a.SpotifyEndpoints.WEB_OPEN(t, n); null != o ? o.location.href = i : window.open(i) }).catch(() => { null != o && o.close() }) } function l() { window.open(a.SpotifyEndpoints.PREMIUM_SITE) } function u(e) { var t; let { sync_id: n, metadata: i } = e; if (null == n) return; let s = (0, a.getSpotifyResourceType)(null !== (t = null == i ? void 0 : i.type) && void 0 !== t ? t : a.SpotifyResourceTypes.TRACK); if (null == s) return; let o = r.default.isProtocolRegistered() ? a.SpotifyEndpoints.PLAYER_OPEN(s, n) : a.SpotifyEndpoints.WEB_OPEN(s, n); window.open(o) } function d(e, t) { o(e, t, t => { var n; let { album_id: i } = t; return { resourceType: (0, a.getSpotifyResourceType)(null === (n = e.metadata) || void 0 === n ? void 0 : n.type) === a.SpotifyResourceTypes.EPISODE ? a.SpotifyResourceTypes.SHOW : a.SpotifyResourceTypes.ALBUM, resourceId: i } }) } function _(e, t, n) { o(e, t, e => { let { artist_ids: t } = e; if (null == t) throw Error("no artist ids in metadata"); let i = t[n]; if (null == i) throw Error("invalid artist index"); return { resourceType: a.SpotifyResourceTypes.ARTIST, resourceId: i } }) } }, 18323: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = !1; class d extends(a = o.default.Store) { isProtocolRegistered() { return u } } s = "SpotifyProtocolStore", (r = "displayName") in(i = d) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new d(l.default, { SPOTIFY_SET_PROTOCOL_REGISTERED: function(e) { let { isRegistered: t } = e; u = t } }) }, 768419: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n("47120"), n("653041"), n("724458"), n("757143"), n("789020"); var a, o, l, u = n("392711"), d = n.n(u), _ = n("261470"), c = n("442837"), E = n("902704"), I = n("846519"), T = n("570140"), f = n("586902"), S = n("726542"), h = n("524331"), A = n("710845"), m = n("594190"), N = n("314897"), p = n("553795"), O = n("517100"), C = n("158776"), R = n("606304"), g = n("979651"), L = n("626135"), v = n("81063"), D = n("70956"), M = n("823379"), y = n("781518"), P = n("616922"), U = n("981631"); function b(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let G = S.default.get(U.PlatformTypes.SPOTIFY), w = "hm://pusher/v1/connections/", k = 30 * D.default.Millis.SECOND, B = 30 * D.default.Millis.SECOND, V = 5 * D.default.Millis.MINUTE, x = 5 * D.default.Millis.SECOND, F = 1.5 * D.default.Millis.SECOND, H = 1 * D.default.Millis.MINUTE, Y = 3 * D.default.Millis.SECOND; (l = a || (a = {})).PLAYER_STATE_CHANGED = "PLAYER_STATE_CHANGED", l.DEVICE_STATE_CHANGED = "DEVICE_STATE_CHANGED"; let j = { MESSAGE: "message", PING: "ping", PONG: "pong" }, W = { SINGLE: "single" }, K = new A.default("Spotify"), z = new I.Timeout, Z = new I.Timeout, X = new I.Timeout, Q = new I.Timeout, q = new I.Timeout, J = {}, $ = {}, ee = {}, et = !1, en = null; function ei() { for (let e in J) { let t = J[e]; if (!t.connected || null == $[e]) continue; let n = $[e].find(e => e.is_active); if (null != n) return { socket: t, device: n } } } function er(e) { T.default.dispatch({ type: "SPOTIFY_PLAYER_STATE", accountId: e, track: null, volumePercent: 0, isPlaying: !1, repeat: !1, position: 0, context: null }) } function es(e) { return C.default.findActivity(e, e => null != e.party && null != e.party.id && (0, P.isSpotifyParty)(e.party.id)) } let ea = new Set([WebSocket.CONNECTING, WebSocket.OPEN]); class eo { get connected() { return null != this.socket && ea.has(this.socket.readyState) } connect() { !this.connected && !this._requestedConnect && (K.info("WS Connecting"), this._requestedDisconnect = !1, this._requestedConnect = !0, eS(this.accountId, this.accessToken).then(() => { this._requestedConnect = !1, this.socket = new WebSocket("".concat("wss://dealer.spotify.com/?access_token=").concat(this.accessToken)), this.socket.onopen = this.handleOpen.bind(this), this.socket.onmessage = this.handleMessage.bind(this), this.socket.onclose = this.socket.onerror = this.handleClose.bind(this) }).catch(e => { K.error(e), this._requestedConnect = !1, this.handleClose() })) } disconnect() { this._requestedDisconnect = !0, this.backoff.cancel(); try { var e; null === (e = this.socket) || void 0 === e || e.close() } catch (e) {} } ping() { var e; this.connected && (null === (e = this.socket) || void 0 === e || e.send(JSON.stringify({ type: j.PING }))) } handleOpen() { K.info("WS Connected"), this.backoff.succeed(), this.pingInterval.start(k, () => this.ping()), (0, y.getProfile)(this.accountId, this.accessToken), (0, y.getDevices)(this.accountId, this.accessToken) } handleMessage(e) { let { data: t } = e; if ("string" != typeof t) return; let { type: n, uri: i, payloads: r } = JSON.parse(t); switch (n) { case j.MESSAGE: if ("string" == typeof i && i.startsWith(w)) this.connectionId = decodeURIComponent(i.split(w)[1]), (0, y.subscribePlayerStateNotifications)(this.accountId, this.accessToken, this.connectionId); else if (Array.isArray(r)) { for (let { events: e } of r) if (null != e) for (let t of e) this.handleEvent(t) } case j.PONG: } } handleClose() { if (this.pingInterval.stop(), !this._requestedDisconnect) try { let e = this.backoff.fail(() => { !this._requestedDisconnect && this.connect() }); K.info("WS Disconnected. Next retry in ".concat(Math.round(e), "ms")) } catch (e) {} } handleEvent(e) { let { type: t, event: n } = e; switch (t) { case "PLAYER_STATE_CHANGED": null != n && null != n.state && ef(this.accountId, this.accessToken, n.state); break; case "DEVICE_STATE_CHANGED": this.handleDeviceStateChange() } } constructor(e, t) { b(this, "accessToken", void 0), b(this, "accountId", void 0), b(this, "connectionId", void 0), b(this, "isPremium", void 0), b(this, "pingInterval", void 0), b(this, "backoff", void 0), b(this, "socket", void 0), b(this, "_requestedDisconnect", !1), b(this, "_requestedConnect", !1), b(this, "handleDeviceStateChange", d().throttle(() => { (0, y.getDevices)(this.accountId, this.accessToken), eS(this.accountId, this.accessToken) }, Y)), this.accountId = e, this.accessToken = t, this.pingInterval = new I.Interval, this.backoff = new _.default(void 0, H), this.connect() } } function el(e, t) { e in J ? (J[e].accessToken = t, K.info("Updated account access token: ".concat(e))) : (J[e] = new eo(e, t), K.info("Added account: ".concat(e))) } function eu(e) { if (!(e in J)) return; J[e].disconnect(), delete J[e]; let t = ee[e]; null != t && null != i && t.track.id === i.track.id && (i = null), delete ee[e], K.info("Removed account: ".concat(e)) } function ed(e, t) { for (let n of $[e]) n.is_active = n.id === t } function e_(e, t, n) { var i, s; let a = ei(); if (null == a) return !1; let { socket: o, device: l } = a, { sync_id: u, party: d, timestamps: _ } = t; if (null == u || null == d || null == d.id || !(0, P.isSpotifyParty)(d.id)) return !1; let c = null != _ && null != _.start ? _.start : Date.now(), E = Math.max(0, Date.now() - c), I = !1, T = ee[o.accountId]; null != T && !1 === T.repeat && (I = null); let f = (0, P.getSpotifyResourceType)(null !== (s = null === (i = t.metadata) || void 0 === i ? void 0 : i.type) && void 0 !== s ? s : P.SpotifyResourceTypes.TRACK); if (null == f) return; (0, y.play)(o.accountId, o.accessToken, u, f, { position: +E, deviceId: l.id, repeat: I }), r = { userId: e, partyId: d.id, trackId: u, startTime: c }; let S = "presence change"; n && (S = "started", L.default.track(U.AnalyticEvents.SPOTIFY_LISTEN_ALONG_STARTED, { party_id: d.id, other_user_id: e })), K.info("Listen along ".concat(S, ": ").concat(o.accountId, " to ").concat(e, " playing ").concat(u, " on ").concat(l.name)) } function ec() { L.default.track(U.AnalyticEvents.SPOTIFY_LISTEN_ALONG_ENDED, { party_id: null != r ? r.partyId : null, other_user_id: null != r ? r.userId : null }); let e = null != r ? r.trackId : null; r = null, K.info("Listen along stopped"); let t = ei(); if (null == t) return; let { socket: n } = t, i = ee[n.accountId]; null != i && i.track.id === e && (0, y.pause)(n.accountId, n.accessToken) } function eE() { let e = Object.keys(J), t = p.default.getAccounts().filter(e => { let { type: t } = e; return t === U.PlatformTypes.SPOTIFY }); if (null == t) return !1; let n = t.map(e => { let { id: t } = e; return t }); for (let t of e) !n.includes(t) && eu(t); let r = !1; for (let n of t) if (null != i && i.account.id === n.id && (i.account = n, r = !0), !e.includes(n.id)) { if (null != n.accessToken) { el(n.id, n.accessToken); continue }(0, y.getAccessToken)(n.id) } return r } function eI() { if (null == i) return; let e = ei(); if (null == e) return; let { socket: t } = e; et = !0, (0, y.pause)(t.accountId, t.accessToken), L.default.track(U.AnalyticEvents.SPOTIFY_AUTO_PAUSED), K.info("Playback auto paused") } function eT(e) { if (e === N.default.getId()) { let t = g.default.isCurrentClientInVoiceChannel(), n = (0, f.getIsSpeaking)({ userId: e, checkSoundSharing: !0, checkSoundboardSounds: !1 }); t && n && null != i ? (z.start(B, eI, !1), Z.stop()) : Z.start(100, () => z.stop(), !1) } return !1 } function ef(e, t, n) { var i, r, s, a, o, l, u, d, _, c, E, I, f, S; let h, A, { device: m, progress_ms: N, is_playing: p, repeat_state: O, item: C, context: R } = n; if (null != C && C.type === P.SpotifyResourceTypes.TRACK) { let e = C.id; null != C.linked_from && null != C.linked_from.id && (e = C.linked_from.id), h = { id: e, name: C.name, duration: C.duration_ms, type: P.SpotifyResourceTypes.TRACK, album: { id: null !== (o = null === (i = C.album) || void 0 === i ? void 0 : i.id) && void 0 !== o ? o : "", name: null !== (l = null === (r = C.album) || void 0 === r ? void 0 : r.name) && void 0 !== l ? l : "", image: null === (s = C.album) || void 0 === s ? void 0 : s.images[0], type: null !== (u = null === (a = C.album) || void 0 === a ? void 0 : a.type) && void 0 !== u ? u : P.SpotifyResourceTypes.ALBUM }, artists: Array.isArray(C.artists) ? C.artists.filter(e => (0, M.isNotNullish)(e.id) && (0, M.isNotNullish)(e.name)) : [], isLocal: C.is_local || !1 } } else null != C && C.type === P.SpotifyResourceTypes.EPISODE && (h = { id: C.id, name: C.name, duration: C.duration_ms, type: P.SpotifyResourceTypes.EPISODE, album: { id: null !== (I = null === (d = C.show) || void 0 === d ? void 0 : d.id) && void 0 !== I ? I : "", name: null !== (f = null === (_ = C.show) || void 0 === _ ? void 0 : _.name) && void 0 !== f ? f : "", image: null === (c = C.show) || void 0 === c ? void 0 : c.images[0], type: null !== (S = null === (E = C.album) || void 0 === E ? void 0 : E.type) && void 0 !== S ? S : P.SpotifyResourceTypes.SHOW }, artists: [], isLocal: !1 }); if (null != m && !0 !== m.is_active && (m = { ...m, is_active: !0 }), null != R && [P.SpotifyResourceTypes.PLAYLIST, P.SpotifyResourceTypes.ALBUM].includes(R.type)) { let n = eA.getPlayerState(e); A = null != n && null != n.context && n.context.uri === R.uri ? Promise.resolve(n.context) : R.type === P.SpotifyResourceTypes.ALBUM ? Promise.resolve(R) : y.SpotifyAPI.get(e, t, { url: R.href }).then(e => { let { body: t } = e; return t }).catch(e => { if (e && 404 === e.status) return null; throw e }) } else A = Promise.resolve(void 0); return A.then(t => { null != t && t.type === P.SpotifyResourceTypes.PLAYLIST && !t.public && (t = null), T.default.dispatch({ type: "SPOTIFY_PLAYER_STATE", accountId: e, track: h, volumePercent: null != m ? m.volume_percent : 0, isPlaying: p, repeat: "off" !== O, position: N, context: t, device: m }) }) } function eS(e, t) { return y.SpotifyAPI.get(e, t, { url: P.SpotifyEndpoints.PLAYER, query: { additional_types: "".concat(P.SpotifyResourceTypes.TRACK, ",").concat(P.SpotifyResourceTypes.EPISODE) }, onlyRetryOnAuthorizationErrors: !0 }).then(n => { let i = n.body; null != i ? ef(e, t, i).then(() => n) : er(e) }).catch(() => er(e)) } class eh extends(o = c.default.Store) { initialize() { this.waitFor(p.default, R.default), this.syncWith([C.default], () => (function() { if (null == r || null == ei()) return !1; let { userId: e } = r, t = es(e); if (null == t) return X.start(V, () => { null != r && r.userId === e && (0, h.default)() }), !1; X.stop(); let { sync_id: n, timestamps: i, party: s } = t, a = null != n && r.trackId !== n, o = null != i && r.startTime !== i.start; return a || o ? e_(e, t, !1) : null != s && s.id !== r.partyId && (r.partyId = s.id, !0) })()), (0, y.fetchIsSpotifyProtocolRegistered)() } hasConnectedAccount() { return Object.keys(J).length > 0 } getActiveSocketAndDevice() { return ei() } getPlayableComputerDevices() { let e = []; for (let t in J) { let n = J[t]; if (!n.connected || null == $[t]) continue; let i = $[t].find(e => !e.is_restricted && "Computer" === e.type); null != i && e.push({ socket: n, device: i }) } return e } canPlay(e) { let { sync_id: t, party: n } = e; return null != ei() && null != t && null != n && null != n.id && (0, P.isSpotifyParty)(n.id) } getSyncingWith() { return r } wasAutoPaused() { return et } getLastPlayedTrackId() { return s } getTrack() { return null != i ? i.track : null } getPlayerState(e) { return ee[e] } shouldShowActivity() { return null != i && i.account.showActivity && !O.default.isIdle() } getActivity() { let e, t, n; if (null == i) return null != r ? es(r.userId) : null; let { track: { artists: s, album: a, name: o, id: l, duration: u, isLocal: d, type: _ }, startTime: c, context: E } = i, I = s.slice(0, 5); s.length > 0 && (e = I.map(e => { let { name: t } = e; return t.replace(/;/g, "") }).join("; ")); let T = {}, f = null != a.image ? (0, v.getAssetFromImageURL)(U.PlatformTypes.SPOTIFY, a.image.url) : null; null != a.image && null != f && (T.large_image = f), "single" !== a.type && (T.large_text = a.name), null != E && (t = E.uri), n = null != r && null != r.partyId ? r.partyId : "".concat(P.SPOTIFY_PARTY_PREFIX).concat(N.default.getId()); let S = o.length > 128 ? o.substring(0, 125) + "..." : o, h = { context_uri: t, album_id: a.id, artist_ids: I.map(e => { let { id: t } = e; return t }), type: _, button_urls: [] }, A = { name: G.name, assets: T, details: S, state: e, timestamps: { start: c, end: c + u }, party: { id: n } }; return !d && (A.sync_id = l, A.flags = U.ActivityFlags.PLAY | U.ActivityFlags.SYNC, A.metadata = h), A } } b(eh, "displayName", "SpotifyStore"); let eA = new eh(T.default, { USER_CONNECTIONS_UPDATE: eE, CONNECTION_OPEN: eE, SPOTIFY_ACCOUNT_ACCESS_TOKEN: function(e) { let { accountId: t, accessToken: n } = e; return el(t, n), !1 }, SPOTIFY_ACCOUNT_ACCESS_TOKEN_REVOKE: function(e) { let { accountId: t } = e; eu(t) }, SPOTIFY_PROFILE_UPDATE: function(e) { let { accountId: t, isPremium: n } = e, i = J[t]; if (null == i) return !1; i.isPremium = n, K.info("Profile updated for ".concat(t, ": isPremium = ").concat(n)) }, SPOTIFY_PLAYER_STATE: function(e) { let { accountId: t, isPlaying: n, repeat: s, track: a, position: o, device: l, context: u } = e, _ = !1; if (null != l) { if (null != $[t]) { let e = $[t].find(e => { let { id: t } = e; return t === l.id }); null == e ? ($[t].push(l), _ = !0) : !(0, E.default)(e, l) && (Object.assign(e, l), _ = !0), ed(t, l.id) } else $[t] = [l], _ = !0 } n ? null == en || en.start(B, eI) : (a = null, null == en || en.stop()); let c = p.default.getAccount(t, U.PlatformTypes.SPOTIFY); if (null == c) return _; let I = ee[t], f = null != a ? { account: c, track: a, startTime: function(e, t) { let n = Date.now(), i = null != e ? e.startTime : 0, r = n - t; return Math.abs(r - i) > F ? r : i }(I, o), context: u, repeat: s } : null, S = null != l && null != r && 0 === o && !n; !S && (ee[t] = f); let A = i; if (i = d().values(ee).find(e => null != e), eT(N.default.getId()), null == a || S ? Q.stop() : Q.start(a.duration - o + x, () => er(c.id)), null != r && (!n && o > 0 || null == l || null != f && r.trackId !== f.track.id) ? (K.info("Listen along active but playback stopped or track changed. Stopping listen along in ".concat(x, "ms")), q.start(x, () => { K.info("Stopping listening along"), (0, h.default)(), er(c.id) })) : q.isStarted() && (K.info("Listen along stop cancelled as playback of track resumed"), q.stop()), A === i || null == I && null == f || null != I && null != f && I.track.id === f.track.id && I.startTime === f.startTime) return _; null != a && (T.default.dispatch({ type: "SPOTIFY_NEW_TRACK", track: a, connectionId: t }), L.default.track(U.AnalyticEvents.ACTIVITY_UPDATED, { party_platform: U.PlatformTypes.SPOTIFY, track_id: a.id, has_images: !0, details: a.album.name, state: a.name, album_id: a.album.id, author_ids: a.artists.map(e => e.id), author_names: a.artists.map(e => e.name) })) }, SPOTIFY_PLAYER_PLAY: function(e) { let { id: t } = e; s = t }, ACTIVITY_PLAY: function(e) { var t; let n, { activity: i, metadata: s } = e, a = ei(); if (null == a) return !1; let { socket: o, device: l } = a, { sync_id: u, party: d } = i; return !!(null != u && null != d && null != d.id && (0, P.isSpotifyParty)(d.id)) && (null != s && (n = s.context_uri), null != r && ec(), null != s && void((0, y.play)(o.accountId, o.accessToken, u, null !== (t = s.type) && void 0 !== t ? t : P.SpotifyResourceTypes.TRACK, { contextUri: n, deviceId: l.id }), K.info("Play started: ".concat(o.accountId, " playing ").concat(u, " on ").concat(l.name)))) }, ACTIVITY_SYNC: function(e) { let { activity: t, userId: n } = e; return e_(n, t, !0) }, ACTIVITY_SYNC_STOP: ec, SPOTIFY_SET_DEVICES: function(e) { let { accountId: t, devices: n } = e; $[t] = n, K.info("Devices updated for ".concat(t, ":"), n) }, SPOTIFY_SET_ACTIVE_DEVICE: function(e) { let { accountId: t, deviceId: n } = e; ed(t, n) }, SPEAKING: function(e) { let { userId: t } = e; return eT(t) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { let { userId: n } = t; return eT(n) || e }, !1) }, MEDIA_ENGINE_SET_GO_LIVE_SOURCE: function(e) { let { settings: t } = e; if ((null == t ? void 0 : t.desktopSettings) != null) { null == en || en.stop(); let { sourceId: e, sound: n } = null == t ? void 0 : t.desktopSettings; null != e && m.default.getObservedAppNameForWindow(e) === G.name && n ? (en = new I.Interval).start(B, eI) : (null == en || en.stop(), en = null) } else null == t && (null == en || en.stop(), en = null) } }); t.default = eA }, 647162: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ensureSpotifyPlayable: function() { return I }, ensureSpotifyPremium: function() { return f }, getSpotifyMetadataFromActivity: function() { return h }, isSpotifyPlayable: function() { return E }, isSpotifyPremium: function() { return T } }), n("411104"), n("177593"), n("47120"); var i = n("763472"), r = n("726542"), s = n("594190"), a = n("70956"), o = n("781518"), l = n("18323"), u = n("768419"), d = n("616922"), _ = n("981631"); let c = 30 * a.default.Millis.SECOND; function E(e) { return null != e.getActiveSocketAndDevice() || l.default.isProtocolRegistered() } function I() { let e = u.default.getActiveSocketAndDevice(); if (null != e) return Promise.resolve(e); if (!l.default.isProtocolRegistered()) return Promise.reject(Error("protocol is not registered")); let t = u.default.getPlayableComputerDevices(); if (s.default.isObservedAppRunning(r.default.get(_.PlatformTypes.SPOTIFY).name) && t.length > 0) { let { socket: e, device: n } = t[0]; return (0, o.setActiveDevice)(e.accountId, n.id), Promise.resolve({ socket: e, device: n }) } return new Promise((e, n) => { let i = setTimeout(() => { u.default.removeChangeListener(r), n(Error("timeout launching spotify")) }, c), r = () => { for (let { socket: n, device: s } of u.default.getPlayableComputerDevices()) null == t.find(e => e.device.id === s.id) && (clearTimeout(i), u.default.removeChangeListener(r), setImmediate(() => { (0, o.setActiveDevice)(n.accountId, s.id), e({ socket: n, device: s }) })) }; u.default.addChangeListener(r), window.open("".concat(d.SPOTIFY_APP_PROTOCOL, ":")) }) } function T() { let e = u.default.getActiveSocketAndDevice(); if (null == e) return null; let { socket: t } = e; return t.isPremium } function f() { let e = u.default.getActiveSocketAndDevice(); if (null == e) return Promise.reject(Error("no active profile")); let { socket: t } = e; return t.isPremium ? Promise.resolve() : (0, o.getProfile)(t.accountId, t.accessToken).then(() => { if (!t.isPremium) return Promise.reject(Error("spotify account is not premium")) }) } function S(e) { if ("string" == typeof e) return e; throw Error("value is not a string") } async function h(e, t) { var n; let r = await (0, i.getMetadata)(e, t), s = (0, d.getSpotifyResourceType)(S(null !== (n = r.type) && void 0 !== n ? n : d.SpotifyResourceTypes.TRACK)); if (null === s) throw Error("invalid type ".concat(r.type)); return { context_uri: "string" == typeof r.context_uri ? r.context_uri : void 0, album_id: S(r.album_id), artist_ids: Array.isArray(r.artist_ids) ? r.artist_ids.map(S) : [], type: s, button_urls: Array.isArray(r.button_urls) ? r.button_urls.map(S) : [] } } }, 680686: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("626135"), r = n("647162"), s = n("616922"), a = n("981631"); let o = [s.SpotifyActionTypes.USER_ACTIVITY_SYNC, s.SpotifyActionTypes.EMBED_SYNC]; function l(e, t, n, s) { i.default.track(a.AnalyticEvents.SPOTIFY_BUTTON_CLICKED, { type: e, source: s, is_premium: (0, r.isSpotifyPremium)(), party_id: o.includes(e) && (null == n ? void 0 : n.party) != null ? n.party.id : null, other_user_id: t.id }) } }, 246841: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("395361"), a = n("829820"), o = n("22387"); function l(e) { let { activity: t, user: n, source: l, className: u, size: d, look: _, color: c, fullWidth: E, onAction: I } = e, { label: T, tooltip: f, loading: S, disabled: h, onClick: A } = (0, a.useSpotifyPlayAction)(t, n, l), m = () => { null == I || I(), A() }; return (0, i.jsx)(r.Tooltip, { text: f, children: e => { let { onMouseEnter: t, onMouseLeave: n } = e; return (0, i.jsxs)(r.Button, { className: u, innerClassName: o.playButtonInner, size: d, look: _, color: c, fullWidth: E, onClick: m, onMouseEnter: t, onMouseLeave: n, disabled: h, submitting: S, children: [(0, i.jsx)(s.default, { width: 16, height: 16 }), T] }) } }) } }, 557711: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("432247"), l = n("5192"), u = n("829820"), d = n("22387"); function _(e) { let { activity: t, user: n, channelId: r, guildId: _, source: c, size: E, look: I, color: T, className: f, onAction: S } = e, { tooltip: h, loading: A, disabled: m, onClick: N } = (0, u.useSpotifySyncAction)(t, n, c, l.default.getNickname(_, r, n)), p = () => { null == S || S(), N() }; return (0, i.jsx)(a.Tooltip, { text: h, children: e => { let { onMouseEnter: n, onMouseLeave: r } = e; return (0, i.jsx)(a.Button, { size: E, className: s()(d.syncButton, f), innerClassName: d.syncButtonInner, look: I, color: T, onClick: p, onMouseEnter: n, onMouseLeave: r, disabled: m, submitting: A, "aria-label": null != h ? h : t.name, children: (0, i.jsx)(o.default, { width: 16, height: 16 }) }) } }) } }, 131303: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("231757"), r = n("981631"); function s(e) { return !!e || ((0, i.default)({ platformType: r.PlatformTypes.SPOTIFY, location: "Spotify Button" }), !1) } }, 300020: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("616922"), r = n("689938"); function s(e, t) { switch (t) { case i.SpotifyActionTypes.USER_ACTIVITY_PLAY: return e.hasSpotifyAccount ? r.default.Messages.USER_ACTIVITY_PLAY_ON_PLATFORM.format({ platform: i.SPOTIFY_PLATFORM_NAME }) : r.default.Messages.USER_ACTIVITY_CONNECT_PLATFORM.format({ platform: i.SPOTIFY_PLATFORM_NAME }); case i.SpotifyActionTypes.EMBED_SYNC: if (!e.hasSpotifyAccount) return r.default.Messages.USER_ACTIVITY_CONNECT_PLATFORM.format({ platform: i.SPOTIFY_PLATFORM_NAME }); if (e.syncingWithUser || e.syncingWithParty) return r.default.Messages.INVITE_EMBED_JOINED; return r.default.Messages.JOIN; case i.SpotifyActionTypes.USER_ACTIVITY_SYNC: default: return } } }, 456190: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("51144"), r = n("616922"), s = n("689938"); function a(e, t, n) { switch (t) { case r.SpotifyActionTypes.USER_ACTIVITY_PLAY: if (e.isCurrentUser) return s.default.Messages.USER_ACTIVITY_CANNOT_PLAY_SELF; if (e.playingSameTrack) return s.default.Messages.USER_ACTIVITY_ALREADY_PLAYING; if (e.notPlayable) return s.default.Messages.USER_ACTIVITY_NOT_DETECTED.format({ name: r.SPOTIFY_PLATFORM_NAME }); return; case r.SpotifyActionTypes.USER_ACTIVITY_SYNC: if (e.isCurrentUser) return s.default.Messages.USER_ACTIVITY_CANNOT_SYNC_SELF; if (e.syncingWithUser || e.syncingWithParty) return s.default.Messages.USER_ACTIVITY_ALREADY_SYNCING; return s.default.Messages.USER_ACTIVITY_LISTEN_ALONG_DESCRIPTION.format({ name: null != n ? n : i.default.getName(e.user) }); case r.SpotifyActionTypes.EMBED_SYNC: if (e.isCurrentUser) return s.default.Messages.USER_ACTIVITY_CANNOT_SYNC_SELF; if (e.syncingWithUser || e.syncingWithParty) return s.default.Messages.USER_ACTIVITY_ALREADY_SYNCING; if (e.notPlayable) return s.default.Messages.USER_ACTIVITY_NOT_DETECTED.format({ name: r.SPOTIFY_PLATFORM_NAME }); return; default: return } } }, 239470: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("647162"); function r(e, t, n, r) { var s, a, o; let l = e.hasConnectedAccount(), u = (0, i.isSpotifyPlayable)(e), d = e.getTrack(), _ = e.getSyncingWith(), c = e.getActivity(), E = null !== (o = null !== (a = null == d ? void 0 : d.id) && void 0 !== a ? a : null == c ? void 0 : c.sync_id) && void 0 !== o ? o : e.getLastPlayedTrackId(), I = n.id === t.getId(), T = l && !u, f = null != E && E === (null == r ? void 0 : r.sync_id), S = (null == c ? void 0 : c.party) != null && (null == r ? void 0 : null === (s = r.party) || void 0 === s ? void 0 : s.id) === c.party.id, h = (null == _ ? void 0 : _.userId) != null && (null == _ ? void 0 : _.userId) === n.id; return { user: n, activity: r, hasSpotifyAccount: l, canPlaySpotify: u, notPlayable: T, syncingWithParty: S, syncingWithUser: h, isCurrentUser: I, currentUserTrackId: E, playingSameTrack: f, playDisabled: I || T || f, syncDisabled: I || h || S } } }, 894344: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("763472"), a = n("647162"), o = n("680686"), l = n("131303"); async function u(e, t, u) { let { hasSpotifyAccount: d, activity: _, user: c } = e; (0, l.default)(d) && null != _ && null != _.sync_id && (await (0, a.ensureSpotifyPlayable)(), await (0, a.ensureSpotifyPremium)().catch(e => ((0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("58690")]).then(n.bind(n, "841178")); return t => (0, i.jsx)(e, { ...t }) }), Promise.reject(e))), s.sync(_, c.id), (0, o.default)(t, c, _, u)) } }, 203777: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("763472"), r = n("647162"), s = n("680686"), a = n("131303"); async function o(e, t, n) { let { hasSpotifyAccount: o, activity: l, user: u } = e; (0, a.default)(o) && null != l && null != l.sync_id && (await (0, r.ensureSpotifyPlayable)(), i.play(l, u.id), (0, s.default)(t, u, l, n)) } }, 829820: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useSpotifyJoinAction: function() { return p }, useSpotifyPlayAction: function() { return m }, useSpotifySyncAction: function() { return N } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("846519"), a = n("110924"), o = n("314897"), l = n("70956"), u = n("51144"), d = n("768419"), _ = n("300020"), c = n("456190"), E = n("239470"), I = n("894344"), T = n("203777"), f = n("616922"); let S = 30 * l.default.Millis.SECOND; function h(e) { let { currentUserTrackId: t, syncingWithUser: n, syncingWithParty: r } = e, [o, l] = i.useState(!1), [u] = i.useState(() => new s.Timeout), d = (0, a.default)(t); i.useEffect(() => { o && (t !== d || n || r) && (l(!1), u.stop()) }, [t, d, n, r, o, u]); let _ = i.useCallback(() => { l(!0), u.start(S, () => l(!1)) }, [u]), c = i.useCallback(() => { l(!1), u.stop() }, [u]); return i.useEffect(() => () => u.stop(), [u]), { loading: o, startLoading: _, clearLoading: c } } function A(e, t) { return (0, r.useStateFromStoresObject)([d.default, o.default], () => (0, E.default)(d.default, o.default, t, e), [e, t]) } function m(e, t, n) { let r = A(e, t), { notPlayable: s, isCurrentUser: a, playingSameTrack: o } = r, { loading: l, startLoading: u, clearLoading: d } = h(r), E = i.useCallback(() => { u(), (0, T.default)(r, f.SpotifyActionTypes.USER_ACTIVITY_PLAY, n).catch(d) }, [r, n, u, d]); return { label: (0, _.default)(r, f.SpotifyActionTypes.USER_ACTIVITY_PLAY), tooltip: (0, c.default)(r, f.SpotifyActionTypes.USER_ACTIVITY_PLAY), disabled: !l && (a || s || o), loading: l, onClick: E, spotifyData: r } } function N(e, t, n, r) { let s = null != r ? r : u.default.getName(t), a = A(e, t), { syncingWithUser: o, syncingWithParty: l, isCurrentUser: d } = a, { loading: E, startLoading: T, clearLoading: S } = h(a), m = i.useCallback(() => { T(), (0, I.default)(a, f.SpotifyActionTypes.USER_ACTIVITY_SYNC, n).catch(S) }, [a, n, T, S]); return { label: (0, _.default)(a, f.SpotifyActionTypes.USER_ACTIVITY_SYNC), tooltip: (0, c.default)(a, f.SpotifyActionTypes.USER_ACTIVITY_SYNC, s), disabled: !E && (d || o || l), loading: E, onClick: m, spotifyData: a } } function p(e, t, n) { let r = A(e, t), { notPlayable: s, syncingWithUser: a, syncingWithParty: o, isCurrentUser: l } = r, { loading: u, startLoading: d, clearLoading: E } = h(r), T = i.useCallback(() => { d(), (0, I.default)(r, f.SpotifyActionTypes.EMBED_SYNC, n).catch(E) }, [r, n, d, E]); return { label: (0, _.default)(r, f.SpotifyActionTypes.EMBED_SYNC), tooltip: (0, c.default)(r, f.SpotifyActionTypes.EMBED_SYNC), disabled: !u && (l || a || o || s), loading: u, onClick: T, spotifyData: r } } }, 881824: function(e, t, n) { "use strict"; n.r(t), n.d(t, { navigateToStage: function() { return A }, openEndGuildEventConfirmationModal: function() { return I }, openEndStageModal: function() { return S }, openStageBlockedUsersSheet: function() { return f }, openStageChannelAudienceNoticeModal: function() { return T }, openStageChannelSettings: function() { return E }, shouldShowBlockedUsers: function() { return h }, showChannelChangeConfirmationAlert: function() { return m } }); var i = n("735250"); n("470079"); var r = n("952265"), s = n("359110"), a = n("314897"), o = n("88751"), l = n("427679"), u = n("513449"), d = n("930180"), _ = n("981631"), c = n("602091"); function E(e, t) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("38779"), n.e("24753")]).then(n.bind(n, "581355")); return n => (0, i.jsx)(t, { ...n, channel: e }) }, { contextKey: t === _.AppContext.POPOUT ? c.POPOUT_MODAL_CONTEXT : c.DEFAULT_MODAL_CONTEXT }) } function I(e, t) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("2634")]).then(n.bind(n, "548841")); return n => (0, i.jsx)(t, { ...n, channel: e }) }, { contextKey: t === _.AppContext.POPOUT ? c.POPOUT_MODAL_CONTEXT : c.DEFAULT_MODAL_CONTEXT }) } function T(e) {} function f(e, t) { (0, r.openModalLazy)(async () => { let { default: r } = await Promise.all([n.e("99387"), n.e("1906")]).then(n.bind(n, "854510")); return n => (0, i.jsx)(r, { ...n, channel: e, onAccept: t }) }) } function S(e, t) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("85885")]).then(n.bind(n, "124779")); return n => (0, i.jsx)(t, { ...n, channel: e }) }, { contextKey: t === _.AppContext.POPOUT ? c.POPOUT_MODAL_CONTEXT : c.DEFAULT_MODAL_CONTEXT }) } function h(e) { let t = a.default.getId(), n = (0, d.getStageBlockedUsersCount)(e); return !o.default.isModerator(t, e) && n > 0 } function A(e, t) { var d; let _ = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; t !== e.id && (0, u.setIsOnStartStageScreen)(!0), d = e, (0, s.transitionToChannel)(d.id), t !== e.id && _ && ! function(e) { let t = a.default.getId(), s = o.default.isModerator(t, e.id), u = l.default.isLive(e.id); s && !u ? E(e) : s && u && function(e) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("84686")]).then(n.bind(n, "665111")); return n => (0, i.jsx)(t, { ...n, channel: e }) }) }(e) }(e) } function m(e, t) { return (0, r.openModalLazy)(async () => { let { default: r } = await n.e("65045").then(n.bind(n, "143782")); return n => (0, i.jsx)(r, { channel: e, onConfirm: t, ...n }) }), !0 } }, 105372: function(e, t, n) { "use strict"; n.r(t), n.d(t, { openStageChannelAudienceNoticeModal: function() { return r } }); var i = n("881824"); function r(e) { i.openStageChannelAudienceNoticeModal(e) } }, 922482: function(e, t, n) { "use strict"; n.r(t), n.d(t, { connectAndOpen: function() { return A }, connectOrLurkStage: function() { return S }, connectToStage: function() { return h }, navigateToStage: function() { return m } }); var i = n("749210"), r = n("287734"), s = n("872810"), a = n("366297"), o = n("280837"), l = n("199902"), u = n("592125"), d = n("430824"), _ = n("496675"), c = n("944486"), E = n("881824"), I = n("107511"), T = n("146085"), f = n("96150"); function S(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return new Promise(async r => { let s = u.default.getChannel(t); if (null != s) return h(s, n), r(s); await (0, o.stopLurkingAll)([e]), await i.default.joinGuild(e, { lurker: !0 }), d.default.addConditionalChangeListener(() => { let e = u.default.getChannel(t); return null == e || (h(e), f.default.initialize(), r(e), !1) }) }) } function h(e) { var t, n; let i = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], a = c.default.getVoiceChannelId(); if (!i && (t = e, n = a, !_.default.can(T.JOIN_VOCAL_CHANNEL_PERMISSIONS, t) || E.shouldShowBlockedUsers(t.id) && n !== t.id && (E.openStageBlockedUsersSheet(t, () => A(t, !0)), 1))) return !1; if (I.default.initialize(), r.default.selectVoiceChannel(e.id), (a = c.default.getVoiceChannelId()) !== e.id) return !1; let o = l.default.getAllApplicationStreamsForChannel(e.id); return o.length > 0 && (0, s.watchStream)(o[0], { noFocus: !1 }), !0 } function A(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], r = c.default.getVoiceChannelId(); if (!(!i && r !== e.id && (0, a.shouldShowVoiceChannelChangeConfirmation)(e) && E.showChannelChangeConfirmationAlert(e, () => A(e, t, n, !0)))) h(e, t) && m(e, r, n) } function m(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; E.navigateToStage(e, t, n) } }, 107511: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("433517"), r = n("570140"), s = n("317770"), a = n("314897"), o = n("944486"), l = n("105372"), u = n("88751"), d = n("157925"); class _ extends s.default { _initialize() { r.default.subscribe("VOICE_STATE_UPDATES", this.handleVoiceStateUpdates) } _terminate() { r.default.unsubscribe("VOICE_STATE_UPDATES", this.handleVoiceStateUpdates) } constructor(...e) { var t, n, r; super(...e), t = this, n = "handleVoiceStateUpdates", r = e => { let { voiceStates: t } = e; t.forEach(e => { if (null == e.channelId || e.userId !== a.default.getId()) return; if (this.terminate(), i.Storage.get(d.STAGE_AUDIENCE_NOTICE_SHOWN_STORAGE_KEY, !1)) return; let t = o.default.getVoiceChannelId(); if (null != t) e.channelId === t && u.default.isAudienceMember(e.userId, t) && (i.Storage.set(d.STAGE_AUDIENCE_NOTICE_SHOWN_STORAGE_KEY, !0), l.openStageChannelAudienceNoticeModal(t)) }) }, n in t ? Object.defineProperty(t, n, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = r } } t.default = new _ }, 565799: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"), n("653041"); var i, r, s, a, o = n("348327"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("442837"), c = n("759174"), E = n("570140"), I = n("569545"), T = n("199902"), f = n("314897"), S = n("592125"), h = n("430824"), A = n("496675"), m = n("699516"), N = n("606304"), p = n("594174"), O = n("979651"), C = n("938475"), R = n("501655"), g = n("88751"), L = n("427679"); let v = "NO_GUILD", D = new c.SecondaryIndexMap(e => [function(e) { var t; return null !== (t = e.getGuildId()) && void 0 !== t ? t : v }(e)], e => e.id), M = new Set, y = {}; function P(e) { return D.values(null != e ? e : void 0, !0).map(e => { let { id: t } = e; return t }) } function U(e) { !M.has(e) && (M.add(e), d()(S.default.getMutableGuildChannelsForGuild(e)).values().forEach(e => { w(e) && D.set(e.id, e) })) } function b(e) { let t = y[e]; if (null != t) return t; let n = S.default.getChannel(e); return null != n && n.isGuildStageVoice() ? (U(n.guild_id), w(n)) ? G(e) : null : null } function G(e) { let t = y[e]; return null == t && (t = new R.default(e), y[e] = t, t.rebuild()), t } function w(e) { return null != e && e.isGuildStageVoice() && C.default.countVoiceStatesForChannel(e.id) > 0 } function k(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : P(); return t.reduce((t, n) => { let i = G(n); return e(i) ? (! function(e, t) { let n = S.default.getChannel(e); null != n && n.isGuildStageVoice() ? 0 === t.size() ? V(n.id) : null == D.get(n.id) && D.set(n.id, n) : V(e) }(n, i), !0) : t }, !1) } function B(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : P(); return k(t => t.updateParticipant(e), t) } function V(e) { return null != e && (delete y[e], D.delete(e), !0) } function x() { M.clear(), D.clear(), y = {} } function F(e, t, n) { if (null == n || e.has(n)) return; let i = S.default.getChannel(n); (null == i ? void 0 : i.isGuildStageVoice()) && (t.add(n), e.add(n)) } function H(e) { let { user: t } = e; return B(t.id) } function Y(e) { let { relationship: t } = e; return B(t.id) } function j(e) { let { guild: t } = e; ! function(e) { for (let t of D.values(e)) D.delete(t.id), delete y[t.id]; M.delete(e) }(t.id) } function W(e) { let { streamKey: t } = e, { channelId: n, guildId: i, ownerId: r } = (0, I.decodeStreamKey)(t); return !!(null != i && M.has(i)) && B(r, [n]) } let K = []; class z extends(i = _.default.Store) { initialize() { this.waitFor(f.default, p.default, S.default, N.default, O.default, A.default, C.default, h.default, g.default, m.default, L.default, T.default) } getParticipantsVersion(e) { var t, n; return null == e ? -1 : null !== (n = null === (t = b(e)) || void 0 === t ? void 0 : t.version) && void 0 !== n ? n : -1 } getMutableParticipants(e, t) { var n, i; return null == e ? K : null !== (i = null === (n = b(e)) || void 0 === n ? void 0 : n.toArray(t)) && void 0 !== i ? i : K } getMutableRequestToSpeakParticipants(e) { var t, n; return null !== (n = null === (t = b(e)) || void 0 === t ? void 0 : t.getRequestToSpeakParticipants()) && void 0 !== n ? n : K } getRequestToSpeakParticipantsVersion(e) { var t, n; return null !== (n = null === (t = b(e)) || void 0 === t ? void 0 : t.requestToSpeakVersion) && void 0 !== n ? n : -1 } getParticipantCount(e, t) { var n, i; return null !== (i = null === (n = b(e)) || void 0 === n ? void 0 : n.size(t)) && void 0 !== i ? i : 0 } getChannels(e) { return U(null != e ? e : v), D.values(null != e ? e : v) } getChannelsVersion() { return D.version } getParticipant(e, t) { var n, i; return null !== (i = null === (n = b(e)) || void 0 === n ? void 0 : n.getParticipant(t)) && void 0 !== i ? i : null } } a = "StageChannelParticipantStore", (s = "displayName") in(r = z) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new z(E.default, { CONNECTION_OPEN: x, OVERLAY_INITIALIZE: x, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e, n = new Set; return t.reduce((e, t) => { if (null == t.guildId || !M.has(t.guildId)) return e; let i = new Set; return (F(n, i, t.oldChannelId), F(n, i, t.channelId), 0 === i.size) ? e : B(t.userId, Array.from(i)) || e }, !1) }, CHANNEL_DELETE: function(e) { let { channel: { id: t } } = e; return V(t) }, GUILD_MEMBERS_CHUNK_BATCH: function(e) { let { chunks: t } = e, n = !1; for (let e of t) for (let t of e.members) n = B(t.user.id) || n; return n }, USER_UPDATE: H, GUILD_MEMBER_REMOVE: H, GUILD_MEMBER_UPDATE: H, CHANNEL_UPDATES: function(e) { let { channels: t } = e, n = t.reduce((e, t) => { if (!t.isGuildStageVoice() || !M.has(t.guild_id)) return e; let n = D.get(t.id); return null == n || l()(t.permissionOverwrites, n.permissionOverwrites) ? e : (e.push(t.id), D.set(t.id, t), e) }, []); return k(e => e.rebuild(), n), n.length > 0 }, GUILD_ROLE_UPDATE: function(e) { let { guildId: t } = e; if (M.has(t)) return k(e => e.rebuild(), P(t)) }, RTC_CONNECTION_VIDEO: function(e) { let { channelId: t, guildId: n, userId: i } = e; return !!(null != n && M.has(n)) && B(i, [t]) }, STREAM_CLOSE: W, STREAM_DELETE: W, RELATIONSHIP_ADD: Y, RELATIONSHIP_REMOVE: Y, GUILD_CREATE: j, GUILD_DELETE: j, PASSIVE_UPDATE_V2: function(e) { let t = !1; for (let n of P(e.guildId)) t = G(n).rebuild() || t; return t } }) }, 431328: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useActualStageSpeakerCount: function() { return d }, useSortedRequestToSpeakParticipants: function() { return u }, useStageParticipants: function() { return o }, useStageParticipantsCount: function() { return l } }), n("47120"); var i = n("442837"), r = n("136015"), s = n("565799"), a = n("501655"); function o(e, t) { let [n] = (0, i.useStateFromStores)([s.default], () => [s.default.getMutableParticipants(e, t), s.default.getParticipantsVersion(e)], [e, t], r.isVersionEqual); return n } function l(e, t) { return (0, i.useStateFromStores)([s.default], () => s.default.getParticipantCount(e, t), [e, t]) } function u(e) { let [t] = (0, i.useStateFromStores)([s.default], () => [s.default.getMutableRequestToSpeakParticipants(e), s.default.getRequestToSpeakParticipantsVersion(e)], [e], r.isVersionEqual); return t } function d(e) { return (0, i.useStateFromStores)([s.default], () => s.default.getMutableParticipants(e, a.StageChannelParticipantNamedIndex.SPEAKER).filter(e => e.type === a.StageChannelParticipantTypes.VOICE).length, [e]) } }, 501655: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StageChannelParticipantNamedIndex: function() { return i }, StageChannelParticipantTypes: function() { return r }, default: function() { return v } }), n("653041"), n("47120"); var i, r, s, a, o = n("759174"), l = n("933546"), u = n("569545"), d = n("199902"), _ = n("592125"), c = n("720202"), E = n("271383"), I = n("699516"), T = n("594174"), f = n("979651"), S = n("5192"), h = n("88751"), A = n("427679"), m = n("590415"), N = n("974609"), p = n("981631"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function C(e) { var t; let { speaker: n, role: i, user: r, userNick: s, connectedOn: a, voiceState: o, type: u } = e, d = o.selfMute ? "\x01" : "\0", _ = o.selfVideo ? "\0" : "\x01", c = "".concat(null !== (t = null == i ? void 0 : i.position) && void 0 !== t ? t : 999).padStart(3, "0"); return "".concat(n ? "\0" : "\x01").concat("STREAM" === u ? "\0" : "\x01").concat(d).concat(_).concat(c).concat(a).concat((0, l.default)(s, r)) } function R(e) { let { user: t, voiceState: n } = e, i = n.requestToSpeakTimestamp; return null == i ? t.id : "".concat(Date.parse(i)).concat(t.id) } function g(e) { return e === m.RequestToSpeakStates.REQUESTED_TO_SPEAK || e === m.RequestToSpeakStates.REQUESTED_TO_SPEAK_AND_AWAITING_USER_ACK } function L(e) { let { speaker: t, role: n, rtsState: i, blocked: r, isFriend: s } = e, a = []; return g(i) && a.push("ALL_REQUESTED_TO_SPEAK"), i === m.RequestToSpeakStates.REQUESTED_TO_SPEAK && a.push("REQUESTED_TO_SPEAK_ONLY"), t ? a.push("SPEAKER") : (null != n ? a.push(n.id) : a.push("NO_ROLE"), a.push("AUDIENCE")), r && a.push("BLOCKED"), s && a.push("FRIEND"), a }(s = i || (i = {})).SPEAKER = "SPEAKER", s.AUDIENCE = "AUDIENCE", s.NO_ROLE = "NO_ROLE", s.ALL_REQUESTED_TO_SPEAK = "ALL_REQUESTED_TO_SPEAK", s.REQUESTED_TO_SPEAK_ONLY = "REQUESTED_TO_SPEAK_ONLY", s.BLOCKED = "BLOCKED", s.FRIEND = "FRIEND", s.SELECTED = "SELECTED", s.MEDIA = "MEDIA", (a = r || (r = {})).VOICE = "VOICE", a.STREAM = "STREAM"; class v { _getParticipantsForUser(e, t) { var n, i; let r; let s = [], a = f.default.getVoiceStateForChannel(this.channelId, e); if (null == a) return s; let o = T.default.getUser(e); if (null == o) return null != this.guildId && A.default.isPublic(this.channelId) && c.default.requestMember(this.guildId, e), s; let l = null != t ? t[0] : null, _ = { user: o, userNick: S.default.getName(this.guildId, this.channelId, o), voiceState: a, role: (0, N.getHighestHoistedRole)(this.guildId, e), speaker: h.default.isSpeaker(e, this.channelId), member: null != this.guildId ? E.default.getMember(this.guildId, e) : null, blocked: I.default.getRelationships()[o.id] === p.RelationshipTypes.BLOCKED, isFriend: I.default.isFriend(o.id), connectedOn: null !== (n = null == l ? void 0 : l.connectedOn) && void 0 !== n ? n : Date.now() }, O = { ..._, type: "VOICE", id: o.id, rtsState: (0, m.getAudienceRequestToSpeakState)(a) }; s.push(O); let C = null !== (i = d.default.getStreamForUser(e, this.guildId)) && void 0 !== i ? i : d.default.getActiveStreamForUser(e, this.guildId); if (null != C && C.channelId === this.channelId) { let e = (0, u.encodeStreamKey)(C); r = { ..._, id: e, type: "STREAM", rtsState: m.RequestToSpeakStates.NONE }, s.push(r) } return s } updateParticipant(e) { let t = this.participants[e], n = this._getParticipantsForUser(e, t); return (null != t || 0 !== n.length) && (null == t || t.forEach(e => { this._participantsIndex.delete(e.id), this._requestToSpeakIndex.delete(e.id) }), n.forEach(t => { this._participantsIndex.set(t.id, t), t.id === e && g(t.rtsState) ? this._requestToSpeakIndex.set(e, t) : this._requestToSpeakIndex.delete(e) }), this.participants[e] = n, !0) } rebuild() { let e = _.default.getChannel(this.channelId); if (null == e || !e.isGuildStageVoice()) return !1; let t = new Set(Object.keys(f.default.getVoiceStatesForChannel(e.id))); return this._participantsIndex.clear(), this._requestToSpeakIndex.clear(), this.participants = {}, t.forEach(e => this.updateParticipant(e)), !0 } get version() { return this._participantsIndex.version } size(e) { return this._participantsIndex.size(e) } toArray(e) { return this._participantsIndex.values(e, !0) } getParticipant(e) { var t; return null !== (t = this._participantsIndex.get(e)) && void 0 !== t ? t : null } get requestToSpeakVersion() { return this._requestToSpeakIndex.version } getRequestToSpeakParticipants() { return this._requestToSpeakIndex.values(void 0, !0) } constructor(e) { var t; O(this, "channelId", void 0), O(this, "guildId", void 0), O(this, "participants", {}), O(this, "_participantsIndex", new o.SecondaryIndexMap(L, C)), O(this, "_requestToSpeakIndex", new o.SecondaryIndexMap(() => [], R)), this.channelId = e, this.guildId = null === (t = _.default.getChannel(e)) || void 0 === t ? void 0 : t.getGuildId() } } }, 200498: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canLurkerListen: function() { return S }, isEmptyOverwrite: function() { return I }, removeModeratorOverwrite: function() { return E }, useCanModerateRequestToSpeak: function() { return f }, useCanUpdateStageChannelModerators: function() { return T } }); var i = n("149765"), r = n("442837"), s = n("41776"); n("314897"); var a = n("592125"), o = n("430824"), l = n("496675"), u = n("700785"), d = n("146085"), _ = n("427679"), c = n("981631"); function E(e, t, n) { var r, s; let a = null == n ? void 0 : n.permissionOverwrites[e]; return { id: e, type: t, deny: null !== (r = null == a ? void 0 : a.deny) && void 0 !== r ? r : u.NONE, allow: i.remove(null !== (s = null == a ? void 0 : a.allow) && void 0 !== s ? s : u.NONE, d.MODERATE_STAGE_CHANNEL_PERMISSIONS) } } function I(e) { let { allow: t, deny: n } = e; return i.equals(t, u.NONE) && i.equals(n, u.NONE) } function T(e) { return (0, r.useStateFromStores)([l.default, o.default, a.default], () => { let t = a.default.getChannel(e), n = o.default.getGuild(null == t ? void 0 : t.getGuildId()); return !!(l.default.can(c.Permissions.ADMINISTRATOR, n) || l.default.can(c.Permissions.MANAGE_ROLES, t, void 0, void 0, !0) || l.default.can(d.UPDATE_STAGE_CHANNEL_MODERATOR_PERMISSIONS, t)) || !1 }, [e]) } function f(e) { return (0, r.useStateFromStores)([a.default, l.default], () => null != e && l.default.can(c.Permissions.MUTE_MEMBERS, a.default.getChannel(e)), [e]) } function S(e) { return !!(null != e && e.isGuildStageVoice() && s.default.isLurking(e.guild_id) && _.default.isPublic(e.id)) && l.default.can(d.JOIN_VOCAL_CHANNEL_PERMISSIONS, e) } }, 146085: function(e, t, n) { "use strict"; n.r(t), n.d(t, { JOIN_VOCAL_CHANNEL_PERMISSIONS: function() { return l }, LURKER_STAGE_CHANNEL_PERMISSIONS_ALLOWLIST: function() { return u }, MODERATE_STAGE_CHANNEL_PERMISSIONS: function() { return s }, STAGE_CHANNEL_DISABLED_PERMISSIONS: function() { return a }, UPDATE_STAGE_CHANNEL_MODERATOR_PERMISSIONS: function() { return o } }), n("47120"); var i = n("149765"), r = n("981631"); let s = i.combine(r.Permissions.MANAGE_CHANNELS, r.Permissions.MUTE_MEMBERS, r.Permissions.MOVE_MEMBERS); i.combine(r.Permissions.MANAGE_CHANNELS, r.Permissions.MANAGE_ROLES); let a = new Set([r.Permissions.SPEAK, r.Permissions.REQUEST_TO_SPEAK, r.Permissions.USE_VAD]), o = i.combine(s, r.Permissions.MANAGE_ROLES), l = i.combine(r.Permissions.CONNECT, r.Permissions.VIEW_CHANNEL), u = i.combine(l, r.Permissions.READ_MESSAGE_HISTORY, r.Permissions.REQUEST_TO_SPEAK, r.Permissions.SPEAK, r.Permissions.USE_VAD) }, 834332: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("275726"), r = n("904245"), s = n("147913"), a = n("314897"), o = n("592125"), l = n("375954"), u = n("496675"), d = n("944486"), _ = n("594174"), c = n("146085"), E = n("96052"), I = n("981631"); class T extends s.default { handleVoiceStateUpdates(e) { let { voiceStates: t } = e; t.forEach(e => { let { channelId: t, userId: n, suppress: s, requestToSpeakTimestamp: T } = e; if (d.default.getVoiceChannelId() === t && !!s && null != t && n !== a.default.getId()) { if (u.default.can(c.MODERATE_STAGE_CHANNEL_PERMISSIONS, o.default.getChannel(t))) { if (null != T) { let e = _.default.getUser(n); null != e && (0, E.sendStageRequestToSpeakEphemeralMessage)(t, e, T) } else { let e = l.default.getMessages(t).findNewest(e => e.type === i.MessageTypes.STAGE_RAISE_HAND && e.hasFlag(I.MessageFlags.EPHEMERAL) && e.author.id === n); null != e && r.default.deleteMessage(t, e.id, !0) } } } }) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { VOICE_STATE_UPDATES: this.handleVoiceStateUpdates }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new T }, 750154: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isStageActivity: function() { return c }, packStageChannelPartyId: function() { return d }, shouldShowActivity: function() { return E }, unpackStageChannelParty: function() { return _ } }), n("47120"); var i = n("314897"), r = n("592125"), s = n("430824"), a = n("88751"), o = n("157925"), l = n("981631"); let u = "stage:"; function d(e, t) { let n = 0, r = i.default.getId(); a.default.isSpeaker(r, e.id) && (n |= 1); let o = s.default.getGuild(e.getGuildId()); null != o && (o.hasFeature(l.GuildFeatures.PARTNERED) && (n |= 2), o.hasFeature(l.GuildFeatures.VERIFIED) && (n |= 4)); let d = n.toString(16); return "".concat(u).concat(e.guild_id, ":").concat(e.id, ":").concat(d, ":").concat(t.id) } function _(e) { if (null == e || null == e.party) return; let { id: t, size: n } = e.party; try { if (null == t || !t.startsWith(u)) return; let [, e, i, r, s] = t.split(":"), a = parseInt(r, 16); return { guildId: e, channelId: i, size: n, userIsSpeaker: (1 & a) != 0, guildIsPartnered: (2 & a) != 0, guildIsVerified: (4 & a) != 0, stageInstanceId: s } } catch (e) { return null } } function c(e) { return (null == e ? void 0 : e.application_id) === o.STAGE_APPLICATION_ID } function E(e) { let t = _(e); if (null == t) return !1; let { channelId: n } = t; return null != r.default.getChannel(n) } }, 88751: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"); var i, r, s, a, o, l, u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"), E = n("592125"), I = n("984933"), T = n("271383"), f = n("430824"), S = n("594174"), h = n("979651"), A = n("700785"), m = n("146085"), N = n("590415"); (s = i || (i = {})).SPEAKER = "speaker", s.MODERATOR = "moderator"; let p = {}, O = { speaker: !1, moderator: !1 }; function C(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; null == p[t] && (p[t] = {}); let i = function(e, t) { var n, i, r; let s = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], a = E.default.getChannel(t), o = null == a ? void 0 : a.getGuildId(), l = f.default.getGuild(o); if (null == l || null == a || !a.isGuildStageVoice()) return O; return { speaker: function(e, t) { let n = h.default.getVoiceStateForChannel(t, e); return (0, N.getAudienceRequestToSpeakState)(n) === N.RequestToSpeakStates.ON_STAGE }(e, t), moderator: s ? (n = e, i = l, r = a, A.can({ permission: m.MODERATE_STAGE_CHANNEL_PERMISSIONS, user: n, context: i, overwrites: r.permissionOverwrites, roles: f.default.getRoles(i.id) })) : null } }(e, t, n); return p[t][e] = i, i } function R(e) { let t = I.default.getChannels(e)[I.GUILD_VOCAL_CHANNELS_KEY].filter(e => { let { channel: t } = e; return t.isGuildStageVoice() }); for (let { channel: e } of t) delete p[e.id]; return t.length > 0 } function g(e) { let { guildId: t, user: n } = e; return null != n && null != t && function(e, t) { for (let n in p) { let i = E.default.getBasicChannel(n); if (null != i) i.guild_id === t && delete p[n][e] } return !0 }(n.id, t) } function L(e) { let { guild: t } = e; for (let e in p) { let n = E.default.getBasicChannel(e); (null == n || n.guild_id === t.id) && delete p[e] } } class v extends(r = _.default.Store) { initialize() { this.waitFor(T.default, E.default, f.default, S.default, h.default) } isSpeaker(e, t) { return this.getPermissionsForUser(e, t).speaker } isModerator(e, t) { var n; return null !== (n = this.getPermissionsForUser(e, t, !0).moderator) && void 0 !== n && n } isAudienceMember(e, t) { let n = this.getPermissionsForUser(e, t); return !n.speaker && !n.moderator } getPermissionsForUser(e, t) { var n; let i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (null == e || null == t) return O; let r = null === (n = p[t]) || void 0 === n ? void 0 : n[e]; if (null != r) return i && null == r.moderator ? C(e, t, !0) : r; return C(e, t, i) } } l = "StageChannelRoleStore", (o = "displayName") in(a = v) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new v(c.default, { CHANNEL_UPDATES: function(e) { let { channels: t } = e; for (let e of t) delete p[e.id] }, CONNECTION_OPEN: function() { p = {} }, GUILD_MEMBER_REMOVE: g, GUILD_MEMBER_UPDATE: g, GUILD_ROLE_UPDATE: function(e) { let { guildId: t } = e; R(t) }, PASSIVE_UPDATE_V2: function(e) { return R(e.guildId) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return !d().isEmpty(p) && t.reduce((e, t) => { let { userId: n, channelId: i } = t; return function(e, t) { var n; if (null == t) return !1; let i = E.default.getChannel(t); return !!(null != i && i.isGuildStageVoice()) && (null === (n = p[t]) || void 0 === n || delete n[e], !0) }(n, i) || e }, !1) }, GUILD_CREATE: L, GUILD_DELETE: L }) }, 742738: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("348327"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("592125"), c = n("430824"), E = n("19780"), I = n("944486"), T = n("700785"), f = n("565799"), S = n("501655"), h = n("750154"), A = n("427679"), m = n("71275"), N = n("157925"), p = n("981631"); let O = null; function C() { let e = function() { var e, t, n, i, r, s, a; let o = I.default.getVoiceChannelId(); if (null == o) return null; let l = A.default.getStageInstanceByChannel(o); if (null == l) return null; let u = _.default.getChannel(o); if (null == u || !T.canEveryone(p.Permissions.VIEW_CHANNEL, u)) return null; let d = c.default.getGuild(u.getGuildId()); if (null == d || !d.hasFeature(p.GuildFeatures.DISCOVERABLE)) return null; let E = (0, h.packStageChannelPartyId)(u, l), C = (null == O ? void 0 : null === (e = O.party) || void 0 === e ? void 0 : e.id) === E ? O : null, R = f.default.getMutableParticipants(u.id, S.StageChannelParticipantNamedIndex.SPEAKER), g = R.filter(e => e.type === S.StageChannelParticipantTypes.STREAM).length, L = R.length - g, v = f.default.getParticipantCount(o) - g, D = (null == C ? void 0 : null === (t = C.party) || void 0 === t ? void 0 : t.size) != null ? C.party.size[1] : 0; return { application_id: N.STAGE_APPLICATION_ID, name: null !== (r = null !== (i = l.topic) && void 0 !== i ? i : u.topic) && void 0 !== r ? r : u.name, type: (0, m.getStageHasMedia)(u.id) ? p.ActivityTypes.WATCHING : p.ActivityTypes.LISTENING, timestamps: { start: null !== (s = null == C ? void 0 : null === (n = C.timestamps) || void 0 === n ? void 0 : n.start) && void 0 !== s ? s : new Date().getTime() }, assets: { small_image: null !== (a = d.icon) && void 0 !== a ? a : void 0, small_text: d.name }, party: { id: E, size: [L, Math.max(v, D)] } } }(); return !l()(e, O) && (O = e, !0) } class R extends(a = u.default.Store) { initialize() { this.waitFor(_.default, I.default, A.default, E.default) } getActivity() { return O } } s = "StageChannelSelfRichPresenceStore", (r = "displayName") in(i = R) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new R(d.default, { CONNECTION_OPEN: C, STAGE_INSTANCE_CREATE: C, STAGE_INSTANCE_UPDATE: C, STAGE_INSTANCE_DELETE: C, VOICE_CHANNEL_SELECT: C, RTC_CONNECTION_STATE: function(e) { var t, n, i; let { state: r } = e, s = null !== (i = null == O ? void 0 : null === (n = O.party) || void 0 === n ? void 0 : null === (t = n.size) || void 0 === t ? void 0 : t[1]) && void 0 !== i ? i : 0; return r === p.RTCConnectionStates.RTC_CONNECTED && !(s > 0) && C() }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; if (null == O) return; let n = (0, h.unpackStageChannelParty)(O); null != n && null != t.find(e => e.channelId === n.channelId) && C() } }) }, 157925: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { MAX_STAGE_TOPIC_LENGTH: function() { return o }, RequestToSpeakPermissionStates: function() { return i }, STAGE_APPLICATION_ID: function() { return l }, STAGE_AUDIENCE_NOTICE_SHOWN_STORAGE_KEY: function() { return d }, STAGE_INVITE_STATE_KEY: function() { return u }, StartStageSteps: function() { return r } }), n("63063"), n("981631"), n("689938"); let o = 240, l = "834488117758001152", u = "stage-invite", d = "stage-channel-audience-notice-shown"; (s = i || (i = {}))[s.EVERYONE = 1] = "EVERYONE", s[s.NO_ONE = 2] = "NO_ONE", s[s.ROLES = 3] = "ROLES", (a = r || (r = {}))[a.GUILD_SELECTION = 0] = "GUILD_SELECTION", a[a.STAGE_CHANNEL_SETTINGS = 1] = "STAGE_CHANNEL_SETTINGS", a[a.PUBLIC_STAGE_PREVIEW = 2] = "PUBLIC_STAGE_PREVIEW" }, 427679: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("765305"); let d = {}, _ = {}; function c(e, t) { var n; let i = { ...null !== (n = d[e]) && void 0 !== n ? n : {} }; null == t || t.forEach(e => { _[e.channel_id] = e, i[e.channel_id] = e }), d[e] = i } function E(e) { let { instance: t } = e; c(t.guild_id, [t]) } function I(e, t) { var n; if (delete _[t], null == e) return; let i = { ...null !== (n = d[e]) && void 0 !== n ? n : {} }; delete i[t], d[e] = i } class T extends(a = o.default.Store) { getStageInstanceByChannel(e) { if (null != e) return _[e] } isLive(e) { return null != this.getStageInstanceByChannel(e) } isPublic(e) { var t; return (null === (t = this.getStageInstanceByChannel(e)) || void 0 === t ? void 0 : t.privacy_level) === u.GuildScheduledEventPrivacyLevel.PUBLIC } getStageInstancesByGuild(e) { var t; return null == e ? {} : null !== (t = d[e]) && void 0 !== t ? t : {} } getAllStageInstances() { return Object.values(_) } } s = "StageInstanceStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new T(l.default, { CONNECTION_OPEN: function(e) { let { guilds: t } = e; d = {}, _ = {}, t.forEach(e => c(e.id, e.stage_instances)) }, GUILD_CREATE: function(e) { let { guild: t } = e; c(t.id, t.stage_instances) }, GUILD_DELETE: function(e) { var t; let { guild: n } = e, i = null !== (t = d[n.id]) && void 0 !== t ? t : {}; delete d[n.id], Object.keys(i).forEach(e => { delete _[e] }) }, STAGE_INSTANCE_CREATE: E, STAGE_INSTANCE_UPDATE: E, STAGE_INSTANCE_DELETE: function(e) { let { instance: t } = e; I(t.guild_id, t.channel_id) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; I(t.guild_id, t.id) }, LOGOUT: function() { _ = {}, d = {} } }) }, 96150: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("317770"), s = n("280837"), a = n("592125"), o = n("914010"), l = n("823379"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class d extends r.default { _initialize() { i.default.subscribe("VOICE_CHANNEL_SELECT", this.handleVoiceChannelSelect), i.default.subscribe("LOGOUT", this.handleLogout) } _terminate() { i.default.unsubscribe("VOICE_CHANNEL_SELECT", this.handleVoiceChannelSelect), i.default.unsubscribe("LOGOUT", this.handleLogout) } constructor(...e) { super(...e), u(this, "handleVoiceChannelSelect", e => { let { channelId: t, guildId: n } = e; if (null != t) { let e = a.default.getChannel(t); if (null == e || e.isGuildStageVoice()) return } this.terminate(); this.handleDisconnectFromStageChannel(null == t ? null : null != n ? n : null) }), u(this, "handleDisconnectFromStageChannel", e => { let t = o.default.getGuildId(); (0, s.stopLurkingAll)([t, e].filter(l.isNotNullish)) }), u(this, "handleLogout", () => { this.terminate(), this.handleDisconnectFromStageChannel(null) }) } } t.default = new d }, 71275: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getStageHasMedia: function() { return u }, isStageVideoEnabled: function() { return d }, useStageHasMedia: function() { return l } }); var i = n("442837"), r = n("430824"), s = n("979651"), a = n("565799"), o = n("501655"); function l(e) { let t = function(e) { return (0, i.useStateFromStores)([a.default], () => null != a.default.getMutableParticipants(e, o.StageChannelParticipantNamedIndex.SPEAKER).find(e => e.type === o.StageChannelParticipantTypes.STREAM), [e]) }(e); return (0, i.useStateFromStores)([s.default], () => s.default.hasVideo(e), [e]) || t } function u(e) { return function(e) { return null != a.default.getMutableParticipants(e, o.StageChannelParticipantNamedIndex.SPEAKER).find(e => e.type === o.StageChannelParticipantTypes.STREAM) }(e) || s.default.hasVideo(e) } function d(e) { var t; let n = r.default.getGuild(e); return null != n && (null !== (t = null == n ? void 0 : n.maxStageVideoChannelUsers) && void 0 !== t ? t : 0) > 0 } }, 485287: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldShowStageMusicMuteButton: function() { return m }, useShowStageMusicMuteButton: function() { return A } }), n("47120"); var i = n("442837"), r = n("147913"), s = n("592125"), a = n("131951"), o = n("944486"), l = n("979651"), u = n("557177"), d = n("565799"), _ = n("431328"), c = n("501655"), E = n("427679"), I = n("754277"); let T = e => e / 400, f = !1, S = (0, u.createSound)("stage_waiting", "stage_waiting", T(a.default.getOutputVolume())); function h() { let e = o.default.getVoiceChannelId(); if (null == e) { S.stop(), f = !1; return } let t = s.default.getChannel(e); if (!(null == t ? void 0 : t.isGuildStageVoice()) || a.default.isSelfDeaf()) { S.stop(), f = !1; return } if (I.default.shouldPlay()) { S.volume = T(a.default.getOutputVolume()), S.loop(), f = !0; return } if (E.default.isLive(e)) { S.stop(), f = !1; return } if (I.default.isMuted()) { S.pause(), f = !1; return } let n = null != Object.values(l.default.getVoiceStatesForChannel(e)).find(e => !e.suppress && !e.isVoiceMuted()); n || f ? n && (S.pause(), f = !1) : (S.volume = T(a.default.getOutputVolume()), S.loop(), f = !0) } function A(e) { let t = (0, i.useStateFromStores)([o.default], () => o.default.getVoiceChannelId() === e), n = null != (0, _.useStageParticipants)(e, c.StageChannelParticipantNamedIndex.SPEAKER).find(e => !e.voiceState.isVoiceMuted()), r = (0, i.useStateFromStores)([E.default], () => E.default.getStageInstanceByChannel(e)); return t && null == r && !n } function m(e) { let t = o.default.getVoiceChannelId() === e, n = null != d.default.getMutableParticipants(e, c.StageChannelParticipantNamedIndex.SPEAKER).find(e => !e.voiceState.isVoiceMuted()), i = E.default.getStageInstanceByChannel(e); return t && null == i && !n } class N extends r.default { handleVoiceChannelSelect(e) { let { channelId: t } = e; if (null != t) { let e = s.default.getChannel(t); (null == e ? void 0 : e.isGuildStageVoice()) ? h(): (S.stop(), f = !1) } else S.stop(), f = !1 } handleLogout() { S.stop(), f = !1 } handlePlay(e) { let { play: t } = e; t ? h() : (S.pause(), f = !1) } handleMute(e) { let { muted: t } = e; t ? (S.pause(), f = !1) : h() } handleVoiceStateUpdates() { h() } handleSetOutputVolume(e) { let { volume: t } = e; S.volume = T(t) } handleToggleSelfDeaf() { h() } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { VOICE_CHANNEL_SELECT: this.handleVoiceChannelSelect, LOGOUT: this.handleLogout, STAGE_MUSIC_MUTE: this.handleMute, STAGE_MUSIC_PLAY: this.handlePlay, VOICE_STATE_UPDATES: this.handleVoiceStateUpdates, AUDIO_SET_OUTPUT_VOLUME: this.handleSetOutputVolume, AUDIO_TOGGLE_SELF_DEAF: this.handleToggleSelfDeaf }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new N }, 754277: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = !1, l = !1; class u extends(i = r.default.DeviceSettingsStore) { initialize(e) { null != e && (o = e) } isMuted() { return o } shouldPlay() { return l } getUserAgnosticState() { return o } } a(u, "displayName", "StageMusicStore"), a(u, "persistKey", "StageMusicStore"), t.default = new u(s.default, { STAGE_MUSIC_MUTE: function(e) { let { muted: t } = e; o = t, l = !1 }, STAGE_MUSIC_PLAY: function(e) { let { play: t } = e; l = t }, VOICE_CHANNEL_SELECT: function() { l = !1 } }) }, 96052: function(e, t, n) { "use strict"; n.r(t), n.d(t, { sendStageRequestToSpeakEphemeralMessage: function() { return a } }); var i = n("570140"), r = n("709054"), s = n("981631"); function a(e, t, n) { i.default.dispatch({ type: "MESSAGE_CREATE", channelId: e, message: function(e) { let { channelId: t, requesterUser: n, requestToSpeakTimestamp: i } = e; return { id: r.default.fromTimestamp(Date.parse(i)), type: s.MessageTypes.STAGE_RAISE_HAND, flags: s.MessageFlags.EPHEMERAL, content: "", channel_id: t, author: n, attachments: [], embeds: [], pinned: !1, mentions: [], mention_channels: [], mention_roles: [], mention_everyone: !1, timestamp: i, state: s.MessageStates.SENT, tts: !1 } }({ channelId: e, requesterUser: t, requestToSpeakTimestamp: n }), optimistic: !1, sendMessageOptions: {}, isPushNotification: !1 }) } }, 590415: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RequestToSpeakStates: function() { return r }, default: function() { return l }, getAudienceRequestToSpeakState: function() { return o } }); var i, r, s = n("442837"), a = n("979651"); function o(e) { if (null == e) return 0; if (e.suppress && null != e.requestToSpeakTimestamp) return 1; if (!e.suppress && null != e.requestToSpeakTimestamp) return 2; if (!e.suppress && null == e.requestToSpeakTimestamp) return 3; return 0 } function l(e, t) { return (0, s.useStateFromStores)([a.default], () => null == e || null == t ? 0 : o(a.default.getVoiceStateForChannel(t, e)), [e, t]) }(i = r || (r = {}))[i.NONE = 0] = "NONE", i[i.REQUESTED_TO_SPEAK = 1] = "REQUESTED_TO_SPEAK", i[i.REQUESTED_TO_SPEAK_AND_AWAITING_USER_ACK = 2] = "REQUESTED_TO_SPEAK_AND_AWAITING_USER_ACK", i[i.ON_STAGE = 3] = "ON_STAGE" }, 974609: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getHighestHoistedRole: function() { return a } }), n("47120"), n("442837"); var i = n("271383"), r = n("430824"), s = n("700785"); let a = function(e, t) { let [n, a] = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [r.default, i.default]; if (null == e || null == t) return null; let o = n.getGuild(e); if (null == o) return null; let l = a.getMember(o.id, t); return null == l ? null : s.getHighestHoistedRole(o, l) } }, 513449: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setIsOnStartStageScreen: function() { return _ }, useUpdateIsOnStartStageScreenEffect: function() { return c } }); var i = n("470079"), r = n("652874"), s = n("442837"), a = n("496675"), o = n("944486"), l = n("146085"), u = n("643632"); let d = (0, r.default)(e => ({ isOnStartStageScreen: !0 })); function _(e) { d.setState({ isOnStartStageScreen: e }) } function c(e) { let t = (0, s.useStateFromStores)([o.default], () => o.default.getVoiceChannelId() === e.id), n = (0, s.useStateFromStores)([a.default], () => a.default.can(l.MODERATE_STAGE_CHANNEL_PERMISSIONS, e), [e]), r = (0, u.default)(e.id), d = n && !r; i.useEffect(() => { t ? !d && _(!1) : _(d) }, [t, d]) } t.default = d }, 517334: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }), n("724458"), n("653041"), n("47120"); var i = n("442837"), r = n("592125"), s = n("496675"), a = n("823379"), o = n("709054"), l = n("146085"), u = n("427679"); function d(e) { return function(e) { let t = (0, i.useStateFromStoresArray)([r.default], () => e.map(e => r.default.getChannel(e)).filter(a.isNotNullish), [e]); return (0, i.useStateFromStoresArray)([s.default], () => t.filter(e => s.default.can(l.JOIN_VOCAL_CHANNEL_PERMISSIONS, e)), [t]) }((0, i.useStateFromStoresArray)([u.default], () => o.default.keys(u.default.getStageInstancesByGuild(e)), [e])) } }, 930180: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getStageBlockedUsersCount: function() { return o }, useStageBlockedUsers: function() { return l }, useStageBlockedUsersCount: function() { return a } }); var i = n("442837"), r = n("565799"), s = n("501655"); function a(e) { return (0, i.useStateFromStores)([r.default], () => null != e ? r.default.getParticipantCount(e, s.StageChannelParticipantNamedIndex.BLOCKED) : 0, [e]) } function o(e) { var t; return null !== (t = r.default.getParticipantCount(e, s.StageChannelParticipantNamedIndex.BLOCKED)) && void 0 !== t ? t : 0 } function l(e) { return (0, i.useStateFromStores)([r.default], () => r.default.getMutableParticipants(e, s.StageChannelParticipantNamedIndex.BLOCKED), [e]) } }, 643632: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("442837"), r = n("427679"); function s(e) { return (0, i.useStateFromStores)([r.default], () => r.default.isLive(e), [e]) } }, 880563: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("478763"); t.default = e => { let { children: t, shouldAnimate: n } = e; return n ? (0, i.jsx)("div", { className: r.outerContainer, children: (0, i.jsx)("div", { className: r.innerContainer, children: t }) }) : t } }, 913663: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a = n("445346"), o = n("570140"), l = n("703558"); let u = {}, d = {}; class _ extends a.Store { getStickerPreview(e, t) { return (t === l.DraftType.FirstThreadMessage ? d : u)[e] } } s = "StickerMessagePreviewStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s; let c = new _(o.default, { ADD_STICKER_PREVIEW: function(e) { let { channelId: t, sticker: n, draftType: i } = e; (i === l.DraftType.FirstThreadMessage ? d : u)[t] = [n] }, CLEAR_STICKER_PREVIEW: function(e) { let { channelId: t, draftType: n } = e, i = n === l.DraftType.FirstThreadMessage ? d : u; null != i[t] && delete i[t] }, LOGOUT: function() { u = {}, d = {} } }); t.default = c }, 191177: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setShowPremiumUpsell: function() { return a }, useStickerPickerUpsellStore: function() { return o } }); var i = n("652874"); let r = Object.freeze({ showPremiumUpsell: !1 }), s = (0, i.default)(e => r), a = e => { s.setState({ showPremiumUpsell: e }) }, o = s }, 285651: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StickerSendability: function() { return r }, getStickerSendability: function() { return u }, isSendableSticker: function() { return d } }); var i, r, s = n("700785"), a = n("74538"), o = n("378233"), l = n("981631"); (i = r || (r = {}))[i.SENDABLE = 0] = "SENDABLE", i[i.SENDABLE_WITH_PREMIUM = 1] = "SENDABLE_WITH_PREMIUM", i[i.NONSENDABLE = 2] = "NONSENDABLE", i[i.SENDABLE_WITH_BOOSTED_GUILD = 3] = "SENDABLE_WITH_BOOSTED_GUILD"; let u = (e, t, n) => { if (null == t) return 2; let i = a.default.canUseCustomStickersEverywhere(t); if ((0, o.isStandardSticker)(e)) return 0; if ((0, o.isGuildSticker)(e) && null != n) return e.available ? null != n.guild_id && "" !== n.guild_id && n.guild_id === e.guild_id ? 0 : null == n.guild_id || s.can({ permission: l.Permissions.USE_EXTERNAL_STICKERS, user: t, context: n }) ? i ? 0 : 1 : 2 : 3; return 2 }, d = (e, t, n) => 0 === u(e, t, n) }, 268350: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addStickerPreview: function() { return g }, clearStickerPreview: function() { return L }, createGuildSticker: function() { return C }, deleteGuildSticker: function() { return O }, favoriteSticker: function() { return D }, fetchGuildStickers: function() { return p }, fetchSticker: function() { return N }, fetchStickerPack: function() { return A }, fetchStickerPacks: function() { return m }, unfavoriteSticker: function() { return M }, updateGuildSticker: function() { return R } }), n("653041"); var i = n("392711"), r = n.n(i), s = n("544891"), a = n("570140"), o = n("668781"), l = n("38618"), u = n("706454"), d = n("675478"), _ = n("598077"), c = n("486472"), E = n("594174"), I = n("73346"), T = n("926491"), f = n("981631"), S = n("526761"), h = n("689938"); let A = async (e, t) => { let { body: n } = await (0, I.httpGetWithCountryCodeQuery)(f.Endpoints.STICKER_PACK(e)); return a.default.dispatch({ type: "STICKER_PACK_FETCH_SUCCESS", packId: e, pack: n, ingestStickers: t }), n }, m = async function() { let { locale: e = u.default.locale } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; if (T.default.isFetchingStickerPacks || T.default.hasLoadedStickerPacks) return; a.default.wait(() => { a.default.dispatch({ type: "STICKER_PACKS_FETCH_START" }) }); let { body: { sticker_packs: t } } = await s.HTTP.get({ url: f.Endpoints.STICKER_PACKS, query: { locale: e } }); a.default.dispatch({ type: "STICKER_PACKS_FETCH_SUCCESS", packs: t }) }, N = async e => { let { body: t } = await s.HTTP.get({ url: f.Endpoints.STICKER(e) }); a.default.dispatch({ type: "STICKER_FETCH_SUCCESS", sticker: t }) }, p = async e => { let { body: t } = await s.HTTP.get({ url: f.Endpoints.GUILD_STICKER_PACKS(e) }); a.default.dispatch({ type: "GUILD_STICKERS_FETCH_SUCCESS", guildId: e, stickers: t.map(e => null != e.user ? { ...e, user: new _.default(e.user) } : e) }) }, O = async e => { await s.HTTP.del({ url: f.Endpoints.GUILD_STICKER(e.guild_id, e.id) }) }, C = async (e, t) => { let n = await s.HTTP.post({ url: f.Endpoints.GUILD_STICKER_PACKS(e), body: t }); return a.default.dispatch({ type: "GUILD_STICKERS_CREATE_SUCCESS", guildId: e, sticker: { ...n.body, user: E.default.getCurrentUser() } }), n.body }, R = async (e, t, n) => (await s.HTTP.patch({ url: f.Endpoints.GUILD_STICKER(e, t), body: n })).body; function g(e, t, n) { a.default.dispatch({ type: "ADD_STICKER_PREVIEW", channelId: e, sticker: t, draftType: n }) } function L(e, t) { a.default.dispatch({ type: "CLEAR_STICKER_PREVIEW", channelId: e, draftType: t }) } function v(e) { return c.default.totalUnavailableGuilds > 0 || !l.default.isConnected() ? e : e.filter(e => null != T.default.getStickerById(e)) } function D(e) { d.FrecencyUserSettingsActionCreators.updateAsync("favoriteStickers", t => (t.stickerIds = v(t.stickerIds), r().size(t.stickerIds) >= S.MAX_FAVORITES) ? (o.default.show({ title: h.default.Messages.FAVORITES_LIMIT_REACHED_TITLE, body: h.default.Messages.FAVORITES_LIMIT_REACHED_BODY.format({ count: S.MAX_FAVORITES }) }), !1) : !t.stickerIds.includes(e) && void t.stickerIds.push(e), S.UserSettingsDelay.INFREQUENT_USER_ACTION) } function M(e) { d.FrecencyUserSettingsActionCreators.updateAsync("favoriteStickers", t => { t.stickerIds = t.stickerIds.filter(t => t !== e), t.stickerIds = v(t.stickerIds) }, S.UserSettingsDelay.INFREQUENT_USER_ACTION) } }, 217590: function(e, t, n) { "use strict"; n.r(t), n.d(t, { trackStickerFavorited: function() { return d }, trackStickerPickerOpen: function() { return u }, trackStickerSearchEmpty: function() { return T }, trackStickerSearchResultsViewed: function() { return c }, trackStickerSearchSelect: function() { return E }, trackStickerSearchStart: function() { return _ }, trackStickerSelect: function() { return I } }); var i = n("367907"), r = n("626135"), s = n("373228"), a = n("981631"), o = n("957825"), l = n("474936"); let u = e => { let { containerWidth: t, favoriteStickers: n, frequentlyUsedStickers: r, guildStickers: l, stickersTotal: u } = e; i.default.trackWithMetadata(a.AnalyticEvents.EXPRESSION_PICKER_OPENED, { width: t, tab: o.ExpressionPickerViewType.STICKER, badged: !1, num_expressions_favorites: n.length, num_animated_expressions_favorites: n.filter(e => (0, s.isAnimatedSticker)(e.format_type)).length, num_custom_expressions_favorites: n.filter(e => (0, s.isCustomSticker)(e.type)).length, num_standard_expressions_favorites: n.filter(e => !(0, s.isCustomSticker)(e.type)).length, num_expressions_frecent: r.length, num_custom_expressions_frecent: r.filter(e => (0, s.isCustomSticker)(e.type)).length, num_animated_expressions_frecent: r.filter(e => (0, s.isAnimatedSticker)(e.format_type)).length, num_standard_expressions_frecent: r.filter(e => !(0, s.isCustomSticker)(e.type)).length, num_current_guild_expressions: l.length, num_custom_expressions_total: u }) }, d = e => { let t, { sticker: n, location: r } = e; n.type === s.MetaStickerType.GUILD && (t = n.guild_id), i.default.trackWithMetadata(a.AnalyticEvents.EXPRESSION_FAVORITED, { location: r, expression_type: o.ExpressionPickerViewType.STICKER, expression_id: n.id, expression_name: n.name, expression_guild_id: t, is_animated: (0, s.isAnimatedSticker)(n.format_type), is_custom: (0, s.isCustomSticker)(n.type) }) }, _ = () => { r.default.track(a.AnalyticEvents.SEARCH_STARTED, { search_type: a.SearchTypes.STICKER }) }, c = (e, t, n) => { i.default.trackWithMetadata(a.AnalyticEvents.SEARCH_RESULT_VIEWED, { search_type: a.SearchTypes.STICKER, total_results: t, query: e, is_suggestion: n }) }, E = (e, t, n) => { let r; let { sticker: o } = e; o.type === s.MetaStickerType.GUILD && (r = o.guild_id), i.default.trackWithMetadata(a.AnalyticEvents.SEARCH_RESULT_SELECTED, { load_id: o.id, search_type: a.SearchTypes.STICKER, source_object: "Sticker Picker", total_results: n, expression_guild_id: r, sticker_id: o.id, query: t }) }, I = e => { let t; let { sticker: n, category: r } = e; n.type === s.MetaStickerType.GUILD && (t = n.guild_id), i.default.trackWithMetadata(a.AnalyticEvents.EXPRESSION_PICKER_EXPRESSION_SELECTED, { type: l.PremiumUpsellTypes.EMOJI_PICKER_STICKER_CLICKED, expression_id: n.id, expression_name: n.name, expression_picker_section: r, expression_guild_id: t, is_animated: (0, s.isAnimatedSticker)(n.format_type), is_custom: (0, s.isCustomSticker)(n.type) }) }, T = e => { null != e && "" !== e && i.default.trackWithMetadata(a.AnalyticEvents.SEARCH_RESULT_EMPTY, { query: e, search_type: a.SearchTypes.STICKER, source_object: "Sticker Picker" }) } }, 611480: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { DEFAULT_STICKER_DIMENSIONS: function() { return u }, EMPTY_STATE_STICKERS: function() { return _ }, GRID_NAVIGATOR_ID: function() { return o }, INACTIVE_CATEGORY_INDEX: function() { return l }, MAX_STICKER_FILE_SIZE: function() { return c }, STAFF_MAX_STICKER_FILE_SIZE: function() { return E }, STICKER_APPLICATION_ID: function() { return d }, STICKER_PICKER_TAB_ID: function() { return a }, STICKER_PICKER_TAB_PANEL_ID: function() { return s }, StickerAnimationSettings: function() { return i } }); let s = "sticker-picker-tab-panel", a = "sticker-picker-tab", o = "sticker-picker-grid", l = -1, u = 160, d = "710982414301790216", _ = ["781323769960202280", "809209266556764241", "818597810047680532", "819129296374595614"], c = 524288, E = 1572864; (r = i || (i = {}))[r.ALWAYS_ANIMATE = 0] = "ALWAYS_ANIMATE", r[r.ANIMATE_ON_INTERACTION = 1] = "ANIMATE_ON_INTERACTION", r[r.NEVER_ANIMATE = 2] = "NEVER_ANIMATE" }, 453070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useFavoriteStickerIds: function() { return D }, useFavoriteStickers: function() { return M }, useFetchStickerPack: function() { return p }, useFetchStickerPacks: function() { return g }, useFilteredStickerPackCategories: function() { return b }, useHasSendableSticker: function() { return R }, useLatestFrecentStickers: function() { return y }, useShouldAnimateSticker: function() { return O }, useStickerForRenderableSticker: function() { return U }, useStickersGrid: function() { return C } }), n("653041"), n("47120"), n("733860"); var i = n("470079"), r = n("442837"), s = n("889161"), a = n("695346"), o = n("516373"), l = n("430824"), u = n("914010"), d = n("771845"), _ = n("594174"), c = n("267642"), E = n("700785"), I = n("285651"), T = n("268350"), f = n("822179"), S = n("926491"), h = n("373228"), A = n("378233"), m = n("981631"), N = n("689938"); let p = e => { g(); let t = (0, r.useStateFromStores)([S.default], () => S.default.hasLoadedStickerPacks); i.useEffect(() => { t && null == S.default.getStickerPack(e) && (0, T.fetchStickerPack)(e) }, [e, t]) }, O = e => { let t = a.AnimateStickers.useSetting(); return (0, A.shouldAnimateSticker)(t, e) }, C = e => { let { collapsedStickersCategories: t, filteredStickers: n, listPaddingRight: r = 0, listWidth: a = 0, stickerNodeMargin: o = 0, stickerNodeWidth: d, stickersCategories: _ } = e; return i.useMemo(() => { let e = Math.floor((a - r + o) / (d + o)), i = Math.floor(Math.max(o, (a - r - d * e) / (e - 1))), E = [], I = [], T = [], f = 0, S = 0, m = 0; if (0 !== a) { let i = function(t, n) { let i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = (0, A.isGuildSticker)(t[0]) ? l.default.getGuild(t[0].guild_id) : void 0, { canCreateExpressions: a } = (0, s.getManageResourcePermissions)(r), o = u.default.getGuildId(), d = _.findIndex(e => e.type === h.StickerCategoryTypes.FAVORITE), p = _.findIndex(e => e.type === h.StickerCategoryTypes.RECENT), O = t.length; null != r && o === r.id && a && t.length < (0, c.getTotalStickerCountForTier)(r.premiumTier) && O++; let C = Math.ceil(O / e); I[S] = i ? 0 : C; for (let s = 0; s < C; s++) { let a = s * e, o = a + e, l = t.slice(a, o).map((e, t) => ({ type: h.StickerGridItemTypes.STICKER, sticker: e, packId: (0, A.isStandardSticker)(e) ? e.pack_id : "TODO - fix", gridSectionIndex: S, rowIndex: f, columnIndex: t, visibleRowIndex: m, category: n })); S > p && S > d && null != r && O > t.length && l.push({ type: h.StickerGridItemTypes.CREATE_STICKER, guild_id: r.id, name: N.default.Messages.STICKER_PICKER_CREATE_STICKER_TITLE, gridSectionIndex: S, rowIndex: f, columnIndex: l.length, visibleRowIndex: m }), !i && (m++, T.push(l), E.push(l.length)), f++ } S++ }; if (null == n) for (let e of _) e.stickers.length > 0 ? (f++, i(e.stickers, e.type, (null == t ? void 0 : t.has(e.id)) === !0)) : e.type === h.StickerCategoryTypes.EMPTY_GUILD_UPSELL && (I[S] = 0, S++); else n.sendable.length > 0 && i(n.sendable, h.StickerCategoryTypes.SEARCH_RESULTS), n.sendableWithPremium.length > 0 && i(n.sendableWithPremium, h.StickerCategoryTypes.SEARCH_RESULTS) } return { rowCount: f, rowCountBySection: I, stickersGrid: T, gutterWidth: i, columnCounts: E } }, [t, n, r, a, o, d, _]) }, R = e => { let t = (0, r.useStateFromStores)([_.default], () => _.default.getCurrentUser()); return (0, r.useStateFromStores)([S.default], () => { for (let n of S.default.getAllStickersIterator()) if ((0, I.isSendableSticker)(n, t, e)) return !0; return !1 }, [t, e]) }, g = () => { i.useEffect(() => { (0, T.fetchStickerPacks)() }, []) }, L = e => { let t = (0, r.useStateFromStores)([S.default], () => S.default.getAllGuildStickers()), n = (0, r.useStateFromStoresArray)([d.default, l.default], () => { let e = d.default.getFlattenedGuildIds(), t = []; return e.forEach(e => { let n = l.default.getGuild(e); null != n && t.push(n) }), t }, []), a = (0, r.useStateFromStores)([_.default], () => _.default.getCurrentUser()); return i.useMemo(() => { let i = []; for (let { name: e, id: r } of n) { let n = t.get(r); null != n && 0 !== n.length && i.push({ type: h.StickerCategoryTypes.GUILD, id: r, name: e, stickers: n }) } if ((null == e ? void 0 : e.getGuildId()) != null) { let t = l.default.getGuild(e.getGuildId()), { canManageAllExpressions: n } = (0, s.getManageResourcePermissions)(t), r = i.findIndex(t => t.id === e.getGuildId()); r >= 1 ? i.unshift(i.splice(r, 1)[0]) : -1 === r && null != t && n && i.unshift({ type: h.StickerCategoryTypes.EMPTY_GUILD_UPSELL, id: t.id, name: t.name, stickers: [] }), null != a && !E.can({ permission: m.Permissions.USE_EXTERNAL_EMOJIS, user: a, context: e }) && (i = i.filter(t => t.id === e.getGuildId())) } return i }, [t, n, a, e]) }, v = []; function D() { var e, t; return null !== (t = null === (e = (0, o.useFrecencySettings)().favoriteStickers) || void 0 === e ? void 0 : e.stickerIds) && void 0 !== t ? t : v } function M() { let e = D(); return (0, r.useStateFromStoresArray)([S.default], () => e.map(e => S.default.getStickerById(e)).filter(e => void 0 !== e), [e]) } function y() { let e = function() { var e, t; let n = (0, o.useFrecencySettings)(), i = v; return (null == n ? void 0 : null === (e = n.stickerFrecency) || void 0 === e ? void 0 : e.stickers) != null && (i = Object.keys(null == n ? void 0 : null === (t = n.stickerFrecency) || void 0 === t ? void 0 : t.stickers)), i }(); return (0, r.useStateFromStoresArray)([S.default], () => e.map(e => S.default.getStickerById(e)).filter(e => void 0 !== e), [e]) } let P = e => { let t = M(), { packs: n, frequentlyUsedStickers: s } = (0, r.useStateFromStoresObject)([S.default, f.default], () => ({ packs: S.default.getPremiumPacks(), frequentlyUsedStickers: f.default.stickerFrecencyWithoutFetchingLatest.frequently }), []), a = (0, r.useStateFromStores)([_.default], () => _.default.getCurrentUser()), o = L(e); return i.useMemo(() => { var i; let r = n.map(A.createStickerPackCategory), l = { type: h.StickerCategoryTypes.FAVORITE, id: h.StickerCategoryTypes.FAVORITE, name: N.default.Messages.CATEGORY_FAVORITE, stickers: t }; return [l, { type: h.StickerCategoryTypes.RECENT, id: h.StickerCategoryTypes.RECENT, name: N.default.Messages.STICKER_CATEGORY_RECENT, stickers: null !== (i = null == s ? void 0 : s.filter(t => { if ((0, A.isGuildSticker)(t)) { var i, r; return null !== (r = null === (i = S.default.getStickersByGuildId(t.guild_id)) || void 0 === i ? void 0 : i.some(e => e.id === t.id)) && void 0 !== r && r && (0, I.getStickerSendability)(t, a, e) !== I.StickerSendability.NONSENDABLE } if ((0, A.isStandardSticker)(t)) return n.some(e => e.id === t.pack_id) })) && void 0 !== i ? i : [] }, ...o, ...r] }, [n, t, s, o, a, e]) }, U = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = (0, r.useStateFromStores)([S.default], () => S.default.getStickerById(e.id)), [s, a] = i.useState(!0), [o, l] = i.useState(!1), u = (0, A.isGuildSticker)(e) || (0, A.isStandardSticker)(e); return (i.useEffect(() => { (async () => { if (t && !u && null == n && s && !o) { a(!1); try { await (0, T.fetchSticker)(e.id) } catch {} l(!0) } })() }, [t]), u) ? [e, o] : [null != n ? n : null, o] }, b = e => { let t = P(e); return i.useMemo(() => t.filter(e => e.type === h.StickerCategoryTypes.EMPTY_GUILD_UPSELL || e.stickers.length > 0, []), [t]) } }, 822179: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("704907"), u = n("581883"), d = n("70956"), _ = n("926491"), c = n("526761"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = { pendingUsages: [] }; d.default.Millis.DAY; let T = new l.default({ computeBonus: () => 100, computeWeight: e => { let t = 0; return e <= 3 ? t = 100 : e <= 15 ? t = 70 : e <= 30 ? t = 50 : e <= 45 ? t = 30 : e <= 80 && (t = 10), t }, lookupKey: e => _.default.getStickerById(e), afterCompute: () => {}, numFrequentlyItems: 20 }), f = () => { _.default.isLoaded && T.compute() }, S = () => { f() }; function h() { var e; let t = null === (e = u.default.frecencyWithoutFetchingLatest.stickerFrecency) || void 0 === e ? void 0 : e.stickers; if (null == t) return !1; T.overwriteHistory(s().mapValues(t, e => ({ ...e, recentUses: e.recentUses.map(Number).filter(e => e > 0) })), I.pendingUsages) } class A extends(i = a.default.PersistedStore) { initialize(e) { this.waitFor(_.default), null != e && (I = e), this.syncWith([_.default], S), this.syncWith([u.default], h) } getState() { return I } hasPendingUsage() { return I.pendingUsages.length > 0 } get stickerFrecencyWithoutFetchingLatest() { return T } } E(A, "displayName", "StickersPersistedStore"), E(A, "persistKey", "StickersPersistedStoreV2"), t.default = new A(o.default, { STICKER_TRACK_USAGE: e => { let { stickerIds: t } = e; null == t || t.forEach(e => { T.track(e), I.pendingUsages.push({ key: e, timestamp: Date.now() }) }), f() }, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: { type: t }, wasSaved: n } = e; if (t !== c.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS || !n) return !1; I.pendingUsages = [] } }) }, 138421: function(e, t, n) { "use strict"; n.r(t), n.d(t, { searchAllStickers: function() { return r } }); var i = n("483360"); n("285651"); let r = e => i.default.queryStickers([e], !0).map(e => { let { sticker: t } = e; return t }) }, 926491: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("956067"), l = n("442837"), u = n("570140"), d = n("287328"), _ = n("86670"), c = n("856472"), E = n("633302"), I = n("41776"), T = n("93093"), f = n("430824"), S = n("70956"), h = n("373228"), A = n("378233"); let m = 2, N = new Map, p = new Map, O = null, C = [], R = null, g = !1, L = new Map, v = (e, t) => { L = new Map(L.set(e, t)) }, D = S.default.Millis.HOUR, M = async () => { if (0 !== m) return; let e = d.default.database(); if (null == e) return; m = 2; let t = await (0, _.tryLoadOrResetCacheGatewayAsync)("StickerStore.loadSavedGuildStickers", () => o.default.timeAsync("\uD83D\uDCBE", "loadSavedGuildStickers", () => c.default.getAsync(e))); null != t && u.default.dispatch({ type: "CACHED_STICKERS_LOADED", stickers: t }) }, y = function(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null; p.set(e.id, e), t && P(e, n) }, P = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; if (null == O) return; let { tags: n } = e, i = { type: h.StickerMetadataTypes.STICKER_NAME, value: e.name.trim().toLocaleLowerCase() }; if ((0, A.isStandardSticker)(e)) { let t = C.find(t => t.id === e.pack_id), r = [i, ...(null != n ? n : "").split(",").map(e => ({ type: h.StickerMetadataTypes.TAG, value: e.trim().toLocaleLowerCase() }))]; null != t && r.push({ type: h.StickerMetadataTypes.PACK_NAME, value: t.name }), O.set(e.id, r) } else if ((0, A.isGuildSticker)(e) && null != n) { let r = E.default.getByName(n), s = [i, { type: h.StickerMetadataTypes.TAG, value: n.trim().toLocaleLowerCase() }]; if (null != t) { let e = t.name.trim().toLocaleLowerCase(); null != e && "" !== e && s.push({ type: h.StickerMetadataTypes.GUILD_NAME, value: e }) } if (null == r) { O.set(e.id, s); return } s.push({ type: h.StickerMetadataTypes.CORRELATED_EMOJI, value: r.surrogates }), r.forEachDiversity(e => s.push({ type: h.StickerMetadataTypes.CORRELATED_EMOJI, value: e.surrogates })), O.set(e.id, s) } }, U = (e, t, n) => { N.set(e.id, e); let i = [...C]; if (t) { let t = i.findIndex(t => t.id === e.id); - 1 !== t ? i[t] = e : i.push(e), C = i }(t || n) && e.stickers.forEach(e => y(e)) }, b = () => { L.forEach((e, t) => { let n = f.default.getGuild(t); null != n && e.forEach(e => P(e, n)) }), C.forEach(e => { e.stickers.forEach(e => P(e)) }) }; function G(e) { let t = f.default.getGuild(e.id); null != t && null != e.stickers && (e.stickers.forEach(e => y(e, !0, t)), v(t.id, e.stickers)) } class w extends(i = l.default.Store) { initialize() { this.waitFor(d.default, T.default, f.default) } get isLoaded() { return 0 !== m } get loadState() { return m } get stickerMetadata() { return M(), null == O && (O = new Map, b()), O } get hasLoadedStickerPacks() { return null != R && R + D > Date.now() } get isFetchingStickerPacks() { return g } getStickerById(e) { return !p.has(e) && M(), p.get(e) } getStickerPack(e) { return N.get(e) } getPremiumPacks() { return C } isPremiumPack(e) { return C.some(t => t.id === e) } getRawStickersByGuild() { return L } getAllStickersIterator() { return M(), p.values() } getAllGuildStickers() { return M(), L } getStickersByGuildId(e) { return M(), L.get(e) } } a = "StickersStore", (s = "displayName") in(r = w) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new w(u.default, { BACKGROUND_SYNC: () => { O = null, p = new Map, L = new Map, m = 0 }, CONNECTION_OPEN: e => { let { guilds: t } = e; O = null, p = new Map, L = new Map, t.forEach(G), m = t.every(e => null != e.stickers) ? 1 : 0 }, GUILD_CREATE: function(e) { let { guild: t } = e; !I.default.isLurking(t.id) && (G(t), 1 === m && null == t.stickers && null != t.stickerUpdates && (m = 0)) }, GUILD_DELETE: function(e) { var t; let { guild: n } = e; (null !== (t = L.get(n.id)) && void 0 !== t ? t : []).forEach(e => { null != O && O.delete(e.id), p.delete(e.id) }), L.delete(n.id), L = new Map(L) }, LOGOUT: () => { m = 0, C = [], p.clear(), N.clear(), O = null, L.clear(), L = new Map(L), g = !1, R = null }, STICKER_PACKS_FETCH_START: () => { g = !0 }, STICKER_PACKS_FETCH_SUCCESS: e => { let { packs: t } = e; t.forEach(e => U(e, !0)), R = Date.now(), g = !1 }, STICKER_PACK_FETCH_SUCCESS: e => { let { pack: t, ingestStickers: n } = e; U(t, !1, n) }, GUILD_STICKERS_FETCH_SUCCESS: e => { let { guildId: t, stickers: n } = e; n.forEach(e => y(e)), v(t, n) }, GUILD_STICKERS_CREATE_SUCCESS: e => { var t, n; let { guildId: i, sticker: r } = e, s = null !== (t = L.get(i)) && void 0 !== t ? t : []; v(i, [...null !== (n = s.filter(e => e.id !== r.id)) && void 0 !== n ? n : [], r]), y(r) }, STICKER_FETCH_SUCCESS: e => { let { sticker: t } = e; y(t, !1) }, GUILD_STICKERS_UPDATE: e => { var t; let { guildId: n, stickers: i } = e, r = e => { let t; let n = p.get(e.id); return null != n && (0, A.isGuildSticker)(n) && (t = null != n.user ? n.user : void 0), { ...e, user: t } }; (null !== (t = L.get(n)) && void 0 !== t ? t : []).filter(e => null == i.find(t => t.id === e.id)).forEach(e => { p.delete(e.id), null != O && O.delete(e.id) }); let s = i.map(e => r(e)); s.forEach(e => y(e)), v(n, s) }, CACHED_STICKERS_LOADED: function(e) { let { stickers: t } = e; for (let [e, n] of t) if (T.default.isMember(e) && !L.has(e)) { let t = f.default.getGuild(e); for (let e of n) y(e, !0, t); v(e, n) } } }) }, 373228: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d, _, c, E, I, T, f; n.r(t), n.d(t, { MetaStickerType: function() { return r }, StickerCategoryTypes: function() { return o }, StickerExtensions: function() { return s }, StickerFormat: function() { return i }, StickerGridItemTypes: function() { return a }, StickerMetadataTypes: function() { return l }, StickerSelectLocation: function() { return u }, isAnimatedSticker: function() { return S }, isCustomSticker: function() { return h } }), (d = i || (i = {}))[d.PNG = 1] = "PNG", d[d.APNG = 2] = "APNG", d[d.LOTTIE = 3] = "LOTTIE", d[d.GIF = 4] = "GIF", (_ = r || (r = {}))[_.STANDARD = 1] = "STANDARD", _[_.GUILD = 2] = "GUILD", (c = s || (s = {})).PNG = "png", c.APNG = "png", c.LOTTIE = "json", c.WEBP = "webp", c.GIF = "gif"; let S = e => 1 !== e, h = e => 1 !== e; (E = a || (a = {}))[E.STICKER = 0] = "STICKER", E[E.CREATE_STICKER = 1] = "CREATE_STICKER", (I = o || (o = {})).PACK = "PACK", I.FAVORITE = "FAVORITE", I.RECENT = "RECENT", I.SEARCH_RESULTS = "SEARCH_RESULTS", I.SEARCH_SUGGESTIONS = "SEARCH_SUGGESTIONS", I.GUILD = "GUILD", I.EMPTY_GUILD_UPSELL = "EMPTY_GUILD_UPSELL", I.CREATE_STICKER = "CREATE_STICKER", (T = l || (l = {}))[T.STICKER_NAME = 0] = "STICKER_NAME", T[T.TAG = 1] = "TAG", T[T.CORRELATED_EMOJI = 2] = "CORRELATED_EMOJI", T[T.GUILD_NAME = 3] = "GUILD_NAME", T[T.PACK_NAME = 4] = "PACK_NAME", (f = u || (u = {}))[f.STICKER_PICKER = 0] = "STICKER_PICKER", f[f.EXPRESSION_SUGGESTIONS = 1] = "EXPRESSION_SUGGESTIONS", f[f.AUTOCOMPLETE = 2] = "AUTOCOMPLETE" }, 378233: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createStickerPackCategory: function() { return M }, getFilenameForSticker: function() { return R }, getMessageStickers: function() { return G }, getStickerAssetUrl: function() { return g }, getStickerFormatTypeFromFileType: function() { return C }, getStickerPackBannerAssetUrl: function() { return L }, getStickerPackPreviewSticker: function() { return p }, isAvailableGuildSticker: function() { return w }, isGuildSticker: function() { return U }, isStandardSticker: function() { return b }, isStickerAssetUrl: function() { return v }, isStickerPackAnimated: function() { return D }, shouldAnimateSticker: function() { return y }, shouldAttachSticker: function() { return P } }), n("411104"); var i = n("606301"), r = n("134432"), s = n("430824"), a = n("117530"), o = n("768581"), l = n("358085"), u = n("913663"), d = n("373228"), _ = n("611480"), c = n("981631"); let { API_ENDPOINT: E, MEDIA_PROXY_ENDPOINT: I, PROJECT_ENV: T, ASSET_ENDPOINT: f, CDN_HOST: S } = window.GLOBAL_ENV, h = Object.values(d.StickerExtensions), A = decodeURIComponent(c.Endpoints.STICKER_ASSET("[\\d]+", "(".concat(h.join("|"), ")"))), m = RegExp("(".concat(location.protocol).concat(f, "|").concat(location.protocol).concat(I, ")(").concat(A, ")"), "ig"), N = RegExp("".concat(location.protocol).concat(E, "(").concat(A, ")"), "ig"), p = e => { if (null != e.cover_sticker_id) { let t = e.stickers.find(t => t.id === e.cover_sticker_id); if (null != t) return t } return e.stickers[0] }, O = e => { switch (e) { case d.StickerFormat.PNG: return o.SUPPORTS_WEBP ? d.StickerExtensions.WEBP : d.StickerExtensions.PNG; case d.StickerFormat.APNG: return d.StickerExtensions.APNG; case d.StickerFormat.LOTTIE: return d.StickerExtensions.LOTTIE; case d.StickerFormat.GIF: return d.StickerExtensions.GIF; default: throw Error("Unexpected format type: ".concat(e)) } }, C = e => { switch (e) { case "application/json": return d.StickerFormat.LOTTIE; case "image/apng": return d.StickerFormat.APNG; case "image/png": case "image/webp": return d.StickerFormat.PNG; case "image/gif": return d.StickerFormat.GIF; default: throw Error("Unexpected file type: ".concat(e)) } }, R = e => null == e ? null : "".concat(e.name, ".").concat(O(e.format_type)), g = function(e) { let { isPreview: t = !1, size: n = _.DEFAULT_STICKER_DIMENSIONS } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; if (null == e.format_type) return null; let i = e.format_type; e.format_type === d.StickerFormat.GIF && t && (i = d.StickerFormat.PNG); let s = c.Endpoints.STICKER_ASSET(e.id, O(i)); if ("development" !== T) { if (e.format_type === d.StickerFormat.LOTTIE) return "".concat(location.protocol).concat(f).concat(s); let i = e.format_type === d.StickerFormat.APNG && t && !(0, l.isAndroid)() ? "&passthrough=false" : "", a = Math.min(2, (0, r.getDevicePixelRatio)()); return "".concat(location.protocol).concat(I).concat(s, "?size=").concat((0, r.getBestMediaProxySize)(n * a)).concat(i) } return "".concat(location.protocol).concat(E).concat(s) }, L = (e, t) => { let n; let i = e.banner_asset_id; if (null == i) return null; let s = o.SUPPORTS_WEBP ? "webp" : "png"; return n = null != S ? "".concat(location.protocol, "//").concat(S, "/app-assets/").concat(_.STICKER_APPLICATION_ID, "/store/").concat(i, ".").concat(s) : "".concat(location.protocol).concat(E).concat(c.Endpoints.STORE_ASSET(_.STICKER_APPLICATION_ID, i, s)), null != t && (n += "?size=".concat((0, r.getBestMediaProxySize)(t))), n }, v = e => e.match("development" !== T ? m : N), D = e => e.stickers.some(e => { let { format_type: t } = e; return t === d.StickerFormat.APNG || t === d.StickerFormat.LOTTIE || t === d.StickerFormat.GIF }), M = e => ({ type: d.StickerCategoryTypes.PACK, id: e.id, name: e.name, stickers: e.stickers, previewSticker: p(e) }), y = (e, t) => e === _.StickerAnimationSettings.ANIMATE_ON_INTERACTION ? t : e !== _.StickerAnimationSettings.NEVER_ANIMATE, P = (e, t, n, r) => { if (a.default.getUploadCount(n, r) > 0) return !0; let s = u.default.getStickerPreview(n, r); if (null != s && s.length > 0) return !0; switch (e) { case d.StickerSelectLocation.STICKER_PICKER: return "" !== t.trim(); case d.StickerSelectLocation.AUTOCOMPLETE: case d.StickerSelectLocation.EXPRESSION_SUGGESTIONS: return (0, i.getQueriesFromUserInput)(t).length > 1; default: return !1 } }, U = e => e.type === d.MetaStickerType.GUILD, b = e => e.type === d.MetaStickerType.STANDARD, G = e => e.stickerItems.length > 0 ? e.stickerItems : e.stickers.length > 0 ? e.stickers : [], w = e => { if (null === e) return !1; let t = e.guild_id; return void 0 !== s.default.getGuild(t) } }, 419922: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getStickerAltText: function() { return L } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("512722"), l = n.n(o), u = n("920906"), d = n("442837"), _ = n("622535"), c = n("481060"), E = n("607070"), I = n("134432"), T = n("641749"), f = n("153850"), S = n("506071"), h = n("453070"), A = n("373228"), m = n("378233"), N = n("689938"), p = n("680413"); let O = e => e.preventDefault(), C = { tension: 1100, friction: 40 }, R = { tension: 1600, friction: 60 }; function g(e, t) { return r.cloneElement(e, { "data-type": "sticker", "data-id": t }) } function L(e) { let t = "description" in e && null != e.description ? "".concat(e.name, ", ").concat(e.description) : e.name; return N.default.Messages.STICKER_A11Y_LABEL.format({ stickerName: t }) } let v = e => { let { children: t, hasError: n, isLoading: r, maskAsset: s, size: o, withLoadingIndicator: l = !0 } = e, u = o >= 33; return (0, i.jsxs)("div", { className: a()(p.assetWrapper, { [p.assetWrapperMasked]: n || s }), style: { height: o, width: o }, children: [n ? (0, i.jsxs)("div", { className: p.error, children: [(0, i.jsx)(T.default, { className: p.errorIcon }), u && (0, i.jsx)(c.Text, { className: p.errorText, color: "header-secondary", variant: "text-sm/normal", children: N.default.Messages.STICKER_ASSET_LOAD_ERROR })] }) : t, l && r && (0, i.jsx)("div", { className: p.loadingIndicator })] }) }, D = e => { let { shouldAnimate: t, size: s, sticker: a, fileUri: o, assetData: u, isFocused: d, className: _, maskAsset: c, positionRef: E, withLoadingIndicator: T, onError: f } = e, S = r.useRef(null), h = r.useRef(null), [A, O] = r.useState(!0), [C, R] = r.useState(!1), D = r.useRef(!1); D.current = t && d; let M = null == o ? (0, m.getStickerAssetUrl)(a) : o; return (l()(null != M, "Unable to determine sticker asset URL. Sticker ID: ".concat(a.id)), r.useEffect(() => { if (null == S.current || null == M) return; let e = Math.min(2, (0, I.getDevicePixelRatio)()); S.current.width = s * e, S.current.height = s * e; let t = !1; return (async () => { let { default: e } = await n.e("21617").then(n.bind(n, "186952")); null != S.current && (h.current = new e({ canvas: S.current, animationId: a.id, assetUrl: M, assetData: u, onInitialDraw: () => { !t && O(!1) }, onError: () => { !t && (O(!1), R(!0), null == f || f()) } }), D.current && h.current.setState(!0)) })(), () => { var e; null === (e = h.current) || void 0 === e || e.drop(), h.current = null, t = !0 } }, [M, s, a.id, u, f]), r.useEffect(() => { var e; let n; !t && (n = 0), null === (e = h.current) || void 0 === e || e.setState(t && d, n) }, [a, t, d]), null == M) ? null : (0, i.jsx)("div", { role: "img", className: _, "aria-label": C ? N.default.Messages.ERROR_LOADING_STICKER : L(a), ref: E, children: (0, i.jsx)(v, { hasError: C, isLoading: A, maskAsset: c, size: s, withLoadingIndicator: T, children: g((0, i.jsx)("canvas", { className: p.lottieCanvas, ref: S }), a.id) }) }) }, M = e => { let { shouldAnimate: t, sticker: n, isFocused: s, size: o, className: l, maskAsset: u, positionRef: d, withLoadingIndicator: c, fileUri: E } = e, [I, T] = r.useState(!1), [f, S] = r.useState(!0), [h, A] = r.useState(!1), N = r.useRef(null), C = r.useRef(null), R = null != E ? E : (0, m.getStickerAssetUrl)(n, { isPreview: !t || !I || !s, size: o }), D = r.useCallback(() => { S(!1) }, []), M = r.useCallback(() => { A(!0) }, []); return (r.useEffect(() => { if (null != N.current) { let { isVisible: e } = N.current; T(e) } }, []), r.useLayoutEffect(() => { var e; (null === (e = C.current) || void 0 === e ? void 0 : e.complete) === !0 && S(!1) }, []), null == R) ? null : (0, i.jsx)(_.VisibilitySensor, { ref: N, onChange: T, threshold: .7, children: (0, i.jsx)("div", { className: a()(l, p.__invalid_pngImageWrapper), ref: d, children: (0, i.jsx)(v, { hasError: h, isLoading: f, maskAsset: u, size: o, withLoadingIndicator: c, children: g((0, i.jsx)("img", { className: p.pngImage, alt: L(n), src: R, draggable: !1, onError: M, onLoad: D, onContextMenu: O, ref: C }), n.id) }) }) }) }, y = e => { let { disableAnimation: t, enlargeScaleFactor: n, enlargeWithName: s, isInteracting: a, positionRef: o, size: l, sticker: _ } = e, I = (0, d.useStateFromStores)([E.default], () => E.default.useReducedMotion), T = r.useRef(null), S = { transform: "scale(".concat(I ? 1 : 1 / n, ")"), opacity: 0 }, h = (0, u.useTransition)(a, { ref: T, from: S, enter: { transform: "scale(1)", opacity: 1 }, leave: S, config: C }), A = r.useRef(null), m = (0, u.useSpring)({ ref: A, transform: a || I ? "translateY(0)" : "translateY(-25px)", opacity: a ? 1 : 0, config: R }); return (0, u.useChain)(a ? [T, A] : [A, T], a ? [0, .0625] : [0, 0]), h((e, r) => r && (0, i.jsx)(f.AppReferencePositionLayer, { className: p.positionedLayer, fixed: !0, align: "center", position: "center", targetRef: o, children: () => (0, i.jsxs)("div", { className: p.overlayWrapper, children: [(0, i.jsx)(u.animated.div, { className: p.overlayStickerWrapper, style: e, children: (0, i.jsx)(P, { className: p.__invalid_overlaySticker, disableAnimation: t, enlargeOnInteraction: !1, isInteracting: a, maskAsset: !1, sticker: _, size: Math.round(l * n), withLoadingIndicator: !1 }) }), s && (0, i.jsx)(u.animated.div, { className: p.overlayLabelWrapper, style: m, children: (0, i.jsx)(c.Text, { variant: "text-sm/medium", className: p.overlayLabel, children: _.name }) })] }) })) }, P = e => { let { isInteracting: t = !1, disableAnimation: n = !1, enlargeOnInteraction: s = !1, enlargeWithName: a = !0, enlargeScaleFactor: o = 1.55, maskAsset: l = !1, size: u, sticker: d, className: _, withLoadingIndicator: c, assetData: E, fileUri: I, onError: T } = e, f = (0, S.useIsWindowFocused)(), m = (0, h.useShouldAnimateSticker)(t) && !n, N = r.useRef(null); if (null == d) return null; let p = d.format_type === A.StickerFormat.LOTTIE ? D : M; return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)(p, { shouldAnimate: m, isFocused: f, size: u, sticker: d, className: _, maskAsset: l, positionRef: N, withLoadingIndicator: c, assetData: E, fileUri: I, onError: T }), s && (0, i.jsx)(y, { disableAnimation: n, enlargeScaleFactor: o, enlargeWithName: a, isInteracting: t, positionRef: N, size: u, sticker: d })] }, "".concat(d.id, ",").concat(u)) }; t.default = P }, 462109: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useKeyboardNavigation: function() { return l } }); var i = n("470079"), r = n("739940"), s = n("2052"), a = n("691251"), o = n("98528"); let l = e => { let { columnCounts: t, stickersGrid: n, stickersListRef: l, store: u, gridNavigatorId: d, setInspectedStickerPosition: _, onGridItemSelect: c } = e, E = (0, s.useAnalyticsContext)(), I = i.useCallback(e => { c(e, E) }, [c, E]), T = i.useCallback((e, t) => { _(e, t, a.InspectedExpressionChangeSource.GRID_NAVIGATOR_EVENT) }, [_]), { gridDispatch: f, getItemProps: S, getRowProps: h, gridContainerProps: A, handleGridContainerKeyDown: m, isUsingKeyboardNavigation: N } = (0, o.useExpressionPickerGridKeyboardNavigation)({ columnCounts: t, gridNavigatorId: d, itemGrid: n, itemList: l, onGridNavigatorItemSelect: I, onGridNavigatorPositionChange: T }); return i.useEffect(() => u.useStore.subscribe(e => { if (null == e) return; let { columnIndex: t, rowIndex: n, source: i } = e; i !== a.InspectedExpressionChangeSource.GRID_NAVIGATOR_EVENT && f({ type: r.GridActionType.SET_FOCUSED_POSITION, x: t, y: n }) }, e => e.inspectedExpressionPosition), [f, u]), { getItemProps: S, getRowProps: h, gridContainerProps: A, handleGridContainerKeyDown: m, isUsingKeyboardNavigation: N } } }, 490095: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("630641"), s = n("383015"); t.default = e => { let { size: t } = e; return (0, i.jsx)("div", { className: s.unownedStickerLockContainer, style: { width: t, height: t }, children: (0, i.jsx)(r.default, { width: 12, height: 12, className: s.unownedStickerLockIcon }) }) } }, 457040: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("954955"), a = n.n(s), o = n("143927"), l = n("442837"), u = n("477690"), d = n("481060"), _ = n("2052"), c = n("100527"), E = n("906732"), I = n("806966"), T = n("28546"), f = n("98528"), S = n("98278"), h = n("639119"), A = n("695346"), m = n("594174"), N = n("626135"), p = n("624138"), O = n("191177"), C = n("285651"), R = n("217590"), g = n("453070"), L = n("926491"), v = n("373228"), D = n("462109"), M = n("422195"), y = n("657795"), P = n("489762"), U = n("31543"), b = n("814042"), G = n("15350"), w = n("611480"), k = n("981631"), B = n("802011"); let V = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKER_PICKER_BREAKPOINT_SMALL), x = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_LEFT), F = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_RIGHT), H = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_MARGIN), Y = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_MARGIN_SMALL), j = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_DIMENSIONS), W = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_DIMENSIONS_SMALL), K = (0, p.cssValueToNumber)(u.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_PADDING), z = j + 2 * K, Z = W + 2 * K, X = a()(R.trackStickerSearchEmpty, 200), Q = a()(R.trackStickerSearchResultsViewed, 200), q = r.forwardRef(function(e, t) { var s; let { containerWidth: a, channel: u, onSelectSticker: p, closePopout: j } = e, { location: W } = (0, _.useAnalyticsContext)(), { analyticsLocations: K } = (0, E.default)(c.default.STICKER_PICKER), q = (null === (s = (0, h.usePremiumTrialOffer)()) || void 0 === s ? void 0 : s.subscription_trial) != null, J = r.useRef(null), $ = r.useRef(null), ee = r.useRef(null), et = (0, O.useStickerPickerUpsellStore)(e => e.showPremiumUpsell), [en, ei] = (0, T.useExpressionPickerStore)(e => [e.searchQuery, e.isSearchSuggestion], o.default), er = r.useRef(""); r.useImperativeHandle(t, () => ({ onPickerOpen: ey })); let es = (0, g.useFilteredStickerPackCategories)(u), ea = 0 === es.filter(e => e.type !== v.StickerCategoryTypes.EMPTY_GUILD_UPSELL).length, eo = (0, f.useExpressionPickerGridWidth)({ gridWrapperRef: J, containerWidth: a, showingEmptyState: ea, listPaddingLeft: x, listScrollbarWidth: 8 }), el = A.StickerPickerCollapsedSections.useSetting(), eu = r.useMemo(() => new Set(el), [el]), ed = (0, l.useStateFromStores)([m.default], () => m.default.getCurrentUser()), e_ = r.useMemo(() => (0, G.getFilteredStickers)(en, ed, u), [en, ed, u]), ec = (0, g.useFavoriteStickers)(), eE = (0, g.useLatestFrecentStickers)(), eI = (0, l.useStateFromStoresObject)([L.default], () => L.default.getAllGuildStickers()), { sendable: eT = [], sendableWithPremium: ef = [] } = null != e_ ? e_ : {}, eS = eT.length + ef.length, eh = r.useCallback(e => { "" === en ? (0, R.trackStickerSelect)(e) : (0, R.trackStickerSearchSelect)(e, en, eS), p(e.sticker, v.StickerSelectLocation.STICKER_PICKER) }, [p, en, eS]), eA = null != eo && eo > V, { rowCount: em, rowCountBySection: eN, stickersGrid: ep, gutterWidth: eO, columnCounts: eC } = (0, g.useStickersGrid)({ filteredStickers: e_, stickersCategories: es, collapsedStickersCategories: eu, listWidth: eo, listPaddingRight: F, stickerNodeMargin: eA ? H : Y, stickerNodeWidth: eA ? z : Z }), eR = r.useCallback((e, t) => { let { location: r } = t; switch (e.type) { case v.StickerGridItemTypes.CREATE_STICKER: N.default.track(k.AnalyticEvents.OPEN_MODAL, { type: k.AnalyticsSections.CREATE_STICKER_MODAL, location: W }), (0, d.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("93626"), n.e("84482")]).then(n.bind(n, "136735")); return n => (0, i.jsx)(t, { guildId: e.guild_id, ...n }) }); break; case v.StickerGridItemTypes.STICKER: null != e.sticker && (0, C.isSendableSticker)(e.sticker, ed, u) && eh(e) } }, [W, ed, u, eh]), { getItemProps: eg, getRowProps: eL, gridContainerProps: ev, handleGridContainerKeyDown: eD, isUsingKeyboardNavigation: eM } = (0, D.useKeyboardNavigation)({ columnCounts: eC, stickersListRef: $, stickersGrid: ep, onGridItemSelect: eR, store: I.StickerPickerStore, setInspectedStickerPosition: I.StickerPickerStore.setInspectedExpressionPosition, gridNavigatorId: w.GRID_NAVIGATOR_ID }); r.useEffect(() => I.StickerPickerStore.resetStoreState, []); let ey = () => { let e = u.getGuildId(), t = []; if (null !== e) { var n; t = null !== (n = L.default.getStickersByGuildId(e)) && void 0 !== n ? n : [] } let i = 0; null != eI && [...eI.values()].forEach(e => { i += e.length }), (0, R.trackStickerPickerOpen)({ containerWidth: a, favoriteStickers: ec, frequentlyUsedStickers: eE, guildStickers: t, stickersTotal: i }) }; r.useEffect(() => { "" === er.current && "" !== en && (0, R.trackStickerSearchStart)(), er.current = en }, [en]), r.useEffect(() => { 0 === eS ? X(en) : Q(en, eS, ei) }, [en, eS, ei]), r.useLayoutEffect(() => { var e; null === (e = ee.current) || void 0 === e || e.focus() }, []); let eP = r.useCallback(() => { j(), N.default.track(k.AnalyticEvents.PREMIUM_PROMOTION_OPENED, { location_section: k.AnalyticsSections.STICKER_PICKER_UPSELL }), (0, S.navigateToPremiumMarketingPage)() }, [j]); return (0, i.jsxs)(E.AnalyticsLocationProvider, { value: K, children: [!(q && ea) && (0, i.jsx)("div", { className: B.header, children: (0, i.jsx)(U.default, { ref: ee, onKeyDown: eD, stickersListRef: $, channel: u }) }), ea ? (0, i.jsx)(y.default, { className: B.emptyState, onClose: j }) : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { ref: J, className: B.listWrapper, id: w.GRID_NAVIGATOR_ID, ...ev, children: null != eo ? (0, i.jsx)(P.default, { ref: $, collapsedStickersCategories: eu, filteredStickers: e_, getStickerItemProps: eg, getStickerRowProps: eL, gridWidth: eo, gutterWidth: eO, isUsingKeyboardNavigation: eM, onSelectSticker: eh, rowCount: em, rowCountBySection: eN, stickersCategories: es, stickersGrid: ep, channel: u }) : null }), (0, i.jsx)(M.default, { stickersListRef: $, channel: u })] }), et && (0, i.jsx)(b.StickersPremiumUpsell, { onLearnMore: eP })] }) }); t.default = r.forwardRef((e, t) => ((0, g.useFetchStickerPacks)(), (0, i.jsx)("div", { className: B.wrapper, id: w.STICKER_PICKER_TAB_PANEL_ID, "aria-labelledby": w.STICKER_PICKER_TAB_ID, role: "tabpanel", children: e.isLoading ? (0, i.jsx)(d.Spinner, { className: B.loadingIndicator }) : (0, i.jsx)(q, { ...e, ref: t }) }))) }, 422195: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("477690"), l = n("481060"), u = n("2052"), d = n("880949"), _ = n("806966"), c = n("28546"), E = n("254494"), I = n("430824"), T = n("497309"), f = n("898140"), S = n("68736"), h = n("626135"), A = n("624138"), m = n("453070"), N = n("926491"), p = n("373228"), O = n("378233"), C = n("419922"), R = n("981631"), g = n("957825"), L = n("689938"), v = n("499035"); let D = (0, A.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_CATEGORY_LIST_PADDING), M = (0, A.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_CATEGORY_ICON_SIZE), y = (0, A.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_CATEGORY_ICON_MARGIN), P = (0, A.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_CATEGORY_UNICODE_ICON_SIZE), U = (0, A.cssValueToNumber)(o.default.STICKERS_CONSTANTS_CATEGORY_SEPARATOR_SIZE), b = (0, A.cssValueToNumber)(o.default.STICKERS_CONSTANTS_CATEGORY_SEPARATOR_MARGIN_VERTICAL), G = [D, D, D, D], w = (M + y) * 2 + D, k = U + 2 * b, B = e => { let { activeIndex: t, stickerPickerCategories: n, categoryListRef: s, firstStandardStickerCategoryOffsetTop: o, setShouldRenderShortcut: _ } = e, E = (0, u.useAnalyticsContext)(), S = (0, c.useExpressionPickerStore)(e => "" !== e.searchQuery), A = r.useCallback((e, s, o) => { var u, _; let c; let A = (null === (u = n[0]) || void 0 === u ? void 0 : u.type) === p.StickerCategoryTypes.FAVORITE, m = A ? 1 : 0, D = (null === (_ = n[m]) || void 0 === _ ? void 0 : _.type) === p.StickerCategoryTypes.RECENT, y = n.length > 0, U = n.length; if (0 === s && A) return (0, i.jsx)("div", { role: "listitem", "aria-setsize": U, "aria-posinset": s, children: (0, i.jsx)(l.Clickable, { "aria-label": L.default.Messages.CATEGORY_FAVORITE, className: a()(v.stickerCategory, v.stickerCategoryGeneric, { [v.stickerCategoryGenericDisabled]: y && !A, [v.stickerCategoryGenericSelected]: !S && A && 0 === t }), onClick: o, children: (0, i.jsx)(f.default, { className: v.stickerCategoryGenericIcon, height: P, width: P }) }) }, "favorites"); if (s === m && D) return (0, i.jsx)("div", { role: "listitem", "aria-setsize": U, "aria-posinset": s, children: (0, i.jsx)(l.Clickable, { "aria-label": L.default.Messages.STICKER_PICKER_CATEGORIES_RECENT, className: a()(v.stickerCategory, v.stickerCategoryGeneric, { [v.stickerCategoryGenericDisabled]: y && !D, [v.stickerCategoryGenericSelected]: !S && D && t === m }), onClick: o, children: (0, i.jsx)(T.default, { className: v.stickerCategoryGenericIcon, height: P, width: P }) }) }, "recent"); let b = t === s, G = n[s], w = n[s + 1], k = null != w && G.type === p.StickerCategoryTypes.GUILD && w.type !== p.StickerCategoryTypes.GUILD, B = G.type === p.StickerCategoryTypes.PACK, V = "", x = null; if (G.type === p.StickerCategoryTypes.GUILD || G.type === p.StickerCategoryTypes.EMPTY_GUILD_UPSELL) { let e = I.default.getGuild(G.id); null != e && (c = e.id, V = e.name, x = (0, i.jsx)(d.default, { guild: e, isSelected: b })) } else if (B) { let e = N.default.getStickerPack(G.id); null != e && (V = e.name, x = (0, i.jsx)(C.default, { disableAnimation: !b || S, size: M, sticker: (0, O.getStickerPackPreviewSticker)(e) })) } return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)(l.Tooltip, { position: "right", text: V, tooltipContentClassName: v.__invalid_tooltip, children: e => (0, i.jsx)("div", { role: "listitem", "aria-setsize": U, "aria-posinset": s, children: (0, i.jsx)(l.Clickable, { ...e, "aria-label": V, className: a()(v.stickerCategory, { [v.firstPartyCategory]: B, [v.firstPartyCategorySelected]: !S && b && B }), onClick: () => { G.type === p.StickerCategoryTypes.PACK && h.default.track(R.AnalyticEvents.EXPRESSION_PICKER_CATEGORY_SELECTED, { location: null == E ? void 0 : E.location, tab: g.ExpressionPickerViewType.STICKER, sticker_pack_id: G.id, guild_id: c }), o() }, children: x }) }) }), k ? (0, i.jsx)("hr", { className: v.guildCategorySeparator }, "separator") : null] }, G.id) }, [t, E, S, n]), m = r.useCallback((e, t) => t ? w : 0, []), D = r.useCallback((e, t) => { let i = n[t], r = n[t + 1]; return M + (null != r && i.type === p.StickerCategoryTypes.GUILD && r.type !== p.StickerCategoryTypes.GUILD ? k : y) }, [n]); return { getScrollOffsetForIndex: m, renderCategoryListItem: A, rowHeight: D, onScroll: r.useCallback(e => { var t; let n = null === (t = s.current) || void 0 === t ? void 0 : t.getListDimensions(); if (null == n) return; let i = e + n.height; _(i - U < o) }, [o]) } }; t.default = e => { let { stickersListRef: t, channel: n } = e, s = r.useRef(null), [o, u] = r.useState(!0), d = _.StickerPickerStore.useStore(e => e.activeCategoryIndex), c = (0, m.useFilteredStickerPackCategories)(n), { firstStandardStickerCategoryIndex: I, firstStandardStickerCategoryOffsetTop: T, guildCategoryCount: f, hasFirstPartyStickerPacks: h } = r.useMemo(() => { var e, t; let n = c.filter(e => e.type === p.StickerCategoryTypes.GUILD).length, i = (null === (e = c[0]) || void 0 === e ? void 0 : e.type) === p.StickerCategoryTypes.RECENT, r = n + (i ? 1 : 0) + ((null === (t = c[0]) || void 0 === t ? void 0 : t.type) === p.StickerCategoryTypes.FAVORITE ? 1 : 0), s = r * (M + y) - y + k; return { firstStandardStickerCategoryIndex: r + 1, firstStandardStickerCategoryOffsetTop: s, guildCategoryCount: n, hasFirstPartyStickerPacks: null != c.find(e => e.type === p.StickerCategoryTypes.PACK) } }, [c]); r.useLayoutEffect(() => { u(f >= 7) }, [f]); let { renderCategoryListItem: A, rowHeight: N, onScroll: O } = B({ activeIndex: d, stickerPickerCategories: c, categoryListRef: s, firstStandardStickerCategoryOffsetTop: T, setShouldRenderShortcut: u }), C = r.useCallback(e => { var t; e(I), null === (t = s.current) || void 0 === t || t.scrollTo(T) }, [I, T]); return (0, i.jsx)(E.default, { className: v.categoryList, categoryListRef: s, expressionsListRef: t, store: _.StickerPickerStore, listPadding: G, onScroll: O, renderCategoryListItem: A, rowCount: c.length, categories: c, categoryHeight: N, children: e => h && o && (0, i.jsx)(l.Clickable, { className: a()(v.standardStickerShortcut, { [v.invisibleShortcut]: !o }), onClick: () => C(e), children: (0, i.jsx)(S.default, { height: 24, width: 24 }) }) }) } }, 1450: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("2052"), d = n("367907"), _ = n("906732"), c = n("28546"), E = n("26323"), I = n("434404"), T = n("889161"), f = n("430824"), S = n("973675"), h = n("68736"), A = n("267642"), m = n("981631"), N = n("30513"), p = n("689938"), O = n("743346"); t.default = e => { let { className: t, guildId: n, channel: s, shouldTrackUpsellViewed: C, setTrackedUpsellViewed: R } = e, { location: g } = (0, u.useAnalyticsContext)(), { analyticsLocations: L } = (0, _.default)(), v = (0, o.useStateFromStores)([f.default], () => f.default.getGuild(n)), { canManageAllExpressions: D } = (0, T.useManageResourcePermissions)(v), M = null != v && 0 === (0, A.getTotalStickerCountForTier)(v.premiumTier) && !v.hasFeature(m.GuildFeatures.MORE_STICKERS); return (r.useEffect(() => { D && M && C && ((0, d.trackWithMetadata)(m.AnalyticEvents.PREMIUM_GUILD_UPSELL_VIEWED, { location: g, guild_id: null == v ? void 0 : v.id, channel_id: null == s ? void 0 : s.id, type: "Expression Picker Inline Sticker Upsell", location_stack: L }), R(!0)) }, [M, v, s, g, C, R, L, D]), null != v && D) ? M ? (0, i.jsxs)("div", { className: a()(O.upsell, t), children: [(0, i.jsx)(S.default, { className: O.icon, width: 24, height: 24 }), (0, i.jsx)(l.Text, { color: "interactive-normal", className: O.body, variant: "text-sm/normal", children: p.default.Messages.STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_PREMIUM_SUBSCRIPTIONS_DESCRIPTION.format({ count: (0, A.getTotalStickerCountForTier)(m.BoostedGuildTiers.TIER_1) }) }), (0, i.jsx)(l.Button, { look: l.Button.Looks.LINK, color: l.Button.Colors.LINK, onClick: () => { (0, E.default)({ analyticsLocations: L, analyticsSourceLocation: g, guild: v, perks: (0, N.guildBoostingPerks)() }) }, children: p.default.Messages.STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_PREMIUM_SUBSCRIPTIONS_CTA })] }) : (0, i.jsxs)("div", { className: a()(O.upsell, t), children: [(0, i.jsx)(h.default, { className: O.icon, width: 20, height: 20 }), (0, i.jsx)(l.Text, { color: "interactive-normal", className: O.body, variant: "text-sm/normal", children: p.default.Messages.STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_STICKERS_DESCRIPTION }), (0, i.jsx)(l.Button, { look: l.Button.Looks.LINK, color: l.Button.Colors.LINK, onClick: () => { (0, c.closeExpressionPicker)(), I.default.open(n, m.GuildSettingsSections.STICKERS, g) }, children: p.default.Messages.STICKER_PICKER_EMPTY_GUILD_UPSELL_NO_STICKERS_CTA })] }) : null } }, 657795: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return C } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("100527"), d = n("906732"), _ = n("104494"), c = n("639119"), E = n("165583"), I = n("626135"), T = n("453070"), f = n("926491"), S = n("419922"), h = n("27733"), A = n("611480"), m = n("981631"), N = n("474936"), p = n("689938"), O = n("121185"); function C(e) { var t, n, s; let { className: C, onClose: R } = e; (0, T.useFetchStickerPacks)(); let { analyticsLocations: g } = (0, d.default)(u.default.EMPTY_STATE), L = (0, o.useStateFromStoresArray)([f.default], () => A.EMPTY_STATE_STICKERS.map(e => f.default.getStickerById(e))); r.useEffect(() => { I.default.track(m.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: N.PremiumUpsellTypes.EMPTY_STICKER_PICKER_UPSELL, source: { section: m.AnalyticsSections.EMPTY_STICKER_PICKER_UPSELL }, location_stack: g }) }, [g]); let v = (0, c.usePremiumTrialOffer)(), D = (0, _.usePremiumDiscountOffer)(), M = null != v || null != D, y = (null == v ? void 0 : null === (t = v.subscription_trial) || void 0 === t ? void 0 : t.sku_id) === N.PremiumSubscriptionSKUs.TIER_0; return (0, i.jsxs)("div", { className: a()(O.emptyState, C, { [O.unifyTrialUpsell]: M }), children: [M ? (0, i.jsx)(E.default, { discountOffer: D, trialOffer: v, onClose: R, type: N.PremiumUpsellTypes.EMPTY_STICKER_PICKER_UPSELL, subscriptionTier: null !== (s = null == v ? void 0 : null === (n = v.subscription_trial) || void 0 === n ? void 0 : n.sku_id) && void 0 !== s ? s : N.PremiumSubscriptionSKUs.TIER_2, children: p.default.Messages.STICKER_PICKER_PREMIUM_EMPTY_STATE_SUBTITLE }) : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.Heading, { className: O.header, variant: "heading-xl/semibold", children: p.default.Messages.STICKER_PICKER_PREMIUM_EMPTY_STATE_TITLE }), (0, i.jsx)(l.Text, { className: O.subtitle, color: "header-secondary", variant: "text-md/normal", children: p.default.Messages.STICKER_PICKER_PREMIUM_EMPTY_STATE_SUBTITLE }), (0, i.jsx)("div", { className: O.stickersRow, children: L.filter(e => null != e).map(e => (0, i.jsx)(S.default, { sticker: e, className: O.sticker, size: 80 }, null == e ? void 0 : e.id)) })] }), !M && (0, i.jsx)(h.default, { analyticsSection: m.AnalyticsSections.EXPRESSION_PICKER, buttonText: M ? y ? p.default.Messages.PREMIUM_TRIAL_TIER_0_CTA_BUTTON_VARIANT : p.default.Messages.PREMIUM_TRIAL_CTA_BUTTON_VARIANT : void 0 })] }) } }, 491173: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("477690"), a = n("880949"), o = n("806966"), l = n("65029"), u = n("430824"), d = n("729285"), _ = n("624138"), c = n("926491"), E = n("373228"), I = n("378233"), T = n("419922"), f = n("689938"), S = n("824620"); let h = (0, _.cssValueToNumber)(s.default.EXPRESSION_PICKER_CONSTANTS_EXPRESSION_PICKER_INSPECTOR_BAR_GRAPHIC_PRIMARY_DIMENSIONS), A = (0, _.cssValueToNumber)(s.default.EXPRESSION_PICKER_CONSTANTS_EXPRESSION_PICKER_INSPECTOR_BAR_GRAPHIC_SECONDARY_DIMENSIONS), m = e => { let t = null, n = null; if (!(0, I.isStandardSticker)(e) && !(0, I.isGuildSticker)(e) || (0, I.isGuildSticker)(e)) { let r = u.default.getGuild(e.guild_id); null != r && (t = f.default.Messages.STICKER_FROM_SOURCE.format({ source: r.name }), n = (0, i.jsx)(a.default, { guild: r })) } else if ((0, I.isStandardSticker)(e)) { let r = c.default.getStickerPack(e.pack_id); null != r && (t = f.default.Messages.STICKER_FROM_SOURCE.format({ source: r.name }), n = (0, i.jsx)(T.default, { size: A, sticker: (0, I.getStickerPackPreviewSticker)(r), disableAnimation: !0 })) } return { title: t, graphic: n } }, N = r.memo(function(e) { let { stickersGrid: t } = e, n = o.StickerPickerStore.useStore(e => e.inspectedExpressionPosition), s = r.useMemo(() => { var e; let { rowIndex: i, columnIndex: r } = n, s = null === (e = t[i]) || void 0 === e ? void 0 : e[r]; return (null == s ? void 0 : s.type) === E.StickerGridItemTypes.CREATE_STICKER ? { guild_id: s.guild_id, name: s.name } : (null == s ? void 0 : s.type) !== E.StickerGridItemTypes.STICKER ? null : s.sticker }, [t, n]); if (null == s) return null; let { graphic: a, title: u } = m(s), _ = (0, I.isStandardSticker)(s) || (0, I.isGuildSticker)(s) ? (0, i.jsx)(T.default, { isInteracting: !0, size: h, sticker: s, disableAnimation: !0 }) : (0, i.jsx)("div", { className: S.iconWrapper, children: (0, i.jsx)(d.default, { className: S.icon }) }); return (0, i.jsx)(l.default, { graphicPrimary: _, graphicSecondary: a, titlePrimary: s.name, titleSecondary: (0, I.isStandardSticker)(s) || (0, I.isGuildSticker)(s) ? u : null }) }); t.default = N }, 489762: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("143927"), a = n("442837"), o = n("477690"), l = n("481060"), u = n("788911"), d = n("2052"), _ = n("100527"), c = n("906732"), E = n("880949"), I = n("806966"), T = n("28546"), f = n("691251"), S = n("98528"), h = n("551058"), A = n("695346"), m = n("430824"), N = n("594174"), p = n("695464"), O = n("497309"), C = n("898140"), R = n("626135"), g = n("624138"), L = n("191177"), v = n("285651"), D = n("926491"), M = n("373228"), y = n("378233"), P = n("419922"), U = n("1450"), b = n("491173"), G = n("515005"), w = n("652136"), k = n("981631"), B = n("957825"), V = n("689938"), x = n("102554"), F = n("239840"); let H = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_PICKER_BREAKPOINT_SMALL), Y = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_PICKER_BREAKPOINT_MEDIUM), j = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_TOP), W = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_TOP_SEARCH_RESULTS), K = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_RIGHT), z = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_BOTTOM), Z = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKERS_LIST_PADDING_LEFT), X = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKERS_LIST_DIVIDER_HEIGHT), Q = (0, g.cssValueToNumber)(o.default.EXPRESSION_PICKER_CONSTANTS_EXPRESSION_PICKER_LIST_SECTION_HEADING_HEIGHT), q = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_DIMENSIONS), J = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_DIMENSIONS_SMALL), $ = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_PADDING), ee = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKER_PICKER_PREVIEW_MARGIN), et = q + 2 * $ + ee, en = J + 2 * $ + ee, ei = [j, K, z, Z], er = [W, K, z, Z], es = (0, g.cssValueToNumber)(o.default.STICKERS_CONSTANTS_STICKERS_LIST_EMPTY_GUILD_UPSELL_HEIGHT), ea = ["laugh", "wave", "yes", "dance", "sad", "no", "hi", "bye", "cry", "ok"], eo = e => { let { onSuggestionClick: t } = e; return (0, i.jsx)("div", { className: x.searchSuggestions, children: ea.map(e => (0, i.jsx)(l.Clickable, { className: x.searchSuggestion, onClick: () => t(e), children: (0, i.jsx)(l.Text, { variant: "text-sm/normal", color: "text-normal", children: e }) }, e)) }) }, el = e => { let { onSelectSticker: t, channel: n, currentUser: i } = e, s = (0, d.useAnalyticsContext)(), { analyticsLocations: a } = (0, c.default)(), o = (0, T.useExpressionPickerStore)(e => e.searchQuery), l = r.useCallback(e => { let { visibleRowIndex: t, columnIndex: n, gridSectionIndex: i } = e; I.StickerPickerStore.setActiveCategoryIndex(i), I.StickerPickerStore.setInspectedExpressionPosition(n, t, f.InspectedExpressionChangeSource.MOUSE_EVENT), e.type === M.StickerGridItemTypes.STICKER && I.StickerPickerStore.setSearchPlaceholder(e.sticker.name) }, []); return { handleStickerInspect: l, handleSelect: r.useCallback(e => { if (e.type !== M.StickerGridItemTypes.STICKER) return; let { packId: r, sticker: l, type: u } = e, d = { ...s.location, object: "" === o ? k.AnalyticsObjects.STICKER_PICKER_VIEW_ALL : k.AnalyticsObjects.STICKER_SEARCH_VIEW_ALL }; if (null != l && !(0, v.isSendableSticker)(l, i, n)) { let e = D.default.getStickerPack(r); null != e && (R.default.track(k.AnalyticEvents.STICKER_PACK_VIEW_ALL, { sticker_id: l.id, sticker_pack_id: r, location: d, location_stack: a }), (0, w.default)({ stickerPack: e, analyticsLocations: a })); let t = (0, y.isGuildSticker)(l), s = (0, v.getStickerSendability)(l, i, n); s === v.StickerSendability.SENDABLE_WITH_PREMIUM && (0, L.setShowPremiumUpsell)(!0), t && v.StickerSendability.SENDABLE_WITH_BOOSTED_GUILD; return } u === M.StickerGridItemTypes.STICKER && null != l && t(e) }, [s.location, o, i, n, a, t]) } }, eu = e => { let { collapsedStickersCategories: t, gridWidth: n, onSelectSticker: s, getStickerItemProps: o, getStickerRowProps: u, gutterWidth: _, inspectedStickerPosition: c, isScrolling: I, isUsingKeyboardNavigation: T, stickersGrid: f, stickersCategories: S, filteredStickers: p, ownedStickerPacks: g, channel: L } = e, v = (0, d.useAnalyticsContext)(), b = (0, a.useStateFromStores)([N.default], () => N.default.getCurrentUser()), { handleStickerInspect: w, handleSelect: F } = el({ onSelectSticker: s, channel: L, currentUser: b }), [j, W] = r.useState(!1), K = r.useCallback(e => { A.StickerPickerCollapsedSections.updateSetting(Array.from(e)) }, []), z = r.useCallback(e => { let t = f[e]; return null != t ? (0, i.jsx)(G.default, { getStickerItemProps: o, getStickerRowProps: u, gutterWidth: _, inspectedStickerPosition: c, isScrolling: I, isUsingKeyboardNavigation: T, onInspect: w, onSelect: F, rowIndex: e, stickerClassName: x.sticker, stickerDescriptors: t, stickerSize: n > H ? q : J, preferAnimation: n <= Y, ownedStickerPacks: g, isDisplayingIndividualStickers: !0, channel: L, currentUser: b }, e) : null }, [f, o, u, _, c, I, T, w, F, n, g, L, b]), Z = r.useCallback((e, t) => (0, i.jsx)("div", { children: t }, e), []), $ = r.useCallback(function(e) { let { isStickerPack: n = !0 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = new Set(t), r = t.has(e); r ? i.delete(e) : i.add(e), R.default.track(k.AnalyticEvents.EXPRESSION_PICKER_CATEGORY_COLLAPSE_TOGGLED, { location: null == v ? void 0 : v.location, tab: B.ExpressionPickerViewType.STICKER, collapsed: !r, sticker_pack_id: n ? e : null }), K(i) }, [v, t, K]), ee = r.useCallback(e => { let n = S[e]; if (null != p) { let { sendable: t, sendableWithPremium: n } = p; if (0 === e && t.length > 0) return null; let r = t.length > 0 && n.length > 0; return (0, i.jsxs)(i.Fragment, { children: [r ? (0, i.jsx)("div", { className: x.divider, children: (0, i.jsx)(l.FormDivider, {}) }) : null, (0, i.jsx)(h.default, { className: x.packHeader, "aria-label": V.default.Messages.STICKERS_YOU_MIGHT_LIKE_A11Y, children: V.default.Messages.STICKERS_YOU_MIGHT_LIKE }, "stickers-you-might-like-header")] }) } switch (n.type) { case M.StickerCategoryTypes.FAVORITE: return (0, i.jsx)(h.default, { className: x.packHeader, "aria-label": V.default.Messages.STICKER_CATEGORY_A11Y_LABEL.format({ categoryName: n.name }), icon: (0, i.jsx)(C.default, { height: 16, width: 16 }), isCollapsed: t.has(n.id), onClick: () => $(n.id, { isStickerPack: !1 }), children: n.name }, "header-".concat(n.id)); case M.StickerCategoryTypes.RECENT: return (0, i.jsx)(h.default, { className: x.packHeader, "aria-label": V.default.Messages.STICKER_CATEGORY_A11Y_LABEL.format({ categoryName: n.name }), icon: (0, i.jsx)(O.default, {}), isCollapsed: t.has(n.id), onClick: () => $(n.id, { isStickerPack: !1 }), children: n.name }, "header-".concat(n.id)); case M.StickerCategoryTypes.GUILD: case M.StickerCategoryTypes.EMPTY_GUILD_UPSELL: { let e = m.default.getGuild(n.id); if (null == e) return null; return (0, i.jsx)(h.default, { className: x.packHeader, "aria-label": V.default.Messages.STICKER_CATEGORY_A11Y_LABEL.format({ categoryName: e.name }), icon: (0, i.jsx)(E.default, { guild: e, height: 16, width: 16 }), isCollapsed: t.has(e.id), onClick: () => $(e.id), children: e.name }, "h".concat(e.id)) } case M.StickerCategoryTypes.PACK: { let e = D.default.getStickerPack(n.id); if (null == e) return null; return (0, i.jsx)(h.default, { className: x.packHeader, "aria-label": V.default.Messages.STICKER_CATEGORY_A11Y_LABEL.format({ categoryName: e.name }), icon: (0, i.jsx)(P.default, { disableAnimation: !0, size: 12, sticker: (0, y.getStickerPackPreviewSticker)(e) }), isCollapsed: t.has(e.id), onClick: () => $(e.id), children: e.name }, "h".concat(e.id)) } } }, [t, S, $, p]), et = r.useCallback(e => { if (null != p) { let { sendable: t, sendableWithPremium: n } = p; return 0 === e && t.length > 0 ? 0 : Q + (t.length > 0 && n.length > 0 ? X : 0) } return Q }, [p]), en = r.useCallback(e => { let n = S[e], r = t.has(n.id); return n.type !== M.StickerCategoryTypes.EMPTY_GUILD_UPSELL || null != p || r ? null : (0, i.jsx)(U.default, { className: x.emptyGuildUpsell, guildId: n.id, channel: L, shouldTrackUpsellViewed: !j, setTrackedUpsellViewed: W }, "sticker-picker-empty-guild-inline-upsell-".concat(n.id)) }, [S, t, p, L, j]); return { renderRow: z, renderSection: Z, renderSectionHeader: ee, sectionHeaderHeight: et, renderSectionFooter: en, sectionFooterHeight: r.useCallback(e => { let n = S[e], i = t.has(n.id); return n.type !== M.StickerCategoryTypes.EMPTY_GUILD_UPSELL || i ? 0 : es }, [S, t]) } }, ed = r.forwardRef(function(e, t) { let { collapsedStickersCategories: n, gridWidth: o, filteredStickers: l, getStickerItemProps: d, getStickerRowProps: E, gutterWidth: f, isUsingKeyboardNavigation: h, onSelectSticker: A, rowCount: m, rowCountBySection: N, stickersCategories: O, stickersGrid: C, channel: R } = e, g = r.useRef(!1), L = r.useRef(null), [v, M] = I.StickerPickerStore.useStore(e => [e.activeCategoryIndex, e.inspectedExpressionPosition], s.default), { analyticsLocations: y } = (0, c.default)(_.default.STICKER_PICKER), P = (0, T.useExpressionPickerStore)(e => e.searchQuery), U = (0, a.useStateFromStores)([D.default], () => D.default.getPremiumPacks()), { renderRow: G, renderSection: w, renderSectionFooter: k, sectionFooterHeight: B, renderSectionHeader: Y, sectionHeaderHeight: j } = eu({ collapsedStickersCategories: n, gridWidth: o, stickersCategories: O, stickersGrid: C, isScrolling: g, isUsingKeyboardNavigation: h, onSelectSticker: A, getStickerItemProps: d, getStickerRowProps: E, gutterWidth: f, inspectedStickerPosition: M, filteredStickers: l, ownedStickerPacks: r.useMemo(() => new Set(U.map(e => e.id)), [U]), channel: R }), W = (0, S.useSynchronizedActiveCategoryIndexForScrollPosition)({ activeCategoryIndex: v, isScrolling: g, listRef: L, onActiveCategoryIndexChange: I.StickerPickerStore.setActiveCategoryIndex, scrollOffset: 20, searchQuery: P }); return (0, S.useSynchronizedScrollPositionForActiveCategoryIndex)({ searchQuery: P, activeCategoryIndex: v, listRef: L }), r.useImperativeHandle(t, () => ({ scrollTo: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = L.current) || void 0 === e ? void 0 : e.scrollTo(...n) }, getRowDescriptors: () => { var e, t; return null !== (t = null === (e = L.current) || void 0 === e ? void 0 : e.getRowDescriptors()) && void 0 !== t ? t : [] }, getSectionDescriptors: () => { var e, t; return null !== (t = null === (e = L.current) || void 0 === e ? void 0 : e.getSectionDescriptors()) && void 0 !== t ? t : [] }, scrollToSectionTop: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = L.current) || void 0 === e ? void 0 : e.scrollToSectionTop(...n) }, scrollRowIntoView: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = L.current) || void 0 === e ? void 0 : e.scrollRowIntoView(...n) }, getScrollerNode: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = L.current) || void 0 === e ? void 0 : e.getScrollerNode(...n) }, scrollIntoViewNode: function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; return null === (e = L.current) || void 0 === e ? void 0 : e.scrollIntoViewNode(...n) }, getListDimensions: function() { for (var e, t, n = arguments.length, i = Array(n), r = 0; r < n; r++) i[r] = arguments[r]; return null !== (t = null === (e = L.current) || void 0 === e ? void 0 : e.getListDimensions(...i)) && void 0 !== t ? t : { height: -1, totalHeight: -1 } } }), []), (0, i.jsx)(c.AnalyticsLocationProvider, { value: y, children: (0, i.jsxs)("div", { className: x.wrapper, children: [null != l && 0 === l.sendable.length && 0 === l.sendableWithPremium.length ? (0, i.jsx)(u.default, { message: V.default.Messages.NO_STICKER_SEARCH_RESULTS_WITH_SUGGESTIONS, className: x.__invalid_noSearchResultsContainer, noResultsImageURL: F, suggestions: (0, i.jsx)(eo, { onSuggestionClick: e => (0, T.setSearchQuery)(e, !0) }) }) : (0, i.jsx)(p.default, { role: "none presentation", listPadding: null != l ? er : ei, onScroll: W, renderRow: G, renderSection: null == l ? w : void 0, renderSectionHeader: Y, renderSectionFooter: k, rowCount: m, rowCountBySection: N, rowHeight: o > H ? et : en, sectionHeaderHeight: j, sectionFooterHeight: B, stickyHeaders: !0, ref: L }), (0, i.jsx)(b.default, { stickersGrid: C })] }) }) }); t.default = ed }, 515005: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n("468194"), u = n("481060"), d = n("239091"), _ = n("2052"), c = n("691251"), E = n("729285"), I = n("626135"), T = n("285651"), f = n("373228"), S = n("378233"), h = n("419922"), A = n("490095"), m = n("981631"), N = n("689938"), p = n("318142"); let O = (0, l.cssValueToNumber)(p.__invalid_stickerPickerPreviewDimensions), C = (0, l.cssValueToNumber)(p.__invalid_stickerPickerPreviewPadding), R = r.memo(function(e) { let { isDisplayingIndividualStickers: t = !1, preferAnimation: s = !0, getStickerItemProps: l, getStickerRowProps: R, gutterWidth: g, inspectedStickerPosition: L, isScrolling: v, isUsingKeyboardNavigation: D, onInspect: M, onSelect: y, rowIndex: P, stickerClassName: U, stickerDescriptors: b, stickerPadding: G = C, stickerSize: w = O, ownedStickerPacks: k, enlargeOnInteraction: B = !1, channel: V, currentUser: x, checkSendability: F = !0 } = e, { location: H } = (0, _.useAnalyticsContext)(), Y = w + 2 * G, j = r.useMemo(() => ({ gridColumnGap: g, gridTemplateColumns: "repeat(auto-fill, ".concat(Y, "px)"), height: Y, paddingRight: t ? void 0 : Y }), [t, g, Y]), W = r.useMemo(() => ({ width: w, height: w, padding: G }), [G, w]); return (0, i.jsx)("div", { className: p.row, style: j, ...null == R ? void 0 : R(P), children: b.map(e => { var _; let O = e.visibleRowIndex === (null == L ? void 0 : L.rowIndex) && e.columnIndex === (null == L ? void 0 : L.columnIndex), C = e.type === f.StickerGridItemTypes.STICKER && B && O, R = (0, o.throttle)(() => { (null == v ? void 0 : v.current) !== !0 && (null == D ? void 0 : D.current) !== !0 && !O && (null == M || M(e)) }, 250), { ref: g, tabIndex: b, onFocus: G, ...Y } = null !== (_ = null == l ? void 0 : l(e.columnIndex, P)) && void 0 !== _ ? _ : {}; switch (e.type) { case f.StickerGridItemTypes.CREATE_STICKER: return (0, i.jsx)("div", { ...Y, children: (0, i.jsxs)(u.Clickable, { "aria-label": e.name, className: a()(p.createSticker, U, { [p.createInspected]: O }), innerRef: g, tabIndex: b, onFocus: null != G ? G : R, onMouseMove: R, onClick: () => { e.type === f.StickerGridItemTypes.CREATE_STICKER && (I.default.track(m.AnalyticEvents.OPEN_MODAL, { type: m.AnalyticsSections.CREATE_STICKER_MODAL, location: H }), (0, u.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("93626"), n.e("84482")]).then(n.bind(n, "136735")); return n => (0, i.jsx)(t, { guildId: e.guild_id, ...n }) })) }, style: W, children: [!B && (0, i.jsx)("div", { className: p.inspectedIndicator }), (0, i.jsx)("div", { className: p.iconWrapper, children: (0, i.jsx)(E.default, { className: p.icon }) }), (0, i.jsx)(u.Text, { color: "interactive-active", variant: "text-xs/normal", children: N.default.Messages.STICKER_PICKER_CREATE_STICKER })] }) }, e.guild_id); case f.StickerGridItemTypes.STICKER: { let o = t && null != k && (0, S.isStandardSticker)(e.sticker) && !k.has(e.sticker.pack_id); return (0, r.createElement)("div", { ...Y, key: e.sticker.id }, (0, i.jsxs)(u.Clickable, { className: a()(p.sticker, U, { [p.stickerInspected]: O }), innerRef: g, tabIndex: b, onFocus: null != G ? G : R, onMouseMove: R, onClick: t => { (null == v ? void 0 : v.current) !== !0 && (null == D ? void 0 : D.current) !== !0 && (null == y || y(e, t)) }, onContextMenu: e => { (0, d.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("39010").then(n.bind(n, "269254")); return t => (0, i.jsx)(e, { ...t }) }) }, style: W, "data-type": c.PickerContextMenuDataTypes.STICKER, "data-id": e.sticker.id, children: [(0, i.jsx)(u.HiddenVisually, { children: (0, h.getStickerAltText)(e.sticker) }), (0, i.jsxs)("div", { "aria-hidden": !0, children: [!B && (0, i.jsx)("div", { className: p.inspectedIndicator }), (0, i.jsx)(h.default, { className: a()(p.stickerNode, { [p.stickerNodeDimmed]: B && !O && null != L && -1 !== L.rowIndex && -1 !== L.columnIndex, [p.stickerNodeHidden]: C, [p.stickerUnsendable]: F && !(0, T.isSendableSticker)(e.sticker, x, V) }), disableAnimation: !O && !s, enlargeOnInteraction: B, isInteracting: O, maskAsset: O, sticker: e.sticker, size: w }), o ? (0, i.jsx)(A.default, { size: 20 }) : null] })] })) } } }) }) }); t.default = R }, 31543: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("143927"), a = n("260866"), o = n("461745"), l = n("806966"), u = n("28546"), d = n("453070"), _ = n("611480"), c = n("689938"), E = n("311240"); let I = r.forwardRef(function(e, t) { let { onKeyDown: n, stickersListRef: I, channel: T } = e, f = (0, d.useHasSendableSticker)(T), S = r.useRef(null), { searchQuery: h, isSearchSuggestion: A } = (0, u.useExpressionPickerStore)(e => ({ searchQuery: e.searchQuery, isSearchSuggestion: e.isSearchSuggestion }), s.default), m = l.StickerPickerStore.useStore(e => e.searchPlaceholder), N = l.StickerPickerStore.useStore(e => e.inspectedExpressionPosition, s.default), p = r.useCallback(e => { var t; l.StickerPickerStore.setActiveCategoryIndex("" === e ? 0 : _.INACTIVE_CATEGORY_INDEX), l.StickerPickerStore.setInspectedExpressionPosition(0, 0), l.StickerPickerStore.setSearchPlaceholder(null), (0, u.setSearchQuery)(e), null === (t = I.current) || void 0 === t || t.scrollTo(0) }, [I]), O = r.useCallback(() => { (0, u.setSearchQuery)("") }, []); return r.useImperativeHandle(t, () => ({ focus: () => { var e; return null === (e = S.current) || void 0 === e ? void 0 : e.focus() } })), r.useLayoutEffect(() => { if (A) { var e; null === (e = S.current) || void 0 === e || e.focus() } }, [A]), (0, i.jsx)("div", { className: E.wrapper, children: (0, i.jsx)(o.default, { autoFocus: f, disabled: !f, query: h, ref: S, size: o.default.Sizes.MEDIUM, placeholder: null != m ? m : f ? c.default.Messages.SEARCH_FOR_STICKERS : c.default.Messages.NO_STICKERS_TO_SEARCH_THROUGH, onClear: O, onKeyDown: n, onQueryChange: p, className: E.__invalid_searchBar, preventEscapePropagation: !1, useKeyboardNavigation: !1, inputProps: { "aria-haspopup": "grid", "aria-controls": _.GRID_NAVIGATOR_ID, "aria-expanded": !0, "aria-activedescendant": (0, a.makeGridId)(_.GRID_NAVIGATOR_ID, N.columnIndex, N.rowIndex) } }) }) }); t.default = I }, 27733: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("976644"), a = n("466111"), o = n("929204"), l = n("689938"), u = n("450671"); function d(e) { let { analyticsSection: t, buttonText: n } = e; return (0, i.jsxs)(s.default, { className: u.premiumButton, innerClassName: u.premiumButtonInner, color: r.Button.Colors.GREEN, size: r.Button.Sizes.SMALL, onClick: () => (0, o.default)({ section: t }), children: [(0, i.jsx)(a.default, { className: u.premiumButtonNitroWheel }), null != n ? n : l.default.Messages.STICKER_PICKER_PREMIUM_EMPTY_STATE_CTA] }) } }, 814042: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StickersPremiumUpsell: function() { return C } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("100527"), u = n("906732"), d = n("104494"), _ = n("639119"), c = n("165583"), E = n("465670"), I = n("626135"), T = n("74538"), f = n("191177"), S = n("27733"), h = n("981631"), A = n("474936"), m = n("689938"), N = n("60135"), p = n("867250"); let O = () => (0, f.setShowPremiumUpsell)(!1), C = e => { var t, n, s; let { onLearnMore: f } = e, { analyticsLocations: C } = (0, u.default)(l.default.PREMIUM_UPSELL); r.useEffect(() => { I.default.track(h.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { location_section: h.AnalyticsSections.STICKER_PICKER_UPSELL, type: A.PremiumUpsellTypes.STICKER_PICKER_UPSELL, location_stack: C }) }, [C]); let R = (0, _.usePremiumTrialOffer)(), g = (0, d.usePremiumDiscountOffer)(), L = (null == R ? void 0 : null === (t = R.subscription_trial) || void 0 === t ? void 0 : t.sku_id) === A.PremiumSubscriptionSKUs.TIER_0, v = null != R || null != g; return (0, i.jsxs)("div", { className: a()(N.upsellWrapper, { [N.unifyTrialUpsell]: v }), children: [v ? (0, i.jsx)(c.default, { trialOffer: R, discountOffer: g, onClose: O, type: A.PremiumUpsellTypes.STICKER_PICKER_UPSELL, subscriptionTier: null !== (s = null == R ? void 0 : null === (n = R.subscription_trial) || void 0 === n ? void 0 : n.sku_id) && void 0 !== s ? s : A.PremiumSubscriptionSKUs.TIER_2, children: L ? m.default.Messages.STICKER_PICKER_PREMIUM_TIER_UPSELL_DESCRIPTION.format({ planName: (0, T.getTierDisplayName)(A.SubscriptionPlans.PREMIUM_MONTH_TIER_0), onClick: f }) : m.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_DESCRIPTION.format({ onClick: f }) }) : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("img", { className: N.upsellImage, src: p, alt: m.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_ALT }), (0, i.jsx)(o.Text, { className: N.upsellTitle, color: "header-primary", variant: "text-lg/semibold", children: m.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_TITLE }), (0, i.jsx)(o.Text, { className: N.upsellDescription, variant: "text-md/normal", children: m.default.Messages.STICKER_PICKER_PREMIUM_UPSELL_DESCRIPTION.format({ onClick: f }) })] }), !v && (0, i.jsx)(S.default, { analyticsSection: h.AnalyticsSections.EXPRESSION_PICKER, buttonText: v ? L ? m.default.Messages.PREMIUM_TRIAL_TIER_0_CTA_BUTTON_VARIANT : m.default.Messages.PREMIUM_TRIAL_CTA_BUTTON_VARIANT : void 0 }), (0, i.jsx)(o.Clickable, { className: N.upsellClose, onClick: O, children: (0, i.jsx)(E.default, {}) })] }) } }, 15350: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getFilteredStickers: function() { return s } }), n("653041"); var i = n("285651"), r = n("138421"); let s = (e, t, n) => { if ("" === e) return null; let s = [], a = []; return (0, r.searchAllStickers)(e).forEach(e => { let r = (0, i.getStickerSendability)(e, t, n); r === i.StickerSendability.SENDABLE ? s.push(e) : r === i.StickerSendability.SENDABLE_WITH_PREMIUM && a.push(e) }), { sendable: s, sendableWithPremium: a } } }, 929204: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("626135"), a = n("981631"); function o(e) { s.default.track(a.AnalyticEvents.OPEN_MODAL, { type: a.AnalyticsSections.STICKER_PREMIUM_TIER_2_UPSELL_MODAL, location: e }), (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("29549"), n.e("75613")]).then(n.bind(n, "72691")); return t => (0, i.jsx)(e, { ...t }) }) } }, 652136: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("626135"), a = n("981631"); function o(e) { let { stickerPack: t, sourceSticker: o, analyticsLocations: l, analyticsLocation: u } = e; return s.default.track(a.AnalyticEvents.STICKER_PACK_VIEW_ALL, { sticker_id: null == o ? void 0 : o.id, sticker_pack_id: t.id, location: u, location_stack: l }), s.default.track(a.AnalyticEvents.OPEN_MODAL, { type: a.AnalyticsSections.STICKER_PACK_VIEW_ALL, location: u }), (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("29549"), n.e("39511")]).then(n.bind(n, "433550")); return n => (0, i.jsx)(e, { stickerPack: t, ...n }) }) } }, 418088: function(e, t, n) { "use strict"; var i, r, s, a; function o(e, t) { return { id: e.id, topic: e.topic, summShort: e.summ_short, people: Array.from(new Set(e.people)), startId: e.start_id, endId: e.end_id, count: e.count, channelId: t, source: e.source, type: e.type } } n.r(t), n.d(t, { createSummaryFromServer: function() { return o } }), n("47120"), (s = i || (i = {}))[s.SOURCE_0 = 0] = "SOURCE_0", s[s.SOURCE_1 = 1] = "SOURCE_1", (a = r || (r = {}))[a.UNSET = 0] = "UNSET", a[a.SOURCE_1 = 1] = "SOURCE_1", a[a.SOURCE_2 = 2] = "SOURCE_2" }, 479313: function(e, t, n) { "use strict"; n.r(t), n.d(t, { deleteSummary: function() { return g }, fetchSummaries: function() { return h }, setHighlightedSummary: function() { return A }, setSelectedSummary: function() { return N }, setSummaryFeedback: function() { return O }, toggleTopicsBar: function() { return m }, updateVisibleMessages: function() { return p } }); var i = n("470079"), r = n("392711"), s = n.n(r), a = n("399606"), o = n("544891"), l = n("570140"), u = n("881052"), d = n("902840"), _ = n("38618"), c = n("592125"), E = n("70956"), I = n("765104"), T = n("981631"); let f = 30 * E.default.Millis.SECOND; async function S(e, t) { let n, i; if (!I.default.shouldFetch(e, t)) return; let r = Date.now(); l.default.dispatch({ type: "REQUEST_CHANNEL_SUMMARY", channelId: e, summaryId: t, requestedAt: r }); try { let n = await o.HTTP.get(T.Routes.CHANNEL_SUMMARY(e, t)); i = null == n ? void 0 : n.body } catch (e) { n = new u.APIError(e) } l.default.dispatch({ type: "RECEIVE_CHANNEL_SUMMARY", channelId: e, summary: i, error: n, requestedAt: r, receivedAt: Date.now() }) } async function h(e) { var t, n; let i, r; if (!I.default.shouldFetch(e)) return; let a = Date.now(); l.default.dispatch({ type: "REQUEST_CHANNEL_SUMMARIES", channelId: e, requestedAt: a }); try { r = await o.HTTP.get(T.Routes.CHANNEL_SUMMARIES(e)) } catch (e) { i = new u.APIError(e) } let d = (null == r ? void 0 : null === (t = r.body) || void 0 === t ? void 0 : t.summaries) instanceof Array ? r.body.summaries : null !== (n = null == r ? void 0 : r.body) && void 0 !== n ? n : []; d = s().takeRight(d, 75), l.default.dispatch({ type: "RECEIVE_CHANNEL_SUMMARIES", channelId: e, summaries: d, error: null != i ? i : void 0, requestedAt: a, receivedAt: Date.now() }) } function A(e, t) { l.default.dispatch({ type: "SET_HIGHLIGHTED_SUMMARY", channelId: e, summaryId: null != t ? t : null }) } function m() { l.default.dispatch({ type: "TOGGLE_TOPICS_BAR" }) } function N(e, t) { null != e && null != t && S(e, t), l.default.dispatch({ type: "SET_SELECTED_SUMMARY", channelId: e, summaryId: null != t ? t : null }) } function p(e, t) { l.default.dispatch({ type: "UPDATE_VISIBLE_MESSAGES", topVisibleMessage: null != e ? e : null, bottomVisibleMessage: null != t ? t : null }) } function O(e, t) { l.default.dispatch({ type: "SET_SUMMARY_FEEDBACK", summary: e, rating: t }) } async function C() { var e; let t, n; if (!I.default.shouldFetchChannelAffinities()) return Promise.resolve(null); let i = Date.now(); l.default.dispatch({ type: "REQUEST_CHANNEL_AFFINITIES", requestedAt: i }); try { n = await o.HTTP.get("/users/@me/affinities/channels") } catch (e) { t = new u.APIError(e) } let r = null == n ? void 0 : null === (e = n.body) || void 0 === e ? void 0 : e.channel_affinities; l.default.dispatch({ type: "RECEIVE_CHANNEL_AFFINITIES", affinities: r, error: null != t ? t : void 0, requestedAt: i, receivedAt: Date.now() }) } async function R(e) { let t, n, { useQuickSwitcher: i = !0, useChannelAffinities: r = !0 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; e = null != e ? e : []; let s = Date.now(); if (0 === (e = e.concat(I.default.defaultChannelIds({ withQuickSwitcher: i, withChannelAffinities: r })).filter(e => { let t = c.default.getChannel(e); return (0, d.canSeeChannelSummaries)(t, !1, !0) }).filter(e => { let t = Date.now(), n = I.default.status(e); if (null == n ? void 0 : n.fetching) return !1; let i = null == n ? void 0 : n.lastReceivedAt; return null == i || t - i > f }).slice(0, 50)).length) return Promise.resolve(null); l.default.dispatch({ type: "REQUEST_CHANNEL_SUMMARIES_BULK", channelIds: e, requestedAt: s }); try { n = await o.HTTP.post({ url: T.Routes.USER_SUMMARIES, body: { channel_ids: e } }) } catch (e) { t = new u.APIError(e) } let a = null == n ? void 0 : n.body.summaries; l.default.dispatch({ type: "RECEIVE_CHANNEL_SUMMARIES_BULK", requestedAt: s, receivedAt: Date.now(), summaries: a, requestArgs: { channelIds: e }, error: t }) } async function g(e) { try { await o.HTTP.del(T.Routes.CHANNEL_SUMMARY(e.channelId, e.id)), l.default.dispatch({ type: "DELETE_SUMMARY", summary: e }) } catch (e) { throw new u.APIError(e) } } t.default = { setSummaryFeedback: O, updateVisibleMessages: p, setSelectedSummary: N, setHighlightedSummary: A, fetchSummaries: h, fetchSummariesBulk: R, useChannelSummaries: function(e) { let { channelIds: t = [] } = e; return ! function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = (0, a.useStateFromStores)([_.default], () => _.default.isConnected()), n = i.useMemo(() => e.join(","), [e]); i.useEffect(() => { t && e(); async function e() { try { await C() } catch (e) {} await R(n.split(",")) } }, [n, t]) }(t), (0, a.useStateFromStoresArray)([I.default], () => I.default.topSummaries(), []) }, deleteSummary: g } }, 814249: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SUMMARY_POLL_INTERVAL: function() { return _ }, SummariesSidebarToggledSource: function() { return a }, SummariesTopicClickedSource: function() { return o }, SummaryFeedbackReasons: function() { return l }, getSummaryFeedbackReasons: function() { return c } }); var i, r, s, a, o, l, u = n("70956"), d = n("689938"); let _ = 5 * u.default.Millis.SECOND; function c() { return [{ value: "DUPLICATED", label: d.default.Messages.SUMMARIES_FEEDBACK_OPTION_DUPLICATED }, { value: "TOO_GENERIC", label: d.default.Messages.SUMMARIES_FEEDBACK_OPTION_TOO_GENERIC }, { value: "TOO_MANY", label: d.default.Messages.SUMMARIES_FEEDBACK_OPTION_TOO_MANY }, { value: "INACCURATE", label: d.default.Messages.SUMMARIES_FEEDBACK_OPTION_INACCURATE }, { value: "NOT_USEFUL", label: d.default.Messages.SUMMARIES_FEEDBACK_OPTION_NOT_USEFUL }, { value: "OTHER", label: d.default.Messages.SUMMARIES_FEEDBACK_OPTION_OTHER }] }(i = a || (a = {})).TOOLBAR_BUTTON = "toolbar button", i.PILL = "pill", (r = o || (o = {})).SIDEBAR = "sidebar", r.PILL_DROPDOWN = "pill dropdown", r.PILL_NEXT_ARROW = "pill next arrow", r.PILL_PREVIOUS_ARROW = "pill previous arrow", (s = l || (l = {})).DUPLICATED = "DUPLICATED", s.TOO_GENERIC = "TOO_GENERIC", s.TOO_MANY = "TOO_MANY", s.INACCURATE = "INACCURATE", s.NOT_USEFUL = "NOT_USEFUL", s.OTHER = "OTHER" }, 765104: function(e, t, n) { "use strict"; let i, r, s, a; n.r(t), n("536091"), n("47120"), n("653041"), n("724458"); var o, l, u, d, _, c, E = n("392711"), I = n.n(E), T = n("442837"), f = n("570140"), S = n("902840"), h = n("212819"), A = n("353926"), m = n("823385"), N = n("592125"), p = n("430824"), O = n("306680"), C = n("944486"), R = n("9156"), g = n("594174"), L = n("70956"), v = n("709054"), D = n("418088"), M = n("814249"); (u = o || (o = {})).FETCHING = "fetching", u.OK = "ok", u.ERROR = "error"; let y = {}, P = {}, U = {}, b = [], G = {}, w = { status: "ok", lastRequest: null, lastResponse: null }, k = [], B = []; function V() { k = m.default.getProps().results.filter(e => e.type === h.AutocompleterResultTypes.TEXT_CHANNEL && 0 === e.record.type).map(e => e.record.id) } class x extends(l = T.default.PersistedStore) { getState() { return { shouldShowTopicsBar: i } } initialize(e) { var t; i = null === (t = null == e ? void 0 : e.shouldShowTopicsBar) || void 0 === t || t, this.waitFor(N.default, g.default, C.default, p.default, A.default), this.syncWith([m.default], V) } allSummaries() { return y } topSummaries() { return Object.values(y).flat().filter(e => e.people.length > 1 && v.default.extractTimestamp(e.endId) > new Date().getTime() - 5 * L.default.Millis.HOUR).sort((e, t) => v.default.extractTimestamp(t.endId) - v.default.extractTimestamp(e.endId)) } summaries(e) { var t; return null !== (t = y[e]) && void 0 !== t ? t : B } shouldShowTopicsBar() { return i } findSummary(e, t) { var n; return null !== (n = this.summaries(e).find(e => e.id === t)) && void 0 !== n ? n : null } selectedSummary(e) { return null != a && a.channelId === e && null != a.summaryId ? this.findSummary(e, null == a ? void 0 : a.summaryId) : null } summaryFeedback(e) { return null == e ? null : U[e.id] } isFetching(e, t) { var n, i; return null != t ? (null === (i = P[e]) || void 0 === i ? void 0 : i.summaryId) === t : (null === (n = P[e]) || void 0 === n ? void 0 : n.fetching) === !0 } status(e) { return P[e] } shouldFetch(e, t) { var n, i; let r = P[e], s = N.default.getChannel(e); if (!(0, S.canSeeChannelSummaries)(s)) return !1; if (null != t) { let e = null !== (n = null == r ? void 0 : r.summaryIdLastRequestedAt) && void 0 !== n ? n : 0, i = Date.now() - e; return t !== (null == r ? void 0 : r.summaryId) || i > M.SUMMARY_POLL_INTERVAL } let a = null !== (i = null == r ? void 0 : r.lastReceivedAt) && void 0 !== i ? i : 0; return !(null == r ? void 0 : r.fetching) && 0 === a } channelAffinities() { return b } channelAffinitiesById(e) { return null == e ? G : G[e] } channelAffinitiesStatus() { return w } shouldFetchChannelAffinities() { return !("fetching" === w.status || null != w.lastResponse && Date.now() - w.lastResponse < 30 * L.default.Millis.SECOND) && !0 } defaultChannelIds(e) { let { withQuickSwitcher: t, withChannelAffinities: n, withUnreads: i, numChannels: r = 25 } = e, s = []; return t && (s = s.concat(k)), n && (s = s.concat(b.map(e => e.channel_id))), i && (s = s.filter(e => { let t = N.default.getChannel(e); return null != t && !R.default.isChannelMuted(t.guild_id, e) && O.default.hasUnread(e) })), (s = s.filter(e => { let t = N.default.getChannel(e); return (0, S.canSeeChannelSummaries)(t, !1, !1) })).slice(0, r) } visibleSummaryIndex() { return s } } c = "SummaryStore", (_ = "persistKey") in(d = x) ? Object.defineProperty(d, _, { value: c, enumerable: !0, configurable: !0, writable: !0 }) : d[_] = c; let F = new x(f.default, { CONNECTION_OPEN: () => !1, CHANNEL_SELECT(e) { let { channelId: t } = e; (null == a ? void 0 : a.channelId) !== t && (a = null) }, TOGGLE_TOPICS_BAR() { i = !i }, RECEIVE_CHANNEL_SUMMARY(e) { var t, n; let { summary: i, channelId: r, error: s, receivedAt: a } = e; if (null != i && Object.keys(i).length > 0) { let e = (0, D.createSummaryFromServer)(i, r), n = [...null !== (t = y[r]) && void 0 !== t ? t : []], s = n.findIndex(t => t.id === (null == e ? void 0 : e.id)); s > -1 ? n[s] = e : n.push(e), y[r] = n } let o = { ...null !== (n = P[r]) && void 0 !== n ? n : { fetching: !1 }, summaryId: void 0, summaryIdLastReceivedAt: a, summaryIdError: s }; P[r] = o }, REQUEST_CHANNEL_SUMMARY(e) { var t; let { channelId: n, summaryId: i, requestedAt: r } = e; P[n] = { ...null !== (t = P[n]) && void 0 !== t ? t : { fetching: !1 }, summaryId: i, summaryIdLastRequestedAt: r } }, RECEIVE_CHANNEL_SUMMARIES(e) { let { summaries: t, channelId: n, error: i, receivedAt: r } = e, s = t.filter(e => Object.keys(e).length > 0).map(e => (0, D.createSummaryFromServer)(e, n)); if (null != a && a.channelId === n && !s.some(e => e.id === (null == a ? void 0 : a.summaryId))) { var o; let e = (null !== (o = y[n]) && void 0 !== o ? o : []).find(e => e.id === (null == a ? void 0 : a.summaryId)); null != e && s.push(e) } y[n] = (0, E.sortBy)(s, e => v.default.extractTimestamp(e.startId)).reverse(); let l = { ...P[n], fetching: !1, error: void 0, lastReceivedAt: r }; null != i && (l.error = i), P[n] = l }, REQUEST_CHANNEL_SUMMARIES(e) { var t; P[e.channelId] = { ...null !== (t = P[e.channelId]) && void 0 !== t ? t : {}, fetching: !0, lastRequestedAt: e.requestedAt } }, SET_HIGHLIGHTED_SUMMARY(e) { var t; if (null == r && null == e.channelId || e.channelId === (null == r ? void 0 : r.channelId) && e.summaryId === (null == r ? void 0 : r.summaryId)) return !1; if (null != (r = null != e.channelId ? { channelId: e.channelId, summaryId: null !== (t = e.summaryId) && void 0 !== t ? t : null } : null) && r.channelId === e.channelId && null != r.summaryId) { let e = y[r.channelId]; s = null == e ? void 0 : e.findIndex(e => e.id === (null == r ? void 0 : r.summaryId)) } }, UPDATE_VISIBLE_MESSAGES(e) { let t = C.default.getChannelId(); if (null != t) { if (null != r && r.channelId === t && null != r.summaryId) { let e = y[r.channelId]; s = null == e ? void 0 : e.findIndex(e => e.id === (null == r ? void 0 : r.summaryId)) } else { var n; s = null === (n = y[t]) || void 0 === n ? void 0 : n.findIndex(t => { var n, i, r, s; return n = e.topVisibleMessage, i = e.bottomVisibleMessage, r = t.startId, s = t.endId, !(null == n || n > s) && !(null == i || i < r) }) } } }, SET_SELECTED_SUMMARY(e) { var t; let n = e.channelId; return null == n ? null : (n !== (null == a ? void 0 : a.channelId) || e.summaryId !== (null == a ? void 0 : a.summaryId)) && void(a = { channelId: n, summaryId: null !== (t = e.summaryId) && void 0 !== t ? t : null }) }, SET_SUMMARY_FEEDBACK(e) { let { summary: t, rating: n } = e; null != n ? U[t.id] = n : delete U[t.id] }, REQUEST_CHANNEL_AFFINITIES() { w = { ...w, status: "fetching", lastRequest: Date.now() } }, RECEIVE_CHANNEL_AFFINITIES(e) { var t; let { affinities: n, error: i } = e; if (null != i) { b = [], G = {}, w = { ...w, status: "error", lastResponse: Date.now() }; return } b = null != n ? n : [], G = null !== (t = null == n ? void 0 : n.reduce((e, t) => (e[t.channel_id] = t.affinity, e), {})) && void 0 !== t ? t : {}, w = { ...w, status: "ok", lastResponse: Date.now() } }, REQUEST_CHANNEL_SUMMARIES_BULK(e) { let { channelIds: t, requestedAt: n } = e, i = t.reduce((e, t) => { var i; let r = null !== (i = P[t]) && void 0 !== i ? i : {}; return e[t] = { ...r, fetching: !0, lastRequestedAt: n, error: void 0 }, e }, {}); P = { ...P, ...i } }, RECEIVE_CHANNEL_SUMMARIES_BULK(e) { let { summaries: t, receivedAt: n, error: i, requestArgs: { channelIds: r } } = e, s = I().toPairs(t).reduce((e, t) => { let [n, i] = t, r = I().chain(i.map(e => (0, D.createSummaryFromServer)(e, n))).sortBy(e => v.default.extractTimestamp(e.startId)).takeRight(75).reverse().filter(e => Object.keys(e).length > 0).value(); return e[n] = r, e }, {}), a = r.reduce((e, t) => { var r; let a = null !== (r = P[t]) && void 0 !== r ? r : {}, o = s[t]; return null != o && (e.summariesByChannel[t] = o), e.summaryFetchStatusByChannel[t] = { ...a, fetching: !1, error: i, lastReceivedAt: n }, e }, { summariesByChannel: {}, summaryFetchStatusByChannel: {} }); y = { ...y, ...a.summariesByChannel }, P = { ...P, ...a.summaryFetchStatusByChannel } }, CONVERSATION_SUMMARY_UPDATE(e) { var t, n, i; let { channel_id: r, summaries: s, guild_id: a } = e, o = Date.now(), l = I().chain(s).sortBy(e => v.default.extractTimestamp(e.start_id)).filter(e => Object.keys(e).length > 0).map(e => (0, D.createSummaryFromServer)(e, r)).reverse().value(), u = null !== (n = y[r]) && void 0 !== n ? n : [], d = I().chain(l).concat(u).sortBy(e => v.default.extractTimestamp(e.startId)).takeRight(75).uniqBy("id").reverse().value(); y[r] = d, P[r] = { ...P[r], error: void 0, fetching: null !== (i = null === (t = P[r]) || void 0 === t ? void 0 : t.fetching) && void 0 !== i && i, lastReceivedAt: o } }, CLEAR_CONVERSATION_SUMMARIES() { y = {}, P = {} }, DELETE_SUMMARY(e) { var t; let n = e.summary.channelId, i = (null !== (t = y[n]) && void 0 !== t ? t : []).indexOf(e.summary); - 1 !== i && y[n].splice(i, 1) } }); t.default = F }, 784712: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("626135"), r = n("479313"), s = n("981631"); function a(e) { let { summary: t, guildId: n, channelId: a, rating: o = null, problem: l = null, feedback: u = "", location: d } = e; (0, r.setSummaryFeedback)(t, o), i.default.track(s.AnalyticEvents.SUMMARIES_REPORT_PROBLEM, { reason: l, location: d, rating: o, feedback: u, participant_count: t.people.length, message_count: t.count, start_message_id: t.startId, guild_id: n, channel_id: a, summary_id: t.id, summary_source: t.source, summary_type: t.type }) } }, 478758: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("735250"); n("470079"); var r = n("392711"), s = n.n(r), a = n("481060"), o = n("730749"), l = n("823379"), u = n("31410"); let d = (0, o.default)(e => { let { member: t, empty: n, guildId: r } = e; return n || null == t ? (0, i.jsx)("div", { className: u.partyMember }) : (0, i.jsx)("div", { className: u.partyMember, children: (0, i.jsx)(a.Avatar, { src: t.getAvatarURL(r, 16), "aria-label": t.username, size: a.AvatarSizes.SIZE_16, className: u.partyMember }) }) }); t.default = e => { let { partySize: t, members: n, minAvatarsShown: r = 1, maxAvatarsShown: a = 2, guildId: o } = e, { totalSize: _, knownSize: c } = t; if (_ < r) return null; let E = s()(n).filter(l.isNotNullish).take(a).map(e => (0, i.jsx)(d, { member: e, guildId: o }, e.id)).value(), I = _ - c; for (let e = 0; e < I && E.length < a; e++) E.push((0, i.jsx)(d, { empty: !0, guildId: o }, "empty-member-".concat(e))); let T = Math.max(Math.min(_ - E.length, 99), 0); if (1 === T) { let e = n[a]; E.push((0, i.jsx)(d, { member: e, guildId: o }, e.id)) } return (0, i.jsx)("div", { className: u.wrapper, children: (0, i.jsxs)("div", { className: u.partyMembers, children: [E, T > 1 ? (0, i.jsxs)("div", { className: u.partyMemberOverflow, children: ["+", T] }) : null] }) }) } }, 505953: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("239091"), l = n("79712"), u = n("91159"), d = n("496675"), _ = n("306680"), c = n("974029"), E = n("446183"), I = n("677281"), T = n("880080"), f = n("709054"), S = n("765104"), h = n("477291"), A = n("478758"), m = n("789707"), N = n("981631"), p = n("531578"), O = n("561701"); function C(e) { let { summary: t, channel: _, members: m, guildId: C, unread: R, onClick: g } = e, [L, v] = r.useState(!1), D = (0, u.getTimestampString)(f.default.extractTimestamp(t.startId)), M = (0, s.useStateFromStores)([S.default], () => S.default.summaryFeedback(t)), y = (e, n) => { e.stopPropagation(), (0, h.default)({ summary: t, channel: _, rating: n }) }, P = d.default.can(N.Permissions.MANAGE_MESSAGES, _); return (0, i.jsxs)(a.Clickable, { className: O.container, onClick: g, onContextMenu: e => { P && (0, o.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("12891").then(n.bind(n, "519620")); return n => (0, i.jsx)(e, { ...n, summary: t }) }) }, onMouseEnter: () => v(!0), onMouseLeave: () => v(!1), children: [(0, i.jsx)(T.default, { hovered: L, unread: R, className: O.unreadPill }), (0, i.jsx)("div", { className: O.rowHeader, children: (0, i.jsxs)("div", { className: O.rowHeaderLeft, children: [(0, i.jsx)(a.Text, { className: O.timestamp, color: "interactive-normal", variant: "text-xs/normal", children: D }), (0, i.jsx)(l.default, { height: 4, width: 4, "aria-hidden": "true", className: O.dot }), (0, i.jsx)(c.default, { height: 12, width: 12, className: O.icon }), (0, i.jsx)(a.Text, { className: O.count, color: "interactive-normal", variant: "text-xs/normal", children: t.count }), m.length > 0 && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.default, { height: 4, width: 4, "aria-hidden": "true", className: O.dot }), (0, i.jsx)(A.default, { partySize: { knownSize: m.length, totalSize: m.length }, maxAvatarsShown: 3, members: m, guildId: C })] })] }) }), L && !M && (0, i.jsxs)("div", { className: O.feedbackContainer, children: [(0, i.jsx)(a.Clickable, { onClick: e => y(e, p.FeedbackRating.GOOD), children: (0, i.jsx)(I.default, { className: O.thumbIcon, width: 12, height: 12 }) }), (0, i.jsx)(a.Clickable, { onClick: e => y(e, p.FeedbackRating.BAD), children: (0, i.jsx)(E.default, { className: O.thumbIcon, width: 12, height: 12 }) })] }), (0, i.jsx)(a.Text, { color: "header-primary", variant: "text-sm/semibold", className: O.title, children: t.topic }), (0, i.jsx)(a.Text, { color: "header-secondary", variant: "text-sm/normal", className: O.subtitle, children: t.summShort })] }) } function R(e) { let { summaries: t, summariesMembers: n, channel: a, selectTopic: o, setOpen: l } = e, u = (0, s.useStateFromStores)([_.default], () => _.default.getOldestUnreadMessageId(a.id)), d = r.useCallback(e => { o(e), l(!1) }, [o, l]); return t.length < 1 ? (0, i.jsx)(m.default, {}) : (0, i.jsx)(i.Fragment, { children: t.map((e, t) => { var r; let s = null !== (r = n[t]) && void 0 !== r ? r : []; return (0, i.jsx)(C, { summary: e, channel: a, members: s, guildId: a.guild_id, unread: null != u && f.default.compare(e.endId, u) > 0, onClick: () => d(t) }, t) }) }) } }, 789707: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("499033"), a = n("839523"), o = n("689938"), l = n("86676"); function u() { return (0, i.jsxs)("div", { className: l.container, children: [(0, i.jsxs)("div", { className: l.iconContainer, children: [(0, i.jsx)("div", { className: l.icon, children: (0, i.jsx)(a.default, { className: l.iconOffset, width: 28, height: 28 }) }), (0, i.jsx)(s.default, { className: l.stars })] }), (0, i.jsx)(r.Heading, { className: l.header, variant: "heading-xl/semibold", children: o.default.Messages.SUMMARY_EMPTY_STATE_TITLE }), (0, i.jsx)(r.Text, { className: l.text, color: "header-secondary", variant: "text-md/normal", children: o.default.Messages.SUMMARY_EMPTY_STATE_TEXT })] }) } }, 477291: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("784712"), a = n("531578"), o = n("689938"); function l(e, t, n) { let { rating: i, problem: a, feedback: l } = n; (0, s.default)({ problem: a, summary: e, feedback: l, guildId: t.guild_id, channelId: t.id, location: "Summary divider", rating: i }), (0, r.showToast)((0, r.createToast)(o.default.Messages.CALL_FEEDBACK_CONFIRMATION, r.ToastType.SUCCESS)) } function u(e) { let { summary: t, channel: s, rating: o } = e; null != t && (o === a.FeedbackRating.BAD ? (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("49237"), n.e("99387"), n.e("22377")]).then(n.bind(n, "580584")); return n => (0, i.jsx)(e, { ...n, onSubmit: e => l(t, s, e), startRating: o }) }) : l(t, s, { rating: o, problem: null, feedback: "", dontShowAgain: !1 })) } }, 528151: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SilentMessagesExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2023-01_silent_messages", label: "Silent Messages", defaultConfig: { allowSending: !1 }, treatments: [{ id: 1, label: "Allow sending @silent messages", config: { allowSending: !0 } }] }) }, 467798: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SILENT_RE: function() { return s }, canSuppressNotifications: function() { return a }, default: function() { return o } }); var i = n("528151"); let r = "@silent", s = new RegExp("^".concat(r, "(\\s|$)")); function a() { return i.SilentMessagesExperiment.getCurrentConfig({ location: "456bd9_1" }, { autoTrackExposure: !1 }).allowSending } function o(e) { return null == e ? [!1, ""] : a() && null != e.match(s) ? [!0, e.substring(r.length).trim()] : [!1, e] } }, 243317: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("55178"), a = n("689938"), o = n("12050"); function l() { return (0, i.jsx)(r.Tooltip, { text: a.default.Messages.SUPPRESS_NOTIFICATIONS_TOOLTIP, children: e => (0, i.jsx)("div", { className: o.badge, ...e, children: (0, i.jsx)(s.default, { width: "1rem", height: "1rem" }) }) }) } }, 540709: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("952265"); t.default = { show(e) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("27751")]).then(n.bind(n, "783576")); return n => (0, i.jsx)(t, { ...n, href: e }) }) } } }, 881706: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isSuspiciousDownload: function() { return o } }), n("47120"); var i = n("729594"), r = n("821445"); let s = new Set(r), a = { "github.com": RegExp("\\/releases\\S*\\/download"), "bitbucket.org": RegExp("\\/downloads\\S*\\/[^\\/]*"), "gitlab.com": RegExp("\\/downloads\\S*\\/[^\\/]*") }; function o(e) { var t; let { pathname: n, hostname: r } = i.parse(e); if (null == r) return null; let o = a[r]; if (null != o && null != n && !o.test(n) || null == n) return null; let l = n; try { l = decodeURIComponent(n) } catch (e) {} let u = l.split("/"), d = null, _ = 0; for (let e = u.length - 1; e >= 0; e--) { let t = u[e]; if ("" !== t && "." !== t) { if (".." === t) { _++; continue } if (_ > e) break; d = u[e - _]; break } } if (null == d) return null; let c = d.split("."); if (c.length < 2) return null; let E = null === (t = c.pop()) || void 0 === t ? void 0 : t.toLowerCase(); return null != E && s.has(E) ? E : null } }, 894257: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SYSTEM_USER: function() { return i }, URGENT_MODAL_KEY: function() { return r } }); let i = "643945264868098049", r = "URGENT_MESSAGE_MODAL" }, 307876: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("232567"), r = n("147913"), s = n("592125"), a = n("944486"), o = n("594174"), l = n("894257"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = !1; function c(e) { let t = o.default.getCurrentUser(); if (null == t) return; let n = a.default.getChannelId(), i = s.default.getDMFromUserId(l.SYSTEM_USER); if (!t.hasUrgentMessages() || i === n) return E({ channelId: n }); !_ && (_ = !0, e()) } function E(e) { let { channelId: t } = e, n = o.default.getCurrentUser(), r = t === s.default.getDMFromUserId(l.SYSTEM_USER); null != n && n.hasUrgentMessages() && r && (_ = !1, i.setFlag(u.UserFlags.HAS_UNREAD_URGENT_MESSAGES, !1)) } class I extends r.default { constructor(e) { super(), d(this, "handleShowUrgentMessageAlert", void 0), d(this, "actions", void 0), this.handleShowUrgentMessageAlert = e, this.actions = { POST_CONNECTION_OPEN: () => c(this.handleShowUrgentMessageAlert), MESSAGE_CREATE: () => c(this.handleShowUrgentMessageAlert), CHANNEL_SELECT: E } } } }, 559523: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("307876"), a = n("894257"), o = n("981631"); t.default = new s.default(() => (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("67607")]).then(n.bind(n, "520615")); return t => (0, i.jsx)(e, { ...t }) }, { modalKey: a.URGENT_MODAL_KEY, onCloseRequest: o.NOOP_NULL })) }, 727866: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("481060"), s = n("759231"), a = n("689938"); let o = (e, t) => (0, i.jsxs)(r.Text, { color: "text-danger", style: { display: "flex", gap: "4px", margin: "8px 0 4px 0", alignItems: "center" }, variant: "text-sm/normal", children: [(0, i.jsx)(s.default, { width: 14, height: 14 }), e] }, t); t.default = { getTextInVoiceSendMessageChannelPermissionText: function(e) { return e ? a.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_WITH_TIV_DESCRIPTION_TEXT_DISABLED.format({ warningHook: o }) : a.default.Messages.ROLE_PERMISSIONS_SEND_MESSAGES_DESCRIPTION_TEXT }, getTextInVoiceReadMessageHistoryChannelPermissionText: function(e) { return e ? a.default.Messages.ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_WITH_TIV_DESCRIPTION_TEXT_DISABLED.format({ warningHook: o }) : a.default.Messages.ROLE_PERMISSIONS_READ_MESSAGE_HISTORY_DESCRIPTION_TEXT } } }, 813852: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ColorMixDesktopClientThemesExperiment: function() { return i } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-05_color_mixed_desktop_client_themes", label: "Better Desktop Client Themes", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Enable use of color-mix for desktop themes", config: { enabled: !0 } }] }) }, 892254: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("780384"), a = n("607070"), o = n("514361"), l = n("57132"), u = n("210887"), d = n("231338"); function _(e) { let { children: t } = e, n = (0, r.useStateFromStores)([u.default], () => u.default.theme), _ = (0, l.useInMainTabsExperiment)(), c = (0, r.useStateFromStores)([o.default], () => o.default.gradientPreset), { saturation: E, contrast: I } = (0, r.useStateFromStoresObject)([a.default], () => ({ saturation: a.default.saturation, contrast: a.default.contrast })), T = 0; return _ && (T = (0, s.setThemeFlag)(T, s.ThemeContextFlags.MOBILE_REDESIGN_ENABLED)), null != c && (T = c.theme === d.ThemeTypes.LIGHT ? (0, s.setThemeFlag)(T, s.ThemeContextFlags.MOBILE_LIGHT_GRADIENT_THEME_ENABLED) : (0, s.setThemeFlag)(T, s.ThemeContextFlags.MOBILE_DARK_GRADIENT_THEME_ENABLED)), 1 !== E && (T = (0, s.setThemeFlag)(T, s.ThemeContextFlags.REDUCE_SATURATION_ENABLED)), (0, i.jsx)(s.RootThemeContextProvider, { theme: n, flags: T, saturation: E, contrast: I, children: t }) } }, 541049: function(e, t, n) { "use strict"; function i() { return null } n.r(t), n.d(t, { default: function() { return i } }) }, 601070: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("131704"), c = n("592125"), E = n("430824"), I = n("306680"), T = n("944486"), f = n("709054"), S = n("344185"), h = n("569471"), A = n("819168"), m = n("176505"); let N = {}, p = {}, O = {}, C = {}, R = {}, g = {}, L = null, v = {}; function D() { for (let e in N = {}, R = {}, p = {}, O = {}, C = {}, L = T.default.getChannelId(), v) clearTimeout(v[e]); v = {}, S.default.forEachGuild(e => { y(e) }), P() } function M(e) { for (let t in delete N[e], delete R[e], delete p[e], delete O[e], delete C[e], y(e), O[e]) b(e, t) } function y(e) { let t = S.default.getThreadsForGuild(e); for (let e in t) for (let n in t[e]) { Y(n); let e = c.default.getChannel(n); if (null == e) continue; let t = h.default.joinTimestamp(n); if (null != t) { let n = { channel: e, joinTimestamp: t.getTime() }, { isUnread: i, isRelevant: r, isTimedRelevant: s } = F(e); j(N, e, n, !1), j(R, e, r ? n : null, !1), j(p, e, i ? n : null, !1), s && H(e, !0) } else { j(O, e, e, !1); let t = I.default.isForumPostUnread(e.id); j(C, e, t ? e : null, !1) } } } function P() { for (let e in g = {}, O) for (let t in O[e]) b(e, t) } function U(e) { let t = c.default.getBasicChannel(e); null != t && _.THREADED_CHANNEL_TYPES.has(t.type) && b(t.guild_id, t.id) } function b(e, t) { let n = c.default.getChannel(t); if (null == n || !n.isForumLikeChannel()) return; if (null == g[e] && (g[e] = {}), g[e][t] = 0, null == O[e] || null == O[e][t]) return; let i = E.default.getGuild(e); if (null == i) return; let r = I.default.getTrackedAckMessageId(t); if (null == r) { let e = Date.now(); null != i.joinedAt && (i.joinedAt instanceof Date ? e = i.joinedAt.getTime() : "string" == typeof i.joinedAt && (e = new Date(i.joinedAt).getTime())), r = f.default.fromTimestamp(e) } for (let n in O[e][t]) t === L ? I.default.isNewForumThread(n, t, i) && g[e][t]++ : f.default.compare(n, r) > 0 && !I.default.hasOpenedThread(n) && g[e][t]++ } function G(e, t, n) { if (null == t) return !1; let i = c.default.getChannel(n), r = h.default.joinTimestamp(n); if (null != i && S.default.isActive(e, t, n)) { if (null != r) { let e = { channel: i, joinTimestamp: r.getTime() }, { isUnread: t, isRelevant: n, isTimedRelevant: s } = F(i); j(N, i, e, !0), j(R, i, n ? e : null, !0), j(p, i, t ? e : null, !0), j(O, i, null, !0), j(C, i, null, !0), H(i, s) } else { let e = I.default.isForumPostUnread(i.id); j(N, i, null, !0), j(p, i, null, !0), j(R, i, null, !0), j(O, i, i, !0), j(C, i, e ? i : null, !0), Y(i.id) } b(e, t) } else W(N, e, t, n), W(R, e, t, n), W(p, e, t, n), W(O, e, t, n), W(C, e, t, n), Y(n), b(e, t) } function w(e) { return G(e.channel.guild_id, e.channel.parent_id, e.channel.id) } function k(e) { let t = c.default.getChannel(e.id); return !!(null != t && S.default.isActive(e.guildId, t.parent_id, e.id)) && G(t.guild_id, t.parent_id, t.id) } function B(e) { let t = c.default.getChannel(e.channelId); if (null == t) V(); else { let { guild_id: e, parent_id: i } = t; if (!_.THREAD_CHANNEL_TYPES.has(t.type)) { var n; return !!(Number(null === (n = g[e]) || void 0 === n ? void 0 : n[t.id]) > 0) && (b(e, t.id), !0) } if (null == i) return !1; if (K(N, t)) { let { isUnread: n, isRelevant: r, isTimedRelevant: s } = F(t); H(t, s); let a = K(p, t), o = K(R, t); if (n === a && r === o) return !1; let l = N[e][i][t.id], u = n ? l : null, d = r ? l : null; j(p, t, u, !0), j(R, t, d, !0), b(e, i) } else { let e = K(C, t), n = I.default.isForumPostUnread(t.id); if (n === e) return !1; j(C, t, n ? t : null, !0) } } } function V() { for (let e in p = {}, R = {}, N) for (let t in N[e]) for (let n in N[e][t]) { let i = N[e][t][n], { isUnread: r, isRelevant: s, isTimedRelevant: a } = F(i.channel); r && j(p, i.channel, i, !1), s && j(R, i.channel, i, !1), H(i.channel, a) } for (let e in C = {}, O) for (let t in O[e]) for (let n in O[e][t]) { let i = O[e][t][n]; I.default.isForumPostUnread(n) && j(C, i, i, !1) } P() } function x() { let e = L; if ((L = T.default.getChannelId()) === e) return !1; U(e), U(L) } function F(e) { let t = I.default.getMentionCount(e.id) > 0, n = I.default.hasUnread(e.id) && !h.default.isMuted(e.id), i = e.hasFlag(m.ChannelFlags.PINNED), r = e.isActiveThread(), s = r && (0, A.default)(e) > Date.now(); return { isUnread: (r || i) && n || t, isRelevant: s || i || n || t, isTimedRelevant: s } } function H(e, t) { Y(e.id), t && function(e) { v[e.id] = setTimeout(() => { let t = c.default.getChannel(e.id); null != t && d.default.dispatch({ type: "THREAD_UPDATE", channel: t }) }, (0, A.default)(e) - Date.now() + 1) }(e) } function Y(e) { e in v && (clearTimeout(v[e]), delete v[e]) } function j(e, t, n, i) { let { guild_id: r, parent_id: s, id: a } = t; null != r && null != s && null != a && (!(r in e) && (e[r] = {}), !(s in e[r]) && (e[r][s] = {}), i && (e[r] = { ...e[r], [s]: { ...e[r][s] } }), null === n ? (delete e[r][s][a], l().isEmpty(e[r][s]) && delete e[r][s]) : e[r][s][a] = n) } function W(e, t, n, i) { if (null != t && null != n && null != i) z(e, t, n, i) && (e[t] = { ...e[t], [n]: { ...e[t][n] } }, delete e[t][n][i], l().isEmpty(e[t][n]) && delete e[t][n]) } function K(e, t) { return z(e, t.guild_id, t.parent_id, t.id) } function z(e, t, n, i) { return t in e && n in e[t] && i in e[t][n] } let Z = {}, X = {}, Q = {}, q = {}, J = {}; class $ extends(i = u.default.Store) { initialize() { this.waitFor(S.default, c.default, h.default, I.default), this.syncWith([T.default], x) } hasActiveJoinedUnreadThreads(e, t) { return e in p && t in p[e] } getActiveUnjoinedThreadsForParent(e, t) { var n; return e in O && null !== (n = O[e][t]) && void 0 !== n ? n : q } getActiveJoinedThreadsForParent(e, t) { var n; return e in N && null !== (n = N[e][t]) && void 0 !== n ? n : Q } getActiveJoinedThreadsForGuild(e) { var t; return null !== (t = N[e]) && void 0 !== t ? t : Z } getActiveJoinedUnreadThreadsForGuild(e) { var t; return null !== (t = p[e]) && void 0 !== t ? t : Z } getActiveJoinedUnreadThreadsForParent(e, t) { var n; return null !== (n = this.getActiveJoinedUnreadThreadsForGuild(e)[t]) && void 0 !== n ? n : Q } getActiveJoinedRelevantThreadsForGuild(e) { var t; return null !== (t = R[e]) && void 0 !== t ? t : Z } getActiveJoinedRelevantThreadsForParent(e, t) { var n; return null !== (n = this.getActiveJoinedRelevantThreadsForGuild(e)[t]) && void 0 !== n ? n : Q } getActiveUnjoinedThreadsForGuild(e) { var t; return null !== (t = O[e]) && void 0 !== t ? t : X } getActiveUnjoinedUnreadThreadsForGuild(e) { var t; return null !== (t = C[e]) && void 0 !== t ? t : Z } getActiveUnjoinedUnreadThreadsForParent(e, t) { var n; return null !== (n = this.getActiveUnjoinedUnreadThreadsForGuild(e)[t]) && void 0 !== n ? n : Q } getNewThreadCountsForGuild(e) { var t; return null !== (t = g[e]) && void 0 !== t ? t : J } computeAllActiveJoinedThreads(e) { let t = []; for (let n in N) if (n === e || null == e) for (let e in N[n]) for (let i in N[n][e]) t.push(N[n][e][i].channel); return t } getNewThreadCount(e, t) { var n, i; return null !== (i = null === (n = g[e]) || void 0 === n ? void 0 : n[t]) && void 0 !== i ? i : 0 } getActiveThreadCount(e, t) { var n, i, r, s; let a = l().size(null !== (r = null === (n = N[e]) || void 0 === n ? void 0 : n[t]) && void 0 !== r ? r : {}); return a + l().size(null !== (s = null === (i = O[e]) || void 0 === i ? void 0 : i[t]) && void 0 !== s ? s : {}) } } a = "ActiveJoinedThreadsStore", (s = "displayName") in(r = $) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new $(d.default, { CONNECTION_OPEN: D, OVERLAY_INITIALIZE: D, THREAD_LIST_SYNC: function(e) { let { guildId: t } = e; return M(t) }, LOAD_THREADS_SUCCESS: D, LOAD_ARCHIVED_THREADS_SUCCESS: D, SEARCH_FINISH: D, MOD_VIEW_SEARCH_FINISH: D, GUILD_CREATE: function(e) { let { guild: t } = e; return M(t.id) }, GUILD_DELETE: D, CURRENT_USER_UPDATE: D, THREAD_CREATE: w, THREAD_UPDATE: w, THREAD_DELETE: w, CHANNEL_UPDATES: function(e) { let { channels: t } = e; for (let e of t) if (e.isNSFW() !== function(e, t) { if (null == t) return !1; let n = N[e], i = null == n ? null : n[t]; if (null != i) { for (let e in i) if (i[e].channel.isNSFW()) return !0 } let r = O[e], s = null == r ? null : r[t]; if (null != s) { for (let e in s) if (s[e].isNSFW()) return !0 } return !1 }(e.guild_id, e.parent_id)) { D(); return } return !1 }, CHANNEL_DELETE: function(e) { let { channel: t } = e, n = !1; return null != t.guild_id && null != t.parent_id && (t.guild_id in N && t.parent_id in N[t.guild_id] && (delete N[t.guild_id][t.parent_id], n = !0), t.guild_id in p && t.parent_id in p[t.guild_id] && (delete p[t.guild_id][t.parent_id], n = !0), t.guild_id in R && t.parent_id in R[t.guild_id] && (f.default.keys(R[t.guild_id][t.parent_id]).forEach(Y), delete R[t.guild_id][t.parent_id], n = !0), t.guild_id in O && t.parent_id in O[t.guild_id] && (delete O[t.guild_id][t.parent_id], n = !0), t.guild_id in C && t.parent_id in C[t.guild_id] && (delete C[t.guild_id][t.parent_id], n = !0), n && b(t.guild_id, t.parent_id)), n }, THREAD_MEMBER_UPDATE: k, THREAD_MEMBERS_UPDATE: k, LOAD_MESSAGES_SUCCESS: B, MESSAGE_CREATE: B, MESSAGE_DELETE: B, MESSAGE_DELETE_BULK: B, MESSAGE_ACK: B, CHANNEL_ACK: B, CHANNEL_LOCAL_ACK: B, CHANNEL_SELECT: function(e) { B(e), x() }, PASSIVE_UPDATE_V2: function(e) { if (e.channels.length > 0) return M(e.guildId) }, WINDOW_FOCUS: V, UPDATE_CHANNEL_DIMENSIONS: V, DRAWER_OPEN: V, DRAWER_CLOSE: V, BULK_ACK: V }) }, 344185: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("131704"), c = n("592125"), E = n("709054"); let I = {}, T = new Set; function f(e) { return { id: e.id, parentId: e.parent_id } } function S(e) { e in I && delete I[e] } function h(e) { null != e.threads && e.threads.length > 0 && (I[e.id] = {}, e.threads.filter(e => _.ALL_CHANNEL_TYPES.has(e.type)).forEach(t => A(e.id, t))), e.hasThreadsSubscription && T.add(e.id) } function A(e, t) { let n = I[e], i = t.parent_id; !(i in n) && (n[i] = {}), I[e][i][t.id] = f(t) } function m(e) { var t, n; let { channel: i } = e; if (!_.ALL_CHANNEL_TYPES.has(i.type)) return !1; if ((null === (t = i.threadMetadata) || void 0 === t ? void 0 : t.archived) === !0) return N(i); { let e = null !== (n = I[i.guild_id]) && void 0 !== n ? n : {}; I[i.guild_id] = { ...e, [i.parent_id]: { ...e[i.parent_id], [i.id]: f(i) } } } } function N(e) { let { guild_id: t, parent_id: n, id: i } = e; if (null == t || null == n || !(t in I) || !(n in I[t]) || !(i in I[t][n])) return !1; I[t] = { ...I[t], [n]: { ...I[t][n] } }, delete I[t][n][i], l().isEmpty(I[t][n]) && delete I[t][n] } let p = {}; class O extends(i = u.default.Store) { initialize() { this.waitFor(c.default) } isActive(e, t, n) { return null != e && null != this.getThreadsForParent(e, t)[n] } getThreadsForGuild(e) { var t; return null !== (t = I[e]) && void 0 !== t ? t : p } getThreadsForParent(e, t) { var n; return null !== (n = this.getThreadsForGuild(e)[t]) && void 0 !== n ? n : p } hasThreadsForChannel(e, t) { return !l().isEmpty(this.getThreadsForParent(e, t)) } forEachGuild(e) { E.default.keys(I).forEach(t => { e(t, I[t]) }) } hasLoaded(e) { return T.has(e) } } a = "ActiveThreadsStore", (s = "displayName") in(r = O) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new O(d.default, { CONNECTION_OPEN: function(e) { I = {}, T.clear(), e.guilds.forEach(e => { h(e) }) }, OVERLAY_INITIALIZE: function(e) { let { channels: t } = e; I = {}, l()(t).filter(e => _.THREAD_CHANNEL_TYPES.has(e.type)).groupBy("guild_id").forEach((e, t) => { I[t] = {}, e.forEach(e => A(t, e)) }) }, GUILD_CREATE: function(e) { let { guild: t } = e; S(t.id), h(t) }, GUILD_DELETE: function(e) { let { guild: t } = e; S(t.id) }, THREAD_CREATE: m, THREAD_UPDATE: m, THREAD_LIST_SYNC: function(e) { let { guildId: t, threads: n, channelIds: i } = e; for (let e in null == i && T.add(t), I[t] = { ...I[t] }, I[t]) I[t][e] = { ...I[t][e] }; n.forEach(e => A(t, e)) }, THREAD_DELETE: function(e) { let { channel: t } = e; return N(t) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; if (null == t.guild_id || !(t.guild_id in I)) return !1; I[t.guild_id] = { ...I[t.guild_id] }, delete I[t.guild_id][t.id] } }) }, 920303: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { PAGE_SIZE: function() { return N } }), n("47120"); var r, s, a, o, l = n("392711"), u = n.n(l), d = n("683860"), _ = n("442837"), c = n("570140"), E = n("882252"), I = n("228392"), T = n("131704"), f = n("592125"), S = n("306680"), h = n("823379"), A = n("709054"), m = n("569471"); let N = 25, p = !1, O = !0, C = !1, R = !1, g = null, L = d.ThreadSortOrder.LATEST_ACTIVITY, v = [], D = 0; function M() { p = !1, O = !0, C = !1, R = !1, g = null, L = d.ThreadSortOrder.LATEST_ACTIVITY, i = new Set, D = 0, v = [] } function y(e, t) { return t === d.ThreadSortOrder.LATEST_ACTIVITY ? S.default.lastMessageId(e.id) : e.id } function P() { if (null == g) return !1; let e = !C, t = f.default.getChannel(v[v.length - 1]), n = null == t ? null : y(t, L); v = u()(f.default.getAllThreadsForParent(g)).filter(e => e.isArchivedThread()).filter(t => { var r; if (0 !== i.size && (null === (r = t.appliedTags) || void 0 === r ? void 0 : r.some(e => i.has(e))) !== !0) return !1; if (e || null == n) return !0; { let e = null == t ? null : y(t, L); return null != e && A.default.compare(e, n) >= 0 } }).sort((e, t) => A.default.compare(y(e, L), y(t, L))).map(e => e.id).reverse().value() } function U(e) { if (!(v.indexOf(e) >= 0)) return !1; v = v.filter(t => t !== e) } let b = []; class G extends(r = _.default.Store) { initialize() { this.waitFor(f.default, m.default, S.default) } get canLoadMore() { return C && !p && !R } get nextOffset() { return D } get isInitialLoad() { return O } isLoading(e, t, n) { return g === e && L === t && (0, h.areSetsEqual)(i, n) ? p : (M(), !1) } getThreads(e, t, n) { return g === e && L === t && (0, h.areSetsEqual)(i, n) ? v : b } } o = "ArchivedThreadsStore", (a = "displayName") in(s = G) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new G(c.default, { CONNECTION_OPEN: M, THREAD_DELETE: function(e) { let { channel: t } = e; return U(t.id) }, THREAD_UPDATE: function(e) { let { channel: t } = e; return g === t.parent_id && !!(0, E.isForumPostPinned)(t.id) && void U(t.id) }, CHANNEL_DELETE: function(e) { if (e.channel.id !== g) return !1; M() }, LOAD_ARCHIVED_THREADS: function(e) { (e.channelId !== g || e.sortOrder !== L || !(0, h.areSetsEqual)(e.tagFilter, i)) && M(), g = e.channelId, L = e.sortOrder, i = e.tagFilter instanceof Set ? e.tagFilter : new Set(e.tagFilter), p = !0, O = !1 }, LOAD_ARCHIVED_THREADS_SUCCESS: function(e) { if (e.channelId !== g || e.sortOrder !== L || !(0, h.areSetsEqual)(e.tagFilter, i)) return !1; let t = e.threads.filter(e => T.ALL_CHANNEL_TYPES.has(e.type)).map(e => e.id); v = v.concat(t); let n = f.default.getChannel(g); null != n && n.isForumLikeChannel() && (0, I.trackForumMorePostsLoaded)({ guildId: n.guild_id, channelId: n.id, numArchivedThreads: v.length, hasMoreThreads: e.hasMore, filterTagIds: Array.from(e.tagFilter), sortOrder: e.sortOrder }), P(), C = e.hasMore, D = e.offset + N, p = !1, O = !1 }, LOAD_ARCHIVED_THREADS_FAIL: function(e) { if (e.channelId !== g || e.sortOrder !== L || !(0, h.areSetsEqual)(e.tagFilter, i)) return !1; p = !1, R = !0, O = !1 }, RESORT_THREADS: function(e) { return (null == g || null == e.channelId || g === e.channelId) && P() } }) }, 569471: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("798140"), c = n("131704"), E = n("314897"); let I = {}, T = new _.default, f = new Set; function S(e) { I = l()(I).reject(t => t.guildId === e).keyBy("threadId").value() } function h(e) { var t; null === (t = e.threads) || void 0 === t || t.forEach(A) } function A(e) { c.ALL_CHANNEL_TYPES.has(e.type) && null != e.member && (I[e.id] = { threadId: e.id, guildId: e.guild_id, flags: e.member.flags, muted: e.member.muted, muteConfig: e.member.muteConfig, joinTimestamp: new Date(e.member.joinTimestamp) }, m(e.id)) } function m(e) { let t = I[e]; T.clearTimer(e), !0 === t.muted ? ((f = new Set(f)).add(e), T.setTimer(e, t.muteConfig, () => { I[e].muted = !1, (f = new Set(f)).delete(e), O.emitChange() }) && (I[e].muted = !1, (f = new Set(f)).delete(e))) : (f = new Set(f)).delete(e) } function N(e) { let { guildId: t, members: n } = e; null != t && null != n && n.forEach(e => { I[e.id] = { threadId: e.id, guildId: t, flags: e.flags, muted: e.muted, muteConfig: e.muteConfig, joinTimestamp: new Date(e.joinTimestamp) }, m(e.id) }) } class p extends(i = u.default.Store) { hasJoined(e) { return e in I } joinTimestamp(e) { var t; return null === (t = I[e]) || void 0 === t ? void 0 : t.joinTimestamp } flags(e) { var t; return null === (t = I[e]) || void 0 === t ? void 0 : t.flags } getInitialOverlayState() { return Object.values(I) } getMuteConfig(e) { var t; return null === (t = I[e]) || void 0 === t ? void 0 : t.muteConfig } getMutedThreads() { return f } isMuted(e) { return f.has(e) } } a = "JoinedThreadsStore", (s = "displayName") in(r = p) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a; let O = new p(d.default, { CONNECTION_OPEN: function(e) { T.reset(), f = new Set, I = {}, e.guilds.forEach(e => { h(e) }) }, OVERLAY_INITIALIZE: function(e) { let { joinedThreads: t } = e; I = l()(t).map(e => ({ ...e, joinTimestamp: new Date(e.joinTimestamp) })).keyBy("threadId").value() }, GUILD_CREATE: function(e) { let { guild: t } = e; S(t.id), h(t) }, GUILD_DELETE: function(e) { let { guild: t } = e; S(t.id) }, THREAD_CREATE: function(e) { let { channel: t } = e; A(t) }, THREAD_LIST_SYNC: N, SEARCH_FINISH: N, MOD_VIEW_SEARCH_FINISH: N, LOAD_THREADS_SUCCESS: N, LOAD_ARCHIVED_THREADS_SUCCESS: N, THREAD_DELETE: function(e) { let { channel: t } = e; if (!(t.id in I)) return !1; I = { ...I }, delete I[t.id] }, THREAD_MEMBER_UPDATE: function(e) { if (E.default.getId() !== e.userId) return !1; I[e.id] = { threadId: e.id, guildId: e.guildId, flags: e.flags, muted: e.muted, muteConfig: e.muteConfig, joinTimestamp: new Date(e.joinTimestamp) }, m(e.id) }, THREAD_MEMBER_LOCAL_UPDATE: function(e) { let { id: t, userId: n, guildId: i, isJoining: r } = e; if (E.default.getId() !== n || null === i) return !1; r ? I[t] = { threadId: t, guildId: i, flags: 0, muted: !0, muteConfig: { end_time: void 0 }, joinTimestamp: new Date } : delete I[t] }, THREAD_MEMBERS_UPDATE: function(e) { var t, n; let i = !1; return (null === (t = e.removedMemberIds) || void 0 === t ? void 0 : t.includes(E.default.getId())) && e.id in I && (I = { ...I }, delete I[e.id], i = !0), null === (n = e.addedMembers) || void 0 === n || n.forEach(t => { t.userId === E.default.getId() && ((I = { ...I })[e.id] = { threadId: e.id, guildId: e.guildId, flags: t.flags, muted: t.muted, muteConfig: t.muteConfig, joinTimestamp: new Date(t.joinTimestamp) }, m(e.id), i = !0) }), i } }); t.default = O }, 911560: function(e, t, n) { "use strict"; n.r(t); var i = n("266067"), r = n("544891"), s = n("570140"), a = n("38618"), o = n("131704"), l = n("592125"), u = n("944486"), d = n("981631"), _ = n("176505"); let c = {}, E = !1; function I(e) { if (null == e || e === _.FAKE_PLACEHOLDER_PRIVATE_CHANNEL_ID || (0, _.isStaticChannelRoute)(e) || null != l.default.getChannel(e)) return Promise.resolve(); if (E || (E = !0, s.default.subscribe("CONNECTION_OPEN", () => { c = {}; let e = u.default.getChannelId(), t = l.default.getChannel(e); null != e && null == t && I(e) })), !a.default.isConnected()) return Promise.resolve(); let t = c[e]; if (null != t) return "LOADING" === t.type ? t.promise : Promise.resolve(); let n = (0, i.matchPath)(location.pathname, { path: d.Routes.CHANNEL(":guildId", ":channelId", ":messageId"), exact: !0 }), T = r.HTTP.get(d.Endpoints.CHANNEL(e)).then(t => { let { body: i } = t; if (c[e] = { type: "LOADED" }, o.THREAD_CHANNEL_TYPES.has(i.type)) { var r; s.default.dispatch({ type: "THREAD_CREATE", channel: (0, o.createChannelRecordFromServer)(i), messageId: null == n ? void 0 : null === (r = n.params) || void 0 === r ? void 0 : r.messageId }) } }).catch(() => { var t; c[e] = { type: "NOT_FOUND" }, s.default.dispatch({ type: "CHANNEL_DELETE", channel: { id: e, guild_id: null == n ? void 0 : null === (t = n.params) || void 0 === t ? void 0 : t.guildId, parent_id: void 0 } }) }); return c[e] = { type: "LOADING", promise: T }, T } t.default = { loadThread: I } }, 346479: function(e, t, n) { "use strict"; n.r(t), n("789020"); var i = n("697988"), r = n("544891"), s = n("570140"), a = n("668781"), o = n("430742"), l = n("367907"), u = n("555573"), d = n("131704"), _ = n("314897"), c = n("592125"), E = n("496675"), I = n("823379"), T = n("920303"), f = n("569471"), S = n("91159"), h = n("952537"), A = n("981631"), m = n("176505"), N = n("689938"); function p(e, t) { return r.HTTP.patch({ url: A.Endpoints.CHANNEL(e.id), body: t }).then(t => (s.default.dispatch({ type: "THREAD_UPDATE", channel: (0, d.createChannelRecordFromServer)(t.body) }), e.isForumPost() && null != e.parent_id && s.default.dispatch({ type: "RESORT_THREADS", channelId: e.parent_id }), t)) } function O(e, t) { s.default.dispatch({ type: "THREAD_MEMBER_LOCAL_UPDATE", id: e.id, guildId: e.getGuildId(), userId: _.default.getId(), isJoining: t }) } t.default = { archiveThread(e, t) { let n = { archived: !0 }; return t && (n.locked = !0), p(e, n) }, async lockThread(e) { let t = e.isArchivedThread(); return t && await this.unarchiveThread(e, !1), p(e, { locked: !0, archived: t }) }, async unlockThread(e) { let t = e.isArchivedThread(); return t && await this.unarchiveThread(e, !0), p(e, { locked: !1, archived: t }) }, async unarchiveThread(e, t) { let n = { archived: !1 }, i = e.isForumPost(); t && (n.locked = !1); try { return await p(e, n) } catch (e) { var r, s; throw (null === (r = e.body) || void 0 === r ? void 0 : r.code) === A.AbortCodes.TOO_MANY_THREADS ? a.default.show({ title: i ? N.default.Messages.CANNOT_UNARCHIVE_FORUM_POST : N.default.Messages.CANNOT_UNARCHIVE_THREAD, body: i ? N.default.Messages.TOO_MANY_FORUM_POSTS_MESSAGE : N.default.Messages.TOO_MANY_THREADS_MESSAGE }) : (null === (s = e.body) || void 0 === s ? void 0 : s.code) === A.AbortCodes.TOO_MANY_ANNOUNCEMENT_THREADS ? a.default.show({ title: N.default.Messages.CANNOT_UNARCHIVE_THREAD, body: N.default.Messages.TOO_MANY_ANNOUNCEMENT_THREADS_MESSAGE }) : 429 === e.status ? a.default.show({ title: i ? N.default.Messages.CANNOT_UNARCHIVE_FORUM_POST : N.default.Messages.CANNOT_UNARCHIVE_THREAD, body: N.default.Messages.RATE_LIMITED }) : a.default.show({ title: N.default.Messages.ERROR, body: N.default.Messages.ERROR_OCCURRED_TRY_AGAIN }), e } }, async unarchiveThreadIfNecessary(e) { var t; let n = c.default.getChannel(e), i = E.default.can(A.Permissions.MANAGE_THREADS, n); null != n && n.isArchivedThread() && (i || (null === (t = n.threadMetadata) || void 0 === t ? void 0 : t.locked) !== !0) && await this.unarchiveThread(n, !1) }, setInvitable: (e, t) => p(e, { invitable: t }), async joinThread(e, t) { e.isForumPost() && O(e, !0); try { return await r.HTTP.post({ url: A.Endpoints.THREAD_MEMBER(e.id), query: { location: t } }) } catch (t) { var n; if ((null === (n = t.body) || void 0 === n ? void 0 : n.code) === A.AbortCodes.TOO_MANY_THREAD_MEMBERS) { let t = e.isForumPost(); a.default.show({ title: t ? N.default.Messages.CANNOT_JOIN_FORUM_POST : N.default.Messages.CANNOT_JOIN_THREAD, body: t ? N.default.Messages.TOO_MANY_MEMBERS_MESSAGE_FORUM_POST : N.default.Messages.TOO_MANY_MEMBERS_MESSAGE }) } else a.default.show({ title: N.default.Messages.ERROR, body: N.default.Messages.ERROR_OCCURRED_TRY_AGAIN }); e.isForumPost() && O(e, !1) } }, async addMember(e, t, n) { try { return await r.HTTP.post({ url: A.Endpoints.THREAD_MEMBER(e.id, t), query: { location: n } }) } catch (t) { var i; if ((null === (i = t.body) || void 0 === i ? void 0 : i.code) === A.AbortCodes.TOO_MANY_THREAD_MEMBERS) { let t = e.isForumPost(); a.default.show({ title: t ? N.default.Messages.CANNOT_ADD_USER_TO_FORUM_POST : N.default.Messages.CANNOT_ADD_USER_TO_THREAD, body: t ? N.default.Messages.TOO_MANY_MEMBERS_MESSAGE_FORUM_POST : N.default.Messages.TOO_MANY_MEMBERS_MESSAGE }) } else a.default.show({ title: N.default.Messages.ERROR, body: N.default.Messages.ERROR_OCCURRED_TRY_AGAIN }) } }, leaveThread: (e, t) => (e.isForumPost() && O(e, !1), r.HTTP.del({ url: A.Endpoints.THREAD_MEMBER(e.id), query: { location: t } })), removeMember: (e, t, n) => r.HTTP.del({ url: A.Endpoints.THREAD_MEMBER(e.id, t), query: { location: n } }), setAutoArchiveDuration: (e, t) => r.HTTP.patch({ url: A.Endpoints.CHANNEL(e.id), body: { auto_archive_duration: t } }), pin(e) { let t = e.flags | m.ChannelFlags.PINNED; this.updateFlags(e, t, e.isArchivedThread()) }, unpin(e) { let t = e.flags & ~m.ChannelFlags.PINNED; this.updateFlags(e, t) }, async updateFlags(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; s.default.dispatch({ type: "THREAD_UPDATE", channel: e.merge({ flags: t }) }); let i = { flags: t }; n && (i.archived = !1); try { await r.HTTP.patch({ url: A.Endpoints.CHANNEL(e.id), body: i }) } catch { s.default.dispatch({ type: "THREAD_UPDATE", channel: e }) } }, async replacePin(e, t) { let n = e.merge({ flags: e.flags & ~m.ChannelFlags.PINNED }), i = t.merge({ flags: t.flags | m.ChannelFlags.PINNED }); s.default.dispatch({ type: "THREAD_UPDATE", channel: n }), s.default.dispatch({ type: "THREAD_UPDATE", channel: i }), await this.unarchiveThreadIfNecessary(e.id), await this.unarchiveThreadIfNecessary(t.id); try { await r.HTTP.patch({ url: A.Endpoints.CHANNEL(e.id), body: { flags: e.flags & ~m.ChannelFlags.PINNED } }) } catch { s.default.dispatch({ type: "THREAD_UPDATE", channel: e }), s.default.dispatch({ type: "THREAD_UPDATE", channel: t }); return } try { await r.HTTP.patch({ url: A.Endpoints.CHANNEL(t.id), body: { flags: t.flags | m.ChannelFlags.PINNED } }) } catch { s.default.dispatch({ type: "THREAD_UPDATE", channel: t }) } }, openThreadCreationForMobile(e, t, n) { (0, l.trackWithMetadata)(A.AnalyticEvents.THREAD_CREATION_STARTED, { location: n, channel_id: e.id, guild_id: e.guild_id }), o.default.changeThreadSettings(e.id, { parentMessageId: t, isPrivate: !1, location: n }), null == t && (0, u.setActiveCommand)({ channelId: e.id, command: null, section: null }) }, async setNotificationSettings(e, t) { return (0, S.trackThreadNotificationSettingsUpdated)(e, t), !f.default.hasJoined(e.id) && await this.joinThread(e, "Change Notification Settings"), r.HTTP.patch({ url: A.Endpoints.THREAD_MEMBER_SETTINGS(e.id), body: t }) }, loadArchivedThreads(e, t, n, a, o) { !T.default.isLoading(t, n, a) && (s.default.dispatch({ type: "LOAD_ARCHIVED_THREADS", channelId: t, sortOrder: n, tagFilter: a }), r.HTTP.get({ url: A.Endpoints.THREAD_SEARCH(t), query: { archived: !0, sort_by: "last_message_time", sort_order: "desc", limit: T.PAGE_SIZE, tag: a.size > 0 ? Array.from(a).join(",") : void 0, tag_setting: i.ThreadSearchTagSetting.MATCH_SOME, offset: o }, retries: 2 }).then(i => { let { body: { threads: r, members: l, has_more: u, first_messages: d, most_recent_messages: _ } } = i; null == r ? s.default.dispatch({ type: "LOAD_ARCHIVED_THREADS_FAIL", channelId: t, sortOrder: n, tagFilter: a }) : s.default.dispatch({ type: "LOAD_ARCHIVED_THREADS_SUCCESS", guildId: e, channelId: t, offset: o, sortOrder: n, tagFilter: a, threads: r, firstMessages: d, mostRecentMessages: _, members: (null != l ? l : []).map(e => (0, h.default)(e)), owners: r.map(e => e.owner).filter(I.isNotNullish), hasMore: u }) }, () => { s.default.dispatch({ type: "LOAD_ARCHIVED_THREADS_FAIL", channelId: t, sortOrder: n, tagFilter: a }) })) }, async searchThreads(e, t, n, a) { let o = null != a && a.size > 0 ? Array.from(a).join(",") : void 0, { body: { threads: l, members: u, first_messages: d, most_recent_messages: _ } } = await r.HTTP.get({ url: A.Endpoints.THREAD_SEARCH(t), query: { name: n, tag: o, tag_setting: i.ThreadSearchTagSetting.MATCH_SOME } }); return s.default.dispatch({ type: "LOAD_THREADS_SUCCESS", threads: l, members: u, guildId: e, firstMessages: d, mostRecentMessages: _ }), l.map(e => e.id) } } }, 195663: function(e, t, n) { "use strict"; n.r(t), n.d(t, { doesThreadMembersActionAffectMe: function() { return r } }); var i = n("314897"); function r(e) { var t, n; let r = i.default.getId(); return null != r && (!!((null === (t = e.removedMemberIds) || void 0 === t ? void 0 : t.includes(r)) || (null === (n = e.addedMembers) || void 0 === n ? void 0 : n.some(e => e.userId === r))) || !1) } }, 968437: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAutoArchiveDuration: function() { return l }, getAutoArchiveOptions: function() { return o } }); var i = n("404759"), r = n.n(i); n("913527"); var s = n("124368"), a = n("689938"); function o() { return [{ label: a.default.Messages.AUTO_ARCHIVE_DURATION_1_HOUR, value: 60 }, { label: a.default.Messages.AUTO_ARCHIVE_DURATION_24_HOURS, value: 1440 }, { label: a.default.Messages.AUTO_ARCHIVE_DURATION_3_DAYS, value: 4320 }, { label: a.default.Messages.AUTO_ARCHIVE_DURATION_1_WEEK, value: 10080 }] } function l(e, t) { var n; return null !== (n = null != t ? t : null == e ? void 0 : e.defaultAutoArchiveDuration) && void 0 !== n ? n : s.DEFAULT_AUTO_ARCHIVE_DURATION } r()(() => o().map(e => e.value)) }, 124368: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_AUTO_ARCHIVE_DURATION: function() { return u }, FORUM_POST_CREATION_AUTOMOD_ERRORS: function() { return S }, FORUM_POST_CREATION_UPLOAD_ERRORS: function() { return f }, MAX_THREAD_MEMBERS_PREVIEW: function() { return c }, MAX_THREAD_MESSAGE_COUNT: function() { return _ }, MAX_THREAD_MESSAGE_COUNT_OLD: function() { return d }, MAX_THREAD_UNREAD_MESSAGE_COUNT: function() { return E }, OpenThreadAnalyticsLocations: function() { return i }, ThreadMemberFlags: function() { return I }, ThreadSortOrderReadableForAnalytics: function() { return r }, getThreadNotificationOptions: function() { return T } }), n("47120"); var i, r, s, a, o = n("981631"), l = n("689938"); let u = 4320, d = 50, _ = 1e5, c = 50, E = 25, I = { HAS_INTERACTED: 1, ALL_MESSAGES: 2, ONLY_MENTIONS: 4, NO_MESSAGES: 8 }; function T() { return [{ setting: I.ALL_MESSAGES, label: l.default.Messages.FORM_LABEL_ALL_MESSAGES }, { setting: I.ONLY_MENTIONS, label: l.default.Messages.FORM_LABEL_ONLY_MENTIONS.format() }, { setting: I.NO_MESSAGES, label: l.default.Messages.FORM_LABEL_NOTHING }] }(s = i || (i = {})).EMBED = "Embed", s.BROWSER = "Thread Browser", s.POPOUT = "Active Threads Popout", s.CHANNEL_LIST = "Channel List", s.GUILD_ACTIVE_THREADS_MODAL = "Guild Active Threads Modal", s.INBOX = "Inbox", s.FORUM = "Forum", s.VOICE_AUTO_OPEN = "Voice Auto Open", (a = r || (r = {})).LATEST_ACTIVITY = "Last Message", a.CREATION_DATE = "Creation"; let f = new Set([o.AbortCodes.TOO_MANY_ATTACHMENTS, o.AbortCodes.EXPLICIT_CONTENT, o.AbortCodes.ENTITY_TOO_LARGE, o.AbortCodes.EXPLICIT_CONTENT]), S = new Set([o.AbortCodes.AUTOMOD_MESSAGE_BLOCKED, o.AbortCodes.AUTOMOD_TITLE_BLOCKED]) }, 928477: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PrivateThreadMode: function() { return i }, createThread: function() { return U }, getDefaultThreadName: function() { return y }, getIsPrivate: function() { return M }, useCreateForumPostCommon: function() { return b }, useCreateThreadCommon: function() { return P }, usePrivateThreadMode: function() { return D } }), n("757143"), n("653041"), n("47120"); var i, r, s = n("470079"), a = n("544891"), o = n("570140"), l = n("668781"), u = n("430742"), d = n("904245"), _ = n("166459"), c = n("238349"), E = n("228392"), I = n("957730"), T = n("467798"), f = n("592125"), S = n("703558"), h = n("375954"), A = n("300429"), m = n("70956"), N = n("630388"), p = n("709054"), O = n("968437"), C = n("665906"), R = n("456077"), g = n("124368"), L = n("981631"), v = n("689938"); function D(e) { let t = (0, C.useCanStartPublicThread)(e); return (0, C.useCanStartPrivateThread)(e) ? t ? 2 : 3 : 1 } function M(e, t) { var n; if (3 === t) return !0; return null !== (n = e.isPrivate) && void 0 !== n && n } function y(e, t) { var n, i, r, s; let a = null == t ? null : h.default.getMessage(e.id, t), o = null !== (r = null == a ? void 0 : null === (i = a.embeds) || void 0 === i ? void 0 : null === (n = i[0]) || void 0 === n ? void 0 : n.rawTitle) && void 0 !== r ? r : ""; if ("" !== o) return o.length > 40 ? o.substring(0, 40) + "..." : o; { let t = I.default.unparse(null !== (s = null == a ? void 0 : a.content) && void 0 !== s ? s : "", e.id, !0), n = (0, R.default)(t.split("\n")[0], !0); n = n.replace(/^[ #-]+/, ""); let i = []; for (;;) { let e = n.match(/(?:\s|[!@#$%^&*()_\-+={}[\]:";'<>?,./])+/); if (null == e || null == e.index) { i.push(n); break } i.push(n.substring(0, e.index)), i.push(e[0]), n = n.substring(e.index + e[0].length) } let r = i[0]; for (let e = 1; e < i.length; e++) { let t = r + i[e]; if (t.length > 40) break; r = t } return r.length > 40 && (r = r.substring(0, 40) + "..."), r } } function P(e) { let { parentChannel: t, parentMessageId: n, threadSettings: i, privateThreadMode: r, location: o, onThreadCreated: l, useDefaultThreadName: c, uploadHandler: E } = e; return s.useCallback(async (e, s, T) => { var h; let A = null == n, m = M(i, r), N = null !== (h = i.name) && void 0 !== h ? h : ""; if ("" === N && c) { let e = y(t, n); N = "" !== e ? e : v.default.Messages.THREAD } let C = (0, O.getAutoArchiveDuration)(t), R = f.default.getChannel(p.default.castMessageIdAsChannelId(n)), g = await G(t, () => { let e = null != n ? L.Endpoints.CHANNEL_MESSAGE_THREADS(t.id, n) : L.Endpoints.CHANNEL_THREADS(t.id); return a.HTTP.post({ url: e, body: { name: N, type: m ? L.ChannelTypes.PRIVATE_THREAD : t.type === L.ChannelTypes.GUILD_ANNOUNCEMENT ? L.ChannelTypes.ANNOUNCEMENT_THREAD : L.ChannelTypes.PUBLIC_THREAD, auto_archive_duration: C, location: o } }) }); g !== R && (u.default.clearDraft(t.id, S.DraftType.ThreadSettings), u.default.clearDraft(t.id, S.DraftType.FirstThreadMessage), null == l || l(g), (A || e.length > 0 || null != s && s.length > 0 || null != T && T.length > 0) && function(e, t, n, i, r) { if (null != r && null != i && i.length > 0) r(e, i, t, n); else if (null != n && n.length > 0) d.default.sendStickers(e.id, n, t); else d.default.sendMessage(e.id, I.default.parse(e, t)) }(g, e, s, T, E)), _.default.clearAll(t.id, S.DraftType.FirstThreadMessage) }, [t, n, i, l, r, o, c, E]) } function U(e, t, n, i, r) { return G(e, () => a.HTTP.post({ url: L.Endpoints.CHANNEL_THREADS(e.id), body: { name: t, type: n, auto_archive_duration: i, location: r } })) } function b(e) { let { parentChannel: t, name: n, appliedTags: i, onThreadCreated: r, upload: o } = e; return s.useCallback(async (e, s, l) => { let d = 0, [c, I] = (0, T.default)(e); c && (e = I, d = (0, N.addFlag)(d, L.MessageFlags.SUPPRESS_NOTIFICATIONS)); let f = (0, O.getAutoArchiveDuration)(t, null), h = L.Endpoints.CHANNEL_THREADS(t.id) + "?use_nested_fields=true", A = { name: n, auto_archive_duration: f, applied_tags: i, message: { content: e, sticker_ids: s, flags: 0 !== d ? d : void 0 } }, m = await G(t, () => null != l && l.length > 0 ? o(h, A, l) : a.HTTP.post({ url: h, body: A })); return u.default.clearDraft(t.id, S.DraftType.ThreadSettings), u.default.clearDraft(t.id, S.DraftType.FirstThreadMessage), _.default.clearAll(t.id, S.DraftType.FirstThreadMessage), (0, E.trackForumPostCreated)({ guildId: t.guild_id, channelId: t.id, postId: m.id }), null == r || r(m), m }, [t, n, r, i, o]) }(r = i || (i = {}))[r.Disabled = 1] = "Disabled", r[r.Enabled = 2] = "Enabled", r[r.PrivateOnly = 3] = "PrivateOnly"; async function G(e, t) { let n; let i = e.isForumLikeChannel(); try { n = await t(), null == n.body ? l.default.show({ title: v.default.Messages.ERROR, body: v.default.Messages.ERROR_OCCURRED_TRY_AGAIN }) : (o.default.dispatch({ type: "SLOWMODE_RESET_COOLDOWN", slowmodeType: A.SlowmodeType.CreateThread, channelId: e.id }), o.default.dispatch({ type: "THREAD_CREATE_LOCAL", channelId: n.body.id })) } catch (t) { var r, s, a, u, d, _; if ((null === (r = t.body) || void 0 === r ? void 0 : r.code) === L.AbortCodes.TOO_MANY_THREADS) l.default.show({ title: i ? v.default.Messages.CANNOT_CREATE_FORUM_POST : v.default.Messages.CANNOT_CREATE_THREAD, body: i ? v.default.Messages.TOO_MANY_FORUM_POSTS_MESSAGE : v.default.Messages.TOO_MANY_THREADS_MESSAGE }); else if ((null === (s = t.body) || void 0 === s ? void 0 : s.code) === L.AbortCodes.TOO_MANY_ANNOUNCEMENT_THREADS) l.default.show({ title: v.default.Messages.CANNOT_CREATE_THREAD, body: v.default.Messages.TOO_MANY_ANNOUNCEMENT_THREADS_MESSAGE }); else if ((null === (a = t.body) || void 0 === a ? void 0 : a.code) === L.AbortCodes.SLOWMODE_RATE_LIMITED) { let n = null !== (_ = t.body.retry_after) && void 0 !== _ ? _ : 0; n > 0 && o.default.dispatch({ type: "SLOWMODE_SET_COOLDOWN", channelId: e.id, slowmodeType: A.SlowmodeType.CreateThread, cooldownMs: n * m.default.Millis.SECOND }) } else if (429 === t.status) l.default.show({ title: i ? v.default.Messages.CANNOT_CREATE_FORUM_POST : v.default.Messages.CANNOT_CREATE_THREAD, body: v.default.Messages.RATE_LIMITED }); else if (g.FORUM_POST_CREATION_AUTOMOD_ERRORS.has(null === (u = t.body) || void 0 === u ? void 0 : u.code)) throw t; else { if (g.FORUM_POST_CREATION_UPLOAD_ERRORS.has(null === (d = t.body) || void 0 === d ? void 0 : d.code)) return new Promise((e, n) => { null == t.body && n(), c.default.addConditionalChangeListener(() => { let t = c.default.getAndDeleteMostRecentUserCreatedThreadId(); if (null != t) { let i = f.default.getChannel(t); return o.default.wait(() => { null == i ? n() : e(i) }), !1 } }) }); l.default.show({ title: v.default.Messages.ERROR, body: v.default.Messages.ERROR_OCCURRED_TRY_AGAIN }) } } return new Promise((e, t) => { null == n.body && t(), f.default.addConditionalChangeListener(() => { let t = f.default.getChannel(n.body.id); if (null != t) return o.default.wait(() => { e(t) }), !1 }) }) } }, 665906: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VoiceInThreadsExperiment: function() { return S }, canUnarchiveThread: function() { return D }, computeCanStartPublicThread: function() { return A }, computeIsReadOnlyThread: function() { return P }, getIsActiveChannelOrUnarchivableThread: function() { return y }, useCanJoinThreadVoice: function() { return G }, useCanManageThread: function() { return R }, useCanStartPrivateThread: function() { return m }, useCanStartPublicThread: function() { return h }, useCanStartThread: function() { return N }, useCanUnarchiveThread: function() { return v }, useCanViewThreadForMessage: function() { return O }, useHasActiveThreads: function() { return C }, useIsActiveChannelOrUnarchivableThread: function() { return M }, useIsNonModInLockedThread: function() { return w }, useIsThreadModerator: function() { return b } }); var i = n("392711"), r = n.n(i), s = n("149765"), a = n("442837"), o = n("987170"), l = n("590293"), u = n("901461"), d = n("131704"), _ = n("314897"), c = n("592125"), E = n("496675"), I = n("709054"), T = n("601070"), f = n("981631"); let S = (0, o.default)({ id: "2022-07_voice_in_threads", label: "Voice in Threads", kind: "guild", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "On", config: { enabled: !0 } }] }); function h(e, t) { return p((0, a.useStateFromStores)([E.default], () => { let t = e.isForumLikeChannel() ? f.Permissions.SEND_MESSAGES : s.combine(f.Permissions.CREATE_PUBLIC_THREADS, f.Permissions.READ_MESSAGE_HISTORY); return E.default.can(t, e) }, [e]), e, t) } function A(e, t) { let n = e.isForumLikeChannel() ? f.Permissions.SEND_MESSAGES : s.combine(f.Permissions.CREATE_PUBLIC_THREADS, f.Permissions.READ_MESSAGE_HISTORY); return p(E.default.can(n, e), e, t) } function m(e) { let t = (0, a.useStateFromStores)([E.default], () => E.default.can(s.combine(f.Permissions.CREATE_PRIVATE_THREADS), e), [e]); return e.type === f.ChannelTypes.GUILD_TEXT && p(t, e) } function N(e) { let t = h(e), n = m(e); return t || n } function p(e, t, n) { return !(__OVERLAY__ || !e || !d.THREADED_CHANNEL_TYPES.has(t.type) || null != n && (n.hasFlag(f.MessageFlags.HAS_THREAD) || (0, u.default)(n))) && !0 } function O(e) { let t = (0, a.useStateFromStores)([c.default], () => c.default.getChannel(I.default.castMessageIdAsChannelId(e.id)), [e]); return function(e, t, n) { return !!t.hasFlag(f.MessageFlags.HAS_THREAD) && null != n && !!e || !1 }((0, a.useStateFromStores)([E.default], () => E.default.can(f.Permissions.VIEW_CHANNEL, t), [t]), e, t) } function C(e) { return (0, a.useStateFromStoresObject)([T.default, E.default], () => { let t = T.default.getActiveJoinedThreadsForParent(e.guild_id, e.id), n = T.default.getActiveJoinedRelevantThreadsForParent(e.guild_id, e.id), i = T.default.getActiveUnjoinedThreadsForParent(e.guild_id, e.id), s = r()(n).some(e => E.default.can(f.Permissions.VIEW_CHANNEL, e.channel)), a = r()(t).some(e => !(e.channel.id in n) && E.default.can(f.Permissions.VIEW_CHANNEL, e.channel)), o = r()(i).some(e => E.default.can(f.Permissions.VIEW_CHANNEL, e)); return { hasActiveThreads: s || a || o, hasMoreActiveThreads: o || a } }) } function R(e) { let t = (0, a.useStateFromStores)([c.default], () => c.default.getChannel(null == e ? void 0 : e.parent_id)), n = (0, a.useStateFromStores)([E.default], () => null != t && E.default.can(f.Permissions.MANAGE_THREADS, t), [t]), i = (0, a.useStateFromStores)([_.default], () => _.default.getId()); return !!(null != e && null != t && e.isThread()) && (!!n || !e.isLockedThread() && (e.ownerId === i || !1)) } function g(e, t) { return null != e && t.can(f.Permissions.SEND_MESSAGES_IN_THREADS, e) } function L(e, t, n) { var i; return !!(null != e && e.isThread()) && ((null === (i = e.threadMetadata) || void 0 === i ? void 0 : i.locked) ? n : t) } function v(e) { let t = (0, a.useStateFromStores)([E.default], () => g(e, E.default)), n = b(e); return L(e, t, n) } function D(e) { let t = g(e, E.default), n = function(e) { return U(e, E.default) }(e); return L(e, t, n) } function M(e) { var t; let n = (0, a.useStateFromStores)([E.default], () => null != e && E.default.can(f.Permissions.SEND_MESSAGES_IN_THREADS, e)); return null != e && (!e.isThread() || e.isActiveThread() || e.isArchivedThread() && (null === (t = e.threadMetadata) || void 0 === t ? void 0 : t.locked) !== !0 && n) } function y(e) { var t; return null != e && (!e.isThread() || e.isActiveThread() || e.isArchivedThread() && (null === (t = e.threadMetadata) || void 0 === t ? void 0 : t.locked) !== !0 && E.default.can(f.Permissions.SEND_MESSAGES_IN_THREADS, e)) } function P(e) { let t = E.default.can(f.Permissions.MANAGE_THREADS, e); return e.isArchivedLockedThread() && !t } function U(e, t) { return null != e && t.can(f.Permissions.MANAGE_THREADS, e) } function b(e) { return (0, a.useStateFromStores)([E.default], () => U(e, E.default)) } function G(e) { let t = (0, l.default)(), n = (0, a.useStateFromStores)([E.default], () => E.default.can(f.Permissions.CONNECT, e)), i = M(e), r = S.useExperiment({ guildId: e.guild_id, location: "e791ea_1" }, { autoTrackExposure: !1 }).enabled; return !t && e.isVocalThread() && r && n && i } function w(e) { let t = b(e); return e.isLockedThread() && !t } }, 359915: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("442837"), r = n("570140"), s = n("147913"), a = n("883429"), o = n("314897"), l = n("592125"); class u extends s.default { handleChannelDelete(e) { let { channel: t } = e; if (null != t.guild_id) { let e = l.default.getAllThreadsForParent(t.id); e.length > 0 && i.default.Emitter.batched(() => { for (let t of e) r.default.dispatch({ type: "THREAD_DELETE", channel: t }) }) } } handleMessageCreate(e) { var t, n, i; let { channelId: r, message: s } = e, u = l.default.getChannel(r); if ((null === (t = s.author) || void 0 === t ? void 0 : t.id) !== o.default.getId() || !(null == u ? void 0 : u.isActiveThread())) return; let d = new Date(null !== (i = null === (n = u.threadMetadata) || void 0 === n ? void 0 : n.archiveTimestamp) && void 0 !== i ? i : 0).getTime(); Date.now() - d < 5e3 && a.default.resort(u.parent_id) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_DELETE: this.handleChannelDelete, MESSAGE_CREATE: this.handleMessageCreate }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new u }, 260483: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("900489"), c = n("131704"), E = n("592125"); let I = {}; function T(e) { var t; null === (t = e.threads) || void 0 === t || t.forEach(f) } function f(e) { if (!c.ALL_CHANNEL_TYPES.has(e.type)) return !1; let t = function(e) { if (!(e.id in I)) { var t, n; I[e.id] = { guildId: e.guild_id, parentId: e.parent_id, memberCount: null !== (t = e.memberCount) && void 0 !== t ? t : 0, memberIdsPreview: null !== (n = e.memberIdsPreview) && void 0 !== n ? n : [] } } return I[e.id] }(e); null != e.memberCount && (t.memberCount = e.memberCount), null != e.memberIdsPreview && (t.memberIdsPreview = e.memberIdsPreview) } function S(e) { let { channel: t } = e; return f(t) } function h(e) { let { threads: t } = e; t.forEach(m) } function A(e) { let t = !1; for (let n of e.messages) for (let e of n) t = m(e.thread) || t; return e.threads.forEach(e => { t = m(e) || t }), t } function m(e) { if (null != e && !(e.id in I)) { let t = E.default.getChannel(e.id); if (null != t) return f(t), !0 } return !1 } class N extends(i = u.default.Store) { initialize() { this.waitFor(E.default) } getMemberCount(e) { var t, n; return null !== (n = null === (t = I[e]) || void 0 === t ? void 0 : t.memberCount) && void 0 !== n ? n : null } getMemberIdsPreview(e) { var t, n; return null !== (n = null === (t = I[e]) || void 0 === t ? void 0 : t.memberIdsPreview) && void 0 !== n ? n : null } getInitialOverlayState() { return I } } a = "ThreadMembersStore", (s = "displayName") in(r = N) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new N(d.default, { CONNECTION_OPEN: function(e) { I = {}, e.guilds.forEach(T) }, OVERLAY_INITIALIZE: function(e) { let { threadMembers: t } = e; I = { ...t } }, GUILD_CREATE: function(e) { let { guild: t } = e; T(t) }, GUILD_DELETE: function(e) { var t; let { guild: n } = e; t = n.id, I = l().omitBy(I, e => e.guildId === t) }, CHANNEL_DELETE: function(e) { var t; let { channel: n } = e; t = n.id, I = l().omitBy(I, e => e.parentId === t) }, THREAD_CREATE: S, THREAD_UPDATE: S, THREAD_LIST_SYNC: function(e) { let { threads: t } = e; t.forEach(f) }, THREAD_MEMBERS_UPDATE: function(e) { let t = I[e.id]; if (null == t) return !1; null != e.memberIdsPreview && (t.memberIdsPreview = e.memberIdsPreview), t.memberCount = e.memberCount }, SEARCH_FINISH: A, MOD_VIEW_SEARCH_FINISH: A, LOAD_THREADS_SUCCESS: h, LOAD_ARCHIVED_THREADS_SUCCESS: h, THREAD_DELETE: function(e) { let { channel: t } = e; delete I[t.id] }, LOAD_MESSAGES_SUCCESS: function(e) { let t = !1; for (let n of e.messages) t = m(n.thread) || t; return t }, GUILD_FEED_FETCH_SUCCESS: function(e) { let { data: t } = e, n = !1; for (let e of (0, _.getThreadsFromGuildFeedFetch)(t)) n = m(e) || n; return n } }) }, 144140: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("900489"), c = n("786761"), E = n("131704"), I = n("23750"), T = n("598077"), f = n("592125"), S = n("375954"), h = n("709054"), A = n("124368"), m = n("981631"); let N = new Set, p = {}, O = {}; function C(e, t) { E.ALL_CHANNEL_TYPES.has(e.type) && R(function(e) { if (!(e.id in p)) { var t; p[e.id] = { guildId: e.guild_id, parentId: e.parent_id, count: null !== (t = e.messageCount) && void 0 !== t ? t : 0, mostRecentRawMessage: null, mostRecentMessage: null } } return p[e.id] }(e), t) } function R(e, t) { var n; let i = (null !== (n = O[e.parentId]) && void 0 !== n ? n : 0) + 1; O[e.parentId] = i, t(e) } function g(e) { var t; null === (t = e.threads) || void 0 === t || t.forEach(L) } function L(e) { C(e, t => { var n; null != e.messageCount && (t.count = e.messageCount); let i = null !== (n = t.mostRecentRawMessage) && void 0 !== n ? n : t.mostRecentMessage; null != e.lastMessageId && (null == i ? void 0 : i.id) !== e.lastMessageId && (t.mostRecentRawMessage = null, t.mostRecentMessage = null) }) } function v(e) { if (null != e && !(e.id in p)) { let t = f.default.getChannel(e.id); if (null != t) return L(t), !0 } return !1 } function D(e) { let { channel: t } = e; L(t) } function M(e) { let { threads: t } = e; t.forEach(v) } function y(e) { let { messages: t, threads: n } = e; for (let e of t) for (let t of e) v(t.thread); n.forEach(v) } class P extends(i = u.default.Store) { initialize() { this.waitFor(f.default, S.default) } getCount(e) { var t, n; return null !== (n = null === (t = p[e]) || void 0 === t ? void 0 : t.count) && void 0 !== n ? n : null } getMostRecentMessage(e) { var t, n; let i = p[e]; return null == i ? null : (null == i.mostRecentMessage && null != i.mostRecentRawMessage && (i.mostRecentMessage = null !== (t = S.default.getMessage(e, i.mostRecentRawMessage.id)) && void 0 !== t ? t : (0, c.createMessageRecord)(i.mostRecentRawMessage), i.mostRecentRawMessage = null), null !== (n = i.mostRecentMessage) && void 0 !== n ? n : null) } getChannelThreadsVersion(e) { return O[e] } getInitialOverlayState() { return p } } a = "ThreadMessageStore", (s = "displayName") in(r = P) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new P(d.default, { CONNECTION_OPEN: function(e) { O = {}, N.clear(), e.guilds.forEach(g) }, OVERLAY_INITIALIZE: function(e) { let { threadMessages: t } = e; for (let e in p = { ...t }) { let n = t[e].mostRecentMessage; null != n && (t[e].mostRecentMessage = new I.default({ ...n, author: new T.default(n.author) })) } }, GUILD_CREATE: function(e) { let { guild: t } = e; g(t) }, GUILD_DELETE: function(e) { var t; let { guild: n } = e; t = n.id, p = l().omitBy(p, e => { let n = e.guildId === t; return n && delete O[e.parentId], n }) }, THREAD_CREATE: D, THREAD_UPDATE: D, THREAD_LIST_SYNC: function(e) { let { threads: t, mostRecentMessages: n } = e; t.forEach(L), null == n || n.forEach(e => { let t = f.default.getChannel(e.channel_id); null != t && e.type !== m.MessageTypes.THREAD_STARTER_MESSAGE && C(t, t => { t.mostRecentRawMessage = e, t.mostRecentMessage = null }) }) }, LOAD_THREADS_SUCCESS: M, LOAD_ARCHIVED_THREADS_SUCCESS: M, SEARCH_FINISH: y, MOD_VIEW_SEARCH_FINISH: y, THREAD_DELETE: function(e) { let { channel: t } = e; delete p[t.id] }, CHANNEL_DELETE: function(e) { var t; let { channel: n } = e; t = n.id, p = l().omitBy(p, e => e.parentId === t), delete O[t] }, MESSAGE_CREATE: function(e) { let { message: t, optimistic: n, isPushNotification: i, sendMessageOptions: r } = e; if (n || i || null != r) return !1; let s = f.default.getChannel(t.channel_id); if (null == s || !E.THREAD_CHANNEL_TYPES.has(s.type) || ! function(e, t) { return !(t.type === m.MessageTypes.THREAD_STARTER_MESSAGE || e.isForumPost() && t.id === h.default.castChannelIdAsMessageId(e.id)) && !0 }(s, t)) return !1; C(s, e => { e.count = Math.min(e.count + 1, A.MAX_THREAD_MESSAGE_COUNT), e.mostRecentRawMessage = t, e.mostRecentMessage = null }) }, MESSAGE_UPDATE: function(e) { var t; let { message: n } = e, i = p[n.channel_id], r = null !== (t = null == i ? void 0 : i.mostRecentRawMessage) && void 0 !== t ? t : null == i ? void 0 : i.mostRecentMessage; if (null == i || null == r || r.id !== n.id) return !1; R(i, e => { null != e.mostRecentMessage && (e.mostRecentMessage = (0, c.updateMessageRecord)(e.mostRecentMessage, n)), null != e.mostRecentRawMessage && (e.mostRecentRawMessage = (0, c.updateServerMessage)(e.mostRecentRawMessage, n)) }) }, MESSAGE_DELETE: function(e) { let { id: t, channelId: n } = e, i = p[n]; if (null == i) return !1; let r = h.default.castChannelIdAsMessageId(n) !== t, s = !N.has(t); R(i, e => { var n; let i = null !== (n = e.mostRecentRawMessage) && void 0 !== n ? n : e.mostRecentMessage; null != i && i.id === t && (e.mostRecentMessage = null, e.mostRecentRawMessage = null), e.count = r && s ? Math.max(e.count - 1, 0) : e.count, N.add(t) }) }, MESSAGE_DELETE_BULK: function(e) { let { ids: t, channelId: n } = e, i = p[n]; if (null == i) return !1; let r = t.filter(e => { let t = h.default.castChannelIdAsMessageId(n) !== e, i = !N.has(e); return t && i }).length; r > 0 && R(i, e => { var n; let i = null !== (n = e.mostRecentRawMessage) && void 0 !== n ? n : e.mostRecentMessage; null != i && t.includes(i.id) && (e.mostRecentMessage = null, e.mostRecentRawMessage = null), e.count -= r, t.forEach(e => N.add(e)) }) }, LOAD_MESSAGES_SUCCESS: function(e) { let t = !1; for (let n of e.messages) t = v(n.thread) || t; if (e.isAfter || e.isBefore || e.hasMoreAfter) return t; let n = f.default.getChannel(e.channelId); if (null == n || !E.THREAD_CHANNEL_TYPES.has(n.type)) return t; C(n, t => { if (0 === e.messages.length) t.mostRecentRawMessage = null, t.mostRecentMessage = null, t.count = 0; else { var n; let i = null !== (n = e.messages[0]) && void 0 !== n ? n : null; t.count = e.messages.length >= A.MAX_THREAD_MESSAGE_COUNT ? A.MAX_THREAD_MESSAGE_COUNT : t.count, (null == i ? void 0 : i.type) !== m.MessageTypes.THREAD_STARTER_MESSAGE && (t.mostRecentRawMessage = i, t.mostRecentMessage = null) } }) }, GUILD_FEED_FETCH_SUCCESS: function(e) { let { data: t } = e, n = !1; for (let e of (0, _.getThreadsFromGuildFeedFetch)(t)) n = v(e) || n; return n } }) }, 91159: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getTimestampString: function() { return T.default }, trackActiveThreadsPopoutOpened: function() { return m }, trackThreadBrowserOpened: function() { return A }, trackThreadBrowserTab: function() { return h }, trackThreadNotificationSettingsUpdated: function() { return N }, useLastMessageTimestamp: function() { return p } }), n("789020"); var i = n("913527"), r = n.n(i), s = n("442837"), a = n("367907"), o = n("731429"), l = n("306680"), u = n("9156"), d = n("626135"), _ = n("630388"), c = n("621600"), E = n("709054"), I = n("569471"), T = n("814391"), f = n("124368"), S = n("981631"); function h() { (0, a.trackWithMetadata)(S.AnalyticEvents.THREAD_BROWSER_TAB_CHANGED) } function A() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "Modal"; (0, a.trackWithMetadata)(S.AnalyticEvents.OPEN_MODAL, { type: "Thread Browser", location_section: e }) } function m() { d.default.track(S.AnalyticEvents.OPEN_POPOUT, { type: "Active Threads Popout" }) } function N(e, t) { var n, i; let r = (0, o.collectThreadMetadata)(e); if (null == r) return; let s = e.getGuildId(), a = e.parent_id, l = (0, c.getCurrentChannelSettings)(s, a), E = e => { if ((0, _.hasFlag)(e, f.ThreadMemberFlags.ALL_MESSAGES)) return c.MessageNotificationSettings[S.UserNotificationSettings.ALL_MESSAGES]; if ((0, _.hasFlag)(e, f.ThreadMemberFlags.ONLY_MENTIONS)) return c.MessageNotificationSettings[S.UserNotificationSettings.ONLY_MENTIONS]; if ((0, _.hasFlag)(e, f.ThreadMemberFlags.NO_MESSAGES)) return c.MessageNotificationSettings[S.UserNotificationSettings.NO_MESSAGES]; return c.MessageNotificationSettings[S.UserNotificationSettings.NULL] }, T = null !== (n = I.default.flags(e.id)) && void 0 !== n ? n : 0, h = E(T), A = I.default.isMuted(e.id), m = (0, c.muteConfigToTimestamp)(I.default.getMuteConfig(e.id)), { can_send_message: N, ...p } = r, O = { ...p, channel_id: e.id, guild_id: s, parent_id: a, channel_type: e.type, has_interacted_with_thread: (T & f.ThreadMemberFlags.HAS_INTERACTED) != 0, parent_is_muted: u.default.isGuildOrCategoryOrChannelMuted(s, a), old_thread_notification_setting: h, new_thread_notification_setting: null != t.flags ? E(t.flags) : h, parent_notification_setting: l.channel_message_notification_settings, old_thread_is_muted: A, new_thread_is_muted: null !== (i = t.muted) && void 0 !== i ? i : A, old_thread_muted_until: m, new_thread_muted_until: null != t.mute_config ? (0, c.muteConfigToTimestamp)(t.mute_config) : m }; d.default.track(S.AnalyticEvents.THREAD_NOTIFICATION_SETTINGS_UPDATED, O) } n("689938"); let p = e => { var t, n; let i = (0, s.useStateFromStores)([l.default], () => l.default.lastMessageId(e.id)), a = null != i ? E.default.extractTimestamp(i) : null, o = null === (t = e.threadMetadata) || void 0 === t ? void 0 : t.createTimestamp, u = null != o ? r()(o).valueOf() : null; return null !== (n = null != a ? a : u) && void 0 !== n ? n : E.default.extractTimestamp(e.id) } }, 952537: function(e, t, n) { "use strict"; function i(e) { return { id: e.id, userId: e.user_id, flags: e.flags, muted: e.muted, muteConfig: e.mute_config, joinTimestamp: e.join_timestamp } } n.r(t), n.d(t, { default: function() { return i } }), n("789020") }, 819168: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("306680"), r = n("70956"), s = n("709054"); function a(e) { if (null == e.threadMetadata) return 0; let t = e.threadMetadata.autoArchiveDuration * r.default.Millis.MINUTE; return function(e) { var t; if (null == e.threadMetadata) return 0; let n = null !== (t = i.default.lastMessageId(e.id)) && void 0 !== t ? t : e.id, r = s.default.extractTimestamp(n); return Math.max(r, null != e.threadMetadata.archiveTimestamp ? new Date(e.threadMetadata.archiveTimestamp).getTime() : 0) }(e) + t } }, 814391: function(e, t, n) { "use strict"; n.r(t); var i = n("913527"), r = n.n(i), s = n("689938"); let a = 3600, o = 86400, l = 2592e3, u = 31104e3, d = () => ({ seconds: s.default.Messages.THREAD_BROWSER_TIMESTAMP_SECONDS, minutes: s.default.Messages.THREAD_BROWSER_TIMESTAMP_MINUTES, hours: s.default.Messages.THREAD_BROWSER_TIMESTAMP_HOURS, days: s.default.Messages.THREAD_BROWSER_TIMESTAMP_DAYS, months: s.default.Messages.THREAD_BROWSER_TIMESTAMP_MORE_THAN_MONTH, years: s.default.Messages.THREAD_BROWSER_TIMESTAMP_MORE_THAN_YEAR }), _ = (e, t) => null != t && null != t[e], c = (e, t, n) => { var i, r, s; return _(e, t) ? null !== (r = null !== (i = t[e]) && void 0 !== i ? i : null == n ? void 0 : n[e]) && void 0 !== r ? r : null : null !== (s = null == n ? void 0 : n[e]) && void 0 !== s ? s : null }; t.default = function(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = r()().diff(r()(e), "s"), s = null != t ? t() : void 0, _ = d(), E = (e, t) => { let i = c(e, s, n ? _ : void 0); return null == i ? null : "string" == typeof i ? i : i.format({ count: t }) }; if (i < 60) { let e = (null == s ? void 0 : s.seconds) != null ? E("seconds", i) : E("minutes", 1); if (null != e) return e } if (i < a) { let e = E("minutes", Math.floor(i / 60)); if (null != e) return e } if (i < o) { let e = E("hours", Math.floor(i / a)); if (null != e) return e } if (i < l) { let e = E("days", Math.floor(i / o)); if (null != e) return e } if (i < u) { let e = E("months", Math.floor(i / l)); if (null != e) return e } if (i >= u && (null == s ? void 0 : s.years) != null) { let e = E("years", Math.floor(i / u)); if (null != e) return e } return r()(e).format("LL") } }, 456077: function(e, t, n) { "use strict"; function i(e, t) { return t && (e = e.trim()), e } n.r(t), n.d(t, { default: function() { return i } }) }, 488131: function(e, t, n) { "use strict"; n.r(t), n.d(t, { closeAndClearThreadSidebar: function() { return R }, closeThreadSidebar: function() { return C }, openThreadSidebarForCreating: function() { return O }, openThreadSidebarForViewing: function() { return p } }); var i = n("512722"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("570140"), l = n("430742"), u = n("40851"), d = n("367907"), _ = n("727429"), c = n("703656"), E = n("359110"), I = n("695346"), T = n("703558"), f = n("944486"), S = n("979651"), h = n("585483"), A = n("124368"), m = n("981631"), N = n("176505"); function p(e, t, n) { u.MainWindowDispatch.dispatch(m.ComponentActions.POPOUT_CLOSE); let i = !a().isEmpty(S.default.getVoiceStatesForChannel(e.id)); if (t || !I.UseThreadSidebar.getSetting() || __OVERLAY__ || i) { o.default.dispatch({ type: "SIDEBAR_CLOSE", baseChannelId: e.parent_id }), null != n ? (0, E.transitionToThread)(e, n) : (0, E.transitionToChannel)(e.id); return } r()(null != e.parent_id, "all threads must have parents"); let s = f.default.getChannelId(); e.parent_id !== s && !(0, N.isGuildHomeChannel)(s) && (0, E.transitionToChannel)(e.parent_id), (0, c.transitionTo)(m.Routes.CHANNEL_THREAD_VIEW((0, _.getGuildIdForGenericRedirect)(e), (0, N.isGuildHomeChannel)(s) ? N.StaticChannelRoute.GUILD_HOME : e.parent_id, e.id), void 0, e.isForumPost() ? A.OpenThreadAnalyticsLocations.FORUM : void 0), setTimeout(() => { h.ComponentDispatch.dispatch(m.ComponentActions.FOCUS_CHANNEL_TEXT_AREA, { channelId: e.id }) }, 0) } function O(e, t, n) { if (r()(!e.isForumLikeChannel(), "cannot open thread creation sidebar in forums"), r()(!__OVERLAY__, "Cannot create threads in the overlay."), (0, d.trackWithMetadata)(m.AnalyticEvents.THREAD_CREATION_STARTED, { location: n, channel_id: e.id, guild_id: e.guild_id }), u.MainWindowDispatch.dispatch(m.ComponentActions.POPOUT_CLOSE), f.default.getChannelId() !== e.id && (0, E.transitionToChannel)(e.id), "" === T.default.getDraft(e.id, T.DraftType.FirstThreadMessage)) { let t = T.default.getDraft(e.id, T.DraftType.ChannelMessage); l.default.saveDraft(e.id, "", T.DraftType.ChannelMessage), l.default.saveDraft(e.id, t, T.DraftType.FirstThreadMessage) } setTimeout(() => { o.default.dispatch({ type: "SIDEBAR_CREATE_THREAD", parentChannelId: e.id, parentMessageId: null == t ? void 0 : t.id, location: n }) }, 0) } function C(e, t) { (0, c.transitionTo)(m.Routes.CHANNEL(e, (0, N.isGuildHomeChannel)(t) ? N.StaticChannelRoute.GUILD_HOME : t)), o.default.dispatch({ type: "SIDEBAR_CLOSE", baseChannelId: t }) } function R(e) { o.default.dispatch({ type: "SIDEBAR_CLOSE", baseChannelId: e }), o.default.dispatch({ type: "DRAFT_CLEAR", channelId: e, draftType: T.DraftType.FirstThreadMessage }), o.default.dispatch({ type: "DRAFT_CLEAR", channelId: e, draftType: T.DraftType.ThreadSettings }) } }, 450096: function(e, t, n) { "use strict"; n.r(t), n.d(t, { usePlaceholderImage: function() { return a } }), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var i = n("470079"), r = n("153832"); let s = new Worker(new URL(n.p + n.u("77459"), n.b)); function a(e, t, n) { let a = n && 1 === t && null != e, [o, l] = i.useState(void 0); return i.useEffect(() => { let t = !1; if (a) { var n; (n = e, new Promise(e => { let t = (0, r.v4)(), i = n => { let { data: { id: r, png: a } } = n; t === r && (e(a), s.removeEventListener("message", i)) }; s.addEventListener("message", i), s.postMessage({ id: t, placeholderData: n }) })).then(e => { !t && l(e) }) } return () => { t = !0 } }, [e, a]), o } }, 218543: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("956067"), r = n("586444"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = () => {}; n.g.__timingFunction = () => performance.now(); let o = null == n.g.__getTotalRequireTime ? () => 0 : () => n.g.__getTotalRequireTime(); function l(e, t) { if (0 === t || null == t) return null; let n = t - e; return n < 0 || n > 1e6 ? null : n } class u { get start() { return this.start_ } get end() { return this.end_ } hasStart() { return this.start_ > 0 } hasData() { return this.end_ > 0 } recordStart() { 0 === this.start_ && this.recordStart_(), i.default.mark(this.emoji, "Start ".concat(this.name)), a() } recordStart_() { this.start_ = Date.now(), this.startNumImports = r.size(), this.startImportTime = o() } recordEnd() { 0 === this.end_ && 0 !== this.start_ ? (this.recordEnd_(), i.default.mark(this.emoji, "Finish ".concat(this.name), this.end_ - this.start_)) : i.default.mark(this.emoji, "Finish ".concat(this.name)), a() } recordEnd_() { this.end_ = Date.now(), this.endNumImports = r.size(), this.endImportTime = o() } set(e, t) { 0 === this.start_ && (this.start_ = e, this.end_ = e + t, this.endNumImports = r.size(), this.endImportTime = o()), i.default.mark(this.emoji, this.name, t), a() } serializeStart(e) { return l(e, this.start_) } serializeEnd(e) { return l(e, this.end_) } measure(e) { if (this.start_ > 0) return i.default.time(this.emoji, this.name, e); this.recordStart_(); let t = i.default.time(this.emoji, this.name, e); return this.recordEnd_(), a(), t } async measureAsync(e) { if (this.start_ > 0) return i.default.timeAsync(this.emoji, this.name, e); this.recordStart_(); let t = await i.default.timeAsync(this.emoji, this.name, e); return this.recordEnd_(), a(), t } async measureAsyncWithoutNesting(e) { if (this.start_ > 0) return i.default.timeAsync(this.emoji, this.name, e); this.recordStart_(); let t = Date.now(); i.default.mark(this.emoji, "Start ".concat(this.name)); let n = await e(); return i.default.mark(this.emoji, "Finish ".concat(this.name), Date.now() - t), this.recordEnd_(), a(), n } constructor(e, t) { s(this, "emoji", void 0), s(this, "name", void 0), s(this, "start_", void 0), s(this, "startNumImports", void 0), s(this, "startImportTime", void 0), s(this, "end_", void 0), s(this, "endNumImports", void 0), s(this, "endImportTime", void 0), this.emoji = e, this.name = t, this.start_ = 0, this.startNumImports = 0, this.startImportTime = 0, this.end_ = 0, this.endNumImports = 0, this.endImportTime = 0 } } class d { get time() { return this.time_ } record() { 0 === this.time_ ? (this.time_ = Date.now(), this.numImports = r.size(), this.importTime = o(), i.default.mark(this.emoji, this.name)) : !this.onlyOnce && i.default.mark(this.emoji, this.name), a() } hasData() { return this.time_ > 0 } serialize(e) { return l(e, this.time_) } constructor(e, t, n = !1) { s(this, "emoji", void 0), s(this, "name", void 0), s(this, "onlyOnce", void 0), s(this, "time_", void 0), s(this, "numImports", void 0), s(this, "importTime", void 0), this.emoji = e, this.name = t, this.onlyOnce = n, this.time_ = 0, this.numImports = null, this.importTime = 0 } } class _ { get time() { return this.time_ } record() { 0 === this.time_ && (this.time_ = o()) } constructor() { s(this, "time_", 0) } } class c { constructor() { s(this, "loadIndex", new u("❗", "Load index.tsx")), s(this, "loadFastConnectNativeModule", new u("\uD83D\uDCBE", "Load fast_connect native module")), s(this, "beginFastConnect", new u("\uD83C\uDF10", "Fast Connect IDENTIFY")), s(this, "loadImports", new u("\uD83C\uDFC3", "Load Imports")), s(this, "init", new u("\uD83C\uDFC3", "Initial Initialization")), s(this, "loadStorage", new u("\uD83D\uDCBE", "Load Storage")), s(this, "parseStorage", new u("\uD83D\uDCBE", "Parse Storage")), s(this, "loadMiniCache", new u("\uD83D\uDCBE", "Load Mini Cache")), s(this, "fetchGuildCache", new u("\uD83D\uDCBE", "Fetch Guild Cache")), s(this, "fetchGuildChannelsCache", new u("\uD83D\uDCBE", "Fetch Initial Guild Channels Cache")), s(this, "loadCachedMessages", new u("\uD83D\uDCBE", "Load Cached Messages")), s(this, "renderApp", new d("\uD83C\uDFA8", "First React Render")), s(this, "renderAppEffect", new d("\uD83C\uDFA8", "First React Render useEffect")), s(this, "renderMessages", new d("\uD83C\uDFA8", "React Render Messages", !0)), s(this, "renderMessagesWithCache", new d("\uD83C\uDFA8", "React Render Cached Messages", !0)), s(this, "firstRowGenerator", new u("\uD83C\uDFA8", "RowGenerator.generate()")), s(this, "renderLatestMessages", new d("\uD83C\uDFA8", "React Render Latest Messages")), s(this, "initialGuild", new u("\uD83C\uDF10", "Initial Guild")), s(this, "loadLazyCache", new u("\uD83D\uDCBE", "Load Lazy Cache")), s(this, "fetchLazyCache", new u("\uD83D\uDCBE", "Fetch Lazy Cache")), s(this, "parseLazyCache", new u("\uD83D\uDCBE", "Parse Lazy Cache")), s(this, "fetchStaleChannels", new u("\uD83D\uDCBE", "Fetch Stale Channels")), s(this, "deserializeCache", new u("\uD83D\uDCBE", "Deserialize Cache")), s(this, "dispatchLazyCache", new u("\uD83D\uDCBE", "Dispatch Lazy Cache")), s(this, "parseReady", new u("\uD83C\uDF10", "Parse READY")), s(this, "ready", new u("\uD83C\uDF10", "READY")), s(this, "hydrateReady", new u("\uD83C\uDF10", "Hydrate READY")), s(this, "dispatchReady", new u("\uD83C\uDF10", "Dispatch READY")), s(this, "parseReadySupplemental", new u("\uD83C\uDF10", "Parse READY Supplemental")), s(this, "readySupplemental", new u("\uD83C\uDF10", "READY Supplemental")), s(this, "hydrateReadySupplemental", new u("\uD83C\uDF10", "Hydrate READY Supplemental")), s(this, "dispatchReadySupplemental", new u("\uD83C\uDF10", "Dispatch READY Supplemental")), s(this, "fetchMessages", new u("\uD83C\uDF10", "Fetch messages")), s(this, "dispatchMessages", new u("\uD83C\uDF10", "Dispatch messages")), s(this, "imports", { polyfillsEnd: new _, sentryEnd: new _, appStateChangeStart: new _, appStateChangeEnd: new _, loadMiniCacheStart: new _, loadStorageStart: new _, loadStorageEnd: new _ }) } } t.default = new class e extends c { setTTICallback(e) { a = () => { !0 === e() && (a = () => !1) } } setCacheInfo(e) { this.cacheInfo = e } setInterstitial(e) { this.interstitial = e, a() } addLocalMessages(e, t) { for (this.cachedChannelCounts.set(e, t); this.cachedChannelCounts.size > 100;) { let e = this.cachedChannelCounts.keys(); this.cachedChannelCounts.delete(e.next().value) } } attachReadyPayloadProperties(e) { this.readyProperties = e } appStateChanged(e) { "active" === e && (null == this.firstAppActiveTime && (this.firstAppActiveTime = Date.now()), this.wasEverActive = !0), null == this.readyProperties.num_guilds && (this.didBackgroundApp = this.didBackgroundApp || "active" !== e) } recordRender(e, t) { this.renderMessages.record(), (t || e > 0) && this.renderMessagesWithCache.record(), t && this.renderLatestMessages.record() } recordMessageRender(e, t, i, r) { let { default: s } = n("709054"); if (!this.renderLatestMessages.hasData()) { if (this.renderMessages.record(), t.length > 0 && this.renderMessagesWithCache.record(), i) { if (this.renderLatestMessages.record(), null == this.cachedChannelId) { this.messageCacheMissingReason = "no-cache"; return } if (this.cachedChannelId !== e) { this.messageCacheMissingReason = "channel-changed"; return } if (null == this.cachedMessageIds || 0 === this.cachedMessageIds.length) { this.messageCacheMissingReason = "no-cache"; return } if (0 === t.length) { this.messageCacheMissingReason = "channel-empty"; return } if (e === this.cachedChannelId) { var a; let n = this.cachedMessageIds.sort(s.compare).reverse()[0], i = t.sort(s.compare).reverse()[0]; this.messageCacheAgeSeconds = Math.floor((s.extractTimestamp(i) - s.extractTimestamp(n)) / 1e3); let o = t.filter(e => { var t; return null === (t = this.cachedMessageIds) || void 0 === t ? void 0 : t.includes(e) }).length; this.messageCacheCount = null !== (a = this.cachedChannelCounts.get(e)) && void 0 !== a ? a : null, this.messageCacheHavingCount = o, this.messageCacheMissingCount = t.length - o, this.messageRenderFullCount = t.length, this.messageRenderCachedCount = this.cachedMessageIds.length, this.messageRenderHasMoreAfter = r } } else(null == this.cachedChannelId || e === this.cachedChannelId) && (this.cachedChannelId = e, this.cachedMessageIds = t, t.length > 0 && (this.messageCacheMissingReason = null)) } } getStartTime(e) { return this.extraProperties.headless_task_ran && null != this.firstAppActiveTime ? this.firstAppActiveTime : null == e || e <= 0 ? this.loadIndex.start : e } processNativeLogs(e, t) { let n = this.getStartTime(t); for (let t of e) switch (t.label) { case "Finish MainApplication.initialize()": this.extraProperties.time_main_application_initialize_end = l(n, t.timestamp); break; case "GET_REACT_INSTANCE_MANAGER_START": this.extraProperties.time_get_react_instance_manager_start = l(n, t.timestamp); break; case "GET_REACT_INSTANCE_MANAGER_END": this.extraProperties.time_get_react_instance_manager_end = l(n, t.timestamp); break; case "PROCESS_PACKAGES_START": this.extraProperties.time_process_packages_start = l(n, t.timestamp); break; case "PROCESS_PACKAGES_END": this.extraProperties.time_process_packages_end = l(n, t.timestamp); break; case "CREATE_CATALYST_INSTANCE_START": this.extraProperties.time_create_catalyst_instance_start = l(n, t.timestamp); break; case "CREATE_CATALYST_INSTANCE_END": this.extraProperties.time_create_catalyst_instance_end = l(n, t.timestamp); break; case "CREATE_UI_MANAGER_MODULE_START": this.extraProperties.time_create_ui_manager_module_start = l(n, t.timestamp); break; case "CREATE_UI_MANAGER_MODULE_END": this.extraProperties.time_create_ui_manager_module_end = l(n, t.timestamp); break; case "REACT_BRIDGE_LOADING_START": this.extraProperties.time_react_bridge_loading_start = l(n, t.timestamp); break; case "REACT_BRIDGE_LOADING_END": this.extraProperties.time_react_bridge_loading_end = l(n, t.timestamp); break; case "CacheStorage Init Start": this.extraProperties.time_init_native_storage_start = l(n, t.timestamp); break; case "CacheStorage Init End": this.extraProperties.time_init_native_storage_end = l(n, t.timestamp); break; case "ChatModule.updateRows() Start": if (null != this.extraProperties.time_first_native_message_render_start) continue; this.extraProperties.time_first_native_message_render_start = l(n, t.timestamp); break; case "ChatModule.updateRows() Finish": if (null != this.extraProperties.time_first_native_message_render_end) continue; this.extraProperties.time_first_native_message_render_end = l(n, t.timestamp) } } serializeTTITracker(e) { var t, r, s, a, o, l; let u = this.getStartTime(e), d = n("392711")(i.default.logGroups["0"].logs).filter(e => e.log.startsWith("Require ")).map(e => { var t; return null !== (t = e.delta) && void 0 !== t ? t : 0 }).sum(); return { ...this.extraProperties, time_load_index_start: this.loadIndex.serializeStart(u), time_load_index_end: this.loadIndex.serializeEnd(u), time_begin_fast_connect_start: this.beginFastConnect.serializeStart(u), time_begin_fast_connect_end: this.beginFastConnect.serializeEnd(u), time_load_imports_start: this.loadImports.serializeStart(u), time_load_imports_end: this.loadImports.serializeEnd(u), time_init_start: this.init.serializeStart(u), time_init_end: this.init.serializeEnd(u), time_load_storage_start: this.loadStorage.serializeStart(u), time_load_storage_end: this.loadStorage.serializeEnd(u), time_parse_storage_start: this.parseStorage.serializeStart(u), time_parse_storage_end: this.parseStorage.serializeEnd(u), time_load_mini_cache_start: this.loadMiniCache.serializeStart(u), time_load_mini_cache_end: this.loadMiniCache.serializeEnd(u), time_fetch_initial_guild_start: this.fetchGuildCache.serializeStart(u), time_fetch_initial_guild_end: this.fetchGuildCache.serializeEnd(u), time_load_cached_messages_start: this.loadCachedMessages.serializeStart(u), time_load_cached_messages_end: this.loadCachedMessages.serializeEnd(u), time_render_app_start: this.renderApp.serialize(u), time_render_app_effect_start: this.renderAppEffect.serialize(u), time_render_messages_end: this.renderMessages.serialize(u), time_render_messages_with_cache_end: this.renderMessagesWithCache.serialize(u), time_render_latest_messages_end: this.renderLatestMessages.serialize(u), time_first_row_generator_start: this.firstRowGenerator.serializeStart(u), time_first_row_generator_end: this.firstRowGenerator.serializeEnd(u), time_initial_guild_start: this.initialGuild.serializeStart(u), time_initial_guild_end: this.initialGuild.serializeEnd(u), time_load_lazy_cache_start: this.loadLazyCache.serializeStart(u), time_load_lazy_cache_end: this.loadLazyCache.serializeEnd(u), time_fetch_lazy_cache_start: this.fetchLazyCache.serializeStart(u), time_fetch_lazy_cache_end: this.fetchLazyCache.serializeEnd(u), time_parse_lazy_cache_start: this.parseLazyCache.serializeStart(u), time_parse_lazy_cache_end: this.parseLazyCache.serializeEnd(u), time_fetch_stale_channels_start: this.fetchStaleChannels.serializeStart(u), time_fetch_stale_channels_end: this.fetchStaleChannels.serializeEnd(u), time_deserialize_cache_start: this.deserializeCache.serializeStart(u), time_deserialize_cache_end: this.deserializeCache.serializeEnd(u), time_dispatch_lazy_cache_start: this.dispatchLazyCache.serializeStart(u), time_dispatch_lazy_cache_end: this.dispatchLazyCache.serializeEnd(u), time_parse_ready_start: this.parseReady.serializeStart(u), time_parse_ready_end: this.parseReady.serializeEnd(u), time_ready_start: this.ready.serializeStart(u), time_ready_end: this.ready.serializeEnd(u), time_hydrate_ready_start: this.hydrateReady.serializeStart(u), time_hydrate_ready_end: this.hydrateReady.serializeEnd(u), time_dispatch_ready_start: this.dispatchReady.serializeStart(u), time_dispatch_ready_end: this.dispatchReady.serializeEnd(u), time_parse_ready_supplemental_start: this.parseReadySupplemental.serializeStart(u), time_parse_ready_supplemental_end: this.parseReadySupplemental.serializeEnd(u), time_ready_supplemental_start: this.readySupplemental.serializeStart(u), time_ready_supplemental_end: this.readySupplemental.serializeEnd(u), time_hydrate_ready_supplemental_start: this.hydrateReadySupplemental.serializeStart(u), time_hydrate_ready_supplemental_end: this.hydrateReadySupplemental.serializeEnd(u), time_dispatch_ready_supplemental_start: this.dispatchReadySupplemental.serializeStart(u), time_dispatch_ready_supplemental_end: this.dispatchReadySupplemental.serializeEnd(u), time_fetch_messages_start: this.fetchMessages.serializeStart(u), time_fetch_messages_end: this.fetchMessages.serializeEnd(u), time_dispatch_messages_start: this.dispatchMessages.serializeStart(u), time_dispatch_messages_end: this.dispatchMessages.serializeEnd(u), time_load_fast_connect_native_module_start: this.loadFastConnectNativeModule.serializeStart(u), time_load_fast_connect_native_module_end: this.loadFastConnectNativeModule.serializeEnd(u), identify_total_server_duration_ms: this.readyProperties.identify_total_server_duration_ms, identify_api_duration_ms: this.readyProperties.identify_api_duration_ms, identify_guilds_duration_ms: this.readyProperties.identify_guilds_duration_ms, ready_compressed_byte_size: this.readyProperties.compressed_byte_size, ready_uncompressed_byte_size: this.readyProperties.uncompressed_byte_size, identify_compressed_byte_size: this.readyProperties.identify_compressed_byte_size, identify_uncompressed_byte_size: this.readyProperties.identify_uncompressed_byte_size, ready_compression_algorithm: this.readyProperties.compression_algorithm, ready_packing_algorithm: this.readyProperties.packing_algorithm, ready_unpack_duration_ms: this.readyProperties.unpack_duration_ms, is_reconnect: this.readyProperties.is_reconnect, is_fast_connect: this.readyProperties.is_fast_connect, did_force_clear_guild_hashes: this.readyProperties.did_force_clear_guild_hashes, num_guilds: this.readyProperties.num_guilds, num_changed_guild_channels: this.readyProperties.num_guild_channels, ready_presences_size: this.readyProperties.presences_size, ready_users_size: this.readyProperties.users_size, ready_read_states_size: this.readyProperties.read_states_size, ready_private_channels_size: this.readyProperties.private_channels_size, ready_user_guild_settings_size: this.readyProperties.user_guild_settings_size, ready_relationships_size: this.readyProperties.relationships_size, ready_experiments_size: this.readyProperties.experiments_size, ready_user_settings_size: this.readyProperties.user_settings_size, ready_remaining_data_size: this.readyProperties.remaining_data_size, ready_guild_channels_size: this.readyProperties.guild_channels_size, ready_guild_members_size: this.readyProperties.guild_members_size, ready_guild_presences_size: this.readyProperties.guild_presences_size, ready_guild_roles_size: this.readyProperties.guild_roles_size, ready_guild_emojis_size: this.readyProperties.guild_emojis_size, ready_guild_remaining_data_size: this.readyProperties.guild_remaining_data_size, ready_guild_threads_size: this.readyProperties.guild_threads_size, ready_guild_stickers_size: this.readyProperties.guild_stickers_size, ready_guild_events_size: this.readyProperties.guild_events_size, ready_guild_features_size: this.readyProperties.guild_features_size, ready_size_metrics_duration_ms: this.readyProperties.size_metrics_duration_ms, had_cache_at_startup: this.readyProperties.had_cache_at_startup, used_cache_at_startup: this.readyProperties.used_cache_at_startup, was_authenticated: this.wasAuthenticated, did_background_app: this.didBackgroundApp, interstitial: this.interstitial, message_cache_missing_reason: this.messageCacheMissingReason, message_cache_age_seconds: this.messageCacheAgeSeconds, message_cache_count: this.messageCacheCount, message_cache_having_count: this.messageCacheHavingCount, message_cache_missing_count: this.messageCacheMissingCount, message_render_full_count: this.messageRenderFullCount, message_render_cached_count: this.messageRenderCachedCount, message_render_has_more_after: this.messageRenderHasMoreAfter, duration_major_js_imports: this.loadImports.end - this.loadIndex.start + d, cache_num_guilds: null === (t = this.cacheInfo) || void 0 === t ? void 0 : t.guilds, cache_num_private_channels: null === (r = this.cacheInfo) || void 0 === r ? void 0 : r.privateChannels, cache_num_basic_channels: null === (s = this.cacheInfo) || void 0 === s ? void 0 : s.basicChannels, cache_num_basic_channels_stale: null === (a = this.cacheInfo) || void 0 === a ? void 0 : a.basicChannelsStale, cache_num_full_channels: null === (o = this.cacheInfo) || void 0 === o ? void 0 : o.fullChannels, cache_num_full_channel_guilds: null === (l = this.cacheInfo) || void 0 === l ? void 0 : l.fullChannelGuilds, num_imports_at_load_index_end: this.loadIndex.endNumImports, num_imports_at_init_end: this.init.endNumImports, num_imports_at_load_mini_cache_end: this.loadMiniCache.endNumImports, num_imports_at_render_app_start: this.renderApp.numImports, num_imports_at_render_app_effect_start: this.renderAppEffect.numImports, num_imports_at_render_messages_end: this.renderMessages.numImports, num_imports_at_render_messages_with_cache_end: this.renderMessagesWithCache.numImports, num_imports_at_render_latest_messages_end: this.renderLatestMessages.numImports, num_imports_at_load_lazy_cache_start: this.loadLazyCache.startNumImports, num_imports_at_load_lazy_cache_end: this.loadLazyCache.endNumImports, num_imports_at_ready_start: this.ready.startNumImports, num_imports_at_ready_end: this.ready.endNumImports, num_imports_at_ready_supplemental_start: this.readySupplemental.startNumImports, num_imports_at_ready_supplemental_end: this.readySupplemental.endNumImports, duration_imports_at_load_index_start: Math.ceil(this.loadIndex.startImportTime), duration_imports_at_load_index_end: Math.ceil(this.loadIndex.endImportTime), duration_imports_at_init_end: Math.ceil(this.init.endImportTime), duration_imports_at_load_mini_cache_end: Math.ceil(this.loadMiniCache.endImportTime), duration_imports_at_render_app_start: Math.ceil(this.renderApp.importTime), duration_imports_at_render_app_effect_start: Math.ceil(this.renderAppEffect.importTime), duration_imports_at_render_messages_end: Math.ceil(this.renderMessages.importTime), duration_imports_at_render_messages_with_cache_end: Math.ceil(this.renderMessagesWithCache.importTime), duration_imports_at_render_latest_messages_end: Math.ceil(this.renderLatestMessages.importTime), duration_imports_at_load_lazy_cache_start: Math.ceil(this.loadLazyCache.startImportTime), duration_imports_at_load_lazy_cache_end: Math.ceil(this.loadLazyCache.endImportTime), duration_imports_at_ready_start: Math.ceil(this.ready.startImportTime), duration_imports_at_ready_end: Math.ceil(this.ready.endImportTime), duration_imports_at_ready_supplemental_start: Math.ceil(this.readySupplemental.startImportTime), duration_imports_at_ready_supplemental_end: Math.ceil(this.readySupplemental.endImportTime), duration_imports_at_polyfills_end: Math.ceil(this.imports.polyfillsEnd.time), duration_imports_at_sentry_end: Math.ceil(this.imports.sentryEnd.time), duration_imports_at_fast_connect_start: Math.ceil(this.beginFastConnect.startImportTime), duration_imports_at_fast_connect_end: Math.ceil(this.beginFastConnect.endImportTime), duration_imports_at_app_state_change_start: Math.ceil(this.imports.appStateChangeStart.time), duration_imports_at_app_state_change_end: Math.ceil(this.imports.appStateChangeEnd.time), duration_imports_at_load_mini_cache_start: Math.ceil(this.imports.loadMiniCacheStart.time), duration_imports_at_load_storage_start: Math.ceil(this.imports.loadStorageStart.time), duration_imports_at_load_storage_end: Math.ceil(this.imports.loadStorageEnd.time) } } constructor(...e) { super(...e), s(this, "readyProperties", {}), s(this, "didBackgroundApp", !1), s(this, "wasEverActive", !1), s(this, "wasAuthenticated", !1), s(this, "interstitial", null), s(this, "cachedChannelCounts", new Map), s(this, "cachedChannelId", null), s(this, "cachedMessageIds", null), s(this, "messageCacheMissingReason", "never-loaded"), s(this, "messageCacheAgeSeconds", null), s(this, "messageCacheCount", null), s(this, "messageCacheHavingCount", null), s(this, "messageCacheMissingCount", null), s(this, "messageRenderFullCount", null), s(this, "messageRenderCachedCount", null), s(this, "messageRenderHasMoreAfter", null), s(this, "firstAppActiveTime", null), s(this, "cacheInfo", null), s(this, "extraProperties", {}) } } }, 970731: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ButtonLayout: function() { return a }, CaretPosition: function() { return s }, default: function() { return I } }); var i, r, s, a, o = n("735250"), l = n("470079"), u = n("120356"), d = n.n(u), _ = n("481060"), c = n("921944"), E = n("835104"); function I(e) { let { className: t, header: n, headerClassName: i, content: r, contentClassName: s, buttonCTA: a, secondaryButtonCTA: u, onClick: I, onSecondaryClick: T, buttonProps: f = { color: _.Button.Colors.BRAND, look: _.Button.Looks.FILLED }, secondaryButtonProps: S = { color: _.Button.Colors.BRAND_INVERTED }, onComponentMount: h, asset: A, markAsDismissed: m, caretPosition: N = "caretTopCenter", buttonLayout: p = 0 } = e; l.useEffect(() => { null == h || h() }, []); let O = null != u; return (0, o.jsxs)("div", { className: d()(t, E.upsellTooltipWrapper, E[N]), children: [A, null == n ? null : (0, o.jsx)(_.Heading, { className: d()(i, E.upsellTooltipHeader), variant: "heading-md/semibold", children: n }), (0, o.jsx)(_.Text, { color: "always-white", className: d()(s, E.content), variant: "text-sm/normal", children: r }), null != a || O ? (0, o.jsxs)("div", { className: d()(E.upsellButtonsContainer, { [E.upsellButtonsAdjacent]: 0 === p, [E.upsellButtonsStacked]: 1 === p }), children: [O ? (0, o.jsx)(_.Button, { ...S, onClick: () => { null == T || T(), null == m || m(c.ContentDismissActionType.SECONDARY) }, children: u }) : null, null == a ? null : (0, o.jsx)(_.Button, { className: d()({ [E.fullWidth]: !O }, f.className), color: f.color, look: f.look, innerClassName: f.innerClassName, onClick: e => { I(e), null == m || m(c.ContentDismissActionType.PRIMARY) }, children: a })] }) : null] }) }(i = s || (s = {})).TOP_CENTER = "caretTopCenter", i.TOP_RIGHT = "caretTopRight", i.TOP_LEFT = "caretTopLeft", i.BOTTOM_CENTER = "caretBottomCenter", i.BOTTOM_LEFT = "caretBottomLeft", i.LEFT_CENTER = "caretLeftCenter", i.LEFT_TOP = "caretLeftTop", i.RIGHT_CENTER = "caretRightCenter", (r = a || (a = {}))[r.ADJACENT = 0] = "ADJACENT", r[r.STACKED = 1] = "STACKED", I.CaretPosition = s, I.ButtonLayout = a }, 48541: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { Environments: function() { return i } }), (r = i || (i = {})).STAGING = "staging", r.DEVELOPMENT = "development", r.PRODUCTION = "production", r.TEST = "test" }, 168232: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPremiumTypeFromRawValue: function() { return c }, isStaffEnv: function() { return d }, isStaffEnvRawData: function() { return _ }, validatePremiumType: function() { return l } }), n("789020"); var i = n("512722"), r = n.n(i), s = n("630388"), a = n("48541"), o = n("981631"); function l(e, t, n) { !e && void 0 !== t && r()(n === t, "Premium type should not change for non-staff users") } function u(e) { return "production" === a.Environments.TEST && null != e ? e : "production" } function d(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0; return u(t) === a.Environments.DEVELOPMENT || window.GLOBAL_ENV.RELEASE_CHANNEL === a.Environments.STAGING || null != e && (e.isStaff() || e.isStaffPersonal()) } function _(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : void 0; return u(t) === a.Environments.DEVELOPMENT || window.GLOBAL_ENV.RELEASE_CHANNEL === a.Environments.STAGING || null != e && (!!(null != e.flags && (0, s.hasFlag)(e.flags, o.UserFlags.STAFF)) || null != e.personal_connection_id) } function c(e) { return void 0 !== e ? e === o.PREMIUM_TYPE_NONE ? null : e : e } }, 786213: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("789020"); var i = n("981631"); function r(e) { var t; return ((null !== (t = e.flags) && void 0 !== t ? t : 0) & i.UserFlags.STAFF) === i.UserFlags.STAFF || (null == e ? void 0 : e.personal_connection_id) != null } }, 389052: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("194359"), o = n("699516"), l = n("594174"), u = n("981631"), d = n("689938"); function _(e) { let { user: t, color: n, onBlock: _, onUnblock: c, location: E = "ContextMenu" } = e, { id: I } = t, T = (0, r.useStateFromStores)([l.default], () => { var e; return (null === (e = l.default.getCurrentUser()) || void 0 === e ? void 0 : e.id) === I }, [I]), f = (0, r.useStateFromStores)([o.default], () => o.default.isBlocked(I), [I]); return T ? null : (0, i.jsx)(s.MenuItem, { id: "block", color: n, label: f ? d.default.Messages.UNBLOCK : d.default.Messages.BLOCK, action: f ? () => { null == c || c(), a.default.unblockUser(I, { location: E }) } : () => { (0, s.openModal)(e => (0, i.jsx)(s.ConfirmModal, { header: d.default.Messages.CONFIRM_USER_BLOCK_TITLE.format({ name: t.username }), confirmText: d.default.Messages.BLOCK, cancelText: d.default.Messages.CANCEL, onConfirm: () => { null == _ || _(), a.default.addRelationship({ userId: I, context: { location: E }, type: u.RelationshipTypes.BLOCKED }) }, ...e, children: (0, i.jsx)(s.Text, { variant: "text-md/normal", children: d.default.Messages.CONFIRM_USER_BLOCK_BODY.format({ name: t.username }) }) })) } }) } }, 297047: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T }, mentionUser: function() { return I } }), n("47120"); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("144144"), o = n("592125"), l = n("496675"), u = n("944486"), d = n("585483"), _ = n("51144"), c = n("981631"), E = n("689938"); function I(e, t) { let { id: n } = e, i = "@".concat(_.default.getUserTag(e, { decoration: "never" })); d.ComponentDispatch.dispatchToLastSubscribed(c.ComponentActions.INSERT_TEXT, { plainText: i, rawText: "<@".concat(n, ">") }), null != t && a.default.startTyping(t) } function T(e, t, n) { let [a, d] = (0, r.useStateFromStoresArray)([u.default, o.default, l.default], () => { let e = u.default.getChannelId(t), n = o.default.getChannel(e); return [e, null != n && (n.isMultiUserDM() || l.default.can(c.Permissions.SEND_MESSAGES, n))] }, [t]), _ = n === c.AppContext.POPOUT; return !d || _ ? null : (0, i.jsx)(s.MenuItem, { id: "mention", label: E.default.Messages.MENTION, action: function() { I(e, a) } }) } }, 822972: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("194359"), o = n("699516"), l = n("689938"); function u(e) { let { user: t, color: n, location: u, onAction: d } = e; return !(0, r.useStateFromStores)([o.default], () => o.default.isFriend(t.id)) || t.isNonUserBot() ? null : (0, i.jsx)(s.MenuItem, { id: "remove-friend", color: n, label: l.default.Messages.REMOVE_FRIEND, action: () => { (0, s.openModal)(e => (0, i.jsx)(s.ConfirmModal, { header: l.default.Messages.REMOVE_FRIEND_TITLE.format({ name: t.username }), confirmText: l.default.Messages.REMOVE_FRIEND, cancelText: l.default.Messages.CANCEL, onConfirm: () => { null == d || d(), a.default.removeFriend(t.id, null != u ? { location: u } : void 0) }, ...e, children: (0, i.jsx)(s.Text, { variant: "text-md/normal", children: l.default.Messages.REMOVE_FRIEND_BODY.format({ name: t.username }) }) })) } }) } }, 622724: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("100527"), a = n("726521"), o = n("87620"), l = n("981631"), u = n("689938"); function d(e) { let { user: t, guildId: n, color: d, onAction: _, location: c = s.default.CONTEXT_MENU } = e; return !(0, o.useIsIarUserReportingEnabled)(c) || t.isNonUserBot() ? null : (0, i.jsx)(r.MenuItem, { id: "report-user", color: d, label: u.default.Messages.REPORTS_USER_BUTTON_TITLE, action: () => (0, a.showReportModalForUser)(t, n === l.ME ? void 0 : n, _) }) } }, 397550: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isLimitedAccessErrorCode: function() { return r } }); var i = n("981631"); function r(e, t) { return e >= 400 && e < 500 && null != t && t >= i.AbortCodes.USER_LIMITED_ACCESS_DEFAULT && t <= i.AbortCodes.USER_LIMITED_ACCESS_MAX } }, 228168: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TrackUserProfileProperties: function() { return c }, USER_PROFILE_TOOLTIP_DELAY: function() { return T }, UserProfileSections: function() { return l }, UserProfileTypes: function() { return d }, getBadgeAsset: function() { return f } }); var i, r, s, a, o, l, u, d, _, c, E, I = n("981631"); let T = 300; function f(e) { let { API_ENDPOINT: t, CDN_HOST: n } = window.GLOBAL_ENV; return null != n ? "".concat(location.protocol, "//").concat(n, "/badge-icons/").concat(e, ".png") : "".concat(location.protocol).concat(t).concat(I.Endpoints.BADGE_ICON(e)) }(i = l || (l = {})).USER_INFO = "USER_INFO", i.USER_INFO_CONNECTIONS = "USER_INFO_CONNECTIONS", i.ACTIVITY = "ACTIVITY", i.MUTUAL_GUILDS = "MUTUAL_GUILDS", i.MUTUAL_FRIENDS = "MUTUAL_FRIENDS", i.BOT_DATA_ACCESS = "BOT_DATA_ACCESS", (u || (u = {})).RECENT_GAMES = "RECENT_GAMES", (r = d || (d = {})).POPOUT = "POPOUT", r.MODAL = "MODAL", r.SETTINGS = "SETTINGS", r.PANEL = "PANEL", r.CARD = "CARD", r.POMELO_POPOUT = "POMELO_POPOUT", r.CANCEL_MODAL = "CANCEL_MODAL", r.BITE_SIZE = "BITE_SIZE", r.FULL_SIZE = "FULL_SIZE", (s = _ || (_ = {})).POPOUT = "POPOUT", s.BITE_SIZE_POPOUT = "BITE_SIZE_POPOUT", s.MODAL = "MODAL", s.SIMPLIFIED_MODAL = "SIMPLIFIED_MODAL", s.DM_PANEL = "DM_PANEL", s.SIMPLIFIED_DM_PANEL = "SIMPLIFIED_DM_PANEL", s.ACCOUNT_POPOUT = "ACCOUNT_POPOUT", s.ACTION_SHEET = "ACTION_SHEET", s.SIMPLIFIED_ACCOUNT_POPOUT = "SIMPLIFIED_ACCOUNT_POPOUT", (a = c || (c = {}))[a.NICKNAME = 0] = "NICKNAME", a[a.PRONOUNS = 1] = "PRONOUNS", a[a.AVATAR = 2] = "AVATAR", a[a.ANIMATED_AVATAR = 3] = "ANIMATED_AVATAR", a[a.BANNER = 4] = "BANNER", a[a.ANIMATED_BANNER = 5] = "ANIMATED_BANNER", a[a.BIO = 6] = "BIO", a[a.THEME = 7] = "THEME", a[a.AVATAR_DECORATION = 8] = "AVATAR_DECORATION", a[a.PROFILE_EFFECT = 9] = "PROFILE_EFFECT", (o = E || (E = {})).VIEW = "VIEW", o.SEND_MESSAGE = "SEND_MESSAGE", o.SEND_DIRECT_MESSAGE = "SEND_DIRECT_MESSAGE", o.SEND_FRIEND_REQUEST = "SEND_FRIEND_REQUEST", o.ACCEPT_FRIEND_REQUEST = "ACCEPT_FRIEND_REQUEST", o.IGNORE_FRIEND_REQUEST = "IGNORE_FRIEND_REQUEST", o.CANCEL_FRIEND_REQUEST = "CANCEL_FRIEND_REQUEST", o.REMOVE_FRIEND = "REMOVE_FRIEND", o.BLOCK = "BLOCK", o.UNBLOCK = "UNBLOCK", o.REPORT = "REPORT", o.COPY_USERNAME = "COPY_USERNAME", o.COPY_USER_ID = "COPY_USER_ID", o.PRESS_VIEW_PROFILE = "PRESS_VIEW_PROFILE", o.PRESS_VIEW_MAIN_PROFILE = "PRESS_VIEW_MAIN_PROFILE", o.PRESS_VIEW_SERVER_PROFILE = "PRESS_VIEW_SERVER_PROFILE", o.PRESS_OPTIONS = "PRESS_OPTIONS", o.HOVER_BADGE = "HOVER_BADGE", o.PRESS_BADGE = "PRESS_BADGE", o.PRESS_SECTION = "PRESS_SECTION", o.PRESS_PRONOUNS = "PRESS_PRONOUNS", o.PRESS_PREMIUM_UPSELL = "PRESS_PREMIUM_UPSELL", o.PRESS_ADD_NOTE = "PRESS_ADD_NOTE", o.PRESS_SET_STATUS = "PRESS_SET_STATUS", o.PRESS_SET_CUSTOM_STATUS = "PRESS_SET_CUSTOM_STATUS", o.PRESS_SWITCH_ACCOUNTS = "PRESS_SWITCH_ACCOUNTS", o.PRESS_SET_FRIEND_NICKNAME = "PRESS_SET_FRIEND_NICKNAME", o.PRESS_MOD_VIEW = "PRESS_MOD_VIEW", o.JOIN_ACTIVITY = "JOIN_ACTIVITY", o.SET_NOTE = "SET_NOTE", o.SET_VOLUME = "SET_VOLUME", o.EDIT_PROFILE = "EDIT_PROFILE", o.EDIT_GUILD_PROFILE = "EDIT_GUILD_PROFILE", o.VOICE_CALL = "VOICE_CALL", o.VIDEO_CALL = "VIDEO_CALL", o.MUTE = "MUTE", o.MUTE_SOUNDBOARD = "MUTE_SOUNDBOARD", o.DISABLE_VIDEO = "DISABLE_VIDEO", o.DEAFEN = "DEAFEN", o.DISCONNECT = "DISCONNECT", o.ADD_ROLE = "ADD_ROLE", o.REMOVE_ROLE = "REMOVE_ROLE" }, 255564: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }), n("47120"); var i = n("150039"), r = n("768581"), s = n("74538"), a = n("474936"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function l(e, t) { return null == t || "" === t ? e : t } class u { get premiumSince() { return this._userProfile.premiumSince } get premiumGuildSince() { return this._userProfile.premiumGuildSince } get premiumType() { return this._userProfile.premiumType } get primaryColor() { var e, t; return null !== (t = null === (e = this.themeColors) || void 0 === e ? void 0 : e[0]) && void 0 !== t ? t : this.accentColor } get canUsePremiumProfileCustomization() { return s.default.isPremiumAtLeast(this.premiumType, a.PremiumTypes.TIER_2) } get canEditThemes() { return this.canUsePremiumProfileCustomization } get application() { return this._userProfile.application } hasThemeColors() { var e, t; return (null === (e = this.themeColors) || void 0 === e ? void 0 : e[0]) != null || (null === (t = this.themeColors) || void 0 === t ? void 0 : t[1]) != null } hasPremiumCustomization() { return this.isUsingGuildMemberBanner() || this.isUsingGuildMemberBio() || null != this.banner || this.hasThemeColors() || null != this.popoutAnimationParticleType } hasFullProfile() { return void 0 !== this._userProfile && (null == this.guildId || void 0 !== this._guildMemberProfile) } isUsingGuildMemberBanner() { var e; return (null === (e = this._guildMemberProfile) || void 0 === e ? void 0 : e.banner) != null } isUsingGuildMemberBio() { var e, t; return (null === (e = this._guildMemberProfile) || void 0 === e ? void 0 : e.bio) != null && (null === (t = this._guildMemberProfile) || void 0 === t ? void 0 : t.bio) !== "" } isUsingGuildMemberPronouns() { var e, t; return (null === (e = this._guildMemberProfile) || void 0 === e ? void 0 : e.pronouns) != null && (null === (t = this._guildMemberProfile) || void 0 === t ? void 0 : t.pronouns) !== "" } getBannerURL(e) { let { canAnimate: t, size: n } = e; return null != this.guildId && this.isUsingGuildMemberBanner() ? (0, r.getGuildMemberBannerURL)({ id: this.userId, guildId: this.guildId, banner: this.banner, canAnimate: t, size: n }) : (0, r.getUserBannerURL)({ id: this.userId, banner: this.banner, canAnimate: t, size: n }) } getPreviewBanner(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 480; return null != e ? e : null === e ? this.isUsingGuildMemberBanner() ? (0, r.getUserBannerURL)({ id: this.userId, banner: this._userProfile.banner, canAnimate: t, size: n }) : null : this.getBannerURL({ canAnimate: t, size: 480 }) } getPreviewBio(e) { var t; return (0, i.getProfilePreviewField)(e, null === (t = this._guildMemberProfile) || void 0 === t ? void 0 : t.bio, this._userProfile.bio, null != this.guildId) } getPreviewThemeColors(e) { return (null == e ? void 0 : e[0]) != null && (null == e ? void 0 : e[1]) != null ? e : void 0 !== e ? this._userProfile.themeColors : this.themeColors } getBadges() { var e, t, n; return [...null !== (t = this._userProfile.badges) && void 0 !== t ? t : [], ...null !== (n = null === (e = this._guildMemberProfile) || void 0 === e ? void 0 : e.badges) && void 0 !== n ? n : []] } getLegacyUsername() { return this._userProfile.legacyUsername } constructor(e, t) { var n, i, r, s; o(this, "userId", void 0), o(this, "guildId", void 0), o(this, "banner", void 0), o(this, "bio", void 0), o(this, "pronouns", void 0), o(this, "accentColor", void 0), o(this, "themeColors", void 0), o(this, "popoutAnimationParticleType", void 0), o(this, "profileEffectId", void 0), o(this, "_userProfile", void 0), o(this, "_guildMemberProfile", void 0), this.userId = e.userId, this.guildId = null == t ? void 0 : t.guildId, this.banner = null !== (n = null == t ? void 0 : t.banner) && void 0 !== n ? n : e.banner, this.bio = l(e.bio, null == t ? void 0 : t.bio), this.pronouns = l(e.pronouns, null == t ? void 0 : t.pronouns), this.accentColor = e.accentColor, this.themeColors = null !== (i = null == t ? void 0 : t.themeColors) && void 0 !== i ? i : e.themeColors, this.popoutAnimationParticleType = null !== (r = null == t ? void 0 : t.popoutAnimationParticleType) && void 0 !== r ? r : e.popoutAnimationParticleType, this.profileEffectId = null !== (s = null == t ? void 0 : t.profileEffectId) && void 0 !== s ? s : e.profileEffectId, this._userProfile = e, this._guildMemberProfile = t } } }, 342656: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isInProfileMutualsExperiment: function() { return s }, useProfileMutualsExperiment: function() { return a } }); var i = n("818083"); let r = (0, i.createExperiment)({ kind: "user", id: "2024-03_profile_mutuals", label: "Profile Mutuals", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Show Profile Mutuals (Friends/Guilds)", config: { enabled: !0 } }] }), s = function() { let { autoTrackExposure: e = !1, disable: t = !1, location: n = "24rt789ugh" } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return r.getCurrentConfig({ location: n }, { autoTrackExposure: e, disable: t }) }, a = function() { let { autoTrackExposure: e = !1, disable: t = !1, location: n = "24rt789ugh" } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return r.useExperiment({ location: n }, { autoTrackExposure: e, disable: t }) } }, 164946: function(e, t, n) { "use strict"; function i(e) { let t = {}; return void 0 !== e.pendingBanner && (t.banner = e.pendingBanner), null != e.pendingBio && (t.bio = e.pendingBio), null != e.pendingPronouns && (t.pronouns = e.pendingPronouns), void 0 !== e.pendingAccentColor && (t.accent_color = e.pendingAccentColor), void 0 !== e.pendingThemeColors && (t.theme_colors = e.pendingThemeColors), void 0 !== e.pendingProfileEffectId && (t.profile_effect_id = null != e.pendingProfileEffectId ? e.pendingProfileEffectId : null), t } function r(e) { let t = {}; return void 0 !== e.pendingGlobalName && (t.globalName = e.pendingGlobalName), void 0 !== e.pendingAvatar && (t.avatar = e.pendingAvatar), void 0 !== e.pendingAvatarDecoration && (t.avatarDecoration = e.pendingAvatarDecoration), t } function s(e) { let t = {}; if (void 0 !== e.pendingAvatar && (t.avatar = e.pendingAvatar), void 0 !== e.pendingNickname) { var n; t.nick = null !== (n = e.pendingNickname) && void 0 !== n ? n : "" } return void 0 !== e.pendingAvatarDecoration && (t.avatarDecoration = e.pendingAvatarDecoration), t } n.r(t), n.d(t, { getAccountUpdateForUpdateRequest: function() { return r }, getGuildMemberChangesForUpdateRequest: function() { return s }, getProfileChangesForUpdateRequest: function() { return i } }) }, 447452: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getSimplifiedProfileExperimentConfig: function() { return r }, useSimplifiedProfileExperiment: function() { return s } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-03_simplified_profile_phase_one", label: "Simplified Profile Experiment", defaultConfig: { basicsEnabled: !1, moreUserDetailsEnabled: !1, updatedOnAllSurfaces: !1 }, treatments: [{ id: 1, label: "Only the basics", config: { basicsEnabled: !0, moreUserDetailsEnabled: !1, updatedOnAllSurfaces: !1 } }, { id: 2, label: "More user details", config: { basicsEnabled: !0, moreUserDetailsEnabled: !0, updatedOnAllSurfaces: !1 } }, { id: 3, label: "Updated detailed profile across all surfaces", config: { basicsEnabled: !0, moreUserDetailsEnabled: !0, updatedOnAllSurfaces: !0 } }] }), r = e => { let { location: t, autoTrackExposure: n = !0, trackExposureOptions: r = {} } = e; return i.getCurrentConfig({ location: t }, { autoTrackExposure: n, trackExposureOptions: r }) }, s = e => { let { location: t, autoTrackExposure: n = !0, trackExposureOptions: r = {} } = e; return i.useExperiment({ location: t }, { autoTrackExposure: n, trackExposureOptions: r }) } }, 877485: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useSimplifiedProfileFriendingExperiment: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2024-05_simplified_profile_friending", label: "Simplified Profile Friending Experiment", defaultConfig: { originalFriendingEnabled: !1, improvedFriendingEnabled: !1 }, treatments: [{ id: 1, label: "Original friending", config: { originalFriendingEnabled: !0, improvedFriendingEnabled: !1 } }, { id: 2, label: "Improved friending", config: { originalFriendingEnabled: !1, improvedFriendingEnabled: !0 } }] }), r = e => { let { location: t, autoTrackExposure: n = !0, trackExposureOptions: r = {} } = e; return i.useExperiment({ location: t }, { autoTrackExposure: n, trackExposureOptions: r }) } }, 350327: function(e, t, n) { "use strict"; n.r(t), n.d(t, { handleProfileAccessibilityTooltipViewed: function() { return I }, resetPendingProfileChanges: function() { return T }, saveProfileChanges: function() { return E }, setPendingAccentColor: function() { return A }, setPendingBanner: function() { return f }, setPendingBio: function() { return S }, setPendingPronouns: function() { return h }, setPendingThemeColors: function() { return m }, setTryItOutAvatar: function() { return N }, setTryItOutAvatarDecoration: function() { return p }, setTryItOutBanner: function() { return O }, setTryItOutThemeColors: function() { return C } }); var i = n("544891"), r = n("570140"), s = n("881052"), a = n("957730"), o = n("695346"), l = n("594174"), u = n("626135"), d = n("981631"), _ = n("474936"); function c(e) { u.default.track(d.AnalyticEvents.PREMIUM_FEATURE_TRY_OUT, { feature_name: e, feature_tier: _.AnalyticsPremiumFeatureTiers.PREMIUM_STANDARD }) } async function E(e, t) { var n, u; let _ = null === (n = l.default.getCurrentUser()) || void 0 === n ? void 0 : n.id; if (null == _) return; let c = o.UseLegacyChatInput.getSetting(); null != e.bio && c && (e.bio = a.default.parse(void 0, e.bio).content); try { r.default.dispatch({ type: "USER_PROFILE_UPDATE_START", userId: _ }); let n = await i.HTTP.patch({ url: null != t ? d.Endpoints.GUILD_PROFILE(t, d.ME) : d.Endpoints.USER_PROFILE(d.ME), body: e }); if (n.ok) { let e = null === (u = n.body.profile_effect) || void 0 === u ? void 0 : u.id; r.default.dispatch({ type: "USER_PROFILE_UPDATE_SUCCESS", userId: _, profileEffectId: e, ...n.body }) } else { let e = new s.APIError(n); r.default.dispatch({ type: "USER_PROFILE_UPDATE_FAILURE", errors: n.body, apiError: e }) } return n } catch (t) { let e = new s.APIError(t); return r.default.dispatch({ type: "USER_PROFILE_UPDATE_FAILURE", errors: {}, apiError: e }), t } } function I() { r.default.dispatch({ type: "USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED" }) } function T() { r.default.dispatch({ type: "USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES" }) } function f(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER", banner: e }) } function S(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_BIO", bio: e }) } function h(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS", pronouns: e }) } function A(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR", color: e }) } function m(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS", themeColors: e }) } function N(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR", avatar: e }), c(_.AnalyticsPremiumFeatureNames.ANIMATED_AVATAR) } function p(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION", avatarDecoration: e }), c(_.AnalyticsPremiumFeatureNames.AVATAR_DECORATION) } function O(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER", banner: e }), c(_.AnalyticsPremiumFeatureNames.PROFILE_BANNER) } function C(e) { r.default.dispatch({ type: "USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS", themeColors: e }), c(_.AnalyticsPremiumFeatureNames.PROFILE_THEME_COLOR) } }, 785717: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserProfileAnalyticsProvider: function() { return l }, useTrackUserProfileAction: function() { return u }, useUserProfileAnalyticsContext: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("906732"), a = n("221292"); let o = r.createContext({}), l = e => { let { children: t, layout: n, userId: l, guildId: u, channelId: d, messageId: _, roleId: c, shouldTrackViewOnMount: E = !0 } = e, { analyticsLocations: I } = (0, s.default)(), T = r.useMemo(() => ({ layout: n, userId: l, guildId: u, channelId: d, messageId: _, roleId: c }), [n, l, u, d, _, c]); return r.useEffect(() => { E && null != n && null != l && (0, a.trackUserProfileAction)({ action: "VIEW", layout: n, userId: l, guildId: u, channelId: d, messageId: _, roleId: c, analyticsLocations: I }) }, [E]), (0, i.jsx)(o.Provider, { value: T, children: t }) }, u = e => { let { analyticsLocations: t } = (0, s.default)(); return r.useCallback(n => { let { layout: i, userId: r } = e; null != i && null != r && (0, a.trackUserProfileAction)({ analyticsLocations: t, layout: i, userId: r, ...e, ...n }) }, [e, t]) }, d = () => { let e = r.useContext(o); return { trackUserProfileAction: u(e), ...e } } }, 221292: function(e, t, n) { "use strict"; n.r(t), n.d(t, { trackUserProfileAction: function() { return N }, trackUserProfileActivityJoined: function() { return p }, trackUserProfileBadgeHovered: function() { return R }, trackUserProfileBadgePressed: function() { return O }, trackUserProfileRecentGamesViewed: function() { return C } }), n("653041"); var i = n("367907"), r = n("271383"), s = n("158776"), a = n("699516"), o = n("800599"), l = n("594174"), u = n("626135"), d = n("768581"), _ = n("621853"), c = n("318661"), E = n("228168"), I = n("981631"), T = n("231338"); let f = e => { let { user: t, userProfile: n, guildMember: i, guildMemberProfile: r } = e, s = null != n ? n : r, a = []; if ((null == i ? void 0 : i.nick) && a.push(E.TrackUserProfileProperties.NICKNAME), (null == s ? void 0 : s.pronouns) && a.push(E.TrackUserProfileProperties.PRONOUNS), null == t ? void 0 : t.avatar) { let e = (0, d.isAnimatedIconHash)(null == t ? void 0 : t.avatar); a.push(e ? E.TrackUserProfileProperties.ANIMATED_AVATAR : E.TrackUserProfileProperties.AVATAR) } if (null == s ? void 0 : s.banner) { let e = (0, d.isAnimatedIconHash)(null == s ? void 0 : s.banner); a.push(e ? E.TrackUserProfileProperties.ANIMATED_BANNER : E.TrackUserProfileProperties.BANNER) } return (null == s ? void 0 : s.bio) && a.push(E.TrackUserProfileProperties.BIO), (null == s ? void 0 : s.themeColors) != null && void 0 !== s.themeColors.find(e => null !== e) && a.push(E.TrackUserProfileProperties.THEME), (null == t ? void 0 : t.avatarDecoration) != null && a.push(E.TrackUserProfileProperties.AVATAR_DECORATION), (null == s ? void 0 : s.profileEffectId) != null && a.push(E.TrackUserProfileProperties.PROFILE_EFFECT), a }, S = e => { let t = s.default.getStatus(e), n = s.default.isMobileOnline(e); return t === T.StatusTypes.ONLINE && n ? "".concat(t, "-mobile") : t === T.StatusTypes.ONLINE ? "".concat(t, "-desktop") : t }, h = e => null == e ? e : Object.keys(I.ActivityTypes)[Object.values(I.ActivityTypes).indexOf(e)], A = e => { var t, n; let { layout: i, userId: a, guildId: o } = e, u = l.default.getUser(a); if (null == u) return {}; let d = (0, c.getDisplayProfile)(null == u ? void 0 : u.id, o), _ = null != o ? r.default.getMember(o, null == u ? void 0 : u.id) : null; return { profile_layout: i, profile_properties: f({ user: u, userProfile: null == d ? void 0 : d._userProfile }), guild_profile_properties: f({ guildMember: _, guildMemberProfile: null == d ? void 0 : d._guildMemberProfile }), profile_activity_types: s.default.getActivities(u.id).map(e => { let { type: t } = e; return t }).filter(e => void 0 !== e), profile_badges: null == d ? void 0 : null === (t = d.getBadges()) || void 0 === t ? void 0 : t.map(e => { let { id: t } = e; return t }), avatar_decoration_sku_id: null === (n = u.avatarDecoration) || void 0 === n ? void 0 : n.skuId, profile_effect_sku_id: null == d ? void 0 : d.profileEffectId, user_status: S(u.id) } }, m = e => { var t, n; return null == e ? {} : { related_user_id: e, relationship_type: a.default.getRelationshipType(e), related_since: a.default.getSince(e), num_mutual_friends: _.default.getMutualFriendsCount(e), num_mutual_guilds: null === (t = _.default.getMutualGuilds(e)) || void 0 === t ? void 0 : t.length, affinity: null === (n = o.default.getUserAffinity(e)) || void 0 === n ? void 0 : n.affinity } }, N = e => { let { userId: t, guildId: n, channelId: r, messageId: s, roleId: a, analyticsLocations: o, layout: l, action: d, section: _ } = e; u.default.track(I.AnalyticEvents.USER_PROFILE_ACTION, { ...(0, i.collectGuildAnalyticsMetadata)(n), ...(0, i.collectChannelAnalyticsMetadataFromId)(r), ...A({ layout: l, userId: t, guildId: n }), ...m(t), location_stack: o, profile_action: d, profile_section: _, source_message_id: s, source_role_id: a }) }, p = e => { let { userId: t, guildId: n, channelId: r, analyticsLocations: s, layout: a, activityType: o, activityName: l, activityPlatform: d, activitySessionId: _, applicationId: c, voiceChannelId: E } = e; u.default.track(I.AnalyticEvents.USER_PROFILE_ACTIVITY_JOINED, { ...(0, i.collectGuildAnalyticsMetadata)(n), ...(0, i.collectChannelAnalyticsMetadataFromId)(r), ...A({ layout: a, userId: t, guildId: n }), ...m(t), location_stack: s, activity_type: null != E ? "VOICE" : h(o), activity_name: l, activity_platform: d, activity_session_id: _, application_id: c, voice_channel_id: E }) }, O = e => { let { userId: t, guildId: n, channelId: r, analyticsLocations: s, layout: a, badge: o } = e; u.default.track(I.AnalyticEvents.USER_PROFILE_BADGE_PRESSED, { ...(0, i.collectGuildAnalyticsMetadata)(n), ...(0, i.collectChannelAnalyticsMetadataFromId)(r), ...A({ layout: a, userId: t, guildId: n }), ...m(t), location_stack: s, badge: o }) }, C = e => { let { userId: t, guildId: n, channelId: r, analyticsLocations: s, layout: a, applicationIds: o, newApplicationIds: l, sharedApplicationIds: d } = e; u.default.track(I.AnalyticEvents.USER_PROFILE_RECENT_GAMES_VIEWED, { ...(0, i.collectGuildAnalyticsMetadata)(n), ...(0, i.collectChannelAnalyticsMetadataFromId)(r), ...A({ layout: a, userId: t, guildId: n }), ...m(t), location_stack: s, profile_application_ids: o, profile_new_applications_ids: l, profile_shared_applications_ids: d }) }, R = e => { let { userId: t, guildId: n, channelId: r, analyticsLocations: s, layout: a, badge: o } = e; u.default.track(I.AnalyticEvents.USER_PROFILE_BADGE_HOVERED, { ...(0, i.collectGuildAnalyticsMetadata)(n), ...(0, i.collectChannelAnalyticsMetadataFromId)(r), ...A({ layout: a, userId: t, guildId: n }), ...m(t), location_stack: s, badge: o }) } }, 168631: function(e, t, n) { "use strict"; n.r(t), n.d(t, { calculateButtonColor: function() { return h }, getProfileTheme: function() { return I }, getValueInColorGradientByPercentage: function() { return T }, useAvatarBorderColor: function() { return S }, useDividerColor: function() { return m }, useMessageInputBorderColor: function() { return A }, useProfileThemeValues: function() { return E } }), n("47120"); var i = n("470079"), r = n("392711"), s = n("866442"), a = n("399606"), o = n("692547"), l = n("780384"), u = n("607070"), d = n("44315"), _ = n("564334"), c = n("981631"); function E(e) { let t = (0, a.useStateFromStores)([u.default], () => u.default.saturation); return (0, i.useMemo)(() => null == e ? null : { overlaySyncedWithUserTheme: o.default.colors.PROFILE_GRADIENT_OVERLAY_SYNCED_WITH_USER_THEME.resolve({ theme: e, saturation: t }).hsl(), overlay: o.default.colors.PROFILE_GRADIENT_OVERLAY.resolve({ theme: e, saturation: t }).hsl(), sectionBox: o.default.colors.PROFILE_GRADIENT_SECTION_BOX.resolve({ theme: e, saturation: t }).hsl(), messageInputBorder: o.default.colors.PROFILE_GRADIENT_MESSAGE_INPUT_BORDER.resolve({ theme: e, saturation: t }).hsl(), dividerOpacity: e === o.default.themes.DARK ? .24 : .12, noteBackgroundColor: o.default.colors.PROFILE_GRADIENT_NOTE_BACKGROUND.resolve({ theme: e, saturation: t }).hsl(), profileBodyBackgroundHover: o.default.colors.PROFILE_GRADIENT_PROFILE_BODY_BACKGROUND_HOVER.resolve({ theme: e, saturation: t }).hsl(), rolePillBackgroundColor: o.default.colors.PROFILE_GRADIENT_ROLE_PILL_BACKGROUND.resolve({ theme: e, saturation: t }).hsl(), rolePillBorderColor: o.default.colors.PROFILE_GRADIENT_ROLE_PILL_BORDER.resolve({ theme: e, saturation: t }).hsl(), icon: o.default.colors.INTERACTIVE_NORMAL.resolve({ theme: e, saturation: t }).hsl() }, [e, t]) } function I(e) { return null == e ? null : (0, s.getDarkness)(e) > .5 ? c.ThemeTypes.DARK : c.ThemeTypes.LIGHT } function T(e, t, n) { let i = n / 100, r = 1 - i; return [Math.round(e[0] * r + t[0] * i), Math.round(e[1] * r + t[1] * i), Math.round(e[2] * r + t[2] * i)] } function f(e, t) { let n = (0, s.int2rgbArray)(e); if (null == t) return 0; let i = _.default.parseString(t); if (null == i) return 0; let r = [i.red, i.green, i.blue], a = [n[0], n[1], n[2]], o = i.alpha, [l, u, d] = r.map((e, t) => Math.floor(o * e + (1 - o) * a[t])); return (0, s.rgb2int)("rgba(".concat(l, ", ").concat(u, ", ").concat(d, ")")) } function S(e, t, n) { let i = E(e); return null == i || null == t ? null : f(t, n ? i.overlaySyncedWithUserTheme : i.overlay) } let h = (0, r.memoize)(e => { let t = (0, l.getContrastingColor)(e, { base: "#ffffff", contrastRatio: l.WCAGContrastRatios.HighContrastText }); return (0, s.hex2int)(t) }, e => e); function A(e, t) { let n = E(e); return null != n && null != t ? f(t, null == n ? void 0 : n.messageInputBorder) : null } function m(e, t) { let n = (0, d.useColorValue)(c.Color.WHITE_500).hex; return (0, l.isThemeDark)(e) ? (0, s.hex2int)(n) : null != t ? h(t) : null } }, 621853: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"); var i = n("392711"), r = n.n(i), s = n("726542"), a = n("706454"), o = n("598077"), l = n("314897"), u = n("430824"), d = n("158776"), _ = n("412788"), c = n("771845"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = new Set, T = new Set, f = {}, S = {}, h = {}, A = {}, m = {}, N = !1, p = !1; function O() { I.clear(), T.clear(), f = {}, S = {}, h = {}, A = {}, m = {}, N = !1 } function C(e) { let { userId: t } = e; T.add(t) } function R(e) { let { userId: t } = e; T.delete(t) } function g(e) { return r()(e).map(e => ({ key: e.id, user: new o.default(e), status: d.default.getStatus(e.id) })).sortBy(e => { let { user: t } = e; return t.username.toLowerCase() }).value() } function L(e) { T.delete(e.userId), h[e.userId] = g(e.mutualFriends), A[e.userId] = e.mutualFriends.length } function v() { if (0 === Object.keys(m).length) return !1; m = {} } function D(e) { if (null == m[e.user.id]) return !1; delete m[e.user.id] } function M(e) { var t, n, i, r, a, o, l, d, _, E, T, N, p, O, C, R, L; if (I.delete(e.user.id), null != e.mutual_guilds) { let t = {}; e.mutual_guilds.forEach(e => { let { id: n, nick: i } = e, r = u.default.getGuild(n); null != r && (t[n] = { guild: r, nick: i }) }), m[e.user.id] = c.default.getFlattenedGuildIds().filter(e => null != t[e]).map(e => ({ guild: t[e].guild, nick: t[e].nick })) } if (null != e.mutual_friends_count) { let t = e.mutual_friends_count; A[e.user.id] = t } null != e.mutual_friends && (h[e.user.id] = g(e.mutual_friends), A[e.user.id] = e.mutual_friends.length); let v = null !== (_ = e.premium_since) && void 0 !== _ ? _ : null, D = e.application; if (f[e.user.id] = { userId: e.user.id, banner: null === (t = e.user_profile) || void 0 === t ? void 0 : t.banner, accentColor: null === (n = e.user_profile) || void 0 === n ? void 0 : n.accent_color, themeColors: null === (i = e.user_profile) || void 0 === i ? void 0 : i.theme_colors, popoutAnimationParticleType: null === (r = e.user_profile) || void 0 === r ? void 0 : r.popout_animation_particle_type, bio: null !== (E = null === (a = e.user_profile) || void 0 === a ? void 0 : a.bio) && void 0 !== E ? E : "", profileEffectId: null === (l = e.user_profile) || void 0 === l ? void 0 : null === (o = l.profile_effect) || void 0 === o ? void 0 : o.id, pronouns: null !== (T = null === (d = e.user_profile) || void 0 === d ? void 0 : d.pronouns) && void 0 !== T ? T : "", connectedAccounts: null !== (N = e.connected_accounts.filter(e => s.default.isSupported(e.type))) && void 0 !== N ? N : [], applicationRoleConnections: null !== (p = e.application_role_connections) && void 0 !== p ? p : [], premiumSince: null != v ? new Date(v) : null, premiumType: e.premium_type, premiumGuildSince: null != e.premium_guild_since ? new Date(e.premium_guild_since) : null, lastFetched: Date.now(), legacyUsername: e.legacy_username, profileFetchFailed: !1, application: null != D ? { id: D.id, primarySkuId: D.primary_sku_id, customInstallUrl: D.custom_install_url, installParams: D.install_params, integrationTypesConfig: D.integration_types_config, flags: D.flags, popularApplicationCommandIds: D.popular_application_command_ids, storefront_available: D.storefront_available } : null, badges: e.badges }, null != e.guild_member_profile) { let t = { userId: e.user.id, guildId: e.guild_member_profile.guild_id, banner: e.guild_member_profile.banner, accentColor: e.guild_member_profile.accent_color, themeColors: null === (O = e.guild_member_profile) || void 0 === O ? void 0 : O.theme_colors, popoutAnimationParticleType: null === (C = e.guild_member_profile) || void 0 === C ? void 0 : C.popout_animation_particle_type, profileEffectId: null === (L = e.guild_member_profile) || void 0 === L ? void 0 : null === (R = L.profile_effect) || void 0 === R ? void 0 : R.id, bio: e.guild_member_profile.bio, pronouns: e.guild_member_profile.pronouns, badges: e.guild_badges }; null != S[e.user.id] ? S[e.user.id][e.guild_member_profile.guild_id] = t : S[e.user.id] = { [e.guild_member_profile.guild_id]: t } } } function y(e) { let { userId: t } = e; I.add(t) } function P(e) { var t; let { userId: n } = e; f[n] = null !== (t = f[n]) && void 0 !== t ? t : { connectedAccounts: [], applicationRoleConnections: [], premiumSince: null, premiumGuildSince: null, lastFetched: Date.now(), profileFetchFailed: !0, application: null, legacyUsername: null, userId: n, banner: null, accentColor: null, bio: "", pronouns: "" }, I.delete(n) } function U(e) { N = !0 } function b(e) { N = !1, null != e.guild_id ? ! function(e) { let { userId: t, guild_id: n, accent_color: i, banner: r, bio: s, pronouns: a, popout_animation_particle_type: o, theme_colors: l, profileEffectId: u } = e; if (null == n || null == S[t]) return !1; let d = S[t][n]; if (null == d) return !1; S[t][n] = { ...d, accentColor: i, banner: r, bio: s, pronouns: a, popoutAnimationParticleType: o, themeColors: l, profileEffectId: u } }(e) : ! function(e) { let { userId: t, accent_color: n, banner: i, bio: r, pronouns: s, popout_animation_particle_type: a, theme_colors: o, profileEffectId: l } = e, u = f[t]; if (null == u) return !1; f[t] = { ...u, accentColor: n, banner: i, bio: r, pronouns: s, popoutAnimationParticleType: a, themeColors: o, profileEffectId: l } }(e) } function G(e) { N = !1 } function w(e) { p = !0 } function k(e) { let { user: t } = e; if (I.has(t.id) || null == f[t.id]) return !1; f[t.id].lastFetched = 0 } function B() { I.clear(), f = {}, S = {} } class V extends _.default { initialize() { this.waitFor(c.default), this.syncWith([a.default], B) } isFetchingProfile(e) { return I.has(e) } isFetchingFriends(e) { return T.has(e) } get isSubmitting() { return N } getUserProfile(e) { return f[e] } getGuildMemberProfile(e, t) { var n; return null == t ? null : null === (n = S[e]) || void 0 === n ? void 0 : n[t] } getMutualFriends(e) { return h[e] } getMutualFriendsCount(e) { return A[e] } getMutualGuilds(e) { return m[e] } getIsAccessibilityTooltipViewed() { return p } takeSnapshot() { let e = l.default.getId(); return { version: V.LATEST_SNAPSHOT_VERSION, data: [{ userId: e, profile: f[e] }] } } constructor() { super({ CACHE_LOADED_LAZY: () => this.loadCache(), USER_PROFILE_FETCH_START: y, USER_PROFILE_FETCH_FAILURE: P, USER_PROFILE_FETCH_SUCCESS: M, USER_PROFILE_UPDATE_START: U, USER_PROFILE_UPDATE_SUCCESS: b, USER_PROFILE_UPDATE_FAILURE: G, USER_PROFILE_ACCESSIBILITY_TOOLTIP_VIEWED: w, MUTUAL_FRIENDS_FETCH_START: C, MUTUAL_FRIENDS_FETCH_SUCCESS: L, MUTUAL_FRIENDS_FETCH_FAILURE: R, GUILD_JOIN: v, GUILD_DELETE: v, GUILD_MEMBER_ADD: D, GUILD_MEMBER_REMOVE: D, GUILD_MEMBER_UPDATE: k, USER_UPDATE: k, LOGOUT: O }), E(this, "loadCache", () => { let e = this.readSnapshot(V.LATEST_SNAPSHOT_VERSION); null != e && e.forEach(e => { let { userId: t, profile: n } = e; f[t] = n }) }) } } E(V, "displayName", "UserProfileStore"), E(V, "LATEST_SNAPSHOT_VERSION", 1), t.default = new V }, 484459: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f }, maybeFetchUserProfileForPopout: function() { return T } }), n("411104"); var i = n("570140"), r = n("232567"), s = n("220082"), a = n("275759"), o = n("365943"), l = n("598077"), u = n("592125"), d = n("271383"), _ = n("342656"), c = n("447452"), E = n("621853"), I = n("120569"); function T() { let e, t, n; for (var i, r, s = arguments.length, a = Array(s), o = 0; o < s; o++) a[o] = arguments[o]; let u = a[0], d = a[1]; if ("string" == typeof u && ("string" == typeof d || null == d)) e = u, t = d, n = a[2]; else if (u instanceof l.default && ("object" == typeof d || null == d)) e = u.id, t = u.getAvatarURL(void 0, 80), n = d; else throw Error("Invalid arguments"); if (null == e) return Promise.resolve(); let E = (0, _.isInProfileMutualsExperiment)().enabled || (0, c.getSimplifiedProfileExperimentConfig)({ location: "maybeFetchUserProfileForPopout", autoTrackExposure: !1 }).basicsEnabled; return f(e, t, { withMutualFriends: null !== (i = null == n ? void 0 : n.withMutualFriends) && void 0 !== i ? i : E, withMutualGuilds: null !== (r = null == n ? void 0 : n.withMutualGuilds) && void 0 !== r ? r : E, ...n }) } async function f(e, t) { var n, l, _; let c, { withMutualGuilds: T = !1, withMutualFriendsCount: f = !1, withMutualFriends: S = !1, friendToken: h, preloadUserBanner: A = !0, dispatchWait: m = !1, guildId: N, channelId: p, abortSignal: O } = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; if ("" === e) return; (0, o.fetchUserProfileEffects)(), null != t && (0, s.maybeFetchColors)(t), null != N && !T && (T = !0), null != N && (c = null !== (l = null === (n = (0, a.getVisibleConnectionsRole)({ guildMember: d.default.getMember(N, e), channel: u.default.getChannel(p) })) || void 0 === n ? void 0 : n.id) && void 0 !== l ? l : void 0); let C = E.default.getUserProfile(e), R = E.default.getMutualGuilds(e), g = E.default.getMutualFriends(e), L = E.default.getMutualFriendsCount(e), v = E.default.isFetchingProfile(e), D = !Array.isArray(R) && T, M = !Array.isArray(g) && S, y = null == L && f, P = (null == C ? void 0 : C.profileFetchFailed) || !v && (D || y || M), U = A ? I.default : void 0, b = !1; null != N && (b = null == E.default.getGuildMemberProfile(e, N)), !(!P && !b && (v || Date.now() - (null !== (_ = null == C ? void 0 : C.lastFetched) && void 0 !== _ ? _ : 0) < 6e4)) && (m ? await i.default.wait(() => (0, r.fetchProfile)(e, { withMutualGuilds: T, withMutualFriends: S, withMutualFriendsCount: f, friendToken: h, guildId: N, connectionsRoleId: c, abortSignal: O }, U)) : await (0, r.fetchProfile)(e, { withMutualGuilds: T, withMutualFriends: S, withMutualFriendsCount: f, friendToken: h, guildId: N, connectionsRoleId: c, abortSignal: O }, U)) } }, 120569: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("695346"), r = n("318661"); function s(e, t) { if ("undefined" == typeof Image) return; let n = (0, r.getDisplayProfile)(e.user.id, t); if (null == n) return; let s = i.GifAutoPlay.getSetting(), a = n.getBannerURL({ canAnimate: s, size: 480 }); if (null != a) new Image().src = a } }, 290421: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QUEST_COMPLETED_BADGE: function() { return l }, default: function() { return d } }); var i = n("399606"), r = n("695346"), s = n("246946"), a = n("594174"), o = n("689938"); let l = "quest_completed", u = "legacy_username"; function d(e) { var t; let n = r.LegacyUsernameDisabled.useSetting(), l = (0, i.useStateFromStores)([a.default], () => a.default.getCurrentUser()), d = (0, i.useStateFromStores)([s.default], () => s.default.hidePersonalInformation); if (null == e) return []; let _ = null !== (t = null == e ? void 0 : e.getBadges()) && void 0 !== t ? t : []; return null != l && l.id === e.userId && n && (_ = _.filter(e => e.id !== u)), d && (_ = _.map(e => ({ ...e, description: e.id === u ? o.default.Messages.STREAMER_MODE_ENABLED : e.description }))), _ } }, 873572: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("442837"), r = n("270144"), s = n("171246"), a = n("621853"), o = n("981631"); function l(e) { var t; let { user: n, guildId: l } = e, u = (0, i.useStateFromStores)([a.default], () => { var e; return null === (e = a.default.getUserProfile(n.id)) || void 0 === e ? void 0 : e.application }, [n]), { applicationSubscriptionListingsShown: d } = (0, r.default)({ applicationId: null == u ? void 0 : u.id, groupListingId: null == u ? void 0 : u.primarySkuId, guildId: l }), { activeSubscriptionListing: _, activeEntitlement: c, subscriptionGroupListing: E } = (0, r.useActiveSubscriptionListingForApplication)(null == u ? void 0 : u.id, l), I = null !== (t = null == E ? void 0 : E.sku_flags) && void 0 !== t ? t : 0, T = (0, s.isApplicationUserSubscription)(I) || null != l && l !== o.ME && (0, s.isApplicationGuildSubscription)(I), f = null != c; return d ? { botUpgraded: f, botUpgradeable: !f && d && T, activeSubscriptionListing: _, subscriptionGroupListing: E } : { botUpgraded: !1, botUpgradeable: !1, activeSubscriptionListing: null, subscriptionGroupListing: null } } }, 505737: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("442837"), r = n("41776"), s = n("695346"), a = n("314897"), o = n("271383"), l = n("699516"); function u(e, t) { let n = (0, i.useStateFromStores)([a.default], () => a.default.getId() === e), u = (0, i.useStateFromStores)([r.default], () => null != t && r.default.isLurking(t)), d = s.RestrictedGuildIds.useSetting(); return (0, i.useStateFromStores)([l.default, o.default], () => !n && !u && (l.default.isFriend(e) || null != o.default.memberOf(e).find(e => !d.includes(e)))) } }, 318661: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d }, getDisplayProfile: function() { return E }, useDisplayProfileWithFetchEffect: function() { return _ } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("594174"), a = n("251625"), o = n("255564"), l = n("621853"), u = n("484459"); function d(e, t) { return (0, r.useStateFromStores)([s.default, l.default], () => E(e, t, [s.default, l.default])) } function _(e, t) { return i.useEffect(() => { (0, u.default)(e, void 0, { guildId: null != t ? t : void 0 }) }, [t, e]), d(e, t) } let c = (0, a.cachedFunction)((e, t) => new o.default(e, t)); function E(e, t) { let [n, i] = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [s.default, l.default], r = n.getUser(e), a = i.getUserProfile(e), o = i.getGuildMemberProfile(e, t); return null == r || null == a ? null : c(a, o) } }, 702557: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("470079"), r = n("442837"), s = n("544891"), a = n("570140"), o = n("722086"), l = n("981631"); function u(e) { let t = (0, r.useStateFromStores)([o.default], () => o.default.getNote(e)); return i.useEffect(() => { null == t && d(e) }, [t, e]), null != t ? t : { loading: !0, note: null } } async function d(e) { a.default.dispatch({ type: "USER_NOTE_LOAD_START", userId: e }); try { let { body: t } = await s.HTTP.get({ url: l.Endpoints.NOTE(e), oldFormErrors: !0 }); a.default.dispatch({ type: "USER_NOTE_LOADED", userId: e, note: t }) } catch (t) { a.default.dispatch({ type: "USER_NOTE_LOADED", userId: e }) } } }, 166625: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"), r = n("399606"), s = n("311395"), a = n("778825"), o = n("150039"), l = n("271383"), u = n("25990"), d = n("594174"), _ = n("350327"); t.default = e => { let { isTryItOut: t, analyticsLocations: n, guildId: c } = e, E = (0, r.useStateFromStores)([d.default], () => d.default.getCurrentUser()), I = (0, r.useStateFromStores)([l.default], () => null != c && null != E ? l.default.getMember(c, E.id) : null), T = null != I ? I.avatarDecoration : null == E ? void 0 : E.avatarDecoration, f = (0, s.default)(n), { pendingAvatar: S, pendingAvatarDecoration: h, pendingErrors: A } = (0, r.useStateFromStoresObject)([u.default, a.default], () => ({ pendingAvatar: t ? u.default.getTryItOutAvatar() : null != c ? a.default.getPendingAvatar() : u.default.getPendingAvatar(), pendingAvatarDecoration: t ? u.default.getTryItOutAvatarDecoration() : null != c ? a.default.getPendingAvatarDecoration() : u.default.getPendingAvatarDecoration(), pendingErrors: null != c ? a.default.getErrors().avatarDecoration : u.default.getErrors().avatarDecoration })), m = (0, i.useCallback)(e => (0, o.setNewPendingAvatar)(e, null == E ? void 0 : E.avatar), [null == E ? void 0 : E.avatar]), N = (0, i.useCallback)(e => { (0, o.setNewPendingAvatarDecoration)(c, e), null != e && f(e) }, [f, c]); return { pendingAvatar: S, pendingAvatarDecoration: h, setPendingAvatar: t ? _.setTryItOutAvatar : m, setPendingAvatarDecoration: t ? _.setTryItOutAvatarDecoration : N, savedAvatarDecoration: T, pendingErrors: A } } }, 721987: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"); var i = n("866442"), r = n("442837"), s = n("410030"), a = n("607070"), o = n("220082"), l = n("44315"), u = n("168631"), d = n("981631"); function _(e) { var t, n, _; let { user: c, displayProfile: E, pendingThemeColors: I, pendingAvatar: T, isPreview: f } = e, S = (0, s.default)(), h = (0, r.useStateFromStores)([a.default], () => a.default.syncProfileThemeWithUserTheme), A = null != T ? T : null == c ? void 0 : c.getAvatarURL(null == E ? void 0 : E.guildId, 80), m = (0, l.useColorValue)(d.Color.PRIMARY_530).hex, [N, p] = (0, o.useAvatarColors)(A, m, !1); if (!(null == E ? void 0 : E.canEditThemes) && !f) return { theme: S, primaryColor: null, secondaryColor: null }; let O = null == E ? void 0 : E.getPreviewThemeColors(I), C = null !== (t = null == O ? void 0 : O[0]) && void 0 !== t ? t : (0, i.hex2int)(N), R = null !== (n = null == O ? void 0 : O[1]) && void 0 !== n ? n : (0, i.hex2int)(p); return { theme: h ? S : null !== (_ = (0, u.getProfileTheme)(C)) && void 0 !== _ ? _ : S, primaryColor: C, secondaryColor: R } } }, 78675: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("866442"), l = n("442837"), u = n("692547"), d = n("481060"), _ = n("220082"), c = n("583405"), E = n("695346"), I = n("451478"), T = n("311715"), f = n("768581"), S = n("74538"), h = n("888778"), A = n("943217"), m = n("793397"), N = n("474936"), p = n("214572"); function O(e) { var t, n; let { user: s, displayProfile: O, guildId: C, overrideBannerSrc: R, profileType: g, animateOnHover: L = !1, hasProfileEffect: v = !1 } = e, D = S.default.isPremiumAtLeast(null == O ? void 0 : O.premiumType, N.PremiumTypes.TIER_2), [M, y] = r.useState(!1), P = (0, l.useStateFromStores)([I.default], () => I.default.isFocused()), U = E.GifAutoPlay.getSetting(), { bannerSrc: b, status: G } = (0, h.default)({ displayProfile: O, overrideBannerSrc: R, size: (0, m.getUserBannerSize)(g), canAnimate: L || !U ? M : P }), w = (0, d.useToken)(u.default.unsafe_rawColors.PRIMARY_800).hex(), k = (0, d.getAvatarSize)(d.AvatarSizes.SIZE_80), B = (0, o.hex2int)((0, _.default)(s.getAvatarURL(C, k), w, !1)), V = (0, c.default)(null !== (t = null == O ? void 0 : O.primaryColor) && void 0 !== t ? t : B).hsl; return (0, i.jsx)(A.default, { isPremium: D, hasThemeColors: null !== (n = null == O ? void 0 : O.canEditThemes) && void 0 !== n && n, profileType: g, hasBanner: null != b, hasProfileEffect: v, children: (0, i.jsx)("div", { className: a()(p.banner, p.divider, (0, m.getUserBannerStyles)({ profileType: g, user: { hasBanner: null != b, isPremium: D, hasProfileEffect: v } })), onMouseMove: () => y(!0), onMouseLeave: () => y(!1), style: { backgroundImage: null != b ? "url(".concat(b, ")") : void 0, backgroundColor: G !== h.BannerLoadingStatus.COMPLETE ? u.default.unsafe_rawColors.PRIMARY_800.css : V }, children: !U && (0, f.isAnimatedImageURL)(b) && (0, i.jsx)(T.default, { className: p.gifTag }) }) }) } }, 80132: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("315263"), l = n("100527"), u = n("906732"), d = n("617136"), _ = n("497505"), c = n("626135"), E = n("785717"), I = n("221292"), T = n("290421"), f = n("228168"), S = n("981631"), h = n("689938"), A = n("477040"); function m(e) { let { badges: t, className: n, badgeClassName: r, onClose: m } = e, { analyticsLocations: N } = (0, u.default)(l.default.BADGE), { trackUserProfileAction: p, ...O } = (0, E.useUserProfileAnalyticsContext)(); return (0, i.jsx)("div", { className: s()(A.container, n), "aria-label": h.default.Messages.PROFILE_USER_BADGES, role: "group", children: t.map(e => (0, i.jsx)(a.TooltipContainer, { text: e.description, delay: f.USER_PROFILE_TOOLTIP_DELAY, children: (0, i.jsx)(a.Anchor, { onClick: t => { p({ action: "PRESS_BADGE" }), (0, I.trackUserProfileBadgePressed)({ badge: e.id, analyticsLocations: N, ...O }); let n = null != e.link ? (0, o.default)(e.link, { analyticsLocations: N }) : null; if (null != n) return null == m || m(), n(t) }, onMouseEnter: () => { e.id === T.QUEST_COMPLETED_BADGE && c.default.track(S.AnalyticEvents.QUEST_CONTENT_VIEWED, { ...(0, d.getContentProperties)(_.QuestContent.QUEST_BADGE) }), p({ action: "HOVER_BADGE" }), (0, I.trackUserProfileBadgeHovered)({ badge: e.id, analyticsLocations: N, ...O }) }, href: e.link, children: (0, i.jsx)("img", { alt: " ", "aria-hidden": !0, src: (0, f.getBadgeAsset)(e.icon), className: s()(A.badge, r) }) }) }, e.id)) }) } }, 735336: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return X } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("866442"), l = n("442837"), u = n("692547"), d = n("481060"), _ = n("230711"), c = n("100527"), E = n("906732"), I = n("220082"), T = n("583405"), f = n("556084"), S = n("300284"), h = n("695346"), A = n("314897"), m = n("592125"), N = n("430824"), p = n("944486"), O = n("594174"), C = n("451478"), R = n("311715"), g = n("465670"), L = n("937482"), v = n("466111"), D = n("185403"), M = n("26290"), y = n("626135"), P = n("768581"), U = n("74538"), b = n("785717"), G = n("621853"), w = n("888778"), k = n("943217"), B = n("793397"), V = n("841040"), x = n("228168"), F = n("981631"), H = n("474936"), Y = n("689938"), j = n("214572"); let W = { [x.UserProfileTypes.POPOUT]: 18, [x.UserProfileTypes.MODAL]: 24, [x.UserProfileTypes.SETTINGS]: 0, [x.UserProfileTypes.PANEL]: 18, [x.UserProfileTypes.POMELO_POPOUT]: 18, [x.UserProfileTypes.CANCEL_MODAL]: 0 }, K = { [x.UserProfileTypes.MODAL]: F.AnalyticsPages.USER_PROFILE, [x.UserProfileTypes.POPOUT]: F.AnalyticsPages.USER_POPOUT, [x.UserProfileTypes.SETTINGS]: F.AnalyticsPages.USER_POPOUT, [x.UserProfileTypes.PANEL]: F.AnalyticsPages.DM_CHANNEL, [x.UserProfileTypes.POMELO_POPOUT]: F.AnalyticsPages.POMELO_POPOUT, [x.UserProfileTypes.CANCEL_MODAL]: F.AnalyticsPages.USER_POPOUT }; function z(e) { let { type: t, shown: s, onClick: o } = e, u = (0, l.useStateFromStores)([O.default], () => { let e = O.default.getCurrentUser(); return U.default.canUsePremiumProfileCustomization(e) }), I = r.useRef(!1), { analyticsLocations: T } = (0, E.default)(c.default.BADGE); return r.useEffect(() => { s && !I.current && (I.current = !0, y.default.track(F.AnalyticEvents.PREMIUM_UPSELL_VIEWED, { type: H.PremiumUpsellTypes.CUSTOM_PROFILES_PROFILE_BANNER_SOCIAL_UPSELL, location: { page: K[t], section: F.AnalyticsSections.NITRO_BANNER, object: F.AnalyticsObjects.NITRO_BADGE }, location_stack: T })) }, [T, s, t]), (0, i.jsx)(d.Tooltip, { tooltipContentClassName: j.premiumIconTooltipContent, text: u ? Y.default.Messages.PROFILE_CUSTOMIZATION_NITRO_ICON_TOOLTIP : Y.default.Messages.USER_SETTINGS_PROFILE_THEMES_USER_PROFILE_ICON_TOOLTIP_UPSELL, children: e => (0, i.jsx)(d.Clickable, { ...e, onClick: u ? void 0 : () => { var e; e = T, (0, d.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("30364")]).then(n.bind(n, "968031")); return n => { let { onClose: r, ...s } = n; return (0, i.jsx)(t, { analyticsLocations: e, title: Y.default.Messages.USER_SETTINGS_PROFILE_THEMES_UPSELL_FROM_ICON_MODAL_TITLE, description: Y.default.Messages.USER_SETTINGS_PROFILE_THEMES_UPSELL_FROM_ICON_MODAL_DESCRIPTION.format({ onAndMoreWithPremiumClick: () => { r(), _.default.open(F.UserSettingsSections.PREMIUM, null, { analyticsLocations: e }) } }), onClose: r, ...s }) } }), null == o || o() }, className: a()(j.premiumIconWrapper, { [j.visible]: s, [j.clickable]: !u }), children: (0, i.jsx)(M.TextBadge, { color: "rgba(32, 34, 37, 0.8)", text: (0, i.jsx)(v.default, { width: 16, height: 16, className: j.premiumIcon }) }) }) }) } function Z(e) { let { darkenOnHover: t, profileType: n, profileLabel: r, icon: s, ...a } = e, o = W[n], l = "pencil" === s ? D.default : L.default; return (0, i.jsx)(d.Clickable, { ...a, "aria-label": r, className: t ? j.pencilContainerDark : j.pencilContainer, children: (0, i.jsx)(d.Tooltip, { text: r, children: e => (0, i.jsx)(l, { ...e, width: o, height: o, className: j.editIcon }) }) }) } function X(e) { var t, n, s; let { user: _, displayProfile: c, bannerSrc: E, onClose: O, guildId: L, profileType: v, isHovering: D, animateOnHover: M, allowEdit: y = !0, showPremiumBadgeUpsell: W = !0, hasProfileEffect: K = !1 } = e, X = (0, l.useStateFromStores)([N.default], () => N.default.getGuild(L)), Q = (0, l.useStateFromStores)([A.default], () => A.default.getId()) === _.id && y, q = U.default.isPremiumAtLeast(null == c ? void 0 : c.premiumType, H.PremiumTypes.TIER_2), { trackUserProfileAction: J } = (0, b.useUserProfileAnalyticsContext)(), [$, ee] = r.useState(!1), et = (0, l.useStateFromStores)([C.default], () => C.default.isFocused()), en = h.GifAutoPlay.getSetting(), { bannerSrc: ei, status: er } = (0, w.default)({ displayProfile: c, overrideBannerSrc: E, size: (0, B.getUserBannerSize)(v), canAnimate: M || !en ? $ : et }), es = (0, d.useToken)(u.default.unsafe_rawColors.PRIMARY_800).hex(), ea = (0, d.getAvatarSize)(d.AvatarSizes.SIZE_80), eo = (0, o.hex2int)((0, I.default)(_.getAvatarURL(L, ea), es, !1)), el = (0, T.default)(null !== (t = null == c ? void 0 : c.primaryColor) && void 0 !== t ? t : eo).hsl, eu = (0, l.useStateFromStores)([G.default], () => G.default.getUserProfile(_.id)), ed = m.default.getChannel(p.default.getChannelId()), { appsInGDMEnabled: e_, availableApplications: ec } = (0, f.usePrivateChannelIntegrationState)({ channelId: null !== (n = null == ed ? void 0 : ed.id) && void 0 !== n ? n : F.EMPTY_STRING_SNOWFLAKE_ID }), eE = null == eu ? void 0 : eu.application, eI = e_ && null != ec.find(e => e.id === (null == eE ? void 0 : eE.id)), eT = (0, S.default)({ analyticsLocation: { page: F.AnalyticsPages.USER_POPOUT, section: F.AnalyticsSections.PROFILE_POPOUT } }); return (0, i.jsx)(k.default, { isPremium: q, hasThemeColors: null !== (s = null == c ? void 0 : c.canEditThemes) && void 0 !== s && s, profileType: v, hasBanner: null != ei, hasProfileEffect: K, children: (0, i.jsxs)("div", { className: a()(j.banner, (0, B.getUserBannerStyles)({ profileType: v, user: { hasBanner: null != ei, isPremium: q, hasProfileEffect: K } }), { [j.reducedMotion]: !en }), onMouseMove: () => ee(!0), onMouseLeave: () => ee(!1), style: { backgroundImage: null != ei ? "url(".concat(ei, ")") : void 0, backgroundColor: er !== w.BannerLoadingStatus.COMPLETE ? u.default.unsafe_rawColors.PRIMARY_800.css : el }, children: [Q ? null == X ? (0, i.jsx)(Z, { darkenOnHover: K && D, profileType: v, profileLabel: Y.default.Messages.EDIT_PROFILE, icon: "pencil", onClick: () => { J({ action: "EDIT_PROFILE" }), null == O || O(), eT() } }) : (0, i.jsx)(d.Popout, { spacing: 6, position: "bottom", renderPopout: e => { let { closePopout: t } = e; return (0, i.jsx)(V.default, { onClose: t, onSelect: O, guild: X }) }, children: e => (0, i.jsx)(Z, { darkenOnHover: K && D, profileLabel: Y.default.Messages.EDIT_PROFILE, icon: "pencil", ...e, profileType: v }) }) : W && null != ei && v !== x.UserProfileTypes.SETTINGS ? (0, i.jsx)(z, { type: v, shown: void 0 === D ? $ : D, onClick: () => { J({ action: "PRESS_PREMIUM_UPSELL" }), null == O || O() } }) : null, eI ? v !== x.UserProfileTypes.MODAL ? null : (0, i.jsx)(d.Clickable, { onClick: O, "aria-label": Y.default.Messages.BACK, className: j.pencilContainer, children: (0, i.jsx)(d.Tooltip, { text: Y.default.Messages.BACK, children: e => (0, i.jsx)(g.default, { ...e, className: j.closeIcon, color: "white" }) }) }) : null, !en && (0, P.isAnimatedImageURL)(ei) && (0, i.jsx)(R.default, { className: j.gifTag })] }) }) } }, 943217: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }), n("411104"), n("627341"); var i = n("735250"); n("470079"); var r = n("278074"), s = n("481060"), a = n("1585"), o = n("153124"), l = n("793397"), u = n("228168"), d = n("419061"), _ = n("678444"); let c = { [u.UserProfileTypes.POPOUT]: s.AvatarSizes.SIZE_80, [u.UserProfileTypes.MODAL]: s.AvatarSizes.SIZE_120, [u.UserProfileTypes.SETTINGS]: s.AvatarSizes.SIZE_80, [u.UserProfileTypes.PANEL]: s.AvatarSizes.SIZE_80, [u.UserProfileTypes.POMELO_POPOUT]: s.AvatarSizes.SIZE_80, [u.UserProfileTypes.CANCEL_MODAL]: s.AvatarSizes.SIZE_56, [u.UserProfileTypes.BITE_SIZE]: s.AvatarSizes.SIZE_80, [u.UserProfileTypes.FULL_SIZE]: s.AvatarSizes.SIZE_120 }; function E(e) { let { children: t, profileType: n, isPremium: E, hasThemeColors: I, hasBanner: T, overrideBannerWidth: f, hasProfileEffect: S = !1 } = e, h = c[n], A = (0, o.useUID)(), m = function(e) { let { profileType: t, avatarSize: n, hasBanner: i, isPremium: o, hasThemeColors: _, hasProfileEffect: c, overrideBannerWidth: E } = e, I = d.AvatarDecorationBorderSizes[n]; if (null == I) throw Error("Unsupported avatar size for banner mask"); let T = (0, a.getDecorationSizeForAvatarSize)(n), { size: f, stroke: S } = (0, s.getAvatarSpecs)(n), h = { avatarSize: f, avatarBorderSize: S, avatarDecorationSize: T, avatarDecorationBorderSize: I, avatarDecorationOffsetY: -(T + 2 * I) / 2, bannerHeight: (0, l.getUserBannerHeight)({ profileType: t, user: { hasBanner: i, isPremium: o, hasProfileEffect: c } }) }, A = (0, r.match)(t).with(u.UserProfileTypes.POPOUT, u.UserProfileTypes.BITE_SIZE, () => { let e = _ ? 4 : 0; return { ...h, bannerWidth: (0, l.getUserBannerSize)(t), offsetX: 16 - e, offsetY: 4 + e, avatarDecorationOffsetX: 4 } }).with(u.UserProfileTypes.MODAL, u.UserProfileTypes.FULL_SIZE, () => ({ ...h, bannerWidth: (0, l.getUserBannerSize)(t), offsetX: 14, offsetY: 5, avatarDecorationOffsetX: 2 })).with(u.UserProfileTypes.SETTINGS, () => ({ ...h, bannerWidth: 660, offsetX: 16, offsetY: -22, avatarDecorationOffsetX: 8 })).with(u.UserProfileTypes.PANEL, () => ({ ...h, bannerWidth: (0, l.getUserBannerSize)(u.UserProfileTypes.PANEL), offsetX: 12, offsetY: 8, avatarDecorationOffsetX: 4 })).with(u.UserProfileTypes.POMELO_POPOUT, () => ({ ...h, bannerWidth: (0, l.getUserBannerSize)(u.UserProfileTypes.POMELO_POPOUT), offsetX: 20, offsetY: -20, avatarDecorationOffsetX: 10 })).with(u.UserProfileTypes.CANCEL_MODAL, () => ({ ...h, bannerWidth: (0, l.getUserBannerSize)(u.UserProfileTypes.CANCEL_MODAL), offsetX: 8, offsetY: 2, avatarDecorationOffsetX: 8 })).exhaustive(); return null != E ? { ...A, bannerWidth: E } : A }({ profileType: n, avatarSize: h, hasBanner: T, isPremium: E, hasThemeColors: I, hasProfileEffect: S, overrideBannerWidth: f }), N = m.avatarSize / 2 + m.avatarBorderSize, p = m.bannerHeight - m.offsetY; return (0, i.jsxs)("svg", { className: _.bannerSVGWrapper, viewBox: "0 0 ".concat(m.bannerWidth, " ").concat(m.bannerHeight), style: { minWidth: m.bannerWidth, minHeight: m.bannerHeight }, children: [(0, i.jsxs)("mask", { id: A, children: [(0, i.jsx)("rect", { fill: "white", x: "0", y: "0", width: "100%", height: "100%" }), (0, i.jsx)("circle", { fill: "black", cx: m.offsetX + N, cy: p, r: N })] }), (0, i.jsx)("foreignObject", { x: "0", y: "0", width: "100%", height: "100%", overflow: "visible", mask: "url(#".concat(A, ")"), children: t })] }) } }, 793397: function(e, t, n) { "use strict"; n.r(t), n.d(t, { buildGetPremiumUserBannerStyles: function() { return a }, getUserBannerHeight: function() { return l }, getUserBannerSize: function() { return d }, getUserBannerStyles: function() { return o } }), n("627341"); var i = n("278074"), r = n("228168"), s = n("214572"); let a = e => t => { if (t.hasBanner || t.hasProfileEffect) return e.premiumUserWithBanner; if (t.isPremium) { var n; return null !== (n = e.premiumUserWithoutBanner) && void 0 !== n ? n : e.default } return e.default }, o = e => { let { profileType: t, user: n } = e; return (0, i.match)(t).with(r.UserProfileTypes.POPOUT, r.UserProfileTypes.POMELO_POPOUT, () => a({ premiumUserWithBanner: s.popoutBannerPremium, premiumUserWithoutBanner: s.popoutNoBannerPremium, default: s.popoutBanner })(n)).with(r.UserProfileTypes.MODAL, () => a({ premiumUserWithBanner: s.modalBannerPremium, premiumUserWithoutBanner: s.modalBanner, default: s.modalBanner })(n)).with(r.UserProfileTypes.BITE_SIZE, () => a({ premiumUserWithBanner: s.biteSizeBannerPremium, premiumUserWithoutBanner: s.biteSizeBanner, default: s.biteSizeBanner })(n)).with(r.UserProfileTypes.FULL_SIZE, () => a({ premiumUserWithBanner: s.fullSizeBannerPremium, premiumUserWithoutBanner: s.fullSizeBanner, default: s.fullSizeBanner })(n)).with(r.UserProfileTypes.SETTINGS, () => s.settingsBanner).with(r.UserProfileTypes.PANEL, () => s.panelBanner).with(r.UserProfileTypes.CANCEL_MODAL, () => s.cancelModalBanner).exhaustive() }, l = e => { let { profileType: t, user: n } = e; return (0, i.match)(t).with(r.UserProfileTypes.POPOUT, () => a({ premiumUserWithBanner: 120, premiumUserWithoutBanner: 90, default: 60 })(n)).with(r.UserProfileTypes.MODAL, () => a({ premiumUserWithBanner: 212, premiumUserWithoutBanner: 106, default: 106 })(n)).with(r.UserProfileTypes.BITE_SIZE, () => 105).with(r.UserProfileTypes.FULL_SIZE, () => 210).with(r.UserProfileTypes.POMELO_POPOUT, () => 64).with(r.UserProfileTypes.SETTINGS, () => 100).with(r.UserProfileTypes.PANEL, () => 120).with(r.UserProfileTypes.CANCEL_MODAL, () => 42).exhaustive() }, u = Object.freeze({ [r.UserProfileTypes.POPOUT]: 340, [r.UserProfileTypes.PANEL]: 340, [r.UserProfileTypes.MODAL]: 600, [r.UserProfileTypes.SETTINGS]: 600, [r.UserProfileTypes.POMELO_POPOUT]: 432, [r.UserProfileTypes.CANCEL_MODAL]: 172, [r.UserProfileTypes.BITE_SIZE]: 300, [r.UserProfileTypes.FULL_SIZE]: 600 }), d = e => u[e] }, 588822: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("580552"), u = n("240991"), d = n("278297"), _ = n("626135"), c = n("981631"), E = n("596401"), I = n("689938"), T = n("946278"); function f(e) { let { userBio: t, className: n, animateOnHover: s = !1, isHovering: f = !1, lineClamp: S = 6, setLineClamp: h = !0, textColor: A, userId: m } = e, N = r.useMemo(() => null != t ? (0, u.parseBioReact)(t) : null, [t]); if (null == t && null == m) return null; if ((0, l.default)(m)) { let e = () => { _.default.track(c.AnalyticEvents.CHANGE_LOG_CTA_CLICKED, { cta_type: "profile_bio", target: E.CHANGELOG_URL }) }; N = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("span", { children: I.default.Messages.SYSTEM_DM_CHANGELOG_BIO }), (0, i.jsx)("br", {}), (0, i.jsx)("br", {}), (0, i.jsx)("span", { children: I.default.Messages.SYSTEM_DM_CHANGELOG_BIO_WITH_CTA.format({ blogHook: (t, n) => (0, i.jsx)(o.Anchor, { onClick: e, target: "_blank", rel: "noreferrer noopener", href: E.CHANGELOG_URL, children: t }, n) }) })] }) } return (0, i.jsx)("div", { className: a()(n, T.markup), children: (0, i.jsx)(o.Text, { variant: "text-sm/normal", lineClamp: h ? S : void 0, color: void 0 !== A ? A : void 0, children: (0, i.jsx)(d.MessagesInteractionContext.Provider, { value: { disableAnimations: s && !f, disableInteractions: !1 }, children: N }) }) }) } }, 103575: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("512722"), s = n.n(r), a = n("442837"), o = n("594174"), l = n("447452"), u = n("788197"), d = n("969835"); function _(e) { let { location: t, userId: n, user: r, ..._ } = e, { basicsEnabled: c } = (0, l.useSimplifiedProfileExperiment)({ location: t }), E = (0, a.useStateFromStores)([o.default], () => o.default.getUser(n), [n]), I = null != r ? r : E; return (s()(null != I, "Unexpected missing user"), !c || I.bot || I.isNonUserBot() || I.isClyde()) ? (0, i.jsx)(u.default, { ..._, user: I }) : (0, i.jsx)(d.default, { ..._, user: I }) } }, 725790: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("524437"), o = n("230711"), l = n("906732"), u = n("605236"), d = n("970731"), _ = n("350327"), c = n("621853"), E = n("981631"), I = n("921944"), T = n("526761"), f = n("689938"), S = n("157542"); let h = a.DismissibleContent.PROFILE_THEMES_ACCESSIBILITY_TOOLTIP, A = e => { (0, u.markDismissibleContentAsDismissed)(h, { dismissAction: e, forceTrack: !0 }) }; t.default = e => { let { position: t, onClose: n } = e, { analyticsLocations: a } = (0, l.default)(), u = (0, s.useStateFromStores)([c.default], () => c.default.getIsAccessibilityTooltipViewed()); return r.useEffect(() => u ? () => A(I.ContentDismissActionType.AUTO) : () => (0, _.handleProfileAccessibilityTooltipViewed)(), [u]), (0, i.jsx)(d.default, { markAsDismissed: A, header: f.default.Messages.PROFILE_THEMES_ACCESSIBILITY_TOOLTIP_TITLE, headerClassName: S.header, content: (0, i.jsx)("div", { className: S.content, children: f.default.Messages.PROFILE_THEMES_ACCESSIBILITY_TOOLTIP_DESCRIPTION }), buttonCTA: f.default.Messages.TAKE_ME_THERE, onClick: () => { null == n || n(), o.default.open(E.UserSettingsSections.ACCESSIBILITY, null, { scrollPosition: T.AccessibilityScrollPositions.SYNC_PROFILE_THEME_WITH_USER_THEME, analyticsLocations: a }) }, secondaryButtonCTA: f.default.Messages.DISMISS, onSecondaryClick: n, buttonLayout: d.ButtonLayout.STACKED, caretPosition: "left" === t ? d.CaretPosition.RIGHT_CENTER : d.CaretPosition.LEFT_CENTER }) } }, 484404: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("524437"), o = n("780384"), l = n("481060"), u = n("410030"), d = n("980591"), _ = n("607070"), c = n("605236"), E = n("725790"), I = n("652853"), T = n("228168"), f = n("157542"); let S = () => { let e = (0, c.useIsDismissibleContentDismissed)(a.DismissibleContent.PROFILE_THEMES_ACCESSIBILITY_TOOLTIP), t = (0, s.useStateFromStores)([_.default], () => _.default.syncProfileThemeWithUserTheme), n = (0, u.default)(), { theme: i } = (0, I.useUserProfileThemeContext)(), r = (0, o.isThemeDark)(n) && (0, o.isThemeLight)(i); return !e && !t && r }; t.default = e => { let { onTooltipClose: t } = e, { profileType: n } = (0, I.useUserProfileThemeContext)(), s = n === T.UserProfileTypes.POPOUT, a = S(), [o, u] = r.useState(!s && a); return (0, d.default)(() => u(a), s ? 300 : null), (0, i.jsx)(l.Popout, { shouldShow: o, position: "left", align: "center", spacing: 32, ignoreModalClicks: !0, onRequestClose: () => { !s && u(!1) }, renderPopout: e => { let { position: n } = e; return (0, i.jsx)(E.default, { position: null != n ? n : "left", onClose: t }) }, children: () => (0, i.jsx)("span", { className: f.__invalid_hidden }) }) } }, 520978: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return N } }); var i = n("735250"); n("470079"); var r = n("243814"), s = n("481060"), a = n("239091"), o = n("311819"), l = n("69580"), u = n("556084"), d = n("592125"), _ = n("944486"), c = n("682864"), E = n("441957"), I = n("151785"), T = n("572004"), f = n("591759"), S = n("135431"), h = n("981631"), A = n("689938"), m = n("731208"); function N(e) { var t; let { application: n, className: N } = e, p = d.default.getChannel(_.default.getChannelId()), { appsInGDMEnabled: O, availableApplications: C } = (0, u.usePrivateChannelIntegrationState)({ channelId: null !== (t = null == p ? void 0 : p.id) && void 0 !== t ? t : h.EMPTY_STRING_SNOWFLAKE_ID }); if (!(0, S.canInstallApplication)({ customInstallUrl: n.customInstallUrl, installParams: n.installParams, integrationTypesConfig: n.integrationTypesConfig })) return null; let R = O && null != C.find(e => e.id === (null == n ? void 0 : n.id)), g = null != n.customInstallUrl && !f.default.isDiscordUrl(n.customInstallUrl); return (0, i.jsx)(s.Button, { color: s.Button.Colors.PRIMARY, look: s.Button.Looks.FILLED, size: s.Button.Sizes.SMALL, onContextMenu: T.SUPPORTS_COPY ? e => { (0, a.openContextMenu)(e, e => (0, i.jsx)(s.Menu, { navId: "component-button", onClose: a.closeContextMenu, "aria-label": A.default.Messages.APPLICATION_ADD_BUTTON_ACTIONS, onSelect: void 0, ...e, children: (0, i.jsx)(s.MenuGroup, { children: (0, i.jsx)(s.MenuItem, { id: "copy", label: A.default.Messages.APPLICATION_ADD_BUTTON_ACTIONS_COPY, action: () => (0, T.copy)((0, o.getApplicationInstallURL)(n)) }) }) })) } : void 0, onClick: () => { R ? (0, l.openOAuth2Modal)({ clientId: n.id, scopes: [r.OAuth2Scopes.APPLICATIONS_COMMANDS], channelId: p.id, disableGuildSelect: !0 }) : (0, S.installApplication)({ applicationId: n.id, customInstallUrl: n.customInstallUrl, installParams: n.installParams, integrationTypesConfig: n.integrationTypesConfig }) }, className: N, children: (0, i.jsxs)("div", { className: m.applicationInstallButtonContent, children: [!g && (0, i.jsx)(I.default, { width: 16, height: 16 }), (0, i.jsx)(c.default, { size: 4, horizontal: !0 }), (0, i.jsx)("span", { className: m.applicationInstallButtonText, children: R ? A.default.Messages.ADD : A.default.Messages.APPLICATION_ADD_BUTTON }), g && (0, i.jsx)(E.default, { className: m.launchIcon, width: 16, height: 16 })] }) }) } }, 184325: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BadgeSizes: function() { return i }, default: function() { return R } }), n("653041"); var i, r, s = n("735250"); n("470079"); var a = n("120356"), o = n.n(a), l = n("481060"), u = n("315263"), d = n("100527"), _ = n("906732"), c = n("688465"), E = n("617136"), I = n("497505"), T = n("626135"), f = n("785717"), S = n("221292"), h = n("290421"), A = n("318661"), m = n("228168"), N = n("981631"), p = n("689938"), O = n("896599"), C = n("839973"); function R(e) { let { user: t, guildId: n, className: i, shrinkAtCount: r, shrinkToSize: a, isTryItOutFlow: R, onBadgeClick: g, size: L = 0 } = e, v = (0, A.default)(t.id, n), { analyticsLocations: D } = (0, _.default)(d.default.BADGE), { trackUserProfileAction: M, ...y } = (0, f.useUserProfileAnalyticsContext)(), P = (0, h.default)(v).map(e => ({ ...e, src: (0, m.getBadgeAsset)(e.icon) })); if (t.isClyde()) return (0, s.jsx)("div", { className: o()(i, O.container, O.clydeBadgeList), "aria-label": p.default.Messages.PROFILE_USER_BADGES, role: "group", children: (0, s.jsx)(c.default, {}) }); R && null == P.find(e => "premium" === e.id) && P.push({ id: "premium", src: C, description: p.default.Messages.PREMIUM_BADGE_TOOLTIP.format({ date: new Date }) }); let U = null != r && null != a && P.length > r ? a : L; return (0, s.jsx)(_.AnalyticsLocationProvider, { value: D, children: (0, s.jsx)("div", { className: o()(i, P.length > 0 ? O.containerWithContent : O.container), "aria-label": p.default.Messages.PROFILE_USER_BADGES, role: "group", children: P.map(e => (0, s.jsx)(l.Tooltip, { position: "top", text: e.description, spacing: 12, children: t => (0, s.jsx)(l.Anchor, { ...t, onClick: n => { var i; M({ action: "PRESS_BADGE" }), (0, S.trackUserProfileBadgePressed)({ badge: e.id, analyticsLocations: D, ...y }), null === (i = t.onClick) || void 0 === i || i.call(t); let r = null != e.link ? (0, u.default)(e.link, { analyticsLocations: D }) : null; if (null != r) return null == g || g(), r(n) }, onMouseEnter: () => { var n; e.id === h.QUEST_COMPLETED_BADGE && (T.default.track(N.AnalyticEvents.QUEST_CONTENT_VIEWED, { ...(0, E.getContentProperties)(I.QuestContent.QUEST_BADGE) }), (0, S.trackUserProfileBadgeHovered)({ badge: e.id, analyticsLocations: D, ...y })), null === (n = t.onMouseEnter) || void 0 === n || n.call(t) }, href: e.link, children: (0, s.jsx)("img", { alt: " ", "aria-hidden": !0, src: e.src, className: o()({ [O.profileBadge24]: 0 === U, [O.profileBadge22]: 1 === U, [O.profileBadge20]: 2 === U, [O.profileBadge18]: 3 === U }) }) }) }, e.id)) }) }) }(r = i || (i = {}))[r.SIZE_24 = 0] = "SIZE_24", r[r.SIZE_22 = 1] = "SIZE_22", r[r.SIZE_20 = 2] = "SIZE_20", r[r.SIZE_18 = 3] = "SIZE_18" }, 438163: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserProfileCustomStatusBubble: function() { return T } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("442837"), u = n("846519"), d = n("481060"), _ = n("788307"), c = n("607070"), E = n("228168"), I = n("660762"); function T(e) { let { statusActivity: t, profileType: n, hasEntered: s = !0, animate: T = !0 } = e, f = (0, l.useStateFromStores)([c.default], () => c.default.useReducedMotion), [S, h] = r.useState(!0), [A] = r.useState(() => new u.Timeout), m = r.useRef(null), N = r.useRef(null), p = r.useRef(null), O = r.useRef(null), C = (null == t ? void 0 : t.state) != null && "" !== t.state ? t.state : null, R = null != C && C.length > 0, { emoji: g } = null != t ? t : {}, L = null != g, v = L && !R, D = L || R, [M, y] = r.useState(v); r.useLayoutEffect(() => { if (null == m.current || v) return; let e = Math.floor(m.current.getBoundingClientRect().height); if (y(v || e <= 18), s) { var t, n, i, r; N.current = null !== (i = null === (t = m.current) || void 0 === t ? void 0 : t.getBoundingClientRect().height) && void 0 !== i ? i : 144, O.current = null !== (r = null === (n = p.current) || void 0 === n ? void 0 : n.getBoundingClientRect().height) && void 0 !== r ? r : 36 } }, [s, v]); let [P, U] = (0, o.useSpring)(() => ({ maxHeight: "".concat(36, "px"), config: { clamp: !0, immediate: f, duration: 150 } })); if (r.useEffect(() => () => A.stop(), [A]), !D) return null; let b = e => { var t, n; if (!M) { e ? U({ maxHeight: "".concat(Math.min(null !== (t = N.current) && void 0 !== t ? t : 144, 144), "px"), delay: 300 }) : U({ maxHeight: "".concat(Math.min(null !== (n = O.current) && void 0 !== n ? n : 36, 36), "px"), delay: 0 }); A.start(e ? 300 : 150, () => { h(!e) }) } }, G = () => L ? (0, i.jsx)(_.ActivityEmoji, { className: R ? I.statusEmojiInline : I.statusEmojiOnly, emoji: g, animate: T, hideTooltip: !1, tooltipDelay: E.USER_PROFILE_TOOLTIP_DELAY }) : null, w = () => R ? (0, i.jsx)(d.Text, { variant: "text-sm/medium", className: I.statusText, children: C }) : null, k = { [I.biteSize]: n === E.UserProfileTypes.BITE_SIZE, [I.fullSize]: n === E.UserProfileTypes.FULL_SIZE, [I.panel]: n === E.UserProfileTypes.PANEL }, B = a()(I.statusBubbleOuter, k, { [I.statusBubbleShape]: !R && L || !M, [I.statusBubbleSingleLineWithTextShape]: M && R }), V = a()(I.statusBubble, { [I.statusBubbleShape]: !R && L || !M, [I.statusBubbleSingleLineWithTextShape]: M && R, [I.statusBubbleEmojiOnlyPadding]: v, [I.statusBubbleWithTextPadding]: R, [I.statusBubbleWithTextMinWidth]: R, [I.statusBubbleCopyStatusCursor]: D }); return (0, i.jsxs)("div", { children: [(0, i.jsx)("div", { className: a()(I.invisibleContainer, k), children: (0, i.jsx)("div", { className: B, children: (0, i.jsxs)("span", { className: V, children: [(0, i.jsxs)("div", { className: a()(I.content, I.clamp, I.placeholderWidth, k), ref: p, children: [G(), w()] }), (0, i.jsxs)("div", { className: a()(I.content, I.unclamp, I.placeholderWidth, I.incorporeal, k), ref: m, children: [G(), w()] })] }) }) }), (0, i.jsx)("div", { className: a()(I.visibleContainer, k), children: (0, i.jsx)("div", { tabIndex: 0, className: B, onFocus: () => b(!0), onBlur: () => b(!1), onMouseEnter: () => b(!0), onMouseLeave: () => b(!1), children: (0, i.jsx)("span", { className: V, children: (() => { let e = a()(I.content, { [I.clamp]: S, [I.unclamp]: !S, [I.singleLineAlign]: M }); return (0, i.jsxs)(o.animated.div, { style: P, className: e, children: [G(), w()] }) })() }) }) })] }) } }, 681837: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("692547"), a = n("981729"), o = n("759231"), l = n("621853"), u = n("228168"), d = n("689938"), _ = n("295847"); function c(e) { let { userId: t } = e; return (0, r.useStateFromStores)([l.default], () => { var e, n; return null !== (n = null === (e = l.default.getUserProfile(t)) || void 0 === e ? void 0 : e.profileFetchFailed) && void 0 !== n && n }) ? (0, i.jsx)(a.TooltipContainer, { className: _.container, text: d.default.Messages.USER_PROFILE_LOAD_ERROR, delay: u.USER_PROFILE_TOOLTIP_DELAY, children: (0, i.jsx)(o.default, { color: s.default.colors.STATUS_WARNING.css, width: 16, height: 16 }) }) : null } }, 256226: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("924826"), l = n("866442"), u = n("442837"), d = n("692547"), _ = n("481060"), c = n("239091"), E = n("607070"), I = n("134433"), T = n("518738"), f = n("465670"), S = n("176278"), h = n("689938"), A = n("904726"); t.default = r.forwardRef(function(e, t) { var s, m, N; let p; let { canRemove: O, className: C, role: R, onRemove: g, guildId: L, disableBorderColor: v, onMouseDown: D } = e, { tabIndex: M, ...y } = (0, o.useListItem)(R.id), P = (0, T.useRoleIcon)({ roleId: R.id, size: 16, guildId: L }), U = (0, u.useStateFromStores)([E.default], () => E.default.roleStyle), b = (null === (s = R.tags) || void 0 === s ? void 0 : s.guild_connections) === null, G = r.useCallback(e => { (0, c.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("5396").then(n.bind(n, "731646")); return t => (0, i.jsx)(e, { ...t, id: R.id, label: h.default.Messages.COPY_ID_ROLE }) }) }, [R.id]), w = (0, _.useToken)(d.default.unsafe_rawColors.PRIMARY_300).hsl(), k = null !== (m = R.colorString) && void 0 !== m ? m : w, B = null !== (N = (0, l.hex2rgb)(k, .6)) && void 0 !== N ? N : void 0, V = d.default.unsafe_rawColors.WHITE_500.css, x = (0, l.hex2int)(k); null != x && .3 > (0, l.getDarkness)(x) && (V = d.default.unsafe_rawColors.PRIMARY_630.css), p = b ? (0, i.jsx)(I.default, { className: A.roleFlowerStar, iconClassName: O ? A.roleVerifiedIcon : void 0, color: k, size: 14 }) : "dot" === U ? (0, i.jsx)(_.RoleDot, { className: A.roleDot, color: k, background: !1, tooltip: !1 }) : (0, i.jsx)(_.RoleCircle, { color: k, className: A.roleCircle }); let F = r.useMemo(() => { var t; return { borderColor: v ? void 0 : B, ...null !== (t = e.style) && void 0 !== t ? t : {} } }, [B, v, e.style]); return (0, i.jsx)(_.FocusRing, { children: (0, i.jsxs)("div", { ref: t, className: a()(A.role, C), style: F, onContextMenu: G, onMouseDown: D, "aria-label": R.name, tabIndex: M, ...y, children: [O ? (0, i.jsx)(_.TooltipContainer, { text: h.default.Messages.REMOVE_SYNCED_ROLE, children: (0, i.jsxs)(_.Clickable, { className: a()(A.roleRemoveButtonCanRemove, A.roleRemoveButton), onClick: g, tabIndex: M, focusProps: { focusClassName: A.roleRemoveIconFocused }, "aria-hidden": !1, "aria-label": h.default.Messages.GUILD_SETTINGS_MEMBERS_REMOVE_ROLE.format({ roleName: R.name }), children: [p, (0, i.jsx)(f.default, { color: V, className: A.roleRemoveIcon, "aria-hidden": !0 })] }) }) : (0, i.jsx)(_.Clickable, { className: A.roleRemoveButton, tabIndex: -1, focusProps: { focusClassName: A.roleRemoveIconFocused }, "aria-hidden": !0, "aria-label": h.default.Messages.GUILD_SETTINGS_MEMBERS_REMOVE_ROLE.format({ roleName: R.name }), children: p }), null != P ? (0, i.jsx)(S.default, { className: A.roleIcon, ...P, enableTooltip: !1 }) : null, (0, i.jsx)("div", { "aria-hidden": !0, className: A.roleName, children: (0, i.jsx)(_.Text, { variant: "text-xs/medium", className: A.roleNameOverflow, children: R.name }) })] }) }) }) }, 900927: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }); var i = n("735250"); n("470079"); var r = n("399606"), s = n("481060"), a = n("275759"), o = n("706454"), l = n("271383"), u = n("430824"), d = n("346656"), _ = n("68972"), c = n("709054"), E = n("689938"), I = n("60963"); function T(e) { let { userId: t, guildId: n, textClassName: T, tooltipDelay: f } = e, S = (0, r.useStateFromStores)([o.default], () => o.default.locale), h = (0, r.useStateFromStores)([u.default], () => null != n ? u.default.getGuild(n) : null), A = (0, r.useStateFromStores)([l.default], () => null != n ? l.default.getMember(n, t) : null), m = (0, a.getCreatedAtDate)(c.default.extractTimestamp(t), S), N = (0, a.getCreatedAtDate)(null == A ? void 0 : A.joinedAt, S); return null == h || null == A ? (0, i.jsx)(s.Text, { variant: "text-sm/normal", className: T, children: m }) : (0, i.jsxs)("div", { className: I.memberSinceWrapper, children: [(0, i.jsxs)("div", { className: I.memberSince, children: [(0, i.jsx)(s.Tooltip, { text: E.default.Messages.DISCORD_NAME, delay: f, children: e => (0, i.jsx)(_.default, { ...e, className: I.discordIcon }) }), (0, i.jsx)(s.Text, { variant: "text-sm/normal", className: T, children: m })] }), (0, i.jsx)("div", { className: I.divider }), (0, i.jsxs)("div", { className: I.memberSince, children: [(0, i.jsx)(s.Tooltip, { text: h.name, delay: f, children: e => (0, i.jsx)(d.default, { ...e, guild: h, size: d.default.Sizes.SMOL }) }), (0, i.jsx)(s.Text, { variant: "text-sm/normal", className: T, children: N })] })] }) } }, 724593: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("10683"), o = n("793080"), l = n("481060"), u = n("785717"), d = n("702557"), _ = n("537387"), c = n("689938"), E = n("66073"); function I(e) { let { user: t, isHovering: n, onOpenProfile: r } = e, { trackUserProfileAction: I } = (0, u.useUserProfileAnalyticsContext)(), { note: T } = (0, d.default)(t.id), f = () => { I({ action: "PRESS_ADD_NOTE" }), r() }; return null == T || "" === T ? (0, i.jsx)(_.default, { text: c.default.Messages.ADD_NOTE, "aria-label": c.default.Messages.ADD_NOTE, icon: o.PaperPlusIcon, onClick: f, color: E.color, look: l.Button.Looks.BLANK, className: s()(E.button, { [E.visible]: n }) }) : (0, i.jsx)(_.default, { text: T, "aria-label": T, icon: a.PaperIcon, onClick: f, color: E.color, look: l.Button.Looks.BLANK, className: s()(E.button, { [E.visible]: n }), tooltipClassName: E.tooltip }) } }, 502762: function(e, t, n) { "use strict"; n.r(t), n("627341"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("278074"), l = n("721987"), u = n("138655"), d = n("793397"), _ = n("652853"), c = n("228168"), E = n("983094"); let I = (e, t) => { let n = (0, o.match)(e).with(c.UserProfileTypes.MODAL, () => E.userProfileModalOuter).with(c.UserProfileTypes.PANEL, () => E.userPanelOuter).with(c.UserProfileTypes.CARD, () => E.userCardOuter).with(c.UserProfileTypes.BITE_SIZE, () => E.biteSizeOuter).with(c.UserProfileTypes.FULL_SIZE, () => E.fullSizeOuter).otherwise(() => E.userPopoutOuter), i = t ? E.userProfileOuterThemed : E.userProfileOuterUnthemed; return a()(n, i) }, T = (e, t, n) => { let i = (0, o.match)(e).with(c.UserProfileTypes.MODAL, c.UserProfileTypes.FULL_SIZE, () => E.userProfileModalInner).with(c.UserProfileTypes.PANEL, () => E.userPanelInner).with(c.UserProfileTypes.CARD, () => E.userCardInner).otherwise(() => E.userPopoutInner), r = (0, o.match)(e).with(c.UserProfileTypes.PANEL, () => E.userPanelInnerThemed).with(c.UserProfileTypes.BITE_SIZE, () => E.biteSizeInnerThemed).with(c.UserProfileTypes.FULL_SIZE, () => E.fullSizeInnerThemed).otherwise(() => (0, d.buildGetPremiumUserBannerStyles)({ premiumUserWithBanner: E.userProfileInnerThemedWithBanner, premiumUserWithoutBanner: E.userProfileInnerThemedPremiumWithoutBanner, default: E.userProfileInnerThemedNonPremium })({ isPremium: t, hasBanner: n })); return a()(i, r) }, f = r.forwardRef(function(e, t) { let { user: n, displayProfile: r, profileType: s, className: o, pendingThemeColors: d, pendingProfileEffectId: c, themeOverride: f, children: S, forceShowPremium: h = !1, showOutOfBoundaryComponents: A = !1 } = e, { theme: m, primaryColor: N, secondaryColor: p } = (0, l.default)({ user: n, displayProfile: r, pendingThemeColors: d, isPreview: h }), { profileThemeStyle: O, profileThemeClassName: C } = (0, u.default)({ theme: null != f ? f : m, primaryColor: N, secondaryColor: p }), R = (null == r ? void 0 : r.canEditThemes) || h, g = null !== c && ((null == r ? void 0 : r.banner) != null || void 0 !== c); return (0, i.jsx)("div", { className: a()(I(s, R), A ? E.showOutOfBoundaryComponents : void 0, C, o), style: O, ref: t, children: (0, i.jsx)("div", { className: T(s, R, g), children: (0, i.jsx)(_.UserProfileThemeContextProvider, { profileType: s, theme: null != f ? f : m, primaryColor: N, secondaryColor: p, children: S }) }) }) }), S = e => (0, o.match)(e).with(c.UserProfileTypes.POPOUT, c.UserProfileTypes.SETTINGS, () => E.userPopoutOverlayBackground).with(c.UserProfileTypes.MODAL, () => E.userProfileModalOverlayBackground).with(c.UserProfileTypes.BITE_SIZE, () => E.biteSizeOverlayBackground).with(c.UserProfileTypes.FULL_SIZE, () => E.fullSizeOverlayBackground).otherwise(() => E.overlayBackground); t.default = Object.assign(f, { Overlay: function(e) { let { children: t, className: n } = e, { profileType: r } = (0, _.useUserProfileThemeContext)(); return (0, i.jsx)("div", { className: a()(S(r), n), children: t }) } }) }, 652853: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserProfileThemeContextProvider: function() { return u }, useUserProfileThemeContext: function() { return d } }); var i, r = n("735250"), s = n("470079"), a = n("541049"), o = n("231338"); let l = s.createContext({ profileType: null, theme: null !== (i = (0, a.default)()) && void 0 !== i ? i : o.ThemeTypes.DARK, primaryColor: null, secondaryColor: null }); function u(e) { let { profileType: t, theme: n, primaryColor: i, secondaryColor: a, children: o } = e, u = s.useMemo(() => ({ profileType: t, theme: n, primaryColor: i, secondaryColor: a }), [t, n, i, a]); return (0, r.jsx)(l.Provider, { value: u, children: o }) } let d = () => s.useContext(l) }, 530: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("129861"), l = n("5192"), u = n("228168"), d = n("689938"), _ = n("660120"); function c(e) { let { user: t, profileType: n, guildId: r, channelId: c, usernameIcon: E, tags: I, nicknameIcons: T, pronouns: f, className: S, onOpenProfile: h, nicknameVariant: A = "heading-lg/bold", pronounsVariant: m = "text-sm/medium" } = e, N = e => null == h ? e : (0, i.jsx)(a.Clickable, { onClick: h, className: _.clickableUsername, children: e }); return (0, i.jsxs)("div", { className: s()(_.container, S), children: [(0, i.jsxs)("div", { className: _.usernameRow, children: [N((0, i.jsx)(a.Heading, { className: s()(_.nickname, n === u.UserProfileTypes.FULL_SIZE && _.fullSizeNickname), variant: A, children: l.default.getName(r, c, t) })), (0, i.jsx)("div", { className: _.nicknameIcons, children: T })] }), (0, i.jsxs)("div", { className: _.tags, children: [N((0, i.jsx)(o.default, { user: t, usernameIcon: E, forceUsername: !0, className: _.userTag, usernameClass: _.userTagUsername, discriminatorClass: _.userTagDiscriminator })), null != f && f.length > 0 && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("div", { "aria-hidden": "true", className: _.dotSpacer }), (0, i.jsx)(a.TooltipContainer, { className: _.pronounsTooltip, text: d.default.Messages.USER_PROFILE_PRONOUNS, delay: u.USER_PROFILE_TOOLTIP_DELAY, children: (0, i.jsx)(a.Text, { variant: m, className: _.pronouns, color: "header-primary", children: f }) })] }), I] })] }) } }, 894374: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserProfileBadgesTag: function() { return l } }); var i = n("735250"); n("470079"); var r = n("392711"), s = n("290421"), a = n("80132"), o = n("580245"); function l(e) { let { displayProfile: t, onClose: n } = e, l = (0, s.default)(t); return 0 === l.length ? null : (0, i.jsx)(i.Fragment, { children: (0, r.chunk)(l, 12).map(e => (0, i.jsx)(a.default, { badges: e, className: o.badgeList, badgeClassName: o.badge, onClose: n }, e[0].id)) }) } }, 993409: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("693789"), o = n("481060"), l = n("47200"); function u(e) { let { icon: t, text: n, compact: r, className: u, innerClassName: d, ..._ } = e, c = (0, i.jsx)(t, { width: 16, height: 16, color: "currentColor" }); return r ? (0, i.jsx)(o.TooltipContainer, { text: n, "aria-label": _["aria-label"], children: (0, i.jsx)(a.Button, { className: s()(l.compactButton, u), innerClassName: s()(l.compactButtonInner, d), color: s()(a.ButtonColors.PRIMARY, l.color), look: a.Button.Looks.FILLED, size: a.Button.Sizes.NONE, grow: !1, ..._, children: c }) }) : (0, i.jsxs)(a.Button, { className: u, innerClassName: s()(l.button, d), color: s()(a.ButtonColors.PRIMARY, l.color), look: a.Button.Looks.FILLED, size: a.Button.Sizes.MEDIUM, ..._, children: [c, n] }) } }, 314172: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("693789"), l = n("235874"), u = n("481060"), d = n("944613"), _ = n("607070"), c = n("605436"), E = n("496675"), I = n("729285"), T = n("993409"), f = n("689938"), S = n("129372"); function h(e) { let { guild: t, guildMember: n, highestRole: r, onAddRole: h, compact: A = !0, ...m } = e, N = (0, a.useStateFromStores)([_.default], () => _.default.roleStyle), p = e => (0, c.isNotEveryoneRoleId)(t.id, e.id) && !e.managed && E.default.isRoleHigher(t, r, e) && -1 === n.roles.indexOf(e.id); return (0, i.jsx)(l.Popout, { position: "bottom", align: "center", renderPopout: e => { let { closePopout: n } = e; return (0, i.jsx)(d.default, { guild: t, roleStyle: N, roleFilter: p, onSelect: h, onClose: n }) }, children: e => (0, i.jsx)(T.default, { className: s()(S.button), text: (0, i.jsx)(u.Text, { variant: "text-xs/medium", children: f.default.Messages.USER_PROFILE_ADD_ROLE }), "aria-label": f.default.Messages.USER_PROFILE_ADD_ROLE, icon: I.default, color: o.Button.Colors.CUSTOM, size: o.Button.Sizes.NONE, compact: A, grow: !1, ...e, ...m }) }) } }, 544989: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("228168"), o = n("674484"); function l(e) { let { profileType: t, children: n } = e; return (0, i.jsx)("div", { className: s()(o.wrapper, { [o.biteSize]: t === a.UserProfileTypes.BITE_SIZE, [o.fullSize]: t === a.UserProfileTypes.FULL_SIZE, [o.panel]: t === a.UserProfileTypes.PANEL }), children: n }) } }, 705556: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("300284"), o = n("314897"), l = n("430824"), u = n("185403"), d = n("785717"), _ = n("841040"), c = n("993409"), E = n("689938"); function I(e) { let { user: t, guildId: n, onClose: I } = e, T = (0, r.useStateFromStores)([o.default], () => o.default.getId() === t.id), f = (0, r.useStateFromStores)([l.default], () => null != n ? l.default.getGuild(n) : null), { trackUserProfileAction: S } = (0, d.useUserProfileAnalyticsContext)(), h = (0, a.default)(); return T ? null == f ? (0, i.jsx)(c.default, { icon: u.default, text: E.default.Messages.EDIT_PROFILE, autoFocus: !0, onClick: () => { S({ action: "EDIT_PROFILE" }), null == I || I(), h() } }) : (0, i.jsx)(s.Popout, { renderPopout: e => { let { closePopout: t } = e; return (0, i.jsx)(_.default, { guild: f, onClose: () => { t(), null == I || I() } }) }, children: e => (0, i.jsx)(c.default, { icon: u.default, text: E.default.Messages.EDIT_PROFILE, autoFocus: !0, ...e }) }) : null } }, 301984: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return m } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("124597"), a = n("657147"), o = n("97910"), l = n("780014"), u = n("481060"), d = n("194359"), _ = n("906732"), c = n("822972"), E = n("314897"), I = n("699516"), T = n("465670"), f = n("785717"), S = n("537387"), h = n("981631"), A = n("689938"); function m(e) { let { user: t, acceptFriendRequestColor: n, friendToken: m } = e, { trackUserProfileAction: N } = (0, f.useUserProfileAnalyticsContext)(), p = (0, r.useStateFromStores)([E.default], () => E.default.getId() === (null == t ? void 0 : t.id)), O = (0, r.useStateFromStores)([I.default], () => null != t ? I.default.getRelationshipType(t.id) : h.RelationshipTypes.NONE), { analyticsLocations: C, newestAnalyticsLocation: R } = (0, _.default)(), g = (0, c.default)({ user: t, color: "danger", location: R, onAction: () => N({ action: "REMOVE_FRIEND", analyticsLocations: C }) }); return null == t || t.bot || p || O === h.RelationshipTypes.BLOCKED ? null : O === h.RelationshipTypes.FRIEND ? (0, i.jsx)(u.Popout, { renderPopout: e => { let { closePopout: t } = e; return (0, i.jsx)(u.Menu, { navId: "user-profile-friend-request-buttons", onSelect: void 0, onClose: t, "aria-label": A.default.Messages.FRIEND_ACTIONS_MENU_LABEL, children: g }) }, children: e => (0, i.jsx)(S.default, { icon: a.UserCheckIcon, text: A.default.Messages.FRIENDS, ...e }) }) : O === h.RelationshipTypes.PENDING_INCOMING ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(S.default, { icon: e => (0, i.jsx)(s.CheckmarkLargeIcon, { ...e, color: null != n ? n : u.tokens.colors.TEXT_BRAND }), text: A.default.Messages.ACCEPT_FRIEND_REQUEST, onClick: () => { N({ action: "ACCEPT_FRIEND_REQUEST" }), d.default.addRelationship({ userId: t.id, friendToken: m }) } }), (0, i.jsx)(S.default, { icon: T.default, text: A.default.Messages.IGNORE_FRIEND_REQUEST, onClick: () => { N({ action: "IGNORE_FRIEND_REQUEST" }), d.default.cancelFriendRequest(t.id) } })] }) : O === h.RelationshipTypes.PENDING_OUTGOING ? (0, i.jsx)(S.default, { icon: o.UserClockIcon, text: A.default.Messages.REQUEST_SENT, disabled: !0 }) : (0, i.jsx)(S.default, { icon: l.UserPlusIcon, text: A.default.Messages.ADD_FRIEND, onClick: () => { N({ action: "SEND_FRIEND_REQUEST" }), d.default.addRelationship({ userId: t.id, friendToken: m }) } }) } }, 94918: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("671290"), a = n("906732"), o = n("189432"), l = n("189357"), u = n("314897"), d = n("944486"), _ = n("785717"), c = n("537387"), E = n("176505"), I = n("50493"), T = n("689938"); function f(e) { let { user: t, guildId: n, channelId: f, onClose: S } = e, { trackUserProfileAction: h } = (0, _.useUserProfileAnalyticsContext)(), { newestAnalyticsLocation: A } = (0, a.default)(), m = (0, r.useStateFromStores)([u.default], () => u.default.getId() === (null == t ? void 0 : t.id)), N = (0, l.useCanAccessGuildMemberModView)(null != n ? n : null, !0), p = (0, r.useStateFromStores)([d.default], () => null != f ? f : d.default.getChannelId(n, !0), [f, n]); return null == n || !N || m ? null : (0, i.jsx)(c.default, { icon: s.ModerationIcon, text: T.default.Messages.GUILD_MEMBER_MOD_VIEW_TITLE, onClick: () => { h({ action: "PRESS_MOD_VIEW" }), (0, o.openGuildMemberModViewSidebar)(n, t.id, null != p ? p : E.StaticChannelRoute.MEMBER_SAFETY, { modViewPanel: I.ModViewPanel.INFO, sourceLocation: A }), null == S || S() } }) } }, 664794: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("100527"), o = n("906732"), l = n("299206"), u = n("389052"), d = n("622724"), _ = n("314897"), c = n("808268"), E = n("785717"), I = n("537387"), T = n("228168"), f = n("689938"); function S(e) { let { user: t, profileType: n, guildId: S, viewProfileItem: h } = e, A = (0, r.useStateFromStores)([_.default], () => _.default.getId() === t.id), { trackUserProfileAction: m } = (0, E.useUserProfileAnalyticsContext)(), { analyticsLocations: N, newestAnalyticsLocation: p } = (0, o.default)(a.default.USER_PROFILE_OVERFLOW_MENU), O = (0, u.default)({ user: t, color: "danger", location: p, onBlock: () => m({ action: "BLOCK", analyticsLocations: N }), onUnblock: () => m({ action: "UNBLOCK", analyticsLocations: N }) }), C = (0, d.default)({ user: t, guildId: S, color: "danger", location: p, onAction: () => m({ action: "REPORT", analyticsLocations: N }) }), R = (0, l.default)({ id: t.id, label: f.default.Messages.COPY_ID_USER }); if (A && n !== T.UserProfileTypes.FULL_SIZE) return null; let g = () => A ? null : (0, i.jsxs)(s.MenuGroup, { children: [O, C] }), L = () => null == R ? null : (0, i.jsx)(s.MenuGroup, { children: R }); return (0, i.jsx)(o.AnalyticsLocationProvider, { value: N, children: (0, i.jsx)(s.Popout, { renderPopout: e => { let { closePopout: t } = e; return (0, i.jsxs)(s.Menu, { navId: "user-profile-overflow-menu", onSelect: void 0, onClose: t, "aria-label": f.default.Messages.PROFILE_ACTIONS_MENU_LABEL, children: [(0, i.jsx)(s.MenuGroup, { children: h }), g(), L()] }) }, children: e => (0, i.jsx)(I.default, { text: f.default.Messages.MORE, icon: c.default, ...e }) }) }) } }, 537387: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("766321"); function l(e) { let { icon: t, text: n, className: r, innerClassName: l, tooltipDelay: u, tooltipClassName: d, ..._ } = e; return (0, i.jsx)(a.TooltipContainer, { tooltipClassName: d, text: n, delay: u, children: (0, i.jsx)(a.Button, { className: s()(o.button, r), innerClassName: s()(o.buttonInner, l), color: o.color, look: a.Button.Looks.FILLED, size: a.Button.Sizes.NONE, grow: !1, "aria-label": n, ..._, children: (0, i.jsx)(t, { width: 16, height: 16, color: "currentColor" }) }) }) } }, 335191: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ConnectedApplicationUserRoleAccount: function() { return g }, ConnectedUserAccount: function() { return R }, ConnectedUserAccounts: function() { return L } }), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("692547"), l = n("780384"), u = n("481060"), d = n("99690"), _ = n("726542"), c = n("367907"), E = n("122021"), I = n("275759"), T = n("323588"), f = n("753194"), S = n("598077"), h = n("671533"), A = n("880008"), m = n("49012"), N = n("981631"), p = n("856651"), O = n("689938"), C = n("16367"); function R(e) { var t, n; let r, s, d, { connectedAccount: S, theme: R, locale: g, userId: L, className: v, showMetadata: D, showInvisibleIcon: M } = e; null == D && (D = !0); let y = null !== (n = S.metadata) && void 0 !== n ? n : {}, P = D ? (0, I.getCreatedAtDate)(y[p.MetadataFields.CREATED_AT], g) : null, U = (0, u.useToken)(o.default.unsafe_rawColors.TWITTER).hex(), b = O.default.Messages.CONNECTION_VERIFIED; if (D) switch (S.type) { case N.PlatformTypes.REDDIT: r = (0, T.generateRedditMetadataItems)(y); break; case N.PlatformTypes.STEAM: r = (0, T.generateSteamMetadataItems)(y); break; case N.PlatformTypes.TWITTER: r = (0, T.generateTwitterMetadataItems)(y), "1" === y[p.MetadataFields.TWITTER_VERIFIED] && (s = U, b = O.default.Messages.CONNECTION_VERIFIED_ON_TWITTER); break; case N.PlatformTypes.PAYPAL: r = (0, T.generatePaypalMetadataItems)(y); break; case N.PlatformTypes.EBAY: r = (0, T.generateEbayMetadataItems)(y); break; case N.PlatformTypes.TIKTOK: r = (0, T.generateTikTokMetadataItems)(y) } let G = _.default.get((0, E.useLegacyPlatformType)(S.type)), w = null == G ? void 0 : null === (t = G.getPlatformUserUrl) || void 0 === t ? void 0 : t.call(G, S); null != M && M ? d = (0, i.jsx)(A.default, { className: a()(C.__invalid_connectedAccountOpenIconContainer, C.connectedAccountHideIcon), foregroundColor: "currentColor" }) : null != w && (d = (0, i.jsx)(u.Anchor, { href: w, onClick: e => { var t, n; t = S.type, n = L, (0, c.trackWithMetadata)(N.AnalyticEvents.CONNECTED_ACCOUNT_VIEWED, { platform_type: t, other_user_id: n }), (0, m.handleClick)({ href: w, trusted: (null == G ? void 0 : G.type) !== N.PlatformTypes.DOMAIN }, e) }, children: (0, i.jsx)(h.default, { className: C.connectedAccountOpenIcon, direction: h.default.Directions.RIGHT }) })); let k = (0, u.useToken)(o.default.colors.INTERACTIVE_MUTED).hex(), B = (0, u.useToken)(o.default.colors.INTERACTIVE_ACTIVE).hex(), V = S.verified ? (0, i.jsx)(f.default, { className: C.connectedAccountVerifiedIcon, color: null != s ? s : k, forcedIconColor: B, size: 16, tooltipText: b }) : null; return (0, i.jsxs)("div", { className: a()(C.connectedAccountContainer, null != r && r.length > 0 || null != P ? C.connectedAccountContainerWithMetadata : null, v), children: [(0, i.jsxs)("div", { className: C.connectedAccount, children: [(0, i.jsx)(u.Tooltip, { text: null == G ? void 0 : G.name, children: e => (0, i.jsx)("img", { ...e, alt: O.default.Messages.IMG_ALT_LOGO.format({ name: null == G ? void 0 : G.name }), className: C.connectedAccountIcon, src: (0, l.isThemeDark)(R) ? null == G ? void 0 : G.icon.darkSVG : null == G ? void 0 : G.icon.lightSVG }) }), (0, i.jsxs)("div", { className: C.connectedAccountNameContainer, children: [(0, i.jsxs)("div", { className: C.connectedAccountName, children: [(0, i.jsxs)("div", { className: C.connectedAccountNameTextContainer, children: [(0, i.jsx)(u.Tooltip, { overflowOnly: !0, text: S.name, children: e => (0, i.jsx)(u.Text, { ...e, variant: "text-md/semibold", color: "interactive-active", className: C.connectedAccountNameText, children: S.name }) }), V] }), d] }), null != P ? (0, i.jsx)(u.Text, { variant: "text-xs/normal", color: "header-secondary", children: O.default.Messages.CONNECTIONS_PROFILE_MEMBER_SINCE.format({ date: P }) }) : null] })] }), null != r && r.length > 0 ? (0, i.jsx)("div", { className: C.connectedAccountChildren, children: r }) : null] }) } function g(e) { let { applicationRoleConnection: t, className: n, locale: r } = e, s = (0, T.generateRoleConnectionMetadataItems)(t, void 0, r); return (0, i.jsxs)("div", { className: a()(C.connectedAccountContainer, null != s && s.length > 0 ? C.connectedAccountContainerWithMetadata : null, n), children: [(0, i.jsx)("div", { className: C.connectedAccount, children: (0, i.jsxs)("div", { className: C.connectedAccountNameContainer, children: [null != t.platform_name ? (0, i.jsx)(u.Text, { variant: "eyebrow", color: "interactive-normal", children: t.platform_name }) : null, null != t.platform_username ? (0, i.jsx)("div", { className: C.connectedAccountName, children: (0, i.jsx)("div", { className: C.connectedAccountNameTextContainer, children: (0, i.jsx)(u.Text, { variant: "text-md/semibold", color: "interactive-active", className: C.connectedAccountNameText, children: t.platform_username }) }) }) : null] }) }), null != s && s.length > 0 ? (0, i.jsx)("div", { className: a()(C.connectedAccountChildren, C.connectedAccountChildrenNoIcon), children: s }) : null, (0, i.jsx)("div", { children: (0, i.jsx)("div", { className: C.connectedAccountPoweredBy, children: (0, i.jsx)(u.Text, { variant: "text-xs/normal", color: "text-muted", children: O.default.Messages.CONNECTIONS_PROFILE_POWERED_BY.format({ applicationHook: () => (0, i.jsxs)("div", { className: C.connectedAccountPoweredByText, children: [null != t.application.bot ? (0, i.jsx)(d.default, { user: new S.default(t.application.bot), size: u.AvatarSizes.SIZE_16 }) : null, (0, i.jsx)(u.Text, { variant: "text-xs/normal", color: "text-normal", children: t.application.name })] }) }) }) }) })] }) } let L = r.forwardRef(function(e, t) { let { connectedAccounts: n, theme: r, locale: s, className: o, userId: l } = e; if (null == n || 0 === n.length) return null; let u = n.filter(e => _.default.isSupported(e.type)).map(e => (0, i.jsx)(R, { connectedAccount: e, theme: r, locale: s, userId: l }, "".concat(e.type, ":").concat(e.id))), d = [], c = []; for (let e = 0; e < u.length; e++) { let t = u[e]; e % 2 == 0 ? d.push(t) : c.push(t) } return (0, i.jsxs)("div", { ref: t, className: a()(C.connectedAccounts, o), children: [(0, i.jsx)("div", { className: C.connectedAccountsColumn, children: d }), (0, i.jsx)("div", { className: C.connectedAccountsColumn, children: c })] }) }) }, 171368: function(e, t, n) { "use strict"; n.r(t), n.d(t, { closeUserProfileModal: function() { return _ }, openUserProfileModal: function() { return d } }); var i = n("570140"), r = n("232567"), s = n("594174"), a = n("342656"), o = n("447452"), l = n("484459"), u = n("981631"); function d(e) { let { userId: t, section: n, guildId: d = u.ME, channelId: _, messageId: c, roleId: E, friendToken: I, autoFocusNote: T, analyticsLocation: f, sourceAnalyticsLocations: S } = e, h = s.default.getUser(t), A = null != d && d !== u.ME ? d : void 0, m = (0, a.isInProfileMutualsExperiment)().enabled || (0, o.getSimplifiedProfileExperimentConfig)({ location: "openUserProfileModal", autoTrackExposure: !1 }).basicsEnabled; if (null == h) return (0, r.fetchProfile)(t, { guildId: A, withMutualGuilds: !0, withMutualFriends: m, friendToken: I }).then(() => { i.default.dispatch({ type: "USER_PROFILE_MODAL_OPEN", userId: t, section: n, guildId: null != d ? d : void 0, channelId: null != _ ? _ : void 0, messageId: null != c ? c : void 0, roleId: null != E ? E : void 0, friendToken: I, autoFocusNote: T, analyticsLocation: f, sourceAnalyticsLocations: S }) }); (0, l.maybeFetchUserProfileForPopout)(h, { guildId: A, withMutualGuilds: !0, withMutualFriends: m, friendToken: I }), i.default.dispatch({ type: "USER_PROFILE_MODAL_OPEN", userId: t, section: n, guildId: null != d ? d : void 0, channelId: null != _ ? _ : void 0, messageId: null != c ? c : void 0, roleId: null != E ? E : void 0, friendToken: I, autoFocusNote: T, analyticsLocation: f, sourceAnalyticsLocations: S }) } function _() { i.default.dispatch({ type: "USER_PROFILE_MODAL_CLOSE" }) } }, 421486: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("442837"), d = n("481060"), _ = n("906732"), c = n("318374"), E = n("522289"), I = n("314897"), T = n("346656"); n("5192"); var f = n("342656"), S = n("785717"), h = n("726059"), A = n("162267"), m = n("171368"), N = n("228168"), p = n("689938"), O = n("498106"); (r = i || (i = {}))[r.NOT_CHECKED = 0] = "NOT_CHECKED", r[r.NOT_OVERFLOWING = 1] = "NOT_OVERFLOWING", r[r.OVERFLOWING_LARGE_ONLY = 2] = "OVERFLOWING_LARGE_ONLY", r[r.OVERFLOWING_ALL = 3] = "OVERFLOWING_ALL"; let C = a.memo(function(e) { let { user: t, mutualFriends: n, mutualGuilds: i, onClose: r, analyticsLocation: o, maxIcons: u = 3, underlineTextOnHover: I = !1, showTooltips: f = !0 } = e, { analyticsLocations: h } = (0, _.default)(), { guildId: A, channelId: C, messageId: R, roleId: g } = (0, S.useUserProfileAnalyticsContext)(), L = a.useMemo(() => { var e; return null !== (e = null == n ? void 0 : n.map(e => { let { user: t } = e; return t })) && void 0 !== e ? e : [] }, [n]), v = a.useMemo(() => { var e; return null !== (e = null == i ? void 0 : i.map(e => { let { guild: t } = e; return t })) && void 0 !== e ? e : [] }, [i]), D = a.useMemo(() => p.default.Messages.USER_PROFILE_MUTUAL_FRIENDS_SHORT.format({ count: L.length }), [L]), M = a.useMemo(() => p.default.Messages.USER_PROFILE_MUTUAL_GUILDS_SHORT.format({ count: v.length }), [v]), y = a.useRef(null), [P, U] = a.useState(!1), [b, G] = a.useState(!1), w = a.useCallback(() => { if (null != y.current) { var e; G((null === (e = y.current) || void 0 === e ? void 0 : e.clientHeight) > 19), U(!0) } }, []), k = a.useCallback(e => () => { (0, m.openUserProfileModal)({ userId: t.id, sourceAnalyticsLocations: h, guildId: A, channelId: C, messageId: R, roleId: g, section: e, analyticsLocation: o }), null == r || r() }, [o, h, r, t.id, A, C, R, g]); a.useEffect(() => { w() }, [w, D]); let B = L.length > 0, V = v.length > 0; return (0, s.jsxs)("div", { className: l()(O.compactItemContainer, !P && O.hideElement), ref: y, children: [B && (() => { let e = (0, s.jsxs)(d.Clickable, { onClick: k(N.UserProfileSections.MUTUAL_FRIENDS), className: l()(O.avatarAndTextContainer, O.__invalid_friendsContainer), children: [(0, s.jsx)("div", { className: O.__invalid_avatars, children: (0, s.jsx)(c.default, { maxUsers: u, users: L, size: d.AvatarSizes.SIZE_16, hideOverflowCount: !0, disableUsernameTooltip: !0 }) }), (0, s.jsx)(d.Text, { className: l()(O.itemizedListText, I && O.underlineOnHover), variant: "text-sm/normal", color: "interactive-normal", children: D })] }); return f ? (0, s.jsx)(d.TooltipContainer, { text: p.default.Messages.USER_PROFILE_MUTUAL_FRIENDS_TOOLTIP, children: e }) : e })(), B && V && (0, s.jsx)("div", { "aria-hidden": "true", className: O.dotSpacer }), V && (() => { let e = (0, s.jsxs)(d.Clickable, { onClick: k(N.UserProfileSections.MUTUAL_GUILDS), className: l()(O.avatarAndTextContainer, O.serverContainer), children: [!b && (0, s.jsx)("div", { className: O.__invalid_avatars, children: (0, s.jsx)(E.default, { maxGuilds: u, guilds: v, size: T.default.Sizes.SMOL, hideOverflowCount: !0, disableGuildNameTooltip: !0 }) }), (0, s.jsx)(d.Text, { className: l()(O.itemizedListText, I && O.underlineOnHover), variant: "text-sm/normal", color: "interactive-normal", children: M })] }); return f ? (0, s.jsx)(d.TooltipContainer, { text: p.default.Messages.USER_PROFILE_MUTUAL_GUILDS_TOOLTIP, children: e }) : e })()] }) }); t.default = a.memo(function(e) { var t, n; let { user: i, onClose: r, className: a, sourceAnaylticsLocations: o } = e, { analyticsLocations: c } = (0, _.default)(), E = null !== (n = null !== (t = null == o ? void 0 : o[0]) && void 0 !== t ? t : null == c ? void 0 : c[0]) && void 0 !== n ? n : null, T = (0, u.useStateFromStores)([I.default], () => I.default.getId()), S = i.id === T, m = i.bot || S, { enabled: N } = (0, f.useProfileMutualsExperiment)({ autoTrackExposure: !1, location: E, disable: m }), { mutualGuilds: R } = (0, A.default)(i.id), { mutualFriends: g } = (0, h.default)(i.id); return !N || m || (null == g || 0 === g.length) && (null == R || 0 === R.length) ? null : (0, s.jsxs)("div", { className: l()(O.mainContainer, a), children: [(0, s.jsx)(d.Heading, { variant: "eyebrow", className: O.__invalid_title, children: p.default.Messages.USER_PROFILE_MUTUALS_TITLE }), (0, s.jsx)(C, { user: i, mutualFriends: g, mutualGuilds: R, onClose: r })] }) }) }, 347949: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserProfileRecentGames: function() { return L }, UserProfileRecentGamesContainer: function() { return v }, UserProfileRecentGamesSection: function() { return D }, UserProfileRecentGamesThemedSection: function() { return M } }), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("692547"), u = n("622535"), d = n("298433"), _ = n("434559"), c = n("481060"), E = n("812206"), I = n("566454"), T = n("32966"), f = n("314897"), S = n("768581"), h = n("785717"), A = n("221292"), m = n("502762"), N = n("659101"), p = n("171368"), O = n("981631"), C = n("689938"), R = n("704536"); function g(e) { let { game: t, isSharedGame: n } = e, s = (0, o.useStateFromStores)([E.default], () => E.default.getApplication(t.applicationId)), a = r.useMemo(() => null == t.duration || 0 === t.duration ? (0, I.getLastPlayedTimestamp)(t, !1) : "".concat((0, I.getLastPlayedTimestamp)(t, !0), " — ").concat((0, I.getTimePlayedLastWeek)(t)), [t]), u = r.useRef(null), [T, f] = r.useState(!1); if (r.useEffect(() => { let e = u.current; null != e && null != e.offsetWidth && null != e.scrollWidth && f(e.offsetWidth < e.scrollWidth) }, []), null == s) return null; let h = S.default.getApplicationIconURL({ id: s.id, icon: s.icon, size: 40 }); return (0, i.jsxs)("div", { className: R.recentGameContainer, children: [(0, i.jsx)("div", { className: R.recentGameIcon, children: null != h && (0, i.jsx)("img", { alt: "", "aria-hidden": !0, src: h, width: 40, height: 40 }) }), (0, i.jsxs)("div", { className: R.recentGameDetails, children: [(0, i.jsxs)("div", { className: R.recentGameTitleContainer, children: [(0, i.jsx)(c.Tooltip, { text: s.name, color: c.Tooltip.Colors.NESTED, shouldShow: T, children: e => (0, i.jsx)("span", { ref: u, ...e, className: R.recentGameTitle, children: s.name }) }), n && (0, i.jsx)(c.Tooltip, { text: C.default.Messages.USER_RECENT_GAMES_YOU_BOTH_PLAY, color: c.Tooltip.Colors.NESTED, children: e => (0, i.jsx)("div", { className: R.sharedGameIcon, ...e, children: (0, i.jsx)(d.GroupIcon, { height: 14, width: 14, color: l.default.colors.INTERACTIVE_MUTED }) }) })] }), (0, i.jsx)(c.Text, { variant: "text-sm/normal", color: "header-secondary", children: a }), t.isNew && (0, i.jsxs)("div", { className: R.newIcon, children: [(0, i.jsx)(_.NewUserLargeIcon, { height: 12, width: 12, color: l.default.colors.STATUS_POSITIVE }), (0, i.jsx)(c.Text, { variant: "text-xs/normal", color: "status-positive", children: C.default.Messages.NEW_TO_THIS_GAME })] })] })] }) } let L = r.memo(function(e) { let { userId: t, recentGames: n, currentUserApplicationIds: s, containerClassName: o } = e, { trackUserProfileAction: l, ...d } = (0, h.useUserProfileAnalyticsContext)(), [_, c] = r.useState(!1), [E, I] = r.useState(!1); return r.useEffect(() => { if (null == s || _ || !E) return; c(!0); let e = [], t = [], i = []; n.forEach(n => { let { applicationId: r, isNew: a } = n; e.push(r), a && t.push(r), s.has(r) && i.push(r) }), (0, A.trackUserProfileRecentGamesViewed)({ ...d, applicationIds: e, newApplicationIds: t, sharedApplicationIds: i }) }, [s, n, c, _, d, E]), (0, i.jsx)(u.VisibilitySensor, { onChange: I, threshold: .25, active: !_, children: (0, i.jsx)("div", { className: a()(R.recentGames, o), children: null == n ? void 0 : n.map(e => { var n, r, a; return (0, i.jsx)(g, { game: e, isSharedGame: (n = t, r = s, a = e.applicationId, n !== f.default.getId() && null != r && r.has(a)) }, e.lastSessionId) }) }) }) }); function v(e) { let { userId: t, maxItems: n = 3, wrapChildren: s, containerClassName: a } = e, { recentGames: o, currentUserApplicationIds: l, isFetching: u } = (0, T.useUserRecentGames)(t), d = r.useMemo(() => null == o ? void 0 : o.slice(0, n), [o, n]), _ = r.useMemo(() => null != o && o.length > n, [o, n]), E = r.useCallback(() => { (0, p.openUserProfileModal)({ userId: t, guildId: O.ME, analyticsLocation: { section: O.AnalyticsSections.USER_PROFILE } }) }, [t]); if (u || null == d || 0 === d.length) return null; let I = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)("div", { className: R.headerContainer, children: [(0, i.jsx)(c.Heading, { className: R.header, variant: "eyebrow", children: C.default.Messages.RECENT_GAMES }), _ && (0, i.jsx)(c.Clickable, { className: R.viewAll, onClick: E, children: (0, i.jsx)(c.Heading, { variant: "eyebrow", color: "text-link", children: C.default.Messages.VIEW_ALL.toUpperCase() }) })] }), (0, i.jsx)(L, { containerClassName: a, userId: t, recentGames: d, currentUserApplicationIds: l })] }); return null != s ? (0, i.jsx)(i.Fragment, { children: s(I) }) : I } function D(e) { let { userId: t, containerClassName: n } = e, s = r.useCallback(e => (0, i.jsx)(N.default, { children: e }), []); return (0, i.jsx)(v, { userId: t, containerClassName: n, wrapChildren: s }) } function M(e) { let { userId: t, containerClassName: n } = e, s = r.useCallback(e => (0, i.jsx)(m.default.Overlay, { children: (0, i.jsx)(N.default, { children: e }) }), []); return (0, i.jsx)(v, { userId: t, containerClassName: n, wrapChildren: s }) } }, 841040: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("300284"), a = n("785717"), o = n("981631"), l = n("689938"), u = n("758144"); let d = { page: o.AnalyticsPages.GUILD_CHANNEL, section: o.AnalyticsSections.PROFILE_POPOUT, object: o.AnalyticsObjects.EDIT_PER_SERVER_IDENTITY }, _ = { page: o.AnalyticsPages.USER_POPOUT, section: o.AnalyticsSections.PROFILE_POPOUT }; function c(e) { let { onSelect: t, onClose: n, guild: o } = e, c = (0, s.default)({ guild: o, analyticsLocation: d }), E = (0, s.default)({ analyticsLocation: _ }), { trackUserProfileAction: I } = (0, a.useUserProfileAnalyticsContext)(); return (0, i.jsxs)(r.Menu, { className: u.popoutMenu, onSelect: t, navId: "edit-profile-popout", onClose: n, "aria-label": l.default.Messages.PROFILE_ACTIONS_MENU_LABEL, children: [(0, i.jsx)(r.MenuItem, { id: "edit-server-profile", label: l.default.Messages.CHANGE_IDENTITY, subtext: l.default.Messages.CHANGE_IDENTITY_SERVER_PROFILE_MENU_HELP, action: () => { I({ action: "EDIT_GUILD_PROFILE" }), c() } }), (0, i.jsx)(r.MenuItem, { id: "edit-main-profile", label: l.default.Messages.EDIT_MAIN_PROFILE, subtext: l.default.Messages.USER_PROFILE_MENU_HELP, action: () => { I({ action: "EDIT_PROFILE" }), E() } })] }) } }, 788197: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return V } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("410575"), l = n("727637"), u = n("980591"), d = n("58540"), _ = n("603113"), c = n("420660"), E = n("100527"), I = n("906732"), T = n("812206"), f = n("835473"), S = n("199902"), h = n("271383"), A = n("430824"), m = n("158776"), N = n("699516"), p = n("626135"), O = n("785717"), C = n("621853"), R = n("505737"), g = n("318661"), L = n("484404"), v = n("502762"), D = n("192133"), M = n("240328"), y = n("436478"), P = n("131640"), U = n("664202"), b = n("228168"), G = n("981631"), w = n("616922"), k = n("245876"); function B(e) { e.stopPropagation() } function V(e) { let { user: t, guildId: n, channelId: V, messageId: x, roleId: F, setNote: H, closePopout: Y, setPopoutRef: j, disableUserProfileLink: W = __OVERLAY__, analyticsParams: K = {}, newAnalyticsLocations: z = [] } = e, { analyticsLocations: Z } = (0, I.default)([...z, E.default.PROFILE_POPOUT]), X = r.useRef(null), Q = (0, g.default)(t.id, n), q = (0, l.default)(X), J = (0, s.useStateFromStores)([C.default], () => { var e; return null === (e = C.default.getUserProfile(t.id)) || void 0 === e ? void 0 : e.application }), $ = (0, s.useStateFromStores)([A.default], () => null != n ? A.default.getGuild(n) : null), ee = (0, s.useStateFromStores)([h.default], () => null != n ? h.default.getMember(n, t.id) : null), et = t.isNonUserBot(), { activity: en, customStatusActivity: ei, status: er, isMobile: es, isApplicationStreaming: ea } = (0, s.useStateFromStoresObject)([S.default, m.default], () => { let e = null != S.default.getAnyStreamForUser(t.id); return { activity: m.default.findActivity(t.id, t => { let { type: n } = t; return e ? n === G.ActivityTypes.PLAYING : n !== G.ActivityTypes.CUSTOM_STATUS }), customStatusActivity: m.default.findActivity(t.id, e => { let { type: t } = e; return t === G.ActivityTypes.CUSTOM_STATUS }), status: et ? null : m.default.getStatus(t.id), isMobile: m.default.isMobileOnline(t.id), isApplicationStreaming: e } }), [eo, el] = r.useState(!1), eu = r.useMemo(() => null != n ? { [n]: [t.id] } : {}, [n, t.id]); (0, d.useSubscribeGuildMembers)(eu); let ed = (0, R.default)(t.id, n), e_ = (0, U.useShouldShowUserPopoutCollectiblesUpsell)({ popoutUser: t, source: y.UserPopoutUpsellSource.USER_POPOUT, guildId: n }), [ec, eE] = r.useState(!1); (0, u.default)(() => eE(!0), e_.shouldShow ? 250 : null); let eI = (0, f.useGetOrFetchApplication)(null == en ? void 0 : en.application_id); return r.useEffect(() => { null == j || j(null == X ? void 0 : X.current) }, [X, j]), r.useEffect(() => { if (!eo)((null == en ? void 0 : en.application_id) == null || null != eI) && (null == n || (null == ee ? void 0 : ee.fullProfileLoadedTimestamp) != null) && (function() { var e; let i, r, s; null != en && (i = en.party, r = en.assets, s = null != en.application_id ? T.default.getApplication(en.application_id) : null); let a = er; er === G.StatusTypes.ONLINE && (a = es ? G.AnalyticsUserStatusTypes.ONLINE_MOBILE : G.AnalyticsUserStatusTypes.ONLINE_DESKTOP); let o = null != ee ? { has_nickname: !!(null == ee ? void 0 : ee.nick), has_guild_member_avatar: !!(null == ee ? void 0 : ee.avatar), has_guild_member_banner: !!(null == Q ? void 0 : Q.isUsingGuildMemberBanner()), has_guild_member_bio: !!(null == Q ? void 0 : Q.isUsingGuildMemberBio()) } : {}, l = null != J ? { other_application_id: null == J ? void 0 : J.id, other_application_name: t.toString() } : {}; p.default.track(G.AnalyticEvents.OPEN_POPOUT, { type: "Profile Popout", guild_id: n, channel_id: V, other_user_id: t.id, application_id: null != en ? en.application_id : void 0, application_name: null != en ? en.name : void 0, sku_id: null != s ? s.primarySkuId : null, is_friend: N.default.isFriend(t.id), has_images: !!(null !== (e = null == r ? void 0 : r.large_image) && void 0 !== e ? e : null == r ? void 0 : r.small_image), party_max: null != i && null != i.size ? i.size[1] : void 0, party_id: null != i ? i.id : void 0, party_platform: null != i && (0, w.isSpotifyParty)(i.id) ? G.PlatformTypes.SPOTIFY : null, game_platform: (0, _.default)(en), profile_user_status: a, is_streaming: ea, has_custom_status: null != ei, has_avatar_decoration: null != t.avatarDecoration, has_profile_effect: (null == Q ? void 0 : Q.profileEffectId) != null, profile_has_nitro_customization: null != Q && (null == Q ? void 0 : Q.hasPremiumCustomization()), profile_has_theme_color_customized: null != Q && Q.hasThemeColors(), profile_has_theme_animation: (null == Q ? void 0 : Q.popoutAnimationParticleType) != null, ...o, ...l, ...K }) }(), el(!0)) }, [ee, null == en ? void 0 : en.application_id, eI, eo, n]), (0, i.jsx)(I.AnalyticsLocationProvider, { value: Z, children: (0, i.jsx)(O.UserProfileAnalyticsProvider, { layout: "POPOUT", userId: t.id, guildId: n, channelId: V, messageId: x, roleId: F, shouldTrackViewOnMount: null == ee || null != ee.fullProfileLoadedTimestamp, children: (0, i.jsx)(o.default, { section: G.AnalyticsSections.PROFILE_POPOUT, children: (0, i.jsx)(a.Dialog, { ref: X, "aria-label": t.username, onClick: B, onContextMenu: B, style: e_.shouldShow ? { marginTop: M.DEFAULT_COLLECTIBLES_UPSELL_HEIGHT } : void 0, children: (0, i.jsxs)(v.default, { user: t, displayProfile: Q, profileType: b.UserProfileTypes.POPOUT, className: e_.shouldShow ? k.hasCollectiblesUpsell : void 0, showOutOfBoundaryComponents: ec, children: [(0, i.jsx)(P.default, { user: t, displayProfile: Q, guildId: n, channelId: V, onClose: () => null == Y ? void 0 : Y(), isMobile: es, isStreaming: (0, c.default)(en), status: er, disableUserProfileLink: W, isHovering: q, upsell: e_.shouldShow ? (0, i.jsx)(M.default, { user: t, upsellSource: y.UserPopoutUpsellSource.USER_POPOUT, displayProfile: Q, onClose: Y, ...e_ }) : void 0 }), (0, i.jsxs)(v.default.Overlay, { children: [(0, i.jsx)(L.default, { onTooltipClose: Y }), (0, i.jsx)(D.default, { activity: en, customStatusActivity: ei, displayProfile: Q, user: t, guild: $, guildMember: ee, channelId: V, onClose: Y, setNote: H, canDM: ed, analyticsParams: K })] })] }) }) }) }) }) } }, 192133: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return B } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("100527"), d = n("761174"), _ = n("314897"), c = n("592125"), E = n("246946"), I = n("5192"), T = n("51144"), f = n("342656"), S = n("621853"), h = n("652853"), A = n("421486"), m = n("347949"), N = n("138394"), p = n("790711"), O = n("248345"), C = n("337125"), R = n("19836"), g = n("207570"), L = n("77097"), v = n("538564"), D = n("489642"), M = n("319300"), y = n("591600"), P = n("579729"), U = n("302316"), b = n("186395"), G = n("584045"), w = n("981631"), k = n("383630"); function B(e) { var t, n, s; let { activity: B, customStatusActivity: V, user: x, displayProfile: F, guild: H, guildMember: Y, channelId: j, onClose: W, setNote: K = !1, canDM: z, hideNote: Z = !1, showCopiableUsername: X = !1, analyticsParams: Q } = e, q = (0, o.useStateFromStores)([E.default], () => E.default.hidePersonalInformation), J = (0, o.useStateFromStores)([S.default], () => { var e; return null === (e = S.default.getUserProfile(x.id)) || void 0 === e ? void 0 : e.application }), $ = (0, o.useStateFromStores)([c.default], () => c.default.getChannel(j)), { theme: ee } = (0, h.useUserProfileThemeContext)(), et = r.useRef(null), [en, ei] = r.useState(!0), er = r.useCallback(() => { let { current: e } = et; null != e && ei(0 === e.getScrollerState().scrollTop) }, []); r.useLayoutEffect(() => { var e; let { current: t } = et; null != t && (null === (e = t.getScrollerNode()) || void 0 === e || e.scrollTo({ top: 0 })) }, []); let es = (0, o.useStateFromStores)([_.default], () => _.default.getId()), ea = x.id === es, eo = x.bot || ea, { enabled: el } = (0, f.useProfileMutualsExperiment)({ autoTrackExposure: !0, location: u.default.PROFILE_POPOUT, disable: eo }), eu = (0, d.useIsUserRecentGamesEnabled)({ userId: x.id, location: "28tk0bf_1" }); if (x.isSystemUser()) return null; if (x.isNonUserBot()) return (0, i.jsx)(G.default, { user: x, nickname: null, pronouns: null, className: k.usernameSection, lastSection: !0 }); let ed = null !== (t = I.default.getNickname(null == H ? void 0 : H.id, j, x)) && void 0 !== t ? t : T.default.getName(x), e_ = { location: { page: w.AnalyticsPages.USER_POPOUT, section: w.AnalyticsSections.USER_PROFILE } }; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(G.default, { className: k.usernameSection, user: x, nickname: ed, pronouns: null == F ? void 0 : F.pronouns, usernameIcon: x.hasAvatarForGuild(null == H ? void 0 : H.id) && (0, i.jsx)(p.default, { user: x, nickname: ed }), shouldCopyOnClick: X }), (0, i.jsxs)(l.HeadingLevel, { children: [(0, i.jsx)(v.default, { className: k.customStatusSection, customStatusActivity: V }), (0, i.jsx)(N.default, { className: k.divider }), (0, i.jsxs)(l.AdvancedScroller, { className: a()(k.scroller, { [k.scrollerSeparator]: !en }), onScroll: er, ref: et, children: [(0, i.jsx)(g.default, { user: x, guildId: null == H ? void 0 : H.id }), (0, i.jsx)(R.default, { isUsingGuildBio: null !== (n = null == F ? void 0 : F.isUsingGuildMemberBio()) && void 0 !== n && n, bio: null == F ? void 0 : F.bio, guild: H, hidePersonalInformation: q }), el && (0, i.jsx)(A.default, { className: k.profileMutuals, user: x, onClose: W }), (0, i.jsx)(M.default, { userId: x.id, guildId: null == H ? void 0 : H.id }), (0, i.jsx)(O.default, { activity: B, user: x, guild: H, channelId: j, onClose: W, analyticsParams: (null == Q ? void 0 : Q.location) != null ? Q : e_ }), eu && (0, i.jsx)(m.UserProfileRecentGamesSection, { userId: x.id }), (null == J ? void 0 : J.popularApplicationCommandIds) != null && null != $ ? (0, i.jsx)(P.default, { applicationId: J.id, commandIds: J.popularApplicationCommandIds, channel: $, guildId: null == H ? void 0 : H.id, onClick: W }) : null, (0, i.jsx)(C.default, { user: x, guildId: null == H ? void 0 : H.id }), (0, i.jsx)(b.default, { user: x, guild: H, guildMember: Y, showBorder: null !== (s = null == F ? void 0 : F.canEditThemes) && void 0 !== s && s }), (0, i.jsx)(L.default, { userId: x.id, channelId: j, guild: H, onClose: W, theme: ee }), null != J && void 0 !== j && (0, i.jsx)(U.default, { channelId: j, applicationId: J.id }), !q && !Z && (0, i.jsx)(y.default, { user: x, setNote: K, autoFocus: !z, lastSection: !z }), !x.isNonUserBot() && z && (0, i.jsx)(D.default, { user: x, setNote: K, canDM: z, onClose: W })] })] })] }) } }, 240328: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT_COLLECTIBLES_UPSELL_HEIGHT: function() { return D } }), n("47120"), n("627341"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("278074"), l = n("399606"), u = n("481060"), d = n("393238"), _ = n("607070"), c = n("100527"), E = n("906732"), I = n("1585"), T = n("125988"), f = n("335131"), S = n("597688"), h = n("884697"), A = n("731896"), m = n("594174"), N = n("465670"), p = n("74538"), O = n("436478"), C = n("921944"), R = n("689938"), g = n("245876"), L = n("174492"); function v(e) { let { onClick: t } = e; return (0, i.jsx)(u.Clickable, { className: g.closeButton, onClick: t, "aria-label": R.default.Messages.DISMISS, children: (0, i.jsx)(N.default, { className: g.closeIcon, width: 18, height: 18 }) }) } let D = 76, M = e => (0, i.jsx)(u.Text, { variant: "text-sm/normal", color: "text-normal", tag: "span", className: g.ctaLink, children: e }), y = e => { let { user: t, onClick: n } = e, { avatarDecorationSrc: r } = (0, T.default)({ user: t, size: (0, I.getDecorationSizeForAvatarSize)(u.AvatarSizes.SIZE_48) }); return (0, i.jsx)(u.Clickable, { className: g.avatarButton, onClick: n, "aria-label": R.default.Messages.COLLECTIBLES_CTA_GO_TO_SHOP, children: (0, i.jsx)(u.Avatar, { src: L, avatarDecoration: r, size: u.AvatarSizes.SIZE_48, "aria-hidden": !0 }) }) }; t.default = e => { var t; let { user: n, displayProfile: s, onClose: I, onDismiss: T, isInSidebar: N = !1, canShowAvatarDecorationUpsell: L = !1, canShowProfileEffectUpsell: P = !1, upsellSource: U } = e, { analyticsLocations: b } = (0, E.default)(c.default.COLLECTIBLES_USER_POPOUT_UPSELL), G = (0, l.useStateFromStores)([_.default], () => _.default.useReducedMotion), { ref: w, height: k } = (0, d.default)(), B = r.useMemo(() => ({ top: "-".concat((null != k ? k : D) + 6, "px") }), [k]), V = (0, l.useStateFromStores)([m.default], () => m.default.getCurrentUser()), x = p.default.canUseCollectibles(V), { setUpsellSource: F, reset: H } = (0, O.useUserPopoutCollectiblesUpsellStore)(); r.useEffect(() => (F(U), () => { H() }), [F, U, H]); let Y = (0, A.useProfileEffectPreset)(null == s ? void 0 : s.profileEffectId), [j, W] = (0, l.useStateFromStoresArray)([S.default], () => { var e; return [(0, h.isPremiumCollectiblesProduct)(S.default.getProduct(null === (e = n.avatarDecoration) || void 0 === e ? void 0 : e.skuId)), (0, h.isPremiumCollectiblesProduct)(S.default.getProduct(null == Y ? void 0 : Y.skuId))] }), K = r.useCallback(() => { var e, t, i, r; null == T || T(C.ContentDismissActionType.PRIMARY), null == I || I(), (0, f.openCollectiblesShop)({ analyticsLocations: b, analyticsSource: c.default.COLLECTIBLES_USER_POPOUT_UPSELL, initialProductSkuId: j ? null !== (i = null == Y ? void 0 : Y.skuId) && void 0 !== i ? i : null === (e = n.avatarDecoration) || void 0 === e ? void 0 : e.skuId : null !== (r = null === (t = n.avatarDecoration) || void 0 === t ? void 0 : t.skuId) && void 0 !== r ? r : null == Y ? void 0 : Y.skuId }) }, [T, I, b, null == Y ? void 0 : Y.skuId, null === (t = n.avatarDecoration) || void 0 === t ? void 0 : t.skuId, j]), z = r.useCallback(() => { null == T || T(C.ContentDismissActionType.DISMISS) }, [T]); if (!L && !P) return null; let Z = (0, o.match)([L, P]).with([!0, !0], () => j && W && x ? R.default.Messages.COMBINED_STARTER_COLLECTIBLES_SOCIAL_UPSELL_NITRO.format({ openShop: M }) : j && W ? R.default.Messages.COMBINED_STARTER_COLLECTIBLES_SOCIAL_UPSELL_NON_NITRO.format({ openShop: M }) : R.default.Messages.COMBINED_COLLECTIBLES_SOCIAL_UPSELL.format({ openShop: M })).with([!0, !1], () => j && x ? R.default.Messages.STARTER_AVATAR_DECORATIONS_SOCIAL_UPSELL_NITRO.format({ openShop: M }) : R.default.Messages.AVATAR_DECORATIONS_SOCIAL_UPSELL.format({ openShop: M })).with([!1, !0], () => W && x ? R.default.Messages.STARTER_PROFILE_EFFECTS_SOCIAL_UPSELL_NITRO.format({ openShop: M }) : (W && R.default.Messages.STARTER_PROFILE_EFFECTS_SOCIAL_UPSELL_NON_NITRO.format({ openShop: M }), R.default.Messages.PROFILE_EFFECTS_SOCIAL_UPSELL.format({ openShop: M }))).otherwise(() => null); return (0, i.jsx)("div", { style: B, className: a()(g.containerWrapper, { [g.animation]: !G, [g.inSidebar]: N }), ref: w, children: (0, i.jsxs)("div", { className: g.container, children: [L && (0, i.jsx)(y, { user: n, onClick: K }), (0, i.jsx)(u.Clickable, { className: L ? g.contentWithAvatar : g.content, onClick: K, "aria-label": R.default.Messages.COLLECTIBLES_CTA_GO_TO_SHOP, children: (0, i.jsx)(u.Text, { variant: "text-sm/normal", color: "text-normal", tag: "span", children: Z }) }), (0, i.jsx)("div", { className: g.buttons, children: (0, i.jsx)(v, { onClick: z }) })] }) }) } }, 436478: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserPopoutUpsellSource: function() { return r }, useUserPopoutCollectiblesUpsellStore: function() { return o } }); var i, r, s = n("652874"); (i = r || (r = {})).PROFILE_PANEL = "profile panel", i.USER_POPOUT = "user popout"; let a = { upsellSource: null }, o = (0, s.default)(e => ({ ...a, setUpsellSource: t => e({ upsellSource: t }), reset: () => { e({ ...a }) } })) }, 138394: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("249561"); function o(e) { let { className: t } = e; return (0, i.jsx)("div", { className: s()(a.divider, t) }) } }, 131640: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserPopoutAvatar: function() { return V }, UserPopoutBadgeList: function() { return k }, default: function() { return x } }), n("627341"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("278074"), l = n("442837"), u = n("692547"), d = n("481060"), _ = n("906732"), c = n("1585"), E = n("797610"), I = n("233440"), T = n("680295"), f = n("430824"), S = n("759231"), h = n("806519"), A = n("626135"), m = n("74538"), N = n("998502"), p = n("785717"), O = n("621853"), C = n("204197"), R = n("735336"), g = n("793397"), L = n("184325"), v = n("652853"), D = n("171368"), M = n("228168"), y = n("981631"), P = n("474936"), U = n("689938"), b = n("852994"); let G = d.AvatarSizes.SIZE_80, w = (0, c.getDecorationSizeForAvatarSize)(G); function k(e) { let { user: t, guildId: n, isTryItOutFlow: r, forProfileEffectModal: s, onClick: a } = e, o = (0, l.useStateFromStores)([O.default], () => O.default.getUserProfile(t.id), [t]), _ = (0, l.useStateFromStores)([f.default], () => f.default.getGuild(n), [n]), c = (0, E.useClydeProfilesEnabled)(_); return (0, i.jsxs)(i.Fragment, { children: [(null == o ? void 0 : o.profileFetchFailed) && (!t.isClyde() || c) && (0, i.jsx)(d.Tooltip, { text: U.default.Messages.USER_PROFILE_LOAD_ERROR, spacing: 16, children: e => (0, i.jsx)(S.default, { ...e, className: b.warningCircleIcon, color: u.default.unsafe_rawColors.YELLOW_300.css }) }), (0, i.jsx)(L.default, { className: s ? b.profileBadgesCompactNoTouch : b.profileBadges, user: t, guildId: n, isTryItOutFlow: r, size: L.BadgeSizes.SIZE_22, onBadgeClick: a })] }) } let B = N.default.getEnableHardwareAcceleration() ? d.AnimatedAvatar : d.Avatar; function V(e) { let { user: t, displayProfile: n, avatarSrc: s, hasBanner: l, status: u, isMobile: c, guildId: E, channelId: T, onClose: f, disableUserProfileLink: S, profileType: N, animateOnHover: O, hasProfileEffect: R, statusTooltipDelay: L } = e, { theme: k } = (0, v.useUserProfileThemeContext)(), V = r.useContext(A.AnalyticsContext), x = t.isNonUserBot() && !t.isClyde(), F = m.default.isPremiumAtLeast(null == n ? void 0 : n.premiumType, P.PremiumTypes.TIER_2), H = r.useMemo(() => (0, I.shouldDisableUserPresenceInChannel)(t, T), [t, T]), { analyticsLocations: Y } = (0, _.default)(), { trackUserProfileAction: j, messageId: W, roleId: K } = (0, p.useUserProfileAnalyticsContext)(), z = S || t.isClyde(), { avatarDecorationSrc: Z, avatarSrc: X, eventHandlers: Q } = (0, C.default)({ user: t, guildId: E, size: G, animateOnHover: O }), q = (0, i.jsx)("div", { className: b.avatarHoverTarget, ...Q, children: (0, i.jsx)(B, { src: null != s ? s : X, avatarDecoration: Z, size: G, "aria-label": t.username, status: H ? y.StatusTypes.UNKNOWN : u, statusBackdropColor: F && !H ? (0, d.getStatusBackdropColor)(k) : void 0, isMobile: c, statusTooltip: !0, statusTooltipDelay: L }) }), J = (0, o.match)(N).with(M.UserProfileTypes.POPOUT, () => (0, g.buildGetPremiumUserBannerStyles)({ premiumUserWithBanner: b.avatarPositionPremiumBanner, premiumUserWithoutBanner: b.avatarPositionPremiumNoBanner, default: b.avatarPositionNormal })({ isPremium: F, hasBanner: l, hasProfileEffect: R })).with(M.UserProfileTypes.POMELO_POPOUT, () => b.avatarPositionPomelo).with(M.UserProfileTypes.PANEL, () => b.avatarPositionPanel).with(M.UserProfileTypes.BITE_SIZE, () => b.avatarPositionBiteSize).exhaustive(); return (0, i.jsx)(i.Fragment, { children: (0, i.jsxs)(d.Clickable, { className: a()({ [b.clickable]: !z, [b.avatarWrapperNonUserBot]: x, [b.avatarWrapperNormal]: !x }, J), onClick: x || z ? void 0 : function() { j({ action: "PRESS_VIEW_PROFILE" }), (0, D.openUserProfileModal)({ userId: t.id, guildId: E, channelId: T, messageId: W, roleId: K, sourceAnalyticsLocations: Y, analyticsLocation: V.location }), null == f || f() }, children: [q, !z && function() { let e = null != Z, t = e ? w : (0, d.getAvatarSize)(G); return (0, i.jsx)(h.default, { mask: null == u || u === y.StatusTypes.UNKNOWN || H ? h.default.Masks.AVATAR_DEFAULT : (0, o.match)([e, c]).with([!0, !0], () => h.default.Masks.AVATAR_DECORATION_PROFILE_STATUS_MOBILE_SQUARE_80).with([!0, !1], () => h.default.Masks.AVATAR_DECORATION_PROFILE_STATUS_SQUARE_80).with([!1, !0], () => h.default.Masks.AVATAR_STATUS_MOBILE_80).with([!1, !1], () => h.default.Masks.AVATAR_STATUS_ROUND_80).exhaustive(), className: e ? b.avatarDecorationHint : b.avatarHint, style: e ? { borderRadius: .4 * t } : void 0, width: t, height: t, children: (0, i.jsx)("div", { className: b.avatarHintInner, children: U.default.Messages.VIEW_PROFILE }) }) }()] }) }) } function x(e) { let { user: t, displayProfile: n, guildId: r, channelId: s, onClose: a, isMobile: o, isStreaming: l, status: u, disableUserProfileLink: d, isHovering: _, showPremiumBadgeUpsell: c = !0, upsell: E } = e; return (0, i.jsxs)(i.Fragment, { children: [E, (0, i.jsx)(R.default, { user: t, displayProfile: n, onClose: a, guildId: r, profileType: M.UserProfileTypes.POPOUT, showPremiumBadgeUpsell: c, isHovering: _, hasProfileEffect: (null == n ? void 0 : n.profileEffectId) != null }), (null == n ? void 0 : n.profileEffectId) != null && (0, i.jsx)(T.default, { profileEffectId: null == n ? void 0 : n.profileEffectId, bannerAdjustment: 0, isHovering: _ }), (0, i.jsx)(V, { user: t, displayProfile: n, status: l ? y.StatusTypes.STREAMING : u, isMobile: o, guildId: r, channelId: s, onClose: a, disableUserProfileLink: d, hasBanner: (null == n ? void 0 : n.banner) != null, hasProfileEffect: (null == n ? void 0 : n.profileEffectId) != null, profileType: M.UserProfileTypes.POPOUT }), (0, i.jsx)(k, { user: t, guildId: r, onClick: a })] }) } }, 790711: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("64003"); function a(e) { let { user: t, nickname: n } = e, a = null != n; return (0, i.jsx)(r.Avatar, { src: t.getAvatarURL(void 0, a ? 16 : 24), size: a ? r.AvatarSizes.SIZE_16 : r.AvatarSizes.SIZE_24, className: a ? s.miniAvatar : s.largeAvatar, "aria-hidden": !0 }) } }, 659101: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("404538"); function o(e) { let { children: t, lastSection: n = !1, className: r, ...o } = e; return (0, i.jsx)("div", { className: s()(a.section, r, { [a.lastSection]: n }), ...o, children: t }) } }, 580512: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("717881"), a = n("906732"), o = n("199902"), l = n("158776"), u = n("785717"), d = n("221292"), _ = n("981631"), c = n("10268"); function E(e) { let { user: t, guild: n, channelId: E, onClose: I } = e, { analyticsLocations: T, newestAnalyticsLocation: f } = (0, a.default)(), { trackUserProfileAction: S, ...h } = (0, u.useUserProfileAnalyticsContext)(), { isApplicationStreaming: A, activity: m } = (0, r.useStateFromStoresObject)([o.default, l.default], () => { let e = null != o.default.getAnyStreamForUser(t.id); return { isApplicationStreaming: e, activity: e ? l.default.findActivity(t.id, e => { let { type: t } = e; return t === _.ActivityTypes.PLAYING }) : l.default.findActivity(t.id, e => { let { type: t } = e; return t !== _.ActivityTypes.CUSTOM_STATUS }) } }); return (0, i.jsx)(s.default, { type: s.UserActivityTypes.BITE_SIZE_POPOUT, activity: m, className: c.activity, source: f, user: t, guildId: null == n ? void 0 : n.id, channelId: E, onOpenGameProfile: I, onAction: () => { S({ action: "JOIN_ACTIVITY" }), (0, d.trackUserProfileActivityJoined)({ activityType: A ? _.ActivityTypes.STREAMING : null == m ? void 0 : m.type, activityName: null == m ? void 0 : m.name, activityPlatform: null == m ? void 0 : m.platform, activitySessionId: null == m ? void 0 : m.session_id, applicationId: null == m ? void 0 : m.application_id, analyticsLocations: T, ...h }), null == I || I() }, actionColor: c.buttonColor, hideHeader: !0, showChannelDetails: !0 }) } }, 513099: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return p } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("420660"), l = n("233440"), u = n("199902"), d = n("158776"), _ = n("74538"), c = n("998502"), E = n("785717"), I = n("204197"), T = n("652853"), f = n("228168"), S = n("981631"), h = n("474936"), A = n("579935"); let m = a.AvatarSizes.SIZE_80, N = c.default.getEnableHardwareAcceleration() ? a.AnimatedAvatar : a.Avatar; function p(e) { let { user: t, displayProfile: n, guildId: c, channelId: p, animateOnHover: O, onOpenProfile: C } = e, { theme: R } = (0, T.useUserProfileThemeContext)(), { trackUserProfileAction: g } = (0, E.useUserProfileAnalyticsContext)(), L = _.default.isPremiumAtLeast(null == n ? void 0 : n.premiumType, h.PremiumTypes.TIER_2), v = r.useMemo(() => (0, l.shouldDisableUserPresenceInChannel)(t, p), [t, p]), { status: D, isMobileOnline: M } = (0, s.useStateFromStoresObject)([u.default, d.default], () => { let e = null != u.default.getAnyStreamForUser(t.id), n = d.default.findActivity(t.id, t => { let { type: n } = t; return e ? n === S.ActivityTypes.PLAYING : n !== S.ActivityTypes.CUSTOM_STATUS }); return { status: (0, o.default)(n) ? S.StatusTypes.STREAMING : d.default.getStatus(t.id), isMobileOnline: d.default.isMobileOnline(t.id) } }), { avatarDecorationSrc: y, avatarSrc: P, eventHandlers: U } = (0, I.default)({ user: t, guildId: c, size: m, animateOnHover: O }); return (0, i.jsx)(a.Clickable, { ...U, className: A.clickable, onClick: null == C ? void 0 : () => { g({ action: "PRESS_VIEW_PROFILE" }), null == C || C() }, children: (0, i.jsx)(N, { src: P, avatarDecoration: y, size: m, "aria-label": t.username, imageClassName: null != C ? A.overlay : void 0, status: v ? S.StatusTypes.UNKNOWN : D, statusBackdropColor: L && !v ? (0, a.getStatusBackdropColor)(R) : void 0, isMobile: M, statusTooltip: !0, statusTooltipDelay: f.USER_PROFILE_TOOLTIP_DELAY }) }) } }, 67152: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("906732"), o = n("785717"), l = n("588822"), u = n("171368"), d = n("981631"), _ = n("689938"), c = n("783116"); t.default = r.memo(function(e) { let { user: t, onClose: n, bio: E, hidePersonalInformation: I } = e, { guildId: T, channelId: f, messageId: S, roleId: h } = (0, o.useUserProfileAnalyticsContext)(), { analyticsLocations: A } = (0, a.default)(), [m, N] = r.useState(!1); return I || null == E || "" === E ? null : (0, i.jsxs)("div", { children: [(0, i.jsx)("div", { ref: e => { null != e && N(e.scrollHeight - e.clientHeight > 1) }, className: c.descriptionClamp, children: (0, i.jsx)(l.default, { userBio: E, setLineClamp: !1, textColor: "header-primary" }) }), m && (0, i.jsx)(s.Clickable, { onClick: () => { null == n || n(), (0, u.openUserProfileModal)({ userId: t.id, guildId: null != T ? T : void 0, channelId: null != f ? f : void 0, messageId: null != S ? S : void 0, roleId: null != h ? h : void 0, analyticsLocation: { section: d.AnalyticsSections.BITE_SIZE_PROFILE_POPOUT }, sourceAnalyticsLocations: A }) }, className: c.viewFullBio, children: (0, i.jsx)(s.Text, { variant: "text-xs/normal", className: c.viewFullBioText, children: _.default.Messages.USER_PROFILE_VIEW_FULL_BIO }) })] }) }) }, 958120: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("954138"), o = n("979264"), l = n("246946"), u = n("5192"), d = n("447452"), _ = n("681837"), c = n("724593"), E = n("530"), I = n("894374"), T = n("790711"), f = n("580512"), S = n("67152"), h = n("579285"), A = n("287612"), m = n("228168"), N = n("981631"), p = n("153362"); function O(e) { let { user: t, currentUser: n, displayProfile: O, guild: C, isHovering: R, onOpenProfile: g, channelId: L, onClose: v } = e, { moreUserDetailsEnabled: D } = (0, d.useSimplifiedProfileExperiment)({ location: "BiteSizeProfileBody" }), M = u.default.getName(null == C ? void 0 : C.id, L, t), y = (0, s.useStateFromStores)([l.default], () => l.default.hidePersonalInformation), P = (0, a.default)("username"), U = r.useMemo(() => ({ source: N.AnalyticsSections.PROFILE_POPOUT, tagUserId: t.id }), [t.id]); return (0, i.jsxs)("div", { className: p.body, children: [(0, i.jsx)(E.default, { user: t, profileType: m.UserProfileTypes.BITE_SIZE, onOpenProfile: () => g({ autoFocusNote: !1 }), guildId: null == C ? void 0 : C.id, usernameIcon: t.hasAvatarForGuild(null == C ? void 0 : C.id) && (0, i.jsx)(T.default, { user: t, nickname: M }), pronouns: null == O ? void 0 : O.pronouns, tags: (0, i.jsx)(I.UserProfileBadgesTag, { displayProfile: O, onClose: v }), nicknameIcons: (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(_.default, { userId: t.id }), D && !y && (0, i.jsx)(c.default, { user: t, isHovering: R, onOpenProfile: () => g({ autoFocusNote: !0 }) })] }) }), t.id !== n.id && (0, i.jsx)(A.default, { user: t, onOpenProfile: e => g({ section: e, autoFocusNote: !1 }) }), P && (0, i.jsx)(o.default, { userId: t.id, inline: !1, profileViewedAnalytics: U }), D && (0, i.jsx)(S.default, { user: t, bio: null == O ? void 0 : O.bio, hidePersonalInformation: y, onClose: v }), (0, i.jsx)(f.default, { user: t, guild: C, channelId: L, onClose: v }), null != C && (0, i.jsx)(h.default, { user: t, currentUser: n, guild: C, onOpenProfile: () => g({ autoFocusNote: !1 }) })] }) } }, 901952: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return p } }), n("411104"), n("47120"); var i = n("735250"), r = n("470079"), s = n("493683"), a = n("904245"), o = n("906732"), l = n("541716"), u = n("752305"), d = n("893718"), _ = n("957730"), c = n("131704"), E = n("592125"), I = n("5192"), T = n("838440"), f = n("785717"), S = n("981631"), h = n("689938"), A = n("112147"); let m = (0, c.createChannelRecord)({ id: "1", type: S.ChannelTypes.DM }), N = async e => { let { userId: t, content: n, location: i } = e, { valid: r, failureReason: o } = await (0, T.applyChatRestrictions)({ type: l.ChatInputTypes.NORMAL, content: n, channel: null }); if (!r) throw Error(o); let u = await s.default.openPrivateChannel(t, !1, !1, i), d = E.default.getChannel(u); if (null == d) throw Error("Failed to open private channel"); let c = _.default.parse(d, n); return a.default.sendMessage(d.id, c) }; function p(e) { let { user: t, guildId: n, channelId: s, onClose: a } = e, { newestAnalyticsLocation: _ } = (0, o.default)(), { trackUserProfileAction: c } = (0, f.useUserProfileAnalyticsContext)(), [E, T] = r.useState(""), [S, p] = r.useState((0, u.toRichValue)(E)), O = r.useRef(!1); return (0, i.jsx)(d.default, { innerClassName: A.inner, editorClassName: A.editor, type: l.ChatInputTypes.USER_PROFILE, placeholder: h.default.Messages.QUICK_DM_USER.format({ name: I.default.getName(n, s, t) }), channel: m, textValue: E, richValue: S, onChange: (e, t, n) => { t !== E && (T(t), p(n)) }, focused: O.current, onFocus: () => { O.current = !0 }, onBlur: () => { O.current = !1 }, onSubmit: async e => { let { value: n } = e; try { return c({ action: "SEND_DIRECT_MESSAGE" }), await N({ userId: t.id, content: n.trim(), location: _ }), null == a || a(), { shouldClear: !0, shouldRefocus: !1 } } catch { return { shouldClear: !1, shouldRefocus: !1 } } } }) } }, 215633: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("505737"), s = n("705556"), a = n("901952"), o = n("391016"); function l(e) { let { user: t, guildId: n, channelId: l, onClose: u } = e, d = (0, r.default)(t.id, n); return (0, i.jsxs)("footer", { className: o.footer, children: [d && (0, i.jsx)(a.default, { user: t, guildId: n, channelId: l, onClose: u }), !d && (0, i.jsx)(s.default, { user: t, guildId: n, onClose: u })] }) } }, 23293: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("158776"), a = n("78675"), o = n("438163"), l = n("513099"), u = n("228168"), d = n("981631"), _ = n("170022"); function c(e) { let { user: t, displayProfile: n, guildId: c, channelId: E, onOpenProfile: I } = e, T = (0, r.useStateFromStores)([s.default], () => s.default.findActivity(t.id, e => { let { type: t } = e; return t === d.ActivityTypes.CUSTOM_STATUS })); return (0, i.jsxs)("header", { className: _.header, children: [(0, i.jsx)(a.default, { user: t, displayProfile: n, guildId: c, profileType: u.UserProfileTypes.BITE_SIZE, hasProfileEffect: (null == n ? void 0 : n.profileEffectId) != null }), (0, i.jsx)(l.default, { user: t, displayProfile: n, guildId: c, channelId: E, onOpenProfile: I }), (0, i.jsx)(o.UserProfileCustomStatusBubble, { statusActivity: T, profileType: u.UserProfileTypes.BITE_SIZE })] }) } }, 579285: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("512722"), a = n.n(s), o = n("153832"), l = n("924826"), u = n("442837"), d = n("481060"), _ = n("749210"), c = n("112724"), E = n("434404"), I = n("271383"), T = n("430824"), f = n("496675"), S = n("700785"), h = n("785717"), A = n("256226"), m = n("314172"), N = n("981631"), p = n("689938"), O = n("384878"); let C = (0, c.default)(function(e) { let { user: t, currentUser: n, guild: s, guildMember: _, userRoles: c, highestRole: E, canManageRoles: I, width: f, onAddRole: h, onRemoveRole: C, onOpenProfile: R } = e; a()(null != f, "Unexpected null width"); let g = r.useRef({}), L = (e, t) => { null != t ? g.current[e] = t : delete g.current[e] }, v = (0, u.useStateFromStores)([T.default], () => T.default.getRoles(s.id)), D = r.useMemo(() => Object.values(v).filter(e => c.includes(e.id)).sort((e, t) => { var n, i; let r = (null === (n = e.tags) || void 0 === n ? void 0 : n.guild_connections) !== null, s = (null === (i = t.tags) || void 0 === i ? void 0 : i.guild_connections) !== null; return r && !s ? 1 : !r && s ? -1 : 0 }), [v, c]), [M, y] = r.useState(D), [P, U] = r.useState(f), b = M.length < D.length, G = I && null != _, w = r.useRef(null), k = r.useRef(null); r.useLayoutEffect(() => { var e, t, n, i, r, s; let a = null !== (r = null === (t = w.current) || void 0 === t ? void 0 : null === (e = t.getBoundingClientRect()) || void 0 === e ? void 0 : e.width) && void 0 !== r ? r : 0, o = null !== (s = null === (i = k.current) || void 0 === i ? void 0 : null === (n = i.getBoundingClientRect()) || void 0 === n ? void 0 : n.width) && void 0 !== s ? s : 0, l = f - (a > 0 ? a + 4 : 0) - (o > 0 ? o + 4 : 0), u = []; for (let e = 0; e < 2; e++) { let t = 1 === e, n = 0; for (let e = u.length; e < D.length; e++) { let i = D[e], r = g.current[i.id]; if (null != r) { if (n > 0 && !t && n + r.offsetWidth > f || n > 0 && t && n + r.offsetWidth > l) break; n += r.offsetWidth + 4, u.push(i) } } } U(l), y(e => e.length !== u.length ? u : e) }, [f, D, M]); let B = r.useMemo(() => "roles-".concat((0, o.v4)()), []), V = (0, l.default)({ id: B, isEnabled: !0, scrollToStart: N.NOOP_PROMISE, scrollToEnd: N.NOOP_PROMISE, wrap: !0 }), x = D.length, F = 0 === x ? p.default.Messages.ROLE_LIST_EMPTY : p.default.Messages.ROLES_LIST.format({ numRoles: x }), H = M.map((e, r) => { var a; return (0, i.jsx)(A.default, { role: e, guildId: s.id, style: { maxWidth: r === M.length - 1 ? P : f }, disableBorderColor: !0, ref: t => L(e.id, t), onRemove: () => C(e), canRemove: I ? S.isRoleHigher(s, n.id, E, e) : (null === (a = e.tags) || void 0 === a ? void 0 : a.guild_connections) === null && t.id === n.id }, e.id) }); return (0, i.jsx)(l.ListNavigatorProvider, { navigator: V, children: (0, i.jsx)(l.ListNavigatorContainer, { children: e => { let { ref: t, ...n } = e; return (0, i.jsxs)("div", { className: O.root, "aria-label": F, ref: t, ...n, children: [H, b && (0, i.jsx)(d.Clickable, { innerRef: w, onClick: R, className: O.showMoreButton, children: (0, i.jsx)(d.Text, { variant: "text-xs/medium", children: "+".concat(D.length - M.length) }) }), G && (0, i.jsx)(m.default, { buttonRef: k, guild: s, guildMember: _, highestRole: E, onAddRole: h, compact: D.length > 0 })] }) } }) }) }); function R(e) { let { user: t, currentUser: n, guild: s, onOpenProfile: a } = e, { trackUserProfileAction: o } = (0, h.useUserProfileAnalyticsContext)(), l = (0, u.useStateFromStores)([I.default], () => I.default.getMember(s.id, t.id)), d = null == l ? void 0 : l.roles, c = null == d || 0 === d.length, T = S.getHighestRole(s, n.id), [A] = (0, u.useStateFromStoresArray)([f.default], () => [f.default.can(N.Permissions.MANAGE_ROLES, s), null != s ? f.default.getGuildVersion(s.id) : null]), m = r.useCallback(e => { var n, i; o({ action: "REMOVE_ROLE" }); let r = null !== (i = null == d ? void 0 : d.filter(t => t !== e.id)) && void 0 !== i ? i : []; (null === (n = e.tags) || void 0 === n ? void 0 : n.guild_connections) === null ? _.default.unassignGuildRoleConnection(s.id, e.id) : E.default.updateMemberRoles(s.id, t.id, r, [], [e.id]) }, [d, s.id, t.id, o]), p = r.useCallback(e => { o({ action: "ADD_ROLE" }); let n = null != d ? d : []; - 1 === n.indexOf(e) && (n = n.concat([e])), E.default.updateMemberRoles(s.id, t.id, n, [e], []) }, [d, s.id, t.id, o]); return c && !A ? null : (0, i.jsx)("div", { children: (0, i.jsx)(C, { user: t, currentUser: n, guild: s, guildMember: l, userRoles: null != d ? d : [], highestRole: T, canManageRoles: A, onAddRole: p, onRemoveRole: m, onOpenProfile: a }) }) } }, 287612: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("318374"), a = n("522289"), o = n("346656"), l = n("726059"), u = n("162267"), d = n("228168"), _ = n("182294"), c = n("689938"), E = n("391830"); function I(e) { let { user: t, onOpenProfile: n } = e, { mutualFriends: I } = (0, l.default)(t.id), { mutualGuilds: T } = (0, u.default)(t.id), f = null != I && I.length > 0, S = null != T && T.length > 0, h = f && S ? "text-xs/normal" : "text-sm/normal"; return f || S ? (0, i.jsxs)("div", { className: E.mutuals, children: [f ? (0, i.jsxs)(r.Clickable, { className: E.section, onClick: () => n(d.UserProfileSections.MUTUAL_FRIENDS), children: [(0, i.jsx)(s.default, { maxUsers: 3, users: I.map(e => { let { user: t } = e; return t }), size: _.AvatarSizes.SIZE_16, hideOverflowCount: !0, disableUsernameTooltip: !0 }), (0, i.jsx)(r.Text, { className: E.text, variant: h, color: "interactive-normal", children: c.default.Messages.USER_PROFILE_MUTUAL_FRIENDS.format({ count: I.length }) })] }) : null, f && S ? (0, i.jsx)("div", { "aria-hidden": "true", className: E.spacer }) : null, S ? (0, i.jsxs)(r.Clickable, { className: E.section, onClick: () => n(d.UserProfileSections.MUTUAL_GUILDS), children: [!f && (0, i.jsx)(a.default, { maxGuilds: 3, guilds: T.map(e => { let { guild: t } = e; return t }), size: o.default.Sizes.SMOL, hideOverflowCount: !0, disableGuildNameTooltip: !0 }), (0, i.jsx)(r.Text, { className: E.text, variant: h, color: "interactive-normal", children: c.default.Messages.USER_PROFILE_MUTUAL_GUILDS.format({ count: T.length }) })] }) : null] }) : null } }, 969835: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return D } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("727637"), l = n("100527"), u = n("906732"), d = n("680295"), _ = n("271383"), c = n("430824"), E = n("594174"), I = n("877485"), T = n("785717"), f = n("318661"), S = n("502762"), h = n("544989"), A = n("301984"), m = n("94918"), N = n("664794"), p = n("171368"), O = n("958120"), C = n("215633"), R = n("23293"), g = n("228168"), L = n("689938"); function v(e) { e.stopPropagation() } function D(e) { let { user: t, guildId: n, channelId: D, messageId: M, roleId: y, closePopout: P, setPopoutRef: U, disableUserProfileLink: b = __OVERLAY__, newAnalyticsLocations: G = [] } = e, { originalFriendingEnabled: w } = (0, I.useSimplifiedProfileFriendingExperiment)({ location: "BiteSizeProfilePopout" }), { analyticsLocations: k } = (0, u.default)([...G, l.default.BITE_SIZE_PROFILE_POPOUT]), B = (0, T.useTrackUserProfileAction)({ layout: "BITE_SIZE_POPOUT", userId: t.id, guildId: n, channelId: D, messageId: M, roleId: y }), V = (0, s.useStateFromStores)([E.default], () => E.default.getCurrentUser()), x = (0, s.useStateFromStores)([c.default], () => null != n ? c.default.getGuild(n) : null), F = (0, s.useStateFromStores)([_.default], () => null != n ? _.default.getMember(n, t.id) : null), H = r.useRef(null), Y = (0, f.default)(t.id, n), j = (0, o.default)(H); r.useEffect(() => { null == U || U(null == H ? void 0 : H.current) }, [H, U]); let W = e => { null == P || P(), (0, p.openUserProfileModal)({ sourceAnalyticsLocations: k, userId: t.id, guildId: n, channelId: D, messageId: M, roleId: y, ...e }) }; return null == V ? null : (0, i.jsx)(u.AnalyticsLocationProvider, { value: k, children: (0, i.jsx)(T.UserProfileAnalyticsProvider, { layout: "BITE_SIZE_POPOUT", userId: t.id, guildId: n, channelId: D, messageId: M, roleId: y, shouldTrackViewOnMount: null == F || null != F.fullProfileLoadedTimestamp, children: (0, i.jsxs)(a.Dialog, { ref: H, "aria-label": t.username, onClick: v, onContextMenu: v, children: [(0, i.jsxs)(S.default, { user: t, displayProfile: Y, profileType: g.UserProfileTypes.BITE_SIZE, children: [(0, i.jsxs)(h.default, { profileType: g.UserProfileTypes.BITE_SIZE, children: [(0, i.jsx)(m.default, { user: t, guildId: n, channelId: D, onClose: P }), (0, i.jsx)(A.default, { user: t, acceptFriendRequestColor: w ? a.tokens.colors.BUTTON_OUTLINE_POSITIVE_BORDER : null }), (0, i.jsx)(N.default, { user: t, profileType: g.UserProfileTypes.BITE_SIZE, guildId: n, viewProfileItem: (0, i.jsx)(a.MenuItem, { id: "view-profile", label: L.default.Messages.VIEW_FULL_PROFILE, action: () => { B({ action: "PRESS_VIEW_PROFILE", analyticsLocations: k }), W() } }) })] }), (0, i.jsx)(R.default, { user: t, displayProfile: Y, guildId: n, channelId: D, onOpenProfile: b ? void 0 : W }), (0, i.jsx)(O.default, { user: t, currentUser: V, displayProfile: Y, guild: x, isHovering: j, onOpenProfile: W, channelId: D, onClose: P }), (0, i.jsx)(C.default, { user: t, guildId: n, channelId: D, onClose: P })] }), (null == Y ? void 0 : Y.profileEffectId) != null && (0, i.jsx)(d.default, { profileEffectId: null == Y ? void 0 : Y.profileEffectId, isHovering: j })] }) }) }) } }, 248345: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("717881"), a = n("906732"), o = n("199902"), l = n("785717"), u = n("221292"), d = n("659101"), _ = n("981631"), c = n("40226"); function E(e) { let { activity: t, user: n, guild: E, channelId: I, onClose: T, analyticsParams: f } = e, { analyticsLocations: S } = (0, a.default)(), { trackUserProfileAction: h, ...A } = (0, l.useUserProfileAnalyticsContext)(), m = (0, r.useStateFromStores)([o.default], () => null != o.default.getAnyStreamForUser(n.id)); return (0, i.jsx)(d.default, { children: (0, i.jsx)(s.default, { type: s.UserActivityTypes.USER_POPOUT_V2, activity: t, className: c.activity, user: n, guildId: null == E ? void 0 : E.id, channelId: I, source: _.AnalyticsLocations.PROFILE_POPOUT, onOpenGameProfile: T, onAction: () => { h({ action: "JOIN_ACTIVITY" }), (0, u.trackUserProfileActivityJoined)({ activityType: m ? _.ActivityTypes.STREAMING : null == t ? void 0 : t.type, activityName: null == t ? void 0 : t.name, activityPlatform: null == t ? void 0 : t.platform, activitySessionId: null == t ? void 0 : t.session_id, applicationId: null == t ? void 0 : t.application_id, analyticsLocations: S, ...A }), null == T || T() }, actionColor: c.buttonColor, analyticsParams: f }) }) } }, 337125: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("245561"), a = n("873572"), o = n("659101"), l = n("689938"), u = n("730308"), d = n("379916"); function _(e) { var t; let { user: n, guildId: _ } = e, { botUpgraded: c, activeSubscriptionListing: E } = (0, a.default)({ user: n, guildId: _ }), I = null == E ? void 0 : null === (t = E.sku_benefits) || void 0 === t ? void 0 : t.benefits; return null != _ && c && null != I && 0 !== I.length ? (0, i.jsxs)(o.default, { children: [(0, i.jsx)(r.Heading, { variant: "eyebrow", className: d.title, children: l.default.Messages.BOT_PROFILE_BENEFITS_HEADING }), (0, i.jsx)("div", { className: u.benefitsContainer, children: I.map((e, t) => (0, i.jsx)(s.default, { showsDescription: !1, emojiContainerClassName: u.emojiContainer, nameTextVariant: "text-sm/normal", nameTextColor: "text-normal", benefit: e }, "".concat(e.name).concat(t))) })] }) : null } }, 19836: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return N } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("2052"), u = n("580552"), d = n("594174"), _ = n("346656"), c = n("466111"), E = n("74538"), I = n("588822"), T = n("659101"), f = n("981631"), S = n("689938"), h = n("404737"), A = n("379916"); function m(e) { let { guildName: t } = e; return (0, i.jsxs)("div", { className: h.guildMemberProfileTooltip, children: [(0, i.jsx)(c.default, { className: h.guildMemberProfileTooltipNitroWheel }), S.default.Messages.GUILD_IDENTITY_BIO_TOAST.format({ guildName: t })] }) } function N(e) { let { guild: t, bio: r, hidePersonalInformation: c, isUsingGuildBio: N, lastSection: p = !1, animateOnHover: O = !1, isHovering: C = !1, lineClamp: R, userId: g } = e, { location: L } = (0, l.useAnalyticsContext)(), v = (0, a.useStateFromStores)([d.default], () => d.default.getCurrentUser()), D = E.default.canUsePremiumGuildMemberProfile(v), M = (0, u.default)(g); return (c || null == r || "" === r) && !M ? null : (0, i.jsxs)(T.default, { lastSection: p, children: [(0, i.jsxs)(o.Heading, { variant: "eyebrow", className: A.title, children: [S.default.Messages.USER_POPOUT_ABOUT_ME, null != t && N && (0, i.jsx)(o.Tooltip, { color: o.Tooltip.Colors.NESTED, tooltipClassName: h.aboutMeGuildIconTooltip, "aria-label": S.default.Messages.GUILD_IDENTITY_BIO_TOAST.format({ guildName: t.name }), text: (0, i.jsx)(m, { guildName: t.name }), children: e => (0, i.jsx)(_.default, { ...e, onClick: () => { var t; null == (t = e.onClick) || t(), null != v && !D && (0, o.openModalLazy)(async () => { let { default: e } = await n.e("84509").then(n.bind(n, "933696")); return t => (0, i.jsx)(e, { ...t, source: { ...L, object: f.AnalyticsObjects.GUILD_ICON } }) }) }, guild: t, size: _.default.Sizes.SMOL, className: s()(h.aboutMeGuildIcon, { [h.nonPremiumHoverState]: !D }) }) })] }), (0, i.jsx)(I.default, { userBio: r, animateOnHover: O, isHovering: C, lineClamp: R, userId: g })] }) } }, 207570: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("970321"), o = n("886491"), l = n("621853"), u = n("873572"), d = n("520978"), _ = n("659101"), c = n("479968"); function E(e) { var t; let { user: n, guildId: s } = e, o = (0, r.useStateFromStores)([l.default], () => { var e; return null === (e = l.default.getUserProfile(n.id)) || void 0 === e ? void 0 : e.application }), u = (0, a.useAppStorefrontAvailable)(null !== (t = null == o ? void 0 : o.id) && void 0 !== t ? t : ""); return null == o ? null : (0, i.jsx)(_.default, { children: (0, i.jsxs)("div", { className: c.buttonsContainer, children: [(0, i.jsx)(d.default, { application: o, className: c.button }), u && null != s && (0, i.jsx)(I, { application: o, user: n, guildId: s })] }) }) } function I(e) { var t; let { application: r, user: a, guildId: l } = e, d = null !== (t = (0, u.default)({ user: a, guildId: l }).subscriptionGroupListing) && void 0 !== t ? t : void 0; return (0, i.jsx)(o.StorefrontButton, { onClick: () => (function(e, t, r) { (0, s.openModalLazy)(async () => { let { default: s } = await Promise.all([n.e("49237"), n.e("99387"), n.e("29549"), n.e("31605"), n.e("77172"), n.e("98538"), n.e("20869")]).then(n.bind(n, "7225")); return n => (0, i.jsx)(s, { transitionState: n.transitionState, onClose: n.onClose, appId: e.id, subscriptionGroupListing: t, guildId: r }) }) })(r, d, l), className: c.button, size: s.ButtonSizes.SMALL }) } }, 77097: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("749210"), d = n("906732"), _ = n("977392"), c = n("706454"), E = n("246946"), I = n("259580"), T = n("785717"), f = n("621853"), S = n("335191"), h = n("171368"), A = n("659101"), m = n("228168"), N = n("981631"), p = n("689938"), O = n("580737"), C = n("379916"); function R(e) { var t, n; let s, R, { userId: g, channelId: L, guild: v, theme: D, onClose: M, className: y } = e, { analyticsLocations: P } = (0, d.default)(), { messageId: U, roleId: b } = (0, T.useUserProfileAnalyticsContext)(), G = (0, _.default)(v, g, L), [w, k] = r.useState(new Set), B = (0, o.useStateFromStores)([f.default], () => f.default.getUserProfile(g)), V = null !== (t = null == B ? void 0 : B.connectedAccounts) && void 0 !== t ? t : [], x = null !== (n = null == B ? void 0 : B.applicationRoleConnections) && void 0 !== n ? n : [], F = (0, o.useStateFromStores)([E.default], () => E.default.hidePersonalInformation), H = (0, o.useStateFromStores)([c.default], () => c.default.locale); if (r.useEffect(() => { (null == v ? void 0 : v.id) != null && (null == G ? void 0 : G.id) != null && u.default.fetchGuildRoleConnectionsEligibility(v.id, G.id).then(e => { let t = new Set; for (let n of e) for (let { connection_type: e } of n) t.add(e); k(t) }) }, [null == v ? void 0 : v.id, null == G ? void 0 : G.id]), F || null == G) return null; let Y = Array.from(w).map(e => { let t = V.find(t => t.type === e); return null == t ? null : (0, i.jsx)(S.ConnectedUserAccount, { connectedAccount: t, theme: D, locale: H, userId: g }, "".concat(t.type, ":").concat(t.id)) }).filter(e => null != e); return (Y.length > 0 && (s = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.Heading, { variant: "eyebrow", className: C.title, children: p.default.Messages.CONNECTIONS }), (0, i.jsxs)("div", { className: a()(O.connectionsContainer, y), children: [Y, (0, i.jsxs)(l.Clickable, { onClick: function() { (0, h.openUserProfileModal)({ userId: g, channelId: L, guildId: null == v ? void 0 : v.id, messageId: U, roleId: b, section: m.UserProfileSections.USER_INFO_CONNECTIONS, sourceAnalyticsLocations: P, analyticsLocation: { section: N.AnalyticsSections.PROFILE_POPOUT } }), null == M || M() }, className: O.connections, children: [(0, i.jsx)(l.Text, { variant: "text-md/semibold", color: "interactive-active", className: O.connectionsText, children: p.default.Messages.CONNECTIONS_ROLE_POPOUT_VIEW_ALL }), (0, i.jsx)(I.default, { direction: I.default.Directions.RIGHT, className: O.connectionsCaret })] })] })] })), x.length > 0 && (R = (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.Heading, { variant: "eyebrow", className: C.title, children: p.default.Messages.APPS }), (0, i.jsx)("div", { className: a()(O.connectionsContainer, y), children: x.map(e => (0, i.jsx)(S.ConnectedApplicationUserRoleAccount, { applicationRoleConnection: e, locale: H }, e.application.id)) })] })), null == s && null == R) ? null : (0, i.jsxs)(A.default, { children: [R, s] }) } }, 538564: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("427217"), s = n("659101"), a = n("812780"); function o(e) { let { customStatusActivity: t, className: n, animate: o } = e; return null == t ? null : (0, i.jsx)(s.default, { className: n, children: (0, i.jsx)(r.default, { activity: t, className: a.customStatus, animate: o, emojiClassName: a.customStatusEmoji, soloEmojiClassName: a.customStatusSoloEmoji, textClassName: a.customStatusText }) }) } }, 489642: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("873546"), l = n("481060"), u = n("648996"), d = n("51144"), _ = n("785717"), c = n("659101"), E = n("689938"), I = n("846389"), T = n("390965"), f = n("752266"), S = n("390820"), h = n("230797"), A = n("612830"), m = n("293173"); let N = [n("198087"), T, h, S, A, f, m]; function p(e) { let { userId: t } = e, [n, s] = r.useState(!1); return r.useLayoutEffect(() => { !n && s(!0) }, [n]), (0, i.jsx)("div", { className: I.wumpusWrapper, children: (0, i.jsxs)("div", { className: a()(I.wumpus, { [I.wumpusShown]: n }), children: [(0, i.jsx)("img", { className: I.wumpusImage, alt: E.default.Messages.IMG_ALT_ICON.format({ name: E.default.Messages.WUMPUS }), src: N[parseInt(t.slice(-6), 10) % N.length] }), (0, i.jsxs)(l.Text, { variant: "text-sm/normal", children: [E.default.Messages.USER_POPOUT_WUMPUS_TOOLTIP, "???"] })] }) }) } function O(e) { let { user: t, setNote: n, canDM: r, onClose: s } = e, { trackUserProfileAction: a } = (0, _.useUserProfileAnalyticsContext)(), l = r && (0, d.isNewUser)(t) && !t.bot; return (0, i.jsxs)(c.default, { className: I.section, lastSection: !0, children: [l && r ? (0, i.jsx)(p, { userId: t.id }) : null, r ? (0, i.jsx)(u.default, { className: I.messageInputContainer, inputClassName: I.messageInput, user: t, autoFocus: !o.isMobile && !n, onSend: () => { a({ action: "SEND_DIRECT_MESSAGE" }), null == s || s() } }) : null] }) } }, 319300: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("260034"), s = n("900927"), a = n("659101"), o = n("689938"), l = n("379916"); function u(e) { let { userId: t, guildId: n } = e; return (0, i.jsx)(a.default, { children: (0, i.jsxs)("div", { children: [(0, i.jsx)(r.Heading, { variant: "eyebrow", className: l.title, children: o.default.Messages.USER_PROFILE_MEMBER_SINCE }), (0, i.jsx)(s.default, { userId: t, guildId: n, textClassName: l.body })] }) }) } }, 591600: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("666520"), a = n("785717"), o = n("659101"), l = n("689938"), u = n("917943"), d = n("379916"); function _(e) { let { user: t, setNote: n, autoFocus: _, lastSection: c } = e, { trackUserProfileAction: E } = (0, a.useUserProfileAnalyticsContext)(); return (0, i.jsxs)(o.default, { lastSection: c, children: [(0, i.jsx)(r.Heading, { variant: "eyebrow", className: d.title, children: l.default.Messages.NOTE }), (0, i.jsx)(s.default, { userId: t.id, autoFocus: n || _, className: u.note, onUpdate: () => E({ action: "SET_NOTE" }) }, "note")] }) } }, 579729: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }); var i = n("735250"), r = n("470079"), s = n("481060"), a = n("367907"), o = n("10718"), l = n("69626"), u = n("556084"), d = n("626135"), _ = n("659101"), c = n("981631"), E = n("689938"), I = n("648659"), T = n("379916"); function f(e) { let { applicationId: t, commandIds: n, channel: f, guildId: S, onClick: h } = e; (0, u.usePrivateChannelIntegrationState)({ channelId: f.id }); let { commands: A } = o.useCommandsForApplication(f, t, n), m = r.useMemo(() => null == A ? void 0 : A.filter(e => !0 !== e.nsfw), [A]), N = r.useCallback(e => { null == h || h(), d.default.track(c.AnalyticEvents.POPULAR_APPLICATION_COMMAND_CLICKED, { application_id: t, command_id: e, guild_id: S, ...(0, a.collectChannelAnalyticsMetadataFromId)(f.id) }) }, [t, f.id, S, h]); return null == m || 0 === m.length ? null : (0, i.jsxs)(_.default, { children: [(0, i.jsx)(s.Heading, { variant: "eyebrow", className: T.title, children: E.default.Messages.BOT_PROFILE_SLASH_COMMANDS }), (0, i.jsx)("ul", { className: I.popularApplicationCommandsList, children: m.map(e => (0, i.jsx)("li", { children: (0, i.jsx)(l.CommandClickable, { commandId: e.id, commandName: e.displayName, commandDescription: e.displayDescription, onClick: N, guildId: S, channelId: f.id }) }, e.id)) })] }) } }, 302316: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("943209"), a = n("556084"), o = n("659101"), l = n("689938"), u = n("39198"), d = n("379916"); function _(e) { let { applicationId: t, channelId: n } = e, { installedIntegrations: _, fetched: c } = (0, a.usePrivateChannelIntegrationState)({ channelId: n }); return c && void 0 !== _.find(e => e.application.id === t) ? (0, i.jsxs)(o.default, { children: [(0, i.jsx)(r.Heading, { variant: "eyebrow", className: d.title, children: l.default.Messages.BOT_PROFILE_MANAGE_PRIVATE_CHANNEL_INTEGRATION }), (0, i.jsx)(r.Button, { onClick: () => (0, s.deletePrivateChannelIntegration)(n, t), size: r.Button.Sizes.ICON, color: r.Button.Colors.RED, look: r.Button.Looks.LINK, className: u.button, children: l.default.Messages.BOT_PROFILE_REMOVE_PRIVATE_CHANNEL_INTEGRATION })] }) : null } }, 186395: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("412899"), l = n("659101"), u = n("689938"), d = n("559567"), _ = n("379916"); function c(e) { let { user: t, guild: n, guildMember: r, showBorder: c } = e; return null == n || null == r ? null : (0, i.jsxs)(l.default, { children: [(0, i.jsx)(a.Heading, { variant: "eyebrow", className: _.title, children: u.default.Messages.ROLES_LIST.format({ numRoles: r.roles.length }) }), (0, i.jsx)(o.default, { roleClassName: s()(d.rolePill, { [d.rolePillBorder]: c }), className: d.roles, guild: n, user: t, userRoles: r.roles, disableBorderColor: !0 }, "roles")] }) } }, 584045: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("129861"), u = n("954138"), d = n("979264"), _ = n("969832"), c = n("51144"), E = n("659101"), I = n("981631"), T = n("689938"), f = n("614076"); function S(e) { let { user: t, shouldCopyOnClick: n, nickname: s, pronouns: S, usernameIcon: h, identityCTA: A, className: m, isTryItOut: N = !1, lastSection: p } = e, O = (0, u.default)("username"), C = r.useMemo(() => ({ source: I.AnalyticsSections.PROFILE_POPOUT, tagUserId: t.id }), [t.id]); return (0, i.jsxs)(E.default, { className: a()(f.container, m), lastSection: p, children: [(0, i.jsxs)("div", { className: n ? f.copiableNameTag : void 0, children: [(0, i.jsx)(_.CopiableField, { className: f.copiableField, copyMetaData: "User Tag", copyTooltip: T.default.Messages.ACCOUNT_CLICK_TO_COPY, copyValue: c.default.getUserTag(t, { decoration: "never", identifiable: "always" }), showCopyIcon: !0, disableCopy: !n, children: (0, i.jsxs)("div", { className: f.userText, children: [null != s ? (0, i.jsx)(o.Heading, { variant: "heading-lg/semibold", className: f.nickname, children: s }) : null, (0, i.jsx)(l.default, { usernameIcon: h, user: t, forceUsername: !0, forcePomelo: N, className: null == s ? f.userTagNoNickname : f.userTagWithNickname, usernameClass: null == s ? f.userTagUsernameNoNickname : f.userTagUsernameBase, discriminatorClass: null == s ? f.userTagDiscriminatorNoNickname : f.discrimBase, botClass: null == s ? f.headerBotTag : f.headerBotTagWithNickname }), A] }) }), null != S && "" !== S && (0, i.jsx)(o.Tooltip, { text: T.default.Messages.USER_PROFILE_PRONOUNS, children: e => (0, i.jsx)(o.Text, { ...e, variant: "text-sm/normal", className: f.pronouns, children: S }) })] }), O && (0, i.jsx)("div", { className: f.clanTag, children: (0, i.jsx)(d.default, { userId: t.id, inline: !1, profileViewedAnalytics: C }) })] }) } }, 664202: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useShouldShowUserPopoutCollectiblesUpsell: function() { return f } }), n("47120"); var i = n("470079"), r = n("512722"), s = n.n(r), a = n("399606"), o = n("524437"), l = n("232567"), u = n("634894"), d = n("211242"), _ = n("410154"), c = n("243778"), E = n("594174"), I = n("318661"), T = n("436478"); let f = e => { let { popoutUser: t, source: n, guildId: r } = e, f = "useShouldShowUserPopoutCollectiblesUpsell"; (0, u.useTriggerDebuggingAA)({ location: f + "auto on", autoTrackExposure: !0 }), (0, u.useTriggerDebuggingAA)({ location: f + "auto off", autoTrackExposure: !1 }); let S = (0, _.default)(f), { upsellSource: h } = (0, T.useUserPopoutCollectiblesUpsellStore)(), A = (0, a.useStateFromStores)([E.default], () => E.default.getCurrentUser()); s()(null != A, "currentUser should not be null"); let m = (0, d.useBlockedPaymentsConfig)(), N = (0, I.default)(A.id, r), p = (0, I.default)(t.id, r); i.useEffect(() => { null == N && (0, l.fetchProfile)(A.id) }, [N, A]); let O = S !== _.CollectiblesShopMarketingVariants.DEFAULT && (null == A ? void 0 : A.id) !== t.id && !m && !(null != h && h !== n), C = O && (null == A ? void 0 : A.avatarDecoration) == null && (null == t ? void 0 : t.avatarDecoration) != null, R = O && null != N && null == N.profileEffectId && (null == p ? void 0 : p.profileEffectId) != null, [g, L] = (0, c.useSelectedDismissibleContent)((C, []), void 0, !0); return { shouldShow: g === o.DismissibleContent.SHOP_FOR_ALL_USER_POPOUT_UPSELL, canShowAvatarDecorationUpsell: C, canShowProfileEffectUpsell: R, onDismiss: L } } }, 204197: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("470079"), r = n("481060"), s = n("1585"), a = n("125988"), o = n("252532"); function l(e) { let { user: t, guildId: n, size: l, showPending: u = !1, showTryItOut: d = !1, animateOnHover: _ = !1, avatarDecorationOverride: c, avatarOverride: E } = e, { avatarSrc: I, isAvatarAnimating: T, eventHandlers: f } = (0, o.useAnimatedAvatarSrc)({ user: t, guildId: n, size: (0, r.getAvatarSize)(l), showPending: u, animateOnHover: _, avatarOverride: E }), { avatarPlaceholderSrc: S, avatarDecorationSrc: h, eventHandlers: A } = (0, a.default)({ user: t, guildId: null != n ? n : void 0, size: (0, s.getDecorationSizeForAvatarSize)(l), showPending: u, animateOnHover: _, avatarDecorationOverride: c, showTryItOut: d }), m = i.useCallback(() => { f.onMouseEnter(), A.onMouseEnter() }, [f, A]); return { avatarPlaceholderSrc: S, avatarDecorationSrc: h, avatarSrc: I, isAnimating: T, eventHandlers: { onMouseEnter: m, onMouseLeave: i.useCallback(() => { f.onMouseLeave(), A.onMouseLeave() }, [f, A]) } } } }, 888778: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BannerLoadingStatus: function() { return i }, default: function() { return l } }), n("47120"); var i, r, s = n("470079"), a = n("695346"), o = n("768581"); function l(e) { let { displayProfile: t, size: n, canAnimate: i, overrideBannerSrc: r } = e, l = a.GifAutoPlay.getSetting(), u = null != r ? r : null == t ? void 0 : t.getBannerURL({ size: n, canAnimate: i }), [d, _] = (0, s.useState)((null == t ? void 0 : t.banner) == null ? 2 : 0); return (0, s.useEffect)(() => { if (null == u || 0 !== d) return; _(1); let e = new Image; e.src = u, e.onload = () => _(2) }, [u, d]), (0, s.useEffect)(() => { if (l) return; let e = null != r ? r : null == t ? void 0 : t.getBannerURL({ size: n, canAnimate: !0 }); if (null != e && !!(0, o.isAnimatedImageURL)(e)) new Image().src = e }, [l, t, n, r]), { bannerSrc: u, status: d } }(r = i || (i = {}))[r.SHOULD_LOAD = 0] = "SHOULD_LOAD", r[r.LOADING = 1] = "LOADING", r[r.COMPLETE = 2] = "COMPLETE" }, 726059: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i = n("470079"), r = n("392711"), s = n("442837"), a = n("881052"), o = n("699682"), l = n("81897"), u = n("800599"), d = n("621853"), _ = n("484459"); function c(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], [n, c] = (0, s.useStateFromStoresArray)([d.default], () => [d.default.getMutualFriends(e), d.default.isFetchingProfile(e)]), E = (0, l.default)(), [I, T] = (0, i.useState)(null), f = t && null == I && !c && null == n; (0, i.useEffect)(() => { if (!!f)(async () => { try { await (0, _.default)(e, void 0, { withMutualFriends: !0, abortSignal: E }) } catch (e) { T(new a.APIError(e)) } })() }, [f, e, E]); let S = (0, s.useStateFromStores)([u.default], () => u.default.getUserAffinitiesMap()), h = (0, i.useMemo)(() => null == n ? null : n.length < 2 ? n : (0, r.sortBy)(n, e => { var t, n; let { user: i } = e; return -((null !== (n = null === (t = S.get(i.id)) || void 0 === t ? void 0 : t.affinity) && void 0 !== n ? n : -1) * 1) }), [n, S]), A = (0, o.default)(h); return { mutualFriends: null != h ? h : A, isFetching: c } } }, 162267: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("47120"); var i = n("470079"), r = n("392711"), s = n("442837"), a = n("881052"), o = n("699682"), l = n("81897"), u = n("771845"), d = n("621853"), _ = n("484459"); function c(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], [n, c] = (0, s.useStateFromStoresArray)([d.default], () => [d.default.getMutualGuilds(e), d.default.isFetchingProfile(e)]), E = (0, l.default)(), [I, T] = (0, i.useState)(null), f = t && null == I && !c && null == n; (0, i.useEffect)(() => { if (!!f)(async () => { try { await (0, _.default)(e, void 0, { withMutualGuilds: !0, abortSignal: E }) } catch (e) { T(new a.APIError(e)) } })() }, [f, e, E]); let S = (0, s.useStateFromStores)([u.default], () => u.default.getFlattenedGuildIds()), h = (0, i.useMemo)(() => { if (null == n) return null; if (n.length < 2) return n; let e = Object.fromEntries(S.map((e, t) => [e, t])); return (0, r.sortBy)(n, t => { var n; let { guild: i } = t; return null !== (n = e[i.id]) && void 0 !== n ? n : S.length }) }, [n, S]), A = (0, o.default)(h); return { mutualGuilds: null != h ? h : A, isFetching: c } } }, 138655: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }), n("47120"); var i = n("470079"), r = n("120356"), s = n.n(r), a = n("866442"), o = n("442837"), l = n("780384"), u = n("607070"), d = n("629935"), _ = n("168551"), c = n("792125"), E = n("168631"); let I = Object.freeze({ "--profile-gradient-primary-color": "var(--background-secondary-alt)", "--profile-gradient-secondary-color": "var(--background-secondary-alt)", "--profile-gradient-overlay-color": "rgba(0, 0, 0, 0)", "--profile-gradient-button-color": "var(--button-secondary-background)", "--profile-avatar-border-color": "var(--background-secondary-alt)", "--profile-body-background-color": "var(--background-floating)", "--profile-body-background-hover": "var(--background-modifier-hover)", "--profile-body-divider-color": "var(--background-modifier-accent)", "--profile-body-border-color": "var(--border-faint)", "--profile-message-input-border-color": "var(--background-modifier-accent)", "--profile-note-background-color": "var(--background-tertiary)", "--profile-role-pill-background-color": "var(--background-secondary-alt)", "--profile-role-pill-border-color": "var(--interactive-normal)" }); function T(e) { let { theme: t, primaryColor: n, secondaryColor: r } = e, [T, f] = (0, o.useStateFromStoresArray)([u.default], () => [u.default.desaturateUserColors, u.default.syncProfileThemeWithUserTheme]), S = (0, E.useProfileThemeValues)(t), h = (0, E.useAvatarBorderColor)(t, n, f), A = (0, E.useDividerColor)(t, n), m = (0, E.useMessageInputBorderColor)(t, r), N = f ? null == S ? void 0 : S.overlaySyncedWithUserTheme : null == S ? void 0 : S.overlay; return { profileThemeStyle: (0, i.useMemo)(() => { if (null == n || null == r || null == S || null == h || null == A || null == m || null == N) return I; let e = (e, t) => (0, a.int2hsl)(e, T, null, t); return { "--profile-gradient-primary-color": e(n), "--profile-gradient-secondary-color": e(r), "--profile-gradient-overlay-color": N, "--profile-gradient-button-color": e((0, E.calculateButtonColor)(n)), "--profile-avatar-border-color": e(h), "--profile-body-background-color": S.sectionBox, "--profile-body-background-hover": S.profileBodyBackgroundHover, "--profile-body-divider-color": e(A, S.dividerOpacity), "--profile-body-border-color": e(A, .12), "--profile-message-input-border-color": e(m), "--profile-note-background-color": S.noteBackgroundColor, "--profile-role-pill-background-color": S.rolePillBackgroundColor, "--profile-role-pill-border-color": S.rolePillBorderColor, ...(0, d.getThemeColorMixValues)({ enabled: !0, primaryColor: n, secondaryColor: r, isDarkTheme: (0, l.isThemeDark)(t), textMixAmount: 70 }) } }, [n, r, S, h, A, m, N, t, T]), profileThemeClassName: s()((0, c.getThemeClass)(t), { [_.CUSTOM_THEME_BACKGROUND_CLASS_NAME]: null != n, "custom-profile-theme": null != n }) } } }, 252532: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useAnimatedAvatarSrc: function() { return d } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("607070"), a = n("654904"), o = n("271383"), l = n("451478"), u = n("166625"); function d(e) { let { user: t, guildId: n, size: d, showPending: _ = !1, animateOnHover: c = !1, avatarOverride: E } = e, [I, T] = i.useState(!1), f = (0, r.useStateFromStores)([s.default], () => s.default.useReducedMotion), S = (0, r.useStateFromStores)([l.default], () => l.default.isFocused()) && (I || !f && !c), { pendingAvatar: h } = (0, u.default)({}), A = (0, r.useStateFromStores)([o.default], () => null != n && null != t ? o.default.getMember(n, t.id) : null), m = i.useMemo(() => null != t ? (0, a.getPreviewAvatar)(_ ? null != E ? E : h : void 0, A, t, { canAnimate: S, size: d }) : void 0, [_, h, A, t, S, d, E]), N = i.useCallback(() => T(!0), []); return { avatarSrc: m, isAvatarAnimating: S, eventHandlers: { onMouseEnter: N, onMouseLeave: i.useCallback(() => T(!1), []) } } } }, 454175: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("570140"), s = n("314897"), a = n("70956"), o = n("385845"), l = n("981631"); let u = 5 * a.default.Millis.MINUTE; async function d(e, t) { r.default.dispatch({ type: "USER_RECENT_GAMES_FETCH_START", userId: e }); try { let n = await i.HTTP.get({ url: l.Endpoints.USER_RECENT_GAMES(e), signal: t }); r.default.dispatch({ type: "USER_RECENT_GAMES_FETCH_SUCCESS", userId: e, recentGames: n.body.recent_games }) } catch (t) { r.default.dispatch({ type: "USER_RECENT_GAMES_FETCH_ERROR", userId: e }) } } async function _(e, t, n) { let i = o.default.getLastFetchTimestamp(e); if (!(null != i && Date.now() - i < u)) { if (n) { let n = s.default.getId(), i = o.default.getLastFetchTimestamp(n); n !== e && null == i && await d(n, t) } await d(e, t) } } t.default = { fetchUserRecentGames: _, updateUserRecentGamesLocal: function(e, t) { r.default.dispatch({ type: "USER_RECENT_GAMES_UPDATE_LOCAL", applicationId: e, duration: t }) } } }, 602992: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useUserIsRecentGamesExperimentApiEnabled: function() { return r } }); let i = (0, n("818083").createExperiment)({ id: "2024-03_user_recent_games_api", kind: "user", label: "Recent Games API", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Enabled", config: { enabled: !0 } }] }), r = e => { let { location: t } = e; return i.useExperiment({ location: t }).enabled } }, 619914: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isUserRecentGamesExperimentEnabled: function() { return r }, useUserIsRecentGamesExperimentEnabled: function() { return s } }); let i = (0, n("818083").createExperiment)({ id: "2024-03_user_recent_games", kind: "user", label: "Recent Games", defaultConfig: { enabled: !1 }, treatments: [{ id: 0, label: "Control", config: { enabled: !1 } }, { id: 1, label: "Enabled", config: { enabled: !0 } }, { id: 4, label: "Enabled", config: { enabled: !0 } }] }); function r(e) { let { location: t, autoTrackExposure: n = !1 } = e; return i.getCurrentConfig({ location: t }, { autoTrackExposure: n }).enabled } function s(e) { let { location: t, autoTrackExposure: n = !1 } = e; return i.useExperiment({ location: t }, { autoTrackExposure: n }).enabled } }, 385845: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("512722"), l = n.n(o), u = n("127437"), d = n("442837"), _ = n("570140"), c = n("314897"), E = n("77498"), I = n("709054"); let T = new Map, f = new Set, S = new Set; class h extends(i = d.default.Store) { getRecentGames(e) { var t; return null === (t = T.get(e)) || void 0 === t ? void 0 : t.recentGames } getLastFetchTimestamp(e) { var t; return null === (t = T.get(e)) || void 0 === t ? void 0 : t.lastFetchTimestampMs } isFetching(e) { return f.has(e) } isError(e) { return S.has(e) } } a = "UserRecentGamesStore", (s = "displayName") in(r = h) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new h(_.default, { CONNECTION_OPEN: function() { T = new Map, f = new Set, S = new Set }, USER_RECENT_GAMES_FETCH_START: function(e) { let { userId: t } = e; S.delete(t), f.add(t) }, USER_RECENT_GAMES_FETCH_SUCCESS: function(e) { let { userId: t, recentGames: n } = e; f.delete(t), T.set(t, { recentGames: n.map(e => ({ applicationId: e.application.id, duration: e.duration, lastSessionId: e.last_session_id, isNew: e.is_new })).sort((e, t) => I.default.compare(t.lastSessionId, e.lastSessionId)), lastFetchTimestampMs: Date.now() }) }, USER_RECENT_GAMES_FETCH_ERROR: function(e) { let { userId: t } = e; f.delete(t), S.add(t) }, USER_RECENT_GAMES_UPDATE_LOCAL: function(e) { let { applicationId: t, duration: n } = e; if (null == E.default.getDetectableGame(t) || n < u.UserGameApplicationSessionDuration.MIN_DURATION_SECS) return !1; ! function(e, t) { var n, i; let r = T.get(e); if (null == r) return; let s = [], a = null; if (r.recentGames.forEach(e => { e.applicationId === t.applicationId ? a = e : s.push(e) }), null == a) return; let o = (n = a, i = t, l()(n.applicationId === i.applicationId, "[UserRecentGamesStore] Games must have same application for merge."), { applicationId: n.applicationId, duration: n.duration + i.duration, lastSessionId: I.default.compare(n.lastSessionId, i.lastSessionId) > 0 ? n.lastSessionId : i.lastSessionId, isNew: n.isNew || i.isNew }); T.set(e, { lastFetchTimestampMs: Date.now(), recentGames: [o, ...s] }) }(c.default.getId(), { applicationId: t, duration: n, lastSessionId: I.default.fromTimestamp(Date.now()), isNew: !1 }) } }) }, 566454: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getLastPlayedTimestamp: function() { return l }, getTimePlayedLastWeek: function() { return u } }); var i = n("913527"), r = n.n(i), s = n("70956"), a = n("709054"), o = n("689938"); function l(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = r()(a.default.extractTimestamp(e.lastSessionId)), i = r()().diff(n, "s"); if (i > 7 * s.default.Seconds.DAY) { let e = Math.round(i / (7 * s.default.Seconds.DAY)); return t ? o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_WEEKS_AGO_SHORT.format({ count: e }) : o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_WEEKS_AGO.format({ count: e }) } if (i > s.default.Seconds.DAY) { let e = Math.round(i / s.default.Seconds.DAY); return t ? o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_DAYS_AGO_SHORT.format({ count: e }) : o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_DAYS_AGO.format({ count: e }) } if (i > s.default.Seconds.HOUR) { let e = Math.round(i / s.default.Seconds.HOUR); return t ? o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_HOURS_AGO_SHORT.format({ count: e }) : o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_HOURS_AGO.format({ count: e }) } else { if (!(i > s.default.Seconds.MINUTE)) return t ? o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_SECONDS_AGO_SHORT.format({ count: i }) : o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_SECONDS_AGO.format({ count: i }); let e = Math.round(i / s.default.Seconds.MINUTE); return t ? o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_MINUTES_AGO_SHORT.format({ count: e }) : o.default.Messages.USER_RECENT_GAMES_LAST_PLAYED_MINUTES_AGO.format({ count: e }) } } function u(e) { let t = e.duration; if (t > s.default.Seconds.HOUR) { let e = parseFloat((t / s.default.Seconds.HOUR).toFixed(1)); return o.default.Messages.USER_RECENT_GAMES_PLAYED_LAST_WEEK_HOURS.format({ count: e }) } if (!(t > s.default.Seconds.MINUTE)) return o.default.Messages.USER_RECENT_GAMES_PLAYED_LAST_WEEK_SECONDS.format({ count: t }); { let e = Math.round(t / s.default.Seconds.MINUTE); return o.default.Messages.USER_RECENT_GAMES_PLAYED_LAST_WEEK_MINUTES.format({ count: e }) } } }, 761174: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useIsCurrentUserRecentGamesEnabled: function() { return u }, useIsUserRecentGamesEnabled: function() { return d } }); var i = n("442837"), r = n("695346"), s = n("314897"), a = n("594174"), o = n("602992"), l = n("619914"); function u(e) { let { location: t } = e, n = (0, l.useUserIsRecentGamesExperimentEnabled)({ location: t, autoTrackExposure: !0 }), i = r.RecentGamesEnabled.useSetting(), s = r.ShowCurrentGame.useSetting(); return n && s && i } function d(e) { let { userId: t, location: n } = e, r = (0, i.useStateFromStores)([a.default], () => { let e = a.default.getUser(t); return null != e && !e.bot }), l = s.default.getId() === t, d = u({ location: n }); return (0, o.useUserIsRecentGamesExperimentApiEnabled)({ location: n }) && (l ? d && r : r) } }, 32966: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useUserRecentGames: function() { return u } }), n("47120"); var i = n("470079"), r = n("442837"), s = n("314897"), a = n("454175"), o = n("385845"), l = n("761174"); function u(e) { let t = (0, l.useIsUserRecentGamesEnabled)({ userId: e, location: "28tk0bf_4" }), n = i.useRef(new AbortController), u = (0, r.useStateFromStores)([s.default], () => s.default.getId()), { recentGames: d, currentUserRecentGames: _, isFetching: c, isError: E } = (0, r.useStateFromStoresObject)([o.default], () => ({ recentGames: o.default.getRecentGames(e), currentUserRecentGames: o.default.getRecentGames(u), isFetching: o.default.isFetching(e), isError: o.default.isError(e) })), I = i.useMemo(() => { var e; let t = null !== (e = null == _ ? void 0 : _.map(e => { let { applicationId: t } = e; return t })) && void 0 !== e ? e : []; return 0 === t.length ? null : new Set(t) }, [_]), T = i.useCallback(async () => { if (t && !c && !E) try { await a.default.fetchUserRecentGames(e, n.current.signal, !0) } catch (e) {} }, [E, t, c, e]); return i.useEffect(() => { T() }, [T]), i.useEffect(() => { let e = n.current; return () => { null == e || e.abort() } }, []), { isFetching: c, isError: E, recentGames: d, currentUserApplicationIds: I } } }, 815016: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldReadWriteAudioSettings: function() { return r } }); let i = (0, n("818083").createExperiment)({ kind: "user", id: "2022-09_remote_audio_settings", label: "Remote Audio Settings", defaultConfig: { readWriteRemoteSettings: !1 }, treatments: [{ id: 1, label: "Read/write remote audio settings", config: { readWriteRemoteSettings: !0 } }] }); function r() { return i.getCurrentConfig({ location: "da0fa6_1" }, { autoTrackExposure: !1 }).readWriteRemoteSettings } }, 345953: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("392711"), r = n.n(i), s = n("51407"), a = n("524437"), o = n("433517"), l = n("147913"), u = n("254238"), d = n("258609"), _ = n("763296"), c = n("314897"), E = n("131951"), I = n("709054"), T = n("815016"), f = n("725380"), S = n("340332"), h = n("675478"), A = n("65154"); let m = e => "AudioContextSettingsMigrated:".concat(e), N = e => e === A.MediaEngineContextTypes.STREAM ? s.AudioSettingsDefaultVolumes.STREAM : s.AudioSettingsDefaultVolumes.USER; function p() { (0, T.shouldReadWriteAudioSettings)() && (o.Storage.get(m(c.default.getId())) || h.PreloadedUserSettingsActionCreators.updateAsync("audioContextSettings", e => { let t = !1; for (let [n, i] of Object.entries(E.default.getState().settingsByContext)) { let r = (0, S.coerceAudioContextForProto)(n); if (null == r) continue; let s = e[r], a = String(Date.now()), o = {}; for (let [e, t] of Object.entries(i.localMutes)) o[e] = { muted: t, volume: N(n), modifiedAt: a, soundboardMuted: !1 }; for (let [e, t] of Object.entries(i.localVolumes)) o[e] = { muted: !1, modifiedAt: a, ...o[e], volume: (0, S.snapVolumeToDefault)(t, n) }; let l = Object.keys(s).length; for (let [e, [n, i]] of Object.entries(o).entries()) { if (300 - l - (e + 1) <= 0) break; null == s[n] && (t = !0, s[n] = i) } } return o.Storage.set(m(c.default.getId()), !0), t }, h.UserSettingsDelay.AUTOMATED)) } let O = r().debounce(() => { R() }, 2e3), C = r().debounce(u.remoteAudioSettingsUpdate, 500, { maxWait: 500 }); function R() { h.PreloadedUserSettingsActionCreators.updateAsync("audioContextSettings", e => { let t = !1; return (0, f.drainPendingAudioSettings)((n, i, r) => { let s = function(e, t, n, i) { var r, s, o, l, u; let d = !(arguments.length > 4) || void 0 === arguments[4] || arguments[4], _ = (0, S.coerceAudioContextForProto)(n); if (null == _) return !1; let c = e[_]; if (c[t] = null !== (r = c[t]) && void 0 !== r ? r : (s = n, a.AudioContextSetting.create({ muted: !1, volume: N(s) })), i(c[t]), c[t].modifiedAt = String(Date.now()), d) { ; o = c, l = t, u = n, o[l].volume !== N(u) || o[l].muted || o[l].soundboardMuted || delete o[l] } return ! function(e) { let t = I.default.entries(e), n = t.length; if (n <= 300) return; let i = t.sort((e, t) => { let [n, { modifiedAt: i }] = e, [r, { modifiedAt: s }] = t; return Number(i) - Number(s) }), r = n - 300; for (let t = 0; t < r; t++) { let [n] = i[t]; delete e[n] } }(c), !0 }(e, i, n, e => { Object.assign(e, r) }); t = t || s }), t }, h.UserSettingsDelay.INFREQUENT_USER_ACTION) } function g(e) { var t, n, i; let { context: r, userId: s, volume: a } = e; if (s === c.default.getId() || !(0, T.shouldReadWriteAudioSettings)()) return; let o = d.default.getRemoteSessionId(); null != o && C(o, s, r, { muted: E.default.isLocalMute(s, r), volume: a }), t = r, n = s, i = a, (0, f.updatePendingSettings)(t, n, { volume: i }), O() } function L(e) { let { context: t, userId: n } = e; if (n !== c.default.getId()) { if ((0, T.shouldReadWriteAudioSettings)()) { var i, r, s; i = t, r = n, s = E.default.isLocalMute(n, t), (0, f.updatePendingSettings)(i, r, { muted: s }), O.cancel(), R() } } } function v(e) { let { context: t, userId: n } = e; if (n !== c.default.getId()) { if ((0, T.shouldReadWriteAudioSettings)()) { var i, r, s; i = t, r = n, s = _.default.isLocalSoundboardMuted(n), (0, f.updatePendingSettings)(i, r, { soundboardMuted: s }), O.cancel(), R() } } } class D extends l.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: p, AUDIO_SET_LOCAL_VOLUME: g, AUDIO_TOGGLE_LOCAL_MUTE: L, AUDIO_TOGGLE_LOCAL_SOUNDBOARD_MUTE: v }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new D }, 725380: function(e, t, n) { "use strict"; n.r(t), n.d(t, { drainPendingAudioSettings: function() { return o }, getPendingAudioSettings: function() { return s }, updatePendingSettings: function() { return a } }), n("47120"); let i = {}; function r(e, t) { return "".concat(e, ":").concat(t) } function s(e, t) { return i[r(e, t)] } function a(e, t, n) { let s = r(e, t); i[s] = { ...i[s], ...n } } function o(e) { for (let t in i) { let [n, r] = function(e) { let [t, n] = e.split(":"); return [t, n] }(t); e(n, r, i[t]) } i = {} } }, 340332: function(e, t, n) { "use strict"; n.r(t), n.d(t, { coerceAudioContextForProto: function() { return l }, snapVolumeToDefault: function() { return o } }); var i = n("51407"), r = n("46973"), s = n("36703"), a = n("526761"); function o(e, t) { let n = t === r.MediaEngineContextTypes.STREAM ? i.AudioSettingsDefaultVolumes.STREAM : i.AudioSettingsDefaultVolumes.USER; return 1 > Math.abs((0, s.amplitudeToPerceptual)(n) - (0, s.amplitudeToPerceptual)(e)) ? n : e } function l(e) { switch (e) { case r.MediaEngineContextTypes.DEFAULT: return a.ProtoAudioSettingsContextTypes.USER; case r.MediaEngineContextTypes.STREAM: return a.ProtoAudioSettingsContextTypes.STREAM; default: return } } }, 973005: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DMSafetyCoachmarkActions: function() { return i }, DmSpamFilterTypes: function() { return r }, ExplicitContentFilterToDmSpamFilterV2: function() { return d }, ExplicitContentFilterTypes: function() { return s } }), n("47120"); var i, r, s, a, o, l, u = n("524437"); (a = i || (i = {}))[a.VIEW = 0] = "VIEW", a[a.DISMISS = 1] = "DISMISS", a[a.CHANGE_SETTING = 2] = "CHANGE_SETTING", (o = r || (r = {}))[o.DISABLED = 0] = "DISABLED", o[o.NON_FRIENDS = 1] = "NON_FRIENDS", o[o.FRIENDS_AND_NON_FRIENDS = 2] = "FRIENDS_AND_NON_FRIENDS", (l = s || (s = {}))[l.DISABLED = 0] = "DISABLED", l[l.NON_FRIENDS = 1] = "NON_FRIENDS", l[l.FRIENDS_AND_NON_FRIENDS = 2] = "FRIENDS_AND_NON_FRIENDS"; let d = new Map([ [0, u.DmSpamFilterV2.DISABLED], [1, u.DmSpamFilterV2.NON_FRIENDS], [2, u.DmSpamFilterV2.FRIENDS_AND_NON_FRIENDS] ]) }, 960412: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchEmailSettings: function() { return u }, updateEmailSetting: function() { return d }, updateMarketingEmailSettings: function() { return _ } }), n("724458"); var i = n("990547"), r = n("283693"), s = n("570140"), a = n("573261"), o = n("930441"), l = n("981631"); async function u() { try { let e = await a.default.get({ url: l.Endpoints.EMAIL_SETTINGS, trackedActionData: { event: i.NetworkActionNames.EMAIL_SETTINGS_FETCH, properties: e => { var t; let n = null == e ? void 0 : null === (t = e.body) || void 0 === t ? void 0 : t.initialized; return (0, r.exact)({ initialized: n }) } } }); return s.default.dispatch({ type: "EMAIL_SETTINGS_FETCH_SUCCESS", settings: e.body }), e.body } catch { s.default.dispatch({ type: "EMAIL_SETTINGS_FETCH_FAILURE" }) } } async function d(e, t) { s.default.dispatch({ type: "EMAIL_SETTINGS_UPDATE", updates: { [e]: t } }); try { let n = await a.default.patch({ url: l.Endpoints.EMAIL_SETTINGS, body: { settings: { categories: { [e]: t } } }, trackedActionData: { event: i.NetworkActionNames.EMAIL_SETTINGS_UPDATE, properties: { category: e, value: t } } }); s.default.dispatch({ type: "EMAIL_SETTINGS_UPDATE_SUCCESS", settings: n.body }) } catch (e) { s.default.dispatch({ type: "EMAIL_SETTINGS_UPDATE_FAILURE" }) } } async function _() { let e = o.MarketingEmailCategories.reduce((e, t) => ({ ...e, [t]: !1 }), {}); s.default.dispatch({ type: "EMAIL_SETTINGS_UPDATE", updates: e }); try { let t = await a.default.patch({ url: l.Endpoints.EMAIL_SETTINGS, body: { settings: { categories: e } }, trackedActionData: { event: i.NetworkActionNames.EMAIL_SETTINGS_UPDATE, properties: { category: "marketing", value: !1 } } }); s.default.dispatch({ type: "EMAIL_SETTINGS_UPDATE_SUCCESS", settings: t.body }) } catch (e) { s.default.dispatch({ type: "EMAIL_SETTINGS_UPDATE_FAILURE" }) } } }, 930441: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EMAILS_SUBSECTION: function() { return a }, EmailCategories: function() { return r }, EmailCategoriesList: function() { return l }, MarketingEmailCategories: function() { return o } }); var i, r, s = n("689938"); let a = "emails"; (i = r || (r = {})).COMMUNICATION = "communication", i.SOCIAL = "social", i.TIPS = "tips", i.RECOMMENDATIONS_AND_EVENTS = "recommendations_and_events", i.UPDATES_AND_ANNOUNCEMENTS = "updates_and_announcements", i.FAMILY_CENTER_DIGEST = "family_center_digest"; let o = ["tips", "recommendations_and_events", "updates_and_announcements"], l = [{ category: "communication", label: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_COMMUNICATION, subLabel: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_COMMUNICATION_SUBLABEL }, { category: "social", label: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_SOCIAL, subLabel: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_SOCIAL_SUBLABEL }, { category: "updates_and_announcements", label: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_UPDATES_AND_ANNOUNCEMENTS, subLabel: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_UPDATES_AND_ANNOUNCEMENTS_SUBLABEL }, { category: "tips", label: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_TIPS, subLabel: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_TIPS_SUBLABEL }, { category: "recommendations_and_events", label: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_RECOMMENDATIONS_AND_EVENTS, subLabel: () => s.default.Messages.USER_SETTINGS_EMAIL_CATEGORY_RECOMMENDATIONS_AND_EVENTS_SUBLABEL }] }, 888875: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"); var i = n("392711"), r = n.n(i), s = n("377108"), a = n("433517"), o = n("147913"), l = n("654455"), u = n("822245"), d = n("339085"), _ = n("178106"), c = n("822179"), E = n("580005"), I = n("70956"), T = n("675478"), f = n("581883"), S = n("48481"), h = n("526761"); let A = "lastFrecencySavedTime", m = 5 * I.default.Millis.MINUTE * Math.random(), N = 1 * I.default.Millis.DAY + Math.floor(1 * I.default.Millis.HOUR * Math.random()), p = null, O = Date.now(); class C extends o.default { _initialize() { T.FrecencyUserSettingsActionCreators.beforeSendCallbacks.push({ hasChanges: () => !1, processProto: () => { v(!0) } }), T.FrecencyUserSettingsActionCreators.beforeSendCallbacks.push({ hasChanges: () => c.default.hasPendingUsage() && f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS), processProto: e => { if (!!c.default.hasPendingUsage()) f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && (e.stickerFrecency = s.StickerFrecency.create(), e.stickerFrecency.stickers = (0, S.serializeUsageHistory)(c.default.stickerFrecencyWithoutFetchingLatest.usageHistory, 100)) } }), T.FrecencyUserSettingsActionCreators.beforeSendCallbacks.push({ hasChanges: () => d.default.hasPendingUsage() && f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS), processProto: e => { if (!!d.default.hasPendingUsage()) f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && (e.emojiFrecency = s.EmojiFrecency.create(), e.emojiFrecency.emojis = (0, S.serializeUsageHistory)(d.default.emojiFrecencyWithoutFetchingLatest.usageHistory, 100)) } }), T.FrecencyUserSettingsActionCreators.beforeSendCallbacks.push({ hasChanges: () => _.default.hasPendingUsage() && f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS), processProto: e => { if (!!_.default.hasPendingUsage()) f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && !r().isEmpty(_.default.playedSoundHistory) && (e.playedSoundFrecency = s.PlayedSoundFrecency.create(), e.playedSoundFrecency.playedSounds = (0, S.serializeUsageHistory)(_.default.playedSoundHistory, 100)) } }), T.FrecencyUserSettingsActionCreators.beforeSendCallbacks.push({ hasChanges: () => l.default.hasPendingUsage() && f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS), processProto: e => { if (!!l.default.hasPendingUsage()) f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && (e.applicationCommandFrecency = s.ApplicationCommandFrecency.create(), e.applicationCommandFrecency.applicationCommands = (0, S.serializeUsageHistory)(l.default.getCommandFrecencyWithoutLoadingLatest().usageHistory, 500)) } }), T.FrecencyUserSettingsActionCreators.beforeSendCallbacks.push({ hasChanges: () => u.default.hasPendingUsage() && f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS), processProto: e => { if (!!u.default.hasPendingUsage()) f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && (e.applicationFrecency = s.ApplicationFrecency.create(), e.applicationFrecency.applications = (0, S.serializeUsageHistory)(u.default.getApplicationFrecencyWithoutLoadingLatest().usageHistory, u.FREQUENCY_ITEM_LIMIT)) } }), T.FrecencyUserSettingsActionCreators.beforeSendCallbacks.push({ hasChanges: () => E.default.hasPendingUsage() && f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS), processProto: e => { if (!!E.default.hasPendingUsage()) f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && (e.guildAndChannelFrecency = s.GuildAndChannelFrecency.create(), e.guildAndChannelFrecency.guildAndChannels = (0, S.serializeUsageHistory)(E.default.frecencyWithoutFetchingLatest.usageHistory, E.MAX_NUM_SELECTED_ITEMS)) } }) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { POST_CONNECTION_OPEN: R, CONNECTION_RESUMED: R, CONNECTION_CLOSED: g }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } function R() { var e; O = null !== (e = a.Storage.get(A)) && void 0 !== e ? e : Date.now(), v(!1) } function g() { clearTimeout(p), p = null } async function L() { O = Date.now(), v(!0), !f.default.hasLoaded(h.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS) && (c.default.hasPendingUsage() || d.default.hasPendingUsage() || l.default.hasPendingUsage() || u.default.hasPendingUsage() || E.default.hasPendingUsage()) && await T.FrecencyUserSettingsActionCreators.loadIfNecessary(), r().forEach(T.UserSettingsActionCreatorsByType, e => { e.markDirtyIfHasPendingChange() }) } function v(e) { e && (O = Date.now(), a.Storage.set(A, O)), null != p && clearTimeout(p); let t = Date.now() - O; p = setTimeout(L, Math.max(m, N - t)) } t.default = new C }, 706454: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("209185"), d = n("581883"), _ = n("689938"); let c = _.default.getDefaultLocale(); function E() { var e, t; let n = null === (t = d.default.settings.localization) || void 0 === t ? void 0 : null === (e = t.locale) || void 0 === e ? void 0 : e.value; return null != n && "" !== n && n !== c && (c = n, u.setLocale(c), !0) } class I extends(a = o.default.Store) { initialize() { this.waitFor(d.default), E(), u.setLocale(c) } get locale() { return c } } s = "LocaleStore", (r = "displayName") in(i = I) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new I(l.default, { OVERLAY_INITIALIZE: E, CACHE_LOADED: E, CONNECTION_OPEN: E, USER_SETTINGS_PROTO_UPDATE: E, USER_SETTINGS_LOCALE_OVERRIDE: function(e) { c = e.locale, u.setLocale(c) } }) }, 238514: function(e, t, n) { "use strict"; n.r(t); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("433517"), l = n("570140"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = {}; class c extends(i = a.default.PersistedStore) { initialize(e) { _ = null != e ? e : {} } getState() { return _ } shouldSync(e) { var t; return (null === (t = _[e]) || void 0 === t ? void 0 : t.shouldSync) !== !1 } getTextSettings() { var e; return null === (e = _.text) || void 0 === e ? void 0 : e.settings } getAppearanceSettings() { var e; return null === (e = _.appearance) || void 0 === e ? void 0 : e.settings } } d(c, "displayName", "SelectivelySyncedUserSettingsStore"), d(c, "persistKey", "SelectivelySyncedUserSettingsStore"), d(c, "migrations", [() => { var e, t; let n = null !== (e = o.Storage.get("UserSettingsSync")) && void 0 !== e ? e : {}, i = null !== (t = o.Storage.get("UserSettingsStore")) && void 0 !== t ? t : {}; o.Storage.remove("UserSettingsSync"); let r = {}; return !1 === n[u.UserSettingsSections.TEXT] && (r.text = { shouldSync: !1, settings: s().pick(i, ["inlineAttachmentMedia", "inlineEmbedMedia", "renderEmbeds", "renderReactions", "animateEmoji", "animateStickers", "gifAutoPlay"]) }), !1 === n[u.UserSettingsSections.APPEARANCE] && (r.appearance = { shouldSync: !1, settings: s().pick(i, ["theme", "clientThemeSettings", "developerMode"]) }), r }, e => { var t, n; if ((null == e ? void 0 : null === (n = e.appearance) || void 0 === n ? void 0 : null === (t = n.settings) || void 0 === t ? void 0 : t.theme) === "amoled") return { ...e, appearance: { ...e.appearance, settings: { ...e.appearance.settings, theme: "midnight" } } } }]), t.default = new c(l.default, { SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE: function(e) { let { changes: t } = e; for (let e in t) { var n; let { shouldSync: i, settings: r } = t[e]; if (!0 === i) { delete _[e]; continue }!1 === i && (_[e] = { shouldSync: i, settings: {} }); if ((null === (n = _[e]) || void 0 === n ? void 0 : n.shouldSync) === !1) for (let t in r) _[e].settings[t] = r[t] } }, LOGOUT: function() { _ = {} } }) }, 781391: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setUseSystemTheme: function() { return r } }); var i = n("570140"); function r(e) { i.default.dispatch({ type: "UNSYNCED_USER_SETTINGS_UPDATE", settings: { useSystemTheme: e } }) } n("541049"), n("740492"), n("874893") }, 874893: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { SystemThemeState: function() { return i } }), (r = i || (i = {}))[r.UNSET = 0] = "UNSET", r[r.OFF = 1] = "OFF", r[r.ON = 2] = "ON" }, 210887: function(e, t, n) { "use strict"; let i; n.r(t); var r, s, a = n("442837"), o = n("524437"), l = n("692547"), u = n("780384"), d = n("570140"), _ = n("607070"), c = n("47760"), E = n("540059"); n("57132"); var I = n("541049"); n("449934"); var T = n("12647"), f = n("358085"), S = n("238514"), h = n("740492"), A = n("581883"), m = n("874893"), N = n("981631"), p = n("469115"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = null !== (r = (0, I.default)()) && void 0 !== r ? r : N.ThemeTypes.DARK, R = null, g = !1; function L() { return function() { var e, t; if (__OVERLAY__) return N.ThemeTypes.DARK; if (_.default.syncForcedColors && "active" === _.default.systemForcedColors && null != i || h.default.useSystemTheme === m.SystemThemeState.ON && null != i) return i; let n = null === (e = S.default.getAppearanceSettings()) || void 0 === e ? void 0 : e.theme; if (null != n) return n; let r = null === (t = A.default.settings.appearance) || void 0 === t ? void 0 : t.theme; if (null == r) return C; if (!E.DesktopVisualRefreshExperiment.getCurrentConfig({ location: "ThemeStore" }).enabled) return r === o.Theme.LIGHT ? N.ThemeTypes.LIGHT : N.ThemeTypes.DARK; switch (r) { case o.Theme.LIGHT: return N.ThemeTypes.LIGHT; case o.Theme.DARK: return N.ThemeTypes.DARK; case o.Theme.DARKER: return N.ThemeTypes.DARKER; case o.Theme.MIDNIGHT: return N.ThemeTypes.MIDNIGHT; default: return N.ThemeTypes.DARK } }() } function v() { return M() } function D() { return M() } function M() { let e = L(); return e !== C && (C = e, !0) } class y extends(s = a.default.PersistedStore) { initialize(e) { (null == e ? void 0 : e.theme) != null && (C = e.theme), this.waitFor(h.default, S.default, A.default, _.default) } getState() { return { theme: this.theme } } get darkSidebar() { return (0, u.isThemeLight)(this.theme) && h.default.darkSidebar && !g } get theme() { return L() } get systemTheme() { return R } get systemPrefersColorScheme() { return i } get isSystemThemeAvailable() { return null !== R } } O(y, "displayName", "ThemeStore"), O(y, "persistKey", "ThemeStore"), O(y, "migrations", [e => { let t = e.theme; return "amoled" === t && (t = "midnight"), { ...e, theme: t } }]), t.default = new y(d.default, { CACHE_LOADED: v, CONNECTION_OPEN: v, LOGOUT: function(e) { return !e.isSwitchingAccount && C !== N.ThemeTypes.DARK && (C = N.ThemeTypes.DARK, function() { !__OVERLAY__ && f.isPlatformEmbedded && T.default.setApplicationBackgroundColor((0, u.isThemeDark)(L()) ? l.default.unsafe_rawColors.PRIMARY_700.resolve({ saturation: _.default.saturation }).hsl() : l.default.unsafe_rawColors.WHITE_500.resolve({ saturation: _.default.saturation }).hsl()) }(), M()) }, OVERLAY_INITIALIZE: v, SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE: D, UNSYNCED_USER_SETTINGS_UPDATE: D, USER_SETTINGS_PROTO_UPDATE: v, UPDATE_BACKGROUND_GRADIENT_PRESET: function(e) { var t, n; let { presetId: i } = e; C = null != i && null !== (n = null === (t = p.BACKGROUND_GRADIENT_PRESETS_MAP[i]) || void 0 === t ? void 0 : t.theme) && void 0 !== n ? n : L(); let r = null != i; return g !== r ? (g = r, !0) : function() { let e = L(); return !(0, c.areThemesEqualForGradientThemes)(C, e) && (C = e, !0) }() }, RESET_PREVIEW_CLIENT_THEME: v, SYSTEM_THEME_CHANGE: function(e) { let { systemTheme: t } = e; return R = t, M() }, ACCESSIBILITY_SYSTEM_COLOR_PREFERENCES_CHANGED: function(e) { return i = e.systemPrefersColorScheme, M() }, ACCESSIBILITY_DARK_SIDEBAR_TOGGLE: function() { return (0, u.isThemeLight)(L()) } }) }, 740492: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o, l = n("392711"), u = n.n(l), d = n("442837"), _ = n("433517"), c = n("570140"); n("541049"); var E = n("874893"), I = n("981631"), T = n("957825"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(i = s || (s = {})).DATA_SAVER = "data_saver", i.STANDARD = "standard", i.BEST = "best", (r = a || (a = {})).VERY_LOW = "very_low", r.LOW = "low", r.MEDIUM = "medium", r.HIGH = "high", r.VERY_HIGH = "very_high"; let S = (window.innerWidth - I.CHANNEL_SIDEBAR_WIDTH) / 2, h = null, A = {}; class m extends(o = d.default.DeviceSettingsStore) { initialize(e) { var t; (A = null != e ? e : {}).darkSidebar = null !== (t = A.darkSidebar) && void 0 !== t ? t : function() { var e; let t = d.default.PersistedStore.migrateAndReadStoreState("AccessibilityStore", []).state; return null !== (e = null == t ? void 0 : t.darkSidebar) && void 0 !== e && e }() } getUserAgnosticState() { return A } get displayCompactAvatars() { var e; return null !== (e = A.displayCompactAvatars) && void 0 !== e && e } get lowQualityImageMode() { var e; return null !== (e = A.lowQualityImageMode) && void 0 !== e && e } get videoUploadQuality() { var e; return null !== (e = A.videoUploadQuality) && void 0 !== e ? e : "standard" } get dataSavingMode() { var e, t; return null !== (t = null !== (e = A.dataSavingMode) && void 0 !== e ? e : A.lowQualityImageMode) && void 0 !== t && t } get expressionPickerWidth() { var e; return null !== (e = A.expressionPickerWidth) && void 0 !== e ? e : T.ExpressionPickerWidths.MIN } get messageRequestSidebarWidth() { var e; return null !== (e = A.messageRequestSidebarWidth) && void 0 !== e ? e : I.DEFAULT_MESSAGE_REQUEST_SIDEBAR_WIDTH } get threadSidebarWidth() { var e; return null !== (e = A.threadSidebarWidth) && void 0 !== e ? e : I.DEFAULT_CHAT_SIDEBAR_WIDTH } get postSidebarWidth() { var e; return null !== (e = A.postSidebarWidth) && void 0 !== e ? e : S } get callChatSidebarWidth() { var e; return null !== (e = A.callChatSidebarWidth) && void 0 !== e ? e : I.DEFAULT_CHAT_SIDEBAR_WIDTH } get homeSidebarWidth() { var e; return null !== (e = A.homeSidebarWidth) && void 0 !== e ? e : (null == h && (h = Math.max((window.innerWidth - I.CHANNEL_SIDEBAR_WIDTH) * .4, I.DEFAULT_CHAT_SIDEBAR_WIDTH)), h) } get callHeaderHeight() { return A.callHeaderHeight } get useSystemTheme() { var e; return null !== (e = A.useSystemTheme) && void 0 !== e ? e : E.SystemThemeState.UNSET } get activityPanelHeight() { return A.activityPanelHeight } get disableVoiceChannelChangeAlert() { var e; return null !== (e = A.disableVoiceChannelChangeAlert) && void 0 !== e && e } get disableEmbeddedActivityPopOutAlert() { var e; return null !== (e = A.disableEmbeddedActivityPopOutAlert) && void 0 !== e && e } get disableActivityHardwareAccelerationPrompt() { var e; return null !== (e = A.disableActivityHardwareAccelerationPrompt) && void 0 !== e && e } get disableInviteWithTextChannelActivityLaunch() { var e; return null !== (e = A.disableInviteWithTextChannelActivityLaunch) && void 0 !== e && e } get disableHideSelfStreamAndVideoConfirmationAlert() { var e; return null !== (e = A.disableHideSelfStreamAndVideoConfirmationAlert) && void 0 !== e && e } get pushUpsellUserSettingsDismissed() { var e; return null !== (e = A.pushUpsellDismissed) && void 0 !== e && e } get disableActivityHostLeftNitroUpsell() { var e; return null !== (e = A.disableActivityHostLeftNitroUpsell) && void 0 !== e && e } get disableCallUserConfirmationPrompt() { var e; return null !== (e = A.disableCallUserConfirmationPrompt) && void 0 !== e && e } get disableApplicationSubscriptionCancellationSurvey() { var e; return null !== (e = A.disableApplicationSubscriptionCancellationSurvey) && void 0 !== e && e } get enableAndroidChatListAnimations() { var e; return null !== (e = A.enableAndroidChatListAnimations) && void 0 !== e && e } get darkSidebar() { var e; return null !== (e = A.darkSidebar) && void 0 !== e && e } get useMobileChatCustomRenderer() { var e; return null !== (e = A.useMobileChatCustomRenderer) && void 0 !== e && e } get saveCameraUploadsToDevice() { var e; return null === (e = A.saveCameraUploadsToDevice) || void 0 === e || e } get swipeToReply() { var e; return null !== (e = A.swipeToReply) && void 0 !== e && e } } f(m, "displayName", "UnsyncedUserSettingsStore"), f(m, "persistKey", "UnsyncedUserSettingsStore"), f(m, "migrations", [() => { let e = _.Storage.get("UserSettingsStore"); return _.Storage.remove("UserSettingsStore"), u().pick(e, "dataSavingMode", "videoUploadQuality", "lowQualityImageMode", "useSystemTheme", "expressionPickerWidth", "disableVoiceChannelChangeAlert", "disableHideSelfStreamAndVideoConfirmationAlert", "pushUpsellDismissed", "disableEmbeddedActivityPopOutAlert", "disableActivityHardwareAccelerationPrompt", "disableInviteWithTextChannelActivityLaunch", "disableActivityHostLeftNitroUpsell", "disableCallUserConfirmationPrompt", "disableApplicationSubscriptionCancellationSurvey", "enableAndroidChatListAnimations") }]), t.default = new m(c.default, { UNSYNCED_USER_SETTINGS_UPDATE: function(e) { A = { ...A, ...e.settings } }, LOGOUT: function() { A = { useSystemTheme: A.useSystemTheme, darkSidebar: A.darkSidebar } }, LOGIN_SUCCESS: function() { null == A && (A = {}) }, REGISTER_SUCCESS: function() {}, ACCESSIBILITY_DARK_SIDEBAR_TOGGLE: function() { return A.darkSidebar = !A.darkSidebar, !0 } }) }, 149071: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("544891"), r = n("147913"), s = n("680089"), a = n("592125"), o = n("70956"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = {}, _ = 0, c = 15 * o.default.Millis.SECOND; function E() { d = { ...s.default.getCollapsedCategories() } } function I() { !__OVERLAY__ && (clearTimeout(_), _ = setTimeout(() => f({}), c)) } async function T(e, t) { null == e || e === l.ME ? await i.HTTP.patch({ url: l.Endpoints.USER_GUILD_SETTINGS(l.ME), body: t }) : await f(null != t ? { [null != e ? e : l.ME]: t } : {}) } async function f(e) { clearTimeout(_); let t = 0 !== Object.keys(e).length, n = s.default.getCollapsedCategories(), r = function() { let e = {}, t = s.default.getCollapsedCategories(); for (let n in t) t[n] !== d[n] && (e[n] = !0); for (let n in d) t[n] !== d[n] && (e[n] = !0); return e }(); for (let i in r) { let r = a.default.getChannel(i); null != r && null != r.guild_id && (!(r.guild_id in e) && (e[r.guild_id] = {}), null == e[r.guild_id].channel_overrides && (e[r.guild_id].channel_overrides = {}), e[r.guild_id].channel_overrides[r.id] = { ...e[r.guild_id].channel_overrides[r.id], collapsed: r.id in n }, t = !0) } return t ? (d = { ...n }, delete e[l.FAVORITES], (await i.HTTP.patch({ url: l.Endpoints.USER_GUILD_SETTINGS_BULK, body: { guilds: e } })).body) : [] } function S() { d = { ...s.default.getCollapsedCategories() } } class h extends r.default { constructor(...e) { super(...e), u(this, "actions", { CATEGORY_COLLAPSE: I, CATEGORY_EXPAND: I, CATEGORY_COLLAPSE_ALL: I, CATEGORY_EXPAND_ALL: I, POST_CONNECTION_OPEN: E, USER_GUILD_SETTINGS_FULL_UPDATE: S }), u(this, "saveUserGuildSettings", T), u(this, "saveUserGuildSettingsBulk", f) } } t.default = new h }, 560997: function(e, t, n) { "use strict"; n.r(t), n.d(t, { defineProtoSetting: function() { return u }, wrapSettingWithOverride: function() { return _ }, wrapSettingWithSelectiveSyncing: function() { return d } }); var i = n("442837"), r = n("570140"), s = n("238514"), a = n("675478"), o = n("581883"), l = n("526761"); function u(e, t, n, r) { let s = () => { var i; return n(null === (i = o.default.settings[e]) || void 0 === i ? void 0 : i[t]) }; return { getSetting: s, updateSetting: c(s, n => a.PreloadedUserSettingsActionCreators.updateAsync(e, e => { e[t] = r(n, e[t]) }, l.UserSettingsDelay.INFREQUENT_USER_ACTION)), useSetting: () => (0, i.useStateFromStores)([o.default], s) } } function d(e, t, n) { let a = () => { var i; let r = s.default.getState()[t]; return null !== (i = null == r ? void 0 : r.settings[n]) && void 0 !== i ? i : e.getSetting() }; return { getSetting: a, useSetting: () => { let r = e.useSetting(), a = (0, i.useStateFromStores)([s.default], () => { let e = s.default.getState()[t]; return null == e ? void 0 : e.settings[n] }); return null != a ? a : r }, updateSetting: c(a, i => s.default.shouldSync(t) ? e.updateSetting(i) : (r.default.dispatch({ type: "SELECTIVELY_SYNCED_USER_SETTINGS_UPDATE", changes: { [t]: { settings: { [n]: i } } } }), Promise.resolve())) } } function _(e, t, n, i) { let s = () => { var t; return null !== (t = n()) && void 0 !== t ? t : e.getSetting() }; return { getSetting: s, useSetting: () => { let t = e.useSetting(), n = i(); return null != n ? n : t }, updateSetting: c(s, n => (r.default.dispatch({ type: "USER_SETTINGS_OVERRIDE_CLEAR", settings: [t] }), e.updateSetting(n))) } } function c(e, t) { return function(n) { return "function" == typeof n ? t(n(e())) : t(n) } } }, 695346: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ActivityJoiningRestrictedGuilds: function() { return eL }, ActivityRestrictedGuilds: function() { return eR }, AfkTimeout: function() { return z }, AllowActivityPartyPrivacyFriends: function() { return P }, AllowActivityPartyPrivacyVoiceChannel: function() { return U }, AlwaysPreviewVideo: function() { return g }, AnimateEmoji: function() { return ep }, AnimateStickers: function() { return eO }, BroadcastAllowFriends: function() { return eo }, BroadcastAllowedGuildIds: function() { return el }, BroadcastAllowedUserIds: function() { return eu }, BroadcastAutoBroadcast: function() { return ed }, ClientThemeSettings: function() { return em }, ClipsAllowVoiceRecording: function() { return e_ }, ConvertEmoticons: function() { return H }, CustomStatusSetting: function() { return es }, DefaultGuildsActivityRestricted: function() { return ev }, DefaultGuildsRestricted: function() { return B }, DeveloperMode: function() { return eA }, DisableGamesTab: function() { return Q }, DisableHomeAutoNav: function() { return eD }, DmSpamFilterV2: function() { return $ }, DropsOptedOut: function() { return W }, EmojiPickerCollapsedSections: function() { return N }, EnableTTSCommand: function() { return q }, ExplicitContentFilter: function() { return J }, ExplicitContentSettings: function() { return eP }, ExpressionSuggestionsEnabled: function() { return I }, FamilyCenterEnabled: function() { return eM }, FocusMode: function() { return h }, FocusModeExpiresAtSetting: function() { return A }, FriendSourceFlagsSetting: function() { return x }, GifAutoPlay: function() { return eN }, IncludeStickersInAutocomplete: function() { return T }, InlineAttachmentMedia: function() { return ec }, InlineEmbedMedia: function() { return eE }, InstallShortcutDesktop: function() { return M }, InstallShortcutStartMenu: function() { return y }, KeywordFilterSettings: function() { return eU }, LastReceivedChangelogId: function() { return eb }, LegacyUsernameDisabled: function() { return ey }, MessageDisplayCompact: function() { return Y }, MessageRequestRestrictedDefault: function() { return w }, MessageRequestRestrictedGuildIds: function() { return G }, NOTIFICATION_CENTER_ACKED_BEFORE_ID_UNSET: function() { return v }, NativePhoneIntegrationEnabled: function() { return K }, NonSpamRetrainingOptIn: function() { return k }, NotificationCenterAckedBeforeId: function() { return D }, NotifyFriendsOnGoLive: function() { return L }, RecentGamesEnabled: function() { return et }, RenderEmbeds: function() { return eI }, RenderReactions: function() { return eT }, RenderSpoilers: function() { return f }, RestrictedGuildIds: function() { return V }, RtcPanelShowVoiceStates: function() { return F }, ShowCommandSuggestions: function() { return R }, ShowCurrentGame: function() { return ee }, SoundboardPickerCollapsedSections: function() { return O }, SoundboardSettings: function() { return j }, StatusExpiresAtSetting: function() { return er }, StatusSetting: function() { return ei }, StickerPickerCollapsedSections: function() { return p }, TimezoneOffset: function() { return ef }, UseLegacyChatInput: function() { return c }, UseRichChatInput: function() { return E }, UseThreadSidebar: function() { return S }, ViewImageDescriptions: function() { return C }, ViewNsfwCommands: function() { return X }, ViewNsfwGuilds: function() { return Z } }), n("47120"); var i = n("442837"), r = n("524437"), s = n("381499"), a = n("85746"), o = n("560997"), l = n("263937"), u = n("973005"), d = n("981631"), _ = n("611480"); let c = (0, o.defineProtoSetting)("textAndImages", "useLegacyChatInput", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), E = (0, o.defineProtoSetting)("textAndImages", "useRichChatInput", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), I = (0, o.defineProtoSetting)("textAndImages", "expressionSuggestionsEnabled", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), T = (0, o.defineProtoSetting)("textAndImages", "includeStickersInAutocomplete", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), f = (0, o.defineProtoSetting)("textAndImages", "renderSpoilers", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : d.SpoilerRenderSetting.ON_CLICK }, e => s.StringValue.create({ value: e })), S = (0, o.defineProtoSetting)("textAndImages", "useThreadSidebar", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })); (0, o.defineProtoSetting)("notifications", "showInAppNotifications", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })); let h = (0, o.defineProtoSetting)("notifications", "quietMode", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: !!e })), A = (0, o.defineProtoSetting)("notifications", "focusModeExpiresAtMs", e => null != e ? e : "0", e => e), m = [], N = (0, o.defineProtoSetting)("textAndImages", "emojiPickerCollapsedSections", e => null != e ? e : m, e => e), p = (0, o.defineProtoSetting)("textAndImages", "stickerPickerCollapsedSections", e => null != e ? e : m, e => e), O = (0, o.defineProtoSetting)("textAndImages", "soundboardPickerCollapsedSections", e => null != e ? e : m, e => e), C = (0, o.defineProtoSetting)("textAndImages", "viewImageDescriptions", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), R = (0, o.defineProtoSetting)("textAndImages", "showCommandSuggestions", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), g = (0, o.defineProtoSetting)("voiceAndVideo", "alwaysPreviewVideo", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), L = (0, o.defineProtoSetting)("notifications", "notifyFriendsOnGoLive", e => null == e ? void 0 : e.value, e => s.BoolValue.create({ value: e })), v = "0", D = (0, o.defineProtoSetting)("notifications", "notificationCenterAckedBeforeId", e => null != e ? e : v, e => e); (0, o.defineProtoSetting)("notifications", "enableBurstReactionNotifications", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })); let M = (0, o.defineProtoSetting)("gameLibrary", "installShortcutDesktop", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), y = (0, o.defineProtoSetting)("gameLibrary", "installShortcutStartMenu", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), P = (0, o.defineProtoSetting)("privacy", "allowActivityPartyPrivacyFriends", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), U = (0, o.defineProtoSetting)("privacy", "allowActivityPartyPrivacyVoiceChannel", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), b = [], G = (0, o.defineProtoSetting)("privacy", "messageRequestRestrictedGuildIds", e => null != e ? e : b, e => e), w = (0, o.defineProtoSetting)("privacy", "defaultMessageRequestRestricted", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), k = (0, o.defineProtoSetting)("privacy", "nonSpamRetrainingOptIn", e => null == e ? void 0 : e.value, e => null == e ? void 0 : s.BoolValue.create({ value: e })); (0, o.defineProtoSetting)("privacy", "contactSyncEnabled", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })); let B = (0, o.defineProtoSetting)("privacy", "defaultGuildsRestricted", e => null != e && e, e => e), V = (0, o.defineProtoSetting)("privacy", "restrictedGuildIds", e => null != e ? e : [], e => e); (0, o.defineProtoSetting)("privacy", "friendDiscoveryFlags", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : 0 }, e => s.UInt32Value.create({ value: e })); let x = (0, o.defineProtoSetting)("privacy", "friendSourceFlags", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : d.AllFriendSourceFlags }, e => s.UInt32Value.create({ value: e })), F = (0, o.defineProtoSetting)("debug", "rtcPanelShowVoiceStates", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), H = (0, o.defineProtoSetting)("textAndImages", "convertEmoticons", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), Y = (0, o.defineProtoSetting)("textAndImages", "messageDisplayCompact", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), j = (0, o.defineProtoSetting)("voiceAndVideo", "soundboardSettings", e => e, e => e); (0, o.defineProtoSetting)("voiceAndVideo", "streamNotificationsEnabled", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })); let W = (0, o.defineProtoSetting)("privacy", "dropsOptedOut", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), K = (0, o.defineProtoSetting)("voiceAndVideo", "nativePhoneIntegrationEnabled", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), z = (0, o.defineProtoSetting)("voiceAndVideo", "afkTimeout", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : 600 }, e => s.UInt32Value.create({ value: e })), Z = (0, o.defineProtoSetting)("textAndImages", "viewNsfwGuilds", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), X = (0, o.defineProtoSetting)("textAndImages", "viewNsfwCommands", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })); (0, o.defineProtoSetting)("privacy", "detectPlatformAccounts", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })); let Q = (0, o.defineProtoSetting)("gameLibrary", "disableGamesTab", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), q = (0, o.defineProtoSetting)("textAndImages", "enableTtsCommand", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), J = (0, o.defineProtoSetting)("textAndImages", "explicitContentFilter", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : u.ExplicitContentFilterTypes.NON_FRIENDS }, e => s.UInt32Value.create({ value: e })); (0, o.defineProtoSetting)("textAndImages", "dmSpamFilter", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : u.DmSpamFilterTypes.NON_FRIENDS }, e => s.UInt32Value.create({ value: e })); let $ = (0, o.defineProtoSetting)("textAndImages", "dmSpamFilterV2", e => null != e ? e : r.DmSpamFilterV2.DEFAULT_UNSET, e => e), ee = (0, o.defineProtoSetting)("status", "showCurrentGame", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), et = (0, o.defineProtoSetting)("privacy", "recentGamesEnabled", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), en = new Set(Object.values(d.StatusTypes)), ei = (0, o.defineProtoSetting)("status", "status", e => null != e && en.has(e.value) ? e.value : d.StatusTypes.UNKNOWN, e => s.StringValue.create({ value: e })), er = (0, o.defineProtoSetting)("status", "statusExpiresAtMs", e => null != e ? e : "0", e => e), es = (0, o.defineProtoSetting)("status", "customStatus", e => e, e => e), ea = [], eo = (0, o.defineProtoSetting)("broadcast", "allowFriends", e => null == e ? void 0 : e.value, e => s.BoolValue.create({ value: e })), el = (0, o.defineProtoSetting)("broadcast", "allowedGuildIds", e => null != e ? e : ea, e => e), eu = (0, o.defineProtoSetting)("broadcast", "allowedUserIds", e => null != e ? e : ea, e => e), ed = (0, o.defineProtoSetting)("broadcast", "autoBroadcast", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), e_ = (0, o.defineProtoSetting)("clips", "allowVoiceRecording", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), ec = (0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("textAndImages", "inlineAttachmentMedia", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), "text", "inlineAttachmentMedia"), eE = (0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("textAndImages", "inlineEmbedMedia", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), "text", "inlineEmbedMedia"), eI = (0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("textAndImages", "renderEmbeds", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), "text", "renderEmbeds"), eT = (0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("textAndImages", "renderReactions", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), "text", "renderReactions"), ef = (0, o.defineProtoSetting)("localization", "timezoneOffset", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : null }, e => s.Int32Value.create({ value: null != e ? e : 0 })), eS = new Set([a.ChannelListLayoutTypes.COZY, a.ChannelListLayoutTypes.COMPACT]); (0, o.defineProtoSetting)("appearance", "channelListLayout", e => null != e && eS.has(e.value) ? e.value : a.ChannelListLayoutTypes.COZY, e => s.StringValue.create({ value: e })); let eh = new Set([a.MessagePreviewTypes.ALL, a.MessagePreviewTypes.UNREADS, a.MessagePreviewTypes.NONE]); (0, o.defineProtoSetting)("appearance", "messagePreviews", e => null != e && eh.has(e.value) ? e.value : a.MessagePreviewTypes.ALL, e => s.StringValue.create({ value: e })); let eA = (0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("appearance", "developerMode", e => null != e && e, e => e), "appearance", "developerMode"), em = (0, o.defineProtoSetting)("appearance", "clientThemeSettings", e => { var t; return { backgroundGradientPresetId: null == e ? void 0 : null === (t = e.backgroundGradientPresetId) || void 0 === t ? void 0 : t.value } }, e => ({ backgroundGradientPresetId: null != e.backgroundGradientPresetId ? s.UInt32Value.create({ value: e.backgroundGradientPresetId }) : void 0 })), eN = (0, o.wrapSettingWithOverride)((0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("textAndImages", "gifAutoPlay", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), "text", "gifAutoPlay"), "gifAutoPlay", () => { var e; return null === (e = l.default.getOverride("gifAutoPlay")) || void 0 === e ? void 0 : e.value }, () => (0, i.useStateFromStores)([l.default], () => { var e; return null === (e = l.default.getOverride("gifAutoPlay")) || void 0 === e ? void 0 : e.value })), ep = (0, o.wrapSettingWithOverride)((0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("textAndImages", "animateEmoji", e => { var t; return null === (t = null == e ? void 0 : e.value) || void 0 === t || t }, e => s.BoolValue.create({ value: e })), "text", "animateEmoji"), "animateEmoji", () => { var e; return null === (e = l.default.getOverride("animateEmoji")) || void 0 === e ? void 0 : e.value }, () => (0, i.useStateFromStores)([l.default], () => { var e; return null === (e = l.default.getOverride("animateEmoji")) || void 0 === e ? void 0 : e.value })), eO = (0, o.wrapSettingWithOverride)((0, o.wrapSettingWithSelectiveSyncing)((0, o.defineProtoSetting)("textAndImages", "animateStickers", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t ? t : _.StickerAnimationSettings.ALWAYS_ANIMATE }, e => s.UInt32Value.create({ value: e })), "text", "animateStickers"), "animateStickers", () => { var e; return null === (e = l.default.getOverride("animateStickers")) || void 0 === e ? void 0 : e.value }, () => (0, i.useStateFromStores)([l.default], () => { var e; return null === (e = l.default.getOverride("animateStickers")) || void 0 === e ? void 0 : e.value })), eC = [], eR = (0, o.defineProtoSetting)("privacy", "activityRestrictedGuildIds", e => null != e ? e : eC, e => e), eg = [], eL = (0, o.defineProtoSetting)("privacy", "activityJoiningRestrictedGuildIds", e => null != e ? e : eg, e => e), ev = (0, o.defineProtoSetting)("privacy", "defaultGuildsActivityRestricted", e => e === r.GuildActivityStatusRestrictionDefault.ON_FOR_LARGE_GUILDS, e => !0 === e ? r.GuildActivityStatusRestrictionDefault.ON_FOR_LARGE_GUILDS : r.GuildActivityStatusRestrictionDefault.OFF), eD = (0, o.defineProtoSetting)("communities", "disableHomeAutoNav", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), eM = (0, o.defineProtoSetting)("privacy", "familyCenterEnabledV2", e => null == e ? void 0 : e.value, e => s.BoolValue.create({ value: e })), ey = (0, o.defineProtoSetting)("privacy", "hideLegacyUsername", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })), eP = (0, o.defineProtoSetting)("textAndImages", "explicitContentSettings", e => { let { explicitContentGuilds: t, explicitContentFriendDm: n, explicitContentNonFriendDm: i } = null != e ? e : {}; return { explicitContentGuilds: null != t ? t : r.ExplicitContentRedaction.UNSET_EXPLICIT_CONTENT_REDACTION, explicitContentFriendDm: null != n ? n : r.ExplicitContentRedaction.UNSET_EXPLICIT_CONTENT_REDACTION, explicitContentNonFriendDm: null != i ? i : r.ExplicitContentRedaction.UNSET_EXPLICIT_CONTENT_REDACTION } }, e => { let { explicitContentGuilds: t, explicitContentFriendDm: n, explicitContentNonFriendDm: i } = e; return { explicitContentGuilds: null != t ? t : void 0, explicitContentFriendDm: null != n ? n : void 0, explicitContentNonFriendDm: null != i ? i : void 0 } }), eU = (0, o.defineProtoSetting)("textAndImages", "keywordFilterSettings", e => { let { profanity: t, sexualContent: n, slurs: i } = null != e ? e : {}; return { profanity: null == t ? void 0 : t.value, sexualContent: null == n ? void 0 : n.value, slurs: null == i ? void 0 : i.value } }, e => { let { profanity: t, sexualContent: n, slurs: i } = e; return { profanity: s.BoolValue.create({ value: t }), sexualContent: s.BoolValue.create({ value: n }), slurs: s.BoolValue.create({ value: i }) } }); (0, o.defineProtoSetting)("appearance", "searchResultExactCountEnabled", e => { var t; return null !== (t = null == e ? void 0 : e.value) && void 0 !== t && t }, e => s.BoolValue.create({ value: e })); let eb = (0, o.defineProtoSetting)("userContent", "lastReceivedChangelogId", e => null != e ? e : "0", e => e) }, 516373: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useFrecencySettings: function() { return o } }); var i = n("470079"), r = n("442837"), s = n("675478"), a = n("581883"); function o() { return i.useEffect(() => { s.FrecencyUserSettingsActionCreators.loadIfNecessary() }, []), (0, r.useStateFromStores)([a.default], () => a.default.frecencyWithoutFetchingLatest) } }, 262847: function(e, t, n) { "use strict"; n.r(t); var i = n("526761"); let r = { [i.UserSettingsTypes.PRELOADED_USER_SETTINGS]: [], [i.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS]: [] }; t.default = r }, 263937: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("433517"), a = n("570140"), o = n("581883"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = {}, d = {}; function _() { var e, t, n, i, r, s; let a = o.default.settings; return { gifAutoPlay: null === (t = a.textAndImages) || void 0 === t ? void 0 : null === (e = t.gifAutoPlay) || void 0 === e ? void 0 : e.value, animateEmoji: null === (i = a.textAndImages) || void 0 === i ? void 0 : null === (n = i.animateEmoji) || void 0 === n ? void 0 : n.value, animateStickers: null === (s = a.textAndImages) || void 0 === s ? void 0 : null === (r = s.animateStickers) || void 0 === r ? void 0 : r.value } } function c() { return d = _(), !1 } class E extends(i = r.default.PersistedStore) { initialize(e) { u = null != e ? e : {}, this.syncWith([o.default], c) } getState() { return u } getAppliedOverrideReasonKey(e) { var t; return null === (t = u[e]) || void 0 === t ? void 0 : t.reasonKey } getOverride(e) { return u[e] } } l(E, "displayName", "UserSettingsOverridesStore"), l(E, "persistKey", "UserSettingsOverridesStore"), l(E, "migrations", [() => { var e; let t = null !== (e = s.Storage.get("UserSettingsStoreOverrides")) && void 0 !== e ? e : {}; return s.Storage.remove("UserSettingsStoreOverrides"), t }]), t.default = new E(a.default, { USER_SETTINGS_PROTO_UPDATE: function() { let e = _(), t = !1; for (let n in e) e[n] !== d[n] && (delete u[n], t = !0); return t }, USER_SETTINGS_OVERRIDE_APPLY: function(e) { let { settings: t } = e; u = { ...u, ...t } }, USER_SETTINGS_OVERRIDE_CLEAR: function(e) { let { settings: t } = e; for (let e of t) delete u[e] }, LOGOUT: function() { u = {} }, LOGIN_SUCCESS: function() { u = {} } }) }, 675478: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FrecencyUserSettingsActionCreators: function() { return O }, PreloadedUserSettingsActionCreators: function() { return p }, UserSettingsActionCreatorsByType: function() { return C }, UserSettingsDelay: function() { return f.UserSettingsDelay }, addDismissedContent: function() { return L }, checkAllDismissedContents: function() { return M }, clearDismissedContents: function() { return D }, removeDismissedContent: function() { return v }, updateUserChannelSettings: function() { return g }, updateUserGuildSettings: function() { return R } }), n("411104"), n("47120"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); var i = n("512722"), r = n.n(i), s = n("259443"), a = n("544891"), o = n("377108"), l = n("524437"), u = n("433517"), d = n("570140"), _ = n("70956"), c = n("915486"), E = n("262847"), I = n("581883"), T = n("48481"), f = n("526761"), S = n("981631"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = "UserSettingsProtoLastWriteTimes", m = Date.now(); d.default.subscribe("CONNECTION_OPEN", () => { Date.now() }), d.default.subscribe("CONNECTION_CLOSED", () => { Date.now() }), "undefined" != typeof document && (document.addEventListener("mousedown", () => {}), document.addEventListener("keydown", () => {})); class N { getEditInfo() { return I.default.getFullState()[this.type] } getCurrentValue() { return this.getEditInfo().proto } async updateAsync(e, t, n) { await this.loadIfNecessary(); let i = this.ProtoClass.fields.find(t => t.localName === e); if (null == i) throw Error("Unknown proto field name ".concat(String(e))); let r = i.T(), s = this.getCurrentValue()[e], a = null != s ? r.fromBinary(r.toBinary(s), T.BINARY_READ_OPTIONS) : r.create(); if (!1 === t(a)) return; let o = this.ProtoClass.create(); o[e] = a, __OVERLAY__ ? d.default.dispatch({ type: "USER_SETTINGS_PROTO_ENQUEUE_UPDATE", settings: { type: this.type, proto: o }, delaySeconds: n, jitter: n === f.UserSettingsDelay.AUTOMATED || n === f.UserSettingsDelay.DAILY, partial: !0, resetEditInfo: !1, local: !0 }) : (this.logger.log("Updating ".concat(String(e), " with delay ").concat(n)), this.markDirty(o, { delaySeconds: n, jitter: n === f.UserSettingsDelay.AUTOMATED || n === f.UserSettingsDelay.DAILY })) } markDirty(e, t) { var n; r()(!__OVERLAY__, "this cannot run in the overlay"); let { editInfo: i } = this.getEditInfo(), s = { timeout: i.timeout }; if (!i.loaded) throw Error("Cannot edit user settings proto because we have not yet loaded the stored version from the DB"); !1 !== t.dispatch && d.default.dispatch({ type: "USER_SETTINGS_PROTO_UPDATE", settings: { type: this.type, proto: e }, partial: !0, local: !0 }); let a = null !== (n = t.delaySeconds) && void 0 !== n ? n : 0; if (null != s.timeout && a < i.timeoutDelay && !i.rateLimited && (clearTimeout(s.timeout), s.timeout = void 0), null == s.timeout) { let e = a * _.default.Millis.SECOND; t.jitter && (e += Math.floor(Math.random() * Math.min(e, 30 * _.default.Millis.SECOND))), this.logger.log("Scheduling save from markDirty"), s.timeout = setTimeout(this.persistChanges, e), s.timeoutDelay = a } null != t.cleanup && (s.cleanupFuncs = [...i.cleanupFuncs, ...t.cleanup]), null == i.protoToSave ? s.protoToSave = e : s.protoToSave = (0, T.mergeTopLevelFields)(this.ProtoClass, i.protoToSave, e), this.dispatchChanges(s) } dispatchChanges(e) { d.default.dispatch({ type: "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO", settings: { changes: e, type: this.type } }) } saveLastSendTime() { var e; let t = null !== (e = u.Storage.get(A)) && void 0 !== e ? e : {}; t[this.type] = Date.now(), u.Storage.set(A, t) } async loadIfNecessary(e) { if (__OVERLAY__) { d.default.dispatch({ type: "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY", settingsType: this.type }); return } let { editInfo: t } = this.getEditInfo(); if (e || !t.loaded && !t.loading) { this.logger.log("Loading proto"), this.dispatchChanges({ loading: !0 }); try { let { body: { settings: t } } = await a.HTTP.get({ url: S.Endpoints.USER_SETTINGS_PROTO(this.type) }), n = (0, T.b64ToProto)(this.ProtoClass, t); if (null == n) { this.dispatchChanges({ loading: !1, loaded: !0 }); return } let i = E.default[this.type], { proto: r, isDirty: s, cleanupFuncs: o } = (0, T.runMigrations)(n, i); return await d.default.dispatch({ type: "USER_SETTINGS_PROTO_UPDATE", settings: { type: this.type, proto: n }, resetEditInfo: s || e, local: !1 }), s && this.markDirtyFromMigration(r, o), n } catch (e) { throw this.dispatchChanges({ loading: !1 }), e } } } markDirtyFromMigration(e, t) { r()(!__OVERLAY__, "this cannot run in the overlay"), this.logger.log("Marking dirty due to migrates"), r()(null == this.getEditInfo().editInfo.offlineEditDataVersion, "offline changes are not supported with migrations"), this.markDirty(e, { cleanup: t, dispatch: !1, delaySeconds: f.UserSettingsDelay.AUTOMATED, jitter: !0 }) } markDirtyIfHasPendingChange(e) { this.beforeSendCallbacks.some(e => { let { hasChanges: t } = e; return t() }) && this.markDirty(this.ProtoClass.create(), { dispatch: !1, delaySeconds: 0, cleanup: e }) } scheduleSaveFromOfflineEdit() { r()(!__OVERLAY__, "this cannot run in the overlay"), this.logger.log("Scheduling save from offline edit"); let { editInfo: e } = this.getEditInfo(); r()(null != e.protoToSave, "protoToSave cannot be null"), r()(null != e.offlineEditDataVersion, "offlineEditDataVersion cannot be null"), r()(null == e.timeout, "timeout must not be set already"); let t = 5e3 + Math.floor(5e3 * Math.random()), n = setTimeout(this.persistChanges, t); this.dispatchChanges({ timeout: n, timeoutDelay: t }) } constructor(e, t) { h(this, "ProtoClass", void 0), h(this, "type", void 0), h(this, "logger", void 0), h(this, "beforeSendCallbacks", void 0), h(this, "lastSendTime", void 0), h(this, "persistChanges", void 0), this.ProtoClass = e, this.type = t, this.beforeSendCallbacks = [], this.lastSendTime = 0, this.persistChanges = async () => { r()(!__OVERLAY__, "this cannot run in the overlay"), this.logger.log("Persisting proto"); let { editInfo: e } = this.getEditInfo(); if (null == e.protoToSave) { this.logger.log("Not persisting proto because the proto was null"); return } this.beforeSendCallbacks.forEach(t => { let { processProto: n } = t; return n(e.protoToSave) }); let t = (0, T.protoToB64)(this.ProtoClass, e.protoToSave); if (null == t || "" === t) { this.logger.log("Not persisting proto because there is nothing to change"); return } try { this.saveLastSendTime(); let { body: n } = await a.HTTP.patch({ url: S.Endpoints.USER_SETTINGS_PROTO(this.type), body: { settings: t, required_data_version: e.offlineEditDataVersion } }); n.out_of_date && this.logger.log("Proto was out of date, discarding changes"), this.getEditInfo().editInfo.cleanupFuncs.forEach(e => e()); let i = (0, T.b64ToProto)(this.ProtoClass, n.settings); if (null == i) return; d.default.dispatch({ type: "USER_SETTINGS_PROTO_UPDATE", settings: { proto: i, type: this.type }, resetEditInfo: !0, wasSaved: !0, local: !1 }) } catch (e) { var n, i; if (429 === e.status) { this.logger.log("Rate limited, scheduling retry"); let t = setTimeout(this.persistChanges, Math.min(30 * _.default.Millis.SECOND, (null !== (i = e.body.retry_after) && void 0 !== i ? i : 60) * _.default.Millis.SECOND)); this.dispatchChanges({ rateLimited: !0, timeout: t }) } else if (400 === e.status && (null === (n = e.body) || void 0 === n ? void 0 : n.code) === S.AbortCodes.INVALID_USER_SETTINGS_DATA) throw this.logger.log("Reloading do to invalid data"), this.loadIfNecessary(!0), e; else throw this.logger.log("Unknown user settings error"), e } }, this.logger = new s.Logger(this.ProtoClass.typeName) } } let p = new N(l.PreloadedUserSettings, f.UserSettingsTypes.PRELOADED_USER_SETTINGS), O = new N(o.FrecencyUserSettings, f.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS), C = { [f.UserSettingsTypes.PRELOADED_USER_SETTINGS]: p, [f.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS]: O }; function R(e, t, n) { return p.updateAsync("guilds", n => (0, T.mutateUserGuildSettingsInternal)(n, e, t), n) } function g(e, t, n, i) { return R(e, e => (0, T.mutateUserChannelSettingsInternal)(e, t, n), i) } function L(e) { return p.updateAsync("userContent", t => { if ((0, c.hasBit)(t.dismissedContents, e)) return !1; t.dismissedContents = (0, c.addBit)(t.dismissedContents, e) }, f.UserSettingsDelay.INFREQUENT_USER_ACTION) } function v(e) { return p.updateAsync("userContent", t => { if (!(0, c.hasBit)(t.dismissedContents, e)) return !1; t.dismissedContents = (0, c.removeBit)(t.dismissedContents, e) }, f.UserSettingsDelay.INFREQUENT_USER_ACTION) } function D() { return p.updateAsync("userContent", e => { e.dismissedContents = new Uint8Array }, f.UserSettingsDelay.INFREQUENT_USER_ACTION) } function M() { return p.updateAsync("userContent", e => { let t = new Uint8Array; for (let e of Object.keys(l.DismissibleContent)) t = (0, c.addBit)(t, l.DismissibleContent[e]); e.dismissedContents = t }, f.UserSettingsDelay.INFREQUENT_USER_ACTION) } }, 581883: function(e, t, n) { "use strict"; n.r(t); var i, r = n("512722"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("442837"), u = n("377108"), d = n("524437"), _ = n("835913"), c = n("570140"), E = n("262847"), I = n("48481"), T = n("526761"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = { ProtoClass: d.PreloadedUserSettings, proto: d.PreloadedUserSettings.create(), lazyLoaded: !1, editInfo: (0, T.createEmptyEditInfo)() }, h = { ProtoClass: u.FrecencyUserSettings, proto: u.FrecencyUserSettings.create(), lazyLoaded: !0, editInfo: (0, T.createEmptyEditInfo)() }, A = { [T.UserSettingsTypes.PRELOADED_USER_SETTINGS]: S, [T.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS]: h }, m = !1; function N() { p() } function p() { Object.values(A).forEach(e => { if (null != e.editInfo.timeout) { var t, n; clearTimeout(e.editInfo.timeout), e.editInfo.timeout = void 0, e.editInfo.timeoutDelay = Number.MAX_SAFE_INTEGER, e.editInfo.rateLimited = !1, e.editInfo.offlineEditDataVersion = null !== (n = null === (t = e.proto.versions) || void 0 === t ? void 0 : t.dataVersion) && void 0 !== n ? n : 0 } }) } function O(e) { null != e.editInfo.timeout && clearTimeout(e.editInfo.timeout), e.editInfo = (0, T.createEmptyEditInfo)() } function C(e) { let { settings: { proto: t, type: n }, partial: i, resetEditInfo: r, local: a } = e; m = !a; let o = A[n]; r && O(o), i ? (o.proto = (0, I.mergeTopLevelFields)(o.ProtoClass, o.proto, t), s()("string" != typeof o.proto, "UserSettingsProto cannot be a string")) : (o.proto = t, s()("string" != typeof o.proto, "UserSettingsProto cannot be a string"), o.editInfo.loaded = !0, o.editInfo.loading = !1) } function R(e) { null != e && o().forEach(A, (t, n) => { var i, r; let a = e[Number(n)]; if (null == a) return; let o = null !== (i = null == a ? void 0 : a.proto) && void 0 !== i ? i : "", l = (0, I.b64ToProto)(t.ProtoClass, o); if (null == l) return; t.proto = l, s()("string" != typeof t.proto, "UserSettingsProto cannot be a string"); let u = null !== (r = null == a ? void 0 : a.protoToSave) && void 0 !== r ? r : null; if (null == u || null == a.offlineEditDataVersion) return; let d = (0, I.b64ToProto)(t.ProtoClass, u); null != d && (t.editInfo.protoToSave = d, t.editInfo.offlineEditDataVersion = a.offlineEditDataVersion) }) } class g extends(i = l.default.PersistedStore) { initialize(e) { R(e) } getState() { return this.computeState() } computeState() { return o().mapValues(A, e => { let t = { proto: (0, I.protoToB64)(e.ProtoClass, e.proto) }; return null != e.editInfo.offlineEditDataVersion && null != e.editInfo.protoToSave && (t.protoToSave = (0, I.protoToB64)(e.ProtoClass, e.editInfo.protoToSave), t.offlineEditDataVersion = e.editInfo.offlineEditDataVersion), t }) } hasLoaded(e) { return A[e].editInfo.loaded } get settings() { return S.proto } get frecencyWithoutFetchingLatest() { return h.proto } get wasMostRecentUpdateFromServer() { return m } getFullState() { return A } getGuildFolders() { var e; let t = null === (e = S.proto.guildFolders) || void 0 === e ? void 0 : e.folders; return null == t ? null : t.map(e => { var t, n, i; let r = null === (t = e.id) || void 0 === t ? void 0 : t.value, s = null === (n = e.color) || void 0 === n ? void 0 : n.value; return { guildIds: e.guildIds, folderId: null == r ? void 0 : Number(r), folderName: null === (i = e.name) || void 0 === i ? void 0 : i.value, folderColor: null == s ? void 0 : Number(s) } }) } getGuildRecentsDismissedAt(e) { var t, n; if (null == e) return 0; let i = null === (n = this.settings.guilds) || void 0 === n ? void 0 : null === (t = n.guilds[e]) || void 0 === t ? void 0 : t.guildRecentsDismissedAt; return null == i ? 0 : _.Timestamp.toDate(i).getTime() } getDismissedGuildContent(e) { var t, n, i; return null == e ? null : null === (i = this.settings.guilds) || void 0 === i ? void 0 : null === (n = i.guilds) || void 0 === n ? void 0 : null === (t = n[e]) || void 0 === t ? void 0 : t.dismissedGuildContent } getGuildsProto() { var e, t; return null !== (t = null === (e = this.settings.guilds) || void 0 === e ? void 0 : e.guilds) && void 0 !== t ? t : null } } f(g, "displayName", "UserSettingsProtoStore"), f(g, "persistKey", "UserSettingsProtoStore-Cache"), t.default = new g(c.default, { CACHE_LOADED: function(e) { let { userSettings: t } = e; R(t) }, USER_SETTINGS_PROTO_UPDATE: C, USER_SETTINGS_PROTO_ENQUEUE_UPDATE: C, USER_SETTINGS_PROTO_UPDATE_EDIT_INFO: function(e) { let { settings: { type: t, changes: n } } = e; s()(!__OVERLAY__, "this cannot run in the overlay"); let i = A[t]; return i.editInfo = { ...i.editInfo, ...n }, !1 }, CONNECTION_OPEN: function(e) { let { userSettingsProto: t } = e; null != t && (S.proto = t, s()("string" != typeof S.proto, "UserSettingsProto cannot be a string")); let { proto: n, isDirty: i, cleanupFuncs: r } = (0, I.runMigrations)(S.proto, E.default[T.UserSettingsTypes.PRELOADED_USER_SETTINGS]); i && O(S), S.proto = n, s()("string" != typeof S.proto, "UserSettingsProto cannot be a string"), S.editInfo.triggeredMigrations = i, S.editInfo.cleanupFuncs = r, S.editInfo.loaded = !0, Object.values(A).forEach(e => { e.lazyLoaded && (e.editInfo.loaded = !1, e.editInfo.loading = !1) }), p() }, CONNECTION_CLOSED: N, CONNECTION_RESUMED: N, OVERLAY_INITIALIZE: function(e) { let { userSettingsProto: t } = e; S.proto = (0, I.b64ToPreloadedUserSettingsProto)(t), s()("string" != typeof S.proto, "UserSettingsProto cannot be a string") }, LOGOUT: function() { p(), Object.values(A).forEach(e => { e.proto = e.ProtoClass.create(), e.editInfo = (0, T.createEmptyEditInfo)() }) } }) }, 48481: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BINARY_READ_OPTIONS: function() { return _ }, b64ToPreloadedUserSettingsProto: function() { return T }, b64ToProto: function() { return I }, b64ToProtoWithType: function() { return E }, mergeTopLevelFields: function() { return h }, mutateUserChannelSettings: function() { return m }, mutateUserChannelSettingsInternal: function() { return N }, mutateUserGuildSettingsInternal: function() { return A }, protoToB64: function() { return S }, protoToB64WithType: function() { return f }, runMigrations: function() { return p }, serializeUsageHistory: function() { return O } }), n("411104"), n("47120"), n("653041"); var i = n("578012"), r = n("392711"), s = n.n(r), a = n("377108"), o = n("524437"), l = n("397696"), u = n("526761"), d = n("981631"); let _ = { readerFactory: e => new i.BinaryReader(e, new TextDecoder("utf-8")) }, c = { [u.UserSettingsTypes.PRELOADED_USER_SETTINGS]: o.PreloadedUserSettings, [u.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS]: a.FrecencyUserSettings }; function E(e, t) { return null != t && e in c ? I(c[e], t) : null } function I(e, t) { if (null == t) return null; let n = (0, i.base64decode)(t); try { return e.fromBinary(n, _) } catch (e) { throw Error("Settings proto failed to deserialize (potentially corrupt): ".concat(e)) } } function T(e) { return I(o.PreloadedUserSettings, e) } function f(e, t) { return S(c[e], t) } function S(e, t) { return (0, i.base64encode)(e.toBinary(t)) } function h(e, t, n) { for (let e in t = { ...t }, n) delete t[e]; return e.mergePartial(t, n), t } function A(e, t, n) { return (null == t || "null" === t) && (t = d.ZERO_STRING_GUILD_ID), !(t in e.guilds) && (e.guilds[t] = o.GuildSettings.create()), n(e.guilds[t]) } function m(e, t, n, i) { var r, s, a; return r = e, s = t, a = e => N(e, n, i), null == r.guilds && (r.guilds = o.AllGuildSettings.create()), A(r.guilds, s, a) } function N(e, t, n) { return !(t in e.channels) && (e.channels[t] = o.ChannelSettings.create()), n(e.channels[t]) } function p(e, t) { null == e.versions && (e.versions = l.Versions.create()); let n = 0; for (let e of t) { if (e.version <= n) throw Error("Migrations are out of order or there is a duplicate version"); n = e.version } let i = .1 > Math.random(), r = !1, s = []; for (let n of t) { var a, o; if (n.version <= e.versions.clientVersion) { i && (null === (a = n.cleanup) || void 0 === a || a.call(n)); continue } let t = n.run(e); if (e.versions.clientVersion = n.version, !1 === t) { null === (o = n.cleanup) || void 0 === o || o.call(n); continue } r = !0, null != n.cleanup && s.push(n.cleanup) } return { proto: e, isDirty: r, cleanupFuncs: s } } function O(e, t) { let n = Object.entries(e); if (n.length > t) for (n = s().sortBy(n, e => { let [t, n] = e; return n.recentUses[n.recentUses.length - 1] }).reverse(); n.length > t;) n.pop(); let i = {}; for (let [e, t] of n) { let n = a.FrecencyItem.create(); n.frecency = t.frecency, n.recentUses = t.recentUses.filter(e => null != e && e > 0).map(String), n.score = Math.round(t.score), n.totalUses = t.totalUses, i[e] = n } return i } }, 443684: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("570140"), r = n("37234"), s = n("981631"); function a() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : { openWithoutBackstack: !1 }; i.default.dispatch({ type: "USER_SETTINGS_MODAL_OPEN", section: e, subsection: t, ...n }), (0, r.pushLayer)(s.Layers.USER_SETTINGS) } }, 996073: function(e, t, n) { "use strict"; n.r(t); var i = n("470079"), r = n("442837"), s = n("230711"), a = n("607070"), o = n("663389"), l = n("526761"), u = n("981631"); let d = Object.freeze({ [l.UserSettingsScrollPositions.ProfileCustomizationScrollPositions.TRY_IT_OUT]: u.UserSettingsSections.PROFILE_CUSTOMIZATION, [l.UserSettingsScrollPositions.AccessibilityScrollPositions.REDUCED_MOTION]: u.UserSettingsSections.ACCESSIBILITY, [l.UserSettingsScrollPositions.AccessibilityScrollPositions.SYNC_PROFILE_THEME_WITH_USER_THEME]: u.UserSettingsSections.ACCESSIBILITY, [l.UserSettingsScrollPositions.AccessibilityScrollPositions.LEGACY_CHAT_INPUT]: u.UserSettingsSections.ACCESSIBILITY, [l.UserSettingsScrollPositions.VoiceAndVideoScrollPositions.HARDWARE_ACCELERATION]: u.UserSettingsSections.VOICE, [l.UserSettingsScrollPositions.AppearanceScrollPositions.CUSTOM_APP_ICONS]: u.UserSettingsSections.APPEARANCE, [l.UserSettingsScrollPositions.PrivacyAndSafetyScrollPositions.DM_SAFETY_ALERTS]: u.UserSettingsSections.PRIVACY_AND_SAFETY, [l.UserSettingsScrollPositions.PrivacyAndSafetyScrollPositions.MESSAGE_REQUESTS]: u.UserSettingsSections.PRIVACY_AND_SAFETY, [l.UserSettingsScrollPositions.PrivacyAndSafetyScrollPositions.EXPLICIT_MEDIA_REDACTION]: u.UserSettingsSections.PRIVACY_AND_SAFETY }); t.default = function(e, t, n) { let l = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0, u = (0, r.useStateFromStores)([a.default], () => a.default.useReducedMotion), _ = (0, r.useStateFromStores)([o.default], () => o.default.getScrollPosition()); (0, i.useEffect)(() => { let i = e.current; null != i && t === _ && setTimeout(() => { let e = requestAnimationFrame(() => { i.scrollIntoView({ behavior: u ? "auto" : "smooth", ...n }), s.default.clearScrollPosition(d[t]) }); return () => cancelAnimationFrame(e) }, l) }, [e, t, _, u, n, l]) } }, 357269: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"), n("757143"); var i = n("593473"), r = n("981631"); let s = /-/g; function a(e) { let [, , t, n] = e.split("/"), a = null == t ? void 0 : t.toUpperCase().replace(s, "_"), o = null == n ? void 0 : n.toUpperCase().replace(s, "_"); if (r.UserSettingsSections.hasOwnProperty(a) && (null == o || "" === o || r.UserSettingsSections.hasOwnProperty(o))) { let { source: e } = (0, i.parse)(location.search); return { source: e, section: r.UserSettingsSections[a], subsection: o } } return null } }, 842146: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showModal: function() { return s } }); var i = n("735250"); n("470079"); var r = n("481060"); function s(e) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("74112"), n.e("4419")]).then(n.bind(n, "745367")); return n => (0, i.jsx)(t, { analyticsLocation: e, ...n }) }) } }, 293177: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showModal: function() { return s } }); var i = n("735250"); n("470079"); var r = n("481060"); function s(e, t) { (0, r.openModalLazy)(async () => { let { default: r } = await Promise.all([n.e("99387"), n.e("74112"), n.e("10667")]).then(n.bind(n, "253762")); return n => (0, i.jsx)(r, { analyticsLocation: e, platformType: t, ...n }) }) } }, 349407: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showModal: function() { return s } }); var i = n("735250"); n("470079"); var r = n("481060"); function s(e) { (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("49368"), n.e("74112"), n.e("61366")]).then(n.bind(n, "598576")); return n => (0, i.jsx)(t, { analyticsLocation: e, ...n }) }) } }, 932724: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getLastUsedVideoBackgroundOption: function() { return a } }), n("470079"), n("442837"); var i = n("581883"); n("594174"); var r = n("74538"), s = n("647177"); function a(e) { var t; return function(e, t) { let n = (0, s.getVideoBackgroundOptionFromProto)(e, t.id); return (0, s.isCustomBackgroundOption)(n) && !r.default.canUseCustomBackgrounds(t) ? null : "number" != typeof n || (0, s.isDefaultBackgroundOption)(n) ? n : null }(null === (t = i.default.settings.voiceAndVideo) || void 0 === t ? void 0 : t.videoBackgroundFilterDesktop, e) } }, 716161: function(e, t, n) { "use strict"; n.r(t), n.d(t, { applyMediaFilterSettings: function() { return f }, deleteVideoFilterAsset: function() { return I }, errorApplyingMediaFilterSettings: function() { return h }, fetchVideoFilterAssets: function() { return c }, saveLastUsedBackgroundOption: function() { return T }, startApplyMediaFilterSettings: function() { return S }, uploadVideoFilterAsset: function() { return E } }); var i = n("544891"), r = n("570140"), s = n("675478"), a = n("131951"), o = n("594174"), l = n("932724"), u = n("647177"), d = n("901757"), _ = n("981631"); async function c() { let e = await i.HTTP.get(_.Endpoints.VIDEO_FILTER_ASSETS); return r.default.dispatch({ type: "VIDEO_FILTER_ASSETS_FETCH_SUCCESS", assets: e.body }), e } async function E(e, t, n) { try { let s = await i.HTTP.post({ url: _.Endpoints.VIDEO_FILTER_ASSETS, body: { type: t, asset: e, last_used: null == n ? void 0 : n.toISOString() } }); return r.default.dispatch({ type: "VIDEO_FILTER_ASSET_UPLOAD_SUCCESS", videoFilterAsset: s.body }), s.body } catch (e) { throw new d.default(e) } } async function I(e) { await i.HTTP.del(_.Endpoints.VIDEO_FILTER_ASSET(e.id)); let t = (0, l.getLastUsedVideoBackgroundOption)(o.default.getCurrentUser()); (0, u.isCustomBackgroundOption)(t) && t.id === e.id && T(null), r.default.dispatch({ type: "VIDEO_FILTER_ASSET_DELETE_SUCCESS", videoFilterAsset: e }) } async function T(e) { if (await s.PreloadedUserSettingsActionCreators.updateAsync("voiceAndVideo", t => { t.videoBackgroundFilterDesktop = (0, u.getVideoBackgroundProtoFromOption)(e) }, s.UserSettingsDelay.FREQUENT_USER_ACTION), (0, u.isCustomBackgroundOption)(e)) { let t = await i.HTTP.post(_.Endpoints.VIDEO_FILTER_ASSET_LAST_USED(e.id)); r.default.dispatch({ type: "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION", backgroundOption: t.body }) } else r.default.dispatch({ type: "VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION", backgroundOption: e }) } function f(e) { a.default.isSupported() && r.default.dispatch({ type: "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS", settings: e }) } function S() { a.default.isSupported() && r.default.dispatch({ type: "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START" }) } function h() { r.default.dispatch({ type: "MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR" }) } }, 678916: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ANIMATED_DEFAULT_VIDEO_BACKGROUNDS: function() { return o }, BACKGROUND_REPLACEMENT_SIZE: function() { return d }, BLUR_BACKGROUND_OPTION: function() { return u }, DEFAULT_VIDEO_BACKGROUND_SORT: function() { return l }, DefaultVideoBackground: function() { return r }, MAX_BACKGROUND_IMAGE_UPLOAD_FILESIZE_BYTES: function() { return _ }, VideoFilterType: function() { return i } }), n("724458"), (s = i || (i = {}))[s.BACKGROUND = 0] = "BACKGROUND", (a = r || (r = {}))[a.OPTION_1 = 0] = "OPTION_1", a[a.OPTION_2 = 1] = "OPTION_2", a[a.OPTION_3 = 2] = "OPTION_3", a[a.OPTION_4 = 3] = "OPTION_4", a[a.OPTION_7 = 7] = "OPTION_7", a[a.OPTION_8 = 8] = "OPTION_8", a[a.OPTION_9 = 9] = "OPTION_9", a[a.OPTION_10 = 10] = "OPTION_10"; let o = [7, 8, 9, 10], l = [7, 8, 9, 10, 0, 1, 2, 3].reduce((e, t, n) => ({ ...e, [t]: n }), {}), u = "blur", d = { width: 1280, height: 720 }, _ = 10485760 }, 634041: function(e, t, n) { "use strict"; n.r(t), n("724458"); var i, r, s, a, o = n("442837"), l = n("46973"), u = n("570140"), d = n("581883"), _ = n("131951"), c = n("944486"), E = n("594174"), I = n("647177"); let T = !1, f = null, S = !1, h = {}; function A(e) { var t; let n = E.default.getCurrentUser(); if (null == n) return !1; let i = null != e ? e : (0, I.getVideoBackgroundOptionFromProto)(null === (t = d.default.settings.voiceAndVideo) || void 0 === t ? void 0 : t.videoBackgroundFilterDesktop, n.id); return null != c.default.getVoiceChannelId() && _.default.isVideoEnabled() && null != i } function m() { f !== c.default.getVoiceChannelId() && (S = !1), A() && (S = !0), f = c.default.getVoiceChannelId() } class N extends(i = o.default.Store) { initialize() { this.waitFor(d.default, c.default, _.default), this.syncWith([c.default, _.default], m) } get videoFilterAssets() { return h } get hasBeenApplied() { return T } get hasUsedBackgroundInCall() { return S } } a = "VideoBackgroundStore", (s = "displayName") in(r = N) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new N(u.default, { VIDEO_FILTER_ASSETS_FETCH_SUCCESS: function(e) { let { assets: t } = e; h = t.reduce((e, t) => ({ ...e, [t.id]: t }), {}) }, VIDEO_FILTER_ASSET_UPLOAD_SUCCESS: function(e) { let { videoFilterAsset: t } = e; h = { ...h, [t.id]: t } }, VIDEO_FILTER_ASSET_DELETE_SUCCESS: function(e) { let { videoFilterAsset: t } = e; h = { ...h }, delete h[t.id] }, VIDEO_SAVE_LAST_USED_BACKGROUND_OPTION: function(e) { let { backgroundOption: t } = e; A(t) && (S = !0) }, MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS: function(e) { let { settings: t } = e; l.FilterSettingsKey.CAMERA_BACKGROUND_LIVE in t && (T = !0) } }) }, 647177: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getEffectAnalyticsType: function() { return E }, getEffectDetailAnalyticsName: function() { return I }, getVideoBackgroundOptionFromProto: function() { return A }, getVideoBackgroundProtoFromOption: function() { return h }, isCustomBackgroundOption: function() { return d }, isDefaultBackgroundOption: function() { return _ }, trackBackgroundOptionAdded: function() { return f }, trackBackgroundOptionDeleted: function() { return S }, trackBackgroundOptionUpdated: function() { return T } }); var i = n("367907"), r = n("592125"), s = n("19780"), a = n("626135"), o = n("768581"), l = n("678916"), u = n("981631"); function d(e) { return null != e && "object" == typeof e && "id" in e && e.type === l.VideoFilterType.BACKGROUND } function _(e) { return "number" == typeof e && e in l.DefaultVideoBackground } function c(e) { return _(e) ? l.ANIMATED_DEFAULT_VIDEO_BACKGROUNDS.includes(e) : !!d(e) && ((0, o.isAnimatedIconHash)(e.asset) || (0, o.isVideoAssetHash)(e.asset)) } function E(e) { return null != e ? "Video Background" : "None" } function I(e) { if (null == e) return "None"; if (d(e)) return "Custom"; if ("blur" === e) return "Blur"; else return "Preset - ".concat(function(e) { switch (e) { case l.DefaultVideoBackground.OPTION_1: return "Cybercity"; case l.DefaultVideoBackground.OPTION_2: return "Discord the Movie"; case l.DefaultVideoBackground.OPTION_3: return "Wumpus Vacation"; case l.DefaultVideoBackground.OPTION_4: return "Vaporwave"; case l.DefaultVideoBackground.OPTION_7: return "Capernite Day"; case l.DefaultVideoBackground.OPTION_8: return "Capernite Night"; case l.DefaultVideoBackground.OPTION_9: return "Hacker Den"; case l.DefaultVideoBackground.OPTION_10: return "Wumpice" } }(e)) } function T(e, t, n) { let o = s.default.getGuildId(), l = s.default.getChannelId(), d = r.default.getChannel(l), _ = (0, i.getVoiceStateMetadata)(o, l, !0); a.default.track(u.AnalyticEvents.VIDEO_EFFECT_UPDATED, { location: t, effect_type: E(e), effect_detail: I(e), effect_state: n, channel_id: l, channel_type: null == d ? void 0 : d.type, guild_id: o, voice_state_count: _.voice_state_count, video_stream_count: _.video_stream_count, media_session_id: s.default.getMediaSessionId(), rtc_connection_id: s.default.getRTCConnectionId(), is_animated: c(e) }) } function f(e, t, n) { a.default.track(u.AnalyticEvents.VIDEO_BACKGROUND_ADDED, { is_animated: c(e), is_video: t, is_from_tenor: n }) } function S(e) { a.default.track(u.AnalyticEvents.VIDEO_BACKGROUND_DELETED, { is_animated: c(e) }) } function h(e) { if (null == e) return { oneofKind: void 0 }; if (d(e)) return { oneofKind: "customAsset", customAsset: { id: e.id, assetHash: e.asset } }; if ("blur" === e) return { oneofKind: "blur", blur: { useBlur: !0 } }; else return { oneofKind: "presetOption", presetOption: e } } function A(e, t) { if (null == e || void 0 === e.oneofKind) return null; switch (e.oneofKind) { case "customAsset": return { type: l.VideoFilterType.BACKGROUND, id: e.customAsset.id, user_id: t, asset: e.customAsset.assetHash }; case "blur": return e.blur.useBlur ? "blur" : null; case "presetOption": return e.presetOption } } }, 901757: function(e, t, n) { "use strict"; n.r(t); var i, r, s = n("544891"), a = n("689938"); (i || (i = {})).ASSET_SIZE = "BINARY_TYPE_MAX_SIZE", (r || (r = {})).ASSET = "asset"; class o extends s.V8APIError { constructor(e, t) { var n; super(e, t, a.default.Messages.VIDEO_BACKGROUND_ERROR_UPLOAD); let i = this.getFieldErrors("asset"); null != i && (null === (n = i[0]) || void 0 === n ? void 0 : n.code) === "BINARY_TYPE_MAX_SIZE" && (this.message = a.default.Messages.VIDEO_BACKGROUND_ERROR_UPLOAD_FILE_SIZE) } } t.default = o }, 672339: function(e, t, n) { "use strict"; n.r(t), n.d(t, { applyBackgroundOptionLive: function() { return A }, applyBackgroundOptionPreview: function() { return m }, applyInitialVideoBackgroundOption: function() { return N } }), n("66153"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); var i = n("512722"), r = n.n(i), s = n("46973"), a = n("594174"), o = n("768581"), l = n("932724"), u = n("716161"), d = n("634041"), _ = n("647177"), c = n("63985"), E = n("638457"), I = n("678916"), T = n("981631"); async function f(e) { let t = await fetch(e), n = await t.blob(); return new Uint8ClampedArray(await n.arrayBuffer()) } function S(e, t, n, i, r) { (0, u.applyMediaFilterSettings)({ [e]: { graph: n, target: t, image: i, blob: r } }) } async function h(e, t, n) { var i, a; let l, d = !1; if (null == n) return S(e, t, s.FilterSettingsGraph.NONE); if (n === I.BLUR_BACKGROUND_OPTION) return S(e, t, s.FilterSettingsGraph.BACKGROUND_BLUR); if ("string" == typeof n || "number" == typeof n) { ; let e = (0, c.default)()[n]; d = null !== (i = e.isVideo) && void 0 !== i && i, l = e.source } else { let e = n.asset; d = (0, o.isAnimatedIconHash)(e) || (0, o.isVideoAssetHash)(e), l = (0, o.getVideoFilterAssetURL)({ userId: n.user_id, assetId: n.id, assetHash: e, size: I.BACKGROUND_REPLACEMENT_SIZE.width }) } if (null != l) try { ; let n = d ? void 0 : await (a = l, new Promise((e, t) => { let n = new Image; n.crossOrigin = "anonymous", n.onload = () => { let t = document.createElement("canvas"); t.width = I.BACKGROUND_REPLACEMENT_SIZE.width, t.height = I.BACKGROUND_REPLACEMENT_SIZE.height; let i = t.getContext("2d"); r()(null != i, "Canvas context is missing"); let s = n.height / n.width, a = I.BACKGROUND_REPLACEMENT_SIZE.height, o = I.BACKGROUND_REPLACEMENT_SIZE.height / s, l = (t.width - o) / 2, u = (t.height - a) / 2; i.drawImage(n, l, u, o, a); let d = i.getImageData(0, 0, t.width, t.height); e({ data: d.data, width: d.width, height: d.height, pixelFormat: "rgba" }) }, n.onerror = e => t(e), n.src = a })), i = d ? await f(l) : void 0; S(e, t, s.FilterSettingsGraph.BACKGROUND_REPLACEMENT, n, i) } catch (e) { (0, u.errorApplyingMediaFilterSettings)() } } async function A(e, t) { let { track: n = !0, location: i } = t; await h(s.FilterSettingsKey.CAMERA_BACKGROUND_LIVE, { type: s.FilterTargetType.INPUT_DEVICE }, e), n && (0, _.trackBackgroundOptionUpdated)(e, i, "Enabled") } async function m(e, t, n) { let { track: i = !0, location: r } = n; (0, u.startApplyMediaFilterSettings)(), await h(s.FilterSettingsKey.CAMERA_BACKGROUND_PREVIEW, { type: s.FilterTargetType.STREAM, streamId: t }, e), i && (0, _.trackBackgroundOptionUpdated)(e, r, "Preview") } function N() { let e = a.default.getCurrentUser(); if (null == e) return; let t = (0, l.getLastUsedVideoBackgroundOption)(e); (0, E.default)() && !d.default.hasBeenApplied && null != t && A(t, { track: !1 }).catch(T.NOOP) } }, 63985: function(e, t, n) { "use strict"; n.r(t); var i = n("678916"), r = n("190378"), s = n("689938"), a = n("671231"), o = n("647248"), l = n("912855"), u = n("320236"), d = n("502058"), _ = n("794951"), c = n("655142"), E = n("166453"); t.default = () => ({ [i.DefaultVideoBackground.OPTION_1]: { id: i.DefaultVideoBackground.OPTION_1, source: l, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_1 }, [i.DefaultVideoBackground.OPTION_2]: { id: i.DefaultVideoBackground.OPTION_2, source: d, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_2 }, [i.DefaultVideoBackground.OPTION_3]: { id: i.DefaultVideoBackground.OPTION_3, source: _, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_3 }, [i.DefaultVideoBackground.OPTION_4]: { id: i.DefaultVideoBackground.OPTION_4, source: c, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_4 }, [i.DefaultVideoBackground.OPTION_7]: { id: i.DefaultVideoBackground.OPTION_7, source: a, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_7, isVideo: !0, hotspotLocation: r.HotspotLocations.ANIMATED_VIDEO_BG_CAPERNITE_DAY_NEW }, [i.DefaultVideoBackground.OPTION_8]: { id: i.DefaultVideoBackground.OPTION_8, source: o, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_8, isVideo: !0, hotspotLocation: r.HotspotLocations.ANIMATED_VIDEO_BG_CAPERNITE_NIGHT_NEW }, [i.DefaultVideoBackground.OPTION_9]: { id: i.DefaultVideoBackground.OPTION_9, source: u, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_9, isVideo: !0, hotspotLocation: r.HotspotLocations.ANIMATED_VIDEO_BG_HACKER_DEN_NEW }, [i.DefaultVideoBackground.OPTION_10]: { id: i.DefaultVideoBackground.OPTION_10, source: E, name: s.default.Messages.VIDEO_BACKGROUND_DEFAULT_BACKGROUND_NAME_10, isVideo: !0, hotspotLocation: r.HotspotLocations.ANIMATED_VIDEO_BG_WUMPICE_NEW } }) }, 638457: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("131951"), r = n("65154"); function s() { var e; let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : i.default; return (e = t).supports(r.Features.MEDIAPIPE) && Object.values(e.getVideoDevices()).length > 0 } }, 898531: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("442837"), r = n("131951"), s = n("638457"); function a() { return (0, i.useStateFromStores)([r.default], () => (0, s.default)(r.default)) } }, 923973: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("442837"), a = n("131951"), o = n("65154"); function l() { let { enabled: e, cameraUnavailable: t } = (0, s.useStateFromStoresObject)([a.default], () => { var e, t; let n = null === (t = null === (e = r()(a.default.getVideoDevices()).values().first()) || void 0 === e ? void 0 : e.disabled) || void 0 === t || t; return { enabled: a.default.isVideoEnabled(), cameraUnavailable: n || !a.default.supports(o.Features.VIDEO) } }); return { enabled: e, cameraUnavailable: t } } }, 189771: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o }, getVideoPermission: function() { return l } }); var i = n("442837"), r = n("102172"), s = n("430824"), a = n("496675"); function o(e) { return (0, i.useStateFromStores)([s.default, a.default], () => e.isPrivate() || (0, r.canStreamInChannel)(e, s.default, a.default, !1), [e]) } function l(e) { return e.isPrivate() || (0, r.canStreamInChannel)(e, s.default, a.default, !1) } }, 67844: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getVideoButtonLabel: function() { return s } }); var i = n("981631"), r = n("689938"); function s(e) { let { enabled: t, join: n, channel: s, cameraUnavailable: a, hasPermission: o, channelLimit: l = -1, channelLimitReached: u = !1 } = e, d = t ? r.default.Messages.CAMERA_OFF : r.default.Messages.CAMERA_ON; return n && (d = (null == s ? void 0 : s.isManaged()) || !(null == s ? void 0 : s.isPrivate()) ? r.default.Messages.CONNECT_TO_VIDEO : r.default.Messages.JOIN_VIDEO_CALL), a && (d = r.default.Messages.CAMERA_UNAVAILABLE), !o && (d = r.default.Messages.ACTIVITY_PANEL_GO_LIVE_TOOLTIP_NO_PERMISSION_IN_VOICE), u && !t && (d = (null == s ? void 0 : s.isGuildStageVoice()) ? l >= i.MAX_STAGE_VIDEO_USER_LIMIT_TIER3 ? r.default.Messages.CAMERA_DISABLED_STAGE_LIMIT_REACHED_MAX : r.default.Messages.CAMERA_DISABLED_STAGE_LIMIT_REACHED : r.default.Messages.CAMERA_DISABLED_LIMIT_REACHED.format({ limit: l })), d } }, 607187: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("546502"); t.default = r.forwardRef(function(e, t) { let { children: n, className: r, style: s, noBorder: l = !1, participantUserId: u } = e; return (0, i.jsx)("div", { className: a()(r, o.tile, { [o.noBorder]: l }), style: s, ref: t, "data-selenium-video-tile": u, children: n }) }) }, 534388: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("287734"), o = n("835473"), l = n("67212"), u = n("493355"), d = n("134598"), _ = n("885110"), c = n("366695"), E = n("937482"), I = n("689938"), T = n("854706"); function f() { let e = (0, r.useStateFromStores)([_.default], () => _.default.getBroadcast()), t = (0, o.useGetOrFetchApplication)(null == e ? void 0 : e.applicationId); if (null == e) return null; let n = () => { (0, d.openBroadcastingPrivacySettingsModal)() }, f = () => { (0, l.stopBroadcast)(), a.default.disconnect() }; return (0, i.jsxs)("div", { className: T.container, children: [null != t && (0, i.jsx)(c.default, { game: t, size: c.default.Sizes.LARGE }), (0, i.jsxs)("div", { className: T.content, children: [(0, i.jsx)(s.Text, { variant: "text-md/semibold", color: "header-primary", children: I.default.Messages.BROADCASTING_CAPTURE_PAUSED }), (0, i.jsx)(s.Text, { variant: "text-sm/medium", color: "header-secondary", children: I.default.Messages.BROADCASTING_CAPTURE_PAUSED_DETAILS }), (0, i.jsxs)("div", { className: T.actions, children: [(0, i.jsx)(s.Tooltip, { text: I.default.Messages.BROADCASTING_SETTINGS, children: e => (0, i.jsx)(s.Clickable, { ...e, onClick: n, children: (0, i.jsx)(E.default, { className: T.button, width: 20, height: 20 }) }) }), (0, i.jsx)(s.Tooltip, { text: I.default.Messages.STOP_BROADCASTING, children: e => (0, i.jsx)(s.Clickable, { ...e, onClick: f, children: (0, i.jsx)(u.default, { className: T.button, width: 20, height: 20 }) }) })] })] })] }) } }, 484286: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("904969"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class d extends(i = s.PureComponent) { static getDerivedStateFromProps(e, t) { let { streamId: n } = e; if (t.aReady) { if (n !== t.aStreamId) return null == n ? { bStreamId: n, bReady: !0, aStreamId: null, aReady: !1 } : { bStreamId: n, bReady: !1 } } else if (n !== t.bStreamId) return null == n ? { aStreamId: n, aReady: !0, bStreamId: null, bReady: !1 } : { aStreamId: n, aReady: !1 }; return null } renderVideo(e, t) { let { children: n, mirror: i, paused: a, component: o } = this.props; if (null == e) { if (null == n) return null; let e = s.Children.only(n); return s.cloneElement(e, { style: { display: t && !i ? void 0 : "none" }, ...e.props }) } return (0, r.jsx)(o, { paused: a, className: l.media, streamId: e, onReady: t ? null : this.handleReady }) } render() { let { mirror: e, className: t } = this.props; return (0, r.jsxs)("div", { className: o()(l.video, t, { [l.mirror]: e }), onDoubleClick: this.handleDoubleClick, onContextMenu: this.handleContextMenu, children: [this.renderVideo(this.state.aStreamId, this.state.aReady), this.renderVideo(this.state.bStreamId, this.state.bReady)] }) } constructor(...e) { super(...e), u(this, "state", { aStreamId: null, aReady: !1, bStreamId: this.props.streamId, bReady: !0 }), u(this, "handleReady", () => { this.state.aReady ? this.setState({ bReady: !0, aStreamId: null, aReady: !1 }) : this.setState({ aReady: !0, bStreamId: null, bReady: !1 }) }), u(this, "handleDoubleClick", e => { let { onDoubleClick: t, id: n } = this.props; null == t || t(e, n) }), u(this, "handleContextMenu", e => { let { onContextMenu: t, id: n } = this.props; null == t || t(e, n) }) } } u(d, "defaultProps", { paused: !0 }), t.default = d }, 685203: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CallTileCTA: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("272903"); function l(e) { let { children: t, onClick: n, className: r, tooltip: l } = e; return (0, i.jsx)(a.Tooltip, { text: l, children: e => { let { onClick: l, ...u } = e; return (0, i.jsx)(a.Button, { ...u, onClick: e => { null == n || n(e), null == l || l() }, innerClassName: o.buttonReset, color: s()(o.cta, r), size: a.Button.Sizes.MIN, children: t }) } }) } }, 112560: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d }, getSizeForWidth: function() { return u } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("285952"), l = n("18280"); function u(e) { return e < 400 ? "small" : e < 1e3 ? "medium" : "large" } function d(e) { let { onCTAClick: t, callToAction: n, header: r, description: u, size: d, className: _, artURL: c, noArt: E = !1, selected: I = !1 } = e; return (0, i.jsxs)(o.default, { className: _, justify: o.default.Justify.CENTER, align: o.default.Align.CENTER, direction: o.default.Direction.VERTICAL, style: { padding: 4 }, children: [!E && null != c && (0, i.jsx)("div", { className: s()(l.art, l[d]), style: { backgroundImage: "url(".concat(c, ")") } }), null != r ? (0, i.jsx)(a.Text, { color: "none", variant: "text-md/semibold", className: l.header, children: r }) : null, null != u ? (0, i.jsx)(a.Text, { color: "none", className: l.description, variant: "text-sm/medium", children: u }) : null, I || null == n ? null : (0, i.jsx)(a.Button, { className: l.outerButton, size: a.Button.Sizes.NONE, color: a.Button.Colors.WHITE, look: a.Button.Looks.BLANK, innerClassName: l.button, onClick: e => { e.stopPropagation(), null == t || t(e) }, children: n })] }) } }, 544384: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return O }, useOtherStreams: function() { return p } }); var i = n("735250"); n("470079"); var r = n("442837"), s = n("481060"), a = n("410575"), o = n("358221"), l = n("418469"), u = n("776031"), d = n("803647"), _ = n("199902"), c = n("131951"), E = n("594174"), I = n("645284"), T = n("990138"), f = n("948573"), S = n("5192"), h = n("358085"), A = n("981631"), m = n("65154"), N = n("689938"); function p(e, t, n) { let i = (0, r.useStateFromStores)([o.default], () => o.default.getSelectedParticipantId(e.id)), s = (0, r.useStateFromStores)([_.default], () => null != i ? _.default.getActiveStreamForStreamKey(i) : null, [i]); return (0, r.useStateFromStoresArray)([E.default], () => { let i = n.filter(e => e.ownerId !== (null == t ? void 0 : t.id)).map(t => ({ stream: t, username: S.default.getName(e.getGuildId(), e.id, E.default.getUser(t.ownerId)) })); return 1 === i.length && i[0].stream.ownerId === (null == s ? void 0 : s.ownerId) ? [] : i }, [e, s, n, t]) } function O(e) { var t; let { channel: n, currentUser: r, activeStreams: o, hideSelfOptions: _ = !1, showReportOption: E = !1, handleGoLive: S, onClose: O, onSelect: C, appContext: R = A.AppContext.APP } = e, g = c.default.supports(m.Features.DESKTOP_CAPTURE_APPLICATIONS), L = null !== (t = o.find(e => e.ownerId === (null == r ? void 0 : r.id))) && void 0 !== t ? t : null, v = p(n, r, o), D = (0, u.default)(L, R), M = (0, l.default)(L, R, A.NOOP_NULL), y = null == L ? (0, i.jsx)(s.MenuItem, { id: "share-your-screen", label: N.default.Messages.SHARE_YOUR_SCREEN, icon: I.default, action: S }) : (0, i.jsxs)(i.Fragment, { children: [h.isPlatformEmbedded ? (0, i.jsx)(s.MenuItem, { id: "stream-settings", label: N.default.Messages.SCREENSHARE_STREAM_QUALITY, children: D }) : null, E ? M : null, g ? (0, i.jsx)(s.MenuItem, { id: "change-windows", label: N.default.Messages.SCREENSHARE_CHANGE_WINDOWS, icon: I.default, action: S }) : null, (0, i.jsx)(s.MenuItem, { id: "stop-streaming", label: N.default.Messages.STOP_STREAMING, icon: T.default, action: () => (0, d.default)(L) })] }); return (0, i.jsx)(a.default, { section: A.AnalyticsSections.CONTEXT_MENU, children: (0, i.jsxs)(s.Menu, { onSelect: C, navId: "manage-streams", onClose: O, "aria-label": null != L ? N.default.Messages.STOP_STREAMING : N.default.Messages.SHARE_YOUR_SCREEN, children: [(0, i.jsx)(s.MenuGroup, { children: v.map(e => { let { stream: t, username: n } = e; return (0, i.jsx)(s.MenuItem, { id: t.ownerId, label: N.default.Messages.STOP_WATCHING_USER.format({ username: n }), icon: f.default, action: () => (0, d.default)(t) }, "manage-stream-menu".concat(t.ownerId)) }) }), _ ? null : y] }) }) } }, 442917: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("512722"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("442837"), c = n("481060"), E = n("846027"), I = n("925549"), T = n("37234"), f = n("367907"), S = n("158631"), h = n("552740"), A = n("358221"), m = n("414910"), N = n("221888"), p = n("933557"), O = n("569545"), C = n("74299"), R = n("863908"), g = n("803647"), L = n("788983"), v = n("703656"), D = n("937995"), M = n("618158"), y = n("922745"), P = n("197016"), U = n("800965"), b = n("445062"), G = n("7188"), w = n("199902"), k = n("314897"), B = n("131951"), V = n("699516"), x = n("594174"), F = n("248402"), H = n("33039"), Y = n("451478"), j = n("783259"), W = n("626135"), K = n("5192"), z = n("51144"), Z = n("534388"), X = n("484286"), Q = n("822296"), q = n("916771"), J = n("792517"), $ = n("560688"), ee = n("127608"), et = n("76021"), en = n("981631"), ei = n("354459"), er = n("430975"), es = n("661781"); function ea(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class eo extends r.PureComponent { get viewProperties() { let { participantOnScreen: e, currentUserId: t, channel: n } = this.props, i = (0, ei.isStreamParticipant)(e), r = null != e && e.type !== ei.ParticipantTypes.ACTIVITY && e.user.id === t; return { canPopout: i && !r, canSettings: i && r, canStopStream: i, canSeeViewers: i, canSeeParticipantName: ((null == e ? void 0 : e.type) === ei.ParticipantTypes.STREAM || (null == e ? void 0 : e.type) === ei.ParticipantTypes.USER) && n.type !== en.ChannelTypes.DM, canDisconnect: !i, isSelf: r } } get streamerPaused() { let { isMainWindowFocused: e, activeSelfStream: t, participantOnScreen: n } = this.props; return null != t && (null == n ? void 0 : n.id) === (0, O.encodeStreamKey)(t) && !e } get activeStreamForSelectedParticipant() { let { participantOnScreen: e, activeStreams: t } = this.props; return (0, ei.isStreamParticipant)(e) ? t.find(t => (0, O.encodeStreamKey)(t) === e.id) : null } getScreenMessage() { let { participantOnScreen: e, currentUserId: t } = this.props; if (!(0, ei.isStreamParticipant)(e)) return null; let n = this.activeStreamForSelectedParticipant; return null == n ? null : (0, R.default)(n, e.user, e.user.id === t, this.streamerPaused) } isEmptyBroadcast() { var e; let { isSelfBroadcasting: t, channel: n } = this.props; return t && (null === (e = n.recipients) || void 0 === e ? void 0 : e.length) === 0 } componentDidMount() { let { channel: e } = this.props; W.default.track(en.AnalyticEvents.VIDEO_LAYOUT_TOGGLED, { video_layout: "pip", ...(0, f.collectVoiceAnalyticsMetadata)(e.id) }) } componentWillUnmount() { let { channel: e } = this.props; W.default.track(en.AnalyticEvents.VIDEO_LAYOUT_TOGGLED, { video_layout: A.default.getLayout(e.id), ...(0, f.collectVoiceAnalyticsMetadata)(e.id) }) } renderStreamState() { let e = this.activeStreamForSelectedParticipant, { participantOnScreen: t } = this.props; if ((null == e ? void 0 : e.state) === en.ApplicationStreamStates.ENDED) return (0, i.jsx)(Q.default, { stream: e, width: ei.PIP_WIDTH }); if ((null == e ? void 0 : e.state) === en.ApplicationStreamStates.FAILED) return (0, i.jsx)(q.default, { stream: e, width: ei.PIP_WIDTH }); if (this.isEmptyBroadcast()) return (0, i.jsx)(Z.default, {}); else if ((null == t ? void 0 : t.type) === ei.ParticipantTypes.HIDDEN_STREAM) return (0, i.jsx)(J.default, { participant: t, width: ei.PIP_WIDTH }); return null } renderParticipantName() { let { channel: e, participantOnScreen: t } = this.props; if ((null == t ? void 0 : t.type) === ei.ParticipantTypes.STREAM || (null == t ? void 0 : t.type) === ei.ParticipantTypes.USER) { var n; let r = null !== (n = K.default.getNickname(e.getGuildId(), e.id, t.user)) && void 0 !== n ? n : z.default.getName(t.user); return (0, i.jsx)(c.Text, { variant: "text-md/normal", color: "always-white", className: er.participantName, lineClamp: 1, children: r }) } return null } render() { let { channel: e, streamId: t, participantOnScreen: n, isVideoEnabled: r } = this.props, s = (0, p.computeChannelName)(e, x.default, V.default), o = this.isEmptyBroadcast(), l = (null == n ? void 0 : n.id) === k.default.getId() && r, u = this.renderStreamState(), d = null; return (null == n ? void 0 : n.type) !== ei.ParticipantTypes.ACTIVITY && (null != u ? d = u : ((null == n ? void 0 : n.type) === ei.ParticipantTypes.USER || (null == n ? void 0 : n.type) === ei.ParticipantTypes.STREAM) && (d = (0, i.jsx)(X.default, { paused: this.streamerPaused, streamId: t, component: B.default.getVideoComponent(), mirror: l, children: (0, i.jsx)(j.default, { size: c.AvatarSizes.SIZE_80, src: null == n ? void 0 : n.user.getAvatarURL(e.guild_id, 80), "aria-label": null == n ? void 0 : n.user.username }) }))), (0, i.jsx)(D.default, { timeout: 1800, children: e => { var t; return (0, i.jsx)(y.default, { title: s, backgroundKey: null !== (t = null == n ? void 0 : n.id) && void 0 !== t ? t : "", screenMessage: null == u ? this.getScreenMessage() : null, onJumpToChannel: this.handleJumpToChannel, renderBottomLeftControls: this.renderBottomLeftControls, renderBottomRightControls: this.renderBottomRightControls, preventIdleComponent: M.default, width: ei.PIP_WIDTH, hideControls: o, className: a()(o ? er.emptyBroadcast : void 0, es.elevationHigh), innerClassName: o ? er.innerEmptyBroadcast : void 0, ...e, children: d }) } }) } constructor(...e) { super(...e), ea(this, "state", { screensharePopoutOpen: !1 }), ea(this, "_ref", r.createRef()), ea(this, "handleVideo", e => { E.default.setVideoEnabled(e) }), ea(this, "handleEnableVideoWhenUnavailable", () => { let { isVideoAvailable: e } = this.props; e ? this.handleVideo(!0) : (0, $.default)() }), ea(this, "handleJumpToChannel", () => { var e; let { channel: t } = this.props; (0, T.popAllLayers)(); let n = null !== (e = t.getGuildId()) && void 0 !== e ? e : en.ME; I.default.channelListScrollTo(n, t.id), (0, v.transitionToGuild)(n, t.id) }), ea(this, "handleStartStream", () => { let { canGoLive: e, channel: t } = this.props, n = t.getGuildId(); if (l()(null != n, "Cannot go live in non guild channel"), !e) return (0, ee.default)(); (0, et.default)(n, t.id, en.AnalyticsPages.GUILD_CHANNEL) }), ea(this, "handleStopStream", () => { let { participantOnScreen: e, isSelfBroadcasting: t } = this.props; l()((0, ei.isStreamParticipant)(e), "cannot stop stream for non streamer"), t ? (0, h.openStopBroadcastConfirmModal)(() => (0, g.default)(e.stream)) : (0, g.default)(e.stream) }), ea(this, "handleOpenPopout", () => { let { channel: e } = this.props; L.openChannelCallPopout(e) }), ea(this, "renderBottomLeftControls", () => { let { canSeeParticipantName: e } = this.viewProperties; return (0, i.jsx)(i.Fragment, { children: e ? this.renderParticipantName() : null }) }), ea(this, "renderBottomRightControls", () => { let { canSettings: e, canPopout: t, canDisconnect: n, canStopStream: r, canSeeViewers: s } = this.viewProperties; return (0, i.jsxs)(i.Fragment, { children: [s ? this.renderViewersIcon() : null, e ? this.renderSettingsIcon() : null, t ? this.renderPopoutIcon() : null, r ? this.renderStopStreamButton() : null, n ? this.renderDisconnectButton() : null] }) }), ea(this, "renderDisconnectButton", () => { let { channel: e } = this.props; return (0, i.jsx)(P.default, { className: er.rightTrayIcon, channel: e }) }), ea(this, "renderStopStreamButton", () => { let { isSelf: e } = this.viewProperties; return (0, i.jsx)(b.default, { isSelfStream: e, className: er.rightTrayIcon, onClick: this.handleStopStream }) }), ea(this, "renderViewersIcon", () => { let { participantOnScreen: e, channel: t } = this.props; return l()((0, ei.isStreamParticipant)(e) || (null == e ? void 0 : e.type) === ei.ParticipantTypes.ACTIVITY, "Cannot render participants for participant type ".concat(null == e ? void 0 : e.type)), (0, i.jsx)(M.default, { children: (0, i.jsx)(N.default, { channelId: t.id, guildId: t.getGuildId(), className: er.rightTrayIcon, participant: e, compact: !0 }) }) }), ea(this, "renderPopoutIcon", () => (0, i.jsx)(U.default, { className: er.rightTrayIcon, popoutOpen: !1, onOpenPopout: this.handleOpenPopout, onClosePopout: en.NOOP_NULL })), ea(this, "renderSettingsIcon", () => { let { participantOnScreen: e, activeStreams: t } = this.props; l()((0, ei.isStreamParticipant)(e), "Cannot render settings for non stream participant"); let n = t.find(t => (0, O.encodeStreamKey)(t) === e.id); return null == n || n.state === en.ApplicationStreamStates.ENDED ? null : (0, i.jsx)(G.default, { stream: n, className: er.rightTrayIcon, appContext: en.AppContext.APP }) }) } } t.default = _.default.connectStores([B.default, A.default, k.default, F.default, H.default, w.default, Y.default], e => { let { channel: t } = e, n = F.default.getSpeaker(t.id), i = A.default.getParticipant(t.id, n), r = d()(B.default.getVideoDevices()).values().first(), s = null == r || r.disabled, a = null != i && i.type !== ei.ParticipantTypes.ACTIVITY && i.type !== ei.ParticipantTypes.HIDDEN_STREAM ? H.default.getStreamId(i.user.id, t.getGuildId(), (0, m.default)(i.type)) : null, o = !s && B.default.isVideoEnabled(), l = (0, C.default)(B.default), u = k.default.getId(), _ = w.default.getCurrentUserActiveStream(), c = (0, S.isBroadcastingInChannel)(t.id); return { channel: t, streamId: a, participantOnScreen: i, isVideoAvailable: !1 === s, isVideoEnabled: o, isSelfBroadcasting: c, canGoLive: l, currentUserId: u, activeStreams: w.default.getAllActiveStreams(), activeSelfStream: _, isMainWindowFocused: Y.default.isFocused() } })(eo) }, 822296: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("872810"), o = n("569545"), l = n("592125"), u = n("112560"), d = n("689938"); let _ = n("340109"); function c(e) { let { stream: t, width: n, noArt: c = !1, selected: E = !1 } = e, I = (0, s.useStateFromStores)([l.default], () => l.default.getChannel(t.channelId)); return r.useEffect(() => { (null == I ? void 0 : I.isGuildStageVoice()) && (0, a.closeStream)((0, o.encodeStreamKey)(t), !1) }, []), (0, i.jsx)(u.default, { artURL: _, noArt: c, selected: E, size: (0, u.getSizeForWidth)(n), header: d.default.Messages.STREAM_ENDED, onCTAClick: () => (0, a.closeStream)((0, o.encodeStreamKey)(t)), callToAction: d.default.Messages.CLOSE_STREAM }) } }, 916771: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"); n("470079"); var r = n("872810"), s = n("569545"), a = n("63063"), o = n("112560"), l = n("981631"), u = n("689938"); let d = n("66737"); function _(e) { let { stream: t, width: n, selected: _ = !1, noArt: c = !1 } = e; return (0, i.jsx)(o.default, { artURL: d, header: u.default.Messages.STREAM_FAILED_TITLE, size: (0, o.getSizeForWidth)(n), noArt: c, selected: _, description: u.default.Messages.STREAM_FAILED_DESCRIPTION.format({ helpUrl: a.default.getArticleURL(l.HelpdeskArticles.STREAM_FAILED) }), onCTAClick: () => (0, r.closeStream)((0, s.encodeStreamKey)(t)), callToAction: u.default.Messages.CLOSE_STREAM }) } }, 792517: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return S } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("481060"), l = n("872810"), u = n("199902"), d = n("314897"), _ = n("167580"), c = n("685203"), E = n("112560"), I = n("689938"), T = n("520025"); let f = n("978538"); function S(e) { let { participant: t, width: n, noArt: r = !1, selected: S = !1 } = e, h = n < 195, A = (0, a.useStateFromStores)([u.default, d.default], () => u.default.getAllActiveStreams().some(e => { let { ownerId: t } = e; return t !== d.default.getId() })); return (0, i.jsx)("div", { className: s()(T.content, T.streamHidden, { [T.__invalid_small]: h }), children: (0, i.jsx)(E.default, { className: T.streamHiddenEmptyState, artURL: f, noArt: r, selected: S, size: (0, E.getSizeForWidth)(n), header: h ? null : I.default.Messages.STREAM_HIDDEN, description: S ? null : (0, i.jsxs)("div", { className: s()(T.streamHiddenCTA, { [T.largePaddingTop]: !h }), children: [(0, i.jsx)(c.CallTileCTA, { isSmall: h, children: (0, i.jsx)(o.Text, { variant: h ? "text-sm/semibold" : "text-md/semibold", color: "none", children: n < 175 ? I.default.Messages.WATCH : I.default.Messages.WATCH_STREAM }) }), A ? (0, i.jsx)(c.CallTileCTA, { className: T.addCTA, tooltip: I.default.Messages.STREAM_WATCH_MULTIPLE_TOOLTIP, onClick: e => { e.stopPropagation(), (0, l.watchStream)(t.stream, { forceMultiple: !0 }) }, isSmall: h, children: (0, i.jsx)(_.default, { className: T.addStreamIcon }) }) : null] }) }) }) } }, 560688: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("131951"), a = n("65154"), o = n("689938"); function l(e) { s.default.supports(a.Features.VIDEO) ? (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("67753")]).then(n.bind(n, "873809")); return n => (0, i.jsx)(t, { ...n, header: o.default.Messages.CAMERA_UNAVAILABLE, body: o.default.Messages.CAMERA_NO_DEVICE, confirmText: o.default.Messages.OKAY, onConfirm: e }) }) : (0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("67753")]).then(n.bind(n, "873809")); return s => (0, i.jsx)(t, { ...s, header: o.default.Messages.VIDEO_UNSUPPORTED_BROWSER_TITLE, body: o.default.Messages.VIDEO_UNSUPPORTED_BROWSER_BODY, confirmText: o.default.Messages.DOWNLOAD_APP, onConfirm: () => { null == e || e(), (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("61418")]).then(n.bind(n, "431583")); return t => (0, i.jsx)(e, { source: "Video unsupported browser", ...t }) }) } }) }) } }, 127608: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("689938"); function a() { function e() { (0, r.openModalLazy)(async () => { let { default: e } = await Promise.all([n.e("99387"), n.e("61418")]).then(n.bind(n, "431583")); return t => (0, i.jsx)(e, { source: "Screenshare Unavailable", ...t }) }) }(0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("99387"), n.e("67753")]).then(n.bind(n, "873809")); return n => (0, i.jsx)(t, { ...n, header: s.default.Messages.SCREENSHARE_UNAVAILABLE, body: s.default.Messages.SCREENSHARE_UNAVAILABLE_DOWNLOAD_APP, confirmText: s.default.Messages.DOWNLOAD_APP, onConfirm: e }) }) } }, 76021: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }); var i = n("735250"); n("470079"); var r = n("481060"), s = n("872810"), a = n("451467"), o = n("174609"), l = n("928518"), u = n("120522"), d = n("933843"), _ = n("614011"), c = n("430824"), E = n("131951"), I = n("594174"), T = n("358085"), f = n("981631"), S = n("37113"); function h(e, t, h) { let A = l.default.getWindowOpen(f.PopoutWindowKeys.CHANNEL_CALL_POPOUT) ? f.PopoutWindowKeys.CHANNEL_CALL_POPOUT : null; if ((0, o.default)(A), T.isPlatformEmbedded)(0, r.openModalLazy)(async () => { let { default: t } = await Promise.all([n.e("49237"), n.e("99387"), n.e("79477"), n.e("12977")]).then(n.bind(n, "60594")); return n => (0, i.jsx)(t, { ...n, guildId: e, analyticsLocation: h }) }), (0, d.shouldFetchPerksDemos)() && ((0, u.fetchPerksDemos)(), (0, _.preloadPremiumStreamingEffectImage)()); else { var m; let n = (0, a.default)(S.ApplicationStreamPresets.PRESET_CUSTOM, S.ApplicationStreamResolutions.RESOLUTION_1080, S.ApplicationStreamFPS.FPS_30, I.default.getCurrentUser(), null === (m = c.default.getGuild(e)) || void 0 === m ? void 0 : m.premiumTier) ? { width: 1920, height: 1080 } : { width: 1280, height: 720 }; E.default.getMediaEngine().getDesktopSource(n, !0).then(n => { (0, s.startStream)(e, t, { pid: null, sourceId: n, sourceName: null }) }) } } }, 937995: function(e, t, n) { "use strict"; n.r(t), n.d(t, { IdleHandlerContext: function() { return a }, IdleStateContext: function() { return o }, default: function() { return l } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("846519"); let a = r.createContext({ onPreventIdle: () => null, onAllowIdle: () => null, onForceIdle: () => null, onActive: () => null }), o = r.createContext(!1); function l(e) { let { children: t, timeout: n } = e, [l, u] = r.useState(!1), d = r.useRef(new Set), _ = r.useRef(null); r.useEffect(() => (_.current = new s.DelayedCall(n, () => u(!0)), _.current.delay(), () => { var e; null === (e = _.current) || void 0 === e || e.cancel(), _.current = null }), [n]); let c = r.useCallback(e => { var t; u(!1), d.current.add(e), null === (t = _.current) || void 0 === t || t.cancel() }, [d, _, u]), E = r.useCallback(e => { if (d.current.delete(e), 0 === d.current.size) { var t; null === (t = _.current) || void 0 === t || t.delay() } }, [d, _]), I = r.useCallback(() => { if (u(!1), 0 === d.current.size) { var e; null === (e = _.current) || void 0 === e || e.delay() } }, [d, _, u]), T = r.useCallback(() => { var e; !(d.current.size > 0) && (null === (e = _.current) || void 0 === e || e.cancel(), u(!0)) }, [_, u]), f = r.useMemo(() => ({ onAllowIdle: E, onPreventIdle: c, onActive: I, onForceIdle: T }), [E, c, I, T]); return (0, i.jsx)(o.Provider, { value: l, children: (0, i.jsx)(a.Provider, { value: f, children: t({ idle: l, ...f }) }) }) } }, 618158: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o }, usePreventIdle: function() { return a } }); var i = n("735250"), r = n("470079"), s = n("937995"); function a(e) { let { onPreventIdle: t, onAllowIdle: n, onActive: i } = r.useContext(s.IdleHandlerContext), a = r.useCallback(() => { t(e) }, [e, t]); return { preventIdle: a, allowIdle: r.useCallback(() => { n(e) }, [e, n]), onActive: i } } function o(e) { let { children: t, className: n } = e, { onForceIdle: o, onActive: l } = r.useContext(s.IdleHandlerContext), { preventIdle: u, allowIdle: d } = a("interact"); r.useEffect(() => () => d(), [d]); let _ = r.useCallback(e => { var t; let n = null !== (t = e.target.ownerDocument) && void 0 !== t ? t : document; !e.currentTarget.contains(n.activeElement) && o() }, [o]); return (0, i.jsx)("div", { className: n, onMouseEnter: u, onMouseLeave: d, onFocus: l, onBlur: _, children: t }) } }, 922745: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PictureInPictureHeader: function() { return A }, default: function() { return m } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("442837"), o = n("692547"), l = n("215569"), u = n("481060"), d = n("19780"), _ = n("285952"), c = n("470441"), E = n("824717"), I = n("727218"), T = n("540028"), f = n("507675"), S = n("689938"), h = n("376838"); function A(e) { let { title: t, onJumpToChannel: n, idle: r, preventIdleComponent: s } = e, l = (0, a.useStateFromStores)([d.default], () => d.default.getChannelId()), _ = null != l ? (0, i.jsx)(T.default, { voiceChannelId: l, idle: r }) : null; return (0, i.jsxs)(s, { className: h.headerIdleContainer, children: [(0, i.jsxs)(u.Clickable, { className: h.headerTitle, onClick: n, children: [(0, i.jsx)(E.default, { "aria-label": S.default.Messages.OPEN_IN_THEATER, className: h.backButton, width: 20, height: 20 }), (0, i.jsx)(I.default, { className: h.headerText, size: I.default.Sizes.SIZE_16, color: o.default.unsafe_rawColors.WHITE_500.css, children: t })] }), _] }) } function m(e) { let { children: t, idle: n, onJumpToChannel: r, backgroundKey: a, onActive: o, onForceIdle: u, renderBottomLeftControls: d, renderBottomRightControls: E, screenMessage: I, hideControls: T = !1, className: S, innerClassName: m, ...N } = e; return (0, i.jsxs)("div", { onMouseMove: o, onMouseDown: o, onMouseLeave: u, className: s()(h.pictureInPictureVideo, { [h.idle]: n }, S), onDoubleClick: r, children: [(0, i.jsx)(l.TransitionGroup, { children: (0, i.jsx)(c.BackgroundTransition, { className: m, children: t }, a) }), null != I ? (0, i.jsx)(f.default, { size: "small", ...I }) : null, !T && (0, i.jsxs)("div", { className: h.videoControls, children: [(0, i.jsx)("div", { className: h.topControls, children: (0, i.jsx)(A, { idle: n, onJumpToChannel: r, ...N }) }), (0, i.jsxs)("div", { className: h.bottomControls, children: [(0, i.jsx)(_.default, { grow: 0, shrink: 1, basis: "50%", align: _.default.Align.CENTER, className: h.bottomLeftControls, children: null == d ? void 0 : d() }), (0, i.jsx)(_.default, { grow: 0, shrink: 1, justify: _.default.Justify.END, basis: "50%", align: _.default.Align.CENTER, children: null == E ? void 0 : E() })] })] })] }) } }, 540028: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"); var i = n("735250"); n("470079"); var r = n("442837"), s = n("692547"), a = n("481060"), o = n("475179"), l = n("519938"), u = n("317381"), d = n("812206"), _ = n("358221"), c = n("199902"), E = n("366050"), I = n("594174"), T = n("621113"), f = n("981631"), S = n("354459"), h = n("689938"), A = n("376838"); function m(e) { let { closePopout: t, idle: n, pipWindows: s, voiceChannelId: I, onSelect: T } = e; n && t(); let A = (0, r.useStateFromStores)([u.default], () => u.default.getSelfEmbeddedActivityForChannel(I)), m = (0, r.useStateFromStores)([E.default], () => E.default.pipWindow), N = (0, r.useStateFromStores)([_.default], () => _.default.getSelectedParticipant(I)), p = (0, r.useStateFromStores)([_.default], () => _.default.getStreamParticipants(I)); return (0, i.jsx)(a.Menu, { navId: "pip-menu", "aria-label": "switch PIP", onClose: t, onSelect: T, children: (function() { let e = s.find(e => e.component === f.PictureInPictureComponents.EMBED_IFRAME), t = s.find(e => e.component === f.PictureInPictureComponents.VIDEO), n = []; return null != e && (null == m ? void 0 : m.id) !== e.id && n.push({ pipWindow: e }), null != t && p.forEach(e => { let i = c.default.getActiveStreamForApplicationStream(e.stream), r = e.id === (null == N ? void 0 : N.id) && (null == m ? void 0 : m.id) === t.id; null != i && !r && n.push({ pipWindow: t, participant: e, stream: i }) }), n })().map(function(e) { var t; let n = e.pipWindow.id, r = null === (t = e.participant) || void 0 === t ? void 0 : t.id, s = function(e) { if (e.pipWindow.component === f.PictureInPictureComponents.EMBED_IFRAME && null != A) { var t; let e = null === (t = d.default.getApplication(A.applicationId)) || void 0 === t ? void 0 : t.name; return null == e ? h.default.Messages.SWITCH_PIP_TO_ACTIVITY : h.default.Messages.SWITCH_PIP_TO_ACTIVITY_NAME.format({ activityName: e }) } return null == e.participant || e.participant.type !== S.ParticipantTypes.STREAM ? h.default.Messages.SWITCH_PIP_TO_GO_LIVE : h.default.Messages.SWITCH_PIP_TO_USER_STREAM.format({ username: e.participant.userNick }) }(e), u = "".concat(n).concat(null != r ? r : ""); return (0, i.jsx)(a.MenuItem, { id: u, label: s, action: () => (function(e) { (null == m ? void 0 : m.id) !== e.pipWindow.id && (0, l.switchPIPFocus)(e.pipWindow.id); let t = e.participant; null != t && t.type !== S.ParticipantTypes.ACTIVITY && o.default.selectParticipant(I, t.id) })(e) }, u) }) }) } t.default = function(e) { let { voiceChannelId: t, idle: n } = e, o = Array.from((0, r.useStateFromStores)([E.default], () => E.default.pipWindows).values()), l = (0, r.useStateFromStoresArray)([c.default], () => c.default.getAllActiveStreamsForChannel(t)).filter(e => { var n; return e.ownerId !== (null === (n = I.default.getCurrentUser()) || void 0 === n ? void 0 : n.id) && e.channelId === t }), u = 1 === o.length && o[0].component === f.PictureInPictureComponents.EMBED_IFRAME || 0 === l.length, d = 1 === o.length && l.length <= 1; return u || d ? null : (0, i.jsx)(a.Popout, { position: "bottom", renderPopout: e => (0, i.jsx)(m, { voiceChannelId: t, pipWindows: o, idle: n, ...e }), children: e => (0, i.jsx)(a.Clickable, { className: A.menuIcon, ...e, children: (0, i.jsx)(T.default, { color: s.default.unsafe_rawColors.WHITE_500.css }) }) }) } }, 507675: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("112560"), s = n("285952"), a = n("850928"); function o(e) { let { mainText: t, supportingText: n, children: o, size: l } = e; return (0, i.jsxs)(s.default, { className: a.root, justify: s.default.Justify.CENTER, align: s.default.Align.CENTER, direction: s.default.Direction.VERTICAL, children: [(0, i.jsx)(r.default, { header: t, description: n, size: l }), o] }) } }, 871499: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CenterControlButton: function() { return f }, default: function() { return I } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("131388"), l = n("259580"), u = n("806519"), d = n("618158"), _ = n("362267"), c = n("689938"), E = n("431606"); function I(e) { let { label: t, onClick: n, onKeyDown: r, onMouseEnter: o, onMouseLeave: l, onContextMenu: u, className: _, wrapperClassName: c, iconClassName: I, iconComponent: T, themeable: f = !1, disabled: S = !1, isActive: h = !1, tooltipPosition: A = "top", shouldShowTooltip: m = !0, forceTooltipOpen: N = !1, buttonRef: p, grow: O, "aria-label": C } = e; return (0, i.jsx)(d.default, { children: (0, i.jsx)(a.Tooltip, { position: A, text: t, "aria-label": C, shouldShow: m, forceOpen: N, children: e => { let { onClick: t, onContextMenu: d, onMouseEnter: A, onMouseLeave: m, ...N } = e; return (0, i.jsx)(a.Button, { look: a.Button.Looks.BLANK, size: a.Button.Sizes.NONE, onKeyDown: e => { null == r || r(e) }, onClick: e => { null == t || t(), null == n || n(e) }, onMouseEnter: e => { null == A || A(), null == o || o(e) }, onMouseLeave: e => { null == m || m(), null == l || l(e) }, onContextMenu: e => { null == d || d(), null == u || u(e) }, onFocus: e => { null == A || A(), null == o || o(e) }, onBlur: e => { null == m || m(), null == l || l(e) }, disabled: S, innerClassName: E.lineHeightReset, className: s()({ [E.active]: h }, _), wrapperClassName: c, buttonRef: p, grow: O, "aria-label": C, ...N, children: (0, i.jsx)(T, { className: s()(E.controlIcon, I, { [E.themeable]: f, [E.active]: h }), color: "currentColor" }) }) } }) }) } let T = { red: E.red, white: E.white, green: E.green, yellow: E.yellow, primaryDark: E.primaryDark, primaryLight: E.primaryLight, activeLight: E.activeLight }; function f(e) { let { color: t, isActive: n = !1, className: r, iconClassName: f, onPopoutClick: S, popoutOpen: h = !1, premiumGlow: A = !1, ...m } = e, N = (0, _.default)(t, n), p = (0, o.default)("(max-width: 456px)"), O = (0, i.jsx)(I, { ...m, grow: !1, onContextMenu: S, iconClassName: s()(f, E.centerIcon), className: s()(p ? r : null, E.staticButton, E.centerButton, T[N]) }); return p ? O : (0, i.jsxs)("div", { className: s()(r, E.contextMenuContainer), children: [(0, i.jsx)(u.default, { className: s()(E.buttonMask, { [E.buttonPremiumGlow]: A }), mask: null == S ? null : u.MaskIDs.CHANNEL_CALL_CONTROL_BUTTON, width: 56, height: 56, children: O }), null != S ? (0, i.jsx)(d.default, { children: (0, i.jsx)(a.Clickable, { "aria-label": c.default.Messages.MORE_OPTIONS, onClick: S, onContextMenu: S, className: s()(E.contextMenuNub, T[N], { [E.active]: h }), children: (0, i.jsx)(l.default, { className: s()(E.contextMenuCaret, { [E.open]: h }) }) }) }) : null] }) } }, 268353: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("442837"), s = n("928518"), a = n("451478"), o = n("710290"), l = n("371282"), u = n("228488"), d = n("871499"), _ = n("689938"); t.default = r.default.connectStores([a.default, s.default], e => { let { node: t, guestWindow: n } = e; return { enabled: (0, u.isFullScreen)(t, null == n ? void 0 : n.document) } })(function(e) { let { enabled: t, ...n } = e, r = t ? _.default.Messages.EXIT_FULL_SCREEN : _.default.Messages.FULL_SCREEN, s = t ? l.default : o.default; return (0, i.jsx)(d.default, { label: r, iconComponent: s, ...n }) }) }, 136995: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }); var i = n("735250"), r = n("470079"), s = n("287734"), a = n("125015"), o = n("585483"), l = n("871499"), u = n("981631"), d = n("689938"); function _(e) { let { channel: t, centerButton: n = !1, ..._ } = e, c = n ? l.CenterControlButton : l.default, E = t.isManaged() || !t.isPrivate() ? d.default.Messages.CONNECT : d.default.Messages.JOIN_CALL, I = r.useCallback(() => s.default.selectVoiceChannel(t.id), [t.id]); return r.useEffect(() => (o.ComponentDispatch.subscribe(u.ComponentActions.CALL_ACCEPT, I), () => { o.ComponentDispatch.unsubscribe(u.ComponentActions.CALL_ACCEPT, I) }), [I]), (0, i.jsx)(c, { ..._, iconComponent: a.default, label: E, onClick: I }) } }, 402113: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("735250"); n("470079"); var r = n("566620"), s = n("87086"), a = n("871499"), o = n("689938"); function l(e) { let { channelId: t, applicationId: n, centerButton: l = !1, ...u } = e, d = l ? a.CenterControlButton : a.default; return (0, i.jsx)(d, { ...u, onClick: () => { (0, r.stopEmbeddedActivity)({ channelId: t, applicationId: n }) }, iconComponent: s.default, label: o.default.Messages.EMBEDDED_ACTIVITIES_LEAVE_ACTIVITY }) } }, 197016: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("685072"), s = n("287734"), a = n("67212"), o = n("158631"), l = n("871499"), u = n("689938"); function d(e) { let { centerButton: t = !1, channel: n, onClick: d, onMouseEnter: _, onMouseLeave: c, ...E } = e, I = t ? l.CenterControlButton : l.default, T = n.isBroadcastChannel(), f = (0, o.useIsBroadcastingInChannel)(n.id), { Component: S, events: h } = (0, r.useEndCallLottie)(); return (0, i.jsx)(I, { ...E, onClick: () => { f && (0, a.stopBroadcast)(), s.default.disconnect(), null == d || d() }, iconComponent: S, onMouseEnter: e => { null == _ || _(e), h.onMouseEnter() }, onMouseLeave: e => { null == c || c(e), h.onMouseLeave() }, label: f ? u.default.Messages.STOP_BROADCASTING : T ? u.default.Messages.LEAVE_BROADCAST : u.default.Messages.DISCONNECT_SELF }) } }, 800965: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("441957"), o = n("871499"), l = n("689938"), u = n("188156"); function d(e) { let { popoutOpen: t, onClosePopout: n, onOpenPopout: r, ...d } = e, _ = t ? l.default.Messages.POPOUT_RETURN : l.default.Messages.POPOUT_PLAYER; return (0, i.jsx)(o.default, { label: _, onClick: t ? n : r, iconComponent: a.default, iconClassName: s()({ [u.popIn]: t }), ...d }) } }, 445062: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("864094"), s = n("871499"), a = n("689938"); function o(e) { let { isSelfStream: t, centerButton: n = !1, onMouseEnter: o, onMouseLeave: l, ...u } = e, d = n ? s.CenterControlButton : s.default, { Component: _, events: c } = (0, r.useScreenshareLottie)("disable"); return (0, i.jsx)(d, { label: t ? a.default.Messages.STOP_STREAMING : a.default.Messages.STOP_WATCHING, iconComponent: _, isActive: !0, onMouseEnter: e => { null == o || o(e), c.onMouseEnter() }, onMouseLeave: e => { null == l || l(e), c.onMouseLeave() }, ...u }) } }, 7188: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("481060"), o = n("158631"), l = n("709369"), u = n("544384"), d = n("76021"), _ = n("592125"), c = n("594174"), E = n("937482"), I = n("834348"), T = n("806519"), f = n("74538"), S = n("618158"), h = n("871499"), A = n("981631"), m = n("474936"), N = n("689938"), p = n("726425"); function O(e) { let { className: t } = e; return (0, i.jsx)(E.default, { className: t }) } function C(e) { let { className: t } = e; return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsx)(T.default, { className: t, mask: T.default.Masks.HEADER_BAR_BADGE, children: (0, i.jsx)(O, {}) }), (0, i.jsx)(I.default, { className: p.badgeUpgrade })] }) } function R(e) { let { hideBadges: t = !1, stream: n, ...E } = e, I = (0, s.useStateFromStores)([c.default], () => f.default.isPremium(c.default.getCurrentUser(), m.PremiumTypes.TIER_1)), T = (0, s.useStateFromStores)([_.default], () => _.default.getChannel(null == n ? void 0 : n.channelId)), p = r.useMemo(() => null != n ? [n] : [], [n]), R = (0, o.useIsBroadcastingInChannel)(null == T ? void 0 : T.id), g = r.useCallback(() => { null != T && (0, d.default)(T.getGuildId(), T.id, A.AnalyticsSections.STREAM_SETTINGS) }, [T]); if (null == n || null == T) return null; let L = O; return !t && !I && (L = C), (0, i.jsx)(a.Popout, { position: "top", renderPopout: e => { let { closePopout: t } = e; return (0, i.jsx)(S.default, { children: R ? (0, i.jsx)(l.default, { onClose: t }) : (0, i.jsx)(u.default, { channel: T, currentUser: c.default.getCurrentUser(), activeStreams: p, onClose: t, showReportOption: !0, handleGoLive: g }) }) }, animation: a.Popout.Animation.FADE, children: e => (0, i.jsx)(h.default, { ...e, label: N.default.Messages.STREAMER_SETTINGS_TITLE, iconComponent: L, ...E }) }) } }, 157813: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("475179"), l = n("605403"), u = n("158010"), d = n("871499"), _ = n("689938"), c = n("868889"); function E(e) { let { className: t, isVertical: n } = e; return (0, i.jsxs)("div", { className: c.iconContainer, children: [(0, i.jsx)(l.default, { className: a()(n ? c.upCaret : c.leftCaret, t) }), (0, i.jsx)(u.default, { className: a()(c.members, t) })] }) } function I(e) { let { className: t, isVertical: n } = e; return (0, i.jsxs)("div", { className: c.iconContainer, children: [(0, i.jsx)(l.default, { className: a()(n ? c.downCaret : c.rightCaret, t) }), n && (0, i.jsx)(u.default, { className: a()(c.members, t) })] }) } function T(e) { let { channelId: t, className: n, isParticipantsOpen: s, isVertical: l = !1, hideTooltip: u = !1 } = e, T = r.useCallback(e => { let { className: t } = e; return s ? (0, i.jsx)(I, { className: t, isVertical: l }) : (0, i.jsx)(E, { className: t, isVertical: l }) }, [s, l]); return (0, i.jsx)(d.default, { label: s ? _.default.Messages.VIDEO_CALL_HIDE_MEMBERS : _.default.Messages.VIDEO_CALL_SHOW_MEMBERS, className: a()(c.participantsButton, n), onClick: function() { o.default.toggleParticipants(t, !s) }, iconComponent: T, shouldShowTooltip: !u }) } }, 25827: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VideoButtonWrapper: function() { return c }, default: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("75735"), l = n("40851"), u = n("67844"), d = n("871499"), _ = n("239618"); function c(e) { let t = (0, u.getVideoButtonLabel)(e), { enabled: n, cameraUnavailable: s, onChange: a, onCameraUnavailable: d, hasPermission: _, children: c, channelLimitReached: E = !1, join: I } = e, T = (0, l.useAppContext)(), f = s ? () => d() : () => a(!e.enabled, T), { Component: S, play: h, events: A } = (0, o.useVideoLottie)(I || n ? "disable" : "enable"); return r.useEffect(() => () => h(), [n, h]), (0, i.jsx)(i.Fragment, { children: c({ onClick: f, active: n, disabled: !n && (!_ || E), iconComponent: S, label: t, unavailable: s, onMouseEnter: I ? void 0 : A.onMouseEnter, onMouseLeave: I ? void 0 : A.onMouseLeave }) }) } function E(e) { let { enabled: t, join: n, channel: r, onChange: s, onCameraUnavailable: o, cameraUnavailable: l, hasPermission: u, className: E, channelLimitReached: I, channelLimit: T, centerButton: f = !1, onPopoutClick: S, ...h } = e, A = f ? d.CenterControlButton : d.default; return (0, i.jsx)(c, { enabled: t, join: n, channel: r, onChange: s, onCameraUnavailable: o, cameraUnavailable: l, hasPermission: u, channelLimitReached: I, channelLimit: T, children: e => { let { unavailable: n, onMouseEnter: r, onMouseLeave: s, ...o } = e; return (0, i.jsx)(A, { ...o, ...h, onMouseEnter: e => { var t; null === (t = h.onMouseEnter) || void 0 === t || t.call(h, e), null == r || r() }, onMouseLeave: e => { var t; null === (t = h.onMouseLeave) || void 0 === t || t.call(h, e), null == s || s() }, isActive: t, className: a()(E, { [_.fauxDisabled]: n }), onPopoutClick: S }) } }) } }, 362267: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("442837"), r = n("780384"), s = n("410030"), a = n("358221"), o = n("944486"), l = n("981631"); function u(e, t) { let n = (0, i.useStateFromStores)([o.default], () => o.default.getVoiceChannelId()), u = (0, i.useStateFromStores)([a.default], () => null != n ? a.default.getMode(n) : null), d = (0, s.default)(); return null != e ? e : u === l.ChannelModes.VOICE && (0, r.isThemeLight)(d) ? t ? "activeLight" : "primaryLight" : t ? "white" : "primaryDark" } }, 288444: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("846519"), r = n("904245"), s = n("287734"), a = n("147913"), o = n("317381"), l = n("592125"), u = n("885110"), d = n("979651"), _ = n("938475"), c = n("689938"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = 18e4; function T() { let e = d.default.getCurrentClientVoiceChannelId(null); if (null == e) return !1; let t = l.default.getChannel(e); return !(null == t || !t.isPrivate() || t.recipients.length > 1 || _.default.countVoiceStatesForChannel(e) > 1) && null == o.default.getSelfEmbeddedActivityForChannel(e) && null == u.default.getBroadcast() && !0 } function f() { if (!T()) return; let e = d.default.getCurrentClientVoiceChannelId(null); null != e && (r.default.sendBotMessage(e, c.default.Messages.BOT_CALL_IDLE_DISCONNECT_2.format({ number: 3 })), s.default.selectVoiceChannel(null)) } class S extends a.default { constructor(...e) { super(...e), E(this, "idleTimeout", new i.Timeout), E(this, "handleConnectionClosed", () => { this.idleTimeout.stop() }), E(this, "handleEmbeddedActivityDisconnect", () => { T() && this.idleTimeout.start(I, f, !0) }), E(this, "handleVoiceStateUpdates", () => { if (!T()) { this.idleTimeout.stop(); return } this.idleTimeout.start(I, f, !1) }), E(this, "actions", { VOICE_STATE_UPDATES: this.handleVoiceStateUpdates, CONNECTION_CLOSED: this.handleConnectionClosed, EMBEDDED_ACTIVITY_DISCONNECT: this.handleEmbeddedActivityDisconnect }) } } t.default = new S }, 17300: function(e, t, n) { "use strict"; n.r(t), n.d(t, { shouldImmediatelyRequestVoicePermissions: function() { return S } }), n("47120"); var i = n("147913"), r = n("751571"), s = n("88751"), a = n("590415"), o = n("189786"), l = n("314897"), u = n("592125"), d = n("131951"), _ = n("19780"), c = n("876506"), E = n("981631"), I = n("761274"); let T = null; function f() { r.default.requestPermission(I.NativePermissionTypes.AUDIO).then(e => { e && (0, c.default)(!0) }), d.default.getMode() === E.InputModes.PUSH_TO_TALK && r.default.requestPermission(I.NativePermissionTypes.INPUT_MONITORING) } function S(e, t) { var n; return (null === (n = u.default.getChannel(t)) || void 0 === n ? !void 0 : !n.isListenModeCapable()) || s.default.isSpeaker(e, t) } class h extends i.default { handleVoiceChannelSelect(e) { let { channelId: t } = e; null == t && (T = null) } handleVoiceStateUpdates(e) { let { voiceStates: t } = e; t.forEach(e => { var t; let { userId: n, channelId: i } = e; if (null != i && l.default.getId() === n && null != _.default.getRTCConnectionId() && T !== i) { if (S(n, i)) { T = i, f(); return } t = new o.default(e), (0, a.getAudienceRequestToSpeakState)(t) === a.RequestToSpeakStates.REQUESTED_TO_SPEAK_AND_AWAITING_USER_ACK && (T = i, f()) } }) } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { VOICE_STATE_UPDATES: this.handleVoiceStateUpdates, VOICE_CHANNEL_SELECT: this.handleVoiceChannelSelect }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new h }, 653175: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return T } }); var i = n("570140"), r = n("367907"), s = n("932724"), a = n("634041"), o = n("647177"), l = n("592125"), u = n("131951"), d = n("19780"), _ = n("944486"), c = n("594174"); let E = (e, t) => ({ channel_id: e.id, channel_type: e.type, guild_id: e.getGuildId(), rtc_connection_id: d.default.getRTCConnectionId(), duration: d.default.getDuration(), media_session_id: d.default.getMediaSessionId(), ...(0, r.getVoiceStateMetadata)(d.default.getGuildId(), d.default.getChannelId(), t) }), I = () => { var e; let t = (0, s.getLastUsedVideoBackgroundOption)(c.default.getCurrentUser()); return { video_device_name: null === (e = u.default.getVideoDevices()[u.default.getVideoDeviceId()]) || void 0 === e ? void 0 : e.name, video_hardware_scaling_enabled: u.default.getHardwareH264(), video_effect_type: (0, o.getEffectAnalyticsType)(t), video_effect_detail: (0, o.getEffectDetailAnalyticsName)(t) } }; function T(e, t, n, r) { let s = _.default.getVoiceChannelId(), o = l.default.getChannel(s); if (null == t && null != s && null != o) { let t = E(o, r); if (e(), a.default.hasUsedBackgroundInCall) { let e = { ...t, ...I() }; i.default.dispatch({ type: "VIDEO_BACKGROUND_SHOW_FEEDBACK", analyticsData: e }) } else i.default.dispatch({ type: "VOICE_CHANNEL_SHOW_FEEDBACK", analyticsData: t }) } else e() } }, 835873: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showActivitiesInvalidPermissionsAlert: function() { return s } }); var i = n("668781"), r = n("689938"); let s = () => { i.default.show({ title: r.default.Messages.NO_EMBEDDED_ACTIVITY_PERMISSION_DIALOG_TITLE, body: r.default.Messages.NO_EMBEDDED_ACTIVITY_PERMISSION_DIALOG_BODY, hideActionSheet: !1 }) } }, 876506: function(e, t, n) { "use strict"; function i(e) {} n.r(t), n.d(t, { default: function() { return i } }) }, 556076: function(e, t, n) { "use strict"; n.r(t), n.d(t, { sendVoiceChannelActivityNotification: function() { return s } }); var i = n("544891"), r = n("981631"); function s(e, t) { i.HTTP.post({ url: r.Endpoints.VOICE_CHANNEL_NOTIFICATIONS(e), query: { first_user: t } }) } }, 538215: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("147913"), r = n("358221"), s = n("729052"), a = n("592125"), o = n("979651"), l = n("556076"); class u extends i.default { handleVoiceChannelSelect(e) { let { channelId: t, guildId: n } = e; if (null == t || null == n) return; let i = a.default.getChannel(t); if (null != i && (0, s.hasVoiceChannelActivityNotifsEnabled)(i) && i.isGuildVoice()) { let e = r.default.getParticipants(t).length, n = o.default.isInChannel(t), i = e === (n ? 1 : 0); i ? l.sendVoiceChannelActivityNotification(t, i) : e === (n ? 2 : 1) && l.sendVoiceChannelActivityNotification(t, i) } } constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { VOICE_CHANNEL_SELECT: this.handleVoiceChannelSelect }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new u }, 401062: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VoiceChannelEffectSentLocation: function() { return r }, sendVoiceChannelCustomCallSoundEffect: function() { return O }, sendVoiceChannelEffect: function() { return R }, sendVoiceChannelSoundboardEffect: function() { return C } }); var i, r, s = n("392711"), a = n("544891"), o = n("570140"), l = n("100527"), u = n("367907"), d = n("339085"), _ = n("697426"), c = n("100986"), E = n("944486"), I = n("70956"), T = n("176354"), f = n("696900"), S = n("456631"), h = n("963838"), A = n("353368"), m = n("981631"), N = n("710111"); function p(e) { let t = new AbortController, n = (0, s.throttle)(n => { E.default.getVoiceChannelId() !== e && t.abort() }, 1e3); return { abortController: t, onRequestProgress: n } } function O(e, t, n) { var i; let { abortController: r, onRequestProgress: s } = p(e), o = null !== (i = f.default.getState().animationType) && void 0 !== i ? i : A.VoiceChannelEffectAnimationType.BASIC, u = { animation_type: o, animation_id: (0, h.sampleAnimationId)(o, h.CUSTOM_CALL_SOUND_ANIMATION_RANGE) }; a.HTTP.post({ url: m.Endpoints.CUSTOM_CALL_SOUNDS(e), body: u, signal: r.signal, onRequestProgress: s }).then(m.NOOP_NULL, () => { if (r.signal.aborted) return }), (0, c.default)([l.default.CHANNEL_CALL], n, t, _.AnalyticsSoundType.ENTRY) } function C(e, t, n, i) { var r, s; let o = d.default.getCustomEmojiById(null !== (r = t.emojiId) && void 0 !== r ? r : ""), { abortController: l, onRequestProgress: u } = p(e), E = { sound_id: t.soundId, emoji_id: t.emojiId, emoji_name: null !== (s = t.emojiName) && void 0 !== s ? s : null == o ? void 0 : o.name }; t.guildId !== N.DEFAULT_SOUND_GUILD_ID && (E.source_guild_id = t.guildId), a.HTTP.post({ url: m.Endpoints.SEND_SOUNDBOARD_SOUND(e), body: E, signal: l.signal, onRequestProgress: u }).then(m.NOOP_NULL, () => { if (l.signal.aborted) return }), (0, c.default)(null != i ? i : [], n, t, _.AnalyticsSoundType.DEFAULT) }(i = r || (r = {})).EMOJI_PICKER = "emoji_picker", i.EFFECT_BAR = "effect_bar"; let R = async e => { let { channel: t, emoji: n, location: i, animationType: r, animationId: s, isPremium: l } = e; if (null == n || S.default.isOnCooldown) return; let u = l && null != r ? r : A.VoiceChannelEffectAnimationType.BASIC; try { let e = null != n.id ? { emoji_id: n.id, emoji_name: n.name, animation_type: u, animation_id: s } : { emoji_id: null, emoji_name: n.optionallyDiverseSequence, animation_type: u, animation_id: s }; await a.HTTP.post({ url: m.Endpoints.VOICE_CHANNEL_EFFECTS(t.id), body: e }), L(t, n, i, u), o.default.dispatch({ type: "VOICE_CHANNEL_EFFECT_SENT_LOCAL" }) } catch (e) { if (429 === e.status && null != e.body.retry_after) { let t = e.body.retry_after * I.default.Millis.SECOND; o.default.dispatch({ type: "VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP", cooldownEndsAtMs: t }) } } }, g = { [A.VoiceChannelEffectAnimationType.BASIC]: "Basic", [A.VoiceChannelEffectAnimationType.PREMIUM]: "Premium" }, L = (e, t, n, i) => { let { unicode: r, custom: s, customExternal: a, managed: o, managedExternal: l, animated: d } = (0, T.countEmoji)([t], e.getGuildId()), _ = g[i]; u.default.trackWithMetadata(m.AnalyticEvents.VOICE_CHANNEL_EFFECT_SENT, { channel_id: e.id, guild_id: e.getGuildId(), location: n, emoji_unicode: r, emoji_custom: s, emoji_custom_external: a, emoji_managed: o, emoji_managed_external: l, emoji_animated: d, animation_type: _, is_broadcast: e.isBroadcastChannel() }) } }, 353368: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { EMOJI_SIZE: function() { return s }, VoiceChannelEffectAnimationType: function() { return i } }), (r = i || (i = {}))[r.PREMIUM = 0] = "PREMIUM", r[r.BASIC = 1] = "BASIC"; let s = 32 }, 696900: function(e, t, n) { "use strict"; let i; n.r(t); var r, s = n("442837"), a = n("570140"), o = n("353368"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class u extends(r = s.default.PersistedStore) { initialize(e) { var t; i = null !== (t = null == e ? void 0 : e.animationType) && void 0 !== t ? t : o.VoiceChannelEffectAnimationType.PREMIUM } getState() { return { animationType: i } } } l(u, "displayName", "VoiceChannelEffectsPersistedStore"), l(u, "persistKey", "VoiceChannelEffectsPersistedStore"), t.default = new u(a.default, { VOICE_CHANNEL_EFFECT_TOGGLE_ANIMATION_TYPE: () => { i = i === o.VoiceChannelEffectAnimationType.BASIC ? o.VoiceChannelEffectAnimationType.PREMIUM : o.VoiceChannelEffectAnimationType.BASIC } }) }, 456631: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { clearVoiceChannelEffectForUser: function() { return h } }), n("47120"), n("733860"); var r, s, a, o, l = n("392711"), u = n("442837"), d = n("780384"), _ = n("570140"), c = n("70956"), E = n("963838"), I = n("354459"); let T = [], f = {}, S = [], h = e => { null != e && _.default.dispatch({ type: "VOICE_CHANNEL_EFFECT_CLEAR", userId: e }) }, A = [], m = 10 * c.default.Millis.SECOND, N = (0, l.debounce)(() => { let e = (0, E.getEffectAnnouncement)(S); d.AccessibilityAnnouncer.announce(e, "polite"), S = [] }, 500); class p extends(r = u.default.Store) { get recentlyUsedEmojis() { return T } get isOnCooldown() { return null != i && new Date < i } get effectCooldownEndTime() { return i } getEffectForUserId(e) { return f[e] } } o = "VoiceChannelEffectsStore", (a = "displayName") in(s = p) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new p(_.default, { VOICE_CHANNEL_EFFECT_CLEAR: e => { let { userId: t } = e; null != f[t] && delete f[t] }, VOICE_CHANNEL_EFFECT_RECENT_EMOJI: e => { let { emoji: t } = e; null != t && (T.unshift(t), (T = (0, l.uniqBy)(T, "name")).length > I.EMOJI_PICKER_EMOJI_TO_SHOW_COUNT + 1 && T.pop()) }, VOICE_CHANNEL_EFFECT_SEND: e => { let { emoji: t, userId: n, animationType: i } = e; null != t && null != i && (f[n] = { emoji: t, sentAt: Date.now(), animationType: i }, S = [...S, { emojiName: t.name, userId: n }], N()) }, VOICE_CHANNEL_EFFECT_SENT_LOCAL: () => { let e = new Date; if ((A = [e, ...A].slice(0, 20)).length >= 20) { let t = A[A.length - 1], n = e.getTime() - t.getTime(); n < m && (i = new Date(e.getTime() + m - n)) } }, VOICE_CHANNEL_EFFECT_UPDATE_TIME_STAMP: e => { let { cooldownEndsAtMs: t } = e; i = new Date(Date.now() + t) } }) }, 963838: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnimationTypeToAnimations: function() { return w }, CUSTOM_CALL_SOUND_ANIMATION_RANGE: function() { return b }, getEffectAnnouncement: function() { return F }, getEffectUrl: function() { return V }, getResizedEmojiData: function() { return k }, sampleAnimationId: function() { return B } }); var i = n("392711"), r = n.n(i), s = n("490757"), a = n("429827"), o = n("353928"), l = n("336892"), u = n("624833"), d = n("944314"), _ = n("399358"), c = n("945835"), E = n("912931"), I = n("966552"), T = n("561763"), f = n("529306"), S = n("90075"), h = n("862666"), A = n("252611"), m = n("136144"), N = n("316137"), p = n("654123"), O = n("660020"), C = n("980084"), R = n("24688"), g = n("200997"), L = n("633302"), v = n("134432"), D = n("594174"), M = n("768581"), y = n("176354"), P = n("353368"), U = n("689938"); let b = { start: 10, end: 15 }, G = { BASIC: [s], PREMIUM: [a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p, O, C, R, g] }, w = { [P.VoiceChannelEffectAnimationType.BASIC]: G.BASIC, [P.VoiceChannelEffectAnimationType.PREMIUM]: G.PREMIUM }, k = r().memoize(e => new Promise(t => { let n = new Image; n.src = e, n.crossOrigin = "Anonymous", n.onload = () => { let i = P.EMOJI_SIZE * (0, v.getDevicePixelRatio)(); if (n.width === i && n.height === i) t(e); else { var r; let e = document.createElement("canvas"); e.width = i, e.height = i, null === (r = e.getContext("2d")) || void 0 === r || r.drawImage(n, 0, 0), t(e.toDataURL("image/png")) } } })), B = (e, t) => { let n = w[e]; if (null != t && e === P.VoiceChannelEffectAnimationType.PREMIUM) { let e = t.end + 1; return Math.floor(Math.random() * (t.start - e) + e) } return Math.floor(Math.random() * n.length) }; function V(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : P.EMOJI_SIZE; if (null != e.id) { var n; return M.default.getEmojiURL({ id: e.id, animated: null !== (n = e.animated) && void 0 !== n && n, size: t }) } let i = L.default.convertSurrogateToName(e.name, !1), r = L.default.getByName(i); return null != r ? y.default.getURL(r.surrogates) : "" } function x(e, t) { return r()(e).map(e => { var n; return null !== (n = e[t]) && void 0 !== n ? n : null }).filter(e => null != e).uniq().value() } function F(e) { var t, n, i, r, s, a; if (e.length < 1) return ""; let o = x(e, "userId"), l = x(e, "emojiName"), u = l.length < 2 ? null !== (t = null == l ? void 0 : l[0]) && void 0 !== t ? t : "" : l.join(", "); if (o.length < 1) return ""; if (1 === o.length) return U.default.Messages.A11Y_ANNOUNCEMENT_VOICE_CHANNEL_EFFECTS_SINGLE.format({ firstUsername: null === (n = D.default.getUser(o[0])) || void 0 === n ? void 0 : n.username, emojiNames: u }); if (2 === o.length) return U.default.Messages.A11Y_ANNOUNCEMENT_VOICE_CHANNEL_EFFECTS_DOUBLE.format({ firstUsername: null === (i = D.default.getUser(o[0])) || void 0 === i ? void 0 : i.username, secondUsername: null === (r = D.default.getUser(o[1])) || void 0 === r ? void 0 : r.username, emojiNames: u }); else return U.default.Messages.A11Y_ANNOUNCEMENT_VOICE_CHANNEL_EFFECTS_MULTIPLE.format({ firstUsername: null === (s = D.default.getUser(o[0])) || void 0 === s ? void 0 : s.username, secondUsername: null === (a = D.default.getUser(o[1])) || void 0 === a ? void 0 : a.username, count: o.length - 2, emojiNames: u }) } }, 94432: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { VOICE_RECORDING_MIN_DURATION_MILLIS: function() { return s }, WAVEFORM_WAVE_MAX_VALUE: function() { return a } }), (r = i || (i = {}))[r.SENDING = 0] = "SENDING", r[r.CANCELLING = 1] = "CANCELLING", r[r.LOCKING = 2] = "LOCKING", r[r.LOCKED = 3] = "LOCKED"; let s = 500, a = 255 }, 328187: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("512722"), r = n.n(i); function s(e, t) { if (r()(e.length >= t, "Waveform smaller than samples"), e.length === t) return e; let n = e.length / t, i = [], s = 0; for (; i.length < t;) { let t = Math.round((i.length + 1) * n), r = 0, a = 0; for (let n = s; n < t && n < e.length; n++) r += e[n], a++; i[i.length] = r / a, s = t } return i } }, 201542: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("481060"), u = n("607070"), d = n("62170"), _ = n("715246"), c = n("80618"), E = n("786048"), I = n("897353"), T = n("585483"), f = n("70956"), S = n("36703"), h = n("347312"), A = n("981631"), m = n("689938"), N = n("750892"); let p = r.lazy(() => Promise.all([n.e("26460"), n.e("89792")]).then(n.bind(n, "711635"))); function O(e) { let { played: t, duration: n, currentTime: r } = e, s = null == n ? "--:--" : t ? (0, _.convertSecondsToClockFormat)(Math.ceil(n - r)) : (0, _.convertSecondsToClockFormat)(Math.ceil(n)); return (0, i.jsx)(l.Text, { variant: "text-sm/normal", className: N.duration, tabularNumbers: !0, children: s }) } t.default = r.memo(function(e) { var t, n, s, _, C, R; let g, { src: L, volume: v = 1, onVolumeChange: D, onMute: M, waveform: y, durationSecs: P, onVolumeShow: U, onVolumeHide: b, onPlay: G, onPause: w, onError: k } = e, B = r.useRef(null), [V, x] = r.useState(0), [F, H] = r.useState(P), [Y, j] = r.useState(!1), [W, K] = r.useState(!1), [z, Z] = r.useState(!1), [X, Q] = r.useState(!1), [q, J] = r.useState("none"), [$, ee] = r.useState(() => "function" == typeof v ? v() : v), et = r.useRef(void 0), en = r.useCallback(() => { K(e => !e) }, []), ei = r.useCallback(() => { J("metadata") }, []), er = r.useCallback(e => { let t = e.currentTarget.duration; !isNaN(t) && H(t) }, []), es = r.useCallback(() => { K(!1), null == et.current && (et.current = setTimeout(() => { Q(!1), et.current = void 0 }, 500)) }, []), ea = r.useCallback(() => { !z && es() }, [es, z]), eo = r.useCallback(() => { let e = B.current; if (null == e) return; let t = e.error; null == k || k(t) }, [k]), el = r.useCallback(e => { let t = (0, S.perceptualToAmplitude)(e, 1); j(0 === t), ee(t), null == D || D(t) }, [D]), eu = r.useCallback(() => { j(!Y), null == M || M(!Y) }, [Y, M]), ed = r.useCallback(() => { Z(!0) }, []), e_ = r.useCallback(() => { Z(!1), V === F && es() }, [V, F, es]), ec = r.useCallback(e => { let t = B.current; if (null == F || null == t) return; let n = e * F; x(n), t.currentTime = n, Q(!0), clearTimeout(et.current), et.current = void 0 }, [F]); r.useEffect(() => { !X && W && Q(!0) }, [W, X]); let eE = r.useRef(null); r.useEffect(() => { if (X || W) { if (W) { var e, t; eE.current = performance.now(), null == G || G(!1, V, (null !== (t = null === (e = B.current) || void 0 === e ? void 0 : e.duration) && void 0 !== t ? t : 0) * f.default.Millis.SECOND) } else { let e = performance.now(), t = eE.current; null == w || w(V, null != t ? (e - t) / 1e3 : 0), eE.current = null } } }, [W]), t = B, n = W, s = x, r.useEffect(() => { let e; return ! function i() { let r = t.current; if (null != r) s(r.currentTime), n && (e = requestAnimationFrame(i)) }(), () => { null != e && cancelAnimationFrame(e) } }, [t, n, s]), _ = L, C = W, R = K, r.useEffect(() => { if (C) return T.ComponentDispatch.dispatch(A.ComponentActions.VOICE_MESSAGE_PLAYBACK_STARTED, { src: _ }), T.ComponentDispatch.subscribe(A.ComponentActions.VOICE_MESSAGE_PLAYBACK_STARTED, e), () => { T.ComponentDispatch.unsubscribe(A.ComponentActions.VOICE_MESSAGE_PLAYBACK_STARTED, e) }; function e(e) { let { src: t } = e; _ !== t && R(!1) } }, [_, C, R]); let eI = W ? E.default : I.default, eT = W ? m.default.Messages.PAUSE : m.default.Messages.PLAY; g = "Safari" === platform.name ? (0, i.jsx)(r.Suspense, { children: (0, i.jsx)(p, { ref: B, className: N.audioElement, src: L, preload: q, playing: W && !z, onEnded: ea, onLoadedMetadata: er, onError: eo, muted: Y, volume: $ }) }) : (0, i.jsx)(d.default, { ref: B, className: N.audioElement, controls: !1, preload: q, onEnded: ea, onLoadedMetadata: er, onError: eo, muted: Y, volume: $, playing: W && !z, children: (0, i.jsx)("source", { src: L }) }); let ef = (0, o.useStateFromStores)([u.default], () => u.default.useReducedMotion), { enabled: eS } = (0, l.useRedesignIconContext)(); return (0, i.jsxs)("div", { className: a()(N.container, { [N.playing]: W }), onMouseEnter: ei, children: [(0, i.jsx)("div", { className: N.rippleContainer, children: (0, i.jsx)("div", { className: a()(N.ripple, { [N.reducedMotion]: ef }) }) }), (0, i.jsx)(l.Clickable, { className: N.playButtonContainer, onClick: en, "aria-label": eT, children: (0, i.jsx)(eI, { className: a()(N.playIcon, { [N.oldPlayIconSpacing]: !eS && !W }), width: 18, height: 18 }) }), (0, i.jsx)(h.default, { className: N.waveform, waveform: y, currentTime: V, duration: null != F ? F : 1, playing: W, played: X, onDrag: ec, onDragStart: ed, onDragEnd: e_ }), (0, i.jsx)(O, { played: X, currentTime: V, duration: F }), (0, i.jsx)(c.default, { className: N.volumeButton, iconClassName: N.volumeButtonIcon, sliderWrapperClassName: N.volumeSlider, muted: Y, value: (0, S.amplitudeToPerceptual)($, 1), minValue: 0, maxValue: 1, currentWindow: window, onValueChange: el, onToggleMute: eu, onVolumeShow: U, onVolumeHide: b }), g] }) }) }, 347312: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return C } }), n("642549"), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("692547"), l = n("481060"), u = n("393238"), d = n("206678"), _ = n("302221"), c = n("328187"), E = n("607889"), I = n("94432"), T = n("456359"); let f = I.VOICE_RECORDING_MIN_DURATION_MILLIS / 1e3, S = 6, h = 2, A = [0, 0, 0, 0, 0]; function m(e) { let { showAll: t, currentTime: n, duration: i, numSegments: r } = e; return t ? r : Math.max(0, Math.round(n / i * r)) } function N(e) { var t, n, i, r, s; let { context: a, devicePixelRatio: o, canvasHeight: l, segmentValue: u, segmentIndex: d, constrainMin: _ } = e, c = _ ? (24 - h) * u + h : 24 * u; if (0 !== c) t = a, n = 6 * d * o, i = (l / 2 - c / 2) * o, r = c * o, s = 1 * o, t.moveTo(n, i + s), t.lineTo(n, i + r - s), t.arc(n + s, i + r - s, s, Math.PI, 0, !0), t.lineTo(n + 2 * s, i + s), t.arc(n + s, i + s, s, 0, Math.PI, !0), t.closePath() } function p(e, t, n) { let [i, s] = r.useState(e), [a, o] = r.useState(e); return r.useLayoutEffect(() => { s(a), o(e) }, [e, t, n]), [i, a] } function O(e, t, n, i) { if (null == i) return [t, !1]; let r = Math.min((n - i) / 200, 1); return 1 === r ? [t, !1] : [(0, _.interpolateColor)(e, t, r), !0] } function C(e) { let { className: t, waveform: n, currentTime: s, duration: _, played: h, playing: C, onDrag: R, onDragStart: g, onDragEnd: L } = e, { ref: v, width: D } = (0, u.default)(), M = r.useMemo(() => { var e; let t; return Math.floor(((t = (e = _) <= f ? 40 : e >= 45 ? 294 : (Math.min(e, 45) - f) / (45 - f) * 254 + 40) + 4) / S) * S - 4 }, [_]), y = r.useRef(), P = function(e, t) { let n = r.useMemo(() => (function(e) { let t; if (null == e) return; try { t = window.atob(e) } catch (e) { return } let n = []; for (let e = 0; e < t.length; e++) n[e] = t.charCodeAt(e) / I.WAVEFORM_WAVE_MAX_VALUE; return n })(e), [e]), i = r.useMemo(() => (function(e) { if (null != e) return Math.floor((e + 4) / 6) })(t), [t]); return r.useMemo(() => { var e; return null !== (e = function(e, t) { if (null != e && null != t) { if (e.length < t) { let n = t - e.length; return e.concat(Array(n).fill(0)) } return (0, c.default)(e, t) } }(null != n ? n : [], i)) && void 0 !== e ? e : A }, [n, i]) }(n, D), U = r.useRef(h), b = r.useRef(C), G = r.useRef(null), w = window.devicePixelRatio, { lastBackgroundFillColor: k, backgroundFillColor: B, lastActiveFillColor: V, activeFillColor: x, lastInactiveFillColor: F, inactiveFillColor: H } = function(e, t) { let n = (0, l.useToken)(o.default.colors.INTERACTIVE_MUTED).hex(), i = (0, l.useToken)(o.default.colors.INTERACTIVE_NORMAL).hex(), r = (0, l.useToken)(o.default.colors.INTERACTIVE_ACTIVE).hex(), s = (0, l.useToken)(o.default.unsafe_rawColors.BRAND_430).hex(), a = (0, l.useToken)(o.default.unsafe_rawColors.WHITE_500).hex(), u = t ? s : n, [d, _] = p(u, t, e), [c, E] = p(t ? a : e ? r : i, t, e), [I, T] = p(e ? u : i, t, e); return { lastBackgroundFillColor: d, backgroundFillColor: _, lastActiveFillColor: c, activeFillColor: E, lastInactiveFillColor: I, inactiveFillColor: T } }(h, C); r.useEffect(() => { let e = m({ showAll: !h, currentTime: s, duration: _, numSegments: P.length }); y.current = P.map((t, n) => new E.default(n < e ? t : 0)) }, [P]), r.useEffect(() => { let e = y.current; if (null == e) return; let t = m({ showAll: !h, currentTime: s, duration: _, numSegments: P.length }); for (let n = 0; n < e.length; n++) { let i = e[n]; if (n < t) { i.animateTo(P[n]); continue } i.reset() } }, [P, s, _, h]), r.useEffect(() => { let e = null; return e = requestAnimationFrame(function t(n) { let i = v.current, r = null == i ? void 0 : i.getContext("2d"), s = y.current; if (null == i || null == r || null == s) return; let a = !1; (U.current !== h || b.current !== C) && (U.current = h, b.current = C, G.current = n), null != G.current && n > G.current + 200 && (G.current = null); let o = i.height / w; r.clearRect(0, 0, i.width, i.height), r.beginPath(); let [l, u] = O(k, B, n, G.current); a = a || u, r.fillStyle = l; for (let e = 0; e < P.length; e++) N({ context: r, devicePixelRatio: w, canvasHeight: o, segmentValue: P[e], segmentIndex: e, constrainMin: !0 }); r.fill(); let [d, _] = O(F, H, n, G.current); a = a || _; let [c, E] = O(V, x, n, G.current); a = a || E; for (let e = 0; e < s.length; e++) { let t = s[e], n = Math.max(t.getCurrentValue(), P[e] - .1); r.beginPath(), r.fillStyle = t.isReset ? d : c, N({ context: r, devicePixelRatio: w, canvasHeight: o, segmentValue: n, segmentIndex: e, constrainMin: !t.isReset }), a = a || t.isAnimating(), r.fill() } a && (e = requestAnimationFrame(t)) }), () => { null != e && cancelAnimationFrame(e) } }, [v, w, P, D, s, _, h, C, k, B, V, x, F, H]); let [, Y] = (0, d.default)({ ref: v, onDrag: R, onDragStart: g, onDragEnd: L }); return (0, i.jsx)("canvas", { onMouseDown: Y, className: a()(T.canvas, t), style: { width: M }, ref: v, height: 32 * window.devicePixelRatio, width: (null != D ? D : 0) * window.devicePixelRatio }) } }, 607889: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("217942"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { getCurrentValue() { if (null == this.animationDetails) return this.value; let e = performance.now() - this.animationDetails.animationStart, t = this.value < this.animationDetails.lastValue ? 150 : 500; return e > t ? (this.animationDetails = null, this.value) : this.value < this.animationDetails.lastValue ? i.easeOutQuint(e, this.animationDetails.lastValue, this.value, t) : i.easeOutBack(e, this.animationDetails.lastValue, this.value, t, 4) } animateTo(e) { this.isReset = !1, this.value !== e && (this.animationDetails = { lastValue: this.value, animationStart: performance.now() }, this.value = e) } isAnimating() { return null != this.animationDetails } reset() { this.animateTo(0), this.isReset = !0 } constructor(e) { r(this, "value", void 0), r(this, "animationDetails", void 0), r(this, "isReset", void 0), this.value = e, this.animationDetails = null, this.isReset = !1 } } }, 700615: function(e, t, n) { "use strict"; function i(e) { return !1 } n.r(t), n.d(t, { isVoicePanelEnabled: function() { return i } }) }, 365007: function(e, t, n) { "use strict"; n.r(t), n.d(t, { deleteWebAuthnCredential: function() { return u }, editWebAuthnCredential: function() { return d }, fetchWebAuthnConditionalChallenge: function() { return a }, fetchWebAuthnCredentials: function() { return l }, fetchWebAuthnPasswordlessChallenge: function() { return o }, finishRegisterWebAuthnCredential: function() { return c }, startRegisterWebAuthnCredential: function() { return _ } }); var i = n("544891"), r = n("570140"), s = n("981631"); async function a() { return (await i.HTTP.post(s.Endpoints.WEBAUTHN_CONDITIONAL_UI_CHALLENGE)).body } async function o() { let { challenge: e, ticket: t } = (await i.HTTP.post(s.Endpoints.WEBAUTHN_PASSWORDLESS_CHALLENGE)).body; return { challenge: e, ticket: t } } function l() { r.default.dispatch({ type: "MFA_WEBAUTHN_CREDENTIALS_LOADING" }), i.HTTP.get(s.Endpoints.MFA_WEBAUTHN_CREDENTIALS).then(e => { r.default.dispatch({ type: "MFA_WEBAUTHN_CREDENTIALS_LOADED", credentials: e.body }) }) } function u(e) { i.HTTP.del(s.Endpoints.MFA_WEBAUTHN_CREDENTIAL(e.id)).then(() => { r.default.dispatch({ type: "AUTHENTICATOR_DELETE", credential: e }) }) } async function d(e, t) { let n = await i.HTTP.patch({ url: s.Endpoints.MFA_WEBAUTHN_CREDENTIAL(e), body: { name: t } }); r.default.dispatch({ type: "AUTHENTICATOR_UPDATE", credential: n.body }) } async function _() { let { body: { ticket: e, challenge: t } } = await i.HTTP.post({ url: s.Endpoints.MFA_WEBAUTHN_CREDENTIALS, body: {} }); return { ticket: e, challenge: t } } async function c(e, t, n) { let a = await i.HTTP.post({ url: s.Endpoints.MFA_WEBAUTHN_CREDENTIALS, body: { name: e, ticket: t, credential: n } }); r.default.dispatch({ type: "AUTHENTICATOR_CREATE", credential: a.body }), r.default.dispatch({ type: "MFA_ENABLE_SUCCESS", codes: a.body.backup_codes }) } }, 973616: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createExecutable: function() { return _ }, default: function() { return c } }), n("789020"), n("47120"); var i = n("480189"), r = n("81825"), s = n("768581"), a = n("584597"), o = n("598077"), l = n("701488"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = { [l.POKER_NIGHT_APPLICATION_ID]: 7, [l.END_GAME_APPLICATION_ID]: 12 }; function _(e) { let t = { os: e.os, name: e.name }; return null != e.arguments && (t.arguments = e.arguments), null != e.is_launcher && (t.isLauncher = e.is_launcher), t } class c extends r.default { static createFromServer(e) { var t, n; return new c({ ...e, thirdPartySkus: e.third_party_skus, overlayWarn: e.overlay_warn, overlayCompatibilityHook: e.overlay_compatibility_hook, overlayMethods: null !== (t = e.overlay_methods) && void 0 !== t ? t : i.ApplicationOverlayMethodFlags.DEFAULT, hook: e.hook, primarySkuId: e.primary_sku_id, storeListingSkuId: e.store_listing_sku_id, guildId: e.guild_id, guild: e.guild, publishers: null != e.publishers ? e.publishers.map(a.default.createFromServer) : [], developers: null != e.developers ? e.developers.map(a.default.createFromServer) : [], eulaId: e.eula_id, slug: e.slug, coverImage: e.cover_image, bot: null != e.bot ? new o.default(e.bot) : null, flags: null !== (n = e.flags) && void 0 !== n ? n : 0, maxParticipants: e.max_participants, tags: e.tags, embeddedActivityConfig: e.embedded_activity_config, roleConnectionsVerificationUrl: e.role_connections_verification_url, integrationTypesConfig: null != e.integration_types_config ? Object.fromEntries(Object.entries(e.integration_types_config).map(e => { let [t, n] = e; return [t, { oauth2InstallParams: (null != n ? n : {}).oauth2_install_params }] })) : null, termsOfServiceUrl: e.terms_of_service_url, privacyPolicyUrl: e.privacy_policy_url }) } getIconURL(e, t) { return null != this.icon ? s.default.getGameAssetURL({ id: this.id, hash: this.icon, size: e, format: t }) : null } getIconSource(e, t) { return null != this.icon ? s.default.getGameAssetSource({ id: this.id, hash: this.icon, size: e, format: t }) : null } getSplashURL(e, t) { return null != this.splash ? s.default.getGameAssetURL({ id: this.id, hash: this.splash, size: e, keepAspectRatio: !0, format: t }) : null } getCoverImageURL(e) { return null != this.coverImage ? s.default.getApplicationIconURL({ id: this.id, icon: this.coverImage, size: e }) : null } getMaxParticipants() { var e, t; return null !== (t = null !== (e = this.maxParticipants) && void 0 !== e ? e : d[this.id]) && void 0 !== t ? t : 0 } supportsIntegrationTypes() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; let i = this.integrationTypesConfig; return null != i && t.every(e => e in i) } get destinationSkuId() { return null != this.storeListingSkuId ? this.storeListingSkuId : this.primarySkuId } get supportsOutOfProcessOverlay() { return c.supportsOutOfProcessOverlay(this.overlayMethods) } static supportsOutOfProcessOverlay(e) { let t = i.ApplicationOverlayMethodFlags.OUT_OF_PROCESS; return null != e && (e & t) === t } constructor(e) { var t, n, r, s; super(), u(this, "id", void 0), u(this, "name", void 0), u(this, "icon", void 0), u(this, "splash", void 0), u(this, "overlay", void 0), u(this, "overlayWarn", void 0), u(this, "overlayCompatibilityHook", void 0), u(this, "overlayMethods", void 0), u(this, "hook", void 0), u(this, "aliases", void 0), u(this, "publishers", void 0), u(this, "developers", void 0), u(this, "primarySkuId", void 0), u(this, "storeListingSkuId", void 0), u(this, "thirdPartySkus", void 0), u(this, "guildId", void 0), u(this, "guild", void 0), u(this, "executables", void 0), u(this, "hashes", void 0), u(this, "description", void 0), u(this, "eulaId", void 0), u(this, "slug", void 0), u(this, "coverImage", void 0), u(this, "bot", void 0), u(this, "flags", void 0), u(this, "maxParticipants", void 0), u(this, "tags", void 0), u(this, "embeddedActivityConfig", void 0), u(this, "type", void 0), u(this, "team", void 0), u(this, "roleConnectionsVerificationUrl", void 0), u(this, "integrationTypesConfig", void 0), u(this, "isMonetized", void 0), u(this, "storefront_available", void 0), u(this, "termsOfServiceUrl", void 0), u(this, "privacyPolicyUrl", void 0), this.id = e.id, this.name = e.name, this.icon = e.icon || null, this.splash = e.splash || null, this.overlay = e.overlay || !1, this.overlayWarn = e.overlayWarn || !1, this.overlayCompatibilityHook = e.overlayCompatibilityHook || !1, this.overlayMethods = null !== (t = e.overlayMethods) && void 0 !== t ? t : i.ApplicationOverlayMethodFlags.DEFAULT, this.hook = null === (n = e.hook) || void 0 === n || n, this.aliases = e.aliases || [], this.publishers = e.publishers || [], this.developers = e.developers || [], this.primarySkuId = e.primarySkuId, this.storeListingSkuId = e.storeListingSkuId, this.guildId = e.guildId || null, this.guild = e.guild || null, this.thirdPartySkus = e.thirdPartySkus || [], this.executables = (e.executables || []).map(_), this.hashes = e.hashes || [], this.description = e.description || null, this.eulaId = e.eulaId || null, this.slug = e.slug || null, this.bot = e.bot || null, this.coverImage = e.coverImage || null, this.flags = null !== (r = e.flags) && void 0 !== r ? r : 0, this.tags = null !== (s = e.tags) && void 0 !== s ? s : [], this.maxParticipants = e.maxParticipants, this.embeddedActivityConfig = e.embedded_activity_config, this.type = e.type, this.team = e.team, this.roleConnectionsVerificationUrl = e.roleConnectionsVerificationUrl, this.integrationTypesConfig = e.integrationTypesConfig, this.isMonetized = e.is_monetized, this.storefront_available = e.storefront_available, this.termsOfServiceUrl = e.termsOfServiceUrl, this.privacyPolicyUrl = e.privacyPolicyUrl } } }, 932015: function(e, t, n) { "use strict"; n.r(t); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { static createFromServer(e) { return new s({ id: e.id, guildId: e.guild_id, userId: null != e.user ? e.user.id : e.user_id, user: e.user, ended: e.ended, endsAt: null != e.ends_at && "" !== e.ends_at ? new Date(e.ends_at) : null }) } constructor(e) { super(), r(this, "id", void 0), r(this, "guildId", void 0), r(this, "userId", void 0), r(this, "user", void 0), r(this, "ended", void 0), r(this, "endsAt", void 0), this.id = e.id, this.guildId = e.guildId, this.userId = e.userId, this.user = e.user, this.ended = e.ended, this.endsAt = null != e.endsAt ? e.endsAt : null } } t.default = s }, 503013: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("81825"), r = n("689938"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a extends i.default { static createFromServer(e) { return new a({ id: e.id, liveBuildId: e.live_build_id, name: e.name }) } getName(e) { return null != this.name ? this.name : this.id === e ? r.default.Messages.APPLICATION_BRANCH_NAME_MASTER : r.default.Messages.APPLICATION_BRANCH_NAME_UNKNOWN } constructor(e) { super(), s(this, "id", void 0), s(this, "liveBuildId", void 0), s(this, "name", void 0), this.id = e.id, this.liveBuildId = e.liveBuildId, this.name = e.name } } }, 131704: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ALL_CHANNEL_TYPES: function() { return m }, CHANNEL_ELIGIBLE_FOR_UNREAD_SETTING: function() { return $ }, CREATEABLE_NON_VOCAL_CHANNEL_NAME_TYPES: function() { return X }, ChannelRecordBase: function() { return ec }, DMChannelRecord: function() { return eN }, EDITABLE_CHANNEL_TYPES: function() { return W }, EDITABLE_VOICE_SETTINGS_TYPES: function() { return q }, GUILD_CHANNEL_TYPES: function() { return C }, GUILD_FAVORITES_CHANNEL_TYPES: function() { return ee }, GUILD_NON_CATEGORY_CHANNEL_TYPES: function() { return j }, GUILD_VOCAL_CHANNEL_TYPES: function() { return g }, GUILD_WEBHOOK_CHANNEL_TYPES: function() { return O }, GuildTextualChannelRecord: function() { return eT }, NSFW_CHANNEL_TYPES: function() { return Z }, PrivateChannelRecord: function() { return em }, SILENT_JOIN_LEAVE_CHANNEL_TYPES: function() { return v }, SLOWMODE_CHANNEL_TYPES: function() { return Q }, TEXT_CHANNEL_TYPES: function() { return U }, THREADED_CHANNEL_TYPES: function() { return x }, THREAD_CHANNEL_TYPES: function() { return V }, TOGGLE_ANNOUNCEMENT_CHANNEL_TYPES: function() { return K }, TOPIC_CHANNEL_TYPES: function() { return z }, UnknownChannelRecord: function() { return eE }, VOICE_THREAD_PARENT_CHANNEL_TYPES: function() { return J }, castChannelRecord: function() { return eL }, createChannelRecord: function() { return ev }, createChannelRecordFromInvite: function() { return eR }, createChannelRecordFromServer: function() { return eC }, getAccessPermissions: function() { return eo }, getBasicAccessPermissions: function() { return el }, isGuildChannelType: function() { return R }, isGuildReadableType: function() { return B }, isGuildSelectableChannelType: function() { return A }, isGuildTextChannelType: function() { return p }, isGuildVocalChannelType: function() { return L }, isMultiUserDM: function() { return P }, isPrivate: function() { return M }, isReadableType: function() { return Y }, isTextChannel: function() { return b }, isThread: function() { return F }, isVoiceChannel: function() { return w } }), n("47120"), n("724458"), n("789020"); var i = n("392711"), r = n.n(i), s = n("31775"), a = n.n(s), o = n("313361"), l = n("683860"), u = n("149765"), d = n("283693"), _ = n("146085"), c = n("427679"), E = n("630388"), I = n("709054"), T = n("981631"), f = n("176505"); function S(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let h = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_STORE, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_DIRECTORY, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA, T.ChannelTypes.DM, T.ChannelTypes.GROUP_DM]); function A(e) { return h.has(e) } let m = new Set([T.ChannelTypes.DM, T.ChannelTypes.GROUP_DM, T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE, T.ChannelTypes.GUILD_CATEGORY, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_STORE, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_DIRECTORY, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA]), N = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD]); function p(e) { return N.has(e) } let O = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE]), C = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE, T.ChannelTypes.GUILD_CATEGORY, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_STORE, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_DIRECTORY, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA]); function R(e) { return C.has(e) } T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA; let g = new Set([T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE]); function L(e) { return "SELECTABLE" !== e && g.has(e) } let v = new Set([T.ChannelTypes.GUILD_STAGE_VOICE]), D = new Set([T.ChannelTypes.DM, T.ChannelTypes.GROUP_DM]); function M(e) { return D.has(e) } let y = new Set([T.ChannelTypes.GROUP_DM]); function P(e) { return y.has(e) } let U = new Set([T.ChannelTypes.DM, T.ChannelTypes.GROUP_DM, T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD]); function b(e) { return U.has(e) } let G = new Set([T.ChannelTypes.DM, T.ChannelTypes.GROUP_DM, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD]); function w(e) { return G.has(e) } let k = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_DIRECTORY, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA, T.ChannelTypes.DM, T.ChannelTypes.GROUP_DM]); function B(e) { return k.has(e) } let V = new Set([T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD]), x = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA]); function F(e) { return V.has(e) } let H = new Set([T.ChannelTypes.DM, T.ChannelTypes.GROUP_DM, T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA, T.ChannelTypes.GUILD_DIRECTORY, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE]); function Y(e) { return H.has(e) } let j = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_STORE, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_DIRECTORY, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA]), W = new Set([T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_CATEGORY, T.ChannelTypes.GUILD_STORE, T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE, T.ChannelTypes.GUILD_DIRECTORY, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA]), K = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT]), z = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA]), Z = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE]), X = new Set([T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA, T.ChannelTypes.ANNOUNCEMENT_THREAD]), Q = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA, T.ChannelTypes.ANNOUNCEMENT_THREAD, T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE]), q = new Set([T.ChannelTypes.PUBLIC_THREAD, T.ChannelTypes.PRIVATE_THREAD, T.ChannelTypes.GUILD_VOICE, T.ChannelTypes.GUILD_STAGE_VOICE]), J = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_MEDIA]), $ = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_CATEGORY, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_ANNOUNCEMENT]), ee = new Set([T.ChannelTypes.GUILD_TEXT, T.ChannelTypes.GUILD_ANNOUNCEMENT, T.ChannelTypes.GUILD_FORUM, T.ChannelTypes.GUILD_VOICE]); function et(e) { let t = {}; return null == e || e.forEach(e => { t[e.id] = { id: e.id, type: e.type, allow: u.deserialize(e.allow), deny: u.deserialize(e.deny) } }), t } function en(e) { return null == e ? {} : r().reduce(e, (e, t) => (e[t.id] = t.nick, e), {}) } function ei(e) { return null == e ? [] : e.map(e => ({ id: e.id, name: e.name, emojiId: 0 !== e.emoji_id ? e.emoji_id : void 0, emojiName: e.emoji_name, moderated: e.moderated })) } function er(e) { return null != e ? { id: e.id, name: e.name } : void 0 } let es = u.combine(T.Permissions.CONNECT, T.Permissions.VIEW_CHANNEL), ea = T.BasicPermissions.CONNECT | T.BasicPermissions.VIEW_CHANNEL; function eo(e) { return L(e) ? es : T.Permissions.VIEW_CHANNEL } function el(e) { return L(e) ? ea : T.BasicPermissions.VIEW_CHANNEL } class eu { constructor(e) { var t, n, i; S(this, "id", void 0), S(this, "type", void 0), S(this, "name", void 0), S(this, "guild_id", void 0), S(this, "topic_", void 0), S(this, "position_", void 0), S(this, "permissionOverwrites_", void 0), S(this, "bitrate_", void 0), S(this, "rtcRegion", void 0), S(this, "videoQualityMode", void 0), S(this, "userLimit_", void 0), S(this, "recipients", void 0), S(this, "rawRecipients", void 0), S(this, "ownerId", void 0), S(this, "icon", void 0), S(this, "application_id", void 0), S(this, "nicks", void 0), S(this, "nsfw_", void 0), S(this, "parent_id", void 0), S(this, "memberListId", void 0), S(this, "rateLimitPerUser_", void 0), S(this, "defaultThreadRateLimitPerUser", void 0), S(this, "defaultAutoArchiveDuration", void 0), S(this, "flags_", void 0), S(this, "originChannelId", void 0), S(this, "lastMessageId", void 0), S(this, "lastPinTimestamp", void 0), S(this, "availableTags", void 0), S(this, "appliedTags", void 0), S(this, "messageCount", void 0), S(this, "memberCount", void 0), S(this, "threadMetadata", void 0), S(this, "memberIdsPreview", void 0), S(this, "member", void 0), S(this, "parentChannelThreadType", void 0), S(this, "template", void 0), S(this, "defaultReactionEmoji", void 0), S(this, "isMessageRequest", void 0), S(this, "isMessageRequestTimestamp", void 0), S(this, "isSpam", void 0), S(this, "totalMessageSent", void 0), S(this, "defaultSortOrder", void 0), S(this, "version", void 0), S(this, "defaultForumLayout", void 0), S(this, "iconEmoji", void 0), S(this, "themeColor", void 0), S(this, "safetyWarnings", void 0), this.id = e.id, this.type = null !== (t = e.type) && void 0 !== t ? t : T.ChannelTypes.GUILD_TEXT, this.name = null !== (n = e.name) && void 0 !== n ? n : "", this.guild_id = null !== (i = e.guild_id) && void 0 !== i ? i : null } } function ed(e) { return "topic" in e && (e.topic_ = e.topic, delete e.topic), "position" in e && (e.position_ = e.position, delete e.position), "permissionOverwrites" in e && (e.permissionOverwrites_ = e.permissionOverwrites, delete e.permissionOverwrites), "bitrate" in e && (e.bitrate_ = e.bitrate, delete e.bitrate), "userLimit" in e && (e.userLimit_ = e.userLimit, delete e.userLimit), "nsfw" in e && (e.nsfw_ = e.nsfw, delete e.nsfw), "rateLimitPerUser" in e && (e.rateLimitPerUser_ = e.rateLimitPerUser, delete e.rateLimitPerUser), "flags" in e && (e.flags_ = e.flags, delete e.flags), e } let e_ = Object.freeze({}); class ec extends eu { get permissionOverwrites() { var e; return null !== (e = this.permissionOverwrites_) && void 0 !== e ? e : e_ } get topic() { var e; return null !== (e = this.topic_) && void 0 !== e ? e : "" } get position() { var e; return null !== (e = this.position_) && void 0 !== e ? e : 0 } get bitrate() { var e; return null !== (e = this.bitrate_) && void 0 !== e ? e : T.BITRATE_DEFAULT } get userLimit() { var e; return null !== (e = this.userLimit_) && void 0 !== e ? e : 0 } get nsfw() { var e; return null !== (e = this.nsfw_) && void 0 !== e && e } get rateLimitPerUser() { var e; return null !== (e = this.rateLimitPerUser_) && void 0 !== e ? e : 0 } get flags() { var e; return null !== (e = this.flags_) && void 0 !== e ? e : 0 } toJS() { return { ...this } } set(e, t) { return this.merge(ed({ [e]: t })) } merge(e) { let t = null, n = ed(e); for (let e in n) n.hasOwnProperty(e) && this[e] !== n[e] && (null == t && (t = this.toJS()), t[e] = n[e]); return null != t ? new this.constructor(t) : this } computeLurkerPermissionsAllowList() { if (this.isGuildStageVoice() && c.default.isPublic(this.id)) return _.LURKER_STAGE_CHANNEL_PERMISSIONS_ALLOWLIST } isNSFW() { return this.nsfw } isManaged() { return null != this.application_id } isPrivate() { return M(this.type) } isGroupDM() { return this.type === T.ChannelTypes.GROUP_DM } isMultiUserDM() { return P(this.type) } isDM() { return this.type === T.ChannelTypes.DM } isSystemDM() { return !1 } isArchivedThread() { var e; return this.isThread() && (null === (e = this.threadMetadata) || void 0 === e ? void 0 : e.archived) === !0 } isLockedThread() { var e; return this.isThread() && (null === (e = this.threadMetadata) || void 0 === e ? void 0 : e.locked) === !0 } isScheduledForDeletion() { return this.hasFlag(f.ChannelFlags.IS_SCHEDULED_FOR_DELETION) } isBroadcastChannel() { return this.hasFlag(f.ChannelFlags.IS_BROADCASTING) } isArchivedLockedThread() { var e, t; return V.has(this.type) && (null === (e = this.threadMetadata) || void 0 === e ? void 0 : e.archived) === !0 && (null === (t = this.threadMetadata) || void 0 === t ? void 0 : t.locked) === !0 } isForumPost() { return this.type === T.ChannelTypes.PUBLIC_THREAD && null != this.parentChannelThreadType && T.ChannelTypesSets.GUILD_THREADS_ONLY.has(this.parentChannelThreadType) } isCategory() { return this.type === T.ChannelTypes.GUILD_CATEGORY } isVocal() { return w(this.type) } isGuildVocal() { return L(this.type) } isGuildVocalOrThread() { return this.isGuildVocal() || this.isVocalThread() } isGuildVoice() { return this.type === T.ChannelTypes.GUILD_VOICE } isGuildStageVoice() { return this.type === T.ChannelTypes.GUILD_STAGE_VOICE } isListenModeCapable() { return this.isGuildStageVoice() } isThread() { return F(this.type) } isAnnouncementThread() { return this.type === T.ChannelTypes.ANNOUNCEMENT_THREAD } isVocalThread() { return this.type === T.ChannelTypes.PUBLIC_THREAD || this.type === T.ChannelTypes.PRIVATE_THREAD } isActiveThread() { var e; return this.isThread() && (null === (e = this.threadMetadata) || void 0 === e ? void 0 : e.archived) !== !0 } isDirectory() { return this.type === T.ChannelTypes.GUILD_DIRECTORY } isForumLikeChannel() { return this.isForumChannel() || this.isMediaChannel() } isForumChannel() { return this.type === T.ChannelTypes.GUILD_FORUM } isMediaChannel() { return this.type === T.ChannelTypes.GUILD_MEDIA } isMediaPost() { return this.type === T.ChannelTypes.PUBLIC_THREAD && this.parentChannelThreadType === T.ChannelTypes.GUILD_MEDIA } isRoleSubscriptionTemplatePreviewChannel() { return this.hasFlag(f.ChannelFlags.IS_ROLE_SUBSCRIPTION_TEMPLATE_PREVIEW_CHANNEL) } isOwner(e) { return this.ownerId === e } getGuildId() { return this.guild_id } getApplicationId() { return this.application_id } getDefaultSortOrder() { var e; return null !== (e = this.defaultSortOrder) && void 0 !== e ? e : l.ThreadSortOrder.LATEST_ACTIVITY } getDefaultLayout() { return this.isMediaChannel() ? o.ForumLayout.GRID : null == this.defaultForumLayout || this.defaultForumLayout === o.ForumLayout.DEFAULT ? o.ForumLayout.LIST : this.defaultForumLayout } get accessPermissions() { return eo(this.type) } hasFlag(e) { return (0, E.hasFlag)(this.flags, e) } } class eE extends ec { static fromServer(e, t) { var n, i, r; let s = { application_id: e.application_id, appliedTags: e.applied_tags, availableTags: null != e.available_tags ? ei(e.available_tags) : void 0, bitrate_: e.bitrate, defaultAutoArchiveDuration: e.default_auto_archive_duration, defaultForumLayout: e.default_forum_layout, defaultReactionEmoji: null != e.default_reaction_emoji ? { emojiId: 0 !== e.default_reaction_emoji.emoji_id ? e.default_reaction_emoji.emoji_id : void 0, emojiName: e.default_reaction_emoji.emoji_name } : void 0, defaultSortOrder: e.default_sort_order, defaultThreadRateLimitPerUser: e.default_thread_rate_limit_per_user, flags_: e.flags, guild_id: null !== (n = null != t ? t : e.guild_id) && void 0 !== n ? n : null, icon: e.icon, iconEmoji: er(e.icon_emoji), id: e.id, isMessageRequest: e.is_message_request, isMessageRequestTimestamp: e.is_message_request_timestamp, isSpam: e.is_spam, lastMessageId: e.last_message_id, lastPinTimestamp: e.last_pin_timestamp, member: null != e.member ? { flags: e.member.flags, muted: e.member.muted, muteConfig: e.member.mute_config, joinTimestamp: e.member.join_timestamp } : void 0, memberCount: e.member_count, memberIdsPreview: e.member_ids_preview, memberListId: e.member_list_id, messageCount: e.message_count, name: null !== (i = e.name) && void 0 !== i ? i : "", nicks: en(e.nicks), nsfw_: e.nsfw, originChannelId: e.origin_channel_id, ownerId: e.owner_id, parent_id: e.parent_id, parentChannelThreadType: void 0, permissionOverwrites_: et(e.permission_overwrites), position_: e.position, rateLimitPerUser_: e.rate_limit_per_user, rawRecipients: null != e.recipients ? e.recipients : [], recipients: null != e.recipients ? e.recipients.map(e => e.id) : [], rtcRegion: e.rtc_region, safetyWarnings: e.safety_warnings, template: e.template, themeColor: e.theme_color, threadMetadata: null != e.thread_metadata ? { archived: e.thread_metadata.archived, autoArchiveDuration: e.thread_metadata.auto_archive_duration, archiveTimestamp: e.thread_metadata.archive_timestamp, createTimestamp: e.thread_metadata.create_timestamp, locked: e.thread_metadata.locked, invitable: null === (r = e.thread_metadata.invitable) || void 0 === r || r } : void 0, topic_: e.topic, totalMessageSent: e.total_message_sent, type: null != e.type ? e.type : T.ChannelTypes.UNKNOWN, userLimit_: e.user_limit, version: e.version, videoQualityMode: e.video_quality_mode }; return (0, d.dangerouslyCast)(s, eE) } constructor(e) { super(e), this.application_id = e.application_id, this.appliedTags = e.appliedTags, this.availableTags = e.availableTags, this.bitrate_ = e.bitrate_, this.defaultAutoArchiveDuration = e.defaultAutoArchiveDuration, this.defaultForumLayout = e.defaultForumLayout, this.defaultReactionEmoji = e.defaultReactionEmoji, this.defaultSortOrder = e.defaultSortOrder, this.defaultThreadRateLimitPerUser = e.defaultThreadRateLimitPerUser, this.flags_ = e.flags_, this.icon = e.icon, this.iconEmoji = e.iconEmoji, this.isMessageRequest = e.isMessageRequest, this.isMessageRequestTimestamp = e.isMessageRequestTimestamp, this.isSpam = e.isSpam, this.lastMessageId = e.lastMessageId, this.lastPinTimestamp = e.lastPinTimestamp, this.member = e.member, this.memberCount = e.memberCount, this.memberIdsPreview = e.memberIdsPreview, this.memberListId = e.memberListId, this.messageCount = e.messageCount, this.nicks = e.nicks, this.nsfw_ = e.nsfw_, this.originChannelId = e.originChannelId, this.ownerId = e.ownerId, this.parent_id = e.parent_id, this.parentChannelThreadType = e.parentChannelThreadType, this.permissionOverwrites_ = e.permissionOverwrites_, this.position_ = e.position_, this.rateLimitPerUser_ = e.rateLimitPerUser_, this.rawRecipients = e.rawRecipients, this.recipients = e.recipients, this.rtcRegion = e.rtcRegion, this.safetyWarnings = e.safetyWarnings, this.template = e.template, this.themeColor = e.themeColor, this.threadMetadata = e.threadMetadata, this.topic_ = e.topic_, this.userLimit_ = e.userLimit_, this.version = e.version, this.videoQualityMode = e.videoQualityMode } } class eI extends ec { static fromServer(e, t) { var n, i, r, s; return eL({ application_id: e.application_id, bitrate_: e.bitrate, flags_: e.flags, guild_id: null !== (n = null != t ? t : e.guild_id) && void 0 !== n ? n : null, iconEmoji: er(e.icon_emoji), id: e.id, lastMessageId: e.last_message_id, lastPinTimestamp: e.last_pin_timestamp, memberListId: e.member_list_id, name: null !== (i = e.name) && void 0 !== i ? i : "", nsfw_: null !== (r = e.nsfw) && void 0 !== r && r, originChannelId: e.origin_channel_id, parent_id: e.parent_id, permissionOverwrites_: et(e.permission_overwrites), position_: e.position, rateLimitPerUser_: null !== (s = e.rate_limit_per_user) && void 0 !== s ? s : 0, rtcRegion: e.rtc_region, themeColor: e.theme_color, topic_: e.topic, type: null != e.type ? e.type : T.ChannelTypes.GUILD_VOICE, userLimit_: e.user_limit, version: e.version, videoQualityMode: e.video_quality_mode }) } constructor(e) { var t; super(e), this.application_id = e.application_id, this.bitrate_ = e.bitrate_, this.flags_ = e.flags_, this.iconEmoji = e.iconEmoji, this.lastMessageId = e.lastMessageId, this.lastPinTimestamp = e.lastPinTimestamp, this.memberListId = e.memberListId, this.nsfw_ = e.nsfw_, this.originChannelId = e.originChannelId, this.parent_id = e.parent_id, this.permissionOverwrites_ = null !== (t = e.permissionOverwrites_) && void 0 !== t ? t : {}, this.position_ = e.position_, this.rateLimitPerUser_ = e.rateLimitPerUser_, this.rtcRegion = e.rtcRegion, this.themeColor = e.themeColor, this.topic_ = e.topic_, this.userLimit_ = e.userLimit_, this.version = e.version, this.videoQualityMode = e.videoQualityMode } } class eT extends ec { static fromServer(e, t) { var n, i, r, s; return eL({ application_id: e.application_id, defaultAutoArchiveDuration: e.default_auto_archive_duration, defaultThreadRateLimitPerUser: e.default_thread_rate_limit_per_user, flags_: e.flags, guild_id: null !== (n = null != t ? t : e.guild_id) && void 0 !== n ? n : null, iconEmoji: er(e.icon_emoji), id: e.id, lastMessageId: e.last_message_id, lastPinTimestamp: e.last_pin_timestamp, memberListId: e.member_list_id, name: null !== (i = e.name) && void 0 !== i ? i : "", nsfw_: null !== (r = e.nsfw) && void 0 !== r && r, parent_id: e.parent_id, permissionOverwrites_: et(e.permission_overwrites), position_: e.position, rateLimitPerUser_: null !== (s = e.rate_limit_per_user) && void 0 !== s ? s : 0, themeColor: e.theme_color, topic_: e.topic, type: null != e.type ? e.type : T.ChannelTypes.GUILD_TEXT, version: e.version }) } constructor(e) { var t; super(e), this.application_id = e.application_id, this.defaultAutoArchiveDuration = e.defaultAutoArchiveDuration, this.defaultThreadRateLimitPerUser = e.defaultThreadRateLimitPerUser, this.flags_ = e.flags_, this.iconEmoji = e.iconEmoji, this.lastMessageId = e.lastMessageId, this.lastPinTimestamp = e.lastPinTimestamp, this.memberListId = e.memberListId, this.nsfw_ = e.nsfw_, this.parent_id = e.parent_id, this.permissionOverwrites_ = null !== (t = e.permissionOverwrites_) && void 0 !== t ? t : {}, this.position_ = e.position_, this.rateLimitPerUser_ = e.rateLimitPerUser_, this.themeColor = e.themeColor, this.topic_ = e.topic_, this.version = e.version } } class ef extends ec { static fromServer(e, t) { var n, i, r, s; let a = { availableTags: null != e.available_tags ? ei(e.available_tags) : [], defaultAutoArchiveDuration: e.default_auto_archive_duration, defaultForumLayout: e.default_forum_layout, defaultReactionEmoji: null != e.default_reaction_emoji ? { emojiId: 0 !== e.default_reaction_emoji.emoji_id ? e.default_reaction_emoji.emoji_id : void 0, emojiName: e.default_reaction_emoji.emoji_name } : void 0, defaultSortOrder: e.default_sort_order, defaultThreadRateLimitPerUser: e.default_thread_rate_limit_per_user, flags_: e.flags, guild_id: null !== (n = null != t ? t : e.guild_id) && void 0 !== n ? n : null, iconEmoji: er(e.icon_emoji), id: e.id, lastMessageId: e.last_message_id, lastPinTimestamp: e.last_pin_timestamp, memberListId: e.member_list_id, name: null !== (i = e.name) && void 0 !== i ? i : "", nsfw_: null !== (r = e.nsfw) && void 0 !== r && r, parent_id: e.parent_id, permissionOverwrites_: et(e.permission_overwrites), position_: e.position, rateLimitPerUser_: null !== (s = e.rate_limit_per_user) && void 0 !== s ? s : 0, template: e.template, themeColor: e.theme_color, topic_: e.topic, type: null != e.type ? e.type : T.ChannelTypes.GUILD_TEXT, version: e.version }; return (0, d.dangerouslyCast)(a, ef) } constructor(e) { var t, n; super(e), this.availableTags = null !== (t = e.availableTags) && void 0 !== t ? t : [], this.defaultAutoArchiveDuration = e.defaultAutoArchiveDuration, this.defaultForumLayout = e.defaultForumLayout, this.defaultReactionEmoji = e.defaultReactionEmoji, this.defaultSortOrder = e.defaultSortOrder, this.defaultThreadRateLimitPerUser = e.defaultThreadRateLimitPerUser, this.flags_ = e.flags_, this.iconEmoji = e.iconEmoji, this.lastMessageId = e.lastMessageId, this.lastPinTimestamp = e.lastPinTimestamp, this.memberListId = e.memberListId, this.nsfw_ = e.nsfw_, this.parent_id = e.parent_id, this.permissionOverwrites_ = null !== (n = e.permissionOverwrites_) && void 0 !== n ? n : {}, this.position_ = e.position_, this.rateLimitPerUser_ = e.rateLimitPerUser_, this.template = e.template, this.themeColor = e.themeColor, this.topic_ = e.topic_, this.version = e.version } } class eS { getOrCompute(e) { let t = this.cache.get(e); if (null != t) return t; { let t = parseInt(e, 10); return this.cache.set(e, t), t } } constructor(e = 100) { S(this, "cache", void 0), this.cache = new(a())(e) } } let eh = new eS, eA = new eS; class em extends ec { static sortRecipients(e, t) { let n = eh.getOrCompute(t); return [...null != e ? e : []].sort((e, t) => { let i = eA.getOrCompute(e.id); return (i ^ n) - (eA.getOrCompute(t.id) ^ n) }) } static fromServer(e) { var t, n; let i = em.sortRecipients(e.recipients, e.id), r = { application_id: e.application_id, flags_: e.flags, guild_id: null, icon: e.icon, id: e.id, isMessageRequest: e.is_message_request, isMessageRequestTimestamp: e.is_message_request_timestamp, isSpam: null !== (t = e.is_spam) && void 0 !== t && t, lastMessageId: e.last_message_id, lastPinTimestamp: e.last_pin_timestamp, name: null !== (n = e.name) && void 0 !== n ? n : "", nicks: en(e.nicks), ownerId: e.owner_id, rawRecipients: i, recipients: i.map(e => e.id), safetyWarnings: e.safety_warnings, type: null != e.type ? e.type : T.ChannelTypes.DM }; return (0, d.dangerouslyCast)(r, em) } isSystemDM() { let e = this.rawRecipients[0]; return this.type === T.ChannelTypes.DM && null != e && !0 === e.system } getRecipientId() { return this.recipients[0] } addRecipient(e, t, n) { if (e === n) return this; { var i; let n = this.set("recipients", r().uniq([...null !== (i = this.recipients) && void 0 !== i ? i : [], e]).sort(I.default.compare)); return null == t ? n : n.set("nicks", { ...n.nicks, [e]: t }) } } removeRecipient(e) { return this.set("recipients", r().without(this.recipients, e)) } constructor(e) { var t, n; super(e), this.application_id = e.application_id, this.flags_ = e.flags_, this.icon = e.icon, this.isMessageRequest = e.isMessageRequest, this.isMessageRequestTimestamp = e.isMessageRequestTimestamp, this.isSpam = e.isSpam, this.lastMessageId = e.lastMessageId, this.lastPinTimestamp = e.lastPinTimestamp, this.nicks = e.nicks, this.ownerId = e.ownerId, this.rawRecipients = em.sortRecipients(e.rawRecipients, this.id), this.recipients = [...null !== (t = e.recipients) && void 0 !== t ? t : []].sort(I.default.compare), this.safetyWarnings = null !== (n = e.safetyWarnings) && void 0 !== n ? n : [] } } class eN extends em {} class ep extends ec { static fromServer(e, t) { var n, i, r, s, a; let o = { appliedTags: null !== (n = e.applied_tags) && void 0 !== n ? n : [], bitrate_: e.bitrate, flags_: e.flags, guild_id: null !== (i = null != t ? t : e.guild_id) && void 0 !== i ? i : null, id: e.id, lastMessageId: e.last_message_id, lastPinTimestamp: e.last_pin_timestamp, member: null != e.member ? { flags: e.member.flags, muted: e.member.muted, muteConfig: e.member.mute_config, joinTimestamp: e.member.join_timestamp } : void 0, memberCount: e.member_count, memberIdsPreview: e.member_ids_preview, messageCount: e.message_count, name: null !== (r = e.name) && void 0 !== r ? r : "", nsfw_: null !== (s = e.nsfw) && void 0 !== s && s, ownerId: e.owner_id, parent_id: e.parent_id, parentChannelThreadType: e.parentChannelThreadType, rateLimitPerUser_: e.rate_limit_per_user, rtcRegion: e.rtc_region, threadMetadata: null != e.thread_metadata ? { archived: e.thread_metadata.archived, autoArchiveDuration: e.thread_metadata.auto_archive_duration, archiveTimestamp: e.thread_metadata.archive_timestamp, createTimestamp: e.thread_metadata.create_timestamp, locked: e.thread_metadata.locked, invitable: null === (a = e.thread_metadata.invitable) || void 0 === a || a } : void 0, totalMessageSent: e.total_message_sent, type: null != e.type ? e.type : T.ChannelTypes.PUBLIC_THREAD, userLimit_: e.user_limit, videoQualityMode: e.video_quality_mode }; return (0, d.dangerouslyCast)(o, ep) } constructor(e) { var t; super(e), this.appliedTags = null !== (t = e.appliedTags) && void 0 !== t ? t : [], this.bitrate_ = e.bitrate_, this.flags_ = e.flags_, this.lastMessageId = e.lastMessageId, this.lastPinTimestamp = e.lastPinTimestamp, this.member = e.member, this.memberCount = e.memberCount, this.memberIdsPreview = e.memberIdsPreview, this.messageCount = e.messageCount, this.nsfw_ = e.nsfw_, this.ownerId = e.ownerId, this.parent_id = e.parent_id, this.parentChannelThreadType = e.parentChannelThreadType, this.rateLimitPerUser_ = e.rateLimitPerUser_, this.rtcRegion = e.rtcRegion, this.threadMetadata = e.threadMetadata, this.userLimit_ = e.userLimit_, this.videoQualityMode = e.videoQualityMode } } let eO = { [T.ChannelTypes.DM]: em.fromServer, [T.ChannelTypes.GROUP_DM]: em.fromServer, [T.ChannelTypes.GUILD_TEXT]: eT.fromServer, [T.ChannelTypes.GUILD_VOICE]: eI.fromServer, [T.ChannelTypes.GUILD_STAGE_VOICE]: eI.fromServer, [T.ChannelTypes.GUILD_CATEGORY]: eT.fromServer, [T.ChannelTypes.GUILD_ANNOUNCEMENT]: eT.fromServer, [T.ChannelTypes.GUILD_STORE]: eT.fromServer, [T.ChannelTypes.ANNOUNCEMENT_THREAD]: ep.fromServer, [T.ChannelTypes.PUBLIC_THREAD]: ep.fromServer, [T.ChannelTypes.PRIVATE_THREAD]: ep.fromServer, [T.ChannelTypes.GUILD_DIRECTORY]: eT.fromServer, [T.ChannelTypes.GUILD_FORUM]: ef.fromServer, [T.ChannelTypes.GUILD_MEDIA]: ef.fromServer }; function eC(e, t) { var n, i; return (null !== (i = eO[null !== (n = e.type) && void 0 !== n ? n : T.ChannelTypes.GUILD_TEXT]) && void 0 !== i ? i : eE.fromServer)(e, t) } function eR(e) { return ev(e) } let eg = { [T.ChannelTypes.DM]: eN, [T.ChannelTypes.GROUP_DM]: class e extends em {}, [T.ChannelTypes.GUILD_TEXT]: class e extends eT {}, [T.ChannelTypes.GUILD_VOICE]: class e extends eI {}, [T.ChannelTypes.GUILD_STAGE_VOICE]: class e extends eI {}, [T.ChannelTypes.GUILD_CATEGORY]: class e extends eT {}, [T.ChannelTypes.GUILD_ANNOUNCEMENT]: class e extends eT {}, [T.ChannelTypes.GUILD_STORE]: class e extends eT {}, [T.ChannelTypes.ANNOUNCEMENT_THREAD]: ep, [T.ChannelTypes.PUBLIC_THREAD]: ep, [T.ChannelTypes.PRIVATE_THREAD]: ep, [T.ChannelTypes.GUILD_DIRECTORY]: class e extends eT {}, [T.ChannelTypes.GUILD_FORUM]: ef, [T.ChannelTypes.GUILD_MEDIA]: ef }; function eL(e) { var t, n; let i = null !== (n = eg[null !== (t = e.type) && void 0 !== t ? t : T.ChannelTypes.GUILD_TEXT]) && void 0 !== n ? n : eE; return (0, d.dangerouslyCast)(e, i) } function ev(e) { var t, n; return new(null !== (n = eg[null !== (t = e.type) && void 0 !== t ? t : T.ChannelTypes.GUILD_TEXT]) && void 0 !== n ? n : eE)(ed(e)) } }, 584597: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { static createFromServer(e) { return new s(e) } constructor(e) { super(), r(this, "id", void 0), r(this, "name", void 0), this.id = e.id, this.name = e.name } } }, 368111: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { toString() { return this.name } constructor(e) { super(), r(this, "id", void 0), r(this, "type", void 0), r(this, "name", void 0), r(this, "revoked", void 0), r(this, "integrations", void 0), r(this, "visibility", void 0), r(this, "friendSync", void 0), r(this, "verified", void 0), r(this, "showActivity", void 0), r(this, "twoWayLink", void 0), r(this, "accessToken", void 0), r(this, "metadata", void 0), r(this, "metadataVisibility", void 0), this.id = e.id, this.type = e.type, this.name = e.name, this.revoked = e.revoked || !1, this.integrations = e.integrations || [], this.visibility = e.visibility || 0, this.friendSync = e.friend_sync || !1, this.showActivity = e.show_activity || !1, this.verified = e.verified || !1, this.accessToken = e.access_token || null, this.twoWayLink = e.two_way_link || !1, this.metadata = e.metadata || null, this.metadataVisibility = e.metadata_visibility || 0 } } }, 959546: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("81825"), r = n("74538"), s = n("981631"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o extends i.default { static createFromServer(e) { var t, n; return new o({ id: e.id, skuId: e.sku_id, applicationId: e.application_id, userId: e.user_id, gifterId: e.gifter_user_id, type: e.type, branches: null !== (t = e.branches) && void 0 !== t ? t : [], startsAt: null != e.starts_at ? new Date(e.starts_at) : null, endsAt: null != e.ends_at ? new Date(e.ends_at) : null, subscriptionId: e.subscription_id, subscriptionPlanId: null != e.subscription_plan ? e.subscription_plan.id : null, parentId: null != e.parent_id ? e.parent_id : null, consumed: null != e.consumed ? e.consumed : null, giftCodeBatchId: null !== (n = e.gift_code_batch_id) && void 0 !== n ? n : null, giftStyle: e.gift_style, guildId: e.guild_id, deleted: e.deleted }) } get isGiftable() { return this.type === s.EntitlementTypes.USER_GIFT && null == this.gifterId } isValid(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null; if (this.isGiftable || this.deleted) return !1; if (this.type === s.EntitlementTypes.PREMIUM_SUBSCRIPTION) { let n = t.get(this.skuId); if (null != n && !n.premium || !r.default.canInstallPremiumApplications(e)) return !1 } let i = new Date; if (null != this.startsAt && i < this.startsAt || null != this.endsAt && i >= this.endsAt) return !1; if (null != n) { if (0 === this.branches.length) { if (this.applicationId !== n) return !1 } else if (!this.branches.includes(n)) return !1 } return !0 } constructor(e) { super(), a(this, "id", void 0), a(this, "skuId", void 0), a(this, "applicationId", void 0), a(this, "userId", void 0), a(this, "gifterId", void 0), a(this, "type", void 0), a(this, "branches", void 0), a(this, "startsAt", void 0), a(this, "endsAt", void 0), a(this, "subscriptionId", void 0), a(this, "subscriptionPlanId", void 0), a(this, "parentId", void 0), a(this, "consumed", void 0), a(this, "giftCodeBatchId", void 0), a(this, "giftStyle", void 0), a(this, "guildId", void 0), a(this, "deleted", void 0), this.id = e.id, this.skuId = e.skuId, this.applicationId = e.applicationId, this.userId = e.userId, this.gifterId = e.gifterId, this.type = e.type, this.branches = e.branches, this.startsAt = e.startsAt, this.endsAt = e.endsAt, this.subscriptionId = e.subscriptionId, this.subscriptionPlanId = e.subscriptionPlanId, this.parentId = e.parentId, this.consumed = e.consumed, this.giftCodeBatchId = e.giftCodeBatchId, this.giftStyle = e.giftStyle, this.guildId = e.guildId, this.deleted = e.deleted } } }, 209747: function(e, t, n) { "use strict"; n.r(t); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { static createFromServer(e, t) { return new s({ id: e.id, subscriptionId: e.subscription_id, premiumGuildSubscription: null != e.premium_guild_subscription ? { id: e.premium_guild_subscription.id, guildId: e.premium_guild_subscription.guild_id } : null, canceled: e.canceled, cooldownEndsAt: e.cooldown_ends_at, subscription: t }) } isOnCooldown() { return null != this.cooldownEndsAt && new Date(this.cooldownEndsAt).getTime() >= Date.now() } isAvailable() { return null == this.premiumGuildSubscription && !this.isOnCooldown() } constructor(e) { super(), r(this, "id", void 0), r(this, "subscriptionId", void 0), r(this, "premiumGuildSubscription", void 0), r(this, "canceled", void 0), r(this, "cooldownEndsAt", void 0), r(this, "subscription", void 0), this.id = e.id, this.subscriptionId = e.subscriptionId, this.premiumGuildSubscription = e.premiumGuildSubscription, this.canceled = e.canceled, this.cooldownEndsAt = e.cooldownEndsAt, this.subscription = e.subscription } } t.default = s }, 601964: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildRecordWithRoles: function() { return c }, default: function() { return _ } }), n("47120"); var i = n("81825"), r = n("768581"), s = n("709054"), a = n("624138"), o = n("981631"), l = n("185923"), u = n("474936"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class _ extends i.default { merge(e) { let { features: t } = e; if (null != t) { let n = new Set(t); if (n.size === this.features.size) { let t = !1; for (let e of n) if (!this.features.has(e)) { t = !0; break }! t && (e.features = this.features) } } return super.merge.call(this, e) } getSafetyAlertsChannelId() { var e; return null !== (e = this.safetyAlertsChannelId) && void 0 !== e ? e : this.publicUpdatesChannelId } getIconURL(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return r.default.getGuildIconURL({ id: this.id, size: e, icon: this.icon, canAnimate: t }) } getIconSource(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return r.default.getAnimatableSourceWithFallback(t, t => r.default.getGuildIconSource({ id: this.id, size: e, icon: this.icon, canAnimate: t })) } getApplicationId() { return this.application_id } toString() { var e; return null !== (e = this.name) && void 0 !== e ? e : "" } get acronym() { return (0, a.getAcronym)(this.name) } isOwner(e) { let t = "string" == typeof e ? e : null != e ? e.id : null; return this.ownerId === t } isOwnerWithRequiredMfaLevel(e) { return (!!e.mfaEnabled || this.mfaLevel !== o.MFALevels.ELEVATED) && this.isOwner(e) } isNew() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 7, t = s.default.extractTimestamp(this.id); return Date.now() - t < 864e5 * e } isLurker() { return null == this.joinedAt } hasFeature(e) { return this.features.has(e) } getEveryoneRoleId() { return s.default.castGuildIdAsEveryoneGuildRoleId(this.id) } getMaxEmojiSlots() { return Math.max(this.hasFeature(o.GuildFeatures.MORE_EMOJI) ? 200 : l.EMOJI_MAX_SLOTS, u.BoostedGuildFeatures[this.premiumTier].limits.emoji) } getMaxRoleSubscriptionEmojiSlots() { return 25 } getMaxSoundboardSlots() { return u.BoostedGuildFeatures[this.premiumTier].limits.soundboardSounds } isCommunity() { return this.hasFeature(o.GuildFeatures.COMMUNITY) } hasVerificationGate() { return this.hasFeature(o.GuildFeatures.MEMBER_VERIFICATION_GATE_ENABLED) && (this.hasFeature(o.GuildFeatures.COMMUNITY) || this.hasFeature(o.GuildFeatures.CLAN)) } hasCommunityInfoSubheader() { return this.hasFeature(o.GuildFeatures.COMMUNITY) && this.hasFeature(o.GuildFeatures.DISCOVERABLE) } canHaveRaidActivityAlerts() { return !this.hasFeature(o.GuildFeatures.COMMUNITY) && this.hasFeature(o.GuildFeatures.NON_COMMUNITY_RAID_ALERTS) || this.hasFeature(o.GuildFeatures.COMMUNITY) && !this.hasFeature(o.GuildFeatures.RAID_ALERTS_DISABLED) } updateJoinedAt(e) { return this.set("joinedAt", "string" == typeof e ? new Date(e) : e) } constructor(e) { var t, n, i; super(), d(this, "id", void 0), d(this, "name", void 0), d(this, "description", void 0), d(this, "ownerId", void 0), d(this, "icon", void 0), d(this, "splash", void 0), d(this, "banner", void 0), d(this, "homeHeader", void 0), d(this, "preferredLocale", void 0), d(this, "features", void 0), d(this, "afkChannelId", void 0), d(this, "afkTimeout", void 0), d(this, "systemChannelId", void 0), d(this, "verificationLevel", void 0), d(this, "joinedAt", void 0), d(this, "defaultMessageNotifications", void 0), d(this, "mfaLevel", void 0), d(this, "application_id", void 0), d(this, "explicitContentFilter", void 0), d(this, "vanityURLCode", void 0), d(this, "premiumTier", void 0), d(this, "premiumSubscriberCount", void 0), d(this, "premiumProgressBarEnabled", void 0), d(this, "systemChannelFlags", void 0), d(this, "rulesChannelId", void 0), d(this, "safetyAlertsChannelId", void 0), d(this, "discoverySplash", void 0), d(this, "publicUpdatesChannelId", void 0), d(this, "maxStageVideoChannelUsers", void 0), d(this, "maxVideoChannelUsers", void 0), d(this, "maxMembers", void 0), d(this, "nsfwLevel", void 0), d(this, "hubType", void 0), d(this, "latestOnboardingQuestionId", void 0), d(this, "clan", void 0); let r = e.features instanceof Set ? e.features : new Set(Array.from(e.features || [])); this.id = e.id, this.name = e.name || "", this.description = e.description || null, this.ownerId = e.ownerId || null, this.icon = e.icon || null, this.splash = e.splash || null, this.banner = e.banner || null, this.homeHeader = e.homeHeader || null, this.features = r, this.preferredLocale = e.preferredLocale || "en-US", this.afkChannelId = e.afkChannelId || null, this.afkTimeout = e.afkTimeout, this.systemChannelId = e.systemChannelId || null, this.verificationLevel = e.verificationLevel || o.VerificationLevels.NONE, this.joinedAt = e.joinedAt instanceof Date ? e.joinedAt : new Date(e.joinedAt), this.defaultMessageNotifications = e.defaultMessageNotifications || o.UserNotificationSettings.ALL_MESSAGES, this.mfaLevel = e.mfaLevel || o.MFALevels.NONE, this.application_id = e.application_id || null, this.explicitContentFilter = e.explicitContentFilter || o.GuildExplicitContentFilterTypes.DISABLED, this.vanityURLCode = e.vanityURLCode || void 0, this.premiumTier = e.premiumTier || o.BoostedGuildTiers.NONE, this.premiumSubscriberCount = e.premiumSubscriberCount || 0, this.premiumProgressBarEnabled = e.premiumProgressBarEnabled || !1, this.systemChannelFlags = e.systemChannelFlags, this.discoverySplash = e.discoverySplash || null, this.rulesChannelId = e.rulesChannelId || null, this.safetyAlertsChannelId = e.safetyAlertsChannelId || null, this.publicUpdatesChannelId = e.publicUpdatesChannelId || null, this.maxStageVideoChannelUsers = e.maxStageVideoChannelUsers || -1, this.maxVideoChannelUsers = e.maxVideoChannelUsers || -1, this.maxMembers = e.maxMembers || -1, this.nsfwLevel = null !== (t = e.nsfwLevel) && void 0 !== t ? t : o.GuildNSFWContentLevel.DEFAULT, this.hubType = e.hubType, this.latestOnboardingQuestionId = null !== (n = e.latestOnboardingQuestionId) && void 0 !== n ? n : null, this.clan = null !== (i = e.clan) && void 0 !== i ? i : null } } class c extends _ { constructor(e) { var t; super(e), d(this, "roles", void 0), this.roles = null !== (t = e.roles) && void 0 !== t ? t : {} } } }, 360742: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("81825"), r = n("598077"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a extends i.default { static createFromServer(e) { return new a({ ...e, user: new r.default(e.user) }) } constructor(e) { var t; super(), s(this, "id", void 0), s(this, "name", void 0), s(this, "type", void 0), s(this, "user", void 0), s(this, "displayName", void 0), this.id = e.id, this.name = e.name, this.type = e.type, this.user = e.user, this.displayName = null !== (t = e.name_localized) && void 0 !== t ? t : e.name } } }, 758449: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("789020"); var i = n("913527"), r = n.n(i), s = n("81825"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o extends s.default { static createFromServer(e) { var t; return new o({ ...e, maxUses: e.max_uses, maxAge: e.max_age, createdAt: r()(null !== (t = e.created_at) && void 0 !== t ? t : void 0), targetType: e.target_type, targetUser: e.target_user, targetApplication: e.target_application }) } isExpired() { let e = this.maxAge; return !!(e > 0 && r()(this.createdAt).add(e, "seconds").isBefore(Date.now())) || !1 } getExpiresAt() { return this.maxAge > 0 ? r()(this.createdAt).add(this.maxAge, "seconds").toDate() : 1 / 0 } toString() { return this.code } constructor(e) { super(), a(this, "code", void 0), a(this, "temporary", void 0), a(this, "revoked", void 0), a(this, "uses", void 0), a(this, "maxUses", void 0), a(this, "maxAge", void 0), a(this, "createdAt", void 0), a(this, "channel", void 0), a(this, "guild", void 0), a(this, "inviter", void 0), a(this, "targetType", void 0), a(this, "targetUser", void 0), a(this, "targetApplication", void 0), a(this, "type", void 0), a(this, "flags", void 0), this.code = e.code || "", this.temporary = e.temporary || !1, this.revoked = e.revoked || !1, this.uses = e.uses || 0, this.maxUses = e.maxUses || 0, this.maxAge = e.maxAge || 0, this.createdAt = e.createdAt || new Date, this.channel = e.channel, this.guild = e.guild, this.inviter = e.inviter || null, this.targetType = e.targetType || null, this.targetUser = e.targetUser || null, this.targetApplication = e.targetApplication || null, this.type = e.type || null, this.flags = e.flags || 0 } } }, 131792: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { constructor(e) { super(), r(this, "id", void 0), r(this, "widgets", void 0), this.id = e.id || "", this.widgets = e.widgets || [] } } }, 85521: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("789020"); var i = n("913527"), r = n.n(i), s = n("81825"), a = n("812206"), o = n("630388"), l = n("959546"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class _ extends s.default { static createFromServer(e) { return new _({ id: e.application.id, branchId: e.branch_id, entitlements: null != e.entitlements ? e.entitlements.map(e => l.default.createFromServer(e)) : [], branch: e.branch, flags: e.flags, createdAt: e.created_at, sku: { id: e.sku.id, type: e.sku.type, premium: e.sku.premium, preorderReleaseAt: null != e.sku.preorder_release_at ? r()(e.sku.preorder_release_at) : null, preorderApproximateReleaseDate: null != e.sku.preorder_approximate_release_date ? e.sku.preorder_approximate_release_date : null } }) } static createForTestMode(e) { return new _({ id: e.id, entitlements: [], branchId: e.branch.id, branch: e.branch, flags: u.LibraryApplicationFlags.ENTITLED, createdAt: e.branch.created_at, sku: { id: e.skuId, type: u.SKUTypes.DURABLE_PRIMARY, premium: !1 }, isTestMode: !0 }) } getFlags() { return this.flags } hasFlag(e) { return o.hasFlag(this.flags, e) } isHidden() { return this.hasFlag(u.LibraryApplicationFlags.HIDDEN) } isOverlayEnabled() { return !this.hasFlag(u.LibraryApplicationFlags.OVERLAY_DISABLED) } isMasterBranch() { return this.branchId === this.id } isDiscordApplication() { return !0 } isEntitled(e, t) { return !!this.isTestMode || this.entitlements.some(n => n.isValid(e, t, this.branchId)) } isPreorder() { return null != this.sku.preorderReleaseAt || null != this.sku.preorderApproximateReleaseDate } getDistributor() { return u.Distributors.DISCORD } getBranchName() { return null != this.branch ? this.branch.name : "master" } getBranchedName(e) { return this.isMasterBranch() || null == this.branch ? e.name : "".concat(e.name, " (").concat(this.branch.name, ")") } getSkuIdForAnalytics() { return this.sku.id } getAnalyticsData() { let e = a.default.getApplication(this.id); return { application_id: null != e ? e.id : null, application_name: null != e ? e.name : null, sku_id: this.getSkuIdForAnalytics(), launcher_platform: this.getDistributor() } } constructor(e) { super(), d(this, "id", void 0), d(this, "branchId", void 0), d(this, "flags", void 0), d(this, "createdAt", void 0), d(this, "entitlements", void 0), d(this, "branch", void 0), d(this, "sku", void 0), d(this, "isTestMode", void 0), this.id = e.id, this.createdAt = e.createdAt, this.flags = e.flags, this.branchId = e.branchId, this.entitlements = e.entitlements, this.branch = e.branch, this.sku = e.sku, this.isTestMode = e.isTestMode || !1 } } }, 709302: function(e, t, n) { "use strict"; n.r(t); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { static fromPath(e) { return new s({ id: e, path: e }) } constructor(e) { super(), r(this, "id", void 0), r(this, "path", void 0), this.id = e.id, this.path = e.path } } t.default = s }, 542974: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LocalizedPricingPromoRecord: function() { return s } }); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { static createFromServer(e) { var t, n; return new s({ planId: e.plan_id, countryCode: e.country_code, amount: null === (t = e.price) || void 0 === t ? void 0 : t.amount, currency: null === (n = e.price) || void 0 === n ? void 0 : n.currency, paymentSourceTypes: e.payment_source_types }) } constructor(e) { super(), r(this, "planId", void 0), r(this, "countryCode", void 0), r(this, "amount", void 0), r(this, "currency", void 0), r(this, "paymentSourceTypes", void 0), this.planId = e.planId, this.countryCode = e.countryCode, this.amount = e.amount, this.currency = e.currency, this.paymentSourceTypes = e.paymentSourceTypes } } }, 23750: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MessageSnapshotRecord: function() { return E }, MinimalMessageRecord: function() { return c } }), n("789020"), n("653041"), n("724458"); var i = n("373793"), r = n("81825"), s = n("712057"), a = n("566006"), o = n("995774"), l = n("630388"), u = n("358085"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class c extends r.default { constructor(e) { var t; super(), _(this, "type", void 0), _(this, "channel_id", void 0), _(this, "content", void 0), _(this, "attachments", void 0), _(this, "embeds", void 0), _(this, "timestamp", void 0), _(this, "editedTimestamp", void 0), _(this, "flags", void 0), _(this, "components", void 0), this.type = e.type || d.MessageTypes.DEFAULT, this.channel_id = e.channel_id, this.content = e.content || "", this.attachments = e.attachments || [], this.embeds = e.embeds || [], this.timestamp = e.timestamp || new Date, this.editedTimestamp = e.editedTimestamp || null, this.flags = e.flags || 0, this.components = null !== (t = e.components) && void 0 !== t ? t : [] } } class E extends r.default { constructor(e) { super(), _(this, "message", void 0), _(this, "guild", void 0), this.guild = e.guild, this.message = new c(e.message) } } t.default = class e extends c { isEdited() { return null != this.editedTimestamp } getChannelId() { return this.channel_id } getReaction(e) { return this.reactions.find(t => (0, o.emojiEquals)(t.emoji, e)) } userHasReactedWithEmoji(e, t) { return this.reactions.some(n => { if ((0, o.emojiEquals)(n.emoji, e)) return t && n.me || !t && n.me_burst }) } addReaction(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [], i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : a.ReactionTypes.NORMAL, r = -1, l = this.reactions.map((l, d) => { if ((0, o.emojiEquals)(l.emoji, e)) { if (r = d, i === a.ReactionTypes.BURST) { if (t && l.me) return l; let e = t && l.me_burst ? l.burst_count : l.burst_count + 1, i = null != l.burst_colors && l.burst_colors.length > 0 ? l.burst_colors : n; l = { ...l, me_burst: !!t || l.me_burst, burst_count: e, count_details: { ...l.count_details, burst: e }, burst_colors: i, themedBurstColors: (0, s.buildPlatformedThemedEmojiColorPalette)({ colors: i, shouldProcessMobileColors: (0, u.isIOS)() }) } } else if (i === a.ReactionTypes.VOTE) { var _, c; let e = null !== (c = null === (_ = l.count_details) || void 0 === _ ? void 0 : _.vote) && void 0 !== c ? c : 0, n = t && l.me_vote ? e : e + 1; l = { ...l, count_details: { ...l.count_details, vote: n }, me_vote: !!t || l.me_vote } } else { if (t && l.me_burst) return l; let e = t && l.me ? l.count : l.count + 1; l = { ...l, count: e, count_details: { ...l.count_details, normal: e }, me: !!t || l.me } } } return l }); return -1 === r && (i === a.ReactionTypes.BURST ? l.push({ emoji: e, me: !1, me_burst: t, count: 0, count_details: { burst: 1, normal: 0 }, burst_count: 1, burst_colors: n, themedBurstColors: (0, s.buildPlatformedThemedEmojiColorPalette)({ colors: null != n ? n : [], shouldProcessMobileColors: (0, u.isIOS)() }) }) : i === a.ReactionTypes.VOTE ? l.push({ emoji: e, me: !1, me_burst: !1, me_vote: t, count: 0, count_details: { burst: 0, normal: 0, vote: 1 }, burst_count: 0, burst_colors: [] }) : l.push({ emoji: e, me: t, me_burst: !1, count: 1, count_details: { burst: 0, normal: 1 }, burst_count: 0, burst_colors: [] })), this.set("reactions", l) } addReactionBatch(e, t) { return e.reduce((e, n) => { let { users: i, emoji: r } = n; return i.reduce((e, n) => e.addReaction(r, n === t), e) }, this) } removeReaction(e) { var t, n, i, r; let s = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], l = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : a.ReactionTypes.NORMAL, u = -1, d = this.reactions.map((t, n) => { if ((0, o.emojiEquals)(t.emoji, e)) { if (l === a.ReactionTypes.BURST) { let e = s && !t.me_burst ? t.burst_count : t.burst_count - 1; t = { ...t, burst_count: e, me_burst: !s && t.me_burst, count_details: { ...t.count_details, burst: e } } } else if (l === a.ReactionTypes.VOTE) { var i, r; let e = null !== (r = null === (i = t.count_details) || void 0 === i ? void 0 : i.vote) && void 0 !== r ? r : 0, n = s && !t.me_vote ? e : e - 1; t = { ...t, count_details: { ...t.count_details, vote: n }, me_vote: !s && t.me_vote } } else { let e = s && !t.me ? t.count : t.count - 1; t = { ...t, count: e, me: !s && t.me, count_details: { ...t.count_details, normal: e } } } u = n } return t }), { count: _, burst_count: c, count_details: E } = null !== (t = d[u]) && void 0 !== t ? t : {}, I = null !== (n = null == E ? void 0 : E.normal) && void 0 !== n ? n : 0, T = null !== (i = null == E ? void 0 : E.burst) && void 0 !== i ? i : 0, f = null !== (r = null == E ? void 0 : E.vote) && void 0 !== r ? r : 0; return -1 !== u && _ <= 0 && c <= 0 && I <= 0 && T <= 0 && f <= 0 && d.splice(u, 1), this.set("reactions", d) } removeReactionsForEmoji(e) { return this.set("reactions", this.reactions.filter(t => !(0, o.emojiEquals)(t.emoji, e))) } isSystemDM() { return this.author.isSystemUser() } hasFlag(e) { return (0, l.hasFlag)(this.flags, e) } isCommandType() { return this.type === d.MessageTypes.CHAT_INPUT_COMMAND || this.type === d.MessageTypes.CONTEXT_MENU_COMMAND } isPoll() { return null != this.poll } isUIKitComponents() { return (0, l.hasFlag)(this.flags, d.MessageFlags.IS_UIKIT_COMPONENTS) } isInteractionPlaceholder() { return null != this.interaction && this.author.isNonUserBot() } canDeleteOwnMessage(e) { var t, n, r; if (this.author.id === e) return !0; let s = null !== (r = null === (t = this.interactionMetadata) || void 0 === t ? void 0 : t.authorizing_integration_owners) && void 0 !== r ? r : {}; return (null === (n = this.interactionMetadata) || void 0 === n ? void 0 : n.user.id) === e && 1 === Object.keys(s).length && i.ApplicationIntegrationType.USER_INSTALL in s } toJS() { return { ...this, webkhook_id: this.webhookId, edited_timestamp: this.editedTimestamp, mention_everyone: this.mentionEveryone } } isFirstMessageInForumPost(e) { return this.id === this.channel_id && e.isForumPost() } constructor(e) { var t, n, i, r; super(e), _(this, "id", void 0), _(this, "author", void 0), _(this, "bot", void 0), _(this, "customRenderedContent", void 0), _(this, "pinned", void 0), _(this, "mentions", void 0), _(this, "mentionRoles", void 0), _(this, "mentionChannels", void 0), _(this, "mentionEveryone", void 0), _(this, "mentioned", void 0), _(this, "tts", void 0), _(this, "codedLinks", void 0), _(this, "giftCodes", void 0), _(this, "state", void 0), _(this, "nonce", void 0), _(this, "blocked", void 0), _(this, "call", void 0), _(this, "webhookId", void 0), _(this, "reactions", void 0), _(this, "applicationId", void 0), _(this, "application", void 0), _(this, "activity", void 0), _(this, "activityInstance", void 0), _(this, "interaction", void 0), _(this, "interactionData", void 0), _(this, "interactionMetadata", void 0), _(this, "interactionError", void 0), _(this, "messageReference", void 0), _(this, "isSearchHit", void 0), _(this, "stickers", void 0), _(this, "stickerItems", void 0), _(this, "roleSubscriptionData", void 0), _(this, "purchaseNotification", void 0), _(this, "poll", void 0), _(this, "loggingName", void 0), _(this, "referralTrialOfferId", void 0), _(this, "giftInfo", void 0), _(this, "messageSnapshots", void 0), _(this, "isUnsupported", void 0), _(this, "changelogId", void 0), _(this, "colorString", void 0), _(this, "nick", void 0), this.id = e.id, this.author = e.author, this.customRenderedContent = e.customRenderedContent, this.mentions = e.mentions || [], this.mentionRoles = e.mentionRoles || [], this.mentionChannels = e.mentionChannels || [], this.mentioned = e.mentioned || !1, this.pinned = e.pinned || !1, this.mentionEveryone = e.mentionEveryone || !1, this.tts = e.tts || !1, this.codedLinks = e.codedLinks || [], this.giftCodes = e.giftCodes || [], this.state = e.state || d.MessageStates.SENT, this.nonce = e.nonce || null, this.blocked = e.blocked || !1, this.call = e.call || null, this.bot = e.bot || !1, this.webhookId = e.webhookId || null, this.reactions = e.reactions || [], this.applicationId = e.application_id || e.applicationId || null, this.application = e.application || null, this.activity = e.activity || null, this.activityInstance = e.activity_instance || e.activityInstance || null, this.messageReference = e.messageReference || null, this.isSearchHit = e.hit || e.isSearchHit || !1, this.stickers = e.stickers || [], this.stickerItems = null !== (n = null !== (t = e.sticker_items) && void 0 !== t ? t : e.stickerItems) && void 0 !== n ? n : [], this.loggingName = e.loggingName || null, this.colorString = e.colorString, this.nick = e.nick, this.interaction = e.interaction || null, this.interactionData = e.interactionData || null, this.interactionMetadata = e.interactionMetadata || null, this.interactionError = e.interactionError || null, this.roleSubscriptionData = e.roleSubscriptionData, this.purchaseNotification = e.purchaseNotification, this.poll = e.poll, this.referralTrialOfferId = e.referralTrialOfferId || null, this.giftInfo = null !== (i = e.gift_info) && void 0 !== i ? i : e.giftInfo, this.messageSnapshots = e.messageSnapshots || [], this.isUnsupported = e.isUnsupported || !1, this.changelogId = null !== (r = e.changelog_id) && void 0 !== r ? r : e.changelogId || null } } }, 46141: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AppleSourceRecord: function() { return g }, BancontactSourceRecord: function() { return C }, CashAppSourceRecord: function() { return R }, CreditCardSourceRecord: function() { return d }, EPSSourceRecord: function() { return T }, GcashSourceRecord: function() { return h }, GiropaySourceRecord: function() { return E }, GoPayWalletSourceRecord: function() { return O }, GrabPayMySourceRecord: function() { return A }, IdealSourceRecord: function() { return f }, KaKaoPaySourceRecord: function() { return p }, MomoWalletSourceRecord: function() { return m }, PaypalSourceRecord: function() { return _ }, PaysafeSourceRecord: function() { return S }, Przelewy24SourceRecord: function() { return I }, SofortSourceRecord: function() { return c }, VenmoSourceRecord: function() { return N }, default: function() { return u } }), n("789020"), n("411104"); var i = n("81825"), r = n("770555"), s = n("630388"), a = n("823379"), o = n("981631"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class u extends i.default { static createFromServer(e) { var t; let n = null !== (t = e.billing_address) && void 0 !== t ? t : {}, i = { id: e.id, type: e.type, paymentGateway: e.payment_gateway, invalid: e.invalid, isDefault: e.default, billingAddress: { name: n.name, line1: n.line_1, line2: n.line_2, city: n.city, postalCode: n.postal_code, state: n.state, country: n.country }, country: e.country, flags: e.flags }; switch (e.type) { case o.PaymentSourceTypes.CARD: return new d({ ...i, brand: e.brand, last4: e.last_4, expiresMonth: e.expires_month, expiresYear: e.expires_year }); case o.PaymentSourceTypes.PAYPAL: return new _({ ...i, email: e.email }); case o.PaymentSourceTypes.VENMO: return new N({ ...i, username: e.username }); case o.PaymentSourceTypes.SEPA_DEBIT: case o.PaymentSourceTypes.SOFORT: return new c({ ...i, email: e.email }); case o.PaymentSourceTypes.GIROPAY: return new E({ ...i }); case o.PaymentSourceTypes.PRZELEWY24: return new I({ ...i, email: e.email, bank: e.bank }); case o.PaymentSourceTypes.EPS: return new T({ ...i, bank: e.bank }); case o.PaymentSourceTypes.PAYSAFE_CARD: return new S({ ...i }); case o.PaymentSourceTypes.GCASH: return new h({ ...i }); case o.PaymentSourceTypes.GRABPAY_MY: return new A({ ...i }); case o.PaymentSourceTypes.MOMO_WALLET: return new m({ ...i }); case o.PaymentSourceTypes.KAKAOPAY: return new p({ ...i }); case o.PaymentSourceTypes.GOPAY_WALLET: return new O({ ...i }); case o.PaymentSourceTypes.BANCONTACT: return new C({ ...i }); case o.PaymentSourceTypes.IDEAL: return new f({ ...i, bank: e.bank }); case o.PaymentSourceTypes.CASH_APP: return new R({ ...i, username: e.username }); default: (0, a.assertNever)(e) } } static createFromSerialized(e) { let t = e.type; switch (t) { case o.PaymentSourceTypes.CARD: return new d(e); case o.PaymentSourceTypes.PAYPAL: return new _(e); case o.PaymentSourceTypes.SOFORT: case o.PaymentSourceTypes.SEPA_DEBIT: return new c(e); case o.PaymentSourceTypes.GIROPAY: return new E(e); case o.PaymentSourceTypes.PRZELEWY24: return new I(e); case o.PaymentSourceTypes.PAYSAFE_CARD: return new S(e); case o.PaymentSourceTypes.GCASH: return new h(e); case o.PaymentSourceTypes.GRABPAY_MY: return new A(e); case o.PaymentSourceTypes.MOMO_WALLET: return new m(e); case o.PaymentSourceTypes.VENMO: return new N(e); case o.PaymentSourceTypes.KAKAOPAY: return new p(e); case o.PaymentSourceTypes.GOPAY_WALLET: return new O(e); case o.PaymentSourceTypes.BANCONTACT: return new C(e); case o.PaymentSourceTypes.EPS: return new T(e); case o.PaymentSourceTypes.IDEAL: return new f(e); case o.PaymentSourceTypes.CASH_APP: return new R(e); default: (0, a.assertNever)(t) } } hasFlag(e) { return (0, s.hasFlag)(this.flags, e) } get paymentMethodCountry() { return null != this.country && "" !== this.country ? this.country : this.billingAddress.country } canRedeemTrial() { let { enabled: e } = r.default.getCurrentConfig({ location: "3a6d55_1" }); return this.paymentGateway === o.PaymentGateways.ADYEN && this.type === o.PaymentSourceTypes.CASH_APP ? e : !o.IRREDEEMABLE_PAYMENT_SOURCES.has(this.type) } constructor(e) { var t, n, i, r; if (super(), l(this, "id", void 0), l(this, "type", void 0), l(this, "paymentGateway", void 0), l(this, "billingAddress", void 0), l(this, "country", void 0), l(this, "invalid", void 0), l(this, "isDefault", void 0), l(this, "flags", void 0), l(this, "email", void 0), l(this, "brand", void 0), l(this, "bank", void 0), l(this, "username", void 0), !Object.values(o.PaymentSourceTypes).includes(e.type)) throw Error("Unrecognized payment source type ".concat(e.type)); this.id = e.id, this.type = e.type, this.paymentGateway = e.paymentGateway, this.invalid = null !== (t = e.invalid) && void 0 !== t && t, this.billingAddress = null !== (n = e.billingAddress) && void 0 !== n ? n : {}, this.isDefault = e.isDefault, this.flags = null !== (i = e.flags) && void 0 !== i ? i : 0, this.country = null !== (r = e.country) && void 0 !== r ? r : "" } } class d extends u { constructor(e) { var t, n, i, r; if (super(e), l(this, "brand", void 0), l(this, "last4", void 0), l(this, "expiresMonth", void 0), l(this, "expiresYear", void 0), e.type !== o.PaymentSourceTypes.CARD) throw Error("Cannot instantiate CreditCardSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.CARD)); this.brand = null !== (t = e.brand) && void 0 !== t ? t : "", this.last4 = null !== (n = e.last4) && void 0 !== n ? n : "", this.expiresMonth = null !== (i = e.expiresMonth) && void 0 !== i ? i : 0, this.expiresYear = null !== (r = e.expiresYear) && void 0 !== r ? r : 0 } } class _ extends u { constructor(e) { if (super(e), l(this, "email", void 0), e.type !== o.PaymentSourceTypes.PAYPAL) throw Error("Cannot instantiate PaypalSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.PAYPAL)); this.email = e.email || "" } } class c extends u { constructor(e) { if (super(e), l(this, "email", void 0), e.type !== o.PaymentSourceTypes.SOFORT && e.type !== o.PaymentSourceTypes.SEPA_DEBIT) throw Error("Cannot instantiate SofortSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.SOFORT, " or ") + o.PaymentSourceTypes.SEPA_DEBIT); this.email = e.email || "" } } class E extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.GIROPAY) throw Error("Cannot instantiate GiropaySourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.GIROPAY)) } } class I extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.PRZELEWY24) throw Error("Cannot instantiate Przelewy24SourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.PRZELEWY24)); this.email = e.email || "", this.bank = e.bank } } class T extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.EPS) throw Error("Cannot instantiate EPSSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.EPS)); this.bank = e.bank } } class f extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.IDEAL) throw Error("Cannot instantiate IdealSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.IDEAL)); this.bank = e.bank } } class S extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.PAYSAFE_CARD) throw Error("Cannot instantiate PaysafeSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.PAYSAFE_CARD)) } } class h extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.GCASH) throw Error("Cannot instantiate GcashSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.GCASH)) } } class A extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.GRABPAY_MY) throw Error("Cannot instantiate GrabPayMySourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.GRABPAY_MY)) } } class m extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.MOMO_WALLET) throw Error("Cannot instantiate MomoWalletSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.MOMO_WALLET)) } } class N extends u { constructor(e) { if (super(e), l(this, "username", void 0), e.type !== o.PaymentSourceTypes.VENMO) throw Error("Cannot instantiate VenmoSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.VENMO)); this.username = e.username || "" } } class p extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.KAKAOPAY) throw Error("Cannot instantiate KaKaoPaySourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.KAKAOPAY)) } } class O extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.GOPAY_WALLET) throw Error("Cannot instantiate GoPayWalletSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.GOPAY_WALLET)) } } class C extends u { constructor(e) { if (super(e), e.type !== o.PaymentSourceTypes.BANCONTACT) throw Error("Cannot instantiate BancontactSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.BANCONTACT)) } } class R extends u { constructor(e) { if (super(e), l(this, "username", void 0), e.type !== o.PaymentSourceTypes.CASH_APP) throw Error("Cannot instantiate Cashapp with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.CASH_APP)); this.username = e.username || "" } } class g extends u { constructor(e) { if (e.id = "", e.paymentGateway = o.PaymentGateways.APPLE_PARTNER, e.type = o.PaymentSourceTypes.APPLE, e.billingAddress = {}, e.country = "", e.invalid = !1, e.isDefault = !1, e.flags = 0, super(e), e.type !== o.PaymentSourceTypes.APPLE) throw Error("Cannot instantiate AppleSourceRecord with type: ".concat(e.type, ", must be ").concat(o.PaymentSourceTypes.APPLE)) } } }, 659181: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"), n("789020"); var i = n("913527"), r = n.n(i), s = n("81825"), a = n("630388"), o = n("973616"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = ["500428425362931713", "451550535720501248", "471376328319303681", "466696214818193408"]; class _ extends s.default { static createFromServer(e) { var t, n, i, s, a; let { price: l } = e; return new _({ id: e.id, type: e.type, applicationId: e.application_id, application: null != e.application ? o.default.createFromServer(e.application) : null, productLine: e.product_line, name: null !== (t = e.name) && void 0 !== t ? t : "", releaseDate: null != e.release_date ? r()(e.release_date) : null, preorderReleaseAt: null != e.preorder_release_at ? r()(e.preorder_release_at) : null, preorderApproximateReleaseDate: e.preorder_approximate_release_date, summary: e.summary, features: new Set(e.features), genres: new Set(e.genres), dependentSkuId: e.dependent_sku_id, manifests: e.manifests, availableRegions: e.available_regions, accessType: e.access_type, systemRequirements: e.system_requirements, contentRating: e.content_rating, contentRatingAgency: e.content_rating_agency, legalNotice: e.legal_notice, price: null != l ? { amount: l.amount, currency: l.currency, saleAmount: l.sale_amount, salePercentage: l.sale_percentage, premium: l.premium } : null, premium: null !== (n = e.premium) && void 0 !== n && n, showAgeGate: e.show_age_gate || !1, restricted: e.restricted || !1, slug: null !== (i = e.slug) && void 0 !== i ? i : "", exclusive: e.exclusive || !1, locales: null !== (s = e.locales) && void 0 !== s ? s : ["en-US"], flags: e.flags, externalPurchaseUrl: e.external_purchase_url, deleted: null !== (a = e.deleted) && void 0 !== a && a }) } get supportedOperatingSystems() { let e = null != this.systemRequirements ? Object.keys(this.systemRequirements) : []; return e.length > 0 ? e : [l.OperatingSystems.WINDOWS] } get isOnSale() { return null != this.price && null != this.price.saleAmount } isGiftable() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.price; return this.type === l.SKUTypes.DURABLE_PRIMARY && this.available && this.requiresPayment && null != e && l.GIFTABLE_CURRENCIES.has(e.currency) && null == this.externalPurchaseUrl } getPrice() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { price: n } = this; if (null == n) return null; if (null != e) { var i; let t = null === (i = n.premium) || void 0 === i ? void 0 : i[e]; if (null != t) return { amount: t.amount, currency: n.currency } } return t && null != n.saleAmount ? { amount: n.saleAmount, currency: n.currency } : { amount: n.amount, currency: n.currency } } getDisplaySalePercentage() { return null == this.price || null == this.price.salePercentage ? null : "-".concat(this.price.salePercentage, "%") } get requiresPayment() { let e = this.getPrice(); return !this.premium && null != e && e.amount > 0 } get isTheGameAwardsWinner() { return d.includes(this.id) } get available() { return (0, a.hasFlag)(this.flags, l.SKUFlags.AVAILABLE) || null != this.externalPurchaseUrl } isAvailableForDistribution() { return this.available && null != this.getPrice() && null == this.externalPurchaseUrl && (!this.premium || (0, a.hasFlag)(this.flags, l.SKUFlags.PREMIUM_AND_DISTRIBUTION)) } isAvailable() { return (0, a.hasFlag)(this.flags, l.SKUFlags.AVAILABLE) } isPremiumPerk() { return this.premium && ((0, a.hasFlag)(this.flags, l.SKUFlags.PREMIUM_PURCHASE) || (0, a.hasFlag)(this.flags, l.SKUFlags.PREMIUM_AND_DISTRIBUTION)) } hasFeature(e) { return this.features.has(e) } isPreorder() { return null != this.preorderReleaseAt || null != this.preorderApproximateReleaseDate } constructor(e) { super(), u(this, "id", void 0), u(this, "type", void 0), u(this, "applicationId", void 0), u(this, "application", void 0), u(this, "productLine", void 0), u(this, "name", void 0), u(this, "releaseDate", void 0), u(this, "preorderReleaseAt", void 0), u(this, "preorderApproximateReleaseDate", void 0), u(this, "summary", void 0), u(this, "features", void 0), u(this, "genres", void 0), u(this, "dependentSkuId", void 0), u(this, "manifests", void 0), u(this, "availableRegions", void 0), u(this, "accessType", void 0), u(this, "systemRequirements", void 0), u(this, "contentRating", void 0), u(this, "contentRatingAgency", void 0), u(this, "legalNotice", void 0), u(this, "price", void 0), u(this, "premium", void 0), u(this, "showAgeGate", void 0), u(this, "restricted", void 0), u(this, "slug", void 0), u(this, "exclusive", void 0), u(this, "locales", void 0), u(this, "flags", void 0), u(this, "externalPurchaseUrl", void 0), u(this, "deleted", void 0), this.id = e.id, this.type = e.type, this.applicationId = e.applicationId, this.application = e.application, this.productLine = e.productLine, this.name = e.name, this.preorderReleaseAt = e.preorderReleaseAt, this.preorderApproximateReleaseDate = e.preorderApproximateReleaseDate, this.releaseDate = e.releaseDate, this.summary = e.summary, this.features = e.features, this.genres = e.genres, this.dependentSkuId = e.dependentSkuId, this.manifests = e.manifests, this.availableRegions = e.availableRegions, this.accessType = e.accessType, this.systemRequirements = e.systemRequirements, this.contentRating = e.contentRating, this.contentRatingAgency = e.contentRatingAgency, this.legalNotice = e.legalNotice, this.price = e.price, this.premium = e.premium, this.showAgeGate = e.showAgeGate, this.restricted = e.restricted, this.slug = e.slug, this.exclusive = e.exclusive, this.locales = e.locales, this.flags = e.flags, this.externalPurchaseUrl = e.externalPurchaseUrl || null, this.deleted = e.deleted } } }, 146528: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("81825"), r = n("591548"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a extends i.default { static createInvoiceFromServer(e) { var t; return new a({ id: e.id, invoiceItems: null === (t = e.invoice_items) || void 0 === t ? void 0 : t.map(r.createInvoiceItemFromServer), total: e.total, subtotal: e.subtotal, currency: e.currency, tax: e.tax, taxInclusive: e.tax_inclusive, subscriptionPeriodStart: new Date(e.subscription_period_start), subscriptionPeriodEnd: new Date(e.subscription_period_end), status: e.status }) } constructor(e) { super(), s(this, "id", void 0), s(this, "invoiceItems", void 0), s(this, "total", void 0), s(this, "subtotal", void 0), s(this, "currency", void 0), s(this, "tax", void 0), s(this, "taxInclusive", void 0), s(this, "subscriptionPeriodStart", void 0), s(this, "subscriptionPeriodEnd", void 0), s(this, "status", void 0), this.id = e.id, this.invoiceItems = e.invoiceItems, this.total = e.total, this.subtotal = e.subtotal, this.currency = e.currency, this.tax = e.tax, this.taxInclusive = e.taxInclusive, this.subscriptionPeriodStart = e.subscriptionPeriodStart, this.subscriptionPeriodEnd = e.subscriptionPeriodEnd, this.status = e.status } } }, 301766: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPriceFromServer: function() { return l }, isNoneSubscription: function() { return u } }), n("724458"), n("47120"), n("411104"); var i = n("81825"), r = n("981631"), s = n("474936"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o extends i.default { static createFromServer(e) { let t = {}; null != e.prices && (t = Object.keys(e.prices).reduce((t, n) => { if (null == e.prices) return t; let i = e.prices[n]; return t[n] = { countryPrices: { countryCode: i.country_prices.country_code, prices: i.country_prices.prices.map(t => l(t, e.tax_inclusive)) }, paymentSourcePrices: Object.entries(i.payment_source_prices).reduce((t, n) => { let [i, r] = n; return t[i] = r.map(t => l(t, e.tax_inclusive)), t }, {}) }, t }, {})); let n = { id: e.id, name: e.name, interval: e.interval, intervalCount: e.interval_count, taxInclusive: e.tax_inclusive, skuId: e.sku_id, currency: e.currency, price: e.price, prices: t, premiumUserPrice: e.discount_price }; return null != e.fallback_price && 0 !== e.fallback_price && Object.assign(n, { fallbackPrice: e.fallback_price, fallbackCurrency: e.fallback_currency, fallbackPremiumUserPrice: e.fallback_discount_price }), new o(n) } get premiumSubscriptionType() { switch (this.skuId) { case s.PremiumSubscriptionSKUs.LEGACY: case s.PremiumSubscriptionSKUs.TIER_2: return s.PremiumTypes.TIER_2; case s.PremiumSubscriptionSKUs.TIER_1: return s.PremiumTypes.TIER_1; case s.PremiumSubscriptionSKUs.TIER_0: return s.PremiumTypes.TIER_0; default: return null } } get isGiftableCurrency() { return r.GIFTABLE_CURRENCIES.has(this.currency) } get giftPrice() { if (this.isGiftableCurrency) return this.price; if ("number" == typeof this.fallbackPrice) return this.fallbackPrice; throw Error("Missing fallback price for non-giftable currency") } get giftCurrency() { if (this.isGiftableCurrency) return this.currency; if ("string" == typeof this.fallbackCurrency) return this.fallbackCurrency; throw Error("Missing fallback currency for non-giftable currency") } get giftPremiumUserPrice() { return this.isGiftableCurrency ? this.premiumUserPrice : this.fallbackPremiumUserPrice } getPrice() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; return e ? this.giftPrice : this.price } getCurrency() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; return e ? this.giftCurrency : this.currency } getPremiumUserPrice() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; return e ? this.giftPremiumUserPrice : this.premiumUserPrice } toServerData() { let e = {}; return Object.keys(this.prices).forEach(t => { let n = this.prices[t]; e[t] = { country_prices: { country_code: n.countryPrices.countryCode, prices: n.countryPrices.prices }, payment_source_prices: n.paymentSourcePrices } }), { id: this.id, name: this.name, sku_id: this.skuId, interval: this.interval, interval_count: this.intervalCount, tax_inclusive: this.taxInclusive, currency: this.currency, price: this.price, prices: e, price_tier: this.price, discount_price: this.premiumUserPrice, fallback_price: this.fallbackPrice, fallback_currency: this.fallbackCurrency, fallback_discount_price: this.fallbackPremiumUserPrice } } constructor(e) { super(), a(this, "id", void 0), a(this, "name", void 0), a(this, "interval", void 0), a(this, "intervalCount", void 0), a(this, "taxInclusive", void 0), a(this, "skuId", void 0), a(this, "currency", void 0), a(this, "price", void 0), a(this, "prices", void 0), a(this, "premiumUserPrice", void 0), a(this, "fallbackPrice", void 0), a(this, "fallbackCurrency", void 0), a(this, "fallbackPremiumUserPrice", void 0), this.id = e.id, this.name = e.name, this.interval = e.interval, this.intervalCount = e.intervalCount, this.taxInclusive = e.taxInclusive, this.skuId = e.skuId, this.currency = e.currency, this.price = e.price, this.premiumUserPrice = e.premiumUserPrice, this.prices = e.prices, e.fallbackPrice && (this.fallbackPrice = e.fallbackPrice, this.fallbackCurrency = e.fallbackCurrency, this.fallbackPremiumUserPrice = e.fallbackPremiumUserPrice) } } function l(e, t) { return { amount: e.amount, currency: e.currency, tax: 0, taxInclusive: t } } function u(e) { return [s.SubscriptionPlans.NONE_MONTH, s.SubscriptionPlans.NONE_3_MONTH, s.SubscriptionPlans.NONE_6_MONTH, s.SubscriptionPlans.NONE_YEAR].includes(e) } t.default = o }, 255078: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SubscriptionRecord: function() { return E } }); var i = n("512722"), r = n.n(i), s = n("81825"), a = n("491819"), o = n("358085"), l = n("146528"), u = n("981631"), d = n("474936"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function c(e) { return { id: e.id, planId: e.plan_id, quantity: e.quantity } } class E extends s.default { static createFromServer(e) { return new E({ id: e.id, type: e.type, createdAt: new Date(e.created_at), canceledAt: null != e.canceled_at ? new Date(e.canceled_at) : null, currentPeriodStart: new Date(e.current_period_start), currentPeriodEnd: new Date(e.current_period_end), status: e.status, paymentSourceId: e.payment_source_id, paymentGateway: e.payment_gateway, paymentGatewayPlanId: e.payment_gateway_plan_id, paymentGatewaySubscriptionId: e.payment_gateway_subscription_id, trialId: e.trial_id, trialEndsAt: e.trial_ends_at, items: e.items.map(c), renewalMutations: null != e.renewal_mutations ? { items: e.renewal_mutations.items.map(c), paymentGatewayPlanId: e.renewal_mutations.payment_gateway_plan_id } : null, streakStartedAt: null != e.streak_started_at ? new Date(e.streak_started_at) : null, currency: e.currency, pauseEndsAt: null != e.pause_ends_at ? new Date(e.pause_ends_at) : null, metadata: e.metadata, useStorekitResubscribe: e.use_storekit_resubscribe, price: e.price, userId: e.user_id, ...null != e.latest_invoice ? { latestInvoice: l.default.createInvoiceFromServer(e.latest_invoice) } : {} }) } getCurrentSubscriptionPlanIdForGroup(e) { var t; return null === (t = this.items.find(t => e.includes(t.planId))) || void 0 === t ? void 0 : t.planId } get isPremium() { return this.type === u.SubscriptionTypes.PREMIUM } get planIdForCurrencies() { let e; return this.isPremium ? (r()(this.planIdFromItems, "Premium subscription has no planId for currencies"), e = this.planIdFromItems) : e = this.planId, e } get planIdFromItems() { return this.getCurrentSubscriptionPlanIdForGroup(Object.values(d.SubscriptionPlans)) } get isPurchasedViaApple() { return this.paymentGateway === u.PaymentGateways.APPLE } get isPurchasedViaGoogle() { return this.paymentGateway === u.PaymentGateways.GOOGLE } get isPurchasedExternally() { return this.isPurchasedViaApple || this.isPurchasedViaGoogle } get isOnPlatformMatchingExternalPaymentGateway() { return this.isPurchasedViaApple && (0, o.isIOS)() || this.isPurchasedViaGoogle && (0, o.isAndroid)() } get hasExternalPlanChange() { return this.isPurchasedExternally && null != this.renewalMutations && this.paymentGatewayPlanId !== this.renewalMutations.paymentGatewayPlanId } get hasPremiumNitroMonthly() { return null != this.items.find(e => e.planId === d.SubscriptionPlans.PREMIUM_MONTH_TIER_2) } get isPausedOrPausePending() { return u.SubscriptionStatusTypesSets.ALL_PAUSE.has(this.status) } get isPaused() { return this.status === u.SubscriptionStatusTypes.PAUSED } constructor(e) { super(), _(this, "id", void 0), _(this, "type", void 0), _(this, "items", void 0), _(this, "createdAt", void 0), _(this, "canceledAt", void 0), _(this, "currentPeriodStart", void 0), _(this, "currentPeriodEnd", void 0), _(this, "status", void 0), _(this, "paymentSourceId", void 0), _(this, "paymentGateway", void 0), _(this, "paymentGatewayPlanId", void 0), _(this, "paymentGatewaySubscriptionId", void 0), _(this, "trialId", void 0), _(this, "trialEndsAt", void 0), _(this, "renewalMutations", void 0), _(this, "streakStartedAt", void 0), _(this, "currency", void 0), _(this, "pauseEndsAt", void 0), _(this, "planId", void 0), _(this, "additionalPlans", void 0), _(this, "metadata", void 0), _(this, "latestInvoice", void 0), _(this, "useStorekitResubscribe", void 0), _(this, "price", void 0), _(this, "userId", void 0), this.id = e.id, this.type = e.type, this.items = e.items, this.createdAt = e.createdAt, this.canceledAt = e.canceledAt, this.currentPeriodStart = e.currentPeriodStart, this.currentPeriodEnd = e.currentPeriodEnd, this.status = e.status, this.paymentSourceId = e.paymentSourceId, this.paymentGateway = e.paymentGateway, this.paymentGatewayPlanId = e.paymentGatewayPlanId, this.paymentGatewaySubscriptionId = e.paymentGatewaySubscriptionId, this.trialId = e.trialId, this.trialEndsAt = e.trialEndsAt, this.renewalMutations = e.renewalMutations, this.currency = e.currency, this.pauseEndsAt = e.pauseEndsAt, this.metadata = e.metadata, this.latestInvoice = e.latestInvoice, this.useStorekitResubscribe = e.useStorekitResubscribe, this.price = e.price, this.userId = e.userId; let t = this.renewalMutations, n = e.items[0].planId, i = null; if (e.type === u.SubscriptionTypes.PREMIUM) { let r = d.SubscriptionPlanInfo[e.items[0].planId], s = r.interval, o = r.intervalCount; n = (0, a.getBasePlanIdForSubscriptionItems)(e.items, s, o), null != t && (i = (0, a.getBasePlanIdForSubscriptionItems)(t.items, s, o)) } else null != t && t.items.length > 0 && (i = t.items[0].planId); this.planId = n, this.additionalPlans = e.items.filter(e => e.planId !== n), null != t && null != i && (t.planId = i, t.additionalPlans = t.items.filter(e => e.planId !== i)) } } t.default = E }, 598077: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }), n("411104"), n("789020"); var i = n("149765"), r = n("81825"), s = n("864106"), a = n("768581"), o = n("709054"), l = n("981631"), u = n("308083"), d = n("377668"), _ = n("474936"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class E extends r.default { get createdAt() { return new Date(o.default.extractTimestamp(this.id)) } hasVerifiedEmailOrPhone() { return !0 === this.verified || null != this.phone } getAvatarURL(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = null != e ? this.guildMemberAvatars[e] : void 0; return null != i && null != e ? a.default.getGuildMemberAvatarURLSimple({ guildId: e, avatar: i, userId: this.id, canAnimate: n }) : a.default.getUserAvatarURL(this, n, t) } addGuildAvatarHash(e, t) { if (this.guildMemberAvatars[e] === t) return this; let n = { ...this.guildMemberAvatars, [e]: t }; return this.merge({ guildMemberAvatars: n }) } removeGuildAvatarHash(e) { if (void 0 === this.guildMemberAvatars[e]) return this; let t = { ...this.guildMemberAvatars, [e]: void 0 }; return this.merge({ guildMemberAvatars: t }) } getAvatarSource(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 ? arguments[2] : void 0; if (null != e) { let i = this.guildMemberAvatars[e]; if (null != i) return a.default.getAnimatableSourceWithFallback(t, t => a.default.makeSource(a.default.getGuildMemberAvatarURLSimple({ guildId: e, avatar: i, userId: this.id, canAnimate: t, size: n }))) } return a.default.getAnimatableSourceWithFallback(t, e => a.default.getUserAvatarSource({ id: this.id, avatar: this.avatar, discriminator: this.discriminator, bot: this.bot }, e, n)) } isClaimed() { return null != this.email || null != this.phone } isPhoneVerified() { return null != this.phone } toString() { return "" !== this.username ? this.username : "???" } get tag() { return "".concat(this.username, "#").concat("".concat(this.discriminator).padStart(4, "0")) } hasPurchasedFlag(e) { return (this.purchasedFlags & e) === e } hasPremiumUsageFlag(e) { return (this.premiumUsageFlags & e) === e } hasHadSKU(e) { let t = _.SKU_ID_PURCHASED_FLAGS[e]; return null != t && this.hasPurchasedFlag(t) } hasHadPremium() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null, t = this.hasHadSKU(_.PremiumSubscriptionSKUs.TIER_0), n = this.hasHadSKU(_.PremiumSubscriptionSKUs.TIER_1), i = this.hasHadSKU(_.PremiumSubscriptionSKUs.TIER_2); if (e === _.PremiumTypes.TIER_1) return n; if (e === _.PremiumTypes.TIER_2) return i; if (e === _.PremiumTypes.TIER_0) return t; else return t || n || i } hasFreePremium() { return this.isStaff() || this.hasFlag(l.UserFlags.PARTNER) || this.isStaffPersonal() } hasUrgentMessages() { return this.hasFlag(l.UserFlags.HAS_UNREAD_URGENT_MESSAGES) } isNonUserBot() { return this.isSystemUser() || this.bot && this.discriminator === l.NON_USER_BOT_DISCRIMINATOR } isLocalBot() { return this.bot && this.id === l.LOCAL_BOT_ID } isVerifiedBot() { return this.isSystemUser() || this.isLocalBot() || this.hasFlag(l.UserFlags.VERIFIED_BOT) } isSystemUser() { return !0 === this.system } isClyde() { return this.id === d.CLYDE_AI_USER_ID } hasAvatarForGuild(e) { return null != e && null != this.guildMemberAvatars[e] } isPomelo() { return "0" === this.discriminator } get avatarDecoration() { return this.avatarDecorationData } set avatarDecoration(e) { this.avatarDecorationData = (0, s.parseAvatarDecorationData)(e) } constructor(e) { var t, n, r, s, a, o, d, _, E, I, T, f, S, h, A, m, N, p, O, C, R, g, L, v, D, M, y, P, U, b; super(), c(this, "id", void 0), c(this, "username", void 0), c(this, "discriminator", void 0), c(this, "avatar", void 0), c(this, "avatarDecorationData", void 0), c(this, "banner", void 0), c(this, "email", void 0), c(this, "verified", void 0), c(this, "bot", void 0), c(this, "system", void 0), c(this, "mfaEnabled", void 0), c(this, "mobile", void 0), c(this, "desktop", void 0), c(this, "premiumType", void 0), c(this, "flags", void 0), c(this, "publicFlags", void 0), c(this, "purchasedFlags", void 0), c(this, "premiumUsageFlags", void 0), c(this, "phone", void 0), c(this, "nsfwAllowed", void 0), c(this, "guildMemberAvatars", void 0), c(this, "hasBouncedEmail", void 0), c(this, "personalConnectionId", void 0), c(this, "globalName", void 0), c(this, "clan", void 0), c(this, "hasFlag", e => !1), c(this, "isStaff", () => !1), c(this, "isStaffPersonal", () => !1), c(this, "hasAnyStaffLevel", () => !1); let G = null !== (n = e.premium_type) && void 0 !== n ? n : e.premiumType; this.id = e.id, this.username = null !== (r = e.username) && void 0 !== r ? r : "", this.discriminator = null !== (s = e.discriminator) && void 0 !== s ? s : l.NON_USER_BOT_DISCRIMINATOR, this.avatar = null !== (a = e.avatar) && void 0 !== a ? a : null, this.avatarDecoration = null !== (o = e.avatar_decoration_data) && void 0 !== o ? o : e.avatarDecorationData, this.email = null !== (d = e.email) && void 0 !== d ? d : null, this.verified = null !== (_ = e.verified) && void 0 !== _ && _, this.bot = null !== (E = e.bot) && void 0 !== E && E, this.system = null !== (I = e.system) && void 0 !== I && I, this.mfaEnabled = null !== (f = null !== (T = e.mfa_enabled) && void 0 !== T ? T : e.mfaEnabled) && void 0 !== f && f, this.mobile = null !== (S = e.mobile) && void 0 !== S && S, this.desktop = null !== (h = e.desktop) && void 0 !== h && h, this.premiumType = G === l.PREMIUM_TYPE_NONE ? null : G, this.flags = null !== (A = e.flags) && void 0 !== A ? A : 0, this.publicFlags = null !== (N = null !== (m = e.public_flags) && void 0 !== m ? m : e.publicFlags) && void 0 !== N ? N : 0, this.purchasedFlags = null !== (O = null !== (p = e.purchased_flags) && void 0 !== p ? p : e.purchasedFlags) && void 0 !== O ? O : 0, this.premiumUsageFlags = null !== (R = null !== (C = e.premium_usage_flags) && void 0 !== C ? C : e.premiumUsageFlags) && void 0 !== R ? R : 0, this.phone = null !== (g = e.phone) && void 0 !== g ? g : null, this.nsfwAllowed = null !== (L = e.nsfw_allowed) && void 0 !== L ? L : e.nsfwAllowed, this.guildMemberAvatars = null !== (v = e.guildMemberAvatars) && void 0 !== v ? v : {}, this.hasBouncedEmail = null !== (M = null !== (D = e.has_bounced_email) && void 0 !== D ? D : e.hasBouncedEmail) && void 0 !== M && M, this.personalConnectionId = null !== (P = null !== (y = e.personal_connection_id) && void 0 !== y ? y : e.personalConnectionId) && void 0 !== P ? P : null, this.globalName = null !== (U = e.global_name) && void 0 !== U ? U : e.globalName, this.banner = e.banner, this.clan = (0, u.ensureUserClanData)(null !== (b = e.clan) && void 0 !== b ? b : null), Object.defineProperties(this, { hasFlag: { writable: !1, configurable: !1, value: e => { if (e <= 1073741824) return ((this.flags | this.publicFlags) & e) === e; let t = i.deserialize(this.flags), n = i.deserialize(this.publicFlags), r = i.deserialize(e); return i.has(i.combine(t, n), r) } }, isStaff: { writable: !1, configurable: !1, value: () => this.hasFlag(l.UserFlags.STAFF) }, isStaffPersonal: { writable: !1, configurable: !1, value: () => !this.hasFlag(l.UserFlags.STAFF) && null != this.personalConnectionId }, hasAnyStaffLevel: { writable: !1, configurable: !1, value: () => this.hasFlag(l.UserFlags.STAFF) || this.hasFlag(l.UserFlags.COLLABORATOR) || this.hasFlag(l.UserFlags.RESTRICTED_COLLABORATOR) } }), (null === (t = this.globalName) || void 0 === t ? void 0 : t.length) === 0 && (this.globalName = null) } } new E({ id: "0" }) }, 189786: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { isVoiceMuted() { return this.selfMute || this.mute || this.suppress || null != this.requestToSpeakTimestamp } isVoiceDeafened() { return this.selfDeaf || this.deaf } constructor(e) { super(), r(this, "userId", void 0), r(this, "channelId", void 0), r(this, "sessionId", void 0), r(this, "mute", void 0), r(this, "deaf", void 0), r(this, "selfMute", void 0), r(this, "selfDeaf", void 0), r(this, "selfVideo", void 0), r(this, "selfStream", void 0), r(this, "suppress", void 0), r(this, "requestToSpeakTimestamp", void 0), this.userId = e.userId || "", this.channelId = e.channelId || null, this.sessionId = e.sessionId || null, this.mute = e.mute || !1, this.deaf = e.deaf || !1, this.selfMute = e.selfMute || !1, this.selfDeaf = e.selfDeaf || !1, this.selfVideo = e.selfVideo || !1, this.selfStream = e.selfStream || !1, this.suppress = e.suppress || !1, this.requestToSpeakTimestamp = e.requestToSpeakTimestamp } } }, 252982: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("81825"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s extends i.default { constructor(e) { super(), r(this, "id", void 0), r(this, "layoutId", void 0), r(this, "type", void 0), r(this, "anchor", void 0), r(this, "size", void 0), r(this, "pinned", void 0), r(this, "zIndex", void 0), r(this, "meta", void 0), this.id = e.id || "", this.layoutId = e.layoutId || "", this.type = e.type, this.anchor = { left: 0, top: 0, ...e.anchor }, this.size = { width: 0, height: 0, ...e.size }, this.pinned = !!e.pinned, this.zIndex = e.zIndex || 0, this.meta = { ...e.meta } } } }, 450795: function(e, t, n) { "use strict"; n.r(t); var i = n("990547"), r = n("570140"), s = n("844889"), a = n("314897"), o = n("981631"); (0, i.analyticsTrackingStoreMaker)({ dispatcher: r.default, actionHandler: { CONNECTION_OPEN: e => i.AnalyticsActionHandlers.handleConnectionOpen(e), OVERLAY_INITIALIZE: e => i.AnalyticsActionHandlers.handleConnectionOpen(e), CURRENT_USER_UPDATE: e => i.AnalyticsActionHandlers.handleConnectionOpen(e), CONNECTION_CLOSED: () => i.AnalyticsActionHandlers.handleConnectionClosed(), FINGERPRINT: () => i.AnalyticsActionHandlers.handleFingerprint(), TRACK: e => i.AnalyticsActionHandlers.handleTrack(e) }, TRACKING_URL: o.Endpoints.TRACK, waitFor: [a.default], getFingerprint: a.default.getFingerprint, getSessionId: () => (0, s.getSession)().then(e => ({ sessionId: null == e ? void 0 : e.uuid })) }) }, 543882: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("872810"), c = n("569545"), E = n("70722"); let I = {}, T = {}, f = new Set; function S() { I = {}, T = {} } class h extends(i = u.default.Store) { getPreviewURL(e, t, n) { let i = (0, c.encodeStreamKey)({ streamType: null != e ? E.StreamTypes.GUILD : E.StreamTypes.CALL, guildId: e, channelId: t, ownerId: n }), r = I[i]; return null == r || Date.now() > r.expires ? (!f.has(i) && (f.add(i), Promise.resolve().then(() => { (0, _.fetchStreamPreview)(e, t, n) })), null) : r.url } getPreviewURLForStreamKey(e) { let { guildId: t, channelId: n, ownerId: i } = (0, c.decodeStreamKey)(e); return this.getPreviewURL(t, n, i) } getIsPreviewLoading(e, t, n) { let i = (0, c.encodeStreamKey)({ streamType: null != e ? E.StreamTypes.GUILD : E.StreamTypes.CALL, guildId: e, channelId: t, ownerId: n }); return f.has(i) } } a = "ApplicationStreamPreviewStore", (s = "displayName") in(r = h) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new h(d.default, { CONNECTION_OPEN: S, LOGOUT: S, STREAM_PREVIEW_FETCH_START: function(e) { var t; let { streamKey: n } = e; T[n] = (null !== (t = T[n]) && void 0 !== t ? t : 0) + 1, f.add(n) }, STREAM_PREVIEW_FETCH_SUCCESS: function(e) { let { streamKey: t, previewURL: n } = e; I[t] = { url: n, expires: Date.now() + 12e4 }, T[t] = 0, f.delete(t) }, STREAM_PREVIEW_FETCH_FAIL: function(e) { let { streamKey: t, retryAfter: n } = e; I[t] = { url: null, expires: Date.now() + (null != n ? n : 1e4 * T[t]) }, f.delete(t) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return !(l().isEmpty(I) && l().isEmpty(T)) && t.reduce((e, t) => { let { userId: n, guildId: i, channelId: r, selfStream: s } = t; if (s) return e; let a = (0, c.encodeStreamKey)({ streamType: null != i ? E.StreamTypes.GUILD : E.StreamTypes.CALL, guildId: i, channelId: r, ownerId: n }); return delete I[a], delete T[a], !0 }, !1) } }) }, 361291: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("37113"), o = n("65154"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = a.ApplicationStreamPresets.PRESET_VIDEO, d = a.ApplicationStreamResolutions.RESOLUTION_720, _ = a.ApplicationStreamFPS.FPS_30, c = !0; class E extends(i = r.default.PersistedStore) { initialize(e) { if (null != e) { var t, n; u = null !== (t = e.preset) && void 0 !== t ? t : a.ApplicationStreamPresets.PRESET_VIDEO, d = e.resolution, _ = e.fps, c = null === (n = e.soundshareEnabled) || void 0 === n || n } } getState() { return { preset: u, resolution: d, fps: _, soundshareEnabled: c } } } l(E, "displayName", "ApplicationStreamingSettingsStore"), l(E, "persistKey", "ApplicationStreamingSettingStore"), t.default = new E(s.default, { MEDIA_ENGINE_SET_GO_LIVE_SOURCE: function(e) { let { settings: t } = e; if ((null == t ? void 0 : t.context) === o.MediaEngineContextTypes.STREAM) { if ((null == t ? void 0 : t.qualityOptions) == null || (null == t ? void 0 : t.qualityOptions.resolution) == null || (null == t ? void 0 : t.qualityOptions.frameRate) == null) return !1; d = t.qualityOptions.resolution, _ = t.qualityOptions.frameRate } }, STREAM_UPDATE_SETTINGS: function(e) { let { preset: t, resolution: n, frameRate: i, soundshareEnabled: r } = e, s = !1; return null != t && (u = t, s = !0), null != n && (d = n, s = !0), null != i && (_ = i, s = !0), null != r && (c = r, s = !0), s } }) }, 199902: function(e, t, n) { "use strict"; let i, r, s, a; n.r(t), n("47120"), n("653041"), n("724458"); var o, l, u, d, _ = n("442837"), c = n("570140"), E = n("258609"), I = n("594190"), T = n("569545"), f = n("102172"), S = n("139656"), h = n("855403"), A = n("314897"), m = n("592125"), N = n("430824"), p = n("131951"), O = n("496675"), C = n("19780"), R = n("944486"), g = n("979651"), L = n("981631"), v = n("70722"); let D = null, M = {}, y = null; function P() { i = new Map, r = {}, s = {}, a = {}, M = {} } P(); function U(e) { i.delete(e) } function b() { let e = []; for (let t in r) { let n = r[t]; for (let i in n) e.push(r[t][i]) } return e } function G(e) { let { streamKey: t, region: n, viewerIds: r, paused: a } = e; i.set(t, { ...(0, T.decodeStreamKey)(t), state: a ? L.ApplicationStreamStates.PAUSED : L.ApplicationStreamStates.ACTIVE }), s[t] = { streamKey: t, region: n, viewerIds: r } } function w(e, t) { let n = m.default.getBasicChannel(t); return e === v.StreamTypes.CALL || null != n && O.default.canBasicChannel(L.BasicPermissions.VIEW_CHANNEL, n) } function k(e) { if (w(e.streamType, e.channelId)) return !0; let t = m.default.getBasicChannel(e.channelId); return null != t && (0, f.canWatchStream)(t, g.default, N.default, O.default, E.default)[0] } class B extends(o = _.default.Store) { initialize() { this.syncWith([O.default], () => !0), this.waitFor(I.default, O.default) } isSelfStreamHidden(e) { var t; return null !== (t = M[e]) && void 0 !== t && t } getLastActiveStream() { var e; return (0, S.default)(p.default) ? null !== (e = Array.from(i.values()).pop()) && void 0 !== e ? e : null : null } getAllActiveStreams() { return (0, S.default)(p.default) ? Array.from(i.values()) : [] } getAllActiveStreamsForChannel(e) { return (0, S.default)(p.default) ? Array.from(i.values()).filter(t => t.channelId === e) : [] } getActiveStreamForStreamKey(e) { var t; return (0, S.default)(p.default) ? null !== (t = i.get(e)) && void 0 !== t ? t : null : null } getActiveStreamForApplicationStream(e) { var t; if (!(0, S.default)(p.default) || null == e) return null; let n = (0, T.encodeStreamKey)(e); return null !== (t = this.getActiveStreamForStreamKey(n)) && void 0 !== t ? t : null } getCurrentUserActiveStream() { let e = R.default.getVoiceChannelId(), t = m.default.getChannel(e); return null == t ? null : this.getActiveStreamForUser(A.default.getId(), t.getGuildId()) } getActiveStreamForUser(e, t) { var n; let i = this.getStreamForUser(e, t); return null != i ? this.getActiveStreamForApplicationStream(i) : null !== (n = this.getAllActiveStreams().find(t => t.ownerId === e)) && void 0 !== n ? n : null } getStreamerActiveStreamMetadata() { var e; let t = R.default.getVoiceChannelId(), n = m.default.getChannel(t); if (null == n) return null; let i = this.getActiveStreamForUser(A.default.getId(), n.getGuildId()); return null == i ? null : null !== (e = a[(0, T.encodeStreamKey)(i)]) && void 0 !== e ? e : null } getStreamerActiveStreamMetadataForStream(e) { var t; return null !== (t = a[e]) && void 0 !== t ? t : null } getAnyStreamForUser(e) { var t; if (!(0, S.default)(p.default)) return null; let n = r[e]; return null == n ? null : null !== (t = Object.values(n).find(e => k(e))) && void 0 !== t ? t : null } getStreamForUser(e, t) { var n; if (!(0, S.default)(p.default)) return null; let i = null === (n = r[e]) || void 0 === n ? void 0 : n[null != t ? t : L.NULL_STRING_GUILD_ID]; return null != i && k(i) ? i : null } getRTCStream(e) { var t; return (0, S.default)(p.default) ? null !== (t = s[e]) && void 0 !== t ? t : null : null } getAllApplicationStreams() { return (0, S.default)(p.default) ? b().filter(e => null != e && w(e.streamType, e.channelId)) : [] } getAllApplicationStreamsForChannel(e) { return (0, S.default)(p.default) ? b().filter(t => null != t && t.channelId === e && w(t.streamType, t.channelId)) : [] } getViewerIds(e) { if (!(0, S.default)(p.default)) return []; let t = null, n = null != (t = "string" == typeof e ? e : (0, T.encodeStreamKey)(e)) ? s[t] : null; return null != n ? n.viewerIds : [] } getCurrentAppIntent() { return y } getState() { return (0, S.default)(p.default) ? { activeStreams: Array.from(i.entries()), streamsByUserAndGuild: r, rtcStreams: s, streamerActiveStreamMetadatas: a } : { activeStreams: [], streamsByUserAndGuild: {}, rtcStreams: {}, streamerActiveStreamMetadatas: {} } } } d = "ApplicationStreamingStore", (u = "displayName") in(l = B) ? Object.defineProperty(l, u, { value: d, enumerable: !0, configurable: !0, writable: !0 }) : l[u] = d, t.default = new B(c.default, { OVERLAY_INITIALIZE: function(e) { let { applicationStreamState: t } = e; r = t.streamsByUserAndGuild, i = new Map(t.activeStreams), s = t.rtcStreams, a = t.streamerActiveStreamMetadatas }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { let { userId: n, guildId: i, channelId: s, sessionId: a, selfStream: o } = t; if (o && null != s) { var l, u; return null == r[(l = { streamType: null != i ? v.StreamTypes.GUILD : v.StreamTypes.CALL, ownerId: n, guildId: i, channelId: s }).ownerId] && (r[l.ownerId] = {}), r[l.ownerId][null !== (u = l.guildId) && void 0 !== u ? u : L.NULL_STRING_GUILD_ID] = l, !0 } { let t = A.default.getSessionId(); return n === A.default.getId() && a !== t && null != C.default.getChannelId() ? e : function(e, t) { var n; let i = null != t ? t : L.NULL_STRING_GUILD_ID; return (null === (n = r[e]) || void 0 === n ? void 0 : n[i]) != null && (delete r[e][i], !0) }(n, i) || e } }, !1) }, STREAM_WATCH: function(e) { let { streamKey: t } = e, n = (0, T.decodeStreamKey)(t); i.delete(t), i.set(t, { ...n, state: L.ApplicationStreamStates.CONNECTING }), n.ownerId === A.default.getId() && (M[n.channelId] = !1) }, STREAM_START: function(e) { var t; let { streamType: n, guildId: r, channelId: s, pid: o, sourceName: l, sourceId: u } = e, d = (0, T.encodeStreamKey)({ streamType: n, guildId: r, channelId: s, ownerId: A.default.getId() }), _ = null !== (t = null != o ? I.default.getGameForPID(o) : null != u ? I.default.getRunningGames().find(e => (0, h.default)(u, e.windowHandle)) : null) && void 0 !== t ? t : null; a[d] = { id: null == _ ? void 0 : _.id, pid: o, sourceName: l }, i.delete(d), i.set(d, { streamType: n, guildId: r, channelId: s, ownerId: A.default.getId(), state: L.ApplicationStreamStates.CONNECTING }) }, STREAM_STOP: function(e) { let { streamKey: t } = e; a[t] = null }, STREAM_CREATE: G, STREAM_UPDATE: G, STREAM_TIMED_OUT: function(e) { let { streamKey: t } = e, n = i.get(t); if (null == n) return !1; i.set(t, { ...n, state: L.ApplicationStreamStates.FAILED }) }, STREAM_DELETE: function(e) { let { streamKey: t, unavailable: r, reason: a } = e; delete s[t]; let o = i.get(t); if (null == o) return !1; let l = L.ApplicationStreamStates.ENDED; if (r) l = L.ApplicationStreamStates.RECONNECTING; else if (a === L.ApplicationStreamDeleteReasons.UNAUTHORIZED) l = L.ApplicationStreamStates.FAILED; else if (a === L.ApplicationStreamDeleteReasons.SAFETY_GUILD_RATE_LIMITED) { let { guildId: e } = (0, T.decodeStreamKey)(t); n.e("76731").then(n.bind(n, "626892")).then(t => { let { default: n } = t; n(e) }), l = L.ApplicationStreamStates.ENDED } i.set(t, { ...o, state: l }), l === L.ApplicationStreamStates.ENDED && D !== t && U(t) }, STREAM_CLOSE: function(e) { let { streamKey: t } = e; U(t) }, STREAM_UPDATE_SELF_HIDDEN: function(e) { let { channelId: t, selfStreamHidden: n } = e; (0, T.isStreamKey)(D) && (null == D ? void 0 : D.includes(A.default.getId())) && !1 === M[t] && !0 === n && (D = null), M[t] = n }, SET_STREAM_APP_INTENT: function(e) { let { intent: t } = e; y = t }, RTC_CONNECTION_STATE: function(e) { let { streamKey: t, state: n } = e; if (null == t) return !1; let r = i.get(t); if (null == r || r.state === L.ApplicationStreamStates.ENDED) return !1; let s = r.state; switch (n) { case L.RTCConnectionStates.DISCONNECTED: s = L.ApplicationStreamStates.RECONNECTING; break; case L.RTCConnectionStates.RTC_CONNECTED: s = L.ApplicationStreamStates.ACTIVE } if (s === r.state) return !1; i.set(t, { ...r, state: s }) }, CHANNEL_RTC_SELECT_PARTICIPANT: function(e) { let { id: t, channelId: n } = e; if (D = t, Array.from(i.values()).forEach(e => { (0, T.encodeStreamKey)(e) !== D && e.state === L.ApplicationStreamStates.ENDED && U((0, T.encodeStreamKey)(e)) }), null != t)(0, T.isStreamKey)(t) && t.includes(A.default.getId()) && (M[n] = !1) }, CONNECTION_OPEN: P, CONNECTION_CLOSED: P, LOGOUT: P }) }, 314897: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"), n("177593"), n("653041"), n("411104"); var s, a, o, l, u = n("512722"), d = n.n(u), _ = n("213919"), c = n("756647"), E = n("442837"), I = n("544891"), T = n("433517"), f = n("570140"), S = n("911969"), h = n("109728"), A = n("670890"), m = n("569611"), N = n("710845"), p = n("703656"), O = n("786213"), C = n("626135"), R = n("449934"), g = n("960048"), L = n("117240"), v = n("412788"), D = n("981631"), M = n("723359"); let y = n("952265").hasModalOpen, P = new N.default("AuthenticationStore"), U = "fingerprint", b = "email_cache", G = "user_id_cache", w = null, k = null, B = null, V = null, x = null, F = null, H = null, Y = D.LoginStates.NONE, j = D.RegistrationStates.NONE, W = !1, K = [], z = "", Z = !1, X = null, Q = !1, q = !1, J = "", $ = !1, ee = !1, et = {}, en = {}, ei = null, er = null, es = null, ea = null, eo = !1; function el(e) { let t = {}; if (t.error_code = e.code, null != e.errors) { for (let n of Object.keys(e.errors)) t[n] = [e.getFirstFieldErrorMessage(n)]; return t } return t.message = e.message, null != e.retryAfter && (t.retry_after = e.retryAfter), t } function eu(e) { let t = null != _.getToken(), n = null != T.Storage.get(D.TOKEN_KEY); P.verbose(e, { tokenManagerHasToken: t, storageHasToken: n }) } function ed() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; if (x = T.Storage.get(U), null != er) return er; let t = null != x ? x : _.getToken(); !(!(0, p.isValidFingerprintRoute)() || !e && null != t || L.default.isHandoffAvailable()) && e_({ withGuildExperiments: !0 }) } function e_(e) { let { withGuildExperiments: t } = e, n = {}, i = C.default.getSuperPropertiesBase64(); null != i && (n["X-Super-Properties"] = i), null != x && (n["X-Fingerprint"] = x), er = I.HTTP.get({ url: D.Endpoints.EXPERIMENTS, query: { with_guild_experiments: t }, headers: n, context: { location: (0, p.getFingerprintLocation)() }, retries: 3, oldFormErrors: !0 }).then(e => { let { fingerprint: t, assignments: n, guild_experiments: i } = e.body; t && f.default.dispatch({ type: "FINGERPRINT", fingerprint: t }), f.default.dispatch({ type: "EXPERIMENTS_FETCH_SUCCESS", fingerprint: t, experiments: n, guildExperiments: i }), er = null, (0, h.onExperimentsLoaded)() }, () => { er = null, f.default.dispatch({ type: "EXPERIMENTS_FETCH_FAILURE" }) }) } function ec() { F = x, x = null, T.Storage.remove(U) } function eE(e, t) { eu("setAuthToken called."), _.setToken(e, t) } function eI() { return eu("removeAuthToken called."), _.removeToken() } function eT() { W = !0, ef(), f.default.wait(() => { (0, p.transitionTo)(D.Routes.REGISTER) }) } function ef(e) { var t; eu("handleLogout called."); let n = eI(); !(null !== (t = null == e ? void 0 : e.isSwitchingAccount) && void 0 !== t && t) && (n && ec(), ed()), E.default.PersistedStore.clearAll({ omit: ["InstallationManagerStore", "AgeGateStore", "NativePermissionsStore", "MultiAccountStore", "DraftStore", "OverlayStoreV2", "StreamerModeStore", "LoginRequiredActionStore"], type: (null == e ? void 0 : e.isSwitchingAccount) ? "user-data-only" : "all" }), v.default.clearAll(), m.clear(), g.default.clearUser(), T.Storage.remove(G), w = null, Y = (null == e ? void 0 : e.isSwitchingAccount) ? D.LoginStates.LOGGING_IN : D.LoginStates.NONE, j = D.RegistrationStates.NONE, z = "", J = "", X = null, Z = !1, $ = !1, ee = !1, et = {}, en = {}, eo = !1 } class eS extends(s = E.default.Store) { initialize() { w = T.Storage.get(G), k = T.Storage.get(b), es = T.Storage.get("login_cache"), null == _.getToken() && ed(), this.addChangeListener(() => (0, A.setClientState)(w)) } getEmail() { return k } getLogin() { return es } didVerifyFail() { return $ } getVerifyErrors() { return et } didVerifySucceed() { return ee } getLoginStatus() { return Y } getRegisterStatus() { return j } getId() { return w } getSessionId() { return B } getAuthSessionIdHash() { return V } getToken() { return (0, R.getToken)() } isAuthenticated() { return (0, R.isAuthenticated)() } getFingerprint() { return x } getAnalyticsToken() { return H } getErrors() { return en } getMFATicket() { return z } getMFASMS() { return Z } getMFATotp() { return Q } getMFABackup() { return q } getMFAWebAuthn() { return X } getMFAMethods() { let e = []; return null != X && e.push({ type: "webauthn", challenge: X }), Q && e.push({ type: "totp", backup_codes_allowed: q }), q && e.push({ type: "backup" }), Z && e.push({ type: "sms" }), e } hasTOTPEnabled() { return K.includes(S.AuthenticatorType.TOTP) } hasSMSEnabled() { return K.includes(S.AuthenticatorType.SMS) } hasWebAuthnEnabled() { return K.includes(S.AuthenticatorType.WEBAUTHN) } getMaskedPhone() { return J } getCredentials() { if (null == i) throw Error("no credentials"); return i } getVerifyingUserId() { return ei } getCurrentRegistrationOptions() { return r } allowLogoutRedirect() { return !W } getWebAuthnChallenge() { return X } getSuspendedUserToken() { return ea } getIsPasswordlessActive() { return eo } } l = "AuthenticationStore", (o = "displayName") in(a = eS) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new eS(f.default, { CONNECTION_OPEN: function(e) { var t; let { user: n, sessionId: i, authSessionIdHash: r, analyticsToken: s, auth: a } = e; eu("handleConnectionOpen called"), g.default.setUser(n.id, n.username, null !== (t = n.email) && void 0 !== t ? t : void 0, (0, O.default)(n)), B = i, V = r, H = s, w = n.id, k = n.email, void 0 !== a && (K = a.authenticator_types), T.Storage.set(b, n.email), T.Storage.set(G, n.id) }, OVERLAY_INITIALIZE: function(e) { var t; let { user: n, sessionId: i, analyticsToken: r, token: s } = e; g.default.setUser(n.id, n.username, null !== (t = n.email) && void 0 !== t ? t : void 0, (0, O.default)(n)), B = i, H = r, eE(s), ec(), w = n.id, T.Storage.set(G, n.id) }, CONNECTION_CLOSED: function(e) { let { code: t } = e; if (eu("handleConnectionClosed called with code ".concat(t, ".")), 4004 === t) { if (W || y(M.NEW_USER_AGE_GATE_MODAL_KEY) || y(M.EXISTING_USER_AGE_GATE_MODAL_KEY)) { eT(); return } C.default.track(D.AnalyticEvents.APP_USER_DEAUTHENTICATED, { user_id: T.Storage.get(G) }), ef(), setImmediate(() => (0, p.transitionTo)(D.Routes.DEFAULT_LOGGED_OUT)) } }, AUTH_SESSION_CHANGE: function(e) { let { authSessionIdHash: t } = e; null != t && (V = t) }, LOGIN: function(e) { en = {}, Y = D.LoginStates.LOGGING_IN, J = "", r = null, null != e.login && (es = e.login) }, LOGIN_SUCCESS: function(e) { let { token: t } = e; Y = D.LoginStates.NONE, eE(t), ec(), z = "", Z = !1, X = null, eo = !1, J = "" }, LOGIN_FAILURE: function(e) { let { error: t } = e; z = "", Z = !1, X = null, Y = null != (en = function(e) { if (Object.keys(e.fields).length > 0) return e.fields; let t = { message: e.message }; return null != e.retryAfter && (t.retry_after = e.retryAfter), t }(t)).date_of_birth ? D.LoginStates.LOGIN_AGE_GATE : D.LoginStates.NONE }, LOGIN_MFA_STEP: function(e) { let { ticket: t, sms: n, webauthn: i, backup: r, totp: s } = e; null != t && (z = t, Z = n, J = "", X = null != i ? i : null, q = r, Q = s), en = {}, Y = D.LoginStates.MFA_STEP }, LOGIN_MFA: function() { Y = D.LoginStates.LOGGING_IN_MFA }, LOGIN_MFA_FAILURE: function(e) { let { message: t } = e; Y = D.LoginStates.MFA_STEP, en = { code: t } }, LOGIN_MFA_SMS: function() { Y = D.LoginStates.LOGGING_IN_MFA_SMS }, LOGIN_MFA_SMS_REQUEST_SUCCESS: function(e) { let { phone: t } = e; Y = D.LoginStates.MFA_SMS_STEP, J = t }, LOGIN_MFA_SMS_FAILURE: function(e) { let { message: t } = e; Y = D.LoginStates.MFA_SMS_STEP, en = { code: t } }, LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION: function(e) { Y = D.LoginStates.ACCOUNT_SCHEDULED_FOR_DELETION, i = e.credentials }, LOGIN_ACCOUNT_DISABLED: function(e) { Y = D.LoginStates.ACCOUNT_DISABLED, i = e.credentials }, LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION: function() { Y = D.LoginStates.PASSWORD_RECOVERY_PHONE_VERIFICATION }, LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED: function() { Y = D.LoginStates.PHONE_IP_AUTHORIZATION }, LOGIN_RESET: function(e) { let { isMultiAccount: t } = e; en = {}, Y = D.LoginStates.NONE, z = "", Z = !1, X = null, r = null, i = null, !t && (eI(), ed(!1)) }, LOGIN_STATUS_RESET: function() { Y = D.LoginStates.NONE }, LOGIN_SUSPENDED_USER: function(e) { let { suspendedUserToken: t } = e; eo = !1, ea = t, setImmediate(() => (0, p.transitionTo)(D.Routes.ACCOUNT_STANDING)) }, SET_LOGIN_CREDENTIALS: function(e) { let { login: t, password: n } = e; i = { login: t, password: n } }, LOGOUT: ef, FINGERPRINT: function(e) { let t = e.fingerprint; null == x ? null != t ? (C.default.track(D.AnalyticEvents.USER_FINGERPRINT_CHANGED, { old_fingerprint: null != F ? (0, c.extractId)(F) : null, new_fingerprint: (0, c.extractId)(t) }), x = t, F = t, T.Storage.set(U, x)) : ed() : null != t && x !== t && C.default.track(D.AnalyticEvents.EXTERNAL_FINGERPRINT_DROPPED, { fingerprint: (0, c.extractId)(x), dropped_fingerprint: (0, c.extractId)(t) }) }, REGISTER_SAVE_FORM: function(e) { let { form: t } = e; r = t, j = D.RegistrationStates.REGISTER_AGE_GATE }, REGISTER: function(e) { let { birthday: t } = e; en = {}, null != t && (d()(null != r, "Got birthday in multistep registration without existing form"), r = { ...r, birthday: t }), j = D.RegistrationStates.REGISTERING }, REGISTER_SUCCESS: function(e) { let { token: t } = e; j = D.RegistrationStates.NONE, r = null, eE(t), ec() }, REGISTER_FAILURE: function(e) { let { error: t } = e; en = el(t), j = null != t.getFieldErrors("date_of_birth") ? D.RegistrationStates.REGISTER_AGE_GATE : D.RegistrationStates.REGISTER_WITH_ERROR }, VERIFY_FAILURE: function(e) { let { errors: t } = e; $ = !0, ee = !1, et = null != t ? t : {} }, VERIFY_SUCCESS: function(e) { ee = !0, $ = !1, et = {}, ei = e.verifyingUserId }, START_SESSION: function() { if (0 === Object.keys(en).length) return !1; en = {} }, FORGOT_PASSWORD_REQUEST: function() { Y = D.LoginStates.FORGOT_PASSWORD, en = {} }, FORGOT_PASSWORD_SENT: function() { Y = D.LoginStates.NONE, en = {} }, UPDATE_TOKEN: function(e) { let { token: t, userId: n } = e; eu("handleUpdateToken called"), eE(t, n), ec() }, EXPERIMENTS_FETCH: e_, CURRENT_USER_UPDATE: function(e) { let { user: t } = e; w = t.id, k = t.email, void 0 !== t.authenticator_types && (K = t.authenticator_types), T.Storage.set(b, t.email), T.Storage.set(G, t.id) }, AGE_GATE_LOGOUT_UNDERAGE_NEW_USER: eT, CLEAR_AUTHENTICATION_ERRORS: function() { en = {} }, CLOSE_SUSPENDED_USER: function() { ea = null, Y = D.LoginStates.NONE, ef(), setImmediate(() => (0, p.transitionTo)(D.Routes.DEFAULT_LOGGED_OUT)) }, PASSWORDLESS_FAILURE: function(e) { let { error: t } = e; z = "", Z = !1, X = null, eo = !1, Y = null != (en = el(t)).date_of_birth ? D.LoginStates.LOGIN_AGE_GATE : D.LoginStates.NONE }, PASSWORDLESS_START: function() { en = {}, eo = !0 } }, f.DispatchBand.Early) }, 967368: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("65154"); let d = u.DEFAULT_VOICE_BITRATE; class _ extends(a = o.default.Store) { get bitrate() { return d } } s = "BitRateStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { SET_CHANNEL_BITRATE: function(e) { d = e.bitrate } }) }, 117240: function(e, t, n) { "use strict"; let i, r, s; n.r(t); var a, o, l, u, d = n("153832"), _ = n("442837"), c = n("433517"), E = n("846519"), I = n("570140"), T = n("899742"), f = n("598077"), S = n("12647"), h = n("358085"), A = n("374023"); let m = "BrowserHandoffStore", N = !1, p = new E.Timeout; function O() { null != i && null != r && (window.open("".concat(i, "&key=").concat(r)), S.default.focus(null, !0)) } function C() { r = null, p.stop(), N = !1, c.Storage.set(m, N) } function R() { C() } class g extends(u = _.default.Store) { initialize() { !1 !== c.Storage.get(m) && (N = h.isPlatformEmbedded && "stable" === window.GLOBAL_ENV.RELEASE_CHANNEL) } isHandoffAvailable() { return !A.ProcessArgs.isDisallowPopupsSet() && N } get user() { return s } get key() { return r } } l = "BrowserHandoffStore", (o = "displayName") in(a = g) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new g(I.default, { RPC_SERVER_READY: function(e) { i = "".concat(location.protocol, "//").concat(location.host, "/handoff?rpc=").concat(e.port), O() }, BROWSER_HANDOFF_BEGIN: function(e) { if (null != r) return !1; r = (0, d.v4)(), p.start(e.timeout, () => (0, T.handoffEnd)()), O() }, BROWSER_HANDOFF_FROM_APP: function(e) { let { handoffKey: t, handoffToken: n, timeout: i } = e; if (null == t || null == n) return !1; N = !0, p.start(i, () => (0, T.handoffEnd)()) }, BROWSER_HANDOFF_UNAVAILABLE: C, BROWSER_HANDOFF_SET_USER: function(e) { s = new f.default(e.user) }, LOGIN: R, LOGIN_SUCCESS: R, LOGOUT: R, REGISTER: R }) }, 523746: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("544891"), _ = n("570140"), c = n("592125"), E = n("944486"), I = n("914010"), T = n("981631"); let f = {}, S = {}; function h() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : E.default.getChannelId(), n = c.default.getChannel(t); if (null != n && null == n.getGuildId() && null != t && (null == f[t] || e)) { var i; return f[t] = null !== (i = f[t]) && void 0 !== i ? i : { channelId: t, ringing: [] }, _.default.dispatch({ type: "CALL_CONNECT", channelId: t }), !0 } return !1 } class A extends(a = u.default.Store) { initialize() { this.waitFor(I.default, E.default) } getCall(e) { return f[e] } getCalls() { return Object.values(f) } getMessageId(e) { let t = this.getCall(e); return null != t ? t.messageId : null } isCallActive(e, t) { let n = f[e]; return null != n && !n.unavailable && (null != t ? n.messageId === t : null != n.region) } isCallUnavailable(e) { let t = f[e]; return null != t && t.unavailable } getInternalState() { return { calls: f, enqueuedRings: S } } } s = "CallStore", (r = "displayName") in(i = A) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new A(_.default, { CONNECTION_OPEN: function() { return h(!0) }, CONNECTION_CLOSED: function() { f = {}, S = {} }, OVERLAY_INITIALIZE: function(e) { let { callStoreInternalState: t } = e; f = { ...t.calls }, S = { ...t.enqueuedRings } }, CONNECTION_RESUMED: function() { return h(!0) }, CHANNEL_SELECT: function(e) { let { channelId: t } = e; return h(!1, t) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; if (null != S[t.id] && delete S[t.id], null == f[t.id]) return !1; delete f[t.id] }, CALL_CREATE: function(e) { let { channelId: t, messageId: n, region: i, ringing: r } = e; if (f[t] = { channelId: t, messageId: n, region: i, ringing: r, unavailable: !1, regionUpdated: !1 }, null != S[t]) { let e = S[t]; delete S[t], 1 !== e.indexOf("all") && (e = null), d.HTTP.post({ url: T.Endpoints.CALL_RING(t), body: { recipients: e }, oldFormErrors: !0 }) } }, CALL_UPDATE: function(e) { let { channelId: t, messageId: n, region: i, ringing: r } = e, s = f[t], a = null != s && (s.regionUpdated || s.region !== i); f[t] = { ...f[t], messageId: n, region: i, ringing: r, regionUpdated: a } }, CALL_DELETE: function(e) { let { channelId: t, unavailable: n } = e, i = f[t]; !0 === n && null != i ? f[t] = { ...i, unavailable: n } : f[t] = { channelId: t, ringing: [], messageId: null, region: null, regionUpdated: !1, unavailable: n }, null != S[t] && delete S[t] }, CALL_ENQUEUE_RING: function(e) { var t; let { channelId: n, recipients: i } = e; S[n] = l().union(null !== (t = S[n]) && void 0 !== t ? t : [], null != i ? i : ["all"]) }, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; null == t && (S = {}) } }) }, 680089: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("823379"), o = n("592125"), l = n("486472"), u = n("984933"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = {}, E = 0; function I() { E += 1 } function T(e) { if (null == c[e]) return !1; delete c[e] } class f extends(i = r.default.PersistedStore) { initialize(e) { this.waitFor(o.default, l.default), this.removeChangeListener(I), this.addChangeListener(I), c = null != e ? e : {} } getState() { return c } isCollapsed(e) { return null != e && "null" !== e && !!c[e] && c[e] } getCollapsedCategories() { return c } get version() { return E } } _(f, "displayName", "CategoryCollapseStore"), _(f, "persistKey", "collapsedCategories"), t.default = new f(s.default, { CONNECTION_OPEN: function(e) { for (let t of (!e.userGuildSettings.partial && (c = {}), e.userGuildSettings.entries)) if (null != t.channel_overrides) for (let e of t.channel_overrides) e.collapsed ? c[e.channel_id] = !0 : delete c[e.channel_id] }, USER_GUILD_SETTINGS_FULL_UPDATE: function(e) { let { userGuildSettings: t } = e, n = new Set(t.map(e => e.guild_id).filter(a.isNotNullish)); for (let e in c) { let t = o.default.getChannel(e); null != t && null != t.guild_id && n.has(t.guild_id) && delete c[t.id] } for (let e of t) for (let t of e.channel_overrides) t.collapsed && (c[t.channel_id] = !0) }, CATEGORY_COLLAPSE: function(e) { let { id: t } = e; if (c[t]) return !1; c[t] = !0 }, CATEGORY_EXPAND: function(e) { let { id: t } = e; return T(t) }, CATEGORY_COLLAPSE_ALL: function(e) { let { guildId: t } = e; u.default.getChannels(t)[d.ChannelTypes.GUILD_CATEGORY].forEach(e => { let { channel: t } = e; "null" !== t.id && (c[t.id] = !0) }) }, CATEGORY_EXPAND_ALL: function(e) { let { guildId: t } = e; u.default.getChannels(t)[d.ChannelTypes.GUILD_CATEGORY].forEach(e => { let { channel: t } = e; delete c[t.id] }) }, CHANNEL_DELETE: function(e) { let { channel: { id: t } } = e; return T(t) } }) }, 463395: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("433517"), _ = n("570140"), c = n("65154"); let E = "CertifiedDeviceStore", I = {}, T = {}, f = 0; function S(e, t, n) { let i = T[e]; return null != i ? n(i) : t } function h(e, t) { let n = I[e]; null != n && n.forEach(e => delete T[e.id]), I[e] = t, t.forEach(e => T[e.id] = e) } class A extends(a = u.default.Store) { initialize() { let e = d.Storage.get(E); null != e && l().forEach(e, (e, t) => { e.forEach(e => { "audioinput" === e.type && e.hardwareMute && (e.hardwareMute = !1) }), h(t, e) }) } isCertified(e) { return null != T[e] } getCertifiedDevice(e) { return T[e] } getCertifiedDeviceName(e, t) { let n = this.getCertifiedDevice(e); return null != n ? "".concat(n.vendor.name, " ").concat(n.model.name) : t } getCertifiedDeviceByType(e) { return l().find(T, t => t.type === e) } isHardwareMute(e) { return S(e, !1, e => e.type === c.DeviceTypes.AUDIO_INPUT && e.hardwareMute) } hasEchoCancellation(e) { return S(e, !1, e => e.type === c.DeviceTypes.AUDIO_INPUT && e.echoCancellation) } hasNoiseSuppression(e) { return S(e, !1, e => e.type === c.DeviceTypes.AUDIO_INPUT && e.noiseSuppression) } hasAutomaticGainControl(e) { return S(e, !1, e => e.type === c.DeviceTypes.AUDIO_INPUT && e.automaticGainControl) } getVendor(e) { return S(e, null, e => e.vendor) } getModel(e) { return S(e, null, e => e.model) } getRevision() { return f } } s = "CertifiedDeviceStore", (r = "displayName") in(i = A) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new A(_.default, { CERTIFIED_DEVICES_SET: function(e) { let { applicationId: t, devices: n } = e; h(t, n), d.Storage.set(E, I), f++ } }) }, 439170: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EVERYONE_CHANNEL_ID: function() { return M }, EVERYONE_ID: function() { return D }, MemberListRowTypes: function() { return i } }), n("724458"), n("653041"), n("47120"); var i, r, s, a = n("392711"), o = n.n(a), l = n("108131"), u = n.n(l), d = n("149765"), _ = n("442837"), c = n("570140"), E = n("353926"), I = n("280234"), T = n("653733"), f = n("700785"), S = n("199902"), h = n("314897"), A = n("592125"), m = n("650774"), N = n("271383"), p = n("430824"), O = n("158776"), C = n("885110"), R = n("594174"), g = n("981631"), L = n("689938"); function v(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let D = "everyone", M = 0; function y(e, t, n, i) { switch (t) { case g.StatusTypes.ONLINE: case g.StatusTypes.OFFLINE: case g.StatusTypes.UNKNOWN: return { type: "GROUP", key: t, id: t, get title() { switch (t) { case g.StatusTypes.ONLINE: return L.default.Messages.STATUS_ONLINE; case g.StatusTypes.OFFLINE: return L.default.Messages.STATUS_OFFLINE; default: return L.default.Messages.STATUS_UNKNOWN } }, count: n, index: i }; case "recently-online": return { type: "GROUP", key: t, id: t, get title() { return L.default.Messages.RECENTLY_ONLINE }, count: n, index: i }; default: let r = p.default.getGuild(e), s = null != r ? p.default.getRole(r.id, t) : null; return { type: "GROUP", key: t, id: t, title: null != s ? s.name : "", count: n, index: i } } } function P(e, t, n) { let i = n === h.default.getId(), r = O.default.isMobileOnline(n), s = i ? C.default.getStatus() : O.default.getStatus(n, e), a = i ? C.default.getActivities() : O.default.getActivities(n, e), o = S.default.getStreamForUser(n, e), l = R.default.getUser(n), u = O.default.getLastOnlineTimestamp(n), { isRecentlyOnlineShowable: d } = (0, I.getRecentlyOnlineStrategy)(u); return null == l ? null : { type: "MEMBER", ...N.default.getMember(e, n), user: l, status: s, activities: a, applicationStream: o, isOwner: t === n, isMobileOnline: r, lastOnlineTimestamp: d ? u : void 0 } } function U(e) { let t = A.default.getChannel(e); return null == t ? D : null == t.memberListId ? function(e) { return f.canEveryone(g.Permissions.VIEW_CHANNEL, e) ? D : u().v3(o()(e.permissionOverwrites).reduce((e, t) => { let { id: n, allow: i, deny: r } = t; return d.has(i, g.Permissions.VIEW_CHANNEL) ? e.push("allow:".concat(n)) : d.has(r, g.Permissions.VIEW_CHANNEL) && e.push("deny:".concat(n)), e }, []).sort().join(",")).toString() }(t) : t.memberListId }(s = i || (i = {})).GROUP = "GROUP", s.MEMBER = "MEMBER", s.CONTENT_INVENTORY = "CONTENT_INVENTORY", s.CONTENT_INVENTORY_GROUP = "CONTENT_INVENTORY_GROUP", s.HIDDEN_CONTENT_INVENTORY = "HIDDEN_CONTENT_INVENTORY"; class b { updateOwnerId() { let e = p.default.getGuild(this.guildId); if (null == e) return !1; let t = f.getGuildVisualOwnerId(e); return this.ownerId !== t && (this.ownerId = t, !0) } setGroups(e) { let t = 0; this.groups = e.map(e => { var n; let i = t, r = Math.max(0, null !== (n = e.count) && void 0 !== n ? n : 0); return t += r + 1, y(this.guildId, e.id, r, i) }), this.rows.length = t } sync(e, t) { let [n] = e; t.forEach((e, t) => this.update(n + t, e)) } invalidate(e) { let [t, n] = e; for (let e = t; e <= n; e++) { let t = this.rows[e]; if (null == t) break; delete this.rows[e], "MEMBER" === t.type && delete this.members[t.user.id] } this.version++ } insert(e, t) { let { group: n, member: i } = t; if (null != n) this.rows.splice(e, 0, y(this.guildId, n.id, n.count)); else if (null != i) { let t = P(this.guildId, this.ownerId, i.user.id); if (null == t) return; this.rows.splice(e, 0, t), this.members[i.user.id] = t } this.version++ } update(e, t) { let { group: n, member: i } = t, r = this.rows[e]; if (null != r && "MEMBER" === r.type && delete this.members[r.user.id], null != n) this.rows[e] = y(this.guildId, n.id, n.count); else if (null != i) { let t = P(this.guildId, this.ownerId, i.user.id); if (null == t) return; this.rows[e] = t, this.members[i.user.id] = t } this.version++ } delete(e) { let t = this.rows[e]; null != t && ("MEMBER" === t.type && delete this.members[t.user.id], this.rows.splice(e, 1), this.version++) } rebuildMember(e, t) { let n = this.members[e]; null != n && (Object.assign(n, P(this.guildId, this.ownerId, e)), t && this.syncRecentlyOfflineList(), this.version++) } rebuildMembers() { let e = Object.keys(this.members); for (let t = 0; t < e.length; t++) { let n = e[t]; this.rebuildMember(n, t === e.length) } } syncRecentlyOfflineList() { var e, t; if (!(0, T.isGuildEligibleForRecentlyOnlineExperiment)(this.guildId) || this.rows.length >= 99) { this.experimentalGroups = [], this.experimentalRows = []; return } let n = [], i = [], r = this.rows.findIndex(e => "GROUP" === e.type && e.id === g.StatusTypes.OFFLINE); if (r < 0) { this.experimentalGroups = [], this.experimentalRows = []; return } let s = []; for (let e = 0; e < r; e++) s.push(this.rows[e]); for (let e = r; e < this.rows.length; e++) { let t = this.rows[e]; if (null != t && "MEMBER" === t.type) { if (t.status === g.StatusTypes.OFFLINE && null != t.lastOnlineTimestamp) { let e = { ...t }; n.push(e) } else(t.status === g.StatusTypes.OFFLINE || t.status === g.StatusTypes.INVISIBLE) && i.push({ ...t }) } } n.sort((e, t) => { var n, i; return (null !== (n = t.lastOnlineTimestamp) && void 0 !== n ? n : 0) - (null !== (i = e.lastOnlineTimestamp) && void 0 !== i ? i : 0) }); let a = [...this.groups]; if (a = a.filter(e => e.id !== g.StatusTypes.OFFLINE), n.length > 0) { let t = a[a.length - 1], i = null != t ? (null !== (e = t.index) && void 0 !== e ? e : 0) + t.count + 1 : 0, r = y(this.guildId, "recently-online", n.length, i); a.push(r), s.push(r), s.push(...n) } if (i.length > 0) { let e = a[a.length - 1], n = null != e ? (null !== (t = e.index) && void 0 !== t ? t : 0) + e.count + 1 : 0, r = y(this.guildId, g.StatusTypes.OFFLINE, i.length, n); a.push(r), s.push(r), s.push(...i) } this.experimentalGroups = a, this.experimentalRows = s } constructor(e, t) { v(this, "guildId", void 0), v(this, "listId", void 0), v(this, "ownerId", void 0), v(this, "rows", []), v(this, "experimentalRows", []), v(this, "groups", []), v(this, "experimentalGroups", []), v(this, "members", {}), v(this, "version", 0), this.guildId = e, this.listId = t, this.updateOwnerId() } } let G = new class e { get(e, t) { let n = this._guildLists[e]; null == n && (n = this._guildLists[e] = {}); let i = n[t]; return null == i && ((i = new b(e, t)).setGroups([{ id: g.StatusTypes.UNKNOWN, count: 0 }]), n[t] = i), i } forEach(e, t) { if (null == e) o().forEach(this._guildLists, e => { o().forEach(e, t) }); else { let n = this._guildLists[e]; null != n && o().forEach(n, t) } } delete(e) { delete this._guildLists[e] } reset() { this._guildLists = {} } constructor() { v(this, "_guildLists", {}) } }; function w() { G.reset() } let k = []; function B() { let e = S.default.getAllApplicationStreams(), t = k.concat(e); k = e, t.forEach(e => { G.forEach(null, t => t.rebuildMember(e.ownerId, !0)) }) } function V() { let e = h.default.getId(); G.forEach(null, t => t.rebuildMember(e, !0)) } class x extends(r = _.default.Store) { initialize() { this.waitFor(R.default, p.default, A.default, N.default, O.default, C.default, h.default, m.default, S.default, E.default), this.syncWith([C.default], V), this.syncWith([S.default], B) } getProps(e, t) { let n = G.get(e, U(t)); return n.experimentalRows.length > 0 && n.experimentalGroups.length > 0 ? { listId: "".concat(n.guildId, ":").concat(n.listId), groups: n.experimentalGroups, rows: n.experimentalRows, version: n.version, isRecentlyOnlineEnabled: !0 } : { listId: "".concat(n.guildId, ":").concat(n.listId), groups: n.groups, rows: n.rows, version: n.version, isRecentlyOnlineEnabled: !1 } } getRows(e, t) { return G.get(e, U(t)).rows } } v(x, "displayName", "ChannelMemberStore"), t.default = new x(c.default, { CONNECTION_OPEN: w, OVERLAY_INITIALIZE: w, GUILD_MEMBER_LIST_UPDATE: function(e) { let t = G.get(e.guildId, e.id); e.ops.forEach(e => { switch (e.op) { case "SYNC": t.sync(e.range, e.items); break; case "INVALIDATE": t.invalidate(e.range); break; case "INSERT": t.insert(e.index, e.item); break; case "UPDATE": t.update(e.index, e.item); break; case "DELETE": t.delete(e.index) } }), t.setGroups(e.groups), t.syncRecentlyOfflineList() }, GUILD_UPDATE: function(e) { let { guild: t } = e; G.forEach(t.id, e => { e.updateOwnerId() && e.rebuildMembers() }) }, GUILD_DELETE: function(e) { let { guild: t } = e; G.delete(t.id) }, GUILD_ROLE_UPDATE: function(e) { let { guildId: t } = e; G.forEach(t, e => e.rebuildMembers()) }, GUILD_MEMBER_UPDATE: function(e) { let { guildId: t, user: n } = e; G.forEach(t, e => e.rebuildMember(n.id, !0)) }, CHANNEL_UPDATES: function() { return !0 } }) }, 433355: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MESSAGE_REQUESTS_BASE_CHANNEL_ID: function() { return m }, isViewChannelSidebar: function() { return v } }); var i, r = n("873546"), s = n("442837"), a = n("570140"), o = n("897473"), l = n("585483"), u = n("709054"), d = n("592125"), _ = n("496675"), c = n("768119"), E = n("944486"), I = n("914010"), T = n("594174"), f = n("981631"), S = n("176505"), h = n("231338"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let m = "message_requests", N = !1, p = !1, O = !0, C = !1, R = {}, g = {}; function L(e) { if (null == e) return null; if ((0, S.isStaticChannelRoute)(e)) { let t = I.default.getGuildId(); return null == t ? null : (0, S.buildGuildStaticChannelId)(e, t) } return e } function v(e) { return [o.SidebarType.VIEW_CHANNEL, o.SidebarType.VIEW_THREAD, o.SidebarType.VIEW_MESSAGE_REQUEST].includes(e.type) } function D(e) { let t = !1; C && (C = !1, t = !0); let n = L(E.default.getChannelId()); return null != n && n in R && (delete R[n], t = !0), t && e ? e : !e } function M() { let e = !1; for (let t in R) { let n = R[t]; if (n.type === o.SidebarType.VIEW_THREAD || n.type === o.SidebarType.VIEW_CHANNEL) { let i = d.default.getChannel(n.channelId); (null == i || !_.default.can(h.Permissions.VIEW_CHANNEL, i)) && (delete R[t], e = !0) } } return e } function y() { if (C === c.default.isActive()) return !1; C = c.default.isActive() } class P extends(i = s.default.PersistedStore) { initialize(e) { if (null != e) { var t, n, i, r, s; N = null !== (t = e.isMembersOpen) && void 0 !== t && t, p = null !== (n = e.isSummariesOpen) && void 0 !== n && n, O = null === (i = e.isProfileOpen) || void 0 === i || i, R = null !== (r = e.sidebars) && void 0 !== r ? r : {}, g = null !== (s = e.guildSidebars) && void 0 !== s ? s : {} } this.syncWith([c.default], y), this.syncWith([_.default], M) } getState() { return { isMembersOpen: N, isSummariesOpen: p, isProfileOpen: O, sidebars: R, guildSidebars: g } } getSection(e, t) { if (C) return f.ChannelSections.SEARCH; let n = L(e); return null != n && null != R[n] ? f.ChannelSections.SIDEBAR_CHAT : t && O ? f.ChannelSections.PROFILE : p ? f.ChannelSections.SUMMARIES : N ? f.ChannelSections.MEMBERS : f.ChannelSections.NONE } getSidebarState(e) { let t = L(e); return null == t ? void 0 : R[t] } getGuildSidebarState(e) { return null == e ? void 0 : g[e] } getCurrentSidebarChannelId(e) { let t = L(e); if (null == t || C) return null; let n = R[t]; return null == n ? null : n.type === o.SidebarType.VIEW_THREAD || n.type === o.SidebarType.VIEW_CHANNEL ? n.channelId : null } getCurrentSidebarMessageId(e) { var t; let n = L(e); if (null == n || C) return null; let i = R[n]; return null == i ? null : i.type === o.SidebarType.VIEW_THREAD || i.type === o.SidebarType.VIEW_CHANNEL ? null === (t = i.details) || void 0 === t ? void 0 : t.initialMessageId : null } } A(P, "displayName", "ChannelSectionStore"), A(P, "persistKey", "ChannelSectionStore2"), t.default = new P(a.default, { CHANNEL_TOGGLE_MEMBERS_SECTION: function() { p && (p = D(p)), N = D(N) }, PROFILE_PANEL_TOGGLE_SECTION: function() { !O && l.ComponentDispatch.dispatch(f.ComponentActions.SEARCH_RESULTS_CLOSE), O = D(O) }, CHANNEL_TOGGLE_SUMMARIES_SECTION: function() { N && (N = D(N)), p = D(p) }, SIDEBAR_VIEW_CHANNEL: function(e) { let { sidebarType: t, baseChannelId: n, channelId: i, details: r } = e; C = !1; let s = L(n); return null != s && (R[s] = { type: t, channelId: i, details: r }, !0) }, SIDEBAR_VIEW_GUILD: function(e) { let { sidebarType: t, guildId: n, baseChannelId: i, details: r } = e; C = !1; let s = L(i); return null != s && (g[n] = { type: t, baseChannelId: s, guildId: n, details: r }, !0) }, SIDEBAR_CREATE_THREAD: function(e) { let { parentChannelId: t, parentMessageId: n, location: i } = e; C = !1; let r = L(t); null != r && (R[r] = { type: o.SidebarType.CREATE_THREAD, parentChannelId: t, parentMessageId: n, location: i }) }, SIDEBAR_CLOSE: function(e) { let { baseChannelId: t } = e, n = L(t); null != n && delete R[n] }, SIDEBAR_CLOSE_GUILD: function(e) { let { guildId: t } = e; return null != g[t] && (delete g[t], !0) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; if (t.id in R) return delete R[t.id], !0; let n = !1; for (let e in R) { let i = R[e]; null != i && i.type === o.SidebarType.VIEW_CHANNEL && i.channelId === t.id && (delete R[e], n = !0) } return n }, CHANNEL_SELECT: function() { r.isMobile && N && (N = !1, p = !1) }, THREAD_CREATE: function(e) { var t; let { channel: n } = e; if (n.ownerId === (null === (t = T.default.getCurrentUser()) || void 0 === t ? void 0 : t.id)) return !1; let i = R[n.parent_id]; null != i && i.type === o.SidebarType.CREATE_THREAD && i.parentMessageId === u.default.castChannelIdAsMessageId(n.id) && (R[n.parent_id] = { type: o.SidebarType.VIEW_THREAD, channelId: n.id }) }, THREAD_DELETE: function(e) { let { channel: t } = e, n = R[t.parent_id]; if (null == n || n.type !== o.SidebarType.VIEW_THREAD || n.channelId !== t.id) return !1; delete R[t.parent_id] } }) }, 592125: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChannelLoader: function() { return j } }), n("47120"), n("51350"), n("411104"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("956067"), d = n("442837"), _ = n("570140"), c = n("287328"), E = n("86670"), I = n("591526"), T = n("458772"), f = n("38217"), S = n("710845"), h = n("853856"), A = n("900489"), m = n("131704"), N = n("823379"), p = n("709054"), O = n("314897"), C = n("430824"), R = n("594174"), g = n("981631"); let L = new S.default("ChannelStore"), v = {}, D = {}, M = {}, y = {}, P = null, U = {}, b = {}, G = 0, w = {}, k = {}, B = new Set, V = {}, x = 0, F = {}, H = 0, Y = 0; class j { static loadAllMissingChannels() { let e = C.default.getGuildIds().filter(e => !B.has(e)); return this.loadGuildIds(e) } static loadGuildFromChannelId(e) { var t; return null == e ? null : j.loadGuildIds([null === (t = Z(e)) || void 0 === t ? void 0 : t.guild_id]) } static loadGuildIds(e) { let t = e.filter(N.isNotNullish); if (0 === t.length) return null; let n = c.default.database(); if (null == n || !t.some(e => !B.has(e))) return null; let i = x; return (0, E.tryLoadOrResetCacheGatewayAsync)("loadChannels", async () => { let e = t.map(e => { if (B.has(e)) return null; if (null != V[e]) return L.fileOnly("Skipping loading ".concat(e, " because a load is pending")), null; let t = I.default.getAsync(n, e).then(t => (L.fileOnly("Lazy loaded channels for ".concat(e, " #:").concat(t.length)), { guildId: e, channels: t })); return V[e] = t, { guildId: e, promise: t } }).filter(N.isNotNullish), r = e.map(e => e.promise); try { let t = await Promise.all(r); if (x !== i) return L.fileOnly("lastResetTime has changed, skipping loads for " + e.map(e => e.guildId)), null; let n = t.filter(e => !B.has(e.guildId)); await _.default.dispatch({ type: "LOAD_CHANNELS", channels: n }) } catch (t) { for (let n of (L.error("Failed to load channels from disk for " + e.map(e => e.guildId), t), e)) delete V[n.guildId]; throw t } return null }) } } function W(e, t, n) { if (null == e || "null" === e || B.has(e) || 0 === t && T.default.hasGuild(e)) return; let i = c.default.database(); if (null == i) return; L.verbose("hydrating guild (guild: ".concat(e, ", trace: ").concat(n, ")")); let r = (0, E.tryLoadOrResetCacheGateway)("ensureGuildLoaded(".concat(e, ")"), () => I.default.getSync(i, e), "ensureGuildLoaded"); if (null == r) { B.add(e), T.default.restored(e), L.log("load returned null; early returning (guild: ".concat(e, ", database: ").concat(i, ")")); return } let [s, a] = r; for (let n of ((0, f.default)(s), 0 !== t && (Y += 1), B.add(e), T.default.restored(e), u.default.mark("❗", "loaded guild channels (guild: ".concat(e, ")"), a), s)) !Object.hasOwn(D, n.id) && $((0, m.castChannelRecord)(n)); L.verbose("hydration complete (guild: ".concat(e, ", channels: ").concat(s.length, ", guilds_loaded: ").concat(Y, ")")) } function K(e, t, n) { if (!Object.hasOwn(D, e) && !Object.hasOwn(y, e) && !Object.hasOwn(U, e) && !Object.hasOwn(k, e) && 1 === t) { let i = T.default.getBasicChannel(e); (null == i ? void 0 : i.guild_id) != null && W(i.guild_id, t, n) } } function z(e) { if (L.fileOnly("Deleting guild channels for ".concat(e)), null != M[e]) { for (let t of p.default.keys(M[e])) delete D[t]; delete M[e] } } function Z(e) { var t, n, i, r; return K(e, 0, "getBasicChannel"), null !== (r = null !== (i = null !== (n = null !== (t = D[e]) && void 0 !== t ? t : y[e]) && void 0 !== n ? n : U[e]) && void 0 !== i ? i : k[e]) && void 0 !== r ? r : T.default.getBasicChannel(e) } function X(e) { var t, n, i, r; return K(e, 1, "getChannel"), null !== (r = null !== (i = null !== (n = null !== (t = D[e]) && void 0 !== t ? t : y[e]) && void 0 !== n ? n : U[e]) && void 0 !== i ? i : k[e]) && void 0 !== r ? r : F[e] } function Q(e) { e.isPrivate() ? (delete F[e.id], q(e)) : e.isThread() ? J(e) : m.GUILD_CHANNEL_TYPES.has(e.type) && function(e) { $(e) }(e) } function q(e) { y[e.id] = e, e.type === g.ChannelTypes.DM && (b[e.getRecipientId()] = e.id), G += 1 } function J(e) { let t = D[e.parent_id]; U[e.id] = e.merge({ nsfw: (null == t ? void 0 : t.nsfw) === !0, parentChannelThreadType: null == t ? void 0 : t.type }), e.isScheduledForDeletion() && _.default.dispatch({ type: "THREAD_DELETE", channel: e }) } function $(e) { var t, n; let { id: i, guild_id: r } = e; D[i] = e, M[r] = null !== (t = M[r]) && void 0 !== t ? t : {}, M[r][i] = e, w[r] = (null !== (n = w[r]) && void 0 !== n ? n : 0) + 1 } function ee(e) { if (null != e.channels) for (let t of (L.fileOnly("GuildCreate contained full channels for ".concat(e.id, " #:").concat(e.channels.length)), z(e.id), B.add(e.id), T.default.restored(e.id), e.channels)) $(t); if (null != e.channelUpdates) { let t = e.channelUpdates; for (let n of ((t.writes.length > 0 || t.deletes.length > 0) && T.default.invalidate(e.id), t.deletes)) ei(D[n]); for (let e of t.writes) $(e) } if (null != e.threads) for (let t of e.threads) J(t) } function et(e) { if (!m.ALL_CHANNEL_TYPES.has(e.channel.type)) return !1; let t = X(e.channel.id); if (null == t) t = e.channel; else { var n; t = t.merge({ ...e.channel.toJS(), bitrate: null !== (n = e.channel.bitrate) && void 0 !== n ? n : t.bitrate }) } Q(t) } function en(e) { let { threads: t } = e; t.forEach(e => { m.ALL_CHANNEL_TYPES.has(e.type) && Q((0, m.createChannelRecordFromServer)(e)) }) } function ei(e) { if (null == e) return; let t = e.guild_id; e.id in y && delete y[e.id], e.id in D && delete D[e.id], e.id in U && delete U[e.id], null != t && null != M[t] && e.id in M[t] && delete M[t][e.id], ! function(e) { if (null == e.guild_id || m.THREAD_CHANNEL_TYPES.has(e.type))(0, m.isPrivate)(e.type) && (G += 1); else { var t; w[e.guild_id] = (null !== (t = w[e.guild_id]) && void 0 !== t ? t : 0) + 1 } }(e) } function er(e) { var t, n; let { channel: i } = e, r = null !== (n = null !== (t = D[i.id]) && void 0 !== t ? t : y[i.id]) && void 0 !== n ? n : U[i.id]; if (null == r) return !1; ei(r), ! function(e) { if ("basicPermissions" in e || e.type !== g.ChannelTypes.DM) return; let t = e.getRecipientId(); b[t] === e.id && delete b[t] }(r) } function es(e) { let { messages: t } = e; for (let e of t) null != e.thread && !(e.thread.id in U) && m.ALL_CHANNEL_TYPES.has(e.thread.type) && J((0, m.createChannelRecordFromServer)(e.thread)) } function ea(e) { let { messages: t, threads: n, channels: i } = e; for (let e of t) for (let t of e) eo(t.thread); n.forEach(eo), null == i || i.forEach(e => { let t = (0, m.createChannelRecordFromServer)(e), n = null != X(e.id), i = null != F[e.id]; t.isPrivate() && (!n || i) ? F[t.id] = t : !n && Q(t) }) } function eo(e) { null != e && !(e.id in U) && m.ALL_CHANNEL_TYPES.has(e.type) && J((0, m.createChannelRecordFromServer)(e)) } function el() { for (let e in k = {}, h.default.getFavoriteChannels()) { let t = h.default.getCategoryRecord(e); null != t && (k[e] = t) } } class eu extends(i = d.default.Store) { initialize() { this.waitFor(T.default, R.default, C.default, h.default), this.syncWith([h.default], el) } hasChannel(e) { return null != Z(e) } getBasicChannel(e) { if (null != e) return Z(e) } getChannel(e) { if (null != e) return X(e) } loadAllGuildAndPrivateChannelsFromDisk() { for (let e of C.default.getGuildIds()) W(e, 1, "loadAllGuildAndPrivateChannelsFromDisk"); return { ...D, ...y } } getChannelIds(e) { var t, n; return (W(e, 0, "getChannelIds"), null == e) ? p.default.keys(y) : p.default.keys(null !== (n = null !== (t = T.default.getGuildBasicChannels(e)) && void 0 !== t ? t : M[e]) && void 0 !== n ? n : v) } getMutablePrivateChannels() { return y } getMutableBasicGuildChannelsForGuild(e) { var t, n; return W(e, 0, "getMutableBasicGuildChannelsForGuild"), null !== (n = null !== (t = T.default.getGuildBasicChannels(e)) && void 0 !== t ? t : M[e]) && void 0 !== n ? n : v } getMutableGuildChannelsForGuild(e) { var t; return W(e, 1, "getMutableGuildChannelsForGuild"), null !== (t = M[e]) && void 0 !== t ? t : v } getSortedPrivateChannels() { return l()(y).values().sort((e, t) => p.default.compare(e.lastMessageId, t.lastMessageId)).reverse().value() } getDMFromUserId(e) { if (null != e) return b[e] } getMutableDMsByUserIds() { return b } getDMUserIds() { return p.default.keys(b) } getPrivateChannelsVersion() { return G } getGuildChannelsVersion(e) { var t; return null !== (t = w[e]) && void 0 !== t ? t : 0 } getAllThreadsForParent(e) { return l().values(U).filter(t => t.parent_id === e) } getInitialOverlayState() { return { ...D, ...y, ...U } } getDebugInfo() { return { loadedGuildIds: Array.from(B).sort(p.default.compare), pendingGuildLoads: Object.keys(V).sort(p.default.compare), guildSizes: Object.keys(M).sort(p.default.compare).map(e => "".concat(e, ": ").concat(ed(e))) } } } function ed(e) { return null == M[e] ? null : Object.keys(M[e]).length } a = "ChannelStore", (s = "displayName") in(r = eu) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new eu(_.default, { BACKGROUND_SYNC: function(e) { let { guilds: t } = e, n = M; D = {}, M = {}, w = {}, t.forEach(e => { if ("unavailable" === e.data_mode) L.fileOnly("Restoring guild channels b/c unavailable in bg sync, for ".concat(e.id, " #:").concat(ed(e.id))), l().forEach(n[e.id], $); else if ("partial" === e.data_mode) { var t, i; L.fileOnly("Restoring guild channels b/c partial in bg sync, for ".concat(e.id, " #:").concat(ed(e.id))), l().forEach(n[e.id], $); let r = null !== (i = e.partial_updates.deleted_channel_ids) && void 0 !== i ? i : []; r.length > 0 && (W(e.id, 1, "handleBackgroundSync"), r.forEach(e => ei(D[e]))), null === (t = e.partial_updates.channels) || void 0 === t || t.forEach(t => $((0, m.createChannelRecordFromServer)(t, e.id))) } else L.fileOnly("BG sync contained full channels for ".concat(e.id, " #:").concat(e.channels.length)), z(e.id), B.add(e.id), T.default.restored(e.id), e.channels.forEach(t => $((0, m.createChannelRecordFromServer)(t, e.id))) }) }, CACHE_LOADED_LAZY: function(e) { for (let [t, n] of e.guildChannels) for (let e of (L.fileOnly("Lazy cache contained full guild channels for ".concat(t, " #:").concat(n.length)), B.add(t), n)) Q((0, m.castChannelRecord)(e)) }, CACHE_LOADED: function(e) { var t; e.guilds.length; let { privateChannels: n, initialGuildChannels: i } = e; for (let e of [n, i]) for (let t of e) Q((0, f.deserializeChannel)((0, m.castChannelRecord)(t))); let r = null === (t = i[0]) || void 0 === t ? void 0 : t.guild_id; null != r && (L.fileOnly("Early cache contained full guild channels for ".concat(r)), B.add(r)) }, CHANNEL_CREATE: function(e) { Q(e.channel) }, CHANNEL_DELETE: er, CHANNEL_RECIPIENT_ADD: function(e) { let t = X(e.channelId), n = O.default.getId(); return (null == t ? !!void 0 : !!t.isPrivate()) && (Q(t.addRecipient(e.user.id, e.nick, n)), !0) }, CHANNEL_RECIPIENT_REMOVE: function(e) { let t = X(e.channelId); return (null == t ? !!void 0 : !!t.isPrivate()) && (Q(t.removeRecipient(e.user.id)), !0) }, CHANNEL_UPDATES: function(e) { let t = e.channels.some(e => { let t = X(e.id); return e.nsfw !== (null == t ? void 0 : t.nsfw) || e.type !== (null == t ? void 0 : t.type) }); for (let t of e.channels) Q(t); t && Object.values(U).forEach(e => Q(e)) }, CONNECTION_OPEN_SUPPLEMENTAL: function(e) { let { lazyPrivateChannels: t } = e; null != P && (y = {}, P.forEach(q)), t.forEach(q) }, CONNECTION_OPEN: function(e) { let t = M; for (let n of (b = {}, D = {}, M = {}, U = {}, w = {}, F = {}, V = {}, x = Date.now(), P = e.initialPrivateChannels, e.initialPrivateChannels.forEach(q), e.guilds)) "partial" === n.dataMode && (l().forEach(t[n.id], $), L.fileOnly("Restoring guild channels for ".concat(n.id, " #:").concat(ed(n.id)))), ee(n); el() }, GUILD_CREATE: function(e) { ee(e.guild) }, GUILD_DELETE: function(e) { L.fileOnly("GuildDelete of ".concat(e.guild.id)), z(e.guild.id), B.delete(e.guild.id), T.default.invalidate(e.guild.id) }, GUILD_FEED_FETCH_SUCCESS: function(e) { let { data: t } = e, n = !1; for (let e of (0, A.getThreadsFromGuildFeedFetch)(t)) !(e.id in U) && m.ALL_CHANNEL_TYPES.has(e.type) && (J((0, m.createChannelRecordFromServer)(e)), n = !0); return n }, LOAD_ARCHIVED_THREADS_SUCCESS: en, LOAD_CHANNELS: function(e) { for (let { guildId: t, channels: n } of e.channels) for (let e of (L.fileOnly("Lazy loaded guild channels for ".concat(t)), (0, f.default)(n), B.add(t), T.default.restored(t), n)) !Object.hasOwn(D, e.id) && $((0, m.castChannelRecord)(e)); return !1 }, LOAD_MESSAGES_AROUND_SUCCESS: es, LOAD_MESSAGES_SUCCESS: es, LOAD_THREADS_SUCCESS: en, LOGOUT: function() { L.fileOnly("initializeClear()"), b = {}, D = {}, M = {}, w = {}, y = {}, F = {}, U = {}, B = new Set, V = {}, x = Date.now() }, OVERLAY_INITIALIZE: function(e) { for (let t of (e.guilds.length, e.channels)) Q((0, f.deserializeChannel)((0, m.castChannelRecord)(t))) }, SEARCH_FINISH: ea, MOD_VIEW_SEARCH_FINISH: ea, THREAD_CREATE: et, THREAD_DELETE: er, THREAD_LIST_SYNC: function(e) { let { threads: t } = e; t.forEach(e => { m.ALL_CHANNEL_TYPES.has(e.type) && Q(e) }) }, THREAD_UPDATE: et }) }, 553795: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("457330"), d = n("726542"), _ = n("368111"), c = n("601964"), E = n("981631"); let I = new Set([E.PlatformTypes.CONTACTS]), T = !0, f = [], S = [], h = {}, A = {}, m = {}, N = e => { f = e.filter(e => !I.has(e.type) && d.default.isSupported(e.type)), S = e.filter(e => I.has(e.type)), T = !1 }; class p extends(i = o.default.Store) { isJoining(e) { return h[e] || !1 } joinErrorMessage(e) { return m[e] } isFetching() { return T } getAccounts() { return f } getLocalAccounts() { return S } getAccount(e, t) { return f.find(n => (null == e || n.id === e) && n.type === t) } getLocalAccount(e) { return S.find(t => t.type === e) } isSuggestedAccountType(e) { return A[e] || !1 } } a = "ConnectedAccountsStore", (s = "displayName") in(r = p) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new p(l.default, { CONNECTION_OPEN: function(e) { N(e.connectedAccounts.map(e => new _.default(e))) }, USER_CONNECTIONS_UPDATE: function(e) { e.local && null != e.accounts ? N(e.accounts.map(e => new _.default({ ...e, integrations: e.integrations.map(e => ({ ...e, guild: new c.default(e.guild) })) }))) : u.default.fetch() }, USER_CONNECTIONS_INTEGRATION_JOINING: function(e) { h[e.integrationId] = e.joining }, USER_CONNECTION_UPDATE: function(e) { let { platformType: t, id: n, revoked: i, accessToken: r } = e, s = f.find(e => e.id === n && e.type === t); if (null == s) return !1; null != i && (s.revoked = i), null != r && (s.accessToken = r) }, USER_CONNECTIONS_INTEGRATION_JOINING_ERROR: function(e) { m[e.integrationId] = void 0 !== e.error ? e.error : "" } }) }, 757266: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"); let _ = {}; class c extends(i = u.default.Store) { isConnected(e) { return null != _[e] } get connections() { return l().values(_) } getApplication(e) { return _[e] } getAllConnections() { return _ } } a = "ConnectedAppsStore", (s = "displayName") in(r = c) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new c(d.default, { OVERLAY_INITIALIZE: function(e) { let { connectedApps: t } = e; _ = { ...t } }, RPC_APP_CONNECTED: function(e) { let { application: t } = e; if (null == t.id) return !1; let n = t.id; null == _[n] && (_[n] = { count: 0, id: t.id, name: t.name, icon: t.icon, coverImage: t.coverImage, authenticated: !1 }), _[n].count++ }, RPC_APP_AUTHENTICATED: function(e) { let { application: t } = e; null != t.id && null != _[t.id] && (_[t.id].authenticated = !0) }, RPC_APP_DISCONNECTED: function(e) { let { application: t } = e; null != t.id && null != _[t.id] && (_[t.id].count--, 0 === _[t.id].count && delete _[t.id]) } }) }, 480294: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = !1, d = !1, _ = {}, c = null; class E extends(a = o.default.Store) { hasConsented(e) { return null != _[e] && _[e].consented } get fetchedConsents() { return u } get receivedConsentsInConnectionOpen() { return d } getAuthenticationConsentRequired() { return c } } s = "ConsentStore", (r = "displayName") in(i = E) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new E(l.default, { CONNECTION_OPEN: function(e) { let { consents: t } = e; null != t && (_ = { ..._, ...t }, d = !0) }, UPDATE_CONSENTS: function(e) { let { consents: t } = e; _ = { ...t }, u = !0 }, SET_CONSENT_REQUIRED: function(e) { c = e.consentRequired }, LOGOUT: function() { c = null } }) }, 906467: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("168232"), o = n("430824"), l = n("594174"), u = n("987338"), d = n("48541"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = "production" === d.Environments.DEVELOPMENT || window.GLOBAL_ENV.RELEASE_CHANNEL === d.Environments.STAGING; function E() { c = (0, a.isStaffEnv)(l.default.getCurrentUser()) } class I extends(i = r.default.Store) { initialize() { this.waitFor(l.default, o.default), Object.defineProperties(this, { isDeveloper: { configurable: !1, get: () => c, set: () => {} } }), E(), setTimeout(() => Object.freeze(this)) } getExperimentDescriptor() { return c ? { type: "developer", name: "discord_dev_testing", revision: 1, override: !0, bucket: u.ExperimentBuckets.TREATMENT_1 } : null } constructor(...e) { super(...e), _(this, "isDeveloper", !1) } } _(I, "displayName", "DeveloperExperimentStore"), t.default = new I(s.default, { CONNECTION_OPEN: E, OVERLAY_INITIALIZE: E, CURRENT_USER_UPDATE: E }) }, 857192: function(e, t, n) { "use strict"; n.r(t), n("789020"); var i, r, s, a, o = n("261470"), l = n("213919"), u = n("442837"), d = n("544891"), _ = n("433517"), c = n("570140"), E = n("179658"), I = n("70956"), T = n("960048"), f = n("981631"); let S = (() => { let e = "".concat(location.protocol, "//").concat(location.host, "/__development/source_maps"), t = null, n = new o.default(5 * I.default.Millis.SECOND, 1 * I.default.Millis.MINUTE, !0), i = () => { d.HTTP.put({ url: e, headers: { Authorization: l.getToken() }, oldFormErrors: !0 }).then(e => { 401 === e.status || 403 === e.status ? (t = null, (0, E.setDeveloperOptionSettings)({ sourceMapsEnabled: !1 })) : 200 !== e.status ? t = setTimeout(i, n.fail()) : (n.succeed(), t = setTimeout(i, e.body.sourceMapCookieTTLSeconds * I.default.Millis.SECOND * .75)) }, () => { t = setTimeout(i, n.fail()) }) }; return { set: n => { n !== (null != t) && (n ? t = setTimeout(i, 0) : (clearTimeout(t), t = null, d.HTTP.del({ url: e, headers: { Authorization: l.getToken() }, oldFormErrors: !0 }))) } } })(), h = "DeveloperOptionsStore", A = { trace: !1, canary: !1, logGatewayEvents: !1, logOverlayEvents: !1, logAnalyticsEvents: !1, sourceMapsEnabled: !1, axeEnabled: !1, analyticsDebuggerEnabled: !1, bugReporterEnabled: !0, idleStatusIndicatorEnabled: !1, appDirectoryIncludesInactiveCollections: !1 }, m = { ...A }; function N(e) { m = { ...A, ...m, ...e }, S.set(m.sourceMapsEnabled), _.Storage.set(h, m) } class p extends(i = u.default.Store) { initialize() { let e = _.Storage.get(h); null != e && (m = { ...A, ...e }) } get isTracingRequests() { return m.trace } get isForcedCanary() { return m.canary } get isLoggingGatewayEvents() { return m.logGatewayEvents } get isLoggingOverlayEvents() { return m.logOverlayEvents } get isLoggingAnalyticsEvents() { return m.logAnalyticsEvents } get isAxeEnabled() { return m.axeEnabled } get sourceMapsEnabled() { return m.sourceMapsEnabled } get isAnalyticsDebuggerEnabled() { return m.analyticsDebuggerEnabled } get isBugReporterEnabled() { return m.bugReporterEnabled } get isIdleStatusIndicatorEnabled() { return m.idleStatusIndicatorEnabled } get appDirectoryIncludesInactiveCollections() { return m.appDirectoryIncludesInactiveCollections } getDebugOptionsHeaderValue() { return Object.keys(m).map(e => m[e]), Object.keys(m).filter(e => m[e]).join(",") } } a = "DeveloperOptionsStore", (s = "displayName") in(r = p) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new p(c.default, { LOGOUT: function(e) { N(A) }, CONNECTION_OPEN: function(e) { var t; let n = ((null !== (t = e.user.flags) && void 0 !== t ? t : 0) & f.UserFlags.STAFF) === f.UserFlags.STAFF, i = n || null != e.user.personal_connection_id; n && S.set(m.sourceMapsEnabled), T.default.setTags({ isStaff: i.toString() }) }, DEVELOPER_OPTIONS_UPDATE_SETTINGS: function(e) { let { settings: t } = e; N(t) } }) }, 796974: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("902704"), u = n("570140"); let d = {}, _ = {}, c = { scrollTop: 0 }; function E(e) { return { guildId: e, scrollTop: null, scrollTo: null } } function I(e) { if (null != d[e]) { let { scrollTop: t, scrollHeight: n, offsetHeight: i } = d[e]; return t === n - i } return !0 } class T extends(a = o.default.Store) { percentageScrolled(e) { if (null != d[e]) { let { scrollTop: t, scrollHeight: n } = d[e]; return t / n } return 1 } getChannelDimensions(e) { return d[e] } getGuildDimensions(e) { var t; return null !== (t = _[e]) && void 0 !== t ? t : E(e) } getGuildListDimensions() { return c } isAtBottom(e) { return I(e) } } s = "DimensionStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new T(u.default, { UPDATE_CHANNEL_DIMENSIONS: function(e) { let { channelId: t, scrollTop: n, scrollHeight: i, offsetHeight: r } = e, s = d[t]; if (null == n || null == i || null == r) { if (null == s) return !1; delete d[t] } else { let e = { channelId: t, scrollTop: n, scrollHeight: i, offsetHeight: r }; if (null != s && (0, l.default)(s, e)) return !1; d[t] = e } }, UPDATE_CHANNEL_LIST_DIMENSIONS: function(e) { let { guildId: t, scrollTop: n, scrollTo: i } = e; null == _[t] && (_[t] = E(t)), void 0 !== n && (_[t].scrollTop = n); let r = !1; return void 0 !== i && (r = _[t].scrollTo !== i, _[t].scrollTo = i), null != i || r }, UPDATE_GUILD_LIST_DIMENSIONS: function(e) { let { scrollTop: t } = e; c.scrollTop = t }, CALL_CREATE: function(e) { let { channelId: t } = e; I(t) && delete d[t] } }) }, 703558: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DraftType: function() { return i } }), n("47120"); var i, r, s, a = n("392711"), o = n.n(a), l = n("442837"), u = n("570140"), d = n("823379"), _ = n("709054"), c = n("314897"), E = n("592125"), I = n("486472"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = n("981631").MAX_MESSAGE_LENGTH_PREMIUM + 500; (s = i || (i = {}))[s.ChannelMessage = 0] = "ChannelMessage", s[s.ThreadSettings = 1] = "ThreadSettings", s[s.FirstThreadMessage = 2] = "FirstThreadMessage", s[s.ApplicationLauncherCommand = 3] = "ApplicationLauncherCommand", s[s.Poll = 4] = "Poll", s[s.SlashCommand = 5] = "SlashCommand"; let S = {}; function h(e) { let t = S[e]; return null == t && (t = S[e] = {}), t } function A(e) { let { type: t, channelId: n, draft: i, draftType: r } = e, s = E.default.getChannel(n); i === (null == s ? void 0 : s.template) && (i = ""); let a = c.default.getId(); if (null != a && null != i && "" !== i) { var o, l; let e = h(a), t = e[n]; if (null == t && (t = e[n] = {}), (l = i).length > f && (l = l.substr(0, f)), (i = l) === (null === (o = t[r]) || void 0 === o ? void 0 : o.draft)) return !1; t[r] = { timestamp: Date.now(), draft: i } } else m(n, r); return "DRAFT_SAVE" === t } function m(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : c.default.getId(); if (null == n) return !1; let i = h(n), r = i[e]; if (null == r) return !1; delete r[t], o().isEmpty(r) && delete i[e] } function N() { let e = c.default.getId(); if (null == e || I.default.totalUnavailableGuilds > 0) return; let t = h(e); for (let e in t) null == E.default.getChannel(e) && delete t[e] } function p(e) { let { channel: { id: t } } = e, n = c.default.getId(); if (null == n) return !1; let i = h(n); return delete i[t], !1 } class O extends(r = l.default.PersistedStore) { initialize(e) { S = null != e ? e : {}, ! function() { for (let [e, t] of _.default.entries(S)) for (let [n, i] of _.default.entries(t)) { let t = i[0]; null != t && ("" === t.draft || "" === t.draft.trim()) && m(n, 0, e) } }(), this.waitFor(c.default, E.default, I.default) } getState() { return S } getThreadDraftWithParentMessageId(e) { let t = c.default.getId(); if (null == t) return; let n = h(t), i = _.default.keys(n).find(t => { let n = this.getThreadSettings(t); return (null == n ? void 0 : n.parentMessageId) === e }); return null != i ? this.getThreadSettings(i) : void 0 } getRecentlyEditedDrafts(e) { let t = c.default.getId(); if (null == t) return []; let n = h(t); return o()(n).mapValues(t => null == t ? void 0 : t[e]).pickBy(d.isNotNullish).toPairs().map(e => { let [t, { timestamp: n, draft: i }] = e; return { channelId: t, timestamp: n, draft: i } }).sortBy(e => { let { timestamp: t } = e; return -t }).value() } getDraft(e, t) { let n = c.default.getId(); if (null == n) return ""; let i = h(n)[e]; if (null != i) { let e = i[t]; if (null != e) return e.draft } return "" } getThreadSettings(e) { let t = c.default.getId(); if (null == t) return null; let n = h(t)[e]; return null == n ? null : n[1] } } T(O, "displayName", "DraftStore"), T(O, "persistKey", "DraftStore"), T(O, "migrations", [e => { if (null == e) return {}; for (let t in e) "timestamp" in e[t] && (e[t] = { 0: e[t] }); return e }, e => { let t = c.default.getId(); if (null == e || null == t) return {}; let n = {}, i = n[t] = {}; for (let t in e) i[t] = e[t]; return n }]), t.default = new O(u.default, { CONNECTION_OPEN: function() { let e = c.default.getId(); return !(e in S) && (S[e] = {}), N(), !1 }, LOGOUT: function(e) { !e.isSwitchingAccount && (S = {}) }, MULTI_ACCOUNT_REMOVE_ACCOUNT: function(e) { e.userId in S && delete S[e.userId] }, GUILD_DELETE: function() { return N(), !1 }, CHANNEL_DELETE: p, THREAD_DELETE: p, THREAD_CREATE: function(e) { let { channel: t } = e, n = c.default.getId(); if (null == n || t.ownerId === n) return !1; let i = h(n), r = i[t.parent_id]; if (null == r) return !1; let s = r[1]; if (null == s) return !1; if (s.parentMessageId !== _.default.castChannelIdAsMessageId(t.id)) return !1; { var a, o; let e = i[t.parent_id]; if (null == e) return !1; let n = null !== (o = null === (a = e[2]) || void 0 === a ? void 0 : a.draft) && void 0 !== o ? o : ""; "" !== n && (i[t.id] = { 0: { timestamp: Date.now(), draft: n } }), m(t.parent_id, 1), m(t.parent_id, 2) } }, DRAFT_SAVE: A, DRAFT_CHANGE: A, DRAFT_CLEAR: function(e) { let { channelId: t, draftType: n } = e; return m(t, n) }, THREAD_SETTINGS_DRAFT_CHANGE: function(e) { let { channelId: t, draft: n } = e, i = c.default.getId(); if (null == i) return; let r = h(i), s = r[t]; null == s && (s = r[t] = {}), s[1] = { timestamp: Date.now(), ...s[1], ...n, parentChannelId: t } } }) }, 323873: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("752305"), d = n("957730"), _ = n("695346"), c = n("375954"); let E = {}, I = {}; class T extends(a = o.default.Store) { isEditing(e, t) { var n; return (null === (n = E[e]) || void 0 === n ? void 0 : n.messageId) === t } isEditingAny(e) { return null != E[e] } getEditingTextValue(e) { var t; return null === (t = E[e]) || void 0 === t ? void 0 : t.textValue } getEditingRichValue(e) { var t; return null === (t = E[e]) || void 0 === t ? void 0 : t.richValue } getEditingMessageId(e) { var t; return null === (t = E[e]) || void 0 === t ? void 0 : t.messageId } getEditingMessage(e) { let t = E[e]; return null != t && null != t.messageId ? c.default.getMessage(e, t.messageId) : null } getEditActionSource(e) { return I[e] } } s = "EditMessageStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new T(l.default, { MESSAGE_START_EDIT: function(e) { let { channelId: t, messageId: n, content: i, source: r } = e, s = _.UseLegacyChatInput.getSetting(), a = d.default.unparse(i, t); E[t] = { channelId: t, messageId: n, textValue: a, richValue: (0, u.toRichValue)(s ? a : i) }, I[t] = r }, MESSAGE_UPDATE_EDIT: function(e) { let { channelId: t, textValue: n, richValue: i } = e, r = E[t]; if (null == r) return !1; E[t] = { ...r, textValue: n, richValue: i } }, MESSAGE_END_EDIT: function(e) { let { channelId: t } = e; if (null == t || null == E[t]) return !1; delete E[t], delete I[t] } }) }, 664915: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("581883"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = new Set; class u extends(i = r.default.PersistedStore) { initialize(e) { null != e && (l = new Set(e.expandedFolders)), this.waitFor(a.default) } getState() { return { expandedFolders: Array.from(l) } } getExpandedFolders() { return l } isFolderExpanded(e) { return l.has(e) } } o(u, "displayName", "ExpandedGuildFolderStore"), o(u, "persistKey", "ExpandedGuildFolderStore"), t.default = new u(s.default, { TOGGLE_GUILD_FOLDER_EXPAND: function(e) { let { folderId: t } = e; (l = new Set(l)).has(t) ? l.delete(t) : l.add(t) }, SET_GUILD_FOLDER_EXPANDED: function(e) { let { folderId: t, expanded: n } = e; l = new Set(l), n ? l.add(t) : l.has(t) && l.delete(t) }, USER_SETTINGS_PROTO_UPDATE: function() { let e = a.default.getGuildFolders(); if (null == e) return !1; let t = !1; for (let n of l) !e.some(e => e.folderId === n) && ((l = new Set(l)).delete(n), t = !0); return t }, GUILD_FOLDER_COLLAPSE: function() { if (0 === l.size) return !1; l = new Set } }) }, 828695: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("353926"); class d extends(a = o.default.Store) { initialize() { this.waitFor(u.default) } get hasLoadedExperiments() { return u.default.hasLoadedExperiments } getExperimentBucket(e) { return u.default.getUserExperimentBucket(e) } getEligibleExperiment(e) { return u.default.getUserExperimentDescriptor(e) } getEligibleExperiments() { return u.default.getAllUserExperimentDescriptors() } getRegisteredExperiments() { return u.default.getRegisteredExperiments() } getExperimentOverrides() { return u.default.getAllExperimentOverrideDescriptors() } getOverrideExperimentDescriptor(e) { return u.default.getExperimentOverrideDescriptor(e) } } function _() { return !0 } s = "LegacyExperimentStore", (r = "displayName") in(i = d) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new d(l.default, { LOGOUT: _, LOGIN_SUCCESS: _, CONNECTION_OPEN: _, EXPERIMENTS_FETCH_SUCCESS: _, OVERLAY_INITIALIZE: _, CACHE_LOADED: _, EXPERIMENTS_FETCH_FAILURE: _, EXPERIMENT_OVERRIDE_BUCKET: _ }) }, 272053: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"), n("653041"), n("998459"); var i, r = n("348327"), s = n.n(r), a = n("442837"), o = n("544891"), l = n("570140"), u = n("457330"), d = n("726542"), _ = n("81063"), c = n("70956"), E = n("553795"), I = n("246946"), T = n("981631"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = 1 * c.default.Millis.MINUTE, h = e => "https://youtube.com/watch?v=".concat(e), A = 5 * c.default.Millis.MINUTE, m = /live_user_(.*)-\{width\}/, N = null, p = 0, O = null, C = new Set, R = {}; function g(e, t, n) { return o.HTTP.get({ url: "".concat("https://api.twitch.tv/helix").concat(e), query: t, headers: { "Client-ID": "33kozedd0zs6fbauka98psnc7zwom2s", Authorization: "Bearer ".concat(n) } }) } async function L(e, t) { let n = R[e]; if (null != n) return n; let { body: { data: i } } = await g("/games", { id: e }, t), r = i[0].name; return R[e] = r, r } let v = new class e { start() { !this._started && (this._started = !0, E.default.isFetching() ? u.default.fetch() : this._check()) } stop() { this._started = !1, O = null, p = 0, null != this._nextCheck && clearTimeout(this._nextCheck), l.default.dispatch({ type: "STREAMING_UPDATE", stream: null }) } async _checkTwitch(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; if (e.revoked || null == (t = null != t ? t : e.accessToken)) return null; try { var n, i, r, s, a; let { body: { data: o } } = await g("/streams", { user_id: e.id, first: 1 }, t), l = o[0]; if (null == l || "live" !== l.type) throw Error("no stream"); let { thumbnail_url: u, game_id: c, title: E } = l, I = { large_image: null != u && null !== (i = (0, _.getAssetFromImageURL)(T.PlatformTypes.TWITCH, u)) && void 0 !== i ? i : void 0 }, f = await L(c, t), S = d.default.get(T.PlatformTypes.TWITCH); let h = null !== (s = u, r = null === (a = m.exec(s)) || void 0 === a ? void 0 : a[1]) && void 0 !== r ? r : e.name; return { url: null === (n = S.getPlatformUserUrl) || void 0 === n ? void 0 : n.call(S, { id: e.id, name: h }), name: S.name, assets: I, details: E, state: f } } catch (n) { if (401 === n.status && null == t) return u.default.refreshAccessToken(e.type, e.id).then(t => this._checkTwitch(e, t)).catch(() => null); return null } } async _checkYouTube(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; if (O = null, e.revoked || C.has(e.id)) return null; try { var n; let { body: { items: i } } = await o.HTTP.get({ url: "https://www.googleapis.com/youtube/v3/liveBroadcasts", query: { part: "id,snippet", broadcastStatus: "active", broadcastType: "all" }, headers: { Authorization: "Bearer ".concat(null != t ? t : e.accessToken) }, oldFormErrors: !0 }); if (i.length < 1) throw Error("no stream"); let { id: r, snippet: { title: s, thumbnails: a } } = i[0], l = { large_image: null !== (n = (0, _.getAssetFromImageURL)(T.PlatformTypes.YOUTUBE, a.high.url)) && void 0 !== n ? n : void 0 }; return O = { url: h(r), name: d.default.get(T.PlatformTypes.YOUTUBE).name, details: s, assets: l } } catch (n) { if (401 === n.status && null == t) return u.default.refreshAccessToken(e.type, e.id).then(t => this._checkYouTube(e, t)).catch(() => null); return 403 === n.status && C.add(e.id), null } } _check() { if (!this._started) return; let e = E.default.getAccounts(); if (null == e) return; null != this._nextCheck && clearTimeout(this._nextCheck); let t = [T.PlatformTypes.TWITCH], n = Date.now(); p <= n && (t.push(T.PlatformTypes.YOUTUBE), p = n + A), Promise.allSettled(e.filter(e => t.includes(e.type)).map(e => e.type === T.PlatformTypes.TWITCH ? this._checkTwitch(e) : this._checkYouTube(e))).then(e => { if (this._started) { var t; let n = null === (t = e.find(e => "fulfilled" === e.status && null != e.value)) || void 0 === t ? void 0 : t.value; null == n && null != O && (n = O), l.default.dispatch({ type: "STREAMING_UPDATE", stream: n }) } this._scheduleCheck() }) } _scheduleCheck() { this._started && (this._nextCheck = setTimeout(() => this._check(), S)) } constructor() { f(this, "_nextCheck", void 0), f(this, "_started", void 0), this._started = !1 } }; function D() { I.default.enabled ? v.start() : v.stop() } class M extends(i = a.default.Store) { initialize() { D(), this.waitFor(E.default), this.syncWith([I.default], D) } getStream() { return N } } f(M, "displayName", "ExternalStreamingStore"), t.default = new M(l.default, { STREAMING_UPDATE: function(e) { var t; if (s()(e.stream, N)) return !1; N = null !== (t = e.stream) && void 0 !== t ? t : null }, USER_CONNECTIONS_UPDATE: () => v._check() }) }, 580005: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_NUM_SELECTED_ITEMS: function() { return S } }), n("653041"); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("704907"), u = n("581883"), d = n("592125"), _ = n("430824"), c = n("944486"), E = n("914010"), I = n("981631"), T = n("526761"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = 100, h = new l.default({ computeBonus: () => 100, computeWeight: e => { let t = 0; return 0 === e ? t = 100 : e >= 1 && e < 2 ? t = 70 : e >= 2 && e < 4 ? t = 50 : e >= 4 && e < 7 ? t = 30 : e >= 7 && (t = 10), t }, lookupKey: e => { var t, n; return null !== (n = null !== (t = _.default.getGuild(e)) && void 0 !== t ? t : d.default.getChannel(e)) && void 0 !== n ? n : d.default.getChannel(d.default.getDMFromUserId(e)) }, afterCompute: () => {}, numFrequentlyItems: S, maxSamples: 10 }), A = null, m = null; function N(e) { let { guildId: t, channelId: n } = e, i = !1; return n !== A && (A = null != n ? n : null, null != n && I.ID_REGEX.test(n) && (i = !0, h.track(n), O.pendingUsages.push({ key: n, timestamp: Date.now() }))), t !== m && (m = null != t ? t : null, null != t && I.ID_REGEX.test(t) && (i = !0, h.track(t), O.pendingUsages.push({ key: t, timestamp: Date.now() }))), i } function p() { var e; let t = null === (e = u.default.frecencyWithoutFetchingLatest.guildAndChannelFrecency) || void 0 === e ? void 0 : e.guildAndChannels; if (null == t) return !1; h.overwriteHistory(s().mapValues(t, e => ({ ...e, recentUses: e.recentUses.map(Number).filter(e => e > 0) })), O.pendingUsages) } let O = { pendingUsages: [] }; class C extends(i = a.default.PersistedStore) { initialize(e) { this.waitFor(E.default, c.default), null != e && (e.pendingUsages = e.pendingUsages.filter(e => null != e && I.ID_REGEX.test(e.key)), O = e), this.syncWith([u.default], p) } getState() { return O } hasPendingUsage() { return O.pendingUsages.length > 0 } get frecencyWithoutFetchingLatest() { return h } getFrequentlyWithoutFetchingLatest() { return h.frequently } getScoreWithoutFetchingLatest(e) { var t; return null !== (t = h.getFrecency(e)) && void 0 !== t ? t : 0 } getScoreForDMWithoutFetchingLatest(e) { let t = d.default.getDMFromUserId(e); return null != t ? this.getScoreWithoutFetchingLatest(t) : 0 } getMaxScore() { return 10 * S } getBonusScore() { return 100 } } f(C, "displayName", "FrecencyStore"), f(C, "persistKey", "FrecencyStore"), t.default = new C(o.default, { CHANNEL_SELECT: N, VOICE_CHANNEL_SELECT: N, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: { type: t }, wasSaved: n } = e; return t === T.UserSettingsTypes.FRECENCY_AND_FAVORITES_SETTINGS && !!n && (O.pendingUsages = [], !0) } }) }, 77498: function(e, t, n) { "use strict"; let i; n.r(t), n("47120"); var r, s, a = n("442837"), o = n("433517"), l = n("570140"), u = n("695346"), d = n("973616"), _ = n("358085"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = "GameStoreReportedGames", I = {}, T = {}, f = {}, S = null !== (r = o.Storage.get(E)) && void 0 !== r ? r : {}, h = ""; let A = null; function m(e) { return { id: e.id, name: e.name, executables: e.executables, overlayWarn: e.overlayWarn, overlayCompatibilityHook: e.overlayCompatibilityHook, overlay: e.overlay, hook: e.hook, aliases: e.aliases, supportsOutOfProcessOverlay: e.supportsOutOfProcessOverlay } } function N(e) { let t = e instanceof d.default ? m(e) : e; for (let n of (I[e.id] = t, T[e.name.toLowerCase()] = t, e.aliases)) T[n.toLowerCase()] = t; if ((0, _.isDesktop)()) for (let n of e.executables) f[n.name] = t } class p extends(s = a.default.PersistedStore) { initialize(e) { var t; null != e && (null != e.detectableGamesEtag && (h = e.detectableGamesEtag), null === (t = e.detectableGames) || void 0 === t || t.forEach(e => N(e))) } getState() { return (0, _.isDesktop)() ? { detectableGamesEtag: h, detectableGames: Object.values(I) } : { detectableGamesEtag: "", detectableGames: [] } } get games() { return Object.values(I) } getDetectableGame(e) { return I[e] } getGameByName(e) { if (null == e) return null; let t = e.toLowerCase(); return Object.prototype.hasOwnProperty.call(T, t) ? T[t] : null } isGameInDatabase(e) { return null != this.getGameByName(e.name) || void 0 !== e.nativeProcessObserverId && (2147483648 & e.nativeProcessObserverId) == 0 } get fetching() { return !0 === i } get detectableGamesEtag() { return h } get lastFetched() { return A } getGameByExecutable(e) { return f[e] } getGameByGameData(e) { var t, n; let i; if (null == e.exePath) return null; let r = e.exePath.split("/").pop(), s = e.exePath.split("/").slice(-2).join("/"); if (null != e.name) { if (null != (i = this.getGameByName(e.name)) && null != i.executables) { let e = i.executables.map(e => e.name); if (e.includes(r) || e.includes(s)) return i } else if (null != i) return null } return null !== (n = null !== (t = this.getGameByExecutable(r)) && void 0 !== t ? t : this.getGameByExecutable(s)) && void 0 !== n ? n : i } getGameById(e) { return I[e] } shouldReport(e) { let t = null != this.getGameByName(e), n = null != S[e]; return u.ShowCurrentGame.getSetting() && !i && !(t || n) } markGameReported(e) { S[e] = !0, o.Storage.set(E, S) } } c(p, "displayName", "GameStore"), c(p, "persistKey", "GameStore"), c(p, "migrations", [e => { var t, n; if (null == e) return { detectableGamesEtag: "", detectableGames: [] }; return { detectableGamesEtag: e.detectableGamesEtag, detectableGames: null !== (n = null === (t = e.detectableGames) || void 0 === t ? void 0 : t.map(e => m(new d.default(e)))) && void 0 !== n ? n : [] } }, e => (0, _.isDesktop)() ? e : { detectableGamesEtag: "", detectableGames: [] }]), t.default = new p(l.default, { OVERLAY_INITIALIZE: function(e) { let { detectableApplications: t } = e; for (let e of t) N(e) }, GAMES_DATABASE_FETCH: function() { i = !0 }, GAMES_DATABASE_FETCH_FAIL: function() { i = !1 }, GAMES_DATABASE_UPDATE: function(e) { let { games: t, etag: n } = e; for (let e of (null != n && h !== n && (h = n), t)) N(function(e) { var t, n, i, r, s, a; return { id: e.id, name: e.name, executables: (null !== (t = e.executables) && void 0 !== t ? t : []).map(d.createExecutable), overlay: null !== (n = e.overlay) && void 0 !== n && n, overlayWarn: null !== (i = e.overlay_warn) && void 0 !== i && i, overlayCompatibilityHook: null !== (r = e.overlay_compatibility_hook) && void 0 !== r && r, hook: null === (s = e.hook) || void 0 === s || s, aliases: null !== (a = e.aliases) && void 0 !== a ? a : [], supportsOutOfProcessOverlay: d.default.supportsOutOfProcessOverlay(e.overlay_methods) } }(e)); i = void 0, A = Date.now() } }) }, 486472: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("710845"), c = n("430824"); let E = new _.default("GuildAvailabilityStore"), I = new Set; function T(e) { I = new Set(e.unavailableGuilds), e.unavailableGuilds.length > 0 && E.warn("".concat(e.unavailableGuilds.length, " guilds are unavailable on connection open: ").concat(e.unavailableGuilds)) } function f(e) { if (!I.has(e.guild.id)) return !1; I.delete(e.guild.id), E.info("Guild has become available: ".concat(e.guild.id)) } class S extends(i = u.default.Store) { initialize() { this.waitFor(c.default) } isUnavailable(e) { return null != e && I.has(e) } get totalGuilds() { return l().size(c.default.getGuilds()) + I.size } get totalUnavailableGuilds() { return I.size } get unavailableGuilds() { return Array.from(I) } } a = "GuildAvailabilityStore", (s = "displayName") in(r = S) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new S(d.default, { CONNECTION_OPEN: T, OVERLAY_INITIALIZE: T, GUILD_UNAVAILABLE: function(e) { if (I.has(e.guildId)) return !1; let t = c.default.getGuild(e.guildId), n = "???"; null != t && null != t.name && (n = t.name), E.warn("Guild has gone unavailable: ".concat(e.guildId, " (").concat(n, ")")), I.add(e.guildId) }, GUILD_DELETE: function(e) { !0 !== e.guild.unavailable && I.delete(e.guild.id) }, GUILD_CREATE: f, GUILD_UPDATE: f, GUILD_GEO_RESTRICTED: function(e) { if (!I.has(e.guildId)) return !1; I.delete(e.guildId) } }) }, 324067: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"), n("724458"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("740504"), d = n("853856"), _ = n("314897"), c = n("592125"), E = n("984933"), I = n("430824"), T = n("981631"); let f = null, S = {}, h = null; function A() { return { _categories: [], null: [] } } let m = A(); function N(e, t) { e.index = t } function p(e) { let t = E.default.getChannels(e), n = A(), i = e => { var t; let { channel: i } = e; (null !== (t = n[null != i.parent_id ? i.parent_id : "null"]) && void 0 !== t ? t : n.null).push({ channel: i, index: -1 }) }; return t[T.ChannelTypes.GUILD_CATEGORY].forEach(e => { let { channel: t } = e; n._categories.push({ channel: t, index: -1 }), n[t.id] = [] }), t[0, E.GUILD_SELECTABLE_CHANNELS_KEY].forEach(i), t[0, E.GUILD_VOCAL_CHANNELS_KEY].forEach(i), (0, u.default)(n._categories, n).forEach(N), S[e] = n, n } function O() { S = {}, null != f && p(f) } function C(e) { let { guild: { id: t } } = e; S[t] = void 0, f === t && p(t) } function R(e) { let { channel: { guild_id: t } } = e; if (null == t) return !1; S[t] = void 0, f === t && p(t) } function g(e) { let { guildId: t } = e; S[t] = void 0, t === f && p(t) } function L(e, t) { if (h = t, null == e || null == e.getGuildId()) return !1; let n = e.getGuildId(); return null != n && (S[n] = void 0, n === f && p(n), !0) } function v() { p(T.FAVORITES) } class D extends(i = o.default.Store) { initialize() { this.waitFor(E.default, I.default, _.default, c.default, d.default), this.syncWith([d.default], v) } getCategories(e) { return null != e ? function(e) { let t = S[e]; return null != t ? t : p(e) }(e) : m } } a = "GuildCategoryStore", (s = "displayName") in(r = D) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new D(l.default, { CHANNEL_SELECT: function(e) { let { guildId: t } = e; if (f = null != t ? t : null, null == t || null != S[t]) return !1; p(t) }, CONNECTION_OPEN: O, OVERLAY_INITIALIZE: O, CACHE_LOADED_LAZY: O, GUILD_CREATE: C, GUILD_UPDATE: C, GUILD_DELETE: function(e) { let { guild: { id: t } } = e; delete S[t] }, CHANNEL_CREATE: R, CHANNEL_DELETE: R, CHANNEL_UPDATES: function(e) { let { channels: t } = e, n = !1; for (let { guild_id: e } of t) null != e && (S[e] = void 0, n = !0, f === e && p(e)); return n }, GUILD_MEMBER_UPDATE: function(e) { let { guildId: t, user: n } = e; if (_.default.getId() !== n.id) return !1; S[t] = void 0, t === f && p(t) }, CURRENT_USER_UPDATE: function() { if (null == f) return !1; p(f) }, GUILD_ROLE_CREATE: g, GUILD_ROLE_UPDATE: g, GUILD_ROLE_DELETE: g, IMPERSONATE_UPDATE: g, IMPERSONATE_STOP: g, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; return null == t && null != h ? L(c.default.getChannel(h), null) : L(c.default.getChannel(t), t) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { let { channelId: n, sessionId: i } = t; return _.default.getSessionId() !== i ? e : L(c.default.getChannel(n), n) || e }, !1) } }) }, 984933: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GUILD_SELECTABLE_CHANNELS_KEY: function() { return L }, GUILD_VOCAL_CHANNELS_KEY: function() { return v } }), n("653041"), n("47120"), n("724458"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("149765"), d = n("442837"), _ = n("570140"), c = n("430198"), E = n("933557"), I = n("853856"), T = n("846787"), f = n("131704"), S = n("700785"), h = n("314897"), A = n("592125"), m = n("271383"), N = n("430824"), p = n("496675"), O = n("699516"), C = n("594174"), R = n("981631"), g = n("689938"); let L = "SELECTABLE", v = "VOCAL", D = null, M = {}, y = {}, P = {}, U = null, b = {}, G = { comparator: -1, channel: (0, f.createChannelRecord)({ id: R.NULL_STRING_CHANNEL_ID, type: R.ChannelTypes.GUILD_CATEGORY, name: g.default.Messages.UNCATEGORIZED }) }, w = V(R.NULL_STRING_GUILD_ID), k = [], B = {}; function V(e) { return { id: e, [L]: [], [v]: [], [R.ChannelTypes.GUILD_CATEGORY]: [G], count: 0 } } function x(e, t) { let { comparator: n } = e, { comparator: i } = t; return n - i } function F() { M = {}, b = {}, y = {}, P = {}, null != D && H(D) } function H(e) { var t; let n = V(e); return M[e] = n, b[e] = [], ! function(e) { let { id: t } = e, n = function(e) { if (e === R.FAVORITES) return function() { let e = {}, t = I.default.getFavoriteChannels(); for (let n in t) { let i = A.default.getChannel(n); if (null == i) continue; let r = t[n], s = (0, T.createFavoritesChannelRecord)(t, r, i); e[n] = { channel: s, comparator: s.position } } return e }(); let t = {}, n = A.default.getMutableGuildChannelsForGuild(e); for (let e in n) t[e] = { channel: n[e], comparator: n[e].position }; return t }(t); l().forEach(n, n => { var i; let r = n.channel; if (e.count += 1, f.GUILD_NON_CATEGORY_CHANNEL_TYPES.has(r.type) && !p.default.can(R.Permissions.VIEW_CHANNEL, r) && !c.default.isChannelGated(r.guild_id, r.id) && r.id !== U) return; let s = (i = r.type, (0, f.isGuildSelectableChannelType)(i) ? L : (0, f.isGuildVocalChannelType)(i) ? v : i); r.type === R.ChannelTypes.GUILD_DIRECTORY && (null == b[t] && (b[t] = []), b[t].push(n)), null != e[s] && e[s].push(n) }) }(n), (t = n)[L].sort(x), t[v].sort(x), t[R.ChannelTypes.GUILD_CATEGORY].sort(x), function(e) { let t = y[e.id] = {}, n = {}; e[L].forEach(e => { let { channel: i } = e, r = (0, E.computeChannelName)(i, C.default, O.default), s = Object.prototype.hasOwnProperty.call(n, r) ? n[r] : null; null == s ? n[r] = 1 : (n[r] = s + 1, r += "~".concat(s)), t[i.id] = { id: i.id, name: r } }) }(n), function(e) { (function(e, t) { let n = N.default.getGuild(t); if (null != n && K(e, n)) return !0; let i = M[t]; null == i && (i = H(t)); let { [L]: r, [v]: s } = i; for (let { channel: t } of r) if (K(e, t)) return !0; for (let { channel: t } of s) if (K(e, t)) return !0; return !1 })(C.default.getCurrentUser(), e) ? P[e] = !0: delete P[e] }(e), n } function Y(e) { let { guild: { id: t } } = e; if (null == t) return !1; M[t] = void 0, D === t && H(t) } function j(e) { let { channel: { guild_id: t } } = e; if (null == t) return !1; M[t] = void 0, t === D && H(t) } function W(e) { let { guildId: t } = e; M[t] = void 0, t === D && H(t) } function K(e, t) { return u.hasAny(S.computePermissions({ user: e, context: t, checkElevated: !1 }), R.ElevatedPermissions) } function z(e, t) { var n; U = t; let i = null !== (n = null == e ? void 0 : e.getGuildId()) && void 0 !== n ? n : null; if (null == i) return !1; M[i] = void 0, i === D && H(i) } function Z() { H(R.FAVORITES) } class X extends(i = d.default.Store) { initialize() { this.waitFor(N.default, m.default, A.default, p.default, h.default, c.default, I.default), this.syncWith([I.default], Z) } getAllGuilds() { return M } getChannels(e) { var t; let n; return null != e ? (null == (n = M[t = e]) && (n = H(t)), n) : w } getFirstChannelOfType(e, t, n) { let i = this.getChannels(e)[n].find(t); return null != i ? i.channel : null } getFirstChannel(e, t) { var n; let i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return null !== (n = this.getFirstChannelOfType(e, t, L)) && void 0 !== n ? n : i ? this.getFirstChannelOfType(e, t, v) : null } getDefaultChannel(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : R.Permissions.VIEW_CHANNEL; return this.getFirstChannel(e, e => p.default.can(n, e.channel), t) } getSFWDefaultChannel(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : R.Permissions.VIEW_CHANNEL; return this.getFirstChannel(e, e => p.default.can(n, e.channel) && !e.channel.nsfw, t) } getSelectableChannelIds(e) { return this.getChannels(e)[L].map(e => { let { channel: t } = e; return t.id }) } getSelectableChannels(e) { return this.getChannels(e)[L] } getVocalChannelIds(e) { return this.getChannels(e)[v].map(e => { let { channel: t } = e; return t.id }) } getDirectoryChannelIds(e) { var t, n; return null !== (n = null === (t = b[e]) || void 0 === t ? void 0 : t.map(e => { let { channel: t } = e; return t.id })) && void 0 !== n ? n : k } hasSelectableChannel(e, t) { return this.getSelectableChannelIds(e).includes(t) } hasElevatedPermissions(e) { return P[e] || !1 } hasChannels(e) { return this.getChannels(e).count > 0 } hasCategories(e) { return this.getChannels(e)[R.ChannelTypes.GUILD_CATEGORY].length > 1 } getTextChannelNameDisambiguations(e) { var t; return null != e && null !== (t = y[e]) && void 0 !== t ? t : B } } a = "GuildChannelStore", (s = "displayName") in(r = X) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new X(_.default, { BACKGROUND_SYNC: F, CHANNEL_SELECT: function(e) { let { guildId: t } = e; if (D = null != t ? t : null, null == t || null != M[t]) return !1; H(t) }, CONNECTION_OPEN: F, OVERLAY_INITIALIZE: F, CACHE_LOADED_LAZY: F, GUILD_CREATE: Y, GUILD_UPDATE: Y, GUILD_DELETE: function(e) { let { guild: { id: t } } = e; return delete M[t], delete y[t], delete P[t], delete b[t], !0 }, GUILD_MEMBER_UPDATE: function(e) { let { guildId: t, user: n } = e; if (h.default.getId() !== n.id) return !1; M[t] = void 0, t === D && H(t) }, CHANNEL_CREATE: j, CHANNEL_DELETE: j, CHANNEL_UPDATES: function(e) { let { channels: t } = e, n = !1; for (let e of t) { let { guild_id: t } = e; null != t && (M[t] = void 0, n = !0, D === t && H(t)) } return n }, GUILD_ROLE_CREATE: W, GUILD_ROLE_UPDATE: W, GUILD_ROLE_DELETE: W, IMPERSONATE_UPDATE: W, IMPERSONATE_STOP: W, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; return null == t && null != U ? z(A.default.getChannel(U), null) : z(A.default.getChannel(t), t) }, VOICE_CHANNEL_STATUS_UPDATE: function(e) { let t = A.default.getBasicChannel(e.id); null != t && null != t.guild_id && H(t.guild_id) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { let { channelId: n, sessionId: i } = t; return h.default.getSessionId() !== i ? e : z(A.default.getChannel(n), n) || e }, !1) } }) }, 683301: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EMPTY_DISCOVERABLE_GUILDS_SECTION: function() { return m } }), n("47120"), n("653041"); var i, r, s, a, o, l, u = n("512722"), d = n.n(u), _ = n("392711"), c = n.n(_), E = n("442837"); n("902704"); var I = n("570140"), T = n("117496"), f = n("314897"), S = n("230307"), h = n("981631"), A = n("731455"); (s = i || (i = {})).UNSET = "unset", s.FETCHING = "fetching", s.FAILED = "failed", s.SUCCEEDED = "succeeded"; let m = { guilds: [], total: 0, offset: 0, limit: 0, loading: !1, isFirstLoad: !0 }, N = { [h.GuildDiscoverySections.FEATURED]: { ...m }, [h.GuildDiscoverySections.GAMES_YOU_PLAY]: { ...m }, [h.GuildDiscoverySections.MISC]: { ...m }, [h.GuildDiscoverySections.SEARCH]: {}, [A.DISCOVERY_ALL_CATEGORIES_ID]: { ...m } }, p = "", O = !1, C = "unset", R = null, g = A.DISCOVERY_ALL_CATEGORIES_ID, L = A.DISCOVERY_ALL_CATEGORIES_ID, v = null, D = [], M = (0, T.makeAnalyticsID)(), y = !1; function P(e) { return { id: e.id, name: e.name, description: e.description, splash: e.splash, banner: e.banner, icon: e.icon, features: new Set(e.features), presenceCount: e.approximate_presence_count, memberCount: e.approximate_member_count, premiumSubscriptionCount: e.premium_subscription_count, preferredLocale: e.preferred_locale, discoverySplash: e.discovery_splash, emojis: e.emojis, emojiCount: e.emoji_count, keywords: e.keywords } } class U extends(r = E.default.Store) { initialize() { this.waitFor(f.default) } isFetching() { return O || null == R || null == S.default.lastFetched } isFetchingSearch() { return "fetching" === C } hasSearchError() { return "failed" === C } getDiscoverableGuilds() { return N } getCurrentCategoryId() { return g } getCurrentHomepageCategoryId() { return L } getSearchIndex() { return v } getMostRecentQuery() { return p } getTopCategoryCounts(e) { var t; return null === (t = N[h.GuildDiscoverySections.SEARCH][e]) || void 0 === t ? void 0 : t.resultCounts } getSeenGuildIds() { return D } getLoadId() { return M } getIsReady() { return y } } l = "GuildDiscoveryStore", (o = "displayName") in(a = U) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new U(I.default, { GUILD_DISCOVERY_SEARCH_INIT: function(e) { let { index: t } = e; v = t }, GUILD_DISCOVERY_FETCH_START: function(e) { let { section: t } = e; O = !0, N = { ...N, [t]: { ...N[t], loading: !0 } } }, GUILD_DISCOVERY_FETCH_SUCCESS: function(e) { let { guilds: t, section: n, total: i, offset: r, limit: s } = e; O = !1, R = Date.now(), M = (0, T.makeAnalyticsID)(); let a = c().map(t, P); N = { ...N, [n]: { guilds: a, offset: r, limit: s, total: i, loading: !1, isFirstLoad: !1 } } }, GUILD_DISCOVERY_FETCH_FAILURE: function(e) { let { section: t } = e; O = !1, N = { ...N, [t]: { ...m, loading: !1 } } }, GUILD_DISCOVERY_POPULAR_FETCH_START: function(e) { let { categoryId: t } = e; O = !0, N = { ...N, [t]: { ...m, ...N[t], loading: !0 } } }, GUILD_DISCOVERY_POPULAR_FETCH_SUCCESS: function(e) { let { categoryId: t, guilds: n } = e; O = !1, R = Date.now(); let i = c().map(n, P); N = { ...N, [t]: { ...m, guilds: i, loading: !1, isFirstLoad: !1 } } }, GUILD_DISCOVERY_POPULAR_FETCH_FAILURE: function(e) { let { categoryId: t } = e; O = !1, N = { ...N, [t]: { ...m, loading: !1 } } }, GUILD_DISCOVERY_SEARCH_FETCH_START: function(e) { var t; let { section: n, query: i, categoryId: r } = e; d()("search" === n, "This action only supports search it seems"), C = "fetching", N = { ...N, [n]: { ...N[n], [i]: { ...N[n][i], [r]: { ...null === (t = N[n][i]) || void 0 === t ? void 0 : t[r], loading: !0 } } } }, p = i }, GUILD_DISCOVERY_SEARCH_FETCH_SUCCESS: function(e) { var t; let { section: n, guilds: i, total: r, offset: s, limit: a, query: o, categoryId: l } = e; d()("search" === n, "This action only supports search it seems"); let u = i.map(P); N = { ...N, [n]: { ...N[n], [o]: { ...N[n][o], [l]: { ...null === (t = N[n][o]) || void 0 === t ? void 0 : t[l], guilds: u, total: r, offset: s, limit: a, loading: !1 } } } }, p = o, C = "succeeded" }, GUILD_DISCOVERY_SEARCH_FETCH_FAILURE: function(e) { var t; let { section: n, query: i, categoryId: r } = e; d()("search" === n, "This action only supports search it seems"), C = "failed", N = { ...N, [n]: { ...N[n], [i]: { ...N[n][i], [r]: { ...null === (t = N[n][i]) || void 0 === t ? void 0 : t[r], loading: !1 } } } } }, GUILD_DISCOVERY_SELECT_CATEGORY: function(e) { let { categoryId: t, isHomepage: n } = e; g = t, n && (L = t) }, GUILD_DISCOVERY_CLEAR_SEARCH: function() { p = "" }, GUILD_DISCOVERY_SEARCH_UPDATE_COUNTS: function(e) { let { nbHits: t, facets: n, query: i } = e, r = []; if (null != n) { var s; let e = null !== (s = n["categories.id"]) && void 0 !== s ? s : {}; delete e[A.DEFAULT_DISCOVERY_CATEGORY_ID], r = Object.entries(e).map(e => { let [t, n] = e; return [parseInt(t, 10), n] }).sort((e, t) => t[1] - e[1]).slice(0, 7) } N = { ...N, [h.GuildDiscoverySections.SEARCH]: { ...N[h.GuildDiscoverySections.SEARCH], [i]: { ...N[h.GuildDiscoverySections.SEARCH][i], resultCounts: [ [A.DISCOVERY_ALL_CATEGORIES_ID, Math.min(A.MAX_ALGOLIA_PAGINATOR_RESULTS, t)], ...r ] } } } }, GUILD_DISCOVERY_SEARCH_COUNTS_FAIL: function(e) { let { query: t } = e; N = { ...N, [h.GuildDiscoverySections.SEARCH]: { ...N[h.GuildDiscoverySections.SEARCH], [t]: { ...N[h.GuildDiscoverySections.SEARCH][t], resultCounts: null } } } }, GUILD_DISCOVERY_GUILD_SEEN: function(e) { let { guildId: t } = e; !D.includes(t) && D.push(t) }, GUILD_DISCOVERY_CLEAR_SEEN_GUILDS: function() { D = [] }, GUILD_DISCOVERY_CATEGORY_FETCH_SUCCESS: function(e) { let { forClanDiscovery: t } = e; t && (g = A.CategoryId.Clans, L = A.CategoryId.Clans, y = !0) } }) }, 650774: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = {}, d = {}; function _(e) { let { invite: t } = e, { guild: n, approximate_presence_count: i } = t; if ((null == n ? void 0 : n.id) == null || null == i) return !1; d[n.id] = i } class c extends(a = o.default.Store) { getMemberCounts() { return u } getMemberCount(e) { return null != e ? u[e] : null } getOnlineCount(e) { return null != e ? d[e] : null } } s = "GuildMemberCountStore", (r = "displayName") in(i = c) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new c(l.default, { CONNECTION_OPEN: function(e) { let { guilds: t } = e; u = {}, t.forEach(e => { u[e.id] = e.member_count }) }, OVERLAY_INITIALIZE: function(e) { u = { ...e.guildMemberCounts } }, GUILD_CREATE: function(e) { let { guild: t } = e; u[t.id] = t.member_count }, GUILD_DELETE: function(e) { let { guild: t } = e; if (null == u[t.id] && null == d[t.id]) return !1; delete u[t.id], delete d[t.id] }, GUILD_MEMBER_LIST_UPDATE: function(e) { let { guildId: t, memberCount: n, onlineCount: i } = e, r = !1; return u[t] !== n && (u[t] = n, r = !0), d[t] !== i && (d[t] = i, r = !0), r }, INVITE_ACCEPT_SUCCESS: _, INVITE_RESOLVE_SUCCESS: _, ONLINE_GUILD_MEMBER_COUNT_UPDATE: function(e) { let { guildId: t, count: n } = e; if (null == t || null == n) return !1; d[t] = n } }) }, 720202: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("601635"), c = n("900489"), E = n("592125"), I = n("271383"); let T = new _.default(I.default.isMember, (e, t) => { d.default.dispatch({ type: "GUILD_MEMBERS_REQUEST", guildIds: [e], userIds: t }) }); function f() { T.reset() } function S(e, t) { return T.request(e, t), !1 } function h(e, t) { return t.forEach(t => { let { author: n, mentions: i } = t; null != n && S(e, n.id), null == i || i.forEach(t => S(e, t.id)) }), !1 } function A(e) { let { channelId: t, messages: n } = e, i = E.default.getChannel(t); return null != i && null != i.guild_id && h(i.guild_id, n) } function m(e) { let { guildId: t, messages: n } = e; return null != t && h(t, l().flatten(n)) } class N extends(i = u.default.Store) { initialize() { this.waitFor(E.default, I.default) } requestMember(e, t) { S(e, t) } } a = "GuildMemberRequesterStore", (s = "displayName") in(r = N) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new N(d.default, { CONNECTION_CLOSED: f, CONNECTION_OPEN: f, CONNECTION_RESUMED: function() { return T.requestUnacknowledged(), !1 }, GUILD_MEMBERS_CHUNK_BATCH: function(e) { let { chunks: t } = e; for (let e of t) e.members.forEach(t => { T.acknowledge(e.guildId, t.user.id) }), null != e.notFound && e.notFound.forEach(t => T.acknowledge(e.guildId, t)); return !1 }, SEARCH_FINISH: m, MOD_VIEW_SEARCH_FINISH: m, LOCAL_MESSAGES_LOADED: A, LOAD_MESSAGES_SUCCESS: A, LOAD_MESSAGES_AROUND_SUCCESS: A, LOAD_PINNED_MESSAGES_SUCCESS: A, LOAD_RECENT_MENTIONS_SUCCESS: A, GUILD_FEED_FETCH_SUCCESS: function(e) { let { guildId: t, data: n } = e; return h(t, (0, c.getMessagesFromGuildFeedFetch)(n)) } }) }, 271383: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getGuildIdFromCommunicationDisabledUserKey: function() { return F }, getUserIdFromCommunicationDisabledUserKey: function() { return x } }), n("47120"), n("789020"), n("653041"); var i, r, s, a, o, l, u = n("392711"), d = n.n(u), _ = n("866442"), c = n("442837"), E = n("570140"), I = n("710845"), T = n("69882"), f = n("134049"), S = n("160404"), h = n("630388"), A = n("823379"), m = n("709054"), N = n("314897"), p = n("592125"), O = n("430824"), C = n("372897"); let R = new I.default("GuildMemberStore"), g = {}, L = {}, v = {}, D = !1, M = 0, y = 0, P = {}, U = {}, b = { added: [], removed: [] }; function G(e, t) { if (null == t.communicationDisabledUntil || !(0, T.isMemberCommunicationDisabled)(t)) return w(e, t.userId); let n = V(e, t.userId); v[n] !== t.communicationDisabledUntil && (0, T.isMemberCommunicationDisabled)(t) && (v[n] = t.communicationDisabledUntil, k(n)) } function w(e, t) { if (null != t) { let n = V(e, t); null != v[n] && k(n), B(V(e, t)) } else for (let t in v) F(t) === e && (k(t), B(t)) } function k(e) { M += 1, P[e] = M } function B(e) { x(e) === N.default.getId() && (0, f.clearCommunicationDisabledNotice)(F(e)), delete v[e] } function V(e, t) { let n = []; return n[0] = e, n[1] = t, n.join("-") } function x(e) { return e.split("-")[1] } function F(e) { return e.split("-")[0] } function H(e, t) { let n, i, r, s, a; if (0 === t.length) return { colorString: void 0, colorRoleId: void 0, hoistRoleId: void 0, iconRoleId: void 0, highestRoleId: void 0 }; for (let n of t) { let t = e[n]; if (null != t)(null == a || t.position > a.position) && (a = t), t.color > 0 && (null == i || t.position > i.position) && (i = t), t.hoist && (null == r || t.position > r.position) && (r = t), (null != t.icon || null != t.unicodeEmoji) && (null == s || t.position > s.position) && (s = t) } if (null != i) { var o; null == i.colorString && i.color > 0 && (i.colorString = (0, _.int2hex)(i.color)), n = null !== (o = i.colorString) && void 0 !== o ? o : void 0 } return { colorString: n, colorRoleId: null == i ? void 0 : i.id, iconRoleId: null == s ? void 0 : s.id, hoistRoleId: null == r ? void 0 : r.id, highestRoleId: null == a ? void 0 : a.id } } function Y(e) { let { userId: t, nick: n, guildId: i, avatar: r, avatarDecoration: s, guildRoles: a, roles: o, premiumSince: l, isPending: u, joinedAt: d, communicationDisabledUntil: _, unusualDMActivityUntil: c, fullProfileLoadedTimestamp: E, flags: I } = e, { colorString: T, colorRoleId: f, iconRoleId: h, hoistRoleId: A, highestRoleId: p } = H(a, o), O = { userId: t, nick: n, guildId: i, avatar: r, avatarDecoration: s, roles: o, colorString: T, colorRoleId: f, iconRoleId: h, hoistRoleId: A, highestRoleId: p, premiumSince: l, isPending: u, joinedAt: d, communicationDisabledUntil: _, unusualDMActivityUntil: c, fullProfileLoadedTimestamp: E, flags: I }; if (null == g[i]) return O; if (t === N.default.getId()) { if (S.default.isViewingRoles(i) || S.default.isFullServerPreview(i)) { let e = S.default.getViewingRoles(i); L[i] = { ...O, ...S.default.getMemberOptions(i), roles: null != e ? m.default.keys(e) : [] } } else null != L[i] && delete L[i] } return O }(s = i || (i = {}))[s.GUILD = 0] = "GUILD", s[s.USER = 1] = "USER"; function j(e) { e.guilds.forEach(e => { Z(e) }) } function W(e) { var t; let { guildId: n, user: i, nick: r, avatar: s, avatarDecoration: a, roles: o, premiumSince: l, isPending: u, joinedAt: d, communicationDisabledUntil: _, unusualDMActivityUntil: c, flags: E } = e, I = g[n]; if (null == I) return !1; let T = O.default.getGuild(n); if (null == T) return R.warn("Guild ".concat(n, " not found during GUILD_MEMBER_UPDATE.")), !1; I[i.id] = Y({ userId: i.id, nick: r, guildId: n, avatar: s, avatarDecoration: null != a ? { asset: a.asset, skuId: a.sku_id } : void 0, guildRoles: O.default.getRoles(T.id), roles: o, premiumSince: l, isPending: u, joinedAt: d, communicationDisabledUntil: _, unusualDMActivityUntil: c, fullProfileLoadedTimestamp: null === (t = I[i.id]) || void 0 === t ? void 0 : t.fullProfileLoadedTimestamp, flags: E }), G(n, I[i.id]) } function K(e, t) { let n = g[e]; if (null == n) return !1; let i = O.default.getGuild(e); return null == i ? (R.warn("Guild ".concat(e, " not found during batchUpdateGuildMembers.")), !1) : (t.forEach(t => { var r; let s = n[t.user.id]; n[t.user.id] = Y({ userId: t.user.id, nick: t.nick, guildId: e, avatar: t.avatar, avatarDecoration: z(t), guildRoles: O.default.getRoles(i.id), roles: t.roles, premiumSince: t.premium_since, isPending: t.pending, joinedAt: t.joined_at, communicationDisabledUntil: t.communication_disabled_until, flags: t.flags, fullProfileLoadedTimestamp: null == s ? void 0 : s.fullProfileLoadedTimestamp, unusualDMActivityUntil: null !== (r = t.unusual_dm_activity_until) && void 0 !== r ? r : null == s ? void 0 : s.unusualDMActivityUntil }), G(e, n[t.user.id]) }), y++, !0) } function z(e) { return null != e.avatar_decoration_data ? { asset: e.avatar_decoration_data.asset, skuId: e.avatar_decoration_data.sku_id } : void 0 } function Z(e) { let t = e.id; !(t in g) && (g[e.id] = {}); let n = O.default.getGuild(t); if (null == n) return !1; let i = g[t]; for (let s of e.members) { var r; let a = s.user.id, o = i[a], l = Y({ userId: a, nick: s.nick, guildId: e.id, avatar: s.avatar, avatarDecoration: z(s), guildRoles: O.default.getRoles(n.id), roles: s.roles, premiumSince: s.premium_since, isPending: s.pending, joinedAt: s.joined_at, communicationDisabledUntil: s.communication_disabled_until, fullProfileLoadedTimestamp: null == o ? void 0 : o.fullProfileLoadedTimestamp, flags: s.flags, unusualDMActivityUntil: null !== (r = s.unusual_dm_activity_until) && void 0 !== r ? r : null == o ? void 0 : o.unusualDMActivityUntil }); i[a] = l, G(t, l) } return !0 } function X(e) { let t = g[e.guildId]; if (null == t) return !1; let n = O.default.getGuild(e.guildId); if (null == n) return R.warn("Guild ".concat(e.guildId, " not found during ").concat(e.type, ".")), !1; for (let i of m.default.keys(t)) { let r = t[i]; (null != r.roles && r.roles.length > 0 || null != r.colorString || null != r.hoistRoleId) && (t[i] = Y({ userId: i, nick: r.nick, guildId: e.guildId, avatar: r.avatar, avatarDecoration: r.avatarDecoration, guildRoles: O.default.getRoles(n.id), roles: r.roles, premiumSince: r.premiumSince, isPending: r.isPending, joinedAt: r.joinedAt, flags: r.flags, fullProfileLoadedTimestamp: null == r ? void 0 : r.fullProfileLoadedTimestamp }), G(e.guildId, t[i])) } } function Q(e) { let { guildId: t } = e, n = g[t]; if (null == n) return !1; let i = O.default.getGuild(t); if (null == i) return R.warn("Guild ".concat(t, " not found during IMPERSONATE_UPDATE.")), !1; let r = N.default.getId(), s = n[r]; n[r] = Y({ userId: r, nick: s.nick, guildId: t, avatar: s.avatar, avatarDecoration: s.avatarDecoration, guildRoles: O.default.getRoles(i.id), roles: s.roles, premiumSince: s.premiumSince, isPending: s.isPending, joinedAt: s.joinedAt, communicationDisabledUntil: s.communicationDisabledUntil, fullProfileLoadedTimestamp: s.fullProfileLoadedTimestamp, flags: s.flags }) } function q(e) { var t; let { message: n, guildId: i } = e; (null === (t = n.resolved) || void 0 === t ? void 0 : t.members) != null && null != i && Z({ id: i, members: Object.entries(n.resolved.members).map(e => { var t, i; let [r, s] = e, a = null === (i = n.resolved) || void 0 === i ? void 0 : null === (t = i.users) || void 0 === t ? void 0 : t[r]; if (null != a) return { ...s, user: a } }).filter(e => null != e) }) } function J(e) { let { messages: t } = e; t.forEach(e => (function(e) { var t; if ((null === (t = e.resolved) || void 0 === t ? void 0 : t.members) == null) return; let n = p.default.getChannel(e.channel_id); !(null == n || n.isPrivate()) && Z({ id: n.guild_id, members: Object.entries(e.resolved.members).map(t => { var n, i; let [r, s] = t, a = null === (i = e.resolved) || void 0 === i ? void 0 : null === (n = i.users) || void 0 === n ? void 0 : n[r]; if (null != a) return { ...s, user: a } }).filter(e => null != e) }) })(e)) } function $(e) { let { messages: t } = e; t.forEach(e => J({ messages: e })) } class ee extends(r = c.default.Store) { initialize() { this.waitFor(O.default, N.default, S.default) } getMutableAllGuildsAndMembers() { return g } memberOf(e) { return d()(g).toPairs().filter(t => { let [n, i] = t; return null != i[e] }).map(e => { let [t] = e; return t }).value() } getNicknameGuildsMapping(e) { let t = {}; for (let i in g) { var n; let r = null === (n = g[i][e]) || void 0 === n ? void 0 : n.nick; null != r && (!Object.prototype.hasOwnProperty.call(t, r) && (t[r] = []), t[r].push(i)) } return t } getNicknames(e) { return Object.keys(this.getNicknameGuildsMapping(e)) } isMember(e, t) { if (null == e || null == t) return !1; let n = g[e]; return null != n && null != n[t] } isGuestOrLurker(e, t) { var n; if (null == e || null == t) return !1; let i = g[e]; return null != i && (null === (n = i[t]) || void 0 === n ? void 0 : n.joinedAt) == null } isCurrentUserGuest(e) { if (null == e) return !1; let t = N.default.getId(), n = g[e]; if (null == n || null == n[t]) return !1; let i = n[t].flags; return null != i && (0, h.hasFlag)(i, C.GuildMemberFlags.IS_GUEST) } getMemberIds(e) { if (null == e) return []; let t = g[e]; return null == t ? [] : m.default.keys(t) } getMembers(e) { if (null == e) return []; let t = g[e]; return null == t ? [] : Object.values(t) } getTrueMember(e, t) { let n = g[e]; return null != n ? n[t] : null } getMember(e, t) { let n = this.getTrueMember(e, t); if (null != n && t === N.default.getId() && (S.default.isViewingRoles(e) || S.default.isFullServerPreview(e))) { var i; return null !== (i = L[e]) && void 0 !== i ? i : n } return n } getSelfMember(e) { return this.getMember(e, N.default.getId()) } getNick(e, t) { if (null == e || null == t) return null; let n = this.getMember(e, t); return null != n ? n.nick : null } getCommunicationDisabledUserMap() { return v } getCommunicationDisabledVersion() { return M } getPendingRoleUpdates(e) { var t; return null !== (t = U[e]) && void 0 !== t ? t : b } getMemberRoleWithPendingUpdates(e, t) { var n, i; let r = null !== (i = null === (n = this.getMember(e, t)) || void 0 === n ? void 0 : n.roles) && void 0 !== i ? i : [], s = U[e]; return null == s ? r : d().difference(d().union(r, s.added), s.removed) } getMemberVersion() { return y } } l = "GuildMemberStore", (o = "displayName") in(a = ee) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new ee(E.default, { CONNECTION_OPEN: function(e) { D ? D = !1 : g = {}, v = {}, j(e) }, CONNECTION_OPEN_SUPPLEMENTAL: function(e) { j(e) }, OVERLAY_INITIALIZE: function(e) { let { guildMembers: t } = e; g = { ...t } }, CACHE_LOADED: function(e) { let { guildMembers: t } = e; D = !0, g = { ...t } }, GUILD_CREATE: function(e) { let { guild: t } = e; return Z(t) }, GUILD_DELETE: function(e) { let { guild: t } = e; delete g[t.id], w(t.id) }, GUILD_MEMBER_ADD: W, GUILD_MEMBER_UPDATE: W, GUILD_MEMBER_UPDATE_LOCAL: function(e) { var t, n, i; let { guildId: r, roles: s, addedRoleIds: a, removedRoleIds: o, flags: l } = e, u = N.default.getId(), _ = g[r], c = null != _ ? _[u] : null; if (null == c) return !1; let E = O.default.getGuild(r); if (null == E) return !1; let I = null !== (t = U[r]) && void 0 !== t ? t : {}; U[r] = { added: d().difference(d().union(null !== (n = I.added) && void 0 !== n ? n : [], a), null != o ? o : []), removed: d().difference(d().union(null !== (i = I.removed) && void 0 !== i ? i : [], o), null != a ? a : []) }, _[u] = Y({ userId: u, guildId: r, nick: c.nick, avatar: c.avatar, avatarDecoration: c.avatarDecoration, guildRoles: O.default.getRoles(E.id), roles: null != s ? s : c.roles, premiumSince: c.premiumSince, isPending: c.isPending, joinedAt: c.joinedAt, flags: null != l ? l : c.flags, fullProfileLoadedTimestamp: c.fullProfileLoadedTimestamp }) }, GUILD_MEMBERS_CHUNK_BATCH: function(e) { let t = !1; for (let n of e.chunks) t = K(n.guildId, n.members) || t; return t }, GUILD_MEMBER_REMOVE: function(e) { let { guildId: t, user: n } = e, i = g[t]; if (null == i || null == i[n.id]) return !1; delete i[n.id], w(t, n.id), y++ }, THREAD_MEMBER_LIST_UPDATE: function(e) { let { guildId: t, members: n } = e; return K(t, n.map(e => e.member).filter(A.isNotNullish)) }, THREAD_MEMBERS_UPDATE: function(e) { let { guildId: t, addedMembers: n } = e; return null != n && K(t, n.map(e => e.member).filter(A.isNotNullish)) }, LOAD_ARCHIVED_THREADS_SUCCESS: function(e) { let { guildId: t, owners: n } = e; return K(t, n) }, LOAD_FORUM_POSTS: function(e) { let { guildId: t, threads: n } = e; return K(t, Object.values(n).map(e => e.owner).filter(A.isNotNullish)) }, GUILD_ROLE_UPDATE: X, GUILD_ROLE_DELETE: X, GUILD_ROLE_MEMBER_REMOVE: function(e) { let { guildId: t, userId: n, roleId: i } = e, r = g[t]; if (null == r) return !1; let s = O.default.getGuild(t); if (null == s) return R.warn("Guild ".concat(t, " not found during GUILD_MEMBER_UPDATE.")), !1; let a = r[n]; if (null == a || !a.roles.includes(i)) return !1; a.roles = a.roles.filter(e => e !== i); let o = H(O.default.getRoles(s.id), a.roles); return r[n] = { ...a, ...o }, !0 }, GUILD_ROLE_MEMBER_ADD: function(e) { let { guildId: t, userId: n, roleId: i } = e, r = g[t]; if (null == r) return !1; let s = O.default.getGuild(t); if (null == s) return R.warn("Guild ".concat(t, " not found during GUILD_MEMBER_UPDATE.")), !1; let a = r[n]; if (null == a || a.roles.includes(i)) return !1; a.roles.push(i); let o = H(O.default.getRoles(s.id), a.roles); return r[n] = { ...a, ...o }, !0 }, GUILD_MEMBER_PROFILE_UPDATE: function(e) { let { guildMember: t, guildId: n } = e, i = g[n]; if (null == i) return !1; let r = O.default.getGuild(n); if (null == r) return R.warn("Guild ".concat(n, " not found during GUILD_MEMBER_UPDATE.")), !1; i[t.user.id] = Y({ userId: t.user.id, nick: t.nick, guildId: n, avatar: t.avatar, avatarDecoration: z(t), guildRoles: O.default.getRoles(r.id), roles: t.roles, premiumSince: t.premium_since, isPending: t.pending, joinedAt: t.joined_at, communicationDisabledUntil: t.communication_disabled_until, unusualDMActivityUntil: t.unusual_dm_activity_until, flags: t.flags, fullProfileLoadedTimestamp: Date.now() }), G(n, i[t.user.id]) }, IMPERSONATE_UPDATE: Q, IMPERSONATE_STOP: Q, PASSIVE_UPDATE_V2: function(e) { return !!(e.members.length > 0) && K(e.guildId, e.members) }, CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES: function(e) { let { guildId: t } = e; if (null == t) return !1; delete U[t] }, LOCAL_MESSAGES_LOADED: function(e) { var t, n; if (null == e.guildId || null == O.default.getGuild(e.guildId)) return !1; D = !0, g[e.guildId] = null !== (t = g[e.guildId]) && void 0 !== t ? t : {}; let i = !1; for (let t of (D = !0, g[e.guildId] = null !== (n = g[e.guildId]) && void 0 !== n ? n : {}, e.members)) null == g[e.guildId][t.userId] && (i = !0, g[e.guildId][t.userId] = t); return i }, MESSAGE_CREATE: q, MESSAGE_UPDATE: q, LOAD_MESSAGES_SUCCESS: J, LOAD_MESSAGES_AROUND_SUCCESS: J, LOAD_PINNED_MESSAGES_SUCCESS: J, LOAD_RECENT_MENTIONS_SUCCESS: J, SEARCH_FINISH: $, MOD_VIEW_SEARCH_FINISH: $, MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS: function(e) { let { guildId: t, members: n } = e; return K(t, n.map(e => { let { member: t } = e; return t })) } }) }, 93093: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("442837"), r = n("570140"); class s extends i.Store { allGuildIds() { return this.guildIds } isMember(e) { return this.guildIds.has(e) } handleConnectionOpen(e) { this.guildIds = new Set([...e.guilds.map(e => e.id), ...e.unavailableGuilds]) } handleCacheLoaded(e) { this.guildIds = new Set(e.guilds.map(e => e.id)) } handleCacheLoadedLazy(e) { for (let t of e.guilds) this.guildIds.add(t.id) } handleGuildCreate(e) { this.guildIds.add(e.guild.id) } handleGuildDelete(e) { !0 !== e.guild.unavailable && this.guildIds.delete(e.guild.id) } constructor() { var e, t, n; super(r.default, { CACHE_LOADED: e => this.handleCacheLoaded(e), CACHE_LOADED_LAZY: e => this.handleCacheLoadedLazy(e), CONNECTION_OPEN: e => this.handleConnectionOpen(e), GUILD_CREATE: e => this.handleGuildCreate(e), GUILD_DELETE: e => this.handleGuildDelete(e) }, r.DispatchBand.Early), e = this, t = "guildIds", n = new Set, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } t.default = new s }, 731290: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("433517"), u = n("570140"); let d = "GuildNSFWAgreeStore", _ = {}; class c extends(a = o.default.Store) { initialize() { var e; _ = null !== (e = l.Storage.get(d)) && void 0 !== e ? e : _ } didAgree(e) { return null != e && (_[e] || !1) } } s = "GuildNSFWAgreeStore", (r = "displayName") in(i = c) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new c(u.default, { GUILD_NSFW_AGREE: function(e) { let { guildId: t } = e; _[t] = !0, l.Storage.set(d, _) } }) }, 888369: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"), n("724458"); var i = n("392711"), r = n.n(i); n("57132"), n("140155"); var s = n("398758"), a = n("601070"), o = n("569471"), l = n("195663"), u = n("131704"), d = n("709054"), _ = n("314897"), c = n("592125"), E = n("430824"), I = n("496675"), T = n("306680"), f = n("944486"), S = n("412788"), h = n("9156"), A = n("594174"), m = n("981631"), N = n("176505"), p = n("490897"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = m.NULL_STRING_GUILD_ID, R = {}, g = new Set, L = 0; function v(e) { var t; let n = R[null != e ? e : C]; return { unread: !1, unreadByType: {}, unreadChannelId: null, mentionCount: 0, mentionCounts: {}, ncMentionCount: 0, sentinel: null !== (t = null == n ? void 0 : n.sentinel) && void 0 !== t ? t : 0 } } function D(e) { var t; return R[null != e ? e : C] = null !== (t = R[null != e ? e : C]) && void 0 !== t ? t : v(e) } function M(e) { let t = D(e); t.sentinel++, L++ } function y(e, t, n) { return null != e.guild_id && n && !((0, u.isThread)(e.type) || h.default.isChannelRecordOrParentOptedIn(e)) && 0 === t } function P(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; return !(null == e || e.isGuildVocal() && 0 === t || e.hasFlag(N.ChannelFlags.IS_GUILD_RESOURCE_CHANNEL) || (0 === t || n) && (e.isThread() ? o.default.isMuted(e.id) || h.default.isGuildOrCategoryOrChannelMuted(e.guild_id, e.parent_id) : h.default.isGuildOrCategoryOrChannelMuted(e.guild_id, e.id)) || !e.isPrivate() && (y(e, t, (0, s.isOptInEnabledForGuild)(e.guild_id)) || !I.default.can(e.accessPermissions, e))) && (t > 0 || h.default.resolveUnreadSetting(e) === p.UnreadSetting.ALL_MESSAGES) } function U(e) { switch (e) { case C: case null: case void 0: return null; default: return e } } function b(e, t) { let n = T.default.hasUnread(e, t); if (t === p.ReadStateTypes.GUILD_EVENT) return !(h.default.isMuted(e) || h.default.isMuteScheduledEventsEnabled(e)) && n; return n } function G(e, t) { let n = v(e); return n.mentionCounts = { ...t.mentionCounts }, n.unreadByType = { ...t.unreadByType }, n } function w(e) { return e.unread = Object.values(e.unreadByType).some(e => e), e } function k(e, t) {} function B(e, t, n) { if (w(t), t.mentionCount = r()(t.mentionCounts).values().sum(), t.unread !== n.unread || t.mentionCount !== n.mentionCount) return R[null != e ? e : C] = t, null != e && (t.unread ? g.add(e) : g.delete(e)), L++, M(null != e ? e : C), !0; return !1 } function V(e, t) { let n = U(e), i = D(n), r = G(n, i), s = !1; if (t.forEach(e => { let t = c.default.getChannel(e); if (null == t) { delete r.mentionCounts[e]; return } if (t.getGuildId() !== n) return; let i = T.default.getMentionCount(e); null !== n && !s && T.default.hasUnread(t.id) && P(t, i, !0) && (s = !0, r.unreadChannelId = t.id), i > 0 && P(t, i) ? r.mentionCounts[t.id] = i : delete r.mentionCounts[t.id] }), r.unreadByType[p.ReadStateTypes.CHANNEL] = s, r.unreadByType[p.ReadStateTypes.CHANNEL] !== i.unreadByType[p.ReadStateTypes.CHANNEL] && !r.unreadByType[p.ReadStateTypes.CHANNEL]) { let e = c.default.getChannel(i.unreadChannelId); if (!(null != e && !t.includes(e.id) && T.default.hasUnread(e.id) && P(e))) return F(n); null != n && g.add(n), r.unreadByType[p.ReadStateTypes.CHANNEL] = !0 } return B(n, r, i) } function x(e, t) { if (null == e) return; let n = D(e), i = G(e, n); return i.unreadByType[p.ReadStateTypes.GUILD_EVENT] = b(e, t), B(e, i, n) } function F(e, t) { let n = U(e), i = v(n); if (null == n) { let e = c.default.getMutablePrivateChannels(); for (let t in e) { let n = e[t], r = T.default.getMentionCount(t); r > 0 && P(n, r) && (i.mentionCount += r, i.mentionCounts[n.id] = r) } } else { let e = h.default.isMuted(n); if (e && !1 === t) return !1; let r = h.default.getMutedChannels(n), l = h.default.getChannelOverrides(n), d = (0, s.isOptInEnabledForGuild)(n), _ = c.default.getMutableBasicGuildChannelsForGuild(n); for (let t in _) { let n = _[t], s = e || r.has(t) || null != n.parent_id && r.has(n.parent_id), a = i.unreadByType[p.ReadStateTypes.CHANNEL], { mentionCount: o, unread: c } = T.default.getGuildChannelUnreadState(n, d, l, s, a), E = o > 0; if (!E && s) continue; let f = !a && (!s || E) && c; (f || E) && function(e, t, n) { if ((0, u.isGuildVocalChannelType)(e.type) && 0 === t || !I.default.canBasicChannel((0, u.getBasicAccessPermissions)(e.type), e) || y(e, t, n)) return !1; return !("flags" in e && e.hasFlag(N.ChannelFlags.IS_GUILD_RESOURCE_CHANNEL)) && (t > 0 || h.default.resolveUnreadSetting(e) === p.UnreadSetting.ALL_MESSAGES) }(n, o, d) && (f && (i.unreadByType[p.ReadStateTypes.CHANNEL] = !0, i.unreadChannelId = t), E && (i.mentionCount += o, i.mentionCounts[n.id] = o)) } let E = a.default.getActiveJoinedThreadsForGuild(n); for (let t in E) for (let n in E[t]) { !i.unreadByType[p.ReadStateTypes.CHANNEL] && T.default.hasUnread(n) && !o.default.isMuted(n) && !e && (i.unreadByType[p.ReadStateTypes.CHANNEL] = !0, i.unreadChannelId = n); let t = T.default.getMentionCount(n); t > 0 && (i.mentionCount += t, i.mentionCounts[n] = t) }!i.unreadByType[p.ReadStateTypes.GUILD_EVENT] && b(n, p.ReadStateTypes.GUILD_EVENT) && (i.unreadByType[p.ReadStateTypes.GUILD_EVENT] = !0) } w(i); let r = D(n); if (i.unread !== r.unread || i.mentionCount !== r.mentionCount) return R[null != n ? n : C] = i, null != n && (i.unread ? g.add(n) : g.delete(n)), L++, M(null != n ? n : C), !0; return !1 } function H(e) { let { guilds: t } = e; R = {}, L = 0, g = new Set, F(null); let { length: n } = t; for (let e = 0; e < n; e++) { let n = t[e]; null != n && F(n.id) } } function Y(e) { let { guilds: t, readState: n } = e; R = {}, L = 0, g = new Set; let i = n.entries.length < 500, r = new Set; for (let e of (i && n.entries.forEach(e => { if (null != e.mention_count && e.mention_count > 0) { if (null == e.read_state_type || e.read_state_type === p.ReadStateTypes.CHANNEL) { var t; r.add(null === (t = c.default.getChannel(e.id)) || void 0 === t ? void 0 : t.guild_id) } else r.add(e.id) } }), F(null), t)) F(e.id, i ? r.has(e.id) : void 0) } function j() { for (let e of (R = {}, g = new Set, F(null), Object.values(E.default.getGuildIds()))) F(e) } function W(e) { let { guild: t } = e; return F(t.id) } function K(e) { let { guild: t } = e; return null != R[t.id] && (delete R[t.id], g.delete(t.id), L++, !0) } function z(e) { let { channel: { id: t, guild_id: n } } = e; return V(n, [t]) } function Z() { let e = c.default.getChannel(f.default.getChannelId()); return null != e && V(e.getGuildId(), [e.id]) } function X(e) { let { user: t, guildId: n } = e; return t.id === _.default.getId() && F(n) } function Q(e) { let { channelId: t } = e, n = c.default.getChannel(t); return null != n && V(n.getGuildId(), [n.id]) } function q(e) { let { channelId: t } = e, n = c.default.getChannel(t); if (null == n) return !1; if (null != n.guild_id) { let e = D(n.guild_id); if (((n.isThread() ? !o.default.hasJoined(n.id) || o.default.isMuted(n.id) : h.default.isGuildOrCategoryOrChannelMuted(n.guild_id, n.id)) || e.unreadByType[p.ReadStateTypes.CHANNEL]) && 0 === T.default.getMentionCount(t)) return !1 } return V(n.getGuildId(), [n.id]) } function J(e) { let { channelId: t, guildId: n } = e; return n !== m.FAVORITES && null != t && V(n, [t]) } function $(e) { let { channel: t } = e; return V(t.getGuildId(), [t.id]) } function ee(e) { let { channels: t } = e; return r()(t).groupBy(e => e.getGuildId()).reduce((e, t, n) => V(n, t.map(e => e.id)) || e, !1) } function et(e) { let { channels: t } = e; return r()(t).map(e => { let { channelId: t } = e; return t }).filter(e => null != c.default.getChannel(e)).groupBy(e => { var t; return null === (t = c.default.getChannel(e)) || void 0 === t ? void 0 : t.getGuildId() }).reduce((e, t, n) => V(n, t) || e, !1) } function en(e) { let { channel: t } = e; return V(t.getGuildId(), [t.id, t.parent_id]) } function ei(e) { let { guildScheduledEvent: t } = e; return x(t.guild_id, p.ReadStateTypes.GUILD_EVENT) } function er(e) { let { guildScheduledEvent: t } = e; return x(t.guild_id, p.ReadStateTypes.GUILD_EVENT) } function es(e) { let { id: t, ackType: n } = e; return x(t, n) } function ea(e) { let { id: t, guildId: n } = e; return V(n, [t]) } function eo(e) { return (0, l.doesThreadMembersActionAffectMe)(e) && V(e.guildId, [e.id]) } function el(e) { let { threads: t, guildId: n } = e; return V(n, t.filter(e => o.default.hasJoined(e.id)).map(e => e.id)) } function eu(e) { return !!(e.channels.length > 0) && V(e.guildId, e.channels.map(e => e.id)) } function ed(e) { let { guildId: t } = e; return F(t) } function e_(e) { let { guildId: t } = e; return F(t) } function ec(e) { let { userGuildSettings: t } = e, n = new Set(t.map(e => { var t; return null !== (t = e.guild_id) && void 0 !== t ? t : C })); return d.default.keys(R).reduce((e, t) => n.has(t) && F(t) || e, !1) } function eE() { for (let e in R) R[e].ncMentionCount = 0 } function eI(e) { let { guildId: t } = e; return F(t) } class eT extends S.default { initialize() { this.waitFor(c.default, f.default, T.default, I.default, _.default, A.default, h.default, a.default, o.default) } loadCache() { let e = this.readSnapshot(eT.LATEST_SNAPSHOT_VERSION); null != e && (R = e.guilds, g = new Set(e.unreadGuilds)) } takeSnapshot() { return { version: eT.LATEST_SNAPSHOT_VERSION, data: { guilds: R, unreadGuilds: Array.from(g) } } } hasAnyUnread() { return g.size > 0 } getStoreChangeSentinel() { return L } getMutableUnreadGuilds() { return g } getMutableGuildStates() { return R } hasUnread(e) { return g.has(e) } getMentionCount(e) { return D(e).mentionCount } getMutableGuildReadState(e) { return D(e) } getGuildHasUnreadIgnoreMuted(e) { let t = c.default.getMutableGuildChannelsForGuild(e); for (let e in t) { let n = t[e]; if (null != n) { if ((!n.isGuildVocal() || 0 !== T.default.getMentionCount(e)) && I.default.can(n.accessPermissions, n) && T.default.hasUnreadOrMentions(e)) return !0 } } let n = a.default.getActiveJoinedThreadsForGuild(e); for (let e in n) if (null != c.default.getChannel(e)) { for (let t in n[e]) if (T.default.hasUnreadOrMentions(t)) return !0 } return !!T.default.hasUnreadOrMentions(e, p.ReadStateTypes.GUILD_EVENT) || !1 } getTotalMentionCount(e) { let t = 0; for (let n in R) { let i = R[n]; (!0 !== e || n !== C) && (t += i.mentionCount) } return t } getTotalNotificationsMentionCount(e) { let t = 0; for (let n in R) { let i = R[n]; (!0 !== e || n !== C) && (t += i.ncMentionCount) } return t } getPrivateChannelMentionCount() { var e; let t = R[C]; return null !== (e = null == t ? void 0 : t.mentionCount) && void 0 !== e ? e : 0 } getMentionCountForChannels(e, t) { let n = 0, i = R[e]; return null == i ? 0 : (t.forEach(e => { let t = i.mentionCounts[e]; n += null != t ? t : 0 }), n) } getGuildChangeSentinel(e) { return D(e).sentinel } constructor() { super({ CONNECTION_OPEN: Y, OVERLAY_INITIALIZE: H, CACHE_LOADED_LAZY: () => this.loadCache(), GUILD_CREATE: W, GUILD_DELETE: K, MESSAGE_CREATE: q, MESSAGE_ACK: Q, BULK_ACK: et, UPDATE_CHANNEL_DIMENSIONS: Q, CHANNEL_SELECT: J, CHANNEL_DELETE: z, WINDOW_FOCUS: Z, GUILD_ACK: ed, GUILD_ROLE_CREATE: e_, GUILD_ROLE_DELETE: e_, GUILD_ROLE_UPDATE: e_, CHANNEL_CREATE: $, CHANNEL_UPDATES: ee, THREAD_CREATE: en, THREAD_UPDATE: en, THREAD_DELETE: en, THREAD_LIST_SYNC: el, THREAD_MEMBER_UPDATE: ea, THREAD_MEMBERS_UPDATE: eo, PASSIVE_UPDATE_V2: eu, GUILD_MEMBER_UPDATE: X, USER_GUILD_SETTINGS_FULL_UPDATE: ec, USER_GUILD_SETTINGS_CHANNEL_UPDATE: eI, USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK: eI, USER_GUILD_SETTINGS_GUILD_UPDATE: eI, USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE: eI, GUILD_FEATURE_ACK: es, GUILD_SCHEDULED_EVENT_CREATE: ei, GUILD_SCHEDULED_EVENT_UPDATE: ei, GUILD_SCHEDULED_EVENT_DELETE: er, CHANNEL_RTC_UPDATE_CHAT_OPEN: Q, LOAD_MESSAGES_SUCCESS: Q, CHANNEL_ACK: Q, CHANNEL_LOCAL_ACK: Q, NOTIFICATION_SETTINGS_UPDATE: j, RECOMPUTE_READ_STATES: j, VOICE_CHANNEL_SELECT: Q, ENABLE_AUTOMATIC_ACK: Q, RESORT_THREADS: Q, NOTIFICATION_CENTER_CLEAR_GUILD_MENTIONS: eE, TRY_ACK: Q }) } } O(eT, "displayName", "GuildReadStateStore"), O(eT, "LATEST_SNAPSHOT_VERSION", 1), t.default = new eT }, 430824: function(e, t, n) { "use strict"; let i; n.r(t), n("47120"); var r, s, a, o, l = n("442837"), u = n("902704"), d = n("570140"), _ = n("601964"), c = n("411198"), E = n("625137"), I = n("709054"), T = n("314897"), f = n("981631"), S = n("647086"); let h = {}, A = {}, m = !1, N = []; function p(e) { for (let t of (A = {}, h = {}, i = 0, e)) i++, A[t.id] = c.fromSerializedGuildRecord(t), h[t.id] = t.roles } function O(e) { let { guildId: t, role: n } = e, i = h[t], r = E.fromServerRole(n), s = null == i ? void 0 : i[r.id]; if (null != s && (0, u.default)(r, s)) return !1; i = { ...i, [n.id]: E.fromServerRole(n) }, i = E.sortClientRoles(t, Object.values(i)), h[t] = i } let C = Object.freeze({}); class R extends(r = l.default.Store) { getGuild(e) { if (null != e) return e === f.FAVORITES ? S.FAVORITES_GUILD_RECORD : A[e] } getGuilds() { return A } getGuildIds() { return I.default.keys(A) } getGuildCount() { return i } isLoaded() { return m } getGeoRestrictedGuilds() { return N } getAllGuildsRoles() { return h } getRoles(e) { var t; return null !== (t = h[e]) && void 0 !== t ? t : C } getRole(e, t) { var n; return null === (n = h[e]) || void 0 === n ? void 0 : n[t] } } o = "GuildStore", (a = "displayName") in(s = R) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new R(d.default, { BACKGROUND_SYNC: function(e) { for (let n of e.guilds) { var t; let e = A[n.id]; if (null == e || "unavailable" === n.data_mode) return; A[n.id] = c.fromBackgroundSync(n, e), h[n.id] = "partial" === n.data_mode ? c.filterRoleDeletes(n.id, null !== (t = h[n.id]) && void 0 !== t ? t : C, n.partial_updates.roles, n.partial_updates.deleted_role_ids) : E.sortServerRoles(n.id, n.roles) } i = Object.keys(A).length }, CONNECTION_OPEN: function(e) { m = !0; let t = A; A = {}, h = {}, i = 0, e.guilds.forEach(e => { i++, A[e.id] = c.fromServer(e, t[e.id]), h[e.id] = e.roles instanceof Array ? E.sortServerRoles(e.id, e.roles) : e.roles }); let n = !1; if (N.length !== e.geoRestrictedGuilds.length) n = !0; else for (let t = 0; t < e.geoRestrictedGuilds.length; t++) if (!(0, u.default)(N[t], e.geoRestrictedGuilds[t])) { n = !0; break } n && (N = e.geoRestrictedGuilds) }, OVERLAY_INITIALIZE: function(e) { var t; A = {}, h = {}, i = 0, null === (t = e.guilds) || void 0 === t || t.forEach(e => { i++, A[e.id] = new _.default(e) }), h = e.allGuildsRoles }, CACHE_LOADED: function(e) { p(e.guilds) }, CACHE_LOADED_LAZY: function(e) { if (0 === e.guilds.length) return !1; p(e.guilds) }, GUILD_CREATE: function(e) { let t = c.fromServer(e.guild, A[e.guild.id]); null == A[t.id] && i++, A = { ...A, [t.id]: t }, h[t.id] = e.guild.roles instanceof Array ? E.sortServerRoles(t.id, e.guild.roles) : e.guild.roles }, GUILD_UPDATE: function(e) { let t = c.fromServerUpdate(e.guild, A[e.guild.id]); null == A[t.id] && i++, A = { ...A, [t.id]: t }, h[t.id] = E.sortServerRoles(t.id, e.guild.roles) }, GUILD_DELETE: function(e) { let { guild: t } = e, n = N.findIndex(e => e.id === t.id); if (-1 !== n) { N.splice(n, 1), N = [...N]; return } if (null == A[t.id] || t.unavailable) return !1; A = { ...A }, delete A[t.id], h[t.id] = void 0, i-- }, GUILD_ROLE_CREATE: O, GUILD_ROLE_UPDATE: O, GUILD_ROLE_DELETE: function(e) { let { guildId: t, roleId: n } = e, i = h[t]; if (null == i) return !1; i = { ...i }, delete i[n], h[t] = i }, GUILD_MEMBER_ADD: function(e) { let { guildId: t, joinedAt: n, user: i } = e, r = T.default.getId(), s = A[t]; if (r !== i.id || null == s) return !1; let a = "string" == typeof n ? new Date(n) : n; if (a === s.joinedAt || null == a) return !1; A = { ...A, [t]: s.updateJoinedAt(a) } }, GUILD_SETTINGS_SUBMIT_SUCCESS: function() { return !0 }, GUILD_GEO_RESTRICTED: function(e) { N = [...N, { id: e.guildId, name: e.name, icon: e.icon, unavailable: !0, geo_restricted: !0 }] } }) }, 797316: function(e, t, n) { "use strict"; let i; n.r(t), n("47120"); var r, s, a, o, l = n("392711"), u = n.n(l), d = n("442837"), _ = n("570140"), c = n("177523"), E = n("353926"), I = n("480384"), T = n("653733"), f = n("768419"), S = n("314897"), h = n("439170"), A = n("433355"), m = n("592125"), N = n("486472"), p = n("271383"), O = n("430824"), C = n("19780"), R = n("699516"), g = n("944486"), L = n("914010"), v = n("981631"); let D = new c.default(e => { for (let t in e) null == O.default.getGuild(t) && !N.default.isUnavailable(t) && delete e[t]; _.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_FLUSH", subscriptions: e }) }); function M(e, t) { let n = {}; D.forEach(r => { var s; r !== L.default.getGuildId() && r !== C.default.getGuildId() && r !== (null === (s = m.default.getChannel(g.default.getChannelId())) || void 0 === s ? void 0 : s.getGuildId()) && !(0, T.isGuildEligibleForRecentlyOnlineExperiment)(r) && (null == i || i.guildId !== r) && (D.clearWithoutFlushing(r, e), t && (n[r] = D.get(r))) }), !u().isEmpty(n) && _.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_FLUSH", subscriptions: n }) } function y(e, t) { return D.subscribeToGuild(e), null != t && A.default.getSection(t) === v.ChannelSections.MEMBERS && P(e, t, c.DEFAULT_RANGES) } function P(e, t, n) { if (t === h.EVERYONE_CHANNEL_ID) return D.subscribeChannel(e, t, n); let i = m.default.getChannel(t); if (null == i) return !1; let r = i.getGuildId(); return (r !== e && e === v.FAVORITES && D.subscribeToGuild(r), null != i && i.isThread()) ? i.type === v.ChannelTypes.ANNOUNCEMENT_THREAD ? D.subscribeChannel(r, i.parent_id, n) : !!i.isActiveThread() && D.subscribeThreadMemberList(r, t, g.default.getChannelId()) : D.subscribeChannel(r, t, n) } function U(e) { let { type: t } = e; "CONNECTION_OPEN" === t && M(!0, !1), Object.keys(O.default.getGuilds()).forEach(e => { (0, T.isGuildEligibleForRecentlyOnlineExperiment)(e) && P(e, h.EVERYONE_CHANNEL_ID, c.DEFAULT_RANGES) }); let n = L.default.getGuildId(); null != n && y(n, g.default.getChannelId(n)); let i = {}; D.forEach(e => { null == O.default.getGuild(e) ? D.clearWithoutFlushing(e, !0) : i[e] = D.get(e) }), !u().isEmpty(i) && _.default.dispatch({ type: "GUILD_SUBSCRIPTIONS_FLUSH", subscriptions: i }) } function b(e) { let { guildId: t, channelId: n } = e; return !N.default.isUnavailable(t) && y(t, n) } function G() { return y(L.default.getGuildId(), g.default.getChannelId()) } function w() { let e = f.default.getSyncingWith(); if (null == e) null != i && (D.unsubscribeUser(i.guildId, i.userId), i = null); else { let { userId: t } = e; if (null != i && i.userId === t || R.default.isFriend(t)) return !1; let n = p.default.memberOf(t); if (0 === n.length) return !1; let [r] = n; i = { guildId: r, userId: t }, D.subscribeUser(r, t) } return !1 } class k extends(r = d.default.Store) { initialize() { this.waitFor(m.default, O.default, L.default, g.default, C.default, S.default, A.default, E.default, I.default), this.syncWith([f.default], w), this.syncWith([A.default], G) } getSubscribedThreadIds() { return D.getSubscribedThreadIds() } isSubscribedToThreads(e) { return D.isSubscribedToThreads(e) } isSubscribedToAnyMember(e) { return D.isSubscribedToAnyMember(e) } isSubscribedToMemberUpdates(e) { return D.isSubscribedToMemberUpdates(e) } isSubscribedToAnyGuildChannel(e) { let t = D.get(e).channels; return null != t && Object.keys(t).length > 0 } } o = "GuildSubscriptionsStore", (a = "displayName") in(s = k) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new k(_.default, { CONNECTION_OPEN: U, CONNECTION_RESUMED: U, CONNECTION_CLOSED: function() { M(!1, !1) }, IDLE: function(e) { let { idle: t } = e; if (!t) return !1; M(!1, !0) }, LOGOUT: function() { D.reset() }, VOICE_CHANNEL_SELECT: b, CHANNEL_SELECT: b, GUILD_CREATE: function(e) { let { guild: t } = e; t.id === L.default.getGuildId() && G() }, GUILD_DELETE: function(e) { let { guild: t } = e; D.clearWithoutFlushing(t.id, !0) }, GUILD_SUBSCRIPTIONS_MEMBERS_ADD: function(e) { let { guildId: t, userIds: n } = e; return n.forEach(e => { e !== S.default.getId() && D.subscribeUser(t, e) }), !1 }, GUILD_SUBSCRIPTIONS_MEMBERS_REMOVE: function(e) { let { guildId: t, userIds: n } = e; return n.forEach(e => { D.unsubscribeUser(t, e) }), !1 }, GUILD_SUBSCRIPTIONS_ADD_MEMBER_UPDATES: function(e) { let { guildId: t } = e; D.subscribeToMemberUpdates(t) }, GUILD_SUBSCRIPTIONS_REMOVE_MEMBER_UPDATES: function(e) { let { guildId: t } = e; D.unsubscribeFromMemberUpdates(t) }, GUILD_SUBSCRIPTIONS_CHANNEL: function(e) { let { guildId: t, channelId: n, ranges: i } = e; return P(t, n, i) }, GUILD_SUBSCRIPTIONS: function(e) { let { guildId: t } = e; return D.subscribeToGuild(t) }, CHANNEL_PRELOAD: function(e) { let { guildId: t, channelId: n } = e; return y(t, n) }, INBOX_OPEN: function(e) { let { guildIds: t } = e; for (let e of t) null != e && D.subscribeToGuild(e); return !1 }, THREAD_UPDATE: function(e) { let { channel: t } = e; return t.isArchivedThread() ? D.unsubscribeThreadMemberList(t.guild_id, t.id) : !!t.isActiveThread() && g.default.getChannelId() === t.id && void D.subscribeThreadMemberList(t.guild_id, t.id, g.default.getChannelId()) }, THREAD_DELETE: function(e) { let { channel: t } = e; return D.unsubscribeThreadMemberList(t.guild_id, t.id) }, THREAD_LIST_SYNC: G }) }, 607744: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"), n("653041"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("630388"), d = n("709054"), _ = n("271383"), c = n("430824"), E = n("594174"), I = n("981631"), T = n("372897"); let f = { notClaimed: !1, notEmailVerified: !1, notPhoneVerified: !1, newAccount: !1, newMember: !1, canChat: !0 }, S = new Set, h = {}; function A(e) { let t; m(e), S.add(e); let n = c.default.getGuild(e), i = E.default.getCurrentUser(); if (null == n || n.verificationLevel === I.VerificationLevels.NONE || null == i || n.isOwner(i) || i.isPhoneVerified()) return; let r = _.default.getMember(n.id, i.id); if (null != r) { var s; if ((0, u.hasFlag)(null !== (s = r.flags) && void 0 !== s ? s : 0, T.GuildMemberFlags.BYPASSES_VERIFICATION)) return; let e = new Set; for (let t of r.roles) { let i = c.default.getRole(n.id, t); null != i && !i.managed && e.add(t) } let t = new Date("2022-12-02 00:00:00"), i = null == r.joinedAt || new Date(r.joinedAt) < t; if (!(n.hasFeature(I.GuildFeatures.GUILD_ONBOARDING_EVER_ENABLED) && !i) && e.size > 0) return } let a = +i.createdAt + 6e4 * I.VerificationCriteria.ACCOUNT_AGE - Date.now(), o = +n.joinedAt + 6e4 * I.VerificationCriteria.MEMBER_AGE - Date.now(), d = n.verificationLevel >= I.VerificationLevels.LOW && !i.isClaimed(), f = !1, A = !1, N = !1, p = !1; !i.isPhoneVerified() && !i.isStaff() && (f = n.verificationLevel >= I.VerificationLevels.LOW && !i.verified, A = n.verificationLevel >= I.VerificationLevels.VERY_HIGH, N = n.verificationLevel >= I.VerificationLevels.MEDIUM && a > 0, p = n.verificationLevel >= I.VerificationLevels.HIGH && o > 0); let O = []; p && O.push(o), N && O.push(a), O.length > 0 && (t = setTimeout(() => l.default.dispatch({ type: "GUILD_VERIFICATION_CHECK", guildId: e }), Math.max(...O))), h[e] = { notClaimed: d, notEmailVerified: f, notPhoneVerified: A, newAccount: N, newMember: p, canChat: !(d || f || A || N || p), accountDeadline: new Date(Date.now() + a), memberDeadline: new Date(Date.now() + o), timeoutRef: t } } function m(e) { let t = h[e]; null != t && clearTimeout(t.timeoutRef), delete h[e] } function N(e) { S.delete(e.guild.id), A(e.guild.id) } class p extends(i = o.default.Store) { initialize() { this.waitFor(c.default, E.default) } getCheck(e) { var t; return !S.has(e) && A(e), null !== (t = h[e]) && void 0 !== t ? t : f } canChatInGuild(e) { return this.getCheck(e).canChat } } a = "GuildVerificationStore", (s = "displayName") in(r = p) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new p(l.default, { CONNECTION_OPEN: function() { for (let e in S.clear(), h) m(e) }, CONNECTION_CLOSED: function() { d.default.keys(h).forEach(m) }, CURRENT_USER_UPDATE: function() { S.clear() }, GUILD_CREATE: N, GUILD_UPDATE: N, GUILD_DELETE: function(e) { let { guild: t } = e; m(t.id) }, GUILD_MEMBER_UPDATE: function(e) { var t; let { guildId: n, user: i } = e; if (i.id !== (null === (t = E.default.getCurrentUser()) || void 0 === t ? void 0 : t.id)) return !1; S.delete(n) }, GUILD_VERIFICATION_CHECK: function(e) { let { guildId: t } = e; A(t) } }) }, 858340: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("981631"); let d = {}; class _ extends(a = o.default.Store) { getHookError(e) { return d[e] } } s = "HookErrorStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { MEDIA_ENGINE_SET_GO_LIVE_SOURCE: function() { d = {} }, MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING: function() { delete d[u.MediaEngineHookTypes.SOUND] }, MEDIA_ENGINE_SOUNDSHARE_FAILED: function(e) { let { errorMessage: t, errorCode: n } = e; d[u.MediaEngineHookTypes.SOUND] = { errorMessage: t, errorCode: n } } }) }, 229588: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setLocaleHack: function() { return c } }); var i, r, s, a, o = n("442837"), l = n("570140"); let u = !1, d = null, _ = null; function c(e) { E({ locale: e }) } function E(e) { let { locale: t } = e; u = !0, d = t } class I extends(a = o.default.Store) { isLoading() { return u } getError() { return _ } } s = "I18nLoaderStore", (r = "displayName") in(i = I) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new I(l.default, { I18N_LOAD_START: E, I18N_LOAD_SUCCESS: function(e) { let { locale: t } = e; t === d && (u = !1, _ = null, d = null) }, I18N_LOAD_ERROR: function(e) { let { error: t, locale: n } = e; n === d && (u = !1, _ = null != t ? t : null, d = null) } }) }, 517100: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("287734"), d = n("579806"), _ = n("695346"), c = n("70956"), E = n("358085"), I = n("314897"), T = n("981631"), f = n("65154"); let S = Date.now(), h = !1, A = !1, m = !1, N = !1, p = !1; function O() { return m || N || (0, E.isAndroid)() && p } function C() { Date.now() - S > T.IDLE_DURATION || O() ? h || l.default.dispatch({ type: "IDLE", idle: !0, idleSince: S }) : h && l.default.dispatch({ type: "IDLE", idle: !1 }), Date.now() - S > Math.min(_.AfkTimeout.getSetting() * c.default.Millis.SECOND, T.IDLE_DURATION) || O() ? A || l.default.dispatch({ type: "AFK", afk: !0 }) : A && l.default.dispatch({ type: "AFK", afk: !1 }) }!__OVERLAY__ && (E.isPlatformEmbedded && (null === d.default || void 0 === d.default ? void 0 : d.default.remotePowerMonitor) != null ? (! function e() { var t; let n = t => { S = Math.max(Date.now() - t, S), C(), setTimeout(e, 10 * c.default.Millis.SECOND) }; if ((null === d.default || void 0 === d.default ? void 0 : null === (t = d.default.remotePowerMonitor) || void 0 === t ? void 0 : t.getSystemIdleTimeMs) != null) { let e = d.default.remotePowerMonitor.getSystemIdleTimeMs(); e instanceof Promise ? e.then(n) : n(e) } }(), d.default.remotePowerMonitor.on("resume", () => { m = !1, R({}) }), d.default.remotePowerMonitor.on("suspend", () => { m = !0, R({}), u.default.disconnect() }), d.default.remotePowerMonitor.on("lock-screen", () => { N = !0, R({}) }), d.default.remotePowerMonitor.on("unlock-screen", () => { N = !1, R({}) })) : setInterval(C, .25 * T.IDLE_DURATION)); function R(e) { let { timestamp: t, type: n } = e, i = "OVERLAY_SET_NOT_IDLE" === n && null != t; return (!i || !(t <= S)) && (S = i ? t : Date.now(), __OVERLAY__ ? l.default.dispatch({ type: "OVERLAY_SET_NOT_IDLE", timestamp: S }) : C(), !1) } class g extends(a = o.default.Store) { isIdle() { return h } isAFK() { return A } getIdleSince() { return h ? S : null } } s = "IdleStore", (r = "displayName") in(i = g) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new g(l.default, { IDLE: function(e) { h = e.idle }, AFK: function(e) { A = e.afk }, SPEAKING: function(e) { let { userId: t, speakingFlags: n } = e; return n !== f.SpeakingFlags.NONE && t === I.default.getId() && R({}), !1 }, APP_STATE_UPDATE: function(e) { let { state: t } = e; return p = t === T.AppStates.BACKGROUND, S = Date.now(), C(), !1 }, OVERLAY_SET_NOT_IDLE: R, CHANNEL_SELECT: R, VOICE_CHANNEL_SELECT: R, WINDOW_FOCUS: R, OVERLAY_INITIALIZE: R, OVERLAY_SET_INPUT_LOCKED: R, USER_SETTINGS_PROTO_UPDATE: R }) }, 6132: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("981631"); let d = 0; class _ extends(a = o.default.Store) { getId() { return d } } s = "InstanceIdStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { RPC_SERVER_READY: function(e) { let { port: t } = e; d = u.RPC_STARTING_PORT - t } }) }, 341165: function(e, t, n) { "use strict"; let i; n.r(t); var r, s, a, o, l = n("569048"), u = n.n(l), d = n("167006"), _ = n.n(d), c = n("989872"), E = n.n(c), I = n("442837"), T = n("570140"), f = n("758449"), S = n("245335"); let h = {}, A = {}, m = {}, N = {}, p = !1, O = !1, C = !1; class R extends(o = I.default.Store) { getInvite(e) { var t, n; let { targetType: i, targetUserId: r, targetApplicationId: s } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return i === S.InviteTargetTypes.STREAM && null != r ? null === (t = A[e]) || void 0 === t ? void 0 : t[r] : i === S.InviteTargetTypes.EMBEDDED_APPLICATION && null != s ? null === (n = m[e]) || void 0 === n ? void 0 : n[s] : h[e] } getFriendInvite() { return i } getFriendInvitesFetching() { return p } canRevokeFriendInvite() { return null != i && !O && !C } } a = "InstantInviteStore", (s = "displayName") in(r = R) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new R(T.default, { CONNECTION_OPEN: function() { h = {}, A = {}, m = {}, N = {}, i = null, O = !1, C = !1, p = !1 }, CHANNEL_DELETE: function(e) { let { channel: t } = e; delete h[t.id], delete A[t.id], delete m[t.id] }, FRIEND_INVITE_CREATE_SUCCESS: function(e) { var t; N[e.invite.code] = f.default.createFromServer(e.invite), i = null !== (t = u()(_()(E()(Object.values(N), "createdAt")))) && void 0 !== t ? t : null, C = !1 }, FRIEND_INVITE_CREATE_FAILURE: function() { C = !1 }, FRIEND_INVITE_REVOKE_SUCCESS: function(e) { var t; null != e.invites && e.invites.forEach(e => { null != N[e.code] && delete N[e.code] }), i = null !== (t = u()(_()(E()(Object.values(N), "createdAt")))) && void 0 !== t ? t : null, O = !1 }, INSTANT_INVITE_CREATE_SUCCESS: function(e) { let { channelId: t, invite: n } = e, i = f.default.createFromServer(n); i.targetType === S.InviteTargetTypes.STREAM && null != i.targetUser ? (null == A[t] && (A[t] = {}), A[t][String(i.targetUser.id)] = i) : i.targetType === S.InviteTargetTypes.EMBEDDED_APPLICATION && null != i.targetApplication ? (null == m[t] && (m[t] = {}), m[t][i.targetApplication.id] = i) : h[t] = i }, INSTANT_INVITE_CREATE_FAILURE: function(e) { let { channelId: t } = e; h[t] = null }, INSTANT_INVITE_REVOKE_SUCCESS: function(e) { let { channelId: t } = e; h[t] = null }, FRIEND_INVITE_REVOKE_REQUEST: function() { O = !0 }, FRIEND_INVITE_CREATE_REQUEST: function() { C = !0 }, FRIEND_INVITES_FETCH_REQUEST: function() { p = !0 }, FRIEND_INVITES_FETCH_RESPONSE: function(e) { var t; N = {}, e.invites.forEach(e => { N[e.code] = f.default.createFromServer(e) }), i = null !== (t = u()(_()(E()(Object.values(N), "createdAt")))) && void 0 !== t ? t : null, p = !1 }, INSTANT_INVITE_CLEAR: function(e) { delete h[e.channelId] } }) }, 718745: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("981631"); let d = {}, _ = { integration: "", query: "" }; class c extends(a = o.default.Store) { getResults(e, t) { if (null == e || null == t) return null; let n = d[e]; return null != n && null != n[t] ? n[t] : null } getQuery() { return _ } } s = "IntegrationQueryStore", (r = "displayName") in(i = c) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new c(l.default, { INTEGRATION_QUERY: function(e) { var t; let { integration: n, query: i } = e; d[n] = null !== (t = d[n]) && void 0 !== t ? t : {}, d[n][i] = { loading: !0, results: [] } }, INTEGRATION_QUERY_SUCCESS: function(e) { let { integration: t, query: n, results: i } = e; d[t][n] = { loading: !1, results: i.map(e => ({ type: u.ChannelTextAreaIntegrations[t].type, meta: e })) }, _ = { query: n, integration: t } }, INTEGRATION_QUERY_FAILURE: function(e) { let { integration: t, query: n } = e; delete d[t][n] } }) }, 701190: function(e, t, n) { "use strict"; n.r(t), n("789020"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("264229"), d = n("981631"); let _ = {}, c = {}, E = {}; function I(e, t) { var n; e = null != e ? e : ""; let i = (0, u.parseExtraDataFromInviteKey)(e), r = _[e], s = null != r ? { state: d.InviteStates.RESOLVING, ...r } : { state: d.InviteStates.RESOLVING, code: i.baseCode }; t(s), _ = { ..._, [e]: s }, (null === (n = s.guild) || void 0 === n ? void 0 : n.id) != null && (E = { ...E, [s.guild.id]: e }) } function T(e) { return I(e.code, t => { t.state = "banned" in e && e.banned ? d.InviteStates.BANNED : d.InviteStates.EXPIRED }) } class f extends(i = o.default.Store) { getInvite(e) { return _[e] } getInviteError(e) { return c[e] } getInvites() { return _ } getInviteKeyForGuildId(e) { return E[e] } } a = "InviteStore", (s = "displayName") in(r = f) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new f(l.default, { INVITE_RESOLVE: function(e) { let { code: t } = e, n = (0, u.parseExtraDataFromInviteKey)(t); _ = { ..._, [t]: { code: n.baseCode, state: d.InviteStates.RESOLVING } } }, INVITE_RESOLVE_SUCCESS: function(e) { return I(e.code, t => { var n, i; t.state = d.InviteStates.RESOLVED, t.guild = e.invite.guild, t.channel = e.invite.channel, t.inviter = e.invite.inviter, t.approximate_member_count = null !== (n = e.invite.approximate_member_count) && void 0 !== n ? n : null, t.approximate_presence_count = null !== (i = e.invite.approximate_presence_count) && void 0 !== i ? i : null, t.target_type = e.invite.target_type, t.target_user = e.invite.target_user, t.target_application = e.invite.target_application, t.expires_at = e.invite.expires_at, t.stage_instance = e.invite.stage_instance, t.friends_count = e.invite.friends_count, t.is_contact = e.invite.is_contact, t.guild_scheduled_event = e.invite.guild_scheduled_event, t.type = e.invite.type, t.flags = e.invite.flags }) }, INVITE_RESOLVE_FAILURE: T, INSTANT_INVITE_REVOKE_SUCCESS: T, FRIEND_INVITE_CREATE_SUCCESS: function(e) { return I(e.invite.code, t => { t.state = d.InviteStates.RESOLVED, t.inviter = e.invite.inviter }) }, FRIEND_INVITE_REVOKE_SUCCESS: function(e) { e.invites.forEach(e => I(e.code, e => { e.state = d.InviteStates.EXPIRED })) }, INSTANT_INVITE_CREATE_SUCCESS: function(e) { return I(e.invite.code, t => { var n, i; t.state = d.InviteStates.RESOLVED, t.guild = e.invite.guild, t.channel = e.invite.channel, t.inviter = e.invite.inviter, t.approximate_member_count = null !== (n = e.invite.approximate_member_count) && void 0 !== n ? n : null, t.approximate_presence_count = null !== (i = e.invite.approximate_presence_count) && void 0 !== i ? i : null, t.target_type = e.invite.target_type, t.target_user = e.invite.target_user, t.target_application = e.invite.target_application, t.stage_instance = e.invite.stage_instance, t.guild_scheduled_event = e.invite.guild_scheduled_event, t.type = e.invite.type }) }, INVITE_ACCEPT: function(e) { return I(e.code, e => { e.state = d.InviteStates.ACCEPTING }) }, INVITE_ACCEPT_SUCCESS: function(e) { return I(e.code, t => { t.state = d.InviteStates.ACCEPTED, t.guild = e.invite.guild, t.new_member = e.invite.new_member, t.channel = { ...t.channel, ...e.invite.channel } }) }, INVITE_ACCEPT_FAILURE: function(e) { return c[e.code] = e.error, I(e.code, e => { e.state = d.InviteStates.ERROR }) }, INVITE_APP_OPENING: function(e) { return I(e.code, e => { e.state = d.InviteStates.APP_OPENING }) }, INVITE_APP_OPENED: function(e) { return I(e.code, e => { e.state = d.InviteStates.APP_OPENED }) }, INVITE_APP_NOT_OPENED: function(e) { return I(e.code, e => { e.state = d.InviteStates.APP_NOT_OPENED }) } }) }, 819640: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"); let u = []; function d() { u = [] } class _ extends(i = o.default.Store) { hasLayers() { return u.length > 0 } getLayers() { return u } } a = "LayerStore", (s = "displayName") in(r = _) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new _(l.default, { LAYER_PUSH: function(e) { let { component: t } = e; if (u.indexOf(t) >= 0) return !1; u = [...u, t] }, LAYER_POP: function() { if (0 === u.length) return !1; u = u.slice(0, -1) }, LAYER_POP_ALL: d, LOGOUT: d, NOTIFICATION_CLICK: d }) }, 355863: function(e, t, n) { "use strict"; let i, r; n.r(t), n("653041"), n("47120"), n("411104"), n("724458"); var s, a, o, l = n("392711"), u = n.n(l), d = n("153832"), _ = n("442837"), c = n("433517"), E = n("570140"), I = n("131792"), T = n("252982"), f = n("434529"), S = n("981631"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(o = s || (s = {})).REQUIRED = "REQUIRED", o.OPTIONAL = "OPTIONAL", o.OPTIONAL_DEFAULT = "OPTIONAL_DEFAULT"; let A = "migrated", m = { [S.OverlayWidgets.GUILDS]: { minSize: { width: 312, height: 300 }, resizeX: !1, resizeY: !0, dragAnywhere: !1, layoutPolicy: "OPTIONAL", defaultSettings: { anchor: { left: .175, top: .15, bottom: null, right: null }, size: { width: "auto", height: .65 }, pinned: !1 } }, [S.OverlayWidgets.TEXT]: { minSize: { width: 430, height: 300 }, resizeX: !0, resizeY: !0, dragAnywhere: !1, layoutPolicy: "OPTIONAL", defaultSettings: { anchor: { left: .26, top: .15, bottom: null, right: null }, size: { width: .565, height: .65 }, pinned: !0 } }, [S.OverlayWidgets.VOICE]: { minSize: { width: 272, height: 100 }, resizeX: !1, resizeY: !1, dragAnywhere: !0, layoutPolicy: "REQUIRED", defaultSettings: { anchor: { left: .011, top: .011, bottom: null, right: null }, size: { width: "auto", height: "auto" }, pinned: !0 } }, [S.OverlayWidgets.GUILDS_TEXT]: { minSize: { height: 300, width: 610 }, resizeX: !0, resizeY: !0, dragAnywhere: !1, layoutPolicy: "OPTIONAL_DEFAULT", defaultSettings: { anchor: { left: .15, top: .15, bottom: null, right: null }, size: { width: .7, height: .65 }, pinned: !1 } } }; function N(e, t) { let n = r[e]; if (null == n) return !1; let s = i[n.layoutId]; return null != s && t(n, s) } function p(e) { var t; return null === (t = m[e]) || void 0 === t ? void 0 : t.defaultSettings } class O extends(a = _.default.PersistedStore) { initialize(e) { null != e && null != e.layouts && null != e.widgets ? (i = function(e) { let t = {}; return u().forEach(e, (e, n) => { t[n] = new I.default(e) }), t }(e.layouts), r = function(e) { let t = {}; return u().forEach(e, (e, n) => { t[n] = new T.default(e) }), t }(e.widgets)) : (i = {}, r = {}); let t = !1, n = []; u().forEach(m, (e, t) => { "REQUIRED" === e.layoutPolicy && n.push(t) }), u().forEach(i, (e, s) => { let a = this.getWidgetsForLayout(s), o = !1; for (let e of n) { let n = a.find(t => t.type === e); if (null != n) continue; o = t = !0; let i = (0, d.v4)(); n = new T.default({ ...this.getWidgetDefaultSettings(e), type: e, id: i, layoutId: s, zIndex: a.length }), a.push(n), r = { ...r, [i]: n } } o && (e = e.set("widgets", a.map(e => { let { id: t } = e; return t })), i = { ...i, [s]: e }) }), u().forEach(r, (e, n) => { let s = i[e.layoutId]; (null == s || 0 > s.widgets.indexOf(n)) && (r = { ...r }, delete r[n], t = !0) }), t && (this.persist(), this.emitChange()) } getState() { return { layouts: i, widgets: r } } getLayouts() { return i } getLayout(e) { return i[e] } getAllWidgets() { return r } getWidget(e) { return r[e] } getWidgetsForLayout(e) { let t = this.getLayout(e); return null == t ? [] : t.widgets.reduce((e, t) => { let n = this.getWidget(t); return null != n && e.push(n), e }, []) } getWidgetConfig(e) { return m[e] } getWidgetDefaultSettings(e) { return p(e) } getWidgetType(e) { let t = r[e]; return null != t ? t.type : "" } getRegisteredWidgets() { return m } getDefaultLayout(e) { let t = []; return u().forEach(this.getRegisteredWidgets(), (n, i) => { switch (n.layoutPolicy) { case "REQUIRED": case "OPTIONAL_DEFAULT": t.push({ ...n.defaultSettings, type: i, id: (0, d.v4)(), layoutId: e }) } }), t } } h(O, "displayName", "LayoutStore"), h(O, "persistKey", "LayoutStore"), h(O, "migrations", [() => { let { pinnedWidgets: e, positions: t, sizes: n, v: i } = { ...c.Storage.get("OverlayStore") }; if (5 === i && e) { let i = [], r = e.map(e => { let r = null != t ? t[e] : null, s = null != n ? n[e] : null, a = { id: e, layoutId: A, type: e, anchor: r || { top: -1, left: -1, bottom: null, right: null }, size: s || { width: -1, height: -1 }, pinned: !0, zIndex: 0 }; return i.push([a.id, a]), a.id }); return { layouts: [ [A, { id: A, widgets: r }] ], widgets: i } } return { layouts: [], widgets: [] } }, e => { let { layouts: t, widgets: n } = e, i = new Set(Object.keys(S.OverlayWidgets)), r = Array.from(n).filter(e => { let [t] = e; return !i.has(t) }), s = Array.from(t).filter(e => { let [t] = e; return t !== A }); return s.forEach(e => { let [t, n] = e, i = null, s = null; if (n.widgets.find(e => { let n = r.find(n => { let [i, r] = n; return i === e && r.layoutId === t }); return null != n && (null == s && n[1].type === S.OverlayWidgets.VOICE && (s = n[0]), null == i && n[1].type === S.OverlayWidgets.TEXT && (i = n[1].pinned), null != i && null != s || void 0) }), i || null == s) return; let a = (0, d.v4)(); n.widgets = [s, a], r.push([a, { ...p(S.OverlayWidgets.GUILDS_TEXT), type: S.OverlayWidgets.GUILDS_TEXT, id: a, layoutId: t, zIndex: 2 }]) }), { widgets: r, layouts: s } }, e => { let { layouts: t, widgets: n } = e, i = t.reduce((e, t) => { let [n, i] = t; return e[n] = i, e }, {}); return { layouts: i, widgets: n.reduce((e, t) => { let [n, i] = t; return e[n] = i, e }, {}) } }]), t.default = new O(E.default, { LAYOUT_CREATE: function(e) { let { layoutId: t, widgets: n, defaultResolution: s } = e; if (null != i[t]) return !1; let a = []; n.forEach((e, t) => { let n = function(e) { let t = i[A]; if (null != t) for (let n of t.widgets) { let t = r[n]; if (null != t && t.type === e) return t } return null }(e.type), o = { ...e, zIndex: t }; "" === o.id && (o.id = (0, d.v4)()), null != n && (o.pinned = n.pinned, -1 !== n.anchor.left && (o.anchor = (0, f.getAnchorPercentageFromLayoutSize)(n.anchor, s)), -1 !== n.size.width && (o.size = (0, f.getSizePercentageFromSize)(n.size, s))), r = { ...r, [o.id]: new T.default(o) }, a.push(o.id) }), i = { ...i, [t]: new I.default({ id: t, widgets: a }) } }, LAYOUT_SET_PINNED: function(e) { let { widgetId: t } = e; return N(t, (e, t) => { (function(e) { r = { ...r, [e.id]: e.set("pinned", !e.pinned) } })(e) }) }, LAYOUT_UPDATE_WIDGET: function(e) { let { widgetId: t, anchor: n, size: i } = e; return N(t, (e, t) => (function(e, t, n) { r = { ...r, [e.id]: e.merge({ anchor: t, size: n }) } })(e, n, i)) }, LAYOUT_SET_TOP_WIDGET: function(e) { let { widgetId: t } = e; return N(t, (e, t) => (function(e, t) { let n = function(e) { let t = []; return e.widgets.forEach(e => { let n = r[e]; null != n && t.push(n) }), t }(e); n.sort((e, t) => e.zIndex - t.zIndex); let i = n.findIndex(e => e.id === t); if (i === n.length - 1) return !1; n.push(n.splice(i, 1)[0]); for (let e = 0; e < n.length; e++)(function(e, t) { r = { ...r, [e.id]: e.set("zIndex", t) } })(n[e], e); return !0 })(t, e.id)) }, LAYOUT_DELETE_WIDGET: function(e) { let { widgetId: t } = e; r = { ...r }, delete r[t], u().forEach(i, (e, n) => { if (n === A) return; let r = e.widgets.indexOf(t); if (r >= 0) { let t = [...e.widgets]; t.splice(r, 1), i = { ...i, [n]: e.set("widgets", t) } } }) }, LAYOUT_DELETE_ALL_WIDGETS: function(e) { let { layoutId: t } = e, n = i[t]; if (null == n) return !1; n.widgets.forEach(e => { r = { ...r }, delete r[e] }), i = { ...i, [n.id]: n.set("widgets", []) } }, LAYOUT_CREATE_WIDGETS: function(e) { let { widgetConfigs: t } = e; t.forEach(e => { let t = new T.default(e), n = i[t.layoutId]; if (null == n) throw Error("LayoutStore - handleAddWidget: Invalid layoutId"); t = t.set("zIndex", n.widgets.length), r = { ...r, [t.id]: t }; let s = [...n.widgets, t.id]; i = { ...i, [n.id]: n.set("widgets", s) } }) } }) }, 283595: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"), n("177593"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("433517"), _ = n("570140"), c = n("85521"), E = n("630388"), I = n("780570"), T = n("314897"), f = n("981631"); let S = "LibraryApplicationStore"; function h() { var e; return null !== (e = d.Storage.get(S)) && void 0 !== e ? e : {} } let A = !1, m = {}, N = {}, p = new Set, O = {}, C = {}, R = !1; function g() { d.Storage.set(S, { ...h(), activeLaunchOptionIds: C }) } function L() { d.Storage.set(S, { ...h(), activeLibraryApplicationBranchIds: O }) } function v(e) { for (let t of e) { let e = c.default.createFromServer(t); m[(0, I.getComboId)(e.id, e.branchId)] = e } } function D(e) { let { libraryApplication: t } = e, n = c.default.createFromServer(t), i = (0, I.getComboId)(n.id, n.branchId); m[i] = n, p.delete(i) } function M(e, t) { var n; let i = (0, I.getComboId)(e, t); return null !== (n = m[i]) && void 0 !== n ? n : N[i] } function y() { return { ...N, ...m } } class P extends(i = u.default.Store) { initialize() { this.waitFor(T.default); let e = d.Storage.get(S); null != e && (null == e.activeLaunchOptionIds ? g() : C = e.activeLaunchOptionIds, null == e.activeLibraryApplicationBranchIds ? L() : O = e.activeLibraryApplicationBranchIds) } get libraryApplications() { return function(e) { let t = y(); return Object.keys(t).forEach(n => { !e(t[n]) && delete t[n] }), t }(e => !e.isHidden()) } getAllLibraryApplications() { return y() } hasLibraryApplication() { return Object.keys(y()).length > 0 } hasApplication(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = M(e, t); return !(null == i || !n && i.isHidden()) && (0, I.isUserEntitledToLibraryApplication)(i) } getLibraryApplication(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = M(e, t); return n && null != i ? (0, I.isUserEntitledToLibraryApplication)(i) ? i : null : i } getActiveLibraryApplication(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = O[e]; if (null != n) { var i; let r = (0, I.getComboId)(e, n), s = null !== (i = m[r]) && void 0 !== i ? i : N[r]; if (null != s && (0, I.isUserEntitledToLibraryApplication)(s) && (t || !s.isHidden())) return s } let r = y(); for (let n in r) if (r[n].id === e) { let e = r[n]; if ((0, I.isUserEntitledToLibraryApplication)(e) && (t || !e.isHidden())) return e } } isUpdatingFlags(e, t) { return p.has((0, I.getComboId)(e, t)) } getActiveLaunchOptionId(e, t) { return C[(0, I.getComboId)(e, t)] } get fetched() { return A } get entitledBranchIds() { return l()(y()).values().filter(e => (0, I.isUserEntitledToLibraryApplication)(e)).map(e => e.branchId).value() } get hasRemovedLibraryApplicationThisSession() { return R } whenInitialized(e) { this.addConditionalChangeListener(() => { if (A) return setImmediate(e), !1 }) } } a = "LibraryApplicationStore", (s = "displayName") in(r = P) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new P(_.default, { LOGOUT: function() { A = !1 }, LIBRARY_FETCH_SUCCESS: function(e) { let { libraryApplications: t } = e; m = {}, v(t), A = !0 }, SKU_PURCHASE_SUCCESS: function(e) { let { libraryApplications: t } = e; v(t) }, LIBRARY_APPLICATION_FLAGS_UPDATE_START: function(e) { let { applicationId: t, branchId: n, flags: i } = e, r = (0, I.getComboId)(t, n), s = M(t, n); null != s && !s.isHidden() && E.hasFlag(i, f.LibraryApplicationFlags.HIDDEN) && (R = !0), p.add(r) }, LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS: D, LIBRARY_APPLICATION_UPDATE: D, LIBRARY_APPLICATION_ACTIVE_LAUNCH_OPTION_UPDATE: function(e) { let { applicationId: t, branchId: n, launchOptionId: i } = e; C[(0, I.getComboId)(t, n)] = i, g() }, LIBRARY_APPLICATION_ACTIVE_BRANCH_UPDATE: function(e) { let { applicationId: t, branchId: n } = e; if (O[t] === n) return !1; O[t] = n, L() }, LIBRARY_APPLICATIONS_TEST_MODE_ENABLED: function(e) { let { libraryApplications: t } = e; for (let e of t) N[(0, I.getComboId)(e.id, e.branchId)] = e }, DEVELOPER_TEST_MODE_RESET: function() { N = {} } }) }, 293273: function(e, t, n) { "use strict"; n.r(t), n("653041"), n("47120"); var i, r, s, a, o = n("348327"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"), E = n("317381"), I = n("812206"), T = n("676035"), f = n("594190"), S = n("106301"), h = n("406066"), A = n("768419"), m = n("695346"), N = n("581883"), p = n("199902"), O = n("272053"), C = n("77498"), R = n("981631"), g = n("689938"); let L = [], v = {}; function D() { let e = [], t = m.CustomStatusSetting.getSetting(); null != t && ("0" === t.expiresAtMs || new Date(Number(t.expiresAtMs)).getTime() - new Date().getTime() > 0) && e.push((0, T.getActivityFromCustomStatus)(t)); let n = h.default.getActivities(); e.push(...n); let i = O.default.getStream(); null != i && e.push({ type: R.ActivityTypes.STREAMING, ...i }); let r = new Set, s = new Set; d().forEach(v, t => { null != t.application_id && (r.add(t.name), s.add(t.application_id), e.push(t)) }), E.default.getSelfEmbeddedActivities().forEach(t => { var n; let { applicationId: i } = t; if (s.has(i)) return; let r = null === (n = I.default.getApplication(i)) || void 0 === n ? void 0 : n.name; e.push({ type: R.ActivityTypes.PLAYING, name: null != r ? r : g.default.Messages.EMBEDDED_ACTIVITIES_LAUNCHING_ACTIVITY, application_id: i, flags: R.ActivityFlags.EMBEDDED }) }); let a = f.default.getVisibleGame(), o = null != a && null != a.name && r.has(a.name), u = null != a && a.isLauncher, _ = p.default.getCurrentUserActiveStream(); if (null != a && null != a.name && !(o || u && !(null != _))) { var c, N; e.push({ type: R.ActivityTypes.PLAYING, name: a.name, application_id: null !== (N = a.id) && void 0 !== N ? N : null === (c = C.default.getGameByName(a.name)) || void 0 === c ? void 0 : c.id, timestamps: { start: a.start } }) } let D = A.default.getActivity(); null != D && e.push({ type: R.ActivityTypes.LISTENING, ...D }); let M = S.default.getCurrentHangStatus(); if (null != M) { let t = S.default.getCustomHangStatus(); e.push({ type: R.ActivityTypes.HANG_STATUS, name: "Hang Status", state: M, details: null == t ? void 0 : t.status, emoji: null == t ? void 0 : t.emoji }) }!l()(L, e) && (L = e) } class M extends(i = _.default.Store) { initialize() { this.waitFor(f.default, E.default, O.default, p.default, A.default, N.default, S.default, C.default), this.syncWith([h.default, S.default], () => D()) } getActivities() { return L } getPrimaryActivity() { return L[0] } getApplicationActivity(e) { return this.findActivity(t => t.application_id === e) } getCustomStatusActivity() { return this.findActivity(e => e.type === R.ActivityTypes.CUSTOM_STATUS) } findActivity(e) { return L.find(e) } getApplicationActivities() { return v } } a = "LocalActivityStore", (s = "displayName") in(r = M) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new M(c.default, { OVERLAY_INITIALIZE: function(e) { let { localActivities: t } = e; v = { ...t }, D() }, START_SESSION: function() { v = {}, D() }, LOCAL_ACTIVITY_UPDATE: function(e) { let { socketId: t, activity: n } = e; if (l()(v[t], n)) return !1; null != n ? v[t] = n : delete v[t], D() }, RPC_APP_DISCONNECTED: function(e) { let { socketId: t } = e; delete v[t], D() }, RUNNING_GAMES_CHANGE: D, LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS: D, SPOTIFY_PLAYER_STATE: D, SPOTIFY_PLAYER_PLAY: D, STREAMING_UPDATE: D, USER_CONNECTIONS_UPDATE: D, STREAM_START: D, STREAM_STOP: D, USER_SETTINGS_PROTO_UPDATE: D, EMBEDDED_ACTIVITY_OPEN: D, EMBEDDED_ACTIVITY_CLOSE: D, UPDATE_HANG_STATUS: D }) }, 20303: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("757143"); var i, r, s, a, o, l = n("442837"), u = n("433517"), d = n("570140"), _ = n("591759"), c = n("902676"), E = n("616922"); let I = "MaskedLinkStore", T = new Set, f = new Set, S = null === (i = window.GLOBAL_ENV.MEDIA_PROXY_ENDPOINT) || void 0 === i ? void 0 : i.replace("//", ""); function h(e) { let t = (0, c.getHostname)(e); switch (t) { case window.GLOBAL_ENV.CDN_HOST: case window.GLOBAL_ENV.INVITE_HOST: case window.GLOBAL_ENV.GIFT_CODE_HOST: case window.GLOBAL_ENV.GUILD_TEMPLATE_HOST: case S: case location.hostname: return !0; default: return E.SPOTIFY_HOSTNAMES.includes(t) || _.default.isDiscordHostname(t) || T.has(t) } } function A(e) { let t = (0, c.getProtocol)(e); return f.has(t) } class m extends(r = l.default.Store) { initialize() { var e; let t = null !== (e = u.Storage.get(I)) && void 0 !== e ? e : {}; if (Array.isArray(t)) T = new Set(null != t ? Array.from(t) : null), f = new Set; else { let { trustedDomains: e, trustedProtocols: n } = t; T = new Set(null != e ? Array.from(e) : null), f = new Set(null != n ? Array.from(n) : null) } } isTrustedDomain(e) { return h(e) } isTrustedProtocol(e) { return A(e) } } o = "MaskedLinkStore", (a = "displayName") in(s = m) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new m(d.default, { MASKED_LINK_ADD_TRUSTED_DOMAIN: function(e) { let { url: t } = e; if (h(t)) return !1; T.add((0, c.getHostname)(t)), u.Storage.set(I, { trustedDomains: T, trustedProtocols: f }) }, MASKED_LINK_ADD_TRUSTED_PROTOCOL: function(e) { let { url: t } = e; if (A(t)) return !1; f.add((0, c.getProtocol)(t)), u.Storage.set(I, { trustedDomains: T, trustedProtocols: f }) } }) }, 902676: function(e, t, n) { "use strict"; function i(e) { let t = document.createElement("a"); return t.href = e, t.hostname } function r(e) { let t = document.createElement("a"); return t.href = e, t.protocol } n.r(t), n.d(t, { getHostname: function() { return i }, getProtocol: function() { return r } }) }, 131951: function(e, t, n) { "use strict"; let i, r, s, a; n.r(t), n("47120"), n("724458"), n("773603"), n("653041"), n("337869"); var o, l, u, d = n("512722"), _ = n.n(d), c = n("392711"), E = n.n(c), I = n("553813"), T = n.n(I), f = n("442837"), S = n("46973"), h = n("433517"), A = n("846519"), m = n("570140"), N = n("579806"), p = n("887278"), O = n("565885"), C = n("435064"), R = n("779618"), g = n("710845"), L = n("811660"), v = n("646047"), D = n("594190"), M = n("502286"), y = n("869185"), P = n("248062"), U = n("227196"), b = n("294473"), G = n("706629"), w = n("836157"), k = n("166884"), B = n("924371"), V = n("894180"), x = n("86614"), F = n("498600"), H = n("631610"), Y = n("951958"), j = n("529558"), W = n("874785"), K = n("636458"), z = n("441167"), Z = n("338336"), X = n("751571"), Q = n("815016"), q = n("725380"), J = n("581883"), $ = n("626135"), ee = n("12647"), et = n("70956"), en = n("358085"), ei = n("960048"), er = n("998502"), es = n("13140"), ea = n("314897"), eo = n("967368"), el = n("463395"), eu = n("592125"), ed = n("828695"), e_ = n("858340"), ec = n("19780"), eE = n("631768"), eI = n("981631"), eT = n("70722"), ef = n("761274"), eS = n("526761"), eh = n("65154"), eA = n("689938"); function em(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let eN = new g.default("MediaEngineStore"); (u = o || (o = {}))[u.DETACHED = 0] = "DETACHED", u[u.WAITING = 1] = "WAITING", u[u.ATTACHED = 2] = "ATTACHED", u[u.STARTED = 3] = "STARTED", u[u.PLAYING = 4] = "PLAYING", u[u.SILENCE = 5] = "SILENCE"; let ep = "MediaEngineStore", eO = { left: 1, right: 1 }, eC = 5 * et.default.Millis.SECOND; function eR() { return { mode: eI.InputModes.VOICE_ACTIVITY, modeOptions: { threshold: -60, autoThreshold: en.isPlatformEmbedded || __OVERLAY__, vadUseKrisp: !0, vadLeading: 5, vadTrailing: 25, delay: 20, shortcut: [] }, vadUseKrispSettingVersion: 0, ncUseKrispSettingVersion: 0, ncUseKrispjsSettingVersion: 0, mute: !1, deaf: !1, echoCancellation: !0, noiseSuppression: !1, automaticGainControl: !0, noiseCancellation: !0, experimentalEncoders: !1, hardwareH264: !0, hardwareEnabledVersion: 0, silenceWarning: !0, attenuation: 0, attenuateWhileSpeakingSelf: !1, attenuateWhileSpeakingOthers: !0, localMutes: {}, disabledLocalVideos: {}, videoToggleStateMap: {}, localVolumes: {}, localPans: {}, inputVolume: eh.DEFAULT_VOLUME, outputVolume: eh.DEFAULT_VOLUME, inputDeviceId: eh.DEFAULT_DEVICE_ID, outputDeviceId: eh.DEFAULT_DEVICE_ID, videoDeviceId: eh.DEFAULT_DEVICE_ID, qos: !1, qosMigrated: !1, videoHook: eg.supports(eh.Features.VIDEO_HOOK), experimentalSoundshare2: null, openH264: !0, h265Enabled: !0, vadThrehsoldMigrated: !1, aecDumpEnabled: !1 } } let eg = (0, S.initializeMediaEngine)((0, S.determineMediaEngine)()), eL = {}, ev = new Set([eh.MediaEngineContextTypes.DEFAULT]), eD = eg.supports(eh.Features.AUTO_ENABLE), eM = !1, ey = eh.MediaEngineContextTypes.STREAM, eP = { [eh.DEFAULT_DEVICE_ID]: td(eA.default.Messages.NO_INPUT_DEVICES) }, eU = { [eh.DEFAULT_DEVICE_ID]: td(eA.default.Messages.NO_OUTPUT_DEVICES) }, eb = { [eh.DEFAULT_DEVICE_ID]: td(eA.default.Messages.NO_VIDEO_DEVICES) }, eG = !1, ew = !1, ek = !1, eB = !1, eV = !1, ex = eh.DISABLED_DEVICE_ID, eF = !1, eH = !1, eY = !1, ej = !1, eW = null, eK = !1, ez = !1, eZ = !1, eX = !1, eQ = !1, eq = null, eJ = !1, e$ = !1, e0 = !1; X.default.hasPermission(ef.NativePermissionTypes.AUDIO, { showAuthorizationError: !1 }), X.default.hasPermission(ef.NativePermissionTypes.CAMERA, { showAuthorizationError: !1 }); let e1 = new Set, e2 = !1, e3 = !1, e4 = {}, e6 = {}, e7 = 5 * et.default.Millis.SECOND; function e5() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT, t = eL[e]; return null == t && (t = eR(), eL[e] = t), t } function e8(e) { let t = e5(e.context); e.setInputMode(t.mode, { vadThreshold: t.modeOptions.threshold, vadAutoThreshold: t.modeOptions.autoThreshold, vadUseKrisp: t.modeOptions.vadUseKrisp && function() { return eQ || !1 }(), vadLeading: t.modeOptions.vadLeading, vadTrailing: t.modeOptions.vadTrailing, pttReleaseDelay: t.modeOptions.delay }) } function e9(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.DEFAULT_VOLUME; return E().clamp(e, 0, t) } function te(e) { let t = e5(e.context), i = !eD || t.mute || t.deaf; e.context === eh.MediaEngineContextTypes.DEFAULT ? i = i || eG || ew || ek || !X.default.didHavePermission(ef.NativePermissionTypes.AUDIO) : e.context === eh.MediaEngineContextTypes.STREAM && (i = !0), e.setSelfMute(i), e.setSelfDeaf(t.deaf), function(e) { Promise.resolve().then(n.bind(n, "44744")).then(t => { let { default: n } = t; n.updateNativeMute(e) }) }(e.context) } function tt() { var e, t, n; let r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eV, a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : s, o = s; if ((null == o ? void 0 : o.desktopSource) != null && o.desktopSource.id !== (null == a ? void 0 : null === (e = a.desktopSource) || void 0 === e ? void 0 : e.id) && (null != o.desktopSource.soundshareId && (0, en.isWindows)() && p.cancelAttachToProcess(o.desktopSource.soundshareId), eg.setGoLiveSource(null, ey)), (null == o ? void 0 : o.cameraSource) != null && (o.cameraSource.videoDeviceGuid !== (null == a ? void 0 : null === (t = a.cameraSource) || void 0 === t ? void 0 : t.videoDeviceGuid) || o.cameraSource.audioDeviceGuid !== (null == a ? void 0 : null === (n = a.cameraSource) || void 0 === n ? void 0 : n.audioDeviceGuid)) && eg.setGoLiveSource(null, ey), (eV || r) && (ex = (eV = r) ? tc(eb, e5().videoDeviceId) : eh.DISABLED_DEVICE_ID, eg.setVideoInputDevice(ex)), s = a, null != a) { let e = { resolution: a.quality.resolution, frameRate: a.quality.frameRate }; if (null != a.desktopSource) { let { hdrCaptureMode: t } = F.default.getCurrentConfig({ location: "f627ab_2" }, { autoTrackExposure: !1 }), n = e5().videoHook; eg.setGoLiveSource({ desktopDescription: { id: a.desktopSource.id, soundshareId: a.desktopSource.soundshareId, useVideoHook: n, useGraphicsCapture: tr(), useLoopback: i.getExperimentalSoundshare(), useQuartzCapturer: !0, allowScreenCaptureKit: ts(), videoHookStaleFrameTimeoutMs: 500, graphicsCaptureStaleFrameTimeoutMs: eC, hdrCaptureMode: t }, quality: e }, ey) } null != a.cameraSource && eg.setGoLiveSource({ cameraDescription: { videoDeviceGuid: a.cameraSource.videoDeviceGuid, audioDeviceGuid: a.cameraSource.audioDeviceGuid }, quality: e }, ey) } } function tn(e, t, n, i) { var r; let s = null !== (r = null == e ? void 0 : e.soundshareSession) && void 0 !== r ? r : ""; null == e6[s] && (e6[s] = new Set); let a = null != t && !e6[s].has(t); a && e6[s].add(t), (null == t || a) && $.default.track(eI.AnalyticEvents.SOUNDSHARE_FAILED, { soundshare_failure_code: t, soundshare_failure_reason: n, soundshare_failure_will_retry: i, ...(0, M.default)(e) }) } function ti(e) { let t = e5(), n = t.inputDeviceId; if (e.setEchoCancellation(el.default.hasEchoCancellation(n) || t.echoCancellation), e.setNoiseSuppression(el.default.hasNoiseSuppression(n) || t.noiseSuppression), e.setAutomaticGainControl(el.default.hasAutomaticGainControl(n) || t.automaticGainControl), e.setNoiseCancellation(t.noiseCancellation), (0, en.isWeb)()) { let n = t.noiseCancellation ? -150 : -100; e.setSilenceThreshold(n) } } function tr() { return (0, en.isWindows)() && T().satisfies(null === N.default || void 0 === N.default ? void 0 : N.default.os.release, eT.WINDOWS_GRAPHICS_CAPTURE_VERSION) } function ts() { return (0, en.isMac)() && eg.supports(eh.Features.SCREEN_CAPTURE_KIT) && T().satisfies(null === N.default || void 0 === N.default ? void 0 : N.default.os.release, eT.DARWIN_SCKIT_VERSION) } function ta(e) { return k.default.getCurrentConfig({ location: "GoLiveSimulcastEnabled" }, { autoTrackExposure: e }).enableGoLiveSimulcast } let to = new class { start() { !this.started && (this.started = !0, eg.on(S.MediaEngineEvent.Silence, this.handleSilence)) } stop() { this.started && (this.started = !1, null != this.stateChangeTimeout && (clearTimeout(this.stateChangeTimeout), this.stateChangeTimeout = null), eg.removeListener(S.MediaEngineEvent.Silence, this.handleSilence), m.default.dispatch({ type: "AUDIO_INPUT_DETECTED", inputDetected: null })) } update() { let e = e5(); !eK && ec.default.getState() === eI.RTCConnectionStates.RTC_CONNECTED && e.mode === eI.InputModes.VOICE_ACTIVITY && e.silenceWarning ? this.start() : this.stop() } reset() { this.stop(), this.update() } constructor() { em(this, "stateChangeTimeout", void 0), em(this, "noVoiceTimeout", 5e3), em(this, "voiceTimeout", 1500), em(this, "started", !1), em(this, "handleSilence", e => { let t = !e; null != this.stateChangeTimeout && clearTimeout(this.stateChangeTimeout), this.stateChangeTimeout = setTimeout(() => { this.stateChangeTimeout = null, this.started && (m.default.dispatch({ type: "AUDIO_INPUT_DETECTED", inputDetected: t }), e && (ez = !0)) }, t ? this.voiceTimeout : this.noVoiceTimeout) }) } }; function tl(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.MediaEngineContextTypes.DEFAULT, n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = e5(t); return Object.assign(i, e), !__OVERLAY__ && n && h.Storage.set(ep, eL), i } function tu() { !eD && eg.enable().then(() => m.default.dispatch({ type: "MEDIA_ENGINE_SET_AUDIO_ENABLED", enabled: !0, unmute: !1 })) } function td(e) { return { id: eh.DEFAULT_DEVICE_ID, index: 0, name: e, disabled: !0 } } function t_(e, t) { if (0 === e.length) { let e = td(t); return { [e.id]: e } } return E()(e).map(e => ({ id: e.id, index: e.index, name: e.name, disabled: !1 })).keyBy("id").value() } function tc(e, t) { var n; let i = null !== (n = e[t]) && void 0 !== n ? n : E()(e).values().first(); return null != i ? i.id : t } function tE() { var e, t; let n = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], i = null !== (e = J.default.settings.audioContextSettings) && void 0 !== e ? e : { user: {}, stream: {} }; for (let e of Object.keys(i)) { let r = e === eS.ProtoAudioSettingsContextTypes.USER ? eh.MediaEngineContextTypes.DEFAULT : eh.MediaEngineContextTypes.STREAM, s = r === eh.MediaEngineContextTypes.STREAM ? eh.DEFAULT_STREAM_VOLUME : eh.DEFAULT_VOLUME, a = null !== (t = i[e]) && void 0 !== t ? t : {}, { localMutes: o, localVolumes: l } = e5(r); for (let [e, t] of Object.entries(a)) null == (0, q.getPendingAudioSettings)(r, e) && (t.muted ? o[e] = !0 : delete o[e], t.volume !== s ? l[e] = t.volume : delete l[e], eg.eachConnection(n => { n.setLocalVolume(e, t.volume), n.setLocalMute(e, t.muted) }, r)); if (n) for (let e of new Set([...Object.keys(o), ...Object.keys(l)])) null == a[e] && (delete o[e], delete l[e], eg.eachConnection(t => { t.setLocalVolume(e, s), t.setLocalMute(e, !1) }, r)); tl({ localMutes: o, localVolumes: l }, r) } } function tI(e) { if (null == i) return eN.info("Error: trying to get soundshare id before MediaEngineStore is instantiated."), { soundshareId: null, soundshareSession: "" }; { let t = i.getExperimentalSoundshare() ? e : ee.default.getAudioPid(e), n = ""; return null != t && (n = ee.default.generateSessionFromPid(t)), { soundshareId: t, soundshareSession: n } } } function tT(e, t) { (0, en.isWindows)() && p.attachToProcess(e, { soundshare_session: t }).then(t => { null != t && !D.default.shouldContinueWithoutElevatedProcessForPID(e) && m.default.wait(() => { m.default.dispatch({ type: "MEDIA_ENGINE_SOUNDSHARE_FAILED", errorMessage: t }) }) }) } function tf() { let e = eh.MediaEngineContextTypes.DEFAULT, { videoToggleStateMap: t } = e5(e); for (let [e, n] of Object.entries(t)) n === eI.VideoToggleState.AUTO_PROBING && delete t[e]; tl({ videoToggleStateMap: t }, e, !1) } function tS(e) { let t = e5(); $.default.track(eI.AnalyticEvents.VOICE_PROCESSING, { echo_cancellation: t.echoCancellation, noise_cancellation: t.noiseCancellation, noise_suppression: t.noiseSuppression, automatic_gain_control: t.automaticGainControl, location: e }) } function th() { let e = e5(), t = e.inputDeviceId, n = el.default.hasEchoCancellation(t) || e.echoCancellation, i = el.default.hasNoiseSuppression(t) || e.noiseSuppression, r = el.default.hasAutomaticGainControl(t) || e.automaticGainControl, s = e.noiseCancellation; eg.setLoopback(e3, { echoCancellation: n, noiseSuppression: i, automaticGainControl: r, noiseCancellation: s }) } function tA() { return eQ || !1 } async function tm() { try { await er.default.ensureModule("discord_krisp"), er.default.requireModule("discord_krisp"), eQ = !0, i.emitChange() } catch (t) { eN.warn("Failed to load Krisp module: ".concat(t.message)), ei.default.captureException(t); let e = eh.NoiseCancellerError.INITIALIZED; if (t.message.includes(": ")) { let n = parseInt(t.message.substring(t.message.indexOf(": ") + 1)); e = isNaN(n) || 0 === n ? eh.NoiseCancellerError.INITIALIZED : n } $.default.track(eI.AnalyticEvents.VOICE_PROCESSING, { noise_canceller_error: e }), tl({ noiseCancellation: !1 }) } finally { eX = !1 } } function tN(e) { let { section: t } = e; return t === eI.UserSettingsSections.VOICE && tu(), !1 } class tp extends(l = f.default.Store) { initialize() { eg.on(S.MediaEngineEvent.Connection, e => { let { maxSyncDelayOverride: t } = Y.default.getCurrentConfig({ location: "f627ab_3" }, { autoTrackExposure: !1 }); t > 0 && eg.setMaxSyncDelayOverride(t), e8(e), te(e), ti(e); let n = e5(); e.setAttenuation(n.attenuation, n.attenuateWhileSpeakingSelf, n.attenuateWhileSpeakingOthers), e.setQoS(n.qos), e.setExperimentalEncoders(n.experimentalEncoders), e.setHardwareH264(n.hardwareH264); let { useExperimentalRateControl: r } = K.default.getCurrentConfig({ location: "f627ab_4" }, { autoTrackExposure: !1 }); r && e.setExperimentFlag(eh.ExperimentFlags.VIDEOTOOLBOX_RATE_CONTROL, !0); let a = ec.default.getGuildId(), { muteBeforeProcessing: o, pttBeforeProcessing: l, skipEncode: u } = (null != a ? G.default : b.default).getCurrentConfig({ location: "setupMediaEngine", ...null != a && { guildId: a } }, { autoTrackExposure: !0 }); o && e.setExperimentFlag(eh.ExperimentFlags.MUTE_BEFORE_PROCESSING, !0), l && e.setExperimentFlag(eh.ExperimentFlags.PTT_BEFORE_PROCESSING, !0), u && e.setExperimentFlag(eh.ExperimentFlags.SKIP_ENCODE, !0); let { resetOnErrors: d, fallbackOnErrors: _, fallbackOnConsecutiveErrors: c } = W.default.getCurrentConfig({ location: "setupMediaEngine" }, { autoTrackExposure: !0 }); d && e.setExperimentFlag(eh.ExperimentFlags.RESET_DECODER_ON_ERRORS, !0), _ && e.setExperimentFlag(eh.ExperimentFlags.SOFTWARE_FALLBACK_ON_ERRORS, !0), c && e.setExperimentFlag(eh.ExperimentFlags.SOFTWARE_FALLBACK_ON_CONSECUTIVE_ERRORS, !0); { (0, en.isWindows)() && e.setExperimentFlag(eh.ExperimentFlags.SIGNAL_H265_DECODE_SUPPORT, !0); let { signalH265SupportNvenc: t } = x.default.getCurrentConfig({ location: "f627ab_9" }, { autoTrackExposure: !0 }); t && n.hardwareH264 && e.setExperimentFlag(eh.ExperimentFlags.SIGNAL_H265_SUPPORT, !0); let { signalH265SupportAMD: i } = V.default.getCurrentConfig({ location: "f627ab_9" }, { autoTrackExposure: !0 }); i && n.hardwareH264 && e.setExperimentFlag(eh.ExperimentFlags.SIGNAL_H265_SUPPORT, !0); let { signalH265SupportMacOS: r } = B.default.getCurrentConfig({ location: "f627ab_8" }, { autoTrackExposure: !0 }); if (r) { var E; (0, en.isMac)() && (null === (E = window.DiscordNative) || void 0 === E ? void 0 : E.os.arch) === "arm64" && (n.hardwareH264 ? e.setExperimentFlag(eh.ExperimentFlags.SIGNAL_H265_SUPPORT, !0) : e.setExperimentFlag(eh.ExperimentFlags.SIGNAL_H265_DECODE_SUPPORT, !0)) } } e.context === eh.MediaEngineContextTypes.STREAM && ta(!0) && e.setExperimentFlag(eh.ExperimentFlags.GOLIVE_SIMULCAST, !0); let { signalAV1Support: I } = P.default.getCurrentConfig({ location: "f627ab_10" }, { autoTrackExposure: !0 }); I && e.setExperimentFlag(eh.ExperimentFlags.SIGNAL_AV1_SUPPORT, !0); let { hardwareDecodeAV1: T } = y.default.getCurrentConfig({ location: "setupMediaEngine" }, { autoTrackExposure: !0 }); T && e.setExperimentFlag(eh.ExperimentFlags.SIGNAL_AV1_HARDWARE_DECODE, !0); let { allowSettingFullbandAndroid: f } = H.default.getCurrentConfig({ location: "f627ab_14" }, { autoTrackExposure: !0 }); if (f && eg.setHasFullbandPerformance((0, L.hasPerformanceForKrispFullband)()), e.setRemoteAudioHistory(0), (0, R.default)(i)) { let t = C.default.getSettings(); e.setExperimentFlag(eh.ExperimentFlags.STREAMER_CLIP, t.clipsEnabled); let { enableViewerClipping: n } = z.default.getCurrentConfig({ location: "f627ab_15" }, { autoTrackExposure: !1 }); e.setViewerSideClip(n), e.setClipsKeyFrameInterval(eh.VIEWERSIDE_CLIP_KFI_MS); let { allowQualityDecoupling: i } = O.default.getCurrentConfig({ location: "MediaEngineStore_setupMediaEngine" }, { autoTrackExposure: !0 }); e.setQualityDecoupling(i) } for (let t of (n = e5(e.context), e.setPostponeDecodeLevel(100), Object.keys(n.localMutes))) t !== ea.default.getId() && e.setLocalMute(t, n.localMutes[t]); for (let t of Object.keys(n.localVolumes)) t !== ea.default.getId() && e.setLocalVolume(t, n.localVolumes[t]); for (let t of Object.keys(n.localPans)) { let i = n.localPans[t]; e.setLocalPan(t, i.left, i.right) } for (let t of Object.keys(n.disabledLocalVideos)) e.setLocalVideoDisabled(t, n.disabledLocalVideos[t]); e.on(S.BaseConnectionEvent.Speaking, (t, n) => { m.default.dispatch({ type: "SPEAKING", context: e.context, userId: t, speakingFlags: n }) }), e.context === eh.MediaEngineContextTypes.DEFAULT && (eH = !1, e.on(S.BaseConnectionEvent.SpeakingWhileMuted, () => { eH = !0, i.emitChange() })), e.on(S.BaseConnectionEvent.DesktopSourceEnd, () => { m.default.dispatch({ type: "MEDIA_ENGINE_SET_GO_LIVE_SOURCE", settings: { context: e.context } }) }), e.on(S.BaseConnectionEvent.SoundshareAttached, () => { (null == s ? void 0 : s.desktopSource) != null && $.default.track(eI.AnalyticEvents.SOUNDSHARE_ATTACHED, (0, M.default)(null == s ? void 0 : s.desktopSource)) }), e.on(S.BaseConnectionEvent.SoundshareFailed, e => { let { failureCode: t, failureReason: n, willRetry: i } = e; tn(null == s ? void 0 : s.desktopSource, t, n, i) }), e.on(S.BaseConnectionEvent.SoundshareSpeaking, () => { (null == s ? void 0 : s.desktopSource) != null && ($.default.track(eI.AnalyticEvents.SOUNDSHARE_TRANSMITTING, (0, M.default)(null == s ? void 0 : s.desktopSource)), null != e_.default.getHookError(eI.MediaEngineHookTypes.SOUND) && m.default.wait(() => m.default.dispatch({ type: "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" }))) }); let h = new A.Timeout; e.on(S.BaseConnectionEvent.SoundshareTrace, e => { switch (e.type) { case "soundshare_attach_requested": h.start(e7, () => { m.default.dispatch({ type: "MEDIA_ENGINE_SOUNDSHARE_FAILED", errorMessage: "Sound Hook Failed" }) }); break; case "soundshare_recv_failed": let t = e.reason, n = e.code, i = e.retry; (null == s ? void 0 : s.desktopSource) != null && (tn(null == s ? void 0 : s.desktopSource, n, t, i), !i && (h.stop(), m.default.wait(() => m.default.dispatch({ type: "MEDIA_ENGINE_SOUNDSHARE_FAILED", errorMessage: t, errorCode: n })))); break; case "soundshare_state_transition": 4 === e.newState && (h.stop(), m.default.wait(() => m.default.dispatch({ type: "MEDIA_ENGINE_SOUNDSHARE_TRANSMITTING" }))) } }), e.on(S.BaseConnectionEvent.InteractionRequired, e => { m.default.dispatch({ type: "MEDIA_ENGINE_INTERACTION_REQUIRED", required: e }) }), e.on(S.BaseConnectionEvent.VideoHookInitialize, (e, t, n, i, r, a) => { (null == s ? void 0 : s.desktopSource) != null && $.default.track(eI.AnalyticEvents.VIDEOHOOK_INITIALIZED, { backend: e, format: t, framebuffer_format: n, sample_count: i, success: r, reinitialization: a, ...(0, M.default)(null == s ? void 0 : s.desktopSource) }) }), e.on(S.BaseConnectionEvent.NoiseCancellationError, e => { eN.warn("noisecancellererror event: ".concat(e)), eJ = !0, $.default.track(eI.AnalyticEvents.VOICE_PROCESSING, { noise_canceller_error: e }), m.default.dispatch({ type: "AUDIO_SET_NOISE_SUPPRESSION", enabled: !0 }), m.default.dispatch({ type: "AUDIO_SET_NOISE_CANCELLATION", enabled: !1 }), m.default.dispatch({ type: "MEDIA_ENGINE_NOISE_CANCELLATION_ERROR", code: e }) }), e.on(S.BaseConnectionEvent.VoiceActivityDetectorError, e => { eN.warn("voiceactivitydetectorerror event: ".concat(e)), $.default.track(eI.AnalyticEvents.VOICE_PROCESSING, { noise_canceller_error: e }), m.default.dispatch({ type: "AUDIO_SET_MODE", context: eh.MediaEngineContextTypes.DEFAULT, mode: eI.InputModes.VOICE_ACTIVITY, options: { ...e5(eh.MediaEngineContextTypes.DEFAULT).modeOptions, vadUseKrisp: !1 } }), m.default.dispatch({ type: "MEDIA_ENGINE_VOICE_ACTIVITY_DETECTION_ERROR", code: e }) }), e.on(S.BaseConnectionEvent.VideoState, t => { m.default.dispatch({ type: "MEDIA_ENGINE_VIDEO_STATE_CHANGED", videoState: t, context: e.context }) }), e.on(S.BaseConnectionEvent.Destroy, () => { h.stop() }), e.setBitRate(eo.default.bitrate), e.applyVideoQualityMode(eE.default.mode) }), eg.on(S.MediaEngineEvent.DeviceChange, (e, t, n) => { m.default.dispatch({ type: "MEDIA_ENGINE_DEVICES", inputDevices: e, outputDevices: t, videoDevices: n }) }), eg.on(S.MediaEngineEvent.VolumeChange, (e, t) => { m.default.dispatch({ type: "AUDIO_VOLUME_CHANGE", inputVolume: e, outputVolume: t }) }), eg.on(S.MediaEngineEvent.DesktopSourceEnd, () => { m.default.dispatch({ type: "MEDIA_ENGINE_SET_GO_LIVE_SOURCE", settings: null }) }), eg.on(S.MediaEngineEvent.AudioPermission, e => { e0 = !0, m.default.dispatch({ type: "MEDIA_ENGINE_PERMISSION", kind: "audio", granted: e }) }), eg.on(S.MediaEngineEvent.VideoPermission, e => { m.default.dispatch({ type: "MEDIA_ENGINE_PERMISSION", kind: "video", granted: e }) }), eg.on(S.MediaEngineEvent.WatchdogTimeout, async () => { let e; try { await ee.default.submitLiveCrashReport({ message: { message: "Voice Watchdog Timeout" } }) } catch (t) { "number" == typeof t.status && (e = t.status) } eN.warn("Watchdog timeout, report submission status: ".concat(null != e ? e : 200)), $.default.track(eI.AnalyticEvents.VOICE_WATCHDOG_TIMEOUT, { minidump_submission_error: e }) }), eg.on(S.MediaEngineEvent.VideoInputInitialized, e => { $.default.track(eI.AnalyticEvents.VIDEO_INPUT_INITIALIZED, { device_name: e.description.name, time_to_first_frame_ms: e.initializationTimerExpired ? null : Math.round(e.timeToFirstFrame * et.default.Millis.SECOND), timed_out: e.initializationTimerExpired, activity: e.entropy }) }), eg.on(S.MediaEngineEvent.ClipsRecordingRestartNeeded, () => { m.default.dispatch({ type: "CLIPS_RESTART" }) }), eg.on(S.MediaEngineEvent.ClipsInitFailure, (e, t) => { m.default.wait(() => { m.default.dispatch({ type: "CLIPS_INIT_FAILURE", errMsg: e, applicationName: t }) }) }), eg.on(S.MediaEngineEvent.ClipsRecordingEnded, (e, t) => { var n, i; (null == a ? void 0 : null === (n = a.desktopSource) || void 0 === n ? void 0 : n.id) === e && (null != t && (null == s ? void 0 : null === (i = s.desktopSource) || void 0 === i ? void 0 : i.soundshareId) !== t && p.cancelAttachToProcess(t), a = null) }), to.reset(), ! function() { var e; let t = h.Storage.get("audio"); null != t && (h.Storage.set(ep, { [eh.MediaEngineContextTypes.DEFAULT]: t }), h.Storage.remove("audio")), eL = null !== (e = h.Storage.get(ep)) && void 0 !== e ? e : {}, E().each(eL, e => { if (E().defaultsDeep(e, eR()), null != e.modeOptions && "string" == typeof e.modeOptions.shortcut && (e.modeOptions.shortcut = (0, es.toCombo)(e.modeOptions.shortcut)), null != e.modeOptions && 4 !== e.vadUseKrispSettingVersion && (e.vadUseKrispSettingVersion = 4, e.modeOptions.vadUseKrisp = !0), !e.qosMigrated && (e.qosMigrated = !0, e.qos = !1), !e.vadThrehsoldMigrated) { var t; e.vadThrehsoldMigrated = !0, (null === (t = e.modeOptions) || void 0 === t ? void 0 : t.threshold) === -40 && (e.modeOptions.threshold = -60) }(0, en.isWeb)() ? 1 !== e.ncUseKrispjsSettingVersion && (e.ncUseKrispjsSettingVersion = 1, e.noiseSuppression = !1, e.noiseCancellation = !0): 1 !== e.ncUseKrispSettingVersion && (e.ncUseKrispSettingVersion = 1, e.noiseSuppression = !1, e.noiseCancellation = !0), 1 !== e.hardwareEnabledVersion && (e.hardwareH264 = !0, e.hardwareEnabledVersion = 1) }), function() { let e = e5(); eg.setAudioInputDevice(e.inputDeviceId), eg.setAudioOutputDevice(e.outputDeviceId), tt(), eg.setInputVolume(e.inputVolume), eg.setOutputVolume(e.outputVolume), eg.setH264Enabled(e.openH264), eg.setAv1Enabled(e.hardwareH264), eg.setH265Enabled(e.hardwareH264), eg.setAecDump(e.aecDumpEnabled) }() }(), !(0, en.isDesktop)() || __OVERLAY__ || eX || eQ ? (0, en.isWeb)() && eg.supports(eh.Features.NOISE_CANCELLATION) ? (eQ = !0, i.emitChange()) : (0, en.isWeb)() && tl({ noiseCancellation: !1 }) : (eX = !0, tm()), tf(), e4 = { [eh.Features.VIDEO]: eg.supports(eh.Features.VIDEO), [eh.Features.DESKTOP_CAPTURE]: eg.supports(eh.Features.DESKTOP_CAPTURE), [eh.Features.HYBRID_VIDEO]: eg.supports(eh.Features.HYBRID_VIDEO) }, this.waitFor(ea.default, el.default, eu.default, e_.default, ec.default, D.default, X.default.storage, J.default, ed.default, C.default) } supports(e) { return eg.supports(e) } supportsInApp(e) { return e4[e] || eg.supports(e) } isSupported() { return eg.supported() } isExperimentalEncodersSupported() { return eg.supports(eh.Features.EXPERIMENTAL_ENCODERS) } isNoiseSuppressionSupported() { return eg.supports(eh.Features.NOISE_SUPPRESSION) } isNoiseCancellationSupported() { return eQ || !1 } isNoiseCancellationError() { return eJ } isAutomaticGainControlSupported() { return eg.supports(eh.Features.AUTOMATIC_GAIN_CONTROL) } isAdvancedVoiceActivitySupported() { return eQ || !1 } isAecDumpSupported() { return eg.supports(eh.Features.AEC_DUMP) } isSimulcastSupported() { return eg.supports(eh.Features.VIDEO) && eg.supports(eh.Features.SIMULCAST) } getAecDump() { return e5().aecDumpEnabled } getMediaEngine() { return eg } getVideoComponent() { return eg.supports(eh.Features.DIRECT_VIDEO) && eg.setUseDirectVideo(!0), eg.Video } getCameraComponent() { return eg.supports(eh.Features.DIRECT_VIDEO) && eg.setUseDirectVideo(!0), eg.Camera } isEnabled() { return eD } isMute() { return this.isSelfMute() || eG } isDeaf() { return this.isSelfDeaf() || eB } hasContext(e) { return null != eL[e] } isSelfMutedTemporarily() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return e === eh.MediaEngineContextTypes.DEFAULT && ew } isSelfMute() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return !this.isEnabled() || e5(e).mute || !X.default.didHavePermission(ef.NativePermissionTypes.AUDIO) || this.isSelfDeaf(e) || e === eh.MediaEngineContextTypes.DEFAULT && ek } shouldSkipMuteUnmuteSound() { let { airpodsMuteSupported: e } = U.default.getCurrentConfig({ location: "shouldSkipMuteUnmuteSound" }, { autoTrackExposure: !0 }); return !!e && eF } notifyMuteUnmuteSoundWasSkipped() { eF = !1 } isHardwareMute() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return !this.isMute() && !this.isSelfMutedTemporarily(e) && el.default.isHardwareMute(this.getInputDeviceId()) } isSelfDeaf() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return !this.isSupported() || e5(e).deaf } isVideoEnabled() { return eV && ej } isVideoAvailable() { return Object.values(eb).some(e => { let { disabled: t } = e; return !t }) } isScreenSharing() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.STREAM; return ey === e && null != s } isSoundSharing() { var e; let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.STREAM; return ey === t && null != s && (null === (e = s.desktopSource) || void 0 === e ? void 0 : e.soundshareId) != null } isLocalMute(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.MediaEngineContextTypes.DEFAULT; return e !== ea.default.getId() && (e5(t).localMutes[e] || !1) } supportsDisableLocalVideo() { return eg.supports(eh.Features.DISABLE_VIDEO) } isLocalVideoDisabled(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.MediaEngineContextTypes.DEFAULT; return null !== (t = e5(n).disabledLocalVideos[e]) && void 0 !== t && t } getVideoToggleState(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.MediaEngineContextTypes.DEFAULT; return null !== (t = e5(n).videoToggleStateMap[e]) && void 0 !== t ? t : eI.VideoToggleState.NONE } isLocalVideoAutoDisabled(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.MediaEngineContextTypes.DEFAULT; return t === eh.MediaEngineContextTypes.DEFAULT && e1.has(e) } isAnyLocalVideoAutoDisabled() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return e === eh.MediaEngineContextTypes.DEFAULT && e1.size > 0 } isMediaFilterSettingLoading() { return e$ } isNativeAudioPermissionReady() { return e0 } getGoLiveSource() { return s } getGoLiveContext() { return ey } getLocalPan(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.MediaEngineContextTypes.DEFAULT, n = e5(t).localPans[e]; return null != n ? n : eO } getLocalVolume(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eh.MediaEngineContextTypes.DEFAULT, n = t === eh.MediaEngineContextTypes.STREAM ? eh.DEFAULT_STREAM_VOLUME : eh.DEFAULT_VOLUME, i = e5(t).localVolumes[e]; return null != i ? i : n } getInputVolume() { return e5().inputVolume } getOutputVolume() { return e5().outputVolume } getMode() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return e5(e).mode } getModeOptions() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return e5(e).modeOptions } getShortcuts() { let e = {}; return E().each(eL, (t, n) => { let { mode: i, modeOptions: { shortcut: r } } = t; i === eI.InputModes.PUSH_TO_TALK && ev.has(n) && (e[n] = r) }), e } getInputDeviceId() { return tc(eP, e5().inputDeviceId) } getOutputDeviceId() { return tc(eU, e5().outputDeviceId) } getVideoDeviceId() { return tc(eb, e5().videoDeviceId) } getInputDevices() { return eP } getOutputDevices() { return eU } getVideoDevices() { return eb } getEchoCancellation() { let e = e5(); return el.default.hasEchoCancellation(e.inputDeviceId) || e.echoCancellation } getH265Enabled() { return e5().h265Enabled } getLoopback() { return eg.getLoopback() } getNoiseSuppression() { let e = e5(); return el.default.hasNoiseSuppression(e.inputDeviceId) || e.noiseSuppression } getAutomaticGainControl() { let e = e5(); return el.default.hasAutomaticGainControl(e.inputDeviceId) || e.automaticGainControl } getNoiseCancellation() { return e5().noiseCancellation } getExperimentalEncoders() { return e5().experimentalEncoders } getHardwareH264() { return e5().hardwareH264 } getEnableSilenceWarning() { return e5().silenceWarning } getDebugLogging() { return eg.getDebugLogging() } getQoS() { return e5().qos } getAttenuation() { return e5().attenuation } getAttenuateWhileSpeakingSelf() { return e5().attenuateWhileSpeakingSelf } getAttenuateWhileSpeakingOthers() { return e5().attenuateWhileSpeakingOthers } getAudioSubsystem() { return eg.getAudioSubsystem() } getSettings() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT; return e5(e) } getState() { return { settingsByContext: eL, inputDevices: eP, outputDevices: eU, appSupported: e4, krispModuleLoaded: eQ, goLiveSource: s, goLiveContext: ey } } getInputDetected() { return eW } getNoInputDetectedNotice() { return ez } getPacketDelay() { return en.isPlatformEmbedded || this.getMode() !== eI.InputModes.VOICE_ACTIVITY ? 0 : this.getModeOptions().vadLeading } setCanHavePriority(e, t) { eg.eachConnection(n => n.setCanHavePriority(e, t)) } isInteractionRequired() { return eM } getVideoHook() { return e5().videoHook } supportsVideoHook() { return eg.supports(eh.Features.VIDEO_HOOK) } getExperimentalSoundshare() { let e = e5().experimentalSoundshare2; return this.supportsExperimentalSoundshare() && (null == e || e) } supportsExperimentalSoundshare() { return eg.supports(eh.Features.EXPERIMENTAL_SOUNDSHARE) && T().satisfies(null === N.default || void 0 === N.default ? void 0 : N.default.os.release, eT.WINDOWS_SOUNDSHARE_VERSION) } getOpenH264() { return e5().openH264 } getEverSpeakingWhileMuted() { return eH } supportsScreenSoundshare() { return (0, en.isMac)() && eg.supports(eh.Features.SOUNDSHARE) && T().satisfies(null === N.default || void 0 === N.default ? void 0 : N.default.os.release, eT.DARWIN_SCKIT_AUDIO_VERSION) && ts() || (0, en.isWindows)() && eg.supports(eh.Features.SCREEN_SOUNDSHARE) && this.getExperimentalSoundshare() } getVideoStreamParameters() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : eh.MediaEngineContextTypes.DEFAULT, t = this.supports(eh.Features.VIDEO) ? [{ rid: "100", type: e === eh.MediaEngineContextTypes.DEFAULT ? eh.MediaTypes.VIDEO : eh.MediaTypes.SCREEN, quality: 100 }] : []; return this.isSimulcastSupported() && (e === eh.MediaEngineContextTypes.DEFAULT || ta(!1)) && t.push({ rid: "50", type: e === eh.MediaEngineContextTypes.DEFAULT ? eh.MediaTypes.VIDEO : eh.MediaTypes.SCREEN, quality: 50 }), t } getSupportedSecureFramesProtocolVersion(e) { var t; let n = eg.getSupportedSecureFramesProtocolVersion(), i = j.SecureFramesUserExperiment.getCurrentConfig({ location: "MediaEngineStore" }), r = null != e ? j.SecureFramesGuildExperiment.getCurrentConfig({ guildId: e, location: "MediaEngineStore" }) : null, s = i.canSupportSecureFrames || (null == r ? void 0 : r.canSupportSecureFrames), a = i.canSupportMls || (null == r ? void 0 : r.canSupportMls), o = Math.max(i.protocolVersionFloor, null !== (t = null == r ? void 0 : r.protocolVersionFloor) && void 0 !== t ? t : 0); return s && n % 100 >= o ? a ? n : n % 100 : 0 } hasClipsSource() { return null != a } } em(tp, "displayName", "MediaEngineStore"), i = new tp(m.default, { VOICE_CHANNEL_SELECT: function(e) { let { guildId: t, channelId: n, currentVoiceChannelId: i, video: r } = e; if (i !== n && tt(r, null), null != t || null == n) { eZ = !1; return } if (eZ) return; eZ = !0; let s = e5(); (s.mute || s.deaf) && (tl({ deaf: !1, mute: !1 }), eg.eachConnection(te)) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => r === t.sessionId ? (eG = t.mute || t.suppress, eB = t.deaf, eg.eachConnection(te), tt(!(null != t.guildId && null != t.channelId && null != eq && eq !== t.channelId) && eV), eq = t.channelId, !0) : (!__OVERLAY__ && t.userId === ea.default.getId() && null == ec.default.getChannelId() && tt(!1, null), e), !1) }, CONNECTION_OPEN: function(e) { r = e.sessionId, eG = !1, eB = !1, (0, Q.shouldReadWriteAudioSettings)() && tE() }, CONNECTION_CLOSED: function() { r = null }, RTC_CONNECTION_STATE: function(e) { switch (e.state) { case eI.RTCConnectionStates.CONNECTING: tu(); break; case eI.RTCConnectionStates.RTC_CONNECTING: eK = !1, ez = !1; break; case eI.RTCConnectionStates.RTC_CONNECTED: tt(); break; case eI.RTCConnectionStates.DISCONNECTED: (function() { if (0 === e1.size) return; let e = eh.MediaEngineContextTypes.DEFAULT, { disabledLocalVideos: t } = e5(e); e1.forEach(n => { _()(t[n], "If you are auto-disabled, then you are also disabled."), delete t[n], eg.eachConnection(e => e.setLocalVideoDisabled(n, !1), e) }), e1.clear(), tl({ disabledLocalVideos: t }, e, !1) })(), tf() } to.update() }, AUDIO_SET_TEMPORARY_SELF_MUTE: function(e) { let { mute: t } = e; ew = t, eg.eachConnection(te) }, AUDIO_TOGGLE_SELF_MUTE: function(e) { let { context: t, skipMuteUnmuteSoundEffect: n } = e, { mute: i, deaf: r } = e5(t); if (t === eh.MediaEngineContextTypes.DEFAULT && (X.default.requestPermission(ef.NativePermissionTypes.AUDIO), ek)) return !1; !(i = !r && !i) && (r = !1), n && (eF = !0), tl({ mute: i, deaf: r }, t), eg.eachConnection(te) }, AUDIO_SET_SELF_MUTE: function(e) { let { context: t, mute: n } = e; tl({ mute: n }, t), eg.eachConnection(te) }, AUDIO_TOGGLE_SELF_DEAF: function(e) { let { context: t } = e; tl({ deaf: !e5(t).deaf }, t), eg.eachConnection(te) }, AUDIO_TOGGLE_LOCAL_MUTE: function(e) { let { context: t, userId: n } = e; if (n === ea.default.getId()) return; let { localMutes: i } = e5(t); i[n] ? delete i[n] : i[n] = !0, tl({ localMutes: i }, t), eg.eachConnection(e => e.setLocalMute(n, i[n] || !1), t) }, AUDIO_SET_LOCAL_VIDEO_DISABLED: function(e) { var t, n, i, r, s, a, o; let { context: l, userId: u, videoToggleState: d, persist: c, isAutomatic: E } = e; _()(!(c && E), "These are not allowed to both be true."); let I = d === eI.VideoToggleState.DISABLED, { disabledLocalVideos: T } = e5(l), f = null !== (t = T[u]) && void 0 !== t && t, S = e1.has(u), h = d === eI.VideoToggleState.AUTO_ENABLED || d === eI.VideoToggleState.MANUAL_ENABLED; eN.info("disableVideo=".concat(I, " currentlyDisabled=").concat(f, " currentlyAutoDisabled=").concat(S, ", isVideoShown=").concat(h)), _()(!(S && !f), "If you are auto-disabled, then you are also disabled."); let A = I !== f, m = l === eh.MediaEngineContextTypes.DEFAULT, N = E && A && m, p = c && A && m; eN.info("changed=".concat(A, " isDefaultContext=").concat(m, " isUpdateCausedByVideoHealthManager=").concat(N, " isManualToggleByUser=").concat(p)); let { videoToggleStateMap: O } = e5(l); if (O[u] === eI.VideoToggleState.AUTO_PROBING && d === eI.VideoToggleState.AUTO_ENABLED && (0, Z.default)(u, I ? eh.VideoToggleReason.AUTO_DISABLE : eh.VideoToggleReason.AUTO_ENABLE, h), O[u] = d, tl({ videoToggleStateMap: O }, l, c), d === eI.VideoToggleState.AUTO_PROBING ? null === (n = ec.default.getRTCConnection()) || void 0 === n || n.pauseStatsCollectionForUser(u, !0) : null === (i = ec.default.getRTCConnection()) || void 0 === i || i.pauseStatsCollectionForUser(u, !1), !e2 && (eN.info("isAutoDisableAllowed=".concat(e2, " - disabling VideoHealthManager")), null === (s = ec.default.getRTCConnection()) || void 0 === s || null === (r = s.getVideoHealthManager()) || void 0 === r || r.disable()), N) { if (!I && !S || I && !e2) return; (0, Z.default)(u, I ? eh.VideoToggleReason.AUTO_DISABLE : eh.VideoToggleReason.AUTO_ENABLE, h), I ? e1.add(u) : e1.delete(u) } else p && (S && !I ? (eN.info("disallowing auto-disable for this session because of manual override by user"), e2 = !1, null === (o = ec.default.getRTCConnection()) || void 0 === o || null === (a = o.getVideoHealthManager()) || void 0 === a || a.disable(), (0, Z.default)(u, eh.VideoToggleReason.MANUAL_REENABLE, h)) : (0, Z.default)(u, I ? eh.VideoToggleReason.MANUAL_DISABLE : eh.VideoToggleReason.MANUAL_ENABLE, h)); m && !I && e1.delete(u), I ? T[u] = !0 : delete T[u], tl({ disabledLocalVideos: T }, l, c), eg.eachConnection(e => { var t; return e.setLocalVideoDisabled(u, null !== (t = T[u]) && void 0 !== t && t) }, l) }, AUDIO_SET_LOCAL_VOLUME: function(e) { let { context: t, userId: n, volume: i } = e; if (n === ea.default.getId()) return; let r = t === eh.MediaEngineContextTypes.STREAM ? eh.DEFAULT_STREAM_VOLUME : eh.DEFAULT_VOLUME, { localVolumes: s } = e5(t); i === r ? delete s[n] : s[n] = i, tl({ localVolumes: s }, t), eg.eachConnection(e => e.setLocalVolume(n, i), t) }, AUDIO_SET_LOCAL_PAN: function(e) { let { context: t, userId: n, left: i, right: r } = e, { localPans: s } = e5(t); s[n] = { left: i, right: r }, tl({ localPans: s }, t), eg.eachConnection(e => e.setLocalPan(n, i, r), t) }, AUDIO_SET_MODE: function(e) { let { context: t, mode: n, options: i } = e; tl({ mode: n, modeOptions: i }, t), eg.eachConnection(e8), to.update() }, AUDIO_SET_INPUT_VOLUME: function(e) { let { volume: t } = e; tl({ inputVolume: e9(t) }), eg.setInputVolume(t) }, AUDIO_SET_OUTPUT_VOLUME: function(e) { let { volume: t } = e; tl({ outputVolume: t }), eg.setOutputVolume(t) }, AUDIO_SET_INPUT_DEVICE: function(e) { let { id: t } = e; tl({ inputDeviceId: t = tc(eP, t) }), eg.setAudioInputDevice(t) }, AUDIO_SET_OUTPUT_DEVICE: function(e) { let { id: t } = e; tl({ outputDeviceId: t = tc(eU, t) }), eg.setAudioOutputDevice(t) }, AUDIO_SET_ECHO_CANCELLATION: function(e) { let t = tl({ echoCancellation: e.enabled }); eg.eachConnection(e => e.setEchoCancellation(t.echoCancellation)), th(), tS(e.location) }, AUDIO_SET_LOOPBACK: function(e) { let { enabled: t } = e; return e3 = t, th() }, AUDIO_SET_NOISE_SUPPRESSION: function(e) { let t = tl({ noiseSuppression: e.enabled }); eg.eachConnection(e => e.setNoiseSuppression(t.noiseSuppression)), th(), tS(e.location) }, AUDIO_SET_AUTOMATIC_GAIN_CONTROL: function(e) { let t = tl({ automaticGainControl: e.enabled }); eg.eachConnection(e => e.setAutomaticGainControl(t.automaticGainControl)), th(), tS(e.location) }, AUDIO_SET_NOISE_CANCELLATION: function(e) { let t = tl({ noiseCancellation: e.enabled }); eg.eachConnection(e => e.setNoiseCancellation(t.noiseCancellation)), th(), tS(e.location) }, AUDIO_SET_DISPLAY_SILENCE_WARNING: function(e) { tl({ silenceWarning: e.enabled }), to.update() }, AUDIO_SET_DEBUG_LOGGING: function(e) { eg.setDebugLogging(e.enabled) }, MEDIA_ENGINE_SET_VIDEO_HOOK: function(e) { tl({ videoHook: e.enabled }) }, MEDIA_ENGINE_SET_EXPERIMENTAL_SOUNDSHARE: function(e) { tl({ experimentalSoundshare2: e.enabled }) }, AUDIO_SET_ATTENUATION: function(e) { let { attenuation: t, attenuateWhileSpeakingSelf: n, attenuateWhileSpeakingOthers: i } = e, r = tl({ attenuation: t, attenuateWhileSpeakingSelf: n, attenuateWhileSpeakingOthers: i }); eg.eachConnection(e => e.setAttenuation(r.attenuation, r.attenuateWhileSpeakingSelf, r.attenuateWhileSpeakingOthers)) }, AUDIO_SET_QOS: function(e) { let { enabled: t } = e; tl({ qos: t }), eg.eachConnection(e => e.setQoS(t)) }, MEDIA_ENGINE_DEVICES: function(e) { let { inputDevices: t, outputDevices: n, videoDevices: i } = e; ! function(e) { let t = eP; if (eP = t_(e, eA.default.Messages.NO_INPUT_DEVICES), !E().isEqual(eP, t)) { let e = e5(), t = tc(eP, e.inputDeviceId); eg.setAudioInputDevice(t) } }(t), ! function(e) { let t = eU; if (eU = t_(e, eA.default.Messages.NO_OUTPUT_DEVICES), !E().isEqual(eU, t)) { let e = e5(), t = tc(eU, e.outputDeviceId); eg.setAudioOutputDevice(t) } }(n), ! function(e) { ej = e.length > 0; let t = eb; if (eb = t_(e, eA.default.Messages.NO_VIDEO_DEVICES), eV && !E().isEqual(eb, t)) { var n; let e = void 0 !== eb[ex], i = ex === eh.DEFAULT_DEVICE_ID && (null === (n = t[eh.DEFAULT_DEVICE_ID]) || void 0 === n ? void 0 : n.disabled); tt(e || i) } }(i) }, AUDIO_VOLUME_CHANGE: function(e) { let { inputVolume: t, outputVolume: n } = e; tl({ inputVolume: e9(t), outputVolume: n }) }, AUDIO_RESET: function() { h.Storage.remove(ep), location.reload() }, AUDIO_INPUT_DETECTED: function(e) { let { inputDetected: t } = e; eW = t, !eK && eW && (eK = !0, to.update()) }, AUDIO_SET_SUBSYSTEM: function(e) { eg.setAudioSubsystem(e.subsystem) }, MEDIA_ENGINE_SET_AUDIO_ENABLED: function(e) { eD = e.enabled, e.unmute && tl({ mute: !1, deaf: !1 }), eg.eachConnection(te) }, MEDIA_ENGINE_SET_VIDEO_ENABLED: function(e) { let { enabled: t } = e; X.default.requestPermission(ef.NativePermissionTypes.CAMERA), tt(t) }, MEDIA_ENGINE_PERMISSION: function(e) { let { kind: t, granted: n } = e; if (!n) switch (t) { case "audio": eD = !1, eg.eachConnection(te); break; case "video": tt(!1) } }, MEDIA_ENGINE_SET_GO_LIVE_SOURCE: function(e) { var t, n, i, r, a; let { settings: o } = e; if ((null == o ? void 0 : o.desktopSettings) != null) { ; let e = null, i = null, { sourceId: r, sound: l } = o.desktopSettings, u = null !== (t = o.context) && void 0 !== t ? t : eh.MediaEngineContextTypes.DEFAULT, d = null !== (n = o.qualityOptions) && void 0 !== n ? n : { resolution: 720, frameRate: 30 }, _ = ee.default.getPidFromDesktopSource(r); en.isPlatformEmbedded && !0 === l && ({ soundshareId: e, soundshareSession: i } = tI(_), null != e && tT(e, i)), (a = u) !== ey && (null != s && eg.setGoLiveSource(null, ey), ey = a), tt(u === eh.MediaEngineContextTypes.STREAM && eV, { desktopSource: { id: r, sourcePid: _, soundshareId: e, soundshareSession: i }, quality: { resolution: d.resolution, frameRate: d.frameRate } }) } else if ((null == o ? void 0 : o.cameraSettings) != null) { let e = null !== (i = o.context) && void 0 !== i ? i : eh.MediaEngineContextTypes.DEFAULT, { videoDeviceGuid: t, audioDeviceGuid: n } = o.cameraSettings, s = e === eh.MediaEngineContextTypes.STREAM && eV, a = null !== (r = o.qualityOptions) && void 0 !== r ? r : { resolution: 720, frameRate: 30 }; tt(s, { cameraSource: { videoDeviceGuid: t, audioDeviceGuid: n }, quality: { resolution: a.resolution, frameRate: a.frameRate } }) } else tt(eV, null) }, MEDIA_ENGINE_SET_VIDEO_DEVICE: function(e) { let { id: t } = e; tl({ videoDeviceId: t = tc(eb, t) }), tt() }, MEDIA_ENGINE_SET_EXPERIMENTAL_ENCODERS: function(e) { let t = tl({ experimentalEncoders: e.enabled }); eg.eachConnection(e => e.setExperimentalEncoders(t.experimentalEncoders)) }, MEDIA_ENGINE_INTERACTION_REQUIRED: function(e) { return eM !== e.required && (eM = e.required, !e.required && eg.interact(), !0) }, USER_SETTINGS_MODAL_INIT: tN, USER_SETTINGS_MODAL_SET_SECTION: tN, CERTIFIED_DEVICES_SET: function() { return eg.eachConnection(ti), !1 }, RPC_APP_CONNECTED: function(e) { let { application: t } = e; ev.add(t.id) }, RPC_APP_DISCONNECTED: function(e) { let { application: t } = e; ev.delete(t.id) }, OVERLAY_INITIALIZE: function(e) { let { mediaEngineState: t } = e; eL = t.settingsByContext, eP = t.inputDevices, eU = t.outputDevices, e4 = t.appSupported, eQ = t.krispModuleLoaded, ey = t.goLiveContext }, MEDIA_ENGINE_SET_OPEN_H264: function(e) { let { enabled: t } = e, n = tl({ openH264: t }); eg.setH264Enabled(n.openH264) }, MEDIA_ENGINE_SET_HARDWARE_H264: function(e) { let { enabled: t } = e, n = tl({ hardwareH264: t }); eg.eachConnection(e => e.setHardwareH264(n.hardwareH264)), eg.setAv1Enabled(n.hardwareH264), eg.setH265Enabled(n.hardwareH264) }, APP_STATE_UPDATE: function(e) { let { state: t } = e, n = v.default.isEnabled(); if (t === eI.AppStates.BACKGROUND && eV && !n) eY = !0, tt(!1); else { if (t !== eI.AppStates.ACTIVE || !eY) return !1; eY = !1, tt(!0) } return !0 }, SET_CHANNEL_BITRATE: function(e) { eg.eachConnection(t => t.setBitRate(e.bitrate)) }, SET_VAD_PERMISSION: function(e) { let { hasPermission: t } = e, n = !t; if (n === ek) return !1; ek = n, eg.eachConnection(te) }, SET_NATIVE_PERMISSION: function(e) { let { state: t, permissionType: n } = e, i = t === ef.NativePermissionStates.ACCEPTED; switch (n) { case ef.NativePermissionTypes.AUDIO: e0 = !0, eg.eachConnection(te); break; case ef.NativePermissionTypes.CAMERA: !i && eV && tt(!1); break; default: return !1 } }, SET_CHANNEL_VIDEO_QUALITY_MODE: function(e) { eg.eachConnection(t => t.applyVideoQualityMode(e.mode)) }, MEDIA_ENGINE_SET_AEC_DUMP: function(e) { let { enabled: t } = e, n = tl({ aecDumpEnabled: t }); eg.setAecDump(n.aecDumpEnabled) }, CHANNEL_DELETE: function() { if (!eV && null == s || null != ec.default.getRTCConnectionId()) return !1; tt(!1, null) }, MEDIA_ENGINE_NOISE_CANCELLATION_ERROR_RESET: function() { return !!eJ && (eJ = !1, !0) }, MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS: function(e) { let { settings: t } = e; eg.applyMediaFilterSettings(t).finally(() => { e$ = !1, i.emitChange() }) }, MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_START: function() { e$ = !0 }, MEDIA_ENGINE_APPLY_MEDIA_FILTER_SETTINGS_ERROR: function() { e$ = !1 }, USER_SETTINGS_PROTO_UPDATE: function(e) { let { settings: { type: t }, local: n, wasSaved: i } = e; if (!(0, Q.shouldReadWriteAudioSettings)() || t !== eS.UserSettingsTypes.PRELOADED_USER_SETTINGS || n || null != i) return !1; tE(!0) }, CLIPS_INIT: function(e) { let { sourceId: t, applicationName: n, quality: r } = e, { enableDecoupledGameClipping: s } = w.default.getCurrentConfig({ location: "handleClipsInit" }, { autoTrackExposure: !0 }), o = C.default.getSettings().decoupledClipsEnabled; if (!s || !o || null == N.default) return; let l = null, u = null, d = ee.default.getPidFromDesktopSource(t); ({ soundshareId: l, soundshareSession: u } = tI(d)); let _ = { desktopSource: { id: t, sourcePid: d, soundshareId: l, soundshareSession: u }, quality: r }; null != a && a.desktopSource.id !== _.desktopSource.id && (eg.setClipsSource(null), (0, en.isWindows)() && null != a.desktopSource.soundshareId && p.cancelAttachToProcess(a.desktopSource.soundshareId)), null != l && tT(l, u), a = _; let { hdrCaptureMode: c } = F.default.getCurrentConfig({ location: "f627ab_12" }, { autoTrackExposure: !1 }), E = e5().videoHook; eg.setClipsSource({ desktopDescription: { id: a.desktopSource.id, soundshareId: a.desktopSource.soundshareId, useVideoHook: E, useGraphicsCapture: tr(), useLoopback: i.getExperimentalSoundshare(), useQuartzCapturer: !0, allowScreenCaptureKit: ts(), videoHookStaleFrameTimeoutMs: 500, graphicsCaptureStaleFrameTimeoutMs: eC, hdrCaptureMode: c }, quality: r, applicationName: n }) }, CLIPS_SETTINGS_UPDATE: function(e) { let { settings: t } = e; !1 === t.decoupledClipsEnabled && (a = null, eg.setClipsSource(null)) } }), t.default = i }, 542578: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("41776"), o = n("222677"), l = n("598077"), u = n("592125"), d = n("594174"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = {}; class E { static ensure(e, t, n) { var i, r; let s = "".concat(e, ":").concat(t.name, ":").concat(null !== (i = t.id) && void 0 !== i ? i : "", ":").concat(n); return c[s] = null !== (r = c[s]) && void 0 !== r ? r : new E } constructor() { _(this, "users", void 0), _(this, "fetched", void 0), this.fetched = !1, this.users = {} } } function I(e) { let { type: t, messageId: n, userId: i, emoji: r, reactionType: s } = e, a = E.ensure(n, r, s); if ("MESSAGE_REACTION_ADD" === t) { let e = d.default.getUser(i); null != e && (a.users[i] = e) } else delete a.users[i] } class T extends(i = r.default.Store) { getReactions(e, t, n, i, r) { let s = E.ensure(t, n, r); if (!s.fetched) { let l = u.default.getChannel(e), d = null != l ? l.getGuildId() : null; if (null != d && a.default.isLurking(d)) return; o.getReactors({ channelId: e, messageId: t, emoji: n, limit: i, type: r }), s.fetched = !0 } return s.users } } _(T, "displayName", "MessageReactionsStore"), t.default = new T(s.default, { CONNECTION_OPEN: function() { c = {} }, MESSAGE_REACTION_ADD: I, MESSAGE_REACTION_REMOVE: I, MESSAGE_REACTION_ADD_USERS: function(e) { let { messageId: t, users: n, emoji: i, reactionType: r } = e, s = E.ensure(t, i, r); n.forEach(e => s.users[e.id] = new l.default(e)) } }) }, 375954: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"), n("653041"), n("177593"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("89892"), c = n("673750"), E = n("710845"), I = n("163268"), T = n("723352"), f = n("160404"), S = n("786761"), h = n("418476"); n("739566"); var A = n("995774"), m = n("706454"), N = n("630388"), p = n("709054"), O = n("314897"), C = n("592125"), R = n("796974"), g = n("984933"), L = n("271383"), v = n("430824"), D = n("496675"), M = n("699516"), y = n("944486"), P = n("914010"), U = n("594174"), b = n("981631"); let G = new Set, w = new E.default("MessageStore"), k = !1; function B() { _.default.forEach(e => { _.default.commit(e.mutate({ ready: !1, loadingMore: !1 })) }), G.clear() } function V() { _.default.forEach(e => { let { channelId: t } = e; null == C.default.getChannel(t) && _.default.clear(t) }) } function x() { _.default.forEach(e => { _.default.commit(e.reset(e.map(e => e.set("blocked", M.default.isBlocked(e.author.id))))) }) } function F(e) { let { type: t, channelId: n, messageId: i, userId: r, emoji: s, reactionType: a } = e, o = _.default.get(n); if (null == o || !(0, A.shouldApplyReaction)(e)) return !1; let l = O.default.getId() === r; o = o.update(i, n => "MESSAGE_REACTION_ADD" === t ? n.addReaction(s, l, e.colors, a) : n.removeReaction(s, l, a)), _.default.commit(o) } function H(e) { let { type: t, messageData: n } = e, { message: i } = n, r = (0, c.getFailedMessageId)(n), s = i.channelId, a = _.default.getOrCreate(s); if (!a.has(r)) return !1; a = a.update(r, e => { var n; return (null === (n = e.embeds) || void 0 === n ? void 0 : n.filter(T.isNotAutomodEmbed).length) > 0 && (e = e.set("embeds", [])), "MESSAGE_SEND_FAILED_AUTOMOD" === t && (e = e.set("flags", (0, N.addFlag)(e.flags, b.MessageFlags.EPHEMERAL))), e }), _.default.commit(a) } class Y extends(i = u.default.Store) { initialize() { this.waitFor(U.default, C.default, R.default, L.default, m.default, y.default, P.default, v.default, M.default, g.default), this.syncWith([f.default], () => {}) } getMessages(e) { if (f.default.hasViewingRoles()) { let t = C.default.getChannel(e), n = null == t ? void 0 : t.getGuildId(); if (f.default.isViewingRoles(n) && !D.default.can(b.Permissions.VIEW_CHANNEL, t)) return new _.default(e) } return _.default.getOrCreate(e) } getMessage(e, t) { return _.default.getOrCreate(e).get(t) } getLastEditableMessage(e) { let t = U.default.getCurrentUser(); return l()(this.getMessages(e).toArray()).reverse().find(e => (0, h.default)(e, null == t ? void 0 : t.id)) } getLastCommandMessage(e) { let t = U.default.getCurrentUser(); return this.getMessages(e).toArray().reverse().find(e => null != e.interaction && e.interaction.user.id === (null == t ? void 0 : t.id)) } getLastMessage(e) { return l()(this.getMessages(e).toArray()).reverse().get(0) } getLastNonCurrentUserMessage(e) { let t = U.default.getCurrentUser(); return l()(this.getMessages(e).toArray()).reverse().find(e => e.author.id !== (null == t ? void 0 : t.id)) } jumpedMessageId(e) { let t = _.default.get(e); return null == t ? void 0 : t.jumpTargetId } focusedMessageId(e) { let t = _.default.get(e); return null == t ? void 0 : t.focusTargetId } hasPresent(e) { let t = _.default.get(e); return null != t && t.ready && t.hasPresent() } isReady(e) { return _.default.getOrCreate(e).ready } whenReady(e, t) { this.addConditionalChangeListener(() => { if (this.isReady(e)) return setImmediate(t), !1 }) } isLoadingMessages(e) { return _.default.getOrCreate(e).loadingMore } hasCurrentUserSentMessage(e) { let t = U.default.getCurrentUser(); return null != this.getMessages(e).findNewest(e => e.author.id === (null == t ? void 0 : t.id)) } hasCurrentUserSentMessageSinceAppStart() { return k } } a = "MessageStore", (s = "displayName") in(r = Y) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new Y(d.default, { BACKGROUND_SYNC_CHANNEL_MESSAGES: function(e) { let { changesByChannelId: t } = e; for (let e in t) { let n = _.default.get(e); if (null != n) { n.cached; n.mergeDelta(t[e].new_messages, t[e].modified_messages, t[e].deleted_message_ids) } } }, CONNECTION_OPEN: B, OVERLAY_INITIALIZE: B, CACHE_LOADED: function(e) { for (let [t, n] of p.default.entries(e.messages)) { let e = _.default.getOrCreate(t).addCachedMessages(n, !0); _.default.commit(e) } }, LOAD_MESSAGES: function() { return !0 }, LOAD_MESSAGES_SUCCESS: function(e) { let { channelId: t, isBefore: n, isAfter: i, jump: r, hasMoreBefore: s, hasMoreAfter: a, messages: o, isStale: l, truncate: u } = e, d = _.default.getOrCreate(t); d = d.loadComplete({ newMessages: o, isBefore: n, isAfter: i, jump: r, hasMoreBefore: s, hasMoreAfter: a, cached: l, hasFetched: !0 }), null != u && (n || i) && (!n || !i) && (d = d.truncate(n, i)), _.default.commit(d) }, LOAD_MESSAGES_FAILURE: function(e) { let { channelId: t } = e, n = _.default.getOrCreate(t); _.default.commit(n.mutate({ loadingMore: !1, error: !0 })) }, LOAD_MESSAGES_SUCCESS_CACHED: function(e) { let { channelId: t, jump: n, focus: i, before: r, after: s, limit: a, truncate: o } = e, l = _.default.getOrCreate(t); (null == n ? void 0 : n.present) ? l = l.jumpToPresent(a): (null == i ? void 0 : i.messageId) != null ? l = l.focusOnMessage(i.messageId) : (null == n ? void 0 : n.messageId) != null ? l = l.jumpToMessage(n.messageId, n.flash, n.offset, n.returnMessageId, n.jumpType) : (null != r || null != s) && (l = l.loadFromCache(null != r, a)), null != o && (null != r || null != s) && (null == r || null == s) && (l = l.truncate(null != r, null != s)), _.default.commit(l) }, LOCAL_MESSAGES_LOADED: function(e) { let t = _.default.getOrCreate(e.channelId); (t.cached || !t.ready) && _.default.commit(t.addCachedMessages(e.messages, e.stale)) }, LOAD_MESSAGE_INTERACTION_DATA_SUCCESS: function(e) { let t = e.messageId, n = e.channelId, i = _.default.get(n); if (null == i || !i.has(t)) return !1; i = i.update(t, t => t.set("interactionData", e.interactionData)), _.default.commit(i) }, TRUNCATE_MESSAGES: function(e) { let { channelId: t, truncateBottom: n, truncateTop: i } = e; w.log("Truncating messages for ".concat(t, " bottom:").concat(n, " top:").concat(i)); let r = _.default.getOrCreate(t); r = r.truncate(n, i), _.default.commit(r) }, CLEAR_MESSAGES: function(e) { let { channelId: t } = e; w.log("Clearing messages for ".concat(t)), _.default.clear(t), G.clear() }, MESSAGE_CREATE: function(e) { let { channelId: t, message: n, isPushNotification: i } = e, r = _.default.getOrCreate(t); if (i) { w.log("Inserting message tapped on from a push notification", n.id, n.channel_id), _.default.commit(r.receivePushNotification(n)); return } if (!r.ready) return !1; null != n.nonce && n.state !== b.MessageStates.SENDING && G.has(n.nonce) && (r = r.remove(n.nonce), G.delete(n.nonce)), r = r.receiveMessage(n, R.default.isAtBottom(t)), _.default.commit(r) }, MESSAGE_SEND_FAILED: function(e) { let { channelId: t, messageId: n, reason: i } = e, r = _.default.getOrCreate(t); if (null == r || !r.has(n)) return !1; let s = r.get(n, !0); r = (null == s ? void 0 : s.isPoll()) === !0 ? r.remove(n) : r.update(n, e => ((e = e.set("state", b.MessageStates.SEND_FAILED)).isCommandType() ? e = (e = e.set("interactionError", null != i ? i : "")).set("flags", (0, N.addFlag)(e.flags, b.MessageFlags.EPHEMERAL)) : null != i && (e = e.set("interactionError", null != i ? i : "")), e)), _.default.commit(r) }, MESSAGE_SEND_FAILED_AUTOMOD: H, MESSAGE_EDIT_FAILED_AUTOMOD: H, MESSAGE_UPDATE: function(e) { let t = e.message.id, n = e.message.channel_id, i = _.default.getOrCreate(n); if (null == i || !i.has(t)) return !1; i = i.update(t, t => (0, S.updateMessageRecord)(t, e.message)), _.default.commit(i) }, MESSAGE_EXPLICIT_CONTENT_SCAN_TIMEOUT: function(e) { let { messageId: t, channelId: n } = e, i = _.default.get(n); if (null == i || !i.has(t)) return !1; i = i.update(t, I.handleExplicitMediaScanTimeoutForMessage), _.default.commit(i) }, MESSAGE_DELETE: function(e) { let { id: t, channelId: n } = e, i = _.default.getOrCreate(n); if (null == i || !i.has(t)) return !1; if (i.revealedMessageId === t) { let e = i.getAfter(t); i = null != e && e.blocked ? i.mutate({ revealedMessageId: e.id }) : i.mutate({ revealedMessageId: null }) } i = i.remove(t), _.default.commit(i), G.delete(t) }, MESSAGE_DELETE_BULK: function(e) { let { ids: t, channelId: n } = e, i = _.default.getOrCreate(n); if (null == i) return !1; let r = i.removeMany(t); if (i === r) return !1; if (null != r.revealedMessageId && l().some(t, e => r.revealedMessageId === e)) { let e = r.getAfter(r.revealedMessageId); r = null != e && e.blocked ? r.mutate({ revealedMessageId: e.id }) : r.mutate({ revealedMessageId: null }) } _.default.commit(r), t.forEach(e => { G.delete(e) }) }, MESSAGE_REVEAL: function(e) { let { channelId: t, messageId: n } = e, i = _.default.getOrCreate(t); _.default.commit(i.mutate({ revealedMessageId: n })) }, THREAD_CREATE_LOCAL: function(e) { let { channelId: t } = e, n = _.default.getOrCreate(t); n = n.loadComplete({ newMessages: [], hasMoreAfter: !1, hasMoreBefore: !1 }), _.default.commit(n) }, CHANNEL_DELETE: V, THREAD_DELETE: V, GUILD_DELETE: V, RELATIONSHIP_ADD: x, RELATIONSHIP_REMOVE: x, GUILD_MEMBERS_CHUNK_BATCH: function(e) {}, THREAD_MEMBER_LIST_UPDATE: function(e) {}, MESSAGE_REACTION_ADD: F, MESSAGE_REACTION_ADD_MANY: function(e) { let { channelId: t, messageId: n, reactions: i } = e, r = _.default.get(t); if (null == r) return !1; r = r.update(n, e => { var t; return e.addReactionBatch(i, null === (t = U.default.getCurrentUser()) || void 0 === t ? void 0 : t.id) }), _.default.commit(r) }, MESSAGE_REACTION_REMOVE: F, MESSAGE_REACTION_REMOVE_ALL: function(e) { let { channelId: t, messageId: n } = e, i = _.default.get(t); if (null == i) return !1; i = i.update(n, e => e.set("reactions", [])), _.default.commit(i) }, MESSAGE_REACTION_REMOVE_EMOJI: function(e) { let { channelId: t, messageId: n, emoji: i } = e, r = _.default.get(t); if (null == r) return !1; r = r.update(n, e => e.removeReactionsForEmoji(i)), _.default.commit(r) }, LOGOUT: function() { _.default.forEach(e => { _.default.clear(e.channelId) }), G.clear() }, UPLOAD_START: function(e) { let { message: t } = e; null != t.nonce && G.add(t.nonce) }, UPLOAD_FAIL: function(e) { let { channelId: t, messageRecord: n } = e, i = null == n ? void 0 : n.nonce; if (null != i && G.has(i)) { let e = _.default.getOrCreate(t), n = e.get(i); if (null == n) return; e = (e = e.remove(i)).merge([n]), G.delete(i), _.default.commit(e) } }, LOCAL_MESSAGE_CREATE: function(e) { let { message: t } = e, n = U.default.getCurrentUser(); null != t && null != t.author && null != n && t.author.id === n.id && (k = !0) } }) }, 866960: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("931619"), d = n("981631"); let _ = d.NetworkConnectionTypes.UNKNOWN, c = d.NetworkConnectionSpeeds.UNKNOWN, E = null; function I(e) { var t; _ = null != e.type ? e.type : d.NetworkConnectionTypes.UNKNOWN, c = null !== (t = e.effectiveSpeed) && void 0 !== t ? t : d.NetworkConnectionSpeeds.UNKNOWN, E = e.serviceProvider, f.emitChange() } class T extends(a = o.default.Store) { initialize() { u.default.getNetworkInformation().then(I), u.default.addChangeCallback(I) } getType() { return _ } getEffectiveConnectionSpeed() { return c } getServiceProvider() { return E } } s = "NetworkStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s; let f = new T(l.default, {}); t.default = f }, 722086: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = {}; function d() { u = {} } class _ extends(a = o.default.Store) { getNote(e) { return u[e] } } s = "NoteStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { CONNECTION_OPEN: d, OVERLAY_INITIALIZE: d, USER_NOTE_UPDATE: function(e) { u[e.id] = { loading: !1, note: e.note } }, USER_NOTE_LOAD_START: function(e) { let { userId: t } = e; u[t] = { loading: !0, note: null } }, USER_NOTE_LOADED: function(e) { let { userId: t, note: n } = e; u[t] = { loading: !1, note: null == n ? void 0 : n.note } } }) }, 292959: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("626135"), o = n("358085"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = { desktopType: o.isPlatformEmbedded ? l.DesktopNotificationTypes.ALL : l.DesktopNotificationTypes.NEVER, disableAllSounds: !1, disabledSounds: [], ttsType: l.TTSNotificationTypes.NEVER, disableUnreadBadge: !1, taskbarFlash: !0, notifyMessagesInSelectedChannel: !1 }, _ = d; function c(e, t) { !__OVERLAY__ && a.default.track(e, t) } function E(e) { let { desktopType: t } = e; _.desktopType = t, c(l.AnalyticEvents.LOCAL_SETTINGS_UPDATED, { notifications_enabled: t === l.DesktopNotificationTypes.ALL }) } class I extends(i = r.default.DeviceSettingsStore) { initialize(e) { _ = { ...d, ...e } } getUserAgnosticState() { return _ } getDesktopType() { return _.desktopType } getTTSType() { return _.ttsType } getDisabledSounds() { return _.disabledSounds } getDisableAllSounds() { return _.disableAllSounds } getDisableUnreadBadge() { return _.disableUnreadBadge } getNotifyMessagesInSelectedChannel() { return _.notifyMessagesInSelectedChannel } get taskbarFlash() { return _.taskbarFlash } isSoundDisabled(e) { return _.disableAllSounds || -1 !== _.disabledSounds.indexOf(e) } } u(I, "displayName", "NotificationSettingsStore"), u(I, "persistKey", "notifications"), u(I, "migrations", [e => { let t = { ...e }; return t.disabledSounds = t.disabledSounds || [], t.disableUnreadBadge = t.disableUnreadBadge || !1, t.taskbarFlash = null == t.taskbarFlash || t.taskbarFlash, t.ttsType = t.ttsType || l.TTSNotificationTypes.NEVER, null == t.desktopType && (t.desktopType = o.isPlatformEmbedded ? l.DesktopNotificationTypes.ALL : l.DesktopNotificationTypes.NEVER), t }]), t.default = new I(s.default, { NOTIFICATIONS_SET_DESKTOP_TYPE: E, NOTIFICATIONS_SET_TTS_TYPE: function(e) { let { ttsType: t } = e; _.ttsType = t }, NOTIFICATIONS_SET_DISABLED_SOUNDS: function(e) { let { sounds: t } = e; _.disabledSounds = t }, NOTIFICATIONS_TOGGLE_ALL_DISABLED: function() { _.disableAllSounds = !_.disableAllSounds }, NOTIFICATIONS_SET_PERMISSION_STATE: function(e) { let { enabled: t, source: n } = e; c(l.AnalyticEvents.ENABLE_NOTIFICATIONS, { enabled: t === l.NotificationPermissionTypes.ENABLED, source: n }), t === l.NotificationPermissionTypes.BLOCKED ? E({ desktopType: l.DesktopNotificationTypes.NEVER }) : t === l.NotificationPermissionTypes.ENABLED && E({ desktopType: l.DesktopNotificationTypes.ALL }) }, NOTIFICATIONS_SET_DISABLE_UNREAD_BADGE: function(e) { let { disableUnreadBadge: t } = e; _.disableUnreadBadge = t }, NOTIFICATIONS_SET_TASKBAR_FLASH: function(e) { let { taskbarFlash: t } = e; _.taskbarFlash = t }, NOTIFICATIONS_SET_NOTIFY_MESSAGES_IN_SELECTED_CHANNEL: function(e) { let { notify: t } = e; _.notifyMessagesInSelectedChannel = t } }) }, 209590: function(e, t, n) { "use strict"; let i, r; n.r(t), n("724458"); var s, a, o, l, u = n("442837"), d = n("433517"), _ = n("570140"), c = n("592125"), E = n("430824"); let I = "hideSuppressWarning", T = !1, f = !0, S = !1; class h extends(s = u.default.Store) { initialize() { S = d.Storage.get(I) || S } isAFKChannel() { let e = c.default.getChannel(r); if (null == e) return !1; let t = E.default.getGuild(e.getGuildId()); return null != t && e.id === t.afkChannelId } shouldShowWarning() { var e; return !(null === (e = c.default.getChannel(r)) || void 0 === e ? void 0 : e.isGuildStageVoice()) && !f } } l = "PermissionSpeakStore", (o = "displayName") in(a = h) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new h(_.default, { CONNECTION_OPEN: function(e) { i = e.sessionId, T = !1 }, CONNECTION_CLOSED: function() { i = null, r = null, f = !0 }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => i !== t.sessionId ? e : (T !== t.suppress && (f = !(T = t.suppress)), r !== t.channelId && (r = t.channelId, f = !T), (S || null == t.channelId) && (f = !0), !0), !1) }, PERMISSION_CLEAR_SUPPRESS_WARNING: function(e) { let { forever: t } = e; f = !0, t && (S = !0, d.Storage.set(I, S)) } }) }, 496675: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("149765"), d = n("442837"), _ = n("570140"), c = n("900489"), E = n("160404"), I = n("41776"), T = n("427679"), f = n("569471"), S = n("195663"), h = n("131704"), A = n("601964"), m = n("598077"), N = n("386438"), p = n("700785"), O = n("592125"), C = n("683301"), R = n("271383"), g = n("430824"), L = n("594174"), v = n("981631"), D = n("478743"); let M = {}, y = {}, P = {}, U = 0; function b(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = M[e]; if (null != n) return n; let i = L.default.getCurrentUser(); if (null == i) return p.NONE; let r = g.default.getGuild(e); return null == r ? p.NONE : M[e] = p.computePermissions({ user: i, context: r, checkElevated: t }) } function G(e) { var t; let n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], i = L.default.getCurrentUser(); if (null == i) return p.NONE; let r = O.default.getChannel(e); if (null == r) return p.NONE; let s = r.getGuildId(), a = null != s && (I.default.isLurking(s) || (null === (t = R.default.getMember(s, i.id)) || void 0 === t ? void 0 : t.isPending)); return !r.isScheduledForDeletion() && !a && l().isEmpty(r.permissionOverwrites) && null != s ? b(s) : p.computePermissions({ user: i, context: r, checkElevated: n }) } function w(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = y[e]; return null != n ? n : y[e] = G(e, t) } function k(e) { if (null != e) { var t; P[e] = (null !== (t = P[e]) && void 0 !== t ? t : 0) + 1 } } function B() { for (let e in M = {}, y = {}, P) P[e] += 1; U += 1 } function V() { B() } function x() { B() } function F(e) { var t; let { user: n } = e; if (n.id !== (null === (t = L.default.getCurrentUser()) || void 0 === t ? void 0 : t.id)) return !1; B() } function H() { return !0 } function Y(e) { let { messages: t, threads: n } = e; return !!(n.length > 0) || t.some(e => e.some(e => null != e.thread)) } function j(e) { let { guildId: t } = e; delete M[t]; let n = O.default.getMutableBasicGuildChannelsForGuild(t); l().forEach(n, e => { delete y[e.id] }), U += 1, k(t) } function W(e) { let { instance: t } = e, n = O.default.getChannel(t.channel_id); if (null == n) return !1; let i = L.default.getCurrentUser(), r = p.computePermissions({ user: i, context: n }); if (r === y[n.id]) return !1; y[n.id] = r, U += 1 } function K(e) { let { guildId: t } = e; delete M[t]; let n = O.default.getMutableBasicGuildChannelsForGuild(t); l().forEach(n, e => { delete y[e.id] }), U += 1, k(t) } function z(e, t, n, i) { let r = p.NONE; if (e instanceof h.ChannelRecordBase) { if (h.THREAD_CHANNEL_TYPES.has(e.type)) { let r = O.default.getChannel(e.parent_id); return null == r ? p.NONE : p.applyThreadPermissions(e, z(r, t, n, i), f.default.hasJoined(e.id)) } r = w(e.id) } else e instanceof A.default && (r = b(e.id)); return void 0 !== t || void 0 !== n || void 0 !== i ? p.computePermissions({ user: L.default.getCurrentUser(), context: e, overwrites: t, roles: n, checkElevated: !0, excludeGuildPermissions: i }) : r } class Z extends(i = d.default.Store) { initialize() { this.waitFor(L.default, g.default, O.default, R.default, C.default, f.default, T.default, E.default) } getChannelPermissions(e) { return h.THREAD_CHANNEL_TYPES.has(e.type) ? G(e.id) : w(e.id) } getGuildPermissions(e) { return b(e.id) } getGuildPermissionProps(e) { let t = L.default.getCurrentUser(); return { canManageGuild: this.can(v.Permissions.MANAGE_GUILD, e), canManageChannels: this.can(v.Permissions.MANAGE_CHANNELS, e), canManageRoles: this.can(v.Permissions.MANAGE_ROLES, e), canManageBans: this.can(v.Permissions.BAN_MEMBERS, e), canManageNicknames: this.can(v.Permissions.MANAGE_NICKNAMES, e), canManageGuildExpressions: this.can(v.Permissions.MANAGE_GUILD_EXPRESSIONS, e) || this.can(v.Permissions.CREATE_GUILD_EXPRESSIONS, e), canViewAuditLog: this.can(v.Permissions.VIEW_AUDIT_LOG, e), canViewAuditLogV2: this.can(v.Permissions.VIEW_AUDIT_LOG, e), canManageWebhooks: this.can(v.Permissions.MANAGE_WEBHOOKS, e), canViewGuildAnalytics: this.can(v.Permissions.VIEW_GUILD_ANALYTICS, e), canAccessMembersPage: this.canAccessMemberSafetyPage(e), isGuildAdmin: this.can(v.Permissions.ADMINISTRATOR, e), isOwner: null != t && e.isOwner(t), isOwnerWithRequiredMfaLevel: null != t && e.isOwnerWithRequiredMfaLevel(t), guild: e } } canAccessMemberSafetyPage(e) { return u.hasAny(b(e.id), D.MemberSafetyPagePermissions) } canAccessGuildSettings(e) { return u.hasAny(b(e.id), p.VIEW_GUILD_SETTINGS) } canWithPartialContext(e, t) { return "channelId" in t && "string" == typeof t.channelId ? this.can(e, O.default.getChannel(t.channelId)) : "guildId" in t && "string" == typeof t.guildId && this.can(e, g.default.getGuild(t.guildId)) } can(e, t, n, i, r) { let s = z(t, n, i, r); return u.has(s, e) } canBasicChannel(e, t, n, i, r) { return "basicPermissions" in t ? N.default.has(t.basicPermissions, e) : u.has(z(t, n, i, r), N.default.asBigFlag(e)) } computePermissions(e, t, n, i) { return z(e, t, n, i) } computeBasicPermissions(e) { return "basicPermissions" in e ? e.basicPermissions : N.default.asBasicFlag(z(e)) } canManageUser(e, t, n) { let i = t instanceof m.default ? t.id : t; if (n.isOwner(i)) return !1; let r = L.default.getCurrentUser(); if (!this.can(e, n)) return !1; let s = null != r ? p.getHighestRole(n, r.id) : void 0, a = p.getHighestRole(n, i); return null != r && p.isRoleHigher(n, r.id, s, a) } getHighestRole(e) { let t = L.default.getCurrentUser(); return null != t ? p.getHighestRole(e, t.id) : null } isRoleHigher(e, t, n) { let i = L.default.getCurrentUser(), r = E.default.isViewingRoles(e.id); return p.isRoleHigher(e, r ? void 0 : null == i ? void 0 : i.id, t, n) } canImpersonateRole(e, t) { let n = this.getHighestRole(e), i = this.can(v.Permissions.MANAGE_GUILD, e) && this.can(v.Permissions.MANAGE_ROLES, e), r = this.isRoleHigher(e, n, t); return i && (r || t.id === (null == n ? void 0 : n.id)) } getGuildVersion(e) { var t; return null !== (t = P[e]) && void 0 !== t ? t : 0 } getChannelsVersion() { return U } } function X() { y = {}, M = {}, P = {}, U = 0 } a = "PermissionStore", (s = "displayName") in(r = Z) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new Z(_.default, { BACKGROUND_SYNC: V, CONNECTION_OPEN: V, OVERLAY_INITIALIZE: V, CACHE_LOADED: V, CACHE_LOADED_LAZY: V, CONNECTION_CLOSED: function() { X() }, GUILD_CREATE: x, GUILD_UPDATE: x, GUILD_DELETE: x, GUILD_MEMBER_ADD: F, GUILD_MEMBER_UPDATE: F, CURRENT_USER_UPDATE: F, CHANNEL_CREATE: function(e) { let { channel: { id: t } } = e, n = O.default.getChannel(t); if (null == n || n.isPrivate()) return !1; let i = L.default.getCurrentUser(), r = p.computePermissions({ user: i, context: n }); if (y[n.id] === r) return !1; y[n.id] = r, U += 1, k(n.getGuildId()) }, THREAD_CREATE: H, THREAD_UPDATE: H, THREAD_LIST_SYNC: H, LOAD_THREADS_SUCCESS: H, LOAD_ARCHIVED_THREADS_SUCCESS: H, CHANNEL_UPDATES: function(e) { let { channels: t } = e, n = !1; for (let { id: e } of t) { let t = O.default.getChannel(e); if (null == t || t.isPrivate()) continue; let i = L.default.getCurrentUser(), r = p.computePermissions({ user: i, context: t }); y[t.id] !== r && (y[t.id] = r, k(t.getGuildId()), n = !0) } return !!n && (U += 1, n) }, LOAD_MESSAGES_SUCCESS: function(e) { let { messages: t } = e; return t.some(e => null != e.thread) }, SEARCH_FINISH: Y, MOD_VIEW_SEARCH_FINISH: Y, GUILD_FEED_FETCH_SUCCESS: function(e) { let { data: t } = e; return (0, c.getThreadsFromGuildFeedFetch)(t).length > 0 }, THREAD_MEMBER_UPDATE: function(e) { var t; return (null === (t = L.default.getCurrentUser()) || void 0 === t ? void 0 : t.id) === e.userId && (k(e.guildId), !0) }, THREAD_MEMBERS_UPDATE: function(e) { return !!(0, S.doesThreadMembersActionAffectMe)(e) && (k(e.guildId), !0) }, CHANNEL_DELETE: function(e) { let { channel: t } = e; return delete y[t.id], U += 1, k(t.guild_id), !1 }, GUILD_ROLE_CREATE: j, GUILD_ROLE_UPDATE: j, GUILD_ROLE_DELETE: j, LOGOUT: X, STAGE_INSTANCE_CREATE: W, STAGE_INSTANCE_UPDATE: W, STAGE_INSTANCE_DELETE: W, IMPERSONATE_UPDATE: K, IMPERSONATE_STOP: K }) }, 269647: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("314897"), d = n("592125"), _ = n("131951"), c = n("496675"), E = n("19780"), I = n("979651"), T = n("981631"); let f = !0, S = !0; function h() { let e; let t = E.default.getChannelId(); if (null == t) e = !0; else { var n; let i = d.default.getChannel(t), r = I.default.getVoiceState(null == i ? void 0 : i.getGuildId(), u.default.getId()); e = _.default.getMode() !== T.InputModes.VOICE_ACTIVITY || null == i || i.isPrivate() || i.isGuildStageVoice() || c.default.can(T.Permissions.USE_VAD, i) || null == (n = r) || !!n.suppress || null != n.requestToSpeakTimestamp || !1 } if (f === e) return !1; S = e, f = e, l.default.dispatch({ type: "SET_VAD_PERMISSION", hasPermission: f }) } class A extends(a = o.default.Store) { initialize() { this.waitFor(c.default, _.default, E.default, I.default) } shouldShowWarning() { return !S } canUseVoiceActivity() { return f } } s = "PermissionVADStore", (r = "displayName") in(i = A) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new A(l.default, { RTC_CONNECTION_STATE: h, MEDIA_ENGINE_SET_AUDIO_ENABLED: h, AUDIO_SET_MODE: h, CHANNEL_UPDATES: h, THREAD_UPDATE: h, GUILD_ROLE_UPDATE: h, GUILD_MEMBER_UPDATE: h, IMPERSONATE_UPDATE: h, IMPERSONATE_STOP: h, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.some(e => { let { userId: t } = e; return t === u.default.getId() && h() }) }, AUDIO_TOGGLE_SELF_MUTE: function() { S = f }, PERMISSION_CLEAR_VAD_WARNING: function() { S = !0 } }) }, 366050: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"); var s, a, o, l, u = n("442837"), d = n("433517"), _ = n("570140"), c = n("981631"); let E = "PictureInPictureLocation", I = new Map, T = c.PictureInPicturePositions.BOTTOM_RIGHT, f = {}; class S extends(s = u.default.Store) { initialize() { T = d.Storage.get(E, c.PictureInPicturePositions.BOTTOM_RIGHT) } get pipWindow() { var e; return null == i && null == r ? null : I.get(null !== (e = null != i ? i : r) && void 0 !== e ? e : "") } get pipVideoWindow() { return null == i ? null : I.get(i) } get pipActivityWindow() { return null == r ? null : I.get(r) } get pipWindows() { return I } isEmbeddedActivityHidden() { return null == r } getDockedRect(e) { return f[e] } isOpen(e) { return null != e && I.has(e) } } l = "PictureInPictureStore", (o = "displayName") in(a = S) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new S(_.default, { PICTURE_IN_PICTURE_OPEN: function(e) { var t, n; let { id: s, component: a, props: o } = e; if (null != I.get(s)) return; let l = { id: s, component: a, position: null !== (t = o.position) && void 0 !== t ? t : T, props: o, docked: null !== (n = o.docked) && void 0 !== n && n }; I.set(s, l), a === c.PictureInPictureComponents.VIDEO ? null == i && (i = s) : a === c.PictureInPictureComponents.EMBED_IFRAME && null == r && (r = s) }, PICTURE_IN_PICTURE_CLOSE: function(e) { let { id: t } = e; if (!I.has(t)) return !1; { I.delete(t); let e = Array.from(I.keys()); i === t ? i = e.find(e => { let t = I.get(e); return null != t && t.component === c.PictureInPictureComponents.VIDEO }) : r === t && (r = e.find(e => { let t = I.get(e); return null != t && t.component === c.PictureInPictureComponents.EMBED_IFRAME })) } }, PICTURE_IN_PICTURE_MOVE: function(e) { let { id: t, position: n } = e; if (null == t || i !== t && r !== t) return !1; { let e = new Map; I.forEach((t, i) => { e.set(i, { ...t, position: n }) }), I = e, T = n, d.Storage.set(E, n) } }, PICTURE_IN_PICTURE_HIDE: function(e) { let { id: t } = e; if (i !== t && r !== t) return !1; { let e = I.get(t); if (null == e) return !1; I.set(t, { ...e, hidden: !0 }) } }, PICTURE_IN_PICTURE_SHOW: function(e) { let { id: t } = e; if (i !== t && r !== t) return !1; { let e = I.get(t); if (null == e) return !1; I.set(t, { ...e, hidden: !1 }) } }, PICTURE_IN_PICTURE_UPDATE_RECT: function(e) { let { id: t, rect: n } = e; f[t] = n }, PICTURE_IN_PICTURE_UPDATE_SELECTED_WINDOW: function(e) { let { id: t } = e, n = I.get(t); null != n && (n.component === c.PictureInPictureComponents.VIDEO ? i = t : n.component === c.PictureInPictureComponents.EMBED_IFRAME && (r = t)) }, LOGOUT: function() { i = null, r = null, I = new Map } }) }, 912788: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("881052"); let d = null, _ = null, c = null; function E(e) { let { error: t } = e; d = t } function I() { d = null } class T extends(a = o.default.Store) { get paymentError() { return d } getGiftCode(e) { return e === c ? _ : null } } s = "PremiumPaymentModalStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new T(l.default, { PREMIUM_PAYMENT_SUBSCRIBE_FAIL: E, PREMIUM_PAYMENT_UPDATE_FAIL: E, PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS: function() { I() }, PREMIUM_PAYMENT_UPDATE_SUCCESS: I, PREMIUM_PAYMENT_ERROR_CLEAR: I, BRAINTREE_TOKENIZE_PAYPAL_FAIL: function(e) { let { message: t, code: n } = e; d = new u.BillingError(t, n) }, BRAINTREE_TOKENIZE_VENMO_FAIL: function(e) { let { message: t, code: n } = e; d = new u.BillingError(t, n) }, SKU_PURCHASE_SUCCESS: function(e) { _ = e.giftCode, c = e.skuId }, SKU_PURCHASE_FAIL: function(e) { d = e.error }, SKU_PURCHASE_AWAIT_CONFIRMATION: function(e) { e.isGift && (c = e.skuId) }, GIFT_CODE_CREATE: function(e) { let { giftCode: t } = e; if (0 !== t.uses || t.sku_id !== c) return !1; _ = t.code } }) }, 158776: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("348327"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"), E = n("122810"), I = n("106301"), T = n("709054"), f = n("314897"), S = n("594174"), h = n("981631"); let A = Object.freeze([]), m = {}, N = {}, p = {}, O = {}, C = {}, R = {}; function g(e, t) { let n = m[e]; return null != n ? n[t] : null } let L = e => { switch (e.type) { case h.ActivityTypes.CUSTOM_STATUS: return 4; case h.ActivityTypes.COMPETING: return 3; case h.ActivityTypes.STREAMING: return 2; case h.ActivityTypes.PLAYING: return 1; default: return 0 } }, v = e => (0, E.default)(e) ? 1 : 0; function D(e, t) { var n, i, r, s, a; return n = e, L(t) - L(n) || (i = e, v(t) - v(i)) || (r = e, (null !== (s = t.created_at) && void 0 !== s ? s : 0) - (null !== (a = r.created_at) && void 0 !== a ? a : 0)) } function M(e) { if (delete N[e], delete p[e], delete O[e], null == m[e]) return; let [t] = d().sortBy(m[e], e => -e.timestamp); t.status !== h.StatusTypes.OFFLINE ? (N[e] = t.status, p[e] = t.activities, null != t.clientStatus && (O[e] = t.clientStatus), delete R[e]) : (d().every(m[e], e => e.status === h.StatusTypes.OFFLINE) && delete m[e], R[e] = Date.now()) } function y(e) { let t = m[e]; if (null == t) return; let n = d().maxBy(Object.values(t), e => e.timestamp); n.status !== h.StatusTypes.OFFLINE && (N[e] = n.status, p[e] = n.activities, null != n.clientStatus && (O[e] = n.clientStatus)) } function P(e) { let { guildId: t, userId: n, status: i, clientStatus: r, activities: s } = e; if (n === f.default.getId()) return !1; let a = m[n]; if (null == a) { if (i === h.StatusTypes.OFFLINE) return !1; a = m[n] = {} } if (i === h.StatusTypes.OFFLINE) a[t] = { status: i, clientStatus: r, activities: A, timestamp: Date.now() }; else { let e = s.length > 1 ? [...s].sort(D) : s, n = a[t]; s = null != n && l()(n.activities, e) ? n.activities : e, a[t] = { status: i, clientStatus: r, activities: s, timestamp: Date.now() } } return delete C[n], M(n), !0 } function U(e) { let { guildId: t, userId: n, status: i, clientStatus: r, activities: s, timestamp: a } = e; if (n === f.default.getId()) return; let o = m[n]; if (null == o) { if (i === h.StatusTypes.OFFLINE) return; o = m[n] = {} } if (i === h.StatusTypes.OFFLINE) o[t] = { status: i, clientStatus: r, activities: A, timestamp: Date.now() }; else { let e = s.length > 1 ? [...s].sort(D) : s; o[t] = { status: i, clientStatus: r, activities: e, timestamp: a } } } function b(e, t) { if (t === f.default.getId()) return !1; let n = m[t]; if (null == n || null == n[e]) return !1; delete n[e], 0 === Object.keys(n).length && delete m[t], M(t) } function G(e) { for (let t of T.default.keys(m)) b(e, t) } class w extends(i = _.default.Store) { initialize() { this.waitFor(f.default, I.default) } setCurrentUserOnConnectionOpen(e, t) { N[f.default.getId()] = e, p[f.default.getId()] = t } getStatus(e) { var t, n; let i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : h.StatusTypes.OFFLINE, s = S.default.getUser(e); if (null != s && s.hasFlag(h.UserFlags.BOT_HTTP_INTERACTIONS) && (r = h.StatusTypes.UNKNOWN), null == s ? void 0 : s.isClyde()) return h.StatusTypes.ONLINE; if (null == i) return null !== (t = N[e]) && void 0 !== t ? t : r; let a = g(e, i); return null !== (n = null == a ? void 0 : a.status) && void 0 !== n ? n : r } getActivities(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; if (null == t) { var n; return null !== (n = p[e]) && void 0 !== n ? n : A } let i = g(e, t); return null == i || null == i.activities ? A : i.activities } getPrimaryActivity(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; return this.getActivities(e, t).filter(e => e.type !== h.ActivityTypes.HANG_STATUS)[0] } getAllApplicationActivities(e) { let t = []; for (let n of T.default.keys(p)) for (let i of p[n]) i.application_id === e && t.push({ userId: n, activity: i }); return t } getApplicationActivity(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null; return this.findActivity(e, e => e.application_id === t, n) } findActivity(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null; return this.getActivities(e, n).find(t) } getActivityMetadata(e) { return C[e] } getUserIds() { return T.default.keys(p) } isMobileOnline(e) { let t = O[e]; return null != t && t[h.ClientTypes.MOBILE] === h.StatusTypes.ONLINE && t[h.ClientTypes.DESKTOP] !== h.StatusTypes.ONLINE } getClientStatus(e) { return O[e] } getLastOnlineTimestamp(e) { return R[e] } getState() { return { presencesForGuilds: m, statuses: N, activities: p, activityMetadata: C, clientStatuses: O, lastOnlineTimestamps: R } } } a = "PresenceStore", (s = "displayName") in(r = w) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new w(c.default, { CONNECTION_OPEN: function() { return !0 }, CONNECTION_OPEN_SUPPLEMENTAL: function(e) { let { guilds: t, presences: n } = e, i = f.default.getId(); m = {}, C = {}, N = { [i]: N[i] }, p = { [i]: p[i] }, O = { [i]: {} }; let r = new Set, s = Date.now(); t.forEach(e => { e.presences.forEach(t => { let { user: n, status: i, clientStatus: a, activities: o } = t; U({ guildId: e.id, userId: n.id, status: i, clientStatus: a, activities: o, timestamp: s }), r.add(n.id) }) }), n.forEach(e => { let { user: t, status: n, clientStatus: i, activities: a } = e; null != t && (U({ guildId: h.ME, userId: t.id, status: n, clientStatus: i, activities: a, timestamp: s }), r.add(t.id)) }), r.delete(i), r.forEach(y) }, OVERLAY_INITIALIZE: function(e) { let { presences: t } = e; m = t.presencesForGuilds, N = t.statuses, p = t.activities, C = t.activityMetadata }, GUILD_CREATE: function(e) { let { guild: t } = e; t.presences.forEach(e => { let { user: n, status: i, clientStatus: r, activities: s } = e; P({ guildId: t.id, userId: n.id, status: i, clientStatus: r, activities: s }) }) }, GUILD_DELETE: function(e) { let { guild: t } = e; G(t.id) }, GUILD_MEMBER_REMOVE: function(e) { let { guildId: t, user: n } = e; return b(t, n.id) }, PRESENCE_UPDATES: function(e) { let { updates: t } = e; return t.map(e => { let { guildId: t, user: n, status: i, clientStatus: r, activities: s } = e; return P({ guildId: null != t ? t : h.ME, userId: n.id, status: i, clientStatus: r, activities: s }) }).some(e => e) }, PRESENCES_REPLACE: function(e) { let { presences: t } = e; G(h.ME), t.forEach(e => { let { user: t, status: n, clientStatus: i, activities: r } = e; null != t && P({ guildId: h.ME, userId: t.id, status: n, clientStatus: i, activities: r }) }) }, ACTIVITY_METADATA_UPDATE: function(e) { let { userId: t, metadata: n } = e; return C[t] = n, !1 }, THREAD_MEMBER_LIST_UPDATE: function(e) { let { guildId: t, members: n } = e; n.forEach(e => { null != e.presence && P({ guildId: t, userId: e.user_id, status: e.presence.status, clientStatus: e.presence.clientStatus, activities: e.presence.activities }) }) }, THREAD_MEMBERS_UPDATE: function(e) { let { guildId: t, addedMembers: n } = e; null == n || n.forEach(e => { null != e.presence && P({ guildId: t, userId: e.userId, status: e.presence.status, clientStatus: e.presence.clientStatus, activities: e.presence.activities }) }) }, SELF_PRESENCE_STORE_UPDATE: function(e) { let t = f.default.getId(); if (N[t] === e.status && p[t] === e.activities) return !1; N[t] = e.status, p[t] = e.activities, delete C[t] } }) }, 19780: function(e, t, n) { "use strict"; let i, r; n.r(t), n("411104"), n("724458"); var s, a, o, l, u = n("442837"), d = n("570140"), _ = n("437263"), c = n("764976"), E = n("646047"), I = n("258609"), T = n("338336"), f = n("314897"), S = n("938475"), h = n("981631"), A = n("65154"); let m = null, N = null, p = null, O = null, C = !1, R = !1; function g(e, t) { if (null == r) throw Error("Creating RTCConnection without session."); let i = f.default.getId(), s = new(n("861687")).default({ userId: i, sessionId: r, guildId: e, channelId: t }); return s.on(_.RTCConnectionEvent.State, (e, t, n) => { d.default.wait(() => d.default.dispatch({ type: "RTC_CONNECTION_STATE", state: e, ...t, ...n })) }), s.on(_.RTCConnectionEvent.Video, (e, t, n, i, r) => { d.default.wait(() => d.default.dispatch({ type: "RTC_CONNECTION_VIDEO", guildId: e, channelId: t, userId: n, streamId: i, rtcServerId: r, context: A.MediaEngineContextTypes.DEFAULT })) }), s.on(_.RTCConnectionEvent.Ping, (e, t) => { d.default.wait(() => d.default.dispatch({ type: "RTC_CONNECTION_PING", pings: e, quality: t })) }), s.on(_.RTCConnectionEvent.OutboundLossRate, e => { d.default.wait(() => d.default.dispatch({ type: "RTC_CONNECTION_LOSS_RATE", lossRate: e })) }), s.on(_.RTCConnectionEvent.Speaking, (e, t) => { null == p || p.setSpeaking(e, t) }), s.on(_.RTCConnectionEvent.Flags, (e, t) => { d.default.wait(() => { d.default.dispatch({ type: "RTC_CONNECTION_FLAGS", flags: t, userId: e, guildId: s.guildId, channelId: s.channelId, context: s.context }) }) }), s.on(_.RTCConnectionEvent.Platform, (e, t, n) => { d.default.wait(() => { d.default.dispatch({ type: "RTC_CONNECTION_PLATFORM", platform: t, userId: e, channelId: n }) }) }), p = new c.default(f.default.getId(), t), O = null, C = !1, R = !1, s } function L() { if (null == i) return !1; O = i.getDuration(), i.destroy(), i = null, p = null } function v() { m = null } function D(e) { let { channel: t } = e; if (null == i || i.channelId !== t.id) return !1; L() } function M() { return !0 } class y extends(s = u.default.Store) { initialize() { this.waitFor(S.default), (0, T.setVideoToggleAnalyticsParams)(this.getRTCConnectionId, this.getMediaSessionId) } getRTCConnection() { return i } getState() { return null != i ? i.state : h.RTCConnectionStates.DISCONNECTED } isConnected() { return this.getState() === h.RTCConnectionStates.RTC_CONNECTED } isDisconnected() { return this.getState() === h.RTCConnectionStates.DISCONNECTED } getRemoteDisconnectVoiceChannelId() { return m } getLastSessionVoiceChannelId() { return N } setLastSessionVoiceChannelId(e) { N = e } getGuildId() { return null == i ? void 0 : i.guildId } getChannelId() { return null == i ? void 0 : i.channelId } getHostname() { return null != i ? i.hostname : "" } getQuality() { return null != i ? i.quality : h.RTCConnectionQuality.UNKNOWN } getPings() { return null != i ? i.getPings() : [] } getAveragePing() { return null != i ? null == i ? void 0 : i.getAveragePing() : 0 } getLastPing() { return null == i ? void 0 : i.getLastPing() } getOutboundLossRate() { return null == i ? void 0 : i.getOutboundLossRate() } getMediaSessionId() { return null == i ? void 0 : i.getMediaSessionId() } getRTCConnectionId() { return null == i ? void 0 : i.getRTCConnectionId() } getDuration() { var e; return null !== (e = null == i ? void 0 : i.getDuration()) && void 0 !== e ? e : O } getPacketStats() { return null == i ? void 0 : i.getPacketStats() } getVoiceStateStats() { return null == p ? void 0 : p.getStats() } getWasEverMultiParticipant() { return C } getWasEverRtcConnected() { return R } } l = "RTCConnectionStore", (o = "displayName") in(a = y) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l; let P = new y(d.default, __OVERLAY__ ? {} : { CONNECTION_OPEN: function(e) { return r = e.sessionId, m = null, N = null, L(), !1 }, CONNECTION_CLOSED: function() { r = null, m = null, N = null, L() }, RTC_CONNECTION_STATE: function(e) { return e.state === h.RTCConnectionStates.RTC_CONNECTED && (R = !0), !0 }, RTC_CONNECTION_PING: M, RTC_CONNECTION_LOSS_RATE: M, RTC_CONNECTION_UPDATE_ID: function(e) { return e.connection === i }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { var n, s, a; if (null == p || p.updateVoiceStates(t.userId, t.channelId), C = C || (null !== (n = null == p ? void 0 : p.getStats().max_voice_state_count) && void 0 !== n ? n : 0) > 1, f.default.getId() !== t.userId) return !1; if (null != i) t.sessionId === r ? null != t.guildId && t.guildId === i.guildId || null == t.guildId && t.channelId === i.channelId ? null == t.channelId ? L() : i.channelId = t.channelId : (t.guildId !== i.guildId && null == t.channelId || L(), null != t.channelId && (m = null, N = null, i = g(t.guildId, t.channelId), C = (null !== (s = null == p ? void 0 : p.getStats().max_voice_state_count) && void 0 !== s ? s : 0) > 1)) : t.guildId === i.guildId && (!(null != I.default.getAwaitingRemoteSessionInfo() && null != I.default.getRemoteSessionId()) && (m = i.channelId), L()); else { if (t.sessionId !== r || null == t.channelId) return e; m = null, N = null, i = g(t.guildId, t.channelId), C = (null !== (a = null == p ? void 0 : p.getStats().max_voice_state_count) && void 0 !== a ? a : 0) > 1 } return !0 }, !1) }, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; if (null == i || null != t && i.channelId === t) return !1; L() }, VOICE_SERVER_UPDATE: function(e) { if (null == i || null != e.guildId && e.guildId !== i.guildId || null != e.channelId && e.channelId !== i.channelId) return !1; i.connect(e.endpoint, e.token) }, CLEAR_REMOTE_DISCONNECT_VOICE_CHANNEL_ID: v, REMOTE_SESSION_CONNECT: v, CLEAR_LAST_SESSION_VOICE_CHANNEL_ID: function() { N = null }, GUILD_DELETE: function(e) { let { guild: t } = e; if (null == i || i.guildId !== t.id) return !1; L() }, CHANNEL_DELETE: D, THREAD_DELETE: D, CALL_DELETE: function(e) { let { channelId: t } = e; if (null == i || i.channelId !== t) return !1; L() }, APP_STATE_UPDATE: function(e) { if (null != i) { let t = e.state === h.AppStates.BACKGROUND, n = E.default.isEnabled(); i.setAppBackgrounded(t, n) } return e.state === h.AppStates.ACTIVE && null != i && i.resetBackoff("App state is active"), !1 }, RTC_DEBUG_SET_SIMULCAST_OVERRIDE: function(e) { let { userId: t, context: n, quality: r } = e; null == i || i.setSimulcastDebugOverride(t, n, r) } }); Promise.resolve().then(n.bind(n, "626135")).then(e => { let { addExtraAnalyticsDecorator: t } = e; t(e => { e.client_rtc_state = P.getState() }) }), t.default = P }, 226961: function(e, t, n) { "use strict"; n.r(t), n.d(t, { graphs: function() { return S }, keySection: function() { return C }, parseSection: function() { return R } }), n("47120"), n("653041"); var i, r = n("442837"), s = n("46973"), a = n("570140"), o = n("304680"), l = n("131951"), u = n("594174"), d = n("981631"), _ = n("65154"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = C(_.MediaEngineContextTypes.DEFAULT, d.RTCDebugSections.TRANSPORT, 0), I = E, T = {}, f = new Map, S = { availableOutgoingBitrate: !0, bitrate: !0, bitrateTarget: !0, bytesReceived: !0, bytesSent: !0, encoderQualityPsnr: !0, encoderQualityVmaf: !0, encodeUsage: !0, frameRateDecode: !0, frameRateEncode: !0, frameRateInput: !0, frameRateNetwork: !0, frameRateRender: !0, inboundBitrateEstimate: !0, packetsLost: !0, packetsReceived: !0, packetsSent: !0, ping: !0 }; function h(e, t, n) { return "".concat(e, ":").concat(t, ":").concat(n) } function A(e, t) { return "".concat(e, ":").concat(t) } class m { static empty() { return new m({}) } put(e, t, n, i) { if ("" === i) { let i = { ...this.state }; return delete i[h(e, t, n)], new m(i) } return new m({ [h(e, t, n)]: i, ...this.state }) } get(e, t, n) { let i = this.state[h(e, t, n)]; return null != i ? i : null } constructor(e) { c(this, "state", void 0), this.state = e } } let N = m.empty(), p = !1, O = null; function C(e, t, n) { return "".concat(e, ":").concat(t, ":").concat(n) } function R(e) { let [t, n] = e.split(":"); return { context: t, section: n } } function g() { Object.values(_.MediaEngineContextTypes).forEach(e => { T[e] = {} }) } g(); function L() { null != O && (O.destroy(), O = null) } class v extends(i = r.default.Store) { getSection() { return I } getStats() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : _.MediaEngineContextTypes.DEFAULT; return T[e][0] } getAllStats() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : _.MediaEngineContextTypes.DEFAULT; return Object.values(T[e]) } getVideoStreams() { return N } shouldRecordNextConnection() { return p } getSimulcastDebugOverride(e, t) { let n = A(e, t); return f.has(n) ? f.get(n) : _.SimulcastOverrideQuality.NO_OVERRIDE } } c(v, "displayName", "RTCDebugStore"), t.default = new v(a.default, { RTC_DEBUG_MODAL_OPEN: function(e) { var t; I = null !== (t = e.section) && void 0 !== t ? t : E }, RTC_DEBUG_MODAL_CLOSE: function() { L() }, RTC_DEBUG_MODAL_SET_SECTION: function(e) { I = e.section }, RTC_DEBUG_MODAL_UPDATE: function(e) { let { context: t, stats: n, index: i } = e, r = T[t]; if (null != n) { let [e, s, a] = I.split(":"); if (e === t && parseInt(a) === i && null != u.default.getUser(s)) { let { rtp: { inbound: e } } = n; !Object.keys(e).includes(s) && (I = E) } r[i] = function e(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : Date.now(), r = {}; for (let [s, a] of Object.entries(t)) { let t = n[s]; if (Array.isArray(a)) { if ("object" == typeof a[0]) { let n = Array.isArray(t) ? t : [], o = r[s] = []; for (let t = 0; t < a.length; t++) { let r = n[t], s = "object" == typeof r ? r : {}; o.push(e(a[t], s, i)) } } else r[s] = a } else if ("object" == typeof a && null !== a) { let n = "object" == typeof t && null !== t ? t : {}; r[s] = e(a, n, i) } else if (s in S && "number" == typeof a) { let e = r[s] = Array.isArray(t) ? t : []; e.push({ value: a, time: i }), e.length > 600 && e.shift() } else r[s] = a } return r }(n, r[i]) } else delete r[i] }, RTC_DEBUG_MODAL_OPEN_REPLAY: function(e) { o.chooseReplayPath() }, RTC_DEBUG_MODAL_OPEN_REPLAY_AT_PATH: function(e) { let { path: t } = e, n = l.default.getMediaEngine(); if (L(), !n.supports(_.Features.CONNECTION_REPLAY) || 0 === t.length) return; let i = n.createReplayConnection(_.MediaEngineContextTypes.DEFAULT, t); null != i && (O = i, i.on(s.BaseConnectionEvent.Video, (e, t, n, r, s) => { a.default.dispatch({ type: "RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT", mediaEngineConnectionId: i.mediaEngineConnectionId, userId: e, videoSsrc: null != r ? r : 0, streamId: null != t ? t : "" }) }), a.default.wait(() => o.open())) }, RTC_DEBUG_MODAL_UPDATE_VIDEO_OUTPUT: function(e) { N = N.put(e.mediaEngineConnectionId, e.userId, e.videoSsrc, e.streamId) }, RTC_DEBUG_SET_RECORDING_FLAG: function(e) { let { value: t } = e; p = t }, RTC_DEBUG_SET_SIMULCAST_OVERRIDE: function(e) { let { userId: t, context: n, quality: i } = e; f.set(A(t, n), i) }, VOICE_CHANNEL_SELECT: function(e) { null != e.channelId && (g(), f.clear()) } }), l.default.getMediaEngine().on(s.MediaEngineEvent.ConnectionStats, function(e) { Object.values(_.MediaEngineContextTypes).forEach(t => { e.filter(e => { let { connection: n } = e; return n.context === t }).forEach((e, n) => { a.default.dispatch({ type: "RTC_DEBUG_MODAL_UPDATE", stats: e.stats, context: t, index: n, mediaEngineConnectionId: e.connection.mediaEngineConnectionId }) }) }) }) }, 936349: function(e, t, n) { "use strict"; n.r(t); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("70956"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = { preferredRegions: null, lastTestTimestamp: null, lastGeoRankedOrder: null }, _ = d, c = 1 * l.default.Millis.HOUR; class E extends(i = a.default.DeviceSettingsStore) { initialize(e) { _ = null != e ? e : d } shouldIncludePreferredRegion() { return null != _.preferredRegions } getPreferredRegion() { var e, t; return null !== (t = null === (e = _.preferredRegions) || void 0 === e ? void 0 : e[0]) && void 0 !== t ? t : null } getPreferredRegions() { return _.preferredRegions } getRegion(e) { if (null != e) return e.substr(0, e.search(/\d/)) } getUserAgnosticState() { return _ } shouldPerformLatencyTest(e) { var t, n; return null === _.preferredRegions || !s().isEqual(e, null !== (t = _.lastGeoRankedOrder) && void 0 !== t ? t : []) || Date.now() - (null !== (n = _.lastTestTimestamp) && void 0 !== n ? n : 0) >= c } } u(E, "displayName", "RTCRegionStore"), u(E, "persistKey", "RTCRegionStore"), u(E, "migrations", [e => (e.preferredRegion ? e.preferredRegions = [e.preferredRegion] : e.preferredRegions = null, delete e.preferredRegion, e)]), t.default = new E(o.default, { RTC_LATENCY_TEST_COMPLETE: function(e) { e.latencyRankedRegions.length > 0 && (_.lastGeoRankedOrder = e.geoRankedRegions, _.preferredRegions = e.latencyRankedRegions), _.lastTestTimestamp = Date.now() } }) }, 306680: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { shouldBadgeMessage: function() { return eg } }), n("47120"), n("411104"), n("653041"), n("789020"); var r, s, a, o = n("512722"), l = n.n(o), u = n("913527"), d = n.n(u), _ = n("442837"), c = n("544891"), E = n("846519"), I = n("283693"), T = n("570140"), f = n("317381"), S = n("358221"), h = n("702321"), A = n("430198"), m = n("710845"), N = n("924301"), p = n("57132"), O = n("355298"), C = n("869404"), R = n("333984"), g = n("572804"), L = n("140155"), v = n("178480"), D = n("398758"), M = n("725319"), y = n("344185"), P = n("569471"), U = n("195663"), b = n("581883"), G = n("131704"), w = n("386438"), k = n("70956"), B = n("630388"), V = n("823379"), x = n("931619"), F = n("709054"), H = n("314897"), Y = n("433355"), j = n("592125"), W = n("796974"), K = n("828695"), z = n("486472"), Z = n("430824"), X = n("517100"), Q = n("375954"), q = n("496675"), J = n("699516"), $ = n("944486"), ee = n("9156"), et = n("594174"), en = n("451478"), ei = n("981631"), er = n("918559"), es = n("176505"), ea = n("765305"), eo = n("490897"); function el(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let eu = new m.default("ReadStateStore"); __OVERLAY__ && (i = n("237997").default); let ed = ei.BasicPermissions.VIEW_CHANNEL | ei.BasicPermissions.READ_MESSAGE_HISTORY, e_ = $.default.getChannelId(), ec = null, eE = null, eI = !1, eT = [], ef = !1, eS = null, eh = {}, eA = 30 * k.default.Millis.DAY; function em() { return F.default.fromTimestamp(Date.now() - eA) } let eN = 0, ep = 0, eO = null; function eC() { eN = Date.now() - 7 * k.default.Millis.DAY, ep = Date.now() - 3 * k.default.Millis.DAY, clearTimeout(eO), eO = setTimeout(() => { T.default.dispatch({ type: "DECAY_READ_STATES" }) }, 1 * k.default.Millis.HOUR) } function eR(e) { if (null == e) return 0; let t = Date.parse(e); return isNaN(t) ? 0 : t } function eg(e, t) { let n = j.default.getChannel(e.channel_id); return !(null == n || J.default.isBlocked(e.author.id)) && (!!((0, g.default)({ message: e, userId: t.id, suppressEveryone: ee.default.isSuppressEveryoneEnabled(n.guild_id), suppressRoles: ee.default.isSuppressRolesEnabled(n.guild_id) }) || eL(n)) || !1) } function eL(e) { return null != e && e.isPrivate() && !ee.default.isGuildOrCategoryOrChannelMuted(e.guild_id, e.id) } async function ev(e) { if (0 === eT.length) { ef = !1, null == e || e(); return } ef = !0; let t = eT.splice(0, 100); await eD(() => c.HTTP.post({ url: ei.Endpoints.BULK_ACK, body: { read_states: t }, oldFormErrors: !0 })), await (0, E.timeoutPromise)(1e3), ev(e) } async function eD(e) { let t = H.default.getId(); for (let n = 0; n < 3; n++) try { return await e() } catch (e) { if (eu.error("", e), n + 1 < 3 && (await (0, E.timeoutPromise)((n + 1) * 2e3), await x.default.awaitOnline(), t !== H.default.getId())) return Promise.reject(Error("User changed.")) } } function eM(e) { if (e.type !== eo.ReadStateTypes.CHANNEL) return !1; let t = j.default.getChannel(e.channelId), n = null != t && t.isForumPost(); if (null != f.default.getConnectedActivityChannelId() && f.default.getActivityPanelMode() === er.ActivityPanelModes.PANEL && f.default.getFocusedLayout() === er.FocusedActivityLayouts.NO_CHAT || X.default.isIdle() || !e.canTrackUnreads()) return !1; if ((null == t ? void 0 : t.isForumLikeChannel()) !== !0) { let t = eh[e.channelId], n = null != t && en.default.isFocused(t), r = null != i && i.isInstanceFocused() && i.isPinned(ei.OverlayWidgets.TEXT); if (!n && !r) return !1 } if (n && !e._persisted) return !0; if (!e.hasUnreadOrMentions() || (null == t ? void 0 : t.isForumLikeChannel()) === !0 || !(n && !e._isJoinedThread) && !W.default.isAtBottom(e.channelId)) return !1; let r = S.default.getLayout(e.channelId), s = S.default.getChatOpen(e.channelId); if (!s && (r === ei.ChannelLayouts.NO_CHAT || r === ei.ChannelLayouts.FULL_SCREEN) || null == eh[e.channelId]) return !1; let a = Q.default.getMessages(e.channelId); return !!(null != a && a.ready && !a.loadingMore && ((0, M.default)() || s)) || !1 }(a = r || (r = {}))[a.IS_GUILD_CHANNEL = 1] = "IS_GUILD_CHANNEL", a[a.IS_THREAD = 2] = "IS_THREAD"; class ey { static forEach(e) { for (let n of Object.keys(ey._readStates)) { var t; let i = null !== (t = ey._readStates[parseInt(n)]) && void 0 !== t ? t : {}; for (let t of Object.keys(i)) if (!1 === e(i[t])) break } } static get(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL, i = null === (t = ey._readStates[n]) || void 0 === t ? void 0 : t[e]; return null == i && (i = new ey(e, n), null == ey._readStates[n] && (ey._readStates[n] = {}), ey._readStates[n][e] = i), i } static getGuildSentinels(e) { return null == this._guildReadStateSentinels[e] && (this._guildReadStateSentinels[e] = { unreadsSentinel: 0 }), this._guildReadStateSentinels[e] } static resetGuildSentinels() { this._guildReadStateSentinels = {} } static getIfExists(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return null === (t = ey._readStates[n]) || void 0 === t ? void 0 : t[e] } static getMentionChannelIds() { let e = []; for (let t of ey._mentionChannels) { let n = ey.getIfExists(t); null != n && n.canHaveMentions() ? e.push(t) : ey._mentionChannels.delete(t) } return e } static getValue(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL, i = arguments.length > 2 ? arguments[2] : void 0, r = arguments.length > 3 ? arguments[3] : void 0, s = null === (t = ey._readStates[n]) || void 0 === t ? void 0 : t[e]; return null == s ? r : i(s) } static clear(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return (null === (t = ey._readStates[n]) || void 0 === t ? void 0 : t[e]) != null && (delete ey._readStates[n][e], ey._mentionChannels.delete(e), !0) } static clearAll() { ey._readStates = {}, ey._mentionChannels.clear() } serialize(e) { let { channelId: t, type: n, _guildId: i, _isThread: r, _isActiveThread: s, _isJoinedThread: a, _persisted: o, loadedMessages: l, _lastMessageId: u, _lastMessageTimestamp: d, _ackMessageId: _, _ackMessageTimestamp: c, ackPinTimestamp: E, isManualAck: I, lastPinTimestamp: T, _oldestUnreadMessageId: f, oldestUnreadMessageIdStale: S, estimated: h, _mentionCount: A, flags: m, lastViewed: N } = this; if (e) return { channelId: t, type: n, _guildId: i, _isThread: r, _isActiveThread: s, _isJoinedThread: a, _persisted: o, loadedMessages: l, _lastMessageId: u, _lastMessageTimestamp: d, _ackMessageId: _, _ackMessageTimestamp: c, ackPinTimestamp: E, isManualAck: I, lastPinTimestamp: T, _oldestUnreadMessageId: f, oldestUnreadMessageIdStale: S, estimated: h, _mentionCount: A, flags: m, lastViewed: N }; let p = { channelId: t, type: n, _guildId: i, _persisted: o, _lastMessageId: u, _lastMessageTimestamp: d, _ackMessageId: _, _ackMessageTimestamp: c, ackPinTimestamp: E, lastPinTimestamp: T, _mentionCount: A, flags: m }; return null != N && N > 0 && (p.lastViewed = N), r && (p._isThread = r, p._isActiveThread = s, p._isJoinedThread = a), p } deserializeForOverlay(e) { let { channelId: t, type: n, _guildId: i, _isThread: r, _isActiveJoinedThread: s, _isActiveThread: a, _isJoinedThread: o, _persisted: l, loadedMessages: u, _lastMessageId: d, _lastMessageTimestamp: _, _ackMessageId: c, _ackMessageTimestamp: E, ackPinTimestamp: I, isManualAck: T, lastPinTimestamp: f, _oldestUnreadMessageId: S, oldestUnreadMessageIdStale: h, estimated: A, _unreadCount: m, _mentionCount: N, flags: p, lastViewed: O } = e; this.channelId = t, this.type = null != n ? n : eo.ReadStateTypes.CHANNEL, this._guildId = i, this._isThread = null != r && r, null != s ? (this._isActiveThread = s, this._isJoinedThread = s) : (this._isActiveThread = null != a && a, this._isJoinedThread = null != o && o), this._persisted = !1 !== l, this.loadedMessages = null != u && u, this._lastMessageId = d, this._lastMessageTimestamp = _, this._ackMessageId = c, this._ackMessageTimestamp = E, this.ackPinTimestamp = I, this.isManualAck = null != T && T, this.lastPinTimestamp = f, this._oldestUnreadMessageId = S, this.oldestUnreadMessageIdStale = null != h && h, this.estimated = null != A && A, this._unreadCount = null != m ? m : 0, this._mentionCount = N, this.flags = p, this.lastViewed = O, ey._mentionChannels.delete(this.channelId), this._mentionCount > 0 && this.canHaveMentions() && ey._mentionChannels.add(this.channelId) } incrementGuildUnreadsSentinel() { null != this._guildId && ey.getGuildSentinels(this._guildId).unreadsSentinel++ } get oldestUnreadMessageId() { return this._oldestUnreadMessageId } set oldestUnreadMessageId(e) { this._oldestUnreadMessageId = e, this.oldestUnreadMessageIdStale = !1 } get lastMessageId() { return this._lastMessageId } set lastMessageId(e) { this._lastMessageId = e, this._lastMessageTimestamp = null != e ? F.default.extractTimestamp(e) : 0 } get lastMessageTimestamp() { return this._lastMessageTimestamp } get ackMessageId() { return this._ackMessageId } set ackMessageId(e) { this._ackMessageId = e, this._ackMessageTimestamp = null != e ? F.default.extractTimestamp(e) : 0 } get unreadCount() { var e; return null !== (e = this._unreadCount) && void 0 !== e ? e : 0 } set unreadCount(e) { (void 0 === this._unreadCount || 0 === this._unreadCount || 0 === e) && this.incrementGuildUnreadsSentinel(), this._unreadCount = e } get mentionCount() { return this._mentionCount } set mentionCount(e) { (0 === this._mentionCount || 0 === e) && this._mentionCount !== e && this.incrementGuildUnreadsSentinel(), this._mentionCount = e, ey._mentionChannels.delete(this.channelId), this._mentionCount > 0 && this.canHaveMentions() && ey._mentionChannels.add(this.channelId) } guessAckMessageId() { let e = Q.default.getMessages(this.channelId); if (null != this.ackMessageId || !this.isPrivate() || e.hasMoreAfter) return this.ackMessageId; if (!this.hasMentions()) return this.lastMessageId; let t = null, n = this.mentionCount, i = et.default.getCurrentUser(); return e.forEach(e => { if (n > 0 && e.author.id !== (null == i ? void 0 : i.id)) --n; else if (0 === n) return t = e.id, !1 }, this, !0), t } get guildId() { if (null != this._guildId) return this._guildId; let e = j.default.getChannel(this.channelId); return this._guildId = null != e ? e.getGuildId() : null } isPrivate() { if (this.type !== eo.ReadStateTypes.CHANNEL) return !1; let e = j.default.getChannel(this.channelId); return null != e && e.isPrivate() } rebuildChannelState(e) { var t, n; let i = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], r = arguments.length > 2 ? arguments[2] : void 0; if (this.ackMessageId = null !== (t = null != e ? e : this._ackMessageId) && void 0 !== t ? t : this.guessAckMessageId(), this.isManualAck = null != e, this.oldestUnreadMessageId = null, this.estimated = !1, this.unreadCount = 0, i && (this.mentionCount = 0), this.hasUnread()) { let e = et.default.getCurrentUser(), t = this.getAckTimestamp(), r = !1, s = !1, a = null, o = Q.default.getMessages(this.channelId); o.forAll(n => { if (r) { var o; this.oldestUnreadMessageId = null !== (o = this._oldestUnreadMessageId) && void 0 !== o ? o : n.id } else r = n.id === this._ackMessageId; F.default.extractTimestamp(n.id) > t ? (this.unreadCount++, i && eg(n, e) && this.mentionCount++, a = null != a ? a : n.id) : s = !0 }), this.estimated = !o.hasPresent() || !(r || s) && o.length === this.unreadCount, this.oldestUnreadMessageId = null !== (n = this._oldestUnreadMessageId) && void 0 !== n ? n : a } null != r && (this.mentionCount = r) } handleGuildEventRemoval(e, t) { var n; if (F.default.compare(this.ackMessageId, t) >= 0) return; let i = N.default.getGuildScheduledEventsForGuild(e), r = this.getAckTimestamp(); if (isNaN(r)) return; let s = null !== (n = this._ackMessageId) && void 0 !== n ? n : F.default.fromTimestamp(r), a = null, o = 0; i.forEach(e => { (0, N.isEventUpcoming)(e) && (F.default.compare(e.id, a) > 0 && (a = e.id), F.default.compare(e.id, s) > 0 && o++) }), this.lastMessageId = a, this.mentionCount = o } canTrackUnreads() { if (this.type !== eo.ReadStateTypes.CHANNEL) return !0; if (this._isThread && !this._isActiveThread || this._isResourceChannel) return !1; let e = j.default.getBasicChannel(this.channelId); return null != e && ("basicPermissions" in e ? w.default.has(e.basicPermissions, ei.BasicPermissions.VIEW_CHANNEL) : !A.default.isChannelGated(this.guildId, this.channelId) || q.default.can(ei.Permissions.VIEW_CHANNEL, e)) } canBeUnread() { return !(this._isThread && !this._isJoinedThread || (0, C.isMessageRequestOrSpamRequest)(this.channelId, [O.default, R.default]) || !this._isThread && (0, D.isOptInEnabledForGuild)(this._guildId) && (this._lastMessageTimestamp < eN || !ee.default.isChannelOrParentOptedIn(this._guildId, this.channelId) && !this.hasRecentlyVisitedAndRead() && !this.hasMentions())) && this.canTrackUnreads() } canHaveMentions() { return !(0 === this.mentionCount || this._isThread && !this._isJoinedThread || (0, C.isMessageRequestOrSpamRequest)(this.channelId, [O.default, R.default]) || (0, D.isOptInEnabledForGuild)(this._guildId) && this._lastMessageTimestamp < eN) && this.canTrackUnreads() } getGuildChannelUnreadState(e, t, n, i, r) { if (t && (this._lastMessageTimestamp < eN || !ee.default.isChannelRecordOrParentOptedIn(e) && !this.hasRecentlyVisitedAndRead() && this.mentionCount <= 0)) return { mentionCount: 0, unread: !1 }; if ("basicPermissions" in e) { if (!w.default.has(e.basicPermissions, ei.BasicPermissions.VIEW_CHANNEL)) return { mentionCount: 0, unread: !1 } } else if (A.default.isChannelGated(this.guildId, this.channelId) && !q.default.can(ei.Permissions.VIEW_CHANNEL, e)) return { mentionCount: 0, unread: !1 }; return i || r ? { mentionCount: this.mentionCount, unread: !1 } : { mentionCount: this.mentionCount, unread: this.getAckTimestamp() < this._lastMessageTimestamp } } hasUnread() { return this.getAckTimestamp() < this._lastMessageTimestamp } hasRecentlyVisitedAndRead() { return this._lastMessageTimestamp > 0 && null != this._ackMessageId && this.getAckTimestamp() > ep && b.default.getGuildRecentsDismissedAt(this._guildId) < this.getAckTimestamp() } isForumPostUnread() { return !!this._isActiveThread && this.hasUnread() } hasMentions() { return this.getMentionCount() > 0 } getMentionCount() { return this.mentionCount } hasUnreadOrMentions() { return this.hasMentions() || this.hasUnread() } ackPins() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null; if (this.type !== eo.ReadStateTypes.CHANNEL || !this.canTrackUnreads()) return !1; if (null == e) { if (this.lastPinTimestamp === this.ackPinTimestamp) return !1; this._persisted = !0, eD(() => c.HTTP.post({ url: ei.Endpoints.PINS_ACK(this.channelId), oldFormErrors: !0 })) } let t = eR(e); return this.ackPinTimestamp = 0 !== t ? t : this.lastPinTimestamp, !0 } ack(e) { let { messageId: t, local: n = !1, immediate: i = !1, force: r = !1, isExplicitUserAction: s = !1, location: a = { section: ei.AnalyticsSections.CHANNEL }, trackAnalytics: o = !0 } = e; if (!this._shouldAck(r, n, s) || !r && !this.canTrackUnreads()) return !1; let l = this.hasMentions(); return this.estimated = !1, this.snapshot = this.takeSnapshot(), this.unreadCount = 0, this.mentionCount = 0, (null != t || null != (t = this.lastMessageId)) && (this.ackMessageId = t, this.isManualAck = !1, this._persisted = !0, eI && (this.ackedWhileCached = !0), function(e) { if (null == e) return; let t = ey.get(e); if (t.type !== eo.ReadStateTypes.CHANNEL) return; let n = j.default.getChannel(t.channelId); if (null == n || !n.isForumPost() || null == n.parent_id) return; let i = n.parent_id, r = ey.get(i); y.default.hasLoaded(n.guild_id) && F.default.keys(y.default.getThreadsForParent(n.guild_id, i)).every(e => e$.hasOpenedThread(e) || 0 > F.default.compare(e, r.ackMessageId)) && r.ack({}) }(this.channelId), n ? this.oldestUnreadMessageId = null : (null == this.outgoingAck && (this.outgoingAckTimer = setTimeout(() => { this.type === eo.ReadStateTypes.CHANNEL ? this._ack(a, o) : this._nonChannelAck(), this.outgoingAck = null, this.outgoingAckTimer = null }, l || i ? 0 : 3e3)), this.outgoingAck = t), !0) } takeSnapshot() { let { default: e } = n("888369"), t = this.guildId; return { unread: this.hasUnread(), mentionCount: this.mentionCount, guildUnread: null == t ? null : e.hasUnread(t), guildMentionCount: null == t ? null : e.getMentionCount(t), takenAt: Date.now() } } clearOutgoingAck() { this.outgoingAck = null, null != this.outgoingAckTimer && (clearTimeout(this.outgoingAckTimer), this.outgoingAckTimer = null) } _shouldAck(e, t, n) { var i; return !!e || !!n || !!t || !!(!this.isManualAck && (this.type !== eo.ReadStateTypes.CHANNEL || this.loadedMessages || (null === (i = j.default.getChannel(this.channelId)) || void 0 === i ? void 0 : i.isForumLikeChannel()))) || !1 } _ack(e, t) { let { outgoingAck: i } = this; if (null == i) return; let r = H.default.getId(), s = eE; this._persisted = !0; let a = this.recalculateFlags(), o = a === this.flags ? void 0 : a; eD(() => c.HTTP.post({ url: ei.Endpoints.MESSAGE_ACK(this.channelId, i), body: { token: eE, last_viewed: this.lastViewed, flags: o }, oldFormErrors: !0 })).then(e => { null != e && (eE === s && r === H.default.getId() && (eE = e.body.token), T.default.dispatch({ type: "MESSAGE_ACKED" }), t && n.e("54076").then(n.bind(n, "189229")).then(e => { let { default: t } = e; t(this.channelId) })) }) } recalculateFlags() { if (this.type !== eo.ReadStateTypes.CHANNEL) return; let e = j.default.getChannel(this.channelId); if (null != e) return e.isThread() ? 2 : null != e.guild_id ? 1 : 0 } _nonChannelAck() { let e; let { outgoingAck: t, channelId: n, type: i } = this; if (null != t) { switch (i) { case eo.ReadStateTypes.GUILD_HOME: case eo.ReadStateTypes.GUILD_EVENT: case eo.ReadStateTypes.GUILD_ONBOARDING_QUESTION: e = ei.Endpoints.GUILD_FEATURE_ACK(n, t, i); break; case eo.ReadStateTypes.NOTIFICATION_CENTER: case eo.ReadStateTypes.MESSAGE_REQUESTS: e = ei.Endpoints.USER_NON_CHANNEL_ACK(t, i); break; default: return } this._persisted = !0, eD(() => c.HTTP.post({ url: e, body: {}, oldFormErrors: !0 })) } } delete() { var e; let t = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0], n = j.default.getBasicChannel(this.channelId); eu.log("Deleting ReadState", this.channelId, this.type, { remote: t, persisted: this._persisted, channelMissing: null == n, isOld: ek(this, em()), validType: null != n && G.ALL_CHANNEL_TYPES.has(n.type), readableType: null != n && (0, G.isReadableType)(n.type), oldThreadCutoff: em(), mentionCount: this.mentionCount, channelId: this.channelId, ackMessageId: this._ackMessageId, lastMessageId: this._lastMessageId }), t && this._persisted && c.HTTP.del({ url: ei.Endpoints.CHANNEL_ACK(this.channelId), body: { version: 2, read_state_type: this.type }, oldFormErrors: !0 }), null === (e = ey._readStates[this.type]) || void 0 === e || delete e[this.channelId], ey._mentionChannels.delete(this.channelId) } shouldDeleteReadState(e) { if (0 !== z.default.totalUnavailableGuilds) return !1; if (null != this.type && this.type !== eo.ReadStateTypes.CHANNEL) return ! function(e) { switch (e.type) { case eo.ReadStateTypes.GUILD_HOME: case eo.ReadStateTypes.GUILD_EVENT: case eo.ReadStateTypes.GUILD_ONBOARDING_QUESTION: return null != Z.default.getGuild(e.channelId); case eo.ReadStateTypes.NOTIFICATION_CENTER: var t; return F.default.cast(null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id) === e.channelId; default: return !0 } }(this); let t = j.default.getBasicChannel(this.channelId); if (null == t) return !!ek(this, e) || !1; return !!G.ALL_CHANNEL_TYPES.has(t.type) && (!(0, G.isReadableType)(t.type) || !(0, G.isPrivate)(t.type) && (!!(G.THREAD_CHANNEL_TYPES.has(t.type) && function(e, t, n) { let i = e.guildId; return !(null != i && y.default.isActive(i, t.parent_id, e.channelId)) && ek(e, n) }(this, t, e)) || !!(this.mentionCount > 0) && !q.default.canBasicChannel(ed, t) || !1)) } getAckTimestamp() { let e, t; if (0 !== this._ackMessageTimestamp && !isNaN(this._ackMessageTimestamp)) return this._ackMessageTimestamp; if (this._isThread) return this._ackMessageTimestamp = eG(this.guildId, this.channelId), this._ackMessageId = F.default.fromTimestamp(this._ackMessageTimestamp), this._ackMessageTimestamp; if (this.type === eo.ReadStateTypes.GUILD_EVENT || this.type === eo.ReadStateTypes.GUILD_ONBOARDING_QUESTION) e = Z.default.getGuild(this.channelId); else if ((0, es.isStaticChannelRoute)(this.channelId)) e = Z.default.getGuild(this.guildId); else { let t = j.default.getChannel(this.channelId); if (null != t) { let n = t.getGuildId(); e = Z.default.getGuild(n) } } return null != e ? isNaN(t = ew(e)) && (t = F.default.extractTimestamp(this.channelId)) : t = F.default.extractTimestamp(this.channelId), this._ackMessageTimestamp = t, t } get oldestUnreadTimestamp() { return null != this.oldestUnreadMessageId ? F.default.extractTimestamp(this.oldestUnreadMessageId) : 0 } syncThreadSettings() { this._isThread = !0; let e = j.default.getChannel(this.channelId); if (null == e) return eu.warn("syncThreadSettings called with channel not in memory ".concat(this.channelId)), !1; let t = this.guildId, n = null != t && y.default.isActive(t, e.parent_id, this.channelId), i = P.default.hasJoined(this.channelId); return (this._isActiveThread !== n || this._isJoinedThread !== i) && (this._isActiveThread = n, this._isJoinedThread = i, !0) } recordLastViewedTime() { let e = Math.ceil((Date.now() - F.DISCORD_EPOCH) / k.default.Millis.DAY); e !== this.lastViewed && (this.lastViewed = e, this.canTrackUnreads() && !this.hasUnread() && this.ack({ force: !0, trackAnalytics: !1 })) } constructor(e, t = eo.ReadStateTypes.CHANNEL) { el(this, "channelId", void 0), el(this, "type", eo.ReadStateTypes.CHANNEL), el(this, "_guildId", void 0), el(this, "_isThread", void 0), el(this, "_isActiveThread", void 0), el(this, "_isJoinedThread", void 0), el(this, "_isResourceChannel", void 0), el(this, "_persisted", void 0), el(this, "loadedMessages", void 0), el(this, "_lastMessageId", void 0), el(this, "_lastMessageTimestamp", void 0), el(this, "_ackMessageId", void 0), el(this, "_ackMessageTimestamp", void 0), el(this, "isManualAck", void 0), el(this, "ackPinTimestamp", void 0), el(this, "lastPinTimestamp", void 0), el(this, "_oldestUnreadMessageId", void 0), el(this, "oldestUnreadMessageIdStale", void 0), el(this, "estimated", void 0), el(this, "_unreadCount", void 0), el(this, "_mentionCount", void 0), el(this, "flags", void 0), el(this, "lastViewed", void 0), el(this, "outgoingAck", void 0), el(this, "outgoingAckTimer", null), el(this, "ackMessageIdAtChannelSelect", null), el(this, "ackedWhileCached", void 0), el(this, "snapshot", void 0), this.channelId = e, this.type = t, this._guildId = null, this._isThread = !1, this._isActiveThread = !1, this._isJoinedThread = !1, this._isResourceChannel = !1, this._persisted = !1, this.loadedMessages = !1, this._lastMessageId = null, this._lastMessageTimestamp = 0, this._ackMessageId = null, this._ackMessageTimestamp = 0, this.isManualAck = !1, this.ackPinTimestamp = 0, this.lastPinTimestamp = 0, this._oldestUnreadMessageId = null, this.oldestUnreadMessageIdStale = !1, this.estimated = !1, this._unreadCount = 0, this._mentionCount = 0, this.outgoingAck = null } } function eP(e) { e.forEach(e => { if ((0, G.isReadableType)(e.type)) { let t = ey.get(e.id); t._guildId = e.guild_id, t.lastMessageId = e.lastMessageId, t.lastPinTimestamp = eR(e.lastPinTimestamp), t._isResourceChannel = e.hasFlag(es.ChannelFlags.IS_GUILD_RESOURCE_CHANNEL), G.THREAD_CHANNEL_TYPES.has(e.type) && t.syncThreadSettings() } }) } function eU(e) { e.forEach(e => { if ((0, G.isReadableType)(e.type)) { var t; let n = ey.get(e.id); n.lastMessageId = e.last_message_id, n.lastPinTimestamp = eR(e.last_pin_timestamp), n._isResourceChannel = (0, B.hasFlag)(null !== (t = e.flags) && void 0 !== t ? t : 0, es.ChannelFlags.IS_GUILD_RESOURCE_CHANNEL), G.THREAD_CHANNEL_TYPES.has(e.type) && n.syncThreadSettings() } }) } function eb(e) { (function(e) { var t; null === (t = e.threads) || void 0 === t || t.forEach(t => { if (!G.ALL_CHANNEL_TYPES.has(t.type)) return; let n = ey.get(t.id); n.lastMessageId = t.lastMessageId, n.lastPinTimestamp = eR(t.lastPinTimestamp), n._isThread = !0, n._isActiveThread = !0, n._isJoinedThread = null != t.member, null == n.ackMessageId && (n.ackMessageId = F.default.fromTimestamp(eG(e.id, t.id))), null == n.ackPinTimestamp && (n.ackPinTimestamp = eG(e.id, t.id)) }) })(e), function(e) { var t, n; if ((null === (t = e.guild_scheduled_events) || void 0 === t ? void 0 : t.length) === 0 && null == ey.getIfExists(e.id, eo.ReadStateTypes.GUILD_EVENT)) return; let i = ey.get(e.id, eo.ReadStateTypes.GUILD_EVENT); i._guildId = e.id; let r = 0, s = null, a = null !== (n = i._ackMessageId) && void 0 !== n ? n : F.default.fromTimestamp(i.getAckTimestamp()); e.guild_scheduled_events.forEach(e => { F.default.compare(e.id, s) > 0 && (s = e.id), F.default.compare(e.id, a) > 0 && r++ }), i.lastMessageId = s, i.mentionCount = r }(e), function(e) { ey.get(e.id, eo.ReadStateTypes.GUILD_HOME).lastMessageId = F.default.fromTimestamp(d()(Date.now()).subtract(24, "h").valueOf()) }(e), function(e) { let t = Z.default.getGuild(e.id); if (null == t) return; let n = null == t ? void 0 : t.latestOnboardingQuestionId; if (null == n) return; let i = ey.get(t.id, eo.ReadStateTypes.GUILD_ONBOARDING_QUESTION); i._guildId = t.id, i.lastMessageId = n }(e) } el(ey, "_guildReadStateSentinels", {}), el(ey, "_readStates", {}), el(ey, "_mentionChannels", new Set); function eG(e, t) { var n, i, r; let s = j.default.getChannel(t), a = Z.default.getGuild(null != e ? e : null == s ? void 0 : s.guild_id), o = (null == s ? void 0 : s.isForumPost()) ? 0 : ew(a), l = (null !== (r = null === (n = P.default.joinTimestamp(t)) || void 0 === n ? void 0 : n.getTime()) && void 0 !== r ? r : 0) - 5e3; isNaN(l) && (l = -5e3); let u = null == s ? void 0 : null === (i = s.threadMetadata) || void 0 === i ? void 0 : i.archiveTimestamp, d = null != u ? new Date(u).getTime() - 1 : 0; isNaN(d) && (d = 0); let _ = Math.max(l, d); return _ <= 0 && (_ = F.default.extractTimestamp(t) - 1), (isNaN(_) || _ <= 0) && (_ = 0), isNaN(o) ? _ : Math.max(o, _) } function ew(e) { if (null != e && null != e.joinedAt) { if (e.joinedAt instanceof Date) isNaN(e.joinedAt.getTime()); else if ("string" == typeof e.joinedAt) isNaN(new Date(e.joinedAt).getTime()); else if ("number" == typeof e.joinedAt && !isNaN(e.joinedAt)) return e.joinedAt } return Date.now() } function ek(e, t) { return !!(e.mentionCount > 0) || !(F.default.compare(e.channelId, t) > 0 || null != e._ackMessageId && F.default.compare(e._ackMessageId, t) > 0 || null != e._lastMessageId && F.default.compare(e._lastMessageId, t) > 0) && !0 } function eB(e) { if (null != e) { let t = ey.get(e); if (eM(t)) return t.ack({}) } return !1 } function eV() { null != eS && clearTimeout(eS) } function ex(e) { if (null != e.channelUpdates) { var t; eP(null === (t = e.channelUpdates) || void 0 === t ? void 0 : t.writes) } if (null != e.channelTimestampUpdates) for (let t of e.channelTimestampUpdates) { let e = ey.get(t.id); null != t.last_message_id && (e.lastMessageId = t.last_message_id), null != t.last_pin_timestamp && (e.lastPinTimestamp = eR(t.last_pin_timestamp)) } } function eF(e) { let { channelId: t } = e; ey.get(t).rebuildChannelState() } function eH(e) { let { threads: t } = e; eU(t) } function eY(e) { let { messages: t, threads: n } = e; for (let e of t) eU(e.map(e => { let { thread: t } = e; return t }).filter(V.isNotNullish)); eU(n) } function ej(e) { let t = et.default.getCurrentUser(); return null != e.creator_id && null != t && e.creator_id === t.id } function eW(e) { let { channel: t } = e; return ey.clear(t.id) } function eK() { let e = Y.default.getCurrentSidebarChannelId(e_), t = !1; return ec !== e ? (t = eZ(ec), ec = e) : t = eB(e) || t, t } function ez(e) { if (null != e) ey.get(e).isManualAck = !1 } function eZ(e) { if (null == e) return !1; let t = ey.get(e); return !t.hasUnread() && (t.oldestUnreadMessageId = null, !0) } function eX(e) { let { channelId: t, messageId: n, manual: i, newMentionCount: r } = e, s = ey.get(t); return i ? (s.rebuildChannelState(n, !0, r), !0) : n !== s._ackMessageId && s.ack({ messageId: n, local: !0 }) } function eQ(e) { let { id: t, ackType: n, ackedId: i, local: r } = e; return eq(t, n, i, r) } function eq(e, t, n, i) { var r; let s = ey.get(e, t); return n !== s.ackMessageId && s.lastMessageId !== s.ackMessageId && (null != s.lastMessageId || 0 !== s.mentionCount) && (n = null !== (r = null != n ? n : s.lastMessageId) && void 0 !== r ? r : F.default.fromTimestamp(s.getAckTimestamp()), s.ack({ messageId: n, local: null == i || i })) } class eJ extends(s = _.default.Store) { initialize() { let e = [W.default, et.default, Z.default, z.default, j.default, $.default, Q.default, q.default, S.default, y.default, P.default, Y.default, N.default, K.default, A.default, ee.default, en.default, L.default, O.default, b.default, R.default]; this.waitFor(...e), this.syncWith([Y.default], eK) } getReadStatesByChannel() { var e; return null !== (e = ey._readStates[eo.ReadStateTypes.CHANNEL]) && void 0 !== e ? e : {} } getForDebugging(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getIfExists(e, t) } getNotifCenterReadState(e) { var t; return null === (t = ey._readStates[eo.ReadStateTypes.NOTIFICATION_CENTER]) || void 0 === t ? void 0 : t[e] } hasUnread(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canBeUnread() && e.hasUnread(), !1) } hasUnreadOrMentions(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canBeUnread() && e.hasUnreadOrMentions(), !1) } hasTrackedUnread(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canTrackUnreads() && e.hasUnread(), !1) } isForumPostUnread(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.isForumPostUnread(), !1) } getUnreadCount(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canBeUnread() ? e.unreadCount : 0, 0) } getMentionCount(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL, n = ey.getValue(e, t, e => e.canHaveMentions() ? e.getMentionCount() : 0, 0); if ((0, h.default)(e)) { if (n > 0) return 1 } return n } getGuildChannelUnreadState(e, t, n, i, r) { return ey.getValue(e.id, eo.ReadStateTypes.CHANNEL, s => s.getGuildChannelUnreadState(e, t, n, i, r), { mentionCount: 0, unread: !1 }) } hasRecentlyVisitedAndRead(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.hasRecentlyVisitedAndRead(), !1) } ackMessageId(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canBeUnread() ? e.ackMessageId : null, null) } getTrackedAckMessageId(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canTrackUnreads() ? e._ackMessageId : null, null) } lastMessageId(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.lastMessageId, null) } lastMessageTimestamp(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.lastMessageTimestamp, 0) } lastPinTimestamp(e) { return ey.getValue(e, eo.ReadStateTypes.CHANNEL, e => e.lastPinTimestamp, null) } getOldestUnreadMessageId(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canTrackUnreads() ? e.oldestUnreadMessageId : null, null) } getOldestUnreadTimestamp(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.canTrackUnreads() ? e.oldestUnreadTimestamp : 0, 0) } isEstimated(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e.estimated, !1) } hasOpenedThread(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : eo.ReadStateTypes.CHANNEL; return ey.getValue(e, t, e => e._persisted, !1) } hasUnreadPins(e) { return ey.getValue(e, eo.ReadStateTypes.CHANNEL, e => e.canBeUnread() && e.lastPinTimestamp > e.ackPinTimestamp, !1) } isNewForumThread(e, t, n) { let i = ey.get(t); if (!0 === ey.get(e)._persisted || null == i.ackMessageIdAtChannelSelect || 0 >= F.default.compare(e, i.ackMessageIdAtChannelSelect)) return !1; let r = ew(n); return F.default.extractTimestamp(e) > r } getAllReadStates(e) { let t = []; return ey.forEach(n => { switch (n.type) { case eo.ReadStateTypes.GUILD_HOME: case eo.ReadStateTypes.GUILD_EVENT: case eo.ReadStateTypes.GUILD_ONBOARDING_QUESTION: null != Z.default.getGuild(n.channelId) && t.push(n.serialize(e)); break; case eo.ReadStateTypes.NOTIFICATION_CENTER: case eo.ReadStateTypes.MESSAGE_REQUESTS: var i; F.default.cast(null === (i = et.default.getCurrentUser()) || void 0 === i ? void 0 : i.id) === n.channelId && t.push(n.serialize(e)); break; default: t.push(n.serialize(e)) } }), t } getGuildUnreadsSentinel(e) { return ey.getGuildSentinels(e).unreadsSentinel } getMentionChannelIds() { return ey.getMentionChannelIds() } getNonChannelAckId(e) { var t; let n = null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; return null == n ? null : ey.get(n, e).ackMessageId } getSnapshot(e, t) { let n = ey.get(e); return null == n.snapshot || Date.now() - n.snapshot.takenAt > t ? n.takeSnapshot() : n.snapshot } } el(eJ, "displayName", "ReadStateStore"); let e$ = new eJ(T.default, { BACKGROUND_SYNC_CHANNEL_MESSAGES: function(e) { let { changesByChannelId: t } = e; for (let e in t) { var n, i; let r = t[e], s = ey.getIfExists(e); if (null != s) for (let e of [null === (n = r.new_messages) || void 0 === n ? void 0 : n[0]].concat(null !== (i = r.modified_messages) && void 0 !== i ? i : []).filter(V.isNotNullish)) 1 === F.default.compare(e.id, s.lastMessageId) && (s.lastMessageId = e.id) } }, CONNECTION_OPEN: function(e) { var t, n; let { guilds: i, relationships: r, initialPrivateChannels: s, readState: a } = e; eC(), eE = null, !eI && !a.partial && ey.clearAll(), eI = !1, a.entries.forEach(e => { var t, n, i; let r = null !== (t = e.read_state_type) && void 0 !== t ? t : eo.ReadStateTypes.CHANNEL; if (r !== eo.ReadStateTypes.CHANNEL) { ; e = { id: (i = e).id, read_state_type: i.read_state_type, mention_count: i.badge_count, last_message_id: i.last_acked_id } } let s = ey.get(e.id, r); s._persisted = !0, s._mentionCount = null !== (n = e.mention_count) && void 0 !== n ? n : 0, s.flags = e.flags, s.lastViewed = e.last_viewed; let a = j.default.getBasicChannel(e.id); null != a && (0, G.isThread)(a.type) && (null == e.last_message_id || 0 === e.last_message_id) ? s.ackMessageId = F.default.fromTimestamp(eG(a.guild_id, a.id)) : s.ackedWhileCached ? -1 === F.default.compare(s.ackMessageId, e.last_message_id) && (s.ackMessageId = e.last_message_id) : s.ackMessageId = e.last_message_id, s.ackedWhileCached = void 0, s.ackPinTimestamp = eR(e.last_pin_timestamp), ey._mentionChannels.delete(s.channelId), s._mentionCount > 0 && s.canHaveMentions() && ey._mentionChannels.add(s.channelId) }), ey.resetGuildSentinels(); let o = null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; for (let e of (null != o && (ey.get(o, eo.ReadStateTypes.NOTIFICATION_CENTER).lastMessageId = F.default.fromTimestamp(Date.now())), function(e) { let t = et.default.getCurrentUser(); if (!(0, v.inNotificationCenterEnabled)() || null == t) return 0; let n = ey.get(t.id, eo.ReadStateTypes.NOTIFICATION_CENTER); e.forEach(e => { if (null == e.since || e.type !== ei.RelationshipTypes.PENDING_INCOMING) return; let t = new Date(e.since).getTime(); (null != n.ackMessageId ? F.default.extractTimestamp(n.ackMessageId) : 0) < t && (n.mentionCount++, n.lastMessageId = F.default.fromTimestamp(t)) }) }(r), eP(s), i)) eP(null !== (n = e.channels) && void 0 !== n ? n : []), ex(e), eb(e); eV(), eS = setTimeout(() => (function(e) { let t = em(); for (let i of e) { var n; let e = null !== (n = i.read_state_type) && void 0 !== n ? n : eo.ReadStateTypes.CHANNEL, r = ey.get(i.id, e); r.shouldDeleteReadState(t) && r.delete() } })(a.entries), 10 * k.default.Millis.SECOND) }, CONNECTION_OPEN_SUPPLEMENTAL: function(e) { let { lazyPrivateChannels: t } = e; eP(t) }, LOGOUT: eV, OVERLAY_INITIALIZE: function(e) { let { readStates: t, selectedChannelId: n } = e; eC(), eE = null, e_ = n, ec = Y.default.getCurrentSidebarChannelId(e_), ey.clearAll(), t.forEach(e => { let t = ey.get(e.channelId); t.deserializeForOverlay(e), t.type === eo.ReadStateTypes.CHANNEL && t.rebuildChannelState() }) }, CACHE_LOADED: function(e) { let { readStates: t } = e; eI = !0, eC(), t.forEach(e => { var t; let n = null !== (t = e.type) && void 0 !== t ? t : eo.ReadStateTypes.CHANNEL; e.type = n, null == ey._readStates[n] && (ey._readStates[n] = {}), ey._readStates[n][e.channelId] = (0, I.dangerouslyCast)(e, ey) }) }, GUILD_CREATE: function(e) { var t; let { guild: n } = e, i = em(); ey.forEach(e => { e.guildId === n.id && e.shouldDeleteReadState(i) && e.delete(!1) }), eP(null !== (t = n.channels) && void 0 !== t ? t : []), ex(n), eb(n) }, LOAD_MESSAGES_SUCCESS: function(e) { let { channelId: t, isAfter: n, messages: i } = e, r = ey.get(t); r.loadedMessages = !0; let s = Q.default.getMessages(t); null != s && (i.length > 0 && 1 === F.default.compare(i[0].id, r.ackMessageId) && 0 === r.unreadCount ? r.rebuildChannelState() : s.hasPresent() || s.jumpTargetId === r.ackMessageId ? r.rebuildChannelState() : n && null != r.ackMessageId && s.has(r.ackMessageId, !0) && (r.unreadCount += i.length, null == r.oldestUnreadMessageId && r.rebuildChannelState())), eU(i.map(e => e.thread).filter(V.isNotNullish)) }, MESSAGE_CREATE: function(e) { let t, n, { channelId: r, message: s, isPushNotification: a } = e, o = ey.get(r); o.lastMessageId = s.id; let l = et.default.getCurrentUser(), u = j.default.getBasicChannel(r); if (null != s.author && null != l && s.author.id === l.id && !ei.MessageTypesSets.SELF_MENTIONABLE_SYSTEM.has(s.type)) return null != o.outgoingAck && o.clearOutgoingAck(), eX({ channelId: r, messageId: s.id, manual: !1 }); let d = (0, p.getRootNavigationRefIfInExperiment)(); if ((null == d ? void 0 : d.isReady()) === !0) { let e = d.getCurrentRoute(); if (S.default.getChatOpen(o.channelId)) t = o.channelId; else if ((null == e ? void 0 : e.name) === "channel") t = e.params.channelId; else if ((null == e ? void 0 : e.name) === "guilds") { var _; t = null === (_ = e.params) || void 0 === _ ? void 0 : _.channelId } } else null == d && (t = $.default.getChannelId(), n = Y.default.getCurrentSidebarChannelId(t)); let c = t === r || n === r; if (c && eM(o) && !a || null != i && i.isInstanceFocused() && c && i.isInstanceUILocked() && i.isPinned(ei.OverlayWidgets.TEXT)) return o.ack({ messageId: s.id }); (null == o.oldestUnreadMessageId || o.oldestUnreadMessageIdStale) && (o.oldestUnreadMessageId = s.id), o.unreadCount++, !(null != s.author && J.default.isBlocked(s.author.id) || s.type === ei.MessageTypes.RECIPIENT_REMOVE && (null == u ? void 0 : u.type) === ei.ChannelTypes.GROUP_DM) && function(e, t, n) { if (null != t && (0, g.isRawMessageMentioned)({ rawMessage: e, userId: t.id, suppressEveryone: ee.default.isSuppressEveryoneEnabled(n.guildId), suppressRoles: ee.default.isSuppressRolesEnabled(n.guildId) })) return !0; let i = j.default.getChannel(e.channel_id); return !!eL(i) || !!ee.default.mentionOnAllMessages && null != i && !i.isVocal() && !ee.default.isChannelMuted(i.guild_id, i.id) && ee.default.resolvedMessageNotifications(i) === ei.UserNotificationSettings.ALL_MESSAGES || !1 }(s, l, o) && o.mentionCount++ }, MESSAGE_DELETE: eF, MESSAGE_DELETE_BULK: eF, MESSAGE_ACK: eX, CHANNEL_ACK: function(e) { let { channelId: t, messageId: n, immediate: i = !1, force: r = !1, context: s, location: a } = e, o = ey.get(t), l = o.ack({ messageId: n, local: s !== ei.CURRENT_APP_CONTEXT, immediate: i, force: r, isExplicitUserAction: !0, location: a }); return null != n ? (o.rebuildChannelState(), !0) : l }, CHANNEL_LOCAL_ACK: function(e) { let { channelId: t } = e; return ey.get(t).ack({ messageId: void 0, local: !0, immediate: void 0, force: void 0, isExplicitUserAction: !0 }) }, CHANNEL_PINS_ACK: function(e) { let { channelId: t, timestamp: n } = e; return ey.get(t).ackPins(n) }, CHANNEL_PINS_UPDATE: function(e) { let { channelId: t, lastPinTimestamp: n } = e, i = ey.get(t), r = eR(n); return i.lastPinTimestamp !== r && (i.lastPinTimestamp = r, !0) }, CHANNEL_SELECT: function(e) { let { channelId: t } = e, n = Y.default.getCurrentSidebarChannelId(t), i = j.default.getChannel(t); if (null != i) { var r; let e = ey.get(i.id); e.ackMessageIdAtChannelSelect = null !== (r = e.ackMessageId) && void 0 !== r ? r : F.default.fromTimestamp(e.getAckTimestamp()), e.recordLastViewedTime() } ez(e_), ez(ec); let s = !1; return e_ !== t && (s = eZ(e_) || s, s = eZ(ec) || s), (e_ === t || (null == i ? void 0 : i.type) != null && ei.ChannelTypesSets.GUILD_THREADS_ONLY.has(i.type)) && (s = eB(t) || s), e_ === t && (s = eB(n) || s), e_ = t, ec = n, s }, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; if (null == t) return; let n = ey.get(t); if (!n.hasMentions()) return n.oldestUnreadMessageId = null, n.ack({ isExplicitUserAction: !0 }) }, CHANNEL_CREATE: function(e) { let { channel: t } = e; if (!(0, G.isReadableType)(t.type)) return !1; let n = ey.get(t.id); n.lastMessageId = t.lastMessageId, n.lastPinTimestamp = eR(t.lastPinTimestamp) }, THREAD_CREATE: function(e) { let { channel: t } = e; (function(e) { if (!G.ALL_CHANNEL_TYPES.has(e.type)) return 0; let t = ey.get(e.id); t.lastMessageId = e.lastMessageId, t.lastPinTimestamp = eR(e.lastPinTimestamp), t.syncThreadSettings(), e.ownerId === H.default.getId() && (t.loadedMessages = !0) })(t), function(e) { let t = e.parent_id; ey.get(t).lastMessageId = e.id; let n = et.default.getCurrentUser(); if (e.ownerId === (null == n ? void 0 : n.id)) ey.get(e.id)._persisted = !0, eX({ channelId: t, messageId: e.id, manual: !1 }) }(t) }, THREAD_UPDATE: function(e) { let { channel: t } = e; return !!G.ALL_CHANNEL_TYPES.has(t.type) && ey.get(t.id).syncThreadSettings() }, THREAD_LIST_SYNC: function(e) { let { threads: t } = e; t.forEach(e => { if (!G.ALL_CHANNEL_TYPES.has(e.type)) return; let t = ey.get(e.id); if (t.lastMessageId = e.lastMessageId, t.lastPinTimestamp = eR(e.lastPinTimestamp), t._isThread = !0, t._isActiveThread = !0, t._isJoinedThread = P.default.hasJoined(e.id), e.isForumPost()) { let t = ey.get(e.parent_id); 0 > F.default.compare(t.lastMessageId, e.id) && (t.lastMessageId = e.id) } }) }, LOAD_THREADS_SUCCESS: eH, LOAD_ARCHIVED_THREADS_SUCCESS: eH, SEARCH_FINISH: eY, MOD_VIEW_SEARCH_FINISH: eY, THREAD_MEMBER_UPDATE: function(e) { let { id: t } = e; return ey.get(t).syncThreadSettings() }, THREAD_MEMBERS_UPDATE: function(e) { return (0, U.doesThreadMembersActionAffectMe)(e) && ey.get(e.id).syncThreadSettings() }, CHANNEL_DELETE: eW, THREAD_DELETE: eW, WINDOW_FOCUS: function(e) { let t = !1; for (let [n, i] of F.default.entries(eh)) i === e.windowId && (t = function(e, t) { if (null == e) return !1; let n = ey.get(e); return !t && !n.hasUnread() && (n.oldestUnreadMessageIdStale = !0), eB(e) }(n, e.focused) || t); return t }, UPDATE_CHANNEL_DIMENSIONS: function(e) { let { channelId: t } = e; return eB(t) }, CURRENT_USER_UPDATE: function() { eE = null }, DRAWER_OPEN: function() { if (null != e_) { let e = ey.get(e_); !e.hasUnread() && (e.oldestUnreadMessageIdStale = !0) } return !1 }, DRAWER_CLOSE: function() { return eB(e_) }, BULK_ACK: function(e) { var t, n, i; let { channels: r, context: s, onFinished: a } = e; t = r.filter(e => null != e.messageId && e$.hasUnreadOrMentions(e.channelId, e.readStateType)), n = s, i = a, t.forEach(e => { let { channelId: t, messageId: n, readStateType: i } = e; ey.get(t, i).ack({ messageId: n, local: !0, immediate: void 0, force: void 0, isExplicitUserAction: !0 }) }), n !== ei.CURRENT_APP_CONTEXT || (eT.push(...t.map(e => ({ channel_id: e.channelId, message_id: e.messageId, read_state_type: e.readStateType }))), ef || ev(i)) }, ENABLE_AUTOMATIC_ACK: function(e) { let { channelId: t, windowId: n } = e; return eh[t] !== n && (l()(void 0 === eh[t], "handleEnableAutomaticAck: channel already visible in another window"), eh[t] = n, eB(t)) }, DISABLE_AUTOMATIC_ACK: function(e) { let { channelId: t } = e; return eh[t] = void 0, !1 }, GUILD_FEATURE_ACK: eQ, GUILD_SCHEDULED_EVENT_CREATE: function(e) { let { guildScheduledEvent: t } = e, n = t.guild_id, i = ey.get(t.guild_id, eo.ReadStateTypes.GUILD_EVENT); if (i.lastMessageId = t.id, ej(t)) { eQ({ type: "GUILD_FEATURE_ACK", id: n, ackType: eo.ReadStateTypes.GUILD_EVENT, ackedId: t.id, local: !1 }); return }!ee.default.isMuteScheduledEventsEnabled(n) && i.mentionCount++ }, GUILD_SCHEDULED_EVENT_UPDATE: function(e) { let { guildScheduledEvent: t } = e, n = t.guild_id; if (ej(t) || ![ea.GuildScheduledEventStatus.CANCELED, ea.GuildScheduledEventStatus.COMPLETED].includes(t.status)) return !1; ey.get(n, eo.ReadStateTypes.GUILD_EVENT).handleGuildEventRemoval(n, t.id) }, GUILD_SCHEDULED_EVENT_DELETE: function(e) { let { guildScheduledEvent: t } = e, n = t.guild_id; if (ej(t)) return !1; ey.get(t.guild_id, eo.ReadStateTypes.GUILD_EVENT).handleGuildEventRemoval(n, t.id) }, GUILD_DELETE: function(e) { let { guild: t } = e; return ey.clear(t.id, eo.ReadStateTypes.GUILD_EVENT) }, GUILD_UPDATE: function(e) { let { guild: t } = e, n = t.latest_onboarding_question_id; if (null == n) return; let i = ey.get(t.id, eo.ReadStateTypes.GUILD_ONBOARDING_QUESTION); i._guildId = t.id, i.lastMessageId = n }, RESORT_THREADS: function(e) { let { channelId: t } = e; return eB(t) }, CHANNEL_RTC_UPDATE_CHAT_OPEN: function(e) { let { channelId: t, chatOpen: n } = e }, DECAY_READ_STATES: eC, NOTIFICATION_CENTER_ITEM_CREATE: function(e) { var t; let { item: n } = e; if (!(0, v.inNotificationCenterEnabled)()) return !1; let i = null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; if (null == i) return !1; let r = ey.get(i, eo.ReadStateTypes.NOTIFICATION_CENTER); r.lastMessageId = n.id; if (0, L.default.active) { eq(i, eo.ReadStateTypes.NOTIFICATION_CENTER, n.id, !1); return } r.mentionCount++ }, RELATIONSHIP_ADD: function(e) { let t = et.default.getCurrentUser(); if (!(0, v.inNotificationCenterEnabled)() || null == t || null == e.relationship.since || e.relationship.type !== ei.RelationshipTypes.PENDING_INCOMING && e.relationship.type !== ei.RelationshipTypes.FRIEND) return !1; let n = ey.get(t.id, eo.ReadStateTypes.NOTIFICATION_CENTER), i = e.relationship.type === ei.RelationshipTypes.FRIEND, r = i ? new Date(Date.now()).getTime() : new Date(e.relationship.since).getTime(), s = null != n.ackMessageId ? F.default.extractTimestamp(n.ackMessageId) : 0; s < r && (n.lastMessageId = F.default.fromTimestamp(r), (0, L.default.active) ? eq(t.id, eo.ReadStateTypes.NOTIFICATION_CENTER, void 0, !1) : i ? n.mentionCount-- : n.mentionCount++) }, RELATIONSHIP_REMOVE: function(e) { let t = et.default.getCurrentUser(); if (!(0, v.inNotificationCenterEnabled)() || null == t || null == e.relationship.since || e.relationship.type !== ei.RelationshipTypes.PENDING_INCOMING) return !1; let n = ey.get(t.id, eo.ReadStateTypes.NOTIFICATION_CENTER), i = new Date(e.relationship.since).getTime(); (null != n.ackMessageId ? F.default.extractTimestamp(n.ackMessageId) : 0) <= i && (n.mentionCount = Math.max(0, n.mentionCount - 1)) }, NOTIFICATION_CENTER_ITEMS_ACK: function(e) { var t; let { ids: n, optimistic: i } = e; if (i || !(0, v.inNotificationCenterEnabled)() || L.default.active) return !1; let r = null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; if (null == r) return !1; let s = ey.get(r, eo.ReadStateTypes.NOTIFICATION_CENTER); n.forEach(e => { 0 > F.default.compare(s.ackMessageId, e) && (s.mentionCount = Math.max(s.mentionCount - 1, 0)) }) }, USER_NON_CHANNEL_ACK: function(e) { var t; let { ackType: n, ackedId: i, local: r } = e, s = null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; return null != s && eq(s, n, i, r) }, PASSIVE_UPDATE_V2: function(e) { let t = !1; for (let n of e.channels) { let e = ey.get(n.id), i = eR(n.lastPinTimestamp); (e.lastMessageId !== n.lastMessageId || e.lastPinTimestamp !== i) && (t = !0, e.lastMessageId = n.lastMessageId, e.lastPinTimestamp = i) } return t }, CLEAR_OLDEST_UNREAD_MESSAGE: function(e) { let { channelId: t } = e; return eZ(t) }, TRY_ACK: function(e) { let { channelId: t } = e; return eB(t) }, MESSAGE_REQUEST_ACK: function(e) { var t; let { ackedId: n } = e, i = null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; if (null == i) return !1; let r = ey.get(i, eo.ReadStateTypes.MESSAGE_REQUESTS); if (n === r.ackMessageId) return !1; r.ackMessageId = n, r.ack({ messageId: n, isExplicitUserAction: !0 }) }, MESSAGE_REQUEST_CLEAR_ACK: function(e) { var t; let n = null === (t = et.default.getCurrentUser()) || void 0 === t ? void 0 : t.id; if (null == n) return !1; let i = ey.get(n, eo.ReadStateTypes.MESSAGE_REQUESTS); if (null == i.ackMessageId) return !1; i.ackMessageId = void 0 } }); t.default = e$ }, 699516: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("709054"), c = n("594174"), E = n("981631"); let I = {}, T = {}, f = {}, S = 0, h = 0, A = 0, m = 0; function N() { m = Object.values(I).length; let { [E.RelationshipTypes.PENDING_INCOMING]: e = 0, [E.RelationshipTypes.PENDING_OUTGOING]: t = 0, [E.RelationshipTypes.FRIEND]: n = 0 } = l().countBy(Object.values(I), e => e); S = e, h = t, A = n } class p extends(i = u.default.Store) { initialize() { this.waitFor(c.default) } isFriend(e) { return I[e] === E.RelationshipTypes.FRIEND } isBlocked(e) { return I[e] === E.RelationshipTypes.BLOCKED } getPendingCount() { return S } getOutgoingCount() { return h } getFriendCount() { return A } getRelationshipCount() { return m } getRelationships() { return I } getRelationshipType(e) { let t = I[e]; return null != t ? t : E.RelationshipTypes.NONE } getNickname(e) { return T[e] } getSince(e) { return f[e] } getSinces() { return f } getFriendIDs() { return _.default.keys(I).filter(e => I[e] === E.RelationshipTypes.FRIEND) } } a = "RelationshipStore", (s = "displayName") in(r = p) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new p(d.default, { CONNECTION_OPEN: function(e) { I = {}, T = {}, f = {}, e.relationships.forEach(e => { I[e.id] = e.type, null != e.nickname && (T[e.id] = e.nickname), null != e.since && (f[e.id] = e.since) }), N() }, OVERLAY_INITIALIZE: function(e) { I = { ...e.relationships }, N() }, RELATIONSHIP_ADD: function(e) { let t = I[e.relationship.id]; I = { ...I, [e.relationship.id]: e.relationship.type }, null != e.relationship.nickname && (T = { ...T, [e.relationship.id]: e.relationship.nickname }), null != e.relationship.since && (f = { ...f, [e.relationship.id]: e.relationship.since }), N(), e.relationship.type === E.RelationshipTypes.FRIEND && t === E.RelationshipTypes.PENDING_OUTGOING && d.default.dispatch({ type: "FRIEND_REQUEST_ACCEPTED", user: e.relationship.user }) }, RELATIONSHIP_REMOVE: function(e) { I = { ...I }, delete I[e.relationship.id], null != T[e.relationship.id] && (T = { ...T }, delete T[e.relationship.id]), null != f[e.relationship.id] && (f = { ...f }, delete f[e.relationship.id]), N() }, RELATIONSHIP_UPDATE: function(e) { null == e.relationship.since ? delete f[e.relationship.id] : f[e.relationship.id] = e.relationship.since, null == e.relationship.nickname ? delete T[e.relationship.id] : T[e.relationship.id] = e.relationship.nickname }, RELATIONSHIP_PENDING_INCOMING_REMOVED: function(e) { I = { ...I }, _.default.keys(I).forEach(e => { I[e] === E.RelationshipTypes.PENDING_INCOMING && delete I[e] }), N() } }) }, 768119: function(e, t, n) { "use strict"; let i; n.r(t), n("733860"); var r, s, a, o, l = n("392711"), u = n.n(l), d = n("442837"), _ = n("433517"), c = n("570140"), E = n("840877"), I = n("952537"), T = n("592125"), f = n("430824"), S = n("981631"); let h = {}, A = !1; function m(e) { return null == h[e] && (h[e] = { searchId: e, searchType: N(e), isIndexing: !1, isHistoricalIndexing: !1, isSearching: !1, analyticsId: null, editorState: null, offset: 0, query: null, hasError: !1, searchFetcher: null, rawResults: null, totalResults: 0, documentsIndexed: 0, resultsBlocked: 0, showBlockedResults: !1, showNoResultsAlt: !1 }), h[e] } function N(e) { return e === S.SearchTypes.DMS ? S.SearchTypes.DMS : e === S.FAVORITES ? S.SearchTypes.FAVORITES : null != f.default.getGuild(e) ? S.SearchTypes.GUILD : null != T.default.getChannel(e) ? S.SearchTypes.CHANNEL : null } function p(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null; if (null == e) return n; let i = h[e]; return null == i ? n : t(i) } let O = "SearchStore", C = !1, R = {}, g = null; function L(e) { var t; let { searchId: n, query: i } = e; if ("string" != typeof i || "" === (i = i.trim())) return; let r = R[n] = null !== (t = R[n]) && void 0 !== t ? t : [], s = r.indexOf(i); - 1 !== s ? (r.splice(s, 1), r.unshift(i)) : null != r[0] && "" !== r[0] && i.startsWith(r[0]) ? r[0] = i : s < 0 && r.unshift(i), r.length > 5 && r.splice(5, r.length), _.Storage.set(O, { history: R }) } function v(e) { let { searchId: t } = e, n = h[t]; if (null == n) return !1; null != n.searchFetcher && n.searchFetcher.cancel(), delete h[t] } function D(e) { if (e === g) return !1; null != e && null == h[e] && m(e), g = e } class M extends(r = d.default.Store) { initialize() { this.waitFor(f.default, T.default); let e = _.Storage.get(O); if ((null == e ? void 0 : e.history) != null) { var t; Object.keys(t = e.history).forEach(e => { Array.isArray(t[e]) && (t[e] = t[e].filter(e => "string" == typeof e && e.trim())), (!Array.isArray(t[e]) || 0 === t[e].length) && delete t[e] }), R = t } C = !!_.Storage.get("tokenized") } isOpen() { return A } getCurrentSearchModalType() { return i } getCurrentSearchId() { return g } isActive() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : g; return null != e && (this.isIndexing(e) || this.isSearching(e) || this.hasResults(e)) } isTokenized() { return C } getSearchType(e) { return p(null != e ? e : g, e => e.searchType) } getRawResults(e) { return p(e, e => e.rawResults) } hasResults(e) { return null != p(e, e => e.rawResults) } isIndexing(e) { return p(e, e => e.isIndexing) || !1 } isHistoricalIndexing(e) { return p(e, e => e.isHistoricalIndexing) || !1 } isSearching(e) { return p(e, e => e.isSearching) || !1 } getAnalyticsId(e) { return p(e, e => e.analyticsId) } getResultsBlocked(e) { return p(e, e => e.resultsBlocked) } getDocumentsIndexedCount(e) { return p(e, e => e.documentsIndexed) } getSearchFetcher(e) { return p(e, e => e.searchFetcher) } getTotalResults(e) { var t; return null !== (t = p(e, e => e.totalResults)) && void 0 !== t ? t : 0 } getEditorState(e) { return p(e, e => e.editorState) } getHistory(e) { return R[e] } getOffset(e) { var t; return null !== (t = p(e, e => e.offset)) && void 0 !== t ? t : 0 } getQuery(e) { return p(e, e => e.query) } hasError(e) { var t; return null !== (t = p(e, e => e.hasError)) && void 0 !== t && t } shouldShowBlockedResults(e) { var t; return null !== (t = p(e, e => e.showBlockedResults, !1)) && void 0 !== t && t } shouldShowNoResultsAlt(e) { var t; return null !== (t = p(e, e => e.showNoResultsAlt, !1)) && void 0 !== t && t } getResultsState(e) { return { isSearching: this.isSearching(e), isIndexing: this.isIndexing(e), isHistoricalIndexing: this.isHistoricalIndexing(e), documentsIndexed: this.getDocumentsIndexedCount(e), offset: this.getOffset(e), totalResults: this.getTotalResults(e), hasError: this.hasError(e), showBlockedResults: this.shouldShowBlockedResults(e), showNoResultsAlt: this.shouldShowNoResultsAlt(e) } } } o = "SearchStore", (a = "displayName") in(s = M) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new M(c.default, { SEARCH_START: function(e) { var t, n; let { queryString: i, searchId: r, query: s } = e, a = m(r); null != a.searchFetcher && (a.searchFetcher.cancel(), a.searchFetcher = null); let o = a.searchType, l = new E.default(r, o, s); a.searchFetcher = l, a.isSearching = !0, a.rawResults = null, a.analyticsId = null, a.query = u().omit(s, "type"), a.offset = null !== (n = s.offset) && void 0 !== n ? n : 0, a.showBlockedResults = !1, L({ type: "SEARCH_ADD_HISTORY", searchId: r, query: i }); let d = r === S.FAVORITES ? null === (t = T.default.getChannel(r)) || void 0 === t ? void 0 : t.guild_id : o === S.SearchTypes.GUILD ? r : null; l.fetch(e => { var t, n; c.default.dispatch({ type: "SEARCH_FINISH", searchId: r, guildId: d, analyticsId: e.body.analytics_id, totalResults: e.body.total_results, messages: e.body.messages, threads: null !== (t = e.body.threads) && void 0 !== t ? t : [], members: (null !== (n = e.body.members) && void 0 !== n ? n : []).map(e => (0, I.default)(e)), hasError: !1, doingHistoricalIndex: e.body.doing_deep_historical_index, documentsIndexed: e.body.documents_indexed }) }, () => { c.default.dispatch({ type: "SEARCH_INDEXING", searchId: r }) }, () => { c.default.dispatch({ type: "SEARCH_FINISH", searchId: r, guildId: d, messages: [], threads: [], members: [], totalResults: 0, analyticsId: null, hasError: !0, doingHistoricalIndex: !1, documentsIndexed: 0 }) }) }, SEARCH_INDEXING: function(e) { let { searchId: t } = e, n = m(t); n.isIndexing = !0, n.isHistoricalIndexing = !0, n.isSearching = !1 }, SEARCH_FINISH: function(e) { let { searchId: t } = e, n = m(t); n.isSearching = !1, n.isIndexing = !1, n.isHistoricalIndexing = e.doingHistoricalIndex || !1, n.searchFetcher = null, n.totalResults = e.totalResults, n.hasError = e.hasError, n.analyticsId = e.analyticsId, n.documentsIndexed = null != e.documentsIndexed ? e.documentsIndexed : 0, n.showNoResultsAlt = .05 > Math.random(), n.rawResults = e.messages, null == n.query && (n.hasError = !0) }, SEARCH_EDITOR_STATE_CLEAR: v, SEARCH_ENSURE_SEARCH_STATE: function(e) { let { searchId: t } = e; null != t && m(t) }, SEARCH_EDITOR_STATE_CHANGE: function(e) { let { searchId: t, editorState: n } = e; m(t).editorState = n }, SEARCH_SET_SHOW_BLOCKED_RESULTS: function(e) { let { searchId: t, showBlocked: n } = e; m(t).showBlockedResults = n }, SEARCH_SCREEN_OPEN: function(e) { let { searchId: t } = e; D(t) }, CHANNEL_SELECT: function(e) { let { guildId: t, channelId: n } = e; D(null != t ? t : n) }, CHANNEL_TOGGLE_MEMBERS_SECTION: function() { return null != g && v({ searchId: g }) }, SEARCH_CLEAR_HISTORY: function(e) { let { searchId: t } = e; null == t ? (_.Storage.remove(O), R = {}) : (delete R[t], _.Storage.set(O, { history: R })) }, SEARCH_REMOVE_HISTORY: function(e) { let { searchId: t, query: n } = e; null != R[t] && (R[t] = R[t].filter(e => e !== n), _.Storage.set(O, { history: R })) }, SEARCH_ADD_HISTORY: L, LOGOUT: function() { _.Storage.remove(O), R = {} }, CONNECTION_OPEN: function() { Object.keys(h).forEach(e => { null != h[e] && (h[e].searchType = N(e)) }) }, SEARCH_MODAL_OPEN: function(e) { let { searchId: t, searchType: n } = e; null != t && (g = t), A = !0, i = n }, SEARCH_MODAL_CLOSE: function() { A = !1, i = void 0 } }) }, 944486: function(e, t, n) { "use strict"; let i, r, s, a, o, l, u; n.r(t), n.d(t, { findFirstVoiceChannelId: function() { return F } }), n("47120"), n("724458"); var d, _, c, E, I = n("392711"), T = n.n(I), f = n("442837"), S = n("433517"), h = n("570140"), A = n("57132"), m = n("781157"), N = n("703656"), p = n("131704"), O = n("823379"), C = n("314897"), R = n("592125"), g = n("984933"), L = n("430824"), v = n("131951"), D = n("914010"), M = n("981631"), y = n("176505"); let P = "SelectedChannelStore", U = {}, b = {}, G = {}, w = new Set; function k(e) { return String(e) } function B() { !__OVERLAY__ && S.Storage.set(P, { selectedChannelId: s, selectedVoiceChannelId: o, lastChannelFollowingDestination: a, lastConnectedTime: l, selectedChannelIds: U, mostRecentSelectedTextChannelIds: G, knownThreadIds: T()(U).values().concat(T().values(G)).filter(O.isNotNullish).uniq().filter(e => { let t = R.default.getBasicChannel(e); return w.has(e) || null != t && p.THREAD_CHANNEL_TYPES.has(t.type) }).value() }) } function V(e) { if (null != e) { let t = g.default.getDefaultChannel(e); if (null != t) return t.id } } function x(e, t) { if (null == e || null == t || G[e] === t) return !1; let n = R.default.getChannel(t), i = null != n && (0, p.isGuildTextChannelType)(n.type), r = (null == n ? void 0 : n.getGuildId()) === e; return !!i && !!r && (G[e] = t, !0) } function F(e) { let t = R.default.getMutableBasicGuildChannelsForGuild(e), n = T().find(t, e => e.type === M.ChannelTypes.GUILD_VOICE); return null == n ? void 0 : n.id } function H() { let e = !1, t = L.default.getGuilds(); return T().each(U, (t, n) => { (null == t || !R.default.hasChannel(t) && t !== s && !w.has(t) && !(0, y.isGuildHomeChannel)(t)) && (delete U[n], delete b[n], e = !0) }), T().each(G, (t, n) => { (null == t || !R.default.hasChannel(t) && !w.has(t)) && (delete G[n], e = !0) }), T().each(t, e => { let t = U[e.id]; null == G[e.id] && x(e.id, t) }), null != l && Date.now() - l >= 3e5 && (o = null, e = !0), e } function Y(e, t) { if (w.delete(e), null == t) { let n = D.default.getGuildId(); U[k(n)] === e && (t = n) } let n = null != L.default.getGuild(t) ? t : null, i = !1; o === e && (o = null, i = !0), !(0, A.isInMainTabsExperiment)() && (U[k(n)] === e && (U[k(n)] = V(k(n)), D.default.getGuildId() === n && (0, N.replaceWith)(M.Routes.CHANNEL(t, U[k(n)])), i = !0), null != n && G[n] === e && (delete G[n], i = !0)), i && B() } function j(e) { let { channel: { id: t, guild_id: n } } = e; Y(t, n) } class W extends(d = f.default.Store) { initialize() { if (!__OVERLAY__) { var e, t; let n = null !== (e = S.Storage.get(P)) && void 0 !== e ? e : { selectedChannelId: s, selectedVoiceChannelId: o, lastChannelFollowingDestination: a, lastConnectedTime: l, selectedChannelIds: U, mostRecentSelectedTextChannelIds: G }; null != n.knownThreadIds && (w = new Set(n.knownThreadIds)), o = n.selectedVoiceChannelId, a = n.lastChannelFollowingDestination, l = n.lastConnectedTime, G = null !== (t = n.mostRecentSelectedTextChannelIds) && void 0 !== t ? t : {}, null != n.selectedChannelIds && (U = { ...n.selectedChannelIds, null: null }) } this.mustEmitChanges(e => "CONNECTION_OPEN" !== e.type && "VOICE_STATE_UPDATES" !== e.type), this.waitFor(L.default, R.default, D.default, g.default, v.default) } getChannelId(e) { var t, n; let i = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], r = k(e === M.ME ? null : null !== (t = null != e ? e : D.default.getGuildId()) && void 0 !== t ? t : null); return i ? null !== (n = U[r]) && void 0 !== n ? n : V(r) : U[r] } getVoiceChannelId() { return v.default.isSupported() ? o : null } getMostRecentSelectedTextChannelId(e) { var t; return null == e ? null : null !== (t = G[e]) && void 0 !== t ? t : null } getCurrentlySelectedChannelId(e) { return null != e ? U[e] : s } getLastSelectedChannelId(e) { return null != e ? b[e] : r } getLastSelectedChannels(e) { return b[e] } getLastChannelFollowingDestination() { return a } } E = "SelectedChannelStore", (c = "displayName") in(_ = W) ? Object.defineProperty(_, c, { value: E, enumerable: !0, configurable: !0, writable: !0 }) : _[c] = E, t.default = new W(h.default, { CONNECTION_OPEN: function(e) { i = e.sessionId, null != o && null == R.default.getChannel(o) && (o = null), H() && B() }, OVERLAY_INITIALIZE: function(e) { i = e.sessionId, o = e.selectedVoiceChannelId, U = {}, b = {}, s = e.selectedChannelId, U[e.selectedGuildId] = e.selectedChannelId, x(e.selectedGuildId, s), H() }, CONNECTION_CLOSED: function() { i = null }, CHANNEL_SELECT: function(e) { let { guildId: t, channelId: n } = e; if (void 0 === t) return !1; null == n && (!(0, A.isInMainTabsExperiment)() || (0, m.shouldHandleNewPanelsRoute)(t)) && (n = V(t)), null != s && n !== s && (r = s), s = n, x(t, n), U[k(t)] !== n && (b[k(t)] = U[k(t)], U[k(t)] = s), B() }, CHANNEL_CREATE: function(e) { let { channel: t } = e; switch (t.type) { case M.ChannelTypes.GUILD_ANNOUNCEMENT: case M.ChannelTypes.GUILD_TEXT: let n = t.guild_id; if (null != n && null == G[n] && (G[n] = t.id), null != n && null == U[n]) return U[n] = V(n), !0 } return !1 }, CHANNEL_DELETE: j, CHANNEL_UPDATES: function(e) { let { channels: t } = e; for (let e of t) e.isScheduledForDeletion() && Y(e.id, e.guild_id) }, THREAD_DELETE: j, GUILD_CREATE: function(e) { let { guild: t } = e; if (null == U[t.id]) { let e = V(t.id); U[t.id] = e, x(t.id, e), B() } }, GUILD_DELETE: function(e) { let { guild: { id: t, unavailable: n } } = e; if (o === U[t] && (o = null), n) return !1; delete G[t], delete U[t], B() }, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; if (null == t) { let e = R.default.getChannel(o), t = null == e ? void 0 : e.guild_id; null != t && t !== D.default.getGuildId() && U[t] === o && (U[t] = V(t)) } o = t, B() }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { var n, r, s; if (t.sessionId === i) { clearInterval(u); let e = null === (n = R.default.getChannel(o)) || void 0 === n ? void 0 : n.getGuildId(); t.guildId !== e && null == t.channelId || (o = t.channelId), l = Date.now(), null != o && (u = setInterval(() => { l = Date.now(), B() }, 6e4)), B() } else { if (t.userId !== C.default.getId()) return e; clearInterval(u), u = void 0, l = 0; let n = null === (r = R.default.getChannel(o)) || void 0 === r ? void 0 : r.getGuildId(), i = null === (s = R.default.getChannel(t.channelId)) || void 0 === s ? void 0 : s.getGuildId(); (null != n && i === n || o === t.channelId) && (o = null), B() } return !0 }, !1) }, CHANNEL_FOLLOWER_CREATED: function(e) { let { channelId: t, guildId: n } = e; (null == a || t !== a.channelId) && (a = { channelId: t, guildId: n }, B()) }, LOGOUT: function() { U = {}, s = null, r = void 0, G = {}, a = {}, o = null, S.Storage.remove(P) } }) }, 914010: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("937111"); n("57132"); var o = n("703656"), l = n("314897"), u = n("430824"), d = n("981631"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = null, E = null, I = {}; function T() { null != c && null == u.default.getGuild(c) && null == a.default.getRequest(c) && (c = null), null != E && null == u.default.getGuild(E) && null == a.default.getRequest(E) && (E = null), f(c) } function f(e) { null != e && (I[e] = Date.now()) } function S(e) { let t = !1; return delete I[e], E === e && (E = null, t = !0), c === e && (Object.values(u.default.getGuilds()).find(t => t.id !== e), c = null, (0, o.replaceWith)(d.Routes.ME), t = !0), t } class h extends(i = r.default.PersistedStore) { initialize(e) { var t, n, i; this.mustEmitChanges(e => "CONNECTION_OPEN" !== e.type), this.waitFor(u.default, l.default), I = null !== (t = null == e ? void 0 : e.selectedGuildTimestampMillis) && void 0 !== t ? t : {}, c = null !== (n = null == e ? void 0 : e.selectedGuildId) && void 0 !== n ? n : null, E = null !== (i = null == e ? void 0 : e.lastSelectedGuildId) && void 0 !== i ? i : null } getState() { return { selectedGuildTimestampMillis: I, selectedGuildId: c, lastSelectedGuildId: E } } getGuildId() { return c } getLastSelectedGuildId() { return E } getLastSelectedTimestamp(e) { return c === e ? -1 : I[e] } } _(h, "displayName", "SelectedGuildStore"), _(h, "persistKey", "SelectedGuildStore"), t.default = new h(s.default, { CONNECTION_OPEN: T, OVERLAY_INITIALIZE: function(e) { c = e.selectedGuildId, E = void 0, T() }, CHANNEL_SELECT: function(e) { let { guildId: t } = e; if (c === t) return !1; f(c), f(t), null != t && (E = t), c = t }, GUILD_MEMBER_REMOVE: function(e) { let { guildId: t, user: n } = e; return n.id === l.default.getId() && S(t) }, GUILD_DELETE: function(e) { let { guild: { id: t, unavailable: n } } = e; return !0 !== n && S(t) }, LOGOUT: function() { c = null, E = null } }) }, 885110: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"); var s, a, o, l, u = n("348327"), d = n.n(u), _ = n("392711"), c = n.n(_), E = n("442837"), I = n("570140"), T = n("503438"), f = n("860852"), S = n("768419"), h = n("695346"), A = n("581883"), m = n("131704"), N = n("780570"), p = n("314897"), O = n("77498"), C = n("517100"), R = n("283595"), g = n("293273"), L = n("158776"), v = n("797258"), D = n("981631"); let M = !1, y = D.StatusTypes.ONLINE, P = D.StatusTypes.UNKNOWN, U = 0, b = [], G = !1, w = !0, k = Object.freeze([]), B = []; function V(e) { return (0, N.shouldShareApplicationActivity)(e, R.default) } function x(e) { switch (e.type) { case D.ActivityTypes.LISTENING: if ((0, T.default)(e)) return S.default.shouldShowActivity(); if (null != e.application_id) return V(e.application_id); return !1; case D.ActivityTypes.PLAYING: return null != e.application_id ? V(e.application_id) : function(e) { let t = O.default.getGameByName(e); return null != t ? V(t.id) : h.ShowCurrentGame.getSetting() }(e.name); case D.ActivityTypes.STREAMING: case D.ActivityTypes.WATCHING: default: return null == e.application_id || V(e.application_id) } } function F() { var e; if (U = null !== (e = C.default.getIdleSince()) && void 0 !== e ? e : 0, G = C.default.isAFK(), w) y = P, H(); else if (M) y = D.StatusTypes.INVISIBLE; else { let e = h.StatusSetting.getSetting(); y = e !== D.StatusTypes.UNKNOWN ? e : D.StatusTypes.ONLINE } y === D.StatusTypes.ONLINE && U > 0 && (y = D.StatusTypes.IDLE); let t = !1, n = w || y === D.StatusTypes.INVISIBLE ? [] : g.default.getActivities().filter(x); !d()(b, n) && (b = n, t = !0); let i = v.default.getRemoteActivities(); if (k !== i && (k = i, t = !0), t) { let e = b.find(e => e.type === D.ActivityTypes.CUSTOM_STATUS); B = b.filter(e => e.type !== D.ActivityTypes.CUSTOM_STATUS).length > 0 ? b : null != e ? [e, ...c()(k).filter(e => e.type !== D.ActivityTypes.CUSTOM_STATUS).uniqBy(e => "".concat(e.type, ":").concat(e.application_id, ":").concat(e.name)).value()] : c().uniqBy(k, e => "".concat(e.type, ":").concat(e.application_id, ":").concat(e.name)) } } function H() { i = void 0, r = void 0 } function Y() { w = !1, P = D.StatusTypes.UNKNOWN, F(), L.default.setCurrentUserOnConnectionOpen(y, B) } class j extends(s = E.default.Store) { initialize() { this.waitFor(C.default, A.default, g.default, v.default, R.default, O.default), this.syncWith([g.default], F) } getLocalPresence() { return { status: y, since: U, activities: b, afk: G, broadcast: r } } getStatus() { return y } getActivities() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return e ? B : b } getPrimaryActivity() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return e ? B[0] : b[0] } getApplicationActivity(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return this.findActivity(t => t.application_id === e, t) } findActivity(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; return this.getActivities(t).find(e) } getBroadcast() { return i } } l = "SelfPresenceStore", (o = "displayName") in(a = j) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new j(I.default, { START_SESSION: F, CONNECTION_OPEN: function() { Y() }, CONNECTION_OPEN_SUPPLEMENTAL: Y, OVERLAY_INITIALIZE: Y, CONNECTION_CLOSED: F, IDLE: F, AFK: F, RUNNING_GAMES_CHANGE: F, STREAMING_UPDATE: F, USER_SETTINGS_PROTO_UPDATE: F, LOCAL_ACTIVITY_UPDATE: F, SPOTIFY_PLAYER_STATE: F, SPOTIFY_PLAYER_PLAY: F, USER_CONNECTIONS_UPDATE: F, SESSIONS_REPLACE: F, RPC_APP_DISCONNECTED: F, LIBRARY_FETCH_SUCCESS: F, LIBRARY_APPLICATION_FLAGS_UPDATE_SUCCESS: F, LOGOUT: function() { w = !0, P = y, F() }, EMBEDDED_ACTIVITY_CLOSE: F, EMBEDDED_ACTIVITY_OPEN: F, FORCE_INVISIBLE: function(e) { return M = e.invisible, F() }, WINDOW_FOCUS: function() { return M = !1, F() }, BROADCAST_START: function(e) { i = e.broadcast, r = (0, f.broadcastToServer)(e.broadcast) }, BROADCAST_STOP: H, CHANNEL_DELETE: function(e) { let { channel: t } = e; t instanceof m.ChannelRecordBase && (null == t ? void 0 : t.isBroadcastChannel()) && (null == t ? void 0 : t.ownerId) === p.default.getId() && (i = void 0, r = void 0) } }) }, 613402: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("147913"), s = n("885110"); class a extends r.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "stores", i = new Map().set(s.default, o), n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } function o() { i.default.dispatch({ type: "SELF_PRESENCE_STORE_UPDATE", status: s.default.getStatus(), activities: s.default.getActivities() }) } t.default = new a }, 797258: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("314897"); let c = Object.freeze([]), E = {}; function I(e) { E = {}, e.sessions.forEach(e => { E[e.sessionId] = e }) } class T extends(a = u.default.Store) { initialize() { this.waitFor(_.default) } getSessions() { return E } getSession() { let e = _.default.getSessionId(); return null != e ? this.getSessionById(e) : null } getRemoteActivities() { let e = _.default.getSessionId(), t = l().find(E, t => t.active && t.sessionId !== e); return null != t ? t.activities : c } getSessionById(e) { return E[e] } getActiveSession() { return l().find(E, e => { let { active: t } = e; return t }) } } s = "SessionsStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new T(d.default, { CONNECTION_OPEN: I, SESSIONS_REPLACE: I }) }, 300429: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SlowmodeType: function() { return i } }), n("47120"); var i, r, s, a, o, l, u = n("442837"), d = n("846519"), _ = n("570140"), c = n("70956"), E = n("592125"), I = n("496675"), T = n("981631"); (s = i || (i = {}))[s.SendMessage = 0] = "SendMessage", s[s.CreateThread = 1] = "CreateThread"; let f = { 0: {}, 1: {} }; function S(e, t, n) { if (function(e, t) { null != f[t][e.id] && (f[t][e.id].timer.stop(), delete f[t][e.id]) }(e, t), function(e, t) { return 0 === t ? I.default.can(T.Permissions.MANAGE_CHANNELS, e) || I.default.can(T.Permissions.MANAGE_MESSAGES, e) : I.default.can(T.Permissions.MANAGE_THREADS, e) }(e, t) || n <= 0) return; let i = n + Date.now(); f[t][e.id] = { rateLimitPerUser: e.rateLimitPerUser, cooldownMs: n, cooldownEndTimestamp: i, timer: new d.Timeout }, f[t][e.id].timer.start(1e3, () => { _.default.dispatch({ type: "SLOWMODE_SET_COOLDOWN", channelId: e.id, slowmodeType: t, cooldownMs: Math.max(i - Date.now(), 0) }) }, !0) } function h(e, t) { let n = E.default.getChannel(e); if (null == n) return !1; S(n, t, 0 === n.rateLimitPerUser ? 0 : n.rateLimitPerUser * c.default.Millis.SECOND + 100) } function A(e) { let { file: t } = e, n = E.default.getChannel(t.channelId); return null != n && S(n, 0, 0) } class m extends(r = u.default.Store) { initialize() { this.waitFor(E.default) } getSlowmodeCooldownGuess(e, t) { let n = f[null != t ? t : 0][e]; return null != n ? n.cooldownMs : 0 } } l = "SlowmodeStore", (o = "displayName") in(a = m) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new m(_.default, { SLOWMODE_RESET_COOLDOWN: function(e) { let { channelId: t, slowmodeType: n } = e; return h(t, n) }, SLOWMODE_SET_COOLDOWN: function(e) { let { channelId: t, slowmodeType: n, cooldownMs: i } = e, r = E.default.getChannel(t); if (null == r) return !1; S(r, n, 0 === i ? 0 : i + 100) }, UPLOAD_START: function(e) { let { channelId: t } = e; return h(t, 0) }, UPLOAD_FAIL: A, UPLOAD_CANCEL_REQUEST: A, CHANNEL_UPDATES: function(e) { let { channels: t } = e; [0, 1].forEach(e => { for (let i of t) { var n; let t = f[e][i.id], r = i.rateLimitPerUser; if (null != t && t.rateLimitPerUser !== r) S(i, e, Math.min(null !== (n = null == t ? void 0 : t.cooldownMs) && void 0 !== n ? n : 0, r * c.default.Millis.SECOND)) } }) }, LOGOUT: function() { [0, 1].forEach(e => { Object.keys(f[e]).forEach(t => f[e][t].timer.stop()), f[e] = {} }) } }) }, 412788: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }), n("653041"); var i, r, s, a, o = n("512722"), l = n.n(o), u = n("442837"), d = n("433517"), _ = n("570140"); class c extends(i = u.default.Store) { static clearAll() { c.allStores.forEach(e => e.clear()) } get persistKey() { return "".concat(this.getClass().displayName, "-snapshot") } clear() { d.Storage.remove(this.persistKey) } save() { d.Storage.set(this.persistKey, this.takeSnapshot()) } readSnapshot(e) { let t = d.Storage.get(this.persistKey); return null == t || t.version !== e ? null : t.data } getClass() { return this.constructor } constructor(e) { super(_.default, { ...e, CLEAR_CACHES: () => this.clear(), WRITE_CACHES: () => this.save() }), l()(null != this.getClass().displayName, "Snapshot stores need a display name"), l()(!("CLEAR_CACHES" in e), "SnapshotStores cannot use the 'CLEAR_CACHES' action"), l()(!("WRITE_CACHES" in e), "SnapshotStores cannot use the 'WRITE_CACHES' action"), c.allStores.push(this) } } a = [], (s = "allStores") in(r = c) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a }, 771845: function(e, t, n) { "use strict"; let i; n.r(t), n("411104"), n("47120"); var r = n("348327"), s = n.n(r), a = n("512722"), o = n.n(a), l = n("727258"), u = n("41776"), d = n("581883"), _ = n("251625"), c = n("823379"), E = n("486472"), I = n("271383"), T = n("430824"), f = n("412788"), S = n("9156"), h = n("594174"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let m = new l.GuildsTree; function N(e) { switch (e.type) { case l.GuildsNodeType.FOLDER: return { folderId: e.id, folderName: e.name, folderColor: e.color, expanded: e.expanded, guildIds: e.children.map(e => e.id) }; case l.GuildsNodeType.GUILD: return { folderId: void 0, guildIds: [e.id] }; default: throw Error("[SortedGuildStore] Unexpected guilds tree node type.") } } function p(e, t) { let n = m; if (m = new l.GuildsTree, 0 === e.length && t.length > 0) for (let e of t) m.addNode((0, l.createGuildNode)(e)); else for (let t of e) if (0 !== t.guildIds.length) { if (null == t.folderId) m.addNode((0, l.createGuildNode)(t.guildIds[0])); else { let e = (0, l.createFolderNode)(t); for (let n of (m.addNode(e), t.guildIds)) m.addNode((0, l.createGuildNode)(n), e) } } for (let e of m.allNodes()) e.type === l.GuildsNodeType.GUILD && (u.default.isLurking(e.id) || I.default.isCurrentUserGuest(e.id) || null == T.default.getGuild(e.id) && !E.default.isUnavailable(e.id)) && m.removeNode(e); for (let e of Object.values(m.nodes)) e.type === l.GuildsNodeType.FOLDER && 0 === e.children.length && m.removeNode(e); return ! function(e, t) { for (let n in T.default.getGuilds()) e(n) && !u.default.isLurking(n) && !I.default.isCurrentUserGuest(n) && t(n) }(e => null == m.nodes[e], e => m.addNode((0, l.createGuildNode)(e), m.root, !1)), !s()(n, m) } function O() { var e, t, n; return p(null !== (t = d.default.getGuildFolders()) && void 0 !== t ? t : [], null !== (n = null === (e = d.default.settings.guildFolders) || void 0 === e ? void 0 : e.guildPositions) && void 0 !== n ? n : []) } function C() { var e, t; let n = d.default.getGuildFolders(); return !(null != i && s()(i, n)) && p(null != (i = n) ? i : [], null !== (t = null === (e = d.default.settings.guildFolders) || void 0 === e ? void 0 : e.guildPositions) && void 0 !== t ? t : []) } function R(e) { let { sourceId: t, targetId: n, moveToBelow: i, combine: r } = e, s = m.getNode(t), a = m.getNode(n); if (null == s || null == a) return !1; if (o()(!(r && s.type === l.GuildsNodeType.FOLDER), "[SORTED GUILDS] Can't combine a folder ".concat(s.id, " with another guilds list item")), o()(!(r && null != a.parentId), "[SORTED GUILDS] Can't combine with a guild ".concat(a.id, " that's already inside of a folder")), o()(!(s.type === l.GuildsNodeType.FOLDER && null != a.parentId), "[SORTED GUILDS] Can't move a folder ".concat(s.id, " to inside of another folder ").concat(a.parentId)), r) { let e = a.type !== l.GuildsNodeType.FOLDER ? m.convertToFolder(a) : a; m.moveInto(s, e, i) } else m.moveNextTo(s, a, i) } function g(e) { let { sourceIds: t, name: n } = e, i = t.shift(); if (null == i) return !1; let r = m.getNode(i); if (null == r) return !1; let s = m.convertToFolder(r); s.name = n, t.forEach(e => { let t = m.getNode(e); null != t && m.moveInto(t, s, !0) }) } function L(e) { let { targetId: t, sourceIds: n, ...i } = e, r = m.getNode(t); if (null == r || r.type !== l.GuildsNodeType.FOLDER) return !1; let s = "" === i.name ? void 0 : i.name; if (s !== r.name) { let e = m.cloneNode(r); o()(e.id === r.id, "[SORTED GUILDS] Replacement folder node must have same id."), e.name = s, m.replaceNode(r, e) } let a = m.getNode(t); if (null == a) return !1; let u = a.children.map(e => e.id).filter(c.isNotNullish), d = new Set(u), _ = new Set(n), E = new Set([...u].filter(e => !_.has(e))); n.filter(e => !d.has(e)).forEach(e => { let t = m.getNode(e); null != t && m.moveInto(t, a, !0) }), E.forEach(e => { let t = m.getNode(e); null != t && m.moveNextTo(t, a, !0) }) } function v(e) { let { targetId: t } = e, n = m.getNode(t); if (null == n || n.type !== l.GuildsNodeType.FOLDER) return !1; n.children.map(e => e.id).filter(c.isNotNullish).forEach(e => { let t = m.getNode(e); null != t && m.moveNextTo(t, n, !0) }) } function D(e) { let { guildId: t, joinedAt: n, user: i } = e, r = h.default.getCurrentUser(), s = T.default.getGuild(t); if ((null == r ? void 0 : r.id) !== i.id || null == s) return !1; let a = "string" == typeof n ? new Date(n) : n; return a !== s.joinedAt && null != a && O() } let M = (0, _.cachedFunction)((e, t) => e.sortedGuildNodes().map(e => e.id)), y = (0, _.cachedFunction)((e, t) => e.getRoots().map(N)); class P extends f.default { initialize() { this.waitFor(T.default, S.default, d.default, E.default, u.default) } getGuildsTree() { return m } getGuildFolders() { return y(m, m.version) } getGuildFolderById(e) { return this.getGuildFolders().find(t => t.folderId === e) } getFlattenedGuildIds() { return M(m, m.version) } getCompatibleGuildFolders() { return m.root.children.map(N) } takeSnapshot() { return { version: P.LATEST_SNAPSHOT_VERSION, data: { tree: m.getSnapshot() } } } constructor() { super({ CONNECTION_OPEN: O, OVERLAY_INITIALIZE: O, CACHE_LOADED_LAZY: () => this.loadCache(), GUILD_CREATE: O, GUILD_DELETE: O, GUILD_MEMBER_ADD: D, USER_SETTINGS_PROTO_UPDATE: C, GUILD_MOVE_BY_ID: R, GUILD_FOLDER_CREATE_LOCAL: g, GUILD_FOLDER_EDIT_LOCAL: L, GUILD_FOLDER_DELETE_LOCAL: v }), A(this, "loadCache", () => { let e = this.readSnapshot(P.LATEST_SNAPSHOT_VERSION), t = null == e ? void 0 : e.tree; null != t && (m = new l.GuildsTree).loadSnapshot(t) }) } } A(P, "displayName", "SortedGuildStore"), A(P, "LATEST_SNAPSHOT_VERSION", 1), t.default = new P }, 606304: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("789020"), n("724458"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("700785"), d = n("592125"), _ = n("131951"), c = n("19780"), E = n("944486"), I = n("981631"), T = n("65154"); let f = new Map, S = null, h = null, A = null; function m(e, t) { let n = f.get(e); if (null == n) return !1; let i = n.delete(t); return 0 === n.size && f.delete(e), i } function N(e, t, n) { var i, r, s; return ((null !== (s = null === (r = f.get(e)) || void 0 === r ? void 0 : null === (i = r.get(t)) || void 0 === i ? void 0 : i.flags) && void 0 !== s ? s : T.SpeakingFlags.NONE) & n) === n } function p(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = f.get(e); if (null == i) return !1; for (let [e, { flags: r }] of i) if ((!n || e !== S) && (r & t) === t) return !0; return !1 } function O(e) { let { user: t, sessionId: n } = e; S = t.id, h = n, A = null } class C extends(i = o.default.Store) { initialize() { this.mustEmitChanges(e => "CONNECTION_OPEN" !== e.type && "VOICE_STATE_UPDATES" !== e.type), this.waitFor(c.default) } getSpeakingDuration(e, t) { var n, i; let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : T.MediaEngineContextTypes.DEFAULT, s = null === (i = f.get(r)) || void 0 === i ? void 0 : null === (n = i.get(e)) || void 0 === n ? void 0 : n.since; return null != s ? t - s : 0 } getSpeakers() { var e, t; let n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T.MediaEngineContextTypes.DEFAULT; return Array.from(null !== (t = null === (e = f.get(n)) || void 0 === e ? void 0 : e.keys()) && void 0 !== t ? t : []).filter(e => N(n, e, T.SpeakingFlags.VOICE)) } isSpeaking(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : T.MediaEngineContextTypes.DEFAULT; return N(t, e, T.SpeakingFlags.VOICE) } isPrioritySpeaker(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : T.MediaEngineContextTypes.DEFAULT; return N(t, e, T.SpeakingFlags.PRIORITY) } isSoundSharing(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : T.MediaEngineContextTypes.DEFAULT; return N(t, e, T.SpeakingFlags.SOUNDSHARE) } isAnyoneElseSpeaking() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T.MediaEngineContextTypes.DEFAULT; return p(e, T.SpeakingFlags.VOICE, !0) } isCurrentUserSpeaking() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T.MediaEngineContextTypes.DEFAULT; return null != S && this.isSpeaking(S, e) } isAnyonePrioritySpeaking() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T.MediaEngineContextTypes.DEFAULT; return p(e, T.SpeakingFlags.VOICE | T.SpeakingFlags.PRIORITY) } isCurrentUserPrioritySpeaking() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T.MediaEngineContextTypes.DEFAULT; return null != S && this.isPrioritySpeaker(S, e) && this.isSpeaking(S, e) } } a = "SpeakingStore", (s = "displayName") in(r = C) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new C(l.default, { CONNECTION_OPEN: O, OVERLAY_INITIALIZE: O, SPEAKING: function(e) { let { context: t, userId: n, speakingFlags: i } = e; if ((i & T.SpeakingFlags.PRIORITY) === T.SpeakingFlags.PRIORITY) { let e = d.default.getChannel(E.default.getVoiceChannelId()); null != e && u.can({ permission: I.Permissions.PRIORITY_SPEAKER, user: n, context: e }) ? _.default.setCanHavePriority(n, !0) : (_.default.setCanHavePriority(n, !1), i &= ~T.SpeakingFlags.PRIORITY) } return function(e, t, n) { var i, r; let s = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T.MediaEngineContextTypes.DEFAULT, t = f.get(e); return null == t && (t = new Map, f.set(e, t)), t }(e), a = s.get(t), o = null !== (i = null == a ? void 0 : a.flags) && void 0 !== i ? i : 0; if (0 === o && 0 === n) return !1; if (0 === n) s.delete(t), 0 === s.size && f.delete(e); else { let e = null !== (r = null == a ? void 0 : a.since) && void 0 !== r ? r : null, i = (o & T.SpeakingFlags.VOICE) === T.SpeakingFlags.VOICE, l = (n & T.SpeakingFlags.VOICE) === T.SpeakingFlags.VOICE; i !== l && (e = l ? Date.now() : null), s.set(t, { flags: n, since: e }) } return !0 }(t, n, i) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { let { userId: n, channelId: i, sessionId: r } = t, s = !1, a = A; return n === S && r === h && (A = null != i ? i : null), a !== A && (s = f.delete(T.MediaEngineContextTypes.DEFAULT) || s), null == i ? s = n === S && r === h ? f.delete(T.MediaEngineContextTypes.DEFAULT) || s : m(T.MediaEngineContextTypes.DEFAULT, n) || s : n === S && r !== h ? s = f.delete(T.MediaEngineContextTypes.DEFAULT) || s : n !== S && i !== c.default.getChannelId() && (s = m(T.MediaEngineContextTypes.DEFAULT, n) || s), s || e }, !1) } }) }, 398327: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("433517"), u = n("570140"), d = n("601993"); let _ = "SpellcheckStore", c = !0, E = new Set; function I() { l.Storage.set(_, { enabled: c, learnedWords: E }) } class T extends(i = o.default.Store) { initialize() { let e = l.Storage.get(_); null != e && (c = e.enabled, E = new Set(e.learnedWords), (0, d.setEnabled)(c), (0, d.setLearnedWords)(E)) } isEnabled() { return c } hasLearnedWord(e) { return E.has(e.toLocaleLowerCase()) } } a = "SpellcheckStore", (s = "displayName") in(r = T) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new T(u.default, { SPELLCHECK_TOGGLE() { c = !c, (0, d.setEnabled)(c), I() }, SPELLCHECK_LEARN_WORD(e) { let { word: t } = e; E.add(t.toLocaleLowerCase()), (0, d.setLearnedWords)(E), I() }, SPELLCHECK_UNLEARN_WORD(e) { let { word: t } = e; E.delete(t.toLocaleLowerCase()), (0, d.setLearnedWords)(E), I() }, I18N_LOAD_SUCCESS(e) { let { locale: t } = e; (0, d.setAppLocale)(t) } }) }, 959457: function(e, t, n) { "use strict"; let i, r; n.r(t), n("653041"); var s, a, o, l, u = n("512722"), d = n.n(u), _ = n("392711"), c = n.n(_), E = n("442837"), I = n("46973"), T = n("570140"), f = n("594190"), S = n("444852"), h = n("569545"), A = n("687516"), m = n("139656"), N = n("358085"), p = n("199902"), O = n("314897"), C = n("592125"), R = n("131951"), g = n("158776"), L = n("19780"), v = n("981631"), D = n("65154"); let M = {}, y = {}, P = {}, U = {}, b = v.StreamLayouts.THEATRE, G = {}, w = []; function k() { c().forEach(G, (e, t) => { e.destroy(e.isOwner ? "sender-disconnect" : "receiver-disconnect"), delete G[t] }) } function B(e) { c().forEach(G, (t, n) => { t.updateStats(e) }), e.filter(e => { let { connection: t } = e; return t.context === D.MediaEngineContextTypes.STREAM }).forEach(e => { let { stats: t } = e; T.default.dispatch({ type: "STREAM_STATS_UPDATE", stats: t }) }) } function V() { return !0 } class x extends(s = E.default.Store) { getActiveStreamKey() { return (0, m.default)(R.default) ? r : null } getAllActiveStreamKeys() { return Object.keys(G) } getRTCConnection(e) { return G[e] } getStatsHistory(e, t, n) { if (!(0, m.default)(R.default) || null == t) return null; if (n) { let n = p.default.getActiveStreamForUser(t, e); if (null == n || 0 === p.default.getViewerIds(n).length) return null } return w.map(e => n ? function(e) { var t, n, i, r, s; let a = e.find(e => "video" === e.type); return null != a && "video" === a.type ? { type: "streamer", packetsSentOrReceived: null !== (n = a.packetsSent) && void 0 !== n ? n : 0, packetsLost: null !== (i = a.packetsLost) && void 0 !== i ? i : 0, frameRate: null !== (r = a.frameRateEncode) && void 0 !== r ? r : 0, resolution: null !== (s = null === (t = a.resolution) || void 0 === t ? void 0 : t.height) && void 0 !== s ? s : 0, bitrate: 0 } : null }(e.rtp.outbound) : function(e) { var t, n, i, r, s, a; if (null == e) return null; let o = e.find(e => "video" === e.type); return null != o && "video" === o.type ? { type: "spectator", packetsSentOrReceived: null !== (n = o.packetsReceived) && void 0 !== n ? n : 0, packetsLost: null !== (i = o.packetsLost) && void 0 !== i ? i : 0, frameRate: null !== (r = o.frameRateDecode) && void 0 !== r ? r : 0, bitrate: null !== (s = o.bitrate) && void 0 !== s ? s : 0, resolution: null !== (a = null === (t = o.resolution) || void 0 === t ? void 0 : t.height) && void 0 !== a ? a : 0 } : null }(e.rtp.inbound[t])) } getQuality() { if (!(0, m.default)(R.default)) return v.RTCConnectionQuality.UNKNOWN; let e = this.getActiveStreamKey(), t = null != e ? G[e] : null; return null != t ? t.quality : v.RTCConnectionQuality.UNKNOWN } getMediaSessionId(e) { if (null == e) return null; let t = G[e]; if (null != t) return null != t ? t.getMediaSessionId() : null } getRtcConnectionId(e) { if (null == e) return null; let t = G[e]; if (null != t) return null != t ? t.getRTCConnectionId() : null } getVideoStats(e) { if (null == e) return null; let t = G[e]; return null != t ? t.getVideoStats() : null } getHostname(e) { if (null == e) return ""; let t = G[e]; return null != t ? null != t.hostname ? t.hostname : "" : "" } getRegion(e) { if (null == e) return null; let t = G[e]; return null != t ? t.getRegion() : null } getMaxViewers(e) { if (null == e) return null; let t = G[e]; return null != t ? t.getMaxViewers() : null } getStreamSourceId(e) { return U[e] } } l = "StreamRTCConnectionStore", (o = "displayName") in(a = x) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new x(T.default, !R.default.isSupported() || __OVERLAY__ ? {} : { CONNECTION_OPEN: function(e) { i = e.sessionId, r = null, k() }, CONNECTION_CLOSED: function() { i = null, r = null, k() }, RTC_CONNECTION_STATE: V, RTC_CONNECTION_PING: V, RTC_CONNECTION_LOSS_RATE: V, RTC_CONNECTION_UPDATE_ID: function(e) { return c().some(G, t => t === e.connection) }, STREAM_START: function(e) { let { streamType: t, guildId: n, channelId: i, appContext: r, pid: s, sourceId: a } = e, o = (0, h.encodeStreamKey)({ streamType: t, guildId: n, channelId: i, ownerId: O.default.getId() }); if (M[o] = r, c().forEach(G, e => { let { analyticsContext: t } = e; t.setActionContext(r) }), U[o] = a, P[o] = s, null != s) { let e = f.default.getGameForPID(s); null != e && (y[o] = { name: e.name, id: e.id, exe: e.exeName, distributor: e.distributor }) } }, STREAM_STOP: function(e) { let { appContext: t, streamKey: n } = e; M[n] = t, c().forEach(G, e => { let { analyticsContext: n } = e; n.setActionContext(t) }), U[n] = null, P[n] = null }, STREAM_CREATE: function(e) { let { streamKey: t, rtcServerId: n, region: s, viewerIds: a } = e; r = t; let o = G[t]; if (null == o && null != n) { var l, u, _; null == P[t] && (y[t] = null); let e = (0, h.decodeStreamKey)(t); null == y[t] && null == U[t] && (y[t] = (0, A.getStreamerApplication)(e, g.default)); let r = C.default.getChannel(e.channelId), c = null != r && r.isBroadcastChannel(), E = new S.StreamRTCAnalyticsContext({ streamRegion: s, streamApplication: y[t], streamSourceType: function(e) { var t, n, i; if (null == e) return "unknown"; if (N.isPlatformEmbedded || (null === (t = platform) || void 0 === t ? void 0 : t.name) === "Chrome") { if (e.startsWith("web-contents-media-stream:")) return "tab"; if (e.startsWith("window:")) return "window"; else if (e.startsWith("screen:")) return "screen" } else if ((null === (n = platform) || void 0 === n ? void 0 : n.name) === "Firefox") return "" !== e ? "window" : "screen"; else if ((null === (i = platform) || void 0 === i ? void 0 : i.name) === "Safari") return "window"; return "unknown" }(U[t]), actionContext: M[t], numViewers: null != a ? a.length : 0, isBroadcast: c }); l = t, u = n, _ = E, d()(null != i, "Creating RTCConnection without session."), o = new S.default({ sessionId: i, streamKey: l, serverId: u, initialLayout: b, analyticsContext: _, isStreamer: null != y[l], parentMediaSessionId: L.default.getMediaSessionId() }), G[t] = o } w = [], R.default.getMediaEngine().on(I.MediaEngineEvent.ConnectionStats, B) }, STREAM_SERVER_UPDATE: function(e) { let t = G[e.streamKey]; if (null == t) return !1; t.connect(e.endpoint, e.token) }, STREAM_UPDATE: function(e) { let { streamKey: t, viewerIds: n, paused: i } = e, r = G[t]; if (null == r) return !1; null != n && r.analyticsContext.trackViewerCount(n.length), r.streamUpdate(i) }, STREAM_DELETE: function(e) { let { streamKey: t } = e, n = G[t]; if (null == n) return !1; t === r && (r = null, R.default.getMediaEngine().off(I.MediaEngineEvent.ConnectionStats, B)), n.destroy("stream-end"), delete G[t] }, STREAM_STATS_UPDATE: function(e) { let { stats: t } = e; if (null == t) return !1; w.push(t), w.length > 30 && w.shift() }, STREAM_LAYOUT_UPDATE: function(e) { let { layout: t } = e; b = t, Object.values(G).forEach(e => e.layoutChange(t)) }, RTC_DEBUG_SET_SIMULCAST_OVERRIDE: function(e) { let { userId: t, context: n, quality: i } = e; c().forEach(G, e => { e.setSimulcastDebugOverride(t, n, i) }) } }) }, 246946: function(e, t, n) { "use strict"; n.r(t); var i, r = n("442837"), s = n("570140"), a = n("626135"), o = n("314897"), l = n("981631"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function d(e, t) { a.default.track(l.AnalyticEvents.STREAMER_MODE_TOGGLE, { enabled: e, automatic: t }) } let _ = { enabled: !1, autoToggle: !0, hideInstantInvites: !0, hidePersonalInformation: !0, disableSounds: !0, disableNotifications: !0, enableContentProtection: !1 }, c = {}, E = { ..._ }; class I extends(i = r.default.PersistedStore) { initialize(e) { Object.assign(c, e), this.syncWith([o.default], () => { var e; let t, n = o.default.getId(); E = null != n ? (null == (t = c[e = n]) && (t = c[e] = { ..._ }), t) : { ..._ } }) } getState() { return c } getSettings() { return E } get enabled() { return E.enabled } get autoToggle() { return E.autoToggle } get hideInstantInvites() { return this.enabled && E.hideInstantInvites } get hidePersonalInformation() { return this.enabled && E.hidePersonalInformation } get disableSounds() { return this.enabled && E.disableSounds } get disableNotifications() { return this.enabled && E.disableNotifications } get enableContentProtection() { return this.enabled && E.enableContentProtection } } u(I, "displayName", "StreamerModeStore"), u(I, "persistKey", "StreamerModeStore"), u(I, "migrations", [e => { let t = o.default.getId(); return null == e || null == t ? {} : { [t]: { ...e } } }]), t.default = new I(s.default, { LOGOUT: function(e) { !e.isSwitchingAccount && (c = {}) }, MULTI_ACCOUNT_REMOVE_ACCOUNT: function(e) { e.userId in c && delete c[e.userId] }, STREAMER_MODE_UPDATE: function(e) { let t = { ...E }; return E[e.key] = e.value, "enabled" === e.key ? d(e.value, !1) : a.default.track(l.AnalyticEvents.UPDATE_STREAMER_MODE_SETTINGS, { enabled: E.enabled, automatic: E.autoToggle, disable_notifications: E.disableNotifications, disable_sounds: E.disableSounds, hide_instant_invites: E.hideInstantInvites, hide_personal_info: E.hidePersonalInformation, enable_content_protection: E.enableContentProtection, old_enabled: t.enabled, old_automatic: t.autoToggle, old_disable_notifications: t.disableNotifications, old_disable_sounds: t.disableSounds, old_hide_instant_invites: t.hideInstantInvites, old_hide_personal_info: t.hidePersonalInformation, old_enable_content_protection: t.enableContentProtection }), !0 }, RUNNING_STREAMER_TOOLS_CHANGE: function(e) { if (!E.autoToggle) return !1; { let t = e.count > 0; return E.enabled = t, d(t, !0), !0 } } }) }, 704806: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getSystemAnalyticsInfo: function() { return f } }), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("626135"), o = n("358085"), l = n("998502"), u = n("828695"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = { hashes: {} }; async function c() { if (!o.isPlatformEmbedded || !(0, o.isWindows)()) return []; await l.default.ensureModule("discord_media"); let e = l.default.requireModule("discord_media"); return await e.getSystemAnalyticsBlob() || [] } async function E() { try { let e = (await c()).filter(e => _.hashes[e.name] !== e.hash); for (let { name: t, hash: n, data: i } of e) a.default.track(t, i), (_ = { hashes: { ..._.hashes } }).hashes[t] = n; e.length > 0 && T.emitChange() } catch (e) {} } class I extends(i = r.default.PersistedStore) { initialize(e) { _ = null != e && "object" == typeof e.hashes ? e : { hashes: {} }, this.waitFor(u.default) } getState() { return _ } async info() { try { let e = (await c()).find(e => "hardware_detected" === e.name); if (null == e) return null; return e.data } catch (e) {} } } d(I, "displayName", "SystemAnalyticsStore"), d(I, "persistKey", "SystemAnalyticsStore"); let T = new I(s.default, { START_SESSION: function() { return E(), !1 } }); function f() { return T.info() } }, 117530: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("668781"), c = n("141795"), E = n("596956"), I = n("703558"), T = n("981631"), f = n("689938"); let S = new Map, h = []; function A(e, t) { var n, i; return null !== (i = null === (n = m(e)) || void 0 === n ? void 0 : n.get(t)) && void 0 !== i ? i : h } function m(e) { var t; return null !== (t = S.get(e)) && void 0 !== t ? t : new Map } function N(e, t, n) { let i = m(e); i.set(t, n), S.set(e, i) } class p extends(i = u.default.Store) { getFirstUpload(e, t) { let n = A(e, t); return n.length > 0 ? n[0] : null } hasAdditionalUploads(e, t) { var n; return (null !== (n = A(e, t).length) && void 0 !== n ? n : 0) > 1 } getUploads(e, t) { return A(e, t) } getUploadCount(e, t) { var n; return null !== (n = A(e, t).length) && void 0 !== n ? n : 0 } getUpload(e, t, n) { return A(e, n).find(e => e.id === t) } findUpload(e, t, n) { return A(e, t).find(n) } } a = "UploadAttachmentStore", (s = "displayName") in(r = p) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new p(d.default, { UPLOAD_ATTACHMENT_POP_FILE: function(e) { let { channelId: t } = e, n = [...A(t, I.DraftType.ChannelMessage)]; n.shift(), N(t, I.DraftType.ChannelMessage, n) }, UPLOAD_ATTACHMENT_ADD_FILES: e => { let { files: t, channelId: n, showLargeMessageDialog: i, draftType: r } = e, s = [...A(n, r)]; if (s.length + t.length > T.MAX_UPLOAD_COUNT && r !== I.DraftType.SlashCommand && r !== I.DraftType.ApplicationLauncherCommand) { _.default.show({ title: f.default.Messages.ATTACHMENT_TOO_MANY_ERROR_TITLE, body: f.default.Messages.ATTACHMENT_TOO_MANY_ERROR_MESSAGE.format({ limit: T.MAX_UPLOAD_COUNT }) }); return } l().forEach(t, e => { let t = new c.CloudUpload(e, n, i, s.length); t.upload(), s.push(t) }), N(n, r, s) }, UPLOAD_ATTACHMENT_UPDATE_FILE: function(e) { let { channelId: t, id: n, filename: i, description: r, spoiler: s, thumbnail: a, draftType: o } = e, l = [...A(t, o)].map(e => (e.id === n && (void 0 !== i && (e.filename = i), void 0 !== s && (e.spoiler = s), void 0 !== r && (e.description = r), void 0 !== a && (e.isThumbnail = a)), e)); N(t, o, l) }, UPLOAD_ATTACHMENT_REMOVE_FILE: function(e) { let { channelId: t, id: n, draftType: i } = e, r = [...A(t, i)], s = r.findIndex(e => (0, E.doesImageMatchUpload)({ uri: n, filename: n }, e)); s > -1 && (r.splice(s, 1)[0].cancel(), N(t, i, r)) }, UPLOAD_ATTACHMENT_REMOVE_FILES: function(e) { let { channelId: t, attachmentIds: n, draftType: i } = e, r = [...A(t, i)]; n.forEach(e => { let t = r.findIndex(t => e === t.id); t > -1 && r.splice(t, 1)[0].cancel() }), N(t, i, r) }, UPLOAD_ATTACHMENT_CLEAR_ALL_FILES: function(e) { let { channelId: t, draftType: n } = e; N(t, n, []) }, UPLOAD_ATTACHMENT_SET_UPLOADS: function(e) { let { channelId: t, uploads: n, draftType: i } = e; N(t, i, n) }, UPLOAD_ATTACHMENT_SET_FILE: function(e) { let { channelId: t, id: n, file: i, draftType: r } = e, s = [...A(t, r)].filter(e => e.id !== n), a = new c.CloudUpload(i, t); a.upload(), s.push(a), N(t, r, s) }, SIDEBAR_CLOSE: function(e) { let { baseChannelId: t } = e; N(t, I.DraftType.FirstThreadMessage, []) } }) }, 62817: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("177593"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("375954"); let d = Object.freeze([]), _ = {}, c = {}, E = {}, I = {}, T = {}; function f(e, t) {} function S() { T = {} } function h(e, t) { let n = _[e]; return null != n && (_[e] = n.filter(e => e.id !== t), delete c[t], delete E[t], n.length !== _[e].length) } function A(e, t) { let n = _[e]; if (null == n) return !1; _[e] = n.map(e => e.id === t.id ? { ...e, ...t } : e); let i = E[t.id]; null != i && null != I[i.id] && (I[i.id] = { ...I[i.id], ...t }) } class m extends(i = o.default.Store) { initialize() { this.waitFor(u.default) } getFiles(e) { var t; return null !== (t = _[e]) && void 0 !== t ? t : d } getMessageForFile(e) { return E[e] } getUploaderFileForMessageId(e) { return I[e] } getUploadAttachments(e) { if (null != e) return T[e] } } a = "UploadStore", (s = "displayName") in(r = m) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new m(l.default, { CONNECTION_OPEN: function() { T = {} }, LOGOUT: function() { T = {} }, UPLOAD_START: function(e) { var t; let { channelId: n, file: i, uploader: r, message: s } = e; if (r._aborted || r._errored) return; let a = null !== (t = _[n]) && void 0 !== t ? t : d; c[i.id] = r, _[n] = [...a, i], E[i.id] = s; let { items: o } = i; null != o && (I[s.id] = { ...i, items: o }), s.nonce }, UPLOAD_COMPRESSION_PROGRESS: function(e) { let { channelId: t, file: n } = e; A(t, n) }, UPLOAD_PROGRESS: function(e) { let { channelId: t, file: n } = e; A(t, n) }, UPLOAD_COMPLETE: function(e) { let { channelId: t, file: n } = e; return h(t, n.id) }, UPLOAD_FAIL: function(e) { let { channelId: t, file: n } = e; return h(t, n.id) }, UPLOAD_CANCEL_REQUEST: function(e) { let { file: t } = e, n = c[t.id]; if (null == n) return !1; setImmediate(() => { var e; return null === (e = n.cancel) || void 0 === e ? void 0 : e.call(n) }) }, UPLOAD_ITEM_CANCEL_REQUEST: function(e) { let { file: t, itemId: n } = e, i = c[t.id]; if (null == i) return !1; setImmediate(() => i.cancelItem(n)) }, UPLOAD_FILE_UPDATE: function(e) { let { channelId: t, file: n } = e, i = E[n.id]; null != i && i.nonce, A(t, n) }, UPLOAD_RESTORE_FAILED_UPLOAD: function(e) { let { file: t, messageId: n } = e; I[n] = t } }) }, 800599: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("442837"), s = n("570140"), a = n("699516"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = !1, u = Object.freeze({ userAffinities: [], affinityUserIds: new Set, lastFetched: 0 }), d = Object.freeze({ userAffinitiesMap: new Map, affinityUserIds: new Set }), _ = { ...u }, c = { ...d }; function E() { let e = new Map(_.userAffinities.filter(e => { let { user_id: t } = e; return !a.default.isBlocked(t) }).map(e => [e.user_id, e])), t = new Set(e.keys()); c = { userAffinitiesMap: e, affinityUserIds: t } } class I extends(i = r.default.PersistedStore) { initialize(e) { this.waitFor(a.default), null != e && (_.userAffinities = e.userAffinities, _.lastFetched = e.lastFetched, E()), this.syncWith([a.default], E) } needsRefresh() { return Date.now() - _.lastFetched > 864e5 } getFetching() { return l } getState() { return _ } getUserAffinities() { return _.userAffinities } getUserAffinitiesMap() { return c.userAffinitiesMap } getUserAffinity(e) { return c.userAffinitiesMap.get(e) } getUserAffinitiesUserIds() { return c.affinityUserIds } } o(I, "displayName", "UserAffinitiesStore"), o(I, "persistKey", "UserAffinitiesStore"), o(I, "migrations", [e => null]), t.default = new I(s.default, { LOAD_USER_AFFINITIES_SUCCESS: function(e) { var t; let { affinities: n } = e; _.userAffinities = null !== (t = n.user_affinities) && void 0 !== t ? t : [], _.lastFetched = Date.now(), E(), l = !1 }, LOAD_USER_AFFINITIES: function() { l = !0 }, LOAD_USER_AFFINITIES_FAILURE: function() { l = !1 }, LOGOUT: function() { _ = { ...u }, c = { ...d } } }) }, 9156: function(e, t, n) { "use strict"; n.r(t), n.d(t, { convertChannelOverridesToMap: function() { return K }, getGuildDefaults: function() { return W } }), n("47120"), n("789020"); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("798140"), u = n("160404"), d = n("312400"), _ = n("569471"), c = n("131704"), E = n("630388"), I = n("709054"), T = n("592125"), f = n("430824"), S = n("594174"), h = n("981631"), A = n("468788"), m = n("490897"), N = n("526761"); function p(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let O = {}, C = {}, R = !1, g = !1, L = { flags: 0 }, v = new l.default, D = new l.default, M = { suppress_everyone: !1, suppress_roles: !1, mute_scheduled_events: !1, mobile_push: !0, muted: !1, message_notifications: h.UserNotificationSettings.ALL_MESSAGES, flags: 0, channel_overrides: {}, notify_highlights: h.HighlightSettings.NULL, hide_muted_channels: !1, version: -1, mute_config: null }, y = { [h.UserNotificationSettings.ALL_MESSAGES]: { ...M, message_notifications: h.UserNotificationSettings.ALL_MESSAGES }, [h.UserNotificationSettings.ONLY_MENTIONS]: { ...M, message_notifications: h.UserNotificationSettings.ONLY_MENTIONS } }, P = {}, U = {}, b = new Set, G = new Set, w = {}, k = {}; function B(e, t) { var n; let i = O[e], r = null !== (n = null == i ? void 0 : i.channel_overrides) && void 0 !== n ? n : {}, a = K(t.channel_overrides), o = { ...W(e), ...i, ...t, channel_overrides: a }; v.clearTimer(e), s().forEach(r, e => { D.clearTimer(e.channel_id) }), V(e, o), O[e] = o, P[e] = X(O[e]); let l = s().filter(o.channel_overrides, e => { var t; return E.hasFlag(null !== (t = e.flags) && void 0 !== t ? t : 0, N.ChannelNotificationSettingsFlags.OPT_IN_ENABLED) }); U[e] = new Set(l.map(e => e.channel_id)), function(e) { var t; if (null == e) return; let n = new Set(U[e]), i = null !== (t = w[e]) && void 0 !== t ? t : {}; for (let e in i) { let t = i[e]; E.hasFlag(t.flags, N.ChannelNotificationSettingsFlags.OPT_IN_ENABLED) ? n.add(e) : n.delete(e) } Object.keys(i).length > 0 ? k[e] = n : delete k[e] }(e), delete C[e] } function V(e, t) { !0 === t.muted && v.setTimer(e, t.mute_config, () => { x(e, { muted: !1 }), o.default.dispatch({ type: "GUILD_MUTE_EXPIRED", guildId: e }) }) && (t.muted = !1), s().forEach(t.channel_overrides, t => { !0 === t.muted && D.setTimer(t.channel_id, t.mute_config, () => { F(e, t.channel_id, { muted: !1 }), o.default.dispatch({ type: "CHANNEL_MUTE_EXPIRED", guildId: e, channelId: t.channel_id }) }) && (t.muted = !1) }) } function x(e, t) { var n; let i = O[e]; B(e, { channel_overrides: null !== (n = null == i ? void 0 : i.channel_overrides) && void 0 !== n ? n : {}, ...t }) } function F(e, t, n) { let i = j(e, t, n); Y(e, { [t]: i }) } function H(e, t) { var n; let i = {}, r = null !== (n = null != e ? w[e] : null) && void 0 !== n ? n : {}; I.default.keys(t).forEach(n => { var s; let a = j(e, n, t[n]); i[n] = a, r[n] = { flags: null !== (s = a.flags) && void 0 !== s ? s : 0 } }), null != e && (w[e] = { ...w[e], ...r }), Y(e, i) } function Y(e, t) { var n; let i = O[e], r = null !== (n = null == i ? void 0 : i.channel_overrides) && void 0 !== n ? n : {}; B(e, { channel_overrides: null == i ? t : { ...r, ...t } }) } function j(e, t, n) { var i; let r = O[e], s = null !== (i = null == r ? void 0 : r.channel_overrides) && void 0 !== i ? i : {}; return { channel_id: t, muted: !1, ...s[t], ...n } } function W(e) { let t = f.default.getGuild(e); return y[null != t ? t.defaultMessageNotifications : h.UserNotificationSettings.ALL_MESSAGES] } function K() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return e instanceof Array ? s().keyBy(e, "channel_id") : e } function z(e) { var t; return null !== (t = O[e]) && void 0 !== t ? t : W(e) } function Z(e) { R = E.hasFlag(e.flags, A.AccountNotificationFlags.USE_NEW_NOTIFICATIONS), g = E.hasFlag(e.flags, A.AccountNotificationFlags.MENTION_ON_ALL_MESSAGES), L = e } function X(e) { return new Set(null != e.channel_overrides ? s()(e.channel_overrides).filter(e => (0, l.computeIsMuted)(e)).map(e => e.channel_id).value() : null) } function Q() { return !0 } function q() { return R && d.NotificationsExperiment.getCurrentConfig({ location: "UserGuildSettingsStore" }, { autoTrackExposure: !1 }).enabled } class J extends(i = a.default.PersistedStore) { initialize(e) { if (this.waitFor(S.default, f.default, u.default, _.default), null != e) { var t, n; R = null !== (t = e.useNewNotifications) && void 0 !== t && t, "userGuildSettings" in e && (O = e.userGuildSettings, U = s().mapValues(null !== (n = e.optedInChannelsByGuild) && void 0 !== n ? n : {}, e => new Set(e)), s().forEach(O, (e, t) => { P[t] = X(e) })) } } getState() { return { useNewNotifications: R } } get mentionOnAllMessages() { return g } isSuppressEveryoneEnabled(e) { return z(e).suppress_everyone } isSuppressRolesEnabled(e) { return z(e).suppress_roles } isMuteScheduledEventsEnabled(e) { return z(e).mute_scheduled_events } isMobilePushEnabled(e) { return z(e).mobile_push } isMuted(e) { let t = z(e); return (0, l.computeIsMuted)(t) } isTemporarilyMuted(e) { let t = z(e); return (0, l.isTemporarilyMuted)(t) } getMuteConfig(e) { return z(e).mute_config } getMessageNotifications(e) { return z(e).message_notifications } getChannelOverrides(e) { var t; return null !== (t = z(e).channel_overrides) && void 0 !== t ? t : {} } getNotifyHighlights(e) { return z(e).notify_highlights } getGuildFlags(e) { return z(e).flags } getChannelMessageNotifications(e, t) { let n = this.getChannelOverrides(e)[t]; return null == n || null == n.message_notifications ? h.UserNotificationSettings.NULL : n.message_notifications } getChannelMuteConfig(e, t) { let n = this.getChannelOverrides(e)[t]; return null != n ? n.mute_config : null } getMutedChannels(e) { var t; return null !== (t = P[e]) && void 0 !== t ? t : b } isChannelMuted(e, t) { var n; let i = T.default.getChannel(t); return e = null !== (n = null == i ? void 0 : i.getGuildId()) && void 0 !== n ? n : e, this.getMutedChannels(e).has(t) } isCategoryMuted(e, t) { let n = T.default.getChannel(t); if (null == n) return !1; let i = n.parent_id; return null != i && this.getMutedChannels(e).has(i) } resolvedMessageNotifications(e) { let t = this.getChannelMessageNotifications(e.guild_id, e.id); if (t !== h.UserNotificationSettings.NULL) return t; if (null != e.parent_id) { let t = this.getChannelMessageNotifications(e.guild_id, e.parent_id); if (t !== h.UserNotificationSettings.NULL) return t } return this.getMessageNotifications(e.guild_id) } resolveUnreadSetting(e) { if (c.THREAD_CHANNEL_TYPES.has(e.type) || (0, c.isPrivate)(e.type) || !q()) return m.UnreadSetting.ALL_MESSAGES; let t = this.getChannelUnreadSetting(e.guild_id, e.id); if (t !== m.UnreadSetting.UNSET) return t; if (null != e.parent_id) { let t = this.getChannelUnreadSetting(e.guild_id, e.parent_id); if (t !== m.UnreadSetting.UNSET) return t } let n = this.getGuildUnreadSetting(e.guild_id); return n !== m.UnreadSetting.UNSET ? n : this.resolvedMessageNotifications(e) === h.UserNotificationSettings.ALL_MESSAGES ? m.UnreadSetting.ALL_MESSAGES : m.UnreadSetting.ONLY_MENTIONS } isGuildOrCategoryOrChannelMuted(e, t) { return this.isMuted(e) || this.isCategoryMuted(e, t) || this.isChannelMuted(e, t) } allowNoMessages(e) { return this.isGuildOrCategoryOrChannelMuted(e.guild_id, e.id) || this.resolvedMessageNotifications(e) === h.UserNotificationSettings.NO_MESSAGES || this.isOptInEnabled(e.guild_id) && !this.isChannelRecordOrParentOptedIn(e) } allowAllMessages(e) { return !this.isGuildOrCategoryOrChannelMuted(e.guild_id, e.id) && this.resolvedMessageNotifications(e) === h.UserNotificationSettings.ALL_MESSAGES && (!this.isOptInEnabled(e.guild_id) || this.isChannelRecordOrParentOptedIn(e)) } isGuildCollapsed(e) { var t; return (null === (t = O[e]) || void 0 === t ? void 0 : t.hide_muted_channels) === !0 } getAllSettings() { return { userGuildSettings: O, mutedChannels: P, optedInChannelsByGuild: U } } getChannelIdFlags(e, t) { var n; let i = this.getChannelOverrides(e)[t]; return null !== (n = null == i ? void 0 : i.flags) && void 0 !== n ? n : 0 } getChannelFlags(e) { return this.getChannelIdFlags(e.guild_id, e.id) } getNewForumThreadsCreated(e) { let t = this.getChannelOverrides(e.guild_id)[e.id]; if (null != t && null != t.flags) { if (E.hasFlag(t.flags, N.ChannelNotificationSettingsFlags.NEW_FORUM_THREADS_ON)) return !0; if (E.hasFlag(t.flags, N.ChannelNotificationSettingsFlags.NEW_FORUM_THREADS_OFF)) return !1 } return this.resolvedMessageNotifications(e) === h.UserNotificationSettings.ALL_MESSAGES } isOptInEnabled(e) { return null != e && (u.default.isFullServerPreview(e) ? u.default.isOptInEnabled(e) : E.hasFlag(this.getGuildFlags(e), N.GuildNotificationSettingsFlags.OPT_IN_CHANNELS_ON)) } isChannelRecordOrParentOptedIn(e, t) { return null != e && null != e.guild_id && (this.isChannelOptedIn(e.guild_id, e.id, t) || null != e.parent_id && this.isChannelOptedIn(e.guild_id, e.parent_id, t)) } isChannelOrParentOptedIn(e, t, n) { return this.isChannelRecordOrParentOptedIn(T.default.getChannel(t), n) } isChannelOptedIn(e, t) { var n, i; let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; if (null == e) return !1; if (u.default.isFullServerPreview(e)) return u.default.isChannelOptedIn(e, t); if (r && null != k[e]) return k[e].has(t); let s = null !== (i = null === (n = this.getChannelOverrides(e)[t]) || void 0 === n ? void 0 : n.flags) && void 0 !== i ? i : 0; return E.hasFlag(s, N.ChannelNotificationSettingsFlags.OPT_IN_ENABLED) } getOptedInChannels(e) { var t, n; return u.default.isFullServerPreview(e) ? null !== (t = u.default.getViewingChannels(e)) && void 0 !== t ? t : G : null !== (n = U[e]) && void 0 !== n ? n : G } getOptedInChannelsWithPendingUpdates(e) { return k[e] } getPendingChannelUpdates(e) { return w[e] } getGuildFavorites(e) { if (u.default.isFullServerPreview(e)) return null; if (null == C[e]) { let t = s().filter(this.getChannelOverrides(e), t => { var n, i; return E.hasFlag(null !== (i = t.flags) && void 0 !== i ? i : 0, N.ChannelNotificationSettingsFlags.FAVORITED) && (null === (n = T.default.getChannel(t.channel_id)) || void 0 === n ? void 0 : n.guild_id) === e }); C[e] = t.map(e => e.channel_id) } return C[e] } isFavorite(e, t) { var n; return !u.default.isFullServerPreview(e) && (null === (n = this.getGuildFavorites(e)) || void 0 === n ? void 0 : n.includes(t)) === !0 } isMessagesFavorite(e) { var t, n; let i = null !== (n = null === (t = this.getChannelOverrides(null)[e]) || void 0 === t ? void 0 : t.flags) && void 0 !== n ? n : 0; return E.hasFlag(i, N.ChannelNotificationSettingsFlags.FAVORITED) } isAddedToMessages(e) { var t, n; let i = null !== (n = null === (t = this.getChannelOverrides(null)[e]) || void 0 === t ? void 0 : t.flags) && void 0 !== n ? n : 0; return E.hasFlag(i, N.ChannelNotificationSettingsFlags.OPT_IN_ENABLED) } getAddedToMessages() { var e; return null !== (e = U.null) && void 0 !== e ? e : G } get accountNotificationSettings() { return L } get useNewNotifications() { return R } getGuildUnreadSetting(e) { if (!q()) return m.UnreadSetting.ALL_MESSAGES; let t = this.getGuildFlags(e); return E.hasFlag(t, N.GuildNotificationSettingsFlags.UNREADS_ALL_MESSAGES) ? m.UnreadSetting.ALL_MESSAGES : E.hasFlag(t, N.GuildNotificationSettingsFlags.UNREADS_ONLY_MENTIONS) ? m.UnreadSetting.ONLY_MENTIONS : m.UnreadSetting.UNSET } resolveGuildUnreadSetting(e) { let t = this.getGuildFlags(e.id); return !q() || E.hasFlag(t, N.GuildNotificationSettingsFlags.UNREADS_ALL_MESSAGES) ? m.UnreadSetting.ALL_MESSAGES : E.hasFlag(t, N.GuildNotificationSettingsFlags.UNREADS_ONLY_MENTIONS) ? m.UnreadSetting.ONLY_MENTIONS : e.defaultMessageNotifications === h.UserNotificationSettings.ALL_MESSAGES ? m.UnreadSetting.ALL_MESSAGES : m.UnreadSetting.ONLY_MENTIONS } getChannelRecordUnreadSetting(e) { return this.getChannelUnreadSetting(e.guild_id, e.id) } getChannelUnreadSetting(e, t) { let n = this.getChannelIdFlags(e, t); return E.hasFlag(n, N.ChannelNotificationSettingsFlags.UNREADS_ALL_MESSAGES) ? m.UnreadSetting.ALL_MESSAGES : E.hasFlag(n, N.ChannelNotificationSettingsFlags.UNREADS_ONLY_MENTIONS) ? m.UnreadSetting.ONLY_MENTIONS : m.UnreadSetting.UNSET } } p(J, "displayName", "UserGuildSettingsStore"), p(J, "persistKey", "collapsedGuilds"); let $ = new J(o.default, { USER_GUILD_SETTINGS_FULL_UPDATE: function(e) { let { userGuildSettings: t } = e; t.forEach(e => { B(e.guild_id, { channel_overrides: {}, ...e }) }) }, USER_GUILD_SETTINGS_GUILD_UPDATE: function(e) { let { guildId: t, settings: n } = e; x(t, n) }, USER_GUILD_SETTINGS_GUILD_AND_CHANNELS_UPDATE: function(e) { let { guildId: t, settings: n } = e; x(t, n), H(t, n.channel_overrides) }, USER_GUILD_SETTINGS_CHANNEL_UPDATE: function(e) { let { guildId: t, channelId: n, settings: i } = e; null != t && null != i.flags && (w[t] = { ...w[t], [n]: { flags: i.flags } }), F(t, n, i) }, USER_GUILD_SETTINGS_CHANNEL_UPDATE_BULK: function(e) { let { guildId: t, overrides: n } = e; return !(null == t || u.default.isFullServerPreview(t)) && (H(t, n), !0) }, CONNECTION_OPEN: function(e) { Z(e.notificationSettings), v.reset(), D.reset(), !e.userGuildSettings.partial && (O = {}, P = {}, U = {}); let t = new Set; for (let n in e.userGuildSettings.entries.forEach(e => { !("channel_overrides" in e) && (e.channel_overrides = {}), B(e.guild_id, e), null != e.guild_id && t.add(e.guild_id) }), O) !t.has(n) && V(n, O[n]) }, CACHE_LOADED: function(e) { null != e.userGuildSettings && 0 !== e.userGuildSettings.length && (O = {}, P = {}, U = {}, e.userGuildSettings.forEach(e => { let t = e.guild_id; O[t] = e; let n = new Set, i = new Set; for (let t in e.channel_overrides) { var r; let s = e.channel_overrides[t]; (0, l.computeIsMuted)(s) && n.add(t), E.hasFlag(null !== (r = s.flags) && void 0 !== r ? r : 0, N.ChannelNotificationSettingsFlags.OPT_IN_ENABLED) && i.add(t) } P[t] = n, U[t] = i })) }, OVERLAY_INITIALIZE: function(e) { let { allUserGuildSettings: t } = e, { userGuildSettings: n, mutedChannels: i, optedInChannelsByGuild: r } = t; O = { ...n }, P = {}, U = {}, I.default.keys(i).forEach(e => { P[e] = new Set(i[e]) }), I.default.keys(r).forEach(e => { U[e] = new Set(r[e]) }) }, GUILD_CREATE: Q, GUILD_UPDATE: Q, GUILD_TOGGLE_COLLAPSE_MUTED: function(e) { let { guildId: t } = e, n = null == O[t] ? W(t) : O[t]; O[t] = { ...n, guild_id: t, hide_muted_channels: !0 !== n.hide_muted_channels } }, IMPERSONATE_UPDATE: Q, IMPERSONATE_STOP: Q, USER_GUILD_SETTINGS_REMOVE_PENDING_CHANNEL_UPDATES: function(e) { let { guildId: t, updates: n } = e; if (null == t) return !1; let i = w[t]; if (null == i) return !1; for (let e in n) s().isEqual(n[e], i[e]) && delete i[e] }, CLEAR_PENDING_CHANNEL_AND_ROLE_UPDATES: function(e) { let { guildId: t } = e; if (null == t) return !1; delete w[t], delete k[t] }, NOTIFICATION_SETTINGS_UPDATE: function(e) { let { settings: t } = e; Z(t) }, GUILD_MUTE_EXPIRED: () => !0, CHANNEL_MUTE_EXPIRED: () => !0 }); t.default = $ }, 25990: function(e, t, n) { "use strict"; let i, r, s, a, o, l, u, d, _, c, E, I, T, f; n.r(t); var S, h, A, m, N = n("979554"), p = n("442837"), O = n("570140"), C = n("981631"); let R = C.FormStates.CLOSED, g = {}; function L() { R = C.FormStates.OPEN, g = {} } function v() { R = C.FormStates.CLOSED, g = {} } function D() { M(), y(), g = {} } function M() { i = void 0, r = void 0, s = void 0, a = void 0 } function y() { o = void 0, l = void 0, u = void 0, d = void 0, _ = void 0, a = void 0 } function P() { E = void 0, I = void 0, T = void 0, f = void 0, c = void 0 } class U extends(m = p.default.Store) { getFormState() { return R } getErrors() { return g } showNotice() { return void 0 !== i || void 0 !== o || void 0 !== l || void 0 !== u || void 0 !== d || void 0 !== _ || void 0 !== s || void 0 !== a || void 0 !== r } getIsSubmitDisabled() { return void 0 !== l && l.length > C.BIO_MAX_LENGTH } getPendingAvatar() { return i } getPendingGlobalName() { return r } getPendingBanner() { return o } getPendingBio() { return l } getPendingPronouns() { return u } getPendingAccentColor() { return d } getPendingThemeColors() { return _ } getPendingAvatarDecoration() { return s } getPendingProfileEffectId() { return a } getAllPending() { return { pendingAvatar: i, pendingBanner: o, pendingBio: l, pendingPronouns: u, pendingAccentColor: d, pendingThemeColors: _, pendingAvatarDecoration: s, pendingProfileEffectId: a, pendingGlobalName: r } } getTryItOutThemeColors() { return c } getTryItOutAvatar() { return E } getTryItOutAvatarDecoration() { return I } getTryItOutProfileEffectId() { return T } getTryItOutBanner() { return f } getAllTryItOut() { return { tryItOutThemeColors: c, tryItOutAvatar: E, tryItOutAvatarDecoration: I, tryItOutProfileEffectId: T, tryItOutBanner: f } } } A = "UserSettingsAccountStore", (h = "displayName") in(S = U) ? Object.defineProperty(S, h, { value: A, enumerable: !0, configurable: !0, writable: !0 }) : S[h] = A, t.default = new U(O.default, { USER_SETTINGS_ACCOUNT_INIT: L, USER_SETTINGS_MODAL_INIT: L, USER_SETTINGS_ACCOUNT_SUBMIT_SUCCESS: L, USER_SETTINGS_MODAL_SET_SECTION: function(e) { let { section: t } = e; return t === C.UserSettingsSections.ACCOUNT && L() }, USER_SETTINGS_ACCOUNT_CLOSE: v, USER_SETTINGS_ACCOUNT_RESET_AND_CLOSE_FORM: function() { D(), P(), v() }, USER_SETTINGS_ACCOUNT_SUBMIT: function() { R = C.FormStates.SUBMITTING, g = {} }, USER_SETTINGS_ACCOUNT_SUBMIT_FAILURE: function(e) { var t; if (R !== C.FormStates.SUBMITTING) return !1; R = C.FormStates.OPEN, g = null !== (t = e.errors) && void 0 !== t ? t : {} }, USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR: function(e) { let { avatar: t } = e; i = t, E = void 0 }, USER_SETTINGS_ACCOUNT_SET_PENDING_GLOBAL_NAME: function(e) { let { globalName: t } = e; r = t }, USER_SETTINGS_ACCOUNT_SET_PENDING_AVATAR_DECORATION: function(e) { let { avatarDecoration: t } = e; s = t }, USER_SETTINGS_ACCOUNT_SET_SINGLE_TRY_IT_OUT_COLLECTIBLES_ITEM: function(e) { let { item: t } = e; (null == t ? void 0 : t.type) === N.CollectiblesItemType.PROFILE_EFFECT ? (I = null, T = null == t ? void 0 : t.id) : (T = null, I = t) }, USER_SETTINGS_ACCOUNT_SET_PENDING_PROFILE_EFFECT_ID: function(e) { let { profileEffectId: t } = e; a = t }, USER_SETTINGS_ACCOUNT_SET_PENDING_BANNER: function(e) { let { banner: t } = e; o = t }, USER_SETTINGS_ACCOUNT_SET_PENDING_BIO: function(e) { let { bio: t } = e; l = t }, USER_SETTINGS_ACCOUNT_SET_PENDING_PRONOUNS: function(e) { let { pronouns: t } = e; u = t }, USER_SETTINGS_ACCOUNT_SET_PENDING_ACCENT_COLOR: function(e) { let { color: t } = e; d = t }, USER_SETTINGS_ACCOUNT_SET_PENDING_THEME_COLORS: function(e) { let { themeColors: t } = e; _ = t }, USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR: function(e) { let { avatar: t } = e; E = t }, USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_AVATAR_DECORATION: function(e) { let { avatarDecoration: t } = e; I = t }, USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_PROFILE_EFFECT_ID: function(e) { let { profileEffectId: t } = e; T = t }, USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_BANNER: function(e) { let { banner: t } = e; f = t }, USER_SETTINGS_ACCOUNT_SET_TRY_IT_OUT_THEME_COLORS: function(e) { let { themeColors: t } = e; c = t }, USER_SETTINGS_CLEAR_ERRORS: function() { g = {} }, USER_SETTINGS_RESET_PENDING_ACCOUNT_CHANGES: M, USER_SETTINGS_RESET_PENDING_PROFILE_CHANGES: y, USER_SETTINGS_RESET_ALL_PENDING: D, USER_SETTINGS_RESET_ALL_TRY_IT_OUT: P, USER_SETTINGS_RESET_PENDING_AVATAR_DECORATION: function() { s = void 0 }, LOGOUT: function() { i = void 0 } }) }, 663389: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("594174"), c = n("981631"); let E = c.FormStates.CLOSED, I = null, T = null, f = {}, S = {}, h = {}, A = null, m = null, N = !1, p = !1, O = null, C = null, R = null, g = [], L = null, v = null; function D(e) { var t, n, i, r, s, a; let o = _.default.getCurrentUser(); if (null == o) return M(); T = null !== (t = e.section) && void 0 !== t ? t : T, L = null !== (n = e.section) && void 0 !== n ? n : T, null != e.subsection && null != T && (f[T] = e.subsection), null != e.scrollPosition && null != T && (S[T] = e.scrollPosition), p = !!e.openWithoutBackstack, E = c.FormStates.OPEN, h = {}, m = { ...A = { [c.UserSettingsSections.ACCOUNT]: { userId: o.id, username: o.username, discriminator: o.discriminator, email: o.email, avatar: o.avatar, password: "", newPassword: null, claimed: o.isClaimed() } } }, C = null !== (i = e.onClose) && void 0 !== i ? i : null, R = null !== (r = e.analyticsLocation) && void 0 !== r ? r : null, g = null !== (s = e.analyticsLocations) && void 0 !== s ? s : [], v = null !== (a = e.impressionSource) && void 0 !== a ? a : null } function M() { E = c.FormStates.CLOSED, N = !1, A = null, L = null, m = null, I = null, T = null, f = {}, S = {}, C = null, R = null, g = [], v = null } function y() { E = c.FormStates.OPEN, h = {} } class P extends(a = u.default.Store) { initialize() { this.waitFor(_.default) } hasChanges() { return null != m && null != A && (!!this.isOpen() || O === c.DrawerTabTypes.USER_SETTINGS) && !l().isEqual(m, A) } isOpen() { return N } getPreviousSection() { return I } getSection() { return T } getSubsection() { return null != T ? f[T] : null } getScrollPosition() { return null != T ? S[T] : null } shouldOpenWithoutBackstack() { return p } getProps() { return { submitting: E === c.FormStates.SUBMITTING, section: T, subsection: null != T ? f[T] : null, scrollPosition: null != T ? S[T] : null, settings: m, errors: h, hasChanges: this.hasChanges(), openWithoutBackstack: p, analyticsLocation: R, analyticsLocations: g, initialSection: L, impressionSource: v } } get onClose() { return C } } s = "UserSettingsModalStore", (r = "displayName") in(i = P) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new P(d.default, { USER_SETTINGS_MODAL_OPEN: function(e) { N = !0, D(e) }, USER_SETTINGS_MODAL_INIT: D, USER_SETTINGS_MODAL_CLOSE: M, LOGOUT: M, USER_SETTINGS_MODAL_SUBMIT: function() { E = c.FormStates.SUBMITTING }, USER_SETTINGS_MODAL_SUBMIT_FAILURE: function(e) { var t; if (E !== c.FormStates.SUBMITTING) return !1; E = c.FormStates.OPEN, T = c.UserSettingsSections.ACCOUNT, h = null !== (t = e.errors) && void 0 !== t ? t : {} }, USER_SETTINGS_MODAL_SET_SECTION: function(e) { var t; I = T, T = e.section, R = null, g = null !== (t = e.analyticsLocations) && void 0 !== t ? t : [], null != e.subsection && (f[T] = e.subsection) }, USER_SETTINGS_MODAL_CLEAR_SUBSECTION: function(e) { let { forSection: t } = e; null != t ? delete f[t] : null != T && delete f[T] }, USER_SETTINGS_MODAL_CLEAR_SCROLL_POSITION: function(e) { let { forSection: t } = e; null != t ? delete S[t] : null != T && delete S[T] }, USER_SETTINGS_MODAL_UPDATE_ACCOUNT: function(e) { let { settings: t } = e; null == m && (m = {}); let n = m[c.UserSettingsSections.ACCOUNT]; m[c.UserSettingsSections.ACCOUNT] = { ...n, ...t } }, USER_SETTINGS_MODAL_SUBMIT_COMPLETE: y, USER_SETTINGS_MODAL_RESET: function() { let e = _.default.getCurrentUser(); y(), null != e && (m = { ...A = { [c.UserSettingsSections.ACCOUNT]: { userId: e.id, username: e.username, discriminator: e.discriminator, email: e.email, avatar: e.avatar, password: "", newPassword: null, claimed: e.isClaimed() } } }) }, DRAWER_SELECT_TAB: function(e) { return O = e.tab, null == T && O === c.DrawerTabTypes.USER_SETTINGS && D({ type: "USER_SETTINGS_MODAL_INIT", section: null, subsection: null, scrollPosition: null, openWithoutBackstack: !1 }) } }) }, 594174: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ASSISTANT_WUMPUS_VOICE_USER: function() { return p }, mergeUser: function() { return L }, transformUser: function() { return R }, users: function() { return m } }), n("47120"), n("789020"), n("724458"), n("51350"), n("653041"); var i = n("348327"), r = n.n(i), s = n("392711"), a = n("864106"), o = n("900489"), l = n("502087"), u = n("911955"), d = n("168232"), _ = n("598077"), c = n("630388"), E = n("823379"), I = n("314897"), T = n("412788"), f = n("981631"), S = n("308083"), h = n("474936"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let m = {}, N = 0, p = "47835198259242069"; function O(e, t, n) { let i = e; i = null == n ? e.removeGuildAvatarHash(t) : e.addGuildAvatarHash(t, n), m[e.id] = i; let r = e !== i; return r && N++, r } function C(e, t) { return !r()(e.clan, t.clan) && (null == e.clan || null != t.clan) && (e.clan = (0, S.ensureUserClanData)(t.clan), m[e.id] = e, !0) } function R(e) { let t = e.mfa_enabled; null != t && (e.mfaEnabled = t, delete e.mfa_enabled); let n = (0, d.getPremiumTypeFromRawValue)(e.premium_type); void 0 !== n && (e.premiumType = n, delete e.premium_type); let i = e.nsfw_allowed; null != i && (e.nsfwAllowed = i, delete e.nsfw_allowed); let r = e.public_flags; null != r && (e.publicFlags = r, delete e.public_flags); let s = e.purchased_flags; void 0 !== s && (e.purchasedFlags = s, delete e.purchased_flags); let o = e.premium_usage_flags; void 0 !== o && (e.premiumUsageFlags = o, delete e.premium_usage_flags), null === e.banner_color && delete e.banner_color; let l = e.avatar_decoration_data; void 0 !== l && (e.avatarDecorationData = (0, a.parseAvatarDecorationData)(l), delete e.avatar_decoration_data); let u = e.global_name; void 0 !== u && (e.globalName = u, delete e.global_name); let _ = e.clan; return void 0 !== _ && (e.clan = (0, S.ensureUserClanData)(_)), e } function g(e) { return e.id !== I.default.getId() } function L(e) { let t, n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], i = m[e.id], s = void 0 !== e.id && e.id === I.default.getId(); if (null == i) void 0 !== (t = (i = new _.default(e)).premiumType) && s && (i.premiumType = v((0, d.isStaffEnv)(i), i.premiumType)); else if (n) { var a; let n = R(e); void 0 !== (t = null !== (a = n.premium_type) && void 0 !== a ? a : n.premiumType) && s && (0, d.isStaffEnvRawData)(n) && (n = function(e) { var t; let n = null !== (t = e.premium_type) && void 0 !== t ? t : e.premiumType, i = v((0, d.isStaffEnvRawData)(e), n); return void 0 !== e.premiumType ? e.premiumType = i : void 0 !== e.premium_type && (e.premium_type = i), e }(n)), n = function(e, t) { switch (!0) { case null == e.clan && null == t.clan: break; case null != e.clan && null == t.clan: case r()(e.clan, t.clan): t.clan = e.clan; break; default: t.clan = (0, S.ensureUserClanData)(t.clan) } return t }(i, n), i = i.merge(n) }(0, d.validatePremiumType)((0, d.isStaffEnv)(i), t, i.premiumType); let o = m[e.id] !== i; return m[e.id] = i, o && N++, o } function v(e, t) { if (!e) return t; let n = l.default.getPremiumTypeOverride(), i = l.default.getPremiumTypeActual(); return n === h.UNSELECTED_PREMIUM_TYPE_OVERRIDE ? i : n } function D(e, t) { var n, i, r, s, a; if (null != e.author && "SENDING" !== e.state && g(e.author) && L(e.author, t), null === (n = e.mentions) || void 0 === n || n.forEach(e => { g(e) && L(e, t) }), (null === (i = e.interaction) || void 0 === i ? void 0 : i.user) != null && g(null === (r = e.interaction) || void 0 === r ? void 0 : r.user) && L(e.interaction.user, t), null === (s = e.attachments) || void 0 === s || s.forEach(e => { var n; null === (n = e.clip_participants) || void 0 === n || n.forEach(e => { g(e) && L(e, t) }) }), (null === (a = e.resolved) || void 0 === a ? void 0 : a.users) != null) for (let n in e.resolved.users) { let i = e.resolved.users[n]; g(i) && L(i, t) } } function M(e) { null != e.application.bot && L(e.application.bot) } function y(e) { let { user: t, users: n, guilds: i } = e; delete t.premium, delete t.banner_color, L(t), n.forEach(e => { L(e) }), i.forEach(e => { e.members.forEach(t => { let n = m[t.user.id]; null != n && (O(n, e.id, t.avatar), C(n, t.user)) }) }), null != m[I.default.getId()] && (m[p] = new _.default({ id: p, username: "Wumpus", discriminator: "0", globalName: "Wumpus", avatar: "c1f86b313385cb97985f1b118851c28c" })) } function P(e) { let { guilds: t, lazyPrivateChannels: n } = e; t.forEach(e => { e.members.forEach(t => { let n = m[t.user.id]; null != n && (O(n, e.id, t.avatar), C(n, t.user)) }) }), null == n || n.forEach(e => { var t; null === (t = e.rawRecipients) || void 0 === t || t.forEach(e => { L(e) }) }) } function U(e) { return !("incomplete" in e) } function b(e) { if (null != e.users) for (let t of e.users) !(t.id in m && U(t)) && (m[t.id] = new _.default(t)) } function G(e) { let { user: t } = e; t.id !== I.default.getId() && L(t) } function w(e) { let { user: t } = e; L(t) } function k(e) { let { user: t } = e; L(t) } function B(e) { let { messages: t } = e; return t.forEach(e => D(e, !0)), !1 } function V(e) { let { mostRecentMessages: t } = e; return null == t || t.forEach(e => D(e, !1)), !1 } function x(e) { let { messages: t } = e; return t.forEach(e => B({ messages: e })), !1 } function F(e) { let { data: t } = e; (0, o.getMessagesFromGuildFeedFetch)(t).forEach(e => D(e, !0)) } function H(e) { let { firstMessages: t, owners: n } = e; null != t && t.forEach(e => D(e, !0)), null != n && n.forEach(e => L(e.user, !0)) } function Y(e) { let { threads: t } = e; Object.values(t).forEach(e => { let { first_message: t, most_recent_message: n, owner: i } = e; null != t && D(t, !0), null != n && D(n, !0), null != i && null != i.user && L(i.user, !0) }) } function j(e) { let { supplementalData: t } = e; Object.values(t).forEach(e => { let { message_preview: t } = e; null != t && D(t, !0) }) } function W(e) { let { guildScheduledEventUsers: t, guildId: n } = e; t.forEach(e => { let { user: t, member: i } = e; if (null == t) return; L(t); let r = m[t.id], s = null == i ? void 0 : i.avatar; null != r && null != s && O(r, n, s) }) } function K(e) { let { items: t } = e; t.forEach(e => { null != e.other_user && L(e.other_user) }) } function z(e) { let { item: t } = e; null != t.other_user && L(t.other_user) } function Z(e) { let { message: t } = e; if (D(t, !0), null != t.flags && c.hasFlag(t.flags, f.MessageFlags.URGENT)) { let e = m[I.default.getId()]; return null != e && (m[I.default.getId()] = e.set("flags", c.setFlag(e.flags, f.UserFlags.HAS_UNREAD_URGENT_MESSAGES, !0)), !0) } return !1 } function X(e) { let { channel: { rawRecipients: t } } = e; return null != t && t.forEach(e => L(e)), !1 } function Q(e) { let { channels: t } = e; for (let { rawRecipients: e } of t) null != e && e.forEach(e => L(e)); return !1 } let q = ["username", "avatar", "global_name", "discriminator", "bot", "clan"]; function J(e) { let { updates: t } = e; return t.map(e => { let t = m[e.user.id]; if (null == t) return !1; let n = q.reduce((n, i) => { if (e.user.hasOwnProperty(i)) { let r = t.set((0, s.camelCase)(i), e.user[i]); n = n || r !== t, t = r } return n }, !1); return !!n && (m[t.id] = t, n) }).some(e => e) } function $(e) { let { bans: t } = e; t.forEach(e => L(e.user)) } function ee(e) { let { bans: t } = e; t.forEach(e => L(e.user)) } function et(e) { return L(e.user) } function en(e) { return !!e.isMember && L(e.user) } function ei(e) { let t = L(e.user), n = m[e.user.id]; if (null == n) return t; let { avatar: i, guildId: r } = e; return O(n, r, i) || t } function er(e) { let { ops: t } = e; for (let e of t) if ("INSERT" === e.op || "UPDATE" === e.op) { var n; let t = null === (n = e.item.member) || void 0 === n ? void 0 : n.user; if (null == t) continue; let i = m[t.id]; if (null == i) continue; C(i, t) } return !1 } function es(e) { let { chunks: t } = e, n = !1; for (let e of t) n = e.members.reduce((t, n) => { let i = L(n.user), r = m[n.user.id]; if (null == r) return i || t; let { avatar: s } = n; return O(r, e.guildId, s) || i || t }, !1) || n; return n } function ea(e) { let t = !1; for (let n of e.members) L(n.user) && (t = !0), null != m[n.user.id] && O(m[n.user.id], e.guildId, n.avatar) && (t = !0); return t } function eo(e) { var t; let n = !1; for (let i of null !== (t = e.users) && void 0 !== t ? t : []) !Object.hasOwn(m, i.id) && (n = L(i) || n); return n } function el(e) { let { members: t } = e, n = !1; return t.forEach(e => { null != e.member && L(e.member.user) && (n = !0), null != e.presence && L(e.presence.user) && (n = !0) }), n } function eu(e) { let { addedMembers: t } = e, n = !1; return null == t || t.forEach(e => { null != e.member && L(e.member.user) && (n = !0), null != e.presence && L(e.presence.user) && (n = !0) }), n } function ed(e) { let { guild: t } = e; t.members.forEach(e => { let { user: { id: n, username: i, avatar: r, discriminator: s, bot: a }, avatar: o } = e; n !== I.default.getId() && L({ id: n, username: i, avatar: r, discriminator: s, bot: a }); let l = m[n]; null != l && O(l, t.id, o) }) } function e_(e) { return L(e.relationship.user) } function ec(e) { let { relationships: t } = e; return t.reduce((e, t) => L(t.user) || e, !1) } function eE(e) { return L(e.suggestion.suggested_user) } function eI(e) { let { suggestions: t } = e; return t.reduce((e, t) => L(t.suggested_user) || e, !1) } function eT(e) { let { users: t } = e; t.forEach(e => { null == m[e.id] && (m[e.id] = new _.default(e)) }) } function ef(e) { let { giftCode: t } = e; return null != t.user && L(t.user) } function eS(e) { let { appliedBoosts: t } = e; t.forEach(e => { let { user: t } = e; null != t && L(t) }) } function eh(e) { let { request: t } = e, { user: n, actioned_by_user: i } = t, r = !1; return null != n && (r = r || L(n)), null != i && (r = r || L(i)), r } function eA(e) { let { integrations: t } = e; t.forEach(e => M((0, u.createPrivateChannelIntegration)(e))) } function em(e) { let { integration: t } = e; M((0, u.createPrivateChannelIntegration)(t)) } function eN(e) { let { integration: t } = e; M((0, u.createPrivateChannelIntegration)(t)) } function ep(e) { let { users: t, familyCenterTeenActivity: n } = e, { users: i } = n; return [...t, ...i].reduce((e, t) => L(t) || e, !1) } function eO(e) { let { users: t } = e; return t.reduce((e, t) => L(t) || e, !1) } function eC(e) { let { users: t } = e; return t.reduce((e, t) => L(t) || e, !1) } function eR(e) { let { familyCenterTeenActivity: t } = e; if (void 0 === t) return; let { users: n } = t; return n.reduce((e, t) => L(t) || e, !1) } function eg(e) { let { familyCenterTeenActivity: t } = e, { users: n } = t; return n.reduce((e, t) => L(t) || e, !1) } function eL(e) { let { members: t } = e, n = I.default.getId(); return t.reduce((e, t) => t.member.user.id === n ? e : L(t.member.user) || e, !1) } class ev extends T.default { initialize() { this.waitFor(I.default) } takeSnapshot() { let e = this.getCurrentUser(); return { version: ev.LATEST_SNAPSHOT_VERSION, data: { users: [e].filter(E.isNotNullish) } } } handleLoadCache(e) { let t = this.readSnapshot(ev.LATEST_SNAPSHOT_VERSION); if (null != t) for (let e of t.users) m[e.id] = new _.default(e); if (null != e.users) for (let t of e.users) !(t.id in m && U(t)) && (m[t.id] = new _.default(t)); for (let t of [e.privateChannels, e.initialGuildChannels]) for (let e of t) { var n; null === (n = e.rawRecipients) || void 0 === n || n.forEach(e => L(e, !1)) } } getUserStoreVersion() { return N } getUser(e) { if (null != e) return m[e] } getUsers() { return m } forEach(e) { for (let t in m) if (!1 === e(m[t])) break } findByTag(e, t) { for (let n in m) { let i = m[n]; if (null != t && i.username === e && i.discriminator === t) return i; if (null == t && i.username === e && i.isPomelo()) return i } } filter(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = []; for (let t in m) { let i = m[t]; e(i) && n.push(i) } return t && n.sort((e, t) => e.username > t.username ? 1 : e.username < t.username ? -1 : 0), n } getCurrentUser() { return m[I.default.getId()] } constructor() { super({ CONNECTION_OPEN: y, CONNECTION_OPEN_SUPPLEMENTAL: P, UPDATE_CLIENT_PREMIUM_TYPE: k, OVERLAY_INITIALIZE: b, CACHE_LOADED: e => this.handleLoadCache(e), USER_UPDATE: G, CURRENT_USER_UPDATE: w, PRESENCE_UPDATES: J, SEARCH_FINISH: x, MOD_VIEW_SEARCH_FINISH: x, LOAD_MESSAGES_SUCCESS: B, LOAD_MESSAGES_AROUND_SUCCESS: B, LOAD_PINNED_MESSAGES_SUCCESS: B, LOAD_RECENT_MENTIONS_SUCCESS: B, THREAD_LIST_SYNC: V, MESSAGE_CREATE: Z, MESSAGE_UPDATE: Z, GUILD_SETTINGS_LOADED_BANS: $, GUILD_SETTINGS_LOADED_BANS_BATCH: ee, GUILD_CREATE: ed, GUILD_BAN_ADD: et, GUILD_BAN_REMOVE: et, CHANNEL_RECIPIENT_ADD: en, CHANNEL_RECIPIENT_REMOVE: en, GUILD_JOIN_REQUEST_CREATE: eh, GUILD_JOIN_REQUEST_UPDATE: eh, GUILD_MEMBER_ADD: ei, GUILD_MEMBER_UPDATE: ei, GUILD_MEMBERS_CHUNK_BATCH: es, GUILD_MEMBER_LIST_UPDATE: er, THREAD_MEMBER_LIST_UPDATE: el, THREAD_MEMBERS_UPDATE: eu, CHANNEL_CREATE: X, CHANNEL_UPDATES: Q, RELATIONSHIP_ADD: e_, LOAD_RELATIONSHIPS_SUCCESS: ec, FRIEND_SUGGESTION_CREATE: eE, LOAD_FRIEND_SUGGESTIONS_SUCCESS: eI, AUDIT_LOG_FETCH_SUCCESS: eT, AUDIT_LOG_FETCH_NEXT_PAGE_SUCCESS: eT, GIFT_CODE_RESOLVE_SUCCESS: ef, GUILD_APPLIED_BOOSTS_FETCH_SUCCESS: eS, GUILD_FEED_FETCH_SUCCESS: F, LOAD_THREADS_SUCCESS: H, LOAD_ARCHIVED_THREADS_SUCCESS: H, LOAD_FORUM_POSTS: Y, GUILD_SCHEDULED_EVENT_USERS_FETCH_SUCCESS: W, LOAD_NOTIFICATION_CENTER_ITEMS_SUCCESS: K, NOTIFICATION_CENTER_ITEM_CREATE: z, LOAD_MESSAGE_REQUESTS_SUPPLEMENTAL_DATA_SUCCESS: j, PASSIVE_UPDATE_V2: ea, LOCAL_MESSAGES_LOADED: eo, FETCH_PRIVATE_CHANNEL_INTEGRATIONS_SUCCESS: eA, PRIVATE_CHANNEL_INTEGRATION_CREATE: em, PRIVATE_CHANNEL_INTEGRATION_UPDATE: eN, FAMILY_CENTER_INITIAL_LOAD: ep, FAMILY_CENTER_LINKED_USERS_FETCH_SUCCESS: eO, FAMILY_CENTER_TEEN_ACTIVITY_FETCH_SUCCESS: eR, FAMILY_CENTER_TEEN_ACTIVITY_MORE_FETCH_SUCCESS: eg, FAMILY_CENTER_REQUEST_LINK_SUCCESS: eC, MEMBER_SAFETY_GUILD_MEMBER_SEARCH_SUCCESS: eL }) } } A(ev, "displayName", "UserStore"), A(ev, "LATEST_SNAPSHOT_VERSION", 1), t.default = new ev }, 631768: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("981631"); let d = u.VideoQualityMode.AUTO; class _ extends(a = o.default.Store) { get mode() { return d } } s = "VideoQualityModeStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { SET_CHANNEL_VIDEO_QUALITY_MODE: function(e) { d = e.mode } }) }, 248402: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"); var s, a, o, l, u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"), E = n("358221"), I = n("569545"), T = n("199902"), f = n("314897"), S = n("131951"), h = n("606304"), A = n("354459"); function m() { let e, t = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; if (null == i) e = null; else { var n, s, a, o, l; e = E.default.getSelectedParticipantId(i); let t = T.default.getLastActiveStream(), u = null != e ? E.default.getParticipant(i, e) : null; if (((null == u ? void 0 : u.type) === A.ParticipantTypes.ACTIVITY || (null == u ? void 0 : u.type) === A.ParticipantTypes.USER && !(null === (n = u.voiceState) || void 0 === n ? void 0 : n.selfVideo)) && (e = null), null != t && null == e && (e = null === (s = E.default.getParticipant(i, (0, I.encodeStreamKey)(t))) || void 0 === s ? void 0 : s.id), null == e) { let t = f.default.getId(), n = d()(E.default.getVideoParticipants(i)).filter(e => e.type === A.ParticipantTypes.USER && e.user.id !== t && !S.default.isLocalVideoDisabled(e.user.id)), s = Date.now(); null == (e = null === (a = n.map(e => [e.user.id, h.default.getSpeakingDuration(e.user.id, s)]).filter(e => { let [t, n] = e; return 0 !== n }).maxBy(e => { let [t, n] = e; return -n })) || void 0 === a ? void 0 : a[0]) && (e = null != r ? r : null === (l = n.first()) || void 0 === l ? void 0 : null === (o = l.user) || void 0 === o ? void 0 : o.id) } } r !== e && (r = e, t && C.emitChange()) } let N = d().debounce(m, 300); function p() { return N(), !1 } class O extends(s = _.default.Store) { initialize() { this.waitFor(E.default, f.default, h.default, T.default, S.default), this.syncWith([E.default, T.default], p) } getSpeaker(e) { return i !== e && (i = e, m(!1)), null != r ? r : f.default.getId() } } l = "VideoSpeakerStore", (o = "displayName") in(a = O) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l; let C = new O(c.default, { AUDIO_SET_LOCAL_VIDEO_DISABLED: p }); t.default = C }, 33039: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("724458"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("981631"), d = n("65154"); let _ = null, c = null, E = {}; function I(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, i = E[e]; if (null == i) return; let r = i[null != t ? t : u.NULL_STRING_GUILD_ID]; if (null != r) { for (let e of Object.values(d.MediaEngineContextTypes))(n === e || null == n) && delete r[e]; E[e][null != t ? t : u.NULL_STRING_GUILD_ID] = r } } class T extends(i = o.default.Store) { getStreamId(e, t) { var n, i, r; let s = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : d.MediaEngineContextTypes.DEFAULT; return null === (r = E[e]) || void 0 === r ? void 0 : null === (i = r[null != t ? t : u.NULL_STRING_GUILD_ID]) || void 0 === i ? void 0 : null === (n = i[s]) || void 0 === n ? void 0 : n.streamId } getUserStreamData(e, t) { var n, i; let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : d.MediaEngineContextTypes.DEFAULT; return null === (i = E[e]) || void 0 === i ? void 0 : null === (n = i[null != t ? t : u.NULL_STRING_GUILD_ID]) || void 0 === n ? void 0 : n[r] } } a = "VideoStreamStore", (s = "displayName") in(r = T) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new T(l.default, { CONNECTION_OPEN: function(e) { let { user: t, sessionId: n } = e; _ = t.id, c = n }, OVERLAY_INITIALIZE: function(e) { let { user: t, sessionId: n } = e; _ = t.id, c = n }, RTC_CONNECTION_VIDEO: function(e) { let { userId: t, guildId: n, streamId: i, context: r } = e; null != i ? ! function(e, t, n, i) { var r; !(e in E) && (E[e] = {}); let s = null !== (r = E[e][null != t ? t : u.NULL_STRING_GUILD_ID]) && void 0 !== r ? r : {}; E[e][null != t ? t : u.NULL_STRING_GUILD_ID] = { ...s, [i]: { streamId: n } } }(t, n, i, r) : I(t, n, r) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { var n; let { userId: i, sessionId: r, channelId: s, guildId: a } = t; if (null == s && i === _) { if (r !== c) return e; E = {} } else { if (null != s || (null === (n = E[i]) || void 0 === n ? void 0 : n[null != a ? a : u.NULL_STRING_GUILD_ID]) == null) return e; I(i, a) } return !0 }, !1) } }) }, 583523: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("570140"), r = n("147913"), s = n("314897"), a = n("967368"), o = n("592125"), l = n("944486"), u = n("631768"), d = n("981631"); function _() { ! function() { let e = l.default.getVoiceChannelId(), t = a.default.bitrate; if (null == e) return; let n = o.default.getChannel(e); if (null != n) t !== n.bitrate && i.default.dispatch({ type: "SET_CHANNEL_BITRATE", bitrate: n.bitrate }) }(), ! function() { var e; let t = l.default.getVoiceChannelId(), n = u.default.mode; if (null == t) return; let r = o.default.getChannel(t); if (null == r) return; let s = null !== (e = r.videoQualityMode) && void 0 !== e ? e : d.VideoQualityMode.AUTO; n !== s && i.default.dispatch({ type: "SET_CHANNEL_VIDEO_QUALITY_MODE", mode: s }) }() } function c(e) { let { channels: t } = e; for (let e of t) l.default.getVoiceChannelId() === e.id && _() } function E(e) { let { voiceStates: t } = e; t.forEach(e => { s.default.getSessionId() === e.sessionId && _() }) } class I extends r.default { constructor(...e) { var t, n, i; super(...e), t = this, n = "actions", i = { CHANNEL_UPDATES: c, VOICE_STATE_UPDATES: E }, n in t ? Object.defineProperty(t, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = i } } t.default = new I }, 979651: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"), n("724458"); var s, a, o, l, u = n("392711"), d = n.n(u), _ = n("442837"), c = n("570140"), E = n("189786"), I = n("981631"), T = n("354459"); let f = 0, S = 0, h = {}, A = new Set, m = new Map, N = {}, p = {}, O = {}, C = {}; function R(e, t) { return "".concat(e, ":").concat(t) } function g(e, t) { let n = e[t]; return null == n && (n = {}, e[t] = n), n } function L(e) { var t; let n = null !== (t = h[I.ME]) && void 0 !== t ? t : {}, i = {}; d().each(n, (t, n) => { t.channelId !== e && (i[n] = t) }), h[I.ME] = i } function v(e) { var t; return null !== (t = m.get(e)) && void 0 !== t ? t : new Set } function D(e, t, n) { var i, r, s, a; let o = g(h, null != e ? e : I.ME), l = o[t], u = n(l); if (l === u) return [!1, u, l]; if (null != l) { ; let n; delete o[t], null != l.channelId && (delete g(N, l.channelId)[t], delete g(p, l.channelId)[t]), null != l.sessionId && delete g(O, t)[l.sessionId]; i = null != e ? e : I.ME, r = t, !(n = v(i)).has(r) || ((n = new Set(n)).delete(r), 0 === n.size ? m.delete(i) : m.set(i, n)) } if (null != u) { if (o[t] = u, null != u.channelId && (g(N, u.channelId)[t] = u, u.selfVideo)) { ; let n; g(p, u.channelId)[t] = u; s = null != e ? e : I.ME, a = t, (n = v(s)).has(a) || ((n = new Set(n)).add(a), m.set(s, n)) } null != u.sessionId && (g(O, t)[u.sessionId] = u) } return [!0, u, l] } function M(e, t) { return D(e, t.userId, e => { if (null == t.channelId) return null; { let n = { channelId: t.channelId, deaf: t.deaf, mute: t.mute, requestToSpeakTimestamp: t.requestToSpeakTimestamp, selfDeaf: t.selfDeaf, selfMute: t.selfMute, selfStream: t.selfStream, selfVideo: t.selfVideo, sessionId: t.sessionId, suppress: t.suppress, userId: t.userId }; return null != e ? e.merge(n) : new E.default(n) } }) } function y(e) { let { guild: t } = e; d().forEach(h[t.id], e => { D(t.id, e.userId, () => null) }), delete h[t.id] } class P extends(s = _.default.Store) { getAllVoiceStates() { return h } getVoiceStateVersion() { return S } getVoiceStates(e) { return g(h, null != e ? e : I.ME) } getVoiceStatesForChannel(e) { return g(N, e) } getVideoVoiceStatesForChannel(e) { return g(p, e) } getVoiceState(e, t) { return this.getVoiceStates(e)[t] } getVoiceStateForChannel(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i; return null === (t = g(N, e)) || void 0 === t ? void 0 : t[n] } getVoiceStateForUser(e) { return Object.values(g(O, e))[0] } getVoiceStateForSession(e, t) { var n; return null != t ? null === (n = g(O, e)) || void 0 === n ? void 0 : n[t] : null } getUserVoiceChannelId(e, t) { var n; return null === (n = this.getVoiceState(e, t)) || void 0 === n ? void 0 : n.channelId } getCurrentClientVoiceChannelId(e) { let t = this.getVoiceState(e, i); return null != t && null != r && t.sessionId === r ? t.channelId : null } getUsersWithVideo(e) { var t; return null !== (t = m.get(e)) && void 0 !== t ? t : A } isCurrentClientInVoiceChannel() { var e; return null != r && (null === (e = O[i]) || void 0 === e ? void 0 : e[r]) != null } isInChannel(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i; if (null == e) return !1; let n = this.getVoiceStateForChannel(e, t); return null != n && (t !== i || null != r && n.sessionId === r) } hasVideo(e) { return Object.values(g(p, e)).length > 0 } getVoicePlatformForChannel(e, t) { var n, s; let a = null != r && (null === (s = O[i]) || void 0 === s ? void 0 : null === (n = s[r]) || void 0 === n ? void 0 : n.channelId); return t === i && e === a ? T.VoicePlatforms.DESKTOP : C[R(t, e)] } get userHasBeenMovedVersion() { return f } } l = "VoiceStateStore", (o = "displayName") in(a = P) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l, t.default = new P(c.default, { CONNECTION_OPEN: function(e) { let { user: t, sessionId: n } = e, s = null != i && i !== t.id; return s && (h = {}, N = {}, O = {}, p = {}, m.clear()), i = t.id, r = n, s }, CONNECTION_OPEN_SUPPLEMENTAL: function() { h = {}, N = {}, O = {}, p = {}, m.clear() }, OVERLAY_INITIALIZE: function(e) { let { voiceStates: t, user: n, sessionId: s } = e; for (let [e, n] of(h = {}, N = {}, O = {}, p = {}, Object.entries(t))) for (let [t, i] of Object.entries(n)) D(e, t, () => new E.default(i)); i = n.id, r = s }, VOICE_CHANNEL_SELECT: function(e) { let { guildId: t, channelId: n } = e, [r] = D(t, i, e => null == e ? void 0 : e.set("channelId", n)); return r }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { let [n, i, s] = M(t.guildId, t); return n ? (t.sessionId === r && null != i && null != s && s.channelId !== i.channelId && (f += 1), S++, !0) : e }, !1) }, GUILD_DELETE: y, GUILD_CREATE: y, CHANNEL_DELETE: function(e) { let { channel: t } = e; L(t.id) }, CALL_DELETE: function(e) { let { channelId: t } = e; L(t) }, PASSIVE_UPDATE_V2: function(e) { let t = !1; for (let n of e.voiceStates) { let [i] = M(e.guildId, n); t = t || i } for (let n of e.removedVoiceStateUsers) D(e.guildId, n, () => null), t = !0; return t && S++, t }, RTC_CONNECTION_PLATFORM: function(e) { let { userId: t, channelId: n, platform: i } = e; C[R(t, n)] = i } }) }, 351402: function(e, t, n) { "use strict"; let i, r, s, a; n.r(t); var o, l, u, d, _ = n("442837"), c = n("570140"), E = n("542974"), I = n("981631"); let T = !1, f = !1, S = !1, h = !1, A = !1, m = null, N = null, p = !1, O = !1; function C() { T = !1 } function R() { i = void 0 } function g() { h = !1 } function L() { A = !0 } function v() { A = !1 } class D extends(d = _.default.Store) { get isBusy() { return T || f || A || S } get isUpdatingPaymentSource() { return f } get isRemovingPaymentSource() { return S } get isSyncing() { return this.isPaymentSourceFetching || this.isSubscriptionFetching } get isSubscriptionFetching() { return h } get isPaymentSourceFetching() { return null != i } get editSourceError() { return m } get removeSourceError() { return N } get ipCountryCodeLoaded() { return void 0 !== r } get ipCountryCode() { return r } get ipCountryCodeRequest() { return s } get ipCountryCodeWithFallback() { return null != r ? r : I.FallbackCurrencyCountry } get ipCountryCodeHasError() { return p } get paymentSourcesFetchRequest() { return i } get localizedPricingPromo() { return a } get localizedPricingPromoHasError() { return O } get isLocalizedPromoEnabled() { return null != a } } u = "BillingInfoStore", (l = "displayName") in(o = D) ? Object.defineProperty(o, l, { value: u, enumerable: !0, configurable: !0, writable: !0 }) : o[l] = u, t.default = new D(c.default, { BILLING_PAYMENT_SOURCE_CREATE_START: function() { T = !0 }, BILLING_PAYMENT_SOURCE_CREATE_SUCCESS: C, BILLING_PAYMENT_SOURCE_CREATE_FAIL: C, STRIPE_TOKEN_FAILURE: C, BILLING_PAYMENT_SOURCE_REMOVE_START: function() { S = !0 }, BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS: function() { S = !1 }, BILLING_PAYMENT_SOURCE_REMOVE_FAIL: function(e) { let { error: t } = e; S = !1, N = t }, BILLING_PAYMENT_SOURCE_REMOVE_CLEAR_ERROR: function() { N = null }, BILLING_PAYMENT_SOURCE_UPDATE_START: function() { f = !0 }, BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS: function() { f = !1 }, BILLING_PAYMENT_SOURCE_UPDATE_FAIL: function(e) { let { error: t } = e; f = !1, m = t }, BILLING_PAYMENT_SOURCE_UPDATE_CLEAR_ERROR: function() { m = null }, BILLING_PAYMENT_SOURCES_FETCH_START: function(e) { let { request: t } = e; i = t }, BILLING_PAYMENT_SOURCES_FETCH_SUCCESS: R, BILLING_PAYMENT_SOURCES_FETCH_FAIL: R, BILLING_SUBSCRIPTION_FETCH_START: function() { h = !0 }, BILLING_SUBSCRIPTION_FETCH_SUCCESS: g, BILLING_SUBSCRIPTION_FETCH_FAIL: g, BILLING_SUBSCRIPTION_UPDATE_START: L, BILLING_SUBSCRIPTION_CANCEL_START: L, BILLING_SUBSCRIPTION_UPDATE_SUCCESS: v, BILLING_SUBSCRIPTION_UPDATE_FAIL: v, BILLING_SUBSCRIPTION_CANCEL_FAIL: v, BILLING_SUBSCRIPTION_CANCEL_SUCCESS: v, BILLING_IP_COUNTRY_CODE_FETCH_START: function(e) { let { request: t } = e; s = t }, BILLING_SET_IP_COUNTRY_CODE: function(e) { let { countryCode: t } = e; r = t }, BILLING_IP_COUNTRY_CODE_FAILURE: function() { r = null, p = !0 }, BILLING_SET_LOCALIZED_PRICING_PROMO: function(e) { let { localizedPricingPromo: t } = e; a = E.LocalizedPricingPromoRecord.createFromServer(t) }, BILLING_LOCALIZED_PRICING_PROMO_FAILURE: function() { a = null, O = !0 }, LOGOUT: function() { i = void 0, s = void 0, r = void 0, p = !1, a = null, N = null, m = null }, CONNECTION_OPEN: e => { let { countryCode: t } = e; null != t && (r = t) } }) }, 618541: function(e, t, n) { "use strict"; let i, r; n.r(t), n("411104"); var s, a, o, l, u = n("442837"), d = n("544891"), _ = n("570140"), c = n("358085"), E = n("981631"); let I = null, T = null, f = null; (0, c.isDesktop)() && (window.popupBridge = { getReturnUrlPrefix: () => { if (null == i) throw Error("popupBridgeState is unset"); return (0, d.getAPIBaseURL)() + E.Endpoints.BILLING_POPUP_BRIDGE_CALLBACK_REDIRECT_PREFIX(E.PaymentGateways.BRAINTREE, i) }, open: e => { r = e, window.open(e), h.emitChange() } }); class S extends(s = u.default.Store) { getClient() { return I } getPayPalClient() { return T } getVenmoClient() { return f } getLastURL() { return r } } l = "BraintreeStore", (o = "displayName") in(a = S) ? Object.defineProperty(a, o, { value: l, enumerable: !0, configurable: !0, writable: !0 }) : a[o] = l; let h = new S(_.default, { BRAINTREE_CREATE_CLIENT_SUCCESS: function(e) { let { client: t } = e; I = t }, BRAINTREE_CREATE_PAYPAL_CLIENT_SUCCESS: function(e) { let { paypalClient: t } = e; T = t }, BILLING_POPUP_BRIDGE_CALLBACK: function(e) { let { paymentSourceType: t, state: n, path: r, query: s } = e; if (t !== E.PaymentSourceTypes.PAYPAL || n !== i) return; let a = window.popupBridge.onComplete; "function" == typeof a && a(null, { path: r, queryItems: s }) }, BILLING_POPUP_BRIDGE_STATE_UPDATE: function(e) { let { paymentSourceType: t, state: n } = e; t === E.PaymentSourceTypes.PAYPAL && (i = n) }, BRAINTREE_TEARDOWN_PAYPAL_CLIENT: function() { T = null }, BRAINTREE_CREATE_VENMO_CLIENT_SUCCESS: function(e) { let { venmoClient: t } = e; f = t }, BRAINTREE_TEARDOWN_VENMO_CLIENT: function() { f = null } }); t.default = h }, 314884: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("78839"); let d = !1, _ = {}; function c(e) { let { guildBoostSlot: t } = e; _ = { ..._, [t.id]: t } } function E() { let e = {}; for (let t of Object.values(_)) e[t.id] = t, t.subscription = u.default.getSubscriptionById(t.subscriptionId); _ = e } class I extends(i = o.default.Store) { initialize() { this.syncWith([u.default], E) } get hasFetched() { return d } get boostSlots() { return _ } getGuildBoostSlot(e) { return _[e] } } a = "GuildBoostSlotStore", (s = "displayName") in(r = I) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new I(l.default, { GUILD_BOOST_SLOTS_FETCH_SUCCESS: function(e) { let { guildBoostSlots: t } = e; _ = {}, t.forEach(e => { _[e.id] = e }), d = !0 }, GUILD_BOOST_SLOT_UPDATE_SUCCESS: c, GUILD_BOOST_SLOT_CREATE: c, GUILD_BOOST_SLOT_UPDATE: c, LOGOUT: function() { _ = {}, d = !1 } }) }, 853872: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("46141"); let d = {}, _ = null, c = !1; function E(e) { let { paymentSource: t } = e; d = { ...d, [t.id]: t }, (t.isDefault || 1 === Object.keys(d).length) && (_ = t.id) } class I extends(i = o.default.Store) { get paymentSources() { return d } get paymentSourceIds() { return Object.keys(d) } get defaultPaymentSourceId() { return _ } get defaultPaymentSource() { return null != _ ? d[_] : null } get hasFetchedPaymentSources() { return c } getDefaultBillingCountryCode() { let e = this.defaultPaymentSource; return null == e ? null : e.paymentMethodCountry } getPaymentSource(e) { return d[e] } } a = "PaymentSourceStore", (s = "displayName") in(r = I) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new I(l.default, { BILLING_PAYMENT_SOURCE_CREATE_SUCCESS: E, BILLING_PAYMENT_SOURCE_UPDATE_SUCCESS: E, BILLING_PAYMENT_SOURCES_FETCH_SUCCESS: function(e) { let { paymentSources: t } = e; for (let e of (d = {}, _ = null, t)) d[e.id] = u.default.createFromServer(e), e.default && (_ = e.id); null == _ && t.length > 0 && (_ = t[0].id), c = !0 }, BILLING_PAYMENT_SOURCE_REMOVE_SUCCESS: function(e) { let { id: t } = e; if (d = { ...d }, delete d[t], _ === t) { let e = Object.keys(d); _ = 0 === e.length ? null : e[0] } }, LOGOUT: function() { d = {}, _ = null, c = !1 } }) }, 509545: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("301766"), d = n("251625"), _ = n("709054"), c = n("981631"), E = n("474936"); let I = {}, T = {}, f = new Set, S = new Set, h = {}, A = {}; function m(e) { let t = e.skuId; I[e.id] = e; let n = e.prices[c.PriceSetAssignmentPurchaseTypes.DEFAULT]; if (null != n) { var i; let t = new Set(Object.keys(n.paymentSourcePrices)); h[e.id] = t; let r = Array.from(null !== (i = A[e.skuId]) && void 0 !== i ? i : new Set); A[e.skuId] = new Set([...r, ...Array.from(t)]) } let r = T[t]; null != r ? r.add(e.id) : T[t] = new Set([e.id]) } function N() { [(0, E.SubscriptionPlanInfo)[E.SubscriptionPlans.NONE_MONTH], (0, E.SubscriptionPlanInfo)[E.SubscriptionPlans.NONE_YEAR], (0, E.SubscriptionPlanInfo)[E.SubscriptionPlans.NONE_3_MONTH], (0, E.SubscriptionPlanInfo)[E.SubscriptionPlans.NONE_6_MONTH]].forEach(e => m(u.default.createFromServer({ id: e.id, name: e.name, interval: e.interval, interval_count: e.intervalCount, tax_inclusive: !0, sku_id: e.skuId, currency: c.CurrencyCodes.USD, price: 0, price_tier: 0, discount_price: null }))) } function p(e) { m(u.default.createFromServer(e)) } N(); function O() { (0, d.clearObject)(I), (0, d.clearObject)(T), f.clear(), S.clear(), (0, d.clearObject)(h), (0, d.clearObject)(A), N() } let C = [E.SubscriptionIntervalTypes.DAY, E.SubscriptionIntervalTypes.MONTH, E.SubscriptionIntervalTypes.YEAR]; class R extends(i = o.default.Store) { getPlanIdsForSkus(e) { let t = []; for (let i of e) { var n; let e = Array.from(null !== (n = T[i]) && void 0 !== n ? n : new Set); e.sort((e, t) => { let n = I[e], i = I[t]; return C.indexOf(n.interval) - C.indexOf(i.interval) || n.intervalCount - i.intervalCount }), t.push(...e) } return t } getFetchedSKUIDs() { return _.default.keys(T) } getForSKU(e) { var t; return Array.from(null !== (t = T[e]) && void 0 !== t ? t : []).map(e => I[e]) } getForSkuAndInterval(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1; return this.getForSKU(e).find(e => e.interval === t && e.intervalCount === n) } get(e) { return I[e] } isFetchingForSKU(e) { return f.has(e) } isFetchingForSKUs(e) { return e.some(e => this.isFetchingForSKU(e)) } isLoadedForSKU(e) { return !!S.has(e) || !f.has(e) && null != T[e] } isLoadedForSKUs(e) { return e.every(e => this.isLoadedForSKU(e)) } isFetchingForPremiumSKUs() { return E.ACTIVE_PREMIUM_SKUS.map(e => this.isFetchingForSKU(e)).includes(!0) } isLoadedForPremiumSKUs() { return E.ACTIVE_PREMIUM_SKUS.every(e => this.isLoadedForSKU(e)) } ignoreSKUFetch(e) { S.add(e) } getPaymentSourcesForPlanId(e) { return h.hasOwnProperty(e) ? h[e] : null } getPaymentSourceIds() { let e = new Set; return Object.values(h).forEach(t => t.forEach(t => e.add(t))), e } hasPaymentSourceForSKUId(e, t) { return E.PremiumSubscriptionSKUs.NONE === t || null != A[t] && A[t].has(e) } hasPaymentSourceForSKUIds(e, t) { return t.every(t => this.hasPaymentSourceForSKUId(e, t)) } } a = "SubscriptionPlanStore", (s = "displayName") in(r = R) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new R(l.default, { SUBSCRIPTION_PLANS_FETCH: function(e) { let { skuId: t } = e; f.add(t) }, SUBSCRIPTION_PLANS_FETCH_SUCCESS: function(e) { let { skuId: t, subscriptionPlans: n } = e; T[t] = new Set, A[t] = new Set, n.forEach(p), f.delete(t), S.delete(t) }, SUBSCRIPTION_PLANS_FETCH_FAILURE: function(e) { let { skuId: t } = e; f.delete(t), S.delete(t) }, SUBSCRIPTION_PLANS_RESET: O, GIFT_CODE_RESOLVE_SUCCESS: function(e) { let { giftCode: t } = e; null != t.subscription_plan && p(t.subscription_plan) }, ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS: function(e) { let { entitlements: t } = e; for (let e of t) null != e.subscription_plan && p(e.subscription_plan) }, LOGOUT: O }) }, 78839: function(e, t, n) { "use strict"; n.r(t), n.d(t, { authenticatedUserFilter: function() { return v } }), n("653041"), n("47120"); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("710845"), d = n("301766"), _ = n("255078"), c = n("314897"), E = n("122289"), I = n("981631"); let T = null, f = null, S = null, h = null, A = null, m = !1, N = !1, p = null, O = !1, C = new u.default("SubscriptionStore"); function R(e) { let { activeSubscriptions: t, record: n } = e, i = t.findIndex(e => e.id === n.id); if (-1 === i) return [n, ...t]; { let e = [...t]; return L(n) && n.status !== I.SubscriptionStatusTypes.ENDED ? e[i] = n : e.splice(i, 1), e } } function g() { T = null, f = null, S = null, h = null, A = null, m = !1, N = !1, p = null, O = !1 } function L(e) { return e.status !== I.SubscriptionStatusTypes.UNPAID } function v(e) { let t = c.default.getId(); return e.userId === t } function D(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2], i = n ? f : T; if (null == i) return null; for (let n in i) { let r = i[n]; if (!v(r)) { if (!N) { let e = c.default.getId(); C.log("user id mismatch between logged in user and SubscriptionStore user"), (0, E.captureBillingMessage)("user id mismatch between logged in user and SubscriptionStore user", { extra: { authUserId: e, subscriptionId: r.id, subscriptionUserId: r.userId } }), N = !0 } break } if (r.type === e && (null == t || t(r))) return r } return null } class M extends(i = o.default.Store) { hasFetchedSubscriptions() { return null != T } hasFetchedMostRecentPremiumTypeSubscription() { return m } hasFetchedPreviousPremiumTypeSubscription() { return O } getPremiumSubscription() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return D(I.SubscriptionTypes.PREMIUM, e => !(0, d.isNoneSubscription)(e.planId), e) } getPremiumTypeSubscription() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return D(I.SubscriptionTypes.PREMIUM, void 0, e) } getSubscriptions() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return e ? f : T } getSubscriptionById(e) { var t; return null !== (t = null == T ? void 0 : T[e]) && void 0 !== t ? t : void 0 } getActiveGuildSubscriptions() { return h } getActiveApplicationSubscriptions() { return A } getSubscriptionForPlanIds(e) { var t; let n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], i = new Set(e), r = n ? f : T; return null == r ? null : null !== (t = Object.values(r).find(e => e.items.some(e => i.has(e.planId)))) && void 0 !== t ? t : null } getMostRecentPremiumTypeSubscription() { return S } getPreviousPremiumTypeSubscription() { return p } } a = "SubscriptionStore", (s = "displayName") in(r = M) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new M(l.default, { BILLING_SUBSCRIPTION_FETCH_SUCCESS: function(e) { let { subscriptions: t } = e, n = {}, i = {}, r = [], s = [], a = c.default.getId(); t.forEach(e => { if (e.user_id !== a && !N) { C.log("[handleSubscriptionsFetch] Skipping adding Subscription into SubscriptionStore because of userId mismatch"), (0, E.captureBillingMessage)("[handleSubscriptionsFetch] Skipping adding Subscription into SubscriptionStore because of userId mismatch", { extra: { authUserId: a, subscriptionId: e.id, subscriptionUserId: e.user_id } }), N = !0; return } let t = _.SubscriptionRecord.createFromServer(e); n[t.id] = t, L(t) && (i[t.id] = t, t.type === I.SubscriptionTypes.GUILD && t.status !== I.SubscriptionStatusTypes.ENDED && r.push(t), t.type === I.SubscriptionTypes.APPLICATION && t.status !== I.SubscriptionStatusTypes.ENDED && s.push(t)) }), T = n, f = i, h = r, A = s }, BILLING_SUBSCRIPTION_UPDATE_SUCCESS: function(e) { let { subscription: t } = e, n = _.SubscriptionRecord.createFromServer(t); T = { ...T, [n.id]: n }, L(n) && (f = { ...f, [n.id]: n }), null != h && n.type === I.SubscriptionTypes.GUILD && (h = R({ activeSubscriptions: h, record: n })), null != A && n.type === I.SubscriptionTypes.APPLICATION && (h = R({ activeSubscriptions: A, record: n })) }, BILLING_MOST_RECENT_SUBSCRIPTION_FETCH_SUCCESS: function(e) { let { subscription: t } = e; if (m = !0, null != t) { let e = c.default.getId(); if (t.user_id !== e && !N) { C.log("[handleMostRecentSubscriptionFetch] Skipping adding Subscription into SubscriptionStore because of userId mismatch"), (0, E.captureBillingMessage)("[handleMostRecentSubscriptionFetch] Skipping adding Subscription into SubscriptionStore because of userId mismatch", { extra: { authUserId: e, subscriptionId: t.id, subscriptionUserId: t.user_id } }), m = !1, N = !0; return } S = _.SubscriptionRecord.createFromServer(t) } }, BILLING_PREVIOUS_PREMIUM_SUBSCRIPTION_FETCH_SUCCESS: function(e) { let { subscription: t } = e; if (O = !0, null != t) { let e = c.default.getId(); if (t.user_id !== e && !N) { C.log("[handlePreviousSubscriptionFetch] Skipping adding Subscription into SubscriptionStore because of userId mismatch"), (0, E.captureBillingMessage)("[handlePreviousSubscriptionFetch] Skipping adding Subscription into SubscriptionStore because of userId mismatch", { extra: { authUserId: e, subscriptionId: t.id, subscriptionUserId: t.user_id } }), O = !1, N = !0; return } p = _.SubscriptionRecord.createFromServer(t) } }, BILLING_SUBSCRIPTION_RESET: g, LOGOUT: g }) }, 295226: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("906280"), s = n.n(r), a = n("442837"), o = n("570140"), l = n("276444"), u = n("594174"), d = n("74538"), _ = n("78839"), c = n("474936"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = { userOffersLastFetchedAtDate: void 0, userAnnualOfferLastFetchedAtDate: void 0, userTrialOffers: {}, userDiscountOffers: {}, userDiscounts: void 0 }, T = I; function f() { T.userTrialOffers = {}, T.userDiscountOffers = {}, T.userOffersLastFetchedAtDate = void 0, T.userAnnualOfferLastFetchedAtDate = void 0 } let S = () => !0; function h() { if (null != _.default.getPremiumTypeSubscription()) { let e = s()(T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_20_PERCENT_DISCOUNT_ID]), t = s()(T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_25_PERCENT_DISCOUNT_ID]); return T.userDiscountOffers = {}, null != e ? T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_20_PERCENT_DISCOUNT_ID] = e : null != t && (T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_25_PERCENT_DISCOUNT_ID] = t), T.userTrialOffers = {}, !0 } return !1 } function A() { var e; let t = null === (e = u.default.getCurrentUser()) || void 0 === e ? void 0 : e.id; if (null == t) return !1; let n = Object.entries(l.default.getRelevantReferralTrialOffers()).map(e => { let [t, n] = e; return n }).filter(e => e.user_id === t); if (n.length > 0) { let e = n[0]; return T.userTrialOffers[e.trial_id] = e, !0 } return !1 } class m extends(i = a.default.PersistedStore) { initialize(e) { T = null != e ? e : I, this.waitFor(u.default), this.syncWith([u.default], S), this.syncWith([_.default], h), this.syncWith([l.default], A) } getUserTrialOffer(e) { if (null !== e) return T.userTrialOffers[e] } getUserDiscountOffer(e) { if (null !== e) return T.userDiscountOffers[e] } getAnyOfUserTrialOfferId(e) { for (let t of e) if (null != T.userTrialOffers[t]) return t; return null } hasFetchedOffer() { return null != T.userOffersLastFetchedAtDate } shouldFetchOffer() { let e = T.userOffersLastFetchedAtDate; return null == e || Date.now() - 1728e5 > e } shouldFetchAnnualOffer() { let e = T.userAnnualOfferLastFetchedAtDate; return null == e || Date.now() - 1728e5 > e } getAlmostExpiringTrialOffers(e) { let t = Object.values(c.SubscriptionTrials).map(e => e.id), n = u.default.getCurrentUser(); return (0, d.isPremium)(n) ? [] : Object.values(T.userTrialOffers).filter(n => t.includes(n.trial_id) && null != n.expires_at && null != n.subscription_trial && e.includes(n.subscription_trial.sku_id) && Date.parse(n.expires_at) < Date.now() + c.USER_PREMIUM_SUBSCRIPTION_TRIAL_EXPIRES_APPROACHING_5_DAY_THRESHOLD) } getAcknowledgedOffers(e) { let t = u.default.getCurrentUser(); return (0, d.isPremium)(t) ? [] : Object.values(T.userTrialOffers).filter(t => e.includes(t.trial_id) && null != t.expires_at) } getUnacknowledgedDiscountOffers() { var e; let t = u.default.getCurrentUser(); return (0, d.isPremium)(t) ? [] : Object.values(null !== (e = T.userDiscountOffers) && void 0 !== e ? e : {}).filter(e => null == e.expires_at && !c.ANNUAL_DISCOUNT_IDS.includes(e.discount_id)) } getUnacknowledgedOffers(e) { let t = u.default.getCurrentUser(); return (0, d.isPremium)(t) ? [] : Object.values(T.userTrialOffers).filter(t => e.includes(t.trial_id) && null == t.expires_at) } hasAnyUnexpiredOffer() { return Object.values(T.userTrialOffers).some(e => null == e.expires_at || Date.parse(e.expires_at) > Date.now()) } getReferrer(e) { var t; return null == e ? null : null === (t = T.userTrialOffers[e]) || void 0 === t ? void 0 : t.referrer } getState() { return T } forceReset() { f() } } E(m, "displayName", "UserOfferStore"), E(m, "persistKey", "UserOfferStore"), E(m, "migrations", [e => { let t = null == e ? void 0 : e.userDiscounts; if (null != t) return { ...e, userDiscountOffers: t } }, e => { if (null != e) return (null == e ? void 0 : e.userAnnualOfferLastFetchedAtDate) == null ? { ...e, userAnnualOfferLastFetchedAtDate: void 0 } : e }]), t.default = new m(o.default, { BILLING_USER_TRIAL_OFFER_FETCH_SUCCESS: function(e) { let { userTrialOffer: t } = e; null != t ? T.userTrialOffers[t.trial_id] = t : f(), T.userOffersLastFetchedAtDate = Date.now() }, BILLING_USER_TRIAL_OFFER_ACKNOWLEDGED_SUCCESS: function(e) { let { userTrialOffer: t } = e; null != t ? T.userTrialOffers[t.trial_id] = t : T.userTrialOffers = {}, T.userOffersLastFetchedAtDate = Date.now() }, BILLING_USER_OFFER_FETCH_SUCCESS: function(e) { let { userTrialOffer: t, userDiscount: n, userDiscountOffer: i } = e; null == t && null == n && null == i && f(), null != t ? (T.userTrialOffers[t.trial_id] = t, T.userDiscountOffers = {}) : null != n ? (T.userDiscountOffers[n.discount_id] = n, T.userTrialOffers = {}) : null != i && (T.userDiscountOffers[i.discount_id] = i, T.userTrialOffers = {}), T.userOffersLastFetchedAtDate = Date.now() }, BILLING_ANNUAL_USER_OFFER_FETCH_SUCCESS: function(e) { let { userDiscountOffer: t } = e; delete T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_20_PERCENT_DISCOUNT_ID], delete T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_25_PERCENT_DISCOUNT_ID], null != t && (T.userDiscountOffers[t.discount_id] = t), T.userAnnualOfferLastFetchedAtDate = Date.now() }, BILLING_USER_OFFER_ACKNOWLEDGED_SUCCESS: function(e) { let { userTrialOffer: t, userDiscount: n, userDiscountOffer: i } = e; null != t ? T.userTrialOffers[t.trial_id] = t : T.userTrialOffers = {}, null != n ? T.userDiscountOffers[n.discount_id] = n : null != i ? T.userDiscountOffers[i.discount_id] = i : T.userDiscountOffers = {}, T.userOffersLastFetchedAtDate = Date.now() }, BILLING_USER_OFFER_FETCH_FAIL: function() { f(), T.userOffersLastFetchedAtDate = Date.now() }, BILLING_ANNUAL_USER_OFFER_FETCH_FAIL: function() { delete T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_20_PERCENT_DISCOUNT_ID], delete T.userDiscountOffers[c.PREMIUM_TIER_2_ANNUAL_25_PERCENT_DISCOUNT_ID], T.userAnnualOfferLastFetchedAtDate = Date.now() }, LOGOUT: f }) }, 983620: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("353926"); function d() { return !0 } class _ extends(a = o.default.Store) { initialize() { this.waitFor(u.default) } getExperimentAssignment(e, t) { return u.default.getGuildExperimentDescriptor(t, e) } } s = "GuildExperimentStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { LOGOUT: d, LOGIN_SUCCESS: d, CONNECTION_OPEN: d, EXPERIMENTS_FETCH_SUCCESS: d, OVERLAY_INITIALIZE: d, CACHE_LOADED: d, EXPERIMENTS_FETCH_FAILURE: d, EXPERIMENT_OVERRIDE_BUCKET: d }) }, 230307: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("981631"); let d = {}, _ = null; class c extends(a = o.default.Store) { get applicationStatistics() { return d } get lastFetched() { return _ } getGameDuration(e) { let t = d[e]; return null != t ? t.total_duration : 0 } getLastPlayedDateTime(e) { let t = d[e]; return null != t ? new Date(t.last_played_at).getTime() : null } hasApplicationStatistic(e) { return null != d[e] } getCurrentUserStatisticsForApplication(e) { return d[e] } getQuickSwitcherScoreForApplication(e) { let t = d[e], n = 0; if (null != t) { let e = Date.now(), i = Math.floor((e - new Date(t.last_played_at).getTime()) / 864e5), r = Math.floor(1e3 * t.total_duration / 36e5); 0 === i ? n += 50 : i >= 1 && i < 2 ? n += 40 : i >= 2 && i < 4 ? n += 30 : i >= 4 && i < 7 ? n += 20 : i >= 7 && (n += 10), 0 === r ? n += 0 : r >= 1 && r < 12 ? n += 10 : r >= 12 && r < 168 ? n += 20 : r >= 168 && r < 720 ? n += 40 : r >= 720 && (n += 50) } return n } } s = "LibraryApplicationStatisticsStore", (r = "displayName") in(i = c) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new c(l.default, { USER_ACTIVITY_STATISTICS_FETCH_SUCCESS: function(e) { let { statistics: t } = e; t.forEach(e => { d[e.application_id] = e }), _ = Date.now() }, ACTIVITY_UPDATE_START: function(e) { let { duration: t, applicationId: n, distributor: i } = e, r = d[n], s = new Date().toISOString(), a = 0, o = 0; if (null != r) { var l; a = r.total_duration, o = null !== (l = r.total_discord_sku_duration) && void 0 !== l ? l : 0 } a += t, i === u.Distributors.DISCORD && (o += t), d[n] = { application_id: n, total_duration: a, last_played_at: s, total_discord_sku_duration: o } }, LOGOUT: function() { d = {}, _ = null } }) }, 173747: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("846519"), _ = n("570140"), c = n("274616"), E = n("57513"), I = n("51025"), T = n("812206"), f = n("283595"), S = n("417363"), h = n("391690"), A = n("70956"), m = n("780570"), N = n("804739"); let p = new Set, O = {}, C = new Set, R = {}, g = new Set, L = {}, v = 10 * A.default.Millis.MINUTE, D = 6 * A.default.Millis.HOUR, M = 10 * A.default.Millis.MINUTE, y = new d.Timeout; function P(e) { y.start(e + Math.random() * v, c.fetchBranches) } function U() { if (!(0, N.isSupportedPlatform)()) return !1; let e = f.default.entitledBranchIds, t = []; for (let n of e) !L.hasOwnProperty(n) && (L[n] = null, t.push(n)); if (0 === t.length) return !1; _.default.wait(() => c.fetchBranches(t)) } function b(e, t) { if (null != O[t] && h.default.shouldBeInstalled(e, t)) { let n = O[t], i = n.manifestIds, r = S.default.getState(e, t); null != r && r.shouldPatch && (r.buildId !== n.id || !l().isEqual(r.manifestIds, i)) && _.default.wait(() => { let r = T.default.getApplication(e); null != r ? (g.delete((0, m.getComboId)(e, t)), (0, I.updateApplication)(r, t, n.id, i, !0)) : g.add((0, m.getComboId)(e, t)) }) } } function G() { y.stop() } class w extends(i = u.default.Store) { initialize() { this.syncWith([f.default], U), this.waitFor(S.default, f.default, T.default) } getTargetBuildId(e, t) { return null == O[t] ? null : O[t].id } getTargetManifests(e, t) { return null == O[t] ? null : O[t].manifestIds } hasNoBuild(e, t) { return C.has(t) } isFetching(e, t) { return p.has(t) } needsToFetchBuildSize(e) { return !R.hasOwnProperty(e) } getBuildSize(e) { return R[e] } } a = "ApplicationBuildStore", (s = "displayName") in(r = w) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new w(_.default, { CONNECTION_OPEN: function() { return P(D), U() }, GAMES_DATABASE_UPDATE: function() { if (!(0, N.isSupportedPlatform)()) return !1; for (let e of g) { let { applicationId: t, branchId: n } = (0, m.convertComboId)(e); null != T.default.getApplication(t) && (g.delete(e), b(t, n)) } }, APPLICATION_BUILD_FETCH_START: function(e) { let { branchId: t } = e; p.add(t) }, APPLICATION_BUILD_FETCH_SUCCESS: function(e) { let { applicationId: t, branchId: n, locale: i, build: r } = e; p.delete(n); let s = r.manifests.map(e => { let { id: t } = e; return t }), a = r.id; C.delete(n), O[n] = { id: a, applicationId: t, branchId: n, locale: i, manifestIds: s }, b(t, n) }, APPLICATION_BUILD_NOT_FOUND: function(e) { let { branchId: t } = e; p.delete(t), C.add(t) }, APPLICATION_BUILD_SIZE_FETCH_START: function(e) { let { buildId: t } = e; !R.hasOwnProperty(t) && (R[t] = null) }, APPLICATION_BUILD_SIZE_FETCH_SUCCESS: function(e) { let { buildId: t, sizeKB: n } = e; R[t] = n }, APPLICATION_BUILD_SIZE_FETCH_FAIL: function(e) { let { buildId: t } = e; null == R[t] && delete R[t] }, APPLICATION_BRANCHES_FETCH_SUCCESS: function(e) { let { branches: t } = e, n = {}; for (let e in f.default.libraryApplications) { let t = f.default.libraryApplications[e]; n[t.branchId] = t } for (let e of t) { let { id: t, liveBuildId: i } = e; if (i !== L[t]) { let e = n[t]; null != e && _.default.wait(() => E.fetchLiveBuild(e.id, e.branchId, !0)) } L[t] = i } P(D) }, APPLICATION_BRANCHES_FETCH_FAIL: function() { P(M) }, CONNECTION_CLOSED: G, LOGOUT: G, SKU_PURCHASE_SUCCESS: function(e) { let { entitlements: t } = e; if (!(0, N.isSupportedPlatform)()) return !1; let n = new Set; for (let e of t) n.add(e.application_id); for (let e in f.default.libraryApplications) { let t = f.default.libraryApplications[e]; n.has(t.id) && (0, m.isUserEntitledToLibraryApplication)(t) && _.default.wait(() => E.fetchLiveBuild(t.id, t.branchId)) } } }) }, 490983: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("658722"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("913527"), c = n.n(_), E = n("442837"), I = n("570140"), T = n("812206"), f = n("594190"), S = n("592745"), h = n("706454"), A = n("757266"), m = n("77498"), N = n("283595"), p = n("246946"), O = n("230307"), C = n("799777"), R = n("417363"), g = n("941128"), L = n("70956"), v = n("251625"), D = n("823379"), M = n("780570"), y = n("358085"), P = n("998502"), U = n("804739"), b = n("7956"), G = n("981631"); let w = c()().subtract(1, "week"), k = [], B = "", V = !1; function x(e, t) { return e.application.name.localeCompare(t.application.name, h.default.locale, { sensitivity: "base" }) } let F = { [G.GameTableListKeys.NAME]: x, [G.GameTableListKeys.PLATFORM]: (e, t, n) => { let i = e.libraryApplication.getDistributor(), r = t.libraryApplication.getDistributor(); return i === r ? (n === G.TableSortDirections.DESCENDING ? -1 : 1) * x(e, t) : null == i ? 1 : null == r ? -1 : i.localeCompare(r) }, [G.GameTableListKeys.LAST_PLAYED]: (e, t) => e.isNew && !t.isNew ? -1 : !e.isNew && t.isNew ? 1 : e.lastPlayed === t.lastPlayed ? 0 : e.lastPlayed > t.lastPlayed ? -1 : 1, [G.GameTableListKeys.ACTIONS]: null }, H = (0, v.cachedFunction)(e => e.filter(e => null != e.libraryApplication && e.shouldShowInLibrary)), Y = (0, v.cachedFunction)(e => e.filter(e => null != e.libraryApplication && R.default.isLaunchable(e.libraryApplication.id, e.libraryApplication.branchId))), j = (0, v.cachedFunction)((e, t) => e.filter(e => l()(t.toLowerCase(), e.application.name.toLowerCase()))), W = (0, v.cachedFunction)((e, t, n, i) => { let r = F[t]; if (null == r) return e; let s = [...e].sort(r); return n === G.TableSortDirections.DESCENDING ? s.reverse() : s }), K = (0, v.cachedFunction)(e => e.filter(e => null != e.libraryApplication && e.libraryApplication.isHidden())); function z(e, t) { let n = O.default.getCurrentUserStatisticsForApplication(e.id); if (null != n) return new Date(n.last_played_at).getTime(); let i = t[e.id]; return null != i ? i : 0 } function Z() { let e = new Set(f.default.getRunningVerifiedApplicationIds()), t = {}, n = new Set, i = f.default.getGamesSeen(!1, !1).map(e => { let n = m.default.getGameByGameData(e); return null != n ? (t[n.id] = e.lastFocused * L.default.Millis.SECOND, n.id) : null }), r = Object.values(N.default.getAllLibraryApplications()).map(i => (function(e, t, n, i, r) { var s, a; if (!r && t.has(e.id)) return null; let o = T.default.getApplication(e.id); if (null == o) return null; let l = z(o, n); if (t.add(e.id), !(0, M.isUserEntitledToLibraryApplication)(e) && !R.default.isInstalled(e.id, e.branchId)) return null; return { key: "".concat(e.id, "-").concat(e.branchId), application: o, libraryApplication: e, lastPlayed: l, supportsCloudSync: null != e && R.default.supportsCloudSync(e.id, e.branchId), isNew: (s = e, a = l, null != s && c()(s.createdAt).isAfter(w) && 0 === a), isLaunching: S.default.launchingGames.has(e.id), isRunning: i.has(e.id), isLaunchable: (0, U.isLaunchable)({ LibraryApplicationStore: N.default, LaunchableGameStore: S.default, DispatchApplicationStore: R.default, ConnectedAppsStore: A.default, applicationId: e.id, branchId: e.branchId }), isUpdatingFlags: N.default.isUpdatingFlags(e.id, e.branchId), shouldShowInLibrary: (0, M.shouldShowGameInLibrary)(o, e, p.default), defaultAction: (0, b.getDefaultLibraryApplicationAction)(e, R.default, g.default) } })(i, n, t, e, !0)).filter(D.isNotNullish), s = [...i.map(i => (function(e, t, n, i) { let r = null != e ? T.default.getApplication(e) : null; if (null == r || null == e || t.has(e)) return null; let s = z(r, n); return t.add(e), { key: e, application: r, lastPlayed: s, supportsCloudSync: !1, isNew: !1, isLaunching: S.default.launchingGames.has(e), isRunning: i.has(e), isLaunchable: (0, U.isLaunchable)({ LibraryApplicationStore: N.default, LaunchableGameStore: S.default, DispatchApplicationStore: R.default, ConnectedAppsStore: A.default, applicationId: e, branchId: null }), isUpdatingFlags: !1, shouldShowInLibrary: !1, libraryApplication: null, defaultAction: null } })(i, n, t, e)).filter(D.isNotNullish), ...r].sort((e, t) => e.lastPlayed === t.lastPlayed ? 0 : e.lastPlayed > t.lastPlayed ? -1 : 1); return V = null != m.default.lastFetched && N.default.fetched, !d().isEqual(s, k) && (k = s, y.isPlatformEmbedded && P.default.setSystemTrayApplications(Y(k).map(e => e.application).slice(0, 5)), !0) } class X extends(i = E.default.Store) { initialize() { this.syncWith([T.default, m.default, S.default, f.default, R.default, g.default, N.default, O.default, p.default, A.default], Z, 200), this.syncWith([C.default, h.default], () => !0) } get applicationFilterQuery() { return B } get applicationViewItems() { return k } get launchableApplicationViewItems() { return Y(k) } get libraryApplicationViewItems() { return H(k) } get filteredLibraryApplicationViewItems() { return j(this.libraryApplicationViewItems, B) } get sortedFilteredLibraryApplicationViewItems() { return W(this.filteredLibraryApplicationViewItems, C.default.sortKey, C.default.sortDirection, h.default.locale) } get hiddenLibraryApplicationViewItems() { return K(k) } get hasFetchedApplications() { return V } } a = "ApplicationViewStore", (s = "displayName") in(r = X) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new X(I.default, { LIBRARY_APPLICATION_FILTER_UPDATE: function(e) { let { query: t } = e; B = t } }) }, 7956: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getDefaultLibraryApplicationAction: function() { return s } }); var i = n("804739"), r = n("981631"); function s(e, t, n) { let s = t.getState(e.id, e.branchId), a = n.getQueuePosition(e.id, e.branchId), o = n.paused; if (null != s) { if (null == a || -1 === a) switch (s.type) { case r.LocalDispatchApplicationStates.INSTALLING: return r.LibraryApplicationActions.INSTALL; case r.LocalDispatchApplicationStates.UPDATING: case r.LocalDispatchApplicationStates.UPDATE_REQUIRED: return r.LibraryApplicationActions.UPDATE } switch (s.type) { case r.LocalDispatchApplicationStates.INSTALLING: case r.LocalDispatchApplicationStates.UPDATING: case r.LocalDispatchApplicationStates.UPDATE_REQUIRED: case r.LocalDispatchApplicationStates.REPAIRING: if (a > 0) return r.LibraryApplicationActions.MOVE_UP; if (o) return r.LibraryApplicationActions.RESUME; return r.LibraryApplicationActions.PAUSE; case r.LocalDispatchApplicationStates.UP_TO_DATE: return r.LibraryApplicationActions.PLAY; case r.LocalDispatchApplicationStates.UNINSTALLING: return null } } return null != a && a > 0 ? r.LibraryApplicationActions.MOVE_UP : (0, i.isSupportedPlatform)() ? r.LibraryApplicationActions.INSTALL : null } }, 580130: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("392711"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("959546"), c = n("283595"), E = n("780570"), I = n("55563"); let T = {}, f = {}, S = {}, h = {}, A = !1, m = !1, N = new Set, p = new Set, O = {}; function C(e) { T[e.id] = _.default.createFromServer(e), null == S[e.sku_id] && (S[e.sku_id] = new Set), null == h[e.application_id] && (h[e.application_id] = new Set), null != e.subscription_id && (null == O[e.subscription_id] && (O[e.subscription_id] = new Set), O[e.subscription_id].add(e.id)), h[e.application_id].add(e.id), S[e.sku_id].add(e.id) } function R(e) { f[e.id] = _.default.createFromServer(e) } function g(e) { return C(e.entitlement) } class L extends(i = u.Store) { initialize() { this.syncWith([c.default], () => !0) } get(e) { return T[e] } getGiftable() { return l().values(f) } getForApplication(e) { let t = h[e]; if (null == t) return null; let n = new Set; for (let e of t) n.add(T[e]); return n } getForSku(e) { let t = S[e]; if (null == t) return null; let n = new Set; for (let e of t) n.add(T[e]); return n } get fetchingAllEntitlements() { return A } get fetchedAllEntitlements() { return m } get applicationIdsFetching() { return N } get applicationIdsFetched() { return p } isFetchingForApplication(e) { return this.fetchingAllEntitlements || null != e && this.applicationIdsFetching.has(e) } isFetchedForApplication(e) { return this.fetchedAllEntitlements || null != e && this.applicationIdsFetched.has(e) } getForSubscription(e) { let t = O[e]; if (null == t) return null; let n = new Set; for (let e of t) n.add(T[e]); return n } isEntitledToSku(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null, r = S[t]; if (null != r) for (let t of r) { let n = T[t]; if (null != n && n.isValid(e, I.default, i)) return !0 } if (p.has(n)) return !1; let s = null != i ? c.default.getLibraryApplication(n, i) : c.default.getActiveLibraryApplication(n); return !!(null != s && s.sku.id === t && (0, E.isUserEntitledToLibraryApplication)(s)) || null } hasFetchedForApplicationIds(e) { return e.every(e => p.has(e)) } } a = "EntitlementStore", (s = "displayName") in(r = L) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new L(d.default, { ENTITLEMENT_FETCH_APPLICATION_START: function(e) { let { applicationId: t } = e; N.add(t) }, ENTITLEMENT_FETCH_APPLICATION_SUCCESS: function(e) { let { applicationId: t, entitlements: n } = e; for (let e of (N.delete(t), p.add(t), n)) !0 !== e.consumed && C(e) }, ENTITLEMENT_FETCH_APPLICATION_FAIL: function() {}, ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS: function(e) { let { entitlements: t } = e; f = {}, t.forEach(R) }, SKU_PURCHASE_SUCCESS: function(e) { let { entitlements: t } = e; for (let e of t) C(e) }, LIBRARY_FETCH_SUCCESS: function(e) { let { libraryApplications: t } = e; for (let e of t) if (null != e.entitlements) for (let t of e.entitlements) C(t) }, ENTITLEMENT_CREATE: g, ENTITLEMENT_UPDATE: g, ENTITLEMENT_DELETE: function(e) { return function(e) { delete T[e.id]; let t = h[e.application_id]; null != t && t.delete(e.id); let n = S[e.sku_id]; if (null != n && n.delete(e.id), null != e.subscription_id) { let t = O[e.subscription_id]; null != t && t.delete(e.id) } }(e.entitlement) }, LOGOUT: function() { T = {}, S = {}, h = {}, A = !1, m = !1, N = new Set, p = new Set }, ENTITLEMENTS_FETCH_FOR_USER_START: function() { A = !0 }, ENTITLEMENTS_FETCH_FOR_USER_SUCCESS: function(e) { let { entitlements: t } = e; for (let e of (m = !0, A = !1, t)) C(e) }, ENTITLEMENTS_FETCH_FOR_USER_FAIL: function() { m = !1, A = !1 } }) }, 55563: function(e, t, n) { "use strict"; let i; n.r(t), n("47120"); var r, s, a, o, l = n("442837"), u = n("570140"), d = n("706454"), _ = n("659181"), c = n("77498"); let E = new Set, I = new Set, T = new Map, f = new Map, S = new Map; function h(e) { T.set(e.id, _.default.createFromServer(e)), !f.has(e.application_id) && f.set(e.application_id, new Set), f.get(e.application_id).add(e.id) } function A(e) { E.delete(e.id), I.delete(e.id), h(e) } function m(e) { h(e.sku), null != e.child_skus && e.child_skus.forEach(e => h(e)), null != e.alternative_skus && e.alternative_skus.forEach(e => h(e)) } function N(e) { let { entitlements: t } = e; for (let e of t) null != e.sku && h(e.sku) } function p() { E = new Set, I = new Set, T = new Map, f = new Map, S = new Map } function O() { if (i === d.default.locale) return !1; i = d.default.locale, p() } class C extends(r = l.Store) { initialize() { this.waitFor(d.default, c.default), this.syncWith([d.default], O), i = d.default.locale } get(e) { return T.get(e) } getForApplication(e) { let t = f.get(e); return null == t ? [] : Array.from(t).map(e => T.get(e)) } isFetching(e) { return E.has(e) } getSKUs() { return Object.fromEntries(T) } didFetchingSkuFail(e) { return I.has(e) } } o = "SKUStore", (a = "displayName") in(s = C) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new C(u.default, { STORE_LISTINGS_FETCH_SUCCESS: function(e) { let { storeListings: t } = e; for (let e of t) m(e) }, STORE_LISTING_FETCH_SUCCESS: function(e) { let { storeListing: t } = e; m(t) }, GIFT_CODE_RESOLVE_SUCCESS: function(e) { let { giftCode: t } = e; if (null == t.store_listing) return !1; h(t.store_listing.sku) }, SKU_FETCH_START: function(e) { let { skuId: t } = e; E.add(t) }, SKU_FETCH_SUCCESS: function(e) { let { sku: t } = e; A(t) }, SKU_FETCH_FAIL: function(e) { let { skuId: t } = e; E.delete(t), I.add(t) }, SKUS_FETCH_SUCCESS: function(e) { let { guildId: t, skus: n } = e; for (let e of n) A(e); null != t && S.set(t, new Set(n.map(e => e.id))) }, ENTITLEMENTS_GIFTABLE_FETCH_SUCCESS: N, APPLICATION_STORE_CLEAR_DATA: p, APPLICATION_SUBSCRIPTIONS_FETCH_ENTITLEMENTS_SUCCESS: N, ENTITLEMENTS_FETCH_FOR_USER_SUCCESS: N }) }, 695103: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n("47120"), n("177593"); var a, o = n("442837"), l = n("570140"), u = n("238514"), d = n("695346"), _ = n("581883"), c = n("283595"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = { applicationId: null, originURL: null }, T = I, f = new Set, S = !1; function h() { s = null } function A() { i = null, r = null, f = new Set, T.applicationId = null, T.originURL = null, h() } class m extends(a = o.default.PersistedStore) { initialize(e) { i = (T = { ...null != e ? e : I }).applicationId, r = T.originURL, this.waitFor(_.default, u.default), this.syncWith([_.default, u.default], () => !0), c.default.whenInitialized(() => { S = !0 }) } inTestModeForApplication(e) { return i === e } inTestModeForEmbeddedApplication(e) { return i === e && null != r } shouldDisplayTestMode(e) { return d.DeveloperMode.getSetting() && this.inTestModeForApplication(e) } getState() { return T } get isTestMode() { return null != i } get isFetchingAuthorization() { return f.size > 0 } get testModeEmbeddedApplicationId() { return null != r ? i : null } get testModeApplicationId() { return i } get testModeOriginURL() { return r } get error() { return s } whenInitialized(e) { this.addConditionalChangeListener(() => { if (S) return setImmediate(e), !1 }) } } E(m, "displayName", "TestModeStore"), E(m, "persistKey", "TestModeStore"), t.default = new m(l.default, { DEVELOPER_TEST_MODE_AUTHORIZATION_START: function(e) { let { applicationId: t } = e; f.add(t), s = null }, DEVELOPER_TEST_MODE_AUTHORIZATION_SUCCESS: function(e) { let { applicationId: t, originURL: n } = e; i = t, r = n, f.delete(t), s = null, T.applicationId = t, T.originURL = n }, DEVELOPER_TEST_MODE_AUTHORIZATION_FAIL: function(e) { let { applicationId: t, error: n } = e; f.delete(t), s = n }, OVERLAY_INITIALIZE: function(e) { let { testModeApplicationId: t } = e; i = t }, DEVELOPER_TEST_MODE_RESET_ERROR: h, LOGOUT: A, DEVELOPER_TEST_MODE_RESET: A }) }, 449224: function(e, t, n) { "use strict"; let i; n.r(t); var r, s, a, o, l = n("442837"), u = n("570140"), d = n("594190"), _ = n("77498"); class c extends(o = l.default.Store) { getGameForPID(e) { var t; if (__OVERLAY__ || null == e) return null; let n = null === (t = d.default.getGameForPID(e)) || void 0 === t ? void 0 : t.name; return _.default.getGameByName(n) } getGame() { return __OVERLAY__ ? i : null } } a = "OverlayRunningGameStore", (s = "displayName") in(r = c) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new c(u.default, { OVERLAY_INITIALIZE: function(e) { i = e.currentGame }, OVERLAY_SET_ASSOCIATED_GAME: function(e) { i = e.associatedGame } }) }, 181106: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("846519"), u = n("570140"), d = n("981631"); let _ = {}, c = {}; function E(e, t, n) { var i; let { applicationId: r } = n, s = null !== (i = _[r]) && void 0 !== i ? i : {}; if (s[t] = e, _[r] = s, !__OVERLAY__ && e === d.ActivityActionStates.FAILED) { null != c[r] && c[r].stop(); let e = new l.Timeout; e.start(12e4, () => u.default.dispatch({ type: "ACTIVITY_LAUNCH_FAIL", applicationId: r, activityType: t })), c[r] = e } } function I(e) { return E(d.ActivityActionStates.COMPLETE, d.ActivityActionTypes.JOIN, e) } class T extends(a = o.default.Store) { getState(e, t) { let n = _[e]; return null == n ? void 0 : n[t] } getStates() { return _ } } s = "ActivityLauncherStore", (r = "displayName") in(i = T) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new T(u.default, { OVERLAY_INITIALIZE: function(e) { let { activityLauncherStates: t } = e; _ = { ...t } }, ACTIVITY_JOIN_LOADING: e => E(d.ActivityActionStates.LOADING, d.ActivityActionTypes.JOIN, e), ACTIVITY_JOIN_FAILED: e => E(d.ActivityActionStates.FAILED, d.ActivityActionTypes.JOIN, e), ACTIVITY_JOIN: I, EMBEDDED_ACTIVITY_CLOSE: I, ACTIVITY_LAUNCH_FAIL: function(e) { let { applicationId: t, activityType: n } = e, i = _[t]; if (null == i || i[n] !== d.ActivityActionStates.FAILED) return !1; delete i[n] } }) }, 656733: function(e, t, n) { "use strict"; n.r(t), n("757143"), n("47120"); var i, r, s, a, o = n("442837"), l = n("377108"), u = n("570140"), d = n("187500"), _ = n("981631"), c = n("689938"); let E = { MP4: "mp4", TINYMP4: "tinymp4", NANOMP4: "nanomp4", WEBM: "webm", TINYWEBM: "tinywebm", NANOWEBM: "nanowebm" }, I = { FIXED_HEIGHT_MP4: "fixed_height.mp4", FIXED_HEIGHT_SMALL_MP4: "fixed_height_small.mp4", FIXED_WIDTH_MP4: "fixed_width.mp4", FIXED_WIDTH_SMALL_MP4: "fixed_width_small.mp4", DOWNSIZED_SMALL_MP4: "downsized_small.mp4", ORIGINAL_MP4: "original.mp4" }, T = E.MP4, f = null, S = "", h = "", A = [], m = [], N = [], p = []; function O(e) { return e.replace(/^https?:/, "") } class C extends(i = o.default.Store) { getAnalyticsID() { return f } getQuery() { return S } getResultQuery() { return h } getResultItems() { return A } getTrendingCategories() { return m } getSelectedFormat() { return T } getSuggestions() { return N } getTrendingSearchTerms() { return p } } a = "GIFPickerViewStore", (s = "displayName") in(r = C) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new C(u.default, { GIF_PICKER_INITIALIZE: function(e) { f = e.analyticsID }, GIF_PICKER_QUERY: function(e) { "" === (S = e.query) && (h = "", A = [], N = []) }, GIF_PICKER_QUERY_SUCCESS: function(e) { if (null != e.query && S === h) return !1; null != e.query && (h = e.query), A = e.items.map(e => { let { width: t, height: n, src: i, gif_src: r, url: s, id: a } = e; return { width: t, height: n, src: O(i), gifSrc: O(r), url: s, id: a, format: ! function(e) { switch (e) { case I.FIXED_HEIGHT_MP4: case I.FIXED_HEIGHT_SMALL_MP4: case I.FIXED_WIDTH_MP4: case I.FIXED_WIDTH_SMALL_MP4: case I.DOWNSIZED_SMALL_MP4: case I.ORIGINAL_MP4: case E.MP4: case E.TINYMP4: case E.NANOMP4: case E.WEBM: case E.TINYWEBM: case E.NANOWEBM: return !0; default: return !1 } }(T) ? l.GIFType.IMAGE : l.GIFType.VIDEO } }) }, GIF_PICKER_QUERY_FAILURE: function(e) { let { query: t } = e; if (null == t) return !1; h = t, A = [] }, GIF_PICKER_TRENDING_FETCH_SUCCESS: function(e) { let t = e.trendingCategories; m = [...null != e.trendingGIFPreview ? [{ type: _.GIFPickerResultTypes.TRENDING_GIFS, icon: d.default, name: c.default.Messages.GIF_PICKER_RESULT_TYPE_TRENDING_GIFS, src: O(e.trendingGIFPreview.src), format: l.GIFType.IMAGE }] : [], ...t.map(e => ({ ...e, src: O(e.src), type: _.GIFPickerResultTypes.TRENDING_CATEGORY, format: l.GIFType.VIDEO }))] }, GIF_PICKER_SUGGESTIONS_SUCCESS: function(e) { let { items: t } = e; N = t }, GIF_PICKER_TRENDING_SEARCH_TERMS_SUCCESS: function(e) { let { items: t } = e; p = t } }) }, 799777: function(e, t, n) { "use strict"; let i; n.r(t); var r, s, a, o, l = n("392711"), u = n.n(l), d = n("442837"), _ = n("433517"), c = n("570140"), E = n("981631"); let I = "GameLibraryViewStore", T = E.TableSortDirections.ASCENDING, f = E.GameTableListKeys.LAST_PLAYED, S = !1, h = u().debounce(() => { S = !1, m.emitChange() }, 200); class A extends(o = d.default.Store) { initialize() { var e; let t = null !== (e = _.Storage.get(I)) && void 0 !== e ? e : {}; null != t.sortDirection && null != t.sortKey && (T = t.sortDirection, f = t.sortKey) } get sortDirection() { return T } get sortKey() { return f } get activeRowKey() { return i } get isNavigatingByKeyboard() { return S } } a = "GameLibraryViewStore", (s = "displayName") in(r = A) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a; let m = new A(c.default, { LIBRARY_TABLE_SORT_UPDATE: function(e) { let { direction: t, key: n } = e; T = t, f = n, _.Storage.set(I, { sortDirection: T, sortKey: f }) }, LIBRARY_TABLE_ACTIVE_ROW_ID_UPDATE: function(e) { let { key: t, isKeyboardEvent: n } = e; n && (S = !0, h()), i = t } }); t.default = m }, 938475: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getComparator: function() { return C } }), n("47120"), n("724458"); var i, r = n("392711"), s = n.n(r), a = n("442837"), o = n("759174"), l = n("570140"), u = n("598077"), d = n("314897"), _ = n("592125"), c = n("271383"), E = n("594174"), I = n("979651"), T = n("709054"), f = n("51144"), S = n("981631"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = Object.freeze([]), m = {}; function N(e) { let t = m[e]; return null == t && (t = new g(e), m[e] = t), t } function p(e, t) { return c.default.getMember(e, t.id) } function O(e, t, n) { var i; let r = null !== (i = null == t ? void 0 : t.nick) && void 0 !== i ? i : f.default.getName(n); return { member: t, comparator: C(e, r) } } function C(e, t) { return "".concat(e.selfStream ? "\0" : "\x01").concat(t.toLowerCase(), "\0").concat(e.userId) } function R(e, t, n) { var i; let r = E.default.getUser(n), s = null == r; null == r && (r = new u.default({ id: n, username: "...", discriminator: n.slice(-5, -1) })); let { member: a, comparator: o } = O(e, p(t, i = r), i), l = { voiceState: e, user: r, member: a, comparator: o, nick: null == a ? void 0 : a.nick }; return s && (l._isPlaceholder = !0), l } class g { updateVoiceState(e) { if (null != this._pending) return this._pending.add(e), !1; let t = I.default.getVoiceState(this.guildId, e), n = this._voiceStates.get(e), i = E.default.getUser(e); if (null != t && null != i) { if (null == n) return this._voiceStates.set(e, R(t, this.guildId, e)), !0; if (n.voiceState !== t) { var r; let s = p(this.guildId, i), a = null !== (r = null == s ? void 0 : s.nick) && void 0 !== r ? r : f.default.getName(i); return this._voiceStates.set(e, { ...n, member: s, comparator: C(t, a), nick: a, voiceState: t }), !0 } } else if (null != n) return this._voiceStates.delete(e), !0; return !1 } updateMember(e) { if (null != this._pending) return this._pending.add(e), !1; let t = this._voiceStates.get(e), n = E.default.getUser(e); if (null != t && null != n) { var i, r; let s = p(this.guildId, n); if ((null == s ? void 0 : s.nick) !== (null === (i = t.member) || void 0 === i ? void 0 : i.nick) || (null == s ? void 0 : s.avatar) !== (null === (r = t.member) || void 0 === r ? void 0 : r.avatar)) { let { comparator: i } = O(t.voiceState, s, n); return this._voiceStates.set(e, { ...t, member: s, comparator: i, nick: null == s ? void 0 : s.nick }), !0 } } return !1 } updateUsers() { return null == this._pending && this._voiceStates.values().reduce((e, t) => { let n = E.default.getUser(t.user.id); return null != n && t.user !== n ? (this._voiceStates.set(n.id, R(t.voiceState, this.guildId, n.id)), !0) : e }, !1) } getUserIds() { return this.processPending(), this._voiceStates.keys() } getVoiceStates() { return this.processPending(), this._voiceStates.indexes() } getVoiceStatesForChannel(e) { this.processPending(); let t = this._voiceStates.values(e); return 0 === t.length ? A : t } countVoiceStatesForChannel(e) { return this.processPending(), this._voiceStates.size(e) } getVersion() { return this.processPending(), this._voiceStates.version } processPending() { if (null != this._pending) { let e = this._pending; this._pending = void 0, e.forEach(e => this.updateVoiceState(e)) } } constructor(e) { h(this, "guildId", void 0), h(this, "_pending", new Set), h(this, "_voiceStates", new o.SecondaryIndexMap(e => { let { voiceState: { channelId: t } } = e; return null != t ? [t] : [] }, e => { let { comparator: t } = e; return t })), this.guildId = e } } function L() { return s().reduce(m, (e, t) => t.updateUsers() || e, !1) } function v() { m = {}; let e = I.default.getAllVoiceStates(); T.default.keys(e).forEach(t => { Object.keys(e[t]).forEach(e => { N(null != t ? t : S.ME).updateVoiceState(e) }) }) } class D extends(i = a.default.Store) { initialize() { v(), this.waitFor(d.default, E.default, c.default, I.default), this.syncWith([E.default], L) } getVoiceStates(e) { return N(null != e ? e : S.ME).getVoiceStates() } getAllVoiceStates() { return m } getVoiceStatesForChannel(e) { let t = e.getGuildId(), n = e.id; return N(null != t ? t : S.ME).getVoiceStatesForChannel(n) } getVoiceStatesForChannelAlt(e, t) { return N(null != t ? t : S.ME).getVoiceStatesForChannel(e) } countVoiceStatesForChannel(e) { let t = _.default.getChannel(e); if (null == t) return 0; let n = t.getGuildId(); return N(null != n ? n : S.ME).countVoiceStatesForChannel(e) } getVoiceStateVersion(e) { return N(null != e ? e : S.ME).getVersion() } } h(D, "displayName", "SortedVoiceStateStore"), t.default = new D(l.default, { CONNECTION_OPEN: function() { m = {} }, OVERLAY_INITIALIZE: function() { v() }, VOICE_CHANNEL_SELECT: function(e) { let { guildId: t } = e, n = d.default.getId(); return null != n && N(null != t ? t : S.ME).updateVoiceState(n) }, VOICE_STATE_UPDATES: function(e) { let { voiceStates: t } = e; return t.reduce((e, t) => { let { guildId: n, userId: i } = t; return N(null != n ? n : S.ME).updateVoiceState(i) || e }, !1) }, GUILD_MEMBER_UPDATE: function(e) { let { guildId: t, user: n } = e; return N(t).updateMember(n.id) }, GUILD_CREATE: function(e) { let { guild: t } = e; delete m[t.id] }, GUILD_DELETE: function(e) { let { guild: t } = e; delete m[t.id] }, PASSIVE_UPDATE_V2: function(e) { var t, n; let i = !1, r = new Set(null === (t = m[e.guildId]) || void 0 === t ? void 0 : t.getUserIds()), s = new Set(null === (n = e.voiceStates) || void 0 === n ? void 0 : n.map(e => e.userId)), a = new Set(e.removedVoiceStateUsers); for (let t of new Set([...r, ...s])) i = N(e.guildId).updateVoiceState(t) || i; for (let t of r) !a.has(t) && (i = N(e.guildId).updateMember(t) || i); return i } }) }, 574254: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"), u = n("585483"), d = n("981631"); let _ = null, c = 0; function E() { _ = null } class I extends(a = o.default.Store) { isOpen() { return null != _ } get version() { return c } getContextMenu() { return _ } close() { return !!this.isOpen() && (u.ComponentDispatch.dispatch(d.ComponentActions.CONTEXT_MENU_CLOSE), !0) } } s = "ContextMenuStore", (r = "displayName") in(i = I) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new I(l.default, { CONTEXT_MENU_OPEN: function(e) { let { contextMenu: t } = e; c++, _ = t }, LAYER_PUSH: E, CONTEXT_MENU_CLOSE: E, OVERLAY_SET_UI_LOCKED: E, OVERLAY_DEACTIVATE_ALL_REGIONS: E }) }, 436181: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a, o = n("442837"), l = n("570140"); let u = null, d = !1; class _ extends(a = o.default.Store) { getLastProgress() { return u } isRunning() { return d } } s = "DispatchApplicationLaunchSetupStore", (r = "displayName") in(i = _) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s, t.default = new _(l.default, { DISPATCH_APPLICATION_LAUNCH_SETUP_START: function() { d = !0 }, DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE: function(e) { let { progress: t, total: n, name: i } = e; u = { progress: t, total: n, name: i } }, DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE: function() { u = null, d = !1 } }) }, 417363: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"), n("177593"); var i, r, s, a, o, l = n("392711"), u = n.n(l), d = n("442837"), _ = n("570140"), c = n("579806"), E = n("632243"), I = n("314897"), T = n("283595"), f = n("129542"), S = n("70956"), h = n("780570"), A = n("358085"), m = n("804739"), N = n("941128"), p = n("391690"), O = n("981631"); let C = 1 * S.default.Millis.MINUTE; (i || (i = {})).DISPATCH_APPLICATION_PROGRESS = "dispatch_application_progress"; let R = {}, g = "file://", L = !1, v = 0, D = 0, M = 0, y = [], P = [], U = [], b = !1; function G(e) { return e.type === O.LocalDispatchApplicationStates.INSTALLING || e.type === O.LocalDispatchApplicationStates.UPDATING || e.type === O.LocalDispatchApplicationStates.REPAIRING ? e.networkProgress : null } function w(e) { return e.type === O.LocalDispatchApplicationStates.INSTALLING || e.type === O.LocalDispatchApplicationStates.UPDATING || e.type === O.LocalDispatchApplicationStates.REPAIRING ? e.diskProgress : null } function k(e) { return e.type === O.LocalDispatchApplicationStates.INSTALLING || e.type === O.LocalDispatchApplicationStates.UPDATING || e.type === O.LocalDispatchApplicationStates.REPAIRING ? e.readerProgress : null } let B = u().throttle(function(e) { P = (P = [{ bytes: e, timestamp: Date.now() }, ...P]).slice(0, 200) }, 200), V = u().throttle(function(e) { let t = Date.now(), n = t - C; y = (y = [{ bytes: e, timestamp: t }, ...y]).slice(0, 200).filter(e => { let { timestamp: t } = e; return t >= n }) }, 200), x = u().throttle(function(e) { U = (U = [{ bytes: e, timestamp: Date.now() }, ...U]).slice(0, 200) }, 200); function F(e, t, n) { let i = n(R[t]), r = n(e[t]); return null != i && null != r && 0 !== i ? Math.max(r - i, 0) : 0 } class H extends(r = d.default.Store) { initialize() { this.waitFor(I.default) } getState(e, t) { return R[(0, h.getComboId)(e, t)] } isUpToDate(e, t) { let n = R[(0, h.getComboId)(e, t)]; return null != n && n.type === O.LocalDispatchApplicationStates.UP_TO_DATE } shouldPatch(e, t) { let n = R[(0, h.getComboId)(e, t)]; return null != n && !0 === n.shouldPatch } isInstalled(e, t) { let n = R[(0, h.getComboId)(e, t)]; return null != n ? n.type !== O.LocalDispatchApplicationStates.UNINSTALLING : p.default.shouldBeInstalled(e, t) } supportsCloudSync(e, t) { null == t && (t = e); let n = R[(0, h.getComboId)(e, t)]; return null != n && null != n.storage && !!n.storage.sync } isLaunchable(e, t) { if (!(0, m.isSupportedPlatform)()) return !1; let n = R[(0, h.getComboId)(e, t)]; return null != n && n.type === O.LocalDispatchApplicationStates.UP_TO_DATE && null != n.launchOptions && 0 !== n.launchOptions.length } getDefaultLaunchOption(e, t) { let n = R[(0, h.getComboId)(e, t)]; if (null == n) return null; let { defaultLaunchOptionId: i, launchOptions: r } = n; return null == i || null == r ? null : r[i] } getLaunchOptions(e, t) { let n = R[(0, h.getComboId)(e, t)]; return null == n || null == n.launchOptions ? [] : Object.values(n.launchOptions) } getHistoricalTotalBytesRead() { return y } getHistoricalTotalBytesDownloaded() { return P } getHistoricalTotalBytesWritten() { return U } whenInitialized(e) { this.addConditionalChangeListener(() => { if (L) return setImmediate(e), !1 }) } } o = "DispatchApplicationStore", (a = "displayName") in(s = H) ? Object.defineProperty(s, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : s[a] = o, t.default = new H(_.default, { CONNECTION_OPEN: function() { L = !1 }, DISPATCH_APPLICATION_STATE_UPDATE: function(e) { let { state: t } = e; L = !0; let n = {}, i = t.applications, r = null != t.currentTask ? t.currentTask.branchId : null, s = !1; for (let e in i) for (let t in i[e]) { let a = (0, h.getComboId)(e, t); if (n[a] = function(e) { let { build_id: t, target_build_id: n, manifest_ids: i, target_manifest_ids: r, application_id: s, branch_id: a, launch_commands: o, launch_options: l, storage: d, install_path: _, installed_size: E, repairing: I } = e, { should_patch: T } = e; switch (null == T && (T = !0), e.state.type) { case O.DispatchApplicationStates.COMPLETE: { let e; let h = {}, m = null; if (I) e = O.LocalDispatchApplicationStates.REPAIRING; else if (null == t) e = O.LocalDispatchApplicationStates.INSTALL_REQUIRED; else if (T && (t !== n || null != i && 0 !== u().difference(i, r).length)) e = O.LocalDispatchApplicationStates.UPDATE_REQUIRED; else if (e = O.LocalDispatchApplicationStates.UP_TO_DATE, null != _) { let e = c.default.fileManager.join(_, "content"), t = (0, f.getBuildPlatform)(); if (null != l && 0 !== l.length) { var S; if (t === O.BuildPlatformTypes.WIN64 && (S = t, !l.some(e => e.platforms.includes(S)))) t = O.BuildPlatformTypes.WIN32; for (let n of l) if (n.platforms.includes(t)) { let t; let { executable: i, name: r, working_dir: s } = n, a = c.default.fileManager.join(e, i); (0, A.isMac)() && !a.startsWith(g) && (a = "".concat(g).concat(a)), t = null != s ? c.default.fileManager.join(e, s) : c.default.fileManager.dirname(a), h[r] = { ...n, id: r, fullExecutablePath: a, fullWorkingDir: t }, null == m && (m = r) } } else if (null != o) { t === O.BuildPlatformTypes.WIN64 && null == o[t] && (t = O.BuildPlatformTypes.WIN32); let n = o[t]; if (null != n) { let { executable: i } = n, r = "Default"; h[r] = { ...n, name: r, id: r, fullExecutablePath: c.default.fileManager.join(e, i), fullWorkingDir: e, platforms: [t] }, m = r } } } return { type: e, applicationId: s, branchId: a, buildId: t, manifestIds: i, targetBuildId: n, targetManifestIds: r, installPath: _, installedSize: E, launchOptions: h, defaultLaunchOptionId: m, shouldPatch: T, storage: d } } case O.DispatchApplicationStates.TRANSITION: { let o; let { stage: l, disk_progress: u, network_progress: d, reader_progress: c, progress: f, total: S, paused: h } = e.state, A = l.type; return { type: o = A === O.DispatchApplicationStages.UNINSTALLING ? O.LocalDispatchApplicationStates.UNINSTALLING : I ? O.LocalDispatchApplicationStates.REPAIRING : null == t ? O.LocalDispatchApplicationStates.INSTALLING : O.LocalDispatchApplicationStates.UPDATING, stage: A, applicationId: s, branchId: a, buildId: t, manifestIds: i, targetBuildId: n, targetManifestIds: r, installPath: _, installedSize: E, diskProgress: u, networkProgress: d, readerProgress: c, progress: f, total: S, paused: h, shouldPatch: T } } } throw Error("Invalid Dispatch State. state=".concat(e.state.type)) }(i[e][t]), null != R[a]) { let e = F(n, a, G); e > 0 && B(v += e); let i = F(n, a, w); i > 0 && x(D += i); let o = F(n, a, k); if (o > 0 && V(M += o), r === t) { let e = n[a]; if (!0 !== e.paused && (e.type === O.LocalDispatchApplicationStates.UNINSTALLING || e.type === O.LocalDispatchApplicationStates.INSTALLING || e.type === O.LocalDispatchApplicationStates.UPDATING)) switch (e.stage) { case O.DispatchApplicationStages.PATCHING: case O.DispatchApplicationStages.FINALIZING: case O.DispatchApplicationStages.VERIFYING: case O.DispatchApplicationStages.REPAIRING: case O.DispatchApplicationStages.POST_INSTALL_SCRIPTS: E.default.setProgress("dispatch_application_progress", (0, h.calculateProgressPercentage)(e.progress, e.total) / 100), s = !0 } } } if (!b) { let i = c.default.fileManager.dirname(n[a].installPath); p.default.getInstallationPath(e, t) !== i && _.default.wait(() => { _.default.dispatch({ type: "DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS", applicationId: e, branchId: t, installationPath: i }) }), -1 === N.default.getQueuePosition(e, t) && (n[a].type === O.LocalDispatchApplicationStates.INSTALLING || n[a].type === O.LocalDispatchApplicationStates.UPDATING) && T.default.hasApplication(e, t) && p.default.shouldBeInstalled(e, t) && _.default.wait(() => { _.default.dispatch({ type: "DISPATCH_APPLICATION_UPDATE", applicationId: e, branchId: t, automatic: !0 }) }) } }!s && "dispatch_application_progress" === E.default.taskID && E.default.clearProgress("dispatch_application_progress"), R = n, b = !0 } }) }, 941128: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"), n("653041"), n("733860"); var i, r, s, a, o, l, u, d, _ = n("392711"), c = n.n(_), E = n("442837"), I = n("433517"), T = n("570140"), f = n("51025"), S = n("594190"), h = n("314897"), A = n("173747"), m = n("780570"), N = n("830168"), p = n("358085"), O = n("417363"), C = n("981631"), R = n("186901"); (a = i || (i = {})).INSTALL = "Install", a.REPAIR = "Repair", (o = r || (r = {})).PATCH = "Patch", o.REPAIR = "Repair"; let g = [R.DispatchErrorCodes.AUTHENTICATION_FAILED, R.DispatchErrorCodes.NOT_ENTITLED], L = "DispatchManagerStore", v = [], D = [], M = !1, y = null, P = null, U = !1, b = new Map, G = !1, w = null; function k() { let e = { queue: v, paused: M, userActions: Array.from(b) }; I.Storage.set(L, e) } function B() { let e = v[0]; if (null != e) { var t, n; let { comboId: i, action: r } = e, { applicationId: s, branchId: a } = (0, m.convertComboId)(i); if (t = s, n = a, (null == y || y.applicationId !== t || y.branchId !== n) && (null == P || P.applicationId !== t || P.branchId !== n)) { let e = h.default.getToken(), t = h.default.getId(); if (null == e) throw Error("missing user token"); G = !N.default.setCurrentTask(s, a, r, t, e) } } } function V(e, t) { let n = (0, m.getComboId)(e, t); return v.findIndex(e => e.comboId === n) } function x(e, t, n, i) { let r = (0, m.getComboId)(e, t), s = { comboId: r, action: i }, a = D.indexOf(r); - 1 !== a && D.splice(a, 1); let o = V(e, t); 0 !== o && (n ? -1 === o && (v.push(s), B()) : (o > 0 && v.splice(o, 1), v.unshift(s), B())), !n && M && N.default.resume(), k() } function F(e, t) { let n = (0, m.getComboId)(e, t), i = D.indexOf(n); - 1 !== i && D.splice(i, 1); let r = V(e, t); - 1 !== r && (v.splice(r, 1), k()), B() } function H(e) { let { applicationId: t, branchId: n } = e; F(t, n) } function Y(e) { let { applicationId: t, branchId: n } = e, i = (0, m.getComboId)(t, n), r = D.indexOf(i); - 1 !== r && D.splice(r, 1) } function j() { let e = h.default.getToken(), t = h.default.getId(); null != e && N.default.setCredentials(t, e) } function W() { for (let e of S.default.getRunningDiscordApplicationIds()) f.cancel(e, e); let e = S.default.getVisibleGame(); return !M && null != e && e.pid !== w && f.pause(), w = null == e ? null : e.pid, !1 } class K extends(s = E.default.Store) { initialize() { var e; let t = null !== (e = I.Storage.get(L)) && void 0 !== e ? e : { queue: null, paused: null, userActions: null }; if (null != t.queue) v = t.queue.map(e => "string" == typeof e ? { comboId: e, action: "Patch" } : e); null != t.paused && (M = t.paused), null != t.userActions && (b = new Map(Array.from(t.userActions))), this.waitFor(O.default, S.default), this.syncWith([S.default], W), this.waitFor(O.default) } get activeItems() { return v.map(e => { let { comboId: t } = e; return (0, m.convertComboId)(t) }) } get finishedItems() { return D.map(m.convertComboId) } get paused() { return M } getQueuePosition(e, t) { return V(e, t) } isCorruptInstallation() { return G } } d = "DispatchManagerStore", (u = "displayName") in(l = K) ? Object.defineProperty(l, u, { value: d, enumerable: !0, configurable: !0, writable: !0 }) : l[u] = d, t.default = new K(T.default, { DISPATCH_APPLICATION_INSTALL: function(e) { let { applicationId: t, branchId: n } = e; b.set((0, m.getComboId)(t, n), "Install"), x(t, n, !1, "Patch") }, DISPATCH_APPLICATION_UPDATE: function(e) { let { applicationId: t, branchId: n, automatic: i } = e; x(t, n, i, "Patch") }, DISPATCH_APPLICATION_UNINSTALL: function(e) { H(e), Y(e) }, DISPATCH_APPLICATION_CANCEL: H, DISPATCH_APPLICATION_REPAIR: function(e) { let { applicationId: t, branchId: n } = e; b.set((0, m.getComboId)(t, n), "Repair"), x(t, n, !1, "Repair") }, DISPATCH_APPLICATION_MOVE_UP: function(e) { let { applicationId: t, branchId: n } = e, i = V(t, n); if (i < 1) return !1; v.splice(0, 0, v.splice(i, 1)[0]), B(), M && N.default.resume(), k() }, DISPATCH_APPLICATION_REMOVE_FINISHED: Y, DISPATCH_APPLICATION_STATE_UPDATE: function(e) { let { state: t } = e; !U && (U = !0, B(), !M && N.default.resume()); let n = M; M = t.paused, y = t.currentTask, P = t.nextTask; let i = !1; v = v.filter(e => { let { comboId: t } = e, { applicationId: n, branchId: r } = (0, m.convertComboId)(t), s = O.default.getState(n, r), a = A.default.getTargetBuildId(n, r), o = A.default.getTargetManifests(n, r); if (null != s && s.type === C.LocalDispatchApplicationStates.UP_TO_DATE && s.buildId === s.targetBuildId && s.buildId === a && c().isEqual(s.manifestIds, s.targetManifestIds) && c().isEqual(s.manifestIds, o)) { if (D.push(t), b.has(t)) { switch (b.get(t)) { case "Install": f.completeInstall(n, s); break; case "Repair": f.completeRepair(n, s) } b.delete(t) } return i = !0, !1 } return !0 }), B(), (i || n !== M) && k() }, DISPATCH_APPLICATION_ERROR: function(e) { let { error: t } = e, { code: n } = t; if (null != n) { if (g.includes(n)) j(); else if (n === R.DispatchErrorCodes.APPLICATION_NOT_FOUND) { let { context: e } = t; if (null != e) { let { application_id: t, branch_id: n } = e; F(t, n) } } } }, CONNECTION_OPEN: function() { (0, p.isDesktop)() && j() }, LOGOUT: function() { I.Storage.remove(L), (0, p.isDesktop)() && N.default.pause() } }) }, 340895: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("442837"), l = n("433517"), u = n("570140"), d = n("695346"), _ = n("581883"), c = n("314897"), E = n("592125"), I = n("885110"), T = n("981631"); let f = "IncomingCallStore", S = { width: 232, height: 315 }, h = new Set, A = [], m = new Map, N = new Set, p = 0, O = 0, C = !1; function R(e) { if (null == e || null == m.get(e)) return !1; m.delete(e), (N = new Set(N)).delete(e) } function g(e) { let { channelId: t, ringing: n } = e, i = n.includes(c.default.getId()); if (!N.has(t) && i) { let e = E.default.getChannel(t); if (null == e) return !1; let n = 10 * N.size; m.set(t, { channel: e, x: p + n, y: O + n }), (N = new Set(N)).add(t) } else { if (!N.has(t) || i) return !1; R(t) } }! function() { let e = l.Storage.get(f); if (null != e) p = +e.x, O = +e.y; else { let e = n("451478").default.windowSize(); p = e.width / 2 - S.width / 2, O = e.height / 2 - S.height / 2 } }(); function L() { C = I.default.getStatus() === T.StatusTypes.DND || d.FocusMode.getSetting() } class v extends(i = o.default.Store) { initialize() { this.waitFor(E.default, I.default), this.syncWith([I.default], L), this.syncWith([_.default], L) } getIncomingCalls() { return C ? A : Array.from(m.values()) } getIncomingCallChannelIds() { return C ? h : N } getFirstIncomingCallId() { return C ? null : N.values().next().value } hasIncomingCalls() { return !C && N.size > 0 } } a = "IncomingCallStore", (s = "displayName") in(r = v) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a, t.default = new v(u.default, { CALL_CREATE: g, CALL_UPDATE: g, CALL_DELETE: function(e) { let { channelId: t } = e; return R(t) }, VOICE_CHANNEL_SELECT: function(e) { let { channelId: t } = e; return R(t) }, INCOMING_CALL_MOVE: function(e) { let { x: t, y: n } = e; return p = t, O = n, l.Storage.set(f, { x: p, y: O }), !1 }, CHANNEL_DELETE: function(e) { let { channel: t } = e; return R(t.id) } }) }, 391690: function(e, t, n) { "use strict"; let i; n.r(t), n("47120"), n("757143"); var r, s = n("442837"), a = n("570140"), o = n("579806"), l = n("358085"), u = n("417363"), d = n("689938"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = {}, E = (0, l.isWindows)() ? "".concat(o.default.process.env.LOCALAPPDATA, "\\DiscordGames") : (0, l.isMac)() ? "/Applications/DiscordGames" : "/tmp"; function I(e, t) { var n; c = { ...c, [e]: { ...null !== (n = c[e]) && void 0 !== n ? n : {}, ...t } } } function T(e) { let { applicationId: t, branchId: n, installationPath: r } = e; null == i.installations[t] && (i.installations[t] = {}), i.installations[t][n] = { installationPath: r }, !i.installationPaths.has(r) && S({ path: r, metadata: {} }) } function f(e) { let { applicationId: t, branchId: n } = e; if (null == i.installations[t]) return !1; delete i.installations[t][n], 0 === Object.keys(i.installations[t]).length && delete i.installations[t] } function S(e) { if (i.installationPaths.has(e.path)) return !1; I(e.path, e.metadata); let t = new Set(i.installationPaths); t.add(e.path), i.installationPaths = t } class h extends(r = s.default.PersistedStore) { initialize(e) { let t = { ...e }; null == t.installations && (t.installations = {}), null == t.defaultInstallationPath && (t.defaultInstallationPath = E), null == t.installationPaths ? t.installationPaths = new Set([t.defaultInstallationPath]) : t.installationPaths = new Set(Array.from(t.installationPaths)), null == t.pathLabels && (t.pathLabels = {}), i = t } getState() { return i } get defaultInstallationPath() { return i.defaultInstallationPath } get installationPaths() { return Array.from(i.installationPaths).map(e => ({ path: e, label: i.pathLabels[e] })) } get installationPathsMetadata() { return c } hasGamesInstalledInPath(e) { let { installations: t } = i; for (let n in t) for (let i in t[n]) if (t[n][i].installationPath === e) return !0; return !1 } shouldBeInstalled(e, t) { return null != i.installations[e] && null != i.installations[e][t] } getInstallationPath(e, t) { return null == i.installations[e] || null == i.installations[e][t] ? null : i.installations[e][t].installationPath } getLabelFromPath(e) { var t, n; return e === E ? d.default.Messages.INSTALL_LOCATION_MAIN : null !== (n = null !== (t = o.default.fileManager.basename(e)) && void 0 !== t ? t : e.replace(/[/\\]+$/, "").split(/[/\\]+/g).slice(-1)[0]) && void 0 !== n ? n : "?" } } _(h, "displayName", "InstallationManagerStore"), _(h, "persistKey", "InstallationManagerStore"), t.default = new h(a.default, { DISPATCH_APPLICATION_INSTALL: T, DISPATCH_APPLICATION_UNINSTALL: f, DISPATCH_APPLICATION_CANCEL: function(e) { let { applicationId: t, branchId: n } = e, i = u.default.getState(t, n); null != i && null == i.buildId && null == i.manifestIds && f({ applicationId: t, branchId: n }) }, INSTALLATION_LOCATION_ADD: S, INSTALLATION_LOCATION_REMOVE: function(e) { var t; let { path: n } = e; if (!i.installationPaths.has(n) || i.defaultInstallationPath === n) return !1; let r = new Set(i.installationPaths); r.delete(n), i.installationPaths = r, t = n, c = { ...c }, delete c[t], ! function(e) { if (null == i.pathLabels[e]) return; i.pathLabels = { ...i.pathLabels }, delete i.pathLabels[e] }(n) }, INSTALLATION_LOCATION_UPDATE: function(e) { let { path: t, label: n, isDefault: r } = e; if (!i.installationPaths.has(t)) return !1; if (null != n && "" !== n && i.pathLabels[t] !== n) { var s, a; s = t, a = n, i.pathLabels = { ...i.pathLabels, [s]: a } } r && i.defaultInstallationPath !== t && (i.defaultInstallationPath = t) }, INSTALLATION_LOCATION_FETCH_METADATA: function(e) { let { metadataPayload: t } = e; for (let e in t) I(e, t[e]) }, DISPATCH_APPLICATION_ADD_TO_INSTALLATIONS: T }) }, 556296: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { DEFAULT_MUTE_KEYBIND: function() { return M } }), n("724458"), n("653041"), n("47120"), n("757143"); var r, s = n("879443"), a = n.n(s), o = n("414861"), l = n.n(o), u = n("348327"), d = n.n(u), _ = n("392711"), c = n.n(_), E = n("442837"), I = n("570140"), T = n("714338"), f = n("710845"), S = n("658785"), h = n("131951"), A = n("626135"), m = n("358085"), N = n("998502"), p = n("13140"), O = n("808506"), C = n("981631"), R = n("356659"), g = n("710111"), L = n("444675"); function v(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let D = new f.default("KeybindsStore"), M = { id: "1000", action: C.GlobalKeybindActions.TOGGLE_MUTE, shortcut: (0, p.toCombo)("mod+shift+m"), enabled: !0, managed: !0, params: {} }, y = {}, P = {}, U = 0, b = !0, G = {}, w = !1, k = [C.GlobalKeybindActions.PUSH_TO_TALK, C.GlobalKeybindActions.TOGGLE_OVERLAY_INPUT_LOCK, C.GlobalKeybindActions.OVERLAY_ACTIVATE_REGION_TEXT_WIDGET]; function B() { let { showKeybindIndicators: e } = S.default.getCurrentConfig({ location: "KeybindsStore" }); null == c().find(P, e => M.action === e.action && e.enabled && e.shortcut.length > 0) && !__OVERLAY__ && !w && b && e && (H(M), w = !0) } function V() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; (w || e) && (F(M.id), w = !1) } function x(e) { let { showKeybindIndicators: t } = e; t ? B() : V(!0) } function F(e) { if (m.isPlatformEmbedded) N.default.inputEventUnregister(parseInt(e, 10)); else if (y[e]) { let t = P[e], n = G[t.action]; (null == n ? void 0 : n.isPressed) === !0 && L.nextTick(() => n.onTrigger(!1, t)), y[e].reset(), y[e] = null } } function H(e) { if (!b || __OVERLAY__) return; let { shortcut: t, action: n, enabled: i } = e; if ("" === t || null == t || n === C.GlobalKeybindActions.UNASSIGNED || !i) return; if (null == G[n]) { D.error("[kb store] KeybindStore: Looking for callback action ".concat(n, " but it doesn't exist in this version. Skipping")); return } let r = e.id, s = G[n].keyEvents; e.action === C.GlobalKeybindActions.TOGGLE_MUTE && V(), ! function(e, t, n, i) { if (m.isPlatformEmbedded) N.default.inputEventRegister(parseInt(e), t, n, i); else { F(e); let r = l()(new(a())(document)); i.keyup && r.bindGlobal((0, p.toString)(t), () => n(!1), "keyup"), i.keydown && r.bindGlobal((0, p.toString)(t), () => n(!0), "keydown"), y[e] = r } }(r, t, e => (function(e, t) { let n = e === M.id ? M : P[e]; null != n && G[n.action].onTrigger(t, n) })(r, e), { focused: !0, blurred: !0, keydown: !1, keyup: !1, ...s }), T.default.validateKeybind((0, p.toString)(e.shortcut)) } function Y(e) { let t = { id: U.toString(), enabled: !0, action: C.GlobalKeybindActions.UNASSIGNED, shortcut: [], managed: !1, params: {}, ...e }; return P = { ...P, [t.id]: t }, U += 1, t } function j(e) { F(e.id), P = { ...P }, delete P[e.id], e.action === C.GlobalKeybindActions.TOGGLE_MUTE && B() } function W(e) { let { keybind: t } = e; P = { ...P, [t.id]: t }, !__OVERLAY__ && (A.default.track(C.AnalyticEvents.USER_SETTINGS_KEYBIND_UPDATED, { keybind_action: t.action, keybind_is_bound: !0, keybind_has_shortcut: t.shortcut.length > 0 }), t.action === C.GlobalKeybindActions.TOGGLE_OVERLAY_INPUT_LOCK ? A.default.track(C.AnalyticEvents.OVERLAY_SETTINGS_UPDATED, { hotkey: t.action === C.GlobalKeybindActions.TOGGLE_OVERLAY_INPUT_LOCK ? (0, p.toString)(t.shortcut) : null }) : t.action === C.GlobalKeybindActions.OVERLAY_ACTIVATE_REGION_TEXT_WIDGET && A.default.track(C.AnalyticEvents.OVERLAY_SETTINGS_UPDATED, { text_activation_hotkey: t.action === C.GlobalKeybindActions.OVERLAY_ACTIVATE_REGION_TEXT_WIDGET ? (0, p.toString)(t.shortcut) : null })), H(t) } function K(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; return null == c().find(P, t => t.action === e && (!n || t.managed === n)) && (H(Y({ action: e, enabled: !0, shortcut: (0, p.toCombo)(t), managed: !0, params: {} })), !0) } let z = [function() { let e = h.default.getShortcuts(); return c().each(P, t => { t.action === C.GlobalKeybindActions.PUSH_TO_TALK && !0 === t.managed && (null == t.context || null == e[t.context]) && j(t) }), c().reduce(h.default.getShortcuts(), (e, t, n) => { let i = c().find(P, e => e.action === C.GlobalKeybindActions.PUSH_TO_TALK && !0 === e.managed && e.context === n); if (null == i) H(Y({ action: C.GlobalKeybindActions.PUSH_TO_TALK, enabled: !0, shortcut: t, managed: !0, params: {}, context: n })); else { if (null == t) return e || !1; W({ keybind: { ...i, shortcut: "string" == typeof t ? (0, p.toCombo)(t) : t, context: n } }) } return !0 }, !1) }, function() { return !!O.default.enabled && K(C.GlobalKeybindActions.TOGGLE_OVERLAY_INPUT_LOCK, "shift+`") }, function() { return !!O.default.enabled && K(C.GlobalKeybindActions.OVERLAY_ACTIVATE_REGION_TEXT_WIDGET, "]`") }, function() { return K(C.GlobalKeybindActions.SOUNDBOARD_HOLD, g.DEFAULT_KEYBIND, !1) }, function() { return K(C.GlobalKeybindActions.SAVE_CLIP, R.DEFAULT_KEYBIND) }]; function Z() { return B(), z.reduce((e, t) => t() || e, !1) } T.default.setGetKeybindList(() => { let e = []; for (let t in P) P.hasOwnProperty(t) && e.push((0, p.toString)(P[t].shortcut)); let { showKeybindIndicators: t } = S.default.getCurrentConfig({ location: "KeybindsStore" }); return t && e.push((0, p.toString)(M.shortcut)), e }); class X extends(r = E.default.DeviceSettingsStore) { initialize(e) { !__OVERLAY__ && this.waitFor(h.default, O.default), P = null != e ? e : {} } getUserAgnosticState() { return P } hasKeybind(e, t, n) { for (let i in P) for (let r of P[i].shortcut) if (r[0] === e && r[1] === t && (void 0 === n || n === r[2])) return !0; return !1 } hasExactKeybind(e) { for (let t in P) { let n = P[t]; if (c().isEqual(n.shortcut, e)) return !0 } return !1 } getKeybindForAction(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], { showKeybindIndicators: i } = S.default.getCurrentConfig({ location: "KeybindsStore" }), r = c().find(P, i => i.action === e && (!t || i.managed) && (!n || i.shortcut.length > 0 && i.enabled)); return null != r ? r : i && e === C.GlobalKeybindActions.TOGGLE_MUTE ? M : null } getOverlayKeybind() { return this.getKeybindForAction(C.GlobalKeybindActions.TOGGLE_OVERLAY_INPUT_LOCK, !0) } getOverlayChatKeybind() { return this.getKeybindForAction(C.GlobalKeybindActions.OVERLAY_ACTIVATE_REGION_TEXT_WIDGET, !0) } } v(X, "displayName", "KeybindsStore"), v(X, "persistKey", "keybinds"), v(X, "migrations", [function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, { v: t, keybinds: n = e } = e; return c().reduce(n, (e, n, i) => isNaN(parseInt(n.id, 10)) || n.id !== i ? e : ((null == t || t < 2) && ("string" == typeof n.shortcut ? (n.shortcut = n.shortcut.replace("escape", "esc").replace("capslock", "caps lock").replace("numlock", "num lock").replace("pageup", "page up").replace("pagedown", "page down"), n.shortcut = (0, p.toCombo)(n.shortcut)) : n.shortcut = n.shortcut.map(e => e.length < 3 ? [...e, (0, p.getEnv)()] : e)), e[i] = n, e), {}) }, e => e, e => { let { keybinds: t = e } = e; return c().reduce(t, (e, t, n) => { if ((0, m.isLinux)() && t.action === C.GlobalKeybindActions.SOUNDBOARD_HOLD) { let n = t.shortcut.map(e => e[1]), i = (0, p.toCombo)("`").map(e => e[1]); if (d()(n, i)) return e } return { ...e, [n]: t } }, {}) }, e => { let t = {}; for (let i in e) { let r = e[i]; if (null != r) { if (null == r.params || null == r.enabled) { var n; r = { ...r, enabled: !1 !== r.enabled, params: null !== (n = r.params) && void 0 !== n ? n : {} } } t[i] = r } } return t }, e => c().reduce(e, (e, t, n) => t.action === C.GlobalKeybindActions.TOGGLE_GO_LIVE_STREAMING && t.managed ? e : { ...e, [n]: t }, {})]), t.default = new X(I.default, { CONNECTION_OPEN: Z, AUDIO_SET_MODE: Z, OVERLAY_SET_ENABLED: Z, RPC_APP_CONNECTED: Z, RPC_APP_DISCONNECTED: Z, KEYBINDS_ADD_KEYBIND: function(e) { let { keybind: t } = e; H(Y(t)) }, KEYBINDS_DELETE_KEYBIND: function(e) { let { id: t } = e, n = P[t]; !__OVERLAY__ && A.default.track(C.AnalyticEvents.USER_SETTINGS_KEYBIND_UPDATED, { keybind_action: n.action, keybind_is_bound: !1, keybind_has_shortcut: !1 }), null != n && j(n) }, KEYBINDS_SET_KEYBIND: W, KEYBINDS_ENABLE_ALL_KEYBINDS: function(e) { let { enable: t } = e; b = t, t ? (T.default.enable(), c().forEach(P, H), B()) : (T.default.disable(), c().forEach(P, e => F(e.id)), V()) }, KEYBINDS_REGISTER_GLOBAL_KEYBIND_ACTIONS: function(e) { let { keybinds: t } = e; G = t, y = {}, U = 0, Object.values(P).filter(e => k.includes(e.action) && e.managed).length !== k.length && Z(), c().forEach(P, e => { U = Math.max(parseInt(e.id, 10), U) + 1; try { H(e) } catch (t) { D.error("Failed to register keybind", e, t) } }), b = !0, null == i && (i = S.default.subscribe({ location: "KeybindsStore" }, x)) } }) }, 808506: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { getOverlayURL: function() { return el } }), n("47120"), n("411104"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"), n("642549"), n("610138"), n("216116"), n("78328"), n("815648"), n("177593"); var s, a, o, l, u, d, _ = n("807864"), c = n("442837"), E = n("570140"), I = n("26151"), T = n("224706"), f = n("765250"), S = n("13245"), h = n("287734"), A = n("579806"), m = n("887278"), N = n("490029"), p = n("710845"), O = n("594190"), C = n("454991"), R = n("633565"), g = n("48481"), L = n("314897"), v = n("77498"), D = n("355863"), M = n("449224"), y = n("626135"), P = n("866119"), U = n("671999"), b = n("998502"), G = n("145597"), w = n("981631"), k = n("987650"); (o = s || (s = {})).ATTACHING = "ATTACHING", o.CONNECTING = "CONNECTING", o.CONNECTED = "CONNECTED", o.READY = "READY", o.CRASHED = "CRASHED", o.CONNECT_FAILED = "CONNECT_FAILED", o.HOOK_FAILED = "HOOK_FAILED"; let B = {}, V = new Map, x = !1, F = new Set, H = !1, Y = !1, j = !1, W = null, K = null, z = "", Z = new Set, X = !1, Q = new Set(["CONNECTION_OPEN", "CONNECTION_RESUMED", "CONNECTION_CLOSED", "WINDOW_INIT", "WINDOW_FULLSCREEN_CHANGE", "WINDOW_FOCUS", "WINDOW_RESIZED", "WINDOW_HIDDEN", "CHANNEL_SELECT", "DELAYED_CHANNEL_SELECT", "DELAYED_SELECT_FLUSH", "LOAD_MESSAGES_SUCCESS", "LOAD_MESSAGES_FAILURE", "LOAD_MESSAGES", "MESSAGE_START_EDIT", "MESSAGE_UPDATE_EDIT", "MESSAGE_END_EDIT", "APP_VIEW_SET_HOME_LINK", "APPLICATION_STORE_LOCATION_CHANGE", "LOGIN", "LOGIN_SUCCESS", "LOGIN_FAILURE", "LOGIN_MFA_STEP", "LOGIN_MFA", "LOGIN_MFA_FAILURE", "LOGIN_MFA_SMS", "LOGIN_MFA_SMS_REQUEST_SUCCESS", "LOGIN_MFA_SMS_FAILURE", "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION", "LOGIN_ACCOUNT_DISABLED", "LOGIN_RESET", "FINGERPRINT", "REGISTER", "REGISTER_SUCCESS", "REGISTER_FAILURE", "VERIFY_FAILURE", "VERIFY_SUCCESS", "START_SESSION", "FORGOT_PASSWORD_SENT", "UPDATE_TOKEN", "SET_CONSENT_REQUIRED", "PASSWORDLESS_START", "PASSWORDLESS_FAILURE", "CONTEXT_MENU_OPEN", "CONTEXT_MENU_CLOSE", "MODAL_PUSH", "MODAL_POP", "MODAL_UPDATE", "MODAL_POP_ALL", "GUILD_SETTINGS_OPEN", "USER_SETTINGS_MODAL_OPEN", "CHANNEL_SETTINGS_OPEN", "NOTIFICATION_SETTINGS_MODAL_OPEN", "EMAIL_VERIFICATION_MODAL_OPEN", "MENTION_MODAL_OPEN", "QUICKSWITCHER_SHOW", "SEARCH_MODAL_OPEN", "IFE_EXPERIMENT_SEARCH_MODAL_OPEN", "INTERACTION_MODAL_CREATE", "INTERACTION_IFRAME_MODAL_CREATE", "GUILD_SETTINGS_CLOSE", "USER_SETTINGS_MODAL_CLOSE", "CHANNEL_SETTINGS_CLOSE", "NOTIFICATION_SETTINGS_MODAL_CLOSE", "EMAIL_VERIFICATION_MODAL_CLOSE", "MENTION_MODAL_CLOSE", "QUICKSWITCHER_HIDE", "SEARCH_MODAL_CLOSE", "IFE_EXPERIMENT_SEARCH_MODAL_CLOSE", "QUICKSWITCHER_SHOW", "QUICKSWITCHER_HIDE", "QUICKSWITCHER_SWITCH_TO", "QUICKSWITCHER_SEARCH", "QUICKSWITCHER_SELECT", "UPDATE_CHANNEL_DIMENSIONS", "UPDATE_CHANNEL_LIST_DIMENSIONS", "UPDATE_GUILD_LIST_DIMENSIONS", "TRACK", "CHANNEL_SETTINGS_OPEN", "CHANNEL_SETTINGS_INIT", "CHANNEL_SETTINGS_CLOSE", "GUILD_SETTINGS_INIT", "GUILD_SETTINGS_OPEN", "GUILD_SETTINGS_CLOSE", "TUTORIAL_INDICATOR_SHOW", "TUTORIAL_INDICATOR_HIDE", "TUTORIAL_INDICATOR_SUPPRESS_ALL", "USER_SETTINGS_ACCOUNT_INIT", "USER_SETTINGS_ACCOUNT_CLOSE", "NOTICE_SHOW", "NOTICE_DISMISS", "NOTICE_DISABLE", "SEARCH_EDITOR_STATE_CHANGE", "SEARCH_EDITOR_STATE_CLEAR", "SEARCH_START", "SEARCH_FINISH", "MOD_VIEW_SEARCH_FINISH", "SEARCH_INDEXING", "SEARCH_CLEAR", "SEARCH_ENSURE_SEARCH_STATE", "SEARCH_AUTOCOMPLETE_QUERY_UPDATE", "SEARCH_CLEAR_HISTORY", "SEARCH_SET_SHOW_BLOCKED_RESULTS", "LAYOUT_CREATE", "POPOUT_WINDOW_OPEN", "POPOUT_WINDOW_CLOSE", "POPOUT_WINDOW_SET_ALWAYS_ON_TOP", "TYPING_START_LOCAL", "TYPING_STOP_LOCAL", "SPOTIFY_SET_ACTIVE_DEVICE", "LOAD_INVITE_SUGGESTIONS", "INVITE_SUGGESTIONS_SEARCH", "IMPERSONATE_UPDATE", "IMPERSONATE_STOP", "CREATE_PENDING_REPLY", "CREATE_SHALLOW_PENDING_REPLY", "DELETE_PENDING_REPLY", "USER_SETTINGS_PROTO_UPDATE_EDIT_INFO", "GUILD_FEED_FETCH_SUCCESS", "APPLICATION_COMMAND_INDEX_FETCH_REQUEST", "APPLICATION_COMMAND_INDEX_FETCH_SUCCESS", "APPLICATION_COMMAND_INDEX_FETCH_FAILURE", "APPLICATION_COMMAND_EXECUTE_BAD_VERSION", "APPLICATION_COMMAND_AUTOCOMPLETE_REQUEST", "APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE", "APPLICATION_COMMAND_SET_ACTIVE_COMMAND", "APPLICATION_COMMAND_SET_PREFERRED_COMMAND", "APPLICATION_COMMAND_UPDATE_OPTIONS", "APPLICATION_COMMAND_UPDATE_CHANNEL_STATE", "APPLICATION_COMMAND_USED", "DCF_HANDLE_DC_SHOWN", "DCF_HANDLE_DC_DISMISSED"]), q = new Set, J = new p.default("OverlayBridgeStore"), $ = "none", ee = (0, _.createObservableLock)({ onContention: (e, t) => J.verbose("overlayLock contention: lastMutexCall ".concat($)), onContentionResolved: () => J.verbose("overlayLock contention: resolved."), onTimeout: (e, t) => { let n = "overlayLock: lastMutexCall ".concat($, "}"); J.error(n), y.default.track(w.AnalyticEvents.OVERLAY_HOOK_RESULT, { success: !1, error_description: n }) }, timeoutMs: 18e4 }); function et(e, t) { return function() { for (var n = arguments.length, i = Array(n), r = 0; r < n; r++) i[r] = arguments[r]; ee(() => t(...i), e) } } function en(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, i = V.get(e); if ((null === n || i === n) && i !== t) { if (null == t ? V.delete(e) : V.set(e, t), null == t || "CRASHED" === t) { var r; W = null; let e = null === A.default || void 0 === A.default ? void 0 : null === (r = A.default.fileManager) || void 0 === r ? void 0 : r.uploadDiscordHookCrashes; null != e && e().then(e => { if (Array.isArray(e) && 0 !== e.length) for (let l of (J.log("transitionOverlayPIDStatus: Uploaded minidumps", e), e)) { var t, n, i, r, s, a, o; if (null == l) continue; let e = null != l.processName ? v.default.getGameByExecutable(l.processName) : null; y.default.track(w.AnalyticEvents.OVERLAY_HOOK_CRASHED, { process_name: null == l ? void 0 : l.processName, game_name: null !== (t = null == e ? void 0 : e.name) && void 0 !== t ? t : null, game_id: null !== (n = null == e ? void 0 : e.id) && void 0 !== n ? n : null, minidump_exception_type: null !== (i = l.exceptionString) && void 0 !== i ? i : null, minidump_exception_module_name: null !== (r = l.exceptionModuleName) && void 0 !== r ? r : null, minidump_relative_crash_address: null !== (s = l.relativeCrashAddress) && void 0 !== s ? s : null, minidump_exception_module_version: null !== (a = l.exceptionModuleVersion) && void 0 !== a ? a : null, minidump_exception_module_code_id: null !== (o = l.exceptionModuleCodeId) && void 0 !== o ? o : null }) } }) } Z.delete(e), J.info("pid=".concat(e, " status transition ").concat(null != i ? i : "DISCONNECTED", " -> ").concat(null != t ? t : "DISCONNECTED"), V), x !== (x = Array.from(V.values()).some(e => "READY" === e)) && b.default.setBackgroundThrottling(!x) } } async function ei(e) { if (b.default.supportsFeature(w.NativeFeatures.CREATE_HOST_ON_ATTACH)) { if (V.size > 0) { $ = "reconcile.getOverlayURL"; let t = await el(); $ = "reconcile.createHostProcess", e.createHostProcess(t, eh, ef) } else $ = "reconcile.destroyHostProcess", e.destroyHostProcess() } else if (H) { let t = await el(); e.createHostProcess(t, eh, ef) } else e.destroyHostProcess() } async function er(e) { !ee.isMutexHeld() && J.error("_attachPIDMustBeLocked: overlayMutex is not held.", e); let t = V.get(e); if (null != t) { J.warn("Trying to attach to pid=".concat(e, ", that is already in status: ").concat(t)); return } $ = "attach.getOverlayModule"; let n = await eu(); $ = "attach.transitionOverlayPIDStatus", en(e, "ATTACHING"), $ = "attach.attachToProcess"; let i = await m.attachToProcess(e); null == i ? ($ = "attach.transitionOverlayPIDStatus (CONNECTING)", en(e, "CONNECTING", "ATTACHING"), $ = "attach.reconcileHostProcess", await ei(n), n.connectProcess(e)) : ($ = "attach.transitionOverlayPIDStatus (HOOK_FAILED)", en(e, "HOOK_FAILED", "ATTACHING"), J.warn("Could not hook to pid=".concat(e, ", error=").concat(i))) } async function es(e) { if (!ee.isMutexHeld() && J.error("_detachPIDMustBeLocked: overlayMutex is not held.", e), !V.has(e)) { J.warn("Trying to detach from pid ".concat(e, ", which is in an unknown state")); return } $ = "detach.getOverlayModule"; let t = await eu(); $ = "detach.transitionOverlayPIDStatus", en(e, null), e !== G.DEV_PID && ($ = "detach.cancelAttachToProcess", m.cancelAttachToProcess(e), $ = "detach.disconnectProcess", t.disconnectProcess(e)), $ = "detach.reconcileHostProcess", await ei(t) } async function ea(e) { var t; if (J.verbose("updateIntendedOverlayPIDs", { isConnectionOpened: j, action: e }), !ee.isMutexHeld() && J.error("updateIntendedOverlayPIDs: overlayMutex is not held.", e), !j && null != e) { J.verbose("updateIntendedOverlayPIDs: Connection is not opened while updating applications.", e); return } async function n(t) { if (!(t in B)) { J.error("Unexpected. ".concat(t, " is not a tracked game?"), B, e); return } let n = B[t]; delete B[t]; try { await n.deconstructor() } catch (e) { J.error("Failed to deconstruct tracked game ".concat(t), e) } } if (null == e || !H) { for (let t of (J.verbose("updateIntendedOverlayPIDs: Removing all.", B, e), Object.keys(B))) await n(Number(t)); return } for (let n of null !== (t = e.added) && void 0 !== t ? t : []) { let t = O.default.getGameOverlayStatus(n); if (J.verbose("updateIntendedOverlayPIDs: newGame", n, t), null != t && t.enabled) switch (n.pid in B && J.error("Unexpected. ".concat(n.pid, " is being added twice?"), B, e), t.overlayMethod) { case k.OverlayMethod.OutOfProcess: let i = await eE(); await i.trackGame(n.pid), B[n.pid] = { method: t.overlayMethod, deconstructor: async () => { let e = await eE(); await e.untrackGame(n.pid) } }; break; case k.OverlayMethod.Hook: !V.has(n.pid) && await er(n.pid), B[n.pid] = { method: t.overlayMethod, deconstructor: async () => { await es(n.pid) } }; break; case k.OverlayMethod.Disabled: J.verbose("updateIntendedOverlayPIDs: disabled", n); break; default: J.error("updateIntendedOverlayPIDs: Unknown overlay method: ".concat(t.overlayMethod)) } } for (let t of e.removed) J.verbose("updateIntendedOverlayPIDs: removedGame", t), await n(t.pid) } let eo = et("updateIntendedOverlayPIDs", e => ea(e)); function el() { return new Promise(e => { eM.addConditionalChangeListener(() => { if (null != i) return e(i), !1 }) }) } let eu = (() => { let e = null; async function t() { if (!k.OVERLAY_SUPPORTED) throw J.error("Attempted to load overlay on an unsupported platform."), Error("Overlay is not supported on this platform."); try { return await b.default.ensureModule("discord_overlay2"), function(e) { for (let t of ["createHostProcess", "connectProcess", "disconnectProcess", "destroyHostProcess"]) null == e[t] && (J.info("polyfilling OverlayModule.".concat(t, "(); Overlay module is probably out of date.")), e[t] = () => void 0); return e }(b.default.requireModule("discord_overlay2")) } catch (e) { throw J.error("failed ensuring discord_overlay2", e), e } } return () => (null == e && (e = t()), e) })(); async function ed(e) { var t, n, i, r, s, a, o; try { let t = await el() + "&oop=true&pid=".concat(e); await (null === A.default || void 0 === A.default ? void 0 : null === (r = A.default.globalOverlay) || void 0 === r ? void 0 : null === (i = r.openWindow) || void 0 === i ? void 0 : i.call(r, t)) } catch (e) { J.log("globalOverlay: Failed to open overlay: ".concat(e), e), null === A.default || void 0 === A.default || null === (a = A.default.window) || void 0 === a || a.close(null === A.default || void 0 === A.default ? void 0 : null === (s = A.default.globalOverlay) || void 0 === s ? void 0 : s.WINDOW_KEY) } return K = e, null !== (o = await (null === A.default || void 0 === A.default ? void 0 : null === (n = A.default.window) || void 0 === n ? void 0 : n.getNativeHandle(null === A.default || void 0 === A.default ? void 0 : null === (t = A.default.globalOverlay) || void 0 === t ? void 0 : t.WINDOW_KEY))) && void 0 !== o ? o : "" } function e_() { var e, t; null === A.default || void 0 === A.default || null === (t = A.default.window) || void 0 === t || t.close(null === A.default || void 0 === A.default ? void 0 : null === (e = A.default.globalOverlay) || void 0 === e ? void 0 : e.WINDOW_KEY), K = null } function ec(e) { let t = M.default.getGameForPID(e); S.default.setAssociatedGame(null != K ? K : -1, e, t) } let eE = (() => { let e = null; async function t() { if (!k.OVERLAY_SUPPORTED || !(0, G.supportsOutOfProcess)()) throw J.error("Attempted to load out of process overlay on an unsupported platform."), Error("Out of Process Overlay is not supported on this platform."); try { var e, t; let { OutOfProcess: n } = await eu(); return null == n || null === (e = n.init) || void 0 === e || e.call(n), n.setClickZoneCallback(eO), n.setHostWindowCallbacks(ed, e_, ec), n.setFocusCallback(ef), null === (t = n.setSuccessfullyShownCallback) || void 0 === t || t.call(n, eS), n } catch (e) { throw J.error("failed loading out of process overlay", e), e } } return () => (null == e && (e = t()), e) })(); function eI() { return eo({ added: O.default.getRunningGames(), removed: [] }) } let eT = et("setOverlayEnabled", async (e, t) => { if (!k.OVERLAY_SUPPORTED || H === e && Y === t) return; H = e, Y = t, C.OverlayStoredSettings.update({ enabled: e, legacyEnabled: t }), eM.emitChange(); let n = await eu(), { OutOfProcess: i } = n; (0, G.setOutOfProcessSupport)(null != i), await ea(void 0), await ei(n), H && eI() }); function ef(e) { if (0 === e) { var t, n; if ((null !== (n = null === (t = B[null != W ? W : 0]) || void 0 === t ? void 0 : t.method) && void 0 !== n ? n : k.OverlayMethod.Disabled) === k.OverlayMethod.OutOfProcess) return } S.default.setFocusedPID(0 === e ? null : e) } function eS(e) { S.default.successfullyShown(e) } function eh(e, t, n) { var i; let r = null === (i = O.default.getGameForPID(e)) || void 0 === i ? void 0 : i.name, s = v.default.getGameByName(r), a = { game_name: r, game_id: null == s ? null : s.id, success: t, ...n }; (0, f.createLayout)(G.OVERLAY_LAYOUT_ID, D.default.getDefaultLayout(G.OVERLAY_LAYOUT_ID), { width: n.graphics_width, height: n.graphics_height }), y.default.track(w.AnalyticEvents.OVERLAY_HOOK_RESULT, a), J.info("Overlay connection to ".concat(e, " ").concat(t ? "succeeded" : "failed"), a), t ? en(e, "CONNECTED", "CONNECTING") : en(e, "CONNECT_FAILED", "CONNECTING") } function eA() { let e = L.default.getToken(), t = L.default.getId(); null != e && N.send({ type: w.OverlayEventTypes.DISPATCH, pid: null, token: null, payloads: [{ type: "UPDATE_TOKEN", token: e, userId: t }] }) } async function em(e) { let t = await eu(); null != W && W !== G.DEV_PID && t.sendCommand(W, { message: "intercept_input", intercept: !e }), (0, G.supportsOutOfProcess)() && (await eE()).setInteractionEnabled(!e) } function eN(e) { if (e) { let t = O.default.getVisibleGame(), n = null == t ? null : O.default.getGameOverlayStatus(t); (null == n ? void 0 : n.overlayMethod) === k.OverlayMethod.OutOfProcess ? em(e) : setTimeout(() => em(e), 200) } else em(e) } let ep = null; function eO(e, t, n) { S.default.relayClickZoneClicked(e, t, n) } async function eC(e) { if (!!(0, G.supportsOutOfProcess)())(await eE()).setClickZones(e.map(e => ({ name: e.name, left: e.left, top: e.top, right: e.right, bottom: e.bottom }))) } function eR(e) { return !(X || !x || Q.has(e.type)) && ("USER_SETTINGS_PROTO_UPDATE" === e.type && (e = { ...e, settings: { type: e.settings.type, proto: (0, g.protoToB64WithType)(e.settings.type, e.settings.proto) } }), F.add(e), null == r && (r = setTimeout(eg, 1)), !1) } function eg() { if (null != r && (clearTimeout(r), r = null), !x) { F.clear(); return } F.size > 0 && (N.send({ type: w.OverlayEventTypes.DISPATCH, pid: null, token: null, payloads: Array.from(F) }), F.clear()) } function eL(e) { return null != e && (0, P.constantTimeCompare)(e, z) } function ev(e) { switch (0, e.type) { case w.OverlayEventTypes.CONNECT: let t = L.default.getToken(); if (null == t) break; (0, f.createLayout)(G.OVERLAY_LAYOUT_ID, D.default.getDefaultLayout(G.OVERLAY_LAYOUT_ID)), Promise.all([(0, R.default)(t, e.pid), c.default.PersistedStore.getAllStates()]).then(t => { let [n, i] = t, { pid: r, token: s } = e; N.send({ type: w.OverlayEventTypes.STORAGE_SYNC, pid: r, token: s, states: i }), N.send({ type: w.OverlayEventTypes.DISPATCH, pid: r, token: s, payloads: [n] }), en(r, "READY"), S.default.overlayReady(r) }); break; case w.OverlayEventTypes.DISPATCH: if (null != e.payloads) { var n; n = e.payloads, X = !0, n.forEach(e => E.default.dispatch(e)), X = !1 } break; case w.OverlayEventTypes.LOG_MESSAGES: J.info("[overlay data received]", e.payload) } } class eD extends(a = c.default.Store) { initialize() { !(!k.OVERLAY_SUPPORTED || __OVERLAY__) && (this.waitFor(O.default, L.default), N.setReceiveCommandHandler(ev, eL), L.default.addChangeListener(eA), eT(C.OverlayStoredSettings.enabled, C.OverlayStoredSettings.legacyEnabled), E.default.addInterceptor(eR)) } isInputLocked(e) { return !Z.has(e) } isSupported() { return k.OVERLAY_SUPPORTED } get enabled() { return H } get legacyEnabled() { return Y } getFocusedPID() { return W } isReady(e) { return "READY" === V.get(e) } isCrashed(e) { return "CRASHED" === V.get(e) } } d = "OverlayBridgeStore", (u = "displayName") in(l = eD) ? Object.defineProperty(l, u, { value: d, enumerable: !0, configurable: !0, writable: !0 }) : l[u] = d; let eM = new eD(E.default, __OVERLAY__ ? { OVERLAY_RELAY_CLICK_ZONE_CLICKED: function(e) { let { normalizedMouseX: t, normalizedMouseY: n } = e; setTimeout(() => { let e = Math.ceil(t * window.innerWidth), i = Math.ceil(n * window.innerHeight), r = (0, U.createMouseEvent)("click", e, i); (0, U.dispatchEventToPoint)(r, e, i) }, 50) }, OVERLAY_SET_ASSOCIATED_GAME: function(e) { if (!(0, G.isOutOfProcess)()) return; (0, G.setPID)(e.associatedGamePID); let t = () => new Promise(e => { requestAnimationFrame(() => { let t = new MessageChannel; t.port1.onmessage = () => { e() }, t.port2.postMessage(void 0) }) }), n = 0, i = () => { 15 === n ? S.default.notifyReadyToShow(e.associatedGamePID) : (n += 1, t().then(i)) }; i() } } : { CONNECTION_OPEN: function() { j = !0, eI() }, CONNECTION_CLOSED: function() { j = !1, W = null, eo(void 0) }, OVERLAY_SET_ENABLED: function(e) { let { enabled: t, legacyEnabled: n } = e; return eT(t, n), !1 }, OVERLAY_FOCUSED: function(e) { let { pid: t } = e; W = t }, RUNNING_GAMES_CHANGE: function(e) { eo(e) }, OVERLAY_SET_INPUT_LOCKED: function(e) { let { locked: t, pid: n } = e, i = V.get(n); if (t || "READY" === i || "CRASHED" === i) { if (t ? Z.delete(n) : Z.add(n), q.clear(), null != ep && (clearTimeout(ep), ep = null, t)) return; t ? eN(t) : ep = setTimeout(() => { eN(t), ep = null }, 100) } }, OVERLAY_ACTIVATE_REGION: function(e) { let { region: t } = e; q.add(t), eN(!1) }, OVERLAY_DEACTIVATE_ALL_REGIONS: function() { q.clear(), eN(!0) }, RPC_SERVER_READY: function(e) { let { port: t } = e; z = btoa(String.fromCharCode(...crypto.getRandomValues(new Uint8Array(8)))); let n = new URLSearchParams; n.append("build_id", "8859d86f652369439a29467760910a7cd4d2dade"), n.append("rpc", String(t)), n.append("rpc_auth_token", z), i = "".concat(location.protocol, "//").concat(location.host, "/overlay?").concat(n.toString()) }, OVERLAY_CALL_PRIVATE_CHANNEL: function(e) { let { channelId: t, ring: n } = e; setImmediate(() => { h.default.selectPrivateChannel(t), I.default.call(t, !1, !!n) }) }, OVERLAY_JOIN_GAME: function(e) { let { userId: t, sessionId: n, applicationId: i, channelId: r, messageId: s } = e; setImmediate(() => { T.default.join({ userId: t, sessionId: n, applicationId: i, channelId: r, messageId: s }), null != W && S.default.setLocked(!0, W) }) }, OVERLAY_CRASHED: function(e) { let { pid: t } = e; en(t, "CRASHED") }, RUNNING_GAME_TOGGLE_OVERLAY: function(e) { if (J.verbose("handleGameToggleOverlay", e), !("pid" in e.game)) { J.verbose("handleGameToggleOverlay: Game was not a RunningGame.", e); return } let t = [e.game]; eo({ added: e.newEnabledValue ? t : [], removed: e.newEnabledValue ? [] : t }) }, OVERLAY_SET_CLICK_ZONES: function(e) { let { zones: t } = e; eC(t) }, OVERLAY_SET_ASSOCIATED_GAME: function(e) { var t, n; if ((null !== (n = null === (t = B[e.previousAssociatedGamePID]) || void 0 === t ? void 0 : t.method) && void 0 !== n ? n : k.OverlayMethod.Disabled) !== k.OverlayMethod.OutOfProcess) return; let i = V.get(e.previousAssociatedGamePID); null != i && (V.delete(e.previousAssociatedGamePID), V.set(e.associatedGamePID, i)), Z.delete(e.previousAssociatedGamePID), K = e.associatedGamePID }, OVERLAY_NOTIFY_READY_TO_SHOW: function(e) { eE().then(t => { null == t || t.readyToShow(e.pid) }) } }); t.default = eM }, 237997: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"); var i, r = n("442837"), s = n("433517"), a = n("570140"), o = n("284737"), l = n("490029"), u = n("48481"), d = n("131704"), _ = n("314897"), c = n("592125"), E = n("984933"), I = n("355863"), T = n("914010"), f = n("358085"), S = n("998502"), h = n("145597"), A = n("451478"), m = n("981631"), N = n("987650"); function p(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let O = Object.freeze({ selectedGuildId: null, selectedChannelId: null, displayUserMode: m.OverlayDisplayUsers.ALWAYS, displayNameMode: m.OverlayDisplayNames.ALWAYS, avatarSizeMode: m.OverlayAvatarSizes.LARGE, notificationPositionMode: m.OverlayNotificationPositions.TOP_LEFT, textChatNotifications: m.OverlayNotificationTextChatTypes.ENABLED, disableExternalLinkAlert: !1, disablePinTutorial: !1, showKeybindIndicators: !0, textWidgetOpacity: N.OpacityBounds.LOWER }), C = null, R = {}, g = null, L = new Set, v = !1, D = null, M = !1, y = !1, P = new Set, U = !1; function b(e) { let t = R[e]; return null == t && (t = R[e] = { ...O }), t } let G = { ...O }, w = new Set(["AUDIO_SET_INPUT_DEVICE", "AUDIO_SET_INPUT_VOLUME", "AUDIO_SET_LOCAL_VIDEO_DISABLED", "AUDIO_SET_LOCAL_VOLUME", "AUDIO_SET_MODE", "AUDIO_SET_NOISE_CANCELLATION", "AUDIO_SET_NOISE_SUPPRESSION", "AUDIO_SET_OUTPUT_DEVICE", "AUDIO_SET_OUTPUT_VOLUME", "AUDIO_TOGGLE_LOCAL_MUTE", "AUDIO_TOGGLE_SELF_DEAF", "AUDIO_TOGGLE_SELF_MUTE", "BILLING_SUBSCRIPTION_UPDATE_SUCCESS", "CATEGORY_COLLAPSE", "CATEGORY_EXPAND", "CHANNEL_ACK", "CHANNEL_PRELOAD", "GIFT_CODE_REDEEM", "GIFT_CODE_REDEEM_FAILURE", "GIFT_CODE_REDEEM_SUCCESS", "HOTSPOT_HIDE", "INVITE_MODAL_CLOSE", "LAYOUT_CREATE", "LAYOUT_CREATE_WIDGETS", "LAYOUT_DELETE_ALL_WIDGETS", "LAYOUT_DELETE_WIDGET", "LAYOUT_SET_PINNED", "LAYOUT_SET_TOP_WIDGET", "LAYOUT_UPDATE_WIDGET", "LOAD_MESSAGES", "LOAD_MESSAGES_FAILURE", "LOAD_MESSAGES_SUCCESS", "MEDIA_ENGINE_SET_GO_LIVE_SOURCE", "OVERLAY_ACTIVATE_REGION", "OVERLAY_DEACTIVATE_ALL_REGIONS", "OVERLAY_MESSAGE_EVENT_ACTION", "OVERLAY_SET_AVATAR_SIZE_MODE", "OVERLAY_SET_CLICK_ZONES", "OVERLAY_SET_DISPLAY_NAME_MODE", "OVERLAY_SET_DISPLAY_USER_MODE", "OVERLAY_SET_INPUT_LOCKED", "OVERLAY_SET_NOTIFICATION_POSITION_MODE", "OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE", "OVERLAY_SET_SHOW_KEYBIND_INDICATORS", "OVERLAY_SET_TEXT_WIDGET_OPACITY", "OVERLAY_SET_UI_LOCKED", "OVERLAY_NOTIFY_READY_TO_SHOW", "PREMIUM_PAYMENT_ERROR_CLEAR", "PREMIUM_PAYMENT_MODAL_CLOSE", "PREMIUM_PAYMENT_MODAL_OPEN", "PREMIUM_PAYMENT_SUBSCRIBE_FAIL", "PREMIUM_PAYMENT_SUBSCRIBE_SUCCESS", "PREMIUM_PAYMENT_UPDATE_FAIL", "PREMIUM_PAYMENT_UPDATE_SUCCESS", "PREMIUM_REQUIRED_MODAL_CLOSE", "PREMIUM_REQUIRED_MODAL_OPEN", "PURCHASE_CONFIRMATION_MODAL_CLOSE", "PURCHASE_CONFIRMATION_MODAL_OPEN", "SKU_PURCHASE_CLEAR_ERROR", "SKU_PURCHASE_FAIL", "SKU_PURCHASE_MODAL_CLOSE", "SKU_PURCHASE_MODAL_OPEN", "SKU_PURCHASE_PREVIEW_FETCH_SUCCESS", "SKU_PURCHASE_SHOW_CONFIRMATION_STEP", "SKU_PURCHASE_START", "SKU_PURCHASE_SUCCESS", "STREAM_CLOSE", "STREAM_START", "VOICE_CHANNEL_SELECT", "USER_SETTINGS_PROTO_ENQUEUE_UPDATE", "USER_SETTINGS_PROTO_LOAD_IF_NECESSARY"]), k = new Set([...w.values(), "ACTIVITY_INVITE_MODAL_CLOSE", "CALL_DELETE", "CHANNEL_COLLAPSE", "CHANNEL_SELECT", "GUILD_SOUNDBOARD_SOUND_PLAY_LOCALLY", "OVERLAY_CALL_PRIVATE_CHANNEL", "OVERLAY_JOIN_GAME", "OVERLAY_NOTIFICATION_EVENT", "OVERLAY_SELECT_CALL", "OVERLAY_SET_NOT_IDLE", "OVERLAY_SOUNDBOARD_SOUNDS_FETCH_REQUEST", "OVERLAY_WIDGET_CHANGED", "SOUNDBOARD_SET_OVERLAY_ENABLED", "STREAM_STOP"]); function B() { if (!__OVERLAY__) return !1; let e = C === (0, h.getPID)(), t = L.has((0, h.getPID)()) || P.size > 0; e && t ? (0, o.focus)(window, !0) : (0, o.focus)(window, !1) } function V() { if (C !== (0, h.getPID)()) return !1; P.clear() } function x(e) { let t = (0, h.getPID)(); if (null == e.pid || e.pid === t) switch (e.type) { case m.OverlayEventTypes.STORAGE_SYNC: r.default.PersistedStore.initializeAll(e.states); break; case m.OverlayEventTypes.DISPATCH: null != e.payloads && (M = !0, e.payloads.forEach(e => (function(e) { var t, n, i, r, s, o; if ("OVERLAY_INITIALIZE" === e.type && (null == (o = e).version && 1 === h.OVERLAY_VERSION || o.version === h.OVERLAY_VERSION || (a.default.dispatch({ type: "OVERLAY_INCOMPATIBLE_APP" }), (0, l.disconnect)(), 0))) y = !0; if (y) switch (e.type) { case "CHANNEL_CREATE": case "THREAD_CREATE": case "THREAD_UPDATE": case "CHANNEL_DELETE": case "THREAD_DELETE": let _ = (0, d.createChannelRecord)(e.channel); if (!d.ALL_CHANNEL_TYPES.has(_.type)) break; a.default.dispatch({ type: e.type, channel: _ }); break; case "CHANNEL_UPDATES": a.default.dispatch({ type: e.type, channels: e.channels.map(e => (0, d.createChannelRecord)(e)) }); break; case "CONNECTION_OPEN_SUPPLEMENTAL": e.lazyPrivateChannels = (null !== (t = e.lazyPrivateChannels) && void 0 !== t ? t : []).map(e => (0, d.createChannelRecord)(e)), a.default.dispatch(e); break; case "THREAD_LIST_SYNC": a.default.dispatch({ ...e, threads: e.threads.map(e => (0, d.createChannelRecord)(e)) }); break; case "GUILD_CREATE": let c = e => (0, d.createChannelRecord)(e), E = e.guild; E.channels = null !== (r = null === (n = E.channels) || void 0 === n ? void 0 : n.map(c)) && void 0 !== r ? r : null, E.threads = null === (i = E.threads) || void 0 === i ? void 0 : i.map(c), null != E.channelUpdates && (E.channelUpdates.writes = null === (s = E.channelUpdates.writes) || void 0 === s ? void 0 : s.map(c)), a.default.dispatch({ type: "GUILD_CREATE", guild: E }); break; case "USER_SETTINGS_PROTO_UPDATE": a.default.dispatch({ ...e, settings: { proto: (0, u.b64ToProtoWithType)(e.settings.type, e.settings.proto), type: e.settings.type } }); break; default: a.default.dispatch(e) } })(e)), M = !1) } } class F extends(i = r.default.PersistedStore) { initialize(e) { if (this.waitFor(_.default), this.syncWith([_.default], () => { let e = _.default.getId(); G = null != e ? b(e) : { ...O } }), __OVERLAY__ && (f.isPlatformEmbedded && S.default.requireModule("discord_overlay2"), L.delete((0, h.getPID)())), null != e) { R = e; let t = _.default.getId(); null != t && (null == (G = b(t)).textChatNotifications && (G.textChatNotifications = O.textChatNotifications), null == G.textWidgetOpacity && (G.textWidgetOpacity = O.textWidgetOpacity)) } } getState() { return R } isUILocked(e) { return !L.has(e) } isInstanceUILocked() { if (!__OVERLAY__) throw Error("OverlayStore: App instance should never call .isInstanceUILocked()"); return !L.has((0, h.getPID)()) } isInstanceFocused() { if (!__OVERLAY__) throw Error("OverlayStore: App instance should never call .isInstanceFocused()"); return C === (0, h.getPID)() } isFocused(e) { return C === e } isPinned(e) { let t = I.default.getLayout(h.OVERLAY_LAYOUT_ID); return null != t && null != t.widgets.find(t => { let n = I.default.getWidget(t); return null != n && n.type === e && !!n.pinned || !1 }) } getSelectedGuildId() { return G.selectedGuildId } getSelectedChannelId() { return G.selectedChannelId } getSelectedCallId() { return g } getDisplayUserMode() { return G.displayUserMode } getDisplayNameMode() { return G.displayNameMode } getAvatarSizeMode() { return G.avatarSizeMode } getNotificationPositionMode() { return G.notificationPositionMode } getTextChatNotificationMode() { return G.notificationPositionMode === m.OverlayNotificationPositions.DISABLED ? m.OverlayNotificationTextChatTypes.DISABLED : G.textChatNotifications } get showKeybindIndicators() { return null == G.showKeybindIndicators || G.showKeybindIndicators } getDisableExternalLinkAlert() { return G.disableExternalLinkAlert } getFocusedPID() { return C } get initialized() { return y } get incompatibleApp() { return v } getActiveRegions() { return P } getTextWidgetOpacity() { return G.textWidgetOpacity } isPreviewingInGame() { return U } } p(F, "displayName", "OverlayStore"), p(F, "persistKey", "OverlayStoreV2"), p(F, "migrations", [() => { let { pinnedWidgets: e, positions: t, sizes: n, v: i, ...r } = { ...s.Storage.get("OverlayStore") }; return { ...O, ...5 === i ? r : null } }, e => { let t = _.default.getId(); return null == e || null == t ? {} : { [t]: { ...e } } }]), t.default = new F(a.default, { LOGOUT: function(e) { !e.isSwitchingAccount && (R = {}) }, MULTI_ACCOUNT_REMOVE_ACCOUNT: function(e) { e.userId in R && delete R[e.userId] }, CONNECTION_CLOSED: function() { L.clear() }, OVERLAY_START_SESSION: function() { a.default.addInterceptor(e => { if (M || !k.has(e.type)) return !1; if ("CHANNEL_SELECT" === e.type) { let { guildId: t, channelId: n } = e; return null != n && ((0, l.send)({ type: m.OverlayEventTypes.DISPATCH, pid: (0, h.getPID)(), token: (0, h.getRPCAuthToken)(), payloads: [{ type: "CHANNEL_PRELOAD", guildId: t === m.ME ? null : t, channelId: n, context: m.CURRENT_APP_CONTEXT }, { type: "OVERLAY_SELECT_CHANNEL", guildId: t, channelId: n }] }), !1) } return (0, l.send)({ type: m.OverlayEventTypes.DISPATCH, pid: (0, h.getPID)(), token: (0, h.getRPCAuthToken)(), payloads: [e] }), !w.has(e.type) }), (0, l.setReceiveEventHandler)(x, (0, h.getRPCAuthToken)()), (0, l.connect)(), (0, l.send)({ type: m.OverlayEventTypes.CONNECT, pid: (0, h.getPID)(), token: (0, h.getRPCAuthToken)() }) }, OVERLAY_INITIALIZE: function(e) { let { focusedPID: t } = e; C = t }, OVERLAY_READY: function() { let e = G.selectedGuildId, t = G.selectedChannelId; if (null != e && (!E.default.hasChannels(e) || null != t && !E.default.hasSelectableChannel(e, t)) && (e = null, t = null), null != t && null == c.default.getChannel(t) && (e = null, t = null), null == e && null == t && (e = T.default.getGuildId()), null != e && null == t) { let n = E.default.getDefaultChannel(e); null != n && (t = n.id) } G.selectedGuildId = e, G.selectedChannelId = t }, OVERLAY_FOCUSED: function(e) { let { pid: t } = e; C = t, B() }, OVERLAY_SELECT_CHANNEL: function(e) { let { guildId: t, channelId: n } = e; G.selectedGuildId = t, G.selectedChannelId = n }, OVERLAY_SELECT_CALL: function(e) { let { callId: t } = e; g = t }, CALL_DELETE: function() { g = null }, LAYOUT_CREATE: function() {}, OVERLAY_SET_DISPLAY_NAME_MODE: function(e) { let { mode: t } = e; G.displayNameMode = t }, OVERLAY_SET_DISPLAY_USER_MODE: function(e) { let { mode: t } = e; G.displayUserMode = t }, OVERLAY_SET_AVATAR_SIZE_MODE: function(e) { let { mode: t } = e; G.avatarSizeMode = t }, OVERLAY_SET_NOTIFICATION_POSITION_MODE: function(e) { let { mode: t } = e; G.notificationPositionMode = t }, OVERLAY_SET_TEXT_CHAT_NOTIFICATION_MODE: function(e) { let { mode: t } = e; G.textChatNotifications = t }, OVERLAY_SET_SHOW_KEYBIND_INDICATORS: function(e) { let { shouldShow: t } = e; G.showKeybindIndicators = t }, OVERLAY_SET_TEXT_WIDGET_OPACITY: function(e) { let { opacity: t } = e, n = G.textWidgetOpacity !== t; return G.textWidgetOpacity = t, n }, OVERLAY_DISABLE_EXTERNAL_LINK_ALERT: function() { G.disableExternalLinkAlert = !0 }, OVERLAY_INCOMPATIBLE_APP: function() { v = !0 }, OVERLAY_SET_UI_LOCKED: function(e) { let { locked: t, pid: n } = e; t ? L.delete(n) : L.add(n), V(), B(), U = !1 }, OVERLAY_ACTIVATE_REGION: function(e) { let { region: t } = e; if (C !== (0, h.getPID)() || P.has(t)) return !1; P.add(t) }, OVERLAY_DEACTIVATE_ALL_REGIONS: V, OVERLAY_SET_PREVIEW_IN_GAME_MODE: function(e) { U = e.isPreviewingInGame }, WINDOW_RESIZED: function() { if (__OVERLAY__) { let e = A.default.windowSize(); !(0, h.validResolution)(e) && (U = !1) } }, OVERLAY_SET_ASSOCIATED_GAME: function(e) { L.delete(e.previousAssociatedGamePID) } }) }, 451478: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a, o = n("512722"), l = n.n(o), u = n("442837"), d = n("570140"), _ = n("830917"); let c = null, E = new Map; function I(e) { let t = E.get(e); return null == t ? (console.warn("Window state not initialized", e), { isElementFullscreen: !1, focused: !1, windowSize: { width: 0, height: 0 }, visible: !1 }) : t } class T extends(i = u.default.Store) { isFocused() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : (0, _.getMainWindowId)(); return I(e).focused } isVisible() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : (0, _.getMainWindowId)(); return I(e).visible } getFocusedWindowId() { let e = null; return E.forEach((t, n) => { t.focused && (e = n) }), e } getLastFocusedWindowId() { return c } isElementFullScreen() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : (0, _.getMainWindowId)(); return I(e).isElementFullscreen } windowSize() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : (0, _.getMainWindowId)(); return I(e).windowSize } } a = "WindowStore", (s = "displayName") in(r = T) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a; let f = new T(d.default, { WINDOW_INIT: function(e) { l()(!E.has(e.windowId), "Window initialized multiple times"); let { width: t, height: n, isElementFullscreen: i, focused: r, visible: s } = e; return E.set(e.windowId, { windowSize: { width: t, height: n }, isElementFullscreen: i, focused: r, visible: s }), r && (c = e.windowId), !0 }, WINDOW_FULLSCREEN_CHANGE: function(e) { let t = I(e.windowId); return t.isElementFullscreen !== e.isElementFullscreen && (E.set(e.windowId, { ...t, isElementFullscreen: e.isElementFullscreen }), !0) }, WINDOW_FOCUS: function(e) { let t = I(e.windowId); return t.focused !== e.focused && (e.focused && (c = e.windowId), E.set(e.windowId, { ...t, focused: e.focused }), !0) }, WINDOW_RESIZED: function(e) { let t = I(e.windowId); return (t.windowSize.width !== e.width || t.windowSize.height !== e.height) && (E.set(e.windowId, { ...t, windowSize: { width: e.width, height: e.height } }), !0) }, WINDOW_UNLOAD: function(e) { return E.delete(e.windowId), c === e.windowId && (c = null), !0 }, WINDOW_VISIBILITY_CHANGE: function(e) { let t = I(e.windowId); return t.visible !== e.visible && (E.set(e.windowId, { ...t, visible: e.visible }), !0) } }); Promise.resolve().then(n.bind(n, "626135")).then(e => { let { addExtraAnalyticsDecorator: t } = e; t(e => { e.client_app_state = f.isFocused() ? "focused" : "unfocused" }) }), t.default = f }, 672938: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("846519"), u = n("285952"), d = n("991463"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function c(e) { let { percentage: t, isSingleLine: n } = e; return (0, r.jsx)("div", { className: o()({ [d.bar]: n, [d.barInMultiLine]: !n }), children: (0, r.jsx)("div", { className: d.barInner, style: { width: "".concat(100 * Math.max(Math.min(t, 1), 0), "%") } }) }) } function E(e) { return String(e).padStart(2, "0") } function I(e) { let { time: t, padLargestUnit: n } = e, i = Math.floor(t) % 60, r = Math.floor(t / 60) % 60, s = Math.floor(t / 3600); return 0 === s ? n ? "".concat(E(r), ":").concat(E(i)) : "".concat(r, ":").concat(E(i)) : n ? "".concat(E(s), ":").concat(E(r), ":").concat(E(i)) : "".concat(s, ":").concat(E(r), ":").concat(E(i)) } class T extends(i = s.PureComponent) { componentDidMount() { this.timer.start(500, () => { this.setState({ now: Date.now() }) }) } componentWillUnmount() { this.timer.stop() } render() { let { start: e, end: t, className: n, themed: i, singleLine: s = !1 } = this.props, { now: a } = this.state, l = (t - e) / 1e3, _ = Math.max(Math.min((a - e) / 1e3, l), 0); return s ? (0, r.jsxs)("div", { className: o()(n, { [d.themed]: i }, d.singleLineContainer), children: [(0, r.jsx)("div", { className: d.textLeftInSingleLine, children: I({ time: _, padLargestUnit: !0 }) }), (0, r.jsx)("div", { className: d.barInSingleLine, children: (0, r.jsx)(c, { percentage: _ / l, isSingleLine: !0 }) }), (0, r.jsx)("div", { className: d.textRight, children: I({ time: l, padLargestUnit: !0 }) })] }) : (0, r.jsxs)("div", { className: o()(n, { [d.themed]: i }), children: [(0, r.jsx)(c, { percentage: _ / l, isSingleLine: !1 }), (0, r.jsxs)(u.default, { children: [(0, r.jsx)(u.default.Child, { grow: 1, className: d.textLeft, children: I({ time: _, padLargestUnit: !1 }) }), (0, r.jsx)(u.default.Child, { grow: 0, className: d.textRight, children: I({ time: l, padLargestUnit: !1 }) })] })] }) } constructor(...e) { super(...e), _(this, "timer", new l.Interval), _(this, "state", { now: Date.now() }) } } _(T, "defaultProps", { themed: !1 }), t.default = T }, 130208: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AttachmentUpload: function() { return T } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("112456"), l = n.n(o), u = n("481060"), d = n("403182"), _ = n("465670"), c = n("689938"), E = n("242206"); let I = e => { let { filename: t } = e, r = (0, d.classifyFileName)(t), s = n("435362")("../images/file_icons/icon-file-".concat(r, ".svg").replace("../images/file_icons/", "./")); return (0, i.jsx)("img", { className: E.icon, src: s, alt: c.default.Messages.IMG_ALT_ATTACHMENT_FILE_TYPE.format({ fileType: r }), title: r }) }, T = e => { let { className: t, filename: n, size: r, progress: s, onCancelUpload: o, onClick: d, onContextMenu: T } = e, f = 100 === s, S = !f && r > 0; return (0, i.jsxs)("div", { className: a()(E.attachment, t), children: [(0, i.jsx)(I, { filename: n }), (0, i.jsxs)("div", { className: E.attachmentInner, children: [(0, i.jsxs)("div", { className: E.filenameWrapper, children: [(0, i.jsx)(u.Clickable, { className: E.filename, onClick: d, onContextMenu: T, children: n }), S ? (0, i.jsx)("div", { className: E.size, children: "— ".concat(l().filesize(r)) }) : null] }), (0, i.jsx)("div", { className: E.progressContainer, children: f ? c.default.Messages.ATTACHMENT_PROCESSING : (0, i.jsx)(u.Progress, { className: E.progress, percent: s }) })] }), f ? null : (0, i.jsx)(u.Clickable, { onClick: o, children: (0, i.jsx)(_.default, { className: E.cancelButton, width: 24, height: 24 }) })] }) }; t.default = e => { let { className: t, url: n, fileName: s, fileSize: o, onClick: d, onContextMenu: _, renderAdjacentContent: c } = e; return (0, i.jsxs)(r.Fragment, { children: [(0, i.jsxs)("div", { className: a()(E.attachment, E.newMosaicStyle, t), children: [(0, i.jsx)(I, { filename: s }), (0, i.jsxs)("div", { className: E.attachmentInner, children: [(0, i.jsx)("div", { className: E.filenameLinkWrapper, children: (0, i.jsx)(u.Anchor, { className: E.fileNameLink, href: n, onClick: d, onContextMenu: _, children: s }) }), (0, i.jsx)("div", { className: E.metadata, children: l().filesize(o) })] })] }), null != c && c()] }) } }, 156361: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAutocompleteRowId: function() { return b }, getAutocompleteTitleId: function() { return G } }), n("411104"), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("392711"), u = n.n(l), d = n("924826"), _ = n("481060"), c = n("607070"), E = n("895924"), I = n("237375"), T = n("342687"), f = n("933557"), S = n("471445"), h = n("511618"), A = n("926491"), m = n("378233"), N = n("430824"), p = n("699516"), O = n("594174"), C = n("768581"), R = n("51144"), g = n("508688"), L = n("286908"), v = n("377087"), D = n("981631"), M = n("185923"), y = n("689938"), P = n("157709"); function U(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function b(e) { return null != e ? "autocomplete-".concat(e) : null } function G(e) { return "autocomplete-".concat(e, "-title") } let w = s.createContext(null); class k extends s.PureComponent { isSelectable() { return this.selectable } renderContent() { throw Error("AutocompleteRow: renderContent must be extended") } renderClickable(e) { var t; let { layoutClass: n, props: { className: i, index: s, selected: a } } = this, l = this.isSelectable(); return (0, r.jsx)(_.Clickable, { ...e, className: o()(P.clickable, i, n), id: null !== (t = b(s)) && void 0 !== t ? t : void 0, onClick: l ? this.handleClick : void 0, onMouseMove: l ? () => { this.setState({ hovered: !0 }), this.handleMouseEnter() } : void 0, onMouseLeave: l ? () => this.setState({ hovered: !1 }) : void 0, role: "option", "aria-disabled": !l, "aria-selected": l && a, children: (0, r.jsx)("div", { className: P.base, children: this.renderContent() }) }) } render() { let { index: e } = this.props; return this.isSelectable() ? (0, r.jsx)(d.ListNavigatorItem, { id: "".concat(e), children: e => this.renderClickable(e) }) : this.renderClickable() } constructor(e) { super(e), U(this, "selectable", !0), U(this, "layoutClass", P.autocompleteRowVertical), U(this, "handleMouseEnter", () => { let { onHover: e, index: t, selected: n } = this.props; null == e || n || "number" != typeof t || e(t) }), U(this, "handleClick", e => { let { onClick: t, index: n } = this.props; null != t && "number" == typeof n && t(n, e) }), this.state = { hovered: !1 } } } class B extends(i = s.PureComponent) { render() { let { children: e, className: t, innerClassName: n, id: i, ...a } = this.props; return s.Children.count(e) > 0 ? (0, r.jsx)(w.Provider, { value: { id: null != i ? i : "" }, children: (0, r.jsx)("div", { className: o()(P.autocomplete, t), children: (0, r.jsx)("div", { className: o()(P.autocompleteInner, n), ...a, children: e }) }) }) : null } } U(B, "Generic", class e extends k { renderContent() { let { text: e, description: t } = this.props; return (0, r.jsxs)(g.AutocompleteRowContent, { children: [(0, r.jsx)(g.AutocompleteRowContentPrimary, { children: (0, r.jsx)(g.AutocompleteRowHeading, { children: e }) }), null != t ? (0, r.jsx)(g.AutocompleteRowContentSecondary, { children: t }) : null] }) } }), U(B, "Loading", function(e) { let t = s.useMemo(() => u().random(60, 120), []); return (0, r.jsx)("div", { className: P.base, "aria-busy": !0, children: (0, r.jsx)(g.AutocompleteRowContent, { children: (0, r.jsx)(g.AutocompleteRowContentPrimary, { children: (0, r.jsx)(g.AutocompleteRowHeading, { children: (0, r.jsx)("div", { className: P.autocompletePlaceholder, style: { width: t } }) }) }) }) }) }), U(B, "Title", function(e) { let { title: t, className: n, children: i } = e, a = s.useContext(w); return (0, r.jsx)("div", { className: P.base, children: (0, r.jsxs)(_.Heading, { id: G(a.id), className: o()(P.contentTitle, n), variant: "heading-deprecated-12/semibold", children: [t, i] }) }) }), U(B, "Divider", class e extends k { renderContent() { let { className: e } = this.props; return (0, r.jsx)("div", { className: o()(e, P.divider) }) } constructor(...e) { super(...e), U(this, "layoutClass", P.dividerContainer), U(this, "selectable", !1) } }), U(B, "User", class e extends k { renderContent() { let { user: e, nick: t, status: n, hidePersonalInformation: i, guildId: s } = this.props; return (0, r.jsxs)(g.AutocompleteRowContent, { children: [(0, r.jsx)(g.AutocompleteRowIcon, { children: (0, r.jsx)(_.Avatar, { size: _.AvatarSizes.SIZE_24, src: e.getAvatarURL(s, 24), "aria-hidden": !0, status: n }) }), (0, r.jsx)(g.AutocompleteRowContentPrimary, { children: (0, r.jsx)(g.AutocompleteRowHeading, { children: null != t ? t : R.default.getName(e) }) }), (0, r.jsxs)(g.AutocompleteRowContentSecondary, { children: [(0, r.jsx)("span", { className: P.__invalid_descriptionUsername, children: R.default.getUserTag(e, { mode: "username", identifiable: i ? "never" : "always" }) }), i || e.isPomelo() ? null : (0, r.jsxs)("span", { className: P.descriptionDiscriminator, children: ["#", e.discriminator] })] })] }) } }), U(B, "Role", class e extends k { renderContent() { let { role: e, hideDescription: t } = this.props, { colorString: n } = e, i = "dot" === c.default.roleStyle, s = "username" === c.default.roleStyle && null != n ? { color: n } : void 0; return (0, r.jsxs)(g.AutocompleteRowContent, { children: [(0, r.jsx)(g.AutocompleteRowContentPrimary, { children: (0, r.jsxs)(g.AutocompleteRowHeading, { children: [i && (0, r.jsx)(_.RoleDot, { className: P.roleDot, color: n, tooltip: !1 }), (0, r.jsxs)("span", { style: s, children: ["@", e.name] })] }) }), t ? null : (0, r.jsx)(g.AutocompleteRowContentSecondary, { children: y.default.Messages.MENTION_USERS_WITH_ROLE })] }) } }), U(B, "Channel", class e extends k { renderContent() { let { channel: e, category: t } = this.props, n = e.type === D.ChannelTypes.GUILD_CATEGORY ? L.default : (0, S.getChannelIconComponent)(e); return (0, r.jsxs)(g.AutocompleteRowContent, { children: [null != n && (0, r.jsx)(g.AutocompleteRowIcon, { children: (0, r.jsx)(n, { className: P.icon }) }), (0, r.jsx)(g.AutocompleteRowContentPrimary, { children: (0, r.jsx)(g.AutocompleteRowHeading, { children: (0, f.computeChannelName)(e, O.default, p.default) }) }), null != t ? (0, r.jsx)(g.AutocompleteRowContentSecondary, { children: t.name }) : null] }) } }), U(B, "Command", class e extends k { renderContent() { let { command: e } = this.props; return (0, r.jsxs)(g.AutocompleteRowContent, { children: [(0, r.jsx)(g.AutocompleteRowIcon, { children: (0, r.jsx)(v.default, { className: P.icon, foreground: P.iconForeground }) }), (0, r.jsx)(g.AutocompleteRowContentPrimary, { children: (0, r.jsx)(g.AutocompleteRowHeading, { children: e.name }) }), (0, r.jsx)(g.AutocompleteRowContentSecondary, { children: e.description })] }) } }), U(B, "NewCommand", class e extends k { isSelectable() { return this.props.command.inputType !== E.ApplicationCommandInputType.PLACEHOLDER } renderContent() { let { command: e, channel: t, showImage: n, section: i, selected: s } = this.props, { hovered: a } = this.state, o = this.isSelectable(); return e.inputType === E.ApplicationCommandInputType.PLACEHOLDER ? (0, r.jsx)(T.default, {}) : (0, r.jsx)(I.default, { command: e, channel: t, showImage: n, showOptions: a || o && s, section: i, isSelectable: o }) } }), U(B, "Emoji", class e extends k { renderContent() { let { emoji: e, sentinel: t, guild: n } = this.props, i = null != e.id || "" !== e.url ? (0, r.jsx)("img", { alt: "", className: P.emojiImage, src: null != e.id ? C.default.getEmojiURL({ id: e.id, animated: e.animated, size: M.EMOJI_URL_BASE_SIZE }) : e.url }) : (0, r.jsx)("span", { className: P.emojiRaw, children: e.surrogates }), s = null != n ? (0, r.jsx)(g.AutocompleteRowContentSecondary, { children: n.name }) : null; return (0, r.jsxs)(g.AutocompleteRowContent, { children: [(0, r.jsx)(g.AutocompleteRowIcon, { children: i }), (0, r.jsx)(g.AutocompleteRowContentPrimary, { children: (0, r.jsxs)(g.AutocompleteRowHeading, { children: [t, e.name, t] }) }), s] }) } constructor(...e) { super(...e), U(this, "layoutClass", o()(P.autocompleteRowVertical, P.autocompleteRowVerticalSmall)) } }), U(B, "GIFIntegration", class e extends k { renderContent() { let { width: e, height: t, src: n } = this.props; return (0, r.jsx)("img", { alt: "", src: n, width: e, height: t }) } constructor(...e) { super(...e), U(this, "layoutClass", P.autocompleteRowHorizontal) } }), U(B, "Sticker", class e extends k { renderContent() { var e, t; let n; let { queryMatch: i, renderSticker: s, selected: a, sticker: o } = this.props, { hovered: l } = this.state; return (0, m.isStandardSticker)(o) ? n = null === (e = A.default.getStickerPack(o.pack_id)) || void 0 === e ? void 0 : e.name : (0, m.isGuildSticker)(o) && (n = null === (t = N.default.getGuild(o.guild_id)) || void 0 === t ? void 0 : t.name), (0, r.jsxs)(g.AutocompleteRowContent, { children: [(0, r.jsx)(g.AutocompleteRowIcon, { children: s(o, l || !0 === a) }), (0, r.jsxs)(g.AutocompleteRowContentPrimary, { children: [(0, r.jsx)(g.AutocompleteRowHeading, { className: P.__invalid_stickerName, children: o.name }), null != i && (0, r.jsx)(g.AutocompleteRowSubheading, { children: y.default.Messages.AUTOCOMPLETE_STICKERS_QUERY_MATCH.format({ queryMatch: i }) })] }), null != n && (0, r.jsx)(g.AutocompleteRowContentSecondary, { children: n })] }) } constructor(...e) { super(...e), U(this, "layoutClass", o()(P.autocompleteRowVertical, P.autocompleteRowVerticalSmall)) } }), U(B, "EmojiUpsell", class e extends k { renderContent() { return (0, r.jsx)(h.default, { emojis: this.props.emojis }) } }), t.default = B }, 508688: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AutocompleteRowContent: function() { return l }, AutocompleteRowContentPrimary: function() { return u }, AutocompleteRowContentSecondary: function() { return E }, AutocompleteRowHeading: function() { return _ }, AutocompleteRowIcon: function() { return d }, AutocompleteRowSubheading: function() { return c } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("157709"); let l = e => { let { children: t, className: n } = e; return (0, i.jsx)("div", { className: s()(o.autocompleteRowContent, n), children: t }) }, u = e => { let { children: t, className: n } = e; return (0, i.jsx)("div", { className: s()(o.autocompleteRowContentPrimary, n), children: t }) }, d = e => { let { children: t, className: n } = e; return (0, i.jsx)("div", { className: s()(o.autocompleteRowIcon, n), children: t }) }, _ = e => { let { children: t, className: n } = e; return (0, i.jsx)(a.Text, { className: s()(n, o.autocompleteRowHeading), color: "interactive-active", variant: "text-md/normal", children: t }) }, c = e => { let { children: t, className: n } = e; return (0, i.jsx)(a.Text, { className: s()(n, o.autocompleteRowSubheading), color: "interactive-normal", variant: "text-xs/normal", children: t }) }, E = e => { let { children: t, className: n } = e; return (0, i.jsx)(a.Text, { className: s()(n, o.autocompleteRowContentSecondary), color: "interactive-normal", variant: "text-xs/normal", children: t }) } }, 468436: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BackdropStyles: function() { return r } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("920906"), d = n("481060"), _ = n("110924"), c = n("190720"); (i = r || (r = {})).SUBTLE = "SUBTLE", i.DARK = "DARK", i.BLUR = "BLUR"; let E = a.forwardRef(function(e, t) { let { backdropStyle: n = "SUBTLE", backdropInstant: i = !1, zIndexBoost: r = 0, LayerComponent: a, isVisible: o, onClose: E } = e, I = function() { let e = (0, d.useToken)(d.tokens.colors.BG_BACKDROP_NO_OPACITY).spring({ opacity: .25 }), t = (0, d.useToken)(d.tokens.colors.BG_BACKDROP).spring(); return { SUBTLE: e, DARK: t, BLUR: t } }()[n], T = (0, d.useToken)(d.tokens.colors.BG_BACKDROP_NO_OPACITY).spring({ opacity: 0 }), f = { background: T, backdropFilter: "blur(0px)" }, S = (0, _.default)(i), h = (0, u.useTransition)(o, { keys: e => e ? "backdrop" : "empty", config: { duration: i || S ? 0 : 300 }, from: f, enter: { background: I, backdropFilter: "blur(".concat("BLUR" === n ? 8 : 0, "px)") }, leave: f }); if (null == a) { let e = { zIndex: 1e3 + r }; return h((t, n) => n ? (0, s.jsx)(u.animated.div, { className: c.backdrop, style: { ...t, ...e }, onClick: E }) : null) } return (0, s.jsx)(a, { children: h((e, t) => t ? (0, s.jsx)(u.animated.div, { className: l()(c.backdrop, c.withLayer), style: e, onClick: E }) : null) }) }); t.default = E }, 467679: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("981729"), o = n("507957"), l = n("674563"), u = n("689938"), d = n("461369"); let _ = e => { let t, { invertColor: n = !1, type: r = l.BotTagTypes.BOT, className: _, verified: c, hideIcon: E = !1, useRemSizes: I = !1, children: T = [] } = e, f = null, S = u.default.Messages.VERIFIED_BOT_TOOLTIP; switch (r) { case l.BotTagTypes.SYSTEM_DM: case l.BotTagTypes.OFFICIAL: c = !0, S = u.default.Messages.DISCORD_SYSTEM_MESSAGE_BOT_TAG_TOOLTIP, f = u.default.Messages.SYSTEM_DM_TAG_SYSTEM; break; case l.BotTagTypes.SERVER: f = u.default.Messages.BOT_TAG_SERVER; break; case l.BotTagTypes.ORIGINAL_POSTER: f = u.default.Messages.BOT_TAG_FORUM_ORIGINAL_POSTER; break; case l.BotTagTypes.STAFF_ONLY_DM: f = u.default.Messages.STAFF_BADGE_TOOLTIP; break; case l.BotTagTypes.AI: c = !0, S = u.default.Messages.AI_GENERATED_TOOLTIP, f = u.default.Messages.AI_TAG; break; case l.BotTagTypes.REMIX: c = !1, f = u.default.Messages.REMIXING_TAG; break; case l.BotTagTypes.BOT: default: f = u.default.Messages.APP_TAG } let h = r === l.BotTagTypes.ORIGINAL_POSTER, A = r === l.BotTagTypes.REMIX, m = null; c && (m = (0, i.jsx)(a.Tooltip, { text: S, align: "center", position: "top", children: e => (0, i.jsx)(o.default, { ...e, className: d.botTagVerified }) })), t = r === l.BotTagTypes.AI ? d.botTagAI : n ? d.botTagInvert : d.botTagRegular; let N = e => (0, i.jsxs)("span", { ...e, className: s()(_, t, I ? d.rem : d.px, { [d.botTagOP]: h, [d.botTagRemix]: A }), children: [E ? null : m, T, (0, i.jsx)("span", { className: d.botText, children: f })] }); switch (r) { case l.BotTagTypes.REMIX: return (0, i.jsx)(a.Tooltip, { text: u.default.Messages.REMIXING_DOWNLOAD_APP, position: "top", children: e => N(e) }); case l.BotTagTypes.ORIGINAL_POSTER: return (0, i.jsx)(a.Tooltip, { text: u.default.Messages.BOT_TAG_FORUM_ORIGINAL_POSTER_TOOLTIP, position: "top", children: e => N(e) }); default: return N() } }; _.Types = l.BotTagTypes, t.default = _ }, 575535: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"), r = n("470079"), s = n("913527"), a = n.n(s), o = n("578807"), l = n.n(o), u = n("442837"), d = n("706454"); n("700659"); var _ = n("678740"); function c(e) { let { value: t = a()().local(), minDate: n, maxDate: s, onSelect: o, calendarClassName: c, autoFocus: E, onClickOutside: I } = e, T = r.useCallback((e, t) => { null == o || o(a()(e), t) }, [o]), f = r.useMemo(() => t.toDate(), [t]), S = r.useMemo(() => null == s ? void 0 : s.toDate(), [s]), h = r.useMemo(() => null == n ? void 0 : n.toDate(), [n]), A = (0, u.useStateFromStores)([d.default], () => d.default.locale), m = r.useRef(null), N = r.useCallback(e => { let t = e.currentTarget; t.classList.contains("react-datepicker__day") && setTimeout(() => { var e, n; if (null === (e = m.current) || void 0 === e ? void 0 : e.contains(t)) return; let i = null === (n = m.current) || void 0 === n ? void 0 : n.querySelector('.react-datepicker__day[tabindex="0"]'); null != i && i.focus() }, 100) }, []); return (0, i.jsx)("div", { ref: m, className: _.calendarPicker, children: (0, i.jsx)(l(), { calendarClassName: c, selected: f, onChange: T, autoFocus: E, fixedHeight: !0, inline: !0, locale: A, maxDate: S, minDate: h, onKeyDown: N, onClickOutside: I }) }) } }, 326413: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("442837"), a = n("607070"), o = n("301822"); function l(e) { let { animationData: t, className: n } = e, [l, u] = (0, r.useState)(0), d = (0, s.useStateFromStores)([a.default], () => a.default.useReducedMotion); return (0, r.useEffect)(() => { let e = l + 1; e < t.length && t[e]() }, [l, t]), (0, i.jsx)(o.default, { importData: t[l], className: n, shouldAnimate: !d, versionKey: l, onComplete: () => { l < t.length - 1 && u(l + 1) }, loop: l === t.length - 1 }) } }, 147915: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NotificationTypes: function() { return r } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("920906"), d = n("481060"), _ = n("855981"), c = n("55543"), E = n("806519"), I = n("329196"); (i = r || (r = {}))[i.UPDATE = 0] = "UPDATE", i[i.NEW = 1] = "NEW"; let T = { config: { friction: 26, tension: 700, mass: 1 }, initial: { scale: 1, opacity: 1 }, from: { scale: .6, opacity: 0 }, enter: { scale: 1, opacity: 1 }, leave: { scale: .6, opacity: 0 } }; t.default = a.memo(function(e) { let { className: t, disabled: n = !1, innerClassName: i, childClassName: r, iconClassName: a, icon: o, children: f, onClick: S, isActive: h, onMouseEnter: A, onMouseLeave: m, onFocus: N, onBlur: p, pulse: O, sparkle: C, notification: R, "aria-label": g, "aria-expanded": L, "aria-haspopup": v, "aria-controls": D } = e, M = (0, u.useTransition)(null != f, { ...T, keys: e => e ? "children" : "icon" }), y = e => { let { component: t } = e; return null != R ? (0, s.jsxs)("div", { className: I.buttonContent, children: [(0, s.jsx)(E.default, { className: I.iconMask, mask: E.MaskIDs.CHAT_INPUT_BUTTON_NOTIFICATION, width: 24, height: 24, children: t }), (0, s.jsx)("span", { className: I.notificationDot })] }) : t }; return (0, s.jsxs)(d.Button, { look: d.Button.Looks.BLANK, size: d.Button.Sizes.NONE, "aria-label": g, "aria-expanded": L, "aria-haspopup": v, "aria-controls": D, disabled: n, className: l()(t, { [I.active]: h }), innerClassName: l()(I.button, i, { [I.pulseButton]: O }), onClick: S, onMouseEnter: A, onMouseLeave: m, onFocus: N, onBlur: p, focusProps: { offset: { top: 4, bottom: 4 } }, children: [M((e, t, n) => { let { key: i } = n; return t ? (0, s.jsx)(u.animated.div, { style: e, className: l()(I.buttonWrapper, r), children: y({ component: f }) }, i) : null != o ? (0, s.jsx)(u.animated.div, { style: e, className: l()(I.buttonWrapper, r), children: y({ component: (0, s.jsx)(o, { className: l()(I.icon, a, { [I.pulseIcon]: O }) }) }) }, i) : void 0 }), C && (0, s.jsxs)("div", { className: I.sparkleContainer, children: [(0, s.jsx)(c.default, { className: I.sparkleStar }), (0, s.jsx)(_.default, { className: I.sparklePlus })] })] }) }) }, 969832: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { CopiableField: function() { return S } }), n("47120"); var s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("846519"), d = n("481060"), _ = n("626135"), c = n("572004"), E = n("757206"), I = n("981631"), T = n("689938"), f = n("167974"); function S(e) { var t; let { className: n, copyValue: o, copyMetaData: S, copyTooltip: h, children: A, disableCopy: m, showCopyIcon: N } = e, [p, O] = a.useState(0), [C, R] = a.useState(!1), [g, L] = a.useState(!1); if (a.useEffect(() => (i = new u.Timeout, r = new u.Timeout, function() { i.stop(), r.stop() }), []), !c.SUPPORTS_COPY || m) return (0, s.jsx)(s.Fragment, { children: A }); let v = [T.default.Messages.COPY_SUCCESS_1, T.default.Messages.COPY_SUCCESS_2, T.default.Messages.COPY_SUCCESS_3, T.default.Messages.COPY_SUCCESS_4, T.default.Messages.COPY_SUCCESS_5, T.default.Messages.COPY_SUCCESS_6, T.default.Messages.COPY_SUCCESS_7, T.default.Messages.COPY_SUCCESS_8, T.default.Messages.COPY_SUCCESS_9, T.default.Messages.COPY_SUCCESS_10, T.default.Messages.COPY_SUCCESS_11], D = Math.min(Math.max(p - 1, 0), v.length - 1), M = null !== (t = v[D]) && void 0 !== t ? t : v[0], y = p >= v.length - 1, P = y ? d.TooltipColors.RED : d.TooltipColors.GREEN, U = C ? P : d.TooltipColors.PRIMARY, b = () => { i.stop(), L(!1) }, G = e => { (0, c.copy)(o), _.default.track(I.AnalyticEvents.TEXT_COPIED, { type: S }), "function" == typeof e && e(), !g && O(p + 1), L(!0), R(!0), i.start(1e3, () => L(!1)), r.start(2e3, () => O(0)) }; return (0, s.jsx)(d.Tooltip, { delay: 500, color: U, forceOpen: g, text: C ? (0, s.jsx)(d.Shaker, { isShaking: y, children: M }) : h, onAnimationRest: (e, t) => { !g && C && t.phase === I.SpringTransitionPhases.LEAVE && R(!1) }, "aria-label": h, children: e => { let { onClick: t, onMouseEnter: i, ...r } = e; return (0, s.jsx)(d.Clickable, { ...r, className: f.clickTarget, onMouseEnter: () => { C ? b() : "function" == typeof i && i() }, onClick: () => { G(t) }, children: (0, s.jsxs)("div", { className: l()(n, f.copiableWrapper), children: [(0, s.jsx)("div", { className: f.childWrapper, children: A }), N ? (0, s.jsx)("div", { className: f.__invalid_copyIconWrapper, children: (0, s.jsx)(E.default, { width: 18, height: 18, className: f.copyIcon }) }) : null] }) }) } }) } }, 525049: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DIAGONAL_FACEPILE_AVATAR_PROPORTION: function() { return s }, DIAGONAL_FACEPILE_AVATAR_STROKE_WIDTH: function() { return i }, DIAGONAL_FACEPILE_MASK_OFFSET: function() { return r }, DIAGONAL_FACEPILE_TYPING_WIDTH_TO_HEIGHT_RATIO: function() { return a } }); let i = 3, r = .5, s = 1, a = 2.5 }, 196050: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("335854"), a = n("481060"), o = n("626135"), l = n("943461"), u = n("981631"), d = n("689938"); t.default = e => { let { href: t, className: n, iconClassName: _, rel: c, target: E, mimeType: I, fileName: T, focusProps: f, onClick: S, ...h } = e, A = r.useMemo(() => s.designConfig.getDefaultLinkInterceptor(t), [t]), m = r.useCallback(e => { o.default.track(u.AnalyticEvents.MEDIA_DOWNLOAD_BUTTON_TAPPED, { attachment_type: null == I ? void 0 : I[0], attachment_subtype: null == I ? void 0 : I[1] }), null == S || S(), null == A || A(e) }, [A, I, S]); return null != T ? (0, i.jsx)(a.Anchor, { href: t, onClick: m, target: E, rel: c, className: n, "aria-label": d.default.Messages.DOWNLOAD, focusProps: f, ...h, children: T }) : (0, i.jsx)(a.Anchor, { href: t, onClick: m, target: E, rel: c, className: n, "aria-label": d.default.Messages.DOWNLOAD, focusProps: f, ...h, children: (0, i.jsx)(l.default, { className: _ }) }) } }, 144036: function(e, t, n) { "use strict"; n.r(t); var i, r = n("735250"), s = n("470079"), a = n("699581"), o = n("748780"), l = n("374470"), u = n("981631"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = (e, t) => { let { x: n, y: i } = e, { x: r, y: s } = t; return Math.pow(n - r, 2) + Math.pow(i - s, 2) }; class c extends(i = s.PureComponent) { componentDidMount() { let { initialX: e, initialY: t } = this.props; this.setPosition(e, t) } componentWillUnmount() { this._removeListeners() } animateToPosition(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, i = arguments.length > 3 ? arguments[3] : void 0, r = !(arguments.length > 4) || void 0 === arguments[4] || arguments[4]; r && this.grabDimensions(); let s = this.translate(e, t); o.default.spring(this.state.position, { toValue: { x: s.x, y: s.y }, ...n }).start(i) } setPosition(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; n && this.grabDimensions(); let i = this.translate(e, t); this.state.position.setValue({ x: i.x, y: i.y }) } grabDimensions() { let e = (0, a.findDOMNode)(this._ref); (0, l.isElement)(e) && (this._height = e.clientHeight, this._width = e.clientWidth) } translate(e, t) { let { maxX: n, maxY: i } = this.props; return e < 0 ? e = 0 : e > n - this._width && (e = n - this._width), t < 0 ? t = 0 : t > i - this._height && (t = i - this._height), { x: e, y: t } } render() { let { dragging: e, position: t } = this.state, { className: n, children: i } = this.props, s = [0, 1], a = ["0px", "1px"], l = o.default.accelerate({ pointerEvents: e ? "none" : "auto", transform: [{ translateX: t.x.interpolate({ inputRange: s, outputRange: a }) }, { translateY: t.y.interpolate({ inputRange: s, outputRange: a }) }], ...this.props.style }); return (0, r.jsx)(o.default.div, { ref: this.handleSetRef, className: n, onMouseDown: this.handleMouseDown, style: l, children: i }) } constructor(e) { super(e), d(this, "_ref", void 0), d(this, "_height", 0), d(this, "_width", 0), d(this, "_dragStart", { x: 0, y: 0 }), d(this, "_offsetX", 0), d(this, "_offsetY", 0), d(this, "_removeListeners", () => {}), d(this, "handleSetRef", e => { this._ref = e }), d(this, "handleMouseDown", e => { let { dragAnywhere: t, disabled: n, selector: i } = this.props; if (n) return; let { position: r } = this.state, s = e.target; if (e.button === u.MouseButtons.PRIMARY && (t || null != i && s.matches(i))) { this.grabDimensions(), this._dragStart = { x: e.clientX, y: e.clientY }, this._offsetX = e.clientX - r.x._value, this._offsetY = e.clientY - r.y._value; let t = e.nativeEvent.view; this._removeListeners(), t.addEventListener("mousemove", this.handleMouseMove), t.addEventListener("mouseup", this.handleMouseUp), this._removeListeners = () => { t.removeEventListener("mousemove", this.handleMouseMove), t.removeEventListener("mouseup", this.handleMouseUp) } } }), d(this, "handleMouseMove", e => { e.preventDefault(); let { onDragStart: t, onDrag: n, disabled: i } = this.props; if (i) return; let { dragging: r, dragging: s } = this.state; !r && _(this._dragStart, { x: e.clientX, y: e.clientY }) > 9 && (r = !0), r && (this.animateToPosition(e.clientX - this._offsetX, e.clientY - this._offsetY, { tension: 80, friction: 8 }, null, !1), this.setState({ dragging: r }, () => { !s && (null == t || t(e.clientX, e.clientY)), null == n || n(e.clientX, e.clientY) })) }), d(this, "handleMouseUp", e => { this._removeListeners(), this.state.dragging && this.setState({ dragging: !1 }, () => { let { onDragEnd: t } = this.props; null == t || t(e.clientX, e.clientY) }) }); let t = new o.default.Value(e.initialX), n = new o.default.Value(e.initialY); this.state = { dragging: !1, position: new o.default.ValueXY({ x: t, y: n }) } } } d(c, "defaultProps", { maxX: 0, maxY: 0, initialX: 0, initialY: 0, disabled: !1, dragAnywhere: !1 }), t.default = c }, 401227: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EMOJI_BUTTON_SPRING_CONFIG: function() { return I } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("920906"), l = n("481060"), u = n("130402"), d = n("153066"), _ = n("185923"), c = n("689938"), E = n("525011"); let I = { tension: 800, friction: 24 }; t.default = function(e) { var t; let { tabIndex: n, className: s, renderButtonContents: T, active: f, onClick: S, "aria-controls": h, focusProps: A } = e, [m, N] = r.useState(!1), [p, O] = r.useState(50), C = m || f, R = (0, d.getClass)(E, "emojiButton", C ? "Hovered" : "Normal"); let g = (t = p, { "--custom-emoji-sprite-size": "".concat(24, "px"), "--custom-emoji-sprite-row": Math.floor(t / 20), "--custom-emoji-sprite-col": t % 20 }), L = r.useCallback(() => { if (!C) N(!0), O(Math.floor(77 * Math.random())), (0, u.initiateEmojiInteraction)(_.EmojiInteractionPoint.EmojiButtonMouseEntered) }, [C, N, O]), v = r.useCallback(() => { N(!1) }, [N]), D = r.useCallback(() => (0, u.initiateEmojiInteraction)(_.EmojiInteractionPoint.EmojiButtonFocused), []); return (0, i.jsx)(l.Button, { look: l.Button.Looks.BLANK, size: l.Button.Sizes.NONE, tabIndex: n, className: a()(R, s), onMouseEnter: L, onMouseOver: L, onMouseLeave: v, onFocus: D, onClick: S, "aria-label": c.default.Messages.SELECT_EMOJI, "aria-controls": h, "aria-expanded": f, "aria-haspopup": "dialog", focusProps: A, children: null != T ? T() : (0, i.jsx)(o.Spring, { config: I, to: { value: C ? 1 : 0 }, children: e => { let { value: t } = e; return (0, i.jsxs)(o.animated.div, { className: E.spriteContainer, style: { ...g, transform: t.to([0, 1], [1, 1.14]).to(e => "scale(".concat(e, ")")) }, children: [(0, i.jsx)("div", { className: a()(E.sprite, E.spriteColored, C ? E.active : E.inactive) }), (0, i.jsx)("div", { className: a()(E.sprite, E.spriteGreyscale, C ? E.inactive : E.active) })] }) } }) }) } }, 586576: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("285952"), u = n("710909"); class d extends r.PureComponent { render() { let { note: e, title: t, action: n, className: r } = this.props; return (0, i.jsx)("div", { className: a()(u.wrapper, r), children: (0, i.jsxs)(l.default, { className: u.flexWrapper, direction: l.default.Direction.VERTICAL, align: l.default.Align.CENTER, justify: l.default.Justify.CENTER, children: [(0, i.jsx)(l.default.Child, { grow: 0, className: u.image }), (0, i.jsxs)(l.default.Child, { grow: 0, className: u.text, children: [(0, i.jsx)(o.H, { className: u.title, children: t }), null != e ? (0, i.jsx)("div", { className: u.note, children: e }) : null] }), n] }) }) } } t.default = d }, 285952: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("335607"), l = n("961047"); let u = { VERTICAL: l.vertical, HORIZONTAL: o.horizontal, HORIZONTAL_REVERSE: o.horizontalReverse }, d = { START: l.justifyStart, END: l.justifyEnd, CENTER: l.justifyCenter, BETWEEN: l.justifyBetween, AROUND: l.justifyAround }, _ = { START: l.alignStart, END: l.alignEnd, CENTER: l.alignCenter, STRETCH: l.alignStretch, BASELINE: l.alignBaseline }, c = { NO_WRAP: l.noWrap, WRAP: l.wrap, WRAP_REVERSE: l.wrapReverse }, E = e => { let { children: t, className: n, shrink: s, grow: l, basis: u, style: d, wrap: _ = !1, ...c } = e, E = { className: n = null != n ? n : o.flexChild, style: { flexGrow: l, flexShrink: s, flexBasis: u, ...d }, ...c }; if (!_ && "string" != typeof t && 1 === r.Children.count(t)) { let e = r.Children.only(t); return E.style = { ...E.style, ...e.props.style }, E.className = a()(e.props.className, n), r.cloneElement(e, E) } return (0, i.jsx)("div", { ...E, children: t }) }; E.defaultProps = { shrink: 1, grow: 1, basis: "auto", wrap: !1 }; let I = e => { let { children: t, className: n, direction: r = u.HORIZONTAL, justify: s = d.START, align: l = _.STRETCH, wrap: E = c.NO_WRAP, shrink: I, grow: T, basis: f, style: S, ...h } = e; return (0, i.jsx)("div", { style: { flexShrink: I, flexGrow: T, flexBasis: f, ...S }, className: a()(o.flex, r, s, l, E, n), ...h, children: t }) }; I.defaultProps = { shrink: 1, grow: 1, basis: "auto" }, I.Child = E, I.Direction = u, I.Align = _, I.Justify = d, I.Wrap = c, t.default = I }, 797717: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("189798"), u = n("237987"); function d(e) { let { children: t, size: n = 16, className: s, flowerStarClassName: d, ..._ } = e, c = r.Children.only(t), E = (0, o.useRedesignIconContext)().enabled; return (0, i.jsxs)("div", { className: a()(u.flowerStarContainer, s), style: { width: n, height: n }, children: [(0, i.jsx)(l.default, { ..._, className: a()(d, u.flowerStar) }), (0, i.jsx)("div", { className: a()(u.childContainer, { [u.redesignIconChildContainer]: E }), children: c })] }) } }, 311715: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("539985"); function o(e) { let { className: t, ...n } = e; return (0, i.jsx)("div", { className: s()(a.gifTag, t), ...n }) } }, 366695: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("829968"), o = n("346656"), l = n("438071"), u = n("474936"), d = n("689938"), _ = n("458217"); let c = { XXSMALL: _.xxsmall, XSMALL: _.xsmall, SMALL: _.small, MEDIUM: _.medium, LARGE: _.large }, E = e => { let t, { game: r, guild: E, skuId: I, pid: T, className: f, guildClassName: S, size: h = c.MEDIUM } = e; if (null != I && (t = function(e) { if (null == e) return null; switch (e) { case u.PremiumSubscriptionSKUs.GUILD: return n("632342"); case u.PremiumSubscriptionSKUs.TIER_0: return n("467596"); case u.PremiumSubscriptionSKUs.TIER_1: return n("670957"); case u.PremiumSubscriptionSKUs.TIER_2: case u.PremiumSubscriptionSKUs.LEGACY: return n("480768"); default: return null } }(I)), null != r && null == t && (t = r.getIconURL(function(e) { switch (e) { case c.XXSMALL: return 16; case c.XSMALL: return 24; case c.SMALL: return 30; case c.MEDIUM: return 40; case c.LARGE: return 60; default: return 80 } }(h))), null == (t = (0, a.default)(T, t)) && null != E) { let e = function(e) { switch (e) { case c.XSMALL: return o.default.Sizes.SMALLER; case c.SMALL: return o.default.Sizes.SMALL; case c.LARGE: return o.default.Sizes.LARGE; default: case c.MEDIUM: return o.default.Sizes.MEDIUM } }(h); return (0, i.jsx)(o.default, { className: s()(_.gameIcon, S, f), guild: E, size: e }) } if (null == t) return (0, i.jsx)(l.default, { className: s()(_.gameIcon, h, f) }); let A = null == r ? void 0 : r.name, m = null != A && "" !== A ? d.default.Messages.APPLICATION_ICON_A11Y_LABEL.format({ applicationName: A }) : d.default.Messages.APPLICATION_ICON_NO_NAME_A11Y_LABEL; return (0, i.jsx)("img", { alt: m, src: t, className: s()(_.gameIcon, h, f) }) }; E.Sizes = c, t.default = E }, 672752: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GradientCssUrls: function() { return l }, Gradients: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("153832"), a = n("692547"); let o = Object.freeze({ PREMIUM_TIER_0: (0, s.v4)(), PREMIUM_TIER_1: (0, s.v4)(), PREMIUM_TIER_2: (0, s.v4)(), PREMIUM_GUILD: (0, s.v4)(), PREMIUM_GUILD_BADGE_V2_BACKGROUND: (0, s.v4)() }), l = { PREMIUM_TIER_0: "url(#".concat(o.PREMIUM_TIER_0, ")"), PREMIUM_TIER_1: "url(#".concat(o.PREMIUM_TIER_1, ")"), PREMIUM_TIER_2: "url(#".concat(o.PREMIUM_TIER_2, ")"), PREMIUM_GUILD: "url(#".concat(o.PREMIUM_GUILD, ")"), PREMIUM_GUILD_BADGE_V2_BACKGROUND: "url(#".concat(o.PREMIUM_GUILD_BADGE_V2_BACKGROUND, ")") }, u = () => (0, i.jsxs)("linearGradient", { id: o.PREMIUM_TIER_0, children: [(0, i.jsx)("stop", { offset: ".1762", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_0_BLUE_FOR_GRADIENTS.css }), (0, i.jsx)("stop", { offset: "0.5351", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_0_BLUE_FOR_GRADIENTS_2.css }), (0, i.jsx)("stop", { offset: "1", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_0_PURPLE_FOR_GRADIENTS.css })] }), d = () => (0, i.jsxs)("linearGradient", { id: o.PREMIUM_TIER_1, children: [(0, i.jsx)("stop", { stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_1_BLUE.css }), (0, i.jsx)("stop", { offset: "1", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_1_PURPLE.css })] }), _ = () => (0, i.jsxs)("linearGradient", { id: o.PREMIUM_TIER_2, children: [(0, i.jsx)("stop", { stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_2_PURPLE_FOR_GRADIENTS.css }), (0, i.jsx)("stop", { offset: "0.502368", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_2_PURPLE_FOR_GRADIENTS_2.css }), (0, i.jsx)("stop", { offset: "1", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_2_PINK_FOR_GRADIENTS.css })] }), c = () => (0, i.jsxs)("linearGradient", { id: o.PREMIUM_GUILD, children: [(0, i.jsx)("stop", { stopColor: a.default.unsafe_rawColors.GUILD_BOOSTING_BLUE.css }), (0, i.jsx)("stop", { offset: "1", stopColor: a.default.unsafe_rawColors.GUILD_BOOSTING_PURPLE.css })] }), E = () => (0, i.jsxs)("linearGradient", { id: o.PREMIUM_GUILD_BADGE_V2_BACKGROUND, gradientTransform: "rotate(45)", children: [(0, i.jsx)("stop", { offset: "0", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_2_PURPLE.css }), (0, i.jsx)("stop", { offset: "1", stopColor: a.default.unsafe_rawColors.PREMIUM_TIER_2_PINK.css })] }), I = r.memo(function() { return (0, i.jsxs)("svg", { viewBox: "0 0 1 1", style: { position: "absolute", pointerEvents: "none", top: -1, left: -1, width: 1, height: 1 }, "aria-hidden": !0, children: [u(), d(), _(), c(), E()] }) }, () => !0); t.default = I }, 940627: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("481060"), d = n("823379"), _ = n("797717"), c = n("24514"), E = n("665786"), I = n("192091"), T = n("507957"), f = n("981631"), S = n("689938"), h = n("298829"); (r = i || (i = {}))[r.PARTNERED = 0] = "PARTNERED", r[r.STAFF = 1] = "STAFF", r[r.VERIFIED = 2] = "VERIFIED", r[r.VERIFIED_AND_PARTNERED = 3] = "VERIFIED_AND_PARTNERED", r[r.VERIFIED_AND_HUB = 4] = "VERIFIED_AND_HUB", r[r.HUB = 5] = "HUB", r[r.NONE = 6] = "NONE"; class A extends a.PureComponent { renderBadge(e, t, n) { let { className: i, badgeStrokeColor: r, tooltipColor: a = u.Tooltip.Colors.BRAND, tooltipPosition: o, tooltipDelay: c, size: E = 16, badgeColor: I, iconClassName: T, flowerStarClassName: f } = this.props, A = function(e) { switch (e) { case 2: return S.default.Messages.GUILD_VERIFIED; case 0: return S.default.Messages.GUILD_PARTNERED; case 3: return S.default.Messages.GUILD_VERIFIED_AND_PARTNERED; case 4: return S.default.Messages.HUB_VERIFIED_DISCORD_HUB; case 5: return S.default.Messages.HUB_DISCORD_HUB; case 1: return S.default.Messages.INTERNAL_EMPLOYEE_ONLY; case 6: return null; default: (0, d.assertNever)(e) } }(e); return (0, s.jsx)(u.Tooltip, { color: a, position: o, delay: c, text: A, children: a => 5 === e || 4 === e ? (0, s.jsx)("div", { ...a, className: l()(n, i), style: { width: E, height: E }, children: (0, s.jsx)(t, { className: l()(h.icon, T) }) }) : (0, s.jsx)(_.default, { ...a, className: l()(n, i), flowerStarClassName: f, color: I, stroke: r, size: E, children: (0, s.jsx)(t, { className: l()(h.icon, T) }) }) }) } render() { let { guild: e } = this.props, t = new Set(e.features); return t.has(f.GuildFeatures.INTERNAL_EMPLOYEE_ONLY) ? this.renderBadge(1, I.default, h.staff) : t.has(f.GuildFeatures.VERIFIED) && t.has(f.GuildFeatures.HUB) ? this.renderBadge(4, c.default, h.verifiedHub) : t.has(f.GuildFeatures.HUB) ? this.renderBadge(5, c.default, h.hub) : t.has(f.GuildFeatures.VERIFIED) && t.has(f.GuildFeatures.PARTNERED) ? this.renderBadge(3, T.default, h.verified) : t.has(f.GuildFeatures.VERIFIED) ? this.renderBadge(2, T.default, h.verified) : t.has(f.GuildFeatures.PARTNERED) ? this.renderBadge(0, E.default, h.partnered) : null } } t.default = A }, 705600: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return b } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("442837"), l = n("692547"), u = n("780384"), d = n("481060"), _ = n("353093"), c = n("979264"), E = n("284363"), I = n("854218"), T = n("623624"), f = n("210887"), S = n("271383"), h = n("594174"), A = n("267642"), m = n("797717"), N = n("672752"), p = n("665786"), O = n("639740"), C = n("433564"), R = n("697725"), g = n("192091"), L = n("507957"), v = n("981631"), D = n("689938"), M = n("530393"); let y = { [E.BadgeCategory.STAFF]: { IconComponent: g.default, foregroundDarkColor: l.default.unsafe_rawColors.WHITE_400.css, foregroundLightColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundDarkColor: l.default.unsafe_rawColors.GREEN_360.css, backgroundLightColor: l.default.unsafe_rawColors.GREEN_360.css }, [E.BadgeCategory.VERIFIED_AND_PARTNERED]: { IconComponent: L.default, foregroundDarkColor: l.default.unsafe_rawColors.WHITE_400.css, foregroundLightColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundDarkColor: l.default.unsafe_rawColors.GREEN_360.css, backgroundLightColor: l.default.unsafe_rawColors.GREEN_360.css }, [E.BadgeCategory.VERIFIED]: { IconComponent: L.default, foregroundDarkColor: l.default.unsafe_rawColors.WHITE_400.css, foregroundLightColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundDarkColor: l.default.unsafe_rawColors.GREEN_360.css, backgroundLightColor: l.default.unsafe_rawColors.GREEN_360.css }, [E.BadgeCategory.PARTNERED]: { IconComponent: p.default, foregroundDarkColor: l.default.unsafe_rawColors.WHITE_400.css, foregroundLightColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundDarkColor: l.default.unsafe_rawColors.BRAND_500.css, backgroundLightColor: l.default.unsafe_rawColors.BRAND_500.css }, [E.BadgeCategory.COMMUNITY]: { IconComponent: O.default, foregroundDarkColor: l.default.unsafe_rawColors.PRIMARY_500.css, foregroundLightColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundDarkColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundLightColor: l.default.unsafe_rawColors.PRIMARY_500.css, premiumBackgroundColor: N.GradientCssUrls.PREMIUM_GUILD_BADGE_V2_BACKGROUND, premiumForegroundColor: l.default.unsafe_rawColors.WHITE_400.css }, [E.BadgeCategory.DISCOVERABLE]: { IconComponent: C.default, foregroundDarkColor: l.default.unsafe_rawColors.PRIMARY_500.css, foregroundLightColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundDarkColor: l.default.unsafe_rawColors.WHITE_400.css, backgroundLightColor: l.default.unsafe_rawColors.PRIMARY_500.css, premiumBackgroundColor: N.GradientCssUrls.PREMIUM_GUILD_BADGE_V2_BACKGROUND, premiumForegroundColor: l.default.unsafe_rawColors.WHITE_400.css }, [E.BadgeCategory.CLAN]: {}, [E.BadgeCategory.NONE]: {} }; function P(e) { let { guildTraits: t } = e; return (0, i.jsxs)("div", { className: M.tooltipPremiumFooterContainer, children: [(0, i.jsxs)("div", { className: a()(M.tooltipPremiumFooterSegment, M.tooltipPremiumFooterTierSegment), children: [(0, i.jsx)(R.default, { width: 18, height: 18, className: M.gemIcon }), (0, i.jsx)(d.Text, { variant: "text-xs/semibold", color: "always-white", children: A.getTierName(t.premiumTier) })] }), (0, i.jsx)("div", { className: a()(M.tooltipPremiumFooterSegment), children: (0, i.jsx)(d.Text, { variant: "text-xs/semibold", color: "always-white", children: D.default.Messages.SERVER_BADGE_PREMIUM_FOOTER_BOOST_COUNT.format({ count: t.premiumSubscriberCount }) }) })] }) } function U(e) { let { badgeType: t, guildTraits: n } = e, { tooltipTitle: r, tooltipSubtitle: s, tooltipDescription: a } = function(e, t) { let n = t === I.GuildVisibility.PUBLIC ? D.default.Messages.SERVER_BADGE_DESCRIPTION_ANYONE_CAN_JOIN : D.default.Messages.SERVER_BADGE_DESCRIPTION_INVITE_ONLY; switch (e) { case E.BadgeCategory.STAFF: return { tooltipTitle: D.default.Messages.INTERNAL_EMPLOYEE_ONLY, tooltipSubtitle: D.default.Messages.INTERNAL_EMPLOYEE_ONLY, tooltipDescription: D.default.Messages.INTERNAL_EMPLOYEE_ONLY }; case E.BadgeCategory.VERIFIED: return { tooltipTitle: D.default.Messages.SERVER_BADGE_TITLE_COMMUNITY, tooltipSubtitle: D.default.Messages.GUILD_VERIFIED, tooltipDescription: n }; case E.BadgeCategory.PARTNERED: return { tooltipTitle: D.default.Messages.SERVER_BADGE_TITLE_COMMUNITY, tooltipSubtitle: D.default.Messages.GUILD_PARTNERED, tooltipDescription: n }; case E.BadgeCategory.VERIFIED_AND_PARTNERED: return { tooltipTitle: D.default.Messages.SERVER_BADGE_TITLE_COMMUNITY, tooltipSubtitle: D.default.Messages.GUILD_VERIFIED_AND_PARTNERED, tooltipDescription: n }; case E.BadgeCategory.COMMUNITY: return { tooltipTitle: D.default.Messages.SERVER_BADGE_TITLE_COMMUNITY, tooltipDescription: D.default.Messages.SERVER_BADGE_DESCRIPTION_INVITE_ONLY }; case E.BadgeCategory.DISCOVERABLE: return { tooltipTitle: D.default.Messages.SERVER_BADGE_TITLE_COMMUNITY, tooltipDescription: D.default.Messages.SERVER_BADGE_DESCRIPTION_ANYONE_CAN_JOIN }; case E.BadgeCategory.CLAN: return { tooltipTitle: D.default.Messages.SERVER_BADGE_TITLE_CLAN, tooltipDescription: D.default.Messages.SERVER_BADGE_DESCRIPTION_APPLICATION_REQUIRED }; default: return { tooltipTitle: D.default.Messages.SERVER_BADGE_TITLE_UNKNOWN } } }(t, n.visibility); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsxs)("div", { className: M.tooltipBodyContainer, children: [(0, i.jsx)(d.Text, { color: "interactive-active", variant: "text-xs/bold", children: r }), null != s ? (0, i.jsx)(d.Text, { color: "text-muted", variant: "text-xs/medium", children: s }) : null, null != a ? (0, i.jsx)(d.Text, { color: "text-muted", variant: "text-xs/medium", children: a }) : null] }), n.premium ? (0, i.jsx)(P, { guildTraits: n }) : null] }) } function b(e) { let t, n, { guild: s, tooltipColor: l = d.Tooltip.Colors.BRAND, tooltipPosition: A, className: N, flowerStarClassName: p, iconClassName: O, badgeStrokeColor: C, badgeColor: R, size: g = 16, disableBoostClick: L, "aria-label": D = !1 } = e, P = (0, o.useStateFromStores)([h.default, S.default], () => { let e = h.default.getCurrentUser(); return S.default.isMember(null == s ? void 0 : s.id, null == e ? void 0 : e.id) }), b = (0, o.useStateFromStores)([f.default], () => f.default.theme), G = (0, I.getGuildTraits)(s), w = (0, E.getBadgeCategory)(G), k = r.useCallback(e => { G.premium && P && !L && (e.stopPropagation(), e.preventDefault(), (0, T.openGuildBoostingMarketingModal)({ guildId: s.id, location: { section: v.AnalyticsSections.GUILD_HEADER, object: v.AnalyticsObjects.BOOST_GEM_ICON } })) }, [G.premium, P, L, s.id]); if (w === E.BadgeCategory.NONE) return null; if (w === E.BadgeCategory.CLAN) { var B; let e = (0, _.getClanBadgeUrl)(s.id, null === (B = s.clan) || void 0 === B ? void 0 : B.badge, g); return (0, i.jsx)(d.Tooltip, { color: l, position: A, "aria-label": D, text: (0, i.jsx)(U, { badgeType: w, guildTraits: G }), tooltipContentClassName: M.tooltipRemovePadding, children: t => (0, i.jsx)(d.Clickable, { ...t, onClick: k, className: a()(M.clanBadgeContainer, N), children: (0, i.jsx)(c.ClanTagBadge, { src: e, size: g }) }) }) } let { IconComponent: V, backgroundDarkColor: x, backgroundLightColor: F, foregroundDarkColor: H, foregroundLightColor: Y, premiumBackgroundColor: j, premiumForegroundColor: W } = y[w]; if (null == V) return null; G.premium && (t = W, n = j); let K = (0, u.isThemeDark)(b) ? H : Y, z = (0, u.isThemeDark)(b) ? x : F; return t = null != t ? t : K, n = null != n ? n : z, (0, i.jsx)(d.Tooltip, { color: l, position: A, "aria-label": D, text: (0, i.jsx)(U, { badgeType: w, guildTraits: G }), tooltipContentClassName: M.tooltipRemovePadding, children: e => (0, i.jsx)(d.Clickable, { onClick: k, children: (0, i.jsx)(m.default, { ...e, className: N, flowerStarClassName: p, color: null != n ? n : R, stroke: C, size: g, children: (0, i.jsx)(V, { className: O, color: t }) }) }) }) } }, 346656: function(e, t, n) { "use strict"; n.r(t); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("613828"), u = n("442837"), d = n("692547"), _ = n("481060"), c = n("891819"), E = n("451478"), I = n("956664"), T = n("153066"), f = n("940627"), S = n("794647"); function h(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let A = { SMOL: "Smol", MINI: "Mini", SMALLER: "Smaller", SMALL: "Small", MEDIUM: "Medium", LARGE: "Large", LARGER: "Larger", XLARGE: "XLarge" }, m = { [A.SMOL]: 16, [A.MINI]: 20, [A.SMALLER]: 24, [A.SMALL]: 30, [A.MEDIUM]: 40, [A.LARGE]: 50, [A.LARGER]: 64, [A.XLARGE]: 100 }, N = { [A.SMOL]: [10, 10, 8, 6, 6, 4], [A.MINI]: [12, 12, 10, 10, 8, 6, 4], [A.SMALLER]: [13, 13, 11, 11, 9, 7, 5], [A.SMALL]: [14, 14, 12, 12, 10, 8, 6], [A.MEDIUM]: [16, 16, 14, 14, 12, 10, 8], [A.LARGE]: [18, 18, 16, 16, 14, 12, 10], [A.LARGER]: [19, 19, 17, 17, 15, 13, 11], [A.XLARGE]: [20, 20, 18, 18, 16, 14, 12] }; class p extends s.PureComponent { renderAcronym() { let { guild: e, iconSrc: t } = this.props; return null != e.icon || null != t ? null : (0, r.jsx)("div", { className: S.acronym, children: e.acronym }) } renderBadge() { let { showBadge: e, guild: t, badgeStrokeColor: n, badgeTooltipColor: i, badgeTooltipDelay: s } = this.props; return e && null != t.hasFeature ? (0, r.jsx)(f.default, { className: S.guildIconBadge, guild: t, badgeStrokeColor: n, tooltipColor: i, tooltipDelay: s }) : null } renderIcon() { var e, t; let { guild: n, className: i, showBadge: s, active: a, size: l, style: u = {}, textScale: d, showTooltip: c, tooltipPosition: E, onClick: I, to: f, badgeStrokeColor: h, animate: A, tabIndex: m, iconSrc: p, "aria-hidden": O, ...C } = this.props, R = N[l], g = null != I ? _.Clickable : "div"; return (0, r.jsxs)(g, { className: o()(S.icon, i, (0, T.getClass)(S, "iconSize", l), { [null !== (e = (0, T.getClass)(S, "iconActive", l)) && void 0 !== e ? e : ""]: a, [S.iconInactive]: !a, [S.noIcon]: null == n.icon }), "aria-hidden": O, style: null == n.icon ? { fontSize: (null !== (t = R[n.acronym.length]) && void 0 !== t ? t : R[R.length - 1]) * d, ...u } : u, onClick: null != f || null == I ? void 0 : I, tabIndex: m, ...C, children: [this.renderAcronym(), this.renderBadge()] }) } renderTooltip() { let { guild: e, showTooltip: t, tooltipPosition: n } = this.props; return t ? (0, r.jsx)(_.Tooltip, { text: e.name, position: n, "aria-label": !1, children: e => s.cloneElement(s.Children.only(this.renderIcon()), { ...e }) }) : this.renderIcon() } render() { let { to: e, guild: t, source: n, tabIndex: i, "aria-hidden": s } = this.props; return null != e ? (0, r.jsx)(l.Link, { "aria-hidden": s, to: { pathname: e, state: null != n ? { analyticsSource: n } : null }, "aria-label": t.toString(), tabIndex: i, children: this.renderTooltip() }) : this.renderTooltip() } } let O = u.default.connectStores([E.default], e => { let { guild: t, animate: n, iconSrc: i, style: r, size: s } = e; return { style: { ...r, backgroundImage: (0, I.makeCssUrlString)(null != i ? i : t.getIconURL(m[s], n && E.default.isFocused())) } } })((0, c.backgroundImagePreloader)(e => (0, r.jsx)(p, { ...e }))); class C extends(i = s.PureComponent) { render() { return (0, r.jsx)(O, { ...this.props }) } } h(C, "Sizes", A), h(C, "defaultProps", { size: A.LARGE, textScale: 1, showBadge: !1, showTooltip: !1, active: !1, tooltipPosition: "top", badgeStrokeColor: d.default.unsafe_rawColors.WHITE_500.css, animate: !1 }), t.default = C }, 474333: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HelpMessageTypes: function() { return r } }); var i, r, s = n("735250"); n("470079"); var a = n("120356"), o = n.n(a), l = n("481060"), u = n("263704"), d = n("696202"), _ = n("41542"), c = n("759231"), E = n("364366"); (i = r || (r = {}))[i.WARNING = 0] = "WARNING", i[i.INFO = 1] = "INFO", i[i.ERROR = 2] = "ERROR", i[i.POSITIVE = 3] = "POSITIVE"; t.default = function(e) { let { children: t, messageType: n, className: i, textColor: r = "text-normal", textVariant: a = "text-sm/medium" } = e, I = function(e) { switch (e) { case 0: return c.default; case 1: return _.default; case 2: return d.default; case 3: return u.default } }(n), T = function(e) { switch (e) { case 0: return E.warning; case 1: return E.info; case 2: return E.error; case 3: return E.positive } }(n); return (0, s.jsxs)("div", { className: o()(E.container, T, i), children: [(0, s.jsx)("div", { className: E.iconDiv, children: (0, s.jsx)(I, { className: E.icon }) }), (0, s.jsx)(l.Text, { className: E.text, color: r, variant: a, children: t })] }) } }, 332475: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return p } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("780384"), u = n("481060"), d = n("410030"), _ = n("446108"), c = n("956664"), E = n("921948"), I = n("575190"), T = n("768760"), f = n("981631"), S = n("689938"), h = n("592959"), A = n("167969"), m = n("557256"); function N(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class p extends(i = s.PureComponent) { render() { let e; let { className: t, imageClassName: n, readyState: i, src: s, placeholder: a, placeholderVersion: l, alt: d, width: E, height: A, maxWidth: m = E, maxHeight: N = A, minWidth: p, minHeight: R, mediaLayoutType: g, limitResponsiveWidth: L = !0, accessory: v, zoomable: D, original: M, children: y, renderAccessory: P, onClick: U, tabIndex: b, useFullWidth: G = !1, ...w } = this.props; if (1 === E && 1 === A) return null; let k = (0, c.fit)({ width: E, height: A, maxWidth: m, maxHeight: N, minWidth: p, minHeight: R }), B = 0 !== k.width ? k.width / k.height : 1; "" !== s && i !== f.ImageReadyStates.ERROR ? e = y({ src: s, size: k, alt: d, className: n, mediaLayoutType: g }) : i !== f.ImageReadyStates.LOADING && (e = (0, r.jsx)(O, { size: k, mediaLayoutType: g, alt: d })), e = (0, r.jsx)(I.ImageLoadingOverlay, { readyState: i, aspectRatio: B, placeholder: a, placeholderVersion: l, placeholderStyle: C(k, g), children: e }); let V = null != P ? P() : null; return V = null != V ? V : v, (0, r.jsx)(u.FocusRing, { ringTarget: this._containerRef, focusTarget: this._clickableRef, children: (0, r.jsxs)("div", { className: o()(h.imageWrapper, { [h.imageZoom]: D, [h.imageWrapperBackground]: i !== f.ImageReadyStates.READY, [h.clickable]: null != U }, t), style: function(e, t, n, i) { return i === T.MediaLayoutType.MOSAIC ? { display: "block", maxHeight: "inherit", margin: "auto", width: !n && e.width <= T.MEDIA_MOSAIC_MAX_WIDTH ? e.width : "100%", height: "100%" } : i === T.MediaLayoutType.RESPONSIVE ? { maxWidth: t ? e.width : void 0, width: "100%", aspectRatio: "".concat(e.width, " / ").concat(e.height) } : e }(k, L, G, g), ...w, children: [null != M && (0, r.jsx)("a", { tabIndex: -1, onClick: U, "aria-hidden": !0, className: h.originalLink, href: M, ref: this._containerRef, "data-role": "img", "data-safe-src": s }), null != U ? (0, r.jsx)(u.Clickable, { className: h.clickableWrapper, tabIndex: null != b ? b : 0, onClick: U, "aria-label": null != d ? d : S.default.Messages.IMAGE, "aria-describedby": _.IMAGE_OPEN_DIALOG_DESCRIPTION, innerRef: this._clickableRef, focusProps: { enabled: !1 }, children: e }) : e, null != V ? (0, r.jsx)("div", { className: h.imageAccessory, children: V }) : null] }) }) } constructor(...e) { super(...e), N(this, "_containerRef", s.createRef()), N(this, "_clickableRef", s.createRef()) } } function O(e) { let { size: t, mediaLayoutType: n, alt: i } = e, s = (0, d.default)(); return (0, r.jsx)("div", { className: h.imageErrorWrapper, style: function(e, t) { switch (t) { case T.MediaLayoutType.MOSAIC: return { width: "100%", height: "100%", aspectRatio: "".concat(e.width, " / ").concat(e.height), display: "flex", maxHeight: "inherit" }; case T.MediaLayoutType.RESPONSIVE: return { ...R(e), display: "flex" }; default: return e } }(t, n), children: (0, r.jsx)("img", { src: (0, l.isThemeLight)(s) ? m : A, className: h.imageError, alt: null != i ? i : S.default.Messages.IMAGE }) }) } N(p, "defaultProps", { readyState: f.ImageReadyStates.READY, zoomable: !0, children: e => { let { src: t, size: n, alt: i, className: s, mediaLayoutType: a } = e; return (0, r.jsx)("img", { className: null != s ? s : void 0, alt: null != i ? i : S.default.Messages.IMAGE, src: t, style: C(n, a) }) }, minWidth: 0, minHeight: 0 }); function C(e, t) { switch (t) { case T.MediaLayoutType.MOSAIC: return { display: "block", objectFit: "cover", minWidth: "100%", minHeight: "100%", maxWidth: 1 === (0, E.default)() ? "calc(100% + 1px)" : "100%" }; case T.MediaLayoutType.RESPONSIVE: return R(e); default: return e } } function R(e) { let { width: t, height: n } = e; return { maxWidth: t, maxHeight: n, width: "100%", display: "block", aspectRatio: "".concat(t, " / ").concat(n) } } }, 575190: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ImageLoadingOverlay: function() { return I } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("920906"), a = n("481060"), o = n("450096"), l = n("981631"), u = n("592959"); let d = { from: { opacity: 1 }, enter: { opacity: 1 }, leave: { opacity: 0 }, config: { duration: 200 } }, _ = { ...d, config: { duration: 50 } }, c = { ...d, config: (e, t) => t ? { duration: 800 } : { duration: 200 } }; function E(e) { let { readyState: t, placeholderImg: n, placeholderStyle: a } = e, o = t === l.ImageReadyStates.LOADING, [c] = r.useState(() => Date.now()), E = t === l.ImageReadyStates.READY && Date.now() - c < 200, I = (0, s.useTransition)(o && null != n, E ? _ : d); return (0, i.jsx)(i.Fragment, { children: I((e, t) => t && (0, i.jsx)(s.animated.img, { style: { ...a, ...e }, className: u.imagePlaceholder, src: n, alt: "" })) }) } function I(e) { let { readyState: t, aspectRatio: n, placeholder: d, placeholderVersion: _, placeholderStyle: I, children: T } = e, f = t === l.ImageReadyStates.LOADING, [S] = r.useState(f), [h, A] = r.useState(!1), m = (0, o.usePlaceholderImage)(d, _, S); r.useEffect(() => { let e = setTimeout(() => { A(!0) }, 2e3); return () => { clearTimeout(e) } }, [S]); let N = (0, s.useTransition)(f && h, c); return (0, i.jsxs)("div", { className: u.loadingOverlay, style: { aspectRatio: n }, children: [T, null != m && (0, i.jsx)(E, { readyState: t, placeholderImg: m, placeholderStyle: I }), N((e, t) => t && (0, i.jsx)(s.animated.div, { style: e, className: u.imageLoadingOverlay, children: (0, i.jsx)(a.Spinner, { type: a.SpinnerTypes.SPINNING_CIRCLE_SIMPLE, className: u.cornerLoadingSpinner }) }))] }) } }, 992665: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }); var i = n("735250"), r = n("470079"), s = n("403182"), a = n("715246"); class o extends r.PureComponent { render() { let { src: e, fileSize: t, fileName: n, className: r, playable: o, volume: l, renderLinkComponent: u, onVolumeChange: d, onVolumeShow: _, onVolumeHide: c, autoMute: E, onMute: I, mimeType: T, onPlay: f } = this.props; return (0, i.jsx)(a.default, { src: e, fileName: n, fileSize: (0, s.sizeString)(t), fileSizeBytes: t, type: a.default.Types.AUDIO, className: r, playable: o, volume: l, onMute: I, autoMute: E, onVolumeChange: d, onVolumeShow: _, onVolumeHide: c, renderLinkComponent: u, mimeType: T, onPlay: f }) } } }, 261922: function(e, t, n) { "use strict"; n.r(t), n.d(t, { IMAGE_GIF_RE: function() { return C }, default: function() { return g } }), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("392711"), u = n("286379"), d = n("622535"), _ = n("818083"), c = n("134432"), E = n("797614"), I = n("740492"), T = n("866960"), f = n("626135"), S = n("768581"), h = n("956664"), A = n("311715"), m = n("332475"), N = n("768760"), p = n("981631"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = /\.gif($|\?|#)/i, R = /\.png($|\?|#)/i; (s = i || (i = {})).LOAD = "LOAD", s.PRELOAD = "PRELOAD", s.CLICK = "CLICK"; class g extends(r = o.Component) { static isAnimated(e) { let { src: t, original: n, animated: i } = e; return i || C.test(null != n && "" !== n ? n : t) } static isSrcPNG(e) { let { src: t } = e; return R.test(t) } componentDidMount() { let { readyState: e } = this.state; e === p.ImageReadyStates.LOADING && this.loadImage(this.getSrc(this.getRatio(), g.isAnimated(this.props)), this.handleImageLoad), g.isAnimated(this.props) && this.observeVisibility() } componentDidUpdate(e) { let t = g.isAnimated(this.props); g.isAnimated(e) !== t && (t ? this.observeVisibility() : this.unobserveVisibility()) } componentWillUnmount() { g.isAnimated(this.props) && this.unobserveVisibility(), this._cancellers.forEach(e => e()), this._cancellers.clear() } getSrc(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], { src: n, width: i, height: r, maxWidth: s, maxHeight: a, mediaLayoutType: o } = this.props, { format: l, quality: u } = this.getFormatQuality(t); return (0, c.getImageSrc)({ src: n, width: i, height: r, ratio: e, maxWidth: o === N.MediaLayoutType.MOSAIC ? s : void 0, maxHeight: o === N.MediaLayoutType.MOSAIC ? a : void 0, format: l, quality: u }) } getFormatQuality() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], t = null, n = null; return S.SUPPORTS_WEBP && (e || !g.isAnimated(this.props)) ? (t = "webp", g.isSrcPNG(this.props) && (n = "lossless")) : e && (t = "png"), { format: t, quality: n } } getRatio() { let { width: e, height: t, maxWidth: n = 400, maxHeight: i = 300, mediaLayoutType: r, useFullWidth: s } = this.props; return r === N.MediaLayoutType.MOSAIC && s ? (0, h.getCoverRatio)({ width: e, height: t, maxWidth: n, maxHeight: i }) : (0, h.getRatio)({ width: e, height: t, maxWidth: n, maxHeight: i }) } getType() { let { mediaLayoutType: e, responsive: t } = this.props; return null != e ? e : t ? N.MediaLayoutType.RESPONSIVE : N.MediaLayoutType.STATIC } loadImage(e, t) { let { width: n, height: i } = this.props; if (this.startLoadingTime = Date.now(), 1 === n && 1 === i) return; let r = (0, c.loadImage)(e, (e, n) => { null != r && this._cancellers.delete(r), null == t || t(e, n) }); null != r && this._cancellers.add(r) } render() { let { alt: e, zoomThumbnailPlaceholder: t, onZoom: n, shouldLink: i, onContextMenu: r, autoPlay: s, original: o, className: u, imageClassName: d, children: _, animated: c, shouldAnimate: E, width: I, height: T, minWidth: f, minHeight: S, maxWidth: h, maxHeight: A, onClick: N, renderAccessory: O, tabIndex: C, limitResponsiveWidth: R, useFullWidth: L, placeholder: v, placeholderVersion: D } = this.props, { readyState: M, hasMouseOver: y, hasFocus: P } = this.state, U = null != n, b = this.getRatio(), G = (0, l.clamp)(Math.round(I * b), null != f ? f : 0, null != h ? h : 1 / 0), w = (0, l.clamp)(Math.round(T * b), null != S ? S : 0, null != A ? A : 1 / 0), k = { alt: e, readyState: M, onContextMenu: null != r ? r : void 0, zoomable: U, className: u, imageClassName: d, minWidth: f, minHeight: S, mediaLayoutType: this.getType(), limitResponsiveWidth: R, useFullWidth: L, tabIndex: C, width: G, height: w, src: "", placeholder: v, placeholderVersion: D, children: null != _ ? e => { let { src: t, size: n, alt: i, mediaLayoutType: r } = e; return _({ src: t, size: n, alt: i, mediaLayoutType: r }) } : void 0, onMouseEnter: this.onMouseEnter, onFocus: this.onFocus, onBlur: this.onBlur }; if (1 === k.width && 1 === k.height) return null; switch ((U || null != N) && (k.onClick = this.onClick), i && (k.original = null != o && "" !== o ? o : k.src), M) { case p.ImageReadyStates.LOADING: null != t && (k.src = t); break; case p.ImageReadyStates.READY: if (g.isAnimated(this.props)) { k.onMouseLeave = this.onMouseLeave; let e = (s || y || P) && (null == E || E) && g.visibilityObserver.isVisible(this); e ? (k.src = this.getSrc(b), k.renderAccessory = O) : (k.src = this.getSrc(b, !c || !s), k.renderAccessory = this.renderAccessory), null != _ && (k.children = t => { let { src: n, size: i, alt: r, mediaLayoutType: s } = t; return _({ src: n, size: i, animating: e, alt: r, mediaLayoutType: s }) }) } else k.src = this.getSrc(b) } return (0, a.jsx)(m.default, { ...k }) } async trackLoadingCompleted(e, t, n) { var i; if (e && E.default.increment({ name: u.MetricEvents.IMAGE_LOAD_ERROR }), !this.imageLoadAnalyticsEnabled) return; let r = await fetch(t.url).catch(() => void 0), s = null == r ? void 0 : null === (i = r.headers) || void 0 === i ? void 0 : i.get("content-length"), a = null != s ? Number(s) : null, o = Date.now() - this.startLoadingTime, { format: l, quality: d } = this.getFormatQuality(); f.default.track(p.AnalyticEvents.IMAGE_LOADING_COMPLETED, { duration_ms: o, requested_height: t.height, requested_width: t.width, height: this.props.height, width: this.props.width, original_url: this.props.original, url: this.props.src, requested_url: t.url, format: l, quality: d, state: e ? p.ImageReadyStates.ERROR : this.state.readyState, data_saving_mode: I.default.dataSavingMode, low_quality_image_mode: I.default.lowQualityImageMode, trigger: n, size: a, connection_type: T.default.getType(), effective_connection_speed: T.default.getEffectiveConnectionSpeed(), service_provider: T.default.getServiceProvider() }) } constructor(e) { super(e), O(this, "imageLoadAnalyticsEnabled", !1), O(this, "state", { readyState: p.ImageReadyStates.LOADING, hasMouseOver: !1, hasFocus: !1 }), O(this, "startLoadingTime", Date.now()), O(this, "_cancellers", new Set), O(this, "observeVisibility", () => { g.visibilityObserver.observe(this) }), O(this, "unobserveVisibility", () => { g.visibilityObserver.unobserve(this) }), O(this, "handleImageLoad", (e, t) => { this.setState({ readyState: e ? p.ImageReadyStates.ERROR : p.ImageReadyStates.READY }, () => { var n; return this.trackLoadingCompleted(e, t, null !== (n = this.props.trigger) && void 0 !== n ? n : "LOAD") }) }), O(this, "preloadImage", (e, t) => { let { width: n, height: i } = e, { width: r, height: s } = this.props; (1 !== r || 1 !== s) && this.loadImage(this.getSrc((0, h.getRatio)({ width: r, height: s, maxWidth: n, maxHeight: i })), (e, n) => { this.trackLoadingCompleted(e, n, "PRELOAD"), null == t || t(e, n) }) }), O(this, "onMouseEnter", e => { g.isAnimated(this.props) && this.setState({ hasMouseOver: !0 }); let { onMouseEnter: t } = this.props; null != t && t(e, { preloadImage: this.preloadImage }) }), O(this, "onFocus", e => { g.isAnimated(this.props) && this.setState({ hasFocus: !0 }) }), O(this, "onBlur", e => { let { currentTarget: t, relatedTarget: n } = e; !t.contains(n) && this.setState({ hasFocus: !1 }) }), O(this, "onMouseLeave", () => this.setState({ hasMouseOver: !1 })), O(this, "onClick", e => { let { onZoom: t, onClick: n } = this.props; null != n ? n(e) : null != t && (e.preventDefault(), t(e, { zoomThumbnailPlaceholder: this.getSrc(this.getRatio()), trigger: "CLICK" })) }), O(this, "renderAccessory", () => { let { hasMouseOver: e, hasFocus: t } = this.state, n = null != this.props.renderAccessory ? this.props.renderAccessory() : null; return this.props.shouldRenderAccessory ? e || t ? n : (0, a.jsx)(A.default, {}) : null }), (0, c.isImageLoaded)(this.getSrc(this.getRatio(), g.isAnimated(this.props))) && (this.state.readyState = p.ImageReadyStates.READY), this.imageLoadAnalyticsEnabled = L.getCurrentConfig({ location: "lazy_image" }).enabled } } O(g, "visibilityObserver", new d.VisibilityObserver({ threshold: .7 })), O(g, "defaultProps", { shouldLink: !1, autoPlay: !1, animated: !1, minWidth: 0, minHeight: 0, shouldRenderAccessory: !0 }); let L = (0, _.createExperiment)({ kind: "user", id: "2024-02_image_load_metrics", label: "Image load metrics Config User Experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Do not send metrics for image load", config: { enabled: !1 } }, { id: 2, label: "Send metrics for image load", config: { enabled: !0 } }] }) }, 257915: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("480057"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = e => new Promise((t, n) => { null == e && n(Error("No image src passed")); let i = new Image; i.src = e, i.onload = () => t(i), i.onerror = e => n(e) }); class _ extends(i = s.PureComponent) { componentDidUpdate(e) { e.src !== this.props.src && this.setState({ loaded: !1 }, () => this.initialize()) } initialize() { d(this.props.src).then(() => { !this.unmounting && this.setState({ loaded: !0 }) }) } componentWillUnmount() { this.unmounting = !0 } render() { let { className: e, src: t, alt: n, width: i, height: s, onLoad: a, style: u, imageClassName: d } = this.props, { loaded: _ } = this.state; return (0, r.jsx)("div", { className: e, style: { ...u, width: i, height: s }, children: (0, r.jsx)("img", { className: o()(l.image, d, { [l.loaded]: _ }), width: i, height: s, src: t, alt: n, onLoad: a }) }) } constructor(e) { super(e), u(this, "unmounting", !1), u(this, "state", { loaded: !1 }), this.initialize() } } u(_, "defaultProps", { width: 0, height: 0, alt: "" }), t.default = _ }, 133910: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"), r = n("470079"), s = n("403182"), a = n("261922"), o = n("715246"), l = n("981631"), u = n("689938"); class d extends r.Component { render() { let { src: e, fileSize: t, className: n, mediaPlayerClassName: r, poster: d, fileName: _, naturalWidth: c, naturalHeight: E, playable: I, downloadable: T = !0, volume: f, autoPlay: S, autoMute: h, responsive: A, mediaLayoutType: m, mimeType: N, renderOverlayContent: p, renderLinkComponent: O, onClick: C, onPlay: R, onPause: g, onEnded: L, onControlsShow: v, onControlsHide: D, onVolumeChange: M, onMute: y, alt: P = u.default.Messages.VIDEO, ...U } = this.props; return (0, i.jsx)(a.default, { alt: P, className: n, src: d, ...U, minWidth: o.default.minWidth, minHeight: o.default.minHeight, shouldLink: !1, shouldAnimate: !1, mediaLayoutType: m, responsive: A, children: n => { let { src: a, size: { width: u, height: d } } = n, P = !(c <= l.MAX_VIDEO_WIDTH && E <= l.MAX_VIDEO_HEIGHT || c <= l.MAX_VIDEO_HEIGHT && E <= l.MAX_VIDEO_WIDTH); return (0, i.jsx)(o.default, { className: r, forceExternal: P, src: e, poster: a, width: u, height: d, responsive: A, volume: f, autoPlay: null != S && S, autoMute: null != h && h, type: o.default.Types.VIDEO, mediaLayoutType: m, fileName: _, fileSize: null == t ? void 0 : (0, s.sizeString)(t), fileSizeBytes: null == t ? void 0 : t, playable: I, renderLinkComponent: O, renderOverlayContent: p, onClick: C, onPlay: R, onPause: g, onEnded: L, onVolumeChange: M, onMute: y, onControlsShow: v, onControlsHide: D, mimeType: N, downloadable: T }) } }) } } }, 301822: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("846519"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).SVG = "svg", s.CANVAS = "canvas"; class d extends(r = o.Component) { componentDidMount() { (null == this.props.versionKey || !(this.props.versionKey < 0)) && this.loadAnimation() } componentDidUpdate(e) { (null == this.props.versionKey || !(this.props.versionKey < 0)) && (null != this.props.versionKey && null != e.versionKey && this.props.versionKey > e.versionKey ? this.loadAnimation() : this.playOrPauseAnimation(e)) } componentWillUnmount() { null != this.animation && (this.animation.stop(), this.animation.destroy(), this.animation = null), this.delayTimeout.stop() } playOrPauseAnimation(e) { null != this.animation && (this.props.shouldAnimate && (null == e || !e.shouldAnimate) ? this.props.resetOnPlay ? this.animation.goToAndPlay(0) : this.animation.play() : !this.props.shouldAnimate && (null == e || e.shouldAnimate) && (this.animation.pause(), null != this.props.pauseAtFrame && this.animation.goToAndStop(this.props.pauseAtFrame, !0))) } render() { return (0, a.jsx)("div", { className: this.props.className, ref: this.animationRef }) } constructor(...e) { super(...e), u(this, "animationRef", o.createRef()), u(this, "animation", void 0), u(this, "delayTimeout", new l.Timeout), u(this, "loadAnimation", async () => { let { importData: e, loop: t, autoplay: i, delay: r, renderer: s, rendererSettings: a, shouldAnimate: o } = this.props; null != this.animation && this.animation.destroy(); let [l, { default: u }] = await Promise.all([e(), n.e("23755").then(n.t.bind(n, "500923", 23))]); null != this.animationRef.current && (this.animation = u.loadAnimation({ container: this.animationRef.current, renderer: s, loop: t, autoplay: i && null == r && o, animationData: l, rendererSettings: a }), null != r ? this.delayTimeout.start(r, () => { var e; null === (e = this.animation) || void 0 === e || e.play() }) : this.playOrPauseAnimation(), this.animation.addEventListener("complete", this.handleComplete)) }), u(this, "handleComplete", () => { let { onComplete: e } = this.props; null != e && e() }) } } u(d, "defaultProps", { loop: !0, autoplay: !0, renderer: "svg", shouldAnimate: !0, resetOnPlay: !1 }), u(d, "Renderers", i), t.default = d }, 468210: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("399606"), o = n("607070"), l = n("301822"), u = n("937133"); function d(e) { let { className: t } = e, r = (0, a.useStateFromStores)([o.default], () => o.default.useReducedMotion); async function d() { let { default: e } = await n.e("17672").then(n.t.bind(n, "475429", 19)); return e } return (0, i.jsx)(l.default, { importData: d, shouldAnimate: !r, className: s()(u.sparkles, t) }) } }, 189595: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("748780"), u = n("996785"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = { friction: 14, tension: 200 }, c = { DURATION: "DURATION", VOLUME: "VOLUME" }; function E(e) { let t = 0 | e, n = t % 60; return "".concat((t - n) / 60, ":").concat(String(n).padStart(2, "0")) } class I extends(i = s.Component) { componentDidMount() { let { previewWidth: e, animatedProgress: t } = this.state; this._previewId = e.addListener(this.handlePreviewChange), this._progressId = t.addListener(this.handleAnimatedChange) } componentWillUnmount() { let { previewWidth: e, animatedProgress: t } = this.state; e.removeListener(this._previewId), t.removeListener(this._progressId), window.removeEventListener("mouseup", this.handleDragEnd, !1), window.removeEventListener("mousemove", this.handleDragMove, !1) } componentDidUpdate(e, t) { let { dragging: n, previewWidth: i, animatedProgress: r } = this.state; !n && t.dragging && i.setValue(r._value) } setGrabber(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { animatedProgress: n } = this.state; t ? l.default.spring(n, { toValue: e, ..._ }).start() : n.setValue(e) } calculatePercentage(e, t) { let { wrapper: n, props: { type: i } } = this; if (null == n) return 0; let { left: r, width: s, bottom: a, height: o } = n.getBoundingClientRect(); return Math.min(1, Math.max(0, i === c.VOLUME ? (a - t) / o : (e - r) / s)) } render() { let { buffers: e, type: t, className: n, sliderClassName: i } = this.props, { dragging: s, previewWidth: a, animatedProgress: d } = this.state; return (0, r.jsx)("div", { className: o()(n, t === c.VOLUME ? u.vertical : u.horizontal), children: (0, r.jsx)("div", { className: o()(i, s ? u.mediaBarInteractionDragging : u.mediaBarInteraction, t === c.VOLUME ? u.mediaBarInteractionVolume : null), onMouseDown: this.handleDragStart, onMouseMove: this.handleMouseMove, ref: e => this.wrapper = e, children: (0, r.jsxs)("div", { className: o()(u.mediaBarWrapper, t === c.VOLUME ? u.mediaBarWrapperVolume : null), children: [null != e ? e.map((e, t) => { let [n, i] = e; return (0, r.jsx)("div", { className: u.buffer, style: { width: "".concat(100 * i, "%"), left: "".concat(100 * n, "%") } }, t) }) : null, t === c.DURATION ? (0, r.jsx)(l.default.div, { className: u.mediaBarPreview, style: { width: a.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) } }) : null, (0, r.jsx)(l.default.div, { className: u.mediaBarProgress, style: { width: d.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) }, children: (0, r.jsx)("span", { className: u.mediaBarGrabber }) }), t === c.DURATION ? (0, r.jsx)(l.default.div, { ref: this.setBubbleRef, className: u.bubble, style: { left: (s ? d : a).interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) } }) : null] }) }) }) } constructor(...e) { super(...e), d(this, "state", { animatedProgress: new l.default.Value(0), dragging: !1, offsetLeft: 0, offsetWidth: 0, previewWidth: new l.default.Value(0) }), d(this, "wrapper", void 0), d(this, "bubble", void 0), d(this, "_previewId", void 0), d(this, "_progressId", void 0), d(this, "handlePreviewChange", () => { let { bubble: e, state: { dragging: t, previewWidth: n }, props: { value: i } } = this; !t && null != e && (e.innerText = E(n._value * i)) }), d(this, "handleAnimatedChange", () => { let { bubble: e, state: { dragging: t, animatedProgress: n }, props: { value: i } } = this; t && null != e && (e.innerText = E(n._value * i)) }), d(this, "handleMouseMove", e => { let { dragging: t, previewWidth: n } = this.state; if (t) return; let { clientX: i, clientY: r } = e; n.setValue(this.calculatePercentage(i, r)) }), d(this, "handleDragMove", e => { let { onDrag: t, type: n } = this.props, { clientX: i, clientY: r } = e; t(this.calculatePercentage(i, r), n) }), d(this, "handleDragStart", e => { let { onDragStart: t, onDrag: n, type: i, currentWindow: r } = this.props, { clientX: s, clientY: a } = e; if (e.preventDefault(), null == this.wrapper) return; let { left: o, width: l } = this.wrapper.getBoundingClientRect(); this.setState({ dragging: !0, offsetLeft: o, offsetWidth: l }, () => { t(i), n(this.calculatePercentage(s, a), i), r.removeEventListener("mouseup", this.handleDragEnd, !1), r.removeEventListener("mousemove", this.handleDragMove, !1), r.addEventListener("mouseup", this.handleDragEnd, !1), r.addEventListener("mousemove", this.handleDragMove, !1) }) }), d(this, "handleDragEnd", () => { let { onDragEnd: e, currentWindow: t } = this.props; e(), t.removeEventListener("mouseup", this.handleDragEnd, !1), t.removeEventListener("mousemove", this.handleDragMove, !1), this.setState({ dragging: !1 }) }), d(this, "setBubbleRef", e => { null == e ? this.bubble = null : null != e.componentRef ? this.bubble = e.componentRef : null != e.refs && (this.bubble = e.refs.node) }) } } d(I, "Types", c), d(I, "defaultProps", { currentWindow: window }), t.default = I }, 926836: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ImageModal: function() { return p }, VideoModal: function() { return O } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("873546"), l = n("481060"), u = n("425493"), d = n("169525"), _ = n("585483"), c = n("956664"), E = n("589530"), I = n("261922"), T = n("133910"), f = n("68588"), S = n("981631"), h = n("689938"), A = n("791691"); function m(e) { let { onClose: t } = e, n = r.useRef(null); return (0, i.jsx)("div", { className: A.mobileCloseWrapper, ref: n, children: (0, i.jsx)(l.FocusRingScope, { containerRef: n, children: (0, i.jsx)("div", { children: (0, i.jsx)(u.default, { closeAction: t, keybind: "ESC" }) }) }) }) } let N = e => { let { children: t, hasMediaControls: n, isObscured: s, src: o } = e, [l, u] = r.useState(!1), _ = r.useRef(o); return (r.useEffect(() => { o !== _.current && u(!s) }, [o, s]), s) ? (0, i.jsx)(f.ObscuredDisplayContext.Provider, { value: l, children: (0, i.jsx)(f.default, { type: f.default.Types.ATTACHMENT, reason: d.ObscureReason.EXPLICIT_CONTENT, className: A.obscureContainer, obscured: !0, isSingleMosaicItem: !0, obscurityControlClassName: a()({ [A.controlsOffset]: n && l }), onToggleObscurity: e => { e.stopPropagation(), e.nativeEvent.stopPropagation(), u(e => !e) }, children: e => (0, i.jsx)(i.Fragment, { children: (0, i.jsx)("div", { className: a()(A.obscureWrapper, { [A.obscure]: e }), children: t(e) }) }) }, o) }) : (0, i.jsx)(i.Fragment, { children: t(!1) }) }; function p(e) { let { src: t, original: n, placeholder: s, width: a, height: l, animated: u, children: d, responsive: E, renderLinkComponent: T, maxWidth: f, maxHeight: p, shouldAnimate: O, onClose: C, shouldHideMediaOptions: R = !1, obscure: g = !1, ...L } = e, { width: v, height: D } = (0, c.zoomFit)(a, l), M = o.isMobile && null != C; r.useEffect(() => { if (null != C) return _.ComponentDispatch.subscribe(S.ComponentActions.MEDIA_MODAL_CLOSE, C), () => { _.ComponentDispatch.unsubscribe(S.ComponentActions.MEDIA_MODAL_CLOSE, C) } }, [C]); let y = R ? e => { e.stopPropagation(), e.preventDefault() } : L.onContextMenu; return (0, i.jsxs)("div", { className: A.wrapper, children: [M ? (0, i.jsx)(m, { onClose: C }) : null, (0, i.jsx)(N, { isObscured: g, src: t, children: e => (0, i.jsx)(I.default, { src: t, placeholder: s, shouldLink: !1, width: a, height: l, maxWidth: v, maxHeight: D, children: d, animated: !e && u, autoPlay: !e, responsive: E, onContextMenu: y, ...L }, t) }), null != n && !R && T({ href: n, target: "_blank", rel: "noreferrer noopener", className: A.downloadLink, children: h.default.Messages.OPEN_IN_BROWSER })] }) } function O(e) { let { src: t, width: n, height: r, onClose: s, renderLinkComponent: l, shouldHideMediaOptions: u = !1, obscure: d = !1, ..._ } = e, { width: I, height: f } = (0, c.zoomFit)(n, r), S = o.isMobile && null != s, p = u ? e => { e.stopPropagation(), e.preventDefault() } : _.onContextMenu; return (0, i.jsxs)("div", { className: a()(A.wrapper, A.videoWrapper), children: [S ? (0, i.jsx)(m, { onClose: s }) : null, (0, i.jsx)(N, { hasMediaControls: !0, isObscured: d, src: t, children: e => (0, i.jsx)(T.default, { src: t, width: n, height: r, maxWidth: I, maxHeight: f, renderLinkComponent: l, volume: E.getVolume, autoMute: E.getMuted, onVolumeChange: E.setVolume, onMute: E.setMuted, autoPlay: !e, onContextMenu: p, ..._ }, t) }), !u && l({ href: t, target: "_blank", rel: "noreferrer noopener", className: A.downloadLink, children: h.default.Messages.OPEN_IN_BROWSER })] }) } }, 715246: function(e, t, n) { "use strict"; n.r(t), n.d(t, { convertSecondsToClockFormat: function() { return V } }), n("653041"), n("47120"), n("411104"); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("392711"), d = n.n(u), _ = n("748780"), c = n("481060"), E = n("818083"), I = n("268353"), T = n("866960"), f = n("626135"), S = n("70956"), h = n("36703"), A = n("228488"), m = n("196050"), N = n("189595"), p = n("27268"), O = n("259773"), C = n("80618"), R = n("786048"), g = n("897353"), L = n("181058"), v = n("810090"), D = n("768760"), M = n("981631"), y = n("689938"), P = n("980465"), U = n("961047"); function b(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let G = "-:--", w = { friction: 14, tension: 200 }, k = { VIDEO: "VIDEO", AUDIO: "AUDIO" }, B = { width: "100%", height: "100%", backgroundColor: "black" }; function V(e) { let t = 0 | e, n = t % 60; return "".concat((t - n) / 60, ":").concat(String(n).padStart(2, "0")) } let x = e => { let { current: t, duration: n } = e, i = null != t ? V(t) : G, r = null != n ? V(n) : G; return i = i.padStart(r.length, "0"), (0, s.jsxs)("div", { className: P.durationTimeWrapper, children: [(0, s.jsx)("span", { className: P.durationTimeDisplay, children: i }), (0, s.jsx)("span", { className: P.durationTimeSeparator, children: "/" }), (0, s.jsx)("span", { className: P.durationTimeDisplay, children: r })] }) }; class F extends(i = a.Component) { componentDidMount() { this.state.translateY.setValue(this.props.autoPlay ? 1 : 0) } componentDidUpdate(e) { var t, n, i, r, s; let { hide: a, playing: o } = this.props; a && !e.hide ? (this.animateControls(1, o), null === (t = this.volumeButton) || void 0 === t || t.blur(), null === (n = (i = this.props).onControlsHide) || void 0 === n || n.call(i)) : !a && e.hide && (this.animateControls(0, o), null === (r = (s = this.props).onControlsShow) || void 0 === r || r.call(s)) } updateProgress(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { durationBar: n } = this; null != n && n.setGrabber(e, t) } animateControls(e, t) { let { translateY: n } = this.state; t ? _.default.spring(n, { toValue: e, ...w }).start() : n.setValue(e) } getAnimatedStyle() { let { translateY: e } = this.state; return { transform: [{ translateY: e.interpolate({ inputRange: [0, 1], outputRange: ["0%", "100%"] }) }] } } renderPlayIcon() { let { playing: e, currentTime: t, duration: n, onPause: i, onPlay: r, disabled: a } = this.props; return e ? (0, s.jsx)(c.Clickable, { className: P.videoButton, onClick: i, tabIndex: a ? -1 : 0, "aria-label": y.default.Messages.PAUSE, children: (0, s.jsx)(R.default, { className: P.controlIcon }, "pause") }) : null != t && t === n ? (0, s.jsx)(c.Clickable, { className: P.videoButton, onClick: r, tabIndex: a ? -1 : 0, "aria-label": y.default.Messages.PLAY_AGAIN, children: (0, s.jsx)(L.default, { className: P.controlIcon }, "replay") }) : (0, s.jsx)(c.Clickable, { className: P.videoButton, onClick: r, tabIndex: a ? -1 : 0, "aria-label": y.default.Messages.PLAY, children: (0, s.jsx)(g.default, { className: P.controlIcon }, "play") }) } render() { let { buffers: e, children: t, currentTime: n, duration: i, muted: r, onDrag: a, onDragEnd: o, onDragStart: l, onToggleMuted: u, onVolumeShow: d, onVolumeHide: c, width: E, volume: I, type: T } = this.props; return (0, s.jsxs)(_.default.div, { className: T === k.VIDEO ? P.videoControls : P.audioControls, onClick: e => e.stopPropagation(), onDoubleClick: e => e.stopPropagation(), style: this.getAnimatedStyle(), children: [this.renderPlayIcon(), "string" == typeof E || E > 250 ? (0, s.jsx)(x, { current: n, duration: i }) : null, (0, s.jsx)(N.default, { buffers: e, value: null != i ? i : 0, onDrag: a, onDragEnd: o, onDragStart: l, type: N.default.Types.DURATION, ref: this.setDurationRef }), (0, s.jsx)("div", { className: U.flex, children: (0, s.jsx)(C.default, { ref: this.setVolumeButtonRef, muted: r, value: I, minValue: 0, maxValue: 1, currentWindow: window, onValueChange: e => a(e, N.default.Types.VOLUME), onToggleMute: u, onVolumeShow: d, onVolumeHide: c, iconClassName: P.controlIcon, sliderWrapperClassName: P.volumeSliderWrapper }) }), t] }) } constructor(...e) { super(...e), b(this, "state", { translateY: new _.default.Value(0) }), b(this, "volumeButton", void 0), b(this, "durationBar", void 0), b(this, "setDurationRef", e => { this.durationBar = e }), b(this, "setVolumeButtonRef", e => { this.volumeButton = e }) } } function H(e) { let { fileName: t, fileSize: n, src: i, disabled: r, mimeType: a, hideDownloadButton: o } = e; return (0, s.jsxs)("div", { className: P.audioMetadata, children: [(0, s.jsxs)("div", { className: P.metadataContent, children: [r ? t : (0, s.jsx)(m.default, { href: i, className: P.metadataDownload, iconClassName: P.metadataIcon, mimeType: a, fileName: t }), (0, s.jsx)("div", { className: P.metadataSize, children: n })] }), !o && (0, s.jsx)(m.default, { href: i, className: P.metadataDownload, iconClassName: P.metadataIcon, mimeType: a })] }) } b(F, "defaultProps", { disabled: !1 }); class Y extends a.Component { pop() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; this.setState({ play: e }, this.popAnimation) } getAnimatedStyle() { let { opacity: e, scale: t } = this.state; return _.default.accelerate({ opacity: e.interpolate({ inputRange: [0, 1], outputRange: [0, .8] }), transform: [{ scale: t.interpolate({ inputRange: [0, 1], outputRange: [1, 2] }) }] }) } render() { let { play: e } = this.state, t = e ? g.default : R.default; return (0, s.jsx)(_.default.div, { className: P.playPausePop, style: this.getAnimatedStyle(), children: (0, s.jsx)(t, { className: P.playPausePopIcon }) }) } constructor(...e) { super(...e), b(this, "state", { play: !1, scale: new _.default.Value(0), opacity: new _.default.Value(0) }), b(this, "popAnimation", () => { let { opacity: e, scale: t } = this.state; t.setValue(0), e.setValue(0), _.default.parallel([_.default.sequence([_.default.timing(e, { toValue: 1, duration: 200 }), _.default.timing(e, { toValue: 0, duration: 200 })]), _.default.spring(t, { toValue: 1.5, ...w, friction: 80 })]).start() }) } } let j = (0, E.createExperiment)({ kind: "user", id: "2024-03_media_play_metrics", label: "Media play metrics User Experiment", defaultConfig: { enabled: !1 }, treatments: [{ id: 1, label: "Send metrics", config: { enabled: !0 } }] }); class W { moveToState(e) { this.stateTime = performance.now(), this.currentState = e } timeInState() { return performance.now() - this.stateTime } assertUnreachable(e) { throw Error("uhoh") } sendEvent() { this.analyticsEnabled && f.default.track(M.AnalyticEvents.MEDIA_PLAY_FINISHED, { play_time_sec: this.playTimeSec, play_wall_time_ms: this.playWallTimeMs, first_play_waiting_ms: this.firstPlayWaitingMs, stall_count: this.stallCount, stall_ms: this.stallMs, seek_count: this.seekCount, seek_waiting_ms: this.seekWaitingMs, media_source: this.metadata.src, mime_type: this.metadata.mimeType, file_size: this.metadata.fileSize, file_duration_sec: this.metadata.fileDurationSec, connection_type: T.default.getType(), effective_connection_speed: T.default.getEffectiveConnectionSpeed(), service_provider: T.default.getServiceProvider() }), this.playTimeSec = 0, this.playWallTimeMs = 0, this.firstPlayWaitingMs = 0, this.stallCount = 0, this.stallMs = 0, this.seekCount = 0, this.seekWaitingMs = 0, this.playbackStartTime = void 0, this.lastPlayingTime = void 0, this.moveToState("not_started") } updatePlayTime(e) { var t, n; this.playTimeSec += Math.max((null !== (t = this.lastPlayingTime) && void 0 !== t ? t : e) - (null !== (n = this.playbackStartTime) && void 0 !== n ? n : 0), 0), this.playWallTimeMs += this.timeInState() } constructor(e) { b(this, "metadata", void 0), b(this, "playTimeSec", 0), b(this, "playWallTimeMs", 0), b(this, "firstPlayWaitingMs", 0), b(this, "stallCount", 0), b(this, "stallMs", 0), b(this, "seekCount", 0), b(this, "seekWaitingMs", 0), b(this, "stateTime", performance.now()), b(this, "currentState", "not_started"), b(this, "playbackStartTime", void 0), b(this, "lastPlayingTime", void 0), b(this, "analyticsEnabled", void 0), b(this, "onWaiting", e => { switch (this.currentState) { case "not_started": this.moveToState("not_started_waiting"); break; case "playing": this.updatePlayTime(e.currentTarget.currentTime), this.stallCount += 1, this.moveToState("stalled"); break; case "seeking": case "not_started_waiting": case "stalled": break; case "paused": case "seeked": this.moveToState("stalled"); break; default: this.assertUnreachable(this.currentState) } }), b(this, "onSeeking", e => { switch (this.currentState) { case "seeking": case "seeked": this.moveToState("seeking"); return; case "stalled": this.stallMs += this.timeInState(); break; case "playing": this.updatePlayTime(e.currentTarget.currentTime); break; case "not_started": case "not_started_waiting": case "paused": break; default: this.assertUnreachable(this.currentState) } this.seekCount += 1, this.moveToState("seeking") }), b(this, "onSeeked", e => { switch (this.currentState) { case "seeking": case "seeked": let t = this.stateTime; this.moveToState("seeked"), this.stateTime = t; break; case "not_started": case "not_started_waiting": case "stalled": case "playing": case "paused": break; default: this.assertUnreachable(this.currentState) } }), b(this, "onPause", e => { switch (this.currentState) { case "playing": this.updatePlayTime(e.currentTarget.currentTime), this.moveToState("paused"), this.sendEvent(); break; case "stalled": this.stallMs += this.timeInState(), this.moveToState("paused"), this.sendEvent(); break; case "not_started": case "not_started_waiting": case "paused": case "seeking": break; case "seeked": this.seekWaitingMs += this.timeInState(), this.seekCount += 1; break; default: this.assertUnreachable(this.currentState) } }), b(this, "onPlaying", e => { switch (this.currentState) { case "playing": return; case "not_started": this.firstPlayWaitingMs = 0; break; case "not_started_waiting": this.firstPlayWaitingMs = this.timeInState(); break; case "stalled": this.stallMs += this.timeInState(); break; case "seeked": this.seekWaitingMs += this.timeInState(); break; case "paused": case "seeking": break; default: this.assertUnreachable(this.currentState) } this.playbackStartTime = e.currentTarget.currentTime, this.moveToState("playing") }), b(this, "onTimeUpdate", e => { switch (this.currentState) { case "playing": this.lastPlayingTime = e.currentTarget.currentTime; return; case "not_started": case "not_started_waiting": case "stalled": case "seeked": case "paused": case "seeking": break; default: this.assertUnreachable(this.currentState) } }), b(this, "onDragStart", e => { null != e && (this.lastPlayingTime = e) }), b(this, "onLoadedMetadata", e => { this.metadata.fileDurationSec = e.currentTarget.duration }), this.metadata = e, this.analyticsEnabled = j.getCurrentConfig({ location: "media_player" }).enabled } } class K extends(r = a.PureComponent) { static getDerivedStateFromProps(e, t) { return !e.playable && t.playing ? { playing: !1, hideControls: !1 } : null } componentDidMount() { let { playing: e, muted: t, volume: n } = this.state, { current: i } = this.mediaRef; null != i && (t && (i.muted = t), e && (this.play(!0), this.handleUIUpdate()), i.volume = n) } componentDidUpdate(e, t) { let { props: { onPause: n, onVolumeChange: i, onMute: r }, state: { playing: s, fullscreen: a, muted: o, dragging: l, volume: u } } = this, { current: d } = this.mediaRef, { current: _ } = this.playPausePopRef; if (null == d) return; s && !t.playing ? (this.play(), this.handleMouseMove(), this.handleUIUpdate(), t.hasClickedPlay && (null == _ || _.pop(s))) : !s && t.playing && (d.pause(), null == _ || _.pop(s), null == n || n()); let c = (0, A.getFullScreenNode)(d.parentNode, d); a && !t.fullscreen && null != c ? ((0, A.requestFullScreen)(c), c.addEventListener(A.FULLSCREEN_CHANGE_EVENT, this.handleFullScreenExit)) : !a && t.fullscreen && null != c && (c.removeEventListener(A.FULLSCREEN_CHANGE_EVENT, this.handleFullScreenExit), (0, A.exitFullScreen)(c)), l === N.default.Types.DURATION && t.dragging !== N.default.Types.DURATION && s ? d.pause() : l !== N.default.Types.DURATION && t.dragging === N.default.Types.DURATION && s && d.play(), o !== t.muted && (d.muted = o, null == r || r(o)), u !== t.volume && (d.volume = u, null == i || i(u)) } componentWillUnmount() { this._unmounted = !0; let { current: e } = this.mediaRef; if (null == e) return; let t = (0, A.getFullScreenNode)(e.parentNode, e); null != t && (t.removeEventListener(A.FULLSCREEN_CHANGE_EVENT, this.handleFullScreenExit), (0, A.exitFullScreen)(t)) } play() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], { onPlay: t, volume: n, autoMute: i } = this.props, { current: r } = this.mediaRef; if (null != r) { let s = {}; if ("function" == typeof n) { let e = n(); e !== this.state.volume && (r.volume = e, s.volume = e) } if ("function" == typeof i) { let e = i(); e !== this.state.muted && (r.muted = e, s.muted = e) } this.setState(s), r.play(), null == t || t(e, r.currentTime * S.default.Millis.SECOND, r.duration * S.default.Millis.SECOND) } } getWidth() { let { width: e } = this.props; return "100%" === e ? e : Math.max(e, K.minWidth) } getHeight() { let { height: e } = this.props; return "100%" === e ? e : Math.max(e, K.minHeight) } updateValue(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { current: n } = this.controlsRef; null != n && n.updateProgress(e, t) } updateTime(e, t) { let n = 0 | e, i = 0 | t; (this.state.currentTime !== n || this.state.duration !== i) && this.setState({ currentTime: n, duration: i }) } updateControlsVisibility() { let { dragging: e, fullscreen: t } = this.state, n = Math.max(0, Date.now() - this._lastMove) > (t ? 1e3 : 3e3); n !== this.state.hideControls && null == e && this.setState({ hideControls: n }) } renderVideo() { let { src: e, poster: t, forceExternal: n, onError: i, responsive: r, mediaLayoutType: a } = this.props, { playing: o, fullscreen: l } = this.state, u = this.getWidth(), d = this.getHeight(); return n ? (0, s.jsx)(v.default, { className: P.video, controls: !1, height: d, poster: t, width: u, responsive: r && !l, mediaLayoutType: a, playsInline: !0, autoPlay: o }) : (0, s.jsx)(v.default, { className: P.video, controls: !1, playsInline: !0, autoPlay: o, height: d, responsive: r && !l, mediaLayoutType: l ? D.MediaLayoutType.STATIC : a, onClick: this.handleVideoClick, onEnded: this.handleEnded, onError: i, onWaiting: this._analytics.onWaiting, onSeeking: this._analytics.onSeeking, onSeeked: this._analytics.onSeeked, onPause: this._analytics.onPause, onPlaying: this._analytics.onPlaying, onTimeUpdate: this._analytics.onTimeUpdate, onLoadedMetadata: this.handleLoaded, onProgress: this.handleBuffer, poster: t, preload: this.state.preload, ref: this.mediaRef, width: u, src: e }) } renderAudio() { return (0, s.jsx)("audio", { className: P.audio, controls: !1, onClick: this.handleVideoClick, onEnded: this.handleEnded, onLoadedMetadata: this.handleLoaded, onProgress: this.handleBuffer, preload: this.state.preload, ref: this.mediaRef, children: (0, s.jsx)("source", { src: this.props.src }) }) } renderControls() { let { current: e } = this.mediaRef, { props: { type: t, autoPlay: n, playable: i = !0, onVolumeShow: r, onVolumeHide: a, onControlsHide: o, onControlsShow: l }, state: { buffers: u, currentTime: d, duration: _, hasClickedPlay: c, hideControls: E, muted: T, playing: f, fullscreen: S, volume: m, dragging: N } } = this, O = this.getWidth(); return c || n || t === k.AUDIO ? (0, s.jsx)(F, { buffers: u, currentTime: d, duration: _, volume: (0, h.amplitudeToPerceptual)(m, 1), hide: t === k.VIDEO && E, muted: T, autoPlay: n, onDrag: this.handleDrag, onDragEnd: this.handleDragEnd, onDragStart: this.handleDragStart, onPause: () => this.setPlay(!1), onPlay: () => this.setPlay(!0), onToggleMuted: this.toggleMuted, onVolumeShow: r, onVolumeHide: a, onControlsShow: l, onControlsHide: o, playing: f, dragging: N, type: t, ref: this.controlsRef, width: S ? window.screen.width : O, disabled: !i, children: t === k.VIDEO ? (0, s.jsx)(I.default, { "aria-label": y.default.Messages.TITLE_BAR_FULLSCREEN_WINDOW, className: P.videoButton, guestWindow: window, onClick: this.toggleFullscreen, node: (0, A.getFullScreenNode)(null == e ? void 0 : e.parentNode, e) }) : null }) : (0, s.jsx)(p.default, { onPlay: this.handleVideoClick, inactive: !i }) } renderMetadata() { let { fileName: e, fileSize: t, src: n, type: i, playable: r, mimeType: a } = this.props; return null == e || null == t ? null : i === k.AUDIO ? (0, s.jsx)(H, { fileName: e, fileSize: t, src: n, disabled: !r, mimeType: a, hideDownloadButton: !0 }) : null } renderPlayPausePop() { return (0, s.jsx)(Y, { ref: this.playPausePopRef }) } getMediaStyle() { let { responsive: e, type: t, height: n } = this.props, { fullscreen: i } = this.state, r = this.getWidth(); return i ? B : t === k.AUDIO ? { width: void 0, height: "auto" } : e ? void 0 : { width: r, height: n } } render() { let { height: e, type: t, src: n, forceExternal: i, className: r, renderLinkComponent: a, responsive: o, mediaLayoutType: u, renderOverlayContent: d } = this.props, { fullscreen: _, hideControls: c, playing: E } = this.state, I = P.wrapperPaused; if (t === k.AUDIO ? I = P.wrapperAudio : c ? I = P.wrapperControlsHidden : E && (I = P.wrapperPlaying), i && t === k.VIDEO) { let t = this.getWidth(); return (0, s.jsxs)("div", { className: l()(I, { [P.wrapperMediaMosaic]: u === D.MediaLayoutType.MOSAIC }), style: o ? void 0 : { width: t, height: e }, children: [this.renderMetadata(), this.renderVideo(), (0, s.jsx)("div", { className: P.playCenter, children: (0, s.jsx)(O.default, { className: P.__invalid_playButton, externalURL: n, renderLinkComponent: a }) })] }) } return (0, s.jsxs)("div", { className: l()(I, P.newMosaicStyle, r, { [P.wrapperMediaMosaic]: u === D.MediaLayoutType.MOSAIC }), "data-fullscreen": _, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onMouseMove: E ? this.handleMouseMove : void 0, onKeyDown: this.handleKeyDown, style: this.getMediaStyle(), children: [this.renderMetadata(), t === k.AUDIO ? this.renderAudio() : this.renderVideo(), this.renderControls(), t === k.VIDEO ? this.renderPlayPausePop() : null, null != d ? (0, s.jsx)("div", { className: l()({ [P.overlayContentHidden]: E || _ }), children: d() }) : null] }) } constructor(e) { var t, n; super(e), t = this, b(this, "_unmounted", !1), b(this, "_lastMove", 0), b(this, "_analytics", void 0), b(this, "mediaRef", a.createRef()), b(this, "controlsRef", a.createRef()), b(this, "playPausePopRef", a.createRef()), b(this, "handleFullScreenExit", () => { let { current: e } = this.mediaRef; if (null == e) return; let t = (0, A.getFullScreenNode)(e.parentNode, e); (null == t || !(0, A.isFullScreen)(t)) && this.setState({ fullscreen: !1 }) }), b(this, "toggleFullscreen", () => { let e = !this.state.fullscreen; this.setState({ fullscreen: e }) }), b(this, "setMuted", e => { this.setState({ muted: e }) }), b(this, "toggleMuted", () => { this.setMuted(!this.state.muted) }), b(this, "setTime", function(e) { let n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], { current: i } = t.mediaRef; null != i && isFinite(i.duration) && isFinite(i.currentTime) && (i.currentTime = e, t.updateValue(e / i.duration, n), t.updateTime(e, i.duration)) }), b(this, "handleUIUpdate", () => { if (!this.state.playing || this._unmounted) return; let { current: e } = this.mediaRef; null != e && (e.duration > 0 && this.updateValue(e.currentTime / e.duration), this.updateTime(e.currentTime, e.duration), this.updateControlsVisibility(), requestAnimationFrame(this.handleUIUpdate)) }), b(this, "handleDrag", (e, t) => { let { current: n } = this.mediaRef; if (t === N.default.Types.DURATION) null != n && isFinite(n.duration) && this.setTime(n.duration * e, !1); else if (t === N.default.Types.VOLUME) { let t = (0, h.perceptualToAmplitude)(e, 1); 0 === t ? this.setState({ muted: !0, volume: t }) : this.state.muted && t > 0 ? this.setState({ muted: !1, volume: t }) : this.setState({ volume: t }) } }), b(this, "handleLoaded", e => { this._analytics.onLoadedMetadata(e); let { current: t } = this.mediaRef; null != t && (this.updateTime(t.currentTime, t.duration), this.setState({ hasLoadedMetadata: !0, currentTime: t.currentTime, duration: t.duration })) }), b(this, "handleDurationChange", () => { let { current: e } = this.mediaRef; null != e && (this.updateTime(e.currentTime, e.duration), this.setState({ duration: e.duration })) }), b(this, "handleBuffer", d().debounce(() => { let { current: e } = this.mediaRef; if (null == e) { this.setState({ buffers: [] }); return } this.setState({ buffers: function(e) { let t = [], { duration: n } = e; for (let i = 0; i < e.buffered.length; i++) { let r = e.buffered.start(i), s = e.buffered.end(i); if (s - r < 1) continue; let a = (s - r) / n, o = r / n; t.push([o, a]) } return t }(e) }) }, 400)), b(this, "handleEnded", e => { let { onEnded: t } = this.props; this.setState({ playing: !1, hideControls: !1 }), null != t && t(e) }), b(this, "handleMouseMove", () => { this._lastMove = Date.now() }), b(this, "handleMouseLeave", () => { this.state.playing && (this._lastMove = 0), this.setState({ hovering: !1 }) }), b(this, "handleMouseEnter", () => { "none" === this.state.preload && this.setState({ preload: "metadata" }), this.setState({ hovering: !0 }) }), b(this, "handleVideoClick", e => { let { state: { hasClickedPlay: t, playing: n }, props: { onClick: i, autoPlay: r, autoMute: s } } = this; if (null != i) { i(e); return } e.stopPropagation(), r && !t && n && s ? this.setState({ muted: !1, hasClickedPlay: !0 }) : this.setPlay(!this.state.playing) }), b(this, "setPlay", e => { let { props: { autoMute: t }, state: { hasClickedPlay: n, muted: i } } = this; e !== this.state.playing && (e ? this.setState({ playing: e, hasClickedPlay: !0, muted: (!!n || !t) && i }) : this.setState({ playing: !1, hideControls: !1 })) }), b(this, "handleDragStart", e => { var t, n; this.setState({ dragging: e }), this._analytics.onDragStart(null !== (n = null === (t = this.mediaRef.current) || void 0 === t ? void 0 : t.currentTime) && void 0 !== n ? n : null) }), b(this, "handleDragEnd", () => { this.setState({ dragging: null }), this._lastMove = Date.now() }), b(this, "handleKeyDown", e => { let { current: t } = this.mediaRef; if (e.which === M.KeyboardKeys.SPACE) e.preventDefault(), this.setPlay(!this.state.playing); else if (e.which >= M.KeyboardKeys.DIGIT_0 && e.which <= M.KeyboardKeys.DIGIT_9 && null != t) { e.preventDefault(); let n = (e.which - M.KeyboardKeys.DIGIT_0) / 10; t.currentTime = t.duration * n, this.setPlay(!0) } }), this._analytics = new W({ src: e.src, mimeType: null === (n = e.mimeType) || void 0 === n ? void 0 : n.join("/"), fileSize: e.fileSizeBytes }); let { autoPlay: i, autoMute: r, volume: s, playable: o } = this.props, l = "function" == typeof s ? s() : s, u = "function" == typeof r ? r() : r; this.state = { buffers: [], currentTime: null, dragging: null, duration: null, fullscreen: !1, hasClickedPlay: !1, hasLoadedMetadata: !1, hideControls: !o, muted: u, volume: l, playing: i, preload: "none", width: K.minWidth, height: K.minHeight, hovering: !1 } } } b(K, "Types", k), b(K, "defaultProps", { width: 400, height: 300, forceExternal: !1, playable: !0, downloadable: !0, autoPlay: !1, autoMute: !1, volume: 1 }), b(K, "minWidth", 150), b(K, "minHeight", 110), t.default = K }, 797053: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("866442"), l = n("481060"), u = n("332870"), d = n("6829"); t.default = e => { let { children: t, className: n, color: s, iconType: _, onMouseEnter: c, onMouseLeave: E, ...I } = e, [T, f] = r.useState(!1), S = r.useCallback(e => { f(!0), null == c || c(e) }, [f, c]), h = r.useCallback(e => { f(!1), null == E || E(e) }, [f, E]), A = {}; return null != s && (A = { color: (0, o.int2hex)(s), backgroundColor: T ? (0, o.int2rgba)(s, .3) : (0, o.int2rgba)(s, .1) }), (0, i.jsx)(l.Clickable, { ...I, tag: "span", className: a()(n, { [d.wrapper]: !0, interactive: I.onClick }), onMouseEnter: S, onMouseLeave: h, style: A, tabIndex: null != I.onClick ? 0 : -1, children: null != _ ? (0, i.jsx)(u.default, { iconType: _, children: t }) : t }) } }, 180828: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BotTypes: function() { return o.BotTagTypes } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("467679"), o = n("674563"), l = n("77351"); t.default = e => { let { name: t, discriminator: n, invertBotTagColor: r, nameColor: o, className: u, botType: d, usernameClass: _, discriminatorClass: c, botClass: E, botVerified: I = !1, style: T, useRemSizes: f = !1, usernameIcon: S } = e; return (0, i.jsxs)("div", { className: s()(u, l.nameTag), style: T, children: [(0, i.jsxs)("span", { className: s()(l.username, _), style: null != o ? { color: o } : void 0, children: [S, t] }), null != n ? (0, i.jsxs)("span", { className: null != c ? c : void 0, children: ["#", n] }) : null, null != d ? (0, i.jsx)(a.default, { type: d, invertColor: r, className: s()(E, l.bot), verified: I, useRemSizes: f }) : null] }) } }, 68588: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ObscuredDisplayContext: function() { return C } }), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("120356"), u = n.n(l), d = n("692547"), _ = n("984986"), c = n("481060"), E = n("169525"), I = n("823379"), T = n("794358"), f = n("880008"), S = n("689938"), h = n("223697"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).TEXT = "text", s.ATTACHMENT = "attachment", s.EMBED = "embed"; let m = e => { let { className: t } = e; return (0, a.jsx)("div", { className: u()(h.spoilerWarning, t), children: S.default.Messages.SPOILER }) }, N = e => { let { className: t, isSingleMosaicItem: n, obscureOnly: i } = e; return (0, a.jsx)("div", { className: u()(h.explicitContentWarning, t), children: i ? null : (0, a.jsxs)(a.Fragment, { children: [(0, a.jsx)(_.ImageWarningIcon, { width: 32, height: 32, color: d.default.colors.WHITE }), n && (0, a.jsx)(c.Text, { variant: "text-sm/normal", color: "always-white", className: h.explicitContentWarningText, children: S.default.Messages.EXPLICIT_CONTENT_WARNING })] }) }) }, p = e => { let { reason: t = E.ObscureReason.SPOILER, className: n, isSingleMosaicItem: i = !1 } = e; switch (t) { case E.ObscureReason.SPOILER: return (0, a.jsx)(m, { className: n }); case E.ObscureReason.EXPLICIT_CONTENT: return (0, a.jsx)(N, { isSingleMosaicItem: i, className: n }); case E.ObscureReason.POTENTIAL_EXPLICIT_CONTENT: return (0, a.jsx)(N, { isSingleMosaicItem: i, className: n, obscureOnly: !0 }); default: return (0, I.assertNever)(t) } }, O = e => { let { obscureReason: t, isVisible: n, handleToggleObscurity: i, obscurityControlClassName: r } = e; return t !== E.ObscureReason.EXPLICIT_CONTENT ? null : (0, a.jsx)("div", { className: u()(h.obscureButtonContainer, r), children: (0, a.jsx)(c.Clickable, { className: u()(h.obscureHoverButton), onClick: i, "aria-label": S.default.Messages.EXPLICIT_CONTENT_BUTTON_TOOLTIP, children: n ? (0, a.jsx)(T.default, { width: 24, height: 24 }) : (0, a.jsx)(f.default, { width: 24, height: 24 }) }) }) }, C = o.createContext(!1); class R extends(r = o.PureComponent) { renderWithTooltip(e) { return (0, a.jsx)(c.Tooltip, { position: "left", text: this.state.visible ? null : this.tooltipText, children: t => { let { onMouseEnter: n, onMouseLeave: i } = t; return o.cloneElement(o.Children.only(e), { onMouseEnter: n, onMouseLeave: i }) } }) } renderObscuredAttachment() { let { children: e, inline: t, className: n, containerStyles: i, obscured: r = !0, reason: s = E.ObscureReason.SPOILER, isSingleMosaicItem: o = !1, obscurityControlClassName: l } = this.props, { visible: d } = this.state, _ = (0, a.jsx)(C.Consumer, { children: _ => { let I = _ || d || !r; return [E.ObscureReason.EXPLICIT_CONTENT, E.ObscureReason.POTENTIAL_EXPLICIT_CONTENT].includes(s) && !t ? (0, a.jsxs)("div", { "aria-label": I ? void 0 : this.ariaLabel, "aria-expanded": I, style: i, className: u()(n, h.spoilerContent, h.spoilerContainer, { [h.hidden]: !I, [h.constrainedObscureContent]: o }), role: I ? "presentation" : "button", tabIndex: I ? -1 : 0, children: [I || t ? null : (0, a.jsx)(p, { reason: s, isSingleMosaicItem: o }), (0, a.jsx)("div", { "aria-hidden": !I, className: h.spoilerInnerContainer, children: e(!I) }), (0, a.jsx)(O, { obscureReason: s, isVisible: d, handleToggleObscurity: this.handleToggleObscurity, obscurityControlClassName: l })] }) : (0, a.jsxs)(c.Clickable, { onClick: I ? void 0 : this.removeObscurity, "aria-label": I ? void 0 : this.ariaLabel, "aria-expanded": I, style: i, className: u()(n, h.spoilerContent, h.spoilerContainer, { [h.hidden]: !I, [h.hiddenSpoiler]: !I }), role: I ? "presentation" : "button", tabIndex: I ? -1 : 0, children: [I || t ? null : (0, a.jsx)(p, { reason: s, isSingleMosaicItem: o }), (0, a.jsx)("div", { "aria-hidden": !I, className: h.spoilerInnerContainer, children: e(!I) })] }) } }); return t ? this.renderWithTooltip(_) : _ } renderObscuredEmbed() { let { children: e, className: t, containerStyles: n, isSingleMosaicItem: i, obscurityControlClassName: r, reason: s = E.ObscureReason.SPOILER } = this.props, { visible: o } = this.state; return (0, a.jsx)(C.Consumer, { children: l => { let d = l || o; return [E.ObscureReason.EXPLICIT_CONTENT, E.ObscureReason.POTENTIAL_EXPLICIT_CONTENT].includes(s) ? (0, a.jsxs)("div", { "aria-label": o ? void 0 : this.ariaLabel, "aria-expanded": d, style: n, className: u()(t, h.spoilerContent, h.spoilerContainer, { [h.hidden]: !d }), role: d ? "presentation" : "button", tabIndex: d ? -1 : 0, children: [d ? null : (0, a.jsx)(p, { reason: s, isSingleMosaicItem: i }), (0, a.jsx)("div", { "aria-hidden": !d, className: h.spoilerInnerContainer, children: e(!d) }), (0, a.jsx)(O, { obscureReason: s, isVisible: o, handleToggleObscurity: this.handleToggleObscurity, obscurityControlClassName: r })] }) : (0, a.jsxs)(c.Clickable, { "aria-label": this.ariaLabel, "aria-expanded": d, className: u()(t, h.spoilerContent, h.spoilerContainer, { [h.hidden]: !d }), onClick: d ? void 0 : this.removeObscurity, style: n, role: d ? "presentation" : "button", tabIndex: d ? -1 : 0, children: [d ? null : (0, a.jsx)(p, { reason: s, className: h.embed }), (0, a.jsx)("div", { "aria-hidden": !d, children: e(!d) })] }) } }) } renderObscuredText() { let { children: e, renderTextElement: t, className: n } = this.props, { visible: i } = this.state, r = (0, a.jsx)(C.Consumer, { children: r => { let s = r || i, l = o.Children.toArray(e(s)), d = o.Children.map(l, e => o.isValidElement(e) && null != t ? t(e, s) : e); return (0, a.jsx)(c.Clickable, { tag: "span", onClick: s ? void 0 : this.removeObscurity, "aria-label": s ? void 0 : this.ariaLabel, "aria-expanded": s, tabIndex: s ? -1 : 0, role: s ? "presentation" : "button", className: u()(n, h.spoilerContent, h.spoilerMarkdownContent, { [h.hidden]: !s }), children: (0, a.jsx)("span", { className: h.obscuredTextContent, children: (0, a.jsx)("span", { "aria-hidden": !s, className: h.obscuredTextContentInner, children: d }) }) }) } }); return this.renderWithTooltip(r) } render() { let { type: e = "text" } = this.props; switch (e) { case "text": return this.renderObscuredText(); case "attachment": return this.renderObscuredAttachment(); case "embed": return this.renderObscuredEmbed(); default: return (0, I.assertNever)(e) } } get ariaLabel() { let { reason: e = E.ObscureReason.SPOILER } = this.props; switch (e) { case E.ObscureReason.SPOILER: return S.default.Messages.SPOILER; case E.ObscureReason.EXPLICIT_CONTENT: return S.default.Messages.EXPLICIT_CONTENT_WARNING_TOOLTIP; case E.ObscureReason.POTENTIAL_EXPLICIT_CONTENT: return S.default.Messages.EXPLICIT_CONTENT_WARNING_PENDING; default: return (0, I.assertNever)(e) } } get tooltipText() { let { reason: e = E.ObscureReason.SPOILER } = this.props; switch (e) { case E.ObscureReason.SPOILER: return S.default.Messages.SPOILER; case E.ObscureReason.EXPLICIT_CONTENT: return S.default.Messages.EXPLICIT_CONTENT_WARNING_TOOLTIP; case E.ObscureReason.POTENTIAL_EXPLICIT_CONTENT: return S.default.Messages.EXPLICIT_CONTENT_WARNING_PENDING; default: return (0, I.assertNever)(e) } } constructor(...e) { super(...e), A(this, "state", { visible: !1 }), A(this, "removeObscurity", e => { let { visible: t } = this.state; if (t) return; !t && (e.preventDefault(), e.stopPropagation()), this.setState({ visible: !0 }); let { onReveal: n } = this.props; null != n && n() }), A(this, "handleToggleObscurity", e => { e.stopPropagation(), e.nativeEvent.stopPropagation(); let { onToggleObscurity: t } = this.props; null != t && t(e), this.setState(e => ({ visible: !e.visible })) }), A(this, "obscure", () => { let { visible: e } = this.state; e && this.setState({ visible: !1 }) }) } } A(R, "Types", i), A(R, "Reasons", E.ObscureReason), t.default = R }, 514342: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("69649"); function u(e) { let { children: t, "aria-label": n, className: s, position: u, ...d } = e, _ = r.useRef(null), c = null != n ? n : "string" == typeof t && t; return (0, i.jsx)(o.Tooltip, { ...d, position: null != u ? u : "top", delay: 500, text: t, "aria-label": c, children: n => { let { onMouseEnter: r, onMouseLeave: o } = n; return (0, i.jsx)("div", { className: a()(s, l.overflow), ref: _, "aria-hidden": e["aria-hidden"], onMouseEnter: () => { let { current: e } = _; null != e && e.offsetWidth < e.scrollWidth && (null == r || r()) }, onMouseLeave: o, children: t }) } }) } }, 518774: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PictureInPictureWindow: function() { return T } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("699581"), u = n("358085"), d = n("144036"), _ = n("981631"), c = n("731718"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = { top: 80, bottom: 132, left: 80 }; class T extends(i = s.PureComponent) { componentDidMount() { this.setPosition(this.props.position) } componentDidUpdate(e) { (e.edgeOffsetTop !== this.props.edgeOffsetTop || e.edgeOffsetLeft !== this.props.edgeOffsetLeft || e.edgeOffsetBottom !== this.props.edgeOffsetBottom || e.edgeOffsetRight !== this.props.edgeOffsetRight || e.maxX !== this.props.maxX || e.maxY !== this.props.maxY || e.dockedRect !== this.props.dockedRect || e.roundCorners !== this.props.roundCorners) && this.ensureIsInPosition() } componentWillUnmount() { var e; null === (e = this._resizeObserver) || void 0 === e || e.disconnect() } getPosition(e) { let t = (0, l.findDOMNode)(this._innerDiv); if (null != t) { let e = t.getBoundingClientRect(); this._width = e.width, this._height = e.height } let { edgeOffsetTop: n, edgeOffsetLeft: i, edgeOffsetBottom: r, edgeOffsetRight: s, maxX: a, maxY: o, dockedRect: d } = this.props, c = Math.round(n), E = Math.round(o - r - this._height), I = Math.round(i), T = Math.round(a - s - this._width), f = (0, u.getPlatform)() !== u.PlatformTypes.WEB && this.inPopout ? 22 : 0; if (null != d) { var S, h; return { y: (null !== (S = null == d ? void 0 : d.y) && void 0 !== S ? S : 0) - f, x: null !== (h = null == d ? void 0 : d.x) && void 0 !== h ? h : 0 } } switch (e) { case _.PictureInPicturePositions.TOP_LEFT: return { y: c, x: I }; case _.PictureInPicturePositions.BOTTOM_LEFT: return { y: E, x: I }; case _.PictureInPicturePositions.TOP_RIGHT: return { y: c, x: T }; default: return { y: E, x: T } } } setPosition(e) { var t; let { x: n, y: i } = this.getPosition(e); null === (t = this._draggable) || void 0 === t || t.setPosition(n, i) } animateToPosition(e, t) { var n; let { x: i, y: r } = this.getPosition(e); null === (n = this._draggable) || void 0 === n || n.animateToPosition(i, r, {}, t) } calculateDecayingPosition(e, t, n, i) { return { x: e + 200 * n, y: t + 200 * i } } getXOffset() { let { position: e, edgeOffsetLeft: t, edgeOffsetRight: n } = this.props; switch (e) { case _.PictureInPicturePositions.TOP_LEFT: case _.PictureInPicturePositions.BOTTOM_LEFT: return -t; default: return n } } getYOffset() { let { position: e, edgeOffsetTop: t, edgeOffsetBottom: n } = this.props; switch (e) { case _.PictureInPicturePositions.TOP_LEFT: case _.PictureInPicturePositions.TOP_RIGHT: return -t; default: return n } } get inPopout() { return this.props.appContext === _.AppContext.POPOUT } render() { let { maxX: e, maxY: t, dockedRect: n, hidden: i, roundCorners: s, className: a } = this.props, l = {}; return null != n && (l = { transform: "translate3d(".concat(n.x, ", ").concat(n.y, ", 0)"), width: n.width, height: n.height }), (0, r.jsx)(d.default, { dragAnywhere: !0, ref: this.handleSetDraggableRef, className: o()(c.pictureInPictureWindow, a, { [c.hidden]: i, [c.borderRadius]: s }), maxX: e, maxY: t, disabled: null != n, onDragStart: this.handleDragStart, onDrag: this.handleDrag, onDragEnd: this.handleDragEnd, children: (0, r.jsx)("div", { ref: this.handleSetInnerDivRef, style: l, children: this.props.children }) }) } constructor(...e) { super(...e), E(this, "_draggable", void 0), E(this, "_innerDiv", void 0), E(this, "_resizeObserver", void 0), E(this, "_width", 0), E(this, "_height", 0), E(this, "_velocityX", 0), E(this, "_velocityY", 0), E(this, "_lastMoveTime", void 0), E(this, "_lastMoveX", 0), E(this, "_lastMoveY", 0), E(this, "ensureIsInPosition", () => { this.setPosition(this.props.position) }), E(this, "handleSetInnerDivRef", e => { this._innerDiv = e; let t = null == e ? void 0 : e.ownerDocument.defaultView; if (null != e && null != t) { var n; this._resizeObserver = new t.ResizeObserver(this.ensureIsInPosition), null === (n = this._resizeObserver) || void 0 === n || n.observe(e) } }), E(this, "handleSetDraggableRef", e => { this._draggable = e }), E(this, "handleDragStart", (e, t) => { this._velocityX = 0, this._velocityY = 0, this._lastMoveX = e, this._lastMoveY = t, this._lastMoveTime = new Date }), E(this, "handleDrag", (e, t) => { let n = new Date, i = Number(n) - Number(this._lastMoveTime); this._velocityX = (e - this._lastMoveX) / i, this._velocityY = (t - this._lastMoveY) / i, this._lastMoveX = e, this._lastMoveY = t, this._lastMoveTime = n }), E(this, "handleDragEnd", (e, t) => { let n; let { maxX: i, maxY: r } = this.props, s = this.calculateDecayingPosition(e, t, this._velocityX, this._velocityY), a = !0, o = !0; if (s.x > i / 2 && (o = !1), s.y > r / 2 && (a = !1), n = a && o ? _.PictureInPicturePositions.TOP_LEFT : a && !o ? _.PictureInPicturePositions.TOP_RIGHT : !a && o ? _.PictureInPicturePositions.BOTTOM_LEFT : _.PictureInPicturePositions.BOTTOM_RIGHT, this.animateToPosition(n, this.ensureIsInPosition), n !== this.props.position) { let { id: e, onMove: t } = this.props; null == t || t(e, n) } }) } } E(T, "defaultProps", { hidden: !1, roundCorners: !0 }); t.default = s.memo(e => { let { selectedPIPWindow: t, pipWindows: n, maxX: i, maxY: s, onWindowMove: a, dockedRect: o, pictureInPictureComponents: l, appContext: u, roundCorners: d } = e; return (0, r.jsx)("div", { className: c.pictureInPicture, children: (() => { if (null == t) return null; let e = n.map(e => { if (e.id !== t.id && e.component !== _.PictureInPictureComponents.EMBED_IFRAME) return null; let n = "string" == typeof e.component ? l[e.component] : e.component; return (0, r.jsx)(n, { ...e.props }, "pipWindow-".concat(e.id)) }); return (0, r.jsx)(T, { appContext: u, position: t.position, id: t.id, hidden: t.hidden, onMove: a, maxX: i, maxY: s, dockedRect: o, edgeOffsetTop: I.top, edgeOffsetBottom: I.bottom, edgeOffsetLeft: I.left, edgeOffsetRight: I.top, roundCorners: d, children: e }) })() }) }) }, 681426: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("120356"), u = n.n(l), d = n("481060"), _ = n("285952"), c = n("550118"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).SINGLE_AVATAR = "1", s.MULTIPLE_AVATAR = "2"; let I = { [d.AvatarSizes.SIZE_32]: c.avatarSmall, [d.AvatarSizes.SIZE_40]: c.avatarLarge }; class T extends(r = o.Component) { render() { let { type: e, avatarSize: t, className: n } = this.props; return "2" === e ? (0, a.jsxs)("div", { className: u()(c.multiplePlaceholder, n), children: [(0, a.jsxs)(_.default, { children: [(0, a.jsx)("div", { className: u()(c.placeholderAvatar, I[t], c.avatarMasked) }), (0, a.jsx)("div", { className: u()(c.placeholderAvatar, I[t], c.avatarMasked) }), (0, a.jsx)("div", { className: u()(c.placeholderAvatar, I[t]) })] }), (0, a.jsx)(_.default, { grow: 1, className: c.mulitplePlaceholderUsername, style: { maxWidth: this.placeholderMaxWidth } })] }) : (0, a.jsxs)(_.default, { className: u()(c.placeholder, n), children: [(0, a.jsx)("div", { className: u()(c.placeholderAvatar, I[t]) }), (0, a.jsx)(_.default, { grow: 1, className: c.placeholderUsername, style: { maxWidth: this.placeholderMaxWidth } })] }) } constructor(...e) { super(...e), E(this, "placeholderMaxWidth", "".concat(Math.floor(40 * Math.random()) + 40, "%")) } } E(T, "defaultProps", { type: "1" }), E(T, "Types", i), t.default = T }, 145196: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("608787"), l = n("481060"), u = n("571989"), d = n("65838"), _ = n("424218"), c = n("130208"), E = n("259580"), I = n("943461"), T = n("330379"), f = n("672108"), S = n("689938"), h = n("619481"), A = n("842648"); function m(e) { let { text: t, language: r } = e, s = () => (0, i.jsx)("pre", { children: (0, i.jsx)("code", { className: a()(A.scrollbarGhostHairline, h.codeView, "hljs"), children: t }) }); return (0, i.jsx)(o.LazyLibrary, { createPromise: () => Promise.resolve().then(n.bind(n, "364964")), webpackId: "364964", render: e => { if (!e.hasLanguage(r)) return s(); let n = e.highlight(r, t, !0); return null == n ? s() : (0, i.jsx)("pre", { children: (0, i.jsx)("code", { className: a()(A.scrollbarGhostHairline, h.codeView, "hljs", n.language), dangerouslySetInnerHTML: { __html: n.value } }) }) }, renderFallback: () => s() }) } function N(e) { let { expanded: t, setExpanded: n, isWholeFile: r, numLines: s } = e, a = (r ? S.default.Messages.PREVIEW_NUM_LINES : S.default.Messages.PREVIEW_NUM_LINES_AT_LEAST).format({ lines: s }); return (0, i.jsx)(l.Tooltip, { text: "".concat(t ? S.default.Messages.COLLAPSE : S.default.Messages.EXPAND, " (").concat(a, ")"), children: e => (0, i.jsxs)(l.Clickable, { ...e, className: h.toggleExpandSection, onClick: () => { n(!t) }, children: [(0, i.jsx)(E.default, { direction: t ? E.default.Directions.UP : E.default.Directions.DOWN }), t ? S.default.Messages.COLLAPSE : S.default.Messages.EXPAND] }) }) } function p(e) { let { url: t, fileName: n, fileSize: r } = e, s = "".concat(n, " (").concat((0, _.formatKbSize)(r), ")"); return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.Tooltip, { text: s, children: e => (0, i.jsx)("span", { ...e, className: a()(h.downloadSection, h.attachmentName), children: n }) }), (0, i.jsx)(l.Tooltip, { text: s, children: e => (0, i.jsx)("span", { ...e, className: a()(h.downloadSection, h.formattedSize), children: (0, _.formatKbSize)(r) }) }), (0, i.jsx)(l.Tooltip, { text: "".concat(S.default.Messages.DOWNLOAD, " ").concat(s), children: e => (0, i.jsx)(l.Anchor, { ...e, className: h.downloadSection, href: t, target: "_blank", rel: "noreferrer noopener", children: (0, i.jsx)(I.default, { className: h.downloadButton, width: 24, height: 24 }) }) })] }) } function O(e) { let { language: t, setLanguage: n } = e; return (0, i.jsx)(l.Popout, { position: "left", renderPopout: e => { let { closePopout: r } = e; return (0, i.jsx)(l.Dialog, { "aria-label": S.default.Messages.PREVIEW_CHANGE_LANGUAGE, children: (0, i.jsx)(l.Combobox, { className: h.languageSelector, multiSelect: !1, placeholder: S.default.Messages.PREVIEW_SEARCH_LANGUAGE_PLACEHOLDER, value: new Set([t]), autoFocus: !0, onChange: e => { n(e), r() }, children: e => Array.from(d.PLAINTEXT_FILE_EXTENSIONS).filter(t => t.toLowerCase().includes(e.toLowerCase())).map(e => (0, i.jsx)(l.ComboboxItem, { value: e, children: (0, i.jsx)(l.ComboboxItem.Label, { children: e }) }, e)) }) }) }, children: e => (0, i.jsx)(l.Tooltip, { text: S.default.Messages.PREVIEW_CHANGE_LANGUAGE, children: t => (0, i.jsx)(f.default, { width: 24, height: 24, ...t, ...e, className: h.codeIcon }) }) }) } function C(e) { return (0, i.jsx)(l.Tooltip, { text: S.default.Messages.PREVIEW_WHOLE_FILE, children: t => (0, i.jsx)(l.Clickable, { ...t, className: h.openFullPreviewSection, onClick: () => { (0, l.openModal)(t => (0, i.jsx)(g, { ...e, ...t })) }, children: (0, i.jsx)(T.default, {}) }) }) } function R(e) { var t; let { url: n, fileName: r, fileSize: s, fileContents: o, expanded: d, setExpanded: c, language: E, setLanguage: I, bytesLeft: T, className: f } = e, A = null == o ? void 0 : o.split("\n"), R = null !== (t = null == A ? void 0 : A.length) && void 0 !== t ? t : 0, g = d ? 100 : 6, L = 0 === T, v = ""; L && d && R > g ? v = "\n..." : !L && (v = "..."), "" !== v && (L ? v += " " + S.default.Messages.PREVIEW_LINES_LEFT.format({ lines: R - g }) : v += " " + S.default.Messages.PREVIEW_BYTES_LEFT.format({ formattedBytes: (0, _.formatKbSize)(T) })); let D = (null == A ? void 0 : A.slice(0, g).join("\n")) + v, M = (0, u.sanitizeWhitespace)(D), y = d || g < R; return (0, i.jsxs)("div", { className: a()(f, h.container), children: [(0, i.jsx)("div", { className: a()(h.textContainer, { [h.expanded]: d }), children: null == o ? (0, i.jsx)(l.Spinner, { className: h.spinner }) : (0, i.jsx)(m, { text: M, language: E }) }), (0, i.jsxs)(l.Text, { color: "header-secondary", className: h.footer, variant: "text-sm/normal", children: [y ? (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(N, { expanded: d, setExpanded: c, isWholeFile: L, numLines: R }), (0, i.jsx)(C, { url: n, fileName: r, fileSize: s, language: E, fileContents: o, bytesLeft: T })] }) : null, (0, i.jsx)("div", { className: h.footerGap }), (0, i.jsx)(p, { url: n, fileName: r, fileSize: s }), (0, i.jsx)(O, { language: E, setLanguage: I })] })] }) } function g(e) { let { url: t, fileName: n, fileSize: s, transitionState: a, language: o, fileContents: u, bytesLeft: d } = e, [c, E] = r.useState(o), I = null != u ? u : ""; return 0 !== d && (I += "... ".concat(S.default.Messages.PREVIEW_BYTES_LEFT.format({ formattedBytes: (0, _.formatKbSize)(d) }))), (0, i.jsx)(l.ModalRoot, { transitionState: a, "aria-label": S.default.Messages.PREVIEW_MODAL_LABEL, size: l.ModalSize.LARGE, className: h.modalRoot, children: (0, i.jsxs)("div", { className: h.modalContent, children: [(0, i.jsx)(l.ScrollerThin, { className: h.modalTextContainer, children: null == u ? (0, i.jsx)(l.Spinner, { className: h.spinner }) : (0, i.jsx)(m, { text: I, language: c }) }), (0, i.jsxs)(l.Text, { color: "header-secondary", className: h.footer, variant: "text-sm/normal", children: [(0, i.jsx)("div", { className: h.footerGap }), (0, i.jsx)(p, { url: t, fileName: n, fileSize: s }), (0, i.jsx)(O, { language: c, setLanguage: E })] })] }) }) } t.default = r.memo(function(e) { let { url: t, fileName: n, fileSize: s, contentType: o, className: l, onClick: u, onContextMenu: d } = e, [_, E] = r.useState(!1), [I, T] = r.useState(n.split(".").slice(-1)[0]), { fileContents: f, bytesLeft: S, hadError: A } = function(e, t) { let [n, i] = r.useState(!1), [s, a] = r.useState(null), [o, l] = r.useState(1); return r.useEffect(() => { (async function n() { try { var n, r; let s = await fetch(e, { headers: { Range: "bytes=0-".concat(5e4), Accept: "text/plain" } }), o = (function(e) { var t; let n = "utf-8", i = null !== (t = null == e ? void 0 : e.split("charset=").slice(-1)[0]) && void 0 !== t ? t : n; try { return new TextDecoder(i) } catch (t) { if ((null == e ? void 0 : e.startsWith("text")) || i.toLowerCase().includes("utf")) return new TextDecoder(n); throw t } })(t).decode(await s.arrayBuffer()), u = null !== (n = s.headers.get("content-range")) && void 0 !== n ? n : "0", d = null !== (r = s.headers.get("content-length")) && void 0 !== r ? r : "1", _ = parseInt(u.split("/")[1]) - parseInt(d); a(0 === _ ? o : o.slice(0, -1)), l(_), i(!1) } catch (e) { l(0), i(!0) } })() }, [e, t]), { fileContents: s, bytesLeft: o, hadError: n } }(t, o); return A ? (0, i.jsx)(c.default, { url: t, fileName: n, fileSize: s, onClick: u, onContextMenu: d, className: l }) : (0, i.jsx)(R, { url: t, fileName: n, fileSize: s, fileContents: f, bytesLeft: S, expanded: _, setExpanded: E, language: I, setLanguage: T, className: a()(h.newMosaicStyle, l) }) }, (e, t) => e.url === t.url && e.className === t.className) }, 366966: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TimeUnits: function() { return r.TimeUnits }, getTimeAndUnit: function() { return r.getTimeAndUnit } }); var i = n("735250"); n("470079"); var r = n("144830"); t.default = (0, r.default)(function(e) { let { children: t, className: n } = e; return (0, i.jsx)("span", { className: n, children: t }) }) }, 6048: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("1561"), u = n("84735"), d = n("922770"), _ = n("465670"), c = n("664800"), E = n("689938"), I = n("708647"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = Object.freeze({ SMALL: I.small, MEDIUM: I.medium, LARGE: I.large }), S = e => { let { hasContent: t, onClear: n, className: i, isLoading: a, size: u = f.SMALL } = e; return (0, r.jsx)(l.Clickable, { className: o()(i, I.iconLayout, u, { [I.pointer]: t }), onClick: e => { e.stopPropagation(), null != n && n(e) }, tabIndex: t ? 0 : -1, "aria-hidden": !t, onMouseDown: e => { e.preventDefault(), e.stopPropagation() }, children: (0, r.jsx)("div", { className: I.iconContainer, children: a ? (0, r.jsx)(d.Spinner, { type: d.Spinner.Type.SPINNING_CIRCLE, className: o()(I.icon, I.visible) }) : (0, r.jsxs)(s.Fragment, { children: [(0, r.jsx)(c.default, { className: o()(I.icon, { [I.visible]: !t }), "aria-label": E.default.Messages.SEARCH }), (0, r.jsx)(_.default, { className: o()(I.clear, { [I.visible]: t }), "aria-label": E.default.Messages.CLEAR })] }) }) }) }; S.Sizes = f; class h extends(i = s.PureComponent) { focus() { let { current: e } = this.inputRef; null == e || e.focus() } blur() { let { current: e } = this.inputRef; null == e || e.blur() } render() { let { query: e, autoFocus: t, onClear: n, className: i, placeholder: s = E.default.Messages.SEARCH, iconClassName: a, onKeyDown: l, onKeyUp: d, onKeyPress: _, isLoading: c, size: T, disabled: f, onChange: h, onBlur: A, onFocus: m, autoComplete: N, inputProps: p, hideSearchIcon: O, "aria-label": C = E.default.Messages.SEARCH, ...R } = this.props; return (0, r.jsx)(u.FocusRing, { focusTarget: this.inputRef, ringTarget: this.containerRef, children: (0, r.jsx)("div", { className: o()(i, I.container, T, { [I.disabled]: f }), ref: this.containerRef, ...R, children: (0, r.jsxs)("div", { className: I.inner, children: [(0, r.jsx)("input", { ...p, onFocus: m, onBlur: A, className: I.input, value: e, onChange: this.handleOnChange, onKeyDown: l, onKeyUp: d, onKeyPress: _, placeholder: s, disabled: f, autoFocus: t, autoComplete: N, "aria-label": C, ref: this.inputRef }), !O && (0, r.jsx)(S, { size: T, hasContent: e.length > 0, onClear: n, className: a, isLoading: c })] }) }) }) } constructor(...e) { super(...e), T(this, "inputRef", s.createRef()), T(this, "containerRef", s.createRef()), T(this, "handleOnChange", e => { let { onChange: t } = this.props; null == t || t(e.currentTarget.value) }) } } T(h, "Sizes", f), T(h, "defaultProps", { size: f.SMALL, isLoading: !1, disabled: !1 }), t.default = h }, 679342: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("392711"), l = n.n(o), u = n("866442"), d = n("692547"), _ = n("84735"), c = n("285952"), E = n("263704"), I = n("981631"), T = n("330888"), f = n("611273"); function S(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let h = l().memoize(e => { let t = !1; if (null != e && (0, u.isValidHex)(e)) { let n = (0, u.hex2int)(e); null != n && (t = .2 > (0, u.getDarkness)(n)) } return t ? d.default.unsafe_rawColors.BLACK_500.css : d.default.unsafe_rawColors.WHITE_500.css }); class A extends r.PureComponent { render() { let e; let { selected: t, color: n, className: r, children: s } = this.props, o = h(n); return t ? e = { color: o, background: null != n ? n : d.default.unsafe_rawColors.BRAND_500.css } : null != n && (e = { color: n }), (0, i.jsx)(_.FocusRing, { offset: { left: 4 }, children: (0, i.jsxs)(c.default, { className: a()(T.selectableItem, r, { [T.selected]: t }), onClick: this.handleClick, onKeyUp: this.handleKeyUp, align: c.default.Align.CENTER, style: { ...e, ...this.props.style }, role: "button", tabIndex: 0, children: [(0, i.jsx)(c.default, { align: c.default.Align.CENTER, className: T.selectableItemLabel, shrink: 1, children: s }), t && (0, i.jsx)(c.default, { wrap: c.default.Wrap.WRAP, className: f.marginReset, grow: 0, shrink: 0, children: (0, i.jsx)(E.default, { color: o }) })] }) }) } constructor(...e) { super(...e), S(this, "state", { color: h(this.props.color) }), S(this, "handleKeyUp", e => { if (e.which === I.KeyboardKeys.ENTER || e.which === I.KeyboardKeys.SPACE) { let { onClick: e, ...t } = this.props; e(t) } }), S(this, "handleClick", () => { let { onClick: e, ...t } = this.props; e(t) }) } } t.default = A }, 976644: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Shine: function() { return m }, ShineSizes: function() { return o } }); var i, r, s, a, o, l, u = n("735250"), d = n("470079"), _ = n("120356"), c = n.n(_), E = n("748780"), I = n("481060"), T = n("727637"), f = n("285952"), S = n("481887"); (i = o || (o = {})).DEFAULT = "default", i.SMALL = "small"; let h = { default: S.shineDefault, small: S.shineSmall }, A = { default: S.shineInnerDefault, small: S.shineInnerSmall }; class m extends(l = d.PureComponent) { render() { let { className: e, shineSize: t, shinePaused: n, ...i } = this.props; return (0, u.jsx)(E.default.div, { ...i, className: c()(S.shineContainer, e, { [S.shinePaused]: n }), children: (0, u.jsx)(f.default, { align: f.default.Align.CENTER, justify: f.default.Justify.CENTER, className: h[t], children: (0, u.jsx)("div", { className: A[t] }) }) }) } } a = { shineSize: "default" }, (s = "defaultProps") in(r = m) ? Object.defineProperty(r, s, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : r[s] = a; let N = e => { let { children: t, className: n, disabled: i, submitting: r, pauseAnimation: s, shineSize: a = "default", shinePaused: o, buttonShineClassName: l, onlyShineOnHover: _, ...E } = e, f = d.createRef(), h = (0, T.default)(f), A = !i && !r && !0 !== s && (!_ || h); return (0, u.jsxs)(I.Button, { buttonRef: f, ...E, className: c()(S.shinyButton, n), disabled: i, submitting: r, children: [t, A ? (0, u.jsx)(m, { shinePaused: o, className: c()(S.buttonShine, _ ? S.onlyShineOnHover : void 0, l), shineSize: a }) : null] }) }; N.ShineSizes = o, t.default = N }, 695464: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("147479"), l = n("391652"); let u = r.memo(r.forwardRef((e, t) => { let { onScroll: n, onResize: s, listPadding: u = [0, 0, 0, 0], renderRow: d, renderSection: _, renderSectionHeader: c, renderSectionFooter: E, renderListHeader: I, rowCount: T, rowCountBySection: f, rowHeight: S, sectionMarginBottom: h, sectionHeaderHeight: A, sectionFooterHeight: m, listHeaderHeight: N, stickyHeaders: p = !1, className: O, hideScrollbar: C = !1, fade: R = !1, initialScrollTop: g = 0, role: L = "list" } = e, [v, D] = r.useState(-1), [M, y] = r.useState(-1), P = r.useRef(null), U = r.useRef(0), b = r.useRef(-1); r.useLayoutEffect(() => { var e; let t = null === (e = P.current) || void 0 === e ? void 0 : e.getScrollerNode(); null != t && (t.scrollTop = g) }, []); let G = r.useCallback(() => { let e = "function" == typeof N ? N() : N; return null == e ? 0 : e }, [N]), w = r.useCallback((e, t, n) => "function" == typeof S ? S(n, { sectionIndex: e, sectionRowIndex: t }) : S, [S]), k = r.useCallback(e => { let t = "function" == typeof A ? A(e) : A; return null == t ? 0 : t }, [A]), B = r.useCallback(e => { let t = "function" == typeof m ? m(e) : m; return null == t ? 0 : t }, [m]), V = r.useCallback(e => { let t = "function" == typeof h ? h(e) : h; return null == t ? 0 : t }, [h]), x = r.useRef([]), F = r.useRef([]), { totalHeight: H, rowDescriptors: Y, sectionDescriptors: j } = r.useMemo(() => { let e = 0, t = null != f, n = t ? f.length : 1, i = u[0], r = [], s = []; i += G(); for (let a = 0; a < n; a++) { let n = t ? f[a] : T, o = (null == f ? void 0 : f[a]) !== 0; s[a] = { firstRowIndex: e, offset: { top: i, bottom: -1 } }, i += k(a); for (let t = 0; t < n; t++) { let n = i + (o ? w(a, t, e) : 0), s = { top: i, bottom: n }; r[e] = { sectionIndex: a, offset: s }, i = n, e++ } i += B(a) + V(a), s[a].offset.bottom = i } return { totalHeight: i += u[2], rowDescriptors: r, sectionDescriptors: s } }, [w, B, k, V, u, T, f, G]); x.current = j, F.current = Y; let W = r.useCallback(() => { var e; let t = null === (e = P.current) || void 0 === e ? void 0 : e.getScrollerNode(); if (null == t) return; let { offsetWidth: n, offsetHeight: i, scrollTop: r } = t; y(i), D(r), null == s || s({ width: n, height: i }) }, [s]); r.useLayoutEffect(() => { -1 === M && W() }, [M, W]), r.useEffect(() => { var e; let t = null === (e = P.current) || void 0 === e ? void 0 : e.getScrollerNode(), n = null == t ? void 0 : t.ownerDocument.defaultView; if (null == t || null == n) return; let i = new n.ResizeObserver(W); return i.observe(t), () => i.disconnect() }, [W]); let K = r.useCallback(() => { var e; let t = null === (e = P.current) || void 0 === e ? void 0 : e.getScrollerNode(); null != t && (window.cancelAnimationFrame(b.current), b.current = window.requestAnimationFrame(() => { let { scrollTop: e } = t; U.current = e, null == n || n(e), D(e) })) }, [n]); r.useImperativeHandle(t, () => ({ scrollTo: function(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { animate: i = !1 } = n; null === (t = P.current) || void 0 === t || t.scrollTo({ to: e, animate: i }) }, scrollRowIntoView: function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { animate: n = !1, offset: i = 0 } = t, r = F.current[e]; null != r && window.requestAnimationFrame(() => { var t, s; let { sectionIndex: a, offset: { top: o, bottom: l } } = r, u = k(a), d = o - (p ? u : 0) - i <= U.current, _ = l + i >= U.current + M; if (d) { let r = U.current + u - o, s = p ? U.current - r : o; null === (t = P.current) || void 0 === t || t.scrollTo({ to: 0 === e ? 0 : s - i, animate: n }) } else if (_) { let e = l - (U.current + M); null === (s = P.current) || void 0 === s || s.scrollTo({ to: U.current + e + i, animate: n }) } }) }, scrollToSectionTop: function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { animate: n = !1, offset: i = 0 } = t, r = x.current[e]; null != r && window.requestAnimationFrame(() => { var t; null === (t = P.current) || void 0 === t || t.scrollTo({ to: (0 === e ? 0 : r.offset.top) + i, animate: n }) }) }, getListDimensions: () => ({ height: M, totalHeight: H }), getSectionDescriptors: () => x.current, getRowDescriptors: () => F.current, getScrollerNode: () => { var e; return null === (e = P.current) || void 0 === e ? void 0 : e.getScrollerNode() }, scrollIntoViewNode: e => { var t; return null === (t = P.current) || void 0 === t ? void 0 : t.scrollIntoViewNode({ node: e }) } }), [k, p, H, M]); let { visibleItems: z, listOffset: Z } = r.useMemo(() => { if (-1 === M || -1 === v) return { visibleItems: null, listOffset: 0 }; let e = v + M, t = 0, n = u[0], i = [], r = G(); null != I && v < r ? i.push(I()) : n += r; for (let r = 0; r < j.length; r++) { let { firstRowIndex: s, offset: { top: a, bottom: o } } = j[r], l = o - a; if (0 === l) continue; let u = k(r), I = B(r), T = V(r); if (o <= v) n = o; else if (o > v && a < e) { t = s; let o = [], f = 0, S = 0, h = a + u >= v && a <= e; for (null != c && (p || h) && o.push(c(r)), !h && !p && (n += u); f + u + I < l - T;) { let i = w(r, S, t), s = a + f + u, l = s + i; if (l <= v) n = l - (p ? u : 0); else if (l > v && s < e) o.push(d(t, { sectionIndex: r, sectionRowIndex: S })); else break; f += i, S++, t++ } let A = a + u + f, m = A + I >= v && A <= e; null != E && m && o.push(E(r)), null != _ ? i.push(_(r, o)) : i = [...i, ...o] } else break } return { visibleItems: i, listOffset: n } }, [w, B, k, V, u, d, _, E, c, v, j, p, I, G, M]), X = r.useMemo(() => { var e, t, n; return { top: Z, right: null !== (e = null == u ? void 0 : u[1]) && void 0 !== e ? e : 0, bottom: null !== (t = null == u ? void 0 : u[2]) && void 0 !== t ? t : 0, left: null !== (n = null == u ? void 0 : u[3]) && void 0 !== n ? n : 0 } }, [Z, u]), Q = r.useMemo(() => ({ height: H }), [H]), q = C ? o.AdvancedScrollerNone : o.AdvancedScrollerThin; return (0, i.jsxs)(q, { fade: R, className: a()(l.scroller, O), ref: P, onScroll: K, children: [(0, i.jsx)("div", { role: L, className: l.listItems, style: X, children: z }), (0, i.jsx)("div", { className: l.listHeight, style: Q })] }) })); t.default = u }, 682864: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("735250"); function r(e) { let { size: t, horizontal: n = !1 } = e, r = n ? t : 1, s = n ? 1 : t; return (0, i.jsx)("span", { style: { display: "block", width: r, minWidth: r, height: s, minHeight: s } }) } n("470079") }, 936195: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("481060"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o extends r.PureComponent { render() { let { text: e, lastItem: t, className: n } = this.props; return (0, i.jsxs)("span", { children: [(0, i.jsx)(s.Anchor, { className: n, onClick: this.handleClick, children: e }), t ? "" : ", "] }) } constructor(...e) { super(...e), a(this, "handleClick", () => { let { onClick: e, index: t } = this.props; null == e || e(t) }) } } class l extends r.PureComponent { render() { let e = this.props.artists.split(";"); if (!this.props.canOpen) return e.join(", "); let t = e.length - 1; return e.map((e, n) => (0, i.jsx)(o, { text: e, index: n, lastItem: n === t, onClick: this.handleOpenSpotifyArtist, className: this.props.linkClassName }, "spotify-artist-".concat(n))) } constructor(...e) { super(...e), a(this, "handleOpenSpotifyArtist", e => { let { onOpenSpotifyArtist: t } = this.props; null == t || t(e) }) } } }, 153124: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UID: function() { return l }, uid: function() { return a }, useUID: function() { return o } }); var i = n("97613"), r = n.n(i), s = n("207561"); let a = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "uid_"; return r()(e) }, o = () => (0, s.useLazyValue)(() => a()), l = e => { let { children: t } = e; return t(o()) } }, 543595: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Types: function() { return i } }), n("789020"), n("47120"); var i, r, s, a = n("735250"), o = n("470079"), l = n("120356"), u = n.n(l), d = n("512722"), _ = n.n(d), c = n("780384"), E = n("481060"), I = n("438139"), T = n("410030"), f = n("726542"), S = n("740265"), h = n("122810"), A = n("833664"), m = n("503438"), N = n("802856"), p = n("420660"), O = n("471445"), C = n("833858"), R = n("223135"), g = n("769654"), L = n("750154"), v = n("768581"), D = n("630388"), M = n("153066"), y = n("672938"), P = n("285952"), U = n("366695"), b = n("346656"), G = n("514342"), w = n("366966"), k = n("936195"), B = n("692437"), V = n("632184"), x = n("806519"), F = n("981631"), H = n("701488"), Y = n("689938"), j = n("217833"); function W(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).USER_POPOUT = "UserPopout", s.USER_POPOUT_V2 = "UserPopoutV2", s.ACTIVITY_FEED = "ActivityFeed", s.PROFILE = "Profile", s.PROFILE_V2 = "ProfileV2", s.STREAM_PREVIEW = "StreamPreview", s.VOICE_CHANNEL = "VoiceChannel", s.SIMPLIFIED_PROFILE = "SimplifiedProfile", s.BITE_SIZE_POPOUT = "BiteSizePopout"; let K = { StreamPreview: [108, 60], UserPopout: [108, 60], UserPopoutV2: [108, 60], BiteSizePopout: [108, 60], VoiceChannel: [108, 60], Profile: [162, 90], ProfileV2: [162, 90], SimplifiedProfile: [162, 90], ActivityFeed: [900, 500] }, { getAssetImage: z } = n("81063"), Z = (0, I.default)(class extends o.PureComponent { render() { return (0, a.jsx)("div", { className: j.timestamp, children: this.props.message }) } }); function X(e) { let { activity: t } = e, n = null; return (0, m.default)(t) && (n = F.PlatformTypes.SPOTIFY), null != t.platform && [F.ActivityGamePlatforms.PS4, F.ActivityGamePlatforms.PS5].includes(t.platform) && (n = F.PlatformTypes.PLAYSTATION), n } function Q(e) { let { activity: t } = e, n = (0, T.default)(), i = X({ activity: t }); if (null == i) return null; let r = f.default.get(i); return (0, a.jsx)("img", { alt: "", src: (0, c.isThemeLight)(n) ? r.icon.lightSVG : r.icon.darkSVG, className: j.platformIcon }) } class q extends(r = o.PureComponent) { get activity() { let { activity: e, activityGuild: t } = this.props; return null != t && (null == e ? void 0 : e.type) !== F.ActivityTypes.PLAYING && (null == e ? void 0 : e.type) !== F.ActivityTypes.WATCHING && (null == e ? void 0 : e.type) !== F.ActivityTypes.LISTENING && (null == e ? void 0 : e.type) !== F.ActivityTypes.HANG_STATUS ? { type: F.ActivityTypes.PLAYING, name: Y.default.Messages.SHARING_SCREEN } : e } getTypeClass(e, t) { return (0, M.getClass)(j, e, this.props.type, t) } isStreamerOnTypeProfile() { return (0, p.default)(this.activity) && ("Profile" === this.props.type || "ProfileV2" === this.props.type) } isStreamerOnTypeActivityFeed() { return (0, p.default)(this.activity) && "ActivityFeed" === this.props.type } renderHeader(e) { let t; let { hideHeader: n, activityGuild: i, channel: r, renderHeaderAccessory: s, type: o } = this.props, l = this.activity; if (n || null == l) return null; let { name: d } = l; switch (l.type) { case F.ActivityTypes.STREAMING: t = Y.default.Messages.USER_ACTIVITY_HEADER_LIVE_ON_PLATFORM.format({ platform: [F.PlatformTypes.TWITCH, F.PlatformTypes.YOUTUBE].includes(d.toLowerCase()) ? d : f.default.get(F.PlatformTypes.TWITCH).name }); break; case F.ActivityTypes.LISTENING: t = Y.default.Messages.USER_ACTIVITY_HEADER_LISTENING.format({ name: d }); break; case F.ActivityTypes.WATCHING: t = Y.default.Messages.USER_ACTIVITY_HEADER_WATCHING.format({ name: d }); break; case F.ActivityTypes.PLAYING: t = (0, S.default)(l); break; case F.ActivityTypes.COMPETING: t = Y.default.Messages.USER_ACTIVITY_HEADER_COMPETING.format({ name: d }) } if (null != i) { var _; t = (0, D.hasFlag)(null !== (_ = null == l ? void 0 : l.flags) && void 0 !== _ ? _ : 0, F.ActivityFlags.EMBEDDED) ? l.type === F.ActivityTypes.WATCHING ? Y.default.Messages.EMBEDDED_ACTIVITIES_WATCHING_IN_GUILD.format({ guildName: i.name }) : Y.default.Messages.EMBEDDED_ACTIVITIES_PLAYING_IN_GUILD.format({ guildName: i.name }) : Y.default.Messages.USER_ACTIVITY_HEADER_STREAMING_TO_GUILD.format({ server: i.name }) }(null == l ? void 0 : l.type) === F.ActivityTypes.HANG_STATUS && (t = Y.default.Messages.STATUS_LEAD_IN_JUST); let c = (0, O.getChannelIconComponent)(r, i); return null != r && (t = r.name), (0, a.jsxs)("div", { className: j.headerContainer, children: [null != r && null !== c ? (0, a.jsx)(c, { className: u()(j.icon) }) : null, (0, a.jsx)(E.Heading, { className: (0, M.getClass)(j, "headerText", e ? "EmptyBody" : "Normal"), variant: "eyebrow", color: "ProfileV2" === o ? "header-primary" : void 0, children: (0, a.jsx)(G.default, { children: t }) }), null == s ? void 0 : s()] }) } renderXboxImage() { return (0, a.jsx)("div", { className: j.assets, children: (0, a.jsx)("img", { alt: "", src: f.default.get(F.PlatformTypes.XBOX).icon.customPNG, className: u()(this.getTypeClass("assetsLargeImage", "Xbox")) }) }) } renderImage(e) { var t, n, i; let r, s; if (e.type === F.ActivityTypes.HANG_STATUS) return (0, a.jsx)("div", { className: j.assets, children: (0, a.jsx)(R.default, { hangStatusActivity: e, className: u()(j.assetsHangStatus, this.getTypeClass("assetsSmallImage", "WithoutLargeImage")) }) }); let { type: l } = this.props, { assets: d, application_id: _ } = e; if (null == d || null == d.large_image && null == d.small_image) return null; (0, p.default)(e) && (r = K[l]); let c = (0, m.default)(e), I = null != d.large_image ? (0, a.jsx)("img", { alt: null !== (t = d.large_text) && void 0 !== t ? t : "", src: z(_, d.large_image, null != r ? r : [H.ImageSizes.LARGE, H.ImageSizes.LARGE]), className: u()(this.getTypeClass("assetsLargeImage", this.isStreamerOnTypeProfile() || this.isStreamerOnTypeActivityFeed() ? F.PlatformTypes.TWITCH : ""), { [null !== (n = this.getTypeClass("assetsLargeMask")) && void 0 !== n ? n : ""]: null != d.small_image }, { [j.assetsLargeImageSpotify]: c }) }) : null; if (c) I = (0, a.jsx)(E.Anchor, { onClick: this.handleOpenSpotifyAlbum, children: I }); else if ((0, L.isStageActivity)(e)) { let t = (0, L.unpackStageChannelParty)(e); if (null == t) return null; I = (0, a.jsx)(x.default, { mask: x.default.Masks.SQUIRCLE, width: H.ImageSizes.SMALL, height: H.ImageSizes.SMALL, children: (0, a.jsx)("img", { src: null !== (i = v.default.getGuildIconURL({ id: t.guildId, icon: d.small_image, size: H.ImageSizes.SMALL })) && void 0 !== i ? i : void 0, className: j.assetsLargeImageVoiceChannel, alt: "" }) }) } return (this.isStreamerOnTypeActivityFeed() && null != e.url && "" !== e.url && (I = (0, a.jsxs)("div", { className: j.twitchImageContainer, children: [(0, a.jsxs)("div", { className: j.twitchImageOverlay, children: [(0, a.jsx)(E.H, { className: j.streamName, children: e.name }), (0, a.jsx)("div", { className: j.streamGame, children: Y.default.Messages.STREAMER_PLAYING.format({ game: e.details }) })] }), (0, a.jsx)(E.Anchor, { className: j.twitchBackgroundImage, href: e.url, children: I })] })), !(0, L.isStageActivity)(e) && null != d.small_image && (s = (0, a.jsx)(E.Tooltip, { text: "" !== d.small_text ? d.small_text : null, position: "top", children: e => { var t; return (0, a.jsx)("img", { alt: null !== (t = d.small_text) && void 0 !== t ? t : "", src: z(_, d.small_image, [H.ImageSizes.SMALL, H.ImageSizes.SMALL]), className: this.getTypeClass("assetsSmallImage", null == I ? "WithoutLargeImage" : void 0), ...e }) } })), null == I) ? (0, a.jsx)("div", { className: j.assets, children: s }) : (0, a.jsxs)("div", { className: j.assets, children: [(0, a.jsx)(E.Tooltip, { text: null != d.large_text ? d.large_text : null, position: "top", children: e => { let { onMouseEnter: t, onMouseLeave: n } = e; return null != I ? o.cloneElement(I, { onMouseEnter: t, onMouseLeave: n }) : null } }), s] }) } renderGameImage(e) { let { user: t, type: n, application: i, activityGuild: r } = this.props; return null != e.assets || (0, h.default)(e) || e.type !== F.ActivityTypes.PLAYING || "ActivityFeed" === n || t.bot ? null : null == i && null != r ? (0, a.jsx)("div", { className: u()(j.gameIcon, j.screenshareIcon) }) : (0, a.jsx)(U.default, { className: j.gameIcon, game: i }) } renderName(e) { let { user: t, application: n, hideName: i } = this.props; if (i) return null; let { details: r, type: s } = e; if (s === F.ActivityTypes.CUSTOM_STATUS) return null; let o = (0, A.default)(e), l = e.name, d = l; if (s === F.ActivityTypes.HANG_STATUS ? d = (0, C.getHangStatusText)(e) : o && null != n ? d = (0, a.jsx)("span", { className: j.activityName, children: d }) : !o && (l = r, d = r, (0, m.default)(e) && null != e.sync_id && null != r ? d = (0, a.jsx)(E.Anchor, { className: j.bodyLink, onClick: this.handleOpenSpotifyTrack, children: r }) : (0, L.isStageActivity)(e) && (d = e.name)), null == d) return null; let _ = null != X({ activity: e }) && "BiteSizePopout" === this.props.type; return (0, a.jsx)(E.Text, { title: l, variant: "text-sm/semibold", className: u()((0, M.getClass)(j, "name", t.bot || this.isStreamerOnTypeProfile() ? "wrap" : "normal"), _ && j.namePlatformIconMarginBiteSizePopout), children: d }) } renderDetails(e) { let t; let { details: n, state: i } = e, { activityGuild: r } = this.props, s = n, o = n; if (e.type === F.ActivityTypes.CUSTOM_STATUS) s = i; else if (e.type === F.ActivityTypes.HANG_STATUS) s = null != r ? Y.default.Messages.HANG_STATUS_LOCATION.format({ guildName: r.name }) : null, t = null != r ? () => { (0, g.transitionToGuild)(r.id) } : void 0; else if (!(0, A.default)(e)) { if (o = s = i, (0, m.default)(e) && null != i) s = Y.default.Messages.USER_ACTIVITY_LISTENING_ARTISTS.format({ artists: o, artistsHook: (t, n) => (0, a.jsx)(k.default, { artists: i, linkClassName: j.bodyLink, canOpen: null != e.sync_id, onOpenSpotifyArtist: this.handleOpenSpotifyArtist }, n) }); else if ((0, L.isStageActivity)(e)) { var l; s = null === (l = e.assets) || void 0 === l ? void 0 : l.small_text } } return null == s || 0 === s.length ? null : ((0, p.default)(e) && (s = Y.default.Messages.STREAMER_PLAYING.format({ game: s })), null != t) ? (0, a.jsx)(E.Clickable, { onClick: t, title: null != o ? o : void 0, className: j.clickableDetails, children: s }) : (0, a.jsx)("div", { title: null != o ? o : void 0, className: (0, p.default)(e) || (0, m.default)(e) ? j.detailsWrap : j.details, children: s }) } renderChannelDetails(e) { let { activityGuild: t, showChannelDetails: n, channel: i } = this.props; return n && null != t ? null == i ? (0, a.jsx)("div", { className: (0, p.default)(e) || (0, m.default)(e) ? j.detailsWrap : j.details, children: Y.default.Messages.USER_PROFILE_IN_GUILD_DETAILS.format({ guildName: t.name }) }) : (0, a.jsxs)("div", { className: u()((0, p.default)(e) || (0, m.default)(e) ? j.detailsWrap : j.details, j.guildDetails), children: [(0, a.jsx)(b.default, { guild: t, size: b.default.Sizes.SMOL, className: j.guildIcon }), (0, a.jsx)(B.default, { width: 12, height: 12 }), (0, a.jsxs)("div", { className: j.voiceChannelInfo, children: [(0, a.jsx)(V.default, { width: 12, height: 12 }), (0, a.jsx)(E.Text, { variant: "text-xs/semibold", children: null == i ? void 0 : i.name })] })] }) : null } renderTimePlayed(e) { let { activityGuild: t } = this.props; if (!(0, A.default)(e) || (0, m.default)(e)) return null; let { timestamps: n } = e; return null == n ? null : (0, h.default)(e) ? (0, a.jsx)(Z, { timestamps: n }) : (0, a.jsx)(w.default, { start: n.start, location: w.default.Locations.USER_ACTIVITY, className: j.playTime, isApplicationStreaming: null != t }) } renderTimeBar(e) { if (!(0, m.default)(e)) return null; let { timestamps: t } = e; if (null == t) return null; let { start: n, end: i } = t; return null == n || null == i ? null : (0, a.jsx)(y.default, { start: n, end: i, className: this.getTypeClass("timeBar"), themed: "VoiceChannel" === this.props.type || "UserPopout" === this.props.type || "UserPopoutV2" === this.props.type || "ProfileV2" === this.props.type || "SimplifiedProfile" === this.props.type || "BiteSizePopout" === this.props.type }) } renderState(e, t) { var n, i; let r; let { state: s, party: o, assets: l } = e, u = s, d = u; return (!(0, A.default)(e) && (d = u = null == l ? void 0 : l.large_text, (0, m.default)(e) && null != u && (u = Y.default.Messages.USER_ACTIVITY_LISTENING_ALBUM.format({ album: d, albumHook: (t, n) => null != e.sync_id && null != d ? (0, a.jsx)(E.Anchor, { className: j.bodyLink, onClick: this.handleOpenSpotifyAlbum, children: d }, n) : d }))), null != u && 0 !== u.length && e.type !== F.ActivityTypes.CUSTOM_STATUS || (0, L.isStageActivity)(e)) ? ((null == o ? void 0 : o.size) == null && [(0, H.POKER_NIGHT_APPLICATION_ID)].includes(null !== (n = e.application_id) && void 0 !== n ? n : "") ? r = Y.default.Messages.USER_ACTIVITY_STATE_SIZE.format({ count: "0", max: null !== (i = null == t ? void 0 : t.getMaxParticipants()) && void 0 !== i ? i : 0 }) : (0, L.isStageActivity)(e) && (null == o ? void 0 : o.size) != null ? r = Y.default.Messages.USER_ACTIVITY_STAGE_STATE_SIZE.format({ numSpeakers: o.size[0], numListeners: o.size[1] - o.size[0] }) : (null == o ? void 0 : o.size) != null && o.size.length >= 2 && (r = Y.default.Messages.USER_ACTIVITY_STATE_SIZE.format({ count: o.size[0], max: o.size[1] })), (0, a.jsxs)("div", { className: j.state, children: [(0, a.jsx)("span", { title: d, children: u }), null != r ? (0, a.jsxs)("span", { children: [" ", r] }) : null] })) : null } render() { let e; let { type: t, renderActions: n, className: i, application: r, showReactions: s } = this.props, o = this.activity; if (null == o || o.type === F.ActivityTypes.CUSTOM_STATUS) return null; let l = "UserPopout" === t || "UserPopoutV2" === t || "BiteSizePopout" === t, d = "Profile" === t || "ProfileV2" === t || "SimplifiedProfile" === t, _ = "ActivityFeed" === t, c = "StreamPreview" === t, E = !1; (0, N.default)(o) ? (e = this.renderXboxImage(), E = !0) : null == (e = this.renderImage(o)) && (E = null != (e = this.renderGameImage(o))); let I = this.renderName(o), T = this.renderDetails(o), f = this.renderState(o, r), S = this.renderTimePlayed(o), h = this.renderChannelDetails(o), A = null != n ? n() : null, m = this.renderTimeBar(o), p = ![e, I, T, f, S, m, A].some(e => null != e); return (0, a.jsxs)("div", { className: u()(this.getTypeClass("activity"), i), children: [this.renderHeader(p), (0, a.jsx)("div", { className: u()(E ? j.bodyAlignCenter : j.bodyNormal, s && !l && !c && j.wrap), children: (0, a.jsxs)("div", { className: j.activityDetails, children: [e, this.isStreamerOnTypeActivityFeed() ? null : (0, a.jsxs)(P.default.Child, { className: u()((0, M.getClass)(j, "content", E ? "GameImage" : null != e ? "Images" : "NoImages", t)), children: [I, T, f, S, h, l || c ? null : m, _ ? A : null] }), d ? (0, a.jsx)("div", { className: j.actions, children: A }) : null] }) }), l ? m : null, l || c ? A : null, (0, a.jsx)(Q, { activity: o })] }) } constructor(...e) { super(...e), W(this, "handleOpenSpotifyTrack", () => { let { activity: e, onOpenSpotifyTrack: t } = this.props; _()(null != e, "Spotify activity was null"), null == t || t(e) }), W(this, "handleOpenSpotifyArtist", e => { let { activity: t, onOpenSpotifyArtist: n, user: i } = this.props; _()(null != t, "Spotify activity was null"), null == n || n(t, i.id, e) }), W(this, "handleOpenSpotifyAlbum", () => { let { activity: e, onOpenSpotifyAlbum: t, user: n } = this.props; _()(null != e, "Spotify activity was null"), null == t || t(e, n.id) }) } } W(q, "Types", i), t.default = q }, 321148: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("481060"), u = n("129861"), d = n("730749"), _ = n("484459"), c = n("103575"), E = n("285952"), I = n("981631"), T = n("21782"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class S extends(i = s.Component) { render() { let { popoutOpen: e } = this.state, { user: t, analyticsContext: n, disablePopout: i, guildId: s } = this.props, a = { location: { ...n.location, object: I.AnalyticsObjects.LIST_ITEM } }; return (0, r.jsx)(l.Popout, { preload: () => (0, _.maybeFetchUserProfileForPopout)(t.id, t.getAvatarURL(s, 80), { guildId: s }), renderPopout: e => (0, r.jsx)(c.default, { ...e, location: "UserListItem", guildId: s, userId: t.id, analyticsParams: a }), position: "left", onRequestClose: this.handleUserPopoutClose, shouldShow: !i && e, children: e => this.renderUserPopout(e) }) } constructor(...e) { super(...e), f(this, "state", { popoutOpen: !1 }), f(this, "handleClickUser", () => { let { onPopoutOpen: e } = this.props; this.setState({ popoutOpen: !this.state.popoutOpen }), null == e || e() }), f(this, "handleUserPopoutClose", () => { let { onPopoutClose: e } = this.props; this.setState({ popoutOpen: !1 }), null == e || e() }), f(this, "renderUserPopout", e => { let { className: t, disablePopout: n, onContextMenu: i, user: s, status: a, textClassName: d, nick: _, guildId: c } = this.props; return (0, r.jsxs)(E.default, { align: E.default.Align.CENTER, className: o()(T.memberListItem, t, { [T.popoutDisabled]: n }), onContextMenu: i, onMouseDown: e.onMouseDown, onKeyDown: e.onKeyDown, onClick: this.handleClickUser, children: [(0, r.jsx)(l.Avatar, { src: s.getAvatarURL(c, 24), className: T.avatar, "aria-label": s.username, size: l.AvatarSizes.SIZE_24, status: a }), (0, r.jsx)(l.Text, { className: o()(T.memberListItemTag, d), variant: "text-sm/normal", children: (0, r.jsx)(u.default, { user: s, nick: _, usernameClass: T.username, hideDiscriminator: !0 }) })] }) }) } } f(S, "defaultProps", { disablePopout: !1 }), t.default = (0, d.default)(S) }, 470441: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BackgroundTransition: function() { return f } }); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("748780"), u = n("846519"), d = n("215569"), _ = n("285952"), c = n("981631"), E = n("956941"); function I(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let T = { [c.ChannelLayouts.NORMAL]: E.normal, [c.ChannelLayouts.MINIMUM]: E.minimum, [c.ChannelLayouts.NO_CHAT]: E.noChat, [c.ChannelLayouts.FULL_SCREEN]: E.fullScreen }; class f extends s.PureComponent { componentDidAppear() { this.state.animation.setValue(1) } componentWillEnter(e) { let { animation: t } = this.state; t.setValue(0), l.default.spring(t, { toValue: 1, overshootClamping: !0 }).start(e) } componentWillLeave(e) { l.default.spring(this.state.animation, { toValue: 0, overshootClamping: !0 }).start(e) } render() { return (0, r.jsx)(l.default.div, { className: o()(E.videoBackgroundTransition, this.props.className), style: { opacity: this.state.animation }, children: this.props.children }) } constructor(e) { super(e), this.state = { animation: new l.default.Value(0) } } } class S extends(i = s.PureComponent) { componentDidMount() { document.addEventListener("mousedown", this.handleMouseEvent, !0), document.addEventListener("mousemove", this.handleMouseEvent, !0) } componentWillUnmount() { document.removeEventListener("mousedown", this.handleMouseEvent, !0), document.removeEventListener("mousemove", this.handleMouseEvent, !0), this._timeout.stop() } static getDerivedStateFromProps(e, t) { if (e.layout !== t.layoutProp) return t.idle ? { idle: !1, layoutProp: e.layout } : { layoutProp: e.layout }; return null } componentDidUpdate(e) { this.props.layout !== e.layout && this._timeout.stop() } renderBackground() { let { background: e, backgroundKey: t, layout: n } = this.props, i = "".concat(n, "-").concat(null != t ? t : ""); return (0, r.jsx)(d.TransitionGroup, { className: E.videoBackground, component: "div", children: (0, r.jsx)(f, { children: e }, i) }) } renderContents() { let { top: e, center: t, bottom: n, layout: i, focused: s } = this.props, { idle: a } = this.state; return (0, r.jsx)(_.default, { className: o()(E.video, T[i], { [E.idle]: a }), direction: _.default.Direction.VERTICAL, justify: _.default.Justify.CENTER, children: (0, r.jsxs)(_.default, { className: E.videoWrapper, direction: _.default.Direction.VERTICAL, children: [this.renderBackground(), (0, r.jsxs)(_.default, { className: o()(E.videoInner, { [E.focused]: s }), direction: _.default.Direction.VERTICAL, justify: _.default.Justify.BETWEEN, children: [(0, r.jsx)(_.default, { className: E.videoTop, grow: 0, children: e }), (0, r.jsx)(_.default, { className: E.videoCenter, children: t }), (0, r.jsx)(_.default, { className: E.videoBottom, grow: 0, children: n })] })] }) }) } render() { let { layout: e, className: t, animated: n } = this.props; return (0, r.jsx)("div", { className: o()(E.videoHeight, T[e], t, { [E.animated]: n }), children: this.renderContents() }) } constructor(e) { super(e), I(this, "_timeout", new u.Timeout), I(this, "handleMouseEvent", () => { let { layout: e } = this.props; (e === c.ChannelLayouts.FULL_SCREEN || e === c.ChannelLayouts.NO_CHAT) && (this._timeout.start(3e3, () => this.setState({ idle: !0 })), this.state.idle && this.setState({ idle: !1 })) }), this.state = { idle: !1, backgroundAnimation: new l.default.Value(0), layoutProp: e.layout } } } I(S, "defaultProps", { layout: c.ChannelLayouts.MINIMUM, animated: !0 }) }, 783259: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("692547"), a = n("481060"), o = n("220082"), l = n("420596"), u = n("880563"), d = n("484459"), _ = n("318661"), c = n("695346"), E = n("981631"), I = n("147556"); t.default = function(e) { let { style: t, src: n, backgroundSrc: T, userId: f, pulseSpeakingIndicator: S = !1, speaking: h = !1, ...A } = e, m = null != T ? T : n, N = (0, o.default)(m, s.default.unsafe_rawColors.PRIMARY_800.css), p = (0, l.useCallBannerBackgroundExperiment)(!0, "VideoBackground-web").enabled, O = (0, _.default)(null != f ? f : E.EMPTY_STRING_SNOWFLAKE_ID), C = null == O ? void 0 : O.getBannerURL({ size: 1024, canAnimate: c.GifAutoPlay.getSetting() }); if (r.useEffect(() => { null != f && p && (0, d.default)(f, void 0, { dispatchWait: !0 }) }, [p, f]), null == n) return null; let R = (0, i.jsx)(a.Avatar, { className: I.avatarWrapper, src: n, ...A }), g = { ...t, backgroundColor: N }; return null != C && h && p && (g.backgroundImage = "url(".concat(C, ")"), g.backgroundSize = "cover"), (0, i.jsx)("div", { style: g, className: I.background, children: S ? (0, i.jsx)(u.default, { shouldAnimate: h, children: R }) : R }) } }, 27268: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return c } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("481060"), l = n("278297"), u = n("897353"), d = n("689938"), _ = n("954886"); function c(e) { let { onPlay: t, className: n, inactive: s } = e, c = r.useRef(null), E = (0, i.jsx)("div", { className: _.iconWrapper, ref: c, children: (0, i.jsx)(u.default, { className: a()(_.icon) }) }); return (0, i.jsx)(l.MessagesInteractionContext.Consumer, { children: e => s || null == t ? (0, i.jsx)("div", { className: _.cover, children: E }) : (0, i.jsx)(o.Clickable, { className: a()(n, _.cover, { [_.active]: !e.disableInteractions }), onClick: t, tabIndex: 0, "aria-label": d.default.Messages.PLAY, focusProps: { ringTarget: c }, children: E }) }) } }, 259773: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("278297"), l = n("138599"), u = n("897353"), d = n("689938"), _ = n("875170"); t.default = e => { let { onPlay: t, externalURL: n, className: r, renderLinkComponent: c, inactive: E, messageId: I, channelId: T } = e; return (0, i.jsx)(o.MessagesInteractionContext.Consumer, { children: e => (0, i.jsxs)("div", { className: s()(r, _.wrapper, { [_.disableInteractions]: e.disableInteractions }), children: [E && null == t ? (0, i.jsx)("div", { className: _.iconWrapper, children: (0, i.jsx)(u.default, { className: _.iconPlay }) }) : null, null != t ? (0, i.jsx)(a.Clickable, { onClick: t, className: s()(_.iconWrapperActive), tabIndex: E ? -1 : 0, "aria-label": d.default.Messages.PLAY, children: (0, i.jsx)(u.default, { className: _.iconPlay }) }) : null, null != n ? c({ href: n, target: "_blank", rel: "noreferrer noopener", className: _.iconWrapperActive, children: (0, i.jsx)(l.default, { "aria-label": d.default.Messages.OPEN_LINK, className: null != t ? _.iconExternalMargins : _.iconExternal }), messageId: I, channelId: T }) : null] }) }) } }, 80618: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("481060"), u = n("189595"), d = n("632184"), _ = n("82965"), c = n("326757"), E = n("689938"), I = n("727514"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class f extends(i = s.PureComponent) { componentDidMount() { this.updateMediaBar() } componentDidUpdate(e) { (this.props.value !== e.value || this.props.muted !== e.muted) && this.updateMediaBar() } updateMediaBar() { let { muted: e, value: t, maxValue: n } = this.props, i = this._mediaBar.current; null != i && (e ? i.setGrabber(0) : i.setGrabber(t / n)) } render() { let { iconClassName: e, className: t, sliderWrapperClassName: n, sliderClassName: i, currentWindow: s, muted: a, minValue: T, maxValue: f, value: S, onVolumeShow: h, onVolumeHide: A } = this.props, { hovered: m, focused: N, dragging: p } = this.state, O = d.default; return a || S === T ? O = _.default : S < f / 2 && (O = c.default), (0, r.jsxs)("div", { className: o()(t, I.container), onMouseEnter: () => { clearTimeout(this._hoverTimeout), this.setState({ hovered: !0 }), null == h || h() }, onMouseLeave: () => { clearTimeout(this._hoverTimeout), this._hoverTimeout = setTimeout(() => { this.setState({ hovered: !1 }), null == A || A() }, 150) }, onFocus: () => this.setState({ focused: !0 }), onBlur: () => this.setState({ focused: !1 }), onKeyDown: this.handleKeyDown, children: [(0, r.jsx)("div", { className: o()(I.volumeButtonSlider, n, { [I.sliderVisible]: m || N || p }), onMouseEnter: () => { clearTimeout(this._hoverTimeout), this.setState({ hovered: !0 }) }, onMouseLeave: () => { clearTimeout(this._hoverTimeout), this._hoverTimeout = setTimeout(() => this.setState({ hovered: !1 }), 150) }, children: (0, r.jsx)(u.default, { sliderClassName: i, type: u.default.Types.VOLUME, value: S / f, onDrag: this.handleValueChange, onDragStart: this.handleDragStart, onDragEnd: this.handleDragEnd, currentWindow: s, ref: this._mediaBar }) }), (0, r.jsx)(l.Button, { className: I.volumeButton, "aria-label": E.default.Messages.CONTROL_VOLUME, size: l.Button.Sizes.NONE, look: l.Button.Looks.BLANK, onClick: this.handleToggleMute, children: (0, r.jsx)(O, { className: e }) })] }) } constructor(...e) { super(...e), T(this, "_mediaBar", s.createRef()), T(this, "_hoverTimeout", void 0), T(this, "state", { hovered: !1, focused: !1, dragging: !1 }), T(this, "handleValueChange", e => { let { maxValue: t, onValueChange: n } = this.props; null == n || n(e * t) }), T(this, "handleToggleMute", () => { let { onToggleMute: e } = this.props; null == e || e() }), T(this, "handleKeyDown", e => { let { minValue: t, value: n, maxValue: i, onValueChange: r } = this.props, s = .05 * (i - t); switch (e.key) { case "ArrowUp": e.stopPropagation(), e.preventDefault(), null == r || r(Math.min(i, n + s)); break; case "ArrowDown": e.stopPropagation(), e.preventDefault(), null == r || r(Math.max(t, n - s)) } }), T(this, "handleDragStart", () => { this.setState({ dragging: !0 }) }), T(this, "handleDragEnd", () => { this.setState({ dragging: !1 }) }), T(this, "blur", () => { this.setState({ focused: !1 }) }) } } T(f, "defaultProps", { minValue: 0, maxValue: 100, handleSize: 16 }), t.default = f }, 980483: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("748780"), u = n("481060"), d = n("981631"), _ = n("265835"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class E extends(i = s.Component) { componentDidMount() { this.props.show && this.animate(1) } componentDidUpdate(e) { e.show !== this.props.show && this.animate(this.props.show ? 1 : 0) } getAnimatedStyle() { let { anim: e } = this, { reducedMotion: t } = this.context; return { opacity: e, transform: t.enabled ? void 0 : [{ translateY: e.interpolate({ inputRange: [0, 1], outputRange: ["-100px", "0px"] }) }, { translateZ: 0 }] } } render() { return (0, r.jsx)(l.default.a, { href: d.Routes.INDEX, target: "_blank", rel: "noopener", className: o()(_.logo, this.props.className), style: this.getAnimatedStyle() }) } constructor(...e) { super(...e), c(this, "anim", new l.default.Value(0)), c(this, "animate", e => { l.default.spring(this.anim, { toValue: e, friction: 10, tension: 100 }).start() }) } } c(E, "contextType", u.AccessibilityPreferencesContext) }, 450590: function(e, t, n) { "use strict"; n.r(t); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("692547"), u = n("477690"), d = n("481060"), _ = n("585483"), c = n("624138"), E = n("989823"), I = n("713308"), T = n("520687"), f = n("756286"), S = n("981631"), h = n("477830"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let m = (0, c.cssValueToNumber)(u.default.WAVE_SPLASH_RESPONSIVE_WIDTH_MOBILE), N = 1 / 120; class p extends(i = s.Component) { componentDidMount() { this.initialize() } componentDidUpdate(e) { let { waveState: t } = this.props; t === f.WaveStates.FILLING && t !== e.waveState && this.waveFill() } componentWillUnmount() { this.terminate() } initialize() { this.children.forEach(e => e.initialize()), this.bindEvents(), this.resizeCanvas(), document.hidden && this.delayedPause() } terminate() { this.pause(), this.unbindEvents(), this.children.forEach(e => e.terminate()) } bindEvents() { window.addEventListener("resize", this.resizeCanvas, !1), window.addEventListener("blur", this.delayedPause, !1), window.addEventListener("focus", this.play, !1), document.addEventListener("visibilitychange", this.handleVisibilityChange, !1), _.ComponentDispatch.subscribe(S.ComponentActions.WAVE_EMPHASIZE, this.handleWaveEmphasize) } unbindEvents() { window.removeEventListener("resize", this.resizeCanvas, !1), window.removeEventListener("blur", this.delayedPause, !1), window.removeEventListener("focus", this.play, !1), document.removeEventListener("visibilitychange", this.handleVisibilityChange, !1), _.ComponentDispatch.unsubscribe(S.ComponentActions.WAVE_EMPHASIZE, this.handleWaveEmphasize) } advanceTransitionalState() { let { waveState: e } = this.props; (e === f.WaveStates.INITIAL || e === f.WaveStates.FILLING) && this.updateWaveState(e + 1) } waveFill() { this._isPlaying ? this.children.forEach(e => e.fill()) : this.updateWaveState(f.WaveStates.FILLED) } updateAnimation(e) { this.children.forEach(t => t.update(e)) } renderAnimation() { let { canvasFillStyle: e } = this.props, { canvasContext: t } = this; null != t && (t.fillStyle = e, t.fillRect(0, 0, this.width, this.height), this.children.forEach(e => e.render(t))) } render() { let { waveState: e, hideFallback: t, embedded: n } = this.props; return (0, r.jsx)(d.AccessibilityPreferencesContext.Consumer, { children: i => { let { reducedMotion: s } = i; return s.enabled ? (0, r.jsx)("div", { className: o()(h.fallbackImage, { [h.embedded]: n, [h.visible]: !t && e >= f.WaveStates.ENTERED }) }) : (0, r.jsx)("canvas", { className: o()(h.canvas, { [h.embedded]: n }), ref: this.setCanvas }) } }) } constructor(e) { super(e), A(this, "width", 0), A(this, "height", 0), A(this, "canvas", void 0), A(this, "canvasContext", void 0), A(this, "children", []), A(this, "wave", void 0), A(this, "ratio", 0), A(this, "_lastTick", 0), A(this, "_isPlaying", !1), A(this, "_reqAnimId", null), A(this, "_pauseTimeout", void 0), A(this, "setCanvas", e => { var t; if (null == e) return; this.canvas = e, this.canvasContext = this.canvas.getContext("2d"); let n = null !== (t = window.devicePixelRatio) && void 0 !== t ? t : 1, i = this.canvasContext.webkitBackingStorePixelRatio || this.canvasContext.mozBackingStorePixelRatio || this.canvasContext.msBackingStorePixelRatio || this.canvasContext.oBackingStorePixelRatio || this.canvasContext.backingStorePixelRatio || 1; this.ratio = n / i, this.resizeCanvas() }), A(this, "resizeCanvas", () => { this.width = window.innerWidth, this.height = window.innerHeight; let { canvas: e, canvasContext: t, width: n, height: i, ratio: r } = this; null != e && null != t && (e.width = n * r, e.height = i * r, e.style.width = n + "px", e.style.height = i + "px", t.scale(r, r)), n <= m ? this.pause() : this.play(), this.wave.resizeWave(), this.renderAnimation() }), A(this, "handleVisibilityChange", () => { document.hidden ? this.delayedPause() : this.play() }), A(this, "play", () => { clearTimeout(this._pauseTimeout), !this._isPlaying && (this._isPlaying = !0, this.run()) }), A(this, "pause", () => { clearTimeout(this._pauseTimeout), this._isPlaying = !1, null != this._reqAnimId && window.cancelAnimationFrame(this._reqAnimId), this._reqAnimId = null, this.advanceTransitionalState() }), A(this, "delayedPause", () => { clearTimeout(this._pauseTimeout), this._pauseTimeout = setTimeout(this.pause, 4e3) }), A(this, "updateWaveState", e => { let { updateWaveState: t } = this.props; t(e) }), A(this, "handleWaveEmphasize", () => { this.wave.emphasize() }), A(this, "run", () => { if (!this._isPlaying) return; if (0 === this._lastTick) { this._lastTick = Date.now(), this._reqAnimId = requestAnimationFrame(this.run); return } let e = Date.now(), t = Math.min((e - this._lastTick) / 1e3, 8 * N); for (; t > 0;) { let e = t < N ? t : N; this.updateAnimation(e), t -= e } this.renderAnimation(), this._lastTick = e, this._reqAnimId = requestAnimationFrame(this.run) }), this.wave = new T.default(this.updateWaveState), this.children = [new E.default, new I.default, this.wave] } } A(p, "defaultProps", { embedded: !1 }); t.default = e => { let t = (0, d.useToken)(l.default.unsafe_rawColors.PRIMARY_630).hex(); return (0, r.jsx)(p, { canvasFillStyle: t, ...e }) } }, 612744: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Splash: function() { return h } }), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("477690"), u = n("257915"), d = n("624138"), _ = n("980483"), c = n("450590"), E = n("756286"), I = n("271225"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let f = (0, d.cssValueToNumber)(l.default.WAVE_SPLASH_RESPONSIVE_WIDTH_MOBILE); function S(e, t) { let { innerWidth: n, innerHeight: i } = window; if (0 === e || 0 === t) return null; let r = t / e, s = n, a = Math.round(n * r); return a < i && (a = i, s = Math.round(i * (r = e / t))), { naturalWidth: e, naturalHeight: t, width: s, height: a } } function h(e) { let { splash: t, children: n } = e, [{ width: i, height: a }, l] = s.useState({ width: 0, height: 0, naturalHeight: 0, naturalWidth: 0 }); return s.useEffect(() => { function e() { l(e => { let { naturalWidth: t, naturalHeight: n } = e, i = S(t, n); return null != i ? i : e }) } return window.addEventListener("resize", e), () => window.removeEventListener("reslize", e) }, []), (0, r.jsxs)(r.Fragment, { children: [(0, r.jsx)(u.default, { className: o()(I.rightSplit), onLoad: function(e) { let { currentTarget: t } = e, { naturalWidth: n, naturalHeight: i } = t, r = S(n, i); null != r && l(r) }, src: t, width: i, height: a }), (0, r.jsx)("div", { className: o()(I.leftSplit, { [I.nonEmbeddedLeftSplit]: !0 }), children: n })] }) } class A extends(i = s.PureComponent) { componentWillUnmount() { window.removeEventListener("resize", this.handleResize) } calculateShowWaveAnimation() { return window.innerWidth > f } renderSplashArt() { let { splash: e, embedded: t } = this.props, { width: n, height: i } = this.state; return null != e ? (0, r.jsx)(u.default, { className: o()(I.rightSplit, { [I.embedded]: t }), src: e, width: n, height: i, onLoad: this.handleLoad }) : null } renderWave() { let { waveState: e, updateWaveState: t, embedded: n } = this.props, { showWaveAnimation: i, splashLoaded: s } = this.state; return i ? (0, r.jsx)(c.default, { embedded: n, waveState: e, updateWaveState: t, hideFallback: !s }) : (0, r.jsx)("div", { className: I.mobileWave }) } renderContent() { let { children: e, waveState: t, showLogo: n, logoClassName: i, embedded: a } = this.props, { showWaveAnimation: l } = this.state; return (0, r.jsxs)(s.Fragment, { children: [this.renderWave(), (0, r.jsxs)("div", { className: o()(I.leftSplit, { [I.nonEmbeddedLeftSplit]: a }), children: [n ? (0, r.jsx)(_.default, { show: !l || t === E.WaveStates.ENTERED && t !== E.WaveStates.FILLING, className: o()(I.logo, i) }) : null, e] })] }) } render() { let { className: e } = this.props; return (0, r.jsxs)("div", { className: o()(e, I.wrapper), children: [this.renderSplashArt(), this.renderContent()] }) } constructor(...e) { super(...e), T(this, "state", { naturalWidth: 0, naturalHeight: 0, width: 0, height: 0, showWaveAnimation: this.calculateShowWaveAnimation(), splashLoaded: !1 }), T(this, "handleResize", () => { let { naturalWidth: e, naturalHeight: t } = this.state, n = S(e, t), i = this.calculateShowWaveAnimation(); null != n ? this.setState({ ...n, showWaveAnimation: i }) : this.setState({ showWaveAnimation: i }) }), T(this, "handleLoad", e => { let { currentTarget: t } = e, { naturalWidth: n, naturalHeight: i } = t, r = S(n, i); null != r && this.setState(r), this.setState({ splashLoaded: !0 }), window.removeEventListener("resize", this.handleResize), window.addEventListener("resize", this.handleResize) }) } } T(A, "defaultProps", { embedded: !1 }), t.default = A }, 989823: function(e, t, n) { "use strict"; n.r(t); var i = n("888618"), r = n("482682"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } t.default = class e { initialize() { this.img = new Image, this.img.onload = () => { this.loaded = !0 }, this.img.src = r, this.bind() } bind() { window.addEventListener("mousemove", this.handleMouseMove, !1) } unbind() { window.removeEventListener("mousemove", this.handleMouseMove, !1) } terminate() { this.img = null, this.loaded = !1, this.isFilled = !1, this.alpha = 0, this.unbind() } update(e) { this.loaded && (!this.isFilled && this.alpha < 1 ? this.alpha = Math.min(1, this.alpha + e) : this.isFilled && this.alpha > 0 && (this.alpha = Math.max(0, this.alpha - 3 * e)), this.velX += (0, i.applySpringForce)(this.targetX, this.x, this.velX, this.spring) * e, this.velY += (0, i.applySpringForce)(this.targetY, this.y, this.velY, this.spring) * e, this.x += this.velX * e, this.y += this.velY * e) } render(e) { let { img: t } = this; this.loaded && null != t && (e.save(), e.globalCompositeOperation = "source-atop", e.globalAlpha = this.alpha, e.drawImage(t, this.x + 20, this.y + 20), e.restore()) } fill() { this.isFilled = !0 } constructor() { s(this, "img", null), s(this, "loaded", !1), s(this, "isFilled", !1), s(this, "alpha", 0), s(this, "mx", 0), s(this, "my", 0), s(this, "x", 0), s(this, "y", 0), s(this, "velX", 0), s(this, "velY", 0), s(this, "targetX", 40), s(this, "targetY", 40), s(this, "spring", { friction: 60, tension: 100 }), s(this, "handleMouseMove", e => { let { clientX: t, clientY: n } = e; this.targetX = t / window.innerWidth * 20 + 20, this.targetY = n / window.innerWidth * 20 + 20 }) } } }, 848918: function(e, t, n) { "use strict"; n.r(t); var i = n("888618"), r = n("756286"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = ["#7d8187", "#18191c", "#8fa2df", "#4f545c"]; t.default = class e { checkBounds() { this.x > this.offscreenX ? this.x = -this.size : this.y > this.offscreenY ? this.y = -this.size : this.x < -this.size ? this.x = this.offscreenX : this.y < -this.size && (this.y = this.offscreenY) } update(e, t) { this.checkBounds(), this.y += t * this.positionMultiplier, this.x += e * this.positionMultiplier } render(e, t) { e.beginPath(), e.globalAlpha = t * this.depth / 4, e.arc(this.x, this.y, this.size, 0, r.TWO_PI, !0), e.fillStyle = this.color, e.fill(), e.globalAlpha = 1 } constructor() { s(this, "size", (0, i.randomNumber)(2, 3)), s(this, "depth", (0, i.randomNumber)(1, 4)), s(this, "positionMultiplier", this.depth / 4), s(this, "color", a[4 - this.depth]), s(this, "offscreenX", r.MAX_RADIUS + this.size), s(this, "offscreenY", r.MAX_RADIUS + this.size), s(this, "x", (0, i.randomNumber)(-this.size, this.offscreenX)), s(this, "y", (0, i.randomNumber)(-this.size, this.offscreenY)) } } }, 713308: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("848918"), r = n("618980"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } t.default = class e { initialize() { this.particles = [], this.wind.initialize(), this.loadInTimer = setTimeout(() => { for (let e = 0; e < 75; e++) this.particles.push(new i.default) }, 250) } terminate() { this.particles = [], this.wind.terminate(), null != this.loadInTimer && clearTimeout(this.loadInTimer) } update(e) { 0 !== this.particles.length && (!this.isFilled && this.alpha < 1 ? this.alpha = Math.min(1, this.alpha + e) : this.isFilled && this.alpha > 0 && (this.alpha = Math.max(0, this.alpha - 3 * e)), this.wind.update(), this.particles.forEach(t => t.update(10 * this.wind.forceX * e, 10 * Math.min(this.wind.forceY, -.001) * e + -.1))) } render(e) { 0 !== this.particles.length && (e.save(), e.globalCompositeOperation = "source-atop", this.particles.forEach(t => t.render(e, this.alpha)), e.restore()) } fill() { this.isFilled = !0 } constructor() { s(this, "particles", []), s(this, "wind", new r.default), s(this, "alpha", 0), s(this, "isFilled", !1), s(this, "loadInTimer", null) } } }, 774643: function(e, t, n) { "use strict"; n.r(t); var i = n("888618"), r = n("756286"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = -2.15; t.default = class e { updateStatic() { this.targetX = this.targetX + 30 * Math.cos(this.angle) * Math.sin(this.count), this.targetY = this.targetY + 30 * Math.sin(this.angle) * Math.sin(this.count), this.x = this.targetX, this.y = this.targetY } update(e) { let t, n; if (this.speedUp > 0 ? (this.speedUp = Math.max(0, this.speedUp - e), this.count += e * (10 * Math.min(this.speedUp, 1) + .4)) : this.count += .4 * e, t = (0, i.applySpringForce)(this.targetX, this.x, this.velX, this.spring), n = (0, i.applySpringForce)(this.targetY, this.y, this.velY, this.spring), this.velX += t * e, this.velY += n * e, this.oscillate) { let r = this.targetX + this.waveRange * Math.cos(this.angle) * Math.sin(this.count), s = this.targetY + this.waveRange * Math.sin(this.angle) * Math.sin(this.count); t = (0, i.applySpringForce)(r, this.x, this.velX, this.spring), n = (0, i.applySpringForce)(s, this.y, this.velY, this.spring), this.velX += t * e, this.velY += n * e } this.x += this.velX * e, this.y += this.velY * e } render(e) { e.fillStyle = "#fff", e.fillRect(this.x, this.y, 4, 4) } constructor(e) { s(this, "x", -40), s(this, "y", -40), s(this, "targetX", 0), s(this, "targetY", 0), s(this, "oscillate", !0), s(this, "velX", 0), s(this, "velY", 0), s(this, "angle", 0), s(this, "speedUp", 1.5), s(this, "waveRange", 60), s(this, "count", void 0), s(this, "index", void 0), s(this, "spring", { friction: 15, tension: r.POINT_TENSION_DEFAULT }), this.index = e, this.spring.tension = r.POINT_TENSION_DEFAULT * Math.max(.1, e / 7) + r.POINT_TENSION_DEFAULT, this.count = a * e } } }, 888618: function(e, t, n) { "use strict"; function i(e, t) { return Math.floor(Math.random() * (t - e + 1) + e) } function r(e, t, n, i) { return i.tension * (e - t) - i.friction * n } n.r(t), n.d(t, { applySpringForce: function() { return r }, randomNumber: function() { return i } }) }, 520687: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("653041"); var i = n("954955"), r = n.n(i), s = n("477690"), a = n("624138"), o = n("774643"), l = n("888618"), u = n("756286"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = 7.5, c = (0, a.cssValueToNumber)(s.default.WAVE_SPLASH_RESPONSIVE_WIDTH_MOBILE), E = 1 / 60; function I(e, t, n, i) { return n / i * t + e } function T() { return Math.min(Math.max(Math.min(.8 * window.innerWidth, .8 * window.innerHeight), u.MIN_RADIUS), u.MAX_RADIUS) } t.default = class e { initialize() { this._resizeWave() } emphasize() { this.points.forEach(e => e.speedUp = 1) } terminate() { this.points = [] } update(e) { 0 !== this.points.length && (this.points.forEach(t => t.update(Math.min(e, E))), !this.hasEntered && this.points[0].x > c && (this.hasEntered = !0, this.updateWaveState(u.WaveStates.ENTERED)), this.isFilling && this.points[0].x > this.points[0].targetX && (this.isFilling = !1, this.updateWaveState(u.WaveStates.FILLED))) } render(e) { if (0 === this.points.length) return; let [t, ...n] = this.points; e.save(), e.beginPath(), e.moveTo(t.x, t.y), n.forEach((t, i) => { if (null == n[i + 1]) e.quadraticCurveTo(t.x, t.y, t.x, t.y); else { let r = (t.x + n[i + 1].x) / 2, s = (t.y + n[i + 1].y) / 2; e.quadraticCurveTo(t.x, t.y, r, s) } }), e.lineTo(0, 0), e.closePath(), e.fillStyle = "#000", e.globalCompositeOperation = "destination-in", e.fill(), e.restore() } fill() { let e = Math.sqrt(window.innerWidth * window.innerWidth + window.innerHeight * window.innerHeight) + 100, t = T() - 140, n = (e, t, n, i) => { e.targetX = -40 + t * Math.cos(u.TWO_PI * (n / 15 * .25 + 0)), e.targetY = -40 + t * Math.sin(u.TWO_PI * (n / 15 * .25 + 0)), i && (e.targetX += (0, l.randomNumber)(0, 30) - 15, e.targetY += (0, l.randomNumber)(0, 30) - 15, e.speedUp = 3, e.spring.tension = u.POINT_TENSION_DEFAULT * Math.random() * .5 + u.POINT_TENSION_DEFAULT) }; this.points.forEach((e, i) => n(e, t, i, !0)), setTimeout(() => { this.points.forEach((t, i) => { n(t, e, i, !1); let r = 1 - t.index / 7.5; t.spring.friction += t.spring.friction + t.spring.friction * r, t.spring.tension = .7 * u.POINT_TENSION_DEFAULT + 80 * Math.random(), t.waveRange = 2 * t.waveRange }), this.isFilling = !0, this.updateWaveState(u.WaveStates.FILLING) }, 250) } constructor(e) { d(this, "points", []), d(this, "hasEntered", !1), d(this, "isFilling", !1), d(this, "updateWaveState", void 0), d(this, "_resizeWave", () => { let e = T(); this.points.forEach((t, n) => { let i = -40 + e * Math.cos(u.TWO_PI * (n / 15 * .25 + 0)), r = -40 + e * Math.sin(u.TWO_PI * (n / 15 * .25 + 0)); 0 !== n ? r += (0, l.randomNumber)(0, 30) - 15 : i += (0, l.randomNumber)(0, 30) - 15, t.targetX = i, t.targetY = r, t.angle = Math.atan2(r, i) }) }), d(this, "resizeWave", r()(this._resizeWave, 200)), this.updateWaveState = e, this.hasEntered = !1; for (let e = 0; e <= 15; e++) this.points.push(new o.default(Math.floor(_ - Math.floor(Math.abs(e - _))))) } } }, 756286: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_RADIUS: function() { return r }, MIN_RADIUS: function() { return i }, POINT_TENSION_DEFAULT: function() { return a }, TWO_PI: function() { return s }, WaveStates: function() { return o } }); let i = 780, r = 1e3, s = 2 * Math.PI, a = 150, o = { INITIAL: 0, ENTERED: 1, FILLING: 2, FILLED: 3 } }, 618980: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t); function r(e, t) { return Math.max(Math.min((e - t) / 30, 1), -1) } t.default = class e { initialize() { window.addEventListener("mousemove", this.handleMouseMove) } terminate() { window.removeEventListener("mousemove", this.handleMouseMove) } update() { this.x !== this.px && this.y !== this.py && (this.forceX += r(this.x, this.px), this.forceY += r(this.y, this.py), this.px = this.x, this.py = this.y), 0 !== this.forceX && (this.forceX = this.forceX * this.resistance), 0 !== this.forceY && (this.forceY = this.forceY * this.resistance) } render() {} constructor() { i(this, "resistance", .98), i(this, "px", 0), i(this, "py", 0), i(this, "x", 0), i(this, "y", 0), i(this, "forceX", 0), i(this, "forceY", 0), i(this, "handleMouseMove", e => { let { clientX: t, clientY: n } = e; this.x = t, this.y = n }) } } }, 812663: function(e, t, n) { "use strict"; n.r(t); let i = n("470079").createContext((e, t, n) => { console.warn("AnalyticsTrackImpressionContext function unimplemented") }); t.default = i }, 278297: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MessagesInteractionContext: function() { return i } }); let i = n("470079").createContext({ disableInteractions: !1, disableAnimations: !1 }) }, 792295: function(e, t, n) { "use strict"; n.r(t); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("481060"), u = n("414497"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = { SMALL: u.sizeSmall, MEDIUM: u.sizeMedium, LARGE: u.sizeLarge }; class c extends(i = s.PureComponent) { calculateScroll() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this._scroller; if (null == e) return; let { scrollTop: t } = e.getScrollerState(), { hideSeparator: n } = this.state; 0 !== t || n ? t > 0 && n && this.setState({ hideSeparator: !1 }) : this.setState({ hideSeparator: !0 }) } getScroller() { return this._scroller } renderChildren() { let { hideSeparator: e } = this.state; return s.Children.map(this.props.children, t => s.isValidElement(t) ? t.type === l.ModalContent || t.type === l.ModalListContent ? s.cloneElement(t, { scrollerRef: this.setRef, onScroll: this.handleScroll, onResize: this.handleScroll }) : t.type === l.ModalHeader && e ? s.cloneElement(t, { separator: !1 }) : t : t) } render() { let { className: e, children: t, tag: n, size: i, fullscreenOnMobile: s, ...a } = this.props; return (0, r.jsx)(n, { className: o()(u.modal, e, i, { [u.fullscreenOnMobile]: s }), ...a, children: this.renderChildren() }) } constructor(e) { super(e), d(this, "_scroller", null), d(this, "setRef", e => { this._scroller = e, null != e && this.calculateScroll() }), d(this, "handleScroll", e => { this.calculateScroll(); let { onScroll: t } = this.props; null == t || t(e) }), this.state = { hideSeparator: !1 } } } d(c, "Header", l.ModalHeader), d(c, "Footer", l.ModalFooter), d(c, "Content", l.ModalContent), d(c, "ListContent", l.ModalListContent), d(c, "CloseButton", l.ModalCloseButton), d(c, "Sizes", _), d(c, "defaultProps", { fullscreenOnMobile: !0, size: _.SMALL, tag: "div" }) }, 863840: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("470079"); function r(e) { let t = i.useRef(e); return t.current = e, t } }, 482500: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("197500"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M19.0999 3.99994V5.12653L4.84988 8.26441V18.1176C4.84988 18.5496 5.14628 18.9251 5.56998 19.0315L9.36998 19.9726C9.44598 19.9905 9.52388 19.9999 9.59988 19.9999C9.89533 19.9999 10.1775 19.8635 10.3599 19.6235L10.5599 19.3593V16.2214L9.21798 17.9943L6.74988 17.3825V15.2112L10.5599 16.0509V13.92C10.5599 12.3294 11.8493 11.04 13.4399 11.04H20.9999V3.99994H19.0999Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M3.89988 8.25994H1.99988V15.2941H3.89988V8.25994Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M12.48 13.92C12.48 13.3898 12.9098 12.96 13.44 12.96H22.56C23.0901 12.96 23.52 13.3898 23.52 13.92V20.2213C23.52 20.7514 23.0901 21.1813 22.56 21.1813H18.1294C17.8916 21.1813 17.6623 21.2695 17.4858 21.4289L15.0408 23.6378C14.8865 23.7772 14.64 23.6677 14.64 23.4597V21.4213C14.64 21.2887 14.5325 21.1813 14.4 21.1813H13.44C12.9098 21.1813 12.48 20.7514 12.48 20.2213V13.92Z" })] }) }, s.AnnouncementsIcon, void 0, { size: 24 }) }, 377617: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("820764"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, fillRule: "evenodd", clipRule: "evenodd", className: s, d: "M5 3C3.89543 3 3 3.89543 3 5V19C3 20.1046 3.89543 21 5 21H19C20.1046 21 21 20.1046 21 19V5C21 3.89543 20.1046 3 19 3H5ZM16.8995 8.41419L15.4853 6.99998L7 15.4853L8.41421 16.8995L16.8995 8.41419Z" }) }) }, s.SlashBoxIcon, void 0, { size: 24 }) }, 438071: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("231764"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 40 40", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("path", { className: s, fill: r, fillOpacity: ".8", d: "M21.226 30v-4.154h-3.755V30h3.755zm-.512-8.62c3.67-1.337 5.718-2.959 5.718-6.145 0-3.272-2.36-5.235-6.088-5.235-2.589 0-4.637.825-6.344 2.048l.484 3.3c1.621-1.251 3.47-2.162 5.49-2.162 1.707 0 2.845.854 2.845 2.305 0 1.593-1.08 2.475-3.812 3.442l-.882.342.342 4.523 2.076-.455.171-1.963z" }), (0, i.jsx)("rect", { className: s, width: "38", height: "38", x: "1", y: "1", stroke: r, strokeOpacity: ".4", strokeWidth: "2", rx: "5" }), (0, i.jsx)("circle", { className: s, cx: "7", cy: "7", r: "2", fill: r, fillOpacity: ".4" }), (0, i.jsx)("circle", { className: s, cx: "7", cy: "33", r: "2", fill: r, fillOpacity: ".4" }), (0, i.jsx)("circle", { className: s, cx: "33", cy: "7", r: "2", fill: r, fillOpacity: ".4" }), (0, i.jsx)("circle", { className: s, cx: "33", cy: "33", r: "2", fill: r, fillOpacity: ".4" })] }) }) }, s.UnknownGameIcon, void 0, { size: 24 }) }, 671533: function(e, t, n) { "use strict"; n.r(t), n("411104"); var i, r, s = n("735250"); n("470079"); var a = n("120356"), o = n.n(a), l = n("325767"), u = n("785641"); (r = i || (i = {})).LEFT = "LEFT", r.RIGHT = "RIGHT", r.UP = "UP", r.DOWN = "DOWN", r.UP_LEFT = "UP_LEFT", r.DOWN_RIGHT = "DOWN_RIGHT"; let d = e => { let { width: t = 24, height: n = 24, color: i = "currentColor", direction: r, foreground: a, className: d, title: _, ...c } = e; return (0, s.jsxs)("svg", { ...(0, l.default)(c), width: t, height: n, className: o()(d, function(e) { switch (e) { case "LEFT": return u.left; case "RIGHT": return u.right; case "UP": return null; case "DOWN": return u.down; case "UP_LEFT": return u.upLeft; case "DOWN_RIGHT": return u.downRight; default: throw Error("Invalid Direction ".concat(e)) } }(r)), viewBox: "0 0 24 24", children: [null != _ ? (0, s.jsx)("title", { children: _ }) : null, (0, s.jsx)("polygon", { className: a, fill: i, fillRule: "nonzero", points: "13 20 11 20 11 8 5.5 13.5 4.08 12.08 12 4.16 19.92 12.08 18.5 13.5 13 8" })] }) }; d.Directions = i, t.default = d }, 86813: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("531057"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M16.59 8.59003L12 13.17L7.41 8.59003L6 10L12 16L18 10L16.59 8.59003Z" }) }) }, s.ChevronSmallDownIcon, void 0, { size: 24 }) }, 826026: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("865824"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M7.41 16.0001L12 11.4201L16.59 16.0001L18 14.5901L12 8.59006L6 14.5901L7.41 16.0001Z" }) }) }, s.ChevronSmallUpIcon, void 0, { size: 24 }) }, 824717: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("329800"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: (0, i.jsx)("path", { className: s, fill: r, d: "M20 10.9378H14.2199H8.06628L10.502 8.50202L9 7L4 12L9 17L10.502 15.498L8.06628 13.0622H20V10.9378Z" }) }) }, s.ArrowSmallLeftIcon, void 0, { size: 24 }) }, 36082: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("662645"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M12 2C6.486 2 2 6.486 2 12C2 17.515 6.486 22 12 22C14.039 22 15.993 21.398 17.652 20.259L16.521 18.611C15.195 19.519 13.633 20 12 20C7.589 20 4 16.411 4 12C4 7.589 7.589 4 12 4C16.411 4 20 7.589 20 12V12.782C20 14.17 19.402 15 18.4 15L18.398 15.018C18.338 15.005 18.273 15 18.209 15H18C17.437 15 16.6 14.182 16.6 13.631V12C16.6 9.464 14.537 7.4 12 7.4C9.463 7.4 7.4 9.463 7.4 12C7.4 14.537 9.463 16.6 12 16.6C13.234 16.6 14.35 16.106 15.177 15.313C15.826 16.269 16.93 17 18 17L18.002 16.981C18.064 16.994 18.129 17 18.195 17H18.4C20.552 17 22 15.306 22 12.782V12C22 6.486 17.514 2 12 2ZM12 14.599C10.566 14.599 9.4 13.433 9.4 11.999C9.4 10.565 10.566 9.399 12 9.399C13.434 9.399 14.6 10.565 14.6 11.999C14.6 13.433 13.434 14.599 12 14.599Z" }) }) }, s.AtIcon, void 0, { size: 24 }) }, 15385: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, ...s } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(s), height: n, width: t, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "m6.3599 4.33.41.84c.02245.04336.03052.09274.02304.14099s-.03013.09287-.06465.1274c-.03453.03453-.07915.05717-.1274.06465s-.09763-.00059-.14099-.02304l-.84-.41c-.03119-.01506-.06537-.02288-.1-.02288s-.06882.00782-.1.02288l-.84.41c-.04336.02245-.09274.03052-.141.02304-.04825-.00748-.09287-.03012-.12739-.06465-.03453-.03453-.05717-.07915-.06465-.1274s.00058-.09763.02304-.14099l.41-.84c.01505-.03119.02287-.06537.02287-.1s-.00782-.06881-.02287-.1l-.41-.84c-.01585-.04253-.01876-.08879-.00836-.13297.01039-.04417.03362-.08429.06676-.11529s.07471-.05151.11948-.05894c.04477-.00742.09074-.00144.13212.0172l.84.41c.03118.01506.06537.02288.1.02288s.06881-.00782.1-.02288l.84-.41c.04336-.02245.09274-.03052.14099-.02304s.09287.03012.1274.06465c.03452.03453.05717.07914.06465.1274.00748.04825-.00059.09763-.02304.14099l-.41.84c-.01211.02846-.01834.05907-.01834.09s.00623.06154.01834.09z", fill: "#ffd836" }), (0, i.jsx)("path", { d: "m12 2.70001-5.45996 5.46v7.67999l5.45996 5.46 5.46-5.46v-7.67999zm2.73 11.99999-2.73 2.74-2.72996-2.73v-5.41999l2.72996-2.73 2.73 2.73z", fill: "#ff73fa" }), (0, i.jsx)("path", { d: "m12 2.70001v3.86l2.73 2.73 2.73-1.13z", fill: "#ffc0ff" }), (0, i.jsx)("path", { d: "m9.27004 14.71-2.73 1.13 5.45996 5.46v-3.86z", fill: "#e655d4" }), (0, i.jsxs)("g", { fill: "#d4e4ff", children: [(0, i.jsx)("path", { d: "m16.2199 17.7h.01c.243 0 .44-.197.44-.44v-.89c0-.243-.197-.44-.44-.44h-.01c-.243 0-.44.197-.44.44v.89c0 .243.197.44.44.44z" }), (0, i.jsx)("path", { d: "m16.2199 21.25h.01c.243 0 .44-.197.44-.44v-.89c0-.243-.197-.44-.44-.44h-.01c-.243 0-.44.197-.44.44v.89c0 .243.197.44.44.44z" }), (0, i.jsx)("path", { d: "m15.3401 18.59v-.01c0-.243-.197-.44-.44-.44h-.89c-.243 0-.44.197-.44.44v.01c0 .243.197.44.44.44h.89c.243 0 .44-.197.44-.44z" }), (0, i.jsx)("path", { d: "m18.8799 18.59v-.01c0-.243-.197-.44-.44-.44h-.89c-.243 0-.44.197-.44.44v.01c0 .243.197.44.44.44h.89c.243 0 .44-.197.44-.44z" })] }), (0, i.jsx)("path", { d: "m9.27002 9.29v5.42l2.72998 2.73 2.73-2.73v-5.42l-2.73-2.73z", fill: "#ffdef9" }), (0, i.jsx)("path", { d: "m14.72 9.28998v.01l-5.42997 5.43002-.01-.01v-1.47l4.69997-4.71002z", fill: "#fff" }), (0, i.jsx)("path", { d: "m14.7201 11.34v1.5l-3.66 3.66-.75-.75z", fill: "#fff" })] }) } }, 55178: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("637441"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M18 10.7101C15.1085 9.84957 13 7.17102 13 4C13 3.69264 13.0198 3.3899 13.0582 3.093C12.7147 3.03189 12.3611 3 12 3C8.686 3 6 5.686 6 9V14C6 15.657 4.656 17 3 17V18H21V17C19.344 17 18 15.657 18 14V10.7101ZM8.55493 19C9.24793 20.19 10.5239 21 11.9999 21C13.4759 21 14.7519 20.19 15.4449 19H8.55493Z" }), (0, i.jsx)("path", { d: "M18.2624 5.50209L21 2.5V1H16.0349V2.49791H18.476L16 5.61088V7H21V5.50209H18.2624Z", fill: r })] }) }, s.BellZIcon, void 0, { size: 24 }) }, 489465: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("690597"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M19.8401 5.39392C20.1229 4.73405 19.6389 4 18.921 4H17.1231C16.7417 4 16.3935 4.21695 16.2254 4.55933L13.3297 10.4581C13.195 10.7324 13.125 11.0339 13.125 11.3394V19C13.125 19.5523 13.5727 20 14.125 20H20C20.5523 20 21 19.5523 21 19V12.875C21 12.3227 20.5523 11.875 20 11.875H17.8208C17.4618 11.875 17.2198 11.508 17.3612 11.178L19.8401 5.39392ZM9.71511 5.39392C9.99791 4.73405 9.51388 4 8.79596 4H6.99809C6.61669 4 6.2685 4.21695 6.10042 4.55933L3.20466 10.4581C3.07001 10.7324 3 11.0339 3 11.3394V19C3 19.5523 3.44772 20 4 20H9.875C10.4273 20 10.875 19.5523 10.875 19V12.875C10.875 12.3227 10.4273 11.875 9.875 11.875H7.69577C7.33681 11.875 7.0948 11.508 7.2362 11.178L9.71511 5.39392Z" }) }) }, s.QuoteIcon, void 0, { size: 24 }) }, 15322: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("760858"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { viewBox: "0 0 24 24", ...(0, a.default)(o), width: t, height: n, children: (0, i.jsx)("path", { fill: r, className: s, d: "M5.13525 22.0002V1.99023H13.5743C15.1596 1.99023 16.4356 2.45423 17.4023 3.38224C18.3883 4.31024 18.8813 5.5379 18.8813 7.06523C18.8813 8.2639 18.6009 9.23057 18.0403 9.96524C17.4989 10.6806 16.7933 11.2026 15.9233 11.5312C18.4173 12.1306 19.6643 13.7739 19.6643 16.4612C19.6643 18.3366 19.1036 19.7286 17.9823 20.6372C16.8803 21.5459 15.3143 22.0002 13.2843 22.0002H5.13525ZM12.4143 10.2842C14.4829 10.2842 15.5173 9.3949 15.5173 7.61624C15.5173 6.70757 15.2466 6.0309 14.7053 5.58623C14.1639 5.14157 13.4003 4.91923 12.4143 4.91923H8.49925V10.2842H12.4143ZM12.8493 19.0712C13.8933 19.0712 14.7246 18.8392 15.3433 18.3752C15.9813 17.9112 16.3003 17.1669 16.3003 16.1422C16.3003 15.1176 15.9813 14.3732 15.3433 13.9092C14.7246 13.4452 13.8933 13.2132 12.8493 13.2132H8.49925V19.0712H12.8493Z" }) }) }, s.BoldIcon, void 0, { size: 24 }) }, 758426: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("381708"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 6, height: n = 11, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 6 11", children: (0, i.jsx)("path", { fill: r, className: s, d: "M3 0.625244L0 3.62524V7.62524L3 10.6252L6 7.62524V3.62524L3 0.625244ZM5 7.24524L3 9.24524L1 7.24524V4.04524L3 2.04524L5 4.04524V7.24524Z" }) }) }, s.BoostTier1SimpleIcon, void 0, { size: 11 }) }, 973675: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("65675"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 6, height: n = 11, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 6 11", children: (0, i.jsxs)("g", { fill: r, fillRule: "evenodd", className: s, children: [(0, i.jsx)("path", { d: "M2 4.42007V6.79007L3 7.79007L4 6.79007V4.42007L3.01 3.42007L2 4.42007Z" }), (0, i.jsx)("path", { d: "M3 0.590088L0 3.59009V7.59009L3 10.5901L6 7.59009V3.59009L3 0.590088ZM5 7.21009L3 9.21009L1 7.21009V4.00009L3 2.00009L5 4.00009V7.21009Z" })] }) }) }, s.BoostTier2SimpleIcon, void 0, { size: 11 }) }, 949605: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("884746"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 6, height: n = 11, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 6 11", children: (0, i.jsxs)("g", { fill: r, fillRule: "evenodd", className: s, children: [(0, i.jsx)("path", { d: "M3 0.625305L0 3.62531V7.62531L3 10.6253L6 7.62531V3.62531L3 0.625305ZM5 7.24531L3 9.24531L1 7.24531V4.04531L3 2.04531L5 4.04531V7.24531Z" }), (0, i.jsx)("path", { d: "M3.76 4.21526L3 3.45526L2 4.45526V5.97526L3.76 4.21526Z" }), (0, i.jsx)("path", { d: "M2.28003 7.11532L3.00003 7.83532L4.00003 6.83532V5.39532L2.28003 7.11532Z" })] }) }) }, s.BoostTier3SimpleIcon, void 0, { size: 11 }) }, 471885: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("411104"); var i = n("735250"); n("470079"); var r = n("758426"), s = n("973675"), a = n("949605"), o = n("981631"); function l(e) { let { tier: t, ...n } = e; switch (t) { case o.BoostedGuildTiers.NONE: case o.BoostedGuildTiers.TIER_1: return (0, i.jsx)(r.default, { ...n }); case o.BoostedGuildTiers.TIER_2: return (0, i.jsx)(s.default, { ...n }); case o.BoostedGuildTiers.TIER_3: return (0, i.jsx)(a.default, { ...n }); default: throw Error("Not a valid tier type") } } }, 533496: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("389710"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 18, height: n = 18, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M23 12C23 15.4588 21.244 18.5074 18.575 20.303C16.9546 21.4361 14.9961 22.0511 12.9077 21.9996C11.5234 21.9871 10.2063 21.6933 9.01083 21.1726L8.93992 21.1486C7.24876 20.5765 5.54476 20 3.77041 20H3.5C2.67157 20 2 19.3284 2 18.5C2 17.6716 2.67157 17 3.5 17C4.03814 17 4.40201 16.7197 4.57202 16.3248C4.83747 15.7082 4.79971 14.5414 3.86441 14.1934C3.41676 14.0268 2.72587 14 2.39244 14H1.5C0.671573 14 0 13.3284 0 12.5C0 11.6716 0.671573 11 1.5 11C2.16507 11 2.69887 10.6988 3.10938 10.1953C3.46698 9.75673 3.46834 9.09578 3.27805 8.62811C3.11182 8.21955 2.77674 7.83979 2.44976 7.55367C2.17543 7.31362 2 6.96873 2 6.50001C2 5.67158 2.67157 5.00001 3.5 5.00001C4.79441 5.00001 6.01593 4.51851 7.15231 3.88709C8.79678 2.6997 10.8167 2 13 2C18.5228 2 23 6.47715 23 12ZM15.2781 13.6032C15.7366 13.7241 16.1174 14.026 16.3144 14.4105C16.5162 14.8043 16.5223 15.2869 16.2154 15.7057C15.2355 17.0432 13.4838 17.7164 11.7684 17.264C10.0529 16.8115 8.87791 15.3665 8.70867 13.726C8.65566 13.2122 8.90615 12.7973 9.28089 12.5555C9.64684 12.3195 10.13 12.2455 10.5885 12.3664L15.2781 13.6032ZM9.20943 8.1998C8.65483 8.05353 8.08712 8.27952 7.78185 8.72337C7.56782 9.03455 7.13921 9.34399 6.64391 9.21336C6.18769 9.09304 5.83028 8.58879 6.08468 8.08437C6.72953 6.80575 8.21942 6.10768 9.6745 6.49143C11.1296 6.87519 12.0653 8.21295 11.9742 9.63762C11.9382 10.1997 11.3726 10.4605 10.9163 10.3401C10.4211 10.2095 10.2071 9.73061 10.1798 9.35578C10.1409 8.82116 9.76403 8.34606 9.20943 8.1998ZM17.6296 11.3621C17.9348 10.9182 18.5026 10.6922 19.0571 10.8385C19.6117 10.9848 19.9886 11.4599 20.0275 11.9945C20.0548 12.3693 20.2688 12.8482 20.7641 12.9788C21.2203 13.0992 21.786 12.8384 21.8219 12.2763C21.913 10.8517 20.9773 9.51389 19.5222 9.13014C18.0671 8.74638 16.5772 9.44445 15.9324 10.7231C15.678 11.2275 16.0354 11.7317 16.4916 11.8521C16.9869 11.9827 17.4155 11.6733 17.6296 11.3621Z", fill: r }) }) }, s.SuperReactionIcon, void 0, { size: 18 }) }, 305878: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("712398"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7v-5z" }), (0, i.jsx)("rect", { width: "24", height: "24" })] }) }) }, s.CalendarIcon, void 0, { size: 24 }) }, 125015: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("974139"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M11 5V3C16.515 3 21 7.486 21 13H19C19 8.589 15.411 5 11 5ZM17 13H15C15 10.795 13.206 9 11 9V7C14.309 7 17 9.691 17 13ZM11 11V13H13C13 11.896 12.105 11 11 11ZM14 16H18C18.553 16 19 16.447 19 17V21C19 21.553 18.553 22 18 22H13C6.925 22 2 17.075 2 11V6C2 5.447 2.448 5 3 5H7C7.553 5 8 5.447 8 6V10C8 10.553 7.553 11 7 11H6C6.063 14.938 9 18 13 18V17C13 16.447 13.447 16 14 16Z" }) }) }, s.PhoneCallIcon, void 0, { size: 24 }) }, 119828: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("557753"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M21.526 8.149C21.231 7.966 20.862 7.951 20.553 8.105L18 9.382V7C18 5.897 17.103 5 16 5H4C2.897 5 2 5.897 2 7V17C2 18.104 2.897 19 4 19H16C17.103 19 18 18.104 18 17V14.618L20.553 15.894C20.694 15.965 20.847 16 21 16C21.183 16 21.365 15.949 21.526 15.851C21.82 15.668 22 15.347 22 15V9C22 8.653 21.82 8.332 21.526 8.149Z" }) }) }, s.VideoIcon, void 0, { size: 24 }) }, 747380: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("972228"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", className: s, foreground: a, background: o } = e; return (0, i.jsx)("svg", { className: s, width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("path", { className: o, fill: r, d: "M14,8.99751269 L14,11.6666667 L11.3333333,9 L11.3333333,11.3333333 C11.3333333,11.7 11.0333333,12 10.6666667,12 L2.66666667,12 C2.3,12 2,11.7 2,11.3333333 L2,4.66666667 C2,4.3 2.3,4 2.66666667,4 L9.01132709,4 L9.00227441,7.99603187 L9.00227328,7.9999947 C9.00321074,8.55227865 9.4516853,8.9992333 10.0039693,8.99829584 L11.96,8.99497564 L14,8.99751269 Z", opacity: ".6" }), (0, i.jsx)("path", { className: a, fill: r, fillRule: "nonzero", d: "M15.1,3.2 L15.1,2 C15.1,0.88 14.05,0 13,0 C11.95,0 10.9,0.88 10.9,2 L10.9,3.2 C10.45,3.2 10,3.68 10,4.16 L10,6.96 C10,7.52 10.45,8 10.9,8 L15.025,8 C15.55,8 16,7.52 16,7.04 L16,4.24 C16,3.68 15.55,3.2 15.1,3.2 Z M14,3 L12,3 L12,1.92857143 C12,1.35714286 12.4666667,1 13,1 C13.5333333,1 14,1.35714286 14,1.92857143 L14,3 Z" })] }) }) }, s.VideoLockIcon, void 0, { size: 16 }) }, 771357: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("643568"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 25, height: n = 25, color: r = "currentColor", ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsxs)("g", { clipPath: "url(#clip0_1473_119386)", children: [(0, i.jsx)("path", { d: "M16.001 20.5H4.00098C2.89798 20.5 2.00098 19.602 2.00098 18.5V8.5H4.00098V18.5H16.001V20.5Z", fill: r }), (0, i.jsx)("path", { d: "M21.001 3.5H8.00098C6.89798 3.5 6.00098 4.396 6.00098 5.5V14.5C6.00098 15.602 6.89798 16.5 8.00098 16.5H21.001C22.104 16.5 23.001 15.602 23.001 14.5V5.5C23.001 4.396 22.104 3.5 21.001 3.5ZM9.00098 13.5C9.00098 11.659 10.16 10.5 12.001 10.5C10.896 10.5 10.001 9.604 10.001 8.5C10.001 7.396 10.896 6.5 12.001 6.5C13.106 6.5 14.001 7.396 14.001 8.5C14.001 9.604 13.105 10.5 12.001 10.5C13.842 10.5 15.001 11.659 15.001 13.5H9.00098ZM20.001 13.5H16.001V11.5H20.001V13.5ZM20.001 9.5H16.001V7.5H20.001V9.5Z", fill: r })] }), (0, i.jsx)("defs", { children: (0, i.jsx)("clipPath", { id: "clip0_1473_119386", children: (0, i.jsx)("rect", { width: t, height: t, fill: r, transform: "translate(0 0.5)" }) }) })] }) }, s.UserSquareIcon, void 0, { size: 25 }) }, 259580: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("531057"), o = n("605260"), l = n("465270"), u = n("865824"), d = n("481060"), _ = n("325767"), c = n("199813"); let E = { UP: c.directionUp, RIGHT: c.directionRight, DOWN: c.directionDown, LEFT: c.directionLeft }, I = e => { let { direction: t = E.DOWN, width: n = 24, height: r = 24, color: I = "currentColor", transition: T = c.transition, className: f, foreground: S, expanded: h, ...A } = e, { enabled: m } = (0, d.useRedesignIconContext)(), N = t; if (!0 === h ? N = E.DOWN : !1 === h && (N = E.RIGHT), m) { let e = { [E.UP]: u.ChevronSmallUpIcon, [E.DOWN]: a.ChevronSmallDownIcon, [E.LEFT]: o.ChevronSmallLeftIcon, [E.RIGHT]: l.ChevronSmallRightIcon } [N]; return (0, i.jsx)(e, { ...A, className: f, width: n, height: r, color: I, colorClass: S }) } return (0, i.jsx)("svg", { className: s()(f, T, N), width: n, height: r, viewBox: "0 0 24 24", ...(0, _.default)(A), children: (0, i.jsx)("path", { className: S, fill: "none", stroke: I, strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", d: "M7 10L12 15 17 10", "aria-hidden": !0 }) }) }; I.Directions = E, t.default = I }, 648414: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("609959"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M5.00328 17.5C4.69218 17.5 4.4566 17.2189 4.51097 16.9126L4.99838 14.1667H2.26014C1.94953 14.1667 1.71409 13.8864 1.76763 13.5805L1.8843 12.9138C1.92617 12.6746 2.13392 12.5 2.37681 12.5H5.29005L6.17338 7.5H3.43514C3.12453 7.5 2.88909 7.21977 2.94263 6.91381L3.0593 6.24714C3.10117 6.00789 3.30892 5.83333 3.55181 5.83333H6.46505L6.98347 2.91262C7.02584 2.67391 7.23335 2.5 7.47578 2.5H8.12681C8.43792 2.5 8.67349 2.78107 8.61912 3.08738L8.13171 5.83333H13.1317L13.6501 2.91262C13.6925 2.67391 13.9 2.5 14.1424 2.5H14.7935C15.1046 2.5 15.3402 2.78107 15.2858 3.08738L14.7984 5.83333H17.5366C17.8472 5.83333 18.0827 6.11356 18.0291 6.41952L17.9125 7.08619C17.8706 7.32544 17.6628 7.5 17.4199 7.5H14.5067L14.2417 9H12.5754L12.8404 7.5H7.84041L6.95708 12.5H8.99835V14.1667H6.66505L6.14662 17.0874C6.10425 17.3261 5.89675 17.5 5.65431 17.5H5.00328Z", fill: r }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M10.4 14C10.4 12.0118 12.0118 10.4 14 10.4C15.9883 10.4 17.6 12.0118 17.6 14C17.6 14.7775 17.3536 15.4975 16.9345 16.0859L18.9243 18.0758C19.1586 18.3101 19.1586 18.69 18.9243 18.9243C18.69 19.1586 18.3101 19.1586 18.0758 18.9243L16.0859 16.9345C15.4975 17.3536 14.7775 17.6 14 17.6C12.0118 17.6 10.4 15.9883 10.4 14ZM14 11.6C12.6745 11.6 11.6 12.6745 11.6 14C11.6 15.3255 12.6745 16.4 14 16.4C15.3255 16.4 16.4 15.3255 16.4 14C16.4 12.6745 15.3255 11.6 14 11.6Z", fill: r })] }) }, s.ChannelListMagnifyingGlassIcon, void 0, { size: 24 }) }, 315970: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("452804"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsx)("svg", { width: t, height: n, className: s, viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { transform: "translate(2.000000, 2.000000)", fillRule: "nonzero", fill: r, className: a, d: "M4,0 L4,3 L0,3 L0,0 L4,0 Z M12,4 L12,7 L8,7 L8,4 L12,4 Z M8,9 L12,9 L12,12 L8,12 L8,9.33333333 L8,9 Z M7,7 L3,7 L3,10 L7,10 L7,12 L3,12 L1,12 L1,4 L3,4 L3,5 L7,5 L7,7 Z" }) }) }, s.FolderIcon, void 0, { size: 16 }) }, 308540: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("899738"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsxs)("svg", { width: t, height: n, viewBox: "0 0 24 24", className: s, children: [(0, i.jsx)("path", { className: a, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M12.75 18L12.75 6L11.25 6L11.25 18L12.75 18Z" }), (0, i.jsx)("path", { className: a, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M6.5 12.75C5.80964 12.75 5.25 13.3096 5.25 14V18H3.75V14C3.75 12.4812 4.98122 11.25 6.5 11.25H17.5C19.0188 11.25 20.25 12.4812 20.25 14V18H18.75V14C18.75 13.3096 18.1904 12.75 17.5 12.75H6.5Z" }), (0, i.jsx)("path", { className: a, fill: r, d: "M12 7C10.6193 7 9.5 5.88071 9.5 4.5C9.5 3.11929 10.6193 2 12 2C13.3807 2 14.5 3.11929 14.5 4.5C14.5 5.88071 13.3807 7 12 7Z" }), (0, i.jsx)("path", { className: a, fill: r, d: "M19.5 22C18.1193 22 17 20.8807 17 19.5C17 18.1193 18.1193 17 19.5 17C20.8807 17 22 18.1193 22 19.5C22 20.8807 20.8807 22 19.5 22Z" }), (0, i.jsx)("path", { className: a, fill: r, d: "M12 22C10.6193 22 9.5 20.8807 9.5 19.5C9.5 18.1193 10.6193 17 12 17C13.3807 17 14.5 18.1193 14.5 19.5C14.5 20.8807 13.3807 22 12 22Z" }), (0, i.jsx)("path", { className: a, fill: r, d: "M4.5 22C3.11929 22 2 20.8807 2 19.5C2 18.1193 3.11929 17 4.5 17C5.88071 17 7 18.1193 7 19.5C7 20.8807 5.88071 22 4.5 22Z" })] }) }, s.HubIcon, void 0, { size: 24 }) }, 814550: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("421086"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsx)("svg", { width: t, height: n, viewBox: "0 0 40 40", fill: "none", className: s, children: (0, i.jsx)("path", { className: a, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M33 34.5833V7.49998H35V36.6666H9C6.791 36.6666 5 34.801 5 32.5V7.49998C5 5.19894 6.791 3.33331 9 3.33331H31V30.4166H9C7.8955 30.4166 7 31.3485 7 32.5C7 33.6515 7.8955 34.5833 9 34.5833H33ZM23.9718 9.99998L15.8889 17.9915L12.7086 14.8441L10 17.5058L15.8885 23.3333L26.6667 12.6669L23.9718 9.99998Z" }) }) }, s.BookCheckIcon, void 0, { size: 24 }) }, 93879: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("352903"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: o, ...l } = e; return (0, i.jsx)("svg", { width: t, height: n, viewBox: "0 0 24 24", className: s, ...(0, a.default)(l), children: (0, i.jsx)("path", { className: o, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M5.88657 21C5.57547 21 5.3399 20.7189 5.39427 20.4126L6.00001 17H2.59511C2.28449 17 2.04905 16.7198 2.10259 16.4138L2.27759 15.4138C2.31946 15.1746 2.52722 15 2.77011 15H6.35001L7.41001 9H4.00511C3.69449 9 3.45905 8.71977 3.51259 8.41381L3.68759 7.41381C3.72946 7.17456 3.93722 7 4.18011 7H7.76001L8.39677 3.41262C8.43914 3.17391 8.64664 3 8.88907 3H9.87344C10.1845 3 10.4201 3.28107 10.3657 3.58738L9.76001 7H15.76L16.3968 3.41262C16.4391 3.17391 16.6466 3 16.8891 3H17.8734C18.1845 3 18.4201 3.28107 18.3657 3.58738L17.76 7H21.1649C21.4755 7 21.711 7.28023 21.6574 7.58619L21.4824 8.58619C21.4406 8.82544 21.2328 9 20.9899 9H17.41L16.35 15H19.7549C20.0655 15 20.301 15.2802 20.2474 15.5862L20.0724 16.5862C20.0306 16.8254 19.8228 17 19.5799 17H16L15.3632 20.5874C15.3209 20.8261 15.1134 21 14.8709 21H13.8866C13.5755 21 13.3399 20.7189 13.3943 20.4126L14 17H8.00001L7.36325 20.5874C7.32088 20.8261 7.11337 21 6.87094 21H5.88657ZM9.41045 9L8.35045 15H14.3504L15.4104 9H9.41045Z" }) }) }, s.TextIcon, void 0, { size: 24 }) }, 535321: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("646827"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: a, background: o } = e; return (0, i.jsxs)("svg", { width: t, height: n, viewBox: "0 0 24 24", className: s, children: [(0, i.jsx)("path", { className: o, fill: r, d: "M14 8C14 7.44772 13.5523 7 13 7H9.76001L10.3657 3.58738C10.4201 3.28107 10.1845 3 9.87344 3H8.88907C8.64664 3 8.43914 3.17391 8.39677 3.41262L7.76001 7H4.18011C3.93722 7 3.72946 7.17456 3.68759 7.41381L3.51259 8.41381C3.45905 8.71977 3.69449 9 4.00511 9H7.41001L6.35001 15H2.77011C2.52722 15 2.31946 15.1746 2.27759 15.4138L2.10259 16.4138C2.04905 16.7198 2.28449 17 2.59511 17H6.00001L5.39427 20.4126C5.3399 20.7189 5.57547 21 5.88657 21H6.87094C7.11337 21 7.32088 20.8261 7.36325 20.5874L8.00001 17H14L13.3943 20.4126C13.3399 20.7189 13.5755 21 13.8866 21H14.8709C15.1134 21 15.3209 20.8261 15.3632 20.5874L16 17H19.5799C19.8228 17 20.0306 16.8254 20.0724 16.5862L20.2474 15.5862C20.301 15.2802 20.0655 15 19.7549 15H16.35L16.6758 13.1558C16.7823 12.5529 16.3186 12 15.7063 12C15.2286 12 14.8199 12.3429 14.7368 12.8133L14.3504 15H8.35045L9.41045 9H13C13.5523 9 14 8.55228 14 8Z" }), (0, i.jsx)("path", { className: a, fill: r, d: "M21.025 5V4C21.025 2.88 20.05 2 19 2C17.95 2 17 2.88 17 4V5C16.4477 5 16 5.44772 16 6V9C16 9.55228 16.4477 10 17 10H19H21C21.5523 10 22 9.55228 22 9V5.975C22 5.43652 21.5635 5 21.025 5ZM20 5H18V4C18 3.42857 18.4667 3 19 3C19.5333 3 20 3.42857 20 4V5Z" })] }) }, s.TextLockIcon, void 0, { size: 24 }) }, 277942: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("768852"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: a, background: o } = e; return (0, i.jsxs)("svg", { width: t, height: n, viewBox: "0 0 24 24", className: s, children: [(0, i.jsx)("path", { className: a, fill: r, d: "M14 8C14 7.44772 13.5523 7 13 7H9.76001L10.3657 3.58738C10.4201 3.28107 10.1845 3 9.87344 3H8.88907C8.64664 3 8.43914 3.17391 8.39677 3.41262L7.76001 7H4.18011C3.93722 7 3.72946 7.17456 3.68759 7.41381L3.51259 8.41381C3.45905 8.71977 3.69449 9 4.00511 9H7.41001L6.35001 15H2.77011C2.52722 15 2.31946 15.1746 2.27759 15.4138L2.10259 16.4138C2.04905 16.7198 2.28449 17 2.59511 17H6.00001L5.39427 20.4126C5.3399 20.7189 5.57547 21 5.88657 21H6.87094C7.11337 21 7.32088 20.8261 7.36325 20.5874L8.00001 17H14L13.3943 20.4126C13.3399 20.7189 13.5755 21 13.8866 21H14.8709C15.1134 21 15.3209 20.8261 15.3632 20.5874L16 17H19.5799C19.8228 17 20.0306 16.8254 20.0724 16.5862L20.2474 15.5862C20.301 15.2802 20.0655 15 19.7549 15H16.35L16.6758 13.1558C16.7823 12.5529 16.3186 12 15.7063 12C15.2286 12 14.8199 12.3429 14.7368 12.8133L14.3504 15H8.35045L9.41045 9H13C13.5523 9 14 8.55228 14 8Z" }), (0, i.jsx)("path", { className: o, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M19.8914 3.80204L22.2438 8.55654C22.5726 9.22119 22.0891 9.99999 21.3475 10L16.6179 10C15.8745 10 15.391 9.21769 15.7235 8.55279L18.1007 3.79829C18.4701 3.05951 19.5251 3.06172 19.8914 3.80204ZM18.4998 5H19.4999V7.5H18.4999L18.4998 5ZM18.4998 8.49887C18.4998 8.77589 18.7238 9 18.9998 9C19.2759 9 19.4999 8.77589 19.4999 8.49887C19.4999 8.22224 19.2759 7.99773 18.9998 7.99773C18.7238 7.99773 18.4998 8.22224 18.4998 8.49887Z" })] }) }, s.TextWarningIcon, void 0, { size: 24 }) }, 974029: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("176743"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: (0, i.jsx)("path", { className: s, fill: r, d: "M4.79805 3C3.80445 3 2.99805 3.8055 2.99805 4.8V15.6C2.99805 16.5936 3.80445 17.4 4.79805 17.4H7.49805V21L11.098 17.4H19.198C20.1925 17.4 20.998 16.5936 20.998 15.6V4.8C20.998 3.8055 20.1925 3 19.198 3H4.79805Z" }) }) }, s.ChatIcon, void 0, { size: 24 }) }, 386103: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("981853"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M12.291 5.70697L15.998 9.41397L21.705 3.70697L20.291 2.29297L15.998 6.58597L13.705 4.29297L12.291 5.70697ZM1.99805 7H11.088C11.564 9.837 14.025 12 16.998 12V18C16.998 19.103 16.102 20 14.998 20H8.33205L2.99805 24V20H1.99805C0.894047 20 -0.00195312 19.103 -0.00195312 18V9C-0.00195312 7.897 0.894047 7 1.99805 7Z" }) }) }, s.ChatCheckIcon, void 0, { size: 24 }) }, 448239: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", className: a, foreground: o, ...l } = e; return (0, i.jsx)("svg", { ...(0, r.default)(l), className: a, width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M18.625 3H5.375C4.06519 3 3 4.06519 3 5.375V18.625C3 19.936 4.06519 21 5.375 21H18.625C19.936 21 21 19.936 21 18.625V5.375C21.0057 4.08803 19.9197 3 18.625 3ZM19 19V5H4.99999V19H19Z", className: o, fill: s }) }) } }, 247442: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", className: a, background: o, foreground: l, ...u } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(u), className: a, width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M5.37499 3H18.625C19.9197 3 21.0056 4.08803 21 5.375V18.625C21 19.936 19.9359 21 18.625 21H5.37499C4.06518 21 3 19.936 3 18.625V5.375C3 4.06519 4.06518 3 5.37499 3Z", className: o, fill: s }), (0, i.jsx)("path", { d: "M9.58473 14.8636L6.04944 11.4051L4.50003 12.9978L9.58473 18L19.5 8.26174L17.9656 6.64795L9.58473 14.8636Z", className: l, fill: s })] }) } }, 263704: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("124597"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M8.99991 16.17L4.82991 12L3.40991 13.41L8.99991 19L20.9999 7.00003L19.5899 5.59003L8.99991 16.17Z" }) }) }, s.CheckmarkLargeIcon, void 0, { size: 24 }) }, 441674: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("266075"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, backgroundColor: o, ...l } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(l), width: t, height: n, viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: [null != o ? (0, i.jsx)("circle", { r: 8, cx: 12, cy: 12, fill: o }) : null, (0, i.jsx)("g", { fill: "none", fillRule: "evenodd", children: (0, i.jsx)("path", { className: s, fill: r, d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z" }) })] }) }, s.CircleCheckIcon, { backgroundColor: "secondaryColor", foreground: "colorClass", className: "className", color: "color" }, { size: 24 }) }, 529653: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("322065"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 26 28", fill: "none", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M25.4655 8.13686L24.0851 2.98525C23.5134 0.851387 21.32 -0.414947 19.1862 0.156821L3.73134 4.29792C1.59748 4.86969 0.331147 7.06304 0.902914 9.19691L2.01124 13.3332L1.9999 15.9999L1.9999 23.3332C1.9999 25.5424 3.79077 27.3332 5.99991 27.3332L21.9999 27.3332C24.209 27.3332 25.9999 25.5424 25.9999 23.3332V15.3333H5.99991L6.07237 13.3332L25.4655 8.13686ZM14.609 8.28512L10.8245 9.29916L10.7552 5.17663L14.5396 4.1626L14.609 8.28512ZM17.264 7.5737L22.1995 6.25124L21.5093 3.67543C21.3187 2.96415 20.5876 2.54204 19.8763 2.73263L17.1947 3.45117L17.264 7.5737ZM8.10009 5.88806L8.16944 10.0106L4.1689 11.0825L3.47872 8.50672C3.28813 7.79543 3.71024 7.06432 4.42153 6.87373L8.10009 5.88806Z" }) }) }, s.ClipsIcon, void 0, { size: 16 }) }, 855693: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("828065"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 20, height: n = 20, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 20 20", children: (0, i.jsx)("g", { fill: "none", fillRule: "evenodd", children: (0, i.jsx)("path", { className: s, fill: r, d: "M9.99999 1.66675C5.39699 1.66675 1.66666 5.39708 1.66666 10.0001C1.66666 14.6031 5.39699 18.3334 9.99999 18.3334C14.603 18.3334 18.3333 14.6031 18.3333 10.0001C18.3333 5.39708 14.603 1.66675 9.99999 1.66675ZM9.99999 4.66675C10.3685 4.66675 10.6667 4.96493 10.6667 5.33342V9.61475L13.8021 11.4272C14.1211 11.6108 14.2252 12.0145 14.0416 12.3335C13.8581 12.6525 13.4544 12.7567 13.1354 12.5731L9.73937 10.6148C9.71333 10.6043 9.68989 10.5874 9.66646 10.5731C9.46724 10.4572 9.33312 10.2463 9.33312 10.0002V5.3335C9.33312 4.965 9.6315 4.66675 9.99999 4.66675Z" }) }) }) }, s.ClockIcon, void 0, { size: 20 }) }, 789695: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("428080"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { color: t = "currentColor", height: n = 24, width: r = 24, ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), width: r, height: n, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M12.83 14.24L9.29006 10.71C9.19737 10.6165 9.124 10.5057 9.07424 10.3839C9.02447 10.2621 8.99926 10.1316 9.00002 10V4H11V9.58997L14.24 12.83L12.83 14.24Z", fill: t }), (0, i.jsx)("path", { d: "M13.3101 2L18 6.69V13.3101L13.3101 18H6.68994L2 13.3101V6.69L6.68994 2H13.3101V2ZM13.73 0H6.27002C6.00525 0.00368349 5.75169 0.107244 5.56006 0.289978L0.290039 5.56C0.107305 5.75163 0.00368349 6.00525 0 6.27002V13.73C0.00368349 13.9947 0.107305 14.2483 0.290039 14.4399L5.56006 19.71C5.75169 19.8927 6.00525 19.9963 6.27002 20H13.73C13.9947 19.9963 14.2483 19.8927 14.4399 19.71L19.71 14.4399C19.8927 14.2483 19.9963 13.9947 20 13.73V6.27002C19.9963 6.00525 19.8927 5.75163 19.71 5.56L14.4399 0.289978C14.2483 0.107244 13.9947 0.00368349 13.73 0V0Z", fill: t })] }) }, s.ClockWarningIcon, void 0, { size: 24 }) }, 465670: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", foreground: a, className: o, ...l } = e; return (0, i.jsx)("svg", { ...(0, r.default)(l), className: o, width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: s, className: a, d: "M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z" }) }) } }, 696202: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("612165"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, backgroundColor: o, ...l } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(l), width: t, height: n, viewBox: "0 0 14 14", children: [null != o ? (0, i.jsx)("circle", { r: 5, cx: 7, cy: 7, fill: o }) : null, (0, i.jsx)("path", { fill: r, className: s, d: "M7.02799 0.333252C3.346 0.333252 0.361328 3.31792 0.361328 6.99992C0.361328 10.6819 3.346 13.6666 7.02799 13.6666C10.71 13.6666 13.6947 10.6819 13.6947 6.99992C13.6947 3.31792 10.7093 0.333252 7.02799 0.333252ZM10.166 9.19525L9.22333 10.1379L7.02799 7.94325L4.83266 10.1379L3.89 9.19525L6.08466 6.99992L3.88933 4.80459L4.832 3.86259L7.02733 6.05792L9.22266 3.86259L10.1653 4.80459L7.97066 6.99992L10.166 9.19525Z" })] }) }, s.CircleXIcon, void 0, { size: 24 }) }, 502283: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("181734"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, ...r } = e; return (0, i.jsx)("svg", { ...(0, a.default)(r), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "#ED4245", d: "M18.4 1.879L22.121 5.6l-6.4 6.4 6.4 6.4-3.721 3.721-6.4-6.4-6.4 6.4L1.879 18.4l6.4-6.4-6.4-6.4L5.6 1.879l6.4 6.4 6.4-6.4z" }) }) }, s.CloseLargeIcon, void 0, { size: 24 }) }, 126900: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("393586"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 23, height: n = 18, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 23 18", fill: "none", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M1.63373 2.18776C1.99762 0.893925 3.17765 0 4.52168 0H5.99904C6.55132 0 6.99904 0.447715 6.99904 1V4.98282C6.99904 4.99819 6.99892 5.01354 6.9987 5.02886C6.99896 5.03058 6.9991 5.03234 6.9991 5.03414C6.9991 5.50023 6.89159 5.94121 6.70001 6.33363C6.21831 7.32031 5.20515 8 4.03324 8C4.02466 8 4.01609 7.99996 4.00753 7.99989C3.99898 7.99996 3.99043 8 3.98186 8C1.9825 8 0.536052 6.09062 1.07737 4.16593L1.63373 2.18776ZM8.99904 0C8.44676 0 7.99904 0.447715 7.99904 1V5C7.99904 6.5533 9.17954 7.83088 10.6923 7.98451C10.7932 7.99475 10.8955 8 10.999 8C10.9991 8 10.9991 8 10.9991 8C12.1789 8 13.1996 7.31899 13.6896 6.32862C13.883 5.93771 13.9937 5.49859 13.9989 5.03414C13.9989 5.0335 13.9989 5.03288 13.9989 5.03225C13.999 5.02151 13.999 5.01076 13.999 5V1C13.999 0.447715 13.5513 0 12.999 0H8.99904ZM15.999 0C15.4468 0 14.999 0.447715 14.999 1V4.98282C14.999 4.99845 14.9992 5.01406 14.9994 5.02963C14.9992 5.03111 14.9991 5.03261 14.9991 5.03414C14.9991 5.50023 15.1066 5.94121 15.2982 6.33363C15.7799 7.32031 16.7931 8 17.965 8C17.9735 8 17.9821 7.99996 17.9906 7.99989C17.9991 7.99996 18.0077 8 18.0162 8C20.0156 8 21.462 6.09062 20.9207 4.16593L20.3643 2.18776C20.0005 0.893924 18.8204 0 17.4764 0H15.999ZM19.9991 9.42264V17C19.9991 18.6569 18.6559 20 16.9991 20H14.2491C14.111 20 13.9991 19.8881 13.9991 19.75V14C13.9991 12.8954 13.1037 12 11.9991 12H9.99909C8.89452 12 7.99909 12.8954 7.99909 14V19.75C7.99909 19.8881 7.88716 20 7.74909 20H4.99909C3.34223 20 1.99909 18.6569 1.99909 17V9.42263C1.99909 9.2357 2.19766 9.11353 2.37121 9.18297C2.88063 9.38678 3.44019 9.5 4.03324 9.5C5.32615 9.5 6.49074 8.95057 7.30626 8.07246C7.41432 7.95611 7.60217 7.95576 7.71059 8.07178C8.53188 8.95064 9.70133 9.5 10.9991 9.5C12.2969 9.5 13.4663 8.95064 14.2876 8.07178C14.396 7.95576 14.5839 7.9561 14.6919 8.07246C15.5075 8.95057 16.672 9.5 17.965 9.5C18.558 9.5 19.1176 9.38678 19.627 9.18298C19.8005 9.11354 19.9991 9.23571 19.9991 9.42264Z", fill: r }) }) }, s.ShopIcon, void 0, { size: 23 }) }, 737688: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("149020"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M5.66493 5H18.3351C19.9079 5 21.2137 6.21463 21.3273 7.78329L21.9932 16.9774C22.0684 18.0165 21.2871 18.9198 20.248 18.9951C20.2027 18.9984 20.1572 19 20.1117 19C18.9191 19 17.8786 18.1904 17.5855 17.0342L17.0699 15H6.93021L6.41455 17.0342C6.12148 18.1904 5.081 19 3.88832 19C2.84651 19 2.00195 18.1554 2.00195 17.1136C2.00195 17.0682 2.0036 17.0227 2.00688 16.9774L2.67277 7.78329C2.78638 6.21463 4.09216 5 5.66493 5ZM14.5001 10C15.3285 10 16.0001 9.32843 16.0001 8.5C16.0001 7.67157 15.3285 7 14.5001 7C13.6716 7 13.0001 7.67157 13.0001 8.5C13.0001 9.32843 13.6716 10 14.5001 10ZM18.5001 13C19.3285 13 20.0001 12.3284 20.0001 11.5C20.0001 10.6716 19.3285 10 18.5001 10C17.6716 10 17.0001 10.6716 17.0001 11.5C17.0001 12.3284 17.6716 13 18.5001 13ZM6.00007 9H4.00008V11H6.00007V13H8.00007V11H10.0001V9H8.00007V7H6.00007V9Z", "aria-hidden": !0 }) }) }, s.GameControllerIcon, void 0, { size: 24 }) }, 757206: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("204097"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { className: s, fill: r, children: [(0, i.jsx)("path", { d: "M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1z" }), (0, i.jsx)("path", { d: "M15 5H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z" })] }) }) }, s.CopyIcon, void 0, { size: 16 }) }, 754424: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("14468"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M3.37868 2.87868C3.94129 2.31607 4.70435 2 5.5 2H19.5C20.2956 2 21.0587 2.31607 21.6213 2.87868C22.1839 3.44129 22.5 4.20435 22.5 5V19C22.5 19.7956 22.1839 20.5587 21.6213 21.1213C21.0587 21.6839 20.2956 22 19.5 22H5.5C4.70435 22 3.94129 21.6839 3.37868 21.1213C2.81607 20.5587 2.5 19.7956 2.5 19V5C2.5 4.20435 2.81607 3.44129 3.37868 2.87868ZM7.65332 16.3125H9.47832V7.6875H7.65332V16.3125ZM11.23 7.6875V16.3125H14.2925C15.6008 16.3125 16.6091 15.9417 17.3175 15.2C18.0341 14.4583 18.3925 13.3917 18.3925 12C18.3925 10.6083 18.0341 9.54167 17.3175 8.8C16.6091 8.05833 15.6008 7.6875 14.2925 7.6875H11.23ZM15.955 14.0625C15.5466 14.4625 14.9925 14.6625 14.2925 14.6625H13.055V9.3375H14.2925C14.9925 9.3375 15.5466 9.5375 15.955 9.9375C16.3633 10.3375 16.5675 11.025 16.5675 12C16.5675 12.975 16.3633 13.6625 15.955 14.0625Z" }) }) }, s.IdIcon, void 0, { size: 24 }) }, 551388: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("483901"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M13.6572 5.42868C13.8879 5.29002 14.1806 5.30402 14.3973 5.46468C14.6133 5.62602 14.7119 5.90068 14.6473 6.16202L13.3139 11.4954C13.2393 11.7927 12.9726 12.0007 12.6666 12.0007H3.33325C3.02725 12.0007 2.76058 11.792 2.68592 11.4954L1.35258 6.16202C1.28792 5.90068 1.38658 5.62602 1.60258 5.46468C1.81992 5.30468 2.11192 5.29068 2.34325 5.42868L5.13192 7.10202L7.44592 3.63068C7.46173 3.60697 7.48377 3.5913 7.50588 3.57559C7.5192 3.56612 7.53255 3.55663 7.54458 3.54535L6.90258 2.90268C6.77325 2.77335 6.77325 2.56068 6.90258 2.43135L7.76458 1.56935C7.89392 1.44002 8.10658 1.44002 8.23592 1.56935L9.09792 2.43135C9.22725 2.56068 9.22725 2.77335 9.09792 2.90268L8.45592 3.54535C8.46794 3.55686 8.48154 3.56651 8.49516 3.57618C8.51703 3.5917 8.53897 3.60727 8.55458 3.63068L10.8686 7.10202L13.6572 5.42868ZM2.66667 12.6673H13.3333V14.0007H2.66667V12.6673Z", fill: r, "aria-hidden": !0 }) }) }, s.CrownIcon, void 0, { size: 24 }) }, 68972: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("745067"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 28, height: n = 20, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 28 20", children: (0, i.jsx)("path", { className: s, fill: r, d: "M23.0212 1.67671C21.3107 0.879656 19.5079 0.318797 17.6584 0C17.4062 0.461742 17.1749 0.934541 16.9708 1.4184C15.003 1.12145 12.9974 1.12145 11.0283 1.4184C10.819 0.934541 10.589 0.461744 10.3368 0.00546311C8.48074 0.324393 6.67795 0.885118 4.96746 1.68231C1.56727 6.77853 0.649666 11.7538 1.11108 16.652C3.10102 18.1418 5.3262 19.2743 7.69177 20C8.22338 19.2743 8.69519 18.4993 9.09812 17.691C8.32996 17.3997 7.58522 17.0424 6.87684 16.6135C7.06531 16.4762 7.24726 16.3387 7.42403 16.1847C11.5911 18.1749 16.408 18.1749 20.5763 16.1847C20.7531 16.3332 20.9351 16.4762 21.1171 16.6135C20.41 17.0369 19.6639 17.3997 18.897 17.691C19.3052 18.4993 19.7718 19.2689 20.3021 19.9945C22.6677 19.2689 24.8929 18.1364 26.8828 16.6466H26.8893C27.43 10.9731 25.9665 6.04728 23.0212 1.67671ZM9.68041 13.6383C8.39754 13.6383 7.34085 12.4453 7.34085 10.994C7.34085 9.54272 8.37155 8.34973 9.68041 8.34973C10.9893 8.34973 12.0395 9.54272 12.0187 10.994C12.0187 12.4453 10.9828 13.6383 9.68041 13.6383ZM18.3161 13.6383C17.0332 13.6383 15.9765 12.4453 15.9765 10.994C15.9765 9.54272 17.0124 8.34973 18.3161 8.34973C19.6184 8.34973 20.6751 9.54272 20.6543 10.994C20.6543 12.4453 19.6184 13.6383 18.3161 13.6383Z" }) }) }, s.ClydeIcon, void 0, { size: 28 }) }, 754347: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 55, height: n = 16, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 55 16", children: (0, i.jsxs)("g", { fill: s, className: a, children: [(0, i.jsx)("path", { d: "M3 4.78717H6.89554C7.83025 4.78717 8.62749 4.93379 9.27812 5.22703C9.92875 5.52027 10.4144 5.92348 10.7352 6.44582C11.0559 6.96815 11.2208 7.5638 11.2208 8.24192C11.2208 8.90171 11.0559 9.49736 10.7168 10.038C10.3778 10.5695 9.8646 11.0002 9.17732 11.3118C8.49003 11.6234 7.6378 11.7791 6.6197 11.7791H3V4.78717ZM6.57388 10.0014C7.2071 10.0014 7.69278 9.84559 8.03184 9.52485C8.3709 9.21328 8.54501 8.77343 8.54501 8.23276C8.54501 7.72875 8.38923 7.32555 8.08682 7.02314C7.78442 6.72073 7.32623 6.56495 6.71225 6.56495H5.49255V10.0014H6.57388Z" }), (0, i.jsx)("path", { d: "M17.2882 11.7709C16.7475 11.6335 16.2618 11.4319 15.8311 11.1569V9.4983C16.161 9.75489 16.5917 9.95649 17.1416 10.1214C17.6914 10.2864 18.2229 10.3689 18.7361 10.3689C18.9743 10.3689 19.1576 10.3414 19.2767 10.2772C19.3959 10.2131 19.46 10.1398 19.46 10.0481C19.46 9.94733 19.4233 9.86485 19.3592 9.80071C19.2951 9.73656 19.1668 9.68158 18.9743 9.62659L17.7739 9.36084C17.0866 9.20506 16.6009 8.97596 16.3077 8.70105C16.0144 8.42613 15.877 8.05042 15.877 7.59223C15.877 7.20735 16.0053 6.86829 16.2527 6.58421C16.5093 6.30013 16.8667 6.0802 17.334 5.92442C17.8014 5.76863 18.342 5.68616 18.9743 5.68616C19.5333 5.68616 20.0465 5.74114 20.5138 5.86944C20.9812 5.98857 21.3661 6.14435 21.6685 6.32763V7.89464C21.3569 7.71136 20.9904 7.56474 20.5871 7.45477C20.1748 7.34481 19.7533 7.28982 19.3226 7.28982C18.6994 7.28982 18.3878 7.39979 18.3878 7.61056C18.3878 7.71136 18.4337 7.78467 18.5345 7.83966C18.6353 7.89464 18.8094 7.94046 19.066 7.99544L20.0648 8.17871C20.7155 8.28868 21.2011 8.49028 21.5219 8.77436C21.8426 9.05844 21.9984 9.47081 21.9984 10.0298C21.9984 10.6346 21.7326 11.1203 21.2011 11.4685C20.6696 11.8259 19.9182 12 18.9468 12C18.3787 11.9817 17.8289 11.9084 17.2882 11.7709Z" }), (0, i.jsx)("path", { d: "M24.4735 11.5602C23.9054 11.2761 23.4655 10.9004 23.1814 10.4239C22.8882 9.94733 22.7507 9.40666 22.7507 8.80185C22.7507 8.20621 22.8974 7.66554 23.1998 7.19819C23.5022 6.72167 23.942 6.35512 24.5194 6.0802C25.0967 5.81445 25.7931 5.677 26.5995 5.677C27.5984 5.677 28.4231 5.88776 29.0829 6.3093V8.1329C28.8538 7.97712 28.5789 7.83965 28.2673 7.74802C27.9558 7.64721 27.6259 7.6014 27.2777 7.6014C26.6545 7.6014 26.178 7.71137 25.8206 7.94046C25.4724 8.16956 25.2983 8.46279 25.2983 8.82934C25.2983 9.18673 25.4632 9.47998 25.8115 9.70907C26.1505 9.93817 26.6453 10.0573 27.2868 10.0573C27.6167 10.0573 27.9466 10.0115 28.2673 9.91067C28.5881 9.80987 28.8722 9.69991 29.1013 9.55329V11.3219C28.3681 11.7618 27.5159 11.9817 26.5537 11.9817C25.7381 11.9817 25.0509 11.8351 24.4735 11.5602Z" }), (0, i.jsx)("path", { d: "M31.6955 11.5602C31.1182 11.2761 30.6783 10.9004 30.3759 10.4147C30.0735 9.929 29.9177 9.38834 29.9177 8.78353C29.9177 8.18788 30.0735 7.64722 30.3759 7.17986C30.6783 6.71251 31.1182 6.34595 31.6863 6.0802C32.2545 5.81445 32.9418 5.677 33.7299 5.677C34.518 5.677 35.2053 5.80529 35.7743 6.0802C36.3425 6.34595 36.7824 6.71251 37.0848 7.17986C37.3872 7.64722 37.5338 8.17872 37.5338 8.78353C37.5338 9.37918 37.3872 9.929 37.0848 10.4147C36.7824 10.9004 36.3517 11.2852 35.7743 11.5602C35.1961 11.8351 34.518 11.9817 33.7299 11.9817C32.951 11.9817 32.2728 11.8351 31.6955 11.5602ZM34.7287 9.79155C34.967 9.55329 35.0953 9.22339 35.0953 8.82934C35.0953 8.42614 34.9762 8.11457 34.7287 7.87632C34.4813 7.63806 34.1514 7.51892 33.7391 7.51892C33.3084 7.51892 32.9785 7.63806 32.731 7.87632C32.4928 8.11457 32.3645 8.42614 32.3645 8.82934C32.3645 9.23255 32.4836 9.55329 32.731 9.79155C32.9785 10.039 33.3084 10.1581 33.7391 10.1581C34.1514 10.1489 34.4905 10.0298 34.7287 9.79155Z" }), (0, i.jsx)("path", { d: "M43.6644 6.0435V8.19699C43.4078 8.03204 43.0779 7.94956 42.6747 7.94956C42.1432 7.94956 41.7308 8.11451 41.4467 8.43524C41.1626 8.75598 41.016 9.25999 41.016 9.93811V11.7709H38.5693V5.9427H40.9702V7.80295C41.0985 7.12482 41.3184 6.62082 41.6117 6.30008C41.9049 5.97935 42.2898 5.80524 42.7572 5.80524C43.1054 5.80524 43.4078 5.88771 43.6644 6.0435Z" }), (0, i.jsx)("path", { d: "M51.9136 4.58649V11.7801H49.4659V10.4696C49.2552 10.9645 48.9436 11.3402 48.5221 11.5968C48.1005 11.8534 47.5782 11.9817 46.9551 11.9817C46.4052 11.9817 45.9195 11.8442 45.5072 11.5785C45.0948 11.3127 44.7741 10.937 44.5542 10.4696C44.3342 9.99313 44.2242 9.46163 44.2242 8.87514C44.2151 8.26117 44.3342 7.71134 44.5816 7.22566C44.8199 6.73998 45.1681 6.36426 45.608 6.08935C46.0479 5.81444 46.5519 5.67698 47.12 5.67698C48.2838 5.67698 49.0627 6.18099 49.4659 7.19817V4.58649H51.9136ZM49.0994 9.7457C49.3468 9.50744 49.4751 9.18671 49.4751 8.80183C49.4751 8.42612 49.356 8.12371 49.1086 7.89462C48.8611 7.66552 48.5312 7.5464 48.1189 7.5464C47.7065 7.5464 47.3766 7.66553 47.1292 7.90378C46.8818 8.14204 46.7626 8.44444 46.7626 8.82932C46.7626 9.2142 46.8818 9.51661 47.1292 9.75487C47.3766 9.99313 47.6973 10.1123 48.1097 10.1123C48.5221 10.1123 48.852 9.99313 49.0994 9.7457Z" }), (0, i.jsx)("path", { d: "M13.4751 6.29095C14.1789 6.29095 14.7489 5.77778 14.7489 5.14547C14.7489 4.51317 14.1789 4 13.4751 4C12.7723 4 12.2014 4.51317 12.2014 5.14547C12.2014 5.77778 12.7723 6.29095 13.4751 6.29095Z" }), (0, i.jsx)("path", { d: "M14.7489 7.07812C13.97 7.41719 12.9986 7.42635 12.2014 7.07812V11.7792H14.7489V7.07812Z" })] }) }) } }, 436088: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", className: a, foreground: o, ...l } = e; return (0, i.jsx)("svg", { ...(0, r.default)(l), className: a, width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: o, fill: s, fillRule: "evenodd", clipRule: "evenodd", d: "M2 11C2 6.02944 6.02944 2 11 2H13C17.9706 2 22 6.02944 22 11V19C22 20.6569 20.6569 22 19 22H5C3.34315 22 2 20.6569 2 19V11ZM5.88 5.82497C4.71048 6.55593 4 7.83781 4 9.21697V18.7192C4 19.3698 4.61139 19.8471 5.24254 19.6893L10.9558 18.261C11.5695 18.1076 12 17.5562 12 16.9236V9.21697C12 6.07522 8.5442 4.15985 5.88 5.82497ZM10 12C10 11.4477 9.55228 11 9 11C8.44772 11 8 11.4477 8 12V14C8 14.5523 8.44772 15 9 15C9.55228 15 10 14.5523 10 14V12ZM17.6832 9.47564C17.4485 8.84145 16.5515 8.84145 16.3168 9.47564L16.1387 9.95707C15.9361 10.5045 15.5045 10.9361 14.9571 11.1387L14.4756 11.3168C13.8415 11.5515 13.8415 12.4485 14.4756 12.6832L14.9571 12.8613C15.5045 13.0639 15.9361 13.4955 16.1387 14.0429L16.3168 14.5244C16.5515 15.1585 17.4485 15.1585 17.6832 14.5244L17.8613 14.0429C18.0639 13.4955 18.4955 13.0639 19.0429 12.8613L19.5244 12.6832C20.1585 12.4485 20.1585 11.5515 19.5244 11.3168L19.0429 11.1387C18.4955 10.9361 18.0639 10.5045 17.8613 9.95707L17.6832 9.47564ZM14.1584 5.23782C14.2758 4.92073 14.7242 4.92073 14.8416 5.23782C14.9994 5.66433 15.3357 6.0006 15.7622 6.15842C16.0793 6.27576 16.0793 6.72424 15.7622 6.84158C15.3357 6.9994 14.9994 7.33567 14.8416 7.76218C14.7242 8.07927 14.2758 8.07927 14.1584 7.76218C14.0006 7.33567 13.6643 6.9994 13.2378 6.84158C12.9207 6.72424 12.9207 6.27576 13.2378 6.15842C13.6643 6.0006 14.0006 5.66433 14.1584 5.23782ZM18.8416 16.2378C18.7242 15.9207 18.2758 15.9207 18.1584 16.2378C18.0006 16.6643 17.6643 17.0006 17.2378 17.1584C16.9207 17.2758 16.9207 17.7242 17.2378 17.8416C17.6643 17.9994 18.0006 18.3357 18.1584 18.7622C18.2758 19.0793 18.7242 19.0793 18.8416 18.7622C18.9994 18.3357 19.3357 17.9994 19.7622 17.8416C20.0793 17.7242 20.0793 17.2758 19.7622 17.1584C19.3357 17.0006 18.9994 16.6643 18.8416 16.2378Z" }) }) } }, 943461: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("934827"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M16.293 9.293L17.707 10.707L12 16.414L6.29297 10.707L7.70697 9.293L11 12.586V2H13V12.586L16.293 9.293ZM18 20V18H20V20C20 21.102 19.104 22 18 22H6C4.896 22 4 21.102 4 20V18H6V20H18Z" }) }) }, s.DownloadIcon, void 0, { size: 24 }) }, 605403: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("960259"), o = n("531057"), l = n("586758"); t.default = (0, a.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: a, foreground: o, open: u = !1 } = e; return (0, i.jsx)("svg", { className: s()(l.arrow, a, { [l.open]: u }), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: o, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M16.59 8.59004L12 13.17L7.41 8.59004L6 10L12 16L18 10L16.59 8.59004Z" }) }) }, o.ChevronSmallDownIcon, void 0, { size: 24 }) }, 932125: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("149020"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M5.66487 5H18.3351C19.9078 5 21.2136 6.21463 21.3272 7.78329L21.9931 16.9774C22.0684 18.0165 21.287 18.9198 20.248 18.9951C20.2026 18.9984 20.1572 19 20.1117 19C18.919 19 17.8785 18.1904 17.5855 17.0342L17.0698 15H6.93015L6.41449 17.0342C6.12142 18.1904 5.08094 19 3.88826 19C2.84645 19 2.00189 18.1554 2.00189 17.1136C2.00189 17.0682 2.00354 17.0227 2.00682 16.9774L2.67271 7.78329C2.78632 6.21463 4.0921 5 5.66487 5ZM14.5 10C15.3284 10 16 9.32843 16 8.5C16 7.67157 15.3284 7 14.5 7C13.6716 7 13 7.67157 13 8.5C13 9.32843 13.6716 10 14.5 10ZM18.5 13C19.3284 13 20 12.3284 20 11.5C20 10.6716 19.3284 10 18.5 10C17.6716 10 17 10.6716 17 11.5C17 12.3284 17.6716 13 18.5 13ZM6.00001 9H4.00001V11H6.00001V13H8.00001V11H10V9H8.00001V7H6.00001V9Z", fill: r, className: s }) }) }, s.GameControllerIcon, void 0, { size: 16 }) }, 489785: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("124826"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M20 6.002H14V3.002C14 2.45 13.553 2.002 13 2.002H4C3.447 2.002 3 2.45 3 3.002V22.002H5V14.002H10.586L8.293 16.295C8.007 16.581 7.922 17.011 8.076 17.385C8.23 17.759 8.596 18.002 9 18.002H20C20.553 18.002 21 17.554 21 17.002V7.002C21 6.45 20.553 6.002 20 6.002Z", fill: r, className: s }) }) }, s.FlagIcon, void 0, { size: 16 }) }, 902781: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("377219"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M11 18H13V22H11V18Z", fill: r, className: s }), (0, i.jsx)("path", { d: "M12 2C8.822 2 7 4.187 7 8V16C7 16.552 7.447 17 8 17H16C16.553 17 17 16.552 17 16V8C17 4.187 15.178 2 12 2ZM11 14.001H10V5.001H11V14.001ZM14 14.001H13V5.001H14V14.001Z", fill: r, className: s })] }) }, s.FoodIcon, void 0, { size: 16 }) }, 497309: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("828065"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M12 2C6.4764 2 2 6.4764 2 12C2 17.5236 6.4764 22 12 22C17.5236 22 22 17.5236 22 12C22 6.4764 17.5236 2 12 2ZM12 5.6C12.4422 5.6 12.8 5.95781 12.8 6.4V11.5376L16.5625 13.7126C16.9453 13.9329 17.0703 14.4173 16.85 14.8001C16.6297 15.183 16.1453 15.3079 15.7625 15.0876L11.6873 12.7376C11.656 12.7251 11.6279 12.7048 11.5998 12.6876C11.3607 12.5486 11.1998 12.2954 11.1998 12.0001V6.4001C11.1998 5.9579 11.5578 5.6 12 5.6Z", fill: r, className: s }) }) }, s.ClockIcon, void 0, { size: 16 }) }, 193277: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("738232"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M12 2C6.477 2 2 6.477 2 12C2 17.522 6.477 22 12 22C17.523 22 22 17.522 22 12C22 6.477 17.522 2 12 2ZM16.293 6.293L17.707 7.706L16.414 9L17.707 10.293L16.293 11.706L13.586 9L16.293 6.293ZM6.293 7.707L7.707 6.294L10.414 9L7.707 11.707L6.293 10.294L7.586 9L6.293 7.707ZM18 14C18 16.617 15.14 19 12 19C8.86 19 6 16.617 6 14V13H18V14Z" }) }) }, s.ReactionIcon, void 0, { size: 24 }) }, 478803: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("83468"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M6.814 8.982C4.539 11.674 4.656 15.591 6.931 18.153L4.034 21.579L5.561 22.87L8.463 19.437C9.569 20.127 10.846 20.513 12.161 20.513C14.231 20.513 16.183 19.607 17.516 18.027C20.069 15.01 20.771 6.945 21 3C17.765 3.876 9.032 6.356 6.814 8.982V8.982ZM8.935 17.331C6.826 15.548 6.56 12.382 8.342 10.272C9.592 8.793 14.904 6.845 18.764 5.698L8.935 17.331V17.331Z", fill: r, className: s }) }) }, s.NatureIcon, void 0, { size: 16 }) }, 407626: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("324333"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M18 5.999H17V4.999C17 4.448 16.553 3.999 16 3.999H4C3.447 3.999 3 4.448 3 4.999V12.999C3 14.488 3.47 15.865 4.265 16.999H15.722C16.335 16.122 16.761 15.105 16.92 13.999H18C20.205 13.999 22 12.205 22 9.999C22 7.794 20.205 5.999 18 5.999V5.999ZM18 12H17V8H18C19.104 8 20 8.897 20 10C20 11.102 19.104 12 18 12Z", fill: r, className: s }), (0, i.jsx)("path", { d: "M2 18H18V20H2V18Z", fill: r, className: s })] }) }, s.ObjectIcon, void 0, { size: 16 }) }, 869555: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("738232"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M12 2C6.477 2 2 6.477 2 12C2 17.522 6.477 22 12 22C17.523 22 22 17.522 22 12C22 6.477 17.522 2 12 2ZM16.293 6.293L17.707 7.706L16.414 9L17.707 10.293L16.293 11.706L13.586 9L16.293 6.293ZM6.293 7.707L7.707 6.294L10.414 9L7.707 11.707L6.293 10.294L7.586 9L6.293 7.707ZM12 19C9.609 19 7.412 17.868 6 16.043L7.559 14.486C8.555 15.92 10.196 16.831 12 16.831C13.809 16.831 15.447 15.92 16.443 14.481L18 16.04C16.59 17.867 14.396 19 12 19Z", fill: r, className: s }) }) }, s.ReactionIcon, void 0, { size: 16 }) }, 642113: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("738232"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M12 2C6.477 2 2 6.477 2 12C2 17.522 6.477 22 12 22C17.523 22 22 17.522 22 12C22 6.477 17.523 2 12 2ZM8 6C9.104 6 10 6.896 10 8C10 9.105 9.104 10 8 10C6.896 10 6 9.105 6 8C6 6.896 6.896 6 8 6ZM18 14C18 16.617 15.14 19 12 19C8.86 19 6 16.617 6 14V13H18V14ZM16 10C14.896 10 14 9.105 14 8C14 6.896 14.896 6 16 6C17.104 6 18 6.896 18 8C18 9.105 17.104 10 16 10Z" }) }) }, s.ReactionIcon, void 0, { size: 24 }) }, 219541: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("509633"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M16 4.001C14.406 4.001 12.93 4.838 12 6.081C11.07 4.838 9.594 4.001 8 4.001C5.243 4.001 3 6.244 3 9.001C3 14.492 11.124 19.633 11.471 19.849C11.633 19.95 11.817 20.001 12 20.001C12.183 20.001 12.367 19.95 12.529 19.849C12.876 19.633 21 14.492 21 9.001C21 6.244 18.757 4.001 16 4.001V4.001Z", fill: r, className: s }) }) }, s.HeartIcon, void 0, { size: 16 }) }, 593552: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("357431"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M22 17H19.725C19.892 16.529 20 16.029 20 15.5C20 13.015 17.985 11 15.5 11H13.5L12.276 8.553C12.107 8.214 11.761 8 11.382 8H7C6.448 8 6 8.447 6 9V11.051C3.753 11.302 2 13.186 2 15.5C2 17.986 4.015 20 6.5 20H15.5C16.563 20 17.527 19.616 18.297 19H22V17ZM6.5 16.75C5.81 16.75 5.25 16.19 5.25 15.5C5.25 14.81 5.81 14.25 6.5 14.25C7.19 14.25 7.75 14.81 7.75 15.5C7.75 16.19 7.19 16.75 6.5 16.75ZM11.5 16.75C10.81 16.75 10.25 16.19 10.25 15.5C10.25 14.81 10.81 14.25 11.5 14.25C12.19 14.25 12.75 14.81 12.75 15.5C12.75 16.19 12.19 16.75 11.5 16.75ZM16.5 16.75C15.81 16.75 15.25 16.19 15.25 15.5C15.25 14.81 15.81 14.25 16.5 14.25C17.19 14.25 17.75 14.81 17.75 15.5C17.75 16.19 17.19 16.75 16.5 16.75Z", fill: r, className: s }), (0, i.jsx)("path", { d: "M8 7H10C10 5.346 8.654 4 7 4H6V6H7C7.551 6 8 6.449 8 7Z", fill: r, className: s })] }) }, s.BicycleIcon, void 0, { size: 16 }) }, 57128: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("738232"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M12 2C6.477 2 2 6.477 2 12C2 17.522 6.477 22 12 22C17.523 22 22 17.522 22 12C22 6.477 17.522 2 12 2ZM9 7C10.104 7 11 7.896 11 9C11 10.105 10.104 11 9 11C7.896 11 7 10.105 7 9C7 7.896 7.896 7 9 7ZM12 19C9.609 19 7.412 17.868 6 16.043L7.559 14.486C8.555 15.92 10.196 16.831 12 16.831C13.809 16.831 15.447 15.92 16.443 14.481L18 16.04C16.59 17.867 14.396 19 12 19ZM18 10H14V8H18V10Z" }) }) }, s.ReactionIcon, void 0, { size: 24 }) }, 330379: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("180886"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 16 16", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M1.93956 14.6668H6.18203C6.51658 14.6668 6.7881 14.3953 6.7881 14.0607C6.7881 13.7262 6.51658 13.4547 6.18203 13.4547H3.40261L7.21658 9.64069C7.45325 9.40402 7.45325 9.02038 7.21658 8.78371C7.0984 8.66522 6.94325 8.60613 6.7881 8.60613C6.63294 8.60613 6.47779 8.66522 6.35961 8.78371L2.54563 12.5977V9.81826C2.54563 9.48372 2.27411 9.2122 1.93956 9.2122C1.60501 9.2122 1.3335 9.48372 1.3335 9.81826V14.0607C1.3335 14.3953 1.60501 14.6668 1.93956 14.6668Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M8.78374 7.21643C9.02041 7.4531 9.40405 7.4531 9.64072 7.21643L13.4547 3.40245V6.18188C13.4547 6.51643 13.7262 6.78794 14.0608 6.78794C14.3953 6.78794 14.6668 6.51643 14.6668 6.18188V1.93941C14.6668 1.60486 14.3953 1.33334 14.0608 1.33334L9.8183 1.33334C9.48375 1.33334 9.21223 1.60486 9.21223 1.93941C9.21223 2.27396 9.48375 2.54548 9.8183 2.54548H12.5977L8.78374 6.35945C8.54707 6.59612 8.54707 6.97976 8.78374 7.21643Z" })] }) }, s.MaximizeIcon, void 0, { size: 16 }) }, 794358: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("418419"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: r, className: s, d: "M12 5C5.648 5 1 12 1 12C1 12 5.648 19 12 19C18.352 19 23 12 23 12C23 12 18.352 5 12 5ZM12 16C9.791 16 8 14.21 8 12C8 9.79 9.791 8 12 8C14.209 8 16 9.79 16 12C16 14.21 14.209 16 12 16Z" }), (0, i.jsx)("path", { fill: r, className: s, d: "M12 14C13.1046 14 14 13.1046 14 12C14 10.8954 13.1046 10 12 10C10.8954 10 10 10.8954 10 12C10 13.1046 10.8954 14 12 14Z" })] }) }, s.EyeIcon, void 0, { size: 16 }) }, 167580: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("153832"), a = n("960259"), o = n("559397"), l = n("325767"); t.default = (0, a.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: a = "currentColor", foreground: o, ...u } = e, d = r.useRef((0, s.v4)()); return (0, i.jsxs)("svg", { ...(0, l.default)(u), width: t, height: n, viewBox: "0 0 24 25", children: [(0, i.jsxs)("g", { clipPath: "url(".concat(d.current, ")"), children: [(0, i.jsx)("path", { d: "M21 0.994141V3.99414H24V5.99414H21V8.99414H19V5.99414H16V3.99414H19V0.994141H21Z", fill: a, className: o }), (0, i.jsx)("path", { d: "M14 12.9941C14 14.0987 13.1046 14.9941 12 14.9941C10.8954 14.9941 10 14.0987 10 12.9941C10 11.8896 10.8954 10.9941 12 10.9941C13.1046 10.9941 14 11.8896 14 12.9941Z", fill: a, className: o }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M20 11.9941C20.6987 11.9941 21.3734 11.8918 22.0101 11.7012C22.6497 12.4666 23 12.9941 23 12.9941C23 12.9941 18.352 19.9941 12 19.9941C5.648 19.9941 1 12.9941 1 12.9941C1 12.9941 5.648 5.99414 12 5.99414C12.3661 5.99414 12.7266 6.0174 13.0808 6.06123C13.5947 9.42075 16.4968 11.9941 20 11.9941ZM8 12.9941C8 15.2041 9.791 16.9941 12 16.9941C14.209 16.9941 16 15.2041 16 12.9941C16 10.7841 14.209 8.99414 12 8.99414C9.791 8.99414 8 10.7841 8 12.9941Z", fill: a, className: o })] }), (0, i.jsx)("defs", { children: (0, i.jsx)("clipPath", { id: d.current, children: (0, i.jsx)("rect", { width: "24", height: "24", fill: a, className: o, transform: "translate(0 0.994141)" }) }) })] }) }, o.EyePlusIcon, void 0, { size: 16 }) }, 880008: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("692547"), s = n("960259"), a = n("344809"), o = n("325767"); t.default = (0, s.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", foregroundColor: a = r.default.unsafe_rawColors.RED_400.css, foreground: l, background: u, ...d } = e; return (0, i.jsxs)("svg", { ...(0, o.default)(d), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("rect", { fill: a, className: l, x: "2", y: "21.2154", width: "26", height: "2", transform: "rotate(-45 2 21.2154)" }), (0, i.jsx)("path", { fill: s, className: u, fillRule: "evenodd", clipRule: "evenodd", d: "M10.1843 18.8115C10.7713 18.9328 11.3775 19 12 19C18.352 19 23 12 23 12C23 12 21.9643 10.4402 20.2026 8.79322L15.8265 13.1693C15.4393 14.4384 14.4382 15.4393 13.1694 15.8264L10.1843 18.8115ZM12.4818 8.02871C12.3238 8.00975 12.1631 8 12 8C9.791 8 8 9.79 8 12C8 12.1631 8.00975 12.3239 8.0287 12.4818L4.59645 15.914C2.35293 14.0375 1 12 1 12C1 12 5.648 5 12 5C13.0508 5 14.055 5.19157 14.9992 5.51132L12.4818 8.02871Z" })] }) }, a.EyeSlashIcon, void 0, { size: 24 }) }, 225196: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("489862"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M19.6,9l-4.2-0.4c-0.4,0-0.7-0.3-0.8-0.6l-1.6-3.9c-0.3-0.8-1.5-0.8-1.8,0L9.4,8.1C9.3,8.4,9,8.6,8.6,8.7L4.4,9 c-0.9,0.1-1.2,1.2-0.6,1.8L7,13.6c0.3,0.2,0.4,0.6,0.3,1l-1,4.1c-0.2,0.9,0.7,1.5,1.5,1.1l3.6-2.2c0.3-0.2,0.7-0.2,1,0l3.6,2.2 c0.8,0.5,1.7-0.2,1.5-1.1l-1-4.1c-0.1-0.4,0-0.7,0.3-1l3.2-2.8C20.9,10.2,20.5,9.1,19.6,9z M12,15.4l-3.8,2.3l1-4.3l-3.3-2.9 l4.4-0.4l1.7-4l1.7,4l4.4,0.4l-3.3,2.9l1,4.3L12,15.4z" }) }) }, s.StarOutlineIcon, void 0, { size: 16 }) }, 887208: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("981452"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), viewBox: "0 0 24 24", width: t, height: n, children: [(0, i.jsx)("path", { d: "M0,0H24V24H0Z", fill: "none" }), (0, i.jsx)("path", { fill: r, className: s, d: "M12.5,17.6l3.6,2.2a1,1,0,0,0,1.5-1.1l-1-4.1a1,1,0,0,1,.3-1l3.2-2.8A1,1,0,0,0,19.5,9l-4.2-.4a.87.87,0,0,1-.8-.6L12.9,4.1a1.05,1.05,0,0,0-1.9,0l-1.6,4a1,1,0,0,1-.8.6L4.4,9a1.06,1.06,0,0,0-.6,1.8L7,13.6a.91.91,0,0,1,.3,1l-1,4.1a1,1,0,0,0,1.5,1.1l3.6-2.2A1.08,1.08,0,0,1,12.5,17.6Z" })] }) }, s.StarIcon, void 0, { size: 16 }) }, 28531: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 10, height: n = 13, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)({ ...o }), width: t, height: n, viewBox: "0 0 ".concat(t, " ").concat(n), className: a, fill: s, xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { d: "M9.61937 11.2516C8.68397 13.0881 6.3896 13.4808 6.29087 13.4971C6.27753 13.4999 6.26158 13.4999 6.24824 13.4999C6.23229 13.4999 6.21624 13.4971 6.20029 13.4945C6.18966 13.4945 6.17893 13.4917 6.1683 13.4863C6.14964 13.4836 6.13099 13.4755 6.11504 13.462C6.1017 13.4538 6.08836 13.4458 6.07773 13.4348C6.0671 13.4294 6.05646 13.4213 6.04844 13.4105C6.04573 13.4077 6.04312 13.4051 6.04312 13.4023C6.01383 13.3644 5.99518 13.3211 5.98716 13.2777C5.98445 13.275 5.98445 13.275 5.98445 13.2723C5.98174 13.2588 5.98174 13.2452 5.98174 13.2318C5.98174 13.2156 5.98445 13.1992 5.98706 13.183C5.98706 13.1722 5.99238 13.1587 5.99508 13.1451C5.99779 13.1397 5.99779 13.137 5.99779 13.1343C6.00581 13.1207 6.01113 13.1072 6.01915 13.0964C6.02717 13.0828 6.0351 13.0693 6.04583 13.0585C6.05115 13.0476 6.06178 13.0367 6.07251 13.0287C6.07512 13.0259 6.07782 13.0233 6.08053 13.0205C7.89795 11.3737 7.47691 9.83251 7.45825 9.76737C7.45023 9.74841 7.44762 9.72679 7.44491 9.70783C7.35966 8.34806 6.30962 6.83119 5.64875 6.0052C5.52347 7.28914 4.74265 9.22038 4.54545 9.68897C4.4948 9.8109 4.36421 9.87584 4.24165 9.84872C4.11377 9.81895 4.02842 9.70243 4.03383 9.57245C4.04978 9.14723 3.71137 8.58111 3.41287 8.1775C3.27967 8.51881 3.0238 9.047 2.53876 9.88401C2.32292 10.2578 2.19765 10.6398 2.16835 11.0135C2.06444 12.3597 2.91719 12.8554 3.13033 12.9556C3.15962 12.9692 3.17566 12.9746 3.17827 12.9746C3.21829 12.9908 3.25289 13.0125 3.27957 13.045C3.29021 13.0532 3.29823 13.064 3.30625 13.0748C3.31959 13.0991 3.33293 13.1235 3.33825 13.1479C3.3542 13.1885 3.3569 13.2319 3.34888 13.2752C3.34617 13.2914 3.34086 13.3077 3.33554 13.3239C3.30625 13.4052 3.24226 13.4648 3.16503 13.4864C3.15169 13.4918 3.13835 13.4946 3.12511 13.4972C3.11177 13.5 3.09843 13.5 3.08509 13.5C3.0558 13.5 3.02381 13.4946 2.99452 13.4838H2.9892C1.58211 12.9285 0.657446 12.0861 0.244445 10.981C-0.389754 9.28801 0.369719 7.46245 0.724085 6.75543C0.902618 6.4033 1.13181 6.04576 1.44625 5.62859C3.18113 3.32894 3.65545 0.747591 3.66077 0.723194C3.67672 0.622978 3.74873 0.541727 3.84462 0.511957C3.93789 0.482187 4.04181 0.509206 4.11382 0.579651C5.59815 2.12356 6.75737 3.3587 7.55417 4.2526C8.25768 5.04086 8.82526 5.8751 9.24101 6.7392C10.1043 8.52942 10.2322 10.0462 9.61934 11.2517L9.61937 11.2516Z", fill: "currentColor" }) }) } }, 795295: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("124826"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { className: s, fill: r, d: "M20 6.00201H14V3.00201C14 2.45001 13.553 2.00201 13 2.00201H4C3.447 2.00201 3 2.45001 3 3.00201V22.002H5V14.002H10.586L8.293 16.295C8.007 16.581 7.922 17.011 8.076 17.385C8.23 17.759 8.596 18.002 9 18.002H20C20.553 18.002 21 17.554 21 17.002V7.00201C21 6.45001 20.553 6.00201 20 6.00201Z" }) }) }, s.FlagIcon, void 0, { size: 16 }) }, 189798: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("325767"); t.default = function(e) { let { width: t = 16, height: n = 16, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 16 15.2", children: (0, i.jsx)("path", { className: a, fill: s, fillRule: "evenodd", d: "m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z" }) }) } }, 286908: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("452804"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M20 7H12L10.553 5.106C10.214 4.428 9.521 4 8.764 4H3C2.447 4 2 4.447 2 5V19C2 20.104 2.895 21 4 21H20C21.104 21 22 20.104 22 19V9C22 7.896 21.104 7 20 7Z" }) }) }, s.FolderIcon, void 0, { size: 24 }) }, 481479: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("907450"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 20 20", fill: "none", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M6.56929 14.6869H2.34375C1.97079 14.6869 1.61311 14.5387 1.34938 14.275C1.08566 14.0113 0.9375 13.6536 0.9375 13.2806V8.12437C0.9375 6.38389 1.6289 4.7147 2.85961 3.484C4.09032 2.25329 5.75951 1.56189 7.49999 1.56189C9.24047 1.56189 10.9097 2.25329 12.1404 3.484C12.6953 4.03895 13.1406 4.68307 13.4623 5.38267C14.9101 5.5973 16.2513 6.29124 17.2655 7.36251C18.4194 8.58133 19.0625 10.1959 19.0625 11.8744V17.0306C19.0625 17.4036 18.9144 17.7613 18.6506 18.025C18.3869 18.2887 18.0292 18.4369 17.6563 18.4369H12.5C11.1428 18.4369 9.81899 18.0162 8.71072 17.2328C7.7871 16.58 7.05103 15.7019 6.56929 14.6869ZM4.18544 4.80982C5.06451 3.93075 6.25679 3.43689 7.49999 3.43689C8.74319 3.43689 9.93549 3.93075 10.8146 4.80983C11.6936 5.6889 12.1875 6.88119 12.1875 8.12439C12.1875 9.36759 11.6936 10.5599 10.8146 11.439C9.93549 12.318 8.74321 12.8119 7.50001 12.8119H7.20268C7.19767 12.8118 7.19266 12.8118 7.18764 12.8119H2.8125V8.12438C2.8125 6.88118 3.30636 5.6889 4.18544 4.80982ZM8.672 14.5814C8.97763 15.0132 9.35591 15.3928 9.79299 15.7017C10.5847 16.2614 11.5305 16.5619 12.5 16.5619H17.1875V11.8744C17.1875 10.6755 16.7281 9.52219 15.9039 8.65159C15.3804 8.09865 14.735 7.68644 14.027 7.44246C14.0506 7.66798 14.0625 7.89557 14.0625 8.12439C14.0625 9.86487 13.3711 11.5341 12.1404 12.7648C11.1896 13.7156 9.97697 14.3445 8.672 14.5814Z" }) }) }, s.ForumIcon, void 0, { size: 24 }) }, 160696: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("808917"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { d: "M13 4C13 3.66767 13.0405 3.3448 13.1169 3.03607C11.8881 2.28254 10.4651 1.87427 8.99999 1.87427C6.91141 1.87427 4.90838 2.70395 3.43153 4.1808C1.95469 5.65764 1.125 7.66067 1.125 9.74925V15.9368C1.125 16.3843 1.30279 16.8135 1.61926 17.13C1.93573 17.4465 2.36495 17.6243 2.8125 17.6243H7.88314C8.46123 18.8423 9.34451 19.896 10.4529 20.6794C11.7828 21.6195 13.3714 22.1242 15 22.1243H21.1875C21.6351 22.1243 22.0643 21.9465 22.3808 21.63C22.6972 21.3135 22.875 20.8843 22.875 20.4368V14.2492C22.875 13.3832 22.7323 12.5314 22.4596 11.7253C22.0074 11.9026 21.5151 12 21 12H20.1557C20.4625 12.7033 20.625 13.4682 20.625 14.2493V19.8743H15C13.8365 19.8743 12.7017 19.5136 11.7516 18.8421C11.2271 18.4713 10.7732 18.0159 10.4064 17.4977C11.9724 17.2135 13.4275 16.4587 14.5685 15.3177C15.5076 14.3786 16.185 13.2267 16.5538 11.9754C15.7646 11.8878 15.0447 11.5706 14.4624 11.0921C14.2192 12.0813 13.7097 12.9945 12.9775 13.7267C11.9226 14.7816 10.4919 15.3743 9.00001 15.3743H3.375V9.74925C3.375 8.25741 3.96763 6.82668 5.02252 5.77179C6.07741 4.7169 7.50815 4.12427 8.99999 4.12427C10.4918 4.12427 11.9226 4.7169 12.9775 5.77179L13 5.79444V4Z", fill: r, className: s }), (0, i.jsx)("path", { d: "M21.025 4V5C21.5635 5 22 5.43652 22 5.975V9C22 9.55228 21.5523 10 21 10H17C16.4477 10 16 9.55228 16 9V6C16 5.44772 16.4477 5 17 5V4C17 2.88 17.95 2 19 2C20.05 2 21.025 2.88 21.025 4ZM18 5H20V4C20 3.42857 19.5333 3 19 3C18.4667 3 18 3.42857 18 4V5Z", fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd" })] }) }, s.ForumLockIcon, void 0, { size: 24 }) }, 832440: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("696148"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { d: "M13 4C13 3.66767 13.0405 3.3448 13.1169 3.03607C11.8881 2.28254 10.4651 1.87427 8.99999 1.87427C6.91141 1.87427 4.90838 2.70395 3.43153 4.1808C1.95469 5.65764 1.125 7.66067 1.125 9.74925V15.9368C1.125 16.3843 1.30279 16.8135 1.61926 17.13C1.93573 17.4465 2.36495 17.6243 2.8125 17.6243H7.88314C8.46123 18.8423 9.34451 19.896 10.4529 20.6794C11.7828 21.6195 13.3714 22.1242 15 22.1243H21.1875C21.6351 22.1243 22.0643 21.9465 22.3808 21.63C22.6972 21.3135 22.875 20.8843 22.875 20.4368V14.2492C22.875 13.3832 22.7323 12.5314 22.4596 11.7253C22.0074 11.9026 21.5151 12 21 12H20.1557C20.4625 12.7033 20.625 13.4682 20.625 14.2493V19.8743H15C13.8365 19.8743 12.7017 19.5136 11.7516 18.8421C11.2271 18.4713 10.7732 18.0159 10.4064 17.4977C11.9724 17.2135 13.4275 16.4587 14.5685 15.3177C15.5076 14.3786 16.185 13.2267 16.5538 11.9754C15.7646 11.8878 15.0447 11.5706 14.4624 11.0921C14.2192 12.0813 13.7097 12.9945 12.9775 13.7267C11.9226 14.7816 10.4919 15.3743 9.00001 15.3743H3.375V9.74925C3.375 8.25741 3.96763 6.82668 5.02252 5.77179C6.07741 4.7169 7.50815 4.12427 8.99999 4.12427C10.4918 4.12427 11.9226 4.7169 12.9775 5.77179L13 5.79444V4Z", fill: r, className: s }), (0, i.jsx)("path", { d: "M22.2821 7.55654L19.9173 2.80204C19.5491 2.06172 18.4885 2.05951 18.1172 2.79829L15.7274 7.55279C15.3932 8.21769 15.8793 9 16.6265 9L21.3811 9C22.1265 8.99999 22.6126 8.22119 22.2821 7.55654ZM19.5237 4H18.5184L18.5184 6.5H19.5237V4ZM19.021 8C18.7436 8 18.5184 7.77589 18.5184 7.49887C18.5184 7.22224 18.7436 6.99773 19.021 6.99773C19.2985 6.99773 19.5237 7.22224 19.5237 7.49887C19.5237 7.77589 19.2985 8 19.021 8Z", fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd" })] }) }, s.ForumWarningIcon, void 0, { size: 24 }) }, 634648: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("176743"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", strokeWidth: s = "2.5", foreground: o, ...l } = e; return (0, i.jsx)("svg", { ...(0, a.default)(l), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: (0, i.jsx)("path", { className: o, stroke: r, strokeWidth: s, strokeLinecap: "round", strokeLinejoin: "round", d: "M4.25892 16.5936C3.14073 14.7086 2.74913 12.4802 3.15765 10.3269C3.56618 8.17362 4.74672 6.24353 6.47761 4.89906C8.2085 3.55459 10.3707 2.88823 12.5581 3.02511C14.7455 3.16199 16.8077 4.0927 18.3575 5.64247C19.9073 7.19223 20.838 9.25445 20.9749 11.4419C21.1118 13.6293 20.4454 15.7915 19.101 17.5224C17.7565 19.2532 15.8264 20.4338 13.6731 20.8423C11.5198 21.2509 9.29146 20.8593 7.40646 19.7411L7.40648 19.741L4.29805 20.6291C4.16944 20.6659 4.03335 20.6676 3.90387 20.634C3.7744 20.6005 3.65625 20.5329 3.56167 20.4383C3.4671 20.3437 3.39953 20.2256 3.36598 20.0961C3.33243 19.9666 3.33412 19.8306 3.37086 19.7019L4.25898 16.5935L4.25892 16.5936Z" }) }) }, s.ChatIcon, void 0, { size: 24 }) }, 710290: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("834345"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M19,3H14V5h5v5h2V5A2,2,0,0,0,19,3Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M19,19H14v2h5a2,2,0,0,0,2-2V14H19Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M3,5v5H5V5h5V3H5A2,2,0,0,0,3,5Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M5,14H3v5a2,2,0,0,0,2,2h5V19H5Z" })] }) }, s.FullscreenEnterIcon, void 0, { size: 24 }) }, 937482: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("191578"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return 16 === t || 16 === n ? (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsx)("path", { fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M14 7V9C14 9 12.5867 9 12.5733 9.00667C12.42 9.58667 12.1733 10.1267 11.84 10.6067L12.74 11.5067L11.4933 12.7533L10.5933 11.8533C10.1133 12.1867 9.57334 12.44 8.99334 12.5867V14H6.99334V12.58C6.41334 12.4333 5.87334 12.18 5.39334 11.8467L4.49333 12.7467L3.24667 11.5L4.14667 10.6C3.81333 10.1267 3.56 9.58 3.41333 9H2V7H3.41333C3.56 6.42 3.81333 5.88 4.14667 5.4L3.24667 4.5L4.5 3.24667L5.4 4.14667C5.87334 3.81333 6.42 3.56 7 3.41333V2H9V3.41333C9.58 3.56667 10.12 3.81333 10.6 4.14667L11.5067 3.25333L12.7533 4.5L11.8533 5.4C12.1867 5.87334 12.44 6.42 12.5867 7H14ZM8 10C9.10457 10 10 9.10457 10 8C10 6.89543 9.10457 6 8 6C6.89543 6 6 6.89543 6 8C6 9.10457 6.89543 10 8 10Z" }) }) : (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M19.738 10H22V14H19.739C19.498 14.931 19.1 15.798 18.565 16.564L20 18L18 20L16.565 18.564C15.797 19.099 14.932 19.498 14 19.738V22H10V19.738C9.069 19.498 8.203 19.099 7.436 18.564L6 20L4 18L5.436 16.564C4.901 15.799 4.502 14.932 4.262 14H2V10H4.262C4.502 9.068 4.9 8.202 5.436 7.436L4 6L6 4L7.436 5.436C8.202 4.9 9.068 4.502 10 4.262V2H14V4.261C14.932 4.502 15.797 4.9 16.565 5.435L18 3.999L20 5.999L18.564 7.436C19.099 8.202 19.498 9.069 19.738 10ZM12 16C14.2091 16 16 14.2091 16 12C16 9.79086 14.2091 8 12 8C9.79086 8 8 9.79086 8 12C8 14.2091 9.79086 16 12 16Z" }) }) }, s.SettingsIcon, void 0, { size: 24 }) }, 559629: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("730592"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { width: t, height: n, ...(0, a.default)(o), viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M16.886 7.999H20C21.104 7.999 22 8.896 22 9.999V11.999H2V9.999C2 8.896 2.897 7.999 4 7.999H7.114C6.663 7.764 6.236 7.477 5.879 7.121C4.709 5.951 4.709 4.048 5.879 2.879C7.012 1.746 8.986 1.746 10.121 2.877C11.758 4.514 11.979 7.595 11.998 7.941C11.9991 7.9525 11.9966 7.96279 11.9941 7.97304C11.992 7.98151 11.99 7.98995 11.99 7.999H12.01C12.01 7.98986 12.0079 7.98134 12.0058 7.97287C12.0034 7.96282 12.0009 7.95286 12.002 7.942C12.022 7.596 12.242 4.515 13.879 2.878C15.014 1.745 16.986 1.746 18.121 2.877C19.29 4.049 19.29 5.952 18.121 7.121C17.764 7.477 17.337 7.764 16.886 7.999ZM7.293 5.707C6.903 5.316 6.903 4.682 7.293 4.292C7.481 4.103 7.732 4 8 4C8.268 4 8.519 4.103 8.707 4.292C9.297 4.882 9.641 5.94 9.825 6.822C8.945 6.639 7.879 6.293 7.293 5.707ZM14.174 6.824C14.359 5.941 14.702 4.883 15.293 4.293C15.481 4.103 15.732 4 16 4C16.268 4 16.519 4.103 16.706 4.291C17.096 4.682 17.097 5.316 16.707 5.707C16.116 6.298 15.057 6.642 14.174 6.824ZM3 13.999V19.999C3 21.102 3.897 21.999 5 21.999H11V13.999H3ZM13 13.999V21.999H19C20.104 21.999 21 21.102 21 19.999V13.999H13Z" }) }) }, s.GiftIcon, void 0, { size: 24 }) }, 950463: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("781511"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, fillRule: "evenodd", d: "M16.4770909,19 C18.0152727,16.936 18.9381818,14.531 19.1323636,12 L21.7527273,12 C21.3829091,15.056 19.3363636,17.65 16.4770909,19 Z M2.24618182,12 L4.86654545,12 C5.06072727,14.531 5.98363636,16.936 7.52181818,19 C4.66254545,17.65 2.616,15.056 2.24618182,12 Z M7.52181818,3 C5.98254545,5.064 5.06072727,7.469 4.86654545,10 L2.24618182,10 C2.616,6.944 4.66254545,4.35 7.52181818,3 Z M13.0909091,10 L13.0909091,2.369 C15.3294545,4.416 16.6930909,7.111 16.9505455,10 L13.0909091,10 Z M13.0909091,19.631 L13.0909091,12 L16.9505455,12 C16.6930909,14.889 15.3294545,17.584 13.0909091,19.631 Z M10.9090909,12 L10.9090909,19.631 C8.66945455,17.584 7.30581818,14.889 7.04836364,12 L10.9090909,12 Z M10.9090909,10 L7.04836364,10 C7.30581818,7.111 8.66945455,4.416 10.9090909,2.369 L10.9090909,10 Z M19.1323636,10 C18.9381818,7.469 18.0163636,5.064 16.4770909,3 C19.3363636,4.35 21.3829091,6.944 21.7527273,10 L19.1323636,10 Z M0,11 C0,17.075 5.37163636,22 12,22 C18.6272727,22 24,17.075 24,11 C24,4.925 18.6272727,0 12,0 C5.37163636,0 0,4.925 0,11 Z", transform: "translate(0 1)" }) }) }, s.GlobeEarthIcon, void 0, { size: 24 }) }, 709586: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 8 12", children: [(0, i.jsx)("path", { d: "M4 0L0 4V8L4 12L8 8V4L4 0ZM7 7.59L4 10.59L1 7.59V4.41L4 1.41L7 4.41V7.59Z", fill: s, className: a }), (0, i.jsx)("path", { d: "M2 4.83V7.17L4 9.17L6 7.17V4.83L4 2.83L2 4.83Z", fill: s, className: a })] }) } }, 705077: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("560123"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: r, className: s, children: [(0, i.jsx)("circle", { cx: "16.9804", cy: "7.01942", r: "4.01942" }), (0, i.jsx)("circle", { cx: "16.9804", cy: "16.9805", r: "4.01942" }), (0, i.jsx)("circle", { cx: "7.01942", cy: "16.9805", r: "4.01942" }), (0, i.jsx)("rect", { x: "3", y: "3", width: "8.03884", height: "8.03884", rx: "2" })] }) }) }, s.ServerGridIcon, void 0, { size: 24 }) }, 242315: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("663735"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("svg", { width: "24", height: "24", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M12 2.00305C6.486 2.00305 2 6.48805 2 12.0031V20.0031C2 21.1071 2.895 22.0031 4 22.0031H6C7.104 22.0031 8 21.1071 8 20.0031V17.0031C8 15.8991 7.104 15.0031 6 15.0031H4V12.0031C4 7.59105 7.589 4.00305 12 4.00305C16.411 4.00305 20 7.59105 20 12.0031V15.0031H18C16.896 15.0031 16 15.8991 16 17.0031V20.0031C16 21.1071 16.896 22.0031 18 22.0031H20C21.104 22.0031 22 21.1071 22 20.0031V12.0031C22 6.48805 17.514 2.00305 12 2.00305Z", className: s, fill: r }) }) }) }, s.HeadphonesIcon, void 0, { size: 24 }) }, 381238: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("498503"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M6.16204 15.0065C6.10859 15.0022 6.05455 15 6 15H4V12C4 7.588 7.589 4 12 4C13.4809 4 14.8691 4.40439 16.0599 5.10859L17.5102 3.65835C15.9292 2.61064 14.0346 2 12 2C6.486 2 2 6.485 2 12V19.1685L6.16204 15.0065Z", fill: r }), (0, i.jsx)("path", { d: "M19.725 9.91686C19.9043 10.5813 20 11.2796 20 12V15H18C16.896 15 16 15.896 16 17V20C16 21.104 16.896 22 18 22H20C21.105 22 22 21.104 22 20V12C22 10.7075 21.7536 9.47149 21.3053 8.33658L19.725 9.91686Z", fill: r }), (0, i.jsx)("path", { d: "M3.20101 23.6243L1.7868 22.2101L21.5858 2.41113L23 3.82535L3.20101 23.6243Z", className: s, fill: r })] }) }, s.HeadphonesSlashIcon, void 0, { size: 24 }) }, 666272: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("509633"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { width: t, height: n, ...(0, a.default)(s), viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M16 4.00098C14.406 4.00098 12.93 4.83798 12 6.08098C11.07 4.83798 9.594 4.00098 8 4.00098C5.243 4.00098 3 6.24398 3 9.00098C3 14.492 11.124 19.633 11.471 19.849C11.633 19.95 11.817 20.001 12 20.001C12.183 20.001 12.367 19.95 12.529 19.849C12.876 19.633 21 14.492 21 9.00098C21 6.24398 18.757 4.00098 16 4.00098Z", fill: r }) }) }, s.HeartIcon, void 0, { size: 24 }) }, 356842: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("359653"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: (0, i.jsx)("path", { className: s, d: "M12.3345 2.71469L21.0315 10.542C21.3721 10.8486 21.1553 11.4137 20.697 11.4137H19V18.4137C19 18.9659 18.5523 19.4137 18 19.4137H15C14.4477 19.4137 14 18.9659 14 18.4137V13.4137H10V18.4137C10 18.9659 9.55228 19.4137 9 19.4137H6C5.44771 19.4137 5 18.9659 5 18.4137V11.4137H3.30298C2.84473 11.4137 2.62789 10.8486 2.96849 10.542L11.6655 2.71469C11.8557 2.54356 12.1443 2.54356 12.3345 2.71469Z", fill: r }) }) }, s.HomeIcon, void 0, { size: 24 }) }, 24514: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 16, height: n = 16, color: s = "currentColor", ...a } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(a), width: t, height: n, viewBox: "0 0 16 16", children: [(0, i.jsx)("circle", { cx: "8", cy: "8", r: "8" }), (0, i.jsx)("path", { d: "M4.66666 12.6667C3.93028 12.6667 3.33333 12.0697 3.33333 11.3333C3.33333 10.5969 3.93028 9.99999 4.66666 9.99999C5.40304 9.99999 5.99999 10.5969 5.99999 11.3333C5.99999 12.0697 5.40304 12.6667 4.66666 12.6667Z", fill: s }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.66666 12C4.29847 12 3.99999 11.7015 3.99999 11.3333C3.99999 10.9651 4.29847 10.6667 4.66666 10.6667C5.03485 10.6667 5.33333 10.9651 5.33333 11.3333C5.33333 11.7015 5.03485 12 4.66666 12ZM3.33333 11.3333C3.33333 12.0697 3.93028 12.6667 4.66666 12.6667C5.40304 12.6667 5.99999 12.0697 5.99999 11.3333C5.99999 10.5969 5.40304 9.99999 4.66666 9.99999C3.93028 9.99999 3.33333 10.5969 3.33333 11.3333Z", fill: s }), (0, i.jsx)("path", { d: "M8 12.6667C7.26362 12.6667 6.66666 12.0697 6.66666 11.3333C6.66666 10.5969 7.26362 9.99999 8 9.99999C8.73637 9.99999 9.33333 10.5969 9.33333 11.3333C9.33333 12.0697 8.73637 12.6667 8 12.6667Z", fill: s }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M8 12C7.63181 12 7.33333 11.7015 7.33333 11.3333C7.33333 10.9651 7.63181 10.6667 8 10.6667C8.36819 10.6667 8.66666 10.9651 8.66666 11.3333C8.66666 11.7015 8.36819 12 8 12ZM6.66666 11.3333C6.66666 12.0697 7.26362 12.6667 8 12.6667C8.73637 12.6667 9.33333 12.0697 9.33333 11.3333C9.33333 10.5969 8.73637 9.99999 8 9.99999C7.26362 9.99999 6.66666 10.5969 6.66666 11.3333Z", fill: s }), (0, i.jsx)("path", { d: "M8 6C7.26362 6 6.66666 5.40304 6.66666 4.66666C6.66666 3.93028 7.26362 3.33333 8 3.33333C8.73637 3.33333 9.33333 3.93028 9.33333 4.66666C9.33333 5.40304 8.73637 6 8 6Z", fill: s }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M8 5.33333C7.63181 5.33333 7.33333 5.03485 7.33333 4.66666C7.33333 4.29847 7.63181 3.99999 8 3.99999C8.36819 3.99999 8.66666 4.29847 8.66666 4.66666C8.66666 5.03485 8.36819 5.33333 8 5.33333ZM6.66666 4.66666C6.66666 5.40304 7.26362 6 8 6C8.73637 6 9.33333 5.40304 9.33333 4.66666C9.33333 3.93028 8.73637 3.33333 8 3.33333C7.26362 3.33333 6.66666 3.93028 6.66666 4.66666Z", fill: s }), (0, i.jsx)("path", { d: "M11.3333 12.6667C10.5969 12.6667 9.99999 12.0697 9.99999 11.3333C9.99999 10.5969 10.5969 9.99999 11.3333 9.99999C12.0697 9.99999 12.6667 10.5969 12.6667 11.3333C12.6667 12.0697 12.0697 12.6667 11.3333 12.6667Z", fill: s }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M11.3333 12C10.9651 12 10.6667 11.7015 10.6667 11.3333C10.6667 10.9651 10.9651 10.6667 11.3333 10.6667C11.7015 10.6667 12 10.9651 12 11.3333C12 11.7015 11.7015 12 11.3333 12ZM9.99999 11.3333C9.99999 12.0697 10.5969 12.6667 11.3333 12.6667C12.0697 12.6667 12.6667 12.0697 12.6667 11.3333C12.6667 10.5969 12.0697 9.99999 11.3333 9.99999C10.5969 9.99999 9.99999 10.5969 9.99999 11.3333Z", fill: s }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M5.99999 8.49999C5.53976 8.49999 5.16666 8.87309 5.16666 9.33333V10.6667H4.16666V9.33333C4.16666 8.32081 4.98747 7.49999 5.99999 7.49999H9.99999C11.0125 7.49999 11.8333 8.32081 11.8333 9.33333V10.6667H10.8333V9.33333C10.8333 8.87309 10.4602 8.49999 9.99999 8.49999H5.99999Z", fill: s }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7.5 11.3333V4.66666H8.5L8.49999 11.3333H7.5Z", fill: "white" })] }) } }, 84017: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("485303"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", className: s, d: "M6 2C3.79086 2 2 3.79086 2 6V18C2 20.2091 3.79086 22 6 22H18C20.2091 22 22 20.2091 22 18V6C22 3.79086 20.2091 2 18 2H6ZM10 8C10 6.8952 9.1032 6 8 6C6.8944 6 6 6.8952 6 8C6 9.1056 6.8944 10 8 10C9.1032 10 10 9.1056 10 8ZM9 14L6 18H18L15 11L11 16L9 14Z", fill: r }) }) }, s.ImageIcon, void 0, { size: 24 }) }, 499033: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 104, height: n = 80, ...s } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(s), width: t, height: n, viewBox: "0 0 104 80", fill: "none", children: [(0, i.jsx)("path", { d: "M95.6718 1.80634C95.6718 0.808724 94.863 0 93.8654 0C92.8678 0 92.0591 0.808724 92.0591 1.80634V3.64278C92.0591 4.64039 92.8678 5.44911 93.8654 5.44911C94.863 5.44911 95.6718 4.64039 95.6718 3.64278V1.80634Z", fill: "#ADF3FF" }), (0, i.jsx)("path", { d: "M95.6713 16.3574C95.6713 15.3598 94.8625 14.5511 93.8649 14.5511C92.8673 14.5511 92.0586 15.3598 92.0586 16.3574V18.1939C92.0586 19.1915 92.8673 20.0002 93.8649 20.0002C94.8625 20.0002 95.6713 19.1915 95.6713 18.1939V16.3574Z", fill: "#ADF3FF" }), (0, i.jsx)("path", { d: "M102.194 11.8412C103.191 11.8412 104 11.0325 104 10.0349C104 9.03724 103.191 8.22852 102.194 8.22852H100.357C99.3596 8.22852 98.5509 9.03724 98.5509 10.0349C98.5509 11.0325 99.3596 11.8412 100.357 11.8412H102.194Z", fill: "#ADF3FF" }), (0, i.jsx)("path", { d: "M87.6434 11.7413C88.641 11.7413 89.4497 10.9325 89.4497 9.93494C89.4497 8.93733 88.641 8.1286 87.6434 8.1286H85.8069C84.8093 8.1286 84.0006 8.93733 84.0006 9.93494C84.0006 10.9325 84.8093 11.7413 85.8069 11.7413H87.6434Z", fill: "#ADF3FF" }), (0, i.jsx)("path", { d: "M11.1501 74.4573L15.3147 73.0684C15.5192 72.9747 15.6925 72.8241 15.814 72.6347C15.9354 72.4454 16 72.225 16 72C16 71.775 15.9354 71.5546 15.814 71.3653C15.6925 71.1759 15.5192 71.0253 15.3147 70.9316L11.1501 69.5427C10.8657 69.4142 10.6378 69.1862 10.5094 68.9016L9.01446 64.7348C8.94423 64.521 8.80835 64.3349 8.62619 64.203C8.44403 64.071 8.22488 64 7.99999 64C7.77511 64 7.55597 64.071 7.37381 64.203C7.19165 64.3349 7.05576 64.521 6.98554 64.7348L5.49057 68.9016C5.36216 69.1862 5.13433 69.4142 4.84986 69.5427L0.685276 70.9316C0.480802 71.0253 0.307523 71.1759 0.186045 71.3653C0.0645662 71.5546 0 71.775 0 72C0 72.225 0.0645662 72.4454 0.186045 72.6347C0.307523 72.8241 0.480802 72.9747 0.685276 73.0684L4.84986 74.4573C5.0011 74.5032 5.1387 74.5858 5.25046 74.6976C5.36222 74.8094 5.44469 74.9471 5.49057 75.0984L6.98554 79.2652C7.05576 79.479 7.19165 79.6651 7.37381 79.797C7.55597 79.929 7.77511 80 7.99999 80C8.22488 80 8.44403 79.929 8.62619 79.797C8.80835 79.6651 8.94423 79.479 9.01446 79.2652L10.5094 75.0984C10.5553 74.9471 10.6378 74.8094 10.7495 74.6976C10.8613 74.5858 10.9989 74.5032 11.1501 74.4573Z", fill: "#FFD01A" })] }) } }, 87888: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("882485"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("rect", { width: "24", height: "24" }), (0, i.jsx)("path", { fill: r, className: s, d: "M9,7 L11,7 L11,5 L9,5 L9,7 Z M10,18 C5.59,18 2,14.41 2,10 C2,5.59 5.59,2 10,2 C14.41,2 18,5.59 18,10 C18,14.41 14.41,18 10,18 L10,18 Z M10,4.4408921e-16 C4.4771525,-1.77635684e-15 4.4408921e-16,4.4771525 0,10 C-1.33226763e-15,12.6521649 1.0535684,15.195704 2.92893219,17.0710678 C4.80429597,18.9464316 7.3478351,20 10,20 C12.6521649,20 15.195704,18.9464316 17.0710678,17.0710678 C18.9464316,15.195704 20,12.6521649 20,10 C20,7.3478351 18.9464316,4.80429597 17.0710678,2.92893219 C15.195704,1.0535684 12.6521649,2.22044605e-16 10,0 L10,4.4408921e-16 Z M9,15 L11,15 L11,9 L9,9 L9,15 L9,15 Z", transform: "translate(2 2)" })] }) }) }, s.CircleInformationIcon, void 0, { size: 16 }) }, 507893: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("882485"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", backgroundColor: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: [null != s ? (0, i.jsx)("circle", { r: 8, cx: 12, cy: 12, fill: s }) : null, (0, i.jsx)("path", { d: "M12 2C6.486 2 2 6.487 2 12C2 17.515 6.486 22 12 22C17.514 22 22 17.515 22 12C22 6.487 17.514 2 12 2ZM12 6.751C12.69 6.751 13.25 7.311 13.25 8.001C13.25 8.692 12.69 9.251 12 9.251C11.31 9.251 10.75 8.691 10.75 8C10.75 7.31 11.31 6.751 12 6.751ZM15 17H9V15H11V12H10V10H12C12.553 10 13 10.448 13 11V15H15V17Z", fill: r })] }) }, s.CircleInformationIcon, void 0, { size: 24 }) }, 41542: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("882485"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: (0, i.jsx)("path", { fill: r, className: s, d: "M6 1C3.243 1 1 3.244 1 6c0 2.758 2.243 5 5 5s5-2.242 5-5c0-2.756-2.243-5-5-5zm0 2.376a.625.625 0 110 1.25.625.625 0 010-1.25zM7.5 8.5h-3v-1h1V6H5V5h1a.5.5 0 01.5.5v2h1v1z" }) }) }, s.CircleInformationIcon, {}, { size: 16 }) }, 672108: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("210681"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 20, height: n = 20, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { viewBox: "0 0 20 20", ...(0, a.default)(o), width: t, height: n, children: [(0, i.jsx)("path", { fill: r, className: s, d: "M12.9297 3.25007C12.7343 3.05261 12.4154 3.05226 12.2196 3.24928L11.5746 3.89824C11.3811 4.09297 11.3808 4.40733 11.5739 4.60245L16.5685 9.64824C16.7614 9.84309 16.7614 10.1569 16.5685 10.3517L11.5739 15.3975C11.3808 15.5927 11.3811 15.907 11.5746 16.1017L12.2196 16.7507C12.4154 16.9477 12.7343 16.9474 12.9297 16.7499L19.2604 10.3517C19.4532 10.1568 19.4532 9.84314 19.2604 9.64832L12.9297 3.25007Z" }), (0, i.jsx)("path", { fill: r, className: s, d: "M8.42616 4.60245C8.6193 4.40733 8.61898 4.09297 8.42545 3.89824L7.78047 3.24928C7.58466 3.05226 7.26578 3.05261 7.07041 3.25007L0.739669 9.64832C0.5469 9.84314 0.546901 10.1568 0.739669 10.3517L7.07041 16.7499C7.26578 16.9474 7.58465 16.9477 7.78047 16.7507L8.42545 16.1017C8.61898 15.907 8.6193 15.5927 8.42616 15.3975L3.43155 10.3517C3.23869 10.1569 3.23869 9.84309 3.43155 9.64824L8.42616 4.60245Z" })] }) }, s.AngleBracketsIcon, void 0, { size: 20 }) }, 115102: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("899663"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { width: t, height: n, ...(0, a.default)(o), viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "m2 2c-1.1046 0-2 0.89543-2 2v16c0 1.1046 0.89543 2 2 2h20c1.1046 0 2-0.8954 2-2v-16c0-1.1046-0.8954-2-2-2h-20zm2.4846 13.931c0.55833 0.375 1.2 0.5625 1.925 0.5625 0.96667 0 1.6958-0.3333 2.1875-1l0.2375 0.825h1.475v-4.9h-3.7625v1.625h1.9875v1.075c-0.15833 0.225-0.38333 0.4042-0.675 0.5375-0.28333 0.125-0.59583 0.1875-0.9375 0.1875-0.76667 0-1.3542-0.2458-1.7625-0.7375-0.40833-0.4916-0.6125-1.1916-0.6125-2.1 0-0.9 0.20417-1.5958 0.6125-2.0874 0.40833-0.5 0.99583-0.75 1.7625-0.75 0.84167 0 1.475 0.39166 1.9 1.175l1.4125-1.0124c-0.30003-0.575-0.74586-1.0208-1.3375-1.3375-0.58333-0.31667-1.2458-0.475-1.9875-0.475-0.875 0-1.6292 0.19166-2.2625 0.575-0.625 0.38333-1.1042 0.9125-1.4375 1.5875-0.325 0.67495-0.4875 1.45-0.4875 2.325 0 0.8834 0.15417 1.6667 0.4625 2.35 0.30833 0.675 0.74167 1.2 1.3 1.575zm7.4509 0.3875h1.825v-8.625h-1.825v8.625zm3.5767 0h1.825v-3.275h3.2v-1.65h-3.2v-2.05h3.9375v-1.65h-5.7625v8.625z", clipRule: "evenodd", fillRule: "evenodd", fill: r, className: s }) }) }, s.GifIcon, void 0, { size: 24 }) }, 979232: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("99259"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { viewBox: "0 0 24 24", ...(0, a.default)(o), width: t, height: n, children: (0, i.jsx)("path", { fill: r, className: s, d: "M21 4V2H11V4H14.461L7.351 20H3V22H13V20H9.539L16.649 4H21Z" }) }) }, s.ItalicIcon, void 0, { size: 24 }) }, 441957: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("423984"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M10 5V3H5.375C4.06519 3 3 4.06519 3 5.375V18.625C3 19.936 4.06519 21 5.375 21H18.625C19.936 21 21 19.936 21 18.625V14H19V19H5V5H10Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M21 2.99902H14V4.99902H17.586L9.29297 13.292L10.707 14.706L19 6.41302V9.99902H21V2.99902Z" })] }) }, s.WindowLaunchIcon, void 0, { size: 24 }) }, 292937: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("605260"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("polygon", { className: s, fill: r, fillRule: "nonzero", points: "18.35 4.35 16 2 6 12 16 22 18.35 19.65 10.717 12" }), (0, i.jsx)("polygon", { points: "0 0 24 0 24 24 0 24" })] }) }) }, s.ChevronSmallLeftIcon, void 0, { size: 24 }) }, 757698: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("117447"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24zm2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z" }), (0, i.jsx)("rect", { width: "24", height: "24" })] }) }) }, s.LinkIcon, void 0, { size: 24 }) }, 393112: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("486512"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { d: "M17 15.54V17.44C18.828 17.807 20 18.368 20 19C20 20.106 16.419 21 12 21C7.581 21 4 20.106 4 19C4 18.368 5.173 17.807 7 17.44V15.54C4.014 16.231 2 17.52 2 19C2 21.21 6.477 23 12 23C17.523 23 22 21.21 22 19C22 17.52 19.986 16.231 17 15.54Z", fill: r }), (0, i.jsx)("path", { d: "M18 9C18 5.687 15.314 3 12 3C8.686 3 6 5.687 6 9C6 13 12 20 12 20C12 20 18 13 18 9ZM10 9C10 7.896 10.896 7 12 7C13.104 7 14 7.896 14 9C14 10.104 13.104 11 12 11C10.896 11 10 10.104 10 9Z", fill: r })] }) }, s.LocationIcon, void 0, { size: 24 }) }, 630641: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("824385"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: o, ...l } = e; return (0, i.jsx)("svg", { width: t, height: n, className: s, viewBox: "0 0 24 24", ...(0, a.default)(l), children: (0, i.jsx)("path", { className: o, fill: r, d: "M17 11V7C17 4.243 14.756 2 12 2C9.242 2 7 4.243 7 7V11C5.897 11 5 11.896 5 13V20C5 21.103 5.897 22 7 22H17C18.103 22 19 21.103 19 20V13C19 11.896 18.103 11 17 11ZM12 18C11.172 18 10.5 17.328 10.5 16.5C10.5 15.672 11.172 15 12 15C12.828 15 13.5 15.672 13.5 16.5C13.5 17.328 12.828 18 12 18ZM15 11H9V7C9 5.346 10.346 4 12 4C13.654 4 15 5.346 15 7V11Z", "aria-hidden": !0 }) }) }, s.LockIcon, void 0, { size: 24 }) }, 87086: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("609873"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M18 2H7C5.897 2 5 2.898 5 4V11H12.59L10.293 8.708L11.706 7.292L16.414 11.991L11.708 16.706L10.292 15.294L12.582 13H5V20C5 21.103 5.897 22 7 22H18C19.103 22 20 21.103 20 20V4C20 2.898 19.103 2 18 2Z" }) }) }, s.DoorExitIcon, void 0, { size: 16 }) }, 908434: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("485303"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 20 20", fill: "none", children: (0, i.jsx)("path", { transform: "translate(2, 1.5)", fillRule: "evenodd", clipRule: "evenodd", d: "M3.2 0C1.43269 0 0 1.43269 0 3.2V12.8C0 14.5673 1.43269 16 3.2 16H12.8C14.5673 16 16 14.5673 16 12.8V3.2C16 1.43269 14.5673 0 12.8 0H3.2ZM6.4 4.8C6.4 3.91616 5.68256 3.2 4.8 3.2C3.91552 3.2 3.2 3.91616 3.2 4.8C3.2 5.68448 3.91552 6.4 4.8 6.4C5.68256 6.4 6.4 5.68448 6.4 4.8ZM5.6 9.6L3.2 12.8H12.8L10.4 7.2L7.2 11.2L5.6 9.6Z", className: s, fill: r }) }) }, s.ImageIcon, void 0, { size: 24 }) }, 74846: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("978091"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 20 20", fill: "none", children: [(0, i.jsxs)("g", { clipPath: "url(#clip0_1139_61304)", children: [(0, i.jsx)("path", { transform: "translate(2, 1.5)", d: "M15.2 3.27273V5.72727C15.2 6.17727 14.84 6.54545 14.4 6.54545H11.2C10.76 6.54545 10.4 6.17727 10.4 5.72727V3.27273C10.4 2.82273 10.76 2.45455 11.2 2.45455V1.63636C11.2 0.736364 11.92 0 12.8 0C13.68 0 14.4 0.736364 14.4 1.63636V2.45455C14.84 2.45455 15.2 2.82273 15.2 3.27273ZM12 2.45455H13.6V1.63636C13.6 1.18636 13.24 0.818182 12.8 0.818182C12.36 0.818182 12 1.18636 12 1.63636V2.45455Z", fill: r, className: s }), (0, i.jsx)("path", { transform: "translate(2, 1.5)", fillRule: "evenodd", clipRule: "evenodd", d: "M8.8 1.63636H3.2C1.43269 1.63636 0 3.06905 0 4.83636V14.4364C0 16.2036 1.43269 17.6364 3.2 17.6364H12.8C14.5673 17.6364 16 16.2036 16 14.4364V8.03636H10.4C9.51632 8.03636 8.8 7.32002 8.8 6.43636V1.63636ZM4.8 4.83636C5.68256 4.83636 6.4 5.55252 6.4 6.43636C6.4 7.32084 5.68256 8.03636 4.8 8.03636C3.91552 8.03636 3.2 7.32084 3.2 6.43636C3.2 5.55252 3.91552 4.83636 4.8 4.83636ZM3.2 14.4364L5.6 11.2364L7.2 12.8364L10.4 8.83636L12.8 14.4364H3.2Z", fill: r, className: s })] }), (0, i.jsx)("defs", { children: (0, i.jsx)("clipPath", { id: "clip0_1139_61304", children: (0, i.jsx)("rect", { width: t, height: n, fill: r }) }) })] }) }, s.ImageLockIcon, void 0, { size: 24 }) }, 789536: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("984986"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 20 20", fill: "none", children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M13.9071 1.4744L15.9233 5.36444C16.2053 5.90825 15.7907 6.54545 15.1551 6.54545H11.1011C10.4639 6.54545 10.0496 5.90538 10.3345 5.36137L12.3721 1.47133C12.6887 0.866872 13.5931 0.86868 13.9071 1.4744ZM12.7142 2.45455H13.5714V4.5H12.7143L12.7142 2.45455ZM12.7142 5.31726C12.7142 5.54391 12.9063 5.72727 13.1429 5.72727C13.3794 5.72727 13.5714 5.54391 13.5714 5.31726C13.5714 5.09092 13.3794 4.90723 13.1429 4.90723C12.9063 4.90723 12.7142 5.09092 12.7142 5.31726Z", fill: r, className: s, transform: "translate(1.5, 1)" }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M8.8 1.63636H3.2C1.43269 1.63636 0 3.06905 0 4.83636V14.4364C0 16.2036 1.43269 17.6364 3.2 17.6364H12.8C14.5673 17.6364 16 16.2036 16 14.4364V8.03636H10.4C9.51632 8.03636 8.8 7.32002 8.8 6.43636V1.63636ZM4.8 4.83636C5.68256 4.83636 6.4 5.55252 6.4 6.43636C6.4 7.32084 5.68256 8.03636 4.8 8.03636C3.91552 8.03636 3.2 7.32084 3.2 6.43636C3.2 5.55252 3.91552 4.83636 4.8 4.83636ZM3.2 14.4364L5.6 11.2364L7.2 12.8364L10.4 8.83636L12.8 14.4364H3.2Z", fill: r, className: s, transform: "translate(1.5, 1)" })] }) }, s.ImageWarningIcon, void 0, { size: 24 }) }, 316949: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("197500"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M3.9 8.26H2V15.2941H3.9V8.26Z", fill: r, className: s }), (0, i.jsx)("path", { d: "M19.1 4V5.12659L4.85 8.26447V18.1176C4.85 18.5496 5.1464 18.9252 5.5701 19.0315L9.3701 19.9727C9.4461 19.9906 9.524 20 9.6 20C9.89545 20 10.1776 19.8635 10.36 19.6235L12.7065 16.5242L19.1 17.9304V19.0588H21V4H19.1ZM9.2181 17.9944L6.75 17.3826V15.2113L10.6706 16.0753L9.2181 17.9944Z", fill: r, className: s })] }) }, s.AnnouncementsIcon, void 0, { size: 16 }) }, 133429: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("188577"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsxs)("svg", { width: t, height: n, viewBox: "0 0 24 24", className: s, children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", fill: r, className: a, d: "M22.545 4.87988V5.87988H23.28C23.4126 5.87988 23.52 5.98733 23.52 6.11988V10.6399C23.52 10.7724 23.4126 10.8799 23.28 10.8799H17.76C17.6275 10.8799 17.52 10.7724 17.52 10.6399V6.11988C17.52 5.98733 17.6275 5.87988 17.76 5.87988H18.52V4.87988C18.52 3.75988 19.47 2.87988 20.52 2.87988C21.57 2.87988 22.545 3.75988 22.545 4.87988ZM19.52 5.87988H21.52V4.87988C21.52 4.30845 21.0534 3.87988 20.52 3.87988C19.9867 3.87988 19.52 4.30845 19.52 4.87988V5.87988Z" }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", fill: r, className: a, d: "M4.85 8.26429L15.84 5.84426V10.5599C15.84 11.6202 16.6996 12.4799 17.76 12.4799H21V19.0586H19.1V17.9302L12.7065 16.524L10.36 19.6233C10.1776 19.8633 9.89545 19.9998 9.6 19.9998C9.524 19.9998 9.4461 19.9904 9.3701 19.9725L5.5701 19.0313C5.1464 18.925 4.85 18.5495 4.85 18.1175V8.26429ZM9.2181 17.9942L6.75 17.3824V15.2111L10.6706 16.0751L9.2181 17.9942Z" }), (0, i.jsx)("path", { d: "M3.9 8.25981H2V15.2939H3.9V8.25981Z", fill: r })] }) }, s.AnnouncementsLockIcon, void 0, { size: 16 }) }, 702066: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("914924"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", className: s, foreground: a, background: o } = e; return (0, i.jsxs)("svg", { width: t, height: n, viewBox: "0 0 24 24", className: s, children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", fill: r, className: a, d: "M20.4683 4.76211L22.8094 9.51661C23.1366 10.1813 22.6554 10.9601 21.9174 10.9601L17.2104 10.9601C16.4706 10.9601 15.9894 10.1778 16.3203 9.51286L18.6861 4.75836C19.0537 4.01957 20.1037 4.02179 20.4683 4.76211ZM19.0833 5.96007H20.0786V8.46007H19.0834L19.0833 5.96007ZM19.0833 9.45894C19.0833 9.73596 19.3063 9.96007 19.5809 9.96007C19.8556 9.96007 20.0786 9.73596 20.0786 9.45894C20.0786 9.18231 19.8556 8.9578 19.5809 8.9578C19.3063 8.9578 19.0833 9.18231 19.0833 9.45894Z" }), (0, i.jsx)("path", { className: o, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M4.85 8.26445L16.7165 5.65143L15.1067 9.30608C14.5477 10.5751 15.4771 12 16.8638 12H21V19.0588H19.1V17.9303L12.7065 16.5242L10.36 19.6235C10.1776 19.8635 9.89545 20 9.6 20C9.524 20 9.4461 19.9906 9.3701 19.9727L5.5701 19.0315C5.1464 18.9252 4.85 18.5496 4.85 18.1176V8.26445ZM9.2181 17.9943L6.75 17.3826V15.2113L10.6706 16.0753L9.2181 17.9943Z" }), (0, i.jsx)("path", { d: "M3.9 8.25998H2V15.2941H3.9V8.25998Z", fill: r })] }) }, s.AnnouncementsWarningIcon, void 0, { size: 16 }) }, 779863: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("278724"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M6.7 11H5C5 12.19 5.34 13.3 5.9 14.28L7.13 13.05C6.86 12.43 6.7 11.74 6.7 11Z", fill: r }), (0, i.jsx)("path", { d: "M9.01 11.085C9.015 11.1125 9.02 11.14 9.02 11.17L15 5.18V5C15 3.34 13.66 2 12 2C10.34 2 9 3.34 9 5V11C9 11.03 9.005 11.0575 9.01 11.085Z", fill: r }), (0, i.jsx)("path", { d: "M11.7237 16.0927L10.9632 16.8531L10.2533 17.5688C10.4978 17.633 10.747 17.6839 11 17.72V22H13V17.72C16.28 17.23 19 14.41 19 11H17.3C17.3 14 14.76 16.1 12 16.1C11.9076 16.1 11.8155 16.0975 11.7237 16.0927Z", fill: r }), (0, i.jsx)("path", { d: "M21 4.27L19.73 3L3 19.73L4.27 21L8.46 16.82L9.69 15.58L11.35 13.92L14.99 10.28L21 4.27Z", className: s, fill: r })] }) }, s.MicrophoneSlashIcon, void 0, { size: 24 }) }, 748500: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("331650"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 19, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 19 24", fill: "none", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M12.7036 11C12.7036 12.66 11.2786 14 9.5 14C7.72143 14 6.28571 12.66 6.28571 11V5C6.28571 3.34 7.72143 2 9.5 2C11.2786 2 12.7143 3.34 12.7143 5L12.7036 11ZM9.5 16.1C12.4571 16.1 15.1786 14 15.1786 11H17C17 14.42 14.0857 17.24 10.5714 17.72V22H8.42857V17.72C4.91429 17.23 2 14.41 2 11H3.82143C3.82143 14 6.54286 16.1 9.5 16.1Z", fill: r, className: s }) }) }, s.MicrophoneIcon, void 0, { size: 24 }) }, 371282: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("942264"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M16,8V3H14V8a2,2,0,0,0,2,2h5V8Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M14,16v5h2V16h5V14H16A2,2,0,0,0,14,16Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M8,8H3v2H8a2,2,0,0,0,2-2V3H8Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M8,14H3v2H8v5h2V16A2,2,0,0,0,8,14Z" })] }) }, s.FullscreenExitIcon, void 0, { size: 24 }) }, 763300: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("914924"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M20.4681 4.76205L22.8092 9.51655C23.1365 10.1812 22.6552 10.96 21.9172 10.96L17.2103 10.96C16.4705 10.96 15.9893 10.1777 16.3201 9.5128L18.686 4.75829C19.0536 4.01951 20.1036 4.02173 20.4681 4.76205ZM19.0832 5.96001H20.0785V8.46001H19.0832L19.0832 5.96001ZM19.0832 9.45888C19.0832 9.7359 19.3061 9.96001 19.5808 9.96001C19.8555 9.96001 20.0784 9.7359 20.0784 9.45888C20.0784 9.18225 19.8555 8.95774 19.5808 8.95774C19.3061 8.95774 19.0832 9.18225 19.0832 9.45888Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M16.6811 5.6591L4.84988 8.26437V18.1175C4.84988 18.5495 5.14628 18.9251 5.56998 19.0314L9.36998 19.9726C9.44598 19.9905 9.52388 19.9999 9.59988 19.9999C9.89533 19.9999 10.1775 19.8634 10.3599 19.6234L10.5599 19.3592V16.2214L9.21798 17.9943L6.74988 17.3825V15.2112L10.5599 16.0508V13.9199C10.5599 12.3294 11.8493 11.0399 13.4399 11.0399H13.92L16.6811 5.6591Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M3.89988 8.2599H1.99988V15.294H3.89988V8.2599Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M13.44 12.96C12.9098 12.96 12.48 13.3898 12.48 13.92V20.2213C12.48 20.7515 12.9098 21.1813 13.44 21.1813H14.4C14.5325 21.1813 14.64 21.2887 14.64 21.4213V23.4597C14.64 23.6677 14.8865 23.7773 15.0408 23.6378L17.4858 21.4289C17.6623 21.2695 17.8916 21.1813 18.1294 21.1813H22.56C23.0901 21.1813 23.52 20.7515 23.52 20.2213V13.92C23.52 13.3898 23.0901 12.96 22.56 12.96H13.44Z" })] }) }, s.AnnouncementsWarningIcon, void 0, { size: 24 }) }, 883877: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("768852"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M14.4 7C14.5326 7 14.64 7.10745 14.64 7.24V8.76C14.64 8.89255 14.5326 9 14.4 9H9.41045L8.35045 15H10.56V17H8.00001L7.36325 20.5874C7.32088 20.8261 7.11337 21 6.87094 21H5.88657C5.57547 21 5.3399 20.7189 5.39427 20.4126L6.00001 17H2.59511C2.28449 17 2.04905 16.7198 2.10259 16.4138L2.27759 15.4138C2.31946 15.1746 2.52722 15 2.77011 15H6.35001L7.41001 9H4.00511C3.69449 9 3.45905 8.71977 3.51259 8.41381L3.68759 7.41381C3.72946 7.17456 3.93722 7 4.18011 7H7.76001L8.39677 3.41262C8.43914 3.17391 8.64664 3 8.88907 3H9.87344C10.1845 3 10.4201 3.28107 10.3657 3.58738L9.76001 7H14.4Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M12.48 13.92C12.48 13.3898 12.9098 12.96 13.44 12.96H22.56C23.0902 12.96 23.52 13.3898 23.52 13.92V20.2213C23.52 20.7515 23.0902 21.1813 22.56 21.1813H18.1294C17.8917 21.1813 17.6623 21.2695 17.4859 21.4289L15.0409 23.6378C14.8866 23.7773 14.64 23.6677 14.64 23.4597V21.4213C14.64 21.2887 14.5326 21.1813 14.4 21.1813H13.44C12.9098 21.1813 12.48 20.7515 12.48 20.2213V13.92Z" }), (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M22.8093 8.55658L20.4681 3.80208C20.1036 3.06176 19.0536 3.05954 18.686 3.79833L16.3201 8.55283C15.9893 9.21773 16.4705 10 17.2103 10L21.9173 10C22.6553 10 23.1365 9.22122 22.8093 8.55658ZM20.0785 5.00004H19.0832L19.0833 7.50004H20.0785V5.00004ZM19.5808 9.00004C19.3061 9.00004 19.0832 8.77593 19.0832 8.49891C19.0832 8.22228 19.3061 7.99777 19.5808 7.99777C19.8555 7.99777 20.0785 8.22228 20.0785 8.49891C20.0785 8.77593 19.8555 9.00004 19.5808 9.00004Z" })] }) }, s.TextWarningIcon, void 0, { size: 24 }) }, 490504: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("434559"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 64 64", fill: "none", children: [(0, i.jsx)("rect", { width: "8", height: "8", fill: r }), (0, i.jsx)("rect", { x: "56", y: "56", width: "8", height: "8", fill: r }), (0, i.jsx)("rect", { x: "28", y: "21.6453", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "30.6667", y: "21.6453", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28", y: "18.9785", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.3335", y: "18.9785", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "30.6667", y: "18.9785", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28", y: "16.3119", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.3335", y: "16.3119", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.6667", y: "16.3119", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "30.6667", y: "16.3119", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28", y: "13.6453", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.3335", y: "13.6453", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.6667", y: "13.6453", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "30.6667", y: "13.6453", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28", y: "10.9785", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.3335", y: "10.9785", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.6667", y: "10.9785", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { opacity: "0.2", x: "30.6667", y: "10.9785", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28", y: "8.31189", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.3335", y: "8.31189", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 36 21.6453)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 36 18.9785)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.6667 18.9785)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 36 16.3119)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.6667 16.3119)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 41.3335 16.3119)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 36 13.6453)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.6667 13.6453)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 41.3335 13.6453)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 36 10.9785)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.6667 10.9785)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 41.3335 10.9785)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 36 8.31189)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.6667 8.31189)", fill: r }), (0, i.jsx)("rect", { x: "30.6667", y: "24.3119", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "30.6394", y: "47.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "30.6394", y: "45.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28.0273", y: "45.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "34.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28.0273", y: "42.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "31.6882", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28.0273", y: "39.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "29.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28.0273", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "26.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.4155", y: "45.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "14.9675", y: "34.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.4155", y: "42.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "14.9675", y: "31.6882", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.4155", y: "39.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "14.9675", y: "29.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.4155", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "14.9675", y: "26.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.8035", y: "45.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "12.3555", y: "34.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.8035", y: "42.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "12.3555", y: "31.6882", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.8035", y: "39.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "12.3555", y: "29.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.8035", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "12.3555", y: "26.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "20.1914", y: "45.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "9.74365", y: "34.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "20.1914", y: "42.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "9.74365", y: "31.6882", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "20.1914", y: "39.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "9.74365", y: "29.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "20.1914", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "9.74365", y: "26.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "45.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "7.13159", y: "34.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "42.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "7.13159", y: "31.6882", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "14.9128", y: "42.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.9128", y: "31.6882", width: "2.66667", height: "2.66667", transform: "rotate(-180 22.9128 31.6882)", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "39.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "7.13159", y: "29.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "14.9128", y: "39.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "22.9128", y: "34.3549", width: "2.66667", height: "2.66667", transform: "rotate(-180 22.9128 34.3549)", fill: r }), (0, i.jsx)("rect", { x: "12.2461", y: "39.6882", width: "2.66667", height: "2.66666", fill: r }), (0, i.jsx)("rect", { x: "25.5796", y: "34.3549", width: "2.66667", height: "2.66667", transform: "rotate(-180 25.5796 34.3549)", fill: r }), (0, i.jsx)("rect", { x: "17.5796", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "7.13159", y: "26.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "14.9128", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "22.9128", y: "37.0215", width: "2.66667", height: "2.66667", transform: "rotate(-180 22.9128 37.0215)", fill: r }), (0, i.jsx)("rect", { x: "12.2461", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "25.5796", y: "37.0215", width: "2.66667", height: "2.66667", transform: "rotate(-180 25.5796 37.0215)", fill: r }), (0, i.jsx)("rect", { x: "9.57959", y: "37.0215", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "28.2461", y: "37.0215", width: "2.66667", height: "2.66667", transform: "rotate(-180 28.2461 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 35.9727 45.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 46.4207 34.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 35.9727 42.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 46.4207 31.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66666", transform: "matrix(-1 0 0 1 35.9727 39.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 46.4207 29.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 35.9727 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 46.4207 26.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.5847 45.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 49.0327 34.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.5847 42.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 49.0327 31.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66666", transform: "matrix(-1 0 0 1 38.5847 39.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 49.0327 29.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 38.5847 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 49.0327 26.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 41.1968 45.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 51.6445 34.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 41.1968 42.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 51.6445 31.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66666", transform: "matrix(-1 0 0 1 41.1968 39.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 51.6445 29.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 41.1968 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 51.6445 26.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 43.8086 45.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 54.2566 34.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 43.8086 42.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 54.2566 31.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66666", transform: "matrix(-1 0 0 1 43.8086 39.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 54.2566 29.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 43.8086 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 54.2566 26.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 46.4207 45.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 56.8687 34.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 46.4207 42.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 56.8687 31.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 49.0874 42.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(1 0 0 -1 41.0874 31.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66666", transform: "matrix(-1 0 0 1 46.4207 39.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 56.8687 29.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66666", transform: "matrix(-1 0 0 1 49.0874 39.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(1 0 0 -1 41.0874 34.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66666", transform: "matrix(-1 0 0 1 51.7539 39.6882)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(1 0 0 -1 38.4207 34.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 46.4207 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 56.8687 26.3549)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(-1 0 0 1 49.0874 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(1 0 0 -1 41.0874 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 51.7539 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66666", height: "2.66667", transform: "matrix(1 0 0 -1 38.4207 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(-1 0 0 1 54.4207 37.0215)", fill: r }), (0, i.jsx)("rect", { width: "2.66667", height: "2.66667", transform: "matrix(1 0 0 -1 35.7539 37.0215)", fill: r }), (0, i.jsx)("rect", { x: "30.6394", y: "50.3549", width: "2.66667", height: "2.66667", fill: r }), (0, i.jsx)("rect", { x: "30.6394", y: "53.0215", width: "2.66667", height: "2.66667", fill: r })] }) }, s.NewUserLargeIcon, void 0, { size: 24 }) }, 483444: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 106, height: n = 26, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 106 26", children: [(0, i.jsx)("title", { children: "Nitro" }), (0, i.jsx)("g", { fill: "none", fillRule: "evenodd", children: (0, i.jsx)("path", { className: a, fill: s, d: "M98.8266537 8.64800265L97.5788372 17.0822416C97.2940433 19.0754982 95.0485266 20.0010292 92.981582 20.0010292 91.0571496 20.0010292 89.1680861 19.0754982 89.4175111 17.2605602L90.6652125 8.64800265C90.9501215 6.76162212 93.1956383 5.80077257 95.2624676 5.80077257 97.3294121 5.80077257 99.1115628 6.76162212 98.8266537 8.64800265M96.2496839.0038079646L96.2503751.0000115044248 82.8208233.0000115044248C82.4777342.0000115044248 82.1864887.251383186 82.1368341.59030354L81.4839511 5.04596726C81.4228909 5.46254248 81.7462794 5.83609115 82.167825 5.83609115L84.6202551 5.83609115C84.8670304 5.83609115 85.0355795 6.08734779 84.9386897 6.31398496 84.6326976 7.03036549 84.4097703 7.8080646 84.2859219 8.64800265L83.0381053 17.2605602C82.2182861 23.0258876 87.0301735 25.9085513 92.2687909 25.9085513 97.7574094 25.9085513 103.139115 23.0258876 103.958934 17.2605602L105.206059 8.64800265C106.009634 2.99656903 101.367679.115400885 96.2496839.0038079646M15.5778562 11.7941867L15.6467505 15.9747796C15.648133 16.0607177 15.5902986 16.1363018 15.5068881 16.1574699L15.5067729 16.1574699 14.0843013 11.1148504C14.0822275 11.1071425 14.0795777 11.0996646 14.0763519 11.0923018L9.66308376.775018584C9.55432753.520885841 9.30421123.355912389 9.0273667.355912389L4.02607753.355912389C3.68126035.355912389 3.38920838.6097 3.34151232.950576106L.00682030635 24.7668062C-.0513596718 25.1820009.271568009 25.5526735.691385514 25.5526735L5.67355018 25.5526735C6.01882818 25.5526735 6.31122578 25.2981956 6.3583458 24.9566292L7.6643423 15.4949301C7.66560958 15.4857265 7.66618562 15.4762929 7.66607042 15.4669743L7.59475674 10.6052044 7.73715368 10.5697708 9.23116943 15.6125053C9.23335838 15.6196381 9.23589295 15.6267708 9.23888836 15.6336735L13.3663258 25.1370186C13.4758885 25.3893106 13.7250831 25.5526735 14.0004299 25.5526735L19.39573 25.5526735C19.7405472 25.5526735 20.0325992 25.2988858 20.0802953 24.9580097L23.4156785 1.14177965C23.4738585.726584956 23.1509308.355912389 22.7311133.355912389L17.782935.355912389C17.438233.355912389 17.146181.609469912 17.0983698.950346018L15.5795843 11.7654257C15.578317 11.7749743 15.577741 11.784523 15.5778562 11.7941867M25.2200758 25.5526274L30.2035078 25.5526274C30.5483249 25.5526274 30.8403769 25.2989549 30.888073 24.9579637L34.222765 1.14184867C34.280945.726653982 33.9580173.355981416 33.5381998.355981416L28.5547678.355981416C28.2100659.355981416 27.9180139.609653982 27.8702026.950645133L24.5355106 24.7667602C24.4773306 25.1819549 24.8002583 25.5526274 25.2200758 25.5526274M37.588782.910862832L36.9357838 5.3664115C36.8748388 5.78298673 37.1982273 6.15665044 37.6197729 6.15665044L42.8344271 6.15665044C43.2536686 6.15665044 43.5763658 6.52628761 43.5192227 6.94102212L41.0626451 24.7682788C41.005502 25.1830133 41.3281993 25.5526504 41.7474408 25.5526504L46.8027624 25.5526504C47.1481556 25.5526504 47.4405532 25.2980575 47.4875581 24.9564912L49.9960944 6.75280973C50.0430992 6.41112832 50.3354968 6.15665044 50.68089 6.15665044L56.2874814 6.15665044C56.6305704 6.15665044 56.9217007 5.90539381 56.9714705 5.56635841L57.6249296 1.11080973C57.6859898.694234513 57.3626013.320570796 56.9409404.320570796L38.2727712.320570796C37.9296821.320570796 37.6384366.571827434 37.588782.910862832M72.9157339 9.14614425C72.7371616 10.6051354 71.5970645 12.0642416 69.6364568 12.0642416L66.6908218 12.0642416C66.2704283 12.0642416 65.9472702 11.6925336 66.0063718 11.2768788L66.6298768 6.8920823C66.6782642 6.55178142 66.9700857 6.29891416 67.3143268 6.29891416L70.4562761 6.29891416C72.3453396 6.29891416 73.0936148 7.61571062 72.9157339 9.14614425M71.1691824.355958407L61.6845787.355958407C61.3397615.355958407 61.0477096.609630973 60.9998983.950622124L57.6652063 24.7667372C57.6070263 25.1819319 57.929954 25.5526044 58.3497715 25.5526044L63.4034802 25.5526044C63.7487582 25.5526044 64.0411558 25.2981265 64.0882759 24.9565602L65.0696166 17.8430292C65.0932342 17.6723035 65.2393178 17.5450646 65.4120144 17.5450646L66.0616716 17.5450646C66.1795293 17.5450646 66.2893224 17.6050027 66.3528019 17.7041708L71.1792055 25.2345071C71.3062798 25.4327283 71.5256356 25.5526044 71.7613509 25.5526044L78.0034289 25.5526044C78.5625328 25.5526044 78.8902992 24.9242327 78.5697909 24.4667018L73.5050221 17.2370912C73.383593 17.0637195 73.4460357 16.8224717 73.6364743 16.729631 76.8698986 15.1516841 78.7475566 13.5351973 79.3665685 9.03926814 80.0787836 3.13174602 76.3728918.355958407 71.1691824.355958407" }) })] }) } }, 599250: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 103, height: n = 39, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 103 39", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsxs)("g", { fill: s, className: a, children: [(0, i.jsx)("path", { d: "M93.9519 0.175787H81.0164C80.8563 0.175146 80.7012 0.231811 80.5799 0.335344C80.4586 0.438877 80.3792 0.582303 80.3564 0.739196L79.7272 4.99334C79.7136 5.08695 79.7205 5.18236 79.7474 5.2731C79.7744 5.36384 79.8207 5.44778 79.8833 5.51923C79.946 5.59068 80.0234 5.64796 80.1103 5.68719C80.1973 5.72642 80.2917 5.74668 80.3873 5.7466H82.7491C82.804 5.74682 82.8579 5.76039 82.9062 5.78612C82.9545 5.81185 82.9956 5.84895 83.026 5.89414C83.0564 5.93932 83.075 5.99121 83.0803 6.04522C83.0857 6.09924 83.0775 6.15372 83.0565 6.20385C82.7507 6.91629 82.5392 7.66486 82.4273 8.43095L81.2248 16.6535C80.4347 22.1651 85.0697 24.9086 90.1172 24.9086C95.404 24.9086 100.588 22.1569 101.378 16.6535L102.58 8.43095C103.354 3.03162 98.8818 0.281936 93.9519 0.175787ZM96.4272 8.42687L95.2328 16.4779C94.9585 18.3804 92.7947 19.2643 90.8041 19.2643C88.9477 19.2643 87.1304 18.3804 87.3697 16.6473L88.5722 8.42483C88.8466 6.62437 91.0104 5.70781 93.0009 5.70781C94.9915 5.70781 96.7139 6.62641 96.4333 8.42687H96.4272Z" }), (0, i.jsx)("path", { d: "M22.1974 0.17587H17.3644C17.2005 0.176513 17.0423 0.236066 16.9194 0.343454C16.7965 0.450842 16.7171 0.598756 16.6961 0.759692L15.213 11.2256C15.212 11.2351 15.212 11.2447 15.213 11.2542L15.279 15.3001C15.2798 15.3406 15.2669 15.3801 15.2421 15.4124C15.2174 15.4446 15.1825 15.4676 15.1429 15.4777L13.7526 10.5969V10.5744L9.43527 0.582096C9.38392 0.461509 9.29788 0.35852 9.18786 0.285933C9.07784 0.213345 8.94868 0.174361 8.81645 0.173828H3.93188C3.7689 0.176072 3.61225 0.236646 3.49091 0.344348C3.36956 0.45205 3.29173 0.599594 3.27181 0.759692L0.00648965 23.8003C-0.00675491 23.8949 0.000616673 23.9912 0.0281092 24.0828C0.0556018 24.1744 0.102579 24.2591 0.165884 24.3312C0.22919 24.4033 0.307359 24.4612 0.39514 24.501C0.482921 24.5407 0.578282 24.5614 0.674817 24.5617H5.54082C5.70386 24.5612 5.86126 24.5025 5.98405 24.3964C6.10685 24.2903 6.18678 24.1438 6.20915 23.984L7.48392 14.8286C7.48494 14.8191 7.48494 14.8095 7.48392 14.8L7.41379 10.0947L7.55405 10.0621L9.01241 14.9409C9.01126 14.9476 9.01126 14.9545 9.01241 14.9613L13.043 24.1595C13.0941 24.2803 13.1801 24.3834 13.2902 24.456C13.4003 24.5287 13.5295 24.5675 13.6618 24.5678H18.9486C19.1114 24.5674 19.2685 24.509 19.3913 24.4033C19.514 24.2976 19.5941 24.1516 19.617 23.9921L22.8678 0.937289C22.8815 0.842432 22.8743 0.745785 22.8468 0.653916C22.8193 0.562046 22.7722 0.477107 22.7086 0.404871C22.645 0.332635 22.5664 0.274794 22.4782 0.235279C22.39 0.195765 22.2943 0.175503 22.1974 0.17587Z" }), (0, i.jsx)("path", { d: "M32.7504 0.175781H27.8844C27.7203 0.17599 27.5619 0.23539 27.4389 0.342858C27.3159 0.450326 27.2366 0.598492 27.2161 0.759604L23.959 23.8002C23.9458 23.8948 23.9531 23.9911 23.9806 24.0827C24.0081 24.1743 24.0551 24.259 24.1184 24.3311C24.1817 24.4032 24.2599 24.4611 24.3477 24.5009C24.4354 24.5406 24.5308 24.5613 24.6273 24.5616H29.4933C29.6563 24.5613 29.8137 24.503 29.9368 24.3973C30.0599 24.2916 30.1404 24.1456 30.1637 23.9859L33.4187 0.937201C33.4323 0.842515 33.4252 0.746043 33.3978 0.654318C33.3705 0.562593 33.3235 0.477757 33.2601 0.405555C33.1968 0.333353 33.1185 0.275472 33.0305 0.235829C32.9426 0.196186 32.847 0.175708 32.7504 0.175781Z" }), (0, i.jsx)("path", { d: "M55.5911 0.175834H37.3854C37.2235 0.17613 37.0671 0.234031 36.9448 0.338966C36.8225 0.443901 36.7424 0.588871 36.7191 0.747409L36.0817 5.04646C36.0678 5.14131 36.0747 5.238 36.1019 5.32998C36.1291 5.42195 36.176 5.50705 36.2394 5.57948C36.3028 5.65192 36.3812 5.70999 36.4694 5.74976C36.5575 5.78952 36.6532 5.81004 36.75 5.80992H41.845C41.9414 5.80989 42.0368 5.83033 42.1246 5.86985C42.2123 5.90937 42.2905 5.96706 42.3539 6.03903C42.4172 6.111 42.4642 6.19557 42.4917 6.28705C42.5192 6.37852 42.5266 6.47477 42.5133 6.5693L40.1164 23.7961C40.1032 23.8907 40.1105 23.9869 40.138 24.0784C40.1655 24.1699 40.2125 24.2545 40.2759 24.3264C40.3392 24.3984 40.4174 24.4561 40.5052 24.4956C40.593 24.5351 40.6883 24.5556 40.7848 24.5555H45.7147C45.8777 24.5551 46.0351 24.4964 46.1579 24.3902C46.2807 24.2841 46.3607 24.1377 46.383 23.9778L48.8294 6.38762C48.8509 6.22779 48.9303 6.08112 49.0529 5.97487C49.1754 5.86861 49.3328 5.81 49.4957 5.80992H54.964C55.1257 5.81012 55.2821 5.75266 55.4044 5.64806C55.5268 5.54346 55.607 5.39873 55.6303 5.24039L56.2677 0.935212C56.2811 0.839995 56.2735 0.743042 56.2455 0.650985C56.2175 0.558928 56.1698 0.473939 56.1055 0.401832C56.0413 0.329726 55.9621 0.272202 55.8733 0.233197C55.7845 0.194191 55.6882 0.174624 55.5911 0.175834Z" }), (0, i.jsx)("path", { d: "M69.4981 0.175781H60.2364C60.0723 0.17599 59.9139 0.23539 59.7909 0.342858C59.6679 0.450326 59.5887 0.598491 59.5681 0.759604L56.311 23.8002C56.2978 23.8948 56.3051 23.9911 56.3326 24.0827C56.3601 24.1743 56.4071 24.259 56.4704 24.3311C56.5337 24.4032 56.6119 24.4611 56.6997 24.5009C56.7875 24.5406 56.8828 24.5613 56.9794 24.5616H61.9155C62.0785 24.5612 62.2359 24.5025 62.3587 24.3963C62.4815 24.2902 62.5614 24.1437 62.5838 23.9839L63.5409 17.1005C63.5523 17.0206 63.5923 16.9474 63.6536 16.8942C63.7149 16.841 63.7935 16.8113 63.8751 16.8106H64.5104C64.5672 16.8108 64.6231 16.8251 64.6728 16.8522C64.7225 16.8793 64.7646 16.9184 64.7951 16.9658L69.5084 24.2534C69.5693 24.3477 69.6531 24.4253 69.7523 24.4792C69.8514 24.5331 69.9626 24.5614 70.0757 24.5616H76.1711C76.2947 24.5618 76.4159 24.5283 76.5216 24.465C76.6272 24.4016 76.7133 24.3107 76.7704 24.2022C76.8274 24.0937 76.8532 23.9718 76.845 23.8498C76.8368 23.7278 76.7949 23.6104 76.7239 23.5103L71.7733 16.5146C71.7454 16.4751 71.7265 16.43 71.7178 16.3826C71.7091 16.3351 71.7109 16.2863 71.7231 16.2396C71.7352 16.1929 71.7574 16.1493 71.7882 16.1119C71.8189 16.0744 71.8575 16.044 71.9012 16.0227C75.0593 14.4958 76.893 12.9301 77.4974 8.57997C78.1988 2.86218 74.5786 0.175781 69.4981 0.175781ZM71.204 8.68407C71.0287 10.0946 69.9169 11.5072 68.0006 11.5072H65.1251C65.0285 11.5073 64.9329 11.4868 64.845 11.4472C64.757 11.4076 64.6787 11.3497 64.6154 11.2775C64.552 11.2053 64.505 11.1204 64.4777 11.0287C64.4503 10.937 64.4432 10.8405 64.4568 10.7458L65.0653 6.50188C65.0882 6.34263 65.1684 6.1969 65.2912 6.09151C65.414 5.98611 65.5711 5.92815 65.7336 5.92827H68.8009C70.6471 5.92827 71.3773 7.20206 71.204 8.68407Z" }), (0, i.jsx)("path", { d: "M7.17861 33.4558C7.14695 33.4798 7.12131 33.5107 7.10366 33.5461C7.086 33.5815 7.07682 33.6205 7.07682 33.6599C7.07682 33.6994 7.086 33.7383 7.10366 33.7737C7.12131 33.8091 7.14695 33.84 7.17861 33.8641C8.11097 34.5683 8.07796 35.6584 7.86344 36.332C7.38901 37.9059 6.19056 38.8592 3.99993 38.8592H0.262245C0.224761 38.859 0.187761 38.8508 0.153705 38.8353C0.11965 38.8198 0.0893196 38.7973 0.0647325 38.7693C0.0401454 38.7413 0.021865 38.7085 0.0111071 38.6729C0.000349207 38.6374 -0.00263948 38.6 0.00233983 38.5632L1.31012 29.3058C1.31907 29.2439 1.35029 29.1873 1.39805 29.1464C1.4458 29.1056 1.50688 29.0831 1.57002 29.0833H5.30358C7.18892 29.0833 8.41625 30.2019 8.09447 32.0656C7.96306 32.6209 7.63894 33.1128 7.17861 33.4558ZM4.23096 36.6872C5.73675 36.6872 5.98841 34.6847 4.50943 34.6847H3.28622C3.22289 34.685 3.16179 34.7079 3.11408 34.7491C3.06637 34.7904 3.03522 34.8472 3.02632 34.9092L2.82004 36.3912C2.81506 36.428 2.81805 36.4654 2.82881 36.5009C2.83957 36.5365 2.85785 36.5693 2.88243 36.5973C2.90702 36.6253 2.93735 36.6478 2.97141 36.6633C3.00546 36.6788 3.04246 36.687 3.07995 36.6872H4.23096ZM4.76108 32.9026C5.97397 32.9026 6.26688 31.1634 5.01067 31.1634H3.78747C3.72444 31.1637 3.66359 31.1862 3.61593 31.2271C3.56826 31.2679 3.53692 31.3242 3.52756 31.3859L3.35223 32.6107C3.3469 32.6475 3.34964 32.685 3.36027 32.7207C3.37089 32.7564 3.38916 32.7894 3.41381 32.8175C3.43847 32.8456 3.46894 32.8681 3.50316 32.8834C3.53738 32.8988 3.57454 32.9068 3.61213 32.9067L4.76108 32.9026Z" }), (0, i.jsx)("path", { d: "M16.7972 38.8632H14.6602C14.6002 38.8632 14.5419 38.843 14.495 38.8059C14.4482 38.7688 14.4155 38.717 14.4023 38.659L14.1074 37.1219C14.0946 37.0638 14.062 37.0117 14.015 36.9746C13.9681 36.9374 13.9097 36.9173 13.8495 36.9178H11.6011C11.5504 36.9179 11.5007 36.9326 11.4582 36.9602C11.4157 36.9877 11.3823 37.0269 11.3619 37.0729L10.6193 38.7244C10.5991 38.7705 10.5657 38.8099 10.5232 38.8374C10.4806 38.865 10.4309 38.8796 10.38 38.8795H8.29251C8.24801 38.8795 8.20424 38.8683 8.16533 38.8469C8.12643 38.8255 8.09366 38.7947 8.07013 38.7573C8.0466 38.7199 8.03308 38.6772 8.03085 38.6333C8.02861 38.5893 8.03774 38.5455 8.05736 38.5059L12.6284 29.2485C12.6496 29.2047 12.683 29.1678 12.7246 29.1421C12.7663 29.1164 12.8145 29.103 12.8635 29.1035H14.7633C14.8232 29.1032 14.8813 29.1233 14.9279 29.1605C14.9746 29.1977 15.0068 29.2497 15.0191 29.3077L17.053 38.5651C17.0586 38.6018 17.0562 38.6392 17.0459 38.6748C17.0357 38.7105 17.0179 38.7435 16.9936 38.7718C16.9694 38.8 16.9393 38.8228 16.9054 38.8385C16.8715 38.8543 16.8346 38.8627 16.7972 38.8632ZM13.4968 34.707C13.5334 34.7069 13.5696 34.6992 13.603 34.6844C13.6364 34.6697 13.6663 34.6481 13.6908 34.6212C13.7153 34.5943 13.7338 34.5625 13.7452 34.5281C13.7565 34.4937 13.7605 34.4572 13.7567 34.4212L13.4927 31.8491H13.3957L12.4407 34.3559C12.4256 34.3952 12.4205 34.4375 12.4256 34.4792C12.4308 34.5209 12.4461 34.5607 12.4702 34.5953C12.4944 34.6298 12.5266 34.658 12.5643 34.6775C12.6019 34.6969 12.6437 34.7071 12.6861 34.707H13.4968Z" }), (0, i.jsx)("path", { d: "M19.1384 35.9359C19.1901 35.8936 19.2563 35.8728 19.3232 35.8777C19.3901 35.8826 19.4525 35.913 19.4973 35.9624C19.7378 36.2023 20.0247 36.3919 20.3408 36.5199C20.6569 36.6479 20.9957 36.7117 21.3372 36.7075C22.0056 36.7075 22.5935 36.4727 22.6904 35.9624C22.8018 35.35 21.9375 35.0928 21.1413 34.9826C19.5922 34.7335 18.1978 33.5046 18.5464 31.6552C18.9238 29.6526 20.7081 28.9484 22.5233 28.9484C23.6455 28.9484 24.6954 29.2382 25.5225 30.2834C25.5451 30.3114 25.5616 30.3436 25.5711 30.3781C25.5805 30.4127 25.5827 30.4488 25.5775 30.4842C25.5723 30.5196 25.5598 30.5536 25.5407 30.584C25.5217 30.6144 25.4965 30.6406 25.4669 30.661L24.058 31.6266C24.0095 31.6601 23.9509 31.6766 23.8918 31.6732C23.8327 31.6699 23.7765 31.647 23.7321 31.6082C23.3125 31.2544 22.7816 31.0559 22.2304 31.0469C21.6116 31.0346 21.0712 31.2673 21.0155 31.7654C20.9453 32.3309 21.4486 32.5819 22.2015 32.7453C23.9177 33.0637 25.5927 33.7128 25.1327 36.142C24.7696 38.0486 23.0947 38.9999 20.9598 38.9999C19.8459 38.9999 18.4845 38.4773 17.7006 37.4403C17.6594 37.3867 17.6406 37.3194 17.6483 37.2525C17.656 37.1855 17.6895 37.1241 17.7419 37.081L19.1384 35.9359Z" }), (0, i.jsx)("path", { d: "M28.365 38.8631H26.3951C26.3577 38.8629 26.3208 38.8548 26.2868 38.8393C26.2528 38.8238 26.2226 38.8012 26.1982 38.7732C26.1737 38.7451 26.1557 38.7122 26.1452 38.6767C26.1346 38.6411 26.132 38.6038 26.1373 38.5671L27.445 29.3097C27.4536 29.2476 27.4847 29.1908 27.5325 29.1498C27.5804 29.1089 27.6417 29.0866 27.7049 29.0872H29.6749C29.7122 29.0871 29.7491 29.095 29.783 29.1102C29.817 29.1255 29.8473 29.1479 29.8717 29.1758C29.8962 29.2037 29.9143 29.2364 29.9248 29.2719C29.9353 29.3073 29.938 29.3446 29.9327 29.3811L28.6249 38.6386C28.6169 38.701 28.5859 38.7583 28.538 38.7997C28.4902 38.8411 28.4286 38.8636 28.365 38.8631Z" }), (0, i.jsx)("path", { d: "M37.6597 36.6687C37.6947 36.686 37.7253 36.7107 37.7495 36.7411C37.7736 36.7714 37.7906 36.8068 37.7993 36.8444C37.808 36.8821 37.8081 36.9212 37.7997 36.959C37.7912 36.9967 37.7744 37.0321 37.7505 37.0627C36.5788 38.5671 35.2381 38.9999 34.0623 38.9999C32.1213 38.9999 30.337 37.8813 30.6423 35.6582L31.1167 32.29C31.4241 30.0813 33.5446 28.9484 35.5268 28.9484C36.6799 28.9484 38.0021 29.4097 38.5921 30.9489C38.6178 31.0136 38.6167 31.0858 38.5888 31.1496C38.561 31.2135 38.5088 31.2639 38.4436 31.2898L36.748 31.9308C36.6909 31.9519 36.6281 31.9526 36.5705 31.9329C36.5129 31.9131 36.4641 31.8741 36.4324 31.8226C36.1622 31.4143 35.6485 31.2265 35.1349 31.2265C34.4233 31.2408 33.7137 31.6348 33.6147 32.29L33.1403 35.6664C33.0433 36.3033 33.6559 36.7034 34.3552 36.7034C34.6326 36.7074 34.907 36.6462 35.1559 36.5249C35.4048 36.4035 35.621 36.2254 35.7868 36.0053C35.8226 35.9552 35.8752 35.9192 35.9352 35.9039C35.9953 35.8886 36.0589 35.8948 36.1147 35.9216L37.6597 36.6687Z" })] }) }) } }, 466111: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("873706"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", viewBox: s = "0 0 24 24", foreground: o, ...l } = e; return (0, i.jsx)("svg", { ...(0, a.default)(l), width: t, height: n, viewBox: s, children: (0, i.jsx)("path", { className: o, fill: r, d: "M2.98966977,9.35789159 C2.98966977,9.77582472 2.63442946,10.1240466 2.20807287,10.1240466 L1.78171628,10.1240466 C1.35535969,10.1240466 0.999948837,9.77582472 0.999948837,9.35789159 C0.999948837,8.93995846 1.35535969,8.59173658 1.78171628,8.59173658 L2.20807287,8.59173658 C2.63442946,8.59173658 2.98966977,8.93995846 2.98966977,9.35789159 Z M22.2467643,9.14892503 C24.0942527,12.9800344 22.3888264,17.5772989 18.3384388,19.3882867 C14.4302837,21.1297305 9.74036124,19.457998 7.9638186,15.6268886 C7.60857829,14.8607335 7.3954,14.0248673 7.32428372,13.189001 L5.76091938,13.189001 C5.33456279,13.189001 4.97932248,12.840612 4.97932248,12.4226788 C4.97932248,12.0047457 5.33456279,11.6565238 5.76091938,11.6565238 L8.03493488,11.6565238 C8.46129147,11.6565238 8.81653178,11.3083019 8.81653178,10.8903688 C8.81653178,10.4724357 8.46129147,10.1240466 8.03493488,10.1240466 L4.41090388,10.1240466 C3.98454729,10.1240466 3.62913643,9.77582472 3.62913643,9.35789159 C3.62913643,8.93995846 3.98454729,8.59173658 4.41090388,8.59173658 L9.45606667,8.59173658 C9.88242326,8.59173658 10.2376636,8.24334752 10.2376636,7.82541439 C10.2376636,7.40748126 9.88242326,7.05925937 9.45606667,7.05925937 L7.3954,7.05925937 C6.75586512,7.05925937 6.18727597,6.57161499 6.18727597,5.87517123 C6.18727597,5.24827153 6.68474884,4.69091591 7.3954,4.69091591 L15.4250589,4.69091591 C18.267493,4.8303384 20.9676946,6.43235968 22.2467643,9.14892503 Z M13.2662961,8.38056332 C11.0193969,9.3919615 10.0341721,11.9973566 11.065955,14.1998642 C12.097738,16.4023718 14.755645,17.3681317 17.0025442,16.3567335 C19.249614,15.3453354 20.2346682,12.7399402 19.2028853,10.5374326 C18.1711023,8.33492503 15.5131953,7.36916515 13.2662961,8.38056332 Z M16.8462589,9.84548582 L18.2673907,12.2138293 C18.338507,12.3530846 18.338507,12.4227958 18.2673907,12.5620512 L16.8462589,14.9303946 C16.7751426,15.0696499 16.6330806,15.0696499 16.5619643,15.0696499 L13.7906465,15.0696499 C13.6485845,15.0696499 13.5774682,14.9999387 13.5065225,14.9303946 L12.0852202,12.5620512 C12.0142744,12.4227958 12.0142744,12.3530846 12.0852202,12.2138293 L13.5065225,9.84548582 C13.5774682,9.7062305 13.7197008,9.7062305 13.7906465,9.7062305 L16.5619643,9.7062305 C16.7041969,9.63651925 16.7751426,9.7062305 16.8462589,9.84548582 Z" }) }) }, s.NitroWheelIcon, void 0, { size: 24 }) }, 783014: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("344740"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: o, ...l } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(l), className: s, width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M0 0h24v24H0z", fill: "none" }), (0, i.jsx)("path", { className: o, fill: r, d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8 0-1.85.63-3.55 1.69-4.9L16.9 18.31C15.55 19.37 13.85 20 12 20zm6.31-3.1L7.1 5.69C8.45 4.63 10.15 4 12 4c4.42 0 8 3.58 8 8 0 1.85-.63 3.55-1.69 4.9z" })] }) }, s.DenyIcon, void 0, { size: 24 }) }, 138599: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 16, height: n = 16, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: a, fill: s, transform: "translate(3.000000, 4.000000)", d: "M16 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h4v-2H2V4h14v10h-4v2h4c1.1 0 2-.9 2-2V2a2 2 0 0 0-2-2zM9 6l-4 4h3v6h2v-6h3L9 6z" }) }) } }, 621113: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("934253"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("path", { d: "M24 0v24H0V0z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M12 16c1.1045695 0 2 .8954305 2 2s-.8954305 2-2 2-2-.8954305-2-2 .8954305-2 2-2zm0-6c1.1045695 0 2 .8954305 2 2s-.8954305 2-2 2-2-.8954305-2-2 .8954305-2 2-2zm0-6c1.1045695 0 2 .8954305 2 2s-.8954305 2-2 2-2-.8954305-2-2 .8954305-2 2-2z" })] }) }) }, s.MoreVerticalIcon, void 0, { size: 24 }) }, 808268: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("202074"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M7 12.001C7 10.8964 6.10457 10.001 5 10.001C3.89543 10.001 3 10.8964 3 12.001C3 13.1055 3.89543 14.001 5 14.001C6.10457 14.001 7 13.1055 7 12.001ZM14 12.001C14 10.8964 13.1046 10.001 12 10.001C10.8954 10.001 10 10.8964 10 12.001C10 13.1055 10.8954 14.001 12 14.001C13.1046 14.001 14 13.1055 14 12.001ZM19 10.001C20.1046 10.001 21 10.8964 21 12.001C21 13.1055 20.1046 14.001 19 14.001C17.8954 14.001 17 13.1055 17 12.001C17 10.8964 17.8954 10.001 19 10.001Z" }) }) }, s.MoreHorizontalIcon, void 0, { size: 24 }) }, 665786: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 16, height: n = 16, color: s = "currentColor", ...a } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(a), width: t, height: n, viewBox: "0 0 16 16", children: [(0, i.jsx)("path", { d: "M10.5906 6.39993L9.19223 7.29993C8.99246 7.39993 8.89258 7.39993 8.69281 7.29993C8.59293 7.19993 8.39317 7.09993 8.29328 6.99993C7.89375 6.89993 7.5941 6.99993 7.29445 7.19993L6.79504 7.49993L4.29797 9.19993C3.69867 9.49993 2.99949 9.39993 2.69984 8.79993C2.30031 8.29993 2.50008 7.59993 2.99949 7.19993L5.99598 5.19993C6.79504 4.69993 7.79387 4.49993 8.69281 4.69993C9.49188 4.89993 10.0912 5.29993 10.5906 5.89993C10.7904 6.09993 10.6905 6.29993 10.5906 6.39993Z", fill: s }), (0, i.jsx)("path", { d: "M13.4871 7.79985C13.4871 8.19985 13.2874 8.59985 12.9877 8.79985L9.89135 10.7999C9.29206 11.1999 8.69276 11.3999 7.99358 11.3999C7.69393 11.3999 7.49417 11.3999 7.19452 11.2999C6.39545 11.0999 5.79616 10.6999 5.29674 10.0999C5.19686 9.89985 5.29674 9.69985 5.39663 9.59985L6.79499 8.69985C6.89487 8.59985 7.09463 8.59985 7.19452 8.69985C7.39428 8.79985 7.59405 8.89985 7.69393 8.99985C8.09346 8.99985 8.39311 8.99985 8.69276 8.79985L9.39194 8.39985L11.3896 6.99985L11.6892 6.79985C12.1887 6.49985 12.9877 6.59985 13.2874 7.09985C13.4871 7.39985 13.4871 7.59985 13.4871 7.79985Z", fill: s })] }) } }, 786048: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("596440"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 18 18", fill: "none", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M5.25 2.25226H7.5C7.9125 2.25226 8.25 2.58976 8.25 3.00226V15.0023C8.25 15.4148 7.9125 15.7523 7.5 15.7523H5.25C4.8375 15.7523 4.5 15.4148 4.5 15.0023V3.00226C4.5 2.58976 4.8375 2.25226 5.25 2.25226ZM11.25 2.25226H13.5C13.9125 2.25226 14.25 2.58976 14.25 3.00226V15.0023C14.25 15.4148 13.9125 15.7523 13.5 15.7523H11.25C10.8375 15.7523 10.5 15.4148 10.5 15.0023V3.00226C10.5 2.58976 10.8375 2.25226 11.25 2.25226Z", fill: r, className: s }) }) }, s.PauseIcon, void 0, { size: 16 }) }, 185403: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("955623"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M19.2929 9.8299L19.9409 9.18278C21.353 7.77064 21.353 5.47197 19.9409 4.05892C18.5287 2.64678 16.2292 2.64678 14.817 4.05892L14.1699 4.70694L19.2929 9.8299ZM12.8962 5.97688L5.18469 13.6906L10.3085 18.813L18.0201 11.0992L12.8962 5.97688ZM4.11851 20.9704L8.75906 19.8112L4.18692 15.239L3.02678 19.8796C2.95028 20.1856 3.04028 20.5105 3.26349 20.7337C3.48669 20.9569 3.8116 21.046 4.11851 20.9704Z", className: s, fill: r }) }) }, s.PencilIcon, void 0, { size: 16 }) }, 158010: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("298433"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M14 8.00598C14 10.211 12.206 12.006 10 12.006C7.795 12.006 6 10.211 6 8.00598C6 5.80098 7.794 4.00598 10 4.00598C12.206 4.00598 14 5.80098 14 8.00598ZM2 19.006C2 15.473 5.29 13.006 10 13.006C14.711 13.006 18 15.473 18 19.006V20.006H2V19.006Z" }), (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M14 8.00598C14 10.211 12.206 12.006 10 12.006C7.795 12.006 6 10.211 6 8.00598C6 5.80098 7.794 4.00598 10 4.00598C12.206 4.00598 14 5.80098 14 8.00598ZM2 19.006C2 15.473 5.29 13.006 10 13.006C14.711 13.006 18 15.473 18 19.006V20.006H2V19.006Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M20.0001 20.006H22.0001V19.006C22.0001 16.4433 20.2697 14.4415 17.5213 13.5352C19.0621 14.9127 20.0001 16.8059 20.0001 19.006V20.006Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M14.8834 11.9077C16.6657 11.5044 18.0001 9.9077 18.0001 8.00598C18.0001 5.96916 16.4693 4.28218 14.4971 4.0367C15.4322 5.09511 16.0001 6.48524 16.0001 8.00598C16.0001 9.44888 15.4889 10.7742 14.6378 11.8102C14.7203 11.8418 14.8022 11.8743 14.8834 11.9077Z" })] }) }, s.GroupIcon, void 0, { size: 24 }) }, 432247: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("52128"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M11.8 14a6.1 6.1 0 0 0 0 6H3v-2c0-2.7 5.3-4 8-4h.8zm-.8-2c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4zm6 1c2.2 0 4 1.8 4 4s-1.8 4-4 4-4-1.8-4-4 1.8-4 4-4zm-1 6.2l3-2.2-3-2.2v4.4z" }) }) }, s.UserPlayIcon, void 0, { size: 16 }) }, 241820: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("458890"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 20, height: n = 23, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 20 23", children: (0, i.jsx)("g", { fill: "none", fillRule: "evenodd", children: (0, i.jsx)("path", { className: s, fill: r, d: "M19.487 5.126L10.487 0.126C10.184 -0.042 9.81798 -0.042 9.51498 0.126L0.514977 5.126C0.197977 5.302 0.000976562 5.636 0.000976562 5.999C0.000976562 6.693 0.114977 22.999 10.001 22.999C19.887 22.999 20.001 6.693 20.001 5.999C20.001 5.636 19.804 5.302 19.487 5.126ZM10.001 5.999C11.382 5.999 12.501 7.118 12.501 8.499C12.501 9.88 11.382 10.999 10.001 10.999C8.61998 10.999 7.50098 9.88 7.50098 8.499C7.50098 7.118 8.61998 5.999 10.001 5.999ZM6.25098 16C6.25098 13.699 7.69998 12.25 10.001 12.25C12.302 12.25 13.751 13.699 13.751 16H6.25098Z" }) }) }) }, s.ShieldUserIcon, void 0, { size: 23 }) }, 536952: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("860738"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M17 6V6.999H7C5.896 6.999 5 7.895 5 8.999V16H3C1.895 16 1 15.104 1 14V6C1 4.896 1.895 4 3 4H15C16.104 4 17 4.896 17 6ZM7 10.999C7 9.89502 7.896 8.99902 9 8.99902H21C22.104 8.99902 23 9.89502 23 10.999V18.999C23 20.103 22.104 20.999 21 20.999H9C7.896 20.999 7 20.103 7 18.999V10.999ZM11.828 14.462L9 18.999H21L17.023 12.618L13.85 17.706L11.828 14.462Z" }) }) }, s.ImagesIcon, void 0, { size: 24 }) }, 395361: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 16, height: n = 16, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("path", { className: a, fill: s, d: "M12.7609503,7.08043507 C10.1796226,5.54647845 5.92178025,5.40543597 3.45759439,6.15380317 C3.06179846,6.27398591 2.64333918,6.05046133 2.5234242,5.65450895 C2.40350922,5.25826952 2.62670026,4.83983073 3.02268744,4.71945662 C5.85139953,3.86028398 10.5538071,4.02620506 13.52548,5.79134121 C13.8813999,6.00280925 13.9981592,6.46277616 13.7872083,6.81834866 C13.5760661,7.17449528 13.1160095,7.2919031 12.7609503,7.08043507 Z M12.7456938,9.37785148 C12.5639139,9.67256952 12.1782795,9.76502256 11.883727,9.58404861 C9.72377106,8.25738585 6.4301382,7.87299604 3.87475822,8.64810544 C3.54335063,8.74813503 3.19341953,8.56150265 3.09273996,8.2309159 C2.99292418,7.89984962 3.17979084,7.55075308 3.51062257,7.45005215 C6.42975429,6.56484307 10.0587298,6.99354129 12.5395359,8.51700243 C12.8340884,8.69826409 12.9268019,9.08380478 12.7456938,9.37785148 Z M11.7108365,11.5428368 C11.566471,11.780912 11.2582675,11.8554793 11.0223905,11.7103962 C9.13604653,10.5509855 6.76173752,10.28918 3.96555508,10.9314428 C3.69610478,10.9935661 3.42751778,10.823788 3.36603055,10.5528184 C3.30435146,10.2819451 3.47260203,10.0118436 3.74262788,9.95000969 C6.80260111,9.2465882 9.42736749,9.54929481 11.5446963,10.8504123 C11.7807651,10.995399 11.8551061,11.3055334 11.7108365,11.5428368 Z M0,7.99990447 C0,12.4185663 3.58181579,16 8,16 C12.4183753,16 16,12.4185663 16,7.99990447 C16,3.58172026 12.4183753,0 8,0 C3.58181579,0 0,3.58172026 0,7.99990447 Z" }), (0, i.jsx)("rect", { width: "16", height: "16" })] }) }) } }, 897353: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("281703"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 18 18", fill: "none", children: (0, i.jsx)("path", { className: s, d: "M6.01053 2.82974C5.01058 2.24153 3.75 2.96251 3.75 4.12264V13.8774C3.75 15.0375 5.01058 15.7585 6.01053 15.1703L14.3021 10.2929C15.288 9.71294 15.288 8.28709 14.3021 7.70711L6.01053 2.82974Z", fill: r }) }) }, s.PlayIcon, void 0, { size: 16 }) }, 964297: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("131661"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 18 18", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("path", { d: "M0 0H18V18H0z" }), (0, i.jsx)("path", { fill: r, className: s, fillRule: "nonzero", d: "M7,13 L7,5 L12,9 L7,13 Z M9,1 C4.581722,1 1,4.581722 1,9 C1,11.1217319 1.84285472,13.1565632 3.34314575,14.6568542 C4.84343678,16.1571453 6.87826808,17 9,17 C11.1217319,17 13.1565632,16.1571453 14.6568542,14.6568542 C16.1571453,13.1565632 17,11.1217319 17,9 C17,6.87826808 16.1571453,4.84343678 14.6568542,3.34314575 C13.1565632,1.84285472 11.1217319,1 9,1 Z" })] }) }) }, s.CirclePlayIcon, void 0, { size: 24 }) }, 729285: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("8386"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M20 11.1111H12.8889V4H11.1111V11.1111H4V12.8889H11.1111V20H12.8889V12.8889H20V11.1111Z" }) }) }, s.PlusSmallIcon, void 0, { size: 24 }) }, 151785: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("264539"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsx)("svg", { className: s, width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: a, fill: r, d: "M12 2.00098C6.486 2.00098 2 6.48698 2 12.001C2 17.515 6.486 22.001 12 22.001C17.514 22.001 22 17.515 22 12.001C22 6.48698 17.514 2.00098 12 2.00098ZM17 13.001H13V17.001H11V13.001H7V11.001H11V7.00098H13V11.001H17V13.001Z" }) }) }, s.CirclePlusIcon, void 0, { size: 16 }) }, 724215: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("188577"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M22.545 4.88V5.88H23.28C23.4126 5.88 23.52 5.98746 23.52 6.12001V10.64C23.52 10.7726 23.4126 10.88 23.28 10.88H17.76C17.6275 10.88 17.52 10.7726 17.52 10.64V6.12C17.52 5.98746 17.6275 5.88 17.76 5.88H18.52V4.88C18.52 3.76 19.47 2.88 20.52 2.88C21.57 2.88 22.545 3.76 22.545 4.88ZM19.52 5.88H21.52V4.88C21.52 4.30858 21.0534 3.88 20.52 3.88C19.9867 3.88 19.52 4.30858 19.52 4.88V5.88Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M15.84 5.84438L4.85 8.26441V18.1176C4.85 18.5496 5.1464 18.9251 5.5701 19.0315L9.3701 19.9726C9.4461 19.9905 9.524 19.9999 9.6 19.9999C9.89545 19.9999 10.1776 19.8635 10.36 19.6235L10.56 19.3593V16.2214L9.2181 17.9943L6.75 17.3825V15.2112L10.56 16.0509V13.92C10.56 12.3294 11.8494 11.04 13.44 11.04H15.84V5.84438Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M3.9 8.25994H2V15.2941H3.9V8.25994Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M13.44 12.96C12.9098 12.96 12.48 13.3898 12.48 13.92V20.2213C12.48 20.7515 12.9098 21.1813 13.44 21.1813H14.4C14.5326 21.1813 14.64 21.2887 14.64 21.4213V23.4597C14.64 23.6677 14.8866 23.7773 15.0409 23.6378L17.4859 21.4289C17.6623 21.2695 17.8917 21.1813 18.1294 21.1813H22.56C23.0902 21.1813 23.52 20.7515 23.52 20.2213V13.92C23.52 13.3898 23.0902 12.96 22.56 12.96H13.44Z" })] }) }, s.AnnouncementsLockIcon, void 0, { size: 24 }) }, 761529: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("646827"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M22.545 4.91992V3.91992C22.545 2.79992 21.57 1.91992 20.52 1.91992C19.47 1.91992 18.52 2.79992 18.52 3.91992V4.91992H17.76C17.6275 4.91992 17.52 5.02737 17.52 5.15992V9.67992C17.52 9.81247 17.6275 9.91992 17.76 9.91992H23.28C23.4126 9.91992 23.52 9.81247 23.52 9.67992V5.15992C23.52 5.02737 23.4126 4.91992 23.28 4.91992H22.545ZM21.52 4.91992H19.52V3.91992C19.52 3.34849 19.9867 2.91992 20.52 2.91992C21.0533 2.91992 21.52 3.34849 21.52 3.91992V4.91992Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M15.44 6.99992C15.5725 6.99992 15.68 7.10737 15.68 7.23992V8.75992C15.68 8.89247 15.5725 8.99992 15.44 8.99992H9.41045L8.35045 14.9999H10.56V16.9999H8.00001L7.36325 20.5873C7.32088 20.826 7.11337 20.9999 6.87094 20.9999H5.88657C5.57547 20.9999 5.3399 20.7189 5.39427 20.4125L6.00001 16.9999H2.59511C2.28449 16.9999 2.04905 16.7197 2.10259 16.4137L2.27759 15.4137C2.31946 15.1745 2.52722 14.9999 2.77011 14.9999H6.35001L7.41001 8.99992H4.00511C3.69449 8.99992 3.45905 8.71969 3.51259 8.41373L3.68759 7.41373C3.72946 7.17448 3.93722 6.99992 4.18011 6.99992H7.76001L8.39677 3.41254C8.43914 3.17384 8.64664 2.99992 8.88907 2.99992H9.87344C10.1845 2.99992 10.4201 3.28099 10.3657 3.58731L9.76001 6.99992H15.44Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M13.44 12.9599C12.9098 12.9599 12.48 13.3897 12.48 13.9199V20.2212C12.48 20.7514 12.9098 21.1812 13.44 21.1812H14.4C14.5326 21.1812 14.64 21.2886 14.64 21.4212V23.4597C14.64 23.6677 14.8866 23.7772 15.0409 23.6377L17.4859 21.4289C17.6623 21.2694 17.8917 21.1812 18.1294 21.1812H22.56C23.0902 21.1812 23.52 20.7514 23.52 20.2212V13.9199C23.52 13.3897 23.0902 12.9599 22.56 12.9599H13.44Z" })] }) }, s.TextLockIcon, void 0, { size: 24 }) }, 186523: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z", className: a, fill: s }) }) } }, 553826: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 24, height: n = 24, color: s = "currentColor", background: a, foreground: o, ...l } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(l), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z", className: a, fill: s }), (0, i.jsx)("circle", { cx: "12", cy: "12", r: "5", className: o, fill: s })] }) } }, 632583: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("692547"), a = n("325767"); let o = "currentColor", l = new Map([ ["url(#birthday_gradient_1)", "url(#birthday_secondary_gradient_1)"], ["url(#birthday_gradient_2)", "url(#birthday_secondary_gradient_2)"], ["url(#birthday_gradient_3)", "url(#birthday_secondary_gradient_3)"] ]), u = new Map([ ["url(#birthday_gradient_1_light)", "url(#birthday_secondary_gradient_1_light)"], ["url(#birthday_gradient_2_light)", "url(#birthday_secondary_gradient_2_light)"], ["url(#birthday_gradient_3_light)", "url(#birthday_secondary_gradient_3_light)"] ]), d = e => { let { referralsRemaining: t, fillColor: n, secondaryFillColor: r } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M27.1899 15.6966C26.7297 16.7497 26.0852 17.7137 25.2855 18.5425C24.38 19.4811 23.2941 20.2272 22.0931 20.7358C19.704 21.7967 16.9967 21.8902 14.54 20.9969C12.0833 20.1036 10.0685 18.2928 8.91879 15.9452C8.46102 14.9636 8.16829 13.9132 8.05239 12.8363H6.06478C5.8034 12.8364 5.55253 12.7334 5.36652 12.5498C5.1805 12.3661 5.07432 12.1166 5.07097 11.8553C5.07263 11.7264 5.09966 11.5992 5.1505 11.4808C5.20135 11.3624 5.27502 11.2552 5.3673 11.1653C5.45959 11.0753 5.56868 11.0045 5.68836 10.9567C5.80803 10.909 5.93594 10.8853 6.06478 10.8869H8.91879C9.04763 10.8869 9.1752 10.8616 9.29423 10.8123C9.41326 10.763 9.52141 10.6907 9.61251 10.5996C9.70361 10.5085 9.77588 10.4003 9.82518 10.2813C9.87448 10.1623 9.89986 10.0347 9.89986 9.90587C9.89986 9.77704 9.87448 9.64946 9.82518 9.53043C9.77588 9.4114 9.70361 9.30325 9.61251 9.21215C9.52141 9.12105 9.41326 9.04879 9.29423 8.99948C9.1752 8.95018 9.04763 8.9248 8.91879 8.9248H4.34473C4.21589 8.92649 4.08798 8.90278 3.9683 8.85502C3.84863 8.80727 3.73954 8.73641 3.64725 8.64649C3.55496 8.55657 3.4813 8.44935 3.43045 8.33096C3.37961 8.21257 3.35258 8.08532 3.35092 7.95648C3.35427 7.69512 3.46045 7.4456 3.64646 7.26197C3.83248 7.07834 4.08334 6.97539 4.34473 6.97541H10.779C10.9164 6.99114 11.0555 6.97766 11.1873 6.93586C11.3191 6.89405 11.4405 6.82487 11.5437 6.73283C11.6469 6.6408 11.7294 6.528 11.7859 6.40183C11.8425 6.27566 11.8717 6.13897 11.8717 6.00071C11.8717 5.86246 11.8425 5.72577 11.7859 5.5996C11.7294 5.47342 11.6469 5.36063 11.5437 5.26859C11.4405 5.17656 11.3191 5.10738 11.1873 5.06557C11.0555 5.02377 10.9164 5.01029 10.779 5.02602H8.19255C7.98262 5.04532 7.77097 5.02064 7.57112 4.95354C7.37127 4.88644 7.1876 4.7784 7.03186 4.63632C6.87611 4.49424 6.75171 4.32124 6.66659 4.12838C6.58147 3.93551 6.53751 3.72701 6.53751 3.51619C6.53751 3.30538 6.58147 3.09688 6.66659 2.90401C6.75171 2.71115 6.87611 2.53815 7.03186 2.39607C7.1876 2.25399 7.37127 2.14595 7.57112 2.07885C7.77097 2.01175 7.98262 1.98707 8.19255 2.00637H18.3855C18.7845 2.02155 19.181 2.06039 19.573 2.12223C18.4001 3.20574 17.5522 4.63592 17.192 6.25005C16.658 6.32722 16.133 6.48003 15.6334 6.70785C14.9556 7.00255 14.3439 7.43011 13.8342 7.96527C13.3245 8.50042 12.9273 9.13232 12.666 9.82361C12.4047 10.5149 12.2846 11.2515 12.3128 11.99C12.341 12.7285 12.517 13.4539 12.8303 14.1232C13.4795 15.479 14.6341 16.5265 16.0465 17.041C17.4589 17.5554 19.0167 17.496 20.3858 16.8753C21.0624 16.5792 21.673 16.1508 22.1817 15.6154C22.2111 15.5845 22.2401 15.5532 22.2687 15.5216C23.121 15.8312 24.0408 16 25 16C25.7593 16 26.4939 15.8942 27.1899 15.6966ZM20.4791 14.601L20.1568 15.1419C20.1268 15.1966 20.0825 15.242 20.0286 15.2734C19.9748 15.3049 19.9134 15.3211 19.851 15.3203H16.1943C16.132 15.3211 16.0706 15.3049 16.0167 15.2734C15.9629 15.242 15.9185 15.1966 15.8885 15.1419L14.0156 12.0203C13.9844 11.9638 13.968 11.9002 13.968 11.8356C13.968 11.771 13.9844 11.7074 14.0156 11.6508L15.8885 8.59296C15.9211 8.54156 15.9664 8.49936 16.0199 8.47036C16.0734 8.44137 16.1335 8.42656 16.1943 8.42733H17.0112C17.1461 10.991 18.488 13.2347 20.4791 14.601ZM1.54168 8.9248C1.80309 8.92824 2.05533 8.82853 2.24374 8.64728C2.43215 8.46602 2.54155 8.21783 2.54823 7.95648C2.54165 7.69616 2.43445 7.44851 2.24913 7.26557C2.06381 7.08263 1.8148 6.97862 1.55442 6.97541H0.993808C0.733423 6.97862 0.484416 7.08263 0.299097 7.26557C0.113779 7.44851 0.00657271 7.69616 0 7.95648C0.0066466 8.21561 0.114278 8.46189 0.299938 8.64279C0.485597 8.82369 0.73459 8.92489 0.993808 8.9248H1.54168Z", fill: n }), (0, i.jsx)("path", { d: "M31 8C31 11.3137 28.3137 14 25 14C21.6863 14 19 11.3137 19 8C19 4.68629 21.6863 2 25 2C28.3137 2 31 4.68629 31 8Z", fill: null != r ? r : n, mask: "url(#mask)" }), (0, i.jsxs)("mask", { id: "mask", children: [(0, i.jsx)("path", { d: "M31 8C31 11.3137 28.3137 14 25 14C21.6863 14 19 11.3137 19 8C19 4.68629 21.6863 2 25 2C28.3137 2 31 4.68629 31 8Z", fill: "white" }), (0, i.jsx)("text", { fill: "black", fontFamily: "gg sans", fontSize: "12", fontWeight: "600", letterSpacing: "0em", children: (0, i.jsx)("tspan", { x: "21.6367", y: "12.212", children: t }) })] })] }) }, _ = e => { let { fillColor: t } = e; return (0, i.jsx)(i.Fragment, { children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M3.24374 8.64728C3.05533 8.82853 2.80309 8.92824 2.54168 8.9248H1.99381C1.73459 8.92489 1.4856 8.82369 1.29994 8.64279C1.11428 8.46189 1.00665 8.21561 1 7.95648C1.00657 7.69616 1.11378 7.44851 1.2991 7.26557C1.48442 7.08263 1.73342 6.97862 1.99381 6.97541H2.55442C2.8148 6.97862 3.06381 7.08263 3.24913 7.26557C3.43445 7.44851 3.54165 7.69616 3.54823 7.95648C3.54155 8.21783 3.43215 8.46602 3.24374 8.64728ZM26.2855 18.5425C25.38 19.4811 24.2941 20.2272 23.0931 20.7358C20.704 21.7967 17.9967 21.8902 15.54 20.9969C13.0833 20.1036 11.0685 18.2928 9.91879 15.9452C9.46102 14.9636 9.16829 13.9132 9.05239 12.8363H7.06478C6.8034 12.8364 6.55253 12.7334 6.36652 12.5498C6.1805 12.3661 6.07432 12.1166 6.07097 11.8553C6.07263 11.7264 6.09966 11.5992 6.1505 11.4808C6.20135 11.3624 6.27502 11.2552 6.3673 11.1653C6.45959 11.0753 6.56868 11.0045 6.68836 10.9567C6.80803 10.909 6.93594 10.8853 7.06478 10.8869H9.91879C10.0476 10.8869 10.1752 10.8616 10.2942 10.8123C10.4133 10.763 10.5214 10.6907 10.6125 10.5996C10.7036 10.5085 10.7759 10.4003 10.8252 10.2813C10.8745 10.1623 10.8999 10.0347 10.8999 9.90587C10.8999 9.77704 10.8745 9.64946 10.8252 9.53043C10.7759 9.4114 10.7036 9.30325 10.6125 9.21215C10.5214 9.12105 10.4133 9.04879 10.2942 8.99948C10.1752 8.95018 10.0476 8.9248 9.91879 8.9248H5.34473C5.21589 8.92649 5.08798 8.90278 4.9683 8.85502C4.84863 8.80727 4.73954 8.73641 4.64725 8.64649C4.55496 8.55657 4.4813 8.44935 4.43045 8.33096C4.37961 8.21257 4.35258 8.08532 4.35092 7.95648C4.35427 7.69512 4.46045 7.4456 4.64646 7.26197C4.83248 7.07834 5.08334 6.97539 5.34473 6.97541H11.779C11.9164 6.99114 12.0555 6.97766 12.1873 6.93586C12.3191 6.89405 12.4405 6.82487 12.5437 6.73283C12.6469 6.6408 12.7294 6.528 12.7859 6.40183C12.8425 6.27566 12.8717 6.13897 12.8717 6.00071C12.8717 5.86246 12.8425 5.72577 12.7859 5.5996C12.7294 5.47342 12.6469 5.36063 12.5437 5.26859C12.4405 5.17656 12.3191 5.10738 12.1873 5.06557C12.0555 5.02377 11.9164 5.01029 11.779 5.02602H9.19255C8.98262 5.04532 8.77097 5.02064 8.57112 4.95354C8.37127 4.88644 8.1876 4.7784 8.03186 4.63632C7.87611 4.49424 7.75171 4.32124 7.66659 4.12838C7.58147 3.93551 7.53751 3.72701 7.53751 3.51619C7.53751 3.30538 7.58147 3.09688 7.66659 2.90401C7.75171 2.71115 7.87611 2.53815 8.03186 2.39607C8.1876 2.25399 8.37127 2.14595 8.57112 2.07885C8.77097 2.01175 8.98262 1.98707 9.19255 2.00637H19.3855C21.2132 2.07591 22.9875 2.64152 24.5182 3.64258C26.049 4.64363 27.2785 6.04239 28.0749 7.68891C28.6312 8.86858 28.9435 10.1485 28.993 11.4518C29.0425 12.7551 28.8282 14.055 28.363 15.2735C27.8977 16.4919 27.1911 17.6039 26.2855 18.5425ZM13.3128 11.99C13.341 12.7285 13.517 13.4539 13.8303 14.1232C14.4795 15.479 15.6341 16.5265 17.0465 17.041C18.4589 17.5554 20.0167 17.496 21.3858 16.8753C22.0624 16.5792 22.673 16.1508 23.1817 15.6154C23.6904 15.08 24.0869 14.4484 24.3481 13.7576C24.6092 13.0667 24.7296 12.3307 24.7023 11.5927C24.6749 10.8547 24.5004 10.1295 24.1889 9.45993C23.5422 8.1018 22.3878 7.05217 20.9744 6.53736C19.5611 6.02254 18.002 6.08377 16.6334 6.70785C15.9556 7.00255 15.3439 7.43011 14.8342 7.96527C14.3245 8.50042 13.9273 9.13232 13.666 9.82361C13.4047 10.5149 13.2846 11.2515 13.3128 11.99ZM17.1943 8.42733H20.851C20.9185 8.43261 20.9831 8.45698 21.0372 8.49759C21.0914 8.5382 21.1328 8.59337 21.1568 8.65667L22.9788 11.7145C23.01 11.7711 23.0264 11.8347 23.0264 11.8993C23.0264 11.9639 23.01 12.0275 22.9788 12.084L21.1568 15.1419C21.1268 15.1966 21.0825 15.242 21.0286 15.2734C20.9748 15.3049 20.9134 15.3211 20.851 15.3203H17.1943C17.132 15.3211 17.0706 15.3049 17.0167 15.2734C16.9629 15.242 16.9185 15.1966 16.8885 15.1419L15.0156 12.0203C14.9844 11.9638 14.968 11.9002 14.968 11.8356C14.968 11.771 14.9844 11.7074 15.0156 11.6508L16.8885 8.59296C16.9211 8.54156 16.9664 8.49936 17.0199 8.47036C17.0734 8.44137 17.1335 8.42656 17.1943 8.42733Z", fill: t }) }) }, c = (e, t, n, i, r) => { if (!t || i) return e ? "url(#nitro_hover)" : o; let s = n ? [...u.keys()].filter(e => e !== r) : [...l.keys()].filter(e => e !== r), a = Math.floor(Math.random() * s.length); return s[a] }; function E(e) { var t; let { width: n = 31, height: u = 22, referralsRemaining: E, isResending: I, hovered: T, shouldShowBirthdayUX: f, isLightTheme: S, ...h } = e, [A, m] = r.useState(o), N = null !== (t = l.get(A)) && void 0 !== t ? t : null; return r.useEffect(() => { T ? m(e => c(T, f, S, I, e)) : I && m(o) }, [T, f, S, I]), (0, i.jsxs)("svg", { width: n, height: u, ...(0, a.default)(h), xmlns: "http://www.w3.org/2000/svg", children: [I ? (0, i.jsx)(_, { fillColor: A }) : (0, i.jsx)(d, { referralsRemaining: E, fillColor: T ? A : o, secondaryFillColor: T ? N : null }), (0, i.jsxs)("defs", { children: [(0, i.jsxs)("linearGradient", { id: "nitro_hover", x1: "0", y1: "11.8026", x2: "27.1899", y2: "11.8026", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { stopColor: s.default.unsafe_rawColors.PREMIUM_TIER_2_PURPLE.css }), (0, i.jsx)("stop", { offset: "1", stopColor: s.default.unsafe_rawColors.PREMIUM_TIER_2_PINK.css })] }), (0, i.jsxs)("linearGradient", { id: "birthday_gradient_1", x1: "0", y1: "9.80261", x2: "27.1899", y2: "9.80261", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#FF52D2" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#5665F9" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_secondary_gradient_1", x1: "20", y1: "8", x2: "32", y2: "8", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#FF52D2" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#5665F9" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_gradient_2", x1: "9.91249", y1: "11.7943", x2: "20.7838", y2: "11.7943", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.18", "stop-color": "#A4EF00" }), (0, i.jsx)("stop", { offset: "0.24", "stop-color": "#A2EB07" }), (0, i.jsx)("stop", { offset: "0.31", "stop-color": "#9CE01B" }), (0, i.jsx)("stop", { offset: "0.41", "stop-color": "#92CE3B" }), (0, i.jsx)("stop", { offset: "0.51", "stop-color": "#83B568" }), (0, i.jsx)("stop", { offset: "0.62", "stop-color": "#7196A1" }), (0, i.jsx)("stop", { offset: "0.74", "stop-color": "#5C6FE6" }), (0, i.jsx)("stop", { offset: "0.77", "stop-color": "#5665F9" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_secondary_gradient_2", x1: "23.9334", y1: "7.99494", x2: "28.7314", y2: "7.99494", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.18", "stop-color": "#A4EF00" }), (0, i.jsx)("stop", { offset: "0.24", "stop-color": "#A2EB07" }), (0, i.jsx)("stop", { offset: "0.31", "stop-color": "#9CE01B" }), (0, i.jsx)("stop", { offset: "0.41", "stop-color": "#92CE3B" }), (0, i.jsx)("stop", { offset: "0.51", "stop-color": "#83B568" }), (0, i.jsx)("stop", { offset: "0.62", "stop-color": "#7196A1" }), (0, i.jsx)("stop", { offset: "0.74", "stop-color": "#5C6FE6" }), (0, i.jsx)("stop", { offset: "0.77", "stop-color": "#5665F9" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_gradient_3", x1: "0.01376", y1: "9.77244", x2: "27.1954", y2: "9.77244", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.21", "stop-color": "#A4EF00" }), (0, i.jsx)("stop", { offset: "0.95", "stop-color": "#FF52D2" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_secondary_gradient_3", x1: "19.0061", y1: "5.98154", x2: "31.0024", y2: "5.98154", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.21", "stop-color": "#A4EF00" }), (0, i.jsx)("stop", { offset: "0.95", "stop-color": "#FF52D2" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_gradient_1_light", x1: "6.85923", y1: "4.92266", x2: "28.1595", y2: "10.6567", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#8547C6" }), (0, i.jsx)("stop", { offset: "0.52899", "stop-color": "#B845C1" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#AB5D8A" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_secondary_gradient_1_light", x1: "22.0273", y1: "3.01307", x2: "31.7431", y2: "4.89899", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { "stop-color": "#8547C6" }), (0, i.jsx)("stop", { offset: "0.52899", "stop-color": "#B845C1" }), (0, i.jsx)("stop", { offset: "1", "stop-color": "#AB5D8A" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_gradient_2_light", x1: "8.91249", y1: "9.79433", x2: "19.7838", y2: "9.79433", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.18", "stop-color": "#9EE700" }), (0, i.jsx)("stop", { offset: "0.31", "stop-color": "#9CE01B" }), (0, i.jsx)("stop", { offset: "0.41", "stop-color": "#92CE3B" }), (0, i.jsx)("stop", { offset: "0.51", "stop-color": "#83B568" }), (0, i.jsx)("stop", { offset: "0.62", "stop-color": "#7196A1" }), (0, i.jsx)("stop", { offset: "0.74", "stop-color": "#5C6FE6" }), (0, i.jsx)("stop", { offset: "0.77", "stop-color": "#5665F9" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_secondary_gradient_2_light", x1: "22.9334", y1: "5.99494", x2: "27.7314", y2: "5.99494", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.18", "stop-color": "#9EE700" }), (0, i.jsx)("stop", { offset: "0.31", "stop-color": "#9CE01B" }), (0, i.jsx)("stop", { offset: "0.41", "stop-color": "#92CE3B" }), (0, i.jsx)("stop", { offset: "0.51", "stop-color": "#83B568" }), (0, i.jsx)("stop", { offset: "0.62", "stop-color": "#7196A1" }), (0, i.jsx)("stop", { offset: "0.74", "stop-color": "#5C6FE6" }), (0, i.jsx)("stop", { offset: "0.77", "stop-color": "#5665F9" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_gradient_3_light", x1: "0.01376", y1: "9.77244", x2: "27.1954", y2: "9.77244", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.21", "stop-color": "#9EE700" }), (0, i.jsx)("stop", { offset: "0.95", "stop-color": "#FF52D2" })] }), (0, i.jsxs)("linearGradient", { id: "birthday_secondary_gradient_3_light", x1: "19.0061", y1: "5.98154", x2: "31.0024", y2: "5.98154", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { offset: "0.21", "stop-color": "#9EE700" }), (0, i.jsx)("stop", { offset: "0.95", "stop-color": "#FF52D2" })] })] })] }) } }, 181058: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 16, height: n = 16, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: a, fill: s, d: "M12,5 L12,1 L7,6 L12,11 L12,7 C15.31,7 18,9.69 18,13 C18,16.31 15.31,19 12,19 C8.69,19 6,16.31 6,13 L4,13 C4,17.42 7.58,21 12,21 C16.42,21 20,17.42 20,13 C20,8.58 16.42,5 12,5 L12,5 Z" }) }) } }, 6074: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 16, height: n = 16, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsx)("path", { className: a, fill: s, d: "M6,7 L2,7 L2,6 L6,6 L6,7 Z M8,5 L2,5 L2,4 L8,4 L8,5 Z M8,3 L2,3 L2,2 L8,2 L8,3 Z M8.88888889,0 L1.11111111,0 C0.494444444,0 0,0.494444444 0,1.11111111 L0,8.88888889 C0,9.50253861 0.497461389,10 1.11111111,10 L8.88888889,10 C9.50253861,10 10,9.50253861 10,8.88888889 L10,1.11111111 C10,0.494444444 9.5,0 8.88888889,0 Z", transform: "translate(3 3)" }) }) } }, 692437: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("465270"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("polygon", { className: s, fill: r, fillRule: "nonzero", points: "8.47 2 6.12 4.35 13.753 12 6.12 19.65 8.47 22 18.47 12" }), (0, i.jsx)("polygon", { points: "0 0 24 0 24 24 0 24" })] }) }) }, s.ChevronSmallRightIcon, void 0, { size: 24 }) }, 912527: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("654191"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M12 2C14.761 2 17 4.238 17 7V9H7V7C7 4.238 9.238 2 12 2ZM10.5 5.5C10.5 6.329 11.172 7 12 7C12.828 7 13.5 6.329 13.5 5.5C13.5 4.671 12.828 4 12 4C11.172 4 10.5 4.671 10.5 5.5ZM23 22H17L19 19V12H17V18C17 18.553 16.552 19 16 19H14L15 22H9L10 19H8C7.448 19 7 18.553 7 18V12H5V19L7 22H1L3 19V12C3 10.896 3.897 10 5 10H19C20.103 10 21 10.896 21 12V19L23 22ZM13 14C13 14.553 13.448 15 14 15C14.552 15 15 14.553 15 14C15 13.447 14.552 13 14 13C13.448 13 13 13.447 13 14Z" }) }) }, s.RobotIcon, void 0, { size: 16 }) }, 944581: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("153832"), a = n("960259"), o = n("188522"), l = n("325767"); t.default = (0, a.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: a = "currentColor", foreground: o, ...u } = e, d = r.useRef((0, s.v4)()); return (0, i.jsxs)("svg", { ...(0, l.default)(u), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsxs)("g", { clipPath: "url(#".concat(d.current, ")"), children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4.92871 13.4149L10.5857 19.0709L18.3639 11.2927C19.7781 9.87859 22.6066 6.48376 21.1923 2.80748C17.5153 1.3932 14.1213 4.22173 12.7074 5.63625L4.92871 13.4149ZM16.064 9.93309C17.1686 9.93309 18.064 9.03766 18.064 7.93309C18.064 6.82852 17.1686 5.93309 16.064 5.93309C14.9594 5.93309 14.064 6.82852 14.064 7.93309C14.064 9.03766 14.9594 9.93309 16.064 9.93309Z", fill: a, className: o }), (0, i.jsx)("path", { d: "M3.41357 16.7844C2.34946 17.8496 2.00004 22 2.00004 22C2.00004 22 6.15125 21.6521 7.21627 20.5869C7.71243 20.0915 7.96638 19.4494 8 18.8004L5.21285 18.7866L5.19829 16C4.54947 16.0336 3.90973 16.2881 3.41357 16.7844Z", fill: a, className: o }), (0, i.jsx)("path", { d: "M9.17144 9.17151H3.51459L1.74684 10.9393L6.34302 11.9999L9.17144 9.17151Z", fill: a, className: o }), (0, i.jsx)("path", { d: "M14.8283 14.8283V20.4852L13.0606 22.2529L11.9999 17.6568L14.8283 14.8283Z", fill: a, className: o })] }), (0, i.jsx)("defs", { children: (0, i.jsx)("clipPath", { id: d.current, children: (0, i.jsx)("rect", { width: "24", height: "24", fill: o }) }) })] }) }, o.ActivitiesIcon, void 0, { size: 24 }) }, 348258: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("458890"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: o, ...l } = e; return (0, i.jsx)("svg", { ...(0, a.default)(l), className: s, width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M21.487 5.126L12.487 0.126C12.184 -0.042 11.818 -0.042 11.515 0.126L2.51498 5.126C2.19798 5.302 2.00098 5.636 2.00098 5.999C2.00098 6.693 2.11498 22.999 12.001 22.999C21.887 22.999 22.001 6.693 22.001 5.999C22.001 5.636 21.804 5.302 21.487 5.126ZM12.001 5.999C13.382 5.999 14.501 7.118 14.501 8.499C14.501 9.88 13.382 10.999 12.001 10.999C10.62 10.999 9.50098 9.88 9.50098 8.499C9.50098 7.118 10.62 5.999 12.001 5.999ZM8.25098 16C8.25098 13.699 9.69998 12.25 12.001 12.25C14.302 12.25 15.751 13.699 15.751 16H8.25098Z", fill: r, className: o }) }) }, s.ShieldUserIcon, void 0, { size: 24 }) }, 645284: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("297350"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsx)("svg", { className: s, width: t, height: n, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { className: a, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M2 4.5C2 3.397 2.897 2.5 4 2.5H20C21.103 2.5 22 3.397 22 4.5V15.5C22 16.604 21.103 17.5 20 17.5H13V19.5H17V21.5H7V19.5H11V17.5H4C2.897 17.5 2 16.604 2 15.5V4.5ZM13.2 14.3375V11.6C9.864 11.6 7.668 12.6625 6 15C6.672 11.6625 8.532 8.3375 13.2 7.6625V5L18 9.6625L13.2 14.3375Z" }) }) }, s.ScreenArrowIcon, void 0, { size: 24 }) }, 664800: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("670900"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M21.707 20.293L16.314 14.9C17.403 13.504 18 11.799 18 10C18 7.863 17.167 5.854 15.656 4.344C14.146 2.832 12.137 2 10 2C7.863 2 5.854 2.832 4.344 4.344C2.833 5.854 2 7.863 2 10C2 12.137 2.833 14.146 4.344 15.656C5.854 17.168 7.863 18 10 18C11.799 18 13.504 17.404 14.9 16.314L20.293 21.706L21.707 20.293ZM10 16C8.397 16 6.891 15.376 5.758 14.243C4.624 13.11 4 11.603 4 10C4 8.398 4.624 6.891 5.758 5.758C6.891 4.624 8.397 4 10 4C11.603 4 13.109 4.624 14.242 5.758C15.376 6.891 16 8.398 16 10C16 11.603 15.376 13.11 14.242 14.243C13.109 15.376 11.603 16 10 16Z" }) }) }, s.MagnifyingGlassIcon, void 0, { size: 24 }) }, 965645: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("735250"); function r(e) { let { width: t = 24, height: n = 24, boxColor: r, ribbonColor: s, style: a } = e; return (0, i.jsxs)("svg", { style: a, width: t, height: n, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { d: "M3 13.999V19.999C3 21.102 3.897 21.999 5 21.999H11V13.999H3Z", fill: r }), (0, i.jsx)("path", { d: "M13 13.999V21.999H19C20.104 21.999 21 21.102 21 19.999V13.999H13Z", fill: r }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M20 7.99882H16.886C17.337 7.76382 17.764 7.47682 18.121 7.12082C19.29 5.95182 19.29 4.04882 18.121 2.87682C16.986 1.74582 15.014 1.74482 13.879 2.87782C12.242 4.51482 12.022 7.59582 12.002 7.94182C12 7.96182 12.01 7.97882 12.01 7.99882H11.99C11.99 7.97882 12 7.96182 11.998 7.94082C11.979 7.59482 11.758 4.51382 10.121 2.87682C8.986 1.74582 7.012 1.74582 5.879 2.87882C4.709 4.04782 4.709 5.95082 5.879 7.12082C6.236 7.47682 6.663 7.76382 7.114 7.99882H4C2.897 7.99882 2 8.89582 2 9.99882V11.9988H22V9.99882C22 8.89582 21.104 7.99882 20 7.99882ZM7.293 4.29182C6.903 4.68182 6.903 5.31582 7.293 5.70682C7.879 6.29282 8.945 6.63882 9.825 6.82182C9.641 5.93982 9.297 4.88182 8.707 4.29182C8.519 4.10282 8.268 3.99982 8 3.99982C7.732 3.99982 7.481 4.10282 7.293 4.29182ZM15.293 4.29282C14.702 4.88282 14.359 5.94082 14.174 6.82382C15.057 6.64182 16.116 6.29782 16.707 5.70682C17.097 5.31582 17.096 4.68182 16.706 4.29082C16.519 4.10282 16.268 3.99982 16 3.99982C15.732 3.99982 15.481 4.10282 15.293 4.29282Z", fill: r }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M16.8861 7.99882C17.3371 7.76382 17.7641 7.47682 18.1211 7.12082C19.2901 5.95182 19.2901 4.04882 18.1211 2.87682C16.9861 1.74582 15.0141 1.74482 13.8791 2.87782C12.2421 4.51482 12.0221 7.59582 12.0021 7.94182C12.0001 7.96182 12.0101 7.97882 12.0101 7.99882H11.9901C11.9901 7.97882 12.0001 7.96182 11.9981 7.94082C11.9791 7.59482 11.7581 4.51382 10.1211 2.87682C8.98606 1.74582 7.01206 1.74582 5.87906 2.87882C4.70906 4.04782 4.70906 5.95082 5.87906 7.12082C6.23606 7.47682 6.66306 7.76382 7.11406 7.99882C-3.67757 7.99882 23.9877 7.99882 16.8861 7.99882ZM7.29306 4.29182C6.90306 4.68182 6.90306 5.31582 7.29306 5.70682C7.87906 6.29282 8.94506 6.63882 9.82506 6.82182C9.64106 5.93982 9.29706 4.88182 8.70706 4.29182C8.51906 4.10282 8.26806 3.99982 8.00006 3.99982C7.73206 3.99982 7.48106 4.10282 7.29306 4.29182ZM15.2931 4.29282C14.7021 4.88282 14.3591 5.94082 14.1741 6.82382C15.0571 6.64182 16.1161 6.29782 16.7071 5.70682C17.0971 5.31582 17.0961 4.68182 16.7061 4.29082C16.5191 4.10282 16.2681 3.99982 16.0001 3.99982C15.7321 3.99982 15.4811 4.10282 15.2931 4.29282Z", fill: s }), (0, i.jsx)("rect", { x: "3", y: "12", width: "18", height: "2", fill: s }), (0, i.jsx)("rect", { x: "11", y: "8", width: "2", height: "4", fill: s }), (0, i.jsx)("rect", { x: "11", y: "14", width: "2", height: "8", fill: s })] }) } n("470079") }, 242411: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("824385"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, id: "a", d: "M17 11V7C17 4.243 14.756 2 12 2C9.242 2 7 4.243 7 7V11C5.897 11 5 11.896 5 13V20C5 21.103 5.897 22 7 22H17C18.103 22 19 21.103 19 20V13C19 11.896 18.103 11 17 11ZM12 18C11.172 18 10.5 17.328 10.5 16.5C10.5 15.672 11.172 15 12 15C12.828 15 13.5 15.672 13.5 16.5C13.5 17.328 12.828 18 12 18ZM15 11H9V7C9 5.346 10.346 4 12 4C13.654 4 15 5.346 15 7V11Z" }) }) }, s.LockIcon, void 0, { size: 24 }) }, 620448: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("134741"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, className: r, fill: s = "currentColor", ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), className: r, width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsx)("path", { d: "M8.2738 8.49222L1.99997 9.09877L0.349029 14.3788C0.250591 14.691 0.347154 15.0322 0.595581 15.246C0.843069 15.4597 1.19464 15.5047 1.48903 15.3613L15.2384 8.7032C15.5075 8.57195 15.6781 8.29914 15.6781 8.00007C15.6781 7.70101 15.5074 7.4282 15.2384 7.29694L1.49839 0.634063C1.20401 0.490625 0.852453 0.535625 0.604941 0.749376C0.356493 0.963128 0.259941 1.30344 0.358389 1.61563L2.00932 6.89563L8.27093 7.50312C8.52405 7.52843 8.71718 7.74125 8.71718 7.99531C8.71718 8.24938 8.52406 8.46218 8.27093 8.4875L8.2738 8.49222Z", fill: s }) }) }, s.SendMessageIcon, void 0, { size: 16 }) }, 639740: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("359653"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 10, height: n = 10, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { d: "M4.16667 8.33333V5.83333H5.83333V8.33333H7.91667V5H9.16667L5 1.25L0.833333 5H2.08333V8.33333H4.16667Z", fill: r }) }) }, e => { let { width: t = 10, height: n = 10, ...r } = e; return (0, i.jsx)(s.HomeIcon, { width: t, height: n, ...r }) }, void 0, { size: 10 }) }, 433564: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("781511"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 10, height: n = 10, color: r = "currentColor", ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 10 10", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("g", { clipPath: "url(#clip0_1242_1450)", children: (0, i.jsx)("path", { d: "M5 0.833252C2.7 0.833252 0.833333 2.69992 0.833333 4.99992C0.833333 7.29992 2.7 9.16659 5 9.16659C7.3 9.16659 9.16667 7.29992 9.16667 4.99992C9.16667 2.69992 7.3 0.833252 5 0.833252ZM4.58333 8.30409C2.9375 8.09992 1.66667 6.69992 1.66667 4.99992C1.66667 4.74159 1.7 4.49575 1.75417 4.25409L3.75 6.24992V6.66659C3.75 7.12492 4.125 7.49992 4.58333 7.49992V8.30409ZM7.45833 7.24575C7.35 6.90825 7.04167 6.66659 6.66667 6.66659H6.25V5.41659C6.25 5.18742 6.0625 4.99992 5.83333 4.99992H3.33333V4.16659H4.16667C4.39583 4.16659 4.58333 3.97909 4.58333 3.74992V2.91659H5.41667C5.875 2.91659 6.25 2.54159 6.25 2.08325V1.91242C7.47083 2.40825 8.33333 3.60409 8.33333 4.99992C8.33333 5.86659 8 6.65409 7.45833 7.24575Z", fill: r }) }), (0, i.jsx)("defs", { children: (0, i.jsx)("clipPath", { id: "clip0_1242_1450", children: (0, i.jsx)("rect", { width: "10", height: "10", fill: "white" }) }) })] }) }, s.GlobeEarthIcon, void 0, { size: 10 }) }, 697725: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 10, height: n = 10, color: s = "currentColor", ...a } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(a), width: t, height: n, viewBox: "0 0 17 22", fill: s, xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsxs)("g", { filter: "url(#filter0_d_1296_1706)", children: [(0, i.jsx)("path", { opacity: "0.55", d: "M8.49999 3.7998L4.85999 7.4398V12.5598L8.49999 16.1998L12.14 12.5598V7.4398L8.49999 3.7998ZM10.32 11.7998L8.49999 13.6265L6.67999 11.8065V8.19314L8.49999 6.37314L10.32 8.19314V11.7998Z", fill: "white" }), (0, i.jsx)("path", { opacity: "0.8", d: "M6.67999 8.19354V11.8069L8.49999 13.6269L10.32 11.8069V8.19354L8.49999 6.37354L6.67999 8.19354Z", fill: "white" }), (0, i.jsx)("path", { d: "M8.5 3.7998V6.37314L10.32 8.19314L12.14 7.4398L8.5 3.7998Z", fill: "white" })] }), (0, i.jsx)("defs", { children: (0, i.jsxs)("filter", { id: "filter0_d_1296_1706", x: "-3.5", y: "-1", width: "24", height: "24", filterUnits: "userSpaceOnUse", "color-interpolation-filters": "sRGB", children: [(0, i.jsx)("feFlood", { "flood-opacity": "0", result: "BackgroundImageFix" }), (0, i.jsx)("feColorMatrix", { in: "SourceAlpha", type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0", result: "hardAlpha" }), (0, i.jsx)("feOffset", { dy: "1" }), (0, i.jsx)("feGaussianBlur", { stdDeviation: "2" }), (0, i.jsx)("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14 0" }), (0, i.jsx)("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_1296_1706" }), (0, i.jsx)("feBlend", { mode: "normal", in: "SourceGraphic", in2: "effect1_dropShadow_1296_1706", result: "shape" })] }) })] }) } }, 833571: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("914576"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 18, height: n = 18, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M19 6.00001C15.56 6.00001 12.826 2.43501 12.799 2.39801C12.421 1.89801 11.579 1.89801 11.201 2.39801C11.174 2.43501 8.44 6.00001 5 6.00001C4.447 6.00001 4 6.44801 4 7.00001V14C4 17.807 10.764 21.478 11.534 21.884C11.68 21.961 11.84 21.998 12 21.998C12.16 21.998 12.32 21.96 12.466 21.884C13.236 21.478 20 17.807 20 14V7.00001C20 6.44801 19.553 6.00001 19 6.00001ZM15 16L12 14L9 16L10 13L8 11H11L12 8.00001L13 11H16L14 13L15 16Z" }) }) }, s.ShieldIcon, void 0, { size: 18 }) }, 308570: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("116710"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 16 16", fill: "none", children: [(0, i.jsx)("path", { className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M7 15H9V8H12.5L15 5.5L12.5 3H9V1H7V3H1L3.5 5.5L1 8H7V15Z", fill: r }), (0, i.jsx)("path", { className: s, d: "M5 14C5 12.8954 5.89543 12 7 12H9C10.1046 12 11 12.8954 11 14V15H5V14Z", fill: r })] }) }, s.SignPostIcon, void 0, { size: 24 }) }, 377087: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("104600"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsx)("svg", { className: s, width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("rect", { width: "16", height: "16" }), (0, i.jsx)("polygon", { className: a, fill: r, points: "12 2.32 10.513 2 4 13.68 5.487 14" })] }) }) }, s.SlashIcon, void 0, { size: 16 }) }, 503705: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("467949"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), fill: "none", xmlns: "http://www.w3.org/2000/svg", width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsxs)("g", { clipPath: "url(#clip0_414_20322)", children: [(0, i.jsx)("path", { d: "M2 6.00299V18.003C2 19.107 2.895 20.003 4 20.003H5V4.00299H4C2.895 4.00299 2 4.89799 2 6.00299Z", fill: r }), (0, i.jsx)("path", { d: "M20 4.00299H7V20.003H20C21.104 20.003 22 19.107 22 18.003V6.00299C22 4.89799 21.104 4.00299 20 4.00299ZM19 14.003C19 15.107 18.104 16.003 17 16.003C15.896 16.003 15 15.107 15 14.003C15 12.899 15.896 12.003 17 12.003V9.38999L13 10.724C13 10.724 13 14.984 13 15.003C13 16.107 12.104 17.003 11 17.003C9.896 17.003 9 16.107 9 15.003C9 13.899 9.896 13.003 11 13.003V10.003C11 9.57199 11.275 9.19099 11.684 9.05399L17.684 7.05399C17.989 6.95199 18.323 7.00299 18.585 7.19199C18.846 7.37899 19 7.68199 19 8.00299C19 8.00299 19 13.983 19 14.003Z", fill: r })] }), (0, i.jsx)("defs", { children: (0, i.jsx)("clipPath", { id: "clip0_414_20322", children: (0, i.jsx)("rect", { width: "24", height: "24", fill: "white" }) }) })] }) }, s.SoundboardIcon, void 0, { size: 24 }) }, 855981: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsxs)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: [(0, i.jsx)("path", { className: a, d: "M7.00168 1.08381C7.00168 0.485238 6.51645 0 5.91788 0C5.31931 0 4.83408 0.485238 4.83408 1.08381V2.18568C4.83408 2.78425 5.31931 3.26949 5.91788 3.26949C6.51645 3.26949 7.00168 2.78425 7.00168 2.18568V1.08381Z", fill: s }), (0, i.jsx)("path", { className: a, d: "M7.00159 9.81428C7.00159 9.21571 6.51636 8.73047 5.91779 8.73047C5.31922 8.73047 4.83398 9.21571 4.83398 9.81428V10.9161C4.83398 11.5147 5.31922 12 5.91779 12C6.51636 12 7.00159 11.5147 7.00159 10.9161V9.81428Z", fill: s }), (0, i.jsx)("path", { className: a, d: "M10.9162 7.10561C11.5148 7.10561 12 6.62037 12 6.0218C12 5.42323 11.5148 4.93799 10.9162 4.93799H9.81433C9.21576 4.93799 8.73053 5.42323 8.73053 6.0218C8.73053 6.62037 9.21576 7.10561 9.81433 7.10561H10.9162Z", fill: s }), (0, i.jsx)("path", { className: a, d: "M2.18573 7.04555C2.7843 7.04555 3.26953 6.56031 3.26953 5.96174C3.26953 5.36317 2.7843 4.87793 2.18573 4.87793H1.08386C0.485292 4.87793 5.67436e-05 5.36317 5.67436e-05 5.96174C5.67436e-05 6.56031 0.485292 7.04555 1.08386 7.04555H2.18573Z", fill: s })] }) } }, 55543: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 10, height: n = 10, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 10 10", children: (0, i.jsx)("path", { className: a, d: "M4.59185 1.69642L1.32007 0.0611887C1.14437 -0.00404167 0.953613 -0.0174513 0.770466 0.0225611C0.587319 0.0625734 0.419488 0.154328 0.286908 0.286908C0.154328 0.419488 0.0625738 0.587318 0.0225614 0.770466C-0.0174511 0.953613 -0.00404127 1.14437 0.0611893 1.32007L1.69642 4.59185C1.78832 4.83513 1.78825 5.10365 1.69623 5.34698L0.122153 8.68254C0.0375916 8.84984 0.00799916 9.03955 0.0375831 9.2246C0.0671671 9.40965 0.154425 9.58061 0.286913 9.7131C0.419402 9.84559 0.59035 9.93283 0.775402 9.96242C0.960453 9.992 1.15016 9.96241 1.31746 9.87785L4.65302 8.30377C4.89635 8.21175 5.16487 8.21168 5.40815 8.30358L8.67993 9.93881C8.85563 10.004 9.04639 10.0175 9.22953 9.97744C9.41268 9.93743 9.58051 9.84567 9.71309 9.71309C9.84567 9.58051 9.93743 9.41268 9.97744 9.22953C10.0175 9.04639 10.004 8.85563 9.93881 8.67993L8.30358 5.40815C8.24152 5.292 8.20906 5.16233 8.2091 5.03061C8.20913 4.89889 8.24165 4.7692 8.30377 4.65302L9.87785 1.31746C9.96241 1.15016 9.992 0.960453 9.96242 0.775401C9.93283 0.59035 9.84559 0.419401 9.7131 0.286913C9.58061 0.154424 9.40965 0.0671663 9.2246 0.0375824C9.03955 0.00799847 8.84984 0.037591 8.68254 0.122152L5.34698 1.69623C5.2308 1.75835 5.10111 1.79087 4.96939 1.7909C4.83767 1.79094 4.708 1.75848 4.59185 1.69642Z", fill: s }) }) } }, 31698: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 23, height: n = 45, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 23 45", children: (0, i.jsx)("path", { fill: s, className: a, d: "M21.4319 21.1098C19.3401 19.7799 17.5593 18.0272 16.2075 15.9678C14.8557 13.9084 13.9638 11.5895 13.5911 9.16477L12.3366 0.720848C12.311 0.520662 12.2117 0.336692 12.0575 0.203827C11.9034 0.0709621 11.7051 -0.00155639 11.5002 2.53393e-05C11.2954 -0.00155639 11.0971 0.0709621 10.9429 0.203827C10.7888 0.336692 10.6895 0.520662 10.6639 0.720848L9.30486 9.16477C8.9519 11.5956 8.06815 13.9223 6.71457 15.9844C5.36098 18.0465 3.56973 19.7952 1.46411 21.1098L0.314098 21.8307C0.211503 21.9209 0.130281 22.0322 0.0760932 22.1568C0.0219055 22.2813 -0.00391655 22.4161 0.000480577 22.5515C-0.00393532 22.6721 0.0224444 22.7919 0.0772418 22.8998C0.132039 23.0078 0.213487 23.1004 0.314098 23.1693L1.46411 23.8902C3.57262 25.2261 5.36427 26.9937 6.71725 29.0726C8.07022 31.1516 8.95279 33.4932 9.30486 35.9382L10.6639 44.2792C10.6895 44.4793 10.7888 44.6633 10.9429 44.7962C11.0971 44.929 11.2954 45.0016 11.5002 45C11.7051 45.0016 11.9034 44.929 12.0575 44.7962C12.2117 44.6633 12.311 44.4793 12.3366 44.2792L13.5911 35.9382C13.9627 33.4993 14.8532 31.1652 16.2044 29.0889C17.5557 27.0127 19.3371 25.241 21.4319 23.8902L22.5818 23.1693C22.6957 23.1058 22.793 23.0168 22.8656 22.9095C22.9383 22.8021 22.9843 22.6795 23 22.5515C22.9849 22.4093 22.9399 22.2718 22.8679 22.1477C22.7959 22.0236 22.6985 21.9156 22.5818 21.8307L21.4319 21.1098Z" }) }) } }, 528771: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 18, height: n = 15, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 18 15", children: (0, i.jsx)("path", { fill: s, className: a, d: "M11.7943 9.86263L17.9025 7.66483C18.0325 7.55494 18.0325 7.44507 17.9025 7.44507L11.7943 5.13737L9.06497 0.0824176C9.06497 -0.0274725 8.93499 -0.0274725 8.80502 0.0824176L6.20573 5.13737H6.0758L0.0974733 7.44507C-0.0324911 7.44507 -0.0324911 7.55494 0.0974733 7.66483L6.0758 9.86263H6.20573L8.80502 14.9176C8.93499 15.0275 9.06497 15.0275 9.06497 14.9176L11.7943 9.86263Z" }) }) } }, 819758: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 14, height: n = 13, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)({ ...o }), width: t, height: n, viewBox: "0 0 ".concat(t, " ").concat(n), className: a, fill: s, xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { d: "M9.30705 8.36284L13.5731 6.46363C13.5889 6.45487 13.6022 6.44203 13.6114 6.42644C13.6206 6.41086 13.6255 6.39309 13.6255 6.375C13.6255 6.35691 13.6206 6.33914 13.6114 6.32356C13.6022 6.30797 13.5889 6.29513 13.5731 6.28637L9.30705 4.38716C9.29358 4.38716 9.28066 4.38183 9.27114 4.37233C9.26162 4.36283 9.25627 4.34995 9.25627 4.33652L7.3518 0.0569762C7.30102 -0.0189921 7.19944 -0.0189921 7.17405 0.0569762L5.26958 4.33652C5.24419 4.36184 5.24419 4.38716 5.2188 4.38716L0.927401 6.28637C0.911525 6.29513 0.898291 6.30797 0.889077 6.32356C0.879862 6.33914 0.875 6.35691 0.875 6.375C0.875 6.39309 0.879862 6.41086 0.889077 6.42644C0.898291 6.44203 0.911525 6.45487 0.927401 6.46363L5.2188 8.36284C5.24419 8.36284 5.24419 8.38816 5.26958 8.41348L7.17405 12.693C7.19944 12.769 7.30102 12.769 7.3518 12.693L9.25627 8.41348C9.25627 8.40005 9.26162 8.38717 9.27114 8.37767C9.28066 8.36817 9.29358 8.36284 9.30705 8.36284Z", fill: "currentColor" }) }) } }, 632184: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("690172"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M11.383 3.07904C11.009 2.92504 10.579 3.01004 10.293 3.29604L6 8.00204H3C2.45 8.00204 2 8.45304 2 9.00204V15.002C2 15.552 2.45 16.002 3 16.002H6L10.293 20.71C10.579 20.996 11.009 21.082 11.383 20.927C11.757 20.772 12 20.407 12 20.002V4.00204C12 3.59904 11.757 3.23204 11.383 3.07904ZM14 5.00195V7.00195C16.757 7.00195 19 9.24595 19 12.002C19 14.759 16.757 17.002 14 17.002V19.002C17.86 19.002 21 15.863 21 12.002C21 8.14295 17.86 5.00195 14 5.00195ZM14 9.00195C15.654 9.00195 17 10.349 17 12.002C17 13.657 15.654 15.002 14 15.002V13.002C14.551 13.002 15 12.553 15 12.002C15 11.451 14.551 11.002 14 11.002V9.00195Z", "aria-hidden": !0 }) }) }, s.VoiceNormalIcon, void 0, { size: 24 }) }, 414896: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("687726"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: a, background: o } = e; return (0, i.jsxs)("svg", { width: t, height: n, viewBox: "0 0 24 24", className: s, children: [(0, i.jsx)("path", { className: o, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M15 12C15 12.0007 15 12.0013 15 12.002C15 12.553 14.551 13.002 14 13.002V15.002C15.654 15.002 17 13.657 17 12.002C17 12.0013 17 12.0007 17 12H15ZM19 12C19 12.0007 19 12.0013 19 12.002C19 14.759 16.757 17.002 14 17.002V19.002C17.86 19.002 21 15.863 21 12.002C21 12.0013 21 12.0007 21 12H19ZM10.293 3.29604C10.579 3.01004 11.009 2.92504 11.383 3.07904C11.757 3.23204 12 3.59904 12 4.00204V20.002C12 20.407 11.757 20.772 11.383 20.927C11.009 21.082 10.579 20.996 10.293 20.71L6 16.002H3C2.45 16.002 2 15.552 2 15.002V9.00204C2 8.45304 2.45 8.00204 3 8.00204H6L10.293 3.29604Z" }), (0, i.jsx)("path", { className: a, fill: r, d: "M21.025 5V4C21.025 2.88 20.05 2 19 2C17.95 2 17 2.88 17 4V5C16.4477 5 16 5.44772 16 6V9C16 9.55228 16.4477 10 17 10H19H21C21.5523 10 22 9.55228 22 9V5.975C22 5.43652 21.5635 5 21.025 5ZM20 5H18V4C18 3.42857 18.4667 3 19 3C19.5333 3 20 3.42857 20 4V5Z" })] }) }, s.VoiceLockIcon, void 0, { size: 24 }) }, 82965: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("480325"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: r, className: s, d: "M19.73 9L21 10.27l-2.23 2.23L21 14.73 19.73 16l-2.23-2.23L15.27 16 14 14.73l2.23-2.23L14 10.27 15.27 9l2.23 2.23z", fillRule: "evenodd" }), (0, i.jsx)("path", { fill: r, className: s, d: "M11.38 3.08a1 1 0 0 0-1.09.22L6 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h3l4.29 4.71A1 1 0 0 0 12 20V4a1 1 0 0 0-.62-.92z" })] }) }, s.VoiceXIcon, void 0, { size: 24 }) }, 398856: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("794381"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M15 12C15 12.0007 15 12.0013 15 12.002C15 12.553 14.551 13.002 14 13.002V15.002C15.654 15.002 17 13.657 17 12.002C17 12.0013 17 12.0007 17 12H15ZM19 12C19 12.0007 19 12.0013 19 12.002C19 14.759 16.757 17.002 14 17.002V19.002C17.86 19.002 21 15.863 21 12.002C21 12.0013 21 12.0007 21 12H19ZM10.293 3.29604C10.579 3.01004 11.009 2.92504 11.383 3.07904C11.757 3.23204 12 3.59904 12 4.00204V20.002C12 20.407 11.757 20.772 11.383 20.927C11.009 21.082 10.579 20.996 10.293 20.71L6 16.002H3C2.45 16.002 2 15.552 2 15.002V9.00204C2 8.45304 2.45 8.00204 3 8.00204H6L10.293 3.29604Z" }), (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M19.8916 3.80204L22.2439 8.55654C22.5728 9.22119 22.0892 9.99999 21.3476 10L16.618 10C15.8746 10 15.3912 9.21769 15.7236 8.55279L18.1008 3.79829C18.4702 3.05951 19.5253 3.06172 19.8916 3.80204ZM18.4999 5H19.5V7.5H18.5L18.4999 5ZM18.4999 8.49887C18.4999 8.77589 18.724 9 19 9C19.276 9 19.5 8.77589 19.5 8.49887C19.5 8.22224 19.276 7.99773 19 7.99773C18.724 7.99773 18.4999 8.22224 18.4999 8.49887Z" })] }) }, s.VoiceWarningIcon, void 0, { size: 24 }) }, 326757: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("867980"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: (0, i.jsx)("path", { className: s, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M10.293 3.29604C10.579 3.01004 11.009 2.92504 11.383 3.07904C11.757 3.23204 12 3.59904 12 4.00204V20.002C12 20.407 11.757 20.772 11.383 20.927C11.009 21.082 10.579 20.996 10.293 20.71L6 16.002H3C2.45 16.002 2 15.552 2 15.002V9.00204C2 8.45304 2.45 8.00204 3 8.00204H6L10.293 3.29604ZM14 9.00195C15.654 9.00195 17 10.349 17 12.002C17 13.657 15.654 15.002 14 15.002V13.002C14.551 13.002 15 12.553 15 12.002C15 11.451 14.551 11.002 14 11.002V9.00195Z" }) }) }, s.VoiceLowIcon, void 0, { size: 24 }) }, 149111: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("418419"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { viewBox: "0 0 24 24", ...(0, a.default)(o), width: t, height: n, children: [(0, i.jsx)("path", { fill: r, className: s, d: "M9.09091 12C9.09091 13.5786 10.3935 14.8571 12 14.8571C13.6065 14.8571 14.9091 13.5786 14.9091 12C14.9091 10.4214 13.6065 9.14286 12 9.14286C10.3935 9.14286 9.09091 10.4214 9.09091 12ZM13.3402 12C13.3402 12.789 12.689 13.4286 11.8857 13.4286C11.0823 13.4286 10.4311 12.789 10.4311 12C10.4311 11.211 11.0823 10.5714 11.8857 10.5714C12.689 10.5714 13.3402 11.211 13.3402 12Z" }), (0, i.jsx)("path", { fill: r, className: s, d: "M4 2C2.89543 2 2 2.89543 2 4V20C2 21.1046 2.89543 22 4 22H20C21.1046 22 22 21.1046 22 20V4C22 2.89543 21.1046 2 20 2H4ZM4 12C4 12 7.38036 7 12 7C16.6196 7 20 12 20 12C20 12 16.6196 17 12 17C7.38036 17 4 12 4 12Z" })] }) }, s.EyeIcon, void 0, { size: 24 }) }, 192091: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("321096"); t.default = (0, r.replaceIcon)(function(e) { return (0, i.jsx)("svg", { ...e, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: (0, i.jsxs)("g", { fill: "none", fillRule: "evenodd", children: [(0, i.jsx)("rect", { width: "24", height: "24" }), (0, i.jsx)("path", { fill: "currentColor", d: "M4.95497175,5.40753824 L4.94817763,5.41433235 L9.84188351,10.4332441 L8.59855999,11.6765676 L7.92205999,12.3530676 L2.9710894,7.42150882 L2.97011881,7.42247941 L2.89344234,7.50012647 L2.84394234,7.55059706 C2.69738351,7.68453824 2.4595894,7.86506765 2.31011881,7.78353824 C1.98497175,7.60689118 1.54432469,7.24583235 1.66855999,6.91486176 C1.79279528,6.58389118 2.70320704,4.92903824 4.52305999,4.12247941 C4.52305999,4.12247941 4.75114822,4.06036176 4.89576587,4.18459706 C5.04038351,4.30883235 5.4130894,4.70095 5.30923646,4.86692059 C5.20538351,5.03289118 4.95497175,5.40753824 4.95497175,5.40753824 Z M16.6512394,10.6097941 L16.7211218,11.0368529 L16.2930923,10.9698824 L16.1649747,11.098 L16.1882688,11.1222647 C16.2300041,11.164 16.2300041,11.2309706 16.1882688,11.2736765 C16.1669159,11.2940588 16.1397394,11.3047353 16.1125629,11.3047353 C16.0853865,11.3047353 16.05821,11.2940588 16.036857,11.2736765 L16.0135629,11.2494118 L15.9524159,11.3105588 L15.9825041,11.3406471 C16.0242394,11.3823824 16.0242394,11.4503235 15.9825041,11.4920588 C15.9621218,11.5124412 15.9349453,11.5231176 15.9067982,11.5231176 C15.8796218,11.5231176 15.8524453,11.5124412 15.8320629,11.4920588 L15.8019747,11.4619706 L14.650857,12.6150294 L14.67221,12.6373529 C14.7139453,12.6790882 14.7139453,12.7470294 14.67221,12.7887647 C14.6518276,12.8091471 14.6246512,12.8198235 14.5974747,12.8198235 C14.5693276,12.8198235 14.5421512,12.8091471 14.5217688,12.7887647 L14.5004159,12.7674118 L14.4392688,12.8275882 L14.4674159,12.8557353 C14.5091512,12.8974706 14.5091512,12.9654118 14.4674159,13.0071471 C14.4470335,13.0275294 14.4188865,13.0382059 14.39171,13.0382059 C14.3645335,13.0382059 14.337357,13.0275294 14.3160041,13.0071471 L14.287857,12.979 L14.1141218,13.1537059 L13.9209747,13.1750588 L13.8006218,13.0508235 L13.8035335,13.0566471 L7.64418057,19.2179412 L7.51897469,19.3421765 L7.5180041,19.3431471 L7.58691587,19.4120588 L7.54032763,19.6886765 L7.4112394,19.8148529 L7.45297469,19.8565882 C7.49470999,19.8983235 7.49470999,19.9662647 7.45297469,20.008 C7.43259234,20.0283824 7.40541587,20.0390588 7.37726881,20.0390588 C7.35009234,20.0390588 7.32291587,20.0283824 7.30253351,20.008 L7.25982763,19.9652941 L7.19868057,20.0264412 L7.24818057,20.0749706 C7.28894528,20.1167059 7.28894528,20.1846471 7.24818057,20.2263824 C7.22682763,20.2477353 7.19965116,20.2574412 7.17247469,20.2574412 C7.14529822,20.2574412 7.11715116,20.2477353 7.09676881,20.2263824 L7.04629822,20.1759118 L5.89420999,21.3124706 L5.94565116,21.3648824 C5.98738646,21.4066176 5.98738646,21.4735882 5.94565116,21.5153235 C5.92429822,21.5366765 5.89712175,21.5473529 5.86994528,21.5473529 C5.84276881,21.5473529 5.81462175,21.5366765 5.7942394,21.5153235 L5.74182763,21.4629118 L5.67970999,21.5230882 L5.73988646,21.5832647 C5.78162175,21.625 5.78162175,21.6919706 5.73988646,21.7346765 C5.7195041,21.7550588 5.69135704,21.7657353 5.66418057,21.7657353 C5.6370041,21.7657353 5.60982763,21.7550588 5.58944528,21.7346765 L5.52829822,21.6735294 L5.39532763,21.8035882 L5.46715116,22.2355 L5.03038646,22.1646471 L4.87412175,22.318 L4.24032763,22.2073529 C4.21606293,22.1889118 3.65506293,22.0112941 3.28720999,21.6405294 C2.90770999,21.2581176 2.72329822,20.6815882 2.72329822,20.6815882 L2.60294528,20.0196471 L2.7417394,19.8779412 L2.7087394,19.3868235 L3.14841587,19.4654412 L3.23285704,19.3790588 L3.21344528,19.3586765 C3.17170999,19.3169412 3.17170999,19.249 3.21344528,19.2072647 C3.23382763,19.1868824 3.26197469,19.1762059 3.28818057,19.1762059 C3.31632763,19.1762059 3.3435041,19.1868824 3.36485704,19.2072647 L3.38329822,19.2257059 L3.44347469,19.1645588 L3.4182394,19.1402941 C3.3765041,19.0985588 3.3765041,19.0306176 3.4182394,18.9888824 C3.43959234,18.9675294 3.46676881,18.9578235 3.49394528,18.9578235 C3.52209234,18.9578235 3.54829822,18.9675294 3.56965116,18.9888824 L3.59294528,19.0121765 L4.72756293,17.8581471 L4.72076881,17.8503824 C4.6800041,17.8086471 4.6800041,17.7416765 4.72076881,17.6999412 C4.74212175,17.6785882 4.76929822,17.6679118 4.79647469,17.6679118 C4.82365116,17.6679118 4.85179822,17.6785882 4.87218057,17.6999412 L4.8780041,17.7057647 L4.93818057,17.6436471 L4.92653351,17.632 C4.88479822,17.5902647 4.88479822,17.5232941 4.92653351,17.4815588 C4.94691587,17.4602059 4.97506293,17.4495294 5.0022394,17.4495294 C5.02941587,17.4495294 5.05659234,17.4602059 5.07794528,17.4815588 L5.08765116,17.4912647 L5.2332394,17.3437353 L5.49044528,17.3068529 L5.5710041,17.3738235 L11.7720923,11.1737059 L11.86721,11.0766471 L11.8691512,11.0756765 L11.7905335,10.9951176 L11.8109159,10.8029412 L11.9603865,10.6515294 L11.9400041,10.6311471 C11.8992394,10.5894118 11.8992394,10.5224412 11.9400041,10.4807059 C11.961357,10.4593529 11.9885335,10.4486765 12.0166806,10.4486765 C12.0428865,10.4486765 12.0710335,10.4593529 12.0914159,10.4807059 L12.1117982,10.5001176 L12.1729453,10.4389706 L12.1457688,10.4127647 C12.1040335,10.3710294 12.1040335,10.3030882 12.1457688,10.2613529 C12.1671218,10.2409706 12.1942982,10.2302941 12.2214747,10.2302941 C12.2486512,10.2302941 12.2758276,10.2409706 12.2971806,10.2613529 L12.3233865,10.2875588 L13.4725629,9.13255882 L13.4560629,9.11605882 C13.4143276,9.07432353 13.4143276,9.00638235 13.4560629,8.96464706 C13.4764453,8.94426471 13.5036218,8.93358824 13.5317688,8.93358824 C13.5589453,8.93358824 13.5861218,8.94426471 13.6074747,8.96464706 L13.6230041,8.98114706 L13.6831806,8.92 L13.660857,8.89767647 C13.6191218,8.85594118 13.6191218,8.788 13.660857,8.74626471 C13.68221,8.72588235 13.7093865,8.71520588 13.7365629,8.71520588 C13.7637394,8.71520588 13.7918865,8.72588235 13.8122688,8.74626471 L13.8345923,8.76858824 L13.9607688,8.64241176 L13.8937982,8.20952941 L14.3305629,8.26970588 L14.3936512,8.20661765 L14.5644747,8.03579412 L14.0180335,7.49420588 L11.2867982,2.44714706 C11.2867982,2.44714706 11.1771218,2.18314706 11.3634747,2.05211765 C11.4440335,1.99485294 11.5139159,1.97058824 11.5857394,1.97058824 C11.6789159,1.97058824 11.7759747,2.01135294 11.9079747,2.0725 C12.1418865,2.18314706 16.5347688,4.56885294 16.5347688,4.56885294 L17.2918276,5.30941176 L17.4286806,5.17158824 L17.3995629,5.14247059 L17.3549159,4.74841176 L17.8169159,4.81732353 L17.8790335,4.73482353 L18.4924453,4.84547059 C18.4924453,4.84547059 19.6649159,5.81702941 20.0929453,6.42364706 L20.21621,7.05064706 L20.13371,7.13411765 L20.1958276,7.56894118 L19.8677688,7.53108824 L19.7144159,7.67861765 L19.9890923,7.94747059 L19.9920041,7.94455882 L21.9952982,9.96144118 C21.9952982,9.96144118 22.0719747,10.0031765 21.9952982,10.0788824 C21.9865629,10.0876176 19.3892688,12.6645294 19.3892688,12.6645294 C19.3892688,12.6645294 19.3523865,12.7052941 19.3077394,12.7052941 C19.29221,12.7052941 19.2747394,12.6994706 19.2582394,12.6849118 L16.9123276,10.3613235 L16.6512394,10.6097941 Z M17.5067159,17.5740559 L19.82351,20.05585 L17.0583041,22.6356735 L14.65901,20.0082912 L12.8799218,17.3401441 L12.4062747,16.88785 L14.2901865,15.0039382 L14.7764512,15.5047618 L17.5067159,17.5740559 Z" })] }) }) }, s.StaffBadgeIcon) }, 170039: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("873729"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 32, height: n = 32, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M14 13C14 14.1 13.1 15 12 15C10.9 15 10 14.1 10 13C10 11.9 10.9 11 12 11C13.1 11 14 11.9 14 13ZM8.5 20V19.5C8.5 17.8 9.94 16.5 12 16.5C14.06 16.5 15.5 17.8 15.5 19.5V20H8.5ZM7 13C7 10.24 9.24 8 12 8C14.76 8 17 10.24 17 13C17 13.91 16.74 14.75 16.31 15.49L17.62 16.25C18.17 15.29 18.5 14.19 18.5 13C18.5 9.42 15.58 6.5 12 6.5C8.42 6.5 5.5 9.42 5.5 13C5.5 14.18 5.82 15.29 6.38 16.25L7.69 15.49C7.26 14.75 7 13.91 7 13ZM2.5 13C2.5 7.75 6.75 3.5 12 3.5C17.25 3.5 21.5 7.75 21.5 13C21.5 14.73 21.03 16.35 20.22 17.75L21.51 18.5C22.45 16.88 23 15 23 13C23 6.93 18.07 2 12 2C5.93 2 1 6.93 1 13C1 15 1.55 16.88 2.48 18.49L3.77 17.74C2.97 16.35 2.5 14.73 2.5 13Z", fill: r }) }) }, s.StageIcon, void 0, { size: 32 }) }, 178695: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("756655"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 32, height: n = 32, color: r = "currentColor", ...s } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M22.025 2V3C22.5635 3 23 3.43652 23 3.975V7C23 7.55228 22.5523 8 22 8H18C17.4477 8 17 7.55228 17 7V4C17 3.44772 17.4477 3 18 3V2C18 0.88 18.95 0 20 0C21.05 0 22.025 0.88 22.025 2ZM19 3H21V2C21 1.42857 20.5333 1 20 1C19.4667 1 19 1.42857 19 2V3Z", fill: r }), (0, i.jsx)("path", { d: "M15 2.41495C14.0462 2.14467 13.0398 2 12 2C5.93 2 1 6.93 1 13C1 15 1.55 16.88 2.48 18.49L3.77 17.74C2.97 16.35 2.5 14.73 2.5 13C2.5 7.75 6.75 3.5 12 3.5C13.0485 3.5 14.0571 3.66952 15 3.98267V2.41495Z", fill: r }), (0, i.jsx)("path", { d: "M21.0173 10C21.3305 10.9429 21.5 11.9515 21.5 13C21.5 14.73 21.03 16.35 20.22 17.75L21.51 18.5C22.45 16.88 23 15 23 13C23 11.9602 22.8553 10.9538 22.585 10H21.0173Z", fill: r }), (0, i.jsx)("path", { d: "M14 13C14 14.1 13.1 15 12 15C10.9 15 10 14.1 10 13C10 11.9 10.9 11 12 11C13.1 11 14 11.9 14 13Z", fill: r }), (0, i.jsx)("path", { d: "M8.5 19.5V20H15.5V19.5C15.5 17.8 14.06 16.5 12 16.5C9.94 16.5 8.5 17.8 8.5 19.5Z", fill: r }), (0, i.jsx)("path", { d: "M7 13C7 10.24 9.24 8 12 8C14.76 8 17 10.24 17 13C17 13.91 16.74 14.75 16.31 15.49L17.62 16.25C18.17 15.29 18.5 14.19 18.5 13C18.5 9.42 15.58 6.5 12 6.5C8.42 6.5 5.5 9.42 5.5 13C5.5 14.18 5.82 15.29 6.38 16.25L7.69 15.49C7.26 14.75 7 13.91 7 13Z", fill: r })] }) }, s.StageLockIcon, void 0, { size: 32 }) }, 898140: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("981452"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, d: "M21.924 8.61789C21.77 8.24489 21.404 8.00089 21 8.00089H15.618L12.894 2.55389C12.555 1.87689 11.444 1.87689 11.105 2.55389L8.38199 8.00089H2.99999C2.59599 8.00089 2.22999 8.24489 2.07599 8.61789C1.92199 8.99089 2.00699 9.42289 2.29299 9.70789L6.87699 14.2919L5.03899 20.7269C4.92399 21.1299 5.07199 21.5619 5.40999 21.8089C5.74999 22.0569 6.20699 22.0659 6.55399 21.8329L12 18.2029L17.445 21.8329C17.613 21.9449 17.806 22.0009 18 22.0009C18.207 22.0009 18.414 21.9369 18.59 21.8089C18.928 21.5619 19.076 21.1299 18.961 20.7269L17.123 14.2919L21.707 9.70789C21.993 9.42289 22.078 8.99089 21.924 8.61789Z" }) }) }, s.StarIcon, void 0, { size: 24 }) }, 68736: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("960259"), o = n("783708"), l = n("325767"), u = n("79013"); t.default = (0, a.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", winking: a = !1, foreground: o, ...d } = e; return (0, i.jsxs)("svg", { width: t, height: n, ...(0, l.default)(d), viewBox: "0 0 20 20", children: [(0, i.jsx)("path", { fill: r, className: s()(o, { [u.hidden]: a }), fillRule: "evenodd", clipRule: "evenodd", d: "M12.0002 0.662583V5.40204C12.0002 6.83974 13.1605 7.99981 14.5986 7.99981H19.3393C19.9245 7.99981 20.222 7.29584 19.8055 6.8794L13.1209 0.196569C12.7043 -0.219868 12.0002 0.0676718 12.0002 0.662583ZM14.5759 10.0282C12.0336 10.0282 9.96986 7.96441 9.96986 5.42209V0.0583083H1.99397C0.897287 0.0583083 0 0.955595 0 2.05228V18.0041C0 19.1007 0.897287 19.998 1.99397 19.998H17.9457C19.0424 19.998 19.9397 19.1007 19.9397 18.0041V10.0282H14.5759ZM11.9998 12.2201C11.9998 13.3245 11.1046 14.2198 10.0002 14.2198C8.8958 14.2198 8.00052 13.3245 8.00052 12.2201H6.66742C6.66742 14.0607 8.15955 15.5529 10.0002 15.5529C11.8408 15.5529 13.3329 14.0607 13.3329 12.2201H11.9998ZM4.44559 13.331C4.44559 13.9446 3.94821 14.442 3.33467 14.442C2.72112 14.442 2.22375 13.9446 2.22375 13.331C2.22375 12.7175 2.72112 12.2201 3.33467 12.2201C3.94821 12.2201 4.44559 12.7175 4.44559 13.331ZM16.6657 14.442C17.2793 14.442 17.7766 13.9446 17.7766 13.331C17.7766 12.7175 17.2793 12.2201 16.6657 12.2201C16.0522 12.2201 15.5548 12.7175 15.5548 13.331C15.5548 13.9446 16.0522 14.442 16.6657 14.442Z" }), (0, i.jsx)("path", { fill: r, className: s()(o, { [u.hidden]: !a }), fillRule: "evenodd", clipRule: "evenodd", d: "M12.0002 0.662583V5.40204C12.0002 6.83974 13.1605 7.99981 14.5986 7.99981H19.3393C19.9245 7.99981 20.222 7.29584 19.8055 6.8794L13.1209 0.196569C12.7043 -0.219868 12.0002 0.0676718 12.0002 0.662583ZM14.5759 10.0282C12.0336 10.0282 9.96986 7.96441 9.96986 5.42209V0.0583083H1.99397C0.897287 0.0583083 0 0.955595 0 2.05228V18.0041C0 19.1007 0.897287 19.998 1.99397 19.998H17.9457C19.0424 19.998 19.9397 19.1007 19.9397 18.0041V10.0282H14.5759ZM12 13H11.2H8.8H8C8 14.1046 8.89543 15 10 15C11.1046 15 12 14.1046 12 13ZM17.7766 13.331C17.7766 13.9446 17.2793 14.442 16.6657 14.442C16.0522 14.442 15.5548 13.9446 15.5548 13.331C15.5548 12.7175 16.0522 12.2201 16.6657 12.2201C17.2793 12.2201 17.7766 12.7175 17.7766 13.331ZM2 12.2361L2.53532 11L5.62492 12.7835C5.79161 12.8797 5.79161 13.1203 5.62492 13.2165L2.53532 15L2 13.7639L3.32339 13L2 12.2361Z" })] }) }, o.StickerIcon, { winking: "remove" }, { size: 24 }) }, 641749: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("164776"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 20, height: n = 20, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { width: t, height: n, ...(0, a.default)(s), viewBox: "0 0 20 20", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M12 .663v4.739A2.594 2.594 0 0014.6 8h4.74a.656.656 0 00.466-1.12L13.121.196A.654.654 0 0012 .663zm2.576 9.365A4.608 4.608 0 019.97 5.422V.058H1.994A2 2 0 000 2.052v15.952a2 2 0 001.994 1.994h15.952a2 2 0 001.994-1.994v-7.976h-5.364zM8 15.553a2 2 0 113.999 0h1.333a3.333 3.333 0 10-6.666 0h1.334zM2.716 13.5L2 12.784 2.784 12l.716.716.716-.716.784.784-.716.716.716.716-.784.784-.716-.716-.716.716L2 14.216l.716-.716zM15 12.784l.716.716-.716.716.784.784.716-.716.716.716.784-.784-.716-.716.716-.716-.784-.784-.716.716-.716-.716-.784.784z", fill: r }) }) }, s.StickerSadIcon, void 0, { size: 20 }) }, 836879: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("367802"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { width: t, height: n, ...(0, a.default)(s), viewBox: "0 0 16 16", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9.20038 2.39762V5.24178C9.20038 6.10455 9.89673 6.80072 10.7597 6.80072H13.6046C13.9558 6.80072 14.1343 6.37826 13.8844 6.12835L9.87292 2.11796C9.62295 1.86806 9.20038 2.04061 9.20038 2.39762ZM10.7461 8.01794C9.22044 8.01794 7.98197 6.77947 7.98197 5.25382V2.03499H3.19561C2.53749 2.03499 1.99902 2.57346 1.99902 3.23158V12.8043C1.99902 13.4624 2.53749 14.0009 3.19561 14.0009H12.7683C13.4265 14.0009 13.9649 13.4624 13.9649 12.8043V8.01794H10.7461ZM9.80015 9C9.80015 9.99411 8.99427 10.8 8.00015 10.8C7.00604 10.8 6.20015 9.99411 6.20015 9H5.00015C5.00015 10.6569 6.3433 12 8.00015 12C9.65701 12 11.0002 10.6569 11.0002 9H9.80015Z", fill: r }) }) }, e => { let { width: t = 16, height: n = 16, ...r } = e; return (0, i.jsx)(s.StickerSmallIcon, { width: t, height: n, ...r }) }, void 0, { size: 16 }) }, 990138: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("634634"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M4 2.5C2.897 2.5 2 3.397 2 4.5V15.5C2 16.604 2.897 17.5 4 17.5H11V19.5H7V21.5H17V19.5H13V17.5H20C21.103 17.5 22 16.604 22 15.5V4.5C22 3.397 21.103 2.5 20 2.5H4ZM14.5483 6L16 7.45174L13.4466 9.99485L16 12.5483L14.5483 14L12.0051 11.4466L9.45174 14L8 12.5483L10.5534 9.99485L8 7.45174L9.45174 6L12.0051 8.55341L14.5483 6Z", fill: r }) }) }, s.ScreenXIcon, void 0, { size: 24 }) }, 948573: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("634634"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M20 11V13.5H4V4.5H13V2.5H4C3.46957 2.5 2.96086 2.71071 2.58579 3.08579C2.21071 3.46086 2 3.96957 2 4.5L2 15.5C2 16.0304 2.21071 16.5391 2.58579 16.9142C2.96086 17.2893 3.46957 17.5 4 17.5H11V19.5H7V21.5H17V19.5H13V17.5H20C20.5304 17.5 21.0391 17.2893 21.4142 16.9142C21.7893 16.5391 22 16.0304 22 15.5V11H20Z", fill: r }), (0, i.jsx)("path", { className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M23 2.45174L21.5483 1L19.0051 3.55341L16.4517 1L15 2.45174L17.5534 4.99485L15 7.54826L16.4517 9L19.0051 6.44659L21.5483 9L23 7.54826L20.4466 4.99485L23 2.45174Z", fill: r })] }) }, s.ScreenXIcon, void 0, { size: 24 }) }, 548420: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("376644"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M21.707 13.293l-11-11C10.519 2.105 10.266 2 10 2H3c-.553 0-1 .447-1 1v7c0 .266.105.519.293.707l11 11c.195.195.451.293.707.293s.512-.098.707-.293l7-7c.391-.391.391-1.023 0-1.414zM7 9c-1.106 0-2-.896-2-2 0-1.106.894-2 2-2 1.104 0 2 .894 2 2 0 1.104-.896 2-2 2z" }) }) }, s.TagIcon, void 0, { size: 24 }) }, 761374: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("297350"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M19 1C19.552 1 20 1.447 20 2V3L23 2V6L20 5V6C20 6.553 19.552 7 19 7H15C14.448 7 14 6.553 14 6V2C14 1.447 14.448 1 15 1H19Z", className: s, fill: r }), (0, i.jsx)("path", { d: "M20 13.5V9H22V15.5C22 16.604 21.103 17.5 20 17.5H13V19.5H17V21.5H7V19.5H11V17.5H4C2.897 17.5 2 16.604 2 15.5V4.5C2 3.397 2.897 2.5 4 2.5H12V4.5H4V13.5H20Z", className: s, fill: r })] }) }, s.ScreenArrowIcon, void 0, { size: 24 }) }, 61753: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("609674"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { viewBox: "0 0 24 24", ...(0, a.default)(o), width: t, height: n, children: [(0, i.jsx)("path", { fill: r, className: s, d: "M22.004 10.8906H2V13.1133H12.002C13.8401 13.1133 15.336 14.6091 15.336 16.4473C15.336 18.2854 13.8401 19.7813 12.002 19.7813H8.668V18.67H6.44533V20.8926C6.44533 21.5061 6.94321 22.004 7.55667 22.004H12.002C15.0659 22.004 17.5587 19.5112 17.5587 16.4473C17.5587 15.1915 17.1241 14.0446 16.4196 13.1133H22.004V10.8906Z" }), (0, i.jsx)("path", { fill: r, className: s, d: "M8.87358 8.668C8.748 8.31904 8.66798 7.94786 8.66798 7.55667C8.66798 5.71852 10.1638 4.22267 12.002 4.22267H14.2246V5.334H16.4473V3.11133C16.4473 2.49788 15.9494 2 15.336 2H12.002C8.93803 2 6.44531 4.49272 6.44531 7.55667C6.44531 7.93674 6.48421 8.30904 6.55756 8.668H8.87358Z" })] }) }, s.StrikethroughIcon, void 0, { size: 24 }) }, 150954: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("675030"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 16 16", children: (0, i.jsx)("path", { fill: r, className: s, d: "M2.66663 7.40747H7.40737H8.59255H8.66663H13.3333V8.59266H8.59255H7.40737H2.66663V7.40747Z" }) }) }, s.MinusIcon, void 0, { size: 24 }) }, 525241: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("124597"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, className: r, ...s } = e; return (0, i.jsx)("svg", { className: r, width: t, height: n, viewBox: "0 0 24 24", fill: "none", ...(0, a.default)(s), children: (0, i.jsx)("path", { fill: "#3BA55C", d: "M9.00043 14.0492L19.5904 3.46924L23.1212 7.00006L8.99993 21.1214L1.28485 13.4063L4.83367 9.88248L9.00043 14.0492Z" }) }) }, s.CheckmarkLargeIcon, void 0, { size: 24 }) }, 839523: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("700287"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { className: s, fill: r, d: "M12.6667 1.33331H7.33333C6.6 1.33331 6 1.93331 6 2.66665V5.99998C6 6.73331 5.4 7.33331 4.66667 7.33331C3.19333 7.33331 2 8.52665 2 9.99998V13.3333C2 14.0666 2.6 14.6666 3.33333 14.6666H8.66667C9.4 14.6666 10 14.0666 10 13.3333V9.99998C10 9.26665 10.6 8.66665 11.3333 8.66665C12.8067 8.66665 14 7.47331 14 5.99998V2.66665C14 1.93331 13.4 1.33331 12.6667 1.33331ZM8 13.3333H4C3.63333 13.3333 3.33333 13.0333 3.33333 12.6666C3.33333 12.3 3.63333 12 4 12H8C8.36667 12 8.66667 12.3 8.66667 12.6666C8.66667 13.0333 8.36667 13.3333 8 13.3333ZM8 10.6666H4C3.63333 10.6666 3.33333 10.3666 3.33333 9.99998C3.33333 9.63331 3.63333 9.33331 4 9.33331H8C8.36667 9.33331 8.66667 9.63331 8.66667 9.99998C8.66667 10.3666 8.36667 10.6666 8 10.6666ZM12 6.66665H8C7.63333 6.66665 7.33333 6.36665 7.33333 5.99998C7.33333 5.63331 7.63333 5.33331 8 5.33331H12C12.3667 5.33331 12.6667 5.63331 12.6667 5.99998C12.6667 6.36665 12.3667 6.66665 12 6.66665ZM12 3.99998H8C7.63333 3.99998 7.33333 3.69998 7.33333 3.33331C7.33333 2.96665 7.63333 2.66665 8 2.66665H12C12.3667 2.66665 12.6667 2.96665 12.6667 3.33331C12.6667 3.69998 12.3667 3.99998 12 3.99998Z" }) }) }, s.TopicsIcon, void 0, { size: 16 }) }, 123245: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 40, height: n = 40, color: s = "currentColor", ...a } = e; return (0, i.jsx)("svg", { ...(0, r.default)(a), width: t, height: n, viewBox: "0 0 20 21", fill: s, xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9.2139 1.00082L0.271335 12.3825C-0.0698739 12.8168 0.00557122 13.4454 0.439846 13.7866C0.616031 13.9251 0.833599 14.0003 1.05766 14.0003H5.00022V20.0003C5.00022 20.5526 5.44794 21.0003 6.00022 21.0003H14.0002C14.5525 21.0003 15.0002 20.5526 15.0002 20.0003V14.0003H18.9428C19.495 14.0003 19.9428 13.5526 19.9428 13.0003C19.9428 12.7763 19.8675 12.5587 19.7291 12.3825L10.7865 1.00082C10.4453 0.566546 9.81669 0.4911 9.38241 0.832308C9.31972 0.881561 9.26315 0.938133 9.2139 1.00082Z", fill: s }) }) } }, 435443: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("352903"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M5.43309 21C5.35842 21 5.30189 20.9325 5.31494 20.859L5.99991 17H2.14274C2.06819 17 2.01168 16.9327 2.02453 16.8593L2.33253 15.0993C2.34258 15.0419 2.39244 15 2.45074 15H6.34991L7.40991 9H3.55274C3.47819 9 3.42168 8.93274 3.43453 8.85931L3.74253 7.09931C3.75258 7.04189 3.80244 7 3.86074 7H7.75991L8.45234 3.09903C8.46251 3.04174 8.51231 3 8.57049 3H10.3267C10.4014 3 10.4579 3.06746 10.4449 3.14097L9.75991 7H15.7599L16.4523 3.09903C16.4625 3.04174 16.5123 3 16.5705 3H18.3267C18.4014 3 18.4579 3.06746 18.4449 3.14097L17.7599 7H21.6171C21.6916 7 21.7481 7.06725 21.7353 7.14069L21.4273 8.90069C21.4172 8.95811 21.3674 9 21.3091 9H17.4099L17.0495 11.04H15.05L15.4104 9H9.41035L8.35035 15H10.5599V17H7.99991L7.30749 20.901C7.29732 20.9583 7.24752 21 7.18934 21H5.43309Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M13.4399 12.96C12.9097 12.96 12.4799 13.3898 12.4799 13.92V20.2213C12.4799 20.7515 12.9097 21.1813 13.4399 21.1813H14.3999C14.5325 21.1813 14.6399 21.2887 14.6399 21.4213V23.4597C14.6399 23.6677 14.8865 23.7773 15.0408 23.6378L17.4858 21.4289C17.6622 21.2695 17.8916 21.1813 18.1294 21.1813H22.5599C23.0901 21.1813 23.5199 20.7515 23.5199 20.2213V13.92C23.5199 13.3898 23.0901 12.96 22.5599 12.96H13.4399Z" })] }) }, s.TextIcon, void 0, { size: 24 }) }, 934458: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("435205"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", fill: "none", children: [(0, i.jsx)("path", { className: s, fill: r, d: "M5.43309 21C5.35842 21 5.30189 20.9325 5.31494 20.859L5.99991 17H2.14274C2.06819 17 2.01168 16.9327 2.02453 16.8593L2.33253 15.0993C2.34258 15.0419 2.39244 15 2.45074 15H6.34991L7.40991 9H3.55274C3.47819 9 3.42168 8.93274 3.43453 8.85931L3.74253 7.09931C3.75258 7.04189 3.80244 7 3.86074 7H7.75991L8.45234 3.09903C8.46251 3.04174 8.51231 3 8.57049 3H10.3267C10.4014 3 10.4579 3.06746 10.4449 3.14097L9.75991 7H15.7599L16.4523 3.09903C16.4625 3.04174 16.5123 3 16.5705 3H18.3267C18.4014 3 18.4579 3.06746 18.4449 3.14097L17.7599 7H21.6171C21.6916 7 21.7481 7.06725 21.7353 7.14069L21.4273 8.90069C21.4172 8.95811 21.3674 9 21.3091 9H17.4099L17.0495 11.04H15.05L15.4104 9H9.41035L8.35035 15H10.5599V17H7.99991L7.30749 20.901C7.29732 20.9583 7.24752 21 7.18934 21H5.43309Z" }), (0, i.jsx)("path", { className: s, fill: r, d: "M13.4399 12.96C12.9097 12.96 12.4799 13.3898 12.4799 13.92V20.2213C12.4799 20.7515 12.9097 21.1813 13.4399 21.1813H14.3999C14.5325 21.1813 14.6399 21.2887 14.6399 21.4213V23.4597C14.6399 23.6677 14.8865 23.7773 15.0408 23.6378L17.4858 21.4289C17.6622 21.2695 17.8916 21.1813 18.1294 21.1813H22.5599C23.0901 21.1813 23.5199 20.7515 23.5199 20.2213V13.92C23.5199 13.3898 23.0901 12.96 22.5599 12.96H13.4399Z" })] }) }, s.ThreadIcon, void 0, { size: 24 }) }, 446183: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { className: a, d: "M14.0652 10.5L16.6739 10.5C16.7604 10.5 16.8433 10.4641 16.9045 10.4002C16.9656 10.3362 17 10.2495 17 10.1591L17 4.0227C17 3.9323 16.9656 3.8456 16.9045 3.7817C16.8433 3.7177 16.7604 3.6818 16.6739 3.6818L14.0652 3.6818C13.9787 3.6818 13.8958 3.7177 13.8346 3.7817C13.7735 3.8456 13.7391 3.9323 13.7391 4.0227L13.7391 10.1591C13.7391 10.2495 13.7735 10.3362 13.8346 10.4002C13.8958 10.4641 13.9787 10.5 14.0652 10.5ZM2 10.8409C2 11.7804 2.7317 12.5454 3.6304 12.5454L7.7359 12.5454C7.537 13.1789 7.2174 14.34 7.2174 15.2727C7.2174 16.7516 8.4193 18 9.1739 18C9.8515 18 10.3354 17.6018 10.3563 17.5848C10.3943 17.5526 10.425 17.512 10.4461 17.4659C10.4672 17.4198 10.4782 17.3693 10.4783 17.3182L10.4783 16.6939C10.4783 15.5814 10.7103 14.4811 11.1595 13.4634L12.3565 10.7516L12.9063 10.4645C12.9605 10.4361 13.006 10.3924 13.0379 10.3385C13.0698 10.2846 13.0868 10.2225 13.087 10.1591L13.087 4.0227C13.087 3.932 13.0524 3.8455 12.9917 3.7814C12.5033 3.2714 11.4076 3 10.8044 3L4.7717 3C4.5222 3.0004 4.2768 3.0674 4.0588 3.1944C3.8409 3.3215 3.6575 3.5046 3.526 3.7264C3.3944 3.9481 3.3192 4.2013 3.3072 4.4619C3.2952 4.7225 3.347 4.982 3.4576 5.2159C3.1122 5.3973 2.8496 5.7144 2.7273 6.0978C2.6051 6.4812 2.6332 6.8996 2.8054 7.2614C2.5635 7.3883 2.3601 7.5831 2.2179 7.8239C2.0757 8.0646 2.0002 8.342 2 8.625C2 9.0341 2.1559 9.4166 2.4239 9.6989C2.1533 10.007 2 10.4107 2 10.8409Z", fill: s }) }) } }, 677281: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: (0, i.jsx)("path", { className: a, d: "M5.93478 9.5H3.32609C3.2396 9.5 3.15666 9.53592 3.09551 9.59985C3.03436 9.66378 3 9.75049 3 9.84091V15.9773C3 16.0677 3.03436 16.1544 3.09551 16.2183C3.15666 16.2823 3.2396 16.3182 3.32609 16.3182H5.93478C6.02127 16.3182 6.10421 16.2823 6.16536 16.2183C6.22651 16.1544 6.26087 16.0677 6.26087 15.9773V9.84091C6.26087 9.75049 6.22651 9.66378 6.16536 9.59985C6.10421 9.53592 6.02127 9.5 5.93478 9.5ZM18 9.15909C18 8.21955 17.2683 7.45455 16.3696 7.45455H12.2641C12.463 6.82114 12.7826 5.66 12.7826 4.72727C12.7826 3.24841 11.5807 2 10.8261 2C10.1485 2 9.66457 2.39818 9.6437 2.41523C9.60568 2.44738 9.57501 2.488 9.55391 2.53412C9.53281 2.58024 9.52182 2.6307 9.52174 2.68182V3.3061C9.52174 4.41859 9.28971 5.51885 8.84048 6.5366L7.64348 9.24841L7.0937 9.53545C7.03952 9.56394 6.99396 9.60756 6.96207 9.66149C6.93018 9.71541 6.91321 9.77751 6.91304 9.84091V15.9773C6.91304 16.068 6.94761 16.1545 7.00826 16.2186C7.49674 16.7286 8.59239 17 9.19565 17H15.2283C15.4778 16.9996 15.7232 16.9326 15.9412 16.8056C16.1591 16.6785 16.3425 16.4954 16.474 16.2736C16.6056 16.0519 16.6808 15.7987 16.6928 15.5381C16.7048 15.2775 16.653 15.018 16.5424 14.7841C16.8878 14.6027 17.1504 14.2856 17.2727 13.9022C17.3949 13.5188 17.3668 13.1004 17.1946 12.7386C17.4365 12.6117 17.6399 12.4169 17.7821 12.1761C17.9243 11.9354 17.9998 11.658 18 11.375C18 10.9659 17.8441 10.5834 17.5761 10.3011C17.8467 9.99296 18 9.58932 18 9.15909Z", fill: s }) }) } }, 191741: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("373296"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M23 10V4H1V10C2.1 10 3 10.9 3 12C3 13.1 2.1 14 1 14V20H23V14C21.9 14 21 13.1 21 12C21 10.9 21.9 10 23 10ZM13 16V18H11V16H9V14H13C13.27 14 13.5 13.83 13.5 13.62C13.5 12.58 8.5 13.62 8.5 10.37C8.5 9.07 9.62 8 11 8V6H13V8H15V10H11C10.73 10 10.5 10.17 10.5 10.38C10.5 11.42 15.5 10.38 15.5 13.63C15.5 14.93 14.38 16 13 16Z" }) }) }, s.TicketIcon, void 0, { size: 24 }) }, 428548: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: (0, i.jsx)("polygon", { fill: s, className: a, fillRule: "evenodd", points: "11 1.576 6.583 6 11 10.424 10.424 11 6 6.583 1.576 11 1 10.424 5.417 6 1 1.576 1.576 1 6 5.417 10.424 1" }) }) } }, 718759: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: (0, i.jsx)("path", { stroke: s, className: a, fill: "none", d: "M8.5,3.5 L6,6 L3.5,3.5 L6,6 L3.5,8.5 L6,6 L8.5,8.5 L6,6 L8.5,3.5 Z" }) }) } }, 679219: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: (0, i.jsx)("rect", { width: "9", height: "9", x: "1.5", y: "1.5", fill: "none", stroke: s, className: a }) }) } }, 835225: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: (0, i.jsxs)("g", { fill: s, className: a, fillRule: "evenodd", children: [(0, i.jsx)("path", { d: "M5,3 C5,3 5,6.1325704 5,6.48601043 C5,6.83945045 5.18485201,7 5.49021559,7 L9,7 L9,6 L8,6 L8,5 L7,5 L7,4 L6,4 L6,3 L5,3 Z", transform: "rotate(180 7 5)" }), (0, i.jsx)("path", { d: "M3,5 C3,5 3,8.1325704 3,8.48601043 C3,8.83945045 3.18485201,9 3.49021559,9 L7,9 L7,8 L6,8 L6,7 L5,7 L5,6 L4,6 L4,5 L3,5 Z" })] }) }) } }, 939039: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: (0, i.jsx)("rect", { className: a, fill: s, width: "10", height: "1", x: "1", y: "6" }) }) } }, 117795: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 12, height: n = 12, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 12 12", children: (0, i.jsx)("rect", { fill: s, className: a, width: "8", height: "2", x: "2", y: "5", fillRule: "evenodd" }) }) } }, 740727: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("422045"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsxs)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: r, className: s, d: "M15 3.999V2H9V3.999H3V5.999H21V3.999H15Z" }), (0, i.jsx)("path", { fill: r, className: s, d: "M5 6.99902V18.999C5 20.101 5.897 20.999 7 20.999H17C18.103 20.999 19 20.101 19 18.999V6.99902H5ZM11 17H9V11H11V17ZM15 17H13V11H15V17Z" })] }) }, s.TrashIcon, void 0, { size: 24 }) }, 187500: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("552075"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("g", { fill: "none", fillRule: "evenodd", transform: "translate(2 6)", children: (0, i.jsx)("path", { className: s, fill: r, d: "M14 0l2.29 2.29-4.88 4.88-4-4L0 10.59 1.41 12l6-6 4 4 6.3-6.29L20 6V0z" }) }) }) }, s.AnalyticsIcon, void 0, { size: 24 }) }, 339487: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("71970"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", className: s, foreground: o, ...l } = e; return (0, i.jsx)("svg", { ...(0, a.default)(l), className: s, width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: o, fill: r, fillRule: "evenodd", clipRule: "evenodd", d: "M6.278 3.00098H3C2.447 3.00098 2 3.44898 2 4.00098V8.00098C2 8.30498 2.139 8.59298 2.375 8.78198L7.304 12.724C8.206 13.86 9.51 14.659 11 14.911V16.001H9C8.447 16.001 8 16.449 8 17.001V20.001H7.5C7.22386 20.001 7 20.2248 7 20.501V21.501C7 21.7771 7.22386 22.001 7.5 22.001H16.5C16.7761 22.001 17 21.7771 17 21.501V20.501C17 20.2248 16.7761 20.001 16.5 20.001H16V17.001C16 16.449 15.553 16.001 15 16.001H13V14.911C14.49 14.659 15.794 13.86 16.696 12.724L21.625 8.78198C21.861 8.59298 22 8.30498 22 8.00098V4.00098C22 3.44898 21.553 3.00098 21 3.00098H17.722C17.375 2.40598 16.737 2.00098 16 2.00098H8C7.262 2.00098 6.625 2.40598 6.278 3.00098ZM20 5.00098V7.52098L17.994 9.12598C17.994 9.10435 17.9955 9.08348 17.997 9.06274C17.9985 9.04224 18 9.02185 18 9.00098V5.00098H20ZM6.006 9.12698L4 7.52098V5.00098H6V9.00098C6 9.02173 6.00147 9.042 6.00295 9.0625C6.00447 9.08349 6.006 9.10472 6.006 9.12698Z" }) }) }, s.TrophyIcon, void 0, { size: 24 }) }, 38068: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 8, height: n = 13, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 8 13", children: (0, i.jsx)("path", { className: null != a ? a : void 0, stroke: s, fill: "transparent", d: "M8.16639 0.5H9C10.933 0.5 12.5 2.067 12.5 4V9C12.5 10.933 10.933 12.5 9 12.5H8.16639C7.23921 12.5 6.34992 12.1321 5.69373 11.4771L0.707739 6.5L5.69373 1.52292C6.34992 0.86789 7.23921 0.5 8.16639 0.5Z" }) }) } }, 834348: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("325767"); function s(e) { let { width: t = 8, height: n = 8, color: s = "currentColor", foreground: a, ...o } = e; return (0, i.jsx)("svg", { ...(0, r.default)(o), width: t, height: n, viewBox: "0 0 8 8", fill: "none", children: (0, i.jsx)("path", { className: a, fill: s, d: "M8 3.99957L4 0 0 3.99957l1.20161 1.20149L3.1502 3.25268V8h1.6996V3.25268l1.94858 1.94838L8 3.99957z" }) }) } }, 617506: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("594158"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { className: s, fill: r, d: "M9 16h6v-6h4l-7-7-7 7h4v6zm-4 2h14v2H5v-2z" }) }) }, s.UploadIcon, void 0, { size: 16 }) }, 363138: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("594158"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 24, height: n = 24, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: r, className: s, fillRule: "evenodd", clipRule: "evenodd", d: "M11.2137 2.00088L2.27111 13.3826C1.9299 13.8168 2.00535 14.4455 2.43963 14.7867C2.61581 14.9251 2.83338 15.0004 3.05744 15.0004H7V21.0004C7 21.5527 7.44772 22.0004 8 22.0004H16C16.5523 22.0004 17 21.5527 17 21.0004V15.0004H20.9425C21.4948 15.0004 21.9425 14.5527 21.9425 14.0004C21.9425 13.7763 21.8673 13.5588 21.7289 13.3826L12.7863 2.00088C12.4451 1.56661 11.8165 1.49116 11.3822 1.83237C11.3195 1.88162 11.2629 1.93819 11.2137 2.00088Z" }) }) }, s.UploadIcon, void 0, { size: 24 }) }, 507957: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("979184"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 16, height: n = 16, color: r = "currentColor", ...s } = e; return (0, i.jsx)("svg", { ...(0, a.default)(s), width: t, height: n, viewBox: "0 0 16 15.2", children: (0, i.jsx)("path", { d: "M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z", fill: r }) }) }, s.CheckmarkSmallIcon, void 0, { size: 16 }) }, 759231: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("960259"), s = n("774867"), a = n("325767"); t.default = (0, r.replaceIcon)(function(e) { let { width: t = 20, height: n = 20, color: r = "currentColor", foreground: s, ...o } = e; return (0, i.jsx)("svg", { ...(0, a.default)(o), width: t, height: n, viewBox: "0 0 20 20", children: (0, i.jsx)("path", { d: "M10 0C4.486 0 0 4.486 0 10C0 15.515 4.486 20 10 20C15.514 20 20 15.515 20 10C20 4.486 15.514 0 10 0ZM9 4H11V11H9V4ZM10 15.25C9.31 15.25 8.75 14.691 8.75 14C8.75 13.31 9.31 12.75 10 12.75C10.69 12.75 11.25 13.31 11.25 14C11.25 14.691 10.69 15.25 10 15.25Z", fillRule: "evenodd", clipRule: "evenodd", className: s, fill: r }) }) }, s.CircleExclamationPointIcon, void 0, { size: 20 }) }, 362061: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("735250"); function r(e) { let { isDark: t, style: n } = e; return t ? (0, i.jsxs)("svg", { style: n, width: "24", height: "27", viewBox: "0 0 24 27", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M16.9565 5.2944L14.0303 6.35946C14.3737 5.98438 14.6768 5.56864 14.8905 5.11201C15.5892 3.61369 14.9383 1.82545 13.439 1.12395C11.9856 0.449355 10.1322 1.12288 9.45316 2.57574C8.47477 4.67391 9.3218 7.64434 9.42134 7.97632C9.4263 7.9958 9.44151 8.00835 9.44836 8.02715L9.42956 8.03399C9.42272 8.01519 9.4263 7.9958 9.41724 7.97675C9.28105 7.65811 8.01961 4.83851 5.92145 3.86012C4.46807 3.18552 2.61312 3.86066 1.93596 5.31284C1.23634 6.81151 1.8872 8.59974 3.38681 9.29902C3.84403 9.51145 4.34344 9.6351 4.84762 9.70168L1.92142 10.7667C0.884936 11.144 0.348823 12.2937 0.726071 13.3302L1.41011 15.2095L20.204 8.36913L19.5199 6.48975C19.1427 5.45327 17.9939 4.91681 16.9565 5.2944ZM3.74796 6.15701C3.51486 6.65688 3.7317 7.25265 4.23191 7.48668C4.983 7.83691 6.10305 7.79746 6.99257 7.66844C6.518 6.90256 5.83289 6.02602 5.07668 5.6734C4.83538 5.5601 4.56429 5.54915 4.31245 5.64082C4.06061 5.73248 3.85998 5.91511 3.74796 6.15701ZM11.2658 3.42179C10.9123 4.17834 10.9518 5.28985 11.08 6.18287C11.8475 5.70985 12.725 5.02439 13.0782 4.2669C13.3109 3.76609 13.0932 3.17067 12.5929 2.93664C12.3529 2.82393 12.0818 2.81299 11.83 2.90465C11.5782 2.99632 11.3775 3.17895 11.2658 3.42179Z", fill: "url(#paint0_linear_2683_16702)" }), (0, i.jsx)("path", { d: "M21.9355 8.82275C21.3596 13.7273 19.056 16.7554 19.056 16.7554", stroke: "#5865F2", strokeWidth: "3", strokeMiterlimit: "10", strokeLinecap: "round" }), (0, i.jsx)("path", { d: "M19.4857 12.5113L18.9294 12.5444C18.8015 12.552 18.6819 12.61 18.5968 12.7058C18.5118 12.8016 18.4682 12.9273 18.4758 13.0552L18.7061 16.9311C18.7099 16.996 18.7268 17.0595 18.7557 17.1177C18.7847 17.1759 18.8251 17.2277 18.8745 17.27C18.9239 17.3122 18.9814 17.344 19.0434 17.3636C19.1054 17.3831 19.1708 17.3898 19.2355 17.3835L19.7918 17.3504C20.0968 17.3323 20.382 17.1938 20.5848 16.9654C20.7877 16.7369 20.8914 16.4373 20.8733 16.1323L20.7224 13.5917C20.7042 13.2867 20.5657 13.0015 20.3373 12.7987C20.1089 12.5959 19.8092 12.4921 19.5043 12.5102L19.4857 12.5113Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M8.06376 10.3064L17.1137 9.76874C18.5271 9.68477 19.741 10.7625 19.825 12.1759L20.0622 16.1686C20.1461 17.582 19.0684 18.7959 17.655 18.8799L8.60506 19.4176C7.19165 19.5015 5.97779 18.4238 5.89381 17.0104L5.6566 13.0177C5.57263 11.6042 6.65035 10.3904 8.06376 10.3064Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M18.1642 14.0981C17.7332 14.0981 17.3839 13.7488 17.3839 13.3179C17.3839 12.8869 17.7332 12.5376 18.1642 12.5376C18.5951 12.5376 18.9444 12.8869 18.9444 13.3179C18.9444 13.7488 18.5951 14.0981 18.1642 14.0981Z", fill: "black" }), (0, i.jsx)("path", { d: "M7.33246 13.2305L5.05143 13.366C4.7514 13.3838 4.47075 13.5201 4.2712 13.7448C4.07166 13.9696 3.96957 14.2644 3.98739 14.5644L4.14054 17.1422C4.15836 17.4422 4.29464 17.7229 4.5194 17.9224C4.74415 18.122 5.03897 18.224 5.33899 18.2062L7.62002 18.0707L7.33246 13.2305Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M6.12411 13.8623L5.47504 13.9009C5.33733 13.909 5.2085 13.9716 5.11691 14.0748C5.02531 14.1779 4.97845 14.3133 4.98663 14.451L5.10452 16.4353C5.1127 16.573 5.17526 16.7018 5.27842 16.7934C5.38159 16.885 5.51691 16.9319 5.65463 16.9237L6.3037 16.8851L6.12411 13.8623Z", fill: "#B8CDFF" }), (0, i.jsx)("path", { d: "M9.54422 14.6749C9.08252 14.6749 8.70823 14.3006 8.70823 13.8389C8.70823 13.3772 9.08252 13.0029 9.54422 13.0029C10.0059 13.0029 10.3802 13.3772 10.3802 13.8389C10.3802 14.3006 10.0059 14.6749 9.54422 14.6749Z", fill: "black" }), (0, i.jsx)("path", { d: "M16.7178 11.9692L11.822 12.2601C11.7148 12.2665 11.6099 12.2939 11.5134 12.3408C11.4168 12.3877 11.3304 12.4531 11.2592 12.5334C11.1879 12.6137 11.1331 12.7072 11.098 12.8086C11.0629 12.9101 11.0481 13.0174 11.0545 13.1246L11.1734 15.1274C11.2053 15.6635 11.4488 16.165 11.8504 16.5216C12.252 16.8782 12.7788 17.0606 13.3149 17.0287L16.0781 16.8646C16.3095 16.8508 16.5359 16.7916 16.7444 16.6904C16.9529 16.5892 17.1394 16.4479 17.2932 16.2745C17.4471 16.1012 17.5654 15.8993 17.6412 15.6803C17.717 15.4613 17.749 15.2295 17.7352 14.9981L17.6019 12.7542C17.5979 12.6437 17.5715 12.5353 17.5244 12.4353C17.4773 12.3354 17.4104 12.246 17.3278 12.1726C17.2451 12.0993 17.1485 12.0434 17.0436 12.0084C16.9388 11.9735 16.828 11.9602 16.7178 11.9692Z", fill: "#B8CDFF" }), (0, i.jsx)("path", { d: "M16.195 15.8076H16.548C16.5952 15.8079 16.6419 15.7982 16.6851 15.7791C16.7283 15.7601 16.767 15.732 16.7986 15.6969C16.8302 15.6618 16.854 15.6204 16.8684 15.5755C16.8829 15.5305 16.8876 15.483 16.8824 15.4361C16.8827 15.3889 16.8729 15.3421 16.8539 15.2989C16.8348 15.2557 16.8068 15.217 16.7717 15.1855C16.7366 15.1539 16.6952 15.1301 16.6502 15.1156C16.6052 15.1012 16.5577 15.0964 16.5108 15.1017H16.1578C16.1106 15.1014 16.0639 15.1111 16.0207 15.1302C15.9775 15.1493 15.9388 15.1773 15.9072 15.2124C15.8756 15.2475 15.8518 15.2889 15.8374 15.3338C15.8229 15.3788 15.8182 15.4263 15.8234 15.4732C15.8231 15.5205 15.8329 15.5672 15.8519 15.6104C15.871 15.6536 15.899 15.6923 15.9341 15.7239C15.9692 15.7555 16.0106 15.7793 16.0556 15.7937C16.1005 15.8081 16.1481 15.8129 16.195 15.8076Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M13.8913 15.9565L14.5601 15.9008C14.6073 15.9011 14.654 15.8914 14.6972 15.8723C14.7404 15.8532 14.7791 15.8252 14.8107 15.7901C14.8423 15.755 14.8661 15.7136 14.8805 15.6687C14.895 15.6237 14.8997 15.5762 14.8945 15.5292C14.8921 15.4829 14.8806 15.4374 14.8606 15.3955C14.8407 15.3536 14.8126 15.316 14.7781 15.2849C14.7436 15.2539 14.7033 15.2299 14.6595 15.2145C14.6157 15.199 14.5693 15.1923 14.5229 15.1948L13.8541 15.232C13.8078 15.2344 13.7623 15.2459 13.7204 15.2659C13.6785 15.2858 13.6409 15.3139 13.6098 15.3484C13.5788 15.3829 13.5548 15.4232 13.5394 15.467C13.5239 15.5108 13.5172 15.5572 13.5197 15.6036C13.5286 15.6973 13.5711 15.7847 13.6394 15.8496C13.7077 15.9145 13.7972 15.9525 13.8913 15.9565Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M1.51869 10.0304L1.55585 9.95605L1.51869 10.0304Z", fill: "#C5ECFF" }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M3 23.8394V17.8394H11V25.8394H5C3.897 25.8394 3 24.9424 3 23.8394ZM13 25.8394V17.8394H21V23.8394C21 24.9424 20.104 25.8394 19 25.8394H13Z", fill: "url(#paint1_linear_2683_16702)" }), (0, i.jsx)("rect", { x: "11", y: "17.8403", width: "2", height: "8", fill: "#40444B" }), (0, i.jsxs)("defs", { children: [(0, i.jsxs)("linearGradient", { id: "paint0_linear_2683_16702", x1: "-0.468018", y1: "10.0494", x2: "18.3258", y2: "3.20901", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { stopColor: "#FF6D6D" }), (0, i.jsx)("stop", { offset: "0.177083", stopColor: "#FFB359" }), (0, i.jsx)("stop", { offset: "0.356007", stopColor: "#E6F820" }), (0, i.jsx)("stop", { offset: "0.578487", stopColor: "#42FE8D" }), (0, i.jsx)("stop", { offset: "0.769035", stopColor: "#3EA2FF" }), (0, i.jsx)("stop", { offset: "0.951531", stopColor: "#B66DFF" })] }), (0, i.jsxs)("linearGradient", { id: "paint1_linear_2683_16702", x1: "3", y1: "21.4333", x2: "21", y2: "21.4333", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { stopColor: "#FF6D6D" }), (0, i.jsx)("stop", { offset: "0.177083", stopColor: "#FFB359" }), (0, i.jsx)("stop", { offset: "0.356007", stopColor: "#E6F820" }), (0, i.jsx)("stop", { offset: "0.578487", stopColor: "#42FE8D" }), (0, i.jsx)("stop", { offset: "0.769035", stopColor: "#3EA2FF" }), (0, i.jsx)("stop", { offset: "0.951531", stopColor: "#B66DFF" })] })] })] }) : (0, i.jsxs)("svg", { style: n, width: "24", height: "27", viewBox: "0 0 24 27", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [(0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M16.9565 5.2944L14.0303 6.35946C14.3737 5.98438 14.6768 5.56864 14.8905 5.11201C15.5892 3.61369 14.9383 1.82545 13.439 1.12395C11.9856 0.449355 10.1322 1.12288 9.45316 2.57574C8.47477 4.67391 9.3218 7.64434 9.42134 7.97632C9.4263 7.9958 9.44151 8.00835 9.44836 8.02715L9.42956 8.03399C9.42272 8.01519 9.4263 7.9958 9.41724 7.97675C9.28105 7.65811 8.01961 4.83851 5.92145 3.86012C4.46807 3.18552 2.61312 3.86066 1.93596 5.31284C1.23634 6.81151 1.8872 8.59974 3.38681 9.29902C3.84403 9.51145 4.34344 9.6351 4.84762 9.70168L1.92142 10.7667C0.884936 11.144 0.348823 12.2937 0.726071 13.3302L1.41011 15.2095L20.204 8.36913L19.5199 6.48975C19.1427 5.45327 17.9939 4.91681 16.9565 5.2944ZM3.74796 6.15701C3.51486 6.65688 3.7317 7.25265 4.23191 7.48668C4.983 7.83691 6.10305 7.79746 6.99257 7.66844C6.518 6.90256 5.83289 6.02602 5.07668 5.6734C4.83538 5.5601 4.56429 5.54915 4.31245 5.64082C4.06061 5.73248 3.85998 5.91511 3.74796 6.15701ZM11.2658 3.42179C10.9123 4.17834 10.9518 5.28985 11.08 6.18287C11.8475 5.70985 12.725 5.02439 13.0782 4.2669C13.3109 3.76609 13.0932 3.17067 12.5929 2.93664C12.3529 2.82393 12.0818 2.81299 11.83 2.90465C11.5782 2.99632 11.3775 3.17895 11.2658 3.42179Z", fill: "url(#paint0_linear_2683_16682)" }), (0, i.jsx)("path", { d: "M21.9355 8.82275C21.3596 13.7273 19.056 16.7554 19.056 16.7554", stroke: "#5865F2", strokeWidth: "3", strokeMiterlimit: "10", strokeLinecap: "round" }), (0, i.jsx)("path", { d: "M19.4857 12.5113L18.9294 12.5444C18.8015 12.552 18.6819 12.61 18.5968 12.7058C18.5118 12.8016 18.4682 12.9273 18.4758 13.0552L18.7061 16.9311C18.7099 16.996 18.7268 17.0595 18.7557 17.1177C18.7847 17.1759 18.8251 17.2277 18.8745 17.27C18.9239 17.3122 18.9814 17.344 19.0434 17.3636C19.1054 17.3831 19.1708 17.3898 19.2355 17.3835L19.7918 17.3504C20.0968 17.3323 20.382 17.1938 20.5848 16.9654C20.7877 16.7369 20.8914 16.4373 20.8733 16.1323L20.7224 13.5917C20.7042 13.2867 20.5657 13.0015 20.3373 12.7987C20.1089 12.5959 19.8092 12.4921 19.5043 12.5102L19.4857 12.5113Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M8.06376 10.3064L17.1137 9.76874C18.5271 9.68477 19.741 10.7625 19.825 12.1759L20.0622 16.1686C20.1461 17.582 19.0684 18.7959 17.655 18.8799L8.60506 19.4176C7.19165 19.5015 5.97779 18.4238 5.89381 17.0104L5.6566 13.0177C5.57263 11.6042 6.65035 10.3904 8.06376 10.3064Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M18.1642 14.0981C17.7332 14.0981 17.3839 13.7488 17.3839 13.3179C17.3839 12.8869 17.7332 12.5376 18.1642 12.5376C18.5951 12.5376 18.9444 12.8869 18.9444 13.3179C18.9444 13.7488 18.5951 14.0981 18.1642 14.0981Z", fill: "black" }), (0, i.jsx)("path", { d: "M7.33246 13.2305L5.05143 13.366C4.7514 13.3838 4.47075 13.5201 4.2712 13.7448C4.07166 13.9696 3.96957 14.2644 3.98739 14.5644L4.14054 17.1422C4.15836 17.4422 4.29464 17.7229 4.5194 17.9224C4.74415 18.122 5.03897 18.224 5.33899 18.2062L7.62002 18.0707L7.33246 13.2305Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M6.12411 13.8623L5.47504 13.9009C5.33733 13.909 5.2085 13.9716 5.11691 14.0748C5.02531 14.1779 4.97845 14.3133 4.98663 14.451L5.10452 16.4353C5.1127 16.573 5.17526 16.7018 5.27842 16.7934C5.38159 16.885 5.51691 16.9319 5.65463 16.9237L6.3037 16.8851L6.12411 13.8623Z", fill: "#B8CDFF" }), (0, i.jsx)("path", { d: "M9.54422 14.6749C9.08252 14.6749 8.70823 14.3006 8.70823 13.8389C8.70823 13.3772 9.08252 13.0029 9.54422 13.0029C10.0059 13.0029 10.3802 13.3772 10.3802 13.8389C10.3802 14.3006 10.0059 14.6749 9.54422 14.6749Z", fill: "black" }), (0, i.jsx)("path", { d: "M16.7178 11.9692L11.822 12.2601C11.7148 12.2665 11.6099 12.2939 11.5134 12.3408C11.4168 12.3877 11.3304 12.4531 11.2592 12.5334C11.1879 12.6137 11.1331 12.7072 11.098 12.8086C11.0629 12.9101 11.0481 13.0174 11.0545 13.1246L11.1734 15.1274C11.2053 15.6635 11.4488 16.165 11.8504 16.5216C12.252 16.8782 12.7788 17.0606 13.3149 17.0287L16.0781 16.8646C16.3095 16.8508 16.5359 16.7916 16.7444 16.6904C16.9529 16.5892 17.1394 16.4479 17.2932 16.2745C17.4471 16.1012 17.5654 15.8993 17.6412 15.6803C17.717 15.4613 17.749 15.2295 17.7352 14.9981L17.6019 12.7542C17.5979 12.6437 17.5715 12.5353 17.5244 12.4353C17.4773 12.3354 17.4104 12.246 17.3278 12.1726C17.2451 12.0993 17.1485 12.0434 17.0436 12.0084C16.9388 11.9735 16.828 11.9602 16.7178 11.9692Z", fill: "#B8CDFF" }), (0, i.jsx)("path", { d: "M16.195 15.8076H16.548C16.5952 15.8079 16.6419 15.7982 16.6851 15.7791C16.7283 15.7601 16.767 15.732 16.7986 15.6969C16.8302 15.6618 16.854 15.6204 16.8684 15.5755C16.8829 15.5305 16.8876 15.483 16.8824 15.4361C16.8827 15.3889 16.8729 15.3421 16.8539 15.2989C16.8348 15.2557 16.8068 15.217 16.7717 15.1855C16.7366 15.1539 16.6952 15.1301 16.6502 15.1156C16.6052 15.1012 16.5577 15.0964 16.5108 15.1017H16.1578C16.1106 15.1014 16.0639 15.1111 16.0207 15.1302C15.9775 15.1493 15.9388 15.1773 15.9072 15.2124C15.8756 15.2475 15.8518 15.2889 15.8374 15.3338C15.8229 15.3788 15.8182 15.4263 15.8234 15.4732C15.8231 15.5205 15.8329 15.5672 15.8519 15.6104C15.871 15.6536 15.899 15.6923 15.9341 15.7239C15.9692 15.7555 16.0106 15.7793 16.0556 15.7937C16.1005 15.8081 16.1481 15.8129 16.195 15.8076Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M13.8913 15.9565L14.5601 15.9008C14.6073 15.9011 14.654 15.8914 14.6972 15.8723C14.7404 15.8532 14.7791 15.8252 14.8107 15.7901C14.8423 15.755 14.8661 15.7136 14.8805 15.6687C14.895 15.6237 14.8997 15.5762 14.8945 15.5292C14.8921 15.4829 14.8806 15.4374 14.8606 15.3955C14.8407 15.3536 14.8126 15.316 14.7781 15.2849C14.7436 15.2539 14.7033 15.2299 14.6595 15.2145C14.6157 15.199 14.5693 15.1923 14.5229 15.1948L13.8541 15.232C13.8078 15.2344 13.7623 15.2459 13.7204 15.2659C13.6785 15.2858 13.6409 15.3139 13.6098 15.3484C13.5788 15.3829 13.5548 15.4232 13.5394 15.467C13.5239 15.5108 13.5172 15.5572 13.5197 15.6036C13.5286 15.6973 13.5711 15.7847 13.6394 15.8496C13.7077 15.9145 13.7972 15.9525 13.8913 15.9565Z", fill: "#7196FF" }), (0, i.jsx)("path", { d: "M1.51869 10.0304L1.55585 9.95605L1.51869 10.0304Z", fill: "#C5ECFF" }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M3 23.8394V17.8394H11V25.8394H5C3.897 25.8394 3 24.9424 3 23.8394ZM13 25.8394V17.8394H21V23.8394C21 24.9424 20.104 25.8394 19 25.8394H13Z", fill: "url(#paint1_linear_2683_16682)" }), (0, i.jsx)("rect", { x: "11", y: "17.8403", width: "2", height: "8", fill: "#EBEDEF" }), (0, i.jsxs)("defs", { children: [(0, i.jsxs)("linearGradient", { id: "paint0_linear_2683_16682", x1: "-0.468018", y1: "10.0494", x2: "18.3258", y2: "3.20901", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { stopColor: "#D64949" }), (0, i.jsx)("stop", { offset: "0.177083", stopColor: "#F28300" }), (0, i.jsx)("stop", { offset: "0.364583", stopColor: "#B5C500" }), (0, i.jsx)("stop", { offset: "0.578487", stopColor: "#06CC55" }), (0, i.jsx)("stop", { offset: "0.769035", stopColor: "#2094FF" }), (0, i.jsx)("stop", { offset: "0.951531", stopColor: "#AC59FF" })] }), (0, i.jsxs)("linearGradient", { id: "paint1_linear_2683_16682", x1: "3", y1: "21.4333", x2: "21", y2: "21.4333", gradientUnits: "userSpaceOnUse", children: [(0, i.jsx)("stop", { stopColor: "#D64949" }), (0, i.jsx)("stop", { offset: "0.177083", stopColor: "#F28300" }), (0, i.jsx)("stop", { offset: "0.364583", stopColor: "#B5C500" }), (0, i.jsx)("stop", { offset: "0.578487", stopColor: "#06CC55" }), (0, i.jsx)("stop", { offset: "0.769035", stopColor: "#2094FF" }), (0, i.jsx)("stop", { offset: "0.951531", stopColor: "#AC59FF" })] })] })] }) } n("470079") }, 325767: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return i.default } }); var i = n("331595") }, 942389: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("283232"); t.default = r.memo(function(e) { let { className: t } = e; return (0, i.jsxs)("svg", { width: "57", height: "40", viewBox: "0 0 57 40", fill: "none", className: t, children: [(0, i.jsx)("path", { d: "M49.4949 36H3.9596C1.78182 36 0 34.2486 0 32.1081V3.89189C0 1.75135 1.78182 0 3.9596 0H49.4949C51.6727 0 53.4545 1.75135 53.4545 3.89189V32.1081C53.4545 34.2486 51.6727 36 49.4949 36Z", className: s.svgContentRight }), (0, i.jsx)("path", { d: "M44.5456 10.8889H25.7375C24.6486 10.8889 23.7577 9.99798 23.7577 8.90909C23.7577 7.8202 24.6486 6.92929 25.7375 6.92929H44.5456C45.6345 6.92929 46.5254 7.8202 46.5254 8.90909C46.5254 9.99798 45.6345 10.8889 44.5456 10.8889ZM19.7981 10.8889C18.7092 10.8889 17.8183 9.99798 17.8183 8.90909C17.8183 7.8202 18.7092 6.92929 19.7981 6.92929C20.887 6.92929 21.7779 7.8202 21.7779 8.90909C21.7779 9.99798 20.887 10.8889 19.7981 10.8889ZM44.5456 19.798H25.7375C24.6486 19.798 23.7577 18.9071 23.7577 17.8182C23.7577 16.7293 24.6486 15.8384 25.7375 15.8384H44.5456C45.6345 15.8384 46.5254 16.7293 46.5254 17.8182C46.5254 18.9071 45.6345 19.798 44.5456 19.798ZM19.7981 19.798C18.7092 19.798 17.8183 18.9071 17.8183 17.8182C17.8183 16.7293 18.7092 15.8384 19.7981 15.8384C20.887 15.8384 21.7779 16.7293 21.7779 17.8182C21.7779 18.9071 20.887 19.798 19.7981 19.798ZM31.6365 28.7071H25.7375C24.6486 28.7071 23.7577 27.8162 23.7577 26.7273C23.7577 25.6384 24.6486 24.7475 25.7375 24.7475H31.6365C32.7254 24.7475 33.6163 25.6384 33.6163 26.7273C33.6163 27.8162 32.7254 28.7071 31.6365 28.7071ZM19.7981 28.7071C18.7092 28.7071 17.8183 27.8162 17.8183 26.7273C17.8183 25.6384 18.7092 24.7475 19.7981 24.7475C20.887 24.7475 21.7779 25.6384 21.7779 26.7273C21.7779 27.8162 20.887 28.7071 19.7981 28.7071Z", className: s.svgContentLines }), (0, i.jsx)("path", { d: "M3.9596 36H13.8586V0H3.9596C1.78182 0 0 1.78182 0 3.9596V32.0404C0 34.2182 1.78182 36 3.9596 36Z", className: s.svgContentLeft }), (0, i.jsx)("path", { d: "M6.9293 10.8889C5.24647 10.8889 3.9596 9.60202 3.9596 7.91919C3.9596 6.23636 5.24647 4.94949 6.9293 4.94949C8.61212 4.94949 9.89899 6.23636 9.89899 7.91919C9.89899 9.60202 8.61212 10.8889 6.9293 10.8889ZM6.9293 20.7879C5.24647 20.7879 3.9596 19.501 3.9596 17.8182C3.9596 16.1354 5.24647 14.8485 6.9293 14.8485C8.61212 14.8485 9.89899 16.1354 9.89899 17.8182C9.89899 19.501 8.61212 20.7879 6.9293 20.7879ZM6.9293 30.6869C5.24647 30.6869 3.9596 29.4 3.9596 27.7172C3.9596 26.0343 5.24647 24.7475 6.9293 24.7475C8.61212 24.7475 9.89899 26.0343 9.89899 27.7172C9.89899 29.4 8.61212 30.6869 6.9293 30.6869Z", className: s.svgDots }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M41.4328 33L46 37.7129L43.7836 40L37 32.9999L39.2164 30.7128L39.2165 30.7129L43.7836 26L46 28.2871L41.4328 33Z", className: s.svgTag }), (0, i.jsx)("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M54.7821 35.2871L54.7841 35.2892L57 33.0021L50.2159 26L48 28.2871L52.5662 33L48 37.7129L50.2159 40L54.7821 35.2871Z", className: s.svgTag })] }) }) }, 153850: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AppLayerContainer: function() { return _ }, AppLayerProvider: function() { return c }, AppReferencePositionLayer: function() { return I }, appLayerContext: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("302901"), a = n("539907"); let { Layer: o, LayerContainer: l, LayerProvider: u, layerContext: d } = (0, s.createLayer)("App"), _ = l, c = u, E = d, I = r.forwardRef(function(e, t) { return (0, i.jsx)(o, { children: (0, i.jsx)(a.ReferencePositionLayer, { ref: t, ...e }) }) }); t.default = o }, 482207: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChatLayerContainer: function() { return a }, ChatLayerProvider: function() { return o } }); let { Layer: i, LayerContainer: r, LayerProvider: s } = (0, n("302901").createLayer)("Chat"), a = r, o = s; t.default = i }, 725568: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FullScreenLayers: function() { return p }, closeFullScreenLayer: function() { return C }, openFullScreenLayer: function() { return O }, useFullScreenLayerStore: function() { return h } }), n("47120"); var i, r, s = n("735250"), a = n("470079"), o = n("97613"), l = n.n(o), u = n("570567"), d = n("652874"), _ = n("477690"), c = n("481060"), E = n("714338"), I = n("624138"), T = n("153850"), f = n("162534"); let S = (0, I.cssValueToNumber)(_.default.FULL_SCREEN_LAYER_ANIMATION_DURATION); (r = i || (i = {}))[r.ENTERING = 1] = "ENTERING", r[r.ENTERED = 2] = "ENTERED", r[r.EXITING = 3] = "EXITING", r[r.EXITED = 4] = "EXITED"; let h = (0, d.default)(e => ({ fullScreenLayers: [], addLayer: t => e(e => { let { fullScreenLayers: n } = e; return { fullScreenLayers: [...n, t] } }) })); function A(e) { let { item: t } = e, n = a.useRef(null); return (0, c.useFocusLock)(n), a.useEffect(() => (E.default.disable(), E.default.enableTemp(function(e) { return { POP_LAYER: { binds: ["esc"], comboKeysBindGlobal: !0, action() { C(e) } } } }(t.key)), () => { E.default.disableTemp() }), [t.key]), (0, s.jsx)(t.LayerComponent, { children: (0, s.jsxs)("div", { className: f.root, ref: n, children: [(0, s.jsx)("div", { className: f.drag }), t.render({ transitionState: null != t ? t.transitionState : 3, closeLayer: () => C(t.key) })] }) }) } let m = { enter: f.enter, enterActive: f.enterActive, enterDone: f.enterDone, exit: f.exit, exitActive: f.exitActive, exitDone: f.exitDone }, N = { enter: f.enterReducedMotion, enterActive: f.enterActiveReducedMotion, enterDone: f.enterDoneReducedMotion, exit: f.exitReducedMotion, exitActive: f.exitActiveReducedMotion, exitDone: f.exitDoneReducedMotion }; function p() { let { reducedMotion: e } = a.useContext(c.AccessibilityPreferencesContext), t = e.enabled ? N : m, n = h(e => e.fullScreenLayers); return (0, s.jsx)(u.TransitionGroup, { children: n.map(e => (0, s.jsx)(u.CSSTransition, { classNames: t, timeout: S, onEntered: () => { h.setState({ fullScreenLayers: n.map(t => t.key === e.key ? { ...t, transitionState: 2 } : t) }) }, unmountOnExit: !0, children: (0, s.jsx)(A, { item: e }) }, e.key)) }) } function O(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Object.freeze({}), { layerKey: n, Layer: i } = t, r = null != n ? n : l()(); return h.setState(t => ({ fullScreenLayers: [...t.fullScreenLayers, { key: r, transitionState: 1, LayerComponent: null != i ? i : T.default, render: e }] })), r } function C(e) { h.setState(t => ({ fullScreenLayers: t.fullScreenLayers.filter(t => t.key !== e) })) } }, 78415: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VerificationLayerContainer: function() { return a }, VerificationLayerProvider: function() { return o } }); let { Layer: i, LayerContainer: r, LayerProvider: s } = (0, n("302901").createLayer)("Verification"), a = r, o = s; t.default = i }, 727218: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("323626"), l = n("928217"); let u = Object.freeze({ SIZE_10: l.size10, SIZE_12: l.size12, SIZE_14: l.size14, SIZE_16: l.size16, SIZE_20: l.size20, SIZE_24: l.size24, SIZE_32: l.size32 }), d = e => { let { id: t, muted: n = !1, className: r = o.wrapper, size: l = u.SIZE_14, selectable: d = !1, children: _, color: c, onClick: E, onContextMenu: I, style: T, title: f, uppercase: S } = e; return (0, i.jsx)(a.H, { role: null != E ? "button" : void 0, onClick: E, onContextMenu: I, id: t, className: s()(r, { [o.base]: !0, [l]: !0, [o.selectable]: d, [o.muted]: n, [o.uppercase]: S }), title: f, style: null != c ? { ...T, color: c } : T, children: _ }) }; d.Sizes = u, t.default = d }, 154921: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("674298"), o = n("928217"); let l = Object.freeze({ STANDARD: a.colorStandard, MUTED: a.colorMuted, ERROR: a.colorError, BRAND: a.colorBrand, LINK: a.colorLink, HEADER_PRIMARY: a.colorHeaderPrimary, HEADER_SECONDARY: a.colorHeaderSecondary, STATUS_YELLOW: a.colorStatusYellow, STATUS_GREEN: a.colorStatusGreen, STATUS_RED: a.colorStatusRed, INTERACTIVE_ACTIVE: a.colorInteractiveActive, INTERACTIVE_NORMAL: a.colorInteractiveNormal, ALWAYS_WHITE: a.colorWhite, CUSTOM: null }), u = Object.freeze({ SIZE_10: o.size10, SIZE_12: o.size12, SIZE_14: o.size14, SIZE_16: o.size16, SIZE_20: o.size20, SIZE_24: o.size24, SIZE_32: o.size32 }), d = e => { let { className: t, color: n = l.STANDARD, size: r = u.SIZE_14, tag: o = "div", selectable: d = !1, strong: _ = !1, children: c, style: E, "aria-label": I, ...T } = e; return (0, i.jsx)(o, { "aria-label": I, className: s()(n, r, t, { [a.selectable]: d, [a.strong]: _ }), style: E, ...T, children: c }) }; d.Colors = l, d.Sizes = u, t.default = d }, 332870: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("648414"), o = n("93879"), l = n("974029"), u = n("481479"), d = n("634648"), _ = n("630641"), c = n("908434"), E = n("308570"), I = n("632184"), T = n("170039"), f = n("934458"), S = n("227356"), h = n("689938"), A = n("504649"); t.default = function(e) { let { iconType: t, children: n } = e, r = null; switch (t) { case "voice": r = (0, i.jsx)(I.default, { className: A.icon, "aria-label": h.default.Messages.VOICE_CHANNEL }); break; case "voice-locked": r = (0, i.jsx)(_.default, { className: A.icon, "aria-label": h.default.Messages.VOICE_CHANNEL_LOCKED }); break; case "stage": r = (0, i.jsx)(T.default, { className: A.icon, "aria-label": h.default.Messages.STAGE_CHANNEL }); break; case "stage-locked": r = (0, i.jsx)(_.default, { className: A.icon, "aria-label": h.default.Messages.STAGE_CHANNEL_LOCKED }); break; case "thread": r = (0, i.jsx)(f.default, { className: A.icon, "aria-label": h.default.Messages.THREAD }); break; case "text": r = (0, i.jsx)(o.default, { className: A.icon, "aria-label": h.default.Messages.CHANNEL }); break; case "forum": r = (0, i.jsx)(u.default, { className: A.icon, "aria-label": h.default.Messages.FORUM_CHANNEL }); break; case "post": r = (0, i.jsx)(d.default, { className: A.icon, "aria-label": h.default.Messages.FORUM_POST }); break; case "home": case "guide": r = (0, i.jsx)(E.default, { className: A.icon, "aria-label": h.default.Messages.SERVER_GUIDE }); break; case "browse": case "customize": r = (0, i.jsx)(a.default, { className: A.icon, "aria-label": h.default.Messages.CHANNEL_BROWSER_TITLE }); break; case "message": r = (0, i.jsx)(l.default, { className: A.icon, "aria-label": h.default.Messages.MESSAGE_A11Y_ROLE_DESCRIPTION }); break; case "locked": r = (0, i.jsx)(_.default, { className: A.icon, "aria-label": h.default.Messages.NO_ACCESS }); break; case "media": r = (0, i.jsx)(c.default, { className: A.icon, "aria-label": h.default.Messages.MEDIA_CHANNEL }) } return (0, i.jsxs)("span", { className: s()("channelWithIcon", { [A.iconMentionText]: "text" === t }), children: [(0, i.jsx)(S.default, { children: r }), null != n && "" !== n ? (0, i.jsx)("span", { className: A.name, children: n }) : null] }) } }, 750156: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("346656"), o = n("227356"), l = n("816184"); t.default = function(e) { let { guild: t, children: n } = e, r = null != t ? (0, i.jsx)(a.default, { guild: t, size: a.default.Sizes.MEDIUM, className: s()(l.icon, null == t.icon ? l.textIcon : l.imageIcon), active: !0 }) : null; return (0, i.jsxs)("span", { children: [(0, i.jsx)(o.default, { children: r }), (0, i.jsx)("span", { className: l.name, children: n })] }) } }, 442514: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("692437"), s = n("590095"); t.default = function() { return (0, i.jsx)(r.default, { className: s.icon }) } }, 979516: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("974029"), s = n("689938"), a = n("343956"); t.default = function() { return (0, i.jsx)(r.default, { className: a.icon, "aria-label": s.default.Messages.MESSAGE_A11Y_ROLE_DESCRIPTION }) } }, 227356: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("54239"); function s(e) { let { children: t } = e; return (0, i.jsxs)("span", { className: r.nowrap, children: [t, "⁠"] }) } }, 671612: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("399606"), l = n("481060"), u = n("596454"), d = n("315744"), _ = n("208049"), c = n("135869"), E = n("763296"), I = n("22382"), T = n("747071"), f = n("964297"), S = n("632184"), h = n("361029"); t.default = function(e) { let { soundId: t, jumbo: n = !1 } = e, { currentPreviewRef: s } = r.useContext(c.default), A = (0, o.useStateFromStores)([E.default], () => E.default.getSoundById(t)), m = (null == A ? void 0 : A.emojiId) != null || (null == A ? void 0 : A.emojiName) != null, [N, p] = r.useState(!1), O = (0, d.useSoundmojiExperiment)("soundmoji_chat_mention"), C = r.useCallback(() => { var e; null == A && (0, _.maybeFetchSoundboardSounds)(); let n = new Audio((0, I.default)(t)); null != s.current && s.current.pause(), s.current = n, n.currentTime = 0, n.volume = (0, T.default)(null !== (e = null == A ? void 0 : A.volume) && void 0 !== e ? e : .5), p(!0), n.play(), n.addEventListener("ended", () => { p(!1) }, { once: !0 }) }, [t, A, s, p]); return O ? null == A ? (0, i.jsxs)(l.Clickable, { title: "Risky Click", tag: "span", onClick: C, className: h.container, children: [(0, i.jsx)(S.default, { className: h.unknownSound }), (0, i.jsx)(l.Text, { tag: "span", variant: "text-md/normal", color: "none", className: h.text, children: "Unknown" })] }) : n ? (0, i.jsxs)(l.Clickable, { onClick: C, className: h.jumboContainer, children: [(0, i.jsx)("div", { className: a()(h.jumboOverlay, { [h.playing]: N }), children: (0, i.jsx)(f.default, { className: h.__invalid_jumboPlayIcon }) }), m && (0, i.jsx)(u.default, { emojiId: null == A ? void 0 : A.emojiId, emojiName: null == A ? void 0 : A.emojiName, className: h.jumboEmoji }), (0, i.jsx)(l.Text, { tag: "span", variant: "text-lg/normal", color: "none", className: h.text, children: A.name })] }) : (0, i.jsxs)(l.Clickable, { tag: "span", onClick: C, className: h.container, children: [m && (0, i.jsx)(u.default, { emojiId: null == A ? void 0 : A.emojiId, emojiName: null == A ? void 0 : A.emojiName, className: h.emoji }), (0, i.jsx)(l.Text, { tag: "span", variant: "text-md/normal", color: "none", className: h.text, children: A.name })] }) : null } }, 132338: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("38068"), l = n("689938"), u = n("975681"); t.default = r.forwardRef(function(e, t) { let { className: n, contentClassName: r, isUnread: s, children: d, id: _, role: c, "aria-label": E } = e; return (0, i.jsxs)("div", { className: a()(n, { [u.divider]: !0, [u.isUnread]: s, [u.hasContent]: null != d }), ref: t, id: _, role: c, "aria-label": E, children: [null != d ? (0, i.jsx)("span", { className: a()(u.content, r), children: d }) : null, s ? (0, i.jsxs)("span", { className: u.unreadPill, children: [(0, i.jsx)(o.default, { foreground: u.unreadPillCapStroke, className: u.unreadPillCap }), l.default.Messages.NEW] }) : null] }) }) }, 114484: function(e, t, n) { "use strict"; n.r(t), n.d(t, { InteractionStatusMessage: function() { return A }, getFailedContent: function() { return h } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("207561"), l = n("442837"), u = n("481060"), d = n("292419"), _ = n("282397"), c = n("188597"), E = n("759231"), I = n("981631"), T = n("689938"), f = n("702149"); function S(e) { return { text: e, icon: (0, i.jsx)(u.Dots, { className: f.icon, dotRadius: 3.5, themed: !0 }) } } function h(e) { return { text: null != e ? e : T.default.Messages.APPLICATION_COMMAND_FAILED, color: "text-danger", icon: (0, i.jsx)(E.default, { width: 16, height: 16, className: a()(f.icon, f.errorIcon) }) } } function A(e) { let { className: t, icon: n, text: r, color: s } = e; return (0, i.jsxs)("div", { className: a()(f.wrapper, t), children: [n, (0, i.jsx)(u.Text, { variant: "text-md/normal", color: s, scaleFontToUserSetting: !0, children: r })] }) } t.default = r.memo(function(e) { let { message: t, className: n, component: s } = e, a = (0, o.useForceUpdate)(), u = (0, l.useStateFromStores)([_.default], () => _.default.getInteraction(t), [t]); r.useEffect(() => { let e = null; if (t.hasFlag(I.MessageFlags.LOADING) && null != u) { let n = (0, c.getInteractionTimeoutTimestamp)(t.id) - Date.now(); n > 0 && (e = setTimeout(() => a(), 1e3 + n)) } return () => { clearTimeout(e) } }, [a, u, t]); let E = null; if (null == s) E = function(e, t) { switch ((0, c.getInteractionStatusViewState)(t, e)) { case c.InteractionStatusViewState.SENDING: return S(T.default.Messages.APPLICATION_COMMAND_SENDING); case c.InteractionStatusViewState.CREATED: return S(T.default.Messages.APPLICATION_COMMAND_WAITING.format({ applicationName: t.author.username })); case c.InteractionStatusViewState.TIMED_OUT: return h(T.default.Messages.APPLICATION_COMMAND_TIMED_OUT); case c.InteractionStatusViewState.FAILED: return h(t.interactionError) } }(u, t); else { let e = (0, d.getLayoutComponentErrorText)(u, t, s); null != e && (E = h(e)) } if (null == E) return null; let { text: f, icon: m, color: N } = E; return (0, i.jsx)(A, { icon: m, text: f, className: n, color: N }) }) }, 998951: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("822545"); t.default = function(e) { let { className: t, compact: n = !1, contentOnly: r = !1, zalgo: l = !0, disableInteraction: u = !1, childrenRepliedMessage: d, childrenExecutedCommand: _, childrenHeader: c, childrenSystemMessage: E, childrenButtons: I, childrenMessageContent: T, childrenAccessories: f, messageRef: S, focusProps: h = { offset: { left: 4, right: 4 } }, hasThread: A, isSystemMessage: m, hasReply: N, ...p } = e, O = (0, i.jsx)(a.FocusRing, { ...h, children: (0, i.jsxs)("div", { className: s()(t, { [o.wrapper]: !0, [o.contentOnly]: r, [o.compact]: n, [o.cozy]: !n, [o.zalgo]: l, [o.hasThread]: A, [o.isSystemMessage]: m, [o.hasReply]: N }), ref: S, ...p, role: "article", children: [d, _, (0, i.jsxs)("div", { className: o.contents, children: [E, c, null == E && T] }), f, null != I ? (0, i.jsx)("div", { className: o.buttonContainer, children: I }) : null] }) }); return u ? (0, i.jsx)(a.FocusBlock, { children: O }) : O } }, 113039: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getContent: function() { return f }, memoizeMessageProps: function() { return S } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("653603"), l = n.n(o), u = n("902704"), d = n("453687"), _ = n("534761"), c = n("981631"), E = n("689938"), I = n("946278"), T = n("822545"); function f(e, t) { return e.type === c.MessageTypes.VOICE_HANGOUT_INVITE ? "" : e.hasFlag(c.MessageFlags.SOURCE_MESSAGE_DELETED) ? E.default.Messages.SOURCE_MESSAGE_DELETED : t } function S(e, t) { var n, i; let { message: r } = t, { message: s } = e; return (0, u.default)(e, t, ["message"]) && r.content === s.content && r.state === s.state && (null === (n = r.editedTimestamp) || void 0 === n ? void 0 : n.toString()) === (null === (i = s.editedTimestamp) || void 0 === i ? void 0 : i.toString()) } t.default = r.memo(function(e) { var t; let { className: n, message: s, children: o, content: u, onUpdate: S, contentRef: h } = e, A = s.isEdited(), m = s.state === c.MessageStates.SEND_FAILED, N = s.state === c.MessageStates.SENDING, p = s.isCommandType(), O = null === (t = s.editedTimestamp) || void 0 === t ? void 0 : t.toString(), C = r.useRef(!1); return r.useLayoutEffect(() => { C.current ? null != S && S() : C.current = !0 }, [S, s.content, u, O, o]), (0, i.jsxs)("div", { id: (0, d.getMessageContentId)(s), ref: h, className: a()(n, I.markup, { [T.messageContent]: !0, [T.isSending]: N && !p, [T.markupRtl]: "rtl" === l()(s.content), [T.isFailed]: m, [T.isUnsupported]: s.isUnsupported }), children: [null != o ? o : f(s, u), A && null != s.editedTimestamp && (0, i.jsxs)(i.Fragment, { children: [" ", (0, i.jsx)(_.default, { timestamp: s.editedTimestamp, isEdited: !0, isInline: !1, children: (0, i.jsxs)("span", { className: T.edited, children: ["(", E.default.Messages.MESSAGE_EDITED, ")"] }) })] })] }) }, S) }, 778947: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BaseMessageHeader: function() { return j }, default: function() { return z }, renderUsername: function() { return H }, useAvatar: function() { return Y } }), n("47120"), n("653041"), n("789020"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("873546"), l = n("442837"), u = n("481060"), d = n("100527"), _ = n("906732"), c = n("366030"), E = n("71619"), I = n("340797"), T = n("276554"), f = n("453687"), S = n("304176"), h = n("98278"), A = n("869765"), m = n("243317"), N = n("621853"), p = n("484459"), O = n("204197"), C = n("740492"), R = n("430824"), g = n("496675"), L = n("594174"), v = n("789695"), D = n("176278"), M = n("768581"), y = n("585483"), P = n("630388"), U = n("74538"), b = n("534761"), G = n("307187"), w = n("750858"), k = n("981631"), B = n("689938"), V = n("822545"), x = n("255963"); function F(e) { let { avatarSrc: t, avatarDecorationSrc: n, compact: r, onClick: s, onContextMenu: o, onMouseDown: l, onMouseEnter: u, onMouseLeave: d, onKeyDown: _, showCommunicationDisabledStyles: c = !1, className: E } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("img", { onClick: s, onContextMenu: o, onMouseDown: l, onKeyDown: _, onMouseEnter: u, onMouseLeave: d, src: t, "aria-hidden": !0, className: a()(E, V.avatar, { [V.compact]: r, [V.clickable]: null != s, [V.communicationDisabledOpacity]: c }), alt: " " }), null == n || r ? null : (0, i.jsx)("img", { className: V.avatarDecoration, src: n, alt: " ", "aria-hidden": !0 })] }) } function H(e, t, n) { let { message: r, channel: s, author: a, compact: o = !1, onContextMenu: l, showUsernamePopout: u, roleIcon: d, onClickUsername: _, onPopoutRequestClose: c } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(w.default, { message: r, channel: s, author: a, compact: o, roleIcon: d, showPopout: u, renderPopout: t, onClick: _, onContextMenu: l, onPopoutRequestClose: c, decorations: n, renderRemixTag: !0 }), o && (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("i", { className: V.separator, children: ":" }), " "] })] }) } function Y(e) { var t, n; let { props: s, guildId: a, handleRenderPopout: c, showCommunicationDisabledStyles: E = !1, className: I } = e, { message: T, author: f, compact: S = !1, subscribeToGroupId: h, animate: A = !0, onContextMenu: m, onClickAvatar: N, onPopoutRequestClose: R, showAvatarPopout: g } = s, [L, v] = r.useState(!1), { analyticsLocations: D } = (0, _.default)(d.default.AVATAR), P = (0, l.useStateFromStores)([C.default], () => { var e; return null !== (e = s.displayCompactAvatars) && void 0 !== e ? e : C.default.displayCompactAvatars }), U = null != T.messageReference && null != T.webhookId, b = T.author, { id: G } = b, w = S ? 32 : 80, { avatarSrc: B, avatarDecorationSrc: V, eventHandlers: x } = (0, O.default)({ user: b, guildId: a, size: w, animateOnHover: null != h ? !L : !A, showPending: !0 }), H = T.isInteractionPlaceholder(), Y = r.useMemo(() => { var e, t; return H && null == b.avatar && (null === (e = T.application) || void 0 === e ? void 0 : e.icon) != null ? null !== (t = M.default.getApplicationIconURL({ id: T.application.id, icon: T.application.icon, size: w, fallbackAvatar: !1 })) && void 0 !== t ? t : B : B }, [H, null === (t = T.application) || void 0 === t ? void 0 : t.icon, null === (n = T.application) || void 0 === n ? void 0 : n.id, b.avatar, w, B]); if (r.useEffect(() => { if (null != h) return y.ComponentDispatch.subscribeKeyed(k.ComponentActionsKeyed.ANIMATE_CHAT_AVATAR, "".concat(h, ":").concat(G), v), () => void y.ComponentDispatch.unsubscribeKeyed(k.ComponentActionsKeyed.ANIMATE_CHAT_AVATAR, "".concat(h, ":").concat(G), v) }, [G, h]), !S || P) return null != c && null != g ? (0, i.jsx)(_.AnalyticsLocationProvider, { value: D, children: (0, i.jsx)(u.Popout, { preload: U ? void 0 : function() { return (0, p.maybeFetchUserProfileForPopout)(T.author.id, null != f.guildMemberAvatar && null != a ? M.default.getGuildMemberAvatarURLSimple({ guildId: a, userId: T.author.id, avatar: f.guildMemberAvatar, size: 80 }) : T.author.getAvatarURL(void 0, 80, !1), { guildId: a, channelId: T.channel_id }) }, renderPopout: c, shouldShow: g, position: o.isMobile ? "window_center" : "right", onRequestClose: R, children: e => F({ ...x, avatarSrc: Y, avatarDecorationSrc: V, compact: S, onClick: N, onContextMenu: m, onMouseDown: e.onMouseDown, onKeyDown: e.onKeyDown, showCommunicationDisabledStyles: E, className: I }) }) }) : (0, i.jsx)(_.AnalyticsLocationProvider, { value: D, children: F({ ...x, avatarSrc: Y, avatarDecorationSrc: V, compact: S, onClick: N, onContextMenu: m, onMouseDown: void 0, onKeyDown: void 0, showCommunicationDisabledStyles: E, className: I }) }) } function j(e) { let { message: t, avatar: n, username: r, usernameSpanId: s, usernameClassName: o, compact: l, showTimestamp: d, showTimestampOnHover: _, ariaLabelledBy: c, ariaDescribedBy: E, className: I, messageClassname: T, badges: S } = e; return (0, i.jsxs)(i.Fragment, { children: [!l && n, (0, i.jsxs)(u.H, { className: a()(V.header, I), "aria-describedby": E, "aria-labelledby": c, children: [d && l && (0, i.jsx)(b.default, { id: (0, f.getMessageTimestampId)(t), compact: !0, timestamp: t.timestamp, isVisibleOnlyOnHover: _, className: T, isInline: !1 }), l && n, (0, i.jsx)("span", { id: s, className: o, children: r }), d && !l && (0, i.jsx)(b.default, { id: (0, f.getMessageTimestampId)(t), timestamp: t.timestamp, className: T }), null != S && S.length > 0 ? (0, i.jsx)("div", { className: V.badgesContainer, children: S }) : null] })] }) } let W = e => { !e && (0, h.navigateToPremiumMarketingPage)() }; function K(e) { let { currentUserIsPremium: t, author: n } = e, r = (0, l.useStateFromStores)([N.default], () => { var e; return null === (e = N.default.getUserProfile(n.id)) || void 0 === e ? void 0 : e.premiumSince }); return (0, i.jsx)(u.Tooltip, { tooltipClassName: V.nitroAuthorBadgeTootip, shouldShow: null != r, text: B.default.Messages.PREMIUM_BADGE_TOOLTIP.format({ date: r }), onTooltipShow: () => (0, p.default)(n.id), children: e => (0, i.jsx)(u.Clickable, { className: V.nitroAuthorBadgeContainer, onClick: () => W(t), "aria-label": B.default.Messages.PREMIUM_BADGE_TOOLTIP.format({ date: r }), children: (0, i.jsx)("img", { alt: "", className: V.nitroBadgeSvg, src: x, ...e }) }) }) } function z(e) { let { message: t, repliedMessage: n, compact: s = !1, renderPopout: o, showTimestampOnHover: d, roleIcon: _, subscribeToGroupId: h, hideTimestamp: N, className: p, channel: O } = e, M = r.useMemo(() => null != o ? e => o(e, t) : void 0, [o, t]), [, y] = (0, E.default)(t.author.id, e.guildId), b = (0, l.useStateFromStores)([R.default], () => R.default.getGuild(e.guildId), [e.guildId]), x = null != t.author && null != b && g.default.canManageUser(k.Permissions.MODERATE_MEMBERS, t.author, b), F = y && x, W = Y({ props: e, guildId: e.guildId, handleRenderPopout: M, showCommunicationDisabledStyles: F }), z = (0, l.useStateFromStores)([C.default], () => { var t; return null !== (t = e.displayCompactAvatars) && void 0 !== t ? t : C.default.displayCompactAvatars }), Z = (!s || z) && null != _ && null != b ? (0, i.jsx)(u.Popout, { animation: u.Popout.Animation.TRANSLATE, align: "center", autoInvert: !0, nudgeAlignIntoViewport: !0, position: "right", renderPopout: () => (0, i.jsx)(S.default, { roleIcon: _, guild: b }), children: e => { let { onClick: t } = e; return (0, i.jsx)(D.default, { ..._, className: V.roleIcon, onClick: t }) } }, "role-icon-children") : (!s || z) && null != _ ? (0, i.jsx)(D.default, { ..._, className: V.roleIcon }, "role-icon-children") : null, X = (0, G.renderSystemTag)({ message: t, channel: O, user: null == t ? void 0 : t.author, compact: s, isRepliedMessage: !1 }), Q = [], q = L.default.getCurrentUser(), J = U.default.isPremium(t.author), $ = U.default.isPremium(q), ee = null == O ? void 0 : O.isPrivate(); (0, T.shouldShowNitroBadge)(null != _, "Message Username") && J && !s && !ee && Q.push((0, i.jsx)(K, { currentUserIsPremium: $, author: t.author }, "nitro-author")), null != Z && Q.push(Z), null != b && Q.push((0, i.jsx)(I.default, { guild: b, message: t }, "new-member")), null != O && null != b && Q.push((0, i.jsx)(c.default, { guild: b, channel: O, userId: t.author.id, messageId: t.id }, "connections")); let et = []; (0, P.hasFlag)(t.flags, k.MessageFlags.SUPPRESS_NOTIFICATIONS) && et.push((0, i.jsx)(m.default, {}, "suppress-notifications")); let en = {}; en[w.UsernameDecorationTypes.SYSTEM_TAG] = X, en[w.UsernameDecorationTypes.BADGES] = Q; let ei = H(e, M, en), er = (0, f.getMessageUsernameId)(t, h), es = (0, f.getMessageTimestampId)(t), ea = N ? "".concat(er) : "".concat(er, " ").concat(es), eo = (null == n ? void 0 : n.state) === A.ReferencedMessageState.LOADED ? (0, f.getMessageReplyId)(t) : void 0; return (0, i.jsx)(j, { message: t, avatar: W, username: (0, i.jsxs)(i.Fragment, { children: [F && (0, i.jsx)(u.Tooltip, { text: B.default.Messages.GUILD_COMMUNICATION_DISABLED_ICON_TOOLTIP_BODY, children: e => (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(v.default, { ...e, width: 12, height: 12, className: s ? V.compactCommunicationDisabled : V.communicationDisabled }), (0, i.jsx)(u.HiddenVisually, { children: B.default.Messages.GUILD_COMMUNICATION_DISABLED_BOTTOM_SHEET_TITLE })] }) }), ei] }), usernameSpanId: (0, f.getMessageUsernameId)(t, h), usernameClassName: a()(V.headerText, { [V.hasRoleIcon]: null != Z, [V.hasBadges]: null != X || et.length > 0 }), compact: s, showTimestamp: !0 !== N, showTimestampOnHover: d, ariaLabelledBy: ea, ariaDescribedBy: eo, className: p, badges: et }) } }, 51063: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }), n("789020"); var i = n("735250"); n("470079"); var r = n("913527"), s = n.n(r), a = n("481060"), o = n("835473"), l = n("366695"), u = n("630388"), d = n("981631"), _ = n("689938"), c = n("707533"); function E(e) { let { application: t, messageTimestamp: n } = e; return (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)(l.default, { size: l.default.Sizes.LARGE, game: t }), (0, i.jsxs)("div", { className: c.textContainer, children: [(0, i.jsx)(a.Text, { className: c.timestamp, variant: "text-xs/medium", color: "text-muted", children: s()(n).format("LLLL") }), (0, i.jsx)(a.Text, { variant: "text-md/normal", color: "interactive-active", children: _.default.Messages.MESSAGE_GAME_ICON_TOOLTIP_CONTENT.format({ applicationName: t.name }) })] })] }) } function I(e) { let { message: t } = e, n = (0, o.useGetOrFetchApplication)(t.applicationId); return null != n && (0, u.hasFlag)(n.flags, d.ApplicationFlags.SOCIAL_LAYER_INTEGRATION) ? (0, i.jsx)(a.Tooltip, { hideOnClick: !0, position: "top", "aria-label": _.default.Messages.MESSAGE_GAME_ICON_TOOLTIP, tooltipClassName: c.gameMessageTooltip, tooltipContentClassName: c.gameMessageTooltipContent, text: (0, i.jsx)(E, { application: n, messageTimestamp: t.timestamp }), children: e => (0, i.jsx)(a.Clickable, { tag: "span", ...e, children: (0, i.jsx)(l.default, { className: c.gameIcon, size: l.default.Sizes.XXSMALL, game: n }) }) }) : null } }, 534761: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("223021"), l = n("55935"), u = n("689938"), d = n("822545"); t.default = function(e) { let { children: t, className: n, compact: r = !1, timestamp: _, isVisibleOnlyOnHover: c = !1, cozyAlt: E = !1, isInline: I = !0, id: T, isEdited: f = !1 } = e, S = (0, l.accessibilityLabelCalendarFormat)(_), h = r ? (0, l.dateFormat)(_, "LT") : (0, l.calendarFormat)(_), A = r ? (0, o.default)(h) : null, m = f ? u.default.Messages.MESSAGE_EDITED_TIMESTAMP_A11Y_LABEL.format({ timeFormatted: S }) : S; return (0, i.jsx)("span", { className: s()(n, A, { [d.timestamp]: !0, [d.timestampVisibleOnHover]: c, [d.timestampInline]: I, [d.alt]: E }), children: (0, i.jsx)(a.Tooltip, { text: (0, l.dateFormat)(_, "LLLL"), "aria-label": m, tooltipClassName: d.timestampTooltip, delay: 750, children: e => (0, i.jsx)("time", { ...e, id: T, dateTime: _.toISOString(), children: null != t ? t : (0, i.jsxs)(i.Fragment, { children: [(0, i.jsx)("i", { className: d.separator, "aria-hidden": !0, children: r ? "[" : " — " }), h, r && (0, i.jsxs)("i", { className: d.separator, "aria-hidden": !0, children: ["]", " "] })] }) }) }) }) } }, 768760: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { MEDIA_MOSAIC_MAX_HEIGHT: function() { return a }, MEDIA_MOSAIC_MAX_WIDTH: function() { return s }, MINIMUM_MEDIA_MOSAIC_DIM: function() { return o }, MediaLayoutType: function() { return i }, SINGLE_LINE_MESSAGE_DEFAULT_ICON_SIZE: function() { return l } }); let s = 550, a = 350, o = 40; (r = i || (i = {})).STATIC = "STATIC", r.RESPONSIVE = "RESPONSIVE", r.MOSAIC = "MOSAIC"; let l = 20 }, 512665: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return x }, renderSingleLineMessage: function() { return V } }); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("913527"), l = n.n(o), u = n("138270"), d = n("304497"), _ = n("481060"), c = n("100527"), E = n("906732"), I = n("978003"), T = n("39154"), f = n("372900"), S = n("453687"), h = n("123145"), A = n("223021"), m = n("79390"), N = n("869765"), p = n("403132"), O = n("378233"), C = n("377617"), R = n("84017"), g = n("748500"), L = n("836879"), v = n("191741"), D = n("768581"), M = n("55935"), y = n("823379"), P = n("113039"), U = n("768760"), b = n("981631"), G = n("689938"), w = n("822545"); function k(e) { let { width: t = 12, height: n = 8, color: r = "currentColor", className: s, foreground: a } = e; return (0, i.jsx)("svg", { className: s, width: t, height: n, viewBox: "0 0 12 8", children: (0, i.jsx)("path", { d: "M0.809739 3.59646L5.12565 0.468433C5.17446 0.431163 5.23323 0.408043 5.2951 0.401763C5.35698 0.395482 5.41943 0.406298 5.4752 0.432954C5.53096 0.45961 5.57776 0.50101 5.61013 0.552343C5.64251 0.603676 5.65914 0.662833 5.6581 0.722939V2.3707C10.3624 2.3707 11.2539 5.52482 11.3991 7.21174C11.4028 7.27916 11.3848 7.34603 11.3474 7.40312C11.3101 7.46021 11.2554 7.50471 11.1908 7.53049C11.1262 7.55626 11.0549 7.56204 10.9868 7.54703C10.9187 7.53201 10.857 7.49695 10.8104 7.44666C8.72224 5.08977 5.6581 5.63359 5.6581 5.63359V7.28135C5.65831 7.34051 5.64141 7.39856 5.60931 7.44894C5.5772 7.49932 5.53117 7.54004 5.4764 7.5665C5.42163 7.59296 5.3603 7.60411 5.29932 7.59869C5.23834 7.59328 5.18014 7.57151 5.13128 7.53585L0.809739 4.40892C0.744492 4.3616 0.691538 4.30026 0.655067 4.22975C0.618596 4.15925 0.599609 4.08151 0.599609 4.00269C0.599609 3.92386 0.618596 3.84612 0.655067 3.77562C0.691538 3.70511 0.744492 3.64377 0.809739 3.59646Z", className: a, fill: r }) }) } function B(e) { let { width: t = 18, height: n = 18, className: r, foreground: s } = e; return (0, i.jsx)("svg", { className: r, width: t, height: n, viewBox: "0 0 18 18", children: (0, i.jsx)("path", { fill: "#3ba55c", d: "M0 8h14.2l-3.6-3.6L12 3l6 6-6 6-1.4-1.4 3.6-3.6H0", className: s }) }) } function V(e, t, n, r, s) { let a, o, l, _; let c = (0, T.default)(e), { trailingIconClass: E, leadingIconClass: f, iconSize: S } = s, h = null == t || "" === t || Array.isArray(t) && 0 === t.length, A = (0, O.getMessageStickers)(c).length > 0, N = null != c.interaction, p = c.hasFlag(b.MessageFlags.IS_VOICE_MESSAGE), v = c.isPoll(), D = c.type === b.MessageTypes.POLL_RESULT; if ((0, I.default)(e) && (_ = (0, i.jsx)(u.ArrowAngleRightUpIcon, { className: f, width: S, height: S })), n) a = G.default.Messages.REPLY_QUOTE_MESSAGE_BLOCKED; else if (c.type === b.MessageTypes.CHANNEL_PINNED_MESSAGE) a = G.default.Messages.MESSAGE_PINNED; else if (h) { if (v) { var M, y; o = null == c ? void 0 : null === (y = c.poll) || void 0 === y ? void 0 : null === (M = y.question) || void 0 === M ? void 0 : M.text } else D ? a = (0, m.getPollResultsReplyPreview)(c) : A ? a = G.default.Messages.REPLY_QUOTE_STICKER : N ? a = G.default.Messages.REPLY_QUOTE_COMMAND : p ? a = G.default.Messages.REPLY_QUOTE_VOICE_MESSAGE : (a = G.default.Messages.REPLY_QUOTE_NO_TEXT_CONTENT, l = (0, i.jsx)(R.default, { className: E, width: S, height: S })) } else o = (0, i.jsx)(P.default, { message: c, content: t, className: r }); return A ? l = (0, i.jsx)(L.default, { className: E, width: S, height: S }) : N ? l = (0, i.jsx)(C.default, { className: E, width: S, height: S }) : p ? l = (0, i.jsx)(g.default, { className: E, width: 19 / 24 * S, height: S }) : D ? l = (0, i.jsx)(d.PollsIcon, { className: E, width: S, height: S }) : (c.attachments.length > 0 || c.embeds.length > 0) && (l = (0, i.jsx)(R.default, { className: E, width: S, height: S })), { contentPlaceholder: a, renderedContent: o, trailingIcon: l, leadingIcon: _ } } function x(e) { let t; let { repliedAuthor: n, baseAuthor: s, baseMessage: o, referencedMessage: u, renderPopout: d } = e, I = r.useMemo(() => null != d && u.state === N.ReferencedMessageState.LOADED ? e => d(e, u.message) : void 0, [u, d]), T = function(e, t, n) { let { referencedMessage: r, compact: s, isReplyAuthorBlocked: o, repliedAuthor: l, showAvatarPopout: u, onClickAvatar: d, onContextMenu: I, onPopoutRequestClose: T } = e, { analyticsLocations: f } = (0, E.default)(c.default.AVATAR); if (s || r.state !== N.ReferencedMessageState.LOADED || o) return (0, i.jsx)("div", { className: w.replyBadge, children: (0, i.jsx)(k, { className: w.replyIcon }) }); if (r.message.type === b.MessageTypes.USER_JOIN || r.message.type === b.MessageTypes.ROLE_SUBSCRIPTION_PURCHASE || r.message.type === b.MessageTypes.GUILD_DEADCHAT_REVIVE_PROMPT || r.message.type === b.MessageTypes.GUILD_GAMING_STATS_PROMPT) return (0, i.jsx)(B, { className: w.userJoinSystemMessageIcon }); if (r.message.type === b.MessageTypes.GUILD_APPLICATION_PREMIUM_SUBSCRIPTION) return (0, i.jsx)(v.default, { className: w.ticketIcon }); let S = () => { var e, n, s, o, u; return e = r.message.author, n = l, s = t, o = d, u = I, (0, i.jsx)("img", { alt: "", src: (null == n ? void 0 : n.guildMemberAvatar) != null && null != s ? (0, D.getGuildMemberAvatarURLSimple)({ guildId: s, userId: e.id, avatar: n.guildMemberAvatar }) : e.getAvatarURL(s, 16), onClick: o, onContextMenu: u, className: a()({ [w.replyAvatar]: !0, [w.clickable]: null != o }) }) }; return null != n && null != u ? (0, i.jsx)(E.AnalyticsLocationProvider, { value: f, children: (0, i.jsx)(_.Popout, { renderPopout: n, shouldShow: u, position: "right", onRequestClose: T, children: S }) }) : (0, i.jsx)(E.AnalyticsLocationProvider, { value: f, children: S() }) }(e, r.useContext(f.default), I), m = function(e, t) { let { baseMessage: n, channel: r, referencedMessage: s, showUsernamePopout: a, onClickUsername: o, onContextMenu: l, onPopoutRequestClose: u } = e, d = (null == s ? void 0 : s.state) === N.ReferencedMessageState.LOADED ? s.message : void 0; return null == d || d.type === b.MessageTypes.USER_JOIN || d.type === b.MessageTypes.ROLE_SUBSCRIPTION_PURCHASE || d.type === b.MessageTypes.GUILD_APPLICATION_PREMIUM_SUBSCRIPTION || d.type === b.MessageTypes.GUILD_DEADCHAT_REVIVE_PROMPT || d.type === b.MessageTypes.GUILD_GAMING_STATS_PROMPT ? null : (0, i.jsx)(h.default, { message: d, channel: r, compact: !0, withMentionPrefix: (0, p.default)(n, d), showPopout: a, renderPopout: t, onClick: o, onContextMenu: l, onPopoutRequestClose: u, isRepliedMessage: !0 }) }(e, I), O = function(e) { let { content: t, referencedMessage: n, isReplyAuthorBlocked: r } = e, s = n.state !== N.ReferencedMessageState.DELETED ? e.onClickReply : void 0; switch (n.state) { case N.ReferencedMessageState.LOADED: { let { contentPlaceholder: e, renderedContent: o, trailingIcon: l, leadingIcon: u } = V(n.message, t, r, w.repliedTextContent, { trailingIconClass: w.repliedTextContentTrailingIcon, leadingIconClass: w.repliedTextContentLeadingIcon, iconSize: U.SINGLE_LINE_MESSAGE_DEFAULT_ICON_SIZE }); return (0, i.jsxs)(i.Fragment, { children: [u, (0, i.jsx)(_.Clickable, { className: a()(w.repliedTextPreview, w.clickable), onClick: s, children: (0, i.jsx)(_.BlockInteractions, { children: null != o ? o : (0, i.jsx)("span", { className: w.repliedTextPlaceholder, children: e }) }) }), l] }) } case N.ReferencedMessageState.NOT_LOADED: return (0, i.jsx)(_.Clickable, { className: a()(w.repliedTextPreview, w.clickable), onClick: s, children: (0, i.jsx)("span", { className: w.repliedTextPlaceholder, children: G.default.Messages.REPLY_QUOTE_MESSAGE_NOT_LOADED }) }); case N.ReferencedMessageState.DELETED: return (0, i.jsx)("div", { className: w.repliedTextPreview, children: (0, i.jsx)("span", { className: w.repliedTextPlaceholder, children: G.default.Messages.REPLY_QUOTE_MESSAGE_DELETED }) }); default: (0, y.assertNever)(n) } }(e), C = r.useMemo(() => e.compact ? (0, A.default)((0, M.dateFormat)(l()(), "LT")) : null, [e.compact]); return null != n && null != s && (t = G.default.Messages.CHANNEL_MESSAGE_REPLY_A11Y_LABEL.format({ author: null == s ? void 0 : s.nick, repliedAuthor: null == n ? void 0 : n.nick })), (0, i.jsxs)("div", { id: (0, S.getMessageReplyId)(o), className: a()(w.repliedMessage, C), "aria-label": t, children: [T, m, O] }) } }, 307187: function(e, t, n) { "use strict"; n.r(t), n.d(t, { renderSystemTag: function() { return l } }); var i = n("735250"); n("470079"); var r = n("368859"), s = n("245315"), a = n("467679"), o = n("822545"); function l(e) { let t, { message: n, channel: l, user: u, compact: d, isRepliedMessage: _, hideIcon: c = !1, children: E } = e; return ((null == n ? void 0 : n.isSystemDM()) ? t = a.default.Types.SYSTEM_DM : null != n && (0, r.default)(n) ? t = (0, s.isPublicSystemMessage)(n) ? a.default.Types.OFFICIAL : a.default.Types.SERVER : (null == u ? void 0 : u.bot) ? t = a.default.Types.BOT : null != l && l.isForumPost() && l.ownerId === (null == u ? void 0 : u.id) && !_ && (t = a.default.Types.ORIGINAL_POSTER), null == t) ? null : (0, i.jsx)(a.default, { className: d ? o.botTagCompact : o.botTagCozy, type: t, verified: null == u ? void 0 : u.isVerifiedBot(), hideIcon: c, useRemSizes: !0, children: E }) } }, 750858: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UsernameDecorationTypes: function() { return r }, default: function() { return g } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("873546"), d = n("442837"), _ = n("481060"), c = n("607070"), E = n("100527"), I = n("906732"), T = n("979264"), f = n("372900"), S = n("463396"), h = n("477734"), A = n("484459"), m = n("467679"), N = n("768581"), p = n("51063"), O = n("981631"), C = n("822545"); function R(e) { let { compact: t } = e; return (0, s.jsx)(m.default, { className: t ? C.botTagCompact : C.botTagCozy, type: m.default.Types.REMIX, useRemSizes: !0 }) } function g(e) { let t, { author: n, message: i, userOverride: r, compact: o = !1, withMentionPrefix: m = !1, showPopout: g = !1, className: L, onClick: v, onContextMenu: D, onPopoutRequestClose: M, renderPopout: y, renderRemixTag: P = !1, decorations: U } = e, b = a.useContext(f.default), { analyticsLocations: G } = (0, I.default)(E.default.USERNAME), { nick: w, colorString: k, colorRoleName: B } = n, V = null != i.messageReference && null != i.webhookId, x = (0, d.useStateFromStores)([c.default], () => c.default.roleStyle), F = (0, h.useCanSeeRemixBadge)(), H = a.useMemo(() => ({ source: O.AnalyticsSections.CHANNEL, messageId: i.id, tagUserId: i.author.id }), [i.id, i.author.id]), Y = { className: C.username, style: "username" === x && null != k ? { color: k } : void 0, onClick: v, onContextMenu: D, children: (0, s.jsx)(s.Fragment, { children: (m ? "@" : "") + w }) }, j = a.useMemo(() => o ? (0, s.jsx)(T.default, { clan: n.clan, userId: i.author.id, contextGuildId: b, className: C.clanTagChiplet, profileViewedAnalytics: H }) : null, [o, H, n.clan, b, i.author.id]); t = null != y && null != g ? (0, s.jsx)(_.Popout, { preload: V ? void 0 : function() { let e = null != r ? r : i.author; return (0, A.maybeFetchUserProfileForPopout)(e.id, null != n.guildMemberAvatar && null != b ? (0, N.getGuildMemberAvatarURLSimple)({ guildId: b, userId: e.id, avatar: n.guildMemberAvatar, size: 80 }) : e.getAvatarURL(b, 80), { guildId: b, channelId: i.channel_id }) }, renderPopout: y, shouldShow: g, position: u.isMobile ? "window_center" : "right", onRequestClose: M, children: e => { let { onClick: t, ...n } = e; return (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)(_.Clickable, { tag: "span", ...n, ...Y, className: l()(Y.className, C.clickable, L) }), j] }) } }) : (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)(_.Clickable, { ...Y, className: l()(Y.className, L) }), j] }); let W = null != U ? U[0] : null, K = null != U ? U[1] : null; return (0, s.jsxs)(I.AnalyticsLocationProvider, { value: G, children: [null != W && o ? (0, s.jsxs)(s.Fragment, { children: [" ", W, " "] }) : null, "dot" === x ? (0, s.jsx)(_.RoleDot, { color: k, name: B, className: C.roleDot }) : null, t, !o && (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)(T.default, { clan: n.clan, userId: i.author.id, contextGuildId: b, className: C.clanTagChiplet, profileViewedAnalytics: H }), (0, s.jsx)(p.default, { message: i })] }), null != K ? (0, s.jsx)(s.Fragment, { children: K }) : null, null == W || o ? null : W, null != i && (0, S.isRemix)(i) && F && P ? (0, s.jsx)(R, {}) : null] }) }(i = r || (r = {}))[i.SYSTEM_TAG = 0] = "SYSTEM_TAG", i[i.BADGES = 1] = "BADGES" }, 880080: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("920906"), o = n("771941"); let l = Object.freeze({ tension: 400, friction: 30 }), u = Object.freeze({ opacity: 0, height: 8, x: -4 }); function d(e) { let { selected: t = !1, hovered: n = !1, unread: r = !1, disabled: d = !1, className: _ } = e; t = !d && t, n = !d && n, r = !d && r; let c = { opacity: 1, height: t ? 40 : n ? 20 : 8, x: 0 }, E = (0, a.useTransition)(t || n || r, { config: l, keys: e => e ? "pill" : "empty", immediate: !n && !document.hasFocus(), initial: t || n || r ? c : null, from: u, leave: u, enter: c, update: c }); return (0, i.jsx)("div", { className: s()(_, o.wrapper), "aria-hidden": !0, children: E((e, t) => t && (0, i.jsx)(a.animated.span, { className: o.item, style: e })) }) } }, 26290: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BadgeShapes: function() { return l }, CircleBadge: function() { return T }, IconBadge: function() { return I }, NumberBadge: function() { return _ }, PremiumBadge: function() { return E }, TextBadge: function() { return c }, getBadgeCountString: function() { return d }, getBadgeWidthForValue: function() { return u } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r); n("481060"); var a = n("377171"); n("689938"); var o = n("511958"); let l = { ROUND: o.baseShapeRound, ROUND_LEFT: o.baseShapeRoundLeft, ROUND_RIGHT: o.baseShapeRoundRight, SQUARE: "" }; function u(e) { return e < 10 ? 16 : e < 100 ? 22 : 30 } function d(e) { return e < 1e3 ? "".concat(e) : "".concat(Math.min(Math.floor(e / 1e3), 9), "k+") } let _ = e => { let { count: t, color: n = a.default.STATUS_DANGER, disableColor: r = !1, shape: _ = l.ROUND, className: c, style: E, ...I } = e; return (0, i.jsx)("div", { className: s()(c, o.numberBadge, _), style: { backgroundColor: r ? void 0 : n, width: u(t), paddingRight: function(e) { switch (e) { case 1: case 4: case 6: return 1; default: return } }(t), ...E }, ...I, children: d(t) }) }, c = e => { let { text: t, className: n, color: r = a.default.STATUS_DANGER, shape: u = l.ROUND, disableColor: d = !1, style: _, ...c } = e; return (0, i.jsx)("div", { className: s()(n, o.textBadge, u), style: { backgroundColor: d ? void 0 : r, ..._ }, ...c, children: t }) }, E = e => { let { text: t, className: n, ...r } = e; return (0, i.jsx)(c, { className: s()(o.premiumBadge, n), text: t, ...r }) }, I = e => { let { icon: t, className: n, color: r = a.default.STATUS_DANGER, shape: u = l.ROUND, disableColor: d = !1, style: _ } = e; return (0, i.jsx)("div", { className: s()(n, o.iconBadge, u), style: { backgroundColor: d ? void 0 : r, ..._ }, children: (0, i.jsx)(t, { className: o.icon }) }) }, T = e => { let { className: t, color: n = a.default.INTERACTIVE_ACTIVE, shape: r = l.ROUND, disableColor: u = !1, style: d, ..._ } = e; return (0, i.jsx)("div", { className: s()(t, o.circleBadge, r), style: { backgroundColor: u ? void 0 : n, ...d }, ..._ }) } }, 421600: function(e, t, n) { "use strict"; n.r(t); var i, r, s, a = n("735250"), o = n("470079"), l = n("120356"), u = n.n(l), d = n("481060"), _ = n("381238"), c = n("779863"), E = n("806519"), I = n("52244"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(i = r || (r = {}))[i.OUTGOING = 0] = "OUTGOING", i[i.INCOMING = 1] = "INCOMING"; class f extends(s = o.PureComponent) { renderStatus() { let { muted: e, deafen: t } = this.props, n = t ? _.default : c.default; return e || t ? (0, a.jsx)(n, { className: I.status }, "status") : null } renderBorder() { let { speaking: e } = this.props; return (0, a.jsx)("div", { className: u()(I.border, { [I.speaking]: e }) }, "border") } renderMask() { let { muted: e, speaking: t, deafen: n } = this.props; return e && t ? (0, a.jsxs)(a.Fragment, { children: [this.renderBorder(), this.renderStatus()] }) : e || n ? (0, a.jsx)(a.Fragment, { children: this.renderStatus() }) : (0, a.jsx)(a.Fragment, { children: this.renderBorder() }) } renderVoiceCallAvatar() { let { src: e, disabled: t, ringing: n, ringingType: i, avatarClassName: r, muted: s, deafen: o, size: l, renderIcon: _ } = this.props, c = (0, d.getAvatarSize)(l), T = (0, a.jsx)("img", { src: e, alt: " ", className: u()(I.voiceAvatar, r, { [I.ringingOutgoing]: n && 0 === i }) }); if (t) return T; let f = E.MaskIDs.AVATAR_DEFAULT; return null != _ ? f = l === d.AvatarSizes.SIZE_32 ? E.MaskIDs.AVATAR_CALL_ICON_32 : E.MaskIDs.AVATAR_CALL_ICON : (s || o) && (f = E.MaskIDs.AVATAR_VOICE_CALL_80), (0, a.jsxs)("div", { className: I.callAvatarMaskContainer, children: [(0, a.jsxs)(E.default, { className: I.callAvatarMask, width: c, height: c, mask: f, children: [null == _ ? void 0 : _(), T] }), this.renderMask()] }) } render() { let { size: e, onClick: t, style: n, onContextMenu: i, className: r, ringingType: s, ringing: o } = this.props, l = u()(I.wrapper, { [I.clickable]: null != t, [I.ringingOutgoing]: o && 0 === s, [I.ringingIncoming]: o && 1 === s }, r), _ = (0, d.getAvatarSize)(e), c = { height: _, width: _, ...n }; return (0, a.jsx)("div", { style: c, onContextMenu: i, className: l, children: this.renderVoiceCallAvatar() }) } } T(f, "defaultProps", { size: d.AvatarSizes.SIZE_80, ringingType: 0, speaking: !1, soundsharing: !1, ringing: !1, muted: !1, deafen: !1, hasVideo: !1, mirror: !1, disabled: !1, paused: !1 }), T(f, "RingingType", r), t.default = f }, 360048: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("613828"), l = n("481060"), u = n("368488"); let d = r.forwardRef(function(e, t) { var n; let { avatar: r, name: s, children: d, subText: _, decorators: c, onClick: E, selected: I, muted: T, to: f, avatarClassName: S, selectedClassName: h, innerClassName: A, wrapContent: m, highlighted: N, focusProps: p, ...O } = e; O.className = a()(O.className, u.container, { [u.selected]: I, [u.highlighted]: N, [null != h ? h : ""]: I, [u.clickable]: !I && (null != f || null != E) }), O["aria-selected"] = null !== (n = O["aria-selected"]) && void 0 !== n ? n : I; let C = (0, i.jsxs)("div", { className: a()(A, u.layout, { [u.muted]: !I && T, [u.wrappedLayout]: m }), children: [(0, i.jsx)("div", { className: a()(u.avatar, S), children: r }), (0, i.jsxs)("div", { className: u.content, children: [(0, i.jsxs)("div", { className: u.nameAndDecorators, children: [(0, i.jsx)("div", { className: a()(u.name, { [u.wrappedName]: m }), children: s }), c] }), null != _ ? (0, i.jsx)("div", { className: u.subText, children: _ }) : null] }), null != d ? (0, i.jsx)("div", { className: u.children, children: d }) : null] }); return null != f ? (0, i.jsx)(l.FocusRing, { ...p, children: (0, i.jsx)(o.Link, { to: f, onClick: E, ...O, role: "listitem", ref: t, children: C }) }) : null != E ? (0, i.jsx)(l.Clickable, { onClick: E, focusProps: p, ...O, role: "listitem", innerRef: t, children: C }) : (0, i.jsx)(l.FocusRing, { ...p, children: (0, i.jsx)("div", { ...O, role: "listitem", ref: t, children: C }) }) }); t.default = d }, 151827: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("447960"); t.default = e => { let { className: t, children: n, "aria-label": r, id: l } = e; return (0, i.jsx)(a.H, { className: s()(t, o.container), "aria-label": r, id: l, children: n }) } }, 806519: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MaskIDs: function() { return r }, MaskLibrary: function() { return D } }); var i, r, s = n("735250"), a = n("470079"), o = n("120356"), l = n.n(o), u = n("182294"), d = n("419061"), _ = n("525049"), c = n("172865"); (i = r || (r = {})).SQUIRCLE = "svg-mask-squircle", i.HEADER_BAR_BADGE = "svg-mask-header-bar-badge", i.VOICE_USER_SUMMARY_ITEM = "svg-mask-voice-user-summary-item", i.VERTICAL_FADE = "svg-mask-vertical-fade", i.PANEL_BUTTON = "svg-mask-panel-button", i.CHANNEL_CALL_CONTROL_BUTTON = "svg-mask-channel-call-control-button", i.CHANNEL_CALL_CONTROL_BUTTON_BADGE_16 = "svg-mask-channel-call-control-button-badge-16", i.CHANNEL_CALL_CONTROL_BUTTON_BADGE_22 = "svg-mask-channel-call-control-button-badge-22", i.CHANNEL_CALL_CONTROL_BUTTON_BADGE_29 = "svg-mask-channel-call-control-button-badge-29", i.AVATAR_DEFAULT = "svg-mask-avatar-default", i.AVATAR_STATUS_ROUND_16 = "svg-mask-avatar-status-round-16", i.AVATAR_STATUS_ROUND_20 = "svg-mask-avatar-status-round-20", i.AVATAR_STATUS_ROUND_24 = "svg-mask-avatar-status-round-24", i.AVATAR_STATUS_ROUND_32 = "svg-mask-avatar-status-round-32", i.AVATAR_STATUS_ROUND_40 = "svg-mask-avatar-status-round-40", i.AVATAR_STATUS_ROUND_48 = "svg-mask-avatar-status-round-48", i.AVATAR_STATUS_ROUND_56 = "svg-mask-avatar-status-round-56", i.AVATAR_STATUS_ROUND_80 = "svg-mask-avatar-status-round-80", i.AVATAR_STATUS_ROUND_100 = "svg-mask-avatar-status-round-100", i.AVATAR_STATUS_ROUND_120 = "svg-mask-avatar-status-round-120", i.DIAGONAL_FACEPILE_16 = "svg-mask-diagonal-facepile-16", i.DIAGONAL_FACEPILE_20 = "svg-mask-diagonal-facepile-20", i.DIAGONAL_FACEPILE_24 = "svg-mask-diagonal-facepile-24", i.DIAGONAL_FACEPILE_32 = "svg-mask-diagonal-facepile-32", i.DIAGONAL_FACEPILE_40 = "svg-mask-diagonal-facepile-40", i.DIAGONAL_FACEPILE_48 = "svg-mask-diagonal-facepile-48", i.DIAGONAL_FACEPILE_56 = "svg-mask-diagonal-facepile-56", i.DIAGONAL_FACEPILE_80 = "svg-mask-diagonal-facepile-80", i.DIAGONAL_FACEPILE_100 = "svg-mask-diagonal-facepile-100", i.DIAGONAL_FACEPILE_120 = "svg-mask-diagonal-facepile-120", i.DIAGONAL_FACEPILE_STATUS_16 = "svg-mask-diagonal-facepile-status-16", i.DIAGONAL_FACEPILE_STATUS_20 = "svg-mask-diagonal-facepile-status-20", i.DIAGONAL_FACEPILE_STATUS_24 = "svg-mask-diagonal-facepile-status-24", i.DIAGONAL_FACEPILE_STATUS_32 = "svg-mask-diagonal-facepile-status-32", i.DIAGONAL_FACEPILE_STATUS_40 = "svg-mask-diagonal-facepile-status-40", i.DIAGONAL_FACEPILE_STATUS_48 = "svg-mask-diagonal-facepile-status-48", i.DIAGONAL_FACEPILE_STATUS_56 = "svg-mask-diagonal-facepile-status-56", i.DIAGONAL_FACEPILE_STATUS_80 = "svg-mask-diagonal-facepile-status-80", i.DIAGONAL_FACEPILE_STATUS_100 = "svg-mask-diagonal-facepile-status-100", i.DIAGONAL_FACEPILE_STATUS_120 = "svg-mask-diagonal-facepile-status-120", i.DIAGONAL_FACEPILE_TYPING_16 = "svg-mask-diagonal-facepile-typing-16", i.DIAGONAL_FACEPILE_TYPING_20 = "svg-mask-diagonal-facepile-typing-20", i.DIAGONAL_FACEPILE_TYPING_24 = "svg-mask-diagonal-facepile-typing-24", i.DIAGONAL_FACEPILE_TYPING_32 = "svg-mask-diagonal-facepile-typing-32", i.DIAGONAL_FACEPILE_TYPING_40 = "svg-mask-diagonal-facepile-typing-40", i.DIAGONAL_FACEPILE_TYPING_48 = "svg-mask-diagonal-facepile-typing-48", i.DIAGONAL_FACEPILE_TYPING_56 = "svg-mask-diagonal-facepile-typing-56", i.DIAGONAL_FACEPILE_TYPING_80 = "svg-mask-diagonal-facepile-typing-80", i.DIAGONAL_FACEPILE_TYPING_100 = "svg-mask-diagonal-facepile-typing-100", i.DIAGONAL_FACEPILE_TYPING_120 = "svg-mask-diagonal-facepile-typing-120", i.AVATAR_STATUS_MOBILE_16 = "svg-mask-avatar-status-mobile-16", i.AVATAR_STATUS_MOBILE_20 = "svg-mask-avatar-status-mobile-20", i.AVATAR_STATUS_MOBILE_24 = "svg-mask-avatar-status-mobile-24", i.AVATAR_STATUS_MOBILE_32 = "svg-mask-avatar-status-mobile-32", i.AVATAR_STATUS_MOBILE_40 = "svg-mask-avatar-status-mobile-40", i.AVATAR_STATUS_MOBILE_48 = "svg-mask-avatar-status-mobile-48", i.AVATAR_STATUS_MOBILE_56 = "svg-mask-avatar-status-mobile-56", i.AVATAR_STATUS_MOBILE_80 = "svg-mask-avatar-status-mobile-80", i.AVATAR_STATUS_MOBILE_100 = "svg-mask-avatar-status-mobile-100", i.AVATAR_STATUS_MOBILE_120 = "svg-mask-avatar-status-mobile-120", i.AVATAR_STATUS_TYPING_16 = "svg-mask-avatar-status-typing-16", i.AVATAR_STATUS_TYPING_20 = "svg-mask-avatar-status-typing-20", i.AVATAR_STATUS_TYPING_24 = "svg-mask-avatar-status-typing-24", i.AVATAR_STATUS_TYPING_32 = "svg-mask-avatar-status-typing-32", i.AVATAR_STATUS_TYPING_40 = "svg-mask-avatar-status-typing-40", i.AVATAR_STATUS_TYPING_48 = "svg-mask-avatar-status-typing-48", i.AVATAR_STATUS_TYPING_56 = "svg-mask-avatar-status-typing-56", i.AVATAR_STATUS_TYPING_80 = "svg-mask-avatar-status-typing-80", i.AVATAR_STATUS_TYPING_100 = "svg-mask-avatar-status-typing-100", i.AVATAR_STATUS_TYPING_120 = "svg-mask-avatar-status-typing-120", i.AVATAR_DECORATION_STATUS_ROUND_16 = "svg-mask-avatar-decoration-status-round-16", i.AVATAR_DECORATION_STATUS_ROUND_20 = "svg-mask-avatar-decoration-status-round-20", i.AVATAR_DECORATION_STATUS_ROUND_24 = "svg-mask-avatar-decoration-status-round-24", i.AVATAR_DECORATION_STATUS_ROUND_32 = "svg-mask-avatar-decoration-status-round-32", i.AVATAR_DECORATION_STATUS_ROUND_40 = "svg-mask-avatar-decoration-status-round-40", i.AVATAR_DECORATION_STATUS_ROUND_48 = "svg-mask-avatar-decoration-status-round-48", i.AVATAR_DECORATION_STATUS_ROUND_56 = "svg-mask-avatar-decoration-status-round-56", i.AVATAR_DECORATION_STATUS_ROUND_80 = "svg-mask-avatar-decoration-status-round-80", i.AVATAR_DECORATION_STATUS_ROUND_120 = "svg-mask-avatar-decoration-status-round-120", i.AVATAR_DECORATION_STATUS_MOBILE_16 = "svg-mask-avatar-decoration-status-mobile-16", i.AVATAR_DECORATION_STATUS_MOBILE_20 = "svg-mask-avatar-decoration-status-mobile-20", i.AVATAR_DECORATION_STATUS_MOBILE_24 = "svg-mask-avatar-decoration-status-mobile-24", i.AVATAR_DECORATION_STATUS_MOBILE_32 = "svg-mask-avatar-decoration-status-mobile-32", i.AVATAR_DECORATION_STATUS_MOBILE_40 = "svg-mask-avatar-decoration-status-mobile-40", i.AVATAR_DECORATION_STATUS_MOBILE_48 = "svg-mask-avatar-decoration-status-mobile-48", i.AVATAR_DECORATION_STATUS_MOBILE_56 = "svg-mask-avatar-decoration-status-mobile-56", i.AVATAR_DECORATION_STATUS_MOBILE_80 = "svg-mask-avatar-decoration-status-mobile-80", i.AVATAR_DECORATION_STATUS_MOBILE_100 = "svg-mask-avatar-decoration-status-mobile-100", i.AVATAR_DECORATION_STATUS_MOBILE_120 = "svg-mask-avatar-decoration-status-mobile-120", i.AVATAR_DECORATION_STATUS_TYPING_16 = "svg-mask-avatar-decoration-status-typing-16", i.AVATAR_DECORATION_STATUS_TYPING_20 = "svg-mask-avatar-decoration-status-typing-20", i.AVATAR_DECORATION_STATUS_TYPING_24 = "svg-mask-avatar-decoration-status-typing-24", i.AVATAR_DECORATION_STATUS_TYPING_32 = "svg-mask-avatar-decoration-status-typing-32", i.AVATAR_DECORATION_STATUS_TYPING_40 = "svg-mask-avatar-decoration-status-typing-40", i.AVATAR_DECORATION_STATUS_TYPING_48 = "svg-mask-avatar-decoration-status-typing-48", i.AVATAR_DECORATION_STATUS_TYPING_56 = "svg-mask-avatar-decoration-status-typing-56", i.AVATAR_DECORATION_STATUS_TYPING_80 = "svg-mask-avatar-decoration-status-typing-80", i.AVATAR_DECORATION_STATUS_TYPING_100 = "svg-mask-avatar-decoration-status-typing-100", i.AVATAR_DECORATION_STATUS_TYPING_120 = "svg-mask-avatar-decoration-status-typing-120", i.AVATAR_DECORATION_PROFILE_STATUS_SQUARE_80 = "svg-mask-avatar-decoration-profile-status-square-80", i.AVATAR_DECORATION_PROFILE_STATUS_MOBILE_SQUARE_80 = "svg-mask-avatar-decoration-profile-status-mobile-square-80", i.AVATAR_VOICE_CALL_80 = "svg-mask-avatar-voice-call-80", i.AVATAR_CALL_ICON = "svg-mask-avatar-call-icon", i.AVATAR_CALL_ICON_32 = "svg-mask-avatar-call-icon-32", i.STATUS_ONLINE_MOBILE = "svg-mask-status-online-mobile", i.STATUS_ONLINE = "svg-mask-status-online", i.STATUS_IDLE = "svg-mask-status-idle", i.STATUS_DND = "svg-mask-status-dnd", i.STATUS_OFFLINE = "svg-mask-status-offline", i.STATUS_STREAMING = "svg-mask-status-streaming", i.STATUS_TYPING = "svg-mask-status-typing", i.STATUS_SCREENSHARE = "svg-mask-status-screenshare", i.STICKER_ROUNDED_RECT = "svg-mask-sticker-rounded-rect", i.STICKER_SHOP_NOTIFICATION = "svg-mask-sticker-shop-notification", i.GUILD_ICON_WITH_CHANNEL_TYPE = "svg-mask-guild-icon-with-channel-type", i.GUILD_POPOUT_FACE_PILE_AVATAR = "svg-mask-guild-popout-activity-icon", i.CHAT_INPUT_BUTTON_NOTIFICATION = "svg-mask-chat-input-button-notification", i.AUTOCOMPLETE_EMOJI_UPSELL_EMOJI = "svg-mask-autocomplete-emoji-upsell-emoji", i.EVENT_TICKET = "svg-mask-event-ticket", i.CONTENT_INVENTORY_CARD_FACE_PILE_AVATAR = "svg-mask-content-inventory-card-face-pile-avatar"; function E(e, t) { return (e - .5) / (null != t ? t : d.DECORATION_TO_AVATAR_RATIO) + .5 } function I(e, t, n) { let i = (0, u.getAvatarSpecs)(t), r = 32 === i.size, a = r ? 8 : 0, o = r ? 24 : 12; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5, opacity: n }), (0, s.jsx)("circle", { fill: "black", cx: (80 - o + a) / 80, cy: (o - a / 2) / 80, r: (o + (r ? 2 : 4)) / 80 })] }) } function T(e, t) { return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }), (0, s.jsx)("rect", { fill: "black", x: (56 - t - 4 - 0) / 56, y: -.07142857142857142, width: (t + 8) / 56, height: .42857142857142855, rx: .21428571428571427, ry: .21428571428571427 })] }) } function f(e) { let t = e.size, n = e.size / (_.DIAGONAL_FACEPILE_AVATAR_PROPORTION + _.DIAGONAL_FACEPILE_MASK_OFFSET), i = n * _.DIAGONAL_FACEPILE_AVATAR_PROPORTION, r = _.DIAGONAL_FACEPILE_MASK_OFFSET * n / t + i / 2 / t, s = (_.DIAGONAL_FACEPILE_AVATAR_STROKE_WIDTH + i / 2) / t; return { totalSize: t, backAvatarSize: n, frontAvatarSize: i, backAvatarCenter: n / 2 / t, frontAvatarCenter: r, strokeMaskRadius: s } } function S(e) { let { totalSize: t, backAvatarSize: n, frontAvatarSize: i, backAvatarCenter: r, frontAvatarCenter: a, strokeMaskRadius: o } = e; return (0, s.jsxs)(s.Fragment, { children: [(0, s.jsx)("circle", { fill: "white", cx: r, cy: r, r: n / 2 / t }), (0, s.jsx)("circle", { fill: "black", cx: a, cy: a, r: o }), (0, s.jsx)("circle", { fill: "white", cx: a, cy: a, r: i / 2 / t })] }) } function h(e, t) { let n = f((0, u.getAvatarSpecs)(t)); return (0, s.jsx)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: S(n) }) } function A(e, t) { let n = (0, u.getAvatarSpecs)(t), i = f(n), r = i.totalSize, a = n.status / 2; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [S(i), (0, s.jsx)("circle", { fill: "black", cx: (r - a - n.offset) / r, cy: (r - a - n.offset) / r, r: (a + n.stroke) / r })] }) } function m(e, t) { let n = (0, u.getAvatarSpecs)(t), i = f(n), r = i.totalSize, a = (2.5 * n.status - n.status + 2 * n.stroke) / 2, o = n.size - n.status - a - n.offset, l = n.status + 2 * n.stroke; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [S(i), (0, s.jsx)("rect", { fill: "black", x: o / r, y: (r - n.status - n.stroke - n.offset) / r, width: (n.status * _.DIAGONAL_FACEPILE_TYPING_WIDTH_TO_HEIGHT_RATIO + 2 * n.stroke) / r, height: l / r, rx: l / 2 / r, ry: l / 2 / r })] }) } function N(e) { return (0, s.jsx)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: (0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }) }) } function p(e, t) { let n = (0, u.getAvatarSpecs)(t), i = n.status / 2; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: n.size / 2 / n.size, cy: n.size / 2 / n.size, r: n.size / 2 / n.size }), (0, s.jsx)("circle", { fill: "black", cx: (n.size - i - n.offset) / n.size, cy: (n.size - i - n.offset) / n.size, r: (i + n.stroke) / n.size })] }) } function O(e, t) { let n = (0, u.getAvatarSpecs)(t), i = n.status / 2, r = (i + n.stroke) / n.size / d.DECORATION_TO_AVATAR_RATIO, a = E((n.size - i - n.offset) / n.size); return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: "100%", height: "100%" }), (0, s.jsx)("circle", { fill: "black", cx: a, cy: a, r: r })] }) } function C(e, t) { let n = (0, u.getAvatarSpecs)(t), i = (2.5 * n.status - n.status + 2 * n.stroke) / 2, r = n.size - n.status - i - n.offset, a = n.status + 2 * n.stroke; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: n.size / 2 / n.size, cy: n.size / 2 / n.size, r: n.size / 2 / n.size }), (0, s.jsx)("rect", { fill: "black", x: r / n.size, y: (n.size - n.status - n.stroke - n.offset) / n.size, width: (2.5 * n.status + 2 * n.stroke) / n.size, height: a / n.size, rx: a / 2 / n.size, ry: a / 2 / n.size })] }) } function R(e, t) { let n = (0, u.getAvatarSpecs)(t), i = (2.5 * n.status - n.status + 2 * n.stroke) / 2, r = E((n.size - n.status - n.stroke - n.offset) / n.size), a = E((n.size - n.status - i - n.offset) / n.size), o = (2.5 * n.status + 2 * n.stroke) / n.size / d.DECORATION_TO_AVATAR_RATIO, l = (n.status + 2 * n.stroke) / n.size / d.DECORATION_TO_AVATAR_RATIO, _ = E(l / 2 / n.size); return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: "100%", height: "100%" }), (0, s.jsx)("rect", { fill: "black", x: a, y: r, width: o, height: l, rx: _, ry: _ })] }) } function g(e, t) { let n = (0, u.getAvatarSpecs)(t); return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: n.size / 2 / n.size, cy: n.size / 2 / n.size, r: n.size / 2 / n.size }), (0, s.jsx)("rect", { fill: "black", x: (n.size - n.status - n.stroke - n.offset) / n.size, y: (n.size - n.status * u.MOBILE_HEIGHT_RATIO - n.stroke - n.offset) / n.size, width: (n.status + 2 * n.stroke) / n.size, height: (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) / n.size, rx: (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) * u.CUTOUT_BORDER_RADIUS / n.size, ry: (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) * u.CUTOUT_BORDER_RADIUS / n.size })] }) } function L(e, t) { let n = (0, u.getAvatarSpecs)(t), i = E((n.size - n.status - n.stroke - n.offset) / n.size), r = E((n.size - n.status * u.MOBILE_HEIGHT_RATIO - n.stroke - n.offset) / n.size), a = (n.status + 2 * n.stroke) / n.size / d.DECORATION_TO_AVATAR_RATIO, o = (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) / n.size / d.DECORATION_TO_AVATAR_RATIO; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: "100%", height: "100%" }), (0, s.jsx)("rect", { fill: "black", x: i, y: r, width: a, height: o, rx: (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) * u.CUTOUT_BORDER_RADIUS / n.size, ry: (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) * u.CUTOUT_BORDER_RADIUS / n.size })] }) } function v(e) { let { mask: t, width: n = 24, height: i = 24, rightOverhang: r = 0, bottomOverhang: a = 0, children: o, className: u, style: d, "aria-label": _, ...E } = e; return (0, s.jsx)("svg", { width: n + r, height: i + a, className: l()(c.svg, u), viewBox: "0 0 ".concat(n + r, " ").concat(i + a), style: d, "aria-label": _, ...E, children: (0, s.jsx)("foreignObject", { x: 0, y: 0, width: n, height: i, overflow: "visible", mask: null != t ? "url(#".concat(t, ")") : void 0, children: o }) }) } v.Masks = r, t.default = v; let D = a.memo(function() { var e, t, n, i, r, a, o, l, _, c, f, S, v, D, M, y, P, U, b, G; return (0, s.jsxs)("svg", { viewBox: "0 0 1 1", style: { position: "absolute", pointerEvents: "none", top: -1, left: -1, width: 1, height: 1 }, "aria-hidden": !0, children: [(e = "svg-mask-squircle", (0, s.jsx)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: (0, s.jsx)("path", { fill: "white", d: "M0 0.464C0 0.301585 0 0.220377 0.0316081 0.158343C0.0594114 0.103776 0.103776 0.0594114 0.158343 0.0316081C0.220377 0 0.301585 0 0.464 0H0.536C0.698415 0 0.779623 0 0.841657 0.0316081C0.896224 0.0594114 0.940589 0.103776 0.968392 0.158343C1 0.220377 1 0.301585 1 0.464V0.536C1 0.698415 1 0.779623 0.968392 0.841657C0.940589 0.896224 0.896224 0.940589 0.841657 0.968392C0.779623 1 0.698415 1 0.536 1H0.464C0.301585 1 0.220377 1 0.158343 0.968392C0.103776 0.940589 0.0594114 0.896224 0.0316081 0.841657C0 0.779623 0 0.698415 0 0.536V0.464Z" }) })), (t = "svg-mask-header-bar-badge", (0, s.jsxs)("mask", { id: t, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: 1, height: 1 }), (0, s.jsx)("circle", { fill: "black", cx: .75, cy: .75, r: .25 })] })), (n = "svg-mask-voice-user-summary-item", (0, s.jsxs)("mask", { id: n, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", width: 1, height: 1 }), (0, s.jsx)("circle", { fill: "black", cx: 1.2083333333333333, cy: .5, r: .5416666666666666 })] })), function(e) { let t = "".concat(e, "-gradient"); return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsxs)("linearGradient", { id: t, gradientTransform: "rotate(90)", x1: 0, x2: 1, y1: 0, y2: 0, children: [(0, s.jsx)("stop", { offset: "0%", stopColor: "white" }), (0, s.jsx)("stop", { offset: "100%", stopColor: "black" })] }), (0, s.jsx)("rect", { fill: "url(#".concat(t, ")"), x: 0, y: 0, width: 1, height: 1 })] }) }("svg-mask-vertical-fade"), (i = "svg-mask-panel-button", (0, s.jsxs)("mask", { id: i, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: 1, height: 1 }), (0, s.jsx)("circle", { fill: "black", cx: .75, cy: .75, r: .25 })] })), (r = "svg-mask-channel-call-control-button", (0, s.jsxs)("mask", { id: r, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }), (0, s.jsx)("circle", { fill: "black", cx: .8214285714285714, cy: .8214285714285714, r: .25 })] })), T("svg-mask-channel-call-control-button-badge-16", 16), T("svg-mask-channel-call-control-button-badge-22", 22), T("svg-mask-channel-call-control-button-badge-29", 29), N("svg-mask-avatar-default"), p("svg-mask-avatar-status-round-16", u.AvatarSizes.SIZE_16), O("svg-mask-avatar-decoration-status-round-16", u.AvatarSizes.SIZE_16), g("svg-mask-avatar-status-mobile-16", u.AvatarSizes.SIZE_16), L("svg-mask-avatar-decoration-status-mobile-16", u.AvatarSizes.SIZE_16), C("svg-mask-avatar-status-typing-16", u.AvatarSizes.SIZE_16), R("svg-mask-avatar-decoration-status-typing-16", u.AvatarSizes.SIZE_16), p("svg-mask-avatar-status-round-20", u.AvatarSizes.SIZE_20), O("svg-mask-avatar-decoration-status-round-20", u.AvatarSizes.SIZE_20), g("svg-mask-avatar-status-mobile-20", u.AvatarSizes.SIZE_20), L("svg-mask-avatar-decoration-status-mobile-20", u.AvatarSizes.SIZE_20), C("svg-mask-avatar-status-typing-20", u.AvatarSizes.SIZE_20), R("svg-mask-avatar-decoration-status-typing-20", u.AvatarSizes.SIZE_20), p("svg-mask-avatar-status-round-24", u.AvatarSizes.SIZE_24), O("svg-mask-avatar-decoration-status-round-24", u.AvatarSizes.SIZE_24), g("svg-mask-avatar-status-mobile-24", u.AvatarSizes.SIZE_24), L("svg-mask-avatar-decoration-status-mobile-24", u.AvatarSizes.SIZE_24), C("svg-mask-avatar-status-typing-24", u.AvatarSizes.SIZE_24), R("svg-mask-avatar-decoration-status-typing-24", u.AvatarSizes.SIZE_24), p("svg-mask-avatar-status-round-32", u.AvatarSizes.SIZE_32), O("svg-mask-avatar-decoration-status-round-32", u.AvatarSizes.SIZE_32), g("svg-mask-avatar-status-mobile-32", u.AvatarSizes.SIZE_32), L("svg-mask-avatar-decoration-status-mobile-32", u.AvatarSizes.SIZE_32), C("svg-mask-avatar-status-typing-32", u.AvatarSizes.SIZE_32), R("svg-mask-avatar-decoration-status-typing-32", u.AvatarSizes.SIZE_32), p("svg-mask-avatar-status-round-40", u.AvatarSizes.SIZE_40), O("svg-mask-avatar-decoration-status-round-40", u.AvatarSizes.SIZE_40), g("svg-mask-avatar-status-mobile-40", u.AvatarSizes.SIZE_40), L("svg-mask-avatar-decoration-status-mobile-40", u.AvatarSizes.SIZE_40), C("svg-mask-avatar-status-typing-40", u.AvatarSizes.SIZE_40), R("svg-mask-avatar-decoration-status-typing-40", u.AvatarSizes.SIZE_40), p("svg-mask-avatar-status-round-48", u.AvatarSizes.SIZE_48), O("svg-mask-avatar-decoration-status-round-48", u.AvatarSizes.SIZE_48), g("svg-mask-avatar-status-mobile-48", u.AvatarSizes.SIZE_48), L("svg-mask-avatar-decoration-status-mobile-48", u.AvatarSizes.SIZE_48), C("svg-mask-avatar-status-typing-48", u.AvatarSizes.SIZE_48), R("svg-mask-avatar-decoration-status-typing-48", u.AvatarSizes.SIZE_48), p("svg-mask-avatar-status-round-56", u.AvatarSizes.SIZE_56), O("svg-mask-avatar-decoration-status-round-56", u.AvatarSizes.SIZE_56), g("svg-mask-avatar-status-mobile-56", u.AvatarSizes.SIZE_56), L("svg-mask-avatar-decoration-status-mobile-56", u.AvatarSizes.SIZE_56), C("svg-mask-avatar-status-typing-56", u.AvatarSizes.SIZE_56), R("svg-mask-avatar-decoration-status-typing-56", u.AvatarSizes.SIZE_56), p("svg-mask-avatar-status-round-80", u.AvatarSizes.SIZE_80), O("svg-mask-avatar-decoration-status-round-80", u.AvatarSizes.SIZE_80), function(e, t) { let n = (0, u.getAvatarSpecs)(t), i = n.status / 2, r = n.size * d.DECORATION_TO_AVATAR_RATIO / n.size, a = (i + n.stroke) / n.size / r, o = E((n.size - i - n.offset) / n.size, r); return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: "100%", height: "100%" }), (0, s.jsx)("circle", { fill: "black", cx: o, cy: o, r: a })] }) }("svg-mask-avatar-decoration-profile-status-square-80", u.AvatarSizes.SIZE_80), g("svg-mask-avatar-status-mobile-80", u.AvatarSizes.SIZE_80), L("svg-mask-avatar-decoration-status-mobile-80", u.AvatarSizes.SIZE_80), function(e, t) { let n = (0, u.getAvatarSpecs)(t), i = n.size * d.DECORATION_TO_AVATAR_RATIO / n.size, r = E((n.size - n.status - n.stroke - n.offset) / n.size, i), a = E((n.size - n.status * u.MOBILE_HEIGHT_RATIO - n.stroke - n.offset) / n.size, i), o = (n.status + 2 * n.stroke) / n.size / i, l = (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) / n.size / i; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: "100%", height: "100%" }), (0, s.jsx)("rect", { fill: "black", x: r, y: a, width: o, height: l, rx: (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) * u.CUTOUT_BORDER_RADIUS / n.size, ry: (n.status * u.MOBILE_HEIGHT_RATIO + 2 * n.stroke) * u.CUTOUT_BORDER_RADIUS / n.size })] }) }("svg-mask-avatar-decoration-profile-status-mobile-square-80", u.AvatarSizes.SIZE_80), C("svg-mask-avatar-status-typing-80", u.AvatarSizes.SIZE_80), R("svg-mask-avatar-decoration-status-typing-80", u.AvatarSizes.SIZE_80), p("svg-mask-avatar-status-round-120", u.AvatarSizes.SIZE_120), O("svg-mask-avatar-decoration-status-round-120", u.AvatarSizes.SIZE_120), g("svg-mask-avatar-status-mobile-120", u.AvatarSizes.SIZE_120), L("svg-mask-avatar-decoration-status-mobile-120", u.AvatarSizes.SIZE_120), C("svg-mask-avatar-status-typing-120", u.AvatarSizes.SIZE_120), R("svg-mask-avatar-decoration-status-typing-120", u.AvatarSizes.SIZE_120), h("svg-mask-diagonal-facepile-16", u.AvatarSizes.SIZE_16), A("svg-mask-diagonal-facepile-status-16", u.AvatarSizes.SIZE_16), m("svg-mask-diagonal-facepile-typing-16", u.AvatarSizes.SIZE_16), h("svg-mask-diagonal-facepile-20", u.AvatarSizes.SIZE_20), A("svg-mask-diagonal-facepile-status-20", u.AvatarSizes.SIZE_20), m("svg-mask-diagonal-facepile-typing-20", u.AvatarSizes.SIZE_20), h("svg-mask-diagonal-facepile-24", u.AvatarSizes.SIZE_24), A("svg-mask-diagonal-facepile-status-24", u.AvatarSizes.SIZE_24), m("svg-mask-diagonal-facepile-typing-24", u.AvatarSizes.SIZE_24), h("svg-mask-diagonal-facepile-32", u.AvatarSizes.SIZE_32), A("svg-mask-diagonal-facepile-status-32", u.AvatarSizes.SIZE_32), m("svg-mask-diagonal-facepile-typing-32", u.AvatarSizes.SIZE_32), h("svg-mask-diagonal-facepile-40", u.AvatarSizes.SIZE_40), A("svg-mask-diagonal-facepile-status-40", u.AvatarSizes.SIZE_40), m("svg-mask-diagonal-facepile-typing-40", u.AvatarSizes.SIZE_40), h("svg-mask-diagonal-facepile-48", u.AvatarSizes.SIZE_48), A("svg-mask-diagonal-facepile-status-48", u.AvatarSizes.SIZE_48), m("svg-mask-diagonal-facepile-typing-48", u.AvatarSizes.SIZE_48), h("svg-mask-diagonal-facepile-56", u.AvatarSizes.SIZE_56), A("svg-mask-diagonal-facepile-status-56", u.AvatarSizes.SIZE_56), m("svg-mask-diagonal-facepile-typing-56", u.AvatarSizes.SIZE_56), h("svg-mask-diagonal-facepile-80", u.AvatarSizes.SIZE_80), A("svg-mask-diagonal-facepile-status-80", u.AvatarSizes.SIZE_80), m("svg-mask-diagonal-facepile-typing-80", u.AvatarSizes.SIZE_80), h("svg-mask-diagonal-facepile-120", u.AvatarSizes.SIZE_120), A("svg-mask-diagonal-facepile-status-120", u.AvatarSizes.SIZE_120), m("svg-mask-diagonal-facepile-typing-120", u.AvatarSizes.SIZE_120), function(e) { let t = 8 * u.MOBILE_HEIGHT_RATIO; return (0, s.jsxs)("mask", { id: e, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: 1, height: 1, rx: t * u.MOBILE_ICON_RADIUS / 8, ry: t * u.MOBILE_ICON_RADIUS / t }), (0, s.jsx)("rect", { fill: "black", x: .125, y: 2 / t, width: .75, height: 6 / t }), (0, s.jsx)("ellipse", { fill: "black", cx: .5, cy: 10 / t, rx: .125, ry: 1 / t })] }) }("svg-mask-status-online-mobile"), N("svg-mask-status-online"), (a = "svg-mask-status-idle", (0, s.jsxs)("mask", { id: a, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }), (0, s.jsx)("circle", { fill: "black", cx: .25, cy: .25, r: .375 })] })), (o = "svg-mask-status-dnd", (0, s.jsxs)("mask", { id: o, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }), (0, s.jsx)("rect", { fill: "black", x: .125, y: .375, width: .75, height: .25, rx: .125, ry: .125 })] })), (l = "svg-mask-status-offline", (0, s.jsxs)("mask", { id: l, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }), (0, s.jsx)("circle", { fill: "black", cx: .5, cy: .5, r: .25 })] })), (_ = "svg-mask-status-streaming", (0, s.jsxs)("mask", { id: _, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }), (0, s.jsx)("polygon", { fill: "black", points: "".concat(.35, ",").concat(.25, " ").concat(.78301275, ",").concat(.5, " ").concat(.35, ",").concat(.75) })] })), (c = "svg-mask-status-typing", (0, s.jsx)("mask", { id: c, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: (0, s.jsx)("rect", { fill: "white", cx: 0, cy: 0, width: 1, height: 1, ry: .5, rx: .2 }) })), (f = "svg-mask-status-screenshare", (0, s.jsxs)("mask", { id: f, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { width: "1", height: "1", fill: "white" }), (0, s.jsx)("path", { d: "M0.5 0.71875C0.5 0.649716 0.555966 0.59375 0.625 0.59375H1.0V1.0H0.5V0.71875Z", fill: "black" })] })), (S = "svg-mask-avatar-voice-call-80", (0, s.jsxs)("mask", { id: S, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("circle", { fill: "white", cx: .5, cy: .5, r: .5 }), (0, s.jsx)("circle", { fill: "black", cx: .85, cy: .85, r: .2 })] })), I("svg-mask-avatar-call-icon", u.AvatarSizes.SIZE_56, 1), I("svg-mask-avatar-call-icon-32", u.AvatarSizes.SIZE_32, .5), (v = "svg-mask-sticker-rounded-rect", (0, s.jsx)("mask", { id: v, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: (0, s.jsx)("path", { d: "M0 0.26087C0 0.137894 0 0.0764069 0.0382035 0.0382035C0.0764069 0 0.137894 0 0.26087 0H0.73913C0.862106 0 0.923593 0 0.961797 0.0382035C1 0.0764069 1 0.137894 1 0.26087V0.73913C1 0.862106 1 0.923593 0.961797 0.961797C0.923593 1 0.862106 1 0.73913 1H0.26087C0.137894 1 0.0764069 1 0.0382035 0.961797C0 0.923593 0 0.862106 0 0.73913V0.26087Z", fill: "white" }) })), (D = "svg-mask-chat-input-button-notification", (0, s.jsxs)("mask", { id: D, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { width: "1", height: "1", fill: "white" }), (0, s.jsx)("circle", { cx: "0.85", cy: "0.85", r: "0.25", fill: "black" })] })), (M = "svg-mask-sticker-shop-notification", (0, s.jsxs)("mask", { id: M, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { width: "1", height: "1", fill: "white" }), (0, s.jsx)("circle", { cx: "0.9", cy: "0.9", r: "0.5", fill: "black" })] })), (y = "svg-mask-autocomplete-emoji-upsell-emoji", (0, s.jsxs)("mask", { id: y, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", width: 1, height: 1 }), (0, s.jsx)("circle", { fill: "black", cx: 1.33, cy: .5, r: .5833333333333334 })] })), (P = "svg-mask-event-ticket", (0, s.jsx)("mask", { id: P, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: (0, s.jsx)("path", { d: "M0 0.12C0 0.0779961 0 0.0569941 0.00408726 0.0409507C0.00768251 0.0268386 0.0134193 0.015365 0.0204754 0.00817451C0.028497 0 0.038998 0 0.06 0H0.94C0.961002 0 0.971503 0 0.979525 0.00817451C0.986581 0.015365 0.992318 0.0268386 0.995913 0.0409507C1 0.0569941 1 0.0779961 1 0.12V0.45C0.986193 0.45 0.975 0.472386 0.975 0.5C0.975 0.527614 0.986193 0.55 1 0.55V0.88C1 0.922004 1 0.943006 0.995913 0.959049C0.992318 0.973161 0.986581 0.984635 0.979525 0.991826C0.971503 1 0.961002 1 0.94 1H0.0600001C0.0389981 1 0.028497 1 0.0204754 0.991826C0.0134193 0.984635 0.00768251 0.973161 0.00408726 0.959049C0 0.943006 0 0.922004 0 0.88V0.55C0.0138071 0.55 0.025 0.527614 0.025 0.5C0.025 0.472386 0.0138071 0.45 0 0.45V0.12Z", fill: "white" }) })), (U = "svg-mask-guild-icon-with-channel-type", (0, s.jsxs)("mask", { id: U, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("path", { fill: "white", d: "M0 0.464C0 0.301585 0 0.220377 0.0316081 0.158343C0.0594114 0.103776 0.103776 0.0594114 0.158343 0.0316081C0.220377 0 0.301585 0 0.464 0H0.536C0.698415 0 0.779623 0 0.841657 0.0316081C0.896224 0.0594114 0.940589 0.103776 0.968392 0.158343C1 0.220377 1 0.301585 1 0.464V0.536C1 0.698415 1 0.779623 0.968392 0.841657C0.940589 0.896224 0.896224 0.940589 0.841657 0.968392C0.779623 1 0.698415 1 0.536 1H0.464C0.301585 1 0.220377 1 0.158343 0.968392C0.103776 0.940589 0.0594114 0.896224 0.0316081 0.841657C0 0.779623 0 0.698415 0 0.536V0.464Z" }), (0, s.jsx)("circle", { cx: "0.9", cy: "0.9", r: "0.5", fill: "black" })] })), (b = "svg-mask-content-inventory-card-face-pile-avatar", (0, s.jsxs)("mask", { id: b, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", width: 1, height: 1 }), (0, s.jsx)("circle", { fill: "black", cx: 1.33, cy: .5, r: .65 })] })), (G = "svg-mask-guild-popout-activity-icon", (0, s.jsxs)("mask", { id: G, maskContentUnits: "objectBoundingBox", viewBox: "0 0 1 1", children: [(0, s.jsx)("rect", { fill: "white", x: 0, y: 0, width: "100%", height: "100%" }), (0, s.jsx)("circle", { fill: "black", cx: 1.33, cy: .5, r: .6 })] }))] }) }, () => !0) }, 404975: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Button: function() { return u }, Separator: function() { return l } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("949058"); function l(e) { let { className: t } = e; return (0, i.jsx)("div", { className: s()(t, o.separator) }) } function u(e) { let { onClick: t, onContextMenu: n, className: r, selected: l = !1, children: u, disabled: d = !1, dangerous: _, ...c } = e; return (0, i.jsx)(a.Clickable, { onClick: d ? void 0 : t, onContextMenu: d ? void 0 : n, className: s()(r, { [o.button]: !0, [o.selected]: l, [o.disabled]: d, [o.dangerous]: _ }), ...c, children: u }) } t.default = function(e) { let { className: t, children: n } = e; return (0, i.jsx)("div", { className: s()(t, o.wrapper), children: n }) } }, 176278: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"); n("470079"); var r = n("120356"), s = n.n(r), a = n("481060"), o = n("689938"), l = n("785455"); function u(e) { let t, { className: n, src: r, unicodeEmoji: u, name: d, size: _ = 20, enableTooltip: c = !0, enableHeight: E = !0, onClick: I } = e; if (null == r && null == u) return null; return (0, i.jsx)(a.TooltipContainer, { text: d, "aria-label": !1, shouldShow: c, element: "span", children: (t = (0, i.jsx)("img", { alt: "", "aria-label": o.default.Messages.ROLE_ICON_ALT_TEXT.format({ name: d }), className: s()(l.roleIcon, n, { [l.clickable]: null != I }), height: E ? _ : void 0, src: r, width: _ }), (null != u && (t = (0, i.jsx)("img", { alt: "", "aria-label": u.allNamesString, className: s()(l.roleIcon, n, { [l.clickable]: null != I }), height: E ? _ : void 0, src: u.url, width: _ })), null == I) ? (0, i.jsx)(a.FocusRing, { offset: { left: 5 }, children: t }) : (0, i.jsx)(a.Clickable, { onClick: I, tag: "span", focusProps: { offset: { left: 5 } }, children: t })) }) } }, 602623: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Sizes: function() { return m } }), n("653041"), n("47120"); var i, r = n("735250"), s = n("470079"), a = n("120356"), o = n.n(a), l = n("512722"), u = n.n(l), d = n("481060"), _ = n("484459"), c = n("103575"), E = n("598077"), I = n("594174"), T = n("632184"), f = n("426563"), S = n("806519"), h = n("881867"); function A(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let m = { SIZE_16: 16, SIZE_24: 24, SIZE_32: 32, SIZE_56: 56 }; function N(e, t) { let n = e instanceof E.default ? e : null != e ? e.user : null; return null != n ? n.id : "user-".concat(t) } class p extends(i = s.PureComponent) { renderUsers() { let { users: e, max: t, renderUser: n = this.defaultRenderUser, size: i, extraDetail: s } = this.props, a = [], o = e.length === t ? e.length : t - 1, l = this.renderMoreUsers(o), u = 0; for (; u < o && u < e.length;) { var d; let t = null == l && null == s && u === e.length - 1, o = n(e[u], t, u); a.push(t ? (0, r.jsx)("div", { className: h.avatarContainer, children: o }, N(null !== (d = e[u]) && void 0 !== d ? d : null, u)) : (0, r.jsx)(S.default, { className: h.avatarContainerMasked, height: i, width: i, mask: S.default.Masks.VOICE_USER_SUMMARY_ITEM, children: o }, N(e[u], u))), u++ } return null != s ? a.push(s) : null != l && a.push(l), a } renderMoreUsers(e) { let { max: t, count: n, hideMoreUsers: i, renderMoreUsers: a, users: o } = this.props, l = Math.min(e, o.length); if (!i) { if (null != n) { if (n >= t) return (0, r.jsx)(s.Fragment, { children: a("".concat(t, "+"), t) }, "more-users"); if (n > o.length) { let e = n - o.length; return (0, r.jsx)(s.Fragment, { children: a("+".concat(e), e) }, "more-users") } } else if (l < o.length) { let e = Math.min(o.length - l, 99); return (0, r.jsx)(s.Fragment, { children: a("+".concat(e), e) }, "more-users") } } } renderIcon() { return this.props.renderIcon ? (0, r.jsx)(T.default, { foreground: h.__invalid_foreground, className: h.icon }) : null } render() { let { className: e, size: t, users: n, guildId: i, showUserPopout: s, useFallbackUserForPopout: a } = this.props, { popoutUserId: l } = this.state, E = n.find(e => null != e && e.id === l), T = a && null == I.default.getUser(l); return (0, r.jsx)(d.Popout, { position: "right", preload: null == E ? void 0 : () => (0, _.maybeFetchUserProfileForPopout)(E.id, E.getAvatarURL(i, 80), { guildId: i }), shouldShow: !0 === s && null != l, fixed: !0, renderPopout: e => (u()(null != l, "UserSummaryItem.render - renderPopout: popoutUserId cannot be null"), (0, r.jsx)(c.default, { ...this.props, location: "UserSummaryItem", user: T && null != E ? E : void 0, ...e, userId: l, guildId: this.props.guildId })), onRequestClose: () => this.setState({ popoutUserId: null }), children: n => (0, r.jsxs)("div", { className: o()(e, h.container, function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : m.SIZE_24; switch (e) { case m.SIZE_16: return h.size16; case m.SIZE_24: return h.size24; case m.SIZE_32: return h.size32; case m.SIZE_56: return h.size56; default: return h.size24 } }(t)), ref: this._ref, ...n, children: [this.renderIcon(), this.renderUsers()] }) }) } constructor(...e) { super(...e), A(this, "state", { popoutUserId: null }), A(this, "_ref", s.createRef()), A(this, "defaultRenderUser", (e, t, n) => { let { showUserPopout: i, guildId: s, size: a } = this.props; if (null == e) { if (!this.props.showDefaultAvatarsForNullUsers) return (0, r.jsx)("div", { className: h.emptyUser }); { let e = (null != n ? n : 0) % f.default.DEFAULT_AVATARS.length, t = f.default.DEFAULT_AVATARS[e]; return (0, r.jsx)("img", { src: t, alt: "", className: h.avatar }) } } let o = (0, r.jsx)("img", { src: e.getAvatarURL(s, a), alt: e.username, className: h.avatar }, e.id); return i ? (0, r.jsx)(d.Clickable, { className: h.clickableAvatar, onClick: () => { null != this._ref.current && null != e && this.setState({ popoutUserId: e.id }) }, tabIndex: -1, children: o }, e.id) : o }) } } A(p, "defaultProps", { max: 10, renderMoreUsers: function(e) { return (0, r.jsx)("div", { className: h.moreUsers, children: e }) }, renderIcon: !1, showDefaultAvatarsForNullUsers: !1, size: m.SIZE_24 }), t.default = p }, 810090: function(e, t, n) { "use strict"; n.r(t); var i = n("735250"), r = n("470079"), s = n("374470"), a = n("442837"), o = n("607070"), l = n("768760"); let u = e => { let { externalRef: t, autoPlay: n, playOnHover: u, responsive: d, mediaLayoutType: _, ...c } = e, E = (0, a.useStateFromStores)([o.default], () => o.default.useReducedMotion), I = r.useRef(null); function T() { var e; u && (null == I || null === (e = I.current) || void 0 === e || e.play()) } function f() { var e; u && (null == I || null === (e = I.current) || void 0 === e || e.pause()) } return r.useLayoutEffect(() => () => { let { current: e } = I; null != e && function(e) { e.removeAttribute("src"), Array.from(e.children).forEach(e => { (0, s.isElement)(e, HTMLSourceElement) && (e.removeAttribute("src"), e.removeAttribute("type")), (0, s.isElement)(e, HTMLImageElement) && e.removeAttribute("src") }); try { e.load() } catch (e) {} }(e) }, []), r.useLayoutEffect(() => ("function" == typeof t ? (t(null), t(I.current)) : null != t && (t.current = I.current), () => { "function" == typeof t ? t(null) : null != t && (t.current = null) }), [t, I]), (0, i.jsx)("video", { ref: I, autoPlay: !E && !u && n, onMouseEnter: T, onMouseLeave: f, onFocus: T, onBlur: f, style: _ === l.MediaLayoutType.MOSAIC ? { width: "100%", height: "100%", maxHeight: "inherit", objectFit: "cover" } : d ? function() { return { maxWidth: c.width, maxHeight: c.height, width: "100%", height: "100%" } }() : {}, ...c }) }; t.default = r.forwardRef((e, t) => (0, i.jsx)(u, { ...e, externalRef: t })) }, 929991: function(e, t, n) { "use strict"; n.r(t), n.d(t, { flushAnalyticsFeedItems: function() { return a }, markAnalyticsFeedItemSeen: function() { return r }, markAnalyticsFeedItemUnseen: function() { return s } }); var i = n("570140"); function r(e, t, n) { i.default.dispatch({ type: "ANALYTICS_FEED_ITEM_SEEN", id: e, feedItemId: t, timestampMillis: n }) } function s(e, t, n) { i.default.dispatch({ type: "ANALYTICS_FEED_ITEM_UNSEEN", id: e, feedItemId: t, timestampMillis: n }) } function a(e, t) { i.default.dispatch({ type: "ANALYTICS_FEED_FLUSH", id: e, force: t }) } }, 480739: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnalyticsFeedItemSeenManager: function() { return c }, AnalyticsFeedTypes: function() { return i }, ForceFlushType: function() { return r } }), n("653041"), n("47120"); var i, r, s, a, o = n("512722"), l = n.n(o), u = n("570140"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(s = i || (i = {})).GUILD_HOME = "guild_home", s.FORUM_CHANNEL = "forum_channel", (a = r || (r = {}))[a.IMMEDIATE = 0] = "IMMEDIATE", a[a.IMMEDIATE_WITH_COOLDOWN = 1] = "IMMEDIATE_WITH_COOLDOWN", a[a.IMMEDIATE_WITH_DELAY = 2] = "IMMEDIATE_WITH_DELAY"; class _ { maybeMarkSeen(e) { let t = this.seenIntervals[this.seenIntervals.length - 1]; return (null == t || null != t.endTimeMillis) && (this.seenIntervals.push({ startTimeMillis: e }), !0) } maybeMarkUnseen(e) { let t = this.seenIntervals[this.seenIntervals.length - 1]; return null != t && null == t.endTimeMillis && (t.endTimeMillis = e, !0) } isVisible() { let e = this.seenIntervals[this.seenIntervals.length - 1]; return (null == e ? void 0 : e.startTimeMillis) != null && (null == e ? void 0 : e.endTimeMillis) == null } computeSeenTimeDestructive(e) { let t = 0, n = []; for (let i of this.seenIntervals) { if (null != i.endTimeMillis) { t += i.endTimeMillis - i.startTimeMillis; continue } if (e) { let e = Date.now(); t += e - i.startTimeMillis, n.push({ startTimeMillis: e }); continue } n.push(i) } return l()(n.length < 2, "there should only be a single left over data"), this.seenIntervals = n, Math.round(t) } constructor() { d(this, "seenIntervals", void 0), this.seenIntervals = [] } } class c { maybeFlushSeenItems(e) { if (null == e && Date.now() - this._lastFlushTimeMillis < 6e4 || 1 === e && Date.now() - this._lastFlushTimeMillis < 3e3) return Promise.resolve(); let t = this.createFlushSeenItemsFunction(e); return null == t ? Promise.resolve() : (this._lastFlushTimeMillis = Date.now(), 0 === e || 1 === e) ? new Promise(async e => { await t(), e() }) : new Promise(e => { setTimeout(async () => { await t(), e() }, 100) }) } constructor({ id: e, windowId: t, isPaused: n }) { d(this, "trackedFeedItems", void 0), d(this, "_lastFlushTimeMillis", void 0), d(this, "_pausedFeedItemIds", void 0), d(this, "_paused", void 0), d(this, "_windowId", void 0), d(this, "_isReactNavigationFocused", void 0), d(this, "_id", void 0), d(this, "onInitialize", void 0), d(this, "onTerminate", void 0), d(this, "onFeedItemSeen", void 0), d(this, "onFeedItemUnseen", void 0), d(this, "initialize", () => { var e; u.default.subscribe("ANALYTICS_FEED_ITEM_SEEN", this.handleFeedItemSeen), u.default.subscribe("ANALYTICS_FEED_ITEM_UNSEEN", this.handleFeedItemUnseen), u.default.subscribe("ANALYTICS_FEED_FLUSH", this.handleFeedItemFlush), u.default.subscribe("APP_STATE_UPDATE", this.handleAppStateUpdate), u.default.subscribe("DRAWER_OPEN", this.handleDrawerOpen), u.default.subscribe("DRAWER_CLOSE", this.handleDrawerClose), u.default.subscribe("WINDOW_FOCUS", this.handleWindowFocus), null === (e = this.onInitialize) || void 0 === e || e.call(this) }), d(this, "terminate", () => { var e; u.default.unsubscribe("ANALYTICS_FEED_ITEM_SEEN", this.handleFeedItemSeen), u.default.unsubscribe("ANALYTICS_FEED_ITEM_UNSEEN", this.handleFeedItemUnseen), u.default.unsubscribe("ANALYTICS_FEED_FLUSH", this.handleFeedItemFlush), u.default.unsubscribe("APP_STATE_UPDATE", this.handleAppStateUpdate), u.default.unsubscribe("DRAWER_OPEN", this.handleDrawerOpen), u.default.unsubscribe("DRAWER_CLOSE", this.handleDrawerClose), u.default.unsubscribe("WINDOW_FOCUS", this.handleWindowFocus), null === (e = this.onTerminate) || void 0 === e || e.call(this), this.maybeFlushSeenItems(0) }), d(this, "handleFeedItemFlush", e => { let { id: t, force: n } = e; this._id === t && this.maybeFlushSeenItems(n) }), d(this, "handleFeedItemSeen", e => { var t; let n = e.id, i = e.timestampMillis, r = e.feedItemId; if (n !== this._id) return; if (this._paused) { this._pausedFeedItemIds.add(r); return } let s = this.getTrackedFeedItem(r).maybeMarkSeen(i); null === (t = this.onFeedItemSeen) || void 0 === t || t.call(this, r, s) }), d(this, "handleFeedItemUnseen", e => { var t; let n = e.id, i = e.timestampMillis, r = e.feedItemId; if (n !== this._id) return; this._paused && this._pausedFeedItemIds.delete(r); let s = this.getTrackedFeedItem(r).maybeMarkUnseen(i); null === (t = this.onFeedItemUnseen) || void 0 === t || t.call(this, r, s), this.maybeFlushSeenItems() }), d(this, "getTrackedFeedItem", e => (null == this.trackedFeedItems[e] && (this.trackedFeedItems[e] = new _), this.trackedFeedItems[e])), d(this, "getVisibleFeedItemIds", () => { let e = Object.keys(this.trackedFeedItems); return new Set(e.filter(e => { var t; return null === (t = this.trackedFeedItems[e]) || void 0 === t ? void 0 : t.isVisible() })) }), d(this, "handleDrawerClose", () => { this._isReactNavigationFocused && this.resume() }), d(this, "handleDrawerOpen", () => { this._isReactNavigationFocused && this.pause() }), d(this, "handleAppStateUpdate", e => { let { state: t } = e; "active" === t && this._isReactNavigationFocused && this.resume(), "background" === t && (this._isReactNavigationFocused && this.pause(), this.maybeFlushSeenItems(0)) }), d(this, "clearPausedFeedItemIds", () => { this._pausedFeedItemIds = new Set, this._paused = !1 }), d(this, "pause", () => { if (this._paused) return; let e = this.getVisibleFeedItemIds(); e.forEach(e => { this.handleFeedItemUnseen({ id: this._id, feedItemId: e, timestampMillis: Date.now(), type: "ANALYTICS_FEED_ITEM_UNSEEN" }) }), this._paused = !0, this._pausedFeedItemIds = e }), d(this, "resume", () => { this._paused && (this._paused = !1, this._pausedFeedItemIds.forEach(e => { this.handleFeedItemSeen({ id: this._id, feedItemId: e, timestampMillis: Date.now(), type: "ANALYTICS_FEED_ITEM_SEEN" }) }), this.clearPausedFeedItemIds()) }), d(this, "handleReactNavigationFocus", (e, t) => { this._isReactNavigationFocused = e, this._isReactNavigationFocused && !t ? this.resume() : this.pause() }), d(this, "handleWindowFocus", e => { this._windowId === e.windowId && (e.focused ? this.resume() : this.pause()) }), this.trackedFeedItems = {}, this._id = e, this._windowId = t, this._pausedFeedItemIds = new Set, this._paused = null != n && n, this._isReactNavigationFocused = !0, this._lastFlushTimeMillis = Date.now() } } }, 747161: function(e, t, n) { "use strict"; n.r(t) }, 626135: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnalyticEventConfigs: function() { return N }, AnalyticsContext: function() { return f }, AnalyticsSchema: function() { return d }, addExtraAnalyticsDecorator: function() { return m }, debugLogEvent: function() { return L }, expandEventProperties: function() { return g }, expandLocation: function() { return p }, setUTMContext: function() { return R }, trackNetworkAction: function() { return D } }), n("653041"), n("47120"); var i = n("470079"), r = n("990547"), s = n("570140"), a = n("565384"), o = n("569611"), l = n("97145"), u = n("857192"), d = n("747161"), _ = n("848479"), c = n("960048"), E = n("981631"), I = n("94752"), T = n("689938"); let f = i.createContext({ location: {} }), S = {}, h = performance.now(), A = []; function m(e) { A.push(e) } let N = { [E.AnalyticEvents.APP_OPENED]: { throttlePeriod: 3e5, throttleKeys: () => [] }, [E.AnalyticEvents.APP_BACKGROUND]: { throttlePeriod: 12e4, throttleKeys: () => [] }, [E.AnalyticEvents.ACK_MESSAGES]: { throttlePeriod: 9e5, throttleKeys: e => [e.guild_id, e.channel_id, e.location_section] }, [E.AnalyticEvents.GUILD_VIEWED]: { throttlePeriod: 9e5, throttleKeys: e => [e.guild_id, e.is_pending] }, [E.AnalyticEvents.FRIENDS_LIST_VIEWED]: { throttlePeriod: 9e5, throttleKeys: e => [e.tab_opened] }, [E.AnalyticEvents.NOW_PLAYING_CARD_HOVERED]: { throttlePeriod: 9e5, throttleKeys: e => [e.tab_opened] }, [E.AnalyticEvents.START_SPEAKING]: { throttlePeriod: 9e5, throttleKeys: e => [e.server] }, [E.AnalyticEvents.START_LISTENING]: { throttlePeriod: 9e5, throttleKeys: e => [e.server] }, [E.AnalyticEvents.ACTIVITY_UPDATED]: { throttlePeriod: 6e4, throttleKeys: e => [e.application_id], deduplicate: !0 }, [E.AnalyticEvents.CHANNEL_OPENED]: { throttlePeriod: 9e5, throttleKeys: e => null != e.channel_static_route ? [e.guild_id, e.channel_static_route, e.channel_view] : [e.channel_id, e.channel_view] }, [E.AnalyticEvents.TEXT_IN_VOICE_OPENED]: { throttlePeriod: 864e5, throttleKeys: e => [e.channel_id] }, [E.AnalyticEvents.NOTIFICATION_VIEWED]: { throttlePeriod: 9e5, throttleKeys: e => [e.notif_type] }, [E.AnalyticEvents.MEMBER_LIST_VIEWED]: { throttlePeriod: 9e5, throttleKeys: e => [e.channel_id] }, [E.AnalyticEvents.DM_LIST_VIEWED]: { throttlePeriod: 9e5, throttleKeys: e => [e.channel_id] }, [E.AnalyticEvents.NAV_DRAWER_OPENED]: { throttlePeriod: 9e5, throttleKeys: () => [] }, [E.AnalyticEvents.KEYBOARD_SHORTCUT_USED]: { throttlePeriod: 12e4, throttleKeys: e => { var t; return [e.shortcut_name, e.location_object, ...null !== (t = e.source_class_list) && void 0 !== t ? t : []] } }, [E.AnalyticEvents.QUICKSWITCHER_OPENED]: { throttlePeriod: 1e4, throttleKeys: () => [] }, [E.AnalyticEvents.CHAT_INPUT_COMPONENT_VIEWED]: { throttlePeriod: 9e5, throttleKeys: e => [e.type] }, [E.AnalyticEvents.ROLE_PAGE_VIEWED]: { throttlePeriod: 12e4, throttleKeys: e => [e.role_id, e.tab_opened] }, [E.AnalyticEvents.VIDEO_INPUT_INITIALIZED]: { throttlePeriod: 3e5, throttleKeys: () => [] }, [E.AnalyticEvents.HUB_ONBOARDING_CAROUSEL_SCROLLED]: { throttlePeriod: 9e5, throttleKeys: () => [] }, [E.AnalyticEvents.HUB_STUDENT_PROMPT_CLICKED]: { throttlePeriod: 9e5, throttleKeys: () => [] }, [E.AnalyticEvents.RPC_SERVER_ERROR_CAUGHT]: { throttlePeriod: 864e5, throttleKeys: () => [] }, [E.AnalyticEvents.RPC_COMMAND_SENT]: { throttlePeriod: 864e5, throttleKeys: e => [e.application_id, e.command], throttlePercent: .001 }, [E.AnalyticEvents.RPC_SUBSCRIPTION_REQUESTED]: { throttlePeriod: 864e5, throttleKeys: e => [e.application_id, e.event], throttlePercent: .001 }, [E.AnalyticEvents.CHANNEL_BANNER_VIEWED]: { throttlePeriod: 864e5, throttleKeys: e => [e.banner_type, e.channel_id] }, [E.AnalyticEvents.PREMIUM_UPSELL_VIEWED]: { throttlePeriod: 6e4, throttleKeys: e => [e.type] }, [E.AnalyticEvents.FORUM_CHANNEL_SEARCHED]: { throttlePeriod: 6e4, throttleKeys: e => [e.guild_id, e.channel_id] }, [E.AnalyticEvents.FORUM_CHANNEL_SCROLLED]: { throttlePeriod: 9e5, throttleKeys: e => [e.guild_id, e.channel_id] }, [E.AnalyticEvents.VOICE_CHANNEL_GAME_ACTIVITY_INDICATOR_VIEWED]: { throttlePeriod: 6e4, throttleKeys: e => [e.user_id] }, [E.AnalyticEvents.DM_PROFILE_VIEWED]: { throttlePeriod: 36e5, throttleKeys: e => [e.viewed_profile_user_id] }, [E.AnalyticEvents.MEDIA_VIEWER_SESSION_COMPLETED]: { throttlePercent: .01 }, [E.AnalyticEvents.SUMMARIES_UNREAD_BAR_VIEWED]: { throttlePeriod: 3e5, throttleKeys: e => [e.channel_id] }, [E.AnalyticEvents.ACTIVITY_CARDS_VIEWED]: { throttlePeriod: 9e5, throttleKeys: e => [e.context, e.guild_id] }, [E.AnalyticEvents.GUILD_TOOLTIP_SHOWN]: { throttlePeriod: 9e5, throttleKeys: e => [e.guild_id] }, [E.AnalyticEvents.ACK_COMMUNITY_MESSAGES]: { throttlePeriod: 9e5, throttleKeys: e => [e.channel_id] }, [E.AnalyticEvents.REDESIGN_NAV_BAR_CLICKED]: { throttlePeriod: 9e5, throttleKeys: e => [e.tab] }, [E.AnalyticEvents.BROADCAST_START_BUTTON_HOVERED]: { throttlePeriod: 6e4, throttleKeys: () => [] }, [E.AnalyticEvents.BROADCAST_LIST_VISITED]: { throttlePeriod: 3e5, throttleKeys: () => [] }, [E.AnalyticEvents.CHANNEL_LIST_END_REACHED]: { throttlePeriod: 9e5, throttleKeys: e => [e.guild_id] }, [E.AnalyticEvents.EXPLICIT_MEDIA_REDACTABLE_MESSAGES_LOADED]: { throttlePeriod: 6e4, throttleKeys: e => [e.guild_id, e.channel_id] }, [E.AnalyticEvents.LIVE_ACTIVITY_SETTINGS_UPDATED]: { throttlePeriod: 36e5, throttleKeys: () => [] }, [E.AnalyticEvents.KEYWORD_FILTER_MATCH]: { throttlePeriod: 9e5, throttleKeys: e => [e.message_id] } }; function p(e) { return "string" == typeof e ? { location: e } : { location: e.page, location_page: e.page, location_section: e.section, location_object: e.object, location_object_type: e.objectType } } let O = () => I.AccessibilityFeatureFlags.NONE, C = (0, r.trackMaker)({ analyticEventConfigs: N, dispatcher: s.default, TRACK_ACTION_NAME: "TRACK" }); function R(e) { return S = e } function g(e) { var t, n, i, r, s; let a = e; if (!a && (a = {}), null != a.location) { let { location: e, ...t } = a; a = { ...t, ...p(e) } } if (null != a.source) { ; let { source: e, ...t } = a; a = { ...t, ..."string" == typeof(s = e) ? { source: s } : { source_page: s.page, source_section: s.section, source_object: s.object, source_object_type: s.objectType, source_promotion_id: s.promotionId } } } a.client_performance_cpu = _.default.getCurrentCPUUsagePercent(), a.client_performance_memory = _.default.getCurrentMemoryUsageKB(), a.cpu_core_count = _.default.getCPUCoreCount(), a.accessibility_features = O(), a.rendered_locale = T.default.getLocale(), a.uptime_app = Math.floor((performance.now() - h) / 1e3); let o = _.default.getProcessUptime(); null != o && (a.uptime_process_renderer = Math.floor(o)); let { utmSource: l, utmMedium: u, utmCampaign: d, utmContent: c } = S; return a.utm_source = null !== (t = a.utm_source) && void 0 !== t ? t : l, a.utm_medium = null !== (n = a.utm_medium) && void 0 !== n ? n : u, a.utm_campaign = null !== (i = a.utm_campaign) && void 0 !== i ? i : d, a.utm_content = null !== (r = a.utm_content) && void 0 !== r ? r : c, A.forEach(e => e(a)), a } function L(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; u.default.isLoggingAnalyticsEvents && console.info("AnalyticsUtils.track(...):", e, t), n ? o.report("Analytics", e, t) : o.report("Analytics", e) } let v = (0, r.trackMaker)({ analyticEventConfigs: N, dispatcher: s.default, TRACK_ACTION_NAME: "TRACK" }); function D(e, t) { let n = g({ location: (0, a.getLocation)(), ...t }); (0, a.setDebugTrackedData)(e, { type: "action", ...t }), L(e, n), v(e, n) } t.default = { ...r, getCampaignParams: r.getCampaignParams, setSystemAccessibilityFeatures: function(e) { O = e }, expandEventProperties: g, track: function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; if (!l.IGNORE_ANALYTICS_BREADCRUMB_EVENTS.includes(e) && c.default.addBreadcrumb({ category: "analytics", message: "".concat(e) }), null != n.throttlePercent && Math.random() > n.throttlePercent) return Promise.resolve(); let i = g(t); return L(e, i, n.logEventProperties), C(e, i, { flush: n.flush, fingerprint: n.fingerprint }) } } }, 81063: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchAssetIds: function() { return R }, getAssetFromImageURL: function() { return A }, getAssetIds: function() { return g }, getAssetImage: function() { return m }, getAssets: function() { return N } }), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var i = n("512722"), r = n.n(i), s = n("544891"), a = n("570140"), o = n("430449"), l = n("710845"), u = n("134432"), d = n("981631"); let _ = "https://i.scdn.co/image/", c = (e, t, n) => "https://static-cdn.jtvnw.net/previews-ttv/live_user_".concat(e, "-").concat(t, "x").concat(n, ".jpg"), E = /https:\/\/static-cdn\.jtvnw\.net\/previews-ttv\/live_user_(.+)-\{width\}x\{height\}.jpg/, I = e => "https://i.ytimg.com/vi/".concat(e, "/hqdefault_live.jpg"), T = /https:\/\/i\.ytimg\.com\/vi\/([a-zA-Z0-9_-]+)\/hqdefault_live\.jpg/, f = { [d.PlatformTypes.SPOTIFY]: { deserialize: e => "".concat(_).concat(encodeURIComponent(e)), serialize: e => e.split(_)[1] }, [d.PlatformTypes.TWITCH]: { deserialize: (e, t) => c(encodeURIComponent(e), t[0], t[1]), serialize: e => { let t = e.match(E); return null != t ? t[1] : null } }, [d.PlatformTypes.YOUTUBE]: { deserialize: e => I(encodeURIComponent(e)), serialize: e => { let t = e.match(T); return null != t ? t[1] : null } }, mp: { deserialize: e => (r()(null != window.GLOBAL_ENV.MEDIA_PROXY_ENDPOINT, "MEDIA_PROXY_ENDPOINT not configured"), new URL(e, location.protocol + window.GLOBAL_ENV.MEDIA_PROXY_ENDPOINT).toString()), serialize: e => e } }, S = {}; async function h(e) { let { body: t } = await s.HTTP.get({ url: d.Endpoints.APPLICATION_ASSETS(e), oldFormErrors: !0 }); return a.default.dispatch({ type: "APPLICATION_ASSETS_UPDATE", applicationId: e, assets: t }), o.default.getApplicationAssets(e) } function A(e, t) { let n = f[e].serialize(t); return n ? "".concat(e, ":").concat(n.toString()) : null } function m(e, t, n) { if (null != t && t.includes(":")) { let [e, i] = t.split(":"); if (e === d.PlatformTypes.TWITCH) { if (null == n || "number" == typeof n) { new l.default("ApplicationAssetUtils").warn("getAssetImage: size must === [number, number] for Twitch"); return } return f[d.PlatformTypes.TWITCH].deserialize(i, n) } return Object.prototype.hasOwnProperty.call(f, e) ? f[e].deserialize(i) : void 0 } if (null == e || null == t) return; let i = Array.isArray(n) ? Math.max(...n) : n, r = "number" == typeof i ? "?size=".concat((0, u.getBestMediaProxySize)(i)) : ""; return null != window.GLOBAL_ENV.CDN_HOST ? "".concat(location.protocol, "//").concat(window.GLOBAL_ENV.CDN_HOST, "/app-assets/").concat(e, "/").concat(t, ".png").concat(r) : "".concat((0, s.getAPIBaseURL)(), "/applications/").concat(e, "/app-assets/").concat(t, ".png").concat(r) } async function N(e) { let t = await function(e) { var t; let n = o.default.getApplicationAssets(e); return null == n || (t = n.lastUpdated, Date.now() - t > 36e5) ? h(e) : Promise.resolve(n) }(e); return null == t ? void 0 : t.assets } async function p(e, t) { let n = t.filter(e => null != e && !Object.prototype.hasOwnProperty.call(S, e) && null == S[e]); if (0 === n.length) return; let { body: i } = await s.HTTP.post({ url: d.Endpoints.APPLICATION_EXTERNAL_ASSETS(e), body: { urls: n }, oldFormErrors: !0 }); for (let { url: e, external_asset_path: t } of i) S[e] = t } function O(e, t) { let n = 0; if (e.filter(e => (null == e ? void 0 : e.startsWith("http:")) || (null == e ? void 0 : e.startsWith("https:"))).length > 0) for (let i = 0; i < e.length; i++) { let r = e[i]; if (null == r) continue; let s = Object.prototype.hasOwnProperty.call(S, r) ? S[r] : void 0; null != s && (t[i] = A("mp", s), n++) } return n === e.length } function C(e, t, n, i) { let r = !1; for (let s = 0; s < e.length; s++) { let a = e[s]; if (null == a || null != t[s]) continue; let o = Object.prototype.hasOwnProperty.call(n, a) && n[a]; if (!o) { if (null == i || i <= 0) { t[s] = null; continue } r = !0 } t[s] = o.id } return r } async function R(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1; a.default.dispatch({ type: "APPLICATION_ASSETS_FETCH", applicationId: e }); let i = [], r = t.filter(e => (null == e ? void 0 : e.startsWith("http:")) || (null == e ? void 0 : e.startsWith("https:"))); return (r.length > 0 && await p(e, r), O(t, i)) ? (a.default.dispatch({ type: "APPLICATION_ASSETS_FETCH_SUCCESS", applicationId: e }), i) : C(t, i, await N(e), n) ? h(e).then(() => R(e, t, n - 1)) : (a.default.dispatch({ type: "APPLICATION_ASSETS_FETCH_SUCCESS", applicationId: e }), i) } function g(e, t) { let n = []; if (O(t, n)) return n; let i = o.default.getApplicationAssets(e); return null == i ? n : (C(t, n, i), n) } }, 129542: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getBuildPlatform: function() { return o } }), n("411104"); var i, r, s = n("358085"), a = n("981631"); function o() { switch ((0, s.getPlatform)()) { case s.PlatformTypes.WINDOWS: let e = "x86"; if (null != window.DiscordNative && (e = window.DiscordNative.os.arch), "x86" === e || "ia32" === e) return a.BuildPlatformTypes.WIN32; return a.BuildPlatformTypes.WIN64; case s.PlatformTypes.OSX: return a.BuildPlatformTypes.MACOS; case s.PlatformTypes.LINUX: return a.BuildPlatformTypes.LINUX; default: throw Error("Unsupported build type") } }(r = i || (i = {})).X86 = "x86", r.IA32 = "ia32" }, 510990: function(e, t, n) { "use strict"; n.r(t), n.d(t, { cancelGetAttachmentFile: function() { return l }, getAttachmentFile: function() { return o } }); var i = n("512722"), r = n.n(i), s = n("476326"), a = n("861990"); function o(e, t) { var n; r()(e.item.platform === s.UploadPlatform.WEB, "Upload must be in the Web format"); let i = (0, a.getAttachmentPayload)(e, t); return Promise.resolve({ file: e.item.file, name: null !== (n = i.filename) && void 0 !== n ? n : "" }) } async function l(e) {} }, 449934: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getArtForPath: function() { return a }, getToken: function() { return r }, isAuthenticated: function() { return s } }); var i = n("213919"); function r() { return i.getToken() } function s() { return null != r() } let a = e => null != e && /^\/developers/.test(e) ? n("376665") : null }, 483360: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { COMMAND_SUPPORTED_CHANNEL_TYPE_KEYS: function() { return en } }), n("653041"), n("733860"), n("757143"), n("47120"); var r = n("658722"), s = n.n(r), a = n("392711"), o = n.n(a), l = n("620490"), u = n("933557"), d = n("605436"), _ = n("565924"), c = n("710845"), E = n("339085"), I = n("859802"), T = n("31445"), f = n("931261"), S = n("285651"), h = n("822179"), A = n("926491"), m = n("373228"), N = n("601070"), p = n("675478"), O = n("131704"), C = n("598077"), R = n("592125"), g = n("984933"), L = n("271383"), v = n("430824"), D = n("375954"), M = n("496675"), y = n("158776"), P = n("699516"), U = n("944486"), b = n("914010"), G = n("594174"), w = n("55563"), k = n("823379"), B = n("892880"), V = n("700785"), x = n("226951"), F = n("709054"), H = n("624138"), Y = n("51144"), j = n("981631"), W = n("727785"), K = n("176505"), z = n("689938"); let Z = new c.default("AutocompleteUtils"), X = () => !0, Q = /(\t|\s)/, q = [], J = (i = n("786074").default).MENTION_EVERYONE, $ = i.MENTION_HERE, ee = i.LAUNCHABLE_APPLICATIONS; function et() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0, t = arguments.length > 1 ? arguments[1] : void 0; return 1e3 * e * (null != t ? t : 1) } let en = [g.GUILD_SELECTABLE_CHANNELS_KEY, g.GUILD_VOCAL_CHANNELS_KEY, j.ChannelTypes.GUILD_CATEGORY]; function ei(e, t) { let { exactQuery: n, containQuery: i, queryLower: r, isFullMatch: a } = t, o = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; try { var l, u; if (n.test(e)) { if (e.toLocaleLowerCase() === r) return 10; if (!1 === a) { let t = r.length / e.length; return Math.max(1, 7 * t) } return 7 } if (i.test(e)) return 5; if (l = r, u = e, l.split(/(?:,| )+/).every(e => RegExp(x.default.escape(e), "i").test(u))) return 3; if (o && s()(r, e)) return 1 } catch (e) { Z.error(e) } return 0 } function er(e) { return (null == e ? void 0 : e.joinedAt) != null && !e.isPending } function es(e) { let { query: t, members: n, limit: i, filter: r, allowSnowflake: a } = e, o = G.default.getUsers(), u = b.default.getGuildId(), d = t.toLocaleLowerCase(), _ = (0, H.normalize)(d), c = [], E = [], I = n.length, T = 0, f = 0; for (; T < I;) { var S, h, A, m, N, p, O, R, g; let e, i; let l = n[T]; l instanceof C.default ? (i = l, e = null === (h = L.default.getNick(u, i.id)) || void 0 === h ? void 0 : h.toLocaleLowerCase()) : (e = null === (A = l.nick) || void 0 === A ? void 0 : A.toLocaleLowerCase(), i = o[l.userId]); let I = null === (S = Y.default.getGlobalName(i)) || void 0 === S ? void 0 : S.toLocaleLowerCase(); if (null == r || r(i)) { let n = i.username.toLocaleLowerCase(), r = (0, H.stripDiacritics)(n), o = (0, H.normalize)(r), l = null != e ? (0, H.stripDiacritics)(e) : null, u = null != l ? (0, H.normalize)(l) : null, T = null != I ? (0, H.stripDiacritics)(I) : null, S = null != T ? (0, H.normalize)(T) : null; a && t === i.id || n.substring(0, d.length) === d || r.substring(0, d.length) === d || (null == e ? void 0 : e.substring(0, d.length)) === d || (null == l ? void 0 : l.substring(0, d.length)) === d || (null == I ? void 0 : I.substring(0, d.length)) === d || (null == T ? void 0 : T.substring(0, d.length)) === d ? c.push({ type: W.AutocompleterResultTypes.USER, record: i, score: 10, comparator: null !== (m = null != I ? I : e) && void 0 !== m ? m : n, sortable: null !== (N = null != T ? T : l) && void 0 !== N ? N : r }) : o.substring(0, _.length) === _ || (null == u ? void 0 : u.substring(0, _.length)) === _ || (null == S ? void 0 : S.substring(0, _.length)) === _ ? c.push({ type: W.AutocompleterResultTypes.USER, record: i, score: 1, comparator: null !== (p = null != I ? I : e) && void 0 !== p ? p : n, sortable: null !== (O = null != T ? T : l) && void 0 !== O ? O : r }) : f < 50 && (s()(d, r) || s()(_, o) || null != l && s()(d, l) || null != u && s()(_, u) || null != T && s()(d, T) || null != S && s()(_, S)) && (E.push({ type: W.AutocompleterResultTypes.USER, record: i, score: 1, comparator: null !== (R = null != I ? I : e) && void 0 !== R ? R : n, sortable: null !== (g = null != T ? T : l) && void 0 !== g ? g : r }), f += 1) } T += 1 } return c.sort(l.default), c.length < i && (E.sort(l.default), c = c.concat(E.slice(0, Math.max(0, i - c.length)))), c.length > i && (c.length = i), c } function ea(e, t, n) { let i = 0, r = null; for (let s of t) { let t = ei(e, s, n); t > i && (i = t, r = s) } return null != r && (r.isFullMatch ? t.length = 0 : t.splice(t.indexOf(r), 1)), i } function eo(e, t) { let n = R.default.getChannel(e); return null == e || null == n ? [] : o()(D.default.getMessages(e).toArray()).reverse().uniqBy(e => e.author.id).map(e => G.default.getUser(e.author.id)).filter(e => { if (null == e || e.isNonUserBot()) return !1; let t = n.getGuildId(); return null == t || er(L.default.getMember(t, e.id)) }).map(e => { var t; let i = n.getGuildId(), r = null != i ? L.default.getMember(i, e.id) : null; return { type: W.AutocompleterResultTypes.USER, record: e, score: 0, comparator: null !== (t = null == r ? void 0 : r.nick) && void 0 !== t ? t : Y.default.getName(e) } }).take(t).value() } t.default = { queryFriends(e) { let { query: t, limit: n = 10, _fuzzy: i = !0, filter: r } = e; return es({ query: t, members: P.default.getFriendIDs().map(e => G.default.getUser(e)).filter(k.isNotNullish), limit: n, filter: r }) }, queryDMUsers(e) { let { query: t, limit: n = 10, filter: i } = e; return es({ query: t, members: R.default.getDMUserIds().map(e => G.default.getUser(e)).filter(k.isNotNullish), limit: n, filter: i }) }, queryChannelUsers(e) { let t, { channelId: n, query: i, limit: r = 10, request: s = !0, checkRecentlyTalkedOnEmptyQuery: a = !0, allowSnowflake: o = !1 } = e, l = R.default.getChannel(n); if (null == l) return []; let u = l.isThread() ? R.default.getChannel(l.parent_id) : null, d = null != u ? u : l; if (null == d) return []; if (d.isPrivate()) { t = d.recipients.map(e => { var t; return { userId: e, nick: null !== (t = P.default.getNickname(e)) && void 0 !== t ? t : null } }); let e = G.default.getCurrentUser(); null != e && t.push({ userId: e.id, nick: null }) } else { if (0 === i.length && a) { let e = eo(l.id, r); if (e.length > 0) return e } t = L.default.getMembers(d.guild_id).filter(er), s && B.default.requestMembers(d.guild_id, i, r) } return es({ query: i, members: t, limit: r, filter: e => d.isPrivate() || V.can({ permission: j.Permissions.VIEW_CHANNEL, user: e, context: d }), allowSnowflake: o }) }, queryGuildUsers(e) { let { guildId: t, query: n, limit: i = 10, request: r = !0, checkRecentlyTalkedOnEmptyQuery: s = !0, filter: a, allowSnowflake: o } = e; if (null == v.default.getGuild(t)) return []; if (0 === n.length && s) { let e = eo(U.default.getChannelId(t), i); if (e.length > 0) return e } let l = L.default.getMembers(t).filter(er); return r && n.length > 0 && B.default.requestMembers(t, n, i), es({ query: n, members: l, limit: i, filter: a, allowSnowflake: o }) }, queryUsers(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 10, n = (arguments.length > 2 && void 0 !== arguments[2] && arguments[2], !(arguments.length > 3) || void 0 === arguments[3] || arguments[3]), i = arguments.length > 4 ? arguments[4] : void 0; return n && e.length > 0 && B.default.requestMembers(null, e, t), es({ query: e, members: o()(G.default.getUsers()).values().value(), limit: t, filter: i }) }, queryChannels(e) { let t, { query: n, guildId: i, limit: r = j.MAX_AUTOCOMPLETE_RESULTS, fuzzy: s = !0, filter: a = X, type: d = g.GUILD_SELECTABLE_CHANNELS_KEY, allowEmptyQueries: _ = !1, requireVocalConnectAccess: c = !0, boosters: E = {}, allowSnowflake: I } = e, T = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = e.split(" ").filter(e => "" !== e || t).map(e => { let t = e.toLocaleLowerCase(); return { queryLower: t, exactQuery: RegExp("^".concat(x.default.escape(t)), "i"), containQuery: RegExp(x.default.escape(t), "i"), isFullMatch: !1 } }); if (e.includes(" ")) { let t = e.toLocaleLowerCase(); n.unshift({ queryLower: t, exactQuery: RegExp("^".concat(x.default.escape(t).replace(" ", "( |-)")), "i"), containQuery: RegExp(x.default.escape(t).replace(" ", "( |-)"), "i"), isFullMatch: !0 }) } return n }(n, _); t = null != i ? o()(g.default.getChannels(i)[d]).map(e => e.channel).concat(N.default.computeAllActiveJoinedThreads(i)).value() : o()(R.default.loadAllGuildAndPrivateChannelsFromDisk()).values().concat(N.default.computeAllActiveJoinedThreads()).value(); let f = {}, S = []; for (let e of t) { var h, A, m, p, C; if (h = d, A = e.type, m = null != i, !(h === A || (m || (0, O.isGuildChannelType)(A)) && (h === g.GUILD_SELECTABLE_CHANNELS_KEY ? (0, O.isGuildSelectableChannelType)(A) || (0, O.isGuildVocalChannelType)(A) : h === g.GUILD_VOCAL_CHANNELS_KEY && (0, O.isGuildVocalChannelType)(A))) || (0, O.isGuildChannelType)(e.type) && !M.default.can(c ? e.accessPermissions : j.Permissions.VIEW_CHANNEL, e) || !a(e)) continue; let t = [...T], r = e.name.toLocaleLowerCase(), o = I && n === e.id, l = o ? 10 : ea(r, t, s); if (0 !== l) { if (t.length > 0) { for (let n of [function(e, t) { if (null == e.guild_id) return; let n = t[e.guild_id]; if (null == n) { var i; n = t[e.guild_id] = null === (i = v.default.getGuild(e.guild_id)) || void 0 === i ? void 0 : i.toString().toLocaleLowerCase() } return n }(e, f), function(e, t) { if (null == e.parent_id) return; let n = t[e.parent_id]; if (null == n) { var i; n = t[e.parent_id] = null === (i = R.default.getChannel(e.parent_id)) || void 0 === i ? void 0 : i.name.toLocaleLowerCase() } return n }(e, f)]) { if (null == n || "" === n) continue; let e = ea(n, t, !1); 0 !== e && (l += .5 * e) } l = Math.min(6, l) } if (0 !== l && !(t.length > 1) && (1 !== t.length || t[0].isFullMatch || o)) { ; if (p = d, C = e.type, p === g.GUILD_SELECTABLE_CHANNELS_KEY && (0, O.isGuildVocalChannelType)(C)) l = Math.max(l - 1, .5); S.push({ type: (0, O.isGuildVocalChannelType)(e.type) ? W.AutocompleterResultTypes.VOICE_CHANNEL : W.AutocompleterResultTypes.TEXT_CHANNEL, record: e, score: et(l, E[e.id]), comparator: (0, u.computeChannelName)(e, G.default, P.default), sortable: r }) } } } return S.sort(l.default), null != r && S.length > r && (S.length = r), S }, queryGuilds(e) { let { query: t, limit: n = 10, fuzzy: i = !0, filter: r = X, boosters: s = {} } = e, a = "" === t ? "" : t.toLocaleLowerCase(), u = { exactQuery: RegExp("^".concat(x.default.escape(a)), "i"), containQuery: RegExp(x.default.escape(a), "i"), queryLower: a }, d = []; for (let e of o()(v.default.getGuilds()).values().value()) { if (!r(e)) continue; let t = e.name.toLocaleLowerCase(), n = ei(t, u, i); n > 0 && d.push({ type: W.AutocompleterResultTypes.GUILD, record: e, score: et(n, s[e.id]), comparator: e.toString(), sortable: t }) } return d.sort(l.default), d.length > n && (d.length = n), d }, queryGroupDMs(e) { let { query: t, limit: n = 10, fuzzy: i = !0, filter: r = X, boosters: s = {} } = e, a = (0, H.stripDiacritics)((0, H.normalize)(t.toLocaleLowerCase())), d = { exactQuery: RegExp("^".concat(x.default.escape(a)), "i"), containQuery: RegExp(x.default.escape(a), "i"), queryLower: a }, _ = o()(R.default.getMutablePrivateChannels()).values().value(), c = []; for (let e of _) { if (!e.isMultiUserDM() || !r(e)) continue; let t = (0, u.computeChannelName)(e, G.default, P.default).toLocaleLowerCase(), n = (0, H.stripDiacritics)((0, H.normalize)(t)), a = ei(n, d, i); a > 0 && c.push({ type: W.AutocompleterResultTypes.GROUP_DM, record: e, score: et(a, s[e.id]), comparator: (0, u.computeChannelName)(e, G.default, P.default), sortable: n }) } return c.sort(l.default), c.length > n && (c.length = n), c }, queryApplications(e) { let { query: t, limit: n = 10, fuzzy: i = !0, filter: r = X } = e, s = t.toLocaleLowerCase(), a = { exactQuery: RegExp("^".concat(x.default.escape(s)), "i"), containQuery: RegExp(x.default.escape(s), "i"), queryLower: s }, o = ee(), u = []; for (let { application: e } of o) { if (!r(e)) continue; let t = e.name.toLocaleLowerCase(), n = ei(t, a, i); n > 0 && u.push({ type: W.AutocompleterResultTypes.APPLICATION, record: e, score: n, comparator: e.name, sortable: t }) } return u.sort(l.default), u.length > n && (u.length = n), u }, querySKUs(e) { let { query: t, limit: n = 10, fuzzy: i = !0, filter: r = X } = e, s = t.toLocaleLowerCase(), a = { exactQuery: RegExp("^".concat(x.default.escape(s)), "i"), containQuery: RegExp(x.default.escape(s), "i"), queryLower: s }, u = o()(w.default.getSKUs()).values().value(), d = []; for (let e of u) if (e.type === j.SKUTypes.DURABLE_PRIMARY && r(e)) { let t = e.name.toLocaleLowerCase(), n = ei(t, a, i); n > 0 && d.push({ type: W.AutocompleterResultTypes.SKU, record: e, score: n, comparator: e.name, sortable: t }) } return d.sort(l.default), d.length > n && (d.length = n), d }, getRecentlyTalked: eo, queryMentionResults(e) { let { query: t, channel: n, canMentionEveryone: i = !1, canMentionHere: r = !0, canMentionUsers: a = !0, canMentionRoles: l = !0, includeAllGuildUsers: u = !1, includeNonMentionableRoles: d = !1, checkRecentlyTalkedOnEmptyQuery: _ = !0, limit: c = j.MAX_AUTOCOMPLETE_RESULTS, request: E, allowSnowflake: I = !1 } = e, T = a ? (u && null != n.guild_id ? this.queryGuildUsers({ guildId: n.guild_id, query: t, limit: c, checkRecentlyTalkedOnEmptyQuery: _, request: E, allowSnowflake: I }) : this.queryChannelUsers({ channelId: n.id, query: t, limit: c, checkRecentlyTalkedOnEmptyQuery: _, allowSnowflake: I })).map(e => { let { record: t, score: i, comparator: r } = e; return { user: t, score: i, comparator: r, nick: L.default.getNick(n.guild_id, t.id), status: y.default.getStatus(t.id) } }) : [], f = T.length, S = t.toLowerCase(), h = []; if (f < c && l) { let e = n.getGuildId(), t = v.default.getGuild(e); null != t && (o()(v.default.getRoles(t.id)).filter(t => { let { mentionable: n, name: r, id: a } = t; return (n || i || d) && (s()(S, r.toLowerCase()) || I && S === a) && a !== F.default.castGuildIdAsEveryoneGuildRoleId(e) }).take(c - f).forEach(e => { h.push(e) }), f += h.length) } let A = []; return !n.isPrivate() && i && l && (f < c && s()(S, J().test) && (A.push(J()), f += 1), r && f < c && s()(S, $().test) && A.push($())), { users: T, globals: A, roles: h } }, queryGuildMentionResults(e) { let { query: t, guildId: n, canMentionEveryone: i = !1, canMentionUsers: r = !0, canMentionRoles: a = !0, canMentionNonMentionableRoles: l = !1 } = e, u = r ? this.queryGuildUsers({ guildId: n, query: t }).map(e => ({ ...e, status: y.default.getStatus(e.record.id) })) : [], _ = u.length, c = t.toLowerCase(), E = []; if (_ < j.MAX_AUTOCOMPLETE_RESULTS && a) { let e = v.default.getGuild(n); null != e && (o()(v.default.getRoles(e.id)).filter(e => { let { mentionable: t, name: r, id: a } = e; return (t || i || l) && s()(c, r.toLowerCase()) && (0, d.isNotEveryoneRoleId)(n, a) }).take(j.MAX_AUTOCOMPLETE_RESULTS - _).forEach(e => { E.push(e) }), _ += E.length) } let I = []; return i && a && (_ < j.MAX_AUTOCOMPLETE_RESULTS && s()(c, J().test) && (I.push(J()), _ += 1), _ < j.MAX_AUTOCOMPLETE_RESULTS && s()(c, $().test) && I.push($())), { users: u, globals: I, roles: E } }, queryChoice(e) { let { query: t, choices: n, limit: i = 10, fuzzy: r = !0 } = e, s = t.toLocaleLowerCase(), a = RegExp("^".concat(x.default.escape(s)), "i"), l = RegExp(x.default.escape(s), "i"), u = o()(n).map((e, t) => { let n = ei(e.displayName.toLocaleLowerCase(), { exactQuery: a, containQuery: l, queryLower: s }, r); return n > 0 ? { choice: e, score: n, originalIndex: t } : null }).filter(k.isNotNullish).sortBy(e => -1 * e.score); return null !== i && (u = u.take(i)), u.value() }, queryStaticRouteChannels(e) { let { query: t, guild: n } = e, i = t.toLocaleLowerCase(), r = { exactQuery: RegExp("^".concat(x.default.escape(i)), "i"), containQuery: RegExp(x.default.escape(i), "i"), queryLower: i }, s = ((0, I.canSeeGuildHome)(n.id) || (0, f.canSeeOnboardingHome)(n.id)) && !n.hasFeature(j.GuildFeatures.HUB), a = n.hasFeature(j.GuildFeatures.COMMUNITY), o = (0, T.isGuildOnboardingAvailable)(n) && n.hasFeature(j.GuildFeatures.COMMUNITY), l = [{ id: K.StaticChannelId.SERVER_GUIDE, name: z.default.Messages.SERVER_GUIDE }, { id: K.StaticChannelId.CHANNEL_BROWSER, name: z.default.Messages.CHANNEL_BROWSER_TITLE }, { id: K.StaticChannelId.CUSTOMIZE_COMMUNITY, name: z.default.Messages.CHANNELS_AND_ROLES }], u = []; for (let e of l) { if ((e.id !== K.StaticChannelId.SERVER_GUIDE || !!s) && (e.id !== K.StaticChannelId.CHANNEL_BROWSER || !!a) && (e.id !== K.StaticChannelId.CUSTOMIZE_COMMUNITY || !!o)) ei(e.name.toLocaleLowerCase(), r, !1) > 0 && u.push(new O.UnknownChannelRecord({ id: e.id, name: e.name, type: j.ChannelTypes.UNKNOWN, guild_id: n.id })) } return u }, queryChannelResults(e) { let { query: t, channel: n, type: i = g.GUILD_SELECTABLE_CHANNELS_KEY, channelTypes: r } = e; return { channels: this.queryChannels({ query: t, guildId: n.getGuildId(), limit: void 0, fuzzy: void 0, filter: e => null == r || r.includes(e.type), type: i, allowEmptyQueries: !0 }).map(e => e.record) } }, queryApplicationCommandChannelResults(e) { let { query: t, channel: n, channelTypes: i, limit: r = j.MAX_AUTOCOMPLETE_RESULTS, allowSnowflake: s } = e; if (null == n.guild_id) { let e = []; return (null == i || i.includes(n.type)) && e.push(n), { channels: e } } let a = []; for (let e of en) a = a.concat(this.queryChannels({ query: t, guildId: n.guild_id, limit: r, fuzzy: !0, filter: e => null == i || i.includes(e.type), type: e, allowEmptyQueries: !0, requireVocalConnectAccess: !1, allowSnowflake: s })); return a = a.filter(e => { let { record: t } = e; return "null" !== t.id }).sort(_.default), null != r && a.length > r && (a = a.slice(0, r)), { channels: a.map(e => e.record) } }, queryChoiceResults(e) { let { query: t, choices: n } = e; return { choices: this.queryChoice({ query: t, choices: n, limit: null }).map(e => e.choice) } }, queryEmojiResults(e) { let { query: t, channel: n, intention: i, maxCount: r = j.MAX_AUTOCOMPLETE_RESULTS, matchComparator: s } = e; return p.FrecencyUserSettingsActionCreators.loadIfNecessary(), { emojis: E.default.searchWithoutFetchingLatest({ channel: n, query: t, count: r, intention: i, matchComparator: s }) } }, queryStickers(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], [n, i] = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [null, X], { stickerMetadata: r } = A.default, s = G.default.getCurrentUser(), a = new Set, l = []; for (let o of (p.FrecencyUserSettingsActionCreators.loadIfNecessary(), e)) { if ("" === o) continue; let e = o.toLocaleLowerCase(), u = (0, H.stripDiacritics)(e), d = RegExp("^".concat(x.default.escape(u)), "i"), _ = RegExp("".concat(x.default.escape(u)), "i"); r.forEach((r, o) => { let u = 0, c = null, E = A.default.getStickerById(o); if (null == E || !i(E, (0, S.getStickerSendability)(E, s, n))) return; for (let n of r) { let { type: i, value: r } = n, s = function(e) { switch (e) { case m.StickerMetadataTypes.STICKER_NAME: return 11; case m.StickerMetadataTypes.CORRELATED_EMOJI: return 6; case m.StickerMetadataTypes.TAG: return 1; case m.StickerMetadataTypes.GUILD_NAME: case m.StickerMetadataTypes.PACK_NAME: return 8; default: return 1 } }(i), a = 0; t ? r === e ? a = 10 * s : d.test(r) ? a = 7 * s : (i === m.StickerMetadataTypes.GUILD_NAME || i === m.StickerMetadataTypes.PACK_NAME || i === m.StickerMetadataTypes.STICKER_NAME) && _.test(r) && (a = 5 * s) : r === e && (a = 10 * s, c = r), a > u && (u = a, c = r) } let I = h.default.stickerFrecencyWithoutFetchingLatest.getScore(o); null != I && (u *= I / 100), u > 0 && null != c && !a.has(E.id) && (a.add(E.id), l.push({ sticker: E, comparator: c, score: u })) }) } return 0 === (l = o()(l).sortBy(e => -1 * e.score).value()).length && (l = q), l }, matchSentinel: (e, t, n) => !Q.test(t) && e === n, hasSameRoleAsUsername(e, t) { if (!t.isPomelo()) return !1; let n = v.default.getGuild(e.getGuildId()); for (let { name: e } of Object.values(null != n ? v.default.getRoles(n.id) : {})) if (t.username.startsWith(e.toLowerCase())) return !0; return !1 } } }, 768581: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { DEFAULT_AVATARS: function() { return T }, SUPPORTS_WEBP: function() { return f }, getAvatarDecorationURL: function() { return g }, getEmojiURL: function() { return A }, getGuildMemberAvatarURL: function() { return C }, getGuildMemberAvatarURLSimple: function() { return O }, getGuildMemberBannerURL: function() { return L }, getUserAvatarURL: function() { return p }, getUserBannerURL: function() { return R }, getVideoFilterAssetURL: function() { return w }, isAnimatedIconHash: function() { return B }, isAnimatedImageURL: function() { return x }, isVideoAssetHash: function() { return V } }), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var r = n("654861"), s = n.n(r), a = n("664751"), o = n("864106"), l = n("134432"), u = n("930153"), d = n("358085"), _ = n("709054"), c = n("981631"), E = n("377668"), I = n("970952"); let T = (i = n("426563").default).DEFAULT_AVATARS; i.DEFAULT_GROUP_DM_AVATARS; let f = i.canUseWebp(), S = (0, d.isAndroid)(); function h(e) { let t, { endpoint: n, path: i, id: r, hash: s, size: o, canAnimate: u = !1, keepAspectRatio: d, format: _ = null } = e; if (null == r || null == s) return; let c = null != _ ? _ : u && B(s) ? "gif" : "jpg"; u && V(s) && (c = "mp4"); let E = window.GLOBAL_ENV.CDN_HOST; if (null != E ? ("jpg" === c && (c = f ? "webp" : "png"), t = "".concat(location.protocol, "//").concat(E, "/").concat(i, "/").concat(r, "/").concat(s, ".").concat(c)) : t = location.protocol + window.GLOBAL_ENV.API_ENDPOINT + n(r, s, c), "mp4" === c) return t; let I = {}; return null != o && (I.size = (0, l.getBestMediaProxySize)(o * (0, l.getDevicePixelRatio)())), null != d && (I.keep_aspect_ratio = d), t + "?".concat(a.stringify(I)) } function A(e) { let { id: t, animated: n, size: i, forcePNG: r = !1 } = e, s = f && !r ? "webp" : "png", a = f && !S ? "&quality=lossless" : ""; return null != window.GLOBAL_ENV.CDN_HOST ? "".concat(location.protocol, "//").concat(window.GLOBAL_ENV.CDN_HOST, "/emojis/").concat(t, ".").concat(n ? "gif" : s, "?size=").concat((0, l.getBestMediaProxySize)(i * (0, l.getDevicePixelRatio)(), S)).concat(a) : location.protocol + window.GLOBAL_ENV.API_ENDPOINT + c.Endpoints.EMOJI(t, n ? "gif" : s) } function m(e, t) { if (null == e && null == t) return T[0]; let n = (0, u.parseInteger)(t, 0); return n > 0 ? T[n % 5] : null != e ? T[s()(e).shiftRight(22).mod(6).toJSNumber()] : T[0] } function N(e) { let { id: t, avatar: n, discriminator: r, bot: s } = e, a = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], o = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : c.AVATAR_SIZE, l = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; if (s && t !== E.CLYDE_AI_USER_ID) { let e = i.BOT_AVATARS[n]; if (e) return e; if (null == n && "0000" === r) return T[0] } return h({ endpoint: c.Endpoints.AVATAR, path: "avatars", id: t, hash: n, size: o, canAnimate: a, format: l }) } function p(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : c.AVATAR_SIZE, r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; return null !== (t = N(e, n, i, r)) && void 0 !== t ? t : m(e.id, e.discriminator) } function O(e) { let t, { guildId: n, userId: i, avatar: r, canAnimate: s = !1, size: o = c.AVATAR_SIZE } = e, u = s && B(r) ? "gif" : "jpg", { CDN_HOST: d } = window.GLOBAL_ENV; return null != d ? ("jpg" === u && (u = f ? "webp" : "png"), t = "".concat(location.protocol, "//").concat(d).concat(c.Endpoints.GUILD_MEMBER_AVATAR(n, i, r, u))) : t = location.protocol + window.GLOBAL_ENV.API_ENDPOINT + c.Endpoints.GUILD_MEMBER_AVATAR(n, i, r, u), t + "?".concat(a.stringify({ size: (0, l.getBestMediaProxySize)(o * (0, l.getDevicePixelRatio)()) })) } function C(e) { let { userId: t, avatar: n, guildId: i } = e, r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return null == n ? null : O({ userId: t, avatar: n, guildId: i, canAnimate: r }) } function R(e) { let t, { id: n, banner: i, canAnimate: r, size: s } = e; if (null == i) return; let a = window.GLOBAL_ENV.CDN_HOST, o = r && B(i) ? "gif" : "png"; return t = (null != a ? "".concat(location.protocol, "//").concat(a, "/banners/").concat(n, "/").concat(i, ".").concat(o) : location.protocol + window.GLOBAL_ENV.API_ENDPOINT + c.Endpoints.USER_BANNER(n, i, o)) + "?size=".concat((0, l.getBestMediaProxySize)(s * (0, l.getDevicePixelRatio)())) } function g(e) { let { avatarDecoration: t, size: n, canAnimate: i = !1 } = e; if (null == t) return; if (/^data:/.test(t.asset)) return t.asset; let { CDN_HOST: r, API_ENDPOINT: s } = window.GLOBAL_ENV, a = c.Endpoints.AVATAR_DECORATION_PRESETS(t.asset), u = new URL(null != r ? "".concat(location.protocol, "//").concat(r).concat(a) : "".concat(location.protocol).concat(s).concat(a)); return u.searchParams.set("size", "".concat((0, l.getBestMediaProxySize)(n * (0, l.getDevicePixelRatio)()))), u.searchParams.set("passthrough", "".concat(i && (0, o.isAnimatedAvatarDecoration)(t.asset))), u.toString() } function L(e) { let t, { id: n, guildId: i, banner: r, canAnimate: s, size: a } = e; if (null == r || null == i) return; let o = window.GLOBAL_ENV.CDN_HOST, u = s && B(r) ? "gif" : "png", d = c.Endpoints.GUILD_MEMBER_BANNER(i, n, r, u); return t = (null != o ? "".concat(location.protocol, "//").concat(o).concat(d) : location.protocol + window.GLOBAL_ENV.API_ENDPOINT + d) + "?size=".concat((0, l.getBestMediaProxySize)(a * (0, l.getDevicePixelRatio)())) } function v(e) { let t, { id: n, splash: i, size: r } = e; if (null == i) return null; null == r && (r = window.screen.width * (0, l.getDevicePixelRatio)()), r = (0, l.getBestMediaProxySize)(r); let s = window.GLOBAL_ENV.CDN_HOST; return t = (null != s ? "".concat(location.protocol, "//").concat(s, "/splashes/").concat(n, "/").concat(i, ".jpg") : location.protocol + window.GLOBAL_ENV.API_ENDPOINT + c.Endpoints.GUILD_SPLASH(n, i)) + "?size=".concat(r) } function D(e) { let t, { id: n, banner: i } = e, r = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (null == i) return null; let s = (0, l.getBestMediaProxySize)(240 * (0, l.getDevicePixelRatio)()), a = f ? "webp" : "jpg", o = r && B(i) ? "gif" : a, u = window.GLOBAL_ENV.CDN_HOST; return t = (null != u ? "".concat(location.protocol, "//").concat(u, "/banners/").concat(n, "/").concat(i, ".").concat(o) : location.protocol + window.GLOBAL_ENV.API_ENDPOINT + c.Endpoints.GUILD_BANNER(n, i, o)) + "?size=".concat(s), "jpg" === o && (t += "&quality=lossless"), t } function M(e) { let t, { id: n, homeHeader: i } = e; if (null == i) return null; let r = (0, l.getBestMediaProxySize)(1096 * (0, l.getDevicePixelRatio)()), s = window.GLOBAL_ENV.CDN_HOST; return t = (null != s ? "".concat(location.protocol, "//").concat(s, "/home-headers/").concat(n, "/").concat(i, ".png") : location.protocol + window.GLOBAL_ENV.API_ENDPOINT + c.Endpoints.GUILD_HOME_HEADER(n, i)) + "?size=".concat(r) } function y(e) { let t, { id: n, splash: i, size: r } = e; if (null == i) return null; null == r && (r = window.screen.width * (0, l.getDevicePixelRatio)()), r = (0, l.getBestMediaProxySize)(r); let s = window.GLOBAL_ENV.CDN_HOST; return t = (null != s ? "".concat(location.protocol, "//").concat(s, "/discovery-splashes/").concat(n, "/").concat(i, ".jpg") : location.protocol + window.GLOBAL_ENV.API_ENDPOINT + c.Endpoints.GUILD_DISCOVERY_SPLASH(n, i)) + "?size=".concat(r) } function P(e) { let { id: t, icon: n, size: i, canAnimate: r = !1 } = e; return h({ endpoint: c.Endpoints.GUILD_ICON, path: "icons", id: t, hash: n, size: i, canAnimate: r }) } function U(e) { let { id: t, icon: n, size: i = c.AVATAR_SIZE, canAnimate: r = !1 } = e; return h({ endpoint: c.Endpoints.GUILD_TEMPLATE_ICON, path: "guild-templates", id: t, hash: n, size: i, canAnimate: r }) } function b(e) { let { id: t, icon: n, size: i = c.AVATAR_SIZE, bot: r, botIconFirst: s, fallbackAvatar: a = !0 } = e; if (null != r && s) { let e = N(r, !1, i); if (null != e) return e } if (null != n) return h({ endpoint: c.Endpoints.APPLICATION_ICON, path: "app-icons", id: t, hash: n, size: i, canAnimate: !1 }); if (null != r) { let e = N(r, !1, i); if (null != e) return e } if (a) return I } function G(e) { let { id: t, hash: n, size: i = c.AVATAR_SIZE, keepAspectRatio: r = !1, format: s } = e; return h({ endpoint: c.Endpoints.APPLICATION_ICON, path: "app-icons", id: t, hash: n, size: i, canAnimate: !1, keepAspectRatio: r, format: s }) } function w(e) { let { userId: t, assetId: n, assetHash: i, size: r, canAnimate: s = !0 } = e; return h({ endpoint: (e, r, s) => c.Endpoints.VIDEO_FILTER_ASSET_STORAGE(t, n, i, s), path: "video-filter-assets/".concat(t), id: n, hash: i, size: r, canAnimate: s }) } function k(e) { var t, n, r; let { id: s, icon: a, applicationId: o, size: l } = e; if (null != o) return null !== (t = b({ id: o, icon: a, size: l })) && void 0 !== t ? t : i.DEFAULT_CHANNEL_ICON; return null !== (n = h({ endpoint: c.Endpoints.CHANNEL_ICON, path: "channel-icons", id: s, hash: a, canAnimate: !1, size: l })) && void 0 !== n ? n : (r = s, i.DEFAULT_GROUP_DM_AVATARS[_.default.extractTimestamp(r) % i.DEFAULT_GROUP_DM_AVATARS.length]) } function B(e) { return null != e && e.startsWith("a_") } function V(e) { return null != e && e.startsWith("v_") } function x(e) { return null != e && B(function(e) { let t; try { return (t = new URL(e).pathname).split("/").pop() } catch (e) { return null } }(e)) } function F(e) { return "number" == typeof e ? e : { uri: null != e ? e : void 0 } } t.default = { getUserAvatarURL: p, getDefaultAvatarURL: m, getGuildMemberAvatarURL: C, getGuildMemberAvatarURLSimple: O, getGuildMemberAvatarSource: function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = C(e, n); return null != i ? F(i) : t.getAvatarSource(e.guildId, n) }, getGuildMemberBannerURL: L, getUserBannerURL: R, getAvatarDecorationURL: g, hasAnimatedGuildIcon: function(e) { return B(null == e ? void 0 : e.icon) }, isAnimatedIconHash: B, getUserAvatarSource: (e, t, n) => F(p(e, t, n)), getGuildIconURL: P, getGuildSplashURL: v, getGuildSplashSource: function(e) { return F(v(e)) }, getGuildDiscoverySplashURL: y, getGuildDiscoverySplashSource: function(e) { return F(y(e)) }, getGuildBannerURL: D, getGuildHomeHeaderURL: M, getResourceChannelIconURL: function(e) { let { channelId: t, icon: n } = e; return null == n ? null : h({ endpoint: c.Endpoints.GUILD_RESOURCE_CHANNELS_ICON, path: "resource-channels", id: t, hash: n, size: c.AVATAR_SIZE, canAnimate: !0 }) }, getNewMemberActionIconURL: function(e) { let { channelId: t, icon: n } = e; return null == n ? null : h({ endpoint: c.Endpoints.GUILD_NEW_MEMBER_ACTIONS_ICON, path: "new-member-actions", id: t, hash: n, size: c.AVATAR_SIZE, canAnimate: !0 }) }, getGuildTemplateIconURL: U, getChannelIconURL: k, getEmojiURL: A, getApplicationIconURL: b, getGameAssetURL: G, getVideoFilterAssetURL: w, getGameAssetSource: e => F(G(e)), getGuildIconSource: e => F(P(e)), getGuildTemplateIconSource: e => F(U(e)), getGuildBannerSource(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return F(D(e, t)) }, getGuildHomeHeaderSource: e => F(M(e)), getChannelIconSource: e => F(k(e)), getApplicationIconSource: e => F(b(e)), makeSource: F, getAnimatableSourceWithFallback(e, t) { let n = t(e); if (!(0, d.isAndroid)() || !e || "number" == typeof n) return n; { let e = t(!1); return "number" != typeof e && e.uri === n.uri ? e : [n, { ...e, isForceCached: !0 }] } } } }, 386438: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("51350"); var i, r, s, a = n("149765"); class o { static has(e, t) { return (e & t) != 0 } static asBasicFlag(e) { return a.asUintN(20, e) } static asBigFlag(e) { return !Object.hasOwn(this.cache, e) && (this.cache[e] = a.deserialize(e)), this.cache[e] } } s = {}, (r = "cache") in(i = o) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s }, 122289: function(e, t, n) { "use strict"; n.r(t), n.d(t, { captureBillingException: function() { return l }, captureBillingMessage: function() { return u }, createGatewayCheckoutContext: function() { return o }, getLocalizedDisplayMonth: function() { return a } }); var i = n("751767"), r = n("960048"), s = n("231338"); function a(e, t) { let n = new Date; return n.setMonth(e - 1), n.toLocaleString(t, { month: "short" }) } async function o(e) { let t = null; if (null != e && e.paymentGateway === s.PaymentGateways.BRAINTREE) { let e = await (0, i.collectDeviceData)(); null != e && (t = { braintree_device_data: e }) } return t } function l(e, t) { r.default.captureException(e, { ...t, tags: { ...null == t ? void 0 : t.tags, app_context: "billing" } }) } function u(e, t) { r.default.captureMessage(e, { ...t, tags: { ...null == t ? void 0 : t.tags, app_context: "billing" } }) } }, 751767: function(e, t, n) { "use strict"; n.r(t), n.d(t, { collectDeviceData: function() { return o }, getBraintreeSDK: function() { return a } }); var i = n("663993"), r = n("618541"), s = n("981631"); function a() { return (0, i.importWithRetry)({ createPromise: () => n.e("661").then(n.t.bind(n, "491668", 23)), webpackId: "491668" }).then(e => { let { default: t } = e; return t }) } function o() { let e = r.default.getClient(); return null == e ? a().then(e => e.client.create({ authorization: s.PaymentSettings.BRAINTREE.KEY }).then(e => l(e)).catch(() => null)) : l(e) } function l(e) { return a().then(t => t.dataCollector.create({ client: e }).then(e => e.deviceData).catch(() => null)) } }, 526167: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canUseWebp: function() { return S }, getChromeVersion: function() { return c }, getFirefoxVersion: function() { return T }, supportsHEVCAlpha: function() { return h } }); var i, r, s, a, o, l = n("525654"), u = n.n(l); let d = (null !== (i = u().name) && void 0 !== i ? i : "unknown").toLowerCase(), _ = "chrome" === d.toLowerCase() ? parseInt(null !== (r = u().version) && void 0 !== r ? r : "", 10) : -1; function c() { return _ } let E = "electron" === d.toLowerCase() ? parseInt(null !== (s = u().version) && void 0 !== s ? s : "", 10) : -1, I = "firefox" === d.toLowerCase() ? parseInt(null !== (a = u().version) && void 0 !== a ? a : "", 10) : -1; function T() { return I } let f = "edge" === d.toLowerCase() ? parseInt(null !== (o = u().version) && void 0 !== o ? o : "", 10) : -1; function S() { return -1 !== _ || -1 !== E || -1 !== I || -1 !== f } function h() { var e; let t = window.navigator, n = t.userAgent.toLowerCase(), i = (null === (e = t.mediaCapabilities) || void 0 === e ? void 0 : e.decodingInfo) != null; return -1 !== n.indexOf("safari") && !(-1 !== n.indexOf("chrome")) && -1 !== n.indexOf("version/") && i } }, 55406: function(e, t, n) { "use strict"; let i; n.r(t), n("757143"); var r = n("302454"), s = n.n(r), a = n("800927"), o = n("945884"), l = n("594199"); let u = s().defaultRules.lheading, d = s().defaultRules.heading, _ = s().defaultRules.link, c = s().defaultRules.image, E = s().defaultRules.list, I = s().defaultRules.blockQuote, T = s().defaultRules.paragraph, f = /\{(.+?)}/, S = /^\$(\w+?)\$/; i = n("235375"); let h = e => { let { transformUpperCase: t = !1 } = e; return (e, n, i) => { let r = f.exec(e[1]), a = e[1].replace(f, ""); return t && (a = a.toUpperCase()), { className: null != r ? r[1] : null, level: "=" === e[2] ? 1 : 2, content: s().parseInline(n, a, i) } } }, A = e => ({ ...i.baseRules, image: { ...c, ..."function" == typeof i.customRules.image ? i.customRules.image(e) : i.customRules.image }, link: { ..._, ..."function" == typeof i.customRules.link ? i.customRules.link(e) : i.customRules.link }, list: { ...E, ..."function" == typeof i.customRules.list ? i.customRules.list(e) : i.customRules.list }, interpolation: { order: l.default.order, match: e => S.exec(e), parse(e, t, n) { let i = n.interpolations[e[1]]; return null == i ? { type: "text", content: e[0] } : { type: "interpolation", renderer: i } }, react: e => e.renderer() }, lheading: { ...u, parse: h({ transformUpperCase: !0 }), ..."function" == typeof i.customRules.lheading ? i.customRules.lheading(e) : i.customRules.lheading }, heading: { ...d, ..."function" == typeof i.customRules.heading ? i.customRules.heading(e) : i.customRules.heading }, blockQuote: { ...I, ..."function" == typeof i.customRules.blockQuote ? i.customRules.blockQuote(e) : i.customRules.blockQuote }, paragraph: { ...T, ..."function" == typeof i.customRules.paragraph ? i.customRules.paragraph(e) : i.customRules.paragraph } }), m = e => ({ lheading: { ...u, parse: h({ transformUpperCase: !1 }), ..."function" == typeof i.customRules.lheading ? i.customRules.lheading(e) : i.customRules.lheading } }), N = e => ({ ...A(e), newline: { ...s().defaultRules.newline }, text: l.default, list: a.default, subtext: o.default }); t.default = { getDefaultRules: e => ({ ...A(e) }), getSpecialRules: e => ({ ...A(e), ...m(e) }), getMessageRules: e => ({ ...N(e) }) } }, 934415: function(e, t, n) { "use strict"; n.r(t), n.d(t, { channelTypeString: function() { return P }, computeSummarizedVoiceUsers: function() { return y }, getBitrateLimit: function() { return M }, getChannelLinkToCopy: function() { return w }, getChannelPermalink: function() { return G }, getMentionIconType: function() { return U }, isChannelFull: function() { return D }, permissionOverwriteForRole: function() { return L }, permissionOverwriteForUser: function() { return g }, permissionOverwritesForAnnouncement: function() { return v }, permissionOverwritesForRoles: function() { return R }, previousTextChannelRouteForGuild: function() { return b }, sanitizeGuildTextChannelName: function() { return s.default } }), n("411104"), n("653041"), n("47120"); var i = n("149765"), r = n("911969"), s = n("90463"), a = n("968358"), o = n("874748"), l = n("590415"), u = n("131704"), d = n("592125"), _ = n("984933"), c = n("496675"), E = n("944486"), I = n("938475"), T = n("700785"), f = n("709054"), S = n("981631"), h = n("474936"), A = n("689938"); let { GUILD_VOICE: m, GUILD_CATEGORY: N, GUILD_STAGE_VOICE: p } = S.ChannelTypes; function O(e, t) { return e === t || e === N } function C(e, t, n) { let r = T.NONE; return ((0, u.isGuildSelectableChannelType)(t) || t === N) && (r = i.add(r, S.Permissions.VIEW_CHANNEL)), (O(t, m) || O(t, p)) && (r = i.add(r, S.Permissions.VIEW_CHANNEL), r = i.add(r, S.Permissions.CONNECT)), { id: e, type: n, deny: T.NONE, allow: r } } function R(e, t, n) { let s = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], a = []; if (n.length > 0 || s) { var o, l, d; let n; a.push((o = e, l = t, d = r.PermissionOverwriteType.ROLE, n = T.NONE, ((0, u.isGuildSelectableChannelType)(l) || l === N) && (n = i.add(n, S.Permissions.VIEW_CHANNEL)), O(l, m) && (n = i.add(n, S.Permissions.VIEW_CHANNEL), n = i.add(n, S.Permissions.CONNECT)), { id: o, type: d, allow: T.NONE, deny: n })) } return n.forEach(e => { a.push(C(e, t, r.PermissionOverwriteType.ROLE)) }), a } function g(e, t) { return C(e, t, r.PermissionOverwriteType.MEMBER) } function L(e, t) { return C(e, t, r.PermissionOverwriteType.ROLE) } function v(e) { return [{ id: e, type: r.PermissionOverwriteType.ROLE, deny: S.Permissions.SEND_MESSAGES, allow: T.NONE }] } function D(e, t, n) { var i, r; let s = e.getGuildId(), o = n.getGuild(s), l = null !== (i = null == o ? void 0 : o.maxVideoChannelUsers) && void 0 !== i ? i : -1, u = null !== (r = null == o ? void 0 : o.maxStageVideoChannelUsers) && void 0 !== r ? r : -1, d = I.default.countVoiceStatesForChannel(e.id), _ = I.default.getVoiceStatesForChannel(e), E = c.default.can(S.Permissions.MOVE_MEMBERS, e) && c.default.can(S.Permissions.CONNECT, e), T = !1; T = e.type === p ? null != s && (t.hasVideo(e.id) || (0, a.hasStream)(_)) && u > 0 && d >= u : null != s && t.hasVideo(e.id) && l > 0 && d >= l + (E ? 1 : 0); let f = e.userLimit > 0 && d >= e.userLimit; return T || f && !E } function M(e, t) { return t.isGuildStageVoice() ? S.BITRATE_DEFAULT : null == e ? S.BITRATE_MAX : Math.max(e.hasFeature(S.GuildFeatures.VIP_REGIONS) ? h.BoostedGuildFeatures[S.BoostedGuildTiers.TIER_3].limits.bitrate : S.BITRATE_MAX, h.BoostedGuildFeatures[e.premiumTier].limits.bitrate) } function y(e) { let { channels: t, selectedChannelId: n, selectedVoiceChannelId: i, voiceStates: r } = e; return (function(e) { let { channels: t, selectedChannelId: n, selectedVoiceChannelId: i, voiceStates: r } = e, s = []; return t.forEach(e => { if (e.id === i || e.id === n) return; let t = r[e.id]; null != t && (e.isGuildStageVoice() ? t.forEach(e => { (0, l.getAudienceRequestToSpeakState)(e.voiceState) === l.RequestToSpeakStates.ON_STAGE && s.push(e) }) : t.forEach(e => s.push(e))) }), s })({ channels: t, selectedChannelId: n, selectedVoiceChannelId: i, voiceStates: r }).map(e => e.user) } function P(e) { let { type: t } = e; switch (t) { case S.ChannelTypes.DM: return A.default.Messages.DM; case S.ChannelTypes.GROUP_DM: return A.default.Messages.GROUP_DM; case S.ChannelTypes.GUILD_TEXT: return A.default.Messages.TEXT_CHANNEL; case S.ChannelTypes.GUILD_FORUM: return A.default.Messages.FORUM_CHANNEL; case S.ChannelTypes.GUILD_MEDIA: return A.default.Messages.MEDIA_CHANNEL; case S.ChannelTypes.GUILD_VOICE: return A.default.Messages.VOICE_CHANNEL; case S.ChannelTypes.GUILD_STAGE_VOICE: return A.default.Messages.STAGE_CHANNEL; case S.ChannelTypes.GUILD_ANNOUNCEMENT: return A.default.Messages.NEWS_CHANNEL; case S.ChannelTypes.GUILD_STORE: return A.default.Messages.STORE_CHANNEL; case S.ChannelTypes.GUILD_CATEGORY: return A.default.Messages.CATEGORY; default: return null } } function U(e) { if (null == e) return "text"; let t = e.isMediaChannel(); if (e.type === S.ChannelTypes.GUILD_VOICE) return c.default.can(S.Permissions.CONNECT, e) ? "voice" : "voice-locked"; if (e.type === S.ChannelTypes.GUILD_STAGE_VOICE) return c.default.can(S.Permissions.CONNECT, e) ? "stage" : "stage-locked"; if (u.THREAD_CHANNEL_TYPES.has(e.type)) return e.isForumPost() ? "post" : "thread"; else if (e.type === S.ChannelTypes.GUILD_FORUM) return t ? "media" : "forum"; else if (e.type === S.ChannelTypes.GUILD_MEDIA) return "media"; else if (u.TEXT_CHANNEL_TYPES.has(e.type)) return "text" } function b(e) { let t; let n = d.default.getChannel(E.default.getLastSelectedChannelId()); if (null != n && n.getGuildId() === e && n.type === S.ChannelTypes.GUILD_TEXT) t = n.id; else { let n = _.default.getDefaultChannel(e); t = null != n ? n.id : null } return S.Routes.CHANNEL(e, t) } function G(e, t, n, i) { return "".concat(location.protocol, "//").concat(location.host).concat(S.Routes.CHANNEL(e, t, n)).concat(null == i ? "" : "?summaryId=".concat(i)) } function w(e, t, n, i) { let r; let s = e.getGuildId(), a = (0, o.canUseMediaPostEmbed)(s, t); if (null != t && a) { var l, u, d, _; l = s, u = t.id, d = e.id, _ = f.default.castChannelIdAsMessageId(e.id), r = null == l || null == u || null == d ? G(l, u, _) : "".concat(location.protocol, "//").concat(location.host).concat(S.Routes.CHANNEL_THREAD_VIEW(l, u, d, _)) } else r = null != i ? i : G(s, e.id, n); return r } }, 760729: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RESTRICTIONS: function() { return a } }); var i = n("381129"), r = n("981631"), s = n("689938"); let a = [{ check(e, t, n) { if (!n || null == t.getGuildId()) return !1; let r = i.default.extractEveryoneRole(e, t); if (null == r || !i.default.shouldShowEveryoneGuard(r, t)) return !1; let a = i.default.everyoneMemberCount(r, t), o = Math.pow(10, Math.floor(Math.log10(a))), l = s.default.Messages.EVERYONE_POPOUT_BODY; return t.isForumPost() ? l = s.default.Messages.EVERYONE_POPOUT_BODY_FORUM_POST : t.isThread() && (l = s.default.Messages.EVERYONE_POPOUT_BODY_THREAD), { body: l.format({ role: r, count: (Math.trunc(a / o) * o).toLocaleString() }), footer: s.default.Messages.EVERYONE_POPOUT_FOOTER } }, analyticsType: "@Everyone Warning", animation: { dark: () => n.e("83323").then(n.t.bind(n, "510465", 19)), light: () => n.e("36052").then(n.t.bind(n, "570227", 19)) } }, { check: e => !!r.TOKEN_REGEX.test(e) && { body: s.default.Messages.TOKEN_POPOUT_BODY }, analyticsType: "API Token Warning" }] }, 572004: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SUPPORTS_COPY: function() { return a }, copy: function() { return o } }), n("411104"); var i = n("852229"), r = n("358085"), s = n("998502"); let a = (() => { if (r.isPlatformEmbedded) return null != s.default.copy; try { return document.queryCommandEnabled("copy") || document.queryCommandSupported("copy") } catch (e) { return !1 } })(); function o(e) { return !!a && (r.isPlatformEmbedded ? (s.default.copy(e), !0) : i.copy(e)) } }, 564334: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return a } }), n("757143"), n("47120"); let r = /^#[0-9a-f]{3,8}$/i, s = /^((?:rgb|hsl)a?)\s*\(([^)]*)\)/i; class a { toHexString() { var e = Math.round(this.red).toString(16), t = Math.round(this.green).toString(16), n = Math.round(this.blue).toString(16); return "#" + (this.red > 15.5 ? e : "0" + e) + (this.green > 15.5 ? t : "0" + t) + (this.blue > 15.5 ? n : "0" + n) } static parseString(e) { return null != e.match(s) ? this.parseColorFnString(e) : null != e.match(r) ? this.parseHexString(e) : void 0 } static parseRgbString(e) { return "transparent" === e ? new a(0, 0, 0, 0) : this.parseColorFnString(e) } static parseHexString(e) { if (!(null == e.match(r) || [6, 8].includes(e.length))) { if ((e = e.replace("#", "")).length < 6) { let [t, n, i, r] = e; e = t + t + n + n + i + i, null != r && (e += r + r) } var t = e.match(/.{1,2}/g); if (null != t) return new a(parseInt(t[0], 16), parseInt(t[1], 16), parseInt(t[2], 16), null != t[3] ? parseInt(t[3], 16) / 255 : 1) } } static parseColorFnString(e) { var t; let [, n, i] = null !== (t = e.match(s)) && void 0 !== t ? t : []; if (null == n || null == i) return; let r = i.split(/\s*[,/\s]\s*/).map(e => e.replace(",", "").trim()).filter(e => "" !== e).map((e, t) => (function(e, t, n) { if (/%$/.test(t)) return 3 === n ? parseFloat(t) / 100 : 255 * parseFloat(t) / 100; if ("h" === e[n]) { if (/turn$/.test(t)) return 360 * parseFloat(t); if (/rad$/.test(t)) return 57.3 * parseFloat(t) } return parseFloat(t) })(n, e, t)); if ("hsl" === n.substr(0, 3)) { let e = function(e) { let t, { hue: n, saturation: i, lightness: r, alpha: s } = e, a = (1 - Math.abs(2 * (r /= 255) - 1)) * (i /= 255), o = a * (1 - Math.abs(n / 60 % 2 - 1)), l = r - a / 2, u = (t = n < 60 ? [a, o, 0] : n < 120 ? [o, a, 0] : n < 180 ? [0, a, o] : n < 240 ? [0, o, a] : n < 300 ? [o, 0, a] : [a, 0, o]).map(e => Math.round((e + l) * 255)); return { red: u[0], green: u[1], blue: u[2], alpha: s } }({ hue: r[0], saturation: r[1], lightness: r[2], alpha: r[3] }); return new a(e.red, e.green, e.blue, e.alpha) } return new a(r[0], r[1], r[2], "number" == typeof r[3] ? r[3] : 1) } toHSL() { return function(e) { let { red: t, green: n, blue: i, alpha: r } = e, s = t / 255, a = n / 255, o = i / 255, l = Math.max(s, a, o), u = Math.min(s, a, o), d = l - u, _ = (l + u) / 2, c = d > 0 ? d / (1 - Math.abs(2 * _ - 1)) : 0; if (0 === d) return { hue: 0, saturation: c, lightness: _, alpha: r }; let E = 0; switch (l) { case s: E = (a - o) / d % 6; break; case a: E = (o - s) / d + 2; break; case o: E = (a - o) / d + 4 } return { hue: 60 * E, saturation: c, lightness: _, alpha: r } }({ red: this.red, green: this.green, blue: this.blue, alpha: this.alpha }) } getRelativeLuminance() { var e = this.red / 255, t = this.green / 255, n = this.blue / 255; return .2126 * (e <= .03928 ? e / 12.92 : Math.pow((e + .055) / 1.055, 2.4)) + .7152 * (t <= .03928 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4)) + .0722 * (n <= .03928 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)) } constructor(e, t, n, r) { i(this, "red", void 0), i(this, "green", void 0), i(this, "blue", void 0), i(this, "alpha", void 0), this.red = e, this.green = t, this.blue = n, this.alpha = r } } }, 302221: function(e, t, n) { "use strict"; n.r(t), n.d(t, { findColorByHsv: function() { return S }, getAccessibleColor: function() { return f }, getColorLightnessAdjusted: function() { return T }, getComplimentaryPaletteForColor: function() { return d }, getSaturatedColorHex: function() { return A }, hexOpacityToRgba: function() { return l }, hexToRgb: function() { return o }, hexWithOpacity: function() { return a }, interpolateColor: function() { return m }, rawRgbToHsl: function() { return E }, rgbToHex: function() { return u } }), n("653041"); var i = n("866442"); n("710845"); var r = n("564334"), s = n("689938"); function a(e, t) { let n; let i = e; 9 === e.length ? (i = e.slice(0, 7), n = Math.round(parseInt(e.slice(7, 9), 16) / 255 * t * 255)) : n = Math.round(255 * t); let r = n.toString(16).toUpperCase().padStart(2, "0"); return "".concat(i).concat(r).padEnd(9, "0") } function o(e) { "#" === e[0] && (e = e.slice(1)); let t = parseInt(e, 16); return { r: t >> 16 & 255, g: t >> 8 & 255, b: 255 & t } } function l(e, t) { let { r: n, g: i, b: r } = o(e); return "rgba(".concat(n, ", ").concat(i, ", ").concat(r, ", ").concat(t, ")") } function u(e, t, n) { return "#" + (16777216 + (e << 16) + (t << 8) + n).toString(16).slice(1) } function d(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 3, n = [], { h: i, s: r, l: s } = function(e, t, n) { let i = Math.min(e /= 255, t /= 255, n /= 255), r = Math.max(e, t, n), s = r - i, a = 0, o = 0, l = 0; return (a = Math.round(60 * (a = 0 === s ? 0 : r === e ? (t - n) / s % 6 : r === t ? (n - e) / s + 2 : (e - t) / s + 4))) < 0 && (a += 360), l = (r + i) / 2, o = +(100 * (o = 0 === s ? 0 : s / (1 - Math.abs(2 * l - 1)))).toFixed(1), { h: a, s: o, l: l = +(100 * l).toFixed(1) } }(e[0], e[1], e[2]), a = i, l = r, u = s; l < 30 && (l += 30), u > 80 && (u -= 40), u < 20 && (u += 15); let d = 360 / (t + 1); for (; n.length < t;) { (a -= d) < 0 && (a += 360); let { r: e, g: t, b: i } = o(function(e, t, n) { let i = t * Math.min(n /= 100, 1 - n) / 100, r = t => { let r = (t + e / 30) % 12; return Math.round(255 * (n - i * Math.max(Math.min(r - 3, 9 - r, 1), -1))).toString(16).padStart(2, "0") }; return "#".concat(r(0)).concat(r(8)).concat(r(4)) }(a, l, u)); n.push([e, t, i]) } return n } function _(e) { let { red: t, green: n, blue: i } = e, r = [t, n, i].map(e => (e /= 255) <= .03928 ? e / 12.92 : Math.pow((e + .055) / 1.055, 2.4)); return .2126 * r[0] + .7152 * r[1] + .0722 * r[2] } function c(e) { let t = e[0], n = e[1], i = _(t), r = _(n); return (Math.max(i, r) + .05) / (Math.min(i, r) + .05) } function E(e, t, n) { let i, r; let s = Math.max(e /= 255, t /= 255, n /= 255), a = Math.min(e, t, n), o = (s + a) / 2; if (s === a) i = r = 0; else { let l = s - a; switch (r = o > .5 ? l / (2 - s - a) : l / (s + a), s) { case e: i = (t - n) / l + (t < n ? 6 : 0); break; case t: i = (n - e) / l + 2; break; case n: i = (e - t) / l + 4 } null == i ? i = 0 : i /= 6 } return { hue: 360 * i, saturation: r, lightness: o, alpha: 1 } } function I(e, t, n) { let i, s, a; if (e /= 360, 0 === t) i = s = a = n; else { let r = function(e, t, n) { return (n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6) ? e + (t - e) * 6 * n : n < .5 ? t : n < 2 / 3 ? e + (t - e) * (2 / 3 - n) * 6 : e }, o = n < .5 ? n * (1 + t) : n + t - n * t, l = 2 * n - o; i = r(l, o, e + 1 / 3), s = r(l, o, e), a = r(l, o, e - 1 / 3) } return new r.default(Math.round(255 * i), Math.round(255 * s), Math.round(255 * a), 1) } function T(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = E(e.red, e.green, e.blue); return n ? i.lightness = i.lightness + t > 1 ? .9 : i.lightness + t : i.lightness = i.lightness - t < 0 ? .1 : i.lightness - t, I(i.hue, i.saturation, i.lightness) } function f(e) { let { colors: t, ratio: n = 5, saturationFactor: r = 1 } = e; if (t.length < 2) return; let s = t[0], a = t[1]; if (null == a || null == s) return; let o = (0, i.hex2int)(a.toHexString()), l = (0, i.getDarkness)(o) > .5, u = c([s, a]), d = E(s.red, s.green, s.blue); for (d.saturation *= r; u < n && null != d;) { ; if (l) { if (d.lightness < .95) d.lightness += .05; else break } else if (d.lightness > .05) d.lightness -= .05; else break; u = c([I(d.hue, d.saturation, d.lightness), t[1]]) } return I(d.hue, d.saturation, d.lightness) } function S(e) { return e.slice(0, 3).map(e => { var t; return { hex: e, hsv: null !== (t = function(e) { let t, n, i, r, s; var a = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e); if (null == a) return null; var o = parseInt(a[1], 16), l = parseInt(a[2], 16), u = parseInt(a[3], 16); let d = o / 255, _ = l / 255, c = u / 255, E = Math.max(d, _, c), I = E - Math.min(d, _, c), T = e => Math.round(100 * e) / 100; if (0 === I) r = s = 0; else { s = I / E; t = (E - d) / 6 / I + .5; n = (E - _) / 6 / I + .5; i = (E - c) / 6 / I + .5, (r = d === E ? i - n : _ === E ? 1 / 3 + t - i : c === E ? 2 / 3 + n - t : 0) < 0 ? r += 1 : r > 1 && (r -= 1) } return { h: Math.round(360 * r), s: T(100 * s), v: T(100 * E) } }(e)) && void 0 !== t ? t : { h: 0, s: 0, v: 0 } } }).sort(h)[0].hex } function h(e, t) { let n = e.hsv, i = t.hsv; return i.s + i.v - (n.s + n.v) } function A(e) { var t; let { colorRGB: n, saturationFactor: i = 1 } = e; if (null == n) return n; let r = E(n.red, n.green, n.blue); if (null == r) return null == n ? void 0 : n.toHexString(); return null === (t = I(r.hue, r.saturation * i, r.lightness)) || void 0 === t ? void 0 : t.toHexString() } function m(e, t, n) { let i = parseInt(e.substring(1, 3), 16), r = parseInt(e.substring(3, 5), 16), s = parseInt(e.substring(5, 7), 16), a = parseInt(t.substring(1, 3), 16), o = parseInt(t.substring(3, 5), 16), l = parseInt(t.substring(5, 7), 16), u = Math.round(i + (a - i) * n).toString(16).padStart(2, "0"), d = Math.round(r + (o - r) * n).toString(16).padStart(2, "0"), _ = Math.round(s + (l - s) * n).toString(16).padStart(2, "0"); return "#".concat(u).concat(d).concat(_) } }, 459273: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ComponentAction: function() { return _ }, ComponentDispatchGroupContext: function() { return l }, ComponentDispatchGroupProvider: function() { return u }, useComponentAction: function() { return d } }), n("47120"), n("411104"); var i = n("735250"), r = n("470079"), s = n("836560"), a = n("585483"); class o { subscribe(e, t) { a.ComponentDispatch.subscribe(e, t), this.emitter.on(e, t) } unsubscribe(e, t) { a.ComponentDispatch.unsubscribe(e, t), this.emitter.off(e, t) } bumpDispatchPriority() { for (let e of this.emitter.eventNames()) for (let t of this.emitter.listeners(e)) a.ComponentDispatch.resubscribe(e, t) } constructor() { var e, t, n; e = this, t = "emitter", n = new s.EventEmitter, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } let l = r.createContext(new class e { subscribe(e, t) { a.ComponentDispatch.subscribe(e, t) } unsubscribe(e, t) { a.ComponentDispatch.unsubscribe(e, t) } bumpDispatchPriority() {} }), u = r.forwardRef(function(e, t) { let { children: n } = e, s = r.useRef(null); function a() { return null === s.current && (s.current = new o), s.current } return r.useImperativeHandle(t, a), (0, i.jsx)(l.Provider, { value: a(), children: n }) }); function d(e) { let { event: t, handler: n } = e, i = r.useContext(l), s = r.useRef(n); r.useEffect(() => { s.current = n }, [n]); let a = null == n; return r.useEffect(() => { if (a) return; let e = function() { for (var e, t = arguments.length, n = Array(t), i = 0; i < t; i++) n[i] = arguments[i]; null === (e = s.current) || void 0 === e || e.call(s, ...n) }; return i.subscribe(t, e), () => { i.unsubscribe(t, e) } }, [i, t, a]), null } function _(e) { return d(e), null } }, 585483: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ComponentDispatch: function() { return o }, ComponentDispatcher: function() { return a } }), n("47120"), n("653041"); var i = n("836560"); n("17089"); var r = n("710845"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n("981631"); class a { safeDispatch(e) { for (var t, n = arguments.length, i = Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) i[r - 1] = arguments[r]; if (!this.hasSubscribers(e)) { let [n] = i; return (this._savedDispatches[e] = null !== (t = this._savedDispatches[e]) && void 0 !== t ? t : []).push(n), this } return this.dispatch(e, ...i) } dispatch(e, t) { return Date.now(), this.emitter.emit(e, t), this } dispatchToLastSubscribed(e, t) { Date.now(); { let n = this.emitter.listeners(e); return n.length > 0 && n[n.length - 1](t), this } } hasSubscribers(e) { return this.emitter.listenerCount(e) > 0 } _checkSavedDispatches(e) { let t = this._savedDispatches[e]; null != t && (t.forEach(t => { this.dispatch(e, t) }), this._savedDispatches[e] = void 0) } subscribe(e, t) { return this.emitter.listeners(e).indexOf(t) >= 0 ? (new r.default("ComponentDispatchUtils").warn("ComponentDispatch.subscribe: Attempting to add a duplicate listener", e), this) : (this.emitter.on(e, t), this._checkSavedDispatches(e), this) } subscribeOnce(e, t) { return this.emitter.once(e, t), this._checkSavedDispatches(e), this } resubscribe(e, t) { if (!this.emitter.listeners(e).includes(t)) return new r.default("ComponentDispatchUtils").warn("ComponentDispatch.resubscribe: Resubscribe without existing subscription", e), this; this.emitter.off(e, t), this.emitter.on(e, t) } unsubscribe(e, t) { return this.emitter.removeListener(e, t), this } reset() { return this.emitter.removeAllListeners(), this } dispatchKeyed(e, t) { for (var n = arguments.length, i = Array(n > 2 ? n - 2 : 0), r = 2; r < n; r++) i[r - 2] = arguments[r]; return this.dispatch("".concat(e, "_").concat(t), ...i) } subscribeKeyed(e, t, n) { return this.subscribe("".concat(e, "_").concat(t), n) } unsubscribeKeyed(e, t, n) { return this.unsubscribe("".concat(e, "_").concat(t), n) } constructor() { s(this, "emitter", new i.EventEmitter), s(this, "_savedDispatches", {}), this.emitter.setMaxListeners(100) } } let o = new a }, 12647: function(e, t, n) { "use strict"; n.r(t); var i = n("998502"); t.default = { flushDNSCache() { i.default.flushDNSCache() }, flushCookies: () => i.default.flushCookies(), setApplicationBackgroundColor(e) { i.default.setApplicationBackgroundColor(e) }, setZoomFactor: e => i.default.setZoomFactor(e), focus(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; i.default.focus(e, t) }, submitLiveCrashReport: e => i.default.submitLiveCrashReport(e), getPidFromDesktopSource: e => i.default.getPidFromDesktopSource(e), getAudioPid: e => i.default.getAudioPid(e), generateSessionFromPid: e => i.default.generateSessionFromPid(e) } }, 866119: function(e, t, n) { "use strict"; function i(e, t) { let n = 0, i = Math.min(e.length, t.length); for (let r = 0; r < i; r++) n |= e.charCodeAt(r) ^ t.charCodeAt(r); return 0 === n && e.length === t.length } n.r(t), n.d(t, { constantTimeCompare: function() { return i } }) }, 671999: function(e, t, n) { "use strict"; function i(e, t, n) { return new MouseEvent(e, { screenX: t, screenY: n, clientX: t, clientY: n, bubbles: !0, view: window }) } function r(e, t, n) { let i = document.elementFromPoint(t, n); if (null == i) throw Error(); i.dispatchEvent(e) } n.r(t), n.d(t, { createMouseEvent: function() { return i }, dispatchEventToPoint: function() { return r } }), n("411104") }, 5967: function(e, t, n) { "use strict"; n.r(t), n.d(t, { eventOwnerDocument: function() { return a }, isInputLikeElement: function() { return s } }); let i = /input/i, r = /textarea/i; function s(e) { if (null == e) return !1; if ("true" === e.getAttribute("contenteditable") || r.test(e.tagName)) return !0; if (i.test(e.tagName)) { var t; let n = null !== (t = e.getAttribute("type")) && void 0 !== t ? t : "text"; if ("text" === n || "password" === n) return !0 } return !1 } function a(e) { let { target: t } = e; return null == t ? null : "ownerDocument" in t ? t.ownerDocument : "document" in t ? t.document : (console.warn("Unable to get owner document from event", e.type), null) } }, 55935: function(e, t, n) { "use strict"; n.r(t), n.d(t, { accessibilityLabelCalendarFormat: function() { return h }, calendarFormat: function() { return I }, calendarFormatCompact: function() { return T }, dateFormat: function() { return E }, diffAsUnits: function() { return m }, isSameDay: function() { return _ }, isWithinInterval: function() { return c }, unitsAsStrings: function() { return N } }); var i = n("913527"), r = n.n(i), s = n("232551"), a = n("706454"); let o = 864e5, l = Object.create(null); function u(e) { let t = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], n = e.getTime(); return !t && (n -= 6e4 * e.getTimezoneOffset()), Math.floor(n / o) * o } function d(e, t) { return Math.floor((u(e, !1) - u(t, !1)) / o) } function _(e, t) { return Math.abs(+e - +t) <= o && e.getDate() === t.getDate() } function c(e, t, n) { return Math.abs(e.valueOf() - t.valueOf()) < n } function E(e, t) { let n = f(e).locale(), i = "".concat(n, ":").concat(t), r = l[i]; return null == r && (r = l[i] = (0, s.default)(t)), r(S(e)) } function I(e) { let t; let n = r().localeData(), i = r()(), s = d(S(e), i.toDate()); return s < -1 ? E(e, "L LT") : (t = s < 0 ? "lastDay" : s < 1 ? "sameDay" : s < 2 ? "nextDay" : "sameElse", E(e, n.calendar(t, f(e), i))) } function T(e) { let t = r().localeData(), n = r()(), i = d(S(e), n.toDate()); if (0 === i) return E(e, t.longDateFormat("LT")); if (-1 === i) return E(e, t.calendar("lastDay", f(e), n)); if (i > -7) return E(e, "dddd"); return E(e, t.longDateFormat("l")) } function f(e) { return r().isMoment(e) ? e : r()(e) } function S(e) { return r().isMoment(e) ? e.toDate() : e } function h(e) { let t; let n = r().localeData(), i = new Date, s = d(e, i); return "sameElse" == (t = s < -1 ? "sameElse" : s < 0 ? "lastDay" : s < 1 ? "sameDay" : s < 2 ? "nextDay" : "sameElse") ? E(e, "LLL") : E(e, n.calendar(t, r()(e), r()(i))) } a.default.addChangeListener(() => { l = Object.create(null) }); let A = [{ key: "days", millisecondsInUnit: 864e5 }, { key: "hours", millisecondsInUnit: 36e5 }, { key: "minutes", millisecondsInUnit: 6e4 }, { key: "seconds", millisecondsInUnit: 1e3 }]; function m(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = { days: 0, hours: 0, minutes: 0, seconds: n ? 1 : 0 }; if (e > t || n && Number(e) + 1200 > Number(t)) return i; let r = Number(t) - Number(e); return A.forEach(e => { let { key: t, millisecondsInUnit: n } = e; i[t] = Math.floor(r / n), r -= i[t] * n }), i } function N(e, t) { return e.days > 0 ? t.days.format({ days: e.days, hours: e.hours }) : e.hours > 0 ? t.hours.format({ hours: e.hours, minutes: e.minutes }) : t.minutes.format({ minutes: Math.max(1, e.minutes) }) } }, 990492: function(e, t, n) { "use strict"; n.r(t), n.d(t, { moveItemFromTo: function() { return o } }), n("653041"), n("47120"); var i = n("392711"), r = n.n(i); let s = new(n("710845")).default("DragAndDropUtils"); function a(e) { let { oldOrdering: t, newOrdering: n, idGetter: i, existingPositionGetter: r, ascending: a = !0 } = e, o = n.length; if (t.length !== o) return s.warn("Arrays are not of the same length!", t, n), []; let l = t.map(i).sort().join(":"), u = n.map(i).sort().join(":"); if (l !== u) return s.warn("Object IDs in the old ordering and the new ordering are not the same.", l, u), []; let d = {}; for (let e = 0; e < o; e++) d[i(t[e])] = r(t[e]); let _ = []; for (let e = 0; e < o; e++) { let t = i(n[e]), s = d[t], l = a ? e : o - 1 - e; (s !== l || r(n[e]) !== l) && _.push({ id: t, position: l }) } return !a && _.reverse(), _ } function o(e, t, n) { let i = e[t], r = [...e]; return r.splice(t, 1), r.splice(n, 0, i), r } t.default = { moveItemFromTo: o, calculatePositionDeltas: a, getPositionUpdates: function(e) { let { objectArray: t, fromPosition: n, toPosition: i, idGetter: s, existingPositionGetter: l, ascending: u = !0 } = e; !Array.isArray(t) && (t = r().values(t)); let d = o(t, n, i); return a({ oldOrdering: t, newOrdering: d, idGetter: s, existingPositionGetter: l, ascending: u }) } } }, 408433: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMaxEmbedMediaSize: function() { return p }, isEmbedInline: function() { return m }, isServerShopArticleEmbed: function() { return N }, mergeEmbedsOnURL: function() { return A }, sanitizeEmbed: function() { return h } }), n("789020"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"), n("653041"); var i = n("392711"), r = n.n(i), s = n("913527"), a = n.n(s), o = n("866442"), l = n("709054"), u = n("981631"), d = n("817384"); let _ = /sketchfab/i, c = /^https:\/\/sketchfab\.com/i, E = /youtube|steam|imgur|vimeo|sketchfab|soundcloud|streamable|twitch|vid\.me|twitter/i, I = /^https?:\/\/(?:canary\.|ptb\.|www\.)?discord(?:app)?\.com\/channels\/([0-9]+)\/shop$/, T = /^https?:\/\/(?:canary\.|ptb\.|www\.)?discord(?:app)?\.com\/channels\/([0-9]+)\/shop\/([0-9]+)$/; function f(e) { let { width: t, height: n } = e; return t > 0 && n > 0 } function S(e) { let { url: t, proxy_url: n, width: i, height: r, placeholder: s, placeholder_version: a } = e; return { url: t, proxyURL: n, width: i, height: r, placeholder: s, placeholderVersion: a } } function h(e, t, n) { let i = { id: r().uniqueId("embed_"), url: n.url, type: n.type, rawTitle: n.title, rawDescription: n.description, referenceId: n.reference_id, flags: n.flags, contentScanVersion: n.content_scan_version }; if (null != n.footer && (i.footer = { text: n.footer.text, iconURL: n.footer.icon_url, iconProxyURL: n.footer.proxy_icon_url }), null != n.author && null != n.author.name && (i.author = { name: n.author.name, url: n.author.url, iconURL: n.author.icon_url, iconProxyURL: n.author.proxy_icon_url }), null != n.provider && null != n.provider.name && (i.provider = { name: n.provider.name, url: n.provider.url }), null != n.timestamp && (i.timestamp = a()(new Date(n.timestamp))), null != n.color && (i.color = (0, o.int2hsl)(n.color, !0)), null != n.thumbnail && f(n.thumbnail)) switch (i.type) { case u.MessageEmbedTypes.ARTICLE: case u.MessageEmbedTypes.IMAGE: i.image = S(n.thumbnail); break; default: i.thumbnail = S(n.thumbnail) } if (null != n.image && f(n.image) && (i.image = S(n.image)), null != n.video && (null == i.thumbnail && null != n.video.proxy_url && f(n.video) && (i.thumbnail = { width: n.video.width, height: n.video.height, url: function(e, t) { let n = new URL(e); return Object.keys(t).forEach(e => { n.searchParams.set(e, t[e]) }), n.toString() }(n.video.proxy_url, { format: "jpeg" }) }), null != i.thumbnail && f(n.video) && function(e, t, n) { if (null != t && _.test(t.name) || c.test(n.url)) return !1; let i = null != n.proxy_url || /^https:/i.test(n.url); return null != e && 1492472454139 > l.default.extractTimestamp(e) && (i = i && null != t && E.test(t.name)), i }(t, n.provider, n.video) && (i.video = S(n.video))), d.EMBED_TYPES_WITH_PARSEABLE_FIELDS.has(i.type)) { var s; let e = null !== (s = n.fields) && void 0 !== s ? s : []; i.fields = e.map(e => { let { name: t, value: n, inline: i } = e; return { rawName: t, rawValue: n, inline: i } }) } else i.fields = []; return i } function A(e) { let t = new Map, n = []; return e.forEach(e => { if (null == e.url) { n.push(e); return } let i = t.get(e.url); if (null == i) { n.push(e), t.set(e.url, e); return } null != e.image && (null == i.images && (i.images = [], null != i.image && i.images.push(i.image)), i.images.push(e.image)) }), n } function m(e) { let { image: t, video: n, type: i, author: r, rawTitle: s } = e; return (null != t || null != n) && (i === u.MessageEmbedTypes.GIFV || i !== u.MessageEmbedTypes.RICH && null == r && null == s) } function N(e) { return e.type === u.MessageEmbedTypes.ARTICLE && null != e.url && (T.test(e.url) || I.test(e.url)) } function p(e, t, n) { var i; return null != t && null != n ? { maxMediaWidth: t, maxMediaHeight: n } : (null === (i = e.provider) || void 0 === i ? void 0 : i.name) === "TikTok" ? { maxMediaWidth: 400, maxMediaHeight: 450 } : { maxMediaWidth: 400, maxMediaHeight: 300 } } }, 176354: function(e, t, n) { "use strict"; n.r(t), n.d(t, { countEmoji: function() { return N }, getEmojiColors: function() { return p }, getEmojiUrl: function() { return O } }), n("47120"), n("757143"), n("653041"); var i = n("738774"), r = n("906411"), s = n("889564"), a = n("131704"), o = n("496675"), l = n("594174"), u = n("768581"), d = n("563114"), _ = n("956664"), c = n("74538"), E = n("981631"), I = n("185923"); let T = new Set([I.EmojiDisabledReasons.PREMIUM_LOCKED, I.EmojiDisabledReasons.ROLE_SUBSCRIPTION_LOCKED]), f = new Set([I.EmojiDisabledReasons.PREMIUM_LOCKED, I.EmojiDisabledReasons.GUILD_SUBSCRIPTION_UNAVAILABLE, I.EmojiDisabledReasons.ROLE_SUBSCRIPTION_LOCKED, I.EmojiDisabledReasons.ROLE_SUBSCRIPTION_UNAVAILABLE]), S = new Set([I.EmojiDisabledReasons.DISALLOW_EXTERNAL, I.EmojiDisabledReasons.GUILD_SUBSCRIPTION_UNAVAILABLE, I.EmojiDisabledReasons.ONLY_GUILD_EMOJIS_ALLOWED]); function h(e) { if (e.type === r.EmojiTypes.GUILD) return !0; return null != e.guildId } function A(e, t) { return null != e && null != t && (!h(e) || t === e.guildId) } function m(e) { let { emoji: t, channel: n, guildId: r = null == n ? void 0 : n.getGuildId(), intention: u, forceIncludeExternalGuilds: d } = e; if (!h(t)) return null; let _ = null != n && (0, a.isGuildTextChannelType)(n.type), T = null != n && (0, a.isGuildVocalChannelType)(n.type), f = A(t, r), S = o.default.can(E.Permissions.USE_EXTERNAL_EMOJIS, n); if (u === I.EmojiIntention.COMMUNITY_CONTENT) return f && null != t.guildId && t.available ? null : I.EmojiDisabledReasons.DISALLOW_EXTERNAL; if (!(0, I.isExternalEmojiAllowedForIntention)(u) && !A(t, r) && !d || (_ || T) && !f && !S) return I.EmojiDisabledReasons.DISALLOW_EXTERNAL; if (null != t.id && !t.available) return I.EmojiDisabledReasons.GUILD_SUBSCRIPTION_UNAVAILABLE; let m = l.default.getCurrentUser(); if (!c.default.canUseEmojisEverywhere(m) && !f) { if (u === I.EmojiIntention.STATUS) return I.EmojiDisabledReasons.PREMIUM_LOCKED; if (!t.managed) return I.EmojiDisabledReasons.PREMIUM_LOCKED } if ((0, s.isUnusableRoleSubscriptionEmoji)(t, null != r ? r : void 0)) return (0, i.shouldHideGuildPurchaseEntryPoints)(t.guildId) ? I.EmojiDisabledReasons.ROLE_SUBSCRIPTION_UNAVAILABLE : I.EmojiDisabledReasons.ROLE_SUBSCRIPTION_LOCKED; return !t.animated || c.default.canUseAnimatedEmojis(m) || (0, s.isPurchasableRoleSubscriptionEmoji)(t) ? null : I.EmojiDisabledReasons.PREMIUM_LOCKED } function N(e, t) { let n = 0, i = 0, s = 0, a = 0, o = 0, l = 0; return e.forEach(e => { null != e.id ? (e.type === r.EmojiTypes.GUILD && (e.guildId === t ? e.managed ? a++ : i++ : e.managed ? o++ : s++), e.animated && l++) : n++ }), { unicode: n, custom: i, customExternal: s, managed: a, managedExternal: o, animated: l } } async function p(e) { return await d.default.getEmojiColors(e) } function O(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 32, { id: n, name: i, animated: r } = e; return null != n ? u.default.getEmojiURL({ id: n, size: t, animated: null != r && r }) : d.default.getURL(i) } t.default = { sanitizeEmojiName(e) { for (e = e.replace(I.EMOJI_RE, "").slice(0, I.EMOJI_MAX_LENGTH); e.length < 2;) e += "_"; return e }, filterUnsupportedEmojis: d.default.filterUnsupportedEmojis, getURL: d.default.getURL, isInternalEmojiForGuildId: A, getEmojiUnavailableReason: m, isCustomEmoji: h, getEmojiUnavailableReasons(e) { let { categoryEmojis: t, channel: n, guildId: i, intention: r, computeUnfiltered: s = !1 } = e, a = new Set, o = 0, l = s ? [] : void 0, u = 0, d = !1; for (let e of t) { let t = m({ emoji: e, channel: n, guildId: i, intention: r }); null != t ? (S.has(t) ? o++ : s && (null == l || l.push(e)), T.has(t) && (!d && t === I.EmojiDisabledReasons.PREMIUM_LOCKED && (d = !0), null != e.id && a.add(e.id), u++)) : s && (null == l || l.push(e)) } return { emojisDisabled: a, emojisUnfiltered: l, emojisFilteredCount: o, emojisPremiumLockedCount: u, emojiNitroLocked: d } }, isEmojiFiltered(e) { let t = m(e); return S.has(t) }, isEmojiPremiumLocked(e) { let t = m(e); return T.has(t) }, isEmojiCategoryNitroLocked(e) { let { categoryEmojis: t, channel: n, guildId: i, intention: r } = e, s = !1, a = 0; for (let e of t) { let t = m({ emoji: e, channel: n, intention: r, guildId: i }); t === I.EmojiDisabledReasons.PREMIUM_LOCKED ? (s = !0, a++) : t === I.EmojiDisabledReasons.GUILD_SUBSCRIPTION_UNAVAILABLE && a++ } return s && a === t.length }, isEmojiFilteredOrLocked(e) { return this.isEmojiFiltered(e) || this.isEmojiPremiumLocked(e) }, isEmojiDisabled(e) { let t = m(e); return f.has(t) }, isFileTooBig: e => e.size > 2097152, isDataTooBig: e => (0, _.dataUriFileSize)(e) > I.EMOJI_MAX_FILESIZE } }, 563114: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("757143"); var i = n("946188"), r = n("768581"), s = n("302221"), a = n("956664"), o = n("753090"); let l = new Set(["™", "™️", "\xa9", "\xa9️", "\xae", "\xae️"]); function u(e) { if (l.has(e)) return ""; try { let t = 0 > e.indexOf("‍") ? e.replace("️", "") : e; return n("778832")("@discordapp/twemoji/dist/svg/".concat(i.default.convert.toCodePoint(t), ".svg").replace("@discordapp/twemoji/dist/svg/", "./")) } catch (t) { return console.warn(t, "no emoji for", e), "" } } async function d(e) { let t; let { id: n, name: i } = e; t = null != n ? r.default.getEmojiURL({ id: n, size: 32, animated: !1 }) : u(i); let o = await (0, a.getPaletteForAvatar)(t); return null == o ? void 0 : o.map(e => { let [t, n, i] = e; return (0, s.rgbToHex)(t, n, i) }) } t.default = { getURL: o.default.makeMemoizer(u), filterUnsupportedEmojis: function(e) { return e }, applyPlatformToThemedEmojiColorPalette: function(e) { let { palette: t, shouldProcessMobileColors: n = !1 } = e; return t }, getEmojiColors: d, triggerFullscreenAnimation: function(e) { let { channelId: t, messageId: n, emoji: i } = e } } }, 289182: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getUpdatedOptions: function() { return s } }); var i = n("625306"), r = n("570140"); function s(e) { return { ...e, extra: { ...null == e ? void 0 : e.extra, ...{ ...null != r.default._currentDispatchActionType ? { currentAction: r.default._currentDispatchActionType } : {}, lastFewActions: (0, i.serialize)() } } } } }, 424218: function(e, t, n) { "use strict"; n.r(t), n.d(t, { formatKbSize: function() { return a }, formatSize: function() { return s } }); var i = n("689938"); let r = { useKibibytes: !1, showDecimalForGB: !0, useSpace: !0 }; function s(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : r, n = t.useKibibytes ? 1024 : 1e3, s = t.useKibibytes ? 1024 : 1e3, a = Math.ceil(e / n); if (a < s) return t.useSpace ? i.default.Messages.FILE_SIZE_MB.format({ size: a }) : i.default.Messages.FILE_SIZE_MB_NO_SPACE.format({ size: a }); let o = a / s; return o = t.showDecimalForGB ? Math.round(10 * o) / 10 : Math.round(o), t.useSpace ? i.default.Messages.FILE_SIZE_GB.format({ size: o }) : i.default.Messages.FILE_SIZE_GB_NO_SPACE.format({ size: o }) } function a(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : r, n = t.useKibibytes ? 1024 : 1e3, a = t.useKibibytes ? 1024 : 1e3, o = e / n; return o / a >= 1 ? s(o, t) : t.useSpace ? i.default.Messages.FILE_SIZE_KB.format({ size: Math.ceil(o) }) : i.default.Messages.FILE_SIZE_KB_NO_SPACE.format({ size: Math.ceil(o) }) } }, 403182: function(e, t, n) { "use strict"; n.r(t), n.d(t, { anyFileTooLarge: function() { return N }, classifyFile: function() { return S }, classifyFileName: function() { return h }, getMaxRequestSize: function() { return O }, makeFile: function() { return T }, maxFileSize: function() { return m }, sizeString: function() { return A }, transformNativeFile: function() { return I }, uploadSumTooLarge: function() { return p } }), n("47120"); var i = n("112456"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("206744"), l = n("948350"), u = n("430824"), d = n("594174"), _ = n("74538"), c = n("981631"), E = n("474936"); function I(e, t) { return e instanceof File ? e : T(e.data, e.filename, t) } function T(e, t, i) { let r = n("643907"); if (null == t && (t = "unknown", "type" in e)) { let n = r.extension(e.type); n && (t += ".".concat(n)) } return null == i && ("type" in e && (i = e.type), i = null != i ? i : r.lookup(t)), new File([e], t, { type: i }) } let f = [{ reType: /^image\/vnd.adobe.photoshop/, klass: "photoshop" }, { reType: /^image\/svg\+xml/, klass: "webcode" }, { reType: /^image\//, klass: "image" }, { reType: /^video\//, klass: "video" }, { reName: /\.pdf$/, klass: "acrobat" }, { reName: /\.ae/, klass: "ae" }, { reName: /\.sketch$/, klass: "sketch" }, { reName: /\.ai$/, klass: "ai" }, { reName: /\.(?:rar|zip|7z|tar|tar\.gz)$/, klass: "archive" }, { reName: /\.(?:c\+\+|cpp|cc|c|h|hpp|mm|m|json|js|rb|rake|py|asm|fs|pyc|dtd|cgi|bat|rss|java|graphml|idb|lua|o|gml|prl|sls|conf|cmake|make|sln|vbe|cxx|wbf|vbs|r|wml|php|bash|applescript|fcgi|yaml|ex|exs|sh|ml|actionscript)$/, klass: "code" }, { reName: /\.(?:txt|rtf|doc|docx|md|pages|ppt|pptx|pptm|key|log)$/, klass: "document" }, { reName: /\.(?:xls|xlsx|numbers|csv)$/, klass: "spreadsheet" }, { reName: /\.(?:html|xhtml|htm|js|xml|xls|xsd|css|styl)$/, klass: "webcode" }, { reName: /\.(?:mp3|ogg|wav|flac)$/, klass: "audio" }]; function S(e) { return h(e.name, e.type) } function h(e, t) { var n; e = null !== (n = null == e ? void 0 : e.toLowerCase()) && void 0 !== n ? n : ""; let i = a().find(f, n => null != n.reType && null != t ? n.reType.test(t) : null != n.reName && "" !== e && n.reName.test(e)); return null != i ? i.klass : "unknown" } function A(e) { return r().filesize(e) } function m(e) { let t = d.default.getCurrentUser(); o.default.trackExposure({ location: "de18ec_1" }), l.default.trackExposure({ location: "de18ec_2" }); let n = _.default.getUserMaxFileSize(t); if (null == e) return n; let i = u.default.getGuild(e); return Math.max(null != i ? E.BoostedGuildFeatures[i.premiumTier].limits.fileSize : c.MAX_ATTACHMENT_SIZE, n) } function N(e, t) { let n = m(t); return Array.from(e).some(e => e.size > n) } function p(e) { return function(e) { let t = 0; for (let n of e) t += n.size; return t }(e) > O() } function O() { let e = d.default.getCurrentUser(); return null != e && e.isStaff() ? 524288e3 : 524288e3 } }, 630388: function(e, t, n) { "use strict"; function i(e, t) { return (e & t) === t } function r(e, t) { return e | t } function s(e, t) { return e & ~t } function a(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i]; return n.reduce((e, t) => e & ~t, e) } function o(e, t, n) { if (n) return e | t; return e & ~t } function l(e, t) { if (i(e, t)) return e & ~t; return e | t } n.r(t), n.d(t, { addFlag: function() { return r }, hasFlag: function() { return i }, removeFlag: function() { return s }, removeFlags: function() { return a }, setFlag: function() { return o }, toggleFlag: function() { return l } }), n("724458") }, 657682: function(e, t, n) { "use strict"; n.r(t), n.d(t, { humanizeAbortCode: function() { return _ }, validateDiscordTag: function() { return d } }), n("47120"); var i = n("626135"), r = n("777754"), s = n("981631"), a = n("689938"); let o = /^\d+$/, l = /^(.+?@.+?\..+?|.+?#\d{4})$/, u = /^[a-zA-Z0-9_\\.]+$/; function d(e) { return u.test(e) || e.includes("#") && l.test(e) ? null : (function(e) { let [t, n] = e.split("#"); i.default.track(s.AnalyticEvents.FRIEND_REQUEST_FAILED, { reason: "Invalid Username", query: e, discrim_len: (null != n ? n : "").length, username_len: t.length, is_email_like: r.default.isEmail(e), is_invite_like: r.default.isInvite(e), is_num_only: o.test(e) }) }(e), a.default.Messages.POMELO_ADD_FRIEND_ERROR) } function _(e, t) { switch (e) { case s.AbortCodes.RELATIONSHIP_INCOMING_DISABLED: return a.default.Messages.ADD_FRIEND_ERROR_INVALID_DISCORD_TAG.format({ discordTag: t }); case s.AbortCodes.TOO_MANY_FRIENDS: return a.default.Messages.ADD_FRIEND_ERROR_TOO_MANY_FRIENDS; case s.AbortCodes.RELATIONSHIP_ALREADY_FRIENDS: return a.default.Messages.ADD_FRIEND_ERROR_ALREADY_FRIENDS; case s.AbortCodes.USER_QUARANTINED: case s.AbortCodes.USER_FRIEND_REQUEST_LIMITED_ACCESS: return a.default.Messages.LIMITED_ACCESS_INFO_MODAL_HEADING; case s.AbortCodes.TOO_MANY_BLOCKED_USERS: return a.default.Messages.BLOCK_USER_ERROR_TOO_MANY_BLOCKED_USERS; case s.AbortCodes.RELATIONSHIP_INCOMING_BLOCKED: case s.AbortCodes.RELATIONSHIP_INVALID_SELF: case s.AbortCodes.RELATIONSHIP_INVALUD_USER_BOT: case s.AbortCodes.RELATIONSHIP_INVALID_DISCORD_TAG: default: return a.default.Messages.POMELO_ADD_FRIEND_ERROR } } }, 251625: function(e, t, n) { "use strict"; function i(e, t) { if (e === t) return !0; if (null == e || null == t || e.length !== t.length) return !1; let n = e.length; for (let i = 0; i < n; i++) if (e[i] !== t[i]) return !1; return !0 } function r(e) { let t = null, n = null; return function() { for (var r = arguments.length, s = Array(r), a = 0; a < r; a++) s[a] = arguments[a]; return !i(t, s) && (n = e(...s)), t = s, n } } function s(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 5e3, n = -1, i = null; return () => ((null == i || Date.now() >= n) && (n = Date.now() + t, i = e()), i) } function a(e) { for (var t in e) e.hasOwnProperty(t) && delete e[t] } n.r(t), n.d(t, { areArraysShallowlyEqual: function() { return i }, cachedFunction: function() { return r }, clearObject: function() { return a }, promiseThrottle: function() { return s } }), n("653041"), n("177593"), n("47120") }, 226351: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { Future: function() { return r } }); class r { constructor() { i(this, "promise", void 0), i(this, "resolve", void 0), i(this, "reject", void 0), this.promise = new Promise((e, t) => { this.resolve = e, this.reject = t }) } } }, 708406: function(e, t, n) { "use strict"; n.r(t), n.d(t, { calculateAnalyticsMetadata: function() { return r } }); var i = n("981631"); function r(e, t, n) { let r = null != t ? { [t]: 1 } : {}, { offset: s, limit: a, results: o, totalResults: l } = null != n ? n : {}; return { search_type: i.SearchTypes.GIF, load_id: e, limit: a, offset: s, page: null != a && null != s ? Math.floor(s / a) + 1 : 1, total_results: l, page_results: null != o ? o.length : null, num_modifiers: Object.keys(r).length, modifiers: r } } }, 877481: function(e, t, n) { "use strict"; n.r(t), n("411104"), n("47120"); var i = n("274616"), r = n("710845"), s = n("893988"), a = n("812967"), o = n("314897"), l = n("757266"), u = n("906467"), d = n("6132"), _ = n("830168"), c = n("358085"), E = n("591759"), I = n("998502"), T = n("981631"); let f = new r.default("Games"), S = {}, h = 0, A = null; function m() { return null != A ? Promise.resolve(A) : (0, c.isDesktop)() ? I.default.ensureModule("discord_game_utils").then(() => { let e = I.default.getGameUtils(); return null != e && null != e.findLaunchable ? (A = e, e) : Promise.reject(Error("game utils not found")) }) : Promise.reject(Error("not desktop client")) } function N(e) { let t = { id: e.id, name: e.name, thirdPartySkus: e.thirdPartySkus, executables: e.executables.filter(e => e.os === (0, c.getPlatformName)()).map(e => e.name) }, n = e.aliases.map(e => ({ ...t, name: e })); return [t, ...n] } function p(e) { return { id: e } } async function O(e) { if (!Array.isArray(e) && (e = [e]), !u.default.isDeveloper && (e = e.filter(e => null == e.thirdPartySkus || -1 === e.thirdPartySkus.findIndex(e => { let { distributor: t } = e; return t === T.Distributors.BATTLENET }))), 0 === e.length) throw Error("No remaining launchable queries"); let t = Date.now(); t > h && (h = t + 36e5, S = {}); let n = await m(); for (let t of e) { let e = S[t.id]; if (null != e) return e; let i = await new Promise(e => n.findLaunchable(t, e)); if (null != i) return S[t.id] = i, i } throw Error("could not find launchable") } function C(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0; if (e()) { t(); return } setTimeout(() => { 250 * i <= 12e4 ? C(e, t, n, i + 1) : n() }, 250) } function R(e) { return f.info("launch", e), new Promise((t, n) => { null == E.default.safeParseWithQuery(e.launchTarget) ? n(Error("Failed to parse launch target. ".concat(e.launchTarget))) : (window.open(e.launchTarget), t([])) }) } t.default = { waitSubscribed: (e, t) => new Promise((n, i) => C(() => a.default.isSubscribed(e, t), n, i)), waitConnected(e) { return new Promise(C.bind(this, () => l.default.isConnected(e))) }, isLaunchable: e => O(N(e)).then(e => null != e).catch(() => !1), launch: e => O(N(e)).then(R), launchDispatchApplication(e, t, n, r, a) { let { launchOptions: l, defaultLaunchOptionId: u, installPath: c, applicationId: E, branchId: I, buildId: f, shouldPatch: S } = e; if (null == l || null == u || null == c) throw Error("Couldn't construct launchable for ".concat(e.applicationId)); null == a && (a = u); let h = l[a]; if (null == h) throw Error("Couldn't construct launchable for ".concat(e.applicationId, ". No launch option.")); return (0, i.fetchBranches)([I]).then(e => { let t = e[0]; if (null == t) return Promise.reject(Error("branch is null")); let { liveBuildId: n } = t; if (S && n !== f) return Promise.reject(Error("live build id changed")) }).then(() => _.default.runLaunchSetup(E, I)).then(() => { let e = (0, s.default)(c), i = { DISCORD_INSTANCE_ID: d.default.getId().toString(), DISCORD_ACCESS_TOKEN: null != t ? t : "", DISCORD_CURRENT_LOCALE: n, DISCORD_CURRENT_BRANCH: r, DISCORD_STORAGE_PATH: T.DefaultCloudSyncConfiguration.ROOT_STORAGE_PATH(e, o.default.getId()) }; return _.default.launch(E, I, h.name, i) }) }, removeShortcuts: e => (0, c.isWindows)() ? m().then(t => { var n, i; return null !== (i = null === (n = t.removeShortcuts) || void 0 === n ? void 0 : n.call(t, e)) && void 0 !== i && i }) : Promise.resolve(!1), createShortcuts(e, t, n, i, r) { if (null == r || !(0, c.isWindows)()) return Promise.resolve(!1); let s = "discord:///library/".concat(i, "/launch"), a = "".concat(r, "\\icon.ico"); return m().then(i => { var r, o; return null !== (o = null === (r = i.createShortcuts) || void 0 === r ? void 0 : r.call(i, e, t, n, s, a)) && void 0 !== o && o }) }, isGameLaunchable: e => O({ id: e }).then(e => null != e).catch(() => !1), launchGame(e) { if (l.default.isConnected(e)) return Promise.resolve(); return O({ id: e }).then(R) }, isProtocolRegistered: e => m().then(t => { var n, i; return null !== (i = null === (n = t.isProtocolSchemeRegistered) || void 0 === n ? void 0 : n.call(t, e)) && void 0 !== i && i }), setRecentGames(e) { m().then(t => { var n; return null === (n = t.setRecentGames) || void 0 === n ? void 0 : n.call(t, e) }).catch(() => {}) } } }, 669079: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GiftExperience: function() { return i }, findGiftCodes: function() { return B }, firstLibraryApplicationForGiftCode: function() { return z }, getBodyText: function() { return W }, getButtonText: function() { return j }, getErrorMessage: function() { return K }, getGiftCodeURL: function() { return V }, getGiftExperience: function() { return P }, getHeaderText: function() { return Y }, getStep: function() { return H }, isGiftCodeEmbed: function() { return k }, makeComboId: function() { return b }, parseComboId: function() { return G }, processGiftCodeInput: function() { return Z }, resolveGiftCode: function() { return x }, shouldShowCustomGiftExperience: function() { return U }, trackGiftCodeCopy: function() { return F }, useGetGiftCode: function() { return X } }), n("47120"), n("757143"), n("627341"); var i, r, s = n("278074"), a = n("873546"), o = n("442837"), l = n("34756"), u = n("100159"), d = n("912788"), _ = n("594174"), c = n("626135"), E = n("823379"), I = n("358085"), T = n("74538"), f = n("226951"), S = n("73346"), h = n("981631"), A = n("474936"), m = n("689938"); let N = f.default.escape(window.GLOBAL_ENV.GIFT_CODE_HOST), p = [N, ...["discordapp.com/gifts", "discord.com/gifts"].map(e => f.default.escape(e))].join("|"), O = RegExp("(?: |^|https?://)(?:".concat(p, ")/([a-z0-9-]+)"), "gi"), C = [...["discord.com/billing/promotions", "promos.discord.gg"].map(e => f.default.escape(e))].join("|"), R = RegExp("(?: |^|https?://)(?:".concat(C, ")/([a-z0-9-]+)"), "gi"), g = (e, t) => Array(t).fill(void 0).map(() => "[".concat("abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789", "]{").concat(e, "}")).join("-?"), L = g(4, 4), v = g(4, 6), D = g(5, 3), M = [L, v, D, "[a-zA-Z]{4}-?[0-9a-zA-Z]{4}-?[a-zA-Z]{4}"].join("|"), y = new RegExp("^(".concat("WUMP-?", ")?(").concat(M, ")$")); (r = i || (i = {}))[r.DEFAULT = 0] = "DEFAULT", r[r.CUSTOM_STYLE = 1] = "CUSTOM_STYLE", r[r.CUSTOM_MESSAGE_EMOJI_SOUNDBOARD = 2] = "CUSTOM_MESSAGE_EMOJI_SOUNDBOARD"; let P = (e, t) => a.isMobile || a.isTablet ? 0 : null != e || t ? 2 : 1, U = e => 0 !== P(e); function b(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n = arguments.length > 2 ? arguments[2] : void 0; return "".concat(e, ":").concat(null != t ? t : "", ":").concat(null != n ? n : "") } function G(e) { let [t, n, i] = e.split(":"); return { skuId: t, subscriptionPlanId: "" === n ? null : n, giftStyle: "" !== i && null != i ? Number.parseInt(i) : void 0 } } function w(e) { return e.replace(/[^A-Za-z0-9]/g, "") } let k = e => (null == e ? void 0 : e.type) === h.MessageTypes.CUSTOM_GIFT && (null == e ? void 0 : e.embeds.length) === 1 && (null == e ? void 0 : e.embeds[0].type) === h.MessageEmbedTypes.GIFT, B = e => { let t; if (null == e) return []; let n = new Set; for (; null != (t = O.exec(e)) && n.size < 3;) n.add(w(t[1])); for (; null != (t = R.exec(e)) && n.size < 3;) n.add(w(t[1])); return Array.from(n) }; function V() { let e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", n = window.GLOBAL_ENV.GIFT_CODE_HOST; return null == n || (0, I.isAndroid)() ? (n = location.host, e = "/gifts/".concat(t)) : e = "/".concat(t), "".concat(location.protocol, "//").concat(n).concat(e) } async function x(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; try { let i = (await (0, S.httpGetWithCountryCodeQuery)({ url: h.Endpoints.GIFT_CODE_RESOLVE(e), query: { with_application: t, with_subscription_plan: n }, oldFormErrors: !0 })).body; return c.default.track(h.AnalyticEvents.GIFT_CODE_RESOLVED, { resolved: !0, gift_code: i.code, gift_code_max_uses: i.max_uses, sku_id: i.store_listing.sku.id, sku_type: i.store_listing.sku.type, application_id: i.store_listing.sku.application_id, store_title: i.store_listing.sku.name }, { flush: !0 }), i } catch (t) { throw c.default.track(h.AnalyticEvents.GIFT_CODE_RESOLVED, { resolved: !1, gift_code: e }), new l.default(t) } } function F(e, t) { c.default.track(h.AnalyticEvents.GIFT_CODE_COPIED, { ...(0, u.default)(t, !1, !1), ...e.analyticsData }) } function H(e, t, n, i, r, s, a) { return null == n && (i || r || null == e) ? !a || s || i || r ? i && (t.isSubscription || null != e) ? h.GiftCodeModalStates.SUCCESS : h.GiftCodeModalStates.CONFIRM : h.GiftCodeModalStates.OPEN : h.GiftCodeModalStates.ERROR } function Y(e, t, n) { switch (e) { case h.GiftCodeModalStates.ERROR: return m.default.Messages.GIFT_CONFIRMATION_HEADER_FAIL; case h.GiftCodeModalStates.SUCCESS: return t.isSubscription ? m.default.Messages.GIFT_CONFIRMATION_HEADER_SUCCESS_NITRO.format({ skuName: n.name }) : m.default.Messages.GIFT_CONFIRMATION_HEADER_SUCCESS; case h.GiftCodeModalStates.CONFIRM: default: return t.isSubscription ? m.default.Messages.GIFT_CONFIRMATION_HEADER_CONFIRM_NITRO.format({ skuName: n.name }) : m.default.Messages.GIFT_CONFIRMATION_HEADER_CONFIRM } } function j(e, t, n) { switch (e) { case h.GiftCodeModalStates.ERROR: return m.default.Messages.GIFT_CONFIRMATION_BUTTON_FAIL; case h.GiftCodeModalStates.SUCCESS: if (__OVERLAY__) return m.default.Messages.GIFT_CONFIRMATION_BUTTON_NOICE; if (t.isSubscription) return m.default.Messages.GIFT_CONFIRMATION_BUTTON_SUBSCRIPTION_SUCCESS; return m.default.Messages.GIFT_CONFIRMATION_BUTTON_GO_TO_LIBRARY; case h.GiftCodeModalStates.OPEN: return m.default.Messages.GIFT_OPEN_PROMPT; case h.GiftCodeModalStates.CONFIRM: default: if (null != n && n) return m.default.Messages.GIFT_CODE_AUTH_ACCEPT; if (null != t.giftStyle) return t.isClaimed ? m.default.Messages.GIFT_CONFIRMATION_BUTTON_CONFIRM : m.default.Messages.GIFT_CONFIRMATION_BUTTON_CONFIRM_MOBILE; return t.isSubscription ? m.default.Messages.GIFT_CONFIRMATION_BUTTON_CONFIRM_SUBSCRIPTION : m.default.Messages.GIFT_CONFIRMATION_BUTTON_CONFIRM } } function W(e) { let { step: t, sku: n, libraryApplication: i, error: r, accepted: a, accepting: o, onGoToLibrary: l, subscriptionPlan: u = null } = e; switch (t) { case h.GiftCodeModalStates.ERROR: return K(i, r, a, o, l); case h.GiftCodeModalStates.SUCCESS: if (null != u) { var d; return d = u, (0, s.match)(d).with({ interval: A.SubscriptionIntervalTypes.MONTH, premiumSubscriptionType: A.PremiumTypes.TIER_2 }, () => m.default.Messages.PREMIUM_FEATURES_TIER_2.format({ timeInterval: m.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_MONTH })).with({ interval: A.SubscriptionIntervalTypes.YEAR, premiumSubscriptionType: A.PremiumTypes.TIER_2 }, () => m.default.Messages.PREMIUM_FEATURES_TIER_2.format({ timeInterval: m.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_YEAR })).with({ interval: A.SubscriptionIntervalTypes.MONTH, premiumSubscriptionType: A.PremiumTypes.TIER_1 }, () => m.default.Messages.GIFT_CONFIRMATION_BODY_SUCCESS_PREMIUM_TIER_1_MONTHLY.format({ intervalCount: d.intervalCount })).with({ interval: A.SubscriptionIntervalTypes.YEAR, premiumSubscriptionType: A.PremiumTypes.TIER_1 }, () => m.default.Messages.GIFT_CONFIRMATION_BODY_SUCCESS_PREMIUM_TIER_1_YEARLY.format({ intervalCount: d.intervalCount })).otherwise(() => m.default.Messages.GIFT_CONFIRMATION_BODY_SUCCESS_GENERIC) } return m.default.Messages.GIFT_CONFIRMATION_BODY_SUCCESS.format({ skuName: n.name }); case h.GiftCodeModalStates.CONFIRM: default: if (null != u) return (u.interval === A.SubscriptionIntervalTypes.MONTH ? m.default.Messages.GIFT_CONFIRMATION_BODY_SUBSCRIPTION_MONTHLY_CONFIRM : m.default.Messages.GIFT_CONFIRMATION_BODY_SUBSCRIPTION_YEARLY_CONFIRM).format({ skuName: n.name, intervalCount: u.intervalCount }); return m.default.Messages.GIFT_CONFIRMATION_BODY_CONFIRM.format({ skuName: n.name }) } } function K(e, t, n, i, r) { let s = m.default.Messages.GIFT_CONFIRMATION_BODY_OWNED.format({ onGoToLibrary: r }); return null != (n || i ? void 0 : e) ? s : null == t ? null : function(e, t) { switch (e.code) { case h.AbortCodes.INVALID_GIFT_SELF_REDEMPTION: return m.default.Messages.GIFT_CONFIRMATION_BODY_SELF_GIFT_NO_PAYMENT; case h.AbortCodes.INVALID_GIFT_REDEMPTION_EXHAUSTED: return m.default.Messages.GIFT_CONFIRMATION_BODY_CLAIMED; case h.AbortCodes.INVALID_GIFT_REDEMPTION_OWNED: return m.default.Messages.GIFT_ERROR_OWNED; case h.AbortCodes.UNKNOWN_GIFT_CODE: return m.default.Messages.GIFT_CONFIRMATION_BODY_INVALID; case h.AbortCodes.INVALID_GIFT_REDEMPTION_SUBSCRIPTION_INCOMPATIBLE: return m.default.Messages.GIFT_EMBED_BODY_SUBSCRIPTION_MISMATCH.format({ planName: (0, T.isPremiumExactly)(t, A.PremiumTypes.TIER_2) ? m.default.Messages.PREMIUM_TIER_2 : m.default.Messages.PREMIUM_TIER_1 }); case h.AbortCodes.INVALID_GIFT_REDEMPTION_SUBSCRIPTION_MANAGED: return m.default.Messages.GIFT_CONFIRMATION_BODY_ERROR_SUBSCRIPTION_MANAGED; case h.AbortCodes.INVALID_GIFT_REDEMPTION_INVOICE_OPEN: return m.default.Messages.GIFT_CONFIRMATION_BODY_ERROR_INVOICE_OPEN; case h.AbortCodes.INVALID_GIFT_REDEMPTION_FRAUD_REJECTED: return m.default.Messages.GIFT_CODE_SMITE_REJECT_HELP_TEXT; case h.AbortCodes.BILLING_NON_REFUNDABLE_PAYMENT_SOURCE: return m.default.Messages.GIFT_CODE_PAYMENT_SOURCE_INVALID; default: return m.default.Messages.GIFT_CONFIRMATION_BODY_UNKNOWN_ERROR } }(t, _.default.getCurrentUser()) } function z(e, t, n) { let i = t.applicationId, r = e.length > 0 ? e : [i], s = r.map(e => n.getLibraryApplication(i, e, !0)).filter(E.isNotNullish); return s.length === r.length ? s[0] : null } function Z(e) { let t = e.trim().split("/").pop().match(y); if (null == t) return null; let [n, i, r] = t; return null == r ? null : r.replace(/-/g, "") } let X = (e, t) => (0, o.useStateFromStores)([d.default], () => { if (null == e || !t) return null; let n = d.default.getGiftCode(e); return null == n || "" === n ? null : n }) }, 823379: function(e, t, n) { "use strict"; function i(e) { throw Error("Unhandled value: ".concat(e)) } function r(e) { return null != e } function s(e, t) { return e.size === t.size && (0 === e.size && 0 === t.size || Array.from(e).every(e => t.has(e))) } function a(e, t) { return t.includes(e) } n.r(t), n.d(t, { areSetsEqual: function() { return s }, assertNever: function() { return i }, isIn: function() { return a }, isNotNullish: function() { return r } }), n("411104") }, 267642: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PerkIcons: function() { return i }, appliedGuildBoostsRequiredForPerks: function() { return U }, boostedGuildTierToAnalyticsObjectType: function() { return g }, generateBlockGuildSubscriptionPurchasesNode: function() { return y }, getAppliedGuildBoostsRequired: function() { return b }, getAvailableGuildBoostSlots: function() { return M }, getAvailableSoundboardSoundCount: function() { return B }, getAvailableStickerSlotCount: function() { return k }, getGracePeriodEndingDate: function() { return w }, getGuildTierFromAppliedBoostCount: function() { return L }, getIncrementalSoundboardSoundCountForTier: function() { return N }, getIncrementalStickerCountForTier: function() { return A }, getNextTier: function() { return S }, getNumberOfAppliedBoostsNeededForTier: function() { return V }, getShortenedTierName: function() { return C }, getTierName: function() { return O }, getTiers: function() { return p }, getTotalSoundboardSoundCountForTier: function() { return m }, getTotalStickerCountForTier: function() { return h }, isGuildBoostSlotCanceled: function() { return x }, isGuildBoostedAtLeast: function() { return v }, isInGracePeriod: function() { return P }, isTierUnlocked: function() { return D }, minimumRequiredTierForGuildFeature: function() { return R } }), n("411104"), n("47120"), n("724458"); var i, r, s = n("392711"), a = n.n(s); n("913527"); var o = n("314884"), l = n("78839"), u = n("424218"), d = n("823379"), _ = n("63063"), c = n("74538"), E = n("981631"), I = n("474936"), T = n("689938"); Object.freeze({ 1: 1, 2: 2, 3: 3, 4: 6, 5: 9, 6: 12, 7: 15, 8: 18, 9: 24 }); (r = i || (i = {}))[r.EMOJI = 1] = "EMOJI", r[r.AUDIO = 2] = "AUDIO", r[r.ANIMATED = 3] = "ANIMATED", r[r.CUSTOMIZATION = 4] = "CUSTOMIZATION", r[r.UPLOAD = 5] = "UPLOAD", r[r.VANITY = 6] = "VANITY", r[r.STREAM = 7] = "STREAM", r[r.STICKER = 8] = "STICKER", r[r.CUSTOM_ROLE_ICON = 11] = "CUSTOM_ROLE_ICON", r[r.STAGE_VIDEO = 12] = "STAGE_VIDEO", r[r.SOUNDBOARD = 13] = "SOUNDBOARD"; let f = [E.BoostedGuildTiers.NONE, E.BoostedGuildTiers.TIER_1, E.BoostedGuildTiers.TIER_2, E.BoostedGuildTiers.TIER_3], S = (e, t) => { var n; return e === E.BoostedGuildTiers.NONE ? E.BoostedGuildTiers.TIER_1 : null === (n = G(t).find(t => t.tier === e)) || void 0 === n ? void 0 : n.nextTier }, h = e => I.TotalStickerCountsByTier[e], A = e => I.IncrementalStickerCountsByTier[e], m = (e, t) => null != t && t.hasFeature(E.GuildFeatures.MORE_SOUNDBOARD) ? 96 : I.TotalSoundboardSoundCountsByTier[e], N = e => { if (e === E.BoostedGuildTiers.NONE) return I.TotalSoundboardSoundCountsByTier[e]; let t = f[f.indexOf(e) - 1]; return I.TotalSoundboardSoundCountsByTier[e] - I.TotalSoundboardSoundCountsByTier[t] }, p = e => [{ tier: E.BoostedGuildTiers.TIER_1, title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERKS_TITLE_TIER_1, perks: [{ title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_EMOJI.format({ adding: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_1].limits.emoji - I.BoostedGuildFeatures[E.BoostedGuildTiers.NONE].limits.emoji, total: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_1].limits.emoji }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_EMOJI, icon: 1 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_STICKER.format({ adding: A(E.BoostedGuildTiers.TIER_1), total: h(E.BoostedGuildTiers.TIER_1) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_STICKER, icon: 8 }, { title: T.default.Messages.SOUNDBOARD_MARKETING_BOOSTING_PERKS.format({ soundCount: N(E.BoostedGuildTiers.TIER_1), totalSoundCount: m(E.BoostedGuildTiers.TIER_1) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_SOUNDBOARD, icon: 13 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_AUDIO_QUALITY.format({ bitrate: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_1].limits.bitrate / 1e3 }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_AUDIO_QUALITY, icon: 2 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_1_ANIMATED_GUILD_ICON, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_ANIMATED_GUILD_ICON.format(), icon: 3 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_1_SPLASH, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_SPLASH, icon: 4 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_1_STREAMING, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_1_STREAMING, icon: 7 }].filter(d.isNotNullish) }, { tier: E.BoostedGuildTiers.TIER_2, title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERKS_TITLE_TIER_2, perks: [{ title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_EMOJI.format({ adding: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_2].limits.emoji - I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_1].limits.emoji, total: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_2].limits.emoji }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_EMOJI, icon: 1 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_STICKER.format({ adding: A(E.BoostedGuildTiers.TIER_2), total: h(E.BoostedGuildTiers.TIER_2) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_STICKER, icon: 8 }, { title: T.default.Messages.SOUNDBOARD_MARKETING_BOOSTING_PERKS.format({ soundCount: N(E.BoostedGuildTiers.TIER_2), totalSoundCount: m(E.BoostedGuildTiers.TIER_2) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_SOUNDBOARD, icon: 13 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_AUDIO_QUALITY.format({ bitrate: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_2].limits.bitrate / 1e3 }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_AUDIO_QUALITY, icon: 2 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_2_BANNER, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_BANNER, icon: 4 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_UPLOAD_LIMIT.format({ fileSize: (0, u.formatSize)(I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_2].limits.fileSize / 1024, { useKibibytes: !0 }) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_UPLOAD_LIMIT.format(), icon: 5 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_2_STREAMING, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_STREAMING, icon: 7 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_2_CUSTOM_ROLE_ICONS, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_2_CUSTOM_ROLE_ICONS, icon: 11 }, e ? { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_VIDEO_STAGE.format({ limit: E.MAX_STAGE_VIDEO_USER_LIMIT_TIER2 }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_VIDEO_STAGE.format({ limit: E.MAX_STAGE_VIDEO_USER_LIMIT_TIER2 }), icon: 12 } : null].filter(d.isNotNullish) }, { tier: E.BoostedGuildTiers.TIER_3, title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERKS_TITLE_TIER_3, perks: [{ title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_EMOJI.format({ adding: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_3].limits.emoji - I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_2].limits.emoji, total: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_3].limits.emoji }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_EMOJI, icon: 1 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_STICKER.format({ adding: A(E.BoostedGuildTiers.TIER_3), total: h(E.BoostedGuildTiers.TIER_3) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_STICKER, icon: 8 }, { title: T.default.Messages.SOUNDBOARD_MARKETING_BOOSTING_PERKS.format({ soundCount: N(E.BoostedGuildTiers.TIER_3), totalSoundCount: m(E.BoostedGuildTiers.TIER_3) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_SOUNDBOARD, icon: 13 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_AUDIO_QUALITY.format({ bitrate: I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_3].limits.bitrate / 1e3 }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_AUDIO_QUALITY, icon: 2 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_3_VANITY_URL, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_VANITY_URL.format({ helpdeskArticle: _.default.getArticleURL(E.HelpdeskArticles.GUILD_VANITY_URL) }), icon: 6 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_ANY_UPLOAD_LIMIT.format({ fileSize: (0, u.formatSize)(I.BoostedGuildFeatures[E.BoostedGuildTiers.TIER_3].limits.fileSize / 1024, { useKibibytes: !0 }) }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_UPLOAD_LIMIT.format(), icon: 5 }, { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_TIER_3_ANIMATED_BANNER, description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_DESCRIPTION_TIER_3_ANIMATED_BANNER, icon: 3 }, e ? { title: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_VIDEO_STAGE.format({ limit: E.MAX_STAGE_VIDEO_USER_LIMIT_TIER3 }), description: T.default.Messages.GUILD_SETTINGS_GUILD_PREMIUM_PERK_TITLE_VIDEO_STAGE.format({ limit: E.MAX_STAGE_VIDEO_USER_LIMIT_TIER3 }), icon: 12 } : null].filter(d.isNotNullish) }]; function O(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { useLevels: n = !0 } = t; switch (e) { case E.BoostedGuildTiers.NONE: return n ? T.default.Messages.PREMIUM_GUILD_TIER_0 : T.default.Messages.BOOSTING_MARKETING_REDESIGN_EXPERIMENT_TIER_NONE_NAME; case E.BoostedGuildTiers.TIER_1: return T.default.Messages.PREMIUM_GUILD_TIER_1; case E.BoostedGuildTiers.TIER_2: return T.default.Messages.PREMIUM_GUILD_TIER_2; case E.BoostedGuildTiers.TIER_3: return T.default.Messages.PREMIUM_GUILD_TIER_3; default: throw Error("Not a valid tier type") } } function C(e) { switch (e) { case E.BoostedGuildTiers.NONE: return T.default.Messages.PREMIUM_GUILD_TIER_0; case E.BoostedGuildTiers.TIER_1: return T.default.Messages.PREMIUM_GUILD_TIER_1_SHORT; case E.BoostedGuildTiers.TIER_2: return T.default.Messages.PREMIUM_GUILD_TIER_2_SHORT; case E.BoostedGuildTiers.TIER_3: return T.default.Messages.PREMIUM_GUILD_TIER_3_SHORT; default: throw Error("Not a valid tier type") } } let R = a().memoize(e => (0, I.BoostedGuildFeatures)[E.BoostedGuildTiers.TIER_1].features.includes(e) ? E.BoostedGuildTiers.TIER_1 : (0, I.BoostedGuildFeatures)[E.BoostedGuildTiers.TIER_2].features.includes(e) ? E.BoostedGuildTiers.TIER_2 : (0, I.BoostedGuildFeatures)[E.BoostedGuildTiers.TIER_3].features.includes(e) ? E.BoostedGuildTiers.TIER_3 : null), g = e => { if (e === E.BoostedGuildTiers.NONE) return E.AnalyticsObjectTypes.NONE; if (e === E.BoostedGuildTiers.TIER_1) return E.AnalyticsObjectTypes.TIER_1; if (e === E.BoostedGuildTiers.TIER_2) return E.AnalyticsObjectTypes.TIER_2; else if (e === E.BoostedGuildTiers.TIER_3) return E.AnalyticsObjectTypes.TIER_3; return null }; function L(e, t) { for (let n of G(t)) if (e >= n.amount) return n.tier; return E.BoostedGuildTiers.NONE } function v(e, t) { return null == t || null != e && e >= t } function D(e, t) { return v(e.premiumTier, t) } function M(e) { return a().values(e).filter(e => e.isAvailable()) } function y() { let e = l.default.getPremiumTypeSubscription(); if (null == e ? void 0 : e.isPausedOrPausePending) return T.default.Messages.GUILD_BOOSTING_DISABLED_FOR_PAUSED_SUBSCRIPTION; let { numAvailableGuildBoostSlots: t, numCanceledGuildBoostSlots: n } = Object.values(o.default.boostSlots).reduce((e, t) => (x(t) && e.numCanceledGuildBoostSlots++, t.isAvailable() && e.numAvailableGuildBoostSlots++, e), { numAvailableGuildBoostSlots: 0, numCanceledGuildBoostSlots: 0 }); if (null == e || t > 0) return null; if (e.status === E.SubscriptionStatusTypes.PAST_DUE) return T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_SUBSCRIPTION_PAST_DUE; if (e.status === E.SubscriptionStatusTypes.ACCOUNT_HOLD) return T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_SUBSCRIPTION_ACCOUNT_HOLD; if (n > 0) return T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_PENDING_MUTATION_PREMIUM_GUILD_SUBSCRIPTION; if (null == e.renewalMutations) return null; let i = c.getNumPremiumGuildSubscriptions(e.renewalMutations.additionalPlans); return c.getNumPremiumGuildSubscriptions(e.additionalPlans) > i ? T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_PENDING_MUTATION_PREMIUM_GUILD_SUBSCRIPTION : T.default.Messages.PREMIUM_GUILD_SUBSCRIPTION_PURCHASE_BUTTON_DISABLED_PENDING_MUTATION_PLAN } function P(e, t) { return U(e, t) > 0 } function U(e, t) { let n = L(e.length, t), i = b(t)[n], r = e.filter(e => null != e.endsAt); return i - (e.length - r.length) } function b(e) { return E.AppliedGuildBoostsRequiredForBoostedGuildTier } function G(e) { let t = b(e); return [{ tier: E.BoostedGuildTiers.TIER_3, amount: t[E.BoostedGuildTiers.TIER_3], nextTier: null }, { tier: E.BoostedGuildTiers.TIER_2, amount: t[E.BoostedGuildTiers.TIER_2], nextTier: E.BoostedGuildTiers.TIER_3 }, { tier: E.BoostedGuildTiers.TIER_1, amount: t[E.BoostedGuildTiers.TIER_1], nextTier: E.BoostedGuildTiers.TIER_2 }] } function w(e, t) { let n = U(e, t); if (n > 0) { let t = e.sort((e, t) => null != e.endsAt && null != t.endsAt ? e.endsAt.getTime() - t.endsAt.getTime() : -1).filter(e => null != e.endsAt); return t[t.length - n].endsAt } return null } function k(e, t) { let n = A(t), i = f.indexOf(t); if (-1 === i) return 0; let r = f[i - 1], s = null != r ? h(r) : 0, a = h(t); return Math.max(0, n - e.slice(s, a).length) } function B(e, t, n) { return -1 === f.indexOf(n) ? 0 : Math.max(0, m(n, e) - t.length) } function V(e, t) { let n = e.premiumSubscriberCount; return Math.max(0, b(e.id)[t] - n) } function x(e) { var t; return (null === (t = e.subscription) || void 0 === t ? void 0 : t.status) === E.SubscriptionStatusTypes.CANCELED || e.canceled } }, 900849: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnalyticsContexts: function() { return i }, MINIMUM_MEMBER_COUNT: function() { return T }, getDiscoverableGuild: function() { return g }, makeDiscoverableGuild: function() { return h }, startLurking: function() { return f }, trackDiscoveryExited: function() { return m }, trackDiscoveryViewed: function() { return A }, trackGuildJoinClicked: function() { return R }, trackSearchClosed: function() { return N }, trackSearchResultsViewed: function() { return C }, trackSearchStarted: function() { return p }, trackTagSearchStarted: function() { return O }, viewGuild: function() { return S } }), n("47120"); var i, r, s = n("664751"), a = n("544891"), o = n("749210"), l = n("41776"), u = n("703656"), d = n("769654"), _ = n("650774"), c = n("430824"), E = n("626135"), I = n("981631"); (r = i || (i = {})).SEARCH = "Search", r.RECOMMENDED = "Recommended", r.POPULAR = "Popular", r.RECOMMENDED_E3 = "Recommended - E3", r.HEADER = "Header"; let T = ">200"; async function f(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, { channelId: i, onSuccess: r, joinSource: s, loadId: a, setsHistorySnapshot: _ = !0 } = n, E = (0, u.getHistory)(); _ && l.default.setHistorySnapshot({ ...E }); let I = c.default.getGuild(e), T = { state: { analyticsSource: t } }; null != I && null != I.joinedAt ? (0, d.transitionToGuild)(e, T) : (await o.default.joinGuild(e, { lurker: !0, source: s, loadId: a, lurkLocation: null == t ? void 0 : t.page }), await o.default.transitionToGuildSync(e, { ...T, welcomeModalChannelId: i, search: E.location.search }, i)), null == r || r() } async function S(e) { let t, { loadId: n, guildId: r, index: s, analyticsContext: a, categoryId: o } = e; "string" == typeof a && a in i && (t = a); let l = { page: I.AnalyticsPages.GUILD_DISCOVERY, object: I.AnalyticsObjects.CARD, section: t }; await f(r, l, { loadId: n }), function(e) { let { loadId: t, guildId: n, index: i, analyticsContext: r, categoryId: s } = e, a = { page: I.AnalyticsPages.GUILD_DISCOVERY, section: r }; "string" != typeof r && null != r.location && (a = r.location), E.default.track(I.AnalyticEvents.GUILD_DISCOVERY_GUILD_SELECTED, { location: a, guild_id: n, load_id: t, card_index: i, location_object: I.AnalyticsObjects.CARD, category_id: s }) }({ loadId: n, guildId: r, index: s, analyticsContext: a, categoryId: o }) } function h(e) { return { id: e.id, name: e.name, description: e.description, splash: e.splash, banner: e.banner, icon: e.icon, features: new Set(e.features), presenceCount: e.approximate_presence_count, memberCount: e.approximate_member_count, premiumSubscriptionCount: e.premium_subscription_count, preferredLocale: e.preferred_locale, discoverySplash: e.discovery_splash, emojis: e.emojis, emojiCount: e.emoji_count, stickers: e.stickers, stickerCount: e.sticker_count, keywords: e.keywords } } function A(e) { let { loadId: t, gamesYouPlayGuilds: n, allGuilds: i, categoryId: r, recommendationsSource: s = null } = e, a = n.length, o = i.length; E.default.track(I.AnalyticEvents.GUILD_DISCOVERY_VIEWED, { load_id: t, num_guilds: a + o, num_guilds_recommended: a, num_guilds_popular: o, recommended_guild_ids: n.map(e => e.id), category_id: r, recommendations_source: s }) } function m(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null; E.default.track(I.AnalyticEvents.GUILD_DISCOVERY_EXITED, { load_id: e, guild_ids_viewed: t, recommendations_source: n }) } function N(e) { E.default.track(I.AnalyticEvents.SEARCH_CLOSED, { load_id: e }) } function p(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; E.default.track(I.AnalyticEvents.SEARCH_STARTED, { search_type: I.SearchTypes.GUILD_DISCOVERY, load_id: e, location: n.location, category_id: t }) } function O(e, t, n, i) { E.default.track(I.AnalyticEvents.SEARCH_STARTED, { search_type: I.SearchTypes.GUILD_DISCOVERY_TAG, load_id: e, location: { page: I.AnalyticsPages.GUILD_DISCOVERY, section: n }, category_id: t, guild_id: i }) } function C(e) { let { loadId: t, searchId: n, query: i, guildResults: r, analyticsContext: s, categoryId: a, isTagSearch: o } = e; E.default.track(I.AnalyticEvents.SEARCH_RESULT_VIEWED, { search_type: o ? I.SearchTypes.GUILD_DISCOVERY_TAG : I.SearchTypes.GUILD_DISCOVERY, load_id: t, search_id: n, total_results: void 0 !== r ? r.length : null, guild_ids: void 0 !== r ? r.map(e => e.id) : null, query: i, location: s.location, category_id: a }) } function R(e) { let t = l.default.getLoadId(e); E.default.track(I.AnalyticEvents.GUILD_DISCOVERY_GUILD_JOIN_CLICKED, { guild_id: e, load_id: t, guild_size: _.default.getMemberCount(e) }) } async function g(e) { try { var t, n; let i = await a.HTTP.get({ url: I.Endpoints.GUILD_DISCOVERY, query: s.stringify({ guild_ids: e }), oldFormErrors: !0 }), r = null === (n = i.body) || void 0 === n ? void 0 : null === (t = n.guilds) || void 0 === t ? void 0 : t[0]; if (null == r) return r; return h(r) } catch (e) { return null } } }, 411198: function(e, t, n) { "use strict"; n.r(t), n.d(t, { attachRoles: function() { return d }, filterRoleDeletes: function() { return f }, fromBackgroundSync: function() { return _ }, fromInviteGuild: function() { return E }, fromSerializedGuildRecord: function() { return T }, fromServer: function() { return u }, fromServerUpdate: function() { return c }, toServer: function() { return I } }), n("47120"); var i = n("512722"), r = n.n(i), s = n("283693"), a = n("601964"), o = n("625137"), l = n("981631"); function u(e, t) { var n, i, o, u, d, _, c, E, I, T, f, S, h; let A = null != e.joined_at ? new Date(e.joined_at) : null == t ? void 0 : t.joinedAt, m = null !== (n = e.premium_subscription_count) && void 0 !== n ? n : 0; if (null == e.properties) { r()(null != t, "If guild.properties is null, existingGuild must be passed in"); let e = t.joinedAt instanceof Date ? t.joinedAt.getTime() : t.joinedAt, n = A instanceof Date ? A.getTime() : A; return m === t.premiumSubscriberCount && e === n ? t : t.merge({ joinedAt: A, premiumSubscriberCount: m }) } let N = { id: e.id, joinedAt: A, premiumSubscriberCount: m, name: null !== (i = e.properties.name) && void 0 !== i ? i : "", description: e.properties.description, icon: e.properties.icon, splash: e.properties.splash, banner: e.properties.banner, homeHeader: e.properties.home_header, features: new Set(null !== (o = e.properties.features) && void 0 !== o ? o : []), preferredLocale: null !== (u = e.properties.preferred_locale) && void 0 !== u ? u : "en-us", ownerId: e.properties.owner_id, application_id: e.properties.application_id, afkChannelId: e.properties.afk_channel_id, afkTimeout: e.properties.afk_timeout, systemChannelId: e.properties.system_channel_id, verificationLevel: null !== (d = e.properties.verification_level) && void 0 !== d ? d : l.VerificationLevels.NONE, explicitContentFilter: null !== (_ = e.properties.explicit_content_filter) && void 0 !== _ ? _ : l.GuildExplicitContentFilterTypes.DISABLED, defaultMessageNotifications: null !== (c = e.properties.default_message_notifications) && void 0 !== c ? c : l.UserNotificationSettings.ALL_MESSAGES, mfaLevel: null !== (E = e.properties.mfa_level) && void 0 !== E ? E : l.MFALevels.NONE, vanityURLCode: e.properties.vanity_url_code, premiumTier: null !== (I = e.properties.premium_tier) && void 0 !== I ? I : l.BoostedGuildTiers.NONE, premiumProgressBarEnabled: e.properties.premium_progress_bar_enabled || !1, systemChannelFlags: e.properties.system_channel_flags, discoverySplash: e.properties.discovery_splash, rulesChannelId: e.properties.rules_channel_id, safetyAlertsChannelId: e.properties.safety_alerts_channel_id, publicUpdatesChannelId: e.properties.public_updates_channel_id, maxStageVideoChannelUsers: null !== (T = e.properties.max_stage_video_channel_users) && void 0 !== T ? T : -1, maxVideoChannelUsers: null !== (f = e.properties.max_video_channel_users) && void 0 !== f ? f : -1, maxMembers: null !== (S = e.properties.max_members) && void 0 !== S ? S : -1, nsfwLevel: null !== (h = e.properties.nsfw_level) && void 0 !== h ? h : l.GuildNSFWContentLevel.DEFAULT, hubType: e.properties.hub_type, latestOnboardingQuestionId: e.properties.latest_onboarding_question_id, clan: e.properties.clan }; return null == t ? (0, s.dangerouslyCast)(N, a.default) : t.merge(N) } function d(e, t) { return new a.GuildRecordWithRoles({ ...e, roles: t }) } function _(e, t) { var n, i, r, s, a, o, u, d, _, c, E, T, f; let S = null !== (n = e.properties) && void 0 !== n ? n : I(t), h = { id: e.id, name: null !== (i = S.name) && void 0 !== i ? i : "", description: S.description, icon: S.icon, splash: S.splash, banner: S.banner, homeHeader: S.home_header, features: new Set(null !== (r = S.features) && void 0 !== r ? r : []), preferredLocale: null !== (s = S.preferred_locale) && void 0 !== s ? s : "en-us", ownerId: S.owner_id, application_id: S.application_id, afkChannelId: S.afk_channel_id, afkTimeout: S.afk_timeout, systemChannelId: S.system_channel_id, verificationLevel: null !== (a = S.verification_level) && void 0 !== a ? a : l.VerificationLevels.NONE, explicitContentFilter: null !== (o = S.explicit_content_filter) && void 0 !== o ? o : l.GuildExplicitContentFilterTypes.DISABLED, defaultMessageNotifications: null !== (u = S.default_message_notifications) && void 0 !== u ? u : l.UserNotificationSettings.ALL_MESSAGES, mfaLevel: null !== (d = S.mfa_level) && void 0 !== d ? d : l.MFALevels.NONE, vanityURLCode: S.vanity_url_code, premiumTier: null !== (_ = S.premium_tier) && void 0 !== _ ? _ : l.BoostedGuildTiers.NONE, premiumProgressBarEnabled: S.premium_progress_bar_enabled || !1, systemChannelFlags: S.system_channel_flags, discoverySplash: S.discovery_splash, rulesChannelId: S.rules_channel_id, safetyAlertsChannelId: S.safety_alerts_channel_id, publicUpdatesChannelId: S.public_updates_channel_id, maxStageVideoChannelUsers: null !== (c = S.max_stage_video_channel_users) && void 0 !== c ? c : -1, maxVideoChannelUsers: null !== (E = S.max_video_channel_users) && void 0 !== E ? E : -1, maxMembers: null !== (T = S.max_members) && void 0 !== T ? T : -1, nsfwLevel: null !== (f = S.nsfw_level) && void 0 !== f ? f : l.GuildNSFWContentLevel.DEFAULT, hubType: S.hub_type, latestOnboardingQuestionId: S.latest_onboarding_question_id, clan: S.clan }; return t.merge(h) } function c(e, t) { let n = { id: e.id, name: e.name, description: e.description, icon: e.icon, splash: e.splash, banner: e.banner, homeHeader: e.home_header, features: e.features, preferredLocale: e.preferred_locale, ownerId: e.owner_id, application_id: e.application_id, roles: (0, o.sortServerRoles)(e.id, e.roles), afkChannelId: e.afk_channel_id, afkTimeout: e.afk_timeout, systemChannelId: e.system_channel_id, joinedAt: null != e.joined_at ? new Date(e.joined_at) : null == t ? void 0 : t.joinedAt, verificationLevel: e.verification_level, explicitContentFilter: e.explicit_content_filter, defaultMessageNotifications: e.default_message_notifications, mfaLevel: e.mfa_level, vanityURLCode: e.vanity_url_code, premiumTier: e.premium_tier, premiumSubscriberCount: e.premium_subscription_count, premiumProgressBarEnabled: e.premium_progress_bar_enabled, systemChannelFlags: e.system_channel_flags, discoverySplash: e.discovery_splash, rulesChannelId: e.rules_channel_id, safetyAlertsChannelId: e.safety_alerts_channel_id, publicUpdatesChannelId: e.public_updates_channel_id, maxStageVideoChannelUsers: e.max_stage_video_channel_users, maxVideoChannelUsers: e.max_video_channel_users, maxMembers: e.max_members, nsfwLevel: e.nsfw_level, hubType: e.hub_type, latestOnboardingQuestionId: e.latest_onboarding_question_id, clan: e.clan }; return null == t ? new a.default(n) : t.merge(n) } function E(e) { let t = { id: e.id, name: e.name, description: e.description, icon: e.icon, splash: e.splash, banner: e.banner, features: e.features, verificationLevel: e.verification_level, vanityURLCode: e.vanity_url_code, premiumSubscriberCount: e.premium_subscription_count, nsfwLevel: e.nsfw_level, memberCount: e.approximate_member_count }; return new a.default(t) } function I(e) { return { id: e.id, name: e.name, description: e.description, icon: e.icon, splash: e.splash, banner: e.banner, home_header: e.homeHeader, features: Array.from(e.features), preferred_locale: e.preferredLocale, owner_id: e.ownerId, application_id: e.application_id, afk_channel_id: e.afkChannelId, afk_timeout: e.afkTimeout, system_channel_id: e.systemChannelId, verification_level: e.verificationLevel, explicit_content_filter: e.explicitContentFilter, default_message_notifications: e.defaultMessageNotifications, mfa_level: e.mfaLevel, vanity_url_code: e.vanityURLCode, premium_tier: e.premiumTier, premium_progress_bar_enabled: e.premiumProgressBarEnabled, system_channel_flags: e.systemChannelFlags, discovery_splash: e.discoverySplash, rules_channel_id: e.rulesChannelId, safety_alerts_channel_id: e.safetyAlertsChannelId, public_updates_channel_id: e.publicUpdatesChannelId, max_stage_video_channel_users: e.maxStageVideoChannelUsers, max_video_channel_users: e.maxVideoChannelUsers, unavailable: !1, max_members: e.maxMembers, nsfw_level: e.nsfwLevel, hub_type: e.hubType, latest_onboarding_question_id: e.latestOnboardingQuestionId, clan: e.clan } } function T(e) { var t; for (let n in null != e.joinedAt && (e.joinedAt = new Date(e.joinedAt)), e.features = new Set(null !== (t = e.features) && void 0 !== t ? t : []), e.roles)(0, o.fromSerializedGuildRole)(e.roles[n]); return (0, s.dangerouslyCast)(e, a.default) } function f(e, t, n, i) { let r = !1; if (null != i) for (let e of i) delete t[e], r = !0; if (null != n && n.length > 0) { for (let e of n) t[e.id] = (0, o.fromServerRole)(e); r = !0 } return r ? (0, o.sortClientRoles)(e, Object.values(t)) : t } }, 625137: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fromSerializedGuildRole: function() { return a }, fromServerRole: function() { return o }, sortClientRoles: function() { return l }, sortServerRoles: function() { return u } }), n("789020"); var i = n("149765"), r = n("866442"), s = n("709054"); function a(e) { e.permissions = i.deserialize(e.permissions) } function o(e) { var t; return { id: e.id, name: e.name, permissions: i.deserialize(e.permissions), mentionable: e.mentionable, position: e.position, originalPosition: e.position, color: e.color, colorString: null != e.color && 0 !== e.color ? (0, r.int2hex)(e.color) : null, hoist: e.hoist, managed: e.managed, tags: e.tags, icon: e.icon, unicodeEmoji: e.unicode_emoji, flags: null !== (t = e.flags) && void 0 !== t ? t : 0 } } function l(e, t) { if (null == t) return {}; let n = t.length - 1, i = {}; return t.sort((t, n) => { var i, r; let a = e === t.id ? 1 / 0 : -(null !== (i = t.originalPosition) && void 0 !== i ? i : t.position), o = e === n.id ? 1 / 0 : -(null !== (r = n.originalPosition) && void 0 !== r ? r : n.position); return a === o ? s.default.compare(t.id, n.id) : a < o ? -1 : a === o ? 0 : 1 }).forEach((e, t) => { e.position = n - t, i[e.id] = e }), i } function u(e, t) { return null == t ? {} : l(e, t.map(o)) } }, 892880: function(e, t, n) { "use strict"; let i; n.r(t), n("653041"); var r = n("392711"), s = n.n(r), a = n("31775"), o = n.n(a), l = n("749210"), u = n("430824"), d = n("594174"), _ = n("70956"), c = n("51144"), E = n("689938"); let I = new(o())({ maxAge: 1 * _.default.Millis.MINUTE }); function T(e, t, n) { null != i && clearTimeout(i), i = setTimeout(() => { let i = [], r = e => { i.push(e.id) }; if (null == e) s().forEach(u.default.getGuilds(), r); else if (Array.isArray(e)) e.forEach(e => { let t = u.default.getGuild(e); null != t && r(t) }); else { let t = u.default.getGuild(e); null != t && r(t) } i.length > 0 && l.default.requestMembers(i, t.toLocaleLowerCase(), n) }, 200) } function f(e, t) { let n = "".concat(null != e ? e : "", ":").concat(t), i = I.get(n); if (null != i) return i; I.set(n, !0) } t.default = { getGuildNameSuggestion: function(e) { let t = d.default.getCurrentUser(), n = c.getName(t); return null == n || 0 === n.length ? "" : E.default.Messages.CREATE_SERVER_DEFAULT_SERVER_NAME_FORMAT.format({ username: (null == e ? void 0 : e.truncateUsername) ? n.slice(0, 20) : n }) }, requestMembers(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 10, i = Array.isArray(e), r = [], s = !1; i ? e.forEach(e => { null == f(e, t) && r.push(e) }) : null == f(e, t) && (s = !0), r.length > 0 && i ? T(r, t, n) : s && T(e, t, n) } } }, 63063: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SUPPORT_LOCATION: function() { return o } }); var i = n("299379"), r = n("706454"), s = n("358085"), a = n("981631"); let o = "https://".concat(a.SUPPORT_DOMAIN), l = "https://".concat(a.SUPPORT_DEV_DOMAIN); function u(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : o; return t + e } function d() { return r.default.locale.toLowerCase() } t.default = { getArticleURL: e => u("/hc/".concat(d(), "/articles/").concat(e)), getDevArticleURL: e => u("/hc/".concat(d(), "/articles/").concat(e), l), getCreatorSupportArticleURL: e => u("/hc/".concat(d(), "/articles/").concat(e), "https://creator-support.discord.com"), getTwitterURL: () => (0, i.default)(a.LocalizedLinks.TWITTER), getCommunityURL: () => u("/hc/".concat(d())), getSubmitRequestURL(e) { let t = u("/hc/".concat(d(), "/requests/new?platform=").concat(encodeURIComponent((0, s.getPlatformName)()))); return null != e && (t += "&device_info=".concat(encodeURIComponent(e))), t }, getSearchURL(e) { let t = encodeURIComponent(e); return u("/hc/".concat(d(), "/search?utf8=%E2%9C%93&query=").concat(t, "&commit=Search")) }, getFeaturedArticlesJsonURL: () => u("/api/v2/help_center/en-us/articles.json?label_names=featured") } }, 462176: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"), n("653041"); let i = { 1: "bold", 4: "underline" }, r = { 30: "black", 31: "red", 32: "green", 33: "yellow", 34: "blue", 35: "magenta", 36: "cyan", 37: "white" }, s = { 40: "black", 41: "red", 42: "green", 43: "yellow", 44: "blue", 45: "magenta", 46: "cyan", 47: "white" }, a = /\x1B\[(\d+(?:[:;]\d+)*)m/, o = new RegExp("(?=".concat(a.source, ")")); function l() { let e = [...u("foreground", r, ["38", "39"], !0), ...u("background", s, ["48", "49"], !0), ...u("style", i, [], !1), { className: "ansi-control-sequence", begin: a, starts: { end: o, endsParent: !0 } }]; return function(e) { for (let t = 0; t < e.length; t++) e[t].contains = e.slice(t + 1) }(e), { contains: [{ begin: o, contains: e }] } } function u(e, t, n, i) { let r = ["0", ...n]; return i && r.push(...Object.keys(t)), Object.entries(t).map(t => { var n, i, s, a; let [l, u] = t; return n = e, i = u, s = l, a = r, { className: "ansi-".concat(n, "-").concat(i), endsParent: !0, begin: o, "on:begin": (e, t) => { let n = e[1].split(";"); for (let e of (void 0 === t.data.isOn && (t.data.isOn = !1), n)) e === s ? t.data.isOn = !0 : a.includes(e) && (t.data.isOn = !1); !t.data.isOn && t.ignoreMatch() } } }) } }, 956664: function(e, t, n) { "use strict"; n.r(t), n.d(t, { dataUriFileSize: function() { return A }, dataUrlToBlob: function() { return N }, dataUrlToFile: function() { return m }, fit: function() { return u }, getCoverRatio: function() { return c }, getPalette: function() { return T }, getPaletteForAvatar: function() { return f }, getRatio: function() { return _ }, isPNGAnimated: function() { return p }, makeCssUrlString: function() { return E }, readFileAsBase64: function() { return h }, zoomFit: function() { return d } }), n("653041"), n("642549"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"), n("411104"); var i = n("512722"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("950200"), l = n.n(o); function u(e) { let { width: t, height: n, maxWidth: i, maxHeight: r, minWidth: s = 0, minHeight: a = 0 } = e; if (t !== i || n !== r) { let e = t > i ? i / t : 1; t = Math.max(Math.round(t * e), s); let o = (n = Math.max(Math.round(n * e), a)) > r ? r / n : 1; t = Math.max(Math.round(t * o), s), n = Math.max(Math.round(n * o), a) } return { width: t, height: n } } function d(e, t) { let n = Math.min(Math.round(.65 * window.innerHeight), 2e3); return u({ width: e, height: t, maxWidth: Math.min(Math.round(.75 * window.innerWidth), 2e3), maxHeight: n }) } function _(e) { let { width: t, height: n, maxWidth: i, maxHeight: r } = e, s = 1; t > i && (s = i / t), t = Math.round(t * s); let a = 1; return (n = Math.round(n * s)) > r && (a = r / n), Math.min(s * a, 1) } function c(e) { let { width: t, height: n, maxWidth: i, maxHeight: r } = e; return t === n ? 1 : Math.min(Math.max(i / t, r / n), 1) } function E(e) { return null == e || "" === e ? "none" : "url(".concat(e, ")") } let I = [ [0, 0, 0] ]; function T(e, t, n) { let i = document.createElement("canvas"), r = i.getContext("2d"); if (null == r) return I; let s = i.width = 0 === e.width ? 128 : e.width, a = i.height = 0 === e.height ? 128 : e.height; r.drawImage(e, 0, 0, s, a); let o = function(e, t, n) { let i = []; for (let r = 0, s, a, o, l, u; r < t; r += n) a = e[(s = 4 * r) + 0], o = e[s + 1], l = e[s + 2], (void 0 === (u = e[s + 3]) || u >= 125) && !(a > 250 && o > 250 && l > 250) && i.push([a, o, l]); return i }(r.getImageData(0, 0, s, a).data, s * a, n), u = l()(o, t); return "boolean" == typeof u ? I : u.palette() } let f = e => "number" == typeof e ? null : S(e), S = a().memoize(e => new Promise((t, n) => { let i = new Image; i.crossOrigin = "Anonymous", i.onerror = e => { n(e), i.onerror = i.onload = null, i = null }, i.onload = () => { t(T(i, 5, 10)), i.onerror = i.onload = null, i = null }, i.src = e })); function h(e) { return new Promise((t, n) => { let i = new FileReader; i.readAsDataURL(e), i.onload = () => { r()("string" == typeof i.result, "Result must be a string"), t(i.result) }, i.onerror = e => n(e) }) } function A(e) { let t = e.split(";base64,"); return r()(2 === t.length, "Input data is not a valid image."), atob(t[1]).length } async function m(e, t, n) { let i = N(e), r = await i.arrayBuffer(); return new File([r], t, { type: n }) } function N(e) { let t; t = e.split(",")[0].indexOf("base64") >= 0 ? atob(e.split(",")[1]) : btoa(e.split(",")[1]); let n = e.split(",")[0].split(":")[1].split(";")[0], i = new Uint8Array(t.length); for (var r = 0; r < t.length; r++) i[r] = t.charCodeAt(r); return new Blob([i], { type: n }) } async function p(e) { var t; if ("image/png" !== (null === (t = e.type) || void 0 === t ? void 0 : t.split(";")[0])) throw Error("File is not a PNG"); let n = await e.text(), i = n.indexOf("IDAT"); return !!(i > 0) && -1 !== n.substring(0, i).indexOf("acTL") || !1 } }, 266338: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getIntersectionObserver: function() { return a }, unwatch: function() { return l }, watch: function() { return o } }), n("47120"); let i = new WeakMap, r = new WeakMap; function s(e, t) { e.forEach(e => { var n; let i = null === (n = r.get(t)) || void 0 === n ? void 0 : n.get(e.target); null != i && i.call(null, e) }) } function a(e) { let t = i.get(e); return null == t && (t = new IntersectionObserver(s, e), i.set(e, t), r.set(t, new WeakMap)), t } function o(e, t, n) { var i; let s = null !== (i = r.get(e)) && void 0 !== i ? i : new WeakMap; !s.has(t) && e.observe(t), s.set(t, n), r.set(e, s) } function l(e, t) { var n; let i = null !== (n = r.get(e)) && void 0 !== n ? n : new WeakMap; i.has(t) && (i.delete(t), e.unobserve(t), r.set(e, i)) } }, 831160: function(e, t, n) { "use strict"; n.r(t), n.d(t, { resolveThunk: function() { return s } }); var i = n("392711"), r = n.n(i); let s = e => "function" == typeof e ? e() : e; r().curry((e, t, n) => s(t) ? e(n) : n({})) }, 434529: function(e, t, n) { "use strict"; function i(e) { return Math.max(Math.min(e, 1), 0) } function r(e, t) { let { top: n, bottom: r, left: s, right: a } = e; return { top: null != n ? Math.floor(i(n) * t.height) : null, left: null != s ? Math.floor(i(s) * t.width) : null, bottom: null != r ? Math.floor(i(r) * t.height) : null, right: null != a ? Math.floor(i(a) * t.width) : null } } function s(e, t) { let { width: n, height: r } = e; return { width: "auto" === n ? n : Math.floor(i(n) * t.width), height: "auto" === r ? r : Math.floor(i(r) * t.height) } } function a(e, t) { let { top: n, bottom: r, left: s, right: a } = e; return { top: null != n ? i(n / t.height) : null, left: null != s ? i(s / t.width) : null, bottom: null != r ? i(r / t.height) : null, right: null != a ? i(a / t.width) : null } } function o(e, t) { let { width: n, height: i } = e; return { width: "auto" === n ? n : n / t.width, height: "auto" === i ? i : i / t.height } } function l(e, t, n, i, r) { let { top: s, bottom: a, left: o, right: l } = e; if (null == s && null == a ? (s = 0, a = n - r) : null == s && null != a ? s = n - (a + r) : null != s && (a = n - (s + r)), null == o && null == l ? (o = 0, l = t - i) : null == o && null != l ? o = t - (l + i) : null == l && null != o && (l = t - (o + i)), null == s || null == a || null == o || null == l) throw Error("Logically this can never happen based on our if/else statements"); return { top: s, left: o, bottom: a, right: l } } function u(e) { let { top: t, left: n, bottom: i, right: r } = e; return 0 === t || t <= i ? i = null : t = null, 0 === n || n <= r ? r = null : n = null, { top: t, left: n, bottom: i, right: r } } function d(e) { let { top: t, left: n, bottom: i, right: r } = e; return i < 0 && (t += i, i = 0), t < 0 && (i += t, t = 0), r < 0 && (n += r, r = 0), n < 0 && (r += n, n = 0), { top: t, left: n, bottom: i, right: r } } function _(e, t, n) { e = r(e, n); let { width: i, height: a } = s(t, n); return i = "string" == typeof i ? 0 : i, a = "string" == typeof a ? 0 : a, l(e, n.width, n.height, i, a) } function c(e, t, n) { let { top: i, left: r } = e, { x: s, y: _ } = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : { x: 0, y: 0 }, { width: c, height: E } = t; return [a(u(d(l({ top: i + _, left: r + s, bottom: null, right: null }, n.width, n.height, "number" == typeof c ? c : 0, "number" == typeof E ? E : 0))), n), o(t, n)] } function E(e, t, n) { let { top: i, right: r } = e, { x: s, y: _ } = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : { x: 0, y: 0 }, { width: c, height: E } = t; return [a(u(d(l({ top: i + _, left: null, bottom: null, right: r - s }, n.width, n.height, "number" == typeof c ? c : 0, "number" == typeof E ? E : 0))), n), o(t, n)] } n.r(t), n.d(t, { fitFullCoordsToContainer: function() { return d }, getAnchorCoordsFromFullCoords: function() { return u }, getAnchorCoordsFromLayoutSize: function() { return r }, getAnchorPercentageFromLayoutSize: function() { return a }, getFullCoordsFromAnchorCoords: function() { return l }, getFullCoordsFromLayoutSize: function() { return _ }, getLeftWidgetSpecs: function() { return c }, getRightWidgetSpecs: function() { return E }, getSizeFromLayoutSize: function() { return s }, getSizePercentageFromSize: function() { return o } }), n("411104") }, 780570: function(e, t, n) { "use strict"; n.r(t), n.d(t, { calculateProgressPercentage: function() { return d }, convertComboId: function() { return l }, convertToTransitionState: function() { return c }, getCombinedProgress: function() { return E }, getComboId: function() { return o }, isUserEntitledToLibraryApplication: function() { return I }, shouldShareApplicationActivity: function() { return u }, shouldShowGameInLibrary: function() { return _ } }), n("47120"), n("724458"); var i = n("695346"), r = n("594174"), s = n("55563"), a = n("981631"); function o(e, t) { return "".concat(e, ":").concat(t) } function l(e) { let [t, n] = e.split(":"); return { applicationId: t, branchId: n } } function u(e, t) { if (!i.ShowCurrentGame.getSetting() || i.StatusSetting.getSetting() === a.StatusTypes.INVISIBLE) return !1; let n = t.getActiveLibraryApplication(e); return null == n || !n.hasFlag(a.LibraryApplicationFlags.PRIVATE) } function d(e, t) { return 0 === t ? 100 : e / t * 100 } function _(e, t, n) { return !(null == t || n.enabled && t.hasFlag(a.LibraryApplicationFlags.PRIVATE)) && !t.isHidden() } function c(e) { return null == e ? null : e.type === a.LocalDispatchApplicationStates.INSTALLING || e.type === a.LocalDispatchApplicationStates.UPDATING || e.type === a.LocalDispatchApplicationStates.UNINSTALLING ? e : null } function E(e) { return e.reduce((e, t) => { let n = c(t); return null == n || t.type === a.LocalDispatchApplicationStates.UP_TO_DATE ? e : { total: e.total + Number(n.total), progress: e.progress + Number(n.progress) } }, { total: 0, progress: 0 }) } function I(e) { return !!e.isDiscordApplication() && e.isEntitled(r.default.getCurrentUser(), s.default) } }, 546796: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { default: function() { return d } }), n("411104"); var s = n("594174"), a = n("831160"); let o = () => { throw Error("updateModal has not been implemented.") }; { let e = n("169480"); i = e.showModal, o = e.updateModalProps, r = n("952265").closeModal } function l(e) { let { promiseFn: t, resolve: n, reject: s, modalProps: a = {}, hooks: { onEarlyClose: l } = {} } = e; if (null == i) { null == l || l(); return } let d = i(I, _, a); function _() { null == l || l() } function c(e) { r(d), n(e) } function E(e) { r(d), s(e) } function I(e) { return o(d, I, _, { ...a, isLoading: !0 }), u({ promiseFn: t, resolve: c, reject: E, code: e, mfaCodeHandler: T, isModalOpen: !0 }) } function T(e) { let { res: t } = e; o(d, I, _, { ...a, error: t.body.message }) } } function u(e) { let { promiseFn: t, resolve: n, reject: i, code: r, mfaCodeHandler: s = l, isModalOpen: a = !1, ...o } = e; return t(null != r ? { code: r } : {}).then(n, e => { var r, l; if (r = e, l = a, r.body && 60008 === r.body.code || l && 429 === r.status) return s({ promiseFn: t, resolve: n, reject: i, res: e, ...o }); i(e) }) } function d(e, t) { var n, i; let { checkEnabled: r = null !== (i = null === (n = s.default.getCurrentUser()) || void 0 === n ? void 0 : n.mfaEnabled) && void 0 !== i && i, ...o } = null != t ? t : {}; return new Promise((t, n) => { ((0, a.resolveThunk)(r) ? l : u)({ promiseFn: e, resolve: t, reject: n, ...o }) }) } }, 49012: function(e, t, n) { "use strict"; n.r(t), n.d(t, { handleClick: function() { return D }, isLinkTrusted: function() { return v } }); var i = n("302454"), r = n.n(i), s = n("668781"), a = n("45986"), o = n("782568"), l = n("704133"), u = n("139674"), d = n("702321"), _ = n("900460"), c = n("627714"), E = n("364640"), I = n("772096"), T = n("982806"), f = n("540709"), S = n("881706"), h = n("592125"), A = n("430824"), m = n("20303"), N = n("902676"), p = n("375954"), O = n("699516"), C = n("944486"), R = n("626135"), g = n("981631"), L = n("689938"); function v(e, t) { var n; let i = h.default.getChannel(C.default.getChannelId()); return !!(null == i || i.type !== g.ChannelTypes.DM || O.default.isFriend(null !== (n = i.getRecipientId()) && void 0 !== n ? n : "")) && e === t } function D(e, t) { let i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [], { trusted: O, onClick: C, onConfirm: v, shouldConfirm: D, messageId: M, channelId: y } = e, P = r().sanitizeUrl(e.href); if (null == P) { null != t && t.preventDefault(), s.default.show({ title: L.default.Messages.HOLD_UP, body: L.default.Messages.MALFORMED_LINK_BODY.format({ url: e.href }), isDismissable: !0 }); return } let U = null, b = !1, G = M, w = y, k = null; if (null != M && null != y) { var B, V, x; let e = p.default.getMessage(y, M), t = h.default.getBasicChannel(y); U = null !== (x = null == t ? void 0 : t.guild_id) && void 0 !== x ? x : null; let n = A.default.getGuild(U), i = (null == e ? void 0 : null === (B = e.messageReference) || void 0 === B ? void 0 : B.guild_id) != null && (null == e ? void 0 : e.webhookId) != null && (null == e ? void 0 : e.hasFlag(g.MessageFlags.IS_CROSSPOST)) && null != U; i && (null == e ? void 0 : null === (V = e.messageReference) || void 0 === V ? void 0 : V.guild_id) != null ? (G = e.messageReference.message_id, w = e.messageReference.channel_id, k = e.messageReference.guild_id) : k = U; let r = (null == t ? void 0 : t.type) === g.ChannelTypes.GUILD_ANNOUNCEMENT && (null == n ? void 0 : n.hasFeature(g.GuildFeatures.COMMUNITY)) === !0, s = (null == e ? void 0 : e.hasFlag(g.MessageFlags.EPHEMERAL)) === !0; b = null != e && !s && (i || r) } if (null != y) { let e = h.default.getChannel(y), t = A.default.getGuild(null == e ? void 0 : e.getGuildId()); null != e && null != t && t.hasFeature(g.GuildFeatures.DISCOVERABLE) && R.default.track(g.AnalyticEvents.URL_CLICKED, { url_domain: (0, N.getHostname)(P), guild_id: t.id, channel_id: e.id }), (0, d.default)(y) && R.default.track(g.AnalyticEvents.CHANGE_LOG_CTA_CLICKED, { cta_type: "inline_link", target: P }) } if (E.default.trackLinkClicked(P), null != C) { if (C(t)) return } else { let { default: e } = n("315263"), r = e(P, { skipExtensionCheck: void 0, analyticsLocations: i }); if (null != r && r(t)) return } let F = () => { if (b && E.default.trackAnnouncementMessageLinkClicked({ messageId: G, channelId: y, guildId: U, sourceChannelId: w, sourceGuildId: k }), null != v) { v(); return }(0, o.default)(P) }; if (null !== u.default.isBlockedDomain(P)) { null == t || t.preventDefault(), l.default.show(P); return } if (null != (0, S.isSuspiciousDownload)(P)) { null == t || t.preventDefault(), f.default.show(P); return } if ((0, c.shouldShowLinkNotDiscordWarning)(P)) { null == t || t.preventDefault(), _.default.show(P); return } let H = "function" == typeof O ? O() : O, Y = (0, N.getProtocol)(P), j = !("http:" === Y || "https:" === Y); if (!j && (H || m.default.isTrustedDomain(P)) || j && m.default.isTrustedProtocol(P)) { null == t || null != D && D ? F() : b && E.default.trackAnnouncementMessageLinkClicked({ messageId: G, channelId: y, guildId: U, sourceChannelId: w, sourceGuildId: k }); return } if (null != t && t.preventDefault(), j) T.default.show({ url: P, trustUrl: a.trustProtocol, onConfirm: F, isProtocol: !0 }); else { let e = (0, I.punycodeLink)(P), t = null != e ? e.displayTarget : P; T.default.show({ url: t, trustUrl: a.trustDomain, onConfirm: F, isProtocol: !1 }) } } }, 589530: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMuted: function() { return o }, getVolume: function() { return s }, setMuted: function() { return l }, setVolume: function() { return a } }); var i = n("433517"); let r = "MediaPlayerVolume"; function s() { var e; let { volume: t } = null !== (e = i.Storage.get(r)) && void 0 !== e ? e : {}; return "number" != typeof t && (t = 1), t = Math.min(1, Math.max(0, t)) } function a(e) { i.Storage.set(r, { volume: e, muted: o() }) } function o() { var e; let { muted: t } = null !== (e = i.Storage.get(r)) && void 0 !== e ? e : {}; return "boolean" != typeof t && (t = !1), t } function l(e) { i.Storage.set(r, { volume: s(), muted: e }) } }, 753090: function(e, t, n) { "use strict"; n.r(t), n("47120"); t.default = { makeMemoizer: function(e) { let t = new Map; return n => { let i = t.get(n); return void 0 === i && (i = e(n), t.set(n, i)), i } } } }, 381129: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("512722"), r = n.n(i), s = n("957730"), a = n("439170"), o = n("496675"), l = n("981631"); let u = new RegExp(/@(:?everyone|here)/); function d(e, t) { let n = 0; if (t.isThread()) { var i; return null !== (i = t.memberCount) && void 0 !== i ? i : 0 } return a.default.getProps(t.getGuildId(), t.id).groups.forEach(t => { ("@everyone" === e || t.id !== l.StatusTypes.OFFLINE) && (n += t.count) }), n } t.default = { shouldShowEveryoneGuard: function(e, t) { let n = t.getGuildId(); return r()(n, "isGuildChannel with null guildId"), d(e, t) > 30 && o.default.can(l.Permissions.MENTION_EVERYONE, t) }, everyoneMemberCount: d, extractEveryoneRole: function(e, t) { for (let n of s.default.parsePreprocessor(t, e)) { let e = function e(t) { if ("string" == typeof t.content) { var n; if ("inlineCode" === t.type || "codeBlock" === t.type) return null; let e = null === (n = t.content) || void 0 === n ? void 0 : n.match(u); if (null != e) { let [t] = e; return t } } else if (Array.isArray(t.content)) for (let n of t.content) { let t = e(n); if (null != t) return t } return null }(n); if (null != e) return e } return null } } }, 830168: function(e, t, n) { "use strict"; let i, r; n.r(t), n("47120"), n("411104"); var s = n("570140"), a = n("330516"), o = n("710845"), l = n("594174"), u = n("436181"), d = n("626135"), _ = n("358085"), c = n("998502"), E = n("981631"), I = n("186901"); let T = new o.default("NativeDispatchUtils"); function f() { return null == r && T.warn("Tried getting Dispatch instance before instantiated"), r } function S(e) { let t = JSON.parse(e); return T.log("Native Dispatch error", t), new a.default(t) } function h(e, t) { "" !== e && S(e) } t.default = { init(e) { let { userToken: t, userId: n, installPaths: s, platform: a, stateCallback: o, errorCallback: u } = e; null == r && (null != i ? Promise.resolve(i) : (0, _.isDesktop)() ? Promise.all([c.default.ensureModule("discord_dispatch"), c.default.ensureModule("discord_modules")]).then(() => { c.default.requireModule("discord_modules"); let e = c.default.getDispatch(); return null != e ? (i = e, e) : Promise.reject(Error("dispatch not found")) }) : Promise.reject(Error("not desktop client"))).then(e => { var i; let _ = { environment: window.GLOBAL_ENV.RELEASE_CHANNEL, build_number: "298246" }, c = l.default.getCurrentUser(); null != c && (_.user_id = c.id, _.user_name = c.tag, null != c.email && (_.email = c.email)); let I = { user_token: t, user_id: n, install_paths: s.map(e => { let { path: t } = e; return t }), api_endpoint: "".concat((i = "https:", "https:")).concat(window.GLOBAL_ENV.API_ENDPOINT), environment: window.GLOBAL_ENV.PROJECT_ENV, sentry: _, platform: a }; r = new e.Dispatch(JSON.stringify(I), e => { let t = JSON.parse(e); o({ applications: t.applications, paused: t.paused, currentTask: null != t.current_task ? { applicationId: t.current_task.application_id, branchId: t.current_task.branch_id } : null, nextTask: null != t.next_task ? { applicationId: t.next_task.application_id, branchId: t.next_task.branch_id } : null }) }, e => { u(S(e)) }, e => { ! function(e) { let { properties: t } = e; switch (null != t.stage && null != t.stage.type && (t.stage = t.stage.type), e.event_name) { case E.AnalyticEvents.DISPATCH_PATCH_STARTED: case E.AnalyticEvents.DISPATCH_PATCH_PAUSED: case E.AnalyticEvents.DISPATCH_PATCH_FAILED: case E.AnalyticEvents.DISPATCH_PATCH_VERIFICATION_FAILED: case E.AnalyticEvents.DISPATCH_PATCH_COMPLETE: case E.AnalyticEvents.DISPATCH_PATCH_CANCELLED: case E.AnalyticEvents.DISPATCH_APPLICATION_UNINSTALLED: d.default.track(e.event_name, t) } }(JSON.parse(e)) }) }) }, destroy() { let e = f(); null != e && void 0 !== e.destroy && (e.destroy(), r = null) }, setTargetManifest(e) { let { applicationId: t, applicationName: n, applicationIcon: i, branchId: r, buildId: s, manifestIds: a, installationPath: o } = e, l = f(); null != l && l.command(JSON.stringify({ command: "SetTargetManifest", application_id: t, application_name: n, application_icon: i, branch_id: r, build_id: s, manifest_ids: a, install_path: o }), h) }, setCurrentTask(e, t, n, i, r) { let s = f(); return null != s && (s.command(JSON.stringify({ command: "SetCurrentTask", application_id: e, branch_id: t, action: n, user_id: i, user_token: r }), h), !0) }, setCredentials(e, t) { let n = f(); null != n && n.command(JSON.stringify({ command: "SetCredentials", user_id: e, user_token: t }), h) }, cancel(e, t) { let n = f(); null != n && n.command(JSON.stringify({ command: "Cancel", application_id: e, branch_id: t }), h) }, uninstall(e, t) { let n = f(); null != n && n.command(JSON.stringify({ command: "Uninstall", application_id: e, branch_id: t }), h) }, pause() { let e = f(); null != e && e.command(JSON.stringify({ command: "Pause" }), h) }, resume() { let e = f(); null != e && e.command(JSON.stringify({ command: "Resume" }), h) }, queryDirectory(e, t) { let n = f(); null != n && n.command(JSON.stringify({ command: "QueryDirectory", path: e }), (e, n) => { if ("" !== e) t(JSON.parse(e)); else if (null != n) { let e = JSON.parse(n); t(null, { hasPermission: e.has_permission, availableKB: parseInt(e.available_kb), totalKB: parseInt(e.total_kb) }) } }) }, runLaunchSetup: (e, t) => u.default.isRunning() ? Promise.reject(Error("Already running launch setup.")) : (s.default.dispatch({ type: "DISPATCH_APPLICATION_LAUNCH_SETUP_START" }), new Promise((n, i) => { let r = f(); if (null == r) { i(Error("native dispatch instance not found")); return } r.command(JSON.stringify({ command: "RunLaunchSetup", application_id: e, branch_id: t }), (e, t, r) => { if ("" !== e) { s.default.dispatch({ type: "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" }); let t = S(e); s.default.dispatch({ type: "DISPATCH_APPLICATION_ERROR", error: t }), null != t.code && t.code === I.DispatchErrorCodes.POST_INSTALL_CANCELLED ? i(t) : n(); return } if ("" !== t) { s.default.dispatch({ type: "DISPATCH_APPLICATION_LAUNCH_SETUP_COMPLETE" }), n(); return } if ("" !== r) { let e = JSON.parse(r); s.default.dispatch({ type: "DISPATCH_APPLICATION_INSTALL_SCRIPTS_PROGRESS_UPDATE", progress: e.progress, total: e.total, name: e.name }) } }) })), launch: (e, t, n, i) => new Promise((r, s) => { let a = f(); if (null == a) { s(Error("native dispatch instance not found")); return } a.command(JSON.stringify({ command: "Launch", application_id: e, branch_id: t, option_name: n, environment: i }), function(e, t) { "" !== e ? s(S(e)) : r([JSON.parse(t).pid]) }) }) } }, 931619: function(e, t, n) { "use strict"; let i; n.r(t), n("653041"), i = n("538036").default; let r = [], s = !1; t.default = { ...i, awaitOnline: () => new Promise(e => { if (i.isOnline()) return e(); { if (r.push(e), s) return; s = !0; let t = () => { r.forEach(e => e()), r.length = 0, s = !1, i.removeOnlineCallback(t) }; i.addOnlineCallback(t) } }) } }, 5192: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getNickname: function() { return u }, useName: function() { return _ } }); var i = n("442837"), r = n("592125"), s = n("271383"), a = n("699516"), o = n("51144"), l = n("689938"); function u(e, t, n) { if (null == n) return null; if (null != e) return s.default.getNick(e, n.id); if (null != t) { let e = r.default.getChannel(t); if (null == e ? void 0 : e.isPrivate()) return a.default.getNickname(n.id) } return null } function d(e, t, n) { var i; return null == n ? l.default.Messages.UNKNOWN_USER_MENTION_PLACEHOLDER : null !== (i = u(e, t, n)) && void 0 !== i ? i : o.default.getName(n) } function _(e, t, n) { return (0, i.useStateFromStores)([s.default, r.default, a.default], () => d(e, t, n)) } t.default = { getNickname: u, getName: d, useName: _ } }, 621600: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MessageNotificationSettings: function() { return S }, NotificationLabel: function() { return f }, NotificationLabels: function() { return r }, NotificationSettingsUpdateType: function() { return i }, getCurrentChannelSettings: function() { return C }, getCurrentGuildSettings: function() { return p }, getManyCurrentChannelSettings: function() { return R }, getManyCurrentGuildSettings: function() { return O }, muteConfigToTimestamp: function() { return m }, trackChannelNotificationSettingsUpdate: function() { return N }, trackGuildNotificationSettingsUpdate: function() { return h } }), n("789020"), n("47120"); var i, r, s, a, o = n("367907"), l = n("601992"), u = n("592125"), d = n("375954"), _ = n("9156"); n("626135"); var c = n("630388"), E = n("981631"), I = n("490897"), T = n("526761"); (s = i || (i = {})).GUILD = "guild", s.CHANNEL = "channel", s.ACCOUNT = "account", (a = r || (r = {})).ForumThreadsCreatedOn = "enabled forum thread created notifs", a.ForumThreadsCreatedOff = "disabled forum thread created notifs", a.SuppressEveryoneOn = "enabled suppress everyone", a.SuppressEveryoneOff = "disabled suppress everyone", a.SuppressRolesOn = "enabled suppress roles", a.SuppressRolesOff = "disabled suppress roles", a.HighlightsOn = "enabled highlights", a.HighlightsOff = "disabled highlights", a.MobilePushOn = "enabled mobile push notifications", a.MobilePushOff = "disabled mobile push notifications", a.UnreadsAll = "unreads set to all messages", a.UnreadsMentions = "unreads set to mentions", a.UnreadsDefault = "unreads set to the default", a.NotificationsAll = "notifications set to all messages", a.NotificationsMentions = "notifications set to mentions", a.NotificationsNothing = "notifications set to nothing", a.NotificationsDefault = "notifications set to the default", a.PresetAll = "notification preset set to all messages", a.PresetMentions = "notification preset set to mentions", a.PresetNothing = "notification preset set to nothing", a.PresetDefault = "notification preset set to the default", a.OptedIn = "opted in to entity", a.OptedOut = "opted out from entity", a.Favorited = "favorited", a.UnFavorited = "unfavorited", a.Muted = "muted", a.Unmuted = "unmuted", a.MutedScheduledEvents = "muted scheduled events", a.UnmutedScheduledEvents = "unmuted scheduled events", a.OverrideCreated = "channel override created", a.OverrideDeleted = "channel override deleted"; let f = { forumThreadsCreated: e => e ? "enabled forum thread created notifs" : "disabled forum thread created notifs", suppressEveryone: e => e ? "enabled suppress everyone" : "disabled suppress everyone", suppressRoles: e => e ? "enabled suppress roles" : "disabled suppress roles", highlights: e => e ? "enabled highlights" : "disabled highlights", mobilePush: e => e ? "enabled mobile push notifications" : "disabled mobile push notifications", optedIn: e => e ? "opted in to entity" : "opted out from entity", favorited: e => e ? "favorited" : "unfavorited", muted: e => e ? "muted" : "unmuted", mutedEvents: e => e ? "muted scheduled events" : "unmuted scheduled events", unreads: e => e === I.UnreadSetting.ALL_MESSAGES ? "unreads set to all messages" : e === I.UnreadSetting.ONLY_MENTIONS ? "unreads set to mentions" : "unreads set to the default", notifications: e => e === E.UserNotificationSettings.ALL_MESSAGES ? "notifications set to all messages" : e === E.UserNotificationSettings.ONLY_MENTIONS ? "notifications set to mentions" : e === E.UserNotificationSettings.NO_MESSAGES ? "notifications set to nothing" : "notifications set to the default" }, S = Object.freeze({ [E.UserNotificationSettings.ALL_MESSAGES]: "All", [E.UserNotificationSettings.ONLY_MENTIONS]: "Mentions", [E.UserNotificationSettings.NO_MESSAGES]: "Nothing", [E.UserNotificationSettings.NULL]: null }); function h(e, t, n, i, r) { var s, a; let u = function(e) { var t, n, i, r, s, a, o; let l = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, u = null != l.mute_config && null != l.mute_config.end_time ? new Date(l.mute_config.end_time).getTime() : e.guild_muted_until, d = null != l.message_notifications ? S[l.message_notifications] : e.guild_message_notification_settings; return { guild_muted_until: u, guild_flags: null !== (t = l.flags) && void 0 !== t ? t : e.guild_flags, guild_is_muted: null !== (n = l.muted) && void 0 !== n ? n : e.guild_is_muted, guild_message_notification_settings: d, guild_suppress_roles: null !== (i = l.suppress_roles) && void 0 !== i ? i : e.guild_suppress_roles, guild_receive_mobile_push: null !== (r = l.mobile_push) && void 0 !== r ? r : e.guild_receive_mobile_push, guild_notify_highlights: null !== (s = l.notify_highlights) && void 0 !== s ? s : e.guild_notify_highlights, guild_suppress_everyone: null !== (a = l.suppress_everyone) && void 0 !== a ? a : e.guild_suppress_everyone, guild_scheduled_events_muted: null !== (o = l.mute_scheduled_events) && void 0 !== o ? o : e.guild_scheduled_events_muted } }, d = u(n), _ = u(p(e), t), I = A(d, _, "RETURN_PREVIOUS_WHEN_CHANGED"), f = null !== (s = I("guild_flags")) && void 0 !== s ? s : 0, h = (null !== (a = _.guild_flags) && void 0 !== a ? a : 0) ^ f, m = 0 === (0, c.removeFlags)(h, T.GuildNotificationSettingsFlags.OPT_IN_CHANNELS_OFF, T.GuildNotificationSettingsFlags.OPT_IN_CHANNELS_ON); o.default.trackWithMetadata(E.AnalyticEvents.NOTIFICATION_SETTINGS_UPDATED, { ..._, ...l.default.getStats(e), location: r, guild_id: e, update_type: "guild", label: i, guild_flags_old: I("guild_flags"), guild_is_muted_old: I("guild_is_muted"), guild_suppress_roles_old: I("guild_suppress_roles"), guild_notify_highlights_old: I("guild_notify_highlights"), guild_suppress_everyone_old: I("guild_suppress_everyone"), guild_receive_mobile_push_old: I("guild_receive_mobile_push"), guild_scheduled_events_muted_old: I("guild_scheduled_events_muted"), guild_message_notification_settings_old: I("guild_message_notification_settings"), is_opt_in_only_change: m }) } function A(e, t, n) { return i => { if ("RETURN_PREVIOUS_WHEN_CHANGED" === n) return e[i] !== t[i] ? e[i] : void 0 } } function m(e) { return null != e && null != e.end_time ? new Date(e.end_time).getTime() : null } function N(e, t, n, i, r, s) { var a, _, I, f; let h = function(t) { var n, i; let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, s = null !== (n = r.muted) && void 0 !== n ? n : null == t ? void 0 : t.channel_is_muted, a = null != r.message_notifications ? S[r.message_notifications] : null == t ? void 0 : t.channel_message_notification_settings, o = null == e ? null : !0 === s || null != a; return { channel_is_muted: s, channel_is_overridden: o, channel_flags: null !== (i = r.flags) && void 0 !== i ? i : null == t ? void 0 : t.channel_flags, channel_message_notification_settings: a, channel_muted_until: m(r.mute_config) } }, N = h(i), p = h(C(e, t), n), O = A(N, p, "RETURN_PREVIOUS_WHEN_CHANGED"), R = u.default.getChannel(t), g = null !== (_ = O("channel_flags")) && void 0 !== _ ? _ : 0, L = (null !== (I = p.channel_flags) && void 0 !== I ? I : 0) ^ g, v = 0 === (0, c.removeFlags)(L, T.ChannelNotificationSettingsFlags.FAVORITED, T.ChannelNotificationSettingsFlags.OPT_IN_ENABLED), D = null !== (f = null === (a = d.default.getLastMessage(t)) || void 0 === a ? void 0 : a.type) && void 0 !== f ? f : null; o.default.trackWithMetadata(E.AnalyticEvents.NOTIFICATION_SETTINGS_UPDATED, { ...p, ...l.default.getStats(e), location: s, guild_id: e, channel_id: t, update_type: "channel", label: r, parent_id: null != R ? R.parent_id : null, channel_flags_old: O("channel_flags"), channel_is_muted_old: O("channel_is_muted"), channel_muted_until_old: O("channel_muted_until"), channel_is_overridden_old: O("channel_is_overridden"), channel_message_notification_settings_old: O("channel_message_notification_settings"), is_opt_in_only_change: v, last_message_type: D }) } function p(e) { let t = _.default.isMuted(e), n = _.default.getMuteConfig(e); return { guild_suppress_everyone: _.default.isSuppressEveryoneEnabled(e), guild_suppress_roles: _.default.isSuppressRolesEnabled(e), guild_scheduled_events_muted: _.default.isMuteScheduledEventsEnabled(e), guild_is_muted: t, guild_muted_until: null != n && null != n.end_time ? new Date(n.end_time).getTime() : null, guild_receive_mobile_push: _.default.isMobilePushEnabled(e), guild_message_notification_settings: S[_.default.getMessageNotifications(e)], guild_notify_highlights: _.default.getNotifyHighlights(e), guild_flags: _.default.getGuildFlags(e) } } function O(e) { let t = new Map; return e.forEach(e => t.set(e, p(e))), t } function C(e, t) { let n = _.default.isChannelMuted(e, t), i = _.default.getChannelMuteConfig(e, t); return { channel_is_muted: n, channel_muted_until: null != i && null != i.end_time ? new Date(i.end_time).getTime() : null, channel_message_notification_settings: S[_.default.getChannelMessageNotifications(e, t)], channel_flags: _.default.getChannelIdFlags(e, t) } } function R(e, t) { let n = new Map; return t.forEach(t => n.set(t, C(e, t))), n } }, 930153: function(e, t, n) { "use strict"; n.r(t), n.d(t, { formatPercent: function() { return o }, humanizeValue: function() { return s }, parseInteger: function() { return a }, shortenAndLocalizeNumber: function() { return r } }); var i = n("689938"); function r(e) { if (e < 1e6) return i.default.Messages.NUMBER_ABBREVIATION_FULL.format({ value: e }); let t = (e / 1e6).toFixed(1); return i.default.Messages.NUMBER_ABBREVIATION_MILLIONS.format({ value: t }) } function s(e, t) { if (e < 1e3) return i.default.Messages.NUMBER_ABBREVIATION_FULL.format({ value: Math.floor(e) }); if (e < 1e6) return i.default.Messages.NUMBER_ABBREVIATION_THOUSANDS.format({ value: Math.floor(e / 1e3) }); let n = new Intl.NumberFormat(t, { maximumFractionDigits: 1 }).format(Math.floor(10 * e / 1e6) / 10); return i.default.Messages.NUMBER_ABBREVIATION_MILLIONS.format({ value: n }) } function a(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : NaN; if (null == e) return t; let n = parseInt(e); return Number.isNaN(n) ? t : n } function o(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; return Intl.NumberFormat(e, { style: "percent", minimumFractionDigits: 0, ...n }).format(t) } }, 36703: function(e, t, n) { "use strict"; n.r(t), n.d(t, { amplitudeToPerceptual: function() { return r }, perceptualToAmplitude: function() { return i } }); function i(e) { let t, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 100; return 0 === e ? 0 : (t = e > n ? (e - n) / n * 6 : e / n * 50 - 50, n * Math.pow(10, t / 20)) } function r(e) { let t, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 100; if (0 === e) return 0; let i = 20 * Math.log10(e / n); return n * (t = i > 0 ? i / 6 + 1 : (50 + i) / 50) } }, 700785: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DEFAULT: function() { return p }, NONE: function() { return m }, VIEW_GUILD_SETTINGS: function() { return L }, applyThreadPermissions: function() { return P }, areChannelsLocked: function() { return U }, can: function() { return V }, canEveryone: function() { return F }, canEveryoneRole: function() { return x }, computePermissions: function() { return y }, computePermissionsForRoles: function() { return function e(t) { let n, { forceRoles: i, context: r, overwrites: s, roles: a, checkElevated: o = !0, excludeGuildPermissions: l } = t, u = O; if (r instanceof c.ChannelRecordBase) { var d; if (r.isScheduledForDeletion()) return m; if (c.THREAD_CHANNEL_TYPES.has(r.type)) { let t = I.default.getChannel(r.parent_id); return null == t ? m : P(r, e({ forceRoles: i, context: t, overwrites: s, roles: a, checkElevated: o, excludeGuildPermissions: l }), !1) } u = null !== (d = r.computeLurkerPermissionsAllowList()) && void 0 !== d ? d : u; s = null != s ? { ...r.permissionOverwrites, ...s } : r.permissionOverwrites; let t = r.getGuildId(); n = null != t ? f.default.getGuild(t) : null } else s = null != s ? s : {}, n = r; if (null == n) return m; let _ = { userId: A.EMPTY_STRING_SNOWFLAKE_ID, nick: "", guildId: n.id, guildMemberAvatar: null, roles: h.default.keys(i), colorString: null, hoistRoleId: null, premiumSince: null, isPending: !1, joinedAt: new Date().toISOString(), communicationDisabledUntil: null }; return M({ userId: A.EMPTY_STRING_SNOWFLAKE_ID, member: _, guild: n, overwrites: s, roles: a, checkElevated: o, excludeGuildPermissions: l, lurkerPermissionsMask: u }) } }, getGuildVisualOwnerId: function() { return b }, getHighestHoistedRole: function() { return k }, getHighestRole: function() { return w }, isRoleHigher: function() { return G }, makeEveryoneOverwrite: function() { return B } }), n("47120"); var i = n("392711"), r = n.n(i), s = n("149765"), a = n("911969"), o = n("715903"), l = n("69882"), u = n("160404"), d = n("41776"), _ = n("569471"), c = n("131704"), E = n("314897"), I = n("592125"), T = n("271383"), f = n("430824"), S = n("594174"), h = n("709054"), A = n("981631"); let m = s.deserialize(0), N = s.combine(...r().values(A.Permissions)), p = s.combine(A.Permissions.CREATE_INSTANT_INVITE, A.Permissions.CHANGE_NICKNAME, A.Permissions.VIEW_CHANNEL, A.Permissions.SEND_MESSAGES, A.Permissions.EMBED_LINKS, A.Permissions.ATTACH_FILES, A.Permissions.READ_MESSAGE_HISTORY, A.Permissions.MENTION_EVERYONE, A.Permissions.USE_EXTERNAL_EMOJIS, A.Permissions.USE_EXTERNAL_STICKERS, A.Permissions.ADD_REACTIONS, A.Permissions.CREATE_PUBLIC_THREADS, A.Permissions.CREATE_PRIVATE_THREADS, A.Permissions.SEND_MESSAGES_IN_THREADS, A.Permissions.SEND_POLLS, A.Permissions.CONNECT, A.Permissions.SPEAK, A.Permissions.USE_VAD, A.Permissions.STREAM, A.Permissions.USE_EMBEDDED_ACTIVITIES, A.Permissions.USE_SOUNDBOARD, A.Permissions.REQUEST_TO_SPEAK, A.Permissions.USE_APPLICATION_COMMANDS, A.Permissions.CREATE_GUILD_EXPRESSIONS, A.Permissions.CREATE_EVENTS), O = s.combine(A.Permissions.VIEW_CHANNEL, A.Permissions.READ_MESSAGE_HISTORY), C = s.combine(A.Permissions.VIEW_CHANNEL, A.Permissions.SEND_MESSAGES, A.Permissions.CONNECT, A.Permissions.SPEAK, A.Permissions.STREAM, A.Permissions.USE_EMBEDDED_ACTIVITIES, A.Permissions.USE_EXTERNAL_EMOJIS, A.Permissions.USE_EXTERNAL_SOUNDS, A.Permissions.USE_EXTERNAL_STICKERS, A.Permissions.USE_SOUNDBOARD, A.Permissions.USE_VAD), R = s.combine(A.Permissions.VIEW_CHANNEL, A.Permissions.READ_MESSAGE_HISTORY), g = s.combine(A.Permissions.VIEW_CHANNEL, A.Permissions.READ_MESSAGE_HISTORY, A.Permissions.CHANGE_NICKNAME), L = s.combine(A.Permissions.MANAGE_GUILD, A.Permissions.MANAGE_ROLES, A.Permissions.ADMINISTRATOR, A.Permissions.BAN_MEMBERS, A.Permissions.MANAGE_NICKNAMES, A.Permissions.CREATE_GUILD_EXPRESSIONS, A.Permissions.MANAGE_GUILD_EXPRESSIONS, A.Permissions.MANAGE_WEBHOOKS, A.Permissions.VIEW_AUDIT_LOG); function v(e, t, n) { let i = !(arguments.length > 3) || void 0 === arguments[3] || arguments[3]; if (i && t.mfaLevel === A.MFALevels.ELEVATED && n === E.default.getId()) { var r; !(null === (r = S.default.getCurrentUser()) || void 0 === r ? void 0 : r.mfaEnabled) && (e = s.remove(e, A.ElevatedPermissions)) } return e } function D(e, t, n, i) { let r = i[e]; if (null != r && (n = s.remove(n, r.deny), n = s.add(n, r.allow)), null != t) { let e = m, r = m; for (let n = 0; n < t.roles.length; n++) { let a = i[t.roles[n]]; null != a && (e = s.add(e, a.allow), r = s.add(r, a.deny)) } n = s.remove(n, r), n = s.add(n, e); let a = i[t.userId]; null != a && (n = s.remove(n, a.deny), n = s.add(n, a.allow)); let u = s.has(n, A.Permissions.ADMINISTRATOR); (0, o.hasAutomodQuarantinedProfile)(t) && !u && (n = s.filter(n, g)), (0, l.isMemberCommunicationDisabled)(t) && !u && (n = s.filter(n, R)) } return n } function M(e) { let { userId: t, member: n, guild: i, overwrites: r, roles: a, checkElevated: o = !0, excludeGuildPermissions: l = !1, lurkerPermissionsMask: u = O } = e; if (l) return D(i.id, n, m, r); let _ = (a = null != a ? { ...f.default.getRoles(i.id), ...a } : f.default.getRoles(i.id))[i.getEveryoneRoleId()], c = null != _ ? _.permissions : p; if (null != n) for (let e = 0; e < n.roles.length; e++) { let t = a[n.roles[e]]; void 0 !== t && (c = s.add(c, t.permissions)) } return c = s.has(c, A.Permissions.ADMINISTRATOR) ? N : D(i.id, n, c, r), (d.default.isLurking(i.id) || (null == n ? void 0 : n.isPending)) && (c = s.filter(c, u)), T.default.isCurrentUserGuest(i.id) && (c = s.filter(c, C)), v(c, i, t, o) } function y(e) { var t, n, i; let r, { user: s, context: a, overwrites: o, roles: l, checkElevated: d = !0, excludeGuildPermissions: E = !1 } = e; if (null == s) return m; let h = "string" == typeof s ? s : s.id, A = O; if (a instanceof c.ChannelRecordBase) { if (a.isScheduledForDeletion()) return m; if (c.THREAD_CHANNEL_TYPES.has(a.type)) { let e = I.default.getChannel(a.parent_id); if (null == e || e.isScheduledForDeletion()) return m; let t = h === (null === (n = S.default.getCurrentUser()) || void 0 === n ? void 0 : n.id) && _.default.hasJoined(a.id); return P(a, y({ user: s, context: e, overwrites: o, roles: l, checkElevated: d, excludeGuildPermissions: E }), t) } A = null !== (i = a.computeLurkerPermissionsAllowList()) && void 0 !== i ? i : A; o = null != o ? { ...a.permissionOverwrites, ...o } : a.permissionOverwrites; let e = a.getGuildId(); r = null != e ? f.default.getGuild(e) : null } else o = null != o ? o : {}, r = a; if (null == r) return m; if (!(h === (null === (t = S.default.getCurrentUser()) || void 0 === t ? void 0 : t.id) && u.default.isViewingRoles(r.id)) && r.isOwner(h)) return v(N, r, h, d); let p = T.default.getMember(r.id, h); return M({ userId: h, member: p, guild: r, overwrites: o, roles: l, checkElevated: d, excludeGuildPermissions: E, lurkerPermissionsMask: A }) } function P(e, t, n) { return e.type !== A.ChannelTypes.PRIVATE_THREAD || n || s.has(t, A.Permissions.MANAGE_THREADS) ? s.has(t, A.Permissions.SEND_MESSAGES_IN_THREADS) ? e.isLockedThread() && !s.has(t, A.Permissions.MANAGE_THREADS) ? s.remove(t, A.Permissions.SEND_MESSAGES) : s.combine(t, A.Permissions.SEND_MESSAGES) : s.remove(t, A.Permissions.SEND_MESSAGES) : m } function U(e, t) { if (c.THREAD_CHANNEL_TYPES.has(e.type)) return !0; let { guild_id: n } = e; if (null == t || null == n || n !== t.guild_id) return !1; let i = { ...e.permissionOverwrites }, r = { ...t.permissionOverwrites }; return null == i[n] && (i[n] = B(n)), null == r[n] && (r[n] = B(n)), Object.keys(i).length === Object.keys(r).length && !Object.keys(i).some(e => { let t = i[e], n = r[e]; return !(null != n && s.equals(n.deny, t.deny) && s.equals(n.allow, t.allow)) && !0 }) } function b(e) { var t; return r().some(f.default.getRoles(e.id), e => e.hoist && s.has(e.permissions, A.Permissions.ADMINISTRATOR)) ? void 0 : null !== (t = e.ownerId) && void 0 !== t ? t : void 0 } function G(e, t, n, i) { if (null != t && e.isOwner(t)) return !0; if (null == n) return !1; let s = r()(f.default.getRoles(e.id)).sortBy(e => e.position).map(e => e.id).value(); return s.indexOf(n.id) > (null != i ? s.indexOf(i.id) : -1) } function w(e, t) { let n = T.default.getMember(e.id, t); if (null != n) return r()(f.default.getRoles(e.id)).filter(e => -1 !== n.roles.indexOf(e.id)).sortBy(e => -e.position).first() } function k(e, t) { return null == t.hoistRoleId ? null : f.default.getRole(e.id, t.hoistRoleId) } function B(e) { return { id: e, type: a.PermissionOverwriteType.ROLE, allow: m, deny: m } } function V(e) { let { permission: t, user: n, context: i, overwrites: r, roles: a, excludeGuildPermissions: o } = e; return s.has(y({ user: n, context: i, overwrites: r, roles: a, checkElevated: !0, excludeGuildPermissions: o }), t) } function x(e, t) { let n; let i = {}; if (t instanceof c.ChannelRecordBase) { if (t.type === A.ChannelTypes.PRIVATE_THREAD || c.THREAD_CHANNEL_TYPES.has(t.type) && null == (t = I.default.getChannel(t.parent_id))) return !1; i = t.permissionOverwrites; let e = t.getGuildId(); n = null != e ? f.default.getGuild(e) : null } else n = t; if (null == n) return !1; let r = f.default.getRole(n.id, n.getEveryoneRoleId()); if (null == r) return !1; let a = r.permissions, o = i[n.id]; return null != o && (a = s.remove(a, o.deny), a = s.add(a, o.allow)), s.has(a, e) } function F(e, t) { let n; let i = {}; if (t instanceof c.ChannelRecordBase) { if (t.type === A.ChannelTypes.PRIVATE_THREAD || c.THREAD_CHANNEL_TYPES.has(t.type) && null == (t = I.default.getChannel(t.parent_id))) return !1; i = t.permissionOverwrites; let e = t.getGuildId(); n = null != e ? f.default.getGuild(e) : null } else n = t; if (null == n) return !1; let a = f.default.getRole(n.id, n.getEveryoneRoleId()); return !(null == a || !s.has(a.permissions, e) || r().some(i, t => s.has(t.deny, e))) && !0 } }, 358085: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { PlatformTypes: function() { return i }, getNativePlatform: function() { return A }, getOS: function() { return m }, getPlatform: function() { return S }, getPlatformName: function() { return h }, isAndroid: function() { return T }, isAndroidChrome: function() { return E }, isAndroidWeb: function() { return I }, isDesktop: function() { return _ }, isIOS: function() { return f }, isLinux: function() { return d }, isMac: function() { return u }, isPlatformEmbedded: function() { return a }, isWeb: function() { return c }, isWindows: function() { return l } }), (r = i || (i = {})).WINDOWS = "WINDOWS", r.OSX = "OSX", r.LINUX = "LINUX", r.WEB = "WEB"; let s = window.DiscordNative, a = null != s, o = null != s ? s.process.platform : ""; function l() { return /^win/.test(o) } function u() { return "darwin" === o } function d() { return "linux" === o } function _() { return l() || u() || d() } function c() { return "WEB" === S() } function E() { return null != navigator.userAgent && null != navigator.userAgent.toLowerCase().match("(android ).+chrome/[.0-9]* mobile") } function I() { var e; return (null === (e = navigator.userAgent) || void 0 === e ? void 0 : e.match(/android/i)) != null } function T() { return "android" === o } function f() { return "ios" === o } function S() { return l() ? "WINDOWS" : u() ? "OSX" : d() ? "LINUX" : "WEB" } function h() { return o } function A() { switch (o) { case "ios": case "android": return o; default: return "web" } } function m() { let { userAgent: e } = window.navigator; if (/Windows/i.test(e)) return /Phone/.test(e) ? "windows mobile" : "windows"; if (/(iPhone|iPad|iPod)/.test(e)) return "ios"; if (/Android/.test(e)) return "android"; else if (/(BlackBerry|PlayBook|BB10)/i.test(e)) return "blackberry"; else if (/Mac/i.test(e)) return null != window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 ? "ios" : "macos"; else if (/Linux/i.test(e)) return "linux" } }, 380684: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getUserMaxFileSize: function() { return o } }); var i = n("502087"), r = n("111361"), s = n("981631"), a = n("474936"); function o(e) { if (null == e) return s.MAX_ATTACHMENT_SIZE; let t = i.default.getPremiumTypeOverride(); return e.isStaff() && t === a.UNSELECTED_PREMIUM_TYPE_OVERRIDE ? s.MAX_STAFF_ATTACHMENT_SIZE : null != e.premiumType && (0, r.isPremium)(e) ? a.PremiumUserLimits[e.premiumType].fileSize : s.MAX_ATTACHMENT_SIZE } }, 111361: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isPremium: function() { return s }, isPremiumAtLeast: function() { return r }, isPremiumExactly: function() { return a } }); var i = n("474936"); function r(e, t) { return null == t || null != e && i.PremiumTypeOrder[e] >= i.PremiumTypeOrder[t] } function s(e, t) { return null != e && null != e.premiumType && r(e.premiumType, t) } function a(e, t) { return null != e && e.premiumType === t } }, 74538: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StreamQuality: function() { return r }, castPremiumSubscriptionAsSkuId: function() { return eG }, coerceExistingItemsToNewItemInterval: function() { return ey }, experimentalGetPrices: function() { return Y }, formatIntervalDuration: function() { return eO }, formatTrialCtaIntervalDuration: function() { return ep }, formatTrialOfferIntervalDuration: function() { return eN }, getBillingGracePeriodDaysAndExpiresDate: function() { return ed }, getBillingReviewSubheader: function() { return eA }, getDefaultPrice: function() { return F }, getDiscountIntervalString: function() { return j }, getDisplayName: function() { return Z }, getDisplayNameFromSku: function() { return X }, getDisplayPremiumType: function() { return q }, getExternalPlanDisplayName: function() { return et }, getExternalSubscriptionMethodUrl: function() { return eC }, getFormattedPriceForPlan: function() { return eI }, getFormattedRateForPlan: function() { return eT }, getIntervalForInvoice: function() { return em }, getIntervalString: function() { return W }, getIntervalStringAsNoun: function() { return K }, getItemsFromNewAdditionalPlans: function() { return eg }, getItemsWithUpsertedPlanIdForGroup: function() { return ev }, getItemsWithUpsertedPremiumGuildPlan: function() { return eM }, getItemsWithUpsertedPremiumPlanId: function() { return eD }, getItemsWithoutPremiumPlanItem: function() { return eL }, getMaxFileSizeForPremiumType: function() { return eP }, getNumPremiumGuildSubscriptions: function() { return es }, getPlanDescriptionFromInvoice: function() { return ee }, getPremiumGuildHeaderDescription: function() { return eE }, getPremiumPlanItem: function() { return x }, getPremiumPlanOptions: function() { return en }, getPremiumSkuIdForSubscription: function() { return eb }, getPremiumType: function() { return z }, getPremiumTypeDisplayName: function() { return J }, getPrice: function() { return H }, getTierDisplayName: function() { return Q }, hasPremiumSubscriptionToDisplay: function() { return eR }, isPremium: function() { return v.isPremium }, isPremiumAtLeast: function() { return v.isPremiumAtLeast }, isPremiumBaseSubscriptionPlan: function() { return eo }, isPremiumExactly: function() { return v.isPremiumExactly }, isPremiumGuildSubscriptionCanceled: function() { return ec }, isPremiumGuildSubscriptionPlan: function() { return el }, isPremiumSubscriptionPlan: function() { return eu }, isPrepaidPaymentSource: function() { return e_ }, isSubscriptionStatusFailedPayment: function() { return eS } }), n("411104"), n("47120"), n("733860"), n("724458"), n("653041"); var i, r, s, a, o = n("512722"), l = n.n(o), u = n("913527"), d = n.n(u), _ = n("848246"); n("442837"); var c = n("710845"), E = n("114064"), I = n("803905"), T = n("424082"), f = n("439017"), S = n("301766"), h = n("594174"), A = n("351402"), m = n("853872"), N = n("509545"), p = n("78839"), O = n("122289"), C = n("55935"), R = n("424218"), g = n("358085"), L = n("380684"), v = n("111361"), D = n("74538"), M = n("937615"), y = n("981631"), P = n("334431"), U = n("474936"), b = n("231338"), G = n("689938"); let w = { PAYMENT_SOURCE_MANAGEMENT: "https://support.apple.com/HT201266", BILLING_HISTORY: "https://support.apple.com/HT201266", SUBSCRIPTION_MANAGEMENT: "https://support.apple.com/HT202039" }, k = { SUBSCRIPTION_MANAGEMENT: "https://play.google.com/store/account/subscriptions", PAYMENT_SOURCE_MANAGEMENT: "https://play.google.com/store/paymentmethods", BILLING_HISTORY: "https://play.google.com/store/account/orderhistory" }, B = new c.default("PremiumUtils.tsx"), V = { [U.SubscriptionPlans.NONE_MONTH]: [U.SubscriptionPlans.NONE_YEAR, U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_YEAR_TIER_1, U.SubscriptionPlans.PREMIUM_MONTH_TIER_1], [U.SubscriptionPlans.NONE_YEAR]: [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_YEAR_TIER_1, U.SubscriptionPlans.PREMIUM_MONTH_TIER_1], [U.SubscriptionPlans.PREMIUM_MONTH_TIER_0]: [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_YEAR_TIER_1, U.SubscriptionPlans.PREMIUM_MONTH_TIER_1, U.SubscriptionPlans.PREMIUM_YEAR_TIER_0], [U.SubscriptionPlans.PREMIUM_YEAR_TIER_0]: [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_YEAR_TIER_1, U.SubscriptionPlans.PREMIUM_MONTH_TIER_1], [U.SubscriptionPlans.PREMIUM_MONTH_TIER_1]: [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_YEAR_TIER_1], [U.SubscriptionPlans.PREMIUM_YEAR_TIER_1]: [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2], [U.SubscriptionPlans.PREMIUM_MONTH_TIER_2]: [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2], [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2]: [], ALL: [U.SubscriptionPlans.NONE_MONTH, U.SubscriptionPlans.NONE_YEAR, U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_YEAR_TIER_1, U.SubscriptionPlans.PREMIUM_MONTH_TIER_1, U.SubscriptionPlans.PREMIUM_YEAR_TIER_0, U.SubscriptionPlans.PREMIUM_MONTH_TIER_0] }; function x(e) { return e.items.find(e => U.PREMIUM_PLANS.has(e.planId)) } function F(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], r = null !== (t = m.default.defaultPaymentSourceId) && void 0 !== t ? t : void 0, s = p.default.getPremiumTypeSubscription(); return null != s && null != s.paymentSourceId && (r = s.paymentSourceId), H(e, n, i, { paymentSourceId: r }) } function H(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, { paymentSourceId: r, currency: s } = i; if (null != N.default.get(e)) { let i = y.PriceSetAssignmentPurchaseTypes.DEFAULT; n ? i = y.PriceSetAssignmentPurchaseTypes.GIFT : t && (i = y.PriceSetAssignmentPurchaseTypes.PREMIUM_TIER_1); let a = function(e) { let { paymentSourceId: t, purchaseType: n, currency: i } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { purchaseType: y.PriceSetAssignmentPurchaseTypes.DEFAULT }, r = Y(e, { paymentSourceId: t, purchaseType: n }); return (0 === r.length && B.warn("No prices found for planId: ".concat(e, ", paymentSourceId: ").concat(t, ", purchaseType: ").concat(n)), null != i) ? r.find(e => e.currency === i) : r[0] }(e, { paymentSourceId: r, purchaseType: i, currency: s }); if (null == a) { let t = Error("Couldn't find price"); throw (0, O.captureBillingException)(t, { extra: { paymentSourceId: r }, tags: { purchaseType: i.toString(), planId: e, currency: null != s ? s : "unknown" } }), t } return a } let a = Error("Plan not found"); throw (0, O.captureBillingException)(a, { tags: { planId: e, currency: null != s ? s : "unknown" }, extra: { ...i, isGift: n } }), a }(s = i || (i = {})).BUNDLE = "bundle", s.TIER_0 = "tier_0", s.TIER_1 = "tier_1", s.TIER_2 = "tier_2", s.PREMIUM_GUILD = "premium_guild", (a = r || (r = {})).MID = "mid", a.HIGH = "high"; function Y(e) { let { paymentSourceId: t, purchaseType: n } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { purchaseType: y.PriceSetAssignmentPurchaseTypes.DEFAULT }, i = function(e, t) { let n = N.default.get(e); if (null == n) { let n = Error("Plan not found"); throw (0, O.captureBillingException)(n, { tags: { planId: e, purchaseType: t.toString() } }), n } if (null == n.prices) throw Error("No prices returned for ".concat(e, ", is your user in the experiment?")); let i = n.prices[t]; if (null == i) throw B.info("Purchase types: ".concat(JSON.stringify(Object.keys(n.prices)))), Error("No prices returned for purchase type ".concat(t, " for plan ").concat(e)); return i }(e, n); if (null != t) { let r = i.paymentSourcePrices[t]; if (null == r) { B.info("Payment sources IDs: ".concat(JSON.stringify(Object.keys(i.paymentSourcePrices)))), B.info("prices: ".concat(r)); let s = Error("Missing prices for payment source on subscription plan"); (0, O.captureBillingException)(s, { extra: { paymentSourceId: t }, tags: { purchaseType: n.toString(), planId: e } }) } else if (0 !== r.length) return r } if (null == i.countryPrices.prices) { B.info("countryPrices: ".concat(JSON.stringify(i.countryPrices))); let t = Error("Missing prices for country"); throw (0, O.captureBillingException)(t, { tags: { countryCode: i.countryPrices.countryCode, planId: e } }), t } return i.countryPrices.prices } function j(e) { switch (e) { case U.DiscountUserUsageLimitIntervalTypes.MONTH: return G.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_MONTH; case U.DiscountUserUsageLimitIntervalTypes.YEAR: return G.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_YEAR; case U.DiscountUserUsageLimitIntervalTypes.DAY: case U.DiscountUserUsageLimitIntervalTypes.WEEK: default: throw Error("Unexpected interval") } } function W(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1, r = arguments.length > 4 && void 0 !== arguments[4] && arguments[4], s = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : U.PremiumTypes.TIER_2; if (t || n) switch (e) { case U.SubscriptionIntervalTypes.MONTH: let a = (s === U.PremiumTypes.TIER_0 ? G.default.Messages.BASIC_GIFT_DURATION : G.default.Messages.GIFT_DURATION).format({ timeInterval: G.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_MONTH }); return r ? a : G.default.Messages.PAYMENT_MODAL_ONE_MONTH; case U.SubscriptionIntervalTypes.YEAR: let o = (s === U.PremiumTypes.TIER_0 ? G.default.Messages.BASIC_GIFT_DURATION : G.default.Messages.GIFT_DURATION).format({ timeInterval: G.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_YEAR }); return r ? o : G.default.Messages.PAYMENT_MODAL_ONE_YEAR; default: throw Error("Unexpected interval") } switch (e) { case U.SubscriptionIntervalTypes.MONTH: if (1 !== i) return G.default.Messages.MULTI_MONTHS.format({ intervalCount: i }); return G.default.Messages.MONTHLY; case U.SubscriptionIntervalTypes.YEAR: return G.default.Messages.YEARLY; default: throw Error("Unexpected interval") } } function K(e) { switch (e) { case U.SubscriptionIntervalTypes.MONTH: return G.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_MONTH; case U.SubscriptionIntervalTypes.YEAR: return G.default.Messages.PREMIUM_SUBSCRIPTION_INTERVAL_YEAR; default: throw Error("Unexpected interval") } } function z(e) { let t = U.SubscriptionPlanInfo[e]; if (null != t) return t.premiumType; let n = Error("Unsupported plan"); throw (0, O.captureBillingException)(n, { tags: { planId: e } }), n } function Z(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = arguments.length > 3 ? arguments[3] : void 0; switch (e) { case U.SubscriptionPlans.PREMIUM_MONTH_TIER_0: return t ? G.default.Messages.PREMIUM_PLAN_MONTH_TIER_0_TRIAL_DURATION.format({ duration: i }) : n ? G.default.Messages.PREMIUM_PLAN_ONE_MONTH_TIER_0 : G.default.Messages.PREMIUM_PLAN_MONTH_TIER_0; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_0: return t ? G.default.Messages.PREMIUM_PLAN_YEAR_TIER_0_TRIAL_DURATION.format({ duration: i }) : n ? G.default.Messages.PREMIUM_PLAN_ONE_YEAR_TIER_0 : G.default.Messages.PREMIUM_PLAN_YEAR_TIER_0; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_1: return n ? G.default.Messages.PREMIUM_PLAN_ONE_MONTH_TIER_1 : G.default.Messages.PREMIUM_PLAN_MONTH_TIER_1; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_1: return n ? G.default.Messages.PREMIUM_PLAN_ONE_YEAR_TIER_1 : G.default.Messages.PREMIUM_PLAN_YEAR_TIER_1; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_2: return t ? G.default.Messages.PREMIUM_PLAN_MONTH_TIER_2_TRIAL_DURATION.format({ duration: i }) : n ? G.default.Messages.PREMIUM_PLAN_ONE_MONTH_TIER_2 : G.default.Messages.PREMIUM_PLAN_MONTH_TIER_2; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_2: return t ? G.default.Messages.PREMIUM_PLAN_YEAR_TIER_2_TRIAL_DURATION.format({ duration: i }) : n ? G.default.Messages.PREMIUM_PLAN_ONE_YEAR_TIER_2 : G.default.Messages.PREMIUM_PLAN_YEAR_TIER_2; case U.SubscriptionPlans.PREMIUM_3_MONTH_TIER_2: return G.default.Messages.PREMIUM_PLAN_3_MONTH_TIER_2; case U.SubscriptionPlans.PREMIUM_6_MONTH_TIER_2: return G.default.Messages.PREMIUM_PLAN_6_MONTH_TIER_2; case U.SubscriptionPlans.PREMIUM_MONTH_GUILD: return n ? G.default.Messages.PREMIUM_GUILD_PLAN_SINGLE_MONTH : G.default.Messages.PREMIUM_GUILD_PLAN_MONTH; case U.SubscriptionPlans.PREMIUM_YEAR_GUILD: return n ? G.default.Messages.PREMIUM_GUILD_PLAN_SINGLE_YEAR : G.default.Messages.PREMIUM_GUILD_PLAN_YEAR; case U.SubscriptionPlans.PREMIUM_3_MONTH_GUILD: return G.default.Messages.PREMIUM_GUILD_PLAN_3_MONTH; case U.SubscriptionPlans.PREMIUM_6_MONTH_GUILD: return G.default.Messages.PREMIUM_GUILD_PLAN_6_MONTH; case U.SubscriptionPlans.PREMIUM_MONTH_LEGACY: return G.default.Messages.PREMIUM_PLAN_MONTH; case U.SubscriptionPlans.PREMIUM_YEAR_LEGACY: return G.default.Messages.PREMIUM_PLAN_YEAR } let r = Error("Unsupported plan"); throw (0, O.captureBillingException)(r, { tags: { planId: e } }), r } function X(e) { switch (e) { case U.PremiumSubscriptionSKUs.TIER_0: return G.default.Messages.PREMIUM_TIER_0; case U.PremiumSubscriptionSKUs.TIER_1: return G.default.Messages.PREMIUM_TIER_1; case U.PremiumSubscriptionSKUs.TIER_2: return G.default.Messages.PREMIUM_TIER_2 } let t = Error("Unsupported sku"); throw (0, O.captureBillingException)(t, { tags: { skuId: e } }), t } function Q(e) { switch (e) { case U.SubscriptionPlans.PREMIUM_MONTH_TIER_0: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_0: return G.default.Messages.PREMIUM_TIER_0; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_1: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_1: return G.default.Messages.PREMIUM_TIER_1; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_3_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_6_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_2: return G.default.Messages.PREMIUM_TIER_2 } let t = Error("Unsupported plan"); throw (0, O.captureBillingException)(t, { tags: { planId: e } }), t } function q(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; switch (e) { case U.SubscriptionPlans.PREMIUM_MONTH_TIER_0: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_0: return t ? "Basic" : "Nitro Basic"; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_1: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_1: return t ? "Classic" : "Nitro Classic"; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_2: case U.SubscriptionPlans.PREMIUM_3_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_6_MONTH_TIER_2: return "Nitro" } let n = Error("Unsupported plan"); throw (0, O.captureBillingException)(n, { tags: { planId: e } }), n } function J(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; switch (e) { case U.PremiumTypes.TIER_0: return t ? "Basic" : G.default.Messages.PREMIUM_TIER_0; case U.PremiumTypes.TIER_1: return t ? "Classic" : G.default.Messages.PREMIUM_TIER_1; case U.PremiumTypes.TIER_2: return G.default.Messages.PREMIUM_TIER_2 } } function $(e) { var t, n, i, r, s, a, o, l, u, _; let { subscription: c, planId: E, price: I, includePremiumGuilds: f, hasDiscountApplied: S, activeDiscountInfo: A, renewalInvoicePreview: m } = e, N = U.SubscriptionPlanInfo[E], p = D.default.formatPriceString(D.default.getDefaultPrice(N.id), N.interval), { annualDiscountPercentage: O } = (0, T.getAnnualDiscountsExperimentConfig)("PremiumUtils"), R = ef(c) || null == c.paymentSourceId && !c.isPurchasedExternally && !(null === (t = h.default.getCurrentUser()) || void 0 === t ? void 0 : t.hasFreePremium()), g = null != I, L = c.status === y.SubscriptionStatusTypes.UNPAID && null !== c.latestInvoice && (null === (n = c.latestInvoice) || void 0 === n ? void 0 : n.status) === y.InvoiceStatusTypes.OPEN, v = R ? y.SubscriptionStatusTypes.CANCELED : L ? y.SubscriptionStatusTypes.UNPAID : c.status, M = null === (s = null !== (r = null == m ? void 0 : m.taxInclusive) && void 0 !== r ? r : null === (i = c.latestInvoice) || void 0 === i ? void 0 : i.taxInclusive) || void 0 === s || s, P = U.NUM_FREE_GUILD_BOOSTS_WITH_PREMIUM + (f ? es(c.additionalPlans) : 0); switch (E) { case U.SubscriptionPlans.PREMIUM_MONTH_TIER_0: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_0: switch (v) { case y.SubscriptionStatusTypes.CANCELED: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_CANCELATION.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_CANCELATION_TAX_EXCLUSIVE.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_CANCELATION_NO_PRICE; case y.SubscriptionStatusTypes.ACCOUNT_HOLD: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_ACCOUNT_HOLD.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_ACCOUNT_HOLD_TAX_EXCLUSIVE.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_ACCOUNT_HOLD_NO_PRICE.format(); case y.SubscriptionStatusTypes.UNPAID: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_PENDING_PAYMENT.format(); case y.SubscriptionStatusTypes.PAUSE_PENDING: let b = null != c.pauseEndsAt ? d()(c.pauseEndsAt).diff(c.currentPeriodEnd, "days") : null; return null != b ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING.format({ pauseDate: c.currentPeriodEnd, pauseDuration: b }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING_NO_DURATION.format({ pauseDate: c.currentPeriodEnd }); case y.SubscriptionStatusTypes.PAUSED: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSED.format({ resumeDate: c.pauseEndsAt }); case y.SubscriptionStatusTypes.PAST_DUE: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_PAST_DUE_WITH_HC_LINK.format({ endDate: (0, C.dateFormat)(ed(c).expiresDate, "LL"), onClick: () => { window.open("https://support.discord.com/hc/articles/23082866222871") } }); default: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_TAX_EXCLUSIVE.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_0_NO_PRICE } case U.SubscriptionPlans.PREMIUM_MONTH_TIER_1: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_1: switch (v) { case y.SubscriptionStatusTypes.CANCELED: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_CANCELATION.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_CANCELATION_TAX_EXCLUSIVE.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_CANCELATION_NO_PRICE; case y.SubscriptionStatusTypes.ACCOUNT_HOLD: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_ACCOUNT_HOLD.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_ACCOUNT_HOLD_TAX_EXCLUSIVE.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_ACCOUNT_HOLD_NO_PRICE.format(); case y.SubscriptionStatusTypes.UNPAID: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_PENDING_PAYMENT.format(); case y.SubscriptionStatusTypes.PAUSE_PENDING: let w = null != c.pauseEndsAt ? d()(c.pauseEndsAt).diff(c.currentPeriodEnd, "days") : null; return null != w ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING.format({ pauseDate: c.currentPeriodEnd, pauseDuration: w }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING_NO_DURATION.format({ pauseDate: c.currentPeriodEnd }); case y.SubscriptionStatusTypes.PAUSED: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSED.format({ resumeDate: c.pauseEndsAt }); case y.SubscriptionStatusTypes.PAST_DUE: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_PAST_DUE_WITH_HC_LINK.format({ endDate: (0, C.dateFormat)(ed(c).expiresDate, "LL"), onClick: () => { window.open("https://support.discord.com/hc/articles/23082866222871") } }); default: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_TAX_EXCLUSIVE.format({ price: I }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_1_NO_PRICE } case U.SubscriptionPlans.PREMIUM_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_YEAR_TIER_2: case U.SubscriptionPlans.PREMIUM_3_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_6_MONTH_TIER_2: switch (v) { case y.SubscriptionStatusTypes.CANCELED: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_CANCELATION.format({ price: I, num: P }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_CANCELATION_TAX_EXCLUSIVE.format({ price: I, num: P }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_CANCELATION_NO_PRICE.format({ num: P }); case y.SubscriptionStatusTypes.ACCOUNT_HOLD: return g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_ACCOUNT_HOLD.format({ price: I, num: P }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_ACCOUNT_HOLD_TAX_EXCLUSIVE.format({ price: I, num: P }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_ACCOUNT_HOLD_NO_PRICE.format({ num: P }); case y.SubscriptionStatusTypes.UNPAID: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_PENDING_PAYMENT.format({ num: P }); case y.SubscriptionStatusTypes.PAUSE_PENDING: let k = null != c.pauseEndsAt ? d()(c.pauseEndsAt).diff(c.currentPeriodEnd, "days") : null; return null != k ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING.format({ pauseDate: c.currentPeriodEnd, pauseDuration: k }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSE_PENDING_NO_DURATION.format({ pauseDate: c.currentPeriodEnd }); case y.SubscriptionStatusTypes.PAUSED: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_NITRO_PAUSED.format({ resumeDate: c.pauseEndsAt }); case y.SubscriptionStatusTypes.BILLING_RETRY: return G.default.Messages.PREMIUM_SETTINGS_ACCOUNT_HOLD_INFO.format({ endDate: d()(c.currentPeriodStart).add(U.PAID_SUBSCRIPTION_MAX_BILLING_RETRY_DAYS, "days") }); case y.SubscriptionStatusTypes.PAST_DUE: return G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_PAST_DUE_WITH_HC_LINK.format({ endDate: (0, C.dateFormat)(ed(c).expiresDate, "LL"), onClick: () => { window.open("https://support.discord.com/hc/articles/23082866222871") } }); default: return S ? E === U.SubscriptionPlans.PREMIUM_YEAR_TIER_2 ? G.default.Messages.PREMIUM_TIER_CARD_ANNUAL_DISCOUNT_HEADER.format({ percent: null !== (a = null == A ? void 0 : A.percentage) && void 0 !== a ? a : O, regularPrice: p }) : M ? G.default.Messages.PREMIUM_TIER_CARD_DISCOUNT_HEADER_AFTER_REDEMPTION_GENERIC.format({ percent: null !== (o = null == A ? void 0 : A.percentage) && void 0 !== o ? o : U.DISCOUNT_PERCENTAGE_FALLBACK, regularPrice: p, numMonths: null !== (l = null == A ? void 0 : A.duration) && void 0 !== l ? l : U.DISCOUNT_DURATION_FALLBACK }) : G.default.Messages.PREMIUM_TIER_CARD_DISCOUNT_HEADER_AFTER_REDEMPTION_GENERIC_TAX_EXCLUSIVE.format({ percent: null !== (u = null == A ? void 0 : A.percentage) && void 0 !== u ? u : U.DISCOUNT_PERCENTAGE_FALLBACK, regularPrice: p, numMonths: null !== (_ = null == A ? void 0 : A.duration) && void 0 !== _ ? _ : U.DISCOUNT_DURATION_FALLBACK }) : g ? M ? G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2.format({ price: I, num: P }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_TAX_EXCLUSIVE.format({ price: I, num: P }) : G.default.Messages.PREMIUM_SUBSCRIPTION_DESCRIPTION_TIER_2_NO_PRICE.format({ num: P }) } default: throw Error("Invalid planId ".concat(E)) } } function ee(e) { let { renewalInvoicePreview: t, subscription: n, planId: i, includePremiumGuilds: r = !1, hasDiscountApplied: s = !1, activeDiscountInfo: a } = e, o = N.default.get(i); return l()(null != o, "Missing plan"), $({ subscription: n, planId: o.id, price: function(e, t, n) { let i = e.invoiceItems.find(e => { let { subscriptionPlanId: t } = e; return t === n.id }), r = null == i ? H(n.id, !1, !1, { paymentSourceId: t.paymentSourceId, currency: t.currency }).amount : i.amount; return (0, M.formatRate)((0, M.formatPrice)(r, e.currency), n.interval, n.intervalCount) }(t, n, o), includePremiumGuilds: r, hasDiscountApplied: s, activeDiscountInfo: a, renewalInvoicePreview: t }) } function et(e) { let { planId: t, additionalPlans: n } = e, i = (0, S.isNoneSubscription)(t) ? null : Z(t), r = null == n ? void 0 : n.find(e => { let { planId: t } = e; return U.PREMIUM_GUILD_SUBSCRIPTION_PLANS.has(t) }), s = (null == r ? void 0 : r.planId) === U.SubscriptionPlans.PREMIUM_MONTH_GUILD ? G.default.Messages.PREMIUM_GUILD_NUM_MONTH_GUILD_SUBSCRIPTIONS_UNFORMATTED : (null == r ? void 0 : r.planId) === U.SubscriptionPlans.PREMIUM_YEAR_GUILD ? G.default.Messages.PREMIUM_GUILD_NUM_MONTH_GUILD_SUBSCRIPTIONS_UNFORMATTED : null, a = null == s ? void 0 : s.format({ num: null == r ? void 0 : r.quantity }); if (null != i && null != a) return G.default.Messages.PREMIUM_WITH_PREMIUM_GUILD_EXTERNAL_PLAN_DESCRIPTION.format({ premiumDescription: i, premiumGuildDescription: a }); if (null != i) return i; if (null != a) return a; else throw Error("Subscription without premium or premium guild subscription") } function en(e) { let { skuId: t, isPremium: n, multiMonthPlans: i, currentSubscription: r, isGift: s, isEligibleForTrial: a, defaultPlanId: o, defaultToMonthlyPlan: l } = e; if (null == t || !n) return []; let u = void 0 !== o && t === U.SubscriptionPlanInfo[o].skuId ? o : void 0; void 0 === u && l && !s && (u = U.PREMIUM_SKU_TO_MONTHLY_PLAN[t]), a && !s && (void 0 === o || l && U.PREMIUM_MONTHLY_PLANS.has(o)) && f.TrialRedemptionDefaultPlanExperiment.trackExposure({ location: "de805e_1" }); let d = []; switch (t) { case U.PremiumSubscriptionSKUs.TIER_0: d = [U.SubscriptionPlans.PREMIUM_YEAR_TIER_0, U.SubscriptionPlans.PREMIUM_MONTH_TIER_0]; break; case U.PremiumSubscriptionSKUs.TIER_1: d = [U.SubscriptionPlans.PREMIUM_MONTH_TIER_1]; break; case U.PremiumSubscriptionSKUs.TIER_2: let _ = i; if (null != r) { let e = r.items[0].planId; if (U.MULTI_MONTH_PLANS.has(e)) { let t = U.SubscriptionPlanInfo[e]; _ = [...(0, U.MULTI_MONTH_PLANS)].filter(e => { let n = U.SubscriptionPlanInfo[e]; return n.interval === t.interval && n.intervalCount === t.intervalCount && n.skuId === U.PremiumSubscriptionSKUs.TIER_2 }) } else _ = [] } d = [U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, ..._, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2]; break; default: throw Error("Unexpected SKU: ".concat(t)) } if (void 0 !== u) { let e = d.indexOf(u); d.splice(e, 1), d.unshift(u) } return d } function ei(e) { let t = U.SubscriptionPlanInfo[e]; if (null == t) { let t = Error("Unsupported plan"); throw (0, O.captureBillingException)(t, { tags: { planId: e } }), t } return t.skuId } function er(e) { var t; return null == e ? V.ALL : null !== (t = V[e]) && void 0 !== t ? t : [] } function es(e) { let t = N.default.getPlanIdsForSkus([eG(U.PremiumSubscriptionSKUs.GUILD)]); l()(null != t, "Missing guildSubscriptionPlanIds"); let n = e.find(e => { let { planId: n } = e; return t.includes(n) }); return null != n ? n.quantity : 0 } let ea = new Set([U.SubscriptionPlans.NONE_MONTH, U.SubscriptionPlans.NONE_3_MONTH, U.SubscriptionPlans.NONE_6_MONTH, U.SubscriptionPlans.NONE_YEAR, U.SubscriptionPlans.PREMIUM_MONTH_TIER_0, U.SubscriptionPlans.PREMIUM_MONTH_TIER_1, U.SubscriptionPlans.PREMIUM_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_YEAR_TIER_0, U.SubscriptionPlans.PREMIUM_YEAR_TIER_1, U.SubscriptionPlans.PREMIUM_YEAR_TIER_2, U.SubscriptionPlans.PREMIUM_3_MONTH_TIER_2, U.SubscriptionPlans.PREMIUM_6_MONTH_TIER_2]); function eo(e) { return ea.has(e) } function el(e) { return U.PREMIUM_GUILD_SUBSCRIPTION_PLANS.has(e) } function eu(e) { return eo(e) || el(e) } function ed(e) { var t, n, i, r, s; if (e.isPurchasedViaApple && (null === (t = e.metadata) || void 0 === t ? void 0 : t.apple_grace_period_expires_date) != null) { let t = d()(e.metadata.apple_grace_period_expires_date); return { days: d().duration(t.diff(e.currentPeriodStart)).days(), expiresDate: t } } if (e.isPurchasedViaGoogle && (null === (n = e.metadata) || void 0 === n ? void 0 : n.google_grace_period_expires_date) != null && (null === (i = e.metadata) || void 0 === i ? void 0 : i.google_original_expires_date) != null) { let t = d()(e.metadata.google_grace_period_expires_date), n = d()(e.metadata.google_original_expires_date); return { days: d().duration(t.diff(n)).days(), expiresDate: t } } if (e.isPurchasedExternally) { let t = e.isPurchasedViaApple ? U.DEFAULT_APPLE_GRACE_PERIOD_DAYS : U.DEFAULT_GOOGLE_GRACE_PERIOD_DAYS; return { days: t, expiresDate: d()(e.currentPeriodStart).add(t, "days") } } if ((null === (r = e.metadata) || void 0 === r ? void 0 : r.grace_period_expires_date) != null) return { days: d()(null === (s = e.metadata) || void 0 === s ? void 0 : s.grace_period_expires_date).diff(e.currentPeriodStart, "days"), expiresDate: d()(e.metadata.grace_period_expires_date) }; { let t = null == e.paymentSourceId ? U.DEFAULT_MAX_GRACE_PERIOD_DAYS : U.PAID_SUBSCRIPTION_MAX_GRACE_PERIOD_DAYS; return { days: t, expiresDate: d()(e.currentPeriodStart).add(t, "days") } } } function e_(e) { if (null == e) return !1; let t = m.default.getPaymentSource(e); return null != t && b.PREPAID_PAYMENT_SOURCES.has(t.type) } function ec(e) { return e.isPurchasedExternally ? e.status === y.SubscriptionStatusTypes.CANCELED : function(e) { let { renewalMutations: t, additionalPlans: n, status: i } = e, r = es(n); return 0 === (null != t ? es(t.additionalPlans) : null) && 0 !== r ? y.SubscriptionStatusTypes.CANCELED : i }(e) === y.SubscriptionStatusTypes.CANCELED } function eE(e) { var t, n, i; let { subscription: r, user: s, price: a, renewalInvoicePreview: o } = e, { planId: u, additionalPlans: d } = r, _ = N.default.get(u); l()(null != _, "Missing plan"); let c = es(d), E = eh(r.planId, r.paymentSourceId, r.currency, s).amount * c; if (null != o) { let e = o.invoiceItems.find(e => U.PREMIUM_GUILD_SUBSCRIPTION_PLANS.has(e.subscriptionPlanId)); null != e && (E = e.amount) } a = null != a ? a : (0, M.formatPrice)(E, r.currency); let I = null === (i = null !== (n = null == o ? void 0 : o.taxInclusive) && void 0 !== n ? n : null === (t = r.latestInvoice) || void 0 === t ? void 0 : t.taxInclusive) || void 0 === i || i; if (ec(r)) return r.isPurchasedViaGoogle ? G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_PENDING_CANCELATION_NO_PRICE.format({ quantity: c }) : I ? G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_PENDING_CANCELATION.format({ quantity: c, rate: (0, M.formatRate)(a, _.interval, _.intervalCount) }) : G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_PENDING_CANCELATION_TAX_EXCLUSIVE.format({ quantity: c, rate: (0, M.formatRate)(a, _.interval, _.intervalCount) }); switch (r.status) { case y.SubscriptionStatusTypes.ACCOUNT_HOLD: return r.isPurchasedViaGoogle ? G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_ACCOUNT_HOLD_NO_PRICE.format({ quantity: c, boostQuantity: c }) : I ? G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_ACCOUNT_HOLD.format({ quantity: c, boostQuantity: c, rate: (0, M.formatRate)(a, _.interval, _.intervalCount) }) : G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_ACCOUNT_HOLD_TAX_EXCLUSIVE.format({ quantity: c, boostQuantity: c, rate: (0, M.formatRate)(a, _.interval, _.intervalCount) }); case y.SubscriptionStatusTypes.PAUSE_PENDING: case y.SubscriptionStatusTypes.PAUSED: return G.default.Messages.GUILD_BOOSTING_DISABLED_HEADER; default: return r.isPurchasedViaGoogle ? G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_NO_PRICE.format({ quantity: c }) : I ? G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO.format({ quantity: c, rate: (0, M.formatRate)(a, _.interval, _.intervalCount) }) : G.default.Messages.PREMIUM_GUILD_SUBSCRIPTIONS_RENEWAL_INFO_TAX_EXCLUSIVE.format({ quantity: c, rate: (0, M.formatRate)(a, _.interval, _.intervalCount) }) } } function eI(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3], r = null != t ? H(e.id, !1, i, t) : F(e.id, !1, i), s = (0, M.formatPrice)(r.amount, r.currency); return e.currency !== b.CurrencyCodes.USD && !0 === n && (s = s.concat("*")), s } function eT(e, t, n) { let i = eI(e, t, n); return (0, M.formatRate)(i, e.interval, e.intervalCount) } function ef(e) { let { status: t, renewalMutations: n } = e; return t === y.SubscriptionStatusTypes.CANCELED || null != n && (0, S.isNoneSubscription)(n.planId) && !e.isPurchasedExternally } function eS(e) { return e === y.SubscriptionStatusTypes.PAST_DUE || e === y.SubscriptionStatusTypes.ACCOUNT_HOLD || e === y.SubscriptionStatusTypes.BILLING_RETRY } function eh(e, t, n, i) { let r = null != t ? { paymentSourceId: t, currency: n } : { country: A.default.ipCountryCodeWithFallback, currency: n }, s = N.default.get(e); if (null == s) { let t = Error("Unsupported plan"); throw (0, O.captureBillingException)(t, { tags: { planId: e } }), t } let a = N.default.getForSkuAndInterval(eG(U.PremiumSubscriptionSKUs.GUILD), s.interval, s.intervalCount); if (null == a) { let t = Error("Unsupported plan"); throw (0, O.captureBillingException)(t, { tags: { planId: e } }), t } return H(a.id, (0, v.isPremium)(i), !1, r) } function eA(e, t, n) { let i = t.id; if (null != e) switch (i) { case U.SubscriptionPlans.PREMIUM_MONTH_TIER_0: return G.default.Messages.PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_MONTH_TIER_0; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_0: return G.default.Messages.PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_YEAR_TIER_0; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_1: return G.default.Messages.PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_MONTH_TIER_1; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_1: return G.default.Messages.PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_YEAR_TIER_1; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_2: return G.default.Messages.PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_MONTH_TIER_2; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_2: return G.default.Messages.PREMIUM_SWITCH_REVIEW_HEADER_PREMIUM_YEAR_TIER_2 } switch (i) { case U.SubscriptionPlans.PREMIUM_MONTH_TIER_0: return n ? G.default.Messages.BILLING_SELECT_PLAN : G.default.Messages.BILLING_SELECT_PLAN_PREMIUM_MONTH_TIER_0; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_0: return n ? G.default.Messages.BILLING_SELECT_PLAN : G.default.Messages.BILLING_SELECT_PLAN_PREMIUM_YEAR_TIER_0; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_1: return n ? G.default.Messages.BILLING_SELECT_PLAN : G.default.Messages.BILLING_SELECT_PLAN_PREMIUM_MONTH_TIER_1; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_1: return n ? G.default.Messages.BILLING_SELECT_PLAN : G.default.Messages.BILLING_SELECT_PLAN_PREMIUM_YEAR_TIER_1; case U.SubscriptionPlans.PREMIUM_MONTH_TIER_2: return n ? G.default.Messages.BILLING_SELECT_PLAN : G.default.Messages.BILLING_SELECT_PLAN_PREMIUM_MONTH_TIER_2; case U.SubscriptionPlans.PREMIUM_YEAR_TIER_2: return n ? G.default.Messages.BILLING_SELECT_PLAN : G.default.Messages.BILLING_SELECT_PLAN_PREMIUM_YEAR_TIER_2; case U.SubscriptionPlans.PREMIUM_3_MONTH_TIER_2: case U.SubscriptionPlans.PREMIUM_6_MONTH_TIER_2: return G.default.Messages.BILLING_SELECT_PLAN_PREMIUM_MONTHS_TIER_2.format({ intervalCount: t.intervalCount }); case U.SubscriptionPlans.NONE_MONTH: case U.SubscriptionPlans.NONE_YEAR: case U.SubscriptionPlans.NONE_3_MONTH: case U.SubscriptionPlans.NONE_6_MONTH: case U.SubscriptionPlans.PREMIUM_MONTH_GUILD: case U.SubscriptionPlans.PREMIUM_YEAR_GUILD: case U.SubscriptionPlans.PREMIUM_3_MONTH_GUILD: case U.SubscriptionPlans.PREMIUM_6_MONTH_GUILD: return G.default.Messages.GUILD_SUBSCRIPTION_PURCHASE_MODAL_SUBMIT } let r = Error("User is purchasing an unsupported plan"); throw (0, O.captureBillingException)(r, { tags: { planId: i } }), r } function em(e) { let t = e.invoiceItems[0].subscriptionPlanId, n = N.default.get(t); return l()(null != n, "Missing subscriptionPlan"), { intervalType: n.interval, intervalCount: n.intervalCount } } function eN(e) { let { intervalType: t = U.SubscriptionIntervalTypes.MONTH, intervalCount: n = 1, capitalize: i = !1 } = e; switch (t) { case U.SubscriptionIntervalTypes.DAY: if (n >= 7 && n % 7 == 0) return i ? G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_WEEKS.format({ weeks: n / 7 }) : G.default.Messages.PREMIUM_TRIAL_FREE_DURATION_WEEKS.format({ weeks: n / 7 }); return i ? G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_DAYS.format({ days: n }) : G.default.Messages.PREMIUM_TRIAL_FREE_DURATION_DAYS.format({ days: n }); case U.SubscriptionIntervalTypes.MONTH: return i ? G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_MONTHS.format({ months: n }) : G.default.Messages.PREMIUM_TRIAL_FREE_DURATION_MONTHS.format({ months: n }); case U.SubscriptionIntervalTypes.YEAR: return i ? G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_HEADING_YEARS.format({ years: n }) : G.default.Messages.PREMIUM_TRIAL_FREE_DURATION_YEARS.format({ years: n }); default: throw Error("Unsupported interval duration.") } } function ep(e) { let { intervalType: t = U.SubscriptionIntervalTypes.MONTH, intervalCount: n = 1 } = e; switch (t) { case U.SubscriptionIntervalTypes.DAY: if (n >= 7 && n % 7 == 0) return G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_CTA_WEEKS.format({ weeks: n / 7 }); return G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_CTA_DAYS.format({ days: n }); case U.SubscriptionIntervalTypes.MONTH: return G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_CTA_MONTHS.format({ months: n }); case U.SubscriptionIntervalTypes.YEAR: return G.default.Messages.PREMIUM_TRIAL_MARKETING_TRIAL_CTA_YEARS.format({ years: n }); default: throw Error("Unsupported interval duration.") } } function eO(e) { let { intervalType: t = U.SubscriptionIntervalTypes.MONTH, intervalCount: n = 1, capitalize: i = !1 } = e; switch (t) { case U.SubscriptionIntervalTypes.DAY: if (n >= 7 && n % 7 == 0) return i ? G.default.Messages.DURATION_WEEKS_CAPITALIZE.format({ weeks: n / 7 }) : G.default.Messages.DURATION_WEEKS.format({ weeks: n / 7 }); return i ? G.default.Messages.DURATION_DAYS_CAPITALIZE.format({ days: n }) : G.default.Messages.DURATION_DAYS.format({ days: n }); case U.SubscriptionIntervalTypes.MONTH: return i ? G.default.Messages.DURATION_MONTHS_CAPITALIZE.format({ months: n }) : G.default.Messages.DURATION_MONTHS.format({ months: n }); case U.SubscriptionIntervalTypes.YEAR: return i ? G.default.Messages.DURATION_YEARS_CAPITALIZE.format({ years: n }) : G.default.Messages.DURATION_YEARS.format({ years: n }); default: throw Error("Unsupported interval duration.") } } function eC(e, t) { switch (e) { case y.PaymentGateways.APPLE_PARTNER: case y.PaymentGateways.APPLE: return w[t]; case y.PaymentGateways.GOOGLE: return k[t] } throw Error("Invalid external payment gateway ".concat(e)) } function eR(e, t) { return (0, v.isPremium)(e) || eS(null == t ? void 0 : t.status) } function eg(e, t) { var n, i; let r = [], s = (null !== (i = null === (n = e.renewalMutations) || void 0 === n ? void 0 : n.items) && void 0 !== i ? i : e.items).find(e => U.PREMIUM_PLANS.has(e.planId)); return null != s && r.push(s), r.push(...t), r.map(t => { for (let n of e.items) if (t.planId === n.planId) return { ...n, ...t }; return t }) } function eL(e) { return e.filter(e => !U.PREMIUM_PLANS.has(e.planId)) } function ev(e, t, n, i) { var r, s; l()(i.has(t), "Expected planId in group"); let a = !1, o = (null !== (s = null === (r = e.renewalMutations) || void 0 === r ? void 0 : r.items) && void 0 !== s ? s : e.items).map(e => i.has(e.planId) ? (a = !0, { ...e, quantity: n, planId: t }) : e); if (!a) { let i = { planId: t, quantity: n }, r = e.items.find(e => e.planId === t); null != r && (i.id = r.id), o.push(i) } return o.filter(e => 0 !== e.quantity) } function eD(e, t) { return ev(e, t, 1, U.PREMIUM_PLANS) } function eM(e, t, n) { return ev(e, n, t, U.PREMIUM_GUILD_SUBSCRIPTION_PLANS) } function ey(e) { var t; let n = null !== (t = e.find(e => !("id" in e))) && void 0 !== t ? t : e.find(e => U.PREMIUM_PLANS.has(e.planId)); if (null != n) { let t = N.default.get(n.planId); l()(null != t, "Missing plan"), e = e.map(e => { if (e === n) return e; let i = N.default.get(e.planId); l()(null != i, "Missing plan"); let r = N.default.getForSkuAndInterval(i.skuId, t.interval, t.intervalCount); return l()(null != r, "Missing planForInterval"), { ...e, planId: r.id } }) } return e } function eP(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { useSpace: !0 }, n = U.PremiumUserLimits[e].fileSize; return (0, R.formatSize)(n / 1024, { useKibibytes: !0, useSpace: t.useSpace }) } function eU(e) { return null == e ? null : e.items.find(e => U.PREMIUM_GUILD_SUBSCRIPTION_PLANS.has(e.planId)) } function eb(e) { let t = null != e ? x(e) : null; return null != t ? ei(t.planId) : null } function eG(e) { return e } t.default = Object.freeze({ isNewUser: e => null != e && Date.now() - e.createdAt.getTime() < 2592e6, isPremiumAtLeast: v.isPremiumAtLeast, isPremium: v.isPremium, isPremiumExactly: v.isPremiumExactly, getPrice: H, getDefaultPrice: F, getInterval: function(e) { let t = U.SubscriptionPlanInfo[e]; if (null != t) return { intervalType: t.interval, intervalCount: t.intervalCount }; let n = Error("Unsupported plan"); throw (0, O.captureBillingException)(n, { tags: { planId: e } }), n }, getIntervalString: W, getIntervalStringAsNoun: K, getPremiumType: z, getDisplayName: Z, getDisplayPremiumType: q, getPremiumPlanOptions: en, getUpgradeEligibilities: er, getPlanDescription: $, isPremiumSku: function(e) { return e === U.PremiumSubscriptionSKUs.TIER_0 || e === U.PremiumSubscriptionSKUs.TIER_1 || e === U.PremiumSubscriptionSKUs.TIER_2 }, getClosestUpgrade: function(e) { let t = U.SubscriptionPlanInfo[e]; if (null == t) throw Error("Unrecognized plan."); let { interval: n } = t, i = er(e); for (let e of Object.keys(U.SubscriptionPlanInfo)) { let { interval: t } = U.SubscriptionPlanInfo[e]; if (n === t && i.includes(e)) return e } return null }, getIntervalMonths: function(e, t) { if (e === U.SubscriptionIntervalTypes.MONTH) return t; if (e === U.SubscriptionIntervalTypes.YEAR) return 12 * t; throw Error("".concat(e, " interval subscription period not implemented")) }, getUserMaxFileSize: L.getUserMaxFileSize, getSkuIdForPlan: ei, getSkuIdForPremiumType: function(e) { switch (e) { case U.PremiumTypes.TIER_0: return U.PremiumSubscriptionSKUs.TIER_0; case U.PremiumTypes.TIER_1: return U.PremiumSubscriptionSKUs.TIER_1; case U.PremiumTypes.TIER_2: return U.PremiumSubscriptionSKUs.TIER_2 } }, getNumIncludedPremiumGuildSubscriptionSlots: function(e) { if (z(e) === U.PremiumTypes.TIER_2) return U.NUM_FREE_GUILD_BOOSTS_WITH_PREMIUM; return 0 }, getBillingInformationString: function(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = n ? (0, M.formatPrice)(t.invoiceItems.filter(e => U.PREMIUM_TIER_2_PLANS.has(e.subscriptionPlanId)).map(e => e.amount).reduce((e, t) => t + e, 0), t.currency) : (0, M.formatPrice)(t.total, t.currency); if (e.status === y.SubscriptionStatusTypes.CANCELED) return G.default.Messages.PREMIUM_SETTINGS_CANCELLED_INFO.format({ endDate: t.subscriptionPeriodStart }); if (e.status === y.SubscriptionStatusTypes.PAUSE_PENDING) return G.default.Messages.PREMIUM_SETTINGS_PAUSE_PENDING_INFO.format({ pauseDate: e.currentPeriodEnd, resumeDate: e.pauseEndsAt }); if (e.status === y.SubscriptionStatusTypes.PAUSED) return null == e.pauseEndsAt ? n ? G.default.Messages.PREMIUM_SETTINGS_PAUSED_INFO_WITH_PLAN.format({ planName: G.default.Messages.PREMIUM, price: i }) : G.default.Messages.PREMIUM_SETTINGS_PAUSED_INFO : n ? G.default.Messages.PREMIUM_SETTINGS_PAUSE_ENDS_AT_INFO_WITH_PLAN.format({ planName: G.default.Messages.PREMIUM, resumeDate: e.pauseEndsAt, price: i }) : G.default.Messages.PREMIUM_SETTINGS_PAUSE_ENDS_AT_INFO.format({ resumeDate: e.pauseEndsAt }); else if (e.status === y.SubscriptionStatusTypes.PAST_DUE) { var r, s; let t = ed(e).expiresDate; return (e.isPurchasedViaGoogle && (null === (r = e.metadata) || void 0 === r ? void 0 : r.google_grace_period_expires_date) != null && (t = d()(e.metadata.google_grace_period_expires_date)), e.isPurchasedViaApple && (null === (s = e.metadata) || void 0 === s ? void 0 : s.apple_grace_period_expires_date) != null && (t = d()(e.metadata.apple_grace_period_expires_date)), e.isPurchasedExternally) ? G.default.Messages.PREMIUM_SETTINGS_PAST_DUE_INFO_EXTERNAL.format({ endDate: t, paymentGatewayName: b.PaymentGatewayToFriendlyName[e.paymentGateway], paymentSourceLink: eC(e.paymentGateway, "PAYMENT_SOURCE_MANAGEMENT") }) : G.default.Messages.PREMIUM_SETTINGS_PAST_DUE_INFO.format({ endDate: t, price: i }) } else return e.status === y.SubscriptionStatusTypes.BILLING_RETRY ? G.default.Messages.PREMIUM_SETTINGS_ACCOUNT_HOLD_INFO_PRICE.format({ endDate: d()(e.currentPeriodStart).add(U.PAID_SUBSCRIPTION_MAX_BILLING_RETRY_DAYS, "days"), price: i }) : e.status === y.SubscriptionStatusTypes.ACCOUNT_HOLD ? e.isPurchasedViaGoogle && !(0, g.isAndroid)() ? G.default.Messages.PREMIUM_SETTINGS_ACCOUNT_HOLD_INFO_EXTERNAL.format({ endDate: d()(e.currentPeriodStart).add(U.MAX_ACCOUNT_HOLD_DAYS, "days"), paymentGatewayName: b.PaymentGatewayToFriendlyName[e.paymentGateway], paymentSourceLink: eC(e.paymentGateway, "PAYMENT_SOURCE_MANAGEMENT") }) : G.default.Messages.PREMIUM_SETTINGS_ACCOUNT_HOLD_INFO_PRICE.format({ endDate: d()(e.currentPeriodStart).add(U.MAX_ACCOUNT_HOLD_DAYS, "days"), price: i }) : function(e) { return null != e.paymentSourceId && e_(e.paymentSourceId) }(e) ? G.default.Messages.PREMIUM_SETTINGS_PREPAID_THROUGH_DATE.format({ prepaidEndDate: e.currentPeriodEnd }) : e.status === y.SubscriptionStatusTypes.UNPAID ? G.default.Messages.PREMIUM_SETTINGS_PAYMENT_PROCESSING.format({ maxProcessingTimeInDays: U.MAX_PAYMENT_PROCESSING_TIME_DAYS }) : e.isPurchasedExternally ? G.default.Messages.PREMIUM_SETTINGS_RENEWAL_INFO_EXTERNAL.format({ renewalDate: t.subscriptionPeriodStart, paymentGatewayName: b.PaymentGatewayToFriendlyName[e.paymentGateway], subscriptionManagementLink: eC(e.paymentGateway, "SUBSCRIPTION_MANAGEMENT") }) : n ? G.default.Messages.PREMIUM_SETTINGS_RENEWAL_INFO_WITH_PLAN.format({ planName: G.default.Messages.PREMIUM, renewalDate: t.subscriptionPeriodStart, price: i }) : G.default.Messages.PREMIUM_SETTINGS_RENEWAL_INFO.format({ renewalDate: t.subscriptionPeriodStart, price: i }) }, isNoneSubscription: S.isNoneSubscription, getPlanIdFromInvoice: function(e, t) { let { planId: n } = e; if (e.status === y.SubscriptionStatusTypes.CANCELED || e.status === y.SubscriptionStatusTypes.PAUSE_PENDING) return n; l()(null != t, "Expected invoicePreview"); let i = t.invoiceItems.find(e => { let { subscriptionPlanId: t } = e; return eo(t) }); return n = null == i || (0, S.isNoneSubscription)(i.subscriptionPlanId) ? e.planId : null != e.renewalMutations && e.renewalMutations.planId !== e.planId ? e.planId : i.subscriptionPlanId }, getStatusFromInvoice: function(e, t) { let { status: n } = e; if (e.status === y.SubscriptionStatusTypes.CANCELED || e.status === y.SubscriptionStatusTypes.PAUSE_PENDING) return n; l()(null != t, "Expected invoicePreview"); let i = t.invoiceItems.find(e => { let { subscriptionPlanId: t } = e; return eo(t) }); return (null == i || (0, S.isNoneSubscription)(i.subscriptionPlanId)) && (n = y.SubscriptionStatusTypes.CANCELED), n }, isBaseSubscriptionCanceled: ef, getPremiumGuildIntervalPrice: eh, hasAccountCredit: function(e) { return null != e && 0 !== e.size && Array.from(e).some(e => { let { subscriptionPlanId: t, parentId: n, consumed: i } = e; return null != t && null != n && !i }) }, getBillingReviewSubheader: eA, getIntervalForInvoice: em, getPremiumPlanItem: x, getGuildBoostPlanItem: eU, isBoostOnlySubscription: function(e) { return null != e && null == x(e) && null != eU(e) }, getPremiumSkuIdForSubscription: eb, getPremiumTypeFromSubscription: function(e) { if (null != e) { let t = x(e); if (null != t) return z(t.planId) } }, getPremiumTypeFromSubscriptionRenewalMutations: function(e) { if (null != e && null != e.renewalMutations) { let t = x(e.renewalMutations); if (null != t) return z(t.planId) } }, getPremiumGradientColor: function(e) { switch (e) { case U.PremiumTypes.TIER_0: return P.Gradients.PREMIUM_TIER_0; case U.PremiumTypes.TIER_1: return P.Gradients.PREMIUM_TIER_1; case U.PremiumTypes.TIER_2: return P.Gradients.PREMIUM_TIER_2 } }, castPremiumSubscriptionAsSkuId: eG, canUseAnimatedEmojis: function(e) { return (0, I.canUserUse)(I.ANIMATED_EMOJIS, e) }, canUseEmojisEverywhere: function(e) { return (0, I.canUserUse)(I.EMOJIS_EVERYWHERE, e) }, canUseSoundboardEverywhere: function(e) { return (0, I.canUserUse)(I.SOUNDBOARD_EVERYWHERE, e) }, canUseCustomCallSounds: function(e) { return (0, I.canUserUse)(I.CUSTOM_CALL_SOUNDS, e) }, canUploadLargeFiles: function(e) { return (0, I.canUserUse)(I.UPLOAD_LARGE_FILES, e) }, canUseBadges: function(e) { return (0, I.canUserUse)(I.PROFILE_BADGES, e) }, canUseHighVideoUploadQuality: function(e) { return (0, I.canUserUse)(I.INCREASED_VIDEO_UPLOAD_QUALITY, e) }, canEditDiscriminator: function(e) { return (0, I.canUserUse)(I.CUSTOM_DISCRIMINATOR, e) }, hasBoostDiscount: function(e) { return (0, I.canUserUse)(I.BOOST_DISCOUNT, e) }, canUseAnimatedAvatar: function(e) { return (0, I.canUserUse)(I.ANIMATED_AVATAR, e) }, canUseFancyVoiceChannelReactions: function(e) { return (0, I.canUserUse)(I.FANCY_VOICE_CHANNEL_REACTIONS, e) }, canInstallPremiumApplications: function(e) { return (0, I.canUserUse)(I.INSTALL_PREMIUM_APPLICATIONS, e) }, canUseIncreasedMessageLength: function(e) { return (0, I.canUserUse)(I.INCREASED_MESSAGE_LENGTH, e) }, canUseIncreasedGuildCap: function(e) { return (0, I.canUserUse)(I.INCREASED_GUILD_LIMIT, e) }, canRedeemPremiumPerks: function(e) { return (0, I.canUserUse)(I.REDEEM_PREMIUM_PERKS, e) }, canUsePremiumProfileCustomization: function(e) { return (0, I.canUserUse)(I.PROFILE_PREMIUM_FEATURES, e) }, canUsePremiumAppIcons: function(e) { return (0, I.canUserUse)(I.APP_ICONS, e) }, canUsePremiumGuildMemberProfile: function(e) { return (0, I.canUserUse)(I.PREMIUM_GUILD_MEMBER_PROFILE, e) }, canUseClientThemes: function(e) { return (0, I.canUserUse)(I.CLIENT_THEMES, e) }, canStreamQuality: function(e, t) { return !! function(e) { var t; let n = E.default.getPerksDemos(); return null !== (t = null == n ? void 0 : n[e]) && void 0 !== t && t }(_.EntitlementFeatureNames.STREAM_HIGH_QUALITY) || ("high" === e ? (0, I.canUserUse)(I.STREAM_HIGH_QUALITY, t) : "mid" === e && (0, I.canUserUse)(I.STREAM_MID_QUALITY, t)) }, hasFreeBoosts: function(e) { return (0, I.canUserUse)(I.FREE_BOOSTS, e) }, canUseCustomStickersEverywhere: function(e) { return (0, I.canUserUse)(I.STICKERS_EVERYWHERE, e) }, canUseCustomBackgrounds: function(e) { return (0, I.canUserUse)(I.VIDEO_FILTER_ASSETS, e) }, canUseCollectibles: function(e) { return (0, I.canUserUse)(I.COLLECTIBLES, e) }, canUseCustomNotificationSounds: function(e) { return (0, I.canUserUse)(I.CUSTOM_NOTIFICATION_SOUNDS, e) }, formatPriceString: function(e, t) { let n = (0, M.formatPrice)(e.amount, e.currency), i = K(t); return "".concat(n, "/").concat(i) }, StreamQuality: r }) }, 937615: function(e, t, n) { "use strict"; n.r(t), n.d(t, { formatPercent: function() { return u }, formatPrice: function() { return o }, formatRate: function() { return l } }), n("411104"); var i = n("221513"), r = n("706454"), s = n("474936"), a = n("689938"); function o(e, t, n) { var s; let a = null !== (s = null == n ? void 0 : n.localeOverride) && void 0 !== s ? s : r.default.locale; return (0, i.formatPrice)(e, t, a, n) } function l(e, t, n) { if (t === s.SubscriptionIntervalTypes.YEAR) return a.default.Messages.BILLING_PRICE_PER_YEAR.format({ price: e }); if (t === s.SubscriptionIntervalTypes.MONTH && 1 === n) return a.default.Messages.BILLING_PRICE_PER_MONTH.format({ price: e }); if (t === s.SubscriptionIntervalTypes.MONTH && n > 1) return a.default.Messages.BILLING_PRICE_PER_MULTI_MONTHS.format({ price: e, intervalCount: n }); throw Error("Unsupported interval type: ".concat(t, ", and interval count: ").concat(n)) } function u(e, t) { return Intl.NumberFormat(e, { style: "percent", minimumFractionDigits: 0 }).format(t) } }, 212895: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fetchSubscriptionPlansOnNewPaymentSource: function() { return E }, getCurrencies: function() { return I }, planHasCurrency: function() { return T }, useCurrencyWithPaymentSourceChange: function() { return f } }), n("47120"); var i = n("470079"), r = n("512722"), s = n.n(r), a = n("570140"), o = n("821849"), l = n("15640"), u = n("509545"), d = n("74538"), _ = n("981631"), c = n("474936"); function E(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [...c.ACTIVE_PREMIUM_SKUS]; return null == e || u.default.hasPaymentSourceForSKUIds(e, t) ? Promise.resolve() : new Promise(e => { a.default.wait(async () => { await (0, o.fetchSubscriptionPlansBySKUs)(t), e() }) }) } function I(e, t, n) { let i, r = [], a = [], o = { purchaseType: n ? _.PriceSetAssignmentPurchaseTypes.GIFT : _.PriceSetAssignmentPurchaseTypes.DEFAULT }; return i = "string" == typeof e ? u.default.get(e) : e, s()(i, "subscription plan not loaded"), null != t && u.default.hasPaymentSourceForSKUId(t, i.skuId) && (o.paymentSourceId = t), (r = (a = (0, d.experimentalGetPrices)(i.id, o)).map(e => e.currency)).length < 1 && (r = [_.CurrencyCodes.USD]), r } function T(e, t, n) { let i = u.default.get(e); return s()(null != i, "plan is undefined"), I(i, n, !1).includes(t) } function f(e, t, n, r, s) { let [a, o] = i.useReducer((e, t) => ({ ...e, ...t }), null != n ? { paymentSourceId: n, currency: e, loaded: !1 } : { currency: e, loaded: !1 }), d = (0, l.useSubscriptionPlansLoaded)(s); i.useEffect(() => { (async () => { await E(n, s); let e = []; null != t && null != u.default.get(t) && (e = I(t, n, r)), e.length > 0 ? o({ paymentSourceId: n, currency: e[0], loaded: !0 }) : o({ paymentSourceId: n, loaded: !1 }) })() }, [n, JSON.stringify(s), t, r, d]); let _ = a.paymentSourceId !== n || null == t || !d || !0 !== a.loaded; return { hasFetchedSubscriptionPlans: d, priceOptions: a, setCurrency: e => { o({ currency: e }) }, currencyLoading: _ } } }, 374023: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ProcessArgs: function() { return o } }); var i, r, s, a = n("579806"); class o { static get() { if (null == o.cached) { var e, t; let n = null === a.default || void 0 === a.default ? void 0 : null === (t = a.default.processUtils) || void 0 === t ? void 0 : null === (e = t.getMainArgvSync) || void 0 === e ? void 0 : e.call(t); null != n && n.length > 1 && n.shift(), o.cached = null != n ? n : [] } return o.cached } static contains(e) { return o.get().includes(e) } static isEnvVariableTrue(e) { var t, n; if (void 0 === a.default) return !1; switch (null === a.default || void 0 === a.default ? void 0 : null === (n = a.default.process) || void 0 === n ? void 0 : null === (t = n.env) || void 0 === t ? void 0 : t[e]) { case "1": case "true": return !0 } return !1 } static isDisallowPopupsSet() { return o.contains("--disallow-popups") || o.isEnvVariableTrue("DISCORD_DISALLOW_POPUPS") } static isDiscordTestSet() { return o.isEnvVariableTrue("DISCORD_TEST") } static isDiscordGatewayPlaintextSet() { return !1 } } s = void 0, (r = "cached") in(i = o) ? Object.defineProperty(i, r, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : i[r] = s }, 848479: function(e, t, n) { "use strict"; n.r(t), n("724458"); var i = n("259443"), r = n("579806"), s = n("77450"), a = n("998502"); let o = new i.Logger("ProcessUtilsElectron"); class l extends s.ProcessUtils { setupReportingTimer() { var e, t; let n = null === r.default || void 0 === r.default ? void 0 : null === (e = r.default.processUtils) || void 0 === e ? void 0 : e.setMemoryInformation; if (null == n) { o.log("setMemoryInformation not available."); return }(null === (t = performance.memory) || void 0 === t ? void 0 : t.usedJSHeapSize) == null && o.error("usedJSHeapSize is not available."); setInterval(() => { var e, t, i; let r = null !== (t = null === (e = performance.memory) || void 0 === e ? void 0 : e.usedJSHeapSize) && void 0 !== t ? t : 0; n({ memoryUsageKB: null !== (i = this.lastMemoryUsageKB) && void 0 !== i ? i : 0, usedJSHeapSizeKB: Math.ceil(r / 1024) }) }, 1e4) } getProcessUptime() { var e, t; return null === r.default || void 0 === r.default ? void 0 : null === (t = r.default.processUtils) || void 0 === t ? void 0 : null === (e = t.getProcessUptime) || void 0 === e ? void 0 : e.call(t) } getCurrentCPUUsagePercent() { var e, t; return null === r.default || void 0 === r.default ? void 0 : null === (t = r.default.processUtils) || void 0 === t ? void 0 : null === (e = t.getCurrentCPUUsagePercent) || void 0 === e ? void 0 : e.call(t) } getCumulativeCPUUsage() { var e, t; return null === r.default || void 0 === r.default ? void 0 : null === (t = r.default.processUtils) || void 0 === t ? void 0 : null === (e = t.getCumulativeCPUUsage) || void 0 === e ? void 0 : e.call(t) } getCurrentMemoryUsageKB() { let e = l.getCurrentMemoryUsageKBCore(); return this.lastMemoryUsageKB = e, e } static getCurrentMemoryUsageKBCore() { try { let e = a.default.getDiscordMemoryUsage(); if (null == e) return 0; let t = Object.values(e).reduce((e, t) => e + t, 0); return Math.ceil(t / 1024) } catch (e) { return 0 } } getMemoryUsageDetails() { return a.default.getDiscordMemoryUsage() } getMemoryUsageElectronRenderer() { try { return a.default.getDiscordMemoryUsageElectronRenderer() } catch (e) { return null } } getMemoryUsageElectronRendererUsedHeapSize() { var e, t; return null === r.default || void 0 === r.default ? void 0 : null === (t = r.default.processUtils) || void 0 === t ? void 0 : null === (e = t.getUsedHeapSize) || void 0 === e ? void 0 : e.call(t) } constructor() { var e, t, n, i, s; super(), n = this, s = void 0, (i = "lastMemoryUsageKB") in n ? Object.defineProperty(n, i, { value: s, enumerable: !0, configurable: !0, writable: !0 }) : n[i] = s, this.cpuCoreCount = null === r.default || void 0 === r.default ? void 0 : null === (t = r.default.processUtils) || void 0 === t ? void 0 : null === (e = t.getCPUCoreCount) || void 0 === e ? void 0 : e.call(t), this.setupReportingTimer() } } t.default = new l }, 77450: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ProcessUtils: function() { return i } }); class i { getCPUCoreCount() { return this.cpuCoreCount } constructor() { var e, t, n; e = this, n = void 0, (t = "cpuCoreCount") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 936101: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getPurchaseToken: function() { return l }, getPurchaseTokenHash: function() { return u } }), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"), n("642549"), n("47120"); var i = n("153832"), r = n("433517"), s = n("70956"); let a = "purchase_token", o = 60 * s.default.Millis.DAY; function l() { let e = r.Storage.get(a); if (null != e && e.expires >= Date.now()) return e.purchaseToken; let t = (0, i.v4)(); return r.Storage.set(a, { purchaseToken: t, expires: Date.now() + o }), t } async function u() { let e = new Uint8Array(l().split("").map(e => e.charCodeAt(0))), t = await window.crypto.subtle.digest({ name: "SHA-256" }, e); return btoa(String.fromCharCode(...new Uint8Array(t))) } }, 898450: function(e, t, n) { "use strict"; function i(e) { return Array.isArray(e) ? e[0] : e } n.r(t), n.d(t, { getFirstQueryStringValue: function() { return i } }) }, 651655: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("653041"), n("177593"), n("733860"); var i = n("427786"), r = n.n(i); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = new(n("710845")).default("Queue"); class o { enqueue(e, t, n) { this.queue.push({ message: e, success: t, logId: n }), this._drainIfNecessary() } get length() { return this.queue.length } _drainIfNecessary() { if (null !== this.timeout || 0 === this.queue.length || !0 === this.draining) return; this.draining = !0; let e = this.queue.shift(), { message: t, success: n, logId: i } = e; this.logger.log("Draining message from queue LogId:".concat(i, " QueueLength: ").concat(this.queue.length)), this.drain(t, (t, r) => { if (this.logger.log("Finished draining message from queue LogId:".concat(i, " QueueLength: ").concat(this.queue.length)), this.draining = !1, null == t) { setImmediate(() => this._drainIfNecessary()); try { n(r) } catch (e) { this.logger.error("", e) } } else { var s; let n = null !== (s = t.retryAfter) && void 0 !== s ? s : this.defaultRetryAfter; this.logger.info("Rate limited. Delaying draining of queue for ".concat(n, " ms. LogId:").concat(i, " QueueLength: ").concat(this.queue.length)), this.timeout = setTimeout(() => { this.queue.unshift(e), this.timeout = null, this._drainIfNecessary() }, n) } }) } constructor(e = a, t = 100) { s(this, "logger", void 0), s(this, "defaultRetryAfter", void 0), s(this, "queue", void 0), s(this, "timeout", void 0), s(this, "draining", void 0), this.logger = e, this.defaultRetryAfter = t, this.queue = new(r()), this.timeout = null, this.draining = !1 } } }, 868158: function(e, t, n) { "use strict"; n.r(t), n.d(t, { hydrateInitialGuild: function() { return v }, hydratePreviouslyUnavailableGuild: function() { return P }, hydrateReadyPayloadPrioritized: function() { return g }, hydrateReadySupplementalPayload: function() { return C }, preloadReadyPayloadData: function() { return R } }), n("653041"), n("47120"), n("411104"); var i = n("512722"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("287328"), l = n("406966"), u = n("795513"), d = n("591526"), _ = n("261875"), c = n("768433"), E = n("710845"), I = n("339085"), T = n("926491"), f = n("131704"), S = n("430824"), h = n("306680"), A = n("411198"); let m = new E.default("ReadyPayloadUtils"), N = {}, p = null, O = {}; function C(e, t) { var n; let { guilds: i, merged_members: r, merged_presences: s, ...a } = e, o = D(O, null == s ? void 0 : s.friends), l = null !== (n = null == i ? void 0 : i.map((e, t) => { let n = D(O, null == s ? void 0 : s.guilds[t]), i = D(O, null == r ? void 0 : r[t]); return { ...e, unavailable: void 0 === e.voice_states, presences: n, members: i } })) && void 0 !== n ? n : [], u = L(t, i, e => ({ id: e.id, members: e.members, presences: e.presences, embedded_activities: e.embedded_activities, voice_states: e.voice_states, unavailable: !1 })); return null != u && l.push(u), O = {}, { ...a, presences: o, guilds: l } } function R() { let e = o.default.database(), t = (0, c.isCacheEnabled)() ? l.default.getCommittedVersions() : Promise.resolve({}), n = (0, c.isCacheEnabled)() ? d.default.getGuildIds() : Promise.resolve(new Set); return Promise.all([t, n, null != e ? u.default.okAsync(e) : Promise.resolve(!1)]).then(e => { let [t, n, i] = e; return { guildVersions: t, guildChannels: n, databaseOk: i } }) } function g(e, t, n) { var i; let { users: s, relationships: l, private_channels: u, merged_members: d, guilds: c, ...E } = e; (function(e) { null != o.default.database() && !1 === e.databaseOk && _.default.replaceDisableAllDatabases("ReadyPayloadUtils: database was not ok"), N = {}; let t = Object.values(S.default.getGuilds()), n = I.default.getGuilds(), i = T.default.getRawStickersByGuild(), r = h.default.getReadStatesByChannel(); for (let o of t) { var s, a, l; o.id in e.guildVersions && e.guildChannels.has(o.id) && (N[o.id] = { properties: A.toServer(o), roles: S.default.getRoles(o.id), emojis: null !== (a = null === (s = n[o.id]) || void 0 === s ? void 0 : s.rawEmojis) && void 0 !== a ? a : null, stickers: null !== (l = i.get(o.id)) && void 0 !== l ? l : null, readStates: r }) } })(n); let f = D(O = a().keyBy(s, e => e.id), l); null == u || u.forEach(e => { let t = e.recipient_ids; null != t && (e.recipients = t.map(e => (r()(null != O[e], "Missing user in compressed ready payload"), O[e]))), delete e.recipient_ids }); let m = null !== (i = null == c ? void 0 : c.map((e, t) => !0 === e.unavailable ? e : (e.members = D(O, null == d ? void 0 : d[t]), y(e)))) && void 0 !== i ? i : [], p = L(t, c, e => y(e)); return null != p && m.push(p), { ...E, users: s, presences: [], relationships: f, guilds: m, private_channels: null != u ? u : [] } } function L(e, t, n) { return null == p || p.identifyTime !== e || null != t && t.some(e => e.id === p.guild.id) ? null : n(p.guild) } function v(e, t) { var n, i, r; let s = S.default.getGuild(e.id), a = P(e, null == s ? void 0 : { properties: A.toServer(s), roles: S.default.getRoles(s.id), emojis: null !== (i = null === (n = I.default.getGuilds()[s.id]) || void 0 === n ? void 0 : n.rawEmojis) && void 0 !== i ? i : null, stickers: null !== (r = T.default.getRawStickersByGuild().get(s.id)) && void 0 !== r ? r : null, readStates: {} }); return p = { guild: e, identifyTime: t }, a } function D(e, t) { let n = []; return null == t || t.forEach(t => { if (null == t) return; let i = t.user_id; null != i && (r()(null != e[i], "Missing user[".concat(i, "] in compressed ready payload")), t.user = e[i]), delete t.user_id, n.push(t) }), n } function M(e) { let t = N[e]; return delete N[e], t } function y(e) { var t, n, i, r, s, a, o, l, u, d, _, c; let E = M(e.id); if ("partial" !== e.data_mode) return { id: e.id, dataMode: e.data_mode, emojis: e.emojis, guild_scheduled_events: e.guild_scheduled_events, joined_at: e.joined_at, lastMessages: e.last_messages, member_count: e.member_count, members: e.members, premium_subscription_count: e.premium_subscription_count, properties: e.properties, roles: e.roles, stage_instances: e.stage_instances, stickers: e.stickers, threads: null !== (r = null === (i = e.threads) || void 0 === i ? void 0 : i.map(t => (0, f.createChannelRecordFromServer)(t, e.id))) && void 0 !== r ? r : [], threadMessages: U(e.threads), channels: e.channels.map(t => (t.guild_id = e.id, (0, f.createChannelRecordFromServer)(t, e.id))), version: e.version, hasThreadsSubscription: e.has_threads_subscription }; if (null == E) throw m.log("no cache entry for partial guild (guild: ".concat(e.id, ", type: ready)")), Error("Guild data was missing from store, but hash was still available."); return { id: e.id, dataMode: e.data_mode, channels: null, channelUpdates: { writes: null !== (s = null === (t = e.partial_updates.channels) || void 0 === t ? void 0 : t.map(t => (0, f.createChannelRecordFromServer)(t, e.id))) && void 0 !== s ? s : [], deletes: null !== (a = e.partial_updates.deleted_channel_ids) && void 0 !== a ? a : [] }, channelTimestampUpdates: e.channel_updates, emojis: null == E.emojis ? null : b(E.emojis, e.partial_updates.emojis, e.partial_updates.deleted_emoji_ids), emojiUpdates: { writes: null !== (o = e.partial_updates.emojis) && void 0 !== o ? o : [], deletes: null !== (l = e.partial_updates.deleted_emoji_ids) && void 0 !== l ? l : [] }, guild_scheduled_events: e.guild_scheduled_events, joined_at: e.joined_at, lastMessages: e.last_messages, member_count: e.member_count, members: e.members, premium_subscription_count: e.premium_subscription_count, properties: null !== (u = e.properties) && void 0 !== u ? u : null, roles: A.filterRoleDeletes(e.id, E.roles, e.partial_updates.roles, e.partial_updates.deleted_role_ids), stage_instances: e.stage_instances, stickers: null == E.stickers ? null : b(E.stickers, e.partial_updates.stickers, e.partial_updates.deleted_sticker_ids), stickerUpdates: { writes: null !== (d = e.partial_updates.stickers) && void 0 !== d ? d : [], deletes: null !== (_ = e.partial_updates.deleted_sticker_ids) && void 0 !== _ ? _ : [] }, unableToSyncDeletes: e.unable_to_sync_deletes, threads: null !== (c = null === (n = e.threads) || void 0 === n ? void 0 : n.map(t => (0, f.createChannelRecordFromServer)(t, e.id))) && void 0 !== c ? c : [], threadMessages: U(e.threads), version: e.version, hasThreadsSubscription: e.has_threads_subscription } } function P(e, t) { var n, i, r, s, a, o, l, u, d, _, c, E; if (null == t && (t = M(e.id)), "partial" !== e.data_mode) return { id: e.id, emojis: e.emojis, guild_scheduled_events: e.guild_scheduled_events, joined_at: e.joined_at, lastMessages: e.last_messages, member_count: e.member_count, members: e.members, premium_subscription_count: e.premium_subscription_count, properties: e.properties, roles: e.roles, stage_instances: e.stage_instances, stickers: e.stickers, threads: null !== (s = null === (r = e.threads) || void 0 === r ? void 0 : r.map(t => (0, f.createChannelRecordFromServer)(t, e.id))) && void 0 !== s ? s : [], threadMessages: U(e.threads), channels: e.channels.map(t => (t.guild_id = e.id, (0, f.createChannelRecordFromServer)(t, e.id))), presences: e.presences, embedded_activities: e.embedded_activities, voice_states: e.voice_states, version: e.version, hasThreadsSubscription: e.has_threads_subscription }; if (null == t) throw m.log("no cache entry for partial guild (guild: ".concat(e.id, ", type: post_ready)")), Error("Guild data was missing from store, but hash was still available."); return { id: e.id, channels: null, channelUpdates: { writes: null !== (a = null === (n = e.partial_updates.channels) || void 0 === n ? void 0 : n.map(t => (0, f.createChannelRecordFromServer)(t, e.id))) && void 0 !== a ? a : [], deletes: null !== (o = e.partial_updates.deleted_channel_ids) && void 0 !== o ? o : [] }, channelTimestampUpdates: e.channel_updates, embedded_activities: e.embedded_activities, emojis: null == t.emojis ? null : b(t.emojis, e.partial_updates.emojis, e.partial_updates.deleted_emoji_ids), emojiUpdates: { writes: null !== (l = e.partial_updates.emojis) && void 0 !== l ? l : [], deletes: null !== (u = e.partial_updates.deleted_emoji_ids) && void 0 !== u ? u : [] }, guild_scheduled_events: e.guild_scheduled_events, joined_at: e.joined_at, lastMessages: e.last_messages, member_count: e.member_count, members: e.members, premium_subscription_count: e.premium_subscription_count, presences: e.presences, properties: null !== (d = e.properties) && void 0 !== d ? d : t.properties, roles: A.filterRoleDeletes(e.id, t.roles, e.partial_updates.roles, e.partial_updates.deleted_role_ids), stage_instances: e.stage_instances, stickers: null == t.stickers ? null : b(t.stickers, e.partial_updates.stickers, e.partial_updates.deleted_sticker_ids), stickerUpdates: { writes: null !== (_ = e.partial_updates.stickers) && void 0 !== _ ? _ : [], deletes: null !== (c = e.partial_updates.deleted_sticker_ids) && void 0 !== c ? c : [] }, unableToSyncDeletes: e.unable_to_sync_deletes, threads: null !== (E = null === (i = e.threads) || void 0 === i ? void 0 : i.map(t => (0, f.createChannelRecordFromServer)(t, e.id))) && void 0 !== E ? E : [], threadMessages: U(e.threads), voice_states: e.voice_states, version: e.version, hasThreadsSubscription: e.has_threads_subscription } } function U(e) { let t = []; if (null != e) for (let n of e) null != n.most_recent_message && t.push(n.most_recent_message); return t } function b(e, t, n) { t = null != t ? t : []; let i = new Set((null != n ? n : []).concat(t.map(e => e.id))); return e.filter(e => !i.has(e.id)).concat(t) } }, 645499: function(e, t, n) { "use strict"; function i(e) { return /^(?:discord:\/)?\/[a-zA-Z0-9_-]/.test(e) } n.r(t), n.d(t, { isSafeRedirect: function() { return i } }) }, 844070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showAcceptedNotification: function() { return c }, showPendingNotification: function() { return _ } }); var i = n("493683"), r = n("758059"), s = n("292556"), a = n("703656"), o = n("768581"), l = n("981631"), u = n("689938"); function d(e, t, n) { s.default.showNotification(o.default.getUserAvatarURL(e), e.username, t, {}, { omitViewTracking: !0, omitClickTracking: !0, tag: e.id, onClick: n }) } function _(e) { d(e, u.default.Messages.NOTIFICATION_PENDING_FRIEND_REQUEST, () => { { let { openUserProfileModal: t } = n("171368"); t({ userId: e.id }) }(0, a.transitionTo)(l.Routes.FRIENDS), r.default.setSection(l.FriendsSections.PENDING) }) } function c(e) { d(e, u.default.Messages.NOTIFICATION_ACCEPTED_FRIEND_REQUEST, () => { i.default.openPrivateChannel(e.id) }) } }, 747268: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CurrentReleaseChannel: function() { return i } }), window.GLOBAL_ENV.RELEASE_CHANNEL; let i = window.GLOBAL_ENV.RELEASE_CHANNEL }, 889711: function(e, t, n) { "use strict"; function i(e) { return new ResizeObserver(e) } function r(e, t) { e.observe(t) } function s(e, t) { e.unobserve(t) } n.r(t), n.d(t, { getResizeObserver: function() { return i }, unwatch: function() { return s }, watch: function() { return r } }) }, 405656: function(e, t, n) { "use strict"; n.r(t), n.d(t, { clearTokenCache: function() { return O }, filterHasAnswer: function() { return R }, getAutocompleteMode: function() { return S }, getFlattenedStringArray: function() { return h }, getQueryFromTokens: function() { return m }, getSearchOptionAnswer: function() { return c }, getSearchQueryFromTokens: function() { return T }, getSelectionScope: function() { return f }, getTotalResults: function() { return A }, refreshSearchTokens: function() { return g }, setIncludeNSFW: function() { return I }, showDatePicker: function() { return C }, tokenizeQuery: function() { return p } }), n("47120"), n("724458"); var i = n("392711"), r = n.n(i), s = n("349033"), a = n("999650"), o = n("731290"), l = n("594174"), u = n("709054"), d = n("981631"), _ = n("689938"); function c(e) { switch (e) { case d.SearchTokenTypes.FILTER_FROM: return _.default.Messages.SEARCH_ANSWER_FROM; case d.SearchTokenTypes.FILTER_MENTIONS: return _.default.Messages.SEARCH_ANSWER_MENTIONS; case d.SearchTokenTypes.FILTER_HAS: return _.default.Messages.SEARCH_ANSWER_HAS; case d.SearchTokenTypes.FILTER_BEFORE: case d.SearchTokenTypes.FILTER_ON: case d.SearchTokenTypes.FILTER_AFTER: return _.default.Messages.SEARCH_ANSWER_DATE; case d.SearchTokenTypes.FILTER_IN: return _.default.Messages.SEARCH_ANSWER_IN; case d.SearchTokenTypes.FILTER_FILE_TYPE: return _.default.Messages.SEARCH_ANSWER_FILE_TYPE; case d.SearchTokenTypes.FILTER_FILE_NAME: return _.default.Messages.SEARCH_ANSWER_FILE_NAME; case d.SearchTokenTypes.FILTER_PINNED: return _.default.Messages.SEARCH_ANSWER_BOOLEAN } } let E = { [d.SearchTokenTypes.FILTER_BEFORE]: !0, [d.SearchTokenTypes.FILTER_AFTER]: !0, [d.SearchTokenTypes.FILTER_ON]: !0 }; function I(e, t) { if (o.default.didAgree(t)) { let t = l.default.getCurrentUser(); null != t && (e.include_nsfw = null == t.nsfwAllowed || t.nsfwAllowed) } } function T(e) { let t = {}; for (let [n, i] of(e.forEach(e => { let { type: n } = e; if (d.IS_SEARCH_FILTER_TOKEN.test(n)) return; switch (n) { case d.SearchTokenTypes.ANSWER_BEFORE: case d.SearchTokenTypes.ANSWER_ON: case d.SearchTokenTypes.ANSWER_AFTER: let i = e.getData("start"), r = e.getData("end"); i && (t.min_id = u.default.fromTimestamp(i)), r && (t.max_id = u.default.fromTimestamp(r)); return } let s = function(e) { let t = a.default[e], n = null != t ? t.queryKey : null; return null == n && (n = "content"), n }(n); null == t[s] && (t[s] = new Set); let o = t[s]; switch (n) { case d.SearchTokenTypes.ANSWER_USERNAME_FROM: case d.SearchTokenTypes.ANSWER_USERNAME_MENTIONS: o.add(e.getData("userId")); break; case d.SearchTokenTypes.ANSWER_FILE_TYPE: case d.SearchTokenTypes.ANSWER_FILE_NAME: o.add(e.getMatch(1)); break; case d.SearchTokenTypes.ANSWER_IN: o.add(e.getData("channel").id); break; case d.SearchTokenTypes.ANSWER_HAS: o.add(e.getData("has")); break; case d.SearchTokenTypes.ANSWER_PINNED: o.add(e.getData("pinned")); break; default: o.add(e.getFullMatch().trim()) } }), Object.entries(t))) i instanceof Set && (t[n] = Array.from(i)); return t.content && (t.content = t.content.join(" ").trim(), !t.content && delete t.content), t } function f(e, t, n) { let i, r; let s = e.find((s, a) => t >= s.start && t <= s.end && n >= s.start && n <= s.end ? (null != e[a + 1] && (r = e[a + 1]), !0) : (i = s, !1)); return null == s ? null : { previousToken: i, currentToken: s, nextToken: r, focusOffset: t, anchorOffset: n } } function S(e, t) { let n; let { currentToken: i, nextToken: r, previousToken: a } = e = null != e ? e : {}; if (0 === t.length) return { type: d.SearchPopoutModes.EMPTY, filter: null, token: null }; if (null == i) return { type: d.SearchPopoutModes.FILTER_ALL, filter: null, token: null }; if (d.IS_SEARCH_FILTER_TOKEN.test(i.type)) { if (null == r || r.type === s.default.NON_TOKEN_TYPE) return { type: d.SearchPopoutModes.FILTER, filter: i.type, token: r }; if (null != r && !d.IS_SEARCH_ANSWER_TOKEN.test(r.type)) return { type: d.SearchPopoutModes.FILTER, filter: i.type, token: null } } return i.type === s.default.NON_TOKEN_TYPE && null != a && d.IS_SEARCH_FILTER_TOKEN.test(a.type) ? { type: d.SearchPopoutModes.FILTER, filter: a.type, token: i } : (i.type === s.default.NON_TOKEN_TYPE && (n = i), { type: d.SearchPopoutModes.FILTER_ALL, filter: null, token: n }) } function h(e, t) { let n = []; return r()(e).forEach(e => { if (null == e || 0 === e.results.length) return; let i = e.group; n = n.concat(e.results.map(e => { let n = e.text; if (t === d.SearchPopoutModes.FILTER_ALL) { var r; i = null !== (r = e.group) && void 0 !== r ? r : i; let t = a.default[i]; (null == t ? void 0 : t.key) != null && (null == t ? void 0 : t.key) !== "" && (n = "".concat(t.key, " ").concat(n)) } return n })) }), n.filter(e => e) } function A(e) { return e.reduce((e, t) => null == t ? e : t.results.length + e, 0) } function m(e) { return null == e ? "" : e.map(e => e.getFullMatch()).join("") } let N = new s.default; function p(e) { return N.tokenize(e) } function O() { return N.clearCache() } function C(e) { return null != e ? E[e] : null } function R(e, t) { let n = d.IS_SEARCH_FILTER_TOKEN.test(e.type); return (null != t || !n) && (null == t || !n || !!d.IS_SEARCH_ANSWER_TOKEN.test(t.type)) && !0 } function g() { (0, a.refreshSearchTokens)(), N.reset(), r()(a.default).forOwn((e, t) => N.addRule({ type: t, ...e })) } }, 136015: function(e, t, n) { "use strict"; function i(e, t) { let [, n] = e, [, i] = t; return n === i } n.r(t), n.d(t, { isVersionEqual: function() { return i } }), n("47120") }, 960048: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DSN: function() { return o } }), n("47120"), n("411104"); var i = n("464847"), r = n("289182"), s = n("358085"), a = n("998502"); let o = "https://fa97a90475514c03a42f80cd36d147c4@sentry.io/140984"; function l() { var e, t, n, i, r, o; let l = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; s.isPlatformEmbedded && a.default.updateCrashReporter({ user_id: null !== (e = l.id) && void 0 !== e ? e : "", username: null !== (t = l.username) && void 0 !== t ? t : "", email: null !== (n = l.email) && void 0 !== n ? n : "", sentry: { user: { id: null !== (i = l.id) && void 0 !== i ? i : "", username: null !== (r = l.username) && void 0 !== r ? r : "", email: null !== (o = l.email) && void 0 !== o ? o : "" } } }) } t.default = { setUser(e, t, n, i) { let r = { id: e, username: t, email: n, staff: i }; null != window.DiscordSentry && window.DiscordSentry.configureScope(e => { e.setUser(r) }), l(r) }, clearUser() { null != window.DiscordSentry && window.DiscordSentry.configureScope(e => { e.setUser(null) }), l() }, setTags(e) { null != window.DiscordSentry && window.DiscordSentry.configureScope(t => { t.setTags(e) }) }, setExtra(e) { null != window.DiscordSentry && window.DiscordSentry.configureScope(t => { t.setExtras(e) }) }, captureException(e, t) { let n = (0, r.getUpdatedOptions)(t); null != window.DiscordSentry && window.DiscordSentry.withScope(t => { null != n.tags && t.setTags(n.tags), t.setExtras(n.extra), window.DiscordSentry.captureException(e) }) }, captureCrash(e, t) { let n; let i = (0, r.getUpdatedOptions)(t); return null != window.DiscordSentry && window.DiscordSentry.withScope(t => { t.setExtras(i.extra), t.setTag("crash", "true"), t.setLevel("fatal"), t.addEventProcessor(e => { var t, n; let i = null === (n = e.exception) || void 0 === n ? void 0 : null === (t = n.values) || void 0 === t ? void 0 : t[0]; return null != i && (i.mechanism = { ...i.mechanism, handled: !1 }), e }), n = window.DiscordSentry.captureException(e) }), n }, captureMessage(e, t) { let n = (0, r.getUpdatedOptions)(t); null != window.DiscordSentry && window.DiscordSentry.withScope(t => { null != n.tags && t.setTags(n.tags), t.setExtras(n.extra), window.DiscordSentry.captureMessage(e) }) }, addBreadcrumb(e) { (0, i.default)(e) }, profiledRootComponent: e => e, crash() { throw Error("crash") } } }, 511405: function(e, t, n) { "use strict"; n.r(t), n.d(t, { deserializeObject: function() { return l }, serializeObject: function() { return o } }), n("309749"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); var i = n("392711"), r = n.n(i), s = n("149765"), a = n("915486"); function o(e) { return r().cloneDeepWith(e, e => (0, s.isBigFlag)(e) ? { __tag__: "bigflag", data: e.toJSON() } : (0, a.isUint8Array)(e) ? { __tag__: "uint8array", data: Array.from(e) } : void 0) } function l(e) { return r().cloneDeepWith(e, e => null != e && "object" == typeof e && "__tag__" in e && "bigflag" === e.__tag__ ? s.deserialize(e.data) : (0, a.isSerializedUint8Array)(e) ? new Uint8Array(e.data) : void 0) } }, 709054: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DISCORD_EPOCH: function() { return s.DISCORD_EPOCH }, SnowflakeSequence: function() { return s.SnowflakeSequence } }); var i = n("392711"), r = n.n(i), s = n("67423"); function a(e) { return e } t.default = { age: function(e) { return s.age(e) }, extractTimestamp: function(e) { return s.extractTimestamp(e) }, compare: function(e, t) { return s.compare(e, t) }, atPreviousMillisecond: function(e) { return s.atPreviousMillisecond(e) }, fromTimestamp: function(e) { return s.fromTimestamp(e) }, fromTimestampWithSequence: function(e, t) { return s.fromTimestampWithSequence(e, t) }, keys: function(e) { return Object.keys(e) }, forEach: function(e, t) { r().forEach(e, (e, n) => t(e, n)) }, forEachKey: function(e, t) { for (let n in e) t(n) }, entries: function(e) { return Object.entries(e) }, castChannelIdAsMessageId: function(e) { return e }, castMessageIdAsChannelId: function(e) { return e }, castGuildIdAsEveryoneGuildRoleId: function(e) { return e }, cast: a } }, 697479: function(e, t, n) { "use strict"; n.r(t), n.d(t, { insert: function() { return i } }); function i(e, t, n) { let i = function(e, t, n) { let i = 0, r = e.length; for (; i < r;) { let s = i + r >>> 1; 0 > n(e[s], t) ? i = s + 1 : r = s } return i }(e, t, n); e.splice(i, 0, t) } }, 557177: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { createSound: function() { return _ }, createSoundForPack: function() { return d }, playSound: function() { return c } }); var r = n("259443"), s = n("292619"), a = n("474873"), o = n("135906"), l = n("246946"); { let e = (0, s.isEligibleForWebAudioAPI)({ location: "SoundUtils" }), t = n("902653"); i = e ? t.WebAudioAPISound : t.WebAudioSound } let u = new r.Logger("SoundUtils"); function d(e, t) { var n; let i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1; return _(null !== (n = (0, o.default)(t)[e]) && void 0 !== n ? n : e, e, i) } function _(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1; return new i(e, t, n) } function c(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, i = arguments.length > 2 ? arguments[2] : void 0, r = arguments.length > 3 ? arguments[3] : void 0; if (l.default.disableSounds) return; let s = (0, o.default)(null != r ? r : a.default.getSoundpack()); null == s && u.log("Unable to find sound for pack name: ".concat(r)); let d = _(null !== (t = s[e]) && void 0 !== t ? t : e, e, n); return null != i ? d.playWithListener().then(e => { e && i() }) : d.play(), d } }, 601993: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addResultListener: function() { return T }, getCorrections: function() { return c }, isMisspelled: function() { return _ }, isSupported: function() { return o }, replaceWithCorrection: function() { return E }, setAppLocale: function() { return I }, setEnabled: function() { return u }, setLearnedWords: function() { return d } }); var i = n("579806"), r = n("405826"), s = n("358085"); function a() { return (null === i.default || void 0 === i.default ? void 0 : i.default.spellCheck) != null } function o() { return (0, s.isDesktop)() && a() } let l = o() ? (0, r.install)() : null; async function u(e) { let t = await l; null != t && (t.enabled = e) } async function d(e) { let t = await l; null != t && t.setLearnedWords(e) } async function _(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = await l; return null != n && n.isMisspelled(e, t) } async function c(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 5, i = await l; return null == i ? [] : i.getCorrectionsForMisspelling(e, t).slice(0, n) } async function E(e) { let t = await l; null != t && t.replaceMisspelling(e) } async function I(e) { let t = await l; null != t && t.setAppLocale(e) } function T(e) { if (!a()) return () => {}; let t = i.default.spellCheck.on("spellcheck-result", e); return null != t ? t : () => {} } }, 73346: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAssetURL: function() { return O }, getNonSocialRecommendationReasons: function() { return D }, getPrimarySKUForApplication: function() { return R }, getSocialRecommendationReasons: function() { return L }, getStoreListingLocation: function() { return p }, httpGetWithCountryCodeQuery: function() { return C } }), n("653041"), n("998459"), n("47120"), n("411104"), n("789020"); var i = n("392711"), r = n.n(i), s = n("913527"), a = n.n(s), o = n("991637"), l = n.n(o), u = n("873546"), d = n("544891"), _ = n("355467"), c = n("134432"), E = n("351402"), I = n("853872"), T = n("78839"), f = n("526167"), S = n("630388"), h = n("823379"); n("358085"); var A = n("709054"), m = n("981631"); n("689938"), l().shim(); let N = !u.isMobile && !u.isTablet && -1 !== (0, f.getChromeVersion)(); function p(e, t) { let { analyticsSource: n, analyticsProperties: i, storeListingId: r, slug: s, channelId: a, guildId: o } = t; return { pathname: null != a && null != o ? m.Routes.CHANNEL(o, a, e) : m.Routes.APPLICATION_STORE_LISTING_SKU(e, s), state: { analyticsSource: n, analyticsProperties: i }, search: null != r ? "?store_listing_id=".concat(r) : "" } } function O(e, t, n, i) { var r; let s; let a = window.GLOBAL_ENV.CDN_HOST; if (null == i) switch (t.mimeType || t.mime_type) { case "video/quicktime": case "video/mp4": i = "mp4"; break; case "image/gif": i = "gif"; break; default: i = "webp" } "webp" === i && !N && (i = "png"); let o = "string" == typeof t ? t : t.id, l = (r = "https:", "https:"); return s = null != a ? "".concat(l, "//").concat(a, "/app-assets/").concat(e, "/store/").concat(o, ".").concat(i) : "".concat(l).concat(window.GLOBAL_ENV.API_ENDPOINT).concat(m.Endpoints.STORE_ASSET(e, o, i)), null != n && (s += "?size=".concat((0, c.getBestMediaProxySize)(n * (0, c.getDevicePixelRatio)()))), s } async function C(e) { var t, n, i, r; let s = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; if (s) { let e = []; !I.default.hasFetchedPaymentSources && e.push(null !== (n = E.default.paymentSourcesFetchRequest) && void 0 !== n ? n : (0, _.fetchPaymentSources)()), !E.default.ipCountryCodeLoaded && e.push((0, _.fetchIpCountryCode)()), e.push(new Promise(async e => { if (T.default.hasFetchedSubscriptions()) e(); else if (E.default.isSubscriptionFetching) { let t = () => { E.default.isSubscriptionFetching ? setTimeout(t, 50) : e() }; t() } else await (0, _.fetchSubscriptions)(), e() })), await Promise.allSettled(e) } let a = I.default.getDefaultBillingCountryCode(), o = null !== (i = null === (t = I.default.defaultPaymentSource) || void 0 === t ? void 0 : t.id) && void 0 !== i ? i : null, l = T.default.getPremiumTypeSubscription(); null != l && null != l.paymentSourceId && (o = l.paymentSourceId), null === a && (a = null !== (r = E.default.ipCountryCode) && void 0 !== r ? r : null); let u = {}; if (null != a && (u.country_code = a), null != o && (u.payment_source_id = o), null != a || null != o) { if ("string" == typeof e && (e = { url: e, oldFormErrors: !0 }), "string" == typeof e.query) throw Error("string query not supported"); e.query = { ...u, ...e.query } } return d.HTTP.get(e) } function R(e, t, n) { let i = t.getApplication(e); return null == i || null == i.primarySkuId ? null : n.get(i.primarySkuId) } let g = []; function L(e, t, n, i, s) { let a = t.get(e); if (null == a) return g; let o = a.applicationId, l = [], u = [], d = function(e, t, n) { var i; let r = null !== (i = n.getNowPlaying(e)) && void 0 !== i ? i : {}, s = A.default.keys(r).map(e => { let n = t.getUser(e); return null == n ? null : { user: n, startTime: r[n.id].startedPlaying } }).filter(h.isNotNullish).sort((e, t) => t.startTime - e.startTime); return 0 === s.length ? null : { type: m.StoreRecommendationTypes.NOW_PLAYING, userInfo: s } }(o, n, i); null != d && (l.push(d), u = d.userInfo.map(e => { let { user: t } = e; return t.id })); let _ = s.getStatisticsForApplication(o); if (null != _) { let e = _.map(e => e.user_id); if (r().difference(e, u).length > 0) { let e = function(e, t, n) { let i = n.getStatisticsForApplication(e); if (null == i) return null; let r = i.map(e => { let n = t.getUser(e.user_id); return null == n ? null : { user: n, endTime: Date.parse(e.last_played_at) } }).filter(h.isNotNullish).sort((e, t) => t.endTime - e.endTime); return 0 === r.length ? null : { type: m.StoreRecommendationTypes.EVER_PLAYED, userInfo: r } }(o, n, s); null != e && l.push(e) } } return l } let v = []; function D(e, t, n) { let i = t.get(e), r = n.getForSKU(e); if (null == i || null == r) return v; let s = []; (0, S.hasFlag)(i.flags, m.SKUFlags.HAS_FREE_PREMIUM_CONTENT) && s.push({ type: m.StoreRecommendationTypes.HAS_FREE_PREMIUM_CONTENT }); let o = i.releaseDate; return null != o && 3 > a()().diff(o, "months") && (i.accessType === m.SKUAccessTypes.EARLY_ACCESS ? s.push({ type: m.StoreRecommendationTypes.EARLY_ACCESS, releaseDate: o }) : s.push({ type: m.StoreRecommendationTypes.RECENT_RELEASE_DATE, releaseDate: o })), null != r.flavorText && s.push({ type: m.StoreRecommendationTypes.FLAVOR_TEXT, flavorText: r.flavorText }), s } }, 557457: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getFPSText: function() { return f }, getMaxQuality: function() { return S }, getResolutionText: function() { return T }, isPremiumFPS: function() { return E }, isPremiumResolution: function() { return c }, trackStreamSettingsUpdate: function() { return h } }); var i = n("430824"), r = n("19780"), s = n("594174"), a = n("626135"), o = n("981631"), l = n("37113"), u = n("474936"), d = n("65154"), _ = n("689938"); function c(e) { if (null == e) return; let t = e.maxResolution.type === d.ResolutionTypes.SOURCE ? l.ApplicationStreamResolutions.RESOLUTION_SOURCE : e.maxResolution.height, n = (0, l.getApplicationResolution)(t); return (0, l.getApplicationFramerate)(e.maxFrameRate) !== l.ApplicationStreamFPS.FPS_5 && null == l.ApplicationStreamSettingRequirements.find(e => e.resolution === n && e.fps !== l.ApplicationStreamFPS.FPS_5 && !I(e)) } function E(e) { if (null == e) return; let t = (0, l.getApplicationFramerate)(e.maxFrameRate); return null == l.ApplicationStreamSettingRequirements.find(e => e.fps === t && !I(e)) } function I(e) { return null != e.quality || null != e.guildPremiumTier } function T(e) { return e.type === d.ResolutionTypes.SOURCE ? _.default.Messages.SCREENSHARE_SOURCE : _.default.Messages.SCREENSHARE_RESOLUTION_ABBREVIATED.format({ resolution: e.height }) } function f(e) { return _.default.Messages.SCREENSHARE_FPS_ABBREVIATED.format({ fps: e }) } function S(e) { return null == e.maxResolution || null == e.maxFrameRate ? null : { maxFrameRate: e.maxFrameRate, maxResolution: e.maxResolution } } function h(e, t, n) { var d, _, c; let E = (d = e, _ = t, c = n, l.ApplicationStreamSettingRequirements.find(e => (null == e.preset || e.preset === d) && e.resolution === _ && e.fps === c)), I = s.default.getCurrentUser(), T = r.default.getGuildId(), f = null != T ? i.default.getGuild(T) : null; a.default.track(o.AnalyticEvents.STREAM_SETTINGS_UPDATE, { user_premium_tier: null == I ? void 0 : I.premiumType, guild_premium_tier: null == f ? void 0 : f.premiumTier, stream_quality_user_premium_tier: (null == E ? void 0 : E.quality) != null ? u.StreamQualitiesToPremiumType[E.quality] : null, stream_quality_guild_premium_tier: null == E ? void 0 : E.guildPremiumTier, stream_quality_preset: e, stream_quality_resolution: t, stream_quality_frame_rate: n }) } }, 622999: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { authenticatePaymentIntentForPaymentId: function() { return E }, getStripe: function() { return _ }, parseStripePaymentMethod: function() { return c }, validateExpiry: function() { return d } }), n("47120"); var r, s, a = n("657610"), o = n("544891"), l = n("981631"); (s = r || (r = {})).REQUIRES_PAYMENT_METHOD = "requires_payment_method", s.REQUIRES_CONFIRMATION = "requires_confirmation", s.REQUIRES_ACTION = "requires_action", s.PROCESSING = "processing", s.CANCELED = "canceled", s.SUCCEEDED = "succeeded"; let u = e => { let t = t => "You passed an invalid expiration date ".concat(e) + "".concat(null != t ? t : "") + "Please pass a string containing a numeric month and year such as `01-17` or `2015 / 05`", n = e.split(/[.\-/\s]+/g); 2 !== n.length && t(); let i = n.map(e => { let i = parseInt(e); return isNaN(i) && t("".concat(n, " is not a number.")), i < 1 && t("".concat(i, " is less than one.")), i }), [r, s] = i[0] > 12 ? [i[1], i[0]] : [i[0], i[1]]; return r > 12 && t("Month must be a number 1-12, not ".concat(r, ".")), s < 100 && (s += 2e3), [r, s] }, d = e => { let t, n; try { [t, n] = u(e) } catch (e) { return !1 } let i = new Date(n, t), r = new Date; return i.setMonth(i.getMonth() - 1), i.setMonth(i.getMonth() + 1, 1), i > r }; function _() { return null != i ? Promise.resolve(i) : (0, a.loadStripe)(l.PaymentSettings.STRIPE.KEY).then(e => (i = e, e)) } function c(e) { var t, n, i, r, s, a, o, l; let { billing_details: u } = e, d = null !== (t = u.address) && void 0 !== t ? t : {}, _ = { name: null !== (n = u.name) && void 0 !== n ? n : "", line1: null !== (i = d.line1) && void 0 !== i ? i : "", line2: null !== (r = d.line2) && void 0 !== r ? r : "", city: null !== (s = d.city) && void 0 !== s ? s : "", state: null !== (a = d.state) && void 0 !== a ? a : "", country: null !== (o = d.country) && void 0 !== o ? o : "", postalCode: null !== (l = d.postal_code) && void 0 !== l ? l : "" }; return { token: e.id, billingAddressInfo: _ } } async function E(e) { try { let { stripe_payment_intent_client_secret: t } = (await o.HTTP.get({ url: l.Endpoints.BILLING_STRIPE_PAYMENT_INTENTS(e), oldFormErrors: !0 })).body, n = await _(); if (null == n) return { error: "unable to load stripe" }; let { error: i, paymentIntent: r } = await n.retrievePaymentIntent(t); if (null != i) return { error: i.message }; if (null == r) return { error: "payment intent does not exist" }; let s = {}; switch ("requires_payment_method" === r.status && null != r.last_payment_error && null != r.last_payment_error.payment_method && (s.payment_method = r.last_payment_error.payment_method.id), r.status) { case "requires_payment_method": case "requires_confirmation": case "requires_action": let { error: a } = await n.confirmCardPayment(t, s); if (null != a) return { error: a.message }; return {}; case "succeeded": case "processing": return {}; default: return { error: "Invalid Payment Intent status: ".concat(r.status) } } } catch (e) { return { error: e.message } } } }, 153066: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getClass: function() { return r } }), n("724458"); var i = n("624138"); function r(e, t) { for (var n = arguments.length, r = Array(n > 2 ? n - 2 : 0), s = 2; s < n; s++) r[s - 2] = arguments[s]; let a = r.reduce((e, t) => e + (0, i.upperCaseFirstChar)(t), ""), o = e["".concat(t).concat(a)]; if (null != o) return o } }, 364964: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("920478"), r = n("392711"), s = n.n(r), a = n("462176"); i.default.registerLanguage("ansi", a.default), t.default = { highlight(e, t, n) { if (! function(e) { if (e.indexOf(o) >= 0) return !1; let t = 0; for (let n of e.split("\n")) { if (n.length > 1e3) return !1; null == n.match(/^\s*[/][/]/) && null != n.match(/[^/]/) && (t = 0); let e = n.match(/[/]/g); if (null != e && (t += e.length) > 30) return !1 } return !0 }(t)) return null; Date.now(); let r = i.default.highlight(e, t, n); return Date.now(), r }, hasLanguage: e => null != i.default.getLanguage(e) }; let o = s().repeat("/", 15) }, 792125: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getThemeClass: function() { return r } }); var i = n("981631"); function r(e) { if (null == e) return; let t = i.ThemeExtends.get(e); return null != t ? "theme-".concat(t, " theme-").concat(e) : "theme-".concat(e) } }, 573261: function(e, t, n) { "use strict"; n.r(t); var i = n("544891"), r = n("626135"); function s(e, t, n) { let { trackedActionData: i, ...s } = t, a = { url: s.url, request_method: n }; return new Promise((t, n) => { e(s).then(e => { let n = i.properties; "function" == typeof i.properties && (n = i.properties(e)), (0, r.trackNetworkAction)(i.event, { status_code: e.status, ...a, ...n }), t(e) }).catch(e => { var t, s; let o = i.properties; "function" == typeof i.properties && (o = i.properties(e)), (0, r.trackNetworkAction)(i.event, { status_code: e.status, error_code: null === (t = e.body) || void 0 === t ? void 0 : t.code, error_message: null === (s = e.body) || void 0 === s ? void 0 : s.message, ...a, ...o }), n(e) }) }) } t.default = { get: function(e) { return s(i.HTTP.get, e, "get") }, post: function(e) { return s(i.HTTP.post, e, "post") }, put: function(e) { return s(i.HTTP.put, e, "put") }, patch: function(e) { return s(i.HTTP.patch, e, "patch") }, delete: function(e) { return s(i.HTTP.del, e, "del") } } }, 591759: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"); var i = n("628735"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("729594"), l = n("981631"); let u = /(?:^|\.)(?:discordapp|discord)\.com$/i, d = r().v4().source, _ = RegExp("(?:".concat("(?:(?:[a-z]+:)?//)", "|www\\.)").concat("(?:\\S+(?::\\S*)?@)?", "(?:localhost|").concat(d, "|").concat("(?:[a-z\\u00a1-\\uffff0-9-_]+\\.)+").concat("(?:(?:[a-z\\u00a1-\\uffff]{2,}))", ")").concat("(?::\\d{2,5})?").concat('(?:[/?#][^\\s"]*)?'), "ig"), c = new Set([window.GLOBAL_ENV.CDN_HOST, window.GLOBAL_ENV.INVITE_HOST, window.GLOBAL_ENV.GIFT_CODE_HOST, window.GLOBAL_ENV.GUILD_TEMPLATE_HOST]); function E(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (null == e) return !1; return u.test(e) || n && (t = e, c.has(t.toLowerCase())) } function I(e) { return null != e && "discord:" === e } function T(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return null != e && E(o.parse(e).hostname, t) } function f(e) { return null != e && I(o.parse(e).protocol) } t.default = { URL_REGEX: _, isDiscordHostname: E, isDiscordLocalhost: function(e, t) { return null != e && null != t && (window.location.host === e || !1) }, isDiscordProtocol: I, isDiscordUrl: T, isDiscordUri: f, isDiscordCdnUrl: function(e) { return null != e && o.parse(e).hostname === window.GLOBAL_ENV.CDN_HOST }, isDiscordUrlOrUri: e => T(e) || f(e), isAppRoute: e => { let t = e.toLowerCase(); return t.startsWith("/channels/") || t.startsWith(l.Routes.APPLICATION_STORE) || t.startsWith(l.Routes.APPLICATION_LIBRARY) || t.startsWith(l.Routes.MESSAGE_REQUESTS) || t.startsWith(l.Routes.ACTIVITIES) || t.startsWith(l.Routes.COLLECTIBLES_SHOP) || t.startsWith(l.Routes.ACTIVITY) }, format: e => o.format(e), formatPathWithQuery: (e, t) => o.format({ pathname: e, query: a().pickBy(t) }), formatSearch: e => o.format({ query: a().pickBy(e) }), safeParseWithQuery(e) { try { return o.parse(e, !0) } catch (e) { return null } }, toURLSafe(e, t) { try { return new URL(e, t) } catch (e) { return null } }, makeUrl: function(e) { let t = (0, location.host); return "".concat(location.protocol, "//").concat(t).concat(e) } } }, 915486: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addBit: function() { return r }, hasBit: function() { return i }, isSerializedUint8Array: function() { return o }, isUint8Array: function() { return a }, removeBit: function() { return s } }), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); function i(e, t) { if (0 === e.length) return !1; let n = e[Math.floor(t / 8)]; return (n & 1 << t % 8) != 0 } function r(e, t) { let n = Math.floor(t / 8); if (e.length <= n) { let t = new Uint8Array(n + 1); t.set(e, 0), e = t } return e[n] |= 1 << t % 8, e } function s(e, t) { if (i(e, t)) { let n = Math.floor(t / 8), i = t % 8; e[n] &= ~(1 << i) } return e } function a(e) { return e instanceof Uint8Array } function o(e) { return null != e && "object" == typeof e && "uint8array" === e.__tag__ } }, 861990: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MAX_TOTAL_ATTACHMENT_SIZE: function() { return a }, getAttachmentPayload: function() { return o }, getFile: function() { return _ }, getFileChunk: function() { return l }, getFileContentLength: function() { return d }, getFileData: function() { return u } }), n("411104"); var i = n("830496"), r = n("959517"); let s = [{ reName: /\.jpe?g$/i, name: e => "image".concat(e, ".jpg"), type: "image/jpeg" }, { reName: /\.png$/i, name: e => "image".concat(e, ".png"), type: "image/png" }, { reName: /\.gif$/i, name: e => "image".concat(e, ".gif"), type: "image/gif" }, { reName: /\.webp$/i, name: e => "image".concat(e, ".webp"), type: "image/webp" }, { reName: /\.heic$/i, name: e => "image".concat(e, ".heic"), type: "image/heic" }, { reName: /\.heif$/i, name: e => "image".concat(e, ".heif"), type: "image/heif" }, { reName: /\.dng$/i, name: e => "image".concat(e, ".dng"), type: "image/x-adobe-dng" }, { reName: /\.mov$/i, name: e => "video".concat(e, ".mov"), type: "video/quicktime" }, { reName: /\.avi$/i, name: e => "video".concat(e, ".avi"), type: "video/x-msvideo" }, { reName: /\.mp4$/i, name: e => "video".concat(e, ".mp4"), type: "video/mp4" }, { reName: /\.webm$/i, name: e => "video".concat(e, ".webm"), type: "image/webm" }], a = 524288e3; function o(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, s = arguments.length > 2 ? arguments[2] : void 0, a = { id: null !== (t = null == n ? void 0 : n.toString()) && void 0 !== t ? t : e.id }; null != e.description && (a.description = e.description); let o = function(e) { let { spoiler: t } = e; return t ? r.SPOILER_ATTACHMENT_PREFIX : "" }({ spoiler: e.spoiler }); return a.filename = "".concat(o).concat(null != s ? s : e.filename), a.uploaded_filename = e.uploadedFilename, "durationSecs" in e && null != e.durationSecs && (a.duration_secs = e.durationSecs), "waveform" in e && null != e.waveform && (a.waveform = e.waveform), "isThumbnail" in e && !0 === e.isThumbnail && (a.is_thumbnail = e.isThumbnail), "isRemix" in e && !0 === e.isRemix && (a.is_remix = e.isRemix), "clip" in e && null != e.clip && (a.is_clip = !0, a.title = e.clip.name, a.application_id = e.clip.applicationId, a.clip_created_at = (0, i.getClipCreatedAt)(e.clip.id), a.clip_participant_ids = (0, i.getClipParticipantIds)(e.clip.users)), a } function l(e, t, n) { let i = new XMLHttpRequest; return new Promise((r, s) => { i.open("GET", e, !0), i.responseType = "blob", i.setRequestHeader("Range", "bytes=".concat(t, "-").concat(n)), i.onabort = e => s(e), i.onerror = e => s(e), i.ontimeout = e => s(e), i.onload = () => { 206 === i.status ? r(i.response) : s(Error("Range request failed")) }, i.send() }) } function u(e) { let t = new XMLHttpRequest; return new Promise((n, i) => { t.open("GET", e, !0), t.responseType = "blob", t.onabort = e => i(e), t.onerror = e => i(e), t.ontimeout = e => i(e), t.onload = () => { var e; return n(null == t ? void 0 : null === (e = t.response) || void 0 === e ? void 0 : e.data) }, t.send() }) } function d(e) { return new Promise((t, n) => { let i = new XMLHttpRequest; i.open("HEAD", e, !0), i.onload = () => { if (i.status >= 200 && i.status < 300) { let e = i.getResponseHeader("Content-Length"); null != e && "" !== e ? t(parseInt(e, 10)) : n(Error("Content-Length header is missing")) } else n(Error("HTTP request failed with status code ".concat(i.status))) }, i.onerror = n, i.onabort = n, i.ontimeout = n, i.send() }) } function _(e) { var t, n, i, r, a, o; let l, { uri: u, i: d, overrideFilename: _, overrideType: c } = e, E = u.split("/"), I = E[E.length - 1]; I = null !== (i = null === (n = I.split("?")) || void 0 === n ? void 0 : null === (t = n[0]) || void 0 === t ? void 0 : t.toLowerCase()) && void 0 !== i ? i : ""; let T = s.find(e => e.reName.test(I)); if (null == T && null != _ && (T = s.find(e => e.reName.test(_))), null != T && null != _) { let e = T.name(d).split(".").pop(), t = _.lastIndexOf("."); l = -1 !== t ? "".concat(_.substr(0, t), ".").concat(e) : "".concat(_, ".").concat(e) } else l = null != T ? T.name(d) : null != _ ? _ : "unknown"; return { uri: u, filename: l, type: null !== (r = null != c ? c : null == T ? void 0 : T.type) && void 0 !== r ? r : "unknown", isVideo: -1 !== (null !== (a = null != c ? c : null == T ? void 0 : T.name(d)) && void 0 !== a ? a : "").indexOf("video"), isImage: -1 !== (null !== (o = null != c ? c : null == T ? void 0 : T.name(d)) && void 0 !== o ? o : "").indexOf("image") } } }, 51144: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ageEligibleForPremiumUpsell: function() { return h }, getName: function() { return E }, getUserTag: function() { return N }, humanizeStatus: function() { return f }, isNewUser: function() { return A }, useDirectMessageRecipient: function() { return p }, useName: function() { return I } }), n("411104"); var i = n("442837"), r = n("246946"), s = n("594174"), a = n("981631"), o = n("689938"); let l = e => "".concat(e[0], "..."), u = e => "@".concat(e), d = { mode: "full", decoration: "never", identifiable: "auto", forcePomelo: !1 }; function _(e) { return !!(null != e && e.length > 0) } function c(e) { if (_(e.global_name)) return e.global_name; if (_(e.globalName)) return e.globalName; if (_(e.username)) return e.username; else return "???" } function E(e) { var t; if (null == e) return; let n = r.default.hidePersonalInformation, i = c(e); return n && i.toLocaleLowerCase() === (null === (t = e.username) || void 0 === t ? void 0 : t.toLocaleLowerCase()) && "0" === e.discriminator && (i = l(i)), i } function I(e) { var t; let n = (0, i.useStateFromStores)([r.default], () => r.default.hidePersonalInformation); if (null == e) return; let s = c(e); return n && s.toLocaleLowerCase() === (null === (t = e.username) || void 0 === t ? void 0 : t.toLocaleLowerCase()) && "0" === e.discriminator && (s = l(s)), s } function T(e) { if (null != e) { if (_(e.globalName)) return e.globalName; else if (_(e.global_name)) return e.global_name; else return } } function f(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; switch (e) { case a.StatusTypes.ONLINE: return t ? o.default.Messages.STATUS_ONLINE_MOBILE : o.default.Messages.STATUS_ONLINE; case a.StatusTypes.OFFLINE: return o.default.Messages.STATUS_OFFLINE; case a.StatusTypes.IDLE: return o.default.Messages.STATUS_IDLE; case a.StatusTypes.DND: return o.default.Messages.STATUS_DND; case a.StatusTypes.INVISIBLE: return o.default.Messages.STATUS_INVISIBLE; case a.StatusTypes.STREAMING: return o.default.Messages.STATUS_STREAMING; case a.StatusTypes.UNKNOWN: default: return null } } function S(e, t) { let { maxDaysOld: n, minDaysOld: i = 0 } = t; if (null == e) return !1; let r = Date.now() - e.createdAt.getTime(); return (null == n || !!(r <= 864e5 * n)) && !!(r >= 864e5 * i) || !1 } function h(e) { return !S(e, { minDaysOld: 0, maxDaysOld: 30 }) } function A(e) { return S(e, { minDaysOld: 0, maxDaysOld: 7 }) } function m(e, t, n) { if (null == e) return o.default.Messages.UNKNOWN_USER_MENTION_PLACEHOLDER; if (!_(e.username)) return "???"; let i = n; if ("always" === t.identifiable ? i = !1 : "never" === t.identifiable && (i = !0), "0" !== e.discriminator && e.discriminator !== a.NON_USER_BOT_DISCRIMINATOR && !t.forcePomelo) return "username" === t.mode ? e.username : i ? e.username : "".concat(e.username, "#").concat(e.discriminator); let r = i ? l(e.username) : e.username; return "never" !== t.decoration ? u(r) : r } function N(e, t) { let n = { ...d, ...t }, i = "auto" !== n.identifiable || r.default.hidePersonalInformation; return m(e, n, i) } function p(e) { return (0, i.useStateFromStores)([s.default], () => { if (null != e) return e.isPrivate() && e.isDM() ? s.default.getUser(e.getRecipientId()) : null }) } t.default = { getName: E, useName: I, getUserTag: N, useUserTag: function(e, t) { let n = { ...d, ...t }; return m(e, n, (0, i.useStateFromStores)([r.default], () => r.default.hidePersonalInformation)) }, getFormattedName: function(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; if (null == e) return "???"; let i = T(e), r = n ? N(e) : null !== (t = e.username) && void 0 !== t ? t : "???"; return i === r ? i : null != i ? "".concat(i, " (").concat(r, ")") : r }, getGlobalName: T, humanizeStatus: f, useDirectMessageRecipient: p } }, 777754: function(e, t, n) { "use strict"; n.r(t); let i = /^([\w-+]+(?:\.[\w-+]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,63}(?:\.[a-z]{2})?)$/i, r = /^((https:\/\/)?(discord\.gg\/)|(discord\.com\/)(invite\/)?)?[A-Za-z0-9]{8,8}$/, s = /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/, a = /^(.*)#[0-9]{1,5}$/, o = ["@", "#", ":", "```", "discord", "hypesquad", "system message", "system mesage", "sustem message", "sustem mesage"], l = ["discordtag", "everyone", "here", "discord nitro", "discord"]; t.default = { isEmail: function(e) { return i.test(e) }, isInvite: function(e) { return r.test(e) }, isPhoneNumber: function(e) { return s.test(e) }, isUserTagLike: function(e) { let t = a.exec(e); if (null != t && t.length > 1) { let e = t[1], n = o.some(t => e.includes(t)), i = l.includes(e); return !n && !i } return !1 } } }, 872801: function(e, t, n) { "use strict"; function i(e, t) { let n = e.parentElement; for (; null != n;) { if (n.classList.contains(t)) return n; n = n.parentElement } return null } n.r(t), n.d(t, { default: function() { return i } }) }, 178535: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("607070"), r = n("981631"); function s(e, t, n) { var s, a, o, l, u, d, _, c; let E = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; return { key: null !== (a = null !== (s = t.key) && void 0 !== s ? s : E) && void 0 !== a ? a : "modal", modal: e, animation: null !== (o = t.animation) && void 0 !== o ? o : i.default.useReducedMotion ? r.ModalAnimation.FADE : r.ModalAnimation.SLIDE_UP, shouldPersistUnderModals: null !== (l = t.shouldPersistUnderModals) && void 0 !== l && l, props: n, backdropStyle: null !== (u = t.backdropStyle) && void 0 !== u ? u : null, backdropInstant: null !== (d = t.backdropInstant) && void 0 !== d && d, disableAnimation: null !== (_ = t.disableAnimation) && void 0 !== _ && _, closable: "boolean" != typeof t.closable || t.closable, label: null !== (c = t.label) && void 0 !== c ? c : "", callbacks: {} } } }, 921948: function(e, t, n) { "use strict"; function i() { var e; return null !== (e = window.devicePixelRatio) && void 0 !== e ? e : 1 } n.r(t), n.d(t, { default: function() { return i } }) }, 135431: function(e, t, n) { "use strict"; n.r(t), n.d(t, { canInstallApplication: function() { return u }, installApplication: function() { return d } }); var i = n("873546"), r = n("149765"), s = n("69580"), a = n("626135"), o = n("49012"), l = n("981631"); function u(e) { let { customInstallUrl: t, installParams: n, integrationTypesConfig: i } = e; return null != t || null != n || null != i && Object.values(i).some(e => null != e && null != e.oauth2_install_params) } function d(e) { let { applicationId: t, customInstallUrl: n, installParams: u, integrationTypesConfig: d, guildId: _, channelId: c, disableGuildSelect: E, source: I } = e; if (null != n) { a.default.track(l.AnalyticEvents.APPLICATION_ADD_TO_SERVER_CLICKED, { application_id: t, guild_id: _, auth_type: "custom_url", source: I, device_platform: i.isMobile ? "mobile_web" : "desktop_web" }), (0, o.handleClick)({ href: n }); return } if (null != d && Object.values(d).some(e => null != e && null != e.oauth2_install_params)) { a.default.track(l.AnalyticEvents.APPLICATION_ADD_TO_SERVER_CLICKED, { application_id: t, guild_id: _, auth_type: "in_app", source: I, device_platform: i.isMobile ? "mobile_web" : "desktop_web" }), (0, s.openOAuth2Modal)({ clientId: t, guildId: _, channelId: c, disableGuildSelect: E }); return } null != u && (a.default.track(l.AnalyticEvents.APPLICATION_ADD_TO_SERVER_CLICKED, { application_id: t, guild_id: _, auth_type: "in_app", source: I, device_platform: i.isMobile ? "mobile_web" : "desktop_web" }), (0, s.openOAuth2Modal)({ clientId: t, guildId: _, channelId: c, disableGuildSelect: E, scopes: u.scopes, permissions: null != u.permissions ? r.deserialize(u.permissions) : void 0 })) } }, 786074: function(e, t, n) { "use strict"; n.r(t); var i = n("490983"), r = n("689938"); t.default = { MENTION_EVERYONE: () => ({ test: "everyone", text: "@everyone", description: r.default.Messages.MENTION_EVERYONE_AUTOCOMPLETE_DESCRIPTION }), MENTION_HERE: () => ({ test: "here", text: "@here", description: r.default.Messages.MENTION_HERE_AUTOCOMPLETE_DESCRIPTION }), LAUNCHABLE_APPLICATIONS: () => i.default.launchableApplicationViewItems } }, 426563: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAutomodAvatarURL: function() { return p } }); var i = n("526167"), r = n("621554"), s = n("328756"), a = n("639525"), o = n("131812"), l = n("265174"), u = n("926425"), d = n("844049"), _ = n("712386"), c = n("602722"), E = n("534109"), I = n("859500"), T = n("484542"), f = n("881500"), S = n("910826"), h = n("307244"), A = n("669730"), m = n("185672"), N = n("235731"); function p() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; return e ? N : r } t.default = { DEFAULT_AVATARS: [s, a, o, l, u, d], DEFAULT_GROUP_DM_AVATARS: [_, c, E, I, T, f, S, h], BOT_AVATARS: { clyde: m }, DEFAULT_CHANNEL_ICON: A, canUseWebp: function() { return i.canUseWebp() } } }, 235375: function(e, t, n) { "use strict"; n.r(t), n.d(t, { baseRules: function() { return m }, customRules: function() { return N } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("120356"), a = n.n(s), o = n("302454"), l = n.n(o), u = n("481060"), d = n("37234"), _ = n("230711"), c = n("454585"), E = n("703656"), I = n("626135"), T = n("981631"), f = n("596401"); let S = l().defaultRules.link, h = { section: T.AnalyticsSections.SETTINGS_CHANGELOG }, A = e => { var t, n; let { level: i, children: s, className: o = null, styleSheet: l = {} } = e, d = (0, u.usePrivateHeadingLevel)(), _ = parseInt(i, 10), c = isNaN(_) ? 1 : _; return r.createElement("h".concat(d + c - 1), { className: a()(...(t = l, null == (n = o) ? [] : n.split(" ").map(e => t[e]))) }, s) }, m = null != c.default ? c.default.defaultRules : null, N = { link: { parse(e, t, n) { let i; let r = e[2], s = r.startsWith("https://discordapp.com/nitro") || r.startsWith("https://discord.com/nitro"), a = r.startsWith("https://discordapp.com/hypesquad") || r.startsWith("https://discord.com/hypesquad"), o = r.startsWith("/shop/fullscreen?source=1") || r.startsWith("/activities"); return i = s || a ? e => { I.default.track(T.AnalyticEvents.PREMIUM_PROMOTION_OPENED, { location: h }), s ? _.default.open(T.UserSettingsSections.PREMIUM) : a && _.default.open(T.UserSettingsSections.HYPESQUAD_ONLINE), n.changeLog.track(T.AnalyticEvents.CHANGE_LOG_CTA_CLICKED, { cta_type: "nitro" }), (0, u.closeModal)(f.CHANGELOG_MODAL_KEY), e.preventDefault() } : o ? e => { (0, E.transitionTo)(r), n.changeLog.track(T.AnalyticEvents.CHANGE_LOG_CTA_CLICKED, { ...I.default.getCampaignParams(r) }), (0, d.popAllLayers)(), (0, u.closeModal)(f.CHANGELOG_MODAL_KEY), e.preventDefault() } : () => { n && "function" == typeof n.onLinkClick && n.onLinkClick(r), n.changeLog.track(T.AnalyticEvents.CHANGE_LOG_CTA_CLICKED, { target: r, cta_type: "inline_link", ...I.default.getCampaignParams(r) }) }, { ...S.parse(e, t, n), callToAction: i } }, react: (e, t, n) => (0, i.jsx)(u.Anchor, { href: l().sanitizeUrl(e.target), title: e.title, onClick: e.callToAction, target: "_blank", className: e.callToAction ? "cta" : void 0, children: t(e.content, n) }, n.key) }, lheading: e => ({ react: (t, n, r) => (0, i.jsx)(A, { level: t.level, className: t.className, styleSheet: e, children: n(t.content, r) }, r.key) }), heading: { react: (e, t, n) => (0, i.jsx)(A, { level: e.level, children: t(e.content, n) }, n.key) }, image: { react(e, t, r) { let s = n("866483")("../../images/change-log/".concat(e.target).replace("../../images/change-log/", "./")); return (0, i.jsx)("img", { alt: e.alt, src: s }, r.key) } }, blockQuote: { react: null == m ? void 0 : m.blockQuote.react }, paragraph: { react: (e, t, n) => (0, i.jsx)("p", { children: t(e.content, n) }, n.key) } } }, 838440: function(e, t, n) { "use strict"; n.r(t), n.d(t, { applyChatRestrictions: function() { return T } }), n("47120"); var i = n("735250"); n("470079"); var r = n("481060"), s = n("570140"), a = n("468026"), o = n("673750"), l = n("300429"), u = n("594174"), d = n("626135"), _ = n("760729"), c = n("74538"), E = n("981631"), I = n("689938"); function T(e) { let { openWarningPopout: t, type: n, content: T, stickers: f, uploads: S, channel: h, restrictMentions: A = !0, respectCooldown: m = !0 } = e, N = c.default.canUseIncreasedMessageLength(u.default.getCurrentUser()); return new Promise(e => (function(e) { var t, n, u; let { openWarningPopout: c, type: T, content: f, stickers: S, uploads: h, channel: A, restrictMentions: m, respectCooldown: N, userCanUsePremiumMessageLength: p, resolve: O } = e; if (0 === f.length && !(null === (t = T.submit) || void 0 === t ? void 0 : t.allowEmptyMessage) && (null == S || 0 === S.length) && (null == h || 0 === h.length)) { O({ valid: !1, failureReason: E.MessageRestrictionTypes.EMPTY_MESSAGE }); return } let C = p ? E.MAX_MESSAGE_LENGTH_PREMIUM : E.MAX_MESSAGE_LENGTH; if (f.length > C) { if (p || null == A) { ; n = f.length, u = C, (0, r.openModal)(e => (0, i.jsx)(a.default, { title: I.default.Messages.MESSAGE_TOO_LONG_HEADER, body: I.default.Messages.MESSAGE_TOO_LONG_BODY_TEXT.format({ currentLength: n, maxLength: u }), confirmText: I.default.Messages.OKAY, ...e })), d.default.track(E.AnalyticEvents.OPEN_MODAL, { type: "Message Too Long Alert", message_content_length: n }) } else s.default.dispatch({ type: "MESSAGE_LENGTH_UPSELL", channel: A, content: f }); O({ valid: !1, failureReason: E.MessageRestrictionTypes.MESSAGE_TOO_LONG }); return } if (null != A) { if (null != A.getGuildId() && N && l.default.getSlowmodeCooldownGuess(A.id) > 0) { O({ valid: !1, failureReason: E.MessageRestrictionTypes.SLOWMODE_COOLDOWN }); return } if (null != c) for (let { check: e, analyticsType: t, animation: n } of _.RESTRICTIONS) { let i = e(f, A, m); if (!1 !== i) { c({ analyticsType: t, channel: A, onCancel: () => O({ valid: !1, failureReason: E.MessageRestrictionTypes.SHOUTING_CANCELLED }), onConfirm: () => O({ valid: !0 }), popoutText: i, animation: n }); return } } } if (o.default.isFull()) { (0, r.openModal)(e => (0, i.jsx)(a.default, { title: I.default.Messages.MESSAGE_RATE_LIMITED_HEADER, body: I.default.Messages.MESSAGE_RATE_LIMITED_BODY, confirmText: I.default.Messages.MESSAGE_RATE_LIMITED_BUTTON, ...e }), { onCloseRequest: E.NOOP }), O({ valid: !1, failureReason: E.MessageRestrictionTypes.RATE_LIMITED }); return } O({ valid: !0 }) })({ openWarningPopout: t, type: n, content: T, stickers: f, uploads: S, channel: h, restrictMentions: A, respectCooldown: m, userCanUsePremiumMessageLength: N, resolve: e })) } }, 62883: function(e, t, n) { "use strict"; n.r(t), n.d(t, { contextMenuCallbackNative: function() { return a }, contextMenuCallbackWeb: function() { return o }, getSelectionText: function() { return s } }); var i = n("735250"); n("470079"); var r = n("239091"); function s() { let e; if (null != window.getSelection) { var t; e = null === (t = window.getSelection()) || void 0 === t ? void 0 : t.toString() } else null != document.selection && "Control" !== document.selection.type && (e = document.selection.createRange().text); return null != e ? e : "" } function a(e) { let t = s(), a = e.target; if ((null == a ? void 0 : a.tagName) === "TEXTAREA" || (null == a ? void 0 : a.tagName) === "INPUT") { if ((null == a ? void 0 : a.type) !== "checkbox") return (0, r.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("99989").then(n.bind(n, "889662")); return n => (0, i.jsx)(e, { ...n, text: t }) }, { enableSpellCheck: !0 }) } else if ("none" === window.getComputedStyle(a).getPropertyValue("-webkit-user-select")) { e.preventDefault(); return } else { let s, a, o, l = e.target; for (; null != l;) "src" in l && null != l.src && (a = l.src), "href" in l && null != l.href && (s = l.href, o = l.textContent), l = null == l ? void 0 : l.parentNode; if (null != a) return (0, r.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("12241").then(n.bind(n, "115512")); return t => (0, i.jsx)(e, { ...t, src: null != a ? a : "" }) }); if (null != s) return (0, r.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("96473").then(n.bind(n, "805362")); return t => (0, i.jsx)(e, { ...t, href: s, textContent: o }) }); else if (null != t && "" !== t) return (0, r.openContextMenuLazy)(e, async () => { let { default: e } = await n.e("3865").then(n.bind(n, "745763")); return n => (0, i.jsx)(e, { ...n, text: t }) }) } return e.preventDefault(), null } function o(e) { let t = !1, n = e.target; if ((null == n ? void 0 : n.tagName) === "INPUT" || (null == n ? void 0 : n.tagName) === "TEXTAREA") t = !0; else if ((null == n ? void 0 : n.closest) != null && (null == n ? void 0 : n.closest("[contenteditable=true]")) != null) t = !0; else if (null != s() && "" !== s()) t = !0; else { let n, i, r = e.target; for (; null != r;) "src" in r && null != r.src && (i = r.src), "href" in r && null != r.href && (n = r.href), r = null == r ? void 0 : r.parentNode; (null != n || null != i) && (t = !0) }!t && e.preventDefault() } }, 998502: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NativePermissionRequestType: function() { return o }, ThumbarButtonName: function() { return l } }), n("47120"), n("411104"), n("653041"); var i, r, s, a, o, l, u, d, _ = n("512722"), c = n.n(_), E = n("719711"), I = n("544891"), T = n("433517"), f = n("593472"), S = n("358085"), h = n("591759"), A = n("981631"), m = n("413135").Buffer; let N = window.DiscordNative, p = ["jpg", "jpeg", "png"], O = null, C = null, R = null, g = {}; null != N && (O = N.remoteApp.getVersion().split(".").map(e => parseInt(e)), R = null === (i = (r = N.remoteApp).getModuleVersions) || void 0 === i ? void 0 : i.call(r), C = null === (s = (a = N.remoteApp).getBuildNumber) || void 0 === s ? void 0 : s.call(a)); let L = new Set(["discord_erlpack", "discord_game_utils", "discord_rpc", "discord_spellcheck", "discord_utils", "discord_voice"]), v = !1; async function D(e) { let t = await fetch(new Request(e, { method: "GET", mode: "cors" })); c()(200 === t.status, "Data fetch unsuccessful"); let n = await t.arrayBuffer(); return c()(null != n, "Data is null"), n } function M(e) { return D(e) } function y(e) { var t, n, i, r, s, a, o, l; return { id: g[null !== (t = e.id) && void 0 !== t ? t : ""], nativeProcessObserverId: parseInt(null !== (n = e.id) && void 0 !== n ? n : "", 10), name: null !== (i = e.gameName) && void 0 !== i ? i : e.name, processName: null !== (r = e.name) && void 0 !== r ? r : "", hidden: e.hidden, elevated: e.elevated, sandboxed: null !== (s = e.sandboxed) && void 0 !== s && s, lastFocused: e.lastFocused, exePath: e.exePath, exeName: e.exeName, cmdLine: e.cmdLine, distributor: e.distributor, sku: e.sku, pid: e.pid, pidPath: null !== (a = e.pidPath) && void 0 !== a ? a : [], windowHandle: null !== (o = e.windowHandle) && void 0 !== o ? o : null, fullscreenType: null !== (l = e.fullscreenType) && void 0 !== l ? l : f.RunningProcessFullscreenType.UNKNOWN } }(u = o || (o = {}))[u.Camera = 0] = "Camera", u[u.Microphone = 1] = "Microphone", u[u.Photo = 2] = "Photo", u[u.InputMonitoring = 3] = "InputMonitoring", u[u.ScreenRecording = 4] = "ScreenRecording", (d = l || (l = {})).VIDEO = "VIDEO", d.MUTE = "MUTE", d.DEAFEN = "DEAFEN", d.DISCONNECT = "DISCONNECT", t.default = { requireModule: e => N.nativeModules.requireModule(e), ensureModule: e => S.isPlatformEmbedded ? __OVERLAY__ && L.has(e) ? Promise.resolve() : N.nativeModules.ensureModule(e) : Promise.reject(Error("not embedded")), get canBootstrapNewUpdater() { return N.nativeModules.canBootstrapNewUpdater || !1 }, getCrashReporterMetadata: () => N.crashReporter.getMetadata(), getSetting: async (e, t) => await N.settings.get(e, t), beforeUnload() { var e, t; let n; try { n = this.requireModule("discord_overlay2") } catch (e) {} n && n.reset && n.reset(), n && n.disconnectAllProcesses && n.destroyHostProcess && (n.disconnectAllProcesses(), n.destroyHostProcess()), N.remotePowerMonitor.removeAllListeners(), window.location.origin === window.GLOBAL_ENV.MIGRATION_SOURCE_ORIGIN && !0 !== T.Storage.get(E.DOMAIN_MIGRATION_SUCCESS_KEY) && this.supportsFeature(A.NativeFeatures.USER_DATA_CACHE) && N.userDataCache.cacheUserData(T.Storage.stringify()), null == N || null === (t = N.window) || void 0 === t || t.close(null == N ? void 0 : null === (e = N.globalOverlay) || void 0 === e ? void 0 : e.WINDOW_KEY) }, inputEventRegister(e, t, n, i) { !Array.isArray(t) && (t = t.toJS()), this.getDiscordUtils().inputEventRegister(parseInt(e), t.map(e => { let [t, n, i] = e; return "string" == typeof i ? [t, n, i] : [t, n] }), n, i) }, inputEventUnregister(e) { this.getDiscordUtils().inputEventUnregister(parseInt(e)) }, setOnInputEventCallback(e) { S.isPlatformEmbedded && this.getDiscordUtils().inputWatchAll(e) }, setFocused(e) { this.getDiscordUtils().inputSetFocused(e) }, setObservedGamesCallback(e, t) { try { g = {}; let n = 0; this.getDiscordUtils().setObservedGamesCallback(e.map(e => { let t = ++n; return null != e.id && (g[t] = e.id), { ...e, cmdline: e.cmdLine, id: t } }), e => t(e.map(y))) } catch (e) {} }, setCandidateGamesCallback(e) { this.getDiscordUtils().setCandidateGamesCallback(t => e(t.map(y))) }, clearCandidateGamesCallback() { this.getDiscordUtils().clearCandidateGamesCallback() }, setGameCandidateOverrides(e) { this.getDiscordUtils().setGameCandidateOverrides(e.map(e => ({ ...e, gameId: e.id, gameName: e.name }))) }, shouldDisplayNotifications() { return this.getDiscordUtils().shouldDisplayNotifications() }, getVoiceEngine() { if (__OVERLAY__) throw Error("cannot require discord_voice in overlay"); return v = !0, this.requireModule("discord_voice") }, getDiscordUtils() { if (!v) try { this.getVoiceEngine() } catch (e) {} return this.requireModule("discord_utils") }, isSystemDarkMode() { var e, t, n; return !!(0, S.isWindows)() && (null === (n = null === (e = (t = this.getDiscordUtils()).isSystemDarkMode) || void 0 === e ? void 0 : e.call(t)) || void 0 === n || n) }, getGameUtils() { return this.requireModule("discord_game_utils") }, getCloudSync() { return this.requireModule("discord_cloudsync") }, getDispatch() { return this.requireModule("discord_dispatch") }, setBadge(e) { if ("darwin" === (0, S.getPlatformName)()) { let t = ""; - 1 === e ? t = "•" : e > 0 && (t = "".concat(e)), N.remoteApp.dock.setBadge(t) } else "win32" === (0, S.getPlatformName)() ? this.send("APP_BADGE_SET", e) : "linux" === (0, S.getPlatformName)() && N.remoteApp.setBadgeCount(e >= 0 ? e : 0) }, setSystemTrayIcon(e) { S.isPlatformEmbedded && this.send("SYSTEM_TRAY_SET_ICON", e) }, setThumbarButtons(e) { var t, n; S.isPlatformEmbedded && (null === (n = N.thumbar) || void 0 === n || null === (t = n.setThumbarButtons) || void 0 === t || t.call(n, e, this.isSystemDarkMode())) }, bounceDock(e) { if (S.isPlatformEmbedded) { let t = N.remoteApp; if (null != t.dock) { let n = t.dock.bounce(e); return async () => { let e = await n; t.dock.cancelBounce(e) } } } }, setSystemTrayApplications(e) { S.isPlatformEmbedded && this.send("SYSTEM_TRAY_SET_APPLICATIONS", e) }, get architecture() { return S.isPlatformEmbedded ? N.process.arch : "" }, get releaseChannel() { if (!S.isPlatformEmbedded) return ""; let e = N.remoteApp.getReleaseChannel(); if (null != e) return e; return "" }, get version() { return O }, get buildNumber() { return C }, get moduleVersions() { return R }, copy(e) { S.isPlatformEmbedded && N.clipboard.copy(e) }, async copyImage(e) { c()(S.isPlatformEmbedded, "Copy image method called outside native app"), c()("function" == typeof N.clipboard.copyImage, "Copy image not supported"); let t = await D(e); N.clipboard.copyImage(m.from(t), e) }, async saveImage(e) { var t; c()(S.isPlatformEmbedded, "Save image method called outside native app"); let n = h.default.toURLSafe(e); if (null == n) return; let i = null !== (t = n.pathname.split("/").pop()) && void 0 !== t ? t : "unknown", r = await D(e), s = m.from(r); N.fileManager.saveWithDialog(s, i) }, async saveFile(e, t) { var n; c()(S.isPlatformEmbedded, "Save file method called outside native app"); let i = h.default.toURLSafe(e); if (null == i) return; let r = null !== (n = null != t ? t : i.pathname.split("/").pop()) && void 0 !== n ? n : "unknown", s = await D(e), a = m.from(s); N.fileManager.saveWithDialog(a, r) }, canCopyImage() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : void 0; if (null != e) { var t, n; let i = null === (t = h.default.toURLSafe(e)) || void 0 === t ? void 0 : t.pathname; if (null == i) return !1; let r = null === (n = i.split(".").pop()) || void 0 === n ? void 0 : n.toLowerCase(); if (null != r && !p.includes(r)) return !1 } return "function" == typeof N.clipboard.copyImage }, cut() { S.isPlatformEmbedded && N.clipboard.cut() }, paste() { S.isPlatformEmbedded && N.clipboard.paste() }, readClipboard: () => S.isPlatformEmbedded ? N.clipboard.read() : "", on(e, t) { N.ipc.on(e, t) }, invoke(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i]; return N.ipc.invoke(e, ...n) }, send(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i]; N.ipc.send(e, ...n) }, flashFrame(e) { N.window.flashFrame(e) }, webAuthnRegister: e => N.nativeModules.ensureModule("discord_webauthn").then(() => N.webAuthn.webAuthnRegister(e)), webAuthnAuthenticate: e => N.nativeModules.ensureModule("discord_webauthn").then(() => N.webAuthn.webAuthnAuthenticate(e)), minimize(e) { N.window.minimize(e) }, restore(e) { N.window.restore(e) }, maximize(e) { N.window.maximize(e) }, focus(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; t && (0, S.isWindows)() && this.minimize(null), N.window.focus(t, e) }, blur() { S.isPlatformEmbedded && null != N.window.blur ? N.window.blur() : window.blur() }, fullscreen(e) { N.window.fullscreen(e) }, close(e) { N.window.close(e) }, setAlwaysOnTop(e, t) { "function" == typeof N.window.setAlwaysOnTop && N.window.setAlwaysOnTop(e, t) }, async isAlwaysOnTop(e) { let t = !1; return "function" == typeof N.window.isAlwaysOnTop && (t = await N.window.isAlwaysOnTop(e)), t }, purgeMemory() { S.isPlatformEmbedded && N.processUtils.purgeMemory() }, updateCrashReporter(e) { N.crashReporter.updateCrashReporter(e) }, triggerJSException(e) { N.crashReporter.triggerJSException(e) }, flushDNSCache() { S.isPlatformEmbedded && N.processUtils.flushDNSCache() }, supportsFeature: e => N.features.supports(e), getEnableHardwareAcceleration: () => !S.isPlatformEmbedded || !__OVERLAY__ && N.gpuSettings.getEnableHardwareAcceleration(), setEnableHardwareAcceleration(e) { N.gpuSettings.setEnableHardwareAcceleration(e) }, setChromiumSwitches(e) { N.gpuSettings.setChromiumSwitches(e) }, getGPUDriverVersions() { return (0, S.isWindows)() && null != this.getDiscordUtils().getGPUDriverVersions ? this.getDiscordUtils().getGPUDriverVersions() : Promise.resolve(Object.freeze({})) }, setZoomFactor: e => !!S.isPlatformEmbedded && (N.window.setZoomFactor(e), !0), setBackgroundThrottling(e) { null != N.window.setBackgroundThrottling ? N.window.setBackgroundThrottling(e) : N.window.webContents.setBackgroundThrottling(e) }, getPidFromDesktopSource(e) { if (!((0, S.isWindows)() || (0, S.isMac)()) || null == this.getDiscordUtils().getPidFromWindowHandle) return null; let t = null == e ? void 0 : e.split(":"), n = null == t ? void 0 : t[0]; if ("window" === n) { var i; let e = null !== (i = null == t ? void 0 : t[1]) && void 0 !== i ? i : "", n = this.getDiscordUtils().getPidFromWindowHandle(e); return null == n || 0 === n ? null : n } if (n.startsWith("screen")) return 1; return null }, getDesktopSourceFromPid(e) { if (!(0, S.isWindows)() || null == this.getDiscordUtils().getWindowHandleFromPid || null == e) return null; let t = this.getDiscordUtils().getWindowHandleFromPid(e); return null == t || 0 === t.length ? null : ["window", t, "0"].join(":") }, generateSessionFromPid(e) { return this.getDiscordUtils().generateSessionFromPid(e) }, getAudioPid(e) { return null == this.getDiscordUtils().getAudioPid || null == e ? e : this.getDiscordUtils().getAudioPid(e) }, setForegroundProcess(e) { let { setForegroundProcess: t } = this.getDiscordUtils(); return null != t && t(e) }, getDiscordMemoryUsage() { let { getDiscordMemoryUsage: e } = this.getDiscordUtils(); return null != e ? e() : null }, getDiscordMemoryUsageElectronRenderer() { let { getDiscordMemoryUsageElectronRenderer: e } = this.getDiscordUtils(); return null == e ? void 0 : e() }, showOpenDialog: e => N.fileManager.showOpenDialog({ properties: e }), flushStorageData: () => S.isPlatformEmbedded ? new Promise((e, t) => { null != N.processUtils.flushStorageData ? N.processUtils.flushStorageData(n => null != n ? t(Error(n)) : e()) : e() }) : Promise.resolve(), flushCookies: () => S.isPlatformEmbedded ? new Promise((e, t) => { null != N.processUtils.flushCookies ? N.processUtils.flushCookies(n => null != n ? t(Error(n)) : e()) : e() }) : Promise.resolve(), setCrashInformation(e, t) { var n; S.isPlatformEmbedded && (null == N ? void 0 : null === (n = N.processUtils) || void 0 === n ? void 0 : n.setCrashInformation) != null && N.processUtils.setCrashInformation(e, t) }, blockDisplaySleep: () => S.isPlatformEmbedded && null != N.powerSaveBlocker ? N.powerSaveBlocker.blockDisplaySleep() : null, unblockDisplaySleep(e) { S.isPlatformEmbedded && null != N.powerSaveBlocker && N.powerSaveBlocker.unblockDisplaySleep(e) }, cleanupDisplaySleep() { S.isPlatformEmbedded && null != N.powerSaveBlocker && N.powerSaveBlocker.cleanupDisplaySleep() }, relaunch() { S.isPlatformEmbedded && null != N.remoteApp.relaunch && N.remoteApp.relaunch() }, makeChunkedRequest(e, t, n) { let i = "".concat((0, I.getAPIBaseURL)()).concat(e); if (!S.isPlatformEmbedded) return Promise.reject(Error("Not embedded!")); if (null == N.http) return Promise.reject(Error("HTTP module not available")); let { method: r, maxBps: s, token: a, chunkInterval: o, contentType: l } = { maxBps: 8e3, chunkInterval: 50, contentType: "application/json", ...n }, u = t; "application/json" === l && (u = JSON.stringify(t)); let d = o / 1e3 * s, _ = Math.ceil(u.length / d), c = Array(_); for (let e = 0; e < _; e++) { let t = e * d; c[e] = u.substring(t, t + d) } return new Promise((e, t) => { null != N.http && N.http.makeChunkedRequest(i, c, { method: r, chunkInterval: o, contentType: l, token: a }, (n, i) => null != n ? t(n) : i.status >= 400 ? t(Error(i.body)) : void e(i)) }) }, submitLiveCrashReport(e) { if (!(0, S.isWindows)() || null == this.getDiscordUtils().submitLiveCrashReport) return Promise.resolve(); let t = this.getCrashReporterMetadata(), n = N.app.getReleaseChannel(), i = null == t ? void 0 : t.sentry; return this.getDiscordUtils().submitLiveCrashReport(n, { ...i, ...e }) }, crash(e) { let t = this.getDiscordUtils().crash; return null != t && (t(e), !0) }, setApplicationBackgroundColor(e) { N.ipc.send("SETTINGS_UPDATE_BACKGROUND_COLOR", e) }, initializeExitHook() { let { initializeExitHook: e } = this.getDiscordUtils(); null != e && e() }, asyncify: e => new Promise((t, n) => { e(t) }), IsGameDisplayModeUpdateSupported() { let { gameDisplayModeUpdate: e } = this.getDiscordUtils(); return null != e }, GameDisplayModeUpdate(e) { let { gameDisplayModeUpdate: t } = this.getDiscordUtils(); return null != t && null != e && t(e) }, GameDisplayModeIsGameSupported(e) { let { gameDisplayModeIsSupported: t } = this.getDiscordUtils(); return null != t && null != e && t(e) }, GetWindowFullscreenTypeByPid(e, t, n) { var i; let { getWindowFullscreenTypeByPid: r } = this.getDiscordUtils(), s = 0 !== e && null != r && null != t ? r(e, t) : null; return -1 === s && (s = null), null !== (i = null != s ? s : n) && void 0 !== i ? i : f.RunningProcessFullscreenType.UNKNOWN }, isModuleVersionAtLeast(e, t) { var n, i, r; let s = [...null != O ? O : [0, 0, 0]]; s.push(null !== (i = null === (n = this.moduleVersions) || void 0 === n ? void 0 : n[e]) && void 0 !== i ? i : 0); let a = null !== (r = t[this.releaseChannel]) && void 0 !== r ? r : t.stable; for (let [e, t] of s.entries()) { if (t > a[e]) break; if (t < a[e]) return !1 } return !0 } } }, 804739: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isLaunchable: function() { return a }, isSupportedPlatform: function() { return s } }); var i = n("780570"), r = n("358085"); function s() { return (0, r.isWindows)() || (0, r.isMac)() } function a(e) { let { LibraryApplicationStore: t, LaunchableGameStore: n, DispatchApplicationStore: r, ConnectedAppsStore: s, applicationId: a, branchId: o } = e; if (s.isConnected(a)) return !0; if (null == o && (o = a), r.isLaunchable(a, o)) return !0; let l = t.getLibraryApplication(a, o); return !(null != l && (0, i.isUserEntitledToLibraryApplication)(l)) && n.isLaunchable(a) } }, 228488: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FULLSCREEN_CHANGE_EVENT: function() { return l }, exitFullScreen: function() { return a }, getFullScreenNode: function() { return r }, isFullScreen: function() { return o }, requestFullScreen: function() { return s }, subscribeDocumentToFullScreenChange: function() { return u } }); var i = n("710845"); function r() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return t.find(e => null != e && function(e) { return null != e.requestFullscreen || null != e.webkitRequestFullscreen || e.webkitSupportsFullscreen || null != e.mozRequestFullScreen || null != e.msRequestFullscreen }(e)) } function s(e) { "function" == typeof e.requestFullscreen ? e.requestFullscreen() : "function" == typeof e.webkitRequestFullscreen ? e.webkitRequestFullscreen() : "function" == typeof e.webkitEnterFullscreen ? e.webkitEnterFullscreen() : "function" == typeof e.mozRequestFullScreen ? e.mozRequestFullScreen() : "function" == typeof e.msRequestFullscreen ? e.msRequestFullscreen() : new i.default("FullScreenUtils").warn("Fullscreen API is not supported.") } function a(e, t) { let n = null != t ? t : document; o(null, n) && ("function" == typeof n.exitFullscreen ? n.exitFullscreen() : "function" == typeof n.webkitExitFullscreen ? n.webkitExitFullscreen() : "function" == typeof e.webkitExitFullscreen ? e.webkitExitFullscreen() : "function" == typeof n.mozCancelFullScreen ? n.mozCancelFullScreen() : "function" == typeof n.msExitFullscreen ? n.msExitFullscreen() : new i.default("FullScreenUtils").warn("Fullscreen API is not supported.")) } function o(e, t) { let n = null != t ? t : document; return !!(null != n.fullscreenElement || null != n.mozFullScreenElement || null != n.webkitFullscreenElement || null != n.msFullscreenElement || null != e && e.webkitDisplayingFullscreen) } let l = (() => { if ("undefined" != typeof document) { let e = document.createElement("video"); if ("function" == typeof e.requestFullscreen); else if ("function" == typeof e.webkitRequestFullscreen) return "webkitfullscreenchange"; else if ("function" == typeof e.webkitEnterFullscreen) return "webkitendfullscreen"; else if ("function" == typeof e.mozRequestFullScreen) return "mozfullscreenchange"; else if ("function" == typeof e.msRequestFullscreen) return "msfullscreenchange" } else console.warn("FullScreenUtils has been imported in a non-web environment"); return "fullscreenchange" })(); function u(e, t) { return e.addEventListener(l, t), e.addEventListener("webkitfullscreenchange", t), () => { e.removeEventListener(l, t), e.removeEventListener("webkitfullscreenchange", t) } } }, 13140: function(e, t, n) { "use strict"; n.r(t), n.d(t, { codeToKey: function() { return S }, getEnv: function() { return f }, keyToCode: function() { return h }, toBrowserEvents: function() { return O }, toCombo: function() { return C }, toString: function() { return R } }), n("47120"), n("757143"), n("411104"), n("724458"), n("653041"); var i = n("921738"), r = n.n(i), s = n("392711"), a = n.n(s), o = n("714338"), l = n("823379"), u = n("358085"), d = n("981631"); let _ = (0, u.isLinux)() ? d.LinuxKeyToCode : (0, u.isMac)() ? d.MacosKeyToCode : (0, u.isWindows)() ? d.WindowsKeyToCode : void 0, c = a().invert(d.LinuxKeyToCode); c["223"] = "`", Object.freeze(c); let E = Object.freeze(a().invert(d.MacosKeyToCode)), I = a().invert(d.WindowsKeyToCode); I["223"] = "`", Object.freeze(I); let T = a().invert(null != _ ? _ : {}); function f() { if ((0, u.isLinux)()) return d.KeyboardEnvs.LINUX; if ((0, u.isMac)()) return d.KeyboardEnvs.MACOS; if ((0, u.isWindows)()) return d.KeyboardEnvs.WINDOWS; else return d.KeyboardEnvs.BROWSER } function S(e) { let [, t, n] = e; switch (n) { case d.KeyboardEnvs.LINUX: return c["" + t]; case d.KeyboardEnvs.MACOS: return E["" + t]; case d.KeyboardEnvs.WINDOWS: return I["" + t]; case d.KeyboardEnvs.BROWSER: return r()(t); default: return T["" + t] } } function h(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : f(), n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : d.KeyboardDeviceTypes.KEYBOARD_KEY; switch (n) { case d.KeyboardDeviceTypes.KEYBOARD_KEY: case d.KeyboardDeviceTypes.KEYBOARD_MODIFIER_KEY: switch (t) { case d.KeyboardEnvs.LINUX: return d.LinuxKeyToCode[e]; case d.KeyboardEnvs.MACOS: return d.MacosKeyToCode[e]; case d.KeyboardEnvs.WINDOWS: return d.WindowsKeyToCode[e]; case d.KeyboardEnvs.BROWSER: return r()(e.replace(/^(right|left) (shift|meta|ctrl|alt)$/, "$2").replace("meta", "command")); default: return _[e] } case d.KeyboardDeviceTypes.MOUSE_BUTTON: return parseInt(e.replace("MOUSE", ""), 10); case d.KeyboardDeviceTypes.GAMEPAD_BUTTON: return parseInt(e.replace("GAMEPAD", ""), 10); default: throw Error("Unrecognized DeviceType ".concat(n, ".")) } }!(0, u.isMac)() && (T["223"] = "`"), Object.freeze(T); let A = [ ["META", "⌘"], ["RIGHT META", "RIGHT ⌘"], ["SHIFT", "⇧"], ["RIGHT SHIFT", "RIGHT ⇧"], ["ALT", "⌥"], ["RIGHT ALT", "RIGHT ⌥"], ["CTRL", "⌃"], ["RIGHT CTRL", "RIGHT ⌃"], ["ENTER", "↵"], ["BACKSPACE", "⌫"], ["DEL", "⌦"], ["ESC", "⎋"], ["PAGEUP", "⇞"], ["PAGEDOWN", "⇟"], ["UP", "↑"], ["DOWN", "↓"], ["LEFT", "←"], ["RIGHT", "→"], ["HOME", "↖"], ["END", "↘"], ["TAB", "⇥"], ["SPACE", "␣"] ], m = e => { for (let [t, n] of A) if (t === e.toUpperCase()) return n; return e }, N = e => { for (let [t, n] of A) if (n === e.toUpperCase()) return t.toLowerCase(); return e }, p = /shift|meta|ctrl|alt$/; function O(e) { let t = { keyCode: 0, metaKey: !1, shiftKey: !1, altKey: !1, ctrlKey: !1 }; return null == e ? [] : e.reduce((e, n) => { let i = S(n), r = { ...t }; if (null == i) return e.push({ ...r, combo: n }), e; if (p.test(i)) return t[i + "Key"] = !0, e.map(e => (e[i + "Key"] = !0, e)); { let t = h(i, d.KeyboardEnvs.BROWSER); return null != t && (r.keyCode = t), e.push(r), e } }, []) } function C(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : f(), n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : d.KeyboardDeviceTypes.KEYBOARD_KEY; return e.replace(/numpad plus/i, "").replace(/NUMPAD \+/i, "numpad plus").replace(/mod/i, o.default.modKey).split("+").map(e => e.trim().replace("plus", "+")).reduce((e, i) => { let r = h(N(i), t, n); return null != r && e.push([n, r, t]), e }, []) } function R(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], i = e.map(e => { let [t, n, i] = e; if (t === d.KeyboardDeviceTypes.KEYBOARD_KEY || t === d.KeyboardDeviceTypes.KEYBOARD_MODIFIER_KEY) { var r; return null !== (r = S(null != i ? [t, n, i] : [t, n])) && void 0 !== r ? r : "UNK".concat(n) } if (t === d.KeyboardDeviceTypes.MOUSE_BUTTON) return "mouse".concat(n); if (t === d.KeyboardDeviceTypes.GAMEPAD_BUTTON) return "gamepad".concat(n); else return "dev".concat(t, ",").concat(n) }).filter(l.isNotNullish); return t ? (-1 !== n.g.navigator.appVersion.indexOf("Mac OS X") ? i.map(m) : i).join(" + ").toUpperCase() : i.join("+") } }, 169480: function(e, t, n) { "use strict"; n.r(t), n.d(t, { showModal: function() { return o }, updateModalProps: function() { return l } }); var i = n("735250"); n("470079"); var r = n("952265"), s = n("712364"); let a = (e, t, n) => function(r) { return (0, i.jsx)(s.default, { handleSubmit: e, handleEarlyClose: t, ...n, ...r }) }; function o(e, t, n) { return (0, r.openModal)(a(e, t, n), { onCloseCallback: t }) } function l(e, t, n, i) { return (0, r.updateModal)(e, a(t, n, i)) } }, 538036: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("981631"); let r = [], s = !1; function a() { let e = window.navigator.connection; return null == e ? { type: i.NetworkConnectionTypes.UNKNOWN, effectiveSpeed: i.NetworkConnectionSpeeds.UNKNOWN } : { type: null != e.type ? e.type : i.NetworkConnectionTypes.UNKNOWN, effectiveSpeed: e.effectiveType } } function o() { let e = a(); r.forEach(t => t(e)) } t.default = { addOnlineCallback(e) { window.addEventListener("online", e) }, removeOnlineCallback(e) { window.removeEventListener("online", e) }, addOfflineCallback(e) { window.addEventListener("offline", e) }, removeOfflineCallback(e) { window.removeEventListener("offline", e) }, addChangeCallback(e) { var t; t = e, r.push(t), function() { if (!0 === s) return; let e = window.navigator.connection; null != e && (s = !0, e.addEventListener("change", o)) }() }, removeChangeCallback(e) { ! function(e) { let t = r.indexOf(e); - 1 !== t && (r.splice(t, 1), ! function() { if (!1 === s) return; let e = window.navigator.connection; null != e && 0 === r.length && null != e && (e.removeEventListener("change", o), s = !1) }()) }(e) }, getNetworkInformation: () => Promise.resolve(a()), isOnline() { let e = navigator.onLine; return void 0 === e || e } } }, 654769: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("177593"); var i, r = n("392711"), s = n.n(r), a = n("525654"), o = n.n(a), l = n("579806"), u = n("292959"), d = n("246946"), _ = n("626135"), c = n("358085"), E = n("557177"), I = n("998502"), T = n("981631"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let S = c.isPlatformEmbedded && (0, c.isWindows)(), h = S && 10 > parseFloat(l.default.os.release), A = !0; if (S && !h) { let [e, , t] = l.default.os.release.split("."); A = parseInt(e) > 10 || parseInt(t) >= 15063 } let m = S && A || "Chrome" === o().name && 47 > parseFloat(o().version) || "Firefox" === o().name && 52 > parseFloat(o().version), N = s().throttle(E.playSound, 1e3, { leading: !0 }); function p() { I.default.flashFrame(!1) } S && (window.addEventListener("focus", p), I.default.on("MAIN_WINDOW_FOCUS", p)); let O = window.Notification; if (h) { let e = {}; I.default.on("NOTIFICATION_CLICK", (t, n) => { let i = e[n]; null != i && (i.onclick(), i.close()) }), I.default.send("NOTIFICATIONS_CLEAR"), i = class { static requestPermission(e) { e() } close() { null != e[this.id] && (delete e[this.id], I.default.send("NOTIFICATION_CLOSE", this.id), this.onclose()) } constructor(t, { body: n, icon: i }) { f(this, "id", O._id++), f(this, "title", void 0), f(this, "body", void 0), f(this, "icon", void 0), f(this, "onshow", function() {}), f(this, "onclick", function() {}), f(this, "onclose", function() {}), this.title = t, this.body = n, this.icon = i, setImmediate(() => this.onshow()), e[this.id] = this, I.default.send("NOTIFICATION_SHOW", { id: this.id, title: this.title, body: this.body, icon: this.icon }) } }, f(i, "permission", "granted"), f(i, "_id", 0), O = i } function C() { return null != O && "granted" === O.permission } function R(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1, n = arguments.length > 2 ? arguments[2] : void 0; e.includes("message") ? N(e, t, void 0, n) : (0, E.playSound)(e, t) } function g(e) { return d.default.disableNotifications && null == e.overrideStreamerMode || !C() || c.isPlatformEmbedded && !I.default.shouldDisplayNotifications() } t.default = { hasPermission: C, requestPermission: function(e) { null != O && O.requestPermission(() => { null != e && e(C()) }) }, showNotification: function(e, t, n, i, r) { var a, o, l, d; let E; if (g(r)) { null != r.sound && !1 !== r.playSoundIfDisabled && R(r.sound, null !== (o = r.volume) && void 0 !== o ? o : 1, r.soundpack); return } null != r.sound && R(r.sound, null !== (l = r.volume) && void 0 !== l ? l : 1, r.soundpack); let f = null !== (d = null == r ? void 0 : r.tag) && void 0 !== d ? d : null; (0, c.isLinux)() && (n = s().escape(n)); let h = { icon: e, body: n, tag: f, silent: !0 }; S && u.default.taskbarFlash && I.default.flashFrame(!0); try { E = new O(t, h) } catch (e) { return null } return (null === (a = r.onShown) || void 0 === a || a.call(r), !r.omitViewTracking && _.default.track(T.AnalyticEvents.NOTIFICATION_VIEWED, i), E.onclick = () => { var e; c.isPlatformEmbedded ? I.default.focus() : (window.focus(), E.close()), !r.omitClickTracking && _.default.track(T.AnalyticEvents.NOTIFICATION_CLICKED, i), null === (e = r.onClick) || void 0 === e || e.call(r) }, m && setTimeout(() => E.close(), 5e3), A) ? E : { close() { var e; null == E || null === (e = E.onclose) || void 0 === e || e.call(E) } } }, disabled: g } }, 145597: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { DEV_PID: function() { return d }, OVERLAY_DEFAULT_RESOLUTION: function() { return o }, OVERLAY_LAYOUT_ID: function() { return u }, OVERLAY_MIN_RESOLUTION: function() { return l }, OVERLAY_VERSION: function() { return a }, getPID: function() { return c }, getRPCAuthToken: function() { return I }, isOutOfProcess: function() { return h }, setOutOfProcessSupport: function() { return f }, setPID: function() { return E }, supportsOutOfProcess: function() { return S }, validResolution: function() { return T } }), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"), n("490029"); var s = n("358085"); n("981631"); let a = 2, o = { width: 3840, height: 2160 }, l = { width: 768, height: 432 }, u = "overlay_default", d = -2, _ = !1; function c() { var e; if (void 0 !== i) return i; let t = parseInt(null !== (e = new URLSearchParams(window.location.search).get("pid")) && void 0 !== e ? e : "", 10); return isNaN(t) && (t = -1), i = t } function E(e) { h() && (i = e) } function I() { return new URLSearchParams(window.location.search).get("rpc_auth_token") } function T(e) { return !s.isPlatformEmbedded || e.width >= l.width && e.height >= l.height } function f(e) { _ = e } function S() { return _ } function h() { var e; return void 0 !== r ? r : r = (null !== (e = new URLSearchParams(window.location.search).get("oop")) && void 0 !== e ? e : "") === "true" } }, 954824: function(e, t, n) { "use strict"; n.r(t); var i = n("525654"), r = n.n(i), s = n("444675"); function a(e, t) { if (!e.startsWith("discord:")) return location.href = e, s.nextTick(() => t(!0)); let { body: n } = document; if (null == n) return s.nextTick(() => t(!1)); let i = document.createElement("iframe"); n.appendChild(i); try { null != i.contentWindow && (i.contentWindow.location.href = e), s.nextTick(() => t(!0)) } catch (e) { "NS_ERROR_UNKNOWN_PROTOCOL" === e.name && s.nextTick(() => t(!1)) } window.setTimeout(() => { var e; (null !== (e = null == i ? void 0 : i.parentElement) && void 0 !== e ? e : null) !== null && n.removeChild(i) }, 1e3) } function o(e, t) { let n = !1; function i() { n = !0 } window.addEventListener("blur", i), location.href = e, setTimeout(() => { window.removeEventListener("blur", i), t(n) }, 1e3) } function l(e, t) { t(!1) } function u(e, t) { location.href = e, s.nextTick(() => t(!0)) } t.default = { launch: function() { var e, t; if ((null === (e = r().os) || void 0 === e ? void 0 : e.family) === "Android" || (null === (t = r().os) || void 0 === t ? void 0 : t.family) === "iOS") return u; if ("Gecko" === r().layout) return a; if (null != r().ua && -1 !== r().ua.indexOf("Valve Steam GameOverlay")) return l; return o }() } }, 902653: function(e, t, n) { "use strict"; n.r(t), n.d(t, { WebAudioAPISound: function() { return N }, WebAudioSound: function() { return m }, playGiftSound: function() { return h } }), n("47120"), n("411104"); var i, r, s = n("392711"), a = n.n(s), o = n("304809"), l = n("22382"), u = n("747071"), d = n("131951"), _ = n("358085"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = "default", I = E; (r = i || (i = {})).Stopped = "stopped", r.Playing = "playing", r.Looping = "looping", r.Paused = "paused"; let T = new Map; async function f(e) { let t = await fetch(n("236816")("../../sounds/".concat(e, ".mp3").replace("../../sounds/", "./"))).then(e => e.arrayBuffer()); return (0, o.getOrCreateAudioContext)().decodeAudioData(t) } async function S(e) { let t = T.get(e); return null == t && (t = f(e), T.set(e, t)), await t } function h(e, t) { let n = new Audio((0, l.default)(e)); n.volume = (0, u.default)(t), n.play() } function A() { null != window.navigator.mediaDevices && window.navigator.mediaDevices.enumerateDevices().then(e => { let t = d.default.getOutputDevices(), n = a()(t).sortBy(e => e.index).findIndex(e => e.id === d.default.getOutputDeviceId()), i = t[d.default.getOutputDeviceId()], r = e.filter(e => "audiooutput" === e.kind && "communications" !== e.deviceId), s = r[n]; null != i && (null == s || s.label !== i.name) && (s = r.find(e => e.label === i.name)), I = null != s ? s.deviceId : E }).catch(() => { I = E }) } _.isPlatformEmbedded && (d.default.addChangeListener(A), A()); class m { get volume() { return this._volume } set volume(e) { this._volume = e, this._ensureAudio().then(t => t.volume = e) } loop() { this._ensureAudio().then(e => { e.loop = !0, e.play() }) } play() { this._ensureAudio().then(e => { e.loop = !1, e.play() }) } pause() { null != this._audio && this._audio.then(e => e.pause()) } stop() { this._destroyAudio() } playWithListener() { return new Promise((e, t) => { this._ensureAudio().then(n => { (null == n.duration || 0 === n.duration) && t("sound has no duration"), n.play(), setTimeout(() => { e(!0) }, n.duration) }) }) } _destroyAudio() { null != this._audio && (this._audio.then(e => { e.pause(), e.src = "" }), this._audio = null) } _ensureAudio() { var e; return this._audio = null !== (e = this._audio) && void 0 !== e ? e : new Promise((e, t) => { let i = new Audio; i.src = n("236816")("../../sounds/".concat(this.name, ".mp3").replace("../../sounds/", "./")), i.onloadeddata = () => { i.volume = Math.min(d.default.getOutputVolume() / 100 * this._volume, 1), _.isPlatformEmbedded && i.setSinkId(I), e(i) }, i.onerror = () => t(Error("could not play audio")), i.onended = () => this._destroyAudio(), i.load() }), this._audio } constructor(e, t, n) { c(this, "name", void 0), c(this, "_volume", void 0), c(this, "_audio", void 0), this.name = e, this._volume = n } } class N { get volume() { return this._volume } set volume(e) { this._ensureAudio().then(t => { let { gainNode: n, context: i } = t; this._volume = e, n.gain.setValueAtTime(e, i.currentTime) }) } loop() { "looping" !== this._state && (this._state = "looping", this._ensureAudio().then(e => { let { source: t } = e; "looping" === this._state && (t.loop = !0, t.start()) })) } play() { "playing" !== this._state && (this._state = "playing", this._ensureAudio().then(e => { let { source: t } = e; "playing" === this._state && (t.loop = !1, t.start()) })) } pause() { "paused" !== this._state && (this._state = "paused", this._ensureAudio().then(e => { let { source: t } = e; "paused" === this._state && (t.stop(), this._state = "paused") })) } stop() { this._destroyAudio() } _destroyAudio() { "stopped" !== this._state && (this._state = "stopped", this._ensureAudio().then(e => { let { source: t } = e; "stopped" === this._state && (t.disconnect(), t.stop(), this._source = null, this._buffer = null, this._state = "stopped", this._ensureAudioPromise = null) })) } async _ensureAudio() { if (null == this._ensureAudioPromise) { let e = Math.min(d.default.getOutputVolume() / 100 * this._volume, 1); this._ensureAudioPromise = S(this.name).then(t => null == t ? Promise.reject(Error("Failed to load audio: ".concat(this.name))) : (this._audioContext = (0, o.getOrCreateAudioContext)(), this._gain = new GainNode(this._audioContext), this._gain.gain.value = e, _.isPlatformEmbedded && this._audioContext.setSinkId(I), this._buffer = t, this._source = this._audioContext.createBufferSource(), this._source.buffer = t, this._source.connect(this._gain).connect(this._audioContext.destination), this._source.loop = !1, this._source.onended = () => this._destroyAudio(), Promise.resolve({ context: this._audioContext, gainNode: this._gain, source: this._source }))).catch(() => Promise.reject(Error("Failed to load audio: ".concat(this.name)))) } return await this._ensureAudioPromise } constructor(e, t, n) { c(this, "name", void 0), c(this, "_volume", void 0), c(this, "_audioContext", void 0), c(this, "_buffer", void 0), c(this, "_source", void 0), c(this, "_gain", void 0), c(this, "_state", void 0), c(this, "_ensureAudioPromise", void 0), this.name = e, this._volume = n, this._audioContext = null, this._buffer = null, this._source = null, this._state = "stopped", this._ensureAudioPromise = null } } }, 473159: function(e, t, n) { "use strict"; n.r(t), n.d(t, { setupWindow: function() { return o } }), n("47120"); var i = n("284737"), r = n("228488"), s = n("830917"), a = n("919570"); function o(e) { let t = e.document, n = (0, s.setupWindowId)(e); function o() { (0, a.setCurrentlyInteractingWindowId)(n) } function l() { setTimeout(() => { (0, a.clearCurrentlyInteractingWindowId)(n) }, 0) } for (let n of (e.addEventListener("resize", function() { (0, i.resized)(e) }), e.addEventListener("focus", function() { (0, i.focus)(e, !0) }), e.addEventListener("blur", function() { !e.document.hasFocus() && (0, i.focus)(e, !1) }), e.addEventListener("unload", function() { (0, i.unload)(e) }), e.addEventListener("visibilitychange", function() { (0, i.visibilityChange)(e) }), a.INTERACTION_EVENTS)) t.addEventListener(n, o, !0), t.addEventListener(n, l, !1); (0, r.subscribeDocumentToFullScreenChange)(t, function() { (0, i.fullscreenChange)(e) }), (0, i.init)(e) } }, 830917: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getMainWindowId: function() { return a }, getWindowId: function() { return r }, setupWindowId: function() { return s } }); var i = n("392711"); function r(e) { return e.__DISCORD_WINDOW_ID } function s(e) { let t = (0, i.uniqueId)("window-"); return e.__DISCORD_WINDOW_ID = t, t } function a() { return r(window) } }, 919570: function(e, t, n) { "use strict"; n.r(t), n.d(t, { INTERACTION_EVENTS: function() { return i }, clearCurrentlyInteractingWindowId: function() { return o }, getCurrentlyInteractingWindowId: function() { return s }, setCurrentlyInteractingWindowId: function() { return a } }); let i = ["click", "mousedown", "mouseup", "keydown", "keyup", "keypress", "contextmenu"], r = null; function s() { return r } function a(e) { r = e } function o(e) { r === e && (r = null) } }, 506071: function(e, t, n) { "use strict"; n.r(t), n.d(t, { useIsWindowFocused: function() { return o } }); var i = n("470079"), r = n("442837"), s = n("40851"), a = n("451478"); function o() { let { windowId: e } = i.useContext(s.default); return (0, r.useStateFromStores)([a.default], () => a.default.isFocused(e), [e]) } }, 554174: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("808506"); function r() { let e = i.default.getFocusedPID(); return null != e && (i.default.isReady(e) || i.default.isCrashed(e)) ? e : null } }, 525769: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ImpressionNames: function() { return i }, NetworkActionNames: function() { return r } }), (s = i || (i = {})).ACTIVITIES = "impression_activities", s.ACTIVITIES_HAPPENING_NOW = "impression_activities_happening_now", s.ACTIVITY_BOOKMARK_SHARE_MODAL = "impression_activity_bookmark_share_modal", s.ACTIVITY_BOOSTING_UPSELL = "impression_activity_boosting_upsell", s.ACTIVITY_DETAILS = "impression_activity_details", s.ACTIVITY_NITRO_UPSELL = "impression_activity_nitro_upsell", s.ACTIVITY_SHARE_MOMENT_MODAL = "impression_activity_share_moment_modal", s.ACTIVITY_SHELF = "impression_activity_shelf", s.ACTIVITY_SHELF_SELECT_CHANNEL = "impression_activity_shelf_select_channel", s.APP_LAUNCHER_HOME_ACTIVITY_ITEM = "impression_app_launcher_home_activity_item", s.APP_LAUNCHER_SEARCH_RESULTS_ITEM = "impression_app_launcher_search_results_item", s.APP_LAUNCHER_SECTION = "impression_app_launcher_section", s.APPLICATION_LIBRARY = "impression_application_library", s.APPLICATION_STORE = "impression_application_store", s.APRIL_PREMIUM_MARKETING_DECO_CLAIMED_MODAL = "impression_april_premium_marketing_deco_claimed_modal", s.AVATAR_UPLOAD = "impression_avatar_upload", s.CHANNEL_ADD_INFO = "impression_channel_add_info", s.CHANNEL_ADD_MEMBERS = "impression_channel_add_members", s.CHANNEL_CALL_VIDEO_GRID = "impression_channel_call_video_grid", s.CHANNEL_CALL_VIDEO_GRID_VIEW = "impression_channel_call_video_grid_view", s.CHANNEL_VIEWED = "impression_channel_viewed", s.CLIP_EDITOR_VIEWED = "impression_clip_editor_viewed", s.CLIP_GALLERY_VIEWED = "impression_clip_gallery_viewed", s.CLYDE_AI_PROFILE_EMBED_VIEWED = "impression_clyde_ai_profile_embed_viewed", s.CONTACT_SYNC_CONTACT_INVITES = "impression_contact_sync_contact_invites", s.CONTACT_SYNC_INPUT_NAME = "impression_contact_sync_input_name", s.CONTACT_SYNC_START = "impression_contact_sync_start", s.CONTACT_SYNC_SUGGESTIONS = "impression_contact_sync_suggestions", s.CREATOR_PROMO_PAGE_GUILD_HEADER_UPSELL = "impression_creator_promo_page_guild_header_upsell", s.DIRECTORY_ADD_GUILD_CONFIRMATION = "impression_directory_add_guild_confirmation", s.DISCOVERABILITY = "impression_discoverability", s.DROPS_QUEST_COMPLETION = "impression_drops_quest_completion", s.DROPS_QUEST_ENROLLMENT = "impression_drops_quest_enrollment", s.EMBEDDED_ACTIVITY_HAPPENING_NOW = "impression_embedded_activity_happening_now", s.ENABLE_CREATOR_MONETIZATION_ACCEPT_TERMS_LANDING = "impression_enable_creator_monetization_accept_terms_landing", s.ENABLE_CREATOR_MONETIZATION_CREATE_REQUEST_LANDING = "impression_enable_creator_monetization_create_request_landing", s.ENABLE_CREATOR_MONETIZATION_GUILD_HEADER_UPSELL = "impression_enable_creator_monetization_guild_header_upsell", s.ENABLE_CREATOR_MONETIZATION_WAITLIST_LANDING = "impression_enable_creator_monetization_waitlist_landing", s.FRIENDS = "impression_friends", s.GAME_CONSOLE_DEVICE_LIST = "impression_game_console_device_list", s.GDM_SETTINGS_INVITES = "impression_gdm_settings_invites", s.GUILD_ADD_ACCEPT_INVITE = "impression_guild_add_accept_invite", s.GUILD_ADD_CHANNEL_PROMPT = "impression_guild_add_channel_prompt", s.GUILD_ADD_CUSTOMIZE = "impression_guild_add_customize", s.GUILD_ADD_GUILD_INVITE = "impression_guild_add_guild_invite", s.GUILD_ADD_INTENT_SELECTION = "impression_guild_add_intent_selection", s.GUILD_ADD_JOIN = "impression_guild_add_join", s.GUILD_CREATE_MODAL_JOIN = "impression_guild_create_modal_join", s.GUILD_ADD_LANDING = "impression_guild_add_landing", s.GUILD_CHANNEL = "impression_guild_channel", s.GUILD_DISCOVERY = "impression_guild_discovery", s.GUILD_INVITE = "impression_guild_invite", s.GUILD_INVITE_LINK_SETTINGS = "impression_guild_invite_link_settings", s.GUILD_INVITE_SEARCH = "impression_guild_invite_search", s.GUILD_MEMBER_VERIFICATION = "impression_guild_member_verification", s.GUILD_PERMANENT_LINKS_UPSELL = "impression_guild_permanent_links_upsell", s.GUILD_PRODUCT_LISTING_EMBED = "impression_guild_product_listing_embed", s.GUILD_PRODUCT_LISTING_INFO_MODAL = "impression_guild_product_listing_info_modal", s.GUILD_ROLE_SUBSCRIPTION_STORE_PAGE_GUILD_SETTINGS = "impression_guild_role_subscription_store_page_guild_settings", s.GUILD_SETTINGS_ANALYTICS = "impression_guild_settings_analytics", s.GUILD_SETTINGS_AUDIT_LOG = "impression_guild_settings_audit_log", s.GUILD_SETTINGS_AUDIT_LOG_V2 = "impression_guild_settings_audit_log_v2", s.GUILD_SETTINGS_BANS = "impression_guild_settings_bans", s.GUILD_SETTINGS_BOOST_STATUS = "impression_guild_settings_boost_status", s.GUILD_SETTINGS_CHANNELS = "impression_guild_settings_channels", s.GUILD_SETTINGS_CLYDE = "impression_guild_settings_clyde", s.GUILD_SETTINGS_COMMUNITY_OVERVIEW = "impression_guild_settings_community_overview", s.GUILD_SETTINGS_COMMUNITY_WELCOME = "impression_guild_settings_community_welcome", s.GUILD_SETTINGS_DISCOVERY = "impression_guild_settings_discovery", s.GUILD_SETTINGS_DISCOVERY_LANDING_PAGE = "impression_guild_settings_discovery_landing_page", s.GUILD_SETTINGS_EMOJI = "impression_guild_settings_emoji", s.GUILD_SETTINGS_ENABLE_COMMUNITY = "impression_guild_settings_enable_community", s.GUILD_SETTINGS_INTEGRATION = "impression_guild_settings_integration", s.GUILD_SETTINGS_INVITES = "impression_guild_settings_invites", s.GUILD_SETTINGS_LANDING = "impression_guild_settings_landing", s.GUILD_SETTINGS_MEMBER_VERIFICATION = "impression_guild_settings_member_verification", s.GUILD_SETTINGS_MEMBERS = "impression_guild_settings_members", s.GUILD_SETTINGS_MODERATION = "impression_guild_settings_moderation", s.GUILD_SETTINGS_OVERVIEW = "impression_guild_settings_overview", s.GUILD_SETTINGS_PARTNER = "impression_guild_settings_partner", s.GUILD_SETTINGS_ROLES = "impression_guild_settings_roles", s.GUILD_SETTINGS_SAFETY = "impression_guild_settings_safety", s.GUILD_SETTINGS_SECURITY = "impression_guild_settings_security", s.GUILD_SETTINGS_SOUNDBOARD = "impression_guild_settings_soundboard", s.GUILD_SETTINGS_STICKERS = "impression_guild_settings_stickers", s.GUILD_SETTINGS_TEMPLATE = "impression_guild_settings_template", s.GUILD_SETTINGS_VANITY_URL = "impression_guild_settings_vanity_url", s.GUILD_SETTINGS_WEBHOOKS = "impression_guild_settings_webhooks", s.GUILD_SETTINGS_WIDGET = "impression_guild_settings_widget", s.GUILD_SHOP_EMBED = "impression_guild_shop_embed", s.GUILD_SHOP_PAGE = "impression_guild_shop_page", s.GUILD_SHOP_UPSELL = "impression_guild_shop_upsell", s.GUILD_TRANSFER_OWNERSHIP = "impression_guild_transfer_ownership", s.GUILD_TRANSFER_OWNERSHIP_CONFIRM_EMAIL_CODE = "impression_guild_transfer_ownership_confirm_email_code", s.GUILD_TRANSFER_OWNERSHIP_CONFIRM_SMS_CODE = "impression_guild_transfer_ownership_confirm_sms_code", s.GUILDS_EMPTY_NUX = "impression_guilds_empty_nux", s.HOTSPOT = "impression_hotspot", s.HUB_CREATE_GUILD_CUSTOMIZE = "impression_hub_create_guild_customize", s.HUB_CREATE_GUILD_TEMPLATE = "impression_hub_create_guild_template", s.HUB_EMAIL_SIGNUP = "impression_hub_email_signup", s.HUB_EMAIL_VERIFICATION_PAGE = "impression_hub_email_verification_page", s.HUB_EXISTING_GUILD_CHOOSE = "impression_hub_existing_guild_choose", s.HUB_EXISTING_GUILD_CUSTOMIZE = "impression_hub_existing_guild_customize", s.HUB_WAITLIST_SIGNUP = "impression_hub_waitlist_signup", s.INVITE_ACCEPT = "impression_invite_accept", s.LOCALIZED_PRICING_UPSELL_VIEWED = "impression_localized_pricing_upsell_viewed", s.MESSAGES_EMPTY_NUX = "impression_messages_empty_nux", s.MULTI_ACCOUNT_SWITCH_LANDING = "impression_multi_account_switch_landing", s.NEW_USER_INTENT_START = "impression_new_user_intent_start", s.NITRO_TAB = "impression_nitro_tab", s.NOTIFICATION_CENTER_LANDING = "impression_notification_center_landing", s.NOTIFICATION_SETTING_UNREAD_NUDGE = "impression_notification_setting_unread_nudge", s.POLL_EDITOR_VIEWED = "impression_poll_editor_viewed", s.POMELO_LANDING = "impression_pomelo_landing", s.PREMIUM_GUILD_SUBSCRIPTION_MARKETING_PAGE = "impression_premium_guild_subscription_marketing_page", s.PREMIUM_MARKETING_BANNER = "impression_premium_marketing_banner", s.PREMIUM_MARKETING_SURFACE = "impression_premium_marketing_surface", s.PREMIUM_MARKETING_TENURE_REWARD_CARD = "impression_premium_marketing_tenure_reward_card", s.PUSH_NOTIFICATION_PREPROMPT = "impression_push_notification_preprompt", s.PUSH_NOTIFICATION_REACTIVATION_PROMPT = "impression_push_notification_reactivation_prompt", s.QUESTS_LANDING_PAGE = "impression_quests_landing_page", s.REQUEST_REVIEW_MODAL = "impression_request_review_modal", s.ROLE_CREATE_ADD_MEMBERS = "impression_role_create_add_members", s.ROLE_CREATE_DISPLAY = "impression_role_create_display", s.ROLE_CREATE_PERMISSIONS = "impression_role_create_permissions", s.ROLE_SUBSCRIPTION_EMOJI_UPSELL = "impression_role_subscription_emoji_upsell", s.ROLE_SUBSCRIPTION_INITIAL_SETUP_MODAL_LANDING = "impression_role_subscription_initial_setup_modal_landing", s.ROLE_SUBSCRIPTION_INITIAL_SETUP_MODAL_TIER_STEP = "impression_role_subscription_initial_setup_modal_tier_step", s.ROLE_SUBSCRIPTION_LISTING_TEMPLATE_SELECTOR = "impression_role_subscription_listing_template_selector", s.ROLE_SUBSCRIPTION_LISTING_UPSELL_ERROR_PAGE = "impression_role_subscription_listing_upsell_error_page", s.SHELF_ACTIVITY_DETAILS = "impression_shelf_activity_details", s.SNOWSGIVING = "impression_snowsgiving", s.SOUNDBOARD_POPOUT = "impression_soundboard_popout", s.STAGE_DISCOVERY = "impression_stage_discovery", s.URF_CONFIRM_EMAIL_CODE = "impression_urf_confirm_email_code", s.URF_ENTER_EMAIL = "impression_urf_enter_email", s.USER_ACCOUNT_EMAIL_CHANGE_COMPLETE = "impression_user_account_email_change_complete", s.USER_ACCOUNT_EMAIL_CHANGE_ENTER_EMAIL = "impression_user_account_email_change_enter_email", s.USER_ACCOUNT_EMAIL_CHANGE_SEND_CODE = "impression_user_account_email_change_send_code", s.USER_ACCOUNT_EMAIL_CHANGE_VERIFY_CODE = "impression_user_account_email_change_verify_code", s.USER_ACCOUNT_EMAIL_RESEND_VERIFICATION_EMAIL = "impression_user_account_email_resend_verification_email", s.USER_ACCOUNT_PASSWORD_VERIFY = "impression_user_account_password_verify", s.USER_ACTION_REQUIRED = "impression_user_action_required", s.USER_ADD_PHONE = "impression_user_add_phone", s.USER_AGE_GATE = "impression_user_age_gate", s.USER_AGE_GATE_UNDERAGE = "impression_user_age_gate_underage", s.USER_AGREEMENTS = "impression_user_agreements", s.USER_CLYDE_AI_CONSENT_MODAL = "impression_user_clyde_ai_consent_modal", s.USER_LOGIN = "impression_user_login", s.USER_PASSWORDLESS_CODE_ENTRY = "impression_user_passwordless_code_entry", s.USER_PASSWORDLESS_INTRO = "impression_user_passwordless_intro", s.USER_REGISTER_ACCOUNT_INFORMATION = "impression_user_register_account_information", s.USER_REGISTER_IDENTITY = "impression_user_register_identity", s.USER_REGISTRATION = "impression_user_registration", s.USER_SETTINGS_CONNECTIONS = "impression_user_settings_connections", s.USER_VERIFICATION_MODAL = "impression_user_verification_modal", s.USER_VERIFY_PASSWORD = "impression_user_verify_password", s.USER_VERIFY_PHONE = "impression_user_verify_phone", s.USER_WELCOME = "impression_user_welcome", s.USER_YOU_SCREEN = "impression_user_you_screen", s.VIEW_PANEL_DEVTOOLS = "impression_view_panel_devtools", (a = r || (r = {})).APPLE_JWT_TOKEN_CREATE = "network_action_apple_jwt_token_create", a.AUTH_SESSIONS_LOGGED_OUT = "network_action_auth_sessions_logged_out", a.AUTHORIZE_IP = "network_action_authorize_ip", a.AUTHORIZE_PAYMENT = "network_action_authorize_payment", a.BUG_REPORT_SUBMIT = "network_action_bug_report_submit", a.CHANNEL_CREATE = "network_action_channel_create", a.DIRECTORY_GUILD_ENTRY_CREATE = "network_action_directory_guild_entry_create", a.DIRECTORY_GUILD_ENTRY_DELETE = "network_action_directory_guild_entry_delete", a.EMAIL_SETTINGS_FETCH = "network_action_email_settings_fetch", a.EMAIL_SETTINGS_UPDATE = "network_action_email_settings_update", a.EMBEDDED_ACTIVITIES_FETCH_SHELF = "network_action_embedded_activities_fetch_shelf", a.EMBEDDED_ACTIVITIES_LAUNCH = "network_action_embedded_activities_launch", a.FORGOT_PASSWORD = "network_action_forgot_password", a.GUILD_CREATE = "network_action_guild_create", a.GUILD_TRANSFER_OWNERSHIP = "network_action_guild_transfer_ownership", a.GUILD_TRANSFER_OWNERSHIP_SEND_CODE = "network_action_guild_transfer_ownership_send_code", a.HUB_EMAIL_VERIFY = "network_action_hub_email_verify", a.HUB_EMAIL_VERIFY_SEND = "network_action_hub_email_verify_send", a.HUB_WAITLIST_SIGNUP = "network_action_hub_waitlist_signup", a.INVITE_RESOLVE = "network_action_invite_resolve", a.INVITE_REVOKE = "network_action_invite_revoke", a.LOGIN_REQUEST_SMS_TOKEN = "network_action_login_request_sms_token", a.NCMEC_REPORT_CLOSE = "network_action_ncmec_report_close", a.NCMEC_REPORTABLE_CONTENT_CREATE = "network_action_ncmec_reportable_content_create", a.NOTIFICATION_CENTER_ITEM_DELETE = "network_action_notification_center_item_delete", a.NOTIFICATION_CENTER_PAGE_FETCH = "network_action_notification_center_page_fetch", a.POMELO_ATTEMPT = "network_action_pomelo_attempt", a.POMELO_CREATE = "network_action_pomelo_create", a.QUEST_HEARTBEAT = "network_action_quest_heartbeat", a.STREAM_NOTIFY = "network_action_stream_notify", a.USER_ACCEPT_AGREEMENTS = "network_action_user_accept_agreements", a.USER_ACCOUNT_EMAIL_CHANGE_SEND_CODE = "network_action_user_account_email_change_send_code", a.USER_ACCOUNT_EMAIL_CHANGE_VERIFY_CODE = "network_action_user_account_email_change_verify_code", a.USER_BULK_RELATIONSHIPS_UPDATE = "network_action_user_bulk_relationships_update", a.USER_CLYDE_AI_CONSENT_UPDATED = "network_action_user_clyde_ai_consent_updated", a.USER_COMMUNICATION_DISABLED_UPDATE = "network_action_user_communication_disabled_update", a.USER_CONNECTIONS_UPDATE = "network_action_user_connections_update", a.USER_CONTACTS_SYNC = "network_action_user_contacts_sync", a.USER_LOGIN = "network_action_user_login", a.USER_LOGIN_MFA = "network_action_user_login_mfa", a.USER_LOGIN_MFA_SMS = "network_action_user_login_mfa_sms", a.USER_LOGIN_PASSWORDLESS = "network_action_user_login_passwordless", a.USER_LOGOUT = "network_action_user_logout", a.USER_PASSWORDLESS_INFO_FETCH = "network_action_user_passwordless_info_fetch", a.USER_PASSWORDLESS_LOGIN_CODE = "network_action_user_passwordless_login_code", a.USER_REGISTER = "network_action_user_register", a.USER_REGISTER_DEVICE_TOKEN = "network_action_user_register_device_token", a.USER_REGISTER_PHONE = "network_action_user_register_phone", a.USER_RESET_PASSWORD = "network_action_user_reset_password", a.USER_SETTINGS_UPDATE = "network_action_user_settings_update", a.USER_SURVEY_FETCH = "network_action_user_survey_fetch", a.USER_SURVEY_SEEN = "network_action_user_survey_seen", a.USER_UNREGISTER_DEVICE_TOKEN = "network_action_user_unregister_device_token", a.USER_VERIFY = "network_action_user_verify", a.USER_VERIFY_PHONE = "network_action_user_verify_phone", a.USER_VERIFY_RESEND = "network_action_user_verify_resend" }, 979675: function(e, t, n) { "use strict"; n.r(t), n.d(t, { queueTrackingEventMaker: function() { return i } }); let i = (e, t) => function(n, i, r) { return new Promise(s => { var a; e.dispatch({ type: t, event: n, properties: i, flush: null !== (a = null == r ? void 0 : r.flush) && void 0 !== a && a, fingerprint: null == r ? void 0 : r.fingerprint, resolve: s }) }) } }, 699407: function(e, t, n) { "use strict"; let i, r, s; n.r(t), n.d(t, { AnalyticsActionHandlers: function() { return T }, analyticsTrackingStoreMaker: function() { return h } }), n("177593"), n("733860"), n("47120"), n("653041"), n("17089"); var a, o = n("756647"), l = n("442837"), u = n("544891"), d = n("761609"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = 1500, E = null !== (a = window.requestIdleCallback) && void 0 !== a ? a : e => setImmediate(() => e()), I = new d.IdGenerator, T = { handleConnectionOpen: () => {}, handleConnectionClosed: () => {}, handleFingerprint: () => {}, handleTrack: () => {} }, f = [], S = () => Promise.resolve({ sessionId: void 0 }), h = e => { let { dispatcher: t, actionHandler: n, getFingerprint: a, getSessionId: d = S, TRACKING_URL: h, drainTimeoutOverride: A, waitFor: m } = e; c = null != A ? A : 1500; function N() { return 0 !== f.length && (null != r ? null != i : null != a()) } function p() { null == s && N() && (s = E(O, { timeout: c })) } function O() { if (s = null, !N()) return; let e = f.slice(); f = [], C(e).then(() => { e.forEach(e => { var t; null === (t = e.resolve) || void 0 === t || t.call(e) }) }, t => { f.unshift(...e); let { message: n } = t.body || t; console.warn("[AnalyticsTrackingStore] Track:", n) }) } function C(e) { let t = Date.now(), n = e.map(e => ({ ...e, properties: { ...e.properties, client_send_timestamp: t } })); return u.HTTP.post({ url: h, body: { token: i, events: n }, retries: 3 }) } T.handleConnectionOpen = function(e) { let { analyticsToken: t, user: n } = e; return null != t && (i = t), null != n.id && (r = n.id), p(), !1 }, T.handleConnectionClosed = function() { return O(), i = null, r = null, !1 }, T.handleFingerprint = function() { return O(), !1 }, T.handleTrack = function(e) { let { event: t, properties: n, flush: i, fingerprint: s, resolve: l } = e; return d().then(e => { let { sessionId: u } = e, d = { type: t, fingerprint: s, properties: { client_track_timestamp: Date.now(), client_heartbeat_session_id: u, ...n }, resolve: l }, _ = function(e) { if (null != r) return r; let t = e.fingerprint || a(); return null != t ? (0, o.extractId)(t) : null }(d); null != _ && (d.properties.client_uuid = I.generate(_)), f.push(d), f.length > 1e4 && (f = f.slice(-1e4)), i ? O() : p() }), !1 }; class R extends l.Store { initialize() { null != m && this.waitFor(...m) } constructor(...e) { super(...e), _(this, "submitEventsImmediately", C) } } return _(R, "displayName", "AnalyticsTrackingStore"), new R(t, n) } }, 990547: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { AnalyticsActionHandlers: function() { return A.AnalyticsActionHandlers }, Impression: function() { return m.Impression }, ImpressionGroups: function() { return m.ImpressionGroups }, ImpressionNames: function() { return N.ImpressionNames }, ImpressionSchema: function() { return N.ImpressionSchema }, ImpressionTypes: function() { return m.ImpressionTypes }, NetworkActionNames: function() { return N.NetworkActionNames }, StandardAnalyticsLocation: function() { return m.StandardAnalyticsLocation }, StandardAnalyticsSchemaNameMap: function() { return N.StandardAnalyticsSchemaNameMap }, TypedEventProperties: function() { return m.TypedEventProperties }, analyticsTrackingStoreMaker: function() { return A.analyticsTrackingStoreMaker }, encodeProperties: function() { return h.encodeProperties }, extendSuperProperties: function() { return b }, getCampaignParams: function() { return D }, getDevice: function() { return y }, getOS: function() { return M }, getSuperProperties: function() { return w }, getSuperPropertiesBase64: function() { return k }, isThrottled: function() { return U }, trackMaker: function() { return G } }), n("757143"), n("47120"); var s, a, o, l = n("348327"), u = n.n(l), d = n("512722"), _ = n.n(d), c = n("264344"), E = n.n(c), I = n("627420"), T = n("433517"), f = n("298444"), S = n("979675"), h = n("947486"), A = n("699407"), m = n("20281"), N = n("525769"); let p = "deviceProperties", O = "referralProperties", C = {}, R = {}, g = window.DiscordNative; if (null != g) { let e; let t = g.remoteApp.getVersion(), n = g.process.platform, r = g.os.release, a = g.os.arch, o = g.os.appArch, l = g.remoteApp.getReleaseChannel(), u = (0, I.getSystemLocale)(); switch (n) { case "win32": e = "Windows"; break; case "darwin": e = "Mac OS X"; break; case "linux": e = "Linux"; break; default: e = n } if (i = { os: e, browser: "Discord Client", release_channel: l || "unknown", client_version: t, os_version: r, os_arch: a, app_arch: o, system_locale: u }, (null === (s = E().name) || void 0 === s ? void 0 : s.toLocaleLowerCase()) === "electron" && (i.browser_user_agent = E().ua || "", i.browser_version = E().version || ""), "linux" === n) { let e = g.crashReporter.getMetadata(); i.window_manager = e.wm, i.distro = e.distro } } let L = "utm_source utm_medium utm_campaign utm_content utm_term".split(" "); function v(e, t) { if (null == e) return ""; t = t.replace(/[[]/, "\\[").replace(/[\]]/, "\\]"); let n = new RegExp("[\\?&]".concat(t, "=([^&#]*)")).exec(e); return null === n || "string" != typeof n[1] && n[1].length ? "" : decodeURIComponent(n[1]).replace(/\+/g, " ") } function D(e) { let t = {}; return L.forEach(n => { let i = v(e, n); i.length > 0 && (t[n] = i) }), t } function M() { let { userAgent: e } = window.navigator; if (/Windows/i.test(e)) return /Phone/.test(e) ? "Windows Mobile" : "Windows"; if (/(iPhone|iPad|iPod)/.test(e)) return "iOS"; if (/Android/.test(e)) return "Android"; else if (/(BlackBerry|PlayBook|BB10)/i.test(e)) return "BlackBerry"; else if (/Mac/i.test(e)) return null != window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 ? "iOS" : "Mac OS X"; else if (/Linux/i.test(e)) return "Linux"; else return "" } function y() { let { userAgent: e } = window.navigator; if (/(BlackBerry|PlayBook|BB10)/i.test(e)) return "BlackBerry"; if (/Windows Phone/i.test(e)) return "Windows Phone"; if (/Android/.test(e)) return "Android"; else if (/iPhone/.test(e)) return "iPhone"; else if (/iPad/.test(e)) return "iPad"; else return "" } function P() { let e = {}; return e.referrer = document.referrer, e.referring_domain = function() { let e = document.referrer.split("/"); return e.length >= 3 ? e[2] : "" }(), e = { ...e, ...D(window.location.href), ... function() { let e = {}, t = document.referrer, n = function() { let e = document.referrer; if (0 === e.search("https?://(.*)google.([^/?]*)")) return "google"; if (0 === e.search("https?://(.*)bing.com")) return "bing"; if (0 === e.search("https?://(.*)yahoo.com")) return "yahoo"; else if (0 === e.search("https?://(.*)duckduckgo.com")) return "duckduckgo"; else return null }(); if (null != n) { e.search_engine = n; let i = v(t, "yahoo" !== n ? "q" : "p"); i.length > 0 && (e.mp_keyword = i) } return e }() } } function U(e) { return null != C[e] && C[e] > Date.now() } if (null == i) try { ; let e, t, n; e = T.Storage.get(p), null == e && (e = function() { let e = {}, t = M(); return e.os = t, e.browser = function() { let { userAgent: e, vendor: t = "" } = window.navigator, { opera: n } = window; if (n) return /Mini/.test(e) ? "Opera Mini" : "Opera"; if (/(BlackBerry|PlayBook|BB10)/i.test(e)) return "BlackBerry"; if (/FBIOS/.test(e)) return "Facebook Mobile"; else if (/CriOS/.test(e)) return "Chrome iOS"; else if (/Apple/.test(t)) return /Mobile/.test(e) || null != window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 ? "Mobile Safari" : "Safari"; else if (/Android/.test(e)) return /Chrome/.test(e) ? "Android Chrome" : "Android Mobile"; else if (/Edge/.test(e)) return "Edge"; else if (/Chrome/.test(e)) return "Chrome"; else if (/Konqueror/.test(e)) return "Konqueror"; else if (/Firefox/.test(e)) return "Firefox"; else if (/MSIE|Trident\//.test(e)) return "Internet Explorer"; else if (/Gecko/.test(e)) return "Mozilla"; else return "" }(), e.device = y(), e.system_locale = (0, I.getSystemLocale)(), e }(), T.Storage.set(p, e)), t = T.Storage.get(O), null == t && (t = P(), T.Storage.set(O, t)), n = f.SessionStorage.get(O), null == n && (n = function(e, t) { let n = {}; return Object.keys(e).map(i => n["".concat(i).concat(t)] = e[i]), n }(P(), "_current"), f.SessionStorage.set(O, n)), i = { ...e, browser_user_agent: window.navigator.userAgent || "", browser_version: E().version || "", os_version: null !== (o = null === E() || void 0 === E() ? void 0 : null === (a = E().os) || void 0 === a ? void 0 : a.version) && void 0 !== o ? o : "", ...t, ...n } } catch (e) { i = {} } function b(e) { i = { ...i, ...e }, r = (0, h.encodeProperties)(i) } b(function() { var e, t, n; let i = {}, r = window.GLOBAL_ENV.RELEASE_CHANNEL; r && (i.release_channel = r.split("-")[0]); let s = parseInt((n = "298246", "298246"), 10); !isNaN(s) && (i.client_build_number = s); let a = null == g ? void 0 : null === (e = (t = g.remoteApp).getBuildNumber) || void 0 === e ? void 0 : e.call(t); return !isNaN(a) && (i.native_build_number = a), i.client_event_source = function() { try { if (__OVERLAY__) return "OVERLAY" } catch (e) {} return null }(), i }()); let G = e => { let { analyticEventConfigs: t, dispatcher: i, TRACK_ACTION_NAME: r } = e, s = (0, S.queueTrackingEventMaker)(i, r); return function(e, i) { let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; if (null != n.g.isServerRendering && !0 === n.g.isServerRendering) return Promise.resolve(); let a = null != i ? i : {}, o = t[e]; if (null != o) { if ("throttlePeriod" in o) { let t = [e, ...o.throttleKeys(a)].join("_"); if (U(t)) return Promise.resolve(); if ("number" == typeof o.throttlePercent && Math.random() > o.throttlePercent) return Promise.resolve(); if (o.deduplicate) { let e = R[t]; if (u()(e, a)) return Promise.resolve(); R[t] = a } C[t] = Date.now() + o.throttlePeriod } else if ("throttlePercent" in o) { if (Math.random() > o.throttlePercent) return Promise.resolve() } else _()(!1, "Unsupported analytics event config: ".concat(o)) } return s(e, i, r) } }; function w() { return i } function k() { return r } }, 20281: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { ImpressionGroups: function() { return i }, ImpressionTypes: function() { return r } }), (s = i || (i = {})).CHANNEL_ADD_FLOW = "channel_add_flow", s.CONTACT_SYNC_FLOW = "contact_sync_flow", s.DIRECTORY_GUILD_ADD_FLOW = "directory_guild_add_flow", s.GUILD_ADD_FLOW = "guild_add_flow", s.GUILD_ADD_NUF = "guild_add_nuf", s.USER_VERIFICATION_MODAL_FLOW = "user_verification_modal_flow", s.GUILD_TRANSFER_OWNERSHIP_FLOW = "guild_transfer_ownership_flow", s.ROLE_ADD_FLOW = "role_add_flow", s.USER_ACCOUNT_EMAIL_CHANGE_FLOW = "user_account_email_change_flow", s.USER_LOGIN_FLOW = "user_login_flow", s.USER_REGISTRATION_FLOW = "user_registration_flow", s.ACTIVITY_SHELF_FLOW = "activity_shelf_flow", s.POMELO_FLOW = "pomelo_flow", s.APPEAL_INGESTION = "appeal_ingestion", (a = r || (r = {})).PAGE = "page", a.MODAL = "modal", a.POPOUT = "popout", a.MENU = "menu", a.PANE = "pane", a.VIEW = "view", a.HALFSHEET = "halfsheet" }, 947486: function(e, t, n) { "use strict"; n.r(t), n.d(t, { encodeProperties: function() { return r } }); var i = n("413135").Buffer; function r(e) { try { return i.from(JSON.stringify(e)).toString("base64") } catch (e) { return null } } }, 748780: function(e, t, n) { "use strict"; n.r(t), n("653041"); var i = n("269054"), r = n("217209"), s = n.n(r), a = n("78650"), o = n.n(a), l = n("505444"), u = n.n(l); function d(e) { let t = Object.keys(e)[0]; return "".concat(t, "(").concat(e[t], ")") } let _ = /rgba\(([\d.]+), ([\d.]+), ([\d.]+), ([\d.]+)\)/; function c(e) { let t = e.match(_); return null != t && (e = "rgba(".concat(0 | t[1], ", ").concat(0 | t[2], ", ").concat(0 | t[3], ", ").concat(t[4], ")")), e } i.inject.ApplyAnimatedValues(function(e, t, n) { if (e.setNativeProps) e.setNativeProps(t); else { if (!e.nodeType || void 0 === e.setAttribute) return !1; var i; u().setValueForStyles(e, ((i = t.style) && (i.transform && (i.transform = i.WebkitTransform = i.MozTransform = i.transform.map(d).join(" ")), i.color && (i.color = c(i.color)), i.backgroundColor && (i.backgroundColor = c(i.backgroundColor))), i), n._reactInternalInstance) } }, e => e); function E(e, t, n) { return void 0 !== t && void 0 != n ? o()(t, n) : e } t.default = { ...i, Easing: s(), accelerate: function(e) { return e.transform = e.transform || [], e.transform.push({ translateZ: 0 }), e }, animate: function e(t, n) { let r; let { toValueMin: s, toValueMax: a, tension: o = 0, friction: l = 0, loop: u, reverse: d, invert: _, callback: c, type: I = "spring", shouldLoop: T, durationMin: f, durationMax: S, ...h } = n, A = t._value, m = E(n.duration, f, S), N = E(n.toValue, s, a), p = i[I](t, { ...h, toValue: N, tension: o, friction: l, duration: m }), O = p; if (d || _) { let e = E(n.duration, f, S); r = i[I](t, { ...h, toValue: d ? A : -N, tension: o, friction: l, duration: e }), O = i.sequence([p, r]) } u ? O.start(() => { (!T || T && T()) && (c ? c(e.bind(null, t, n)) : e(t, n)) }) : O.start(c) }, interpolate: function(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i]; return e.interpolate({ inputRange: [0, 1], outputRange: n }) }, Extrapolate: { CLAMP: "clamp" }, div: i.createAnimatedComponent("div"), span: i.createAnimatedComponent("span"), img: i.createAnimatedComponent("img"), a: i.createAnimatedComponent("a"), form: i.createAnimatedComponent("form"), ul: i.createAnimatedComponent("ul"), li: i.createAnimatedComponent("li"), g: i.createAnimatedComponent("g"), use: i.createAnimatedComponent("use"), path: i.createAnimatedComponent("path"), section: i.createAnimatedComponent("section"), video: i.createAnimatedComponent("video") } }, 372817: function(e, t, n) { "use strict"; function i(e) { let { getFocusableElements: t, getActiveElement: n, scrollToStart: i, scrollToEnd: r } = e; async function s(e) { var r, s; let o = (null == e ? void 0 : e.from) || n(); if (null == o) return null; let l = (r = o, null !== (s = t().find(e => !!(r.compareDocumentPosition(e) & (Node.DOCUMENT_POSITION_FOLLOWING | Node.DOCUMENT_POSITION_CONTAINED_BY)))) && void 0 !== s ? s : null); return null == l && (null == e ? void 0 : e.wrap) ? (await (null == i ? void 0 : i()), a()) : l } function a() { var e; return null !== (e = t()[0]) && void 0 !== e ? e : null } function o() { var e; let n = t(); return null !== (e = n[n.length - 1]) && void 0 !== e ? e : null } return { getNextFocusableElement: s, getPreviousFocusableElement: async function e(e) { let i = (null == e ? void 0 : e.from) || n(); if (null == i) return null; let s = function(e) { let n = t(); for (let t = n.length - 1; t >= 0; t--) { let i = n[t]; if (e.compareDocumentPosition(i) & (Node.DOCUMENT_POSITION_PRECEDING | Node.DOCUMENT_POSITION_CONTAINED_BY)) return i } return null }(i); return null == s && (null == e ? void 0 : e.wrap) ? (await (null == r ? void 0 : r()), o()) : s }, getFirstFocusableElement: a, getLastFocusableElement: o } } n.r(t), n.d(t, { createFocusManager: function() { return i } }) }, 25441: function(e, t, n) { "use strict"; n.r(t), n.d(t, { addFocusSubscriber: function() { return r }, notifyFocusSubscribers: function() { return s } }), n("47120"); let i = new Map; function r(e, t) { let n = i.get(e); return null == n && (n = new Set, i.set(e, n)), n.add(t), () => null == n ? void 0 : n.delete(t) } function s(e, t, n) { let r = i.get(e); if (null != r) for (let e of r) e(t, n) } }, 611144: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GridActionType: function() { return r }, default: function() { return l } }); var i, r, s = n("536895"); function a(e, t) { return Number.isNaN(e) ? t : Number.isNaN(t) ? e : Math.max(e, t) } function o(e, t) { return Number.isNaN(e) ? t : Number.isNaN(t) ? e : Math.min(e, t) }(i = r || (r = {})).UPDATE_COLUMN_COUNTS = "UPDATE_COLUMN_COUNTS", i.SET_FOCUSED_POSITION = "SET_FOCUSED_POSITION"; function l(e, t) { var n, i, r, l; switch (t.type) { case s.ActionType.NAVIGATE_UP: return function(e, t) { let n = a(0, e.focusedY - 1); return { ...e, focusedX: o(e.columnCounts[n] - 1, e.focusedX), focusedY: n } }(e, 0); case s.ActionType.NAVIGATE_DOWN: return function(e, t) { let n = o(e.focusedY + 1, e.columnCounts.length - 1); return { ...e, focusedX: o(e.columnCounts[n] - 1, e.focusedX), focusedY: n } }(e, 0); case s.ActionType.NAVIGATE_RIGHT: return function(e, t) { let n = e.focusedY !== e.columnCounts.length - 1 && e.focusedX + 1 === e.columnCounts[e.focusedY], i = n ? 0 : o(e.focusedX + 1, e.columnCounts[e.focusedY] - 1), r = n ? e.focusedY + 1 : e.focusedY; return { ...e, focusedX: i, focusedY: r } }(e, 0); case s.ActionType.NAVIGATE_LEFT: return function(e, t) { let n = 0 !== e.focusedY && 0 === e.focusedX, i = n ? e.focusedY - 1 : e.focusedY, r = n ? e.columnCounts[i] - 1 : a(0, e.focusedX - 1); return { ...e, focusedX: r, focusedY: i } }(e, 0); case s.ActionType.NAVIGATE_INLINE_START: ; return n = 0, { ...e, focusedX: 0 }; case s.ActionType.NAVIGATE_INLINE_END: ; return r = 0, { ...i = e, focusedX: i.columnCounts[i.focusedY] - 1 }; case s.ActionType.NAVIGATE_START: ; return l = 0, { ...e, focusedX: 0, focusedY: 0 }; case s.ActionType.NAVIGATE_END: return function(e, t) { let n = e.columnCounts.length - 1; return { ...e, focusedX: e.columnCounts[n] - 1, focusedY: n } }(e, 0); case "UPDATE_COLUMN_COUNTS": return function(e, t) { let { columnCounts: n } = t, i = o(a(0, n.length - 1), e.focusedY); return { ...e, columnCounts: n, focusedX: o(null == n[i] ? 0 : n[i] - 1, e.focusedX), focusedY: i } }(e, t); case "SET_FOCUSED_POSITION": return function(e, t) { let { x: n, y: i } = t, r = a(0, o(i, e.columnCounts.length - 1)); return { ...e, focusedX: a(0, o(n, e.columnCounts[r] - 1)), focusedY: r } }(e, t); case s.ActionType.SELECT_FOCUSED_ITEM: break; default: console.warn("Grid navigator was given an unhandled action ".concat(t.type)) } return e } }, 585627: function(e, t, n) { "use strict"; n.r(t), n.d(t, { findFirstVisibleItem: function() { return r }, findLastVisibleItem: function() { return s }, isItemVisible: function() { return a } }), n("47120"); var i = n("260866"); function r(e, t) { return new Promise(n => { let r = new IntersectionObserver(e => { let t = 0, s = null; for (let { isIntersecting: a, intersectionRatio: o, target: l } of e) { if (a && 1 === o) { r.disconnect(); let e = l.getAttribute(i.LIST_ITEM_ID_ATTRIBUTE); if (null != e) return n(e) } o > t && (t = o, s = l.getAttribute(i.LIST_ITEM_ID_ATTRIBUTE)) } r.disconnect(), n(s) }, { root: e }); for (let e of t) r.observe(e) }) } function s(e, t) { return new Promise(n => { let r = new IntersectionObserver(e => { let t = 0, s = null; for (let a = e.length - 1; a >= 0; a--) { let { isIntersecting: o, intersectionRatio: l, target: u } = e[a]; if (o && 1 === l) { r.disconnect(); let e = u.getAttribute(i.LIST_ITEM_ID_ATTRIBUTE); if (null != e) return n(e) } l > t && (t = l, s = u.getAttribute(i.LIST_ITEM_ID_ATTRIBUTE)) } r.disconnect(), n(s) }, { root: e }); for (let e of t) r.observe(e) }) } function a(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : .5; return new Promise(i => { let r = new IntersectionObserver(e => { let t = e[0]; r.disconnect(), i(t.intersectionRatio >= n) }, { root: e }); r.observe(t) }) } }, 924826: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createListItemId: function() { return l.createListItemId }, default: function() { return _ } }), n("47120"); var i = n("470079"), r = n("372817"), s = n("25441"), a = n("585627"), o = n("536895"), l = n("260866"), u = n("91192"); function d(e, t) { var n; return Array.from((null !== (n = t.current) && void 0 !== n ? n : document).querySelectorAll("[".concat(l.LIST_ITEM_ID_ATTRIBUTE, '^="').concat(e, '"]'))) } function _(e) { let { id: t, defaultFocused: n, isEnabled: u, scrollToStart: _, scrollToEnd: c, onNavigatePreviousAtStart: E, onNavigateNextAtEnd: I, setFocus: T, setFocusOnList: f, preserveFocusPosition: S = !0, useVirtualFocus: h = !1, wrap: A = !1, orientation: m = o.Orientations.VERTICAL, disableClickOnSpace: N = !1 } = e, p = i.useRef(n ? (0, l.createListItemId)(t, n) : null), O = i.useRef(!1), C = i.useRef(null), R = i.useRef(u); function g(e) { var t; return (null !== (t = C.current) && void 0 !== t ? t : document).querySelector(e) } function L(e) { var t; null === (t = g(e)) || void 0 === t || t.focus() } i.useLayoutEffect(() => { R.current = u }, [u]); let v = i.useCallback((e, t) => { R.current && (null != T ? T : L)(e, t) }, [T]), D = i.useCallback(e => { R.current && (null != f ? f : L)(e) }, [f]), M = i.useCallback(e => { p.current = e; let n = (0, l.createSelector)(e), i = (0, l.getItemId)(e); v(n, i), (0, s.notifyFocusSubscribers)(t, i, S) }, [t, S, v]), y = i.useMemo(() => (0, r.createFocusManager)({ getFocusableElements: () => d(t, C), getActiveElement() { var e; return null === (e = C.current) || void 0 === e ? void 0 : e.ownerDocument.activeElement }, scrollToStart: _, scrollToEnd: c }), [t, _, c]), [P, U] = i.useState(!1), b = i.useRef(P); i.useLayoutEffect(() => { b.current = P }, [P]), i.useLayoutEffect(() => { let e = C.current; if (null != e) { if (u) return e.addEventListener("focusin", n), e.addEventListener("focusout", i), e.addEventListener("focus", r), e.addEventListener("scroll", s, { passive: !0 }), () => { e.removeEventListener("focusin", n), e.removeEventListener("focusout", i), e.removeEventListener("focus", r), e.removeEventListener("scroll", s) } } function n() { U(!0) } function i(e) { !e.currentTarget.contains(e.relatedTarget) && (U(!1), requestAnimationFrame(() => { let e = p.current; null !== e && null == g((0, l.createSelector)(e)) && D((0, l.createSelector)(t, l.LIST_ID_ATTRIBUTE)) })) } async function r() { let e = C.current; if (b.current || null == e) return; let n = p.current; if (S && null !== n) { let t = (0, l.createSelector)(n), i = g(t); if (null != i) { if (!0 !== O.current) return v(t, (0, l.getItemId)(n)); if (await (0, a.isItemVisible)(e, i)) return v(t, (0, l.getItemId)(n)) } } let i = await (0, a.findFirstVisibleItem)(e, d(t, C)); null !== i && M(i) } function s() { O.current = !0 } }, [u, t, S, v, f, D, M]); let G = i.useMemo(() => ({ wrap: A, get from() { if (!h) return; let t = p.current; if (null != t) { var e; return null !== (e = g((0, l.createSelector)(t))) && void 0 !== e ? e : void 0 } return } }), [h, A]), w = i.useCallback(async () => { let e = await y.getNextFocusableElement(G), t = null == e ? void 0 : e.getAttribute(l.LIST_ITEM_ID_ATTRIBUTE); null != t ? M(t) : null == e && null != I && I() }, [y, G, I, M]), k = i.useCallback(async () => { let e = await y.getPreviousFocusableElement(G), t = null == e ? void 0 : e.getAttribute(l.LIST_ITEM_ID_ATTRIBUTE); null != t ? M(t) : null == e && null != E && E() }, [y, G, E, M]), B = i.useCallback(e => { if (!R.current || !h && !b.current) return; let n = m === o.Orientations.HORIZONTAL ? o.Keys.RIGHT : o.Keys.DOWN, i = m === o.Orientations.HORIZONTAL ? o.Keys.LEFT : o.Keys.UP; switch (e.key) { case n: e.stopPropagation(), e.preventDefault(), w(); return; case i: e.stopPropagation(), e.preventDefault(), k(); return; case o.Keys.HOME: e.stopPropagation(), e.preventDefault(), _().then(() => { var e; let n = null === (e = d(t, C)[0]) || void 0 === e ? void 0 : e.getAttribute(l.LIST_ITEM_ID_ATTRIBUTE); null != n && M(n) }); return; case o.Keys.END: e.stopPropagation(), e.preventDefault(), c().then(() => { var e; let n = d(t, C), i = null === (e = n[n.length - 1]) || void 0 === e ? void 0 : e.getAttribute(l.LIST_ITEM_ID_ATTRIBUTE); null != i && M(i) }); return; case o.Keys.SPACE: case o.Keys.ENTER: { if (e.key === o.Keys.SPACE && N || e.repeat) return; let t = p.current; if (null != t) { var r; let n = g((0, l.createSelector)(t)), i = null !== (r = null == n ? void 0 : n.ownerDocument) && void 0 !== r ? r : document, s = h || n === i.activeElement; null != n && s && (e.preventDefault(), e.stopPropagation(), null == n || n.click()) } } } }, [w, k, t, m, c, _, M, h]), V = i.useCallback(e => { let n = null != e ? (0, l.createListItemId)(t, e) : null; p.current = n }, [t]); return i.useMemo(() => ({ id: t, containerProps: { onKeyDown: B, ref: C, tabIndex: P && S ? -1 : 0 }, orientation: m, setFocus: V, async focusLastVisibleItem() { var e; let n = await (0, a.findLastVisibleItem)(null !== (e = C.current) && void 0 !== e ? e : document.body, d(t, C)); null !== n && M(n) }, async focusFirstVisibleItem() { var e; let n = await (0, a.findFirstVisibleItem)(null !== (e = C.current) && void 0 !== e ? e : document.body, d(t, C)); null !== n && M(n) }, focusPreviousItem: k, focusNextItem: w, focusedItemId() { let e = p.current; return e ? (0, l.getItemId)(e) : null } }), [t, B, m, P, S, V, k, w, M]) } n.es(u, t) }, 91192: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ListContainerContext: function() { return d }, ListNavigatorContainer: function() { return S }, ListNavigatorItem: function() { return E }, ListNavigatorProvider: function() { return h }, getContainerPropsFromNavigator: function() { return f }, useListContainerProps: function() { return T }, useListContainerScrollerRef: function() { return I }, useListItem: function() { return _ }, useTreeItem: function() { return c } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("25441"), a = n("536895"), o = n("260866"); let l = { id: "NO_LIST", onKeyDown() {}, orientation: a.Orientations.VERTICAL, ref: r.createRef(), tabIndex: -1 }, u = r.createContext({ id: "NO_LIST", setFocus() {} }), d = r.createContext(l); function _(e) { let [t, n] = r.useState(-1), { id: i, setFocus: a } = r.useContext(u), l = r.useCallback(() => a(e), [e, a]); return r.useLayoutEffect(() => (0, s.addFocusSubscriber)(i, (t, i) => { n(i && t === e ? 0 : -1) }), [e, i]), { role: "listitem", [o.LIST_ITEM_ID_ATTRIBUTE]: (0, o.createListItemId)(i, e), tabIndex: t, onFocus: l } } function c(e) { return { ..._(e), role: "treeitem" } } function E(e) { let { children: t, id: n } = e; return t(_(n)) } function I() { return r.useContext(d).ref } function T() { let { id: e, onKeyDown: t, ref: n, tabIndex: i } = r.useContext(d); return { role: "list", tabIndex: i, [o.LIST_ID_ATTRIBUTE]: e, onKeyDown: t, ref: n } } function f(e) { let { id: t, containerProps: { onKeyDown: n, ref: i, tabIndex: r }, orientation: s } = e; return { role: "list", onKeyDown: n, ref: i, [o.LIST_ID_ATTRIBUTE]: t, tabIndex: r } } function S(e) { let { children: t } = e; return t(T()) } function h(e) { let { children: t, navigator: n } = e, { id: s, setFocus: a, containerProps: { onKeyDown: o, ref: l, tabIndex: _ }, orientation: c } = n, E = r.useMemo(() => ({ id: s, setFocus: a }), [s, a]), I = r.useMemo(() => ({ onKeyDown: o, orientation: c, ref: l, id: s, tabIndex: _ }), [o, c, l, s, _]); return (0, i.jsxs)(d.Provider, { value: I, children: [(0, i.jsx)(u.Provider, { value: E, children: t }), " "] }) } }, 714319: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ListActionType: function() { return r }, default: function() { return a } }); var i, r, s = n("536895"); (i = r || (r = {})).UPDATE_ITEM_COUNT = "UPDATE_ITEM_COUNT", i.SET_FOCUSED_INDEX = "SET_FOCUSED_INDEX"; function a(e, t) { var n, i, r, a, o, l, u; switch (t.type) { case s.ActionType.NAVIGATE_UP: ; return i = 0, { ...n = e, focusedIndex: Math.max(0, n.focusedIndex - 1) }; case s.ActionType.NAVIGATE_DOWN: ; return a = 0, { ...r = e, focusedIndex: Math.min(r.focusedIndex + 1, r.itemCount - 1) }; case s.ActionType.NAVIGATE_START: ; return o = 0, { ...e, focusedIndex: 0 }; case s.ActionType.NAVIGATE_END: ; return u = 0, { ...l = e, focusedIndex: l.itemCount - 1 }; case "UPDATE_ITEM_COUNT": return function(e, t) { let { itemCount: n } = t; return { ...e, itemCount: n, focusedIndex: Math.min(n - 1, e.focusedIndex) } }(e, t); case "SET_FOCUSED_INDEX": return function(e, t) { let { index: n } = t; return { ...e, focusedIndex: Math.max(0, Math.min(n, e.itemCount - 1)) } }(e, t); case s.ActionType.SELECT_FOCUSED_ITEM: break; default: console.warn("Listbox navigator was given an unhandled action ".concat(t.type)) } return e } }, 808629: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MenuActionType: function() { return i }, default: function() { return _ } }), n("653041"), n("47120"), n("411104"); var i, r, s = n("536895"); function a(e, t) { return e.findIndex(e => t === e.key) } function o(e) { return e.focusPath[e.focusPath.length - 1] } function l(e) { let t = e.items; for (let n = 0; n < e.focusPath.length - 1; n++) { if (null == t) return; let i = a(t, e.focusPath[n]); t = t[i].children } return t } function u(e, t) { let n = e, i = []; for (let e = 0; e < t.length && null != n; e++) { let r = t[e], s = a(n, r); if (s < 0 || s >= n.length) { let e = n[0]; null != e && i.push(e.key); break } i.push(r), n = n[s].children } return i }(r = i || (i = {})).UPDATE_ITEMS = "UPDATE_ITEMS", r.SET_FOCUS_PATH = "SET_FOCUS_PATH"; function d(e) { let t = o(e), n = l(e); return null == n ? -1 : a(n, t) } function _(e, t) { switch (t.type) { case s.ActionType.NAVIGATE_UP: return function(e, t) { let n = o(e), i = l(e); if (null == i) return e; let r = (a(i, n) - 1) % i.length; if (r < 0 && (r = i.length - 1), null == i[r]) return e; let s = { ...e, focusPath: [...e.focusPath.slice(0, -1), i[r].key] }; return { ...s, focusIndex: d(s) } }(e, 0); case s.ActionType.NAVIGATE_DOWN: return function(e, t) { let n = o(e), i = l(e); if (null == i) return e; let r = (a(i, n) + 1) % i.length; if (null == i[r]) return e; let s = { ...e, focusPath: [...e.focusPath.slice(0, -1), i[r].key] }; return { ...s, focusIndex: d(s) } }(e, 0); case s.ActionType.NAVIGATE_IN: return function(e, t) { var n; let i = o(e), r = l(e); if (null == r) return e; let s = r[a(r, i)], u = null == s ? void 0 : null === (n = s.children) || void 0 === n ? void 0 : n[0]; if (null == u) return e; let _ = { ...e, focusPath: [...e.focusPath, u.key] }; return { ..._, focusIndex: d(_) } }(e, 0); case s.ActionType.NAVIGATE_OUT: return function(e, t) { if (e.focusPath.length <= 1) return e; let n = { ...e, focusPath: e.focusPath.slice(0, -1) }; return { ...n, focusIndex: d(n) } }(e, 0); case "UPDATE_ITEMS": return function(e, t) { let { items: n } = t, i = { ...e, items: n, focusPath: u(n, e.focusPath) }; return { ...i, focusIndex: d(i) } }(e, t); case "SET_FOCUS_PATH": return function(e, t) { let { path: n } = t, i = { ...e, focusPath: u(e.items, n) }; return { ...i, focusIndex: d(i) } }(e, t); case s.ActionType.SELECT_FOCUSED_ITEM: break; default: throw Error("Menu navigator was given an unhandled action ".concat(t.type)) } return e } }, 536895: function(e, t, n) { "use strict"; var i, r, s, a, o, l; n.r(t), n.d(t, { ActionType: function() { return i }, Keys: function() { return r }, Orientations: function() { return s } }), (a = i || (i = {})).NAVIGATE_UP = "NAVIGATE_UP", a.NAVIGATE_DOWN = "NAVIGATE_DOWN", a.NAVIGATE_LEFT = "NAVIGATE_LEFT", a.NAVIGATE_RIGHT = "NAVIGATE_RIGHT", a.NAVIGATE_START = "NAVIGATE_START", a.NAVIGATE_END = "NAVIGATE_END", a.NAVIGATE_INLINE_START = "NAVIGATE_INLINE_START", a.NAVIGATE_INLINE_END = "NAVIGATE_INLINE_END", a.NAVIGATE_CROSSLINE_START = "NAVIGATE_CROSSLINE_START", a.NAVIGATE_CROSSLINE_END = "NAVIGATE_CROSSLINE_END", a.NAVIGATE_NEXT_INTERACTABLE = "NAVIGATE_NEXT_INTERACTABLE", a.NAVIGATE_PREV_INTERACTABLE = "NAVIGATE_PREV_INTERACTABLE", a.NAVIGATE_IN = "NAVIGATE_IN", a.NAVIGATE_OUT = "NAVIGATE_OUT", a.SELECT_FOCUSED_ITEM = "SELECT_FOCUSED_ITEM", a.QUERY_START = "QUERY_START", a.QUERY_CLEAR = "QUERY_CLEAR", (o = r || (r = {})).ENTER = "Enter", o.SPACE = " ", o.ESCAPE = "Escape", o.TAB = "Tab", o.F10 = "F10", o.HOME = "Home", o.END = "End", o.UP = "ArrowUp", o.DOWN = "ArrowDown", o.LEFT = "ArrowLeft", o.RIGHT = "ArrowRight", o.PAGE_UP = "PageUp", o.PAGE_DOWN = "PageDown", (l = s || (s = {})).HORIZONTAL = "horizontal", l.VERTICAL = "vertical" }, 260866: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { HandlerMemoizer: function() { return c }, LIST_ID_ATTRIBUTE: function() { return s }, LIST_ITEM_ID_ATTRIBUTE: function() { return r }, createListItemId: function() { return a }, createSelector: function() { return l }, getItemId: function() { return o }, makeGridId: function() { return d }, makeId: function() { return u }, throttle: function() { return _ } }), n("47120"); let r = "data-list-item-id", s = "data-list-id"; function a(e, t) { return "".concat(e).concat("___").concat(t) } function o(e) { return e.split("___")[1] } function l(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : r; return "[".concat(t, '="').concat(e, '"]') } function u(e, t) { return "".concat(e, "-").concat(t) } function d(e, t, n) { return "".concat(e, "-").concat(t, "-").concat(n) } function _(e, t) { let n = !1; return function() { for (var i = arguments.length, r = Array(i), s = 0; s < i; s++) r[s] = arguments[s]; !n && (e(...r), n = !0, setTimeout(() => n = !1, t)) } } class c { get(e) { let t = this.handlers.get(e); return null == t && (t = this.makeHandler(e), this.handlers.set(e, t)), t } clean() { delete this.handlers, this.handlers = new Map } constructor(e) { i(this, "makeHandler", void 0), i(this, "handlers", void 0), this.makeHandler = e, this.handlers = new Map, this.makeHandler = e } } }, 739940: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ActionType: function() { return i.ActionType }, useGridNavigator: function() { return r.default }, useListNavigator: function() { return s.default }, useMenuNavigator: function() { return a.default } }); var i = n("536895"), r = n("566064"); n.es(r, t); var s = n("837969"); n.es(s, t); var a = n("498405"); n.es(a, t) }, 566064: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GridActionType: function() { return r.GridActionType }, default: function() { return d } }), n("47120"); var i = n("470079"), r = n("611144"), s = n("536895"), a = n("260866"); let o = [s.Keys.TAB]; function l(e, t, n) { return null != t && null != n ? "#".concat((0, a.makeGridId)(e, t, n)) : "[data-ref-id=".concat(e, "]") } function u(e) { return document.querySelector(e) } function d(e) { let { navId: t, columnCounts: n, focusedX: d = 0, focusedY: _ = 0, onSelect: c, prepareFocus: E, getNewFocusPosition: I, maintainFocusPosition: T = !0, enabled: f = !0, onDispatch: S, autoFocusElement: h = !0, useVirtualFocus: A = !1 } = e, m = i.useCallback((e, t) => { let n = (0, r.default)(e, t); return null != S && S(e, n, t), n }, [S]), [N, p] = i.useReducer(m, { focusedX: d, focusedY: _, columnCounts: n }), { columnCounts: O, focusedX: C, focusedY: R } = N, [g] = i.useState(() => (0, a.throttle)(p, 16)); return i.useEffect(() => { p({ type: r.GridActionType.UPDATE_COLUMN_COUNTS, columnCounts: n }) }, [n]), function(e) { let { navId: t, columnCounts: n, focusedX: d, focusedY: _, onSelect: c, prepareFocus: E, getNewFocusPosition: I, dispatch: T, maintainFocusPosition: f, enabled: S, autoFocusElement: h, useVirtualFocus: A } = e, m = i.useRef(); m.current = S; let N = u(l(t, d, _)), [p, O] = i.useState(!1), [C, R] = i.useState(!1), [g, L] = i.useState(!1), [v] = i.useState(() => new a.HandlerMemoizer(e => { let [t, n] = e.split(",").map(Number); return () => { O(!0), T({ type: r.GridActionType.SET_FOCUSED_POSITION, x: t, y: n }) } })); i.useEffect(() => () => v.clean(), [v]); let D = i.useCallback(e => { if (!m.current || !h) return !1; e.focus() }, [h]), M = i.useCallback((e, n) => { let i = l(t, e, n); (null != E ? E(e, n, i) : Promise.resolve()).then(() => { let e = u(i); null != e ? (D(e), R(!1)) : requestAnimationFrame(() => R(!0)) }) }, [t, E, D]), y = i.useCallback(function() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0], [n, i] = null != I ? I(d, _) : [d, _]; if ((n !== d || i !== _) && (T({ type: r.GridActionType.SET_FOCUSED_POSITION, x: n, y: i }), !e)) { L(!0); return } let s = u(l(t, n, i)); null != s && (L(!0), D(s)) }, [T, d, _, I, t, D]), [P, U] = i.useState(!1); i.useEffect(() => { if (!P || !p) return; U(!1); let e = u(l(t, d, _)); if (null != e) { D(e); return } O(!1); let n = u(l(t)); null != n && D(n) }, [t, P, p, D, d, _]); let b = i.useCallback(e => { m.current && null == e && U(!0) }, []); i.useEffect(() => { p && C && null != N && (D(N), R(!1)) }, [C, N]), i.useEffect(() => { p && (!g && M(d, _), L(!1)) }, [d, _]); let G = i.useCallback(e => { if (!m.current) return; if (!A && o.includes(e.key) && !(e.shiftKey || e.altKey || e.metaKey || e.ctrlKey) && e.currentTarget === e.target) { e.preventDefault(), e.stopPropagation(), y(); return } let t = function(e) { switch (e.key) { case s.Keys.ENTER: return s.ActionType.SELECT_FOCUSED_ITEM; case s.Keys.UP: return s.ActionType.NAVIGATE_UP; case s.Keys.DOWN: return s.ActionType.NAVIGATE_DOWN; case s.Keys.RIGHT: return s.ActionType.NAVIGATE_RIGHT; case s.Keys.LEFT: return s.ActionType.NAVIGATE_LEFT; case s.Keys.HOME: if (e.ctrlKey) return s.ActionType.NAVIGATE_START; return s.ActionType.NAVIGATE_INLINE_START; case s.Keys.END: if (e.ctrlKey) return s.ActionType.NAVIGATE_END; return s.ActionType.NAVIGATE_INLINE_END } }(e); switch (t) { case s.ActionType.NAVIGATE_UP: case s.ActionType.NAVIGATE_DOWN: case s.ActionType.NAVIGATE_RIGHT: case s.ActionType.NAVIGATE_LEFT: case s.ActionType.NAVIGATE_INLINE_START: case s.ActionType.NAVIGATE_INLINE_END: case s.ActionType.NAVIGATE_START: case s.ActionType.NAVIGATE_END: !(0 === n.length || 0 === d && 0 === _ && t === s.ActionType.NAVIGATE_LEFT) && (e.preventDefault(), e.stopPropagation()), T({ type: t }); return; case s.ActionType.SELECT_FOCUSED_ITEM: var i; if (h && (null == (i = N) ? void 0 : i.ownerDocument.activeElement) !== i || e.repeat) return; e.preventDefault(), e.stopPropagation(), T({ type: t }), null != c ? c(d, _, e) : null != N && N.click() } }, [y, T, h, N, c, d, _]), w = i.useCallback(e => e.currentTarget !== e.target ? (!p && (O(!0), L(!0)), !1) : p ? (y(!1), !1) : void(f && null != N ? M(d, _) : y(!0)), [p, f, N, y, M, d, _]), k = i.useCallback(e => { if (e.target !== e.currentTarget) { if (e.currentTarget.contains(e.relatedTarget)) return !1; O(!1) } }, []), B = i.useMemo(() => Math.max(...n), [n]), V = i.useCallback(() => ({ role: "grid", "aria-rowcount": n.length, "aria-colcount": B, tabIndex: p && f ? -1 : 0, "data-ref-id": t, onKeyDown: G, onFocus: w, onBlur: k }), [n.length, B, p, f, t, G, w, k]), x = i.useCallback((e, n) => { let i = { role: "gridcell", "aria-rowindex": n + 1, "aria-colindex": e + 1, id: (0, a.makeGridId)(t, e, n), tabIndex: f && e === d && n === _ ? 0 : -1, onFocus: v.get("".concat(e, ",").concat(n)) }; return e === d && n === _ && (i.ref = b), i }, [t, f, d, _, v, b]), F = i.useCallback(e => ({ role: "row", "aria-rowindex": e + 1 }), []); return i.useMemo(() => ({ dispatch: T, getContainerProps: V, getItemProps: x, getRowProps: F }), [T, V, x, F]) }({ navId: t, columnCounts: O, focusedX: C, focusedY: R, dispatch: g, onSelect: c, prepareFocus: E, getNewFocusPosition: I, maintainFocusPosition: T, enabled: f, autoFocusElement: h, useVirtualFocus: A }) } }, 837969: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("47120"); var i = n("470079"), r = n("714319"), s = n("536895"), a = n("260866"); let o = [s.Keys.TAB, s.Keys.UP, s.Keys.DOWN]; function l(e, t, n) { return null != n ? "#".concat(e(t, n)) : "#".concat(t) } function u(e) { return document.querySelector(e) } function d(e) { var t; null === (t = document.getElementById(e)) || void 0 === t || t.focus() } function _(e) { let { navId: t, itemCount: n, focusedIndex: _ = 0, onSelect: c, setFocus: E, getNewFocusIndex: I, maintainFocusPosition: T = !0, includeSetSizes: f = !0, focusOnMount: S = !0, enabled: h = !0, onDispatch: A } = e, m = i.useCallback((e, t) => { let n = (0, r.default)(e, t); return null != A && A(e, n, t), n }, [A]), [N, p] = i.useReducer(m, { focusedIndex: _, itemCount: n }), { itemCount: O, focusedIndex: C } = N, [R] = i.useState(() => (0, a.throttle)(p, 16)); return i.useEffect(() => { p({ type: r.ListActionType.UPDATE_ITEM_COUNT, itemCount: n }) }, [n]), function(e) { let { navId: t, itemCount: n, focusedIndex: _, onSelect: c, setFocus: E = d, getNewFocusIndex: I, dispatch: T, maintainFocusPosition: f, includeSetSizes: S, focusOnMount: h, enabled: A, makeId: m = a.makeId, getIndexFromId: N } = e, p = i.useRef(n), O = i.useRef(N); O.current = N, p.current = n; let C = i.useRef(); i.useEffect(() => { C.current = A }, [A]); let [R, g] = i.useState(!1), [L] = i.useState(() => new a.HandlerMemoizer(e => () => { let t = null != O.current && "string" == typeof e ? O.current(e) : e; "number" == typeof t && !(t < 0) && T({ type: r.ListActionType.SET_FOCUSED_INDEX, index: t }) })); i.useEffect(() => () => L.clean(), [L]); let v = i.useCallback((e, t) => { C.current && E(e, t) }, [E]), [D, M] = i.useState(!0); i.useEffect(() => { if (D && !h) { M(!1); return } v(m(t, _), _) }, [_]); let y = i.useCallback(function() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0], n = null != I ? I(_) : _; n !== _ && T({ type: r.ListActionType.SET_FOCUSED_INDEX, index: n }), e && v(m(t, n), n) }, [m, _, I, T, t, v]), P = i.useCallback(e => { if (!C.current) return; if (o.includes(e.key) && !(e.shiftKey || e.altKey || e.metaKey || e.ctrlKey) && e.currentTarget === e.target) { e.preventDefault(), e.stopPropagation(), y(); return } let n = function(e) { switch (e.key) { case s.Keys.ENTER: case s.Keys.SPACE: return s.ActionType.SELECT_FOCUSED_ITEM; case s.Keys.UP: return s.ActionType.NAVIGATE_UP; case s.Keys.DOWN: return s.ActionType.NAVIGATE_DOWN; case s.Keys.HOME: return s.ActionType.NAVIGATE_START; case s.Keys.END: return s.ActionType.NAVIGATE_END } }(e); switch (n) { case s.ActionType.NAVIGATE_UP: case s.ActionType.NAVIGATE_DOWN: case s.ActionType.NAVIGATE_START: case s.ActionType.NAVIGATE_END: e.preventDefault(), e.stopPropagation(), T({ type: n }); return; case s.ActionType.SELECT_FOCUSED_ITEM: var i; let r = u(l(m, t, _)); if ((null == (i = r) ? void 0 : i.ownerDocument.activeElement) !== i || e.repeat) return; if (e.preventDefault(), e.stopPropagation(), T({ type: n }), null != c) { c(_); return } null == r || r.click() } }, [m, t, T, _, y, c]), U = i.useCallback(() => { R || g(!0) }, [R]), b = i.useCallback(() => { !R && (f ? v(m(t, _), _) : y(!0)) }, [m, t, v, f, R, _, y]), G = i.useCallback(e => { !e.currentTarget.contains(e.relatedTarget) && requestAnimationFrame(() => { if (null == u(l(m, t, _))) { v(t); return } g(!1) }) }, [m, t, _, v]), w = i.useRef(null); i.useLayoutEffect(() => { let e = w.current; if (null != e) return e.addEventListener("focusin", U), e.addEventListener("focus", b), e.addEventListener("focusout", G), () => { e.removeEventListener("focusin", U), e.removeEventListener("focus", b), e.removeEventListener("focusout", G) } }, [b, U, G]); let k = i.useCallback(() => ({ role: "list", tabIndex: R && f ? -1 : 0, id: t, onKeyDown: P, ref: w }), [t, R, P, f]), B = i.useCallback(e => { let { index: n } = e; return { role: "listitem", "aria-setsize": S ? p.current : void 0, "aria-posinset": S ? n + 1 : void 0, id: m(t, n), tabIndex: f && n === _ ? 0 : -1, onFocus: L.get(null != O.current ? m(t, n) : n) } }, [m, t, _, f, L, S]); return i.useMemo(() => ({ dispatch: T, getContainerProps: k, getItemProps: B }), [T, k, B]) }({ navId: t, itemCount: O, focusedIndex: C, dispatch: R, onSelect: c, setFocus: E, getNewFocusIndex: I, maintainFocusPosition: T, includeSetSizes: f, focusOnMount: S, enabled: h }) } }, 498405: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return o } }), n("47120"); var i = n("470079"), r = n("808629"), s = n("536895"), a = n("260866"); function o(e) { let { navId: t, items: n, initialFocusPath: o, onSelect: l, enabled: u = !0, closeMenu: d } = e, _ = i.useRef(u); i.useLayoutEffect(() => { _.current = u }, [u]); let [c, E] = i.useReducer(r.default, { items: n, focusPath: o, focusIndex: -1 }), I = i.useMemo(() => (0, a.throttle)(E, 30), [E]); i.useEffect(() => { E({ type: r.MenuActionType.UPDATE_ITEMS, items: n }) }, [n]); let { focusPath: T } = c, [f, S] = i.useState(!1), [h, A] = i.useState(!1), [{ onItemFocusMemoizer: m, onItemMouseEnterMemoizer: N }] = i.useState(() => ({ onItemFocusMemoizer: new a.HandlerMemoizer(e => () => { S(!0), E({ type: r.MenuActionType.SET_FOCUS_PATH, path: e.split("--") }) }), onItemMouseEnterMemoizer: new a.HandlerMemoizer(e => () => { A(!1), E({ type: r.MenuActionType.SET_FOCUS_PATH, path: e.split("--") }) }) })), p = i.useCallback(e => { if (!_.current) return; e.key === s.Keys.ESCAPE && null != d && (e.stopPropagation(), e.preventDefault(), d()); let n = function(e) { switch (e.key) { case s.Keys.ENTER: case s.Keys.SPACE: return s.ActionType.SELECT_FOCUSED_ITEM; case s.Keys.UP: return s.ActionType.NAVIGATE_UP; case s.Keys.DOWN: return s.ActionType.NAVIGATE_DOWN; case s.Keys.RIGHT: return s.ActionType.NAVIGATE_IN; case s.Keys.LEFT: return s.ActionType.NAVIGATE_OUT } }(e); switch (n) { case s.ActionType.NAVIGATE_UP: case s.ActionType.NAVIGATE_DOWN: case s.ActionType.NAVIGATE_IN: case s.ActionType.NAVIGATE_OUT: e.preventDefault(), e.stopPropagation(), A(!0), I({ type: n }); return; case s.ActionType.SELECT_FOCUSED_ITEM: var i, r, o, u, c; if (e.repeat) return; if (e.target.tabIndex >= 0) return; if (e.preventDefault(), e.stopPropagation(), A(!1), I({ type: n }), null != l) { l(T); return } let E = (u = null !== (i = e.target.ownerDocument) && void 0 !== i ? i : document, c = (r = t, null != (o = T) ? "".concat((0, a.makeId)(r, o.join("--"))) : r), u.getElementById(c)); null == E || E.click() } }, [I, t, T, l, d]), O = i.useCallback(() => { !f && S(!0) }, [f]), C = i.useCallback(e => { e.target !== e.currentTarget && !e.currentTarget.contains(e.relatedTarget) && f && S(!1) }, [f]), R = i.useCallback(() => { E({ type: r.MenuActionType.SET_FOCUS_PATH, path: [] }), S(!1) }, []), g = i.useCallback(e => e.every((e, t) => T[t] === e), [T]), L = i.useCallback(() => ({ role: "menu", id: t, tabIndex: -1, onKeyDown: p, onFocus: O, onBlur: C, onMouseLeave: R, "aria-activedescendant": T.length > 0 ? (0, a.makeId)(t, T.join("--")) : void 0 }), [t, p, O, C, R, T]), v = i.useCallback(e => { let { path: n } = e; return { role: "menu", tabIndex: -1, "aria-activedescendant": g(n) ? (0, a.makeId)(t, T.join("--")) : void 0, focusIndex: c.focusIndex, isUsingKeyboardNavigation: h } }, [t, T, g, c.focusIndex, h]), D = i.useCallback(e => { let { path: n, hasSubmenu: i = !1, role: r = "menuitem" } = e, s = n.join("--"); return { ...i ? { "aria-expanded": g(n), "aria-haspopup": !0 } : {}, role: r, id: (0, a.makeId)(t, s), tabIndex: -1, onFocus: m.get(s), onMouseEnter: N.get(s) } }, [t, g, m, N]); return i.useMemo(() => ({ dispatch: I, getContainerProps: L, getSubmenuProps: v, getItemProps: D, isFocused: g, isUsingKeyboardNavigation: h }), [I, L, v, D, g, h]) } }, 261470: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return r } }), n("411104"); class r { get fails() { return this._fails } get current() { return this._current } get pending() { return null != this._timeoutId } succeed() { this.cancel(), this._fails = 0, this._current = this.min } fail(e) { this._fails += 1; let t = 2 * this._current; if (this.jitter && (t *= Math.random()), this._current = Math.min(this._current + t, this.max), null != e) { if (null != this._timeoutId) { if (this._callback !== e) throw Error("callback already pending"); this.cancel() } this._callback = e, this._timeoutId = setTimeout(() => { try { null != e && e() } finally { this.cancel() } }, this._current) } return this._current } cancel() { this._callback = null, null != this._timeoutId && (clearTimeout(this._timeoutId), this._timeoutId = null) } constructor(e = 500, t = null, n = !0) { if (i(this, "min", void 0), i(this, "max", void 0), i(this, "jitter", void 0), i(this, "_current", void 0), i(this, "_timeoutId", void 0), i(this, "_callback", void 0), i(this, "_fails", 0), e <= 0) throw Error("Backoff min value must be greater than zero or backoff will never back-off."); this.min = e, this.max = null != t ? t : 10 * e, this.jitter = n, this._current = e } } }, 608787: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LazyLibrary: function() { return _ }, importWithRetry: function() { return u }, makeLazy: function() { return d }, setAwaitOnline: function() { return o } }), n("47120"); var i = n("735250"), r = n("470079"); let s = function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "transparent"; return () => (0, i.jsx)("div", { style: { position: "absolute", width: "100%", height: "100%", backgroundColor: e } }) }, a = () => Promise.resolve(); function o(e) { a = e } let l = e => new Promise(t => setTimeout(t, e)); async function u(e) { let { createPromise: t, webpackId: i } = e, r = 500, s = 0; for (;;) try { return await t() } catch (e) { if (console.log(e), i in n.c) throw console.log("Module was found in webpack cache so it has loaded from the network and webpack will not retry"), e; if (s >= 50) throw e; await l(r), await a(), r = Math.min(5e3, 2 * r), s++ } } function d(e) { let { createPromise: t, webpackId: n, renderLoader: a, name: o, memo: l = !1 } = e, d = r.lazy(() => u({ createPromise: t, webpackId: n })), _ = e => (0, i.jsx)(r.Suspense, { fallback: null != a ? a() : s()(), children: (0, i.jsx)(d, { ...e }) }); return l && (_ = r.memo(_)), _.displayName = "Suspense(".concat(o || "Unknown", ")"), _ } function _(e) { let { createPromise: t, webpackId: n, render: s, renderFallback: a } = e, [o, l] = r.useState(null); return r.useEffect(() => { u({ createPromise: t, webpackId: n }).then(e => { let { default: t } = e; return l(t) }) }, []), (0, i.jsx)(i.Fragment, { children: null == o ? a() : s(o) }) } }, 331595: function(e, t, n) { "use strict"; function i(e) { var t, n; let i = null != e["aria-label"]; return e["aria-hidden"] = null !== (t = e["aria-hidden"]) && void 0 !== t ? t : !i, e.role = null !== (n = e.role) && void 0 !== n ? n : "img", e } n.r(t), n.d(t, { default: function() { return i } }) }, 362883: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ActivitiesIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M22 4v1.51a6 6 0 0 1-1.76 4.25l-4.1 4.1a.5.5 0 0 0-.14.35v3.74a3 3 0 0 1-.66 1.87l-1.79 2.24a.5.5 0 0 1-.86-.14l-1.86-5.02a.5.5 0 0 0-.11-.18l-3.46-3.46a.5.5 0 0 0-.17-.11l-4.8-1.85a.5.5 0 0 1-.15-.85l2.02-1.73A3 3 0 0 1 6.1 8h3.68a.5.5 0 0 0 .36-.15l4.1-4.1A6 6 0 0 1 18.48 2H20a2 2 0 0 1 2 2Zm-5 5a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9 19a1 1 0 0 0-1-1H7a1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1 3 3 0 0 0-3 3v3a1 1 0 0 0 1 1h3a3 3 0 0 0 3-3Z", className: o })] }) } }, 711315: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnalyticsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2 19V5a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3Zm16-9.59V13a1 1 0 1 0 2 0V7a1 1 0 0 0-1-1h-6a1 1 0 1 0 0 2h3.59l-5.09 5.09-1.8-1.8a1 1 0 0 0-1.4 0l-4 4a1 1 0 1 0 1.4 1.42L9 13.4l1.8 1.8a1 1 0 0 0 1.4 0L18 9.4Z", clipRule: "evenodd", className: o }) }) } }, 780628: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AngleBracketsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9.6 7.8 4 12l5.6 4.2a1 1 0 0 1 .4.8v1.98c0 .21-.24.33-.4.2l-8.1-6.4a1 1 0 0 1 0-1.56l8.1-6.4c.16-.13.4-.01.4.2V7a1 1 0 0 1-.4.8ZM14.4 7.8 20 12l-5.6 4.2a1 1 0 0 0-.4.8v1.98c0 .21.24.33.4.2l8.1-6.4a1 1 0 0 0 0-1.56l-8.1-6.4a.25.25 0 0 0-.4.2V7a1 1 0 0 0 .4.8Z", className: o }) }) } }, 492631: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnnouncementsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M19.56 2a3 3 0 0 0-2.46 1.28 3.85 3.85 0 0 1-1.86 1.42l-8.9 3.18a.5.5 0 0 0-.34.47v10.09a3 3 0 0 0 2.27 2.9l.62.16c1.57.4 3.15-.56 3.55-2.12a.92.92 0 0 1 1.23-.63l2.36.94c.42.27.79.62 1.07 1.03A3 3 0 0 0 19.56 22h.94c.83 0 1.5-.67 1.5-1.5v-17c0-.83-.67-1.5-1.5-1.5h-.94Zm-8.53 15.8L8 16.7v1.73a1 1 0 0 0 .76.97l.62.15c.5.13 1-.17 1.12-.67.1-.41.29-.78.53-1.1Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2 10c0-1.1.9-2 2-2h.5c.28 0 .5.22.5.5v7a.5.5 0 0 1-.5.5H4a2 2 0 0 1-2-2v-4Z", className: o })] }) } }, 248487: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnnouncementsLockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M16 4h.5v-.5a2.5 2.5 0 0 1 5 0V4h.5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1Zm4-.5V4h-2v-.5a1 1 0 1 1 2 0Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M12.33 5.74a.5.5 0 0 1 .67.47V9a3 3 0 0 0 3 3h5.5c.28 0 .5.22.5.5v8c0 .83-.67 1.5-1.5 1.5h-.94a3 3 0 0 1-2.46-1.28 3.86 3.86 0 0 0-1.07-1.03l-2.36-.94a.92.92 0 0 0-1.23.63 2.92 2.92 0 0 1-3.55 2.12l-.62-.15A3 3 0 0 1 6 18.44V8.35c0-.2.13-.4.33-.47l6-2.14Zm-1.3 12.06L8 16.7v1.73a1 1 0 0 0 .76.97l.62.15c.5.13 1-.17 1.12-.67.1-.41.29-.78.53-1.1Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2 10c0-1.1.9-2 2-2h.5c.28 0 .5.22.5.5v7a.5.5 0 0 1-.5.5H4a2 2 0 0 1-2-2v-4Z", className: o })] }) } }, 196922: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AnnouncementsWarningIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M18.09 1.63c.4-.7 1.43-.7 1.82 0l3.96 6.9c.38.66-.12 1.47-.91 1.47h-7.92c-.79 0-1.3-.81-.91-1.48l3.96-6.9Zm.46 1.87h.9c.3 0 .52.26.5.55l-.22 2.02c-.01.16-.17.26-.33.23a1.92 1.92 0 0 0-.8 0c-.16.03-.32-.07-.33-.23l-.21-2.02a.5.5 0 0 1 .5-.55ZM19 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M12.43 5.7a.5.5 0 0 1 .6.72l-.63 1.1c-1.22 2.13.46 4.48 2.64 4.48h6.46c.28 0 .5.22.5.5v8c0 .83-.67 1.5-1.5 1.5h-.94a3 3 0 0 1-2.46-1.28 3.85 3.85 0 0 0-1.07-1.03l-2.36-.94a.92.92 0 0 0-1.23.63 2.92 2.92 0 0 1-3.55 2.12l-.62-.15A3 3 0 0 1 6 18.44V8.35c0-.2.13-.4.33-.47l6.1-2.18Zm-1.4 12.1L8 16.7v1.73a1 1 0 0 0 .76.97l.62.15c.5.13 1-.17 1.12-.67.1-.41.29-.78.53-1.1Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2 10c0-1.1.9-2 2-2h.5c.28 0 .5.22.5.5v7a.5.5 0 0 1-.5.5H4a2 2 0 0 1-2-2v-4Z", className: o })] }) } }, 800005: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ArrowAngleLeftUpIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2.3 7.3a1 1 0 0 0 0 1.4l5 5a1 1 0 0 0 1.4-1.4L5.42 9H11a7 7 0 0 1 7 7v4a1 1 0 1 0 2 0v-4a9 9 0 0 0-9-9H5.41l3.3-3.3a1 1 0 0 0-1.42-1.4l-5 5Z", className: o }) }) } }, 59262: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ArrowAngleRightUpIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21.7 7.3a1 1 0 0 1 0 1.4l-5 5a1 1 0 0 1-1.4-1.4L18.58 9H13a7 7 0 0 0-7 7v4a1 1 0 1 1-2 0v-4a9 9 0 0 1 9-9h5.59l-3.3-3.3a1 1 0 0 1 1.42-1.4l5 5Z", className: o }) }) } }, 808517: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ArrowSmallLeftIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M3.3 11.3a1 1 0 0 0 0 1.4l5 5a1 1 0 0 0 1.4-1.4L6.42 13H20a1 1 0 1 0 0-2H6.41l3.3-3.3a1 1 0 0 0-1.42-1.4l-5 5Z", className: o }) }) } }, 856469: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AtIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M16.44 6.96c.29 0 .51.25.47.54l-.82 6.34c-.02.08-.03.2-.03.34 0 .71.28 1.07.85 1.07.49 0 .94-.21 1.36-.63.43-.42.77-1 1.02-1.72.26-.75.38-1.57.38-2.48 0-1.35-.29-2.54-.87-3.56a5.92 5.92 0 0 0-2.45-2.35 7.68 7.68 0 0 0-3.61-.83c-1.55 0-2.96.37-4.22 1.1a7.66 7.66 0 0 0-2.96 3.07 9.53 9.53 0 0 0-1.09 4.66c0 1.45.26 2.77.78 3.95a6.3 6.3 0 0 0 2.47 2.81 8.3 8.3 0 0 0 4.36 1.05 12.43 12.43 0 0 0 5.35-1.18.5.5 0 0 1 .7.24l.46 1.07c.1.22.02.47-.19.59-.77.43-1.69.77-2.75 1.02-1.23.3-2.48.44-3.76.44-2.18 0-4-.44-5.48-1.33a8.1 8.1 0 0 1-3.27-3.57 11.93 11.93 0 0 1-1.07-5.12c0-2.24.47-4.19 1.4-5.84a9.7 9.7 0 0 1 3.86-3.8c1.62-.9 3.4-1.34 5.36-1.34 1.8 0 3.4.37 4.8 1.12 1.4.72 2.5 1.76 3.28 3.1a8.86 8.86 0 0 1 1.16 4.56c0 1.36-.23 2.57-.7 3.64a5.81 5.81 0 0 1-1.92 2.47c-.82.58-1.76.87-2.81.87a2.4 2.4 0 0 1-1.6-.5c-.4-.35-.65-.78-.73-1.32-.3.55-.74 1-1.36 1.34a4.3 4.3 0 0 1-2.03.48A3.4 3.4 0 0 1 8 16C7.33 15.16 7 14 7 12.5c0-1.14.2-2.16.6-3.05.43-.89 1-1.57 1.73-2.06a4.3 4.3 0 0 1 4.27-.31c.47.29.82.68 1.07 1.16l.3-.95c.06-.2.25-.33.46-.33h1.02Zm-5.06 8.24c.8 0 1.45-.35 1.97-1.04.51-.7.77-1.6.77-2.7 0-.88-.18-1.56-.53-2.03a1.76 1.76 0 0 0-1.5-.73c-.8 0-1.45.35-1.97 1.04a4.28 4.28 0 0 0-.78 2.67c0 .9.17 1.58.51 2.06.36.49.87.73 1.53.73Z", className: o }) }) } }, 907134: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AttachmentIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M10.57 4.01a6.97 6.97 0 0 1 9.86 0l.54.55a6.99 6.99 0 0 1 0 9.88l-7.26 7.27a1 1 0 0 1-1.42-1.42l7.27-7.26a4.99 4.99 0 0 0 0-7.06L19 5.43a4.97 4.97 0 0 0-7.02 0l-8.02 8.02a3.24 3.24 0 1 0 4.58 4.58l6.24-6.24a1.12 1.12 0 0 0-1.58-1.58l-3.5 3.5a1 1 0 0 1-1.42-1.42l3.5-3.5a3.12 3.12 0 1 1 4.42 4.42l-6.24 6.24a5.24 5.24 0 0 1-7.42-7.42l8.02-8.02Z", className: o }) }) } }, 778887: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BellZIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M22.07 3.29 18.68 7h2.82c.28 0 .5.23.5.5v1a.5.5 0 0 1-.5.5h-5.33a.5.5 0 0 1-.5-.5v-1a1 1 0 0 1 .21-.63l1.1-1.38 1.99-2.5H16.5a.5.5 0 0 1-.5-.5V1.5c0-.28.22-.5.5-.5h5.33c.28 0 .5.22.5.5v1.11a1 1 0 0 1-.26.68Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M19 11.5a.5.5 0 0 0-.5-.5h-2.33a2.5 2.5 0 0 1-2.5-2.5v-1a3 3 0 0 1 .65-1.87l.48-.6c.18-.23.12-.57-.08-.78a2.5 2.5 0 0 1-.7-1.49.94.94 0 0 0-.07-.24 2 2 0 0 0-3.87-.07.62.62 0 0 1-.39.44A7 7 0 0 0 5 9.5v2.09a.5.5 0 0 1-.13.33l-1.1 1.22A3 3 0 0 0 3 15.15v.28c0 .67.34 1.29.95 1.56 1.31.6 4 1.51 8.05 1.51 4.05 0 6.74-.91 8.05-1.5.61-.28.95-.9.95-1.57v-.28a3 3 0 0 0-.77-2l-1.1-1.23a.5.5 0 0 1-.13-.33v-.09ZM9.18 19.84A.16.16 0 0 0 9 20a3 3 0 1 0 6 0c0-.1-.09-.17-.18-.16a24.84 24.84 0 0 1-5.64 0Z", className: o })] }) } }, 633985: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BicycleIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M15 4a1 1 0 0 0-.95 1.32l.9 2.68h-4.6l-.92-2.36A1 1 0 0 0 8.5 5H5a1 1 0 0 0 0 2h2.82l.5 1.27a1 1 0 0 0-.2.26L6.7 11.16a4.5 4.5 0 1 0 1.76.95l.78-1.45 1.83 4.7a1 1 0 1 0 1.86-.72L11.13 10h4.48l.55 1.65a4.5 4.5 0 1 0 1.9-.63L16.4 6h1.86c.41 0 .75.34.75.75V7a1 1 0 1 0 2 0v-.25A2.75 2.75 0 0 0 18.25 4H15Zm-9.3 9-1.08 2.03a1 1 0 0 0 1.76.94l1.09-2.01A2.5 2.5 0 1 1 5.7 13Zm11.13.64.72 2.18a1 1 0 0 0 1.9-.64l-.73-2.17a2.5 2.5 0 1 1-1.9.63Z", clipRule: "evenodd", className: o }) }) } }, 573966: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BoldIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M5.42 22a.9.9 0 0 1-.91-.9V2.9c0-.5.4-.9.9-.9h7.94c1.62 0 2.93.46 3.91 1.4 1 .92 1.5 2.15 1.5 3.67 0 1.2-.28 2.17-.86 2.9a4.8 4.8 0 0 1-2.23 1.57c1.18.25 2.1.78 2.78 1.59.7.8 1.04 1.9 1.04 3.33 0 1.86-.56 3.25-1.68 4.18-1.12.9-2.7 1.36-4.75 1.36H5.42Zm6.42-12c1.84 0 2.75-.73 2.75-2.2 0-1.47-.91-2.2-2.75-2.2h-3.1V10h3.1Zm.2 8.4c2.15 0 3.22-.8 3.22-2.4 0-1.6-1.07-2.4-3.22-2.4h-3.3v4.8h3.3Z", className: o }) }) } }, 704111: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BookCheckIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M15 2a3 3 0 0 1 3 3v12H5.5a1.5 1.5 0 0 0 0 3h14a.5.5 0 0 0 .5-.5V5h1a1 1 0 0 1 1 1v15a1 1 0 0 1-1 1H5a3 3 0 0 1-3-3V5a3 3 0 0 1 3-3h10Zm-.3 5.7a1 1 0 0 0-1.4-1.4L9 10.58l-2.3-2.3a1 1 0 0 0-1.4 1.42l3 3a1 1 0 0 0 1.4 0l5-5Z", clipRule: "evenodd", className: o }) }) } }, 75922: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BoostTier1SimpleIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M13.05 1.4a1.59 1.59 0 0 0-2.1 0l-4.9 4A3.37 3.37 0 0 0 5 8v8c0 1.07.4 2.06 1.05 2.6l4.9 4c.65.53 1.45.53 2.1 0l4.9-4A3.37 3.37 0 0 0 19 16V8c0-1.07-.4-2.06-1.05-2.6l-4.9-4ZM12 3.12 7.32 6.95C7.25 7.01 7 7.35 7 8v8c0 .65.25 1 .32 1.05L12 20.88l4.68-3.83c.07-.06.32-.4.32-1.05V8c0-.65-.25-1-.32-1.05L12 3.12Z", clipRule: "evenodd", className: o }) }) } }, 275735: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BoostTier2SimpleIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M10.95 1.4a1.59 1.59 0 0 1 2.1 0l4.9 4A3.37 3.37 0 0 1 19 8v8c0 1.07-.4 2.06-1.05 2.6l-4.9 4c-.65.53-1.45.53-2.1 0l-4.9-4A3.37 3.37 0 0 1 5 16V8c0-1.07.4-2.06 1.05-2.6l4.9-4Z", className: o }) }) } }, 937531: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BoostTier3SimpleIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M20.14.8a1.21 1.21 0 0 0-2.28 0l-.5 1.37a2 2 0 0 1-1.19 1.18l-1.38.51a1.21 1.21 0 0 0 0 2.28l1.38.5a2 2 0 0 1 1.18 1.19l.51 1.38c.13.34.37.57.65.7.6.24 1.36.01 1.63-.7l.5-1.38a2 2 0 0 1 1.19-1.18l1.38-.51a1.21 1.21 0 0 0 0-2.28l-1.38-.5a2 2 0 0 1-1.18-1.19L20.14.79Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13.25 1.56c.3.24.23.7-.06.93a3.22 3.22 0 0 0 .9 5.52l1.17.43a.5.5 0 0 1 .3.3l.43 1.16a3.14 3.14 0 0 0 2.51 2.06c.27.04.5.26.5.54V16c0 1.07-.4 2.06-1.05 2.6l-4.9 4c-.65.53-1.45.53-2.1 0l-4.9-4A3.37 3.37 0 0 1 5 16V8c0-1.07.4-2.06 1.05-2.6l4.9-4a1.59 1.59 0 0 1 2.1 0l.2.16Z", className: o })] }) } }, 648282: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CalendarIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M7 1a1 1 0 0 1 1 1v.75c0 .14.11.25.25.25h7.5c.14 0 .25-.11.25-.25V2a1 1 0 1 1 2 0v.75c0 .14.11.25.25.25H19a3 3 0 0 1 3 3 1 1 0 0 1-1 1H3a1 1 0 0 1-1-1 3 3 0 0 1 3-3h.75c.14 0 .25-.11.25-.25V2a1 1 0 0 1 1-1Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2 10a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v9a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3v-9Zm3.5 2a.5.5 0 0 0-.5.5v3c0 .28.22.5.5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3Z", clipRule: "evenodd", className: o })] }) } }, 44041: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChannelListMagnifyingGlassIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fillRule: "evenodd", d: "M18.5 23c.88 0 1.7-.25 2.4-.69l1.4 1.4a1 1 0 0 0 1.4-1.42l-1.39-1.4A4.5 4.5 0 1 0 18.5 23Zm0-2a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z", clipRule: "evenodd", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { d: "M3 3a1 1 0 0 0 0 2h18a1 1 0 1 0 0-2H3ZM2 8a1 1 0 0 1 1-1h18a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1ZM3 11a1 1 0 1 0 0 2h11a1 1 0 1 0 0-2H3ZM2 16a1 1 0 0 1 1-1h8a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1ZM3 19a1 1 0 1 0 0 2h8a1 1 0 1 0 0-2H3Z", fill: "string" == typeof a ? a : a.css, className: o })] }) } }, 11890: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChatCheckIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12.66 21.98c.4-.03.56-.51.28-.8l-.06-.06a3 3 0 1 1 4.24-4.24l.53.52c.2.2.5.2.7 0l2.53-2.52a3 3 0 0 1 .64-.5c.14-.07.24-.2.27-.34a10 10 0 1 0-18.24 3.32c.13.19.11.44-.04.61l-2.06 2.37A1 1 0 0 0 2.2 22H12c.22 0 .44 0 .66-.02Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M23.7 17.7a1 1 0 0 0-1.4-1.4L18 20.58l-2.3-2.3a1 1 0 0 0-1.4 1.42l3 3a1 1 0 0 0 1.4 0l5-5Z", className: o })] }) } }, 798405: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChatIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 22a10 10 0 1 0-8.45-4.64c.13.19.11.44-.04.61l-2.06 2.37A1 1 0 0 0 2.2 22H12Z", className: o }) }) } }, 30717: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CheckmarkLargeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21.7 5.3a1 1 0 0 1 0 1.4l-12 12a1 1 0 0 1-1.4 0l-6-6a1 1 0 1 1 1.4-1.4L9 16.58l11.3-11.3a1 1 0 0 1 1.4 0Z", className: o }) }) } }, 589965: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CheckmarkSmallIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M18.7 7.3a1 1 0 0 1 0 1.4l-8 8a1 1 0 0 1-1.4 0l-4-4a1 1 0 1 1 1.4-1.4l3.3 3.29 7.3-7.3a1 1 0 0 1 1.4 0Z", clipRule: "evenodd", className: o }) }) } }, 581051: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChevronSmallDownIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M5.3 9.3a1 1 0 0 1 1.4 0l5.3 5.29 5.3-5.3a1 1 0 1 1 1.4 1.42l-6 6a1 1 0 0 1-1.4 0l-6-6a1 1 0 0 1 0-1.42Z", className: o }) }) } }, 880104: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChevronSmallLeftIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M14.7 5.3a1 1 0 0 1 0 1.4L9.42 12l5.3 5.3a1 1 0 0 1-1.42 1.4l-6-6a1 1 0 0 1 0-1.4l6-6a1 1 0 0 1 1.42 0Z", className: o }) }) } }, 140835: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChevronSmallRightIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9.3 5.3a1 1 0 0 0 0 1.4l5.29 5.3-5.3 5.3a1 1 0 1 0 1.42 1.4l6-6a1 1 0 0 0 0-1.4l-6-6a1 1 0 0 0-1.42 0Z", className: o }) }) } }, 353381: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ChevronSmallUpIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M5.3 14.7a1 1 0 0 0 1.4 0L12 9.42l5.3 5.3a1 1 0 0 0 1.4-1.42l-6-6a1 1 0 0 0-1.4 0l-6 6a1 1 0 0 0 0 1.42Z", className: o }) }) } }, 903788: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CircleCheckIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, secondaryColor: a = "transparent", secondaryColorClass: o = "", color: l = r.default.colors.INTERACTIVE_NORMAL, colorClass: u = "", ...d } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(d), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("circle", { cx: "12", cy: "12", r: "10", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { fill: "string" == typeof l ? l : l.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm5.7-13.3a1 1 0 0 0-1.4-1.4L10 14.58l-2.3-2.3a1 1 0 0 0-1.4 1.42l3 3a1 1 0 0 0 1.4 0l7-7Z", clipRule: "evenodd", className: u })] }) } }, 729878: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CircleExclamationPointIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, secondaryColor: a = "transparent", secondaryColorClass: o = "", color: l = r.default.colors.INTERACTIVE_NORMAL, colorClass: u = "", ...d } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(d), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("circle", { cx: "12", cy: "12", r: "10", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { fill: "string" == typeof l ? l : l.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm1.44-15.94L13.06 14a1.06 1.06 0 0 1-2.12 0l-.38-6.94a1 1 0 0 1 1-1.06h.88a1 1 0 0 1 1 1.06Zm-.19 10.69a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0Z", clipRule: "evenodd", className: u })] }) } }, 128034: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CircleInformationIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, secondaryColor: a = "transparent", secondaryColorClass: o = "", color: l = r.default.colors.INTERACTIVE_NORMAL, colorClass: u = "", ...d } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(d), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("circle", { cx: "12", cy: "12", r: "10", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { fill: "string" == typeof l ? l : l.css, fillRule: "evenodd", d: "M23 12a11 11 0 1 1-22 0 11 11 0 0 1 22 0Zm-9.5-4.75a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0Zm-.77 3.96a1 1 0 1 0-1.96-.42l-1.04 4.86a2.77 2.77 0 0 0 4.31 2.83l.24-.17a1 1 0 1 0-1.16-1.62l-.24.17a.77.77 0 0 1-1.2-.79l1.05-4.86Z", clipRule: "evenodd", className: u })] }) } }, 960524: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CirclePlayIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, secondaryColor: a = "transparent", secondaryColorClass: o = "", color: l = r.default.colors.INTERACTIVE_NORMAL, colorClass: u = "", ...d } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(d), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("circle", { cx: "12", cy: "12", r: "10", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { fill: "string" == typeof l ? l : l.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22ZM9 8.09c0-.88 1-1.4 1.73-.9l5.8 3.91c.63.44.63 1.36 0 1.8l-5.8 3.9C10 17.3 9 16.8 9 15.92V8.1Z", clipRule: "evenodd", className: u })] }) } }, 817899: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CirclePlusIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, secondaryColor: a = "transparent", secondaryColorClass: o = "", color: l = r.default.colors.INTERACTIVE_NORMAL, colorClass: u = "", ...d } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(d), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("circle", { cx: "12", cy: "12", r: "10", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { fill: "string" == typeof l ? l : l.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm0-17a1 1 0 0 1 1 1v4h4a1 1 0 1 1 0 2h-4v4a1 1 0 1 1-2 0v-4H7a1 1 0 1 1 0-2h4V7a1 1 0 0 1 1-1Z", clipRule: "evenodd", className: u })] }) } }, 946835: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CircleQuestionIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, secondaryColor: a = "transparent", secondaryColorClass: o = "", color: l = r.default.colors.INTERACTIVE_NORMAL, colorClass: u = "", ...d } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(d), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("circle", { cx: "12", cy: "12", r: "10", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { fill: "string" == typeof l ? l : l.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm-.28-16c-.98 0-1.81.47-2.27 1.14A1 1 0 1 1 7.8 7.01 4.73 4.73 0 0 1 11.72 5c2.5 0 4.65 1.88 4.65 4.38 0 2.1-1.54 3.77-3.52 4.24l.14 1a1 1 0 0 1-1.98.27l-.28-2a1 1 0 0 1 .99-1.14c1.54 0 2.65-1.14 2.65-2.38 0-1.23-1.1-2.37-2.65-2.37ZM13 17.88a1.13 1.13 0 1 1-2.25 0 1.13 1.13 0 0 1 2.25 0Z", clipRule: "evenodd", className: u })] }) } }, 449257: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CircleXIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, secondaryColor: a = "transparent", secondaryColorClass: o = "", color: l = r.default.colors.INTERACTIVE_NORMAL, colorClass: u = "", ...d } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(d), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("circle", { cx: "12", cy: "12", r: "10", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { fill: "string" == typeof l ? l : l.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm4.7-15.7a1 1 0 0 0-1.4 0L12 10.58l-3.3-3.3a1 1 0 0 0-1.4 1.42L10.58 12l-3.3 3.3a1 1 0 1 0 1.42 1.4L12 13.42l3.3 3.3a1 1 0 0 0 1.4-1.42L13.42 12l3.3-3.3a1 1 0 0 0 0-1.4Z", clipRule: "evenodd", className: u })] }) } }, 895070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClipsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15.74 5.74a.5.5 0 0 0 .54.7l5.01-.88a.5.5 0 0 0 .4-.58l-.26-1.47a3 3 0 0 0-3.2-2.47.46.46 0 0 0-.37.26l-2.12 4.44ZM15.13 2.37a.5.5 0 0 0-.53-.7l-4.25.74a.5.5 0 0 0-.37.28L7.87 7.13a.5.5 0 0 0 .53.7l4.25-.74a.5.5 0 0 0 .37-.28l2.11-4.44ZM6.72 3.05l-2.55.45a3 3 0 0 0-2.43 3.48L2 8.46c.05.27.3.45.58.4l2.2-.39a.5.5 0 0 0 .36-.27l2.12-4.44a.5.5 0 0 0-.54-.7Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2 10.5c0-.28.22-.5.5-.5h19c.28 0 .5.22.5.5V19a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3v-8.5ZM5 14a1 1 0 0 1 1-1h9a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1Zm1 3a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2H6Z", clipRule: "evenodd", className: o })] }) } }, 539263: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm1-18a1 1 0 1 0-2 0v7c0 .27.1.52.3.7l3 3a1 1 0 0 0 1.4-1.4L13 11.58V5Z", clipRule: "evenodd", className: o }) }) } }, 330366: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClockWarningIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 23c.08 0 .14-.08.11-.16a2.88 2.88 0 0 1 .29-2.31l2.2-3.85c.18-.3-.06-.73-.3-.97l-3-3A1 1 0 0 1 11 12V5a1 1 0 1 1 2 0v6.38c0 .13.05.26.15.35l2.56 2.56c.08.08.22.08.28-.02l.36-.64a3.06 3.06 0 0 1 5.3 0l.3.54c.22.38.78.31.86-.12A11 11 0 1 0 12 23Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M18.09 14.63c.4-.7 1.43-.7 1.82 0l3.96 6.9c.38.66-.12 1.47-.91 1.47h-7.92c-.79 0-1.3-.81-.91-1.48l3.96-6.9Zm.46 1.87h.9c.3 0 .52.26.5.55l-.22 2.02c-.01.16-.17.26-.33.23a1.93 1.93 0 0 0-.8 0c-.16.03-.32-.07-.33-.23l-.21-2.02a.5.5 0 0 1 .5-.55ZM19 22a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z", clipRule: "evenodd", className: o })] }) } }, 594543: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CloseLargeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M19.3 20.7a1 1 0 0 0 1.4-1.4L13.42 12l7.3-7.3a1 1 0 0 0-1.42-1.4L12 10.58l-7.3-7.3a1 1 0 0 0-1.4 1.42L10.58 12l-7.3 7.3a1 1 0 1 0 1.42 1.4L12 13.42l7.3 7.3Z", className: o }) }) } }, 258485: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ClydeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M19.73 4.87a18.2 18.2 0 0 0-4.6-1.44c-.21.4-.4.8-.58 1.21-1.69-.25-3.4-.25-5.1 0-.18-.41-.37-.82-.59-1.2-1.6.27-3.14.75-4.6 1.43A19.04 19.04 0 0 0 .96 17.7a18.43 18.43 0 0 0 5.63 2.87c.46-.62.86-1.28 1.2-1.98-.65-.25-1.29-.55-1.9-.92.17-.12.32-.24.47-.37 3.58 1.7 7.7 1.7 11.28 0l.46.37c-.6.36-1.25.67-1.9.92.35.7.75 1.35 1.2 1.98 2.03-.63 3.94-1.6 5.64-2.87.47-4.87-.78-9.09-3.3-12.83ZM8.3 15.12c-1.1 0-2-1.02-2-2.27 0-1.24.88-2.26 2-2.26s2.02 1.02 2 2.26c0 1.25-.89 2.27-2 2.27Zm7.4 0c-1.1 0-2-1.02-2-2.27 0-1.24.88-2.26 2-2.26s2.02 1.02 2 2.26c0 1.25-.88 2.27-2 2.27Z", className: o }) }) } }, 939298: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CopyIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M3 16a1 1 0 0 1-1-1v-5a8 8 0 0 1 8-8h5a1 1 0 0 1 1 1v.5a.5.5 0 0 1-.5.5H10a6 6 0 0 0-6 6v5.5a.5.5 0 0 1-.5.5H3Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M6 18a4 4 0 0 0 4 4h8a4 4 0 0 0 4-4v-4h-3a5 5 0 0 1-5-5V6h-4a4 4 0 0 0-4 4v8Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21.73 12a3 3 0 0 0-.6-.88l-4.25-4.24a3 3 0 0 0-.88-.61V9a3 3 0 0 0 3 3h2.73Z", className: o })] }) } }, 931622: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CrownIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M5 18a1 1 0 0 0-1 1 3 3 0 0 0 3 3h10a3 3 0 0 0 3-3 1 1 0 0 0-1-1H5ZM3.04 7.76a1 1 0 0 0-1.52 1.15l2.25 6.42a1 1 0 0 0 .94.67h14.55a1 1 0 0 0 .95-.71l1.94-6.45a1 1 0 0 0-1.55-1.1l-4.11 3-3.55-5.33.82-.82a.83.83 0 0 0 0-1.18l-1.17-1.17a.83.83 0 0 0-1.18 0l-1.17 1.17a.83.83 0 0 0 0 1.18l.82.82-3.61 5.42-4.41-3.07Z", className: o }) }) } }, 575326: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DenyIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M23 12a11 11 0 1 1-22 0 11 11 0 0 1 22 0Zm-2 0a9 9 0 0 1-14.62 7.03L19.03 6.38A8.96 8.96 0 0 1 21 12ZM4.97 17.62 17.62 4.97A9 9 0 0 0 4.97 17.62Z", clipRule: "evenodd", className: o }) }) } }, 570392: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DoorExitIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9 12a1 1 0 0 1 1 1v2a1 1 0 1 1-2 0v-2a1 1 0 0 1 1-1Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2.75 3.02A3 3 0 0 1 5 2h10a3 3 0 0 1 3 3v7.64c0 .44-.55.7-.95.55a3 3 0 0 0-3.17 4.93l.02.03a.5.5 0 0 1-.35.85h-.05a.5.5 0 0 0-.5.5 2.5 2.5 0 0 1-3.68 2.2l-5.8-3.09A3 3 0 0 1 2 16V5a3 3 0 0 1 .76-1.98Zm1.3 1.95A.04.04 0 0 0 4 5v11c0 .36.2.68.49.86l5.77 3.08a.5.5 0 0 0 .74-.44V8.02a.5.5 0 0 0-.32-.46l-6.63-2.6Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15.3 16.7a1 1 0 0 1 1.4-1.4l4.3 4.29V16a1 1 0 1 1 2 0v6a1 1 0 0 1-1 1h-6a1 1 0 1 1 0-2h3.59l-4.3-4.3Z", className: o })] }) } }, 115682: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DownloadIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 2a1 1 0 0 1 1 1v10.59l3.3-3.3a1 1 0 1 1 1.4 1.42l-5 5a1 1 0 0 1-1.4 0l-5-5a1 1 0 1 1 1.4-1.42l3.3 3.3V3a1 1 0 0 1 1-1ZM3 20a1 1 0 1 0 0 2h18a1 1 0 1 0 0-2H3Z", className: o }) }) } }, 740093: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EmbedIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9.5 11.87a1 1 0 0 1 1.55-.83l3.2 2.13a1 1 0 0 1 0 1.66l-3.2 2.13a1 1 0 0 1-1.55-.83v-4.26Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm2 7a2 2 0 0 0-2 2v6c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2H7ZM5 6a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1Z", clipRule: "evenodd", className: o })] }) } }, 581663: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EyeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15.56 11.77c.2-.1.44.02.44.23a4 4 0 1 1-4-4c.21 0 .33.25.23.44a2.5 2.5 0 0 0 3.32 3.32Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M22.89 11.7c.07.2.07.4 0 .6C22.27 13.9 19.1 21 12 21c-7.11 0-10.27-7.11-10.89-8.7a.83.83 0 0 1 0-.6C1.73 10.1 4.9 3 12 3c7.11 0 10.27 7.11 10.89 8.7Zm-4.5-3.62A15.11 15.11 0 0 1 20.85 12c-.38.88-1.18 2.47-2.46 3.92C16.87 17.62 14.8 19 12 19c-2.8 0-4.87-1.38-6.39-3.08A15.11 15.11 0 0 1 3.15 12c.38-.88 1.18-2.47 2.46-3.92C7.13 6.38 9.2 5 12 5c2.8 0 4.87 1.38 6.39 3.08Z", clipRule: "evenodd", className: o })] }) } }, 361481: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EyePlusIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M22.52 13.17c-.2.41-.87.35-1.15 0a3.02 3.02 0 0 0-.45-.48.47.47 0 0 1-.13-.54c.04-.1.04-.2-.01-.31-.4-.9-1.18-2.4-2.4-3.76C16.89 6.38 14.82 5 12 5 9.2 5 7.13 6.38 5.61 8.08a15.05 15.05 0 0 0-2.37 3.72.48.48 0 0 0 0 .4c.4.9 1.18 2.37 2.37 3.72a8.46 8.46 0 0 0 5.89 3.07c.28.01.5.24.54.5.05.31.15.6.29.87.13.27-.03.64-.33.64-7.11 0-10.27-7.11-10.89-8.7a.83.83 0 0 1 0-.6C1.73 10.1 4.9 3 12 3c7.11 0 10.27 7.11 10.89 8.7.07.2.07.4 0 .6-.08.21-.2.5-.37.87Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15.56 11.77c.2-.1.44.02.44.23a4 4 0 1 1-4-4c.21 0 .33.25.23.44a2.5 2.5 0 0 0 3.32 3.32ZM19 14a1 1 0 0 1 1 1v3h3a1 1 0 1 1 0 2h-3v3a1 1 0 1 1-2 0v-3h-3a1 1 0 1 1 0-2h3v-3a1 1 0 0 1 1-1Z", className: o })] }) } }, 644189: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EyeSlashIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M1.3 21.3a1 1 0 1 0 1.4 1.4l20-20a1 1 0 0 0-1.4-1.4l-20 20ZM3.16 16.05c.18.24.53.26.74.05l.72-.72c.18-.18.2-.45.05-.66a15.7 15.7 0 0 1-1.43-2.52.48.48 0 0 1 0-.4c.4-.9 1.18-2.37 2.37-3.72C7.13 6.38 9.2 5 12 5c.82 0 1.58.12 2.28.33.18.05.38 0 .52-.13l.8-.8c.25-.25.18-.67-.15-.79A9.79 9.79 0 0 0 12 3C4.89 3 1.73 10.11 1.11 11.7a.83.83 0 0 0 0 .6c.25.64.9 2.15 2.05 3.75Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M8.18 10.81c-.13.43.36.65.67.34l2.3-2.3c.31-.31.09-.8-.34-.67a4 4 0 0 0-2.63 2.63ZM12.85 15.15c-.31.31-.09.8.34.67a4.01 4.01 0 0 0 2.63-2.63c.13-.43-.36-.65-.67-.34l-2.3 2.3Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9.72 18.67a.52.52 0 0 0-.52.13l-.8.8c-.25.25-.18.67.15.79 1.03.38 2.18.61 3.45.61 7.11 0 10.27-7.11 10.89-8.7a.83.83 0 0 0 0-.6c-.25-.64-.9-2.15-2.05-3.75a.49.49 0 0 0-.74-.05l-.72.72a.51.51 0 0 0-.05.66 15.7 15.7 0 0 1 1.43 2.52c.06.13.06.27 0 .4-.4.9-1.18 2.37-2.37 3.72C16.87 17.62 14.8 19 12 19c-.82 0-1.58-.12-2.28-.33Z", className: o })] }) } }, 298258: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FlagIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M3 1a1 1 0 0 1 1 1v.82l8.67-1.45A2 2 0 0 1 15 3.35v1.47l5.67-.95A2 2 0 0 1 23 5.85v7.3a2 2 0 0 1-1.67 1.98l-9 1.5a2 2 0 0 1-1.78-.6c-.2-.21-.08-.54.18-.68a5.01 5.01 0 0 0 1.94-1.94c.18-.32-.1-.66-.46-.6L4 14.18V21a1 1 0 1 1-2 0V2a1 1 0 0 1 1-1Z", className: o }) }) } }, 258152: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FolderIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2 5a3 3 0 0 1 3-3h3.93a2 2 0 0 1 1.66.9L12 5h7a3 3 0 0 1 3 3v11a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V5Z", className: o }) }) } }, 719812: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FoodIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M7 1a1 1 0 0 0-1 1v.2c0 .79-.4 1.53-1.05 1.97A4.37 4.37 0 0 0 3 7.8V8a1 1 0 0 0 2 0v-.2c0-.79.4-1.53 1.05-1.97A4.37 4.37 0 0 0 8 2.2V2a1 1 0 0 0-1-1ZM10 3a1 1 0 1 1 2 0v.42a3.2 3.2 0 0 1-2.18 3.03A1.2 1.2 0 0 0 9 7.58V8a1 1 0 0 1-2 0v-.42c0-1.37.88-2.6 2.18-3.03.5-.16.82-.62.82-1.13V3ZM2 11a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1 10 10 0 0 1-4.7 8.49.6.6 0 0 0-.3.51 2 2 0 0 1-2 2H9a2 2 0 0 1-2-2 .6.6 0 0 0-.3-.51A10 10 0 0 1 2 11ZM20.85 8.02c.16.52-.3.98-.85.98h-8c-.55 0-1.01-.46-.85-.98a4.07 4.07 0 0 1 1.31-1.84 5.23 5.23 0 0 1 1.63-.88 6.1 6.1 0 0 1 3.82 0c.61.2 1.16.5 1.63.87a4.07 4.07 0 0 1 1.3 1.85Z", className: o }) }) } }, 43491: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ForumIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M18.91 12.98a5.45 5.45 0 0 1 2.18 6.2c-.1.33-.09.68.1.96l.83 1.32a1 1 0 0 1-.84 1.54h-5.5A5.6 5.6 0 0 1 10 17.5a5.6 5.6 0 0 1 5.68-5.5c1.2 0 2.32.36 3.23.98Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M19.24 10.86c.32.16.72-.02.74-.38L20 10c0-4.42-4.03-8-9-8s-9 3.58-9 8c0 1.5.47 2.91 1.28 4.11.14.21.12.49-.06.67l-1.51 1.51A1 1 0 0 0 2.4 18h5.1a.5.5 0 0 0 .49-.5c0-4.2 3.5-7.5 7.68-7.5 1.28 0 2.5.3 3.56.86Z", className: o })] }) } }, 512671: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ForumLockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M16 4h.5v-.5a2.5 2.5 0 0 1 5 0V4h.5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1Zm4-.5V4h-2v-.5a1 1 0 1 1 2 0Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13.58 3.23c.24-.33.16-.86-.24-.96C12.59 2.1 11.8 2 11 2c-4.97 0-9 3.58-9 8 0 1.5.47 2.91 1.28 4.11.14.21.12.49-.06.67l-1.51 1.51A1 1 0 0 0 2.4 18h5.1a.5.5 0 0 0 .49-.5c0-3.17 2-5.82 4.77-6.94.29-.11.43-.45.34-.75A3 3 0 0 1 13 9V5c0-.66.22-1.28.58-1.77ZM18.91 12.98a5.45 5.45 0 0 1 2.18 6.2c-.1.33-.09.68.1.96l.83 1.32a1 1 0 0 1-.84 1.54h-5.5A5.6 5.6 0 0 1 10 17.5a5.6 5.6 0 0 1 5.68-5.5c1.2 0 2.32.36 3.23.98Z", className: o })] }) } }, 973090: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ForumWarningIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M18.09 1.63c.4-.7 1.43-.7 1.82 0l3.96 6.9c.38.66-.12 1.47-.91 1.47h-7.92c-.79 0-1.3-.81-.91-1.48l3.96-6.9Zm.46 1.87h.9c.3 0 .52.26.5.55l-.22 2.02c-.01.16-.17.26-.33.23a1.92 1.92 0 0 0-.8 0c-.16.03-.32-.07-.33-.23l-.21-2.02a.5.5 0 0 1 .5-.55ZM19 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M14.8 3.34a.48.48 0 0 0-.24-.69A9.94 9.94 0 0 0 11 2c-4.97 0-9 3.58-9 8 0 1.5.47 2.91 1.28 4.11.14.21.12.49-.06.67l-1.51 1.51A1 1 0 0 0 2.4 18h5.1a.5.5 0 0 0 .49-.5c0-2.86 1.62-5.3 3.97-6.56.28-.15.38-.51.25-.8a2.87 2.87 0 0 1 .18-2.61l2.4-4.19ZM18.91 12.98a5.45 5.45 0 0 1 2.18 6.2c-.1.33-.09.68.1.96l.83 1.32a1 1 0 0 1-.84 1.54h-5.5A5.6 5.6 0 0 1 10 17.5a5.6 5.6 0 0 1 5.68-5.5c1.2 0 2.32.36 3.23.98Z", className: o })] }) } }, 827428: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FullscreenEnterIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M4 6c0-1.1.9-2 2-2h3a1 1 0 0 0 0-2H6a4 4 0 0 0-4 4v3a1 1 0 0 0 2 0V6ZM4 18c0 1.1.9 2 2 2h3a1 1 0 1 1 0 2H6a4 4 0 0 1-4-4v-3a1 1 0 1 1 2 0v3ZM18 4a2 2 0 0 1 2 2v3a1 1 0 1 0 2 0V6a4 4 0 0 0-4-4h-3a1 1 0 1 0 0 2h3ZM20 18a2 2 0 0 1-2 2h-3a1 1 0 1 0 0 2h3a4 4 0 0 0 4-4v-3a1 1 0 1 0-2 0v3Z", className: o }) }) } }, 996141: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FullscreenExitIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M8 6a2 2 0 0 1-2 2H3a1 1 0 0 0 0 2h3a4 4 0 0 0 4-4V3a1 1 0 0 0-2 0v3ZM8 18a2 2 0 0 0-2-2H3a1 1 0 1 1 0-2h3a4 4 0 0 1 4 4v3a1 1 0 1 1-2 0v-3ZM18 8a2 2 0 0 1-2-2V3a1 1 0 1 0-2 0v3a4 4 0 0 0 4 4h3a1 1 0 1 0 0-2h-3ZM16 18c0-1.1.9-2 2-2h3a1 1 0 1 0 0-2h-3a4 4 0 0 0-4 4v3a1 1 0 1 0 2 0v-3Z", className: o }) }) } }, 499237: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GameControllerIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M20.97 4.06c0 .18.08.35.24.43.55.28.9.82 1.04 1.42.3 1.24.75 3.7.75 7.09v4.91a3.09 3.09 0 0 1-5.85 1.38l-1.76-3.51a1.09 1.09 0 0 0-1.23-.55c-.57.13-1.36.27-2.16.27s-1.6-.14-2.16-.27c-.49-.11-1 .1-1.23.55l-1.76 3.51A3.09 3.09 0 0 1 1 17.91V13c0-3.38.46-5.85.75-7.1.15-.6.49-1.13 1.04-1.4a.47.47 0 0 0 .24-.44c0-.7.48-1.32 1.2-1.47l2.93-.62c.5-.1 1 .06 1.36.4.35.34.78.71 1.28.68a42.4 42.4 0 0 1 4.4 0c.5.03.93-.34 1.28-.69.35-.33.86-.5 1.36-.39l2.94.62c.7.15 1.19.78 1.19 1.47ZM20 7.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0ZM15.5 12a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM5 7a1 1 0 0 1 2 0v1h1a1 1 0 0 1 0 2H7v1a1 1 0 1 1-2 0v-1H4a1 1 0 1 1 0-2h1V7Z", clipRule: "evenodd", className: o }) }) } }, 611865: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GifIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm2.18 13.87a2.9 2.9 0 0 1-1.66-.49 3.18 3.18 0 0 1-1.12-1.35A4.88 4.88 0 0 1 4 12c0-.75.14-1.42.42-2 .29-.59.7-1.04 1.24-1.37a3.7 3.7 0 0 1 1.95-.5c.64 0 1.21.14 1.72.4.5.28.89.67 1.15 1.16l-1.22.88a1.76 1.76 0 0 0-1.64-1.02c-.66 0-1.17.22-1.52.65a2.74 2.74 0 0 0-.53 1.8c0 .78.18 1.39.53 1.81.35.42.86.64 1.52.64.3 0 .57-.06.81-.16.25-.12.45-.27.58-.47v-.93H7.3v-1.4h3.24v4.23H9.27l-.2-.71c-.43.57-1.06.86-1.89.86Zm6.34-.15h-1.57V8.28h1.57v7.44Zm1.51 0h1.57v-2.83h2.76v-1.42H16.6V9.7H20V8.28h-4.97v7.44Z", clipRule: "evenodd", className: o }) }) } }, 452165: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GiftIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M4 6a4 4 0 0 1 4-4h.09c1.8 0 3.39 1.18 3.91 2.9A4.09 4.09 0 0 1 15.91 2H16a4 4 0 0 1 3.46 6H20a2 2 0 0 1 2 2v1.5a.5.5 0 0 1-.5.5h-19a.5.5 0 0 1-.5-.5V10c0-1.1.9-2 2-2h.54A3.98 3.98 0 0 1 4 6Zm12 2a2 2 0 1 0 0-4h-.09c-.96 0-1.8.65-2.02 1.58L13.29 8H16Zm-5.89-2.42.6 2.42H8a2 2 0 1 1 0-4h.09c.96 0 1.8.65 2.02 1.58Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M3 20c0 1.1.9 2 2 2h5.5a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.5-.5h-7a.5.5 0 0 0-.5.5V20ZM13.5 22a.5.5 0 0 1-.5-.5v-7c0-.28.22-.5.5-.5h7c.28 0 .5.22.5.5V20a2 2 0 0 1-2 2h-5.5Z", className: o })] }) } }, 322282: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GlobeEarthIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M23 12a11 11 0 1 1-22 0 11 11 0 0 1 22 0Zm-4.16 5.85A9 9 0 0 0 15 3.52V4a3 3 0 0 1-3 3h-.77c-.13 0-.23.1-.23.23A2.77 2.77 0 0 1 8.23 10c-.13 0-.23.1-.23.23v1.52c0 .14.11.25.25.25H13a3 3 0 0 1 3 3v.77c0 .13.1.23.23.23 1.2 0 2.23.77 2.61 1.85ZM3.18 10.18A9 9 0 0 0 11 20.94v-2.7c0-.14-.1-.24-.23-.24h-.65A2.12 2.12 0 0 1 8 15.88c0-.56-.22-1.1-.62-1.5l-4.2-4.2Z", clipRule: "evenodd", className: o }) }) } }, 388469: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GroupIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M14.5 8a3 3 0 1 0-2.7-4.3c-.2.4.06.86.44 1.12a5 5 0 0 1 2.14 3.08c.01.06.06.1.12.1ZM18.44 17.27c.15.43.54.73 1 .73h1.06c.83 0 1.5-.67 1.5-1.5a7.5 7.5 0 0 0-6.5-7.43c-.55-.08-.99.38-1.1.92-.06.3-.15.6-.26.87-.23.58-.05 1.3.47 1.63a9.53 9.53 0 0 1 3.83 4.78ZM12.5 9a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM2 20.5a7.5 7.5 0 0 1 15 0c0 .83-.67 1.5-1.5 1.5a.2.2 0 0 1-.2-.16c-.2-.96-.56-1.87-.88-2.54-.1-.23-.42-.15-.42.1v2.1a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-2.1c0-.25-.31-.33-.42-.1-.32.67-.67 1.58-.88 2.54a.2.2 0 0 1-.2.16A1.5 1.5 0 0 1 2 20.5Z", className: o }) }) } }, 351817: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HeadphonesIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 3a9 9 0 0 0-8.95 10h1.87a5 5 0 0 1 4.1 2.13l1.37 1.97a3.1 3.1 0 0 1-.17 3.78 2.85 2.85 0 0 1-3.55.74 11 11 0 1 1 10.66 0c-1.27.71-2.73.23-3.55-.74a3.1 3.1 0 0 1-.17-3.78l1.38-1.97a5 5 0 0 1 4.1-2.13h1.86A9 9 0 0 0 12 3Z", className: o }) }) } }, 145492: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HeadphonesSlashIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M22.7 2.7a1 1 0 0 0-1.4-1.4l-20 20a1 1 0 1 0 1.4 1.4l20-20ZM17.06 2.94a.48.48 0 0 0-.11-.77A11 11 0 0 0 2.18 16.94c.14.3.53.35.76.12l3.2-3.2c.25-.25.15-.68-.2-.76a5 5 0 0 0-1.02-.1H3.05a9 9 0 0 1 12.66-9.2c.2.09.44.05.59-.1l.76-.76ZM20.2 8.28a.52.52 0 0 1 .1-.58l.76-.76a.48.48 0 0 1 .77.11 11 11 0 0 1-4.5 14.57c-1.27.71-2.73.23-3.55-.74a3.1 3.1 0 0 1-.17-3.78l1.38-1.97a5 5 0 0 1 4.1-2.13h1.86a9.1 9.1 0 0 0-.75-4.72ZM10.1 17.9c.25-.25.65-.18.74.14a3.1 3.1 0 0 1-.62 2.84 2.85 2.85 0 0 1-3.55.74.16.16 0 0 1-.04-.25l3.48-3.48Z", className: o }) }) } }, 201707: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HeartIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12.47 21.73a.92.92 0 0 1-.94 0C9.43 20.48 1 15.09 1 8.75A5.75 5.75 0 0 1 6.75 3c2.34 0 3.88.9 5.25 2.26A6.98 6.98 0 0 1 17.25 3 5.75 5.75 0 0 1 23 8.75c0 6.34-8.42 11.73-10.53 12.98Z", className: o }) }) } }, 620180: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HomeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "m2.4 8.4 8.38-6.46a2 2 0 0 1 2.44 0l8.39 6.45a2 2 0 0 1-.79 3.54l-.32.07-.82 8.2a2 2 0 0 1-1.99 1.8H16a1 1 0 0 1-1-1v-5a3 3 0 0 0-6 0v5a1 1 0 0 1-1 1H6.31a2 2 0 0 1-1.99-1.8L3.5 12l-.32-.07a2 2 0 0 1-.79-3.54Z", className: o }) }) } }, 310665: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HourglassIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9.1 8.85A.5.5 0 0 1 9.45 8h5.1a.5.5 0 0 1 .35.85l-.84.85a3.25 3.25 0 0 0 0 4.6l2.06 2.06A3 3 0 0 1 17 18.5v1.01a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5v-1.01a3 3 0 0 1 .88-2.13l2.06-2.06a3.25 3.25 0 0 0 0-4.6l-.84-.85Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M7 1a3 3 0 0 0-3 3v1.51a6 6 0 0 0 1.76 4.25l2.06 2.06c.1.1.1.26 0 .36l-2.06 2.06A6 6 0 0 0 4 18.5V20a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3v-1.51a6 6 0 0 0-1.76-4.25l-2.06-2.06a.25.25 0 0 1 0-.36l2.06-2.06A6 6 0 0 0 20 5.5V4a3 3 0 0 0-3-3H7ZM6 4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1.51a4 4 0 0 1-1.17 2.83l-2.07 2.07c-.88.88-.88 2.3 0 3.18l2.07 2.07A4 4 0 0 1 18 18.49V20a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1v-1.51a4 4 0 0 1 1.17-2.83l2.07-2.07c.88-.88.88-2.3 0-3.18L7.17 8.34A4 4 0 0 1 6 5.51V4Z", clipRule: "evenodd", className: o })] }) } }, 596815: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HubIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13 7.83a3 3 0 1 0-2 0V11H8a4 4 0 0 0-4 4v1.17a3 3 0 1 0 2 0V15c0-1.1.9-2 2-2h3v3.17a3 3 0 1 0 2 0V13h3a2 2 0 0 1 2 2v1.17a3 3 0 1 0 2 0V15a4 4 0 0 0-4-4h-3V7.83Z", className: o }) }) } }, 528109: function(e, t, n) { "use strict"; n.r(t), n.d(t, { IdIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15.3 14.48c-.46.45-1.08.67-1.86.67h-1.39V9.2h1.39c.78 0 1.4.22 1.86.67.46.45.68 1.22.68 2.31 0 1.1-.22 1.86-.68 2.31Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm1 15h2.04V7.34H6V17Zm4-9.66V17h3.44c1.46 0 2.6-.42 3.38-1.25.8-.83 1.2-2.02 1.2-3.58s-.4-2.75-1.2-3.58c-.79-.83-1.92-1.25-3.38-1.25H10Z", clipRule: "evenodd", className: o })] }) } }, 898278: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ImageIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2 5a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v14a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V5Zm13.35 8.13 3.5 4.67c.37.5.02 1.2-.6 1.2H5.81a.75.75 0 0 1-.59-1.22l1.86-2.32a1.5 1.5 0 0 1 2.34 0l.5.64 2.23-2.97a2 2 0 0 1 3.2 0ZM10.2 5.98c.23-.91-.88-1.55-1.55-.9a.93.93 0 0 1-1.3 0c-.67-.65-1.78-.01-1.55.9a.93.93 0 0 1-.65 1.12c-.9.26-.9 1.54 0 1.8.48.14.77.63.65 1.12-.23.91.88 1.55 1.55.9a.93.93 0 0 1 1.3 0c.67.65 1.78.01 1.55-.9a.93.93 0 0 1 .65-1.12c.9-.26.9-1.54 0-1.8a.93.93 0 0 1-.65-1.12Z", clipRule: "evenodd", className: o }) }) } }, 262508: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ImageLockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2 5a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v9.15a4.48 4.48 0 0 0-5.93-.06l-.72-.96a2 2 0 0 0-3.2 0L9.93 16.1l-.5-.64a1.5 1.5 0 0 0-2.35 0l-1.86 2.32A.75.75 0 0 0 5.81 19H13v3H5a3 3 0 0 1-3-3V5Zm8.2.98c.23-.91-.88-1.55-1.55-.9a.93.93 0 0 1-1.3 0c-.67-.65-1.78-.01-1.55.9a.93.93 0 0 1-.65 1.12c-.9.26-.9 1.54 0 1.8.48.14.77.63.65 1.12-.23.91.88 1.55 1.55.9a.93.93 0 0 1 1.3 0c.67.65 1.78.01 1.55-.9a.93.93 0 0 1 .65-1.12c.9-.26.9-1.54 0-1.8a.93.93 0 0 1-.65-1.12Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M16 18h.5v-.5a2.5 2.5 0 0 1 5 0v.5h.5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Zm4-.5v.5h-2v-.5a1 1 0 1 1 2 0Z", clipRule: "evenodd", className: o })] }) } }, 771752: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ImageWarningIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h6.99c0-.48.12-.98.4-1.47l.88-1.53H5.81a.75.75 0 0 1-.59-1.22l1.86-2.32a1.5 1.5 0 0 1 2.34 0l.5.64 2.23-2.97a2 2 0 0 1 3.2 0l.73.98.27-.48a3.06 3.06 0 0 1 5.3 0l.35.62V5a3 3 0 0 0-3-3H5Zm3.65 3.08c.67-.65 1.78-.01 1.55.9-.12.49.17.98.65 1.12.9.26.9 1.54 0 1.8a.93.93 0 0 0-.65 1.12c.23.91-.88 1.55-1.55.9a.93.93 0 0 0-1.3 0c-.67.65-1.78.01-1.55-.9a.93.93 0 0 0-.65-1.12c-.9-.26-.9-1.54 0-1.8a.93.93 0 0 0 .65-1.12c-.23-.91.88-1.55 1.55-.9.36.35.94.35 1.3 0Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M19.91 14.63a1.06 1.06 0 0 0-1.82 0l-3.96 6.9c-.38.66.12 1.47.91 1.47h7.92c.79 0 1.3-.81.91-1.48l-3.96-6.9Zm-.46 1.87h-.9a.5.5 0 0 0-.5.55l.22 2.02c.01.16.17.26.33.23a1.93 1.93 0 0 1 .8 0c.16.03.32-.07.33-.23l.21-2.02a.5.5 0 0 0-.5-.55ZM20 21a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z", clipRule: "evenodd", className: o })] }) } }, 760587: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ImagesIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M4 8v7.5a.5.5 0 0 1-.5.5H3a1 1 0 0 1-1-1V8a6 6 0 0 1 6-6h7a1 1 0 0 1 1 1v.5a.5.5 0 0 1-.5.5H8a4 4 0 0 0-4 4Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M6 9a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3V9Zm13.8 9.79L16.82 15a2 2 0 0 0-3.14 0l-2.09 2.65-.13-.16a1.5 1.5 0 0 0-2.36.05l-.95 1.26a.75.75 0 0 0 .6 1.2h10.46c.62 0 .97-.72.59-1.21ZM11.73 8.3c.57-.56 1.52-.01 1.33.77a.8.8 0 0 0 .55.96c.77.22.77 1.3 0 1.53a.8.8 0 0 0-.55.96c.19.77-.76 1.32-1.33.76a.8.8 0 0 0-1.1 0c-.58.56-1.53.01-1.33-.76a.8.8 0 0 0-.56-.96c-.77-.22-.77-1.31 0-1.53a.8.8 0 0 0 .56-.96c-.2-.78.75-1.33 1.32-.77.31.3.8.3 1.11 0Z", clipRule: "evenodd", className: o })] }) } }, 717520: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ItalicIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M8.87 2.31A.5.5 0 0 1 9.34 2h10.92c.36 0 .6.36.47.69l-.6 1.5a.5.5 0 0 1-.47.31h-4.28l-4.17 15h4.05c.36 0 .6.36.47.69l-.6 1.5a.5.5 0 0 1-.47.31H3.74a.5.5 0 0 1-.47-.69l.6-1.5a.5.5 0 0 1 .47-.31h4.28l4.17-15H8.74a.5.5 0 0 1-.47-.69l.6-1.5Z", className: o }) }) } }, 632140: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LinkIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M16.3 14.7a1 1 0 0 1 0-1.4l2.5-2.5a3.95 3.95 0 1 0-5.6-5.6l-2.5 2.5a1 1 0 1 1-1.4-1.4l2.5-2.5a5.95 5.95 0 1 1 8.4 8.4l-2.5 2.5a1 1 0 0 1-1.4 0ZM7.7 9.3a1 1 0 0 1 0 1.4l-2.5 2.5a3.95 3.95 0 0 0 5.6 5.6l2.5-2.5a1 1 0 1 1 1.4 1.4l-2.5 2.5a5.95 5.95 0 0 1-8.4-8.4l2.5-2.5a1 1 0 0 1 1.4 0Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M14.7 10.7a1 1 0 1 0-1.4-1.4l-4 4a1 1 0 0 0 1.4 1.4l4-4Z", className: o })] }) } }, 26468: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LocationIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M12 23c3 0 9-8.03 9-13a9 9 0 1 0-18 0c0 4.97 6 13 9 13Zm0-10a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z", clipRule: "evenodd", className: o }) }) } }, 194565: function(e, t, n) { "use strict"; n.r(t), n.d(t, { LockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M6 9h1V6a5 5 0 0 1 10 0v3h1a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3H6a3 3 0 0 1-3-3v-8a3 3 0 0 1 3-3Zm9-3v3H9V6a3 3 0 1 1 6 0Zm-1 8a2 2 0 0 1-1 1.73V18a1 1 0 1 1-2 0v-2.27A2 2 0 1 1 14 14Z", clipRule: "evenodd", className: o }) }) } }, 387279: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MagnifyingGlassIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M15.62 17.03a9 9 0 1 1 1.41-1.41l4.68 4.67a1 1 0 0 1-1.42 1.42l-4.67-4.68ZM17 10a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z", clipRule: "evenodd", className: o }) }) } }, 79934: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MaximizeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M14 3a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0V5.41l-5.3 5.3a1 1 0 0 1-1.4-1.42L18.58 4H15a1 1 0 0 1-1-1ZM5.41 20H9a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1v-6a1 1 0 1 1 2 0v3.59l5.3-5.3a1 1 0 0 1 1.4 1.42L5.42 20Z", className: o }) }) } }, 247033: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MicrophoneIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 2a4 4 0 0 0-4 4v4a4 4 0 0 0 8 0V6a4 4 0 0 0-4-4Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M6 10a1 1 0 0 0-2 0 8 8 0 0 0 7 7.94V20H9a1 1 0 1 0 0 2h6a1 1 0 1 0 0-2h-2v-2.06A8 8 0 0 0 20 10a1 1 0 1 0-2 0 6 6 0 0 1-12 0Z", className: o })] }) } }, 95070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MicrophoneSlashIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "m2.7 22.7 20-20a1 1 0 0 0-1.4-1.4l-20 20a1 1 0 1 0 1.4 1.4ZM10.8 17.32c-.21.21-.1.58.2.62V20H9a1 1 0 1 0 0 2h6a1 1 0 1 0 0-2h-2v-2.06A8 8 0 0 0 20 10a1 1 0 0 0-2 0c0 1.45-.52 2.79-1.38 3.83l-.02.02A5.99 5.99 0 0 1 12.32 16a.52.52 0 0 0-.34.15l-1.18 1.18ZM15.36 4.52c.15-.15.19-.38.08-.56A4 4 0 0 0 8 6v4c0 .3.03.58.1.86.07.34.49.43.74.18l6.52-6.52ZM5.06 13.98c.16.28.53.31.75.09l.75-.75c.16-.16.19-.4.08-.61A5.97 5.97 0 0 1 6 10a1 1 0 0 0-2 0c0 1.45.39 2.81 1.06 3.98Z", className: o }) }) } }, 90787: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MinusIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M22 12a1 1 0 0 1-1 1H3a1 1 0 1 1 0-2h18a1 1 0 0 1 1 1Z", clipRule: "evenodd", className: o }) }) } }, 846343: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ModerationIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M5.26 12.45c.1.03.18.08.25.14l.52.44 5.26 5.26a1 1 0 0 1 0 1.42l-.58.58a1 1 0 0 1-1.42 0l-1.61-1.61a.25.25 0 0 0-.36 0L6.3 19.7a1 1 0 0 0-.29.7V21a1 1 0 0 1-1 1H3.41a1 1 0 0 1-.7-.3l-.42-.4a1 1 0 0 1-.29-.71V19a1 1 0 0 1 1-1h.59a1 1 0 0 0 .7-.3l1.03-1.02c.1-.1.1-.26 0-.36l-1.61-1.61a1 1 0 0 1 0-1.42l.58-.58a1 1 0 0 1 .97-.26ZM18.01 10.37a1 1 0 0 1-1.4-.11L13.86 7a1 1 0 0 1 0-1.3l2.7-3.18c.28-.34.7-.53 1.14-.53H21a1 1 0 0 1 1 1v3.3c0 .45-.2.86-.53 1.15L18 10.37Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M7.45 2.53A1.5 1.5 0 0 0 6.3 2H3a1 1 0 0 0-1 1v3.3c0 .45.2.86.53 1.15l11.72 9.92c.11.1.12.26.02.36L13.2 18.8a1 1 0 0 0 0 1.42l.58.58a1 1 0 0 0 1.42 0l1.61-1.61c.1-.1.26-.1.36 0l.53.53a1 1 0 0 1 .29.7V21a1 1 0 0 0 1 1h1.59a1 1 0 0 0 .7-.3l.42-.4a1 1 0 0 0 .29-.71V19a1 1 0 0 0-1-1h-.59a1 1 0 0 1-.7-.3l-.53-.52a.25.25 0 0 1 0-.36l1.61-1.61a1 1 0 0 0 0-1.42l-.58-.58a1 1 0 0 0-1.42 0l-1.06 1.06c-.1.1-.27.1-.36-.02L7.45 2.53Z", className: o })] }) } }, 608552: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MoreHorizontalIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M4 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm10-2a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm8 0a2 2 0 1 1-4 0 2 2 0 0 1 4 0Z", clipRule: "evenodd", className: o }) }) } }, 574177: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MoreVerticalIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M10 4a2 2 0 1 0 4 0 2 2 0 0 0-4 0Zm2 10a2 2 0 1 1 0-4 2 2 0 0 1 0 4Zm0 8a2 2 0 1 1 0-4 2 2 0 0 1 0 4Z", clipRule: "evenodd", className: o }) }) } }, 461286: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NatureIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9.8 14.6c-.45.31-.9.6-1.37.89l-.02.01-1.15.73c-.85.57-1.68 1.2-2.4 2.1a7.75 7.75 0 0 0-.7 1.03c-.39.69-.7 1.48-.94 2.42a1 1 0 0 0 1.94.49c.12-.49.26-.9.42-1.28 1.98.08 9.05-.04 12.73-5.34 3.5-5.02 2.89-10.16 2.01-13.89-.19-.81-1.26-1-1.85-.42-1.8 1.8-3.69 2.32-5.67 2.86-2.34.63-4.8 1.3-7.35 4.15a9.13 9.13 0 0 0-2.13 8.7c.9-1.11 1.92-1.88 2.84-2.48.4-.28.8-.53 1.18-.76a13.7 13.7 0 0 0 3.55-2.83 1 1 0 1 1 1.52 1.3A13.44 13.44 0 0 1 9.8 14.6Z", className: o }) }) } }, 467063: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NewUserLargeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M11.55 14.4c.28.17.62.17.9 0 1.6-.96 6.88-4.46 6.88-8.57A3.83 3.83 0 0 0 15.5 2c-1.56 0-2.58.6-3.5 1.5A4.66 4.66 0 0 0 8.5 2a3.83 3.83 0 0 0-3.83 3.83c0 4.1 5.29 7.61 6.88 8.57Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M3.11 14.86a1 1 0 0 0-.83 1.24l.23.89a6 6 0 0 0 6.46 4.45l2.03-.22V22a1 1 0 1 0 2 0v-.78l2.03.22A6 6 0 0 0 21.5 17l.23-.89a1 1 0 0 0-.83-1.24l-2.05-.29a6 6 0 0 0-6.1 3.07L12 19l-.74-1.36a6 6 0 0 0-6.1-3.07l-2.05.29ZM2.93 9.4a.6.6 0 0 1 1.14 0l.1.25a2 2 0 0 0 1.18 1.19l.25.1a.6.6 0 0 1 0 1.13l-.25.1a2 2 0 0 0-1.19 1.18l-.1.25a.6.6 0 0 1-1.13 0l-.1-.25a2 2 0 0 0-1.18-1.19l-.25-.1a.6.6 0 0 1 0-1.13l.25-.1a2 2 0 0 0 1.19-1.18l.1-.25ZM21.46 9.82a.49.49 0 0 0-.92 0v.03a2 2 0 0 1-1.19 1.18l-.03.01a.49.49 0 0 0 0 .92h.03a2 2 0 0 1 1.18 1.19l.01.03c.16.43.76.43.92 0v-.03a2 2 0 0 1 1.19-1.18l.03-.01a.49.49 0 0 0 0-.92h-.03a2 2 0 0 1-1.18-1.19l-.01-.03Z", className: o })] }) } }, 426215: function(e, t, n) { "use strict"; n.r(t), n.d(t, { NitroWheelIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M7 4a1 1 0 0 0 0 2h3a1 1 0 1 1 0 2H5.5a1 1 0 0 0 0 2H8a1 1 0 1 1 0 2H6a1 1 0 1 0 0 2h1.25A8 8 0 1 0 15 4H7Zm8 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2.5 10a1 1 0 0 0 0-2H2a1 1 0 0 0 0 2h.5Z", className: o })] }) } }, 658828: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ObjectIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M10.41 3.59 11.6 2.4a2 2 0 0 1 2.82 0l1.3 1.3a1 1 0 0 0 .7.29h4.18a1.41 1.41 0 0 1 1 2.41L14.4 13.6a1.41 1.41 0 0 1-2.41-1V8.4l-3.11 3.12a2 2 0 0 0-.53 1.87L9.9 20H15a1 1 0 1 1 0 2H3a1 1 0 1 1 0-2h4.86L6.4 13.86a4 4 0 0 1 1.06-3.75L10.8 6.8l-.38-.38a2 2 0 0 1 0-2.82Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M16.99 12.43c-.21.2-.2.55.06.7a3 3 0 0 0 4.08-4.08c-.15-.26-.5-.27-.7-.06l-3.44 3.44Z", className: o })] }) } }, 515639: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PaperIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm1 4a1 1 0 0 0 0 2h5a1 1 0 1 0 0-2H6Zm-1 6a1 1 0 0 1 1-1h12a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1Zm1 4a1 1 0 1 0 0 2h12a1 1 0 1 0 0-2H6Z", clipRule: "evenodd", className: o }) }) } }, 326325: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PaperPlusIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h9c.1 0 .12-.11.04-.15a3 3 0 0 1-2.03-3.16c.04-.34-.2-.69-.55-.69H6a1 1 0 1 1 0-2h9.5a.5.5 0 0 0 .5-.5V15a3 3 0 0 1 .19-1.05c.15-.4-.11-.95-.54-.95H6a1 1 0 1 1 0-2h12a1 1 0 0 1 .88.52c.13.24.35.48.62.52A3 3 0 0 1 21.83 14v.02c.02.06.17.05.17-.02V5a3 3 0 0 0-3-3H5Zm1 4a1 1 0 1 0 0 2h5a1 1 0 1 0 0-2H6Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M19 14a1 1 0 0 1 1 1v3h3a1 1 0 1 1 0 2h-3v3a1 1 0 1 1-2 0v-3h-3a1 1 0 1 1 0-2h3v-3a1 1 0 0 1 1-1Z", className: o })] }) } }, 844082: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PauseIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M6 4a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1H6ZM15 4a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1h-3Z", className: o }) }) } }, 299468: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PencilIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "m13.96 5.46 4.58 4.58a1 1 0 0 0 1.42 0l1.38-1.38a2 2 0 0 0 0-2.82l-3.18-3.18a2 2 0 0 0-2.82 0l-1.38 1.38a1 1 0 0 0 0 1.42ZM2.11 20.16l.73-4.22a3 3 0 0 1 .83-1.61l7.87-7.87a1 1 0 0 1 1.42 0l4.58 4.58a1 1 0 0 1 0 1.42l-7.87 7.87a3 3 0 0 1-1.6.83l-4.23.73a1.5 1.5 0 0 1-1.73-1.73Z", className: o }) }) } }, 735980: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PhoneCallIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2 7.4A5.4 5.4 0 0 1 7.4 2c.36 0 .7.22.83.55l1.93 4.64a1 1 0 0 1-.43 1.25L7 10a8.52 8.52 0 0 0 7 7l1.12-2.24a1 1 0 0 1 1.19-.51l5.06 1.56c.38.11.63.46.63.85C22 19.6 19.6 22 16.66 22h-.37C8.39 22 2 15.6 2 7.71V7.4ZM13 3a1 1 0 0 1 1-1 8 8 0 0 1 8 8 1 1 0 1 1-2 0 6 6 0 0 0-6-6 1 1 0 0 1-1-1Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13 7a1 1 0 0 1 1-1 4 4 0 0 1 4 4 1 1 0 1 1-2 0 2 2 0 0 0-2-2 1 1 0 0 1-1-1Z", className: o })] }) } }, 959411: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PlayIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M9.25 3.35C7.87 2.45 6 3.38 6 4.96v14.08c0 1.58 1.87 2.5 3.25 1.61l10.85-7.04a1.9 1.9 0 0 0 0-3.22L9.25 3.35Z", className: o }) }) } }, 919029: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PlusSmallIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13 6a1 1 0 1 0-2 0v5H6a1 1 0 1 0 0 2h5v5a1 1 0 1 0 2 0v-5h5a1 1 0 1 0 0-2h-5V6Z", className: o }) }) } }, 927515: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PollsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2 5c0-1.1.9-2 2-2h16a2 2 0 1 1 0 4H4a2 2 0 0 1-2-2ZM2 12c0-1.1.9-2 2-2h6a2 2 0 1 1 0 4H4a2 2 0 0 1-2-2ZM4 17a2 2 0 1 0 0 4h12a2 2 0 1 0 0-4H4Z", className: o }) }) } }, 844099: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QuestsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M7.5 21.7a8.95 8.95 0 0 1 9 0 1 1 0 0 0 1-1.73c-.6-.35-1.24-.64-1.9-.87.54-.3 1.05-.65 1.52-1.07a3.98 3.98 0 0 0 5.49-1.8.77.77 0 0 0-.24-.95 3.98 3.98 0 0 0-2.02-.76A4 4 0 0 0 23 10.47a.76.76 0 0 0-.71-.71 4.06 4.06 0 0 0-1.6.22 3.99 3.99 0 0 0 .54-5.35.77.77 0 0 0-.95-.24c-.75.36-1.37.95-1.77 1.67V6a4 4 0 0 0-4.9-3.9.77.77 0 0 0-.6.72 4 4 0 0 0 3.7 4.17c.89 1.3 1.3 2.95 1.3 4.51 0 3.66-2.75 6.5-6 6.5s-6-2.84-6-6.5c0-1.56.41-3.21 1.3-4.51A4 4 0 0 0 11 2.82a.77.77 0 0 0-.6-.72 4.01 4.01 0 0 0-4.9 3.96A4.02 4.02 0 0 0 3.73 4.4a.77.77 0 0 0-.95.24 3.98 3.98 0 0 0 .55 5.35 4 4 0 0 0-1.6-.22.76.76 0 0 0-.72.71l-.01.28a4 4 0 0 0 2.65 3.77c-.75.06-1.45.33-2.02.76-.3.22-.4.62-.24.95a4 4 0 0 0 5.49 1.8c.47.42.98.78 1.53 1.07-.67.23-1.3.52-1.91.87a1 1 0 1 0 1 1.73Z", className: o }) }) } }, 123406: function(e, t, n) { "use strict"; n.r(t), n.d(t, { QuoteIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2.35 19.44A4.75 4.75 0 0 0 6.07 21c1.43 0 2.58-.43 3.44-1.3.9-.9 1.35-2.06 1.35-3.5 0-1.43-.43-2.58-1.3-3.45a4.63 4.63 0 0 0-3.5-1.34c.6-1.6 1.99-3.1 4.16-4.49a.8.8 0 0 0 .1-1.3l-2.68-2.2a.76.76 0 0 0-.98 0C2.89 6.78 1 10.64 1 15.02c0 1.9.45 3.38 1.35 4.42ZM14.16 19.44A4.75 4.75 0 0 0 17.88 21c1.43 0 2.58-.43 3.45-1.3.9-.9 1.34-2.06 1.34-3.5 0-1.43-.43-2.58-1.3-3.45a4.63 4.63 0 0 0-3.5-1.34c.6-1.6 1.99-3.1 4.16-4.49a.8.8 0 0 0 .1-1.3l-2.68-2.2a.76.76 0 0 0-.98 0c-3.77 3.36-5.66 7.22-5.66 11.6 0 1.9.45 3.38 1.35 4.42Z", className: o }) }) } }, 457927: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ReactionIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22ZM6.5 13a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm11 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm-9.8 1.17a1 1 0 0 1 1.39.27 3.5 3.5 0 0 0 5.82 0 1 1 0 0 1 1.66 1.12 5.5 5.5 0 0 1-9.14 0 1 1 0 0 1 .27-1.4Z", clipRule: "evenodd", className: o }) }) } }, 331327: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RefreshIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21 2a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-6a1 1 0 1 1 0-2h3.93A8 8 0 0 0 6.97 5.78a1 1 0 0 1-1.26-1.56A9.98 9.98 0 0 1 20 6V3a1 1 0 0 1 1-1ZM3 22a1 1 0 0 1-1-1v-6a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H5.07a8 8 0 0 0 11.96 2.22 1 1 0 1 1 1.26 1.56A9.99 9.99 0 0 1 4 18v3a1 1 0 0 1-1 1Z", className: o }) }) } }, 748952: function(e, t, n) { "use strict"; n.r(t), n.d(t, { RobotIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M7.89 13.46a1 1 0 0 1-1.78-.9L7 13l-.9-.45.01-.01.01-.02a2.42 2.42 0 0 1 .14-.23c.1-.14.23-.31.4-.5.37-.36.98-.79 1.84-.79.86 0 1.47.43 1.83.8a3.28 3.28 0 0 1 .55.72v.02h.01v.01L10 13l.9-.45a1 1 0 0 1-1.79.9 1.28 1.28 0 0 0-.19-.25c-.14-.13-.28-.2-.42-.2-.14 0-.28.07-.42.2a1.28 1.28 0 0 0-.19.25ZM13.55 13.9a1 1 0 0 0 1.34-.44c0-.02.02-.04.04-.06.03-.05.08-.13.15-.2.14-.13.28-.2.42-.2.14 0 .28.07.42.2a1.28 1.28 0 0 1 .19.25 1 1 0 0 0 1.78-.9L17 13l.9-.45-.01-.01-.01-.02a2.57 2.57 0 0 0-.14-.23 3.28 3.28 0 0 0-.4-.5c-.37-.36-.98-.79-1.84-.79-.86 0-1.47.43-1.83.8a3.28 3.28 0 0 0-.55.72v.02h-.01v.01L14 13l-.9-.45a1 1 0 0 0 .45 1.34Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M12 21c5.52 0 10-1.86 10-6 0-5.59-2.8-10.07-4.26-11.67a1 1 0 1 0-1.48 1.34 14.8 14.8 0 0 1 2.35 3.86A10.23 10.23 0 0 0 12 6C9.47 6 7.15 7.02 5.4 8.53a14.8 14.8 0 0 1 2.34-3.86 1 1 0 0 0-1.48-1.34A18.65 18.65 0 0 0 2 15c0 4.14 4.48 6 10 6Zm0-12c3.87 0 7 2 7 4.2S15.87 17 12 17s-7-1.6-7-3.8C5 11 8.13 9 12 9Z", clipRule: "evenodd", className: o })] }) } }, 802792: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ScreenArrowIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2 5a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V5Zm16 3a1 1 0 0 0-.3-.7l-3-3a1 1 0 1 0-1.4 1.4L14.58 7H13a6 6 0 0 0-6 6 1 1 0 1 0 2 0 4 4 0 0 1 4-4h1.59l-1.3 1.3a1 1 0 0 0 1.42 1.4l3-3A1 1 0 0 0 18 8Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13 19.5c0 .28.22.5.5.5H15a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2h1.5a.5.5 0 0 0 .5-.5v-2c0-.28.22-.5.5-.5h1c.28 0 .5.22.5.5v2Z", className: o })] }) } }, 825350: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ScreenXIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2 5a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V5Zm6.3.3a1 1 0 0 1 1.4 0L12 7.58l2.3-2.3a1 1 0 1 1 1.4 1.42L13.42 9l2.3 2.3a1 1 0 0 1-1.42 1.4L12 10.42l-2.3 2.3a1 1 0 0 1-1.4-1.42L10.58 9l-2.3-2.3a1 1 0 0 1 0-1.4Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13 19.5c0 .28.22.5.5.5H15a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2h1.5a.5.5 0 0 0 .5-.5v-2c0-.28.22-.5.5-.5h1c.28 0 .5.22.5.5v2Z", className: o })] }) } }, 246521: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SendMessageIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M6.6 10.02 14 11.4a.6.6 0 0 1 0 1.18L6.6 14l-2.94 5.87a1.48 1.48 0 0 0 1.99 1.98l17.03-8.52a1.48 1.48 0 0 0 0-2.64L5.65 2.16a1.48 1.48 0 0 0-1.99 1.98l2.94 5.88Z", className: o }) }) } }, 716923: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ServerGridIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M5.25 2A3.25 3.25 0 0 0 2 5.25v2.5C2 9.55 3.46 11 5.25 11h2.5C9.55 11 11 9.54 11 7.75v-2.5C11 3.45 9.54 2 7.75 2h-2.5ZM5.25 13A3.25 3.25 0 0 0 2 16.25v2.5C2 20.55 3.46 22 5.25 22h2.5c1.8 0 3.25-1.46 3.25-3.25v-2.5C11 14.45 9.54 13 7.75 13h-2.5ZM13 5.25C13 3.45 14.46 2 16.25 2h2.5C20.55 2 22 3.46 22 5.25v2.5c0 1.8-1.46 3.25-3.25 3.25h-2.5A3.25 3.25 0 0 1 13 7.75v-2.5ZM16.25 13A3.25 3.25 0 0 0 13 16.25v2.5c0 1.8 1.46 3.25 3.25 3.25h2.5c1.8 0 3.25-1.46 3.25-3.25v-2.5c0-1.8-1.46-3.25-3.25-3.25h-2.5Z", className: o }) }) } }, 628028: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ServerIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M10.55 4.4c.13-.24.1-.54-.12-.71L8.6 2.24a1 1 0 0 0-1.24 0l-4 3.15a1 1 0 0 0-.38.79v4.03c0 .43.5.66.82.39l2.28-1.9a3 3 0 0 1 3.84 0c.03.02.08 0 .08-.04V6.42a4 4 0 0 1 .55-2.02ZM7.36 10.23a1 1 0 0 1 1.28 0l1.18.99 2.98 2.48 1.84 1.53a1 1 0 0 1-.67 1.77.1.1 0 0 0-.1.09l-.23 3.06a2 2 0 0 1-2 1.85H4.36a2 2 0 0 1-2-1.85l-.24-3.16a1 1 0 0 1-.76-1.76l6-5Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 10.2c0 .14.07.28.18.38l3.74 3.12a3 3 0 0 1 .03 4.58.55.55 0 0 0-.2.37l-.12 1.65a4 4 0 0 1-.17.9c-.12.38.13.8.52.8H20a2 2 0 0 0 2-2V3.61a1.5 1.5 0 0 0-2-1.41l-6.66 2.33A2 2 0 0 0 12 6.42", className: o })] }) } }, 125455: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SettingsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M10.56 1.1c-.46.05-.7.53-.64.98.18 1.16-.19 2.2-.98 2.53-.8.33-1.79-.15-2.49-1.1-.27-.36-.78-.52-1.14-.24-.77.59-1.45 1.27-2.04 2.04-.28.36-.12.87.24 1.14.96.7 1.43 1.7 1.1 2.49-.33.8-1.37 1.16-2.53.98-.45-.07-.93.18-.99.64a11.1 11.1 0 0 0 0 2.88c.06.46.54.7.99.64 1.16-.18 2.2.19 2.53.98.33.8-.14 1.79-1.1 2.49-.36.27-.52.78-.24 1.14.59.77 1.27 1.45 2.04 2.04.36.28.87.12 1.14-.24.7-.95 1.7-1.43 2.49-1.1.8.33 1.16 1.37.98 2.53-.07.45.18.93.64.99a11.1 11.1 0 0 0 2.88 0c.46-.06.7-.54.64-.99-.18-1.16.19-2.2.98-2.53.8-.33 1.79.14 2.49 1.1.27.36.78.52 1.14.24.77-.59 1.45-1.27 2.04-2.04.28-.36.12-.87-.24-1.14-.96-.7-1.43-1.7-1.1-2.49.33-.8 1.37-1.16 2.53-.98.45.07.93-.18.99-.64a11.1 11.1 0 0 0 0-2.88c-.06-.46-.54-.7-.99-.64-1.16.18-2.2-.19-2.53-.98-.33-.8.14-1.79 1.1-2.49.36-.27.52-.78.24-1.14a11.07 11.07 0 0 0-2.04-2.04c-.36-.28-.87-.12-1.14.24-.7.96-1.7 1.43-2.49 1.1-.8-.33-1.16-1.37-.98-2.53.07-.45-.18-.93-.64-.99a11.1 11.1 0 0 0-2.88 0ZM16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z", clipRule: "evenodd", className: o }) }) } }, 132317: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ShieldIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M4.27 5.22A2.66 2.66 0 0 0 3 7.5v2.3c0 5.6 3.3 10.68 8.42 12.95.37.17.79.17 1.16 0A14.18 14.18 0 0 0 21 9.78V7.5c0-.93-.48-1.78-1.27-2.27l-6.17-3.76a3 3 0 0 0-3.12 0L4.27 5.22ZM6 7.68l6-3.66V12H6.22C6.08 11.28 6 10.54 6 9.78v-2.1Zm6 12.01V12h5.78A11.19 11.19 0 0 1 12 19.7Z", clipRule: "evenodd", className: o }) }) } }, 656129: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ShieldUserIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M3.47 5.18c.27-.4.64-.74 1.1-.96l6.09-3.05a3 3 0 0 1 2.68 0l6.1 3.05A2.83 2.83 0 0 1 21 6.75v3.5a14.17 14.17 0 0 1-8.42 12.5c-.37.16-.79.16-1.16 0A14.18 14.18 0 0 1 3 9.77V6.75c0-.57.17-1.11.47-1.57Zm2.95 10.3A12.18 12.18 0 0 0 12 20.82a12.18 12.18 0 0 0 5.58-5.32A9.49 9.49 0 0 0 12.47 14h-.94c-1.88 0-3.63.55-5.11 1.49ZM12 13a4 4 0 1 0 0-8 4 4 0 0 0 0 8Z", clipRule: "evenodd", className: o }) }) } }, 825070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ShopIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2.63 4.19A3 3 0 0 1 5.53 2H7a1 1 0 0 1 1 1v3.98a3.07 3.07 0 0 1-.3 1.35A2.97 2.97 0 0 1 4.98 10c-2 0-3.44-1.9-2.9-3.83l.55-1.98ZM10 2a1 1 0 0 0-1 1v4a3 3 0 0 0 3 3 3 3 0 0 0 3-2.97V3a1 1 0 0 0-1-1h-4ZM17 2a1 1 0 0 0-1 1v3.98a3.65 3.65 0 0 0 0 .05A2.95 2.95 0 0 0 19.02 10c2 0 3.44-1.9 2.9-3.83l-.55-1.98A3 3 0 0 0 18.47 2H17Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21 11.42V19a3 3 0 0 1-3 3h-2.75a.25.25 0 0 1-.25-.25V16a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v5.75c0 .14-.11.25-.25.25H6a3 3 0 0 1-3-3v-7.58c0-.18.2-.3.37-.24a4.46 4.46 0 0 0 4.94-1.1c.1-.12.3-.12.4 0a4.49 4.49 0 0 0 6.58 0c.1-.12.3-.12.4 0a4.45 4.45 0 0 0 4.94 1.1c.17-.07.37.06.37.24Z", className: o })] }) } }, 220070: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ShopSparkleIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M20.14.8a1.21 1.21 0 0 0-2.28 0l-.5 1.37a2 2 0 0 1-1.19 1.18l-1.38.51a1.21 1.21 0 0 0 0 2.28l1.38.5a2 2 0 0 1 1.18 1.19l.51 1.38a1.2 1.2 0 0 0 1.15.79l.17-.01c.4-.06.79-.32.96-.78l.5-1.38a2 2 0 0 1 1.19-1.18l1.38-.51a1.21 1.21 0 0 0 0-2.28l-1.38-.5a2 2 0 0 1-1.18-1.19L20.14.79ZM20.98 11.84c0-.2-.24-.33-.42-.22-1.79 1.01-3.6-.17-4.87-1.55a.28.28 0 0 0-.4 0 4.49 4.49 0 0 1-6.58 0 .28.28 0 0 0-.4 0 4.45 4.45 0 0 1-4.94 1.11c-.17-.07-.37.06-.37.24V19a3 3 0 0 0 3 3h2.75c.14 0 .25-.11.25-.25V16c0-1.1.9-2 2-2h2a2 2 0 0 1 2 2v5.75c0 .14.11.25.25.25H18a3 3 0 0 0 3-3l-.02-7.16Z", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { d: "M12.98 2c.22 0 .32.4.15.54a3.22 3.22 0 0 0 .97 5.47l.12.05c.28.1.4.42.24.65A3 3 0 0 1 9 7V3a1 1 0 0 1 1-1h2.98ZM2.63 4.19A3 3 0 0 1 5.53 2H7a1 1 0 0 1 1 1v4.03A2.95 2.95 0 0 1 5.03 10h-.05c-2 0-3.44-1.9-2.9-3.83l.55-1.98Z", fill: "string" == typeof a ? a : a.css, className: o })] }) } }, 907418: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SignPostIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M11 3a1 1 0 1 1 2 0v2h5.75c.16 0 .3.07.4.2l2.63 3.5a.5.5 0 0 1 0 .6l-2.63 3.5a.5.5 0 0 1-.4.2H13v5h2a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1v-1c0-1.1.9-2 2-2h2v-5H2.8a.5.5 0 0 1-.44-.72L3.9 9.22a.5.5 0 0 0 0-.44L2.36 5.72A.5.5 0 0 1 2.81 5H11V3Z", className: o }) }) } }, 120116: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SlashBoxIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm12.79 3.37a.25.25 0 0 0-.22-.37h-3.13a.75.75 0 0 0-.66.38L6.21 18.63c-.1.16.03.37.22.37h3.13c.27 0 .52-.14.66-.38l7.57-13.25Z", clipRule: "evenodd", className: o }) }) } }, 138996: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SlashIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M19.12 2a.5.5 0 0 1 .43.76L8.22 21.64a.75.75 0 0 1-.64.36h-2.7a.5.5 0 0 1-.43-.76L15.78 2.36a.75.75 0 0 1 .64-.36h2.7Z", clipRule: "evenodd", className: o }) }) } }, 129426: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SoundboardIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M14.24 1.03a1 1 0 0 1 .73 1.21l-1 4a1 1 0 1 1-1.94-.48l1-4a1 1 0 0 1 1.21-.73ZM20.7 4.7a1 1 0 0 0-1.4-1.4l-4 4a1 1 0 0 0 1.4 1.4l4-4Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M15.14 20.14c1.78-1.78.7-5.75-2.42-8.86-3.11-3.12-7.08-4.2-8.86-2.42A3.13 3.13 0 0 0 3 11V11l-1.16 8.92a2 2 0 0 0 2.24 2.24L13 21c.86-.04 1.6-.32 2.14-.86Zm-1.3-3.4a9.61 9.61 0 0 0-2.53-4.05 9.61 9.61 0 0 0-4.05-2.53c-1.27-.35-1.82-.05-1.99.11-.16.17-.46.72-.11 2a9.61 9.61 0 0 0 2.53 4.04 9.61 9.61 0 0 0 4.05 2.53c1.27.35 1.82.05 1.99-.11.16-.17.46-.72.11-2Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M7.05 3.32a1 1 0 0 1 1.9-.64l1 3a1 1 0 0 1-1.9.64l-1-3ZM22.97 9.76a1 1 0 0 0-1.21-.73l-4 1a1 1 0 1 0 .48 1.94l4-1a1 1 0 0 0 .73-1.21ZM20.68 16.95a1 1 0 0 0 .64-1.9l-3-1a1 1 0 0 0-.64 1.9l3 1Z", className: o })] }) } }, 223130: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StaffBadgeIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M2 20.59V19.4a1 1 0 0 1 .3-.7l2.4-2.42a1 1 0 0 1 .71-.29H6l9-9-.85-.85a1 1 0 0 1-.23-.34l-1.49-3.73a.5.5 0 0 1 .65-.65l3.73 1.5a1 1 0 0 1 .34.22l.64.64a1 1 0 0 1 1.42 0l1 1a1 1 0 0 1 0 1.42l1.58 1.58a1 1 0 0 1 0 1.42l-1.58 1.58a1 1 0 0 1-1.42 0L17 9l-9 9v.59a1 1 0 0 1-.3.7l-2.4 2.42a1 1 0 0 1-.71.29H3.4a1 1 0 0 1-.7-.3l-.42-.4a1 1 0 0 1-.29-.71Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M8.23 10.23c.2.2.51.2.7 0l1.3-1.3a.5.5 0 0 0 0-.7L6.5 4.5l.3-.3a1 1 0 0 0 0-1.4l-.5-.5c-.2-.2-.45-.3-.7-.22-.43.14-1.17.49-2.1 1.42a5.37 5.37 0 0 0-1.42 2.1c-.08.25.03.5.21.7l.5.5a1 1 0 0 0 1.42 0l.29-.3 3.73 3.73ZM13.77 15.06a.5.5 0 0 0 0 .7l1.73 1.74 1.44 2.4a1 1 0 0 0 .15.19l1.73 1.73c.1.1.26.1.36 0l2.64-2.64c.1-.1.1-.26 0-.36L20.1 17.1a1 1 0 0 0-.2-.15L17.5 15.5l-1.73-1.73a.5.5 0 0 0-.7 0l-1.3 1.3Z", className: o })] }) } }, 318947: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StageIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M19.61 18.25a1.08 1.08 0 0 1-.07-1.33 9 9 0 1 0-15.07 0c.26.42.25.97-.08 1.33l-.02.02c-.41.44-1.12.43-1.46-.07a11 11 0 1 1 18.17 0c-.33.5-1.04.51-1.45.07l-.02-.02Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M16.83 15.23c.43.47 1.18.42 1.45-.14a7 7 0 1 0-12.57 0c.28.56 1.03.6 1.46.14l.05-.06c.3-.33.35-.81.17-1.23A4.98 4.98 0 0 1 12 7a5 5 0 0 1 4.6 6.94c-.17.42-.13.9.18 1.23l.05.06Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM6.33 20.03c-.25.72.12 1.5.8 1.84a10.96 10.96 0 0 0 9.73 0 1.52 1.52 0 0 0 .8-1.84 6 6 0 0 0-11.33 0Z", className: o })] }) } }, 898683: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StageLockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21.92 14.08c.32.27.86.15.93-.26A11 11 0 1 0 2.91 18.2c.34.5 1.05.51 1.46.07l.02-.02c.33-.36.34-.91.07-1.33a9 9 0 1 1 16.48-3.88c-.03.22.1.44.29.55.24.14.48.3.7.49Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13.48 16.18c.39.1.45.62.2.93A2.99 2.99 0 0 0 13 19v3.5c0 .26-.2.47-.46.49a11.16 11.16 0 0 1-5.4-1.12 1.52 1.52 0 0 1-.8-1.84 6 6 0 0 1 7.14-3.85ZM18.98 12.58c-.02.24-.23.42-.48.45-.18.02-.35.05-.53.09-.45.1-1-.36-.98-.82L17 12a5 5 0 1 0-9.6 1.94c.17.42.13.9-.18 1.23l-.05.06c-.43.47-1.18.42-1.45-.14a7 7 0 1 1 13.26-2.51Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M16.5 18H16a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1h-.5v-.5a2.5 2.5 0 0 0-5 0v.5Zm3.5 0v-.5a1 1 0 1 0-2 0v.5h2Z", clipRule: "evenodd", className: o })] }) } }, 894615: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StarIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M10.81 2.86c.38-1.15 2-1.15 2.38 0l1.89 5.83h6.12c1.2 0 1.71 1.54.73 2.25l-4.95 3.6 1.9 5.82a1.25 1.25 0 0 1-1.93 1.4L12 18.16l-4.95 3.6c-.98.7-2.3-.25-1.92-1.4l1.89-5.82-4.95-3.6a1.25 1.25 0 0 1 .73-2.25h6.12l1.9-5.83Z", className: o }) }) } }, 988683: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StarOutlineIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2.07 10.94a1.25 1.25 0 0 1 .73-2.25h6.12l1.9-5.83c.37-1.15 2-1.15 2.37 0l1.89 5.83h6.12c1.2 0 1.71 1.54.73 2.25l-4.95 3.6 1.9 5.82a1.25 1.25 0 0 1-1.93 1.4L12 18.16l-4.95 3.6c-.98.7-2.3-.25-1.92-1.4l1.89-5.82-4.95-3.6Zm11.55-.25h5.26l-4.25 3.09 1.62 5-4.25-3.1-4.25 3.1 1.62-5-4.25-3.1h5.26l1.62-5 1.62 5Z", clipRule: "evenodd", className: o }) }) } }, 647094: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StickerIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M6 2h12a4 4 0 0 1 4 4v7.5a.5.5 0 0 1-.5.5H19a5 5 0 0 0-5 5v2.5a.5.5 0 0 1-.5.5H6a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4Zm.5 8a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM19 8.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm-9.91 2.94a1 1 0 0 0-1.66 1.12 5.5 5.5 0 0 0 9.14 0 1 1 0 0 0-1.66-1.12 3.5 3.5 0 0 1-5.82 0Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21.66 16c.03 0 .05.03.04.06a3 3 0 0 1-.58.82l-4.24 4.24a3 3 0 0 1-.82.58.04.04 0 0 1-.06-.04V19a3 3 0 0 1 3-3h2.66Z", className: o })] }) } }, 692881: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StickerSadIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M6 2h12a4 4 0 0 1 4 4v7.5a.5.5 0 0 1-.5.5H19a5 5 0 0 0-5 5v2.5a.5.5 0 0 1-.5.5H6a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4Zm.5 8a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm11 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm-9.8 3.83a1 1 0 0 0 1.39-.27 3.5 3.5 0 0 1 5.82 0 1 1 0 0 0 1.66-1.12 5.5 5.5 0 0 0-9.14 0 1 1 0 0 0 .27 1.4Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M21.66 16c.03 0 .05.03.04.06a3 3 0 0 1-.58.82l-4.24 4.24a3 3 0 0 1-.82.58.04.04 0 0 1-.06-.04V19a3 3 0 0 1 3-3h2.66Z", className: o })] }) } }, 435807: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StickerSmallIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M7 3h10a4 4 0 0 1 4 4v6.5a.5.5 0 0 1-.5.5H19a5 5 0 0 0-5 5v1.5a.5.5 0 0 1-.5.5H7a4 4 0 0 1-4-4V7a4 4 0 0 1 4-4Zm-.5 7a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM19 8.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm-9.91 2.94a1 1 0 0 0-1.66 1.12 5.5 5.5 0 0 0 9.14 0 1 1 0 0 0-1.66-1.12 3.5 3.5 0 0 1-5.82 0Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M19 16h1.73a3 3 0 0 1-.6.88l-3.25 3.24a3 3 0 0 1-.88.61V19a3 3 0 0 1 3-3Z", className: o })] }) } }, 918123: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StrikethroughIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12.1 22.5c-1.8 0-3.3-.37-4.53-1.11A7.95 7.95 0 0 1 4.9 18.8a.46.46 0 0 1 .1-.6l1.38-1.16a.5.5 0 0 1 .73.12 7.44 7.44 0 0 0 1.92 2.04 5.8 5.8 0 0 0 3.22.81c1.36 0 2.42-.3 3.16-.9a3.13 3.13 0 0 0 1.14-2.6c0-1.02-.42-1.79-1.26-2.32a9.65 9.65 0 0 0-2.15-.94H2.5a.5.5 0 0 1-.5-.5v-1.5c0-.28.22-.5.5-.5h19c.28 0 .5.22.5.5v1.5a.5.5 0 0 1-.5.5h-3.16l.1.15c.57.76.86 1.75.86 2.96a5.6 5.6 0 0 1-1.93 4.5c-1.29 1.1-3.04 1.64-5.27 1.64ZM5.7 8.36c.09.39.45.64.85.64h2.1c.18 0 .28-.25.15-.4a2.46 2.46 0 0 1-.56-1.66c0-.96.36-1.69 1.08-2.2a4.94 4.94 0 0 1 2.93-.78c1.11 0 2.03.22 2.75.67.62.38 1.24 1 1.86 1.82.17.23.49.28.7.1l1.22-1.02a.46.46 0 0 0 .1-.6 7.76 7.76 0 0 0-6.63-3.43c-1.23 0-2.35.22-3.36.67a5.03 5.03 0 0 0-3.3 4.86c-.01.47.03.92.12 1.33Z", className: o }) }) } }, 892608: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SuperReactionIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fillRule: "evenodd", d: "M15.4 1.53A11 11 0 0 0 1.63 15.68c1.4-1.2 3.8-.81 4.54 1.18l.26.7.7.27c2 .73 2.4 3.14 1.19 4.54A11 11 0 0 0 22.47 8.6a2.93 2.93 0 0 1-5.21-.57l-.34-.93a.05.05 0 0 0-.03-.03l-.93-.34a2.93 2.93 0 0 1-.56-5.2ZM6.5 11a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm9 3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm-2.79.54c.27-.43.02-.95-.43-1.09l-4.06-1.23c-.45-.14-.94.15-.96.66a3.02 3.02 0 0 0 2.05 3.06c1.29.4 2.66-.21 3.4-1.4Z", clipRule: "evenodd", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { d: "M19.42 3.88c.24.22.48.46.7.7a4 4 0 0 0-.12.14c-.2-.27-.45-.51-.72-.72l.14-.12Z", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { d: "M19.09.63a.97.97 0 0 1 1.82 0l.34.93a2 2 0 0 0 1.19 1.19l.93.34a.97.97 0 0 1 0 1.82l-.93.34a2 2 0 0 0-1.19 1.19l-.34.93a.97.97 0 0 1-1.82 0l-.34-.93a2 2 0 0 0-1.19-1.19l-.93-.34a.97.97 0 0 1 0-1.82l.93-.34a2 2 0 0 0 1.19-1.19l.34-.93ZM2.7 17.55a.85.85 0 0 1 1.6 0l.26.71a2 2 0 0 0 1.18 1.18l.7.26a.85.85 0 0 1 0 1.6l-.7.26a2 2 0 0 0-1.18 1.18l-.26.7a.85.85 0 0 1-1.6 0l-.26-.7a2 2 0 0 0-1.18-1.18l-.7-.26a.85.85 0 0 1 0-1.6l.7-.26a2 2 0 0 0 1.18-1.18l.26-.7Z", fill: "string" == typeof a ? a : a.css, className: o })] }) } }, 219273: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TagIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M12.24 2a3 3 0 0 0-2.12.88l-8.25 8.25a3 3 0 0 0 0 4.24l6.76 6.76a3 3 0 0 0 4.24 0l8.25-8.25a3 3 0 0 0 .88-2.12V4a2 2 0 0 0-2-2h-7.76ZM17 9a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z", clipRule: "evenodd", className: o }) }) } }, 981755: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TextIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M10.99 3.16A1 1 0 1 0 9 2.84L8.15 8H4a1 1 0 0 0 0 2h3.82l-.67 4H3a1 1 0 1 0 0 2h3.82l-.8 4.84a1 1 0 0 0 1.97.32L8.85 16h4.97l-.8 4.84a1 1 0 0 0 1.97.32l.86-5.16H20a1 1 0 1 0 0-2h-3.82l.67-4H21a1 1 0 1 0 0-2h-3.82l.8-4.84a1 1 0 1 0-1.97-.32L15.15 8h-4.97l.8-4.84ZM14.15 14l.67-4H9.85l-.67 4h4.97Z", clipRule: "evenodd", className: o }) }) } }, 508069: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TextLockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M16 4h.5v-.5a2.5 2.5 0 0 1 5 0V4h.5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1Zm4-.5V4h-2v-.5a1 1 0 1 1 2 0Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12.5 8c.28 0 .5.22.5.5V9c0 .1 0 .2.02.31.03.34-.21.69-.56.69H9.85l-.67 4h4.97l.28-1.68c.06-.34.44-.52.77-.43a3 3 0 0 0 .8.11c.27 0 .47.24.43.5l-.25 1.5H20a1 1 0 1 1 0 2h-4.15l-.86 5.16a1 1 0 0 1-1.98-.32l.8-4.84H8.86l-.86 5.16A1 1 0 0 1 6 20.84L6.82 16H3a1 1 0 1 1 0-2h4.15l.67-4H4a1 1 0 1 1 0-2h4.15l.86-5.16a1 1 0 1 1 1.98.32L10.19 8h2.31Z", className: o })] }) } }, 882955: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TextWarningIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M18.09 1.63c.4-.7 1.43-.7 1.82 0l3.96 6.9c.38.66-.12 1.47-.91 1.47h-7.92c-.79 0-1.3-.81-.91-1.48l3.96-6.9Zm.46 1.87h.9c.3 0 .52.26.5.55l-.22 2.02c-.01.16-.17.26-.33.23a1.92 1.92 0 0 0-.8 0c-.16.03-.32-.07-.33-.23l-.21-2.02a.5.5 0 0 1 .5-.55ZM19 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M11.45 8c.35 0 .6.35.55.7-.02.2-.02.4 0 .6.04.35-.2.7-.55.7h-1.6l-.67 4h4.97l.26-1.55c.05-.27.31-.45.59-.45h.92c.31 0 .55.28.5.58L16.18 14H20a1 1 0 1 1 0 2h-4.15l-.86 5.16a1 1 0 0 1-1.98-.32l.8-4.84H8.86l-.86 5.16A1 1 0 0 1 6 20.84L6.82 16H3a1 1 0 1 1 0-2h4.15l.67-4H4a1 1 0 0 1 0-2h4.15l.86-5.16a1 1 0 1 1 1.98.32L10.19 8h1.26Z", className: o })] }) } }, 446578: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ThreadIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { d: "M12 2.81a1 1 0 0 1 0-1.41l.36-.36a1 1 0 0 1 1.41 0l9.2 9.2a1 1 0 0 1 0 1.4l-.7.7a1 1 0 0 1-1.3.13l-9.54-6.72a1 1 0 0 1-.08-1.58l1-1L12 2.8ZM12 21.2a1 1 0 0 1 0 1.41l-.35.35a1 1 0 0 1-1.41 0l-9.2-9.19a1 1 0 0 1 0-1.41l.7-.7a1 1 0 0 1 1.3-.12l9.54 6.72a1 1 0 0 1 .07 1.58l-1 1 .35.36ZM15.66 16.8a1 1 0 0 1-1.38.28l-8.49-5.66A1 1 0 1 1 6.9 9.76l8.49 5.65a1 1 0 0 1 .27 1.39ZM17.1 14.25a1 1 0 1 0 1.11-1.66L9.73 6.93a1 1 0 0 0-1.11 1.66l8.49 5.66Z", fill: "string" == typeof a ? a : a.css, className: o }) }) } }, 790472: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TicketIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M2.1 12a3 3 0 0 0 0 4.24l.46.46c.17.17.43.2.65.1a3 3 0 0 1 4 4c-.1.2-.08.47.08.64l.47.46a3 3 0 0 0 4.24 0l6.77-6.77a1 1 0 0 1 1.36-1.36L21.9 12a3 3 0 0 0 0-4.24l-.46-.47a.56.56 0 0 0-.65-.08 3 3 0 0 1-4-4 .56.56 0 0 0-.09-.65l-.46-.46a3 3 0 0 0-4.24 0l-1.77 1.77a1 1 0 0 1-1.36 1.36L2.1 12Zm10.01-6.3A1 1 0 1 0 10.7 7.1l.69.7a1 1 0 1 0 1.41-1.42l-.69-.7Zm2.75 2.75a1 1 0 1 0-1.41 1.41l.69.7a1 1 0 0 0 1.41-1.42l-.69-.7Zm2.75 2.75a1 1 0 0 0-1.41 1.41l.69.7a1 1 0 0 0 1.41-1.42l-.69-.7Z", clipRule: "evenodd", className: o }) }) } }, 23513: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TopicsIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M3.11 8H6v10.82c0 .86.37 1.68 1 2.27.46.43 1.02.71 1.63.84A1 1 0 0 0 9 22h10a4 4 0 0 0 4-4v-1a2 2 0 0 0-2-2h-1V5a3 3 0 0 0-3-3H4.67c-.87 0-1.7.32-2.34.9-.63.6-1 1.42-1 2.28 0 .71.3 1.35.52 1.75a5.35 5.35 0 0 0 .48.7l.01.01h.01L3.11 7l-.76.65a1 1 0 0 0 .76.35Zm1.56-4c-.38 0-.72.14-.97.37-.24.23-.37.52-.37.81a1.69 1.69 0 0 0 .3.82H6v-.83c0-.29-.13-.58-.37-.8C5.4 4.14 5.04 4 4.67 4Zm5 13a3.58 3.58 0 0 1 0 3H19a2 2 0 0 0 2-2v-1H9.66ZM3.86 6.35ZM11 8a1 1 0 1 0 0 2h5a1 1 0 1 0 0-2h-5Zm-1 5a1 1 0 0 1 1-1h5a1 1 0 1 1 0 2h-5a1 1 0 0 1-1-1Z", clipRule: "evenodd", className: o }) }) } }, 490236: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TrashIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M14.25 1c.41 0 .75.34.75.75V3h5.25c.41 0 .75.34.75.75v.5c0 .41-.34.75-.75.75H3.75A.75.75 0 0 1 3 4.25v-.5c0-.41.34-.75.75-.75H9V1.75c0-.41.34-.75.75-.75h4.5Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5.06 7a1 1 0 0 0-1 1.06l.76 12.13a3 3 0 0 0 3 2.81h8.36a3 3 0 0 0 3-2.81l.75-12.13a1 1 0 0 0-1-1.06H5.07ZM11 12a1 1 0 1 0-2 0v6a1 1 0 1 0 2 0v-6Zm3-1a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0v-6a1 1 0 0 1 1-1Z", clipRule: "evenodd", className: o })] }) } }, 964094: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TrophyIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M8 20a1 1 0 0 0-1 1v.5c0 .28.22.5.5.5h9a.5.5 0 0 0 .5-.5V21a1 1 0 0 0-1-1h-1a2 2 0 0 1-2-2v-.48c0-.95.7-1.73 1.5-2.23a5.7 5.7 0 0 0 1.23-1.08l2.3-.7A7 7 0 0 0 23 6.81V6a2 2 0 0 0-2-2h-2.24A2.85 2.85 0 0 0 16 2H8c-1.3 0-2.43.84-2.76 2H3a2 2 0 0 0-2 2v.82a7 7 0 0 0 4.96 6.7l2.31.7c.37.42.79.78 1.24 1.07.8.5 1.49 1.28 1.49 2.23V18a2 2 0 0 1-2 2H8Zm9.29-8.35.17-.05A5 5 0 0 0 21 6.82V6h-2.27a21.75 21.75 0 0 1-1.44 5.65Zm-10.58 0-.17-.05A5 5 0 0 1 3 6.82V6h2.27c.25 1.94.7 3.95 1.44 5.65Z", clipRule: "evenodd", className: o }) }) } }, 183249: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UnknownGameIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm6.81 7c-.54 0-1 .26-1.23.61A1 1 0 0 1 8.92 8.5 3.49 3.49 0 0 1 11.82 7c1.81 0 3.43 1.38 3.43 3.25 0 1.45-.98 2.61-2.27 3.06a1 1 0 0 1-1.96.37l-.19-1a1 1 0 0 1 .98-1.18c.87 0 1.44-.63 1.44-1.25S12.68 9 11.81 9ZM13 16a1 1 0 1 1-2 0 1 1 0 0 1 2 0Zm7-10.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0ZM18.5 20a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM7 18.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0ZM5.5 7a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z", clipRule: "evenodd", className: o }) }) } }, 653498: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UploadIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M13 16V5.41l3.3 3.3a1 1 0 1 0 1.4-1.42l-5-5a1 1 0 0 0-1.4 0l-5 5a1 1 0 0 0 1.4 1.42L11 5.4V16a1 1 0 1 0 2 0ZM3 20a1 1 0 1 0 0 2h18a1 1 0 1 0 0-2H3Z", className: o }) }) } }, 175609: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserCheckIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 10a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM11.53 11A9.53 9.53 0 0 0 2 20.53c0 .81.66 1.47 1.47 1.47h.22c.24 0 .44-.17.5-.4.29-1.12.84-2.17 1.32-2.91.14-.21.43-.1.4.15l-.26 2.61c-.02.3.2.55.5.55h6.4a.5.5 0 0 0 .35-.85l-.02-.03a3 3 0 1 1 4.24-4.24l.53.52c.2.2.5.2.7 0l1.8-1.8c.17-.17.2-.43.06-.62A9.52 9.52 0 0 0 12.47 11h-.94Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M23.7 17.7a1 1 0 1 0-1.4-1.4L18 20.58l-2.3-2.3a1 1 0 0 0-1.4 1.42l3 3a1 1 0 0 0 1.4 0l5-5Z", className: o })] }) } }, 440424: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserClockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M16 6a4 4 0 1 1-8 0 4 4 0 0 1 8 0ZM2 20.53A9.53 9.53 0 0 1 11.53 11h.94c1.28 0 2.5.25 3.61.7.41.18.36.77-.05.96a7 7 0 0 0-3.65 8.6c.11.36-.13.74-.5.74H6.15a.5.5 0 0 1-.5-.55l.27-2.6c.02-.26-.27-.37-.41-.16-.48.74-1.03 1.8-1.32 2.9a.53.53 0 0 1-.5.41h-.22C2.66 22 2 21.34 2 20.53Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M19 24a5 5 0 1 0 0-10 5 5 0 0 0 0 10Zm1-7a1 1 0 1 0-2 0v2c0 .27.1.52.3.7l1 1a1 1 0 0 0 1.4-1.4l-.7-.71V17Z", clipRule: "evenodd", className: o })] }) } }, 885668: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserPlayIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 10a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM11.53 11A9.53 9.53 0 0 0 2 20.53c0 .81.66 1.47 1.47 1.47h.22c.24 0 .44-.17.5-.4.29-1.12.84-2.17 1.32-2.91.14-.21.43-.1.4.15l-.26 2.61c-.02.3.2.55.5.55h5.73c.37 0 .61-.38.5-.73a7 7 0 0 1 3.65-8.61c.4-.2.46-.78.05-.95a9.5 9.5 0 0 0-3.61-.71h-.94Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M24 19a5 5 0 1 1-10 0 5 5 0 0 1 10 0Zm-2.77-.2-3.33-2.5a.25.25 0 0 0-.4.2v5c0 .2.24.32.4.2l3.33-2.5c.14-.1.14-.3 0-.4Z", clipRule: "evenodd", className: o })] }) } }, 968144: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserPlusIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { d: "M19 14a1 1 0 0 1 1 1v3h3a1 1 0 0 1 0 2h-3v3a1 1 0 0 1-2 0v-3h-3a1 1 0 1 1 0-2h3v-3a1 1 0 0 1 1-1Z", fill: "string" == typeof a ? a : a.css, className: o }), (0, i.jsx)("path", { d: "M16.83 12.93c.26-.27.26-.75-.08-.92A9.5 9.5 0 0 0 12.47 11h-.94A9.53 9.53 0 0 0 2 20.53c0 .81.66 1.47 1.47 1.47h.22c.24 0 .44-.17.5-.4.29-1.12.84-2.17 1.32-2.91.14-.21.43-.1.4.15l-.26 2.61c-.02.3.2.55.5.55h7.64c.12 0 .17-.31.06-.36C12.82 21.14 12 20.22 12 19a3 3 0 0 1 3-3h.5a.5.5 0 0 0 .5-.5V15c0-.8.31-1.53.83-2.07ZM12 10a4 4 0 1 0 0-8 4 4 0 0 0 0 8Z", fill: "string" == typeof a ? a : a.css, className: o })] }) } }, 286998: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserSquareIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V5a3 3 0 0 0-3-3H5Zm10 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm-9 9.83A5.83 5.83 0 0 1 11.83 12h.34A5.83 5.83 0 0 1 18 17.83c0 .65-.52 1.17-1.17 1.17h-.08a.52.52 0 0 1-.5-.4c-.22-.87-.54-1.69-.83-2.3-.1-.23-.42-.15-.42.1v2.1a.5.5 0 0 1-.5.5h-5a.5.5 0 0 1-.5-.5v-2.1c0-.25-.31-.33-.42-.1-.3.61-.61 1.43-.83 2.3a.52.52 0 0 1-.5.4h-.08C6.52 19 6 18.48 6 17.83Z", clipRule: "evenodd", className: o }) }) } }, 800595: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VideoIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M4 4a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h11a3 3 0 0 0 3-3v-2.12a1 1 0 0 0 .55.9l3 1.5a1 1 0 0 0 1.45-.9V7.62a1 1 0 0 0-1.45-.9l-3 1.5a1 1 0 0 0-.55.9V7a3 3 0 0 0-3-3H4Z", className: o }) }) } }, 274013: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VideoLockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M4 4a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h8.5a.5.5 0 0 0 .5-.5V19a3 3 0 0 1 1.46-2.58.6.6 0 0 0 .26-.32 4.5 4.5 0 0 1 6.96-2.22c.42.32 1.32.02 1.32-.5V7.62a1 1 0 0 0-1.45-.9l-3 1.5a1 1 0 0 0-.55.9V7a3 3 0 0 0-3-3H4Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M16 18h.5v-.5a2.5 2.5 0 0 1 5 0v.5h.5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1Zm4-.5v.5h-2v-.5a1 1 0 1 1 2 0Z", clipRule: "evenodd", className: o })] }) } }, 216481: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VoiceLockIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M16 4h.5v-.5a2.5 2.5 0 0 1 5 0V4h.5a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1Zm4-.5V4h-2v-.5a1 1 0 1 1 2 0Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M11 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1h-.06a1 1 0 0 1-.74-.32L5.92 17H3a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h2.92l4.28-4.68a1 1 0 0 1 .74-.32H11ZM20.5 12c-.28 0-.5.22-.52.5a7 7 0 0 1-5.13 6.25c-.48.13-.85.55-.85 1.05v.03c0 .6.52 1.06 1.1.92a9 9 0 0 0 6.89-8.25.48.48 0 0 0-.49-.5h-1ZM16.5 12c-.28 0-.5.23-.54.5a3 3 0 0 1-1.33 2.02c-.35.23-.63.6-.63 1.02v.14c0 .63.59 1.1 1.16.83a5 5 0 0 0 2.82-4.01c.02-.28-.2-.5-.48-.5h-1Z", className: o })] }) } }, 284179: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VoiceLowIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 3a1 1 0 0 0-1-1h-.06a1 1 0 0 0-.74.32L5.92 7H3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h2.92l4.28 4.68a1 1 0 0 0 .74.32H11a1 1 0 0 0 1-1V3ZM15.18 15.36c-.55.35-1.18-.12-1.18-.78v-.27c0-.36.2-.67.45-.93a2 2 0 0 0 0-2.76c-.24-.26-.45-.57-.45-.93v-.27c0-.66.63-1.13 1.18-.78a4 4 0 0 1 0 6.72Z", className: o }) }) } }, 25307: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VoiceNormalIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 3a1 1 0 0 0-1-1h-.06a1 1 0 0 0-.74.32L5.92 7H3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h2.92l4.28 4.68a1 1 0 0 0 .74.32H11a1 1 0 0 0 1-1V3ZM15.1 20.75c-.58.14-1.1-.33-1.1-.92v-.03c0-.5.37-.92.85-1.05a7 7 0 0 0 0-13.5A1.11 1.11 0 0 1 14 4.2v-.03c0-.6.52-1.06 1.1-.92a9 9 0 0 1 0 17.5Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15.16 16.51c-.57.28-1.16-.2-1.16-.83v-.14c0-.43.28-.8.63-1.02a3 3 0 0 0 0-5.04c-.35-.23-.63-.6-.63-1.02v-.14c0-.63.59-1.1 1.16-.83a5 5 0 0 1 0 9.02Z", className: o })] }) } }, 56411: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VoiceWarningIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, fillRule: "evenodd", d: "M18.09 1.63c.4-.7 1.43-.7 1.82 0l3.96 6.9c.38.66-.12 1.47-.91 1.47h-7.92c-.79 0-1.3-.81-.91-1.48l3.96-6.9Zm.46 1.87h.9c.3 0 .52.26.5.55l-.22 2.02c-.01.16-.17.26-.33.23a1.92 1.92 0 0 0-.8 0c-.16.03-.32-.07-.33-.23l-.21-2.02a.5.5 0 0 1 .5-.55ZM19 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z", clipRule: "evenodd", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M11 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1h-.06a1 1 0 0 1-.74-.32L5.92 17H3a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h2.92l4.28-4.68a1 1 0 0 1 .74-.32H11ZM20.5 12c-.28 0-.5.22-.52.5a7 7 0 0 1-5.13 6.25c-.48.13-.85.55-.85 1.05v.03c0 .6.52 1.06 1.1.92a9 9 0 0 0 6.89-8.25.48.48 0 0 0-.49-.5h-1ZM16.5 12c-.28 0-.5.23-.54.5a3 3 0 0 1-1.33 2.02c-.35.23-.63.6-.63 1.02v.14c0 .63.59 1.1 1.16.83a5 5 0 0 0 2.82-4.01c.02-.28-.2-.5-.48-.5h-1Z", className: o })] }) } }, 256713: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VoiceXIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsx)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M12 3a1 1 0 0 0-1-1h-.06a1 1 0 0 0-.74.32L5.92 7H3a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h2.92l4.28 4.68a1 1 0 0 0 .74.32H11a1 1 0 0 0 1-1V3ZM22.7 8.3a1 1 0 0 0-1.4 0L19 10.58l-2.3-2.3a1 1 0 1 0-1.4 1.42L17.58 12l-2.3 2.3a1 1 0 0 0 1.42 1.4L19 13.42l2.3 2.3a1 1 0 0 0 1.4-1.42L20.42 12l2.3-2.3a1 1 0 0 0 0-1.4Z", className: o }) }) } }, 944188: function(e, t, n) { "use strict"; n.r(t), n.d(t, { WindowLaunchIcon: function() { return a } }); var i = n("735250"); n("470079"); var r = n("692547"), s = n("331595"); let a = e => { let { width: t = 24, height: n = 24, color: a = r.default.colors.INTERACTIVE_NORMAL, colorClass: o = "", ...l } = e; return (0, i.jsxs)("svg", { ...(0, s.default)(l), xmlns: "http://www.w3.org/2000/svg", width: t, height: n, fill: "none", viewBox: "0 0 24 24", children: [(0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M15 2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0V4.41l-4.3 4.3a1 1 0 1 1-1.4-1.42L19.58 3H16a1 1 0 0 1-1-1Z", className: o }), (0, i.jsx)("path", { fill: "string" == typeof a ? a : a.css, d: "M5 2a3 3 0 0 0-3 3v14a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-6a1 1 0 1 0-2 0v6a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h6a1 1 0 1 0 0-2H5Z", className: o })] }) } }, 356351: function(e, t, n) { "use strict"; n.r(t), n("735250"), n("470079") }, 349361: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AdvancedScrollerAuto: function() { return o }, AdvancedScrollerNone: function() { return s }, AdvancedScrollerThin: function() { return a } }); var i = n("49402"), r = n("274641"); let s = (0, i.createAdvancedScroller)(r.none, r.fade, r.customTheme), a = (0, i.createAdvancedScroller)(r.thin, r.fade, r.customTheme), o = (0, i.createAdvancedScroller)(r.auto, r.fade, r.customTheme) }, 260305: function(e, t, n) { "use strict"; n.r(t), n.d(t, { PinToBottomScrollerAuto: function() { return u } }); var i, r = n("796075"), s = n("803997"), a = n.n(s), o = n("355336"), l = n("274641"); let u = (0, o.createManagedReactiveScroller)(a()(l.auto, l.disableScrollAnchor), null !== (i = window.ResizeObserver) && void 0 !== i ? i : r.ResizeObserver) }, 597312: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ScrollerAuto: function() { return a }, ScrollerNone: function() { return o }, ScrollerThin: function() { return s } }); var i = n("257705"), r = n("274641"); let s = (0, i.createScroller)(r.thin, r.fade), a = (0, i.createScroller)(r.auto, r.fade), o = (0, i.createScroller)(r.none, r.fade) }, 49402: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createAdvancedScroller: function() { return u } }); var i = n("735250"), r = n("470079"), s = n("803997"), a = n.n(s), o = n("789978"), l = n("780900"); function u(e, t, n) { let s = (0, l.getScrollbarSpecs)(e); return r.forwardRef(function(u, d) { let { children: _, className: c, dir: E = "ltr", orientation: I = "vertical", fade: T = !1, customTheme: f = !1, paddingFix: S = !0, style: h, ...A } = u, { scrollerRef: m, getScrollerState: N } = (0, l.useUncachedScrollerState)(), p = (0, l.useScrollSpring)(m, I); r.useImperativeHandle(d, () => ({ getScrollerNode: () => m.current, getScrollerState: N, ...(0, l.getAnimatedScrollHelpers)(m, N, p, I) }), [m, N, I, p]); let O = (0, l.usePaddingFixes)({ paddingFix: S, orientation: I, dir: E, className: c, scrollerRef: m, specs: s }); return (0, i.jsx)("div", { ref: m, className: a()(c, { [e]: !0, [t]: T, [n]: f }), style: (0, l.getMergedOrientationStyles)(h, I), dir: E, ...A, children: (0, i.jsxs)(o.FocusRingScope, { containerRef: m, children: [_, O] }) }) }) } }, 355336: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createManagedReactiveScroller: function() { return d } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("803997"), a = n.n(s), o = n("84735"), l = n("780900"), u = n("274641"); function d(e, t) { let n = new Map, s = new t(e => { e.forEach(e => { var t; let { target: i } = e; null === (t = n.get(i)) || void 0 === t || t(e) }) }); return r.forwardRef(function(t, d) { let { children: _, className: c, onResize: E, contentClassName: I, onScroll: T, dir: f = "ltr", fade: S = !1, customTheme: h = !1, style: A, ...m } = t, N = r.useRef(null), p = r.useRef(null), [O, C] = r.useState(!1), { scrollerRef: R, getScrollerState: g } = (0, l.useUncachedScrollerState)(), L = (0, l.useScrollSpring)(R); r.useImperativeHandle(d, () => ({ getScrollerNode: () => R.current, isScrolling: () => null != N.current, getScrollerState: g, ...(0, l.getAnimatedScrollHelpers)(R, g, L) }), [R, g, L]); let v = r.useCallback(e => { null == N.current ? C(!0) : clearTimeout(N.current), N.current = setTimeout(() => { N.current = null, C(!1) }, 200), null != T && T(e) }, [T]); return r.useEffect(() => () => clearTimeout(N.current), []), (0, l.useResizeObserverSubscription)({ ref: R, key: "container", onUpdate: E, resizeObserver: s, listenerMap: n }), (0, l.useResizeObserverSubscription)({ ref: p, key: "content", onUpdate: E, resizeObserver: s, listenerMap: n }), (0, i.jsx)("div", { ref: R, className: a()(c, { [u.fade]: S, [u.customTheme]: h, [e]: !0, [u.managedReactiveScroller]: !0, [u.scrolling]: O && S }), style: A, dir: f, onScroll: v, ...m, children: (0, i.jsx)(o.FocusRingScope, { containerRef: p, children: (0, i.jsxs)("div", { ref: p, className: a()(I, u.content), children: [_, O && (0, i.jsx)("div", { className: u.pointerCover })] }) }) }) }) } }, 257705: function(e, t, n) { "use strict"; n.r(t), n.d(t, { createScroller: function() { return u } }), n("411104"); var i = n("735250"), r = n("470079"), s = n("803997"), a = n.n(s), o = n("789978"), l = n("780900"); function u(e, t) { let n = (0, l.getScrollbarSpecs)(e); return r.forwardRef(function(s, u) { let { children: d, className: _, dir: c = "ltr", orientation: E = "vertical", paddingFix: I = !0, fade: T = !1, onScroll: f, style: S, ...h } = s, A = r.useRef(null), m = (0, l.usePaddingFixes)({ paddingFix: I, orientation: E, dir: c, className: _, scrollerRef: A, specs: n }); return (0, i.jsx)("div", { ref: e => { "function" == typeof u ? u(e) : null != u && (u.current = e), A.current = e }, className: a()(_, { [e]: !0, [t]: T }), style: (0, l.getMergedOrientationStyles)(S, E), dir: c, ...h, children: (0, i.jsxs)(o.FocusRingScope, { containerRef: A, children: [d, m] }) }) }) } }, 134158: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function r(e) { return "row" === e.type } n.r(t), n.d(t, { isListItemRow: function() { return r } }), n("653041"); t.default = class e { mergeProps(e) { let { sectionHeight: t, rowHeight: n, footerHeight: i, listHeaderHeight: r, paddingTop: s, paddingBottom: a, sections: o, getAnchorId: l } = e; this.sections = o, this.sectionHeight = t, this.rowHeight = n, this.footerHeight = i, this.listHeaderHeight = r, this.uniform = "number" == typeof n, this.paddingTop = s, this.paddingBottom = a, this.getAnchorId = null != l ? l : this.getAnchorId } getHeight() { let e = this.paddingTop + this.getListHeaderHeight(), { length: t } = this.sections; for (let n = 0; n < t; n++) { if (e += this.getHeightForSection(n), this.uniform) e += this.sections[n] * this.getHeightForRow(n, 0); else for (let t = 0; t < this.sections[n]; t++) e += this.getHeightForRow(n, t); e += this.getHeightForFooter(n) } return e + this.paddingBottom } getHeightForSection(e) { let { sectionHeight: t } = this; return "number" == typeof t ? t : t(e) } getHeightForRow(e, t) { let { rowHeight: n } = this; return "number" == typeof n ? n : n(e, t) } getHeightForFooter(e) { let { footerHeight: t } = this; return null == t ? 0 : "number" == typeof t ? t : t(e) } getListHeaderHeight() { let { listHeaderHeight: e } = this; return null == e ? 0 : "number" == typeof e ? e : e() } compute(e, t) { let n = this.paddingTop, i = n, r = n, s = 0, a = 0, o = [], l = s => (r = n, (n += s) < e) ? (i += s, !1) : !(r > t) && !0; l(this.getListHeaderHeight()) && o.push({ type: "header", section: -1, offsetTop: r }); for (let e = 0; e < this.sections.length; e++) { let t = this.sections[e]; if (0 !== t) { if (l(this.getHeightForSection(e)) && o.push({ type: "section", section: e, listIndex: a, offsetTop: r, anchorId: this.getAnchorId(e) }), a += 1, this.uniform) { let n = this.getHeightForRow(e, 0); for (let i = 0; i < t; i++) l(n) && o.push({ type: "row", section: e, listIndex: a, row: i, rowIndex: s, offsetTop: r, anchorId: this.getAnchorId(e, i) }), s += 1, a += 1 } else for (let n = 0; n < t; n++) l(this.getHeightForRow(e, n)) && o.push({ type: "row", section: e, listIndex: a, row: n, rowIndex: s, offsetTop: r, anchorId: this.getAnchorId(e, n) }), s += 1, a += 1; l(this.getHeightForFooter(e)) && o.push({ type: "footer", section: e, offsetTop: r }) } } return { spacerTop: i, totalHeight: n + this.paddingBottom, items: o } } computeScrollPosition(e, t) { let { paddingTop: n } = this, i = n + this.getListHeaderHeight(), r = 0, s = !1; for (; r <= e;) { let n = this.sections[r]; if (r === e && null == t) { s = !0; break } if (0 === n) { r += 1; continue } if (i += this.getHeightForSection(r), this.uniform) { let a = this.getHeightForRow(r, 0); r === e && null != t ? (i += a * t, s = !0) : i += a * n } else for (let a = 0; a < n; a++) if (r < e || r === e && null != t && a < t) i += this.getHeightForRow(r, a); else if (r === e && null != t && a === t) { s = !0; break }!s && (i += this.getHeightForFooter(r)), r += 1 } return [i, null != t ? this.getHeightForRow(e, t) : this.getHeightForSection(r)] } constructor() { i(this, "sectionHeight", 0), i(this, "rowHeight", 0), i(this, "footerHeight", 0), i(this, "listHeaderHeight", 0), i(this, "uniform", !1), i(this, "paddingBottom", 0), i(this, "paddingTop", 0), i(this, "sections", []), i(this, "getAnchorId", () => void 0) } } }, 920103: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return s } }), n("653041"); let r = 1 / 240; class s { to(e) { let { to: t, from: n, animate: i = !1, callback: r } = e; if (this.target = t, null != r && this.callbacks.push(r), null != n && (this.from = n), !i) { this.stop(t); return } return this.animating ? this : (this.start(), this) } cancel() { return this.stop(this.from), this } start() { var e, t; this.animating = !0, this.vel = 0, this.last = null, this.nodeWindow = this.getNodeWindow(), this.nextTick = null !== (t = null === (e = this.nodeWindow) || void 0 === e ? void 0 : e.requestAnimationFrame(this.update)) && void 0 !== t ? t : -1 } getUpdates(e, t) { let n = -this.tension * (t - this.target), i = (n + -this.friction * e) / this.mass; return Math.abs(e += i * r) > this.maxVelocity && (e = this.maxVelocity * (e > 0 ? 1 : -1)), { from: t += e * r, vel: e, accel: i } } stop(e) { var t; null === (t = this.nodeWindow) || void 0 === t || t.cancelAnimationFrame(this.nextTick), this.animating = !1, this.accumulator = 0, null != e && (this.target = this.from = e, this.callback(e, this.abort)), this.callbacks.length > 0 && (this.callbacks.forEach(e => e()), this.callbacks.length = 0) } constructor({ callback: e, tension: t = 160, friction: n = 22, mass: s = 1, threshold: a = .001, clamp: o = !1, maxVelocity: l = 1 / 0, getNodeWindow: u = () => window }) { i(this, "tension", void 0), i(this, "friction", void 0), i(this, "threshold", void 0), i(this, "mass", void 0), i(this, "maxVelocity", void 0), i(this, "clamp", void 0), i(this, "callback", void 0), i(this, "accumulator", 0), i(this, "from", 0), i(this, "target", 0), i(this, "vel", 0), i(this, "animating", !1), i(this, "last", null), i(this, "nextTick", -1), i(this, "getNodeWindow", void 0), i(this, "nodeWindow", null), i(this, "callbacks", []), i(this, "mergeTo", e => { let { to: t, callback: n } = e; !this.animating && (null != n && this.callbacks.push(n), this.stop(t)); let i = t - this.from; this.from = t, this.target = this.target + i, this.callback(this.from, this.abort), null != n && n() }), i(this, "abort", () => { this.animating = !1 }), i(this, "update", e => { var t, n, i, s; if (null == this.last) { this.last = e, this.nextTick = null !== (n = null === (t = this.nodeWindow) || void 0 === t ? void 0 : t.requestAnimationFrame(this.update)) && void 0 !== n ? n : -1; return } for (this.accumulator = Math.min((e - this.last) / 1e3 + this.accumulator, 2); this.accumulator > r;) { this.accumulator -= r; let { vel: e, from: t, accel: n } = this.getUpdates(this.vel, this.from); if (this.vel = e, this.clamp && (t === this.target || t < this.target && this.from > this.target || t > this.target && this.from < this.target) || Math.abs(n * r) < this.threshold) { this.stop(this.target); return } this.from = t } let { from: a } = this; if (this.accumulator > 0) { let { from: e } = this.getUpdates(this.vel, a), t = this.accumulator / r * (e - a); a += t } this.callback(a, this.abort), this.animating && (this.last = e, this.nextTick = null !== (s = null === (i = this.nodeWindow) || void 0 === i ? void 0 : i.requestAnimationFrame(this.update)) && void 0 !== s ? s : -1) }), this.callback = e, this.from = 0, this.tension = t, this.friction = n, this.mass = s, this.maxVelocity = l, this.threshold = a, this.clamp = o, this.getNodeWindow = u } } }, 663507: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return l }, getMasonryListSectionHeaderKey: function() { return s }, getMasonryListSectionIndex: function() { return a } }), n("757143"), n("724458"), n("47120"), n("653041"), n("733860"), n("411104"); let r = e => "__section__".concat(e), s = e => "__section_header__".concat(e), a = e => parseInt(e.replace(/^__section__/, ""), 10), o = () => 0; class l { getPadding() { return null != this.padding ? this.padding : this.itemGutter } getPaddingVertical() { return null != this.paddingVertical ? this.paddingVertical : this.getPadding() } getPaddingHorizontal() { return null != this.paddingHorizontal ? this.paddingHorizontal : this.getPadding() } getSectionGutter() { return null != this.sectionGutter ? this.sectionGutter : this.itemGutter } mergeProps(e) { let { sections: t = this.sections, columns: n = this.columns, itemGutter: i = this.itemGutter, removeEdgeItemGutters: r = this.removeEdgeItemGutters, getItemKey: s = this.getItemKey, getItemHeight: a = this.getItemHeight, getSectionHeight: o = this.getSectionHeight, bufferWidth: l = this.bufferWidth, padding: u = this.padding, paddingVertical: d = this.paddingVertical, paddingHorizontal: _ = this.paddingHorizontal, sectionGutter: c = this.sectionGutter, dir: E = this.dir } = e; (this.sections !== t || this.columns !== n || this.itemGutter !== i || this.removeEdgeItemGutters !== r || this.getItemKey !== s || this.getSectionHeight !== o || this.getItemHeight !== a || this.bufferWidth !== l || this.padding !== u || this.paddingVertical !== d || this.paddingHorizontal !== _ || this.sectionGutter !== c || this.dir !== E) && (this.needsFullCompute = !0, this.sections = t, this.columns = n, this.itemGutter = i, this.getItemKey = s, this.getSectionHeight = o, this.getItemHeight = a, this.bufferWidth = l, this.padding = u, this.paddingVertical = d, this.paddingHorizontal = _, this.sectionGutter = c, this.dir = E) } computeFullCoords() { if (!this.needsFullCompute) return; let { columns: e, getItemKey: t, getItemHeight: n, itemGutter: i, getSectionHeight: a, bufferWidth: o, removeEdgeItemGutters: l } = this, u = "rtl" === this.dir ? "right" : "left"; this.coordsMap = {}, this.gridData = { boundaries: [], coordinates: {} }, this.currentRow = 0, this.lastColumnIndex = 0; let d = this.getPaddingHorizontal(), _ = this.getPaddingVertical(); this.columnHeights = Array(e).fill(_), this.columnWidth = (o - 2 * d - i * (e - 1) - (l ? i : 0)) / e, this.itemGrid = []; let c = 0; for (; c < this.sections.length;) { this.gridData.boundaries[c] = this.currentRow, this.currentRow = 0, this.lastColumnIndex = 0; let o = this.sections[c], l = 0, _ = a(c), T = this.getMaxColumnHeight(this.columnHeights); c > 0 && (T = T - i + this.getSectionGutter()); let f = _ > 0 ? _ + i : 0; for (let e = 0; e < this.columnHeights.length; e++) this.columnHeights[e] = T + f; for (; l < o;) { var E, I; let e = t(c, l); if (null == e) { l++; continue } let [r, s] = (I = this.columnHeights).reduce((e, t, n) => t < e[0] ? [t, n] : e, [I[0], 0]); s < this.lastColumnIndex && this.currentRow++, this.lastColumnIndex = s; let a = n(c, l, this.columnWidth), o = { position: "absolute", [u]: this.columnWidth * s + i * (s + 1) - i, width: this.columnWidth, top: r - T, height: a }, d = { section: c, row: this.currentRow, column: s }; this.coordsMap[e] = o, this.gridData.coordinates[e] = d, this.columnHeights[s] = r + a + i, this.itemGrid[s] = null !== (E = this.itemGrid[s]) && void 0 !== E ? E : [], this.itemGrid[s].push(e), l++ } _ > 0 && (this.coordsMap[s(c)] = { position: "sticky", [u]: 0, width: this.columnWidth * e + i * e, top: 0, height: _ }), this.coordsMap[r(c)] = { position: "absolute", [u]: d, width: this.columnWidth * e + i * (e - 1), top: T, height: this.getMaxColumnHeight(this.columnHeights) - T - i }, c++ } this.columnHeights = this.columnHeights.map(e => e - i + _), this.totalHeight = this.getMaxColumnHeight(), this.visibleSections = {}, this.needsFullCompute = !1 } computeVisibleSections(e, t) { this.computeFullCoords(); let { getItemKey: n, coordsMap: i } = this; this.visibleSections = {}; let s = 0; for (; s < this.sections.length;) { let a = this.sections[s], o = r(s), l = i[o]; if (null == l) { s++; continue } let { top: u } = l, d = u + l.height; if (u > t) break; if (d < e) { s++; continue } let _ = 0, c = 1; for (d < t && d > e && (_ = a - 1, c = -1), this.visibleSections[o] = []; _ >= 0 && _ < a;) { let r = n(s, _), a = null != r ? i[r] : null; if (null == r || null == a) { _ += c; continue } let { top: l, height: d } = a; l + u > e - d && l + u < t && (-1 === c ? this.visibleSections[o].unshift([r, s, _]) : this.visibleSections[o].push([r, s, _])), _ += c } if (u < e && d > t) break; s++ } } getMaxColumnHeight() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.columnHeights; return e.reduce((e, t) => Math.max(e, t), 0) } getState() { return { coordsMap: this.coordsMap, gridData: this.gridData, visibleSections: this.visibleSections, totalHeight: this.totalHeight } } constructor() { i(this, "visibleSections", {}), i(this, "gridData", { coordinates: {}, boundaries: [] }), i(this, "coordsMap", {}), i(this, "columnHeights", []), i(this, "columnWidth", 0), i(this, "totalHeight", 0), i(this, "itemGrid", []), i(this, "currentRow", 0), i(this, "lastColumnIndex", 0), i(this, "needsFullCompute", !0), i(this, "bufferWidth", 0), i(this, "sections", []), i(this, "columns", 0), i(this, "itemGutter", 0), i(this, "removeEdgeItemGutters", !1), i(this, "sectionGutter", null), i(this, "padding", null), i(this, "paddingVertical", null), i(this, "paddingHorizontal", null), i(this, "dir", "ltr"), i(this, "getItemKey", () => { throw Error("MasonryListComputer: getItemKey has not been implemented") }), i(this, "getItemHeight", () => { throw Error("MasonryListComputer: getItemHeight has not been implemented") }), i(this, "getSectionHeight", o) } } }, 624075: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("47120"); var i = n("191532"); function r(e, t, n, r) { let s = (0, i.default)(e, t, r), a = (e, t) => n.computeScrollPosition(e, t); return { ...s, getScrollPosition: a, isItemVisible(e, n) { let i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], [r, s] = a(e, n), o = t(); return i ? r >= o.scrollTop && r + s <= o.scrollTop + o.offsetHeight : r + s >= o.scrollTop && r <= o.scrollTop + o.offsetHeight }, scrollToIndex(e) { let { section: t, row: n, animate: i, callback: r, padding: o = 0 } = e, [l, u] = a(t, n); s.scrollIntoViewRect({ start: l, end: l + u, padding: o, animate: i, callback: r }) } } } }, 191532: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("374470"); function r(e, t) { if ("horizontal" === t) { let { scrollLeft: t, scrollWidth: n, offsetWidth: i } = e; return { scrollPosition: t, scrollSize: n, offsetSize: i } } let { scrollTop: n, scrollHeight: i, offsetHeight: r } = e; return { scrollPosition: n, scrollSize: i, offsetSize: r } } function s(e, t, n) { let s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "vertical", a = e => { let { to: i, animate: a, callback: o } = e, { scrollPosition: l, scrollSize: u, offsetSize: d } = r(t(), s); n.to({ to: function(e, t, n) { let i = t - n + 1; return e >= i - 1 ? i : Math.max(0, e) }(i, u, d), from: l, animate: a, callback: o }) }, o = e => { let { start: n, end: i, padding: o = 0, animate: l, callback: u } = e, { scrollPosition: d, offsetSize: _ } = r(t(), s); n -= o, i += o, n >= d && i <= d + _ ? null != u && u() : n < d ? a({ to: n, animate: l, callback: u }) : a({ to: i - _, animate: l, callback: u }) }; return { spring: n, scrollTo: a, mergeTo: n.mergeTo, scrollIntoViewRect: o, scrollIntoViewNode(t) { let { node: n, padding: r = 0, animate: a = !1, callback: l } = t, { current: u } = e; if (null == u) return; let { offset: d, offsetSize: _ } = function(e, t, n) { let r = "horizontal" === t ? e.offsetWidth : e.offsetHeight, s = "horizontal" === t ? e.offsetLeft : e.offsetTop, a = e.offsetParent; for (; null != a && a !== n;)(0, i.isElement)(a, HTMLElement) ? (s += "horizontal" === t ? a.offsetLeft : a.offsetTop, a = a.offsetParent) : a = a.parentNode; return { offset: s, offsetSize: r } }(n, s, u); o({ start: d, end: d + _, padding: r, animate: a, callback: l }) }, scrollPageUp() { let { animate: e = !1, callback: n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, { scrollPosition: i, offsetSize: o } = r(t(), s); a({ to: i - .9 * o, animate: e, callback: n }) }, scrollPageDown() { let { animate: e = !1, callback: n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, { scrollPosition: i, offsetSize: o } = r(t(), s); a({ to: i + .9 * o, animate: e, callback: n }) }, scrollToTop() { let { animate: e = !1, callback: t } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; a({ to: 0, animate: e, callback: t }) }, scrollToBottom() { let { animate: e = !1, callback: t } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; a({ to: Number.MAX_SAFE_INTEGER, animate: e, callback: t }) }, isScrolledToTop: () => 0 === r(t(), s).scrollPosition, isScrolledToBottom() { let { scrollPosition: e, scrollSize: n, offsetSize: i } = r(t(), s); return e >= n - i } } } }, 321897: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); let i = Object.freeze({ overflowY: "scroll", overflowX: "hidden" }), r = Object.freeze({ overflowX: "scroll", overflowY: "hidden" }), s = Object.freeze({ overflow: "auto" }); function a(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "vertical", n = "vertical" === t ? i : "horizontal" === t ? r : s; return null != e ? { ...n, ...e } : n } }, 232096: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); let i = [ ["position", "absolute"], ["top", "-100px"], ["left", "-100px"], ["width", "100px"], ["height", "100px"], ["overflow", "scroll"] ], r = [ ["width", "200px"], ["height", "200px"] ]; function s() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", t = document.createElement("div"), n = document.createElement("div"); for (let [e, n] of i) t.style[e] = n; for (let [e, t] of r) n.style[e] = t; t.appendChild(n), document.body.appendChild(t), t.className = e; let s = { width: t.offsetWidth - t.clientWidth, height: t.offsetHeight - t.clientHeight }; return document.body.removeChild(t), s } }, 780900: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ListComputer: function() { return _.default }, MasonryListComputer: function() { return c.default }, getAnimatedListScrollHelpers: function() { return r.default }, getAnimatedScrollHelpers: function() { return i.default }, getMasonryListSectionHeaderKey: function() { return c.getMasonryListSectionHeaderKey }, getMasonryListSectionIndex: function() { return c.getMasonryListSectionIndex }, getMergedOrientationStyles: function() { return E.default }, getScrollbarSpecs: function() { return T.default }, isListItemRow: function() { return _.isListItemRow }, useCachedScrollerState: function() { return s.default }, usePaddingFixes: function() { return a.default }, useResizeObserverSubscription: function() { return o.default }, useScrollSpring: function() { return I.default }, useUncachedScrollerState: function() { return l.default }, useVirtualizedAnchor: function() { return d.useVirtualizedAnchor }, useVirtualizedMasonryState: function() { return u.default }, useVirtualizedState: function() { return d.default } }); var i = n("191532"), r = n("624075"), s = n("452828"); n("924428"); var a = n("987357"), o = n("382731"); n("151973"); var l = n("502295"), u = n("95594"), d = n("753143"), _ = n("134158"), c = n("663507"); n("920103"); var E = n("321897"), I = n("803998"), T = n("232096") }, 452828: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("470079"); let r = Object.freeze({ scrollTop: 0, scrollLeft: 0, scrollHeight: 0, scrollWidth: 0, offsetHeight: 0, offsetWidth: 0, dirty: 2 }); function s() { let e = (0, i.useRef)(null), t = (0, i.useRef)(r), n = (0, i.useCallback)(() => { let { current: n } = e, { dirty: i } = t.current; if (null == n || 0 === i) return t.current; if (1 === i) { let { scrollTop: e, scrollLeft: i } = n; t.current = { ...t.current, scrollTop: e, scrollLeft: i, dirty: 0 } } else { let { scrollTop: e, scrollLeft: i, scrollHeight: r, scrollWidth: s, offsetHeight: a, offsetWidth: o } = n; t.current = { scrollTop: e, scrollLeft: i, scrollHeight: r, scrollWidth: s, offsetHeight: a, offsetWidth: o, dirty: 0 } } return t.current }, []); return { scrollerRef: e, scrollerState: t, getScrollerState: n } } }, 924428: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("470079"), r = n("699581"); function s() { let [, e] = (0, i.useState)(0); return (0, i.useCallback)(() => (0, r.flushSync)(() => e(e => e + 1)), []) } }, 987357: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"), r = n("470079"); function s(e) { let { paddingFix: t = !0, orientation: n = "vertical", dir: s, className: a, scrollerRef: o, specs: l } = e, u = (0, r.useRef)(null); return (0, r.useLayoutEffect)(() => { var e; let { current: i } = o; if (null == i || "auto" === n || !t) return; let r = null === (e = i.ownerDocument) || void 0 === e ? void 0 : e.defaultView; if (null == r) return; i.style.paddingTop = "", i.style.paddingBottom = "", i.style.paddingLeft = "", i.style.paddingRight = ""; let a = r.getComputedStyle(i); if ("vertical" === n) { if ("rtl" === s) { let e = parseInt(a.getPropertyValue("padding-left"), 10); i.style.paddingLeft = "".concat(Math.max(0, e - l.width), "px"), i.style.paddingRight = "" } else { let e = parseInt(a.getPropertyValue("padding-right"), 10); i.style.paddingRight = "".concat(Math.max(0, e - l.width), "px"), i.style.paddingLeft = "" } let { current: e } = u; null != e && (e.style.height = a.getPropertyValue("padding-bottom")) } else { let e = parseInt(a.getPropertyValue("padding-bottom"), 10); i.style.paddingBottom = "".concat(Math.max(0, e - l.height), "px"); let { current: t } = u; null != t && (t.style.width = a.getPropertyValue("padding-left")) } }, [n, s, a, o, t, l]), (0, r.useMemo)(() => { var e; return "auto" !== n ? (0, i.jsx)("div", { "aria-hidden": !0, style: { position: "vertical" === (e = n) ? "absolute" : "relative", pointerEvents: "none", minHeight: "vertical" === e ? 0 : 1, minWidth: "horizontal" === e ? 0 : 1, flex: "0 0 auto" }, ref: u }) : null }, [n]) } }, 382731: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }); var i = n("470079"), r = n("699581"); let s = Object.freeze({ box: "border-box" }); function a(e) { let { ref: t, onUpdate: n, resizeObserver: a, listenerMap: o, key: l } = e; (0, i.useLayoutEffect)(() => { let { current: e } = t; return null != e && (o.set(e, e => { (0, r.flushSync)(() => { n(e, l) }) }), a.observe(e, s)), () => { null != e && (a.unobserve(e), o.delete(e)) } }, [n, a, t, o, l]) } }, 151973: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("47120"); var i = n("470079"); function r(e, t, n) { return [Math.floor(e / n) - 1, Math.ceil((e + t) / n) + 1] } let s = [0, 0]; function a(e) { let { chunkSize: t, getScrollerState: n, forceUpdate: a } = e, { dirty: o, scrollTop: l, offsetHeight: u } = n(); (0, i.useLayoutEffect)(() => { o > 0 && a() }, [o, a]); let d = (0, i.useRef)(s); d.current = r(l, u, t); let [_, c] = d.current; return { forceUpdateOnChunkChange: (0, i.useCallback)(e => { let { dirty: i, scrollTop: s, offsetHeight: o } = n(); if (i > 0) return; let [l, u] = r(s, o, t); l !== d.current[0] ? a() : 2 === e && u !== d.current[1] && a() }, [a, t, n]), chunkStart: _, chunkEnd: c, dirty: o } } }, 803998: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"); var i = n("470079"), r = n("920103"); function s(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "vertical", [n] = (0, i.useState)(() => new r.default({ tension: 200, friction: 35, mass: 2, clamp: !0, callback: (n, i) => { let { current: r } = e; if (null == r) return i(); "horizontal" === t ? r.scrollLeft = n : r.scrollTop = n }, getNodeWindow: () => { var t, n, i; return null !== (i = null === (n = e.current) || void 0 === n ? void 0 : null === (t = n.ownerDocument) || void 0 === t ? void 0 : t.defaultView) && void 0 !== i ? i : null } })); return n } }, 502295: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("470079"); let r = Object.freeze({ scrollTop: 0, scrollLeft: 0, scrollHeight: 0, scrollWidth: 0, offsetHeight: 0, offsetWidth: 0, dirty: 0 }); function s() { let e = (0, i.useRef)(null), t = (0, i.useCallback)(() => { let { current: t } = e; if (null != t) { let { scrollTop: e, scrollLeft: n, scrollHeight: i, scrollWidth: r, offsetHeight: s, offsetWidth: a } = t; return { scrollTop: e, scrollLeft: n, scrollHeight: i, scrollWidth: r, offsetHeight: s, offsetWidth: a, dirty: 0 } } return r }, []); return { scrollerRef: e, getScrollerState: t } } }, 95594: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i = n("470079"), r = n("663507"), s = n("924428"), a = n("151973"); let o = Object.freeze({ coordsMap: {}, visibleSections: {}, totalHeight: 0, gridData: { boundaries: [], coordinates: {} } }); function l(e) { let { sections: t, columns: n, getItemKey: l, getItemHeight: u, getSectionHeight: d, chunkSize: _ = 250, getScrollerState: c, itemGutter: E, removeEdgeItemGutters: I, sectionGutter: T, padding: f, paddingVertical: S, paddingHorizontal: h, dir: A } = e, m = (0, s.default)(), N = (0, i.useRef)(o), [p] = (0, i.useState)(() => new r.default), { offsetWidth: O } = c(), { dirty: C, chunkStart: R, chunkEnd: g, forceUpdateOnChunkChange: L } = (0, a.default)({ chunkSize: _, getScrollerState: c, forceUpdate: m }); return N.current = (0, i.useMemo)(() => C > 0 ? N.current : (p.mergeProps({ sections: t, columns: n, getItemKey: l, getItemHeight: u, getSectionHeight: d, bufferWidth: O, itemGutter: E, removeEdgeItemGutters: I, sectionGutter: T, padding: f, paddingVertical: S, paddingHorizontal: h, dir: A }), p.computeVisibleSections(Math.max(0, R * _), g * _), p.getState()), [C, p, t, n, l, u, d, R, g, _, E, I, T, f, S, h, O, A]), { ...N.current, masonryComputer: p, forceUpdateOnChunkChange: L, forceUpdate: m } } }, 753143: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l }, useVirtualizedAnchor: function() { return u } }), n("411104"), n("47120"); var i = n("470079"), r = n("134158"), s = n("924428"), a = n("151973"); let o = Object.freeze({ spacerTop: 0, totalHeight: 0, items: [], isSidebarVisible: !1 }); function l(e) { let { sections: t, sectionHeight: n, rowHeight: l, footerHeight: u, sidebarHeight: d, listHeaderHeight: _, chunkSize: c = 256, paddingTop: E = 0, paddingBottom: I = 0, getScrollerState: T, getAnchorId: f } = e, S = (0, s.default)(), h = (0, i.useRef)(o), [A] = (0, i.useState)(() => new r.default), { dirty: m, chunkStart: N, chunkEnd: p, forceUpdateOnChunkChange: O } = (0, a.default)({ chunkSize: c, getScrollerState: T, forceUpdate: S }), { items: C } = h.current, R = null, { scrollTop: g } = T(); for (let e of C) { if (0 === g) break; if ("footer" === e.type || "header" === e.type || null == e.anchorId) continue; let t = "row" === e.type ? e.row : void 0; if (e.offsetTop >= g) { R = { id: e.anchorId, section: e.section, row: t, scrollOffset: e.offsetTop - g }; break } } let L = (0, i.useMemo)(() => { let e = Math.max(0, N * c); return null != d && e < d }, [c, N, d]), v = (0, i.useMemo)(() => m > 0 ? h.current : (A.mergeProps({ sectionHeight: n, rowHeight: l, footerHeight: u, listHeaderHeight: _, paddingBottom: I, paddingTop: E, sections: t, getAnchorId: f }), A.compute(Math.max(0, N * c), p * c)), [m, N, p, n, l, u, _, I, E, t, A, c, f]); return (0, i.useLayoutEffect)(() => void(h.current = v)), { ...v, listComputer: A, forceUpdateOnChunkChange: O, anchor: R, isSidebarVisible: L } } function u(e) { let { scrollerRef: t, anchor: n, getScrollerState: r, listComputer: s, getAnchorId: a, totalHeight: o } = e; (0, i.useLayoutEffect)(() => { let { current: e } = t, { scrollTop: i } = r(); if (null == n || null == n.row || null == e || null == a || 0 === i) return; let o = t => { if (t < 0 || t >= s.sections[n.section] || a(n.section, n.row) !== n.id) return !1; let [r] = s.computeScrollPosition(n.section, t), o = r - n.scrollOffset; return i !== o && (e.scrollTop = o), !0 }; if (!o(n.row)) !o(n.row - 1) && o(n.row + 1) }, [o]) } }, 777207: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Text: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("803997"), a = n.n(s), o = n("696689"), l = n.n(o), u = n("692547"), d = n("701717"), _ = n("24073"); let c = Object.fromEntries(Object.keys(u.default.colors).map(e => [l()(e), e])), E = r.forwardRef(function(e, t) { let n, { variant: r, tag: s = "div", selectable: o = !1, className: l, lineClamp: E, color: I, tabularNumbers: T = !1, scaleFontToUserSetting: f = !1, ...S } = e, h = "", A = {}; if (null != E && (1 === E ? h = d.lineClamp1 : (h = d.lineClamp2Plus, A = { lineClamp: E, WebkitLineClamp: E })), void 0 !== I) switch (I) { case "currentColor": n = "currentColor"; break; case "none": n = void 0; break; case "always-white": n = "white"; break; default: var m; n = null === (m = u.default.colors[c[I]]) || void 0 === m ? void 0 : m.css } let N = { color: n, ...A, ...S.style }; return (0, i.jsx)(s, { ref: t, className: a()({ [d.defaultColor]: void 0 === I, [d.selectable]: o, [d.tabularNumbers]: T, [_.fontScaling]: f }, h, _[r], l), ...S, style: Object.values(N).filter(Boolean).length > 0 ? N : void 0, "data-text-variant": r }) }) }, 793030: function(e, t, n) { "use strict"; n.r(t); var i = n("777207"); n.es(i, t); var r = n("356351"); n.es(r, t) }, 268146: function(e, t, n) { "use strict"; var i, r, s, a, o, l; n.r(t), n.d(t, { DesktopSources: function() { return s }, JSExceptionLocation: function() { return r }, StoredCrashInformation: function() { return i } }), (a = i || (i = {}))[a.HasRTCConnection = 0] = "HasRTCConnection", a[a.IsSendingVideo = 1] = "IsSendingVideo", a[a.IsSendingStream = 2] = "IsSendingStream", a[a.IsReceivingVideo = 3] = "IsReceivingVideo", a[a.IsReceivingStream = 4] = "IsReceivingStream", a[a.VideoMediaSessionId = 5] = "VideoMediaSessionId", a[a.StreamMediaSessionId = 6] = "StreamMediaSessionId", (o = r || (r = {}))[o.RendererProcessDelayed = 0] = "RendererProcessDelayed", o[o.RendererProcess = 1] = "RendererProcess", o[o.MainProcess = 2] = "MainProcess", (l = s || (s = {})).WINDOW = "window", l.SCREEN = "screen", l.CAMERA = "camera" }, 39612: function(e, t, n) { "use strict"; function i(e) { return "".concat(location.protocol, "//").concat(window.GLOBAL_ENV.INVITE_HOST, "/").concat(e) } function r(e) { return "".concat(location.protocol, "//").concat(window.GLOBAL_ENV.GUILD_TEMPLATE_HOST, "/").concat(e) } function s() { return "".concat(location.protocol, "//").concat(window.GLOBAL_ENV.WEBAPP_ENDPOINT, "/channels/@me") } n.r(t), n.d(t, { getDefaultDynamicLinkTemplate: function() { return s }, getGuildTemplateDynamicLinkTemplate: function() { return r }, getInviteDynamicLinkTemplate: function() { return i } }) }, 271579: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d }, generateAttemptId: function() { return l }, parseDynamicLink: function() { return u } }), n("315314"), n("610138"), n("216116"), n("78328"), n("815648"), n("47120"); var i = n("264344"), r = n.n(i), s = n("153832"), a = n("511266"); let o = "https://discordapp.page.link"; function l() { return (0, s.v4)() } function u(e) { if (!e.startsWith(o)) return null; try { var t; let n = new URL(e).searchParams, i = n.get("link"); if (null == i) return null; let r = decodeURIComponent(i), s = new URL(r).searchParams, a = { utmSource: null !== (t = n.get("utm_source")) && void 0 !== t ? t : void 0 }; for (let [e, t] of s.entries()) a[e] = t; return a } catch { return null } } function d(e, t) { let { utmSource: n, androidFallbackLink: i, iosFallbackLink: s, ...l } = t, u = new URL(e); for (let e in l) { let t = l[e]; null != t && u.searchParams.set(e, t) } let d = encodeURIComponent(u.toString()), _ = encodeURIComponent((0, a.default)()), c = ! function() { var e, t; let n = RegExp("(".concat("WebView|(iPhone|iPod|iPad)(?!.*Safari/)", ")"), "ig"), i = (null === r() || void 0 === r() ? void 0 : null === (e = r().ua) || void 0 === e ? void 0 : e.match(n)) != null, s = (null === r() || void 0 === r() ? void 0 : r().name) === "Safari" && !i; return (null === r() || void 0 === r() ? void 0 : null === (t = r().os) || void 0 === t ? void 0 : t.family) !== "iOS" || s }() ? 0 : 1, E = null != i ? encodeURIComponent(i) : null, I = null != s ? encodeURIComponent(s) : null, T = "".concat(o, "/?link=").concat(d, "&utm_source=").concat(n, "&apn=").concat("com.discord", "&isi=").concat(985746746, "&ibi=").concat("com.hammerandchisel.discord", "&sd=").concat(_, "&efr=").concat(c); return null != E && (T += "&afl=".concat(E)), null != I && (T += "&ifl=".concat(I)), T } }, 511266: function(e, t, n) { "use strict"; n.r(t); let i = () => ""; i = n("704817").default, t.default = i }, 704817: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }); var i = n("330711"); function r() { return i.default.Messages.DynamicLinks.IOS_APP_PREVIEW_DESCRIPTION } }, 756647: function(e, t, n) { "use strict"; function i(e) { return e.split(".")[0] } function r(e) { return null == e ? null : i(e) } n.r(t), n.d(t, { extractId: function() { return i }, maybeExtractId: function() { return r } }) }, 250919: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BatchedStoreListener: function() { return s } }), n("411104"); var i = n("153102"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { attach(e) { let { stores: t } = this; t.forEach((t, n) => { if (null == t) throw Error("".concat(e, " tried to load a non-existent store. Either it isn't defined or there is a circular dependency. Loaded ").concat(n, " stores before error.")); t.addReactChangeListener(this.handleStoreChange) }) } detach() { let { stores: e } = this; e.forEach(e => e.removeReactChangeListener(this.handleStoreChange)) } constructor(e, t) { r(this, "stores", void 0), r(this, "changeCallback", void 0), r(this, "storeVersionHandled", void 0), r(this, "handleStoreChange", () => { let e = i.default.getChangeSentinel(); this.storeVersionHandled !== e && (this.changeCallback(), this.storeVersionHandled = e) }), this.stores = e, this.changeCallback = t } } }, 673011: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { ChangeListeners: function() { return r } }), n("47120"); class r { has(e) { return this.listeners.has(e) } hasAny() { return this.listeners.size > 0 } invokeAll() { this.listeners.forEach(e => e()) } constructor() { var e = this; i(this, "listeners", new Set), i(this, "add", e => { this.listeners.add(e) }), i(this, "remove", e => { this.listeners.delete(e) }), i(this, "addConditional", function(t) { let n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1]; if (n && !1 === t()) return; let i = () => { !1 === t() && e.remove(i) }; e.add(i) }) } } }, 613568: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Dispatcher: function() { return T } }), n("47120"), n("653041"), n("411104"); var i = n("121014"), r = n("512722"), s = n.n(r), a = n("956067"); n("17089"); var o = n("259443"), l = n("986529"), u = n("153102"), d = n("625306"), _ = n("420970"); function c(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let E = new Set(["APP_STATE_UPDATE", "CLEAR_CACHES", "CONNECTION_CLOSED", "CONNECTION_OPEN", "CONNECTION_RESUMED", "LOGIN_SUCCESS", "LOGIN", "LOGOUT", "MESSAGE_SEND_FAILED", "PUSH_NOTIFICATION_CLICK", "RESET_SOCKET", "SESSION_START", "UPLOAD_FAIL", "WRITE_CACHES"]), I = new o.Logger("Flux"); class T { isDispatching() { return null != this._currentDispatchActionType } dispatch(e) { return new Promise((t, n) => { this._waitQueue.push(() => { try { null == this.functionCache[e.type] && (this.functionCache[e.type] = e => this._dispatchWithDevtools(e), S(this.functionCache[e.type], "dispatch_" + e.type)), this.functionCache[e.type](e), t() } catch (e) { n(e) } }), this.flushWaitQueue() }) } flushWaitQueue() { if (!this._processingWaitQueue) try { this._processingWaitQueue = !0, u.default.isDispatching = !0; let t = 0; for (; this._waitQueue.length > 0;) { if (++t > 100) { var e; let t = d.serialize(); throw I.error("LastFewActions", t), null === (e = this._sentryUtils) || void 0 === e || e.addBreadcrumb({ message: "Dispatcher: Dispatch loop detected", data: { lastFewActions: t } }), Error("Dispatch loop detected, aborting") } for (; this._waitQueue.length > 0;) this._waitQueue.shift()(); u.default.emit() } } finally { this._processingWaitQueue = !1, u.default.isDispatching = !1 } } _dispatchWithDevtools(e) { this._dispatchWithLogging(e) } _dispatchWithLogging(e) { s()(null == this._currentDispatchActionType, "Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch. Action: ".concat(e.type, " Already dispatching: ").concat(this._currentDispatchActionType)), s()(e.type, "Dispatch.dispatch(...) called without an action type"), E.has(e.type) && I.log("Dispatching ".concat(e.type)), (0, l.mark)(e.type), d.add(e.type); let t = this.actionLogger.log(e, t => { try { this._currentDispatchActionType = e.type, this._dispatch(e, t) } finally { this._currentDispatchActionType = null } }); t.totalTime > 100 && I.verbose("Slow dispatch on ".concat(e.type, ": ").concat(t.totalTime, "ms")); try { (0, l.measure)("DISPATCH[".concat(e.type, "]"), e.type) } catch (e) {} } _dispatch(e, t) { for (let t of this._interceptors) if (t(e)) return !1; let n = this._actionHandlers.getOrderedActionHandlers(e); for (let i = 0, r = n.length; i < r; i++) { let { name: r, actionHandler: s, storeDidChange: a } = n[i]; !1 !== t(r, () => s(e)) && a(e) } let i = this._subscriptions[e.type]; null != i && t("__subscriptions", () => { i.forEach(t => t(e)) }) } addInterceptor(e) { this._interceptors.push(e) } wait(e) { this._waitQueue.push(e), this.flushWaitQueue() } subscribe(e, t) { let n = this._subscriptions[e]; null == n && (this._subscriptions[e] = n = new Set), n.add(t) } unsubscribe(e, t) { let n = this._subscriptions[e]; null != n && (n.delete(t), 0 === n.size && delete this._subscriptions[e]) } register(e, t, n, i, r) { return this._actionHandlers.register(e, t, n, null != i ? i : this._defaultBand, r) } createToken() { return this._actionHandlers.createToken() } addDependencies(e, t) { this._actionHandlers.addDependencies(e, t) } constructor(e = 0, t, n) { c(this, "_defaultBand", void 0), c(this, "_interceptors", []), c(this, "_subscriptions", {}), c(this, "_waitQueue", []), c(this, "_processingWaitQueue", !1), c(this, "_currentDispatchActionType", null), c(this, "_actionHandlers", new f), c(this, "_sentryUtils", void 0), c(this, "actionLogger", void 0), c(this, "functionCache", {}), this._defaultBand = e, this._sentryUtils = n, null != t ? this.actionLogger = t : this.actionLogger = new _.ActionLogger, this.actionLogger.on("trace", (e, t, n) => { a.default.isTracing && n >= 10 && a.default.mark("\uD83E\uDDA5", t, n) }) } } class f { getOrderedActionHandlers(e) { var t; return null !== (t = this._orderedActionHandlers[e.type]) && void 0 !== t ? t : this._computeOrderedActionHandlers(e.type) } register(e, t, n, i) { let r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : this.createToken(); s()(i >= 0 && Number.isInteger(i), "band must be a non-negative integer."); let a = {}; for (let n in t) { let i = t[n], r = e => i(e); S(r, "".concat(e, "_").concat(n)), a[n] = r } return this._dependencyGraph.addNode(r, { name: e, band: i, actionHandler: a, storeDidChange: n }), this._addToBand(r, i), this._invalidateCaches(), r } createToken() { return "ID_".concat(this._lastID++) } addDependencies(e, t) { for (let n of (this._validateDependencies(e, t), t)) this._dependencyGraph.addDependency(e, n); this._invalidateCaches() } _validateDependencies(e, t) {} _invalidateCaches() { this._orderedCallbackTokens = null, this._orderedActionHandlers = {} } _bandToken(e) { let t = "band.".concat(e); return !this._dependencyGraph.hasNode(t) && (this._dependencyGraph.addNode(t, { name: t, band: e, actionHandler: {}, storeDidChange: () => {} }), e > 0 && this._dependencyGraph.addDependency(t, this._bandToken(e - 1))), t } _addToBand(e, t) { this._dependencyGraph.addDependency(this._bandToken(t), e), t > 0 && this._dependencyGraph.addDependency(e, this._bandToken(t - 1)) } _computeOrderedActionHandlers(e) { var t; let n = null !== (t = this._orderedCallbackTokens) && void 0 !== t ? t : this._computeOrderedCallbackTokens(), i = []; for (let t = 0, r = n.length; t < r; t++) { let { name: r, actionHandler: s, storeDidChange: a } = this._dependencyGraph.getNodeData(n[t]), o = s[e]; null != o && i.push({ name: r, actionHandler: o, storeDidChange: a }) } return this._orderedActionHandlers[e] = i, i } _computeOrderedCallbackTokens() { try { let e = this._dependencyGraph.overallOrder(); return this._orderedCallbackTokens = e, e } catch (e) { if (null != e.cyclePath) { let t = e.cyclePath.map(e => "".concat(this._dependencyGraph.getNodeData(e).name, "(").concat(e, ")")); throw Error("Dependency Cycle Found: ".concat(t.join(" -> "))) } throw e } } constructor() { c(this, "_orderedActionHandlers", {}), c(this, "_orderedCallbackTokens", null), c(this, "_lastID", 1), c(this, "_dependencyGraph", new i.DepGraph) } } function S(e, t) { Object.defineProperty(e, "name", { value: t }) } }, 153102: function(e, t, n) { "use strict"; n.r(t), n("177593"), n("47120"), n("411104"), n("17089"); var i = n("259443"), r = n("625306"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = new i.Logger("Flux"), o = e => e(); t.default = new class e { destroy() { this.changedStores.clear(), this.reactChangedStores.clear(), o = e => e() } injectBatchEmitChanges(e) { o = e } pause() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null; this.isPaused = !0, null !== this.pauseTimer && clearTimeout(this.pauseTimer), null !== e && (this.pauseTimer = setTimeout(() => { this.pauseTimer = null, this.resume() }, e)) } resume() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; clearTimeout(this.pauseTimer), this.pauseTimer = null, this.isPaused && (this.isPaused = !1, e && this.changedStores.size > 0 && setImmediate(() => this.emit())) } batched(e) { if (this.isPaused) return e(); try { return this.isPaused = !0, e() } finally { this.resume(!1), this.emit() } } emit() { !this.isBatchEmitting && !this.isPaused && o(() => { try { this.isBatchEmitting = !0, this.changeSentinel++; let e = 0, t = new Set, n = new Set; for (; this.changedStores.size > 0;) { if (++e > 100) throw a.error("LastFewActions", r.serialize()), Error("change emit loop detected, aborting"); this.emitNonReactOnce(t, n) } for (; this.reactChangedStores.size > 0;) { if (++e > 100) throw a.error("LastFewActions", r.serialize()), Error("react change emit loop detected, aborting"); this.emitReactOnce() } } finally { this.isBatchEmitting = !1 } }) } getChangeSentinel() { return this.changeSentinel } getIsPaused() { return this.isPaused } markChanged(e) { (e._changeCallbacks.hasAny() || e._syncWiths.length > 0) && this.changedStores.add(e), e._reactChangeCallbacks.hasAny() && this.reactChangedStores.add(e), !this.isBatchEmitting && !this.isDispatching && !this.isPaused && this.emit() } emitNonReactOnce(e, t) { let n = Date.now(), i = this.changedStores; this.changedStores = new Set, i.forEach(e => { t.add(e), e._changeCallbacks.invokeAll(), this.changedStores.delete(e) }), i.forEach(n => { n._syncWiths.forEach(n => { let { func: i, store: r } = n; if (!e.has(i)) e.add(i), !1 !== i() && !t.has(r) && (t.add(r), this.markChanged(r)) }) }); let s = Date.now(); s - n > 100 && a.verbose("Slow batch emitChanges took ".concat(s - n, "ms recentActions:"), r.serialize()) } emitReactOnce() { let e = Date.now(), t = this.reactChangedStores; this.reactChangedStores = new Set, t.forEach(e => { e._reactChangeCallbacks.invokeAll(), this.reactChangedStores.delete(e) }); let n = Date.now(); n - e > 100 && a.verbose("Slow batch emitReactChanges took ".concat(n - e, "ms recentActions:"), r.serialize()) } constructor() { s(this, "changedStores", new Set), s(this, "reactChangedStores", new Set), s(this, "changeSentinel", 0), s(this, "isBatchEmitting", !1), s(this, "isDispatching", !1), s(this, "isPaused", !1), s(this, "pauseTimer", null) } } }, 625306: function(e, t, n) { "use strict"; n.r(t), n.d(t, { add: function() { return r }, serialize: function() { return s } }), n("653041"); let i = []; function r(e) { for (i.push(e); i.length > 10;) i.shift() } function s() { return i.join(" -> ") } }, 420970: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ActionLogger: function() { return l } }), n("653041"), n("47120"), n("411104"); var i = n("836560"), r = n("259443"), s = n("643191"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = new r.Logger("Flux"); class l extends i.EventEmitter { log(e, t) { let n = new d(e); n.startTime = s.performance.now(); try { t((t, i) => { let r; let a = { name: t, time: -1 }, o = s.performance.now(); try { r = i() } finally { a.time = s.performance.now() - o, this.persist && n.traces.push(a), this.emit("trace", e.type, t, a.time) } return r }) } catch (e) { throw n.error = e, e } finally { n.totalTime = s.performance.now() - n.startTime, this.persist && n.totalTime > 0 && this.logs.push(n), this.logs.length > 1e3 && this.logs.shift(), this.emit("log", e) } return n } getSlowestActions(e) { var t; let i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 20, r = []; for (let t of this.logs) if (null == e || t.name === e) for (let e of t.traces) r.push([e.name, t.name, e.time]); r.sort((e, t) => t[2] - e[2]), r.length > i && (r.length = i); let s = 0, a = 0, l = r.map(t => { let [n, i, r] = t, a = "".concat(n); return null == e && (a += "<".concat(i, ">")), s = Math.max(a.length, s), [a, r] }).map(e => { let [t, n] = e; return a += n, "".concat(t.padEnd(s + 1, " "), " - ").concat(n, "ms") }).join("\n"); return 0 === r.length || r[0][2] < 10 || a < 20 ? r : (o.log("Using Hermes:", void 0 !== (null === (t = n.g) || void 0 === t ? void 0 : t.HermesInternal)), o.log("".concat(null != e ? "\n\n=== ".concat(e, " ===") : "", "\n").concat(l, "\n")), o.log("Total Time: ".concat(a, "ms")), r) } getLastActionMetrics(e) { var t; let i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 20, r = {}; for (let e of this.logs) for (let t of e.traces) r[t.name] = [t.name, e.name, t.time]; let s = Object.values(r); s.sort((e, t) => t[2] - e[2]), s.length > i && (s.length = i); let a = 0, l = 0, u = s.map(e => { let [t, n, i] = e; return a = Math.max(t.length, a), [t, i] }).map(e => { let [t, n] = e; return l += n, "".concat(t.padEnd(a + 1, " "), " - ").concat(n, "ms") }).join("\n"); return 0 === s.length || l < 8 ? s : (o.log("\nUsing Hermes: ".concat(void 0 !== (null === (t = n.g) || void 0 === t ? void 0 : t.HermesInternal)), "\n\n=== ".concat(e, " ===\n").concat(u), "\nTotal Time: ".concat(l, "ms\n\n")), s) } constructor({ persist: e = !1 } = {}) { super(), a(this, "logs", []), a(this, "persist", void 0), this.persist = e } } let u = 0; class d { get name() { return this.action.type } toJSON() { if (null == this.createdAt) throw Error("ActionLog.toJSON: You must complete your logging before calling toJSON"); return { actionType: this.action.type, created_at: this.createdAt, totalTime: this.totalTime, traces: this.traces } } constructor(e) { a(this, "id", void 0), a(this, "action", void 0), a(this, "createdAt", void 0), a(this, "startTime", 0), a(this, "totalTime", 0), a(this, "traces", []), a(this, "error", void 0), this.id = u++, this.action = e, this.createdAt = new Date } } }, 727438: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DeviceSettingsStore: function() { return E }, OfflineCacheStore: function() { return I }, PersistedStore: function() { return _ } }), n("47120"), n("411104"); var i = n("123763"), r = n.n(i), s = n("956067"), a = n("433517"), o = n("445346"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = { _state: void 0, _version: void 0 }, d = null; class _ extends o.Store { getClass() { return this.constructor } static clearAll(e) { return d = e, null == _._clearAllPromise && (_._clearAllPromise = new Promise(t => { requestIdleCallback(() => { _.clearPersistQueue(e), _.allPersistKeys.forEach(t => { _.shouldClear(e, t) && a.Storage.remove(t) }), o.Store.getAll().forEach(t => { t instanceof _ && _.shouldClear(e, t.getClass().persistKey) && (t._isInitialized = !1, t.initializeIfNeeded()) }), _._clearAllPromise = null, t() }, { timeout: 500 }) })), _._clearAllPromise } static shouldClear(e, t) { var n; return (null === (n = e.omit) || void 0 === n ? !void 0 : !n.includes(t)) && ("all" === e.type || "user-data-only" === e.type && !_.userAgnosticPersistKeys.has(t)) } static clearPersistQueue(e) { _._writeResolvers.forEach((t, n) => { let [i, r] = t; _.shouldClear(e, n) && (_._writePromises.delete(n), _._writeResolvers.delete(n), cancelIdleCallback(r), i(!1)) }), _._writePromises.clear(), _._writeResolvers.clear() } static getAllStates() { return Promise.all(Array.from(_._writePromises.values())).then(() => { let e = {}; return _.allPersistKeys.forEach(t => { var n; e[t] = (null !== (n = a.Storage.get(t)) && void 0 !== n ? n : u)._state }), e }) } static initializeAll(e) { o.Store.getAll().forEach(t => { if (t instanceof _) { let n = t.getClass().persistKey; e.hasOwnProperty(n) && t.initializeFromState(e[n]) } }) } initializeFromState(e) { this.initialize(e) && this.asyncPersist(), this._isInitialized ? this.emitChange() : (_.allPersistKeys.add(this.getClass().persistKey), this._isInitialized = !0) } static destroy() { d = null, o.Store.destroy(), _.clearPersistQueue({ type: "all" }), _.allPersistKeys.clear(), _.userAgnosticPersistKeys.clear() } initializeIfNeeded() { if (!this._isInitialized) { let e = Date.now(); _.allPersistKeys.add(this.getClass().persistKey); let { state: t, requiresPersist: n } = _.migrateAndReadStoreState(this.getClass().persistKey, this.getClass().migrations); this.initialize(t) && this.asyncPersist(), n && this.asyncPersist(), this._isInitialized = !0; let i = Date.now() - e; i > 5 && s.default.mark("\uD83E\uDDA5", this.getName() + ".initialize()", i) } } static migrateAndReadStoreState(e, t) { if (null != d && _.shouldClear(d, e)) return a.Storage.remove(e), { state: void 0, requiresPersist: !1 }; let n = null != _._clearAllPromise ? null : a.Storage.get(e), { _state: i, _version: r, ...s } = null != n ? n : u, o = null == t ? 0 : t.length; if (0 !== o && r !== o && null != t) { let e = null != r ? r : 0, n = i; for (null == r && (n = s); e < o;) n = (0, t[e])(n), e++; return { state: n, requiresPersist: !0 } } if (Object.values(s).length > 0) return { state: s, requiresPersist: !0 }; return { state: i, requiresPersist: !1 } } asyncPersist() { let { persistKey: e, disableWrite: t, throttleDelay: n } = this.getClass(); if (_.disableWrites || t) return Promise.resolve(!1); let i = _._writePromises.get(e); return null != i ? i : (i = new Promise(t => { let i = n > 0 ? () => this.throttledCallback(t) : () => this.callback(t); _._writeResolvers.set(e, [t, requestIdleCallback(i, { timeout: 500 })]) }), _._writePromises.set(e, i), i) } persist() { let { persistKey: e } = this.getClass(), t = this.getState(), n = this._version; a.Storage.set(e, { _state: t, _version: n }) } clear() { let { persistKey: e } = this.getClass(); a.Storage.remove(e) } constructor(e, t) { if (super(e, t), l(this, "_version", null == this.getClass().migrations ? 0 : this.getClass().migrations.length), l(this, "callback", e => { let { persistKey: t } = this.getClass(); this.persist(), _._writePromises.delete(t), _._writeResolvers.delete(t), e() }), l(this, "throttledCallback", r()(e => this.callback(e), this.getClass().throttleDelay, { leading: !1 })), "string" != typeof this.getClass().persistKey) throw Error("".concat(this.getClass().name, " initialized without a `persistKey`. Add one so we know where to save your stuff!")); if ("function" != typeof this.initialize) throw Error("".concat(this.getClass().name, " initialized without an `initialize` method. Add one that accepts the initial cached state.")); if ("function" != typeof this.getState) throw Error("".concat(this.getClass().name, " initialized without a `getState` method. Add one that returns the full state of the store for persistance to work.")); this.addChangeListener(() => this.asyncPersist()) } } l(_, "allPersistKeys", new Set), l(_, "userAgnosticPersistKeys", new Set), l(_, "_writePromises", new Map), l(_, "_writeResolvers", new Map), l(_, "_clearAllPromise", void 0), l(_, "disableWrites", !1), l(_, "persistKey", void 0), l(_, "disableWrite", !1), l(_, "throttleDelay", 0), l(_, "migrations", void 0); class c extends _ { initializeFromState(e) { return _.userAgnosticPersistKeys.add(this.getClass().persistKey), super.initializeFromState(e) } initializeIfNeeded() { return _.userAgnosticPersistKeys.add(this.getClass().persistKey), super.initializeIfNeeded() } getState() { return this.getUserAgnosticState() } } class E extends c {} class I extends c {} }, 445346: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { Store: function() { return E } }), n("177593"), n("47120"), n("653041"); var r = n("512722"), s = n.n(r), a = n("956067"); n("17089"); var o = n("673011"), l = n("153102"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = [], _ = !1, c = new Promise(e => { i = () => { e(), i = null } }); class E { static initialize() { _ = !0, d.forEach(e => e.initializeIfNeeded()), null != i && i() } static destroy() { d.length = 0, l.default.destroy() } static getAll() { return d } registerActionHandlers(e, t) { this._dispatcher.register(this.getName(), e, e => { (this._changeCallbacks.hasAny() || this._reactChangeCallbacks.hasAny() || this._syncWiths.length > 0) && (l.default.markChanged(this), l.default.getIsPaused() && null != this._mustEmitChanges && this._mustEmitChanges(e) && l.default.resume(!1)) }, t, this._dispatchToken) } getName() { var e; return null !== (e = this.constructor.displayName) && void 0 !== e ? e : this.constructor.name } initializeIfNeeded() { if (!this._isInitialized) { let e = Date.now(); this.initialize(), this._isInitialized = !0; let t = Date.now() - e; t > 5 && a.default.mark("\uD83E\uDDA5", this.getName() + ".initialize()", t) } } initialize() {} syncWith(e, t, n) { if (this.waitFor(...e), null != n) { var i, r; let s, a = 0, o = () => { a !== l.default.getChangeSentinel() && (a = l.default.getChangeSentinel(), !1 !== t() && this.emitChange()) }; i = null != n ? n : 0, r = o, s = null, o = 0 === i ? function() { clearImmediate(s), s = setImmediate(r) } : function() { null == s && (s = setTimeout(() => { try { r() } finally { s = null } }, i)) }, e.forEach(e => e.addChangeListener(o)) } else e.forEach(e => { e._syncWiths.push({ func: t, store: this }) }) } waitFor() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; let i = t.map((e, t) => (s()(null != e, "Store.waitFor(...) called with null Store at index ".concat(t, " for store ").concat(this.getName())), null != e._dispatcher) ? (s()(e._dispatcher === this._dispatcher, "Stores belong to two separate dispatchers."), e.getDispatchToken()) : null); this._dispatcher.addDependencies(this.getDispatchToken(), i.filter(e => null != e)) } emitChange() { l.default.markChanged(this) } getDispatchToken() { return this._dispatchToken } mustEmitChanges() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : () => !0; this._mustEmitChanges = e } constructor(e, t, n) { u(this, "_changeCallbacks", new o.ChangeListeners), u(this, "_reactChangeCallbacks", new o.ChangeListeners), u(this, "_syncWiths", []), u(this, "_dispatchToken", void 0), u(this, "_dispatcher", void 0), u(this, "_mustEmitChanges", void 0), u(this, "_isInitialized", !1), u(this, "__getLocalVars", void 0), u(this, "addChangeListener", this._changeCallbacks.add), u(this, "addConditionalChangeListener", this._changeCallbacks.addConditional), u(this, "removeChangeListener", this._changeCallbacks.remove), u(this, "addReactChangeListener", this._reactChangeCallbacks.add), u(this, "removeReactChangeListener", this._reactChangeCallbacks.remove), this._dispatcher = e, this._dispatchToken = this._dispatcher.createToken(), this.registerActionHandlers(null != t ? t : {}, n), d.push(this), _ && this.initializeIfNeeded() } } u(E, "displayName", void 0), u(E, "initialized", c) }, 441244: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("411104"); var i = n("735250"), r = n("470079"), s = n("902704"), a = n("250919"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function l(e) { var t, n; return null !== (n = null !== (t = e.displayName) && void 0 !== t ? t : e.name) && void 0 !== n ? n : "" } t.default = function(e, t, n) { return null != n && n.forwardRef ? function(e, t) { return n => { var d; let _ = "FluxContainer(".concat(l(n), ")"); class c extends(d = r.Component) { componentDidMount() { this.listener.attach(_) } componentWillUnmount() { this.listener.detach(), this.memoizedGetStateFromStores.clear() } render() { let { forwardedConnectStoresRef: e, childProps: t } = this.props, r = this.memoizedGetStateFromStores(t); return (0, i.jsx)(n, { ref: e, ...t, ...r }) } constructor(...n) { super(...n), o(this, "memoizedGetStateFromStores", u(t)), o(this, "listener", new a.BatchedStoreListener(e, () => { let e = this.memoizedGetStateFromStores.getCachedResult(this.props.childProps); if (!(null != e && (this.memoizedGetStateFromStores.clear(), (0, s.default)(this.memoizedGetStateFromStores(this.props.childProps), e)))) this.forceUpdate() })) } } o(c, "displayName", _); let E = r.forwardRef((e, t) => (0, i.jsx)(c, { childProps: e, forwardedConnectStoresRef: t })); return E.displayName = "ForwardRef(".concat(_, ")"), E } }(e, t) : function(e, t) { return n => { var d; let _ = "FluxContainer(".concat(l(n), ")"); class c extends(d = r.Component) { componentDidMount() { this.listener.attach(_) } componentWillUnmount() { this.listener.detach(), this.memoizedGetStateFromStores.clear() } render() { let e = this.memoizedGetStateFromStores(this.props); return (0, i.jsx)(n, { ...this.props, ...e }) } constructor(...n) { super(...n), o(this, "memoizedGetStateFromStores", u(t)), o(this, "listener", new a.BatchedStoreListener(e, () => { let e = this.memoizedGetStateFromStores.getCachedResult(this.props); if (!(null != e && (this.memoizedGetStateFromStores.clear(), (0, s.default)(this.memoizedGetStateFromStores(this.props), e)))) this.forceUpdate() })) } } return o(c, "displayName", _), c } }(e, t) }; function u(e) { let t = null, n = null, i = e => null != t && null != n && (0, s.default)(t, e) ? n : null != t && null != n && (0, s.default)(t, e) ? (t = e, n) : null, r = r => { let s = i(r); return null != s ? s : n = e(t = r) }; return r.getCachedResult = i, r.clear = () => { t = null, n = null }, r } }, 442837: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BatchedStoreListener: function() { return i.BatchedStoreListener }, Dispatcher: function() { return r.Dispatcher }, Store: function() { return o.Store }, statesWillNeverBeEqual: function() { return u.statesWillNeverBeEqual }, useStateFromStores: function() { return u.useStateFromStores }, useStateFromStoresArray: function() { return u.useStateFromStoresArray }, useStateFromStoresObject: function() { return u.useStateFromStoresObject } }); var i = n("250919"), r = n("613568"), s = n("153102"), a = n("727438"), o = n("445346"), l = n("441244"), u = n("399606"); t.default = { Emitter: s.default, Store: o.Store, PersistedStore: a.PersistedStore, DeviceSettingsStore: a.DeviceSettingsStore, OfflineCacheStore: a.OfflineCacheStore, connectStores: l.default, initialize: function() { o.Store.initialize() }, get initialized() { return o.Store.initialized } } }, 399606: function(e, t, n) { "use strict"; n.r(t), n.d(t, { statesWillNeverBeEqual: function() { return o }, useStateFromStores: function() { return l }, useStateFromStoresArray: function() { return d }, useStateFromStoresObject: function() { return u } }), n("411104"), n("47120"); var i = n("470079"), r = n("902704"), s = n("250919"); function a(e, t) { return e === t } function o(e, t) { return !1 } function l(e, t, n) { let o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : a, { current: l } = (0, i.useRef)({ stores: e, areStatesEqual: o, getStateFromStores: t, prevDeps: void 0, state: void 0 }), u = l.state; if (null == n || !(0, r.areArraysShallowEqual)(n, l.prevDeps)) { let e = t(); (null == u || !o(u, e)) && (u = e) }(0, i.useLayoutEffect)(() => { l.getStateFromStores = t, l.prevDeps = n, l.state = u }); let [, d] = (0, i.useState)(null); return (0, i.useLayoutEffect)(() => { let t = () => { let e = l.getStateFromStores(); !o(l.state, e) && (l.state = e, d({})) }; t(); let n = new s.BatchedStoreListener(e, t); return n.attach("useStateFromStores"), () => n.detach() }, []), u } function u(e, t, n) { return l(e, t, n, r.default) } function d(e, t, n) { return l(e, t, n, r.areArraysShallowEqual) } }, 544891: function(e, t, n) { "use strict"; n.r(t), n.d(t, { HTTP: function() { return O }, INVALID_FORM_BODY_ERROR_CODE: function() { return o.INVALID_FORM_BODY_ERROR_CODE }, V6OrEarlierAPIError: function() { return u.APIError }, V8APIError: function() { return o.APIError }, convertSkemaError: function() { return l.convertSkemaError }, getAPIBaseURL: function() { return C }, setAwaitOnline: function() { return v }, setRequestPatch: function() { return g } }), n("47120"), n("653041"); var i = n("203651"), r = n.n(i), s = n("261470"); n("17089"); var a = n("259443"), o = n("343817"), l = n("357280"); n("380094"); var u = n("817109"), d = n("413135").Buffer; let _ = new a.Logger("HTTPUtils"), c = new Set([502, 504, 507, 598, 599, 522, 523, 524]); function E(e, t, n, i, a) { var u, _, I, T, S; let h = r()[e](t.url); if (null != t.onRequestCreated && t.onRequestCreated(h), null != t.query) { let e = t.query; if ("object" == typeof e) { let t = { ...e }; Object.keys(t).map(e => { null == t[e] && delete t[e] }), e = t } h.query(e) } if (t.body && h.send(t.body), null != t.headers && h.set(t.headers), null != t.reason && h.set("X-Audit-Log-Reason", encodeURIComponent(t.reason)), null === (u = t.attachments) || void 0 === u || u.forEach(e => { h.attach(e.name, e.file, e.filename) }), null === (_ = t.fields) || void 0 === _ || _.forEach(e => { h.field(e.name, e.value) }), null != t.context) { let e = function(e) { try { return d.from(JSON.stringify(e)).toString("base64") } catch (e) { return null } }(t.context); null != e && h.set("X-Context-Properties", e) } null != t.retried && 0 !== t.retried && h.set("X-Failed-Requests", "".concat(t.retried)), null != t.timeout && 0 !== t.timeout && h.timeout(t.timeout), t.binary && h.responseType("blob"), null != t.onRequestProgress && h.on("progress", e => { var n; null === (n = t.onRequestProgress) || void 0 === n || n.call(t, e) }); let A = () => { t.backoff = null != t.backoff ? t.backoff : new s.default, t.retried = (null != t.retried ? t.retried : 0) + 1, t.backoff.fail(() => L(t.url).then(() => E(e, t, n, i, a))) }; null == R || null === (I = R.prepareRequest) || void 0 === I || I.call(R, h), h.ok(e => null != e.status), h.then(r => { var s, u, d; if (null != t.retries && t.retries-- > 0 && c.has(r.status)) return A(); let _ = { ok: r.ok, headers: r.headers, body: r.body, text: r.text, status: r.status }; f(t, _); let I = !1, T = (r, s) => { let o = { ...t, headers: { ...t.headers, ...r }, interceptResponse: s }; I = !0, E(e, o, n, i, a) }, S = e => { !I && (i(e), null == a || a({ ok: !1, hasErr: !0, err: e })) }; if ((null == t ? void 0 : null === (s = t.interceptResponse) || void 0 === s ? void 0 : s.call(t, r, T, S)) !== !0) { if ((null == R ? void 0 : null === (u = R.interceptResponse) || void 0 === u ? void 0 : u.call(R, r, T, S)) !== !0) { if (r.ok) n(_); else { if (t.oldFormErrors && (null == _ ? void 0 : null === (d = _.body) || void 0 === d ? void 0 : d.code) === o.INVALID_FORM_BODY_ERROR_CODE) { let { errors: e } = _.body; null != e && (_.body = (0, l.convertSkemaError)(e)) } i(_) } null != a && a({ hasErr: !1, ..._ }) } } }, e => { null != t.retries && t.retries-- > 0 && "ABORTED" !== e.code ? A() : (f(t), i(e), null != a && a({ ok: !1, hasErr: !0, err: e })) }), (null === (T = t.signal) || void 0 === T ? void 0 : T.aborted) ? h.abort() : null === (S = t.signal) || void 0 === S || S.addEventListener("abort", () => h.abort(), { once: !0 }) } let I = new Map; function T(e) { let t = I.get(e); if (null == t) { _.verbose("rateLimitExpirationHandler: rate limit for", e, "expired, but record was already removed"); return } let n = t.queue.shift(); if (null == n) { _.verbose("rateLimitExpirationHandler: removing key for", e), I.delete(e); return } _.verbose("rateLimitExpirationHandler: moving to next record for ", e), n() } function f(e, t) { let n = I.get(e.url); if (null != t && 429 === t.status) { var i, r; let s = (null === (i = t.body) || void 0 === i ? void 0 : i.retry_after) || 5, a = Date.now() + 1e3 * s; if (null != n) { if (n.retryAfterTimestamp < a) _.verbose("cleanupRequestEntry: extending rate limit for ", e.url), clearTimeout(n.timeoutId); else { _.verbose("cleanupRequestEntry: already has rate limit for ", e.url); return } } _.verbose("cleanupRequestEntry: rate limit for ".concat(e.url, " retry after ").concat(s, " seconds")); let o = setTimeout(() => T(e.url), 1e3 * s); I.set(e.url, { queue: null !== (r = null == n ? void 0 : n.queue) && void 0 !== r ? r : [], retryAfterTimestamp: a, timeoutId: o }) } else null != n && n.retryAfterTimestamp < Date.now() && (_.verbose("cleanupRequestEntry: rate limit for ", e.url, "expired"), T(e.url)) } function S(e, t, n) { return new Promise((i, r) => { "string" == typeof t && (t = { url: t }); let s = I.get(t.url); null != s ? (_.verbose("makeRequest: queueing request for ", t.url), s.queue.push(E.bind(null, e, t, i, r, n))) : E(e, t, i, r, n) }) } let h = S.bind(null, "get"), A = S.bind(null, "post"), m = S.bind(null, "put"), N = S.bind(null, "patch"), p = S.bind(null, "del"), O = { get: h, post: A, put: m, patch: N, del: p }; if (n.g.isServerRendering) { let e = (e, t) => Promise.resolve({ ok: !0, status: 200, headers: {}, body: null, text: "" }); h = e, A = e, m = e, N = e, p = e } function C() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; return "https:" + window.GLOBAL_ENV.API_ENDPOINT + (e ? "/v".concat(window.GLOBAL_ENV.API_VERSION) : "") } let R = null; function g(e) { R = e } let L = () => Promise.resolve(); function v(e) { L = e } }, 817109: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { APIError: function() { return r } }), n("411104"); class r { getFieldMessage(e) { return null != this.fields[e] ? this.fields[e][0] : null } constructor(e, t, n = "An unexpected error occurred.") { i(this, "message", void 0), i(this, "code", void 0), i(this, "retryAfter", void 0), i(this, "fields", void 0), i(this, "error", void 0), i(this, "status", void 0); let { message: r, code: s, retryAfter: a, fields: o, status: l } = function(e, t) { if ("string" == typeof e) return { message: e, code: t }; if (null != e.body) { if (null != e.body.message && !Array.isArray(e.body.message) && (null == e.body.code || !Array.isArray(e.body.code))) return { message: e.body.message, code: e.body.code, retryAfter: e.body.retry_after, status: e.status }; { let t = e.body, n = null != t ? Object.values(t)[0] : null; return { message: null != n ? n[0] : void 0, fields: t, status: e.status } } } return {} }(e, t); this.message = r || n, this.retryAfter = a, this.code = s || -1, this.fields = o || {}, this.status = l, this.error = Error(r) } } }, 343817: function(e, t, n) { "use strict"; var i, r; function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { APIError: function() { return l }, CaptchaTypes: function() { return i }, INVALID_FORM_BODY_ERROR_CODE: function() { return a } }), n("47120"); let a = 50035; function o(e) { return e.map(e => ({ code: "UNKNOWN", message: e })) }(r = i || (i = {})).HCAPTCHA = "hcaptcha", r.RECAPTCHA = "recaptcha"; class l { hasFieldErrors() { return null != this.errors && Object.keys(this.errors).length > 0 } getFieldErrors(e) { "string" == typeof e && (e = [e]); let t = this.errors; for (; e.length > 0 && null != t;) t = t[e[0]], e = e.splice(1); return null == t ? void 0 : t._errors } getFirstFieldErrorMessage(e) { let t = this.getFieldErrors(e); return null == t || t.length < 1 ? null : t[0].message } getAnyErrorMessage() { var e, t; return null !== (t = null === (e = this.getAnyErrorMessageAndField()) || void 0 === e ? void 0 : e.error) && void 0 !== t ? t : this.message } getAnyErrorMessageAndField() { let e = this.errors, t = null; for (; null != e;) { if (null != e._errors) return { fieldName: t, error: e._errors[0].message }; t = Object.keys(e)[0], e = e[t] } return null } constructor(e, t, n = "An unexpected error occurred.") { s(this, "message", void 0), s(this, "code", void 0), s(this, "retryAfter", void 0), s(this, "errors", void 0), s(this, "status", void 0), s(this, "captchaFields", void 0); let { message: i, code: r, retryAfter: l, errors: u, status: d, captchaFields: _ } = function(e, t) { if ("string" == typeof e) return { message: e, code: t }; if (null == e.body) return { status: e.status }; let n = e.body; return null == e.body.message || Array.isArray(e.body.message) || null != e.body.code && Array.isArray(e.body.code) ? null != n && "captcha_key" in n ? { code: -1, captchaFields: n, status: e.status, message: n.captcha_key.length > 0 ? n.captcha_key[0] : void 0 } : { status: e.status, code: a, errors: function(e) { let t = {}; for (let [n, i] of Object.entries(e)) { if ("_misc" === n) { t._errors = o(i); continue } let e = {}; e._errors = o(i), t[n] = e } return t }(n) } : { message: n.message, code: n.code, retryAfter: n.retry_after, errors: n.errors, status: e.status } }(e, t); this.message = null != i ? i : n, this.code = null != r ? r : -1, this.retryAfter = l, this.errors = u, this.status = d, this.captchaFields = null != _ ? _ : {} } } }, 357280: function(e, t, n) { "use strict"; n.r(t), n.d(t, { convertSkemaError: function() { return r } }); let i = "_errors"; function r(e) { let t = {}; for (let n in e) { let r = e[n]; if (null == r) continue; if (n === i && (t._misc = e[n].map(e => e.message)), Array.isArray(r)) continue; let s = r[i]; null != s ? t[n] = s.map(e => e.message) : t[n] = [Object.keys(r)[0]] } return t } }, 380094: function(e, t, n) { "use strict"; n.r(t), n("724458") }, 959525: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FORMAT_RE: function() { return i }, MARKDOWN_RE: function() { return r }, UNSAFE_RE: function() { return s }, UNSAFE_RE_ALL: function() { return a } }); let i = /\{.+?\}/, r = /[~*_]{2}.+?[~*_]{2}|\[.*?\]\(.+?\)|\n\n/, s = /!!/, a = /!!/g }, 825409: function(e, t, n) { "use strict"; n.r(t), n.d(t, { I18N: function() { return E }, getSystemLocale: function() { return u } }), n("47120"), n("411104"); var i = n("836560"), r = n("400053"), s = n.n(r), a = n("142494"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.g.IntlMessageFormat = s(), n("770801"), n("177486"), n("144062"), n("750854"), n("198823"), n("551576"), n("682422"), n("760388"), n("725589"), n("338770"), n("99783"), n("740635"), n("523332"), n("307163"), n("636681"), n("209012"), n("651811"), n("740191"), n("407837"), n("372097"), n("894996"), n("829028"), n("750879"), n("952874"), n("185851"), n("962066"), n("519708"), n("180583"), delete n.g.IntlMessageFormat, "undefined" == typeof Intl && n("211604"); let l = "en-US"; function u() { let e; return null != (e = (Array.isArray(navigator.languages) ? navigator.languages[0] : null) || navigator.language || navigator.browserLanguage || navigator.userLanguage) ? e : "" } class d { getMessages() { return this._parsedMessages } constructor(e) { o(this, "_context", { messages: {}, defaultMessages: {}, locale: l }), o(this, "_parsedMessages", {}), o(this, "_getParsedMessages", void 0), this._getParsedMessages = e } } class _ extends d { refresh(e) { this._context = e, this._refresh(e, this._parsedMessages) } constructor(...e) { var t; super(...e), t = this, o(this, "_refresh", function(e) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; return Object.keys(e.defaultMessages).forEach(i => { Object.defineProperty(n, i, { configurable: !0, get: () => (delete n[i], n[i] = t._getParsedMessages(e, i, t._refresh)) }) }), n }) } } class c extends d { refresh(e) { Object.assign(this._context, e), Object.keys(this._parsedMessages).forEach(e => { delete this._parsedMessages[e] }) } constructor(e) { var t; super(e), t = this, o(this, "_createProxy", function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : t._context; return new Proxy({}, { get: (n, i) => n[i] || (n[i] = t._getParsedMessages(e, i, t._createProxy)) }) }), this._parsedMessages = this._createProxy(this._context) } } class E extends i.EventEmitter { updateMessagesForExperiment(e, t) { let n = this._fetchMessages(e); if (n instanceof Promise) { n.then(n => { this._applyMessagesForLocale(t(n), e) }); return } this._applyMessagesForLocale(t(n), e) } setLocale(e) { if (this._chosenLocale === e) return; this._requestedLocale = e; let t = this._chosenLocale; this._chosenLocale = e, this.loadPromise = this._loadMessagesForLocale(e), this.emit("locale", this._chosenLocale, t) } setUpdateRules(e) { (0, a.setUpdateRules)(e) } getLanguages() { return this._languages } getAvailableLocales() { return this._languages.filter(e => { let { enabled: t } = e; return t }).map(e => { var t; let { code: n, name: i } = e; return { value: n, name: i, localizedName: null !== (t = this.Messages[n]) && void 0 !== t ? t : i } }).sort((e, t) => { let { name: n } = e, { name: i } = t; return n = n.toLowerCase(), n < (i = i.toLowerCase()) ? -1 : n > i ? 1 : 0 }) } getLocale() { return this._chosenLocale } getLocaleInfo() { return this._languages.find(e => e.code === this._chosenLocale) } getDefaultLocale() { var e, t, n; let i = null !== (e = u()) && void 0 !== e ? e : l, r = this._languages.filter(e => { let { enabled: t } = e; return t }).map(e => { let { code: t } = e; return t }); if (r.includes(i)) return i; let s = i.split("-"); return r.includes(s[0]) ? s[0] : "zh" === s[0] && s.length > 1 && "Hant" === s[1] ? null !== (t = r.find(e => "zh-TW" === e)) && void 0 !== t ? t : l : null !== (n = r.find(e => e.split("-")[0] === s[0])) && void 0 !== n ? n : l } _loadMessagesForLocale(e) { let t = this._fetchMessages(e); return t instanceof Promise ? t.then(t => this._applyMessagesForLocale(t, e)) : (this._applyMessagesForLocale(t, e), Promise.resolve()) } _applyMessagesForLocale(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : this._findMessages(l); this._requestedLocale === t && (this._provider.refresh({ messages: e, defaultMessages: n, locale: t }), this.resolveLanguageLoaded()) } _findMessages(e) { let t = this._fetchMessages(e); if (t instanceof Promise) throw Error("Messages are still loading."); return t } _fetchMessages(e) { let t = e === l ? () => { throw Error("Error Loading ".concat(l)) } : () => (console.warn("Unsupported Locale", e), -1 === e.indexOf("-")) ? this._fetchMessages(l) : this._fetchMessages(e.split("-")[0]); try { let n = this._getMessages(e); return n instanceof Promise ? n.catch(t) : n } catch (e) { return t() } } constructor({ initialLocale: e, getMessages: t, getLanguages: i }) { super(), o(this, "Messages", void 0), o(this, "loadPromise", Promise.resolve()), o(this, "initialLanguageLoad", void 0), o(this, "resolveLanguageLoaded", () => {}), o(this, "_languages", []), o(this, "_provider", void 0), o(this, "_chosenLocale", ""), o(this, "_requestedLocale", void 0), o(this, "_getMessages", void 0), o(this, "_getParsedMessages", (e, t, n) => { let { messages: i, defaultMessages: r, locale: s } = e, o = i[t] || r[t]; if ("object" == typeof o) return n({ messages: o, defaultMessages: r[t], locale: s }); try { return (0, a.getMessage)(o, s) } catch (e) { if (console.warn("Failed parsing intl key '".concat(String(t), "' in locale '").concat(s, "' defaulting to English"), e), "string" == typeof(o = r[t])) return (0, a.getMessage)(o, s) } return "" }), o(this, "_handleNewListener", e => { if ("locale" === e) this.emit(e, this._chosenLocale) }), this.initialLanguageLoad = new Promise((e, t) => { this.resolveLanguageLoaded = e }), Intl.__addLocaleData && Intl.__addLocaleData(n("201688")), this._languages = i(), this._provider = null != window.Proxy ? new c(this._getParsedMessages) : new _(this._getParsedMessages), this.Messages = this._provider.getMessages(), this._getMessages = t; try { new Intl.NumberFormat(e, {}), this.setLocale(e || this.getDefaultLocale()) } catch (e) { this.setLocale(this.getDefaultLocale()) } this.on("newListener", this._handleNewListener) } } }, 627420: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FormattedMessage: function() { return r.FormattedMessage }, getSystemLocale: function() { return i.getSystemLocale }, setUpdateRules: function() { return r.setUpdateRules } }); var i = n("825409"), r = n("142494"); t.default = i.I18N }, 20970: function(e, t, n) { "use strict"; n.r(t), n.d(t, { rules: function() { return I } }); var i = n("302454"); let { newline: r, paragraph: s, url: a, link: o, strong: l, u, br: d, em: _, image: c, text: E } = i.defaultRules, I = { newline: r, paragraph: s, url: a, link: { ...o, parse(e, t, n) { let i = o.parse(e, t, n); return i.context = n.context, i } }, strong: l, u, br: d, em: _, image: c, hook: { order: E.order, match: (0, i.inlineRegex)(/^\$\[(.*?)\]\((\w+)\)/), parse(e, t, n) { let { context: i } = n; return { render: i[e[2]], content: t(e[1], n) } }, react: (e, t, n) => e.render(t(e.content, n), n.key) }, noparse: { order: E.order, match: (0, i.inlineRegex)(/^!!(\d+?)!!/), parse(e, t, n) { let { unsafeContext: i } = n, r = i[e[1]]; return "string" != typeof r && (r = null != r ? r.toString() : ""), { type: "text", content: r } }, react: e => e.content }, text: E } }, 142494: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { FormattedMessage: function() { return c }, getMessage: function() { return I }, setUpdateRules: function() { return E } }), n("47120"), n("757143"); var s = n("400053"), a = n.n(s), o = n("302454"), l = n.n(o), u = n("20970"), d = n("959525"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class c { format(e) { if (!this.hasMarkdown) return this.intlMessage.format(e); let [t, n] = this.getContext(e); return i(this.intlMessage.format(t), t, n) } astFormat(e) { let [t, n] = this.getContext(e); return r(this.intlMessage.format(t), t, n) } plainFormat(e) { return this.intlMessage.format(e) } getContext(e) { let t = d.UNSAFE_RE.test(this.message), n = {}; if (t) { let t = 0; for (let [i, r] of Object.entries(e)) this.message.includes("!!{".concat(i, "}!!")) && (n[++t] = r, e[i] = t) } return [e, n] } constructor(e, t, n) { _(this, "message", void 0), _(this, "hasMarkdown", void 0), _(this, "intlMessage", void 0), this.message = n ? e : e.replace(d.UNSAFE_RE_ALL, ""), this.hasMarkdown = n, this.intlMessage = new(a())(this.message, t) } } function E(e) { i = function(e, t) { let n = l().parserFor(t(e)), i = l().reactFor(l().ruleOutput(e, "react")); return (e, t, r) => { let s = !e.includes("\n\n"); return !s && (e += "\n\n"), i(n(e, { inline: s, context: t, unsafeContext: r })) } }(u.rules, e), r = function(e) { let t = l().parserFor(e); return (e, n, i) => t(e + "\n\n", { inline: !1, context: n, unsafeContext: i }) }(u.rules) } function I(e, t) { if (null == e) return ""; null == i && E(n("281071").default), e = e.replace(/^\n+|\n+$/g, ""); let r = d.FORMAT_RE.test(e), s = d.MARKDOWN_RE.test(e); return r || s ? new c(e, t, s) : e } }, 281071: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("302454"); function s(e) { return e.heading = r.defaultRules.heading, e.lheading = r.defaultRules.lheading, e.list = r.defaultRules.list, e.paragraph = { ...e.paragraph, react: function(e, t, n) { return (0, i.jsx)("p", { children: t(e.content, n) }, n.key) } }, e.link = { ...e.link, react: function(e, t, n) { let s = {}; if (null != e.context) { let t = e.context[e.target]; t && t.onClick ? (s.onClick = t.onClick, s.onContextMenu = t.onContextMenu) : s.onClick = t } if (null == s.onClick) { var a; s.href = null !== (a = (0, r.sanitizeUrl)(e.target)) && void 0 !== a ? a : void 0, s.target = "_blank" } return (0, i.jsx)("a", { title: e.title, ...s, rel: "noreferrer", children: t(e.content, n) }, n.key) } }, e } }, 761609: function(e, t, n) { "use strict"; n.r(t), n.d(t, { IdGenerator: function() { return u } }); var i = n("654861"), r = n.n(i), s = n("413135"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o(e) { return 0 | e.mod(4294967296).toJSNumber() } function l(e) { return 0 | e.shiftRight(32).toJSNumber() } class u { generate(e) { let t = r()(e), n = 0 | this._sequenceNumber++, i = new s.Buffer(24); return i.writeInt32LE(o(t), 0, !0), i.writeInt32LE(l(t), 4, !0), i.writeInt32LE(this._randomPrefix, 8, !0), i.writeInt32LE(o(this._creationTime), 12, !0), i.writeInt32LE(l(this._creationTime), 16, !0), i.writeInt32LE(n, 20, !0), i.toString("base64") } constructor() { a(this, "_randomPrefix", 0 | Math.floor(4294967296 * Math.random())), a(this, "_creationTime", r()(Date.now())), a(this, "_sequenceNumber", 0) } } }, 485853: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Dao: function() { return a } }); var i = n("503461"), r = n("190313"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { get prefix() { return this.table.prefix } withoutLogging() { return new a(this.originalPrefix, this.table.tableId, this.table.database, !1) } get(e) { return this.table.get([e]) } getMany(e) { return this.table.getMany([], e) } getRange(e, t, n) { return this.table.getRange([e], [t], n) } getKvEntries() { return this.table.getKvEntries() } getMapEntries() { return this.table.getMapEntries() } getIds() { return this.table.getChildIds([]) } getParentId(e) { return this.table.getParentId([null, e]) } put(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : i.ConflictOptions.Replace; return this.table.put({ key: [e], data: t, generation: null }, n) } delete(e) { return 0 == arguments.length ? this.table.delete() : this.table.delete([e]) } transaction(e, t) { return this.table.transaction(t => e(new o(t)), t) } upgradeTransaction(e) { return new o(this.table.upgradeTransaction(e)) } getManySyncUnsafe(e) { return this.table.getManySyncUnsafe([], e) } getMapEntriesSyncUnsafe() { return this.table.getMapEntriesSyncUnsafe() } constructor(e, t, n, i = !0) { s(this, "originalPrefix", void 0), s(this, "table", void 0), this.originalPrefix = e, this.table = new r.Table([e], t, n, i) } } class o { static fromDatabaseTransaction(e, t, n) { return new o(new r.TableTransaction(e, t, n)) } put(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : i.ConflictOptions.Replace; this.transaction.put({ key: [e], data: t, generation: null }, n) } delete(e) { return 0 == arguments.length ? this.transaction.delete() : this.transaction.delete([e]) } constructor(e) { s(this, "transaction", void 0), this.transaction = e } } }, 194806: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Database: function() { return l } }), n("411104"), n("653041"), n("47120"); var i = n("956067"), r = n("930145"), s = n("350167"), a = n("503461"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class l { static async open(e, t) { return new l(await r.Host.open(e, t)) } static openSyncUnsafe(e, t) { return new l(r.Host.openSyncUnsafe(e, t)) } static delete(e) { return r.Host.delete(e) } close() { var e; this.lastState = a.DatabaseState.Closed, null === (e = this.raw) || void 0 === e || e.close(), this.raw = null, s.Runtime.removeCompletionCallback(this.databaseStateCallback) } disable(e) { return null == this.raw ? Promise.resolve() : (this.lastState = a.DatabaseState.Disabled, this.execute({ type: "db.disable", handle: 0, reason: e })) } execute(e, t) { if (null == this.raw) throw Error("database is no longer open (database: ".concat(this)); let n = "key" in e ? e.key[0] : e.table, r = () => s.Runtime.executeAsync(null != t ? t : e.type, t => { this.raw.execute(t, { ...e, handle: 0 }) }); return null === t ? r() : i.default.timeAsync("\uD83D\uDCBE", "".concat(null != t ? t : e.type, " ").concat(null != n ? n : ""), r) } executeSync(e) { if (null == this.raw) throw Error("database is no longer open (database: ".concat(this)); let t = "key" in e ? e.key[0] : e.table; return i.default.time("\uD83D\uDCBE", "SYNC: ".concat(e.type, " ").concat(null != t ? t : ""), () => this.raw.execute(null, { ...e, handle: 0 }, { synchronous: !0 })) } fullVacuum() { return this.execute({ type: "db.vacuum", handle: 0, complete: !0 }) } fsInfo() { return this.execute({ type: "db.fs_info", handle: 0 }) } incrementalVacuum() { return this.execute({ type: "db.vacuum", handle: 0, complete: !1 }) } instantaneousState() { return null == this.raw ? a.DatabaseState.Closed : this.lastState = this.executeSync({ type: "db.state" }) } async instantaneousStateAsync() { return null == this.raw ? a.DatabaseState.Closed : this.lastState = await this.execute({ type: "db.state" }) } state() { return this.lastState } transaction(e, t) { let n = new u(this); return Promise.resolve(e(n)).then(() => n.operations.length > 0 ? this.execute({ type: "db.transaction", operations: n.complete() }, t) : Promise.resolve()) } constructor(e) { o(this, "name", void 0), o(this, "handle", void 0), o(this, "raw", void 0), o(this, "lastState", void 0), o(this, "databaseStateCallback", void 0), this.raw = e, this.name = e.name, this.lastState = a.DatabaseState.Open, this.handle = e.handle, this.databaseStateCallback = s.Runtime.addDatabaseStateCallback((e, t) => { this.handle === e && (this.lastState = t) }) } } class u { add(e) { this.operations.push(e) } complete() { for (let e of this.operations) e.handle = 0; return this.operations } toString() { return "[DatabaseTransaction ".concat(this.database.handle, ": ").concat(this.operations.length, " ops]") } constructor(e) { o(this, "database", void 0), o(this, "operations", void 0), this.database = e, this.operations = [] } } }, 801288: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EntityDao: function() { return a } }), n("627494"), n("757143"); var i = n("503461"), r = n("190313"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { get prefix() { return this.table.prefix } withoutLogging() { return new a(this.originalPrefix, this.table.tableId, this.table.database, !1) } get(e) { return this.table.get([e]) } getMany(e) { return this.table.getMany([], e) } getRange(e, t, n) { return this.table.getRange([e], [t], n) } getKvEntries() { return this.table.getKvEntries() } getMapEntries() { return this.table.getMapEntries() } getIds() { return this.table.getChildIds([]) } getParentId(e) { return this.table.getParentId([null, e]) } put(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; return this.transaction(n => n.put(e, t), "".concat(this.prefix, " put")) } putAll(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; return this.transaction(n => n.putAll(e, t), "".concat(this.prefix, " putAll")) } replaceAll(e) { return this.transaction(t => t.replaceAll(e), "".concat(this.prefix, " replaceAll")) } delete(e) { return this.transaction(t => t.delete(e), "".concat(this.prefix, " delete")) } transaction(e, t) { return this.table.transaction(t => e(new o(t)), t) } upgradeTransaction(e) { return new o(this.table.upgradeTransaction(e)) } getManySyncUnsafe(e) { return this.table.getManySyncUnsafe([], e) } getMapEntriesSyncUnsafe() { return this.table.getMapEntriesSyncUnsafe() } static cell(e, t) { return { key: [e.id], data: e, generation: t } } constructor(e, t, n, i = !0) { s(this, "originalPrefix", void 0), s(this, "table", void 0), this.originalPrefix = e, this.table = new r.Table([e], t, n, i) } } class o { static fromDatabaseTransaction(e, t, n) { return new o(new r.TableTransaction(e, t, n)) } put(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; return this.transaction.put(a.cell(e, null), t) } putAll(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; return this.transaction.putAll(e.map(e => a.cell(e, null)), t) } replaceAll(e) { this.delete(), this.putAll(e) } delete(e) { return 0 == arguments.length ? this.transaction.delete([]) : this.transaction.delete([e]) } constructor(e) { s(this, "transaction", void 0), this.transaction = e } } }, 21055: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildDao: function() { return a } }); var i = n("503461"), r = n("190313"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { get prefix() { return this.table.prefix } withoutLogging() { return new a(this.originalPrefix, this.table.tableId, this.table.database, !1) } get(e, t) { return this.table.get([e, t]) } getMany(e, t) { return this.table.getMany([e], t) } getRange(e, t, n, i) { return this.table.getRange([e, t], [e, n], i) } getKvEntries() { return this.table.getKvEntries() } getMapEntries() { return this.table.getMapEntries() } getIds(e) { return this.table.getChildIds([e]) } getGuildIds() { return this.table.getChildIds([]) } getGuildId(e) { return this.table.getParentId([null, e]) } put(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.ConflictOptions.Replace; return this.putWithGeneration(e, t, n, null, r) } putWithGeneration(e, t, n, r) { let s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : i.ConflictOptions.Replace; return this.table.put({ key: [e, t], data: n, generation: r }, s) } delete(e, t) { switch (arguments.length) { case 0: return this.table.delete([]); case 1: return this.table.delete([e]); default: return this.table.delete([e, t]) } } deleteGeneration(e, t) { return this.table.deleteGeneration([], e, t) } transaction(e, t) { return this.table.transaction(t => e(new o(t)), t) } upgradeTransaction(e) { return new o(this.table.upgradeTransaction(e)) } getManySyncUnsafe(e, t) { return this.table.getManySyncUnsafe([e], t) } getMapEntriesSyncUnsafe() { return this.table.getMapEntriesSyncUnsafe() } constructor(e, t, n, i = !0) { s(this, "originalPrefix", void 0), s(this, "table", void 0), this.originalPrefix = e, this.table = new r.Table([e], t, n, i) } } class o { static fromDatabaseTransaction(e, t, n) { return new o(new r.TableTransaction(e, t, n)) } put(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.ConflictOptions.Replace; this.putWithGeneration(e, t, n, null, r) } putWithGeneration(e, t, n, r) { let s = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : i.ConflictOptions.Replace; return this.state.put({ key: [e, t], data: n, generation: r }, s) } delete(e, t) { switch (arguments.length) { case 0: this.state.delete([]); break; case 1: this.state.delete([e]); break; default: this.state.delete([e, t]) } } deleteGeneration(e, t) { return this.state.deleteGeneration([], e, t) } constructor(e) { s(this, "state", void 0), this.state = e } } }, 396124: function(e, t, n) { "use strict"; n.r(t), n.d(t, { GuildEntityDao: function() { return a } }), n("627494"), n("757143"); var i = n("503461"), r = n("190313"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { get prefix() { return this.table.prefix } withoutLogging() { return new a(this.originalPrefix, this.table.tableId, this.table.database, !1) } get(e, t) { return this.table.get([e, t]) } getMany(e, t) { return this.table.getMany([e], t) } getRange(e, t, n, i) { return this.table.getRange([e, t], [e, n], i) } getKvEntries() { return this.table.getKvEntries() } getMapEntries() { return this.table.getMapEntries() } getIds(e) { return this.table.getChildIds([e]) } getGuildIds() { return this.table.getChildIds([]) } getGuildId(e) { return this.table.getParentId([null, e]) } put(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : i.ConflictOptions.Replace; return this.transaction(i => i.put(e, t, n), "".concat(this.prefix, " put")) } putAll(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : i.ConflictOptions.Replace; return this.transaction(i => i.putAll(e, t, n), "".concat(this.prefix, " putAll")) } replaceAll(e, t) { return this.transaction(n => n.replaceAll(e, t), "".concat(this.prefix, " replaceAll")) } delete(e, t) { return this.transaction(n => n.delete(e, t), "".concat(this.prefix, " delete")) } deleteGeneration(e, t) { return this.transaction(n => n.deleteGeneration(e, t), "".concat(this.prefix, " deleteGeneration")) } transaction(e, t) { return this.table.transaction(t => e(new o(t)), t) } upgradeTransaction(e) { return new o(this.table.upgradeTransaction(e)) } getManySyncUnsafe(e, t) { return this.table.getManySyncUnsafe([e], t) } getMapEntriesSyncUnsafe() { return this.table.getMapEntriesSyncUnsafe() } static cell(e, t, n) { return { key: [e, t.id], data: t, generation: n } } constructor(e, t, n, i = !0) { s(this, "originalPrefix", void 0), s(this, "table", void 0), this.originalPrefix = e, this.table = new r.Table([e], t, n, i) } } class o { static fromDatabaseTransaction(e, t, n) { return new o(new r.TableTransaction(e, t, n)) } put(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : i.ConflictOptions.Replace; return this.putWithGeneration(e, t, null, n) } putWithGeneration(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.ConflictOptions.Replace; return this.transaction.put(a.cell(e, t, n), r) } putAll(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : i.ConflictOptions.Replace; return this.transaction.putAll(t.map(t => a.cell(e, t, null)), n) } replaceAll(e, t) { this.delete(e), this.putAll(e, t) } delete(e, t) { switch (arguments.length) { case 0: return this.transaction.delete([]); case 1: return this.transaction.delete([e]); default: return this.transaction.delete([e, t]) } } deleteGeneration(e, t) { return this.transaction.deleteGeneration([], e, t) } constructor(e) { s(this, "transaction", void 0), this.transaction = e } } }, 477255: function(e, t, n) { "use strict"; n.r(t), n("930145") }, 245585: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MessageDao: function() { return a } }); var i = n("503461"), r = n("190313"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a { get prefix() { return this.table.prefix } withoutLogging() { return new a(this.originalPrefix, this.table.tableId, this.table.database, !1) } get(e, t, n) { return this.table.get([e, t, u(n)]) } getLatest(e, t, n) { return this.table.getMany([e, t], { ordering: i.Ordering.Descending, limit: n }) } getRange(e, t, n, i, r) { return this.table.getRange([e, t, u(n)], [e, t, u(i)], r) } getMostRecents(e) { return this.table.messages.getLatest(e) } put(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.ConflictOptions.Replace; return this.table.put(l(e, t, n), r) } putAll(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.ConflictOptions.Replace, s = n.map(n => l(e, t, n)); return this.table.putAll(s, r) } deleteAll() { return this.table.delete() } deleteGuild(e) { return this.table.delete([e]) } deleteChannel(e, t) { return this.table.delete([e, t]) } deleteMessage(e, t, n) { return this.table.delete([e, t, u(n)]) } transaction(e, t) { return this.table.transaction(t => e(new o(t)), t) } upgradeTransaction(e) { return new o(this.table.upgradeTransaction(e)) } constructor(e, t, n, i = !0) { s(this, "originalPrefix", void 0), s(this, "table", void 0), this.originalPrefix = e, this.table = new r.Table([e], t, n, i) } } class o { static fromTableTransaction(e) { return new o(e) } static fromDatabaseTransaction(e, t, n) { return new o(new r.TableTransaction(e, t, n)) } put(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.ConflictOptions.Replace; this.transaction.put(l(e, t, n), r) } putAll(e, t, n) { let r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : i.ConflictOptions.Replace, s = n.map(n => l(e, t, n)); this.transaction.putAll(s, r) } deleteAll() { this.transaction.delete() } deleteGuild(e) { this.transaction.delete([e]) } deleteChannel(e, t) { this.transaction.delete([e, t]) } deleteMessage(e, t, n) { this.transaction.delete([e, t, u(n)]) } trimOrphans(e) { this.transaction.messages.trimOrphans(e) } trimChannel(e, t, n) { this.transaction.messages.trimChannel([e, t], n) } trimChannelsIn(e, t) { this.transaction.messages.trimChannelsIn(e, t) } trimChannelsNotIn(e, t) { this.transaction.messages.trimChannelsNotIn(e, t) } constructor(e) { s(this, "transaction", void 0), this.transaction = e } } function l(e, t, n) { let i = u(n.id); return { key: [e, t, i], data: n, generation: i } } function u(e) { return e.padStart(19, "0") } }, 190313: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Table: function() { return l }, TableTransaction: function() { return u } }), n("411104"); var i = n("503461"), r = n("218521"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function a(e, t) { return 0 === t.length ? e : { key: (0, r.combineKey)(t, e.key), data: e.data, generation: e.generation } } function o(e, t) { return 0 === t.length ? e : e.map(e => a(e, t)) } class l { close() { this.database.close() } async get(e) { var t; return null !== (t = (await this.getMany(e, { limit: 1 }))[0]) && void 0 !== t ? t : null } getMany() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 ? arguments[1] : void 0; return this.database.execute({ type: "kv.get_many", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e), ordering: null == t ? void 0 : t.ordering, limit: null == t ? void 0 : t.limit }, this.defaultDebugTag) } getRange(e, t, n) { let i = (0, r.combineKey)(this.prefix, e), s = (0, r.combineKey)(this.prefix, t); return this.database.execute({ type: "kv.get_range", table: this.tableId, range: [i, s], ordering: null == n ? void 0 : n.ordering, limit: null == n ? void 0 : n.limit }, this.defaultDebugTag) } getKvEntries() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; return this.database.execute({ type: "kv.get_kv_entries", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e) }, this.defaultDebugTag) } getMapEntries() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; return this.database.execute({ type: "kv.get_map_entries", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e) }, this.defaultDebugTag) } getChildIds() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; return this.database.execute({ type: "kv.get_child_ids", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e) }, this.defaultDebugTag) } getParentId() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; return this.database.execute({ type: "kv.get_parent_id", table: this.tableId, key: (0, r.combineKey)(this.prefix, e) }, this.defaultDebugTag) } put(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; return this.database.execute({ type: "kv.put_one", table: this.tableId, cell: a(e, this.prefix), overwrite: t === i.ConflictOptions.Replace }, this.defaultDebugTag) } putAll(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; return this.database.execute({ type: "kv.put_many", table: this.tableId, cells: o(e, this.prefix), overwrite: t === i.ConflictOptions.Replace }, this.defaultDebugTag) } replaceAll(e) { return this.transaction(t => { t.delete(), t.putAll(e) }, this.defaultDebugTag) } delete() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; return this.database.execute({ type: "kv.delete_many", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e) }, this.defaultDebugTag) } deleteRange(e, t) { let n = (0, r.combineKey)(this.prefix, e), i = (0, r.combineKey)(this.prefix, t); return this.database.execute({ type: "kv.delete_range", table: this.tableId, range: [n, i] }, this.defaultDebugTag) } deleteGeneration() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 ? arguments[1] : void 0, n = arguments.length > 2 ? arguments[2] : void 0; return this.database.execute({ type: "kv.delete_generation", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e), generation: n, comparer: t }, this.defaultDebugTag) } transaction(e, t) { return this.database.transaction(t => e(new u(this.prefix, this.tableId, t)), t) } upgradeTransaction(e) { return new u(this.prefix, this.tableId, e) } getManySyncUnsafe() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 ? arguments[1] : void 0; return this.database.executeSync({ type: "kv.get_many", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e), ordering: null == t ? void 0 : t.ordering, limit: null == t ? void 0 : t.limit }) } getMapEntriesSyncUnsafe() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; return this.database.executeSync({ type: "kv.get_map_entries", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e) }) } constructor(e, t, n, i) { s(this, "prefix", void 0), s(this, "tableId", void 0), s(this, "database", void 0), s(this, "defaultDebugTag", void 0), s(this, "messages", { getLatest: e => this.database.execute({ type: "messages.get_latest", table: this.tableId, guildId: e }, this.defaultDebugTag) }), this.prefix = e, this.tableId = t, this.database = n, this.defaultDebugTag = i ? void 0 : null } } class u { static fromDatabaseTransaction(e, t, n) { return new u(e, t, n) } put(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; this.transaction.add({ type: "kv.put_one", table: this.tableId, cell: a(e, this.prefix), overwrite: t === i.ConflictOptions.Replace }) } putAll(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : i.ConflictOptions.Replace; this.transaction.add({ type: "kv.put_many", table: this.tableId, cells: o(e, this.prefix), overwrite: t === i.ConflictOptions.Replace }) } replaceAll(e) { this.delete(), this.putAll(e) } delete() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []; this.transaction.add({ type: "kv.delete_many", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e) }) } deleteRange(e, t) { let n = (0, r.combineKey)(this.prefix, e), i = (0, r.combineKey)(this.prefix, t); this.transaction.add({ type: "kv.delete_range", table: this.tableId, range: [n, i] }) } deleteGeneration() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = arguments.length > 1 ? arguments[1] : void 0, n = arguments.length > 2 ? arguments[2] : void 0; this.transaction.add({ type: "kv.delete_generation", table: this.tableId, key: (0, r.combineKeyPrefix)(this.prefix, e), generation: n, comparer: t }) } constructor(e, t, n) { s(this, "prefix", void 0), s(this, "tableId", void 0), s(this, "transaction", void 0), s(this, "messages", { trimOrphans: e => { if (1 !== this.prefix.length || 1 !== e.length) throw Error("trimOrphans: only one prefix component is supported at this time"); this.transaction.add({ type: "messages.trim_orphans", table: this.tableId, channelKey: e[0], messageKey: this.prefix[0] }) }, trimChannel: (e, t) => { this.transaction.add({ type: "messages.trim_channel", table: this.tableId, key: (0, r.combineKey)(this.prefix, e), limit: t }) }, trimChannelsIn: (e, t) => { if (1 !== this.prefix.length || 1 !== e.length) throw Error("trimChannelsIn: only one prefix component is supported at this time"); this.transaction.add({ type: "messages.trim_channels_in", table: this.tableId, channelKey: e[0], messageKey: this.prefix[0], limit: t }) }, trimChannelsNotIn: (e, t) => { if (1 !== this.prefix.length || 1 !== e.length) throw Error("trimChannelsNotIn: only one prefix component is supported at this time"); this.transaction.add({ type: "messages.trim_channels_not_in", table: this.tableId, channelKey: e[0], messageKey: this.prefix[0], limit: t }) } }), this.prefix = e, this.tableId = t, this.transaction = n } } }, 279821: function(e, t, n) { "use strict"; n.r(t), n.d(t, { KV_RAW: function() { return i } }), n("411104"); let i = new class e { raise(e) { throw e } setCallbacks(e) { this.callback = e.response } databaseOpen(e, t, n) { let i = 'kv_storage: platform "web" is not supported at this time.'; if (null == n ? void 0 : n.synchronous) throw Error(i); return this.reply({ requestId: e, synchronous: !1, ok: !1, data: i }) } databaseList(e, t) { return this.reply({ requestId: e, synchronous: null == t ? void 0 : t.synchronous, ok: !0, data: [] }) } databaseDelete(e, t, n) { return this.reply({ requestId: e, synchronous: null == n ? void 0 : n.synchronous, ok: !0, data: void 0 }) } databaseOptimize(e, t, n) { return this.reply({ requestId: e, synchronous: null == n ? void 0 : n.synchronous, ok: !0, data: void 0 }) } reply(e) { if (e.synchronous) return e.data; if (null != e.requestId) { var t; null === (t = this.callback) || void 0 === t || t.call(this, { id: e.requestId, ok: e.ok, data: e.data, timings: { queueTimeNanoseconds: 0, executionTimeNanoseconds: 0, materializationTimeNanoseconds: 0, totalTimeNanoseconds: 0 } }, 0) } } constructor() { var e, t, n; e = this, n = null, (t = "callback") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 198584: function(e, t, n) { "use strict"; n.r(t); var i = n("279821"); n.es(i, t) }, 348326: function(e, t, n) { "use strict"; n.r(t), n("198584"); var i = n("485853"); n.es(i, t); var r = n("194806"); n.es(r, t); var s = n("801288"); n.es(s, t); var a = n("21055"); n.es(a, t); var o = n("396124"); n.es(o, t); var l = n("477255"); n.es(l, t); var u = n("245585"); n.es(u, t); var d = n("190313"); n.es(d, t); var _ = n("503461"); n.es(_, t) }, 930145: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Host: function() { return s } }); var i = n("198584"), r = n("350167"); class s { static open(e, t) { return r.Runtime.executeAsync("database_open", n => { var r; return i.KV_RAW.databaseOpen(n, { database: e, invalidateDisabledHandles: null !== (r = null == t ? void 0 : t.invalidateDisabledHandles) && void 0 !== r && r }) }) } static openSyncUnsafe(e, t) { var n; return i.KV_RAW.databaseOpen(null, { database: e, invalidateDisabledHandles: null !== (n = null == t ? void 0 : t.invalidateDisabledHandles) && void 0 !== n && n }, { synchronous: !0 }) } static delete(e) { return r.Runtime.executeAsync("database_delete", t => i.KV_RAW.databaseDelete(t, { database: e })) } static async list() { return (await r.Runtime.executeAsync("database_list", e => i.KV_RAW.databaseList(e))).map(e => e.data) } static optimize(e) { return r.Runtime.executeAsync("database_optimize", t => i.KV_RAW.databaseOptimize(t, { aggressive: e })) } static raise(e) { i.KV_RAW.raise(e) } } }, 350167: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Runtime: function() { return u } }), n("653041"), n("47120"), n("411104"); var i = n("259443"), r = n("198584"), s = n("444675"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = "1" === s.env.KV_STORAGE_LOGGING, l = new i.Logger("Runtime"); class u { static nextId() { return ++this.counter } static executeAsync(e, t) { return this.initialize(), new Promise((n, i) => { let r = this.nextId(); t(r), this.pending.set(r, { id: r, tag: e, started: performance.now(), resolve: n, reject: i }) }) } static addCompletionCallback(e) { return this.completionCallbacks.push(e), e } static addDatabaseStateCallback(e) { return this.dbStateCallbacks.push(e), e } static removeCompletionCallback(e) { this.completionCallbacks = this.completionCallbacks.filter(t => t !== e) } static removeDatabaseStateCallback(e) { this.dbStateCallbacks = this.dbStateCallbacks.filter(t => t !== e) } static onResponse(e, t) { let n = performance.now(), i = this.pending.get(e.id); null != i && (this.pending.delete(e.id), e.timings.materializationTimeNanoseconds = null != t ? t : 0, this.completeOperation(i, e, n), this.resolveOperation(i, e)) } static onStatus(e) { for (let t of this.dbStateCallbacks) t(e.handle, e.state) } static resolveOperation(e, t) { t.ok ? e.resolve(t.data) : e.reject("string" == typeof t.data ? Error(t.data) : t.data) } static completeOperation(e, t, n) { if (this.completionCallbacks.length > 0) { let i = { id: e.id, tag: e.tag, ok: t.ok, value: t.data, timings: { queue: t.timings.queueTimeNanoseconds / 1e6, execution: t.timings.executionTimeNanoseconds / 1e6, materialization: t.timings.materializationTimeNanoseconds / 1e6, ccTotal: t.timings.totalTimeNanoseconds / 1e6, jsTotal: n - e.started } }; for (let e of this.completionCallbacks) e(i) } } static initialize() { !this.initialized && (r.KV_RAW.setCallbacks({ status: e => this.onStatus(e), response: (e, t) => this.onResponse(e, t) }), o && (this.addCompletionCallback(e => { let t = e.ok ? "completed" : "failed", n = ["".concat(e.timings.execution.toFixed(3), "ms execution"), "".concat(e.timings.materialization.toFixed(3), "ms js materialization"), "".concat(e.timings.ccTotal.toFixed(3), "ms cc completion"), "".concat(e.timings.jsTotal.toFixed(3), "ms js reception")].join(", "); l.info("".concat(e.tag, " (#").concat(e.id, ") ").concat(t, " in ").concat(e.timings.ccTotal.toFixed(3), "ms (").concat(n, ").")) }), this.addDatabaseStateCallback((e, t) => l.info("".concat(e, " (state: ").concat(t, ")")))), this.initialized = !0) } } a(u, "counter", 0), a(u, "pending", new Map), a(u, "initialized", !1), a(u, "dbStateCallbacks", []), a(u, "completionCallbacks", []) }, 503461: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u, d; n.r(t), n.d(t, { ConflictOptions: function() { return a }, DatabaseState: function() { return s }, MAXIMUM_KEY_BITS: function() { return _ }, Ordering: function() { return r }, TableId: function() { return i } }), (o = i || (i = {})).Kv = "kv", o.KvCache = "kv_cache", o.Messages = "messages"; let _ = 5; (l = r || (r = {}))[l.Ascending = 0] = "Ascending", l[l.Descending = 1] = "Descending", (u = s || (s = {}))[u.Closed = 0] = "Closed", u[u.Open = 1] = "Open", u[u.Disabled = 2] = "Disabled", (d = a || (a = {}))[d.Skip = 0] = "Skip", d[d.Replace = 1] = "Replace" }, 218521: function(e, t, n) { "use strict"; n.r(t), n.d(t, { combineKey: function() { return r }, combineKeyPrefix: function() { return s } }), n("47120"), n("411104"); var i = n("503461"); function r(e, t) { let n = Array.isArray(t) ? [...e, ...t] : [...e, t]; if (n.length >= 1 && n.length <= i.MAXIMUM_KEY_BITS) return n; throw Error("combination results in an invalid key that has ".concat(n.length, " elements: ").concat(JSON.stringify(n))) } function s(e, t) { let n = Array.isArray(t) ? [...e, ...t] : [...e, t]; if (n.length <= i.MAXIMUM_KEY_BITS) return n; throw Error("combination results in an invalid prefix key that has ".concat(n.length, " elements: ").concat(JSON.stringify(n))) } }, 840498: function(e, t, n) { "use strict"; n.r(t), n.d(t, { astToString: function() { return r }, constrainAst: function() { return function e(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { limit: 200 }; if (Array.isArray(t)) { let r = t.length; for (let s = 0; s < r; s++) { let r = e(t[s], n); if (r === i) { t.length = s; break } t[s] = r } } else if ("text" !== t.type) { if (n.limit -= 1, n.limit <= 0) return i; Array.isArray(t.content) && (t.content = e(t.content, n)), "list" === t.type && (t.items = t.items.map(t => e(t, n))) } return t } }, flattenAst: function() { return function e(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null; if (Array.isArray(t)) { let i = t.length, r = []; for (let s = 0; s < i; s++) ! function(e, t) { if (Array.isArray(t)) { let { length: n } = t; for (let i = 0; i < n; i++) e.push(t[i]); return } e.push(t) }(r, e(t[s], n)); return r } return (null != t.content && (t.content = e(t.content, t)), "list" === t.type && (t.items = t.items.map(t => Array.isArray(t) ? e(t, null) : t)), null != n && t.type === n.type) ? t.content : t } } }), n("653041"); let i = {}; function r(e) { return (function e(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : []; return Array.isArray(t) ? t.forEach(t => e(t, n)) : "string" == typeof t.content ? n.push(t.content) : null != t.content && e(t.content, n), n })(e).join("") } }, 25209: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { astParserFor: function() { return a }, reactParserFor: function() { return s } }); var r = n("840498"); n.es(r, t); let s = (i = n("842091").default).reactParserFor, a = i.astParserFor }, 842091: function(e, t, n) { "use strict"; n.r(t); var i = n("302454"), r = n.n(i), s = n("840498"); function a(e, t, n, i, r) { let a; return !n && (t += "\n\n"), a = e(t, { inline: n, ...i }), a = (0, s.flattenAst)(a), a = (0, s.constrainAst)(a), null != r && (a = r(a, n)), a } t.default = { reactParserFor(e) { let t = r().parserFor(e), n = r().reactFor(r().ruleOutput(e, "react")); return function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", i = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; return n(a(t, e, i, r, s), r) } }, astParserFor(e) { let t = r().parserFor(e); return function() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", n = !(arguments.length > 1) || void 0 === arguments[1] || arguments[1], i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null; return a(t, e, n, i, r) } } } }, 839548: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BaseConnectionEvent: function() { return a.BaseConnectionEvent }, default: function() { return _ } }), n("47120"); var i = n("117806"), r = n.n(i), s = n("47770"), a = n("445686"), o = n("701597"), l = n("65154"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = 0; class _ extends s.default { destroy() { this.destroyed = !0, this.framerateReducer.destroy(), this.setConnectionState(l.ConnectionStates.DISCONNECTED), this.emit(a.BaseConnectionEvent.Destroy, this), this.removeAllListeners() } getLocalMute(e) { return this.localMutes[e] || !1 } getLocalVideoDisabled(e) { var t; return null !== (t = this.disabledLocalVideos[e]) && void 0 !== t && t } setLocalVideoDisabled(e, t) { this.disabledLocalVideos[e] = t, this.emit(a.BaseConnectionEvent.LocalVideoDisabled, e, t) } getHasActiveVideoOutputSink(e) { var t; return null !== (t = this.activeOutputSinks[e]) && void 0 !== t && t } setHasActiveVideoOutputSink(e, t) { this.isActiveOutputSinksEnabled = !0, this.activeOutputSinks[e] = t, this.emit(a.BaseConnectionEvent.ActiveSinksChange, e, t) } getActiveOutputSinkTrackingEnabled() { return this.isActiveOutputSinksEnabled } setUseElectronVideo(e) { this.useElectronVideo = e } setOnDesktopEncodingOptionsSet(e) {} setCallExperience(e) {} setClipRecordUser(e, t, n) {} setViewerSideClip(e) {} setRemoteAudioHistory(e) {} setClipsKeyFrameInterval(e) {} setQualityDecoupling(e) {} getStreamParameters() { return r()(this.videoStreamParameters) } setExperimentFlag(e, t) { t ? this.experimentFlags.add(e) : this.experimentFlags.delete(e) } setConnectionState(e) { this.logger.info("Connection state change: ".concat(this.connectionState, " => ").concat(e)), this.connectionState = e, this.emit(a.BaseConnectionEvent.ConnectionStateChange, this.connectionState) } updateVideoQuality(e) { let { quality: t, constraints: n } = this.applyQualityConstraints({}, this.videoStreamParameters[0].ssrc), i = r()(this.videoStreamParameters); null != t && (i[0].maxBitrate = t.bitrateMax, null != t.encode && (i[0].maxPixelCount = t.encode.pixelCount, i[0].maxFrameRate = t.encode.framerate)), this.videoStreamParameters = i; for (let e = 1; e < this.videoStreamParameters.length; e++) { let { quality: i, constraints: r } = this.applyQualityConstraints({}, this.videoStreamParameters[e].ssrc); null != i && (this.videoStreamParameters[e].maxBitrate = i.bitrateMax, null != i.encode && (this.videoStreamParameters[e].maxPixelCount = i.encode.pixelCount, this.videoStreamParameters[e].maxFrameRate = i.encode.framerate)), 100 === this.videoStreamParameters[e].quality && (n = r, t = i) } n.streamParameters = r()(this.videoStreamParameters), n.remoteSinkWantsPixelCount = Math.max(...this.videoStreamParameters.map(e => { var t; return null !== (t = e.maxPixelCount) && void 0 !== t ? t : 0 })); let s = this.pickProperties(n, e); this.logger.info("updateVideoQuality: ".concat(JSON.stringify(s, void 0, 4))), this.updateVideoQualityCore(s, t) } applyVideoQualityMode(e) { if (this.context !== l.MediaEngineContextTypes.DEFAULT) return; let t = o.VIDEO_QUALITY_MODES_TO_OVERWRITES[e]; this.videoQualityManager.setQualityOverwrite(t), this.updateVideoQuality() } overwriteQualityForTesting(e) { this.videoQualityManager.setQualityOverwrite(e), this.updateVideoQuality() } applyQualityConstraints() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = arguments.length > 1 ? arguments[1] : void 0; return this.videoQualityManager.applyQualityConstraints(e, t) } pickProperties(e, t) { if (null == t || null == e) return e; let n = {}; for (let i of t) n[i] = e[i]; return n } initializeStreamParameters(e) { let t = this.videoQualityManager.getQuality(); this.videoStreamParameters = e.filter(e => (e.type === l.MediaTypes.VIDEO || e.type === l.MediaTypes.SCREEN) && "string" == typeof e.rid).map(e => { var n, i, r, s; return { type: e.type, active: e.active, rid: e.rid, ssrc: e.ssrc, rtxSsrc: e.rtxSsrc, quality: e.quality, maxBitrate: (null !== (s = e.quality) && void 0 !== s ? s : 100) < 100 ? t.bitrateMax / 4 : t.bitrateMax, maxFrameRate: null === (n = t.capture) || void 0 === n ? void 0 : n.framerate, maxResolution: { type: l.ResolutionTypes.FIXED, width: null === (i = t.capture) || void 0 === i ? void 0 : i.width, height: null === (r = t.capture) || void 0 === r ? void 0 : r.height }, profile: e.profile } }) } getLocalWant(e) { var t, n; let i = this.remoteVideoSinkWants[null !== (n = null != e ? e : null === (t = this.videoStreamParameters[0]) || void 0 === t ? void 0 : t.ssrc) && void 0 !== n ? n : 0]; if (null != i && i > 0) return i; let r = this.remoteVideoSinkWants.any; return null != r && r > 0 ? r : 100 } async emitStats() { let e = await this.getStats(); return null != e && this.emit(a.BaseConnectionEvent.Stats, e), e } constructor(e, t) { super(), u(this, "mediaEngineConnectionId", "WebRTC-".concat(d++)), u(this, "context", void 0), u(this, "userId", void 0), u(this, "streamUserId", void 0), u(this, "destroyed", !1), u(this, "audioSSRC", 0), u(this, "selfDeaf", !1), u(this, "localMutes", {}), u(this, "disabledLocalVideos", {}), u(this, "localVolumes", {}), u(this, "isActiveOutputSinksEnabled", !1), u(this, "activeOutputSinks", {}), u(this, "videoSupported", !1), u(this, "useElectronVideo", !1), u(this, "voiceBitrate", l.DEFAULT_VOICE_BITRATE), u(this, "remoteSinkWantsMaxFramerate", l.VIDEO_QUALITY_FRAMERATE), u(this, "videoQualityManager", void 0), u(this, "wantsPriority", new Set), u(this, "localSpeakingFlags", {}), u(this, "videoReady", !1), u(this, "videoStreamParameters", []), u(this, "remoteVideoSinkWants", { any: 100 }), u(this, "localVideoSinkWants", { any: 100 }), u(this, "connectionState", l.ConnectionStates.CONNECTING), u(this, "stats", void 0), u(this, "onDesktopEncodingOptionsSet", (e, t, n) => {}), u(this, "experimentFlags", new Set), u(this, "framerateReducer", void 0), this.context = e, this.userId = t, this.videoQualityManager = new o.VideoQualityManager(e, this); let i = n("988746").default; this.framerateReducer = new i(this, this.videoQualityManager) } } }, 445686: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { BaseConnectionEvent: function() { return i } }), (r = i || (i = {})).Destroy = "destroy", r.LocalVideoDisabled = "local-video-disabled", r.ActiveSinksChange = "active-sinks-change", r.ExperimentFlag = "experiment-flag", r.ConnectionStateChange = "connectionstatechange", r.Error = "error", r.Connected = "connected", r.VideoHookStart = "videohook-start", r.VideoHookStop = "videohook-stop", r.VideoHookInitialize = "videohook-initialize", r.ScreenshareFinish = "screenshare-finish", r.VideoState = "video-state", r.SoundshareTrace = "soundsharetrace", r.SoundshareSpeaking = "soundsharespeaking", r.SoundshareAttached = "soundshareattached", r.SoundshareFailed = "soundsharefailed", r.Speaking = "speaking", r.SpeakingWhileMuted = "speakingwhilemuted", r.Mute = "mute", r.ToggleMuteFromNative = "toggle-mute", r.NativeMuteChanged = "native-mute-changed", r.LocalMute = "local-mute", r.NoiseLevel = "noiselevel", r.Video = "video", r.Ping = "ping", r.PingTimeout = "pingtimeout", r.Silence = "silence", r.DesktopSourceEnd = "desktopsourceend", r.OutboundLossRate = "outboundlossrate", r.NoiseCancellationError = "noisecancellererror", r.VoiceActivityDetectorError = "voiceactivitydetectorerror", r.InteractionRequired = "interactionrequired", r.AudioPermission = "audio-permission", r.VideoPermission = "video-permission", r.Stats = "stats", r.FirstFrame = "first-frame", r.VideoEncoderFallback = "video-encoder-fallback", r.RemoteStreamsReady = "remote-streams-ready" }, 60541: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BaseSpeedTesterEvent: function() { return r.BaseSpeedTesterEvent }, default: function() { return l } }); var i = n("47770"), r = n("11934"), s = n("65154"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = 0; class l extends i.default { destroy() { this.destroyed = !0, this.setConnectionState(s.ConnectionStates.DISCONNECTED), this.emit(r.BaseSpeedTesterEvent.Destroy, this), this.removeAllListeners() } setConnectionState(e) { this.connectionState = e, this.emit(r.BaseSpeedTesterEvent.ConnectionStateChange, this.connectionState) } initializeStreamParameters(e) { this.videoStreamParameters = e.filter(e => e.type === s.MediaTypes.TEST).map(e => { var t; return { type: e.type, active: e.active, rid: null !== (t = e.rid) && void 0 !== t ? t : "", ssrc: e.ssrc } }) } constructor(e) { super(), a(this, "mediaEngineConnectionId", "WebRTC-".concat(o++)), a(this, "userId", void 0), a(this, "streamUserId", void 0), a(this, "destroyed", !1), a(this, "audioSSRC", 0), a(this, "videoStreamParameters", []), a(this, "connectionState", s.ConnectionStates.CONNECTING), this.userId = e } } }, 11934: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { BaseSpeedTesterEvent: function() { return i } }), (r = i || (i = {})).Destroy = "destroy", r.ConnectionStateChange = "connectionstatechange", r.Error = "error", r.Connected = "connected", r.Ping = "ping", r.PingTimeout = "pingtimeout" }, 988746: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }); var i = n("259443"), r = n("46973"), s = n("65154"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = new i.Logger("ConnectionEventFramerateReducer"); class l { initialize() { this.userSpeakingChange(!0) } userSpeakingChange(e) { if (!this.connection.hasDesktopSource()) { if (this.destroyFramerateScaleFactorTimers(), !e) { this.sinkWants.isMuted && (this.sinkWants.isMuted = !1, this.updateRemoteWantsFramerate()); return } this.framerateReductionTimeout = setTimeout(() => { !this.connection.destroyed && (o.info("BaseConnection.userSpeakingChange: Reduced framerate after ".concat(s.VIDEO_QUALITY_FRAMRATE_NOT_SPEAKING_TIMEOUT, " ms.")), this.framerateReductionTimeout = void 0, this.sinkWants.isMuted = !0, this.updateRemoteWantsFramerate()) }, s.VIDEO_QUALITY_FRAMRATE_NOT_SPEAKING_TIMEOUT) } } destroyFramerateScaleFactorTimers() { "number" == typeof this.framerateReductionTimeout && (clearTimeout(this.framerateReductionTimeout), this.framerateReductionTimeout = void 0) } updateRemoteWantsFramerate() { this.connection.updateVideoQuality(["remoteSinkWantsMaxFramerate"]) } destroy() { this.destroyFramerateScaleFactorTimers() } constructor(e, t) { a(this, "connection", void 0), a(this, "sinkWants", void 0), a(this, "framerateReductionTimeout", void 0), a(this, "handleSpeaking", void 0), a(this, "handleSelfMute", void 0), this.connection = e, this.sinkWants = t, this.handleSpeaking = (e, t) => { e === this.connection.userId && this.userSpeakingChange(t === s.SpeakingFlags.NONE) }, this.handleSelfMute = e => { !this.connection.hasDesktopSource() && (this.destroyFramerateScaleFactorTimers(), this.sinkWants.isMuted = e, this.updateRemoteWantsFramerate()) }, e.on(r.BaseConnectionEvent.Speaking, this.handleSpeaking), e.on(r.BaseConnectionEvent.Mute, this.handleSelfMute), this.initialize() } } }, 65154: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AudioSubsystems: function() { return M }, Codecs: function() { return y }, ConnectionStates: function() { return C }, DEFAULT_CALL_BITRATE: function() { return z }, DEFAULT_CALL_MAX_BITRATE: function() { return X }, DEFAULT_CALL_MIN_BITRATE: function() { return Z }, DEFAULT_DEVICE_ID: function() { return j }, DEFAULT_PRIORITY_SPEAKER_DUCKING: function() { return K }, DEFAULT_SOUNDSHARE_VOICE_BITRATE: function() { return Y }, DEFAULT_STREAM_VOLUME: function() { return F }, DEFAULT_VOICE_BITRATE: function() { return H }, DEFAULT_VOLUME: function() { return x }, DESKTOP_BITRATE: function() { return et }, DESKTOP_BITRATE_ENHANCED: function() { return en }, DESKTOP_LOW_QUALITY_STREAM_MAX_BITRATE: function() { return ei }, DISABLED_DEVICE_ID: function() { return W }, DesktopSources: function() { return V.DesktopSources }, DeviceTypes: function() { return p }, ExperimentFlags: function() { return w }, Features: function() { return v }, InputModes: function() { return O }, MEDIA_SINK_WANTS_PROPERTIES: function() { return er }, MediaEngineContextTypes: function() { return N }, MediaEngineImplementations: function() { return D }, MediaTypes: function() { return U }, NoiseCancellerError: function() { return B }, PING_INTERVAL: function() { return Q }, ResolutionTypes: function() { return G }, SimulcastOverrideQuality: function() { return L }, SpeakingFlags: function() { return P }, StatsFilter: function() { return R }, VIDEO_QUALITY_FRAMERATE: function() { return J }, VIDEO_QUALITY_FRAMERATE_MUTED: function() { return $ }, VIDEO_QUALITY_FRAMERATE_MUTED_2: function() { return ee }, VIDEO_QUALITY_FRAMRATE_NOT_SPEAKING_TIMEOUT: function() { return q }, VIEWERSIDE_CLIP_KFI_MS: function() { return ea }, VideoQualityMode: function() { return k }, VideoToggleReason: function() { return g }, defaultVideoQualityOptions: function() { return es } }); var i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p, O, C, R, g, L, v, D, M, y, P, U, b, G, w, k, B, V = n("268146"); (i = N || (N = {})).DEFAULT = "default", i.STREAM = "stream", (r = p || (p = {})).AUDIO_INPUT = "audioinput", r.AUDIO_OUTPUT = "audiooutput", r.VIDEO_INPUT = "videoinput", (s = O || (O = {})).PUSH_TO_TALK = "PUSH_TO_TALK", s.VOICE_ACTIVITY = "VOICE_ACTIVITY", (a = C || (C = {})).DISCONNECTED = "DISCONNECTED", a.CONNECTING = "CONNECTING", a.CONNECTED = "CONNECTED", a.NO_ROUTE = "NO_ROUTE", a.ICE_CHECKING = "ICE_CHECKING", a.DTLS_CONNECTING = "DTLS_CONNECTING", (o = R || (R = {}))[o.TRANSPORT = 1] = "TRANSPORT", o[o.OUTBOUND = 2] = "OUTBOUND", o[o.INBOUND = 4] = "INBOUND", o[o.ALL = 7] = "ALL", (l = g || (g = {})).MANUAL_DISABLE = "video_manual_disable", l.MANUAL_ENABLE = "video_manual_enable", l.MANUAL_REENABLE = "video_manual_reenable", l.AUTO_DISABLE = "video_auto_disable", l.AUTO_ENABLE = "video_auto_enable", l.AUTO_DOWNGRADE = "video_auto_downgrade", l.AUTO_UPGRADE = "video_auto_upgrade,", (u = L || (L = {})).NO_OVERRIDE = "no_override", u.HIGH = "high", u.LOW = "low"; let x = 100, F = 18, H = 64e3, Y = 128e3, j = "default", W = "disabled", K = .1, z = 6e5, Z = 15e4, X = 1e7, Q = 5e3, q = 15e3, J = 30, $ = 20, ee = 12, et = 4e6, en = 8e6, ei = 5e5, er = ["remoteSinkWantsPixelCount", "remoteSinkWantsMaxFramerate", "encodingVideoMinBitRate", "encodingVideoMaxBitRate", "encodingVideoBitRate", "streamParameters"], es = { videoBudget: { width: 1280, height: 720, framerate: J }, videoCapture: { width: 1280, height: 720, framerate: 30 }, videoBitrate: { min: 15e4, max: 25e5 }, desktopBitrate: { min: 5e5, max: 4e6, target: 6e5 }, videoBitrateFloor: 15e4 }, ea = 6e4; (d = v || (v = {})).AUTO_ENABLE = "AUTO_ENABLE", d.ATTENUATION = "ATTENUATION", d.AUDIO_INPUT_DEVICE = "AUDIO_INPUT_DEVICE", d.AUDIO_OUTPUT_DEVICE = "AUDIO_OUTPUT_DEVICE", d.VOICE_PROCESSING = "VOICE_PROCESSING", d.QOS = "QOS", d.NATIVE_PING = "NATIVE_PING", d.LEGACY_AUDIO_SUBSYSTEM = "LEGACY_AUDIO_SUBSYSTEM", d.EXPERIMENTAL_AUDIO_SUBSYSTEM = "EXPERIMENTAL_AUDIO_SUBSYSTEM", d.DEBUG_LOGGING = "DEBUG_LOGGING", d.AUTOMATIC_VAD = "AUTOMATIC_VAD", d.VOICE_PANNING = "VOICE_PANNING", d.DIAGNOSTICS = "DIAGNOSTICS", d.VIDEO = "VIDEO", d.DESKTOP_CAPTURE = "DESKTOP_CAPTURE", d.DESKTOP_CAPTURE_FORMAT = "DESKTOP_CAPTURE_FORMAT", d.DESKTOP_CAPTURE_APPLICATIONS = "DESKTOP_CAPTURE_APPLICATIONS", d.SOUNDSHARE = "SOUNDSHARE", d.LOOPBACK = "LOOPBACK", d.VIDEO_HOOK = "VIDEO_HOOK", d.EXPERIMENTAL_SOUNDSHARE = "EXPERIMENTAL_SOUNDSHARE", d.WUMPUS_VIDEO = "WUMPUS_VIDEO", d.ELEVATED_HOOK = "ELEVATED_HOOK", d.HYBRID_VIDEO = "HYBRID_VIDEO", d.OPEN_H264 = "OPEN_H264", d.EXPERIMENTAL_ENCODERS = "EXPERIMENTAL_ENCODERS", d.REMOTE_LOCUS_NETWORK_CONTROL = "REMOTE_LOCUS_NETWORK_CONTROL", d.SCREEN_PREVIEWS = "SCREEN_PREVIEWS", d.WINDOW_PREVIEWS = "WINDOW_PREVIEWS", d.AUDIO_DEBUG_STATE = "AUDIO_DEBUG_STATE", d.AEC_DUMP = "AEC_DUMP", d.DISABLE_VIDEO = "DISABLE_VIDEO", d.CONNECTION_REPLAY = "CONNECTION_REPLAY", d.SIMULCAST = "SIMULCAST", d.RTC_REGION_RANKING = "RTC_REGION_RANKING", d.DIRECT_VIDEO = "DIRECT_VIDEO", d.ELECTRON_VIDEO = "ELECTRON_VIDEO", d.MEDIAPIPE = "MEDIAPIPE", d.FIXED_KEYFRAME_INTERVAL = "FIXED_KEYFRAME_INTERVAL", d.SAMPLE_PLAYBACK = "SAMPLE_PLAYBACK", d.FIRST_FRAME_CALLBACK = "FIRST_FRAME_CALLBACK", d.REMOTE_USER_MULTI_STREAM = "REMOTE_USER_MULTI_STREAM", d.NOISE_SUPPRESSION = "NOISE_SUPPRESSION", d.NOISE_CANCELLATION = "NOISE_CANCELLATION", d.AUTOMATIC_GAIN_CONTROL = "AUTOMATIC_GAIN_CONTROL", d.CLIPS = "CLIPS", d.SPEED_TEST = "SPEED_TEST", d.IMAGE_QUALITY_MEASUREMENT = "IMAGE_QUALITY_MEASUREMENT", d.AMD_EXPERIMENTAL_RATE_CONTROL = "AMD_EXPERIMENTAL_RATE_CONTROL", d.GO_LIVE_HARDWARE = "GO_LIVE_HARDWARE", d.SCREEN_CAPTURE_KIT = "SCREEN_CAPTURE_KIT", d.CAPTURE_TIMEOUT_EXPERIMENTS = "CAPTURE_TIMEOUT_EXPERIMENTS", d.SCREEN_SOUNDSHARE = "SCREEN_SOUNDSHARE", (_ = D || (D = {})).NATIVE = "NATIVE", _.WEBRTC = "WEBRTC", _.DUMMY = "DUMMY", (c = M || (M = {})).LEGACY = "legacy", c.STANDARD = "standard", c.EXPERIMENTAL = "experimental", (E = y || (y = {})).OPUS = "opus", E.VP8 = "VP8", E.VP9 = "VP9", E.H264 = "H264", E.RTX = "rtx", E.TEST = "TEST", (I = P || (P = {}))[I.NONE = 0] = "NONE", I[I.VOICE = 1] = "VOICE", I[I.SOUNDSHARE = 2] = "SOUNDSHARE", I[I.PRIORITY = 4] = "PRIORITY", (T = U || (U = {})).AUDIO = "audio", T.VIDEO = "video", T.SCREEN = "screen", T.TEST = "test", (f = b || (b = {})).PLAYING = "playing", f.PAUSED = "paused", (S = G || (G = {})).FIXED = "fixed", S.SOURCE = "source", (h = w || (w = {})).VIDEOTOOLBOX_RATE_CONTROL = "videotoolbox_rate_control", h.SIGNAL_H265_SUPPORT = "signal_h265_support", h.SIGNAL_H265_DECODE_SUPPORT = "signal_h265_decode_support", h.SIGNAL_AV1_SUPPORT = "signal_av1_support", h.SIGNAL_AV1_HARDWARE_DECODE = "signal_av1_hardware_decode", h.STREAMER_CLIP = "streamer_clip", h.VIEWER_CLIP = "viewer_clip", h.MUTE_BEFORE_PROCESSING = "mute_before_processing", h.PTT_BEFORE_PROCESSING = "ptt_before_processing", h.SKIP_ENCODE = "skip_encode", h.RESET_DECODER_ON_ERRORS = "reset_decoder_on_errors", h.SOFTWARE_FALLBACK_ON_ERRORS = "software_fallback_on_errors", h.SOFTWARE_FALLBACK_ON_CONSECUTIVE_ERRORS = "software_fallback_on_consecutive_errors", h.GOLIVE_SIMULCAST = "golive_simulcast", (A = k || (k = {}))[A.AUTO = 1] = "AUTO", A[A.FULL = 2] = "FULL", (m = B || (B = {}))[m.CPU_OVERUSE = 1] = "CPU_OVERUSE", m[m.FAILED = 2] = "FAILED", m[m.VAD_CPU_OVERUSE = 3] = "VAD_CPU_OVERUSE", m[m.INITIALIZED = 4] = "INITIALIZED" }, 135670: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }), n("411104"), n("47120"); var i = n("47770"), r = n("46973"), s = n("65154"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function o(e) { return null } function l(e) { return null } class u extends i.default { destroy() { this.emit(r.MediaEngineEvent.Destroy), this.removeAllListeners() } interact() {} supported() { return __OVERLAY__ } supports(e) { if (e === s.Features.AUTO_ENABLE) return __OVERLAY__; return !1 } connect(e, t, n) { throw Error("NOT_IMPLEMENTED") } eachConnection() {} enable() { return Promise.resolve() } setInputVolume(e) {} setOutputVolume(e) {} getAudioInputDevices() { return Promise.resolve([]) } setAudioInputDevice(e) {} getAudioOutputDevices() { return Promise.resolve([]) } setAudioOutputDevice(e) {} getVideoInputDevices() { return Promise.resolve([]) } setVideoInputDevice(e) {} getSupportedVideoCodecs(e) { e([]) } getCodecCapabilities(e) { e("") } getCodecSurvey() { return Promise.reject(Error("getCodecSurvey is not implemented for MediaEngineDummy")) } getAudioSubsystem() { return s.AudioSubsystems.STANDARD } getAudioLayer() { return "" } setGoLiveSource(e, t) {} setClipsSource(e) {} setClipsQualitySettings(e, t, n) { return !1 } setDesktopSource(e) { arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : s.MediaEngineContextTypes.DEFAULT } setSoundshareSource(e, t, n) {} getDesktopSource() { return Promise.reject(Error("NO_STREAM")) } getDesktopSources() { return Promise.reject(Error("NO_STREAM")) } getScreenPreviews(e, t) { return Promise.reject(Error("UNSUPPORTED")) } getWindowPreviews(e, t) { return Promise.reject(Error("UNSUPPORTED")) } setClipBufferLength(e) {} saveClip(e, t) { return Promise.reject(Error("UNSUPPORTED")) } saveClipForUser(e, t, n) { return Promise.reject(Error("UNSUPPORTED")) } updateClipMetadata(e, t) { return Promise.reject(Error("UNSUPPORTED")) } exportClip(e, t) { return Promise.reject(Error("UNSUPPORTED")) } setAudioSubsystem(e) {} getDebugLogging() { return !1 } setDebugLogging(e) {} writeAudioDebugState() { return Promise.reject(Error("Audio debug state is not supported.")) } setExperimentalAdm(e) {} setLoopback(e, t) {} getLoopback() { return !1 } setH264Enabled(e) {} setAv1Enabled(e) {} setH265Enabled(e) {} setExperimentFlag(e, t) {} startAecDump() {} stopAecDump() {} setAecDump(e) {} createReplayConnection(e, t) { throw Error("Connection replay is not supported.") } setUseDirectVideo(e) {} setMaxSyncDelayOverride(e) {} rankRtcRegions(e) { return Promise.reject(Error("RTC region latency test is not supported.")) } applyMediaFilterSettings(e) { return Promise.resolve() } startLocalAudioRecording() { return Promise.reject(Error("startLocalAudioRecording is not supported.")) } stopLocalAudioRecording(e) {} speedTester(e, t) { throw Error("NOT_IMPLEMENTED") } setHasFullbandPerformance(e) {} getSupportedSecureFramesProtocolVersion() { return 0 } getSupportedBandwidthEstimationExperiments(e) { e([]) } constructor(...e) { super(...e), a(this, "Video", o), a(this, "Camera", l) } } }, 946695: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { MediaEngineEvent: function() { return i } }), (r = i || (i = {})).Destroy = "destroy", r.Silence = "silence", r.Connection = "connection", r.DeviceChange = "devicechange", r.VolumeChange = "volumechange", r.VoiceActivity = "voiceactivity", r.WatchdogTimeout = "watchdogtimeout", r.AudioPermission = "audio-permission", r.VideoPermission = "video-permission", r.DesktopSourceEnd = "desktopsourceend", r.ConnectionStats = "connection-stats", r.VideoInputInitialized = "video-input-initialized", r.ClipsRecordingRestartNeeded = "clips-recording-restart-needed", r.ClipsInitFailure = "clips-init-failure", r.ClipsRecordingEnded = "clips-recording-ended" }, 966146: function(e, t, n) { "use strict"; n.r(t), n.d(t, { MediaSinkWantsLadder: function() { return s } }), n("411104"), n("47120"), n("653041"); var i = n("65154"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class s { getMaxSinkValue(e) { if (e < 0) throw Error("getMaxSinkValue: Requested " + e); let t = this.orderedLadder[0].wantValue; for (let { pixelCount: n, wantValue: i } of this.orderedLadder) { if (n * e > this.pixelBudget) break; t = i } return t } getResolution(e) { let t = null; for (let n of this.orderedLadder) if (e >= n.wantValue) t = n; else break; return { width: (t = null != t ? t : this.orderedLadder[0]).width, height: t.height, budgetPortion: t.budgetPortion, mutedFramerate: t.mutedFramerate, framerate: t.framerate } } static calculateLadder(e) { let t = new Set([0, 4, 8, 10]), n = []; for (let i = 1; i < 4096; ++i) { let r = 16 * i / 9; if (t.has(r % 16) && t.has(i % 16)) { let t = r * i; n.push({ pixelCount: t, width: r, height: i, budgetPortion: t / e, wantValue: 0 }) } } let r = {}, a = 0, o = 100; for (let t = 1; t <= 25; ++t) { let l = 0, u = 0, d = 0; for (let i of n) { if (i.pixelCount * t > e) break; l = i.width, u = i.height, d = i.budgetPortion } if (a !== l) { let e = s.getMutedFramerate(o); r[o] = { width: l, height: u, budgetPortion: d, mutedFramerate: e, framerate: i.VIDEO_QUALITY_FRAMERATE }, o -= 10, a = l } } return r } static getMutedFramerate(e) { return e <= 20 ? i.VIDEO_QUALITY_FRAMERATE_MUTED_2 : i.VIDEO_QUALITY_FRAMERATE_MUTED } static calculateOrderedLadder(e) { let t = []; for (let n of Object.keys(e).map(e => Number(e)).sort((e, t) => e - t)) { if (0 === n) continue; let i = e[n]; t.push({ pixelCount: i.width * i.height, wantValue: n, ...i }) } return t } constructor(e = i.defaultVideoQualityOptions) { r(this, "pixelBudget", void 0), r(this, "ladder", void 0), r(this, "orderedLadder", void 0); let { width: t, height: n } = e.videoBudget; if (t <= 0 || n <= 0) throw Error("Invalid argument"); this.pixelBudget = t * n, this.ladder = s.calculateLadder(this.pixelBudget), this.orderedLadder = s.calculateOrderedLadder(this.ladder) } } }, 198274: function(e, t, n) { "use strict"; n.r(t), n.d(t, { STATS_INTERVAL: function() { return i } }); let i = 1e3 }, 701597: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VIDEO_QUALITY_MODES_TO_OVERWRITES: function() { return a }, VideoQuality: function() { return l }, VideoQualityManager: function() { return u } }), n("411104"); var i = n("966146"), r = n("65154"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = Object.freeze({ [r.VideoQualityMode.AUTO]: {}, [r.VideoQualityMode.FULL]: { encode: { width: 1280, height: 720 } } }); class o { constructor(e) { if (s(this, "capture", void 0), s(this, "encode", void 0), s(this, "bitrateMin", void 0), s(this, "bitrateMax", void 0), s(this, "bitrateTarget", void 0), s(this, "localWant", void 0), null == e.capture && null == e.encode) throw Error("Invalid arguments."); this.capture = null == e.capture ? void 0 : new l(e.capture), this.encode = null == e.encode ? void 0 : new l(e.encode), this.bitrateMin = e.bitrateMin, this.bitrateMax = e.bitrateMax, this.bitrateTarget = e.bitrateTarget, this.localWant = e.localWant } } class l { static equals(e, t) { return null == e && null == t || null != e && null != t && e.width === t.width && e.height === t.height && e.framerate === t.framerate } static extend(e, t) { var n, i, r, s, a; if (null == e) return t; if (null == t) return e; let o = null !== (i = null !== (n = null == t ? void 0 : t.width) && void 0 !== n ? n : null == e ? void 0 : e.width) && void 0 !== i ? i : 0, l = null !== (s = null !== (r = null == t ? void 0 : t.height) && void 0 !== r ? r : null == e ? void 0 : e.height) && void 0 !== s ? s : 0; return { width: o, height: l, framerate: null !== (a = null == t ? void 0 : t.framerate) && void 0 !== a ? a : null == e ? void 0 : e.framerate, pixelCount: o * l } } constructor(e) { s(this, "width", void 0), s(this, "height", void 0), s(this, "framerate", void 0), s(this, "pixelCount", void 0), this.width = e.width, this.height = e.height, this.framerate = e.framerate, this.pixelCount = e.width * e.height } } class u { getQuality(e) { let t = this.connection.getLocalWant(e), n = this.isStreamContext ? this.getGoliveQuality(t) : this.getVideoQuality(t); if (null != this.qualityOverwrite) { var i, r, s; return new o({ encode: l.extend(n.encode, this.qualityOverwrite.encode), capture: l.extend(n.capture, this.qualityOverwrite.capture), bitrateMin: null !== (i = this.qualityOverwrite.bitrateMin) && void 0 !== i ? i : n.bitrateMin, bitrateMax: null !== (r = this.qualityOverwrite.bitrateMax) && void 0 !== r ? r : n.bitrateMax, bitrateTarget: null !== (s = this.qualityOverwrite.bitrateTarget) && void 0 !== s ? s : n.bitrateTarget, localWant: n.localWant }) } return n } applyQualityConstraints(e, t) { let n = this.getQuality(t); return null != n.capture && (e.encodingVideoWidth = n.capture.width, e.encodingVideoHeight = n.capture.height, e.encodingVideoFrameRate = n.capture.framerate, e.captureVideoFrameRate = n.capture.framerate), null != n.encode && (e.remoteSinkWantsMaxFramerate = n.encode.framerate, e.remoteSinkWantsPixelCount = n.encode.pixelCount), null != n.bitrateTarget ? e.encodingVideoBitRate = n.bitrateTarget : e.encodingVideoBitRate = n.bitrateMax, e.encodingVideoMinBitRate = n.bitrateMin, e.encodingVideoMaxBitRate = n.bitrateMax, null != e.encodingVideoBitRate && null != e.encodingVideoMaxBitRate && (e.encodingVideoBitRate = Math.min(e.encodingVideoBitRate, e.encodingVideoMaxBitRate)), { quality: n, constraints: e } } setQualityOverwrite(e) { this.qualityOverwrite = e } setGoliveQuality(e) { var t, n, i; this.goliveMaxQuality = new o({ capture: l.extend(this.goliveMaxQuality.capture, e.capture), encode: l.extend(this.goliveMaxQuality.encode, e.encode), bitrateMin: null !== (t = e.bitrateMin) && void 0 !== t ? t : this.goliveMaxQuality.bitrateMin, bitrateMax: null !== (n = e.bitrateMax) && void 0 !== n ? n : this.goliveMaxQuality.bitrateMax, bitrateTarget: null !== (i = e.bitrateTarget) && void 0 !== i ? i : this.goliveMaxQuality.bitrateTarget, localWant: this.goliveMaxQuality.localWant }) } setGoliveSimulcast(e) { this.goliveSimulcastEnabled = e } getVideoQuality(e) { let t = this.ladder.getResolution(e), n = this.options.videoBitrate.min * t.budgetPortion, i = this.options.videoBitrate.max * t.budgetPortion, r = this.isMuted ? t.mutedFramerate : t.framerate; return new o({ encode: { ...t, framerate: r }, capture: { width: this.options.videoCapture.width, height: this.options.videoCapture.height, framerate: this.options.videoCapture.framerate }, bitrateMin: n, bitrateMax: Math.max(i, this.options.videoBitrateFloor), localWant: e }) } getGoliveQuality(e) { if (this.goliveSimulcastEnabled && e < 100) { let e = this.getDefaultGoliveQuality(); return new o({ capture: e.capture, encode: e.encode, bitrateMin: 15e4, bitrateMax: r.DESKTOP_LOW_QUALITY_STREAM_MAX_BITRATE, bitrateTarget: r.DESKTOP_LOW_QUALITY_STREAM_MAX_BITRATE }) } return this.goliveMaxQuality } getDefaultGoliveQuality() { return new o({ capture: { width: 1280, height: 720, framerate: r.VIDEO_QUALITY_FRAMERATE }, encode: { width: 1280, height: 720, framerate: r.VIDEO_QUALITY_FRAMERATE, pixelCount: 921600 }, bitrateMin: this.options.desktopBitrate.min, bitrateMax: this.options.desktopBitrate.max, bitrateTarget: this.options.desktopBitrate.target }) } constructor(e, t, n = r.defaultVideoQualityOptions) { s(this, "contextType", void 0), s(this, "connection", void 0), s(this, "options", void 0), s(this, "isMuted", void 0), s(this, "qualityOverwrite", void 0), s(this, "goliveMaxQuality", void 0), s(this, "goliveSimulcastEnabled", void 0), s(this, "isStreamContext", void 0), s(this, "ladder", void 0), this.contextType = e, this.connection = t, this.options = n, this.isMuted = !1, this.isStreamContext = this.contextType === r.MediaEngineContextTypes.STREAM, this.ladder = new i.MediaSinkWantsLadder(n), this.goliveMaxQuality = this.getDefaultGoliveQuality(), this.goliveSimulcastEnabled = !1 } } }, 46973: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BaseConnectionEvent: function() { return u.BaseConnectionEvent }, BaseSpeedTesterEvent: function() { return d.BaseSpeedTesterEvent }, FilterSettingsGraph: function() { return o }, FilterSettingsKey: function() { return l }, FilterTargetType: function() { return a }, MediaEngineContextTypes: function() { return c.MediaEngineContextTypes }, MediaEngineEvent: function() { return _.MediaEngineEvent }, determineMediaEngine: function() { return I }, initializeMediaEngine: function() { return T } }); var i, r, s, a, o, l, u = n("839548"), d = n("60541"), _ = n("946695"), c = n("65154"); function E(e) { switch (e) { case c.MediaEngineImplementations.NATIVE: return n("743426").default; case c.MediaEngineImplementations.WEBRTC: return n("959856").default; case c.MediaEngineImplementations.DUMMY: default: return n("135670").default } } function I() { var e; return null !== (e = [c.MediaEngineImplementations.NATIVE, c.MediaEngineImplementations.WEBRTC].find(e => E(e).supported())) && void 0 !== e ? e : c.MediaEngineImplementations.DUMMY } function T(e) { return new(E(e)) }(i = a || (a = {})).INPUT_DEVICE = "input_device", i.STREAM = "stream", (r = o || (o = {})).NONE = "", r.BACKGROUND_BLUR = "background_blur", r.BACKGROUND_REPLACEMENT = "background_replacement", (s = l || (l = {})).CAMERA_BACKGROUND_PREVIEW = "cameraBackgroundPreview", s.CAMERA_BACKGROUND_LIVE = "cameraBackgroundLive" }, 997545: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return L } }), n("312677"), n("47120"), n("411104"), n("653041"); var i = n("595182"), r = n.n(i), s = n("117806"), a = n.n(s), o = n("565925"), l = n.n(o), u = n("971793"), d = n.n(u), _ = n("420994"), c = n("259443"), E = n("839548"), I = n("198274"), T = n("701597"), f = n("46973"), S = n("829839"), h = n("916057"), A = n("992774"), m = n("158466"), N = n("650886"), p = n("65154"), O = n("149396"); function C(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let R = 0; function g(e) { return null != e && 0 !== e ? e + 1 : 0 } class L extends E.default { static create(e, t, n) { let i = new L(e, t, !0); return i.initialize(n), i } static createReplay(e, t) { let n = new L(e, "0", !0), i = (0, A.getVoiceEngine)(); n.initializeStreamParameters([{ type: p.MediaTypes.VIDEO, rid: "100", ssrc: 0, rtxSsrc: 0, quality: 100, active: !1 }]); let r = i.createReplayConnection("default", (t, r) => { let s = null != i.getCodecCapabilities ? i.getCodecCapabilities : i.getSupportedVideoCodecs; n.on(f.BaseConnectionEvent.Stats, n.handleStats), n.conn.setOnVideoCallback(n.handleVideo), s(t => { let i = (0, S.getExperimentCodecs)(n.experimentFlags); n.codecs = [{ type: "audio", name: O.Codecs.OPUS, priority: 1, payloadType: 120 }, ...(0, S.filterVideoCodecs)(t, i).map((e, t) => { let n = 101 + 2 * t; return { type: "video", name: e.name, priority: t + 1, payloadType: n, rtxPayloadType: n + 1, encode: e.encode, decode: e.decode } })], n.setCodecs(O.Codecs.OPUS, O.Codecs.H264, e), n.conn.startReplay() }) }, t); return null == r ? null : (n.conn = r, n) } initialize(e) { let t; this.logger.info("Creating connection to ".concat(e.address, ":").concat(e.port, " with audio ssrc: ").concat(e.ssrc)), this.audioSSRC = e.ssrc, this.streamUserId = e.streamUserId, this.initializeStreamParameters(e.streamParameters), e.streamParameters = [{ type: p.MediaTypes.AUDIO, ssrc: this.audioSSRC, rid: "", maxBitrate: 64e3, soundshare: this.context === O.MediaEngineContextTypes.STREAM }, ...this.videoStreamParameters]; let n = (0, A.getVoiceEngine)(), i = null != n.getCodecCapabilities ? n.getCodecCapabilities : n.getSupportedVideoCodecs; if (null != n.createOwnStreamConnectionWithOptions) s = this.context === O.MediaEngineContextTypes.STREAM && this.streamUserId === this.userId ? n.createOwnStreamConnectionWithOptions : n.createVoiceConnectionWithOptions; else if (null != n.createOwnStreamConnection) { var r, s, a = this.context === O.MediaEngineContextTypes.STREAM && this.streamUserId === this.userId ? n.createOwnStreamConnection : n.createVoiceConnection; s = (e, t, n) => a(t.ssrc, this.userId, t.address, t.port, n, t.experiments, t.streamParameters) } else s = (e, t, i) => new n.VoiceConnection(t.ssrc, e, t.address, t.port, i, t.experiments, t.streamParameters); null === (r = (t = this.conn = s(this.userId, e, (r, s) => { if (this.destroyed) return; if (null != r && "" !== r) { this.setConnectionState(O.ConnectionStates.NO_ROUTE), this.emit(f.BaseConnectionEvent.Error, r); return } if (null == s) throw Error("Invalid transport info"); let { protocol: a, address: o, port: l } = s; this.logger.info("Connected with local address ".concat(o, ":").concat(l, " and protocol: ").concat(a)), i(i => { let r = (0, S.getExperimentCodecs)(this.experimentFlags); this.codecs = [{ type: "audio", name: O.Codecs.OPUS, priority: 1, payloadType: 120 }, ...(0, S.filterVideoCodecs)(i, r).map((e, t) => { let n = 101 + 2 * t; return { type: "video", name: e.name, priority: t + 1, payloadType: n, rtxPayloadType: n + 1, encode: e.encode, decode: e.decode } })], this.logger.info("Audio codecs: ".concat(this.codecs.filter(e => "audio" === e.type).map(e => e.name))), this.logger.info("Video codecs: ".concat(this.codecs.filter(e => "video" === e.type).map(e => e.name + "[encode: " + e.encode + ", decode: " + e.decode + "]"))), t.getEncryptionModes(i => { var r, s, u, d, _, c, E, I, T, S, h; this.logger.info("Encryption modes: ".concat(i)), t.setTransportOptions(this.getConnectionTransportOptions()), t.setSelfMute(this.selfMute || this.context === O.MediaEngineContextTypes.STREAM), t.setSelfDeafen(this.selfDeaf), t.setOnSpeakingCallback(this.handleSpeakingNative), null === (r = t.setOnNativeMuteToggleCallback) || void 0 === r || r.call(t, this.handleNativeMuteToggled), null === (s = t.setOnNativeMuteChangedCallback) || void 0 === s || s.call(t, this.handleNativeMuteChanged), null === (u = t.setOnSpeakingWhileMutedCallback) || void 0 === u || u.call(t, this.handleSpeakingWhileMuted), null === (d = t.setPingInterval) || void 0 === d || d.call(t, O.PING_INTERVAL), t.setPingCallback(this.handlePing), null === (_ = t.setPingTimeoutCallback) || void 0 === _ || _.call(t, this.handlePingTimeout), null === (c = t.setOnVideoEncoderFallbackCallback) || void 0 === c || c.call(t, this.handleVideoEncoderFallback), n.setTransportOptions({ builtInEchoCancellation: !0, echoCancellation: this.echoCancellation, noiseSuppression: this.noiseSuppression, automaticGainControl: this.automaticGainControl, noiseCancellation: this.noiseCancellation }), n.setNoInputThreshold(-100), n.setNoInputCallback(this.handleNoInput), this.videoSupported && (t.setOnVideoCallback(this.handleVideo), null === (E = t.setOnFirstFrameCallback) || void 0 === E || E.call(t, this.handleFirstFrame), null === (I = t.setOnDesktopSourceEnded) || void 0 === I || I.call(t, this.handleDesktopSourceEnded), null === (T = t.setOnSoundshare) || void 0 === T || T.call(t, this.handleSoundshare), null === (S = t.setOnSoundshareEnded) || void 0 === S || S.call(t, this.handleSoundshareEnded), null === (h = t.setOnSoundshareFailed) || void 0 === h || h.call(t, this.handleSoundshareFailed)), this.setConnectionState(O.ConnectionStates.CONNECTED), this.emit(f.BaseConnectionEvent.Connected, a, { address: o, port: l, mode: this.chooseEncryptionMode(e.modes, i), codecs: this.codecs }), this.on(f.BaseConnectionEvent.Stats, this.handleStats); let A = this.getUserOptions(); for (let e of (A.forEach(e => { var t, n; return this.logger.info("Creating user: ".concat(e.id, " with audio SSRC: ").concat(e.ssrc, " and video SSRCs: ").concat(null !== (n = null === (t = e.videoSsrcs) || void 0 === t ? void 0 : t.join(",")) && void 0 !== n ? n : 0)) }), t.mergeUsers(A), this.emit(f.BaseConnectionEvent.RemoteStreamsReady, A.length), Object.keys(this.localSpeakingFlags))) e !== this.userId && this.setSpeakingFlags(e, this.localSpeakingFlags[e]) }) }) })).setDesktopSourceStatusCallback) || void 0 === r || r.call(t, e => { if ("videohook_start" === e.type) this.emit(f.BaseConnectionEvent.VideoHookStart); else if ("videohook_stop" === e.type) this.emit(f.BaseConnectionEvent.VideoHookStop); else if ("videohook_initialize" === e.type) this.emit(f.BaseConnectionEvent.VideoHookInitialize, e.backend, e.format, e.framebufferFormat, e.sampleCount, e.success, e.reinitialization); else if ("screenshare_finish" === e.type) { var t; this.emit(f.BaseConnectionEvent.ScreenshareFinish, e.screenshareFrames, e.videohookFrames, e.hybridDxgiFrames, e.hybridGdiFrames, e.hybridVideohookFrames, e.hybridGraphicsCaptureFrames, e.hybridCaptureMethodSwitches, e.quartzFrames, null !== (t = e.desktopCapturerType) && void 0 !== t ? t : e.desktop_capturer_type, e.screens, e.windows, e.activity, e.goLiveCameraFrames, e.screenCaptureKitFrames) } else "video_state" === e.type ? this.emit(f.BaseConnectionEvent.VideoState, e.state) : e.type.startsWith("soundshare_") && this.emit(f.BaseConnectionEvent.SoundshareTrace, e) }), this.on("newListener", this.handleNewListenerNative) } destroy() { this.conn.destroy(), Object.keys(this.localSpeakingFlags).filter(e => e !== this.userId).forEach(e => this.emit(f.BaseConnectionEvent.Speaking, e, O.SpeakingFlags.NONE, this.remoteAudioSSRCs[e])), this.setConnectionState(O.ConnectionStates.DISCONNECTED), super.destroy() } setCodecs(e, t, n) { this.conn.setTransportOptions(this.getCodecOptions(e, t, n)), this.videoEncoderFallbackPending && (this.videoEncoderFallbackPending = !1) } getStats() { return this.connectionState === O.ConnectionStates.DISCONNECTED ? Promise.resolve(null) : (0, _.timeout)(new Promise(e => { null != this.conn.getFilteredStats ? this.conn.getFilteredStats(p.StatsFilter.ALL, t => e((0, m.default)(this.mediaEngineConnectionId, t, this.remoteVideoSinkWants, this.localVideoSinkWants))) : null != this.conn.getStats ? this.conn.getStats(t => e((0, m.default)(this.mediaEngineConnectionId, t, this.remoteVideoSinkWants, this.localVideoSinkWants))) : (0, A.getVoiceEngine)().getStats(t => e((0, m.default)(this.mediaEngineConnectionId, t, this.remoteVideoSinkWants, this.localVideoSinkWants))) }), I.STATS_INTERVAL).catch(e => { if (!(e instanceof _.TimeoutError)) throw e }) } createUser(e, t, n) { if (0 === t) { this.logger.warn("Attempting to create user ".concat(e, " with 0 audio SSRC")); return } let i = this.remoteAudioSSRCs[e], r = this.remoteVideoSSRCs[e]; r = void 0 !== r ? [...r].sort() : [], n = void 0 === n ? null != r ? r : [] : [...n].sort(); let s = i !== t, a = !l()(r, n); if (this.remoteAudioSSRCs[e] = t, this.remoteVideoSSRCs[e] = null != n ? n : [], this.userId !== e && (s || a)) { let i = void 0 !== n && n.length > 0 ? n[0] : 0, r = { id: e, ssrc: t, videoSsrc: i, videoSsrcs: n, rtxSsrc: g(i), mute: this.getLocalMute(e), volume: this.getLocalVolume(e) }; if (this.connectionState === O.ConnectionStates.CONNECTED) { var o; this.logger.info("Creating user: ".concat(e, " with audio SSRC: ").concat(t, " and video SSRCs: ").concat(null !== (o = null == n ? void 0 : n.join(",")) && void 0 !== o ? o : 0)), this.conn.mergeUsers([r]) } let s = this.localPans[e]; null != s && this.setLocalPan(e, s.left, s.right); let a = this.localSpeakingFlags[e]; null != a && a !== O.SpeakingFlags.NONE && this.setSpeakingFlags(e, a) } } destroyUser(e) { null != this.remoteAudioSSRCs[e] && (this.conn.destroyUser(e), delete this.remoteAudioSSRCs[e], delete this.remoteVideoSSRCs[e]) } setSelfMute(e) { this.selfMute = e, this.conn.setSelfMute(e), this.emit(f.BaseConnectionEvent.Mute, e) } setSelfDeaf(e) { this.selfDeaf = e, this.conn.setSelfDeafen(e) } setSoundshareSource(e, t) { if (this.soundshareId === e && this.soundshareSentSpeakingEvent || this.context !== O.MediaEngineContextTypes.STREAM) return; this.soundshareId = e, this.soundshareSentSpeakingEvent = !1; let n = e; null === n && (n = 0), this.conn.setTransportOptions({ soundsharePid: n, soundshareEventDriven: !0, soundshareLoopback: t }) } setLocalMute(e, t) { this.localMutes[e] = t, this.conn.setLocalMute(e, t), this.emit(f.BaseConnectionEvent.LocalMute, e, t) } fastUdpReconnect() { null != this.conn.fastUdpReconnect && (this.numFastUdpReconnects += 1, this.conn.fastUdpReconnect()) } getNumFastUdpReconnects() { return null != this.conn.fastUdpReconnect ? this.numFastUdpReconnects : null } wasRemoteDisconnected() { var e, t; null === (e = (t = this.conn).wasRemoteDisconnected) || void 0 === e || e.call(t) } setLocalVideoDisabled(e, t) { this.disabledLocalVideos[e] = t, this.emit(f.BaseConnectionEvent.LocalVideoDisabled, e, t) } setMinimumJitterBufferLevel(e) { this.minimumJitterBufferLevel = e } setPostponeDecodeLevel(e) { this.postponeDecodeLevel = e } setClipRecordUser(e, t, n) { !this.destroyed && this.conn.setClipRecordUser(e, (this.context === O.MediaEngineContextTypes.STREAM ? "application" : "user").concat("audio" === t ? "Audio" : "Video"), n) } setClipsKeyFrameInterval(e) { this.context === O.MediaEngineContextTypes.STREAM && (this.clipsKeyFrameInterval = e, this.conn.setTransportOptions({ keyframeInterval: this.getKeyFrameInterval(), alwaysSendVideo: this.keyframeInterval > 0 })) } setViewerSideClip(e) { this.context === O.MediaEngineContextTypes.STREAM && this.conn.setTransportOptions({ enableViewerSideClip: e }) } setRemoteAudioHistory(e) { this.conn.setTransportOptions({ remoteAudioHistoryMs: e }) } setQualityDecoupling(e) { this.context === O.MediaEngineContextTypes.STREAM && this.conn.setTransportOptions({ enableQualityDecoupling: e }) } getLocalVolume(e) { var t; let n = this.localVolumes[e]; return null == n && (n = this.context === O.MediaEngineContextTypes.DEFAULT ? O.DEFAULT_VOLUME : O.DEFAULT_STREAM_VOLUME), (null != (t = n) ? t : O.DEFAULT_VOLUME) / O.DEFAULT_VOLUME } setLocalVolume(e, t) { this.localVolumes[e] = t; try { this.conn.setLocalVolume(e, this.getLocalVolume(e)) } catch { this.logger.warn("Failed to set volume for user: ".concat(e, ": ").concat(t)) } } setLocalPan(e, t, n) { this.localPans[e] = { left: t, right: n }, this.conn.setLocalPan(e, t, n) } isAttenuating() { return this.attenuationFactor < 1 } setAttenuation(e, t, n) { this.attenuationFactor = (100 - e) / 100, this.attenuateWhileSpeakingSelf = t, this.attenuateWhileSpeakingOthers = n, this.conn.setTransportOptions(this.getAttenuationOptions()) } setCanHavePriority(e, t) { var n, i; null === (n = (i = this.conn).setRemoteUserCanHavePriority) || void 0 === n || n.call(i, e, t) } setBitRate(e) { this.setVoiceBitRate(e) } setVoiceBitRate(e) { if (this.voiceBitrate === e) return; this.voiceBitrate = e; let t = this.voiceBitrate; this.soundshareActive && (t = Math.max(O.DEFAULT_SOUNDSHARE_VOICE_BITRATE, t)), this.conn.setTransportOptions({ encodingVoiceBitRate: t }) } setCameraBitRate(e, t, n) { null != n || null != t ? this.videoQualityManager.setQualityOverwrite({ bitrateMin: null != n && n > 0 ? n : t, bitrateMax: t }) : this.videoQualityManager.setQualityOverwrite({}), !this.hasDesktopSource() && this.conn.setTransportOptions({ encodingVideoBitRate: e, encodingVideoMinBitRate: n, encodingVideoMaxBitRate: t }) } setEchoCancellation(e) { this.echoCancellation = e, (0, A.getVoiceEngine)().setTransportOptions({ echoCancellation: this.echoCancellation }) } setNoiseSuppression(e) { this.noiseSuppression = e, (0, A.getVoiceEngine)().setTransportOptions({ noiseSuppression: this.noiseSuppression }) } setAutomaticGainControl(e) { this.automaticGainControl = e, (0, A.getVoiceEngine)().setTransportOptions({ automaticGainControl: this.automaticGainControl }) } setNoiseCancellation(e) { this.noiseCancellation = e, (0, A.getVoiceEngine)().setTransportOptions({ noiseCancellation: this.noiseCancellation }) } setExperimentalEncoders(e) { this.experimentalEncoders = e, this.conn.setTransportOptions({ experimentalEncoders: this.experimentalEncoders }) } setHardwareH264(e) { this.hardwareH264 = e, this.conn.setTransportOptions({ hardwareH264: this.hardwareH264 }) } setQoS(e) { this.qos = e, this.conn.setTransportOptions({ qos: this.qos }) } setInputMode(e, t) { switch (this.inputMode = e, e) { case O.InputModes.PUSH_TO_TALK: this.pttReleaseDelay = t.pttReleaseDelay; break; case O.InputModes.VOICE_ACTIVITY: this.vadThreshold = t.vadThreshold, this.vadAutoThreshold = t.vadAutoThreshold, this.vadUseKrisp = t.vadUseKrisp, this.vadLeading = t.vadLeading, this.vadTrailing = t.vadTrailing; break; default: throw Error("Unknown Input Mode: ".concat(e)) } this.conn.setTransportOptions({ inputMode: O.NATIVE_MODE_VALUES[this.inputMode], inputModeOptions: this.createInputModeOptions() }) } setSilenceThreshold(e) { (0, A.getVoiceEngine)().setNoInputThreshold(e) } setForceAudioInput(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; t ? this.forceAudioPriority = e : this.forceAudioNormal = e, this.conn.setPTTActive(this.forceAudioPriority || this.forceAudioNormal, this.forceAudioPriority) } setSpeakingFlags(e, t) { null != this.conn.setRemoteUserSpeakingStatus ? this.conn.setRemoteUserSpeakingStatus(e, t) : null != this.conn.setRemoteUserSpeaking && this.conn.setRemoteUserSpeaking(e, (t & O.SpeakingFlags.VOICE) === O.SpeakingFlags.VOICE), this.handleSpeakingFlags(e, t) } clearAllSpeaking() {} setEncryption(e, t) { this.logger.info("Selected encryption mode: ".concat(e)), this.conn.setTransportOptions({ encryptionSettings: { mode: e, secretKey: t } }) } setReconnectInterval(e) { this.reconnectInterval = e, this.conn.setTransportOptions({ reconnectInterval: this.reconnectInterval }) } setKeyframeInterval(e) { this.keyframeInterval = e, this.conn.setTransportOptions({ keyframeInterval: this.getKeyFrameInterval(), alwaysSendVideo: this.keyframeInterval > 0 }) } setVideoQualityMeasurement(e) { this.videoQualityMeasurement = e, this.conn.setTransportOptions({ videoQualityMeasurement: this.videoQualityMeasurement }) } setVideoEncoderExperiments(e) { this.videoEncoderExperiments = e, this.conn.setTransportOptions({ videoEncoderExperiments: this.videoEncoderExperiments }) } setVideoBroadcast(e) { this.selfVideo !== e && (this.selfVideo = e, this.applyVideoTransportOptions()) } setGoLiveSource(e) { let { resolution: t, frameRate: n } = e.quality, i = t <= 480 ? t / 3 * 4 : t / 9 * 16, r = null; if (null != e.desktopDescription ? r = e.desktopDescription.id : null != e.cameraDescription && (r = "".concat(e.cameraDescription.videoDeviceGuid, ":").concat(e.cameraDescription.audioDeviceGuid)), this.goLiveSourceIdentifier === r) { this.onDesktopEncodingOptionsSet(i, t, n), this.setDesktopEncodingOptions(i, t, n); return } if (this.videoQualityManager.setGoliveSimulcast(this.experimentFlags.has(p.ExperimentFlags.GOLIVE_SIMULCAST)), this.goLiveSourceIdentifier = r, null != this.conn.setDesktopSource) { if (null != e.desktopDescription) { let { id: t, soundshareId: n, useLoopback: i, useVideoHook: r, useGraphicsCapture: s, useQuartzCapturer: a, allowScreenCaptureKit: o, videoHookStaleFrameTimeoutMs: l, graphicsCaptureStaleFrameTimeoutMs: u, hdrCaptureMode: d } = e.desktopDescription; this.setSoundshareSource(n, i); let [_, c] = null != t ? t.split(":") : ["", ""]; null != t ? this.logger.info("capturing desktop (type: ".concat(_, ", handle: ").concat(c, ", use-video-hook: ").concat(r.toString(), ", use-graphics-capture: ").concat(null == s ? void 0 : s.toString(), ").")) : this.logger.info("capturing desktop (type: )."), null != this.conn.setDesktopSourceWithOptions ? null != t ? this.conn.setDesktopSourceWithOptions({ type: _, sourceId: c, useVideoHook: r, useGraphicsCapture: s, useQuartzCapturer: a, allowScreenCaptureKit: o, videoHookStaleFrameTimeoutMs: l, graphicsCaptureStaleFrameTimeoutMs: u, hdrCaptureMode: d }) : this.conn.clearDesktopSource() : this.conn.setDesktopSource("wumpus-".concat(c), r, _) } else if (null != e.cameraDescription) { let { videoDeviceGuid: t, audioDeviceGuid: n } = e.cameraDescription; this.conn.setGoLiveDevices({ videoInputDeviceId: t, audioInputDeviceId: n }) } this.onDesktopEncodingOptionsSet(i, t, n), this.setDesktopEncodingOptions(i, t, n) } } clearGoLiveDevices() { null != this.goLiveSourceIdentifier && this.setDesktopEncodingOptions(1280, 720, 30), null != this.conn.clearGoLiveDevices && this.conn.clearGoLiveDevices() } clearDesktopSource() { null != this.goLiveSourceIdentifier && this.setDesktopEncodingOptions(1280, 720, 30), this.goLiveSourceIdentifier = null, null != this.conn.clearDesktopSource ? this.conn.clearDesktopSource() : this.conn.setDesktopSource("", !1, "") } setDesktopSourceStatusCallback(e) { var t, n; null === (t = (n = this.conn).setDesktopSourceStatusCallback) || void 0 === t || t.call(n, e) } hasDesktopSource() { return null != this.goLiveSourceIdentifier } setDesktopEncodingOptions(e, t, n) { if (this.destroyed) return; let i = 0 === t && n >= 10 || t > 720 || n > 30 ? p.DESKTOP_BITRATE_ENHANCED : p.DESKTOP_BITRATE, r = { width: e, height: t, framerate: n }, s = this.videoQualityManager.getQuality(); (!T.VideoQuality.equals(r, s.capture) || s.bitrateMax !== i) && (this.videoQualityManager.setGoliveQuality({ capture: r, encode: r, bitrateMax: i }), this.videoStreamParameters.length > 0 && (this.videoStreamParameters[0].maxResolution = { type: 0 === e && 0 === t ? O.ResolutionTypes.SOURCE : O.ResolutionTypes.FIXED, width: e, height: t }, this.videoStreamParameters[0].maxFrameRate = n, this.videoStreamParameters[0].maxBitrate = i), this.emit(f.BaseConnectionEvent.Video, this.userId, null, this.audioSSRC, this.videoStreamParameters[0].ssrc, g(this.videoStreamParameters[0].ssrc), this.videoStreamParameters), this.conn.setTransportOptions(this.applyQualityConstraints().constraints)) } setOnDesktopEncodingOptionsSet(e) { this.onDesktopEncodingOptionsSet = e } setCallExperience(e) { null != this.conn.setCallExperience && this.conn.setCallExperience(e) } setSDP(e) {} setRemoteVideoSinkWants(e) { this.remoteVideoSinkWants = e, this.updateVideoQuality(p.MEDIA_SINK_WANTS_PROPERTIES) } setLocalVideoSinkWants(e) { let t = this.localVideoSinkWants; for (let [a, o] of Object.entries(this.remoteVideoSSRCs)) { var n, i, r, s; let l = 0, u = 0; for (let n of o) l += null == t ? void 0 : t[n], u += null == e ? void 0 : e[n]; 0 === l && 0 !== u && (null === (n = (i = this.conn).setDisableLocalVideo) || void 0 === n || n.call(i, a, !1)), 0 !== l && 0 === u && (null === (r = (s = this.conn).setDisableLocalVideo) || void 0 === r || r.call(s, a, !0)) } this.localVideoSinkWants = e } startSamplesLocalPlayback(e, t, n, i) { if (t.numberOfChannels > 2) { i(1, "Too many channels"); return } for (var r = [], s = 0; s < t.numberOfChannels; s++) { var a = t.getChannelData(s); r.push(a) } this.conn.startSamplesLocalPlayback(e, { sampleRate: t.sampleRate, volume: n }, r, i) } stopAllSamplesLocalPlayback() { this.conn.stopAllSamplesLocalPlayback() } stopSamplesLocalPlayback(e) { this.conn.stopSamplesLocalPlayback(e) } setBandwidthEstimationExperiments(e) { this.conn.setTransportOptions({ bandwidthEstimationExperiments: e }) } updateVideoQualityCore(e, t) { this.videoSupported && !this.destroyed && this.conn.setTransportOptions(e) } setStreamParameters(e) { return new Promise((t, n) => { for (let t of this.videoStreamParameters) { let i = e.findIndex(e => e.rid === t.rid); if (-1 === i) { n(Error("Invalid rid")); return } let r = []; !l()(this.videoStreamParameters[i], e[i]) && (this.videoStreamParameters[i] = { ...e[i] }, r.push({ ...e[i] })), this.conn.setTransportOptions({ streamParameters: r }) } t() }) } applyVideoTransportOptions() { if (!this.videoSupported) return; let e = !1; if (this.hasDesktopSource() && this.videoStreamParameters.length > 0) { var t; e = (null === (t = this.videoStreamParameters[0].maxResolution) || void 0 === t ? void 0 : t.type) === O.ResolutionTypes.SOURCE } this.conn.setTransportOptions(this.applyQualityConstraints({ encodingVideoDegradationPreference: this.hasDesktopSource() ? e ? this.sourceDesktopDegradationPreference : this.desktopDegradationPreference : this.videoDegradationPreference }).constraints), this.conn.setVideoBroadcast(this.selfVideo) } chooseEncryptionMode(e, t) { for (let n of t) for (let t of e) if (n === t) return n; return "xsalsa20_poly1305" } getUserOptions() { return Object.keys(this.remoteAudioSSRCs).map(e => { let t = void 0 !== this.remoteVideoSSRCs[e] && this.remoteVideoSSRCs[e].length > 0 ? this.remoteVideoSSRCs[e][0] : 0; return { id: e, ssrc: this.remoteAudioSSRCs[e], videoSsrc: t, videoSsrcs: this.remoteVideoSSRCs[e], rtxSsrc: g(t), mute: this.getLocalMute(e), volume: this.getLocalVolume(e) } }) } createInputModeOptions() { switch (this.inputMode) { case O.InputModes.VOICE_ACTIVITY: return { vadThreshold: this.vadThreshold, vadAutoThreshold: this.vadAutoThreshold ? h.VADAggressiveness.VERY_AGGRESSIVE : h.VADAggressiveness.DISABLED, vadUseKrisp: this.vadUseKrisp, vadLeading: this.vadLeading, vadTrailing: this.vadTrailing }; case O.InputModes.PUSH_TO_TALK: return { pttReleaseDelay: this.pttReleaseDelay }; default: throw Error("Unknown Input Mode: ".concat(this.inputMode)) } } getAttenuationOptions() { return { attenuation: this.isAttenuating(), attenuationFactor: this.attenuationFactor, attenuateWhileSpeakingSelf: this.attenuateWhileSpeakingSelf, attenuateWhileSpeakingOthers: this.attenuateWhileSpeakingOthers } } getCodecParams(e, t) { return e !== O.Codecs.H264 ? {} : t ? { "level-asymmetry-allowed": "1", "packetization-mode": "1", "profile-level-id": "42e034", "hardware-h264": this.hardwareH264 && this.useElectronVideo && N.default.useDirectVideo ? "1" : "0" } : { "level-asymmetry-allowed": "1", "packetization-mode": "1", "profile-level-id": "android" === (0, A.getVoiceEngine)().platform ? "42e01f" : "4d0033", "hardware-h264": this.hardwareH264 && this.useElectronVideo && N.default.useDirectVideo ? "1" : "0" } } getCodecOptions(e, t, n) { var i, r, s, a; let o; let l = { type: null !== (i = null == (o = this.codecs.find(t => t.name === e)) ? void 0 : o.payloadType) && void 0 !== i ? i : 0, name: e, freq: 48e3, pacsize: 960, channels: 1, rate: 64e3 }, u = [{ type: null !== (r = null == o ? void 0 : o.payloadType) && void 0 !== r ? r : 0, name: e, freq: 48e3, channels: 2, params: { stereo: "1" } }]; n === O.MediaEngineContextTypes.STREAM && (l.channels = 2); let d = [], _ = { name: "", type: 0, rtxType: 0, params: {} }; for (o of this.codecs) { if (o.name === e) continue; let n = { name: (0, S.codecNameToPayloadName)(o.name), type: null !== (s = null == o ? void 0 : o.payloadType) && void 0 !== s ? s : 0, rtxType: null !== (a = null == o ? void 0 : o.rtxPayloadType) && void 0 !== a ? a : 0, params: this.getCodecParams(o.name, !0) }; this.experimentFlags.has(p.ExperimentFlags.RESET_DECODER_ON_ERRORS) && (n.params["reset-on-errors"] = "1"), this.experimentFlags.has(p.ExperimentFlags.SOFTWARE_FALLBACK_ON_ERRORS) && (n.params["fallback-after-errors"] = "3"), this.experimentFlags.has(p.ExperimentFlags.SOFTWARE_FALLBACK_ON_CONSECUTIVE_ERRORS) && (n.params["fallback-on-consecutive-errors"] = "1"), this.experimentFlags.has(p.ExperimentFlags.SIGNAL_AV1_HARDWARE_DECODE) && (n.params["hardware-av1-decode"] = "1"), d.push(n), o.name === t && (_ = { ...n, params: this.getCodecParams(o.name, !1) }, this.experimentFlags.has(p.ExperimentFlags.VIDEOTOOLBOX_RATE_CONTROL) && (_.params["fixed-rate-presentation-timestamps"] = "1")) } return { videoEncoder: _, videoDecoders: d, audioEncoder: l, audioDecoders: u } } getKeyFrameInterval() { return this.keyframeInterval > 0 && this.clipsKeyFrameInterval > 0 ? Math.min(this.keyframeInterval, this.clipsKeyFrameInterval) : Math.max(this.keyframeInterval, this.clipsKeyFrameInterval) } getConnectionTransportOptions() { let e = { selfMute: this.selfMute, inputMode: O.NATIVE_MODE_VALUES[this.inputMode], inputModeOptions: this.createInputModeOptions(), minimumJitterBufferLevel: this.minimumJitterBufferLevel, postponeDecodeLevel: this.postponeDecodeLevel, ...this.getAttenuationOptions(), fec: !0, packetLossRate: .3, qos: this.qos, prioritySpeakerDucking: O.DEFAULT_PRIORITY_SPEAKER_DUCKING, encodingVoiceBitRate: this.voiceBitrate, callBitRate: O.DEFAULT_CALL_BITRATE, callMinBitRate: O.DEFAULT_CALL_MIN_BITRATE, callMaxBitRate: O.DEFAULT_CALL_MAX_BITRATE, encodingVideoDegradationPreference: this.videoDegradationPreference, experimentalEncoders: this.experimentalEncoders, hardwareH264: this.hardwareH264, reconnectInterval: this.reconnectInterval }; return (0, A.supportsFeature)(O.NativeFeatures.VIDEO_EFFECTS) && this.context === O.MediaEngineContextTypes.STREAM && (e.enableVideoEffects = !0), this.experimentFlags.has(p.ExperimentFlags.MUTE_BEFORE_PROCESSING) && (e.muteBeforeProcessing = !0), this.experimentFlags.has(p.ExperimentFlags.PTT_BEFORE_PROCESSING) && (e.pttBeforeProcessing = !0), this.experimentFlags.has(p.ExperimentFlags.SKIP_ENCODE) && (e.skipEncode = !0), e } setStream(e) { throw Error("Method not implemented.") } getUserIdBySsrc(e) {} prepareSecureFramesTransition(e, t, n) { var i, r; null === (i = (r = this.conn).prepareSecureFramesTransition) || void 0 === i || i.call(r, e, t, n) } prepareSecureFramesEpoch(e, t, n) { var i, r; null === (i = (r = this.conn).prepareSecureFramesEpoch) || void 0 === i || i.call(r, e, t, n) } executeSecureFramesTransition(e) { var t, n; null === (t = (n = this.conn).executeSecureFramesTransition) || void 0 === t || t.call(n, e) } getMLSKeyPackage(e) { var t, n; null === (t = (n = this.conn).getMLSKeyPackage) || void 0 === t || t.call(n, e) } updateMLSExternalSender(e) { var t, n; null === (t = (n = this.conn).updateMLSExternalSender) || void 0 === t || t.call(n, e) } processMLSProposals(e, t) { var n, i; null === (n = (i = this.conn).processMLSProposals) || void 0 === n || n.call(i, e, t) } prepareMLSCommitTransition(e, t, n) { var i, r; null === (i = (r = this.conn).prepareMLSCommitTransition) || void 0 === i || i.call(r, e, t, n) } processMLSWelcome(e, t, n) { var i, r; null === (i = (r = this.conn).processMLSWelcome) || void 0 === i || i.call(r, e, t, n) } constructor(e, t, n) { super(e, t), C(this, "mediaEngineConnectionId", "Native-".concat(R++)), C(this, "goLiveSourceIdentifier", void 0), C(this, "selfMute", !1), C(this, "selfVideo", !1), C(this, "forceAudioNormal", !1), C(this, "forceAudioPriority", !1), C(this, "codecs", []), C(this, "videoEncoderFallbackPending", !1), C(this, "desktopDegradationPreference", (0, A.getVoiceEngine)().DegradationPreference.MAINTAIN_FRAMERATE), C(this, "sourceDesktopDegradationPreference", (0, A.getVoiceEngine)().DegradationPreference.DISABLED), C(this, "videoDegradationPreference", (0, A.getVoiceEngine)().DegradationPreference.BALANCED), C(this, "localPans", {}), C(this, "remoteAudioSSRCs", {}), C(this, "remoteVideoSSRCs", {}), C(this, "inputMode", O.InputModes.VOICE_ACTIVITY), C(this, "vadThreshold", -40), C(this, "vadAutoThreshold", !0), C(this, "vadUseKrisp", !0), C(this, "vadLeading", 5), C(this, "vadTrailing", 25), C(this, "pttReleaseDelay", 20), C(this, "soundshareActive", !1), C(this, "soundshareId", null), C(this, "soundshareSentSpeakingEvent", !1), C(this, "echoCancellation", !0), C(this, "noiseSuppression", !0), C(this, "automaticGainControl", !0), C(this, "noiseCancellation", !1), C(this, "experimentalEncoders", !1), C(this, "hardwareH264", !0), C(this, "attenuationFactor", .5), C(this, "attenuateWhileSpeakingSelf", !1), C(this, "attenuateWhileSpeakingOthers", !0), C(this, "qos", !0), C(this, "conn", void 0), C(this, "minimumJitterBufferLevel", 0), C(this, "postponeDecodeLevel", 100), C(this, "reconnectInterval", 6e4), C(this, "keyframeInterval", 0), C(this, "clipsKeyFrameInterval", 0), C(this, "videoQualityMeasurement", ""), C(this, "videoEncoderExperiments", ""), C(this, "numFastUdpReconnects", 0), C(this, "logger", void 0), C(this, "handleSpeakingNative", (e, t) => { let n = O.SpeakingFlags.NONE; n = "boolean" == typeof t ? t ? O.SpeakingFlags.VOICE : O.SpeakingFlags.NONE : t, this.handleSpeakingFlags(e, n) }), C(this, "handleNativeMuteToggled", () => { this.emit(f.BaseConnectionEvent.ToggleMuteFromNative) }), C(this, "handleNativeMuteChanged", e => { this.emit(f.BaseConnectionEvent.NativeMuteChanged, e) }), C(this, "handleSpeakingFlags", (e, t) => { this.localSpeakingFlags[e] = t; let n = e === this.userId ? this.audioSSRC : this.remoteAudioSSRCs[e]; this.emit(f.BaseConnectionEvent.Speaking, e, t, n), (t & O.SpeakingFlags.SOUNDSHARE) != 0 && !1 === this.soundshareSentSpeakingEvent && (this.emit(f.BaseConnectionEvent.SoundshareSpeaking), this.soundshareSentSpeakingEvent = !0) }), C(this, "handleSpeakingWhileMuted", () => { this.emit(f.BaseConnectionEvent.SpeakingWhileMuted) }), C(this, "handlePing", (e, t, n) => { this.emit(f.BaseConnectionEvent.Ping, e) }), C(this, "handlePingTimeout", (e, t, n, i) => { this.emit(f.BaseConnectionEvent.PingTimeout, n, i > 0 ? i : 4e3) }), C(this, "handleVideoEncoderFallback", e => { !this.videoEncoderFallbackPending && (this.logger.info("Falling back from current video encoder:" + e), this.codecs = this.codecs.map(t => ((e === t.name || "AV1" === t.name && "AV1X" === e) && (t.encode = !1), t)).filter(e => !("video" === e.type && !1 === e.encode && !1 === e.decode)), this.emit(f.BaseConnectionEvent.VideoEncoderFallback, this.codecs), this.videoEncoderFallbackPending = !0) }), C(this, "handleVideo", (e, t, n, i) => { let r = a()(this.videoStreamParameters); e === this.userId ? null != i && Array.isArray(i) && i.length > 0 ? i.forEach(e => { r.forEach((t, n) => { t.rid === e.rid && (r[n] = { ...t, ssrc: e.ssrc, rtxSsrc: e.rtxSsrc, active: e.active }) }) }) : t > 0 ? (r[0].active = !0, r[0].ssrc = t, r[0].rtxSsrc = g(t)) : r[0].active = !1 : t > 0 && (void 0 !== this.remoteVideoSSRCs[e] ? !this.remoteVideoSSRCs[e].includes(t) && (this.remoteVideoSSRCs[e] = [...this.remoteVideoSSRCs[e], t]) : this.remoteVideoSSRCs[e] = [t]), this.videoStreamParameters = r, this.emit(f.BaseConnectionEvent.Video, e, null != n && "" !== n ? n : null, e === this.userId ? this.audioSSRC : this.remoteAudioSSRCs[e], t, g(t), this.videoStreamParameters) }), C(this, "handleFirstFrame", (e, t, n) => { this.emit(f.BaseConnectionEvent.FirstFrame, e, t, n) }), C(this, "handleNoInput", e => { this.emit(f.BaseConnectionEvent.Silence, !e) }), C(this, "handleDesktopSourceEnded", () => { this.emit(f.BaseConnectionEvent.DesktopSourceEnd) }), C(this, "handleSoundshare", e => { e && (this.soundshareActive = !0, this.conn.setTransportOptions({ encodingVoiceBitRate: Math.max(O.DEFAULT_SOUNDSHARE_VOICE_BITRATE, this.voiceBitrate) }), this.emit(f.BaseConnectionEvent.SoundshareAttached)) }), C(this, "handleSoundshareFailed", (e, t, n) => { this.emit(f.BaseConnectionEvent.SoundshareFailed, { failureCode: e, failureReason: t, willRetry: n }) }), C(this, "handleSoundshareEnded", () => { this.soundshareActive = !1, !this.destroyed && this.conn.setTransportOptions({ encodingVoiceBitRate: this.voiceBitrate }) }), C(this, "handleNewListenerNative", e => { if (e === f.BaseConnectionEvent.ConnectionStateChange) this.emit(e, this.connectionState) }), C(this, "handleStats", e => { if (this.connectionState === O.ConnectionStates.DISCONNECTED) { this.off(f.BaseConnectionEvent.Stats, this.handleStats); return } if (null != e) { if (null != this.stats) { let t = d()(e.rtp.outbound, (e, t) => { var n, i; return e.lost += null !== (n = t.packetsLost) && void 0 !== n ? n : 0, e.sent += null !== (i = t.packetsSent) && void 0 !== i ? i : 0, e }, { lost: 0, sent: 0 }), n = d()(this.stats.rtp.outbound, (e, t) => { var n, i; return e.lost += null !== (n = t.packetsLost) && void 0 !== n ? n : 0, e.sent += null !== (i = t.packetsSent) && void 0 !== i ? i : 0, e }, { lost: 0, sent: 0 }), i = t.sent - n.sent, s = t.lost - n.lost; if (0 === i) this.emit(f.BaseConnectionEvent.OutboundLossRate, 0); else if (i > 0 && s >= 0) { let e = r()(s / (i + s), 0, 1); this.emit(f.BaseConnectionEvent.OutboundLossRate, 100 * e) } let a = e.rtp.outbound.filter(e => "audio" === e.type)[0], o = this.stats.rtp.outbound.filter(e => "audio" === e.type)[0]; if (null != a && null != o && null != a.framesCaptured && null != o.framesCaptured) { let e = a.framesCaptured - o.framesCaptured, t = null != a.noiseCancellerFrames ? null != o.noiseCancellerFrames ? a.noiseCancellerFrames - o.noiseCancellerFrames : 0 : e; if (this.noiseCancellation && t > 50 && null != a.noiseCancellerProcessTime && null != o.noiseCancellerProcessTime) { let e = a.noiseCancellerProcessTime - o.noiseCancellerProcessTime; e / t > 8 ? this.emit(f.BaseConnectionEvent.NoiseCancellationError, O.NoiseCancellerError.CPU_OVERUSE) : 0 === e && this.emit(f.BaseConnectionEvent.NoiseCancellationError, O.NoiseCancellerError.FAILED) } this.inputMode === O.InputModes.VOICE_ACTIVITY && this.vadAutoThreshold && this.vadUseKrisp && e > 50 && null != a.voiceActivityDetectorProcessTime && null != o.voiceActivityDetectorProcessTime && (a.voiceActivityDetectorProcessTime - o.voiceActivityDetectorProcessTime) / e > 4 && this.emit(f.BaseConnectionEvent.VoiceActivityDetectorError, O.NoiseCancellerError.VAD_CPU_OVERUSE) } } this.stats = e } }), this.logger = new c.Logger("Connection(".concat(e, ")")), this.videoSupported = n } } }, 149396: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AudioSubsystems: function() { return u.AudioSubsystems }, ClipsRecordingEvent: function() { return l }, Codecs: function() { return u.Codecs }, ConnectionStates: function() { return u.ConnectionStates }, DEFAULT_CALL_BITRATE: function() { return u.DEFAULT_CALL_BITRATE }, DEFAULT_CALL_MAX_BITRATE: function() { return u.DEFAULT_CALL_MAX_BITRATE }, DEFAULT_CALL_MIN_BITRATE: function() { return u.DEFAULT_CALL_MIN_BITRATE }, DEFAULT_DEVICE_ID: function() { return u.DEFAULT_DEVICE_ID }, DEFAULT_PRIORITY_SPEAKER_DUCKING: function() { return u.DEFAULT_PRIORITY_SPEAKER_DUCKING }, DEFAULT_SOUNDSHARE_VOICE_BITRATE: function() { return u.DEFAULT_SOUNDSHARE_VOICE_BITRATE }, DEFAULT_STREAM_VOLUME: function() { return u.DEFAULT_STREAM_VOLUME }, DEFAULT_VOLUME: function() { return u.DEFAULT_VOLUME }, DISABLED_DEVICE_ID: function() { return u.DISABLED_DEVICE_ID }, DeviceTypes: function() { return u.DeviceTypes }, Features: function() { return u.Features }, InputModes: function() { return u.InputModes }, MediaEngineContextTypes: function() { return u.MediaEngineContextTypes }, NATIVE_MODE_VALUES: function() { return _ }, NativeFeatures: function() { return a }, NoiseCancellerError: function() { return u.NoiseCancellerError }, PING_INTERVAL: function() { return u.PING_INTERVAL }, ProcessPriority: function() { return o }, ResolutionTypes: function() { return u.ResolutionTypes }, SpeakingFlags: function() { return u.SpeakingFlags }, WATCHDOG_TIMEOUT_MS: function() { return d } }); var i, r, s, a, o, l, u = n("65154"); let d = 3e4, _ = { [u.InputModes.VOICE_ACTIVITY]: 1, [u.InputModes.PUSH_TO_TALK]: 2 }; (i = a || (a = {})).VOICE_SOUND_STOP_LOOP = "voice_sound_stop_loop", i.VOICE_RELATIVE_SOUNDS = "voice_relative_sounds", i.VOICE_LEGACY_SUBSYSTEM = "voice_legacy_subsystem", i.VOICE_EXPERIMENTAL_SUBSYSTEM = "voice_experimental_subsystem", i.ELEVATED_HOOK = "elevated_hook", i.DEBUG_LOGGING = "debug_logging", i.SOUNDSHARE = "soundshare", i.SOUNDSHARE_LOOPBACK = "soundshare_loopback", i.SET_AUDIO_DEVICE_BY_ID = "set_audio_device_by_id", i.SET_VIDEO_DEVICE_BY_ID = "set_video_device_by_id", i.LOOPBACK = "loopback", i.WUMPUS_VIDEO = "wumpus_video", i.HYBRID_VIDEO = "hybrid_video", i.EXPERIMENTAL_ENCODERS = "experimental_encoders", i.EXPERIMENT_CONFIG = "experiment_config", i.REMOTE_LOCUS_NETWORK_CONTROL = "remote_locus_network_control", i.SCREEN_PREVIEWS = "screen_previews", i.WINDOW_PREVIEWS = "window_previews", i.AUDIO_DEBUG_STATE = "audio_debug_state", i.CONNECTION_REPLAY = "connection_replay", i.SIMULCAST = "simulcast", i.SIMULCAST_BUGFIX = "simulcast_bugfix", i.RTC_REGION_RANKING = "RTC_REGION_RANKING", i.VIDEO_EFFECTS = "video_effects", i.DIRECT_VIDEO = "direct_video", i.ELECTRON_VIDEO = "electron_video", i.MEDIAPIPE = "mediapipe", i.FIXED_KEYFRAME_INTERVAL = "fixed_keyframe_interval", i.FIRST_FRAME_CALLBACK = "first_frame_callback", i.REMOTE_USER_MULTI_STREAM = "remote_user_multi_stream", i.CLIPS = "clips", i.SPEED_TEST = "speed_test", i.GO_LIVE_HARDWARE = "go_live_hardware", i.IMAGE_QUALITY_MEASUREMENT = "image_quality_measurement", i.AMD_EXPERIMENTAL_RATE_CONTROL = "amd_experimental_rate_control", i.SCREEN_CAPTURE_KIT = "screen_capture_kit", i.CAPTURE_TIMEOUT_EXPERIMENTS = "capture_timeout_experiments", i.SCREEN_SOUNDSHARE = "screen_soundshare", (r = o || (o = {}))[r.LOW = 2] = "LOW", r[r.BELOW_NORMAL = 1] = "BELOW_NORMAL", r[r.NORMAL = 0] = "NORMAL", r[r.ABOVE_NORMAL = -1] = "ABOVE_NORMAL", r[r.HIGH = -2] = "HIGH", (s = l || (l = {}))[s.Started = 0] = "Started", s[s.Ended = 1] = "Ended", s[s.Error = 2] = "Error", s[s.TransferredToVoiceCall = 3] = "TransferredToVoiceCall", s[s.TransferredToGoLive = 4] = "TransferredToGoLive", s[s.StoppedByGoLive = 5] = "StoppedByGoLive", s[s.BlockedByGoLive = 6] = "BlockedByGoLive", s[s.GoLiveEnded = 7] = "GoLiveEnded" }, 501950: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getAudioInputDevices: function() { return l }, getAudioOutputDevices: function() { return u }, getVideoInputDevices: function() { return d }, sanitizeDevices: function() { return o } }), n("757143"), n("733860"); var i = n("264344"), r = n.n(i), s = n("992774"), a = n("149396"); function o(e, t) { var n; let i = !1, s = t.map((t, n) => { let { guid: r, guid: s, name: o, name: l, index: u } = t; return /^default/.test(o) ? (i = !0, r = a.DEFAULT_DEVICE_ID, o = o.replace("default", "Default")) : r = null != r && "" !== r ? r : o, null != u && (n = u), { id: r, type: e, index: n, name: o, originalName: l, originalId: s } }); return e !== a.DeviceTypes.VIDEO_INPUT && !i && (null === r() || void 0 === r() ? void 0 : null === (n = r().os) || void 0 === n ? void 0 : n.family) != null && /^win/i.test(r().os.family) && s.unshift({ id: a.DEFAULT_DEVICE_ID, type: e, index: -1, name: "Default" }), s } function l() { return new Promise(e => { (0, s.getVoiceEngine)().getInputDevices(t => e(o(a.DeviceTypes.AUDIO_INPUT, t))) }) } function u() { return new Promise(e => { (0, s.getVoiceEngine)().getOutputDevices(t => e(o(a.DeviceTypes.AUDIO_OUTPUT, t))) }) } function d() { return new Promise(e => { (0, s.getVoiceEngine)().getVideoInputDevices(t => e(o(a.DeviceTypes.VIDEO_INPUT, t))) }) } }, 801334: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("312677"), n("411104"), n("47120"); var i = n("259443"), r = n("60541"), s = n("46973"), a = n("992774"), o = n("149396"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let u = new i.Logger("SpeedTester"), d = 0; class _ extends r.default { static create(e, t) { let n = new _(e); return u.info("Creating connection to ".concat(t.address, ":").concat(t.port, " with audio ssrc: ").concat(t.ssrc)), n.initialize(t), n } initialize(e) { let t; this.audioSSRC = e.ssrc, this.streamUserId = e.streamUserId, this.pingInterval = o.PING_INTERVAL, this.initializeStreamParameters(e.streamParameters), e.streamParameters = this.videoStreamParameters; let n = (0, a.getVoiceEngine)(); t = this.conn = n.createSpeedTestConnectionWithOptions(this.userId, e, (n, i) => { if (this.destroyed) return; if (null != n && "" !== n) { this.setConnectionState(o.ConnectionStates.NO_ROUTE), this.emit(s.BaseSpeedTesterEvent.Error, n); return } if (null == i) throw Error("Invalid transport info"); let { protocol: r, address: a, port: l } = i; u.info("Connected with local address ".concat(a, ":").concat(l, " and protocol: ").concat(r)), this.codecs = [{ type: "audio", name: o.Codecs.OPUS, priority: 1, payloadType: 120 }, { type: "test", name: o.Codecs.TEST, priority: 1, payloadType: 127 }], t.getEncryptionModes(n => { var i, d; u.info("Encryption modes: ".concat(n)), t.setTransportOptions(this.getConnectionTransportOptions()), null === (i = t.setPingInterval) || void 0 === i || i.call(t, this.pingInterval), t.setPingCallback(this.handlePing), null === (d = t.setPingTimeoutCallback) || void 0 === d || d.call(t, this.handlePingTimeout), this.setConnectionState(o.ConnectionStates.CONNECTED), this.emit(s.BaseSpeedTesterEvent.Connected, r, { address: a, port: l, mode: this.chooseEncryptionMode(e.modes, n), codecs: this.codecs }) }) }), this.on("newListener", this.handleNewListenerNative) } destroy() { this.conn.destroy(), this.setConnectionState(o.ConnectionStates.DISCONNECTED), super.destroy() } setCodecs(e, t) { this.conn.setTransportOptions(this.getCodecOptions(e, t)) } setEncryption(e, t) { this.conn.setTransportOptions({ encryptionSettings: { mode: e, secretKey: t } }) } setSDP(e) {} getNetworkOverhead(e) { this.conn.getNetworkOverhead(e) } setPingInterval(e) { var t, n; this.pingInterval = e, null === (t = (n = this.conn).setPingInterval) || void 0 === t || t.call(n, this.pingInterval) } startSpeedTestSender(e, t, n, i) { null != this.conn.startSpeedTestSender ? this.conn.startSpeedTestSender({ clusterSize: t, clusterIntervalMs: n, numClusters: i }, e) : this.conn.startClientToServerSpeedTest({ doneCb: e, clusterSize: t, clusterIntervalMs: n, numClusters: i }) } stopSpeedTestSender() { null != this.conn.stopSpeedTestSender ? this.conn.stopSpeedTestSender() : this.conn.endClientToServerSpeedTest({}) } startSpeedTestReceiver(e, t) { null != this.conn.startSpeedTestReceiver ? this.conn.startSpeedTestReceiver({ packetLimit: t }, e) : this.conn.startServerToClientSpeedTest({ readyCb: e, packetLimit: t }) } stopSpeedTestReceiver(e) { null != this.conn.stopSpeedTestReceiver ? this.conn.stopSpeedTestReceiver(e) : this.conn.endServerToClientSpeedTest({ doneCb: e }) } chooseEncryptionMode(e, t) { for (let n of t) for (let t of e) if (n === t) return n; return "xsalsa20_poly1305" } getConnectionTransportOptions() { return { qos: this.qos, reconnectInterval: this.reconnectInterval } } getCodecOptions(e, t) { var n, i, r, s; let a; let o = { type: null !== (n = null == (a = this.codecs.find(t => t.name === e)) ? void 0 : a.payloadType) && void 0 !== n ? n : 0, name: e, freq: 48e3, pacsize: 960, channels: 1, rate: 64e3 }, l = [{ type: null !== (i = null == a ? void 0 : a.payloadType) && void 0 !== i ? i : 0, name: e, freq: 48e3, channels: 2, params: { stereo: "1" } }], u = { type: null !== (r = null == (a = this.codecs.find(e => e.name === t)) ? void 0 : a.payloadType) && void 0 !== r ? r : 0 }; return { audioEncoder: o, audioDecoders: l, testEncoder: u, testDecoder: { type: null !== (s = null == a ? void 0 : a.payloadType) && void 0 !== s ? s : 0 } } } getUserIdBySsrc(e) {} constructor(...e) { super(...e), l(this, "mediaEngineConnectionId", "Native-".concat(d++)), l(this, "codecs", []), l(this, "qos", !0), l(this, "conn", void 0), l(this, "reconnectInterval", 6e4), l(this, "pingInterval", o.PING_INTERVAL), l(this, "handlePing", (e, t, n) => { this.emit(s.BaseSpeedTesterEvent.Ping, e) }), l(this, "handlePingTimeout", (e, t, n, i) => { this.emit(s.BaseSpeedTesterEvent.PingTimeout, n, i > 0 ? i : 4e3) }), l(this, "handleNewListenerNative", e => { if (e === s.BaseSpeedTesterEvent.ConnectionStateChange) this.emit(e, this.connectionState) }) } } }, 916057: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { VADAggressiveness: function() { return i } }), (s = i || (i = {}))[s.DISABLED = -1] = "DISABLED", s[s.NORMAL = 0] = "NORMAL", s[s.LOW_BIRTATE = 1] = "LOW_BIRTATE", s[s.AGGRESSIVE = 2] = "AGGRESSIVE", s[s.VERY_AGGRESSIVE = 3] = "VERY_AGGRESSIVE", (a = r || (r = {}))[a.NONE = 0] = "NONE", a[a.TIMEOUT = 1] = "TIMEOUT" }, 743426: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return h } }), n("47120"), n("411104"); var i = n("264344"), r = n.n(i), s = n("259443"), a = n("47770"), o = n("46973"), l = n("734298"), u = n("997545"), d = n("501950"), _ = n("801334"), c = n("992774"), E = n("656795"), I = n("650886"), T = n("149396"); function f(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function S(e) { return (null != e ? e : T.DEFAULT_VOLUME) / T.DEFAULT_VOLUME } class h extends a.default { destroy() { this.eachConnection(e => e.destroy()), this.emit(o.MediaEngineEvent.Destroy), this.removeAllListeners() } interact() {} static supported() { return (0, c.supported)() } supported() { return !0 } supports(e) { var t, n; switch (e) { case T.Features.LEGACY_AUDIO_SUBSYSTEM: return (0, c.supportsFeature)(T.NativeFeatures.VOICE_LEGACY_SUBSYSTEM); case T.Features.EXPERIMENTAL_AUDIO_SUBSYSTEM: return (0, c.supportsFeature)(T.NativeFeatures.VOICE_EXPERIMENTAL_SUBSYSTEM); case T.Features.DEBUG_LOGGING: return (0, c.supportsFeature)(T.NativeFeatures.DEBUG_LOGGING); case T.Features.SOUNDSHARE: return (0, c.supportsFeature)(T.NativeFeatures.SOUNDSHARE); case T.Features.SCREEN_SOUNDSHARE: return (0, c.supportsFeature)(T.NativeFeatures.SCREEN_SOUNDSHARE); case T.Features.ELEVATED_HOOK: return (0, c.supportsFeature)(T.NativeFeatures.ELEVATED_HOOK); case T.Features.LOOPBACK: return (0, c.supportsFeature)(T.NativeFeatures.LOOPBACK); case T.Features.WUMPUS_VIDEO: return (0, c.supportsFeature)(T.NativeFeatures.WUMPUS_VIDEO); case T.Features.HYBRID_VIDEO: return (0, c.supportsFeature)(T.NativeFeatures.HYBRID_VIDEO); case T.Features.ATTENUATION: case T.Features.VIDEO_HOOK: return (null === r() || void 0 === r() ? void 0 : null === (t = r().os) || void 0 === t ? void 0 : t.family) != null && /^win/i.test(r().os.family); case T.Features.EXPERIMENTAL_SOUNDSHARE: return (0, c.supportsFeature)(T.NativeFeatures.SOUNDSHARE_LOOPBACK); case T.Features.OPEN_H264: return (null === r() || void 0 === r() ? void 0 : null === (n = r().os) || void 0 === n ? void 0 : n.family) != null && /^win|linux|OS X/i.test(r().os.family); case T.Features.EXPERIMENTAL_ENCODERS: return (0, c.supportsFeature)(T.NativeFeatures.EXPERIMENTAL_ENCODERS); case T.Features.REMOTE_LOCUS_NETWORK_CONTROL: return (0, c.supportsFeature)(T.NativeFeatures.REMOTE_LOCUS_NETWORK_CONTROL); case T.Features.SCREEN_PREVIEWS: return (0, c.supportsFeature)(T.NativeFeatures.SCREEN_PREVIEWS); case T.Features.CLIPS: return (0, c.supportsFeature)(T.NativeFeatures.CLIPS); case T.Features.WINDOW_PREVIEWS: return (0, c.supportsFeature)(T.NativeFeatures.WINDOW_PREVIEWS); case T.Features.AUDIO_DEBUG_STATE: return (0, c.supportsFeature)(T.NativeFeatures.AUDIO_DEBUG_STATE); case T.Features.CONNECTION_REPLAY: return (0, c.supportsFeature)(T.NativeFeatures.CONNECTION_REPLAY); case T.Features.SIMULCAST: return (0, c.supportsFeature)(T.NativeFeatures.SIMULCAST) && (0, c.supportsFeature)(T.NativeFeatures.SIMULCAST_BUGFIX); case T.Features.RTC_REGION_RANKING: return (0, c.supportsFeature)(T.NativeFeatures.RTC_REGION_RANKING); case T.Features.DIRECT_VIDEO: return (0, c.supportsFeature)(T.NativeFeatures.DIRECT_VIDEO) && null != window.createDiscordStream; case T.Features.ELECTRON_VIDEO: return (0, c.supportsFeature)(T.NativeFeatures.ELECTRON_VIDEO); case T.Features.MEDIAPIPE: return (0, c.supportsFeature)(T.NativeFeatures.MEDIAPIPE); case T.Features.FIXED_KEYFRAME_INTERVAL: return (0, c.supportsFeature)(T.NativeFeatures.FIXED_KEYFRAME_INTERVAL); case T.Features.FIRST_FRAME_CALLBACK: return (0, c.supportsFeature)(T.NativeFeatures.FIRST_FRAME_CALLBACK); case T.Features.REMOTE_USER_MULTI_STREAM: return (0, c.supportsFeature)(T.NativeFeatures.REMOTE_USER_MULTI_STREAM); case T.Features.SPEED_TEST: return (0, c.supportsFeature)(T.NativeFeatures.SPEED_TEST); case T.Features.IMAGE_QUALITY_MEASUREMENT: return (0, c.supportsFeature)(T.NativeFeatures.IMAGE_QUALITY_MEASUREMENT); case T.Features.AMD_EXPERIMENTAL_RATE_CONTROL: return (0, c.supportsFeature)(T.NativeFeatures.AMD_EXPERIMENTAL_RATE_CONTROL); case T.Features.GO_LIVE_HARDWARE: return (0, c.supportsFeature)(T.NativeFeatures.GO_LIVE_HARDWARE); case T.Features.SCREEN_CAPTURE_KIT: return (0, c.supportsFeature)(T.NativeFeatures.SCREEN_CAPTURE_KIT); case T.Features.CAPTURE_TIMEOUT_EXPERIMENTS: return (0, c.supportsFeature)(T.NativeFeatures.CAPTURE_TIMEOUT_EXPERIMENTS); case T.Features.DIAGNOSTICS: case T.Features.NATIVE_PING: case T.Features.AUTOMATIC_VAD: case T.Features.AUDIO_INPUT_DEVICE: case T.Features.AUDIO_OUTPUT_DEVICE: case T.Features.QOS: case T.Features.VOICE_PROCESSING: case T.Features.AUTO_ENABLE: case T.Features.VIDEO: case T.Features.DESKTOP_CAPTURE: case T.Features.DESKTOP_CAPTURE_FORMAT: case T.Features.DESKTOP_CAPTURE_APPLICATIONS: case T.Features.VOICE_PANNING: case T.Features.AEC_DUMP: case T.Features.DISABLE_VIDEO: case T.Features.SAMPLE_PLAYBACK: case T.Features.NOISE_SUPPRESSION: case T.Features.AUTOMATIC_GAIN_CONTROL: return !0; default: return !1 } } connect(e, t, n) { !(0, c.supportsFeature)(T.NativeFeatures.EXPERIMENT_CONFIG) && (n.experiments = void 0); let i = u.default.create(e, t, n); return i.on(o.BaseConnectionEvent.Destroy, e => { this.connections.delete(e), this.connectionsEmpty() && (0, c.setProcessPriority)(T.ProcessPriority.NORMAL) }), i.on(o.BaseConnectionEvent.Connected, () => { i.setVideoBroadcast(this.shouldConnectionBroadcastVideo(i)) }), i.on(o.BaseConnectionEvent.Silence, e => { this.emit(o.MediaEngineEvent.Silence, e) }), this.connections.add(i), (0, c.setProcessPriority)(T.ProcessPriority.HIGH), this.emit(o.MediaEngineEvent.Connection, i), i } shouldConnectionBroadcastVideo(e) { return e.context === T.MediaEngineContextTypes.DEFAULT && this.videoInputDeviceId !== T.DISABLED_DEVICE_ID || e.hasDesktopSource() } eachConnection(e, t) { this.connections.forEach(n => { (null == t || n.context === t) && e(n) }) } enable() { return Promise.resolve() } setInputVolume(e) { (0, c.getVoiceEngine)().setInputVolume(S(e)) } setOutputVolume(e) { (0, c.getVoiceEngine)().setOutputVolume(S(e)) } getAudioInputDevices() { return (0, d.getAudioInputDevices)() } setAudioInputDevice(e) { (0, c.supportsFeature)(T.NativeFeatures.SET_AUDIO_DEVICE_BY_ID) ? (0, c.getVoiceEngine)().setInputDevice(e): (0, d.getAudioInputDevices)().then(t => { var n; let i = null !== (n = t.find(t => t.id === e)) && void 0 !== n ? n : t[0]; null != i && (0, c.getVoiceEngine)().setInputDevice(i.index) }) } getAudioOutputDevices() { return (0, d.getAudioOutputDevices)() } setAudioOutputDevice(e) { (0, c.supportsFeature)(T.NativeFeatures.SET_AUDIO_DEVICE_BY_ID) ? (0, c.getVoiceEngine)().setOutputDevice(e): (0, d.getAudioOutputDevices)().then(t => { var n; let i = null !== (n = t.find(t => t.id === e)) && void 0 !== n ? n : t[0]; null != i && (0, c.getVoiceEngine)().setOutputDevice(i.index) }) } getVideoInputDevices() { return (0, d.getVideoInputDevices)() } async setVideoInputDevice(e) { let t = (await this.getVideoInputDevices()).find(t => t.id === e), n = null != t ? t.id : T.DISABLED_DEVICE_ID; if (n !== this.videoInputDeviceId) { if (this.videoInputDeviceId = n, (0, c.supportsFeature)(T.NativeFeatures.SET_VIDEO_DEVICE_BY_ID)) { let e = null != t ? null != t.originalId && "" !== t.originalId ? t.originalId : t.id : T.DISABLED_DEVICE_ID; (0, c.getVoiceEngine)().setVideoInputDevice(e) } else(0, c.getVoiceEngine)().setVideoInputDevice(null != t ? t.index : -1); this.connections.forEach(e => e.setVideoBroadcast(this.shouldConnectionBroadcastVideo(e))) } } getSupportedVideoCodecs(e) { (0, c.getVoiceEngine)().getSupportedVideoCodecs(e) } getCodecCapabilities(e) { (0, c.getVoiceEngine)().getCodecCapabilities(e) } setGoLiveSource(e, t) { if (null == e) { this.eachConnection(e => { e.clearDesktopSource(), e.clearGoLiveDevices(), e.setSoundshareSource(0, !1), e.setVideoBroadcast(this.shouldConnectionBroadcastVideo(e)) }, t); return } this.eachConnection(n => { (t !== T.MediaEngineContextTypes.STREAM || n.streamUserId === n.userId) && (n.setGoLiveSource(e), n.setVideoBroadcast(this.shouldConnectionBroadcastVideo(n))) }, t) } setClipsSource(e) { if (null == (0, c.getVoiceEngine)().setClipsSource || null == (0, c.getVoiceEngine)().setOnClipsRecordingEvent || null == (0, c.getVoiceEngine)().applyClipsSettings) return; if (null == e) { (0, c.getVoiceEngine)().setClipsSource({ id: "", soundshareId: 0 }); return } let { frameRate: t, resolution: n } = e.quality, { id: i, soundshareId: r, useLoopback: s, useVideoHook: a, useGraphicsCapture: l, useQuartzCapturer: u, allowScreenCaptureKit: d, hdrCaptureMode: _ } = e.desktopDescription; (0, c.getVoiceEngine)().setOnClipsRecordingEvent(t => { this.logger.info("Clips recording event: ".concat(T.ClipsRecordingEvent[t], " received for stream ").concat(i, " and sound ").concat(r, ".")), t === T.ClipsRecordingEvent.GoLiveEnded ? this.emit(o.MediaEngineEvent.ClipsRecordingRestartNeeded) : t === T.ClipsRecordingEvent.Error ? this.emit(o.MediaEngineEvent.ClipsInitFailure, "Failed to set clips source in media engine", e.applicationName) : (t === T.ClipsRecordingEvent.Ended || t === T.ClipsRecordingEvent.StoppedByGoLive) && this.emit(o.MediaEngineEvent.ClipsRecordingEnded, i, r) }), (0, c.getVoiceEngine)().applyClipsSettings({ useVideoHook: a, useGraphicsCapture: l, useQuartzCapturer: u, allowScreenCaptureKit: d, hdrCaptureMode: _, soundshareLoopback: s, frameRate: t, width: n <= 480 ? n / 3 * 4 : n / 9 * 16, height: n }); let [E, I] = null != i ? i.split(":") : ["", ""]; (0, c.getVoiceEngine)().setClipsSource({ id: I, soundshareId: null != r ? r : 0 }) } setClipsQualitySettings(e, t, n) { let i = (0, c.getVoiceEngine)(); return null != i.applyClipsQualitySettings && (i.applyClipsQualitySettings(e, t, n), !0) } setSoundshareSource(e, t, n) { this.eachConnection(i => { (n !== T.MediaEngineContextTypes.STREAM || i.streamUserId === i.userId) && i.setSoundshareSource(e, t) }, n) } getDesktopSource() { return Promise.reject(Error("NO_STREAM")) } getDesktopSources() { return new Promise(e => { null != (0, c.getVoiceEngine)().getDesktopSources ? (0, c.getVoiceEngine)().getDesktopSources(t => e(t)) : e([]) }) } getScreenPreviews(e, t) { return new Promise(n => { null != (0, c.getVoiceEngine)().getScreenPreviews ? (0, c.getVoiceEngine)().getScreenPreviews(e, t, e => { n(e.map((e, t) => ({ ...e, name: "Screen " + (t + 1) }))) }) : n([]) }) } setClipBufferLength(e) { var t, n; null === (t = (n = (0, c.getVoiceEngine)()).setClipBufferLength) || void 0 === t || t.call(n, e) } saveClip(e, t) { let n = (0, c.getVoiceEngine)(); return null == n.setClipBufferLength || null == n.saveClip ? Promise.reject("unsupported") : new Promise((i, r) => { n.saveClip(e, t, (e, t, n) => i({ duration: e, clipStats: JSON.parse(n) }), e => r(JSON.parse(e))) }) } saveClipForUser(e, t, n) { let i = (0, c.getVoiceEngine)(); return null == i.saveClipForUser ? Promise.reject("unsupported") : new Promise((r, s) => { i.saveClipForUser(e, t, n, (e, t, n) => r({ duration: e, clipStats: JSON.parse(n) }), e => s(JSON.parse(e))) }) } updateClipMetadata(e, t) { let n = (0, c.getVoiceEngine)(); return null == n.updateClipMetadata ? Promise.reject("unsupported") : new Promise((i, r) => { n.updateClipMetadata(e, t, i, r) }) } exportClip(e, t) { let n = (0, c.getVoiceEngine)(); return null == n.exportClip ? Promise.reject("unsupported") : new Promise((i, r) => { n.exportClip(e, t, e => i(new Blob([e])), r) }) } getWindowPreviews(e, t) { return new Promise(n => { null != (0, c.getVoiceEngine)().getWindowPreviews ? (0, c.getVoiceEngine)().getWindowPreviews(e, t, e => { n(e) }) : n([]) }) } setAudioSubsystem(e) { null != (0, c.getVoiceEngine)().setAudioSubsystem ? (0, c.getVoiceEngine)().setAudioSubsystem(e) : (0, c.getVoiceEngine)().setUseLegacyAudioDevice(e === T.AudioSubsystems.LEGACY) } getAudioSubsystem() { return this.audioSubsystem } getAudioLayer() { return this.audioLayer } getDebugLogging() { return !!this.supports(T.Features.DEBUG_LOGGING) && (0, c.getVoiceEngine)().getDebugLogging() } setDebugLogging(e) { this.supports(T.Features.DEBUG_LOGGING) && (0, c.getVoiceEngine)().setDebugLogging(e) } setExperimentalAdm(e) { let { setExperimentalAdm: t, getAudioSubsystem: n } = (0, c.getVoiceEngine)(); null == t || t(e), null == n || n(e => { this.audioSubsystem = e }) } setLoopback(e, t) { null != (0, c.getVoiceEngine)().setLoopback && (0, c.getVoiceEngine)().setLoopback(e, { echoCancellation: t.echoCancellation, noiseSuppression: t.noiseSuppression, automaticGainControl: t.automaticGainControl, noiseCancellation: t.noiseCancellation }), null != (0, c.getVoiceEngine)().setEmitVADLevel2 ? (0, c.getVoiceEngine)().setEmitVADLevel2(e || this.listenerCount(o.MediaEngineEvent.VoiceActivity) > 0) : (0, c.getVoiceEngine)().setEmitVADLevel(e || this.listenerCount(o.MediaEngineEvent.VoiceActivity) > 0, e, { echoCancellation: t.echoCancellation, noiseSuppression: t.noiseSuppression, automaticGainControl: t.automaticGainControl, noiseCancellation: t.noiseCancellation }) } getLoopback() { return !1 } setH264Enabled(e) { (0, c.getVoiceEngine)().setTransportOptions({ h264Enabled: e }) } setAv1Enabled(e) { (0, c.getVoiceEngine)().setTransportOptions({ av1Enabled: e }) } setH265Enabled(e) { (0, c.getVoiceEngine)().setTransportOptions({ h265Enabled: e }) } getCodecSurvey() { return null != this.codecSurvey ? Promise.resolve(this.codecSurvey) : new Promise((e, t) => { let n = (0, c.getVoiceEngine)(); null != n.getCodecSurvey ? n.getCodecSurvey(t => { this.codecSurvey = t, e(t) }) : t(Error("getCodecSurvey is not implemented.")) }) } writeAudioDebugState() { return new Promise((e, t) => { let { writeAudioDebugState: n } = (0, c.getVoiceEngine)(); null != n ? (n(), e()) : t(Error("Audio debug state is not supported.")) }) } startAecDump() {} stopAecDump() {} setAecDump(e) { var t, n; null === (t = (n = (0, c.getVoiceEngine)()).setAecDump) || void 0 === t || t.call(n, e) } rankRtcRegions(e) { return new Promise((t, n) => { let { rankRtcRegions: i } = (0, c.getVoiceEngine)(); null != i ? i(e, e => t(e)) : n(Error("RTC region latency test is not supported.")) }) } createReplayConnection(e, t) { let n = u.default.createReplay(e, t); return null == n ? null : (n.on(o.BaseConnectionEvent.Destroy, e => { this.connections.delete(e), this.connectionsEmpty() && (0, c.setProcessPriority)(T.ProcessPriority.NORMAL) }), this.connections.add(n), (0, c.setProcessPriority)(T.ProcessPriority.HIGH), this.emit(o.MediaEngineEvent.Connection, n), n) } setUseDirectVideo(e) { I.default.useDirectVideo = e } setMaxSyncDelayOverride(e) { let { setMaxSyncDelayOverride: t } = (0, c.getVoiceEngine)(); null != t && t(e) } applyMediaFilterSettings(e) { let { applyMediaFilterSettings: t, applyMediaFilterSettingsWithCallback: n } = (0, c.getVoiceEngine)(); return null != n ? new Promise((t, i) => { n(e, t) }) : (null != t && t(e), Promise.resolve()) } startLocalAudioRecording(e) { return new Promise((t, n) => { let { startLocalAudioRecording: i } = (0, c.getVoiceEngine)(); null != i ? i(e, e => { e ? t() : n(Error("Failed to start local audio recording.")) }) : n(Error("startLocalAudioRecording is not supported.")) }) } stopLocalAudioRecording(e) { var t, n; null === (t = (n = (0, c.getVoiceEngine)()).stopLocalAudioRecording) || void 0 === t || t.call(n, (t, n) => { e(t, n) }), this.listenerCount(o.MediaEngineEvent.VoiceActivity) > 0 && null != (0, c.getVoiceEngine)().setEmitVADLevel2 && (0, c.getVoiceEngine)().setEmitVADLevel2(!0) } speedTester(e, t) { if (!this.supports(T.Features.SPEED_TEST)) throw Error("speedTester is not supported."); let n = _.default.create(e, t); return n.on(o.BaseSpeedTesterEvent.Destroy, e => { this.speedTesters.delete(e), this.connectionsEmpty() && (0, c.setProcessPriority)(T.ProcessPriority.NORMAL) }), this.speedTesters.add(n), (0, c.setProcessPriority)(T.ProcessPriority.HIGH), n } setHasFullbandPerformance(e) { null != (0, c.getVoiceEngine)().setHasFullbandPerformance && (0, c.getVoiceEngine)().setHasFullbandPerformance(e) } getSupportedSecureFramesProtocolVersion() { var e; return null !== (e = (0, c.getVoiceEngine)().SupportedSecureFramesProtocolVersion) && void 0 !== e ? e : 0 } getSupportedBandwidthEstimationExperiments(e) { null != (0, c.getVoiceEngine)().getSupportedBandwidthEstimationExperiments && (0, c.getVoiceEngine)().getSupportedBandwidthEstimationExperiments(e) } watchdogTick() { let e = !1; (0, c.getVoiceEngine)().pingVoiceThread(() => { e = !0, this.consecutiveWatchdogFailures = 0 }), setTimeout(() => { !e && ++this.consecutiveWatchdogFailures > 1 ? this.emit(o.MediaEngineEvent.WatchdogTimeout) : this.watchdogTick() }, T.WATCHDOG_TIMEOUT_MS) } connectionsEmpty() { return 0 === this.connections.size && 0 === this.speedTesters.size } constructor() { var e, t; super(), e = this, f(this, "Video", I.default), f(this, "Camera", E.default), f(this, "videoInputDeviceId", T.DISABLED_DEVICE_ID), f(this, "connections", new Set), f(this, "speedTesters", new Set), f(this, "lastVoiceActivity", -1), f(this, "audioSubsystem", "standard"), f(this, "audioLayer", ""), f(this, "deviceChangeGeneration", 0), f(this, "consecutiveWatchdogFailures", 0), f(this, "codecSurvey", null), f(this, "logger", new s.Logger("MediaEngineNative")), f(this, "handleDeviceChange", function() { let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [], i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : []; e.deviceChangeGeneration++, e.emit(o.MediaEngineEvent.DeviceChange, (0, d.sanitizeDevices)(T.DeviceTypes.AUDIO_INPUT, t), (0, d.sanitizeDevices)(T.DeviceTypes.AUDIO_OUTPUT, n), (0, d.sanitizeDevices)(T.DeviceTypes.VIDEO_INPUT, i)) }), f(this, "handleVolumeChange", (e, t) => { this.emit(o.MediaEngineEvent.VolumeChange, e * T.DEFAULT_VOLUME, t * T.DEFAULT_VOLUME) }), f(this, "handleVoiceActivity", (e, t) => { let n = Date.now(); this.listenerCount(o.MediaEngineEvent.VoiceActivity) > 0 && (-1 === this.lastVoiceActivity || Date.now() - this.lastVoiceActivity > 20) && (this.lastVoiceActivity = n, this.emit(o.MediaEngineEvent.VoiceActivity, e, t)) }), f(this, "handleActiveSinksChange", (e, t) => { this.connections.forEach(n => n.setHasActiveVideoOutputSink(e, t)) }), f(this, "handleNewListener", e => { switch (e) { case o.MediaEngineEvent.VoiceActivity: null != (0, c.getVoiceEngine)().setEmitVADLevel2 ? (0, c.getVoiceEngine)().setEmitVADLevel2(!0) : (0, c.getVoiceEngine)().setEmitVADLevel(!0, !1, {}); break; case o.MediaEngineEvent.DeviceChange: let t = this.deviceChangeGeneration; Promise.all([this.getAudioInputDevices(), this.getAudioOutputDevices(), this.getVideoInputDevices()]).then(e => { let [n, i, r] = e; t === this.deviceChangeGeneration && this.emit(o.MediaEngineEvent.DeviceChange, n, i, r) }) } }), f(this, "handleRemoveListener", e => { e === o.MediaEngineEvent.VoiceActivity && (null != (0, c.getVoiceEngine)().setEmitVADLevel2 ? (0, c.getVoiceEngine)().setEmitVADLevel2(this.listenerCount(o.MediaEngineEvent.VoiceActivity) > 0) : (0, c.getVoiceEngine)().setEmitVADLevel(this.listenerCount(o.MediaEngineEvent.VoiceActivity) > 0, !1, {})) }), f(this, "handleVideoInputInitialization", e => { this.emit(o.MediaEngineEvent.VideoInputInitialized, e) }); let n = (0, c.getVoiceEngine)(); if (n.setDeviceChangeCallback(this.handleDeviceChange), n.setVolumeChangeCallback(this.handleVolumeChange), n.setOnVoiceCallback(this.handleVoiceActivity), null === (t = n.setVideoInputInitializationCallback) || void 0 === t || t.call(n, this.handleVideoInputInitialization), n.setTransportOptions({ idleJitterBufferFlush: !0, ducking: !1 }), this.on("removeListener", this.handleRemoveListener), this.on("newListener", this.handleNewListener), null != (0, c.getVoiceEngine)().getAudioSubsystem ? (0, c.getVoiceEngine)().getAudioSubsystem((e, t) => { this.audioSubsystem = e, this.audioLayer = t }) : null != (0, c.getVoiceEngine)().getUseLegacyAudioDevice && (this.audioSubsystem = (0, c.getVoiceEngine)().getUseLegacyAudioDevice() ? T.AudioSubsystems.LEGACY : T.AudioSubsystems.STANDARD), null != n.pingVoiceThread && "undefined" != typeof window && "canary" === window.GLOBAL_ENV.RELEASE_CHANNEL && this.watchdogTick(), this.getDebugLogging() && !h.installedLogHooks) for (let e of (h.installedLogHooks = !0, ["trace", "debug", "info", "warn", "error", "log"])) { let t = console, n = t[e]; null != n && (t[e] = function() { n.apply(this, arguments); try { let t = Array.from(arguments).map(e => null != e ? e.toString() : e).filter(e => "string" != typeof e || "\nfont-weight: bold;\ncolor: purple;\n" !== e); (0, c.getVoiceEngine)().consoleLog(e, JSON.stringify(t)) } catch (e) {} }) } null != n.setActiveSinksChangeCallback && n.setActiveSinksChangeCallback(this.handleActiveSinksChange), (0, l.default)(this) } } f(h, "installedLogHooks", !1) }, 992774: function(e, t, n) { "use strict"; let i, r; function s() { if (null == i) throw Error("Native dependencies have not been injected.") } function a(e) { i = e } function o() { return s(), i.supported() } function l(e) { return s(), i.supportsFeature(e) } function u(e) { s(), i.setProcessPriority(e) } function d() { return s(), null != r ? r : r = i.getVoiceEngine() } n.r(t), n.d(t, { getVoiceEngine: function() { return d }, inject: function() { return a }, setProcessPriority: function() { return u }, supported: function() { return o }, supportsFeature: function() { return l } }), n("411104") }, 672784: function(e, t, n) { "use strict"; function i(e) { let t = e.getContext("2d"); return null == t ? null : { render: e => { t.putImageData(e, 0, 0) } } } n.r(t), n.d(t, { initRenderingContext2D: function() { return i } }) }, 369711: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { initRenderingContextWebGL: function() { return a } }), n("951953"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); let r = new(n("259443")).Logger("RenderingContextWebGL"); class s { static create(e) { if (null == e) return null; let t = this.createShader(e, e.VERTEX_SHADER, "\nattribute vec4 position;\nattribute vec2 texcoord;\nuniform mat4 transform;\nvarying vec2 out_texcoord;\n\nvoid main() {\n gl_Position = transform * position;\n out_texcoord = texcoord;\n}\n"), n = this.createShader(e, e.FRAGMENT_SHADER, "\nprecision mediump float;\n\nvarying vec2 out_texcoord;\nuniform sampler2D texture;\n\nvoid main() {\n gl_FragColor = texture2D(texture, out_texcoord);\n}\n"); if (null == t || null == n) return null; let i = this.createProgram(e, t, n); if (null == i) return null; let r = e.getAttribLocation(i, "position"), a = e.getAttribLocation(i, "texcoord"); if (-1 === r || -1 === a) return null; let o = e.getUniformLocation(i, "transform"), l = e.getUniformLocation(i, "texture"); if (null == o || null == l) return null; let u = e.createBuffer(); if (null == u) return null; e.bindBuffer(e.ARRAY_BUFFER, u), e.bufferData(e.ARRAY_BUFFER, new Float32Array([0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1]), e.STATIC_DRAW); let d = e.createTexture(); return null == d ? null : new s({ gl: e, program: i, positionLoc: r, texcoordLoc: a, transformLoc: o, textureLoc: l, vertexBuffer: u, texture: d }) } static createShader(e, t, n) { let i = e.createShader(t); if (null == i) return null; if (e.shaderSource(i, n), e.compileShader(i), !e.getShaderParameter(i, e.COMPILE_STATUS)) { r.warn("Failed to compile shader!"); let t = e.getShaderInfoLog(i); return null != t && r.log(t), e.deleteShader(i), null } return i } static createProgram(e, t, n) { if (null == t || null == n) return null; let i = e.createProgram(); if (null == i) return null; if (e.attachShader(i, t), e.attachShader(i, n), e.linkProgram(i), !e.getProgramParameter(i, e.LINK_STATUS)) { r.warn("Failed to link program!"); let t = e.getProgramInfoLog(i); return null != t && r.log(t), e.deleteProgram(i), null } return i } render(e) { if (null == e) return; let t = e.width, n = e.height, i = this.gl; i.bindTexture(i.TEXTURE_2D, this.texture), i.texImage2D(i.TEXTURE_2D, 0, i.RGBA, t, n, 0, i.RGBA, i.UNSIGNED_BYTE, e.data), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_S, i.CLAMP_TO_EDGE), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_T, i.CLAMP_TO_EDGE), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MIN_FILTER, i.LINEAR), i.viewport(0, 0, t, n), i.clearColor(0, 0, 0, 1), i.clear(i.COLOR_BUFFER_BIT), i.useProgram(this.program), i.bindBuffer(i.ARRAY_BUFFER, this.vertexBuffer), i.enableVertexAttribArray(this.positionLoc), i.vertexAttribPointer(this.positionLoc, 2, i.FLOAT, !1, 0, 0), i.enableVertexAttribArray(this.texcoordLoc), i.vertexAttribPointer(this.texcoordLoc, 2, i.FLOAT, !1, 0, 0), i.uniformMatrix4fv(this.transformLoc, !1, this.transform), i.uniform1i(this.textureLoc, 0), i.drawArrays(i.TRIANGLES, 0, 6) } constructor({ gl: e, program: t, positionLoc: n, texcoordLoc: r, transformLoc: s, textureLoc: a, vertexBuffer: o, texture: l }) { i(this, "transform", new Float32Array([2, 0, 0, 0, 0, -2, 0, 0, 0, 0, 1, 0, -1, 1, 0, 1])), i(this, "gl", void 0), i(this, "program", void 0), i(this, "positionLoc", void 0), i(this, "texcoordLoc", void 0), i(this, "transformLoc", void 0), i(this, "textureLoc", void 0), i(this, "vertexBuffer", void 0), i(this, "texture", void 0), this.gl = e, this.program = t, this.positionLoc = n, this.texcoordLoc = r, this.transformLoc = s, this.textureLoc = a, this.vertexBuffer = o, this.texture = l } } function a(e) { let t = e.getContext("webgl2"); return null == t ? null : s.create(t) } }, 158466: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return d } }), n("724458"), n("653041"); var i = n("878604"); function r(e) { return e / 32768 } function s(e) { var t, n, i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N; let p = (null !== (d = null == e ? void 0 : e.headerBytes) && void 0 !== d ? d : 0) + (null !== (_ = null == e ? void 0 : e.payloadBytes) && void 0 !== _ ? _ : 0) + (null !== (c = null == e ? void 0 : e.paddingBytes) && void 0 !== c ? c : 0); return (null !== (E = null == e ? void 0 : null === (t = e.fec) || void 0 === t ? void 0 : t.headerBytes) && void 0 !== E ? E : 0) + (null !== (I = null == e ? void 0 : null === (n = e.fec) || void 0 === n ? void 0 : n.payloadBytes) && void 0 !== I ? I : 0) + (null !== (T = null == e ? void 0 : null === (i = e.fec) || void 0 === i ? void 0 : i.paddingBytes) && void 0 !== T ? T : 0) + (null !== (f = null == e ? void 0 : null === (r = e.retransmitted) || void 0 === r ? void 0 : r.headerBytes) && void 0 !== f ? f : 0) + (null !== (S = null == e ? void 0 : null === (s = e.retransmitted) || void 0 === s ? void 0 : s.payloadBytes) && void 0 !== S ? S : 0) + (null !== (h = null == e ? void 0 : null === (a = e.retransmitted) || void 0 === a ? void 0 : a.paddingBytes) && void 0 !== h ? h : 0) + (null !== (A = null == e ? void 0 : null === (o = e.transmitted) || void 0 === o ? void 0 : o.headerBytes) && void 0 !== A ? A : 0) + (null !== (m = null == e ? void 0 : null === (l = e.transmitted) || void 0 === l ? void 0 : l.payloadBytes) && void 0 !== m ? m : 0) + (null !== (N = null == e ? void 0 : null === (u = e.transmitted) || void 0 === u ? void 0 : u.paddingBytes) && void 0 !== N ? N : 0) + p } function a(e) { var t, n, i, r, s, a, o; let l = null !== (r = null == e ? void 0 : e.packets) && void 0 !== r ? r : 0; return (null !== (s = null == e ? void 0 : null === (t = e.fec) || void 0 === t ? void 0 : t.packets) && void 0 !== s ? s : 0) + (null !== (a = null == e ? void 0 : null === (n = e.retransmitted) || void 0 === n ? void 0 : n.packets) && void 0 !== a ? a : 0) + (null !== (o = null == e ? void 0 : null === (i = e.transmitted) || void 0 === i ? void 0 : i.packets) && void 0 !== o ? o : 0) + l } function o(e) { let t = {}; for (let i in e) { var n; t[i] = null != (n = e[i]) ? { last: Math.round(1e3 * n.last), mean: Math.round(1e3 * n.mean), p75: Math.round(1e3 * n.p75), p95: Math.round(1e3 * n.p95), p99: Math.round(1e3 * n.p99), max: Math.round(1e3 * n.max) } : null } return t } function l(e, t) { var n, r, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p, O, C, R, g, L, v; let D = e.substreams.find(e => !e.isRTX && !e.isFlexFEC); if (null == D) return; let M = e.substreams.reduce((e, t) => e + s(t.rtpStats), 0), y = e.substreams.reduce((e, t) => e + a(t.rtpStats), 0); return { type: "video", ssrc: D.ssrc, sinkWant: (0, i.formatSinkWantStat)(t, D.ssrc, !0), sinkWantAsInt: (0, i.formatSinkWantAsInt)(t, D.ssrc), codec: { id: e.codecPayloadType, name: e.codecName }, keyFrameInterval: e.keyFrameInterval, bytesSent: M, packetsSent: y, packetsLost: null !== (S = null === (n = D.rtcpStats) || void 0 === n ? void 0 : n.packetsLost) && void 0 !== S ? S : 0, fractionLost: null !== (h = null === (r = D.rtcpStats) || void 0 === r ? void 0 : r.fractionLost) && void 0 !== h ? h : 0, bitrate: e.mediaBitrate, bitrateTarget: e.targetMediaBitrate, encoderImplementationName: e.encoderImplementationName, encodeUsage: e.encodeUsage, averageEncodeTime: e.avgEncodeTime, resolution: { height: D.height, width: D.width }, framesSent: D.frameCounts.keyFrames + D.frameCounts.deltaFrames, keyFramesEncoded: D.frameCounts.keyFrames, framesEncoded: e.framesEncoded, frameRateInput: e.inputFrameRate, frameRateEncode: e.encodeFrameRate, firCount: null !== (A = null === (o = D.rtcpStats) || void 0 === o ? void 0 : o.firPackets) && void 0 !== A ? A : 0, nackCount: null !== (m = null === (l = D.rtcpStats) || void 0 === l ? void 0 : l.nackPackets) && void 0 !== m ? m : 0, pliCount: null !== (N = null === (u = D.rtcpStats) || void 0 === u ? void 0 : u.pliPackets) && void 0 !== N ? N : 0, qpSum: e.qpSum, bandwidthLimitedResolution: e.bwLimitedResolution, framesDroppedRateLimiter: e.framesDroppedRateLimiter, framesDroppedEncoderQueue: e.framesDroppedEncoderQueue, framesDroppedCongestionWindow: e.framesDroppedCongestionWindow, cpuLimitedResolution: e.cpuLimitedResolution, encoderQualityVmaf: null !== (p = null === (d = D.encoderQualityStats) || void 0 === d ? void 0 : d.imageQualityVmaf_v061) && void 0 !== p ? p : void 0, encoderQualityPsnr: null !== (O = null === (_ = D.encoderQualityStats) || void 0 === _ ? void 0 : _.imageQualityWebrtcPsnrDb) && void 0 !== O ? O : void 0, qualityDecodeErrors: null !== (C = null === (c = D.encoderQualityStats) || void 0 === c ? void 0 : c.decodeErrors) && void 0 !== C ? C : void 0, qualityDecoderReboots: null !== (R = null === (E = D.encoderQualityStats) || void 0 === E ? void 0 : E.decoderReboots) && void 0 !== R ? R : void 0, qualityScoreErrors: null !== (g = null === (I = D.encoderQualityStats) || void 0 === I ? void 0 : I.scoreErrors) && void 0 !== g ? g : void 0, qualityFrameDrops: null !== (L = null === (T = D.encoderQualityStats) || void 0 === T ? void 0 : T.frameDrops) && void 0 !== L ? L : void 0, qualitySizeMismatches: null !== (v = null === (f = D.encoderQualityStats) || void 0 === f ? void 0 : f.sizeMismatches) && void 0 !== v ? v : void 0, filter: e.filter, passthroughCount: e.passthroughCount, encryptSuccessCount: e.encryptSuccessCount, encryptFailureCount: e.encryptFailureCount, encryptDuration: e.encryptDuration, encryptAttempts: e.encryptAttempts, encryptMaxAttempts: e.encryptMaxAttempts } } function u(e, t, n, r) { var l, u; let d = s(e.rtpStats), _ = a(e.rtpStats); return { type: "video", ssrc: e.ssrc, sinkWant: (0, i.formatSinkWantStat)(t, e.ssrc, !0), sinkWantAsInt: (0, i.formatSinkWantAsInt)(t, e.ssrc), sinkWantLocal: (0, i.formatSinkWantStat)(n, e.ssrc, !0), codec: { id: e.codecPayloadType, name: e.codecName }, bytesReceived: d, packetsReceived: _, packetsLost: null !== (l = e.rtpStats.packetsLost) && void 0 !== l ? l : e.rtcpStats.packetsLost, fractionLost: e.rtcpStats.fractionLost, bitrate: e.totalBitrate, jitterBuffer: e.jitterBuffer, currentDelay: e.currentDelay, targetDelay: e.targetDelay, minPlayoutDelay: e.minPlayoutDelay, renderDelay: e.renderDelay, averageDecodeTime: e.decode, resolution: { height: e.height, width: e.width }, decoderImplementationName: e.decoderImplementationName, framesDecoded: e.framesDecoded, framesDropped: e.framesDropped, framesDecodeErrors: e.framesDecodeErrors, framesReceived: e.frameCounts.keyFrames + e.frameCounts.deltaFrames, networkFramesDropped: null !== (u = e.networkFramesDropped) && void 0 !== u ? u : 0, keyFramesDecoded: e.frameCounts.keyFrames, frameRateDecode: e.decodeFrameRate, frameRateNetwork: e.networkFrameRate, frameRateRender: e.renderFrameRate, firCount: e.rtcpStats.firPackets, nackCount: e.rtcpStats.nackPackets, pliCount: e.rtcpStats.pliPackets, qpSum: e.qpSum, freezeCount: e.freezeCount, pauseCount: e.pauseCount, totalFreezesDuration: e.totalFreezesDuration, totalPausesDuration: e.totalPausesDuration, totalFramesDuration: e.totalFramesDuration, sumOfSquaredFramesDurations: e.sumOfSquaredFramesDurations, passthroughCount: e.passthroughCount, decryptSuccessCount: e.decryptSuccessCount, decryptFailureCount: e.decryptFailureCount, decryptDuration: e.decryptDuration, decryptAttempts: e.decryptAttempts, ...null != r ? o({ videoJitterBuffer: r.videoJitterBuffer, videoJitterDelay: r.videoJitterDelay, videoJitterTarget: r.videoJitterTarget }) : {} } } function d(e, t, n, r) { var a, d, _, c, E; let I = null, T = null, f = "string" == typeof t ? JSON.parse(t) : t, S = []; if (null != f.outbound) { let { audio: e, video: t, videos: r } = f.outbound; if (null != e) T = (null != T ? T : 0) + e.bytesSent, S.push({ type: "audio", ssrc: e.ssrc, sinkWant: (0, i.formatSinkWantStat)(n, e.ssrc, !1), sinkWantAsInt: (0, i.formatSinkWantAsInt)(n, e.ssrc), codec: { id: e.codecPayloadType, name: e.codecName }, bytesSent: e.bytesSent, packetsSent: e.packetsSent, packetsLost: Math.max(0, e.packetsLost), fractionLost: 100 * e.fractionLost, audioLevel: e.audioLevel / 32768, audioDetected: e.speaking, framesCaptured: e.framesCaptured, framesRendered: e.framesRendered, noiseCancellerFrames: e.noiseCancellerFrames, noiseCancellerProcessTime: e.noiseCancellerProcessTime, voiceActivityDetectorProcessTime: e.voiceActivityDetectorProcessTime, passthroughCount: e.passthroughCount, encryptSuccessCount: e.encryptSuccessCount, encryptFailureCount: e.encryptFailureCount, encryptDuration: e.encryptDuration, encryptAttempts: e.encryptAttempts, encryptMaxAttempts: e.encryptMaxAttempts }); if (null != r) r.forEach(e => { let t = l(e, n); null != t && (T = (null != T ? T : 0) + t.bytesSent, S.push(t)) }); else if (null != t) { let e = l(t, n); null != e && (T = (null != T ? T : 0) + e.bytesSent, S.push(e)) } } let h = {}; null != f.inbound && f.inbound.forEach(e => { let { id: t, audio: a, video: l, videos: d, playout: _ } = e; if (h[t] = [], null != a) I = (null != I ? I : 0) + a.bytesReceived, h[t].push({ type: "audio", ssrc: a.ssrc, sinkWant: (0, i.formatSinkWantStat)(n, a.ssrc, !1), sinkWantAsInt: (0, i.formatSinkWantAsInt)(n, a.ssrc), codec: { id: a.codecPayloadType, name: a.codecName }, bytesReceived: a.bytesReceived, packetsReceived: a.packetsReceived, packetsLost: a.packetsLost, fractionLost: 100 * a.fractionLost, fecPacketsReceived: a.fecPacketsReceived, fecPacketsDiscarded: a.fecPacketsDiscarded, audioLevel: a.audioLevel / 32768, audioDetected: a.speaking, jitter: a.jitter, jitterBuffer: a.jitterBuffer, jitterBufferPreferred: a.jitterBufferPreferred, decodingCNG: a.decodingCNG, decodingMutedOutput: a.decodingMutedOutput, decodingNormal: a.decodingNormal, decodingPLC: a.decodingPLC, decodingPLCCNG: a.decodingPLCCNG, nackCount: a.nackCount, accelerateRate: 100 * a.accelerateRate, expandRate: 100 * a.expandRate, preemptiveExpandRate: 100 * a.preemptiveExpandRate, speechExpandRate: 100 * a.speechExpandRate, secondaryDecodedRate: 100 * a.secondaryDecodedRate, opSilence: a.opSilence, opNormal: a.opNormal, opMerge: a.opMerge, opExpand: a.opExpand, opAccelerate: a.opAccelerate, opPreemptiveExpand: a.opPreemptiveExpand, opCNG: a.opCNG, delayEstimate: a.delayEstimate, passthroughCount: a.passthroughCount, decryptSuccessCount: a.decryptSuccessCount, decryptFailureCount: a.decryptFailureCount, decryptDuration: a.decryptDuration, decryptAttempts: a.decryptAttempts, ...null != _ ? o({ audioJitterBuffer: _.audioJitterBuffer, audioJitterDelay: _.audioJitterDelay, audioJitterTarget: _.audioJitterTarget, audioPlayoutUnderruns: _.audioPlayoutUnderruns, relativeReceptionDelay: _.relativeReceptionDelay, relativePlayoutDelay: _.relativePlayoutDelay }) : {} }); if (null != d) d.forEach(e => { let i = u(e, n, r, _); if (null != i) { let n = s(e.rtpStats); I = (null != I ? I : 0) + n, h[t].push(i) } }); else if (null != l) { let e = u(l, n, r, _); if (null != e) { let n = s(l.rtpStats); I = (null != I ? I : 0) + n, h[t].push(e) } } }); let { transport: A, clips: m } = f, N = {}; null != A && (N.availableOutgoingBitrate = A.sendBandwidth, N.ping = A.rtt, N.decryptionFailures = A.decryptionFailures, null != A.routingFailures && (N.routingFailures = A.routingFailures), N.localAddress = A.localAddress, N.pacerDelay = A.pacerDelay, null != A.receiverReports && (N.receiverReports = A.receiverReports), N.receiverBitrateEstimate = A.receiverBitrateEstimate, N.outboundBitrateEstimate = A.outboundBitrateEstimate, N.inboundBitrateEstimate = null !== (a = A.inboundBitrateEstimate) && void 0 !== a ? a : 0, N.packetsReceived = A.packetsReceived, N.packetsSent = A.packetsSent, null != A.secureFramesProtocolVersion && (N.secureFramesProtocolVersion = A.secureFramesProtocolVersion)), ((null == A ? void 0 : A.bytesReceived) != null || null != I && !Number.isNaN(I)) && (N.bytesReceived = null !== (_ = null !== (d = null == A ? void 0 : A.bytesReceived) && void 0 !== d ? d : I) && void 0 !== _ ? _ : void 0), ((null == A ? void 0 : A.bytesSent) != null || null != T && !Number.isNaN(T)) && (N.bytesSent = null !== (E = null !== (c = null == A ? void 0 : A.bytesSent) && void 0 !== c ? c : T) && void 0 !== E ? E : void 0); let { screenshare: p, camera: O } = f; return { mediaEngineConnectionId: e, transport: N, screenshare: p, camera: null != O ? { capturedFramesDropped: O.capturedFramesDropped, capturedFramesCount: O.capturedFramesCount, capturedFramesMean: O.capturedFramesMean, capturedFramesStdev: O.capturedFramesStdev } : null, clips: m, rtp: { inbound: h, outbound: S } } } }, 656795: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("735250"); n("470079"); var r = n("650886"); function s(e) { let { disabled: t, deviceId: n, width: s, height: a } = e; return t ? (0, i.jsx)("div", { className: "media-engine-video", style: { width: s, height: a } }) : (0, i.jsx)(r.default, { streamId: n, style: { width: s, height: a } }) } s.defaultProps = { disabled: !1, width: 320, height: 180 } }, 718798: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return E } }); var i = n("735250"), r = n("470079"), s = n("665443"), a = n.n(s), o = n("39383"), l = n.n(o), u = n("992774"), d = n("672784"), _ = n("369711"), c = n("649754"); function E(e) { let { streamId: t, paused: n, onReady: s, onResize: o, className: E, ...I } = e, T = r.useRef(null), { current: f } = r.useRef(l()("media-engine-video-")); return r.useEffect(() => { let e = T.current; if (!n && null != e) { let n = !1, i = (t, i) => { !n && (null == s || s(), n = !0), (e.width !== t || e.height !== i) && (e.width = t, e.height = i, null == o || o({ width: t, height: i })) }, r = (0, u.getVoiceEngine)(); if (null != r.addVideoOutputSink) return r.addVideoOutputSink(f, t, i), () => { r.removeVideoOutputSink(f, t) }; { let n = function(e) { var t, n, i, r; let s = null === (r = window) || void 0 === r ? void 0 : null === (i = r.DiscordNative) || void 0 === i ? void 0 : null === (n = i.app) || void 0 === n ? void 0 : null === (t = n.getReleaseChannel) || void 0 === t ? void 0 : t.call(n); return "canary" === s || "development" === s ? (0, _.initRenderingContextWebGL)(e) : (0, d.initRenderingContext2D)(e) }(e); if (null == n) return; return c.default.addSink(t, T, e => { i(e.width, e.height), n.render(e) }), () => { c.default.removeSink(t, T) } } } }, [t, n, o, s, f]), (0, i.jsx)("canvas", { id: f, className: a()("media-engine-video", E), ref: T, ...I }) } E.defaultProps = { paused: !1 } }, 558065: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("665443"), a = n.n(s), o = n("259443"), l = n("992774"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = new o.Logger("DirectVideo"); class _ { addref() { this.refcount++ } release() { return this.refcount--, 0 === this.refcount } constructor(e) { u(this, "refcount", void 0), u(this, "stream", void 0), this.refcount = 1, this.stream = window.createDiscordStream(e) } } let c = new Map; function E(e) { let t = c.get(e); null != t && t.release() && ((0, l.getVoiceEngine)().removeDirectVideoOutputSink(e), c.delete(e)) } function I(e) { let { streamId: t, paused: n, onReady: s, onResize: o, className: u, ...I } = e, T = r.useRef(null), f = r.useRef(null), S = r.useRef({ width: 0, height: 0 }), h = r.useRef({ streamId: t, paused: n, onReady: s, onResize: o }); return r.useLayoutEffect(() => { let { current: e } = T; if (null != e) { let t = document.createElement("video"); t.style.display = "block", t.style.width = "100%", t.style.height = "100%", t.autoplay = !0, t.muted = !0, t.addEventListener("pause", function() { if (!h.current.paused) { var e; null === (e = f.current) || void 0 === e || e.play() } }), t.addEventListener("resize", function() { var e, t, n, i, r, s; let { width: a, height: o } = S.current, l = null !== (n = null === (e = f.current) || void 0 === e ? void 0 : e.videoWidth) && void 0 !== n ? n : 0, u = null !== (i = null === (t = f.current) || void 0 === t ? void 0 : t.videoHeight) && void 0 !== i ? i : 0; if (a !== l || o !== u) { let e = { width: l, height: u }; null === (r = (s = h.current).onResize) || void 0 === r || r.call(s, e), S.current = e } }), t.addEventListener("canplaythrough", function() { var e, t; d.info("handleReady for ".concat(h.current.streamId, ", have onReady callback = ").concat(null != h.current.onReady)), null === (e = (t = h.current).onReady) || void 0 === e || e.call(t) }), d.info("create video element for ".concat(h.current.streamId, ", readyState=").concat(t.readyState)), t.readyState > 3 && d.error("video element for ".concat(h.current.streamId, " was ready before attached")), e.appendChild(t), f.current = t } }, []), r.useEffect(() => { h.current.streamId = t, h.current.paused = n, h.current.onReady = s, h.current.onResize = o }), r.useEffect(() => { let e = f.current; if (null != e) { if (n) null != e.srcObject && (e.srcObject = null, E(t)); else { var i; let n; d.info("attaching srcObject for ".concat(t)); return e.srcObject = (i = t, null == (n = c.get(i)) ? (n = new _(i), (0, l.getVoiceEngine)().addDirectVideoOutputSink(i), c.set(i, n)) : n.addref(), n.stream), () => { E(t), e.srcObject = null } } } }, [n, t]), (0, i.jsx)("div", { className: a()("media-engine-video", u), ref: T, ...I }) } I.defaultProps = { paused: !1 } }, 650886: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }); var i = n("718798"), r = n("558065"); function s(e) { return s.useDirectVideo ? (0, r.default)(e) : (0, i.default)(e) } s.defaultProps = i.default.defaultProps, s.useDirectVideo = !1 }, 649754: function(e, t, n) { "use strict"; n.r(t), n("47120"); var i = n("992774"); t.default = new class e { addSink(e, t, n) { let r = this.streams, s = r[e]; if (null == s && (s = r[e] = new Map), 0 === s.size) { let t = (0, i.getVoiceEngine)(); t.setVideoOutputSink(e, this.handleImageData.bind(this, t.signalVideoOutputSinkReady.bind(t, e), s), !0) } s.set(t, n) } removeSink(e, t) { let n = this.streams, r = n[e]; null != r && (r.delete(t), 0 === r.size && (delete n[e], (0, i.getVoiceEngine)().setVideoOutputSink(e))) } handleImageData(e, t, n) { for (let e of t.values()) e(n); e() } constructor() { var e, t, n; e = this, n = {}, (t = "streams") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 734298: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("653041"), n("47120"); var i = n("46973"), r = n("198274"); function s(e) { let t = !1; e.on(i.MediaEngineEvent.Destroy, () => t = !0); let n = async () => { if (t) return; let s = []; e.eachConnection(e => s.push({ connection: e, stats: e.emitStats() })); let a = []; for (let e of s) { let t = await e.stats; null != t && a.push({ connection: e.connection, stats: t }) } e.emit(i.MediaEngineEvent.ConnectionStats, a), setTimeout(n, r.STATS_INTERVAL) }; setTimeout(n, r.STATS_INTERVAL) } }, 829839: function(e, t, n) { "use strict"; n.r(t), n.d(t, { codecNameToPayloadName: function() { return u }, filterVideoCodecs: function() { return o }, getExperimentCodecs: function() { return a } }), n("653041"), n("733860"); var i = n("65154"); let r = [{ name: "H264", encode: !0, decode: !0 }, { name: "VP8", encode: !0, decode: !0 }, { name: "VP9", encode: !0, decode: !0 }]; function s(e, t) { let n = t.concat(r), i = []; return n.forEach(t => { let n = e.find(e => t.name === e.codec); null != n && i.push({ name: n.codec, encode: n.encode && t.encode, decode: n.decode && t.decode }) }), i } function a(e) { let t = []; return e.has(i.ExperimentFlags.SIGNAL_H265_SUPPORT) ? t.unshift({ name: "H265", encode: !0, decode: !0 }) : e.has(i.ExperimentFlags.SIGNAL_H265_DECODE_SUPPORT) && t.unshift({ name: "H265", encode: !1, decode: !0 }), e.has(i.ExperimentFlags.SIGNAL_AV1_SUPPORT) && t.unshift({ name: "AV1", encode: !0, decode: !0 }), t } function o(e, t) { return "string" == typeof e ? s(JSON.parse(e).map(e => ({ codec: l(e.codec), encode: e.encode, decode: e.decode })), t) : s(e.map(e => ({ codec: l(e), encode: !0, decode: !0 })), t) } function l(e) { return "AV1X" === e ? "AV1" : e } function u(e) { return "AV1" === e ? "AV1X" : e } }, 345546: function(e, t, n) { "use strict"; function i() { var e, t; return "undefined" == typeof platform ? 0 : parseInt(null !== (t = null === (e = platform) || void 0 === e ? void 0 : e.version) && void 0 !== t ? t : "0", 10) } n.r(t), n.d(t, { platformVersion: function() { return i } }) }, 878604: function(e, t, n) { "use strict"; function i(e, t, n) { let i = e[t]; return null == i ? n ? "".concat(e.any, " (any)") : "100" : i.toString() } function r(e, t) { let n = e[t]; return null == n ? e.any : n } n.r(t), n.d(t, { formatSinkWantAsInt: function() { return r }, formatSinkWantStat: function() { return i } }) }, 970838: function(e, t, n) { "use strict"; n.r(t), n.d(t, { registerActiveSink: function() { return s }, setActiveSinksChangeCallback: function() { return o }, unregisterActiveSink: function() { return a } }); let i = {}, r = null; function s(e) { var t; let n = null !== (t = i[e]) && void 0 !== t ? t : 0; 0 === n && (null == r || r(e, !0)), i[e] = n + 1 } function a(e) { i[e]--, 0 === i[e] && (null == r || r(e, !1)) } function o(e) { r = null != e ? e : null } }, 68721: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return I } }), n("411104"); var i = n("836560"), r = n("259443"), s = n("740197"), a = n("106617"), o = n("290488"), l = n("830795"), u = n("65154"), d = n("231338"); function _(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let c = new r.Logger("Output"), E = new a.default; class I extends i.EventEmitter { destroy() { var e, t; this.removeAllListeners(), null === (e = this.cleanup) || void 0 === e || e.call(this), this.reset(), null != this.stream && (E.release(this.stream), this.stream = void 0), null === (t = this._audioFilter) || void 0 === t || t.dispose(), this._audioFilter = void 0, this.destroyed = !0 } reset() { this.setSpeaking(!1) } resume() { this.context.resume() } get state() { return this.context.state } getDelayedStream() { let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : .2, t = this.context; if (null == this.stream) throw Error("AudioInput: No MediaStream"); let n = t.createDelay(e); n.delayTime.value = e, t.createMediaStreamSource(this.stream).connect(n); let i = t.createMediaStreamDestination(); return n.connect(i), i.stream } get mute() { return this._mute } set mute(e) { this._mute = e, this.updateAudioTracks(), this.setSpeaking(!1) } get echoCancellation() { return this._echoCancellation } set echoCancellation(e) { this._echoCancellation !== e && (this._echoCancellation = e, null != this.stream && this.enable()) } get noiseSuppression() { return this._noiseSuppression } set noiseSuppression(e) { this._noiseSuppression !== e && (this._noiseSuppression = e, null != this.stream && this.enable()) } get noiseCancellation() { return this._noiseCancellation } set noiseCancellation(e) { this._noiseCancellation !== e && (this._noiseCancellation = e, null != this.stream && this.enable()) } get automaticGainControl() { return this._automaticGainControl } set automaticGainControl(e) { this._automaticGainControl !== e && (this._automaticGainControl = e, null != this.stream && this.enable()) } async enable() { null != this.cleanup && (this.cleanup(), this.cleanup = void 0), null != this.stream && (E.release(this.stream), this.stream = void 0); let e = await (0, s.getAudioInputDevices)(), t = { echoCancellation: this.echoCancellation, noiseSuppression: this.noiseSuppression, autoGainControl: this.automaticGainControl }; e.some(e => e.id === this.sourceId) && (t.deviceId = this.sourceId); try { let e = await E.acquire({ audio: t }); if (this.destroyed) throw E.release(e), Error("AudioInput: Already destroyed"); if (this._noiseCancellation) try { let t = await (0, o.getKrispSDK)(); this._audioFilter = await t.createNoiseFilter(this.context), this._audioFilter.addEventListener("ready", e => { var t; null === (t = this._audioFilter) || void 0 === t || t.enable() }), this._audioFilter.addEventListener("dispose", t => { E.release(e) }); let n = this.context.createMediaStreamSource(e), i = this.context.createMediaStreamDestination(); n.connect(this._audioFilter), this._audioFilter.connect(i), this.stream = i.stream } catch (t) { c.error("failure creating krisp node"), c.error(t), this.stream = e } else this.stream = e; return this.updateMode(), this.updateAudioTracks(), this.emit("permission", !0), this.emit("stream", this.stream), e } catch (e) { if ("string" != typeof e) switch (e.name) { case "PermissionDeniedError": case "NotAllowedError": throw this.emit("permission", !1), d.UserMediaErrors.PERMISSION_DENIED; case "PermissionDismissedError": throw this.emit("permission", !1), d.UserMediaErrors.PERMISSION_DISMISSED; case "DevicesNotFoundError": case "NotFoundError": throw d.UserMediaErrors.NO_DEVICES_FOUND; default: throw e.name || "UNKNOWN" } throw e } } setSource(e) { this.sourceId !== e && (this.sourceId = e, null != this.stream && this.enable()) } setPTTActive(e) { if (!this.mute) this.speaking !== e && (null != this.pttReleaseDelayTimeout && (window.clearTimeout(this.pttReleaseDelayTimeout), this.pttReleaseDelayTimeout = void 0), e ? this.setSpeaking(e) : this.pttReleaseDelayTimeout = window.setTimeout(() => { this.setSpeaking(!1), this.pttReleaseDelayTimeout = void 0 }, this.modeOptions.delay)) } setMode(e, t) { this.mode = e, this.modeOptions = t, null != this.stream && this.enable() } updateMode() { null != this.cleanup && (this.cleanup(), this.cleanup = void 0), null != this.stream && this.mode === u.InputModes.VOICE_ACTIVITY && (this.cleanup = this.setupVoiceActivity(this.modeOptions)) } setupVoiceActivity(e) { let { threshold: t } = e; if (null == this.stream) throw Error("stream cannot be null"); null == t && (t = -40); let n = new l.default(this.context, this.stream, t); return n.onProcess = (e, t) => { !this.mute && this.setSpeaking(e), this.emit("voiceactivity", t) }, () => { null != n && (n.stop(), n = null, this.setSpeaking(!1)) } } setSpeaking(e) { this.speaking !== e && (this.speaking = e, this.emit("speaking", e)) } updateAudioTracks() { if (null != this.stream) { let e = this.stream.getAudioTracks(); for (let t = 0, n = e.length; t < n; t++) e[t].enabled = !this._mute } } constructor(e) { super(), _(this, "stream", void 0), _(this, "context", void 0), _(this, "sourceId", void 0), _(this, "_mute", !1), _(this, "_echoCancellation", !0), _(this, "_noiseSuppression", !0), _(this, "_automaticGainControl", !0), _(this, "_noiseCancellation", !1), _(this, "_audioFilter", void 0), _(this, "speaking", !1), _(this, "mode", u.InputModes.VOICE_ACTIVITY), _(this, "modeOptions", { delay: 20, threshold: -40 }), _(this, "cleanup", void 0), _(this, "pttReleaseDelayTimeout", void 0), _(this, "destroyed", !1), this.context = e } } }, 912095: function(e, t, n) { "use strict"; n.r(t), n.d(t, { EncoderParameter: function() { return i }, default: function() { return h } }), n("47120"), n("411104"), n("177593"); var i, r, s = n("874141"), a = n.n(s), o = n("565925"), l = n.n(o), u = n("839548"), d = n("46973"), _ = n("886848"), c = n("961304"), E = n("313232"), I = n("450279"), T = n("65154"), f = n("436620"); function S(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(r = i || (i = {}))[r.AUDIO_BITRATE = 0] = "AUDIO_BITRATE", r[r.VIDEO_RESOLUTION_SCALE = 1] = "VIDEO_RESOLUTION_SCALE", r[r.VIDEO_BITRATE = 2] = "VIDEO_BITRATE", r[r.VIDEO_FRAMERATE = 3] = "VIDEO_FRAMERATE"; class h extends u.default { interact() { for (let e of (this.interacted = !0, Object.keys(this.outputs))) this.outputs[e].play(); this.input.resumeAudio() } destroy() { for (let e of (super.destroy(), Object.keys(this.outputs))) this.destroyOutput(e); this.input.destroy() } async getStats() { if (!f.BROWSER_SUPPORTS_DIAGNOSTICS) return null; let e = await this.getRawStats(); return (0, I.default)(e, this.getUserIdBySsrc, this.remoteVideoSinkWants, this.localVideoSinkWants) } setInputMode(e, t) { this.input.setAudioMode(e, { delay: t.pttReleaseDelay, threshold: t.vadThreshold }) } setSelfDeaf(e) { for (let t of (this.selfDeaf = e, Object.keys(this.outputs))) this.outputs[t].mute = e || this.localMutes[t] } setLocalMute(e, t) { this.localMutes[e] = t, null != this.outputs[e] && (this.outputs[e].mute = this.selfDeaf || t), this.emit(d.BaseConnectionEvent.LocalMute, e, t) } fastUdpReconnect() {} getNumFastUdpReconnects() { return null } wasRemoteDisconnected() {} setRemoteVideoSinkWants(e) { this.remoteVideoSinkWants = e, this.updateVideoQuality(T.MEDIA_SINK_WANTS_PROPERTIES) } setLocalVideoSinkWants(e) { this.localVideoSinkWants = e } updateVideoQualityCore(e, t) { let n; if (!this.videoSupported) return; let i = this.input.getVideoStream(); if (null == i) return; if (null != t.capture && null != t.capture.width && null != t.capture.height && null != e.remoteSinkWantsPixelCount && 0 !== e.remoteSinkWantsPixelCount && 0 !== t.capture.height) { let i = t.capture.width / t.capture.height, r = Math.sqrt(e.remoteSinkWantsPixelCount * i), s = t.capture.width / r; n = s < 1 ? void 0 : s } this.logger.info("BaseWebRTCConnection.updateVideoQuality: resolutionScaleFactor: ".concat(n, ", ") + "encodingVideoWidth: ".concat(e.encodingVideoWidth, ", remoteSinkWantsMaxFramerate: ").concat(e.remoteSinkWantsMaxFramerate, ", ") + "encodingVideoMaxBitRate: ".concat(e.encodingVideoMaxBitRate, ", localWant: ").concat(this.getLocalWant())), this.setVideoEncoderParameters([{ parameter: 1, value: n }, { parameter: 2, value: e.encodingVideoMaxBitRate }, { parameter: 3, value: e.remoteSinkWantsMaxFramerate }]); let r = e.encodingVideoWidth, s = e.encodingVideoHeight; for (let e of i.getTracks()) { var a, o; let t = e.getConstraints(), n = null === (a = t.width) || void 0 === a ? void 0 : a.max, i = null === (o = t.height) || void 0 === o ? void 0 : o.max; (n !== r || i !== s) && (this.logger.info("BaseWebRTCConnection.updateVideoQuality: old: ".concat(n, " x ").concat(i, ", new: ").concat(r, " x ").concat(s)), t.width = { max: r }, t.height = { max: s }, e.applyConstraints(t)) } } setCanHavePriority(e, t) { let n = this.canHavePriority.size; t ? this.canHavePriority.add(e) : this.canHavePriority.delete(e), this.canHavePriority.size !== n && this.recalculatePrioritySpeakers() } setSpeakingFlags(e, t) { null != t && t !== T.SpeakingFlags.NONE ? this.localSpeakingFlags[e] = t : delete this.localSpeakingFlags[e]; let n = this.outputs[e]; null != n && n.setSpeakingFlags(t); let i = this.wantsPriority.size, r = T.SpeakingFlags.VOICE | T.SpeakingFlags.PRIORITY; (t & r) === r ? this.wantsPriority.add(e) : this.wantsPriority.delete(e), this.wantsPriority.size !== i && this.recalculatePrioritySpeakers() } clearAllSpeaking() { for (let e in this.localSpeakingFlags) delete this.localSpeakingFlags[e], null != this.outputs[e] && this.outputs[e].setSpeakingFlags(T.SpeakingFlags.NONE) } setOutputVolume(e) { for (let t of (this.outputVolume = e, Object.keys(this.outputs))) this.outputs[t].volume = this.computeLocalVolume(t) } setSinkId(e) { for (let t of (this.sinkId = e, Object.keys(this.outputs))) this.outputs[t].setSinkId(e) } setStreamParameters(e) { return new Promise((t, n) => { for (let t of this.videoStreamParameters) { let i = e.findIndex(e => e.rid === t.rid); if (-1 === i) { n(Error("Invalid rid")); return }!l()(this.videoStreamParameters[i], e[i]) && (this.videoStreamParameters[i] = { ...e[i] }) } t() }) } recalculatePrioritySpeakers() { this.prioritySpeakers = new Set(Array.from(this.wantsPriority).filter(e => this.canHavePriority.has(e))), a()(this.outputs, (e, t) => { e.volume = this.computeLocalVolume(t) }) } setBitRate(e) { this.voiceBitrate = e } setLocalVolume(e, t) { this.localVolumes[e] = t, null != this.outputs[e] && (this.outputs[e].volume = this.computeLocalVolume(e)) } getLocalVolume(e) { let t = this.localVolumes[e]; return null == t && (t = this.context === T.MediaEngineContextTypes.DEFAULT ? T.DEFAULT_VOLUME : T.DEFAULT_STREAM_VOLUME), null != t ? t : T.DEFAULT_VOLUME } computeLocalVolume(e) { let t = this.outputVolume * this.getLocalVolume(e) / T.DEFAULT_VOLUME; return this.prioritySpeakers.size > 0 && !this.prioritySpeakers.has(e) ? t * T.DEFAULT_PRIORITY_SPEAKER_DUCKING : t } hasDesktopSource() { var e; return null === (e = this.input) || void 0 === e ? void 0 : e.hasDesktopSource() } createOutput(e, t) { if (t.discordIsTearingDown) { this.logger.info("BaseWebRTCConnection.createOutput: ignoring track being torn down: ".concat(t.id)); return } let n = this.outputs[e]; if (null == n) { var i; (n = new c.default(e, this.audioContext)).mute = this.selfDeaf || this.localMutes[e], n.volume = this.computeLocalVolume(e), n.on(c.OutputEvent.Speaking, t => this.emit(d.BaseConnectionEvent.Speaking, e, t, this.audioSSRC)), n.on(c.OutputEvent.Video, t => { var n; return this.emitUnsafe(d.BaseConnectionEvent.Video, e, t, this.audioSSRC, this.videoStreamParameters[0].ssrc, null !== (n = this.videoStreamParameters[0].rtxSsrc) && void 0 !== n ? n : 0, this.videoStreamParameters) }), n.on(c.OutputEvent.InteractionRequired, e => this.emit(d.BaseConnectionEvent.InteractionRequired, e)), n.setSpeakingFlags(null !== (i = this.localSpeakingFlags[e]) && void 0 !== i ? i : T.SpeakingFlags.NONE), n.setSinkId(this.sinkId), this.outputs[e] = n } n.addTrack(t) } destroyOutput(e, t) { let n = this.outputs[e]; null != n && (null == t || 0 === n.removeTrack(t)) && (n.destroy(), delete this.outputs[e]) } setSilenceThreshold(e) { this.silenceThreshold = e } setLocalPan(e, t, n) {} setExperimentalEncoders(e) {} setHardwareH264(e) {} setQoS(e) {} isAttenuating() { return !1 } setAttenuation(e, t, n) {} setEncryption(e, t) {} setMinimumJitterBufferLevel(e) {} setPostponeDecodeLevel(e) {} setReconnectInterval(e) {} setKeyframeInterval(e) {} startSamplesLocalPlayback(e, t, n, i) {} stopSamplesLocalPlayback(e) {} stopAllSamplesLocalPlayback() {} setVideoQualityMeasurement(e) {} setVideoEncoderExperiments(e) {} setBandwidthEstimationExperiments(e) {} prepareSecureFramesTransition(e, t, n) {} prepareSecureFramesEpoch(e, t, n) {} executeSecureFramesTransition(e) {} getMLSKeyPackage(e) {} updateMLSExternalSender(e) {} processMLSProposals(e, t) {} prepareMLSCommitTransition(e, t, n) {} processMLSWelcome(e, t, n) {} constructor(e, t, n, i) { var r; super(e, t), r = this, S(this, "input", void 0), S(this, "silenced", !1), S(this, "interacted", !1), S(this, "outputVolume", T.DEFAULT_VOLUME), S(this, "sinkId", T.DEFAULT_DEVICE_ID), S(this, "lastPingTime", 0), S(this, "outputs", {}), S(this, "webrtcStats", new E.WebRTCStatsCalculator), S(this, "silenceThreshold", -100), S(this, "canHavePriority", new Set), S(this, "prioritySpeakers", new Set), S(this, "audioContext", void 0), S(this, "setEchoCancellation", e => this.input.setEchoCancellation(e)), S(this, "setNoiseSuppression", e => this.input.setNoiseSuppression(e)), S(this, "setNoiseCancellation", e => this.input.setNoiseCancellation(e)), S(this, "setAutomaticGainControl", e => this.input.setAutomaticGainControl(e)), S(this, "setAudioSource", e => this.input.setAudioSource(e)), S(this, "setVideoSource", e => this.input.setVideoSource(e)), S(this, "setDesktopInput", e => this.input.setDesktop(e)), S(this, "setForceAudioInput", function(e) { return arguments.length > 1 && void 0 !== arguments[1] && arguments[1], r.input.setPTTActive(e) }), S(this, "setSelfMute", e => { this.input.setMute(e), this.emit(d.BaseConnectionEvent.Mute, e) }), S(this, "handleAddVideoTrack", () => { this.updateVideoQuality() }), S(this, "handleAudioPermission", e => this.emit(d.BaseConnectionEvent.AudioPermission, e)), S(this, "handleVideoPermission", e => this.emit(d.BaseConnectionEvent.VideoPermission, e)), S(this, "handleVideo", e => { var t; return this.emit(d.BaseConnectionEvent.Video, this.userId, e, this.audioSSRC, this.videoStreamParameters[0].ssrc, null !== (t = this.videoStreamParameters[0].rtxSsrc) && void 0 !== t ? t : 0, this.videoStreamParameters) }), S(this, "handleDesktopSourceEnd", () => this.emit(d.BaseConnectionEvent.DesktopSourceEnd)), S(this, "handleStream", e => this.setStream(e)), S(this, "handleVoiceActivity", e => { let t = e <= this.silenceThreshold; this.silenced !== t && !this.input.mute() && (this.silenced = t, this.emit(d.BaseConnectionEvent.Silence, t)) }), S(this, "handleNewListener", e => { switch (e) { case d.BaseConnectionEvent.Video: this.videoReady && setImmediate(() => this.handleVideo(this.input.getVideoStreamId())); break; case d.BaseConnectionEvent.ConnectionStateChange: this.emit(e, this.connectionState); break; case d.BaseConnectionEvent.InteractionRequired: !this.interacted && "suspended" === this.input.getAudioState() && setImmediate(() => this.emit(e, !0)) } }), S(this, "handleInputSpeaking", e => { this.emit(d.BaseConnectionEvent.Speaking, this.userId, e ? T.SpeakingFlags.VOICE : T.SpeakingFlags.NONE, this.audioSSRC) }), S(this, "handleAudioContextStateChange", () => { !this.interacted && "running" === this.input.getAudioState() && (this.interact(), this.emit(d.BaseConnectionEvent.InteractionRequired, !1)) }), S(this, "handleStats", e => { if (this.connectionState === T.ConnectionStates.DISCONNECTED) { this.off(d.BaseConnectionEvent.Stats, this.handleStats); return } null != e && (this.webrtcStats.update(e), this.stats = e, Date.now() - this.lastPingTime >= T.PING_INTERVAL && (this.emit(d.BaseConnectionEvent.Ping, e.transport.ping), this.lastPingTime = Date.now())) }), this.input = new _.default(n), n.addEventListener("statechange", this.handleAudioContextStateChange), this.audioContext = n, this.input.on(_.InputEvent.AudioPermission, this.handleAudioPermission), this.input.on(_.InputEvent.VideoPermission, this.handleVideoPermission), this.input.on(_.InputEvent.Video, this.handleVideo), this.input.on(_.InputEvent.Mute, e => this.emit(d.BaseConnectionEvent.Mute, e)), this.input.on(_.InputEvent.Stream, this.handleStream), this.input.on(_.InputEvent.DesktopSourceEnd, this.handleDesktopSourceEnd), this.input.on(_.InputEvent.Speaking, this.handleInputSpeaking), this.input.on(_.InputEvent.AddVideoTrack, this.handleAddVideoTrack), this.input.on(_.InputEvent.Video, this.handleAddVideoTrack), this.on("newListener", this.handleNewListener), this.initializeStreamParameters(i) } } }, 997653: function(e, t, n) { "use strict"; n.r(t), n.d(t, { makeConnection: function() { return h } }); var i = n("264344"), r = n.n(i), s = n("259443"), a = n("46973"), o = n("912095"), l = n("912978"), u = n("886848"), d = n("236842"), _ = n("649318"), c = n("199857"), E = n("65154"), I = n("436620"); function T(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function f(e) { return e.split("-")[0] } class S extends o.default { destroy() { super.destroy(), this.pc.close() } setCodecs(e, t, n) { var i, r, s; let a; (this.fpc.audioCodec !== e || this.fpc.videoCodec !== t) && (a = this.codecs.find(t => t.name === e), this.fpc.audioCodec = e, this.fpc.audioPayloadType = null !== (i = null == a ? void 0 : a.payloadType) && void 0 !== i ? i : 0, a = this.codecs.find(e => e.name === t), this.fpc.videoCodec = t, this.fpc.videoPayloadType = null !== (r = null == a ? void 0 : a.payloadType) && void 0 !== r ? r : 0, this.fpc.rtxPayloadType = null !== (s = null == a ? void 0 : a.rtxPayloadType) && void 0 !== s ? s : 0, this.pc.negotiationNeeded()) } setStream(e) { this.fpc.direction = null != e ? _.Directions.SENDRECV : _.Directions.SENDONLY, this.pc.setStream(null != e ? e : null) } createUser(e, t, n) { var i; if (0 === t) { this.logger.warn("Attempting to create user ".concat(e, " with 0 audio SSRC")); return } this.logger.info("Creating user: ".concat(e, " with audio SSRC: ").concat(t, " and video SSRCs: ").concat(null !== (i = null == n ? void 0 : n.join(",")) && void 0 !== i ? i : 0)); let r = null != n && n.length > 0 ? n[0] : 0; this.fpc.addStream(e, t, r) } destroyUser(e) { this.fpc.removeStream(e) } setBitRate(e) { this.voiceBitrate !== e && (super.setBitRate(e), this.pc.setBitRate(e)) } setSDP(e) { this.pc.on("offer", () => this.fpc.createAnswer()), this.fpc.sdp = e } getUserIdBySsrc(e) {} getRawStats() { return this.pc.getStats() } setVideoEncoderParameters(e) {} constructor(e, t, n, i) { super(e, t, n, i), T(this, "pc", void 0), T(this, "fpc", void 0), T(this, "codecs", []), T(this, "logger", void 0), this.logger = new s.Logger("Connection(".concat(e, ")")); let r = new l.default; r.on("answer", e => this.pc.setRemoteDescription(e).catch(e => this.logger.error("Failed to set remote description (answer): ".concat(e)))), r.on("offer", e => { this.pc.setRemoteDescription(e).then(() => this.pc.createAnswer()).then(e => this.fpc.setRemoteDescription(e)).catch(e => this.logger.error("Failed to set remote description (offer): ".concat(e))) }), r.direction = null != this.input.stream ? _.Directions.SENDRECV : _.Directions.SENDONLY, this.fpc = r; let o = new d.default(this.voiceBitrate); o.on("addtrack", (e, t) => this.createOutput(f(e), t)), o.on("removetrack", (e, t) => this.destroyOutput(f(e), t)), o.once("connected", () => { this.input.reset(), this.setConnectionState(E.ConnectionStates.CONNECTED), this.on(a.BaseConnectionEvent.Stats, this.handleStats), this.input.on(u.InputEvent.VoiceActivity, this.handleVoiceActivity) }), o.on("connecting", () => this.setConnectionState(E.ConnectionStates.DTLS_CONNECTING)), o.on("checking", () => this.setConnectionState(E.ConnectionStates.ICE_CHECKING)), o.on("failed", () => this.setConnectionState(E.ConnectionStates.NO_ROUTE)), o.on("disconnected", () => this.setConnectionState(E.ConnectionStates.DISCONNECTED)), o.on("closed", () => this.setConnectionState(E.ConnectionStates.DISCONNECTED)), o.on("offer", e => { let { sdp: t } = e, { outboundStreams: n, codecs: i, audioSSRC: s, videoSSRC: o, rtxSSRC: l } = (0, _.extractSDP)(t); this.codecs = i; let u = (0, _.getExtensions)(t); r.outboundStreams = n, this.audioSSRC = s, r.extensions = u, (this.videoStreamParameters[0].ssrc !== o || this.videoStreamParameters[0].rtxSsrc !== l || !this.videoReady) && (this.videoStreamParameters[0].ssrc = o, this.videoStreamParameters[0].rtxSsrc = l, this.emit(a.BaseConnectionEvent.Video, this.userId, this.input.getVideoStreamId(), this.audioSSRC, this.videoStreamParameters[0].ssrc, this.videoStreamParameters[0].rtxSsrc, this.videoStreamParameters), this.videoReady = !0) }), o.once("offer", e => { let { sdp: t } = e; this.emit(a.BaseConnectionEvent.Connected, "webrtc", (0, _.truncateSDP)(t)) }), null != this.input.stream ? o.setStream(this.input.stream) : o.negotiationNeeded(), this.pc = o } } function h(e, t, n, i) { let a = "".concat(null != r().name && "" !== r().name ? r().name : "unknown", " ").concat(null != r().version && "" !== r().version ? r().version : "unknown"), o = new s.Logger("Connection(".concat(e, ")")); return I.BROWSER_SUPPORTS_UNIFIED_PLAN ? (o.info("Using Unified Plan (".concat(a, ")")), new c.default(e, t, n, i)) : (o.info("Using Plan B (".concat(a, ")")), new S(e, t, n, i)) } }, 384136: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return a } }), n("411104"); var i = n("836560"), r = n("376398"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class a extends i.EventEmitter { static async get(e, t) { var n; let i = { ...e, frameRate: 30 }; if ((null === (n = navigator.mediaDevices) || void 0 === n ? void 0 : n.getDisplayMedia) != null) return new a(await navigator.mediaDevices.getDisplayMedia({ audio: t, video: i })); throw Error("UNKNOWN") } destroy() { this.removeAllListeners(), (0, r.unregisterVideoStream)(this.streamId), this.stream.getTracks().forEach(e => e.stop()) } reset() { this.refreshSpeaking() } getStreamId() { return this.streamId } refreshSpeaking() { this.emit("speaking", this.stream.getAudioTracks().some(e => e.enabled)) } constructor(e) { super(), s(this, "id", void 0), s(this, "stream", void 0), s(this, "streamId", void 0), e.getVideoTracks().forEach(e => { e.onended = () => { this.emit("desktopsourceend") } }), this.id = e.getVideoTracks()[0].label, this.stream = e, this.streamId = (0, r.registerVideoStream)(e) } } }, 740197: function(e, t, n) { "use strict"; n.r(t), n.d(t, { CAN_SET_DEVICES: function() { return r }, CAN_SET_OUTPUT_DEVICES: function() { return s }, getAudioInputDevices: function() { return d }, getAudioOutputDevices: function() { return _ }, getDevices: function() { return E }, getVideoInputDevices: function() { return c } }), n("177593"), n("653041"); var i = n("65154"); let r = null != navigator.mediaDevices && null != navigator.mediaDevices.enumerateDevices, s = r && "setSinkId" in HTMLAudioElement.prototype; function a(e) { return { id: i.DEFAULT_DEVICE_ID, type: e, index: 0, name: "Default" } } function o() { return [a(i.DeviceTypes.AUDIO_INPUT), a(i.DeviceTypes.AUDIO_OUTPUT), a(i.DeviceTypes.VIDEO_INPUT)] } function l(e, t) { return e.filter(e => e.type === t) } function u() { return r ? navigator.mediaDevices.enumerateDevices().then(e => { let t = 0, n = 0, r = 0; return e.filter(e => { switch (e.kind) { case i.DeviceTypes.AUDIO_INPUT: case i.DeviceTypes.AUDIO_OUTPUT: case i.DeviceTypes.VIDEO_INPUT: return !0; default: return !1 } }).map(e => { let s; switch (e.kind) { case i.DeviceTypes.AUDIO_INPUT: s = t++; break; case i.DeviceTypes.AUDIO_OUTPUT: s = n++; break; case i.DeviceTypes.VIDEO_INPUT: default: s = r++ } return { id: e.deviceId, type: e.kind, index: s, name: null != e.label && "" !== e.label ? e.label : 0 === s ? "Default" : "Device ".concat(s) } }) }).then(e => (!s && (e = e.filter(e => e.type !== i.DeviceTypes.AUDIO_OUTPUT)).push(a(i.DeviceTypes.AUDIO_OUTPUT)), e)).catch(o) : new Promise(e => { setImmediate(() => e(o())) }) } async function d() { return l(await u(), i.DeviceTypes.AUDIO_INPUT) } async function _() { return l(await u(), i.DeviceTypes.AUDIO_OUTPUT) } async function c() { return l(await u(), i.DeviceTypes.VIDEO_INPUT) } async function E() { let e = await u(); return [l(e, i.DeviceTypes.AUDIO_INPUT), l(e, i.DeviceTypes.AUDIO_OUTPUT), l(e, i.DeviceTypes.VIDEO_INPUT)] } }, 912978: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("653041"), n("411104"), n("47120"); var i = n("836560"), r = n("264344"), s = n.n(r), a = n("649318"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class l extends i.EventEmitter { addStream(e, t, n) { let i = !1; !this.streams.some(e => e.ssrc === t) && this.streams.push({ ssrc: t, cname: e, type: "audio" }), this.activeAudioSSRCs[e] !== t && (this.activeAudioSSRCs = { ...this.activeAudioSSRCs, [e]: t }, i = !0), null != n && (n > 0 ? (!this.streams.some(e => e.ssrc === n) && this.streams.push({ ssrc: n, cname: e, type: "video" }), this.activeVideoSSRCs[e] !== n && (this.activeVideoSSRCs = { ...this.activeVideoSSRCs, [e]: n }, i = !0)) : null != this.activeVideoSSRCs[e] && (i = !0, this.activeVideoSSRCs = { ...this.activeVideoSSRCs }, delete this.activeVideoSSRCs[e])), i && this.negotiationNeeded() } removeStream(e) { let t = !1; null != this.activeAudioSSRCs[e] && (t = !0, this.activeAudioSSRCs = { ...this.activeAudioSSRCs }, delete this.activeAudioSSRCs[e]), null != this.activeVideoSSRCs[e] && (t = !0, this.activeVideoSSRCs = { ...this.activeVideoSSRCs }, delete this.activeVideoSSRCs[e]), t && this.negotiationNeeded() } get sdp() { if (null == this._sdp) throw Error("sdp is not set"); return this._sdp } set sdp(e) { if (!(0, a.validateSdp)(e)) throw Error("Incorrect SDP received from rtc-worker: ".concat(e)); this._sdp = e, this.createAnswer(), this.connected = !0, this._negotiationNeeded && this.negotiationNeeded() } negotiationNeeded() { if (this.negotiating) { this._negotiationNeeded = !0; return } null != this._sdp ? (this.negotiating = !0, this._negotiationNeeded = !1, this.generateSessionDescription("offer")) : this._negotiationNeeded = !0 } setRemoteDescription(e) { return this.negotiating = !1, this._negotiationNeeded && this.negotiationNeeded(), Promise.resolve() } createAnswer() { return this.generateSessionDescription("answer") } getSSRCs(e) { let t = this.streams.map((e, t) => { let { cname: n, ssrc: i, type: r } = e, s = this.activeAudioSSRCs[n], o = this.activeVideoSSRCs[n], l = "".concat(r, "_inbound_").concat(t); return [i, n, r, s === i || o === i ? this.direction : a.Directions.INACTIVE, l] }); if ("Firefox" !== s().name) return this.connected ? t : []; let n = this.outboundStreams.map((e, t) => [0, "outbound", e.type, (0, a.getDirection)(e.direction), "".concat(e.type, "_outbound_").concat(t)]); if ("answer" !== e) return n.concat(t); { let e = n.length - t.length; return n.slice(0, e).concat(t).slice(0, n.length).map((e, t) => { let [n, i, r, s, o] = e; return [n, i, r, (0, a.getDirection)(this.outboundStreams[t].direction), this.outboundStreams[t].mid] }) } } generateSessionDescription(e) { let t = this.audioCodec, n = this.audioPayloadType, i = this.videoCodec, r = this.videoPayloadType, s = this.rtxPayloadType, o = this.sdp; if (null == t || null == n || null == i || null == r || null == s || null == o || null == this.direction) throw Error("Invalid payload: audioCodec: ".concat(t, ", audioPayloadType: ").concat(null == n ? "null" : n, ", videoCodec: ").concat(i, ", videoCodecPayloadType: ").concat(null == r ? "null" : r, ", rtxPayloadType: ").concat(null == s ? "null" : s, ", sdp: ").concat(o)); let l = (0, a.generateSessionDescription)({ type: e, baseSDP: o, direction: this.direction, audioCodec: t, audioPayloadType: n, audioBitRate: 40, videoCodec: i, videoPayloadType: r, videoBitRate: 2500, rtxPayloadType: s, ssrcs: this.getSSRCs(e), extensions: this.extensions }); return this.emit(e, l), Promise.resolve(l) } constructor(...e) { super(...e), o(this, "audioCodec", null), o(this, "audioPayloadType", null), o(this, "videoCodec", null), o(this, "videoPayloadType", null), o(this, "rtxPayloadType", null), o(this, "direction", null), o(this, "outboundStreams", []), o(this, "extensions", []), o(this, "streams", []), o(this, "activeAudioSSRCs", {}), o(this, "activeVideoSSRCs", {}), o(this, "_sdp", null), o(this, "connected", !1), o(this, "negotiating", !1), o(this, "_negotiationNeeded", !1) } } }, 106617: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return i } }); class i { acquire(e) { return navigator.mediaDevices.getUserMedia(e) } release(e) { e.getTracks().forEach(e => { e.onended = function() {}, e.stop() }) } } }, 886848: function(e, t, n) { "use strict"; n.r(t), n.d(t, { InputEvent: function() { return r }, default: function() { return u } }); var i, r, s = n("47770"), a = n("68721"), o = n("591218"); function l(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }(i = r || (r = {})).Stream = "stream", i.Video = "video", i.Mute = "mute", i.VoiceActivity = "voiceactivity", i.DesktopSourceEnd = "desktopsourceend", i.Speaking = "speaking", i.AudioPermission = "audio-permission", i.VideoPermission = "video-permission", i.AddVideoTrack = "add-video-track"; class u extends s.default { destroy() { this.removeAllListeners(), this.destroyStreams() } destroyStreams() { var e; this.audio.destroy(), this.video.destroy(), null === (e = this.desktop) || void 0 === e || e.destroy() } setDesktop(e) { this.destroyStreams(), null == e || e.addListener("desktopsourceend", this.handleDesktopSourceEnd), null == e || e.addListener("speaking", this.handleSpeaking), this.desktop = e, this.mergeStreams() } reset() { var e; this.audio.reset(), null === (e = this.desktop) || void 0 === e || e.reset() } getVideoStream() { return null != this.desktop ? this.desktop.stream : this.video.stream } getVideoStreamId() { return null != this.desktop ? this.desktop.getStreamId() : this.video.getStreamId() } enableAudioInput() { this.audio.enable() } setAudioMode(e, t) { this.audio.setMode(e, t) } setMute(e) { this.audio.mute = e, this.emit("mute", e) } setEchoCancellation(e) { this.audio.echoCancellation = e } setNoiseSuppression(e) { this.audio.noiseSuppression = e } setNoiseCancellation(e) { this.audio.noiseCancellation = e } setAutomaticGainControl(e) { this.audio.automaticGainControl = e } setPTTActive(e) { this.audio.setPTTActive(e) } setAudioSource(e) { this.audio.setSource(e) } setVideoSource(e) { this.video.setSource(e) } mute() { return this.audio.mute } resumeAudio() { this.audio.resume() } getAudioState() { return this.audio.state } hasDesktopSource() { return null != this.desktop } constructor(e) { super(), l(this, "audio", void 0), l(this, "video", new o.default), l(this, "desktop", null), l(this, "stream", void 0), l(this, "mergeStreams", () => { var e, t, n; let i = new MediaStream; return null != this.desktop ? (null === (e = this.desktop.stream) || void 0 === e || e.getTracks().forEach(e => i.addTrack(e)), this.desktop.refreshSpeaking()) : (null === (t = this.audio.stream) || void 0 === t || t.getAudioTracks().forEach(e => i.addTrack(e)), null === (n = this.video.stream) || void 0 === n || n.getVideoTracks().forEach(e => i.addTrack(e))), this.stream = i, this.emit("stream", i), this.emit("video", this.getVideoStreamId()), i }), l(this, "handleVoiceActivity", e => { this.emit("voiceactivity", e) }), l(this, "handleDesktopSourceEnd", () => { this.emit("desktopsourceend") }), l(this, "handleSpeaking", e => { this.emit("speaking", e) }), l(this, "handleAudioPermission", e => { this.emit("audio-permission", e) }), l(this, "handleVideoPermission", e => { this.emit("video-permission", e) }), this.audio = new a.default(e), this.audio.addListener("voiceactivity", this.handleVoiceActivity), this.audio.addListener("speaking", this.handleSpeaking), this.audio.addListener("stream", this.mergeStreams), this.audio.addListener("permission", this.handleAudioPermission), this.video.addListener("stream", this.mergeStreams), this.video.addListener("permission", this.handleVideoPermission), this.video.addListener("add-video-track", e => this.emit("add-video-track", e)) } } }, 290488: function(e, t, n) { "use strict"; let i; function r() { return null != i ? i : i = (async () => { let { default: e } = await n.e("20353").then(n.t.bind(n, "62994", 23)), t = new e({ params: { logProcessStats: !1, useSharedArrayBuffer: !1, debugLogs: !1, bufferOverflowMS: 200, models: { model8: "https://cdn.discordapp.com/assets/krisp_browser_models/v1.0.11_1/model_8.kw", model16: "https://cdn.discordapp.com/assets/krisp_browser_models/v1.0.11_1/model_16.kw", model32: "https://cdn.discordapp.com/assets/krisp_browser_models/v1.0.11_1/model_32.kw" } } }); return await t.init(), t })() } n.r(t), n.d(t, { getKrispSDK: function() { return r } }) }, 579237: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }), n("47120"); var i = n("836560"), r = n("68721"), s = n("961304"), a = n("65154"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = { voiceActivityDetection: !0, offerToReceiveAudio: !0, offerToReceiveVideo: !1, iceRestart: !1 }; class u extends i.EventEmitter { stop() { for (let e of (this.pc1.close(), this.pc2.close(), this.input.destroy(), Object.keys(this.outputs))) this.destroyOutput(e) } setAudioSource(e) { this.input.setSource(e) } setAudioSink(e) { for (let t of (this.sinkId = e, Object.keys(this.outputs))) this.outputs[t].setSinkId(e) } setNoiseCancellation(e) { this.input.noiseCancellation = e } createOutput(e, t) { let n = this.outputs[e]; null == n && ((n = new s.default(this.userId, this.audioContext)).mute = !1, n.volume = 100, n.setSpeakingFlags(a.SpeakingFlags.VOICE), n.setSinkId(this.sinkId), this.outputs[e] = n), n.addTrack(t), n.play() } destroyOutput(e, t) { let n = this.outputs[e]; null != n && (null == t || 0 === n.removeTrack(t)) && (n.destroy(), delete this.outputs[e]) } handshake() { let e = e => { let t = e.sdp.split("\n"); for (let e = 0; e < t.length; e++) { let n = t[e]; if (/^a=mid:/.test(n)) break } return e.sdp = t.join("\n"), e }; this.pc1.createOffer(l).then(t => { this.pc1.setLocalDescription(e(t)).then(() => { this.pc2.setRemoteDescription(t).then(() => { this.pc2.createAnswer().then(e => { this.pc2.setLocalDescription(e).then(() => { this.pc1.setRemoteDescription(e) }) }) }) }) }) } constructor(e, t, n, i = "") { super(), o(this, "userId", void 0), o(this, "sinkId", void 0), o(this, "input", void 0), o(this, "pc1", void 0), o(this, "pc2", void 0), o(this, "senders", []), o(this, "outputs", {}), o(this, "audioContext", void 0), o(this, "handleStream", () => { let e = this.input.getDelayedStream(); this.senders.forEach(e => this.pc1.removeTrack(e)), this.senders = [...e.getAudioTracks().map(t => this.pc1.addTrack(t, e))], this.handshake() }), o(this, "handleTrack", e => { e.streams[0].getTracks().forEach(e => { this.createOutput(e.id, e), e.onmute = () => { this.destroyOutput(e.id, e) } }) }), this.userId = i, this.sinkId = n, this.pc1 = new RTCPeerConnection, this.pc1.onicecandidate = e => { null != e.candidate && this.pc2.addIceCandidate(e.candidate) }, this.pc2 = new RTCPeerConnection, this.pc2.onicecandidate = e => { null != e.candidate && this.pc1.addIceCandidate(e.candidate) }, this.pc2.ontrack = this.handleTrack, this.input = new r.default(e), this.input.setSource(t), this.input.on("stream", this.handleStream), this.input.enable(), this.audioContext = e } } }, 961304: function(e, t, n) { "use strict"; n.r(t), n.d(t, { OutputEvent: function() { return r }, default: function() { return c } }); var i, r, s = n("259443"), a = n("47770"), o = n("740197"), l = n("376398"), u = n("65154"); function d(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let _ = new s.Logger("Output"); (i = r || (r = {})).InteractionRequired = "interactionrequired", i.Speaking = "speaking", i.Video = "video"; class c extends a.default { play() { var e; null === (e = this.audioElement) || void 0 === e || e.play() } destroy() { var e; null === (e = this.audioElement) || void 0 === e || e.pause(), null != this.videoStreamId && (0, l.unregisterVideoStream)(this.videoStreamId), null != this.streamSourceNode && (this.streamSourceNode.disconnect(), this.streamSourceNode = null), null != this.levelNode && (this.levelNode.disconnect(), this.levelNode.port.postMessage("close"), this.levelNode = null), this.setSpeakingFlags(u.SpeakingFlags.NONE), this.removeAllListeners() } addTrack(e) { if (this.stream.getTracks().includes(e)) return this.stream.getTracks().length; if (this.stream.addTrack(e), null == this.audioElement) { let e = document.createElement("audio"); e.srcObject = this.stream; let t = e.play(); null != t && t.catch(() => this.emit("interactionrequired", !0)), this.audioElement = e, this.updateAudioElement() } if (null == this.levelNode && this.stream.getAudioTracks().length > 0) { this.streamSourceNode = this.audioContext.createMediaStreamSource(this.stream); try { this.levelNode = new AudioWorkletNode(this.audioContext, "level-processor"), this.levelNode.port.onmessage = e => { this.emit("speaking", e.data) }, null != this.streamSourceNode && this.streamSourceNode.connect(this.levelNode) } catch (e) { _.warn("Output#Failed to setup speaking indicator: ".concat(e)) } } return "video" === e.kind && (null != this.videoStreamId && (0, l.unregisterVideoStream)(this.videoStreamId), this.stream.getVideoTracks().forEach(t => { e !== t && (t.discordIsTearingDown = !0, this.stream.removeTrack(t)) }), this.videoStreamId = (0, l.registerVideoStream)(this.stream), this.emit("video", this.videoStreamId)), "audio" === e.kind && this.stream.getAudioTracks().forEach(t => { e !== t && (t.discordIsTearingDown = !0, this.stream.removeTrack(t)) }), this.stream.getTracks().length } removeTrack(e) { return this.stream.removeTrack(e), "video" === e.kind && (null != this.videoStreamId && (0, l.unregisterVideoStream)(this.videoStreamId), this.emit("video", null)), this.stream.getTracks().length } setSinkId(e) { this.sinkId = e, this.updateAudioElement() } get mute() { return this._mute } set mute(e) { this._mute = e || !1, this.updateAudioElement() } get priority() { return (this._speakingFlags & u.SpeakingFlags.PRIORITY) === u.SpeakingFlags.PRIORITY } get volume() { return this._volume } set volume(e) { this._volume = Math.max(0, Math.min(Math.round(e), u.DEFAULT_VOLUME)), this.updateAudioElement() } get speakingFlags() { return this._speakingFlags } setSpeakingFlags(e) { this._speakingFlags !== e && (this._speakingFlags = e, this.updateAudioElement()) } updateAudioElement() { let e = this.audioElement; if (null != e) { e.muted = this._mute, e.volume = this._volume / 100; let t = this.sinkId; null != t && o.CAN_SET_OUTPUT_DEVICES && e.setSinkId(t) } } constructor(e, t) { super(), d(this, "id", void 0), d(this, "_speakingFlags", u.SpeakingFlags.NONE), d(this, "_mute", !1), d(this, "_volume", u.DEFAULT_VOLUME), d(this, "sinkId", null), d(this, "audioElement", null), d(this, "stream", new MediaStream), d(this, "videoStreamId", null), d(this, "levelNode", null), d(this, "streamSourceNode", null), d(this, "audioContext", void 0), this.id = e, this.audioContext = t } } }, 236842: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"), n("411104"); var i = n("836560"), r = n("259443"), s = n("436620"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = new r.Logger("PeerConnection"); class l extends i.EventEmitter { setBitRate(e) { this.bitrate !== e && (this.bitrate = e, this.negotiationNeeded()) } close() { o.info("Close RTCPeerConnection"), "closed" !== this.signalingState && this.pc.close(), this.removeAllListeners() } get peerConnectionState() { return this.pc.connectionState } get iceGatheringState() { return this.pc.iceGatheringState } get iceConnectionState() { return this.pc.iceConnectionState } get signalingState() { return this.pc.signalingState } get connected() { return null != this.pc && /connected|completed/.test(this.pc.iceConnectionState) } setStream(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = this.pc, i = "closed" === this.iceConnectionState, r = !1; null != this.stream && !i && (this.senders.forEach(e => n.removeTrack(e)), r = !0), this.stream = e, this.senders = [], null != e && !i && (this.senders = [...e.getAudioTracks().map(t => n.addTrack(t, e)), ...e.getVideoTracks().map(t => n.addTrack(t, e))], r = !0), r && !t && this.negotiationNeeded() } createOffer() { let e = this.pc; return e.createOffer(this.makeOfferAnswerOptions()).then(t => e.setLocalDescription(this.mungeLocalDescription(t))).then(() => { let t = e.localDescription; if (null == t) throw Error("localDescription is null"); return this.emit("offer", t), t }).catch(t => { if ("have-remote-offer" === e.signalingState) return o.error(t), this.createOffer(); throw t }) } createAnswer() { let e = this.pc; return e.createAnswer(this.makeOfferAnswerOptions()).then(t => e.setLocalDescription(this.mungeLocalDescription(t))).then(() => { let t = e.localDescription; if (null == t) throw Error("localDescription is null"); return this.emit("answer", t), t }).catch(t => { throw o.warn("PeerConnection#createAnswer: Attempted to set local description in state: ".concat(e.signalingState)), t }) } negotiationNeeded() { if (this.negotiating) { this._negotiationNeeded = !0; return } this.negotiating = !0, this._negotiationNeeded = !1, this.createOffer() } setRemoteDescription(e) { return this.pc.setRemoteDescription(e) } getStats() { return this.pc.getStats() } makeOfferAnswerOptions() { return { offerToReceiveAudio: !0, offerToReceiveVideo: s.BROWSER_SUPPORTS_VIDEO, iceRestart: !1 } } mungeLocalDescription(e) { let t = e.sdp.split("\n"); for (let e = 0; e < t.length; e++) { let n = t[e]; if (/^a=mid:/.test(n)) { null != this.bitrate && t.splice(e + 1, 0, "b=AS:".concat(Math.floor(this.bitrate / 1e3))); break } } return e.sdp = t.join("\n"), e } emitTrack(e, t) { !/^default/.test(t.id) && (t.onended = () => { this.emit("removetrack", e, t) }, this.emit("addtrack", e, t)) } constructor(e) { super(), a(this, "bitrate", void 0), a(this, "pc", void 0), a(this, "stream", null), a(this, "senders", []), a(this, "negotiating", !1), a(this, "_negotiationNeeded", !1), a(this, "handlePeerConnectionStateChange", () => { let e = this.peerConnectionState; o.info("peerConnectionState =>", e), "connecting" === e ? "connected" === this.iceConnectionState ? this.emit(e) : this.emit(this.iceConnectionState) : this.emit(e) }), a(this, "handleIceConnectionStateChange", () => { let e = this.iceConnectionState; o.info("iceConnectionState =>", e), "completed" === e && (e = "connected"), this.emit(e) }), a(this, "handleSignalingStateChange", () => { o.info("signalingState => ".concat(this.signalingState, ", negotiation needed: ").concat(this._negotiationNeeded.toString())), "stable" === this.signalingState && (this.negotiating = !1, this._negotiationNeeded && this.negotiationNeeded()) }), a(this, "handleIceGatheringStateChange", () => { o.info("iceGatheringState =>", this.iceGatheringState) }), a(this, "handleTrack", e => { this.emitTrack(e.streams[0].id, e.track) }), this.bitrate = e; let t = this.pc = new RTCPeerConnection({ sdpSemantics: "plan-b" }); s.BROWSER_SUPPORTS_CONNECTION_STATE ? (t.onconnectionstatechange = this.handlePeerConnectionStateChange, t.oniceconnectionstatechange = this.handlePeerConnectionStateChange) : t.oniceconnectionstatechange = this.handleIceConnectionStateChange, t.onsignalingstatechange = this.handleSignalingStateChange, t.onicegatheringstatechange = this.handleIceGatheringStateChange, t.ontrack = this.handleTrack.bind(this), o.info("Constructed RTCPeerConnection") } } }, 649318: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Directions: function() { return r }, extractSDP: function() { return v }, generateSessionDescription: function() { return R }, generateUnifiedSessionDescription: function() { return g }, getDirection: function() { return N }, getExtensions: function() { return y }, truncateSDP: function() { return D }, validateSdp: function() { return M } }), n("47120"), n("536091"), n("411104"), n("653041"), n("724458"), n("852437"); var i, r, s, a, o = n("403644"), l = n.n(o), u = n("565925"), d = n.n(u), _ = n("21690"), c = n.n(_), E = n("264344"), I = n.n(E), T = n("988367"), f = n("259443"), S = n("65154"), h = n("436620"); let A = new f.Logger("SDP"); (s = i || (i = {})).AUDIO = "a", s.VIDEO = "v", (a = r || (r = {})).SENDRECV = "sendrecv", a.SENDONLY = "sendonly", a.RECVONLY = "recvonly", a.INACTIVE = "inactive"; let m = "UDP/TLS/RTP/SAVPF"; function N(e) { switch (e) { case "recvonly": return "sendonly"; case "sendonly": return "recvonly"; case "sendrecv": return "sendrecv"; default: return "inactive" } } function p(e, t, n) { let i = "".concat(e, "-").concat(t), r = "".concat(n).concat(i); return [{ attribute: "cname", id: t, value: i }, { attribute: "msid", id: t, value: "".concat(i, " ").concat(r) }, { attribute: "mslabel", id: t, value: i }, { attribute: "label", id: t, value: r }] } function O(e) { return T.write({ version: 0, timing: { start: 0, stop: 0 }, origin: { address: "127.0.0.1", ipVer: 4, netType: "IN", sessionId: "1420070400000", sessionVersion: 0, username: "-" }, name: "-", msidSemantic: { semantic: "WMS", token: "*" }, groups: [{ type: "BUNDLE", mids: e.filter(e => null != e.mid).map(e => e.mid).join(" ") }], media: e }) } function C(e) { let { mid: t, type: n, setup: i, direction: r, baseSDP: s, codec: a, payload: o, bitrate: u, ssrcs: d, extensions: _, rtxPayload: c, sendingVideo: E } = e; if ("inactive" === r && !h.BROWSER_SUPPORTS_UNIFIED_PLAN) return { connection: { ip: "0.0.0.0", version: 4 }, direction: "inactive", fmtp: [], payloads: o, port: 0, protocol: m, rtp: [{ codec: "NULL", payload: o, rate: 0 }], mid: void 0, type: n }; let { media: [f] } = T.parse(s); if (f.type = n, f.protocol = m, f.payloads = o, f.setup = i, f.mid = t, f.rtcpMux = "rtcp-mux", f.direction = r, f.ssrcs = d, d.length > 0 && (null != c && (f.ssrcGroups = l()(d, 4).map(e => { let t = e[0].id; return { semantics: "FID", ssrcs: "".concat(t, " ").concat(t + 1) } }), f.ssrcs = l()(d, 4).map(e => { let t = e.map(e => (e = { ...e }, e.id += 1, e)); return [...e, ...t] }).flat()), h.BROWSER_SUPPORTS_UNIFIED_PLAN || "Firefox" === I().name)) { let e = d.find(e => "msid" === e.attribute); if (null == e) throw Error("msid missing"); f.msid = e.value, f.ssrcs = f.ssrcs.filter(e => "cname" === e.attribute) } switch (n) { case "audio": "Firefox" === I().name ? f.ext = _.filter(e => "urn:ietf:params:rtp-hdrext:ssrc-audio-level" === e.uri) : (f.ext = _.filter(e => "urn:ietf:params:rtp-hdrext:ssrc-audio-level" === e.uri || "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" === e.uri), f.rtcpFb = [{ type: "transport-cc", payload: o }]), f.rtp.push({ codec: a, encoding: 2, payload: o, rate: 48e3 }), a === S.Codecs.OPUS && f.fmtp.push({ config: "minptime=10;useinbandfec=1;usedtx=".concat(E ? "0" : "1"), payload: o }), f.maxptime = 60; break; case "video": f.ext = _.filter(e => "urn:ietf:params:rtp-hdrext:toffset" === e.uri || "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time" === e.uri || "urn:3gpp:video-orientation" === e.uri || "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" === e.uri || "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay" === e.uri), f.rtp.push({ codec: a, payload: o, rate: 9e4 }); let A = "x-google-max-bitrate=".concat(u); a === S.Codecs.H264 && (A += ";level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f"), f.fmtp.push({ config: A, payload: o }), f.rtcpFb = [{ type: "ccm", subtype: "fir", payload: o }, { type: "nack", payload: o }, { type: "nack", subtype: "pli", payload: o }, { type: "goog-remb", payload: o }, { type: "transport-cc", payload: o }], null != c && (f.rtp.push({ codec: "rtx", payload: c, rate: 9e4 }), f.fmtp.push({ config: "apt=".concat(o), payload: c }), f.payloads = "".concat(f.payloads, " ").concat(c)) } return f } function R(e) { let { type: t, baseSDP: n, direction: i, audioCodec: r, audioPayloadType: s, audioBitRate: a, videoCodec: o, videoPayloadType: l, videoBitRate: u, rtxPayloadType: d, ssrcs: _, extensions: c } = e, E = []; if (A.info("generateSessionDescription: ".concat(JSON.stringify(_))), "Firefox" === I().name) { let e = "answer" === t ? "passive" : "active"; _.forEach(t => { let [i, _, I, T, f] = t; if ("video" !== I || 0 !== l && 0 !== d) E.push(C({ mid: f, type: I, setup: e, direction: T, baseSDP: n, codec: "audio" === I ? r : o, payload: "audio" === I ? s : l, bitrate: "audio" === I ? a : u, ssrcs: p(_, i, "audio" === I ? "a" : "v"), extensions: c })) }) } else { let e = "answer" === t ? "passive" : "actpass", I = _.filter(e => { let [t, n, i, r, s] = e; return "inactive" !== r && "audio" === i }).map(e => { let [t, n] = e; return p(n, t, "a") }); if (E.push(C({ mid: "audio", type: "audio", setup: e, direction: i, baseSDP: n, codec: r, payload: s, bitrate: a, ssrcs: I.flat(), extensions: c })), l > 0) { let t = _.filter(e => { let [t, n, i, r, s] = e; return "inactive" !== r && "video" === i }).map(e => { let [t, n] = e; return p(n, t, "v") }); E.push(C({ mid: "video", type: "video", setup: e, direction: i, baseSDP: n, codec: o, payload: l, bitrate: u, ssrcs: t.flat(), extensions: c, rtxPayload: d })) } } let T = O(E); return new RTCSessionDescription({ type: t, sdp: T }) } function g(e) { let { type: t, baseSDP: n, audioCodec: i, audioPayloadType: r, audioBitRate: s, videoCodec: a, videoPayloadType: o, videoBitRate: l, sendingVideo: u, rtxPayloadType: d, ssrcs: _, extensions: c } = e, E = [], I = "answer" === t ? "passive" : "actpass"; _.forEach(e => { let t, { ssrc: _, cname: T, type: f, direction: S, mid: h } = e; "" !== T ? t = p(T, _, "audio" === f ? "a" : "v") : (t = [], "sendonly" === S ? S = "inactive" : "sendrecv" === S && (S = "recvonly")); E.push(C({ mid: h, type: f, setup: I, direction: S, baseSDP: n, codec: "audio" === f ? i : a, payload: "audio" === f ? r : o, bitrate: "audio" === f ? s : l, ssrcs: t, extensions: c, rtxPayload: "audio" === f ? null : d, sendingVideo: u })) }); let T = O(E); return new RTCSessionDescription({ type: t, sdp: T }) } function L(e, t, n, i, r) { let s = e.find(e => e.codec === i); if (null == s) return null; let a = t.find(e => RegExp("^apt=".concat(s.payload)).test(e.config)), o = null; if (null != a) { let t = e.find(e => e.codec === S.Codecs.RTX && e.payload === a.payload); null != t && (o = t.payload) } return { type: n, name: i, priority: r + 1, payloadType: s.payload, rtxPayloadType: o } } function v(e) { let t = T.parse(e).media.reduce((e, t) => { let n, { type: i, rtp: r, ssrcs: s, fmtp: a, direction: o, mid: l } = t; switch (e.outboundStreams.push({ type: i, direction: o, mid: l }), i) { case "audio": [S.Codecs.OPUS].forEach((t, n) => { let s = L(r, a, i, t, n); null != s && e.codecs.push(s) }), "sendrecv" === o && null != (n = null == s ? void 0 : s.find(e => "cname" === e.attribute)) && (e.audioSSRC = n.id); break; case "video": [S.Codecs.H264, S.Codecs.VP8, S.Codecs.VP9].forEach((t, n) => { let s = L(r, a, i, t, n); null != s && e.codecs.push(s) }), "sendrecv" === o && (null != (n = null == s ? void 0 : s.find(e => "cname" === e.attribute)) && (e.videoSSRC = n.id), null != (n = null == s ? void 0 : s.findLast(e => "cname" === e.attribute)) && (n.id === e.videoSSRC && A.warn("Unable to find a unique rtx SSRC!"), e.rtxSSRC = n.id)) } return e }, { outboundStreams: [], codecs: [], audioSSRC: 0, videoSSRC: 0, rtxSSRC: 0 }); return t.codecs = c()(t.codecs, d()), t } function D(e) { var t; let { codecs: n } = v(e), i = n.find(e => e.name === S.Codecs.VP8), r = RegExp("^a=ice|a=extmap|a=fingerprint|opus|VP8|".concat(null !== (t = null == i ? void 0 : i.rtxPayloadType) && void 0 !== t ? t : 0, " rtx"), "i"); return { sdp: [...new Set(e.split(/\r\n/).filter(e => r.test(e)))].join("\n"), codecs: n } } function M(e) { if (!e.includes("a=fingerprint")) return A.error("Remote SDP does not include fingerprint!"), !1; if (!e.includes("a=ice-ufrag")) return A.error("Remote SDP does not include ICE user name!"), !1; if (!e.includes("a=ice-pwd")) return A.error("Remote SDP does not include ICE password!"), !1; if (!e.includes("a=candidate")) return A.error("Remote SDP does not include ICE candidate!"), !1; if (!e.includes("c=")) return A.error("Remote SDP does not include c-line!"), !1; let t = e.split("\n").filter(e => e.startsWith("c=")).join().trim(); return !(t.split(" ").length < 3) || (A.error("Incorrect c-line: ".concat(t)), !1) } function y(e) { return [...new Set(e.split(/\r\n/).filter(e => e.startsWith("a=extmap:")))].map(e => { let t = e.split(" "); return { value: parseInt(t[0].split("/")[0].substr(9), 10), uri: t[1] } }) } }, 199857: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return f } }), n("653041"), n("411104"), n("47120"); var i, r = n("264344"), s = n.n(r), a = n("259443"), o = n("46973"), l = n("912095"), u = n("886848"), d = n("649318"), _ = n("65154"), c = n("436620"); function E(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let I = null === (i = s().name) || void 0 === i ? void 0 : i.toLowerCase().includes("firefox"); function T(e, t) { e.sender.replaceTrack(t), e.direction = null != t ? "sendrecv" : "recvonly" } class f extends l.default { destroy() { super.destroy(), "closed" !== this.signalingState && this.pc.close() } setCodecs(e, t, n) { var i, r, s; let a; (this.audioCodec !== e || this.videoCodec !== t) && (a = this.codecs.find(t => t.name === e), this.audioCodec = e, this.audioPayloadType = null !== (i = null == a ? void 0 : a.payloadType) && void 0 !== i ? i : 0, a = this.codecs.find(e => e.name === t), this.videoCodec = t, this.videoPayloadType = null !== (r = null == a ? void 0 : a.payloadType) && void 0 !== r ? r : 0, this.rtxPayloadType = null !== (s = null == a ? void 0 : a.rtxPayloadType) && void 0 !== s ? s : 0, this.logger.info("Renegotiating: Codecs changed"), this.handleNegotiationNeeded()) } setStream(e) { let t = "closed" === this.iceConnectionState; null != e && !t && (T(this.audioTransceiver, e.getAudioTracks()[0]), this.videoSupported && T(this.videoTransceiver, e.getVideoTracks()[0])), this.logger.info("Renegotiating: Streams changed"), this.handleNegotiationNeeded() } createUser(e, t, n) { var i; if (0 === t) { this.logger.warn("Attempting to create user ".concat(e, " with 0 audio SSRC")); return } this.logger.info("Creating user: ".concat(e, " with audio SSRC: ").concat(t, " and video SSRCs: ").concat(null !== (i = null == n ? void 0 : n.join(",")) && void 0 !== i ? i : 0)); let r = !1, s = this.users.get(e); if (null == s && (s = {}), s.audioSSRC !== t) { s.audioSSRC = t, r = !0, this.unassignedStreams.audio.push({ cname: e, ssrc: t }); let n = this.inactiveTransceivers.audio.length, i = this.unassignedStreams.audio.length; this.addTransceivers("audio", "recvonly", 10 + i - n) } if (this.videoSupported && void 0 !== n && (!I || void 0 === s.videoSSRC)) { let t = null != n && n.length > 0 ? n[0] : 0; if (t > 0) { if (s.videoSSRC !== t) { s.videoSSRC = t, r = !0, this.unassignedStreams.video.push({ cname: e, ssrc: t }); let n = this.inactiveTransceivers.video.length, i = this.unassignedStreams.video.length; this.addTransceivers("video", "recvonly", 10 + i - n) } } else null != s.videoSSRC && (s.videoSSRC = void 0, r = !0) } if (r) { this.users.set(e, s), t > 0 && this.userIdsBySsrc.set(t, e); let i = null != n && n.length > 0 ? n[0] : 0; i > 0 && this.userIdsBySsrc.set(i, e), this.logger.info("Renegotiating: User joined"), this.handleNegotiationNeeded() } } destroyUser(e) { let t = this.users.get(e); if (null != t) { let { audioSSRC: n, videoSSRC: i } = t; this.users.delete(e), null != n && this.userIdsBySsrc.delete(n), null != i && this.userIdsBySsrc.delete(i), this.logger.info("Renegotiating: User left"), this.handleNegotiationNeeded() } } setBitRate(e) { this.voiceBitrate !== e && (super.setBitRate(e), this.setAudioEncoderParameters([{ parameter: l.EncoderParameter.AUDIO_BITRATE, value: e }])) } setSDP(e) { if (!(0, d.validateSdp)(e)) throw Error("Incorrect SDP received from rtc-worker: ".concat(e)); this.sdp = e, this.setRemoteAnswer() } get peerConnectionState() { return this.pc.connectionState } get iceGatheringState() { return this.pc.iceGatheringState } get iceConnectionState() { return this.pc.iceConnectionState } get signalingState() { return this.pc.signalingState } get connected() { return "connected" === this.pc.iceConnectionState } setTransceiverEncodingParameters(e, t) { if (null == e || 0 === t.length) return; let n = e.sender, i = n.getParameters(); if (null == i.encodings) return; let r = !1; for (let e of i.encodings) for (let { propertyName: n, value: i } of t) e[n] !== i && (this.logger.info("UnifiedConnection.setTransceiverEncodingParameters: ".concat(n, ": from '").concat(e[n], "' to '").concat(i, "'")), r = !0, e[n] = i); if (!r) return; let s = e => { this.logger.error('UnifiedConnection.setTransceiverEncodingProperty: setParameters failed: "'.concat(e, '" (').concat(JSON.stringify(t), ')"')) }; n.setParameters(i).then(() => {}, e => s(e)).catch(e => s(e)) } setAudioEncoderParameters(e) { let t = { [l.EncoderParameter.AUDIO_BITRATE]: "maxBitrate" }, n = []; for (let { parameter: i, value: r } of e) { let e = t[i]; if (null == e) { this.logger.info('UnifiedConnection.setEncoderParameter: Unable to set parameter "'.concat(i, '"')); return } n.push({ propertyName: e, value: r }) } this.setTransceiverEncodingParameters(this.audioTransceiver, n) } setVideoEncoderParameters(e) { let t = { [l.EncoderParameter.VIDEO_BITRATE]: "maxBitrate", [l.EncoderParameter.VIDEO_RESOLUTION_SCALE]: "scaleResolutionDownBy", [l.EncoderParameter.VIDEO_FRAMERATE]: "maxFramerate" }, n = []; for (let { parameter: i, value: r } of e) { let e = t[i]; if (null == e) { this.logger.info('UnifiedConnection.setEncoderParameter: Unable to set parameter "'.concat(i, '"')); return } n.push({ propertyName: e, value: r }) } this.setTransceiverEncodingParameters(this.videoTransceiver, n) } getRawStats() { return this.pc.getStats() } makeOfferAnswerOptions() { return { iceRestart: !1 } } parseLocalDescription() { let e = this.pc.localDescription; if (null == e) throw Error("localDescription is null"); let t = e.sdp, { outboundStreams: n, codecs: i, audioSSRC: r, videoSSRC: s, rtxSSRC: a } = (0, d.extractSDP)(t); return this.outboundStreams = n, this.codecs = i, this.extensions = (0, d.getExtensions)(t), this.audioSSRC = r, this.videoReady = s > 0 && a > 0, (this.videoStreamParameters[0].ssrc !== s || this.videoStreamParameters[0].rtxSsrc !== a || this.videoReady) && (this.videoStreamParameters[0].ssrc = 0 === s ? this.videoStreamParameters[0].ssrc : s, this.videoStreamParameters[0].rtxSsrc = 0 === a ? this.videoStreamParameters[0].rtxSsrc : a, this.videoStreamParameters[0].active = this.videoReady, this.emit(o.BaseConnectionEvent.Video, this.userId, this.input.getVideoStreamId(), this.audioSSRC, s, a, this.videoStreamParameters)), t } addTransceivers(e, t, n, i) { let r = this.pc, s = r.getTransceivers().length; for (let a = s; a < s + n; a++) "video" === e && null != i ? r.addTransceiver(e, { direction: t, streams: [i] }) : r.addTransceiver(e, { direction: t }), this.inactiveTransceivers[e].push(a.toString()) } buildSSRCsFromOutboundStreams() { return this.outboundStreams.map(e => { let { mid: t, type: n, direction: i } = e; t = String(t); let r = this.assignedStreams.get(t); if (null != r) { let e = this.users.get(r.cname), i = "audio" === n ? null == e ? void 0 : e.audioSSRC : null == e ? void 0 : e.videoSSRC; r.ssrc !== i && (r = void 0, this.assignedStreams.delete(t)) } let s = this.unassignedStreams[n], a = this.inactiveTransceivers[n], o = a.indexOf(t); return null == r && s.length > 0 && -1 !== o && (r = s.pop(), a.splice(o, 1), this.assignedStreams.set(t, r)), null == r && (r = { ssrc: -1, cname: "" }), { ssrc: r.ssrc, cname: r.cname, type: n, direction: (0, d.getDirection)(i), mid: t } }) } generateSDPAnswer() { var e, t; let n = this.audioCodec, i = this.audioPayloadType, r = this.videoCodec, s = this.videoPayloadType, a = this.videoSupported && (null === (t = this.videoTransceiver) || void 0 === t ? void 0 : null === (e = t.sender) || void 0 === e ? void 0 : e.track) != null, o = this.rtxPayloadType, l = this.sdp; if (null == n || null == i || null == r || null == s || null == o || null == l) throw Error("Invalid payload: audioCodec: ".concat(n, ", audioPayloadType: ").concat(null == i ? "null" : i, ", videoCodec: ").concat(r, ", videoCodecPayloadType: ").concat(null == s ? "null" : s, ", rtxPayloadType: ").concat(null == o ? "null" : o, ", sdp: ").concat(null == l ? "null" : l)); let u = this.buildSSRCsFromOutboundStreams(); return (0, d.generateUnifiedSessionDescription)({ type: "answer", baseSDP: l, audioCodec: n, audioPayloadType: i, audioBitRate: this.voiceBitrate, videoCodec: r, videoPayloadType: s, videoBitRate: 2500, sendingVideo: a, rtxPayloadType: o, ssrcs: u, extensions: this.extensions }) } async setRemoteAnswer() { let e = this.pc, t = this.generateSDPAnswer(); await e.setRemoteDescription(t), (this.unassignedStreams.audio.length > 0 || this.unassignedStreams.video.length > 0) && (this.negotiationNeeded = !0, this.logger.info("Renegotiating: Streams left unassigned after negotiation - renegotiate")), this.negotiating = !1, this.negotiationNeeded && this.handleNegotiationNeeded() } setConnected() { this.input.reset(), this.setConnectionState(_.ConnectionStates.CONNECTED), this.on(o.BaseConnectionEvent.Stats, this.handleStats), this.input.on(u.InputEvent.VoiceActivity, this.handleVoiceActivity) } async handleNegotiationNeeded() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (!e && (this.negotiating || null == this.sdp)) { this.negotiationNeeded = !0; return } this.negotiating = !0, this.negotiationNeeded = !1; let t = this.pc, n = await t.createOffer(this.makeOfferAnswerOptions()); await t.setLocalDescription(n); let i = this.parseLocalDescription(); null == this.sdp ? this.emit(o.BaseConnectionEvent.Connected, "webrtc", (0, d.truncateSDP)(i)) : this.setRemoteAnswer() } constructor(e, t, n, i) { super(e, t, n, i), E(this, "pc", void 0), E(this, "sdp", null), E(this, "negotiating", !1), E(this, "negotiationNeeded", !1), E(this, "audioTransceiver", void 0), E(this, "videoTransceiver", void 0), E(this, "users", new Map), E(this, "userIdsBySsrc", new Map), E(this, "assignedStreams", new Map), E(this, "unassignedStreams", { audio: [], video: [] }), E(this, "inactiveTransceivers", { audio: [], video: [] }), E(this, "outboundStreams", []), E(this, "trackUserIds", {}), E(this, "audioCodec", null), E(this, "audioPayloadType", null), E(this, "videoCodec", null), E(this, "videoPayloadType", null), E(this, "rtxPayloadType", null), E(this, "extensions", []), E(this, "codecs", []), E(this, "logger", void 0), E(this, "getUserIdBySsrc", e => this.userIdsBySsrc.get(e)), E(this, "handlePeerConnectionStateChange", () => { let e = this.peerConnectionState; switch (this.logger.info("peerConnectionState =>", e), e) { case "connected": this.setConnected(); break; case "connecting": "connected" === this.iceConnectionState ? this.setConnectionState(_.ConnectionStates.DTLS_CONNECTING) : this.setConnectionState(_.ConnectionStates.ICE_CHECKING); break; case "failed": this.setConnectionState(_.ConnectionStates.NO_ROUTE); break; case "disconnected": case "closed": this.setConnectionState(_.ConnectionStates.DISCONNECTED) } }), E(this, "handleIceConnectionStateChange", () => { let e = this.iceConnectionState; switch (this.logger.info("iceConnectionState =>", e), e) { case "connected": this.setConnected(); break; case "checking": this.setConnectionState(_.ConnectionStates.ICE_CHECKING); break; case "failed": this.setConnectionState(_.ConnectionStates.NO_ROUTE); break; case "disconnected": case "closed": this.setConnectionState(_.ConnectionStates.DISCONNECTED) } }), E(this, "handleSignalingStateChange", () => { let e = this.signalingState; this.logger.info("signalingState => ".concat(e)) }), E(this, "handleIceGatheringStateChange", () => { this.logger.info("iceGatheringState =>", this.iceGatheringState) }), E(this, "handleTrack", e => { let t = e.streams[0].id, n = e.track; if (!/^default/.test(n.id)) { var i, r, s, a; let [e, o] = t.split("-"); this.trackUserIds[n.id] = e; let l = this.users.get(e); if ((null == l ? void 0 : null === (r = l.videoSSRC) || void 0 === r ? void 0 : null === (i = r.toString) || void 0 === i ? void 0 : i.call(r)) !== o && (null == l ? void 0 : null === (a = l.audioSSRC) || void 0 === a ? void 0 : null === (s = a.toString) || void 0 === s ? void 0 : s.call(a)) !== o) { this.logger.info("Got stale ssrc ".concat(o, " for ").concat(n.kind, " track, user ID ").concat(e)); return } this.createOutput(e, n), n.onunmute = () => this.createOutput(e, n), n.onmute = () => { var t; (null === (t = this.users.get(e)) || void 0 === t ? void 0 : t.videoSSRC) == null && this.destroyOutput(e, n) } } }), this.logger = new a.Logger("UnifiedConnection(".concat(e, ")")), this.videoSupported = c.BROWSER_SUPPORTS_VIDEO; let r = this.pc = new RTCPeerConnection({ bundlePolicy: "max-bundle", sdpSemantics: "unified-plan" }); c.BROWSER_SUPPORTS_CONNECTION_STATE ? (r.onconnectionstatechange = this.handlePeerConnectionStateChange, r.oniceconnectionstatechange = this.handlePeerConnectionStateChange) : r.oniceconnectionstatechange = this.handleIceConnectionStateChange, r.onsignalingstatechange = this.handleSignalingStateChange, r.onicegatheringstatechange = this.handleIceGatheringStateChange, r.ontrack = this.handleTrack, r.addTransceiver("audio", { direction: "recvonly", sendEncodings: [{ maxBitrate: this.voiceBitrate }] }), this.audioTransceiver = r.getTransceivers()[0], this.videoSupported && (this.addTransceivers("video", "recvonly", 1, this.input.getVideoStream()), this.videoTransceiver = r.getTransceivers()[1]), this.addTransceivers("audio", "recvonly", 10), this.videoSupported && this.addTransceivers("video", "recvonly", 10), this.setStream(this.input.stream), this.logger.info("Renegotiating: Initial negotiation"), this.handleNegotiationNeeded(!0) } } }, 830795: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { default: function() { return r } }), n("653041"), n("951953"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); class r { stop() { this.source.disconnect(), clearInterval(this.interval), this.speakingCounter = 0 } get speaking() { return this.speakingCounter > 0 || this.silentFrames < this.silenceThreshold } update() { this.currentVolume = function(e, t) { let n = -1 / 0; e.getFloatFrequencyData(t); for (let e = 4; e < t.length; e++) t[e] > n && t[e] < 0 && (n = t[e]); return n }(this.analyser, this.fftBins), this.speakingHistory[this.speakingHistoryIndex] && this.speakingCounter--; let e = this.currentVolume > this.threshold; this.speakingHistory[this.speakingHistoryIndex] = e, e && this.speakingCounter++, ++this.speakingHistoryIndex === this.speakingHistory.length && (this.speakingHistoryIndex = 0), this.speakingCounter > 0 ? this.silentFrames = 0 : this.silentFrames++ } constructor(e, t, n, r = .1, s = 10) { i(this, "threshold", void 0), i(this, "currentVolume", 0), i(this, "analyser", void 0), i(this, "interval", void 0), i(this, "fftBins", void 0), i(this, "source", void 0), i(this, "speakingHistory", void 0), i(this, "speakingHistoryIndex", 0), i(this, "speakingCounter", 0), i(this, "silenceThreshold", void 0), i(this, "silentFrames", void 0), i(this, "onProcess", null); let a = e.createAnalyser(); a.fftSize = 512, a.smoothingTimeConstant = r; let o = e.createMediaStreamSource(t); o.connect(a); let l = []; for (let e = 0; e < s; e++) l.push(!1); let u = window.setInterval(() => { var e; this.update(), null === (e = this.onProcess) || void 0 === e || e.call(this, this.speaking, this.currentVolume) }, 20); this.threshold = n, this.analyser = a, this.interval = u, this.fftBins = new Float32Array(a.fftSize), this.source = o, this.speakingHistory = l, this.silenceThreshold = this.speakingHistory.length, this.silentFrames = this.silenceThreshold } } }, 591218: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return _ } }), n("411104"), n("47120"); var i = n("836560"), r = n("740197"), s = n("106617"), a = n("376398"), o = n("65154"), l = n("231338"); function u(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let d = new s.default; class _ extends i.EventEmitter { destroy() { null != this.stream && (d.release(this.stream), this.stream = null), null != this.streamId && (0, a.unregisterVideoStream)(this.streamId), this.destroyed = !0 } getStreamId() { return this.streamId } async setSource(e) { if (this.sourceId === e) return this.stream; this.sourceId = e, null != this.stream && (d.release(this.stream), this.stream = null); let t = await (0, r.getVideoInputDevices)(); if (this.sourceId === o.DISABLED_DEVICE_ID) return this.setStream(new MediaStream); let n = { width: 1280 }; t.some(e => e.id === this.sourceId) && (n.deviceId = this.sourceId); try { let e = await d.acquire({ audio: !1, video: n }); if (this.destroyed) throw d.release(e), Error("VideoInput: Already destroyed"); return this.emit("permission", !0), this.setStream(e) } catch (e) { if ("string" != typeof e) switch (e.name) { case "PermissionDeniedError": case "NotAllowedError": throw this.emit("permission", !1), l.UserMediaErrors.PERMISSION_DENIED; case "PermissionDismissedError": throw this.emit("permission", !1), l.UserMediaErrors.PERMISSION_DISMISSED; case "DevicesNotFoundError": case "NotFoundError": throw l.UserMediaErrors.NO_DEVICES_FOUND; default: throw e.name || "UNKNOWN" } throw e } } setStream(e) { return null != this.streamId && ((0, a.unregisterVideoStream)(this.streamId), this.streamId = null), this.stream = e, e.onaddtrack = e => this.emit("add-video-track", e), e.getVideoTracks().length > 0 && (this.streamId = (0, a.registerVideoStream)(e)), this.emit("stream", e), this.emit("video", this.getStreamId()), e } constructor(...e) { super(...e), u(this, "stream", new MediaStream), u(this, "sourceId", o.DISABLED_DEVICE_ID), u(this, "streamId", null), u(this, "destroyed", !1) } } }, 376398: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getVideoStream: function() { return l }, registerVideoStream: function() { return a }, unregisterVideoStream: function() { return o } }); var i = n("39383"), r = n.n(i); let s = {}; function a(e) { let t = r()("VideoStream"); return s[t] = e, t } function o(e) { delete s[e] } function l(e) { return s[e] } }, 313232: function(e, t, n) { "use strict"; var i, r; function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { WebRTCStatsCalculator: function() { return a } }), n("47120"); class a { update(e) { for (let t in e.rtp.inbound) for (let n of e.rtp.inbound[t]) if ("video" === n.type) { let e = this.getInboundBytesRecevierCalculator(n), t = this.getInboundFrameDecodeRateCalculator(n); n.bitrate = e.calculate(n), n.frameRateDecode = t.calculate(n) } for (let t of e.rtp.outbound) if ("video" === t.type) { let e = this.getOutboundBytesSentCalculator(t), n = this.getOutboundEncodeRateCalculator(t); t.bitrate = e.calculate(t), t.frameRateEncode = n.calculate(t) } } static getCalculatorOrCreate(e, t, n, i) { let r = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 0, s = e[t.ssrc]; return null == s && (s = new l(n, i, r), e[t.ssrc] = s), s } getInboundBytesRecevierCalculator(e) { return a.getCalculatorOrCreate(this.inboundVideoBitrate, e, "bytesReceived", "timestamp", 3) } getInboundFrameDecodeRateCalculator(e) { return a.getCalculatorOrCreate(this.inboundDecodeFps, e, "framesDecoded", "timestamp", 5) } getOutboundBytesSentCalculator(e) { return a.getCalculatorOrCreate(this.outboundVideoBitrate, e, "bytesSent", "timestamp", 3) } getOutboundEncodeRateCalculator(e) { return a.getCalculatorOrCreate(this.outboundEncodeFps, e, "framesEncoded", "timestamp", 5) } constructor() { s(this, "inboundVideoBitrate", {}), s(this, "inboundDecodeFps", {}), s(this, "outboundVideoBitrate", {}), s(this, "outboundEncodeFps", {}) } }(r = i || (i = {}))[r.NONE = 0] = "NONE", r[r.MILLISECONDS_FROM_SECONDS = 1] = "MILLISECONDS_FROM_SECONDS", r[r.BYTES_TO_BITS = 2] = "BYTES_TO_BITS", r[r.ROUND = 4] = "ROUND"; let o = { 0: { multiplier: 1 }, 1: { postfix: "_in_ms", multiplier: 1e3 }, 2: { bitrate: !0, postfix: "", multiplier: 8 } }; class l { calculate(e) { let t = this.previous; if (this.previous = e, null == t) return; let n = e.timestamp - t.timestamp; if (n <= 0 || "number" != typeof n) return; let i = t[this.accumulativeMetricKey], r = e[this.accumulativeMetricKey]; if ("number" != typeof i || "number" != typeof r) return; let s = t[this.samplesMetricKey], a = e[this.samplesMetricKey]; if ("number" != typeof s || "number" != typeof a) return; let o = (r - i) / (a - s) * this.multiplier; return this.round ? Math.round(o) : o } constructor(e, t, n = 0) { for (let l in s(this, "accumulativeMetricKey", void 0), s(this, "samplesMetricKey", void 0), s(this, "previous", void 0), s(this, "multiplier", void 0), s(this, "round", void 0), this.accumulativeMetricKey = e, this.samplesMetricKey = t, this.multiplier = 1, this.round = !1, i) { var r, a; let e = Number(l); !isNaN(e) && (n & e) != 0 && l in o && (this.multiplier *= null !== (a = null === (r = o[l]) || void 0 === r ? void 0 : r.multiplier) && void 0 !== a ? a : 1) } this.round = (4 & n) != 0 } } }, 959856: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return R } }), n("773603"), n("411104"), n("47120"), n("600040"); var i = n("264344"), r = n.n(i), s = n("259443"), a = n("47770"), o = n("174498"), l = n.n(o), u = n("839548"), d = n("46973"), _ = n("734298"), c = n("970838"), E = n("68721"), I = n("997653"), T = n("384136"), f = n("740197"), S = n("548820"), h = n("579237"), A = n("582168"), m = n("825040"), N = n("65154"), p = n("436620"); function O(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let C = new s.Logger("MediaEngineWebRTC"); class R extends a.default { destroy() { null != this.voiceActivityInput && (this.voiceActivityInput.destroy(), this.voiceActivityInput = null), this.eachConnection(e => e.destroy()), this.emit(d.MediaEngineEvent.Destroy), this.removeAllListeners() } interact() { !this.interacted && (document.createElement("audio").play(), this.interacted = !0), this.eachConnection(e => e.interact()) } static supported() { return !__OVERLAY__ && (p.BROWSER_SUPPORTS_VOICE && null != window.AudioContext && null != window.RTCPeerConnection ? (n("250678"), !0) : (C.info("WebRTC is not supported on", r().name, r().version), !1)) } supported() { return !0 } supports(e) { switch (e) { case N.Features.AUDIO_INPUT_DEVICE: return f.CAN_SET_DEVICES; case N.Features.AUDIO_OUTPUT_DEVICE: return f.CAN_SET_OUTPUT_DEVICES; case N.Features.VIDEO: return p.BROWSER_SUPPORTS_VIDEO; case N.Features.DESKTOP_CAPTURE: var t; return (null === (t = navigator.mediaDevices) || void 0 === t ? void 0 : t.getDisplayMedia) != null; case N.Features.VOICE_PROCESSING: return "Chrome" === r().name; case N.Features.NATIVE_PING: case N.Features.DIAGNOSTICS: return p.BROWSER_SUPPORTS_DIAGNOSTICS; case N.Features.DESKTOP_CAPTURE_APPLICATIONS: case N.Features.LOOPBACK: case N.Features.NOISE_SUPPRESSION: case N.Features.AUTOMATIC_GAIN_CONTROL: return "Safari" !== r().name; case N.Features.NOISE_CANCELLATION: return l()(); case N.Features.QOS: case N.Features.ATTENUATION: case N.Features.AUTOMATIC_VAD: case N.Features.LEGACY_AUDIO_SUBSYSTEM: case N.Features.EXPERIMENTAL_AUDIO_SUBSYSTEM: case N.Features.DEBUG_LOGGING: case N.Features.VOICE_PANNING: case N.Features.AUTO_ENABLE: case N.Features.DESKTOP_CAPTURE_FORMAT: case N.Features.VIDEO_HOOK: case N.Features.OPEN_H264: case N.Features.AEC_DUMP: case N.Features.DISABLE_VIDEO: case N.Features.CONNECTION_REPLAY: case N.Features.SIMULCAST: case N.Features.SCREEN_CAPTURE_KIT: default: return !1 } } getAudioContext() { return null == this._audioContext && (this._audioContext = new AudioContext), this._audioContext } connect(e, t, n) { let { ssrc: i, address: r, port: s, modes: a, streamUserId: o, streamParameters: l } = n, _ = (0, I.makeConnection)(e, t, this.getAudioContext(), l); return _.streamUserId = o, _.setOutputVolume(this.outputVolume), _.setSinkId(this.sinkId), _.once(u.BaseConnectionEvent.Destroy, e => this.connections.delete(e)), _.on(u.BaseConnectionEvent.Silence, e => this.emit(d.MediaEngineEvent.Silence, e)), _.on(u.BaseConnectionEvent.DesktopSourceEnd, this.handleDesktopSourceEnd), _.on(u.BaseConnectionEvent.AudioPermission, this.handleAudioPermission), _.on(u.BaseConnectionEvent.VideoPermission, this.handleVideoPermission), this.interacted && _.interact(), e === N.MediaEngineContextTypes.DEFAULT && (_.setAudioSource(this.sourceId), this.enabled && _.input.enableAudioInput()), this.connections.add(_), this.emit(d.MediaEngineEvent.Connection, _), _ } findConnection(e) { return Array.from(this.connections).find(t => null == e || t.context === e) } eachConnection(e, t) { this.connections.forEach(n => { (null == t || n.context === t) && e(n) }) } enable() { return null == this.enablePromise && (this.enablePromise = this._enable().finally(() => { this.enablePromise = null })), this.enablePromise } async _enable() { if (this.enabled) return; await this.getAudioContext().audioWorklet.addModule(S); let e = new E.default(this.getAudioContext()); e.on("permission", this.handleAudioPermission); try { var t; await e.enable(), "Firefox" === r().name && await this.handleDeviceChange(), this.enabled = !0, this.eachConnection(e => e.input.enableAudioInput(), N.MediaEngineContextTypes.DEFAULT), null === (t = this.voiceActivityInput) || void 0 === t || t.enable() } finally { e.destroy() } } setInputVolume(e) {} setOutputVolume(e) { this.outputVolume = e, this.connections.forEach(t => t.setOutputVolume(e)) } getAudioInputDevices() { return (0, f.getAudioInputDevices)() } setAudioInputDevice(e) { var t, n; this.sourceId = e, this.eachConnection(t => t.setAudioSource(e), N.MediaEngineContextTypes.DEFAULT), null === (t = this.voiceActivityInput) || void 0 === t || t.setSource(e), null === (n = this.loopback) || void 0 === n || n.setAudioSource(e) } getAudioOutputDevices() { return (0, f.getAudioOutputDevices)() } setAudioOutputDevice(e) { var t; this.sinkId = e, this.connections.forEach(t => t.setSinkId(e)), null === (t = this.loopback) || void 0 === t || t.setAudioSink(e) } getVideoInputDevices() { return (0, f.getVideoInputDevices)() } setVideoInputDevice(e) { this.eachConnection(t => t.setVideoSource(e), N.MediaEngineContextTypes.DEFAULT) } getSupportedVideoCodecs(e) { e([]) } getCodecCapabilities(e) { e("") } async getDesktopSource(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1], n = await T.default.get(e, t); return this.pendingDesktopInputs[n.id] = n, n.id } getDesktopSources() { return Promise.reject(Error("NO_STREAM")) } getScreenPreviews(e, t) { return Promise.reject(Error("UNSUPPORTED")) } getWindowPreviews(e, t) { return Promise.reject(Error("UNSUPPORTED")) } setClipBufferLength(e) {} saveClip(e, t) { return Promise.reject(Error("UNSUPPORTED")) } saveClipForUser(e, t, n) { return Promise.reject(Error("UNSUPPORTED")) } updateClipMetadata(e, t) { return Promise.reject(Error("UNSUPPORTED")) } exportClip(e, t) { return Promise.reject(Error("UNSUPPORTED")) } setGoLiveSource(e, t) { if (null == e) this.eachConnection(e => e.setDesktopInput(null), t); else if (null != e.desktopDescription && null != this.findConnection(t)) { let n = this.pendingDesktopInputs[e.desktopDescription.id]; delete this.pendingDesktopInputs[e.desktopDescription.id], null != n && this.eachConnection(e => e.setDesktopInput(n), t) } } setClipsSource(e) {} setClipsQualitySettings(e, t, n) { return !1 } setSoundshareSource(e, t, n) {} setAudioSubsystem(e) {} getAudioSubsystem() { return N.AudioSubsystems.STANDARD } getAudioLayer() { return "" } getDebugLogging() { return !1 } setDebugLogging(e) {} writeAudioDebugState() { return Promise.reject(Error("Audio debug state is not supported.")) } setExperimentalAdm(e) {} setLoopback(e, t) { e && null == this.loopback ? (this.enable(), this.loopback = new h.default(this.getAudioContext(), this.sourceId, this.sinkId), this.loopback.setNoiseCancellation(t.noiseCancellation)) : !e && null != this.loopback && (this.loopback.stop(), this.loopback = null) } getLoopback() { return null != this.loopback } setH264Enabled(e) {} setAv1Enabled(e) {} setH265Enabled(e) {} getCodecSurvey() { return Promise.reject(Error("getCodecSurvey is not implemented on MediaEngine of browsers.")) } startAecDump() {} stopAecDump() {} setAecDump(e) {} createReplayConnection(e, t) { throw Error("Connection replay is not supported.") } setUseDirectVideo(e) {} setMaxSyncDelayOverride(e) {} rankRtcRegions(e) { return Promise.reject(Error("RTC region latency test is not supported.")) } applyMediaFilterSettings(e) { return Promise.resolve() } startLocalAudioRecording() { return Promise.reject(Error("startLocalAudioRecording is not supported.")) } stopLocalAudioRecording(e) {} speedTester(e, t) { throw Error("speedTester is not supported.") } setHasFullbandPerformance(e) {} getSupportedSecureFramesProtocolVersion() { return 0 } getSupportedBandwidthEstimationExperiments(e) { e([]) } constructor() { super(), O(this, "Video", m.default), O(this, "Camera", A.default), O(this, "_audioContext", null), O(this, "outputVolume", N.DEFAULT_VOLUME), O(this, "sourceId", N.DEFAULT_DEVICE_ID), O(this, "sinkId", N.DEFAULT_DEVICE_ID), O(this, "enabled", !1), O(this, "connections", new Set), O(this, "interacted", !1), O(this, "loopback", null), O(this, "voiceActivityInput", null), O(this, "pendingDesktopInputs", {}), O(this, "enablePromise", null), O(this, "handleActiveSinksChange", (e, t) => { this.connections.forEach(n => n.setHasActiveVideoOutputSink(e, t)) }), O(this, "handleNewListener", e => { switch (e) { case d.MediaEngineEvent.DeviceChange: null != navigator.mediaDevices && null == navigator.mediaDevices.ondevicechange && (navigator.mediaDevices.ondevicechange = () => { this.handleDeviceChange() }, this.handleDeviceChange()); break; case d.MediaEngineEvent.VoiceActivity: null == this.voiceActivityInput && (this.voiceActivityInput = new E.default(this.getAudioContext()), this.voiceActivityInput.setSource(this.sourceId), this.voiceActivityInput.on("voiceactivity", this.handleVoiceActivity), this.enabled && this.voiceActivityInput.enable()) } }), O(this, "handleRemoveListener", e => { switch (e) { case d.MediaEngineEvent.DeviceChange: var t; (null === (t = navigator.mediaDevices) || void 0 === t ? void 0 : t.ondevicechange) != null && 0 === this.listenerCount(d.MediaEngineEvent.DeviceChange) && (navigator.mediaDevices.ondevicechange = null); break; case d.MediaEngineEvent.VoiceActivity: null != this.voiceActivityInput && 0 === this.listenerCount(d.MediaEngineEvent.VoiceActivity) && (this.voiceActivityInput.destroy(), this.voiceActivityInput = null) } }), O(this, "handleDeviceChange", () => (0, f.getDevices)().then(e => { let [t, n, i] = e; return this.emit(d.MediaEngineEvent.DeviceChange, t, n, i) })), O(this, "handleVoiceActivity", e => { this.emit(d.MediaEngineEvent.VoiceActivity, e, 0) }), O(this, "handleDesktopSourceEnd", () => { this.emit(d.MediaEngineEvent.DesktopSourceEnd) }), O(this, "handleAudioPermission", e => { this.emit(d.MediaEngineEvent.AudioPermission, e) }), O(this, "handleVideoPermission", e => { this.emit(d.MediaEngineEvent.VideoPermission, e) }), this.on("newListener", this.handleNewListener), this.on("removeListener", this.handleRemoveListener), (0, c.setActiveSinksChangeCallback)(this.handleActiveSinksChange), (0, _.default)(this) } } }, 600040: function(e, t, n) { "use strict"; n.r(t); var i, r = n("264344"), s = n.n(r), a = n("345546"); window.AudioContext = null !== (i = window.AudioContext) && void 0 !== i ? i : window.webkitAudioContext, null != window.RTCPeerConnection && "Chrome" === s().name && 52 > (0, a.platformVersion)() && ["createOffer", "createAnswer"].forEach(e => { let t = RTCPeerConnection.prototype[e]; RTCPeerConnection.prototype[e] = function() { for (var e = arguments.length, n = Array(e), i = 0; i < e; i++) n[i] = arguments[i]; let r = this; if (n.length < 1 || 1 === n.length && "object" == typeof n[0]) { let e = 1 === n.length ? n[0] : void 0; return null != e && (e = { mandatory: { OfferToReceiveAudio: e.offerToReceiveAudio || !1, OfferToReceiveVideo: e.offerToReceiveVideo || !1 }, optional: [{ VoiceActivityDetection: e.voiceActivityDetection || !1 }, { IceRestart: e.iceRestart || !1 }] }), new Promise((n, i) => t.apply(r, [n, i, e])) } return t.apply(this, n) } }) }, 450279: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return s } }), n("47120"), n("653041"); var i = n("878604"); function r(e) { return { id: e.payloadType, name: e.mimeType.split("/").slice(1)[0] } } function s(e, t, n, s) { var a, o, l; let u = {}, d = {}, _ = [], c = []; for (let t of e.values()) switch (t.type) { case "candidate-pair": u[t.id] = t; break; case "codec": d[t.id] = t; break; case "inbound-rtp": _.push(t); break; case "outbound-rtp": c.push(t) } let E = Object.values(u).find(e => "succeeded" === e.state); if (void 0 === E) return null; let I = []; for (let e of c) { let t = d[e.codecId]; if (null == t) continue; let s = { type: e.kind, ssrc: e.ssrc, timestamp: e.timestamp, sinkWant: (0, i.formatSinkWantStat)(n, e.ssrc, "video" === e.kind), sinkWantAsInt: (0, i.formatSinkWantAsInt)(n, e.ssrc), codec: r(t), bytesSent: e.bytesSent, packetsSent: e.packetsSent }; if ("audio" === e.kind) I.push({ ...s, type: "audio" }); else if ("video" === e.kind) { ; let t = null !== e.frameWidth ? { width: e.frameWidth, height: e.frameHeight } : void 0; I.push({ ...s, framesEncoded: e.framesEncoded, keyFramesEncoded: e.keyFramesEncoded, firCount: e.firCount, nackCount: e.nackCount, pliCount: e.pliCount, bitrateTarget: e.targetBitrate, qpSum: e.qpSum, averageEncodeTime: null == e.framesEncoded || null === (l = e.totalEncodeTime) || 0 === l ? void 0 : (1e3 * e.totalEncodeTime / e.framesEncoded).toFixed(1), resolution: t, framesSent: e.framesSent, frameRateInput: e.framesPerSecond, type: "video" }) } } let T = {}; for (let e of _) { let a = d[e.codecId]; if (null == a) continue; let o = t(e.ssrc); if (null == o) continue; let l = { type: e.kind, ssrc: e.ssrc, timestamp: e.timestamp, sinkWant: (0, i.formatSinkWantStat)(n, e.ssrc, "video" === e.kind), sinkWantAsInt: (0, i.formatSinkWantAsInt)(n, e.ssrc), sinkWantLocal: (0, i.formatSinkWantStat)(s, e.ssrc, "video" === e.kind), codec: r(a), bytesReceived: e.bytesReceived, packetsReceived: e.packetsReceived, packetsLost: e.packetsLost }; if ("audio" === e.kind) { let t = void 0 !== e.jitterBufferDelay && void 0 !== e.jitterBufferEmittedCount ? Math.round(1e3 * e.jitterBufferDelay / e.jitterBufferEmittedCount) : 0; null == T[o] && (T[o] = []), T[o].push({ ...l, audioLevel: e.audioLevel, jitter: 1e3 * e.jitter, jitterBuffer: t }) } else if ("video" === e.kind) { null == T[o] && (T[o] = []); let t = null !== e.frameWidth ? { width: e.frameWidth, height: e.frameHeight } : void 0; T[o].push({ ...l, resolution: t, framesDecoded: e.framesDecoded, keyFramesDecoded: e.keyFramesDecoded, framesDropped: e.framesDropped, framesReceived: e.framesReceived, frameRateDecode: e.framesPerSecond, averageDecodeTime: null == e.framesDecoded || null == e.totalDecodeTime ? void 0 : (1e3 * e.totalDecodeTime / e.framesDecoded).toFixed(1), firCount: e.firCount, nackCount: e.nackCount, pliCount: e.pliCount, freezeCount: e.freezeCount, pauseCount: e.pauseCount, totalFreezesDuration: e.totalFreezesDuration, totalPausesDuration: e.totalPausesDuration, qpSum: e.qpSum, decoderImplementationName: "WebRTC" }) } } let f = (null !== (a = E.currentRoundTripTime) && void 0 !== a ? a : 0) * 1e3; return { transport: { availableOutgoingBitrate: null !== (o = E.availableOutgoingBitrate) && void 0 !== o ? o : 0, bytesReceived: E.bytesReceived, bytesSent: E.bytesSent, ping: f }, rtp: { inbound: T, outbound: I } } } }, 582168: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return l } }), n("47120"); var i = n("735250"), r = n("470079"), s = n("376398"), a = n("825040"); async function o(e) { let { deviceId: t, width: n, height: i, disabled: r } = e; if (r) return null; try { return await navigator.mediaDevices.getUserMedia({ audio: !1, video: { width: n * window.devicePixelRatio, height: i * window.devicePixelRatio, frameRate: 30, deviceId: t } }) } catch (e) { return null } } function l(e) { let { deviceId: t, width: n, height: l, disabled: u } = e, [d, _] = r.useState(); return r.useEffect(() => { let e = o({ deviceId: t, width: n, height: l, disabled: u }).then(e => { let t = null != e ? (0, s.registerVideoStream)(e) : null; return _(t), { stream: e, streamId: t } }); return () => { e.then(e => { var t; let { stream: n, streamId: i } = e; null != (t = n) && t.getTracks().forEach(e => e.stop()), null != i && (0, s.unregisterVideoStream)(i) }) } }, [t, n, l, u]), null == d ? (0, i.jsx)("div", { className: "media-engine-video", style: { width: n, height: l } }) : (0, i.jsx)(a.default, { streamId: d, style: { width: n, height: l } }) } l.defaultProps = { disabled: !1, width: 320, height: 180 } }, 825040: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return u } }); var i = n("735250"), r = n("470079"), s = n("665443"), a = n.n(s), o = n("970838"), l = n("376398"); function u(e) { let { streamId: t, paused: n, onReady: s, onResize: u, className: d, ..._ } = e, c = r.useRef(null), E = r.useRef({ width: 0, height: 0 }); r.useLayoutEffect(() => { let e = c.current; if (null != e) return (0, o.registerActiveSink)(t), e.srcObject = (0, l.getVideoStream)(t), () => { (0, o.unregisterActiveSink)(t), e.srcObject = null, e.load() } }, [t]), r.useEffect(() => { var e, i; return n ? (null === (e = c.current) || void 0 === e || e.pause(), (0, o.unregisterActiveSink)(t)) : null === (i = c.current) || void 0 === i || i.play().catch(() => {}), () => { n && (0, o.registerActiveSink)(t) } }, [n]); let I = r.useCallback(() => { var e, t, n, i; let { width: r, height: s } = E.current, a = null !== (n = null === (e = c.current) || void 0 === e ? void 0 : e.videoWidth) && void 0 !== n ? n : 0, o = null !== (i = null === (t = c.current) || void 0 === t ? void 0 : t.videoHeight) && void 0 !== i ? i : 0; if (r !== a || s !== o) { let e = { width: a, height: o }; null == u || u(e), E.current = e } }, [u]); r.useLayoutEffect(() => { let e = c.current; if (null != e) return e.addEventListener("resize", I), () => e.removeEventListener("resize", I) }, [I]); let T = r.useCallback(() => { null == s || s() }, [s]), f = r.useCallback(e => { !n && e.currentTarget.play() }, [n]); return (0, i.jsx)("video", { className: a()("media-engine-video", d), ref: c, autoPlay: !0, onPause: f, onCanPlayThrough: T, muted: !0, ..._ }) } u.defaultProps = { paused: !1 } }, 643191: function(e, t, n) { "use strict"; n.r(t), n.d(t, { navigationStart: function() { return i }, performance: function() { return s }, timeOrigin: function() { return r } }), n("258558"); try { null == Date.now && (Date.now = () => new Date().valueOf()) } catch (e) {} let i = (() => { try { var e; return null !== (e = n.g.performance.timing.navigationStart) && void 0 !== e ? e : n.g.performance.now() } catch (e) {} return Date.now() })(), r = (() => { try { var e; return null !== (e = n.g.performance.timeOrigin) && void 0 !== e ? e : i } catch (e) {} return Date.now() })(); if (null == n.g.performance.timing) try { n.g.performance.timing = { navigationStart: i } } catch (e) {} if (null == n.g.performance.timeOrigin) try { n.g.performance.timeOrigin = r } catch (e) {} let s = n.g.performance }, 258558: function(e, t, n) { "use strict"; var i, r, s, a, o, l, u; n.r(t), n("653041"), n("411104"), i = n.g, r = Date.now ? Date.now() : +new Date, s = i.performance || {}, a = [], o = {}, l = function(e, t) { for (var n = 0, i = a.length, r = []; n < i; n++) a[n][e] == t && r.push(a[n]); return r }, u = function(e, t) { for (var n, i = a.length; i--;)(n = a[i]).entryType == e && (void 0 === t || n.name == t) && a.splice(i, 1) }, s.now || (s.now = s.webkitNow || s.mozNow || s.msNow || function() { return (Date.now ? Date.now() : +new Date) - r }), s.mark || (s.mark = s.webkitMark || function(e) { var t = { name: e, entryType: "mark", startTime: s.now(), duration: 0 }; a.push(t), o[e] = t }), s.measure || (s.measure = s.webkitMeasure || function(e, t, n) { var i, r; if (void 0 !== n && void 0 === o[n]) throw SyntaxError("Failed to execute 'measure' on 'Performance': The mark '" + n + "' does not exist."); if (void 0 !== t && void 0 === o[t]) throw SyntaxError("Failed to execute 'measure' on 'Performance': The mark '" + t + "' does not exist."); i = o[t] ? o[t].startTime : 0, r = o[n] ? o[n].startTime : s.now(), a.push({ name: e, entryType: "measure", startTime: i, duration: r - i }) }), s.getEntriesByType || (s.getEntriesByType = s.webkitGetEntriesByType || function(e) { return l("entryType", e) }), s.getEntriesByName || (s.getEntriesByName = s.webkitGetEntriesByName || function(e) { return l("name", e) }), s.clearMarks || (s.clearMarks = s.webkitClearMarks || function(e) { u("mark", e) }), s.clearMeasures || (s.clearMeasures = s.webkitClearMeasures || function(e) { u("measure", e) }), i.performance = s, "function" == typeof define && (define.amd || define.ajs) && define("performance", [], function() { return s }) }, 921072: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ApplicationDisclosureType: function() { return i } }), n("47120"), n("411104"), n("653041"); var i, r, s = n("578012"), a = n("835913"); (r = i || (i = {}))[r.UNSPECIFIED_DISCLOSURE = 0] = "UNSPECIFIED_DISCLOSURE", r[r.IP_LOCATION = 1] = "IP_LOCATION", r[r.DISPLAYS_ADVERTISEMENTS = 2] = "DISPLAYS_ADVERTISEMENTS"; class o extends s.MessageType { create(e) { let t = { metadata: {}, platformName: "", platformUsername: "", version: "0" }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); switch (t) { case 1: this.binaryReadMap1(r.metadata, e, n); break; case 2: r.platformName = e.string(); break; case 3: r.platformUsername = e.string(); break; case 4: r.version = e.fixed64().toString(); break; default: let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, n] = t.tag(); switch (e) { case 1: s = t.string(); break; case 2: a = t.string(); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_kkv_store_value_models.v1.ApplicationUserRoleConnection.metadata") } } e[null != s ? s : ""] = null != a ? a : "" } internalBinaryWrite(e, t, n) { for (let n of Object.keys(e.metadata)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.LengthDelimited).string(n).tag(2, s.WireType.LengthDelimited).string(e.metadata[n]).join(); "" !== e.platformName && t.tag(2, s.WireType.LengthDelimited).string(e.platformName), "" !== e.platformUsername && t.tag(3, s.WireType.LengthDelimited).string(e.platformUsername), "0" !== e.version && t.tag(4, s.WireType.Bit64).fixed64(e.version); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_kkv_store_value_models.v1.ApplicationUserRoleConnection", [{ no: 1, name: "metadata", kind: "map", K: 9, V: { kind: "scalar", T: 9 } }, { no: 2, name: "platform_name", kind: "scalar", T: 9 }, { no: 3, name: "platform_username", kind: "scalar", T: 9 }, { no: 4, name: "version", kind: "scalar", T: 6 }]) } } new o; class l extends s.MessageType { create(e) { let t = { disclosureType: 0 }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), o = e.pos + t; for (; e.pos < o;) { let [t, i] = e.tag(); switch (t) { case 1: r.disclosureType = e.int32(); break; case 2: r.ackedAt = a.Timestamp.internalBinaryRead(e, e.uint32(), n, r.ackedAt); break; default: let o = n.readUnknownField; if ("throw" === o) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let l = e.skip(i); !1 !== o && (!0 === o ? s.UnknownFieldHandler.onRead : o)(this.typeName, r, t, i, l) } } return r } internalBinaryWrite(e, t, n) { 0 !== e.disclosureType && t.tag(1, s.WireType.Varint).int32(e.disclosureType), e.ackedAt && a.Timestamp.internalBinaryWrite(e.ackedAt, t.tag(2, s.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_kkv_store_value_models.v1.AcknowledgedApplicationDisclosure", [{ no: 1, name: "disclosure_type", kind: "enum", T: () => ["discord_protos.discord_kkv_store_value_models.v1.ApplicationDisclosureType", i] }, { no: 2, name: "acked_at", kind: "message", T: () => a.Timestamp }]) } } let u = new l; class d extends s.MessageType { create(e) { let t = { ackedDisclosures: [] }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) r.ackedDisclosures.push(u.internalBinaryRead(e, e.uint32(), n)); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } internalBinaryWrite(e, t, n) { for (let i = 0; i < e.ackedDisclosures.length; i++) u.internalBinaryWrite(e.ackedDisclosures[i], t.tag(1, s.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_kkv_store_value_models.v1.AcknowledgedApplicationDisclosures", [{ no: 1, name: "acked_disclosures", kind: "message", repeat: 1, T: () => u }]) } } new d }, 377108: function(e, t, n) { "use strict"; n.r(t), n.d(t, { ApplicationCommandFrecency: function() { return p }, ApplicationFrecency: function() { return P }, EmojiFrecency: function() { return m }, FavoriteEmojis: function() { return h }, FavoriteGIF: function() { return c }, FavoriteGIFs: function() { return d }, FavoriteSoundboardSounds: function() { return g }, FavoriteStickers: function() { return I }, FrecencyItem: function() { return C }, FrecencyUserSettings: function() { return l }, GIFType: function() { return i }, GuildAndChannelFrecency: function() { return b }, PlayedSoundFrecency: function() { return M }, StickerFrecency: function() { return f } }), n("47120"), n("411104"), n("653041"); var i, r, s = n("578012"), a = n("397696"); (r = i || (i = {}))[r.NONE = 0] = "NONE", r[r.IMAGE = 1] = "IMAGE", r[r.VIDEO = 2] = "VIDEO"; class o extends s.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), o = e.pos + t; for (; e.pos < o;) { let [t, i] = e.tag(); switch (t) { case 1: r.versions = a.Versions.internalBinaryRead(e, e.uint32(), n, r.versions); break; case 2: r.favoriteGifs = d.internalBinaryRead(e, e.uint32(), n, r.favoriteGifs); break; case 3: r.favoriteStickers = I.internalBinaryRead(e, e.uint32(), n, r.favoriteStickers); break; case 4: r.stickerFrecency = f.internalBinaryRead(e, e.uint32(), n, r.stickerFrecency); break; case 5: r.favoriteEmojis = h.internalBinaryRead(e, e.uint32(), n, r.favoriteEmojis); break; case 6: r.emojiFrecency = m.internalBinaryRead(e, e.uint32(), n, r.emojiFrecency); break; case 7: r.applicationCommandFrecency = p.internalBinaryRead(e, e.uint32(), n, r.applicationCommandFrecency); break; case 8: r.favoriteSoundboardSounds = g.internalBinaryRead(e, e.uint32(), n, r.favoriteSoundboardSounds); break; case 9: r.applicationFrecency = P.internalBinaryRead(e, e.uint32(), n, r.applicationFrecency); break; case 10: r.heardSoundFrecency = v.internalBinaryRead(e, e.uint32(), n, r.heardSoundFrecency); break; case 11: r.playedSoundFrecency = M.internalBinaryRead(e, e.uint32(), n, r.playedSoundFrecency); break; case 12: r.guildAndChannelFrecency = b.internalBinaryRead(e, e.uint32(), n, r.guildAndChannelFrecency); break; default: let o = n.readUnknownField; if ("throw" === o) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let l = e.skip(i); !1 !== o && (!0 === o ? s.UnknownFieldHandler.onRead : o)(this.typeName, r, t, i, l) } } return r } internalBinaryWrite(e, t, n) { e.versions && a.Versions.internalBinaryWrite(e.versions, t.tag(1, s.WireType.LengthDelimited).fork(), n).join(), e.favoriteGifs && d.internalBinaryWrite(e.favoriteGifs, t.tag(2, s.WireType.LengthDelimited).fork(), n).join(), e.favoriteStickers && I.internalBinaryWrite(e.favoriteStickers, t.tag(3, s.WireType.LengthDelimited).fork(), n).join(), e.stickerFrecency && f.internalBinaryWrite(e.stickerFrecency, t.tag(4, s.WireType.LengthDelimited).fork(), n).join(), e.favoriteEmojis && h.internalBinaryWrite(e.favoriteEmojis, t.tag(5, s.WireType.LengthDelimited).fork(), n).join(), e.emojiFrecency && m.internalBinaryWrite(e.emojiFrecency, t.tag(6, s.WireType.LengthDelimited).fork(), n).join(), e.applicationCommandFrecency && p.internalBinaryWrite(e.applicationCommandFrecency, t.tag(7, s.WireType.LengthDelimited).fork(), n).join(), e.favoriteSoundboardSounds && g.internalBinaryWrite(e.favoriteSoundboardSounds, t.tag(8, s.WireType.LengthDelimited).fork(), n).join(), e.applicationFrecency && P.internalBinaryWrite(e.applicationFrecency, t.tag(9, s.WireType.LengthDelimited).fork(), n).join(), e.heardSoundFrecency && v.internalBinaryWrite(e.heardSoundFrecency, t.tag(10, s.WireType.LengthDelimited).fork(), n).join(), e.playedSoundFrecency && M.internalBinaryWrite(e.playedSoundFrecency, t.tag(11, s.WireType.LengthDelimited).fork(), n).join(), e.guildAndChannelFrecency && b.internalBinaryWrite(e.guildAndChannelFrecency, t.tag(12, s.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FrecencyUserSettings", [{ no: 1, name: "versions", kind: "message", T: () => a.Versions }, { no: 2, name: "favorite_gifs", kind: "message", T: () => d }, { no: 3, name: "favorite_stickers", kind: "message", T: () => I }, { no: 4, name: "sticker_frecency", kind: "message", T: () => f }, { no: 5, name: "favorite_emojis", kind: "message", T: () => h }, { no: 6, name: "emoji_frecency", kind: "message", T: () => m }, { no: 7, name: "application_command_frecency", kind: "message", T: () => p }, { no: 8, name: "favorite_soundboard_sounds", kind: "message", T: () => g }, { no: 9, name: "application_frecency", kind: "message", T: () => P }, { no: 10, name: "heard_sound_frecency", kind: "message", T: () => v }, { no: 11, name: "played_sound_frecency", kind: "message", T: () => M }, { no: 12, name: "guild_and_channel_frecency", kind: "message", T: () => b }]) } } let l = new o; class u extends s.MessageType { create(e) { let t = { gifs: {}, hideTooltip: !1 }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); switch (t) { case 1: this.binaryReadMap1(r.gifs, e, n); break; case 2: r.hideTooltip = e.bool(); break; default: let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.string(); break; case 2: a = c.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.FavoriteGIFs.gifs") } } e[null != s ? s : ""] = null != a ? a : c.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.gifs)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.LengthDelimited).string(i), t.tag(2, s.WireType.LengthDelimited).fork(), c.internalBinaryWrite(e.gifs[i], t, n), t.join().join(); !1 !== e.hideTooltip && t.tag(2, s.WireType.Varint).bool(e.hideTooltip); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FavoriteGIFs", [{ no: 1, name: "gifs", kind: "map", K: 9, V: { kind: "message", T: () => c } }, { no: 2, name: "hide_tooltip", kind: "scalar", T: 8 }]) } } let d = new u; class _ extends s.MessageType { create(e) { let t = { format: 0, src: "", width: 0, height: 0, order: 0 }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); switch (t) { case 1: r.format = e.int32(); break; case 2: r.src = e.string(); break; case 3: r.width = e.uint32(); break; case 4: r.height = e.uint32(); break; case 5: r.order = e.uint32(); break; default: let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } internalBinaryWrite(e, t, n) { 0 !== e.format && t.tag(1, s.WireType.Varint).int32(e.format), "" !== e.src && t.tag(2, s.WireType.LengthDelimited).string(e.src), 0 !== e.width && t.tag(3, s.WireType.Varint).uint32(e.width), 0 !== e.height && t.tag(4, s.WireType.Varint).uint32(e.height), 0 !== e.order && t.tag(5, s.WireType.Varint).uint32(e.order); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FavoriteGIF", [{ no: 1, name: "format", kind: "enum", T: () => ["discord_protos.discord_users.v1.GIFType", i] }, { no: 2, name: "src", kind: "scalar", T: 9 }, { no: 3, name: "width", kind: "scalar", T: 13 }, { no: 4, name: "height", kind: "scalar", T: 13 }, { no: 5, name: "order", kind: "scalar", T: 13 }]) } } let c = new _; class E extends s.MessageType { create(e) { let t = { stickerIds: [] }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) { if (i === s.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.stickerIds.push(e.fixed64().toString()); else r.stickerIds.push(e.fixed64().toString()) } else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } internalBinaryWrite(e, t, n) { if (e.stickerIds.length) { t.tag(1, s.WireType.LengthDelimited).fork(); for (let n = 0; n < e.stickerIds.length; n++) t.fixed64(e.stickerIds[n]); t.join() } let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FavoriteStickers", [{ no: 1, name: "sticker_ids", kind: "scalar", repeat: 1, T: 6 }]) } } let I = new E; class T extends s.MessageType { create(e) { let t = { stickers: {} }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.stickers, e, n); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.fixed64().toString(); break; case 2: a = C.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.StickerFrecency.stickers") } } e[null != s ? s : "0"] = null != a ? a : C.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.stickers)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.Bit64).fixed64(i), t.tag(2, s.WireType.LengthDelimited).fork(), C.internalBinaryWrite(e.stickers[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.StickerFrecency", [{ no: 1, name: "stickers", kind: "map", K: 6, V: { kind: "message", T: () => C } }]) } } let f = new T; class S extends s.MessageType { create(e) { let t = { emojis: [] }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) r.emojis.push(e.string()); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } internalBinaryWrite(e, t, n) { for (let n = 0; n < e.emojis.length; n++) t.tag(1, s.WireType.LengthDelimited).string(e.emojis[n]); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FavoriteEmojis", [{ no: 1, name: "emojis", kind: "scalar", repeat: 2, T: 9 }]) } } let h = new S; class A extends s.MessageType { create(e) { let t = { emojis: {} }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.emojis, e, n); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.string(); break; case 2: a = C.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.EmojiFrecency.emojis") } } e[null != s ? s : ""] = null != a ? a : C.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.emojis)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.LengthDelimited).string(i), t.tag(2, s.WireType.LengthDelimited).fork(), C.internalBinaryWrite(e.emojis[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.EmojiFrecency", [{ no: 1, name: "emojis", kind: "map", K: 9, V: { kind: "message", T: () => C } }]) } } let m = new A; class N extends s.MessageType { create(e) { let t = { applicationCommands: {} }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.applicationCommands, e, n); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.string(); break; case 2: a = C.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.ApplicationCommandFrecency.application_commands") } } e[null != s ? s : ""] = null != a ? a : C.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.applicationCommands)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.LengthDelimited).string(i), t.tag(2, s.WireType.LengthDelimited).fork(), C.internalBinaryWrite(e.applicationCommands[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ApplicationCommandFrecency", [{ no: 1, name: "application_commands", kind: "map", K: 9, V: { kind: "message", T: () => C } }]) } } let p = new N; class O extends s.MessageType { create(e) { let t = { totalUses: 0, recentUses: [], frecency: 0, score: 0 }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); switch (t) { case 1: r.totalUses = e.uint32(); break; case 2: if (i === s.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.recentUses.push(e.uint64().toString()); else r.recentUses.push(e.uint64().toString()); break; case 3: r.frecency = e.int32(); break; case 4: r.score = e.int32(); break; default: let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } internalBinaryWrite(e, t, n) { if (0 !== e.totalUses && t.tag(1, s.WireType.Varint).uint32(e.totalUses), e.recentUses.length) { t.tag(2, s.WireType.LengthDelimited).fork(); for (let n = 0; n < e.recentUses.length; n++) t.uint64(e.recentUses[n]); t.join() } 0 !== e.frecency && t.tag(3, s.WireType.Varint).int32(e.frecency), 0 !== e.score && t.tag(4, s.WireType.Varint).int32(e.score); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FrecencyItem", [{ no: 1, name: "total_uses", kind: "scalar", T: 13 }, { no: 2, name: "recent_uses", kind: "scalar", repeat: 1, T: 4 }, { no: 3, name: "frecency", kind: "scalar", T: 5 }, { no: 4, name: "score", kind: "scalar", T: 5 }]) } } let C = new O; class R extends s.MessageType { create(e) { let t = { soundIds: [] }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) { if (i === s.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.soundIds.push(e.fixed64().toString()); else r.soundIds.push(e.fixed64().toString()) } else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } internalBinaryWrite(e, t, n) { if (e.soundIds.length) { t.tag(1, s.WireType.LengthDelimited).fork(); for (let n = 0; n < e.soundIds.length; n++) t.fixed64(e.soundIds[n]); t.join() } let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FavoriteSoundboardSounds", [{ no: 1, name: "sound_ids", kind: "scalar", repeat: 1, T: 6 }]) } } let g = new R; class L extends s.MessageType { create(e) { let t = { heardSounds: {} }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.heardSounds, e, n); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.string(); break; case 2: a = C.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.HeardSoundFrecency.heard_sounds") } } e[null != s ? s : ""] = null != a ? a : C.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.heardSounds)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.LengthDelimited).string(i), t.tag(2, s.WireType.LengthDelimited).fork(), C.internalBinaryWrite(e.heardSounds[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.HeardSoundFrecency", [{ no: 1, name: "heard_sounds", kind: "map", K: 9, V: { kind: "message", T: () => C } }]) } } let v = new L; class D extends s.MessageType { create(e) { let t = { playedSounds: {} }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.playedSounds, e, n); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.string(); break; case 2: a = C.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.PlayedSoundFrecency.played_sounds") } } e[null != s ? s : ""] = null != a ? a : C.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.playedSounds)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.LengthDelimited).string(i), t.tag(2, s.WireType.LengthDelimited).fork(), C.internalBinaryWrite(e.playedSounds[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.PlayedSoundFrecency", [{ no: 1, name: "played_sounds", kind: "map", K: 9, V: { kind: "message", T: () => C } }]) } } let M = new D; class y extends s.MessageType { create(e) { let t = { applications: {} }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.applications, e, n); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.string(); break; case 2: a = C.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.ApplicationFrecency.applications") } } e[null != s ? s : ""] = null != a ? a : C.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.applications)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.LengthDelimited).string(i), t.tag(2, s.WireType.LengthDelimited).fork(), C.internalBinaryWrite(e.applications[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ApplicationFrecency", [{ no: 1, name: "applications", kind: "map", K: 9, V: { kind: "message", T: () => C } }]) } } let P = new y; class U extends s.MessageType { create(e) { let t = { guildAndChannels: {} }; return globalThis.Object.defineProperty(t, s.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, s.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.guildAndChannels, e, n); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let o = e.skip(i); !1 !== a && (!0 === a ? s.UnknownFieldHandler.onRead : a)(this.typeName, r, t, i, o) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.fixed64().toString(); break; case 2: a = C.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.GuildAndChannelFrecency.guild_and_channels") } } e[null != s ? s : "0"] = null != a ? a : C.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.guildAndChannels)) t.tag(1, s.WireType.LengthDelimited).fork().tag(1, s.WireType.Bit64).fixed64(i), t.tag(2, s.WireType.LengthDelimited).fork(), C.internalBinaryWrite(e.guildAndChannels[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? s.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.GuildAndChannelFrecency", [{ no: 1, name: "guild_and_channels", kind: "map", K: 6, V: { kind: "message", T: () => C } }]) } } let b = new U }, 524437: function(e, t, n) { "use strict"; n.r(t), n.d(t, { AllGuildSettings: function() { return b }, AudioContextSetting: function() { return eP }, BackgroundGradientPresetId: function() { return c }, ChannelSettings: function() { return x }, DebugSettings: function() { return el }, DismissibleContent: function() { return o }, DismissibleGuildContent: function() { return a }, DmSpamFilterV2: function() { return u }, ExplicitContentRedaction: function() { return l }, FavoriteChannel: function() { return eM }, FavoriteChannelType: function() { return E }, GameLibrarySettings: function() { return ed }, GuildActivityStatusRestrictionDefault: function() { return d }, GuildFolder: function() { return eg }, GuildOnboardingProgress: function() { return s }, GuildSettings: function() { return w }, InboxSettings: function() { return P }, InboxTab: function() { return i }, NotificationSettings: function() { return er }, PreloadedUserSettings: function() { return M }, PrivacySettings: function() { return ea }, TextAndImagesSettings: function() { return en }, Theme: function() { return _ }, UserContentSettings: function() { return j }, VoiceAndVideoSettings: function() { return Q } }), n("47120"), n("411104"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"), n("653041"); var i, r, s, a, o, l, u, d, _, c, E, I, T, f, S, h, A, m, N, p, O, C, R = n("578012"), g = n("381499"), L = n("835913"), v = n("397696"); (I = i || (i = {}))[I.UNSPECIFIED = 0] = "UNSPECIFIED", I[I.MENTIONS = 1] = "MENTIONS", I[I.UNREADS = 2] = "UNREADS", I[I.TODOS = 3] = "TODOS", I[I.FOR_YOU = 4] = "FOR_YOU", I[I.GAME_INVITES = 5] = "GAME_INVITES", (T = r || (r = {}))[T.NO_PROGRESS = 0] = "NO_PROGRESS", T[T.JOIN_GUILD = 1] = "JOIN_GUILD", T[T.INVITE_USER = 2] = "INVITE_USER", T[T.CONTACT_SYNC = 4] = "CONTACT_SYNC", (f = s || (s = {}))[f.NO_GUILD_ONBOARDING = 0] = "NO_GUILD_ONBOARDING", f[f.GUILD_NOTICE_SHOWN = 1] = "GUILD_NOTICE_SHOWN", f[f.GUILD_NOTICE_CLEARED = 2] = "GUILD_NOTICE_CLEARED", (S = a || (a = {}))[S.DISABLE_UNSAFE_COMMUNITY_PERMISSIONS_NOTICE = 0] = "DISABLE_UNSAFE_COMMUNITY_PERMISSIONS_NOTICE", S[S.CLYDE_GUILD_NOTICE_NUX = 1] = "CLYDE_GUILD_NOTICE_NUX", S[S.SUMMARIES_NOTICE = 2] = "SUMMARIES_NOTICE", S[S.SUMMARIES_ENABLED_NOTICE = 3] = "SUMMARIES_ENABLED_NOTICE", S[S.ADOPT_CLAN_IDENTITY_NOTICE = 4] = "ADOPT_CLAN_IDENTITY_NOTICE", (h = o || (o = {}))[h.HUB_WAITLIST_UPSELL = 0] = "HUB_WAITLIST_UPSELL", h[h.APPLICATION_COMMAND_TOOLTIP = 1] = "APPLICATION_COMMAND_TOOLTIP", h[h.HUB_EVENT_HEADER_UPSELL = 2] = "HUB_EVENT_HEADER_UPSELL", h[h.CHANNELINFO_CHANNELBANNER_NOTICE = 3] = "CHANNELINFO_CHANNELBANNER_NOTICE", h[h.ACCOUNT_MULTIACCOUNT_TOOLTIP = 4] = "ACCOUNT_MULTIACCOUNT_TOOLTIP", h[h.SEASONALGIFTING_CHANNELBUTTON_POPUP = 5] = "SEASONALGIFTING_CHANNELBUTTON_POPUP", h[h.CHANNEL_NOTICE_INVITE = 6] = "CHANNEL_NOTICE_INVITE", h[h.CHANNEL_NOTICE_HUBLINK = 7] = "CHANNEL_NOTICE_HUBLINK", h[h.CHANNEL_NOTICE_QUICKSWITCHER = 8] = "CHANNEL_NOTICE_QUICKSWITCHER", h[h.CHANNEL_NOTICE_PREMIUM_GUILD_SUBSCRIPTION = 9] = "CHANNEL_NOTICE_PREMIUM_GUILD_SUBSCRIPTION", h[h.CHANNEL_NOTICE_GUILD_BANNER = 11] = "CHANNEL_NOTICE_GUILD_BANNER", h[h.GUILD_HEADER_EVENT_UPSELL = 12] = "GUILD_HEADER_EVENT_UPSELL", h[h.GUILD_HEADER_PREMIUM_GUILD_PROGRESS = 14] = "GUILD_HEADER_PREMIUM_GUILD_PROGRESS", h[h.GUILD_HEADER_ANIMATED_GUILD_BANNER = 15] = "GUILD_HEADER_ANIMATED_GUILD_BANNER", h[h.NAGBAR_NOTICE_DOWNLOAD = 16] = "NAGBAR_NOTICE_DOWNLOAD", h[h.NAGBAR_NOTICE_CONNECT_SPOTIFY = 17] = "NAGBAR_NOTICE_CONNECT_SPOTIFY", h[h.NAGBAR_NOTICE_CONNECT_PLAYSTATION = 18] = "NAGBAR_NOTICE_CONNECT_PLAYSTATION", h[h.NAGBAR_NOTICE_MFA_SMS_BACKUP = 19] = "NAGBAR_NOTICE_MFA_SMS_BACKUP", h[h.ACTIVITIES_SUNSET_COACH_MARK = 20] = "ACTIVITIES_SUNSET_COACH_MARK", h[h.NAGBAR_NOTICE_PREMIUM_PROMO = 21] = "NAGBAR_NOTICE_PREMIUM_PROMO", h[h.NAGBAR_NOTICE_PREMIUM_TIER_TWO_TRIAL_ENDING = 22] = "NAGBAR_NOTICE_PREMIUM_TIER_TWO_TRIAL_ENDING", h[h.NAGBAR_NOTICE_PREMIUM_REACTIVATE = 23] = "NAGBAR_NOTICE_PREMIUM_REACTIVATE", h[h.PREMIUM_5TH_ANNIVERSARY_MODAL = 24] = "PREMIUM_5TH_ANNIVERSARY_MODAL", h[h.GUILD_JOIN_FEEDBACK_MODAL = 25] = "GUILD_JOIN_FEEDBACK_MODAL", h[h.VOICE_QUALITY_BOOSTING_UPSELL_TOOLTIP = 26] = "VOICE_QUALITY_BOOSTING_UPSELL_TOOLTIP", h[h.ACTIVITIES_EARLY_USER_COACH_MARK = 27] = "ACTIVITIES_EARLY_USER_COACH_MARK", h[h.GUILD_HEADER_SERVER_DISCOVERY_TOOLTIP = 28] = "GUILD_HEADER_SERVER_DISCOVERY_TOOLTIP", h[h.ACTIVITIES_TUTORIAL_COACH_MARK = 29] = "ACTIVITIES_TUTORIAL_COACH_MARK", h[h.GUILD_HEADER_INVITE_SPLASH = 31] = "GUILD_HEADER_INVITE_SPLASH", h[h.NAGBAR_NOTICE_LOCALIZED_PRICING = 33] = "NAGBAR_NOTICE_LOCALIZED_PRICING", h[h.SOUNDBOARD_EDUCATION = 35] = "SOUNDBOARD_EDUCATION", h[h.GUILD_HEADER_PROGRESS_BAR_SIZE_COACH_MARK = 36] = "GUILD_HEADER_PROGRESS_BAR_SIZE_COACH_MARK", h[h.GUILD_HEADER_ROLE_SUBSCRIPTION_UPSELL = 37] = "GUILD_HEADER_ROLE_SUBSCRIPTION_UPSELL", h[h.CALL_CHAT_BUTTON_TEXT_IN_VOICE_COACH_MARK = 38] = "CALL_CHAT_BUTTON_TEXT_IN_VOICE_COACH_MARK", h[h.GUILD_DISCOVERY_LANDING_PAGE_SETTINGS_UPSELL = 39] = "GUILD_DISCOVERY_LANDING_PAGE_SETTINGS_UPSELL", h[h.GUILD_INSIGHTS_ACCESS_RATE_NEW = 40] = "GUILD_INSIGHTS_ACCESS_RATE_NEW", h[h.NOW_PLAYING_CONSENT_CARD = 41] = "NOW_PLAYING_CONSENT_CARD", h[h.GUILD_HEADER_BOOSTING_LOW_PRICE_EXPERIMENT_TOOLTIP = 42] = "GUILD_HEADER_BOOSTING_LOW_PRICE_EXPERIMENT_TOOLTIP", h[h.FORUM_CHANNEL_UPSELL_MODAL = 44] = "FORUM_CHANNEL_UPSELL_MODAL", h[h.POGGERMODE_BIRTHDAY_EDUCATION_TOOLTIP = 46] = "POGGERMODE_BIRTHDAY_EDUCATION_TOOLTIP", h[h.MWEB_APP_DOWNLOAD_HALFSHEET = 47] = "MWEB_APP_DOWNLOAD_HALFSHEET", h[h.MWEB_APP_DOWNLOAD_NAGBAR_THEMED = 48] = "MWEB_APP_DOWNLOAD_NAGBAR_THEMED", h[h.MWEB_APP_DOWNLOAD_NAGBAR_BLURPLE = 49] = "MWEB_APP_DOWNLOAD_NAGBAR_BLURPLE", h[h.GUILD_FEED_NUX_CARD = 50] = "GUILD_FEED_NUX_CARD", h[h.GUILD_HEADER_FREE_STICKER_SLOTS_TOOLTIP = 52] = "GUILD_HEADER_FREE_STICKER_SLOTS_TOOLTIP", h[h.ACTIVITIES_NITRO_TUTORIAL_COACH_MARK_V2 = 53] = "ACTIVITIES_NITRO_TUTORIAL_COACH_MARK_V2", h[h.ACTIVITIES_TEXT_INPUT_BUTTON_SPARKLES = 55] = "ACTIVITIES_TEXT_INPUT_BUTTON_SPARKLES", h[h.GUILD_DELETE_FEEDBACK = 56] = "GUILD_DELETE_FEEDBACK", h[h.GUILD_LEAVE_FEEDBACK = 57] = "GUILD_LEAVE_FEEDBACK", h[h.AUTH_SESSIONS_NEW = 63] = "AUTH_SESSIONS_NEW", h[h.DONUT_MOBILE_NUX = 65] = "DONUT_MOBILE_NUX", h[h.GUILD_ROLE_SUBSCRIPTION_MWEB_PURCHASE_UPSELL = 66] = "GUILD_ROLE_SUBSCRIPTION_MWEB_PURCHASE_UPSELL", h[h.FORUM_CHANNEL_HELPER_CARD = 67] = "FORUM_CHANNEL_HELPER_CARD", h[h.PASSPORT_USER_SETTINGS = 70] = "PASSPORT_USER_SETTINGS", h[h.SUMMER_BOGO_ANNOUNCEMENT = 71] = "SUMMER_BOGO_ANNOUNCEMENT", h[h.COMMANDS_MIGRATION_UPSELL_MODAL = 72] = "COMMANDS_MIGRATION_UPSELL_MODAL", h[h.FILE_LIMIT_UPLOAD_COACH_MARK = 73] = "FILE_LIMIT_UPLOAD_COACH_MARK", h[h.DONUT_DESKTOP_NUX = 77] = "DONUT_DESKTOP_NUX", h[h.GUILD_ROLE_SUBSCRIPTION_EMOJI_UPSELL = 79] = "GUILD_ROLE_SUBSCRIPTION_EMOJI_UPSELL", h[h.PREMIUM_SUBSCRIPTION_UPSELL_EMOJI_PICKER_TOP_OF_LIST = 80] = "PREMIUM_SUBSCRIPTION_UPSELL_EMOJI_PICKER_TOP_OF_LIST", h[h.STAGE_RAISED_HAND_MOVED = 81] = "STAGE_RAISED_HAND_MOVED", h[h.XBOX_ONE_WAY_RECONNECT = 82] = "XBOX_ONE_WAY_RECONNECT", h[h.XBOX_VOICE_DESKTOP_SETTINGS_UPSELL_POPOUT = 84] = "XBOX_VOICE_DESKTOP_SETTINGS_UPSELL_POPOUT", h[h.HUB_BACK_TO_SCHOOL_UPSELL = 85] = "HUB_BACK_TO_SCHOOL_UPSELL", h[h.STUDENT_HUB_PRIVACY_SETTINGS_TOOLTIP = 86] = "STUDENT_HUB_PRIVACY_SETTINGS_TOOLTIP", h[h.ACTIVITIES_MOBILE_VOICE_CONTROLS_TOGGLE_NUX = 89] = "ACTIVITIES_MOBILE_VOICE_CONTROLS_TOGGLE_NUX", h[h.PROFILE_THEMES_SETTINGS_VIEWED_V2 = 92] = "PROFILE_THEMES_SETTINGS_VIEWED_V2", h[h.GUILD_HEADER_ACTIVE_THREADS_NOTICE = 93] = "GUILD_HEADER_ACTIVE_THREADS_NOTICE", h[h.CHANNEL_LIST_OPT_IN_NUX = 94] = "CHANNEL_LIST_OPT_IN_NUX", h[h.ACTIVITIES_MOBILE_NUX = 95] = "ACTIVITIES_MOBILE_NUX", h[h.PROFILE_THEMES_NEW_BADGE = 96] = "PROFILE_THEMES_NEW_BADGE", h[h.GUILD_AUTOMOD_DEFAULT_ON_UPSELL = 97] = "GUILD_AUTOMOD_DEFAULT_ON_UPSELL", h[h.CHANNEL_BROWSER_NUX = 98] = "CHANNEL_BROWSER_NUX", h[h.RNA_CHANGELOG_HC_NOTICE = 99] = "RNA_CHANGELOG_HC_NOTICE", h[h.MESSAGE_REQUEST_SETTINGS_COACH_MARK = 100] = "MESSAGE_REQUEST_SETTINGS_COACH_MARK", h[h.GUILD_AUTOMOD_DEFAULT_ON_UPSELL_2 = 101] = "GUILD_AUTOMOD_DEFAULT_ON_UPSELL_2", h[h.GUILD_AUTOMOD_REGEX_UPSELL = 102] = "GUILD_AUTOMOD_REGEX_UPSELL", h[h.VOICE_CHANNEL_EFFECTS_REDUCED_MOTION_TOOLTIP = 103] = "VOICE_CHANNEL_EFFECTS_REDUCED_MOTION_TOOLTIP", h[h.CONNECTIONS_NUX = 108] = "CONNECTIONS_NUX", h[h.XBOX_VOICE_SURVEY_NAGBAR = 110] = "XBOX_VOICE_SURVEY_NAGBAR", h[h.PS_ONE_WAY_RECONNECT = 112] = "PS_ONE_WAY_RECONNECT", h[h.HALLOWEEN_2022_ACTIVITIES_COACH_MARK = 115] = "HALLOWEEN_2022_ACTIVITIES_COACH_MARK", h[h.NITRODUCTION_STEP_PROFILE_CUSTOMIZATION = 116] = "NITRODUCTION_STEP_PROFILE_CUSTOMIZATION", h[h.NITRODUCTION_STEP_BOOSTING = 117] = "NITRODUCTION_STEP_BOOSTING", h[h.NITRODUCTION_STEP_CUSTOM_EMOJI = 118] = "NITRODUCTION_STEP_CUSTOM_EMOJI", h[h.NEW_CRUNCHYROLL_CONNECTION = 119] = "NEW_CRUNCHYROLL_CONNECTION", h[h.APP_DIRECTORY_UPSELL_MODAL = 121] = "APP_DIRECTORY_UPSELL_MODAL", h[h.BASH_OUT_COACH_MARK = 123] = "BASH_OUT_COACH_MARK", h[h.GUILD_HEADER_COMMUNITY_ONBOARDING_ADMIN_UPSELL = 124] = "GUILD_HEADER_COMMUNITY_ONBOARDING_ADMIN_UPSELL", h[h.COMMUNITY_ONBOARDING_NEW_BADGE = 125] = "COMMUNITY_ONBOARDING_NEW_BADGE", h[h.CHURRO_LINK_UPSELL = 126] = "CHURRO_LINK_UPSELL", h[h.VERIFIED_ROLES_COACH_MARK = 127] = "VERIFIED_ROLES_COACH_MARK", h[h.PROFILE_THEMES_ACCESSIBILITY_TOOLTIP = 129] = "PROFILE_THEMES_ACCESSIBILITY_TOOLTIP", h[h.BLACK_FRIDAY_2022_BOGO_ANNOUNCEMENT_MODAL = 130] = "BLACK_FRIDAY_2022_BOGO_ANNOUNCEMENT_MODAL", h[h.USER_SAFETY_SAFE_DIRECT_MESSAGING = 131] = "USER_SAFETY_SAFE_DIRECT_MESSAGING", h[h.GG_ANNOUNCEMENT = 132] = "GG_ANNOUNCEMENT", h[h.CHANNEL_BROWSER_NEW_BADGE_NUX = 133] = "CHANNEL_BROWSER_NEW_BADGE_NUX", h[h.CREATOR_PROMO_PAGE_COACH_MARK = 134] = "CREATOR_PROMO_PAGE_COACH_MARK", h[h.CREATOR_MONETIZATION_ONBOARDING_V2_UPSELL = 136] = "CREATOR_MONETIZATION_ONBOARDING_V2_UPSELL", h[h.GUILD_ONBOARDING_UPSELL_MODAL = 137] = "GUILD_ONBOARDING_UPSELL_MODAL", h[h.NAGBAR_NOTICE_ONE_TIME_PAYMENT_PAST_DUE = 138] = "NAGBAR_NOTICE_ONE_TIME_PAYMENT_PAST_DUE", h[h.DROPS_GO_LIVE_BANNER_NOTICE_HALO = 139] = "DROPS_GO_LIVE_BANNER_NOTICE_HALO", h[h.DROPS_ELIGIBILITY_ENROLLMENT_TOOLTIP_HALO = 140] = "DROPS_ELIGIBILITY_ENROLLMENT_TOOLTIP_HALO", h[h.DROPS_QUEST_COMPLETION_TOOLTIP_HALO = 141] = "DROPS_QUEST_COMPLETION_TOOLTIP_HALO", h[h.SEASONAL_GIFTING_COACHMARK_2022 = 146] = "SEASONAL_GIFTING_COACHMARK_2022", h[h.NAGBAR_BOUNCED_EMAIL_NOTICE = 147] = "NAGBAR_BOUNCED_EMAIL_NOTICE", h[h.GUILD_ONBOARDING_UPSELL_CHANNEL_NOTICE = 151] = "GUILD_ONBOARDING_UPSELL_CHANNEL_NOTICE", h[h.CONSOLE_PTT_DISABLE_ALERT = 152] = "CONSOLE_PTT_DISABLE_ALERT", h[h.ACTIVITIES_MINI_SHELF_SPARKLES = 153] = "ACTIVITIES_MINI_SHELF_SPARKLES", h[h.DROPS_ENDED_INCOMPLETE_HALO = 154] = "DROPS_ENDED_INCOMPLETE_HALO", h[h.GDM_INVITE_REMINDER = 157] = "GDM_INVITE_REMINDER", h[h.USER_SAFETY_CONSUMER_EDUCATION_BLOCK = 161] = "USER_SAFETY_CONSUMER_EDUCATION_BLOCK", h[h.USER_SAFETY_CONSUMER_EDUCATION_MUTE = 162] = "USER_SAFETY_CONSUMER_EDUCATION_MUTE", h[h.LINKED_ROLE_ADMIN_GUILD = 163] = "LINKED_ROLE_ADMIN_GUILD", h[h.NAGBAR_ACTIVATE_SERVER_SUBSCRIPTION = 164] = "NAGBAR_ACTIVATE_SERVER_SUBSCRIPTION", h[h.BURST_REACTION_BUTTON_SPARKLE = 165] = "BURST_REACTION_BUTTON_SPARKLE", h[h.NAGBAR_NOTICE_PREMIUM_TIER_0_TRIAL_ENDING = 166] = "NAGBAR_NOTICE_PREMIUM_TIER_0_TRIAL_ENDING", h[h.VC_TILE_ACTIVITIES_ENTRY_POINT = 167] = "VC_TILE_ACTIVITIES_ENTRY_POINT", h[h.BURST_REACTION_COACHMARK = 169] = "BURST_REACTION_COACHMARK", h[h.BURST_REACTIONS_REMOVE_MODAL = 170] = "BURST_REACTIONS_REMOVE_MODAL", h[h.BURST_REACTION_NITRO_TOOLTIP = 171] = "BURST_REACTION_NITRO_TOOLTIP", h[h.CLIENT_THEMES_SETTINGS_BADGE = 173] = "CLIENT_THEMES_SETTINGS_BADGE", h[h.CLIENT_THEMES_COACHMARK = 174] = "CLIENT_THEMES_COACHMARK", h[h.CLIENT_THEMES_SPARKLE_PREVIEW = 175] = "CLIENT_THEMES_SPARKLE_PREVIEW", h[h.STAGE_V2_UPSELL = 176] = "STAGE_V2_UPSELL", h[h.QUEST_1_ENROLLMENT_TOOLTIP = 177] = "QUEST_1_ENROLLMENT_TOOLTIP", h[h.QUEST_1_COMPLETION_TOOLTIP = 178] = "QUEST_1_COMPLETION_TOOLTIP", h[h.QUEST_1_GO_LIVE_BANNER = 179] = "QUEST_1_GO_LIVE_BANNER", h[h.QUEST_1_ENDED_INCOMPLETE = 180] = "QUEST_1_ENDED_INCOMPLETE", h[h.PREMIUM_TUTORIAL_EXPERIENCE = 181] = "PREMIUM_TUTORIAL_EXPERIENCE", h[h.APP_DIRECTORY_SERVER_SETUP_UPSELL_MODAL = 182] = "APP_DIRECTORY_SERVER_SETUP_UPSELL_MODAL", h[h.PREMIUM_TUTORIAL_FILE_UPLOAD_COMPOSER_TOOLTIP = 183] = "PREMIUM_TUTORIAL_FILE_UPLOAD_COMPOSER_TOOLTIP", h[h.PREMIUM_TUTORIAL_STICKER_PICKER_COMPOSER_TOOLTIP = 184] = "PREMIUM_TUTORIAL_STICKER_PICKER_COMPOSER_TOOLTIP", h[h.PREMIUM_TUTORIAL_EMOJI_PICKER_COMPOSER_TOOLTIP = 185] = "PREMIUM_TUTORIAL_EMOJI_PICKER_COMPOSER_TOOLTIP", h[h.PREMIUM_TUTORIAL_SERVER_MENU_TOOLTIP = 186] = "PREMIUM_TUTORIAL_SERVER_MENU_TOOLTIP", h[h.TABS_V2_ANNOUNCEMENT_SHEET = 188] = "TABS_V2_ANNOUNCEMENT_SHEET", h[h.VOICE_MESSAGE_UPSELL_DM = 189] = "VOICE_MESSAGE_UPSELL_DM", h[h.SUPER_REACTIONS_NITRO_MARKETING = 190] = "SUPER_REACTIONS_NITRO_MARKETING", h[h.NITRO_DROP_2023_04_ANNOUNCEMENT_MODAL = 191] = "NITRO_DROP_2023_04_ANNOUNCEMENT_MODAL", h[h.CLYDE_GUILD_HEADER_NUX = 193] = "CLYDE_GUILD_HEADER_NUX", h[h.CLYDE_CHAT_BAR_NUX = 194] = "CLYDE_CHAT_BAR_NUX", h[h.VOICE_MESSAGE_UPSELL_GUILD = 195] = "VOICE_MESSAGE_UPSELL_GUILD", h[h.ACTIVITY_GDM_CALL_TOOLTIP = 196] = "ACTIVITY_GDM_CALL_TOOLTIP", h[h.ACTIVITY_GDM_ROCKET_SPARKLE = 197] = "ACTIVITY_GDM_ROCKET_SPARKLE", h[h.NITRO_DROP_2023_04_NITRO_TAB_BADGE = 205] = "NITRO_DROP_2023_04_NITRO_TAB_BADGE", h[h.GUILD_ROLE_SUBSCRIPTION_IAP_UPSELL = 206] = "GUILD_ROLE_SUBSCRIPTION_IAP_UPSELL", h[h.ACTIVITIES_MOBILE_PIP_FAB_NUX = 208] = "ACTIVITIES_MOBILE_PIP_FAB_NUX", h[h.GUILD_HEADER_SOUNDBOARD_PERMISSION = 209] = "GUILD_HEADER_SOUNDBOARD_PERMISSION", h[h.GUILD_ONBOARDING_UPSELL_HEADER = 210] = "GUILD_ONBOARDING_UPSELL_HEADER", h[h.ACTIVITIES_COACH_MARK_GAME_NIGHT = 211] = "ACTIVITIES_COACH_MARK_GAME_NIGHT", h[h.GUILD_ONBOARDING_UPSELL_NAGBAR = 212] = "GUILD_ONBOARDING_UPSELL_NAGBAR", h[h.GUILD_ONBOARDING_UPSELL_MODAL_V2 = 213] = "GUILD_ONBOARDING_UPSELL_MODAL_V2", h[h.SUPER_REACTIONS_FREE_USER_FIRST_SENT = 214] = "SUPER_REACTIONS_FREE_USER_FIRST_SENT", h[h.SUPER_REACTIONS_TOOLTIP_COACHMARK = 215] = "SUPER_REACTIONS_TOOLTIP_COACHMARK", h[h.SOUNDBOARD_VOLUME_EDUCATION = 216] = "SOUNDBOARD_VOLUME_EDUCATION", h[h.NAGBAR_NOTICE_POMELO = 217] = "NAGBAR_NOTICE_POMELO", h[h.APP_DIRECTORY_GUILD_SETTINGS_NEW_INDICATOR = 218] = "APP_DIRECTORY_GUILD_SETTINGS_NEW_INDICATOR", h[h.APP_DIRECTORY_GUILD_SETTINGS_CONTEXT_MENU_NEW_INDICATOR = 219] = "APP_DIRECTORY_GUILD_SETTINGS_CONTEXT_MENU_NEW_INDICATOR", h[h.SUPER_REACTIONS_TAB_SPARKLE = 220] = "SUPER_REACTIONS_TAB_SPARKLE", h[h.ACTIVITIES_WATCH_TOGETHER_APRIL_2023_WEEK_1_SPARKLES = 221] = "ACTIVITIES_WATCH_TOGETHER_APRIL_2023_WEEK_1_SPARKLES", h[h.ACTIVITIES_WATCH_TOGETHER_APRIL_2023_WEEK_2_SPARKLES = 222] = "ACTIVITIES_WATCH_TOGETHER_APRIL_2023_WEEK_2_SPARKLES", h[h.MJ_NEW_USER_CHAT_BAR = 223] = "MJ_NEW_USER_CHAT_BAR", h[h.CHANNEL_NOTICE_CLYDE_NUX = 224] = "CHANNEL_NOTICE_CLYDE_NUX", h[h.USER_SAFETY_CONSUMER_EDUCATION_REPORTING = 225] = "USER_SAFETY_CONSUMER_EDUCATION_REPORTING", h[h.SUPER_REACTIONS_FIRST_SENT = 227] = "SUPER_REACTIONS_FIRST_SENT", h[h.COMMUNITY_GUILD_SETTINGS_SAFETY = 228] = "COMMUNITY_GUILD_SETTINGS_SAFETY", h[h.FRIEND_FINDER_FIRST_TIME_BADGE = 229] = "FRIEND_FINDER_FIRST_TIME_BADGE", h[h.SHARE_NITRO_BUTTON_SPARKLES = 230] = "SHARE_NITRO_BUTTON_SPARKLES", h[h.PREMIUM_MOBILE_TRIAL_USER_SETTINGS_AVATAR_BADGE = 231] = "PREMIUM_MOBILE_TRIAL_USER_SETTINGS_AVATAR_BADGE", h[h.SOUNDBOARD_KEYBIND_TIP = 232] = "SOUNDBOARD_KEYBIND_TIP", h[h.QUEST_2_ENROLLMENT_TOOLTIP = 234] = "QUEST_2_ENROLLMENT_TOOLTIP", h[h.QUEST_2_COMPLETION_TOOLTIP = 235] = "QUEST_2_COMPLETION_TOOLTIP", h[h.QUEST_2_GO_LIVE_BANNER = 236] = "QUEST_2_GO_LIVE_BANNER", h[h.QUEST_2_ENDED_INCOMPLETE = 237] = "QUEST_2_ENDED_INCOMPLETE", h[h.GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATES = 238] = "GUILD_ROLE_SUBSCRIPTION_TIER_TEMPLATES", h[h.MEDIA_CHANNEL_UPSELL = 243] = "MEDIA_CHANNEL_UPSELL", h[h.ADD_FRIENDS_WIDGET = 244] = "ADD_FRIENDS_WIDGET", h[h.YOU_TAB_AVATAR_ONBOARDING = 245] = "YOU_TAB_AVATAR_ONBOARDING", h[h.YOU_TAB_ABOUT_ME_ONBOARDING = 246] = "YOU_TAB_ABOUT_ME_ONBOARDING", h[h.GUILD_HEADER_SUMMARIES_UPSELL = 247] = "GUILD_HEADER_SUMMARIES_UPSELL", h[h.SUPER_REACTIONS_COACHMARK_MOBILE = 250] = "SUPER_REACTIONS_COACHMARK_MOBILE", h[h.SUPER_REACTIONS_SPARKLES_ACTION_SHEET_MOBILE = 251] = "SUPER_REACTIONS_SPARKLES_ACTION_SHEET_MOBILE", h[h.SERVER_SUBSCRIPTION_TIER_TEMPLATE_UPSELL = 252] = "SERVER_SUBSCRIPTION_TIER_TEMPLATE_UPSELL", h[h.EMOJI_PICKER_FAVORITE_EMOJIS_TIP = 253] = "EMOJI_PICKER_FAVORITE_EMOJIS_TIP", h[h.SERVER_SUBSCRIPTION_SETTINGS_NEW_BADGE_TIER_TEMPLATE = 254] = "SERVER_SUBSCRIPTION_SETTINGS_NEW_BADGE_TIER_TEMPLATE", h[h.SUPER_REACTIONS_MOBILE_FULLSCREEN_TAP_TO_DISMISS = 255] = "SUPER_REACTIONS_MOBILE_FULLSCREEN_TAP_TO_DISMISS", h[h.FAMILY_CENTER_NEW_BADGE = 256] = "FAMILY_CENTER_NEW_BADGE", h[h.CONSOLE_LOCAL_DETECT_CTA = 257] = "CONSOLE_LOCAL_DETECT_CTA", h[h.REMIXING_ENTRYPOINT_EDUCATION_UPSELLS_MOBILE = 263] = "REMIXING_ENTRYPOINT_EDUCATION_UPSELLS_MOBILE", h[h.GUEST_VOICE_INVITES_MENU_ITEM_NEW_BADGE = 264] = "GUEST_VOICE_INVITES_MENU_ITEM_NEW_BADGE", h[h.REMIXING_ENTRYPOINT_OPEN_MEDIA_KEYBOARD_UPSELL_MOBILE = 265] = "REMIXING_ENTRYPOINT_OPEN_MEDIA_KEYBOARD_UPSELL_MOBILE", h[h.GUILD_MEMBER_SAFETY_BANNER_NOTICE = 266] = "GUILD_MEMBER_SAFETY_BANNER_NOTICE", h[h.SUMMER_2023_BOGO_ANNOUNCEMENT_MODAL = 270] = "SUMMER_2023_BOGO_ANNOUNCEMENT_MODAL", h[h.INVENTORY_GUILD_SETTINGS_MODMIN_COACHMARK = 271] = "INVENTORY_GUILD_SETTINGS_MODMIN_COACHMARK", h[h.CUSTOM_CALL_SOUNDS_PICKER_UPSELL = 272] = "CUSTOM_CALL_SOUNDS_PICKER_UPSELL", h[h.CUSTOM_CALL_SOUNDS_SPARKLES = 274] = "CUSTOM_CALL_SOUNDS_SPARKLES", h[h.SOUNDBOARD_MOBILE_FLOATING_CTA = 275] = "SOUNDBOARD_MOBILE_FLOATING_CTA", h[h.SOUNDBOARD_MOBILE_NEW_BADGE = 276] = "SOUNDBOARD_MOBILE_NEW_BADGE", h[h.PROFILE_THEMES_FEATURE_EDUCATION_TOOLTIP_TAKE_2 = 277] = "PROFILE_THEMES_FEATURE_EDUCATION_TOOLTIP_TAKE_2", h[h.VOICE_PANEL_BAD_CONNECTION_CTA = 278] = "VOICE_PANEL_BAD_CONNECTION_CTA", h[h.PREMIUM_TRIAL_OFFER_MOBILE_ACTION_SHEET = 279] = "PREMIUM_TRIAL_OFFER_MOBILE_ACTION_SHEET", h[h.MEDIA_CHANNEL_MULTIPLE_THUMBNAIL_NOTICE = 280] = "MEDIA_CHANNEL_MULTIPLE_THUMBNAIL_NOTICE", h[h.CLIPS_ONBOARDING_GO_LIVE_COACHMARK = 281] = "CLIPS_ONBOARDING_GO_LIVE_COACHMARK", h[h.CLIPS_ONBOARDING_CLIP_BUTTON_COACHMARK = 282] = "CLIPS_ONBOARDING_CLIP_BUTTON_COACHMARK", h[h.CUSTOM_APP_ICONS_COACHMARK = 283] = "CUSTOM_APP_ICONS_COACHMARK", h[h.CUSTOM_APP_ICONS_NEW_BADGE = 284] = "CUSTOM_APP_ICONS_NEW_BADGE", h[h.BROADCASTING_BROADCASTER_TOOLTIP = 285] = "BROADCASTING_BROADCASTER_TOOLTIP", h[h.BROADCASTING_VIEWER_TOOLTIP = 286] = "BROADCASTING_VIEWER_TOOLTIP", h[h.SERVER_SHOP_UPSELL = 288] = "SERVER_SHOP_UPSELL", h[h.LAUNCH_PAD_PULL_TAB_NUX = 289] = "LAUNCH_PAD_PULL_TAB_NUX", h[h.CLIPS_SETTINGS_BETA_TAG = 290] = "CLIPS_SETTINGS_BETA_TAG", h[h.WHATS_NEW_AVATAR_DECOS_FLIP = 292] = "WHATS_NEW_AVATAR_DECOS_FLIP", h[h.WHATS_NEW_PROFILE_EFFECTS_FLIP = 293] = "WHATS_NEW_PROFILE_EFFECTS_FLIP", h[h.MEMBERS_LAUNCH_UPSELL = 294] = "MEMBERS_LAUNCH_UPSELL", h[h.SERVER_SHOP_PHANTOM_PREVIEW = 295] = "SERVER_SHOP_PHANTOM_PREVIEW", h[h.RECURRING_CONTACT_SYNC_PROMPT = 297] = "RECURRING_CONTACT_SYNC_PROMPT", h[h.INVENTORY_TRY_PACKS_MODAL = 302] = "INVENTORY_TRY_PACKS_MODAL", h[h.DEPRECATE_WIN32_MESSAGE = 305] = "DEPRECATE_WIN32_MESSAGE", h[h.DEKSTOP_CUSTOM_APP_ICON_COACHMARK = 306] = "DEKSTOP_CUSTOM_APP_ICON_COACHMARK", h[h.DEKSTOP_CUSTOM_APP_ICON_BADGE = 307] = "DEKSTOP_CUSTOM_APP_ICON_BADGE", h[h.WHATS_NEW_AVATAR_DECOS_NOTIF_BADGE = 309] = "WHATS_NEW_AVATAR_DECOS_NOTIF_BADGE", h[h.WHATS_NEW_PROFILE_EFFECTS_NOTIF_BADGE = 310] = "WHATS_NEW_PROFILE_EFFECTS_NOTIF_BADGE", h[h.CLYDE_AI_PERSONALITIES_NUX_MODAL = 312] = "CLYDE_AI_PERSONALITIES_NUX_MODAL", h[h.NUX_GUILD_CHANNEL_EXPLAINER = 313] = "NUX_GUILD_CHANNEL_EXPLAINER", h[h.SUPER_REACTION_TOGGLE_EDUCATION_DESKTOP = 316] = "SUPER_REACTION_TOGGLE_EDUCATION_DESKTOP", h[h.SUPER_REACTION_TOGGLE_EDUCATION_MOBILE = 317] = "SUPER_REACTION_TOGGLE_EDUCATION_MOBILE", h[h.SEEN_LAUNCH_WELCOME_OR_REDESIGN = 325] = "SEEN_LAUNCH_WELCOME_OR_REDESIGN", h[h.SEEN_OLD_DESIGN = 326] = "SEEN_OLD_DESIGN", h[h.SEASONAL_GIFTING_COACHMARK_2023 = 328] = "SEASONAL_GIFTING_COACHMARK_2023", h[h.SHOP_FOR_ALL_USER_POPOUT_UPSELL = 329] = "SHOP_FOR_ALL_USER_POPOUT_UPSELL", h[h.COLLECTIBLES_GIFTING_COACHMARK = 334] = "COLLECTIBLES_GIFTING_COACHMARK", h[h.SEEN_LAUNCH_WELCOME = 335] = "SEEN_LAUNCH_WELCOME", h[h.FAVORITE_SERVER_ADD_TO_FAVORITES_COACHMARK = 336] = "FAVORITE_SERVER_ADD_TO_FAVORITES_COACHMARK", h[h.INVENTORY_GUILD_SETTINGS_MODMIN_COACHMARK_ROLLBACK = 337] = "INVENTORY_GUILD_SETTINGS_MODMIN_COACHMARK_ROLLBACK", h[h.FRIEND_FINDER_CONTACTS_IN_NOTIFICATIONS = 338] = "FRIEND_FINDER_CONTACTS_IN_NOTIFICATIONS", h[h.OVERLAY_KEYBIND_NOTIFICATION = 340] = "OVERLAY_KEYBIND_NOTIFICATION", h[h.CHANNEL_LIST_V2_BROWSE_CHANNELS_NUX = 343] = "CHANNEL_LIST_V2_BROWSE_CHANNELS_NUX", h[h.UU_MIGRATION_NOTICE = 345] = "UU_MIGRATION_NOTICE", h[h.HANG_STATUS_NEW_BADGE = 346] = "HANG_STATUS_NEW_BADGE", h[h.VOICE_CALL_BG_PICKER_TOOLTIP = 347] = "VOICE_CALL_BG_PICKER_TOOLTIP", h[h.VOICE_CALL_BG_PICKER_NEW_BADGE = 348] = "VOICE_CALL_BG_PICKER_NEW_BADGE", h[h.SWIPE_TO_REPLY_COACHMARK = 349] = "SWIPE_TO_REPLY_COACHMARK", h[h.MOBILE_ACCESSIBILITY_COLOR_SETTINGS = 350] = "MOBILE_ACCESSIBILITY_COLOR_SETTINGS", h[h.POLLS_CHAT_INPUT_COACHMARK = 354] = "POLLS_CHAT_INPUT_COACHMARK", h[h.PER_GUILD_COLLECTIBLES_CUSTOMIZATION_COACHMARK = 355] = "PER_GUILD_COLLECTIBLES_CUSTOMIZATION_COACHMARK", h[h.LOOTBOXES_ENTRYPOINT = 358] = "LOOTBOXES_ENTRYPOINT", h[h.TENURE_REWARD_PENDING = 360] = "TENURE_REWARD_PENDING", h[h.TENURE_REWARD_REDEEMABLE = 361] = "TENURE_REWARD_REDEEMABLE", h[h.TENURE_REWARD_REDEEMABLE_CONFETTI = 363] = "TENURE_REWARD_REDEEMABLE_CONFETTI", h[h.GAME_ONE_USER_SIGNUPS = 364] = "GAME_ONE_USER_SIGNUPS", h[h.COLLECTIBLES_SHOP_SHY_COACHTIP = 365] = "COLLECTIBLES_SHOP_SHY_COACHTIP", h[h.APP_LAUNCHER_ONBOARDING_BOTS_BANNER = 366] = "APP_LAUNCHER_ONBOARDING_BOTS_BANNER", h[h.APP_LAUNCHER_ONBOARDING_ACTIVITIES_BANNER = 367] = "APP_LAUNCHER_ONBOARDING_ACTIVITIES_BANNER", h[h.APP_LAUNCHER_ONBOARDING_APPS_BANNER = 368] = "APP_LAUNCHER_ONBOARDING_APPS_BANNER", h[h.COLLECTIBLES_MOBILE_SHOP_MARKETING = 369] = "COLLECTIBLES_MOBILE_SHOP_MARKETING", h[h.COLLECTIBLES_MOBILE_SHOP_HALF_SHEET = 370] = "COLLECTIBLES_MOBILE_SHOP_HALF_SHEET", h[h.GENSHIN_USER_SIGNUPS = 371] = "GENSHIN_USER_SIGNUPS", h[h.ACTIVITIES_CHAT_BUTTON_NUX_V2 = 372] = "ACTIVITIES_CHAT_BUTTON_NUX_V2", h[h.ACTIVITIES_CHAT_MENU_NEW_BADGE = 373] = "ACTIVITIES_CHAT_MENU_NEW_BADGE", h[h.PREMIUM_2024_APRIL_MARKETING_MODAL = 374] = "PREMIUM_2024_APRIL_MARKETING_MODAL", h[h.PREMIUM_2024_APRIL_MARKETING_BADGE = 375] = "PREMIUM_2024_APRIL_MARKETING_BADGE", h[h.PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_COACHMARK = 376] = "PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_COACHMARK", h[h.REFERRAL_PROGRAM_PROGRESS_BAR_TOGGLE = 377] = "REFERRAL_PROGRAM_PROGRESS_BAR_TOGGLE", h[h.PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_GUILD_BADGE = 378] = "PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_GUILD_BADGE", h[h.PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_GDM_DM_BADGE = 379] = "PREMIUM_CUSTOM_NOTIFICATION_SOUNDS_GDM_DM_BADGE", h[h.REFERRAL_PROGRAM_PREMIUM_TAB_BADGE = 380] = "REFERRAL_PROGRAM_PREMIUM_TAB_BADGE", h[h.PREMIUM_SUBSCRIPTION_APRIL_MARKETING_DECO_TOOLTIP = 381] = "PREMIUM_SUBSCRIPTION_APRIL_MARKETING_DECO_TOOLTIP", h[h.COLLECTIBLES_SHOP_LOFI_VIBES_COACHTIP = 382] = "COLLECTIBLES_SHOP_LOFI_VIBES_COACHTIP", h[h.COLLECTIBLES_SHOP_GALAXY_COACHTIP = 383] = "COLLECTIBLES_SHOP_GALAXY_COACHTIP", h[h.CONTENT_INVENTORY_ONE_CLICK_REPLY_COACHTIP = 384] = "CONTENT_INVENTORY_ONE_CLICK_REPLY_COACHTIP", h[h.CHANNEL_LIST_CLAN_ADMIN_UPSELL = 385] = "CHANNEL_LIST_CLAN_ADMIN_UPSELL", h[h.GUILD_LIST_CLAN_ADMIN_UPSELL = 386] = "GUILD_LIST_CLAN_ADMIN_UPSELL", h[h.MOBILE_NITRO_HOME_SETTINGS_BADGE = 387] = "MOBILE_NITRO_HOME_SETTINGS_BADGE", h[h.BRAND_REFRESH_NEW_BADGE = 388] = "BRAND_REFRESH_NEW_BADGE", h[h.BRAND_REFRESH_BLURPLE_TWILIGHT_APP_ICON_BADGE = 389] = "BRAND_REFRESH_BLURPLE_TWILIGHT_APP_ICON_BADGE", h[h.BRAND_REFRESH_CLIENT_THEME_BADGE = 390] = "BRAND_REFRESH_CLIENT_THEME_BADGE", h[h.APP_LAUNCHER_USER_APP_BETA_NOTICE = 391] = "APP_LAUNCHER_USER_APP_BETA_NOTICE", h[h.COLLECTIBLES_PIRATES_MOBILE_BADGING = 392] = "COLLECTIBLES_PIRATES_MOBILE_BADGING", h[h.COLLECTIBLES_SHOP_RETRO_AND_PIRATES_COACHTIP = 393] = "COLLECTIBLES_SHOP_RETRO_AND_PIRATES_COACHTIP", h[h.PRIDE_ICONS = 394] = "PRIDE_ICONS", h[h.PRIDE_ICONS_COACHMARK = 395] = "PRIDE_ICONS_COACHMARK", h[h.PRIDE_ICONS_APPEARANCE_BADGE = 396] = "PRIDE_ICONS_APPEARANCE_BADGE", h[h.CLAN_TAG_WAITLIST = 397] = "CLAN_TAG_WAITLIST", h[h.GUILD_LIST_CLAN_USER_UPSELL = 398] = "GUILD_LIST_CLAN_USER_UPSELL", h[h.QUEST_HOME_FRIENDS_LIST_NEW_BADGE = 399] = "QUEST_HOME_FRIENDS_LIST_NEW_BADGE", h[h.WHATS_NEW_APP_STYLES_JUNE_2024_FLIP = 400] = "WHATS_NEW_APP_STYLES_JUNE_2024_FLIP", h[h.WHATS_NEW_CUSTOM_NOTIFICATION_SOUNDS_FLIP = 401] = "WHATS_NEW_CUSTOM_NOTIFICATION_SOUNDS_FLIP", h[h.WHATS_NEW_REFERRAL_PROGRAM_FLIP = 402] = "WHATS_NEW_REFERRAL_PROGRAM_FLIP", h[h.WHATS_NEW_APP_STYLES_JUNE_2024_NITRO_BADGE = 403] = "WHATS_NEW_APP_STYLES_JUNE_2024_NITRO_BADGE", h[h.WHATS_NEW_CUSTOM_NOTIFICATION_SOUNDS_NITRO_BADGE = 404] = "WHATS_NEW_CUSTOM_NOTIFICATION_SOUNDS_NITRO_BADGE", h[h.WHATS_NEW_REFERRAL_PROGRAM_NITRO_BADGE = 405] = "WHATS_NEW_REFERRAL_PROGRAM_NITRO_BADGE", h[h.WHATS_NEW_SERVER_PROFILE_FLIP = 406] = "WHATS_NEW_SERVER_PROFILE_FLIP", h[h.WHATS_NEW_SERVER_PROFILE_BADGE = 407] = "WHATS_NEW_SERVER_PROFILE_BADGE", h[h.COLLECTIBLES_SHOP_ARCADE_COACHTIP = 408] = "COLLECTIBLES_SHOP_ARCADE_COACHTIP", (A = l || (l = {}))[A.UNSET_EXPLICIT_CONTENT_REDACTION = 0] = "UNSET_EXPLICIT_CONTENT_REDACTION", A[A.SHOW = 1] = "SHOW", A[A.BLUR = 2] = "BLUR", A[A.BLOCK = 3] = "BLOCK", (m = u || (u = {}))[m.DEFAULT_UNSET = 0] = "DEFAULT_UNSET", m[m.DISABLED = 1] = "DISABLED", m[m.NON_FRIENDS = 2] = "NON_FRIENDS", m[m.FRIENDS_AND_NON_FRIENDS = 3] = "FRIENDS_AND_NON_FRIENDS", (N = d || (d = {}))[N.OFF = 0] = "OFF", N[N.ON_FOR_LARGE_GUILDS = 1] = "ON_FOR_LARGE_GUILDS", (p = _ || (_ = {}))[p.UNSET = 0] = "UNSET", p[p.DARK = 1] = "DARK", p[p.LIGHT = 2] = "LIGHT", p[p.DARKER = 3] = "DARKER", p[p.MIDNIGHT = 4] = "MIDNIGHT", (O = c || (c = {}))[O.MINT_APPLE = 0] = "MINT_APPLE", O[O.CITRUS_SHERBERT = 1] = "CITRUS_SHERBERT", O[O.RETRO_RAINCLOUD = 2] = "RETRO_RAINCLOUD", O[O.HANAMI = 3] = "HANAMI", O[O.SUNRISE = 4] = "SUNRISE", O[O.COTTON_CANDY = 5] = "COTTON_CANDY", O[O.LOFI_VIBES = 6] = "LOFI_VIBES", O[O.DESERT_KHAKI = 7] = "DESERT_KHAKI", O[O.SUNSET = 8] = "SUNSET", O[O.CHROMA_GLOW = 9] = "CHROMA_GLOW", O[O.FOREST = 10] = "FOREST", O[O.CRIMSON_MOON = 11] = "CRIMSON_MOON", O[O.MIDNIGHT_BLURPLE = 12] = "MIDNIGHT_BLURPLE", O[O.MARS = 13] = "MARS", O[O.DUSK = 14] = "DUSK", O[O.UNDER_THE_SEA = 15] = "UNDER_THE_SEA", O[O.EASTER_EGG = 16] = "EASTER_EGG", O[O.RETRO_STORM = 17] = "RETRO_STORM", O[O.NEON_NIGHTS = 18] = "NEON_NIGHTS", O[O.SEPIA = 19] = "SEPIA", O[O.STRAWBERRY_LEMONADE = 20] = "STRAWBERRY_LEMONADE", O[O.AURORA = 21] = "AURORA", O[O.BLURPLE_TWILIGHT = 22] = "BLURPLE_TWILIGHT", (C = E || (E = {}))[C.UNSET_FAVORITE_CHANNEL_TYPE = 0] = "UNSET_FAVORITE_CHANNEL_TYPE", C[C.REFERENCE_ORIGINAL = 1] = "REFERENCE_ORIGINAL", C[C.CATEGORY = 2] = "CATEGORY"; class D extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.versions = v.Versions.internalBinaryRead(e, e.uint32(), n, r.versions); break; case 2: r.inbox = P.internalBinaryRead(e, e.uint32(), n, r.inbox); break; case 3: r.guilds = b.internalBinaryRead(e, e.uint32(), n, r.guilds); break; case 4: r.userContent = j.internalBinaryRead(e, e.uint32(), n, r.userContent); break; case 5: r.voiceAndVideo = Q.internalBinaryRead(e, e.uint32(), n, r.voiceAndVideo); break; case 6: r.textAndImages = en.internalBinaryRead(e, e.uint32(), n, r.textAndImages); break; case 7: r.notifications = er.internalBinaryRead(e, e.uint32(), n, r.notifications); break; case 8: r.privacy = ea.internalBinaryRead(e, e.uint32(), n, r.privacy); break; case 9: r.debug = el.internalBinaryRead(e, e.uint32(), n, r.debug); break; case 10: r.gameLibrary = ed.internalBinaryRead(e, e.uint32(), n, r.gameLibrary); break; case 11: r.status = ec.internalBinaryRead(e, e.uint32(), n, r.status); break; case 12: r.localization = ef.internalBinaryRead(e, e.uint32(), n, r.localization); break; case 13: r.appearance = em.internalBinaryRead(e, e.uint32(), n, r.appearance); break; case 14: r.guildFolders = eC.internalBinaryRead(e, e.uint32(), n, r.guildFolders); break; case 15: r.favorites = ev.internalBinaryRead(e, e.uint32(), n, r.favorites); break; case 16: r.audioContextSettings = eb.internalBinaryRead(e, e.uint32(), n, r.audioContextSettings); break; case 17: r.communities = ew.internalBinaryRead(e, e.uint32(), n, r.communities); break; case 18: r.broadcast = eH.internalBinaryRead(e, e.uint32(), n, r.broadcast); break; case 19: r.clips = ej.internalBinaryRead(e, e.uint32(), n, r.clips); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.versions && v.Versions.internalBinaryWrite(e.versions, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.inbox && P.internalBinaryWrite(e.inbox, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.guilds && b.internalBinaryWrite(e.guilds, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(), e.userContent && j.internalBinaryWrite(e.userContent, t.tag(4, R.WireType.LengthDelimited).fork(), n).join(), e.voiceAndVideo && Q.internalBinaryWrite(e.voiceAndVideo, t.tag(5, R.WireType.LengthDelimited).fork(), n).join(), e.textAndImages && en.internalBinaryWrite(e.textAndImages, t.tag(6, R.WireType.LengthDelimited).fork(), n).join(), e.notifications && er.internalBinaryWrite(e.notifications, t.tag(7, R.WireType.LengthDelimited).fork(), n).join(), e.privacy && ea.internalBinaryWrite(e.privacy, t.tag(8, R.WireType.LengthDelimited).fork(), n).join(), e.debug && el.internalBinaryWrite(e.debug, t.tag(9, R.WireType.LengthDelimited).fork(), n).join(), e.gameLibrary && ed.internalBinaryWrite(e.gameLibrary, t.tag(10, R.WireType.LengthDelimited).fork(), n).join(), e.status && ec.internalBinaryWrite(e.status, t.tag(11, R.WireType.LengthDelimited).fork(), n).join(), e.localization && ef.internalBinaryWrite(e.localization, t.tag(12, R.WireType.LengthDelimited).fork(), n).join(), e.appearance && em.internalBinaryWrite(e.appearance, t.tag(13, R.WireType.LengthDelimited).fork(), n).join(), e.guildFolders && eC.internalBinaryWrite(e.guildFolders, t.tag(14, R.WireType.LengthDelimited).fork(), n).join(), e.favorites && ev.internalBinaryWrite(e.favorites, t.tag(15, R.WireType.LengthDelimited).fork(), n).join(), e.audioContextSettings && eb.internalBinaryWrite(e.audioContextSettings, t.tag(16, R.WireType.LengthDelimited).fork(), n).join(), e.communities && ew.internalBinaryWrite(e.communities, t.tag(17, R.WireType.LengthDelimited).fork(), n).join(), e.broadcast && eH.internalBinaryWrite(e.broadcast, t.tag(18, R.WireType.LengthDelimited).fork(), n).join(), e.clips && ej.internalBinaryWrite(e.clips, t.tag(19, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.PreloadedUserSettings", [{ no: 1, name: "versions", kind: "message", T: () => v.Versions }, { no: 2, name: "inbox", kind: "message", T: () => P }, { no: 3, name: "guilds", kind: "message", T: () => b }, { no: 4, name: "user_content", kind: "message", T: () => j }, { no: 5, name: "voice_and_video", kind: "message", T: () => Q }, { no: 6, name: "text_and_images", kind: "message", T: () => en }, { no: 7, name: "notifications", kind: "message", T: () => er }, { no: 8, name: "privacy", kind: "message", T: () => ea }, { no: 9, name: "debug", kind: "message", T: () => el }, { no: 10, name: "game_library", kind: "message", T: () => ed }, { no: 11, name: "status", kind: "message", T: () => ec }, { no: 12, name: "localization", kind: "message", T: () => ef }, { no: 13, name: "appearance", kind: "message", T: () => em }, { no: 14, name: "guild_folders", kind: "message", T: () => eC }, { no: 15, name: "favorites", kind: "message", T: () => ev }, { no: 16, name: "audio_context_settings", kind: "message", T: () => eb }, { no: 17, name: "communities", kind: "message", T: () => ew }, { no: 18, name: "broadcast", kind: "message", T: () => eH }, { no: 19, name: "clips", kind: "message", T: () => ej }]) } } let M = new D; class y extends R.MessageType { create(e) { let t = { currentTab: 0, viewedTutorial: !1 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.currentTab = e.int32(); break; case 2: r.viewedTutorial = e.bool(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { 0 !== e.currentTab && t.tag(1, R.WireType.Varint).int32(e.currentTab), !1 !== e.viewedTutorial && t.tag(2, R.WireType.Varint).bool(e.viewedTutorial); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.InboxSettings", [{ no: 1, name: "current_tab", kind: "enum", T: () => ["discord_protos.discord_users.v1.InboxTab", i, "INBOX_TAB_"] }, { no: 2, name: "viewed_tutorial", kind: "scalar", T: 8 }]) } } let P = new y; class U extends R.MessageType { create(e) { let t = { guilds: {} }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (1 === t) this.binaryReadMap1(r.guilds, e, n); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.fixed64().toString(); break; case 2: a = w.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.AllGuildSettings.guilds") } } e[null != s ? s : "0"] = null != a ? a : w.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.guilds)) t.tag(1, R.WireType.LengthDelimited).fork().tag(1, R.WireType.Bit64).fixed64(i), t.tag(2, R.WireType.LengthDelimited).fork(), w.internalBinaryWrite(e.guilds[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.AllGuildSettings", [{ no: 1, name: "guilds", kind: "map", K: 6, V: { kind: "message", T: () => w } }]) } } let b = new U; class G extends R.MessageType { create(e) { let t = { channels: {}, hubProgress: 0, guildOnboardingProgress: 0, dismissedGuildContent: new Uint8Array(0), disableRaidAlertPush: !1, disableRaidAlertNag: !1 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: this.binaryReadMap1(r.channels, e, n); break; case 2: r.hubProgress = e.uint32(); break; case 3: r.guildOnboardingProgress = e.uint32(); break; case 4: r.guildRecentsDismissedAt = L.Timestamp.internalBinaryRead(e, e.uint32(), n, r.guildRecentsDismissedAt); break; case 5: r.dismissedGuildContent = e.bytes(); break; case 6: r.joinSound = ex.internalBinaryRead(e, e.uint32(), n, r.joinSound); break; case 7: r.mobileRedesignChannelListSettings = eh.internalBinaryRead(e, e.uint32(), n, r.mobileRedesignChannelListSettings); break; case 8: r.disableRaidAlertPush = e.bool(); break; case 9: r.disableRaidAlertNag = e.bool(); break; case 10: r.customNotificationSoundConfig = H.internalBinaryRead(e, e.uint32(), n, r.customNotificationSoundConfig); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.fixed64().toString(); break; case 2: a = x.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.GuildSettings.channels") } } e[null != s ? s : "0"] = null != a ? a : x.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.channels)) t.tag(1, R.WireType.LengthDelimited).fork().tag(1, R.WireType.Bit64).fixed64(i), t.tag(2, R.WireType.LengthDelimited).fork(), x.internalBinaryWrite(e.channels[i], t, n), t.join().join(); 0 !== e.hubProgress && t.tag(2, R.WireType.Varint).uint32(e.hubProgress), 0 !== e.guildOnboardingProgress && t.tag(3, R.WireType.Varint).uint32(e.guildOnboardingProgress), e.guildRecentsDismissedAt && L.Timestamp.internalBinaryWrite(e.guildRecentsDismissedAt, t.tag(4, R.WireType.LengthDelimited).fork(), n).join(), e.dismissedGuildContent.length && t.tag(5, R.WireType.LengthDelimited).bytes(e.dismissedGuildContent), e.joinSound && ex.internalBinaryWrite(e.joinSound, t.tag(6, R.WireType.LengthDelimited).fork(), n).join(), e.mobileRedesignChannelListSettings && eh.internalBinaryWrite(e.mobileRedesignChannelListSettings, t.tag(7, R.WireType.LengthDelimited).fork(), n).join(), !1 !== e.disableRaidAlertPush && t.tag(8, R.WireType.Varint).bool(e.disableRaidAlertPush), !1 !== e.disableRaidAlertNag && t.tag(9, R.WireType.Varint).bool(e.disableRaidAlertNag), e.customNotificationSoundConfig && H.internalBinaryWrite(e.customNotificationSoundConfig, t.tag(10, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.GuildSettings", [{ no: 1, name: "channels", kind: "map", K: 6, V: { kind: "message", T: () => x } }, { no: 2, name: "hub_progress", kind: "scalar", T: 13 }, { no: 3, name: "guild_onboarding_progress", kind: "scalar", T: 13 }, { no: 4, name: "guild_recents_dismissed_at", kind: "message", T: () => L.Timestamp }, { no: 5, name: "dismissed_guild_content", kind: "scalar", T: 12 }, { no: 6, name: "join_sound", kind: "message", T: () => ex }, { no: 7, name: "mobile_redesign_channel_list_settings", kind: "message", T: () => eh }, { no: 8, name: "disable_raid_alert_push", kind: "scalar", T: 8 }, { no: 9, name: "disable_raid_alert_nag", kind: "scalar", T: 8 }, { no: 10, name: "custom_notification_sound_config", kind: "message", T: () => H }]) } } let w = new G; class k extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.id = g.UInt64Value.internalBinaryRead(e, e.uint32(), n, r.id); break; case 2: r.name = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.name); break; case 3: r.color = g.UInt64Value.internalBinaryRead(e, e.uint32(), n, r.color); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.id && g.UInt64Value.internalBinaryWrite(e.id, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.name && g.StringValue.internalBinaryWrite(e.name, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.color && g.UInt64Value.internalBinaryWrite(e.color, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ChannelIconEmoji", [{ no: 1, name: "id", kind: "message", T: () => g.UInt64Value }, { no: 2, name: "name", kind: "message", T: () => g.StringValue }, { no: 3, name: "color", kind: "message", T: () => g.UInt64Value }]) } } let B = new k; class V extends R.MessageType { create(e) { let t = { collapsedInInbox: !1 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.collapsedInInbox = e.bool(); break; case 2: r.iconEmoji = B.internalBinaryRead(e, e.uint32(), n, r.iconEmoji); break; case 3: r.customNotificationSoundConfig = H.internalBinaryRead(e, e.uint32(), n, r.customNotificationSoundConfig); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { !1 !== e.collapsedInInbox && t.tag(1, R.WireType.Varint).bool(e.collapsedInInbox), e.iconEmoji && B.internalBinaryWrite(e.iconEmoji, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.customNotificationSoundConfig && H.internalBinaryWrite(e.customNotificationSoundConfig, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ChannelSettings", [{ no: 1, name: "collapsed_in_inbox", kind: "scalar", T: 8 }, { no: 2, name: "icon_emoji", kind: "message", T: () => B }, { no: 3, name: "custom_notification_sound_config", kind: "message", T: () => H }]) } } let x = new V; class F extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (1 === t) r.notificationSoundPackId = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.notificationSoundPackId); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.notificationSoundPackId && g.StringValue.internalBinaryWrite(e.notificationSoundPackId, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.CustomNotificationSoundConfig", [{ no: 1, name: "notification_sound_pack_id", kind: "message", T: () => g.StringValue }]) } } let H = new F; class Y extends R.MessageType { create(e) { let t = { dismissedContents: new Uint8Array(0), lastReceivedChangelogId: "0" }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.dismissedContents = e.bytes(); break; case 2: r.lastDismissedOutboundPromotionStartDate = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.lastDismissedOutboundPromotionStartDate); break; case 3: r.premiumTier0ModalDismissedAt = L.Timestamp.internalBinaryRead(e, e.uint32(), n, r.premiumTier0ModalDismissedAt); break; case 4: r.guildOnboardingUpsellDismissedAt = L.Timestamp.internalBinaryRead(e, e.uint32(), n, r.guildOnboardingUpsellDismissedAt); break; case 5: r.safetyUserSentimentNoticeDismissedAt = L.Timestamp.internalBinaryRead(e, e.uint32(), n, r.safetyUserSentimentNoticeDismissedAt); break; case 6: r.lastReceivedChangelogId = e.fixed64().toString(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.dismissedContents.length && t.tag(1, R.WireType.LengthDelimited).bytes(e.dismissedContents), e.lastDismissedOutboundPromotionStartDate && g.StringValue.internalBinaryWrite(e.lastDismissedOutboundPromotionStartDate, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.premiumTier0ModalDismissedAt && L.Timestamp.internalBinaryWrite(e.premiumTier0ModalDismissedAt, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(), e.guildOnboardingUpsellDismissedAt && L.Timestamp.internalBinaryWrite(e.guildOnboardingUpsellDismissedAt, t.tag(4, R.WireType.LengthDelimited).fork(), n).join(), e.safetyUserSentimentNoticeDismissedAt && L.Timestamp.internalBinaryWrite(e.safetyUserSentimentNoticeDismissedAt, t.tag(5, R.WireType.LengthDelimited).fork(), n).join(), "0" !== e.lastReceivedChangelogId && t.tag(6, R.WireType.Bit64).fixed64(e.lastReceivedChangelogId); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.UserContentSettings", [{ no: 1, name: "dismissed_contents", kind: "scalar", T: 12 }, { no: 2, name: "last_dismissed_outbound_promotion_start_date", kind: "message", T: () => g.StringValue }, { no: 3, name: "premium_tier_0_modal_dismissed_at", kind: "message", T: () => L.Timestamp }, { no: 4, name: "guild_onboarding_upsell_dismissed_at", kind: "message", T: () => L.Timestamp }, { no: 5, name: "safety_user_sentiment_notice_dismissed_at", kind: "message", T: () => L.Timestamp }, { no: 6, name: "last_received_changelog_id", kind: "scalar", T: 6 }]) } } let j = new Y; class W extends R.MessageType { create(e) { let t = { id: "0", assetHash: "" }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.id = e.fixed64().toString(); break; case 2: r.assetHash = e.string(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { "0" !== e.id && t.tag(1, R.WireType.Bit64).fixed64(e.id), "" !== e.assetHash && t.tag(2, R.WireType.LengthDelimited).string(e.assetHash); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.VideoFilterAsset", [{ no: 1, name: "id", kind: "scalar", T: 6 }, { no: 2, name: "asset_hash", kind: "scalar", T: 9 }]) } } let K = new W; class z extends R.MessageType { create(e) { let t = { useBlur: !1 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (1 === t) r.useBlur = e.bool(); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { !1 !== e.useBlur && t.tag(1, R.WireType.Varint).bool(e.useBlur); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.VideoFilterBackgroundBlur", [{ no: 1, name: "use_blur", kind: "scalar", T: 8 }]) } } let Z = new z; class X extends R.MessageType { create(e) { let t = { videoBackgroundFilterDesktop: { oneofKind: void 0 } }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.videoBackgroundFilterDesktop = { oneofKind: "blur", blur: Z.internalBinaryRead(e, e.uint32(), n, r.videoBackgroundFilterDesktop.blur) }; break; case 2: r.videoBackgroundFilterDesktop = { oneofKind: "presetOption", presetOption: e.uint32() }; break; case 3: r.videoBackgroundFilterDesktop = { oneofKind: "customAsset", customAsset: K.internalBinaryRead(e, e.uint32(), n, r.videoBackgroundFilterDesktop.customAsset) }; break; case 5: r.alwaysPreviewVideo = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.alwaysPreviewVideo); break; case 6: r.afkTimeout = g.UInt32Value.internalBinaryRead(e, e.uint32(), n, r.afkTimeout); break; case 7: r.streamNotificationsEnabled = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.streamNotificationsEnabled); break; case 8: r.nativePhoneIntegrationEnabled = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.nativePhoneIntegrationEnabled); break; case 9: r.soundboardSettings = eB.internalBinaryRead(e, e.uint32(), n, r.soundboardSettings); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { "blur" === e.videoBackgroundFilterDesktop.oneofKind && Z.internalBinaryWrite(e.videoBackgroundFilterDesktop.blur, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), "presetOption" === e.videoBackgroundFilterDesktop.oneofKind && t.tag(2, R.WireType.Varint).uint32(e.videoBackgroundFilterDesktop.presetOption), "customAsset" === e.videoBackgroundFilterDesktop.oneofKind && K.internalBinaryWrite(e.videoBackgroundFilterDesktop.customAsset, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(), e.alwaysPreviewVideo && g.BoolValue.internalBinaryWrite(e.alwaysPreviewVideo, t.tag(5, R.WireType.LengthDelimited).fork(), n).join(), e.afkTimeout && g.UInt32Value.internalBinaryWrite(e.afkTimeout, t.tag(6, R.WireType.LengthDelimited).fork(), n).join(), e.streamNotificationsEnabled && g.BoolValue.internalBinaryWrite(e.streamNotificationsEnabled, t.tag(7, R.WireType.LengthDelimited).fork(), n).join(), e.nativePhoneIntegrationEnabled && g.BoolValue.internalBinaryWrite(e.nativePhoneIntegrationEnabled, t.tag(8, R.WireType.LengthDelimited).fork(), n).join(), e.soundboardSettings && eB.internalBinaryWrite(e.soundboardSettings, t.tag(9, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.VoiceAndVideoSettings", [{ no: 1, name: "blur", kind: "message", oneof: "videoBackgroundFilterDesktop", T: () => Z }, { no: 2, name: "preset_option", kind: "scalar", oneof: "videoBackgroundFilterDesktop", T: 13 }, { no: 3, name: "custom_asset", kind: "message", oneof: "videoBackgroundFilterDesktop", T: () => K }, { no: 5, name: "always_preview_video", kind: "message", T: () => g.BoolValue }, { no: 6, name: "afk_timeout", kind: "message", T: () => g.UInt32Value }, { no: 7, name: "stream_notifications_enabled", kind: "message", T: () => g.BoolValue }, { no: 8, name: "native_phone_integration_enabled", kind: "message", T: () => g.BoolValue }, { no: 9, name: "soundboard_settings", kind: "message", T: () => eB }]) } } let Q = new X; class q extends R.MessageType { create(e) { let t = { explicitContentGuilds: 0, explicitContentFriendDm: 0, explicitContentNonFriendDm: 0 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.explicitContentGuilds = e.int32(); break; case 2: r.explicitContentFriendDm = e.int32(); break; case 3: r.explicitContentNonFriendDm = e.int32(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { 0 !== e.explicitContentGuilds && t.tag(1, R.WireType.Varint).int32(e.explicitContentGuilds), 0 !== e.explicitContentFriendDm && t.tag(2, R.WireType.Varint).int32(e.explicitContentFriendDm), 0 !== e.explicitContentNonFriendDm && t.tag(3, R.WireType.Varint).int32(e.explicitContentNonFriendDm); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ExplicitContentSettings", [{ no: 1, name: "explicit_content_guilds", kind: "enum", T: () => ["discord_protos.discord_users.v1.ExplicitContentRedaction", l] }, { no: 2, name: "explicit_content_friend_dm", kind: "enum", T: () => ["discord_protos.discord_users.v1.ExplicitContentRedaction", l] }, { no: 3, name: "explicit_content_non_friend_dm", kind: "enum", T: () => ["discord_protos.discord_users.v1.ExplicitContentRedaction", l] }]) } } let J = new q; class $ extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.profanity = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.profanity); break; case 2: r.sexualContent = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.sexualContent); break; case 3: r.slurs = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.slurs); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.profanity && g.BoolValue.internalBinaryWrite(e.profanity, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.sexualContent && g.BoolValue.internalBinaryWrite(e.sexualContent, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.slurs && g.BoolValue.internalBinaryWrite(e.slurs, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.KeywordFilterSettings", [{ no: 1, name: "profanity", kind: "message", T: () => g.BoolValue }, { no: 2, name: "sexual_content", kind: "message", T: () => g.BoolValue }, { no: 3, name: "slurs", kind: "message", T: () => g.BoolValue }]) } } let ee = new $; class et extends R.MessageType { create(e) { let t = { emojiPickerCollapsedSections: [], stickerPickerCollapsedSections: [], soundboardPickerCollapsedSections: [], dmSpamFilterV2: 0 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.diversitySurrogate = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.diversitySurrogate); break; case 2: r.useRichChatInput = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.useRichChatInput); break; case 3: r.useThreadSidebar = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.useThreadSidebar); break; case 4: r.renderSpoilers = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.renderSpoilers); break; case 5: r.emojiPickerCollapsedSections.push(e.string()); break; case 6: r.stickerPickerCollapsedSections.push(e.string()); break; case 7: r.viewImageDescriptions = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.viewImageDescriptions); break; case 8: r.showCommandSuggestions = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.showCommandSuggestions); break; case 9: r.inlineAttachmentMedia = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.inlineAttachmentMedia); break; case 10: r.inlineEmbedMedia = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.inlineEmbedMedia); break; case 11: r.gifAutoPlay = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.gifAutoPlay); break; case 12: r.renderEmbeds = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.renderEmbeds); break; case 13: r.renderReactions = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.renderReactions); break; case 14: r.animateEmoji = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.animateEmoji); break; case 15: r.animateStickers = g.UInt32Value.internalBinaryRead(e, e.uint32(), n, r.animateStickers); break; case 16: r.enableTtsCommand = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.enableTtsCommand); break; case 17: r.messageDisplayCompact = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.messageDisplayCompact); break; case 19: r.explicitContentFilter = g.UInt32Value.internalBinaryRead(e, e.uint32(), n, r.explicitContentFilter); break; case 20: r.viewNsfwGuilds = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.viewNsfwGuilds); break; case 21: r.convertEmoticons = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.convertEmoticons); break; case 22: r.expressionSuggestionsEnabled = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.expressionSuggestionsEnabled); break; case 23: r.viewNsfwCommands = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.viewNsfwCommands); break; case 24: r.useLegacyChatInput = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.useLegacyChatInput); break; case 25: r.soundboardPickerCollapsedSections.push(e.string()); break; case 26: r.dmSpamFilter = g.UInt32Value.internalBinaryRead(e, e.uint32(), n, r.dmSpamFilter); break; case 27: r.dmSpamFilterV2 = e.int32(); break; case 28: r.includeStickersInAutocomplete = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.includeStickersInAutocomplete); break; case 29: r.explicitContentSettings = J.internalBinaryRead(e, e.uint32(), n, r.explicitContentSettings); break; case 30: r.keywordFilterSettings = ee.internalBinaryRead(e, e.uint32(), n, r.keywordFilterSettings); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.diversitySurrogate && g.StringValue.internalBinaryWrite(e.diversitySurrogate, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.useRichChatInput && g.BoolValue.internalBinaryWrite(e.useRichChatInput, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.useThreadSidebar && g.BoolValue.internalBinaryWrite(e.useThreadSidebar, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(), e.renderSpoilers && g.StringValue.internalBinaryWrite(e.renderSpoilers, t.tag(4, R.WireType.LengthDelimited).fork(), n).join(); for (let n = 0; n < e.emojiPickerCollapsedSections.length; n++) t.tag(5, R.WireType.LengthDelimited).string(e.emojiPickerCollapsedSections[n]); for (let n = 0; n < e.stickerPickerCollapsedSections.length; n++) t.tag(6, R.WireType.LengthDelimited).string(e.stickerPickerCollapsedSections[n]); e.viewImageDescriptions && g.BoolValue.internalBinaryWrite(e.viewImageDescriptions, t.tag(7, R.WireType.LengthDelimited).fork(), n).join(), e.showCommandSuggestions && g.BoolValue.internalBinaryWrite(e.showCommandSuggestions, t.tag(8, R.WireType.LengthDelimited).fork(), n).join(), e.inlineAttachmentMedia && g.BoolValue.internalBinaryWrite(e.inlineAttachmentMedia, t.tag(9, R.WireType.LengthDelimited).fork(), n).join(), e.inlineEmbedMedia && g.BoolValue.internalBinaryWrite(e.inlineEmbedMedia, t.tag(10, R.WireType.LengthDelimited).fork(), n).join(), e.gifAutoPlay && g.BoolValue.internalBinaryWrite(e.gifAutoPlay, t.tag(11, R.WireType.LengthDelimited).fork(), n).join(), e.renderEmbeds && g.BoolValue.internalBinaryWrite(e.renderEmbeds, t.tag(12, R.WireType.LengthDelimited).fork(), n).join(), e.renderReactions && g.BoolValue.internalBinaryWrite(e.renderReactions, t.tag(13, R.WireType.LengthDelimited).fork(), n).join(), e.animateEmoji && g.BoolValue.internalBinaryWrite(e.animateEmoji, t.tag(14, R.WireType.LengthDelimited).fork(), n).join(), e.animateStickers && g.UInt32Value.internalBinaryWrite(e.animateStickers, t.tag(15, R.WireType.LengthDelimited).fork(), n).join(), e.enableTtsCommand && g.BoolValue.internalBinaryWrite(e.enableTtsCommand, t.tag(16, R.WireType.LengthDelimited).fork(), n).join(), e.messageDisplayCompact && g.BoolValue.internalBinaryWrite(e.messageDisplayCompact, t.tag(17, R.WireType.LengthDelimited).fork(), n).join(), e.explicitContentFilter && g.UInt32Value.internalBinaryWrite(e.explicitContentFilter, t.tag(19, R.WireType.LengthDelimited).fork(), n).join(), e.viewNsfwGuilds && g.BoolValue.internalBinaryWrite(e.viewNsfwGuilds, t.tag(20, R.WireType.LengthDelimited).fork(), n).join(), e.convertEmoticons && g.BoolValue.internalBinaryWrite(e.convertEmoticons, t.tag(21, R.WireType.LengthDelimited).fork(), n).join(), e.expressionSuggestionsEnabled && g.BoolValue.internalBinaryWrite(e.expressionSuggestionsEnabled, t.tag(22, R.WireType.LengthDelimited).fork(), n).join(), e.viewNsfwCommands && g.BoolValue.internalBinaryWrite(e.viewNsfwCommands, t.tag(23, R.WireType.LengthDelimited).fork(), n).join(), e.useLegacyChatInput && g.BoolValue.internalBinaryWrite(e.useLegacyChatInput, t.tag(24, R.WireType.LengthDelimited).fork(), n).join(); for (let n = 0; n < e.soundboardPickerCollapsedSections.length; n++) t.tag(25, R.WireType.LengthDelimited).string(e.soundboardPickerCollapsedSections[n]); e.dmSpamFilter && g.UInt32Value.internalBinaryWrite(e.dmSpamFilter, t.tag(26, R.WireType.LengthDelimited).fork(), n).join(), 0 !== e.dmSpamFilterV2 && t.tag(27, R.WireType.Varint).int32(e.dmSpamFilterV2), e.includeStickersInAutocomplete && g.BoolValue.internalBinaryWrite(e.includeStickersInAutocomplete, t.tag(28, R.WireType.LengthDelimited).fork(), n).join(), e.explicitContentSettings && J.internalBinaryWrite(e.explicitContentSettings, t.tag(29, R.WireType.LengthDelimited).fork(), n).join(), e.keywordFilterSettings && ee.internalBinaryWrite(e.keywordFilterSettings, t.tag(30, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.TextAndImagesSettings", [{ no: 1, name: "diversity_surrogate", kind: "message", T: () => g.StringValue }, { no: 2, name: "use_rich_chat_input", kind: "message", T: () => g.BoolValue }, { no: 3, name: "use_thread_sidebar", kind: "message", T: () => g.BoolValue }, { no: 4, name: "render_spoilers", kind: "message", T: () => g.StringValue }, { no: 5, name: "emoji_picker_collapsed_sections", kind: "scalar", repeat: 2, T: 9 }, { no: 6, name: "sticker_picker_collapsed_sections", kind: "scalar", repeat: 2, T: 9 }, { no: 7, name: "view_image_descriptions", kind: "message", T: () => g.BoolValue }, { no: 8, name: "show_command_suggestions", kind: "message", T: () => g.BoolValue }, { no: 9, name: "inline_attachment_media", kind: "message", T: () => g.BoolValue }, { no: 10, name: "inline_embed_media", kind: "message", T: () => g.BoolValue }, { no: 11, name: "gif_auto_play", kind: "message", T: () => g.BoolValue }, { no: 12, name: "render_embeds", kind: "message", T: () => g.BoolValue }, { no: 13, name: "render_reactions", kind: "message", T: () => g.BoolValue }, { no: 14, name: "animate_emoji", kind: "message", T: () => g.BoolValue }, { no: 15, name: "animate_stickers", kind: "message", T: () => g.UInt32Value }, { no: 16, name: "enable_tts_command", kind: "message", T: () => g.BoolValue }, { no: 17, name: "message_display_compact", kind: "message", T: () => g.BoolValue }, { no: 19, name: "explicit_content_filter", kind: "message", T: () => g.UInt32Value }, { no: 20, name: "view_nsfw_guilds", kind: "message", T: () => g.BoolValue }, { no: 21, name: "convert_emoticons", kind: "message", T: () => g.BoolValue }, { no: 22, name: "expression_suggestions_enabled", kind: "message", T: () => g.BoolValue }, { no: 23, name: "view_nsfw_commands", kind: "message", T: () => g.BoolValue }, { no: 24, name: "use_legacy_chat_input", kind: "message", T: () => g.BoolValue }, { no: 25, name: "soundboard_picker_collapsed_sections", kind: "scalar", repeat: 2, T: 9 }, { no: 26, name: "dm_spam_filter", kind: "message", T: () => g.UInt32Value }, { no: 27, name: "dm_spam_filter_v2", kind: "enum", T: () => ["discord_protos.discord_users.v1.DmSpamFilterV2", u] }, { no: 28, name: "include_stickers_in_autocomplete", kind: "message", T: () => g.BoolValue }, { no: 29, name: "explicit_content_settings", kind: "message", T: () => J }, { no: 30, name: "keyword_filter_settings", kind: "message", T: () => ee }]) } } let en = new et; class ei extends R.MessageType { create(e) { let t = { notificationCenterAckedBeforeId: "0", focusModeExpiresAtMs: "0" }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.showInAppNotifications = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.showInAppNotifications); break; case 2: r.notifyFriendsOnGoLive = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.notifyFriendsOnGoLive); break; case 3: r.notificationCenterAckedBeforeId = e.fixed64().toString(); break; case 4: r.enableBurstReactionNotifications = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.enableBurstReactionNotifications); break; case 5: r.quietMode = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.quietMode); break; case 6: r.focusModeExpiresAtMs = e.fixed64().toString(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.showInAppNotifications && g.BoolValue.internalBinaryWrite(e.showInAppNotifications, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.notifyFriendsOnGoLive && g.BoolValue.internalBinaryWrite(e.notifyFriendsOnGoLive, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), "0" !== e.notificationCenterAckedBeforeId && t.tag(3, R.WireType.Bit64).fixed64(e.notificationCenterAckedBeforeId), e.enableBurstReactionNotifications && g.BoolValue.internalBinaryWrite(e.enableBurstReactionNotifications, t.tag(4, R.WireType.LengthDelimited).fork(), n).join(), e.quietMode && g.BoolValue.internalBinaryWrite(e.quietMode, t.tag(5, R.WireType.LengthDelimited).fork(), n).join(), "0" !== e.focusModeExpiresAtMs && t.tag(6, R.WireType.Bit64).fixed64(e.focusModeExpiresAtMs); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.NotificationSettings", [{ no: 1, name: "show_in_app_notifications", kind: "message", T: () => g.BoolValue }, { no: 2, name: "notify_friends_on_go_live", kind: "message", T: () => g.BoolValue }, { no: 3, name: "notification_center_acked_before_id", kind: "scalar", T: 6 }, { no: 4, name: "enable_burst_reaction_notifications", kind: "message", T: () => g.BoolValue }, { no: 5, name: "quiet_mode", kind: "message", T: () => g.BoolValue }, { no: 6, name: "focus_mode_expires_at_ms", kind: "scalar", T: 6 }]) } } let er = new ei; class es extends R.MessageType { create(e) { let t = { restrictedGuildIds: [], defaultGuildsRestricted: !1, allowAccessibilityDetection: !1, activityRestrictedGuildIds: [], defaultGuildsActivityRestricted: 0, activityJoiningRestrictedGuildIds: [], messageRequestRestrictedGuildIds: [] }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.allowActivityPartyPrivacyFriends = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.allowActivityPartyPrivacyFriends); break; case 2: r.allowActivityPartyPrivacyVoiceChannel = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.allowActivityPartyPrivacyVoiceChannel); break; case 3: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.restrictedGuildIds.push(e.fixed64().toString()); else r.restrictedGuildIds.push(e.fixed64().toString()); break; case 4: r.defaultGuildsRestricted = e.bool(); break; case 7: r.allowAccessibilityDetection = e.bool(); break; case 8: r.detectPlatformAccounts = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.detectPlatformAccounts); break; case 9: r.passwordless = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.passwordless); break; case 10: r.contactSyncEnabled = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.contactSyncEnabled); break; case 11: r.friendSourceFlags = g.UInt32Value.internalBinaryRead(e, e.uint32(), n, r.friendSourceFlags); break; case 12: r.friendDiscoveryFlags = g.UInt32Value.internalBinaryRead(e, e.uint32(), n, r.friendDiscoveryFlags); break; case 13: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.activityRestrictedGuildIds.push(e.fixed64().toString()); else r.activityRestrictedGuildIds.push(e.fixed64().toString()); break; case 14: r.defaultGuildsActivityRestricted = e.int32(); break; case 15: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.activityJoiningRestrictedGuildIds.push(e.fixed64().toString()); else r.activityJoiningRestrictedGuildIds.push(e.fixed64().toString()); break; case 16: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.messageRequestRestrictedGuildIds.push(e.fixed64().toString()); else r.messageRequestRestrictedGuildIds.push(e.fixed64().toString()); break; case 17: r.defaultMessageRequestRestricted = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.defaultMessageRequestRestricted); break; case 18: r.dropsOptedOut = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.dropsOptedOut); break; case 19: r.nonSpamRetrainingOptIn = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.nonSpamRetrainingOptIn); break; case 20: r.familyCenterEnabled = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.familyCenterEnabled); break; case 21: r.familyCenterEnabledV2 = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.familyCenterEnabledV2); break; case 22: r.hideLegacyUsername = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.hideLegacyUsername); break; case 23: r.inappropriateConversationWarnings = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.inappropriateConversationWarnings); break; case 24: r.recentGamesEnabled = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.recentGamesEnabled); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { if (e.allowActivityPartyPrivacyFriends && g.BoolValue.internalBinaryWrite(e.allowActivityPartyPrivacyFriends, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.allowActivityPartyPrivacyVoiceChannel && g.BoolValue.internalBinaryWrite(e.allowActivityPartyPrivacyVoiceChannel, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.restrictedGuildIds.length) { t.tag(3, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.restrictedGuildIds.length; n++) t.fixed64(e.restrictedGuildIds[n]); t.join() } if (!1 !== e.defaultGuildsRestricted && t.tag(4, R.WireType.Varint).bool(e.defaultGuildsRestricted), !1 !== e.allowAccessibilityDetection && t.tag(7, R.WireType.Varint).bool(e.allowAccessibilityDetection), e.detectPlatformAccounts && g.BoolValue.internalBinaryWrite(e.detectPlatformAccounts, t.tag(8, R.WireType.LengthDelimited).fork(), n).join(), e.passwordless && g.BoolValue.internalBinaryWrite(e.passwordless, t.tag(9, R.WireType.LengthDelimited).fork(), n).join(), e.contactSyncEnabled && g.BoolValue.internalBinaryWrite(e.contactSyncEnabled, t.tag(10, R.WireType.LengthDelimited).fork(), n).join(), e.friendSourceFlags && g.UInt32Value.internalBinaryWrite(e.friendSourceFlags, t.tag(11, R.WireType.LengthDelimited).fork(), n).join(), e.friendDiscoveryFlags && g.UInt32Value.internalBinaryWrite(e.friendDiscoveryFlags, t.tag(12, R.WireType.LengthDelimited).fork(), n).join(), e.activityRestrictedGuildIds.length) { t.tag(13, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.activityRestrictedGuildIds.length; n++) t.fixed64(e.activityRestrictedGuildIds[n]); t.join() } if (0 !== e.defaultGuildsActivityRestricted && t.tag(14, R.WireType.Varint).int32(e.defaultGuildsActivityRestricted), e.activityJoiningRestrictedGuildIds.length) { t.tag(15, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.activityJoiningRestrictedGuildIds.length; n++) t.fixed64(e.activityJoiningRestrictedGuildIds[n]); t.join() } if (e.messageRequestRestrictedGuildIds.length) { t.tag(16, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.messageRequestRestrictedGuildIds.length; n++) t.fixed64(e.messageRequestRestrictedGuildIds[n]); t.join() } e.defaultMessageRequestRestricted && g.BoolValue.internalBinaryWrite(e.defaultMessageRequestRestricted, t.tag(17, R.WireType.LengthDelimited).fork(), n).join(), e.dropsOptedOut && g.BoolValue.internalBinaryWrite(e.dropsOptedOut, t.tag(18, R.WireType.LengthDelimited).fork(), n).join(), e.nonSpamRetrainingOptIn && g.BoolValue.internalBinaryWrite(e.nonSpamRetrainingOptIn, t.tag(19, R.WireType.LengthDelimited).fork(), n).join(), e.familyCenterEnabled && g.BoolValue.internalBinaryWrite(e.familyCenterEnabled, t.tag(20, R.WireType.LengthDelimited).fork(), n).join(), e.familyCenterEnabledV2 && g.BoolValue.internalBinaryWrite(e.familyCenterEnabledV2, t.tag(21, R.WireType.LengthDelimited).fork(), n).join(), e.hideLegacyUsername && g.BoolValue.internalBinaryWrite(e.hideLegacyUsername, t.tag(22, R.WireType.LengthDelimited).fork(), n).join(), e.inappropriateConversationWarnings && g.BoolValue.internalBinaryWrite(e.inappropriateConversationWarnings, t.tag(23, R.WireType.LengthDelimited).fork(), n).join(), e.recentGamesEnabled && g.BoolValue.internalBinaryWrite(e.recentGamesEnabled, t.tag(24, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.PrivacySettings", [{ no: 1, name: "allow_activity_party_privacy_friends", kind: "message", T: () => g.BoolValue }, { no: 2, name: "allow_activity_party_privacy_voice_channel", kind: "message", T: () => g.BoolValue }, { no: 3, name: "restricted_guild_ids", kind: "scalar", repeat: 1, T: 6 }, { no: 4, name: "default_guilds_restricted", kind: "scalar", T: 8 }, { no: 7, name: "allow_accessibility_detection", kind: "scalar", T: 8 }, { no: 8, name: "detect_platform_accounts", kind: "message", T: () => g.BoolValue }, { no: 9, name: "passwordless", kind: "message", T: () => g.BoolValue }, { no: 10, name: "contact_sync_enabled", kind: "message", T: () => g.BoolValue }, { no: 11, name: "friend_source_flags", kind: "message", T: () => g.UInt32Value }, { no: 12, name: "friend_discovery_flags", kind: "message", T: () => g.UInt32Value }, { no: 13, name: "activity_restricted_guild_ids", kind: "scalar", repeat: 1, T: 6 }, { no: 14, name: "default_guilds_activity_restricted", kind: "enum", T: () => ["discord_protos.discord_users.v1.GuildActivityStatusRestrictionDefault", d] }, { no: 15, name: "activity_joining_restricted_guild_ids", kind: "scalar", repeat: 1, T: 6 }, { no: 16, name: "message_request_restricted_guild_ids", kind: "scalar", repeat: 1, T: 6 }, { no: 17, name: "default_message_request_restricted", kind: "message", T: () => g.BoolValue }, { no: 18, name: "drops_opted_out", kind: "message", T: () => g.BoolValue }, { no: 19, name: "non_spam_retraining_opt_in", kind: "message", T: () => g.BoolValue }, { no: 20, name: "family_center_enabled", kind: "message", T: () => g.BoolValue }, { no: 21, name: "family_center_enabled_v2", kind: "message", T: () => g.BoolValue }, { no: 22, name: "hide_legacy_username", kind: "message", T: () => g.BoolValue }, { no: 23, name: "inappropriate_conversation_warnings", kind: "message", T: () => g.BoolValue }, { no: 24, name: "recent_games_enabled", kind: "message", T: () => g.BoolValue }]) } } let ea = new es; class eo extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (1 === t) r.rtcPanelShowVoiceStates = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.rtcPanelShowVoiceStates); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.rtcPanelShowVoiceStates && g.BoolValue.internalBinaryWrite(e.rtcPanelShowVoiceStates, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.DebugSettings", [{ no: 1, name: "rtc_panel_show_voice_states", kind: "message", T: () => g.BoolValue }]) } } let el = new eo; class eu extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.installShortcutDesktop = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.installShortcutDesktop); break; case 2: r.installShortcutStartMenu = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.installShortcutStartMenu); break; case 3: r.disableGamesTab = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.disableGamesTab); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.installShortcutDesktop && g.BoolValue.internalBinaryWrite(e.installShortcutDesktop, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.installShortcutStartMenu && g.BoolValue.internalBinaryWrite(e.installShortcutStartMenu, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.disableGamesTab && g.BoolValue.internalBinaryWrite(e.disableGamesTab, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.GameLibrarySettings", [{ no: 1, name: "install_shortcut_desktop", kind: "message", T: () => g.BoolValue }, { no: 2, name: "install_shortcut_start_menu", kind: "message", T: () => g.BoolValue }, { no: 3, name: "disable_games_tab", kind: "message", T: () => g.BoolValue }]) } } let ed = new eu; class e_ extends R.MessageType { create(e) { let t = { statusExpiresAtMs: "0" }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.status = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.status); break; case 2: r.customStatus = eI.internalBinaryRead(e, e.uint32(), n, r.customStatus); break; case 3: r.showCurrentGame = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.showCurrentGame); break; case 4: r.statusExpiresAtMs = e.fixed64().toString(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.status && g.StringValue.internalBinaryWrite(e.status, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.customStatus && eI.internalBinaryWrite(e.customStatus, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.showCurrentGame && g.BoolValue.internalBinaryWrite(e.showCurrentGame, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(), "0" !== e.statusExpiresAtMs && t.tag(4, R.WireType.Bit64).fixed64(e.statusExpiresAtMs); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.StatusSettings", [{ no: 1, name: "status", kind: "message", T: () => g.StringValue }, { no: 2, name: "custom_status", kind: "message", T: () => eI }, { no: 3, name: "show_current_game", kind: "message", T: () => g.BoolValue }, { no: 4, name: "status_expires_at_ms", kind: "scalar", T: 6 }]) } } let ec = new e_; class eE extends R.MessageType { create(e) { let t = { text: "", emojiId: "0", emojiName: "", expiresAtMs: "0" }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.text = e.string(); break; case 2: r.emojiId = e.fixed64().toString(); break; case 3: r.emojiName = e.string(); break; case 4: r.expiresAtMs = e.fixed64().toString(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { "" !== e.text && t.tag(1, R.WireType.LengthDelimited).string(e.text), "0" !== e.emojiId && t.tag(2, R.WireType.Bit64).fixed64(e.emojiId), "" !== e.emojiName && t.tag(3, R.WireType.LengthDelimited).string(e.emojiName), "0" !== e.expiresAtMs && t.tag(4, R.WireType.Bit64).fixed64(e.expiresAtMs); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.CustomStatus", [{ no: 1, name: "text", kind: "scalar", T: 9 }, { no: 2, name: "emoji_id", kind: "scalar", T: 6 }, { no: 3, name: "emoji_name", kind: "scalar", T: 9 }, { no: 4, name: "expires_at_ms", kind: "scalar", T: 6 }]) } } let eI = new eE; class eT extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.locale = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.locale); break; case 2: r.timezoneOffset = g.Int32Value.internalBinaryRead(e, e.uint32(), n, r.timezoneOffset); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.locale && g.StringValue.internalBinaryWrite(e.locale, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.timezoneOffset && g.Int32Value.internalBinaryWrite(e.timezoneOffset, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.LocalizationSettings", [{ no: 1, name: "locale", kind: "message", T: () => g.StringValue }, { no: 2, name: "timezone_offset", kind: "message", T: () => g.Int32Value }]) } } let ef = new eT; class eS extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.layout = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.layout); break; case 2: r.messagePreviews = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.messagePreviews); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.layout && g.StringValue.internalBinaryWrite(e.layout, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.messagePreviews && g.StringValue.internalBinaryWrite(e.messagePreviews, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ChannelListSettings", [{ no: 1, name: "layout", kind: "message", T: () => g.StringValue }, { no: 2, name: "message_previews", kind: "message", T: () => g.StringValue }]) } } let eh = new eS; class eA extends R.MessageType { create(e) { let t = { theme: 0, developerMode: !1, mobileRedesignDisabled: !1 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.theme = e.int32(); break; case 2: r.developerMode = e.bool(); break; case 3: r.clientThemeSettings = ep.internalBinaryRead(e, e.uint32(), n, r.clientThemeSettings); break; case 4: r.mobileRedesignDisabled = e.bool(); break; case 6: r.channelListLayout = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.channelListLayout); break; case 7: r.messagePreviews = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.messagePreviews); break; case 8: r.searchResultExactCountEnabled = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.searchResultExactCountEnabled); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { 0 !== e.theme && t.tag(1, R.WireType.Varint).int32(e.theme), !1 !== e.developerMode && t.tag(2, R.WireType.Varint).bool(e.developerMode), e.clientThemeSettings && ep.internalBinaryWrite(e.clientThemeSettings, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(), !1 !== e.mobileRedesignDisabled && t.tag(4, R.WireType.Varint).bool(e.mobileRedesignDisabled), e.channelListLayout && g.StringValue.internalBinaryWrite(e.channelListLayout, t.tag(6, R.WireType.LengthDelimited).fork(), n).join(), e.messagePreviews && g.StringValue.internalBinaryWrite(e.messagePreviews, t.tag(7, R.WireType.LengthDelimited).fork(), n).join(), e.searchResultExactCountEnabled && g.BoolValue.internalBinaryWrite(e.searchResultExactCountEnabled, t.tag(8, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.AppearanceSettings", [{ no: 1, name: "theme", kind: "enum", T: () => ["discord_protos.discord_users.v1.Theme", _] }, { no: 2, name: "developer_mode", kind: "scalar", T: 8 }, { no: 3, name: "client_theme_settings", kind: "message", T: () => ep }, { no: 4, name: "mobile_redesign_disabled", kind: "scalar", T: 8 }, { no: 6, name: "channel_list_layout", kind: "message", T: () => g.StringValue }, { no: 7, name: "message_previews", kind: "message", T: () => g.StringValue }, { no: 8, name: "search_result_exact_count_enabled", kind: "message", T: () => g.BoolValue }]) } } let em = new eA; class eN extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (2 === t) r.backgroundGradientPresetId = g.UInt32Value.internalBinaryRead(e, e.uint32(), n, r.backgroundGradientPresetId); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.backgroundGradientPresetId && g.UInt32Value.internalBinaryWrite(e.backgroundGradientPresetId, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ClientThemeSettings", [{ no: 2, name: "background_gradient_preset_id", kind: "message", T: () => g.UInt32Value }]) } } let ep = new eN; class eO extends R.MessageType { create(e) { let t = { folders: [], guildPositions: [] }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.folders.push(eg.internalBinaryRead(e, e.uint32(), n)); break; case 2: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.guildPositions.push(e.fixed64().toString()); else r.guildPositions.push(e.fixed64().toString()); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { for (let i = 0; i < e.folders.length; i++) eg.internalBinaryWrite(e.folders[i], t.tag(1, R.WireType.LengthDelimited).fork(), n).join(); if (e.guildPositions.length) { t.tag(2, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.guildPositions.length; n++) t.fixed64(e.guildPositions[n]); t.join() } let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.GuildFolders", [{ no: 1, name: "folders", kind: "message", repeat: 1, T: () => eg }, { no: 2, name: "guild_positions", kind: "scalar", repeat: 1, T: 6 }]) } } let eC = new eO; class eR extends R.MessageType { create(e) { let t = { guildIds: [] }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.guildIds.push(e.fixed64().toString()); else r.guildIds.push(e.fixed64().toString()); break; case 2: r.id = g.Int64Value.internalBinaryRead(e, e.uint32(), n, r.id); break; case 3: r.name = g.StringValue.internalBinaryRead(e, e.uint32(), n, r.name); break; case 4: r.color = g.UInt64Value.internalBinaryRead(e, e.uint32(), n, r.color); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { if (e.guildIds.length) { t.tag(1, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.guildIds.length; n++) t.fixed64(e.guildIds[n]); t.join() } e.id && g.Int64Value.internalBinaryWrite(e.id, t.tag(2, R.WireType.LengthDelimited).fork(), n).join(), e.name && g.StringValue.internalBinaryWrite(e.name, t.tag(3, R.WireType.LengthDelimited).fork(), n).join(), e.color && g.UInt64Value.internalBinaryWrite(e.color, t.tag(4, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.GuildFolder", [{ no: 1, name: "guild_ids", kind: "scalar", repeat: 1, T: 6 }, { no: 2, name: "id", kind: "message", T: () => g.Int64Value }, { no: 3, name: "name", kind: "message", T: () => g.StringValue }, { no: 4, name: "color", kind: "message", T: () => g.UInt64Value }]) } } let eg = new eR; class eL extends R.MessageType { create(e) { let t = { favoriteChannels: {}, muted: !1 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: this.binaryReadMap1(r.favoriteChannels, e, n); break; case 2: r.muted = e.bool(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.fixed64().toString(); break; case 2: a = eM.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.Favorites.favorite_channels") } } e[null != s ? s : "0"] = null != a ? a : eM.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.favoriteChannels)) t.tag(1, R.WireType.LengthDelimited).fork().tag(1, R.WireType.Bit64).fixed64(i), t.tag(2, R.WireType.LengthDelimited).fork(), eM.internalBinaryWrite(e.favoriteChannels[i], t, n), t.join().join(); !1 !== e.muted && t.tag(2, R.WireType.Varint).bool(e.muted); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.Favorites", [{ no: 1, name: "favorite_channels", kind: "map", K: 6, V: { kind: "message", T: () => eM } }, { no: 2, name: "muted", kind: "scalar", T: 8 }]) } } let ev = new eL; class eD extends R.MessageType { create(e) { let t = { nickname: "", type: 0, position: 0, parentId: "0" }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.nickname = e.string(); break; case 2: r.type = e.int32(); break; case 3: r.position = e.uint32(); break; case 4: r.parentId = e.fixed64().toString(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { "" !== e.nickname && t.tag(1, R.WireType.LengthDelimited).string(e.nickname), 0 !== e.type && t.tag(2, R.WireType.Varint).int32(e.type), 0 !== e.position && t.tag(3, R.WireType.Varint).uint32(e.position), "0" !== e.parentId && t.tag(4, R.WireType.Bit64).fixed64(e.parentId); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.FavoriteChannel", [{ no: 1, name: "nickname", kind: "scalar", T: 9 }, { no: 2, name: "type", kind: "enum", T: () => ["discord_protos.discord_users.v1.FavoriteChannelType", E] }, { no: 3, name: "position", kind: "scalar", T: 13 }, { no: 4, name: "parent_id", kind: "scalar", T: 6 }]) } } let eM = new eD; class ey extends R.MessageType { create(e) { let t = { muted: !1, volume: 0, modifiedAt: "0", soundboardMuted: !1 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.muted = e.bool(); break; case 2: r.volume = e.float(); break; case 3: r.modifiedAt = e.fixed64().toString(); break; case 4: r.soundboardMuted = e.bool(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { !1 !== e.muted && t.tag(1, R.WireType.Varint).bool(e.muted), 0 !== e.volume && t.tag(2, R.WireType.Bit32).float(e.volume), "0" !== e.modifiedAt && t.tag(3, R.WireType.Bit64).fixed64(e.modifiedAt), !1 !== e.soundboardMuted && t.tag(4, R.WireType.Varint).bool(e.soundboardMuted); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.AudioContextSetting", [{ no: 1, name: "muted", kind: "scalar", T: 8 }, { no: 2, name: "volume", kind: "scalar", T: 2 }, { no: 3, name: "modified_at", kind: "scalar", T: 6 }, { no: 4, name: "soundboard_muted", kind: "scalar", T: 8 }]) } } let eP = new ey; class eU extends R.MessageType { create(e) { let t = { user: {}, stream: {} }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: this.binaryReadMap1(r.user, e, n); break; case 2: this.binaryReadMap2(r.stream, e, n); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } binaryReadMap1(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.fixed64().toString(); break; case 2: a = eP.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.AudioSettings.user") } } e[null != s ? s : "0"] = null != a ? a : eP.create() } binaryReadMap2(e, t, n) { let i = t.uint32(), r = t.pos + i, s, a; for (; t.pos < r;) { let [e, i] = t.tag(); switch (e) { case 1: s = t.fixed64().toString(); break; case 2: a = eP.internalBinaryRead(t, t.uint32(), n); break; default: throw new globalThis.Error("unknown map entry field for field discord_protos.discord_users.v1.AudioSettings.stream") } } e[null != s ? s : "0"] = null != a ? a : eP.create() } internalBinaryWrite(e, t, n) { for (let i of Object.keys(e.user)) t.tag(1, R.WireType.LengthDelimited).fork().tag(1, R.WireType.Bit64).fixed64(i), t.tag(2, R.WireType.LengthDelimited).fork(), eP.internalBinaryWrite(e.user[i], t, n), t.join().join(); for (let i of Object.keys(e.stream)) t.tag(2, R.WireType.LengthDelimited).fork().tag(1, R.WireType.Bit64).fixed64(i), t.tag(2, R.WireType.LengthDelimited).fork(), eP.internalBinaryWrite(e.stream[i], t, n), t.join().join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.AudioSettings", [{ no: 1, name: "user", kind: "map", K: 6, V: { kind: "message", T: () => eP } }, { no: 2, name: "stream", kind: "map", K: 6, V: { kind: "message", T: () => eP } }]) } } let eb = new eU; class eG extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (1 === t) r.disableHomeAutoNav = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.disableHomeAutoNav); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.disableHomeAutoNav && g.BoolValue.internalBinaryWrite(e.disableHomeAutoNav, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.CommunitiesSettings", [{ no: 1, name: "disable_home_auto_nav", kind: "message", T: () => g.BoolValue }]) } } let ew = new eG; class ek extends R.MessageType { create(e) { let t = { volume: 0 }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (1 === t) r.volume = e.float(); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { 0 !== e.volume && t.tag(1, R.WireType.Bit32).float(e.volume); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.SoundboardSettings", [{ no: 1, name: "volume", kind: "scalar", T: 2 }]) } } let eB = new ek; class eV extends R.MessageType { create(e) { let t = { soundId: "0", guildId: "0" }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.soundId = e.fixed64().toString(); break; case 2: r.guildId = e.fixed64().toString(); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { "0" !== e.soundId && t.tag(1, R.WireType.Bit64).fixed64(e.soundId), "0" !== e.guildId && t.tag(2, R.WireType.Bit64).fixed64(e.guildId); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.CustomCallSound", [{ no: 1, name: "sound_id", kind: "scalar", T: 6 }, { no: 2, name: "guild_id", kind: "scalar", T: 6 }]) } } let ex = new eV; class eF extends R.MessageType { create(e) { let t = { allowedGuildIds: [], allowedUserIds: [] }; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); switch (t) { case 1: r.allowFriends = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.allowFriends); break; case 2: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.allowedGuildIds.push(e.fixed64().toString()); else r.allowedGuildIds.push(e.fixed64().toString()); break; case 3: if (i === R.WireType.LengthDelimited) for (let t = e.int32() + e.pos; e.pos < t;) r.allowedUserIds.push(e.fixed64().toString()); else r.allowedUserIds.push(e.fixed64().toString()); break; case 4: r.autoBroadcast = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.autoBroadcast); break; default: let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { if (e.allowFriends && g.BoolValue.internalBinaryWrite(e.allowFriends, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(), e.allowedGuildIds.length) { t.tag(2, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.allowedGuildIds.length; n++) t.fixed64(e.allowedGuildIds[n]); t.join() } if (e.allowedUserIds.length) { t.tag(3, R.WireType.LengthDelimited).fork(); for (let n = 0; n < e.allowedUserIds.length; n++) t.fixed64(e.allowedUserIds[n]); t.join() } e.autoBroadcast && g.BoolValue.internalBinaryWrite(e.autoBroadcast, t.tag(4, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.BroadcastSettings", [{ no: 1, name: "allow_friends", kind: "message", T: () => g.BoolValue }, { no: 2, name: "allowed_guild_ids", kind: "scalar", repeat: 1, T: 6 }, { no: 3, name: "allowed_user_ids", kind: "scalar", repeat: 1, T: 6 }, { no: 4, name: "auto_broadcast", kind: "message", T: () => g.BoolValue }]) } } let eH = new eF; class eY extends R.MessageType { create(e) { let t = {}; return globalThis.Object.defineProperty(t, R.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, R.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, i) { let r = null != i ? i : this.create(), s = e.pos + t; for (; e.pos < s;) { let [t, i] = e.tag(); if (1 === t) r.allowVoiceRecording = g.BoolValue.internalBinaryRead(e, e.uint32(), n, r.allowVoiceRecording); else { let s = n.readUnknownField; if ("throw" === s) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(i, ") for ").concat(this.typeName)); let a = e.skip(i); !1 !== s && (!0 === s ? R.UnknownFieldHandler.onRead : s)(this.typeName, r, t, i, a) } } return r } internalBinaryWrite(e, t, n) { e.allowVoiceRecording && g.BoolValue.internalBinaryWrite(e.allowVoiceRecording, t.tag(1, R.WireType.LengthDelimited).fork(), n).join(); let i = n.writeUnknownFields; return !1 !== i && (!0 == i ? R.UnknownFieldHandler.onWrite : i)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.ClipsSettings", [{ no: 1, name: "allow_voice_recording", kind: "message", T: () => g.BoolValue }]) } } let ej = new eY }, 397696: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Versions: function() { return s } }), n("47120"), n("411104"); var i = n("578012"); class r extends i.MessageType { create(e) { let t = { clientVersion: 0, serverVersion: 0, dataVersion: 0 }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); switch (t) { case 1: s.clientVersion = e.uint32(); break; case 2: s.serverVersion = e.uint32(); break; case 3: s.dataVersion = e.uint32(); break; default: let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { 0 !== e.clientVersion && t.tag(1, i.WireType.Varint).uint32(e.clientVersion), 0 !== e.serverVersion && t.tag(2, i.WireType.Varint).uint32(e.serverVersion), 0 !== e.dataVersion && t.tag(3, i.WireType.Varint).uint32(e.dataVersion); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("discord_protos.discord_users.v1.Versions", [{ no: 1, name: "client_version", kind: "scalar", T: 13 }, { no: 2, name: "server_version", kind: "scalar", T: 13 }, { no: 3, name: "data_version", kind: "scalar", T: 13 }]) } } let s = new r }, 835913: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Timestamp: function() { return s } }), n("411104"), n("757143"), n("47120"); var i = n("578012"); class r extends i.MessageType { now() { let e = this.create(), t = Date.now(); return e.seconds = i.PbLong.from(Math.floor(t / 1e3)).toString(), e.nanos = t % 1e3 * 1e6, e } toDate(e) { return new Date(1e3 * i.PbLong.from(e.seconds).toNumber() + Math.ceil(e.nanos / 1e6)) } fromDate(e) { let t = this.create(), n = e.getTime(); return t.seconds = i.PbLong.from(Math.floor(n / 1e3)).toString(), t.nanos = n % 1e3 * 1e6, t } internalJsonWrite(e, t) { let n = 1e3 * i.PbLong.from(e.seconds).toNumber(); if (n < Date.parse("0001-01-01T00:00:00Z") || n > Date.parse("9999-12-31T23:59:59Z")) throw Error("Unable to encode Timestamp to JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive."); if (e.nanos < 0) throw Error("Unable to encode invalid Timestamp to JSON. Nanos must not be negative."); let r = "Z"; if (e.nanos > 0) { let t = (e.nanos + 1e9).toString().substring(1); r = "000000" === t.substring(3) ? "." + t.substring(0, 3) + "Z" : "000" === t.substring(6) ? "." + t.substring(0, 6) + "Z" : "." + t + "Z" } return new Date(n).toISOString().replace(".000Z", r) } internalJsonRead(e, t, n) { if ("string" != typeof e) throw Error("Unable to parse Timestamp from JSON " + (0, i.typeofJsonValue)(e) + "."); let r = e.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/); if (!r) throw Error("Unable to parse Timestamp from JSON. Invalid format."); let s = Date.parse(r[1] + "-" + r[2] + "-" + r[3] + "T" + r[4] + ":" + r[5] + ":" + r[6] + (r[8] ? r[8] : "Z")); if (Number.isNaN(s)) throw Error("Unable to parse Timestamp from JSON. Invalid value."); if (s < Date.parse("0001-01-01T00:00:00Z") || s > Date.parse("9999-12-31T23:59:59Z")) throw new globalThis.Error("Unable to parse Timestamp from JSON. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive."); return !n && (n = this.create()), n.seconds = i.PbLong.from(s / 1e3).toString(), n.nanos = 0, r[7] && (n.nanos = parseInt("1" + r[7] + "0".repeat(9 - r[7].length)) - 1e9), n } create(e) { let t = { seconds: "0", nanos: 0 }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); switch (t) { case 1: s.seconds = e.int64().toString(); break; case 2: s.nanos = e.int32(); break; default: let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { "0" !== e.seconds && t.tag(1, i.WireType.Varint).int64(e.seconds), 0 !== e.nanos && t.tag(2, i.WireType.Varint).int32(e.nanos); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.Timestamp", [{ no: 1, name: "seconds", kind: "scalar", T: 3 }, { no: 2, name: "nanos", kind: "scalar", T: 5 }]) } } let s = new r }, 381499: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BoolValue: function() { return T }, Int32Value: function() { return _ }, Int64Value: function() { return o }, StringValue: function() { return S }, UInt32Value: function() { return E }, UInt64Value: function() { return u } }), n("47120"), n("411104"), n("518263"), n("970173"), n("520712"), n("268111"), n("941497"), n("32026"), n("480839"), n("744285"), n("492257"), n("873817"); var i = n("578012"); class r extends i.MessageType { internalJsonWrite(e, t) { return this.refJsonWriter.scalar(2, e.value, "value", !1, !0) } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, 1, void 0, "value"), n } create(e) { let t = { value: 0 }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.double(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { 0 !== e.value && t.tag(1, i.WireType.Bit64).double(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.DoubleValue", [{ no: 1, name: "value", kind: "scalar", T: 1 }]) } } new r; class s extends i.MessageType { internalJsonWrite(e, t) { return this.refJsonWriter.scalar(1, e.value, "value", !1, !0) } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, 1, void 0, "value"), n } create(e) { let t = { value: 0 }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.float(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { 0 !== e.value && t.tag(1, i.WireType.Bit32).float(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.FloatValue", [{ no: 1, name: "value", kind: "scalar", T: 2 }]) } } new s; class a extends i.MessageType { internalJsonWrite(e, t) { return this.refJsonWriter.scalar(i.ScalarType.INT64, e.value, "value", !1, !0) } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, i.ScalarType.INT64, i.LongType.STRING, "value"), n } create(e) { let t = { value: "0" }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.int64().toString(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { "0" !== e.value && t.tag(1, i.WireType.Varint).int64(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.Int64Value", [{ no: 1, name: "value", kind: "scalar", T: 3 }]) } } let o = new a; class l extends i.MessageType { internalJsonWrite(e, t) { return this.refJsonWriter.scalar(i.ScalarType.UINT64, e.value, "value", !1, !0) } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, i.ScalarType.UINT64, i.LongType.STRING, "value"), n } create(e) { let t = { value: "0" }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.uint64().toString(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { "0" !== e.value && t.tag(1, i.WireType.Varint).uint64(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.UInt64Value", [{ no: 1, name: "value", kind: "scalar", T: 4 }]) } } let u = new l; class d extends i.MessageType { internalJsonWrite(e, t) { return this.refJsonWriter.scalar(5, e.value, "value", !1, !0) } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, 5, void 0, "value"), n } create(e) { let t = { value: 0 }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.int32(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { 0 !== e.value && t.tag(1, i.WireType.Varint).int32(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.Int32Value", [{ no: 1, name: "value", kind: "scalar", T: 5 }]) } } let _ = new d; class c extends i.MessageType { internalJsonWrite(e, t) { return this.refJsonWriter.scalar(13, e.value, "value", !1, !0) } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, 13, void 0, "value"), n } create(e) { let t = { value: 0 }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.uint32(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { 0 !== e.value && t.tag(1, i.WireType.Varint).uint32(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.UInt32Value", [{ no: 1, name: "value", kind: "scalar", T: 13 }]) } } let E = new c; class I extends i.MessageType { internalJsonWrite(e, t) { return e.value } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, 8, void 0, "value"), n } create(e) { let t = { value: !1 }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.bool(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { !1 !== e.value && t.tag(1, i.WireType.Varint).bool(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.BoolValue", [{ no: 1, name: "value", kind: "scalar", T: 8 }]) } } let T = new I; class f extends i.MessageType { internalJsonWrite(e, t) { return e.value } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, 9, void 0, "value"), n } create(e) { let t = { value: "" }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.string(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { "" !== e.value && t.tag(1, i.WireType.LengthDelimited).string(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.StringValue", [{ no: 1, name: "value", kind: "scalar", T: 9 }]) } } let S = new f; class h extends i.MessageType { internalJsonWrite(e, t) { return this.refJsonWriter.scalar(12, e.value, "value", !1, !0) } internalJsonRead(e, t, n) { return !n && (n = this.create()), n.value = this.refJsonReader.scalar(e, 12, void 0, "value"), n } create(e) { let t = { value: new Uint8Array(0) }; return globalThis.Object.defineProperty(t, i.MESSAGE_TYPE, { enumerable: !1, value: this }), void 0 !== e && (0, i.reflectionMergePartial)(this, t, e), t } internalBinaryRead(e, t, n, r) { let s = null != r ? r : this.create(), a = e.pos + t; for (; e.pos < a;) { let [t, r] = e.tag(); if (1 === t) s.value = e.bytes(); else { let a = n.readUnknownField; if ("throw" === a) throw new globalThis.Error("Unknown field ".concat(t, " (wire type ").concat(r, ") for ").concat(this.typeName)); let o = e.skip(r); !1 !== a && (!0 === a ? i.UnknownFieldHandler.onRead : a)(this.typeName, s, t, r, o) } } return s } internalBinaryWrite(e, t, n) { e.value.length && t.tag(1, i.WireType.LengthDelimited).bytes(e.value); let r = n.writeUnknownFields; return !1 !== r && (!0 == r ? i.UnknownFieldHandler.onWrite : r)(this.typeName, e, t), t } constructor() { super("google.protobuf.BytesValue", [{ no: 1, name: "value", kind: "scalar", T: 12 }]) } } new h }, 759174: function(e, t, n) { "use strict"; n.r(t), n.d(t, { SecondaryIndexMap: function() { return l } }), n("47120"); var i = n("740436"), r = n.n(i); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } function a(e, t, n, i) { null != t && e.splice(r()(e, t, i), 1), null != n && e.splice(r()(e, n, i), 0, n) } let o = []; class l { get version() { return this._version } indexes() { let e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; if (!e && this.dirty) { let e = {}; for (let [t, n] of Object.entries(this.valueIndexes)) e[t] = [...n]; this.valueIndexes = e, this.dirty = !1 } return this.valueIndexes } keys() { return this.valueMap.keys() } values(e) { var t; let n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return null == e ? this.valueArray : null !== (t = this.indexes(n)[e]) && void 0 !== t ? t : o } size(e) { var t, n; return null == e ? this.valueArray.length : null !== (n = null === (t = this.valueIndexes[e]) || void 0 === t ? void 0 : t.length) && void 0 !== n ? n : 0 } clear() { this.valueMap.clear(), this.valueArray = [], this.valueIndexes = {} } has(e) { return this.valueMap.has(e) } get(e) { return this.valueMap.get(e) } set(e, t) { let n = this.get(e); return !(null == n && null == t || null != n && null != t && this.isEqual(n, t)) && (null != t ? this.valueMap.set(e, t) : this.valueMap.delete(e), a(this.valueArray, n, t, this.sortBy), null != n && this.indexBy(n).forEach(e => a(this.getIndex(e), n, null, this.sortBy)), null != t && this.indexBy(t).forEach(e => a(this.getIndex(e), null, t, this.sortBy)), this.dirty = !0, this._version++, !0) } delete(e) { return this.set(e, null) } getIndex(e) { let t = this.valueIndexes[e]; return null == t && (t = [], this.valueIndexes[e] = t), t } constructor(e, t, n = (e, t) => e === t) { s(this, "indexBy", void 0), s(this, "sortBy", void 0), s(this, "isEqual", void 0), s(this, "valueMap", new Map), s(this, "valueArray", []), s(this, "valueIndexes", {}), s(this, "dirty", !1), s(this, "_version", 0), this.indexBy = e, this.sortBy = t, this.isEqual = n } } }, 902704: function(e, t, n) { "use strict"; function i(e, t, n, i) { if (e === t) return !0; if (void 0 === e || void 0 === t) return e === t; let r = Object.keys(e), s = Object.keys(t); if (r.length !== s.length) return null != i && i("shallowEqual: unequal key lengths ".concat(r.length, " !=== ").concat(s.length)), !1; let a = []; for (let s = 0; s < r.length; s++) { let o = r[s]; if (e[o] !== t[o] && (null == n || !n.includes(o))) { if (null == i) return !1; a.push(o) } } return null != i && a.length > 0 && i("shallowEqual: unequal keys: ".concat(a.join(", "))), 0 === a.length } function r(e, t) { return null != t && e.length === t.length && !e.some((e, n) => t[n] !== e) } n.r(t), n.d(t, { areArraysShallowEqual: function() { return r }, default: function() { return i } }), n("653041") }, 298444: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { SessionStorage: function() { return i } }), i = n("701117").impl }, 433517: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { Storage: function() { return i } }), i = n("37082").impl }, 701117: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { impl: function() { return a }, sessionStorageTest: function() { return s } }); var r = n("37082"); try { i = window.sessionStorage } catch (e) {} try { delete window.sessionStorage } catch (e) {} function s() { let e = "test"; try { return i.setItem(e, e), i.removeItem(e), !0 } catch (e) { return !1 } } let a = s() ? new class e { get(e, t) { let n = i.getItem(e); if (null != n) try { n = JSON.parse(n) } catch (e) { n = t } else n = t; return n } set(e, t) { i.setItem(e, JSON.stringify(t)) } remove(e) { i.removeItem(e) } clear() { i.clear() } } : new r.ObjectStorage }, 37082: function(e, t, n) { "use strict"; let i; n.r(t), n.d(t, { ObjectStorage: function() { return r }, impl: function() { return s } }); try { i = window.localStorage } catch (e) {} try { delete window.localStorage } catch (e) {} class r { get(e, t) { return this.storage.hasOwnProperty(e) ? this.storage[e] : t } set(e, t) { this.storage[e] = t } remove(e) { delete this.storage[e] } clear() { this.storage = {} } stringify() { return JSON.stringify(this.storage) } asyncGetRaw(e, t) { return Promise.resolve(i.getItem(e)) } setRaw(e, t) { i.setItem(e, t) } getAfterRefresh(e) { return Promise.resolve(this.get(e)) } constructor() { var e, t, n; e = this, n = void 0, (t = "storage") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, this.storage = {} } } let s = ! function() { let e = "test"; try { return i.setItem(e, e), i.removeItem(e), !0 } catch (e) { return !1 } }() ? new r : new class e { get(e, t) { let n = i.getItem(e); if (null != n) try { n = JSON.parse(n) } catch (e) { n = t } else n = t; return n } set(e, t) { i.setItem(e, JSON.stringify(t)) } remove(e) { i.removeItem(e) } clear() { i.clear() } stringify() { return JSON.stringify(i || {}) } asyncGetRaw(e, t) { return Promise.resolve(i.getItem(e)) } setRaw(e, t) { i.setItem(e, t) } getAfterRefresh(e) { return Promise.resolve(this.get(e)) } } }, 379649: function(e, t, n) { "use strict"; n.r(t), n.d(t, { StopWatch: function() { return l }, TimeStampProducer: function() { return a }, now: function() { return s }, sleep: function() { return u } }), n("411104"), n("368387"); var i = n("643191"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let s = () => Math.floor(i.timeOrigin + i.performance.now()), a = new class { now() { return s() } }; class o { isGreaterThan(e) { return this.milliseconds > e.milliseconds } isGreaterOrEqualTo(e) { return this.milliseconds >= e.milliseconds } constructor(e, t, n, i) { r(this, "milliseconds", 0), r(this, "asMilliseconds", () => this.milliseconds), r(this, "asSeconds", () => this.milliseconds / 1e3), r(this, "asMinutes", () => this.milliseconds / 1e3 / 60), r(this, "asHours", () => this.milliseconds / 1e3 / 60 / 60), r(this, "add", e => o.fromMilliseconds(this.milliseconds + e.milliseconds)), r(this, "subtract", e => o.fromMilliseconds(this.milliseconds - e.milliseconds)), r(this, "subtractOrZero", e => o.fromMilliseconds(Math.max(this.milliseconds - e.milliseconds, 0))), this.milliseconds += i || 0, this.milliseconds += 1e3 * (n || 0), this.milliseconds += 6e4 * (t || 0), this.milliseconds += 36e5 * (e || 0) } } r(o, "fromMilliseconds", e => new o(0, 0, 0, e)), r(o, "fromSeconds", e => new o(0, 0, e)), r(o, "fromMinutes", e => new o(0, e)), r(o, "fromHours", e => new o(e)); class l { start() { null == this.startTime && (this.startTime = this.timestampProducer.now()) } restart() { this.startTime = this.timestampProducer.now() } reset() { this.startTime = void 0, this.timePassed = 0 } stop() { null != this.startTime && (this.timePassed += this.timestampProducer.now() - this.startTime, this.startTime = void 0) } toggle(e) { e !== this.isRunning() && (e ? this.start() : this.stop()) } elapsed() { if (null == this.startTime) return o.fromMilliseconds(this.timePassed); let e = this.timestampProducer.now() - this.startTime; return o.fromMilliseconds(this.timePassed + e) } isRunning() { return null != this.startTime } static startNew() { let e = new l; return e.start(), e } constructor(e = a) { r(this, "timestampProducer", void 0), r(this, "startTime", void 0), r(this, "timePassed", void 0), this.timestampProducer = e, this.startTime = void 0, this.timePassed = 0 } } function u(e) { let t = "number" == typeof e ? e : e.asMilliseconds(); return new Promise(e => { setTimeout(() => e(), t) }) } }, 846519: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { DelayedCall: function() { return s }, Interval: function() { return a }, Timeout: function() { return r }, timeoutPromise: function() { return o } }); class r { start(e, t) { let n = !(arguments.length > 2) || void 0 === arguments[2] || arguments[2]; (!this.isStarted() || n) && (this.stop(), this._ref = window.setTimeout(() => { this._ref = null, t() }, e)) } stop() { null != this._ref && (clearTimeout(this._ref), this._ref = null) } isStarted() { return null != this._ref } constructor() { i(this, "_ref", void 0) } } class s { set(e) { return this._delay = e, this } delay() { let e = !(arguments.length > 0) || void 0 === arguments[0] || arguments[0]; this._timeout.start(this._delay, this._handler, e) } cancel() { this._timeout.stop() } isDelayed() { return this._timeout.isStarted() } constructor(e, t) { i(this, "_timeout", void 0), i(this, "_delay", void 0), i(this, "_handler", void 0), this._delay = e, this._handler = t, this._timeout = new r } } class a { start(e, t) { this.stop(), this._ref = window.setInterval(t, e) } stop() { null != this._ref && (clearInterval(this._ref), this._ref = null) } isStarted() { return null != this._ref } constructor() { i(this, "_ref", void 0) } } function o(e) { return new Promise(t => { setTimeout(() => t(), e) }) } }, 387117: function(e, t, n) { "use strict"; n.r(t), n.d(t, { _private: function() { return i } }); let i = { Modules: { chat: { RESIZE_HANDLE_WIDTH: 8 } } } }, 316792: function(e, t, n) { "use strict"; n.r(t), n.d(t, { fontsToPreload: function() { return i } }); let i = ["ggsans-400-normalitalic", "ggsans-700-bold", "ggsans-700-bolditalic", "notosans-400-normalitalic", "notosans-700-bold", "notosans-700-bolditalic"] }, 692547: function(e, t, n) { "use strict"; n.r(t), n("757143"); var i = n("688619"), r = n.n(i), s = n("595182"), a = n.n(s), o = n("402903"), l = n.n(o), u = n("190558"), d = n("387117"), _ = n("949180"), c = n("777910"), E = n("897710"); let { Themes: I } = n("15202")._private, { SemanticColors: T, RawColors: f } = u._private, { Shadows: S } = c._private, { Spacing: h } = E._private, { Modules: A } = d._private, m = l()(f, e => r()(e)), N = { themes: I, modules: A, colors: l()(T, (e, t) => ({ css: R(t), resolve(t) { let n = e[t.theme], i = n.raw, r = n.opacity; if (1 === r) return N.unsafe_rawColors[i].resolve(t); { let e = m[i]; return 0 !== e.alpha() && 1 !== r && (e = e.alpha(r)), p(e, t.saturation) } } })), unsafe_rawColors: l()(f, (e, t) => { let n = m[t]; return { css: R(t), resolve: e => p(n, e.saturation) } }), shadows: l()(S, (e, t) => ({ css: R(t), resolve: t => ({ boxShadow: e[t.theme].boxShadow, filter: e[t.theme].filter, nativeStyles: e[t.theme].nativeStyles }) })), radii: _.Radius, spacing: l()(h, e => "".concat(e, "px")) }; function p(e, t) { return { spring() { let n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return O(e, t, n).hex("rgba") }, hsl() { let n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return O(e, t, n).css("hsl") }, hex() { let n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; return O(e, t, n).hex() }, int() { let n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, i = O(e, t, n), r = i.num(); return 1 !== i.alpha() ? r << 8 | Math.round(255 * i.alpha()) : r } } } function O(e, t, n) { var i; let r = a()(null !== (i = n.opacity) && void 0 !== i ? i : 1, 0, 1), s = e; return 1 !== t && (s = s.set("hsl.s", s.get("hsl.s") * t)), 1 !== r && (s = s.alpha(s.alpha() * r)), s } function C(e) { return e.toLowerCase().replace(/_/g, "-") } function R(e, t) { let n = null != t ? C(t) : null, i = C(e); return "var(--".concat([n, i].filter(Boolean).join("-"), ")") } t.default = N }, 830483: function(e, t, n) { "use strict"; n.r(t), n.d(t, { getChildMapping: function() { return r }, mergeChildMappings: function() { return s } }), n("653041"); var i = n("470079"); function r(e) { let t = {}; if (e) { var n; null === (n = i.Children.map(e, e => e)) || void 0 === n || n.forEach(e => { let n = e.key; null != n && (t[n] = e) }) } return t } function s() { let e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; function i(e) { return n.hasOwnProperty(e) ? n[e] : t[e] } let r = {}, s = []; for (let e in t) n.hasOwnProperty(e) ? s.length && (r[e] = s, s = []) : s.push(e); let a = {}; for (let t in n) { if (r.hasOwnProperty(t)) for (e = 0; e < r[t].length; e++) { let n = r[t][e]; a[r[t][e]] = i(n) } a[t] = i(t) } for (e = 0; e < s.length; e++) a[s[e]] = i(s[e]); return a } }, 215569: function(e, t, n) { "use strict"; n.r(t), n.d(t, { TransitionGroup: function() { return o } }), n("653041"), n("47120"); var i, r = n("470079"), s = n("830483"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } class o extends(i = r.Component) { static getDerivedStateFromProps(e, t) { let { children: n, firstRender: i } = t, r = (0, s.getChildMapping)(e.children); return { children: i ? r : (0, s.mergeChildMappings)(n, r), firstRender: !1 } } componentDidMount() { this._isMounted = !0; let { children: e } = this.state; if (this.props.transitionAppear) for (let t in e) e[t] && this.performAppear(t) } componentWillUnmount() { this._isMounted = !1, this._keyChildMapping = {}, this.state.children = {} } componentDidUpdate(e, t) { if (e !== this.props) { let e = (0, s.getChildMapping)(this.props.children), n = t.children; if (this.props.transitionEnter ? this._enqueueTransitions(e, n, this._keysToEnter) : this._keysToEnter.length && (this._keysToEnter = []), this.props.transitionLeave) this._enqueueTransitions(n, e, this._keysToLeave); else { let t = []; this._enqueueTransitions(n, e, t); let i = (0, s.mergeChildMappings)(n, e); for (let e = 0, n = t.length; e < n; e++) delete i[t[e]]; this._isMounted && this.setState({ children: i }), this._keysToLeave.length && (this._keysToLeave = []) } } if (this._keysToEnter.length) { let e = this._keysToEnter; this._keysToEnter = [], e.forEach(this.performEnter, this) } if (this._keysToLeave.length) { let e = this._keysToLeave; this._keysToLeave = [], e.forEach(this.performLeave, this) } } _enqueueTransitions(e, t, n) { for (let i in e) { let r = t && t.hasOwnProperty(i); e[i] && !r && !this._currentlyTransitioningKeys.has(i) && n.push(i) } } _perform(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; this._currentlyTransitioningKeys.add(e); let r = () => this._handleDonePerform(e, n, i), s = this._keyChildMapping[e]; null != s && null != s[t] ? s[t](r) : r() } _handleDonePerform(e, t) { let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2], i = this._keyChildMapping[e]; null != i && null != i[t] && i[t](), this._currentlyTransitioningKeys.delete(e); let r = (0, s.getChildMapping)(this.props.children); n ? null != r && r.hasOwnProperty(e) ? this.performEnter(e) : this.setState(t => { let { children: n } = t, { [e]: i, ...r } = n; return { children: r } }) : (null == r || !r.hasOwnProperty(e)) && this.performLeave(e) } performAppear(e) { this._perform(e, "componentWillAppear", "componentDidAppear") } performEnter(e) { this._perform(e, "componentWillEnter", "componentDidEnter") } performLeave(e) { this._perform(e, "componentWillLeave", "componentDidLeave", !0) } render() { let { childFactory: e, component: t } = this.props, { children: n } = this.state, i = []; for (let t in n) { let s = n[t]; null != s && r.isValidElement(s) && i.push(r.cloneElement(null == e ? s : e(s), { ref: e => this.addChildRef(t, e), key: t })) } let s = { ...this.props }; return Object.keys(o.defaultProps).forEach(e => delete s[e]), r.createElement(t, s, i) } constructor(e) { super(e), a(this, "_currentlyTransitioningKeys", void 0), a(this, "_keysToEnter", void 0), a(this, "_keysToLeave", void 0), a(this, "_isMounted", void 0), a(this, "_keyChildMapping", {}), a(this, "addChildRef", (e, t) => { this._keyChildMapping[e] = t }), this.state = { children: (0, s.getChildMapping)(e.children), firstRender: !0 }, this._currentlyTransitioningKeys = new Set, this._keysToEnter = [], this._keysToLeave = [], this._isMounted = !1 } } a(o, "defaultProps", { component: "span", transitionAppear: !0, transitionLeave: !0, transitionEnter: !0, childFactory: null }) }, 283693: function(e, t, n) { "use strict"; function i(e) { return e } function r(e, t) { return e.hasOwnProperty(t) } function s(e, t) { return Object.setPrototypeOf(e, t.prototype) } n.r(t), n.d(t, { dangerouslyCast: function() { return s }, exact: function() { return i }, hasOwnProperty: function() { return r } }) }, 324404: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VisibilityObserver: function() { return o } }), n("47120"); var i = n("699581"), r = n("374470"); function s(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let a = { root: null, rootMargin: "0px", threshold: .5 }; class o { isVisible(e) { return null == this._observer || this._visibleComponents.has(e) } observe(e) { let t = this._observer; if (null == t) return; this.unobserve(e); let n = (0, i.findDOMNode)(e); (0, r.isElement)(n, HTMLElement) && (this._nodes.set(n, e), this._components.set(e, n), t.observe(n)) } unobserve(e) { let t = this._observer; if (null == t) return; let n = this._components.get(e); null != n && (this._nodes.delete(n), this._components.delete(e), this._visibleComponents.delete(e), t.unobserve(n)) } constructor(e = a) { s(this, "_observer", void 0), s(this, "_options", void 0), s(this, "_nodes", new WeakMap), s(this, "_components", new WeakMap), s(this, "_visibleComponents", new WeakSet), s(this, "_handleEntries", e => { e.forEach(e => { let t; if (null != e.isIntersecting) t = e.isIntersecting; else { let { threshold: n } = this._options; t = null == n ? e.intersectionRatio > 0 : Array.isArray(n) ? n.some(t => e.intersectionRatio > t) : e.intersectionRatio > n } let n = this._nodes.get(e.target); if (null != n) { let e = !1; t ? !this._visibleComponents.has(n) && (this._visibleComponents.add(n), e = !0) : this._visibleComponents.has(n) && (this._visibleComponents.delete(n), e = !0), e && n.forceUpdate() } }) }), this._options = e, null != window.IntersectionObserver && (this._observer = new window.IntersectionObserver(this._handleEntries, e)) } } }, 558985: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VisibilitySensor: function() { return _ } }), n("47120"), n("411104"); var i, r = n("470079"), s = n("153832"), a = n("324404"); function o(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let l = (0, s.v4)(), u = new Map, d = new Map; class _ extends(i = r.Component) { componentDidMount() { if (this.props.active) { let e = this.getVisibilityObserver(); e.observe(this), this.isVisible = e.isVisible(this), this.props.onChange(this.isVisible) } } componentDidUpdate(e) { let t = this.getVisibilityObserver(), n = t.isVisible(this); this.props.active && n !== this.isVisible && this.props.onChange(n), !e.active && this.props.active ? t.observe(this) : e.active && !this.props.active && t.unobserve(this), this.isVisible = n } componentWillUnmount() { this.getVisibilityObserver().unobserve(this) } getVisibilityObserverId() { let { rootMargin: e, threshold: t } = this.props; return "".concat(this.elementId, " ").concat(e, " ").concat(t) } getVisibilityObserver() { let e = this.getVisibilityObserverId(), t = d.get(e); if (!t) throw Error("Visibility sensor with id ".concat(e, " not found.")); return t } render() { return r.Children.only(this.props.children) } constructor(e) { super(e), o(this, "elementId", void 0), o(this, "isVisible", !1); let { root: t, rootMargin: n, threshold: i } = e; t ? u.has(t) ? this.elementId = u.get(t) || "" : u.set(t, (0, s.v4)()) : this.elementId = l; let r = this.getVisibilityObserverId(); !d.has(r) && d.set(r, new a.VisibilityObserver({ root: t, rootMargin: n, threshold: i })) } } o(_, "defaultProps", { active: !0, children: r.createElement("span"), root: null, rootMargin: "0px 0px 0px 0px", threshold: [0, Number.MIN_VALUE] }) }, 622535: function(e, t, n) { "use strict"; n.r(t), n.d(t, { VisibilityObserver: function() { return i.VisibilityObserver }, VisibilitySensor: function() { return r.VisibilitySensor } }), n("858685"); var i = n("324404"), r = n("558985") }, 956067: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n("733860"), n("653041"); let r = null == n.g.__getTotalRequireTime ? () => 0 : () => n.g.__getTotalRequireTime(), s = "undefined" != typeof performance; t.default = new class e { get isTracing() { return !!s && !!this.isTracing_ && (!(Date.now() > this.endTime_) || (this.isTracing_ = !1, !1)) } get endTime() { return this.endTime_ } set endTime(e) { this.endTime_ = e, this.isTracing_ = !0 } resumeTracing() { !this.isTracing && (this.logGroups.unshift({ index: this.logGroups.length, timestamp: Date.now(), logs: [], nativeLogs: [] }), this.logs = this.logGroups[0].logs), this.endTime = Date.now() + 1e4 } mark(e, t, n) { this.isTracing && (this.logs.push({ emoji: e, prefix: "".concat(this.prefix), log: t, delta: n, timestamp: Date.now() }), this.addImportLogDetail()) } markAndLog(e, t, n, i) { e.log(n), this.isTracing && (this.logs.push({ emoji: t, prefix: this.prefix, log: n, delta: i, timestamp: Date.now() }), this.addImportLogDetail()) } addImportLogDetail() { let e = r(); e - this.lastImportDuration > 25 && (this.addDetail("JS Imports", Math.ceil(e) + "ms"), this.lastImportDuration = e) } markWithDelta(e, t) { let n = this.logs[this.logs.length - 1]; this.mark(e, t, null != n && null != n.timestamp ? Date.now() - n.timestamp : void 0) } markAt(e, t, n) { var i, r; if (!this.isTracing) return; let s = 0; for (; s < this.logs.length; s++) { let { timestamp: e } = this.logs[s]; if (null != e && e > n) break } this.logs.splice(s, 0, { emoji: e, log: t, timestamp: n, prefix: null !== (r = null === (i = this.logs[s]) || void 0 === i ? void 0 : i.prefix) && void 0 !== r ? r : "" }) } addDetail(e, t) { this.isTracing && this.logs.push({ emoji: this.logs[this.logs.length - 1].emoji, prefix: this.prefix, log: " ↪ ".concat(e, " ").concat(t) }) } time(e, t, n) { if (!this.isTracing) return n(); let i = this.prefix; this.mark(e, "Start ".concat(t)), this.prefix += "| "; let r = Date.now(), s = n(), a = Date.now() - r; return this.prefix = i, this.mark(e, "Finish ".concat(t), a), s } async timeAsync(e, t, n) { if (!this.isTracing) return n(); this.mark(e, "Start ".concat(t)); let i = Date.now(), r = await n(), s = Date.now() - i; return this.mark(e, "Finish ".concat(t), s), r } setServerTrace(e) { this.logGroups[0].serverTrace = e } constructor() { i(this, "isTracing_", !0), i(this, "endTime_", Date.now() + 15e3), i(this, "lastImportDuration", 0), i(this, "logGroups", [{ index: 0, timestamp: Date.now(), logs: [], nativeLogs: [] }]), i(this, "logs", this.logGroups[0].logs), i(this, "prefix", "") } } }, 217986: function(e, t, n) { "use strict"; n.r(t), t.default = [{ name: "Afghanistan", alpha2: "AF", phoneCountryCode: "+93", phoneCountryCodes: ["+93"] }, { name: "Aland Islands", alpha2: "AX", phoneCountryCode: "+358", phoneCountryCodes: ["+358"] }, { name: "Albania", alpha2: "AL", phoneCountryCode: "+355", phoneCountryCodes: ["+355"] }, { name: "Algeria", alpha2: "DZ", phoneCountryCode: "+213", phoneCountryCodes: ["+213"] }, { name: "American Samoa", alpha2: "AS", phoneCountryCode: "+1 684", phoneCountryCodes: ["+1 684"] }, { name: "Andorra", alpha2: "AD", phoneCountryCode: "+376", phoneCountryCodes: ["+376"] }, { name: "Angola", alpha2: "AO", phoneCountryCode: "+244", phoneCountryCodes: ["+244"] }, { name: "Anguilla", alpha2: "AI", phoneCountryCode: "+1 264", phoneCountryCodes: ["+1 264"] }, { name: "Antarctica", alpha2: "AQ", phoneCountryCode: "+672", phoneCountryCodes: ["+672"] }, { name: "Antigua and Barbuda", alpha2: "AG", phoneCountryCode: "+1 268", phoneCountryCodes: ["+1 268"] }, { name: "Argentina", alpha2: "AR", phoneCountryCode: "+54", phoneCountryCodes: ["+54"], localeForICU: "es-AR", currencyCode: "ars" }, { name: "Armenia", alpha2: "AM", phoneCountryCode: "+374", phoneCountryCodes: ["+374"] }, { name: "Aruba", alpha2: "AW", phoneCountryCode: "+297", phoneCountryCodes: ["+297"] }, { name: "Ascension", alpha2: "AC", phoneCountryCode: "+247", phoneCountryCodes: ["+247"] }, { name: "Australia", alpha2: "AU", phoneCountryCode: "+61", phoneCountryCodes: ["+61"], localeForICU: "en-AU", currencyCode: "aud" }, { name: "Austria", alpha2: "AT", phoneCountryCode: "+43", phoneCountryCodes: ["+43"] }, { name: "Azerbaijan", alpha2: "AZ", phoneCountryCode: "+994", phoneCountryCodes: ["+994"] }, { name: "Bahamas", alpha2: "BS", phoneCountryCode: "+1 242", phoneCountryCodes: ["+1 242"] }, { name: "Bahrain", alpha2: "BH", phoneCountryCode: "+973", phoneCountryCodes: ["+973"] }, { name: "Bangladesh", alpha2: "BD", phoneCountryCode: "+880", phoneCountryCodes: ["+880"] }, { name: "Barbados", alpha2: "BB", phoneCountryCode: "+1 246", phoneCountryCodes: ["+1 246"] }, { name: "Belarus", alpha2: "BY", phoneCountryCode: "+375", phoneCountryCodes: ["+375"] }, { name: "Belgium", alpha2: "BE", phoneCountryCode: "+32", phoneCountryCodes: ["+32"] }, { name: "Belize", alpha2: "BZ", phoneCountryCode: "+501", phoneCountryCodes: ["+501"] }, { name: "Benin", alpha2: "BJ", phoneCountryCode: "+229", phoneCountryCodes: ["+229"] }, { name: "Bermuda", alpha2: "BM", phoneCountryCode: "+1 441", phoneCountryCodes: ["+1 441"] }, { name: "Bhutan", alpha2: "BT", phoneCountryCode: "+975", phoneCountryCodes: ["+975"] }, { name: "Bolivia, Plurinational State of", alpha2: "BO", phoneCountryCode: "+591", phoneCountryCodes: ["+591"] }, { name: "Bonaire, Sint Eustatius and Saba", alpha2: "BQ", phoneCountryCode: "+599", phoneCountryCodes: ["+599"] }, { name: "Bosnia and Herzegovina", alpha2: "BA", phoneCountryCode: "+387", phoneCountryCodes: ["+387"] }, { name: "Botswana", alpha2: "BW", phoneCountryCode: "+267", phoneCountryCodes: ["+267"] }, { name: "Bouvet Island", alpha2: "BV", phoneCountryCode: "+55", phoneCountryCodes: ["+55"] }, { name: "Brazil", alpha2: "BR", phoneCountryCode: "+55", phoneCountryCodes: ["+55"] }, { name: "British Indian Ocean Territory", alpha2: "IO", phoneCountryCode: "+246", phoneCountryCodes: ["+246"] }, { name: "Brunei Darussalam", alpha2: "BN", phoneCountryCode: "+673", phoneCountryCodes: ["+673"] }, { name: "Bulgaria", alpha2: "BG", phoneCountryCode: "+359", phoneCountryCodes: ["+359"] }, { name: "Burkina Faso", alpha2: "BF", phoneCountryCode: "+226", phoneCountryCodes: ["+226"] }, { name: "Burundi", alpha2: "BI", phoneCountryCode: "+257", phoneCountryCodes: ["+257"] }, { name: "Cambodia", alpha2: "KH", phoneCountryCode: "+855", phoneCountryCodes: ["+855"] }, { name: "Cameroon", alpha2: "CM", phoneCountryCode: "+237", phoneCountryCodes: ["+237"] }, { name: "Canada", alpha2: "CA", phoneCountryCode: "+1", phoneCountryCodes: ["+1"] }, { name: "Cape Verde", alpha2: "CV", phoneCountryCode: "+238", phoneCountryCodes: ["+238"] }, { name: "Cayman Islands", alpha2: "KY", phoneCountryCode: "+1 345", phoneCountryCodes: ["+1 345"] }, { name: "Central African Republic", alpha2: "CF", phoneCountryCode: "+236", phoneCountryCodes: ["+236"] }, { name: "Chad", alpha2: "TD", phoneCountryCode: "+235", phoneCountryCodes: ["+235"] }, { name: "Chile", alpha2: "CL", phoneCountryCode: "+56", phoneCountryCodes: ["+56"], localeForICU: "es-CL", currencyCode: "clp" }, { name: "China", alpha2: "CN", phoneCountryCode: "+86", phoneCountryCodes: ["+86"] }, { name: "Christmas Island", alpha2: "CX", phoneCountryCode: "+61", phoneCountryCodes: ["+61"] }, { name: "Cocos (Keeling) Islands", alpha2: "CC", phoneCountryCode: "+61", phoneCountryCodes: ["+61"] }, { name: "Colombia", alpha2: "CO", phoneCountryCode: "+57", phoneCountryCodes: ["+57"], localeForICU: "es-CO", currencyCode: "cop" }, { name: "Comoros", alpha2: "KM", phoneCountryCode: "+269", phoneCountryCodes: ["+269"] }, { name: "Congo", alpha2: "CG", phoneCountryCode: "+242", phoneCountryCodes: ["+242"] }, { name: "Congo, The Democratic Republic of the", alpha2: "CD", phoneCountryCode: "+243", phoneCountryCodes: ["+243"] }, { name: "Cook Islands", alpha2: "CK", phoneCountryCode: "+682", phoneCountryCodes: ["+682"] }, { name: "Costa Rica", alpha2: "CR", phoneCountryCode: "+506", phoneCountryCodes: ["+506"] }, { name: "Cote d'Ivoire", alpha2: "CI", phoneCountryCode: "+225", phoneCountryCodes: ["+225"] }, { name: "Croatia", alpha2: "HR", phoneCountryCode: "+385", phoneCountryCodes: ["+385"] }, { name: "Cuba", alpha2: "CU", phoneCountryCode: "+53", phoneCountryCodes: ["+53"] }, { name: "Curacao", alpha2: "CW", phoneCountryCode: "+599", phoneCountryCodes: ["+599"] }, { name: "Cyprus", alpha2: "CY", phoneCountryCode: "+357", phoneCountryCodes: ["+357"] }, { name: "Czech Republic", alpha2: "CZ", phoneCountryCode: "+420", phoneCountryCodes: ["+420"] }, { name: "Denmark", alpha2: "DK", phoneCountryCode: "+45", phoneCountryCodes: ["+45"] }, { name: "Diego Garcia", alpha2: "DG", phoneCountryCode: "+246", phoneCountryCodes: ["+246"] }, { name: "Djibouti", alpha2: "DJ", phoneCountryCode: "+253", phoneCountryCodes: ["+253"] }, { name: "Dominica", alpha2: "DM", phoneCountryCode: "+1 767", phoneCountryCodes: ["+1 767"] }, { name: "Dominican Republic", alpha2: "DO", phoneCountryCode: "+1 809", phoneCountryCodes: ["+1 809", "+1 829", "+1 849"] }, { name: "East Timor", alpha2: "TP", phoneCountryCode: "+670", phoneCountryCodes: ["+670"] }, { name: "Ecuador", alpha2: "EC", phoneCountryCode: "+593", phoneCountryCodes: ["+593"] }, { name: "Egypt", alpha2: "EG", phoneCountryCode: "+20", phoneCountryCodes: ["+20"] }, { name: "El Salvador", alpha2: "SV", phoneCountryCode: "+503", phoneCountryCodes: ["+503"] }, { name: "Equatorial Guinea", alpha2: "GQ", phoneCountryCode: "+240", phoneCountryCodes: ["+240"] }, { name: "Eritrea", alpha2: "ER", phoneCountryCode: "+291", phoneCountryCodes: ["+291"] }, { name: "Estonia", alpha2: "EE", phoneCountryCode: "+372", phoneCountryCodes: ["+372"] }, { name: "Ethiopia", alpha2: "ET", phoneCountryCode: "+251", phoneCountryCodes: ["+251"] }, { name: "Falkland Islands (Malvinas)", alpha2: "FK", phoneCountryCode: "+500", phoneCountryCodes: ["+500"] }, { name: "Faroe Islands", alpha2: "FO", phoneCountryCode: "+298", phoneCountryCodes: ["+298"] }, { name: "Fiji", alpha2: "FJ", phoneCountryCode: "+679", phoneCountryCodes: ["+679"] }, { name: "Finland", alpha2: "FI", phoneCountryCode: "+358", phoneCountryCodes: ["+358"] }, { name: "France", alpha2: "FR", phoneCountryCode: "+33", phoneCountryCodes: ["+33"] }, { name: "French Guiana", alpha2: "GF", phoneCountryCode: "+594", phoneCountryCodes: ["+594"] }, { name: "French Polynesia", alpha2: "PF", phoneCountryCode: "+689", phoneCountryCodes: ["+689"] }, { name: "French Southern Territories", alpha2: "TF", phoneCountryCode: "+262", phoneCountryCodes: ["+262"] }, { name: "Gabon", alpha2: "GA", phoneCountryCode: "+241", phoneCountryCodes: ["+241"] }, { name: "Gambia", alpha2: "GM", phoneCountryCode: "+220", phoneCountryCodes: ["+220"] }, { name: "Georgia", alpha2: "GE", phoneCountryCode: "+995", phoneCountryCodes: ["+995"] }, { name: "Germany", alpha2: "DE", phoneCountryCode: "+49", phoneCountryCodes: ["+49"] }, { name: "Ghana", alpha2: "GH", phoneCountryCode: "+233", phoneCountryCodes: ["+233"] }, { name: "Gibraltar", alpha2: "GI", phoneCountryCode: "+350", phoneCountryCodes: ["+350"] }, { name: "Greece", alpha2: "GR", phoneCountryCode: "+30", phoneCountryCodes: ["+30"] }, { name: "Greenland", alpha2: "GL", phoneCountryCode: "+299", phoneCountryCodes: ["+299"] }, { name: "Grenada", alpha2: "GD", phoneCountryCode: "+1 473", phoneCountryCodes: ["+1 473"] }, { name: "Guadeloupe", alpha2: "GP", phoneCountryCode: "+590", phoneCountryCodes: ["+590"] }, { name: "Guam", alpha2: "GU", phoneCountryCode: "+1 671", phoneCountryCodes: ["+1 671"] }, { name: "Guatemala", alpha2: "GT", phoneCountryCode: "+502", phoneCountryCodes: ["+502"] }, { name: "Guernsey", alpha2: "GG", phoneCountryCode: "+44", phoneCountryCodes: ["+44"] }, { name: "Guinea", alpha2: "GN", phoneCountryCode: "+224", phoneCountryCodes: ["+224"] }, { name: "Guinea-Bissau", alpha2: "GW", phoneCountryCode: "+245", phoneCountryCodes: ["+245"] }, { name: "Guyana", alpha2: "GY", phoneCountryCode: "+592", phoneCountryCodes: ["+592"] }, { name: "Haiti", alpha2: "HT", phoneCountryCode: "+509", phoneCountryCodes: ["+509"] }, { name: "Heard Island and McDonald Islands", alpha2: "HM", phoneCountryCode: "+672", phoneCountryCodes: ["+672"] }, { name: "Holy See (Vatican City State)", alpha2: "VA", phoneCountryCode: "+39", phoneCountryCodes: ["+39"] }, { name: "Honduras", alpha2: "HN", phoneCountryCode: "+504", phoneCountryCodes: ["+504"] }, { name: "Hong Kong", alpha2: "HK", phoneCountryCode: "+852", phoneCountryCodes: ["+852"] }, { name: "Hungary", alpha2: "HU", phoneCountryCode: "+36", phoneCountryCodes: ["+36"] }, { name: "Iceland", alpha2: "IS", phoneCountryCode: "+354", phoneCountryCodes: ["+354"] }, { name: "India", alpha2: "IN", phoneCountryCode: "+91", phoneCountryCodes: ["+91"] }, { name: "Indonesia", alpha2: "ID", phoneCountryCode: "+62", phoneCountryCodes: ["+62"], localeForICU: "id", currencyCode: "idr" }, { name: "Iran, Islamic Republic of", alpha2: "IR", phoneCountryCode: "+98", phoneCountryCodes: ["+98"] }, { name: "Iraq", alpha2: "IQ", phoneCountryCode: "+964", phoneCountryCodes: ["+964"] }, { name: "Ireland", alpha2: "IE", phoneCountryCode: "+353", phoneCountryCodes: ["+353"] }, { name: "Isle of Man", alpha2: "IM", phoneCountryCode: "+44", phoneCountryCodes: ["+44"] }, { name: "Israel", alpha2: "IL", phoneCountryCode: "+972", phoneCountryCodes: ["+972"] }, { name: "Italy", alpha2: "IT", phoneCountryCode: "+39", phoneCountryCodes: ["+39"] }, { name: "Jamaica", alpha2: "JM", phoneCountryCode: "+1 876", phoneCountryCodes: ["+1 876"] }, { name: "Japan", alpha2: "JP", phoneCountryCode: "+81", phoneCountryCodes: ["+81"], localeForICU: "jp", currencyCode: "jpy" }, { name: "Jersey", alpha2: "JE", phoneCountryCode: "+44", phoneCountryCodes: ["+44"] }, { name: "Jordan", alpha2: "JO", phoneCountryCode: "+962", phoneCountryCodes: ["+962"] }, { name: "Kazakhstan", alpha2: "KZ", phoneCountryCode: "+7", phoneCountryCodes: ["+7"] }, { name: "Kenya", alpha2: "KE", phoneCountryCode: "+254", phoneCountryCodes: ["+254"] }, { name: "Kiribati", alpha2: "KI", phoneCountryCode: "+686", phoneCountryCodes: ["+686"] }, { name: "Kosovo", alpha2: "XK", phoneCountryCode: "+383", phoneCountryCodes: ["+383"] }, { name: "Korea, Democratic People's Republic of", alpha2: "KP", phoneCountryCode: "+850", phoneCountryCodes: ["+850"] }, { name: "Korea, Republic of", alpha2: "KR", phoneCountryCode: "+82", phoneCountryCodes: ["+82"] }, { name: "Kuwait", alpha2: "KW", phoneCountryCode: "+965", phoneCountryCodes: ["+965"] }, { name: "Kyrgyzstan", alpha2: "KG", phoneCountryCode: "+996", phoneCountryCodes: ["+996"] }, { name: "Lao People's Democratic Republic", alpha2: "LA", phoneCountryCode: "+856", phoneCountryCodes: ["+856"] }, { name: "Latvia", alpha2: "LV", phoneCountryCode: "+371", phoneCountryCodes: ["+371"] }, { name: "Lebanon", alpha2: "LB", phoneCountryCode: "+961", phoneCountryCodes: ["+961"] }, { name: "Lesotho", alpha2: "LS", phoneCountryCode: "+266", phoneCountryCodes: ["+266"] }, { name: "Liberia", alpha2: "LR", phoneCountryCode: "+231", phoneCountryCodes: ["+231"] }, { name: "Libya", alpha2: "LY", phoneCountryCode: "+218", phoneCountryCodes: ["+218"] }, { name: "Liechtenstein", alpha2: "LI", phoneCountryCode: "+423", phoneCountryCodes: ["+423"] }, { name: "Lithuania", alpha2: "LT", phoneCountryCode: "+370", phoneCountryCodes: ["+370"] }, { name: "Luxembourg", alpha2: "LU", phoneCountryCode: "+352", phoneCountryCodes: ["+352"] }, { name: "Macao", alpha2: "MO", phoneCountryCode: "+853", phoneCountryCodes: ["+853"] }, { name: "Macedonia, Republic of", alpha2: "MK", phoneCountryCode: "+389", phoneCountryCodes: ["+389"] }, { name: "Madagascar", alpha2: "MG", phoneCountryCode: "+261", phoneCountryCodes: ["+261"] }, { name: "Malawi", alpha2: "MW", phoneCountryCode: "+265", phoneCountryCodes: ["+265"] }, { name: "Malaysia", alpha2: "MY", phoneCountryCode: "+60", phoneCountryCodes: ["+60"], localeForICU: "ms", currencyCode: "myr" }, { name: "Maldives", alpha2: "MV", phoneCountryCode: "+960", phoneCountryCodes: ["+960"] }, { name: "Mali", alpha2: "ML", phoneCountryCode: "+223", phoneCountryCodes: ["+223"] }, { name: "Malta", alpha2: "MT", phoneCountryCode: "+356", phoneCountryCodes: ["+356"] }, { name: "Marshall Islands", alpha2: "MH", phoneCountryCode: "+692", phoneCountryCodes: ["+692"] }, { name: "Martinique", alpha2: "MQ", phoneCountryCode: "+596", phoneCountryCodes: ["+596"] }, { name: "Mauritania", alpha2: "MR", phoneCountryCode: "+222", phoneCountryCodes: ["+222"] }, { name: "Mauritius", alpha2: "MU", phoneCountryCode: "+230", phoneCountryCodes: ["+230"] }, { name: "Mayotte", alpha2: "YT", phoneCountryCode: "+262", phoneCountryCodes: ["+262"] }, { name: "Mexico", alpha2: "MX", phoneCountryCode: "+52", phoneCountryCodes: ["+52"] }, { name: "Micronesia, Federated States of", alpha2: "FM", phoneCountryCode: "+691", phoneCountryCodes: ["+691"] }, { name: "Midway Island", alpha2: "MI", phoneCountryCode: "+1 808", phoneCountryCodes: ["+1 808"] }, { name: "Moldova, Republic of", alpha2: "MD", phoneCountryCode: "+373", phoneCountryCodes: ["+373"] }, { name: "Monaco", alpha2: "MC", phoneCountryCode: "+377", phoneCountryCodes: ["+377"] }, { name: "Mongolia", alpha2: "MN", phoneCountryCode: "+976", phoneCountryCodes: ["+976"] }, { name: "Montenegro", alpha2: "ME", phoneCountryCode: "+382", phoneCountryCodes: ["+382"] }, { name: "Montserrat", alpha2: "MS", phoneCountryCode: "+1664", phoneCountryCodes: ["+1664"] }, { name: "Morocco", alpha2: "MA", phoneCountryCode: "+212", phoneCountryCodes: ["+212"] }, { name: "Mozambique", alpha2: "MZ", phoneCountryCode: "+258", phoneCountryCodes: ["+258"] }, { name: "Myanmar", alpha2: "MM", phoneCountryCode: "+95", phoneCountryCodes: ["+95"] }, { name: "Namibia", alpha2: "NA", phoneCountryCode: "+264", phoneCountryCodes: ["+264"] }, { name: "Nauru", alpha2: "NR", phoneCountryCode: "+674", phoneCountryCodes: ["+674"] }, { name: "Nepal", alpha2: "NP", phoneCountryCode: "+977", phoneCountryCodes: ["+977"] }, { name: "Netherlands", alpha2: "NL", phoneCountryCode: "+31", phoneCountryCodes: ["+31"] }, { name: "Netherlands Antilles", alpha2: "AN", phoneCountryCode: "+599", phoneCountryCodes: ["+599"] }, { name: "New Caledonia", alpha2: "NC", phoneCountryCode: "+687", phoneCountryCodes: ["+687"] }, { name: "New Zealand", alpha2: "NZ", phoneCountryCode: "+64", phoneCountryCodes: ["+64"] }, { name: "Nicaragua", alpha2: "NI", phoneCountryCode: "+505", phoneCountryCodes: ["+505"] }, { name: "Niger", alpha2: "NE", phoneCountryCode: "+227", phoneCountryCodes: ["+227"] }, { name: "Nigeria", alpha2: "NG", phoneCountryCode: "+234", phoneCountryCodes: ["+234"] }, { name: "Niue", alpha2: "NU", phoneCountryCode: "+683", phoneCountryCodes: ["+683"] }, { name: "Norfolk Island", alpha2: "NF", phoneCountryCode: "+672", phoneCountryCodes: ["+672"] }, { name: "Northern Mariana Islands", alpha2: "MP", phoneCountryCode: "+1 670", phoneCountryCodes: ["+1 670"] }, { name: "Norway", alpha2: "NO", phoneCountryCode: "+47", phoneCountryCodes: ["+47"] }, { name: "Oman", alpha2: "OM", phoneCountryCode: "+968", phoneCountryCodes: ["+968"] }, { name: "Pakistan", alpha2: "PK", phoneCountryCode: "+92", phoneCountryCodes: ["+92"] }, { name: "Palau", alpha2: "PW", phoneCountryCode: "+680", phoneCountryCodes: ["+680"] }, { name: "Palestine, State of", alpha2: "PS", phoneCountryCode: "+970", phoneCountryCodes: ["+970"] }, { name: "Panama", alpha2: "PA", phoneCountryCode: "+507", phoneCountryCodes: ["+507"] }, { name: "Papua New Guinea", alpha2: "PG", phoneCountryCode: "+675", phoneCountryCodes: ["+675"] }, { name: "Paraguay", alpha2: "PY", phoneCountryCode: "+595", phoneCountryCodes: ["+595"] }, { name: "Peru", alpha2: "PE", phoneCountryCode: "+51", phoneCountryCodes: ["+51"], localeForICU: "es-PE", currencyCode: "pen" }, { name: "Philippines", alpha2: "PH", phoneCountryCode: "+63", phoneCountryCodes: ["+63"], localeForICU: "en-PH", currencyCode: "php" }, { name: "Pitcairn", alpha2: "PN", phoneCountryCode: "+64", phoneCountryCodes: ["+64"] }, { name: "Poland", alpha2: "PL", phoneCountryCode: "+48", phoneCountryCodes: ["+48"] }, { name: "Portugal", alpha2: "PT", phoneCountryCode: "+351", phoneCountryCodes: ["+351"] }, { name: "Puerto Rico", alpha2: "PR", phoneCountryCode: "+1 787", phoneCountryCodes: ["+1 787"] }, { name: "Qatar", alpha2: "QA", phoneCountryCode: "+974", phoneCountryCodes: ["+974"] }, { name: "Reunion", alpha2: "RE", phoneCountryCode: "+262", phoneCountryCodes: ["+262"] }, { name: "Romania", alpha2: "RO", phoneCountryCode: "+40", phoneCountryCodes: ["+40"] }, { name: "Russian Federation", alpha2: "RU", phoneCountryCode: "+7", phoneCountryCodes: ["+7"] }, { name: "Rwanda", alpha2: "RW", phoneCountryCode: "+250", phoneCountryCodes: ["+250"] }, { name: "Saint Barth\xe9lemy", alpha2: "BL", phoneCountryCode: "+590", phoneCountryCodes: ["+590"] }, { name: "Saint Helena, Ascension and Tristan da Cunha", alpha2: "SH", phoneCountryCode: "+290", phoneCountryCodes: ["+290"] }, { name: "Saint Kitts and Nevis", alpha2: "KN", phoneCountryCode: "+1 869", phoneCountryCodes: ["+1 869"] }, { name: "Saint Lucia", alpha2: "LC", phoneCountryCode: "+1 758", phoneCountryCodes: ["+1 758"] }, { name: "Saint Martin (French part)", alpha2: "MF", phoneCountryCode: "+590", phoneCountryCodes: ["+590"] }, { name: "Saint Pierre and Miquelon", alpha2: "PM", phoneCountryCode: "+508", phoneCountryCodes: ["+508"] }, { name: "Saint Vincent and the Grenadines", alpha2: "VC", phoneCountryCode: "+1 784", phoneCountryCodes: ["+1 784"] }, { name: "Samoa", alpha2: "WS", phoneCountryCode: "+685", phoneCountryCodes: ["+685"] }, { name: "San Marino", alpha2: "SM", phoneCountryCode: "+378", phoneCountryCodes: ["+378"] }, { name: "Sao Tome and Principe", alpha2: "ST", phoneCountryCode: "+239", phoneCountryCodes: ["+239"] }, { name: "Saudi Arabia", alpha2: "SA", phoneCountryCode: "+966", phoneCountryCodes: ["+966"] }, { name: "Senegal", alpha2: "SN", phoneCountryCode: "+221", phoneCountryCodes: ["+221"] }, { name: "Serbia", alpha2: "RS", phoneCountryCode: "+381", phoneCountryCodes: ["+381"] }, { name: "Seychelles", alpha2: "SC", phoneCountryCode: "+248", phoneCountryCodes: ["+248"] }, { name: "Sierra Leone", alpha2: "SL", phoneCountryCode: "+232", phoneCountryCodes: ["+232"] }, { name: "Singapore", alpha2: "SG", phoneCountryCode: "+65", phoneCountryCodes: ["+65"] }, { name: "Sint Maarten (Dutch part)", alpha2: "SX", phoneCountryCode: "+1 721", phoneCountryCodes: ["+1 721"] }, { name: "Slovakia", alpha2: "SK", phoneCountryCode: "+421", phoneCountryCodes: ["+421"] }, { name: "Slovenia", alpha2: "SI", phoneCountryCode: "+386", phoneCountryCodes: ["+386"] }, { name: "Solomon Islands", alpha2: "SB", phoneCountryCode: "+677", phoneCountryCodes: ["+677"] }, { name: "Somalia", alpha2: "SO", phoneCountryCode: "+252", phoneCountryCodes: ["+252"] }, { name: "South Africa", alpha2: "ZA", phoneCountryCode: "+27", phoneCountryCodes: ["+27"] }, { name: "South Georgia and the South Sandwich Islands", alpha2: "GS", phoneCountryCode: "+500", phoneCountryCodes: ["+500"] }, { name: "South Sudan", alpha2: "SS", phoneCountryCode: "+211", phoneCountryCodes: ["+211"] }, { name: "Spain", alpha2: "ES", phoneCountryCode: "+34", phoneCountryCodes: ["+34"] }, { name: "Sri Lanka", alpha2: "LK", phoneCountryCode: "+94", phoneCountryCodes: ["+94"] }, { name: "Sudan", alpha2: "SD", phoneCountryCode: "+249", phoneCountryCodes: ["+249"] }, { name: "Suriname", alpha2: "SR", phoneCountryCode: "+597", phoneCountryCodes: ["+597"] }, { name: "Svalbard and Jan Mayen", alpha2: "SJ", phoneCountryCode: "+47", phoneCountryCodes: ["+47"] }, { name: "Swaziland", alpha2: "SZ", phoneCountryCode: "+268", phoneCountryCodes: ["+268"] }, { name: "Sweden", alpha2: "SE", phoneCountryCode: "+46", phoneCountryCodes: ["+46"] }, { name: "Switzerland", alpha2: "CH", phoneCountryCode: "+41", phoneCountryCodes: ["+41"] }, { name: "Syrian Arab Republic", alpha2: "SY", phoneCountryCode: "+963", phoneCountryCodes: ["+963"] }, { name: "Taiwan", alpha2: "TW", phoneCountryCode: "+886", phoneCountryCodes: ["+886"] }, { name: "Tajikistan", alpha2: "TJ", phoneCountryCode: "+992", phoneCountryCodes: ["+992"] }, { name: "Tanzania, United Republic of", alpha2: "TZ", phoneCountryCode: "+255", phoneCountryCodes: ["+255"] }, { name: "Thailand", alpha2: "TH", phoneCountryCode: "+66", phoneCountryCodes: ["+66"], localeForICU: "th", currencyCode: "thb" }, { name: "Timor-Leste", alpha2: "TL", phoneCountryCode: "+670", phoneCountryCodes: ["+670"] }, { name: "Togo", alpha2: "TG", phoneCountryCode: "+228", phoneCountryCodes: ["+228"] }, { name: "Tokelau", alpha2: "TK", phoneCountryCode: "+690", phoneCountryCodes: ["+690"] }, { name: "Tonga", alpha2: "TO", phoneCountryCode: "+676", phoneCountryCodes: ["+676"] }, { name: "Trinidad and Tobago", alpha2: "TT", phoneCountryCode: "+1 868", phoneCountryCodes: ["+1 868"] }, { name: "Tunisia", alpha2: "TN", phoneCountryCode: "+216", phoneCountryCodes: ["+216"] }, { name: "Turkey", alpha2: "TR", phoneCountryCode: "+90", phoneCountryCodes: ["+90"] }, { name: "Turkmenistan", alpha2: "TM", phoneCountryCode: "+993", phoneCountryCodes: ["+993"] }, { name: "Turks and Caicos Islands", alpha2: "TC", phoneCountryCode: "+1 649", phoneCountryCodes: ["+1 649"] }, { name: "Tuvalu", alpha2: "TV", phoneCountryCode: "+688", phoneCountryCodes: ["+688"] }, { name: "Uganda", alpha2: "UG", phoneCountryCode: "+256", phoneCountryCodes: ["+256"] }, { name: "Ukraine", alpha2: "UA", phoneCountryCode: "+380", phoneCountryCodes: ["+380"] }, { name: "United Arab Emirates", alpha2: "AE", phoneCountryCode: "+971", phoneCountryCodes: ["+971"] }, { name: "United Kingdom", alpha2: "GB", phoneCountryCode: "+44", phoneCountryCodes: ["+44"] }, { name: "United States", alpha2: "US", phoneCountryCode: "+1", phoneCountryCodes: ["+1"] }, { name: "United States Minor Outlying Islands", alpha2: "UM", phoneCountryCode: "+1", phoneCountryCodes: ["+1"] }, { name: "Uruguay", alpha2: "UY", phoneCountryCode: "+598", phoneCountryCodes: ["+598"] }, { name: "Uzbekistan", alpha2: "UZ", phoneCountryCode: "+998", phoneCountryCodes: ["+998"] }, { name: "Vanuatu", alpha2: "VU", phoneCountryCode: "+678", phoneCountryCodes: ["+678"] }, { name: "Venezuela, Bolivarian Republic of", alpha2: "VE", phoneCountryCode: "+58", phoneCountryCodes: ["+58"] }, { name: "Vietnam", alpha2: "VN", phoneCountryCode: "+84", phoneCountryCodes: ["+84"], localeForICU: "vi", currencyCode: "vnd" }, { name: "Virgin Islands, British", alpha2: "VG", phoneCountryCode: "+1 284", phoneCountryCodes: ["+1 284"] }, { name: "Virgin Islands, U.S.", alpha2: "VI", phoneCountryCode: "+1 340", phoneCountryCodes: ["+1 340"] }, { name: "Wallis and Futuna", alpha2: "WF", phoneCountryCode: "+681", phoneCountryCodes: ["+681"] }, { name: "Western Sahara", alpha2: "EH", phoneCountryCode: "+212", phoneCountryCodes: ["+212"] }, { name: "Yemen", alpha2: "YE", phoneCountryCode: "+967", phoneCountryCodes: ["+967"] }, { name: "Zambia", alpha2: "ZM", phoneCountryCode: "+260", phoneCountryCodes: ["+260"] }, { name: "Zimbabwe", alpha2: "ZW", phoneCountryCode: "+263", phoneCountryCodes: ["+263"] }] }, 17089: function(e, t, n) { "use strict"; n.r(t) }, 259443: function(e, t, n) { "use strict"; n.r(t), n.d(t, { Logger: function() { return o }, setLogFn: function() { return a } }), n("47120"); var i = n("247071"); function r(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let s = () => {}; function a(e) { s = e } class o { constructor(e = "default") { var t = this; r(this, "name", void 0), r(this, "logDangerously", function(e) { for (var n = arguments.length, i = Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) i[r - 1] = arguments[r]; s(t.name, "log", e, ...i) }), r(this, "log", function(e) { for (var n = arguments.length, r = Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++) r[a - 1] = arguments[a]; (0, i.checkLogForPII)(e, ...r), s(t.name, "log", e, ...r) }), r(this, "verboseDangerously", function(e) { for (var n = arguments.length, i = Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) i[r - 1] = arguments[r]; s(t.name, "debug", e, ...i) }), r(this, "verbose", function(e) { for (var n = arguments.length, r = Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++) r[a - 1] = arguments[a]; (0, i.checkLogForPII)(e, ...r), s(t.name, "debug", e, ...r) }), r(this, "info", function(e) { for (var n = arguments.length, r = Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++) r[a - 1] = arguments[a]; (0, i.checkLogForPII)(e, ...r), s(t.name, "info", e, ...r) }), r(this, "warn", function(e) { for (var n = arguments.length, r = Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++) r[a - 1] = arguments[a]; (0, i.checkLogForPII)(e, ...r), s(t.name, "warn", e, ...r) }), r(this, "error", function(e) { for (var n = arguments.length, r = Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++) r[a - 1] = arguments[a]; (0, i.checkLogForPII)(e, ...r), s(t.name, "error", e, ...r) }), r(this, "trace", function(e) { for (var n = arguments.length, i = Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) i[r - 1] = arguments[r]; s(t.name, "trace", e, ...i) }), r(this, "time", (e, t) => { let n = Date.now(), i = t(); return this.log(e, Date.now() - n), i }), r(this, "fileOnly", function(e) { for (var n = arguments.length, i = Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) i[r - 1] = arguments[r]; s(t.name, "file-only", e, ...i) }), this.name = e } } }, 247071: function(e, t, n) { "use strict"; function i(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i] } n.r(t), n.d(t, { checkLogForPII: function() { return i } }), n("411104") }, 834427: function(e, t, n) { "use strict"; n.r(t), n.d(t, { FileInput: function() { return u } }), n("47120"); var i, r = n("735250"), s = n("470079"); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } let o = "file-input", l = e => ({ position: "absolute", top: 0, left: 0, width: "100%", height: "100%", opacity: 0, cursor: e ? "not-allowed" : "pointer", fontSize: 0 }); class u extends(i = s.Component) { render() { let { disabled: e, tabIndex: t, className: n, name: i, "aria-label": s, "aria-hidden": a } = this.props; if (this.props.embedded) return (0, r.jsx)("div", { role: "button", style: l(e), className: n || o, tabIndex: t, onKeyDown: e ? void 0 : this.handleNativeKeyDown, onClick: e ? void 0 : this.handleNativeClick, "aria-disabled": e, "aria-label": s, "aria-hidden": a || void 0 }); { let u = ""; return this.props.filters && (u = this.props.filters.map(e => e.extensions.map(e => ".".concat(e)).join(",")).join(",")), (0, r.jsx)("input", { style: l(e), className: n || o, disabled: e, type: "file", tabIndex: t, onMouseDown: this.handleBrowserInputMouseDown, onChange: this.props.onChange, multiple: this.props.multiple, accept: u, name: i, "aria-label": s, "aria-hidden": a || void 0, ref: e => this._input = e }) } } constructor(...e) { super(...e), a(this, "_input", null), a(this, "activateUploadDialogue", () => { this.props.embedded ? this.handleNativeClick() : this._input && this._input.click() }), a(this, "handleNativeClick", () => { this.props.handleNativeClick && this.props.handleNativeClick(this.props) }), a(this, "handleNativeKeyDown", e => { (" " === e.key || "Enter" === e.key) && this.handleNativeClick() }), a(this, "handleBrowserInputMouseDown", e => { e.currentTarget.value = null }) } } a(u, "defaultProps", { multiple: !1, disabled: !1, tabIndex: 0 }) }, 831209: function(e, t, n) { "use strict"; var i, r; n.r(t), (r = i || (i = {})).ACTION_SHEET_GRADIENT_BG = "var(--action-sheet-gradient-bg)", r.ACTIVITY_CARD_BACKGROUND = "var(--activity-card-background)", r.ACTIVITY_CARD_ICON_OVERLAY = "var(--activity-card-icon-overlay)", r.ALERT_BG = "var(--alert-bg)", r.ANDROID_NAVIGATION_BAR_BACKGROUND = "var(--android-navigation-bar-background)", r.ANDROID_NAVIGATION_SCRIM_BACKGROUND = "var(--android-navigation-scrim-background)", r.ANDROID_RIPPLE = "var(--android-ripple)", r.BACKGROUND_ACCENT = "var(--background-accent)", r.BACKGROUND_FLOATING = "var(--background-floating)", r.BACKGROUND_MENTIONED = "var(--background-mentioned)", r.BACKGROUND_MENTIONED_HOVER = "var(--background-mentioned-hover)", r.BACKGROUND_MESSAGE_AUTOMOD = "var(--background-message-automod)", r.BACKGROUND_MESSAGE_AUTOMOD_HOVER = "var(--background-message-automod-hover)", r.BACKGROUND_MESSAGE_HIGHLIGHT = "var(--background-message-highlight)", r.BACKGROUND_MESSAGE_HIGHLIGHT_HOVER = "var(--background-message-highlight-hover)", r.BACKGROUND_MESSAGE_HOVER = "var(--background-message-hover)", r.BACKGROUND_MOBILE_PRIMARY = "var(--background-mobile-primary)", r.BACKGROUND_MOBILE_SECONDARY = "var(--background-mobile-secondary)", r.BACKGROUND_MODIFIER_ACCENT = "var(--background-modifier-accent)", r.BACKGROUND_MODIFIER_ACCENT_2 = "var(--background-modifier-accent-2)", r.BACKGROUND_MODIFIER_ACTIVE = "var(--background-modifier-active)", r.BACKGROUND_MODIFIER_HOVER = "var(--background-modifier-hover)", r.BACKGROUND_MODIFIER_SELECTED = "var(--background-modifier-selected)", r.BACKGROUND_NESTED_FLOATING = "var(--background-nested-floating)", r.BACKGROUND_PRIMARY = "var(--background-primary)", r.BACKGROUND_SECONDARY = "var(--background-secondary)", r.BACKGROUND_SECONDARY_ALT = "var(--background-secondary-alt)", r.BACKGROUND_TERTIARY = "var(--background-tertiary)", r.BG_BACKDROP = "var(--bg-backdrop)", r.BG_BACKDROP_NO_OPACITY = "var(--bg-backdrop-no-opacity)", r.BG_BASE_PRIMARY = "var(--bg-base-primary)", r.BG_BASE_SECONDARY = "var(--bg-base-secondary)", r.BG_BASE_TERTIARY = "var(--bg-base-tertiary)", r.BG_BRAND = "var(--bg-brand)", r.BG_MOD_FAINT = "var(--bg-mod-faint)", r.BG_MOD_STRONG = "var(--bg-mod-strong)", r.BG_MOD_SUBTLE = "var(--bg-mod-subtle)", r.BG_SURFACE_OVERLAY = "var(--bg-surface-overlay)", r.BG_SURFACE_OVERLAY_TMP = "var(--bg-surface-overlay-tmp)", r.BG_SURFACE_RAISED = "var(--bg-surface-raised)", r.BLACK = "var(--black)", r.BLUR_FALLBACK = "var(--blur-fallback)", r.BLUR_FALLBACK_PRESSED = "var(--blur-fallback-pressed)", r.BORDER_FAINT = "var(--border-faint)", r.BORDER_STRONG = "var(--border-strong)", r.BORDER_SUBTLE = "var(--border-subtle)", r.BUG_REPORTER_MODAL_SUBMITTING_BACKGROUND = "var(--bug-reporter-modal-submitting-background)", r.BUTTON_CREATOR_REVENUE_BACKGROUND = "var(--button-creator-revenue-background)", r.BUTTON_DANGER_BACKGROUND = "var(--button-danger-background)", r.BUTTON_DANGER_BACKGROUND_ACTIVE = "var(--button-danger-background-active)", r.BUTTON_DANGER_BACKGROUND_DISABLED = "var(--button-danger-background-disabled)", r.BUTTON_DANGER_BACKGROUND_HOVER = "var(--button-danger-background-hover)", r.BUTTON_OUTLINE_BRAND_BACKGROUND = "var(--button-outline-brand-background)", r.BUTTON_OUTLINE_BRAND_BACKGROUND_ACTIVE = "var(--button-outline-brand-background-active)", r.BUTTON_OUTLINE_BRAND_BACKGROUND_HOVER = "var(--button-outline-brand-background-hover)", r.BUTTON_OUTLINE_BRAND_BORDER = "var(--button-outline-brand-border)", r.BUTTON_OUTLINE_BRAND_BORDER_ACTIVE = "var(--button-outline-brand-border-active)", r.BUTTON_OUTLINE_BRAND_BORDER_HOVER = "var(--button-outline-brand-border-hover)", r.BUTTON_OUTLINE_BRAND_TEXT = "var(--button-outline-brand-text)", r.BUTTON_OUTLINE_BRAND_TEXT_ACTIVE = "var(--button-outline-brand-text-active)", r.BUTTON_OUTLINE_BRAND_TEXT_HOVER = "var(--button-outline-brand-text-hover)", r.BUTTON_OUTLINE_DANGER_BACKGROUND = "var(--button-outline-danger-background)", r.BUTTON_OUTLINE_DANGER_BACKGROUND_ACTIVE = "var(--button-outline-danger-background-active)", r.BUTTON_OUTLINE_DANGER_BACKGROUND_HOVER = "var(--button-outline-danger-background-hover)", r.BUTTON_OUTLINE_DANGER_BORDER = "var(--button-outline-danger-border)", r.BUTTON_OUTLINE_DANGER_BORDER_ACTIVE = "var(--button-outline-danger-border-active)", r.BUTTON_OUTLINE_DANGER_BORDER_HOVER = "var(--button-outline-danger-border-hover)", r.BUTTON_OUTLINE_DANGER_TEXT = "var(--button-outline-danger-text)", r.BUTTON_OUTLINE_DANGER_TEXT_ACTIVE = "var(--button-outline-danger-text-active)", r.BUTTON_OUTLINE_DANGER_TEXT_HOVER = "var(--button-outline-danger-text-hover)", r.BUTTON_OUTLINE_POSITIVE_BACKGROUND = "var(--button-outline-positive-background)", r.BUTTON_OUTLINE_POSITIVE_BACKGROUND_ACTIVE = "var(--button-outline-positive-background-active)", r.BUTTON_OUTLINE_POSITIVE_BACKGROUND_HOVER = "var(--button-outline-positive-background-hover)", r.BUTTON_OUTLINE_POSITIVE_BORDER = "var(--button-outline-positive-border)", r.BUTTON_OUTLINE_POSITIVE_BORDER_ACTIVE = "var(--button-outline-positive-border-active)", r.BUTTON_OUTLINE_POSITIVE_BORDER_HOVER = "var(--button-outline-positive-border-hover)", r.BUTTON_OUTLINE_POSITIVE_TEXT = "var(--button-outline-positive-text)", r.BUTTON_OUTLINE_POSITIVE_TEXT_ACTIVE = "var(--button-outline-positive-text-active)", r.BUTTON_OUTLINE_POSITIVE_TEXT_HOVER = "var(--button-outline-positive-text-hover)", r.BUTTON_OUTLINE_PRIMARY_BACKGROUND = "var(--button-outline-primary-background)", r.BUTTON_OUTLINE_PRIMARY_BACKGROUND_ACTIVE = "var(--button-outline-primary-background-active)", r.BUTTON_OUTLINE_PRIMARY_BACKGROUND_HOVER = "var(--button-outline-primary-background-hover)", r.BUTTON_OUTLINE_PRIMARY_BORDER = "var(--button-outline-primary-border)", r.BUTTON_OUTLINE_PRIMARY_BORDER_ACTIVE = "var(--button-outline-primary-border-active)", r.BUTTON_OUTLINE_PRIMARY_BORDER_HOVER = "var(--button-outline-primary-border-hover)", r.BUTTON_OUTLINE_PRIMARY_TEXT = "var(--button-outline-primary-text)", r.BUTTON_OUTLINE_PRIMARY_TEXT_ACTIVE = "var(--button-outline-primary-text-active)", r.BUTTON_OUTLINE_PRIMARY_TEXT_HOVER = "var(--button-outline-primary-text-hover)", r.BUTTON_POSITIVE_BACKGROUND = "var(--button-positive-background)", r.BUTTON_POSITIVE_BACKGROUND_ACTIVE = "var(--button-positive-background-active)", r.BUTTON_POSITIVE_BACKGROUND_DISABLED = "var(--button-positive-background-disabled)", r.BUTTON_POSITIVE_BACKGROUND_HOVER = "var(--button-positive-background-hover)", r.BUTTON_SECONDARY_BACKGROUND = "var(--button-secondary-background)", r.BUTTON_SECONDARY_BACKGROUND_ACTIVE = "var(--button-secondary-background-active)", r.BUTTON_SECONDARY_BACKGROUND_DISABLED = "var(--button-secondary-background-disabled)", r.BUTTON_SECONDARY_BACKGROUND_HOVER = "var(--button-secondary-background-hover)", r.CARD_GRADIENT_BG = "var(--card-gradient-bg)", r.CARD_GRADIENT_PRESSED_BG = "var(--card-gradient-pressed-bg)", r.CARD_PRIMARY_BG = "var(--card-primary-bg)", r.CARD_PRIMARY_PRESSED_BG = "var(--card-primary-pressed-bg)", r.CARD_SECONDARY_BG = "var(--card-secondary-bg)", r.CARD_SECONDARY_PRESSED_BG = "var(--card-secondary-pressed-bg)", r.CHANNEL_ICON = "var(--channel-icon)", r.CHANNEL_TEXT_AREA_PLACEHOLDER = "var(--channel-text-area-placeholder)", r.CHANNELS_DEFAULT = "var(--channels-default)", r.CHANNELTEXTAREA_BACKGROUND = "var(--channeltextarea-background)", r.CHAT_BACKGROUND = "var(--chat-background)", r.CHAT_BANNER_BG = "var(--chat-banner-bg)", r.CHAT_BORDER = "var(--chat-border)", r.CHAT_INPUT_CONTAINER_BACKGROUND = "var(--chat-input-container-background)", r.CHAT_SWIPE_TO_REPLY_BACKGROUND = "var(--chat-swipe-to-reply-background)", r.CHAT_SWIPE_TO_REPLY_GRADIENT_BACKGROUND = "var(--chat-swipe-to-reply-gradient-background)", r.COACHMARK_BG = "var(--coachmark-bg)", r.CONTENT_INVENTORY_MEDIA_SEEKBAR_CONTAINER = "var(--content-inventory-media-seekbar-container)", r.CONTENT_INVENTORY_OVERLAY_TEXT_PRIMARY = "var(--content-inventory-overlay-text-primary)", r.CONTENT_INVENTORY_OVERLAY_TEXT_SECONDARY = "var(--content-inventory-overlay-text-secondary)", r.CONTENT_INVENTORY_OVERLAY_UI_MOD = "var(--content-inventory-overlay-ui-mod)", r.CONTENT_INVENTORY_OVERLAY_UI_MOD_BG = "var(--content-inventory-overlay-ui-mod-bg)", r.CONTEXT_MENU_BACKDROP_BACKGROUND = "var(--context-menu-backdrop-background)", r.CONTROL_BRAND_FOREGROUND = "var(--control-brand-foreground)", r.CONTROL_BRAND_FOREGROUND_NEW = "var(--control-brand-foreground-new)", r.CREATOR_REVENUE_ICON_GRADIENT_END = "var(--creator-revenue-icon-gradient-end)", r.CREATOR_REVENUE_ICON_GRADIENT_START = "var(--creator-revenue-icon-gradient-start)", r.CREATOR_REVENUE_INFO_BOX_BACKGROUND = "var(--creator-revenue-info-box-background)", r.CREATOR_REVENUE_INFO_BOX_BORDER = "var(--creator-revenue-info-box-border)", r.CREATOR_REVENUE_LOCKED_CHANNEL_ICON = "var(--creator-revenue-locked-channel-icon)", r.CREATOR_REVENUE_PROGRESS_BAR = "var(--creator-revenue-progress-bar)", r.DEPRECATED_CARD_BG = "var(--deprecated-card-bg)", r.DEPRECATED_CARD_EDITABLE_BG = "var(--deprecated-card-editable-bg)", r.DEPRECATED_QUICKSWITCHER_INPUT_BACKGROUND = "var(--deprecated-quickswitcher-input-background)", r.DEPRECATED_QUICKSWITCHER_INPUT_PLACEHOLDER = "var(--deprecated-quickswitcher-input-placeholder)", r.DEPRECATED_STORE_BG = "var(--deprecated-store-bg)", r.DEPRECATED_TEXT_INPUT_BG = "var(--deprecated-text-input-bg)", r.DEPRECATED_TEXT_INPUT_BORDER = "var(--deprecated-text-input-border)", r.DEPRECATED_TEXT_INPUT_BORDER_DISABLED = "var(--deprecated-text-input-border-disabled)", r.DEPRECATED_TEXT_INPUT_BORDER_HOVER = "var(--deprecated-text-input-border-hover)", r.DEPRECATED_TEXT_INPUT_PREFIX = "var(--deprecated-text-input-prefix)", r.DISPLAY_BANNER_OVERFLOW_BACKGROUND = "var(--display-banner-overflow-background)", r.DIVIDER_STRONG = "var(--divider-strong)", r.DIVIDER_SUBTLE = "var(--divider-subtle)", r.EMBED_BACKGROUND = "var(--embed-background)", r.EMBED_BACKGROUND_ALTERNATE = "var(--embed-background-alternate)", r.EMBED_TITLE = "var(--embed-title)", r.EXPRESSION_PICKER_BG = "var(--expression-picker-bg)", r.FOCUS_PRIMARY = "var(--focus-primary)", r.FORUM_POST_EXTRA_MEDIA_COUNT_CONTAINER_BACKGROUND = "var(--forum-post-extra-media-count-container-background)", r.FORUM_POST_TAG_BACKGROUND = "var(--forum-post-tag-background)", r.GUILD_ICON_INACTIVE_BG = "var(--guild-icon-inactive-bg)", r.GUILD_ICON_INACTIVE_NESTED_BG = "var(--guild-icon-inactive-nested-bg)", r.GUILD_NOTIFICATIONS_BOTTOM_SHEET_PILL_BACKGROUND = "var(--guild-notifications-bottom-sheet-pill-background)", r.HALO_POSITIVE = "var(--halo-positive)", r.HEADER_MUTED = "var(--header-muted)", r.HEADER_PRIMARY = "var(--header-primary)", r.HEADER_SECONDARY = "var(--header-secondary)", r.HOME_BACKGROUND = "var(--home-background)", r.HOME_CARD_RESTING_BORDER = "var(--home-card-resting-border)", r.ICON_MUTED = "var(--icon-muted)", r.ICON_PRIMARY = "var(--icon-primary)", r.ICON_SECONDARY = "var(--icon-secondary)", r.ICON_TRANSPARENT = "var(--icon-transparent)", r.INFO_BOX_BACKGROUND = "var(--info-box-background)", r.INFO_DANGER_BACKGROUND = "var(--info-danger-background)", r.INFO_DANGER_FOREGROUND = "var(--info-danger-foreground)", r.INFO_DANGER_TEXT = "var(--info-danger-text)", r.INFO_HELP_BACKGROUND = "var(--info-help-background)", r.INFO_HELP_FOREGROUND = "var(--info-help-foreground)", r.INFO_HELP_TEXT = "var(--info-help-text)", r.INFO_POSITIVE_BACKGROUND = "var(--info-positive-background)", r.INFO_POSITIVE_FOREGROUND = "var(--info-positive-foreground)", r.INFO_POSITIVE_TEXT = "var(--info-positive-text)", r.INFO_WARNING_BACKGROUND = "var(--info-warning-background)", r.INFO_WARNING_FOREGROUND = "var(--info-warning-foreground)", r.INFO_WARNING_TEXT = "var(--info-warning-text)", r.INPUT_BACKGROUND = "var(--input-background)", r.INPUT_FOCUSED_BORDER = "var(--input-focused-border)", r.INPUT_PLACEHOLDER_TEXT = "var(--input-placeholder-text)", r.INTERACTIVE_ACTIVE = "var(--interactive-active)", r.INTERACTIVE_HOVER = "var(--interactive-hover)", r.INTERACTIVE_MUTED = "var(--interactive-muted)", r.INTERACTIVE_NORMAL = "var(--interactive-normal)", r.LEGACY_ANDROID_BLUR_OVERLAY_DEFAULT = "var(--legacy-android-blur-overlay-default)", r.LEGACY_ANDROID_BLUR_OVERLAY_ULTRA_THIN = "var(--legacy-android-blur-overlay-ultra-thin)", r.LEGACY_BLUR_FALLBACK_DEFAULT = "var(--legacy-blur-fallback-default)", r.LEGACY_BLUR_FALLBACK_ULTRA_THIN = "var(--legacy-blur-fallback-ultra-thin)", r.LIVE_STAGE_TILE_BORDER = "var(--live-stage-tile-border)", r.LOGO_PRIMARY = "var(--logo-primary)", r.MENTION_BACKGROUND = "var(--mention-background)", r.MENTION_FOREGROUND = "var(--mention-foreground)", r.MODAL_BACKGROUND = "var(--modal-background)", r.MODAL_FOOTER_BACKGROUND = "var(--modal-footer-background)", r.NAVIGATOR_HEADER_TINT = "var(--navigator-header-tint)", r.PANEL_BG = "var(--panel-bg)", r.POLLS_NORMAL_FILL_HOVER = "var(--polls-normal-fill-hover)", r.POLLS_NORMAL_IMAGE_BACKGROUND = "var(--polls-normal-image-background)", r.POLLS_VICTOR_FILL = "var(--polls-victor-fill)", r.POLLS_VOTED_FILL = "var(--polls-voted-fill)", r.PROFILE_GRADIENT_CARD_BACKGROUND = "var(--profile-gradient-card-background)", r.PROFILE_GRADIENT_MESSAGE_INPUT_BORDER = "var(--profile-gradient-message-input-border)", r.PROFILE_GRADIENT_NOTE_BACKGROUND = "var(--profile-gradient-note-background)", r.PROFILE_GRADIENT_OVERLAY = "var(--profile-gradient-overlay)", r.PROFILE_GRADIENT_OVERLAY_SYNCED_WITH_USER_THEME = "var(--profile-gradient-overlay-synced-with-user-theme)", r.PROFILE_GRADIENT_PROFILE_BODY_BACKGROUND_HOVER = "var(--profile-gradient-profile-body-background-hover)", r.PROFILE_GRADIENT_ROLE_PILL_BACKGROUND = "var(--profile-gradient-role-pill-background)", r.PROFILE_GRADIENT_ROLE_PILL_BORDER = "var(--profile-gradient-role-pill-border)", r.PROFILE_GRADIENT_SECTION_BOX = "var(--profile-gradient-section-box)", r.REDESIGN_ACTIVITY_CARD_BACKGROUND = "var(--redesign-activity-card-background)", r.REDESIGN_ACTIVITY_CARD_BACKGROUND_PRESSED = "var(--redesign-activity-card-background-pressed)", r.REDESIGN_ACTIVITY_CARD_BADGE_ICON = "var(--redesign-activity-card-badge-icon)", r.REDESIGN_ACTIVITY_CARD_BORDER = "var(--redesign-activity-card-border)", r.REDESIGN_ACTIVITY_CARD_OVERFLOW_BACKGROUND = "var(--redesign-activity-card-overflow-background)", r.REDESIGN_BUTTON_ACTIVE_BACKGROUND = "var(--redesign-button-active-background)", r.REDESIGN_BUTTON_ACTIVE_PRESSED_BACKGROUND = "var(--redesign-button-active-pressed-background)", r.REDESIGN_BUTTON_ACTIVE_TEXT = "var(--redesign-button-active-text)", r.REDESIGN_BUTTON_DANGER_BACKGROUND = "var(--redesign-button-danger-background)", r.REDESIGN_BUTTON_DANGER_PRESSED_BACKGROUND = "var(--redesign-button-danger-pressed-background)", r.REDESIGN_BUTTON_DANGER_TEXT = "var(--redesign-button-danger-text)", r.REDESIGN_BUTTON_DESTRUCTIVE_BACKGROUND = "var(--redesign-button-destructive-background)", r.REDESIGN_BUTTON_DESTRUCTIVE_PRESSED_BACKGROUND = "var(--redesign-button-destructive-pressed-background)", r.REDESIGN_BUTTON_DESTRUCTIVE_TEXT = "var(--redesign-button-destructive-text)", r.REDESIGN_BUTTON_OVERLAY_ALPHA_BACKGROUND = "var(--redesign-button-overlay-alpha-background)", r.REDESIGN_BUTTON_OVERLAY_ALPHA_PRESSED_BACKGROUND = "var(--redesign-button-overlay-alpha-pressed-background)", r.REDESIGN_BUTTON_OVERLAY_ALPHA_TEXT = "var(--redesign-button-overlay-alpha-text)", r.REDESIGN_BUTTON_OVERLAY_BACKGROUND = "var(--redesign-button-overlay-background)", r.REDESIGN_BUTTON_OVERLAY_PRESSED_BACKGROUND = "var(--redesign-button-overlay-pressed-background)", r.REDESIGN_BUTTON_OVERLAY_TEXT = "var(--redesign-button-overlay-text)", r.REDESIGN_BUTTON_POSITIVE_BACKGROUND = "var(--redesign-button-positive-background)", r.REDESIGN_BUTTON_POSITIVE_PRESSED_BACKGROUND = "var(--redesign-button-positive-pressed-background)", r.REDESIGN_BUTTON_POSITIVE_TEXT = "var(--redesign-button-positive-text)", r.REDESIGN_BUTTON_PRIMARY_ALT_BACKGROUND = "var(--redesign-button-primary-alt-background)", r.REDESIGN_BUTTON_PRIMARY_ALT_BORDER = "var(--redesign-button-primary-alt-border)", r.REDESIGN_BUTTON_PRIMARY_ALT_ON_BLURPLE_BACKGROUND = "var(--redesign-button-primary-alt-on-blurple-background)", r.REDESIGN_BUTTON_PRIMARY_ALT_ON_BLURPLE_BORDER = "var(--redesign-button-primary-alt-on-blurple-border)", r.REDESIGN_BUTTON_PRIMARY_ALT_ON_BLURPLE_PRESSED_BACKGROUND = "var(--redesign-button-primary-alt-on-blurple-pressed-background)", r.REDESIGN_BUTTON_PRIMARY_ALT_ON_BLURPLE_PRESSED_BORDER = "var(--redesign-button-primary-alt-on-blurple-pressed-border)", r.REDESIGN_BUTTON_PRIMARY_ALT_ON_BLURPLE_TEXT = "var(--redesign-button-primary-alt-on-blurple-text)", r.REDESIGN_BUTTON_PRIMARY_ALT_PRESSED_BACKGROUND = "var(--redesign-button-primary-alt-pressed-background)", r.REDESIGN_BUTTON_PRIMARY_ALT_PRESSED_BORDER = "var(--redesign-button-primary-alt-pressed-border)", r.REDESIGN_BUTTON_PRIMARY_ALT_PRESSED_TEXT = "var(--redesign-button-primary-alt-pressed-text)", r.REDESIGN_BUTTON_PRIMARY_ALT_TEXT = "var(--redesign-button-primary-alt-text)", r.REDESIGN_BUTTON_PRIMARY_BACKGROUND = "var(--redesign-button-primary-background)", r.REDESIGN_BUTTON_PRIMARY_ON_BLURPLE_PRESSED_TEXT = "var(--redesign-button-primary-on-blurple-pressed-text)", r.REDESIGN_BUTTON_PRIMARY_OVERLAY_BACKGROUND = "var(--redesign-button-primary-overlay-background)", r.REDESIGN_BUTTON_PRIMARY_OVERLAY_PRESSED_BACKGROUND = "var(--redesign-button-primary-overlay-pressed-background)", r.REDESIGN_BUTTON_PRIMARY_OVERLAY_TEXT = "var(--redesign-button-primary-overlay-text)", r.REDESIGN_BUTTON_PRIMARY_PRESSED_BACKGROUND = "var(--redesign-button-primary-pressed-background)", r.REDESIGN_BUTTON_PRIMARY_TEXT = "var(--redesign-button-primary-text)", r.REDESIGN_BUTTON_SECONDARY_BACKGROUND = "var(--redesign-button-secondary-background)", r.REDESIGN_BUTTON_SECONDARY_BORDER = "var(--redesign-button-secondary-border)", r.REDESIGN_BUTTON_SECONDARY_OVERLAY_BACKGROUND = "var(--redesign-button-secondary-overlay-background)", r.REDESIGN_BUTTON_SECONDARY_OVERLAY_PRESSED_BACKGROUND = "var(--redesign-button-secondary-overlay-pressed-background)", r.REDESIGN_BUTTON_SECONDARY_OVERLAY_TEXT = "var(--redesign-button-secondary-overlay-text)", r.REDESIGN_BUTTON_SECONDARY_PRESSED_BACKGROUND = "var(--redesign-button-secondary-pressed-background)", r.REDESIGN_BUTTON_SECONDARY_PRESSED_BORDER = "var(--redesign-button-secondary-pressed-border)", r.REDESIGN_BUTTON_SECONDARY_TEXT = "var(--redesign-button-secondary-text)", r.REDESIGN_BUTTON_SELECTED_BACKGROUND = "var(--redesign-button-selected-background)", r.REDESIGN_BUTTON_SELECTED_PRESSED_BACKGROUND = "var(--redesign-button-selected-pressed-background)", r.REDESIGN_BUTTON_SELECTED_TEXT = "var(--redesign-button-selected-text)", r.REDESIGN_BUTTON_TERTIARY_BACKGROUND = "var(--redesign-button-tertiary-background)", r.REDESIGN_BUTTON_TERTIARY_PRESSED_BACKGROUND = "var(--redesign-button-tertiary-pressed-background)", r.REDESIGN_BUTTON_TERTIARY_PRESSED_TEXT = "var(--redesign-button-tertiary-pressed-text)", r.REDESIGN_BUTTON_TERTIARY_TEXT = "var(--redesign-button-tertiary-text)", r.REDESIGN_CHANNEL_CATEGORY_NAME_TEXT = "var(--redesign-channel-category-name-text)", r.REDESIGN_CHANNEL_MESSAGE_PREVIEW_TEXT = "var(--redesign-channel-message-preview-text)", r.REDESIGN_CHANNEL_NAME_MUTED_TEXT = "var(--redesign-channel-name-muted-text)", r.REDESIGN_CHANNEL_NAME_TEXT = "var(--redesign-channel-name-text)", r.REDESIGN_CHAT_INPUT_BACKGROUND = "var(--redesign-chat-input-background)", r.REDESIGN_IMAGE_BUTTON_PRESSED_BACKGROUND = "var(--redesign-image-button-pressed-background)", r.REDESIGN_INPUT_CONTROL_ACTIVE_BG = "var(--redesign-input-control-active-bg)", r.REDESIGN_INPUT_CONTROL_SELECTED = "var(--redesign-input-control-selected)", r.REDESIGN_ONLY_BACKGROUND_ACTIVE = "var(--redesign-only-background-active)", r.REDESIGN_ONLY_BACKGROUND_DEFAULT = "var(--redesign-only-background-default)", r.REDESIGN_ONLY_BACKGROUND_OVERLAY = "var(--redesign-only-background-overlay)", r.REDESIGN_ONLY_BACKGROUND_RAISED = "var(--redesign-only-background-raised)", r.REDESIGN_ONLY_BACKGROUND_SUNKEN = "var(--redesign-only-background-sunken)", r.SCROLLBAR_AUTO_SCROLLBAR_COLOR_THUMB = "var(--scrollbar-auto-scrollbar-color-thumb)", r.SCROLLBAR_AUTO_SCROLLBAR_COLOR_TRACK = "var(--scrollbar-auto-scrollbar-color-track)", r.SCROLLBAR_AUTO_THUMB = "var(--scrollbar-auto-thumb)", r.SCROLLBAR_AUTO_TRACK = "var(--scrollbar-auto-track)", r.SCROLLBAR_THIN_THUMB = "var(--scrollbar-thin-thumb)", r.SCROLLBAR_THIN_TRACK = "var(--scrollbar-thin-track)", r.SPOILER_HIDDEN_BACKGROUND = "var(--spoiler-hidden-background)", r.SPOILER_REVEALED_BACKGROUND = "var(--spoiler-revealed-background)", r.STAGE_CARD_PILL_BG = "var(--stage-card-pill-bg)", r.STATUS_DANGER = "var(--status-danger)", r.STATUS_DANGER_BACKGROUND = "var(--status-danger-background)", r.STATUS_DANGER_TEXT = "var(--status-danger-text)", r.STATUS_DND = "var(--status-dnd)", r.STATUS_IDLE = "var(--status-idle)", r.STATUS_OFFLINE = "var(--status-offline)", r.STATUS_ONLINE = "var(--status-online)", r.STATUS_POSITIVE = "var(--status-positive)", r.STATUS_POSITIVE_BACKGROUND = "var(--status-positive-background)", r.STATUS_POSITIVE_TEXT = "var(--status-positive-text)", r.STATUS_SPEAKING = "var(--status-speaking)", r.STATUS_WARNING = "var(--status-warning)", r.STATUS_WARNING_BACKGROUND = "var(--status-warning-background)", r.STATUS_WARNING_TEXT = "var(--status-warning-text)", r.TEXT_BRAND = "var(--text-brand)", r.TEXT_DANGER = "var(--text-danger)", r.TEXT_LINK = "var(--text-link)", r.TEXT_LINK_LOW_SATURATION = "var(--text-link-low-saturation)", r.TEXT_LOW_CONTRAST = "var(--text-low-contrast)", r.TEXT_MESSAGE_PREVIEW_LOW_SAT = "var(--text-message-preview-low-sat)", r.TEXT_MUTED = "var(--text-muted)", r.TEXT_MUTED_ON_DEFAULT = "var(--text-muted-on-default)", r.TEXT_NORMAL = "var(--text-normal)", r.TEXT_POSITIVE = "var(--text-positive)", r.TEXT_PRIMARY = "var(--text-primary)", r.TEXT_SECONDARY = "var(--text-secondary)", r.TEXT_WARNING = "var(--text-warning)", r.TEXTBOX_MARKDOWN_SYNTAX = "var(--textbox-markdown-syntax)", r.THEME_LOCKED_BLUR_FALLBACK = "var(--theme-locked-blur-fallback)", r.THREAD_CHANNEL_SPINE = "var(--thread-channel-spine)", r.TOAST_BG = "var(--toast-bg)", r.TYPING_INDICATOR_BG = "var(--typing-indicator-bg)", r.USER_PROFILE_HEADER_OVERFLOW_BACKGROUND = "var(--user-profile-header-overflow-background)", r.VOICE_VIDEO_VIDEO_TILE_BACKGROUND = "var(--voice-video-video-tile-background)", r.VOICE_VIDEO_VIDEO_TILE_BLUR_FALLBACK = "var(--voice-video-video-tile-blur-fallback)", r.WHITE = "var(--white)", r.YOU_BAR_BG = "var(--you-bar-bg)", t.default = i }, 719711: function(e, t, n) { "use strict"; var i, r, s, a; n.r(t), n.d(t, { DOMAIN_MIGRATION_SUCCESS_KEY: function() { return o }, DomainMigrationEventType: function() { return i }, DomainMigrationMessageFrom: function() { return r }, extractMessage: function() { return u }, sendPostMessage: function() { return l } }), (s = i || (i = {}))[s.SKIP_MIGRATION = 0] = "SKIP_MIGRATION", s[s.SEND_DATA = 1] = "SEND_DATA", s[s.DATA_MIGRATED = 2] = "DATA_MIGRATED", s[s.DATA_MIGRATED_CONFIRMED = 3] = "DATA_MIGRATED_CONFIRMED", (a = r || (r = {}))[a.MIGRATION_SOURCE_DOMAIN = 0] = "MIGRATION_SOURCE_DOMAIN", a[a.MIGRATION_DESTINATION_DOMAIN = 1] = "MIGRATION_DESTINATION_DOMAIN"; let o = "domainMigrationSuccess"; function l(e, t, n) { let i = 0 === n ? window.GLOBAL_ENV.MIGRATION_DESTINATION_ORIGIN : window.GLOBAL_ENV.MIGRATION_SOURCE_ORIGIN; t.postMessage({ domainMigrationEvent: e }, i) } function u(e, t) { var n; return ! function(e, t) { let n = 0 === t ? window.GLOBAL_ENV.MIGRATION_DESTINATION_ORIGIN : window.GLOBAL_ENV.MIGRATION_SOURCE_ORIGIN; return e.origin === n && null != e.data.domainMigrationEvent && !0 }(e, t) ? null : null === (n = e.data) || void 0 === n ? void 0 : n.domainMigrationEvent } }, 330711: function(e, t, n) { "use strict"; n.r(t); var i = n("973361"), r = n("627420"); n("211604"); let s = new r.default({ initialLocale: i.parse(document.cookie).locale, getMessages: e => n("677762")("./messages/".concat(e).replace("./messages/", "./")), getLanguages: () => n("34859") }); s.addListener("locale", e => { document.cookie = "locale=".concat(e, ";path=/") }), t.default = s }, 79209: function(e) { e.exports = { Common: { OPEN_DISCORD: "Open Discord", SIGN_UP_NOW: "Sign Up Now" }, Footer: { READY_TO_TRY_DISCORD: "Ready to try Discord? It's free!", JOIN_OVER_PLAYERS_TODAY: "JOIN OVER {num} MILLION PLAYERS TODAY" }, Navigation: { HOME: "Home", FEATURES: "Features", NITRO: "Nitro", DOWNLOAD: "Download", PARTNERS: "Partners", BLOG: "Blog", MORE: "More", STATUS: "Status", FEEDBACK: "Feedback", HELP_AND_SUPPORT: "Help & Support", GUIDELINES: "Guidelines", HYPESQUAD: "HypeSquad", STREAMKIT: "StreamKit", COMPANY: "Company", JOBS: "Jobs", SECURITY: "Security", DEVELOPERS: "Developers", DOCUMENTATION: "Documentation", BRANDING: "Branding", LOGIN: "Login", OPEN: "Open", PRODUCT: "Product", RESOURCES: "Resources", APPLICATIONS: "Applications", TERMS: "Terms", PRIVACY: "Privacy", ABOUT: "About", VERIFICATION: "Verification", RICH_PRESENCE: "Rich Presence", PRESS_INQUIRIES: "Press Inquiries", OPEN_SOURCE: "Open Source", SUPPORT: "Support", DEVELOPER_PORTAL: "Developer Portal", COMMUNITY: "Community", SAFETY: "Safety", SAFETY_CENTER: "Safety Center", MOD_ACADEMY: "Mod Academy", DISCOVER: "Discover", CAREERS: "Careers" }, NumberAbbreviations: { MILLION: "{num}M", THOUSAND: "{num}K" }, DynamicLinks: { IOS_APP_PREVIEW_DESCRIPTION: "Your place to talk with communities and friends." }, Storefront: { BENEFITS_SUMMARY: "{count, plural, one {# exclusive benefit} other {# exclusive benefits}}", BENEFITS_TITLE: "Exclusive to this tier", PRODUCT_DETAILS: "Product Details", SERVER_SUBSCRIPTION: "Server subscription", USER_SUBSCRIPTION: "Personal subscription", MORE_BENEFITS: "+ {count, plural, one {# more benefit} other {# more benefits}}" } } }, 912860: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DevToolsListener: function() { return o } }); var i, r, s = n("836560"); (i = r || (r = {})).VERTICAL = "vertical", i.HORIZONTAL = "horizontal"; let a = { open: !1, orientation: null }; class o extends s.EventEmitter { get orientations() { return Object.values(r) } get state() { return a } check() { let e = function() { try { return window.outerWidth - window.innerWidth } catch (e) { return 0 } }() > 160, t = function() { try { return window.outerHeight - window.innerHeight } catch (e) { return 0 } }() > 160, n = e ? "vertical" : "horizontal"; if (!(t && e) && (e || t)) { let e = a.open; a = { open: !0, orientation: n }, (!e || a.orientation !== n) && this.emit("changed", a) } else a.open && (a.open = !1, this.emit("changed", a)) } constructor() { super(), setInterval(() => this.check(), 500) } } }, 944611: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { ElementPool: function() { return r } }), n("653041"); class r { getElement() { return 0 === this._elements.length ? this._createElement() : this._elements.pop() } poolElement(e) { this._cleanElement(e), this._elements.push(e) } clearPool() { this._elements.length = 0 } constructor(e, t) { i(this, "_elements", void 0), i(this, "_createElement", void 0), i(this, "_cleanElement", void 0), this._elements = [], this._createElement = e, this._cleanElement = t } } }, 873546: function(e, t, n) { "use strict"; n.r(t), n.d(t, { isIOSWeb: function() { return m }, isMobile: function() { return A }, isTablet: function() { return h } }), n("47120"); var i, r, s, a, o, l, u, d, _, c, E = n("264344"), I = n.n(E); let T = new Set(["iPad", "Kindle", "Kindle Fire", "Nook", "PlayBook"]), f = new Set(["Android", "iOS", "Windows Phone"]), S = (null === (r = window) || void 0 === r ? void 0 : null === (i = r.navigator) || void 0 === i ? void 0 : i.platform) === "MacIntel" && void 0 !== (null === (a = window) || void 0 === a ? void 0 : null === (s = a.navigator) || void 0 === s ? void 0 : s.standalone) && (null === (l = window) || void 0 === l ? void 0 : null === (o = l.navigator) || void 0 === o ? void 0 : o.maxTouchPoints) > 1, h = T.has(null !== (_ = I().product) && void 0 !== _ ? _ : "") || S, A = !h && f.has(null !== (c = null === I() || void 0 === I() ? void 0 : null === (u = I().os) || void 0 === u ? void 0 : u.family) && void 0 !== c ? c : ""), m = (null === I() || void 0 === I() ? void 0 : null === (d = I().os) || void 0 === d ? void 0 : d.family) === "iOS" }, 24917: function(e, t, n) { "use strict"; function i(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } n.r(t), n.d(t, { RPCError: function() { return r } }), n("411104"); class r extends Error { constructor(e, t) { super(t), i(this, "errorCode", void 0), i(this, "closeCode", void 0), i(this, "code", void 0), i(this, "message", void 0), i(this, "name", void 0), "closeCode" in e ? (this.code = e.closeCode, this.closeCode = e.closeCode) : (this.code = e.errorCode, this.errorCode = e.errorCode), this.message = t, this.name = "RPCError" } } }, 213919: function(e, t, n) { "use strict"; let i, r; n.r(t), n.d(t, { encryptAndStoreTokens: function() { return R }, getToken: function() { return m }, hideToken: function() { return p }, init: function() { return A }, removeToken: function() { return C }, setToken: function() { return N }, showToken: function() { return O } }), n("47120"), n("724458"); var s = n("433517"), a = n("231338"); let o = "dQw4w9WgXcQ:"; function l(e) { return [...e].reduce((e, t) => { let [n, i] = t; return e[n] = i, e }, {}) } let u = null, d = window.DiscordNative; null != d && (u = d.safeStorage); let _ = !1, c = {}, E = {}, I = !1, T = !1; function f() { if (I) { s.Storage.remove(a.TOKEN_KEY), s.Storage.remove(a.TOKENS_KEY); return } null != r ? s.Storage.set(a.TOKEN_KEY, r) : s.Storage.remove(a.TOKEN_KEY), s.Storage.set(a.TOKENS_KEY, E) } function S(e) { return null == e || 0 === e.length ? { decryptedToken: null, wasEncrypted: !1 } : (null == u ? void 0 : u.isEncryptionAvailable()) && e.startsWith(o) ? { decryptedToken: u.decryptString(e.substring(o.length)), wasEncrypted: !0 } : { decryptedToken: e, wasEncrypted: !1 } } function h(e) { return (null == u ? void 0 : u.isEncryptionAvailable()) && !e.startsWith(o) ? "".concat(o).concat(u.encryptString(e)) : e } function A() { if (T) return; r = s.Storage.get(a.TOKEN_KEY), E = s.Storage.get(a.TOKENS_KEY) || {}; let { decryptedToken: e, wasEncrypted: t } = S(r); _ = t, i = e, c = l(Object.entries(E).map(e => { let [t, n] = e, { decryptedToken: i, wasEncrypted: r } = S(n); return _ = r || _, [t, i] }).filter(e => { let [t, n] = e; return null != n })), T = !0 } function m(e) { return (A(), null != e) ? c[e] : i } function N(e, t) { if (null == e) { C(t); return } i = e, null != t && (c[t] = e), _ ? R() : (r = i, E = c, f()) } function p() { !I && (I = !0, f()) } function O() { I && (I = !1, f()) } function C(e) { let t = i; return null != e && (t = c[e], delete c[e], delete E[e]), t === i && (i = null, r = null), f(), null != t } function R() { (null == u ? void 0 : u.isEncryptionAvailable()) ? (null != i && (r = h(i)), E = l(Object.entries(c).map(e => { let [t, n] = e; return [t, h(n)] })), _ = !0) : (r = i, E = c), f() } }, 902866: function(e, t, n) { "use strict"; n.r(t), n.d(t, { UserDefenses: function() { return a } }); var i = n("912860"), r = n("873546"); function s(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0, n = "" !== e.Messages.XSSDefenses ? e.Messages.XSSDefenses : e.Messages; null != n.SELF_XSS_HEADER && (console.log("%c".concat(n.SELF_XSS_HEADER), "color: #5865f2; -webkit-text-stroke: 2px black; font-size: 72px; font-weight: bold;"), console.log("%c".concat(n.SELF_XSS_LINE_1), "font-size: 16px;"), console.log("%c".concat(n.SELF_XSS_LINE_2), "font-size: 18px; font-weight: bold; color: red;"), t >= 4 ? (console.log("%c".concat(n.SELF_XSS_LINE_3), "font-size: 16px;"), console.log("%c".concat(n.SELF_XSS_LINE_4.format({ url: "".concat(location.protocol).concat(window.GLOBAL_ENV.MARKETING_ENDPOINT, "/jobs") })), "font-size: 16px;")) : setTimeout(() => s(e, t + 1), 1e3)) } function a(e, t, n) { if (null != n && "0.0.0" === n.remoteApp.getVersion()) return; let a = new i.DevToolsListener; if (null != n) { if (null != n.window.setDevtoolsCallbacks) n.window.setDevtoolsCallbacks(() => { t.hideToken(), s(e) }, () => { t.showToken() }); else { let i = n.window.webContents; i.removeAllListeners("devtools-opened"), i.on("devtools-opened", () => { t.hideToken(), s(e) }), i.on("devtools-closed", t.showToken) } } else !r.isMobile && !r.isTablet && a.on("changed", n => { let { open: i } = n; i ? (t.hideToken(), s(e)) : t.showToken() }); window.addEventListener("beforeunload", e => { e.isTrusted && t.showToken() }) } }, 187753: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { IconType: function() { return i } }), (r = i || (i = {}))[r.STORE_ASSET = 1] = "STORE_ASSET", r[r.EMOJI = 2] = "EMOJI" }, 818405: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { AppCrashedReasons: function() { return i } }), n("47120"), (r = i || (i = {})).UNHANDLED_NATIVE_ERROR = "unhandled_native_error", r.UNHANDLED_JS_ERROR = "unhandled_js_error", r.SOCKET_CRASHED = "socket_crashed" }, 373793: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ApplicationIntegrationType: function() { return i } }), (r = i || (i = {}))[r.GUILD_INSTALL = 0] = "GUILD_INSTALL", r[r.USER_INSTALL = 1] = "USER_INSTALL" }, 480189: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ApplicationOverlayMethodFlags: function() { return i } }), (r = i || (i = {}))[r.DEFAULT = 0] = "DEFAULT", r[r.OUT_OF_PROCESS = 1] = "OUT_OF_PROCESS" }, 51407: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { AudioSettingsDefaultVolumes: function() { return i } }), (r = i || (i = {}))[r.USER = 100] = "USER", r[r.STREAM = 18] = "STREAM" }, 180650: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { CollectiblesCategorySkuId: function() { return i } }), n("47120"), (r = i || (i = {})).FANTASY = "1144003461608906824", r.ANIME = "1144302037593497701", r.BREAKFAST = "1144054000099012659", r.DISXCORE = "1144058340327047249", r.HALLOWEEN = "1157410718711304313", r.FALL = "1157406994873991284", r.WINTER = "1174459301239197856", r.MONSTERS = "1179493515038818325", r.CYBERPUNK = "1197342727608746044", r.LUNAR_NEW_YEAR = "1202069709281828935", r.ELEMENTS = "1207046915880124426", r.ANIME_V2 = "1212565175790473246", r.SPECIAL_EVENTS = "1217175518781243583", r.SPRINGTOONS = "1217622942175727736", r.SHY = "1220513972189663413", r.LOFI_VIBES = "1228243842684162121", r.GALAXY = "1232029045928099922", r.FEELIN_RETRO = "1237649643073044491", r.PIRATES = "1237653589896200272", r.ARCADE = "1245086656973901894" }, 979554: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { CollectiblesItemType: function() { return i } }), (r = i || (i = {}))[r.NONE = 100] = "NONE", r[r.AVATAR_DECORATION = 0] = "AVATAR_DECORATION", r[r.PROFILE_EFFECT = 1] = "PROFILE_EFFECT", r[r.BUNDLE = 1e3] = "BUNDLE" }, 434179: function(e, t, n) { "use strict"; var i; n.r(t), n.d(t, { ConsoleCommands: function() { return i } }), n("47120"), (i || (i = {})).CONNECT_VOICE = "connect_voice" }, 771649: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ConsoleHandoffType: function() { return i } }), n("47120"), (r = i || (i = {})).TRANSFER_EXISTING_CALL = "TRANSFER_EXISTING_CALL", r.CREATE_NEW_CALL = "CREATE_NEW_CALL" }, 804098: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { DesignIds: function() { return i } }), (r = i || (i = {}))[r.CLASSIC_IA = 0] = "CLASSIC_IA", r[r.DESIGN_IA = 1] = "DESIGN_IA", r[r.DESIGN_TABS_IA = 2] = "DESIGN_TABS_IA", r[r.YOU_BAR_IA = 3] = "YOU_BAR_IA" }, 438954: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { DismissibleQuestContentFlags: function() { return i } }), (r = i || (i = {}))[r.GIFT_INVENTORY_SETTINGS_BADGE = 1] = "GIFT_INVENTORY_SETTINGS_BADGE", r[r.QUEST_BAR = 2] = "QUEST_BAR", r[r.ACTIVITY_PANEL = 4] = "ACTIVITY_PANEL", r[r.QUEST_LIVE_STREAM = 8] = "QUEST_LIVE_STREAM" }, 848246: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { EntitlementFeatureNames: function() { return i } }), (r = i || (i = {})).ANIMATED_EMOJIS = "animatedEmojis", r.EMOJIS_EVERYWHERE = "emojisEverywhere", r.STICKERS_EVERYWHERE = "stickersEverywhere", r.SOUNDBOARD_EVERYWHERE = "soundboardEverywhere", r.ANIMATED_AVATAR = "animatedAvatar", r.CUSTOM_DISCRIMINATOR = "customDiscriminator", r.PREMIUM_GUILD_MEMBER_PROFILE = "premiumGuildMemberProfile", r.PROFILE_PREMIUM_FEATURES = "profilePremiumFeatures", r.STREAM_MID_QUALITY = "streamMidQuality", r.STREAM_HIGH_QUALITY = "streamHighQuality", r.VIDEO_FILTER_ASSETS = "videoFilterAssets", r.INCREASED_FILE_UPLOAD_SIZE = "increasedFileUploadSize", r.INCREASED_GUILD_LIMIT = "increasedGuildLimit", r.INCREASED_MESSAGE_LENGTH = "increasedMessageLength", r.NITRO_REACTION_TOGGLE = "nitroReactionToggle", r.CLIENT_THEMES = "clientThemes", r.PREMIUM_COLLECTIBLES = "premiumCollectibles", r.CUSTOM_CALL_SOUNDS = "customCallSounds", r.CUSTOM_NOTIFICATION_SOUNDS = "customNotificationSounds" }, 39621: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { EphemeralMessageReason: function() { return i } }), (r = i || (i = {}))[r.NONE = 0] = "NONE", r[r.FEATURE_LIMITED = 1] = "FEATURE_LIMITED", r[r.GUILD_FEATURE_LIMITED = 2] = "GUILD_FEATURE_LIMITED", r[r.USER_FEATURE_LIMITED = 3] = "USER_FEATURE_LIMITED", r[r.SLOWMODE = 4] = "SLOWMODE", r[r.RATE_LIMIT = 5] = "RATE_LIMIT", r[r.CANNOT_MESSAGE_USER = 6] = "CANNOT_MESSAGE_USER", r[r.USER_VERIFICATION_LEVEL = 7] = "USER_VERIFICATION_LEVEL", r[r.CANNOT_UNARCHIVE_THREAD = 8] = "CANNOT_UNARCHIVE_THREAD", r[r.CANNOT_JOIN_THREAD = 9] = "CANNOT_JOIN_THREAD", r[r.MISSING_PERMISSIONS = 10] = "MISSING_PERMISSIONS", r[r.CANNOT_SEND_ATTACHMENTS = 11] = "CANNOT_SEND_ATTACHMENTS", r[r.CANNOT_SEND_EMBEDS = 12] = "CANNOT_SEND_EMBEDS", r[r.CANNOT_SEND_STICKERS = 13] = "CANNOT_SEND_STICKERS", r[r.AUTOMOD_BLOCKED = 14] = "AUTOMOD_BLOCKED", r[r.HARMFUL_LINK = 15] = "HARMFUL_LINK", r[r.CANNOT_USE_COMMAND = 16] = "CANNOT_USE_COMMAND", r[r.BETA_GUILD_SIZE = 17] = "BETA_GUILD_SIZE" }, 587158: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ErrorLevels: function() { return i } }), n("47120"), (r = i || (i = {})).FATAL = "fatal", r.ERROR = "error", r.WARNING = "warning", r.LOG = "log", r.INFO = "info", r.DEBUG = "debug" }, 754700: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { FirstPartyQuestTaskTypes: function() { return i } }), n("47120"), (r = i || (i = {})).STREAM_ON_DESKTOP = "STREAM_ON_DESKTOP", r.PLAY_ON_DESKTOP = "PLAY_ON_DESKTOP", r.PLAY_ON_XBOX = "PLAY_ON_XBOX", r.PLAY_ON_PLAYSTATION = "PLAY_ON_PLAYSTATION" }, 313361: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ForumLayout: function() { return i } }), n("47120"), (r = i || (i = {}))[r.DEFAULT = 0] = "DEFAULT", r[r.LIST = 1] = "LIST", r[r.GRID = 2] = "GRID" }, 536402: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { GuildFeedItemTypes: function() { return i } }), n("47120"), (r = i || (i = {})).MESSAGE = "message", r.FORUM_POST = "forum_post", r.MESSAGE_BUNDLE = "message_bundle", r.CONVERSATION = "conversation" }, 974900: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { GuildFeedPreferenceEntityTypes: function() { return i } }), n("47120"), (r = i || (i = {})).MESSAGE = "message", r.CHANNEL = "channel", r.USER = "user" }, 106831: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { GuildFeedPreferenceOptions: function() { return i } }), n("47120"), (r = i || (i = {}))[r.HIDDEN = 1] = "HIDDEN", r[r.DEMOTED = 2] = "DEMOTED" }, 286379: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { MetricEvents: function() { return i } }), n("47120"), (r = i || (i = {})).APP_CRASHED = "app_crashed", r.SOCKET_CRASHED = "socket_crashed", r.MESSAGE_REQUEST_VIEW = "message_request_view", r.SPAM_MESSAGE_REQUEST_VIEW = "spam_message_request_view", r.SPAM_MESSAGE_REQUEST_ERROR_VIEW = "spam_message_request_error_view", r.FAMILY_CENTER_VIEW = "family_center_view", r.SAFETY_HUB_VIEW = "safety_hub_view", r.APPEAL_INGESTION_VIEW = "appeal_ingestion_view", r.MESSAGE_REQUEST_COUNT_DRIFT = "message_request_count_drift", r.FORUM_CHANNEL_GRID_AUTO_ENABLED = "forum_channel_grid_auto_enabled", r.REMIX_FONT_LOADING_ERROR = "remix_font_loading_error", r.AFK_NOT_IDLE = "afk_not_idle", r.CAPTCHA_EVENT = "captcha_event", r.SAFETY_WARNING_VIEW = "safety_warning_view", r.SAFETY_WARNING_MODAL_VIEW = "safety_warning_modal_view", r.EXPLICIT_MEDIA_SCAN_CLIENT_TIMED_OUT = "explicit_media_scan_client_timed_out", r.EXPLICIT_MEDIA_SCAN_CLIENT_TIMING = "explicit_media_scan_client_timing", r.EXPLICIT_MEDIA_SENDER_FP_BUTTON_VIEW = "explicit_media_sender_fp_button_view", r.EXPLICIT_MEDIA_PENDING_MESSAGE_LOADED = "explicit_media_pending_message_loaded", r.EXPLICIT_MEDIA_PENDING_MESSAGE_LOADED_V2 = "explicit_media_pending_message_loaded_v2", r.EXPLICIT_MEDIA_SCAN_CLIENT_TIMED_OUT_DISTRIBUTION = "explicit_media_scan_client_timed_out_distribution", r.EXPLICIT_MEDIA_SCAN_CLIENT_TIMEOUT_CREATE = "explicit_media_scan_client_timeout_create", r.QUEST_CONTENT_IMPRESSION = "quest_content_impression", r.OTA_CHECK_ATTEMPT = "OtaCheckAttempt", r.OTA_ASSET_DOWNLOAD_ATTEMPT = "OtaAssetDownloadAttempt", r.OTA_UPDATE_CHECK = "ota_update_check", r.OTA_ASSET_DOWNLOAD = "ota_asset_download", r.DEBUG_OTA_200_TIMEOUT = "debug_ota_200_timeout", r.IMAGE_LOAD_ERROR = "image_load_error", r.DM_SETTINGS_UPSELL_VIEW = "dm_settings_upsell_view" }, 214627: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { Notifications: function() { return i } }), (r = i || (i = {}))[r.StreamNotificationsGuildMaxSize = 50] = "StreamNotificationsGuildMaxSize" }, 243814: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { OAuth2Scopes: function() { return i } }), n("47120"), (r = i || (i = {})).IDENTIFY = "identify", r.EMAIL = "email", r.CONNECTIONS = "connections", r.GUILDS = "guilds", r.GUILDS_JOIN = "guilds.join", r.GUILDS_MEMBERS_READ = "guilds.members.read", r.GDM_JOIN = "gdm.join", r.BOT = "bot", r.RPC = "rpc", r.RPC_NOTIFICATIONS_READ = "rpc.notifications.read", r.RPC_VOICE_READ = "rpc.voice.read", r.RPC_VOICE_WRITE = "rpc.voice.write", r.RPC_VIDEO_READ = "rpc.video.read", r.RPC_VIDEO_WRITE = "rpc.video.write", r.RPC_SCREENSHARE_READ = "rpc.screenshare.read", r.RPC_SCREENSHARE_WRITE = "rpc.screenshare.write", r.RPC_ACTIVITIES_WRITE = "rpc.activities.write", r.WEBHOOK_INCOMING = "webhook.incoming", r.MESSAGES_READ = "messages.read", r.APPLICATIONS_BUILDS_UPLOAD = "applications.builds.upload", r.APPLICATIONS_BUILDS_READ = "applications.builds.read", r.APPLICATIONS_COMMANDS = "applications.commands", r.APPLICATIONS_COMMANDS_PERMISSIONS_UPDATE = "applications.commands.permissions.update", r.APPLICATIONS_COMMANDS_UPDATE = "applications.commands.update", r.APPLICATIONS_STORE_UPDATE = "applications.store.update", r.APPLICATIONS_ENTITLEMENTS = "applications.entitlements", r.ACTIVITIES_READ = "activities.read", r.ACTIVITIES_WRITE = "activities.write", r.RELATIONSHIPS_READ = "relationships.read", r.RELATIONSHIPS_WRITE = "relationships.write", r.VOICE = "voice", r.DM_CHANNELS_READ = "dm_channels.read", r.ROLE_CONNECTIONS_WRITE = "role_connections.write", r.PRESENCES_READ = "presences.read", r.PRESENCES_WRITE = "presences.write", r.OPENID = "openid", r.DM_CHANNELS_MESSAGES_READ = "dm_channels.messages.read", r.DM_CHANNELS_MESSAGES_WRITE = "dm_channels.messages.write", r.GATEWAY_CONNECT = "gateway.connect", r.ACCOUNT_GLOBAL_NAME_UPDATE = "account.global_name.update" }, 263568: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { PollLayoutTypes: function() { return i } }), (r = i || (i = {}))[r.UNKNOWN = 0] = "UNKNOWN", r[r.DEFAULT = 1] = "DEFAULT", r[r.IMAGE_ONLY_ANSWERS = 2] = "IMAGE_ONLY_ANSWERS" }, 636977: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { QuestContent: function() { return i } }), (r = i || (i = {}))[r.GIFT_INVENTORY_SETTINGS_BADGE = 0] = "GIFT_INVENTORY_SETTINGS_BADGE", r[r.QUEST_BAR = 1] = "QUEST_BAR", r[r.QUEST_INVENTORY_CARD = 2] = "QUEST_INVENTORY_CARD", r[r.QUESTS_EMBED = 3] = "QUESTS_EMBED", r[r.ACTIVITY_PANEL = 4] = "ACTIVITY_PANEL", r[r.QUEST_LIVE_STREAM = 5] = "QUEST_LIVE_STREAM", r[r.MEMBERS_LIST = 6] = "MEMBERS_LIST", r[r.QUEST_BADGE = 7] = "QUEST_BADGE", r[r.GIFT_INVENTORY_FOR_YOU = 8] = "GIFT_INVENTORY_FOR_YOU", r[r.GIFT_INVENTORY_OTHER = 9] = "GIFT_INVENTORY_OTHER", r[r.QUEST_BAR_V2 = 10] = "QUEST_BAR_V2", r[r.QUEST_HOME_DESKTOP = 11] = "QUEST_HOME_DESKTOP", r[r.QUEST_HOME_MOBILE = 12] = "QUEST_HOME_MOBILE" }, 551910: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { QuestRewardAssignmentMethods: function() { return i } }), (r = i || (i = {}))[r.ALL = 1] = "ALL", r[r.TIERED = 2] = "TIERED" }, 687522: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { QuestRewardCodePlatforms: function() { return i } }), (r = i || (i = {}))[r.CROSS_PLATFORM = 0] = "CROSS_PLATFORM", r[r.XBOX = 1] = "XBOX", r[r.PLAYSTATION = 2] = "PLAYSTATION", r[r.SWITCH = 3] = "SWITCH", r[r.PC = 4] = "PC" }, 887003: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { QuestRewardTypes: function() { return i } }), (r = i || (i = {}))[r.REWARD_CODE = 1] = "REWARD_CODE", r[r.IN_GAME = 2] = "IN_GAME", r[r.COLLECTIBLE = 3] = "COLLECTIBLE" }, 742635: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { QuestTaskConfigTypes: function() { return i } }), (r = i || (i = {}))[r.FIRST_PARTY = 1] = "FIRST_PARTY", r[r.THIRD_PARTY = 2] = "THIRD_PARTY" }, 670081: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { QuestVariants: function() { return i } }), (r = i || (i = {}))[r.POST_ENROLLMENT_CTA = 1] = "POST_ENROLLMENT_CTA", r[r.PLAYTIME_TASK = 2] = "PLAYTIME_TASK", r[r.QUEST_BAR_V2 = 3] = "QUEST_BAR_V2", r[r.EXCLUDE_MINORS_FROM_TARGETING = 4] = "EXCLUDE_MINORS_FROM_TARGETING", r[r.EXCLUDE_RUSSIA = 5] = "EXCLUDE_RUSSIA", r[r.IN_HOUSE_CONSOLE_QUEST = 6] = "IN_HOUSE_CONSOLE_QUEST", r[r.MOBILE_CONSOLE_QUEST = 7] = "MOBILE_CONSOLE_QUEST" }, 758846: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { Quests: function() { return i } }), (r = i || (i = {}))[r.ConsecutiveHeartbeatPeriodMinutes = 2] = "ConsecutiveHeartbeatPeriodMinutes", r[r.StatusLookbackPeriodDays = 30] = "StatusLookbackPeriodDays" }, 404097: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ReleaseChannelsSets: function() { return s } }), n("47120"), (r = i || (i = {})).CANARY_RELEASE = "canaryRelease", r.BETA_RELEASE = "betaRelease", r.GOOGLE_RELEASE = "googleRelease", r.CANARY = "canary", r.PTB = "ptb", r.STABLE = "stable", r.ADHOC = "adhoc", r.STAGING = "staging", r.DEVELOPMENT = "development", r.N_A = "N/A"; let s = { ALL: new Set(["N/A", "adhoc", "betaRelease", "canary", "canaryRelease", "development", "googleRelease", "ptb", "stable", "staging"]) } }, 697988: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ThreadSearchTagSetting: function() { return i } }), n("47120"), (r = i || (i = {})).MATCH_ALL = "match_all", r.MATCH_SOME = "match_some" }, 683860: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { ThreadSortOrder: function() { return i } }), n("47120"), (r = i || (i = {}))[r.LATEST_ACTIVITY = 0] = "LATEST_ACTIVITY", r[r.CREATION_DATE = 1] = "CREATION_DATE" }, 127437: function(e, t, n) { "use strict"; var i, r; n.r(t), n.d(t, { UserGameApplicationSessionDuration: function() { return i } }), (r = i || (i = {}))[r.MIN_DURATION_SECS = 300] = "MIN_DURATION_SECS" }, 724522: function(e, t, n) { "use strict"; n.r(t), n("956067") }, 58654: function(e, t, n) { "use strict"; function i() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; for (let e of t) if (null != e && e) return e } n.r(t), n.d(t, { getFirstTruthyValue: function() { return i } }), n("47120") }, 436620: function(e, t, n) { "use strict"; n.r(t), n.d(t, { BROWSER_SUPPORTS_CONNECTION_STATE: function() { return E }, BROWSER_SUPPORTS_DIAGNOSTICS: function() { return c }, BROWSER_SUPPORTS_UNIFIED_PLAN: function() { return _ }, BROWSER_SUPPORTS_VIDEO: function() { return d }, BROWSER_SUPPORTS_VOICE: function() { return u }, IS_APP_COMPATIBLE_BROWSER: function() { return l } }); var i, r = n("264344"), s = n.n(r); let a = parseInt(null !== (i = s().version) && void 0 !== i ? i : "0", 10), o = void 0 !== s().ua && s().ua.indexOf("OculusBrowser") > -1, l = (() => { if (null == window.WebSocket) return !1; switch (s().name) { case "IE": case "Microsoft Edge": return a >= 15; default: return !0 } })(), u = o || "Firefox" === s().name && a >= 80 || "Chrome" === s().name && a >= 37 || "Opera" === s().name && a >= 66 || "Node.js" === s().name && a >= 6 || "Electron" === s().name && a >= 1 || "Safari" === s().name && a >= 13 || "Microsoft Edge" === s().name && a >= 37, d = "Chrome" === s().name || "Safari" === s().name || "Firefox" === s().name && a >= 80 || "Opera" === s().name || "Microsoft Edge" === s().name, _ = o || "Firefox" === s().name && a >= 73 || "Safari" === s().name && a >= 13 || "Chrome" === s().name && a >= 80 || "Microsoft Edge" === s().name && a >= 80, c = "Chrome" === s().name && a >= 58 || "Safari" === s().name && a >= 15 || "Firefox" === s().name && a >= 108, E = "Chrome" === s().name && a >= 72 || "Safari" === s().name && a >= 11 || "Opera" === s().name && a >= 60 || "Microsoft Edge" === s().name && a >= 79 }, 852229: function(e, t, n) { "use strict"; function i(e) { let t = document.body; if (null == t) throw Error("[Utils] ClipboardUtils.copy(): assert failed: document.body != null"); let n = document.createRange(), i = window.getSelection(), r = document.createElement("textarea"); r.value = e, r.contentEditable = "true", r.style.visibility = "none", t.appendChild(r), n.selectNodeContents(r), null == i || i.removeAllRanges(), null == i || i.addRange(n), r.focus(), r.setSelectionRange(0, e.length); let s = document.execCommand("copy"); return t.removeChild(r), s } n.r(t), n.d(t, { copy: function() { return i } }), n("411104") }, 374470: function(e, t, n) { "use strict"; function i(e, t) { var n, i; if (null == e) return !1; let r = null == e ? void 0 : null === (n = e.ownerDocument) || void 0 === n ? void 0 : n.defaultView; if (null == r) return console.warn("Unable to determine render window for element", e), !1; let s = null !== (i = null == t ? void 0 : t.name) && void 0 !== i ? i : "Element", a = r[s]; return null == a ? (console.warn('Unable to find element constructor "'.concat(s, '" in'), r), !1) : e instanceof a } n.r(t), n.d(t, { isElement: function() { return i } }) }, 807864: function(e, t, n) { "use strict"; function i(e) { let t = Promise.resolve(null), n = [], i = !1, { onContention: r, onContentionResolved: s, onTimeout: a, timeoutMs: o } = e, l = function(e, l) { n.length > 0 ? (r(l, n), i = !0) : i && (s(), i = !1), n.push(l); let u = null == o || null == a ? null : setTimeout(() => a(l, n), o); return new Promise((i, r) => { t = t.then(e).then(i, r).then(() => n.splice(0, 1)), null != u && (t = t.then(() => clearTimeout(u))) }) }; return l.isMutexHeld = () => n.length > 0, l.getLockHolders = () => n, l } n.r(t), n.d(t, { createObservableLock: function() { return i } }), n("653041") }, 221513: function(e, t, n) { "use strict"; n.r(t), n.d(t, { formatPrice: function() { return a } }), n("411104"); var i = n("567198"), r = n.n(i), s = n("231338"); let a = function(e, t, n) { let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, { convertToMajorUnits: r = !0, ...s } = i; return Intl.NumberFormat(n, { style: "currency", currency: t, ...s }).format(r ? l(e, t) : e) }, o = { [s.CurrencyCodes.AED]: 2, [s.CurrencyCodes.AFN]: 2, [s.CurrencyCodes.ALL]: 2, [s.CurrencyCodes.AMD]: 2, [s.CurrencyCodes.ANG]: 2, [s.CurrencyCodes.AOA]: 2, [s.CurrencyCodes.ARS]: 2, [s.CurrencyCodes.AUD]: 2, [s.CurrencyCodes.AWG]: 2, [s.CurrencyCodes.AZN]: 2, [s.CurrencyCodes.BAM]: 2, [s.CurrencyCodes.BBD]: 2, [s.CurrencyCodes.BDT]: 2, [s.CurrencyCodes.BGN]: 2, [s.CurrencyCodes.BHD]: 3, [s.CurrencyCodes.BIF]: 0, [s.CurrencyCodes.BMD]: 2, [s.CurrencyCodes.BND]: 2, [s.CurrencyCodes.BOB]: 2, [s.CurrencyCodes.BOV]: 2, [s.CurrencyCodes.BRL]: 2, [s.CurrencyCodes.BSD]: 2, [s.CurrencyCodes.BTN]: 2, [s.CurrencyCodes.BWP]: 2, [s.CurrencyCodes.BYR]: 0, [s.CurrencyCodes.BYN]: 2, [s.CurrencyCodes.BZD]: 2, [s.CurrencyCodes.CAD]: 2, [s.CurrencyCodes.CDF]: 2, [s.CurrencyCodes.CHE]: 2, [s.CurrencyCodes.CHF]: 2, [s.CurrencyCodes.CHW]: 2, [s.CurrencyCodes.CLF]: 0, [s.CurrencyCodes.CLP]: 0, [s.CurrencyCodes.CNY]: 2, [s.CurrencyCodes.COP]: 2, [s.CurrencyCodes.COU]: 2, [s.CurrencyCodes.CRC]: 2, [s.CurrencyCodes.CUC]: 2, [s.CurrencyCodes.CUP]: 2, [s.CurrencyCodes.CVE]: 2, [s.CurrencyCodes.CZK]: 2, [s.CurrencyCodes.DJF]: 0, [s.CurrencyCodes.DKK]: 2, [s.CurrencyCodes.DOP]: 2, [s.CurrencyCodes.DZD]: 2, [s.CurrencyCodes.EGP]: 2, [s.CurrencyCodes.ERN]: 2, [s.CurrencyCodes.ETB]: 2, [s.CurrencyCodes.EUR]: 2, [s.CurrencyCodes.FJD]: 2, [s.CurrencyCodes.FKP]: 2, [s.CurrencyCodes.GBP]: 2, [s.CurrencyCodes.GEL]: 2, [s.CurrencyCodes.GHS]: 2, [s.CurrencyCodes.GIP]: 2, [s.CurrencyCodes.GMD]: 2, [s.CurrencyCodes.GNF]: 0, [s.CurrencyCodes.GTQ]: 2, [s.CurrencyCodes.GYD]: 2, [s.CurrencyCodes.HKD]: 2, [s.CurrencyCodes.HNL]: 2, [s.CurrencyCodes.HRK]: 2, [s.CurrencyCodes.HTG]: 2, [s.CurrencyCodes.HUF]: 2, [s.CurrencyCodes.IDR]: 2, [s.CurrencyCodes.ILS]: 2, [s.CurrencyCodes.INR]: 2, [s.CurrencyCodes.IQD]: 3, [s.CurrencyCodes.IRR]: 2, [s.CurrencyCodes.ISK]: 0, [s.CurrencyCodes.JMD]: 2, [s.CurrencyCodes.JOD]: 3, [s.CurrencyCodes.JPY]: 0, [s.CurrencyCodes.KES]: 2, [s.CurrencyCodes.KGS]: 2, [s.CurrencyCodes.KHR]: 2, [s.CurrencyCodes.KMF]: 0, [s.CurrencyCodes.KPW]: 2, [s.CurrencyCodes.KRW]: 0, [s.CurrencyCodes.KWD]: 3, [s.CurrencyCodes.KYD]: 2, [s.CurrencyCodes.KZT]: 2, [s.CurrencyCodes.LAK]: 2, [s.CurrencyCodes.LBP]: 2, [s.CurrencyCodes.LKR]: 2, [s.CurrencyCodes.LRD]: 2, [s.CurrencyCodes.LSL]: 2, [s.CurrencyCodes.LTL]: 2, [s.CurrencyCodes.LVL]: 2, [s.CurrencyCodes.LYD]: 3, [s.CurrencyCodes.MAD]: 2, [s.CurrencyCodes.MDL]: 2, [s.CurrencyCodes.MGA]: 2, [s.CurrencyCodes.MKD]: 2, [s.CurrencyCodes.MMK]: 2, [s.CurrencyCodes.MNT]: 2, [s.CurrencyCodes.MOP]: 2, [s.CurrencyCodes.MRO]: 2, [s.CurrencyCodes.MUR]: 2, [s.CurrencyCodes.MVR]: 2, [s.CurrencyCodes.MWK]: 2, [s.CurrencyCodes.MXN]: 2, [s.CurrencyCodes.MXV]: 2, [s.CurrencyCodes.MYR]: 2, [s.CurrencyCodes.MZN]: 2, [s.CurrencyCodes.NAD]: 2, [s.CurrencyCodes.NGN]: 2, [s.CurrencyCodes.NIO]: 2, [s.CurrencyCodes.NOK]: 2, [s.CurrencyCodes.NPR]: 2, [s.CurrencyCodes.NZD]: 2, [s.CurrencyCodes.OMR]: 3, [s.CurrencyCodes.PAB]: 2, [s.CurrencyCodes.PEN]: 2, [s.CurrencyCodes.PGK]: 2, [s.CurrencyCodes.PHP]: 2, [s.CurrencyCodes.PKR]: 2, [s.CurrencyCodes.PLN]: 2, [s.CurrencyCodes.PYG]: 0, [s.CurrencyCodes.QAR]: 2, [s.CurrencyCodes.RON]: 2, [s.CurrencyCodes.RSD]: 2, [s.CurrencyCodes.RUB]: 2, [s.CurrencyCodes.RWF]: 0, [s.CurrencyCodes.SAR]: 2, [s.CurrencyCodes.SBD]: 2, [s.CurrencyCodes.SCR]: 2, [s.CurrencyCodes.SDG]: 2, [s.CurrencyCodes.SEK]: 2, [s.CurrencyCodes.SGD]: 2, [s.CurrencyCodes.SHP]: 2, [s.CurrencyCodes.SLL]: 2, [s.CurrencyCodes.SOS]: 2, [s.CurrencyCodes.SRD]: 2, [s.CurrencyCodes.SSP]: 2, [s.CurrencyCodes.STD]: 2, [s.CurrencyCodes.SVC]: 2, [s.CurrencyCodes.SYP]: 2, [s.CurrencyCodes.SZL]: 2, [s.CurrencyCodes.THB]: 2, [s.CurrencyCodes.TJS]: 2, [s.CurrencyCodes.TMT]: 2, [s.CurrencyCodes.TND]: 3, [s.CurrencyCodes.TOP]: 2, [s.CurrencyCodes.TRY]: 2, [s.CurrencyCodes.TTD]: 2, [s.CurrencyCodes.TWD]: 2, [s.CurrencyCodes.TZS]: 2, [s.CurrencyCodes.UAH]: 2, [s.CurrencyCodes.UGX]: 0, [s.CurrencyCodes.USD]: 2, [s.CurrencyCodes.USN]: 2, [s.CurrencyCodes.USS]: 2, [s.CurrencyCodes.UYI]: 0, [s.CurrencyCodes.UYU]: 2, [s.CurrencyCodes.UZS]: 2, [s.CurrencyCodes.VEF]: 2, [s.CurrencyCodes.VND]: 0, [s.CurrencyCodes.VUV]: 0, [s.CurrencyCodes.WST]: 2, [s.CurrencyCodes.XAF]: 0, [s.CurrencyCodes.XAG]: 0, [s.CurrencyCodes.XAU]: 0, [s.CurrencyCodes.XBA]: 0, [s.CurrencyCodes.XBB]: 0, [s.CurrencyCodes.XBC]: 0, [s.CurrencyCodes.XBD]: 0, [s.CurrencyCodes.XCD]: 2, [s.CurrencyCodes.XDR]: 0, [s.CurrencyCodes.XFU]: 0, [s.CurrencyCodes.XOF]: 0, [s.CurrencyCodes.XPD]: 0, [s.CurrencyCodes.XPF]: 0, [s.CurrencyCodes.XPT]: 0, [s.CurrencyCodes.XSU]: 0, [s.CurrencyCodes.XTS]: 0, [s.CurrencyCodes.XUA]: 0, [s.CurrencyCodes.YER]: 2, [s.CurrencyCodes.ZAR]: 2, [s.CurrencyCodes.ZMW]: 2, [s.CurrencyCodes.ZWL]: 2 }, l = (e, t) => { let n = o[t]; if (null == n) throw Error("Unexpected currency ".concat(t)); return new(r())(e).dividedBy(10 ** n).toNumber() } }, 731965: function(e, t, n) { "use strict"; n.r(t), n.d(t, { batchUpdates: function() { return r } }); var i = n("699581"); function r(e) { (0, i.unstable_batchedUpdates)(e) } }, 67423: function(e, t, n) { "use strict"; n.r(t), n.d(t, { DISCORD_EPOCH: function() { return s }, SnowflakeSequence: function() { return c }, age: function() { return d }, atPreviousMillisecond: function() { return u }, compare: function() { return _ }, extractTimestamp: function() { return a }, fromTimestamp: function() { return o }, fromTimestampWithSequence: function() { return l } }), n("411104"); var i = n("654861"), r = n.n(i); let s = 14200704e5; function a(e) { return Math.floor(Number(e) / 4194304) + s } function o(e) { let t = e - s; return t <= 0 ? "0" : r()(t).shiftLeft(22).toString() } function l(e, t) { let n = e - s; return r()(n <= 0 ? 0 : n).shiftLeft(22).add(t.next()).toString() } function u(e) { return o(a(e) - 1) } function d(e) { return Date.now() - a(e) } function _(e, t) { return e === t ? 0 : null == t ? 1 : null == e ? -1 : e.length > t.length ? 1 : e.length < t.length ? -1 : e > t ? 1 : -1 } class c { next() { if (this.seq > 4095) throw Error("Snowflake sequence number overflow: ".concat(this.seq)); return this.seq++ } reset() { this.seq = 0 } constructor() { var e, t, n; e = this, n = void 0, (t = "seq") in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, this.seq = 0 } } }, 47770: function(e, t, n) { "use strict"; n.r(t), n.d(t, { default: function() { return r } }), n("47120"); var i = n("836560"); class r { on(e, t) { this.emitter.on(e, t) } off(e, t) { this.emitter.off(e, t) } once(e, t) { this.emitter.once(e, t) } addListener(e, t) { this.emitter.addListener(e, t) } removeListener(e, t) { this.emitter.removeListener(e, t) } removeAllListeners() { this.emitter.removeAllListeners() } emit(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i]; this.emitter.emit(e, ...n) } emitUnsafe(e) { for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), i = 1; i < t; i++) n[i - 1] = arguments[i]; this.emitter.emit(e, ...n) } listenerCount(e) { return this.emitter.listenerCount(e) } constructor() { var e, t, n; e = this, t = "emitter", n = new i.EventEmitter, t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n } } }, 986529: function(e, t, n) { "use strict"; var i; function r(e) {} function s(e, t) {} n.r(t), n.d(t, { mark: function() { return r }, measure: function() { return s } }), n.g.performance }, 319322: function(e, t, n) { "use strict"; n.r(t), n("47120"), n("309749"); var i = n("328865"); n("2831"); var r = n("264344"), s = n.n(r); function a(e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e } window.platform = s(), null == window.ResizeObserver && (window.ResizeObserver = i.ResizeObserver), "object" != typeof globalThis && (window.globalThis = window), Map.prototype.toJSON = function() { return Array.from(this) }, Set.prototype.toJSON = function() { return Array.from(this) }; { class e { static fromPoint(t) { return new e(t.x, t.y, void 0 !== t.z ? t.z : 0, void 0 !== t.w ? t.w : 1) } matrixTransform(t) { return (t.is2D || t instanceof SVGMatrix) && 0 === this.z && 1 === this.w ? new e(this.x * t.a + this.y * t.c + t.e, this.x * t.b + this.y * t.d + t.f, 0, 1) : new e(this.x * t.m11 + this.y * t.m21 + this.z * t.m31 + this.w * t.m41, this.x * t.m12 + this.y * t.m22 + this.z * t.m32 + this.w * t.m42, this.x * t.m13 + this.y * t.m23 + this.z * t.m33 + this.w * t.m43, this.x * t.m14 + this.y * t.m24 + this.z * t.m34 + this.w * t.m44) } toJSON() { return { x: this.x, y: this.y, z: this.z, w: this.w } } constructor(e = 0, t = 0, n = 0, i = 1) { a(this, "x", void 0), a(this, "y", void 0), a(this, "z", void 0), a(this, "w", void 0), this.x = e, this.y = t, this.z = n, this.w = i } } null == window.DOMPoint && (window.DOMPoint = e) } { class e { static fromRect(t) { return new e(t.x, t.y, t.width, t.height) } get top() { return this.y } get left() { return this.x } get right() { return this.x + this.width } get bottom() { return this.y + this.height } toJSON() { return { x: this.x, y: this.y, width: this.width, height: this.height, top: this.top, left: this.left, right: this.right, bottom: this.bottom } } constructor(e = 0, t = 0, n = 0, i = 0) { a(this, "x", void 0), a(this, "y", void 0), a(this, "width", void 0), a(this, "height", void 0), this.x = e, this.y = t, this.width = n, this.height = i } } null == window.DOMRect && (window.DOMRect = e) } null == window.TextEncoder && n("251171") }, 635957: function(e) { e.exports = "#violation-overlay" }, 603882: function() {}, 223686: function() {}, 865605: function() {}, 888448: function() {}, 588872: function() {}, 771673: function() {}, 252602: function() {}, 260907: function() {}, 620633: function() {}, 523558: function(e) { "use strict"; e.exports = JSON.parse('{">:(":"angry",">:-(":"angry",">=(":"angry",">=-(":"angry",":\\")":"blush",":-\\")":"blush","=\\")":"blush","=-\\")":"blush","